diff --git a/.clang-tidy b/.clang-tidy index 9293603c71..2f4fa78c09 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -141,39 +141,28 @@ Checks: '*, -cppcoreguidelines-avoid-goto, -hicpp-avoid-goto, -bugprone-branch-clone, - -bugprone-unhandled-self-assignment, - -cert-oop54-cpp, -performance-enum-size, -readability-avoid-nested-conditional-operator, -cppcoreguidelines-prefer-member-initializer, -cppcoreguidelines-explicit-virtual-functions, - -cppcoreguidelines-virtual-class-destructor, -readability-convert-member-functions-to-static, -readability-make-member-function-const, - -bugprone-assignment-in-if-condition, -bugprone-implicit-widening-of-multiplication-result, - -bugprone-incorrect-roundings, - -bugprone-macro-parentheses, -bugprone-multi-level-implicit-pointer-conversion, -bugprone-signed-char-misuse, - -bugprone-too-small-loop-variable, -cppcoreguidelines-avoid-non-const-global-variables, -cppcoreguidelines-use-default-member-init, -hicpp-multiway-paths-covered, -hicpp-named-parameter, - -misc-header-include-cycle, -misc-no-recursion, -performance-no-int-to-ptr, -readability-avoid-return-with-void-value, -readability-avoid-unconditional-preprocessor-if, -readability-delete-null-pointer, - -readability-duplicate-include, -readability-redundant-casting, -readability-redundant-member-init, -readability-reference-to-constructed-temporary, -readability-simplify-boolean-expr, - -bugprone-unsafe-functions, - -cert-msc24-c, -cert-msc32-c, -cert-msc33-c, -cert-msc51-cpp, diff --git a/.claude/skills/commit/SKILL.md b/.claude/skills/commit/SKILL.md new file mode 100644 index 0000000000..bf8e2deab1 --- /dev/null +++ b/.claude/skills/commit/SKILL.md @@ -0,0 +1,34 @@ +--- +name: commit +description: Create a conventional commit for PX4 changes +argument-hint: "[optional: description of changes]" +allowed-tools: Bash, Read, Glob, Grep +--- + +# PX4 Conventional Commit + +Create a git commit in conventional-commit format: `type(scope): description`. + +- **type:** `feat`, `fix`, `refactor`, `perf`, `docs`, `style`, `test`, + `build`, `ci`, `chore`, `revert`. Append `!` before `:` for breaking changes. +- **scope:** the module/driver/area affected — derive from the directory + path of the changed files (`src/modules/ekf2/` → `ekf2`, + `src/drivers/imu/invensense/icm42688p/` → `drivers/icm42688p`, + `.github/workflows/` → `ci`). +- **description:** imperative, concise, ≥5 chars. + +**NEVER add Co-Authored-By Claude Code. No Claude attribution.** + +## Steps + +1. Check branch (`git branch --show-current`). If on `main`, create a feature + branch `/` where `` comes from + `gh api user --jq .login`. +2. Run `git status` and `git diff --staged`. If nothing staged, ask what to stage. +3. Run `make format` (or `./Tools/astyle/fix_code_style.sh `) on changed + C/C++ files. +4. Body (if needed): explain **why**, not what. +5. Check GPG signing: `git config --get user.signingkey`. If set, + `git commit -S -s`; else `git commit -s`. + +If the user provided arguments, use them as context: $ARGUMENTS diff --git a/.claude/skills/pr/SKILL.md b/.claude/skills/pr/SKILL.md new file mode 100644 index 0000000000..6ef9ba0da9 --- /dev/null +++ b/.claude/skills/pr/SKILL.md @@ -0,0 +1,31 @@ +--- +name: pr +description: Create a pull request with conventional commit title and description +argument-hint: "[optional: target branch or description]" +allowed-tools: Bash, Read, Glob, Grep +--- + +# PX4 Pull Request + +**No Claude attribution anywhere (no Co-Authored-By, no "Generated with Claude").** + +## Steps + +1. Check branch. If on `main`, create a feature branch `/` + where `` comes from `gh api user --jq .login`. +2. Gather context: `git status`, `git log --oneline main..HEAD`, + `git diff main...HEAD --stat`, check for remote tracking branch. +3. Sanity-build the targets we care about. Fix any build errors before opening + the PR: + - `make px4_fmu-v6x` — hardware target + - `make px4_sitl` — simulation +4. PR **title:** `type(scope): description` — under 72 chars, covers the + overall change across all commits. This becomes the squash-merge commit + message. +5. PR **body:** start with a plain leading paragraph explaining what the PR does and why. No headings (`## Summary`, `## Test plan`, etc.), no boilerplate, no Claude attribution. Use bullet lists only to enumerate discrete changes; don't force prose into bullets. Describe testing inline if relevant, no separate test plan section. Use markdown (links, code blocks, lists) only when warranted. Keep it concise and well-formatted. + +6. Push with `-u` if needed, then `gh pr create`. Default base is `main` + unless user says otherwise. +7. Return the PR URL. + +If the user provided arguments, use them as context: $ARGUMENTS diff --git a/.claude/skills/rebase-onto-main/SKILL.md b/.claude/skills/rebase-onto-main/SKILL.md new file mode 100644 index 0000000000..04e57882f2 --- /dev/null +++ b/.claude/skills/rebase-onto-main/SKILL.md @@ -0,0 +1,73 @@ +--- +name: rebase-onto-main +description: Rebase a branch onto main, handling squash-merged parent branches cleanly +argument-hint: "[optional: branch name, defaults to current branch]" +allowed-tools: Bash, Read, Glob, Grep, Agent +--- + +# Rebase Branch onto Main + +Rebase the current (or specified) branch onto `main`, correctly handling the case where the branch was built on top of another branch that has since been squash-merged into `main`. + +## Background + +When a parent branch is squash-merged, its individual commits become a single new commit on `main` with a different hash. A normal `git rebase main` will try to replay the parent's original commits, causing messy conflicts. The fix is to **cherry-pick only the commits unique to this branch** onto a fresh branch from `main`. + +## Steps + +1. **Identify the branch.** Use `$ARGUMENTS` if provided, otherwise use the current branch. + +2. **Fetch and update main:** + ``` + git fetch origin main:main + ``` + +3. **Find the merge base** between the branch and `main`: + ``` + git merge-base main + ``` + +4. **List all commits** on the branch since the merge base: + ``` + git log --oneline .. + ``` + +5. **Identify which commits are unique to this branch** vs. inherited from a parent branch. Look for: + - Squash-merged commits on `main` that correspond to a group of commits at the bottom of the branch's history (check PR titles, commit message keywords). + - The boundary commit: the first commit that belongs to *this* branch's work, not the parent's. + - If ALL commits are unique (no parent branch), just do a normal `git rebase main` and skip the rest. + +6. **Create a fresh branch from `main`:** + ``` + git checkout -b -rebase main + ``` + +7. **Cherry-pick only the unique commits** (oldest first): + ``` + git cherry-pick ^.. + ``` + The `A^..B` range means "from the parent of A through B inclusive." + +8. **Handle conflicts** if any arise during cherry-pick. Resolve and `git cherry-pick --continue`. + +9. **Replace the old branch:** + ``` + git branch -m -old + git branch -m -rebase + ``` + +10. **Verify** the result: + ``` + git log --oneline main.. + ``` + Confirm only the expected commits are present. + +11. **Ask the user** before force-pushing. When approved: + ``` + git push origin --force-with-lease + ``` + +12. **Clean up** the old branch: + ``` + git branch -D -old + ``` diff --git a/.claude/skills/review-pr/SKILL.md b/.claude/skills/review-pr/SKILL.md new file mode 100644 index 0000000000..c05189b9ba --- /dev/null +++ b/.claude/skills/review-pr/SKILL.md @@ -0,0 +1,207 @@ +--- +name: review-pr +description: Review a pull request with structured, domain-aware feedback +argument-hint: "" +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 --json number,title,body,baseRefName,headRefName,files,commits,reviewRequests,reviews,author` + - `gh pr checks ` (exit code 8 means some checks are pending, this is normal, not an error) + - `gh pr diff ` -- 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 --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 --approve --body "..."` or `gh pr review --request-changes --body "..."` based on the verdict. If no write access, fall back to `gh pr comment --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 --body "$(cat <<'EOF' ... EOF)"`. Do not post without explicit confirmation. + +If the user provided arguments, use them as context: $ARGUMENTS diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000000..567609b123 --- /dev/null +++ b/.dockerignore @@ -0,0 +1 @@ +build/ diff --git a/.github/ISSUE_TEMPLATE/docs_bug_report.yml b/.github/ISSUE_TEMPLATE/docs_bug_report.yml index 8e53821e7e..efe1d79032 100644 --- a/.github/ISSUE_TEMPLATE/docs_bug_report.yml +++ b/.github/ISSUE_TEMPLATE/docs_bug_report.yml @@ -1,7 +1,7 @@ name: 📑 Documentation Bug report description: Create a report to help us improve the docs -title: "[Docs] [Bug] " -labels: ["Documentation 📑"] +title: "docs(bug): " +labels: ["scope:docs"] body: - type: textarea attributes: diff --git a/.github/actions/build-deb/action.yml b/.github/actions/build-deb/action.yml new file mode 100644 index 0000000000..ca774a53b4 --- /dev/null +++ b/.github/actions/build-deb/action.yml @@ -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@v5 + 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@v5 + 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@v7 + with: + name: ${{ inputs.artifact-name }} + path: build/px4_sitl_${{ inputs.target }}/*.deb + if-no-files-found: error diff --git a/.github/actions/build-gazebo-sitl/action.yml b/.github/actions/build-gazebo-sitl/action.yml new file mode 100644 index 0000000000..aae5a9565a --- /dev/null +++ b/.github/actions/build-gazebo-sitl/action.yml @@ -0,0 +1,21 @@ +name: Build Gazebo Classic SITL +description: Build PX4 firmware and Gazebo Classic plugins with ccache stats + +runs: + using: composite + steps: + - name: Build - PX4 Firmware (SITL) + shell: bash + run: make px4_sitl_default + + - name: Cache - Stats after PX4 Firmware + shell: bash + run: ccache -s + + - name: Build - Gazebo Classic Plugins + shell: bash + run: make px4_sitl_default sitl_gazebo-classic + + - name: Cache - Stats after Gazebo Plugins + shell: bash + run: ccache -s diff --git a/.github/actions/save-ccache/action.yml b/.github/actions/save-ccache/action.yml new file mode 100644 index 0000000000..6c477c70e0 --- /dev/null +++ b/.github/actions/save-ccache/action.yml @@ -0,0 +1,22 @@ +name: Save ccache +description: Print ccache stats and save to cache + +inputs: + cache-primary-key: + description: Primary cache key from setup-ccache output + required: true + +runs: + using: composite + steps: + - name: Cache - Stats + if: always() + shell: bash + run: ccache -s + + - name: Cache - Save ccache + if: always() + uses: actions/cache/save@v5 + with: + path: ~/.ccache + key: ${{ inputs.cache-primary-key }} diff --git a/.github/actions/setup-ccache/action.yml b/.github/actions/setup-ccache/action.yml new file mode 100644 index 0000000000..04b4bd64ef --- /dev/null +++ b/.github/actions/setup-ccache/action.yml @@ -0,0 +1,56 @@ +name: Setup ccache +description: Restore ccache from cache and configure ccache.conf + +inputs: + cache-key-prefix: + description: Cache key prefix (e.g. ccache-sitl) + required: true + max-size: + description: Max ccache size (e.g. 300M) + required: false + default: '300M' + base-dir: + description: ccache base_dir value + required: false + default: '${GITHUB_WORKSPACE}' + install-ccache: + description: Install ccache via apt before configuring + required: false + default: 'false' + +outputs: + cache-primary-key: + description: Primary cache key (pass to save-ccache) + value: ${{ steps.restore.outputs.cache-primary-key }} + +runs: + using: composite + steps: + - name: Cache - Install ccache + if: inputs.install-ccache == 'true' + shell: bash + run: apt-get update && apt-get install -y ccache + + - name: Cache - Restore ccache + id: restore + uses: actions/cache/restore@v5 + with: + path: ~/.ccache + key: ${{ inputs.cache-key-prefix }}-${{ github.ref_name }}-${{ github.sha }} + restore-keys: | + ${{ inputs.cache-key-prefix }}-${{ github.ref_name }}- + ${{ inputs.cache-key-prefix }}-${{ github.base_ref || 'main' }}- + ${{ inputs.cache-key-prefix }}- + + - name: Cache - Configure ccache + shell: bash + run: | + mkdir -p ~/.ccache + echo "base_dir = ${{ inputs.base-dir }}" > ~/.ccache/ccache.conf + echo "compression = true" >> ~/.ccache/ccache.conf + echo "compression_level = 6" >> ~/.ccache/ccache.conf + echo "max_size = ${{ inputs.max-size }}" >> ~/.ccache/ccache.conf + echo "hash_dir = false" >> ~/.ccache/ccache.conf + echo "compiler_check = content" >> ~/.ccache/ccache.conf + ccache -s + ccache -z diff --git a/.github/instructions/board-addition.instructions.md b/.github/instructions/board-addition.instructions.md new file mode 100644 index 0000000000..7fe83f4bfb --- /dev/null +++ b/.github/instructions/board-addition.instructions.md @@ -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) diff --git a/.github/instructions/ci-build.instructions.md b/.github/instructions/ci-build.instructions.md new file mode 100644 index 0000000000..4d7f61ef97 --- /dev/null +++ b/.github/instructions/ci-build.instructions.md @@ -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 diff --git a/.github/instructions/code-review.instructions.md b/.github/instructions/code-review.instructions.md new file mode 100644 index 0000000000..469d741933 --- /dev/null +++ b/.github/instructions/code-review.instructions.md @@ -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 diff --git a/.github/instructions/control.instructions.md b/.github/instructions/control.instructions.md new file mode 100644 index 0000000000..1afa1f55c0 --- /dev/null +++ b/.github/instructions/control.instructions.md @@ -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 diff --git a/.github/instructions/drivers.instructions.md b/.github/instructions/drivers.instructions.md new file mode 100644 index 0000000000..9fd6f630f7 --- /dev/null +++ b/.github/instructions/drivers.instructions.md @@ -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 diff --git a/.github/instructions/estimation.instructions.md b/.github/instructions/estimation.instructions.md new file mode 100644 index 0000000000..16c477d85c --- /dev/null +++ b/.github/instructions/estimation.instructions.md @@ -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) diff --git a/.github/instructions/messages.instructions.md b/.github/instructions/messages.instructions.md new file mode 100644 index 0000000000..add36ebb65 --- /dev/null +++ b/.github/instructions/messages.instructions.md @@ -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 diff --git a/.github/instructions/simulation.instructions.md b/.github/instructions/simulation.instructions.md new file mode 100644 index 0000000000..ca26e87c52 --- /dev/null +++ b/.github/instructions/simulation.instructions.md @@ -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 diff --git a/.github/instructions/system.instructions.md b/.github/instructions/system.instructions.md new file mode 100644 index 0000000000..626efd9f18 --- /dev/null +++ b/.github/instructions/system.instructions.md @@ -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 diff --git a/.github/labeler.yml b/.github/labeler.yml index e4d891c5c6..2449bbcae7 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -3,8 +3,331 @@ # Docs for the syntax in this file can be found at # https://github.com/actions/labeler - -# Add 'Documentation' label to any changes within 'docs' folder or any subfolders -"Documentation 📑": +"scope:boards": - changed-files: - - any-glob-to-any-file: docs/** + - any-glob-to-any-file: + - boards/** + - src/drivers/px4io/** + - src/modules/px4iofirmware/** + +"scope:build-system": +- changed-files: + - any-glob-to-any-file: + - CMakeLists.txt + - Makefile + - Kconfig + - cmake/** + - platforms/*/cmake/** + - platforms/*/Kconfig + - boards/**/Kconfig + - boards/**/*.cmake + - boards/**/*.px4board + +"scope:commander": +- changed-files: + - any-glob-to-any-file: + - src/modules/commander/** + +"scope:control": +- changed-files: + - any-glob-to-any-file: + - src/modules/*_att_control/** + - src/modules/*_rate_control/** + - src/modules/*_pos_control/** + - src/modules/*_mode_manager/** + - src/modules/control_allocator/** + - src/modules/flight_mode_manager/** + - src/modules/fw_lateral_longitudinal_control/** + - src/modules/mc_hover_thrust_estimator/** + - src/modules/mc_nn_control/** + - src/modules/mc_raptor/** + - src/modules/rover_*/** + - src/drivers/actuators/** + - src/drivers/dshot/** + - src/drivers/pwm_out/** + - src/drivers/pca9685_pwm_out/** + - src/drivers/tap_esc/** + +"scope:dependencies": +- changed-files: + - any-glob-to-any-file: + - .gitmodules + - package.xml + - src/modules/mavlink/mavlink/** + - src/modules/uxrce_dds_client/Micro-XRCE-DDS-Client/** + - src/lib/crypto/monocypher/** + - src/lib/heatshrink/heatshrink/** + - platforms/nuttx/NuttX/** + +"scope:docs": +- changed-files: + - any-glob-to-any-file: + - docs/** + - .github/instructions/docs*.md + +"scope:drivers": +- changed-files: + - any-glob-to-any-file: + - src/drivers/** + +"scope:estimation": +- changed-files: + - any-glob-to-any-file: + - src/modules/ekf2/** + - src/modules/local_position_estimator/** + - src/modules/attitude_estimator_q/** + - src/modules/landing_target_estimator/** + - src/modules/mag_bias_estimator/** + - src/modules/gyro_calibration/** + - src/modules/gyro_fft/** + - Tools/ecl_ekf/** + +"scope:infrastructure": +- changed-files: + - any-glob-to-any-file: + - .devcontainer/** + - .github/** + - .vscode/** + - .clang-tidy + - .dockerignore + - Jenkinsfile + - Tools/ci/** + - Tools/docker/** + +"scope:logging": +- changed-files: + - any-glob-to-any-file: + - src/modules/logger/** + - src/modules/replay/** + - src/modules/events/** + - src/modules/hardfault_stream/** + - src/lib/events/** + - Tools/flight_review/** + - Tools/log_encryption/** + +"scope:mavlink": +- changed-files: + - any-glob-to-any-file: + - src/modules/mavlink/** + - src/drivers/telemetry/** + - src/drivers/transponder/** + - Tools/HIL/** + +"scope:middleware": +- changed-files: + - any-glob-to-any-file: + - src/modules/muorb/** + - src/modules/uxrce_dds_client/** + - src/modules/zenoh/** + - src/drivers/cyphal/** + - src/drivers/uavcan/** + - src/drivers/uavcannode/** + - platforms/ros2/** + - msg/translation_node/** + +"scope:navigation": +- changed-files: + - any-glob-to-any-file: + - src/modules/navigator/** + - src/modules/dataman/** + - src/modules/land_detector/** + - src/modules/payload_deliverer/** + - src/lib/collision_prevention/** + - src/lib/geofence/** + - src/lib/landing_slope/** + - src/lib/takeoff/** + - src/lib/weather_vane/** + +"scope:offboard": +- changed-files: + - any-glob-to-any-file: + - src/modules/mavlink/mavlink_offboard.cpp + - src/modules/mavlink/mavlink_receiver.* + - src/modules/mavlink/streams/TRAJECTORY_REPRESENTATION_*.hpp + - src/modules/uxrce_dds_client/** + - src/modules/zenoh/** + - msg/OffboardControlMode.msg + - msg/TrajectorySetpoint.msg + - msg/versioned/TrajectorySetpoint.msg + - msg/versioned/VehicleCommand.msg + - msg/versioned/VehicleCommandAck.msg + +"scope:parameters": +- changed-files: + - any-glob-to-any-file: + - "**/*_params.c" + - "**/*_params.cpp" + - "**/*_params.yaml" + - "**/parameters.c" + - "**/parameters.cpp" + - "**/module.yaml" + - src/lib/parameters/** + - src/modules/param/** + - Tools/param_metadata/** + - ROMFS/px4fmu_common/init.d*/**/*.params + +"scope:release": +- changed-files: + - any-glob-to-any-file: + - docs/**/releases/** + - docs/**/release_process.md + - Tools/packaging/** + - platforms/**/package*.sh + +"scope:sensors": +- changed-files: + - any-glob-to-any-file: + - src/modules/sensors/** + - src/modules/airspeed_selector/** + - src/modules/battery_status/** + - src/modules/esc_battery/** + - src/modules/temperature_compensation/** + - src/drivers/adc/** + - src/drivers/barometer/** + - src/drivers/batt_smbus/** + - src/drivers/differential_pressure/** + - src/drivers/distance_sensor/** + - src/drivers/gnss/** + - src/drivers/gps/** + - src/drivers/hygrometer/** + - src/drivers/imu/** + - src/drivers/ins/** + - src/drivers/irlock/** + - src/drivers/magnetometer/** + - src/drivers/optical_flow/** + - src/drivers/power_monitor/** + - src/drivers/pps_capture/** + - src/drivers/rpm/** + - src/drivers/rpm_capture/** + - src/drivers/smart_battery/** + - src/drivers/tattu_can/** + - src/drivers/temperature_sensor/** + - src/drivers/uwb/** + - src/drivers/wind_sensor/** + +"scope:simulation": +- changed-files: + - any-glob-to-any-file: + - launch/** + - posix-configs/** + - src/modules/simulation/** + - Tools/simulation/** + - ROMFS/px4fmu_common/init.d-posix/** + - platforms/posix/** + +"scope:testing": +- changed-files: + - any-glob-to-any-file: + - integrationtests/** + - test/** + - test_data/** + - validation/** + - src/systemcmds/tests/** + - src/examples/** + - "**/*[Tt]est.*" + - "**/*_test.*" + - "**/test_*.*" + - .github/workflows/*test*.yml + - .github/workflows/checks.yml + - .github/workflows/fuzzing.yml + +"scope:tools": +- changed-files: + - any-glob-to-any-file: + - Tools/** + - msg/tools/** + - src/templates/** + +"scope:uorb": +- changed-files: + - any-glob-to-any-file: + - msg/** + - srv/** + - platforms/common/uORB/** + - src/lib/uORB/** + - Tools/msg/** + - Tools/uorb_graph/** + +"kind:test": +- changed-files: + - any-glob-to-any-file: + - integrationtests/** + - test/** + - test_data/** + - validation/** + - src/systemcmds/tests/** + - "**/*[Tt]est.*" + - "**/*_test.*" + - "**/test_*.*" + +"risk:safety-critical": +- changed-files: + - any-glob-to-any-file: + - src/modules/commander/** + - src/modules/navigator/** + - src/modules/ekf2/** + - src/modules/sensors/** + - src/modules/*_control/** + - src/modules/control_allocator/** + - src/modules/land_detector/** + - src/modules/flight_mode_manager/** + - src/drivers/actuators/** + - src/drivers/imu/** + - src/drivers/ins/** + - src/drivers/pwm_out/** + - src/lib/collision_prevention/** + - src/lib/flight_tasks/** + - src/lib/geofence/** + +"risk:security": +- changed-files: + - any-glob-to-any-file: + - SECURITY.md + - src/drivers/stub_keystore/** + - src/drivers/sw_crypto/** + - src/lib/crypto/** + - Tools/log_encryption/** + - Tools/test_keys/** + +"vehicle:airship": +- changed-files: + - any-glob-to-any-file: + - src/modules/airship_att_control/** + - docs/**/frames_airship/** + +"vehicle:copter": +- changed-files: + - any-glob-to-any-file: + - src/modules/mc_*/** + - docs/**/frames_multicopter/** + - docs/**/complete_vehicles_mc/** + +"vehicle:fixed-wing": +- changed-files: + - any-glob-to-any-file: + - src/modules/fw_*/** + - docs/**/frames_plane/** + - docs/**/flying/fixed_wing* + +"vehicle:rover": +- changed-files: + - any-glob-to-any-file: + - src/modules/rover_*/** + - docs/**/frames_rover/** + +"vehicle:spacecraft": +- changed-files: + - any-glob-to-any-file: + - src/modules/spacecraft/** + +"vehicle:uuv": +- changed-files: + - any-glob-to-any-file: + - src/modules/uuv_*/** + - docs/**/frames_sub/** + +"vehicle:vtol": +- changed-files: + - any-glob-to-any-file: + - src/modules/vtol_att_control/** + - docs/**/frames_vtol/** diff --git a/.github/workflows/build_all_targets.yml b/.github/workflows/build_all_targets.yml index 4c0bc0fcb9..7c30d8bf24 100644 --- a/.github/workflows/build_all_targets.yml +++ b/.github/workflows/build_all_targets.yml @@ -69,32 +69,31 @@ jobs: runs-on: [runs-on,runner=1cpu-linux-x64,image=ubuntu24-full-x64,"run-id=${{ github.run_id }}",spot=false] outputs: matrix: ${{ steps.set-matrix.outputs.matrix }} + seeders: ${{ steps.set-seeders.outputs.seeders }} timestamp: ${{ steps.set-timestamp.outputs.timestamp }} branchname: ${{ steps.set-branch.outputs.branchname }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Cache Python pip - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: ~/.cache/pip key: ${{ runner.os }}-pip-${{ hashFiles('**./Tools/setup/requirements.txt') }} restore-keys: | ${{ runner.os }}-pip- - - name: Update python packaging to avoid canonicalize_version() error - run: | - pip3 install -U packaging - - name: Install Python Dependencies - uses: py-actions/py-dependency-install@v4 - with: - path: "./Tools/setup/requirements.txt" + run: pip3 install -U packaging -r ./Tools/setup/requirements.txt - id: set-matrix name: Generate Build Matrix run: echo "matrix=$(./Tools/ci/generate_board_targets_json.py --group)" >> $GITHUB_OUTPUT + - id: set-seeders + name: Generate Seeder Matrix + run: echo "seeders=$(./Tools/ci/generate_board_targets_json.py --group --seeders)" >> $GITHUB_OUTPUT + - id: set-timestamp name: Save Current Timestamp run: echo "timestamp=$(date +"%Y%m%d%H%M%S")" >> $GITHUB_OUTPUT @@ -116,11 +115,52 @@ jobs: echo "${{ steps.set-branch.outputs.branchname }}" echo "$(./Tools/ci/generate_board_targets_json.py --group --verbose)" + # =========================================================================== + # CACHE SEEDER JOBS + # =========================================================================== + # Build one representative target per chip family to warm the ccache. + # Matrix jobs fall back to these caches via restore-keys when no + # group-specific cache exists yet. If any seeder fails, the build matrix + # does not start, catching common build errors early. + # =========================================================================== + + seed: + name: Seed [${{ matrix.chip_family }}] + needs: group_targets + runs-on: [runs-on,"runner=8cpu-linux-${{ matrix.runner }}","image=ubuntu24-full-${{ matrix.runner }}","run-id=${{ github.run_id }}",spot=false,extras=s3-cache] + strategy: + matrix: ${{ fromJson(needs.group_targets.outputs.seeders) }} + fail-fast: false + container: + image: ${{ matrix.container }} + credentials: + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + steps: + - uses: runs-on/action@v2 + - uses: actions/checkout@v6 + with: + fetch-depth: 1 + - name: Configure Git Safe Directory + run: git config --system --add safe.directory '*' + - uses: ./.github/actions/setup-ccache + id: ccache + with: + cache-key-prefix: ccache-${{ matrix.chip_family }}-${{ matrix.runner }}-seeder + max-size: 400M + - name: Build seed target + run: make ${{ matrix.target }} + - uses: ./.github/actions/save-ccache + if: always() + with: + cache-primary-key: ${{ steps.ccache.outputs.cache-primary-key }} + setup: name: Build [${{ matrix.runner }}][${{ matrix.group }}] # runs-on: ubuntu-latest - runs-on: [runs-on,"runner=8cpu-linux-${{ matrix.runner }}","image=ubuntu24-full-${{ matrix.runner }}","run-id=${{ github.run_id }}",spot=false] - needs: group_targets + runs-on: [runs-on,"runner=4cpu-linux-${{ matrix.runner }}","image=ubuntu24-full-${{ matrix.runner }}","run-id=${{ github.run_id }}",spot=false,extras=s3-cache] + needs: [group_targets, seed] + if: "!failure() && !cancelled()" strategy: matrix: ${{ fromJson(needs.group_targets.outputs.matrix) }} fail-fast: false @@ -131,41 +171,35 @@ jobs: password: ${{ secrets.GITHUB_TOKEN }} steps: - uses: runs-on/action@v2 - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 with: fetch-depth: 0 - - - name: Git ownership workaround + - name: Configure Git Safe Directory run: git config --system --add safe.directory '*' - # ccache key breakdown: - # ccache---- - # ccache---- - # ccache---- - - name: Cache Restore from Key - id: cc_restore - uses: actions/cache/restore@v4 + - name: Cache - Restore ccache + id: ccache-restore + uses: actions/cache/restore@v5 with: path: ~/.ccache - key: ${{ format('ccache-{0}-{1}-{2}', runner.os, matrix.runner, matrix.group) }} + key: ccache-${{ matrix.chip_family }}-${{ matrix.runner }}-${{ matrix.group }}-${{ github.ref_name }}-${{ github.sha }} restore-keys: | - ccache-${{ runner.os }}-${{ matrix.runner }}-${{ matrix.group }}- - ccache-${{ runner.os }}-${{ matrix.runner }}- - ccache-${{ runner.os }}-${{ matrix.runner }}- - ccache-${{ runner.os }}- - ccache- + ccache-${{ matrix.chip_family }}-${{ matrix.runner }}-${{ matrix.group }}-${{ github.ref_name }}- + ccache-${{ matrix.chip_family }}-${{ matrix.runner }}-${{ matrix.group }}-${{ github.base_ref || 'main' }}- + ccache-${{ matrix.chip_family }}-${{ matrix.runner }}-${{ matrix.group }}- + ccache-${{ matrix.chip_family }}-${{ matrix.runner }}- - - name: Cache Config and Stats + - name: Cache - Configure ccache run: | - mkdir -p ~/.ccache - echo "base_dir = ${GITHUB_WORKSPACE}" > ~/.ccache/ccache.conf - echo "compression = true" >> ~/.ccache/ccache.conf - echo "compression_level = 6" >> ~/.ccache/ccache.conf - echo "max_size = 120M" >> ~/.ccache/ccache.conf - echo "hash_dir = false" >> ~/.ccache/ccache.conf - echo "compiler_check = content" >> ~/.ccache/ccache.conf - ccache -s - ccache -z + 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 = ${{ matrix.cache_size }}" >> ~/.ccache/ccache.conf + echo "hash_dir = false" >> ~/.ccache/ccache.conf + echo "compiler_check = content" >> ~/.ccache/ccache.conf + ccache -s + ccache -z - name: Building Artifacts for [${{ matrix.targets }}] run: | @@ -176,23 +210,15 @@ jobs: ./Tools/ci/package_build_artifacts.sh - name: Upload Build Artifacts - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: px4_${{matrix.group}}_build_artifacts path: artifacts/ - - name: Cache Post Build Stats - if: always() - run: | - ccache -s - ccache -z - - - name: Cache Save - if: always() - uses: actions/cache/save@v4 + - uses: ./.github/actions/save-ccache + if: success() with: - path: ~/.ccache - key: ${{ steps.cc_restore.outputs.cache-primary-key }} + cache-primary-key: ${{ steps.ccache-restore.outputs.cache-primary-key }} # =========================================================================== # ARTIFACT UPLOAD JOB @@ -211,7 +237,7 @@ jobs: uploadlocation: ${{ steps.upload-location.outputs.uploadlocation }} steps: - name: Download Artifacts - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v8 with: path: artifacts/ merge-multiple: true @@ -265,5 +291,8 @@ jobs: with: draft: true prerelease: ${{ steps.upload-location.outputs.is_prerelease == 'true' }} - files: artifacts/*.px4 + files: | + artifacts/*.px4 + artifacts/*.deb + artifacts/**/*.sbom.spdx.json name: ${{ steps.upload-location.outputs.uploadlocation }} diff --git a/.github/workflows/build_deb_package.yml b/.github/workflows/build_deb_package.yml new file mode 100644 index 0000000000..2ec0203f36 --- /dev/null +++ b/.github/workflows/build_deb_package.yml @@ -0,0 +1,218 @@ +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@v6 + with: + fetch-depth: 0 + fetch-tags: true + + - 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@v6 + with: + fetch-depth: 0 + fetch-tags: true + + - name: Use AWS regional apt mirror + if: startsWith(runner.name, 'runs-on--') + run: ./Tools/ci/use_aws_apt_mirror.sh + + - name: Cache apt packages + uses: actions/cache@v5 + with: + path: /var/cache/apt/archives + key: apt-${{ matrix.target }}-${{ matrix.codename }}-${{ matrix.arch }}-${{ hashFiles('Tools/setup/ubuntu.sh') }} + restore-keys: apt-${{ matrix.target }}-${{ matrix.codename }}-${{ matrix.arch }}- + + - name: Install dependencies + run: ./Tools/setup/ubuntu.sh --no-nuttx ${{ matrix.setup_flags }} + + - name: Build and package .deb + uses: ./.github/actions/build-deb + with: + target: ${{ matrix.target }} + artifact-name: px4-sitl-debs-${{ matrix.target }}-${{ matrix.codename }}-${{ matrix.arch }} + ccache-key-prefix: deb-ccache-${{ matrix.target }}-${{ matrix.codename }}-${{ matrix.arch }} + + # --------------------------------------------------------------------------- + # Build Docker images from Noble .debs + # --------------------------------------------------------------------------- + build-docker: + name: "Build Image (${{ matrix.image }}/${{ matrix.arch }})" + needs: [setup, build-deb] + runs-on: [runs-on,"runner=4cpu-linux-${{ matrix.runner }}","image=ubuntu24-full-${{ matrix.runner }}","run-id=${{ github.run_id }}",extras=s3-cache,spot=false] + strategy: + fail-fast: false + matrix: + include: + - { image: sih, repo: px4-sitl, target: sih, arch: amd64, runner: x64, platform: "linux/amd64", dockerfile: Dockerfile.sih } + - { image: sih, repo: px4-sitl, target: sih, arch: arm64, runner: arm64, platform: "linux/arm64", dockerfile: Dockerfile.sih } + - { image: gazebo, repo: px4-sitl-gazebo, target: default, arch: amd64, runner: x64, platform: "linux/amd64", dockerfile: Dockerfile.gazebo } + - { image: gazebo, repo: px4-sitl-gazebo, target: default, arch: arm64, runner: arm64, platform: "linux/arm64", dockerfile: Dockerfile.gazebo } + steps: + - uses: runs-on/action@v2 + - uses: actions/checkout@v6 + with: + fetch-depth: 1 + + - name: Download Noble .deb artifact + uses: actions/download-artifact@v8 + 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@v4 + with: + driver: docker-container + platforms: ${{ matrix.platform }} + + - name: Build and push container image + uses: docker/build-push-action@v7 + with: + context: docker-context + file: Tools/packaging/${{ matrix.dockerfile }} + tags: | + px4io/${{ matrix.repo }}:${{ needs.setup.outputs.px4_version }}-${{ matrix.arch }} + px4io/${{ matrix.repo }}:latest-${{ matrix.arch }} + ghcr.io/px4/${{ matrix.repo }}:${{ needs.setup.outputs.px4_version }}-${{ matrix.arch }} + ghcr.io/px4/${{ matrix.repo }}:latest-${{ matrix.arch }} + platforms: ${{ matrix.platform }} + load: false + push: ${{ needs.setup.outputs.should_push == 'true' }} + provenance: false + cache-from: type=gha,scope=sitl-${{ matrix.image }}-${{ matrix.arch }} + cache-to: type=gha,mode=max,scope=sitl-${{ matrix.image }}-${{ matrix.arch }} + + # --------------------------------------------------------------------------- + # Deploy: create multi-arch manifests and push to registries + # --------------------------------------------------------------------------- + deploy: + name: "Deploy (${{ matrix.image }})" + needs: [setup, build-docker] + if: needs.setup.outputs.should_push == 'true' + runs-on: [runs-on,"runner=1cpu-linux-x64","image=ubuntu24-full-x64","run-id=${{ github.run_id }}",extras=s3-cache,spot=false] + strategy: + matrix: + include: + - { image: sih, repo: px4-sitl } + - { image: gazebo, repo: px4-sitl-gazebo } + steps: + - uses: runs-on/action@v2 + + - name: Login to registries + run: | + echo "${{ secrets.DOCKERHUB_TOKEN }}" | docker login -u "${{ secrets.DOCKERHUB_USERNAME }}" --password-stdin + echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u "${{ github.actor }}" --password-stdin + + - name: Create and push multi-arch manifests + run: | + VERSION="${{ needs.setup.outputs.px4_version }}" + + for REGISTRY in px4io ghcr.io/px4; do + IMAGE="${REGISTRY}/${{ matrix.repo }}" + + for TAG in ${VERSION} latest; do + docker manifest create ${IMAGE}:${TAG} \ + --amend ${IMAGE}:${TAG}-arm64 \ + --amend ${IMAGE}:${TAG}-amd64 + + docker manifest annotate ${IMAGE}:${TAG} ${IMAGE}:${TAG}-arm64 --arch arm64 + docker manifest annotate ${IMAGE}:${TAG} ${IMAGE}:${TAG}-amd64 --arch amd64 + + docker manifest push ${IMAGE}:${TAG} + done + done diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml index e43feee8b3..9013ab11f7 100644 --- a/.github/workflows/checks.yml +++ b/.github/workflows/checks.yml @@ -12,49 +12,88 @@ on: paths-ignore: - 'docs/**' +permissions: + contents: read + concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: - build: - runs-on: ubuntu-latest - + gate_checks: + name: Gate Checks [${{ matrix.check }}] + runs-on: [runs-on,runner=2cpu-linux-x64,image=ubuntu24-full-x64,"run-id=${{ github.run_id }}",spot=false,extras=s3-cache] container: - image: px4io/px4-dev:v1.16.0-rc1-258-g0369abd556 - + image: ghcr.io/px4/px4-dev:v1.17.0-rc2 strategy: - fail-fast: false + fail-fast: true matrix: check: [ "check_format", "check_newlines", - "tests", - "tests_coverage", - "px4_fmu-v2_default stack_check", "validate_module_configs", "shellcheck_all", - "NO_NINJA_BUILD=1 px4_fmu-v5_default", - "NO_NINJA_BUILD=1 px4_sitl_default", - "px4_sitl_allyes", "module_documentation", ] - steps: - - uses: actions/checkout@v4 + - uses: runs-on/action@v2 + - uses: actions/checkout@v6 with: - fetch-depth: 0 + fetch-depth: 1 + - name: Configure Git Safe Directory + run: git config --system --add safe.directory '*' - name: Building [${{ matrix.check }}] - run: | - cd "$GITHUB_WORKSPACE" - git config --global --add safe.directory "$GITHUB_WORKSPACE" - make ${{ matrix.check }} + env: + PX4_SBOM_DISABLE: 1 + run: make ${{ matrix.check }} - - name: Uploading Coverage to Codecov.io - if: contains(matrix.check, 'coverage') - uses: codecov/codecov-action@v1 + tests: + name: Unit Tests + runs-on: [runs-on,runner=8cpu-linux-x64,image=ubuntu24-full-x64,"run-id=${{ github.run_id }}",spot=false,extras=s3-cache] + container: + image: ghcr.io/px4/px4-dev:v1.17.0-rc2 + permissions: + contents: write + env: + GIT_COMMITTER_EMAIL: bot@px4.io + GIT_COMMITTER_NAME: PX4BuildBot + steps: + - uses: runs-on/action@v2 + - uses: actions/checkout@v6 with: - token: ${{ secrets.CODECOV_TOKEN }} - flags: unittests - file: coverage/lcov.info + fetch-depth: 1 + - name: Configure Git Safe Directory + run: git config --system --add safe.directory '*' + + - uses: ./.github/actions/setup-ccache + id: ccache + with: + cache-key-prefix: ccache-sitl + max-size: 300M + + - name: Build and run unit tests + env: + PX4_SBOM_DISABLE: 1 + run: make tests + + - uses: ./.github/actions/save-ccache + if: always() + with: + cache-primary-key: ${{ steps.ccache.outputs.cache-primary-key }} + + - name: Auto-update EKF change indication baselines + if: github.event_name == 'push' + uses: stefanzweifel/git-auto-commit-action@v7 + with: + file_pattern: 'src/modules/ekf2/test/change_indication/*.csv' + commit_user_name: ${{ env.GIT_COMMITTER_NAME }} + commit_user_email: ${{ env.GIT_COMMITTER_EMAIL }} + commit_message: | + [AUTO COMMIT] update EKF change indication + + See .github/workflows/checks.yml for more details + + - name: Check for EKF functional changes + run: git diff --exit-code + working-directory: src/modules/ekf2/test/change_indication diff --git a/.github/workflows/clang-tidy.yml b/.github/workflows/clang-tidy.yml index fc3c5a46ea..e62718751a 100644 --- a/.github/workflows/clang-tidy.yml +++ b/.github/workflows/clang-tidy.yml @@ -16,14 +16,21 @@ permissions: contents: read jobs: - clang_tidy: + # Push-to-main: unchanged historical behavior. Single clang build dir + # with BUILD_TESTING=OFF. `make clang-tidy` builds and analyzes every + # TU in compile_commands.json. Test files are not in the DB and + # therefore never analyzed. + clang_tidy_push: name: Clang-Tidy + if: github.event_name != 'pull_request' runs-on: [runs-on, runner=16cpu-linux-x64, "run-id=${{ github.run_id }}", "extras=s3-cache"] container: - image: px4io/px4-dev:v1.17.0-beta1 + image: ghcr.io/px4/px4-dev:v1.17.0-rc2 + permissions: + contents: read steps: - uses: runs-on/action@v2 - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 with: fetch-depth: 0 fetch-tags: true @@ -31,39 +38,124 @@ jobs: - name: Configure Git Safe Directory run: git config --system --add safe.directory '*' - - name: Restore Compiler Cache - id: cc_restore - uses: actions/cache/restore@v4 + - uses: ./.github/actions/setup-ccache + id: ccache with: - path: ~/.ccache - key: ccache-clang-tidy-${{ github.head_ref || github.ref_name }} - restore-keys: | - ccache-clang-tidy-${{ github.head_ref || github.ref_name }}- - ccache-clang-tidy-main- - ccache-clang-tidy- + cache-key-prefix: ccache-clang-tidy + max-size: 150M - - name: Configure Compiler Cache + - name: Build and Analyze - Clang-Tidy + run: make -j$(nproc) clang-tidy + + - uses: ./.github/actions/save-ccache + if: always() + with: + cache-primary-key: ${{ steps.ccache.outputs.cache-primary-key }} + + # Pull request: diff-based analysis with a second BUILD_TESTING=ON + # build dir so test files in the PR diff can be linted by + # clang-tidy-diff-18.py with resolved gtest/fuzztest includes. + # Results are uploaded as a `pr-review` artifact for the PR Review + # Poster workflow to post as inline comments. + clang_tidy_pr: + name: Clang-Tidy + if: github.event_name == 'pull_request' + runs-on: [runs-on, runner=8cpu-linux-x64, "run-id=${{ github.run_id }}", "extras=s3-cache"] + container: + image: ghcr.io/px4/px4-dev:v1.17.0-rc2 + permissions: + contents: read + pull-requests: read + steps: + - uses: runs-on/action@v2 + - uses: actions/checkout@v6 + with: + fetch-depth: 0 + fetch-tags: true + + - name: Configure Git Safe Directory + run: git config --system --add safe.directory '*' + + - uses: ./.github/actions/setup-ccache + id: ccache + with: + cache-key-prefix: ccache-clang-tidy + max-size: 150M + + # fuzztest (enabled via BUILD_TESTING in the -test build dir) pulls + # in abseil via FetchContent, and abseil runs a try_compile with + # fuzztest's -fsanitize=address flags. The px4-dev container ships + # clang but not the clang compiler-rt runtime, so that link fails + # and the configure reports a misleading "pthreads not found". + # libclang-rt-18-dev provides libclang_rt.asan and friends. + - name: Install clang compiler-rt run: | - mkdir -p ~/.ccache - echo "base_dir = ${GITHUB_WORKSPACE}" > ~/.ccache/ccache.conf - echo "compression = true" >> ~/.ccache/ccache.conf - echo "compression_level = 6" >> ~/.ccache/ccache.conf - echo "max_size = 120M" >> ~/.ccache/ccache.conf - echo "hash_dir = false" >> ~/.ccache/ccache.conf - echo "compiler_check = content" >> ~/.ccache/ccache.conf - ccache -s - ccache -z + apt-get update + apt-get install -y --no-install-recommends libclang-rt-18-dev + + # `make clang-ci` prepares both clang build directories: + # - build/px4_sitl_default-clang: full build, BUILD_TESTING=OFF + # (used by run-clang-tidy-pr.py for whole-file analysis of + # changed production code) + # - build/px4_sitl_default-clang-test: configure-only, BUILD_TESTING=ON + # (used by clang-tidy-diff-18.py so test files are in the + # compilation database with resolved gtest/fuzztest includes) + - name: Build clang SITL + run: make -j$(nproc) clang-ci - name: Run Clang-Tidy Analysis - run: make -j16 clang-tidy + run: python3 Tools/ci/run-clang-tidy-pr.py origin/${{ github.base_ref }} - - name: Compiler Cache Stats + # Produce a `pr-review` artifact for the PR Review Poster workflow + # to consume. clang-tidy-diff-18 emits a unified fixes.yml that + # the producer script translates into line-anchored review comments. + - name: Export clang-tidy fixes for PR review if: always() - run: ccache -s + run: | + mkdir -p pr-review + # Drop changed C/C++ source files that are not in + # compile_commands.json for the test-enabled build. Files not + # in the DB are platform-specific sources, vendored code, or + # submodule code we don't own. Feeding them to clang-tidy-diff + # produces false positives from unresolved headers. + python3 Tools/ci/clang-tidy-diff-filter.py \ + --build-dir build/px4_sitl_default-clang-test \ + --base-ref origin/${{ github.base_ref }} \ + --out pr-review/diff.patch + if [ -s pr-review/diff.patch ]; then + clang-tidy-diff-18.py -p1 \ + -path build/px4_sitl_default-clang-test \ + -export-fixes pr-review/fixes.yml \ + -j0 < pr-review/diff.patch || true + else + echo "No analyzable files in diff; skipping clang-tidy-diff" + fi - - name: Save Compiler Cache + - name: Build pr-review artifact if: always() - uses: actions/cache/save@v4 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + python3 Tools/ci/clang-tidy-fixes-to-review.py \ + --fixes pr-review/fixes.yml \ + --repo-root "$GITHUB_WORKSPACE" \ + --repo "$GITHUB_REPOSITORY" \ + --pr-number "${{ github.event.pull_request.number }}" \ + --commit-sha "${{ github.event.pull_request.head.sha }}" \ + --out-dir pr-review \ + --event COMMENT + + - name: Upload pr-review artifact + if: always() + uses: actions/upload-artifact@v7 with: - path: ~/.ccache - key: ${{ steps.cc_restore.outputs.cache-primary-key }} + name: pr-review + path: | + pr-review/manifest.json + pr-review/comments.json + retention-days: 1 + + - uses: ./.github/actions/save-ccache + if: always() + with: + cache-primary-key: ${{ steps.ccache.outputs.cache-primary-key }} diff --git a/.github/workflows/commit_checks.yml b/.github/workflows/commit_checks.yml new file mode 100644 index 0000000000..b3bf0882b8 --- /dev/null +++ b/.github/workflows/commit_checks.yml @@ -0,0 +1,148 @@ +name: Commit Quality + +on: + pull_request: + types: [opened, edited, synchronize, reopened] + +permissions: + contents: read + pull-requests: write + issues: write + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +env: + PR_NUMBER: ${{ github.event.pull_request.number }} + IS_FORK: ${{ github.event.pull_request.head.repo.full_name != github.repository }} + +jobs: + pr-title: + name: PR Title + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v6 + with: + sparse-checkout: Tools/ci + fetch-depth: 1 + + - name: Check PR title + id: check + run: | + python3 Tools/ci/check_pr_title.py "${{ github.event.pull_request.title }}" --markdown-file comment.md && rc=0 || rc=$? + echo "exit_code=$rc" >> "$GITHUB_OUTPUT" + + - name: Post or clear comment + if: env.IS_FORK == 'false' + env: + GH_TOKEN: ${{ github.token }} + run: | + if [ "${{ steps.check.outputs.exit_code }}" != "0" ]; then + python3 Tools/ci/pr_comment.py --marker pr-title --pr "$PR_NUMBER" --result fail < comment.md + else + python3 Tools/ci/pr_comment.py --marker pr-title --pr "$PR_NUMBER" --result pass + fi + + - name: Result + if: steps.check.outputs.exit_code != '0' + run: | + echo "::error::PR title does not follow conventional commits format. See the PR comment for details." + exit 1 + + commit-messages: + name: Commit Messages + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v6 + with: + sparse-checkout: Tools/ci + fetch-depth: 1 + + - name: Check commit messages + id: check + env: + GH_TOKEN: ${{ github.token }} + run: | + gh api \ + "repos/${{ github.repository }}/pulls/${PR_NUMBER}/commits?per_page=100" \ + | python3 Tools/ci/check_commit_messages.py --markdown-file comment.md && rc=0 || rc=$? + echo "exit_code=$rc" >> "$GITHUB_OUTPUT" + # Check for warnings (non-empty markdown on exit 0) + if [ "$rc" -eq 0 ] && [ -s comment.md ]; then + echo "has_warnings=true" >> "$GITHUB_OUTPUT" + else + echo "has_warnings=false" >> "$GITHUB_OUTPUT" + fi + + - name: Post or clear comment + if: env.IS_FORK == 'false' + env: + GH_TOKEN: ${{ github.token }} + run: | + if [ "${{ steps.check.outputs.exit_code }}" != "0" ]; then + python3 Tools/ci/pr_comment.py --marker commit-msgs --pr "$PR_NUMBER" --result fail < comment.md + elif [ "${{ steps.check.outputs.has_warnings }}" == "true" ]; then + python3 Tools/ci/pr_comment.py --marker commit-msgs --pr "$PR_NUMBER" --result warn < comment.md + else + python3 Tools/ci/pr_comment.py --marker commit-msgs --pr "$PR_NUMBER" --result pass + fi + + - name: Result + if: steps.check.outputs.exit_code != '0' + run: | + echo "::error::Commit message errors found. See the PR comment for details." + exit 1 + + pr-body: + name: PR Description + runs-on: ubuntu-latest + steps: + - name: Checkout + if: env.IS_FORK == 'false' + uses: actions/checkout@v6 + with: + sparse-checkout: Tools/ci + fetch-depth: 1 + + - name: Check PR body + id: check + env: + PR_BODY: ${{ github.event.pull_request.body }} + run: | + message="" + if [ -z "$PR_BODY" ]; then + message="PR description is empty. Please add a summary of the changes." + echo "::warning::PR description is empty." + else + cleaned=$(echo "$PR_BODY" | sed 's///g' | tr -d '[:space:]') + if [ -z "$cleaned" ]; then + message="PR description contains only template comments. Please fill in the details." + echo "::warning::PR description contains only template comments." + fi + fi + echo "message=$message" >> "$GITHUB_OUTPUT" + + - name: Post or clear comment + if: env.IS_FORK == 'false' + env: + GH_TOKEN: ${{ github.token }} + run: | + if [ -n "${{ steps.check.outputs.message }}" ]; then + printf '%s\n' \ + "## PR Description (advisory)" \ + "" \ + "This is **not blocking**, but your PR description appears to be empty or incomplete." \ + "" \ + "${{ steps.check.outputs.message }}" \ + "" \ + "A good PR description helps reviewers understand what changed and why." \ + "" \ + "---" \ + "*This comment will be automatically removed once the issue is resolved.*" \ + | python3 Tools/ci/pr_comment.py --marker pr-body --pr "$PR_NUMBER" --result warn + else + python3 Tools/ci/pr_comment.py --marker pr-body --pr "$PR_NUMBER" --result pass + fi diff --git a/.github/workflows/compile_macos.yml b/.github/workflows/compile_macos.yml index 5e011a5bf6..899d21e3a0 100644 --- a/.github/workflows/compile_macos.yml +++ b/.github/workflows/compile_macos.yml @@ -19,49 +19,51 @@ concurrency: jobs: build: runs-on: macos-latest - strategy: - matrix: - config: [ - px4_fmu-v5_default, - px4_sitl - ] steps: - name: install Python 3.10 - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: "3.10" - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 + + - name: Cache - Restore Homebrew Packages + uses: actions/cache@v5 + with: + path: ~/Library/Caches/Homebrew/downloads + key: macos-homebrew-${{ runner.arch }}-${{ hashFiles('Tools/setup/macos.sh') }} + restore-keys: | + macos-homebrew-${{ runner.arch }}- + + - name: Cache - Restore pip Packages + uses: actions/cache@v5 + with: + path: ~/Library/Caches/pip + key: macos-pip-${{ runner.arch }}-${{ hashFiles('Tools/setup/requirements.txt') }} + restore-keys: | + macos-pip-${{ runner.arch }}- - name: setup run: | ./Tools/setup/macos.sh + echo "${{ github.workspace }}/.venv/bin" >> $GITHUB_PATH - - name: Prepare ccache timestamp - id: ccache_cache_timestamp - shell: cmake -P {0} - run: | - string(TIMESTAMP current_date "%Y-%m-%d-%H;%M;%S" UTC) - file(APPEND "$ENV{GITHUB_OUTPUT}" "timestamp=${current_date}\n") - - name: ccache cache files - uses: actions/cache@v4 + - uses: ./.github/actions/setup-ccache + id: ccache with: - path: ~/.ccache - key: macos_${{matrix.config}}-ccache-${{steps.ccache_cache_timestamp.outputs.timestamp}} - restore-keys: macos_${{matrix.config}}-ccache- - - name: setup ccache - run: | - mkdir -p ~/.ccache - echo "base_dir = ${GITHUB_WORKSPACE}" > ~/.ccache/ccache.conf - echo "compression = true" >> ~/.ccache/ccache.conf - echo "compression_level = 6" >> ~/.ccache/ccache.conf - echo "max_size = 40M" >> ~/.ccache/ccache.conf - echo "hash_dir = false" >> ~/.ccache/ccache.conf - ccache -s - ccache -z + cache-key-prefix: ccache-macos + max-size: 200M - - name: make ${{matrix.config}} - run: | - ccache -z - make ${{matrix.config}} - ccache -s + - name: Build px4_sitl + run: make px4_sitl + + - name: Cache - Stats after px4_sitl + run: ccache -s + + - name: Build px4_fmu-v5_default + run: make px4_fmu-v5_default + + - uses: ./.github/actions/save-ccache + if: always() + with: + cache-primary-key: ${{ steps.ccache.outputs.cache-primary-key }} diff --git a/.github/workflows/compile_ubuntu.yml b/.github/workflows/compile_ubuntu.yml index 019081b9f6..e7e9c45f31 100644 --- a/.github/workflows/compile_ubuntu.yml +++ b/.github/workflows/compile_ubuntu.yml @@ -4,9 +4,6 @@ on: push: branches: - 'main' - - 'stable' - - 'beta' - - 'release/**' paths-ignore: - 'docs/**' pull_request: @@ -29,12 +26,13 @@ jobs: fail-fast: false matrix: version: ['ubuntu:22.04', 'ubuntu:24.04'] - runs-on: [runs-on,runner=4cpu-linux-x64,"image=ubuntu24-full-x64","run-id=${{ github.run_id }}",spot=false] + runs-on: [runs-on,runner=4cpu-linux-x64,"image=ubuntu24-full-x64","run-id=${{ github.run_id }}",spot=false,extras=s3-cache] container: image: ${{ matrix.version }} volumes: - /github/workspace:/github/workspace steps: + - uses: runs-on/action@v2 - name: Fix git in container run: | @@ -47,11 +45,28 @@ jobs: apt update && apt install git -y git config --global --add safe.directory $(realpath .) - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - - name: Install Deps, Build, and Make Quick Check - run: | - # we need to install dependencies and build on the same step - # given the stateless nature of docker images - ./Tools/setup/ubuntu.sh - make quick_check + - name: Use AWS regional apt mirror + if: startsWith(runner.name, 'runs-on--') + run: ./Tools/ci/use_aws_apt_mirror.sh + + - name: Install Deps + run: ./Tools/setup/ubuntu.sh + + - uses: ./.github/actions/setup-ccache + id: ccache + with: + cache-key-prefix: ccache-ubuntu-${{ matrix.version }} + max-size: 200M + + - name: Build px4_sitl_default + run: make px4_sitl_default + + - name: Build px4_fmu-v5_default + run: make px4_fmu-v5_default + + - uses: ./.github/actions/save-ccache + if: always() + with: + cache-primary-key: ${{ steps.ccache.outputs.cache-primary-key }} diff --git a/.github/workflows/dev_container.yml b/.github/workflows/dev_container.yml index 8922d636cd..715ddd3930 100644 --- a/.github/workflows/dev_container.yml +++ b/.github/workflows/dev_container.yml @@ -4,9 +4,6 @@ on: push: branches: - 'main' - - 'stable' - - 'beta' - - 'release/**' tags: - 'v*' pull_request: @@ -24,6 +21,11 @@ on: description: 'Container tag (e.g. v1.16.0)' required: true type: string + build_ref: + description: 'Git ref to build from (branch, tag, or SHA). Leave empty to build from the dispatch ref.' + required: false + type: string + default: '' deploy_to_registry: description: 'Whether to push built images to the registry' required: false @@ -45,12 +47,12 @@ jobs: meta_tags: ${{ steps.meta.outputs.tags }} meta_labels: ${{ steps.meta.outputs.labels }} steps: - - uses: runs-on/action@v1 - - uses: actions/checkout@v4 + - uses: runs-on/action@v2 + - uses: actions/checkout@v6 with: - fetch-tags: true - submodules: false + ref: ${{ github.event.inputs.build_ref || github.ref }} fetch-depth: 0 + fetch-tags: true # If manual dispatch, take the user‐provided input - name: Set PX4 Tag Version @@ -64,7 +66,7 @@ jobs: - name: Extract metadata (tags, labels) for Docker id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: images: | ghcr.io/PX4/px4-dev @@ -89,22 +91,22 @@ jobs: runner: x64 runs-on: [runs-on,"runner=4cpu-linux-${{ matrix.runner }}","image=ubuntu24-full-${{ matrix.runner }}","run-id=${{ github.run_id }}",extras=s3-cache,spot=false] steps: - - uses: runs-on/action@v1 - - uses: actions/checkout@v4 + - uses: runs-on/action@v2 + - uses: actions/checkout@v6 with: - fetch-tags: true - submodules: false + ref: ${{ github.event.inputs.build_ref || github.ref }} fetch-depth: 0 + fetch-tags: true - name: Login to Docker Hub - uses: docker/login-action@v3 + uses: docker/login-action@v4 if: ${{ startsWith(github.ref, 'refs/tags/') || (github.event_name == 'workflow_dispatch' && github.event.inputs.deploy_to_registry) }} with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Login to GitHub Container Registry - uses: docker/login-action@v3 + uses: docker/login-action@v4 if: ${{ startsWith(github.ref, 'refs/tags/') || (github.event_name == 'workflow_dispatch' && github.event.inputs.deploy_to_registry) }} with: registry: ghcr.io @@ -112,13 +114,13 @@ jobs: password: ${{ secrets.GITHUB_TOKEN }} - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 with: driver: docker-container platforms: ${{ matrix.platform }} - name: Build and Load Container Image - uses: docker/build-push-action@v6 + uses: docker/build-push-action@v7 id: docker with: context: Tools/setup @@ -130,8 +132,8 @@ jobs: load: false push: ${{ startsWith(github.ref, 'refs/tags/') || (github.event_name == 'workflow_dispatch' && github.event.inputs.deploy_to_registry) }} provenance: false - cache-from: type=gha,version=1,scope=${{ matrix.arch }} - cache-to: type=gha,version=1,mode=max,scope=${{ matrix.arch }} + cache-from: type=gha,scope=${{ matrix.arch }} + cache-to: type=gha,mode=max,scope=${{ matrix.arch }},ignore-error=true deploy: name: Deploy To Registry @@ -140,23 +142,26 @@ jobs: packages: write runs-on: [runs-on,"runner=4cpu-linux-x64","image=ubuntu24-full-x64","run-id=${{ github.run_id }}",extras=s3-cache,spot=false] needs: [build, setup] - if: ${{ startsWith(github.ref, 'refs/tags/') || (github.event_name == 'workflow_dispatch' && github.event.inputs.deploy_to_registry) }} + if: | + !cancelled() && + needs.setup.result == 'success' && + (startsWith(github.ref, 'refs/tags/') || (github.event_name == 'workflow_dispatch' && github.event.inputs.deploy_to_registry == 'true')) steps: - - uses: runs-on/action@v1 - - uses: actions/checkout@v4 + - uses: runs-on/action@v2 + - uses: actions/checkout@v6 with: - fetch-tags: true - submodules: false + ref: ${{ github.event.inputs.build_ref || github.ref }} fetch-depth: 0 + fetch-tags: true - name: Login to Docker Hub - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Login to GitHub Container Registry - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.actor }} @@ -164,10 +169,10 @@ jobs: - name: Verify Images Exist Before Creating Manifest run: | - docker manifest inspect px4io/px4-dev:${{ needs.setup.outputs.px4_version }}-arm64 || echo "⚠️ Warning: No ARM64 image found!" - docker manifest inspect px4io/px4-dev:${{ needs.setup.outputs.px4_version }}-amd64 || echo "⚠️ Warning: No AMD64 image found!" - docker manifest inspect ghcr.io/px4/px4-dev:${{ needs.setup.outputs.px4_version }}-arm64 || echo "⚠️ Warning: No ARM64 image found!" - docker manifest inspect ghcr.io/px4/px4-dev:${{ needs.setup.outputs.px4_version }}-amd64 || echo "⚠️ Warning: No AMD64 image found!" + docker manifest inspect px4io/px4-dev:${{ needs.setup.outputs.px4_version }}-arm64 + docker manifest inspect px4io/px4-dev:${{ needs.setup.outputs.px4_version }}-amd64 + docker manifest inspect ghcr.io/px4/px4-dev:${{ needs.setup.outputs.px4_version }}-arm64 + docker manifest inspect ghcr.io/px4/px4-dev:${{ needs.setup.outputs.px4_version }}-amd64 - name: Create and Push Multi-Arch Manifest for Docker Hub run: | diff --git a/.github/workflows/docs-orchestrator.yml b/.github/workflows/docs-orchestrator.yml index ad4ef6c260..c725fa97ca 100644 --- a/.github/workflows/docs-orchestrator.yml +++ b/.github/workflows/docs-orchestrator.yml @@ -46,8 +46,8 @@ jobs: source_changed: ${{ steps.changes.outputs.source }} docs_changed: ${{ steps.changes.outputs.docs }} steps: - - uses: actions/checkout@v4 - - uses: dorny/paths-filter@v3 + - uses: actions/checkout@v6 + - uses: dorny/paths-filter@v4 id: changes with: filters: | @@ -70,22 +70,19 @@ jobs: contents: read runs-on: [runs-on,runner=4cpu-linux-x64,image=ubuntu24-full-x64,"run-id=${{ github.run_id }}",spot=false,extras=s3-cache] container: - image: px4io/px4-dev:v1.17.0-beta1 + image: ghcr.io/px4/px4-dev:v1.17.0-rc2 steps: - - uses: runs-on/action@v1 - - - name: Checkout - uses: actions/checkout@v4 + - uses: runs-on/action@v2 + - uses: actions/checkout@v6 with: fetch-depth: 0 submodules: recursive - - - name: Git ownership workaround + - name: Configure Git Safe Directory run: git config --system --add safe.directory '*' - name: Cache Restore - ccache id: cache-ccache - uses: actions/cache/restore@v4 + uses: actions/cache/restore@v5 with: path: ~/.ccache key: ccache-docs-metadata-${{ github.sha }} @@ -104,7 +101,7 @@ jobs: CCACHE_DIR: ~/.ccache - name: Cache Save - ccache - uses: actions/cache/save@v4 + uses: actions/cache/save@v5 if: always() with: path: ~/.ccache @@ -116,7 +113,7 @@ jobs: CCACHE_DIR: ~/.ccache - name: Upload metadata artifact - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: pr-metadata path: docs/ @@ -132,12 +129,12 @@ jobs: contents: write runs-on: [runs-on,runner=4cpu-linux-x64,image=ubuntu24-full-x64,"run-id=${{ github.run_id }}",spot=false,extras=s3-cache] container: - image: px4io/px4-dev:v1.17.0-beta1 + image: ghcr.io/px4/px4-dev:v1.17.0-rc2 steps: - - uses: runs-on/action@v1 + - uses: runs-on/action@v2 - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: fetch-depth: 0 submodules: recursive @@ -148,7 +145,7 @@ jobs: - name: Cache Restore - ccache id: cache-ccache - uses: actions/cache/restore@v4 + uses: actions/cache/restore@v5 with: path: ~/.ccache key: ccache-docs-metadata-${{ github.sha }} @@ -167,7 +164,7 @@ jobs: CCACHE_DIR: ~/.ccache - name: Cache Save - ccache - uses: actions/cache/save@v4 + uses: actions/cache/save@v5 if: always() with: path: ~/.ccache @@ -213,25 +210,24 @@ jobs: if: always() && (github.event_name == 'pull_request') permissions: contents: read - pull-requests: write runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: ref: ${{ github.event.pull_request.head.sha }} fetch-depth: 0 - name: Download metadata artifact if: needs.pr-metadata-regen.result == 'success' - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v8 with: name: pr-metadata path: docs/ - name: Get changed doc files id: changed-files - uses: tj-actions/changed-files@v46.0.5 + uses: tj-actions/changed-files@v47 with: json: true write_output_files: true @@ -248,13 +244,13 @@ jobs: cat ./logs/prFiles.json - name: Setup Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: 20 - name: Run filtered link checker (changed files) run: | - npm -g install markdown_link_checker_sc@0.0.138 + npm -g install markdown_link_checker_sc@0.0.144 if [ "$(jq length ./logs/prFiles.json)" -gt 0 ]; then markdown_link_checker_sc \ -r "$GITHUB_WORKSPACE" \ @@ -281,15 +277,35 @@ jobs: > ./logs/link-check-results.md || true cat ./logs/link-check-results.md - - name: Post PR comment with link check results - if: github.event.pull_request.head.repo.full_name == github.repository - uses: marocchino/sticky-pull-request-comment@v2 + - name: Prepare pr-comment artifact + id: prepare-pr-comment + run: | + if [ ! -s ./logs/filtered-link-check-results.md ]; then + echo "No link-check results file; skipping pr-comment artifact." + echo "prepared=false" >> "$GITHUB_OUTPUT" + exit 0 + fi + mkdir -p pr-comment + cp ./logs/filtered-link-check-results.md pr-comment/body.md + cat > pr-comment/manifest.json <", + "mode": "upsert" + } + EOF + echo "prepared=true" >> "$GITHUB_OUTPUT" + + - name: Upload pr-comment artifact + if: steps.prepare-pr-comment.outputs.prepared == 'true' + uses: actions/upload-artifact@v7 with: - header: flaws - path: ./logs/filtered-link-check-results.md + name: pr-comment + path: pr-comment/ + retention-days: 1 - name: Upload link check results - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: link-check-results path: logs/ @@ -313,16 +329,14 @@ jobs: branchname: ${{ steps.set-branch.outputs.branchname }} releaseversion: ${{ steps.set-version.outputs.releaseversion }} steps: - - uses: runs-on/action@v1 - - - name: Checkout - uses: actions/checkout@v4 + - uses: runs-on/action@v2 + - uses: actions/checkout@v6 with: ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} - name: Download metadata artifact (PR) if: github.event_name == 'pull_request' && needs.pr-metadata-regen.result == 'success' - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v8 with: name: pr-metadata path: docs/ @@ -346,7 +360,7 @@ jobs: echo "releaseversion=$version" >> $GITHUB_OUTPUT - name: Setup Node - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: 20 cache: npm @@ -365,7 +379,7 @@ jobs: npm run docs:sitemap - name: Upload artifact - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: px4_docs_build path: docs/.vitepress/dist/ @@ -387,7 +401,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Download Artifact - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v8 with: name: px4_docs_build path: ~/_book diff --git a/.github/workflows/docs_crowdin_download.yml b/.github/workflows/docs_crowdin_download.yml index 9fef0afb0e..3a07dbbc2f 100644 --- a/.github/workflows/docs_crowdin_download.yml +++ b/.github/workflows/docs_crowdin_download.yml @@ -22,7 +22,7 @@ jobs: lc: [ko, uk, zh-CN] # Target languages https://developer.crowdin.com/language-codes/ steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Debug Environment Variables run: | echo "CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_DOCS_PROJECT_ID }}" @@ -34,14 +34,14 @@ jobs: upload_sources: false upload_translations: false download_translations: true - commit_message: New Crowdin translations - ${{ matrix.lc }} + commit_message: 'docs(i18n): PX4 guide translations (Crowdin) - ${{ matrix.lc }}' localization_branch_name: l10n_crowdin_docs_translations_${{ matrix.lc }} crowdin_branch_name: main create_pull_request: true pull_request_base_branch_name: 'main' - pull_request_title: New PX4 guide translations (Crowdin) - ${{ matrix.lc }} - pull_request_body: 'New PX4 guide Crowdin translations by [Crowdin GH Action](https://github.com/crowdin/github-action) for ${{ matrix.lc }}' - pull_request_labels: 'Documentation 📑' + pull_request_title: 'docs(i18n): PX4 guide translations (Crowdin) - ${{ matrix.lc }}' + pull_request_body: 'docs(i18n): PX4 guide Crowdin translations by [Crowdin GH Action](https://github.com/crowdin/github-action) for ${{ matrix.lc }}' + pull_request_labels: 'scope:docs' pull_request_reviewers: hamishwillee download_language: ${{ matrix.lc }} env: diff --git a/.github/workflows/docs_crowdin_upload.yml b/.github/workflows/docs_crowdin_upload.yml index f5ec87a367..d55f459923 100644 --- a/.github/workflows/docs_crowdin_upload.yml +++ b/.github/workflows/docs_crowdin_upload.yml @@ -24,7 +24,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: crowdin push uses: crowdin/github-action@v2 with: diff --git a/.github/workflows/docs_deploy.yml b/.github/workflows/docs_deploy.yml index bdf729b2b3..f5a2ccf3b7 100644 --- a/.github/workflows/docs_deploy.yml +++ b/.github/workflows/docs_deploy.yml @@ -22,12 +22,11 @@ jobs: build: runs-on: [runs-on,runner=4cpu-linux-x64,image=ubuntu24-full-x64,"run-id=${{ github.run_id }}",extras=s3-cache,spot=false] steps: - - uses: runs-on/action@v1 - - name: Checkout - uses: actions/checkout@v4 + - uses: runs-on/action@v2 + - uses: actions/checkout@v6 - name: Setup Node - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: 20 cache: npm @@ -46,7 +45,7 @@ jobs: - name: Upload artifact if: ${{ github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.pull_request.merged) || github.event_name == 'workflow_dispatch' }} - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: px4_docs_build path: docs/.vitepress/dist/ @@ -59,7 +58,7 @@ jobs: steps: - name: Download Artifact - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v8 with: name: px4_docs_build path: ~/_book diff --git a/.github/workflows/ekf_functional_change_indicator.yml b/.github/workflows/ekf_functional_change_indicator.yml deleted file mode 100644 index 11c1970680..0000000000 --- a/.github/workflows/ekf_functional_change_indicator.yml +++ /dev/null @@ -1,35 +0,0 @@ -name: EKF Change Indicator - -on: - pull_request: - branches: - - '**' - paths-ignore: - - 'docs/**' - -# If two events are triggered within a short time in the same PR, cancel the run of the oldest event -concurrency: - group: ${{ github.workflow }}-${{ github.event.pull_request.number }} - cancel-in-progress: true - -jobs: - unit_tests: - runs-on: ubuntu-latest - - container: - image: px4io/px4-dev:v1.16.0-rc1-258-g0369abd556 - - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: main test - run: | - cd "$GITHUB_WORKSPACE" - git config --global --add safe.directory "$GITHUB_WORKSPACE" - make tests TESTFILTER=EKF - - - name: Check if there is a functional change - run: git diff --exit-code - working-directory: src/modules/ekf2/test/change_indication diff --git a/.github/workflows/ekf_update_change_indicator.yml b/.github/workflows/ekf_update_change_indicator.yml deleted file mode 100644 index 6f6e1dde55..0000000000 --- a/.github/workflows/ekf_update_change_indicator.yml +++ /dev/null @@ -1,54 +0,0 @@ -name: EKF Update Change Indicator - -on: - push: - paths-ignore: - - 'docs/**' - -jobs: - unit_tests: - runs-on: ubuntu-latest - - container: - image: px4io/px4-dev:v1.16.0-rc1-258-g0369abd556 - - env: - GIT_COMMITTER_EMAIL: bot@px4.io - GIT_COMMITTER_NAME: PX4BuildBot - - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: main test - run: | - cd "$GITHUB_WORKSPACE" - git config --global --add safe.directory "$GITHUB_WORKSPACE" - make tests TESTFILTER=EKF - - - name: Check if there exists diff and save result in variable - id: diff-check - working-directory: src/modules/ekf2/test/change_indication - run: | - if git diff --quiet; then - echo "CHANGE_INDICATED=false" >> $GITHUB_OUTPUT - else - echo "CHANGE_INDICATED=true" >> $GITHUB_OUTPUT - fi - - - name: auto-commit any changes to change indication - if: steps.diff-check.outputs.CHANGE_INDICATED == 'true' - uses: stefanzweifel/git-auto-commit-action@v4 - with: - file_pattern: 'src/modules/ekf2/test/change_indication/*.csv' - commit_user_name: ${{ env.GIT_COMMITTER_NAME }} - commit_user_email: ${{ env.GIT_COMMITTER_EMAIL }} - commit_message: | - [AUTO COMMIT] update change indication - - See .github/workflows/ekf_update_change_indicator.yml for more details - - - name: if there is a functional change, fail check - if: steps.diff-check.outputs.CHANGE_INDICATED == 'true' - run: exit 1 diff --git a/.github/workflows/failsafe_sim.yml b/.github/workflows/failsafe_sim.yml index 24cdb49550..161d018adb 100644 --- a/.github/workflows/failsafe_sim.yml +++ b/.github/workflows/failsafe_sim.yml @@ -18,7 +18,7 @@ concurrency: jobs: build: - runs-on: ubuntu-latest + runs-on: [runs-on,runner=4cpu-linux-x64,image=ubuntu24-full-x64,"run-id=${{ github.run_id }}",spot=false,extras=s3-cache] defaults: run: shell: bash @@ -29,22 +29,30 @@ jobs: "failsafe_web", ] container: - image: px4io/px4-dev:v1.16.0-rc1-258-g0369abd556 + image: ghcr.io/px4/px4-dev:v1.17.0-rc2 options: --privileged --ulimit core=-1 --security-opt seccomp=unconfined steps: + - uses: runs-on/action@v2 + - uses: actions/checkout@v6 + with: + fetch-depth: 0 + - name: Configure Git Safe Directory + run: git config --system --add safe.directory '*' + - name: Install Node v20.18.0 - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: 20.18.0 - - uses: actions/checkout@v4 + - name: Cache - Restore Emscripten SDK + id: cache-emsdk + uses: actions/cache@v5 with: - fetch-depth: 0 - - - name: Git ownership workaround - run: git config --system --add safe.directory '*' + path: _emscripten_sdk + key: emsdk-4.0.15 - name: Install empscripten + if: steps.cache-emsdk.outputs.cache-hit != 'true' run: | git clone https://github.com/emscripten-core/emsdk.git _emscripten_sdk cd _emscripten_sdk diff --git a/.github/workflows/flash_analysis.yml b/.github/workflows/flash_analysis.yml index 7f126352ab..861053843a 100644 --- a/.github/workflows/flash_analysis.yml +++ b/.github/workflows/flash_analysis.yml @@ -24,9 +24,9 @@ env: jobs: analyze_flash: name: Analyzing ${{ matrix.target }} - runs-on: [runs-on,runner=4cpu-linux-x64,image=ubuntu24-full-x64,"run-id=${{ github.run_id }}",spot=false] + runs-on: [runs-on,runner=4cpu-linux-x64,image=ubuntu24-full-x64,"run-id=${{ github.run_id }}",spot=false,extras=s3-cache] container: - image: px4io/px4-dev:v1.16.0-rc1-258-g0369abd556 + image: ghcr.io/px4/px4-dev:v1.17.0-rc2 strategy: matrix: target: [px4_fmu-v5x, px4_fmu-v6x] @@ -36,25 +36,58 @@ jobs: px4_fmu-v6x-bloaty-output: ${{ steps.gen-output.outputs.px4_fmu-v6x-bloaty-output }} px4_fmu-v6x-bloaty-summary-map: ${{ steps.gen-output.outputs.px4_fmu-v6x-bloaty-summary-map }} steps: - - uses: actions/checkout@v4 + - uses: runs-on/action@v2 + - uses: actions/checkout@v6 with: fetch-depth: 0 submodules: recursive - - - name: Git ownership workaround + - name: Configure Git Safe Directory run: git config --system --add safe.directory '*' + - name: Cache - Restore ccache (current) + id: cache_current + uses: actions/cache/restore@v5 + with: + path: ~/.ccache + key: ccache-flash-${{ matrix.target }}-current-${{ github.ref_name }}-${{ github.sha }} + restore-keys: | + ccache-flash-${{ matrix.target }}-current-${{ github.ref_name }}- + ccache-flash-${{ matrix.target }}-current- + + - name: Cache - Configure ccache + run: | + mkdir -p ~/.ccache + echo "base_dir = ${GITHUB_WORKSPACE}" > ~/.ccache/ccache.conf + echo "compression = true" >> ~/.ccache/ccache.conf + echo "compression_level = 6" >> ~/.ccache/ccache.conf + echo "max_size = 200M" >> ~/.ccache/ccache.conf + echo "hash_dir = false" >> ~/.ccache/ccache.conf + echo "compiler_check = content" >> ~/.ccache/ccache.conf + ccache -s + ccache -z + - name: Build Target run: make ${{ matrix.target }}_flash-analysis - name: Store the ELF with the change run: cp ./build/**/*.elf ./with-change.elf + - name: Cache - Stats after Current Build + run: ccache -s + + - name: Cache - Save ccache (current) + if: always() + uses: actions/cache/save@v5 + with: + path: ~/.ccache + key: ${{ steps.cache_current.outputs.cache-primary-key }} + - name: Clean previous build run: | make clean make distclean make submodulesclean + ccache -C - name: If it's a PR checkout the base branch if: ${{ github.event.pull_request }} @@ -68,12 +101,34 @@ jobs: - name: Update submodules run: make submodulesupdate + - name: Cache - Restore ccache (baseline) + id: cache_baseline + uses: actions/cache/restore@v5 + with: + path: ~/.ccache + key: ccache-flash-${{ matrix.target }}-baseline-${{ github.sha }} + restore-keys: | + ccache-flash-${{ matrix.target }}-baseline- + + - name: Cache - Reset ccache stats + run: ccache -z + - name: Build run: make ${{ matrix.target }}_flash-analysis - name: Store the ELF before the change run: cp ./build/**/*.elf ./before-change.elf + - name: Cache - Stats after Baseline Build + run: ccache -s + + - name: Cache - Save ccache (baseline) + if: always() + uses: actions/cache/save@v5 + with: + path: ~/.ccache + key: ${{ steps.cache_baseline.outputs.cache-primary-key }} + - name: bloaty-action uses: PX4/bloaty-action@v1.0.0 id: bloaty-step @@ -93,9 +148,6 @@ jobs: echo '${{ steps.bloaty-step.outputs.bloaty-summary-map }}' >> $GITHUB_OUTPUT echo "$EOF" >> $GITHUB_OUTPUT - # TODO: - # This part of the workflow is causing errors for forks. We should find a way to fix this and enable it again for forks. - # Track this issue https://github.com/PX4/PX4-Autopilot/issues/24408 post_pr_comment: name: Publish Results runs-on: [runs-on,runner=1cpu-linux-x64,image=ubuntu24-full-x64,"run-id=${{ github.run_id }}"] @@ -105,22 +157,22 @@ jobs: V5X-SUMMARY-MAP-PERC: ${{ fromJSON(fromJSON(needs.analyze_flash.outputs.px4_fmu-v5x-bloaty-summary-map).vm-percentage) }} V6X-SUMMARY-MAP-ABS: ${{ fromJSON(fromJSON(needs.analyze_flash.outputs.px4_fmu-v6x-bloaty-summary-map).vm-absolute) }} V6X-SUMMARY-MAP-PERC: ${{ fromJSON(fromJSON(needs.analyze_flash.outputs.px4_fmu-v6x-bloaty-summary-map).vm-percentage) }} - if: github.event.pull_request && github.event.pull_request.head.repo.full_name == github.repository + if: github.event.pull_request steps: - name: Find Comment - uses: peter-evans/find-comment@v3 + uses: peter-evans/find-comment@v4 id: fc with: issue-number: ${{ github.event.pull_request.number }} comment-author: 'github-actions[bot]' - body-includes: FLASH Analysis + body-includes: '' - name: Set Build Time id: bt run: | echo "timestamp=$(date +'%Y-%m-%dT%H:%M:%S')" >> $GITHUB_OUTPUT - - name: Create or update comment + - name: Write pr-comment artifact # This can't be moved to the job-level conditions, as GH actions don't allow a job-level if condition to access the env. if: | steps.fc.outputs.comment-id != '' || @@ -128,27 +180,46 @@ jobs: env.V5X-SUMMARY-MAP-ABS <= fromJSON(env.MIN_FLASH_NEG_DIFF_FOR_COMMENT) || env.V6X-SUMMARY-MAP-ABS >= fromJSON(env.MIN_FLASH_POS_DIFF_FOR_COMMENT) || env.V6X-SUMMARY-MAP-ABS <= fromJSON(env.MIN_FLASH_NEG_DIFF_FOR_COMMENT) - uses: peter-evans/create-or-update-comment@v4 + run: | + mkdir -p pr-comment + cat > pr-comment/manifest.json <", + "mode": "upsert" + } + EOF + cat > pr-comment/body.md <<'PR_COMMENT_BODY_EOF' + + ## 🔎 FLASH Analysis +
+ px4_fmu-v5x [Total VM Diff: ${{ env.V5X-SUMMARY-MAP-ABS }} byte (${{ env.V5X-SUMMARY-MAP-PERC}} %)] + + ``` + ${{ needs.analyze_flash.outputs.px4_fmu-v5x-bloaty-output }} + ``` +
+ +
+ px4_fmu-v6x [Total VM Diff: ${{ env.V6X-SUMMARY-MAP-ABS }} byte (${{ env.V6X-SUMMARY-MAP-PERC }} %)] + + ``` + ${{ needs.analyze_flash.outputs.px4_fmu-v6x-bloaty-output }} + ``` +
+ + **Updated: _${{ steps.bt.outputs.timestamp }}_** + PR_COMMENT_BODY_EOF + + - name: Upload pr-comment artifact + if: | + steps.fc.outputs.comment-id != '' || + env.V5X-SUMMARY-MAP-ABS >= fromJSON(env.MIN_FLASH_POS_DIFF_FOR_COMMENT) || + env.V5X-SUMMARY-MAP-ABS <= fromJSON(env.MIN_FLASH_NEG_DIFF_FOR_COMMENT) || + env.V6X-SUMMARY-MAP-ABS >= fromJSON(env.MIN_FLASH_POS_DIFF_FOR_COMMENT) || + env.V6X-SUMMARY-MAP-ABS <= fromJSON(env.MIN_FLASH_NEG_DIFF_FOR_COMMENT) + uses: actions/upload-artifact@v7 with: - comment-id: ${{ steps.fc.outputs.comment-id }} - issue-number: ${{ github.event.pull_request.number }} - body: | - ## 🔎 FLASH Analysis -
- px4_fmu-v5x [Total VM Diff: ${{ env.V5X-SUMMARY-MAP-ABS }} byte (${{ env.V5X-SUMMARY-MAP-PERC}} %)] - - ``` - ${{ needs.analyze_flash.outputs.px4_fmu-v5x-bloaty-output }} - ``` -
- -
- px4_fmu-v6x [Total VM Diff: ${{ env.V6X-SUMMARY-MAP-ABS }} byte (${{ env.V6X-SUMMARY-MAP-PERC }} %)] - - ``` - ${{ needs.analyze_flash.outputs.px4_fmu-v6x-bloaty-output }} - ``` -
- - **Updated: _${{ steps.bt.outputs.timestamp }}_** - edit-mode: replace + name: pr-comment + path: pr-comment/ + retention-days: 1 diff --git a/.github/workflows/fuzzing.yml b/.github/workflows/fuzzing.yml index 5fc26f8063..0248b3503e 100644 --- a/.github/workflows/fuzzing.yml +++ b/.github/workflows/fuzzing.yml @@ -12,19 +12,25 @@ env: jobs: Fuzzing: - runs-on: ubuntu-latest + runs-on: [runs-on,runner=4cpu-linux-x64,image=ubuntu24-full-x64,"run-id=${{ github.run_id }}",spot=false,extras=s3-cache] container: image: px4io/px4-dev:v1.16.0-rc2-4-gb67c65bfe6 steps: - - name: Install Dependencies - run: | - apt update && apt install -y clang + - uses: runs-on/action@v2 - - name: Fix git in Container - run: | - git config --global --add safe.directory $(realpath .) + - uses: actions/checkout@v6 - - uses: actions/checkout@v4 + - name: Configure Git Safe Directory + run: git config --system --add safe.directory '*' + + - name: Install clang + run: apt-get update && apt-get install -y clang + + - uses: ./.github/actions/setup-ccache + id: ccache + with: + cache-key-prefix: ccache-sitl + max-size: 300M - name: Build and Run Fuzz Tests run: | @@ -38,7 +44,11 @@ jobs: ./Tools/ci/run_fuzz_tests.sh $fuzz_binary 15m done - # Create a github issue in case of a failure + - uses: ./.github/actions/save-ccache + if: always() + with: + cache-primary-key: ${{ steps.ccache.outputs.cache-primary-key }} + - name: Create Issue if: ${{ failure() }} uses: JasonEtco/create-an-issue@v2 diff --git a/.github/workflows/issue_triage_label.yml b/.github/workflows/issue_triage_label.yml new file mode 100644 index 0000000000..def41e0267 --- /dev/null +++ b/.github/workflows/issue_triage_label.yml @@ -0,0 +1,24 @@ +name: Issue Triage Label + +on: + issues: + types: [opened] + +permissions: + issues: write + +jobs: + add-triage-label: + runs-on: ubuntu-latest + + steps: + - name: Add status:needs-triage label to new issues + uses: actions/github-script@v7 + with: + script: | + await github.rest.issues.addLabels({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.payload.issue.number, + labels: ['status:needs-triage'], + }); diff --git a/.github/workflows/itcm_check.yml b/.github/workflows/itcm_check.yml index 767f69aa7c..242d986646 100644 --- a/.github/workflows/itcm_check.yml +++ b/.github/workflows/itcm_check.yml @@ -22,9 +22,9 @@ concurrency: jobs: check_itcm: name: Checking ${{ matrix.target }} - runs-on: [runs-on,runner=4cpu-linux-x64,image=ubuntu24-full-x64,"run-id=${{ github.run_id }}",spot=false] + runs-on: [runs-on,runner=4cpu-linux-x64,image=ubuntu24-full-x64,"run-id=${{ github.run_id }}",spot=false,extras=s3-cache] container: - image: px4io/px4-dev:v1.16.0-rc1-258-g0369abd556 + image: ghcr.io/px4/px4-dev:v1.17.0-rc2 strategy: fail-fast: false matrix: @@ -46,14 +46,19 @@ jobs: boards/nxp/mr-tropic/nuttx-config/scripts/itcm_functions_includes.ld boards/nxp/mr-tropic/nuttx-config/scripts/itcm_static_functions.ld steps: - - uses: actions/checkout@v4 + - uses: runs-on/action@v2 + - uses: actions/checkout@v6 with: - fetch-depth: 0 - submodules: recursive - - - name: Git ownership workaround + fetch-depth: 1 + - name: Configure Git Safe Directory run: git config --system --add safe.directory '*' + - uses: ./.github/actions/setup-ccache + id: ccache + with: + cache-key-prefix: ccache-itcm-${{ matrix.target }} + max-size: 200M + - name: Build Target run: make ${{ matrix.target }} @@ -65,3 +70,8 @@ jobs: - name: Execute the itcm-check run: python3 Tools/itcm_check.py --elf-file built.elf --script-files ${{ matrix.scripts }} + + - uses: ./.github/actions/save-ccache + if: always() + with: + cache-primary-key: ${{ steps.ccache.outputs.cache-primary-key }} diff --git a/.github/workflows/label.yml b/.github/workflows/label.yml index 1a69cfdbf5..f9341d8ca8 100644 --- a/.github/workflows/label.yml +++ b/.github/workflows/label.yml @@ -1,11 +1,13 @@ -# This workflow will triage pull requests and apply a label based on the -# paths that are modified in the pull request. -# The paths are set up in .github/labeler.yml +# This workflow will triage pull requests and apply labels based on the +# PR title prefix and paths that are modified in the pull request. +# The path labels are set up in .github/labeler.yml # # See: https://github.com/actions/labeler name: Labeler -on: [pull_request_target] +on: + pull_request_target: + types: [opened, edited, synchronize, reopened, ready_for_review] jobs: label: @@ -13,9 +15,45 @@ jobs: runs-on: ubuntu-latest permissions: contents: read + issues: write pull-requests: write steps: - - uses: actions/labeler@v5 + - name: Label PR title type + env: + GH_TOKEN: ${{ github.token }} + GH_REPO: ${{ github.repository }} + PR_NUMBER: ${{ github.event.pull_request.number }} + PR_TITLE: ${{ github.event.pull_request.title }} + run: | + set -euo pipefail + + if [[ ! "$PR_TITLE" =~ ^(feat|fix|docs|style|refactor|perf|test|build|ci|chore|revert)\([a-zA-Z0-9_./-]+\)!?:\ .{5,}$ ]]; then + echo "No conventional commit type detected; Commit Quality validates title format." + exit 0 + fi + + type="${BASH_REMATCH[1]}" + + case "$type" in + feat) label="kind:feature" ;; + fix) label="kind:bug" ;; + refactor) label="kind:refactor" ;; + perf) label="kind:improvement" ;; + test) label="kind:test" ;; + docs|style|build|ci|chore|revert) label="kind:chore" ;; + esac + + current_labels="$(gh pr view "$PR_NUMBER" --json labels --jq '.labels[].name')" + + if grep -Fxq "$label" <<< "$current_labels"; then + echo "PR already has $label." + exit 0 + fi + + echo "Adding $label based on PR title type '$type'." + gh pr edit "$PR_NUMBER" --add-label "$label" + + - uses: actions/labeler@v6 with: repo-token: "${{ secrets.GITHUB_TOKEN }}" diff --git a/.github/workflows/mavros_mission_tests.yml b/.github/workflows/mavros_mission_tests.yml deleted file mode 100644 index 0b1a84f7b3..0000000000 --- a/.github/workflows/mavros_mission_tests.yml +++ /dev/null @@ -1,45 +0,0 @@ -name: MAVROS Mission Tests - -on: - push: - branches: - - 'main' - paths-ignore: - - 'docs/**' - pull_request: - branches: - - '**' - paths-ignore: - - 'docs/**' - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -jobs: - build: - runs-on: ubuntu-latest - - strategy: - fail-fast: false - - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Build SITL and Run Tests (inside old ROS container) - run: | - docker run --rm \ - -v "${GITHUB_WORKSPACE}:/workspace" \ - -w /workspace \ - px4io/px4-dev-ros-melodic:2021-09-08 \ - bash -c ' - git config --global --add safe.directory /workspace - make px4_sitl_default - make px4_sitl_default sitl_gazebo-classic - ./test/rostest_px4_run.sh \ - mavros_posix_test_mission.test \ - mission:=MC_mission_box \ - vehicle:=iris - ' diff --git a/.github/workflows/mavros_offboard_tests.yml b/.github/workflows/mavros_offboard_tests.yml deleted file mode 100644 index dd6b750812..0000000000 --- a/.github/workflows/mavros_offboard_tests.yml +++ /dev/null @@ -1,44 +0,0 @@ -name: MAVROS Offboard Tests - -on: - push: - branches: - - 'main' - paths-ignore: - - 'docs/**' - pull_request: - branches: - - '**' - paths-ignore: - - 'docs/**' - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -jobs: - build: - runs-on: ubuntu-latest - - strategy: - fail-fast: false - - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Build SITL and Run Tests (inside old ROS container) - run: | - docker run --rm \ - -v "${GITHUB_WORKSPACE}:/workspace" \ - -w /workspace \ - px4io/px4-dev-ros-melodic:2021-09-08 \ - bash -c ' - git config --global --add safe.directory /workspace - make px4_sitl_default - make px4_sitl_default sitl_gazebo-classic - ./test/rostest_px4_run.sh \ - mavros_posix_tests_offboard_posctl.test \ - vehicle:=iris - ' diff --git a/.github/workflows/mavros_tests.yml b/.github/workflows/mavros_tests.yml new file mode 100644 index 0000000000..b8df2541d8 --- /dev/null +++ b/.github/workflows/mavros_tests.yml @@ -0,0 +1,73 @@ +name: MAVROS Tests + +on: + push: + branches: + - 'main' + paths-ignore: + - 'docs/**' + pull_request: + branches: + - '**' + paths-ignore: + - 'docs/**' + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + test: + name: "MAVROS ${{ matrix.config.name }}" + runs-on: [runs-on,runner=4cpu-linux-x64,image=ubuntu24-full-x64,"run-id=${{ github.run_id }}",spot=false,extras=s3-cache] + permissions: + contents: read + container: + image: px4io/px4-dev-ros-noetic:2021-09-08 + env: + PX4_SBOM_DISABLE: 1 + strategy: + fail-fast: false + matrix: + config: + - {name: "Mission", test_file: "mavros_posix_test_mission.test", params: "mission:=MC_mission_box vehicle:=iris"} + - {name: "Offboard", test_file: "mavros_posix_tests_offboard_posctl.test", params: "vehicle:=iris"} + steps: + - uses: runs-on/action@v2 + - uses: actions/checkout@v6 + with: + fetch-depth: 1 + - name: Configure Git Safe Directory + run: git config --system --add safe.directory '*' + + - name: Setup - Install Python Test Dependencies + run: pip3 install -r Tools/setup/requirements.txt + + - uses: ./.github/actions/setup-ccache + id: ccache + with: + cache-key-prefix: ccache-sitl-gazebo-classic + max-size: 350M + + - uses: ./.github/actions/build-gazebo-sitl + + - name: Test - MAVROS ${{ matrix.config.name }} + run: | + ./test/rostest_px4_run.sh \ + ${{ matrix.config.test_file }} \ + ${{ matrix.config.params }} + timeout-minutes: 10 + + - uses: ./.github/actions/save-ccache + if: always() + with: + cache-primary-key: ${{ steps.ccache.outputs.cache-primary-key }} + + - name: Upload - Failed Test Logs + if: failure() + uses: actions/upload-artifact@v7 + with: + name: failed-mavros-${{ matrix.config.name }}-logs.zip + path: | + logs/**/**/**/*.log + logs/**/**/**/*.ulg diff --git a/.github/workflows/nuttx_env_config.yml b/.github/workflows/nuttx_env_config.yml deleted file mode 100644 index f05b456bb6..0000000000 --- a/.github/workflows/nuttx_env_config.yml +++ /dev/null @@ -1,46 +0,0 @@ -name: Nuttx Target with extra env config - -on: - push: - branches: - - 'main' - paths-ignore: - - 'docs/**' - pull_request: - branches: - - '**' - paths-ignore: - - 'docs/**' - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -jobs: - build: - runs-on: ubuntu-latest - - container: - image: px4io/px4-dev:v1.16.0-rc1-258-g0369abd556 - - strategy: - matrix: - config: - - px4_fmu-v5_default - - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Build PX4 and Run Test [${{ matrix.config }}] - run: | - cd "$GITHUB_WORKSPACE" - git config --global --add safe.directory "$GITHUB_WORKSPACE" - export PX4_EXTRA_NUTTX_CONFIG='CONFIG_NSH_LOGIN_PASSWORD="test";CONFIG_NSH_CONSOLE_LOGIN=y' - echo "PX4_EXTRA_NUTTX_CONFIG: $PX4_EXTRA_NUTTX_CONFIG" - - make ${{ matrix.config }} nuttx_context - - echo "Check that the config option is set" - grep CONFIG_NSH_LOGIN_PASSWORD build/${{ matrix.config }}/NuttX/nuttx/.config diff --git a/.github/workflows/pr-comment-poster.yml b/.github/workflows/pr-comment-poster.yml new file mode 100644 index 0000000000..eed79c0443 --- /dev/null +++ b/.github/workflows/pr-comment-poster.yml @@ -0,0 +1,155 @@ +name: PR Comment Poster + +# Generic PR comment poster. Any analysis workflow (clang-tidy, flash_analysis, +# fuzz coverage, SITL perf, etc.) can produce a `pr-comment` artifact and this +# workflow will post or update a sticky PR comment with its contents. Designed +# so that analysis jobs running on untrusted fork PRs can still get their +# results posted back to the PR. +# +# ============================================================================== +# SECURITY INVARIANTS +# ============================================================================== +# This workflow runs on `workflow_run` which means it runs in the BASE REPO +# context with a WRITE token, even when the triggering PR comes from a fork. +# That is the entire reason it exists, and also the reason it is a loaded +# footgun. Anyone modifying this file MUST preserve the following invariants: +# +# 1. NEVER check out PR code. No `actions/checkout` with a ref. No git clone +# of a fork branch. No execution of scripts from the downloaded artifact. +# The ONLY things read from the artifact are `manifest.json` and `body.md`, +# and both are treated as opaque data (JSON parsed by the poster script +# and markdown posted verbatim via the GitHub API). +# +# 2. `pr_number` is validated to be a positive integer before use. +# `marker` is validated to be printable ASCII only before use. Validation +# happens inside Tools/ci/pr-comment-poster.py which is checked out from +# the base branch, not from the artifact. +# +# 3. The comment body is passed to the GitHub API as a JSON field, never +# interpolated into a shell command string. +# +# 4. This workflow file lives on the default branch. `workflow_run` only +# loads workflow files from the default branch, so a fork cannot modify +# THIS file as part of a PR. The fork CAN cause this workflow to fire +# by triggering a producer workflow that uploads a `pr-comment` artifact. +# That is intended. +# +# 5. The artifact-name filter (`pr-comment`) is the only gate on which +# workflow runs get processed. Any workflow in this repo that uploads +# an artifact named `pr-comment` is trusted to have written the +# manifest and body itself, NOT copied fork-controlled content into +# them. Producer workflows are responsible for that. +# +# 6. `actions/checkout@v6` below uses NO ref (so it pulls the base branch, +# the default-branch commit this workflow file was loaded from) AND uses +# sparse-checkout to materialize ONLY Tools/ci/pr-comment-poster.py and +# its stdlib-only helper module Tools/ci/_github_helpers.py. The rest of +# the repo never touches the workspace. This is safe: the only files the +# job executes are base-repo Python scripts that were reviewed through +# normal code review, never anything from the PR. +# +# ============================================================================== +# ARTIFACT CONTRACT +# ============================================================================== +# Producers upload an artifact named exactly `pr-comment` containing: +# +# manifest.json: +# { +# "pr_number": 12345, // required, int > 0 +# "marker": "", // required, printable ASCII +# "mode": "upsert" // optional, default "upsert" +# } +# +# body.md: the markdown content of the comment. Posted verbatim. +# +# The `marker` string is used to find an existing comment to update. It MUST +# be unique per producer (e.g. include the producer name). If no existing +# comment contains the marker, a new one is created. If the marker is found +# in an existing comment, that comment is edited in place. +# +# Producers MUST write `pr_number` from their own workflow context +# (`github.event.pull_request.number`) and MUST NOT read it from any +# fork-controlled source. + +on: + workflow_run: + # Producers that may upload a `pr-comment` artifact. When a new producer + # is wired up, add its workflow name here. Runs of workflows not in this + # list will never trigger the poster. Every run of a listed workflow will + # trigger the poster, which will no-op if no `pr-comment` artifact exists. + workflows: + - "FLASH usage analysis" + - "Docs - Orchestrator" + types: + - completed + +permissions: + pull-requests: write + actions: read + contents: read + +jobs: + post: + name: Post PR Comment + runs-on: ubuntu-latest + # Only run for pull_request producer runs. Push-to-main and other + # non-PR triggers would have no comment to post, and silently no-oping + # inside the script made it look like the poster was broken. Gating at + # the job level surfaces those as a clean "Skipped" in the UI instead. + if: >- + github.event.workflow_run.conclusion != 'cancelled' + && github.event.workflow_run.event == 'pull_request' + steps: + # Checkout runs first so the poster script is available AND so that + # actions/checkout@v6's default clean step does not delete the artifact + # zip that the next step writes into the workspace. Sparse-checkout + # restricts the materialized tree to just the poster script. + - name: Checkout poster script only + uses: actions/checkout@v6 + with: + sparse-checkout: | + Tools/ci/pr-comment-poster.py + Tools/ci/_github_helpers.py + sparse-checkout-cone-mode: false + + - name: Download pr-comment artifact + id: download + uses: actions/github-script@v9 + with: + script: | + const artifacts = await github.rest.actions.listWorkflowRunArtifacts({ + owner: context.repo.owner, + repo: context.repo.repo, + run_id: context.payload.workflow_run.id, + }); + const match = artifacts.data.artifacts.find(a => a.name === 'pr-comment'); + if (!match) { + core.info('No pr-comment artifact on this run; nothing to post.'); + core.setOutput('found', 'false'); + return; + } + const download = await github.rest.actions.downloadArtifact({ + owner: context.repo.owner, + repo: context.repo.repo, + artifact_id: match.id, + archive_format: 'zip', + }); + const fs = require('fs'); + fs.writeFileSync('pr-comment.zip', Buffer.from(download.data)); + core.setOutput('found', 'true'); + + - name: Unpack artifact + if: steps.download.outputs.found == 'true' + run: | + mkdir -p pr-comment + unzip -q pr-comment.zip -d pr-comment + + - name: Validate artifact + if: steps.download.outputs.found == 'true' + run: python3 Tools/ci/pr-comment-poster.py validate pr-comment + + - name: Upsert sticky comment + if: steps.download.outputs.found == 'true' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: python3 Tools/ci/pr-comment-poster.py post pr-comment diff --git a/.github/workflows/pr-review-poster.yml b/.github/workflows/pr-review-poster.yml new file mode 100644 index 0000000000..a5651fb239 --- /dev/null +++ b/.github/workflows/pr-review-poster.yml @@ -0,0 +1,179 @@ +name: PR Review Poster + +# Generic PR review-comment poster. Sibling of "PR Comment Poster": that +# workflow posts sticky issue-style comments, this one posts line-anchored +# review comments on the "Files changed" tab. Any analysis workflow that +# wants to flag specific lines can produce a `pr-review` artifact and this +# workflow will dismiss any stale matching review and post a fresh one. +# Designed so analysis jobs running on untrusted fork PRs can still get +# their inline annotations posted back to the PR. +# +# ============================================================================== +# SECURITY INVARIANTS +# ============================================================================== +# This workflow runs on `workflow_run` which means it runs in the BASE REPO +# context with a WRITE token, even when the triggering PR comes from a fork. +# That is the entire reason it exists, and also the reason it is a loaded +# footgun. Anyone modifying this file MUST preserve the following invariants: +# +# 1. NEVER check out PR code. No `actions/checkout` with a ref. No git clone +# of a fork branch. No execution of scripts from the downloaded artifact. +# The ONLY things read from the artifact are `manifest.json` and +# `comments.json`, and both are treated as opaque data (JSON parsed by +# the poster script and the comment fields posted via the GitHub API). +# +# 2. `pr_number` is validated to be a positive integer before use. +# `marker` is validated to be printable ASCII only before use. +# `commit_sha` is validated to be 40 lowercase hex characters. +# `event` is validated against an allowlist of `COMMENT` only. +# `APPROVE` and `REQUEST_CHANGES` are intentionally forbidden: +# bots should not approve PRs, and REQUEST_CHANGES reviews cannot +# be dismissed by the GITHUB_TOKEN under branch protection rules. +# Validation happens inside +# Tools/ci/pr-review-poster.py which is checked out from the base +# branch, not from the artifact. +# +# 3. Comment bodies and the optional summary are passed to the GitHub API +# as JSON fields, never interpolated into a shell command string. +# +# 4. This workflow file lives on the default branch. `workflow_run` only +# loads workflow files from the default branch, so a fork cannot modify +# THIS file as part of a PR. The fork CAN cause this workflow to fire +# by triggering a producer workflow that uploads a `pr-review` +# artifact. That is intended. +# +# 5. The artifact-name filter (`pr-review`) is the only gate on which +# workflow runs get processed. Any workflow in this repo that uploads +# an artifact named `pr-review` is trusted to have written the +# manifest and comments itself, NOT copied fork-controlled content +# into them. Producer workflows are responsible for that. +# +# 6. `actions/checkout@v6` below uses NO ref (so it pulls the base branch, +# the default-branch commit this workflow file was loaded from) AND +# uses sparse-checkout to materialize ONLY +# Tools/ci/pr-review-poster.py and its stdlib-only helper module +# Tools/ci/_github_helpers.py. The rest of the repo never touches the +# workspace. This is safe: the only files the job executes are +# base-repo Python scripts that were reviewed through normal code +# review, never anything from the PR. +# +# 7. Stale-review dismissal is restricted to reviews whose AUTHOR is +# `github-actions[bot]` AND whose body contains the producer's +# marker. A fork PR cannot impersonate the bot login, and cannot +# inject the marker into a human reviewer's body without API +# access. Both filters together prevent the poster from ever +# dismissing a human review. +# +# ============================================================================== +# ARTIFACT CONTRACT +# ============================================================================== +# Producers upload an artifact named exactly `pr-review` containing: +# +# manifest.json: +# { +# "pr_number": 12345, // required, int > 0 +# "marker": "", // required, printable ASCII +# "event": "COMMENT", // required, "COMMENT" only +# "commit_sha": "0123456789abcdef0123456789abcdef01234567", // required, 40 hex chars +# "summary": "Optional review summary text" // optional +# } +# +# comments.json: JSON array of line-anchored review comment objects: +# [ +# {"path": "src/foo.cpp", "line": 42, "side": "RIGHT", "body": "..."}, +# {"path": "src/bar.hpp", "start_line": 10, "line": 15, +# "side": "RIGHT", "start_side": "RIGHT", "body": "..."} +# ] +# +# The `marker` string is used to find an existing matching review to +# dismiss before posting a new one. It MUST be unique per producer (e.g. +# include the producer name). +# +# Producers MUST write `pr_number` and `commit_sha` from their own +# workflow context (`github.event.pull_request.number` and +# `github.event.pull_request.head.sha`) and MUST NOT read either from any +# fork-controlled source. + +on: + workflow_run: + # Producers that may upload a `pr-review` artifact. When a new + # producer is wired up, add its workflow name here. Runs of workflows + # not in this list will never trigger the poster. Every run of a + # listed workflow will trigger the poster, which will no-op if no + # `pr-review` artifact exists. + workflows: + - "Static Analysis" + types: + - completed + +permissions: + pull-requests: write + actions: read + contents: read + +jobs: + post: + name: Post PR Review + runs-on: ubuntu-latest + # Only run for pull_request producer runs. Push-to-main and other + # non-PR triggers have no review to post, so gating at the job level + # surfaces those as a clean "Skipped" in the UI instead of a + # silent no-op buried inside the script. + if: >- + github.event.workflow_run.conclusion != 'cancelled' + && github.event.workflow_run.event == 'pull_request' + steps: + # Checkout runs first so the poster scripts are available AND so + # that actions/checkout@v6's default clean step does not delete the + # artifact zip that the next step writes into the workspace. + # Sparse-checkout restricts the materialized tree to just the + # poster script and its stdlib helper module. + - name: Checkout poster script only + uses: actions/checkout@v6 + with: + sparse-checkout: | + Tools/ci/pr-review-poster.py + Tools/ci/_github_helpers.py + sparse-checkout-cone-mode: false + + - name: Download pr-review artifact + id: download + uses: actions/github-script@v9 + with: + script: | + const artifacts = await github.rest.actions.listWorkflowRunArtifacts({ + owner: context.repo.owner, + repo: context.repo.repo, + run_id: context.payload.workflow_run.id, + }); + const match = artifacts.data.artifacts.find(a => a.name === 'pr-review'); + if (!match) { + core.info('No pr-review artifact on this run; nothing to post.'); + core.setOutput('found', 'false'); + return; + } + const download = await github.rest.actions.downloadArtifact({ + owner: context.repo.owner, + repo: context.repo.repo, + artifact_id: match.id, + archive_format: 'zip', + }); + const fs = require('fs'); + fs.writeFileSync('pr-review.zip', Buffer.from(download.data)); + core.setOutput('found', 'true'); + + - name: Unpack artifact + if: steps.download.outputs.found == 'true' + run: | + mkdir -p pr-review + unzip -q pr-review.zip -d pr-review + + - name: Validate artifact + if: steps.download.outputs.found == 'true' + run: python3 Tools/ci/pr-review-poster.py validate pr-review + + - name: Post PR review + if: steps.download.outputs.found == 'true' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: python3 Tools/ci/pr-review-poster.py post pr-review diff --git a/.github/workflows/python_checks.yml b/.github/workflows/python_checks.yml index c0fdc73e8b..481cb16194 100644 --- a/.github/workflows/python_checks.yml +++ b/.github/workflows/python_checks.yml @@ -14,20 +14,23 @@ on: jobs: build: - runs-on: ubuntu-24.04 + runs-on: [runs-on,runner=1cpu-linux-x64,image=ubuntu24-full-x64,"run-id=${{ github.run_id }}"] steps: - - uses: actions/checkout@v4 + - uses: runs-on/action@v2 + - uses: actions/checkout@v6 with: - fetch-depth: 0 + fetch-depth: 1 - - name: Install Python3 - run: sudo apt-get install python3 python3-setuptools python3-pip -y + - name: Setup Python + uses: actions/setup-python@v6 + with: + python-version: "3.10" - name: Install tools - run: python3 -m pip install mypy types-requests flake8 --break-system-packages + run: pip install mypy types-requests flake8 - name: Check MAVSDK test scripts with mypy - run: $HOME/.local/bin/mypy --strict test/mavsdk_tests/*.py + run: mypy --strict test/mavsdk_tests/*.py - name: Check MAVSDK test scripts with flake8 - run: $HOME/.local/bin/flake8 test/mavsdk_tests/*.py + run: flake8 test/mavsdk_tests/*.py diff --git a/.github/workflows/ros_integration_tests.yml b/.github/workflows/ros_integration_tests.yml index bbcce560d8..14ac57cc97 100644 --- a/.github/workflows/ros_integration_tests.yml +++ b/.github/workflows/ros_integration_tests.yml @@ -23,16 +23,18 @@ concurrency: jobs: build: - runs-on: [runs-on,runner=4cpu-linux-x64,image=ubuntu22-full-x64,"run-id=${{ github.run_id }}",spot=false] + runs-on: [runs-on,runner=8cpu-linux-x64,image=ubuntu24-full-x64,"run-id=${{ github.run_id }}",spot=false,extras=s3-cache] container: image: px4io/px4-dev-ros2-galactic:2021-09-08 options: --privileged --ulimit core=-1 --security-opt seccomp=unconfined + env: + PX4_SBOM_DISABLE: 1 steps: - - uses: actions/checkout@v4 + - uses: runs-on/action@v2 + - uses: actions/checkout@v6 with: - fetch-depth: 0 - - - name: Git Ownership Workaround + fetch-depth: 1 + - name: Configure Git Safe Directory run: git config --system --add safe.directory '*' - name: Update ROS Keys @@ -45,30 +47,21 @@ jobs: run: | apt update && apt install -y gazebo11 libgazebo11-dev gstreamer1.0-plugins-bad gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-ugly libgstreamer-plugins-base1.0-dev - - name: Prepare ccache timestamp - id: ccache_cache_timestamp - shell: cmake -P {0} - run: | - string(TIMESTAMP current_date "%Y-%m-%d-%H;%M;%S" UTC) - message("::set-output name=timestamp::${current_date}") - - name: ccache cache files - uses: actions/cache@v4 + - uses: ./.github/actions/setup-ccache + id: ccache with: - path: ~/.ccache - key: ros_integration_tests-${{matrix.config.build_type}}-ccache-${{steps.ccache_cache_timestamp.outputs.timestamp}} - restore-keys: ros_integration_tests-${{matrix.config.build_type}}-ccache- - - name: setup ccache - run: | - mkdir -p ~/.ccache - echo "base_dir = ${GITHUB_WORKSPACE}" > ~/.ccache/ccache.conf - echo "compression = true" >> ~/.ccache/ccache.conf - echo "compression_level = 6" >> ~/.ccache/ccache.conf - echo "max_size = 300M" >> ~/.ccache/ccache.conf - echo "hash_dir = false" >> ~/.ccache/ccache.conf - ccache -s - ccache -z + cache-key-prefix: ccache-ros-integration + max-size: 400M - - name: Get and build micro-xrce-dds-agent + - name: Cache - Restore Micro-XRCE-DDS Agent + id: cache-xrce-agent + uses: actions/cache@v5 + with: + path: /opt/Micro-XRCE-DDS-Agent + key: xrce-agent-v2.2.1-fastdds-2.8.2-galactic-2021-09-08 + + - name: Build - Micro-XRCE-DDS Agent (v2.2.1) + if: steps.cache-xrce-agent.outputs.cache-hit != 'true' run: | cd /opt git clone --recursive https://github.com/eProsima/Micro-XRCE-DDS-Agent.git @@ -79,17 +72,35 @@ jobs: cd build cmake .. make -j2 - - name: ccache post-run micro-xrce-dds-agent - run: ccache -s - - name: Get and build the ros2 interface library + - name: Cache - Restore PX4 ROS 2 Interface Library Workspace + id: cache-px4-ros2-ws + uses: actions/cache@v5 + with: + path: /opt/px4_ws + # Bump 'v1' when the cached workspace layout changes in a way + # that is not captured by the message/service hash below. + key: px4-ros2-ws-v1-galactic-2021-09-08-${{ hashFiles('msg/*.msg', 'msg/versioned/*.msg', 'srv/*.srv') }} + + - name: Build - PX4 ROS 2 Interface Library + if: steps.cache-px4-ros2-ws.outputs.cache-hit != 'true' shell: bash run: | PX4_DIR="$(pwd)" . /opt/ros/galactic/setup.bash mkdir -p /opt/px4_ws/src cd /opt/px4_ws/src - git clone --recursive https://github.com/Auterion/px4-ros2-interface-lib.git + # On a PR, target the branch we're merging into (main or release/X.Y). + # On a direct push, fall back to the branch we're running on. + BRANCH="${GITHUB_BASE_REF:-$GITHUB_REF_NAME}" + REPO_URL="https://github.com/Auterion/px4-ros2-interface-lib.git" + if git ls-remote --heads "$REPO_URL" "$BRANCH" | grep -q "$BRANCH"; then + echo "Cloning px4-ros2-interface-lib with matching branch: $BRANCH" + git clone --recursive --branch "$BRANCH" "$REPO_URL" + else + echo "Branch '$BRANCH' not found in px4-ros2-interface-lib, using default (main)" + git clone --recursive "$REPO_URL" + fi # Ignore python packages due to compilation issue (can be enabled when updating ROS) touch px4-ros2-interface-lib/px4_ros2_py/COLCON_IGNORE || true touch px4-ros2-interface-lib/examples/python/COLCON_IGNORE || true @@ -98,17 +109,8 @@ jobs: "${PX4_DIR}/Tools/copy_to_ros_ws.sh" "$(pwd)" rm -rf src/translation_node src/px4_msgs_old colcon build --symlink-install - - name: ccache post-run ros workspace - run: ccache -s - - name: Build PX4 - run: make px4_sitl_default - - name: ccache post-run px4/firmware - run: ccache -s - - name: Build SITL Gazebo - run: make px4_sitl_default sitl_gazebo-classic - - name: ccache post-run sitl_gazebo-classic - run: ccache -s + - uses: ./.github/actions/build-gazebo-sitl - name: Core dump settings run: | @@ -120,12 +122,17 @@ jobs: run: | . /opt/px4_ws/install/setup.bash /opt/Micro-XRCE-DDS-Agent/build/MicroXRCEAgent udp4 localhost -p 8888 -v 0 & - test/ros_test_runner.py --verbose --model iris --upload --force-color + test/ros_test_runner.py --verbose --model iris --force-color timeout-minutes: 45 + - uses: ./.github/actions/save-ccache + if: always() + with: + cache-primary-key: ${{ steps.ccache.outputs.cache-primary-key }} + - name: Upload failed logs if: failure() - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: failed-logs.zip path: | diff --git a/.github/workflows/ros_translation_node.yml b/.github/workflows/ros_translation_node.yml index 64bae13f83..6ba3f181eb 100644 --- a/.github/workflows/ros_translation_node.yml +++ b/.github/workflows/ros_translation_node.yml @@ -10,6 +10,9 @@ on: - '**' paths-ignore: - 'docs/**' +permissions: + contents: read + defaults: run: shell: bash @@ -20,8 +23,8 @@ concurrency: jobs: build_and_test: - name: Build and test - runs-on: [runs-on,runner=4cpu-linux-x64,image=ubuntu24-full-x64,"run-id=${{ github.run_id }}",spot=false] + name: Build and test [${{ matrix.config.ros_version }}] + runs-on: [runs-on,runner=4cpu-linux-x64,image=ubuntu24-full-x64,"run-id=${{ github.run_id }}",spot=false,extras=s3-cache] strategy: fail-fast: false matrix: @@ -29,33 +32,43 @@ jobs: - {ros_version: "humble", ubuntu: "jammy"} - {ros_version: "jazzy", ubuntu: "noble"} container: - image: rostooling/setup-ros-docker:ubuntu-${{ matrix.config.ubuntu }}-latest + image: ros:${{ matrix.config.ros_version }}-ros-base-${{ matrix.config.ubuntu }} steps: - - name: Setup ROS 2 (${{ matrix.config.ros_version }}) - uses: ros-tooling/setup-ros@v0.7 - with: - required-ros-distributions: ${{ matrix.config.ros_version }} - - name: Checkout repository - uses: actions/checkout@v4 + - uses: runs-on/action@v2 + - uses: actions/checkout@v6 with: fetch-depth: 0 - - # Workaround for https://github.com/actions/runner/issues/2033 - - name: ownership workaround + - name: Configure Git Safe Directory run: git config --system --add safe.directory '*' + - uses: ./.github/actions/setup-ccache + id: ccache + with: + cache-key-prefix: ccache-ros-translation-${{ matrix.config.ros_version }} + max-size: 150M + base-dir: /ros_ws + install-ccache: 'true' + - name: Check .msg file versioning if: github.event_name == 'pull_request' run: | ./Tools/ci/check_msg_versioning.sh ${{ github.event.pull_request.base.sha }} ${{github.event.pull_request.head.sha}} - - name: Build and test + - name: Build - Translation Node run: | ros_ws=/ros_ws mkdir -p $ros_ws/src ./Tools/copy_to_ros_ws.sh $ros_ws cd $ros_ws source /opt/ros/${{ matrix.config.ros_version }}/setup.sh - colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release --symlink-install --event-handlers=console_cohesion+ - source ./install/setup.sh - ./build/translation_node/translation_node_unit_tests + colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_COMPILER_LAUNCHER=ccache --symlink-install --event-handlers=console_cohesion+ + + - name: Test - Translation Node Unit Tests + run: | + source /ros_ws/install/setup.sh + /ros_ws/build/translation_node/translation_node_unit_tests + + - uses: ./.github/actions/save-ccache + if: always() + with: + cache-primary-key: ${{ steps.ccache.outputs.cache-primary-key }} diff --git a/.github/workflows/sbom_license_check.yml b/.github/workflows/sbom_license_check.yml new file mode 100644 index 0000000000..aeaf1153c2 --- /dev/null +++ b/.github/workflows/sbom_license_check.yml @@ -0,0 +1,42 @@ +name: SBOM License Check + +on: + push: + branches: + - 'main' + - 'release/**' + - 'stable' + paths: + - '.gitmodules' + - 'Tools/ci/license-overrides.yaml' + - 'Tools/ci/generate_sbom.py' + pull_request: + branches: + - '**' + paths: + - '.gitmodules' + - 'Tools/ci/license-overrides.yaml' + - 'Tools/ci/generate_sbom.py' + +permissions: + contents: read + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + verify-licenses: + runs-on: ubuntu-24.04 + + steps: + - uses: actions/checkout@v6 + with: + fetch-depth: 1 + submodules: recursive + + - name: Install PyYAML + run: pip install pyyaml --break-system-packages + + - name: Verify submodule licenses + run: python3 Tools/ci/generate_sbom.py --verify-licenses --source-dir . diff --git a/.github/workflows/sbom_monthly_audit.yml b/.github/workflows/sbom_monthly_audit.yml new file mode 100644 index 0000000000..051dd9afb6 --- /dev/null +++ b/.github/workflows/sbom_monthly_audit.yml @@ -0,0 +1,132 @@ +name: SBOM Monthly Audit + +on: + schedule: + # First Monday of each month at 09:00 UTC + - cron: '0 9 1-7 * 1' + workflow_dispatch: + inputs: + branch: + description: 'Branch to audit (leave empty for current)' + required: false + type: string + +permissions: + contents: read + issues: write + +jobs: + audit: + runs-on: ubuntu-24.04 + + steps: + - uses: actions/checkout@v6 + with: + ref: ${{ inputs.branch || github.ref }} + fetch-depth: 1 + submodules: recursive + + - name: Install PyYAML + run: pip install pyyaml --break-system-packages + + - name: Run license verification + id: verify + continue-on-error: true + run: | + python3 Tools/ci/generate_sbom.py --verify-licenses --source-dir . 2>&1 | tee /tmp/sbom-verify.txt + echo "exit_code=$?" >> "$GITHUB_OUTPUT" + + - name: Check for issues + id: check + run: | + if grep -q "<-- UNRESOLVED" /tmp/sbom-verify.txt; then + echo "has_issues=true" >> "$GITHUB_OUTPUT" + # 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 + echo "has_issues=false" >> "$GITHUB_OUTPUT" + fi + + - name: Create issue if problems found + if: steps.check.outputs.has_issues == 'true' + uses: actions/github-script@v9 + with: + script: | + const fs = require('fs'); + + const fullOutput = fs.readFileSync('/tmp/sbom-verify.txt', 'utf8'); + let issueLines = ''; + try { + issueLines = fs.readFileSync('/tmp/sbom-issues.txt', 'utf8'); + } catch (e) { + issueLines = 'No specific NOASSERTION lines captured.'; + } + let copyleftLines = ''; + try { + copyleftLines = fs.readFileSync('/tmp/sbom-copyleft.txt', 'utf8'); + } catch (e) { + copyleftLines = ''; + } + + const date = new Date().toISOString().split('T')[0]; + const branch = '${{ inputs.branch || github.ref_name }}'; + + // Check for existing open issue to avoid duplicates + const existing = await github.rest.issues.listForRepo({ + owner: context.repo.owner, + repo: context.repo.repo, + labels: 'sbom-audit', + state: 'open', + }); + + if (existing.data.length > 0) { + // Update existing issue with new findings + await github.rest.issues.createComment({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: existing.data[0].number, + body: `## Monthly audit update (${date})\n\nIssues still present:\n\n\`\`\`\n${issueLines}\n\`\`\`\n${copyleftLines ? `\n### Copyleft warnings\n\`\`\`\n${copyleftLines}\n\`\`\`` : ''}`, + }); + return; + } + + await github.rest.issues.create({ + owner: context.repo.owner, + repo: context.repo.repo, + title: `chore(sbom): license audit found NOASSERTION entries on ${branch} (${date})`, + labels: ['sbom-audit'], + assignees: ['mrpollo'], + body: [ + `## SBOM Monthly Audit -- ${branch} -- ${date}`, + '', + 'The automated SBOM license audit found submodules with unresolved licenses.', + '', + '### NOASSERTION entries', + '', + '```', + issueLines, + '```', + '', + copyleftLines ? `### Copyleft warnings\n\n\`\`\`\n${copyleftLines}\n\`\`\`\n` : '', + '### How to fix', + '', + '1. Check the submodule repo for a LICENSE file', + '2. Add an override to `Tools/ci/license-overrides.yaml`', + '3. Run `python3 Tools/ci/generate_sbom.py --verify-licenses --source-dir .` to confirm', + '', + '### Full output', + '', + '
', + 'Click to expand', + '', + '```', + fullOutput, + '```', + '', + '
', + '', + 'cc @mrpollo', + ].join('\n'), + }); diff --git a/.github/workflows/sitl_tests.yml b/.github/workflows/sitl_tests.yml index c114b05cb3..ce44f3d879 100644 --- a/.github/workflows/sitl_tests.yml +++ b/.github/workflows/sitl_tests.yml @@ -24,7 +24,7 @@ concurrency: jobs: build: name: Testing PX4 ${{ matrix.config.model }} - runs-on: [runs-on,runner=4cpu-linux-x64,image=ubuntu22-full-x64,"run-id=${{ github.run_id }}",spot=false] + runs-on: [runs-on,runner=8cpu-linux-x64,image=ubuntu24-full-x64,"run-id=${{ github.run_id }}",spot=false,extras=s3-cache] container: image: px4io/px4-dev-simulation-focal:2021-09-08 options: --privileged --ulimit core=-1 --security-opt seccomp=unconfined @@ -37,52 +37,25 @@ jobs: # transitions). Re-enable once the test infrastructure is stabilized. # - {model: "tailsitter" , latitude: "29.660316", longitude: "-82.316658", altitude: "30", build_type: "RelWithDebInfo" } # Florida # - {model: "standard_vtol", latitude: "47.397742", longitude: "8.545594", altitude: "488", build_type: "Coverage" } # Zurich + env: + PX4_CMAKE_BUILD_TYPE: ${{ matrix.config.build_type }} + PX4_SBOM_DISABLE: 1 steps: - - uses: actions/checkout@v4 + - uses: runs-on/action@v2 + - uses: actions/checkout@v6 with: - fetch-depth: 0 - - - name: Git Ownership Workaround + fetch-depth: 1 + - name: Configure Git Safe Directory run: git config --system --add safe.directory '*' - - id: set-timestamp - name: Set timestamp for cache - run: echo "::set-output name=timestamp::$(date +"%Y%m%d%H%M%S")" - - - name: Cache Key Config - uses: actions/cache@v4 + - uses: ./.github/actions/setup-ccache + id: ccache with: - path: ~/.ccache - key: sitl-ccache-${{ steps.set-timestamp.outputs.timestamp }} - restore-keys: sitl-ccache-${{ steps.set-timestamp.outputs.timestamp }} + cache-key-prefix: ccache-sitl-gazebo-classic + max-size: 350M - - name: Cache Conf Config - run: | - mkdir -p ~/.ccache - echo "base_dir = ${GITHUB_WORKSPACE}" > ~/.ccache/ccache.conf - echo "compression = true" >> ~/.ccache/ccache.conf - echo "compression_level = 6" >> ~/.ccache/ccache.conf - echo "max_size = 120M" >> ~/.ccache/ccache.conf - echo "hash_dir = false" >> ~/.ccache/ccache.conf - ccache -s - ccache -z - - - name: Build PX4 - env: - PX4_CMAKE_BUILD_TYPE: ${{matrix.config.build_type}} - run: make px4_sitl_default - - - name: Cache Post-Run [px4_sitl_default] - run: ccache -s - - - name: Build SITL Gazebo - env: - PX4_CMAKE_BUILD_TYPE: ${{matrix.config.build_type}} - run: make px4_sitl_default sitl_gazebo-classic - - - name: Cache Post-Run [sitl_gazebo-classic] - run: ccache -s + - uses: ./.github/actions/build-gazebo-sitl - name: Download MAVSDK run: wget "https://github.com/mavlink/MAVSDK/releases/download/v$(cat test/mavsdk_tests/MAVSDK_VERSION)/libmavsdk-dev_$(cat test/mavsdk_tests/MAVSDK_VERSION)_ubuntu20.04_amd64.deb" @@ -95,19 +68,19 @@ jobs: PX4_HOME_LAT: ${{matrix.config.latitude}} PX4_HOME_LON: ${{matrix.config.longitude}} PX4_HOME_ALT: ${{matrix.config.altitude}} - PX4_CMAKE_BUILD_TYPE: ${{matrix.config.build_type}} run: | export ulimit -a - name: Build PX4 / MAVSDK tests env: - PX4_CMAKE_BUILD_TYPE: ${{matrix.config.build_type}} DONT_RUN: 1 run: make px4_sitl_default sitl_gazebo-classic mavsdk_tests - - name: Cache Post-Run [px4_sitl_default sitl_gazebo-classic mavsdk_tests] - run: ccache -s + - uses: ./.github/actions/save-ccache + if: always() + with: + cache-primary-key: ${{ steps.ccache.outputs.cache-primary-key }} - name: Core Dump Settings run: | @@ -119,13 +92,12 @@ jobs: PX4_HOME_LAT: ${{matrix.config.latitude}} PX4_HOME_LON: ${{matrix.config.longitude}} PX4_HOME_ALT: ${{matrix.config.altitude}} - PX4_CMAKE_BUILD_TYPE: ${{matrix.config.build_type}} run: test/mavsdk_tests/mavsdk_test_runner.py --speed-factor 10 --abort-early --model ${{matrix.config.model}} test/mavsdk_tests/configs/sitl.json --verbose --force-color timeout-minutes: 45 - name: Upload failed logs if: failure() - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: failed-${{matrix.config.model}}-logs.zip path: | @@ -139,7 +111,7 @@ jobs: - name: Upload PX4 coredump if: failure() && ${{ hashFiles('px4.core') != '' }} - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: coredump path: px4.core @@ -156,7 +128,7 @@ jobs: - name: Upload Coverage Information to Codecov if: contains(matrix.config.build_type, 'Coverage') - uses: codecov/codecov-action@v4 + uses: codecov/codecov-action@v6 with: token: ${{ secrets.CODECOV_TOKEN }} flags: mavsdk diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index 96cfbc5799..0630b66891 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -2,6 +2,7 @@ name: 'Handle stale issues and PRs' on: schedule: - cron: '30 1 * * *' + workflow_dispatch: jobs: stale: @@ -9,7 +10,7 @@ jobs: steps: - uses: actions/stale@v10 with: - operations-per-run: 250 + operations-per-run: 1500 days-before-stale: 90 days-before-close: 30 stale-issue-label: 'stale' diff --git a/.github/workflows/sync_release_to_ros2_interface_lib.yml b/.github/workflows/sync_release_to_ros2_interface_lib.yml new file mode 100644 index 0000000000..6ac613a017 --- /dev/null +++ b/.github/workflows/sync_release_to_ros2_interface_lib.yml @@ -0,0 +1,43 @@ +name: Sync release branch to px4-ros2-interface-lib + +on: + create: + workflow_dispatch: + inputs: + branch: + description: 'Release branch name (e.g. release/1.18)' + required: true + type: string + +permissions: {} + +jobs: + notify-interface-lib: + if: >- + github.repository == 'PX4/PX4-Autopilot' && + ( + (github.event_name == 'create' && github.ref_type == 'branch' && startsWith(github.ref_name, 'release/')) || + github.event_name == 'workflow_dispatch' + ) + runs-on: ubuntu-latest + steps: + - name: Determine branch name + id: params + run: | + if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then + BRANCH="${{ inputs.branch }}" + else + BRANCH="${{ github.ref_name }}" + fi + echo "branch=$BRANCH" >> "$GITHUB_OUTPUT" + echo "Dispatching for branch: $BRANCH" + + - name: Dispatch release branch creation + run: | + BRANCH="${{ steps.params.outputs.branch }}" + curl -s -f -X POST \ + -H "Authorization: token ${{ secrets.PX4BUILTBOT_PERSONAL_ACCESS_TOKEN }}" \ + -H "Accept: application/vnd.github.v3+json" \ + https://api.github.com/repos/Auterion/px4-ros2-interface-lib/dispatches \ + -d "{\"event_type\":\"px4_release_branch\",\"client_payload\":{\"branch\":\"$BRANCH\"}}" + echo "Dispatched px4_release_branch event for $BRANCH" diff --git a/.github/workflows/sync_to_px4_msgs.yml b/.github/workflows/sync_to_px4_msgs.yml index eae00f3b3f..56966ff0e3 100644 --- a/.github/workflows/sync_to_px4_msgs.yml +++ b/.github/workflows/sync_to_px4_msgs.yml @@ -20,7 +20,7 @@ jobs: runs-on: [runs-on,runner=4cpu-linux-x64,image=ubuntu22-full-x64,"run-id=${{ github.run_id }}",spot=false] steps: - name: Checkout PX4 repo - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Setup git credentials run: | diff --git a/.github/workflows/tag_px4_msgs_from_px4_release_tag.yml b/.github/workflows/tag_px4_msgs_from_px4_release_tag.yml new file mode 100644 index 0000000000..f189a98ab8 --- /dev/null +++ b/.github/workflows/tag_px4_msgs_from_px4_release_tag.yml @@ -0,0 +1,135 @@ +name: Tag px4_msgs from PX4 release tags + +on: + push: + tags: + - 'v*.*.*' + workflow_dispatch: + inputs: + tag_name: + description: 'PX4 tag to propagate (example: v1.17.0)' + required: true + type: string + +permissions: + contents: read + +jobs: + tag_px4_msgs: + if: github.repository == 'PX4/PX4-Autopilot' + runs-on: [runs-on,runner=4cpu-linux-x64,image=ubuntu22-full-x64,"run-id=${{ github.run_id }}",spot=false] + env: + TAG_NAME: ${{ github.event_name == 'workflow_dispatch' && inputs.tag_name || github.ref_name }} + steps: + - name: Checkout PX4 repo + uses: actions/checkout@v6 + with: + fetch-depth: 0 + fetch-tags: true + + - name: Setup git credentials + run: | + git config --global user.name "${{ secrets.PX4BUILDBOT_USER }}" + git config --global user.email "${{ secrets.PX4BUILDBOT_EMAIL }}" + + - name: Resolve release branch from tag + id: tag_info + shell: bash + run: | + set -euo pipefail + + if [[ ! "${TAG_NAME}" =~ ^v([0-9]+)\.([0-9]+)\.([0-9]+)$ ]]; then + echo "Tag format is not stable vX.Y.Z, skipping: ${TAG_NAME}" + echo "should_run=false" >> "$GITHUB_OUTPUT" + exit 0 + fi + + echo "should_run=true" >> "$GITHUB_OUTPUT" + + major="${BASH_REMATCH[1]}" + minor="${BASH_REMATCH[2]}" + release_branch="release/${major}.${minor}" + + git show-ref --verify --quiet "refs/heads/${release_branch}" || { + echo "PX4 branch ${release_branch} not found" + exit 1 + } + + tag_date="$(git for-each-ref --format='%(creatordate:iso8601)' "refs/tags/${TAG_NAME}")" + if [[ -z "${tag_date}" ]]; then + echo "Unable to resolve tag date for ${TAG_NAME}" + exit 1 + fi + + echo "release_branch=${release_branch}" >> "$GITHUB_OUTPUT" + echo "tag_date=${tag_date}" >> "$GITHUB_OUTPUT" + + - name: Clone px4_msgs repo + if: steps.tag_info.outputs.should_run == 'true' + run: | + git clone https://${{ secrets.PX4BUILTBOT_PERSONAL_ACCESS_TOKEN }}@github.com/PX4/px4_msgs.git + + - name: Checkout matching px4_msgs release branch + if: steps.tag_info.outputs.should_run == 'true' + shell: bash + run: | + set -euo pipefail + cd px4_msgs + + release_branch="${{ steps.tag_info.outputs.release_branch }}" + if git show-ref --verify --quiet "refs/remotes/origin/${release_branch}"; then + git checkout -B "${release_branch}" "origin/${release_branch}" + else + echo "px4_msgs branch ${release_branch} does not exist" + exit 1 + fi + + - name: Verify msg and srv trees are identical + if: steps.tag_info.outputs.should_run == 'true' + shell: bash + run: | + set -euo pipefail + + release_branch="${{ steps.tag_info.outputs.release_branch }}" + git checkout "${release_branch}" + + # Use the same synchronization logic as sync_to_px4_msgs.yml, + # then verify there are no changes in px4_msgs. + rm -f px4_msgs/msg/*.msg + rm -f px4_msgs/msg/versioned/*.msg + rm -f px4_msgs/srv/*.srv + rm -f px4_msgs/srv/versioned/*.srv + cp msg/*.msg px4_msgs/msg/ + cp msg/versioned/*.msg px4_msgs/msg/ || true + cp srv/*.srv px4_msgs/srv/ + cp srv/versioned/*.srv px4_msgs/srv/ || true + + if ! git -C px4_msgs diff --exit-code -- msg srv; then + echo "Message/service definitions differ between PX4 ${release_branch} and px4_msgs ${release_branch}" + exit 1 + fi + + - name: Create and push tag in px4_msgs + if: steps.tag_info.outputs.should_run == 'true' + shell: bash + run: | + set -euo pipefail + cd px4_msgs + + target="$(git rev-parse HEAD)" + existing_target="$(git rev-parse "refs/tags/${TAG_NAME}^{}" 2>/dev/null || true)" + + if [[ -n "${existing_target}" ]]; then + if [[ "${existing_target}" == "${target}" ]]; then + echo "Tag ${TAG_NAME} already exists on ${target}; nothing to do" + exit 0 + fi + echo "Tag ${TAG_NAME} already exists on ${existing_target}, expected ${target}" + exit 1 + fi + + GIT_COMMITTER_DATE="${{ steps.tag_info.outputs.tag_date }}" \ + git tag -a "${TAG_NAME}" "${target}" \ + -m "PX4 msgs and srvs definitions matching PX4 stable release ${TAG_NAME#v}" + + git push origin "refs/tags/${TAG_NAME}" diff --git a/.gitignore b/.gitignore index fcf982c8df..9f78108fa2 100644 --- a/.gitignore +++ b/.gitignore @@ -112,3 +112,9 @@ keys/ # metadata _emscripten_sdk/ + +# virtual Python environment +.venv + +# Claude Code local settings +.claude/settings.local.json diff --git a/.gitmodules b/.gitmodules index 86cb85c961..af800e888b 100644 --- a/.gitmodules +++ b/.gitmodules @@ -109,3 +109,12 @@ [submodule "src/lib/rl_tools/rl_tools"] path = src/lib/rl_tools/rl_tools url = https://github.com/rl-tools/rl-tools.git +[submodule "libmodal-json"] + path = boards/modalai/voxl2/src/lib/mpa/libmodal-json + url = https://gitlab.com/voxl-public/voxl-sdk/core-libs/libmodal-json.git +[submodule "libmodal-pipe"] + path = boards/modalai/voxl2/src/lib/mpa/libmodal-pipe + url = https://gitlab.com/voxl-public/voxl-sdk/core-libs/libmodal-pipe.git +[submodule "src/modules/simulation/gz_plugins/optical_flow/PX4-OpticalFlow"] + path = src/modules/simulation/gz_plugins/optical_flow/PX4-OpticalFlow + url = https://github.com/PX4/PX4-OpticalFlow.git diff --git a/.vscode/cmake-variants.yaml b/.vscode/cmake-variants.yaml index 461ce2d95b..f41c0af8cb 100644 --- a/.vscode/cmake-variants.yaml +++ b/.vscode/cmake-variants.yaml @@ -336,6 +336,11 @@ CONFIG: buildType: MinSizeRel settings: CONFIG: cuav_x25-evo_default + cuav_x25-super_default: + short: cuav_x25-super + buildType: MinSizeRel + settings: + CONFIG: cuav_x25-super_default cubepilot_cubeorange_test: short: cubepilot_cubeorange buildType: MinSizeRel diff --git a/CITATION.cff b/CITATION.cff new file mode 100644 index 0000000000..c7fe49b33f --- /dev/null +++ b/CITATION.cff @@ -0,0 +1,27 @@ +cff-version: 1.2.0 +title: "PX4 Autopilot" +message: "If you use PX4 in your research, please cite it using this metadata." +type: software +authors: + - family-names: Meier + given-names: Lorenz + - name: "The PX4 Contributors" +repository-code: "https://github.com/PX4/PX4-Autopilot" +url: "https://px4.io" +abstract: >- + PX4 is an open-source autopilot stack for drones and + unmanned vehicles. It supports multirotors, fixed-wing, + VTOL, rovers, and many more platforms. PX4 runs on both + RTOS and POSIX-compatible operating systems. +keywords: + - autopilot + - drone + - uav + - flight-controller + - robotics + - ros2 +license: BSD-3-Clause +identifiers: + - type: doi + value: "10.5281/zenodo.595432" + description: "Zenodo concept DOI (resolves to latest version)" diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000000..88355ff8b8 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,12 @@ +# PX4-Autopilot + +Safety-critical C/C++ flight control firmware for autopilots, plus SITL +simulation and Python tooling. + +- **Commits:** use the `/commit` skill. Conventional commit format with + topic-based scope: `type(scope): description`. +- **Pull requests:** use the `/pr` skill. +- **No Claude attribution** — no `Co-Authored-By: Claude`, no "Generated + with Claude Code" footer. +- **Style:** run `make format` on changed C/C++ before committing; CI + enforces `make check_format`. diff --git a/CMakeLists.txt b/CMakeLists.txt index 7f4ff17ac4..351a209c45 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -229,6 +229,28 @@ endif() # project(px4 CXX C ASM) +# Silence Apple ranlib "has no symbols" warnings. Several PX4 sources are +# wrapped in #if defined(CONFIG_*) guards (e.g. platforms/common/i2c.cpp, +# spi.cpp, board_common.c, pab_manifest.c, px4_log_history.cpp) and some +# libraries carry a dummy.cpp placeholder, all of which legitimately produce +# empty object files on POSIX/SITL. GNU ranlib ignores this; Apple's warns. +# +# The warning is actually emitted by `ar qc` (which implicitly builds a symbol +# table), not by the standalone ranlib call. So we use `ar qcS` to skip the +# implicit symbol table, then let CMAKE_*_ARCHIVE_FINISH run ranlib with the +# -no_warning_for_no_symbols flag to add it quietly. +if(APPLE) + set(CMAKE_C_ARCHIVE_CREATE " qcS ") + set(CMAKE_CXX_ARCHIVE_CREATE " qcS ") + set(CMAKE_ASM_ARCHIVE_CREATE " qcS ") + set(CMAKE_C_ARCHIVE_APPEND " qS ") + set(CMAKE_CXX_ARCHIVE_APPEND " qS ") + set(CMAKE_ASM_ARCHIVE_APPEND " qS ") + set(CMAKE_C_ARCHIVE_FINISH " -no_warning_for_no_symbols -c ") + set(CMAKE_CXX_ARCHIVE_FINISH " -no_warning_for_no_symbols -c ") + set(CMAKE_ASM_ARCHIVE_FINISH " -no_warning_for_no_symbols -c ") +endif() + # CMake build type (Debug Release RelWithDebInfo MinSizeRel Coverage) if(NOT CMAKE_BUILD_TYPE) if(${PX4_PLATFORM} STREQUAL "nuttx") @@ -240,8 +262,15 @@ if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE ${PX4_BUILD_TYPE} CACHE STRING "Build type" FORCE) endif() +if(CONFIG_BOARD_SUPPORT_FORTIFIED_TOOLCHAIN) + set(PX4_DEBUG_OPT_LEVEL -Og) + message(STATUS "fortified toolchain support enabled: PX4_DEBUG_OPT_LEVEL=${PX4_DEBUG_OPT_LEVEL}") +else() + set(PX4_DEBUG_OPT_LEVEL -O0) +endif() + if((CMAKE_BUILD_TYPE STREQUAL "Debug") OR (CMAKE_BUILD_TYPE STREQUAL "Coverage")) - set(MAX_CUSTOM_OPT_LEVEL -O0) + set(MAX_CUSTOM_OPT_LEVEL ${PX4_DEBUG_OPT_LEVEL}) elseif(CMAKE_BUILD_TYPE MATCHES "Sanitizer") set(MAX_CUSTOM_OPT_LEVEL -O1) elseif(CMAKE_BUILD_TYPE MATCHES "Release") @@ -484,6 +513,7 @@ include(bloaty) include(metadata) include(package) +include(sbom) # install python requirements using configured python add_custom_target(install_python_requirements diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 34f16ba21e..c07620a69a 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -2,45 +2,82 @@ ## Our Pledge -In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. +We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation. + +We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community. ## Our Standards -Examples of behavior that contributes to creating a positive environment include: +Examples of behavior that contributes to a positive environment for our community include: -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members +* Demonstrating empathy and kindness toward other people +* Being respectful of differing opinions, viewpoints, and experiences +* Giving and gracefully accepting constructive feedback +* Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience +* Focusing on what is best not just for us as individuals, but for the overall community -Examples of unacceptable behavior by participants include: +Examples of unacceptable behavior include: -* The use of sexualized language or imagery and unwelcome sexual attention or advances -* Trolling, insulting/derogatory comments, and personal or political attacks +* The use of sexualized language or imagery, and sexual attention or advances of any kind +* Trolling, insulting or derogatory comments, and personal or political attacks * Public or private harassment -* Publishing others' private information, such as a physical or electronic address, without explicit permission +* Publishing others' private information, such as a physical or email address, without their explicit permission * Other conduct which could reasonably be considered inappropriate in a professional setting -## Our Responsibilities +## Enforcement Responsibilities -Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. +Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful. -Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. +Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate. ## Scope -This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. +This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. ## Enforcement -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at lorenz@px4.io. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at coc@dronecode.org. All complaints will be reviewed and investigated promptly and fairly. -Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. +All community leaders are obligated to respect the privacy and security of the reporter of any incident. + +## Enforcement Guidelines + +Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct: + +### 1. Correction + +**Community Impact**: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community. + +**Consequence**: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested. + +### 2. Warning + +**Community Impact**: A violation through a single incident or series of actions. + +**Consequence**: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban. + +### 3. Temporary Ban + +**Community Impact**: A serious violation of community standards, including sustained inappropriate behavior. + +**Consequence**: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban. + +### 4. Permanent Ban + +**Community Impact**: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals. + +**Consequence**: A permanent ban from any sort of public interaction within the community. ## Attribution -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.1, available at [https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1]. -[homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ +Community Impact Guidelines were inspired by [Mozilla's code of conduct enforcement ladder][Mozilla CoC]. + +For answers to common questions about this code of conduct, see the FAQ at [https://www.contributor-covenant.org/faq][FAQ]. Translations are available at [https://www.contributor-covenant.org/translations][translations]. + +[homepage]: https://www.contributor-covenant.org +[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html +[Mozilla CoC]: https://github.com/mozilla/diversity +[FAQ]: https://www.contributor-covenant.org/faq +[translations]: https://www.contributor-covenant.org/translations diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index cce5340cc7..65604838da 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,44 +1,170 @@ -# Contributing to PX4 Firmware +# Contributing to PX4-Autopilot -We follow the [Github flow](https://guides.github.com/introduction/flow/) development model. +We follow the [GitHub flow](https://guides.github.com/introduction/flow/) development model. -### Fork the project, then clone your repo +## Fork the project, then clone your repo -First [fork and clone](https://help.github.com/articles/fork-a-repo) the project project. +First [fork and clone](https://help.github.com/articles/fork-a-repo) the project. -### Create a feature branch +## Create a feature branch -*Always* branch off main for new features. +Always branch off `main` for new features. ``` git checkout -b mydescriptivebranchname ``` -### Edit and build the code +## Edit and build the code -The [developer guide](https://docs.px4.io/main/en/development/development.html) explains how to set up the development environment on Mac OS, Linux or Windows. Please take note of our [coding style](https://docs.px4.io/main/en/contribute/code.html) when editing files. +The [developer guide](https://docs.px4.io/main/en/development/development.html) explains how to set up the development environment on Mac OS, Linux or Windows. -### Commit your changes +### Coding standards -Always write descriptive commit messages and add a fixes or relates note to them with an [issue number](https://github.com/px4/Firmware/issues) (Github will link these then conveniently) +All C/C++ code must follow the [PX4 coding style](https://docs.px4.io/main/en/contribute/code.html). Formatting is enforced by [astyle](http://astyle.sourceforge.net/) in CI (`make check_format`, ``make format`, `make format_changed`). Code quality checks run via [clang-tidy](https://clang.llvm.org/extra/clang-tidy/). Pull requests that fail either check will not be merged. -**Example:** +Python code is checked with [mypy](https://mypy-lang.org/) and [flake8](https://flake8.pycqa.org/). + +## Commit message convention + +PX4 uses [conventional commits](https://www.conventionalcommits.org/) for all commit messages and PR titles. + +### Format ``` -Change how the attitude controller works - -- Fixes rate feed forward -- Allows a local body rate override - -Fixes issue #123 +type(scope): short description of the change ``` -### Test your changes +| Part | Rule | +|------|------| +| **type** | Category of change (see types table below) | +| **scope** | The module, driver, board, or area of PX4 affected | +| **`!`** (optional) | Append before `:` to mark a breaking change | +| **description** | What the change does, at least 5 characters, written in imperative form | -Since we care about safety, we will regularly ask you for test results. Best is to do a test flight (or bench test where it applies) and upload the logfile from it (on the microSD card in the logs directory) to Google Drive or Dropbox and share the link. +### Types -### Push your changes +| Type | Description | +|------|-------------| +| `feat` | A new feature | +| `fix` | A bug fix | +| `docs` | Documentation only changes | +| `style` | Formatting, whitespace, no code change | +| `refactor` | Code change that neither fixes a bug nor adds a feature | +| `perf` | Performance improvement | +| `test` | Adding or correcting tests | +| `build` | Build system or external dependencies | +| `ci` | CI configuration files and scripts | +| `chore` | Other changes that don't modify src or test files | +| `revert` | Reverts a previous commit | -Push changes to your repo and send a [pull request](https://github.com/PX4/Firmware/compare/). +### Scopes + +The scope identifies which part of PX4 is affected. Common scopes: + +| Scope | Area | +|-------|------| +| `ekf2` | Extended Kalman Filter (state estimation) | +| `mavlink` | MAVLink messaging protocol | +| `commander` | Commander and mode management | +| `navigator` | Mission, RTL, Land, and other navigation modes | +| `sensors` | Sensor drivers and processing | +| `drivers` | Hardware drivers | +| `boards/px4_fmu-v6x` | Board-specific changes (use the board name) | +| `mc_att_control` | Multicopter attitude control | +| `mc_pos_control` | Multicopter position control | +| `fw_att_control` | Fixed-wing attitude control | +| `vtol` | VTOL-specific logic | +| `actuators` | Mixer and actuator output | +| `battery` | Battery monitoring and estimation | +| `logger` | On-board logging | +| `param` | Parameter system | +| `simulation` | SITL, Gazebo, SIH | +| `ci` | Continuous integration and workflows | +| `docs` | Documentation | +| `build` | CMake, toolchain, build system | +| `uorb` | Inter-module messaging | + +For changes spanning multiple subsystems, use the primary one affected. Look at the directory path of the files you changed to find the right scope: `src/modules/ekf2/` uses `ekf2`, `src/drivers/imu/` uses `drivers/imu`, `.github/workflows/` uses `ci`. + +### Breaking changes + +Append `!` before the colon to indicate a breaking change: + +``` +feat(ekf2)!: remove deprecated height fusion API +``` + +### Good commit messages + +``` +feat(ekf2): add height fusion timeout +fix(mavlink): correct BATTERY_STATUS_V2 parsing +refactor(navigator): simplify RTL altitude logic +ci(workflows): migrate to reusable workflows +docs(ekf2): update tuning guide +feat(boards/px4_fmu-v6x)!: remove deprecated driver API +perf(mc_rate_control): reduce loop latency +``` + +### Commits to avoid + +These will be flagged by CI and should be squashed or reworded before merging: + +``` +fix # too vague, no type or scope +update # too vague, no type or scope +ekf2: fix something # missing type prefix +apply suggestions from code review # squash into parent commit +do make format # squash into parent commit +WIP: trying something # not ready for main +oops # not descriptive +``` + +### PR titles + +The PR title follows the same `type(scope): description` format. This is enforced by CI and is especially important because the PR title becomes the commit message when a PR is squash-merged. + +### Merge policy + +Commits should be atomic and independently revertable. Squash at reviewer discretion for obvious cases (multiple WIP commits, messy review-response history). When your commits are clean and logical, they will be preserved as individual commits on `main`. + +### Cleaning up commits + +If CI flags your commit messages, you can fix them with an interactive rebase: + +```bash +# Squash all commits into one: +git rebase -i HEAD~N # replace N with the number of commits +# mark all commits except the first as 'squash' or 'fixup' +# reword the remaining commit to follow the format +git push --force-with-lease + +# Or reword specific commits: +git rebase -i HEAD~N +# mark the bad commits as 'reword' +git push --force-with-lease +``` + +## Test your changes + +PX4 is safety-critical software. All contributions must include adequate testing where practical: + +- **New features** must include unit tests and/or integration tests that exercise the new functionality, where practical. Hardware-dependent changes that cannot be tested in SITL should include bench test or flight test evidence. +- **Bug fixes** must include a regression test where practical. When automated testing is not feasible (hardware-specific issues, race conditions, etc.), provide a link to a flight log demonstrating the fix and the reproduction steps for the original bug. +- **Reviewers** will verify that tests or test evidence exist before approving a pull request. + +### Types of tests + +| Test type | When to use | How to run | +|-----------|-------------|------------| +| **Unit tests** (gtest) | Module-level logic, math, parsing | `make tests` | +| **SITL integration tests** (MAVSDK) | Flight behavior, failsafes, missions | `test/mavsdk_tests/` | +| **Bench tests / flight logs** | Hardware-dependent changes | Upload logs to [Flight Review](https://logs.px4.io) | + +Since we care about safety, we will regularly ask you for test results. Best is to do a test flight (or bench test where it applies) and upload the log file from it (on the microSD card in the logs directory) to Google Drive or Dropbox and share the link. + +## Push your changes + +Push changes to your repo and send a [pull request](https://github.com/PX4/PX4-Autopilot/compare/). Make sure to provide some testing feedback and if possible the link to a flight log file. Upload flight log files to [Flight Review](http://logs.px4.io) and link the resulting report. diff --git a/Jenkinsfile b/Jenkinsfile deleted file mode 100644 index b6f6d3c98a..0000000000 --- a/Jenkinsfile +++ /dev/null @@ -1,268 +0,0 @@ -#!/usr/bin/env groovy - -pipeline { - agent none - stages { - - stage('Analysis') { - when { - anyOf { - branch 'main' - branch 'master' // should be removed, but in case there is something going on... - branch 'pr-jenkins' // for testing - } - } - parallel { - - stage('Airframe') { - agent { - docker { image 'px4io/px4-dev-base-focal:2021-08-18' } - } - steps { - sh 'make distclean; git clean -ff -x -d .' - sh 'git fetch --all --tags' - sh 'make airframe_metadata' - dir('build/px4_sitl_default/docs') { - archiveArtifacts(artifacts: 'airframes.md, airframes.xml') - stash includes: 'airframes.md, airframes.xml', name: 'metadata_airframes' - } - } - post { - always { - sh 'make distclean; git clean -ff -x -d .' - } - } - } - - stage('Parameter') { - agent { - docker { image 'px4io/px4-dev-base-focal:2021-08-18' } - } - steps { - sh 'make distclean; git clean -ff -x -d .' - sh 'git fetch --all --tags' - sh 'make parameters_metadata' - dir('build/px4_sitl_default/docs') { - archiveArtifacts(artifacts: 'parameters.md, parameters.xml, parameters.json.xz') - stash includes: 'parameters.md, parameters.xml, parameters.json.xz', name: 'metadata_parameters' - } - } - post { - always { - sh 'make distclean; git clean -ff -x -d .' - } - } - } - - stage('Module') { - agent { - docker { image 'px4io/px4-dev-base-focal:2021-08-18' } - } - steps { - sh 'make distclean; git clean -ff -x -d .' - sh 'git fetch --all --tags' - sh 'make module_documentation' - dir('build/px4_sitl_default/docs') { - archiveArtifacts(artifacts: 'modules/*.md') - stash includes: 'modules/*.md', name: 'metadata_module_documentation' - } - } - post { - always { - sh 'make distclean; git clean -ff -x -d .' - } - } - } - - stage('msg file docs') { - agent { - docker { image 'px4io/px4-dev-base-focal:2021-08-18' } - } - steps { - sh 'mkdir -p build/msg_docs; ./Tools/msg/generate_msg_docs.py -d build/msg_docs' - dir('build') { - archiveArtifacts(artifacts: 'msg_docs/*.md') - stash includes: 'msg_docs/*.md', name: 'msg_documentation' - } - } - post { - always { - sh 'make distclean; git clean -ff -x -d .' - } - } - } - - stage('failsafe docs') { - agent { - docker { image 'px4io/px4-dev-nuttx-focal:2022-08-12' } - } - steps { - sh '''#!/bin/bash -l - echo $0; - git clone https://github.com/emscripten-core/emsdk.git _emscripten_sdk; - cd _emscripten_sdk; - git checkout 4.0.15; - ./emsdk install latest; - ./emsdk activate latest; - cd ..; - . ./_emscripten_sdk/emsdk_env.sh; - git fetch --all --tags; - make failsafe_web; - cd build/px4_sitl_default_failsafe_web; - mkdir -p failsafe_sim; - cp index.* parameters.json failsafe_sim; - ''' - dir('build/px4_sitl_default_failsafe_web') { - archiveArtifacts(artifacts: 'failsafe_sim/*') - stash includes: 'failsafe_sim/*', name: 'failsafe_sim' - } - } - post { - always { - sh 'make distclean; git clean -ff -x -d .' - } - } - } - - stage('uORB graphs') { - agent { - docker { - image 'px4io/px4-dev-nuttx-focal:2022-08-12' - args '-e CCACHE_BASEDIR=$WORKSPACE -v ${CCACHE_DIR}:${CCACHE_DIR}:rw' - } - } - steps { - sh 'export' - sh 'make distclean; git clean -ff -x -d .' - sh 'git fetch --all --tags' - sh 'make uorb_graphs' - dir('Tools/uorb_graph') { - archiveArtifacts(artifacts: 'graph_*.json') - stash includes: 'graph_*.json', name: 'uorb_graph' - } - } - post { - always { - sh 'make distclean; git clean -ff -x -d .' - } - } - } - - } // parallel - } // stage: Generate Metadata - - stage('Deploy') { - - parallel { - - stage('Userguide') { - agent { - docker { image 'px4io/px4-dev-base-focal:2021-08-18' } - } - steps { - sh('export') - unstash 'metadata_airframes' - unstash 'metadata_parameters' - unstash 'metadata_module_documentation' - unstash 'msg_documentation' - unstash 'failsafe_sim' - unstash 'uorb_graph' - withCredentials([usernamePassword(credentialsId: 'px4buildbot_github_personal_token', passwordVariable: 'GIT_PASS', usernameVariable: 'GIT_USER')]) { - sh('git clone https://${GIT_USER}:${GIT_PASS}@github.com/PX4/PX4-user_guide.git') - sh('cp airframes.md PX4-user_guide/en/airframes/airframe_reference.md') - sh('cp parameters.md PX4-user_guide/en/advanced_config/parameter_reference.md') - sh('cp -R modules/*.md PX4-user_guide/en/modules/') - sh('cp -R graph_*.json PX4-user_guide/public/middleware/') // vitepress - sh('cp -R msg_docs/*.md PX4-user_guide/en/msg_docs/') - sh('cp -R failsafe_sim/* PX4-user_guide/public/config/failsafe') // vitepress - sh('cd PX4-user_guide; git status; git add .; git commit -a -m "Update PX4 Firmware metadata `date`" || true') - sh('cd PX4-user_guide; git push origin main || true') - sh('rm -rf PX4-user_guide') - } - } - when { - anyOf { - branch 'main' - branch 'master' // should be removed, but in case there is something going on... - branch 'pr-jenkins' // for testing - } - } - options { - skipDefaultCheckout() - } - } - - stage('QGroundControl') { - agent { - docker { image 'px4io/px4-dev-base-focal:2021-08-18' } - } - steps { - sh('export') - unstash 'metadata_airframes' - unstash 'metadata_parameters' - withCredentials([usernamePassword(credentialsId: 'px4buildbot_github_personal_token', passwordVariable: 'GIT_PASS', usernameVariable: 'GIT_USER')]) { - sh('git clone https://${GIT_USER}:${GIT_PASS}@github.com/mavlink/qgroundcontrol.git') - sh('cp airframes.xml qgroundcontrol/src/AutoPilotPlugins/PX4/AirframeFactMetaData.xml') - sh('cp parameters.xml qgroundcontrol/src/FirmwarePlugin/PX4/PX4ParameterFactMetaData.xml') - sh('cd qgroundcontrol; git status; git add .; git commit -a -m "Update PX4 Firmware metadata `date`" || true') - sh('cd qgroundcontrol; git push origin master || true') - sh('rm -rf qgroundcontrol') - } - } - when { - anyOf { - branch 'main' - branch 'master' // should be removed, but in case there is something going on... - branch 'pr-jenkins' // for testing - } - } - options { - skipDefaultCheckout() - } - } - - stage('S3') { - agent { - docker { image 'px4io/px4-dev-base-focal:2021-08-18' } - } - steps { - sh('export') - unstash 'metadata_airframes' - unstash 'metadata_parameters' - sh('ls') - withAWS(credentials: 'px4_aws_s3_key', region: 'us-east-1') { - s3Upload(acl: 'PublicRead', bucket: 'px4-travis', file: 'airframes.xml', path: 'Firmware/master/') - s3Upload(acl: 'PublicRead', bucket: 'px4-travis', file: 'parameters.xml', path: 'Firmware/master/') - s3Upload(acl: 'PublicRead', bucket: 'px4-travis', file: 'parameters.json.xz', path: 'Firmware/master/') - } - } - when { - anyOf { - branch 'main' - branch 'master' // should be removed, but in case there is something going on... - branch 'pr-jenkins' // for testing - } - } - options { - skipDefaultCheckout() - } - } - - } // parallel - } // stage: Generate Metadata - - } // stages - - environment { - CCACHE_DIR = '/tmp/ccache' - CI = true - GIT_AUTHOR_EMAIL = "bot@px4.io" - GIT_AUTHOR_NAME = "PX4BuildBot" - GIT_COMMITTER_EMAIL = "bot@px4.io" - GIT_COMMITTER_NAME = "PX4BuildBot" - } - options { - buildDiscarder(logRotator(numToKeepStr: '20', artifactDaysToKeepStr: '30')) - timeout(time: 90, unit: 'MINUTES') - } -} diff --git a/Kconfig b/Kconfig index 8e570545a1..4bc076893a 100644 --- a/Kconfig +++ b/Kconfig @@ -67,6 +67,16 @@ menu "Toolchain" help Enables Cmake Release for -O3 optimization + config BOARD_SUPPORT_FORTIFIED_TOOLCHAIN + bool "Fortified toolchain support" + default n + help + Enable compatibility with toolchains that define + _FORTIFY_SOURCE. + + This switches PX4_DEBUG_OPT_LEVEL from -O0 to -Og. Keep this + disabled unless the fortified toolchain requires optimization. + config BOARD_ROMFSROOT string "ROMFSROOT" default "px4fmu_common" @@ -192,6 +202,12 @@ menu "File paths" config BOARD_PARAM_FILE string "Parameter file" default "/fs/mtd_params" + + config BOARD_NO_SDCARD + bool "Board has no SD card" + default n + help + Disable the SD card arming check for boards without an SD card slot. endmenu menu "drivers" @@ -210,6 +226,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" diff --git a/MAINTAINERS.md b/MAINTAINERS.md index e1fcc89b5f..892c5f65c6 100644 --- a/MAINTAINERS.md +++ b/MAINTAINERS.md @@ -1,9 +1,11 @@ Maintainers =========== -See [the documentation on Maintainers](https://docs.px4.io/main/en/contribute/maintainers.html) to learn about the role of the maintainers and the process to become one. +PX4 is maintained by a group of contributors trusted to steward the project. All maintainers listed below are members of the @PX4/dev-team, have write access, and participate in maintainer decisions. We recognize two types: **Code Owners**, responsible for specific components, and **Reviewers**, who help across the project without a fixed component. -**Active Maintainers** +See [the documentation on Maintainers](https://docs.px4.io/main/en/contribute/maintainers) to learn about the role of the maintainers and the process to become one. + +**Code Owners** | Name | Sector | GitHub | Chat | email |-------------------------|--------|--------|------|---------------- @@ -23,6 +25,15 @@ See [the documentation on Maintainers](https://docs.px4.io/main/en/contribute/ma | Jacob Dahl | Simulation | [@dakejahl](https://github.com/dakejahl) | dakejahl | +**Reviewers** + +Reviewers help maintain PX4 across the project without ownership of a specific component. + +| Name | GitHub | Chat | email +|------|--------|------|---------------------- +| Onur Ozkan | [@onur-ozkan](https://github.com/onur-ozkan) | onur_ozkan0126 | + + **Documentation Maintainers** | Name | GitHub | Chat | email diff --git a/Makefile b/Makefile index 3cbe67acc9..7ccdbc2b33 100644 --- a/Makefile +++ b/Makefile @@ -162,6 +162,12 @@ else endif +# Prefer the interpreter from an active Python virtual environment. +# Otherwise leave PYTHON_EXECUTABLE unset and let CMake resolve Python. +ifneq ($(strip $(VIRTUAL_ENV)),) + PYTHON_EXECUTABLE ?= $(VIRTUAL_ENV)/bin/python +endif + # Pick up specific Python path if set ifdef PYTHON_EXECUTABLE override CMAKE_ARGS += -DPYTHON_EXECUTABLE=${PYTHON_EXECUTABLE} @@ -226,9 +232,22 @@ CONFIG_TARGETS_DEFAULT := $(patsubst %_default,%,$(filter %_default,$(ALL_CONFIG $(CONFIG_TARGETS_DEFAULT): @$(call cmake-build,$@_default$(BUILD_DIR_SUFFIX)) +# Multi-processor boards: build all processor targets together +# VOXL2 apps processor (default) depends on SLPI DSP being built first +modalai_voxl2_default: modalai_voxl2_slpi +modalai_voxl2: modalai_voxl2_slpi +modalai_voxl2_deb: modalai_voxl2_slpi + all_config_targets: $(ALL_CONFIG_TARGETS) all_default_targets: $(CONFIG_TARGETS_DEFAULT) +# DEB package targets: builds _default config, then runs cpack. +# Multi-processor boards (e.g. VOXL2) chain companion builds automatically +# via existing cmake prerequisites. +%_deb: + @$(call cmake-build,$(subst _deb,_default,$@)$(BUILD_DIR_SUFFIX)) + @cd "$(SRC_DIR)/build/$(subst _deb,_default,$@)" && cpack -G DEB + updateconfig: @./Tools/kconfig/updateconfig.py @@ -332,6 +351,7 @@ bootloaders_update: \ cuav_7-nano_bootloader \ cuav_fmu-v6x_bootloader \ cuav_x25-evo_bootloader \ + cuav_x25-super_bootloader \ cubepilot_cubeorange_bootloader \ cubepilot_cubeorangeplus_bootloader \ hkust_nxt-dual_bootloader \ @@ -384,7 +404,7 @@ px4_metadata: parameters_metadata airframe_metadata module_documentation extract # Style # -------------------------------------------------------------------- -.PHONY: check_format format check_newlines +.PHONY: check_format format format_changed check_newlines check_format: $(call colorecho,'Checking formatting with astyle') @@ -395,6 +415,10 @@ format: $(call colorecho,'Formatting with astyle') @"$(SRC_DIR)"/Tools/astyle/check_code_style_all.sh --fix +format_changed: + $(call colorecho,'Formatting changed files with astyle') + @"$(SRC_DIR)"/Tools/astyle/check_code_style_all.sh --fix --diff-only + check_newlines: $(call colorecho,'Checking for missing or duplicate newlines at the end of files') @"$(SRC_DIR)"/Tools/astyle/check_newlines.sh @@ -474,7 +498,7 @@ python_coverage: # static analyzers (scan-build, clang-tidy, cppcheck) # -------------------------------------------------------------------- -.PHONY: scan-build px4_sitl_default-clang clang-tidy clang-tidy-fix +.PHONY: scan-build px4_sitl_default-clang px4_sitl_default-clang-test clang-ci clang-tidy clang-tidy-fix .PHONY: cppcheck shellcheck_all validate_module_configs scan-build: @@ -492,6 +516,26 @@ px4_sitl_default-clang: @cd "$(SRC_DIR)"/build/px4_sitl_default-clang && cmake "$(SRC_DIR)" $(CMAKE_ARGS) -G"$(PX4_CMAKE_GENERATOR)" -DCONFIG=px4_sitl_default -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ @$(PX4_MAKE) -C "$(SRC_DIR)"/build/px4_sitl_default-clang +# Clang SITL configure with BUILD_TESTING=ON so test files land in +# compile_commands.json with resolved gtest/fuzztest includes. Used by CI +# to produce a compilation database for diff-based clang-tidy that can +# lint test files. Configure only: we don't build the test binaries here, +# just generate the database. +px4_sitl_default-clang-test: + @mkdir -p "$(SRC_DIR)"/build/px4_sitl_default-clang-test + @cd "$(SRC_DIR)"/build/px4_sitl_default-clang-test && cmake "$(SRC_DIR)" $(CMAKE_ARGS) -G"$(PX4_CMAKE_GENERATOR)" -DCONFIG=px4_sitl_default -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_TESTING=ON + +# CI-oriented target that prepares both clang build directories used by +# the Static Analysis workflow: +# - px4_sitl_default-clang: full build, BUILD_TESTING=OFF. +# Used by `make clang-tidy` (push-to-main) and run-clang-tidy-pr.py. +# - px4_sitl_default-clang-test: configure-only, BUILD_TESTING=ON. +# Used by clang-tidy-diff-18.py so test files are in the +# compilation database with resolved gtest/fuzztest includes. +# Running one target ensures both dirs exist before any clang-tidy +# variant runs, and keeps the workflow free of raw cmake invocations. +clang-ci: px4_sitl_default-clang px4_sitl_default-clang-test + # Paths to exclude from clang-tidy (auto-generated from .gitmodules + manual additions): # - All submodules (external code we consume, not edit) # - Test code (allowed looser style) @@ -534,7 +578,8 @@ validate_module_configs: -not -path "$(SRC_DIR)/src/modules/zenoh/zenoh-pico/*" \ -not -path "$(SRC_DIR)/src/lib/events/libevents/*" \ -not -path "$(SRC_DIR)/src/lib/cdrstream/*" \ - -not -path "$(SRC_DIR)/src/lib/crypto/libtommath/*" -print0 | \ + -not -path "$(SRC_DIR)/src/lib/crypto/libtommath/*" \ + -not -path "$(SRC_DIR)/src/lib/tensorflow_lite_micro/*" -print0 | \ xargs -0 "$(SRC_DIR)"/Tools/validate_yaml.py --schema-file "$(SRC_DIR)"/validation/module_schema.yaml # Cleanup diff --git a/README.md b/README.md index bf4d74bb76..2e439ecb15 100644 --- a/README.md +++ b/README.md @@ -9,10 +9,16 @@

- Releases + Release DOI - Build Targets - Discord + Discord +

+ +

+ OpenSSF Best Practices + LFX Health Score + LFX Contributors + LFX Active Contributors

--- @@ -64,7 +70,17 @@ PX4 is an open-source autopilot stack for drones and unmanned vehicles. It suppo …and many more: helicopters, autogyros, airships, submarines, boats, and other experimental platforms. These frames have basic support but are not part of the regular flight-test program. See the full airframe reference. -## Quick Start +## Try PX4 + +Run PX4 in simulation with a single command. No build tools, no dependencies beyond Docker: + +```bash +docker run --rm -it -p 14550:14550/udp px4io/px4-sitl:latest +``` + +Open [QGroundControl](https://qgroundcontrol.com) and fly. See [PX4 Simulation Quickstart](../dev_setup/px4_simulation_quickstart.md) for more options. + +## Build from Source ```bash git clone https://github.com/PX4/PX4-Autopilot.git --recursive @@ -98,6 +114,22 @@ make px4_sitl We welcome contributions of all kinds — bug reports, documentation, new features, and code reviews. Please read the [Contribution Guide](https://docs.px4.io/main/en/contribute/) to get started. +## Citation + +If you use PX4 in academic work, please cite it. BibTeX: + +```bibtex +@software{px4_autopilot, + author = {Meier, Lorenz and {The PX4 Contributors}}, + title = {{PX4 Autopilot}}, + publisher = {Zenodo}, + doi = {10.5281/zenodo.595432}, + url = {https://px4.io} +} +``` + +The DOI above is a Zenodo concept DOI that always resolves to the latest release. For a version-pinned citation, see the [Zenodo record](https://doi.org/10.5281/zenodo.595432) or our [`CITATION.cff`](CITATION.cff). + ## Governance The PX4 Autopilot project is hosted by the [Dronecode Foundation](https://www.dronecode.org/), a [Linux Foundation](https://www.linuxfoundation.org/) Collaborative Project. Dronecode holds all PX4 trademarks and serves as the project's legal guardian, ensuring vendor-neutral stewardship — no single company owns the name or controls the roadmap. The source code is licensed under the [BSD 3-Clause](LICENSE) license, so you are free to use, modify, and distribute it in your own projects. diff --git a/ROMFS/CMakeLists.txt b/ROMFS/CMakeLists.txt index 9b282339fd..53ee58a6c6 100644 --- a/ROMFS/CMakeLists.txt +++ b/ROMFS/CMakeLists.txt @@ -193,6 +193,7 @@ endif() # board custom init files set(OPTIONAL_BOARD_RC) list(APPEND OPTIONAL_BOARD_RC + rc.board_early rc.board_defaults rc.board_sensors rc.board_extras diff --git a/ROMFS/px4fmu_common/init.d-posix/airframes/10040_sihsim_quadx b/ROMFS/px4fmu_common/init.d-posix/airframes/10040_sihsim_quadx index 623ee41f1f..d043d9b82d 100644 --- a/ROMFS/px4fmu_common/init.d-posix/airframes/10040_sihsim_quadx +++ b/ROMFS/px4fmu_common/init.d-posix/airframes/10040_sihsim_quadx @@ -34,6 +34,7 @@ param set-default PWM_MAIN_FUNC2 102 param set-default PWM_MAIN_FUNC3 103 param set-default PWM_MAIN_FUNC4 104 -param set-default EKF2_GPS_DELAY 0 +param set-default SENS_GPS0_DELAY 0 +param set-default SENS_GPS1_DELAY 0 param set SIH_VEHICLE_TYPE 0 diff --git a/ROMFS/px4fmu_common/init.d-posix/airframes/10041_sihsim_airplane b/ROMFS/px4fmu_common/init.d-posix/airframes/10041_sihsim_airplane index 100af65943..512818edf8 100644 --- a/ROMFS/px4fmu_common/init.d-posix/airframes/10041_sihsim_airplane +++ b/ROMFS/px4fmu_common/init.d-posix/airframes/10041_sihsim_airplane @@ -44,7 +44,8 @@ param set-default PWM_MAIN_FUNC2 202 param set-default PWM_MAIN_FUNC3 203 param set-default PWM_MAIN_FUNC4 101 -param set-default EKF2_GPS_DELAY 0 +param set-default SENS_GPS0_DELAY 0 +param set-default SENS_GPS1_DELAY 0 # Rate controllers param set-default FW_RR_P 0.0500 diff --git a/ROMFS/px4fmu_common/init.d-posix/airframes/10042_sihsim_xvert b/ROMFS/px4fmu_common/init.d-posix/airframes/10042_sihsim_xvert index ee5ea9401c..04551ecf6d 100644 --- a/ROMFS/px4fmu_common/init.d-posix/airframes/10042_sihsim_xvert +++ b/ROMFS/px4fmu_common/init.d-posix/airframes/10042_sihsim_xvert @@ -11,7 +11,8 @@ PX4_SIMULATOR=${PX4_SIMULATOR:=sihsim} PX4_SIM_MODEL=${PX4_SIM_MODEL:=xvert} -param set-default EKF2_GPS_DELAY 0 +param set-default SENS_GPS0_DELAY 0 +param set-default SENS_GPS1_DELAY 0 param set-default EKF2_FUSE_BETA 0 # side slip fusion is currently not supported for tailsitters param set-default SENS_EN_GPSSIM 1 diff --git a/ROMFS/px4fmu_common/init.d-posix/airframes/10043_sihsim_standard_vtol b/ROMFS/px4fmu_common/init.d-posix/airframes/10043_sihsim_standard_vtol index 4abc9de264..4ab7471752 100644 --- a/ROMFS/px4fmu_common/init.d-posix/airframes/10043_sihsim_standard_vtol +++ b/ROMFS/px4fmu_common/init.d-posix/airframes/10043_sihsim_standard_vtol @@ -27,7 +27,8 @@ param set-default SENS_EN_BAROSIM 1 param set-default SENS_EN_MAGSIM 1 param set-default SENS_EN_ARSPDSIM 1 -param set-default EKF2_GPS_DELAY 0 +param set-default SENS_GPS0_DELAY 0 +param set-default SENS_GPS1_DELAY 0 param set-default VT_TYPE 2 param set-default MPC_MAN_Y_MAX 60 @@ -92,5 +93,18 @@ param set SIH_IXZ 0 param set SIH_KDV 0.2 param set SIH_L_ROLL 0.2 +# pusher propeller model with advance ratio, model from UIUC APC 8x6" +param set SIH_F_T_MAX 6 +param set SIH_F_Q_MAX 0.03 +# if SIH_F_CT0 > 0, SIH_F_T_MAX and SIH_F_Q_MAX will be overridden +param set SIH_F_CT0 0.131 +param set SIH_F_CT1 0.004 +param set SIH_F_CT2 -0.146 +param set SIH_F_CP0 0.0777 +param set SIH_F_CP1 0.0498 +param set SIH_F_CP2 -0.11 +param set SIH_F_DIA_INCH 8 +param set SIH_F_RPM_MAX 9000 + # sih as standard vtol param set SIH_VEHICLE_TYPE 3 diff --git a/ROMFS/px4fmu_common/init.d-posix/airframes/10044_sihsim_hex b/ROMFS/px4fmu_common/init.d-posix/airframes/10044_sihsim_hex index 36ae9a26d7..f99b200359 100644 --- a/ROMFS/px4fmu_common/init.d-posix/airframes/10044_sihsim_hex +++ b/ROMFS/px4fmu_common/init.d-posix/airframes/10044_sihsim_hex @@ -18,6 +18,7 @@ param set-default SENS_EN_BAROSIM 1 param set-default SENS_EN_MAGSIM 1 param set SIH_VEHICLE_TYPE 4 +param set-default MAV_TYPE 13 # Symmetric hexacopter X clockwise motor numbering param set-default CA_ROTOR_COUNT 6 @@ -44,4 +45,7 @@ param set-default PWM_MAIN_FUNC4 104 param set-default PWM_MAIN_FUNC5 105 param set-default PWM_MAIN_FUNC6 106 -param set-default EKF2_GPS_DELAY 0 +param set-default SENS_GPS0_DELAY 0 +param set-default SENS_GPS1_DELAY 0 + +param set-default THR_MDL_FAC 1 # simulated quadratic motor thrust diff --git a/ROMFS/px4fmu_common/init.d-posix/airframes/4003_gz_rc_cessna b/ROMFS/px4fmu_common/init.d-posix/airframes/4003_gz_rc_cessna index 58e09228eb..908392674d 100644 --- a/ROMFS/px4fmu_common/init.d-posix/airframes/4003_gz_rc_cessna +++ b/ROMFS/px4fmu_common/init.d-posix/airframes/4003_gz_rc_cessna @@ -44,8 +44,6 @@ param set-default FW_T_SINK_MIN 3 param set-default FW_W_EN 1 -param set-default FD_ESCS_EN 0 - param set-default MIS_TAKEOFF_ALT 30 param set-default NAV_ACC_RAD 15 diff --git a/ROMFS/px4fmu_common/init.d-posix/airframes/4004_gz_standard_vtol b/ROMFS/px4fmu_common/init.d-posix/airframes/4004_gz_standard_vtol index cc8bed693f..25c6d7a494 100644 --- a/ROMFS/px4fmu_common/init.d-posix/airframes/4004_gz_standard_vtol +++ b/ROMFS/px4fmu_common/init.d-posix/airframes/4004_gz_standard_vtol @@ -104,4 +104,3 @@ param set-default VT_FWD_THRUST_EN 4 param set-default VT_PITCH_MIN -5 param set-default VT_F_TRANS_THR 1 param set-default VT_TYPE 2 -param set-default FD_ESCS_EN 0 diff --git a/ROMFS/px4fmu_common/init.d-posix/airframes/4006_gz_px4vision b/ROMFS/px4fmu_common/init.d-posix/airframes/4006_gz_px4vision index 4370a677ed..135bb93152 100644 --- a/ROMFS/px4fmu_common/init.d-posix/airframes/4006_gz_px4vision +++ b/ROMFS/px4fmu_common/init.d-posix/airframes/4006_gz_px4vision @@ -20,8 +20,8 @@ param set-default COM_DISARM_LAND 0.5 # EKF2 parameters param set-default EKF2_DRAG_CTRL 1 param set-default EKF2_IMU_POS_X 0.02 -param set-default EKF2_GPS_POS_X 0.055 -param set-default EKF2_GPS_POS_Z -0.15 +param set-default SENS_GPS0_OFFX 0.055 +param set-default SENS_GPS0_OFFZ -0.15 param set-default EKF2_MIN_RNG 0.03 param set-default EKF2_OF_CTRL 1 param set-default EKF2_OF_POS_X 0.055 diff --git a/ROMFS/px4fmu_common/init.d-posix/airframes/60002_gz_uuv_bluerov2_heavy b/ROMFS/px4fmu_common/init.d-posix/airframes/60002_gz_uuv_bluerov2_heavy index ef620441ac..681efbfc45 100644 --- a/ROMFS/px4fmu_common/init.d-posix/airframes/60002_gz_uuv_bluerov2_heavy +++ b/ROMFS/px4fmu_common/init.d-posix/airframes/60002_gz_uuv_bluerov2_heavy @@ -26,7 +26,6 @@ param set-default SENS_EN_GPSSIM 1 param set-default SENS_EN_BAROSIM 1 param set-default SENS_EN_MAGSIM 1 param set-default COM_ARM_CHK_ESCS 0 # We don't have ESCs -param set-default FD_ESCS_EN 0 # We don't have ESCs - but maybe we need this later? # Set proper failsafes param set-default COM_ACT_FAIL_ACT 0 diff --git a/ROMFS/px4fmu_common/init.d-posix/airframes/70000_gz_atmos b/ROMFS/px4fmu_common/init.d-posix/airframes/70000_gz_atmos index 49ef971307..b7a6a24bd1 100644 --- a/ROMFS/px4fmu_common/init.d-posix/airframes/70000_gz_atmos +++ b/ROMFS/px4fmu_common/init.d-posix/airframes/70000_gz_atmos @@ -28,7 +28,6 @@ param set-default SIM_GZ_EN 1 param set-default SENS_EN_MAGSIM 1 param set-default COM_ARM_CHK_ESCS 0 # We don't have ESCs -param set-default FD_ESCS_EN 0 param set-default CA_AIRFRAME 14 param set-default MAV_TYPE 45 diff --git a/ROMFS/px4fmu_common/init.d-posix/airframes/70001_gz_atmos_dual b/ROMFS/px4fmu_common/init.d-posix/airframes/70001_gz_atmos_dual index 9a63cd420e..f495a46e6a 100644 --- a/ROMFS/px4fmu_common/init.d-posix/airframes/70001_gz_atmos_dual +++ b/ROMFS/px4fmu_common/init.d-posix/airframes/70001_gz_atmos_dual @@ -28,7 +28,6 @@ param set-default SIM_GZ_EN 1 param set-default SENS_EN_MAGSIM 1 param set-default COM_ARM_CHK_ESCS 0 # We don't have ESCs -param set-default FD_ESCS_EN 0 param set-default CA_AIRFRAME 14 param set-default MAV_TYPE 45 diff --git a/ROMFS/px4fmu_common/init.d-posix/px4-rc.mavlinksim b/ROMFS/px4fmu_common/init.d-posix/px4-rc.mavlinksim index f2d571062c..195952eaf8 100644 --- a/ROMFS/px4fmu_common/init.d-posix/px4-rc.mavlinksim +++ b/ROMFS/px4fmu_common/init.d-posix/px4-rc.mavlinksim @@ -2,7 +2,8 @@ # shellcheck disable=SC2154 # EKF2 specifics -param set-default EKF2_GPS_DELAY 10 +param set-default SENS_GPS0_DELAY 10 +param set-default SENS_GPS1_DELAY 10 param set-default EKF2_MULTI_IMU 3 param set-default SENS_IMU_MODE 0 diff --git a/ROMFS/px4fmu_common/init.d-posix/rcS b/ROMFS/px4fmu_common/init.d-posix/rcS index 0e443d30c4..8ce56eb640 100644 --- a/ROMFS/px4fmu_common/init.d-posix/rcS +++ b/ROMFS/px4fmu_common/init.d-posix/rcS @@ -119,10 +119,11 @@ else param set SYS_AUTOCONFIG 1 fi -if param compare SYS_AUTOCONFIG 1 +# To trigger a parameter reset during boot SYS_AUTOCONFIG was set to 1 before +if param greater SYS_AUTOCONFIG 0 then - # Reset params except Airframe, RC calibration, sensor calibration, flight modes, total flight time, and next flight UUID. - param reset_all SYS_AUTOSTART RC* CAL_* COM_FLTMODE* LND_FLIGHT* TC_* COM_FLIGHT* + # Reset parameters except airframe, parameter version, sensor calibration, total flight time, flight UUID + param reset_all SYS_AUTOSTART SYS_PARAM_VER CAL_* LND_FLIGHT* TC_* COM_FLIGHT* set AUTOCNF yes fi @@ -197,10 +198,6 @@ if [ -n "$PX4_SIM_SPEED_FACTOR" ]; then COM_OF_LOSS_T_LONGER=$(echo "$PX4_SIM_SPEED_FACTOR * 1.0" | bc) echo "COM_OF_LOSS_T set to $COM_OF_LOSS_T_LONGER" param set COM_OF_LOSS_T $COM_OF_LOSS_T_LONGER - - COM_OBC_LOSS_T_LONGER=$(echo "$PX4_SIM_SPEED_FACTOR * 5.0" | bc) - echo "COM_OBC_LOSS_T set to $COM_OBC_LOSS_T_LONGER" - param set COM_OBC_LOSS_T $COM_OBC_LOSS_T_LONGER fi # Autostart ID @@ -248,7 +245,7 @@ fi load_mon start -if param compare SIM_BAT_ENABLE 1 +if param greater SIM_BAT_DRAIN 0 then battery_simulator start fi diff --git a/ROMFS/px4fmu_common/init.d/airframes/1101_rc_plane_sih.hil b/ROMFS/px4fmu_common/init.d/airframes/1101_rc_plane_sih.hil index 40e8110e04..4a802cef62 100644 --- a/ROMFS/px4fmu_common/init.d/airframes/1101_rc_plane_sih.hil +++ b/ROMFS/px4fmu_common/init.d/airframes/1101_rc_plane_sih.hil @@ -14,6 +14,7 @@ param set UAVCAN_ENABLE 0 +param set-default CA_AIRFRAME 1 param set-default CA_ROTOR_COUNT 1 param set-default CA_ROTOR0_PX 0.3 @@ -38,7 +39,6 @@ param set-default SYS_HITL 2 # - without real battery param set-default CBRK_SUPPLY_CHK 894281 -param set SIH_T_MAX 6 param set SIH_MASS 0.3 param set SIH_IXX 0.00402 param set SIH_IYY 0.0144 @@ -48,3 +48,21 @@ param set SIH_KDV 0.2 param set SIH_VEHICLE_TYPE 1 # sih as fixed wing param set RWTO_TKOFF 1 # enable takeoff from runway (as opposed to launched) + +# pusher propeller model with advance ratio, model from UIUC APC 8x6" +param set SIH_F_T_MAX 6 +param set SIH_F_Q_MAX 0.03 +# if SIH_F_CT0 > 0, SIH_F_T_MAX and SIH_F_Q_MAX will be overridden +param set SIH_F_CT0 0.131 +param set SIH_F_CT1 0.004 +param set SIH_F_CT2 -0.146 +param set SIH_F_CP0 0.0777 +param set SIH_F_CP1 0.0498 +param set SIH_F_CP2 -0.11 +param set SIH_F_DIA_INCH 8 +param set SIH_F_RPM_MAX 9000 + +param set-default FW_AIRSPD_MIN 7 +param set-default FW_AIRSPD_TRIM 10 +param set-default FW_AIRSPD_MAX 12 +param set-default FW_PSP_OFF 0.5 diff --git a/ROMFS/px4fmu_common/init.d/airframes/1102_tailsitter_duo_sih.hil b/ROMFS/px4fmu_common/init.d/airframes/1102_tailsitter_duo_sih.hil index e033c1a4b6..5a1a6c829f 100644 --- a/ROMFS/px4fmu_common/init.d/airframes/1102_tailsitter_duo_sih.hil +++ b/ROMFS/px4fmu_common/init.d/airframes/1102_tailsitter_duo_sih.hil @@ -28,6 +28,7 @@ param set-default VT_FW_DIFTHR_EN 1 param set-default VT_FW_DIFTHR_S_Y 0.3 param set-default MPC_MAN_Y_MAX 60 param set-default MC_PITCH_P 5 +param set-default FW_PSP_OFF 5 param set-default CA_AIRFRAME 4 param set-default CA_ROTOR_COUNT 2 @@ -56,7 +57,6 @@ param set-default HIL_ACT_REV 32 param set-default MAV_TYPE 19 - # set SYS_HITL to 2 to start the SIH and avoid sensors startup param set-default SYS_HITL 2 @@ -66,8 +66,9 @@ param set-default CBRK_SUPPLY_CHK 894281 param set-default SENS_DPRES_OFF 0.001 -param set SIH_T_MAX 2.0 -param set SIH_Q_MAX 0.0165 +# tailsitter is equipped with two forward propellers +param set SIH_F_T_MAX 2 +param set SIH_F_Q_MAX 0.0165 param set SIH_MASS 0.2 # IXX and IZZ are inverted from the thesis as the body frame is pitched by 90 deg param set SIH_IXX 0.00354 @@ -77,6 +78,19 @@ param set SIH_IXZ 0 param set SIH_KDV 0.2 param set SIH_L_ROLL 0.145 +# propeller diameter, rpm, and coeffs coming from the thesis +# Modeling and control of a flying wing tailsitter unmanned aerial vehicle." +# Chiappinelli, Romain, supervised by Nahon, Meyer, McGill University, Masters thesis, 2018. +# if SIH_F_CT0 > 0, SIH_F_T_MAX and SIH_F_Q_MAX will be overridden +param set SIH_F_CT0 0.1342 +param set SIH_F_CT1 -0.1196 +param set SIH_F_CT2 -0.1281 +param set SIH_F_CP0 0.0522 +param set SIH_F_CP1 -0.0146 +param set SIH_F_CP2 -0.0602 +param set SIH_F_DIA_INCH 5 +param set SIH_F_RPM_MAX 14000 + # sih as tailsitter param set SIH_VEHICLE_TYPE 2 diff --git a/ROMFS/px4fmu_common/init.d/airframes/1103_standard_vtol_sih.hil b/ROMFS/px4fmu_common/init.d/airframes/1103_standard_vtol_sih.hil index 5ac9e6b1ab..26b8d092bb 100644 --- a/ROMFS/px4fmu_common/init.d/airframes/1103_standard_vtol_sih.hil +++ b/ROMFS/px4fmu_common/init.d/airframes/1103_standard_vtol_sih.hil @@ -56,6 +56,7 @@ param set-default CA_SV_CS2_TYPE 4 # rudder param set-default FW_AIRSPD_MIN 7 param set-default FW_AIRSPD_TRIM 10 param set-default FW_AIRSPD_MAX 12 +param set-default VT_FWD_THRUST_EN 1 param set-default HIL_ACT_FUNC1 101 param set-default HIL_ACT_FUNC2 102 @@ -77,6 +78,7 @@ param set-default CBRK_SUPPLY_CHK 894281 param set-default SENS_DPRES_OFF 0.001 +# quadrotor propellers param set SIH_T_MAX 2.0 param set SIH_Q_MAX 0.0165 param set SIH_MASS 0.2 @@ -88,5 +90,18 @@ param set SIH_IXZ 0 param set SIH_KDV 0.2 param set SIH_L_ROLL 0.2 +# pusher propeller model with advance ratio, model from UIUC APC 8x6" +param set SIH_F_T_MAX 6 +param set SIH_F_Q_MAX 0.03 +# if SIH_F_CT0 > 0, SIH_F_T_MAX and SIH_F_Q_MAX will be overridden +param set SIH_F_CT0 0.131 +param set SIH_F_CT1 0.004 +param set SIH_F_CT2 -0.146 +param set SIH_F_CP0 0.0777 +param set SIH_F_CP1 0.0498 +param set SIH_F_CP2 -0.11 +param set SIH_F_DIA_INCH 8 +param set SIH_F_RPM_MAX 9000 + # sih as standard vtol param set SIH_VEHICLE_TYPE 3 diff --git a/ROMFS/px4fmu_common/init.d/airframes/1105_rc_hexa_x_sih.hil b/ROMFS/px4fmu_common/init.d/airframes/1105_rc_hexa_x_sih.hil new file mode 100644 index 0000000000..b5574c1db8 --- /dev/null +++ b/ROMFS/px4fmu_common/init.d/airframes/1105_rc_hexa_x_sih.hil @@ -0,0 +1,49 @@ +#!/bin/sh +# +# @name SIH Hexacopter X +# +# @type Simulation +# @class Copter +# +# @maintainer Romain Chiappinelli +# +# @board px4_fmu-v2 exclude +# + +. ${R}etc/init.d/rc.mc_defaults + +param set UAVCAN_ENABLE 0 + +# set SYS_HITL to 2 to start the SIH and avoid sensors startup +param set SYS_HITL 2 + +# disable some checks to allow to fly: +# - without real battery +param set-default CBRK_SUPPLY_CHK 894281 + +param set SIH_VEHICLE_TYPE 4 + +# Symmetric hexacopter X clockwise motor numbering +param set-default CA_ROTOR_COUNT 6 +param set-default CA_ROTOR0_PX 0.866 +param set-default CA_ROTOR0_PY 0.5 +param set-default CA_ROTOR1_PX 0 +param set-default CA_ROTOR1_PY 1 +param set-default CA_ROTOR1_KM -0.05 +param set-default CA_ROTOR2_PX -0.866 +param set-default CA_ROTOR2_PY 0.5 +param set-default CA_ROTOR3_PX -0.866 +param set-default CA_ROTOR3_PY -0.5 +param set-default CA_ROTOR3_KM -0.05 +param set-default CA_ROTOR4_PX 0 +param set-default CA_ROTOR4_PY -1 +param set-default CA_ROTOR5_PX 0.866 +param set-default CA_ROTOR5_PY -0.5 +param set-default CA_ROTOR5_KM -0.05 + +param set-default HIL_ACT_FUNC1 101 +param set-default HIL_ACT_FUNC2 102 +param set-default HIL_ACT_FUNC3 103 +param set-default HIL_ACT_FUNC4 104 +param set-default HIL_ACT_FUNC5 105 +param set-default HIL_ACT_FUNC6 106 diff --git a/ROMFS/px4fmu_common/init.d/airframes/4016_holybro_px4vision b/ROMFS/px4fmu_common/init.d/airframes/4016_holybro_px4vision index 1e699b5180..3934c44690 100644 --- a/ROMFS/px4fmu_common/init.d/airframes/4016_holybro_px4vision +++ b/ROMFS/px4fmu_common/init.d/airframes/4016_holybro_px4vision @@ -19,8 +19,8 @@ param set-default COM_DISARM_LAND 0.5 # EKF2 parameters param set-default EKF2_DRAG_CTRL 1 param set-default EKF2_IMU_POS_X 0.02 -param set-default EKF2_GPS_POS_X 0.055 -param set-default EKF2_GPS_POS_Z -0.15 +param set-default SENS_GPS0_OFFX 0.055 +param set-default SENS_GPS0_OFFZ -0.15 param set-default EKF2_MIN_RNG 0.03 param set-default EKF2_OF_CTRL 1 param set-default EKF2_OF_POS_X 0.055 diff --git a/ROMFS/px4fmu_common/init.d/airframes/4020_holybro_px4vision_v1_5 b/ROMFS/px4fmu_common/init.d/airframes/4020_holybro_px4vision_v1_5 index b134cabd6c..173b21ed16 100644 --- a/ROMFS/px4fmu_common/init.d/airframes/4020_holybro_px4vision_v1_5 +++ b/ROMFS/px4fmu_common/init.d/airframes/4020_holybro_px4vision_v1_5 @@ -19,8 +19,8 @@ param set-default COM_DISARM_LAND 0.5 # EKF2 parameters param set-default EKF2_DRAG_CTRL 1 param set-default EKF2_IMU_POS_X 0.02 -param set-default EKF2_GPS_POS_X 0.055 -param set-default EKF2_GPS_POS_Z -0.15 +param set-default SENS_GPS0_OFFX 0.055 +param set-default SENS_GPS0_OFFZ -0.15 param set-default EKF2_MIN_RNG 0.03 param set-default EKF2_OF_CTRL 1 param set-default EKF2_OF_POS_X 0.055 diff --git a/ROMFS/px4fmu_common/init.d/airframes/4052_holybro_qav250 b/ROMFS/px4fmu_common/init.d/airframes/4052_holybro_qav250 index 7ef37051e6..36c39f9a59 100644 --- a/ROMFS/px4fmu_common/init.d/airframes/4052_holybro_qav250 +++ b/ROMFS/px4fmu_common/init.d/airframes/4052_holybro_qav250 @@ -2,7 +2,7 @@ # # @name HolyBro QAV250 # -# @url https://docs.px4.io/main/en/frames_multicopter/holybro_qav250_pixhawk4_mini.html +# @url https://docs.px4.io/main/en/frames_multicopter/holybro_qav250_pixhawk4_mini # # @type Quadrotor x # @class Copter diff --git a/ROMFS/px4fmu_common/init.d/airframes/4061_atl_mantis_edu b/ROMFS/px4fmu_common/init.d/airframes/4061_atl_mantis_edu index 0d8ddaf2d8..9fcadae64d 100644 --- a/ROMFS/px4fmu_common/init.d/airframes/4061_atl_mantis_edu +++ b/ROMFS/px4fmu_common/init.d/airframes/4061_atl_mantis_edu @@ -47,8 +47,9 @@ param set-default EKF2_BCOEF_Y 25.5 param set-default EKF2_DRAG_CTRL 1 -param set-default EKF2_GPS_DELAY 100 -param set-default EKF2_GPS_POS_X 0.06 +param set-default SENS_GPS0_DELAY 100 +param set-default SENS_GPS1_DELAY 100 +param set-default SENS_GPS0_OFFX 0.06 param set-default EKF2_GPS_V_NOISE 0.5 param set-default EKF2_IMU_POS_X 0.06 diff --git a/ROMFS/px4fmu_common/init.d/airframes/50001_aion_robotics_r1_rover b/ROMFS/px4fmu_common/init.d/airframes/50001_aion_robotics_r1_rover index 3063bd3647..fe6c09678c 100644 --- a/ROMFS/px4fmu_common/init.d/airframes/50001_aion_robotics_r1_rover +++ b/ROMFS/px4fmu_common/init.d/airframes/50001_aion_robotics_r1_rover @@ -2,7 +2,7 @@ # # @name Aion Robotics R1 UGV # -# @url https://docs.px4.io/main/en/complete_vehicles_rover/aion_r1.html +# @url https://docs.px4.io/main/en/complete_vehicles_rover/aion_r1 # # @type Rover # @class Rover diff --git a/ROMFS/px4fmu_common/init.d/airframes/CMakeLists.txt b/ROMFS/px4fmu_common/init.d/airframes/CMakeLists.txt index 8f13aa55b1..fd6827e509 100644 --- a/ROMFS/px4fmu_common/init.d/airframes/CMakeLists.txt +++ b/ROMFS/px4fmu_common/init.d/airframes/CMakeLists.txt @@ -49,6 +49,7 @@ if(CONFIG_MODULES_SIMULATION_PWM_OUT_SIM) 1101_rc_plane_sih.hil 1102_tailsitter_duo_sih.hil 1103_standard_vtol_sih.hil + 1105_rc_hexa_x_sih.hil ) if(CONFIG_MODULES_ROVER_ACKERMANN) px4_add_romfs_files( diff --git a/ROMFS/px4fmu_common/init.d/rc.sensors b/ROMFS/px4fmu_common/init.d/rc.sensors index ea6b8d4f1e..a7c6a5b774 100644 --- a/ROMFS/px4fmu_common/init.d/rc.sensors +++ b/ROMFS/px4fmu_common/init.d/rc.sensors @@ -238,7 +238,7 @@ then fi # Start TMP102 temperature sensor -if param compare SENS_EN_TMP102 1 +if param compare -s SENS_EN_TMP102 1 then tmp102 start -X fi diff --git a/ROMFS/px4fmu_common/init.d/rcS b/ROMFS/px4fmu_common/init.d/rcS index 80749fbe8c..eb06764d4c 100644 --- a/ROMFS/px4fmu_common/init.d/rcS +++ b/ROMFS/px4fmu_common/init.d/rcS @@ -31,11 +31,20 @@ set PARAM_FILE "" set PARAM_BACKUP_FILE "" set RC_INPUT_ARGS "" set STORAGE_AVAILABLE no +set STORAGE_CHECK yes set SDCARD_EXT_PATH /fs/microsd/ext_autostart set SDCARD_FORMAT no set STARTUP_TUNE 1 set VEHICLE_TYPE none +# Fine-grained feature gates. +set USE_HARDFAULT_LOG no +set USE_EXTERNAL_AIRFRAMES no +set USE_PARAM_BACKUPS no +set USE_PARAM_IMPORT_DEBUG no +set USE_TASK_WATCHDOG no +set USE_ALT_UPDATE_DIRS no + # Airframe parameter versioning # Value set to 1 by default but can optionally be overridden in the airframe configuration startup script. # Airframe maintainers can ensure a reset to the airframe defaults during an update by increasing by one. @@ -48,53 +57,81 @@ set PARAM_DEFAULTS_VER 1 ver all # -# Try to mount the microSD card. +# Optional early board init: rc.board_early +# Can be used for setting env vars for rcS. # -if [ -b "/dev/mmcsd0" ] +set BOARD_RC_EARLY ${R}etc/init.d/rc.board_early +if [ -f $BOARD_RC_EARLY ] then - if mount -t vfat /dev/mmcsd0 /fs/microsd - then - if [ -f "/fs/microsd/.format" ] - then - echo "INFO [init] format /dev/mmcsd0 requested (/fs/microsd/.format)" - set SDCARD_FORMAT yes - rm /fs/microsd/.format - umount /fs/microsd + . $BOARD_RC_EARLY +fi +unset BOARD_RC_EARLY - else +# +# Try to mount/check storage (rc.board_early can disable this). +# +if [ $STORAGE_CHECK = yes ] +then + # + # Try to mount the microSD card. + # + if [ -b "/dev/mmcsd0" ] + then + if mount -t vfat /dev/mmcsd0 /fs/microsd + then + if [ -f "/fs/microsd/.format" ] + then + echo "INFO [init] format /dev/mmcsd0 requested (/fs/microsd/.format)" + set SDCARD_FORMAT yes + rm /fs/microsd/.format + umount /fs/microsd + + else + set STORAGE_AVAILABLE yes + fi + fi + + if [ $STORAGE_AVAILABLE = no -o $SDCARD_FORMAT = yes ] + then + echo "INFO [init] formatting /dev/mmcsd0" + set STARTUP_TUNE 15 # tune 15 = SD_ERROR (overridden to SD_INIT if format + mount succeeds) + + if mkfatfs -F 32 /dev/mmcsd0 + then + echo "INFO [init] card formatted" + + if mount -t vfat /dev/mmcsd0 /fs/microsd + then + set STORAGE_AVAILABLE yes + set STARTUP_TUNE 14 # tune 14 = SD_INIT + else + echo "ERROR [init] card mount failed" + fi + else + echo "ERROR [init] format failed" + fi + fi + else + # Is there a device mounted for storage + if mft query -q -k MTD -s MTD_PARAMETERS -v /mnt/microsd + then set STORAGE_AVAILABLE yes fi fi - - if [ $STORAGE_AVAILABLE = no -o $SDCARD_FORMAT = yes ] - then - echo "INFO [init] formatting /dev/mmcsd0" - set STARTUP_TUNE 15 # tune 15 = SD_ERROR (overridden to SD_INIT if format + mount succeeds) - - if mkfatfs -F 32 /dev/mmcsd0 - then - echo "INFO [init] card formatted" - - if mount -t vfat /dev/mmcsd0 /fs/microsd - then - set STORAGE_AVAILABLE yes - set STARTUP_TUNE 14 # tune 14 = SD_INIT - else - echo "ERROR [init] card mount failed" - fi - else - echo "ERROR [init] format failed" - fi - fi -else - # Is there a device mounted for storage - if mft query -q -k MTD -s MTD_PARAMETERS -v /mnt/microsd - then - set STORAGE_AVAILABLE yes - fi fi if [ $STORAGE_AVAILABLE = yes ] +then + set USE_HARDFAULT_LOG yes + set USE_EXTERNAL_AIRFRAMES yes + set USE_PARAM_BACKUPS yes + set USE_PARAM_IMPORT_DEBUG yes + set USE_ALT_UPDATE_DIRS yes + set PARAM_FILE /fs/microsd/params + set PARAM_BACKUP_FILE "/fs/microsd/parameters_backup.bson" +fi + +if [ $USE_HARDFAULT_LOG = yes ] then if hardfault_log check then @@ -104,7 +141,15 @@ then hardfault_log reset fi fi +fi +if [ $USE_TASK_WATCHDOG = yes ] +then + task_watchdog start +fi + +if [ $USE_ALT_UPDATE_DIRS = yes ] +then # Check for an update of the ext_autostart folder, and replace the old one with it if [ -e /fs/microsd/ext_autostart_new ] then @@ -112,9 +157,6 @@ then rm -r $SDCARD_EXT_PATH mv /fs/microsd/ext_autostart_new $SDCARD_EXT_PATH fi - - set PARAM_FILE /fs/microsd/params - set PARAM_BACKUP_FILE "/fs/microsd/parameters_backup.bson" fi # @@ -155,8 +197,11 @@ else if [ -d "/fs/microsd" ] then - # try to make a backup copy - cp $PARAM_FILE /fs/microsd/param_import_fail.bson + if [ $USE_PARAM_IMPORT_DEBUG = yes ] + then + # save copy of the failed param file for debugging + cp $PARAM_FILE /fs/microsd/param_import_fail.bson + fi # try importing from backup file if [ -f $PARAM_BACKUP_FILE ] @@ -174,11 +219,14 @@ else param status - dmesg >> /fs/microsd/param_import_fail.txt & + if [ $USE_PARAM_IMPORT_DEBUG = yes ] + then + dmesg >> /fs/microsd/param_import_fail.txt & + fi fi fi - if [ $STORAGE_AVAILABLE = yes ] + if [ $USE_PARAM_BACKUPS = yes ] then param select-backup $PARAM_BACKUP_FILE fi @@ -188,11 +236,11 @@ else netman update -i eth0 fi - # To trigger a parameter reset during boot SYS_AUTCONFIG was set to 1 before + # To trigger a parameter reset during boot SYS_AUTOCONFIG was set to 1 before if param greater SYS_AUTOCONFIG 0 then - # Reset parameters except airframe, parameter version, RC calibration, sensor calibration, flight modes, total flight time, flight UUID - param reset_all SYS_AUTOSTART SYS_PARAM_VER RC* CAL_* COM_FLTMODE* LND_FLIGHT* TC_* COM_FLIGHT* + # Reset parameters except airframe, parameter version, sensor calibration, total flight time, flight UUID + param reset_all SYS_AUTOSTART SYS_PARAM_VER CAL_* LND_FLIGHT* TC_* COM_FLIGHT* fi # @@ -234,12 +282,12 @@ else if [ ${VEHICLE_TYPE} = none ] then - # Run external airframe script on SD card - if [ $STORAGE_AVAILABLE = yes ] + # Run external airframe script on SD card or EEPROM-backed storage + if [ $USE_EXTERNAL_AIRFRAMES = yes ] then . ${R}etc/init.d/rc.autostart_ext else - echo "ERROR [init] SD not mounted, skipping external airframe" + echo "ERROR [init] no external airframe storage, skipping" fi fi @@ -633,12 +681,15 @@ else # # Start the VTX services. # - set RC_VTXTABLE ${R}etc/init.d/rc.vtxtable - if [ -f ${RC_VTXTABLE} ] + if ! param compare -s VTX_SER_CFG 0 then - . ${RC_VTXTABLE} + set RC_VTXTABLE ${R}etc/init.d/rc.vtxtable + if [ -f ${RC_VTXTABLE} ] + then + . ${RC_VTXTABLE} + fi + unset RC_VTXTABLE fi - unset RC_VTXTABLE # # Set additional parameters and env variables for selected AUTOSTART. @@ -648,6 +699,10 @@ else . ${R}etc/init.d/rc.autostart.post fi + # + # Lock read-only parameters (if configured for this board). + # + param lock set BOARD_BOOTLOADER_UPGRADE ${R}etc/init.d/rc.board_bootloader_upgrade if [ -f $BOARD_BOOTLOADER_UPGRADE ] @@ -676,9 +731,16 @@ unset PARAM_BACKUP_FILE unset PARAM_DEFAULTS_VER unset RC_INPUT_ARGS unset STORAGE_AVAILABLE +unset STORAGE_CHECK unset SDCARD_EXT_PATH unset SDCARD_FORMAT unset STARTUP_TUNE +unset USE_HARDFAULT_LOG +unset USE_EXTERNAL_AIRFRAMES +unset USE_PARAM_BACKUPS +unset USE_PARAM_IMPORT_DEBUG +unset USE_TASK_WATCHDOG +unset USE_ALT_UPDATE_DIRS unset VEHICLE_TYPE # diff --git a/SECURITY.md b/SECURITY.md index ed99e771bb..cb27a808a7 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -2,24 +2,40 @@ ## Supported Versions -The following is a list of versions the development team is currently supporting. +The following versions receive security updates: | Version | Supported | | ------- | ------------------ | -| 1.4.x | :white_check_mark: | -| 1.3.3 | :white_check_mark: | -| < 1.3 | :x: | +| 1.16.x | :white_check_mark: | +| < 1.16 | :x: | ## Reporting a Vulnerability -We currently only receive security vulnerability reports through GitHub. +We receive security vulnerability reports through GitHub Security Advisories. -To begin a report, please go to the top-level repository, for example, PX4/PX4-Autopilot, -and click on the Security tab. If you are on mobile, click the ... dropdown menu, and then click Security. +To begin a report, go to the [PX4/PX4-Autopilot](https://github.com/PX4/PX4-Autopilot) repository +and click on the **Security** tab. If you are on mobile, click the **...** dropdown menu, then click **Security**. -Click Report a Vulnerability to open the advisory form. Fill in the advisory details form. -Make sure your title is descriptive, and the development team can find all of the relevant details needed -to verify on the description box. We recommend you add as much data as possible. We welcome logs, -screenshots, photos, and videos, anything that can help us verify and identify the issues being reported. +Click **Report a Vulnerability** to open the advisory form. Fill in the advisory details form. +Make sure your title is descriptive and the description contains all relevant details needed +to verify the issue. We welcome logs, screenshots, photos, and videos. -At the bottom of the form, click Submit report. The maintainer team will be notified and will get back to you ASAP. +At the bottom of the form, click **Submit report**. + +## Response Process + +1. **Acknowledgment**: The maintainer team will acknowledge your report within **7 days**. +2. **Triage**: We will assess severity and impact and communicate next steps. +3. **Disclosure**: We coordinate disclosure with the reporter. We follow responsible disclosure practices and will credit reporters in the advisory unless they request anonymity. + +If you do not receive acknowledgment within 7 days, please follow up by emailing the [release managers](MAINTAINERS.md). + +## Secure Development Practices + +The PX4 development team applies the following practices to reduce security risk: + +- **Code review**: All changes require peer review before merging. +- **Static analysis**: [clang-tidy](https://clang.llvm.org/extra/clang-tidy/) runs on every pull request with warnings treated as errors. +- **Fuzzing**: A daily fuzzing pipeline using [Google fuzztest](https://github.com/google/fuzztest) tests MAVLink message handling and GNSS driver protocol parsing. +- **Input validation**: All external inputs (MAVLink messages, RC signals, sensor data) are validated against expected ranges before use. +- **Compiler hardening**: Builds use `-Wall -Werror`, stack protectors, and other hardening flags where supported by the target platform. diff --git a/Tools/HIL/test_airframes.sh b/Tools/HIL/test_airframes.sh index 24d20f07ec..3b26d47ed0 100755 --- a/Tools/HIL/test_airframes.sh +++ b/Tools/HIL/test_airframes.sh @@ -1,4 +1,4 @@ -#! /bin/bash +#!/usr/bin/env bash # exit when any command fails set -e diff --git a/Tools/Matlab/motors.m b/Tools/Matlab/motors.m deleted file mode 100644 index 6d688a3077..0000000000 --- a/Tools/Matlab/motors.m +++ /dev/null @@ -1,58 +0,0 @@ -clear all; -close all; - -% Measurement data -% 1045 propeller -% Robbe Roxxy Motor (1100 kV, data collected in 2010) -data = [ 45, 7.4;... - 38, 5.6;... - 33, 4.3;... - 26, 3.0;... - 18, 2.0;... - 10, 1.0 ]; - -% Normalize the data, as we're operating later -% anyways in normalized units -data(:,1) = data(:,1) ./ max(data(:,1)); -data(:,2) = data(:,2) ./ max(data(:,2)); - -% Fit a 2nd degree polygon to the data and -% print the x2, x1, x0 coefficients -p = polyfit(data(:,2), data(:,1),2) - -% Override the first coffefficient for testing -% purposes -pf = 0.62; - -% Generate plotting data -px1 = linspace(0, max(data(:,2))); -py1 = polyval(p, px1); - -pyt = zeros(size(data, 1), 1); -corr = zeros(size(data, 1), 1); - -% Actual code test -% the two lines below are the ones needed to be ported to C: -% pf: Power factor parameter. -% px1(i): The current normalized motor command (-1..1) -% corr(i): The required correction. The motor speed is: -% px1(i) -for i=1:size(px1, 2) - - % The actual output throttle - pyt(i) = -pf * (px1(i) * px1(i)) + (1 + pf) * px1(i); - - % Solve for input throttle - % y = -p * x^2 + (1+p) * x; - % -end - -plot(data(:,2), data(:,1), '*r'); -hold on; -plot(px1, py1, '*b'); -hold on; -plot([0 px1(end)], [0 py1(end)], '-k'); -hold on; -plot(px1, pyt, '-b'); -hold on; -plot(px1, corr, '-m'); diff --git a/Tools/Matlab/plot_mag.m b/Tools/Matlab/plot_mag.m deleted file mode 100644 index c9f0c29925..0000000000 --- a/Tools/Matlab/plot_mag.m +++ /dev/null @@ -1,77 +0,0 @@ -% -% Tool for plotting mag data -% -% Reference values: -% telem> [cal] mag #0 off: x:0.15 y:0.07 z:0.14 Ga -% MATLAB: x:0.1581 y: 0.0701 z: 0.1439 Ga -% telem> [cal] mag #0 scale: x:1.10 y:0.97 z:1.02 -% MATLAB: 0.5499, 0.5190, 0.4907 -% -% telem> [cal] mag #1 off: x:-0.18 y:0.11 z:-0.09 Ga -% MATLAB: x:-0.1827 y:0.1147 z:-0.0848 Ga -% telem> [cal] mag #1 scale: x:1.00 y:1.00 z:1.00 -% MATLAB: 0.5122, 0.5065, 0.4915 -% -% -% User-guided values: -% -% telem> [cal] mag #0 off: x:0.12 y:0.09 z:0.14 Ga -% telem> [cal] mag #0 scale: x:0.88 y:0.99 z:0.95 -% telem> [cal] mag #1 off: x:-0.18 y:0.11 z:-0.09 Ga -% telem> [cal] mag #1 scale: x:1.00 y:1.00 z:1.00 - -close all; -clear all; - -plot_scale = 0.8; - -xmax = plot_scale; -xmin = -xmax; -ymax = plot_scale; -ymin = -ymax; -zmax = plot_scale; -zmin = -zmax; - -mag0_raw = load('../../mag0_raw3.csv'); -mag1_raw = load('../../mag1_raw3.csv'); - -mag0_cal = load('../../mag0_cal3.csv'); -mag1_cal = load('../../mag1_cal3.csv'); - -fm0r = figure(); - -mag0_x_scale = 0.88; -mag0_y_scale = 0.99; -mag0_z_scale = 0.95; - -plot3(mag0_raw(:,1), mag0_raw(:,2), mag0_raw(:,3), '*r'); -[mag0_raw_center, mag0_raw_radii, evecs, pars ] = ellipsoid_fit( [mag0_raw(:,1) mag0_raw(:,2) mag0_raw(:,3)] ); -mag0_raw_center -mag0_raw_radii -axis([xmin xmax ymin ymax zmin zmax]) -viscircles([mag0_raw_center(1), mag0_raw_center(2)], [mag0_raw_radii(1)]); - -fm1r = figure(); -plot3(mag1_raw(:,1), mag1_raw(:,2), mag1_raw(:,3), '*r'); -[center, radii, evecs, pars ] = ellipsoid_fit( [mag1_raw(:,1) mag1_raw(:,2) mag1_raw(:,3)] ); -center -radii -axis([xmin xmax ymin ymax zmin zmax]) - -fm0c = figure(); -plot3(mag0_cal(:,1) .* mag0_x_scale, mag0_cal(:,2) .* mag0_y_scale, mag0_cal(:,3) .* mag0_z_scale, '*b'); -[mag0_cal_center, mag0_cal_radii, evecs, pars ] = ellipsoid_fit( [mag1_raw(:,1) .* mag0_x_scale mag1_raw(:,2) .* mag0_y_scale mag1_raw(:,3) .* mag0_z_scale] ); -mag0_cal_center -mag0_cal_radii -axis([xmin xmax ymin ymax zmin zmax]) -viscircles([0, 0], [mag0_cal_radii(3)]); - -fm1c = figure(); -plot3(mag1_cal(:,1), mag1_cal(:,2), mag1_cal(:,3), '*b'); -axis([xmin xmax ymin ymax zmin zmax]) -[center, radii, evecs, pars ] = ellipsoid_fit( [mag1_raw(:,1) mag1_raw(:,2) mag1_raw(:,3)] ); -viscircles([0, 0], [radii(3)]); - -mag0_x_scale_matlab = 1 / (mag0_cal_radii(1) / mag0_raw_radii(1)) -mag0_y_scale_matlab = 1 / (mag0_cal_radii(2) / mag0_raw_radii(2)) -mag0_z_scale_matlab = 1 / (mag0_cal_radii(3) / mag0_raw_radii(3)) diff --git a/Tools/astyle/check_code_style.sh b/Tools/astyle/check_code_style.sh index c68b32a9a2..a25fe62e8b 100755 --- a/Tools/astyle/check_code_style.sh +++ b/Tools/astyle/check_code_style.sh @@ -16,7 +16,7 @@ if [ -n "$CHECK_FAILED" ]; then if [[ $PX4_ASTYLE_FIX -eq 1 ]]; then ${DIR}/fix_code_style.sh $FILE else - echo 'to fix automatically run "make format" or "./Tools/astyle/fix_code_style.sh' $FILE'"' + echo 'to fix automatically run "make format", "make format_changed" or "./Tools/astyle/fix_code_style.sh' $FILE'"' exit 1 fi fi diff --git a/Tools/astyle/check_code_style_all.sh b/Tools/astyle/check_code_style_all.sh index 462a1358e3..871ab62256 100755 --- a/Tools/astyle/check_code_style_all.sh +++ b/Tools/astyle/check_code_style_all.sh @@ -36,9 +36,13 @@ fi CI="${CI:-false}" DIR=$(cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd) -if [[ "$@" == "--fix" ]]; then - export PX4_ASTYLE_FIX=1 -fi +DIFF_ONLY=false +for arg in "$@"; do + case "$arg" in + --fix) export PX4_ASTYLE_FIX=1 ;; + --diff-only) DIFF_ONLY=true ;; + esac +done # install git pre-commit hook @@ -59,7 +63,24 @@ if [[ ! -f "$HOOK_FILE" && "$CI" != "true" && $- == *i* ]]; then fi fi -${DIR}/files_to_check_code_style.sh | xargs -P 8 -I % ${DIR}/check_code_style.sh % +FILE_LIST=$(${DIR}/files_to_check_code_style.sh) + +if [ "$DIFF_ONLY" = true ]; then + # --diff-filter=d: do not list deleted files (no need to format) + CHANGED=$(git -C "$DIR/../.." diff --name-only --diff-filter=d HEAD -- '*.c' '*.h' '*.cpp' '*.hpp') + if [ -z "$CHANGED" ]; then + FILE_LIST="" + else + FILE_LIST=$(echo "$FILE_LIST" | grep -Fx -f <(echo "$CHANGED") || true) + fi +fi + +if [ -z "$FILE_LIST" ]; then + echo "No files to check" + exit 0 +fi + +echo "$FILE_LIST" | xargs -P 8 -I % ${DIR}/check_code_style.sh % if [ $? -eq 0 ]; then echo "Format checks passed" diff --git a/Tools/astyle/files_to_check_code_style.sh b/Tools/astyle/files_to_check_code_style.sh index b70766efa2..ca6b28b37f 100755 --- a/Tools/astyle/files_to_check_code_style.sh +++ b/Tools/astyle/files_to_check_code_style.sh @@ -28,6 +28,7 @@ exec find boards msg src platforms test \ -path src/modules/gyro_fft/CMSIS_5 -prune -o \ -path src/modules/mavlink/mavlink -prune -o \ -path src/modules/mc_raptor/blob -prune -o \ + -path src/modules/simulation/gz_plugins/optical_flow/PX4-OpticalFlow -prune -o \ -path test/fuzztest -prune -o \ -path test/mavsdk_tests/catch2 -prune -o \ -path src/lib/crypto/monocypher -prune -o \ @@ -39,6 +40,8 @@ exec find boards msg src platforms test \ -path src/lib/cdrstream/rosidl -prune -o \ -path src/modules/zenoh/zenoh-pico -prune -o \ -path boards/modalai/voxl2/libfc-sensor-api -prune -o \ + -path boards/modalai/voxl2/src/lib/mpa/libmodal-json -prune -o \ + -path boards/modalai/voxl2/src/lib/mpa/libmodal-pipe -prune -o \ -path src/drivers/actuators/vertiq_io/iq-module-communication-cpp -prune -o \ -path src/lib/tensorflow_lite_micro/tflite_micro -prune -o \ -path src/drivers/ins/sbgecom/sbgECom -prune -o \ diff --git a/Tools/astyle/fix_code_style.sh b/Tools/astyle/fix_code_style.sh index 73a7a39278..af3a968e38 100755 --- a/Tools/astyle/fix_code_style.sh +++ b/Tools/astyle/fix_code_style.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash if [[ $# -eq 0 ]] ; then exit 0 diff --git a/Tools/auterion/remote_update_fmu.sh b/Tools/auterion/remote_update_fmu.sh index d3777aebaf..ba181bc49e 100755 --- a/Tools/auterion/remote_update_fmu.sh +++ b/Tools/auterion/remote_update_fmu.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Flash PX4 to a device running AuterionOS in the local network if [ "$1" == "-h" ] || [ "$1" == "--help" ] || [ $# -lt 2 ]; then echo "Usage: $0 -f [-c ] -d [-u ] [-p ] [--revert]" diff --git a/Tools/ci/_github_helpers.py b/Tools/ci/_github_helpers.py new file mode 100644 index 0000000000..628e4dc4b4 --- /dev/null +++ b/Tools/ci/_github_helpers.py @@ -0,0 +1,172 @@ +#!/usr/bin/env python3 +""" +Shared GitHub REST helpers for PX4 CI scripts. + +This module is imported by the PR poster scripts under Tools/ci/. It is +NOT an executable entry point; do not run it directly. + +Provides: + - fail(msg) terminates the caller with a clear error + - GitHubClient(token) thin stdlib-only GitHub REST client with + single-request and paginated helpers + +Python stdlib only. No third-party dependencies. + +History: extracted from Tools/ci/pr-comment-poster.py so that +pr-comment-poster.py and pr-review-poster.py share the same HTTP plumbing +without duplicating ~100 lines of request/pagination/error-handling code. +""" + +import json +import sys +import typing +import urllib.error +import urllib.request + + +GITHUB_API = 'https://api.github.com' +DEFAULT_USER_AGENT = 'px4-ci' +API_VERSION = '2022-11-28' + + +def fail(msg: str) -> typing.NoReturn: + """Print an error to stderr and exit with status 1. + + Annotated NoReturn so static checkers understand control does not + continue past a fail() call. + """ + print('error: {}'.format(msg), file=sys.stderr) + sys.exit(1) + + +def _parse_next_link(link_header): + """Return the URL for rel="next" from an RFC 5988 Link header, or None. + + The Link header is comma-separated entries of the form: + ; rel="next", ; rel="last" + We walk each entry and return the URL of the one whose rel attribute is + "next". Accept single-quoted rel values for robustness even though + GitHub always emits double quotes. + """ + if not link_header: + return None + for part in link_header.split(','): + segs = part.strip().split(';') + if len(segs) < 2: + continue + url_seg = segs[0].strip() + if not (url_seg.startswith('<') and url_seg.endswith('>')): + continue + url = url_seg[1:-1] + for attr in segs[1:]: + attr = attr.strip() + if attr == 'rel="next"' or attr == "rel='next'": + return url + return None + + +class GitHubClient: + """Minimal GitHub REST client backed by the Python stdlib. + + Each instance holds a token and a user-agent so callers do not have to + thread them through every call. Methods return parsed JSON (or None for + empty responses) and raise RuntimeError with the server response body on + HTTP errors, so CI logs show what the API actually objected to. + + Usage: + client = GitHubClient(token, user_agent='px4-pr-comment-poster') + body, headers = client.request('GET', 'repos/{o}/{r}/pulls/123') + for item in client.paginated('repos/{o}/{r}/pulls/123/reviews'): + ... + """ + + def __init__(self, token, user_agent=DEFAULT_USER_AGENT): + if not token: + raise ValueError('GitHub token is required') + self._token = token + self._user_agent = user_agent + + def request(self, method, path_or_url, json_body=None): + """GET/POST/PATCH/PUT/DELETE a single API path or absolute URL. + + `path_or_url` may be either a relative API path (e.g. + "repos/PX4/PX4-Autopilot/pulls/123") or an absolute URL such as the + next-page URL returned from paginated results. Relative paths are + prefixed with the GitHub API base. + + Returns (parsed_json_or_none, headers_dict). Raises RuntimeError + on HTTP or transport errors. + """ + url = self._resolve(path_or_url) + return self._do_request(method, url, json_body) + + def paginated(self, path, per_page=100): + """GET a path and follow rel="next" Link headers. + + Yields items from each page's JSON array. Bumps per_page to 100 + (GitHub's max) so large result sets take fewer round-trips. + Raises RuntimeError if any page response is not a JSON array. + """ + url = self._resolve(path) + sep = '&' if '?' in url else '?' + url = '{}{}per_page={}'.format(url, sep, per_page) + while url is not None: + body, headers = self._do_request('GET', url, None) + if body is None: + return + if not isinstance(body, list): + raise RuntimeError( + 'expected JSON array from {}, got {}'.format( + url, type(body).__name__)) + for item in body: + yield item + url = _parse_next_link(headers.get('Link')) + + def _resolve(self, path_or_url): + if path_or_url.startswith('http://') or path_or_url.startswith('https://'): + return path_or_url + return '{}/{}'.format(GITHUB_API.rstrip('/'), path_or_url.lstrip('/')) + + def _do_request(self, method, url, json_body): + data = None + headers = { + 'Authorization': 'Bearer {}'.format(self._token), + 'Accept': 'application/vnd.github+json', + # Pin the API version so GitHub deprecations don't silently + # change the response shape under us. + 'X-GitHub-Api-Version': API_VERSION, + 'User-Agent': self._user_agent, + } + if json_body is not None: + data = json.dumps(json_body).encode('utf-8') + headers['Content-Type'] = 'application/json; charset=utf-8' + + req = urllib.request.Request( + url, data=data, method=method, headers=headers) + try: + with urllib.request.urlopen(req) as resp: + raw = resp.read() + # HTTPMessage is case-insensitive on lookup but its items() + # preserves the original case. GitHub sends "Link" with a + # capital L, which is what _parse_next_link expects. + resp_headers = dict(resp.headers.items()) + if not raw: + return None, resp_headers + return json.loads(raw.decode('utf-8')), resp_headers + except urllib.error.HTTPError as e: + # GitHub error bodies are JSON with a "message" field and often + # a "documentation_url". Dump the raw body into the exception so + # the CI log shows exactly what the API objected to. A bare + # "HTTP 422" tells us nothing useful. + try: + err_body = e.read().decode('utf-8', errors='replace') + except Exception: + err_body = '(no body)' + raise RuntimeError( + 'GitHub API {} {} failed: HTTP {} {}\n{}'.format( + method, url, e.code, e.reason, err_body)) + except urllib.error.URLError as e: + # Network layer failure (DNS, TLS, connection reset). No HTTP + # response to parse; just surface the transport reason. + raise RuntimeError( + 'GitHub API {} {} failed: {}'.format(method, url, e.reason)) diff --git a/Tools/ci/build_all_config.yml b/Tools/ci/build_all_config.yml new file mode 100644 index 0000000000..b53f8ff6c6 --- /dev/null +++ b/Tools/ci/build_all_config.yml @@ -0,0 +1,71 @@ +# Build All Targets CI Configuration +# +# Controls board grouping, cache sizes, runner specs, and seeder targets +# for the build_all_targets workflow. Forks can customize this file to +# adjust for their infrastructure (e.g., lower cache sizes for GitHub's +# 10GB cache limit, fewer CPU cores for smaller runners). + +# Container images +containers: + default: "ghcr.io/px4/px4-dev:v1.17.0-rc2" + voxl2: "ghcr.io/px4/px4-dev-voxl2:v1.7" + +# Runner specs +runners: + seeder_cpu: 8 + matrix_cpu: 4 + +# Default ccache max-size for build groups +cache: + default_size: "400M" + # Per-chip overrides for groups with many diverse boards + chip_sizes: + stm32h7: "800M" + stm32f4: "800M" + stm32f7: "800M" + imxrt: "800M" + +# Board grouping limits +grouping: + # Max targets per group, tuned for ~10 min wall-clock with warm cache + chip_split_limits: + stm32h7: 10 + stm32f7: 12 + stm32f4: 20 + stm32f1: 39 + imxrt: 12 + kinetis: 14 + s32k: 17 + rp2040: 10 + special: 10 + native: 17 + default_split_limit: 12 + # Minimum targets for a manufacturer to get a named group + lower_limit: 3 + # If last chunk has fewer targets than this, merge into previous chunk + merge_back_threshold: 5 + +# Labels that isolate builds into the "special" group +special_labels: + - lto + - protected + +# NXP chip families are pooled under "nxp-{chip}" regardless of board directory +nxp_chip_families: + - imxrt + - kinetis + - s32k + +# Seeder targets: one representative build per chip family +seeders: + stm32h7: "px4_fmu-v6x_default" + stm32f7: "px4_fmu-v5_default" + stm32f4: "px4_fmu-v4_default" + stm32f1: "px4_io-v2_default" + imxrt: "nxp_mr-tropic_default" + kinetis: "nxp_fmuk66-v3_default" + s32k: "nxp_mr-canhubk3_default" + rp2040: "raspberrypi_pico_default" + special: "px4_fmu-v6x_default" + native: "px4_sitl_default" + voxl2: "modalai_voxl2_default" diff --git a/Tools/ci/build_all_runner.sh b/Tools/ci/build_all_runner.sh index bfb77e2623..a47d42dd87 100755 --- a/Tools/ci/build_all_runner.sh +++ b/Tools/ci/build_all_runner.sh @@ -1,9 +1,8 @@ -#!/bin/bash +#!/usr/bin/env bash # This script is meant to be used by the build_all.yml workflow in a github runner # Please only modify if you know what you are doing set -e -echo "### :clock1: Build Times" >> $GITHUB_STEP_SUMMARY targets=$1 for target in ${targets//,/ } do @@ -14,6 +13,5 @@ do diff=$(($stop-$start)) build_time="$(($diff /60/60))h $(($diff /60))m $(($diff % 60))s elapsed" echo -e "\033[0;32mBuild Time: [$build_time]" - echo "* **$target** - $build_time" >> $GITHUB_STEP_SUMMARY echo "::endgroup::" done diff --git a/Tools/ci/check_commit_messages.py b/Tools/ci/check_commit_messages.py new file mode 100755 index 0000000000..5359f737cb --- /dev/null +++ b/Tools/ci/check_commit_messages.py @@ -0,0 +1,331 @@ +#!/usr/bin/env python3 +"""Validate commit messages in a PR against conventional commits format. + +Reads a JSON array of GitHub commit objects from stdin (as returned by the +GitHub API's /pulls/{n}/commits endpoint) and checks each message for +blocking errors and advisory warnings. + +With --markdown, outputs a formatted PR comment body instead of plain text. +""" + +import json +import sys + +from conventional_commits import ( + EXEMPT_PREFIXES, + parse_header, +) + +# Blocking: prefixes that indicate unsquashed fixup commits +FIXUP_PREFIXES = ('fixup!', 'squash!', 'amend!') + +# Blocking: single-word throwaway messages (case-insensitive exact match) +THROWAWAY_WORDS = frozenset({ + 'fix', 'fixed', 'fixes', + 'update', 'updated', 'updates', + 'test', 'tests', 'testing', + 'tmp', 'temp', + 'oops', 'wip', + 'debug', 'cleanup', +}) + +# Blocking: debug session leftovers +DEBUG_KEYWORDS = ('tmate',) + +# Warning: review-response messages (case-insensitive substring match) +REVIEW_RESPONSE_PATTERNS = ( + 'address review', + 'apply suggestions from code review', + 'code review', +) + +# Warning: formatter-only commits +FORMATTER_PATTERNS = ( + 'do make format', + 'make format', + 'run formatter', + 'apply format', +) + +MIN_MESSAGE_LENGTH = 5 + + +def check_commit(message: str) -> tuple[list[str], list[str]]: + """Return (errors, warnings) for a single commit message.""" + errors: list[str] = [] + warnings: list[str] = [] + + first_line = message.split('\n', 1)[0].strip() + lower = first_line.lower() + + # --- Blocking checks --- + + for prefix in FIXUP_PREFIXES: + if lower.startswith(prefix): + errors.append(f'Unsquashed commit: starts with "{prefix}"') + + if lower == 'wip' or lower.startswith('wip ') or lower.startswith('wip:'): + errors.append('WIP commit should not be merged') + + if len(first_line) < MIN_MESSAGE_LENGTH: + errors.append(f'Message too short ({len(first_line)} chars, minimum {MIN_MESSAGE_LENGTH})') + + if first_line.strip() and first_line.strip().lower() in THROWAWAY_WORDS: + errors.append(f'Single-word throwaway message: "{first_line.strip()}"') + + for kw in DEBUG_KEYWORDS: + if kw in lower: + errors.append(f'Debug session leftover: contains "{kw}"') + + # --- Warning checks --- + + for pattern in REVIEW_RESPONSE_PATTERNS: + if pattern in lower: + warnings.append('Review-response commit') + break + + for pattern in FORMATTER_PATTERNS: + if pattern in lower: + warnings.append('Formatter-only commit') + break + + if not parse_header(first_line): + # Exempt merge commits + for prefix in EXEMPT_PREFIXES: + if first_line.startswith(prefix): + break + else: + warnings.append( + 'Missing conventional commit format ' + '(e.g. "feat(ekf2): add something")' + ) + + return errors, warnings + + +def suggest_commit(message: str) -> str | None: + """Suggest how to fix a bad commit message.""" + first_line = message.split('\n', 1)[0].strip() + lower = first_line.lower() + + for prefix in FIXUP_PREFIXES: + if lower.startswith(prefix): + return 'Squash this into the commit it fixes' + + if lower == 'wip' or lower.startswith('wip ') or lower.startswith('wip:'): + return 'Reword with a descriptive message (e.g. "feat(scope): what changed")' + + if len(first_line) < MIN_MESSAGE_LENGTH: + return 'Reword with a descriptive message (e.g. "feat(ekf2): what changed")' + + if first_line.strip().lower() in THROWAWAY_WORDS: + return 'Reword with a descriptive message (e.g. "fix(scope): what changed")' + + return None + + +def format_plain(data: list) -> tuple[bool, bool]: + """Print plain text output. Returns (has_blocking, has_warnings).""" + has_blocking = False + has_warnings = False + + for commit in data: + sha = commit.get('sha', '?')[:10] + message = commit.get('commit', {}).get('message', '') + first_line = message.split('\n', 1)[0].strip() + + errors, warnings = check_commit(message) + + if errors or warnings: + print(f"\n {sha} {first_line}") + + for err in errors: + print(f" ERROR: {err}") + has_blocking = True + + for warn in warnings: + print(f" WARNING: {warn}") + has_warnings = True + + if has_blocking: + print( + "\n" + "ERROR = must fix before merging (CI will block the PR)\n" + "WARNING = advisory, not blocking, but recommended to fix\n" + "\n" + "See the contributing guide for details:\n" + " https://github.com/PX4/PX4-Autopilot/blob/main/CONTRIBUTING.md#commit-message-convention\n", + ) + + elif has_warnings: + print( + "\n" + "WARNING = advisory, not blocking, but recommended to fix\n" + "\n" + "See the contributing guide for details:\n" + " https://github.com/PX4/PX4-Autopilot/blob/main/CONTRIBUTING.md#commit-message-convention\n", + ) + + return has_blocking, has_warnings + + +def format_markdown_blocking(data: list) -> str: + """Format a blocking error markdown comment.""" + error_groups: dict[str, list[str]] = {} + unique_commits: list[tuple[str, str, list[str], str]] = [] + + for commit in data: + sha = commit.get('sha', '?')[:10] + message = commit.get('commit', {}).get('message', '') + first_line = message.split('\n', 1)[0].strip() + + errors, _ = check_commit(message) + if not errors: + continue + + suggestion = suggest_commit(message) or '' + unique_commits.append((sha, first_line, errors, suggestion)) + + for err in errors: + error_groups.setdefault(err, []).append(sha) + + lines = [ + "## \u274c Commit messages need attention before merging", + "", + ] + + has_large_group = any(len(shas) > 3 for shas in error_groups.values()) + + if has_large_group: + lines.extend([ + "**Issues found:**", + "", + ]) + for err_msg, shas in error_groups.items(): + if len(shas) > 3: + lines.append(f"- **{len(shas)} commits**: {err_msg} " + f"(`{shas[0]}`, `{shas[1]}`, ... `{shas[-1]}`)") + else: + sha_list = ', '.join(f'`{s}`' for s in shas) + lines.append(f"- {err_msg}: {sha_list}") + + distinct_messages = {msg for _, msg, _, _ in unique_commits} + if len(distinct_messages) <= 5: + lines.extend(["", "**Affected commits:**", ""]) + for sha, msg, errors, suggestion in unique_commits: + safe_msg = msg.replace('|', '\\|') + lines.append(f"- `{sha}` {safe_msg}") + else: + lines.extend([ + "| Commit | Message | Issue | Suggested fix |", + "|--------|---------|-------|---------------|", + ]) + for sha, msg, errors, suggestion in unique_commits: + issues = '; '.join(errors) + safe_msg = msg.replace('|', '\\|') + lines.append(f"| `{sha}` | {safe_msg} | {issues} | {suggestion} |") + + lines.extend([ + "", + "See [CONTRIBUTING.md](https://github.com/PX4/PX4-Autopilot/blob/main/CONTRIBUTING.md#commit-message-convention) " + "for how to clean up commits.", + "", + "---", + "*This comment will be automatically removed once the issues are resolved.*", + ]) + + return '\n'.join(lines) + + +def format_markdown_advisory(data: list) -> str: + """Format an advisory warning markdown comment.""" + lines = [ + "## \U0001f4a1 Commit messages could be improved", + "", + "Not blocking, but these commit messages could use some cleanup.", + "", + "| Commit | Message | Suggestion |", + "|--------|---------|------------|", + ] + + for commit in data: + sha = commit.get('sha', '?')[:10] + message = commit.get('commit', {}).get('message', '') + first_line = message.split('\n', 1)[0].strip() + + _, warnings = check_commit(message) + if not warnings: + continue + + suggestion = '; '.join(warnings) + safe_msg = first_line.replace('|', '\\|') + lines.append(f"| `{sha}` | {safe_msg} | {suggestion} |") + + lines.extend([ + "", + "See the [commit message convention](https://github.com/PX4/PX4-Autopilot/blob/main/CONTRIBUTING.md#commit-message-convention) " + "for details.", + "", + "---", + "*This comment will be automatically removed once the issues are resolved.*", + ]) + + return '\n'.join(lines) + + +def main() -> None: + markdown_stdout = '--markdown' in sys.argv + markdown_file = None + for i, a in enumerate(sys.argv): + if a == '--markdown-file' and i + 1 < len(sys.argv): + markdown_file = sys.argv[i + 1] + elif a.startswith('--markdown-file='): + markdown_file = a.split('=', 1)[1] + + try: + data = json.load(sys.stdin) + except json.JSONDecodeError as exc: + print(f"Failed to parse JSON input: {exc}", file=sys.stderr) + sys.exit(2) + + if not isinstance(data, list): + print("Expected a JSON array of commit objects.", file=sys.stderr) + sys.exit(2) + + # Always compute blocking/warning state + has_blocking = False + has_warnings = False + for commit in data: + message = commit.get('commit', {}).get('message', '') + errors, warnings = check_commit(message) + if errors: + has_blocking = True + if warnings: + has_warnings = True + + # Generate markdown if needed + md = None + if has_blocking: + md = format_markdown_blocking(data) + elif has_warnings: + md = format_markdown_advisory(data) + + if md: + if markdown_stdout: + print(md) + if markdown_file: + with open(markdown_file, 'w') as f: + f.write(md + '\n') + elif markdown_file: + with open(markdown_file, 'w') as f: + pass + + # Plain text output to stderr for CI logs (always, unless --markdown only) + if not markdown_stdout: + has_blocking, _ = format_plain(data) + + sys.exit(1 if has_blocking else 0) + + +if __name__ == '__main__': + main() diff --git a/Tools/ci/check_msg_versioning.sh b/Tools/ci/check_msg_versioning.sh index 508a344ee6..da769dbeb3 100755 --- a/Tools/ci/check_msg_versioning.sh +++ b/Tools/ci/check_msg_versioning.sh @@ -1,4 +1,4 @@ -#! /bin/bash +#!/usr/bin/env bash # Copy a git diff between two commits if msg versioning is added DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) diff --git a/Tools/ci/check_pr_title.py b/Tools/ci/check_pr_title.py new file mode 100755 index 0000000000..5ef2663f8a --- /dev/null +++ b/Tools/ci/check_pr_title.py @@ -0,0 +1,163 @@ +#!/usr/bin/env python3 +"""Validate that a PR title follows conventional commits format. + +Format: type(scope): description + +Can output plain text for CI logs or markdown for PR comments. +""" + +import re +import sys + +from conventional_commits import ( + CONVENTIONAL_TYPES, + EXEMPT_PREFIXES, + parse_header, + suggest_scope, + suggest_type, +) + + +def suggest_title(title: str) -> str | None: + """Try to suggest a corrected title in conventional commits format.""" + stripped = title.strip() + + # Remove common bracket prefixes like [docs], [CI], etc. + bracket_match = re.match(r'^\[([^\]]+)\]\s*(.+)', stripped) + if bracket_match: + prefix = bracket_match.group(1).strip().lower() + rest = bracket_match.group(2).strip() + rest = re.sub(r'^[\-:]\s*', '', rest).strip() + if len(rest) >= 5: + # Try to map bracket content to a type + commit_type = prefix if prefix in CONVENTIONAL_TYPES else suggest_type(rest) + scope = suggest_scope(rest) + if scope: + return f"{commit_type}({scope}): {rest}" + + # Already has old-style "subsystem: description" format - convert it + colon_match = re.match(r'^([a-zA-Z][a-zA-Z0-9_/\-\. ]*): (.+)$', stripped) + if colon_match: + old_subsystem = colon_match.group(1).strip() + desc = colon_match.group(2).strip() + if len(desc) >= 5: + commit_type = suggest_type(desc) + # Use the old subsystem as scope (clean it up) + scope = old_subsystem.lower().replace(' ', '_') + return f"{commit_type}({scope}): {desc}" + + # No format at all - try to guess both type and scope + commit_type = suggest_type(stripped) + scope = suggest_scope(stripped) + if scope: + desc = stripped[0].lower() + stripped[1:] if stripped else stripped + return f"{commit_type}({scope}): {desc}" + + return None + + +def check_title(title: str) -> bool: + title = title.strip() + + if not title: + print("PR title is empty.", file=sys.stderr) + return False + + for prefix in EXEMPT_PREFIXES: + if title.startswith(prefix): + return True + + if parse_header(title): + return True + + types_str = ', '.join(f'`{t}`' for t in CONVENTIONAL_TYPES.keys()) + print( + f"PR title does not match conventional commits format.\n" + f"\n" + f" Title: {title}\n" + f"\n" + f"Expected format: type(scope): description\n" + f"\n" + f"Valid types: {types_str}\n" + f"\n" + f"Good examples:\n" + f" feat(ekf2): add height fusion timeout\n" + f" fix(mavlink): correct BATTERY_STATUS_V2 parsing\n" + f" ci(workflows): migrate to reusable workflows\n" + f" feat(boards/px4_fmu-v6x)!: remove deprecated driver API\n" + f"\n" + f"Bad examples:\n" + f" fix stuff\n" + f" Update file\n" + f" ekf2: fix something (missing type prefix)\n" + f"\n" + f"See the contributing guide for details:\n" + f" https://github.com/PX4/PX4-Autopilot/blob/main/CONTRIBUTING.md#commit-message-convention\n", + file=sys.stderr, + ) + return False + + +def format_markdown(title: str) -> str: + """Format a markdown PR comment body for a bad title.""" + lines = [ + "## \u274c PR title needs conventional commit format", + "", + "Expected format: `type(scope): description` " + "([conventional commits](https://www.conventionalcommits.org/)).", + "", + "**Your title:**", + f"> {title}", + "", + ] + + suggestion = suggest_title(title) + if suggestion: + lines.extend([ + "**Suggested fix:**", + f"> {suggestion}", + "", + ]) + + lines.extend([ + "**To fix this:** click the ✏️ next to the PR title at the top " + "of this page and update it.", + "", + "See [CONTRIBUTING.md](https://github.com/PX4/PX4-Autopilot/blob/main/CONTRIBUTING.md#commit-message-convention) " + "for details.", + "", + "---", + "*This comment will be automatically removed once the issue is resolved.*", + ]) + + return '\n'.join(lines) + + +def main() -> None: + import argparse + parser = argparse.ArgumentParser(description='Check PR title format') + parser.add_argument('title', help='The PR title to validate') + parser.add_argument('--markdown', action='store_true', + help='Output markdown to stdout on failure') + parser.add_argument('--markdown-file', metavar='FILE', + help='Write markdown to FILE on failure') + args = parser.parse_args() + + passed = check_title(args.title) + + if not passed: + md = format_markdown(args.title) + if args.markdown: + print(md) + if args.markdown_file: + with open(args.markdown_file, 'w') as f: + f.write(md + '\n') + elif args.markdown_file: + with open(args.markdown_file, 'w') as f: + pass + + sys.exit(0 if passed else 1) + + +if __name__ == '__main__': + main() diff --git a/Tools/ci/clang-tidy-diff-filter.py b/Tools/ci/clang-tidy-diff-filter.py new file mode 100644 index 0000000000..5f516c5d01 --- /dev/null +++ b/Tools/ci/clang-tidy-diff-filter.py @@ -0,0 +1,111 @@ +#!/usr/bin/env python3 +""" +Filter a git diff for consumption by clang-tidy-diff. + +Produces a unified diff containing only files that clang-tidy can +actually analyze against the current compilation database: + + - C/C++ source files (.c, .cpp, .cc, .cxx, .m, .mm) must be present + in compile_commands.json. Files absent from the database are test + files, excluded code, or platform-specific sources that were not + compiled. Feeding them to clang-tidy-diff produces spurious + "header not found" errors (gtest/gtest.h in particular). + + - Header files (.h, .hpp, .hxx) always pass through. clang-tidy + analyzes header changes via the TUs that include them; there is + no separate TU for a header to match against the database. + + - All other files (CMakeLists.txt, .yml, .md, etc.) are dropped. + +Output is a unified diff suitable for piping into clang-tidy-diff.py. +If nothing remains, the output file is empty. + +Used by .github/workflows/clang-tidy.yml as a pre-filter for the +`pr-review` artifact producer. Python stdlib only. +""" + +import argparse +import json +import os +import subprocess +import sys + + +SOURCE_EXTS = {'.c', '.cpp', '.cc', '.cxx', '.m', '.mm'} +HEADER_EXTS = {'.h', '.hpp', '.hxx'} + + +def load_db_files(build_dir): + """Return the set of source paths (repo-relative) in compile_commands.json.""" + path = os.path.join(build_dir, 'compile_commands.json') + with open(path) as f: + db = json.load(f) + root = os.path.abspath('.') + prefix = root + os.sep + paths = set() + for entry in db: + p = entry.get('file', '') + if p.startswith(prefix): + paths.add(p[len(prefix):]) + else: + # Relative or external path; record as-is + paths.add(p) + return paths + + +def changed_files(base_ref): + out = subprocess.check_output( + ['git', 'diff', '--name-only', '{}...HEAD'.format(base_ref)], + text=True, + ) + return [line.strip() for line in out.splitlines() if line.strip()] + + +def keep_file(path, db_files): + """Decide whether to keep this path in the filtered diff.""" + ext = os.path.splitext(path)[1].lower() + if ext in HEADER_EXTS: + return True + if ext in SOURCE_EXTS: + return path in db_files + return False + + +def filtered_diff(base_ref, keep_paths): + if not keep_paths: + return '' + cmd = ['git', 'diff', '-U0', '{}...HEAD'.format(base_ref), '--'] + sorted(keep_paths) + return subprocess.check_output(cmd, text=True) + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument('--build-dir', required=True, + help='CMake build dir containing compile_commands.json') + parser.add_argument('--base-ref', required=True, + help='Git ref to diff against (e.g. origin/main)') + parser.add_argument('--out', required=True, + help='Output path for the filtered unified diff') + args = parser.parse_args() + + db_files = load_db_files(args.build_dir) + changed = changed_files(args.base_ref) + + keep = [p for p in changed if keep_file(p, db_files)] + dropped = [p for p in changed if p not in keep] + + print('clang-tidy-diff-filter: kept {} of {} changed files'.format( + len(keep), len(changed))) + if dropped: + print(' dropped (not in compile_commands.json or not source/header):') + for p in dropped: + print(' {}'.format(p)) + + diff = filtered_diff(args.base_ref, keep) + with open(args.out, 'w') as f: + f.write(diff) + return 0 + + +if __name__ == '__main__': + sys.exit(main()) diff --git a/Tools/ci/clang-tidy-fixes-to-review.py b/Tools/ci/clang-tidy-fixes-to-review.py new file mode 100644 index 0000000000..3567ae4f76 --- /dev/null +++ b/Tools/ci/clang-tidy-fixes-to-review.py @@ -0,0 +1,567 @@ +#!/usr/bin/env python3 +# +# clang-tidy-fixes-to-review.py +# +# Producer-side helper that converts a clang-tidy fixes.yml file into a +# pr-review artifact (manifest.json + comments.json) suitable for +# Tools/ci/pr-review-poster.py. +# +# This script runs inside the clang-tidy job's px4-dev container so it can +# read the source tree directly and look up byte offsets in the original +# files. The output it writes is a fully-baked array of review comments; +# the poster never reads source files or fixes.yml. +# +# ---------------------------------------------------------------------------- +# ATTRIBUTION +# ---------------------------------------------------------------------------- +# This script reuses the diagnostic-to-review-comment translation logic +# from platisd/clang-tidy-pr-comments. The original work is: +# +# MIT License +# +# Copyright (c) 2021 Dimitris Platis +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Adapted parts: +# - get_diff_line_ranges_per_file() and its inner change_to_line_range() +# - generate_review_comments() and its nested helpers +# (get_line_by_offset, validate_warning_applicability, +# calculate_replacements_diff, markdown, markdown_url, +# diagnostic_name_visual, generate_single_comment) +# - reorder_diagnostics() +# +# Removed parts (handled by Tools/ci/pr-review-poster.py instead): +# - post_review_comments / dismiss_change_requests / resolve_conversations +# - the original argparse main and the requests-based HTTP layer +# +# Adaptation notes: +# - The HTTP layer is rewritten on top of Tools/ci/_github_helpers.py so +# this script does not depend on the third-party `requests` package. +# - Conversation resolution (the GraphQL path) is intentionally dropped +# for v1; revisit if it turns out to be missed. +# - Clang-Tidy 8 upconvert is preserved verbatim. +# +# ---------------------------------------------------------------------------- +# Bounded assumptions (documented for future maintainers): +# - Source files are UTF-8 (we read them as latin_1, matching clang-tidy's +# own byte-offset model, and the offsets we surface are line counts) +# - Source files use LF line endings +# - Malformed entries in fixes.yml are skipped with a warning rather than +# crashing the job +# +# Dependencies: pyyaml + Tools/ci/_github_helpers.py. +# pyyaml is preinstalled in the px4-dev container; this script is intended +# to run there, not on bare ubuntu-latest. +"""Convert a clang-tidy fixes.yml into a pr-review artifact.""" + +import argparse +import difflib +import json +import os +import posixpath +import re +import sys +import urllib.parse + +import yaml + +import _github_helpers +from _github_helpers import fail as _fail + + +# Markers used inside the per-comment body to call out severity. Plain +# strings rather than emojis to keep the file emoji-free per project +# preferences; the rendered Markdown is unaffected. +SINGLE_COMMENT_MARKERS = { + 'Error': '**[error]**', + 'Warning': '**[warning]**', + 'Remark': '**[remark]**', + 'fallback': '**[note]**', +} + + +# Diagnostics we never surface as PR review comments. `file not found` from +# clang-diagnostic-error fires whenever clang-tidy analyzes a header whose +# including TU is not in the active compile_commands.json (e.g. board- +# specific NuttX headers against the SITL clang build). It is noise here, +# not a signal: the build_all_targets CI matrix compiles those headers for +# real and will fail loudly if an include is actually missing. +DROPPED_DIAGNOSTIC_PATTERNS = ( + ('clang-diagnostic-error', 'file not found'), +) + + +def is_dropped_diagnostic(diag_name, diag_message): + for name, needle in DROPPED_DIAGNOSTIC_PATTERNS: + if diag_name == name and needle in (diag_message or ''): + return True + return False + + +# --------------------------------------------------------------------------- +# Diff-range parsing (adapted from platisd) +# --------------------------------------------------------------------------- + +def get_diff_line_ranges_per_file(pr_files): + """Return a dict mapping each PR file path to a list of line ranges + (the +new-side hunks) parsed from its patch.""" + + def change_to_line_range(change): + split_change = change.split(',') + start = int(split_change[0]) + size = int(split_change[1]) if len(split_change) > 1 else 1 + return range(start, start + size) + + result = {} + for pr_file in pr_files: + # Removed binary files etc. have no patch section. + if 'patch' not in pr_file: + continue + file_name = pr_file['filename'] + # Match lines like '@@ -101,8 +102,11 @@' + git_line_tags = re.findall( + r'^@@ -.*? +.*? @@', pr_file['patch'], re.MULTILINE) + changes = [ + tag.replace('@@', '').strip().split()[1].replace('+', '') + for tag in git_line_tags + ] + result[file_name] = [ + change_to_line_range(change) for change in changes + ] + return result + + +def fetch_pull_request_files(client, repo, pr_number): + """Yield file metadata objects for each file modified by the PR.""" + path = 'repos/{}/pulls/{}/files'.format(repo, pr_number) + for entry in client.paginated(path): + yield entry + + +# --------------------------------------------------------------------------- +# Diagnostic ordering (adapted from platisd) +# --------------------------------------------------------------------------- + +def reorder_diagnostics(diags): + """Return diagnostics ordered Error -> Warning -> Remark -> other.""" + errors = [d for d in diags if d.get('Level') == 'Error'] + warnings = [d for d in diags if d.get('Level') == 'Warning'] + remarks = [d for d in diags if d.get('Level') == 'Remark'] + others = [ + d for d in diags + if d.get('Level') not in {'Error', 'Warning', 'Remark'} + ] + if others: + print( + 'warning: some fixes have an unexpected Level (not Error, ' + 'Warning, or Remark)', file=sys.stderr) + return errors + warnings + remarks + others + + +# --------------------------------------------------------------------------- +# Comment generation (adapted from platisd) +# --------------------------------------------------------------------------- + +def generate_review_comments(clang_tidy_fixes, repository_root, + diff_line_ranges_per_file, + single_comment_markers): + """Yield review comment dicts for each clang-tidy diagnostic that + intersects the PR diff.""" + + def get_line_by_offset(file_path, offset): + # Clang-Tidy doesn't support multibyte encodings and measures + # offsets in bytes; latin_1 makes byte offsets and string offsets + # equivalent. + with open(repository_root + file_path, encoding='latin_1') as fh: + source = fh.read() + return source[:offset].count('\n') + 1 + + def validate_warning_applicability(file_path, start_line_num, end_line_num): + assert end_line_num >= start_line_num + for line_range in diff_line_ranges_per_file[file_path]: + assert line_range.step == 1 + if (line_range.start <= start_line_num + and end_line_num < line_range.stop): + return True + return False + + def calculate_replacements_diff(file_path, replacements): + # Apply replacements in reverse order so subsequent offsets do not + # shift. + replacements.sort(key=lambda item: (-item['Offset'])) + with open(repository_root + file_path, encoding='latin_1') as fh: + source = fh.read() + changed = source + for replacement in replacements: + changed = ( + changed[:replacement['Offset']] + + replacement['ReplacementText'] + + changed[replacement['Offset'] + replacement['Length']:] + ) + return difflib.Differ().compare( + source.splitlines(keepends=True), + changed.splitlines(keepends=True), + ) + + def markdown(s): + md_chars = '\\`*_{}[]<>()#+-.!|' + + def escape_chars(s): + for ch in md_chars: + s = s.replace(ch, '\\' + ch) + return s + + def unescape_chars(s): + for ch in md_chars: + s = s.replace('\\' + ch, ch) + return s + + s = escape_chars(s) + s = re.sub( + "'([^']*)'", + lambda m: '`` ' + unescape_chars(m.group(1)) + ' ``', + s, + ) + return s + + def markdown_url(label, url): + return '[{}]({})'.format(label, url) + + def diagnostic_name_visual(diagnostic_name): + visual = '**{}**'.format(markdown(diagnostic_name)) + try: + first_dash_idx = diagnostic_name.index('-') + except ValueError: + return visual + namespace = urllib.parse.quote_plus(diagnostic_name[:first_dash_idx]) + check_name = urllib.parse.quote_plus( + diagnostic_name[first_dash_idx + 1:]) + return markdown_url( + visual, + 'https://clang.llvm.org/extra/clang-tidy/checks/{}/{}.html'.format( + namespace, check_name), + ) + + def generate_single_comment(file_path, start_line_num, end_line_num, + name, message, single_comment_marker, + replacement_text=None): + result = { + 'path': file_path, + 'line': end_line_num, + 'side': 'RIGHT', + 'body': '{} {} {}\n{}'.format( + single_comment_marker, + diagnostic_name_visual(name), + single_comment_marker, + markdown(message), + ), + } + if start_line_num != end_line_num: + result['start_line'] = start_line_num + result['start_side'] = 'RIGHT' + if replacement_text is not None: + if not replacement_text or replacement_text[-1] != '\n': + replacement_text += '\n' + result['body'] += '\n```suggestion\n{}```'.format(replacement_text) + return result + + dropped = 0 + for diag in clang_tidy_fixes['Diagnostics']: + # Upconvert clang-tidy 8 format to 9+ + if 'DiagnosticMessage' not in diag: + diag['DiagnosticMessage'] = { + 'FileOffset': diag.get('FileOffset'), + 'FilePath': diag.get('FilePath'), + 'Message': diag.get('Message'), + 'Replacements': diag.get('Replacements', []), + } + + diag_message = diag['DiagnosticMessage'] + diag_message['FilePath'] = posixpath.normpath( + (diag_message.get('FilePath') or '').replace(repository_root, '')) + for replacement in diag_message.get('Replacements') or []: + replacement['FilePath'] = posixpath.normpath( + replacement['FilePath'].replace(repository_root, '')) + + diag_name = diag.get('DiagnosticName', '') + diag_message_msg = diag_message.get('Message', '') + + if is_dropped_diagnostic(diag_name, diag_message_msg): + dropped += 1 + continue + level = diag.get('Level', 'Warning') + single_comment_marker = single_comment_markers.get( + level, single_comment_markers['fallback']) + + replacements = diag_message.get('Replacements') or [] + if not replacements: + file_path = diag_message['FilePath'] + offset = diag_message.get('FileOffset') + if offset is None: + print('warning: skipping {!r}: missing FileOffset'.format( + diag_name), file=sys.stderr) + continue + if file_path not in diff_line_ranges_per_file: + print( + "'{}' for {} does not apply to the files changed in " + 'this PR'.format(diag_name, file_path)) + continue + try: + line_num = get_line_by_offset(file_path, offset) + except (OSError, ValueError) as e: + print('warning: skipping {!r} on {}: {}'.format( + diag_name, file_path, e), file=sys.stderr) + continue + + print("Processing '{}' at line {} of {}...".format( + diag_name, line_num, file_path)) + if validate_warning_applicability(file_path, line_num, line_num): + yield generate_single_comment( + file_path, + line_num, + line_num, + diag_name, + diag_message_msg, + single_comment_marker=single_comment_marker, + ) + else: + print('This warning does not apply to the lines changed ' + 'in this PR') + else: + for file_path in {item['FilePath'] for item in replacements}: + if file_path not in diff_line_ranges_per_file: + print( + "'{}' for {} does not apply to the files changed " + 'in this PR'.format(diag_name, file_path)) + continue + + line_num = 1 + start_line_num = None + end_line_num = None + replacement_text = None + + try: + diff_iter = calculate_replacements_diff( + file_path, + [r for r in replacements if r['FilePath'] == file_path], + ) + except (OSError, ValueError) as e: + print('warning: skipping {!r} on {}: {}'.format( + diag_name, file_path, e), file=sys.stderr) + continue + + for line in diff_iter: + # Comment line, ignore. + if line.startswith('? '): + continue + # A '-' line is the start or continuation of a region + # to replace. + if line.startswith('- '): + if start_line_num is None: + start_line_num = line_num + end_line_num = line_num + else: + end_line_num = line_num + if replacement_text is None: + replacement_text = '' + line_num += 1 + # A '+' line is part of the replacement text. + elif line.startswith('+ '): + if replacement_text is None: + replacement_text = line[2:] + else: + replacement_text += line[2:] + # A context line marks the end of a replacement region. + elif line.startswith(' '): + if replacement_text is not None: + if start_line_num is None: + # Pure addition: synthesize a one-line + # range and append the context line to + # the replacement. + start_line_num = line_num + end_line_num = line_num + replacement_text += line[2:] + + print("Processing '{}' at lines {}-{} of {}...".format( + diag_name, start_line_num, end_line_num, file_path)) + + if validate_warning_applicability( + file_path, start_line_num, end_line_num): + yield generate_single_comment( + file_path, + start_line_num, + end_line_num, + diag_name, + diag_message_msg, + single_comment_marker=single_comment_marker, + replacement_text=replacement_text, + ) + else: + print( + 'This warning does not apply to the ' + 'lines changed in this PR') + + start_line_num = None + end_line_num = None + replacement_text = None + + line_num += 1 + else: + # Unknown difflib prefix; skip rather than abort. + print('warning: unexpected diff prefix {!r}; ' + 'skipping diagnostic'.format(line[:2]), + file=sys.stderr) + break + + # End of file with a pending replacement region. + if replacement_text is not None and start_line_num is not None: + print("Processing '{}' at lines {}-{} of {}...".format( + diag_name, start_line_num, end_line_num, file_path)) + if validate_warning_applicability( + file_path, start_line_num, end_line_num): + yield generate_single_comment( + file_path, + start_line_num, + end_line_num, + diag_name, + diag_message_msg, + single_comment_marker=single_comment_marker, + replacement_text=replacement_text, + ) + else: + print('This warning does not apply to the lines ' + 'changed in this PR') + + if dropped: + print('Dropped {} diagnostic(s) matching the ignored-patterns list ' + '(e.g. clang-diagnostic-error "file not found"); ' + 'build_all_targets covers real missing includes.'.format(dropped)) + + +# --------------------------------------------------------------------------- +# Entry point +# --------------------------------------------------------------------------- + +def main(argv=None): + parser = argparse.ArgumentParser( + description='Convert a clang-tidy fixes.yml into a pr-review ' + 'artifact (manifest.json + comments.json).', + ) + parser.add_argument('--fixes', required=True, + help='Path to fixes.yml from clang-tidy') + parser.add_argument('--repo-root', required=True, + help='Path to the repository root containing the ' + 'source files referenced by fixes.yml') + parser.add_argument('--repo', required=True, + help='owner/name of the repository') + parser.add_argument('--pr-number', required=True, type=int, + help='Pull request number') + parser.add_argument('--commit-sha', required=True, + help='40-char hex commit SHA the review will pin to') + parser.add_argument('--out-dir', required=True, + help='Directory to write manifest.json and ' + 'comments.json') + parser.add_argument( + '--marker', + default='', + help='Marker string embedded in the review body so the poster ' + 'can find and dismiss stale runs') + parser.add_argument( + '--event', + default='REQUEST_CHANGES', + choices=('COMMENT', 'REQUEST_CHANGES'), + help='GitHub review event type') + parser.add_argument( + '--summary', default='', + help='Optional review summary text appended to the review body') + args = parser.parse_args(argv) + + if args.pr_number <= 0: + _fail('--pr-number must be > 0') + if not re.match(r'^[0-9a-f]{40}$', args.commit_sha): + _fail('--commit-sha must be a 40-char lowercase hex string') + + token = os.environ.get('GITHUB_TOKEN') + if not token: + _fail('GITHUB_TOKEN is not set') + + # Normalize the repo root with a trailing slash so the platisd-style + # str.replace() trick still strips it cleanly. + repo_root = args.repo_root + if not repo_root.endswith(os.sep): + repo_root = repo_root + os.sep + + os.makedirs(args.out_dir, exist_ok=True) + + client = _github_helpers.GitHubClient(token, user_agent='px4-clang-tidy-fixes-to-review') + + print('Fetching PR file list from GitHub...') + pr_files = list(fetch_pull_request_files(client, args.repo, args.pr_number)) + diff_line_ranges_per_file = get_diff_line_ranges_per_file(pr_files) + + print('Loading clang-tidy fixes from {}...'.format(args.fixes)) + if not os.path.isfile(args.fixes): + # No fixes file means clang-tidy ran cleanly. Emit an empty + # comments.json so the poster can short-circuit. + comments = [] + else: + with open(args.fixes, encoding='utf-8') as fh: + clang_tidy_fixes = yaml.safe_load(fh) + if (not clang_tidy_fixes + or 'Diagnostics' not in clang_tidy_fixes + or not clang_tidy_fixes['Diagnostics']): + comments = [] + else: + clang_tidy_fixes['Diagnostics'] = reorder_diagnostics( + clang_tidy_fixes['Diagnostics']) + comments = list(generate_review_comments( + clang_tidy_fixes, + repo_root, + diff_line_ranges_per_file, + single_comment_markers=SINGLE_COMMENT_MARKERS, + )) + + print('Generated {} review comment(s)'.format(len(comments))) + + manifest = { + 'pr_number': args.pr_number, + 'marker': args.marker, + 'event': args.event, + 'commit_sha': args.commit_sha, + } + if args.summary: + manifest['summary'] = args.summary + + manifest_path = os.path.join(args.out_dir, 'manifest.json') + comments_path = os.path.join(args.out_dir, 'comments.json') + with open(manifest_path, 'w', encoding='utf-8') as fh: + json.dump(manifest, fh, indent=2) + fh.write('\n') + with open(comments_path, 'w', encoding='utf-8') as fh: + json.dump(comments, fh, indent=2) + fh.write('\n') + + print('Wrote {} and {}'.format(manifest_path, comments_path)) + return 0 + + +if __name__ == '__main__': + sys.exit(main()) diff --git a/Tools/ci/conventional_commits.py b/Tools/ci/conventional_commits.py new file mode 100644 index 0000000000..31a18e0580 --- /dev/null +++ b/Tools/ci/conventional_commits.py @@ -0,0 +1,146 @@ +"""Shared constants and helpers for conventional commit validation. + +Format: type(scope): description +Optional breaking change marker: type(scope)!: description +""" + +import re + +CONVENTIONAL_TYPES = { + 'feat': 'A new feature', + 'fix': 'A bug fix', + 'docs': 'Documentation only changes', + 'style': 'Formatting, whitespace, no code change', + 'refactor': 'Code change that neither fixes a bug nor adds a feature', + 'perf': 'Performance improvement', + 'test': 'Adding or correcting tests', + 'build': 'Build system or external dependencies', + 'ci': 'CI configuration files and scripts', + 'chore': 'Other changes that don\'t modify src or test files', + 'revert': 'Reverts a previous commit', +} + +# type(scope)[!]: description +# - type: one of CONVENTIONAL_TYPES keys +# - scope: required, alphanumeric with _/-/. +# - !: optional breaking change marker +# - description: at least 5 chars +HEADER_PATTERN = re.compile( + r'^(' + '|'.join(CONVENTIONAL_TYPES.keys()) + r')' + r'\(([a-zA-Z0-9_/\-\.]+)\)' + r'(!)?' + r': (.{5,})$' +) + +EXEMPT_PREFIXES = ('Merge ',) + +# Common PX4 subsystem scopes for suggestions +KNOWN_SCOPES = [ + 'ekf2', 'mavlink', 'commander', 'navigator', 'sensors', + 'mc_att_control', 'mc_pos_control', 'mc_rate_control', + 'fw_att_control', 'fw_pos_control', 'fw_rate_control', + 'vtol', 'actuators', 'battery', 'param', 'logger', + 'uorb', 'drivers', 'boards', 'simulation', 'sitl', + 'gps', 'rc', 'safety', 'can', 'serial', + 'ci', 'docs', 'build', 'cmake', 'tools', + 'mixer', 'land_detector', 'airspeed', 'gyroscope', + 'accelerometer', 'magnetometer', 'barometer', +] + +# Keyword patterns to suggest scopes from description text +KEYWORD_SCOPES = [ + (r'\b(ekf|estimator|height|fusion|imu|baro)\b', 'ekf2'), + (r'\b(mavlink|MAVLink|MAVLINK|command_int|heartbeat)\b', 'mavlink'), + (r'\b(uorb|orb|pub|sub|topic)\b', 'uorb'), + (r'\b(board|fmu|nuttx|stm32)\b', 'boards'), + (r'\b(mixer|actuator|motor|servo|pwm|dshot)\b', 'actuators'), + (r'\b(battery|power)\b', 'battery'), + (r'\b(param|parameter)\b', 'param'), + (r'\b(log|logger|sdlog)\b', 'logger'), + (r'\b(sensor|accel|gyro)\b', 'sensors'), + (r'\b(land|takeoff|rtl|mission|navigator|geofence)\b', 'navigator'), + (r'\b(position|velocity|attitude|rate)\s*(control|ctrl)\b', 'mc_att_control'), + (r'\b(mc|multicopter|quad)\b', 'mc_att_control'), + (r'\b(fw|fixedwing|fixed.wing|plane)\b', 'fw_att_control'), + (r'\b(vtol|transition)\b', 'vtol'), + (r'\b(ci|workflow|github.action|pipeline)\b', 'ci'), + (r'\b(doc|docs|documentation|readme)\b', 'docs'), + (r'\b(cmake|make|toolchain|compiler)\b', 'build'), + (r'\b(sitl|simulation|gazebo|jmavsim|sih)\b', 'simulation'), + (r'\b(can|uavcan|cyphal|dronecan)\b', 'can'), + (r'\b(serial|uart|spi|i2c)\b', 'serial'), + (r'\b(safety|failsafe|arm|disarm|kill)\b', 'safety'), + (r'\b(rc|radio|sbus|crsf|elrs|dsm)\b', 'rc'), + (r'\b(gps|gnss|rtk|ubx)\b', 'gps'), + (r'\b(optical.flow|flow|rangefinder|lidar|distance)\b', 'sensors'), + (r'\b(orbit|follow|offboard)\b', 'commander'), + (r'\b(driver)\b', 'drivers'), +] + +# Verb patterns to suggest conventional commit type +VERB_TYPE_MAP = [ + (r'^fix(e[ds])?[\s:]', 'fix'), + (r'^bug[\s:]', 'fix'), + (r'^add(s|ed|ing)?[\s:]', 'feat'), + (r'^implement', 'feat'), + (r'^introduce', 'feat'), + (r'^support', 'feat'), + (r'^enable', 'feat'), + (r'^update[ds]?[\s:]', 'feat'), + (r'^improv(e[ds]?|ing)', 'perf'), + (r'^optimi[zs](e[ds]?|ing)', 'perf'), + (r'^refactor', 'refactor'), + (r'^clean\s*up', 'refactor'), + (r'^restructure', 'refactor'), + (r'^simplif(y|ied)', 'refactor'), + (r'^remov(e[ds]?|ing)', 'refactor'), + (r'^delet(e[ds]?|ing)', 'refactor'), + (r'^deprecat', 'refactor'), + (r'^replac(e[ds]?|ing)', 'refactor'), + (r'^renam(e[ds]?|ing)', 'refactor'), + (r'^migrat', 'refactor'), + (r'^revert', 'revert'), + (r'^doc(s|ument)', 'docs'), + (r'^test', 'test'), + (r'^format', 'style'), + (r'^lint', 'style'), + (r'^whitespace', 'style'), + (r'^build', 'build'), + (r'^ci[\s:]', 'ci'), +] + + +def parse_header(text: str) -> dict | None: + """Parse a conventional commit header into components. + + Returns dict with keys {type, scope, breaking, subject} or None if + the text doesn't match conventional commits format. + """ + text = text.strip() + m = HEADER_PATTERN.match(text) + if not m: + return None + return { + 'type': m.group(1), + 'scope': m.group(2), + 'breaking': m.group(3) == '!', + 'subject': m.group(4), + } + + +def suggest_type(text: str) -> str: + """Infer a conventional commit type from description text.""" + lower = text.strip().lower() + for pattern, commit_type in VERB_TYPE_MAP: + if re.search(pattern, lower): + return commit_type + return 'feat' + + +def suggest_scope(text: str) -> str | None: + """Infer a scope from keywords in the text.""" + lower = text.strip().lower() + for pattern, scope in KEYWORD_SCOPES: + if re.search(pattern, lower, re.IGNORECASE): + return scope + return None diff --git a/Tools/ci/generate_board_targets_json.py b/Tools/ci/generate_board_targets_json.py index 214edd8186..922c051aaf 100755 --- a/Tools/ci/generate_board_targets_json.py +++ b/Tools/ci/generate_board_targets_json.py @@ -16,6 +16,7 @@ kconf.warn_assign_override = False kconf.warn_assign_redun = False source_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), '..') +boards_dir = os.path.join(source_dir, '..', 'boards') parser = argparse.ArgumentParser(description='Generate build targets') @@ -26,6 +27,8 @@ parser.add_argument('-p', '--pretty', dest='pretty', action='store_true', parser.add_argument('-g', '--groups', dest='group', action='store_true', help='Groups targets') parser.add_argument('-f', '--filter', dest='filter', help='comma separated list of build target name prefixes to include instead of all e.g. "px4_fmu-v5_"') +parser.add_argument('-s', '--seeders', dest='seeders', action='store_true', + help='Output seeder matrix JSON (one entry per chip family)') args = parser.parse_args() verbose = args.verbose @@ -35,8 +38,14 @@ if args.filter: for target in args.filter.split(','): target_filter.append(target) -default_container = 'ghcr.io/px4/px4-dev:v1.16.0-rc1-258-g0369abd556' -voxl2_container = 'ghcr.io/px4/px4-dev-voxl2:v1.5' +# Load CI configuration from YAML +import yaml +ci_config_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'build_all_config.yml') +with open(ci_config_path) as f: + ci_config = yaml.safe_load(f) + +default_container = ci_config['containers']['default'] +voxl2_container = ci_config['containers']['voxl2'] build_configs = [] grouped_targets = {} excluded_boards = ['px4_ros2', 'espressif_esp32'] # TODO: fix and enable @@ -56,6 +65,71 @@ excluded_labels = [ 'uavcanv1', # TODO: fix and enable ] +# Labels that mark isolated/special builds (poor cache reuse with normal builds) +special_labels = ci_config.get('special_labels', ['lto', 'protected']) + +def detect_chip_family(manufacturer_name, board_name, label): + """Detect the chip family for a board by reading its NuttX defconfig. + + Returns a chip family string used for cache grouping: + stm32h7, stm32f7, stm32f4, stm32f1, imxrt, kinetis, s32k, rp2040, native, special + """ + # Special labels get their own group regardless of chip + if label in special_labels: + return 'special' + + board_path = os.path.join(boards_dir, manufacturer_name, board_name) + nsh_defconfig = os.path.join(board_path, 'nuttx-config', 'nsh', 'defconfig') + + if not os.path.exists(nsh_defconfig): + # Try bootloader defconfig as fallback + bl_defconfig = os.path.join(board_path, 'nuttx-config', 'bootloader', 'defconfig') + if os.path.exists(bl_defconfig): + nsh_defconfig = bl_defconfig + else: + return 'native' + + arch_chip = None + specific_chip = None + + with open(nsh_defconfig) as f: + for line in f: + line = line.strip() + if line.startswith('CONFIG_ARCH_CHIP='): + arch_chip = line.split('=')[1].strip('"') + elif line.startswith('CONFIG_ARCH_CHIP_STM32F') and line.endswith('=y'): + specific_chip = line.split('=')[0].replace('CONFIG_ARCH_CHIP_', '') + + if arch_chip is None: + return 'native' + + # Direct matches for chips that have unique CONFIG_ARCH_CHIP values + if arch_chip == 'stm32h7': + return 'stm32h7' + elif arch_chip == 'stm32f7': + return 'stm32f7' + elif arch_chip == 'imxrt': + return 'imxrt' + elif arch_chip == 'kinetis': + return 'kinetis' + elif arch_chip.startswith('s32k'): + return 's32k' + elif arch_chip == 'rp2040': + return 'rp2040' + elif arch_chip == 'stm32': + # Disambiguate STM32 sub-families using specific chip define + if specific_chip: + if specific_chip.startswith('STM32F1'): + return 'stm32f1' + elif specific_chip.startswith('STM32F4'): + return 'stm32f4' + else: + return 'stm32f4' # Default STM32 to F4 + return 'stm32f4' + else: + return 'native' + +target_chip_families = {} # target_name -> chip_family mapping github_action_config = { 'include': build_configs } extra_args = {} if args.pretty: @@ -66,11 +140,21 @@ def chunks(arr, size): for i in range(0, len(arr), size): yield arr[i:i + size] +MERGE_BACK_THRESHOLD = 5 + +def chunks_merged(arr, size): + """Split array into chunks, merging the last chunk back if it's too small.""" + result = list(chunks(arr, size)) + if len(result) > 1 and len(result[-1]) < MERGE_BACK_THRESHOLD: + result[-2] = result[-2] + result[-1] + result.pop() + return result + def comma_targets(targets): # turns array of targets into a comma split string return ",".join(targets) -def process_target(px4board_file, target_name): +def process_target(px4board_file, target_name, manufacturer_name=None, board_dir_name=None, label=None): # reads through the board file and grabs # useful information for building ret = None @@ -107,6 +191,16 @@ def process_target(px4board_file, target_name): if board_name in board_container_overrides: container = board_container_overrides[board_name] + # Detect chip family for cache grouping + chip_family = 'native' + if manufacturer_name and board_dir_name: + if platform == 'nuttx': + chip_family = detect_chip_family(manufacturer_name, board_dir_name, label or '') + elif board_name in board_container_overrides or platform in platform_container_overrides: + chip_family = 'native' # voxl2/qurt targets + else: + chip_family = 'native' + # Boards with container overrides get their own group if board_name in board_container_overrides or platform in platform_container_overrides: group = 'voxl2' @@ -124,7 +218,7 @@ def process_target(px4board_file, target_name): else: if verbose: print(f'unmatched platform: {platform}') - ret = {'target': target_name, 'container': container} + ret = {'target': target_name, 'container': container, 'chip_family': chip_family} if(args.group): ret['arch'] = group @@ -147,19 +241,21 @@ grouped_targets['base']['container'] = default_container grouped_targets['base']['manufacturers'] = {} grouped_targets['base']['manufacturers']['px4'] = [] grouped_targets['base']['manufacturers']['px4'] += metadata_targets +for mt in metadata_targets: + target_chip_families[mt] = 'native' -for manufacturer in os.scandir(os.path.join(source_dir, '../boards')): +for manufacturer in sorted(os.scandir(os.path.join(source_dir, '../boards')), key=lambda e: e.name): if not manufacturer.is_dir(): continue if manufacturer.name in excluded_manufacturers: if verbose: print(f'excluding manufacturer {manufacturer.name}') continue - for board in os.scandir(manufacturer.path): + for board in sorted(os.scandir(manufacturer.path), key=lambda e: e.name): if not board.is_dir(): continue - for files in os.scandir(board.path): + for files in sorted(os.scandir(board.path), key=lambda e: e.name): if files.is_file() and files.name.endswith('.px4board'): board_name = manufacturer.name + '_' + board.name @@ -177,7 +273,10 @@ for manufacturer in os.scandir(os.path.join(source_dir, '../boards')): if label in excluded_labels: if verbose: print(f'excluding label {label} ({target_name})') continue - target = process_target(files.path, target_name) + target = process_target(files.path, target_name, + manufacturer_name=manufacturer.name, + board_dir_name=board.name, + label=label) if (args.group and target is not None): if (target['arch'] not in grouped_targets): grouped_targets[target['arch']] = {} @@ -186,9 +285,72 @@ for manufacturer in os.scandir(os.path.join(source_dir, '../boards')): if(manufacturer.name not in grouped_targets[target['arch']]['manufacturers']): grouped_targets[target['arch']]['manufacturers'][manufacturer.name] = [] grouped_targets[target['arch']]['manufacturers'][manufacturer.name].append(target_name) + target_chip_families[target_name] = target['chip_family'] if target is not None: build_configs.append(target) +# Remove companion targets from CI groups (parent target builds them via Make prerequisite) +for manufacturer in sorted(os.scandir(os.path.join(source_dir, '../boards')), key=lambda e: e.name): + if not manufacturer.is_dir(): + continue + for board in sorted(os.scandir(manufacturer.path), key=lambda e: e.name): + if not board.is_dir(): + continue + companion_file = os.path.join(board.path, 'companion_targets') + if os.path.exists(companion_file): + with open(companion_file) as f: + companions = {l.strip() for l in f if l.strip() and not l.startswith('#')} + for arch in grouped_targets: + for man in grouped_targets[arch]['manufacturers']: + grouped_targets[arch]['manufacturers'][man] = [ + t for t in grouped_targets[arch]['manufacturers'][man] + if t not in companions + ] + +# Append _deb targets for boards that have cmake/package.cmake +for manufacturer in sorted(os.scandir(os.path.join(source_dir, '../boards')), key=lambda e: e.name): + if not manufacturer.is_dir(): + continue + if manufacturer.name in excluded_manufacturers: + continue + for board in sorted(os.scandir(manufacturer.path), key=lambda e: e.name): + if not board.is_dir(): + continue + board_name = manufacturer.name + '_' + board.name + if board_name in excluded_boards: + continue + package_cmake = os.path.join(board.path, 'cmake', 'package.cmake') + if os.path.exists(package_cmake): + deb_target = board_name + '_deb' + if target_filter and not any(deb_target.startswith(f) for f in target_filter): + continue + # Determine the container and group for this board + container = default_container + if board_name in board_container_overrides: + container = board_container_overrides[board_name] + target_entry = {'target': deb_target, 'container': container} + if args.group: + # Find the group where this board's _default target already lives + default_target = board_name + '_default' + group = None + for g in grouped_targets: + targets_in_group = grouped_targets[g].get('manufacturers', {}).get(manufacturer.name, []) + if default_target in targets_in_group: + group = g + break + if group is None: + group = 'base' + target_entry['arch'] = group + if group not in grouped_targets: + grouped_targets[group] = {'container': container, 'manufacturers': {}} + if manufacturer.name not in grouped_targets[group]['manufacturers']: + grouped_targets[group]['manufacturers'][manufacturer.name] = [] + grouped_targets[group]['manufacturers'][manufacturer.name].append(deb_target) + # Inherit chip_family from the default target + default_chip = target_chip_families.get(default_target, 'native') + target_chip_families[deb_target] = default_chip + build_configs.append(target_entry) + if(verbose): import pprint print("============================") @@ -202,109 +364,227 @@ if(verbose): print("===================") if (args.group): - # if we are using this script for grouping builds - # we loop trough the manufacturers list and split their targets - # if a manufacturer has more than a LIMIT of boards then we split that - # into sub groups such as "arch-manufacturer name-index" - # example: - # nuttx-px4-0 - # nuttx-px4-1 - # nuttx-px4-2 - # nuttx-ark-0 - # nuttx-ark-1 - # if the manufacturer doesn't have more targets than LIMIT then we add - # them to a generic group with the following structure "arch-index" - # example: - # nuttx-0 - # nuttx-1 + # Group targets by chip family for better ccache reuse. + # Targets sharing the same MCU family (e.g. stm32h7) benefit from + # a shared ccache seed since they compile the same NuttX kernel and HAL. + # + # Grouping strategy: + # 1. Collect all targets per (arch, chip_family, manufacturer) + # 2. Within each chip_family, large manufacturers get their own groups + # named "{manufacturer}-{chip_family}[-N]" + # 3. Small manufacturers are merged into "misc-{chip_family}[-N]" + # 4. Special groups: "special" (lto/protected/allyes), "io" (stm32f1), + # "voxl2-0" (unchanged) + # 5. Non-NuttX groups: "base-N", "aarch64-N", "armhf-N" (unchanged) final_groups = [] - last_man = '' - last_arch = '' - SPLIT_LIMIT = 10 - LOWER_LIMIT = 5 + # Load grouping and cache config + grouping_config = ci_config.get('grouping', {}) + CHIP_SPLIT_LIMITS = grouping_config.get('chip_split_limits', {}) + DEFAULT_SPLIT_LIMIT = grouping_config.get('default_split_limit', 12) + LOWER_LIMIT = grouping_config.get('lower_limit', 3) + + cache_config = ci_config.get('cache', {}) + DEFAULT_CACHE_SIZE = cache_config.get('default_size', '400M') + CHIP_CACHE_SIZES = cache_config.get('chip_sizes', {}) + if(verbose): print(f'=:Architectures: [{grouped_targets.keys()}]') + for arch in grouped_targets: - runner = 'x64' if arch in ('nuttx', 'voxl2') else 'arm64' + runner = 'x64' + # armhf and aarch64 Linux boards need the arm64 container image + # which ships the arm-linux-gnueabihf and aarch64-linux-gnu cross compilers + # (the x64 container image does not include them) + if arch in ('armhf', 'aarch64'): + runner = 'arm64' if(verbose): print(f'=:Processing: [{arch}]') - temp_group = [] - for man in grouped_targets[arch]['manufacturers']: - if(verbose): - print(f'=:Processing: [{arch}][{man}]') - man_len = len(grouped_targets[arch]['manufacturers'][man]) - if(man_len > LOWER_LIMIT and man_len < (SPLIT_LIMIT + 1)): - # Manufacturers can have their own group + + if arch == 'nuttx': + # Re-bucket NuttX targets by chip_family then manufacturer + chip_man_buckets = {} # (chip_family, manufacturer) -> [target_names] + for man in grouped_targets[arch]['manufacturers']: + for target in grouped_targets[arch]['manufacturers'][man]: + chip = target_chip_families.get(target, 'native') + key = (chip, man) + if key not in chip_man_buckets: + chip_man_buckets[key] = [] + chip_man_buckets[key].append(target) + + # Collect all chip families present + chip_families_seen = sorted(set(k[0] for k in chip_man_buckets.keys())) + + for chip in chip_families_seen: + SPLIT_LIMIT = CHIP_SPLIT_LIMITS.get(chip, DEFAULT_SPLIT_LIMIT) + # Special naming for certain chip families + if chip == 'special': + chip_label = 'special' + elif chip == 'stm32f1': + chip_label = 'io' + elif chip == 'rp2040': + chip_label = 'special' # rp2040 goes into special group + else: + chip_label = chip + + # Gather all (manufacturer -> targets) for this chip family + # NXP chip families (imxrt, kinetis, s32k) pool all manufacturers + # under "nxp" since all boards use NXP silicon regardless of + # which directory they live in (e.g., px4/fmu-v6xrt is imxrt). + nxp_chips = tuple(ci_config.get('nxp_chip_families', ['imxrt', 'kinetis', 's32k'])) + man_targets = {} + for (c, m), targets in chip_man_buckets.items(): + if c == chip: + man_key = 'nxp' if chip in nxp_chips else m + if man_key not in man_targets: + man_targets[man_key] = [] + man_targets[man_key].extend(targets) + + # Merge rp2040 targets into a flat list for the special group + if chip in ('special', 'rp2040'): + all_targets = [] + for m in sorted(man_targets.keys()): + all_targets.extend(man_targets[m]) + # These get added to the special bucket below + # We'll handle after the chip loop + continue + if(verbose): - print(f'=:Processing: [{arch}][{man}][{man_len}]==Manufacturers can have their own group') - group_name = arch + "-" + man - targets = comma_targets(grouped_targets[arch]['manufacturers'][man]) - final_groups.append({ - "container": grouped_targets[arch]['container'], - "targets": targets, - "arch": arch, - "runner": runner, - "group": group_name, - "len": len(grouped_targets[arch]['manufacturers'][man]) - }) - elif(man_len >= (SPLIT_LIMIT + 1)): - # Split big man groups into subgroups - # example: Pixhawk - if(verbose): - print(f'=:Processing: [{arch}][{man}][{man_len}]==Manufacturers has multiple own groups') - chunk_limit = SPLIT_LIMIT + print(f'=:Processing chip_family: [{chip}] ({chip_label})') + + # Split into large-manufacturer groups and misc groups + # For NXP-exclusive chip families, always use the nxp name + # regardless of target count (there's no other manufacturer to pool with) + force_named = chip in nxp_chips + temp_group = [] # small manufacturers pooled here + for man in sorted(man_targets.keys()): + man_len = len(man_targets[man]) + if (force_named or man_len > LOWER_LIMIT) and man_len <= SPLIT_LIMIT: + group_name = f"{man}-{chip_label}" + if(verbose): + print(f'=: [{man}][{man_len}] -> {group_name}') + final_groups.append({ + "container": grouped_targets[arch]['container'], + "targets": comma_targets(man_targets[man]), + "arch": arch, + "chip_family": chip, + "runner": runner, + "group": group_name, + "len": man_len, + }) + elif man_len > SPLIT_LIMIT: + chunk_counter = 0 + for chunk in chunks_merged(man_targets[man], SPLIT_LIMIT): + group_name = f"{man}-{chip_label}-{chunk_counter}" + if(verbose): + print(f'=: [{man}][{man_len}] -> {group_name} ({len(chunk)})') + final_groups.append({ + "container": grouped_targets[arch]['container'], + "targets": comma_targets(chunk), + "arch": arch, + "chip_family": chip, + "runner": runner, + "group": group_name, + "len": len(chunk), + }) + chunk_counter += 1 + else: + if(verbose): + print(f'=: [{man}][{man_len}] -> misc pool') + temp_group.extend(man_targets[man]) + + # Emit misc groups for small manufacturers + if temp_group: + misc_chunks = chunks_merged(temp_group, SPLIT_LIMIT) + num_misc_chunks = len(misc_chunks) + chunk_counter = 0 + for chunk in misc_chunks: + if num_misc_chunks == 1: + group_name = f"misc-{chip_label}" + else: + group_name = f"misc-{chip_label}-{chunk_counter}" + if(verbose): + print(f'=: [misc][{len(chunk)}] -> {group_name}') + final_groups.append({ + "container": grouped_targets[arch]['container'], + "targets": comma_targets(chunk), + "arch": arch, + "chip_family": chip, + "runner": runner, + "group": group_name, + "len": len(chunk), + }) + chunk_counter += 1 + + # Now handle special + rp2040 targets + SPLIT_LIMIT = CHIP_SPLIT_LIMITS.get('special', DEFAULT_SPLIT_LIMIT) + special_targets = [] + for (c, m), targets in chip_man_buckets.items(): + if c in ('special', 'rp2040'): + special_targets.extend(targets) + if special_targets: chunk_counter = 0 - for chunk in chunks(grouped_targets[arch]['manufacturers'][man], chunk_limit): - group_name = arch + "-" + man + "-" + str(chunk_counter) - targets = comma_targets(chunk) + for chunk in chunks_merged(special_targets, SPLIT_LIMIT): + if len(special_targets) <= SPLIT_LIMIT: + group_name = 'special' + else: + group_name = f'special-{chunk_counter}' + if(verbose): + print(f'=: [special][{len(chunk)}] -> {group_name}') final_groups.append({ "container": grouped_targets[arch]['container'], - "targets": targets, + "targets": comma_targets(chunk), "arch": arch, + "chip_family": "special", "runner": runner, "group": group_name, "len": len(chunk), }) chunk_counter += 1 - else: - if(verbose): - print(f'=:Processing: [{arch}][{man}][{man_len}]==Manufacturers too small group with others') - temp_group.extend(grouped_targets[arch]['manufacturers'][man]) - temp_len = len(temp_group) - chunk_counter = 0 - if(temp_len > 0 and temp_len < (SPLIT_LIMIT + 1)): - if(verbose): - print(f'=:Processing: [{arch}][orphan][{temp_len}]==Leftover arch can have their own group') - group_name = arch + "-" + str(chunk_counter) - targets = comma_targets(temp_group) - final_groups.append({ - "container": grouped_targets[arch]['container'], - "targets": targets, - "arch": arch, - "runner": runner, - "group": group_name, - "len": temp_len - }) - elif(temp_len >= (SPLIT_LIMIT + 1)): - # Split big man groups into subgroups - # example: Pixhawk - if(verbose): - print(f'=:Processing: [{arch}][orphan][{temp_len}]==Leftover arch can has multpile group') - chunk_limit = SPLIT_LIMIT - chunk_counter = 0 - for chunk in chunks(temp_group, chunk_limit): - group_name = arch + "-" + str(chunk_counter) - targets = comma_targets(chunk) + elif arch == 'voxl2': + # VOXL2 stays as its own group + all_targets = [] + for man in grouped_targets[arch]['manufacturers']: + all_targets.extend(grouped_targets[arch]['manufacturers'][man]) + if all_targets: final_groups.append({ "container": grouped_targets[arch]['container'], - "targets": targets, + "targets": comma_targets(all_targets), "arch": arch, + "chip_family": "native", "runner": runner, - "group": group_name, - "len": len(chunk), + "group": "voxl2-0", + "len": len(all_targets), }) - chunk_counter += 1 + + else: + # Non-NuttX groups (base, aarch64, armhf) - keep simple grouping + SPLIT_LIMIT = CHIP_SPLIT_LIMITS.get('native', DEFAULT_SPLIT_LIMIT) + all_targets = [] + for man in grouped_targets[arch]['manufacturers']: + all_targets.extend(grouped_targets[arch]['manufacturers'][man]) + if all_targets: + chunk_counter = 0 + for chunk in chunks_merged(all_targets, SPLIT_LIMIT): + if len(all_targets) <= SPLIT_LIMIT: + group_name = f"{arch}-0" + else: + group_name = f"{arch}-{chunk_counter}" + final_groups.append({ + "container": grouped_targets[arch]['container'], + "targets": comma_targets(chunk), + "arch": arch, + "chip_family": "native", + "runner": runner, + "group": group_name, + "len": len(chunk), + }) + chunk_counter += 1 + + # Add cache_size to each group based on chip family + for g in final_groups: + g['cache_size'] = CHIP_CACHE_SIZES.get(g['chip_family'], DEFAULT_CACHE_SIZE) + if(verbose): import pprint print("================") @@ -316,6 +596,58 @@ if (args.group): print("= JSON output =") print("===============") - print(json.dumps({ "include": final_groups }, **extra_args)) + if args.seeders: + # Generate one seeder entry per chip family present in the groups. + # Each seeder builds a representative target to warm the ccache for + # all groups sharing that chip family. + seeder_targets = ci_config.get('seeders', {}) + seeder_containers = { + 'native': default_container, + } + # Determine which chip families actually have groups + active_families = set() + for g in final_groups: + cf = g['chip_family'] + active_families.add(cf) + # voxl2 gets its own seeder with a different container + if g['group'].startswith('voxl2'): + active_families.add('voxl2') + + seeders = [] + for cf in sorted(active_families): + if cf == 'special': + continue # special group seeds from stm32h7 + if cf == 'voxl2': + seeders.append({ + 'chip_family': 'voxl2', + 'target': 'modalai_voxl2_default', + 'container': voxl2_container, + 'runner': 'x64', + }) + elif cf == 'native': + # One seeder per runner arch that has native groups (exclude voxl2 + # which has its own seeder with a different container) + native_runners = set() + for g in final_groups: + if g['chip_family'] == 'native' and not g['group'].startswith('voxl2'): + native_runners.add(g['runner']) + for r in sorted(native_runners): + seeders.append({ + 'chip_family': 'native', + 'target': seeder_targets['native'], + 'container': default_container, + 'runner': r, + }) + else: + seeders.append({ + 'chip_family': cf, + 'target': seeder_targets.get(cf, seeder_targets['stm32h7']), + 'container': seeder_containers.get(cf, default_container), + 'runner': 'x64', + }) + + print(json.dumps({ "include": seeders }, **extra_args)) + else: + print(json.dumps({ "include": final_groups }, **extra_args)) else: print(json.dumps(github_action_config, **extra_args)) diff --git a/Tools/ci/generate_sbom.py b/Tools/ci/generate_sbom.py new file mode 100755 index 0000000000..cbca30db39 --- /dev/null +++ b/Tools/ci/generate_sbom.py @@ -0,0 +1,607 @@ +#!/usr/bin/env python3 +"""Generate SPDX 2.3 JSON SBOM for a PX4 firmware build. + +Produces one SBOM per board target containing: +- PX4 firmware as the primary package +- Git submodules as CONTAINS dependencies +- Python build requirements as BUILD_DEPENDENCY_OF packages +- Board-specific modules as CONTAINS packages + +Requires PyYAML (pyyaml) for loading license overrides. +""" +import argparse +import configparser +import json +import re +import subprocess +import uuid +from datetime import datetime, timezone +from pathlib import Path + +import yaml + +# Ordered most-specific first: all keywords must appear for a match. +LICENSE_PATTERNS = [ + # Copyleft licenses first (more specific keywords prevent false matches) + ("GPL-3.0-only", ["GNU GENERAL PUBLIC LICENSE", "Version 3"]), + ("GPL-2.0-only", ["GNU GENERAL PUBLIC LICENSE", "Version 2"]), + ("LGPL-3.0-only", ["GNU LESSER GENERAL PUBLIC LICENSE", "Version 3"]), + ("LGPL-2.1-only", ["GNU Lesser General Public License", "Version 2.1"]), + ("AGPL-3.0-only", ["GNU AFFERO GENERAL PUBLIC LICENSE", "Version 3"]), + # Permissive licenses + ("Apache-2.0", ["Apache License", "Version 2.0"]), + ("MIT", ["Permission is hereby granted"]), + ("BSD-3-Clause", ["Redistribution and use", "Neither the name"]), + ("BSD-2-Clause", ["Redistribution and use", "THIS SOFTWARE IS PROVIDED"]), + ("ISC", ["Permission to use, copy, modify, and/or distribute"]), + ("EPL-2.0", ["Eclipse Public License", "2.0"]), + ("Unlicense", ["The Unlicense", "unlicense.org"]), +] + +COPYLEFT_LICENSES = { + "GPL-2.0-only", "GPL-3.0-only", + "LGPL-2.1-only", "LGPL-3.0-only", + "AGPL-3.0-only", +} + +def load_license_overrides(source_dir): + """Load license overrides and comments from YAML config file. + + Returns (overrides, comments) dicts mapping submodule path to values. + Falls back to empty dicts if the file is missing. + """ + yaml_path = source_dir / "Tools" / "ci" / "license-overrides.yaml" + if not yaml_path.exists(): + return {}, {} + + with open(yaml_path) as f: + data = yaml.safe_load(f) + + overrides = {} + comments = {} + for path, entry in (data.get("overrides") or {}).items(): + overrides[path] = entry["license"] + if "comment" in entry: + comments[path] = entry["comment"] + + return overrides, comments + +LICENSE_FILENAMES = ["LICENSE", "LICENSE.md", "LICENSE.txt", "LICENCE", "LICENCE.md", "COPYING", "COPYING.md"] + + +def detect_license(submodule_dir): + """Auto-detect SPDX license ID from LICENSE/COPYING file in a directory. + + Reads the first 100 lines of the first license file found and matches + keywords against LICENSE_PATTERNS. Returns 'NOASSERTION' if no file + is found or no pattern matches. + """ + for fname in LICENSE_FILENAMES: + license_file = submodule_dir / fname + if license_file.is_file(): + try: + lines = license_file.read_text(errors="replace").splitlines()[:100] + text = "\n".join(lines) + except OSError: + continue + + text_upper = text.upper() + for spdx_id_val, keywords in LICENSE_PATTERNS: + if all(kw.upper() in text_upper for kw in keywords): + return spdx_id_val + + return "NOASSERTION" + + return "NOASSERTION" + + +def get_submodule_license(source_dir, sub_path, license_overrides): + """Return the SPDX license for a submodule: override > auto-detect.""" + if sub_path in license_overrides: + return license_overrides[sub_path] + return detect_license(source_dir / sub_path) + + +def spdx_id(name: str) -> str: + """Convert a name to a valid SPDX identifier (letters, digits, dots, hyphens).""" + return re.sub(r"[^a-zA-Z0-9.\-]", "-", name) + + +def parse_gitmodules(source_dir): + """Parse .gitmodules and return list of {name, path, url}.""" + gitmodules_path = source_dir / ".gitmodules" + if not gitmodules_path.exists(): + return [] + + config = configparser.ConfigParser() + config.read(str(gitmodules_path)) + + submodules = [] + for section in config.sections(): + if section.startswith("submodule "): + name = section.split('"')[1] if '"' in section else section.split(" ", 1)[1] + path = config.get(section, "path", fallback="") + url = config.get(section, "url", fallback="") + submodules.append({"name": name, "path": path, "url": url}) + + return submodules + + +def get_submodule_commits(source_dir): + """Get commit hashes for all submodules via git ls-tree -r (works without init).""" + try: + result = subprocess.run( + ["git", "ls-tree", "-r", "HEAD"], + cwd=str(source_dir), + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + text=True, + check=True, + ) + except (subprocess.CalledProcessError, FileNotFoundError): + return {} + + commits = {} + for line in result.stdout.splitlines(): + parts = line.split() + if len(parts) >= 4 and parts[1] == "commit": + commits[parts[3]] = parts[2] + + return commits + + +def get_git_info(source_dir: Path) -> dict: + """Get PX4 git version and hash.""" + info = {"version": "unknown", "hash": "unknown"} + try: + result = subprocess.run( + ["git", "describe", "--always", "--tags", "--dirty"], + cwd=str(source_dir), + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + text=True, + check=True, + ) + info["version"] = result.stdout.strip() + except (subprocess.CalledProcessError, FileNotFoundError): + pass + try: + result = subprocess.run( + ["git", "rev-parse", "HEAD"], + cwd=str(source_dir), + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + text=True, + check=True, + ) + info["hash"] = result.stdout.strip() + except (subprocess.CalledProcessError, FileNotFoundError): + pass + return info + + +def parse_requirements(requirements_path): + """Parse pip requirements.txt into list of {name, version_spec}.""" + if not requirements_path.exists(): + return [] + + deps = [] + for line in requirements_path.read_text().splitlines(): + line = line.strip() + if not line or line.startswith("#") or line.startswith("-"): + continue + # Split on version specifiers + match = re.match(r"^([a-zA-Z0-9_\-]+)(.*)?$", line) + if match: + deps.append({ + "name": match.group(1), + "version_spec": match.group(2).strip() if match.group(2) else "", + }) + return deps + + +def read_module_list(modules_file, source_dir): + """Read board-specific module list from file. + + Paths may be absolute; they are converted to relative paths under src/. + Duplicates are removed while preserving order. + """ + if not modules_file or not modules_file.exists(): + return [] + + seen = set() + modules = [] + source_str = str(source_dir.resolve()) + "/" + + for line in modules_file.read_text().splitlines(): + path = line.strip() + if not path or path.startswith("#"): + continue + # Convert absolute path to relative + if path.startswith(source_str): + path = path[len(source_str):] + if path not in seen: + seen.add(path) + modules.append(path) + + return modules + + +def make_purl(pkg_type: str, namespace: str, name: str, version: str = "") -> str: + """Construct a Package URL (purl).""" + purl = f"pkg:{pkg_type}/{namespace}/{name}" + if version: + purl += f"@{version}" + return purl + + +def extract_git_host_org_repo(url): + """Extract host type, org, and repo from a git URL. + + Returns (host, org, repo) where host is 'github', 'gitlab', or ''. + """ + match = re.search(r"github\.com[:/]([^/]+)/([^/]+?)(?:\.git)?$", url) + if match: + return "github", match.group(1), match.group(2) + match = re.search(r"gitlab\.com[:/](.+?)/([^/]+?)(?:\.git)?$", url) + if match: + return "gitlab", match.group(1), match.group(2) + return "", "", "" + + +def generate_sbom(source_dir, board, modules_file, compiler, platform=""): + """Generate a complete SPDX 2.3 JSON document.""" + license_overrides, license_comments = load_license_overrides(source_dir) + git_info = get_git_info(source_dir) + timestamp = datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ") + + # Deterministic namespace using UUID5 from git hash + board + ns_seed = f"{git_info['hash']}:{board}" + doc_namespace = f"https://spdx.org/spdxdocs/{board}-{uuid.uuid5(uuid.NAMESPACE_URL, ns_seed)}" + + doc = { + "spdxVersion": "SPDX-2.3", + "dataLicense": "CC0-1.0", + "SPDXID": "SPDXRef-DOCUMENT", + "name": f"PX4 Firmware SBOM for {board}", + "documentNamespace": doc_namespace, + "creationInfo": { + "created": timestamp, + "creators": [ + "Tool: px4-generate-sbom", + "Organization: Dronecode Foundation", + ], + "licenseListVersion": "3.22", + }, + "packages": [], + "relationships": [], + } + + # Primary package: PX4 firmware + primary_spdx_id = f"SPDXRef-PX4-{spdx_id(board)}" + doc["packages"].append({ + "SPDXID": primary_spdx_id, + "name": board, + "versionInfo": git_info["version"], + "packageFileName": f"{board}.px4", + "supplier": "Organization: Dronecode Foundation", + "downloadLocation": "https://github.com/PX4/PX4-Autopilot", + "filesAnalyzed": False, + "primaryPackagePurpose": "FIRMWARE", + "licenseConcluded": "BSD-3-Clause", + "licenseDeclared": "BSD-3-Clause", + "copyrightText": "Copyright (c) PX4 Development Team", + "externalRefs": [ + { + "referenceCategory": "PACKAGE-MANAGER", + "referenceType": "purl", + "referenceLocator": make_purl( + "github", "PX4", "PX4-Autopilot", git_info["version"] + ), + } + ], + }) + + doc["relationships"].append({ + "spdxElementId": "SPDXRef-DOCUMENT", + "relationshipType": "DESCRIBES", + "relatedSpdxElement": primary_spdx_id, + }) + + # Git submodules (filtered to those relevant to this board's modules) + submodules = parse_gitmodules(source_dir) + submodule_commits = get_submodule_commits(source_dir) + modules = read_module_list(modules_file, source_dir) + + def submodule_is_relevant(sub_path): + """A submodule is relevant if any board module path overlaps with it.""" + # NuttX platform submodules are only relevant for NuttX builds + if sub_path.startswith("platforms/nuttx/"): + return platform in ("nuttx", "") + if not modules: + return True # no module list means include all + # Other platform submodules are always relevant + if sub_path.startswith("platforms/"): + return True + for mod in modules: + # Module is under this submodule, or submodule is under a module + if mod.startswith(sub_path + "/") or sub_path.startswith(mod + "/"): + return True + return False + + for sub in submodules: + if not submodule_is_relevant(sub["path"]): + continue + sub_path = sub["path"] + sub_path_id = sub_path.replace("/", "-") + sub_spdx_id = f"SPDXRef-Submodule-{spdx_id(sub_path_id)}" + commit = submodule_commits.get(sub_path, "unknown") + license_id = get_submodule_license(source_dir, sub_path, license_overrides) + + host, org, repo = extract_git_host_org_repo(sub["url"]) + download = sub["url"] if sub["url"] else "NOASSERTION" + + # Use repo name from URL for human-readable name, fall back to last path component + display_name = repo if repo else sub_path.rsplit("/", 1)[-1] + + pkg = { + "SPDXID": sub_spdx_id, + "name": display_name, + "versionInfo": commit, + "supplier": f"Organization: {org}" if org else "NOASSERTION", + "downloadLocation": download, + "filesAnalyzed": False, + "licenseConcluded": license_id, + "licenseDeclared": license_id, + "copyrightText": "NOASSERTION", + } + + comment = license_comments.get(sub_path) + if comment: + pkg["licenseComments"] = comment + + if host and org and repo: + pkg["externalRefs"] = [ + { + "referenceCategory": "PACKAGE-MANAGER", + "referenceType": "purl", + "referenceLocator": make_purl(host, org, repo, commit), + } + ] + + doc["packages"].append(pkg) + doc["relationships"].append({ + "spdxElementId": primary_spdx_id, + "relationshipType": "CONTAINS", + "relatedSpdxElement": sub_spdx_id, + }) + + # Python build dependencies + requirements_path = source_dir / "Tools" / "setup" / "requirements.txt" + py_deps = parse_requirements(requirements_path) + + for dep in py_deps: + dep_name = dep["name"] + dep_spdx_id = f"SPDXRef-PyDep-{spdx_id(dep_name)}" + version_str = dep["version_spec"] if dep["version_spec"] else "NOASSERTION" + + doc["packages"].append({ + "SPDXID": dep_spdx_id, + "name": dep_name, + "versionInfo": version_str, + "supplier": "NOASSERTION", + "downloadLocation": f"https://pypi.org/project/{dep_name}/", + "filesAnalyzed": False, + "primaryPackagePurpose": "APPLICATION", + "licenseConcluded": "NOASSERTION", + "licenseDeclared": "NOASSERTION", + "copyrightText": "NOASSERTION", + "externalRefs": [ + { + "referenceCategory": "PACKAGE-MANAGER", + "referenceType": "purl", + "referenceLocator": f"pkg:pypi/{dep_name}", + } + ], + }) + doc["relationships"].append({ + "spdxElementId": dep_spdx_id, + "relationshipType": "BUILD_DEPENDENCY_OF", + "relatedSpdxElement": primary_spdx_id, + }) + + # Board-specific modules (already read above for submodule filtering) + for mod in modules: + mod_path_id = mod.replace("/", "-") + mod_spdx_id = f"SPDXRef-Module-{spdx_id(mod_path_id)}" + + # Derive short name: strip leading src/ for readability + display_name = mod + if display_name.startswith("src/"): + display_name = display_name[4:] + + doc["packages"].append({ + "SPDXID": mod_spdx_id, + "name": display_name, + "versionInfo": git_info["version"], + "supplier": "Organization: Dronecode Foundation", + "downloadLocation": "https://github.com/PX4/PX4-Autopilot", + "filesAnalyzed": False, + "licenseConcluded": "BSD-3-Clause", + "licenseDeclared": "BSD-3-Clause", + "copyrightText": "NOASSERTION", + }) + doc["relationships"].append({ + "spdxElementId": primary_spdx_id, + "relationshipType": "CONTAINS", + "relatedSpdxElement": mod_spdx_id, + }) + + # Compiler as a build tool + if compiler: + compiler_spdx_id = f"SPDXRef-Compiler-{spdx_id(compiler)}" + doc["packages"].append({ + "SPDXID": compiler_spdx_id, + "name": compiler, + "versionInfo": "NOASSERTION", + "supplier": "NOASSERTION", + "downloadLocation": "NOASSERTION", + "filesAnalyzed": False, + "primaryPackagePurpose": "APPLICATION", + "licenseConcluded": "NOASSERTION", + "licenseDeclared": "NOASSERTION", + "copyrightText": "NOASSERTION", + }) + doc["relationships"].append({ + "spdxElementId": compiler_spdx_id, + "relationshipType": "BUILD_TOOL_OF", + "relatedSpdxElement": primary_spdx_id, + }) + + return doc + + +def verify_licenses(source_dir): + """Verify license detection for all submodules. Returns exit code.""" + license_overrides, _ = load_license_overrides(source_dir) + submodules = parse_gitmodules(source_dir) + if not submodules: + print("No submodules found in .gitmodules") + return 1 + + has_noassertion = False + print(f"{'Submodule Path':<65} {'Detected':<16} {'Override':<16} {'Final'}") + print("-" * 115) + + for sub in submodules: + sub_path = sub["path"] + 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, "") + final = override if override else "NOASSERTION" + else: + detected = detect_license(sub_dir) + override = license_overrides.get(sub_path, "") + final = override if override else detected + + 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 = " <-- UNRESOLVED" + elif final == "NOASSERTION" and not checked_out: + marker = " (skipped)" + else: + marker = "" + + print(f"{sub_path:<65} {str(detected):<16} {str(override) if override else '':<16} {final}{marker}") + + # Copyleft warning (informational, not a failure) + copyleft_found = [] + for sub in submodules: + sub_path = sub["path"] + sub_dir = source_dir / sub_path + checked_out = sub_dir.is_dir() and any(sub_dir.iterdir()) + override = license_overrides.get(sub_path, "") + if checked_out: + final_lic = override if override else detect_license(sub_dir) + else: + final_lic = override if override else "NOASSERTION" + for cl in COPYLEFT_LICENSES: + if cl in final_lic: + copyleft_found.append((sub_path, final_lic)) + break + + print() + if copyleft_found: + print("Copyleft licenses detected (informational):") + for path, lic in copyleft_found: + print(f" {path}: {lic}") + print() + + if has_noassertion: + print("FAIL: Some submodules have unresolved licenses. " + "Add an entry to Tools/ci/license-overrides.yaml or check the LICENSE file.") + return 1 + + print("OK: All submodules have a resolved license.") + return 0 + + +def main(): + parser = argparse.ArgumentParser( + description="Generate SPDX 2.3 JSON SBOM for PX4 firmware" + ) + parser.add_argument( + "--source-dir", + type=Path, + default=Path.cwd(), + help="PX4 source directory (default: cwd)", + ) + parser.add_argument( + "--verify-licenses", + action="store_true", + help="Verify license detection for all submodules and exit", + ) + parser.add_argument( + "--board", + default=None, + help="Board target name (e.g. px4_fmu-v5x_default)", + ) + parser.add_argument( + "--modules-file", + type=Path, + default=None, + help="Path to config_module_list.txt", + ) + parser.add_argument( + "--compiler", + default="", + help="Compiler identifier (e.g. arm-none-eabi-gcc)", + ) + parser.add_argument( + "--platform", + default="", + help="PX4 platform (nuttx, posix, qurt). Filters platform-specific submodules.", + ) + parser.add_argument( + "--output", + type=Path, + default=None, + help="Output SBOM file path", + ) + + args = parser.parse_args() + + if args.verify_licenses: + raise SystemExit(verify_licenses(args.source_dir)) + + if not args.board: + parser.error("--board is required when not using --verify-licenses") + if not args.output: + parser.error("--output is required when not using --verify-licenses") + + sbom = generate_sbom( + source_dir=args.source_dir, + board=args.board, + modules_file=args.modules_file, + compiler=args.compiler, + platform=args.platform, + ) + + args.output.parent.mkdir(parents=True, exist_ok=True) + with open(args.output, "w") as f: + json.dump(sbom, f, indent=2) + f.write("\n") + + pkg_count = len(sbom["packages"]) + print(f"SBOM generated: {args.output} ({pkg_count} packages)") + + +if __name__ == "__main__": + main() diff --git a/Tools/ci/inspect_sbom.py b/Tools/ci/inspect_sbom.py new file mode 100755 index 0000000000..ac31660c80 --- /dev/null +++ b/Tools/ci/inspect_sbom.py @@ -0,0 +1,163 @@ +#!/usr/bin/env python3 +"""Inspect a PX4 SPDX SBOM file. + +Usage: + inspect_sbom.py # full summary + inspect_sbom.py search # search packages by name + inspect_sbom.py ntia # NTIA minimum elements check + inspect_sbom.py licenses # license summary + inspect_sbom.py list # list packages (Submodule|PyDep|Module|all) +""" + +import json +import sys +from collections import Counter +from pathlib import Path + + +def load(path): + return json.loads(Path(path).read_text()) + + +def pkg_type(pkg): + spdx_id = pkg["SPDXID"] + for prefix in ("Submodule", "PyDep", "Module", "Compiler", "PX4"): + if f"-{prefix}-" in spdx_id or spdx_id.startswith(f"SPDXRef-{prefix}"): + return prefix + return "Other" + + +def summary(doc): + print(f"spdxVersion: {doc['spdxVersion']}") + print(f"name: {doc['name']}") + print(f"namespace: {doc['documentNamespace']}") + print(f"created: {doc['creationInfo']['created']}") + print(f"creators: {', '.join(doc['creationInfo']['creators'])}") + print() + + types = Counter(pkg_type(p) for p in doc["packages"]) + print(f"Packages: {len(doc['packages'])}") + for t, c in types.most_common(): + print(f" {t}: {c}") + print() + + rc = Counter(r["relationshipType"] for r in doc["relationships"]) + print(f"Relationships: {len(doc['relationships'])}") + for t, n in rc.most_common(): + print(f" {t}: {n}") + print() + + primary = doc["packages"][0] + print(f"Primary package:") + print(f" name: {primary['name']}") + print(f" version: {primary['versionInfo']}") + print(f" purpose: {primary.get('primaryPackagePurpose', 'N/A')}") + print(f" license: {primary['licenseDeclared']}") + print() + + noassert = [ + p["name"] + for p in doc["packages"] + if pkg_type(p) == "Submodule" and p["licenseDeclared"] == "NOASSERTION" + ] + if noassert: + print(f"WARNING: {len(noassert)} submodules with NOASSERTION license:") + for n in noassert: + print(f" - {n}") + else: + print("All submodule licenses mapped") + + print(f"\nFile size: {Path(sys.argv[1]).stat().st_size // 1024}KB") + + +def search(doc, term): + term = term.lower() + found = [p for p in doc["packages"] if term in p["name"].lower()] + if not found: + print(f"No packages matching '{term}'") + return + print(f"Found {len(found)} packages matching '{term}':\n") + for p in found: + print(json.dumps(p, indent=2)) + print() + + +def ntia_check(doc): + required = ["SPDXID", "name", "versionInfo", "supplier", "downloadLocation"] + missing = [] + for p in doc["packages"]: + for f in required: + if f not in p or p[f] in ("", None): + missing.append((p["name"], f)) + + if missing: + print(f"FAIL: {len(missing)} missing fields:") + for name, field in missing: + print(f" {name}: missing {field}") + else: + print(f"PASS: All {len(doc['packages'])} packages have required fields") + + print(f"\nCreators: {doc['creationInfo']['creators']}") + print(f"Timestamp: {doc['creationInfo']['created']}") + + rels = [r for r in doc["relationships"] if r["relationshipType"] == "DESCRIBES"] + print(f"DESCRIBES relationships: {len(rels)}") + + return len(missing) == 0 + + +def licenses(doc): + by_license = {} + for p in doc["packages"]: + lic = p.get("licenseDeclared", "NOASSERTION") + by_license.setdefault(lic, []).append(p["name"]) + + for lic in sorted(by_license.keys()): + names = by_license[lic] + print(f"\n{lic} ({len(names)}):") + for n in sorted(names): + print(f" {n}") + + +def list_packages(doc, filter_type): + filter_type = filter_type.lower() + for p in sorted(doc["packages"], key=lambda x: x["name"]): + t = pkg_type(p) + if filter_type != "all" and t.lower() != filter_type: + continue + lic = p.get("licenseDeclared", "?") + ver = p["versionInfo"][:20] if len(p["versionInfo"]) > 20 else p["versionInfo"] + print(f" {t:10s} {p['name']:50s} {ver:20s} {lic}") + + +def main(): + if len(sys.argv) < 2: + print(__doc__) + sys.exit(1) + + doc = load(sys.argv[1]) + cmd = sys.argv[2] if len(sys.argv) > 2 else "summary" + + if cmd == "summary": + summary(doc) + elif cmd == "search": + if len(sys.argv) < 4: + print("Usage: inspect_sbom.py search ") + sys.exit(1) + search(doc, sys.argv[3]) + elif cmd == "ntia": + if not ntia_check(doc): + sys.exit(1) + elif cmd == "licenses": + licenses(doc) + elif cmd == "list": + filter_type = sys.argv[3] if len(sys.argv) > 3 else "all" + list_packages(doc, filter_type) + else: + print(f"Unknown command: {cmd}") + print(__doc__) + sys.exit(1) + + +if __name__ == "__main__": + main() diff --git a/Tools/ci/license-overrides.yaml b/Tools/ci/license-overrides.yaml new file mode 100644 index 0000000000..54457c7fad --- /dev/null +++ b/Tools/ci/license-overrides.yaml @@ -0,0 +1,62 @@ +# SPDX license overrides for submodules where auto-detection fails or is wrong. +# Each entry maps a submodule path to its SPDX license identifier and an +# optional comment explaining why the override exists. +# +# Run `python3 Tools/ci/generate_sbom.py --verify-licenses` to validate. + +overrides: + src/modules/mavlink/mavlink: + 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: >- + Dual-licensed. PX4 elects BSD-3-Clause. + No board currently enables CONFIG_LIB_CDRSTREAM. + + src/lib/cdrstream/rosidl: + license: "Apache-2.0" + + src/lib/crypto/monocypher: + license: "BSD-2-Clause OR CC0-1.0" + comment: >- + Dual-licensed. LICENCE.md offers BSD-2-Clause with CC0-1.0 as + public domain fallback. + + src/lib/crypto/libtomcrypt: + license: "Unlicense" + comment: "Public domain dedication. Functionally equivalent to Unlicense." + + src/lib/crypto/libtommath: + license: "Unlicense" + comment: "Public domain dedication. Functionally equivalent to Unlicense." + + platforms/nuttx/NuttX/nuttx: + license: "Apache-2.0" + comment: >- + Composite LICENSE (6652 lines) includes BSD/MIT/ISC sub-components. + Primary license is Apache-2.0. NOTICE file contains FAT LFN patent warnings. + + platforms/nuttx/NuttX/apps: + license: "Apache-2.0" + + boards/modalai/voxl2/libfc-sensor-api: + license: "NOASSERTION" + comment: >- + No LICENSE file in repo. README describes it as public interface + for proprietary sensor library. + + boards/modalai/voxl2/src/lib/mpa/libmodal-json: + license: "LGPL-3.0-only" + comment: "LGPL-3.0 weak copyleft. Used via header includes in VOXL2 mpa library." + + boards/modalai/voxl2/src/lib/mpa/libmodal-pipe: + license: "LGPL-3.0-only" + comment: "LGPL-3.0 weak copyleft. Used via header includes in VOXL2 mpa library." diff --git a/Tools/ci/package_build_artifacts.sh b/Tools/ci/package_build_artifacts.sh index aaf978b19f..1c33b4434d 100755 --- a/Tools/ci/package_build_artifacts.sh +++ b/Tools/ci/package_build_artifacts.sh @@ -1,37 +1,53 @@ -#!/bin/bash +#!/usr/bin/env bash mkdir artifacts cp **/**/*.px4 artifacts/ 2>/dev/null || true cp **/**/*.elf artifacts/ 2>/dev/null || true +cp **/**/*.deb artifacts/ 2>/dev/null || true for build_dir_path in build/*/ ; do build_dir_path=${build_dir_path::${#build_dir_path}-1} build_dir=${build_dir_path#*/} - mkdir artifacts/$build_dir + mkdir -p artifacts/$build_dir find artifacts/ -maxdepth 1 -type f -name "*$build_dir*" - # Airframe - cp $build_dir_path/airframes.xml artifacts/$build_dir/ + # Airframe (NuttX: build root, SITL: docs/ subdirectory) + airframes_src="" + if [ -f "$build_dir_path/airframes.xml" ]; then + airframes_src="$build_dir_path/airframes.xml" + elif [ -f "$build_dir_path/docs/airframes.xml" ]; then + airframes_src="$build_dir_path/docs/airframes.xml" + fi + if [ -n "$airframes_src" ]; then + cp "$airframes_src" "artifacts/$build_dir/" + fi # Parameters - cp $build_dir_path/parameters.xml artifacts/$build_dir/ - cp $build_dir_path/parameters.json artifacts/$build_dir/ - cp $build_dir_path/parameters.json.xz artifacts/$build_dir/ + cp $build_dir_path/parameters.xml artifacts/$build_dir/ 2>/dev/null || true + cp $build_dir_path/parameters.json artifacts/$build_dir/ 2>/dev/null || true + cp $build_dir_path/parameters.json.xz artifacts/$build_dir/ 2>/dev/null || true # Actuators - cp $build_dir_path/actuators.json artifacts/$build_dir/ - cp $build_dir_path/actuators.json.xz artifacts/$build_dir/ + cp $build_dir_path/actuators.json artifacts/$build_dir/ 2>/dev/null || true + cp $build_dir_path/actuators.json.xz artifacts/$build_dir/ 2>/dev/null || true # Events - cp $build_dir_path/events/all_events.json.xz artifacts/$build_dir/ - # ROS 2 msgs - cp $build_dir_path/events/all_events.json.xz artifacts/$build_dir/ - # Module Docs + 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 echo "----------" done if [ -d artifacts/px4_sitl_default ]; then - # general metadata - mkdir artifacts/_general/ - cp artifacts/px4_sitl_default/airframes.xml artifacts/_general/ + # general metadata (used by Flight Review and other downstream consumers) + mkdir -p artifacts/_general/ # Airframe - cp artifacts/px4_sitl_default/airframes.xml artifacts/_general/ + if [ -f artifacts/px4_sitl_default/airframes.xml ]; then + cp artifacts/px4_sitl_default/airframes.xml artifacts/_general/ + else + echo "Error: expected 'artifacts/px4_sitl_default/airframes.xml' not found." >&2 + exit 1 + fi # Parameters cp artifacts/px4_sitl_default/parameters.xml artifacts/_general/ cp artifacts/px4_sitl_default/parameters.json artifacts/_general/ @@ -40,9 +56,11 @@ if [ -d artifacts/px4_sitl_default ]; then cp artifacts/px4_sitl_default/actuators.json artifacts/_general/ cp artifacts/px4_sitl_default/actuators.json.xz artifacts/_general/ # Events - cp artifacts/px4_sitl_default/events/all_events.json.xz artifacts/_general/ - # ROS 2 msgs - cp artifacts/px4_sitl_default/events/all_events.json.xz artifacts/_general/ - # Module Docs + if [ -f artifacts/px4_sitl_default/events/all_events.json.xz ]; then + cp artifacts/px4_sitl_default/events/all_events.json.xz artifacts/_general/ + else + echo "Error: expected 'artifacts/px4_sitl_default/events/all_events.json.xz' not found." >&2 + exit 1 + fi ls -la artifacts/_general/ fi diff --git a/Tools/ci/pr-comment-poster.py b/Tools/ci/pr-comment-poster.py new file mode 100755 index 0000000000..c28b127568 --- /dev/null +++ b/Tools/ci/pr-comment-poster.py @@ -0,0 +1,288 @@ +#!/usr/bin/env python3 +""" +PR comment poster for analysis workflows. + +This script is invoked from the `PR Comment Poster` workflow which runs on +`workflow_run` in the base repository context. It consumes a `pr-comment` +artifact produced by an upstream analysis job (clang-tidy, flash_analysis, +etc.) and posts or updates a sticky PR comment via the GitHub REST API. + +Artifact contract (directory passed on the command line): + + manifest.json + { + "pr_number": 12345, (required, int > 0) + "marker": "", (required, printable ASCII) + "mode": "upsert" (optional, default "upsert") + } + + body.md + Markdown comment body, posted verbatim. Must be non-empty and + <= 60000 bytes (GitHub's hard limit is 65535, we cap under). + +Security: this script is run in a write-token context from a workflow that +MUST NOT check out PR code. Both manifest.json and body.md are treated as +opaque data. The marker is validated to printable ASCII only before use. + +Subcommands: + + validate Validate that contains a conforming manifest + body. + post Validate, then upsert a sticky comment on the target PR. + Requires env GITHUB_TOKEN and GITHUB_REPOSITORY. + +Python stdlib only. No third-party dependencies. +""" + +import argparse +import json +import os +import sys + +import _github_helpers +from _github_helpers import fail as _fail + + +# GitHub hard limit is 65535 bytes. Cap well under to leave headroom for +# the appended marker line and any future wrapping. +MAX_BODY_BYTES = 60000 + +# Marker length bounds. 1..200 is plenty for an HTML comment tag such as +# "". +MARKER_MIN_LEN = 1 +MARKER_MAX_LEN = 200 + +ACCEPTED_MODES = ('upsert',) + +USER_AGENT = 'px4-pr-comment-poster' + + +# --------------------------------------------------------------------------- +# Validation +# --------------------------------------------------------------------------- + +def _is_printable_ascii(s): + # Space (0x20) through tilde (0x7E) inclusive. + return all(0x20 <= ord(ch) <= 0x7E for ch in s) + + +def validate_marker(marker): + """Validate the marker string. + + The marker is printable ASCII only and bounded in length. The original + shell implementation also rejected quotes, backticks, and backslashes + because the value flowed through jq and shell contexts. Now that Python + owns the handling (the value is only ever used as a substring match in + comment bodies and as a literal string in JSON request payloads that + urllib serialises for us) those characters are safe. We keep the + printable-ASCII and length rules as a belt-and-braces sanity check. + """ + if not isinstance(marker, str): + _fail('marker must be a string') + n = len(marker) + if n < MARKER_MIN_LEN or n > MARKER_MAX_LEN: + _fail('marker length out of range ({}..{}): {}'.format( + MARKER_MIN_LEN, MARKER_MAX_LEN, n)) + if not _is_printable_ascii(marker): + _fail('marker contains non-printable or non-ASCII character') + + +def validate_manifest(directory): + """Validate /manifest.json and /body.md. + + Returns a dict with keys: pr_number (int), marker (str), mode (str), + body (str, verbatim contents of body.md). + """ + manifest_path = os.path.join(directory, 'manifest.json') + body_path = os.path.join(directory, 'body.md') + + if not os.path.isfile(manifest_path): + _fail('manifest.json missing at {}'.format(manifest_path)) + if not os.path.isfile(body_path): + _fail('body.md missing at {}'.format(body_path)) + + try: + with open(manifest_path, 'r', encoding='utf-8') as f: + manifest = json.load(f) + except (OSError, json.JSONDecodeError) as e: + _fail('manifest.json is not valid JSON: {}'.format(e)) + + if not isinstance(manifest, dict): + _fail('manifest.json must be a JSON object') + + pr_number = manifest.get('pr_number') + # bool is a subclass of int in Python, so isinstance(True, int) is True. + # Reject bools explicitly so "true"/"false" in the manifest doesn't silently + # validate as 1/0 and then either fail upstream or poke the wrong PR. + if not isinstance(pr_number, int) or isinstance(pr_number, bool): + _fail('pr_number must be an integer') + if pr_number <= 0: + _fail('pr_number must be > 0 (got {})'.format(pr_number)) + + marker = manifest.get('marker') + validate_marker(marker) + + mode = manifest.get('mode', 'upsert') + if mode not in ACCEPTED_MODES: + _fail('unsupported mode {!r} (accepted: {})'.format( + mode, ', '.join(ACCEPTED_MODES))) + + # Read as bytes first so the size check is an honest byte count (matching + # GitHub's own 65535-byte comment limit) before we pay the cost of decoding. + try: + with open(body_path, 'rb') as f: + body_bytes = f.read() + except OSError as e: + _fail('could not read body.md: {}'.format(e)) + + if len(body_bytes) == 0: + _fail('body.md is empty') + if len(body_bytes) > MAX_BODY_BYTES: + _fail('body.md too large: {} bytes (max {})'.format( + len(body_bytes), MAX_BODY_BYTES)) + + # Require UTF-8 up front so a producer that wrote a garbage encoding fails + # here rather than later inside json.dumps with a less obvious traceback. + try: + body = body_bytes.decode('utf-8') + except UnicodeDecodeError as e: + _fail('body.md is not valid UTF-8: {}'.format(e)) + + return { + 'pr_number': pr_number, + 'marker': marker, + 'mode': mode, + 'body': body, + } + + +# --------------------------------------------------------------------------- +# Comment upsert +# --------------------------------------------------------------------------- + +def find_existing_comment_id(client, repo, pr_number, marker): + """Return the id of the first PR comment whose body contains marker, or None. + + PR comments are issue comments in GitHub's data model, so we hit + /issues/{n}/comments rather than /pulls/{n}/comments (the latter only + returns review comments tied to specific code lines, which is not what + we want). The match is a plain substring check against the comment body; + the marker is expected to be an HTML comment that will not accidentally + appear in user-written prose. + """ + path = 'repos/{}/issues/{}/comments'.format(repo, pr_number) + for comment in client.paginated(path): + body = comment.get('body') or '' + if marker in body: + return comment.get('id') + return None + + +def build_final_body(body, marker): + """Append the marker to body if not already present. + + If the caller already embedded the marker (e.g. inside a hidden HTML + comment anywhere in their body) we leave the body alone; otherwise we + rstrip trailing newlines and append the marker on its own line after a + blank-line separator. Trailing-newline stripping keeps the output from + accumulating extra blank lines every time an existing comment is + re-rendered and re-posted. + """ + if marker in body: + return body + return '{}\n\n{}\n'.format(body.rstrip('\n'), marker) + + +def upsert_comment(client, repo, pr_number, marker, body): + final_body = build_final_body(body, marker) + existing_id = find_existing_comment_id(client, repo, pr_number, marker) + + if existing_id is not None: + print('Updating comment {} on PR #{}'.format(existing_id, pr_number)) + client.request( + 'PATCH', + 'repos/{}/issues/comments/{}'.format(repo, existing_id), + json_body={'body': final_body}, + ) + else: + print('Creating new comment on PR #{}'.format(pr_number)) + client.request( + 'POST', + 'repos/{}/issues/{}/comments'.format(repo, pr_number), + json_body={'body': final_body}, + ) + + +# --------------------------------------------------------------------------- +# Entry points +# --------------------------------------------------------------------------- + +def cmd_validate(args): + result = validate_manifest(args.directory) + print('ok: pr_number={} marker_len={} mode={} body_bytes={}'.format( + result['pr_number'], + len(result['marker']), + result['mode'], + len(result['body'].encode('utf-8')), + )) + return 0 + + +def cmd_post(args): + result = validate_manifest(args.directory) + + # GITHUB_TOKEN is provided by the workflow via env; GITHUB_REPOSITORY is + # auto-set on every Actions runner. Both are required here because a local + # developer running the script directly won't have either unless they + # export them, and we want a clear error in that case. + token = os.environ.get('GITHUB_TOKEN') + if not token: + _fail('GITHUB_TOKEN is not set') + repo = os.environ.get('GITHUB_REPOSITORY') + if not repo: + _fail('GITHUB_REPOSITORY is not set (expected "owner/name")') + # Minimal shape check. If "owner/name" is malformed the subsequent API + # calls would 404 with an unhelpful URL. Fail fast here instead. + if '/' not in repo: + _fail('GITHUB_REPOSITORY must be "owner/name", got {!r}'.format(repo)) + + try: + client = _github_helpers.GitHubClient(token, user_agent=USER_AGENT) + upsert_comment( + client=client, + repo=repo, + pr_number=result['pr_number'], + marker=result['marker'], + body=result['body'], + ) + except RuntimeError as e: + _fail(str(e)) + return 0 + + +def main(argv=None): + parser = argparse.ArgumentParser( + description='Validate and post sticky PR comments from CI artifacts.', + ) + sub = parser.add_subparsers(dest='command', required=True) + + p_validate = sub.add_parser( + 'validate', + help='Validate manifest.json and body.md in the given directory.', + ) + p_validate.add_argument('directory') + p_validate.set_defaults(func=cmd_validate) + + p_post = sub.add_parser( + 'post', + help='Validate, then upsert a sticky PR comment. Requires env ' + 'GITHUB_TOKEN and GITHUB_REPOSITORY.', + ) + p_post.add_argument('directory') + p_post.set_defaults(func=cmd_post) + + args = parser.parse_args(argv) + return args.func(args) + + +if __name__ == '__main__': + sys.exit(main()) diff --git a/Tools/ci/pr-review-poster.py b/Tools/ci/pr-review-poster.py new file mode 100644 index 0000000000..f46f8616a6 --- /dev/null +++ b/Tools/ci/pr-review-poster.py @@ -0,0 +1,481 @@ +#!/usr/bin/env python3 +""" +PR review-comment poster for analysis workflows. + +Sibling of Tools/ci/pr-comment-poster.py. Where pr-comment-poster.py posts +sticky issue-style PR comments, this script posts line-anchored review +comments on the "Files changed" tab. Use it for tools like clang-tidy that +want to flag specific lines instead of (or in addition to) a rollup +comment. + +This script is invoked from the `PR Review Poster` workflow which runs on +`workflow_run` in the base repository context. It consumes a `pr-review` +artifact produced by an upstream analysis job and posts a fresh PR review +via the GitHub REST API, dismissing any stale review the same producer +left on a previous run. + +Artifact contract (directory passed on the command line): + + manifest.json + { + "pr_number": 12345, (required, int > 0) + "marker": "", (required, printable ASCII) + "event": "COMMENT", (required, "COMMENT" only) + "commit_sha": "0123456789abcdef0123456789abcdef01234567",(required, 40 hex chars) + "summary": "Optional review body text" (optional) + } + + comments.json + JSON array of line-anchored review comment objects: + [ + {"path": "src/foo.cpp", "line": 42, "side": "RIGHT", + "body": "..."}, + {"path": "src/bar.hpp", "start_line": 10, "line": 15, + "side": "RIGHT", "start_side": "RIGHT", "body": "..."} + ] + +Note: `APPROVE` and `REQUEST_CHANGES` events are intentionally NOT +supported. Bots should never approve a pull request, and REQUEST_CHANGES +cannot be dismissed by the GITHUB_TOKEN when branch protection restricts +review dismissals, leading to undismissable spam on every push. + +Security: this script is run in a write-token context from a workflow that +MUST NOT check out PR code. Both manifest.json and comments.json are +treated as opaque data. The marker is validated to printable ASCII only +before use, and only reviews authored by github-actions[bot] whose body +contains the marker can be dismissed (a fork cannot spoof either). + +Subcommands: + + validate Validate that contains a conforming manifest + + comments file. + post Validate, then dismiss any stale matching review and + post a new review on the target PR. Requires env + GITHUB_TOKEN and GITHUB_REPOSITORY. + +Python stdlib only. No third-party dependencies. +""" + +import argparse +import json +import os +import re +import sys +import time + +import _github_helpers +from _github_helpers import fail as _fail + + +USER_AGENT = 'px4-pr-review-poster' + +# Marker length bounds. 1..200 is plenty for an HTML comment tag such as +# "". +MARKER_MIN_LEN = 1 +MARKER_MAX_LEN = 200 + +# Cap per-comment body size well under GitHub's hard limit so we leave +# headroom for the wrapping JSON envelope. Empirically GitHub allows ~65535 +# bytes per review comment body; 60000 is a safe ceiling. +MAX_COMMENT_BODY_BYTES = 60000 + +# Cap on number of comments per single review POST. platisd uses 10. The +# value matters because GitHub's review-creation endpoint has a payload +# size limit and review comments occasionally trip an abuse-detection +# threshold when posted in very large batches. Smaller chunks also let us +# spread the work across multiple reviews so a single bad entry only +# fails its own chunk. +COMMENTS_PER_REVIEW = 10 + +# Sleep between successive review POSTs to stay clear of GitHub's +# secondary rate limits. platisd uses 10s; 5s is enough for our volume +# and cuts user-visible latency. +SLEEP_BETWEEN_CHUNKS_SECONDS = 5 + +ACCEPTED_EVENTS = ('COMMENT',) +ACCEPTED_SIDES = ('LEFT', 'RIGHT') +COMMIT_SHA_RE = re.compile(r'^[0-9a-f]{40}$') + +# The login GitHub assigns to the built-in actions token. Used to filter +# the list of existing reviews so we never touch a human reviewer's review. +BOT_LOGIN = 'github-actions[bot]' + + +# --------------------------------------------------------------------------- +# Validation +# --------------------------------------------------------------------------- + +def _is_printable_ascii(s): + return all(0x20 <= ord(ch) <= 0x7E for ch in s) + + +def validate_marker(marker): + """Validate the marker string. See pr-comment-poster.py for rationale.""" + if not isinstance(marker, str): + _fail('marker must be a string') + n = len(marker) + if n < MARKER_MIN_LEN or n > MARKER_MAX_LEN: + _fail('marker length out of range ({}..{}): {}'.format( + MARKER_MIN_LEN, MARKER_MAX_LEN, n)) + if not _is_printable_ascii(marker): + _fail('marker contains non-printable or non-ASCII character') + + +def _validate_comment_entry(idx, entry): + """Validate a single review-comment entry. Raises via _fail on error.""" + if not isinstance(entry, dict): + _fail('comments[{}]: must be an object'.format(idx)) + + path = entry.get('path') + if not isinstance(path, str) or not path: + _fail('comments[{}].path: required non-empty string'.format(idx)) + + line = entry.get('line') + if not isinstance(line, int) or isinstance(line, bool) or line <= 0: + _fail('comments[{}].line: required positive integer'.format(idx)) + + side = entry.get('side', 'RIGHT') + if side not in ACCEPTED_SIDES: + _fail('comments[{}].side: must be one of {} (got {!r})'.format( + idx, ', '.join(ACCEPTED_SIDES), side)) + + if 'start_line' in entry: + start_line = entry['start_line'] + if (not isinstance(start_line, int) + or isinstance(start_line, bool) + or start_line <= 0): + _fail('comments[{}].start_line: must be positive integer'.format(idx)) + if start_line >= line: + _fail('comments[{}].start_line ({}) must be < line ({})'.format( + idx, start_line, line)) + start_side = entry.get('start_side', side) + if start_side not in ACCEPTED_SIDES: + _fail('comments[{}].start_side: must be one of {}'.format( + idx, ', '.join(ACCEPTED_SIDES))) + + body = entry.get('body') + if not isinstance(body, str) or not body: + _fail('comments[{}].body: required non-empty string'.format(idx)) + body_bytes = len(body.encode('utf-8')) + if body_bytes > MAX_COMMENT_BODY_BYTES: + _fail('comments[{}].body too large: {} bytes (max {})'.format( + idx, body_bytes, MAX_COMMENT_BODY_BYTES)) + + +def validate_manifest(directory): + """Validate /manifest.json and /comments.json. + + Returns a dict with keys: pr_number, marker, event, commit_sha, + summary, comments (list of validated comment dicts). + """ + manifest_path = os.path.join(directory, 'manifest.json') + comments_path = os.path.join(directory, 'comments.json') + + if not os.path.isfile(manifest_path): + _fail('manifest.json missing at {}'.format(manifest_path)) + if not os.path.isfile(comments_path): + _fail('comments.json missing at {}'.format(comments_path)) + + try: + with open(manifest_path, 'r', encoding='utf-8') as f: + manifest = json.load(f) + except (OSError, json.JSONDecodeError) as e: + _fail('manifest.json is not valid JSON: {}'.format(e)) + + if not isinstance(manifest, dict): + _fail('manifest.json must be a JSON object') + + pr_number = manifest.get('pr_number') + if not isinstance(pr_number, int) or isinstance(pr_number, bool): + _fail('pr_number must be an integer') + if pr_number <= 0: + _fail('pr_number must be > 0 (got {})'.format(pr_number)) + + marker = manifest.get('marker') + validate_marker(marker) + + event = manifest.get('event') + if event not in ACCEPTED_EVENTS: + _fail('event must be one of {} (got {!r}). APPROVE and ' + 'REQUEST_CHANGES are intentionally forbidden.'.format( + ', '.join(ACCEPTED_EVENTS), event)) + + commit_sha = manifest.get('commit_sha') + if not isinstance(commit_sha, str) or not COMMIT_SHA_RE.match(commit_sha): + _fail('commit_sha must be a 40-character lowercase hex string') + + summary = manifest.get('summary', '') + if summary is None: + summary = '' + if not isinstance(summary, str): + _fail('summary must be a string if present') + + try: + with open(comments_path, 'r', encoding='utf-8') as f: + comments = json.load(f) + except (OSError, json.JSONDecodeError) as e: + _fail('comments.json is not valid JSON: {}'.format(e)) + + if not isinstance(comments, list): + _fail('comments.json must be a JSON array') + + for idx, entry in enumerate(comments): + _validate_comment_entry(idx, entry) + + return { + 'pr_number': pr_number, + 'marker': marker, + 'event': event, + 'commit_sha': commit_sha, + 'summary': summary, + 'comments': comments, + } + + +# --------------------------------------------------------------------------- +# Stale-review dismissal +# --------------------------------------------------------------------------- + +def find_stale_reviews(client, repo, pr_number, marker): + """Yield (id, state) for each existing review owned by the bot AND + whose body contains the marker. + + Filtering on BOTH author == github-actions[bot] AND marker-in-body is + the security invariant: a fork PR cannot impersonate the bot login, + and a fork PR also cannot inject the marker into a human reviewer's + body without API access. + """ + path = 'repos/{}/pulls/{}/reviews'.format(repo, pr_number) + for review in client.paginated(path): + user = review.get('user') or {} + if user.get('login') != BOT_LOGIN: + continue + body = review.get('body') or '' + if marker not in body: + continue + yield review.get('id'), review.get('state') + + +def dismiss_stale_reviews(client, repo, pr_number, marker): + """Dismiss (or, for PENDING reviews, delete) every stale matching review. + + Returns the number of reviews that could NOT be dismissed (still active). + """ + dismissal_message = 'Superseded by a newer run' + failed_dismissals = 0 + for review_id, state in find_stale_reviews(client, repo, pr_number, marker): + if review_id is None: + continue + if state in ('DISMISSED', 'COMMENTED'): + # Already inert or non-blocking; nothing to do. + continue + if state == 'PENDING': + # PENDING reviews cannot be dismissed; they must be deleted. + print('Deleting pending stale review {}'.format(review_id)) + try: + client.request( + 'DELETE', + 'repos/{}/pulls/{}/reviews/{}'.format( + repo, pr_number, review_id)) + except RuntimeError as e: + failed_dismissals += 1 + print('warning: failed to delete pending review {}: {}'.format( + review_id, e), file=sys.stderr) + continue + print('Dismissing stale review {} (state={})'.format(review_id, state)) + try: + client.request( + 'PUT', + 'repos/{}/pulls/{}/reviews/{}/dismissals'.format( + repo, pr_number, review_id), + json_body={ + 'message': dismissal_message, + 'event': 'DISMISS', + }, + ) + except RuntimeError as e: + failed_dismissals += 1 + print('warning: failed to dismiss review {}: {}'.format( + review_id, e), file=sys.stderr) + return failed_dismissals + + +# --------------------------------------------------------------------------- +# Review posting +# --------------------------------------------------------------------------- + +def _chunk(lst, n): + """Yield successive n-sized slices of lst.""" + for i in range(0, len(lst), n): + yield lst[i:i + n] + + +def _build_review_body(marker, summary, chunk_index, chunk_total): + """Construct the review body text. + + Always begins with the marker (so future runs can find and dismiss + this review). Appends a chunk index when the comment set is split + across multiple reviews, and the producer-supplied summary if any. + """ + parts = [marker] + if chunk_total > 1: + parts.append('({}/{})'.format(chunk_index + 1, chunk_total)) + if summary: + parts.append('') + parts.append(summary) + return '\n'.join(parts) + + +def _comment_to_api(entry): + """Project a validated comment dict to the GitHub API shape.""" + api = { + 'path': entry['path'], + 'line': entry['line'], + 'side': entry.get('side', 'RIGHT'), + 'body': entry['body'], + } + if 'start_line' in entry: + api['start_line'] = entry['start_line'] + api['start_side'] = entry.get('start_side', api['side']) + return api + + +def post_review(client, repo, pr_number, marker, event, commit_sha, summary, + comments): + """Post one or more reviews containing the validated comments. + + Comments are split into COMMENTS_PER_REVIEW-sized chunks. Each chunk + becomes its own review POST. A failed chunk logs a warning and the + loop continues to the next chunk. + """ + chunks = list(_chunk(comments, COMMENTS_PER_REVIEW)) + total = len(chunks) + if total == 0: + print('No comments to post; skipping review creation.') + return + + posted_any = False + for idx, chunk in enumerate(chunks): + if idx > 0: + time.sleep(SLEEP_BETWEEN_CHUNKS_SECONDS) + body = _build_review_body(marker, summary, idx, total) + payload = { + 'commit_id': commit_sha, + 'body': body, + 'event': event, + 'comments': [_comment_to_api(c) for c in chunk], + } + print('Posting review chunk {}/{} with {} comment(s)'.format( + idx + 1, total, len(chunk))) + try: + client.request( + 'POST', + 'repos/{}/pulls/{}/reviews'.format(repo, pr_number), + json_body=payload, + ) + posted_any = True + except RuntimeError as e: + # Most common cause is HTTP 422: a comment refers to a line + # GitHub does not consider part of the diff. Skip the bad + # chunk and keep going so other findings still get posted. + print('warning: review chunk {}/{} failed: {}'.format( + idx + 1, total, e), file=sys.stderr) + + if not posted_any: + # If every single chunk failed, surface that as a hard error so + # the workflow turns red and a human looks at it. + _fail('all review chunks failed to post; see warnings above') + + +# --------------------------------------------------------------------------- +# Entry points +# --------------------------------------------------------------------------- + +def cmd_validate(args): + result = validate_manifest(args.directory) + print(('ok: pr_number={} marker_len={} event={} commit_sha={} ' + 'comments={} summary_len={}').format( + result['pr_number'], + len(result['marker']), + result['event'], + result['commit_sha'], + len(result['comments']), + len(result['summary']), + )) + return 0 + + +def cmd_post(args): + result = validate_manifest(args.directory) + + # Empty comment lists short-circuit silently. A producer that ran but + # found nothing to flag should not generate noise on the PR. + if len(result['comments']) == 0: + print('No comments in artifact; nothing to post.') + return 0 + + token = os.environ.get('GITHUB_TOKEN') + if not token: + _fail('GITHUB_TOKEN is not set') + repo = os.environ.get('GITHUB_REPOSITORY') + if not repo: + _fail('GITHUB_REPOSITORY is not set (expected "owner/name")') + if '/' not in repo: + _fail('GITHUB_REPOSITORY must be "owner/name", got {!r}'.format(repo)) + + try: + client = _github_helpers.GitHubClient(token, user_agent=USER_AGENT) + undismissed = dismiss_stale_reviews( + client=client, + repo=repo, + pr_number=result['pr_number'], + marker=result['marker'], + ) + + if undismissed > 0: + print('{} prior review(s) could not be dismissed (likely ' + 'branch protection).'.format(undismissed)) + + post_review( + client=client, + repo=repo, + pr_number=result['pr_number'], + marker=result['marker'], + event=result['event'], + commit_sha=result['commit_sha'], + summary=result['summary'], + comments=result['comments'], + ) + except RuntimeError as e: + _fail(str(e)) + return 0 + + +def main(argv=None): + parser = argparse.ArgumentParser( + description='Validate and post line-anchored PR review comments ' + 'from CI artifacts.', + ) + sub = parser.add_subparsers(dest='command', required=True) + + p_validate = sub.add_parser( + 'validate', + help='Validate manifest.json and comments.json in the given directory.', + ) + p_validate.add_argument('directory') + p_validate.set_defaults(func=cmd_validate) + + p_post = sub.add_parser( + 'post', + help='Validate, then dismiss any stale review and post a new one. ' + 'Requires env GITHUB_TOKEN and GITHUB_REPOSITORY.', + ) + p_post.add_argument('directory') + p_post.set_defaults(func=cmd_post) + + args = parser.parse_args(argv) + return args.func(args) + + +if __name__ == '__main__': + sys.exit(main()) diff --git a/Tools/ci/pr_comment.py b/Tools/ci/pr_comment.py new file mode 100755 index 0000000000..6306b13ef4 --- /dev/null +++ b/Tools/ci/pr_comment.py @@ -0,0 +1,95 @@ +#!/usr/bin/env python3 +"""Post, update, or delete a PR comment with deduplication. + +Uses hidden HTML markers to find existing comments and avoid duplicates. +Reads comment body from stdin when posting or updating. + +Usage: + echo "comment body" | python3 pr_comment.py --marker pr-title --pr 123 --result fail + python3 pr_comment.py --marker pr-title --pr 123 --result pass + +Results: + fail - post/update comment with body from stdin + warn - post/update comment with body from stdin + pass - delete existing comment if any + +Requires GH_TOKEN and GITHUB_REPOSITORY environment variables. +""" + +import argparse +import json +import os +import subprocess +import sys + + +def gh_api(endpoint: str, method: str = 'GET', body: dict | None = None) -> str: + """Call the GitHub API via gh cli.""" + cmd = ['gh', 'api', endpoint, '-X', method] + if body: + for key, value in body.items(): + cmd.extend(['-f', f'{key}={value}']) + result = subprocess.run(cmd, capture_output=True, text=True) + if result.returncode != 0 and method != 'DELETE': + print(f"gh api error: {result.stderr}", file=sys.stderr) + return result.stdout + + +def find_comment(repo: str, pr: int, marker: str) -> str | None: + """Find an existing comment by its hidden marker. Returns comment ID or None.""" + response = gh_api(f"repos/{repo}/issues/{pr}/comments?per_page=100") + try: + comments = json.loads(response) + except json.JSONDecodeError: + return None + + if not isinstance(comments, list): + return None + + for comment in comments: + if isinstance(comment, dict) and comment.get('body', '').startswith(marker): + return str(comment['id']) + return None + + +def main() -> None: + parser = argparse.ArgumentParser(description='Manage PR quality comments') + parser.add_argument('--marker', required=True, + help='Marker name (e.g. pr-title, commit-msgs, pr-body)') + parser.add_argument('--pr', required=True, type=int, + help='Pull request number') + parser.add_argument('--result', required=True, choices=['pass', 'fail', 'warn'], + help='Check result: pass deletes comment, fail/warn posts it') + args = parser.parse_args() + + repo = os.environ.get('GITHUB_REPOSITORY', '') + if not repo: + print("GITHUB_REPOSITORY not set", file=sys.stderr) + sys.exit(2) + + marker = f"" + existing_id = find_comment(repo, args.pr, marker) + + if args.result == 'pass': + if existing_id: + gh_api(f"repos/{repo}/issues/comments/{existing_id}", method='DELETE') + return + + # Read comment body from stdin + body_content = sys.stdin.read().strip() + if not body_content: + print("No comment body provided on stdin", file=sys.stderr) + sys.exit(2) + + full_body = f"{marker}\n{body_content}" + + if existing_id: + gh_api(f"repos/{repo}/issues/comments/{existing_id}", method='PATCH', + body={'body': full_body}) + else: + gh_api(f"repos/{repo}/issues/{args.pr}/comments", method='POST', + body={'body': full_body}) + + +if __name__ == '__main__': + main() diff --git a/Tools/ci/run-clang-tidy-pr.py b/Tools/ci/run-clang-tidy-pr.py new file mode 100755 index 0000000000..226bdae2e3 --- /dev/null +++ b/Tools/ci/run-clang-tidy-pr.py @@ -0,0 +1,147 @@ +#!/usr/bin/env python3 +""" +Run clang-tidy incrementally on files changed in a PR. + +Usage: run-clang-tidy-pr.py + base-ref: e.g. origin/main + +Computes the set of translation units (TUs) affected by the PR diff, +then invokes Tools/run-clang-tidy.py on that subset only. +Exits 0 silently when no C++ files were changed. +""" + +import argparse +import json +import os +import subprocess +import sys + +EXTENSIONS_CPP = {'.cpp', '.c'} +EXTENSIONS_HDR = {'.hpp', '.h'} +# Manual exclusions from Makefile:508 +EXCLUDE_EXTRA = '|'.join([ + 'src/systemcmds/tests', + 'src/examples', + 'src/modules/gyro_fft/CMSIS_5', + 'src/lib/drivers/smbus', + 'src/drivers/gpio', + r'src/modules/commander/failsafe/emscripten', + r'failsafe_test\.dir', +]) + + +def repo_root(): + try: + return subprocess.check_output( + ['git', 'rev-parse', '--show-toplevel'], text=True).strip() + except subprocess.CalledProcessError: + print('error: not inside a git repository', file=sys.stderr) + sys.exit(1) + + +def changed_files(base_ref, root): + try: + out = subprocess.check_output( + ['git', 'diff', '--name-only', f'{base_ref}...HEAD', + '--', '*.cpp', '*.hpp', '*.h', '*.c'], + text=True, cwd=root).strip() + return out.splitlines() if out else [] + except subprocess.CalledProcessError: + print(f'error: could not diff against "{base_ref}" — ' + 'is the ref valid and fetched?', file=sys.stderr) + sys.exit(1) + + +def submodule_paths(root): + # Returns [] if .gitmodules is absent or has no paths — both valid + try: + out = subprocess.check_output( + ['git', 'config', '--file', '.gitmodules', + '--get-regexp', 'path'], + text=True, cwd=root).strip() + return [line.split()[1] for line in out.splitlines()] + except subprocess.CalledProcessError: + return [] + + +def build_exclude(root): + submodules = '|'.join(submodule_paths(root)) + return f'{submodules}|{EXCLUDE_EXTRA}' if submodules else EXCLUDE_EXTRA + + +def load_db(build_dir): + db_path = os.path.join(build_dir, 'compile_commands.json') + if not os.path.isfile(db_path): + print(f'error: {db_path} not found', file=sys.stderr) + print('Run "make px4_sitl_default-clang" first to generate ' + 'the compilation database', file=sys.stderr) + sys.exit(1) + try: + with open(db_path) as f: + return json.load(f) + except json.JSONDecodeError as e: + print(f'error: compile_commands.json is malformed: {e}', file=sys.stderr) + sys.exit(1) + + +def find_tus(changed, db, root): + db_files = {e['file'] for e in db} + result = set() + for f in changed: + abs_path = os.path.join(root, f) + ext = os.path.splitext(f)[1] + if ext in EXTENSIONS_CPP: + if abs_path in db_files: + result.add(abs_path) + elif ext in EXTENSIONS_HDR: + hdr = os.path.basename(f) + for e in db: + try: + if hdr in open(e['file']).read(): + result.add(e['file']) + except OSError: + pass # file deleted in PR — skip + return sorted(result) + + +def main(): + parser = argparse.ArgumentParser(description=__doc__, + formatter_class=argparse.RawDescriptionHelpFormatter) + parser.add_argument('base_ref', + help='Git ref to diff against, e.g. origin/main') + args = parser.parse_args() + + root = repo_root() + build_dir = os.path.join(root, 'build', 'px4_sitl_default-clang') + + run_tidy = os.path.join(root, 'Tools', 'run-clang-tidy.py') + if not os.path.isfile(run_tidy): + print(f'error: {run_tidy} not found', file=sys.stderr) + sys.exit(1) + + changed = changed_files(args.base_ref, root) + if not changed: + print('No C++ files changed — skipping clang-tidy') + sys.exit(0) + + db = load_db(build_dir) + tus = find_tus(changed, db, root) + + if not tus: + print('No matching TUs in compile_commands.json — skipping clang-tidy') + sys.exit(0) + + print(f'Running clang-tidy on {len(tus)} translation unit(s)') + + result = subprocess.run( + [sys.executable, run_tidy, + '-header-filter=.*\\.hpp', + '-j0', + f'-exclude={build_exclude(root)}', + '-p', build_dir] + tus + ) + sys.exit(result.returncode) + + +if __name__ == '__main__': + main() diff --git a/Tools/ci/run_fuzz_tests.sh b/Tools/ci/run_fuzz_tests.sh index 4aa4a9d3b6..3007dc744e 100755 --- a/Tools/ci/run_fuzz_tests.sh +++ b/Tools/ci/run_fuzz_tests.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # This script runs the fuzz tests from a given binary for a certain amount of time set -e diff --git a/Tools/ci/use_aws_apt_mirror.sh b/Tools/ci/use_aws_apt_mirror.sh new file mode 100755 index 0000000000..ea21e9aaaf --- /dev/null +++ b/Tools/ci/use_aws_apt_mirror.sh @@ -0,0 +1,42 @@ +#!/bin/sh +# Rewrite the container's apt sources to point at the AWS regional Ubuntu +# mirror that is local to the runs-on instance. +# +# The default archive.ubuntu.com round-robin sometimes serves out-of-sync +# index files mid-sync, breaking apt-get update with errors like: +# File has unexpected size (25378 != 25381). Mirror sync in progress? +# The Canonical-operated EC2 mirrors are region-local and sync aggressively, +# eliminating that failure mode. +# +# This script is a no-op outside runs-on, so it is safe to call from any CI +# job (forks, self-hosted runners, local docker runs, etc.) without changing +# behavior there. +# +# Usage (from a workflow step running inside the container): +# ./Tools/ci/use_aws_apt_mirror.sh + +set -e + +if [ -z "$RUNS_ON_AWS_REGION" ]; then + echo "use_aws_apt_mirror: not running on runs-on (RUNS_ON_AWS_REGION unset), skipping" + exit 0 +fi + +MIRROR="http://${RUNS_ON_AWS_REGION}.ec2.archive.ubuntu.com/ubuntu" +echo "use_aws_apt_mirror: rewriting apt sources to ${MIRROR}" + +# Noble (24.04+) uses the deb822 format at /etc/apt/sources.list.d/ubuntu.sources +if [ -f /etc/apt/sources.list.d/ubuntu.sources ]; then + sed -i \ + -e "s|http://archive.ubuntu.com/ubuntu|${MIRROR}|g" \ + -e "s|http://security.ubuntu.com/ubuntu|${MIRROR}|g" \ + /etc/apt/sources.list.d/ubuntu.sources +fi + +# Jammy (22.04) and earlier use the legacy /etc/apt/sources.list +if [ -f /etc/apt/sources.list ]; then + sed -i \ + -e "s|http://archive.ubuntu.com/ubuntu|${MIRROR}|g" \ + -e "s|http://security.ubuntu.com/ubuntu|${MIRROR}|g" \ + /etc/apt/sources.list +fi diff --git a/Tools/copy_to_ros_ws.sh b/Tools/copy_to_ros_ws.sh index 48fcaa0d1f..b27fb07e34 100755 --- a/Tools/copy_to_ros_ws.sh +++ b/Tools/copy_to_ros_ws.sh @@ -1,4 +1,4 @@ -#! /bin/bash +#!/usr/bin/env bash # Copy msgs and the message translation node into a ROS workspace directory DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) diff --git a/Tools/dist/vehicle_configs.xml b/Tools/dist/vehicle_configs.xml deleted file mode 100644 index 76d7ba11eb..0000000000 --- a/Tools/dist/vehicle_configs.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - Standard 8" Prop Quadrotor (x) - Standard quadrotor configuration in x configuration for 8-" propellers - /etc/mixers/quad_x.main.mix - - - Standard 8" Prop Quadrotor (+) - Standard quadrotor configuration in + configuration for 8-" propellers - /etc/mixers/quad_+.main.mix - - - Standard 8" Prop Quadrotor (x) - Standard quadrotor configuration in x configuration for 8-" propellers - /etc/mixers/quad_x.main.mix - - - Zeta Science Wing Wing Z-84 - Configuration for a small flying wing. - /etc/mixers/wingwing.main.mix - - diff --git a/Tools/docker_run.sh b/Tools/docker_run.sh index 773c8992eb..fda1ee65e0 100755 --- a/Tools/docker_run.sh +++ b/Tools/docker_run.sh @@ -1,4 +1,4 @@ -#! /bin/bash +#!/usr/bin/env bash if [ -z ${PX4_DOCKER_REPO+x} ]; then PX4_DOCKER_REPO="px4io/px4-dev:v1.17.0-beta1" diff --git a/Tools/kconfig/allyesconfig.py b/Tools/kconfig/allyesconfig.py index e432c52ec0..a7398a5427 100644 --- a/Tools/kconfig/allyesconfig.py +++ b/Tools/kconfig/allyesconfig.py @@ -57,14 +57,47 @@ exception_list = [ ] exception_list_sitl = [ - 'DRIVERS_BAROMETER', # Fails I2C dependencies + 'DRIVERS_ADC', # Fails I2C dependencies 'COMMON_BAROMETERS', # Fails I2C dependencies + 'DRIVERS_BAROMETER', # Fails I2C dependencies + 'DRIVERS_BATT_SMBUS', # Fails I2C dependencies in SMBus library + 'COMMON_DIFFERENTIAL_PRESSURE', # Fails I2C dependencies + 'DRIVERS_DIFFERENTIAL_PRESSURE', # Fails I2C dependencies + 'COMMON_DISTANCE_SENSOR', # Fails I2C dependencies + 'DRIVERS_DISTANCE_SENSOR', # Fails I2C dependencies + 'COMMON_HYGROMETERS', # Fails I2C dependencies + 'DRIVERS_HYGROMETER', # Fails I2C dependencies + 'COMMON_IMU', # Fails I2C dependencies + 'DRIVERS_IMU', # Fails I2C dependencies + 'DRIVERS_IRLOCK', # Fails I2C dependencies + 'COMMON_LIGHT', # Fails I2C dependencies + 'DRIVERS_LIGHTS', # Fails I2C dependencies + 'DRIVERS_MAGNETOMETER', # Fails I2C dependencies + 'COMMON_MAGNETOMETER', # Fails I2C dependencies + 'DRIVERS_OPTICAL_FLOW', # Fails I2C dependencies + 'COMMON_OPTICAL_FLOW', # Fails I2C dependencies + 'COMMON_OSD', # Fails I2C dependencies + 'DRIVERS_OSD', # Fails I2C dependencies + 'DRIVERS_PCA9685', # Fails I2C dependencies + 'DRIVERS_POWER_MONITOR', # Fails I2C dependencies + 'DRIVERS_RPM', # Fails I2C dependencies + 'COMMON_RPM', # Fails I2C dependencies + 'DRIVERS_SMART_BATTERY', # Fails I2C dependencies in SMBus library + 'DRIVERS_TELEMETRY', # Fails I2C dependencies + 'COMMON_TELEMETRY', # Fails I2C dependencies + 'DRIVERS_TEMPERATURE', # Fails I2C dependencies + 'COMMON_UWB', # Fail in UWB_PORT_CFG + 'DRIVERS_UWB', # Fail in UWB_PORT_CFG + 'DRIVERS_HEATER', # GPIO config failure + 'DRIVERS_AUTERION_AUTOSTARTER', # Sitl doesn't provide a builtin lib + 'DRIVERS_CYPHAL', # Sitl doesn't provide a memalign function + 'DRIVERS_GPIO', # Sitl doesn't provide a mcp-common lib 'DRIVERS_ADC_BOARD_ADC', # Fails HW dependencies, I think this only works on NuttX 'DRIVERS_CAMERA_CAPTURE', # GPIO config failure + 'DRIVERS_SAFETY_BUTTON', # GPIO config failure + 'DRIVERS_TAP_ESC', # No nuttx/arch.h 'DRIVERS_DSHOT', # No Posix driver, I think this only works on NuttX 'DRIVERS_PWM_OUT', # No Posix driver, I think this only works on NuttX - 'COMMON', # Fails I2C dependencies - 'DRIVERS', # Fails I2C dependencies 'SYSTEMCMDS_REBOOT', # Sitl can't reboot 'MODULES_BATTERY_STATUS', # Sitl doesn't provide a power brick 'SYSTEMCMDS_SERIAL_PASSTHRU', # Not supported in SITL diff --git a/Tools/migrate_c_params.py b/Tools/migrate_c_params.py index 042bdfb543..5d4e7a8bb6 100755 --- a/Tools/migrate_c_params.py +++ b/Tools/migrate_c_params.py @@ -128,6 +128,9 @@ class SourceParser: # start waiting for the next part - long comment. if state == "wait-short-end": state = "wait-long" + elif state == "wait-long-end": + # Preserve paragraph breaks in long description + long_desc += "\n" else: m = self.re_comment_tag.match(comment_content) if m: @@ -208,8 +211,7 @@ class SourceParser: raise Exception('short description too long (150 max, is {:}, parameter: {:})'.format(len(short_desc), name)) param.fields["short_desc"] = self.re_remove_dots.sub('', short_desc) if long_desc is not None: - long_desc = self.re_remove_carriage_return.sub(' ', long_desc) - param.fields["long_desc"] = long_desc + param.fields["long_desc"] = long_desc.rstrip('\n') for tag in tags: if tag == "group": group = tags[tag] @@ -407,7 +409,15 @@ def generate_yaml(filename: str, groups: list[ParameterGroup]) -> str: g["definitions"][parameter.name] = p data["parameters"].append(g) - return yaml.dump(data, sort_keys=False) + # Use block scalar style for multi-line strings + class BlockStyleDumper(yaml.SafeDumper): + pass + def str_representer(dumper, data): + if '\n' in data: + return dumper.represent_scalar('tag:yaml.org,2002:str', data, style='|') + return dumper.represent_scalar('tag:yaml.org,2002:str', data) + BlockStyleDumper.add_representer(str, str_representer) + return yaml.dump(data, Dumper=BlockStyleDumper, sort_keys=False) def main(): diff --git a/Tools/models/sdp3x_pitot_model.py b/Tools/models/sdp3x_pitot_model.py deleted file mode 100644 index 864823d663..0000000000 --- a/Tools/models/sdp3x_pitot_model.py +++ /dev/null @@ -1,110 +0,0 @@ -""" -Copyright (c) 2017, Sensirion AG -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of Sensirion AG nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -""" - - - -# formula for metal pitot tube with round tip as here: https://drotek.com/shop/2986-large_default/sdp3x-airspeed-sensor-kit-sdp31.jpg -# and tubing as provided by px4/drotek (1.5 mm diameter) - - - -import numpy as np -import matplotlib.pyplot as plt - -P_cal=96600. #Pa -P_amb=96600. #dummy-value, use absolute pressure sensor!! - - -## differential pressure, sensor values in Pascal -dp_SDP33_raw=np.linspace(0,80,100) - - - - -dp_SDP33=dp_SDP33_raw*P_cal/P_amb - - -## total length tube in mm = length dynamic port+ length static port; compensation only valid for inner diameter of 1.5mm -l_tube=450 - -## densitiy air in kg/m3 -rho_air=1.29 - - -## flow through sensor -flow_SDP33=(300.805 - 300.878/(0.00344205*dp_SDP33**0.68698 + 1))*1.29/rho_air - - - -## additional dp through pitot tube -dp_Pitot=(0.0032*flow_SDP33**2 + 0.0123*flow_SDP33+1.)*1.29/rho_air - -## pressure drop through tube -dp_Tube=(flow_SDP33*0.674)/450*l_tube*rho_air/1.29 - -## speed at pitot-tube tip due to flow through sensor -dv=0.125*flow_SDP33 - -## sum of all pressure drops -dp_tot=dp_SDP33+dp_Tube+dp_Pitot - - -## computed airspeed without correction for inflow-speed at tip of pitot-tube -airspeed_uncorrected=np.sqrt(2*dp_tot/rho_air) - -## corrected airspeed -airspeed_corrected=airspeed_uncorrected+dv - - -## just to compare to value without compensation -airspeed_raw=np.sqrt(2*dp_SDP33/rho_air) - - -plt.figure() -plt.plot(dp_SDP33,airspeed_corrected) -plt.xlabel('differential pressure raw value [Pa]') -plt.ylabel('airspeed_corrected [m/s]') -plt.show() - - - -##plt.figure() -##plt.plot(dp_SDP33,airspeed_corrected/airspeed_raw) -##plt.xlabel('differential pressure raw value [Pa]') -##plt.ylabel('correction factor [-]') -##plt.show() -## -## -## -##plt.figure() -##plt.plot(airspeed_corrected,(airspeed_corrected-airspeed_raw)/airspeed_corrected) -##plt.xlabel('airspeed [m/s]') -##plt.ylabel('relative error [-]') -##plt.show() diff --git a/Tools/module_config/generate_actuators_metadata.py b/Tools/module_config/generate_actuators_metadata.py index 5d38ecf499..38471b6821 100755 --- a/Tools/module_config/generate_actuators_metadata.py +++ b/Tools/module_config/generate_actuators_metadata.py @@ -234,14 +234,14 @@ def get_actuator_output(yaml_config, output_functions, timer_config_file, verbos param_prefix = process_param_prefix(group['param_prefix']) standard_params = group.get('standard_params', {}) standard_params_array = [ - ( 'function', 'Function', 'FUNC', False ), - ( 'disarmed', 'Disarmed', 'DIS', False ), - ( 'min', 'Minimum', 'MIN', False ), - ( 'max', 'Maximum', 'MAX', False ), - ( 'center', 'Center\n(for Servos)', 'CENT', False ), - ( 'failsafe', 'Failsafe', 'FAIL', True ), + ( 'function', 'Function', 'FUNC', False, True ), + ( 'disarmed', 'Disarmed', 'DIS', False, True ), + ( 'min', 'Minimum', 'MIN', False, True ), + ( 'center', 'Center\n(for Servos)', 'CENT', False, False ), + ( 'max', 'Maximum', 'MAX', False, True ), + ( 'failsafe', 'Failsafe', 'FAIL', True, True ), ] - for key, label, param_suffix, advanced in standard_params_array: + for key, label, param_suffix, advanced, has_function in standard_params_array: show_if = None if key in standard_params and 'show_if' in standard_params[key]: show_if = standard_params[key]['show_if'] @@ -250,13 +250,12 @@ def get_actuator_output(yaml_config, output_functions, timer_config_file, verbos param = { 'label': label, 'name': param_prefix+'_'+param_suffix+'${i}', - 'function': key, } + if has_function: param['function'] = key if advanced: param['advanced'] = True if show_if: param['show-if'] = show_if per_channel_params.append(param) - param = { 'label': 'Rev Range\n(for Servos)', 'name': param_prefix+'_REV', diff --git a/Tools/module_config/generate_params.py b/Tools/module_config/generate_params.py index ecc29a4519..ea9e7d1ffc 100755 --- a/Tools/module_config/generate_params.py +++ b/Tools/module_config/generate_params.py @@ -108,7 +108,7 @@ def parse_yaml_parameters_config(yaml_config, ethernet_supported): tags = '@group {:}'.format(param_group) if param['type'] == 'enum': param_type = 'INT32' - for key in param['values']: + for key in sorted(param['values'], key=float): tags += '\n * @value {:} {:}'.format(key, param['values'][key]) elif param['type'] == 'bitmask': param_type = 'INT32' @@ -124,6 +124,9 @@ def parse_yaml_parameters_config(yaml_config, ethernet_supported): param_type = 'INT32' elif param['type'] == 'float': param_type = 'FLOAT' + if 'values' in param: + for key in sorted(param['values'], key=float): + tags += '\n * @value {:} {:}'.format(key, param['values'][key]) else: raise Exception("unknown param type {:}".format(param['type'])) @@ -312,11 +315,7 @@ When set to -1 (default), the value depends on the function (see {:}). if standard_params[key]['max'] >= 1<<16: raise Exception('maximum value for {:} expected <= {:} (got {:})'.format(key, 1<<16, standard_params[key]['max'])) - if key == 'failsafe': - standard_params[key]['default'] = -1 - standard_params[key]['min'] = -1 - - if key == 'center': + if key == 'failsafe' or key == 'center': standard_params[key]['default'] = -1 standard_params[key]['min'] = -1 diff --git a/Tools/msg/generate_msg_docs.py b/Tools/msg/generate_msg_docs.py index 0b30cba0c5..95ab3f9af6 100755 --- a/Tools/msg/generate_msg_docs.py +++ b/Tools/msg/generate_msg_docs.py @@ -17,10 +17,10 @@ VALID_FIELDS = { #Note, also have to add the message types as those can be field 'uint32' } -ALLOWED_UNITS = set(["m", "m/s", "m/s^2", "(m/s)^2", "deg", "deg/s", "rad", "rad/s", "rad^2", "rpm" ,"V", "A", "mA", "mAh", "W", "dBm", "h", "s", "ms", "us", "Ohm", "MB", "Kb/s", "degC","Pa","%","-"]) +ALLOWED_UNITS = set(["m", "m/s", "m/s^2", "(m/s)^2", "deg", "deg/s", "rad", "rad/s", "rad^2", "rpm" ,"V", "A", "mA", "mAh", "W", "Wh", "dBm", "h", "minutes", "s", "ms", "us", "Ohm", "MB", "Kb/s", "degC","Pa", "%", "norm", "-"]) invalid_units = set() -ALLOWED_FRAMES = set(["NED","Body"]) -ALLOWED_INVALID_VALUES = set(["NaN", "0"]) +ALLOWED_FRAMES = set(["NED", "Body", "FRD", "ENU"]) +ALLOWED_INVALID_VALUES = set(["NaN", "0", "-1"]) ALLOWED_CONSTANTS_NOT_IN_ENUM = set(["ORB_QUEUE_LENGTH","MESSAGE_VERSION"]) class Error: @@ -36,14 +36,14 @@ class Error: if 'trailing_whitespace' == self.type: - if self.issueString.strip(): + if self.issueString.strip(): print(f"NOTE: Line has trailing whitespace ({self.message}: {self.linenumber}): {self.issueString}") else: print(f"NOTE: Line has trailing whitespace ({self.message}: {self.linenumber})") elif 'leading_whitespace_field_or_constant' == self.type: - print(f"NOTE: Whitespace before field or constant ({self.message}: {self.linenumber}): {self.issueString}") + print(f"NOTE: Whitespace before field or constant ({self.message}: {self.linenumber}): {self.issueString}") elif 'field_or_constant_has_multiple_whitepsace' == self.type: - print(f"NOTE: Field/constant has more than one sequential whitespace character ({self.message}: {self.linenumber}): {self.issueString}") + print(f"NOTE: Field/constant has more than one sequential whitespace character ({self.message}: {self.linenumber}): {self.issueString}") elif 'empty_start_line' == self.type: print(f"NOTE: Empty line at start of file ({self.message}: {self.linenumber})") elif 'internal_comment' == self.type: @@ -191,7 +191,7 @@ class CommandParam: if not "unknown_frame" in self.parent.errors: self.parent.errors["unknown_frame"] = [] self.parent.errors["unknown_frame"].append(error) - """ + """ else: print(f"WARNING: Unhandled metadata in message comment: {item}") # TODO - report errors for different kinds of metadata @@ -202,9 +202,9 @@ class CommandParam: if item == "-": unit = "" - + if unit and unit not in self.units: - self.units.append(unit) + self.units.append(unit) if unit not in ALLOWED_UNITS: invalid_units.add(unit) @@ -221,7 +221,7 @@ class CommandParam: print(f" paramText: {self.paramText}\n unit: {self.units}\n enums: {self.enums}\n lineNumber: {self.lineNumber}\n range: {self.range}\n minValue: {self.minValue}\n maxValue: {self.maxValue}\n invalidValue: {self.invalidValue}\n frameValue: {self.frameValue}\n parent: {self.parent}\n ") - + class CommandConstant: """ Represents a constant that is a command definition. @@ -252,9 +252,9 @@ class CommandConstant: if not self.comment: # This is an bug for a command #print(f"Debug WARNING: NO COMMENT in CommandConstant: {self.name}") ## TODO make into ERROR return - + # Parse command comment to get the description and parameters. - # print(f"Debug CommandConstant: {self.comment}") + # print(f"Debug CommandConstant: {self.comment}") if not "|" in self.comment: # This is an error for a command constant error = Error("command_no_params_pipes", self.parent.filename, self.line_number, self.comment, self.name) @@ -263,7 +263,7 @@ class CommandConstant: self.parent.errors["command_no_params_pipes"] = [] self.parent.errors["command_no_params_pipes"].append(error) return - + # Split on pipes commandSplit = self.comment.split("|") if len(commandSplit) < 9: @@ -316,9 +316,11 @@ Param | Units | Range/Enum | Description if val.minValue or val.maxValue: rangeVal = f"[{val.minValue if val.minValue else '-'} : {val.maxValue if val.maxValue else '-' }]" - output+=f"{i} | {", ".join(val.units)}|{', '.join(f"[{e}](#{e})" for e in val.enums)}{rangeVal} | {val.description}\n" + units_str = ", ".join(val.units) + enums_str = ', '.join("[{}](#{})".format(e, e) for e in val.enums) + output+=f"{i} | {units_str}|{enums_str}{rangeVal} | {val.description}\n" else: - output+=f"{i} | | | ?\n" + output+=f"{i} | | | ?\n" output+=f"\n" return output @@ -419,7 +421,7 @@ class MessageField: class UORBMessage: """ Represents a whole message, including fields, enums, commands, constants. - The parser function delegates the parsing of each part of the message to + The parser function delegates the parsing of each part of the message to more appropriate classes, once the specific type of line has been identified. """ @@ -511,11 +513,11 @@ pageClass: is-wide-page markdown += "--- | --- | --- |---\n" for name, command in self.commandConstants.items(): description = f" {command.comment} " if enum.comment else " " - markdown += f' {name} | `{command.type}` | {command.value} |{description}\n' + markdown += f' {name} | `{command.type}` | {command.value} |{description}\n' """ for commandConstant in self.commandConstants.values(): #print(commandConstant) - markdown += commandConstant.markdown_out() + markdown += commandConstant.markdown_out() # Generate enum docs if len(self.enums) > 0: @@ -529,7 +531,7 @@ pageClass: is-wide-page for enumValueName, enumValue in enum.enumValues.items(): description = f" {enumValue.comment} " if enumValue.comment else " " - markdown += f' {enumValueName} | `{enumValue.type}` | {enumValue.value} |{description}\n' + markdown += f' {enumValueName} | `{enumValue.type}` | {enumValue.value} |{description}\n' # Generate table for constants docs if len(self.constantFields) > 0: @@ -538,7 +540,7 @@ pageClass: is-wide-page markdown += "--- | --- | --- |---\n" for name, enum in self.constantFields.items(): description = f" {enum.comment} " if enum.comment else " " - markdown += f' {name} | `{enum.type}` | {enum.value} |{description}\n' + markdown += f' {name} | `{enum.type}` | {enum.value} |{description}\n' @@ -635,8 +637,8 @@ pageClass: is-wide-page temp = fieldOrConstant.split("=") value = temp[-1] typeAndName = temp[0].split(" ") - type = typeAndName[0] - name = typeAndName[1] + type = typeAndName[0].strip() + name = typeAndName[1].strip() if name.startswith("VEHICLE_CMD_") and parentMessage.name == 'VehicleCommand': #it's a command. #print(f"DEBUG: startswith VEHICLE_CMD_ {name}") commandConstant = CommandConstant(name, type, value, comment, line_number, parentMessage) @@ -708,7 +710,7 @@ pageClass: is-wide-page if stripped_line.startswith("#"): # Its an internal comment stripped_line=stripped_line[1:].strip() - + if stripped_line: #print(f"{self.filename}: Internal comment: [{line_number}]\n {line}") error = Error("internal_comment", self.filename, line_number, line) @@ -723,7 +725,7 @@ pageClass: is-wide-page self.errors["internal_comment_empty"].append(error) #pass # Empty comment continue - + # Must be a field or a comment. self.handleField(line, line_number, parentMessage=self) @@ -833,11 +835,9 @@ def generate_dds_yaml_doc(allMessageFiles, output_file = 'dds_topics.md'): for message in data["subscriptions"]: all_message_types.add(message['type'].split("::")[-1]) all_topics.add(message['topic'].split('/')[-1]) - if data["subscriptions_multi"]: # There is none now - dds_markdown += "None\n" - for message in data["subscriptions_multi"]: - all_message_types.add(message['type'].split("::")[-1]) - all_topics.add(message['topic'].split('/')[-1]) + for message in (data.get("subscriptions_multi") or []): + all_message_types.add(message['type'].split("::")[-1]) + all_topics.add(message['topic'].split('/')[-1]) for message in allMessageFiles: all_messages_in_source.add(message.split('/')[-1].split('.')[0]) messagesNotExported = all_messages_in_source - all_message_types @@ -874,13 +874,17 @@ Topic | Type| Rate Limit dds_markdown += "\n## Subscriptions Multi\n\n" - if not data["subscriptions_multi"]: # There is none now + subscriptions_multi = data.get("subscriptions_multi") or [] + if not subscriptions_multi: dds_markdown += "None\n" else: - print("Warning - we now have subscription_multi data - check format") - dds_markdown += "Topic | Type\n--- | ---\n" - for message in data["subscriptions_multi"]: - dds_markdown += f"{message['topic']} | {message['type']}\n" + dds_markdown += "Topic | Type | Route Field | Max Instances\n--- | --- | --- | ---\n" + for message in subscriptions_multi: + type = message['type'] + px4Type = type.split("::")[-1] + route_field = f"`{message['route_field']}`" if 'route_field' in message else "-" + max_instances = message.get('max_instances', '-') + dds_markdown += f"{message['topic']} | [{type}](../msg_docs/{px4Type}.md) | {route_field} | {max_instances}\n" if messagesNotExported: # Print the topics that are not exported to DDS @@ -944,9 +948,6 @@ if __name__ == "__main__": for msg_file in msg_files: # Add messages to set of allowed types (compound types) - #msg_type = msg_file.rsplit('/')[-1] - #msg_type = msg_type.rsplit('\\')[-1] - #msg_type = msg_type.rsplit('.')[0] msg_name = os.path.splitext(os.path.basename(msg_file))[0] msgTypes.add(msg_name) diff --git a/Tools/packaging/Dockerfile.gazebo b/Tools/packaging/Dockerfile.gazebo new file mode 100644 index 0000000000..4b07098b04 --- /dev/null +++ b/Tools/packaging/Dockerfile.gazebo @@ -0,0 +1,93 @@ +# 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 +# +# Persist flight logs on the host (ulog files): +# mkdir -p ./px4-logs +# docker run --rm -it --network host \ +# -v $(pwd)/px4-logs:/root/.local/share/px4/rootfs/log \ +# px4io/px4-sitl-gazebo:v1.17.0 + +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 + +# Configure the OSRF Gazebo apt repo so Gazebo Harmonic (a Depends: of the +# px4-gazebo .deb) resolves from it in the install step below. +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 + +# Install px4-gazebo via apt so its Depends (Gazebo Harmonic, OpenCV, GStreamer +# core libs, gstreamer plugin packages) are resolved automatically. The binary +# is stripped after install to trim image size (~a few MB). +COPY px4-gazebo_*.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 \ + /tmp/px4-gazebo_*.deb \ + binutils \ + && strip /opt/px4-gazebo/bin/px4 \ + && apt-get purge -y binutils \ + && apt-get autoremove -y \ + && rm -f /tmp/px4-gazebo_*.deb \ + && 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 [] diff --git a/Tools/packaging/Dockerfile.sih b/Tools/packaging/Dockerfile.sih new file mode 100644 index 0000000000..6067158fb0 --- /dev/null +++ b/Tools/packaging/Dockerfile.sih @@ -0,0 +1,57 @@ +# syntax=docker/dockerfile:1 +# PX4 SITL SIH runtime image +# Minimal container that runs PX4 with the SIH physics engine (no Gazebo). +# +# Build: +# make px4_sitl_sih && cd build/px4_sitl_sih && cpack -G DEB && cd ../.. +# docker build -f Tools/packaging/Dockerfile.sih -t px4io/px4-sitl:v1.17.0 build/px4_sitl_sih/ +# +# Run (Linux): +# docker run --rm -it --network host px4io/px4-sitl:v1.17.0 +# +# Run (macOS / Windows): +# docker run --rm -it -p 14550:14550/udp -p 14540:14540/udp -p 19410:19410/udp -p 8888:8888/udp px4io/px4-sitl:v1.17.0 +# +# Persist flight logs on the host (ulog files): +# mkdir -p ./px4-logs +# docker run --rm -it --network host \ +# -v $(pwd)/px4-logs:/root/.local/share/px4/rootfs/log \ +# px4io/px4-sitl:v1.17.0 + +FROM ubuntu:24.04 +LABEL maintainer="PX4 Development Team" +LABEL description="PX4 SITL with SIH physics (no simulator dependencies)" + +ENV DEBIAN_FRONTEND=noninteractive + +# Install px4 via apt so Depends: are resolved automatically. The binary is +# stripped after install to trim image size (~a few MB). +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 \ + /tmp/px4_*.deb \ + bc \ + binutils \ + && strip /opt/px4/bin/px4 \ + && apt-get purge -y binutils \ + && apt-get autoremove -y \ + && rm -f /tmp/px4_*.deb \ + && 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 [] diff --git a/Tools/packaging/postinst b/Tools/packaging/postinst new file mode 100755 index 0000000000..2de9347bcf --- /dev/null +++ b/Tools/packaging/postinst @@ -0,0 +1,4 @@ +#!/bin/sh +set -e +ln -sf /opt/px4-gazebo/bin/px4-gazebo /usr/bin/px4-gazebo +exit 0 diff --git a/Tools/packaging/postrm b/Tools/packaging/postrm new file mode 100755 index 0000000000..1c8227e1c9 --- /dev/null +++ b/Tools/packaging/postrm @@ -0,0 +1,6 @@ +#!/bin/sh +set -e +if [ "$1" = "remove" ] || [ "$1" = "purge" ]; then + rm -f /usr/bin/px4-gazebo +fi +exit 0 diff --git a/Tools/packaging/px4-entrypoint.sh b/Tools/packaging/px4-entrypoint.sh new file mode 100644 index 0000000000..a1d9b6c1f8 --- /dev/null +++ b/Tools/packaging/px4-entrypoint.sh @@ -0,0 +1,35 @@ +#!/bin/sh +# Docker entrypoint for PX4 SITL containers. +# +# On Docker Desktop (macOS/Windows), host.docker.internal resolves to the +# host machine. We detect this and configure MAVLink + DDS to send to the +# host IP instead of localhost (which stays inside the container VM). +# +# On Linux with --network host, host.docker.internal does not resolve and +# PX4 defaults work without modification. + +set -e + +# Detect install prefix (SIH uses /opt/px4, Gazebo uses /opt/px4-gazebo) +if [ -d /opt/px4-gazebo ]; then + PX4_PREFIX=/opt/px4-gazebo +else + PX4_PREFIX=/opt/px4 +fi + +# Resolve host.docker.internal to an IPv4 address. mavlink and uxrce_dds_client +# only parse IPv4, and on Docker Desktop for Windows the default `getent hosts` +# lookup can return an IPv6 ULA first, which both modules then reject. +DOCKER_HOST_IP=$(getent ahostsv4 host.docker.internal 2>/dev/null | awk '/STREAM/ {print $1; exit}') + +if [ -n "$DOCKER_HOST_IP" ]; then + # MAVLink: replace default target (127.0.0.1) with the Docker host IP + sed -i "s/mavlink start -x -u/mavlink start -x -t $DOCKER_HOST_IP -u/g" \ + "$PX4_PREFIX/etc/init.d-posix/px4-rc.mavlink" + + # DDS: point uXRCE-DDS client at the host + sed -i "s|uxrce_dds_client start -t udp|uxrce_dds_client start -t udp -h $DOCKER_HOST_IP|" \ + "$PX4_PREFIX/etc/init.d-posix/rcS" +fi + +exec "$PX4_PREFIX/bin/px4" "$@" diff --git a/Tools/packaging/px4-gazebo.sh b/Tools/packaging/px4-gazebo.sh new file mode 100644 index 0000000000..7f26aaafed --- /dev/null +++ b/Tools/packaging/px4-gazebo.sh @@ -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}" "$@" diff --git a/Tools/packaging/sih/postinst b/Tools/packaging/sih/postinst new file mode 100755 index 0000000000..23ed21fbdc --- /dev/null +++ b/Tools/packaging/sih/postinst @@ -0,0 +1,4 @@ +#!/bin/sh +set -e +ln -sf /opt/px4/bin/px4 /usr/bin/px4 +exit 0 diff --git a/Tools/packaging/sih/postrm b/Tools/packaging/sih/postrm new file mode 100755 index 0000000000..ecde8ccce7 --- /dev/null +++ b/Tools/packaging/sih/postrm @@ -0,0 +1,6 @@ +#!/bin/sh +set -e +if [ "$1" = "remove" ] || [ "$1" = "purge" ]; then + rm -f /usr/bin/px4 +fi +exit 0 diff --git a/Tools/packaging/test_sih_mission.py b/Tools/packaging/test_sih_mission.py new file mode 100644 index 0000000000..deeee6df84 --- /dev/null +++ b/Tools/packaging/test_sih_mission.py @@ -0,0 +1,144 @@ +#!/usr/bin/env python3 +""" +MAVSDK mission test for PX4 SIH SITL in Docker. + +Takes off to 100m, flies a short 4-waypoint box mission, then lands. +Validates that the SIH Docker container works end-to-end with MAVSDK. + +Prerequisites: + - Docker container running: + docker run --rm --network host px4io/px4-sitl:v1.17.0-alpha1 + - pip install mavsdk + - mavsim-viewer running (optional): + /path/to/mavsim-viewer -n 1 + +Usage: + python3 Tools/packaging/test_sih_mission.py + python3 Tools/packaging/test_sih_mission.py --speed 10 # faster-than-realtime +""" + +import asyncio +import argparse +import sys +import time + +from mavsdk import System +from mavsdk.mission import MissionItem, MissionPlan + + +async def run_mission(speed_factor: int = 1): + drone = System() + print(f"Connecting to drone on udp://:14540 ...") + await drone.connect(system_address="udp://:14540") + + print("Waiting for drone to connect...") + async for state in drone.core.connection_state(): + if state.is_connected: + print(f"Connected (UUID: {state.uuid if hasattr(state, 'uuid') else 'N/A'})") + break + + print("Waiting for global position estimate...") + async for health in drone.telemetry.health(): + if health.is_global_position_ok and health.is_home_position_ok: + print("Global position OK") + break + + # Get home position for reference + async for pos in drone.telemetry.position(): + home_lat = pos.latitude_deg + home_lon = pos.longitude_deg + print(f"Home position: {home_lat:.6f}, {home_lon:.6f}") + break + + # Build a small box mission at 100m AGL + # ~100m offset in each direction + offset = 0.001 # roughly 111m at equator + mission_items = [ + MissionItem( + home_lat + offset, home_lon, + 100, 10, True, float('nan'), float('nan'), + MissionItem.CameraAction.NONE, + float('nan'), float('nan'), float('nan'), + float('nan'), float('nan'), + MissionItem.VehicleAction.NONE, + ), + MissionItem( + home_lat + offset, home_lon + offset, + 100, 10, True, float('nan'), float('nan'), + MissionItem.CameraAction.NONE, + float('nan'), float('nan'), float('nan'), + float('nan'), float('nan'), + MissionItem.VehicleAction.NONE, + ), + MissionItem( + home_lat, home_lon + offset, + 100, 10, True, float('nan'), float('nan'), + MissionItem.CameraAction.NONE, + float('nan'), float('nan'), float('nan'), + float('nan'), float('nan'), + MissionItem.VehicleAction.NONE, + ), + MissionItem( + home_lat, home_lon, + 100, 10, True, float('nan'), float('nan'), + MissionItem.CameraAction.NONE, + float('nan'), float('nan'), float('nan'), + float('nan'), float('nan'), + MissionItem.VehicleAction.NONE, + ), + ] + + mission_plan = MissionPlan(mission_items) + + print(f"Uploading mission ({len(mission_items)} waypoints, 100m AGL)...") + await drone.mission.upload_mission(mission_plan) + print("Mission uploaded") + + print("Arming...") + await drone.action.arm() + print("Armed") + + t0 = time.time() + print("Starting mission...") + await drone.mission.start_mission() + + # Monitor mission progress + async for progress in drone.mission.mission_progress(): + elapsed = time.time() - t0 + print(f" [{elapsed:6.1f}s] Waypoint {progress.current}/{progress.total}") + if progress.current == progress.total: + print(f"Mission complete in {elapsed:.1f}s (speed factor: {speed_factor}x)") + break + + print("Returning to launch...") + await drone.action.return_to_launch() + + # Wait for landing + async for in_air in drone.telemetry.in_air(): + if not in_air: + print("Landed") + break + + print("Disarming...") + await drone.action.disarm() + print("Test PASSED") + + +def main(): + parser = argparse.ArgumentParser(description="PX4 SIH Docker mission test") + parser.add_argument("--speed", type=int, default=1, + help="PX4_SIM_SPEED_FACTOR (must match container)") + args = parser.parse_args() + + try: + asyncio.run(run_mission(args.speed)) + except KeyboardInterrupt: + print("\nInterrupted") + sys.exit(1) + except Exception as e: + print(f"Test FAILED: {e}") + sys.exit(1) + + +if __name__ == "__main__": + main() diff --git a/Tools/px4_uploader.py b/Tools/px4_uploader.py index 3b54950747..10814b2c26 100755 --- a/Tools/px4_uploader.py +++ b/Tools/px4_uploader.py @@ -198,7 +198,6 @@ class BootloaderCommand(IntEnum): GET_OTP = 0x2A # rev4+, get a word from OTP area GET_SN = 0x2B # rev4+, get a word from SN area GET_CHIP = 0x2C # rev5+, get chip version - SET_BOOT_DELAY = 0x2D # rev5+, set boot delay GET_CHIP_DES = 0x2E # rev5+, get chip description in ASCII GET_VERSION = 0x2F # rev5+, get bootloader version in ASCII REBOOT = 0x30 @@ -1148,20 +1147,6 @@ class BootloaderProtocol: else: self.verify_read(firmware, progress_callback) - def set_boot_delay(self, delay_ms: int) -> None: - """Set boot delay in flash (v5+). - - Args: - delay_ms: Boot delay in milliseconds - """ - if self.bl_rev < 5: - logger.warning("Boot delay requires bootloader v5+") - return - - self._send_command(BootloaderCommand.SET_BOOT_DELAY, struct.pack("b", delay_ms)) - self._get_sync() - logger.info(f"Boot delay set to {delay_ms}ms") - def reboot(self) -> None: """Reboot into the application. @@ -1569,7 +1554,6 @@ class UploaderConfig: baud_flightstack: list[int] = field(default_factory=lambda: [57600]) force: bool = False force_erase: bool = False - boot_delay: Optional[int] = None use_protocol_splitter: bool = False retry_count: int = 3 windowed: bool = False @@ -1924,10 +1908,6 @@ class Uploader: # Verify protocol.verify(firmware, progress_callback=progress.update_verify) - # Set boot delay if requested - if self.config.boot_delay is not None: - protocol.set_boot_delay(self.config.boot_delay) - # Reboot and show summary protocol.reboot() progress.finish() @@ -2009,9 +1989,6 @@ Examples: action="store_true", help="Force full chip erase (v6+ bootloader)", ) - parser.add_argument( - "--boot-delay", type=int, help="Boot delay in milliseconds to store in flash" - ) parser.add_argument( "--use-protocol-splitter-format", action="store_true", @@ -2068,7 +2045,6 @@ Examples: baud_flightstack=baud_flightstack, force=args.force, force_erase=args.force_erase, - boot_delay=args.boot_delay, use_protocol_splitter=args.use_protocol_splitter_format, windowed=args.windowed, noninteractive=args.noninteractive or args.noninteractive_json, diff --git a/Tools/px_mkfw.py b/Tools/px_mkfw.py index f31d2a8972..8ed8d4aa19 100755 --- a/Tools/px_mkfw.py +++ b/Tools/px_mkfw.py @@ -42,6 +42,7 @@ import argparse import json import base64 +import os import zlib import time import subprocess @@ -99,14 +100,13 @@ if args.summary != None: if args.description != None: desc['description'] = str(args.description) if args.git_identity != None: - cmd = "git --git-dir '{:}/.git' describe --exclude ext/* --always --tags".format(args.git_identity) - p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE).stdout - desc['git_identity'] = p.read().strip().decode('utf-8') - p.close() - cmd = "git --git-dir '{:}/.git' rev-parse --verify HEAD".format(args.git_identity) - p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE).stdout - desc['git_hash'] = p.read().strip().decode('utf-8') - p.close() + git_dir = os.path.join(args.git_identity, '.git') + p = subprocess.run(["git", "--git-dir", git_dir, "describe", "--exclude", "ext/*", "--always", "--tags"], + stdout=subprocess.PIPE, text=True) + desc['git_identity'] = p.stdout.strip() + p = subprocess.run(["git", "--git-dir", git_dir, "rev-parse", "--verify", "HEAD"], + stdout=subprocess.PIPE, text=True) + desc['git_hash'] = p.stdout.strip() if args.parameter_xml != None: f = open(args.parameter_xml, "rb") bytes = f.read() diff --git a/Tools/run-shellcheck.sh b/Tools/run-shellcheck.sh index 5c745bad7a..bdd78f28d0 100755 --- a/Tools/run-shellcheck.sh +++ b/Tools/run-shellcheck.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Script to run ShellCheck (a static analysis tool for shell scripts) over a # script directory diff --git a/Tools/setup/docker-entrypoint.sh b/Tools/setup/docker-entrypoint.sh index 69101c5833..5ffe214569 100755 --- a/Tools/setup/docker-entrypoint.sh +++ b/Tools/setup/docker-entrypoint.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash GREEN='\033[0;32m' NO_COLOR='\033[0m' # No Color diff --git a/Tools/setup/macos.sh b/Tools/setup/macos.sh index 8218b4e9ab..2d2326d4ea 100755 --- a/Tools/setup/macos.sh +++ b/Tools/setup/macos.sh @@ -6,11 +6,11 @@ ## Installs: ## - Common dependencies and tools for building PX4 ## - Cross compilers for building hardware targets using NuttX -## - Can also install the default simulation provided by the px4-sim homebrew -## Formula +## - With --sim-tools: Gazebo Harmonic and jMAVSim simulation stack ## -## For more information regarding the Homebrew Formulas see: -## https://github.com/PX4/homebrew-px4/ +## Homebrew 4.5+ no longer auto-resolves cross-tap dependencies, so +## every tap and package is listed explicitly here rather than hidden +## behind meta-formulae. See PX4/homebrew-px4#104 for background. ## # script directory @@ -40,45 +40,110 @@ then /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" fi -# Install px4-dev formula +# Required taps. Homebrew 4.5+ no longer auto-resolves cross-tap +# dependencies, so every tap that a package lives in must be added +# explicitly here before `brew install`. +# +# - osx-cross/arm: arm-gcc-bin@13 (ARM cross-compiler) +# - PX4/px4: fastdds, genromfs, kconfig-frontends (PX4-specific) +brew tap osx-cross/arm +brew tap PX4/px4 + +# Package list. This replaces the px4-dev meta-formula, which is kept +# as a deprecated no-op upstream. See PX4/homebrew-px4 for history. +PX4_BREW_PACKAGES=( + ant + astyle + bash-completion + ccache + cmake + fastdds + genromfs + kconfig-frontends + ncurses + ninja + osx-cross/arm/arm-gcc-bin@13 + python + python-tk +) + if [[ $REINSTALL_FORMULAS == "--reinstall" ]]; then - echo "[macos.sh] Re-installing dependencies (homebrew px4-dev)" - - # confirm Homebrew installed correctly + echo "[macos.sh] Re-installing PX4 toolchain dependencies" brew doctor - - brew tap osx-cross/arm - brew tap PX4/px4 - - brew reinstall px4-dev - brew link --overwrite --force arm-gcc-bin@13 + brew reinstall "${PX4_BREW_PACKAGES[@]}" else - if brew ls --versions px4-dev > /dev/null; then - echo "[macos.sh] px4-dev already installed" - else - echo "[macos.sh] Installing general dependencies (homebrew px4-dev)" - - brew tap osx-cross/arm - brew tap PX4/px4 - - brew install px4-dev - brew link --overwrite --force arm-gcc-bin@13 - fi + echo "[macos.sh] Installing PX4 toolchain dependencies" + brew install "${PX4_BREW_PACKAGES[@]}" fi +brew link --overwrite --force arm-gcc-bin@13 + # Python dependencies echo "[macos.sh] Installing Python3 dependencies" + +# Resolve to git repo root based on script location (handles submodules and subdirectory invocation) +ROOT_DIR="$(git -C "$DIR" rev-parse --show-toplevel 2>/dev/null || echo "$DIR")" +VENV_DIR="$ROOT_DIR/.venv" + +# Create virtual environment if it doesn't exist +if [ ! -d "$VENV_DIR" ]; then + echo "[macos.sh] Creating Python virtual environment at $VENV_DIR" + python3 -m venv "$VENV_DIR" +fi + # We need to have future to install pymavlink later. -python3 -m pip install future -python3 -m pip install --user -r ${DIR}/requirements.txt +"$VENV_DIR/bin/pip" install future +"$VENV_DIR/bin/pip" install -r "${DIR}/requirements.txt" # Optional, but recommended additional simulation tools: if [[ $INSTALL_SIM == "--sim-tools" ]]; then - if ! brew ls --versions px4-sim > /dev/null; then - brew install px4-sim - elif [[ $REINSTALL_FORMULAS == "--reinstall" ]]; then - brew reinstall px4-sim + # Simulation packages. This replaces the px4-sim / px4-sim-gazebo + # meta-formulae, which declared cross-tap dependencies that + # Homebrew 4.5+ no longer auto-resolves. Same migration pattern as + # the toolchain block above. See PX4/homebrew-px4#104 for the + # px4-dev precedent. + # + # osrf/simulation: gz-harmonic (Gazebo Harmonic meta-formula) + brew tap osrf/simulation + + PX4_SIM_BREW_PACKAGES=( + exiftool + glog + graphviz + gstreamer + opencv + osrf/simulation/gz-harmonic + protobuf + ) + + if [[ $REINSTALL_FORMULAS == "--reinstall" ]]; then + echo "[macos.sh] Re-installing PX4 simulation dependencies" + brew reinstall "${PX4_SIM_BREW_PACKAGES[@]}" + else + echo "[macos.sh] Installing PX4 simulation dependencies" + brew install "${PX4_SIM_BREW_PACKAGES[@]}" + fi + + # XQuartz is required for Gazebo GUI display on macOS. + if ! brew list --cask xquartz &> /dev/null; then + echo "[macos.sh] Installing XQuartz (required for Gazebo display)" + brew install --cask xquartz + fi + + # jMAVSim requires a JDK (Java 17 LTS recommended) + if ! brew ls --versions openjdk@17 > /dev/null; then + echo "[macos.sh] Installing OpenJDK 17 (required for jMAVSim)" + brew install openjdk@17 + sudo ln -sfn $(brew --prefix openjdk@17)/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-17.jdk fi fi +echo "" echo "[macos.sh] All set! The PX4 Autopilot toolchain was installed." +echo "" +echo "Python dependencies were installed into a virtual environment at:" +echo " $VENV_DIR" +echo "" +echo "Activate it before building (run in each new terminal session):" +echo " source $VENV_DIR/bin/activate" +echo "" diff --git a/Tools/setup/requirements.txt b/Tools/setup/requirements.txt index b9d83da852..1725da87ab 100644 --- a/Tools/setup/requirements.txt +++ b/Tools/setup/requirements.txt @@ -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 diff --git a/Tools/setup/ubuntu.sh b/Tools/setup/ubuntu.sh index f84db9a603..842eb57124 100755 --- a/Tools/setup/ubuntu.sh +++ b/Tools/setup/ubuntu.sh @@ -196,6 +196,11 @@ if [[ $INSTALL_NUTTX == "true" ]]; then fi fi +if [[ "${UBUNTU_RELEASE}" == "25.10" ]]; then + echo "[ubuntu.sh] Gazebo binaries are not available for 25.10, skipping installation" + INSTALL_SIM="false" +fi + # Simulation tools if [[ $INSTALL_SIM == "true" ]]; then diff --git a/Tools/simulation/gazebo-classic/setup_gazebo.bash b/Tools/simulation/gazebo-classic/setup_gazebo.bash index 7829c929c6..2be4e42fbf 100755 --- a/Tools/simulation/gazebo-classic/setup_gazebo.bash +++ b/Tools/simulation/gazebo-classic/setup_gazebo.bash @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # # Setup environment to make PX4 visible to Gazebo. # diff --git a/Tools/simulation/gazebo-classic/sitl_gazebo-classic b/Tools/simulation/gazebo-classic/sitl_gazebo-classic index 5b6966ed57..f835e077d0 160000 --- a/Tools/simulation/gazebo-classic/sitl_gazebo-classic +++ b/Tools/simulation/gazebo-classic/sitl_gazebo-classic @@ -1 +1 @@ -Subproject commit 5b6966ed572a02e8273f446acb504a45a841ca53 +Subproject commit f835e077d06eaf09a57d5152fcfb85244b53b77a diff --git a/Tools/simulation/gazebo-classic/sitl_multiple_run.sh b/Tools/simulation/gazebo-classic/sitl_multiple_run.sh index 114003163a..3f3ff6f5d8 100755 --- a/Tools/simulation/gazebo-classic/sitl_multiple_run.sh +++ b/Tools/simulation/gazebo-classic/sitl_multiple_run.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # run multiple instances of the 'px4' binary, with the gazebo SITL simulation # It assumes px4 is already built, with 'make px4_sitl_default sitl_gazebo-classic' diff --git a/Tools/simulation/sitl_multiple_run.sh b/Tools/simulation/sitl_multiple_run.sh index 6b95de44cf..39554a622d 100755 --- a/Tools/simulation/sitl_multiple_run.sh +++ b/Tools/simulation/sitl_multiple_run.sh @@ -1,25 +1,28 @@ -#!/bin/bash -# run multiple instances of the 'px4' binary, but w/o starting the simulator. -# It assumes px4 is already built, with 'make px4_sitl_default' +#!/usr/bin/env bash +# Run multiple instances of the 'px4' binary, without starting an external simulator. +# It assumes px4 is already built with the specified build target. +# +# Usage: ./Tools/simulation/sitl_multiple_run.sh [num_instances] [model] [build_target] +# Examples: +# ./Tools/simulation/sitl_multiple_run.sh 3 sihsim_quadx px4_sitl_sih +# ./Tools/simulation/sitl_multiple_run.sh 2 gazebo-classic_iris px4_sitl_default +# ./Tools/simulation/sitl_multiple_run.sh # defaults: 2 instances, gazebo-classic_iris, px4_sitl_default -# The simulator is expected to send to TCP port 4560+i for i in [0, N-1] -# For example jmavsim can be run like this: -#./Tools/simulation/jmavsim/jmavsim_run.sh -p 4561 -l - -sitl_num=2 -[ -n "$1" ] && sitl_num="$1" +sitl_num=${1:-2} +sim_model=${2:-gazebo-classic_iris} +build_target=${3:-px4_sitl_default} SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" src_path="$SCRIPT_DIR/../../" -build_path=${src_path}/build/px4_sitl_default +build_path=${src_path}/build/${build_target} echo "killing running instances" pkill -x px4 || true sleep 1 -export PX4_SIM_MODEL=gazebo-classic_iris +export PX4_SIM_MODEL=${sim_model} n=0 while [ $n -lt $sitl_num ]; do diff --git a/Tools/stack_usage/avstack.pl b/Tools/stack_usage/avstack.pl deleted file mode 100755 index 5af499b145..0000000000 --- a/Tools/stack_usage/avstack.pl +++ /dev/null @@ -1,251 +0,0 @@ -#!/usr/bin/perl -w -# avstack.pl: AVR stack checker -# Copyright (C) 2013 Daniel Beer -# -# Permission to use, copy, modify, and/or distribute this software for -# any purpose with or without fee is hereby granted, provided that the -# above copyright notice and this permission notice appear in all -# copies. -# -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL -# WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED -# WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -# AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL -# DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -# PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Usage -# ----- -# -# This script requires that you compile your code with -fstack-usage. -# This results in GCC generating a .su file for each .o file. Once you -# have these, do: -# -# ./avstack.pl -# -# This will disassemble .o files to construct a call graph, and read -# frame size information from .su. The call graph is traced to find, for -# each function: -# -# - Call height: the maximum call height of any callee, plus 1 -# (defined to be 1 for any function which has no callees). -# -# - Inherited frame: the maximum *inherited* frame of any callee, plus -# the GCC-calculated frame size of the function in question. -# -# Using these two pieces of information, we calculate a cost (estimated -# peak stack usage) for calling the function. Functions are then listed -# on stdout in decreasing order of cost. -# -# Functions which are recursive are marked with an 'R' to the left of -# them. Their cost is calculated for a single level of recursion. -# -# The peak stack usage of your entire program can usually be estimated -# as the stack cost of "main", plus the maximum stack cost of any -# interrupt handler which might execute. - -use strict; - -# Configuration: set these as appropriate for your architecture/project. - -my $objdump = "arm-none-eabi-objdump"; -my $call_cost = 4; - -# First, we need to read all object and corresponding .su files. We're -# gathering a mapping of functions to callees and functions to frame -# sizes. We're just parsing at this stage -- callee name resolution -# comes later. - -my %frame_size; # "func@file" -> size -my %call_graph; # "func@file" -> {callees} -my %addresses; # "addr@file" -> "func@file" - -my %global_name; # "func" -> "func@file" -my %ambiguous; # "func" -> 1 - -foreach (@ARGV) { - # Disassemble this object file to obtain a callees. Sources in the - # call graph are named "func@file". Targets in the call graph are - # named either "offset@file" or "funcname". We also keep a list of - # the addresses and names of each function we encounter. - my $objfile = $_; - my $source; - - open(DISASSEMBLY, "$objdump -dr $objfile|") || - die "Can't disassemble $objfile"; - while () { - chomp; - - if (/^([0-9a-fA-F]+) <(.*)>:/) { - my $a = $1; - my $name = $2; - - $source = "$name\@$objfile"; - $call_graph{$source} = {}; - $ambiguous{$name} = 1 if defined($global_name{$name}); - $global_name{$name} = "$name\@$objfile"; - - $a =~ s/^0*//; - $addresses{"$a\@$objfile"} = "$name\@$objfile"; - } - - if (/: R_[A-Za-z0-9_]+_CALL[ \t]+(.*)/) { - my $t = $1; - - if ($t eq ".text") { - $t = "\@$objfile"; - } elsif ($t =~ /^\.text\+0x(.*)$/) { - $t = "$1\@$objfile"; - } - - $call_graph{$source}->{$t} = 1; - } - } - close(DISASSEMBLY); - - # Extract frame sizes from the corresponding .su file. - if ($objfile =~ /^(.*).obj$/) { - my $sufile = "$1.su"; - - open(SUFILE, "<$sufile") || die "Can't open $sufile"; - while () { - $frame_size{"$1\@$objfile"} = $2 + $call_cost - if /^.*:([^\t ]+)[ \t]+([0-9]+)/; - } - close(SUFILE); - } -} - -# In this step, we enumerate each list of callees in the call graph and -# try to resolve the symbols. We omit ones we can't resolve, but keep a -# set of them anyway. - -my %unresolved; - -foreach (keys %call_graph) { - my $from = $_; - my $callees = $call_graph{$from}; - my %resolved; - - foreach (keys %$callees) { - my $t = $_; - - if (defined($addresses{$t})) { - $resolved{$addresses{$t}} = 1; - } elsif (defined($global_name{$t})) { - $resolved{$global_name{$t}} = 1; - warn "Ambiguous resolution: $t" if defined ($ambiguous{$t}); - } elsif (defined($call_graph{$t})) { - $resolved{$t} = 1; - } else { - $unresolved{$t} = 1; - } - } - - $call_graph{$from} = \%resolved; -} - -# Create fake edges and nodes to account for dynamic behaviour. -$call_graph{"INTERRUPT"} = {}; - -foreach (keys %call_graph) { - $call_graph{"INTERRUPT"}->{$_} = 1 if /^__vector_/; -} - -# Trace the call graph and calculate, for each function: -# -# - inherited frames: maximum inherited frame of callees, plus own -# frame size. -# - height: maximum height of callees, plus one. -# - recursion: is the function called recursively (including indirect -# recursion)? - -my %has_caller; -my %visited; -my %total_cost; -my %call_depth; - -sub trace { - my $f = shift; - - if ($visited{$f}) { - $visited{$f} = "R" if $visited{$f} eq "?"; - return; - } - - $visited{$f} = "?"; - - my $max_depth = 0; - my $max_frame = 0; - - my $targets = $call_graph{$f} || die "Unknown function: $f"; - if (defined($targets)) { - foreach (keys %$targets) { - my $t = $_; - - $has_caller{$t} = 1; - trace($t); - - my $is = $total_cost{$t}; - my $d = $call_depth{$t}; - - $max_frame = $is if $is > $max_frame; - $max_depth = $d if $d > $max_depth; - } - } - - $call_depth{$f} = $max_depth + 1; - $total_cost{$f} = $max_frame + ($frame_size{$f} || 0); - $visited{$f} = " " if $visited{$f} eq "?"; -} - -foreach (keys %call_graph) { trace $_; } - -# Now, print results in a nice table. -printf " %-30s %8s %8s %8s\n", - "Func", "Cost", "Frame", "Height"; -print "------------------------------------"; -print "------------------------------------\n"; - -my $max_iv = 0; -my $main = 0; - -foreach (sort { $total_cost{$b} <=> $total_cost{$a} } keys %visited) { - my $name = $_; - - if (/^(.*)@(.*)$/) { - $name = $1 unless $ambiguous{$name}; - } - - my $tag = $visited{$_}; - my $cost = $total_cost{$_}; - - $name = $_ if $ambiguous{$name}; - $tag = ">" unless $has_caller{$_}; - - if (/^__vector_/) { - $max_iv = $cost if $cost > $max_iv; - } elsif (/^main@/) { - $main = $cost; - } - - if ($ambiguous{$name}) { $name = $_; } - - printf "%s %-30s %8d %8d %8d\n", $tag, $name, $cost, - $frame_size{$_} || 0, $call_depth{$_}; -} - -print "\n"; - -print "Peak execution estimate (main + worst-case IV):\n"; -printf " main = %d, worst IV = %d, total = %d\n", - $total_cost{$global_name{"main"}}, - $total_cost{"INTERRUPT"}, - $total_cost{$global_name{"main"}} + $total_cost{"INTERRUPT"}; - -print "\n"; - -print "The following functions were not resolved:\n"; -foreach (keys %unresolved) { print " $_\n"; } diff --git a/Tools/teensy_uploader.py b/Tools/teensy_uploader.py index aad97135c3..81b8fbae6a 100644 --- a/Tools/teensy_uploader.py +++ b/Tools/teensy_uploader.py @@ -80,7 +80,6 @@ def main(): parser = argparse.ArgumentParser(description="Firmware uploader for the PX autopilot system.") parser.add_argument('--port', action="store", required=True, help="Comma-separated list of serial port(s) to which the FMU may be attached") parser.add_argument('--force', action='store_true', default=False, help='Override board type check, or silicon errata checks and continue loading') - parser.add_argument('--boot-delay', type=int, default=None, help='minimum boot delay to store in flash') parser.add_argument('--vendor-id', type=lambda x: int(x,0), default=None, help='PX4 USB vendorid') parser.add_argument('--product-id', type=lambda x: int(x,0), default=None, help='PX4 USB productid') parser.add_argument('firmware', action="store", nargs='+', help="Firmware file(s)") diff --git a/Tools/usb_serialload.py b/Tools/usb_serialload.py deleted file mode 100755 index 5c864532f7..0000000000 --- a/Tools/usb_serialload.py +++ /dev/null @@ -1,55 +0,0 @@ -import serial, time - - -port = serial.Serial('/dev/ttyACM0', baudrate=57600, timeout=2) - -data = '01234567890123456789012345678901234567890123456789' -#data = 'hellohello' -outLine = 'echo %s\n' % data - -port.write('\n\n\n') -port.write('free\n') -line = port.readline(80) -while line != '': - print(line) - line = port.readline(80) - - -i = 0 -bytesOut = 0 -bytesIn = 0 - -startTime = time.time() -lastPrint = startTime -while True: - bytesOut += port.write(outLine) - line = port.readline(80) - bytesIn += len(line) - # check command line echo - if (data not in line): - print('command error %d: %s' % (i,line)) - #break - # read echo output - line = port.readline(80) - if (data not in line): - print('echo output error %d: %s' % (i,line)) - #break - bytesIn += len(line) - #print('%d: %s' % (i,line)) - #print('%d: bytesOut: %d, bytesIn: %d' % (i, bytesOut, bytesIn)) - - elapsedT = time.time() - lastPrint - if (time.time() - lastPrint >= 5): - outRate = bytesOut / elapsedT - inRate = bytesIn / elapsedT - usbRate = (bytesOut + bytesIn) / elapsedT - lastPrint = time.time() - print('elapsed time: %f' % (time.time() - startTime)) - print('data rates (bytes/sec): out: %f, in: %f, total: %f' % (outRate, inRate, usbRate)) - - bytesOut = 0 - bytesIn = 0 - - i += 1 - #if (i > 2): break - diff --git a/boards/3dr/ctrl-zero-h7-oem-revg/default.px4board b/boards/3dr/ctrl-zero-h7-oem-revg/default.px4board index 366968f1ee..f8a870c8e2 100644 --- a/boards/3dr/ctrl-zero-h7-oem-revg/default.px4board +++ b/boards/3dr/ctrl-zero-h7-oem-revg/default.px4board @@ -63,7 +63,6 @@ CONFIG_MODULES_NAVIGATOR=y CONFIG_MODULES_RC_UPDATE=y CONFIG_MODULES_SENSORS=y CONFIG_MODULES_SIMULATION_SIMULATOR_SIH=y -CONFIG_MODULES_TEMPERATURE_COMPENSATION=y CONFIG_MODULES_UUV_ATT_CONTROL=y CONFIG_MODULES_UUV_POS_CONTROL=y CONFIG_MODULES_UXRCE_DDS_CLIENT=y diff --git a/boards/3dr/ctrl-zero-h7-oem-revg/nuttx-config/scripts/bootloader_script.ld b/boards/3dr/ctrl-zero-h7-oem-revg/nuttx-config/scripts/bootloader_script.ld index 3fb4cc1f33..bd3b8890f1 100755 --- a/boards/3dr/ctrl-zero-h7-oem-revg/nuttx-config/scripts/bootloader_script.ld +++ b/boards/3dr/ctrl-zero-h7-oem-revg/nuttx-config/scripts/bootloader_script.ld @@ -130,20 +130,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/3dr/ctrl-zero-h7-oem-revg/nuttx-config/scripts/script.ld b/boards/3dr/ctrl-zero-h7-oem-revg/nuttx-config/scripts/script.ld index 02e763a790..bb0aedb134 100755 --- a/boards/3dr/ctrl-zero-h7-oem-revg/nuttx-config/scripts/script.ld +++ b/boards/3dr/ctrl-zero-h7-oem-revg/nuttx-config/scripts/script.ld @@ -131,20 +131,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/3dr/ctrl-zero-h7-oem-revg/src/hw_config.h b/boards/3dr/ctrl-zero-h7-oem-revg/src/hw_config.h index b212ccd602..5633e11167 100755 --- a/boards/3dr/ctrl-zero-h7-oem-revg/src/hw_config.h +++ b/boards/3dr/ctrl-zero-h7-oem-revg/src/hw_config.h @@ -53,8 +53,6 @@ * INTERFACE_USART 1 - (Optional) Scan and use the Serial interface for bootloading * USBDEVICESTRING "PX4 BL FMU v2.x" - USB id string * USBPRODUCTID 0x0011 - PID Should match defconfig - * BOOT_DELAY_ADDRESS 0x000001a0 - (Optional) From the linker script from Linker Script to get a custom - * delay provided by an APP FW * BOARD_TYPE 9 - Must match .prototype boad_id * _FLASH_KBYTES (*(uint16_t *)0x1fff7a22) - Run time flash size detection * BOARD_FLASH_SECTORS ((_FLASH_KBYTES == 0x400) ? 11 : 23) - Run time determine the physical last sector @@ -95,7 +93,6 @@ //#define USE_VBUS_PULL_DOWN #define INTERFACE_USART 1 #define INTERFACE_USART_CONFIG "/dev/ttyS0,115200" -#define BOOT_DELAY_ADDRESS 0x000001a0 #define BOARD_TYPE 1124 #define _FLASH_KBYTES (*(uint32_t *)0x1FF1E880) #define BOARD_FLASH_SECTORS (15) diff --git a/boards/accton-godwit/ga1/default.px4board b/boards/accton-godwit/ga1/default.px4board index 9e291d01d7..7f9baf17e3 100644 --- a/boards/accton-godwit/ga1/default.px4board +++ b/boards/accton-godwit/ga1/default.px4board @@ -10,6 +10,7 @@ CONFIG_BOARD_SERIAL_EXT2="/dev/ttyS3" CONFIG_DRIVERS_ADC_ADS1115=y CONFIG_DRIVERS_ADC_BOARD_ADC=y CONFIG_DRIVERS_BAROMETER_BMP388=y +CONFIG_DRIVERS_BAROMETER_DPS310=y CONFIG_DRIVERS_BAROMETER_INVENSENSE_ICP201XX=y CONFIG_DRIVERS_BAROMETER_MS5611=y CONFIG_DRIVERS_CAMERA_CAPTURE=y @@ -47,6 +48,7 @@ CONFIG_MODULES_CAMERA_FEEDBACK=y CONFIG_MODULES_COMMANDER=y CONFIG_MODULES_CONTROL_ALLOCATOR=y CONFIG_MODULES_DATAMAN=y +CONFIG_NUM_MISSION_ITMES_SUPPORTED=1000 CONFIG_MODULES_EKF2=y CONFIG_MODULES_ESC_BATTERY=y CONFIG_MODULES_EVENTS=y @@ -73,10 +75,8 @@ CONFIG_MODULES_MC_POS_CONTROL=y CONFIG_MODULES_MC_RATE_CONTROL=y CONFIG_MODULES_NAVIGATOR=y CONFIG_MODE_NAVIGATOR_VTOL_TAKEOFF=y -CONFIG_NUM_MISSION_ITMES_SUPPORTED=1000 CONFIG_MODULES_RC_UPDATE=y CONFIG_MODULES_SENSORS=y -CONFIG_MODULES_TEMPERATURE_COMPENSATION=y CONFIG_MODULES_UXRCE_DDS_CLIENT=y CONFIG_MODULES_VTOL_ATT_CONTROL=y CONFIG_SYSTEMCMDS_ACTUATOR_TEST=y @@ -101,3 +101,4 @@ CONFIG_SYSTEMCMDS_TUNE_CONTROL=y CONFIG_SYSTEMCMDS_UORB=y CONFIG_SYSTEMCMDS_VER=y CONFIG_SYSTEMCMDS_WORK_QUEUE=y +CONFIG_ARCH_CHIP_STM32H7=y diff --git a/boards/accton-godwit/ga1/init/rc.board_sensors b/boards/accton-godwit/ga1/init/rc.board_sensors index 77f33fcfd9..d4871b7aad 100644 --- a/boards/accton-godwit/ga1/init/rc.board_sensors +++ b/boards/accton-godwit/ga1/init/rc.board_sensors @@ -83,10 +83,12 @@ ist8310 -X -b 1 -R 10 start if param compare SENS_INT_BARO_EN 1 then icp201xx -I -a 0x64 start + dps310 -I start fi #external baro icp201xx -X start +dps310 -X start unset INA_CONFIGURED unset HAVE_PM2 diff --git a/boards/accton-godwit/ga1/nuttx-config/scripts/bootloader_script.ld b/boards/accton-godwit/ga1/nuttx-config/scripts/bootloader_script.ld index 2e6eba3607..293b6cccec 100644 --- a/boards/accton-godwit/ga1/nuttx-config/scripts/bootloader_script.ld +++ b/boards/accton-godwit/ga1/nuttx-config/scripts/bootloader_script.ld @@ -132,20 +132,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/accton-godwit/ga1/nuttx-config/scripts/script.ld b/boards/accton-godwit/ga1/nuttx-config/scripts/script.ld index b6b341d4e8..32d7cf662a 100644 --- a/boards/accton-godwit/ga1/nuttx-config/scripts/script.ld +++ b/boards/accton-godwit/ga1/nuttx-config/scripts/script.ld @@ -131,7 +131,6 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) EXTERN(board_get_manifest) SECTIONS @@ -140,12 +139,6 @@ SECTIONS _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/accton-godwit/ga1/src/board_config.h b/boards/accton-godwit/ga1/src/board_config.h index cffa2cc54d..d82e96a3b7 100644 --- a/boards/accton-godwit/ga1/src/board_config.h +++ b/boards/accton-godwit/ga1/src/board_config.h @@ -221,8 +221,10 @@ /* HEATER * PWM in future */ -#define GPIO_HEATER_OUTPUT /* PB10 T2CH3 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTB|GPIO_PIN10) -#define HEATER_OUTPUT_EN(on_true) px4_arch_gpiowrite(GPIO_HEATER_OUTPUT, (on_true)) +#define GPIO_HEATER_OUTPUT +#define HEATER_NUM 1 +#define GPIO_HEATER1_OUTPUT /* PB10 T2CH3 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTB|GPIO_PIN10) +#define HEATER1_OUTPUT_EN(on_true) px4_arch_gpiowrite(GPIO_HEATER1_OUTPUT, (on_true)) /* PE6 is nARMED * The GPIO will be set as input while not armed HW will have external HW Pull UP. @@ -257,7 +259,7 @@ #define GPIO_VDD_5V_PERIPH_nOC /* PE15 */ (GPIO_INPUT |GPIO_FLOAT|GPIO_PORTE|GPIO_PIN15) #define GPIO_VDD_5V_HIPOWER_nEN /* PG10 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_SET|GPIO_PORTG|GPIO_PIN10) #define GPIO_VDD_5V_HIPOWER_nOC /* PF13 */ (GPIO_INPUT |GPIO_FLOAT|GPIO_PORTF|GPIO_PIN13) -#define GPIO_VDD_3V3_SENSORS4_EN /* PG8 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTG|GPIO_PIN8) +#define GPIO_VDD_3V3_SENSORS_EN /* PG8 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTG|GPIO_PIN8) #define GPIO_VDD_3V3_SPEKTRUM_POWER_EN /* PH2 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTH|GPIO_PIN2) #define GPIO_VDD_3V3_SD_CARD_EN /* PC13 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTC|GPIO_PIN13) @@ -284,7 +286,7 @@ #define VDD_5V_PERIPH_EN(on_true) px4_arch_gpiowrite(GPIO_VDD_5V_PERIPH_nEN, !(on_true)) #define VDD_5V_HIPOWER_EN(on_true) px4_arch_gpiowrite(GPIO_VDD_5V_HIPOWER_nEN, !(on_true)) -#define VDD_3V3_SENSORS4_EN(on_true) px4_arch_gpiowrite(GPIO_VDD_3V3_SENSORS4_EN, (on_true)) +#define VDD_3V3_SENSORS_EN(on_true) px4_arch_gpiowrite(GPIO_VDD_3V3_SENSORS_EN, (on_true)) #define VDD_3V3_SPEKTRUM_POWER_EN(on_true) px4_arch_gpiowrite(GPIO_VDD_3V3_SPEKTRUM_POWER_EN, (on_true)) #define READ_VDD_3V3_SPEKTRUM_POWER_EN() px4_arch_gpioread(GPIO_VDD_3V3_SPEKTRUM_POWER_EN) #define VDD_3V3_SD_CARD_EN(on_true) px4_arch_gpiowrite(GPIO_VDD_3V3_SD_CARD_EN, (on_true)) @@ -442,7 +444,7 @@ GPIO_CAN1_RX, \ GPIO_CAN2_TX, \ GPIO_CAN2_RX, \ - GPIO_HEATER_OUTPUT, \ + GPIO_HEATER1_OUTPUT, \ GPIO_nPOWER_IN_A, \ GPIO_nPOWER_IN_B, \ GPIO_nPOWER_IN_C, \ @@ -450,7 +452,7 @@ GPIO_VDD_5V_PERIPH_nOC, \ GPIO_VDD_5V_HIPOWER_nEN, \ GPIO_VDD_5V_HIPOWER_nOC, \ - GPIO_VDD_3V3_SENSORS4_EN, \ + GPIO_VDD_3V3_SENSORS_EN, \ GPIO_VDD_3V3_SPEKTRUM_POWER_EN, \ GPIO_VDD_3V3_SD_CARD_EN, \ GPIO_PD15, \ diff --git a/boards/accton-godwit/ga1/src/hw_config.h b/boards/accton-godwit/ga1/src/hw_config.h index a2bdf7398c..98de3dcc2c 100644 --- a/boards/accton-godwit/ga1/src/hw_config.h +++ b/boards/accton-godwit/ga1/src/hw_config.h @@ -28,8 +28,6 @@ * INTERFACE_USART 1 - (Optional) Scan and use the Serial interface for bootloading * USBDEVICESTRING "PX4 BL FMU v2.x" - USB id string * USBPRODUCTID 0x0011 - PID Should match defconfig - * BOOT_DELAY_ADDRESS 0x000001a0 - (Optional) From the linker script from Linker Script to get a custom - * delay provided by an APP FW * BOARD_TYPE 9 - Must match .prototype boad_id * _FLASH_KBYTES (*(uint16_t *)0x1fff7a22) - Run time flash size detection * BOARD_FLASH_SECTORS ((_FLASH_KBYTES == 0x400) ? 11 : 23) - Run time determine the physical last sector @@ -70,7 +68,6 @@ //#define USE_VBUS_PULL_DOWN #define INTERFACE_USART 1 #define INTERFACE_USART_CONFIG "/dev/ttyS0,1500000" -#define BOOT_DELAY_ADDRESS 0x000001a0 #define BOARD_TYPE 7120 #define _FLASH_KBYTES (*(uint32_t *)0x1FF1E880) #define BOARD_FLASH_SECTORS (15) diff --git a/boards/accton-godwit/ga1/src/init.cpp b/boards/accton-godwit/ga1/src/init.cpp index ca48a74479..cd1f8afa53 100644 --- a/boards/accton-godwit/ga1/src/init.cpp +++ b/boards/accton-godwit/ga1/src/init.cpp @@ -107,7 +107,7 @@ __EXPORT void board_peripheral_reset(int ms) VDD_5V_PERIPH_EN(false); board_control_spi_sensors_power(false, 0xffff); - VDD_3V3_SENSORS4_EN(false); + VDD_3V3_SENSORS_EN(false); bool last = READ_VDD_3V3_SPEKTRUM_POWER_EN(); /* Keep Spektum on to discharge rail*/ @@ -122,7 +122,7 @@ __EXPORT void board_peripheral_reset(int ms) /* switch the peripheral rail back on */ VDD_3V3_SPEKTRUM_POWER_EN(last); board_control_spi_sensors_power(true, 0xffff); - VDD_3V3_SENSORS4_EN(true); + VDD_3V3_SENSORS_EN(true); VDD_5V_PERIPH_EN(true); } @@ -219,7 +219,7 @@ __EXPORT int board_app_initialize(uintptr_t arg) VDD_3V3_SD_CARD_EN(true); VDD_5V_PERIPH_EN(true); VDD_5V_HIPOWER_EN(true); - VDD_3V3_SENSORS4_EN(true); + VDD_3V3_SENSORS_EN(true); VDD_3V3_SPEKTRUM_POWER_EN(true); /* Need hrt running before using the ADC */ diff --git a/boards/accton-godwit/ga1/src/spi.cpp b/boards/accton-godwit/ga1/src/spi.cpp index 7be7fb2ada..7208d44879 100644 --- a/boards/accton-godwit/ga1/src/spi.cpp +++ b/boards/accton-godwit/ga1/src/spi.cpp @@ -48,7 +48,7 @@ constexpr px4_spi_bus_t px4_spi_buses[SPI_BUS_MAX_BUS_ITEMS] = { }, {GPIO::PortE, GPIO::Pin7}), // initSPIBus(SPI::Bus::SPI4, { // // no devices - // TODO: if enabled, remove GPIO_VDD_3V3_SENSORS4_EN from board_config.h + // TODO: if enabled, remove GPIO_VDD_3V3_SENSORS_EN from board_config.h // }, {GPIO::PortG, GPIO::Pin8}), initSPIBus(SPI::Bus::SPI5, { initSPIDevice(SPIDEV_FLASH(0), SPI::CS{GPIO::PortG, GPIO::Pin7}) diff --git a/boards/airmind/mindpx-v2/default.px4board b/boards/airmind/mindpx-v2/default.px4board index 10e061af3e..6741a7839e 100644 --- a/boards/airmind/mindpx-v2/default.px4board +++ b/boards/airmind/mindpx-v2/default.px4board @@ -68,7 +68,6 @@ CONFIG_MODULES_NAVIGATOR=y CONFIG_MODULES_RC_UPDATE=y CONFIG_MODULES_SENSORS=y CONFIG_MODULES_SIMULATION_SIMULATOR_SIH=y -CONFIG_MODULES_TEMPERATURE_COMPENSATION=y CONFIG_MODULES_UUV_ATT_CONTROL=y CONFIG_MODULES_UUV_POS_CONTROL=y CONFIG_MODULES_VTOL_ATT_CONTROL=y diff --git a/boards/airmind/mindpx-v2/nuttx-config/scripts/script.ld b/boards/airmind/mindpx-v2/nuttx-config/scripts/script.ld index 6d92733df8..cf3e2bcd20 100644 --- a/boards/airmind/mindpx-v2/nuttx-config/scripts/script.ld +++ b/boards/airmind/mindpx-v2/nuttx-config/scripts/script.ld @@ -65,20 +65,12 @@ EXTERN(_vectors) /* force the vectors to be included in the output */ * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/ark/can-flow-mr/nuttx-config/scripts/script.ld b/boards/ark/can-flow-mr/nuttx-config/scripts/script.ld index 2f4769b8f5..77322893e3 100644 --- a/boards/ark/can-flow-mr/nuttx-config/scripts/script.ld +++ b/boards/ark/can-flow-mr/nuttx-config/scripts/script.ld @@ -64,8 +64,6 @@ EXTERN(_vectors) /* force the vectors to be included in the output */ * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { diff --git a/boards/ark/can-flow/nuttx-config/scripts/script.ld b/boards/ark/can-flow/nuttx-config/scripts/script.ld index c63c749941..17a892f885 100644 --- a/boards/ark/can-flow/nuttx-config/scripts/script.ld +++ b/boards/ark/can-flow/nuttx-config/scripts/script.ld @@ -64,8 +64,6 @@ EXTERN(_vectors) /* force the vectors to be included in the output */ * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { diff --git a/boards/ark/can-gps/nuttx-config/scripts/script.ld b/boards/ark/can-gps/nuttx-config/scripts/script.ld index c63c749941..17a892f885 100644 --- a/boards/ark/can-gps/nuttx-config/scripts/script.ld +++ b/boards/ark/can-gps/nuttx-config/scripts/script.ld @@ -64,8 +64,6 @@ EXTERN(_vectors) /* force the vectors to be included in the output */ * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { diff --git a/boards/ark/can-rtk-gps/nuttx-config/scripts/script.ld b/boards/ark/can-rtk-gps/nuttx-config/scripts/script.ld index c63c749941..17a892f885 100644 --- a/boards/ark/can-rtk-gps/nuttx-config/scripts/script.ld +++ b/boards/ark/can-rtk-gps/nuttx-config/scripts/script.ld @@ -64,8 +64,6 @@ EXTERN(_vectors) /* force the vectors to be included in the output */ * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { diff --git a/boards/ark/cannode/nuttx-config/scripts/script.ld b/boards/ark/cannode/nuttx-config/scripts/script.ld index daf33d4b97..69d99d59ba 100644 --- a/boards/ark/cannode/nuttx-config/scripts/script.ld +++ b/boards/ark/cannode/nuttx-config/scripts/script.ld @@ -64,8 +64,6 @@ EXTERN(_vectors) /* force the vectors to be included in the output */ * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { diff --git a/boards/ark/dist/nuttx-config/scripts/script.ld b/boards/ark/dist/nuttx-config/scripts/script.ld index 2f4769b8f5..77322893e3 100644 --- a/boards/ark/dist/nuttx-config/scripts/script.ld +++ b/boards/ark/dist/nuttx-config/scripts/script.ld @@ -64,8 +64,6 @@ EXTERN(_vectors) /* force the vectors to be included in the output */ * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { diff --git a/boards/ark/f9p-gps/nuttx-config/scripts/script.ld b/boards/ark/f9p-gps/nuttx-config/scripts/script.ld index 2f4769b8f5..77322893e3 100644 --- a/boards/ark/f9p-gps/nuttx-config/scripts/script.ld +++ b/boards/ark/f9p-gps/nuttx-config/scripts/script.ld @@ -64,8 +64,6 @@ EXTERN(_vectors) /* force the vectors to be included in the output */ * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { diff --git a/boards/ark/fmu-v6x/default.px4board b/boards/ark/fmu-v6x/default.px4board index cb8bae6ae0..6e9c03f0dd 100644 --- a/boards/ark/fmu-v6x/default.px4board +++ b/boards/ark/fmu-v6x/default.px4board @@ -28,12 +28,8 @@ CONFIG_DRIVERS_IMU_INVENSENSE_IIM42653=y CONFIG_DRIVERS_IMU_MURATA_SCH16T=y CONFIG_COMMON_LIGHT=y CONFIG_DRIVERS_MAGNETOMETER_BOSCH_BMM150=y -CONFIG_DRIVERS_MAGNETOMETER_HMC5883=y -CONFIG_DRIVERS_MAGNETOMETER_QMC5883L=y -CONFIG_DRIVERS_MAGNETOMETER_ISENTEK_IST8308=y CONFIG_DRIVERS_MAGNETOMETER_ISENTEK_IST8310=y CONFIG_DRIVERS_MAGNETOMETER_LIS3MDL=y -CONFIG_DRIVERS_MAGNETOMETER_LSM303AGR=y CONFIG_DRIVERS_MAGNETOMETER_RM3100=y CONFIG_DRIVERS_MAGNETOMETER_ST_IIS2MDC=y CONFIG_DRIVERS_POWER_MONITOR_INA226=y diff --git a/boards/ark/fmu-v6x/init/rc.board_defaults b/boards/ark/fmu-v6x/init/rc.board_defaults index 7b96f86974..e85fd0a462 100644 --- a/boards/ark/fmu-v6x/init/rc.board_defaults +++ b/boards/ark/fmu-v6x/init/rc.board_defaults @@ -17,21 +17,21 @@ param set-default MAV_2_UDP_PRT 14550 param set-default SENS_EN_INA226 1 param set-default SENS_EN_THERMAL 1 param set-default SENS_IMU_MODE 1 -param set-default SENS_IMU_TEMP 10.0 -#param set-default SENS_IMU_TEMP_FF 0.0 -#param set-default SENS_IMU_TEMP_I 0.025 -#param set-default SENS_IMU_TEMP_P 1.0 +param set-default HEATER1_TEMP 10.0 +#param set-default HEATER1_TEMP_FF 0.0 +#param set-default HEATER1_TEMP_I 0.025 +#param set-default HEATER1_TEMP_P 1.0 param set-default UAVCAN_ESC_IFACE 2 if ver hwtypecmp ARKV6X000 then - param set-default SENS_TEMP_ID 2818058 + param set-default HEATER1_IMU_ID 2818058 fi if ver hwtypecmp ARKV6X001 then - param set-default SENS_TEMP_ID 3014666 + param set-default HEATER1_IMU_ID 3014666 fi safety_button start diff --git a/boards/ark/fmu-v6x/init/rc.board_sensors b/boards/ark/fmu-v6x/init/rc.board_sensors index 7b2259f8ad..2f17a837e3 100644 --- a/boards/ark/fmu-v6x/init/rc.board_sensors +++ b/boards/ark/fmu-v6x/init/rc.board_sensors @@ -100,7 +100,7 @@ bmp388 -I start # Start an external PWM generator if param greater PCA9685_EN_BUS 0 then - pca9685_pwm_out start + pca9685_pwm_out start -X fi unset HAVE_PM2 diff --git a/boards/ark/fmu-v6x/mavlink-dev.px4board b/boards/ark/fmu-v6x/mavlink-dev.px4board new file mode 100644 index 0000000000..83cac6e17b --- /dev/null +++ b/boards/ark/fmu-v6x/mavlink-dev.px4board @@ -0,0 +1 @@ +CONFIG_MAVLINK_DIALECT="development" diff --git a/boards/ark/fmu-v6x/nuttx-config/scripts/bootloader_script.ld b/boards/ark/fmu-v6x/nuttx-config/scripts/bootloader_script.ld index 5b1bb4cb05..30444b5602 100644 --- a/boards/ark/fmu-v6x/nuttx-config/scripts/bootloader_script.ld +++ b/boards/ark/fmu-v6x/nuttx-config/scripts/bootloader_script.ld @@ -132,20 +132,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/ark/fmu-v6x/nuttx-config/scripts/script.ld b/boards/ark/fmu-v6x/nuttx-config/scripts/script.ld index d06a7d7aa7..5809b3bec2 100644 --- a/boards/ark/fmu-v6x/nuttx-config/scripts/script.ld +++ b/boards/ark/fmu-v6x/nuttx-config/scripts/script.ld @@ -131,7 +131,6 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) EXTERN(board_get_manifest) SECTIONS @@ -140,12 +139,6 @@ SECTIONS _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/ark/fmu-v6x/src/board_config.h b/boards/ark/fmu-v6x/src/board_config.h index a76d357c04..037fd11296 100644 --- a/boards/ark/fmu-v6x/src/board_config.h +++ b/boards/ark/fmu-v6x/src/board_config.h @@ -224,8 +224,10 @@ /* HEATER * PWM in future */ -#define GPIO_HEATER_OUTPUT /* PB10 T2CH3 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTB|GPIO_PIN10) -#define HEATER_OUTPUT_EN(on_true) px4_arch_gpiowrite(GPIO_HEATER_OUTPUT, (on_true)) +#define GPIO_HEATER_OUTPUT +#define HEATER_NUM 1 +#define GPIO_HEATER1_OUTPUT /* PB10 T2CH3 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTB|GPIO_PIN10) +#define HEATER1_OUTPUT_EN(on_true) px4_arch_gpiowrite(GPIO_HEATER1_OUTPUT, (on_true)) /* PE6 is nARMED * The GPIO will be set as input while not armed HW will have external HW Pull UP. @@ -243,6 +245,15 @@ */ #define DIRECT_PWM_OUTPUT_CHANNELS 9 +#define GPIO_FMU_CH1 /* PI0 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTI|GPIO_PIN0) +#define GPIO_FMU_CH2 /* PH12 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTH|GPIO_PIN12) +#define GPIO_FMU_CH3 /* PH11 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTH|GPIO_PIN11) +#define GPIO_FMU_CH4 /* PH10 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTH|GPIO_PIN10) +#define GPIO_FMU_CH5 /* PD13 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTD|GPIO_PIN13) +#define GPIO_FMU_CH6 /* PD14 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTD|GPIO_PIN14) +#define GPIO_FMU_CH7 /* PH6 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTH|GPIO_PIN6) +#define GPIO_FMU_CH8 /* PH9 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTH|GPIO_PIN9) + #define GPIO_FMU_CAP /* PE11 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTE|GPIO_PIN11) #define GPIO_SPIX_SYNC /* PE9 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTE|GPIO_PIN9) @@ -262,7 +273,7 @@ #define GPIO_VDD_5V_PERIPH_nOC /* PE15 */ (GPIO_INPUT |GPIO_FLOAT|GPIO_PORTE|GPIO_PIN15) #define GPIO_VDD_5V_HIPOWER_nEN /* PG10 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_SET|GPIO_PORTG|GPIO_PIN10) #define GPIO_VDD_5V_HIPOWER_nOC /* PF13 */ (GPIO_INPUT |GPIO_FLOAT|GPIO_PORTF|GPIO_PIN13) -#define GPIO_VDD_3V3_SENSORS4_EN /* PG8 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTG|GPIO_PIN8) +#define GPIO_VDD_3V3_SENSORS_EN /* PG8 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTG|GPIO_PIN8) #define GPIO_VDD_3V3_SPEKTRUM_POWER_EN /* PH2 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTH|GPIO_PIN2) #define GPIO_VDD_3V3_SD_CARD_EN /* PC13 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTC|GPIO_PIN13) @@ -284,7 +295,7 @@ #define VDD_5V_PERIPH_EN(on_true) px4_arch_gpiowrite(GPIO_VDD_5V_PERIPH_nEN, !(on_true)) #define VDD_5V_HIPOWER_EN(on_true) px4_arch_gpiowrite(GPIO_VDD_5V_HIPOWER_nEN, !(on_true)) -#define VDD_3V3_SENSORS4_EN(on_true) px4_arch_gpiowrite(GPIO_VDD_3V3_SENSORS4_EN, (on_true)) +#define VDD_3V3_SENSORS_EN(on_true) px4_arch_gpiowrite(GPIO_VDD_3V3_SENSORS_EN, (on_true)) #define VDD_3V3_SPEKTRUM_POWER_EN(on_true) px4_arch_gpiowrite(GPIO_VDD_3V3_SPEKTRUM_POWER_EN, (on_true)) #define READ_VDD_3V3_SPEKTRUM_POWER_EN() px4_arch_gpioread(GPIO_VDD_3V3_SPEKTRUM_POWER_EN) #define VDD_3V3_SD_CARD_EN(on_true) px4_arch_gpiowrite(GPIO_VDD_3V3_SD_CARD_EN, (on_true)) @@ -410,9 +421,6 @@ /* This board provides a DMA pool and APIs */ #define BOARD_DMA_ALLOC_POOL_SIZE 5120 -/* This board has 4 DMA channels available for bidirectional dshot */ -#define BOARD_DMA_NUM_DSHOT_CHANNELS 4 - /* This board provides the board_on_reset interface */ #define BOARD_HAS_ON_RESET 1 @@ -436,7 +444,7 @@ GPIO_CAN1_RX, \ GPIO_CAN2_TX, \ GPIO_CAN2_RX, \ - GPIO_HEATER_OUTPUT, \ + GPIO_HEATER1_OUTPUT, \ GPIO_nPOWER_IN_A, \ GPIO_nPOWER_IN_B, \ GPIO_nPOWER_IN_C, \ @@ -444,7 +452,7 @@ GPIO_VDD_5V_PERIPH_nOC, \ GPIO_VDD_5V_HIPOWER_nEN, \ GPIO_VDD_5V_HIPOWER_nOC, \ - GPIO_VDD_3V3_SENSORS4_EN, \ + GPIO_VDD_3V3_SENSORS_EN, \ GPIO_VDD_3V3_SPEKTRUM_POWER_EN, \ GPIO_VDD_3V3_SD_CARD_EN, \ GPIO_PD15, \ @@ -456,6 +464,14 @@ GPIO_SAFETY_SWITCH_IN, \ GPIO_PG6, \ GPIO_nARMED_INIT, \ + GPIO_FMU_CH1, \ + GPIO_FMU_CH2, \ + GPIO_FMU_CH3, \ + GPIO_FMU_CH4, \ + GPIO_FMU_CH5, \ + GPIO_FMU_CH6, \ + GPIO_FMU_CH7, \ + GPIO_FMU_CH8, \ GPIO_FMU_CAP, \ GPIO_SPIX_SYNC \ } diff --git a/boards/ark/fmu-v6x/src/hw_config.h b/boards/ark/fmu-v6x/src/hw_config.h index 3a0205c87b..6875e7f8b0 100644 --- a/boards/ark/fmu-v6x/src/hw_config.h +++ b/boards/ark/fmu-v6x/src/hw_config.h @@ -28,8 +28,6 @@ * INTERFACE_USART 1 - (Optional) Scan and use the Serial interface for bootloading * USBDEVICESTRING "PX4 BL FMU v2.x" - USB id string * USBPRODUCTID 0x0011 - PID Should match defconfig - * BOOT_DELAY_ADDRESS 0x000001a0 - (Optional) From the linker script from Linker Script to get a custom - * delay provided by an APP FW * BOARD_TYPE 9 - Must match .prototype boad_id * _FLASH_KBYTES (*(uint16_t *)0x1fff7a22) - Run time flash size detection * BOARD_FLASH_SECTORS ((_FLASH_KBYTES == 0x400) ? 11 : 23) - Run time determine the physical last sector @@ -70,7 +68,6 @@ //#define USE_VBUS_PULL_DOWN #define INTERFACE_USART 1 #define INTERFACE_USART_CONFIG "/dev/ttyS0,115200" -#define BOOT_DELAY_ADDRESS 0x000001a0 #define BOARD_TYPE 57 #define _FLASH_KBYTES (*(uint32_t *)0x1FF1E880) #define BOARD_FLASH_SECTORS (15) diff --git a/boards/ark/fmu-v6x/src/init.c b/boards/ark/fmu-v6x/src/init.c index c60f700af1..ce4911b30f 100644 --- a/boards/ark/fmu-v6x/src/init.c +++ b/boards/ark/fmu-v6x/src/init.c @@ -108,7 +108,7 @@ __EXPORT void board_peripheral_reset(int ms) VDD_5V_HIPOWER_EN(false); VDD_5V_PERIPH_EN(false); board_control_spi_sensors_power(false, 0xffff); - VDD_3V3_SENSORS4_EN(false); + VDD_3V3_SENSORS_EN(false); SPI6_RESET(true); bool last = READ_VDD_3V3_SPEKTRUM_POWER_EN(); @@ -124,7 +124,7 @@ __EXPORT void board_peripheral_reset(int ms) /* switch the peripheral rail back on */ VDD_3V3_SPEKTRUM_POWER_EN(last); board_control_spi_sensors_power(true, 0xffff); - VDD_3V3_SENSORS4_EN(true); + VDD_3V3_SENSORS_EN(true); VDD_5V_HIPOWER_EN(true); VDD_5V_PERIPH_EN(true); @@ -221,7 +221,7 @@ __EXPORT int board_app_initialize(uintptr_t arg) /* Power on Interfaces */ VDD_5V_PERIPH_EN(true); VDD_5V_HIPOWER_EN(true); - VDD_3V3_SENSORS4_EN(true); + VDD_3V3_SENSORS_EN(true); VDD_3V3_SPEKTRUM_POWER_EN(true); SPI6_RESET(false); diff --git a/boards/ark/fmu-v6x/src/spi.cpp b/boards/ark/fmu-v6x/src/spi.cpp index fc60153efe..6ef0c9263c 100644 --- a/boards/ark/fmu-v6x/src/spi.cpp +++ b/boards/ark/fmu-v6x/src/spi.cpp @@ -48,7 +48,7 @@ constexpr px4_spi_bus_all_hw_t px4_spi_buses_all_hw[BOARD_NUM_SPI_CFG_HW_VERSION }, {GPIO::PortE, GPIO::Pin7}), // initSPIBus(SPI::Bus::SPI4, { // // no devices - // TODO: if enabled, remove GPIO_VDD_3V3_SENSORS4_EN from board_config.h + // TODO: if enabled, remove GPIO_VDD_3V3_SENSORS_EN from board_config.h // }, {GPIO::PortG, GPIO::Pin8}), initSPIBus(SPI::Bus::SPI5, { initSPIDevice(SPIDEV_FLASH(0), SPI::CS{GPIO::PortG, GPIO::Pin7}) @@ -71,7 +71,7 @@ constexpr px4_spi_bus_all_hw_t px4_spi_buses_all_hw[BOARD_NUM_SPI_CFG_HW_VERSION }, {GPIO::PortE, GPIO::Pin7}), // initSPIBus(SPI::Bus::SPI4, { // // no devices - // TODO: if enabled, remove GPIO_VDD_3V3_SENSORS4_EN from board_config.h + // TODO: if enabled, remove GPIO_VDD_3V3_SENSORS_EN from board_config.h // }, {GPIO::PortG, GPIO::Pin8}), initSPIBus(SPI::Bus::SPI5, { initSPIDevice(SPIDEV_FLASH(0), SPI::CS{GPIO::PortG, GPIO::Pin7}) diff --git a/boards/ark/fpv/init/rc.board_airframes b/boards/ark/fpv/init/rc.board_airframes new file mode 100644 index 0000000000..1cb11f713e --- /dev/null +++ b/boards/ark/fpv/init/rc.board_airframes @@ -0,0 +1,19 @@ +4001_quad_x +4050_generic_250 +6001_hexa_x +12001_octo_cox +13100_generic_vtol_tiltrotor +5001_quad_+ +24001_dodeca_cox +2100_standard_plane +13000_generic_vtol_standard +4601_droneblocks_dexi_5 +11001_hexa_cox +14001_generic_mc_with_tilt +16001_helicopter +9001_octo_+ +7001_hexa_+ +3000_generic_wing +2106_albatross +13200_generic_vtol_tailsitter +13030_generic_vtol_quad_tiltrotor diff --git a/boards/ark/fpv/init/rc.board_defaults b/boards/ark/fpv/init/rc.board_defaults index becc9e8979..4a9fd86892 100644 --- a/boards/ark/fpv/init/rc.board_defaults +++ b/boards/ark/fpv/init/rc.board_defaults @@ -15,14 +15,14 @@ fi # TODO: Tune the following parameters param set-default SENS_EN_THERMAL 1 -param set-default SENS_IMU_TEMP 10.0 -#param set-default SENS_IMU_TEMP_FF 0.0 -#param set-default SENS_IMU_TEMP_I 0.025 -#param set-default SENS_IMU_TEMP_P 1.0 +param set-default HEATER1_TEMP 10.0 +#param set-default HEATER1_TEMP_FF 0.0 +#param set-default HEATER1_TEMP_I 0.025 +#param set-default HEATER1_TEMP_P 1.0 if ver hwtypecmp ARKFPV000 then - param set-default SENS_TEMP_ID 3014666 + param set-default HEATER1_IMU_ID 3014666 fi param set-default BAT1_V_DIV 21.0 diff --git a/boards/ark/fpv/init/rc.board_sensors b/boards/ark/fpv/init/rc.board_sensors index e719938f86..1c0b9cf185 100644 --- a/boards/ark/fpv/init/rc.board_sensors +++ b/boards/ark/fpv/init/rc.board_sensors @@ -20,5 +20,5 @@ bmp388 -I -b 2 start # Start an external PWM generator if param greater PCA9685_EN_BUS 0 then - pca9685_pwm_out start + pca9685_pwm_out start -X fi diff --git a/boards/ark/fpv/mavlink-dev.px4board b/boards/ark/fpv/mavlink-dev.px4board new file mode 100644 index 0000000000..83cac6e17b --- /dev/null +++ b/boards/ark/fpv/mavlink-dev.px4board @@ -0,0 +1 @@ +CONFIG_MAVLINK_DIALECT="development" diff --git a/boards/ark/fpv/nuttx-config/scripts/bootloader_script.ld b/boards/ark/fpv/nuttx-config/scripts/bootloader_script.ld index b0515c91c7..4000b99f4a 100644 --- a/boards/ark/fpv/nuttx-config/scripts/bootloader_script.ld +++ b/boards/ark/fpv/nuttx-config/scripts/bootloader_script.ld @@ -132,20 +132,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/ark/fpv/nuttx-config/scripts/script.ld b/boards/ark/fpv/nuttx-config/scripts/script.ld index 8e6dca3e49..9dd8cef679 100644 --- a/boards/ark/fpv/nuttx-config/scripts/script.ld +++ b/boards/ark/fpv/nuttx-config/scripts/script.ld @@ -131,7 +131,6 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) EXTERN(board_get_manifest) SECTIONS @@ -140,12 +139,6 @@ SECTIONS _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/ark/fpv/src/board_config.h b/boards/ark/fpv/src/board_config.h index 04e1cc03ec..f75bec3e08 100644 --- a/boards/ark/fpv/src/board_config.h +++ b/boards/ark/fpv/src/board_config.h @@ -205,8 +205,10 @@ /* HEATER * PWM in future */ -#define GPIO_HEATER_OUTPUT /* PB10 T2CH3 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTB|GPIO_PIN10) -#define HEATER_OUTPUT_EN(on_true) px4_arch_gpiowrite(GPIO_HEATER_OUTPUT, (on_true)) +#define GPIO_HEATER_OUTPUT +#define HEATER_NUM 1 +#define GPIO_HEATER1_OUTPUT /* PB10 T2CH3 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTB|GPIO_PIN10) +#define HEATER1_OUTPUT_EN(on_true) px4_arch_gpiowrite(GPIO_HEATER1_OUTPUT, (on_true)) /* PE6 is nARMED * The GPIO will be set as input while not armed HW will have external HW Pull UP. @@ -223,6 +225,16 @@ */ #define DIRECT_PWM_OUTPUT_CHANNELS 9 +#define GPIO_FMU_CH1 /* PI0 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTI|GPIO_PIN0) +#define GPIO_FMU_CH2 /* PH12 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTH|GPIO_PIN12) +#define GPIO_FMU_CH3 /* PH11 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTH|GPIO_PIN11) +#define GPIO_FMU_CH4 /* PH10 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTH|GPIO_PIN10) +#define GPIO_FMU_CH5 /* PI5 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTI|GPIO_PIN5) +#define GPIO_FMU_CH6 /* PI6 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTI|GPIO_PIN6) +#define GPIO_FMU_CH7 /* PI7 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTI|GPIO_PIN7) +#define GPIO_FMU_CH8 /* PI2 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTI|GPIO_PIN2) +#define GPIO_FMU_CH9 /* PD12 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTD|GPIO_PIN12) + #define GPIO_SPIX_SYNC /* PE9 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTE|GPIO_PIN9) /* Power supply control and monitoring GPIOs */ @@ -294,9 +306,6 @@ /* This board provides a DMA pool and APIs */ #define BOARD_DMA_ALLOC_POOL_SIZE 5120 -/* This board has 3 DMA channels available for bidirectional dshot */ -#define BOARD_DMA_NUM_DSHOT_CHANNELS 3 - /* This board provides the board_on_reset interface */ #define BOARD_HAS_ON_RESET 1 @@ -318,7 +327,7 @@ GPIO_HW_VER_REV_DRIVE, \ GPIO_CAN1_TX, \ GPIO_CAN1_RX, \ - GPIO_HEATER_OUTPUT, \ + GPIO_HEATER1_OUTPUT, \ GPIO_VDD_5V_PGOOD, \ GPIO_VDD_12V_PGOOD, \ GPIO_VDD_12V_EN, \ @@ -326,6 +335,15 @@ GPIO_VDD_3V3_SD_CARD_EN, \ GPIO_nARMED_INIT, \ SPI6_nRESET_EXTERNAL1, \ + GPIO_FMU_CH1, \ + GPIO_FMU_CH2, \ + GPIO_FMU_CH3, \ + GPIO_FMU_CH4, \ + GPIO_FMU_CH5, \ + GPIO_FMU_CH6, \ + GPIO_FMU_CH7, \ + GPIO_FMU_CH8, \ + GPIO_FMU_CH9, \ GPIO_SPIX_SYNC \ } diff --git a/boards/ark/fpv/src/hw_config.h b/boards/ark/fpv/src/hw_config.h index f677802289..8a08be111d 100644 --- a/boards/ark/fpv/src/hw_config.h +++ b/boards/ark/fpv/src/hw_config.h @@ -28,8 +28,6 @@ * INTERFACE_USART 1 - (Optional) Scan and use the Serial interface for bootloading * USBDEVICESTRING "PX4 BL FMU v2.x" - USB id string * USBPRODUCTID 0x0011 - PID Should match defconfig - * BOOT_DELAY_ADDRESS 0x000001a0 - (Optional) From the linker script from Linker Script to get a custom - * delay provided by an APP FW * BOARD_TYPE 9 - Must match .prototype boad_id * _FLASH_KBYTES (*(uint16_t *)0x1fff7a22) - Run time flash size detection * BOARD_FLASH_SECTORS ((_FLASH_KBYTES == 0x400) ? 11 : 23) - Run time determine the physical last sector @@ -70,7 +68,6 @@ //#define USE_VBUS_PULL_DOWN #define INTERFACE_USART 1 #define INTERFACE_USART_CONFIG "/dev/ttyS0,921600" -#define BOOT_DELAY_ADDRESS 0x000001a0 #define BOARD_TYPE 59 #define _FLASH_KBYTES (*(uint32_t *)0x1FF1E880) #define BOARD_FLASH_SECTORS (14) diff --git a/boards/ark/fpv/src/spix_sync.c b/boards/ark/fpv/src/spix_sync.c index 056e38e75f..02b7112430 100644 --- a/boards/ark/fpv/src/spix_sync.c +++ b/boards/ark/fpv/src/spix_sync.c @@ -145,7 +145,7 @@ void spix_sync_channel_init(unsigned channel) { /* Only initialize used channels */ - if (spix_sync_channels[channel].timer_channel) { + if (spix_sync_channels[channel].gpio_out) { unsigned timer = spix_sync_channels[channel].timer_index; @@ -156,22 +156,22 @@ void spix_sync_channel_init(unsigned channel) /* configure the channel */ switch (spix_sync_channels[channel].timer_channel) { - case 1: + case 0: rCCMR1(timer) |= (GTIM_CCMR_MODE_PWM1 << GTIM_CCMR1_OC1M_SHIFT) | GTIM_CCMR1_OC1PE; rCCER(timer) |= polarity | GTIM_CCER_CC1E; break; - case 2: + case 1: rCCMR1(timer) |= (GTIM_CCMR_MODE_PWM1 << GTIM_CCMR1_OC2M_SHIFT) | GTIM_CCMR1_OC2PE; rCCER(timer) |= polarity | GTIM_CCER_CC2E; break; - case 3: + case 2: rCCMR2(timer) |= (GTIM_CCMR_MODE_PWM1 << GTIM_CCMR2_OC3M_SHIFT) | GTIM_CCMR2_OC3PE; rCCER(timer) |= polarity | GTIM_CCER_CC3E; break; - case 4: + case 3: rCCMR2(timer) |= (GTIM_CCMR_MODE_PWM1 << GTIM_CCMR2_OC4M_SHIFT) | GTIM_CCMR2_OC4PE; rCCER(timer) |= polarity | GTIM_CCER_CC4E; break; @@ -205,19 +205,19 @@ spix_sync_servo_set(unsigned channel, uint8_t cvalue) switch (spix_sync_channels[channel].timer_channel) { - case 1: + case 0: rCCR1(timer) = value; break; - case 2: + case 1: rCCR2(timer) = value; break; - case 3: + case 2: rCCR3(timer) = value; break; - case 4: + case 3: rCCR4(timer) = value; break; @@ -239,25 +239,25 @@ unsigned spix_sync_servo_get(unsigned channel) /* test timer for validity */ if ((spix_sync_timers[timer].base == 0) || - (spix_sync_channels[channel].timer_channel == 0)) { + (spix_sync_channels[channel].gpio_out == 0)) { return 0; } /* configure the channel */ switch (spix_sync_channels[channel].timer_channel) { - case 1: + case 0: value = rCCR1(timer); break; - case 2: + case 1: value = rCCR2(timer); break; - case 3: + case 2: value = rCCR3(timer); break; - case 4: + case 3: value = rCCR4(timer); break; } diff --git a/boards/ark/mag/nuttx-config/scripts/script.ld b/boards/ark/mag/nuttx-config/scripts/script.ld index 2f4769b8f5..77322893e3 100644 --- a/boards/ark/mag/nuttx-config/scripts/script.ld +++ b/boards/ark/mag/nuttx-config/scripts/script.ld @@ -64,8 +64,6 @@ EXTERN(_vectors) /* force the vectors to be included in the output */ * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { diff --git a/boards/ark/pi6x/init/rc.board_defaults b/boards/ark/pi6x/init/rc.board_defaults index 9ddf3f88c4..eb2ad8bf41 100644 --- a/boards/ark/pi6x/init/rc.board_defaults +++ b/boards/ark/pi6x/init/rc.board_defaults @@ -21,17 +21,17 @@ param set-default SENS_EN_INA226 1 # TODO: Tune the following parameters param set-default SENS_EN_THERMAL 1 -param set-default SENS_IMU_TEMP 10.0 -#param set-default SENS_IMU_TEMP_FF 0.0 -#param set-default SENS_IMU_TEMP_I 0.025 -#param set-default SENS_IMU_TEMP_P 1.0 +param set-default HEATER1_TEMP 10.0 +#param set-default HEATER1_TEMP_FF 0.0 +#param set-default HEATER1_TEMP_I 0.025 +#param set-default HEATER1_TEMP_P 1.0 param set-default UAVCAN_ESC_IFACE 1 if ver hwtypecmp ARKPI6X000 then # TODO: Add the correct sensor ID - param set-default SENS_TEMP_ID 2490378 + param set-default HEATER1_IMU_ID 2490378 fi param set-default EKF2_MULTI_IMU 0 diff --git a/boards/ark/pi6x/init/rc.board_sensors b/boards/ark/pi6x/init/rc.board_sensors index c128fbca35..32b24cb11d 100644 --- a/boards/ark/pi6x/init/rc.board_sensors +++ b/boards/ark/pi6x/init/rc.board_sensors @@ -38,5 +38,5 @@ afbrs50 start # Start an external PWM generator if param greater PCA9685_EN_BUS 0 then - pca9685_pwm_out start + pca9685_pwm_out start -X fi diff --git a/boards/ark/pi6x/mavlink-dev.px4board b/boards/ark/pi6x/mavlink-dev.px4board new file mode 100644 index 0000000000..83cac6e17b --- /dev/null +++ b/boards/ark/pi6x/mavlink-dev.px4board @@ -0,0 +1 @@ +CONFIG_MAVLINK_DIALECT="development" diff --git a/boards/ark/pi6x/nuttx-config/scripts/bootloader_script.ld b/boards/ark/pi6x/nuttx-config/scripts/bootloader_script.ld index b0515c91c7..4000b99f4a 100644 --- a/boards/ark/pi6x/nuttx-config/scripts/bootloader_script.ld +++ b/boards/ark/pi6x/nuttx-config/scripts/bootloader_script.ld @@ -132,20 +132,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/ark/pi6x/nuttx-config/scripts/script.ld b/boards/ark/pi6x/nuttx-config/scripts/script.ld index 8e6dca3e49..9dd8cef679 100644 --- a/boards/ark/pi6x/nuttx-config/scripts/script.ld +++ b/boards/ark/pi6x/nuttx-config/scripts/script.ld @@ -131,7 +131,6 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) EXTERN(board_get_manifest) SECTIONS @@ -140,12 +139,6 @@ SECTIONS _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/ark/pi6x/src/board_config.h b/boards/ark/pi6x/src/board_config.h index b6996ed883..c76e42bded 100644 --- a/boards/ark/pi6x/src/board_config.h +++ b/boards/ark/pi6x/src/board_config.h @@ -188,8 +188,10 @@ /* HEATER * PWM in future */ -#define GPIO_HEATER_OUTPUT /* PB10 T2CH3 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTB|GPIO_PIN10) -#define HEATER_OUTPUT_EN(on_true) px4_arch_gpiowrite(GPIO_HEATER_OUTPUT, (on_true)) +#define GPIO_HEATER_OUTPUT +#define HEATER_NUM 1 +#define GPIO_HEATER1_OUTPUT /* PB10 T2CH3 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTB|GPIO_PIN10) +#define HEATER1_OUTPUT_EN(on_true) px4_arch_gpiowrite(GPIO_HEATER1_OUTPUT, (on_true)) /* PE6 is nARMED * The GPIO will be set as input while not armed HW will have external HW Pull UP. @@ -206,6 +208,15 @@ */ #define DIRECT_PWM_OUTPUT_CHANNELS 8 +#define GPIO_FMU_CH1 /* PI0 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTI|GPIO_PIN0) +#define GPIO_FMU_CH2 /* PH12 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTH|GPIO_PIN12) +#define GPIO_FMU_CH3 /* PH11 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTH|GPIO_PIN11) +#define GPIO_FMU_CH4 /* PH10 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTH|GPIO_PIN10) +#define GPIO_FMU_CH5 /* PD13 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTD|GPIO_PIN13) +#define GPIO_FMU_CH6 /* PD14 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTD|GPIO_PIN14) +#define GPIO_FMU_CH7 /* PH6 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTH|GPIO_PIN6) +#define GPIO_FMU_CH8 /* PH9 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTH|GPIO_PIN9) + #define GPIO_FMU_CAP /* PE11 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTE|GPIO_PIN11) #define GPIO_SPIX_SYNC /* PE9 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTE|GPIO_PIN9) @@ -300,9 +311,6 @@ /* This board provides a DMA pool and APIs */ #define BOARD_DMA_ALLOC_POOL_SIZE 5120 -/* This board has 4 DMA channels available for bidirectional dshot */ -#define BOARD_DMA_NUM_DSHOT_CHANNELS 4 - /* This board provides the board_on_reset interface */ #define BOARD_HAS_ON_RESET 1 @@ -324,7 +332,7 @@ GPIO_HW_VER_REV_DRIVE, \ GPIO_CAN1_TX, \ GPIO_CAN1_RX, \ - GPIO_HEATER_OUTPUT, \ + GPIO_HEATER1_OUTPUT, \ GPIO_VDD_5V_HIPOWER_nEN, \ GPIO_VDD_5V_HIPOWER_nOC, \ GPIO_VDD_3V3_SD_CARD_EN, \ @@ -332,6 +340,14 @@ GPIO_NFC_GPIO, \ GPIO_TONE_ALARM_IDLE, \ GPIO_nARMED_INIT, \ + GPIO_FMU_CH1, \ + GPIO_FMU_CH2, \ + GPIO_FMU_CH3, \ + GPIO_FMU_CH4, \ + GPIO_FMU_CH5, \ + GPIO_FMU_CH6, \ + GPIO_FMU_CH7, \ + GPIO_FMU_CH8, \ GPIO_FMU_CAP, \ GPIO_SPIX_SYNC \ } diff --git a/boards/ark/pi6x/src/hw_config.h b/boards/ark/pi6x/src/hw_config.h index 52c70ec748..ae542c7267 100644 --- a/boards/ark/pi6x/src/hw_config.h +++ b/boards/ark/pi6x/src/hw_config.h @@ -28,8 +28,6 @@ * INTERFACE_USART 1 - (Optional) Scan and use the Serial interface for bootloading * USBDEVICESTRING "PX4 BL FMU v2.x" - USB id string * USBPRODUCTID 0x0011 - PID Should match defconfig - * BOOT_DELAY_ADDRESS 0x000001a0 - (Optional) From the linker script from Linker Script to get a custom - * delay provided by an APP FW * BOARD_TYPE 9 - Must match .prototype boad_id * _FLASH_KBYTES (*(uint16_t *)0x1fff7a22) - Run time flash size detection * BOARD_FLASH_SECTORS ((_FLASH_KBYTES == 0x400) ? 11 : 23) - Run time determine the physical last sector @@ -70,7 +68,6 @@ //#define USE_VBUS_PULL_DOWN #define INTERFACE_USART 1 #define INTERFACE_USART_CONFIG "/dev/ttyS5,921600" -#define BOOT_DELAY_ADDRESS 0x000001a0 #define BOARD_TYPE 58 #define _FLASH_KBYTES (*(uint32_t *)0x1FF1E880) #define BOARD_FLASH_SECTORS (14) diff --git a/boards/ark/pi6x/src/spi.cpp b/boards/ark/pi6x/src/spi.cpp index bae9af7622..dd9a1f508a 100644 --- a/boards/ark/pi6x/src/spi.cpp +++ b/boards/ark/pi6x/src/spi.cpp @@ -48,7 +48,7 @@ constexpr px4_spi_bus_all_hw_t px4_spi_buses_all_hw[BOARD_NUM_SPI_CFG_HW_VERSION }), // initSPIBus(SPI::Bus::SPI4, { // // no devices - // TODO: if enabled, remove GPIO_VDD_3V3_SENSORS4_EN from board_config.h + // TODO: if enabled, remove GPIO_VDD_3V3_SENSORS_EN from board_config.h // }, {GPIO::PortG, GPIO::Pin8}), // initSPIBus(SPI::Bus::SPI5, { // initSPIDevice(SPIDEV_FLASH(0), SPI::CS{GPIO::PortG, GPIO::Pin7}) @@ -69,7 +69,7 @@ constexpr px4_spi_bus_all_hw_t px4_spi_buses_all_hw[BOARD_NUM_SPI_CFG_HW_VERSION }), // initSPIBus(SPI::Bus::SPI4, { // // no devices - // TODO: if enabled, remove GPIO_VDD_3V3_SENSORS4_EN from board_config.h + // TODO: if enabled, remove GPIO_VDD_3V3_SENSORS_EN from board_config.h // }, {GPIO::PortG, GPIO::Pin8}), // initSPIBus(SPI::Bus::SPI5, { // initSPIDevice(SPIDEV_FLASH(0), SPI::CS{GPIO::PortG, GPIO::Pin7}) diff --git a/boards/ark/pi6x/src/spix_sync.c b/boards/ark/pi6x/src/spix_sync.c index 056e38e75f..02b7112430 100644 --- a/boards/ark/pi6x/src/spix_sync.c +++ b/boards/ark/pi6x/src/spix_sync.c @@ -145,7 +145,7 @@ void spix_sync_channel_init(unsigned channel) { /* Only initialize used channels */ - if (spix_sync_channels[channel].timer_channel) { + if (spix_sync_channels[channel].gpio_out) { unsigned timer = spix_sync_channels[channel].timer_index; @@ -156,22 +156,22 @@ void spix_sync_channel_init(unsigned channel) /* configure the channel */ switch (spix_sync_channels[channel].timer_channel) { - case 1: + case 0: rCCMR1(timer) |= (GTIM_CCMR_MODE_PWM1 << GTIM_CCMR1_OC1M_SHIFT) | GTIM_CCMR1_OC1PE; rCCER(timer) |= polarity | GTIM_CCER_CC1E; break; - case 2: + case 1: rCCMR1(timer) |= (GTIM_CCMR_MODE_PWM1 << GTIM_CCMR1_OC2M_SHIFT) | GTIM_CCMR1_OC2PE; rCCER(timer) |= polarity | GTIM_CCER_CC2E; break; - case 3: + case 2: rCCMR2(timer) |= (GTIM_CCMR_MODE_PWM1 << GTIM_CCMR2_OC3M_SHIFT) | GTIM_CCMR2_OC3PE; rCCER(timer) |= polarity | GTIM_CCER_CC3E; break; - case 4: + case 3: rCCMR2(timer) |= (GTIM_CCMR_MODE_PWM1 << GTIM_CCMR2_OC4M_SHIFT) | GTIM_CCMR2_OC4PE; rCCER(timer) |= polarity | GTIM_CCER_CC4E; break; @@ -205,19 +205,19 @@ spix_sync_servo_set(unsigned channel, uint8_t cvalue) switch (spix_sync_channels[channel].timer_channel) { - case 1: + case 0: rCCR1(timer) = value; break; - case 2: + case 1: rCCR2(timer) = value; break; - case 3: + case 2: rCCR3(timer) = value; break; - case 4: + case 3: rCCR4(timer) = value; break; @@ -239,25 +239,25 @@ unsigned spix_sync_servo_get(unsigned channel) /* test timer for validity */ if ((spix_sync_timers[timer].base == 0) || - (spix_sync_channels[channel].timer_channel == 0)) { + (spix_sync_channels[channel].gpio_out == 0)) { return 0; } /* configure the channel */ switch (spix_sync_channels[channel].timer_channel) { - case 1: + case 0: value = rCCR1(timer); break; - case 2: + case 1: value = rCCR2(timer); break; - case 3: + case 2: value = rCCR3(timer); break; - case 4: + case 3: value = rCCR4(timer); break; } diff --git a/boards/ark/septentrio-gps/nuttx-config/scripts/script.ld b/boards/ark/septentrio-gps/nuttx-config/scripts/script.ld index 2f4769b8f5..77322893e3 100644 --- a/boards/ark/septentrio-gps/nuttx-config/scripts/script.ld +++ b/boards/ark/septentrio-gps/nuttx-config/scripts/script.ld @@ -64,8 +64,6 @@ EXTERN(_vectors) /* force the vectors to be included in the output */ * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { diff --git a/boards/ark/teseo-gps/nuttx-config/scripts/script.ld b/boards/ark/teseo-gps/nuttx-config/scripts/script.ld index 2f4769b8f5..77322893e3 100644 --- a/boards/ark/teseo-gps/nuttx-config/scripts/script.ld +++ b/boards/ark/teseo-gps/nuttx-config/scripts/script.ld @@ -64,8 +64,6 @@ EXTERN(_vectors) /* force the vectors to be included in the output */ * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { diff --git a/boards/ark/x20-gps/nuttx-config/scripts/script.ld b/boards/ark/x20-gps/nuttx-config/scripts/script.ld index 2f4769b8f5..77322893e3 100644 --- a/boards/ark/x20-gps/nuttx-config/scripts/script.ld +++ b/boards/ark/x20-gps/nuttx-config/scripts/script.ld @@ -64,8 +64,6 @@ EXTERN(_vectors) /* force the vectors to be included in the output */ * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { diff --git a/boards/atl/mantis-edu/default.px4board b/boards/atl/mantis-edu/default.px4board index fd76e4d6ca..f3b2cc9019 100644 --- a/boards/atl/mantis-edu/default.px4board +++ b/boards/atl/mantis-edu/default.px4board @@ -1,5 +1,6 @@ CONFIG_BOARD_TOOLCHAIN="arm-none-eabi" CONFIG_BOARD_ARCHITECTURE="cortex-m7" +CONFIG_BOARD_NO_SDCARD=y CONFIG_DRIVERS_ADC_BOARD_ADC=y CONFIG_DRIVERS_BAROMETER_MAIERTEK_MPC2520=y CONFIG_DRIVERS_CDCACM_AUTOSTART=y diff --git a/boards/atl/mantis-edu/init/rc.board_defaults b/boards/atl/mantis-edu/init/rc.board_defaults index 2264eb7c91..ed781ceaa0 100644 --- a/boards/atl/mantis-edu/init/rc.board_defaults +++ b/boards/atl/mantis-edu/init/rc.board_defaults @@ -7,8 +7,6 @@ param set-default SYS_AUTOSTART 4061 param set-default BAT1_V_DIV 9.0 -param set-default COM_ARM_SDCARD 0 - param set-default SENS_EXT_I2C_PRB 0 param set-default EV_TSK_STAT_DIS 1 diff --git a/boards/atl/mantis-edu/nuttx-config/scripts/script.ld b/boards/atl/mantis-edu/nuttx-config/scripts/script.ld index fc70ef1de8..342fea7678 100644 --- a/boards/atl/mantis-edu/nuttx-config/scripts/script.ld +++ b/boards/atl/mantis-edu/nuttx-config/scripts/script.ld @@ -90,7 +90,6 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) EXTERN(_main_toc) SECTIONS @@ -99,12 +98,6 @@ SECTIONS _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xb4ecc2925d7d05c5) - . += 8; *(.main_toc) *(.text .text.*) *(.fixup) diff --git a/boards/atl/mantis-edu/src/board_config.h b/boards/atl/mantis-edu/src/board_config.h index b8c1709a93..9f7bbcafbe 100644 --- a/boards/atl/mantis-edu/src/board_config.h +++ b/boards/atl/mantis-edu/src/board_config.h @@ -121,7 +121,9 @@ #define BOARD_REAR_LED_MASK (1 << 1) | (1 << 2) /* HEATER */ -#define GPIO_HEATER_OUTPUT /* PA7 T14CH1 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTA|GPIO_PIN7) +#define GPIO_HEATER_OUTPUT +#define HEATER_NUM 1 +#define GPIO_HEATER1_OUTPUT /* PA7 T14CH1 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTA|GPIO_PIN7) #define BOARD_HAS_LED_PWM 1 #define BOARD_LED_PWM_DRIVE_ACTIVE_LOW 1 @@ -182,7 +184,7 @@ PX4_ADC_GPIO, \ GPIO_HW_REV_DRIVE, \ GPIO_HW_VER_DRIVE, \ - GPIO_HEATER_OUTPUT, \ + GPIO_HEATER1_OUTPUT, \ GPIO_VDD_3V3_SD_CARD_EN, \ GPIO_OTGFS_VBUS \ } diff --git a/boards/auterion/fmu-v6s/default.px4board b/boards/auterion/fmu-v6s/default.px4board index 2a4cbbe8a4..514794a521 100644 --- a/boards/auterion/fmu-v6s/default.px4board +++ b/boards/auterion/fmu-v6s/default.px4board @@ -55,6 +55,7 @@ CONFIG_MODULES_HARDFAULT_STREAM=y CONFIG_MODULES_LAND_DETECTOR=y CONFIG_MODULES_LANDING_TARGET_ESTIMATOR=y CONFIG_MODULES_LOAD_MON=y +CONFIG_MODULES_TASK_WATCHDOG=y CONFIG_MODULES_LOGGER=y CONFIG_LOGGER_STACK_SIZE=4100 CONFIG_MODULES_MAG_BIAS_ESTIMATOR=y diff --git a/boards/auterion/fmu-v6s/init/rc.board_early b/boards/auterion/fmu-v6s/init/rc.board_early new file mode 100644 index 0000000000..697f5ec9c0 --- /dev/null +++ b/boards/auterion/fmu-v6s/init/rc.board_early @@ -0,0 +1,19 @@ +#!/bin/sh +# +# Board early init. +# +# On FRAM boards STORAGE_AVAILABLE=yes will set the USE_* flags. Additional +# enable required for task watchdog as this is not a generally used feature. +# On EEPROM boards: Only airframes and params are needed. +# + +if mft query -q -k MTD -s MTD_PARAMETERS -v /mnt/microsd +then + # Start the task_watchdog as we do not have the logger watchdog + set USE_TASK_WATCHDOG yes +else + set PARAM_FILE /fs/microsd/params + set STORAGE_CHECK no + set USE_EXTERNAL_AIRFRAMES yes + set USE_ALT_UPDATE_DIRS yes +fi diff --git a/boards/auterion/fmu-v6s/init/rc.board_sensors b/boards/auterion/fmu-v6s/init/rc.board_sensors index b533c9931a..9b48e805e6 100644 --- a/boards/auterion/fmu-v6s/init/rc.board_sensors +++ b/boards/auterion/fmu-v6s/init/rc.board_sensors @@ -77,5 +77,5 @@ ist8310 -X -b 1 -R 10 start # Start an external PWM generator if param greater PCA9685_EN_BUS 0 then - pca9685_pwm_out start + pca9685_pwm_out start -X fi diff --git a/boards/auterion/fmu-v6s/nuttx-config/scripts/bootloader_script.ld b/boards/auterion/fmu-v6s/nuttx-config/scripts/bootloader_script.ld index 706140b466..2078b0e969 100644 --- a/boards/auterion/fmu-v6s/nuttx-config/scripts/bootloader_script.ld +++ b/boards/auterion/fmu-v6s/nuttx-config/scripts/bootloader_script.ld @@ -132,20 +132,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/auterion/fmu-v6s/nuttx-config/scripts/script.ld b/boards/auterion/fmu-v6s/nuttx-config/scripts/script.ld index 89c8913ddf..d665df024f 100644 --- a/boards/auterion/fmu-v6s/nuttx-config/scripts/script.ld +++ b/boards/auterion/fmu-v6s/nuttx-config/scripts/script.ld @@ -131,7 +131,6 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) EXTERN(board_get_manifest) SECTIONS @@ -140,12 +139,6 @@ SECTIONS _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/auterion/fmu-v6s/src/board_config.h b/boards/auterion/fmu-v6s/src/board_config.h index 4e40de72eb..beb33051d5 100644 --- a/boards/auterion/fmu-v6s/src/board_config.h +++ b/boards/auterion/fmu-v6s/src/board_config.h @@ -202,6 +202,9 @@ extern void stm32_spiinitialize(void); extern void board_peripheral_reset(int ms); +/* Initialise the FRAM MTD. */ +extern void board_configure_fram(void); + #include #endif /* __ASSEMBLY__ */ diff --git a/boards/auterion/fmu-v6s/src/hw_config.h b/boards/auterion/fmu-v6s/src/hw_config.h index 5979d95fb6..62cf19440b 100644 --- a/boards/auterion/fmu-v6s/src/hw_config.h +++ b/boards/auterion/fmu-v6s/src/hw_config.h @@ -28,8 +28,6 @@ * INTERFACE_USART 1 - (Optional) Scan and use the Serial interface for bootloading * USBDEVICESTRING "PX4 BL FMU v2.x" - USB id string * USBPRODUCTID 0x0011 - PID Should match defconfig - * BOOT_DELAY_ADDRESS 0x000001a0 - (Optional) From the linker script from Linker Script to get a custom - * delay provided by an APP FW * BOARD_TYPE 9 - Must match .prototype boad_id * _FLASH_KBYTES (*(uint16_t *)0x1fff7a22) - Run time flash size detection * BOARD_FLASH_SECTORS ((_FLASH_KBYTES == 0x400) ? 11 : 23) - Run time determine the physical last sector @@ -64,7 +62,6 @@ #define INTERFACE_USB 0 #define INTERFACE_USART 1 #define INTERFACE_USART_CONFIG "/dev/ttyS0,1500000" -#define BOOT_DELAY_ADDRESS 0x000001a0 #define BOARD_TYPE 60 #define _FLASH_KBYTES (*(uint32_t *)0x1FF1E880) #define BOARD_FLASH_SECTORS (15) diff --git a/boards/auterion/fmu-v6s/src/init.c b/boards/auterion/fmu-v6s/src/init.c index 39cfe5c914..784ce509a1 100644 --- a/boards/auterion/fmu-v6s/src/init.c +++ b/boards/auterion/fmu-v6s/src/init.c @@ -55,10 +55,12 @@ #include #include +#include #include #include #include #include +#include #include #include #include @@ -70,10 +72,14 @@ #include #include #include +#include #include -#include +#include #include #include +#include +#include +#include /**************************************************************************** * Pre-Processor Definitions @@ -158,6 +164,80 @@ stm32_boardinitialize(void) px4_gpio_init(gpio, arraySize(gpio)); } +#if !defined(BOOTLOADER) +/**************************************************************************** + * Name: eeprom_read_and_check_mft + * + * Description: + * Read an mtd_mft_v0_t from the EEPROM at the given byte offset and + * validate its CRC. Returns true if the record has a recognised version + * field and a matching CRC16. + ****************************************************************************/ + +static bool eeprom_read_and_check_mft(struct i2c_master_s *i2c, uint16_t address) +{ + uint8_t addr_write[2] = { (uint8_t)(address >> 8), (uint8_t)(address & 0xFF) }; + mtd_mft_v0_t mft = {}; + struct i2c_msg_s msgs[2] = { + { .frequency = 400000, .addr = 0x50, .flags = 0, .buffer = addr_write, .length = sizeof(addr_write) }, + { .frequency = 400000, .addr = 0x50, .flags = I2C_M_READ, .buffer = (uint8_t *) &mft, .length = sizeof(mft) }, + }; + + int retries = 5; + + while (I2C_TRANSFER(i2c, msgs, 2) != OK) { + if (--retries == 0) { + syslog(LOG_WARNING, "[boot] EEPROM I2C comm failed\n"); + return false; + } + } + + if (mft.version.id != MTD_MFT_v0) { return false; } + + uint16_t computed = crc16_signature(CRC16_INITIAL, sizeof(mft) - sizeof(mft.crc), (const uint8_t *)&mft); + return computed == mft.crc; +} + +/**************************************************************************** + * Name: detect_layout_is_fram + * + * Description: + * Determine which EEPROM layout is present by reading MTD_MFT_VER from + * the two possible byte offsets and validating its CRC. + ****************************************************************************/ + +static bool detect_layout_is_fram(void) +{ + struct i2c_master_s *i2c = px4_i2cbus_initialize(4); + bool ret; + + if (!i2c) { + syslog(LOG_WARNING, "[boot] EEPROM I2C init failed, defaulting to FRAM layout\n"); + ret = true; + goto out; + } + + /* FRAM-variant: MTD_MFT_VER after MTD_CALDATA (224 blocks x 32 B). */ + if (eeprom_read_and_check_mft(i2c, 224u * 32u)) { + ret = true; + goto out; + } + + /* EEPROM-only: MTD_MFT_VER is the first partition (0 blocks x 32 B)*/ + if (eeprom_read_and_check_mft(i2c, 0u)) { + ret = false; + goto out; + } + + /* Neither offset contains a valid record, default to FRAM layout. */ + ret = true; + +out: + px4_i2cbus_uninitialize(i2c); + return ret; +} +#endif /* !defined(BOOTLOADER) */ + /**************************************************************************** * Name: board_app_initialize * @@ -187,15 +267,19 @@ __EXPORT int board_app_initialize(uintptr_t arg) { #if !defined(BOOTLOADER) /* Need hrt running before using the ADC */ - px4_platform_init(); - // Use the default HW_VER_REV(0x0,0x0) for Ramtron - + /* First SPI init. HW version is not enabled yet, so only always-enabled + * buses/devices can be used. */ stm32_spiinitialize(); - /* Configure the HW based on the manifest */ + bool fram_available = detect_layout_is_fram(); + if (fram_available) { + board_configure_fram(); + } + + /* Configure the HW based on the manifest */ px4_platform_configure(); if (OK == board_determine_hw_info()) { @@ -206,14 +290,24 @@ __EXPORT int board_app_initialize(uintptr_t arg) syslog(LOG_ERR, "[boot] Failed to read HW revision and version\n"); } - /* Configure the Actual SPI interfaces (after we determined the HW version) */ + /* EEPROM-only boards use a 128Kbit chip: 512 pages × 32 B = 16 KB. + * FRAM boards use a 64Kbit EEPROM: 256 pages × 32 B = 8 KB. + * Always use 32-byte page writes (safe for 64-byte page chips too). */ + unsigned int mtd_count = 0; + mtd_instance_s **instances = px4_mtd_get_instances(&mtd_count); + uint16_t eeprom_npages = fram_available ? 256 : 512; + /* instances[0] is always EEPROM on both board variants. */ + if (mtd_count > 0 && instances[0]->mtd_dev != NULL) { + px4_at24c_set_npages(instances[0]->mtd_dev, eeprom_npages); + } + + /* Second SPI init. Now HW version is determined and complete init can be done. */ stm32_spiinitialize(); board_spi_reset(10, 0xffff); /* Configure the DMA allocator */ - if (board_dma_alloc_init() < 0) { syslog(LOG_ERR, "[boot] DMA alloc FAILED\n"); } @@ -234,7 +328,33 @@ __EXPORT int board_app_initialize(uintptr_t arg) led_on(LED_RED); } - if (nx_mount("/dev/mtdblock0", "/fs/microsd", "littlefs", 0, "autoformat") != 0) { + /* Mount LittleFS as /fs/microsd: + * FRAM boards: EEPROM->mtdblock0-4, FRAM->mtdblock5 (LittleFS). + * EEPROM-only: EEPROM->mtdblock0-2, FTL on free EEPROM region mtdblock3 (LittleFS). */ + const char *lfs_dev; + + if (fram_available) { + lfs_dev = "/dev/mtdblock5"; + + } else { + if (mtd_count > 0 && instances[0]->mtd_dev != NULL) { + FAR struct mtd_dev_s *eeprom_fs = mtd_partition(instances[0]->mtd_dev, 3, eeprom_npages - 3); + + if (!eeprom_fs || ftl_initialize(3, eeprom_fs) != 0) { + syslog(LOG_ERR, "[boot] EEPROM: FTL init failed\n"); + led_on(LED_RED); + } + + } else { + syslog(LOG_ERR, "[boot] EEPROM not found\n"); + led_on(LED_RED); + } + + lfs_dev = "/dev/mtdblock3"; + } + + if (nx_mount(lfs_dev, "/fs/microsd", "littlefs", 0, "autoformat") != 0) { + syslog(LOG_ERR, "[boot] failed to mount /fs/microsd\n"); led_on(LED_RED); } diff --git a/boards/auterion/fmu-v6s/src/mtd.cpp b/boards/auterion/fmu-v6s/src/mtd.cpp index 97a2f3f88d..a6fbeea063 100644 --- a/boards/auterion/fmu-v6s/src/mtd.cpp +++ b/boards/auterion/fmu-v6s/src/mtd.cpp @@ -37,16 +37,15 @@ #include #include -static const px4_mft_device_t spi4 = { // FM25V02A on FMUM native: 128K X 8, emulated as (1024 Blocks of 32) +static const px4_mft_device_t spi4 = { // MB85RS1MT on FMUM native: 1Mbit, emulated as (1024 Blocks of 32) .bus_type = px4_mft_device_t::SPI, .devid = SPIDEV_FLASH(0) }; -static const px4_mft_device_t i2c4 = { // 24LC64T 8K 32 X 256 +static const px4_mft_device_t i2c4 = { // 24LC64T 8K 32 X 256 or 16K for EEPROM only boards .bus_type = px4_mft_device_t::I2C, .devid = PX4_MK_I2C_DEVID(4, 0x50) }; - static const px4_mtd_entry_t fmum_fram = { .device = &spi4, .npart = 1, @@ -59,7 +58,36 @@ static const px4_mtd_entry_t fmum_fram = { }, }; +/* EEPROM layout for EEPROM-only boards (128Kbit, 512 pages x 32B = 16KB). */ +static constexpr uint32_t kEepromParts = 3; + static const px4_mtd_entry_t fmum_eeprom = { + .device = &i2c4, + .npart = kEepromParts, + .partd = { + { + .type = MTD_MFT_VER, + .path = "/fs/mtd_mft_ver", + .nblocks = 1 + }, + { + .type = MTD_MFT_REV, + .path = "/fs/mtd_mft_rev", + .nblocks = 1 + }, + { + .type = MTD_NET, + .path = "/fs/mtd_net", + .nblocks = 1 + } + }, +}; +static_assert(kEepromParts == 3, + "EEPROM partition count changed: update init.c accordingly"); + +/* EEPROM layout for FRAM boards (64Kbit, 256 pages x 32B = 8KB). + * Matches existing layout for backwards compatibility reasons. */ +static const px4_mtd_entry_t fmum_eeprom_fram = { .device = &i2c4, .npart = 5, .partd = { @@ -81,22 +109,24 @@ static const px4_mtd_entry_t fmum_eeprom = { { .type = MTD_ID, .path = "/fs/mtd_id", - .nblocks = 8 // 256 = 32 * 8 + .nblocks = 8 }, { .type = MTD_NET, .path = "/fs/mtd_net", - .nblocks = 8 // 256 = 32 * 8 + .nblocks = 8 } }, }; static const px4_mtd_manifest_t board_mtd_config = { - .nconfigs = 2, - .entries = { - &fmum_fram, - &fmum_eeprom - } + .nconfigs = 1, + .entries = { &fmum_eeprom } +}; + +static const px4_mtd_manifest_t board_mtd_config_fram = { + .nconfigs = 2, + .entries = { &fmum_eeprom_fram, &fmum_fram } }; static const px4_mft_entry_s mtd_mft = { @@ -104,20 +134,36 @@ static const px4_mft_entry_s mtd_mft = { .pmft = (void *) &board_mtd_config, }; +static const px4_mft_entry_s mtd_mft_fram = { + .type = MTD, + .pmft = (void *) &board_mtd_config_fram, +}; + static const px4_mft_entry_s mft_mft = { .type = MFT, .pmft = (void *) system_query_manifest, }; +/* Manifest for EEPROM only boards */ static const px4_mft_s mft = { .nmft = 2, - .mfts = { - &mtd_mft, - &mft_mft, - } + .mfts = { &mtd_mft, &mft_mft } }; +/* Manifest for EEPROM + FRAM boards */ +static const px4_mft_s mft_fram = { + .nmft = 2, + .mfts = { &mtd_mft_fram, &mft_mft } +}; + +static const px4_mft_s *g_manifest = &mft; + const px4_mft_s *board_get_manifest(void) { - return &mft; + return g_manifest; +} + +void board_configure_fram() +{ + g_manifest = &mft_fram; } diff --git a/boards/auterion/fmu-v6x/nuttx-config/scripts/bootloader_script.ld b/boards/auterion/fmu-v6x/nuttx-config/scripts/bootloader_script.ld index 037356efd3..a325dafc1f 100644 --- a/boards/auterion/fmu-v6x/nuttx-config/scripts/bootloader_script.ld +++ b/boards/auterion/fmu-v6x/nuttx-config/scripts/bootloader_script.ld @@ -132,20 +132,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/auterion/fmu-v6x/nuttx-config/scripts/script.ld b/boards/auterion/fmu-v6x/nuttx-config/scripts/script.ld index 860eb2ddd9..60718994cb 100644 --- a/boards/auterion/fmu-v6x/nuttx-config/scripts/script.ld +++ b/boards/auterion/fmu-v6x/nuttx-config/scripts/script.ld @@ -131,7 +131,6 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) EXTERN(board_get_manifest) SECTIONS @@ -140,12 +139,6 @@ SECTIONS _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/auterion/fmu-v6x/src/board_config.h b/boards/auterion/fmu-v6x/src/board_config.h index 671a1c3e5f..7f9825b14c 100644 --- a/boards/auterion/fmu-v6x/src/board_config.h +++ b/boards/auterion/fmu-v6x/src/board_config.h @@ -224,8 +224,10 @@ /* HEATER * PWM in future */ -#define GPIO_HEATER_OUTPUT /* PB10 T2CH3 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTB|GPIO_PIN10) -#define HEATER_OUTPUT_EN(on_true) px4_arch_gpiowrite(GPIO_HEATER_OUTPUT, (on_true)) +#define GPIO_HEATER_OUTPUT +#define HEATER_NUM 1 +#define GPIO_HEATER1_OUTPUT /* PB10 T2CH3 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTB|GPIO_PIN10) +#define HEATER1_OUTPUT_EN(on_true) px4_arch_gpiowrite(GPIO_HEATER1_OUTPUT, (on_true)) /* PE6 is nARMED * The GPIO will be set as input while not armed HW will have external HW Pull UP. @@ -260,7 +262,7 @@ #define GPIO_VDD_5V_PERIPH_nOC /* PE15 */ (GPIO_INPUT |GPIO_FLOAT|GPIO_PORTE|GPIO_PIN15) #define GPIO_VDD_5V_HIPOWER_nEN /* PG10 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_SET|GPIO_PORTG|GPIO_PIN10) #define GPIO_VDD_5V_HIPOWER_nOC /* PF13 */ (GPIO_INPUT |GPIO_FLOAT|GPIO_PORTF|GPIO_PIN13) -#define GPIO_VDD_3V3_SENSORS4_EN /* PG8 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTG|GPIO_PIN8) +#define GPIO_VDD_3V3_SENSORS_EN /* PG8 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTG|GPIO_PIN8) #define GPIO_VDD_3V3_SPEKTRUM_POWER_EN /* PH2 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTH|GPIO_PIN2) #define GPIO_VDD_3V3_SD_CARD_EN /* PC13 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTC|GPIO_PIN13) @@ -287,7 +289,7 @@ #define VDD_5V_PERIPH_EN(on_true) px4_arch_gpiowrite(GPIO_VDD_5V_PERIPH_nEN, !(on_true)) #define VDD_5V_HIPOWER_EN(on_true) px4_arch_gpiowrite(GPIO_VDD_5V_HIPOWER_nEN, !(on_true)) -#define VDD_3V3_SENSORS4_EN(on_true) px4_arch_gpiowrite(GPIO_VDD_3V3_SENSORS4_EN, (on_true)) +#define VDD_3V3_SENSORS_EN(on_true) px4_arch_gpiowrite(GPIO_VDD_3V3_SENSORS_EN, (on_true)) #define VDD_3V3_SPEKTRUM_POWER_EN(on_true) px4_arch_gpiowrite(GPIO_VDD_3V3_SPEKTRUM_POWER_EN, (on_true)) #define READ_VDD_3V3_SPEKTRUM_POWER_EN() px4_arch_gpioread(GPIO_VDD_3V3_SPEKTRUM_POWER_EN) #define VDD_3V3_SD_CARD_EN(on_true) px4_arch_gpiowrite(GPIO_VDD_3V3_SD_CARD_EN, (on_true)) @@ -443,7 +445,7 @@ GPIO_CAN1_RX, \ GPIO_CAN2_TX, \ GPIO_CAN2_RX, \ - GPIO_HEATER_OUTPUT, \ + GPIO_HEATER1_OUTPUT, \ GPIO_nPOWER_IN_A, \ GPIO_nPOWER_IN_B, \ GPIO_nPOWER_IN_C, \ @@ -451,7 +453,7 @@ GPIO_VDD_5V_PERIPH_nOC, \ GPIO_VDD_5V_HIPOWER_nEN, \ GPIO_VDD_5V_HIPOWER_nOC, \ - GPIO_VDD_3V3_SENSORS4_EN, \ + GPIO_VDD_3V3_SENSORS_EN, \ GPIO_VDD_3V3_SPEKTRUM_POWER_EN, \ GPIO_VDD_3V3_SD_CARD_EN, \ GPIO_PD15, \ diff --git a/boards/auterion/fmu-v6x/src/hw_config.h b/boards/auterion/fmu-v6x/src/hw_config.h index 949a9284a5..8bff7112ac 100644 --- a/boards/auterion/fmu-v6x/src/hw_config.h +++ b/boards/auterion/fmu-v6x/src/hw_config.h @@ -28,8 +28,6 @@ * INTERFACE_USART 1 - (Optional) Scan and use the Serial interface for bootloading * USBDEVICESTRING "PX4 BL FMU v2.x" - USB id string * USBPRODUCTID 0x0011 - PID Should match defconfig - * BOOT_DELAY_ADDRESS 0x000001a0 - (Optional) From the linker script from Linker Script to get a custom - * delay provided by an APP FW * BOARD_TYPE 9 - Must match .prototype boad_id * _FLASH_KBYTES (*(uint16_t *)0x1fff7a22) - Run time flash size detection * BOARD_FLASH_SECTORS ((_FLASH_KBYTES == 0x400) ? 11 : 23) - Run time determine the physical last sector @@ -65,7 +63,6 @@ #define INTERFACE_USB 0 #define INTERFACE_USART 1 #define INTERFACE_USART_CONFIG "/dev/ttyS0,1500000" -#define BOOT_DELAY_ADDRESS 0x000001a0 #define BOARD_TYPE 53 #define _FLASH_KBYTES (*(uint32_t *)0x1FF1E880) #define BOARD_FLASH_SECTORS (15) diff --git a/boards/auterion/fmu-v6x/src/init.cpp b/boards/auterion/fmu-v6x/src/init.cpp index d11026f677..69ef472ba1 100644 --- a/boards/auterion/fmu-v6x/src/init.cpp +++ b/boards/auterion/fmu-v6x/src/init.cpp @@ -107,7 +107,7 @@ __EXPORT void board_peripheral_reset(int ms) VDD_5V_PERIPH_EN(false); board_control_spi_sensors_power(false, 0xffff); - VDD_3V3_SENSORS4_EN(false); + VDD_3V3_SENSORS_EN(false); bool last = READ_VDD_3V3_SPEKTRUM_POWER_EN(); /* Keep Spektum on to discharge rail*/ @@ -122,7 +122,7 @@ __EXPORT void board_peripheral_reset(int ms) /* switch the peripheral rail back on */ VDD_3V3_SPEKTRUM_POWER_EN(last); board_control_spi_sensors_power(true, 0xffff); - VDD_3V3_SENSORS4_EN(true); + VDD_3V3_SENSORS_EN(true); VDD_5V_PERIPH_EN(true); } @@ -215,7 +215,7 @@ __EXPORT int board_app_initialize(uintptr_t arg) VDD_3V3_SD_CARD_EN(true); VDD_5V_PERIPH_EN(true); VDD_5V_HIPOWER_EN(true); - VDD_3V3_SENSORS4_EN(true); + VDD_3V3_SENSORS_EN(true); VDD_3V3_SPEKTRUM_POWER_EN(true); /* Need hrt running before using the ADC */ diff --git a/boards/auterion/fmu-v6x/src/spi.cpp b/boards/auterion/fmu-v6x/src/spi.cpp index b1100edacf..75e81ee566 100644 --- a/boards/auterion/fmu-v6x/src/spi.cpp +++ b/boards/auterion/fmu-v6x/src/spi.cpp @@ -48,7 +48,7 @@ constexpr px4_spi_bus_t px4_spi_buses[SPI_BUS_MAX_BUS_ITEMS] = { }, {GPIO::PortE, GPIO::Pin7}), // initSPIBus(SPI::Bus::SPI4, { // // no devices - // TODO: if enabled, remove GPIO_VDD_3V3_SENSORS4_EN from board_config.h + // TODO: if enabled, remove GPIO_VDD_3V3_SENSORS_EN from board_config.h // }, {GPIO::PortG, GPIO::Pin8}), initSPIBus(SPI::Bus::SPI5, { initSPIDevice(SPIDEV_FLASH(0), SPI::CS{GPIO::PortG, GPIO::Pin7}) diff --git a/boards/auterion/fmu-v6x/zenoh.px4board b/boards/auterion/fmu-v6x/zenoh.px4board index 6827430786..1f625c024c 100644 --- a/boards/auterion/fmu-v6x/zenoh.px4board +++ b/boards/auterion/fmu-v6x/zenoh.px4board @@ -1,6 +1,10 @@ # CONFIG_BOARD_UAVCAN_TIMER_OVERRIDE is not set CONFIG_DRIVERS_UAVCAN=n +CONFIG_DRIVERS_OSD_MSP_OSD=n CONFIG_MODULES_UXRCE_DDS_CLIENT=n +CONFIG_SYSTEMCMDS_ACTUATOR_TEST=n CONFIG_SYSTEMCMDS_SD_BENCH=n CONFIG_SYSTEMCMDS_I2CDETECT=n +CONFIG_MODULES_FW_AUTOTUNE_ATTITUDE_CONTROL=n +CONFIG_MODULES_MC_AUTOTUNE_ATTITUDE_CONTROL=n CONFIG_MODULES_ZENOH=y diff --git a/boards/av/x-v1/default.px4board b/boards/av/x-v1/default.px4board index 9692767d54..398f2f43a0 100644 --- a/boards/av/x-v1/default.px4board +++ b/boards/av/x-v1/default.px4board @@ -64,7 +64,6 @@ CONFIG_MODULES_NAVIGATOR=y CONFIG_MODULES_RC_UPDATE=y CONFIG_MODULES_SENSORS=y CONFIG_MODULES_SIMULATION_SIMULATOR_SIH=y -CONFIG_MODULES_TEMPERATURE_COMPENSATION=y CONFIG_MODULES_UUV_ATT_CONTROL=y CONFIG_MODULES_UUV_POS_CONTROL=y CONFIG_MODULES_VTOL_ATT_CONTROL=y diff --git a/boards/av/x-v1/nuttx-config/scripts/script.ld b/boards/av/x-v1/nuttx-config/scripts/script.ld index db0f740cf0..b9a2dce0cc 100644 --- a/boards/av/x-v1/nuttx-config/scripts/script.ld +++ b/boards/av/x-v1/nuttx-config/scripts/script.ld @@ -89,20 +89,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/beaglebone/blue/default.px4board b/boards/beaglebone/blue/default.px4board index 42148e5013..74e7d7a289 100644 --- a/boards/beaglebone/blue/default.px4board +++ b/boards/beaglebone/blue/default.px4board @@ -56,7 +56,6 @@ CONFIG_MODULES_SENSORS=y CONFIG_MODULES_SIMULATION_BATTERY_SIMULATOR=y CONFIG_MODULES_SIMULATION_SIMULATOR_MAVLINK=y CONFIG_MODULES_SIMULATION_SIMULATOR_SIH=y -CONFIG_MODULES_TEMPERATURE_COMPENSATION=y CONFIG_MODULES_UUV_ATT_CONTROL=y CONFIG_MODULES_UUV_POS_CONTROL=y CONFIG_MODULES_UXRCE_DDS_CLIENT=y diff --git a/boards/bitcraze/crazyflie/nuttx-config/scripts/script.ld b/boards/bitcraze/crazyflie/nuttx-config/scripts/script.ld index 0c6b6693c8..ab7b7a85d5 100644 --- a/boards/bitcraze/crazyflie/nuttx-config/scripts/script.ld +++ b/boards/bitcraze/crazyflie/nuttx-config/scripts/script.ld @@ -72,12 +72,6 @@ SECTIONS _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/bitcraze/crazyflie/syslink/CMakeLists.txt b/boards/bitcraze/crazyflie/syslink/CMakeLists.txt index ebf6c04c08..80fa58821f 100644 --- a/boards/bitcraze/crazyflie/syslink/CMakeLists.txt +++ b/boards/bitcraze/crazyflie/syslink/CMakeLists.txt @@ -42,6 +42,8 @@ px4_add_module( syslink_bridge.cpp syslink_memory.cpp syslink.c + MODULE_CONFIG + syslink_params.yaml DEPENDS battery ) diff --git a/boards/bitcraze/crazyflie/syslink/syslink_params.c b/boards/bitcraze/crazyflie/syslink/syslink_params.c deleted file mode 100644 index 921ec014ae..0000000000 --- a/boards/bitcraze/crazyflie/syslink/syslink_params.c +++ /dev/null @@ -1,72 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2016 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file syslink_params.c - * - * Parameters defined by the syslink module and the exposed NRF51 radio - * - * @author Dennis Shtatnov - */ - -/** - * Operating channel of the NRF51 - * - * @min 0 - * @max 125 - * @group Syslink - */ -PARAM_DEFINE_INT32(SLNK_RADIO_CHAN, 80); - -/** - * Operating datarate of the NRF51 - * - * @min 0 - * @max 2 - * @group Syslink - */ -PARAM_DEFINE_INT32(SLNK_RADIO_RATE, 2); - -/** - * Operating address of the NRF51 (most significant byte) - * - * @group Syslink - */ -PARAM_DEFINE_INT32(SLNK_RADIO_ADDR1, 231); // 0xE7 - -/** - * Operating address of the NRF51 (least significant 4 bytes) - * - * @group Syslink - */ -PARAM_DEFINE_INT32(SLNK_RADIO_ADDR2, 3890735079); // 0xE7E7E7E7 diff --git a/boards/bitcraze/crazyflie/syslink/syslink_params.yaml b/boards/bitcraze/crazyflie/syslink/syslink_params.yaml new file mode 100644 index 0000000000..304bc8c552 --- /dev/null +++ b/boards/bitcraze/crazyflie/syslink/syslink_params.yaml @@ -0,0 +1,28 @@ +module_name: syslink +parameters: +- group: Syslink + definitions: + SLNK_RADIO_CHAN: + description: + short: Operating channel of the NRF51 + type: int32 + default: 80 + min: 0 + max: 125 + SLNK_RADIO_RATE: + description: + short: Operating datarate of the NRF51 + type: int32 + default: 2 + min: 0 + max: 2 + SLNK_RADIO_ADDR1: + description: + short: Operating address of the NRF51 (most significant byte) + type: int32 + default: 231 + SLNK_RADIO_ADDR2: + description: + short: Operating address of the NRF51 (least significant 4 bytes) + type: int32 + default: -404232217 diff --git a/boards/bitcraze/crazyflie21/nuttx-config/scripts/script.ld b/boards/bitcraze/crazyflie21/nuttx-config/scripts/script.ld index 178b10ae35..94faeff178 100644 --- a/boards/bitcraze/crazyflie21/nuttx-config/scripts/script.ld +++ b/boards/bitcraze/crazyflie21/nuttx-config/scripts/script.ld @@ -71,12 +71,6 @@ SECTIONS _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/bluerobotics/navigator/default.px4board b/boards/bluerobotics/navigator/default.px4board index 5942504bfd..3351571451 100644 --- a/boards/bluerobotics/navigator/default.px4board +++ b/boards/bluerobotics/navigator/default.px4board @@ -44,7 +44,6 @@ CONFIG_MODULES_NAVIGATOR=y CONFIG_MODULES_RC_UPDATE=y CONFIG_MODULES_SENSORS=y CONFIG_MODULES_SIMULATION_SIMULATOR_SIH=y -CONFIG_MODULES_TEMPERATURE_COMPENSATION=y CONFIG_MODULES_UUV_ATT_CONTROL=y CONFIG_MODULES_UUV_POS_CONTROL=y CONFIG_MODULES_FW_ATT_CONTROL=y diff --git a/boards/bluerobotics/navigator/init/rc.board_sensors b/boards/bluerobotics/navigator/init/rc.board_sensors index 790099d8af..6edddff7a2 100644 --- a/boards/bluerobotics/navigator/init/rc.board_sensors +++ b/boards/bluerobotics/navigator/init/rc.board_sensors @@ -28,7 +28,7 @@ then echo "ads1115 not found." fi -if ! pca9685_pwm_out start +if ! pca9685_pwm_out start -X then echo "pca9685_pwm_out not found." fi diff --git a/boards/corvon/743v1/default.px4board b/boards/corvon/743v1/default.px4board index ac84a53cd6..6897c3f83e 100644 --- a/boards/corvon/743v1/default.px4board +++ b/boards/corvon/743v1/default.px4board @@ -60,7 +60,6 @@ CONFIG_MODULES_NAVIGATOR=y CONFIG_MODULES_PAYLOAD_DELIVERER=y CONFIG_MODULES_RC_UPDATE=y CONFIG_MODULES_SENSORS=y -CONFIG_MODULES_TEMPERATURE_COMPENSATION=y CONFIG_MODULES_UXRCE_DDS_CLIENT=y CONFIG_MODULES_VTOL_ATT_CONTROL=y CONFIG_SYSTEMCMDS_ACTUATOR_TEST=y diff --git a/boards/corvon/743v1/extras/corvon_743v1_bootloader.bin b/boards/corvon/743v1/extras/corvon_743v1_bootloader.bin old mode 100644 new mode 100755 index 0875784c2c..7a90ffc25c Binary files a/boards/corvon/743v1/extras/corvon_743v1_bootloader.bin and b/boards/corvon/743v1/extras/corvon_743v1_bootloader.bin differ diff --git a/boards/corvon/743v1/init/rc.board_defaults b/boards/corvon/743v1/init/rc.board_defaults index 55b69959dc..140f464181 100644 --- a/boards/corvon/743v1/init/rc.board_defaults +++ b/boards/corvon/743v1/init/rc.board_defaults @@ -13,7 +13,6 @@ param set-default PWM_MAIN_TIM0 -4 param set-default RC_INPUT_PROTO -1 param set-default IMU_GYRO_CUTOFF 80 -param set-default SYS_AUTOSTART 4001 param set-default MC_PITCHRATE_K 0.4 param set-default MC_ROLLRATE_K 0.35 param set-default MC_YAWRATE_K 1.2 diff --git a/boards/corvon/743v1/nuttx-config/scripts/bootloader_script.ld b/boards/corvon/743v1/nuttx-config/scripts/bootloader_script.ld index fb877cc443..fcf84a4c60 100644 --- a/boards/corvon/743v1/nuttx-config/scripts/bootloader_script.ld +++ b/boards/corvon/743v1/nuttx-config/scripts/bootloader_script.ld @@ -130,20 +130,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/corvon/743v1/nuttx-config/scripts/script.ld b/boards/corvon/743v1/nuttx-config/scripts/script.ld index 1dc1a0ef97..3686e2d66e 100644 --- a/boards/corvon/743v1/nuttx-config/scripts/script.ld +++ b/boards/corvon/743v1/nuttx-config/scripts/script.ld @@ -131,20 +131,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/corvon/743v1/src/hw_config.h b/boards/corvon/743v1/src/hw_config.h index b773631093..64caafa45d 100644 --- a/boards/corvon/743v1/src/hw_config.h +++ b/boards/corvon/743v1/src/hw_config.h @@ -53,8 +53,6 @@ * INTERFACE_USART 1 - (Optional) Scan and use the Serial interface for bootloading * USBDEVICESTRING "PX4 BL FMU v2.x" - USB id string * USBPRODUCTID 0x0011 - PID Should match defconfig - * BOOT_DELAY_ADDRESS 0x000001a0 - (Optional) From the linker script from Linker Script to get a custom - * delay provided by an APP FW * BOARD_TYPE 9 - Must match .prototype boad_id * _FLASH_KBYTES (*(uint16_t *)0x1fff7a22) - Run time flash size detection * BOARD_FLASH_SECTORS ((_FLASH_KBYTES == 0x400) ? 11 : 23) - Run time determine the physical last sector @@ -95,7 +93,6 @@ //#define USE_VBUS_PULL_DOWN #define INTERFACE_USART 1 #define INTERFACE_USART_CONFIG "/dev/ttyS0,115200" -#define BOOT_DELAY_ADDRESS 0x000001a0 #define BOARD_TYPE 1189 #define BOARD_FLASH_SECTORS (14) #define BOARD_FLASH_SIZE (16 * 128 * 1024) @@ -104,7 +101,7 @@ #define OSC_FREQ 8 #define BOARD_PIN_LED_ACTIVITY GPIO_nLED_BLUE // BLUE -#define BOARD_PIN_LED_BOOTLOADER GPIO_nLED_GREEN // GREEN +#define BOARD_PIN_LED_BOOTLOADER GPIO_nLED_RED // RED #define BOARD_LED_ON 0 #define BOARD_LED_OFF 1 diff --git a/boards/corvon/743v1/src/init.c b/boards/corvon/743v1/src/init.c index c0e1f9776c..c5e1809ee3 100644 --- a/boards/corvon/743v1/src/init.c +++ b/boards/corvon/743v1/src/init.c @@ -169,6 +169,7 @@ __EXPORT int board_app_initialize(uintptr_t arg) drv_led_start(); led_off(LED_RED); led_off(LED_BLUE); + led_off(LED_GREEN); if (board_hardfault_init(2, true) != 0) { led_on(LED_BLUE); diff --git a/boards/corvon/743v1/src/led.c b/boards/corvon/743v1/src/led.c index d7794392db..a3f7b6ec8e 100644 --- a/boards/corvon/743v1/src/led.c +++ b/boards/corvon/743v1/src/led.c @@ -63,12 +63,23 @@ extern void led_toggle(int led); __END_DECLS # define xlat(p) (p) +// index: 0=BLUE, 1=RED, 2=SAFETY, 3=GREEN static uint32_t g_ledmap[] = { - GPIO_nLED_GREEN, // Indexed by BOARD_LED_GREEN - GPIO_nLED_BLUE, // Indexed by BOARD_LED_BLUE - GPIO_nLED_RED, // Indexed by BOARD_LED_RED + GPIO_nLED_BLUE, // LED_BLUE (0) + GPIO_nLED_RED, // LED_RED (1) + 0, // LED_SAFETY (2) - no independent safety LED, use 0 placeholder + GPIO_nLED_GREEN, // LED_GREEN (3) }; +#ifndef arraySize +#define arraySize(a) (sizeof((a))/sizeof(((a)[0]))) +#endif + +static inline bool valid_led_index(int led) +{ + return (led >= 0) && ((size_t)led < arraySize(g_ledmap)); +} + __EXPORT void led_init(void) { /* Configure LED GPIOs for output */ @@ -81,6 +92,10 @@ __EXPORT void led_init(void) static void phy_set_led(int led, bool state) { + if (!valid_led_index(led)) { + return; + } + /* Drive Low to switch on */ if (g_ledmap[led] != 0) { stm32_gpiowrite(g_ledmap[led], !state); @@ -89,6 +104,10 @@ static void phy_set_led(int led, bool state) static bool phy_get_led(int led) { + if (!valid_led_index(led)) { + return false; + } + /* If Low it is on */ if (g_ledmap[led] != 0) { return !stm32_gpioread(g_ledmap[led]); diff --git a/boards/cuav/7-nano/default.px4board b/boards/cuav/7-nano/default.px4board index 3ecbc1a830..abaf0df9fb 100644 --- a/boards/cuav/7-nano/default.px4board +++ b/boards/cuav/7-nano/default.px4board @@ -62,7 +62,6 @@ CONFIG_MODULES_MC_RATE_CONTROL=y CONFIG_MODULES_NAVIGATOR=y CONFIG_MODULES_RC_UPDATE=y CONFIG_MODULES_SENSORS=y -CONFIG_MODULES_TEMPERATURE_COMPENSATION=y CONFIG_MODULES_UXRCE_DDS_CLIENT=y CONFIG_MODULES_VTOL_ATT_CONTROL=y CONFIG_SYSTEMCMDS_ACTUATOR_TEST=y diff --git a/boards/cuav/7-nano/nuttx-config/scripts/bootloader_script.ld b/boards/cuav/7-nano/nuttx-config/scripts/bootloader_script.ld index 7ce63598b5..e5d9986f6e 100644 --- a/boards/cuav/7-nano/nuttx-config/scripts/bootloader_script.ld +++ b/boards/cuav/7-nano/nuttx-config/scripts/bootloader_script.ld @@ -132,20 +132,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/cuav/7-nano/nuttx-config/scripts/script.ld b/boards/cuav/7-nano/nuttx-config/scripts/script.ld index 9b50b4b397..3889da035d 100644 --- a/boards/cuav/7-nano/nuttx-config/scripts/script.ld +++ b/boards/cuav/7-nano/nuttx-config/scripts/script.ld @@ -131,7 +131,6 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) EXTERN(board_get_manifest) SECTIONS @@ -140,12 +139,6 @@ SECTIONS _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/cuav/7-nano/pwm_voltage/CMakeLists.txt b/boards/cuav/7-nano/pwm_voltage/CMakeLists.txt index b1007be07b..6c1e4426c8 100644 --- a/boards/cuav/7-nano/pwm_voltage/CMakeLists.txt +++ b/boards/cuav/7-nano/pwm_voltage/CMakeLists.txt @@ -37,6 +37,8 @@ px4_add_module( SRCS pwm_voltage.cpp + MODULE_CONFIG + parameters.yaml DEPENDS px4_work_queue ) diff --git a/boards/cuav/7-nano/pwm_voltage/parameters.c b/boards/cuav/7-nano/pwm_voltage/parameters.c deleted file mode 100644 index 847b32d83d..0000000000 --- a/boards/cuav/7-nano/pwm_voltage/parameters.c +++ /dev/null @@ -1,44 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2024 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Control PWM output voltage - * - * Enable: PWM output voltage 5V - * Disable: PWM output voltage 3.3V - * - * @boolean - * @reboot_required true - * @group PWM Outputs - */ -PARAM_DEFINE_INT32(PWM_LEVEL_CONT, 0); diff --git a/boards/cuav/7-nano/pwm_voltage/parameters.yaml b/boards/cuav/7-nano/pwm_voltage/parameters.yaml new file mode 100644 index 0000000000..c5cfd3969e --- /dev/null +++ b/boards/cuav/7-nano/pwm_voltage/parameters.yaml @@ -0,0 +1,13 @@ +module_name: pwm_voltage +parameters: +- group: PWM Outputs + definitions: + PWM_LEVEL_CONT: + description: + short: Control PWM output voltage + long: |- + Enable: PWM output voltage 5V + Disable: PWM output voltage 3.3V + type: boolean + default: 0 + reboot_required: true diff --git a/boards/cuav/7-nano/src/hw_config.h b/boards/cuav/7-nano/src/hw_config.h index a3ee52dea7..cff5b2c3fe 100644 --- a/boards/cuav/7-nano/src/hw_config.h +++ b/boards/cuav/7-nano/src/hw_config.h @@ -28,8 +28,6 @@ * INTERFACE_USART 1 - (Optional) Scan and use the Serial interface for bootloading * USBDEVICESTRING "PX4 BL FMU v2.x" - USB id string * USBPRODUCTID 0x0011 - PID Should match defconfig - * BOOT_DELAY_ADDRESS 0x000001a0 - (Optional) From the linker script from Linker Script to get a custom - * delay provided by an APP FW * BOARD_TYPE 9 - Must match .prototype boad_id * _FLASH_KBYTES (*(uint16_t *)0x1fff7a22) - Run time flash size detection * BOARD_FLASH_SECTORS ((_FLASH_KBYTES == 0x400) ? 11 : 23) - Run time determine the physical last sector @@ -70,7 +68,6 @@ //#define USE_VBUS_PULL_DOWN #define INTERFACE_USART 1 #define INTERFACE_USART_CONFIG "/dev/ttyS0,1500000" -#define BOOT_DELAY_ADDRESS 0x000001a0 #define BOARD_TYPE 7000 #define _FLASH_KBYTES (*(uint32_t *)0x1FF1E880) #define BOARD_FLASH_SECTORS (15) diff --git a/boards/cuav/can-gps-v1/nuttx-config/scripts/script.ld b/boards/cuav/can-gps-v1/nuttx-config/scripts/script.ld index 4e866c5acf..07b9ecfb83 100644 --- a/boards/cuav/can-gps-v1/nuttx-config/scripts/script.ld +++ b/boards/cuav/can-gps-v1/nuttx-config/scripts/script.ld @@ -65,8 +65,6 @@ EXTERN(_vectors) /* force the vectors to be included in the output */ * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { diff --git a/boards/cuav/fmu-v6x/default.px4board b/boards/cuav/fmu-v6x/default.px4board index 924d74fb03..9ece460549 100644 --- a/boards/cuav/fmu-v6x/default.px4board +++ b/boards/cuav/fmu-v6x/default.px4board @@ -69,7 +69,6 @@ CONFIG_MODULES_NAVIGATOR=y CONFIG_MODE_NAVIGATOR_VTOL_TAKEOFF=y CONFIG_MODULES_RC_UPDATE=y CONFIG_MODULES_SENSORS=y -CONFIG_MODULES_TEMPERATURE_COMPENSATION=y CONFIG_MODULES_UXRCE_DDS_CLIENT=y CONFIG_MODULES_VTOL_ATT_CONTROL=y CONFIG_SYSTEMCMDS_ACTUATOR_TEST=y diff --git a/boards/cuav/fmu-v6x/nuttx-config/scripts/bootloader_script.ld b/boards/cuav/fmu-v6x/nuttx-config/scripts/bootloader_script.ld index 4484463860..f8740dab3f 100644 --- a/boards/cuav/fmu-v6x/nuttx-config/scripts/bootloader_script.ld +++ b/boards/cuav/fmu-v6x/nuttx-config/scripts/bootloader_script.ld @@ -132,20 +132,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/cuav/fmu-v6x/nuttx-config/scripts/script.ld b/boards/cuav/fmu-v6x/nuttx-config/scripts/script.ld index 5790900708..3646ce2b4b 100644 --- a/boards/cuav/fmu-v6x/nuttx-config/scripts/script.ld +++ b/boards/cuav/fmu-v6x/nuttx-config/scripts/script.ld @@ -131,7 +131,6 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) EXTERN(board_get_manifest) SECTIONS @@ -140,12 +139,6 @@ SECTIONS _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/cuav/fmu-v6x/pwm_voltage/CMakeLists.txt b/boards/cuav/fmu-v6x/pwm_voltage/CMakeLists.txt index 6db1696208..3e4501e0f8 100644 --- a/boards/cuav/fmu-v6x/pwm_voltage/CMakeLists.txt +++ b/boards/cuav/fmu-v6x/pwm_voltage/CMakeLists.txt @@ -37,6 +37,8 @@ px4_add_module( SRCS pwm_voltage.cpp + MODULE_CONFIG + parameters.yaml DEPENDS px4_work_queue ) diff --git a/boards/cuav/fmu-v6x/pwm_voltage/parameters.c b/boards/cuav/fmu-v6x/pwm_voltage/parameters.c deleted file mode 100644 index 728bcc7a55..0000000000 --- a/boards/cuav/fmu-v6x/pwm_voltage/parameters.c +++ /dev/null @@ -1,43 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2025 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Control PWM output voltage - * - * @value 0 3.3V - * @value 1 5.0V - * - * @reboot_required true - * @group PWM Outputs - */ -PARAM_DEFINE_INT32(PWM_VOLT_SEL, 0); diff --git a/boards/cuav/fmu-v6x/pwm_voltage/parameters.yaml b/boards/cuav/fmu-v6x/pwm_voltage/parameters.yaml new file mode 100644 index 0000000000..82a36ce833 --- /dev/null +++ b/boards/cuav/fmu-v6x/pwm_voltage/parameters.yaml @@ -0,0 +1,13 @@ +module_name: pwm_voltage +parameters: +- group: PWM Outputs + definitions: + PWM_VOLT_SEL: + description: + short: Control PWM output voltage + type: enum + values: + 0: 3.3V + 1: 5.0V + default: 0 + reboot_required: true diff --git a/boards/cuav/fmu-v6x/src/board_config.h b/boards/cuav/fmu-v6x/src/board_config.h index 4fea491131..8f99505fda 100644 --- a/boards/cuav/fmu-v6x/src/board_config.h +++ b/boards/cuav/fmu-v6x/src/board_config.h @@ -230,8 +230,10 @@ /* HEATER * PWM in future */ -#define GPIO_HEATER_OUTPUT /* PB10 T2CH3 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTB|GPIO_PIN10) -#define HEATER_OUTPUT_EN(on_true) px4_arch_gpiowrite(GPIO_HEATER_OUTPUT, (on_true)) +#define GPIO_HEATER_OUTPUT +#define HEATER_NUM 1 +#define GPIO_HEATER1_OUTPUT /* PB10 T2CH3 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTB|GPIO_PIN10) +#define HEATER1_OUTPUT_EN(on_true) px4_arch_gpiowrite(GPIO_HEATER1_OUTPUT, (on_true)) /* PE6 is nARMED * The GPIO will be set as input while not armed HW will have external HW Pull UP. @@ -269,7 +271,7 @@ #define GPIO_VDD_5V_PERIPH_nOC /* PE15 */ (GPIO_INPUT |GPIO_FLOAT|GPIO_PORTE|GPIO_PIN15) #define GPIO_VDD_5V_HIPOWER_nEN /* PG10 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_SET|GPIO_PORTG|GPIO_PIN10) #define GPIO_VDD_5V_HIPOWER_nOC /* PF13 */ (GPIO_INPUT |GPIO_FLOAT|GPIO_PORTF|GPIO_PIN13) -#define GPIO_VDD_3V3_SENSORS4_EN /* PG8 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTG|GPIO_PIN8) +#define GPIO_VDD_3V3_SENSORS_EN /* PG8 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTG|GPIO_PIN8) #define GPIO_VDD_3V3_SPEKTRUM_POWER_EN /* PH2 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTH|GPIO_PIN2) #define GPIO_VDD_3V3_SD_CARD_EN /* PC13 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTC|GPIO_PIN13) @@ -295,7 +297,7 @@ #define VDD_5V_PERIPH_EN(on_true) px4_arch_gpiowrite(GPIO_VDD_5V_PERIPH_nEN, !(on_true)) #define VDD_5V_HIPOWER_EN(on_true) px4_arch_gpiowrite(GPIO_VDD_5V_HIPOWER_nEN, !(on_true)) -#define VDD_3V3_SENSORS4_EN(on_true) px4_arch_gpiowrite(GPIO_VDD_3V3_SENSORS4_EN, (on_true)) +#define VDD_3V3_SENSORS_EN(on_true) px4_arch_gpiowrite(GPIO_VDD_3V3_SENSORS_EN, (on_true)) #define VDD_3V3_SPEKTRUM_POWER_EN(on_true) px4_arch_gpiowrite(GPIO_VDD_3V3_SPEKTRUM_POWER_EN, (on_true)) #define READ_VDD_3V3_SPEKTRUM_POWER_EN() px4_arch_gpioread(GPIO_VDD_3V3_SPEKTRUM_POWER_EN) #define VDD_3V3_SD_CARD_EN(on_true) px4_arch_gpiowrite(GPIO_VDD_3V3_SD_CARD_EN, (on_true)) @@ -453,7 +455,7 @@ GPIO_CAN1_RX, \ GPIO_CAN2_TX, \ GPIO_CAN2_RX, \ - GPIO_HEATER_OUTPUT, \ + GPIO_HEATER1_OUTPUT, \ GPIO_nPOWER_IN_A, \ GPIO_nPOWER_IN_B, \ GPIO_nPOWER_IN_C, \ @@ -461,7 +463,7 @@ GPIO_VDD_5V_PERIPH_nOC, \ GPIO_VDD_5V_HIPOWER_nEN, \ GPIO_VDD_5V_HIPOWER_nOC, \ - GPIO_VDD_3V3_SENSORS4_EN, \ + GPIO_VDD_3V3_SENSORS_EN, \ GPIO_VDD_3V3_SPEKTRUM_POWER_EN, \ GPIO_VDD_3V3_SD_CARD_EN, \ GPIO_SYNC, \ diff --git a/boards/cuav/fmu-v6x/src/hw_config.h b/boards/cuav/fmu-v6x/src/hw_config.h index 1f9c4d4659..cac2da0267 100644 --- a/boards/cuav/fmu-v6x/src/hw_config.h +++ b/boards/cuav/fmu-v6x/src/hw_config.h @@ -28,8 +28,6 @@ * INTERFACE_USART 1 - (Optional) Scan and use the Serial interface for bootloading * USBDEVICESTRING "PX4 BL FMU v2.x" - USB id string * USBPRODUCTID 0x0011 - PID Should match defconfig - * BOOT_DELAY_ADDRESS 0x000001a0 - (Optional) From the linker script from Linker Script to get a custom - * delay provided by an APP FW * BOARD_TYPE 9 - Must match .prototype boad_id * _FLASH_KBYTES (*(uint16_t *)0x1fff7a22) - Run time flash size detection * BOARD_FLASH_SECTORS ((_FLASH_KBYTES == 0x400) ? 11 : 23) - Run time determine the physical last sector @@ -70,7 +68,6 @@ //#define USE_VBUS_PULL_DOWN #define INTERFACE_USART 1 #define INTERFACE_USART_CONFIG "/dev/ttyS0,1500000" -#define BOOT_DELAY_ADDRESS 0x000001a0 #define BOARD_TYPE 7001 #define _FLASH_KBYTES (*(uint32_t *)0x1FF1E880) #define BOARD_FLASH_SECTORS (15) diff --git a/boards/cuav/fmu-v6x/src/init.cpp b/boards/cuav/fmu-v6x/src/init.cpp index 5ca52e8076..6e70c4a005 100644 --- a/boards/cuav/fmu-v6x/src/init.cpp +++ b/boards/cuav/fmu-v6x/src/init.cpp @@ -107,7 +107,7 @@ __EXPORT void board_peripheral_reset(int ms) VDD_5V_PERIPH_EN(false); board_control_spi_sensors_power(false, 0xffff); - VDD_3V3_SENSORS4_EN(false); + VDD_3V3_SENSORS_EN(false); bool last = READ_VDD_3V3_SPEKTRUM_POWER_EN(); /* Keep Spektum on to discharge rail*/ @@ -122,7 +122,7 @@ __EXPORT void board_peripheral_reset(int ms) /* switch the peripheral rail back on */ VDD_3V3_SPEKTRUM_POWER_EN(last); board_control_spi_sensors_power(true, 0xffff); - VDD_3V3_SENSORS4_EN(true); + VDD_3V3_SENSORS_EN(true); VDD_5V_PERIPH_EN(true); } @@ -219,7 +219,7 @@ __EXPORT int board_app_initialize(uintptr_t arg) VDD_3V3_SD_CARD_EN(true); VDD_5V_PERIPH_EN(true); VDD_5V_HIPOWER_EN(true); - VDD_3V3_SENSORS4_EN(true); + VDD_3V3_SENSORS_EN(true); VDD_3V3_SPEKTRUM_POWER_EN(true); /* Need hrt running before using the ADC */ diff --git a/boards/cuav/fmu-v6x/src/spi.cpp b/boards/cuav/fmu-v6x/src/spi.cpp index bb44570b5e..adc897f214 100644 --- a/boards/cuav/fmu-v6x/src/spi.cpp +++ b/boards/cuav/fmu-v6x/src/spi.cpp @@ -49,7 +49,7 @@ constexpr px4_spi_bus_t px4_spi_buses[SPI_BUS_MAX_BUS_ITEMS] = { }, {GPIO::PortE, GPIO::Pin7}), // initSPIBus(SPI::Bus::SPI4, { // // no devices - // TODO: if enabled, remove GPIO_VDD_3V3_SENSORS4_EN from board_config.h + // TODO: if enabled, remove GPIO_VDD_3V3_SENSORS_EN from board_config.h // }, {GPIO::PortG, GPIO::Pin8}), initSPIBus(SPI::Bus::SPI5, { initSPIDevice(SPIDEV_FLASH(0), SPI::CS{GPIO::PortG, GPIO::Pin7}) diff --git a/boards/cuav/nora/default.px4board b/boards/cuav/nora/default.px4board index f2f52f8b1a..30fa8e7fd3 100644 --- a/boards/cuav/nora/default.px4board +++ b/boards/cuav/nora/default.px4board @@ -70,7 +70,6 @@ CONFIG_MODULES_NAVIGATOR=y CONFIG_MODULES_RC_UPDATE=y CONFIG_MODULES_SENSORS=y CONFIG_MODULES_SIMULATION_SIMULATOR_SIH=y -CONFIG_MODULES_TEMPERATURE_COMPENSATION=y CONFIG_MODULES_UXRCE_DDS_CLIENT=y CONFIG_MODULES_VTOL_ATT_CONTROL=y CONFIG_SYSTEMCMDS_ACTUATOR_TEST=y diff --git a/boards/cuav/nora/nuttx-config/scripts/bootloader_script.ld b/boards/cuav/nora/nuttx-config/scripts/bootloader_script.ld index c2eba58f26..ed55056e97 100644 --- a/boards/cuav/nora/nuttx-config/scripts/bootloader_script.ld +++ b/boards/cuav/nora/nuttx-config/scripts/bootloader_script.ld @@ -132,20 +132,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/cuav/nora/nuttx-config/scripts/script.ld b/boards/cuav/nora/nuttx-config/scripts/script.ld index f213ad2ff4..dbda50503d 100644 --- a/boards/cuav/nora/nuttx-config/scripts/script.ld +++ b/boards/cuav/nora/nuttx-config/scripts/script.ld @@ -131,20 +131,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/cuav/nora/src/board_config.h b/boards/cuav/nora/src/board_config.h index 0f289730d2..5e524075fc 100644 --- a/boards/cuav/nora/src/board_config.h +++ b/boards/cuav/nora/src/board_config.h @@ -104,8 +104,10 @@ #define GPIO_CAN2_SILENT_S1 /* PH3 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTH|GPIO_PIN3) /* HEATER */ -#define GPIO_HEATER_OUTPUT /* PA8 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTA|GPIO_PIN8) -#define HEATER_OUTPUT_EN(on_true) px4_arch_gpiowrite(GPIO_HEATER_OUTPUT, (on_true)) +#define GPIO_HEATER_OUTPUT +#define HEATER_NUM 1 +#define GPIO_HEATER1_OUTPUT /* PA8 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTA|GPIO_PIN8) +#define HEATER1_OUTPUT_EN(on_true) px4_arch_gpiowrite(GPIO_HEATER1_OUTPUT, (on_true)) /* PWM */ #define DIRECT_PWM_OUTPUT_CHANNELS 14 @@ -212,7 +214,7 @@ GPIO_CAN2_RX, \ GPIO_CAN1_SILENT_S0, \ GPIO_CAN2_SILENT_S1, \ - GPIO_HEATER_OUTPUT, \ + GPIO_HEATER1_OUTPUT, \ GPIO_nPOWER_IN_CAN, \ GPIO_nPOWER_IN_ADC, \ GPIO_nPOWER_IN_C, \ diff --git a/boards/cuav/nora/src/hw_config.h b/boards/cuav/nora/src/hw_config.h index 4a1fca5447..9f322dee71 100644 --- a/boards/cuav/nora/src/hw_config.h +++ b/boards/cuav/nora/src/hw_config.h @@ -53,8 +53,6 @@ * INTERFACE_USART 1 - (Optional) Scan and use the Serial interface for bootloading * USBDEVICESTRING "PX4 BL FMU v2.x" - USB id string * USBPRODUCTID 0x0011 - PID Should match defconfig - * BOOT_DELAY_ADDRESS 0x000001a0 - (Optional) From the linker script from Linker Script to get a custom - * delay provided by an APP FW * BOARD_TYPE 9 - Must match .prototype boad_id * _FLASH_KBYTES (*(uint16_t *)0x1fff7a22) - Run time flash size detection * BOARD_FLASH_SECTORS ((_FLASH_KBYTES == 0x400) ? 11 : 23) - Run time determine the physical last sector @@ -95,7 +93,6 @@ //#define USE_VBUS_PULL_DOWN #define INTERFACE_USART 1 #define INTERFACE_USART_CONFIG "/dev/ttyS4,57600" -#define BOOT_DELAY_ADDRESS 0x000001a0 #define BOARD_TYPE 1009 #define _FLASH_KBYTES (*(uint32_t *)0x1FF1E880) #define BOARD_FLASH_SECTORS (15) diff --git a/boards/cuav/x25-evo/CMakeLists.txt b/boards/cuav/x25-evo/CMakeLists.txt index 421ff0e988..8756f63e64 100644 --- a/boards/cuav/x25-evo/CMakeLists.txt +++ b/boards/cuav/x25-evo/CMakeLists.txt @@ -31,5 +31,4 @@ # ############################################################################ -add_subdirectory(core_heater) add_subdirectory(pwm_voltage) diff --git a/boards/cuav/x25-evo/core_heater/core_heater.cpp b/boards/cuav/x25-evo/core_heater/core_heater.cpp deleted file mode 100644 index 776bd1bd85..0000000000 --- a/boards/cuav/x25-evo/core_heater/core_heater.cpp +++ /dev/null @@ -1,263 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2025 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file core_heater.cpp - * - */ - -#include "core_heater.h" - -#include -#include -#include -#include - -ModuleBase::Descriptor Core_Heater::desc{task_spawn, custom_command, print_usage}; - -# ifndef GPIO_CORE_HEATER_OUTPUT -# error "To use the heater driver, the board_config.h must define and initialize GPIO_CORE_HEATER_OUTPUT" -# endif - -Core_Heater::Core_Heater() : - ModuleParams(nullptr), - ScheduledWorkItem(MODULE_NAME, px4::wq_configurations::lp_default) -{ - _heater_status_pub.advertise(); -} - -Core_Heater::~Core_Heater() -{ - disable_core_heater(); -} - -int Core_Heater::custom_command(int argc, char *argv[]) -{ - // Check if the driver is running. - if (!is_running(desc)) { - PX4_INFO("not running"); - return PX4_ERROR; - } - - return print_usage("Unrecognized command."); -} - -void Core_Heater::disable_core_heater() -{ - // Reset heater to off state. - px4_arch_unconfiggpio(GPIO_CORE_HEATER_OUTPUT); -} - -void Core_Heater::initialize_core_heater_io() -{ - // Initialize heater to off state. - px4_arch_configgpio(GPIO_CORE_HEATER_OUTPUT); -} - -void Core_Heater::core_heater_off() -{ - CORE_HEATER_OUTPUT_EN(false); -} - -void Core_Heater::core_heater_on() -{ - CORE_HEATER_OUTPUT_EN(true); -} - -bool Core_Heater::initialize_topics() -{ - for (uint8_t i = 0; i < ORB_MULTI_MAX_INSTANCES; i++) { - uORB::SubscriptionData sensor_accel_sub{ORB_ID(sensor_accel), i}; - - if (sensor_accel_sub.get().timestamp != 0 && - sensor_accel_sub.get().device_id != 0 && - PX4_ISFINITE(sensor_accel_sub.get().temperature)) { - - // If the correct ID is found, exit the for-loop with _sensor_accel_sub pointing to the correct instance. - if (sensor_accel_sub.get().device_id == (uint32_t)_param_core_temp_id.get()) { - _sensor_accel_sub.ChangeInstance(i); - _sensor_device_id = sensor_accel_sub.get().device_id; - initialize_core_heater_io(); - return true; - } - } - } - - return false; -} - -void Core_Heater::Run() -{ - if (should_exit()) { - exit_and_cleanup(desc); - return; - } - - update_params(); - - if (_sensor_device_id == 0) { - if (!initialize_topics()) { - // if sensor still not found try again in 1 second - ScheduleDelayed(1_s); - return; - } - } - - sensor_accel_s sensor_accel; - float temperature_delta {0.f}; - - if (_core_heater_on) { - // Turn the heater off. - _core_heater_on = false; - core_heater_off(); - ScheduleDelayed(_controller_period_usec - _controller_time_on_usec); - - } else if (_sensor_accel_sub.update(&sensor_accel)) { - // Update the current IMU sensor temperature if valid. - if (PX4_ISFINITE(sensor_accel.temperature)) { - temperature_delta = _param_core_imu_temp.get() - sensor_accel.temperature; - _temperature_last = sensor_accel.temperature; - } - - _proportional_value = temperature_delta * _param_core_imu_temp_p.get(); - _integrator_value += temperature_delta * _param_core_imu_temp_i.get(); - - _integrator_value = math::constrain(_integrator_value, -0.25f, 0.25f); - - _controller_time_on_usec = static_cast((_param_core_imu_temp_ff.get() + _proportional_value + - _integrator_value) * static_cast(_controller_period_usec)); - - _controller_time_on_usec = math::constrain(_controller_time_on_usec, 0, _controller_period_usec); - - if (fabsf(temperature_delta) < TEMPERATURE_TARGET_THRESHOLD) { - _temperature_target_met = true; - - } else { - - _temperature_target_met = false; - } - - _core_heater_on = true; - core_heater_on(); - ScheduleDelayed(_controller_time_on_usec); - } - - publish_status(); -} - -void Core_Heater::publish_status() -{ - heater_status_s status{}; - status.device_id = _sensor_device_id; - status.heater_on = _core_heater_on; - status.temperature_sensor = _temperature_last; - status.temperature_target = _param_core_imu_temp.get(); - status.temperature_target_met = _temperature_target_met; - status.controller_period_usec = _controller_period_usec; - status.controller_time_on_usec = _controller_time_on_usec; - status.proportional_value = _proportional_value; - status.integrator_value = _integrator_value; - status.feed_forward_value = _param_core_imu_temp_ff.get(); - - status.mode = heater_status_s::MODE_GPIO; - - status.timestamp = hrt_absolute_time(); - _heater_status_pub.publish(status); -} - -int Core_Heater::start() -{ - // Exit the driver if the sensor ID does not match the desired sensor. - if (_param_core_temp_id.get() == 0) { - PX4_ERR("Valid CORE_TEMP_ID required"); - request_stop(); - return PX4_ERROR; - } - - update_params(true); - ScheduleNow(); - return PX4_OK; -} - -int Core_Heater::task_spawn(int argc, char *argv[]) -{ - Core_Heater *core_heater = new Core_Heater(); - - if (!core_heater) { - PX4_ERR("driver allocation failed"); - return PX4_ERROR; - } - - desc.object.store(core_heater); - desc.task_id = task_id_is_work_queue; - - core_heater->start(); - return 0; -} - -void Core_Heater::update_params(const bool force) -{ - if (_parameter_update_sub.updated() || force) { - // clear update - parameter_update_s param_update; - _parameter_update_sub.copy(¶m_update); - - // update parameters from storage - ModuleParams::updateParams(); - } -} - -int Core_Heater::print_usage(const char *reason) -{ - if (reason) { - printf("%s\n\n", reason); - } - - PRINT_MODULE_DESCRIPTION( - R"DESCR_STR( -### Description -Background process running periodically on the LP work queue to regulate IMU temperature at a setpoint. - -)DESCR_STR"); - - PRINT_MODULE_USAGE_NAME("core_heater", "system"); - PRINT_MODULE_USAGE_COMMAND("start"); - PRINT_MODULE_USAGE_DEFAULT_COMMANDS(); - - return 0; -} - -extern "C" __EXPORT int core_heater_main(int argc, char *argv[]) -{ - return ModuleBase::main(Core_Heater::desc, argc, argv); -} diff --git a/boards/cuav/x25-evo/core_heater/core_heater.h b/boards/cuav/x25-evo/core_heater/core_heater.h deleted file mode 100644 index d90ca6b410..0000000000 --- a/boards/cuav/x25-evo/core_heater/core_heater.h +++ /dev/null @@ -1,161 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2025 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file core_heater.h - * - */ - -#pragma once - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -using namespace time_literals; - -#define CONTROLLER_PERIOD_DEFAULT 10000 -#define TEMPERATURE_TARGET_THRESHOLD 2.5f - -class Core_Heater : public ModuleBase, public ModuleParams, public px4::ScheduledWorkItem -{ -public: - static Descriptor desc; - - Core_Heater(); - - virtual ~Core_Heater(); - - /** - * @see ModuleBase::custom_command(). - * @brief main Main entry point to the module that should be - * called directly from the module's main method. - * @param argc The input argument count. - * @param argv Pointer to the input argument array. - * @return Returns 0 iff successful, -1 otherwise. - */ - static int custom_command(int argc, char *argv[]); - - /** - * @see ModuleBase::print_usage(). - * @brief Prints the module usage to the nuttshell console. - * @param reason The requested reason for printing to console. - */ - static int print_usage(const char *reason = nullptr); - - /** - * @see ModuleBase::task_spawn(). - * @brief Initializes the class in the same context as the work queue - * and starts the background listener. - * @param argv Pointer to the input argument array. - * @return Returns 0 iff successful, -1 otherwise. - */ - static int task_spawn(int argc, char *argv[]); - - /** - * @brief Initiates the heater driver work queue, starts a new background task, - * and fails if it is already running. - * @return Returns 1 iff start was successful. - */ - int start(); - -private: - - /** Disables the heater (either by GPIO). */ - void disable_core_heater(); - - /** Turns the heater on (either by GPIO). */ - void core_heater_on(); - - /** Turns the heater off (either by GPIO). */ - void core_heater_off(); - - void initialize(); - - /** Enables / configures the heater (either by GPIO). */ - void initialize_core_heater_io(); - - /** @brief Called once to initialize uORB topics. */ - bool initialize_topics(); - - void publish_status(); - - /** @brief Calculates the heater element on/off time and schedules the next cycle. */ - void Run() override; - - /** - * @brief Updates and checks for updated uORB parameters. - * @param force Boolean to determine if an update check should be forced. - */ - void update_params(const bool force = false); - - /** Work queue struct for the scheduler. */ - static struct work_s _work; - - bool _core_heater_initialized = false; - bool _core_heater_on = false; - bool _temperature_target_met = false; - - int _controller_period_usec = CONTROLLER_PERIOD_DEFAULT; - int _controller_time_on_usec = 0; - - float _integrator_value = 0.0f; - float _proportional_value = 0.0f; - - uORB::Publication _heater_status_pub{ORB_ID(heater_status)}; - - uORB::SubscriptionInterval _parameter_update_sub{ORB_ID(parameter_update), 1_s}; - - uORB::Subscription _sensor_accel_sub{ORB_ID(sensor_accel)}; - - uint32_t _sensor_device_id{0}; - - float _temperature_last{NAN}; - - DEFINE_PARAMETERS( - (ParamFloat) _param_core_imu_temp_ff, - (ParamFloat) _param_core_imu_temp_i, - (ParamFloat) _param_core_imu_temp_p, - (ParamFloat) _param_core_imu_temp, - (ParamInt) _param_core_temp_id - ) -}; diff --git a/boards/cuav/x25-evo/default.px4board b/boards/cuav/x25-evo/default.px4board index 8c38f593a4..a2eabd9f4a 100644 --- a/boards/cuav/x25-evo/default.px4board +++ b/boards/cuav/x25-evo/default.px4board @@ -65,7 +65,6 @@ CONFIG_MODULES_NAVIGATOR=y CONFIG_MODULES_RC_UPDATE=y CONFIG_MODULES_SENSORS=y CONFIG_MODULES_SIMULATION_SIMULATOR_SIH=y -CONFIG_MODULES_TEMPERATURE_COMPENSATION=y CONFIG_MODULES_UXRCE_DDS_CLIENT=y CONFIG_MODULES_VTOL_ATT_CONTROL=y CONFIG_SYSTEMCMDS_ACTUATOR_TEST=y diff --git a/boards/cuav/x25-evo/init/rc.board_defaults b/boards/cuav/x25-evo/init/rc.board_defaults index bae8be59e1..a422966825 100644 --- a/boards/cuav/x25-evo/init/rc.board_defaults +++ b/boards/cuav/x25-evo/init/rc.board_defaults @@ -20,15 +20,14 @@ param set-default USB_MAV_MODE 5 param set-default UAVCAN_SUB_GPS 1 param set-default UAVCAN_SUB_BAT 1 -# Enable IMU thermal control +# IMU thermal control (multi-instance heater) +# HEATER1_IMU_ID: 2818058(IIM42652 SPI1) +# HEATER2_IMU_ID: 3014698(IIM42653 SPI5) param set-default SENS_EN_THERMAL 1 -param set-default SENS_IMU_TEMP 45 -param set-default SENS_TEMP_ID 2818058 - -# CUAV core board IMU thermal control -param set-default CORE_IMU_TEMP 45 -param set-default CORE_TEMP_ID 3014698 -core_heater start +param set-default HEATER1_IMU_ID 2818058 +param set-default HEATER1_TEMP 45 +param set-default HEATER2_IMU_ID 3014698 +param set-default HEATER2_TEMP 45 # CUAV pwm voltage 3.3V/5V switch pwm_voltage_apply start diff --git a/boards/cuav/x25-evo/nuttx-config/scripts/bootloader_script.ld b/boards/cuav/x25-evo/nuttx-config/scripts/bootloader_script.ld index 4484463860..f8740dab3f 100644 --- a/boards/cuav/x25-evo/nuttx-config/scripts/bootloader_script.ld +++ b/boards/cuav/x25-evo/nuttx-config/scripts/bootloader_script.ld @@ -132,20 +132,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/cuav/x25-evo/nuttx-config/scripts/script.ld b/boards/cuav/x25-evo/nuttx-config/scripts/script.ld index 5790900708..3646ce2b4b 100644 --- a/boards/cuav/x25-evo/nuttx-config/scripts/script.ld +++ b/boards/cuav/x25-evo/nuttx-config/scripts/script.ld @@ -131,7 +131,6 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) EXTERN(board_get_manifest) SECTIONS @@ -140,12 +139,6 @@ SECTIONS _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/cuav/x25-evo/pwm_voltage/CMakeLists.txt b/boards/cuav/x25-evo/pwm_voltage/CMakeLists.txt index 6db1696208..3e4501e0f8 100644 --- a/boards/cuav/x25-evo/pwm_voltage/CMakeLists.txt +++ b/boards/cuav/x25-evo/pwm_voltage/CMakeLists.txt @@ -37,6 +37,8 @@ px4_add_module( SRCS pwm_voltage.cpp + MODULE_CONFIG + parameters.yaml DEPENDS px4_work_queue ) diff --git a/boards/cuav/x25-evo/pwm_voltage/parameters.yaml b/boards/cuav/x25-evo/pwm_voltage/parameters.yaml new file mode 100644 index 0000000000..82a36ce833 --- /dev/null +++ b/boards/cuav/x25-evo/pwm_voltage/parameters.yaml @@ -0,0 +1,13 @@ +module_name: pwm_voltage +parameters: +- group: PWM Outputs + definitions: + PWM_VOLT_SEL: + description: + short: Control PWM output voltage + type: enum + values: + 0: 3.3V + 1: 5.0V + default: 0 + reboot_required: true diff --git a/boards/cuav/x25-evo/src/board_config.h b/boards/cuav/x25-evo/src/board_config.h index 66a3963ea4..e4cd35d19d 100644 --- a/boards/cuav/x25-evo/src/board_config.h +++ b/boards/cuav/x25-evo/src/board_config.h @@ -175,15 +175,14 @@ #define GPIO_HW_REV_SENSE /* PH4 */ GPIO_ADC3_INP15 #define GPIO_HW_VER_SENSE /* PH3 */ GPIO_ADC3_INP14 -/* HEATER - * PWM in future - */ -// IMU BOARD HEATER -#define GPIO_HEATER_OUTPUT /* PB10 T2CH3 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTB|GPIO_PIN10) -#define HEATER_OUTPUT_EN(on_true) px4_arch_gpiowrite(GPIO_HEATER_OUTPUT, (on_true)) -// CORE BOARD HEATER -#define GPIO_CORE_HEATER_OUTPUT /* PE6 T15CH2 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTE|GPIO_PIN6) -#define CORE_HEATER_OUTPUT_EN(on_true) px4_arch_gpiowrite(GPIO_CORE_HEATER_OUTPUT, (on_true)) + +/* HEATER */ +#define GPIO_HEATER_OUTPUT +#define HEATER_NUM 2 +#define GPIO_HEATER1_OUTPUT /* PB10 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTB|GPIO_PIN10) +#define HEATER1_OUTPUT_EN(on_true) px4_arch_gpiowrite(GPIO_HEATER1_OUTPUT, (on_true)) +#define GPIO_HEATER2_OUTPUT /* PE6 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTE|GPIO_PIN6) +#define HEATER2_OUTPUT_EN(on_true) px4_arch_gpiowrite(GPIO_HEATER2_OUTPUT, (on_true)) /* PE7 is nARMED * The GPIO will be set as input while not armed HW will have external HW Pull UP. @@ -403,8 +402,8 @@ GPIO_CAN2_RX, \ GPIO_CAN1_SILENT_S0, \ GPIO_CAN2_SILENT_S1, \ - GPIO_HEATER_OUTPUT, \ - GPIO_CORE_HEATER_OUTPUT, \ + GPIO_HEATER1_OUTPUT, \ + GPIO_HEATER2_OUTPUT, \ GPIO_nPOWER_IN_A, \ GPIO_nPOWER_IN_B, \ GPIO_nPOWER_IN_C, \ diff --git a/boards/cuav/x25-evo/src/hw_config.h b/boards/cuav/x25-evo/src/hw_config.h index 3703686f0b..825aab65ec 100644 --- a/boards/cuav/x25-evo/src/hw_config.h +++ b/boards/cuav/x25-evo/src/hw_config.h @@ -28,8 +28,6 @@ * INTERFACE_USART 1 - (Optional) Scan and use the Serial interface for bootloading * USBDEVICESTRING "PX4 BL FMU v2.x" - USB id string * USBPRODUCTID 0x0011 - PID Should match defconfig - * BOOT_DELAY_ADDRESS 0x000001a0 - (Optional) From the linker script from Linker Script to get a custom - * delay provided by an APP FW * BOARD_TYPE 9 - Must match .prototype boad_id * _FLASH_KBYTES (*(uint16_t *)0x1fff7a22) - Run time flash size detection * BOARD_FLASH_SECTORS ((_FLASH_KBYTES == 0x400) ? 11 : 23) - Run time determine the physical last sector @@ -70,7 +68,6 @@ //#define USE_VBUS_PULL_DOWN #define INTERFACE_USART 1 #define INTERFACE_USART_CONFIG "/dev/ttyS0,1500000" -#define BOOT_DELAY_ADDRESS 0x000001a0 #define BOARD_TYPE 7002 #define _FLASH_KBYTES (*(uint32_t *)0x1FF1E880) #define BOARD_FLASH_SECTORS (15) diff --git a/boards/cuav/x25-super/CMakeLists.txt b/boards/cuav/x25-super/CMakeLists.txt new file mode 100644 index 0000000000..e0d6a24516 --- /dev/null +++ b/boards/cuav/x25-super/CMakeLists.txt @@ -0,0 +1,34 @@ +############################################################################ +# +# Copyright (c) 2026 PX4 Development Team. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# 3. Neither the name PX4 nor the names of its contributors may be +# used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS +# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED +# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +############################################################################ + +add_subdirectory(pwm_voltage) diff --git a/boards/xc-fly/xc-slam/bootloader.px4board b/boards/cuav/x25-super/bootloader.px4board similarity index 100% rename from boards/xc-fly/xc-slam/bootloader.px4board rename to boards/cuav/x25-super/bootloader.px4board diff --git a/boards/cuav/x25-super/cmake/upload.cmake b/boards/cuav/x25-super/cmake/upload.cmake new file mode 100644 index 0000000000..71d0a62541 --- /dev/null +++ b/boards/cuav/x25-super/cmake/upload.cmake @@ -0,0 +1,49 @@ +############################################################################ +# +# Copyright (c) 2025 PX4 Development Team. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# 3. Neither the name PX4 nor the names of its contributors may be +# used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS +# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED +# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +############################################################################ + + +set(PX4_FW_NAME ${PX4_BINARY_DIR}/${PX4_BOARD_VENDOR}_${PX4_BOARD_MODEL}_${PX4_BOARD_LABEL}.px4) + +add_custom_target(upload_skynode_usb + COMMAND ${PX4_SOURCE_DIR}/Tools/auterion/upload_skynode.sh --file=${PX4_FW_NAME} + DEPENDS ${PX4_FW_NAME} + COMMENT "Uploading PX4" + USES_TERMINAL +) + +add_custom_target(upload_skynode_wifi + COMMAND ${PX4_SOURCE_DIR}/Tools/auterion/upload_skynode.sh --file=${PX4_FW_NAME} --wifi + DEPENDS ${PX4_FW_NAME} + COMMENT "Uploading PX4" + USES_TERMINAL +) diff --git a/boards/xc-fly/xc-slam/default.px4board b/boards/cuav/x25-super/default.px4board similarity index 67% rename from boards/xc-fly/xc-slam/default.px4board rename to boards/cuav/x25-super/default.px4board index 77fa872875..a932e3be2b 100644 --- a/boards/xc-fly/xc-slam/default.px4board +++ b/boards/cuav/x25-super/default.px4board @@ -1,32 +1,39 @@ CONFIG_BOARD_TOOLCHAIN="arm-none-eabi" CONFIG_BOARD_ARCHITECTURE="cortex-m7" +CONFIG_BOARD_ETHERNET=y CONFIG_BOARD_SERIAL_GPS1="/dev/ttyS0" -CONFIG_BOARD_SERIAL_TEL1="/dev/ttyS1" -CONFIG_BOARD_SERIAL_TEL2="/dev/ttyS3" -CONFIG_BOARD_SERIAL_TEL3="/dev/ttyS5" -CONFIG_BOARD_SERIAL_TEL4="/dev/ttyS7" -CONFIG_BOARD_SERIAL_RC="/dev/ttyS4" -CONFIG_BOARD_SERIAL_EXT2="/dev/ttyS2" +CONFIG_BOARD_SERIAL_GPS2="/dev/ttyS1" +CONFIG_BOARD_SERIAL_TEL1="/dev/ttyS6" +CONFIG_BOARD_SERIAL_TEL2="/dev/ttyS4" +CONFIG_BOARD_SERIAL_EXT2="/dev/ttyS3" +CONFIG_DRIVERS_ADC_ADS1115=y CONFIG_DRIVERS_ADC_BOARD_ADC=y -CONFIG_DRIVERS_BAROMETER_DPS310=y +CONFIG_DRIVERS_BAROMETER_BMP581=y +CONFIG_DRIVERS_BAROMETER_INVENSENSE_ICP201XX=y CONFIG_DRIVERS_CAMERA_CAPTURE=y CONFIG_DRIVERS_CAMERA_TRIGGER=y CONFIG_DRIVERS_CDCACM_AUTOSTART=y CONFIG_COMMON_DIFFERENTIAL_PRESSURE=y -CONFIG_DRIVERS_DISTANCE_SENSOR_TF02PRO=y -CONFIG_DRIVERS_DISTANCE_SENSOR_TFMINI=y +CONFIG_COMMON_DISTANCE_SENSOR=y CONFIG_DRIVERS_DSHOT=y CONFIG_DRIVERS_GPS=y -CONFIG_DRIVERS_IMU_BOSCH_BMI088=y -CONFIG_DRIVERS_IMU_INVENSENSE_ICM42688P=y -CONFIG_DRIVERS_MAGNETOMETER_ISENTEK_IST8310=y -CONFIG_DRIVERS_MAGNETOMETER_QMC5883L=y +CONFIG_DRIVERS_HEATER=y +CONFIG_DRIVERS_IMU_INVENSENSE_IIM42652=y +CONFIG_DRIVERS_IMU_INVENSENSE_IIM42653=y +CONFIG_DRIVERS_IMU_MURATA_SCH16T=y +CONFIG_COMMON_LIGHT=y +CONFIG_COMMON_MAGNETOMETER=y +CONFIG_DRIVERS_OSD_MSP_OSD=y +CONFIG_DRIVERS_POWER_MONITOR_INA226=y +CONFIG_DRIVERS_POWER_MONITOR_INA228=y +CONFIG_DRIVERS_POWER_MONITOR_INA238=y CONFIG_DRIVERS_PWM_OUT=y CONFIG_DRIVERS_RC_INPUT=y -CONFIG_COMMON_TELEMETRY=y +CONFIG_DRIVERS_SAFETY_BUTTON=y CONFIG_DRIVERS_TONE_ALARM=y CONFIG_DRIVERS_UAVCAN=y -CONFIG_BOARD_UAVCAN_INTERFACES=1 +CONFIG_BOARD_UAVCAN_TIMER_OVERRIDE=2 +CONFIG_MODULES_AIRSPEED_SELECTOR=y CONFIG_MODULES_BATTERY_STATUS=y CONFIG_MODULES_CAMERA_FEEDBACK=y CONFIG_MODULES_COMMANDER=y @@ -38,16 +45,12 @@ CONFIG_MODULES_EVENTS=y CONFIG_MODULES_FLIGHT_MODE_MANAGER=y CONFIG_MODULES_FW_ATT_CONTROL=y CONFIG_MODULES_FW_AUTOTUNE_ATTITUDE_CONTROL=y -CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y -CONFIG_MODULES_FW_MODE_MANAGER=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GIMBAL=y CONFIG_MODULES_GYRO_CALIBRATION=y -CONFIG_MODULES_GYRO_FFT=y CONFIG_MODULES_LAND_DETECTOR=y CONFIG_MODULES_LANDING_TARGET_ESTIMATOR=y CONFIG_MODULES_LOAD_MON=y -CONFIG_MODULES_LOCAL_POSITION_ESTIMATOR=y CONFIG_MODULES_LOGGER=y CONFIG_MODULES_MAG_BIAS_ESTIMATOR=y CONFIG_MODULES_MANUAL_CONTROL=y @@ -60,30 +63,28 @@ CONFIG_MODULES_MC_RATE_CONTROL=y CONFIG_MODULES_NAVIGATOR=y CONFIG_MODULES_RC_UPDATE=y CONFIG_MODULES_SENSORS=y -CONFIG_MODULES_TEMPERATURE_COMPENSATION=y +CONFIG_MODULES_SIMULATION_SIMULATOR_SIH=y +CONFIG_MODULES_UXRCE_DDS_CLIENT=y CONFIG_MODULES_VTOL_ATT_CONTROL=y CONFIG_SYSTEMCMDS_ACTUATOR_TEST=y -CONFIG_SYSTEMCMDS_BL_UPDATE=y +CONFIG_SYSTEMCMDS_BSONDUMP=y CONFIG_SYSTEMCMDS_DMESG=y -CONFIG_SYSTEMCMDS_DUMPFILE=y CONFIG_SYSTEMCMDS_GPIO=y CONFIG_SYSTEMCMDS_HARDFAULT_LOG=y CONFIG_SYSTEMCMDS_I2CDETECT=y CONFIG_SYSTEMCMDS_LED_CONTROL=y CONFIG_SYSTEMCMDS_MFT=y CONFIG_SYSTEMCMDS_MTD=y +CONFIG_SYSTEMCMDS_NETMAN=y CONFIG_SYSTEMCMDS_NSHTERM=y CONFIG_SYSTEMCMDS_PARAM=y CONFIG_SYSTEMCMDS_PERF=y CONFIG_SYSTEMCMDS_REBOOT=y -CONFIG_SYSTEMCMDS_SD_BENCH=y -CONFIG_SYSTEMCMDS_SD_STRESS=y CONFIG_SYSTEMCMDS_SYSTEM_TIME=y CONFIG_SYSTEMCMDS_TOP=y CONFIG_SYSTEMCMDS_TOPIC_LISTENER=y CONFIG_SYSTEMCMDS_TUNE_CONTROL=y CONFIG_SYSTEMCMDS_UORB=y -CONFIG_SYSTEMCMDS_USB_CONNECTED=y CONFIG_SYSTEMCMDS_VER=y CONFIG_SYSTEMCMDS_WORK_QUEUE=y -CONFIG_EXAMPLES_FAKE_GPS=y +CONFIG_ARCH_CHIP_STM32H7=y diff --git a/boards/cuav/x25-super/extras/cuav_x25-super_bootloader.bin b/boards/cuav/x25-super/extras/cuav_x25-super_bootloader.bin new file mode 100755 index 0000000000..807da71c00 Binary files /dev/null and b/boards/cuav/x25-super/extras/cuav_x25-super_bootloader.bin differ diff --git a/boards/xc-fly/xc-slam/firmware.prototype b/boards/cuav/x25-super/firmware.prototype similarity index 52% rename from boards/xc-fly/xc-slam/firmware.prototype rename to boards/cuav/x25-super/firmware.prototype index 9d3f72a26b..e48f2ec587 100644 --- a/boards/xc-fly/xc-slam/firmware.prototype +++ b/boards/cuav/x25-super/firmware.prototype @@ -1,13 +1,13 @@ { - "board_id": 319, + "board_id": 7003, "magic": "PX4FWv1", - "description": "Firmware for the XC-FLY board", + "description": "Firmware for the CUAVX25SUPER board", "image": "", "build_time": 0, - "summary": "XC-FLY", + "summary": "CUAVX25SUPER", "version": "0.1", "image_size": 0, - "image_maxsize": 1835008, + "image_maxsize": 1966080, "git_identity": "", "board_revision": 0 } diff --git a/boards/cuav/x25-super/init/rc.board_defaults b/boards/cuav/x25-super/init/rc.board_defaults new file mode 100644 index 0000000000..04ac2def5b --- /dev/null +++ b/boards/cuav/x25-super/init/rc.board_defaults @@ -0,0 +1,37 @@ +#!/bin/sh +# +# board specific defaults +#------------------------------------------------------------------------------ + +Mavlink ethernet (CFG 1000) +param set-default MAV_2_CONFIG 1000 +param set-default MAV_2_BROADCAST 1 +param set-default MAV_2_MODE 0 +param set-default MAV_2_RADIO_CTL 0 +param set-default MAV_2_RATE 100000 +param set-default MAV_2_REMOTE_PRT 14550 +param set-default MAV_2_UDP_PRT 14550 + +param set-default SENS_EN_INA238 0 +param set-default SENS_EN_INA228 0 +param set-default SENS_EN_INA226 0 + +param set-default USB_MAV_MODE 5 + +param set-default UAVCAN_SUB_GPS 1 +param set-default UAVCAN_SUB_BAT 1 + +# IMU thermal control (multi-instance heater) +param set-default SENS_EN_THERMAL 1 +param set-default HEATER1_IMU_ID 2818066 +param set-default HEATER1_TEMP 45 +param set-default HEATER2_IMU_ID 3014698 +param set-default HEATER2_TEMP 45 + +# CUAV pwm voltage 3.3V/5V switch +pwm_voltage_apply start + +safety_button start + +# Update IP config if needed +netman update -i eth0 diff --git a/boards/cuav/x25-super/init/rc.board_sensors b/boards/cuav/x25-super/init/rc.board_sensors new file mode 100644 index 0000000000..8a748aed52 --- /dev/null +++ b/boards/cuav/x25-super/init/rc.board_sensors @@ -0,0 +1,65 @@ +#!/bin/sh +# +# CUAV X25-SUPER specific board sensors init +#------------------------------------------------------------------------------ +set HAVE_PM2 yes + +if mft query -q -k MFT -s MFT_PM2 -v 0 +then + set HAVE_PM2 no +fi + +board_adc start + +if param compare -s ADC_ADS1115_EN 1 +then + ads1115 start -X + board_adc start -n +else + board_adc start +fi + +if param compare SENS_EN_INA226 1 +then + # Start Digital power monitors + ina226 -X -b 1 -t 1 -k start + + if [ $HAVE_PM2 = yes ] + then + ina226 -X -b 2 -t 2 -k start + fi +fi + +if param compare SENS_EN_INA228 1 +then + # Start Digital power monitors + ina228 -X -b 1 -t 1 -k start + if [ $HAVE_PM2 = yes ] + then + ina228 -X -b 2 -t 2 -k start + fi +fi + +if param compare SENS_EN_INA238 1 +then + # Start Digital power monitors + ina238 -X -b 1 -t 1 -k start + if [ $HAVE_PM2 = yes ] + then + ina238 -X -b 2 -t 2 -k start + fi +fi + +sch16t -s -R 2 -b 1 start +iim42652 -s -b 2 -C 32768 start +iim42653 -s -b 5 -R 12 start + +rm3100 -s -b 4 start + +bmp581 -s -b 4 start +icp201xx -I -b 4 start + +# External compass on GPS1/I2C1 (the 3rd external bus): standard Holybro Pixhawk 4 or CUAV V5 GPS/compass puck (with lights, safety button, and buzzer) +ist8310 -X -b 1 -R 10 start + +unset HAVE_PM2 diff --git a/boards/xc-fly/xc-slam/nuttx-config/Kconfig b/boards/cuav/x25-super/nuttx-config/Kconfig similarity index 100% rename from boards/xc-fly/xc-slam/nuttx-config/Kconfig rename to boards/cuav/x25-super/nuttx-config/Kconfig diff --git a/boards/xc-fly/xc-slam/nuttx-config/bootloader/defconfig b/boards/cuav/x25-super/nuttx-config/bootloader/defconfig similarity index 83% rename from boards/xc-fly/xc-slam/nuttx-config/bootloader/defconfig rename to boards/cuav/x25-super/nuttx-config/bootloader/defconfig index d3186f6ac1..28b9bfad94 100644 --- a/boards/xc-fly/xc-slam/nuttx-config/bootloader/defconfig +++ b/boards/cuav/x25-super/nuttx-config/bootloader/defconfig @@ -7,15 +7,16 @@ # # CONFIG_DEV_CONSOLE is not set # CONFIG_DISABLE_PSEUDOFS_OPERATIONS is not set +# CONFIG_DISABLE_PTHREAD is not set # CONFIG_SPI_EXCHANGE is not set # CONFIG_STM32H7_SYSCFG is not set CONFIG_ARCH="arm" CONFIG_ARCH_BOARD_CUSTOM=y -CONFIG_ARCH_BOARD_CUSTOM_DIR="../../../../boards/xc-fly/xc-slam/nuttx-config" +CONFIG_ARCH_BOARD_CUSTOM_DIR="../../../../boards/cuav/x25-super/nuttx-config" CONFIG_ARCH_BOARD_CUSTOM_DIR_RELPATH=y CONFIG_ARCH_BOARD_CUSTOM_NAME="px4" CONFIG_ARCH_CHIP="stm32h7" -CONFIG_ARCH_CHIP_STM32H743VI=y +CONFIG_ARCH_CHIP_STM32H743XI=y CONFIG_ARCH_CHIP_STM32H7=y CONFIG_ARCH_INTERRUPTSTACK=768 CONFIG_ARMV7M_BASEPRI_WAR=y @@ -31,12 +32,12 @@ CONFIG_BOARD_LOOPSPERMSEC=95150 CONFIG_BOARD_RESET_ON_ASSERT=2 CONFIG_CDCACM=y CONFIG_CDCACM_IFLOWCONTROL=y -CONFIG_CDCACM_PRODUCTID=0x0036 -CONFIG_CDCACM_PRODUCTSTR="XC-FLY XC-SLAM Bootloader" +CONFIG_CDCACM_PRODUCTID=0x004c +CONFIG_CDCACM_PRODUCTSTR="PX4 BL CUAV X25-SUPER" CONFIG_CDCACM_RXBUFSIZE=600 CONFIG_CDCACM_TXBUFSIZE=12000 -CONFIG_CDCACM_VENDORID=0x1B8C -CONFIG_CDCACM_VENDORSTR="XC-FLY" +CONFIG_CDCACM_VENDORID=0x3163 +CONFIG_CDCACM_VENDORSTR="CUAV" CONFIG_DEBUG_FULLOPT=y CONFIG_DEBUG_SYMBOLS=y CONFIG_DEBUG_TCBINFO=y @@ -55,6 +56,7 @@ CONFIG_LIBC_STRERROR=y CONFIG_MEMSET_64BIT=y CONFIG_MEMSET_OPTSPEED=y CONFIG_PREALLOC_TIMERS=50 +CONFIG_PTHREAD_MUTEX_ROBUST=y CONFIG_PTHREAD_STACK_MIN=512 CONFIG_RAM_SIZE=245760 CONFIG_RAM_START=0x20010000 @@ -71,19 +73,22 @@ CONFIG_START_MONTH=11 CONFIG_STDIO_BUFFER_SIZE=32 CONFIG_STM32H7_BKPSRAM=y CONFIG_STM32H7_DMA1=y +CONFIG_STM32H7_DMA2=y CONFIG_STM32H7_OTGFS=y CONFIG_STM32H7_PROGMEM=y CONFIG_STM32H7_SERIAL_DISABLE_REORDERING=y CONFIG_STM32H7_TIM1=y -CONFIG_STM32H7_USART6=y +CONFIG_STM32H7_UART5=y CONFIG_SYSTEMTICK_HOOK=y CONFIG_SYSTEM_CDCACM=y CONFIG_TASK_NAME_SIZE=24 CONFIG_TTY_SIGINT=y CONFIG_TTY_SIGINT_CHAR=0x03 CONFIG_TTY_SIGTSTP=y -CONFIG_USART6_RXBUFSIZE=600 -CONFIG_USART6_TXBUFSIZE=300 +CONFIG_UART5_RXBUFSIZE=512 +CONFIG_UART5_RXDMA=y +CONFIG_UART5_TXBUFSIZE=512 +CONFIG_UART5_TXDMA=y CONFIG_USBDEV=y CONFIG_USBDEV_BUSPOWERED=y CONFIG_USBDEV_MAXPOWER=500 diff --git a/boards/xc-fly/xc-slim/nuttx-config/include/board.h b/boards/cuav/x25-super/nuttx-config/include/board.h similarity index 58% rename from boards/xc-fly/xc-slim/nuttx-config/include/board.h rename to boards/cuav/x25-super/nuttx-config/include/board.h index e9546956be..ce57165a0f 100644 --- a/boards/xc-fly/xc-slim/nuttx-config/include/board.h +++ b/boards/cuav/x25-super/nuttx-config/include/board.h @@ -1,7 +1,7 @@ /************************************************************************************ - * nuttx-configs/px4_fmu-v6u/include/board.h + * nuttx-configs/cuav_x25-super/include/board.h * - * Copyright (C) 2016-2019 Gregory Nutt. All rights reserved. + * Copyright (C) 2016-2026 Gregory Nutt. All rights reserved. * Authors: David Sidrane * * Redistribution and use in source and binary forms, with or without @@ -32,8 +32,8 @@ * POSSIBILITY OF SUCH DAMAGE. * ************************************************************************************/ -#ifndef __NUTTX_CONFIG_MATEKH743SLIM_INCLUDE_BOARD_H -#define __NUTTX_CONFIG_MATEKH743SLIM_INCLUDE_BOARD_H +#ifndef __NUTTX_CONFIG_CUAV_X25_SUPER_INCLUDE_BOARD_H +#define __NUTTX_CONFIG_CUAV_X25_SUPER_INCLUDE_BOARD_H /************************************************************************************ * Included Files @@ -55,7 +55,7 @@ ************************************************************************************/ /* Clocking *************************************************************************/ -/* The MatekH743-Slim board provides the following clock sources: +/* The CUAV X25-SUPER board provides the following clock sources: * * X1: 16 MHz crystal for HSE * @@ -65,7 +65,7 @@ * HSE: 16 MHz crystal for HSE */ -#define STM32_BOARD_XTAL 8000000ul +#define STM32_BOARD_XTAL 16000000ul #define STM32_HSI_FREQUENCY 16000000ul #define STM32_LSI_FREQUENCY 32000 @@ -93,13 +93,13 @@ * CPUCLK <= 480 MHz */ -#define STM32_BOARD_USEHSE +// #define STM32_BOARD_USEHSE #define STM32_PLLCFG_PLLSRC RCC_PLLCKSELR_PLLSRC_HSE /* PLL1, wide 4 - 8 MHz input, enable DIVP, DIVQ, DIVR * - * PLL1_VCO = (8,000,000 / 1) * 120 = 960 MHz + * PLL1_VCO = (16,000,000 / 1) * 60 = 960 MHz * * PLL1P = PLL1_VCO/2 = 960 MHz / 2 = 480 MHz * PLL1Q = PLL1_VCO/4 = 960 MHz / 4 = 240 MHz @@ -112,12 +112,12 @@ RCC_PLLCFGR_DIVQ1EN | \ RCC_PLLCFGR_DIVR1EN) #define STM32_PLLCFG_PLL1M RCC_PLLCKSELR_DIVM1(1) -#define STM32_PLLCFG_PLL1N RCC_PLL1DIVR_N1(120) +#define STM32_PLLCFG_PLL1N RCC_PLL1DIVR_N1(60) #define STM32_PLLCFG_PLL1P RCC_PLL1DIVR_P1(2) #define STM32_PLLCFG_PLL1Q RCC_PLL1DIVR_Q1(4) #define STM32_PLLCFG_PLL1R RCC_PLL1DIVR_R1(8) -#define STM32_VCO1_FREQUENCY ((STM32_HSE_FREQUENCY / 1) * 120) +#define STM32_VCO1_FREQUENCY ((STM32_HSE_FREQUENCY / 1) * 60) #define STM32_PLL1P_FREQUENCY (STM32_VCO1_FREQUENCY / 2) #define STM32_PLL1Q_FREQUENCY (STM32_VCO1_FREQUENCY / 4) #define STM32_PLL1R_FREQUENCY (STM32_VCO1_FREQUENCY / 8) @@ -129,13 +129,13 @@ RCC_PLLCFGR_DIVP2EN | \ RCC_PLLCFGR_DIVQ2EN | \ RCC_PLLCFGR_DIVR2EN) -#define STM32_PLLCFG_PLL2M RCC_PLLCKSELR_DIVM2(2) +#define STM32_PLLCFG_PLL2M RCC_PLLCKSELR_DIVM2(4) #define STM32_PLLCFG_PLL2N RCC_PLL2DIVR_N2(48) #define STM32_PLLCFG_PLL2P RCC_PLL2DIVR_P2(2) #define STM32_PLLCFG_PLL2Q RCC_PLL2DIVR_Q2(2) #define STM32_PLLCFG_PLL2R RCC_PLL2DIVR_R2(2) -#define STM32_VCO2_FREQUENCY ((STM32_HSE_FREQUENCY / 2) * 48) +#define STM32_VCO2_FREQUENCY ((STM32_HSE_FREQUENCY / 4) * 48) #define STM32_PLL2P_FREQUENCY (STM32_VCO2_FREQUENCY / 2) #define STM32_PLL2Q_FREQUENCY (STM32_VCO2_FREQUENCY / 2) #define STM32_PLL2R_FREQUENCY (STM32_VCO2_FREQUENCY / 2) @@ -145,13 +145,13 @@ #define STM32_PLLCFG_PLL3CFG (RCC_PLLCFGR_PLL3VCOSEL_WIDE | \ RCC_PLLCFGR_PLL3RGE_4_8_MHZ | \ RCC_PLLCFGR_DIVQ3EN) -#define STM32_PLLCFG_PLL3M RCC_PLLCKSELR_DIVM3(2) +#define STM32_PLLCFG_PLL3M RCC_PLLCKSELR_DIVM3(4) #define STM32_PLLCFG_PLL3N RCC_PLL3DIVR_N3(48) #define STM32_PLLCFG_PLL3P RCC_PLL3DIVR_P3(2) #define STM32_PLLCFG_PLL3Q RCC_PLL3DIVR_Q3(4) #define STM32_PLLCFG_PLL3R RCC_PLL3DIVR_R3(2) -#define STM32_VCO3_FREQUENCY ((STM32_HSE_FREQUENCY / 2) * 48) +#define STM32_VCO3_FREQUENCY ((STM32_HSE_FREQUENCY / 4) * 48) #define STM32_PLL3P_FREQUENCY (STM32_VCO3_FREQUENCY / 2) #define STM32_PLL3Q_FREQUENCY (STM32_VCO3_FREQUENCY / 4) #define STM32_PLL3R_FREQUENCY (STM32_VCO3_FREQUENCY / 2) @@ -248,11 +248,17 @@ /* ADC 1 2 3 clock source */ -#define STM32_RCC_D3CCIPR_ADCSEL RCC_D3CCIPR_ADCSEL_PLL2 +#define STM32_RCC_D3CCIPR_ADCSRC RCC_D3CCIPR_ADCSEL_PLL2 -/* FDCAN 1 clock source */ +/* UART clock selection */ +/* reset to default to overwrite any changes done by any bootloader */ -// #define STM32_RCC_D2CCIP1R_FDCANSEL RCC_D2CCIP1R_FDCANSEL_HSE /* FDCAN 1 2 clock source */ +#define STM32_RCC_D2CCIP2R_USART234578_SEL RCC_D2CCIP2R_USART234578SEL_RCC +#define STM32_RCC_D2CCIP2R_USART16_SEL RCC_D2CCIP2R_USART16SEL_RCC + +/* FDCAN 1 2 clock source */ + +#define STM32_RCC_D2CCIP1R_FDCANSEL RCC_D2CCIP1R_FDCANSEL_HSE /* FDCAN 1 2 clock source */ #define STM32_FDCANCLK STM32_HSE_FREQUENCY @@ -302,8 +308,18 @@ #define STM32_SDMMC_CLKCR_EDGE STM32_SDMMC_CLKCR_NEGEDGE /* LED definitions ******************************************************************/ -/* The board has two, LED_GREEN a Green LED and LED_BLUE a Blue LED, - * that can be controlled by software. +/* The PX4 FMUV6X board has three, LED_GREEN a Green LED, LED_BLUE a Blue LED and + * LED_RED a Red LED, that can be controlled by software. + * + * If CONFIG_ARCH_LEDS is not defined, then the user can control the LEDs in any way. + * The following definitions are used to access individual LEDs. + */ + +/* LED index values for use with board_userled() */ + +/* LED definitions ******************************************************************/ +/* The px4_fmu-v6x board has three, LED_GREEN a Green LED, LED_BLUE a Blue LED and + * LED_RED a Red LED, that can be controlled by software. * * If CONFIG_ARCH_LEDS is not defined, then the user can control the LEDs in any way. * The following definitions are used to access individual LEDs. @@ -353,95 +369,153 @@ /* Alternate function pin selections ************************************************/ -#define GPIO_USART1_RX GPIO_USART1_RX_2 /* PBA10 */ -#define GPIO_USART1_TX GPIO_USART1_TX_2 /* PA9 */ -#define GPIO_USART1_CK GPIO_USART1_CK /* PB8 NC */ +#define GPIO_USART1_RX GPIO_USART1_RX_3 /* PB7 */ +#define GPIO_USART1_TX GPIO_USART1_TX_3 /* PB6 */ -#define GPIO_USART2_RX GPIO_USART2_RX_2 /* PD6 */ -#define GPIO_USART2_TX GPIO_USART2_TX_2 /* PD5 */ -#define GPIO_USART2_CK GPIO_USART2_CK_2 /* PD7 NC */ +#define GPIO_USART2_RX GPIO_USART2_RX_1 /* PA3 */ +#define GPIO_USART2_TX GPIO_USART2_TX_2 /* PD5 */ +#define GPIO_USART2_RTS GPIO_USART2_RTS_2 /* PD4 */ +#define GPIO_USART2_CTS GPIO_USART2_CTS_NSS_2 /* PD3 */ -#define GPIO_USART3_RX GPIO_USART3_RX_3 /* PD9 */ -#define GPIO_USART3_TX GPIO_USART3_TX_3 /* PD8 */ -#define GPIO_USART3_CK GPIO_USART3_CK_3 /* PD10 NC */ +#define GPIO_USART3_RX GPIO_USART3_RX_3 /* PD9 */ +#define GPIO_USART3_TX GPIO_USART3_TX_3 /* PD8 */ -#define GPIO_UART4_RX GPIO_UART4_RX_3 /* PB8 */ -#define GPIO_UART4_TX GPIO_UART4_TX_3 /* PB9 */ +#define GPIO_UART4_RX GPIO_UART4_RX_6 /* PH14 */ +#define GPIO_UART4_TX GPIO_UART4_TX_6 /* PH13 */ -#define GPIO_UART5_RX GPIO_UART5_RX_1 /* PB12 */ -#define GPIO_UART5_TX GPIO_UART5_TX_1 /* PB13 */ +#define GPIO_UART5_RX GPIO_UART5_RX_3 /* PD2 */ +#define GPIO_UART5_TX GPIO_UART5_TX_3 /* PC12 */ +// GPIO_UART5_RTS no remap /* PC8 */ +#undef GPIO_UART5_CTS +#define GPIO_UART5_CTS ((GPIO_ALT|GPIO_AF8|GPIO_PORTC|GPIO_PIN9) | GPIO_PULLDOWN) -#define GPIO_USART6_RX GPIO_USART6_RX_1 /* PC7 */ -#define GPIO_USART6_TX GPIO_USART6_TX_1 /* PC6 */ +#define GPIO_USART6_RX GPIO_USART6_RX_1 /* PC7 */ +#define GPIO_USART6_TX GPIO_USART6_TX_1 /* PC6 */ -#define GPIO_UART7_RX GPIO_UART7_RX_3 /* PE7 */ -#define GPIO_UART7_TX GPIO_UART7_TX_3 /* PE8 NC */ +#define GPIO_UART7_RX GPIO_UART7_RX_4 /* PF6 */ +#define GPIO_UART7_TX GPIO_UART7_TX_3 /* PE8 */ +#define GPIO_UART7_RTS GPIO_UART7_RTS_2 /* PF8 */ +#define GPIO_UART7_CTS (GPIO_UART7_CTS_1 | GPIO_PULLDOWN) /* PE10 */ -#define GPIO_UART8_RX GPIO_UART8_RX_1 /* PE0 */ -#define GPIO_UART8_TX GPIO_UART8_TX_1 /* PE1 */ +#define GPIO_UART8_RX GPIO_UART8_RX_1 /* PE0 */ +#define GPIO_UART8_TX GPIO_UART8_TX_1 /* PE1 */ +/* CAN + * + * CAN1 is routed to transceiver. + * CAN2 is routed to transceiver. + */ +#define GPIO_CAN1_RX GPIO_CAN1_RX_3 /* PD0 */ +#define GPIO_CAN1_TX GPIO_CAN1_TX_3 /* PD1 */ +#define GPIO_CAN2_RX GPIO_CAN2_RX_1 /* PB12 */ +#define GPIO_CAN2_TX GPIO_CAN2_TX_1 /* PB13 */ /* SPI + * SPI1 is sensors1 + * SPI2 is sensors2 + * SPI3 is sensors3 + * SPI4 is Not Used + * SPI5 is FRAM + * SPI6 is EXTERNAL1 * - */ -#define ADJ_SLEW_RATE(p) (((p) & ~GPIO_SPEED_MASK) | (GPIO_SPEED_2MHz)) +#define ADJ_SLEW_RATE(p) (((p) & ~GPIO_SPEED_MASK) | (GPIO_SPEED_50MHz)) -#define GPIO_SPI1_MISO GPIO_SPI1_MISO_1 /* PA6 */ -#define GPIO_SPI1_MOSI GPIO_SPI1_MOSI_1 /* PA7 */ -#define GPIO_SPI1_SCK ADJ_SLEW_RATE(GPIO_SPI1_SCK_1) /* PA5 */ +#define GPIO_SPI1_MISO ADJ_SLEW_RATE(GPIO_SPI1_MISO_3) /* PG9 */ +#define GPIO_SPI1_MOSI GPIO_SPI1_MOSI_2 /* PB5 */ +#define GPIO_SPI1_SCK GPIO_SPI1_SCK_1 /* PA5 */ -#define GPIO_SPI2_MISO GPIO_SPI2_MISO_1 /* PB14 */ -#define GPIO_SPI2_MOSI GPIO_SPI2_MOSI_3 /* PC3 */ -#define GPIO_SPI2_SCK ADJ_SLEW_RATE(GPIO_SPI2_SCK_5) /* PD3 */ +#define GPIO_SPI2_MISO ADJ_SLEW_RATE(GPIO_SPI2_MISO_3) /* PI2 */ +#define GPIO_SPI2_MOSI GPIO_SPI2_MOSI_4 /* PI3 */ +#define GPIO_SPI2_SCK GPIO_SPI2_SCK_6 /* PI1 */ -#define GPIO_SPI3_MISO GPIO_SPI3_MISO_1 /* PB4 */ -#define GPIO_SPI3_MOSI GPIO_SPI3_MOSI_3 /* PB2 */ -#define GPIO_SPI3_SCK ADJ_SLEW_RATE(GPIO_SPI3_SCK_1) /* PB3 */ +#define GPIO_SPI4_MISO ADJ_SLEW_RATE(GPIO_SPI4_MISO_1) /* PE13 */ +#define GPIO_SPI4_MOSI GPIO_SPI4_MOSI_1 /* PE14 */ +#define GPIO_SPI4_SCK GPIO_SPI4_SCK_1 /* PE12 */ -#define GPIO_SPI4_MISO GPIO_SPI4_MISO_2 /* PE5 */ -#define GPIO_SPI4_MOSI GPIO_SPI4_MOSI_2 /* PE6 */ -#define GPIO_SPI4_SCK ADJ_SLEW_RATE(GPIO_SPI4_SCK_2) /* PE2 */ +#define GPIO_SPI5_MISO ADJ_SLEW_RATE(GPIO_SPI5_MISO_2) /* PH7 */ +#define GPIO_SPI5_MOSI GPIO_SPI5_MOSI_1 /* PF11 */ +#define GPIO_SPI5_SCK GPIO_SPI5_SCK_1 /* PF7 */ + +#define GPIO_SPI6_MISO ADJ_SLEW_RATE(GPIO_SPI6_MISO_2) /* PA6 */ +#define GPIO_SPI6_MOSI GPIO_SPI6_MOSI_1 /* PG14 */ +#define GPIO_SPI6_SCK GPIO_SPI6_SCK_3 /* PB3 */ /* I2C * - + * The optional _GPIO configurations allow the I2C driver to manually + * reset the bus to clear stuck slaves. They match the pin configuration, + * but are normally-high GPIOs. * */ -#define GPIO_I2C1_SCL GPIO_I2C1_SCL_1 /* PB6 */ -#define GPIO_I2C1_SDA GPIO_I2C1_SDA_1 /* PB7 */ +#define GPIO_I2C1_SCL GPIO_I2C1_SCL_2 /* PB8 */ +#define GPIO_I2C1_SDA GPIO_I2C1_SDA_2 /* PB9 */ -#define GPIO_I2C1_SCL_GPIO (GPIO_OUTPUT | GPIO_OPENDRAIN |GPIO_SPEED_50MHz | GPIO_OUTPUT_SET | GPIO_PORTB | GPIO_PIN6) -#define GPIO_I2C1_SDA_GPIO (GPIO_OUTPUT | GPIO_OPENDRAIN |GPIO_SPEED_50MHz | GPIO_OUTPUT_SET | GPIO_PORTB | GPIO_PIN7) +#define GPIO_I2C1_SCL_GPIO (GPIO_OUTPUT | GPIO_OPENDRAIN |GPIO_SPEED_50MHz | GPIO_OUTPUT_SET | GPIO_PORTB | GPIO_PIN8) +#define GPIO_I2C1_SDA_GPIO (GPIO_OUTPUT | GPIO_OPENDRAIN |GPIO_SPEED_50MHz | GPIO_OUTPUT_SET | GPIO_PORTB | GPIO_PIN9) -#define GPIO_I2C4_SCL GPIO_I2C4_SCL_1 /* PD12 */ -#define GPIO_I2C4_SDA GPIO_I2C4_SDA_1 /* PD13 */ +#define GPIO_I2C2_SCL GPIO_I2C2_SCL_2 /* PF1 */ +#define GPIO_I2C2_SDA GPIO_I2C2_SDA_2 /* PF0 */ -#define GPIO_I2C4_SCL_GPIO (GPIO_OUTPUT | GPIO_OPENDRAIN |GPIO_SPEED_50MHz | GPIO_OUTPUT_SET | GPIO_PORTD | GPIO_PIN12) -#define GPIO_I2C4_SDA_GPIO (GPIO_OUTPUT | GPIO_OPENDRAIN |GPIO_SPEED_50MHz | GPIO_OUTPUT_SET | GPIO_PORTD | GPIO_PIN13) +#define GPIO_I2C2_SCL_GPIO (GPIO_OUTPUT | GPIO_OPENDRAIN |GPIO_SPEED_50MHz | GPIO_OUTPUT_SET | GPIO_PORTF | GPIO_PIN1) +#define GPIO_I2C2_SDA_GPIO (GPIO_OUTPUT | GPIO_OPENDRAIN |GPIO_SPEED_50MHz | GPIO_OUTPUT_SET | GPIO_PORTF | GPIO_PIN0) -#define GPIO_CAN1_RX GPIO_CAN1_RX_3 /* PD0 */ -#define GPIO_CAN1_TX GPIO_CAN1_TX_3 /* PD1 */ +#define GPIO_I2C3_SCL GPIO_I2C3_SCL_1 /* PA8 */ +#define GPIO_I2C3_SDA GPIO_I2C3_SDA_2 /* PH8 */ -/* SDMMC1 +#define GPIO_I2C3_SCL_GPIO (GPIO_OUTPUT | GPIO_OPENDRAIN |GPIO_SPEED_50MHz | GPIO_OUTPUT_SET | GPIO_PORTA | GPIO_PIN8) +#define GPIO_I2C3_SDA_GPIO (GPIO_OUTPUT | GPIO_OPENDRAIN |GPIO_SPEED_50MHz | GPIO_OUTPUT_SET | GPIO_PORTH | GPIO_PIN8) + +#define GPIO_I2C4_SCL GPIO_I2C4_SCL_2 /* PF14 */ +#define GPIO_I2C4_SDA GPIO_I2C4_SDA_2 /* PF15 */ + +#define GPIO_I2C4_SCL_GPIO (GPIO_OUTPUT | GPIO_OPENDRAIN | GPIO_SPEED_50MHz | GPIO_OUTPUT_SET | GPIO_PORTF | GPIO_PIN14) +#define GPIO_I2C4_SDA_GPIO (GPIO_OUTPUT | GPIO_OPENDRAIN | GPIO_SPEED_50MHz | GPIO_OUTPUT_SET | GPIO_PORTF | GPIO_PIN15) + +/* SDMMC2 * - * SDMMC1_D0 PC8 - * SDMMC1_D1 PC9 - * SDMMC1_D2 PC10 - * SDMMC1_D3 PC11 - * SDMMC1_CK PC12 - * SDMMC1_CMD PD2 + * VDD 3.3 + * GND + * SDMMC2_CK PD6 + * SDMMC2_CMD PD7 + * SDMMC2_D0 PB14 + * SDMMC2_D1 PB15 + * SDMMC2_D2 PG11 + * SDMMC2_D3 PB4 */ -// #define GPIO_SDMMC1_D0 GPIO_SDMMC1_D0 /* PC8 */ -// #define GPIO_SDMMC1_D1 GPIO_SDMMC1_D1 /* PC9 */ -// #define GPIO_SDMMC1_D2 GPIO_SDMMC1_D2 /* PC10 */ -// #define GPIO_SDMMC1_D3 GPIO_SDMMC1_D3 /* PC11 */ -// #define GPIO_SDMMC1_CK GPIO_SDMMC1_CK /* PC12 */ -// #define GPIO_SDMMC1_CMD GPIO_SDMMC1_CMD /* PD2 */ +#define GPIO_SDMMC2_CK GPIO_SDMMC2_CK_1 /* PD6 */ +#define GPIO_SDMMC2_CMD GPIO_SDMMC2_CMD_1 /* PD7 */ +// GPIO_SDMMC2_D0 No Remap /* PB14 */ +// GPIO_SDMMC2_D1 No Remap /* PB15 */ +#define GPIO_SDMMC2_D2 GPIO_SDMMC2_D2_1 /* PG11 */ +// GPIO_SDMMC2_D3 No Remap /* PB4 */ + +/* The STM32 H7 connects to a TI DP83848TSQ/NOPB + * using RMII + * + * STM32 H7 BOARD DP83848TSQ/NOPB + * GPIO SIGNAL PIN NAME + * -------- ------------ ------------- + * PA7 ETH_CRS_DV CRS_DV + * PC1 ETH_MDC MDC + * PA2 ETH_MDIO MDIO + * PA1 ETH_REF_CL X1 + * PC4 ETH_RXD0 RX_D0 + * PC5 ETH_RXD1 RX_D1 + * PB11 ETH_TX_EN TX_EN + * PG13 ETH_TXD0 TX_D0 + * PG12 ETH_TXD1 TX_D1 + * + * The PHY address is 1, since COL/PHYAD0 features a pull up. + */ + +#define GPIO_ETH_RMII_TX_EN GPIO_ETH_RMII_TX_EN_1 /* PB11 */ +#define GPIO_ETH_RMII_TXD0 GPIO_ETH_RMII_TXD0_2 /* PG13 */ +#define GPIO_ETH_RMII_TXD1 GPIO_ETH_RMII_TXD1_2 /* PG12 */ /* USB @@ -454,38 +528,38 @@ /* Board provides GPIO or other Hardware for signaling to timing analyzer */ -// #if defined(CONFIG_BOARD_USE_PROBES) -// # include "stm32_gpio.h" -// # define PROBE_N(n) (1<<((n)-1)) -// # define PROBE_1 (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTI|GPIO_PIN0) /* PI0 AUX1 */ -// # define PROBE_2 (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTH|GPIO_PIN12) /* PH12 AUX2 */ -// # define PROBE_3 (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTH|GPIO_PIN11) /* PH11 AUX3 */ -// # define PROBE_4 (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTH|GPIO_PIN10) /* PH10 AUX4 */ -// # define PROBE_5 (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTD|GPIO_PIN13) /* PD13 AUX5 */ -// # define PROBE_6 (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTD|GPIO_PIN14) /* PD14 AUX6 */ -// # define PROBE_7 (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTH|GPIO_PIN6) /* PH6 AUX7 */ -// # define PROBE_8 (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTH|GPIO_PIN9) /* PH9 AUX8 */ -// # define PROBE_9 (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTE|GPIO_PIN11) /* PE11 CAP1 */ +#if defined(CONFIG_BOARD_USE_PROBES) +# include "stm32_gpio.h" +# define PROBE_N(n) (1<<((n)-1)) +# define PROBE_1 (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTI|GPIO_PIN0) /* PI0 AUX1 */ +# define PROBE_2 (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTH|GPIO_PIN12) /* PH12 AUX2 */ +# define PROBE_3 (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTH|GPIO_PIN11) /* PH11 AUX3 */ +# define PROBE_4 (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTH|GPIO_PIN10) /* PH10 AUX4 */ +# define PROBE_5 (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTD|GPIO_PIN13) /* PD13 AUX5 */ +# define PROBE_6 (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTD|GPIO_PIN14) /* PD14 AUX6 */ +# define PROBE_7 (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTH|GPIO_PIN6) /* PH6 AUX7 */ +# define PROBE_8 (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTH|GPIO_PIN9) /* PH9 AUX8 */ +# define PROBE_9 (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTE|GPIO_PIN11) /* PE11 CAP1 */ -// # define PROBE_INIT(mask) \ -// do { \ -// if ((mask)& PROBE_N(1)) { stm32_configgpio(PROBE_1); } \ -// if ((mask)& PROBE_N(2)) { stm32_configgpio(PROBE_2); } \ -// if ((mask)& PROBE_N(3)) { stm32_configgpio(PROBE_3); } \ -// if ((mask)& PROBE_N(4)) { stm32_configgpio(PROBE_4); } \ -// if ((mask)& PROBE_N(5)) { stm32_configgpio(PROBE_5); } \ -// if ((mask)& PROBE_N(6)) { stm32_configgpio(PROBE_6); } \ -// if ((mask)& PROBE_N(7)) { stm32_configgpio(PROBE_7); } \ -// if ((mask)& PROBE_N(8)) { stm32_configgpio(PROBE_8); } \ -// if ((mask)& PROBE_N(9)) { stm32_configgpio(PROBE_9); } \ -// } while(0) +# define PROBE_INIT(mask) \ + do { \ + if ((mask)& PROBE_N(1)) { stm32_configgpio(PROBE_1); } \ + if ((mask)& PROBE_N(2)) { stm32_configgpio(PROBE_2); } \ + if ((mask)& PROBE_N(3)) { stm32_configgpio(PROBE_3); } \ + if ((mask)& PROBE_N(4)) { stm32_configgpio(PROBE_4); } \ + if ((mask)& PROBE_N(5)) { stm32_configgpio(PROBE_5); } \ + if ((mask)& PROBE_N(6)) { stm32_configgpio(PROBE_6); } \ + if ((mask)& PROBE_N(7)) { stm32_configgpio(PROBE_7); } \ + if ((mask)& PROBE_N(8)) { stm32_configgpio(PROBE_8); } \ + if ((mask)& PROBE_N(9)) { stm32_configgpio(PROBE_9); } \ + } while(0) -// # define PROBE(n,s) do {stm32_gpiowrite(PROBE_##n,(s));}while(0) -// # define PROBE_MARK(n) PROBE(n,false);PROBE(n,true) -// #else -// # define PROBE_INIT(mask) -// # define PROBE(n,s) -// # define PROBE_MARK(n) -// #endif +# define PROBE(n,s) do {stm32_gpiowrite(PROBE_##n,(s));}while(0) +# define PROBE_MARK(n) PROBE(n,false);PROBE(n,true) +#else +# define PROBE_INIT(mask) +# define PROBE(n,s) +# define PROBE_MARK(n) +#endif -#endif /*__NUTTX_CONFIG_MATEKH743SLIM_INCLUDE_BOARD_H */ +#endif /*__NUTTX_CONFIG_CUAV_X25_SUPER_INCLUDE_BOARD_H */ diff --git a/boards/cuav/x25-super/nuttx-config/include/board_dma_map.h b/boards/cuav/x25-super/nuttx-config/include/board_dma_map.h new file mode 100644 index 0000000000..04051c4766 --- /dev/null +++ b/boards/cuav/x25-super/nuttx-config/include/board_dma_map.h @@ -0,0 +1,72 @@ +/**************************************************************************** + * + * Copyright (c) 2026 PX4 Development Team. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name PX4 nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +#pragma once + +// DMAMUX1 Using at most 8 Channels on DMA1 -------- Assigned +// V + +#define DMAMAP_SPI1_RX DMAMAP_DMA12_SPI1RX_0 /* 1 DMA1:37 SCH16T */ +#define DMAMAP_SPI1_TX DMAMAP_DMA12_SPI1TX_0 /* 2 DMA1:38 SCH16T */ + +#define DMAMAP_SPI2_RX DMAMAP_DMA12_SPI2RX_0 /* 3 DMA1:39 IIM42652 */ +#define DMAMAP_SPI2_TX DMAMAP_DMA12_SPI2TX_0 /* 4 DMA1:40 IIM42652 */ + +#define DMAMAP_USART1_RX DMAMAP_DMA12_USART1RX_0 /* DMA1:41 GPS1 */ +#define DMAMAP_USART1_TX DMAMAP_DMA12_USART1TX_0 /* DMA1:42 GPS1 */ + +// Assigned in timer_config.cpp + +// Timer 4 /* 7 DMA1:32 TIM4UP */ +// Timer 5 /* 8 DMA1:50 TIM5UP */ + +// DMAMUX2 Using at most 8 Channels on DMA2 -------- Assigned +// V + +#define DMAMAP_SPI4_RX DMAMAP_DMA12_SPI4RX_1 /* 1 DMA2:61 RM3100 */ +#define DMAMAP_SPI4_TX DMAMAP_DMA12_SPI4TX_1 /* 2 DMA2:62 RM3100 */ + +#define DMAMAP_SPI5_RX DMAMAP_DMA12_SPI5RX_1 /* 1 DMA2:61 IIM42653 */ +#define DMAMAP_SPI5_TX DMAMAP_DMA12_SPI5TX_1 /* 2 DMA2:62 IIM42653 */ + +#define DMAMAP_UART5_RX DMAMAP_DMA12_UART5RX_1 /* 5 DMA2:65 TELEM2 */ +#define DMAMAP_UART5_TX DMAMAP_DMA12_UART5TX_1 /* 6 DMA2:66 TELEM2 */ + +#define DMAMAP_UART7_RX DMAMAP_DMA12_UART7RX_1 /* 7 DMA1:79 TELEM1 */ +#define DMAMAP_UART7_TX DMAMAP_DMA12_UART7TX_1 /* 8 DMA1:80 TELEM1 */ + +// DMAMUX2 Using at most 8 Channels on BDMA -------- Assigned +// V + +#define DMAMAP_SPI6_RX DMAMAP_BDMA_SPI6_RX /* 1 BDMA:11 SPI J11 */ +#define DMAMAP_SPI6_TX DMAMAP_BDMA_SPI6_TX /* 2 BDMA:12 SPI J11 */ diff --git a/boards/xc-fly/xc-slim/nuttx-config/nsh/defconfig b/boards/cuav/x25-super/nuttx-config/nsh/defconfig similarity index 70% rename from boards/xc-fly/xc-slim/nuttx-config/nsh/defconfig rename to boards/cuav/x25-super/nuttx-config/nsh/defconfig index 17f16669ae..f08f8a5497 100644 --- a/boards/xc-fly/xc-slim/nuttx-config/nsh/defconfig +++ b/boards/cuav/x25-super/nuttx-config/nsh/defconfig @@ -14,6 +14,7 @@ # CONFIG_MMCSD_SPI is not set # CONFIG_NSH_DISABLEBG is not set # CONFIG_NSH_DISABLESCRIPT is not set +# CONFIG_NSH_DISABLE_ARP is not set # CONFIG_NSH_DISABLE_CAT is not set # CONFIG_NSH_DISABLE_CD is not set # CONFIG_NSH_DISABLE_CP is not set @@ -22,11 +23,12 @@ # CONFIG_NSH_DISABLE_ECHO is not set # CONFIG_NSH_DISABLE_ENV is not set # CONFIG_NSH_DISABLE_EXEC is not set -# CONFIG_NSH_DISABLE_EXIT is not set # CONFIG_NSH_DISABLE_EXPORT is not set # CONFIG_NSH_DISABLE_FREE is not set # CONFIG_NSH_DISABLE_GET is not set # CONFIG_NSH_DISABLE_HELP is not set +# CONFIG_NSH_DISABLE_IFCONFIG is not set +# CONFIG_NSH_DISABLE_IFUPDOWN is not set # CONFIG_NSH_DISABLE_ITEF is not set # CONFIG_NSH_DISABLE_KILL is not set # CONFIG_NSH_DISABLE_LOOPS is not set @@ -35,7 +37,7 @@ # CONFIG_NSH_DISABLE_MKFATFS is not set # CONFIG_NSH_DISABLE_MOUNT is not set # CONFIG_NSH_DISABLE_MV is not set -# CONFIG_NSH_DISABLE_PRINTF is not set +# CONFIG_NSH_DISABLE_NSLOOKUP is not set # CONFIG_NSH_DISABLE_PS is not set # CONFIG_NSH_DISABLE_PSSTACKUSAGE is not set # CONFIG_NSH_DISABLE_PWD is not set @@ -45,6 +47,7 @@ # CONFIG_NSH_DISABLE_SET is not set # CONFIG_NSH_DISABLE_SLEEP is not set # CONFIG_NSH_DISABLE_SOURCE is not set +# CONFIG_NSH_DISABLE_TELNETD is not set # CONFIG_NSH_DISABLE_TEST is not set # CONFIG_NSH_DISABLE_TIME is not set # CONFIG_NSH_DISABLE_UMOUNT is not set @@ -52,11 +55,11 @@ # CONFIG_NSH_DISABLE_USLEEP is not set CONFIG_ARCH="arm" CONFIG_ARCH_BOARD_CUSTOM=y -CONFIG_ARCH_BOARD_CUSTOM_DIR="../../../../boards/xc-fly/xc-slim/nuttx-config" +CONFIG_ARCH_BOARD_CUSTOM_DIR="../../../../boards/cuav/x25-super/nuttx-config" CONFIG_ARCH_BOARD_CUSTOM_DIR_RELPATH=y CONFIG_ARCH_BOARD_CUSTOM_NAME="px4" CONFIG_ARCH_CHIP="stm32h7" -CONFIG_ARCH_CHIP_STM32H743VI=y +CONFIG_ARCH_CHIP_STM32H743XI=y CONFIG_ARCH_CHIP_STM32H7=y CONFIG_ARCH_INTERRUPTSTACK=768 CONFIG_ARCH_STACKDUMP=y @@ -75,26 +78,29 @@ CONFIG_BOARD_RESET_ON_ASSERT=2 CONFIG_BUILTIN=y CONFIG_CDCACM=y CONFIG_CDCACM_IFLOWCONTROL=y -CONFIG_CDCACM_PRODUCTID=0x0036 -CONFIG_CDCACM_PRODUCTSTR="XC-FLY XC-SLIM" +CONFIG_CDCACM_PRODUCTID=0x004c +CONFIG_CDCACM_PRODUCTSTR="PX4 CUAV X25-SUPER" CONFIG_CDCACM_RXBUFSIZE=600 CONFIG_CDCACM_TXBUFSIZE=12000 -CONFIG_CDCACM_VENDORID=0x1B8C -CONFIG_CDCACM_VENDORSTR="XC-FLY" +CONFIG_CDCACM_VENDORID=0x3163 +CONFIG_CDCACM_VENDORSTR="CUAV" CONFIG_DEBUG_FULLOPT=y CONFIG_DEBUG_HARDFAULT_ALERT=y CONFIG_DEBUG_MEMFAULT=y CONFIG_DEBUG_SYMBOLS=y +CONFIG_DEBUG_TCBINFO=y CONFIG_DEFAULT_SMALL=y CONFIG_DEV_FIFO_SIZE=0 CONFIG_DEV_PIPE_MAXSIZE=1024 CONFIG_DEV_PIPE_SIZE=70 +CONFIG_ETH0_PHY_LAN8742A=y CONFIG_EXPERIMENTAL=y CONFIG_FAT_DMAMEMORY=y CONFIG_FAT_LCNAMES=y CONFIG_FAT_LFN=y CONFIG_FAT_LFN_ALIAS_HASH=y CONFIG_FDCLONE_STDIO=y +CONFIG_FSUTILS_IPCFG=y CONFIG_FS_BINFS=y CONFIG_FS_CROMFS=y CONFIG_FS_FAT=y @@ -114,7 +120,10 @@ CONFIG_IDLETHREAD_STACKSIZE=750 CONFIG_INIT_ENTRYPOINT="nsh_main" CONFIG_INIT_STACKSIZE=3194 CONFIG_IOB_NBUFFERS=24 -CONFIG_IOB_NCHAINS=24 +CONFIG_IOB_THROTTLE=0 +CONFIG_IPCFG_BINARY=y +CONFIG_IPCFG_CHARDEV=y +CONFIG_IPCFG_PATH="/fs/mtd_net" CONFIG_LIBC_FLOATINGPOINT=y CONFIG_LIBC_LONG_LONG=y CONFIG_LIBC_MAX_EXITFUNS=1 @@ -124,15 +133,41 @@ CONFIG_MEMSET_OPTSPEED=y CONFIG_MMCSD=y CONFIG_MMCSD_SDIO=y CONFIG_MMCSD_SDIOWAIT_WRCOMPLETE=y -CONFIG_MM_IOB=y CONFIG_MM_REGIONS=4 CONFIG_MTD=y CONFIG_MTD_BYTE_WRITE=y CONFIG_MTD_PARTITION=y CONFIG_MTD_PROGMEM=y CONFIG_MTD_RAMTRON=y -CONFIG_MTD_W25=y CONFIG_NAME_MAX=40 +CONFIG_NET=y +CONFIG_NETDB_DNSCLIENT=y +CONFIG_NETDB_DNSCLIENT_ENTRIES=8 +CONFIG_NETDB_DNSSERVER_NOADDR=y +CONFIG_NETDEV_PHY_IOCTL=y +CONFIG_NETINIT_DHCPC=y +CONFIG_NETINIT_DNS=y +CONFIG_NETINIT_DNSIPADDR=0XC0A800FE +CONFIG_NETINIT_DRIPADDR=0XC0A800FE +CONFIG_NETINIT_MONITOR=y +CONFIG_NETINIT_THREAD=y +CONFIG_NETINIT_THREAD_PRIORITY=49 +CONFIG_NETUTILS_TELNETD=y +CONFIG_NET_ARP_IPIN=y +CONFIG_NET_ARP_SEND=y +CONFIG_NET_BROADCAST=y +CONFIG_NET_ETH_PKTSIZE=1518 +CONFIG_NET_ICMP=y +CONFIG_NET_ICMP_SOCKET=y +CONFIG_NET_NACTIVESOCKETS=16 +CONFIG_NET_SOLINGER=y +CONFIG_NET_TCP=y +CONFIG_NET_TCPBACKLOG=y +CONFIG_NET_TCP_DELAYED_ACK=y +CONFIG_NET_TCP_WRITE_BUFFERS=y +CONFIG_NET_UDP=y +CONFIG_NET_UDP_CHECKSUMS=y +CONFIG_NET_UDP_WRITE_BUFFERS=y CONFIG_NSH_ARCHINIT=y CONFIG_NSH_ARGCAT=y CONFIG_NSH_BUILTIN_APPS=y @@ -145,6 +180,8 @@ CONFIG_NSH_QUOTE=y CONFIG_NSH_ROMFSETC=y CONFIG_NSH_ROMFSSECTSIZE=128 CONFIG_NSH_STRERROR=y +CONFIG_NSH_TELNET=y +CONFIG_NSH_TELNET_LOGIN=y CONFIG_NSH_VARS=y CONFIG_OTG_ID_GPIO_DISABLE=y CONFIG_PIPES=y @@ -152,6 +189,8 @@ CONFIG_PREALLOC_TIMERS=50 CONFIG_PRIORITY_INHERITANCE=y CONFIG_PTHREAD_MUTEX_ROBUST=y CONFIG_PTHREAD_STACK_MIN=512 +CONFIG_RAMTRON_EMULATE_PAGE_SHIFT=6 +CONFIG_RAMTRON_EMULATE_SECTOR_SHIFT=6 CONFIG_RAMTRON_SETSPEED=y CONFIG_RAM_SIZE=245760 CONFIG_RAM_START=0x20010000 @@ -168,8 +207,7 @@ CONFIG_SCHED_INSTRUMENTATION_SWITCH=y CONFIG_SCHED_LPWORK=y CONFIG_SCHED_LPWORKPRIORITY=50 CONFIG_SCHED_LPWORKSTACKSIZE=1632 -CONFIG_SCHED_WAITPID=y -CONFIG_SDMMC1_SDIO_PULLUP=y +CONFIG_SDMMC2_SDIO_PULLUP=y CONFIG_SEM_PREALLOCHOLDERS=32 CONFIG_SERIAL_IFLOWCONTROL_WATERMARKS=y CONFIG_SERIAL_TERMIOS=y @@ -183,7 +221,6 @@ CONFIG_START_DAY=30 CONFIG_START_MONTH=11 CONFIG_STDIO_BUFFER_SIZE=256 CONFIG_STM32H7_ADC1=y -CONFIG_STM32H7_ADC2=y CONFIG_STM32H7_ADC3=y CONFIG_STM32H7_BBSRAM=y CONFIG_STM32H7_BBSRAM_FILES=5 @@ -192,32 +229,49 @@ CONFIG_STM32H7_BKPSRAM=y CONFIG_STM32H7_DMA1=y CONFIG_STM32H7_DMA2=y CONFIG_STM32H7_DMACAPABLE=y +CONFIG_STM32H7_ETHMAC=y CONFIG_STM32H7_FLASH_OVERRIDE_I=y CONFIG_STM32H7_FLOWCONTROL_BROKEN=y CONFIG_STM32H7_I2C1=y +CONFIG_STM32H7_I2C2=y +CONFIG_STM32H7_I2C3=y CONFIG_STM32H7_I2C4=y CONFIG_STM32H7_I2C_DYNTIMEO=y CONFIG_STM32H7_I2C_DYNTIMEO_STARTSTOP=10 CONFIG_STM32H7_OTGFS=y +CONFIG_STM32H7_PHYSR=31 +CONFIG_STM32H7_PHYSR_100MBPS=0x8 +CONFIG_STM32H7_PHYSR_FULLDUPLEX=0x10 +CONFIG_STM32H7_PHYSR_MODE=0x10 +CONFIG_STM32H7_PHYSR_SPEED=0x8 +CONFIG_STM32H7_PHY_POLLING=y CONFIG_STM32H7_PROGMEM=y CONFIG_STM32H7_RTC=y -CONFIG_STM32H7_RTC_HSECLOCK=y +CONFIG_STM32H7_RTC_AUTO_LSECLOCK_START_DRV_CAPABILITY=y CONFIG_STM32H7_RTC_MAGIC_REG=1 CONFIG_STM32H7_SAVE_CRASHDUMP=y -CONFIG_STM32H7_SDMMC1=y +CONFIG_STM32H7_SDMMC2=y CONFIG_STM32H7_SERIALBRK_BSDCOMPAT=y CONFIG_STM32H7_SERIAL_DISABLE_REORDERING=y CONFIG_STM32H7_SPI1=y +CONFIG_STM32H7_SPI1_DMA=y +CONFIG_STM32H7_SPI1_DMA_BUFFER=1024 CONFIG_STM32H7_SPI2=y CONFIG_STM32H7_SPI2_DMA=y -CONFIG_STM32H7_SPI2_DMA_BUFFER=4096 -CONFIG_STM32H7_SPI3=y +CONFIG_STM32H7_SPI2_DMA_BUFFER=1024 CONFIG_STM32H7_SPI4=y -CONFIG_STM32H7_SPI_DMATHRESHOLD=8 +CONFIG_STM32H7_SPI4_DMA=y +CONFIG_STM32H7_SPI4_DMA_BUFFER=1024 +CONFIG_STM32H7_SPI5=y +CONFIG_STM32H7_SPI5_DMA=y +CONFIG_STM32H7_SPI5_DMA_BUFFER=1024 +CONFIG_STM32H7_SPI6=y +CONFIG_STM32H7_SPI6_DMA=y +CONFIG_STM32H7_SPI6_DMA_BUFFER=1024 +CONFIG_STM32H7_TIM12=y CONFIG_STM32H7_TIM1=y -CONFIG_STM32H7_TIM2=y -CONFIG_STM32H7_TIM3=y CONFIG_STM32H7_TIM4=y +CONFIG_STM32H7_TIM5=y CONFIG_STM32H7_TIM8=y CONFIG_STM32H7_UART4=y CONFIG_STM32H7_UART5=y @@ -232,37 +286,48 @@ CONFIG_STM32H7_USART_INVERT=y CONFIG_STM32H7_USART_SINGLEWIRE=y CONFIG_STM32H7_USART_SWAP=y CONFIG_SYSTEM_CDCACM=y +CONFIG_SYSTEM_DHCPC_RENEW=y CONFIG_SYSTEM_NSH=y +CONFIG_SYSTEM_PING=y +CONFIG_SYSTEM_SYSTEM=y CONFIG_TASK_NAME_SIZE=24 -CONFIG_UART4_BAUD=921600 -CONFIG_UART4_RXBUFSIZE=3000 -CONFIG_UART4_RXDMA=y -CONFIG_UART4_TXBUFSIZE=3000 -CONFIG_UART4_TXDMA=y -CONFIG_UART5_BAUD=57600 -CONFIG_UART5_RXBUFSIZE=600 -CONFIG_UART5_TXBUFSIZE=1500 +CONFIG_UART4_BAUD=57600 +CONFIG_UART4_RXBUFSIZE=600 +CONFIG_UART4_TXBUFSIZE=1500 +CONFIG_UART5_IFLOWCONTROL=y +CONFIG_UART5_OFLOWCONTROL=y +CONFIG_UART5_RXDMA=y +CONFIG_UART5_TXBUFSIZE=10000 +CONFIG_UART5_TXDMA=y CONFIG_UART7_BAUD=57600 +CONFIG_UART7_IFLOWCONTROL=y +CONFIG_UART7_OFLOWCONTROL=y CONFIG_UART7_RXBUFSIZE=600 +CONFIG_UART7_RXDMA=y CONFIG_UART7_TXBUFSIZE=3000 +CONFIG_UART7_TXDMA=y CONFIG_UART8_BAUD=57600 CONFIG_UART8_RXBUFSIZE=600 -CONFIG_UART8_TXBUFSIZE=3000 +CONFIG_UART8_TXBUFSIZE=1500 CONFIG_USART1_BAUD=57600 CONFIG_USART1_RXBUFSIZE=600 +CONFIG_USART1_RXDMA=y CONFIG_USART1_TXBUFSIZE=1500 +CONFIG_USART1_TXDMA=y CONFIG_USART2_BAUD=57600 +CONFIG_USART2_IFLOWCONTROL=y +CONFIG_USART2_OFLOWCONTROL=y CONFIG_USART2_RXBUFSIZE=600 CONFIG_USART2_TXBUFSIZE=3000 CONFIG_USART3_BAUD=57600 CONFIG_USART3_RXBUFSIZE=180 +CONFIG_USART3_SERIAL_CONSOLE=y CONFIG_USART3_TXBUFSIZE=1500 CONFIG_USART6_BAUD=57600 -CONFIG_USART6_RXBUFSIZE=180 -CONFIG_USART6_SERIAL_CONSOLE=y +CONFIG_USART6_RXBUFSIZE=600 +CONFIG_USART6_TXBUFSIZE=1500 CONFIG_USBDEV=y CONFIG_USBDEV_BUSPOWERED=y CONFIG_USBDEV_MAXPOWER=500 CONFIG_USEC_PER_TICK=1000 CONFIG_WATCHDOG=y -CONFIG_WQUEUE_NOTIFIER=y diff --git a/boards/xc-fly/xc-slam/nuttx-config/scripts/bootloader_script.ld b/boards/cuav/x25-super/nuttx-config/scripts/bootloader_script.ld similarity index 91% rename from boards/xc-fly/xc-slam/nuttx-config/scripts/bootloader_script.ld rename to boards/cuav/x25-super/nuttx-config/scripts/bootloader_script.ld index fb877cc443..c7299bd13c 100644 --- a/boards/xc-fly/xc-slam/nuttx-config/scripts/bootloader_script.ld +++ b/boards/cuav/x25-super/nuttx-config/scripts/bootloader_script.ld @@ -1,7 +1,7 @@ /**************************************************************************** * scripts/script.ld * - * Copyright (C) 2016, 2019 Gregory Nutt. All rights reserved. + * Copyright (C) 2016, 2026 Gregory Nutt. All rights reserved. * Author: Gregory Nutt * * @@ -34,7 +34,7 @@ * ****************************************************************************/ -/* The Durandal-v1 uses an STM32H743II has 2048Kb of main FLASH memory. +/* The PX4 FMUV6X uses an STM32H753II has 2048Kb of main FLASH memory. * The flash memory is partitioned into a User Flash memory and a System * Flash memory. Each of these memories has two banks: * @@ -59,11 +59,11 @@ * 2) BOOT=1: Boot address defined by user option byte BOOT_ADD1[15:0]. * ST programmed value: System bootloader at 0x1FF0:0000 * - * The Durandal has a Switch on board, the BOOT0 pin is at ground so by default, - * the STM32 will boot to address 0x0800:0000 in FLASH unless the swiutch is - * drepresed, then the boot will be from 0x1FF0:0000 + * The PX4 FMUV6X has a test point on board, the BOOT0 pin is at ground so by + * default, the STM32 will boot to address 0x0800:0000 in FLASH unless the test + * point is pulled to 3.3V.then the boot will be from 0x1FF0:0000 * - * The STM32H743ZI also has 1024Kb of data SRAM. + * The STM32H743II also has 1024Kb of data SRAM. * SRAM is split up into several blocks and into three power domains: * * 1) TCM SRAMs are dedicated to the Cortex-M7 and are accessible with @@ -105,12 +105,14 @@ * When booting from FLASH, FLASH memory is aliased to address 0x0000:0000 * where the code expects to begin execution by jumping to the entry point in * the 0x0800:0000 address range. + * + * The bootloader uses the first sector of the flash, which is 128K in length. */ MEMORY { itcm (rwx) : ORIGIN = 0x00000000, LENGTH = 64K - flash (rx) : ORIGIN = 0x08000000, LENGTH = 2048K + flash (rx) : ORIGIN = 0x08000000, LENGTH = 128K dtcm1 (rwx) : ORIGIN = 0x20000000, LENGTH = 64K dtcm2 (rwx) : ORIGIN = 0x20010000, LENGTH = 64K sram (rwx) : ORIGIN = 0x24000000, LENGTH = 512K @@ -130,20 +132,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/xc-fly/xc-slam/nuttx-config/scripts/script.ld b/boards/cuav/x25-super/nuttx-config/scripts/script.ld similarity index 92% rename from boards/xc-fly/xc-slam/nuttx-config/scripts/script.ld rename to boards/cuav/x25-super/nuttx-config/scripts/script.ld index 1dc1a0ef97..804a7e97c7 100644 --- a/boards/xc-fly/xc-slam/nuttx-config/scripts/script.ld +++ b/boards/cuav/x25-super/nuttx-config/scripts/script.ld @@ -1,7 +1,7 @@ /**************************************************************************** * scripts/script.ld * - * Copyright (C) 2020 Gregory Nutt. All rights reserved. + * Copyright (C) 2016, 2026 Gregory Nutt. All rights reserved. * Author: Gregory Nutt * * @@ -34,7 +34,7 @@ * ****************************************************************************/ -/* The board uses an STM32H743II and has 2048Kb of main FLASH memory. +/* The PX4 FMUV6X uses an STM32H753II has 2048Kb of main FLASH memory. * The flash memory is partitioned into a User Flash memory and a System * Flash memory. Each of these memories has two banks: * @@ -59,11 +59,11 @@ * 2) BOOT=1: Boot address defined by user option byte BOOT_ADD1[15:0]. * ST programmed value: System bootloader at 0x1FF0:0000 * - * There's a switch on board, the BOOT0 pin is at ground so by default, - * the STM32 will boot to address 0x0800:0000 in FLASH unless the switch is - * drepresed, then the boot will be from 0x1FF0:0000 + * The PX4 FMUV6X has a test point on board, the BOOT0 pin is at ground so by + * default, the STM32 will boot to address 0x0800:0000 in FLASH unless the test + * point is pulled to 3.3V.then the boot will be from 0x1FF0:0000 * - * The STM32H743ZI also has 1024Kb of data SRAM. + * The STM32H743II also has 1024Kb of data SRAM. * SRAM is split up into several blocks and into three power domains: * * 1) TCM SRAMs are dedicated to the Cortex-M7 and are accessible with @@ -110,7 +110,7 @@ MEMORY { ITCM_RAM (rwx) : ORIGIN = 0x00000000, LENGTH = 64K - FLASH (rx) : ORIGIN = 0x08020000, LENGTH = 1792K + FLASH (rx) : ORIGIN = 0x08020000, LENGTH = 1920K DTCM1_RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 64K DTCM2_RAM (rwx) : ORIGIN = 0x20010000, LENGTH = 64K @@ -131,7 +131,7 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) +EXTERN(board_get_manifest) SECTIONS { @@ -139,12 +139,6 @@ SECTIONS _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/cuav/x25-super/pwm_voltage/CMakeLists.txt b/boards/cuav/x25-super/pwm_voltage/CMakeLists.txt new file mode 100644 index 0000000000..c1f804f46c --- /dev/null +++ b/boards/cuav/x25-super/pwm_voltage/CMakeLists.txt @@ -0,0 +1,44 @@ +############################################################################ +# +# Copyright (c) 2026 PX4 Development Team. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# 3. Neither the name PX4 nor the names of its contributors may be +# used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS +# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED +# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +############################################################################ + +px4_add_module( + MODULE modules__pwm_voltage_apply + MAIN pwm_voltage_apply + + SRCS + pwm_voltage.cpp + MODULE_CONFIG + parameters.yaml + DEPENDS + px4_work_queue + ) diff --git a/boards/cuav/x25-super/pwm_voltage/parameters.yaml b/boards/cuav/x25-super/pwm_voltage/parameters.yaml new file mode 100644 index 0000000000..82a36ce833 --- /dev/null +++ b/boards/cuav/x25-super/pwm_voltage/parameters.yaml @@ -0,0 +1,13 @@ +module_name: pwm_voltage +parameters: +- group: PWM Outputs + definitions: + PWM_VOLT_SEL: + description: + short: Control PWM output voltage + type: enum + values: + 0: 3.3V + 1: 5.0V + default: 0 + reboot_required: true diff --git a/boards/cuav/x25-super/pwm_voltage/pwm_voltage.cpp b/boards/cuav/x25-super/pwm_voltage/pwm_voltage.cpp new file mode 100644 index 0000000000..5507de1965 --- /dev/null +++ b/boards/cuav/x25-super/pwm_voltage/pwm_voltage.cpp @@ -0,0 +1,56 @@ +/**************************************************************************** + * + * Copyright (c) 2026 PX4 Development Team. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name PX4 nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +#include +#include + +#include +#include + +#include "board_config.h" + +extern "C" int pwm_voltage_apply_main(int argc, char *argv[]) +{ + int32_t pwm_volt_sel = 0; + + param_get(param_find("PWM_VOLT_SEL"), &pwm_volt_sel); + + if (pwm_volt_sel != 0) { + PWM_5V_VOLT_SEL(true); + + } else { + PWM_5V_VOLT_SEL(false); + } + + return 0; +} diff --git a/boards/xc-fly/xc-slam/src/CMakeLists.txt b/boards/cuav/x25-super/src/CMakeLists.txt similarity index 85% rename from boards/xc-fly/xc-slam/src/CMakeLists.txt rename to boards/cuav/x25-super/src/CMakeLists.txt index 798c524347..90734af2cb 100644 --- a/boards/xc-fly/xc-slam/src/CMakeLists.txt +++ b/boards/cuav/x25-super/src/CMakeLists.txt @@ -1,6 +1,6 @@ ############################################################################ # -# Copyright (c) 2021 PX4 Development Team. All rights reserved. +# Copyright (c) 2026 PX4 Development Team. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -31,39 +31,45 @@ # ############################################################################ if("${PX4_BOARD_LABEL}" STREQUAL "bootloader") + add_compile_definitions(BOOTLOADER) add_library(drivers_board bootloader_main.c + init.c usb.c + timer_config.cpp ) target_link_libraries(drivers_board PRIVATE - nuttx_arch - nuttx_drivers + nuttx_arch # sdio + nuttx_drivers # sdio + px4_layer #gpio + arch_io_pins # iotimer bootloader ) target_include_directories(drivers_board PRIVATE ${PX4_SOURCE_DIR}/platforms/nuttx/src/bootloader/common) else() add_library(drivers_board + can.c i2c.cpp init.c led.c + mtd.cpp sdio.c spi.cpp timer_config.cpp usb.c - mtd.cpp ) - # add_dependencies(drivers_board arch_board_hw_info) + add_dependencies(drivers_board arch_board_hw_info) target_link_libraries(drivers_board PRIVATE arch_io_pins arch_spi arch_board_hw_info - drivers__led - nuttx_arch - nuttx_drivers + drivers__led # drv_led_start + nuttx_arch # sdio + nuttx_drivers # sdio px4_layer ) endif() diff --git a/boards/cuav/x25-super/src/board_config.h b/boards/cuav/x25-super/src/board_config.h new file mode 100644 index 0000000000..47fc455dd9 --- /dev/null +++ b/boards/cuav/x25-super/src/board_config.h @@ -0,0 +1,506 @@ +/**************************************************************************** + * + * Copyright (c) 2016-2026 PX4 Development Team. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name PX4 nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +/** + * @file board_config.h + * + * CUAV X25-SUPER internal definitions + */ + +#pragma once + +/**************************************************************************************************** + * Included Files + ****************************************************************************************************/ + +#include +#include +#include + + +#include + +/**************************************************************************************************** + * Definitions + ****************************************************************************************************/ + +#undef TRACE_PINS + +/* Configuration ************************************************************************************/ + +#define BOARD_HAS_LTC44XX_VALIDS 2 // N Bricks +#define BOARD_HAS_USB_VALID 1 // LTC Has USB valid +#define BOARD_HAS_NBAT_V 2d // 2 Digital Voltage +#define BOARD_HAS_NBAT_I 2d // 2 Digital Current + +/* PX4FMU GPIOs ***********************************************************************************/ + +/* LEDs are driven with push open drain to support Anode to 5V or 3.3V or used as TRACE0-2 */ + +# define GPIO_nLED_RED /* PE3 */ (GPIO_OUTPUT|GPIO_OPENDRAIN|GPIO_SPEED_50MHz|GPIO_OUTPUT_SET|GPIO_PORTE|GPIO_PIN3) +# define GPIO_nLED_GREEN /* PE4 */ (GPIO_OUTPUT|GPIO_OPENDRAIN|GPIO_SPEED_50MHz|GPIO_OUTPUT_SET|GPIO_PORTE|GPIO_PIN4) +# define GPIO_nLED_BLUE /* PE5 */ (GPIO_OUTPUT|GPIO_OPENDRAIN|GPIO_SPEED_50MHz|GPIO_OUTPUT_SET|GPIO_PORTE|GPIO_PIN5) + +# define BOARD_HAS_CONTROL_STATUS_LEDS 1 +# define BOARD_OVERLOAD_LED LED_RED +# define BOARD_ARMED_STATE_LED LED_BLUE + +/* CAN Silence Silent mode control */ + +#define GPIO_CAN1_SILENT_S0 /* PE2 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTE|GPIO_PIN2) +#define GPIO_CAN2_SILENT_S1 /* PI8 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTI|GPIO_PIN8) + +/* SPI */ + +#define SPI6_nRESET_EXTERNAL1 /* PF10 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTF|GPIO_PIN10) + +/* I2C busses */ + +/* Devices on the onboard buses. + * + * Note that these are unshifted addresses. + */ +#define BOARD_MTD_NUM_EEPROM 1 /* MTD: imu_eeprom*/ + +#define GPIO_I2C4_DRDY1_ICP20100 /* PG5 */ (GPIO_INPUT|GPIO_FLOAT|GPIO_EXTI|GPIO_PORTG|GPIO_PIN5) + +/* + * ADC channels + * + * These are the channel numbers of the ADCs of the microcontroller that + * can be used by the Px4 Firmware in the adc driver + */ + +/* ADC defines to be used in sensors.cpp to read from a particular channel */ + +#define ADC1_CH(n) (n) + +/* N.B. there is no offset mapping needed for ADC3 because */ +#define ADC3_CH(n) (n) + +/* We are only use ADC3 for REV/VER. + * ADC3_6V6 and ADC3_3V3 are mapped back to ADC1 + * To do this We are relying on PC2_C, PC3_C being connected to PC2, PC3 + * respectively by the SYSCFG_PMCR default of setting for PC3SO PC2SO PA1SO + * PA0SO of 0. + * + * 0 Analog switch closed (pads are connected through the analog switch) + * + * So ADC3_INP0 is GPIO_ADC123_INP12 + * ADC3_INP1 is GPIO_ADC12_INP13 + */ + +/* Define GPIO pins used as ADC N.B. Channel numbers must match below */ + +#define PX4_ADC_GPIO \ + /* PA0 */ GPIO_ADC1_INP16, \ + /* PA4 */ GPIO_ADC12_INP18, \ + /* PB1 */ GPIO_ADC12_INP5, \ + /* PC0 */ GPIO_ADC123_INP10, \ + /* PC3 */ GPIO_ADC12_INP13, \ + /* PF12 */ GPIO_ADC1_INP6, \ + /* PH3 */ GPIO_ADC3_INP14, \ + /* PH4 */ GPIO_ADC3_INP15 + +// TODO: PF3 ADC3 6V6 +/* Define Channel numbers must match above GPIO pin IN(n)*/ +#define ADC_SCALED_VDD_3V3_SENSORS1_CHANNEL /* PA0 */ ADC1_CH(16) +#define ADC_SCALED_VDD_3V3_SENSORS2_CHANNEL /* PA4 */ ADC1_CH(18) +#define ADC_SCALED_V5_CHANNEL /* PB1 */ ADC1_CH(5) +#define ADC_RSSI_IN_CHANNEL /* PC0 */ ADC1_CH(10) +#define ADC_ADC3_3V3_CHANNEL /* PC3 */ ADC3_CH(13) +#define ADC_SERVO_VDD_SENSORS_CHANNEL /* PF12 */ ADC1_CH(6) +#define ADC_HW_VER_SENSE_CHANNEL /* PH3 */ ADC3_CH(14) +#define ADC_HW_REV_SENSE_CHANNEL /* PH4 */ ADC3_CH(15) + +#define ADC_CHANNELS \ + ((1 << ADC_SCALED_VDD_3V3_SENSORS1_CHANNEL) | \ + (1 << ADC_SCALED_VDD_3V3_SENSORS2_CHANNEL) | \ + (1 << ADC_SCALED_V5_CHANNEL) | \ + (1 << ADC_RSSI_IN_CHANNEL) | \ + (1 << ADC_ADC3_3V3_CHANNEL) | \ + (1 << ADC_SERVO_VDD_SENSORS_CHANNEL)) + + +/* HW has to large of R termination on ADC todo:change when HW value is chosen */ + +#define HW_REV_VER_ADC_BASE STM32_ADC3_BASE + +#define SYSTEM_ADC_BASE STM32_ADC1_BASE + +/* HW has to large of R termination on ADC todo:change when HW value is chosen */ +#define BOARD_ADC_OPEN_CIRCUIT_V (5.6f) + +#define BOARD_ADC_BRICK_VALID 1 + +/* HW Version and Revision drive signals Default to 1 to detect */ +// #define BOARD_HAS_HW_SPLIT_VERSIONING + +#define GPIO_HW_VER_REV_DRIVE /* PG0 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_SET|GPIO_PORTG|GPIO_PIN0) +#define GPIO_HW_REV_SENSE /* PH4 */ GPIO_ADC3_INP15 +#define GPIO_HW_VER_SENSE /* PH3 */ GPIO_ADC3_INP14 + +/* HEATER */ +#define GPIO_HEATER_OUTPUT +#define HEATER_NUM 2 +#define GPIO_HEATER1_OUTPUT /* PB10 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTB|GPIO_PIN10) +#define HEATER1_OUTPUT_EN(on_true) px4_arch_gpiowrite(GPIO_HEATER1_OUTPUT, (on_true)) +#define GPIO_HEATER2_OUTPUT /* PE6 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTE|GPIO_PIN6) +#define HEATER2_OUTPUT_EN(on_true) px4_arch_gpiowrite(GPIO_HEATER2_OUTPUT, (on_true)) + +/* PE7 is nARMED + * The GPIO will be set as input while not armed HW will have external HW Pull UP. + * While armed it shall be configured at a GPIO OUT set LOW + */ +#if !defined(TRACE_PINS) +#define GPIO_nARMED_INIT /* PE7 */ (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTE|GPIO_PIN7) +#define GPIO_nARMED /* PE7 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTE|GPIO_PIN7) +#define BOARD_INDICATE_EXTERNAL_LOCKOUT_STATE(enabled) px4_arch_configgpio((enabled) ? GPIO_nARMED : GPIO_nARMED_INIT) +#define BOARD_GET_EXTERNAL_LOCKOUT_STATE() px4_arch_gpioread(GPIO_nARMED) +#endif + +/* PWM + */ +#define DIRECT_PWM_OUTPUT_CHANNELS 16 + +/* PWM Power */ +#define GPIO_PWM_VOLT_SEL /* PG8 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTG|GPIO_PIN8) +#define PWM_5V_VOLT_SEL(on_true) px4_arch_gpiowrite(GPIO_PWM_VOLT_SEL, (on_true)) + +/* Power supply control and monitoring GPIOs */ + +#define GPIO_nPOWER_IN_A /* PJ1 */ (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTJ|GPIO_PIN1) +#define GPIO_nPOWER_IN_B /* PJ2 */ (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTJ|GPIO_PIN2) +#define GPIO_nPOWER_IN_C /* PJ3 */ (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTJ|GPIO_PIN3) + +#define GPIO_nVDD_BRICK1_VALID GPIO_nPOWER_IN_A /* Brick 1 Is Chosen */ +#define GPIO_nVDD_BRICK2_VALID GPIO_nPOWER_IN_B /* Brick 2 Is Chosen */ +#define BOARD_NUMBER_BRICKS 2 +#define BOARD_NUMBER_DIGITAL_BRICKS 2 +#define GPIO_nVDD_USB_VALID GPIO_nPOWER_IN_C /* USB Is Chosen */ + +#define GPIO_VDD_3V3_SD_CARD_EN /* PC13 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTC|GPIO_PIN13) +#define GPIO_VDD_5V_PERIPH_nOC /* PE15 */ (GPIO_INPUT |GPIO_PULLUP|GPIO_PORTE|GPIO_PIN15) +#define GPIO_VDD_5V_HIPOWER_nOC /* PF13 */ (GPIO_INPUT |GPIO_PULLUP|GPIO_PORTF|GPIO_PIN13) +#define GPIO_VDD_5V_PERIPH_EN /* PG4 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTG|GPIO_PIN4) +#define GPIO_VDD_5V_HIPOWER_EN /* PG10 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTG|GPIO_PIN10) +#define GPIO_VDD_PWM_POWER_EN /* PH2 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTH|GPIO_PIN2) +#define GPIO_VDD_3V3_SENSORS1_EN /* PI11 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTI|GPIO_PIN4) +#define GPIO_VDD_3V3_SENSORS3_EN /* PI4 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTI|GPIO_PIN4) +#define GPIO_VDD_5V_RC_EN /* PJ5 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTJ|GPIO_PIN5) + +/* Spare GPIO */ + +#define GPIO_PA10 /* PA10 */ (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTA|GPIO_PIN10) +#define GPIO_PA15 /* PA15 */ (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTA|GPIO_PIN15) +#define BATT_VOLTAGE_SENS /* PB0 */ (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTB|GPIO_PIN0) +#define SPI3_MOSI /* PB2 */ (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTB|GPIO_PIN2) +#define BATT_CURRENT_SENS /* PC0 */ (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTC|GPIO_PIN0) +#define SPI3_SCK /* PC10 */ (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTC|GPIO_PIN10) +#define SPI3_MISO /* PC11 */ (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTC|GPIO_PIN11) +#define GPIO_ADC_6V6 /* PF3 */ (GPIO_INPUT|GPIO_FLOAT|GPIO_PORTF|GPIO_PIN3) +#define GPIO_PG2 /* PG2 */ (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTG|GPIO_PIN2) +#define GPIO_PI9 /* PI9 */ (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTI|GPIO_PIN9) +#define GPIO_PI12 /* PI12 */ (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTI|GPIO_PIN12) +#define GPIO_PI13 /* PI13 */ (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTI|GPIO_PIN13) +#define GPIO_PI14 /* PI14 */ (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTI|GPIO_PIN14) +#define GPIO_PI15 /* PI15 */ (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTI|GPIO_PIN15) +#define GPIO_PJ7 /* PJ7 */ (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTJ|GPIO_PIN7) +#define GPIO_PJ8 /* PJ8 */ (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTJ|GPIO_PIN8) +#define GPIO_PJ10 /* PJ10 */ (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTJ|GPIO_PIN10) +#define GPIO_PJ13 /* PJ13 */ (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTJ|GPIO_PIN13) +#define GPIO_PJ14 /* PJ14 */ (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTJ|GPIO_PIN14) +#define GPIO_PJ15 /* PJ15 */ (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTJ|GPIO_PIN15) +#define GPIO_PK0 /* PK0 */ (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTK|GPIO_PIN0) +#define GPIO_PK1 /* PK1 */ (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTK|GPIO_PIN1) +#define GPIO_PK2 /* PK2 */ (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTK|GPIO_PIN2) +#define GPIO_PK3 /* PK3 */ (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTK|GPIO_PIN3) +#define GPIO_PK4 /* PK4 */ (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTK|GPIO_PIN4) +#define GPIO_PK5 /* PK5 */ (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTK|GPIO_PIN5) +#define GPIO_PK6 /* PK6 */ (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTK|GPIO_PIN6) +#define GPIO_PK7 /* PK7 */ (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTK|GPIO_PIN7) + +/* ETHERNET GPIO */ + +#define GPIO_ETH_POWER_EN /* PG15 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTG|GPIO_PIN15) + +/* Define True logic Power Control in arch agnostic form */ +#define VDD_5V_PERIPH_EN(on_true) px4_arch_gpiowrite(GPIO_VDD_5V_PERIPH_EN, (on_true)) +#define VDD_5V_HIPOWER_EN(on_true) px4_arch_gpiowrite(GPIO_VDD_5V_HIPOWER_EN, (on_true)) +#define VDD_PWM_POWER_EN(on_true) px4_arch_gpiowrite(GPIO_VDD_PWM_POWER_EN, (on_true)) +#define VDD_3V3_SD_CARD_EN(on_true) px4_arch_gpiowrite(GPIO_VDD_3V3_SD_CARD_EN, (on_true)) +#define VDD_3V3_ETH_POWER_EN(on_true) px4_arch_gpiowrite(GPIO_ETH_POWER_EN, (on_true)) +#define VDD_3V3_SENSORS1_EN(on_true) px4_arch_gpiowrite(GPIO_VDD_3V3_SENSORS1_EN, (on_true)) +#define VDD_3V3_SENSORS3_EN(on_true) px4_arch_gpiowrite(GPIO_VDD_3V3_SENSORS3_EN, (on_true)) +#define VDD_5V_RC_EN(on_true) px4_arch_gpiowrite(GPIO_VDD_5V_RC_EN, (on_true)) + + +/* Tone alarm output */ + +#define TONE_ALARM_TIMER 14 /* Timer 14 */ +#define TONE_ALARM_CHANNEL 1 /* PF9 GPIO_TIM14_CH1OUT_2 */ + +#define GPIO_BUZZER_1 /* PF9 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTF|GPIO_PIN9) + +#define GPIO_TONE_ALARM_IDLE GPIO_BUZZER_1 +#define GPIO_TONE_ALARM GPIO_TIM14_CH1OUT_2 + +/* USB OTG FS + * + * PA9 OTG_FS_VBUS VBUS sensing + */ +#define GPIO_OTGFS_VBUS /* PA9 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_SPEED_100MHz|GPIO_PORTA|GPIO_PIN9) + +/* High-resolution timer */ +#define HRT_TIMER 3 /* use timer8 for the HRT */ +#define HRT_TIMER_CHANNEL 2 /* use capture/compare channel 3 */ + +#define HRT_PPM_CHANNEL /* T8C1 */ 1 /* use capture/compare channel 1 */ +#define GPIO_PPM_IN /* PC6 T8C1 */ GPIO_TIM3_CH1IN_3 + +/* RC Serial port */ + +#define RC_SERIAL_PORT "/dev/ttyS5" +#define RC_SERIAL_SINGLEWIRE + +/* PWM input driver. Use FMU AUX5 pins attached to timer4 channel 2 */ +#define PWMIN_TIMER 4 +#define PWMIN_TIMER_CHANNEL /* T4C2 */ 2 +#define GPIO_PWM_IN /* PD13 */ GPIO_TIM4_CH2IN_2 + +/* Safety Switch is HW version dependent on having an PX4IO + * So we init to a benign state with the _INIT definition + * and provide the the non _INIT one for the driver to make a run time + * decision to use it. + */ +#define GPIO_nSAFETY_SWITCH_LED_OUT_INIT /* PD10 */ (GPIO_INPUT|GPIO_FLOAT|GPIO_PORTD|GPIO_PIN10) +#define GPIO_nSAFETY_SWITCH_LED_OUT /* PD10 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_SET|GPIO_PORTD|GPIO_PIN10) + +/* Enable the FMU to control it if there is no px4io fixme:This should be BOARD_SAFETY_LED(__ontrue) */ +#define GPIO_LED_SAFETY GPIO_nSAFETY_SWITCH_LED_OUT + +#define GPIO_SAFETY_SWITCH_IN /* PF5 */ (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTF|GPIO_PIN5) +/* Enable the FMU to use the switch it if there is no px4io fixme:This should be BOARD_SAFTY_BUTTON() */ +#define GPIO_BTN_SAFETY GPIO_SAFETY_SWITCH_IN /* Enable the FMU to control it if there is no px4io */ + +/* Power switch controls ******************************************************/ + +// #define SPEKTRUM_POWER(_on_true) VDD_3V3_SPEKTRUM_POWER_EN(_on_true) + +/* + * FMUv6X has a separate RC_IN + * + * GPIO PPM_IN on PI5 T8CH1 + * SPEKTRUM_RX (it's TX or RX in Bind) on UART6 PC7 + * Inversion is possible in the UART and can drive GPIO PPM_IN as an output + */ + +#define GPIO_PPM_IN_AS_OUT (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_SET|GPIO_PORTC|GPIO_PIN6) +#define SPEKTRUM_RX_AS_GPIO_OUTPUT() px4_arch_configgpio(GPIO_PPM_IN_AS_OUT) +#define SPEKTRUM_RX_AS_UART() /* Can be left as uart */ +#define SPEKTRUM_OUT(_one_true) px4_arch_gpiowrite(GPIO_PPM_IN_AS_OUT, (_one_true)) + +// /* RSSI_IN */ +#define GPIO_RSSI_IN /* PC0 */ (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTC|GPIO_PIN0) + +#define SDIO_SLOTNO 0 /* Only one slot */ +#define SDIO_MINOR 0 + +/* SD card bringup does not work if performed on the IDLE thread because it + * will cause waiting. Use either: + * + * CONFIG_BOARDCTL=y, OR + * CONFIG_BOARD_INITIALIZE=y && CONFIG_BOARD_INITTHREAD=y + */ + +#if defined(CONFIG_BOARD_INITIALIZE) && !defined(CONFIG_BOARDCTL) && \ + !defined(CONFIG_BOARD_INITTHREAD) +# warning SDIO initialization cannot be perfomed on the IDLE thread +#endif + +/* By Providing BOARD_ADC_USB_CONNECTED (using the px4_arch abstraction) + * this board support the ADC system_power interface, and therefore + * provides the true logic GPIO BOARD_ADC_xxxx macros. + */ +#define BOARD_ADC_USB_CONNECTED (px4_arch_gpioread(GPIO_OTGFS_VBUS)) +#define BOARD_ADC_USB_VALID (!px4_arch_gpioread(GPIO_nVDD_USB_VALID)) + +/* FMUv6X never powers off the Servo rail */ + +#define BOARD_ADC_SERVO_VALID (1) + +#if !defined(BOARD_HAS_LTC44XX_VALIDS) || BOARD_HAS_LTC44XX_VALIDS == 0 +# define BOARD_ADC_BRICK1_VALID (1) +# define BOARD_ADC_BRICK2_VALID (0) +#elif BOARD_HAS_LTC44XX_VALIDS == 1 +# define BOARD_ADC_BRICK1_VALID (!px4_arch_gpioread(GPIO_nVDD_BRICK1_VALID)) +# define BOARD_ADC_BRICK2_VALID (0) +#elif BOARD_HAS_LTC44XX_VALIDS == 2 +# define BOARD_ADC_BRICK1_VALID (!px4_arch_gpioread(GPIO_nVDD_BRICK1_VALID)) +# define BOARD_ADC_BRICK2_VALID (!px4_arch_gpioread(GPIO_nVDD_BRICK2_VALID)) +#elif BOARD_HAS_LTC44XX_VALIDS == 3 +# define BOARD_ADC_BRICK1_VALID (!px4_arch_gpioread(GPIO_nVDD_BRICK1_VALID)) +# define BOARD_ADC_BRICK2_VALID (!px4_arch_gpioread(GPIO_nVDD_BRICK2_VALID)) +# define BOARD_ADC_BRICK3_VALID (!px4_arch_gpioread(GPIO_nVDD_BRICK3_VALID)) +#elif BOARD_HAS_LTC44XX_VALIDS == 4 +# define BOARD_ADC_BRICK1_VALID (!px4_arch_gpioread(GPIO_nVDD_BRICK1_VALID)) +# define BOARD_ADC_BRICK2_VALID (!px4_arch_gpioread(GPIO_nVDD_BRICK2_VALID)) +# define BOARD_ADC_BRICK3_VALID (!px4_arch_gpioread(GPIO_nVDD_BRICK3_VALID)) +# define BOARD_ADC_BRICK4_VALID (!px4_arch_gpioread(GPIO_nVDD_BRICK4_VALID)) +#else +# error Unsupported BOARD_HAS_LTC44XX_VALIDS value +#endif + +#define BOARD_ADC_PERIPH_5V_OC (!px4_arch_gpioread(GPIO_VDD_5V_PERIPH_nOC)) +#define BOARD_ADC_HIPOWER_5V_OC (!px4_arch_gpioread(GPIO_VDD_5V_HIPOWER_nOC)) + + +/* This board provides a DMA pool and APIs */ +#define BOARD_DMA_ALLOC_POOL_SIZE 5120 + +/* This board provides the board_on_reset interface */ + +#define BOARD_HAS_ON_RESET 1 + +#define PX4_GPIO_INIT_LIST { \ + PX4_ADC_GPIO, \ + GPIO_HW_VER_REV_DRIVE, \ + GPIO_CAN1_TX, \ + GPIO_CAN1_RX, \ + GPIO_CAN2_TX, \ + GPIO_CAN2_RX, \ + GPIO_CAN1_SILENT_S0, \ + GPIO_CAN2_SILENT_S1, \ + GPIO_HEATER1_OUTPUT, \ + GPIO_HEATER2_OUTPUT, \ + GPIO_nPOWER_IN_A, \ + GPIO_nPOWER_IN_B, \ + GPIO_nPOWER_IN_C, \ + GPIO_VDD_5V_PERIPH_EN, \ + GPIO_VDD_5V_PERIPH_nOC, \ + GPIO_VDD_5V_HIPOWER_EN, \ + GPIO_VDD_5V_HIPOWER_nOC, \ + GPIO_VDD_PWM_POWER_EN, \ + GPIO_VDD_3V3_SD_CARD_EN, \ + GPIO_VDD_3V3_SENSORS3_EN, \ + GPIO_VDD_3V3_SENSORS1_EN, \ + GPIO_VDD_5V_RC_EN, \ + GPIO_ETH_POWER_EN, \ + GPIO_TONE_ALARM_IDLE, \ + GPIO_nSAFETY_SWITCH_LED_OUT, \ + GPIO_SAFETY_SWITCH_IN, \ + GPIO_nARMED_INIT, \ + GPIO_PWM_VOLT_SEL, \ + GPIO_PA10, \ + GPIO_PA15, \ + BATT_VOLTAGE_SENS, \ + SPI3_MOSI, \ + BATT_CURRENT_SENS, \ + SPI3_SCK, \ + SPI3_MISO, \ + GPIO_ADC_6V6, \ + GPIO_PG2, \ + GPIO_PI9, \ + GPIO_PI12, \ + GPIO_PI13, \ + GPIO_PI14, \ + GPIO_PI15, \ + GPIO_PJ7, \ + GPIO_PJ8, \ + GPIO_PJ10, \ + GPIO_PJ13, \ + GPIO_PJ14, \ + GPIO_PJ15, \ + GPIO_PK0, \ + GPIO_PK1, \ + GPIO_PK2, \ + GPIO_PK3, \ + GPIO_PK4, \ + GPIO_PK5, \ + GPIO_PK6, \ + GPIO_PK7, \ + } + +#define BOARD_ENABLE_CONSOLE_BUFFER + +#define PX4_I2C_BUS_MTD 4 + + +#define BOARD_NUM_IO_TIMERS 5 +#define BOARD_SPI_BUS_MAX_BUS_ITEMS 5 + +__BEGIN_DECLS + +/**************************************************************************************************** + * Public Types + ****************************************************************************************************/ + +/**************************************************************************************************** + * Public data + ****************************************************************************************************/ + +#ifndef __ASSEMBLY__ + +/**************************************************************************************************** + * Public Functions + ****************************************************************************************************/ + +/**************************************************************************** + * Name: stm32_sdio_initialize + * + * Description: + * Initialize SDIO-based MMC/SD card support + * + ****************************************************************************/ + +int stm32_sdio_initialize(void); + +/**************************************************************************************************** + * Name: stm32_spiinitialize + * + * Description: + * Called to configure SPI chip select GPIO pins for the PX4FMU board. + * + ****************************************************************************************************/ + +extern void stm32_spiinitialize(void); + +extern void stm32_usbinitialize(void); + +extern void board_peripheral_reset(int ms); + +#include + +#endif /* __ASSEMBLY__ */ + +__END_DECLS diff --git a/boards/xc-fly/xc-slam/src/bootloader_main.c b/boards/cuav/x25-super/src/bootloader_main.c similarity index 88% rename from boards/xc-fly/xc-slam/src/bootloader_main.c rename to boards/cuav/x25-super/src/bootloader_main.c index 5670308a29..d61cbe306c 100644 --- a/boards/xc-fly/xc-slam/src/bootloader_main.c +++ b/boards/cuav/x25-super/src/bootloader_main.c @@ -1,6 +1,6 @@ /**************************************************************************** * - * Copyright (c) 2021 PX4 Development Team. All rights reserved. + * Copyright (c) 2019-2026 PX4 Development Team. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -50,19 +50,6 @@ extern int sercon_main(int c, char **argv); -__EXPORT void board_on_reset(int status) {} - -__EXPORT void stm32_boardinitialize(void) -{ - /* configure USB interfaces */ - stm32_usbinitialize(); -} - -__EXPORT int board_app_initialize(uintptr_t arg) -{ - return 0; -} - void board_late_initialize(void) { sercon_main(0, NULL); diff --git a/boards/cuav/x25-super/src/can.c b/boards/cuav/x25-super/src/can.c new file mode 100644 index 0000000000..40b6c68692 --- /dev/null +++ b/boards/cuav/x25-super/src/can.c @@ -0,0 +1,123 @@ +/**************************************************************************** + * + * Copyright (C) 2026 PX4 Development Team. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name PX4 nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +/** + * @file x25-super_can.c + * + * Board-specific CAN functions. + */ + +#ifdef CONFIG_CAN + +#include +#include + +#include +#include + +#include "chip.h" +#include "arm_internal.h" + +#include "chip.h" +#include "stm32_can.h" +#include "board_config.h" + +/************************************************************************************ + * Pre-processor Definitions + ************************************************************************************/ +/* Configuration ********************************************************************/ + +#if defined(CONFIG_STM32_CAN1) && defined(CONFIG_STM32_CAN2) +# warning "Both CAN1 and CAN2 are enabled. Assuming only CAN1." +# undef CONFIG_STM32_CAN2 +#endif + +#ifdef CONFIG_STM32_CAN1 +# define CAN_PORT 1 +#else +# define CAN_PORT 2 +#endif + +/************************************************************************************ + * Private Functions + ************************************************************************************/ + +/************************************************************************************ + * Public Functions + ************************************************************************************/ +int can_devinit(void); + +/************************************************************************************ + * Name: can_devinit + * + * Description: + * All STM32 architectures must provide the following interface to work with + * examples/can. + * + ************************************************************************************/ + +int can_devinit(void) +{ + static bool initialized = false; + struct can_dev_s *can; + int ret; + + /* Check if we have already initialized */ + + if (!initialized) { + /* Call stm32_caninitialize() to get an instance of the CAN interface */ + + can = stm32_caninitialize(CAN_PORT); + + if (can == NULL) { + canerr("ERROR: Failed to get CAN interface\n"); + return -ENODEV; + } + + /* Register the CAN driver at "/dev/can0" */ + + ret = can_register("/dev/can0", can); + + if (ret < 0) { + canerr("ERROR: can_register failed: %d\n", ret); + return ret; + } + + /* Now we are initialized */ + + initialized = true; + } + + return OK; +} +#endif /* CONFIG_CAN */ diff --git a/boards/xc-fly/xc-slim/src/hw_config.h b/boards/cuav/x25-super/src/hw_config.h similarity index 65% rename from boards/xc-fly/xc-slim/src/hw_config.h rename to boards/cuav/x25-super/src/hw_config.h index e986fe0e90..a9505b3803 100644 --- a/boards/xc-fly/xc-slim/src/hw_config.h +++ b/boards/cuav/x25-super/src/hw_config.h @@ -1,37 +1,12 @@ -/**************************************************************************** +/* + * hw_config.h * - * Copyright (C) 2021 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ + * Created on: May 17, 2015 + * Author: david_s5 + */ -#pragma once +#ifndef HW_CONFIG_H_ +#define HW_CONFIG_H_ /**************************************************************************** * 10-8--2016: @@ -53,8 +28,6 @@ * INTERFACE_USART 1 - (Optional) Scan and use the Serial interface for bootloading * USBDEVICESTRING "PX4 BL FMU v2.x" - USB id string * USBPRODUCTID 0x0011 - PID Should match defconfig - * BOOT_DELAY_ADDRESS 0x000001a0 - (Optional) From the linker script from Linker Script to get a custom - * delay provided by an APP FW * BOARD_TYPE 9 - Must match .prototype boad_id * _FLASH_KBYTES (*(uint16_t *)0x1fff7a22) - Run time flash size detection * BOARD_FLASH_SECTORS ((_FLASH_KBYTES == 0x400) ? 11 : 23) - Run time determine the physical last sector @@ -93,23 +66,38 @@ #define BOARD_VBUS MK_GPIO_INPUT(GPIO_OTGFS_VBUS) //#define USE_VBUS_PULL_DOWN -#define INTERFACE_USART 6 -#define INTERFACE_USART_CONFIG "/dev/ttyS5,57600" -#define BOOT_DELAY_ADDRESS 0x000001a0 -#define BOARD_TYPE 319 -#define BOARD_FLASH_SECTORS (14) -#define BOARD_FLASH_SIZE (16 * 128 * 1024) -#define APP_RESERVATION_SIZE (1 * 128 * 1024) +#define INTERFACE_USART 1 +#define INTERFACE_USART_CONFIG "/dev/ttyS0,1500000" +#define BOARD_TYPE 7003 +#define _FLASH_KBYTES (*(uint32_t *)0x1FF1E880) +#define BOARD_FLASH_SECTORS (15) +#define BOARD_FLASH_SIZE (_FLASH_KBYTES * 1024) #define OSC_FREQ 16 #define BOARD_PIN_LED_ACTIVITY GPIO_nLED_BLUE // BLUE -#define BOARD_PIN_LED_BOOTLOADER GPIO_nLED_RED // RED -#define BOARD_LED_ON 1 -#define BOARD_LED_OFF 0 +#define BOARD_PIN_LED_BOOTLOADER GPIO_nLED_GREEN // GREEN +#define BOARD_LED_ON 0 +#define BOARD_LED_OFF 1 #define SERIAL_BREAK_DETECT_DISABLED 1 +/* + * Uncommenting this allows to force the bootloader through + * a PWM output pin. As this can accidentally initialize + * an ESC prematurely, it is not recommended. This feature + * has not been used and hence defaults now to off. + * + * # define BOARD_FORCE_BL_PIN_OUT (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_SET|GPIO_PORTE|GPIO_PIN14) + * # define BOARD_FORCE_BL_PIN_IN (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTE|GPIO_PIN11) + * + * # define BOARD_POWER_PIN_OUT (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_SET|GPIO_PORTA|GPIO_PIN4) + * # define BOARD_POWER_ON 1 + * # define BOARD_POWER_OFF 0 + * # undef BOARD_POWER_PIN_RELEASE // Leave pin enabling Power - un comment to release (disable power) + * +*/ + #if !defined(ARCH_SN_MAX_LENGTH) # define ARCH_SN_MAX_LENGTH 12 #endif @@ -133,3 +121,5 @@ #ifndef BOOT_DEVICES_FILTER_ONUSB # define BOOT_DEVICES_FILTER_ONUSB USB0_DEV|SERIAL0_DEV|SERIAL1_DEV #endif + +#endif /* HW_CONFIG_H_ */ diff --git a/boards/xc-fly/xc-slim/src/i2c.cpp b/boards/cuav/x25-super/src/i2c.cpp similarity index 91% rename from boards/xc-fly/xc-slim/src/i2c.cpp rename to boards/cuav/x25-super/src/i2c.cpp index d557e692af..1d363cfe27 100644 --- a/boards/xc-fly/xc-slim/src/i2c.cpp +++ b/boards/cuav/x25-super/src/i2c.cpp @@ -1,6 +1,6 @@ /**************************************************************************** * - * Copyright (C) 2021 PX4 Development Team. All rights reserved. + * Copyright (C) 2026 PX4 Development Team. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -34,6 +34,8 @@ #include constexpr px4_i2c_bus_t px4_i2c_buses[I2C_BUS_MAX_BUS_ITEMS] = { - initI2CBusInternal(1), - initI2CBusExternal(4), + initI2CBusExternal(1), + initI2CBusExternal(2), + initI2CBusExternal(3), + initI2CBusInternal(4), }; diff --git a/boards/xc-fly/xc-slim/src/init.c b/boards/cuav/x25-super/src/init.c similarity index 60% rename from boards/xc-fly/xc-slim/src/init.c rename to boards/cuav/x25-super/src/init.c index cd7d3d2162..96a6386fd6 100644 --- a/boards/xc-fly/xc-slim/src/init.c +++ b/boards/cuav/x25-super/src/init.c @@ -1,6 +1,6 @@ /**************************************************************************** * - * Copyright (c) 2021 PX4 Development Team. All rights reserved. + * Copyright (c) 2012-2026 PX4 Development Team. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -34,21 +34,34 @@ /** * @file init.c * - * FMU-specific early startup code. This file implements the + * PX4FMU-specific early startup code. This file implements the * board_app_initialize() function that is called early by nsh during startup. * * Code here is run before the rcS script is invoked; it should start required - * subsystems and perform board-specific initialisation. + * subsystems and perform board-specific initialization. */ +/**************************************************************************** + * Included Files + ****************************************************************************/ + #include "board_config.h" -#include +#include +#include +#include +#include +#include #include #include +#include #include #include +#include +#include +#include +#include #include #include "arm_internal.h" @@ -57,21 +70,31 @@ #include #include #include +#include #include +#include #include -#include +/**************************************************************************** + * Pre-Processor Definitions + ****************************************************************************/ -# if defined(FLASH_BASED_PARAMS) -# include -#endif +/* Configuration ************************************************************/ +/* + * Ideally we'd be able to get these from arm_internal.h, + * but since we want to be able to disable the NuttX use + * of leds for system indication at will and there is no + * separate switch, we need to build independent of the + * CONFIG_ARCH_LEDS configuration switch. + */ __BEGIN_DECLS extern void led_init(void); extern void led_on(int led); extern void led_off(int led); __END_DECLS + /************************************************************************************ * Name: board_peripheral_reset * @@ -80,7 +103,25 @@ __END_DECLS ************************************************************************************/ __EXPORT void board_peripheral_reset(int ms) { - UNUSED(ms); + /* set the peripheral rails off */ + + VDD_5V_PERIPH_EN(false); + VDD_3V3_SENSORS1_EN(false); + VDD_3V3_SENSORS3_EN(false); + + board_control_spi_sensors_power(false, 0xffff); + + /* wait for the peripheral rail to reach GND */ + usleep(ms * 1000); + syslog(LOG_DEBUG, "reset done, %d ms\n", ms); + + /* re-enable power */ + + /* switch the peripheral rail back on */ + board_control_spi_sensors_power(true, 0xffff); + VDD_5V_PERIPH_EN(true); + VDD_3V3_SENSORS1_EN(true); + VDD_3V3_SENSORS3_EN(true); } /************************************************************************************ @@ -97,14 +138,9 @@ __EXPORT void board_peripheral_reset(int ms) __EXPORT void board_on_reset(int status) { for (int i = 0; i < DIRECT_PWM_OUTPUT_CHANNELS; ++i) { - px4_arch_configgpio(PX4_MAKE_GPIO_INPUT(io_timer_channel_get_as_pwm_input(i))); + px4_arch_configgpio(io_timer_channel_get_gpio_output(i)); } - /* - * On resets invoked from system (not boot) ensure we establish a low - * output state on PWM pins to disarm the ESC and prevent the reset from potentially - * spinning up the motors. - */ if (status >= 0) { up_mdelay(100); } @@ -119,24 +155,27 @@ __EXPORT void board_on_reset(int status) * and mapped but before any devices have been initialized. * ************************************************************************************/ -__EXPORT void stm32_boardinitialize(void) + +__EXPORT void +stm32_boardinitialize(void) { - /* Reset PWM first thing */ - board_on_reset(-1); + board_on_reset(-1); /* Reset PWM first thing */ /* configure LEDs */ + board_autoled_initialize(); /* configure pins */ + const uint32_t gpio[] = PX4_GPIO_INIT_LIST; px4_gpio_init(gpio, arraySize(gpio)); - /* configure SPI interfaces */ - stm32_spiinitialize(); - /* configure USB interfaces */ + stm32_usbinitialize(); + VDD_3V3_ETH_POWER_EN(true); + } /**************************************************************************** @@ -150,61 +189,89 @@ __EXPORT void stm32_boardinitialize(void) * Input Parameters: * arg - The boardctl() argument is passed to the board_app_initialize() * implementation without modification. The argument has no - * meaning to NuttX; + * meaning to NuttX; the meaning of the argument is a contract + * between the board-specific initalization logic and the the + * matching application logic. The value cold be such things as a + * mode enumeration value, a set of DIP switch switch settings, a + * pointer to configuration data read from a file or serial FLASH, + * or whatever you would like to do with it. Every implementation + * should accept zero/NULL as a default configuration. * * Returned Value: * Zero (OK) is returned on success; a negated errno value is returned on * any failure to indicate the nature of the failure. * ****************************************************************************/ + __EXPORT int board_app_initialize(uintptr_t arg) { +#if !defined(BOOTLOADER) + + /* Power on Interfaces */ + VDD_3V3_SD_CARD_EN(true); + VDD_5V_PERIPH_EN(true); + VDD_5V_HIPOWER_EN(true); + VDD_PWM_POWER_EN(true); + VDD_3V3_SENSORS1_EN(true); + VDD_3V3_SENSORS3_EN(true); + VDD_5V_RC_EN(true); + /* Need hrt running before using the ADC */ + px4_platform_init(); - /* configure the DMA allocator */ + // Use the default HW_VER_REV(0x0,0x0) for Ramtron + + stm32_spiinitialize(); + + /* Configure the HW based on the manifest */ + + px4_platform_configure(); + + /* Configure the Actual SPI interfaces (after we determined the HW version) */ + + stm32_spiinitialize(); + + board_spi_reset(10, 0xffff); + + /* Configure the DMA allocator */ + if (board_dma_alloc_init() < 0) { syslog(LOG_ERR, "[boot] DMA alloc FAILED\n"); } +# if defined(SERIAL_HAVE_RXDMA) + // set up the serial DMA polling at 1ms intervals for received bytes that have not triggered a DMA event. + static struct hrt_call serial_dma_call; + hrt_call_every(&serial_dma_call, 1000, 1000, (hrt_callout)stm32_serial_dma_poll, NULL); +# endif + /* initial LED state */ drv_led_start(); led_off(LED_RED); + led_on(LED_GREEN); // Indicate Power. led_off(LED_BLUE); if (board_hardfault_init(2, true) != 0) { - led_on(LED_BLUE); - } - -#ifdef CONFIG_MMCSD - int ret = stm32_sdio_initialize(); - - if (ret != OK) { - led_on(LED_BLUE); - return ret; - } - -#endif - -// TODO:internal flash store parameters -#if defined(FLASH_BASED_PARAMS) - static sector_descriptor_t params_sector_map[] = { - {15, 128 * 1024, 0x081E0000}, - {0, 0, 0}, - }; - - /* Initialize the flashfs layer to use heap allocated memory */ - int result = parameter_flashfs_init(params_sector_map, NULL, 0); - - if (result != OK) { - syslog(LOG_ERR, "[boot] FAILED to init params in FLASH %d\n", result); led_on(LED_RED); } -#endif + // Ensure Power is off for > 10 mS + usleep(15 * 1000); + VDD_3V3_SD_CARD_EN(true); + usleep(500 * 1000); - /* Configure the HW based on the manifest */ - px4_platform_configure(); +# ifdef CONFIG_MMCSD + int ret = stm32_sdio_initialize(); + + if (ret != OK) { + led_on(LED_RED); + return ret; + } + +# endif /* CONFIG_MMCSD */ + +#endif /* !defined(BOOTLOADER) */ return OK; } diff --git a/boards/xc-fly/xc-slim/src/led.c b/boards/cuav/x25-super/src/led.c similarity index 52% rename from boards/xc-fly/xc-slim/src/led.c rename to boards/cuav/x25-super/src/led.c index 0420c1da2e..4e468eeae3 100644 --- a/boards/xc-fly/xc-slim/src/led.c +++ b/boards/cuav/x25-super/src/led.c @@ -1,6 +1,6 @@ /**************************************************************************** * - * Copyright (c) 2021 PX4 Development Team. All rights reserved. + * Copyright (c) 2026 PX4 Development Team. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -32,9 +32,9 @@ ****************************************************************************/ /** - * @file led.c + * @file fmu_led.c * - * LED backend. + * PX4FMU LED backend. */ #include @@ -62,16 +62,34 @@ extern void led_off(int led); extern void led_toggle(int led); __END_DECLS -# define xlat(p) (p) +#ifdef CONFIG_ARCH_LEDS +static bool nuttx_owns_leds = true; +// B R S G +// 0 1 2 3 +static const uint8_t xlatpx4[] = {1, 2, 4, 0}; +# define xlat(p) xlatpx4[(p)] static uint32_t g_ledmap[] = { GPIO_nLED_GREEN, // Indexed by BOARD_LED_GREEN GPIO_nLED_BLUE, // Indexed by BOARD_LED_BLUE GPIO_nLED_RED, // Indexed by BOARD_LED_RED + GPIO_nSAFETY_SWITCH_LED_OUT, // Indexed by LED_SAFETY by xlatpx4 }; +#else + +# define xlat(p) (p) +static uint32_t g_ledmap[] = { + GPIO_nLED_BLUE, // Indexed by LED_BLUE + GPIO_nLED_RED, // Indexed by LED_RED, LED_AMBER + GPIO_nSAFETY_SWITCH_LED_OUT, // Indexed by LED_SAFETY (defaulted to an input) + GPIO_nLED_GREEN, // Indexed by LED_GREEN +}; + +#endif + __EXPORT void led_init(void) { - /* Configure LED GPIOs for output */ + for (size_t l = 0; l < (sizeof(g_ledmap) / sizeof(g_ledmap[0])); l++) { if (g_ledmap[l] != 0) { stm32_configgpio(g_ledmap[l]); @@ -82,6 +100,7 @@ __EXPORT void led_init(void) static void phy_set_led(int led, bool state) { /* Drive Low to switch on */ + if (g_ledmap[led] != 0) { stm32_gpiowrite(g_ledmap[led], !state); } @@ -111,3 +130,107 @@ __EXPORT void led_toggle(int led) { phy_set_led(xlat(led), !phy_get_led(xlat(led))); } + +#ifdef CONFIG_ARCH_LEDS +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: board_autoled_initialize + ****************************************************************************/ + +void board_autoled_initialize(void) +{ + led_init(); +} + +/**************************************************************************** + * Name: board_autoled_on + ****************************************************************************/ + +void board_autoled_on(int led) +{ + if (!nuttx_owns_leds) { + return; + } + + switch (led) { + default: + break; + + case LED_HEAPALLOCATE: + phy_set_led(BOARD_LED_BLUE, true); + break; + + case LED_IRQSENABLED: + phy_set_led(BOARD_LED_BLUE, false); + phy_set_led(BOARD_LED_GREEN, true); + break; + + case LED_STACKCREATED: + phy_set_led(BOARD_LED_GREEN, true); + phy_set_led(BOARD_LED_BLUE, true); + break; + + case LED_INIRQ: + phy_set_led(BOARD_LED_BLUE, true); + break; + + case LED_SIGNAL: + phy_set_led(BOARD_LED_GREEN, true); + break; + + case LED_ASSERTION: + phy_set_led(BOARD_LED_RED, true); + phy_set_led(BOARD_LED_BLUE, true); + break; + + case LED_PANIC: + phy_set_led(BOARD_LED_RED, true); + break; + + case LED_IDLE : /* IDLE */ + phy_set_led(BOARD_LED_RED, true); + break; + } +} + +/**************************************************************************** + * Name: board_autoled_off + ****************************************************************************/ + +void board_autoled_off(int led) +{ + if (!nuttx_owns_leds) { + return; + } + + switch (led) { + default: + break; + + case LED_SIGNAL: + phy_set_led(BOARD_LED_GREEN, false); + break; + + case LED_INIRQ: + phy_set_led(BOARD_LED_BLUE, false); + break; + + case LED_ASSERTION: + phy_set_led(BOARD_LED_RED, false); + phy_set_led(BOARD_LED_BLUE, false); + break; + + case LED_PANIC: + phy_set_led(BOARD_LED_RED, false); + break; + + case LED_IDLE : /* IDLE */ + phy_set_led(BOARD_LED_RED, false); + break; + } +} + +#endif /* CONFIG_ARCH_LEDS */ diff --git a/boards/xc-fly/xc-slam/src/mtd.cpp b/boards/cuav/x25-super/src/mtd.cpp similarity index 71% rename from boards/xc-fly/xc-slam/src/mtd.cpp rename to boards/cuav/x25-super/src/mtd.cpp index e89e53e03b..cf072058c9 100644 --- a/boards/xc-fly/xc-slam/src/mtd.cpp +++ b/boards/cuav/x25-super/src/mtd.cpp @@ -1,6 +1,6 @@ /**************************************************************************** * - * Copyright (C) 2020 PX4 Development Team. All rights reserved. + * Copyright (C) 2026 PX4 Development Team. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -30,33 +30,56 @@ * POSSIBILITY OF SUCH DAMAGE. * ****************************************************************************/ -//TODO:Prepare for NxtDual + +#include +#include #include #include // KiB BS nB -static const px4_mft_device_t spi2 = { // FM25V02A on FMUM native: 32K X 8, emulated as (1024 Blocks of 32) +static const px4_mft_device_t spi5 = { // FM25V05A on FMUM native: 64K X 8, emulated as (1024 Blocks of 64) .bus_type = px4_mft_device_t::SPI, - .devid = SPIDEV_FLASH(2) // SPIDEV_FLASH(0) + .devid = SPIDEV_FLASH(0) +}; +static const px4_mft_device_t i2c4 = { // 24LC64T on IMU 8K 32 X 256 + .bus_type = px4_mft_device_t::I2C, + .devid = PX4_MK_I2C_DEVID(4, 0x50) }; -static const px4_mtd_entry_t fmum_flash = { - .device = &spi2, +static const px4_mtd_entry_t fmum_fram = { + .device = &spi5, .npart = 1, .partd = { { .type = MTD_PARAMETERS, .path = "/fs/mtd_params", - .nblocks = 32 + .nblocks = (65536 / (1 << CONFIG_RAMTRON_EMULATE_SECTOR_SHIFT)) + } + }, +}; +static const px4_mtd_entry_t imu_eeprom = { + .device = &i2c4, + .npart = 2, + .partd = { + { + .type = MTD_CALDATA, + .path = "/fs/mtd_caldata", + .nblocks = 248 + }, + { + .type = MTD_NET, + .path = "/fs/mtd_net", + .nblocks = 8 // 256 = 32 * 8 } }, }; static const px4_mtd_manifest_t board_mtd_config = { - .nconfigs = 1, + .nconfigs = 2, .entries = { - &fmum_flash + &fmum_fram, + &imu_eeprom } }; @@ -65,10 +88,11 @@ static const px4_mft_entry_s mtd_mft = { .pmft = (void *) &board_mtd_config, }; + static const px4_mft_s mft = { .nmft = 1, .mfts = { - &mtd_mft + &mtd_mft, } }; diff --git a/boards/xc-fly/xc-slam/src/sdio.c b/boards/cuav/x25-super/src/sdio.c similarity index 98% rename from boards/xc-fly/xc-slam/src/sdio.c rename to boards/cuav/x25-super/src/sdio.c index 869d757756..3c295fdf95 100644 --- a/boards/xc-fly/xc-slam/src/sdio.c +++ b/boards/cuav/x25-super/src/sdio.c @@ -1,6 +1,6 @@ /**************************************************************************** * - * Copyright (C) 2014, 2016 Gregory Nutt. All rights reserved. + * Copyright (C) 2014, 2026 Gregory Nutt. All rights reserved. * Author: Gregory Nutt * * Redistribution and use in source and binary forms, with or without diff --git a/boards/xc-fly/xc-slam/src/spi.cpp b/boards/cuav/x25-super/src/spi.cpp similarity index 66% rename from boards/xc-fly/xc-slam/src/spi.cpp rename to boards/cuav/x25-super/src/spi.cpp index afaacd4eef..ac6a278f0e 100644 --- a/boards/xc-fly/xc-slam/src/spi.cpp +++ b/boards/cuav/x25-super/src/spi.cpp @@ -1,6 +1,6 @@ /**************************************************************************** * - * Copyright (C) 2021 PX4 Development Team. All rights reserved. + * Copyright (C) 2020, 2026 PX4 Development Team. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -35,20 +35,23 @@ #include #include - constexpr px4_spi_bus_t px4_spi_buses[SPI_BUS_MAX_BUS_ITEMS] = { initSPIBus(SPI::Bus::SPI1, { - initSPIDevice(DRV_GYR_DEVTYPE_BMI088, SPI::CS{GPIO::PortA, GPIO::Pin3}, SPI::DRDY{GPIO::PortA, GPIO::Pin1}), - initSPIDevice(DRV_ACC_DEVTYPE_BMI088, SPI::CS{GPIO::PortA, GPIO::Pin2}, SPI::DRDY{GPIO::PortA, GPIO::Pin0}), - }), + initSPIDevice(DRV_IMU_DEVTYPE_SCH16T, SPI::CS{GPIO::PortJ, GPIO::Pin11}, SPI::DRDY{GPIO::PortF, GPIO::Pin2}), + }, {GPIO::PortF, GPIO::Pin4}), initSPIBus(SPI::Bus::SPI2, { - initSPIDevice(SPIDEV_FLASH(2), SPI::CS{GPIO::PortD, GPIO::Pin4}) - }), - initSPIBus(SPI::Bus::SPI3, { - //initSPIDevice(DRV_OSD_DEVTYPE_ATXXXX, SPI::CS{GPIO::PortA, GPIO::Pin15}) - }), + initSPIDevice(DRV_IMU_DEVTYPE_IIM42652, SPI::CS{GPIO::PortH, GPIO::Pin5}, SPI::DRDY{GPIO::PortG, GPIO::Pin3}), + }, {GPIO::PortI, GPIO::Pin4}), initSPIBus(SPI::Bus::SPI4, { - initSPIDevice(DRV_IMU_DEVTYPE_ICM42688P, SPI::CS{GPIO::PortC, GPIO::Pin13}, SPI::DRDY{GPIO::PortE, GPIO::Pin4}), + initSPIDevice(DRV_MAG_DEVTYPE_RM3100, SPI::CS{GPIO::PortH, GPIO::Pin15}, SPI::DRDY{GPIO::PortG, GPIO::Pin1}), + initSPIDevice(DRV_BARO_DEVTYPE_BMP581, SPI::CS{GPIO::PortJ, GPIO::Pin6}, SPI::DRDY{GPIO::PortJ, GPIO::Pin0}), + }, {GPIO::PortJ, GPIO::Pin4}), + initSPIBus(SPI::Bus::SPI5, { + initSPIDevice(DRV_IMU_DEVTYPE_IIM42653, SPI::CS{GPIO::PortJ, GPIO::Pin12}, SPI::DRDY{GPIO::PortG, GPIO::Pin6}), + initSPIDevice(SPIDEV_FLASH(0), SPI::CS{GPIO::PortG, GPIO::Pin7}), + }, {GPIO::PortI, GPIO::Pin11}), + initSPIBusExternal(SPI::Bus::SPI6, { + initSPIConfigExternal(SPI::CS{GPIO::PortI, GPIO::Pin10}, SPI::DRDY{GPIO::PortD, GPIO::Pin11}), }), }; diff --git a/boards/cuav/x25-super/src/timer_config.cpp b/boards/cuav/x25-super/src/timer_config.cpp new file mode 100644 index 0000000000..aa9e2c073e --- /dev/null +++ b/boards/cuav/x25-super/src/timer_config.cpp @@ -0,0 +1,90 @@ +/**************************************************************************** + * + * Copyright (C) 2026 PX4 Development Team. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name PX4 nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +#include + +/* Timer allocation + * + * TIM5_CH4 T FMU_CH1 PI0 + * TIM5_CH3 T FMU_CH2 PH12 + * TIM5_CH2 T FMU_CH3 PH11 + * TIM5_CH1 T FMU_CH4 PH10 + * TIM4_CH2 T FMU_CH5 PD13 + * TIM4_CH3 T FMU_CH6 PD14 + * TIM4_CH1 T FMU_CH7 PD12 + * TIM4_CH4 T FMU_CH8 PD15 + * + * + * TIM1_CH2 T FMU_CAP1 < Capture PE11 + * TIM1_CH1 T FMU_CAP2 < Capture PE9 + * TIM1_CH3 T FMU_CAP3 < Capture PJ9 + * TIM8_CH2 T FMU_CAP4 < Capture PI6 + * TIM8_CH3 T FMU_CAP5 < Capture PI7 + * TIM8_CH1 T FMU_CAP6 < Capture PI5 + * TIM12_CH1 T FMU_CAP7 < Capture PH6 + * TIM12_CH2 T FMU_CAP8 < Capture PH9 + * + * + * TIM14_CH1 T BUZZER_1 - Driven by other driver + * TIM8_CH1_IN T FMU_PPM_INPUT - Sampled byt HRT by other driver + */ + +constexpr io_timers_t io_timers[MAX_IO_TIMERS] = { + initIOTimer(Timer::Timer5, DMA{DMA::Index1}), + initIOTimer(Timer::Timer4, DMA{DMA::Index1}), + initIOTimer(Timer::Timer1), + initIOTimer(Timer::Timer8), + initIOTimer(Timer::Timer12), +}; + +constexpr timer_io_channels_t timer_io_channels[MAX_TIMER_IO_CHANNELS] = { + initIOTimerChannel(io_timers, {Timer::Timer5, Timer::Channel4}, {GPIO::PortI, GPIO::Pin0}), + initIOTimerChannel(io_timers, {Timer::Timer5, Timer::Channel3}, {GPIO::PortH, GPIO::Pin12}), + initIOTimerChannel(io_timers, {Timer::Timer5, Timer::Channel2}, {GPIO::PortH, GPIO::Pin11}), + initIOTimerChannel(io_timers, {Timer::Timer5, Timer::Channel1}, {GPIO::PortH, GPIO::Pin10}), + initIOTimerChannel(io_timers, {Timer::Timer4, Timer::Channel2}, {GPIO::PortD, GPIO::Pin13}), + initIOTimerChannel(io_timers, {Timer::Timer4, Timer::Channel3}, {GPIO::PortD, GPIO::Pin14}), + initIOTimerChannel(io_timers, {Timer::Timer4, Timer::Channel1}, {GPIO::PortD, GPIO::Pin12}), + initIOTimerChannel(io_timers, {Timer::Timer4, Timer::Channel4}, {GPIO::PortD, GPIO::Pin15}), + initIOTimerChannelCapture(io_timers, {Timer::Timer1, Timer::Channel2}, {GPIO::PortE, GPIO::Pin11}), + initIOTimerChannelCapture(io_timers, {Timer::Timer1, Timer::Channel1}, {GPIO::PortE, GPIO::Pin9}), + initIOTimerChannelCapture(io_timers, {Timer::Timer1, Timer::Channel3}, {GPIO::PortJ, GPIO::Pin9}), + initIOTimerChannelCapture(io_timers, {Timer::Timer8, Timer::Channel2}, {GPIO::PortI, GPIO::Pin6}), + initIOTimerChannelCapture(io_timers, {Timer::Timer8, Timer::Channel3}, {GPIO::PortI, GPIO::Pin7}), + initIOTimerChannelCapture(io_timers, {Timer::Timer8, Timer::Channel1}, {GPIO::PortI, GPIO::Pin5}), + initIOTimerChannelCapture(io_timers, {Timer::Timer12, Timer::Channel1}, {GPIO::PortH, GPIO::Pin6}), + initIOTimerChannelCapture(io_timers, {Timer::Timer12, Timer::Channel2}, {GPIO::PortH, GPIO::Pin9}), +}; + +constexpr io_timers_channel_mapping_t io_timers_channel_mapping = + initIOTimerChannelMapping(io_timers, timer_io_channels); diff --git a/boards/xc-fly/xc-slam/src/usb.c b/boards/cuav/x25-super/src/usb.c similarity index 72% rename from boards/xc-fly/xc-slam/src/usb.c rename to boards/cuav/x25-super/src/usb.c index 9591784866..0a6e88c6b9 100644 --- a/boards/xc-fly/xc-slam/src/usb.c +++ b/boards/cuav/x25-super/src/usb.c @@ -1,6 +1,6 @@ /**************************************************************************** * - * Copyright (C) 2021 PX4 Development Team. All rights reserved. + * Copyright (C) 2026 PX4 Development Team. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -32,22 +32,48 @@ ****************************************************************************/ /** - * @file usb.c + * @file px4fmu_usb.c * * Board-specific USB functions. */ -#include "board_config.h" +/************************************************************************************ + * Included Files + ************************************************************************************/ + +#include + +#include +#include +#include +#include + #include #include + +#include +#include +#include #include -#include +#include "board_config.h" + +/************************************************************************************ + * Definitions + ************************************************************************************/ + +/************************************************************************************ + * Private Functions + ************************************************************************************/ + +/************************************************************************************ + * Public Functions + ************************************************************************************/ /************************************************************************************ * Name: stm32_usbinitialize * * Description: - * Called to setup USB-related GPIO pins for the board. + * Called to setup USB-related GPIO pins for the PX4FMU board. * ************************************************************************************/ @@ -72,6 +98,7 @@ __EXPORT void stm32_usbinitialize(void) * while the USB is suspended. * ************************************************************************************/ + __EXPORT void stm32_usbsuspend(FAR struct usbdev_s *dev, bool resume) { uinfo("resume: %d\n", resume); diff --git a/boards/cuav/x7pro/default.px4board b/boards/cuav/x7pro/default.px4board index b186910f98..59686d2ba4 100644 --- a/boards/cuav/x7pro/default.px4board +++ b/boards/cuav/x7pro/default.px4board @@ -71,7 +71,6 @@ CONFIG_MODULES_NAVIGATOR=y CONFIG_MODULES_RC_UPDATE=y CONFIG_MODULES_SENSORS=y CONFIG_MODULES_SIMULATION_SIMULATOR_SIH=y -CONFIG_MODULES_TEMPERATURE_COMPENSATION=y CONFIG_MODULES_UXRCE_DDS_CLIENT=y CONFIG_MODULES_VTOL_ATT_CONTROL=y CONFIG_SYSTEMCMDS_ACTUATOR_TEST=y diff --git a/boards/cuav/x7pro/init/rc.board_defaults b/boards/cuav/x7pro/init/rc.board_defaults index c6235b2523..ccb50263bb 100644 --- a/boards/cuav/x7pro/init/rc.board_defaults +++ b/boards/cuav/x7pro/init/rc.board_defaults @@ -12,7 +12,7 @@ param set-default BAT2_A_PER_V 24 # Enable IMU thermal control param set-default SENS_EN_THERMAL 1 -param set-default SENS_TEMP_ID 6946850 +param set-default HEATER1_IMU_ID 6946850 rgbled_pwm start safety_button start diff --git a/boards/cuav/x7pro/nuttx-config/scripts/bootloader_script.ld b/boards/cuav/x7pro/nuttx-config/scripts/bootloader_script.ld index c2eba58f26..ed55056e97 100644 --- a/boards/cuav/x7pro/nuttx-config/scripts/bootloader_script.ld +++ b/boards/cuav/x7pro/nuttx-config/scripts/bootloader_script.ld @@ -132,20 +132,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/cuav/x7pro/nuttx-config/scripts/script.ld b/boards/cuav/x7pro/nuttx-config/scripts/script.ld index f213ad2ff4..dbda50503d 100644 --- a/boards/cuav/x7pro/nuttx-config/scripts/script.ld +++ b/boards/cuav/x7pro/nuttx-config/scripts/script.ld @@ -131,20 +131,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/cuav/x7pro/src/board_config.h b/boards/cuav/x7pro/src/board_config.h index f8a1824ebc..e77d33ca38 100644 --- a/boards/cuav/x7pro/src/board_config.h +++ b/boards/cuav/x7pro/src/board_config.h @@ -104,8 +104,10 @@ #define GPIO_CAN2_SILENT_S1 /* PH3 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTH|GPIO_PIN3) /* HEATER */ -#define GPIO_HEATER_OUTPUT /* PA8 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTA|GPIO_PIN8) -#define HEATER_OUTPUT_EN(on_true) px4_arch_gpiowrite(GPIO_HEATER_OUTPUT, (on_true)) +#define GPIO_HEATER_OUTPUT +#define HEATER_NUM 1 +#define GPIO_HEATER1_OUTPUT /* PA8 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTA|GPIO_PIN8) +#define HEATER1_OUTPUT_EN(on_true) px4_arch_gpiowrite(GPIO_HEATER1_OUTPUT, (on_true)) /* PWM */ #define DIRECT_PWM_OUTPUT_CHANNELS 14 @@ -212,7 +214,7 @@ GPIO_CAN2_RX, \ GPIO_CAN1_SILENT_S0, \ GPIO_CAN2_SILENT_S1, \ - GPIO_HEATER_OUTPUT, \ + GPIO_HEATER1_OUTPUT, \ GPIO_nPOWER_IN_CAN, \ GPIO_nPOWER_IN_ADC, \ GPIO_nPOWER_IN_C, \ diff --git a/boards/cuav/x7pro/src/hw_config.h b/boards/cuav/x7pro/src/hw_config.h index ced086d448..dc81a85b5e 100644 --- a/boards/cuav/x7pro/src/hw_config.h +++ b/boards/cuav/x7pro/src/hw_config.h @@ -53,8 +53,6 @@ * INTERFACE_USART 1 - (Optional) Scan and use the Serial interface for bootloading * USBDEVICESTRING "PX4 BL FMU v2.x" - USB id string * USBPRODUCTID 0x0011 - PID Should match defconfig - * BOOT_DELAY_ADDRESS 0x000001a0 - (Optional) From the linker script from Linker Script to get a custom - * delay provided by an APP FW * BOARD_TYPE 9 - Must match .prototype boad_id * _FLASH_KBYTES (*(uint16_t *)0x1fff7a22) - Run time flash size detection * BOARD_FLASH_SECTORS ((_FLASH_KBYTES == 0x400) ? 11 : 23) - Run time determine the physical last sector @@ -95,7 +93,6 @@ //#define USE_VBUS_PULL_DOWN #define INTERFACE_USART 1 #define INTERFACE_USART_CONFIG "/dev/ttyS4,57600" -#define BOOT_DELAY_ADDRESS 0x000001a0 #define BOARD_TYPE 1010 #define _FLASH_KBYTES (*(uint32_t *)0x1FF1E880) #define BOARD_FLASH_SECTORS (15) diff --git a/boards/cubepilot/cubeorange/default.px4board b/boards/cubepilot/cubeorange/default.px4board index 59500b7c08..ab7bbd6b6e 100644 --- a/boards/cubepilot/cubeorange/default.px4board +++ b/boards/cubepilot/cubeorange/default.px4board @@ -68,7 +68,6 @@ CONFIG_MODULES_NAVIGATOR=y CONFIG_NUM_MISSION_ITMES_SUPPORTED=1000 CONFIG_MODULES_RC_UPDATE=y CONFIG_MODULES_SENSORS=y -CONFIG_MODULES_TEMPERATURE_COMPENSATION=y CONFIG_MODULES_UXRCE_DDS_CLIENT=y CONFIG_MODULES_VTOL_ATT_CONTROL=y CONFIG_SYSTEMCMDS_ACTUATOR_TEST=y diff --git a/boards/cubepilot/cubeorange/init/rc.board_defaults b/boards/cubepilot/cubeorange/init/rc.board_defaults index 7f961cd33e..0bc5b5c763 100644 --- a/boards/cubepilot/cubeorange/init/rc.board_defaults +++ b/boards/cubepilot/cubeorange/init/rc.board_defaults @@ -12,6 +12,6 @@ param set-default BAT2_A_PER_V 17 # Disable IMU thermal control param set-default SENS_EN_THERMAL 0 -param set-default -s SENS_TEMP_ID 2621474 +param set-default -s HEATER1_IMU_ID 2621474 set IOFW "/etc/extras/cubepilot_io-v2_default.bin" diff --git a/boards/cubepilot/cubeorange/nuttx-config/scripts/bootloader_script.ld b/boards/cubepilot/cubeorange/nuttx-config/scripts/bootloader_script.ld index 8d5c394482..5d842052a3 100644 --- a/boards/cubepilot/cubeorange/nuttx-config/scripts/bootloader_script.ld +++ b/boards/cubepilot/cubeorange/nuttx-config/scripts/bootloader_script.ld @@ -132,20 +132,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/cubepilot/cubeorange/nuttx-config/scripts/script.ld b/boards/cubepilot/cubeorange/nuttx-config/scripts/script.ld index f213ad2ff4..dbda50503d 100644 --- a/boards/cubepilot/cubeorange/nuttx-config/scripts/script.ld +++ b/boards/cubepilot/cubeorange/nuttx-config/scripts/script.ld @@ -131,20 +131,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/cubepilot/cubeorange/src/board_config.h b/boards/cubepilot/cubeorange/src/board_config.h index 87a5b3c4e5..2c0674475c 100644 --- a/boards/cubepilot/cubeorange/src/board_config.h +++ b/boards/cubepilot/cubeorange/src/board_config.h @@ -59,6 +59,7 @@ #define PX4IO_SERIAL_BITRATE 1500000 /* 1.5Mbps -> max rate for IO */ #define PX4IO_HEATER_ENABLED +#define HEATER_NUM 1 /* LEDs */ #define GPIO_nLED_AMBER /* PE12 */ (GPIO_OUTPUT|GPIO_OPENDRAIN|GPIO_SPEED_50MHz|GPIO_OUTPUT_SET|GPIO_PORTE|GPIO_PIN12) diff --git a/boards/cubepilot/cubeorange/src/hw_config.h b/boards/cubepilot/cubeorange/src/hw_config.h index 58b55e0977..70342a604a 100644 --- a/boards/cubepilot/cubeorange/src/hw_config.h +++ b/boards/cubepilot/cubeorange/src/hw_config.h @@ -53,8 +53,6 @@ * INTERFACE_USART 1 - (Optional) Scan and use the Serial interface for bootloading * USBDEVICESTRING "PX4 BL FMU v2.x" - USB id string * USBPRODUCTID 0x0011 - PID Should match defconfig - * BOOT_DELAY_ADDRESS 0x000001a0 - (Optional) From the linker script from Linker Script to get a custom - * delay provided by an APP FW * BOARD_TYPE 9 - Must match .prototype boad_id * _FLASH_KBYTES (*(uint16_t *)0x1fff7a22) - Run time flash size detection * BOARD_FLASH_SECTORS ((_FLASH_KBYTES == 0x400) ? 11 : 23) - Run time determine the physical last sector @@ -95,7 +93,6 @@ //#define USE_VBUS_PULL_DOWN #define INTERFACE_USART 1 #define INTERFACE_USART_CONFIG "/dev/ttyS0,115200" -#define BOOT_DELAY_ADDRESS 0x000001a0 #define BOARD_TYPE 140 #define _FLASH_KBYTES (*(uint32_t *)0x1FF1E880) #define BOARD_FLASH_SECTORS (15) diff --git a/boards/cubepilot/cubeorange/test.px4board b/boards/cubepilot/cubeorange/test.px4board index f59326fedc..d9dce07548 100644 --- a/boards/cubepilot/cubeorange/test.px4board +++ b/boards/cubepilot/cubeorange/test.px4board @@ -3,7 +3,6 @@ CONFIG_DRIVERS_IMU_ANALOG_DEVICES_ADIS16448=n CONFIG_DRIVERS_IRLOCK=n CONFIG_DRIVERS_PCA9685_PWM_OUT=n CONFIG_DRIVERS_UAVCAN=n -CONFIG_MODULES_TEMPERATURE_COMPENSATION=n CONFIG_BOARD_TESTING=y CONFIG_DRIVERS_TEST_PPM=y CONFIG_SYSTEMCMDS_MICROBENCH=y diff --git a/boards/cubepilot/cubeorangeplus/default.px4board b/boards/cubepilot/cubeorangeplus/default.px4board index 037449a578..ec8b41b117 100644 --- a/boards/cubepilot/cubeorangeplus/default.px4board +++ b/boards/cubepilot/cubeorangeplus/default.px4board @@ -69,7 +69,6 @@ CONFIG_MODULES_NAVIGATOR=y CONFIG_NUM_MISSION_ITMES_SUPPORTED=1000 CONFIG_MODULES_RC_UPDATE=y CONFIG_MODULES_SENSORS=y -CONFIG_MODULES_TEMPERATURE_COMPENSATION=y CONFIG_MODULES_UXRCE_DDS_CLIENT=y CONFIG_MODULES_VTOL_ATT_CONTROL=y CONFIG_SYSTEMCMDS_ACTUATOR_TEST=y diff --git a/boards/cubepilot/cubeorangeplus/init/rc.board_sensors b/boards/cubepilot/cubeorangeplus/init/rc.board_sensors index 8ef0bff121..5bc7ae7b9c 100644 --- a/boards/cubepilot/cubeorangeplus/init/rc.board_sensors +++ b/boards/cubepilot/cubeorangeplus/init/rc.board_sensors @@ -18,7 +18,7 @@ ms5611 -s -b 4 start if icm42688p -s -b 4 -R 10 -q start -c 15 then # We need to use the temperature of the first isolated IMU for heater control. - param set-default SENS_TEMP_ID 2490402 + param set-default HEATER1_IMU_ID 2490402 if ! icm20948 -s -b 4 -R 10 -M -q start then @@ -28,7 +28,7 @@ else icm45686 -s -b 4 -R 10 start -c 15 icm45686 -s -b 4 -R 6 start -c 13 - param set-default SENS_TEMP_ID 3407906 + param set-default HEATER1_IMU_ID 3407906 fi # SPI1, body-fixed diff --git a/boards/cubepilot/cubeorangeplus/nuttx-config/scripts/bootloader_script.ld b/boards/cubepilot/cubeorangeplus/nuttx-config/scripts/bootloader_script.ld index 4a255ada18..9b2b665348 100644 --- a/boards/cubepilot/cubeorangeplus/nuttx-config/scripts/bootloader_script.ld +++ b/boards/cubepilot/cubeorangeplus/nuttx-config/scripts/bootloader_script.ld @@ -132,20 +132,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/cubepilot/cubeorangeplus/nuttx-config/scripts/script.ld b/boards/cubepilot/cubeorangeplus/nuttx-config/scripts/script.ld index f4aa39bdb8..f75adafa96 100644 --- a/boards/cubepilot/cubeorangeplus/nuttx-config/scripts/script.ld +++ b/boards/cubepilot/cubeorangeplus/nuttx-config/scripts/script.ld @@ -131,20 +131,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/cubepilot/cubeorangeplus/src/board_config.h b/boards/cubepilot/cubeorangeplus/src/board_config.h index a77723b491..6e77fedb47 100644 --- a/boards/cubepilot/cubeorangeplus/src/board_config.h +++ b/boards/cubepilot/cubeorangeplus/src/board_config.h @@ -69,6 +69,7 @@ #define PX4IO_SERIAL_BITRATE 1500000 /* 1.5Mbps -> max rate for IO */ #define PX4IO_HEATER_ENABLED +#define HEATER_NUM 1 /* LEDs */ #define GPIO_nLED_AMBER /* PE12 */ (GPIO_OUTPUT|GPIO_OPENDRAIN|GPIO_SPEED_50MHz|GPIO_OUTPUT_SET|GPIO_PORTE|GPIO_PIN12) diff --git a/boards/cubepilot/cubeorangeplus/src/hw_config.h b/boards/cubepilot/cubeorangeplus/src/hw_config.h index dbe6581acb..d359968fb9 100644 --- a/boards/cubepilot/cubeorangeplus/src/hw_config.h +++ b/boards/cubepilot/cubeorangeplus/src/hw_config.h @@ -53,8 +53,6 @@ * INTERFACE_USART 1 - (Optional) Scan and use the Serial interface for bootloading * USBDEVICESTRING "PX4 BL FMU v2.x" - USB id string * USBPRODUCTID 0x0011 - PID Should match defconfig - * BOOT_DELAY_ADDRESS 0x000001a0 - (Optional) From the linker script from Linker Script to get a custom - * delay provided by an APP FW * BOARD_TYPE 9 - Must match .prototype boad_id * _FLASH_KBYTES (*(uint16_t *)0x1fff7a22) - Run time flash size detection * BOARD_FLASH_SECTORS ((_FLASH_KBYTES == 0x400) ? 11 : 23) - Run time determine the physical last sector @@ -95,7 +93,6 @@ //#define USE_VBUS_PULL_DOWN #define INTERFACE_USART 1 #define INTERFACE_USART_CONFIG "/dev/ttyS0,115200" -#define BOOT_DELAY_ADDRESS 0x000001a0 #define BOARD_TYPE 1063 #define _FLASH_KBYTES (*(uint32_t *)0x1FF1E880) #define BOARD_FLASH_SECTORS (15) diff --git a/boards/cubepilot/cubeorangeplus/test.px4board b/boards/cubepilot/cubeorangeplus/test.px4board index f46378f6f5..f358fc2374 100644 --- a/boards/cubepilot/cubeorangeplus/test.px4board +++ b/boards/cubepilot/cubeorangeplus/test.px4board @@ -3,7 +3,6 @@ CONFIG_DRIVERS_IMU_ANALOG_DEVICES_ADIS16448=n CONFIG_DRIVERS_IRLOCK=n CONFIG_DRIVERS_PCA9685_PWM_OUT=n CONFIG_DRIVERS_UAVCAN=n -CONFIG_MODULES_TEMPERATURE_COMPENSATION=n CONFIG_BOARD_TESTING=y CONFIG_DRIVERS_TEST_PPM=y CONFIG_SYSTEMCMDS_MICROBENCH=y diff --git a/boards/cubepilot/cubeyellow/default.px4board b/boards/cubepilot/cubeyellow/default.px4board index 8be8d9c4d1..8a3c534d71 100644 --- a/boards/cubepilot/cubeyellow/default.px4board +++ b/boards/cubepilot/cubeyellow/default.px4board @@ -68,7 +68,6 @@ CONFIG_MODULES_NAVIGATOR=y CONFIG_MODULES_RC_UPDATE=y CONFIG_MODULES_SENSORS=y CONFIG_MODULES_SIMULATION_SIMULATOR_SIH=y -CONFIG_MODULES_TEMPERATURE_COMPENSATION=y CONFIG_MODULES_UUV_ATT_CONTROL=y CONFIG_MODULES_UUV_POS_CONTROL=y CONFIG_MODULES_VTOL_ATT_CONTROL=y diff --git a/boards/cubepilot/cubeyellow/nuttx-config/scripts/script.ld b/boards/cubepilot/cubeyellow/nuttx-config/scripts/script.ld index 89f6ef204b..3a904a5fc3 100644 --- a/boards/cubepilot/cubeyellow/nuttx-config/scripts/script.ld +++ b/boards/cubepilot/cubeyellow/nuttx-config/scripts/script.ld @@ -89,20 +89,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/cubepilot/io-v2/src/board_config.h b/boards/cubepilot/io-v2/src/board_config.h index 913564eb4a..bd5dd00133 100644 --- a/boards/cubepilot/io-v2/src/board_config.h +++ b/boards/cubepilot/io-v2/src/board_config.h @@ -80,8 +80,10 @@ /* HEATER */ -#define GPIO_HEATER_OUTPUT /* PB14 */ (GPIO_OUTPUT|GPIO_CNF_OUTPP|GPIO_MODE_50MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTB|GPIO_PIN14) -#define HEATER_OUTPUT_EN(on_true) stm32_gpiowrite(GPIO_HEATER_OUTPUT, (on_true)) +#define GPIO_HEATER_OUTPUT +#define HEATER_NUM 1 +#define GPIO_HEATER1_OUTPUT /* PB14 */ (GPIO_OUTPUT|GPIO_CNF_OUTPP|GPIO_MODE_50MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTB|GPIO_PIN14) +#define HEATER1_OUTPUT_EN(on_true) stm32_gpiowrite(GPIO_HEATER1_OUTPUT, (on_true)) #define GPIO_USART1_RX_SPEKTRUM (GPIO_OUTPUT|GPIO_CNF_OUTPP|GPIO_MODE_50MHz|GPIO_OUTPUT_SET|GPIO_PORTA|GPIO_PIN10) diff --git a/boards/cubepilot/io-v2/src/init.c b/boards/cubepilot/io-v2/src/init.c index a623cf789d..e3268a411e 100644 --- a/boards/cubepilot/io-v2/src/init.c +++ b/boards/cubepilot/io-v2/src/init.c @@ -86,7 +86,7 @@ __EXPORT void stm32_boardinitialize(void) { /* configure GPIOs */ - stm32_configgpio(GPIO_HEATER_OUTPUT); + stm32_configgpio(GPIO_HEATER1_OUTPUT); /* LEDS - default to off */ stm32_configgpio(GPIO_LED_AMBER); @@ -141,5 +141,5 @@ __EXPORT void stm32_boardinitialize(void) stm32_configgpio(GPIO_PWM8); /* disable heater */ - HEATER_OUTPUT_EN(false); + HEATER1_OUTPUT_EN(false); } diff --git a/boards/diatone/mamba-f405-mk2/default.px4board b/boards/diatone/mamba-f405-mk2/default.px4board index 3c7bf40a1a..31a28bc583 100644 --- a/boards/diatone/mamba-f405-mk2/default.px4board +++ b/boards/diatone/mamba-f405-mk2/default.px4board @@ -25,7 +25,14 @@ CONFIG_MODULES_COMMANDER=y CONFIG_MODULES_CONTROL_ALLOCATOR=y CONFIG_MODULES_DATAMAN=y CONFIG_MODULES_EKF2=y +# CONFIG_EKF2_AUX_GLOBAL_POSITION is not set +# CONFIG_EKF2_AUXVEL is not set +# CONFIG_EKF2_BARO_COMPENSATION is not set +# CONFIG_EKF2_DRAG_FUSION is not set +# CONFIG_EKF2_EXTERNAL_VISION is not set # CONFIG_EKF2_GNSS_YAW is not set +# CONFIG_EKF2_OPTICAL_FLOW is not set +# CONFIG_EKF2_RANGE_FINDER is not set # CONFIG_EKF2_SIDESLIP is not set CONFIG_MODULES_FLIGHT_MODE_MANAGER=y CONFIG_MODULES_LAND_DETECTOR=y diff --git a/boards/emlid/navio2/default.px4board b/boards/emlid/navio2/default.px4board index 584ef65634..50200845c1 100644 --- a/boards/emlid/navio2/default.px4board +++ b/boards/emlid/navio2/default.px4board @@ -57,7 +57,6 @@ CONFIG_MODULES_SENSORS=y CONFIG_MODULES_SIMULATION_BATTERY_SIMULATOR=y CONFIG_MODULES_SIMULATION_SIMULATOR_MAVLINK=y CONFIG_MODULES_SIMULATION_SIMULATOR_SIH=y -CONFIG_MODULES_TEMPERATURE_COMPENSATION=y CONFIG_MODULES_UUV_ATT_CONTROL=y CONFIG_MODULES_UUV_POS_CONTROL=y CONFIG_MODULES_UXRCE_DDS_CLIENT=y diff --git a/boards/flywoo/gn-f405/init/rc.board_defaults b/boards/flywoo/gn-f405/init/rc.board_defaults index 33e3bd5491..d29b2d8aca 100644 --- a/boards/flywoo/gn-f405/init/rc.board_defaults +++ b/boards/flywoo/gn-f405/init/rc.board_defaults @@ -3,9 +3,6 @@ # Flywoo GNF405 board specific defaults #------------------------------------------------------------------------------ -# default airframe quadrotor -param set-default SYS_AUTOSTART 4001 - # system_power unavailable param set-default CBRK_SUPPLY_CHK 894281 diff --git a/boards/freefly/can-rtk-gps/nuttx-config/scripts/script.ld b/boards/freefly/can-rtk-gps/nuttx-config/scripts/script.ld index 6e6424daa0..8c45dc0606 100644 --- a/boards/freefly/can-rtk-gps/nuttx-config/scripts/script.ld +++ b/boards/freefly/can-rtk-gps/nuttx-config/scripts/script.ld @@ -84,8 +84,6 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { diff --git a/boards/gearup/airbrainh743/default.px4board b/boards/gearup/airbrainh743/default.px4board index 1af794b76c..03a861a752 100644 --- a/boards/gearup/airbrainh743/default.px4board +++ b/boards/gearup/airbrainh743/default.px4board @@ -1,6 +1,7 @@ CONFIG_BOARD_TOOLCHAIN="arm-none-eabi" CONFIG_BOARD_ARCHITECTURE="cortex-m7" CONFIG_BOARD_ROOT_PATH="/fs/flash" +CONFIG_BOARD_NO_SDCARD=y CONFIG_BOARD_SERIAL_GPS1="/dev/ttyS6" CONFIG_BOARD_SERIAL_TEL1="/dev/ttyS3" CONFIG_BOARD_SERIAL_TEL2="/dev/ttyS4" @@ -71,6 +72,7 @@ CONFIG_SYSTEMCMDS_HARDFAULT_LOG=y CONFIG_SYSTEMCMDS_I2CDETECT=y CONFIG_SYSTEMCMDS_LED_CONTROL=y CONFIG_SYSTEMCMDS_MFT=y +CONFIG_SYSTEMCMDS_MKLITTLEFS=y CONFIG_SYSTEMCMDS_MTD=y CONFIG_SYSTEMCMDS_NSHTERM=y CONFIG_SYSTEMCMDS_PARAM=y diff --git a/boards/gearup/airbrainh743/init/rc.board_defaults b/boards/gearup/airbrainh743/init/rc.board_defaults index 4ef2ce41ee..1ea824a60c 100644 --- a/boards/gearup/airbrainh743/init/rc.board_defaults +++ b/boards/gearup/airbrainh743/init/rc.board_defaults @@ -12,6 +12,10 @@ param set-default CBRK_SUPPLY_CHK 894281 param set-default IMU_GYRO_RATEMAX 2000 -# W25N NAND flash with littlefs (128 MB): larger buffer, auto-rotate -set LOGGER_BUF 32 -param set-default SDLOG_DIRS_MAX 3 +# W25N NAND flash with littlefs (128 MB): small log file size so we can keep +# a few recent logs, and fill up to 95%. +param set-default SDLOG_ROTATE 95 +param set-default SDLOG_MAX_SIZE 40 + +# Store missions in RAM +param set-default SYS_DM_BACKEND 1 diff --git a/boards/gearup/airbrainh743/nuttx-config/scripts/bootloader_script.ld b/boards/gearup/airbrainh743/nuttx-config/scripts/bootloader_script.ld index fb877cc443..fcf84a4c60 100644 --- a/boards/gearup/airbrainh743/nuttx-config/scripts/bootloader_script.ld +++ b/boards/gearup/airbrainh743/nuttx-config/scripts/bootloader_script.ld @@ -130,20 +130,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/gearup/airbrainh743/nuttx-config/scripts/script.ld b/boards/gearup/airbrainh743/nuttx-config/scripts/script.ld index a01eb2e2a8..d0de838f44 100644 --- a/boards/gearup/airbrainh743/nuttx-config/scripts/script.ld +++ b/boards/gearup/airbrainh743/nuttx-config/scripts/script.ld @@ -131,20 +131,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/gearup/airbrainh743/src/hw_config.h b/boards/gearup/airbrainh743/src/hw_config.h index 38e16b4059..2885da610d 100644 --- a/boards/gearup/airbrainh743/src/hw_config.h +++ b/boards/gearup/airbrainh743/src/hw_config.h @@ -41,7 +41,6 @@ #define INTERFACE_USART 1 #define INTERFACE_USART_CONFIG "/dev/ttyS0,57600" -#define BOOT_DELAY_ADDRESS 0x000001a0 #define BOARD_TYPE 1209 #define _FLASH_KBYTES (*(uint32_t *)0x1FF1E880) #define BOARD_FLASH_SECTORS (14) diff --git a/boards/hkust/nxt-dual/default.px4board b/boards/hkust/nxt-dual/default.px4board index 368ed08d6e..f852ad8a5c 100644 --- a/boards/hkust/nxt-dual/default.px4board +++ b/boards/hkust/nxt-dual/default.px4board @@ -60,7 +60,6 @@ CONFIG_MODULES_MC_RATE_CONTROL=y CONFIG_MODULES_NAVIGATOR=y CONFIG_MODULES_RC_UPDATE=y CONFIG_MODULES_SENSORS=y -CONFIG_MODULES_TEMPERATURE_COMPENSATION=y CONFIG_MODULES_UXRCE_DDS_CLIENT=y CONFIG_MODULES_VTOL_ATT_CONTROL=y CONFIG_SYSTEMCMDS_ACTUATOR_TEST=y diff --git a/boards/hkust/nxt-dual/init/rc.board_defaults b/boards/hkust/nxt-dual/init/rc.board_defaults index a4afdd873e..76f4aa9152 100644 --- a/boards/hkust/nxt-dual/init/rc.board_defaults +++ b/boards/hkust/nxt-dual/init/rc.board_defaults @@ -13,7 +13,6 @@ param set-default PWM_MAIN_TIM0 -4 param set-default RC_INPUT_PROTO -1 param set-default IMU_GYRO_RATEMAX 2000 -param set-default SYS_AUTOSTART 4001 param set-default MC_PITCHRATE_K 0.4 param set-default MC_ROLLRATE_K 0.35 param set-default MC_YAWRATE_K 1.2 diff --git a/boards/hkust/nxt-dual/nuttx-config/scripts/bootloader_script.ld b/boards/hkust/nxt-dual/nuttx-config/scripts/bootloader_script.ld index fb877cc443..fcf84a4c60 100644 --- a/boards/hkust/nxt-dual/nuttx-config/scripts/bootloader_script.ld +++ b/boards/hkust/nxt-dual/nuttx-config/scripts/bootloader_script.ld @@ -130,20 +130,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/hkust/nxt-dual/nuttx-config/scripts/script.ld b/boards/hkust/nxt-dual/nuttx-config/scripts/script.ld index 1dc1a0ef97..3686e2d66e 100644 --- a/boards/hkust/nxt-dual/nuttx-config/scripts/script.ld +++ b/boards/hkust/nxt-dual/nuttx-config/scripts/script.ld @@ -131,20 +131,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/hkust/nxt-dual/src/hw_config.h b/boards/hkust/nxt-dual/src/hw_config.h index 352f29436a..5fc9b7e11c 100644 --- a/boards/hkust/nxt-dual/src/hw_config.h +++ b/boards/hkust/nxt-dual/src/hw_config.h @@ -53,8 +53,6 @@ * INTERFACE_USART 1 - (Optional) Scan and use the Serial interface for bootloading * USBDEVICESTRING "PX4 BL FMU v2.x" - USB id string * USBPRODUCTID 0x0011 - PID Should match defconfig - * BOOT_DELAY_ADDRESS 0x000001a0 - (Optional) From the linker script from Linker Script to get a custom - * delay provided by an APP FW * BOARD_TYPE 9 - Must match .prototype boad_id * _FLASH_KBYTES (*(uint16_t *)0x1fff7a22) - Run time flash size detection * BOARD_FLASH_SECTORS ((_FLASH_KBYTES == 0x400) ? 11 : 23) - Run time determine the physical last sector @@ -95,7 +93,6 @@ //#define USE_VBUS_PULL_DOWN #define INTERFACE_USART 6 #define INTERFACE_USART_CONFIG "/dev/ttyS5,57600" -#define BOOT_DELAY_ADDRESS 0x000001a0 #define BOARD_TYPE 1013 #define BOARD_FLASH_SECTORS (14) #define BOARD_FLASH_SIZE (16 * 128 * 1024) diff --git a/boards/hkust/nxt-dual/src/timer_config.cpp b/boards/hkust/nxt-dual/src/timer_config.cpp index 27ad0f2476..97bde311df 100644 --- a/boards/hkust/nxt-dual/src/timer_config.cpp +++ b/boards/hkust/nxt-dual/src/timer_config.cpp @@ -46,10 +46,10 @@ constexpr timer_io_channels_t timer_io_channels[MAX_TIMER_IO_CHANNELS] = { initIOTimerChannel(io_timers, {Timer::Timer1, Timer::Channel2}, {GPIO::PortE, GPIO::Pin11}), initIOTimerChannel(io_timers, {Timer::Timer1, Timer::Channel3}, {GPIO::PortE, GPIO::Pin13}), initIOTimerChannel(io_timers, {Timer::Timer1, Timer::Channel4}, {GPIO::PortE, GPIO::Pin14}), + initIOTimerChannel(io_timers, {Timer::Timer3, Timer::Channel4}, {GPIO::PortB, GPIO::Pin1}), + initIOTimerChannel(io_timers, {Timer::Timer3, Timer::Channel3}, {GPIO::PortB, GPIO::Pin0}), initIOTimerChannel(io_timers, {Timer::Timer2, Timer::Channel3}, {GPIO::PortB, GPIO::Pin10}), initIOTimerChannel(io_timers, {Timer::Timer2, Timer::Channel4}, {GPIO::PortB, GPIO::Pin11}), - initIOTimerChannel(io_timers, {Timer::Timer3, Timer::Channel3}, {GPIO::PortB, GPIO::Pin0}), - initIOTimerChannel(io_timers, {Timer::Timer3, Timer::Channel4}, {GPIO::PortB, GPIO::Pin1}), }; constexpr io_timers_channel_mapping_t io_timers_channel_mapping = diff --git a/boards/hkust/nxt-v1/default.px4board b/boards/hkust/nxt-v1/default.px4board index 19e96ca44d..e301d641c5 100644 --- a/boards/hkust/nxt-v1/default.px4board +++ b/boards/hkust/nxt-v1/default.px4board @@ -62,7 +62,6 @@ CONFIG_MODULES_MC_RATE_CONTROL=y CONFIG_MODULES_NAVIGATOR=y CONFIG_MODULES_RC_UPDATE=y CONFIG_MODULES_SENSORS=y -CONFIG_MODULES_TEMPERATURE_COMPENSATION=y CONFIG_MODULES_UXRCE_DDS_CLIENT=y CONFIG_MODULES_VTOL_ATT_CONTROL=y CONFIG_SYSTEMCMDS_ACTUATOR_TEST=y diff --git a/boards/hkust/nxt-v1/nuttx-config/scripts/bootloader_script.ld b/boards/hkust/nxt-v1/nuttx-config/scripts/bootloader_script.ld index fb877cc443..fcf84a4c60 100644 --- a/boards/hkust/nxt-v1/nuttx-config/scripts/bootloader_script.ld +++ b/boards/hkust/nxt-v1/nuttx-config/scripts/bootloader_script.ld @@ -130,20 +130,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/hkust/nxt-v1/nuttx-config/scripts/script.ld b/boards/hkust/nxt-v1/nuttx-config/scripts/script.ld index 85f4990724..012bc18d5e 100644 --- a/boards/hkust/nxt-v1/nuttx-config/scripts/script.ld +++ b/boards/hkust/nxt-v1/nuttx-config/scripts/script.ld @@ -131,20 +131,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/hkust/nxt-v1/src/hw_config.h b/boards/hkust/nxt-v1/src/hw_config.h index 1e91b65145..0e2f6e40d1 100644 --- a/boards/hkust/nxt-v1/src/hw_config.h +++ b/boards/hkust/nxt-v1/src/hw_config.h @@ -53,8 +53,6 @@ * INTERFACE_USART 1 - (Optional) Scan and use the Serial interface for bootloading * USBDEVICESTRING "PX4 BL FMU v2.x" - USB id string * USBPRODUCTID 0x0011 - PID Should match defconfig - * BOOT_DELAY_ADDRESS 0x000001a0 - (Optional) From the linker script from Linker Script to get a custom - * delay provided by an APP FW * BOARD_TYPE 9 - Must match .prototype boad_id * _FLASH_KBYTES (*(uint16_t *)0x1fff7a22) - Run time flash size detection * BOARD_FLASH_SECTORS ((_FLASH_KBYTES == 0x400) ? 11 : 23) - Run time determine the physical last sector @@ -95,7 +93,6 @@ //#define USE_VBUS_PULL_DOWN #define INTERFACE_USART 1 #define INTERFACE_USART_CONFIG "/dev/ttyS0,57600" -#define BOOT_DELAY_ADDRESS 0x000001a0 #define BOARD_TYPE 1013 #define _FLASH_KBYTES (*(uint32_t *)0x1FF1E880) #define BOARD_FLASH_SECTORS (15) diff --git a/boards/holybro/can-gps-v1/nuttx-config/scripts/script.ld b/boards/holybro/can-gps-v1/nuttx-config/scripts/script.ld index 050bce7d77..a9a0715db1 100644 --- a/boards/holybro/can-gps-v1/nuttx-config/scripts/script.ld +++ b/boards/holybro/can-gps-v1/nuttx-config/scripts/script.ld @@ -64,8 +64,6 @@ EXTERN(_vectors) /* force the vectors to be included in the output */ * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { diff --git a/boards/holybro/durandal-v1/default.px4board b/boards/holybro/durandal-v1/default.px4board index 94fc1f8c00..ba1fa56ddf 100644 --- a/boards/holybro/durandal-v1/default.px4board +++ b/boards/holybro/durandal-v1/default.px4board @@ -64,7 +64,6 @@ CONFIG_MODULES_NAVIGATOR=y CONFIG_MODULES_RC_UPDATE=y CONFIG_MODULES_SENSORS=y CONFIG_MODULES_SIMULATION_SIMULATOR_SIH=y -CONFIG_MODULES_TEMPERATURE_COMPENSATION=y CONFIG_MODULES_UXRCE_DDS_CLIENT=y CONFIG_MODULES_VTOL_ATT_CONTROL=y CONFIG_SYSTEMCMDS_ACTUATOR_TEST=y diff --git a/boards/holybro/durandal-v1/nuttx-config/scripts/bootloader_script.ld b/boards/holybro/durandal-v1/nuttx-config/scripts/bootloader_script.ld index fb877cc443..fcf84a4c60 100644 --- a/boards/holybro/durandal-v1/nuttx-config/scripts/bootloader_script.ld +++ b/boards/holybro/durandal-v1/nuttx-config/scripts/bootloader_script.ld @@ -130,20 +130,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/holybro/durandal-v1/nuttx-config/scripts/script.ld b/boards/holybro/durandal-v1/nuttx-config/scripts/script.ld index 38b1c3e1b5..f3e9d8bfc4 100644 --- a/boards/holybro/durandal-v1/nuttx-config/scripts/script.ld +++ b/boards/holybro/durandal-v1/nuttx-config/scripts/script.ld @@ -131,20 +131,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/holybro/durandal-v1/src/board_config.h b/boards/holybro/durandal-v1/src/board_config.h index 4f6369b8ce..ab7859f86c 100644 --- a/boards/holybro/durandal-v1/src/board_config.h +++ b/boards/holybro/durandal-v1/src/board_config.h @@ -170,8 +170,10 @@ /* HEATER * PWM in future */ -#define GPIO_HEATER_OUTPUT /* PA7 T14CH1 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTA|GPIO_PIN7) -#define HEATER_OUTPUT_EN(on_true) px4_arch_gpiowrite(GPIO_HEATER_OUTPUT, (on_true)) +#define GPIO_HEATER_OUTPUT +#define HEATER_NUM 1 +#define GPIO_HEATER1_OUTPUT /* PA7 T14CH1 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTA|GPIO_PIN7) +#define HEATER1_OUTPUT_EN(on_true) px4_arch_gpiowrite(GPIO_HEATER1_OUTPUT, (on_true)) /* PWM */ @@ -299,7 +301,7 @@ GPIO_CAN2_RX, \ GPIO_CAN1_SILENT_S0, \ GPIO_CAN2_SILENT_S1, \ - GPIO_HEATER_OUTPUT, \ + GPIO_HEATER1_OUTPUT, \ GPIO_nPOWER_IN_A, \ GPIO_nPOWER_IN_B, \ GPIO_nPOWER_IN_C, \ diff --git a/boards/holybro/durandal-v1/src/hw_config.h b/boards/holybro/durandal-v1/src/hw_config.h index ae706c6664..2b7a98eba2 100644 --- a/boards/holybro/durandal-v1/src/hw_config.h +++ b/boards/holybro/durandal-v1/src/hw_config.h @@ -28,8 +28,6 @@ * INTERFACE_USART 1 - (Optional) Scan and use the Serial interface for bootloading * USBDEVICESTRING "PX4 BL FMU v2.x" - USB id string * USBPRODUCTID 0x0011 - PID Should match defconfig - * BOOT_DELAY_ADDRESS 0x000001a0 - (Optional) From the linker script from Linker Script to get a custom - * delay provided by an APP FW * BOARD_TYPE 9 - Must match .prototype boad_id * _FLASH_KBYTES (*(uint16_t *)0x1fff7a22) - Run time flash size detection * BOARD_FLASH_SECTORS ((_FLASH_KBYTES == 0x400) ? 11 : 23) - Run time determine the physical last sector @@ -70,7 +68,6 @@ //#define USE_VBUS_PULL_DOWN #define INTERFACE_USART 1 #define INTERFACE_USART_CONFIG "/dev/ttyS0,115200" -#define BOOT_DELAY_ADDRESS 0x000001a0 #define BOARD_TYPE 139 #define _FLASH_KBYTES (*(uint32_t *)0x1FF1E880) #define BOARD_FLASH_SECTORS (15) diff --git a/boards/holybro/h-flow/nuttx-config/scripts/script.ld b/boards/holybro/h-flow/nuttx-config/scripts/script.ld index 3db1f5dc64..d11c3a1fd7 100644 --- a/boards/holybro/h-flow/nuttx-config/scripts/script.ld +++ b/boards/holybro/h-flow/nuttx-config/scripts/script.ld @@ -64,8 +64,6 @@ EXTERN(_vectors) /* force the vectors to be included in the output */ * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { diff --git a/boards/holybro/kakutef7/default.px4board b/boards/holybro/kakutef7/default.px4board index 280641c940..75a7d1e35e 100644 --- a/boards/holybro/kakutef7/default.px4board +++ b/boards/holybro/kakutef7/default.px4board @@ -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 diff --git a/boards/holybro/kakutef7/init/rc.board_defaults b/boards/holybro/kakutef7/init/rc.board_defaults index 2ad7443124..5cd2578bbe 100644 --- a/boards/holybro/kakutef7/init/rc.board_defaults +++ b/boards/holybro/kakutef7/init/rc.board_defaults @@ -9,9 +9,6 @@ param set-default BAT1_A_PER_V 17 # system_power unavailable param set-default CBRK_SUPPLY_CHK 894281 -# Select the Generic 250 Racer by default -param set-default SYS_AUTOSTART 4050 - param set-default SYS_HAS_MAG 0 # enable gravity fusion diff --git a/boards/holybro/kakutef7/nuttx-config/scripts/script.ld b/boards/holybro/kakutef7/nuttx-config/scripts/script.ld index 903eb2d35c..860db7dacc 100644 --- a/boards/holybro/kakutef7/nuttx-config/scripts/script.ld +++ b/boards/holybro/kakutef7/nuttx-config/scripts/script.ld @@ -88,20 +88,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/holybro/kakuteh7-wing/nuttx-config/include/board_dma_map.h b/boards/holybro/kakuteh7-wing/nuttx-config/include/board_dma_map.h index 3bf265085c..0c54385483 100644 --- a/boards/holybro/kakuteh7-wing/nuttx-config/include/board_dma_map.h +++ b/boards/holybro/kakuteh7-wing/nuttx-config/include/board_dma_map.h @@ -58,11 +58,13 @@ //#define DMAMAP_USART6_RX DMAMAP_DMA12_USART6RX_0 /* 5 DMA1:71 PX4IO */ //#define DMAMAP_USART6_TX DMAMAP_DMA12_USART6TX_0 /* 6 DMA1:72 PX4IO */ -// Assigned in timer_config.cpp - -// TODO -// Timer 4 /* 7 DMA1:32 TIM4UP */ -// Timer 5 /* 8 DMA1:50 TIM5UP */ +// Dynamically assigned in timer_config.cpp for DShot (allocated/freed per cycle): +// Timer 1 TIM1UP (burst) + TIM1CH1-4 (capture) +// Timer 2 TIM2UP (burst) + TIM2CH1-4 (capture) +// Timer 3 TIM3UP (burst) + TIM3CH1-4 (capture) +// Timer 4 TIM4UP (burst) + TIM4CH1-3 (capture, CH4 has no DMA) +// Timer 5 TIM5UP (burst) + TIM5CH1-4 (capture) +// Timer 15 - no TIM15UP DMA, cannot do DShot // DMAMUX2 Using at most 8 Channels on DMA2 -------- Assigned // V diff --git a/boards/holybro/kakuteh7-wing/nuttx-config/scripts/bootloader_script.ld b/boards/holybro/kakuteh7-wing/nuttx-config/scripts/bootloader_script.ld index fc0a5589be..d3609b6549 100644 --- a/boards/holybro/kakuteh7-wing/nuttx-config/scripts/bootloader_script.ld +++ b/boards/holybro/kakuteh7-wing/nuttx-config/scripts/bootloader_script.ld @@ -132,20 +132,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/holybro/kakuteh7-wing/nuttx-config/scripts/script.ld b/boards/holybro/kakuteh7-wing/nuttx-config/scripts/script.ld index 31780fad15..c01e2061c8 100644 --- a/boards/holybro/kakuteh7-wing/nuttx-config/scripts/script.ld +++ b/boards/holybro/kakuteh7-wing/nuttx-config/scripts/script.ld @@ -131,20 +131,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/holybro/kakuteh7-wing/src/hw_config.h b/boards/holybro/kakuteh7-wing/src/hw_config.h index ebbcbccef4..57798c1a2b 100644 --- a/boards/holybro/kakuteh7-wing/src/hw_config.h +++ b/boards/holybro/kakuteh7-wing/src/hw_config.h @@ -28,8 +28,6 @@ * INTERFACE_USART 1 - (Optional) Scan and use the Serial interface for bootloading * USBDEVICESTRING "PX4 BL FMU v2.x" - USB id string * USBPRODUCTID 0x0011 - PID Should match defconfig - * BOOT_DELAY_ADDRESS 0x000001a0 - (Optional) From the linker script from Linker Script to get a custom - * delay provided by an APP FW * BOARD_TYPE 9 - Must match .prototype boad_id * _FLASH_KBYTES (*(uint16_t *)0x1fff7a22) - Run time flash size detection * BOARD_FLASH_SECTORS ((_FLASH_KBYTES == 0x400) ? 11 : 23) - Run time determine the physical last sector @@ -70,9 +68,8 @@ //#define USE_VBUS_PULL_DOWN #define INTERFACE_USART 1 #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) diff --git a/boards/holybro/kakuteh7-wing/src/timer_config.cpp b/boards/holybro/kakuteh7-wing/src/timer_config.cpp index eaa8d887e3..87eae8e023 100644 --- a/boards/holybro/kakuteh7-wing/src/timer_config.cpp +++ b/boards/holybro/kakuteh7-wing/src/timer_config.cpp @@ -38,18 +38,20 @@ constexpr io_timers_t io_timers[MAX_IO_TIMERS] = { initIOTimer(Timer::Timer1, DMA{DMA::Index1}), initIOTimer(Timer::Timer4, DMA{DMA::Index1}), initIOTimer(Timer::Timer5, DMA{DMA::Index1}), - initIOTimer(Timer::Timer15), - initIOTimer(Timer::Timer3), - initIOTimer(Timer::Timer2), + initIOTimer(Timer::Timer15), // Note: Timer15 has no TIM_UP DMA on STM32H7, cannot do DShot + initIOTimer(Timer::Timer3, DMA{DMA::Index1}), + initIOTimer(Timer::Timer2, DMA{DMA::Index1}), }; +// Note: Timer4 Channel4 has no DMAMUX mapping on STM32H7, so BDShot telemetry capture +// is not available on that channel. DShot output still works (uses TIM_UP DMA for burst). constexpr timer_io_channels_t timer_io_channels[MAX_TIMER_IO_CHANNELS] = { initIOTimerChannel(io_timers, {Timer::Timer1, Timer::Channel1}, {GPIO::PortA, GPIO::Pin8}), initIOTimerChannel(io_timers, {Timer::Timer1, Timer::Channel2}, {GPIO::PortE, GPIO::Pin11}), initIOTimerChannel(io_timers, {Timer::Timer1, Timer::Channel3}, {GPIO::PortE, GPIO::Pin13}), initIOTimerChannel(io_timers, {Timer::Timer1, Timer::Channel4}, {GPIO::PortE, GPIO::Pin14}), initIOTimerChannel(io_timers, {Timer::Timer4, Timer::Channel3}, {GPIO::PortD, GPIO::Pin14}), - initIOTimerChannel(io_timers, {Timer::Timer4, Timer::Channel4}, {GPIO::PortD, GPIO::Pin15}), + initIOTimerChannel(io_timers, {Timer::Timer4, Timer::Channel4}, {GPIO::PortD, GPIO::Pin15}), // no BDShot telemetry readback initIOTimerChannel(io_timers, {Timer::Timer5, Timer::Channel1}, {GPIO::PortA, GPIO::Pin0}), initIOTimerChannel(io_timers, {Timer::Timer5, Timer::Channel2}, {GPIO::PortA, GPIO::Pin1}), initIOTimerChannel(io_timers, {Timer::Timer15, Timer::Channel1}, {GPIO::PortE, GPIO::Pin5}), diff --git a/boards/holybro/kakuteh7/default.px4board b/boards/holybro/kakuteh7/default.px4board index 90327456f6..d1ddaa481b 100644 --- a/boards/holybro/kakuteh7/default.px4board +++ b/boards/holybro/kakuteh7/default.px4board @@ -67,7 +67,6 @@ CONFIG_NUM_MISSION_ITMES_SUPPORTED=1000 CONFIG_MODULES_RC_UPDATE=y CONFIG_MODULES_SENSORS=y CONFIG_MODULES_SIMULATION_SIMULATOR_SIH=y -CONFIG_MODULES_TEMPERATURE_COMPENSATION=y CONFIG_MODULES_UXRCE_DDS_CLIENT=y CONFIG_MODULES_VTOL_ATT_CONTROL=y CONFIG_SYSTEMCMDS_ACTUATOR_TEST=y diff --git a/boards/holybro/kakuteh7/init/rc.board_defaults b/boards/holybro/kakuteh7/init/rc.board_defaults index f9f3ca7d50..edb0ce811c 100644 --- a/boards/holybro/kakuteh7/init/rc.board_defaults +++ b/boards/holybro/kakuteh7/init/rc.board_defaults @@ -19,9 +19,6 @@ param set-default BAT1_A_PER_V 59.5 # system_power unavailable param set-default CBRK_SUPPLY_CHK 894281 -# Select the Generic 250 Racer by default -param set-default SYS_AUTOSTART 4050 - # use EKF2 without mag param set-default SYS_HAS_MAG 0 # and enable gravity fusion diff --git a/boards/holybro/kakuteh7/nuttx-config/scripts/bootloader_script.ld b/boards/holybro/kakuteh7/nuttx-config/scripts/bootloader_script.ld index fc0a5589be..d3609b6549 100644 --- a/boards/holybro/kakuteh7/nuttx-config/scripts/bootloader_script.ld +++ b/boards/holybro/kakuteh7/nuttx-config/scripts/bootloader_script.ld @@ -132,20 +132,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/holybro/kakuteh7/nuttx-config/scripts/script.ld b/boards/holybro/kakuteh7/nuttx-config/scripts/script.ld index ae07f4bfca..8218113582 100644 --- a/boards/holybro/kakuteh7/nuttx-config/scripts/script.ld +++ b/boards/holybro/kakuteh7/nuttx-config/scripts/script.ld @@ -131,20 +131,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/holybro/kakuteh7/src/hw_config.h b/boards/holybro/kakuteh7/src/hw_config.h index 01f1a805fa..09f1693cc8 100644 --- a/boards/holybro/kakuteh7/src/hw_config.h +++ b/boards/holybro/kakuteh7/src/hw_config.h @@ -28,8 +28,6 @@ * INTERFACE_USART 1 - (Optional) Scan and use the Serial interface for bootloading * USBDEVICESTRING "PX4 BL FMU v2.x" - USB id string * USBPRODUCTID 0x0011 - PID Should match defconfig - * BOOT_DELAY_ADDRESS 0x000001a0 - (Optional) From the linker script from Linker Script to get a custom - * delay provided by an APP FW * BOARD_TYPE 9 - Must match .prototype boad_id * _FLASH_KBYTES (*(uint16_t *)0x1fff7a22) - Run time flash size detection * BOARD_FLASH_SECTORS ((_FLASH_KBYTES == 0x400) ? 11 : 23) - Run time determine the physical last sector @@ -68,7 +66,6 @@ #define BOARD_VBUS MK_GPIO_INPUT(GPIO_OTGFS_VBUS) //#define USE_VBUS_PULL_DOWN -#define BOOT_DELAY_ADDRESS 0x000001a0 #define BOARD_TYPE 1048 #define BOARD_FLASH_SECTORS (14) #define BOARD_FLASH_SIZE (16 * 128 * 1024) diff --git a/boards/holybro/kakuteh7dualimu/default.px4board b/boards/holybro/kakuteh7dualimu/default.px4board index 8b32733d60..6dc3d41e12 100644 --- a/boards/holybro/kakuteh7dualimu/default.px4board +++ b/boards/holybro/kakuteh7dualimu/default.px4board @@ -69,7 +69,6 @@ CONFIG_MODULES_NAVIGATOR=y CONFIG_NUM_MISSION_ITMES_SUPPORTED=1000 CONFIG_MODULES_RC_UPDATE=y CONFIG_MODULES_SENSORS=y -# CONFIG_MODULES_TEMPERATURE_COMPENSATION is not set CONFIG_MODULES_VTOL_ATT_CONTROL=y CONFIG_SYSTEMCMDS_BSONDUMP=y CONFIG_SYSTEMCMDS_DMESG=y diff --git a/boards/holybro/kakuteh7dualimu/init/rc.board_defaults b/boards/holybro/kakuteh7dualimu/init/rc.board_defaults index b5ecee9894..5fe3e8d357 100644 --- a/boards/holybro/kakuteh7dualimu/init/rc.board_defaults +++ b/boards/holybro/kakuteh7dualimu/init/rc.board_defaults @@ -19,9 +19,6 @@ param set-default BAT1_A_PER_V 59.5 # system_power unavailable param set-default CBRK_SUPPLY_CHK 894281 -# Select the Generic 250 Racer by default -param set-default SYS_AUTOSTART 4050 - # use EKF2 without mag param set-default SYS_HAS_MAG 0 # and enable gravity fusion diff --git a/boards/holybro/kakuteh7dualimu/nuttx-config/scripts/bootloader_script.ld b/boards/holybro/kakuteh7dualimu/nuttx-config/scripts/bootloader_script.ld index fc0a5589be..d3609b6549 100644 --- a/boards/holybro/kakuteh7dualimu/nuttx-config/scripts/bootloader_script.ld +++ b/boards/holybro/kakuteh7dualimu/nuttx-config/scripts/bootloader_script.ld @@ -132,20 +132,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/holybro/kakuteh7dualimu/nuttx-config/scripts/script.ld b/boards/holybro/kakuteh7dualimu/nuttx-config/scripts/script.ld index 31780fad15..c01e2061c8 100644 --- a/boards/holybro/kakuteh7dualimu/nuttx-config/scripts/script.ld +++ b/boards/holybro/kakuteh7dualimu/nuttx-config/scripts/script.ld @@ -131,20 +131,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/holybro/kakuteh7dualimu/src/hw_config.h b/boards/holybro/kakuteh7dualimu/src/hw_config.h index 9620345ff3..37eae2b6f1 100644 --- a/boards/holybro/kakuteh7dualimu/src/hw_config.h +++ b/boards/holybro/kakuteh7dualimu/src/hw_config.h @@ -28,8 +28,6 @@ * INTERFACE_USART 1 - (Optional) Scan and use the Serial interface for bootloading * USBDEVICESTRING "PX4 BL FMU v2.x" - USB id string * USBPRODUCTID 0x0011 - PID Should match defconfig - * BOOT_DELAY_ADDRESS 0x000001a0 - (Optional) From the linker script from Linker Script to get a custom - * delay provided by an APP FW * BOARD_TYPE 9 - Must match .prototype boad_id * _FLASH_KBYTES (*(uint16_t *)0x1fff7a22) - Run time flash size detection * BOARD_FLASH_SECTORS ((_FLASH_KBYTES == 0x400) ? 11 : 23) - Run time determine the physical last sector @@ -68,7 +66,6 @@ #define BOARD_VBUS MK_GPIO_INPUT(GPIO_OTGFS_VBUS) //#define USE_VBUS_PULL_DOWN -#define BOOT_DELAY_ADDRESS 0x000001a0 #define BOARD_TYPE 5409 #define BOARD_FLASH_SECTORS (14) #define BOARD_FLASH_SIZE (16 * 128 * 1024) diff --git a/boards/holybro/kakuteh7mini/default.px4board b/boards/holybro/kakuteh7mini/default.px4board index 5e2ea7fb71..aefe298b8a 100644 --- a/boards/holybro/kakuteh7mini/default.px4board +++ b/boards/holybro/kakuteh7mini/default.px4board @@ -1,5 +1,7 @@ CONFIG_BOARD_TOOLCHAIN="arm-none-eabi" CONFIG_BOARD_ARCHITECTURE="cortex-m7" +CONFIG_BOARD_ROOT_PATH="/fs/flash" +CONFIG_BOARD_NO_SDCARD=y CONFIG_BOARD_SERIAL_GPS1="/dev/ttyS3" CONFIG_BOARD_SERIAL_TEL1="/dev/ttyS0" CONFIG_BOARD_SERIAL_TEL2="/dev/ttyS1" @@ -67,7 +69,6 @@ CONFIG_NUM_MISSION_ITMES_SUPPORTED=1000 CONFIG_MODULES_RC_UPDATE=y CONFIG_MODULES_SENSORS=y CONFIG_MODULES_SIMULATION_PWM_OUT_SIM=y -CONFIG_MODULES_TEMPERATURE_COMPENSATION=y CONFIG_MODULES_VTOL_ATT_CONTROL=y CONFIG_SYSTEMCMDS_ACTUATOR_TEST=y CONFIG_SYSTEMCMDS_DMESG=y @@ -77,6 +78,7 @@ CONFIG_SYSTEMCMDS_HARDFAULT_LOG=y CONFIG_SYSTEMCMDS_I2CDETECT=y CONFIG_SYSTEMCMDS_LED_CONTROL=y CONFIG_SYSTEMCMDS_MFT=y +CONFIG_SYSTEMCMDS_MKLITTLEFS=y CONFIG_SYSTEMCMDS_NSHTERM=y CONFIG_SYSTEMCMDS_PARAM=y CONFIG_SYSTEMCMDS_PERF=y diff --git a/boards/holybro/kakuteh7mini/extras/holybro_kakuteh7mini_bootloader.bin b/boards/holybro/kakuteh7mini/extras/holybro_kakuteh7mini_bootloader.bin index 4efdeb5b21..b2112eb720 100755 Binary files a/boards/holybro/kakuteh7mini/extras/holybro_kakuteh7mini_bootloader.bin and b/boards/holybro/kakuteh7mini/extras/holybro_kakuteh7mini_bootloader.bin differ diff --git a/boards/holybro/kakuteh7mini/init/rc.board_defaults b/boards/holybro/kakuteh7mini/init/rc.board_defaults index f2534d1709..4522f26827 100644 --- a/boards/holybro/kakuteh7mini/init/rc.board_defaults +++ b/boards/holybro/kakuteh7mini/init/rc.board_defaults @@ -19,9 +19,6 @@ param set-default BAT1_A_PER_V 59.5 # system_power unavailable param set-default CBRK_SUPPLY_CHK 894281 -# Select the Generic 250 Racer by default -param set-default SYS_AUTOSTART 4050 - # use EKF2 without mag param set-default SYS_HAS_MAG 0 # and enable gravity fusion @@ -32,11 +29,10 @@ param set-default CBRK_BUZZER 782090 param set-default IMU_GYRO_RATEMAX 2000 +# W25N NAND flash with littlefs (128 MB): small log file size so we can keep +# a few recent logs, and fill up to 95%. +param set-default SDLOG_ROTATE 95 +param set-default SDLOG_MAX_SIZE 40 + # Store missions in RAM param set-default SYS_DM_BACKEND 1 - -# Ignore that there is no SD card -param set-default COM_ARM_SDCARD 0 - -# Disable logging -param set-default SDLOG_BACKEND 0 diff --git a/boards/holybro/kakuteh7mini/nuttx-config/include/board_dma_map.h b/boards/holybro/kakuteh7mini/nuttx-config/include/board_dma_map.h index d23e0d4120..870a3cc179 100644 --- a/boards/holybro/kakuteh7mini/nuttx-config/include/board_dma_map.h +++ b/boards/holybro/kakuteh7mini/nuttx-config/include/board_dma_map.h @@ -33,6 +33,9 @@ #pragma once +#define DMAMAP_SPI1_RX DMAMAP_DMA12_SPI1RX_0 /* DMA1 */ +#define DMAMAP_SPI1_TX DMAMAP_DMA12_SPI1TX_0 /* DMA1 */ + #define DMAMAP_SPI4_RX DMAMAP_DMA12_SPI4RX_1 /* DMA2 */ #define DMAMAP_SPI4_TX DMAMAP_DMA12_SPI4TX_1 /* DMA2 */ diff --git a/boards/holybro/kakuteh7mini/nuttx-config/nsh/defconfig b/boards/holybro/kakuteh7mini/nuttx-config/nsh/defconfig index 4bdb66ac34..4c3a983148 100644 --- a/boards/holybro/kakuteh7mini/nuttx-config/nsh/defconfig +++ b/boards/holybro/kakuteh7mini/nuttx-config/nsh/defconfig @@ -98,6 +98,10 @@ CONFIG_FDCLONE_STDIO=y CONFIG_FS_BINFS=y CONFIG_FS_CROMFS=y CONFIG_FS_FAT=y +CONFIG_FS_LITTLEFS=y +CONFIG_FS_LITTLEFS_CACHE_SIZE_FACTOR=1 +CONFIG_FS_LITTLEFS_PROGRAM_SIZE_FACTOR=1 +CONFIG_FS_LITTLEFS_READ_SIZE_FACTOR=1 CONFIG_FS_FATTIME=y CONFIG_FS_PROCFS=y CONFIG_FS_PROCFS_INCLUDE_PROGMEM=y @@ -126,7 +130,8 @@ CONFIG_MTD=y CONFIG_MTD_BYTE_WRITE=y CONFIG_MTD_PARTITION=y CONFIG_MTD_PROGMEM=y -CONFIG_MTD_RAMTRON=y +# CONFIG_MTD_RAMTRON is not set +CONFIG_MTD_W25N=y CONFIG_NAME_MAX=40 CONFIG_NSH_ARCHINIT=y CONFIG_NSH_ARGCAT=y @@ -135,7 +140,7 @@ CONFIG_NSH_CMDPARMS=y CONFIG_NSH_CROMFSETC=y CONFIG_NSH_LINELEN=128 CONFIG_NSH_MAXARGUMENTS=15 -CONFIG_NSH_MMCSDSPIPORTNO=1 +# CONFIG_NSH_MMCSDSPIPORTNO is not set CONFIG_NSH_NESTDEPTH=8 CONFIG_NSH_QUOTE=y CONFIG_NSH_ROMFSETC=y @@ -148,9 +153,6 @@ CONFIG_PREALLOC_TIMERS=50 CONFIG_PRIORITY_INHERITANCE=y CONFIG_PTHREAD_MUTEX_ROBUST=y CONFIG_PTHREAD_STACK_MIN=512 -CONFIG_RAMTRON_EMULATE_PAGE_SHIFT=5 -CONFIG_RAMTRON_EMULATE_SECTOR_SHIFT=5 -CONFIG_RAMTRON_SETSPEED=y CONFIG_RAM_SIZE=245760 CONFIG_RAM_START=0x20010000 CONFIG_RAW_BINARY=y @@ -188,6 +190,7 @@ CONFIG_STM32H7_BKPSRAM=y CONFIG_STM32H7_DMA1=y CONFIG_STM32H7_DMA2=y CONFIG_STM32H7_DMACAPABLE=y +CONFIG_STM32H7_DMAMUX1=y CONFIG_STM32H7_FLOWCONTROL_BROKEN=y CONFIG_STM32H7_I2C1=y CONFIG_STM32H7_I2C_DYNTIMEO=y @@ -201,6 +204,8 @@ CONFIG_STM32H7_SDMMC1=y CONFIG_STM32H7_SERIALBRK_BSDCOMPAT=y CONFIG_STM32H7_SERIAL_DISABLE_REORDERING=y CONFIG_STM32H7_SPI1=y +CONFIG_STM32H7_SPI1_DMA=y +CONFIG_STM32H7_SPI1_DMA_BUFFER=4096 CONFIG_STM32H7_SPI2=y CONFIG_STM32H7_SPI4=y CONFIG_STM32H7_SPI4_DMA=y @@ -244,4 +249,5 @@ CONFIG_USBDEV=y CONFIG_USBDEV_BUSPOWERED=y CONFIG_USBDEV_MAXPOWER=500 CONFIG_USEC_PER_TICK=1000 +CONFIG_W25N_SPIFREQUENCY=104000000 CONFIG_WATCHDOG=y diff --git a/boards/holybro/kakuteh7mini/nuttx-config/scripts/bootloader_script.ld b/boards/holybro/kakuteh7mini/nuttx-config/scripts/bootloader_script.ld index fc0a5589be..d3609b6549 100644 --- a/boards/holybro/kakuteh7mini/nuttx-config/scripts/bootloader_script.ld +++ b/boards/holybro/kakuteh7mini/nuttx-config/scripts/bootloader_script.ld @@ -132,20 +132,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/holybro/kakuteh7mini/nuttx-config/scripts/script.ld b/boards/holybro/kakuteh7mini/nuttx-config/scripts/script.ld index ae07f4bfca..8218113582 100644 --- a/boards/holybro/kakuteh7mini/nuttx-config/scripts/script.ld +++ b/boards/holybro/kakuteh7mini/nuttx-config/scripts/script.ld @@ -131,20 +131,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/holybro/kakuteh7mini/src/hw_config.h b/boards/holybro/kakuteh7mini/src/hw_config.h index bd7a8a6d3c..eb5ea2f72c 100644 --- a/boards/holybro/kakuteh7mini/src/hw_config.h +++ b/boards/holybro/kakuteh7mini/src/hw_config.h @@ -28,8 +28,6 @@ * INTERFACE_USART 1 - (Optional) Scan and use the Serial interface for bootloading * USBDEVICESTRING "PX4 BL FMU v2.x" - USB id string * USBPRODUCTID 0x0011 - PID Should match defconfig - * BOOT_DELAY_ADDRESS 0x000001a0 - (Optional) From the linker script from Linker Script to get a custom - * delay provided by an APP FW * BOARD_TYPE 9 - Must match .prototype boad_id * _FLASH_KBYTES (*(uint16_t *)0x1fff7a22) - Run time flash size detection * BOARD_FLASH_SECTORS ((_FLASH_KBYTES == 0x400) ? 11 : 23) - Run time determine the physical last sector @@ -68,7 +66,6 @@ #define BOARD_VBUS MK_GPIO_INPUT(GPIO_OTGFS_VBUS) //#define USE_VBUS_PULL_DOWN -#define BOOT_DELAY_ADDRESS 0x000001a0 #define BOARD_TYPE 1058 #define BOARD_FLASH_SECTORS (14) #define BOARD_FLASH_SIZE (16 * 128 * 1024) diff --git a/boards/holybro/kakuteh7mini/src/init.c b/boards/holybro/kakuteh7mini/src/init.c index 4691703e8f..1fc004fa46 100644 --- a/boards/holybro/kakuteh7mini/src/init.c +++ b/boards/holybro/kakuteh7mini/src/init.c @@ -59,6 +59,8 @@ #include #include #include +#include +#include #include #include #include @@ -231,15 +233,58 @@ __EXPORT int board_app_initialize(uintptr_t arg) led_on(LED_RED); } - // MARK: this will *not* work as the minis have a W25N NAND flash chip - /* Get the SPI port for the microSD slot */ - struct spi_dev_s *spi_dev = stm32_spibus_initialize(CONFIG_NSH_MMCSDSPIPORTNO); +#ifdef CONFIG_MTD_W25N + /* Initialize W25N01GV NAND Flash on SPI1 */ + struct spi_dev_s *spi1 = stm32_spibus_initialize(1); - if (!spi_dev) { - syslog(LOG_ERR, "[boot] FAILED to initialize SPI port %d\n", CONFIG_NSH_MMCSDSPIPORTNO); - led_on(LED_BLUE); + if (!spi1) { + syslog(LOG_ERR, "[boot] FAILED to initialize SPI1 for W25N\n"); + led_on(LED_RED); + + } else { + struct mtd_dev_s *mtd = w25n_initialize(spi1, 0); + + if (!mtd) { + syslog(LOG_ERR, "[boot] FAILED to initialize W25N MTD driver\n"); + led_on(LED_RED); + + } else { + int ret = register_mtddriver("/dev/mtd0", mtd, 0755, NULL); + + if (ret < 0) { + syslog(LOG_ERR, "[boot] FAILED to register MTD driver: %d\n", ret); + led_on(LED_RED); + + } else { + syslog(LOG_INFO, "[boot] W25N MTD registered at /dev/mtd0\n"); + + struct mtd_geometry_s geo; + + if (mtd->ioctl(mtd, MTDIOC_GEOMETRY, (unsigned long)((uintptr_t)&geo)) == 0) { + syslog(LOG_INFO, "[boot] W25N: %lu erase blocks, %lu bytes/block, %lu total bytes\n", + (unsigned long)geo.neraseblocks, + (unsigned long)geo.erasesize, + (unsigned long)geo.neraseblocks * (unsigned long)geo.erasesize); + } + +#ifdef CONFIG_FS_LITTLEFS + ret = nx_mount("/dev/mtd0", CONFIG_BOARD_ROOT_PATH, "littlefs", 0, "autoformat"); + + if (ret < 0) { + syslog(LOG_ERR, "[boot] FAILED to mount littlefs: %d\n", ret); + led_on(LED_RED); + + } else { + syslog(LOG_INFO, "[boot] LittleFS mounted at %s\n", CONFIG_BOARD_ROOT_PATH); + } + +#endif + } + } } +#endif + up_udelay(20); #if defined(FLASH_BASED_PARAMS) diff --git a/boards/holybro/kakuteh7mini/src/spi.cpp b/boards/holybro/kakuteh7mini/src/spi.cpp index 462965df7e..1febbabc34 100644 --- a/boards/holybro/kakuteh7mini/src/spi.cpp +++ b/boards/holybro/kakuteh7mini/src/spi.cpp @@ -37,7 +37,7 @@ constexpr px4_spi_bus_t px4_spi_buses[SPI_BUS_MAX_BUS_ITEMS] = { initSPIBus(SPI::Bus::SPI1, { - initSPIDevice(SPIDEV_MMCSD(0), SPI::CS{GPIO::PortA, GPIO::Pin4}) + initSPIDevice(SPIDEV_FLASH(0), SPI::CS{GPIO::PortA, GPIO::Pin4}) // W25N01GV NAND Flash }), initSPIBus(SPI::Bus::SPI2, { initSPIDevice(DRV_OSD_DEVTYPE_ATXXXX, SPI::CS{GPIO::PortB, GPIO::Pin12}), diff --git a/boards/holybro/kakuteh7v2/default.px4board b/boards/holybro/kakuteh7v2/default.px4board index 11a83271c8..37068083b5 100644 --- a/boards/holybro/kakuteh7v2/default.px4board +++ b/boards/holybro/kakuteh7v2/default.px4board @@ -1,6 +1,7 @@ CONFIG_BOARD_TOOLCHAIN="arm-none-eabi" CONFIG_BOARD_ARCHITECTURE="cortex-m7" CONFIG_BOARD_ROOT_PATH="/fs/flash" +CONFIG_BOARD_NO_SDCARD=y CONFIG_BOARD_SERIAL_GPS1="/dev/ttyS3" CONFIG_BOARD_SERIAL_TEL1="/dev/ttyS0" CONFIG_BOARD_SERIAL_TEL2="/dev/ttyS1" @@ -68,7 +69,6 @@ CONFIG_NUM_MISSION_ITMES_SUPPORTED=1000 CONFIG_MODULES_RC_UPDATE=y CONFIG_MODULES_SENSORS=y CONFIG_MODULES_SIMULATION_SIMULATOR_SIH=y -CONFIG_MODULES_TEMPERATURE_COMPENSATION=y CONFIG_MODULES_UXRCE_DDS_CLIENT=y CONFIG_MODULES_VTOL_ATT_CONTROL=y CONFIG_SYSTEMCMDS_ACTUATOR_TEST=y @@ -79,6 +79,7 @@ CONFIG_SYSTEMCMDS_HARDFAULT_LOG=y CONFIG_SYSTEMCMDS_I2CDETECT=y CONFIG_SYSTEMCMDS_LED_CONTROL=y CONFIG_SYSTEMCMDS_MFT=y +CONFIG_SYSTEMCMDS_MKLITTLEFS=y CONFIG_SYSTEMCMDS_NSHTERM=y CONFIG_SYSTEMCMDS_PARAM=y CONFIG_SYSTEMCMDS_PERF=y diff --git a/boards/holybro/kakuteh7v2/init/rc.board_defaults b/boards/holybro/kakuteh7v2/init/rc.board_defaults index de1eecef02..a6dc65ea50 100644 --- a/boards/holybro/kakuteh7v2/init/rc.board_defaults +++ b/boards/holybro/kakuteh7v2/init/rc.board_defaults @@ -19,9 +19,6 @@ param set-default BAT1_A_PER_V 59.5 # system_power unavailable param set-default CBRK_SUPPLY_CHK 894281 -# Select the Generic 250 Racer by default -param set-default SYS_AUTOSTART 4050 - # use EKF2 without mag param set-default SYS_HAS_MAG 0 # and enable gravity fusion @@ -35,9 +32,7 @@ param set-default IMU_GYRO_RATEMAX 2000 # Store missions in RAM param set-default SYS_DM_BACKEND 1 -# Ignore that there is no SD card -param set-default COM_ARM_SDCARD 0 - -# W25N NAND flash with littlefs (128 MB): larger buffer, auto-rotate -set LOGGER_BUF 32 -param set-default SDLOG_DIRS_MAX 3 +# W25N NAND flash with littlefs (128 MB): small log file size so we can keep +# a few recent logs, and fill up to 95%. +param set-default SDLOG_ROTATE 95 +param set-default SDLOG_MAX_SIZE 40 diff --git a/boards/holybro/kakuteh7v2/nuttx-config/scripts/bootloader_script.ld b/boards/holybro/kakuteh7v2/nuttx-config/scripts/bootloader_script.ld index fc0a5589be..d3609b6549 100644 --- a/boards/holybro/kakuteh7v2/nuttx-config/scripts/bootloader_script.ld +++ b/boards/holybro/kakuteh7v2/nuttx-config/scripts/bootloader_script.ld @@ -132,20 +132,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/holybro/kakuteh7v2/nuttx-config/scripts/script.ld b/boards/holybro/kakuteh7v2/nuttx-config/scripts/script.ld index ae07f4bfca..8218113582 100644 --- a/boards/holybro/kakuteh7v2/nuttx-config/scripts/script.ld +++ b/boards/holybro/kakuteh7v2/nuttx-config/scripts/script.ld @@ -131,20 +131,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/holybro/kakuteh7v2/src/board_config.h b/boards/holybro/kakuteh7v2/src/board_config.h index 292dc706ce..c8ec2fabe1 100644 --- a/boards/holybro/kakuteh7v2/src/board_config.h +++ b/boards/holybro/kakuteh7v2/src/board_config.h @@ -59,11 +59,6 @@ # define BOARD_HAS_NBAT_V 1 # define BOARD_HAS_NBAT_I 1 -/* Enable small flash logging support (for W25N NAND flash) */ -#ifdef CONFIG_MTD_W25N -# define BOARD_SMALL_FLASH_LOGGING 1 -#endif - /* Holybro KakuteH7 GPIOs ************************************************************************/ /* LEDs are driven with push open drain to support Anode to 5V or 3.3V */ diff --git a/boards/holybro/kakuteh7v2/src/hw_config.h b/boards/holybro/kakuteh7v2/src/hw_config.h index 72b3d6ac6c..c73fb961e6 100644 --- a/boards/holybro/kakuteh7v2/src/hw_config.h +++ b/boards/holybro/kakuteh7v2/src/hw_config.h @@ -28,8 +28,6 @@ * INTERFACE_USART 1 - (Optional) Scan and use the Serial interface for bootloading * USBDEVICESTRING "PX4 BL FMU v2.x" - USB id string * USBPRODUCTID 0x0011 - PID Should match defconfig - * BOOT_DELAY_ADDRESS 0x000001a0 - (Optional) From the linker script from Linker Script to get a custom - * delay provided by an APP FW * BOARD_TYPE 9 - Must match .prototype boad_id * _FLASH_KBYTES (*(uint16_t *)0x1fff7a22) - Run time flash size detection * BOARD_FLASH_SECTORS ((_FLASH_KBYTES == 0x400) ? 11 : 23) - Run time determine the physical last sector @@ -68,7 +66,6 @@ #define BOARD_VBUS MK_GPIO_INPUT(GPIO_OTGFS_VBUS) //#define USE_VBUS_PULL_DOWN -#define BOOT_DELAY_ADDRESS 0x000001a0 #define BOARD_TYPE 1053 #define BOARD_FLASH_SECTORS (14) #define BOARD_FLASH_SIZE (16 * 128 * 1024) diff --git a/boards/holybro/pix32v5/default.px4board b/boards/holybro/pix32v5/default.px4board index b97b164322..c011bc53e5 100644 --- a/boards/holybro/pix32v5/default.px4board +++ b/boards/holybro/pix32v5/default.px4board @@ -72,7 +72,6 @@ CONFIG_MODULES_NAVIGATOR=y CONFIG_MODULES_RC_UPDATE=y CONFIG_MODULES_SENSORS=y CONFIG_MODULES_SIMULATION_SIMULATOR_SIH=y -CONFIG_MODULES_TEMPERATURE_COMPENSATION=y CONFIG_MODULES_UUV_ATT_CONTROL=y CONFIG_MODULES_UUV_POS_CONTROL=y CONFIG_MODULES_VTOL_ATT_CONTROL=y diff --git a/boards/holybro/pix32v5/nuttx-config/scripts/script.ld b/boards/holybro/pix32v5/nuttx-config/scripts/script.ld index db0f740cf0..b9a2dce0cc 100644 --- a/boards/holybro/pix32v5/nuttx-config/scripts/script.ld +++ b/boards/holybro/pix32v5/nuttx-config/scripts/script.ld @@ -89,20 +89,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/holybro/pix32v5/src/board_config.h b/boards/holybro/pix32v5/src/board_config.h index 67b3909f78..fb15ab300a 100644 --- a/boards/holybro/pix32v5/src/board_config.h +++ b/boards/holybro/pix32v5/src/board_config.h @@ -204,8 +204,10 @@ /* HEATER * PWM in future */ -#define GPIO_HEATER_OUTPUT /* PA7 T14CH1 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTA|GPIO_PIN7) -#define HEATER_OUTPUT_EN(on_true) px4_arch_gpiowrite(GPIO_HEATER_OUTPUT, (on_true)) +#define GPIO_HEATER_OUTPUT +#define HEATER_NUM 1 +#define GPIO_HEATER1_OUTPUT /* PA7 T14CH1 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTA|GPIO_PIN7) +#define HEATER1_OUTPUT_EN(on_true) px4_arch_gpiowrite(GPIO_HEATER1_OUTPUT, (on_true)) /* PI0 is nARMED * The GPIO will be set as input while not armed HW will have external HW Pull UP. @@ -409,7 +411,7 @@ GPIO_CAN1_SILENT_S0, \ GPIO_CAN2_SILENT_S1, \ GPIO_CAN3_SILENT_S2, \ - GPIO_HEATER_OUTPUT, \ + GPIO_HEATER1_OUTPUT, \ GPIO_nPOWER_IN_A, \ GPIO_nPOWER_IN_B, \ GPIO_nPOWER_IN_C, \ diff --git a/boards/matek/gnss-m9n-f4/nuttx-config/scripts/script.ld b/boards/matek/gnss-m9n-f4/nuttx-config/scripts/script.ld index 70696dfb2c..85a0dd5905 100755 --- a/boards/matek/gnss-m9n-f4/nuttx-config/scripts/script.ld +++ b/boards/matek/gnss-m9n-f4/nuttx-config/scripts/script.ld @@ -64,8 +64,6 @@ EXTERN(_vectors) /* force the vectors to be included in the output */ * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { diff --git a/boards/matek/h743-mini/nuttx-config/scripts/bootloader_script.ld b/boards/matek/h743-mini/nuttx-config/scripts/bootloader_script.ld index fb877cc443..fcf84a4c60 100644 --- a/boards/matek/h743-mini/nuttx-config/scripts/bootloader_script.ld +++ b/boards/matek/h743-mini/nuttx-config/scripts/bootloader_script.ld @@ -130,20 +130,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/matek/h743-mini/nuttx-config/scripts/script.ld b/boards/matek/h743-mini/nuttx-config/scripts/script.ld index 85f4990724..012bc18d5e 100644 --- a/boards/matek/h743-mini/nuttx-config/scripts/script.ld +++ b/boards/matek/h743-mini/nuttx-config/scripts/script.ld @@ -131,20 +131,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/matek/h743-mini/src/hw_config.h b/boards/matek/h743-mini/src/hw_config.h index f289dc960d..b5da75f386 100644 --- a/boards/matek/h743-mini/src/hw_config.h +++ b/boards/matek/h743-mini/src/hw_config.h @@ -53,8 +53,6 @@ * INTERFACE_USART 1 - (Optional) Scan and use the Serial interface for bootloading * USBDEVICESTRING "PX4 BL FMU v2.x" - USB id string * USBPRODUCTID 0x0011 - PID Should match defconfig - * BOOT_DELAY_ADDRESS 0x000001a0 - (Optional) From the linker script from Linker Script to get a custom - * delay provided by an APP FW * BOARD_TYPE 9 - Must match .prototype boad_id * _FLASH_KBYTES (*(uint16_t *)0x1fff7a22) - Run time flash size detection * BOARD_FLASH_SECTORS ((_FLASH_KBYTES == 0x400) ? 11 : 23) - Run time determine the physical last sector @@ -95,7 +93,6 @@ //#define USE_VBUS_PULL_DOWN #define INTERFACE_USART 1 #define INTERFACE_USART_CONFIG "/dev/ttyS0,57600" -#define BOOT_DELAY_ADDRESS 0x000001a0 #define BOARD_TYPE 139 #define _FLASH_KBYTES (*(uint32_t *)0x1FF1E880) #define BOARD_FLASH_SECTORS (15) diff --git a/boards/matek/h743-slim/nuttx-config/scripts/bootloader_script.ld b/boards/matek/h743-slim/nuttx-config/scripts/bootloader_script.ld index fb877cc443..fcf84a4c60 100644 --- a/boards/matek/h743-slim/nuttx-config/scripts/bootloader_script.ld +++ b/boards/matek/h743-slim/nuttx-config/scripts/bootloader_script.ld @@ -130,20 +130,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/matek/h743-slim/nuttx-config/scripts/script.ld b/boards/matek/h743-slim/nuttx-config/scripts/script.ld index c6a8ee1141..ba84f12d00 100644 --- a/boards/matek/h743-slim/nuttx-config/scripts/script.ld +++ b/boards/matek/h743-slim/nuttx-config/scripts/script.ld @@ -131,20 +131,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/matek/h743-slim/src/hw_config.h b/boards/matek/h743-slim/src/hw_config.h index 3256b9c63d..0a880d1c89 100644 --- a/boards/matek/h743-slim/src/hw_config.h +++ b/boards/matek/h743-slim/src/hw_config.h @@ -53,8 +53,6 @@ * INTERFACE_USART 1 - (Optional) Scan and use the Serial interface for bootloading * USBDEVICESTRING "PX4 BL FMU v2.x" - USB id string * USBPRODUCTID 0x0011 - PID Should match defconfig - * BOOT_DELAY_ADDRESS 0x000001a0 - (Optional) From the linker script from Linker Script to get a custom - * delay provided by an APP FW * BOARD_TYPE 9 - Must match .prototype boad_id * _FLASH_KBYTES (*(uint16_t *)0x1fff7a22) - Run time flash size detection * BOARD_FLASH_SECTORS ((_FLASH_KBYTES == 0x400) ? 11 : 23) - Run time determine the physical last sector @@ -95,7 +93,6 @@ //#define USE_VBUS_PULL_DOWN #define INTERFACE_USART 1 #define INTERFACE_USART_CONFIG "/dev/ttyS0,57600" -#define BOOT_DELAY_ADDRESS 0x000001a0 #define BOARD_TYPE 1013 #define _FLASH_KBYTES (*(uint32_t *)0x1FF1E880) #define BOARD_FLASH_SECTORS (15) diff --git a/boards/matek/h743/nuttx-config/scripts/bootloader_script.ld b/boards/matek/h743/nuttx-config/scripts/bootloader_script.ld index fb877cc443..fcf84a4c60 100644 --- a/boards/matek/h743/nuttx-config/scripts/bootloader_script.ld +++ b/boards/matek/h743/nuttx-config/scripts/bootloader_script.ld @@ -130,20 +130,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/matek/h743/nuttx-config/scripts/script.ld b/boards/matek/h743/nuttx-config/scripts/script.ld index c6a8ee1141..ba84f12d00 100644 --- a/boards/matek/h743/nuttx-config/scripts/script.ld +++ b/boards/matek/h743/nuttx-config/scripts/script.ld @@ -131,20 +131,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/matek/h743/src/hw_config.h b/boards/matek/h743/src/hw_config.h index f289dc960d..b5da75f386 100644 --- a/boards/matek/h743/src/hw_config.h +++ b/boards/matek/h743/src/hw_config.h @@ -53,8 +53,6 @@ * INTERFACE_USART 1 - (Optional) Scan and use the Serial interface for bootloading * USBDEVICESTRING "PX4 BL FMU v2.x" - USB id string * USBPRODUCTID 0x0011 - PID Should match defconfig - * BOOT_DELAY_ADDRESS 0x000001a0 - (Optional) From the linker script from Linker Script to get a custom - * delay provided by an APP FW * BOARD_TYPE 9 - Must match .prototype boad_id * _FLASH_KBYTES (*(uint16_t *)0x1fff7a22) - Run time flash size detection * BOARD_FLASH_SECTORS ((_FLASH_KBYTES == 0x400) ? 11 : 23) - Run time determine the physical last sector @@ -95,7 +93,6 @@ //#define USE_VBUS_PULL_DOWN #define INTERFACE_USART 1 #define INTERFACE_USART_CONFIG "/dev/ttyS0,57600" -#define BOOT_DELAY_ADDRESS 0x000001a0 #define BOARD_TYPE 139 #define _FLASH_KBYTES (*(uint32_t *)0x1FF1E880) #define BOARD_FLASH_SECTORS (15) diff --git a/boards/micoair/h743-aio/default.px4board b/boards/micoair/h743-aio/default.px4board index 1a5e79726a..67611b854c 100644 --- a/boards/micoair/h743-aio/default.px4board +++ b/boards/micoair/h743-aio/default.px4board @@ -81,7 +81,6 @@ CONFIG_MODULES_NAVIGATOR=y CONFIG_MODULES_PAYLOAD_DELIVERER=y CONFIG_MODULES_RC_UPDATE=y CONFIG_MODULES_SENSORS=y -CONFIG_MODULES_TEMPERATURE_COMPENSATION=y CONFIG_MODULES_UXRCE_DDS_CLIENT=y CONFIG_MODULES_VTOL_ATT_CONTROL=y CONFIG_SYSTEMCMDS_ACTUATOR_TEST=y diff --git a/boards/micoair/h743-aio/init/rc.board_defaults b/boards/micoair/h743-aio/init/rc.board_defaults index 23d1e77fd3..5e26ab7121 100644 --- a/boards/micoair/h743-aio/init/rc.board_defaults +++ b/boards/micoair/h743-aio/init/rc.board_defaults @@ -13,7 +13,6 @@ param set-default PWM_MAIN_TIM0 -4 param set-default RC_INPUT_PROTO -1 param set-default IMU_GYRO_CUTOFF 100 -param set-default SYS_AUTOSTART 4001 param set-default MC_PITCHRATE_K 0.4 param set-default MC_ROLLRATE_K 0.35 param set-default MC_YAWRATE_K 1.2 diff --git a/boards/micoair/h743-aio/nuttx-config/scripts/bootloader_script.ld b/boards/micoair/h743-aio/nuttx-config/scripts/bootloader_script.ld index fb877cc443..fcf84a4c60 100644 --- a/boards/micoair/h743-aio/nuttx-config/scripts/bootloader_script.ld +++ b/boards/micoair/h743-aio/nuttx-config/scripts/bootloader_script.ld @@ -130,20 +130,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/micoair/h743-aio/nuttx-config/scripts/script.ld b/boards/micoair/h743-aio/nuttx-config/scripts/script.ld index 85f4990724..012bc18d5e 100644 --- a/boards/micoair/h743-aio/nuttx-config/scripts/script.ld +++ b/boards/micoair/h743-aio/nuttx-config/scripts/script.ld @@ -131,20 +131,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/micoair/h743-aio/src/hw_config.h b/boards/micoair/h743-aio/src/hw_config.h index c63c1e6588..6e92529b60 100644 --- a/boards/micoair/h743-aio/src/hw_config.h +++ b/boards/micoair/h743-aio/src/hw_config.h @@ -53,8 +53,6 @@ * INTERFACE_USART 1 - (Optional) Scan and use the Serial interface for bootloading * USBDEVICESTRING "PX4 BL FMU v2.x" - USB id string * USBPRODUCTID 0x0011 - PID Should match defconfig - * BOOT_DELAY_ADDRESS 0x000001a0 - (Optional) From the linker script from Linker Script to get a custom - * delay provided by an APP FW * BOARD_TYPE 9 - Must match .prototype boad_id * _FLASH_KBYTES (*(uint16_t *)0x1fff7a22) - Run time flash size detection * BOARD_FLASH_SECTORS ((_FLASH_KBYTES == 0x400) ? 11 : 23) - Run time determine the physical last sector @@ -95,7 +93,6 @@ //#define USE_VBUS_PULL_DOWN #define INTERFACE_USART 1 #define INTERFACE_USART_CONFIG "/dev/ttyS0,115200" -#define BOOT_DELAY_ADDRESS 0x000001a0 #define BOARD_TYPE 1176 #define _FLASH_KBYTES (*(uint32_t *)0x1FF1E880) #define BOARD_FLASH_SECTORS (15) diff --git a/boards/micoair/h743-lite/default.px4board b/boards/micoair/h743-lite/default.px4board index 372825ced9..9d8999b053 100644 --- a/boards/micoair/h743-lite/default.px4board +++ b/boards/micoair/h743-lite/default.px4board @@ -74,7 +74,6 @@ CONFIG_MODULES_NAVIGATOR=y CONFIG_MODULES_PAYLOAD_DELIVERER=y CONFIG_MODULES_RC_UPDATE=y CONFIG_MODULES_SENSORS=y -CONFIG_MODULES_TEMPERATURE_COMPENSATION=y CONFIG_MODULES_UXRCE_DDS_CLIENT=y CONFIG_MODULES_VTOL_ATT_CONTROL=y CONFIG_SYSTEMCMDS_ACTUATOR_TEST=y diff --git a/boards/micoair/h743-lite/init/rc.board_defaults b/boards/micoair/h743-lite/init/rc.board_defaults index 6448d6d3ae..bf6156dd05 100644 --- a/boards/micoair/h743-lite/init/rc.board_defaults +++ b/boards/micoair/h743-lite/init/rc.board_defaults @@ -17,7 +17,6 @@ param set-default MAV_2_CONFIG 104 param set-default SER_TEL4_BAUD 115200 param set-default IMU_GYRO_CUTOFF 80 -param set-default SYS_AUTOSTART 4001 param set-default MC_PITCHRATE_K 0.4 param set-default MC_ROLLRATE_K 0.35 param set-default MC_YAWRATE_K 1.2 diff --git a/boards/micoair/h743-lite/nuttx-config/scripts/bootloader_script.ld b/boards/micoair/h743-lite/nuttx-config/scripts/bootloader_script.ld index fb877cc443..fcf84a4c60 100644 --- a/boards/micoair/h743-lite/nuttx-config/scripts/bootloader_script.ld +++ b/boards/micoair/h743-lite/nuttx-config/scripts/bootloader_script.ld @@ -130,20 +130,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/micoair/h743-lite/nuttx-config/scripts/script.ld b/boards/micoair/h743-lite/nuttx-config/scripts/script.ld index 85f4990724..012bc18d5e 100644 --- a/boards/micoair/h743-lite/nuttx-config/scripts/script.ld +++ b/boards/micoair/h743-lite/nuttx-config/scripts/script.ld @@ -131,20 +131,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/micoair/h743-lite/src/hw_config.h b/boards/micoair/h743-lite/src/hw_config.h index ac210d78d4..aa1103335a 100644 --- a/boards/micoair/h743-lite/src/hw_config.h +++ b/boards/micoair/h743-lite/src/hw_config.h @@ -53,8 +53,6 @@ * INTERFACE_USART 1 - (Optional) Scan and use the Serial interface for bootloading * USBDEVICESTRING "PX4 BL FMU v2.x" - USB id string * USBPRODUCTID 0x0011 - PID Should match defconfig - * BOOT_DELAY_ADDRESS 0x000001a0 - (Optional) From the linker script from Linker Script to get a custom - * delay provided by an APP FW * BOARD_TYPE 9 - Must match .prototype boad_id * _FLASH_KBYTES (*(uint16_t *)0x1fff7a22) - Run time flash size detection * BOARD_FLASH_SECTORS ((_FLASH_KBYTES == 0x400) ? 11 : 23) - Run time determine the physical last sector @@ -95,7 +93,6 @@ //#define USE_VBUS_PULL_DOWN #define INTERFACE_USART 1 #define INTERFACE_USART_CONFIG "/dev/ttyS0,115200" -#define BOOT_DELAY_ADDRESS 0x000001a0 #define BOARD_TYPE 1202 #define _FLASH_KBYTES (*(uint32_t *)0x1FF1E880) #define BOARD_FLASH_SECTORS (15) diff --git a/boards/micoair/h743-v2/default.px4board b/boards/micoair/h743-v2/default.px4board index 320f1d29e9..d2da73f08b 100644 --- a/boards/micoair/h743-v2/default.px4board +++ b/boards/micoair/h743-v2/default.px4board @@ -76,7 +76,6 @@ CONFIG_MODULES_NAVIGATOR=y CONFIG_MODULES_PAYLOAD_DELIVERER=y CONFIG_MODULES_RC_UPDATE=y CONFIG_MODULES_SENSORS=y -CONFIG_MODULES_TEMPERATURE_COMPENSATION=y CONFIG_MODULES_UXRCE_DDS_CLIENT=y CONFIG_MODULES_VTOL_ATT_CONTROL=y CONFIG_SYSTEMCMDS_ACTUATOR_TEST=y diff --git a/boards/micoair/h743-v2/init/rc.board_defaults b/boards/micoair/h743-v2/init/rc.board_defaults index 76ebd8084f..2e13705958 100644 --- a/boards/micoair/h743-v2/init/rc.board_defaults +++ b/boards/micoair/h743-v2/init/rc.board_defaults @@ -16,7 +16,6 @@ param set-default MAV_2_CONFIG 104 param set-default SER_TEL4_BAUD 115200 param set-default IMU_GYRO_CUTOFF 80 -param set-default SYS_AUTOSTART 4001 param set-default MC_PITCHRATE_K 0.4 param set-default MC_ROLLRATE_K 0.35 param set-default MC_YAWRATE_K 1.2 diff --git a/boards/micoair/h743-v2/nuttx-config/scripts/bootloader_script.ld b/boards/micoair/h743-v2/nuttx-config/scripts/bootloader_script.ld index fb877cc443..fcf84a4c60 100644 --- a/boards/micoair/h743-v2/nuttx-config/scripts/bootloader_script.ld +++ b/boards/micoair/h743-v2/nuttx-config/scripts/bootloader_script.ld @@ -130,20 +130,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/micoair/h743-v2/nuttx-config/scripts/script.ld b/boards/micoair/h743-v2/nuttx-config/scripts/script.ld index 85f4990724..012bc18d5e 100644 --- a/boards/micoair/h743-v2/nuttx-config/scripts/script.ld +++ b/boards/micoair/h743-v2/nuttx-config/scripts/script.ld @@ -131,20 +131,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/micoair/h743-v2/src/hw_config.h b/boards/micoair/h743-v2/src/hw_config.h index ded5196d73..76359de78b 100644 --- a/boards/micoair/h743-v2/src/hw_config.h +++ b/boards/micoair/h743-v2/src/hw_config.h @@ -53,8 +53,6 @@ * INTERFACE_USART 1 - (Optional) Scan and use the Serial interface for bootloading * USBDEVICESTRING "PX4 BL FMU v2.x" - USB id string * USBPRODUCTID 0x0011 - PID Should match defconfig - * BOOT_DELAY_ADDRESS 0x000001a0 - (Optional) From the linker script from Linker Script to get a custom - * delay provided by an APP FW * BOARD_TYPE 9 - Must match .prototype boad_id * _FLASH_KBYTES (*(uint16_t *)0x1fff7a22) - Run time flash size detection * BOARD_FLASH_SECTORS ((_FLASH_KBYTES == 0x400) ? 11 : 23) - Run time determine the physical last sector @@ -95,7 +93,6 @@ //#define USE_VBUS_PULL_DOWN #define INTERFACE_USART 1 #define INTERFACE_USART_CONFIG "/dev/ttyS0,115200" -#define BOOT_DELAY_ADDRESS 0x000001a0 #define BOARD_TYPE 1179 #define _FLASH_KBYTES (*(uint32_t *)0x1FF1E880) #define BOARD_FLASH_SECTORS (15) diff --git a/boards/micoair/h743/default.px4board b/boards/micoair/h743/default.px4board index 90c9b6e6f9..87117d8206 100644 --- a/boards/micoair/h743/default.px4board +++ b/boards/micoair/h743/default.px4board @@ -79,7 +79,6 @@ CONFIG_MODULES_NAVIGATOR=y CONFIG_MODULES_PAYLOAD_DELIVERER=y CONFIG_MODULES_RC_UPDATE=y CONFIG_MODULES_SENSORS=y -CONFIG_MODULES_TEMPERATURE_COMPENSATION=y CONFIG_MODULES_UXRCE_DDS_CLIENT=y CONFIG_MODULES_VTOL_ATT_CONTROL=y CONFIG_SYSTEMCMDS_ACTUATOR_TEST=y diff --git a/boards/micoair/h743/init/rc.board_defaults b/boards/micoair/h743/init/rc.board_defaults index b75fc32b5f..9ec190a42c 100644 --- a/boards/micoair/h743/init/rc.board_defaults +++ b/boards/micoair/h743/init/rc.board_defaults @@ -13,7 +13,6 @@ param set-default PWM_MAIN_TIM0 -4 param set-default RC_INPUT_PROTO -1 param set-default IMU_GYRO_CUTOFF 80 -param set-default SYS_AUTOSTART 4001 param set-default MC_PITCHRATE_K 0.4 param set-default MC_ROLLRATE_K 0.35 param set-default MC_YAWRATE_K 1.2 diff --git a/boards/micoair/h743/nuttx-config/scripts/bootloader_script.ld b/boards/micoair/h743/nuttx-config/scripts/bootloader_script.ld index fb877cc443..fcf84a4c60 100644 --- a/boards/micoair/h743/nuttx-config/scripts/bootloader_script.ld +++ b/boards/micoair/h743/nuttx-config/scripts/bootloader_script.ld @@ -130,20 +130,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/micoair/h743/nuttx-config/scripts/script.ld b/boards/micoair/h743/nuttx-config/scripts/script.ld index 85f4990724..012bc18d5e 100644 --- a/boards/micoair/h743/nuttx-config/scripts/script.ld +++ b/boards/micoair/h743/nuttx-config/scripts/script.ld @@ -131,20 +131,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/micoair/h743/src/hw_config.h b/boards/micoair/h743/src/hw_config.h index 5ed1180829..585418d25f 100644 --- a/boards/micoair/h743/src/hw_config.h +++ b/boards/micoair/h743/src/hw_config.h @@ -53,8 +53,6 @@ * INTERFACE_USART 1 - (Optional) Scan and use the Serial interface for bootloading * USBDEVICESTRING "PX4 BL FMU v2.x" - USB id string * USBPRODUCTID 0x0011 - PID Should match defconfig - * BOOT_DELAY_ADDRESS 0x000001a0 - (Optional) From the linker script from Linker Script to get a custom - * delay provided by an APP FW * BOARD_TYPE 9 - Must match .prototype boad_id * _FLASH_KBYTES (*(uint16_t *)0x1fff7a22) - Run time flash size detection * BOARD_FLASH_SECTORS ((_FLASH_KBYTES == 0x400) ? 11 : 23) - Run time determine the physical last sector @@ -95,7 +93,6 @@ //#define USE_VBUS_PULL_DOWN #define INTERFACE_USART 1 #define INTERFACE_USART_CONFIG "/dev/ttyS0,115200" -#define BOOT_DELAY_ADDRESS 0x000001a0 #define BOARD_TYPE 1166 #define _FLASH_KBYTES (*(uint32_t *)0x1FF1E880) #define BOARD_FLASH_SECTORS (15) diff --git a/boards/modalai/fc-v1/default.px4board b/boards/modalai/fc-v1/default.px4board index e3c79f459e..6d1a5c43bf 100644 --- a/boards/modalai/fc-v1/default.px4board +++ b/boards/modalai/fc-v1/default.px4board @@ -71,7 +71,6 @@ CONFIG_MODULES_NAVIGATOR=y CONFIG_MODULES_RC_UPDATE=y CONFIG_MODULES_SENSORS=y CONFIG_MODULES_SIMULATION_SIMULATOR_SIH=y -CONFIG_MODULES_TEMPERATURE_COMPENSATION=y CONFIG_MODULES_UUV_ATT_CONTROL=y CONFIG_MODULES_UUV_POS_CONTROL=y CONFIG_MODULES_UXRCE_DDS_CLIENT=y diff --git a/boards/modalai/fc-v1/nuttx-config/scripts/script.ld b/boards/modalai/fc-v1/nuttx-config/scripts/script.ld index db0f740cf0..b9a2dce0cc 100644 --- a/boards/modalai/fc-v1/nuttx-config/scripts/script.ld +++ b/boards/modalai/fc-v1/nuttx-config/scripts/script.ld @@ -89,20 +89,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/modalai/fc-v2/default.px4board b/boards/modalai/fc-v2/default.px4board index f33dbc9002..c51d0fcb82 100644 --- a/boards/modalai/fc-v2/default.px4board +++ b/boards/modalai/fc-v2/default.px4board @@ -61,7 +61,6 @@ CONFIG_MODULES_MC_RATE_CONTROL=y CONFIG_MODULES_NAVIGATOR=y CONFIG_MODULES_RC_UPDATE=y CONFIG_MODULES_SENSORS=y -CONFIG_MODULES_TEMPERATURE_COMPENSATION=y CONFIG_MODULES_UXRCE_DDS_CLIENT=y CONFIG_MODULES_VTOL_ATT_CONTROL=y CONFIG_SYSTEMCMDS_ACTUATOR_TEST=y diff --git a/boards/modalai/fc-v2/nuttx-config/scripts/bootloader_script.ld b/boards/modalai/fc-v2/nuttx-config/scripts/bootloader_script.ld index 5cc69e66f1..c92d838ceb 100644 --- a/boards/modalai/fc-v2/nuttx-config/scripts/bootloader_script.ld +++ b/boards/modalai/fc-v2/nuttx-config/scripts/bootloader_script.ld @@ -132,20 +132,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/modalai/fc-v2/nuttx-config/scripts/script.ld b/boards/modalai/fc-v2/nuttx-config/scripts/script.ld index b31de772ce..e234eea14a 100644 --- a/boards/modalai/fc-v2/nuttx-config/scripts/script.ld +++ b/boards/modalai/fc-v2/nuttx-config/scripts/script.ld @@ -131,7 +131,6 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) EXTERN(board_get_manifest) SECTIONS @@ -140,12 +139,6 @@ SECTIONS _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/modalai/fc-v2/scripts/run_docker.sh b/boards/modalai/fc-v2/scripts/run_docker.sh index 4e42146ca6..96a8890f11 100755 --- a/boards/modalai/fc-v2/scripts/run_docker.sh +++ b/boards/modalai/fc-v2/scripts/run_docker.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Run this from the px4 project top level directory docker run -it --rm --privileged -v `pwd`:/usr/local/workspace px4io/px4-dev-nuttx-focal:2022-08-12 diff --git a/boards/modalai/fc-v2/src/hw_config.h b/boards/modalai/fc-v2/src/hw_config.h index 474a55c0fd..e5dee8d0a3 100644 --- a/boards/modalai/fc-v2/src/hw_config.h +++ b/boards/modalai/fc-v2/src/hw_config.h @@ -28,8 +28,6 @@ * INTERFACE_USART 1 - (Optional) Scan and use the Serial interface for bootloading * USBDEVICESTRING "PX4 BL FMU v2.x" - USB id string * USBPRODUCTID 0x0011 - PID Should match defconfig - * BOOT_DELAY_ADDRESS 0x000001a0 - (Optional) From the linker script from Linker Script to get a custom - * delay provided by an APP FW * BOARD_TYPE 9 - Must match .prototype boad_id * _FLASH_KBYTES (*(uint16_t *)0x1fff7a22) - Run time flash size detection * BOARD_FLASH_SECTORS ((_FLASH_KBYTES == 0x400) ? 11 : 23) - Run time determine the physical last sector @@ -70,7 +68,6 @@ //#define USE_VBUS_PULL_DOWN #define INTERFACE_USART 1 #define INTERFACE_USART_CONFIG "/dev/ttyS0,115200" -#define BOOT_DELAY_ADDRESS 0x000001a0 #define BOARD_TYPE 41776 #define _FLASH_KBYTES (*(uint32_t *)0x1FF1E880) #define BOARD_FLASH_SECTORS (15) diff --git a/boards/modalai/voxl2-slpi/src/CMakeLists.txt b/boards/modalai/voxl2-slpi/src/CMakeLists.txt deleted file mode 100644 index 21a1e6090e..0000000000 --- a/boards/modalai/voxl2-slpi/src/CMakeLists.txt +++ /dev/null @@ -1,53 +0,0 @@ -############################################################################ -# -# Copyright (c) 2022 ModalAI, Inc. All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in -# the documentation and/or other materials provided with the -# distribution. -# 3. Neither the name PX4 nor the names of its contributors may be -# used to endorse or promote products derived from this software -# without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS -# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED -# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -# POSSIBILITY OF SUCH DAMAGE. -# -############################################################################ - -# Need to make sure that the DSP processor on VOXL2 -# knows about all parameters since some modules need parameters -# from other modules that are not running on the DSP. -set(DISABLE_PARAMS_MODULE_SCOPING TRUE PARENT_SCOPE) - -add_library(drivers_board - board_config.h - i2c.cpp - init.c - spi.cpp - ) - -# Add custom drivers for SLPI -add_subdirectory(${PX4_BOARD_DIR}/src/drivers/rc_controller) -add_subdirectory(${PX4_BOARD_DIR}/src/drivers/mavlink_rc_in) -add_subdirectory(${PX4_BOARD_DIR}/src/drivers/spektrum_rc) -add_subdirectory(${PX4_BOARD_DIR}/src/drivers/ghst_rc) -add_subdirectory(${PX4_BOARD_DIR}/src/drivers/dsp_hitl) -add_subdirectory(${PX4_BOARD_DIR}/src/drivers/dsp_sbus) -add_subdirectory(${PX4_BOARD_DIR}/src/drivers/elrs_led) diff --git a/boards/modalai/voxl2-slpi/src/board_config.h b/boards/modalai/voxl2-slpi/src/board_config.h deleted file mode 100644 index 2729397967..0000000000 --- a/boards/modalai/voxl2-slpi/src/board_config.h +++ /dev/null @@ -1,82 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2022 ModalAI, Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file board_config.h - * - * VOXL2 internal definitions - */ - -#pragma once - -#define BOARD_HAS_NO_RESET -#define BOARD_HAS_NO_BOOTLOADER -/* - * I2C buses - */ -#define CONFIG_I2C 1 -#define PX4_NUMBER_I2C_BUSES 4 - -/* - * SPI buses - */ -#define CONFIG_SPI 1 -#define BOARD_SPI_BUS_MAX_BUS_ITEMS 1 - -/* - * Include these last to make use of the definitions above - */ -#include -#include - -/* - * Default port for the ESC - */ -#define VOXL_ESC_DEFAULT_PORT "2" - -/* - * Default port for the GHST RC - */ -#define GHST_RC_DEFAULT_PORT "7" - -/* - * Default port for M0065 -*/ -#define VOXL2_IO_DEFAULT_PORT "2" - - -/* - * M0065 PWM - */ -#define DIRECT_PWM_OUTPUT_CHANNELS 4 -#define MAX_IO_TIMERS 3 diff --git a/boards/modalai/voxl2/README.md b/boards/modalai/voxl2/README.md index ac6bd1f5f1..8988e3e629 100644 --- a/boards/modalai/voxl2/README.md +++ b/boards/modalai/voxl2/README.md @@ -13,6 +13,10 @@ critical applications such as Mavlink, and logging are running on the ARM CPU cluster (aka apps proc). The DSP and ARM CPU cluster communicate via a Qualcomm proprietary shared memory interface. +Both processors are built from this single board directory: +- `default.px4board` - POSIX apps processor (ARM64) +- `slpi.px4board` - QURT DSP (Hexagon) + ## Build environment In order to build for this platform both the Qualcomm Hexagon (DSP) toolchain and the Linaro ARM64 toolchain need to be installed. The (nearly) complete setup including the ARM64 toolchain is provided in the base Docker image provided by ModalAI, but since ModalAI is not allowed to redistribute the Qualcomm Hexagon DSP SDK this must be added by the end user. @@ -22,17 +26,21 @@ The full instructions are available here: ## Build overview +A single `make modalai_voxl2` command builds both the DSP and apps processor +firmware. The Makefile chains the SLPI build as a prerequisite of the default +(apps) build. + - Clone the repo (Don't forget to update and initialize all submodules) - In the top level directory ``` px4$ boards/modalai/voxl2/scripts/run-docker.sh root@9373fa1401b8:/usr/local/workspace# boards/modalai/voxl2/scripts/clean.sh -root@9373fa1401b8:/usr/local/workspace# boards/modalai/voxl2/scripts/build-deps.sh root@9373fa1401b8:/usr/local/workspace# boards/modalai/voxl2/scripts/build-apps.sh -root@9373fa1401b8:/usr/local/workspace# boards/modalai/voxl2/scripts/build-slpi.sh root@9373fa1401b8:/usr/local/workspace# exit ``` +For DSP-only rebuilds: `make modalai_voxl2_slpi` + ## Install and run on VOXL 2 Once the DSP and Linux images have been built they can be installed on a VOXL 2 diff --git a/boards/modalai/voxl2/cmake/init.cmake b/boards/modalai/voxl2/cmake/init.cmake index 4a60cb5d91..4d2f3ff474 100644 --- a/boards/modalai/voxl2/cmake/init.cmake +++ b/boards/modalai/voxl2/cmake/init.cmake @@ -31,6 +31,10 @@ # ############################################################################ +if(NOT "${PX4_PLATFORM}" STREQUAL "posix") + return() +endif() + # Initialize libfc-sensor-api submodule (fetches from GitLab if not present) execute_process( COMMAND Tools/check_submodules.sh boards/modalai/voxl2/libfc-sensor-api diff --git a/boards/modalai/voxl2/cmake/install.cmake b/boards/modalai/voxl2/cmake/install.cmake new file mode 100644 index 0000000000..5a20dbbb9b --- /dev/null +++ b/boards/modalai/voxl2/cmake/install.cmake @@ -0,0 +1,86 @@ +############################################################################ +# +# Copyright (c) 2024 PX4 Development Team. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# 3. Neither the name PX4 nor the names of its contributors may be +# used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS +# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED +# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +############################################################################ + +# VOXL2 board-specific install rules for .deb packaging +# Included from platforms/posix/CMakeLists.txt where the px4 target exists + +# SLPI companion build output directory +set(VOXL2_SLPI_BUILD_DIR "${PX4_SOURCE_DIR}/build/modalai_voxl2_slpi") + +# Apps processor binary +install(TARGETS px4 RUNTIME DESTINATION bin) + +# px4-alias.sh (generated during build into bin/ subdirectory) +install(PROGRAMS ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/px4-alias.sh DESTINATION bin) + +# Startup scripts from board target directory +install(PROGRAMS + ${PX4_BOARD_DIR}/target/voxl-px4 + ${PX4_BOARD_DIR}/target/voxl-px4-start + ${PX4_BOARD_DIR}/target/voxl-px4-hitl + ${PX4_BOARD_DIR}/target/voxl-px4-hitl-start + ${PX4_BOARD_DIR}/target/voxl-px4-sih-start + ${PX4_BOARD_DIR}/scripts/voxl-configure-px4 + DESTINATION bin +) + +# DSP firmware blob from companion SLPI build +install(FILES ${VOXL2_SLPI_BUILD_DIR}/platforms/qurt/libpx4.so + DESTINATION lib/rfsa/adsp +) + +# Configuration files +install(FILES + ${PX4_BOARD_DIR}/target/voxl-px4-fake-imu-calibration.config + ${PX4_BOARD_DIR}/target/voxl-px4-hitl-set-default-parameters.config + ${PX4_BOARD_DIR}/target/voxl-px4-sih-set-default-parameters.config + DESTINATION ../etc/modalai +) + +# Systemd service file +install(FILES ${PX4_BOARD_DIR}/debian/voxl-px4.service + DESTINATION ../etc/systemd/system +) + +# Component metadata JSON files +install(FILES + ${PX4_BINARY_DIR}/actuators.json.xz + ${PX4_BINARY_DIR}/component_general.json.xz + ${PX4_BINARY_DIR}/parameters.json.xz + DESTINATION ../data/px4/etc/extras + OPTIONAL +) +install(FILES ${PX4_BINARY_DIR}/events/all_events.json.xz + DESTINATION ../data/px4/etc/extras + OPTIONAL +) diff --git a/boards/modalai/voxl2/cmake/link_libraries.cmake b/boards/modalai/voxl2/cmake/link_libraries.cmake index e0b09beb70..17ccce2aa6 100644 --- a/boards/modalai/voxl2/cmake/link_libraries.cmake +++ b/boards/modalai/voxl2/cmake/link_libraries.cmake @@ -1,3 +1,6 @@ +if(NOT "${PX4_PLATFORM}" STREQUAL "posix") + return() +endif() # Link against the public stub version of the proprietary fc sensor library target_link_libraries(px4 PRIVATE diff --git a/src/modules/simulation/gz_plugins/optical_flow/optical_flow.cmake b/boards/modalai/voxl2/cmake/package.cmake similarity index 50% rename from src/modules/simulation/gz_plugins/optical_flow/optical_flow.cmake rename to boards/modalai/voxl2/cmake/package.cmake index d5fa9dd2c7..fd046eafd3 100644 --- a/src/modules/simulation/gz_plugins/optical_flow/optical_flow.cmake +++ b/boards/modalai/voxl2/cmake/package.cmake @@ -1,6 +1,6 @@ ############################################################################ # -# Copyright (c) 2025 PX4 Development Team. All rights reserved. +# Copyright (c) 2024 PX4 Development Team. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -31,25 +31,33 @@ # ############################################################################ -include(ExternalProject) -find_package(OpenCV REQUIRED) +# VOXL2 board-specific CPack overrides +# Loaded after cmake/package.cmake sets up CPack defaults -if(NOT TARGET OpticalFlow) - set(OPTICAL_FLOW_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/OpticalFlow/install") +# Derive Debian-compatible version from git tag (e.g. v1.17.0-alpha1-42-gabcdef -> 1.17.0~alpha1.42.gabcdef) +string(REGEX REPLACE "^v" "" _deb_ver "${PX4_GIT_TAG}") +string(REGEX REPLACE "-" "~" _deb_ver "${_deb_ver}" ) +string(REGEX REPLACE "~([0-9]+)~" ".\\1." _deb_ver "${_deb_ver}") - ExternalProject_Add(OpticalFlow - GIT_REPOSITORY https://github.com/PX4/PX4-OpticalFlow.git - GIT_TAG master - PREFIX ${CMAKE_BINARY_DIR}/OpticalFlow - INSTALL_DIR ${OPTICAL_FLOW_INSTALL_PREFIX} - CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${OPTICAL_FLOW_INSTALL_PREFIX} - BUILD_BYPRODUCTS - ${OPTICAL_FLOW_INSTALL_PREFIX}/lib/libOpticalFlow${CMAKE_SHARED_LIBRARY_SUFFIX} - UPDATE_DISCONNECTED ON - BUILD_ALWAYS OFF - STEP_TARGETS build - ) +# VOXL2 is always aarch64 regardless of build host +set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "arm64") +set(CPACK_DEBIAN_PACKAGE_NAME "voxl-px4") +set(CPACK_DEBIAN_FILE_NAME "voxl-px4_${_deb_ver}_arm64.deb") +set(CPACK_PACKAGING_INSTALL_PREFIX "/usr") +set(CPACK_INSTALL_PREFIX "/usr") +set(CPACK_SET_DESTDIR true) - set(OpticalFlow_INCLUDE_DIRS ${OPTICAL_FLOW_INSTALL_PREFIX}/include CACHE INTERNAL "") - set(OpticalFlow_LIBS ${OPTICAL_FLOW_INSTALL_PREFIX}/lib/libOpticalFlow${CMAKE_SHARED_LIBRARY_SUFFIX} CACHE INTERNAL "") -endif() +set(CPACK_DEBIAN_PACKAGE_DEPENDS "voxl-reset-slpi(>=0.0.3), libfc-sensor (>=1.0.10), voxl-px4-params (>=0.3.10), voxl3-system-image(>=0.0.2) | voxl2-system-image(>=1.5.4) | rb5-system-image(>=1.6.2), modalai-slpi(>=1.2.3) | modalai-adsp(>=1.0.7)") +set(CPACK_DEBIAN_PACKAGE_CONFLICTS "px4-rb5-flight") +set(CPACK_DEBIAN_PACKAGE_REPLACES "px4-rb5-flight") +set(CPACK_DEBIAN_PACKAGE_DESCRIPTION "PX4 Autopilot for ModalAI VOXL2") +set(CPACK_DEBIAN_PACKAGE_MAINTAINER "ModalAI ") + +# Disable shlibdeps for cross-compiled boards +set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS OFF) + +set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA + "${PX4_BOARD_DIR}/debian/postinst;${PX4_BOARD_DIR}/debian/prerm") + +# Install rules are in boards/modalai/voxl2/cmake/install.cmake, +# included from platforms/posix/CMakeLists.txt where the px4 target exists. diff --git a/boards/modalai/voxl2/companion_targets b/boards/modalai/voxl2/companion_targets new file mode 100644 index 0000000000..f637aaf1fa --- /dev/null +++ b/boards/modalai/voxl2/companion_targets @@ -0,0 +1,3 @@ +# Companion processor targets - built automatically by the parent (default) target +# These are excluded from CI target lists to avoid redundant builds +modalai_voxl2_slpi diff --git a/boards/modalai/voxl2/debian/postinst b/boards/modalai/voxl2/debian/postinst new file mode 100755 index 0000000000..dbe4798612 --- /dev/null +++ b/boards/modalai/voxl2/debian/postinst @@ -0,0 +1,36 @@ +#!/usr/bin/env bash +set -e + +# Create px4-* symlinks from px4-alias.sh +# The alias format is: alias ='px4- --instance $px4_instance' +# We extract the px4- command name and symlink it to the px4 binary +if [ -f /usr/bin/px4-alias.sh ]; then + grep "^alias " /usr/bin/px4-alias.sh | \ + sed -n "s/.*'\(px4-[a-zA-Z0-9_]*\).*/\1/p" | while read cmd; do + ln -sf px4 "/usr/bin/${cmd}" + done +fi + +# Detect platform and generate DSP test signature if needed +if ! /bin/ls /usr/lib/rfsa/adsp/testsig-*.so &> /dev/null; then + echo "[INFO] Generating DSP test signature..." + if [ -f /share/modalai/qcs6490-slpi-test-sig/generate-test-sig.sh ]; then + /share/modalai/qcs6490-slpi-test-sig/generate-test-sig.sh || true + elif [ -f /share/modalai/qrb5165-slpi-test-sig/generate-test-sig.sh ]; then + /share/modalai/qrb5165-slpi-test-sig/generate-test-sig.sh || true + else + echo "[WARNING] Could not find DSP signature generation script" + fi +fi + +# Create required data directories +mkdir -p /data/px4/param +mkdir -p /data/px4/etc/extras +chown -R root:root /data/px4 + +# Reload systemd if available +if command -v systemctl > /dev/null 2>&1; then + systemctl daemon-reload +fi + +echo "voxl-px4 installed successfully" diff --git a/boards/modalai/voxl2/debian/prerm b/boards/modalai/voxl2/debian/prerm new file mode 100755 index 0000000000..fdfc7c89a9 --- /dev/null +++ b/boards/modalai/voxl2/debian/prerm @@ -0,0 +1,14 @@ +#!/usr/bin/env bash +set -e + +# Stop voxl-px4 service if running +if command -v systemctl > /dev/null 2>&1; then + systemctl stop voxl-px4 2>/dev/null || true +fi + +# Remove px4-* symlinks +for f in /usr/bin/px4-*; do + if [ -L "$f" ] && [ "$(readlink "$f")" = "px4" ]; then + rm -f "$f" + fi +done diff --git a/boards/modalai/voxl2/debian/voxl-px4.service b/boards/modalai/voxl2/debian/voxl-px4.service new file mode 100644 index 0000000000..084cb2f9d6 --- /dev/null +++ b/boards/modalai/voxl2/debian/voxl-px4.service @@ -0,0 +1,13 @@ +[Unit] +Description=PX4 Autopilot for VOXL2 +After=sscrpcd.service +Requires=sscrpcd.service + +[Service] +ExecStartPre=/bin/sleep 2 +ExecStart=/usr/bin/voxl-px4 +ExecStopPost=/usr/bin/voxl-reset-slpi -t 10000 +Restart=on-failure + +[Install] +WantedBy=multi-user.target diff --git a/boards/modalai/voxl2/default.px4board b/boards/modalai/voxl2/default.px4board index 63023ff4b9..ab95da688d 100644 --- a/boards/modalai/voxl2/default.px4board +++ b/boards/modalai/voxl2/default.px4board @@ -3,6 +3,8 @@ CONFIG_BOARD_LINUX_TARGET=y CONFIG_BOARD_TOOLCHAIN="aarch64-linux-gnu" CONFIG_BOARD_ROOT_PATH="/data/px4" CONFIG_DRIVERS_ACTUATORS_VOXL_ESC=y +CONFIG_DRIVERS_BAROMETER_DPS310=y +CONFIG_DRIVERS_BAROMETER_INVENSENSE_ICP101XX=y CONFIG_DRIVERS_GPS=y CONFIG_DRIVERS_OSD_MSP_OSD=y CONFIG_DRIVERS_QSHELL_POSIX=y @@ -25,5 +27,6 @@ CONFIG_SYSTEMCMDS_PERF=y CONFIG_SYSTEMCMDS_TOPIC_LISTENER=y CONFIG_SYSTEMCMDS_UORB=y CONFIG_SYSTEMCMDS_VER=y +CONFIG_SYSTEMCMDS_REBOOT=y CONFIG_ORB_COMMUNICATOR=y CONFIG_PARAM_PRIMARY=y diff --git a/boards/modalai/voxl2/scripts/build-apps.sh b/boards/modalai/voxl2/scripts/build-apps.sh index 28b6a8d99b..aecb11d1df 100755 --- a/boards/modalai/voxl2/scripts/build-apps.sh +++ b/boards/modalai/voxl2/scripts/build-apps.sh @@ -1,6 +1,6 @@ -#!/bin/bash +#!/usr/bin/env bash -echo "*** Starting apps processor build ***" +echo "*** Starting unified VOXL2 build (apps + SLPI) ***" source /home/build-env.sh @@ -8,4 +8,4 @@ make modalai_voxl2 cat build/modalai_voxl2_default/src/lib/version/build_git_version.h -echo "*** End of apps processor build ***" +echo "*** End of unified VOXL2 build ***" diff --git a/boards/modalai/voxl2/scripts/build-deps.sh b/boards/modalai/voxl2/scripts/build-deps.sh deleted file mode 100755 index fe7f854868..0000000000 --- a/boards/modalai/voxl2/scripts/build-deps.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash - -cd boards/modalai/voxl2/libfc-sensor-api -rm -fR build -mkdir build -cd build -CC=/home/4.1.0.4/tools/linaro64/bin/aarch64-linux-gnu-gcc cmake .. -make -cd ../../../../.. diff --git a/boards/modalai/voxl2/scripts/build-pkg.sh b/boards/modalai/voxl2/scripts/build-pkg.sh new file mode 100755 index 0000000000..589618cb87 --- /dev/null +++ b/boards/modalai/voxl2/scripts/build-pkg.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +echo "*** Starting unified VOXL2 build (apps + SLPI) ***" + +source /home/build-env.sh + +make modalai_voxl2_deb + +cat build/modalai_voxl2_default/src/lib/version/build_git_version.h + +echo "*** End of unified VOXL2 build ***" diff --git a/boards/modalai/voxl2/scripts/build-slpi.sh b/boards/modalai/voxl2/scripts/build-slpi.sh index cbe9ef6ba9..f9a3be7d21 100755 --- a/boards/modalai/voxl2/scripts/build-slpi.sh +++ b/boards/modalai/voxl2/scripts/build-slpi.sh @@ -1,9 +1,9 @@ -#!/bin/bash +#!/usr/bin/env bash echo "*** Starting qurt slpi build ***" source /home/build-env.sh -make modalai_voxl2-slpi +make modalai_voxl2_slpi echo "*** End of qurt slpi build ***" diff --git a/boards/modalai/voxl2/scripts/clean.sh b/boards/modalai/voxl2/scripts/clean.sh index 80832b0b70..8a4a9dff66 100755 --- a/boards/modalai/voxl2/scripts/clean.sh +++ b/boards/modalai/voxl2/scripts/clean.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Clean out the build artifacts # source /home/build-env.sh diff --git a/boards/modalai/voxl2/scripts/install-voxl-bins.sh b/boards/modalai/voxl2/scripts/install-voxl-bins.sh index d58627bcf4..1d917255f9 100755 --- a/boards/modalai/voxl2/scripts/install-voxl-bins.sh +++ b/boards/modalai/voxl2/scripts/install-voxl-bins.sh @@ -1,7 +1,7 @@ -#!/bin/bash +#!/usr/bin/env bash # Push slpi image to voxl2 -adb push build/modalai_voxl2-slpi_default/platforms/qurt/libpx4.so /usr/lib/rfsa/adsp +adb push build/modalai_voxl2_slpi/platforms/qurt/libpx4.so /usr/lib/rfsa/adsp # Push apps processor image to voxl2 adb push build/modalai_voxl2_default/bin/px4 /usr/bin diff --git a/boards/modalai/voxl2/scripts/install-voxl.sh b/boards/modalai/voxl2/scripts/install-voxl.sh index a908b0a835..e4c6af02bd 100755 --- a/boards/modalai/voxl2/scripts/install-voxl.sh +++ b/boards/modalai/voxl2/scripts/install-voxl.sh @@ -1,7 +1,7 @@ -#!/bin/bash +#!/usr/bin/env bash # Push slpi image to voxl2 -adb push build/modalai_voxl2-slpi_default/platforms/qurt/libpx4.so /usr/lib/rfsa/adsp +adb push build/modalai_voxl2_slpi/platforms/qurt/libpx4.so /usr/lib/rfsa/adsp # Push apps processor image to voxl2 adb push build/modalai_voxl2_default/bin/px4 /usr/bin @@ -12,16 +12,19 @@ adb push boards/modalai/voxl2/target/voxl-px4 /usr/bin adb push boards/modalai/voxl2/target/voxl-px4-start /usr/bin adb push boards/modalai/voxl2/target/voxl-px4-hitl /usr/bin adb push boards/modalai/voxl2/target/voxl-px4-hitl-start /usr/bin +adb push boards/modalai/voxl2/target/voxl-px4-sih-start /usr/bin adb shell chmod a+x /usr/bin/px4-alias.sh adb shell chmod a+x /usr/bin/voxl-px4 adb shell chmod a+x /usr/bin/voxl-px4-start adb shell chmod a+x /usr/bin/voxl-px4-hitl adb shell chmod a+x /usr/bin/voxl-px4-hitl-start +adb shell chmod a+x /usr/bin/voxl-px4-sih-start # Push configuration file adb shell mkdir -p /etc/modalai adb push boards/modalai/voxl2/target/voxl-px4-fake-imu-calibration.config /etc/modalai adb push boards/modalai/voxl2/target/voxl-px4-hitl-set-default-parameters.config /etc/modalai +adb push boards/modalai/voxl2/target/voxl-px4-sih-set-default-parameters.config /etc/modalai # Make sure to setup all of the needed px4 aliases. adb shell "cd /usr/bin; /bin/ln -f -s px4 px4-accelsim" @@ -65,7 +68,6 @@ adb shell "cd /usr/bin; /bin/ln -f -s px4 px4-logger" adb shell "cd /usr/bin; /bin/ln -f -s px4 px4-manual_control" adb shell "cd /usr/bin; /bin/ln -f -s px4 px4-mavlink" adb shell "cd /usr/bin; /bin/ln -f -s px4 px4-mavlink_bridge" -adb shell "cd /usr/bin; /bin/ln -f -s px4 px4-mavlink_tests" adb shell "cd /usr/bin; /bin/ln -f -s px4 px4-mb12xx" adb shell "cd /usr/bin; /bin/ln -f -s px4 px4-mc_att_control" adb shell "cd /usr/bin; /bin/ln -f -s px4 px4-mc_pos_control" @@ -128,6 +130,13 @@ adb shell "cd /usr/bin; /bin/ln -f -s px4 px4-flight_mode_manager" adb shell "cd /usr/bin; /bin/ln -f -s px4 px4-imu_server" adb shell "cd /usr/bin; /bin/ln -f -s px4 px4-apps_sbus" adb shell "cd /usr/bin; /bin/ln -f -s px4 px4-voxl_save_cal_params" +adb shell "cd /usr/bin; /bin/ln -f -s px4 px4-vehicle_air_data_bridge" +adb shell "cd /usr/bin; /bin/ln -f -s px4 px4-sensor_baro_bridge" +adb shell "cd /usr/bin; /bin/ln -f -s px4 px4-sensor_imu_raw_bridge" +adb shell "cd /usr/bin; /bin/ln -f -s px4 px4-dps310" +adb shell "cd /usr/bin; /bin/ln -f -s px4 px4-icp101xx" +adb shell "cd /usr/bin; /bin/ln -f -s px4 px4-vehicle_local_position_bridge" +adb shell "cd /usr/bin; /bin/ln -f -s px4 px4-sih_vio_bridge" # Make sure any required directories exist adb shell "/bin/mkdir -p /data/px4/param" diff --git a/boards/modalai/voxl2/scripts/patch-gazebo.sh b/boards/modalai/voxl2/scripts/patch-gazebo.sh index bb31b99b12..7505c0ae4f 100755 --- a/boards/modalai/voxl2/scripts/patch-gazebo.sh +++ b/boards/modalai/voxl2/scripts/patch-gazebo.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash cd Tools/simulation/gazebo-classic/sitl_gazebo-classic/src patch < ../../../../../boards/modalai/voxl2/gazebo-docker/patch/mavlink_interface.patch diff --git a/boards/modalai/voxl2/scripts/run-docker.sh b/boards/modalai/voxl2/scripts/run-docker.sh index 4df40769de..e1ca48b19a 100755 --- a/boards/modalai/voxl2/scripts/run-docker.sh +++ b/boards/modalai/voxl2/scripts/run-docker.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Run this from the px4 project top level directory docker run -it --rm -v `pwd`:/usr/local/workspace rb5-flight-px4-build-docker diff --git a/boards/modalai/voxl2/scripts/voxl-configure-px4 b/boards/modalai/voxl2/scripts/voxl-configure-px4 new file mode 100755 index 0000000000..8632f646d9 --- /dev/null +++ b/boards/modalai/voxl2/scripts/voxl-configure-px4 @@ -0,0 +1,270 @@ +#!/usr/bin/env bash +################################################################################ +# Copyright 2023 ModalAI Inc. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. +# +# 4. The Software is used solely in conjunction with devices provided by +# ModalAI Inc. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +################################################################################ + +NAME="voxl-px4" +SERVICE_FILE="${NAME}.service" +CONFIG_FILE="/etc/modalai/${NAME}.conf" +USER=$(whoami) + +print_usage () { + echo "" + echo "Config script for voxl-px4" + echo "wizard coming soon. For now, call with one of the following args:" + echo "" + echo "" + echo "voxl-configure-px4 disable" + echo "voxl-configure-px4 enable" + echo "voxl-configure-px4 factory_enable" + echo "voxl-configure-px4 d0005_v2" + echo "voxl-configure-px4 starling_v2" + echo "voxl-configure-px4 d0006_v1" + echo "voxl-configure-px4 sentinel_v1" + echo "voxl-configure-px4 d0008" + echo "voxl-configure-px4 fpv_revB" + echo "voxl-configure-px4 d0010" + echo "voxl-configure-px4 d0011" + echo "voxl-configure-px4 d0013" + echo "voxl-configure-px4 d0015" + echo "voxl-configure-px4 voxl2-mini" + echo "" + echo "show this help message:" + echo "voxl-configure-px4 help" + echo "" + echo "Use voxl-configure-px4 factory_enable to configure default values" + +} + +## set most parameters which don't have quotes in json +set_param () { + if [ "$#" != "2" ]; then + echo "set_param expected 2 args" + exit 1 + fi + + var=$1 + val=$2 + + sed -i "/$var=/c $var=$val" ${CONFIG_FILE} +} + +disable_service_and_exit () { + echo "disabling ${NAME} systemd service" + systemctl disable ${SERVICE_FILE} + echo "stopping ${NAME} systemd service" + systemctl stop ${SERVICE_FILE} + echo "Done configuring ${NAME}" + exit 0 +} + +enable_service_and_exit () { + echo "enabling ${NAME} systemd service" + systemctl enable ${SERVICE_FILE} + echo "Done configuring ${NAME}" + exit 0 +} + +reset_config_file_to_default () { + echo "wiping old config file" + rm -rf ${CONFIG_FILE} + + # create config description section on top of file + echo -e "#!/bin/bash\n#\n# voxl-px4 Configuration File\ + \n#\ + \n# AIRFRAME:\ + \n# Tell PX4 which AIRFRAME to use.\ + \n# Options include: [MULTICOPTER, FIXED_WING]\ + \n#\ + \n# GPS:\ + \n# Tell PX4 which GPS to use. If there is no GPS unit use NONE. Otherwise\ + \n# choose AUTODETECT and the startup script will attempt to automatically\ + \n# configure the GPS, magnetometer, and status LED\ + \n# Options include: [NONE, AUTODETECT]\ + \n#\ + \n# RC:\ + \n# Tell PX4 which RC transmitter to use. \ + \n# Use EXTERNAL when getting RC control from external Mavlink messages (e.g Via QGC)\ + \n# Options include: [SPEKTRUM, CRSF_MAV, CRSF_RAW, M0065_SBUS, EXTERNAL, FAKE_RC_INPUT]\ + \n#\ + \n# ESC:\ + \n# Tell PX4 which type of ESC to use. \ + \n# Options include: [VOXL_ESC, VOXL2_IO_PWM_ESC]\ + \n#\ + \n# POWER_MANAGER:\ + \n# Tell PX4 which power manager to use. \ + \n# Use NONE for ModalAI Mini-ESC since the ESC driver handles PM.\ + \n# Use EXTERNAL when not using the ModalAI APM power manager to power the board\ + \n# This also just disables the voxlpm driver, same as the NONE option\ + \n# Options include: [VOXLPM, EXTERNAL, NONE]\ + \n#\ + \n# AIRSPEED_SENSOR:\ + \n# Tell PX4 which airspeed sensor peripheral to use. \ + \n# Note: The sensor will be started on external I2C port on voxl2\ + \n# Options include: [NONE, MS4525DO]\ + \n#\ + \n# DISTANCE_SENSOR:\ + \n# Tell PX4 which distance sensor peripheral to use. \ + \n# Note: The sensor will be started on the RC port so it is only\ + \n# really possible to use it when using external RC.\ + \n# Options include: [NONE, LIGHTWARE_SF000]\ + \n#\ + \n# OSD:\ + \n# Tell PX4 whether to enable OSD (on-screen display). \ + \n# Options include: [ENABLE, DISABLE]\ + \n#\ + \n# DAEMON_MODE:\ + \n# Tell PX4 whether to enable daemon mode. \ + \n# Options include: [ENABLE, DISABLE]\ + \n#\ + \n# SENSOR_CAL:\ + \n# Tell PX4 where to source sensor calibration information. \ + \n# Options include: [ACTUAL, FAKE]\ + \n#\ + \n# ARTIFACT_MODE:\ + \n# Do not allow artifacts to be saved to disk. Will not start the logging \ + \n# module, will delete any current log files, and will delete the data manager file. \ + \n# Options include: [ENABLE, DISABLE]\ + \n#\ + \n# EXTRA_STEPS:\ + \n# Optional field that allows a user to define custom commands to be run by PX4 on boot. \ + \n# Must be a valid bash array as seen below \ + \n# Example: EXTRA_STEPS=( \"qshell gps start\" \"qshell commander mode manual\" ) \ + \n#\ + \n#" > $CONFIG_FILE + + echo "AIRFRAME=MULTICOPTER" >> $CONFIG_FILE + echo "GPS=NONE" >> $CONFIG_FILE + echo "RC=SPEKTRUM" >> $CONFIG_FILE + echo "ESC=VOXL_ESC" >> $CONFIG_FILE + echo "POWER_MANAGER=VOXLPM" >> $CONFIG_FILE + echo "AIRSPEED_SENSOR=NONE" >> $CONFIG_FILE + echo "DISTANCE_SENSOR=NONE" >> $CONFIG_FILE + echo "OSD=DISABLE" >> $CONFIG_FILE + echo "DAEMON_MODE=ENABLE" >> $CONFIG_FILE + echo "SENSOR_CAL=ACTUAL" >> $CONFIG_FILE + echo "ARTIFACT_MODE=DISABLE" >> $CONFIG_FILE + echo "EXTRA_STEPS=()" >> $CONFIG_FILE +} + +################################################################################ +## actual start of execution, handle optional arguments first +################################################################################ + +## sanity checks +if [ "${USER}" != "root" ]; then + echo "Please run this script as root" + exit 1 +fi + +## convert argument to lower case for robustness +arg=$(echo "$1" | tr '[:upper:]' '[:lower:]') + +## parse arguments +case ${arg} in + "") + echo "ERROR no argument given" + print_usage + exit 1 + ;; + "h"|"-h"|"help"|"--help") + print_usage + exit 0 + ;; + "disable") + disable_service_and_exit + ;; + "enable") + enable_service_and_exit + ;; + "factory_enable") + reset_config_file_to_default + enable_service_and_exit + ;; + "crsf_gps_apm"|"d0005_v2"|"starling_v2"|"d0006_v2"|"sentinel_v2") + reset_config_file_to_default + set_param GPS AUTODETECT + set_param RC CRSF_RAW + enable_service_and_exit + ;; + "spektrum_gps_apm"|"d0006_v1"|"sentinel_v1") + ## First revision Sentinel with Holybro GPS and Spektrum Radio + reset_config_file_to_default + set_param GPS AUTODETECT + set_param RC SPEKTRUM + enable_service_and_exit + ;; + "d0008"|"fpv_revb") + reset_config_file_to_default + set_param GPS NONE + set_param RC CRSF_RAW + set_param OSD ENABLE + enable_service_and_exit + ;; + "crsf_nogps_apm"|"d0010") + ## Starling 1 with no GPS + reset_config_file_to_default + set_param GPS NONE + set_param RC CRSF_RAW + enable_service_and_exit + ;; + "crsf_gps_noapm"|"d0011"|"voxl2-mini") + reset_config_file_to_default + set_param GPS AUTODETECT + set_param RC CRSF_RAW + set_param POWER_MANAGER NONE + enable_service_and_exit + ;; + "crsf_nogps_noapm"|"d0013") + reset_config_file_to_default + set_param GPS NONE + set_param RC CRSF_RAW + set_param POWER_MANAGER NONE + enable_service_and_exit + ;; + "d0015") + reset_config_file_to_default + set_param GPS AUTODETECT + set_param ESC VOXL2_IO_PWM_ESC + set_param RC CRSF_RAW + set_param AIRFRAME FIXED_WING + set_param AIRSPEED_SENSOR MS4525DO + set_param DISTANCE_SENSOR LIGHTWARE_SF000 + enable_service_and_exit + ;; + *) + echo "invalid option: $arg" + exit 1 +esac + +## should never get here +exit 1 diff --git a/boards/modalai/voxl2-slpi/default.px4board b/boards/modalai/voxl2/slpi.px4board similarity index 55% rename from boards/modalai/voxl2-slpi/default.px4board rename to boards/modalai/voxl2/slpi.px4board index 6473ff63f8..62dfebe2ff 100644 --- a/boards/modalai/voxl2-slpi/default.px4board +++ b/boards/modalai/voxl2/slpi.px4board @@ -1,19 +1,45 @@ CONFIG_PLATFORM_QURT=y CONFIG_BOARD_TOOLCHAIN="qurt" +# Disable modules from default.px4board that are apps-only +CONFIG_BOARD_LINUX_TARGET=n +CONFIG_DRIVERS_OSD_MSP_OSD=n +CONFIG_DRIVERS_QSHELL_POSIX=n +CONFIG_DRIVERS_RC_INPUT=n +CONFIG_MODULES_DATAMAN=n +CONFIG_MODULES_LOGGER=n +CONFIG_MODULES_MAVLINK=n +CONFIG_MODULES_MUORB_APPS=n +CONFIG_MODULES_NAVIGATOR=n +CONFIG_MODULES_UXRCE_DDS_CLIENT=n +CONFIG_SYSTEMCMDS_ACTUATOR_TEST=n +CONFIG_SYSTEMCMDS_BSONDUMP=n +CONFIG_SYSTEMCMDS_I2CDETECT=y +CONFIG_SYSTEMCMDS_PERF=n +CONFIG_SYSTEMCMDS_TOPIC_LISTENER=n +CONFIG_SYSTEMCMDS_VER=n +CONFIG_SYSTEMCMDS_REBOOT=n +CONFIG_PARAM_PRIMARY=n CONFIG_DRIVERS_ACTUATORS_VOXL_ESC=y CONFIG_DRIVERS_BAROMETER_INVENSENSE_ICP101XX=y CONFIG_DRIVERS_BAROMETER_MS5611=y CONFIG_DRIVERS_BAROMETER_BMP280=y CONFIG_DRIVERS_BAROMETER_BMP388=y +CONFIG_DRIVERS_BAROMETER_DPS310=y +CONFIG_DRIVERS_DIFFERENTIAL_PRESSURE_MS4525DO=y CONFIG_DRIVERS_DISTANCE_SENSOR_VL53L0X=y CONFIG_DRIVERS_DISTANCE_SENSOR_VL53L1X=y CONFIG_DRIVERS_GPS=y +CONFIG_DRIVERS_IMU_BOSCH_BMI270=y CONFIG_DRIVERS_IMU_INVENSENSE_ICM42688P=y +CONFIG_DRIVERS_BAROMETER_DPS310=y CONFIG_DRIVERS_LIGHTS_RGBLED_NCP5623C=y CONFIG_DRIVERS_MAGNETOMETER_ISENTEK_IST8308=y CONFIG_DRIVERS_MAGNETOMETER_ISENTEK_IST8310=y CONFIG_DRIVERS_MAGNETOMETER_QMC5883L=y +CONFIG_DRIVERS_MAGNETOMETER_ST_IIS2MDC=y CONFIG_DRIVERS_POWER_MONITOR_VOXLPM=y +CONFIG_DRIVERS_POWER_MONITOR_INA226=y +CONFIG_DRIVERS_POWER_MONITOR_INA228=y CONFIG_DRIVERS_QSHELL_QURT=y CONFIG_DRIVERS_RC_CRSF_RC=y CONFIG_DRIVERS_VOXL2_IO=y @@ -26,6 +52,11 @@ CONFIG_MODULES_LOAD_MON=y CONFIG_MODULES_MANUAL_CONTROL=y CONFIG_MODULES_MC_ATT_CONTROL=y CONFIG_MODULES_MC_AUTOTUNE_ATTITUDE_CONTROL=y +CONFIG_MODULES_FW_POS_CONTROL=y +CONFIG_MODULES_FW_ATT_CONTROL=y +CONFIG_MODULES_FW_RATE_CONTROL=y +CONFIG_MODULES_FW_AUTOTUNE_ATTITUDE_CONTROL=y +CONFIG_MODULES_AIRSPEED_SELECTOR=y CONFIG_MODULES_MC_HOVER_THRUST_ESTIMATOR=y CONFIG_MODULES_MC_POS_CONTROL=y CONFIG_MODULES_MC_RATE_CONTROL=y @@ -33,6 +64,7 @@ CONFIG_MODULES_MUORB_SLPI=y CONFIG_MODULES_RC_UPDATE=y CONFIG_MODULES_SENSORS=y CONFIG_MODULES_SIMULATION_PWM_OUT_SIM=y +CONFIG_MODULES_SIMULATION_SIMULATOR_SIH=y CONFIG_SYSTEMCMDS_PARAM=y CONFIG_SYSTEMCMDS_UORB=y CONFIG_ORB_COMMUNICATOR=y diff --git a/boards/modalai/voxl2/src/CMakeLists.txt b/boards/modalai/voxl2/src/CMakeLists.txt index f783825128..ed492407d2 100644 --- a/boards/modalai/voxl2/src/CMakeLists.txt +++ b/boards/modalai/voxl2/src/CMakeLists.txt @@ -1,6 +1,6 @@ ############################################################################ # -# Copyright (c) 2022 ModalAI, Inc. All rights reserved. +# Copyright (c) 2022-2026 ModalAI, Inc. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -31,19 +31,83 @@ # ############################################################################ -# Need to make sure that the Linux processor on VOXL2 -# knows about all parameters since it is acting as the -# parameter server for other processors that may define -# parameters that it doesn't normally know about. +# Both processors need to know about all parameters since modules are +# split across processors and may reference parameters from the other side. set(DISABLE_PARAMS_MODULE_SCOPING TRUE PARENT_SCOPE) -add_library(drivers_board +set(SRCS board_config.h init.c - ) +) -# Add custom drivers -add_subdirectory(${PX4_BOARD_DIR}/src/drivers/apps_sbus) +if("${PX4_PLATFORM}" STREQUAL "qurt") + list(APPEND SRCS + i2c_qurt.cpp + spi_qurt.cpp + ) +elseif("${PX4_PLATFORM}" STREQUAL "posix") + list(APPEND SRCS + boardctl.c + i2c_posix.cpp + spi_posix.cpp + ) +endif() -# Add custom modules -add_subdirectory(${PX4_BOARD_DIR}/src/modules/voxl_save_cal_params) +add_library(drivers_board ${SRCS}) + +if("${PX4_PLATFORM}" STREQUAL "qurt") + # Generate MAVLink common headers for SLPI drivers (dsp_hitl, mavlink_rc_in) + # Replicates the generation from src/modules/mavlink/CMakeLists.txt so the + # SLPI build is self-contained and does not depend on voxl2-default. + set(MAVLINK_GIT_DIR "${PX4_SOURCE_DIR}/src/modules/mavlink/mavlink") + set(MAVLINK_LIBRARY_DIR "${CMAKE_BINARY_DIR}/mavlink") + + px4_add_git_submodule(TARGET git_mavlink_v2_slpi PATH "${MAVLINK_GIT_DIR}") + + add_custom_command( + OUTPUT ${MAVLINK_LIBRARY_DIR}/common/common.h + COMMAND ${PYTHON_EXECUTABLE} ${MAVLINK_GIT_DIR}/pymavlink/tools/mavgen.py + --lang C --wire-protocol 2.0 + --output ${MAVLINK_LIBRARY_DIR} + ${MAVLINK_GIT_DIR}/message_definitions/v1.0/common.xml + > ${CMAKE_BINARY_DIR}/mavgen_common.log + DEPENDS + git_mavlink_v2_slpi + ${MAVLINK_GIT_DIR}/pymavlink/tools/mavgen.py + ${MAVLINK_GIT_DIR}/message_definitions/v1.0/common.xml + COMMENT "Generating MAVLink common headers for SLPI" + ) + add_custom_target(mavlink_common_generate DEPENDS ${MAVLINK_LIBRARY_DIR}/common/common.h) + + add_library(mavlink_common_headers INTERFACE) + add_dependencies(mavlink_common_headers mavlink_common_generate) + target_compile_options(mavlink_common_headers INTERFACE -Wno-address-of-packed-member -Wno-cast-align) + target_include_directories(mavlink_common_headers INTERFACE + ${MAVLINK_LIBRARY_DIR} + ${MAVLINK_LIBRARY_DIR}/common + ) + + # Add custom drivers for SLPI + add_subdirectory(${PX4_BOARD_DIR}/src/drivers/qurt/rc_controller rc_controller) + add_subdirectory(${PX4_BOARD_DIR}/src/drivers/qurt/mavlink_rc_in mavlink_rc_in) + add_subdirectory(${PX4_BOARD_DIR}/src/drivers/qurt/spektrum_rc spektrum_rc) + add_subdirectory(${PX4_BOARD_DIR}/src/drivers/qurt/ghst_rc ghst_rc) + add_subdirectory(${PX4_BOARD_DIR}/src/drivers/qurt/dsp_hitl dsp_hitl) + add_subdirectory(${PX4_BOARD_DIR}/src/drivers/qurt/dsp_sbus dsp_sbus) + add_subdirectory(${PX4_BOARD_DIR}/src/drivers/qurt/elrs_led elrs_led) + +elseif("${PX4_PLATFORM}" STREQUAL "posix") + # Add custom drivers + add_subdirectory(${PX4_BOARD_DIR}/src/drivers/posix/apps_sbus apps_sbus) + + # Add custom libraries + add_subdirectory(${PX4_BOARD_DIR}/src/lib/mpa mpa) + + # Add custom modules + add_subdirectory(${PX4_BOARD_DIR}/src/modules/voxl_save_cal_params voxl_save_cal_params) + add_subdirectory(${PX4_BOARD_DIR}/src/modules/vehicle_air_data_bridge vehicle_air_data_bridge) + add_subdirectory(${PX4_BOARD_DIR}/src/modules/sensor_baro_bridge sensor_baro_bridge) + add_subdirectory(${PX4_BOARD_DIR}/src/modules/vehicle_local_position_bridge vehicle_local_position_bridge) + add_subdirectory(${PX4_BOARD_DIR}/src/modules/sih_vio_bridge sih_vio_bridge) + add_subdirectory(${PX4_BOARD_DIR}/src/modules/sensor_imu_raw_bridge sensor_imu_raw_bridge) +endif() diff --git a/boards/modalai/voxl2/src/board_config.h b/boards/modalai/voxl2/src/board_config.h index 9bc7247e9d..4761b73b4a 100644 --- a/boards/modalai/voxl2/src/board_config.h +++ b/boards/modalai/voxl2/src/board_config.h @@ -1,6 +1,6 @@ /**************************************************************************** * - * Copyright (c) 2022 ModalAI, Inc. All rights reserved. + * Copyright (c) 2022-2026 ModalAI, Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -39,12 +39,47 @@ #pragma once -#define BOARD_HAS_NO_RESET +#define CONFIG_BOARDCTL_RESET #define BOARD_HAS_NO_BOOTLOADER -// Define this as empty since there are no I2C buses +/* + * SPI buses (shared) + */ +#define CONFIG_SPI 1 +#define BOARD_SPI_BUS_MAX_BUS_ITEMS 1 + +#ifdef __PX4_QURT +/* + * QURT (DSP) specific defines + */ + +#define CONFIG_I2C 1 +#define PX4_NUMBER_I2C_BUSES 4 + +#include +#include + +#define VOXL_ESC_DEFAULT_PORT "2" +#define GHST_RC_DEFAULT_PORT "7" +#define VOXL2_IO_DEFAULT_PORT "2" + +/* M0065 PWM */ +#define DIRECT_PWM_OUTPUT_CHANNELS 4 +#define MAX_IO_TIMERS 3 + +#endif /* __PX4_QURT */ + +#if defined(__PX4_POSIX) && !defined(__PX4_QURT) +/* + * POSIX (apps processor) specific defines + */ + +/* I2C clock init not required on Linux */ #define BOARD_I2C_BUS_CLOCK_INIT +#define CONFIG_I2C 1 +#define PX4_NUMBER_I2C_BUSES 1 + #include #include @@ -53,3 +88,5 @@ #define VOXL_ESC_DEFAULT_PORT "2" #define VOXL2_IO_DEFAULT_PORT "2" + +#endif /* __PX4_POSIX && !__PX4_QURT */ diff --git a/boards/cuav/x25-evo/pwm_voltage/parameters.c b/boards/modalai/voxl2/src/boardctl.c similarity index 86% rename from boards/cuav/x25-evo/pwm_voltage/parameters.c rename to boards/modalai/voxl2/src/boardctl.c index 728bcc7a55..2af66716fc 100644 --- a/boards/cuav/x25-evo/pwm_voltage/parameters.c +++ b/boards/modalai/voxl2/src/boardctl.c @@ -1,6 +1,6 @@ /**************************************************************************** * - * Copyright (c) 2025 PX4 Development Team. All rights reserved. + * Copyright (c) 2025-2026 ModalAI, Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -31,13 +31,16 @@ * ****************************************************************************/ -/** - * Control PWM output voltage - * - * @value 0 3.3V - * @value 1 5.0V - * - * @reboot_required true - * @group PWM Outputs - */ -PARAM_DEFINE_INT32(PWM_VOLT_SEL, 0); +#include +#include +#include + +#include "fc_sensor.h" + +int boardctl(unsigned int cmd, uintptr_t arg) +{ + fc_sensor_kill_slpi(); + sleep(2); + exit(-1); + return 0; +} diff --git a/boards/modalai/voxl2/src/drivers/apps_sbus/CMakeLists.txt b/boards/modalai/voxl2/src/drivers/posix/apps_sbus/CMakeLists.txt similarity index 100% rename from boards/modalai/voxl2/src/drivers/apps_sbus/CMakeLists.txt rename to boards/modalai/voxl2/src/drivers/posix/apps_sbus/CMakeLists.txt diff --git a/boards/modalai/voxl2/src/drivers/apps_sbus/apps_sbus.cpp b/boards/modalai/voxl2/src/drivers/posix/apps_sbus/apps_sbus.cpp similarity index 100% rename from boards/modalai/voxl2/src/drivers/apps_sbus/apps_sbus.cpp rename to boards/modalai/voxl2/src/drivers/posix/apps_sbus/apps_sbus.cpp diff --git a/boards/modalai/voxl2-slpi/src/drivers/dsp_sbus/protocol.h b/boards/modalai/voxl2/src/drivers/posix/apps_sbus/protocol.h similarity index 100% rename from boards/modalai/voxl2-slpi/src/drivers/dsp_sbus/protocol.h rename to boards/modalai/voxl2/src/drivers/posix/apps_sbus/protocol.h diff --git a/boards/modalai/voxl2-slpi/src/drivers/dsp_hitl/CMakeLists.txt b/boards/modalai/voxl2/src/drivers/qurt/dsp_hitl/CMakeLists.txt similarity index 91% rename from boards/modalai/voxl2-slpi/src/drivers/dsp_hitl/CMakeLists.txt rename to boards/modalai/voxl2/src/drivers/qurt/dsp_hitl/CMakeLists.txt index 65026b83cf..c165a5d1a8 100644 --- a/boards/modalai/voxl2-slpi/src/drivers/dsp_hitl/CMakeLists.txt +++ b/boards/modalai/voxl2/src/drivers/qurt/dsp_hitl/CMakeLists.txt @@ -31,17 +31,15 @@ # ############################################################################ -message(STATUS "Mavlink include directory: ${PX4_SOURCE_DIR}/../build/modalai_voxl2_default/mavlink/common") - px4_add_module( MODULE drivers__modalai__dsp_hitl MAIN dsp_hitl INCLUDES ${PX4_SOURCE_DIR}/src/drivers/dsp_hitl - ${PX4_SOURCE_DIR}/build/modalai_voxl2_default/mavlink/common SRCS dsp_hitl.cpp DEPENDS + mavlink_common_headers px4_work_queue drivers_accelerometer drivers_gyroscope diff --git a/boards/modalai/voxl2-slpi/src/drivers/dsp_hitl/dsp_hitl.cpp b/boards/modalai/voxl2/src/drivers/qurt/dsp_hitl/dsp_hitl.cpp similarity index 100% rename from boards/modalai/voxl2-slpi/src/drivers/dsp_hitl/dsp_hitl.cpp rename to boards/modalai/voxl2/src/drivers/qurt/dsp_hitl/dsp_hitl.cpp diff --git a/boards/modalai/voxl2-slpi/src/drivers/dsp_sbus/CMakeLists.txt b/boards/modalai/voxl2/src/drivers/qurt/dsp_sbus/CMakeLists.txt similarity index 100% rename from boards/modalai/voxl2-slpi/src/drivers/dsp_sbus/CMakeLists.txt rename to boards/modalai/voxl2/src/drivers/qurt/dsp_sbus/CMakeLists.txt diff --git a/boards/modalai/voxl2-slpi/src/drivers/dsp_sbus/dsp_sbus.cpp b/boards/modalai/voxl2/src/drivers/qurt/dsp_sbus/dsp_sbus.cpp similarity index 100% rename from boards/modalai/voxl2-slpi/src/drivers/dsp_sbus/dsp_sbus.cpp rename to boards/modalai/voxl2/src/drivers/qurt/dsp_sbus/dsp_sbus.cpp diff --git a/boards/modalai/voxl2/src/drivers/apps_sbus/protocol.h b/boards/modalai/voxl2/src/drivers/qurt/dsp_sbus/protocol.h similarity index 100% rename from boards/modalai/voxl2/src/drivers/apps_sbus/protocol.h rename to boards/modalai/voxl2/src/drivers/qurt/dsp_sbus/protocol.h diff --git a/boards/modalai/voxl2-slpi/src/drivers/elrs_led/CMakeLists.txt b/boards/modalai/voxl2/src/drivers/qurt/elrs_led/CMakeLists.txt similarity index 100% rename from boards/modalai/voxl2-slpi/src/drivers/elrs_led/CMakeLists.txt rename to boards/modalai/voxl2/src/drivers/qurt/elrs_led/CMakeLists.txt diff --git a/boards/modalai/voxl2-slpi/src/drivers/elrs_led/elrs_led.cpp b/boards/modalai/voxl2/src/drivers/qurt/elrs_led/elrs_led.cpp similarity index 100% rename from boards/modalai/voxl2-slpi/src/drivers/elrs_led/elrs_led.cpp rename to boards/modalai/voxl2/src/drivers/qurt/elrs_led/elrs_led.cpp diff --git a/boards/modalai/voxl2-slpi/src/drivers/elrs_led/elrs_led.h b/boards/modalai/voxl2/src/drivers/qurt/elrs_led/elrs_led.h similarity index 100% rename from boards/modalai/voxl2-slpi/src/drivers/elrs_led/elrs_led.h rename to boards/modalai/voxl2/src/drivers/qurt/elrs_led/elrs_led.h diff --git a/boards/modalai/voxl2-slpi/src/drivers/ghst_rc/CMakeLists.txt b/boards/modalai/voxl2/src/drivers/qurt/ghst_rc/CMakeLists.txt similarity index 100% rename from boards/modalai/voxl2-slpi/src/drivers/ghst_rc/CMakeLists.txt rename to boards/modalai/voxl2/src/drivers/qurt/ghst_rc/CMakeLists.txt diff --git a/boards/modalai/voxl2-slpi/src/drivers/ghst_rc/Kconfig b/boards/modalai/voxl2/src/drivers/qurt/ghst_rc/Kconfig similarity index 100% rename from boards/modalai/voxl2-slpi/src/drivers/ghst_rc/Kconfig rename to boards/modalai/voxl2/src/drivers/qurt/ghst_rc/Kconfig diff --git a/boards/modalai/voxl2-slpi/src/drivers/ghst_rc/ghst_rc.cpp b/boards/modalai/voxl2/src/drivers/qurt/ghst_rc/ghst_rc.cpp similarity index 100% rename from boards/modalai/voxl2-slpi/src/drivers/ghst_rc/ghst_rc.cpp rename to boards/modalai/voxl2/src/drivers/qurt/ghst_rc/ghst_rc.cpp diff --git a/boards/modalai/voxl2-slpi/src/drivers/ghst_rc/ghst_rc.hpp b/boards/modalai/voxl2/src/drivers/qurt/ghst_rc/ghst_rc.hpp similarity index 100% rename from boards/modalai/voxl2-slpi/src/drivers/ghst_rc/ghst_rc.hpp rename to boards/modalai/voxl2/src/drivers/qurt/ghst_rc/ghst_rc.hpp diff --git a/boards/modalai/voxl2-slpi/src/drivers/ghst_rc/module.yaml b/boards/modalai/voxl2/src/drivers/qurt/ghst_rc/module.yaml similarity index 100% rename from boards/modalai/voxl2-slpi/src/drivers/ghst_rc/module.yaml rename to boards/modalai/voxl2/src/drivers/qurt/ghst_rc/module.yaml diff --git a/boards/modalai/voxl2-slpi/src/drivers/mavlink_rc_in/CMakeLists.txt b/boards/modalai/voxl2/src/drivers/qurt/mavlink_rc_in/CMakeLists.txt similarity index 87% rename from boards/modalai/voxl2-slpi/src/drivers/mavlink_rc_in/CMakeLists.txt rename to boards/modalai/voxl2/src/drivers/qurt/mavlink_rc_in/CMakeLists.txt index eb2bf73313..3db1dd3614 100644 --- a/boards/modalai/voxl2-slpi/src/drivers/mavlink_rc_in/CMakeLists.txt +++ b/boards/modalai/voxl2/src/drivers/qurt/mavlink_rc_in/CMakeLists.txt @@ -31,19 +31,17 @@ # ############################################################################ -message(STATUS "Mavlink include directory: ${PX4_SOURCE_DIR}/../build/modalai_voxl2_default/mavlink/standard") - px4_add_module( MODULE drivers__modalai__mavlink_rc_in MAIN mavlink_rc_in COMPILE_FLAGS - -Wno-cast-align # TODO: fix and enable - -Wno-address-of-packed-member # TODO: fix in c_library_v2 + -Wno-cast-align + -Wno-address-of-packed-member INCLUDES ${PX4_SOURCE_DIR}/src/drivers/rc_input - ${PX4_SOURCE_DIR}/build/modalai_voxl2_default/mavlink/common SRCS mavlink_rc_in.cpp DEPENDS + mavlink_common_headers px4_work_queue ) diff --git a/boards/modalai/voxl2-slpi/src/drivers/mavlink_rc_in/mavlink_rc_in.cpp b/boards/modalai/voxl2/src/drivers/qurt/mavlink_rc_in/mavlink_rc_in.cpp similarity index 100% rename from boards/modalai/voxl2-slpi/src/drivers/mavlink_rc_in/mavlink_rc_in.cpp rename to boards/modalai/voxl2/src/drivers/qurt/mavlink_rc_in/mavlink_rc_in.cpp diff --git a/boards/modalai/voxl2-slpi/src/drivers/rc_controller/CMakeLists.txt b/boards/modalai/voxl2/src/drivers/qurt/rc_controller/CMakeLists.txt similarity index 100% rename from boards/modalai/voxl2-slpi/src/drivers/rc_controller/CMakeLists.txt rename to boards/modalai/voxl2/src/drivers/qurt/rc_controller/CMakeLists.txt diff --git a/boards/modalai/voxl2-slpi/src/drivers/rc_controller/rc_controller.cpp b/boards/modalai/voxl2/src/drivers/qurt/rc_controller/rc_controller.cpp similarity index 100% rename from boards/modalai/voxl2-slpi/src/drivers/rc_controller/rc_controller.cpp rename to boards/modalai/voxl2/src/drivers/qurt/rc_controller/rc_controller.cpp diff --git a/boards/modalai/voxl2-slpi/src/drivers/rc_controller/rc_controller.hpp b/boards/modalai/voxl2/src/drivers/qurt/rc_controller/rc_controller.hpp similarity index 100% rename from boards/modalai/voxl2-slpi/src/drivers/rc_controller/rc_controller.hpp rename to boards/modalai/voxl2/src/drivers/qurt/rc_controller/rc_controller.hpp diff --git a/boards/modalai/voxl2-slpi/src/drivers/spektrum_rc/CMakeLists.txt b/boards/modalai/voxl2/src/drivers/qurt/spektrum_rc/CMakeLists.txt similarity index 100% rename from boards/modalai/voxl2-slpi/src/drivers/spektrum_rc/CMakeLists.txt rename to boards/modalai/voxl2/src/drivers/qurt/spektrum_rc/CMakeLists.txt diff --git a/boards/modalai/voxl2-slpi/src/drivers/spektrum_rc/drv_rc_input.h b/boards/modalai/voxl2/src/drivers/qurt/spektrum_rc/drv_rc_input.h similarity index 100% rename from boards/modalai/voxl2-slpi/src/drivers/spektrum_rc/drv_rc_input.h rename to boards/modalai/voxl2/src/drivers/qurt/spektrum_rc/drv_rc_input.h diff --git a/boards/modalai/voxl2-slpi/src/drivers/spektrum_rc/spektrum_rc.cpp b/boards/modalai/voxl2/src/drivers/qurt/spektrum_rc/spektrum_rc.cpp similarity index 100% rename from boards/modalai/voxl2-slpi/src/drivers/spektrum_rc/spektrum_rc.cpp rename to boards/modalai/voxl2/src/drivers/qurt/spektrum_rc/spektrum_rc.cpp diff --git a/src/drivers/differential_pressure/ms5525dso/parameters.c b/boards/modalai/voxl2/src/i2c_posix.cpp similarity index 86% rename from src/drivers/differential_pressure/ms5525dso/parameters.c rename to boards/modalai/voxl2/src/i2c_posix.cpp index a96d82b981..fbc45684bb 100644 --- a/src/drivers/differential_pressure/ms5525dso/parameters.c +++ b/boards/modalai/voxl2/src/i2c_posix.cpp @@ -1,6 +1,6 @@ /**************************************************************************** * - * Copyright (c) 2021-2022 PX4 Development Team. All rights reserved. + * Copyright (C) 2025-2026 PX4 Development Team. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -31,11 +31,10 @@ * ****************************************************************************/ -/** - * TE MS5525DSO differential pressure sensor (external I2C) - * - * @reboot_required true - * @group Sensors - * @boolean - */ -PARAM_DEFINE_INT32(SENS_EN_MS5525DS, 0); +#include +#include +#include + +constexpr px4_i2c_bus_t px4_i2c_buses[I2C_BUS_MAX_BUS_ITEMS] = { + initI2CBusExternal(0) +}; diff --git a/boards/modalai/voxl2-slpi/src/i2c.cpp b/boards/modalai/voxl2/src/i2c_qurt.cpp similarity index 100% rename from boards/modalai/voxl2-slpi/src/i2c.cpp rename to boards/modalai/voxl2/src/i2c_qurt.cpp diff --git a/boards/modalai/voxl2/src/lib/mpa/CMakeLists.txt b/boards/modalai/voxl2/src/lib/mpa/CMakeLists.txt new file mode 100644 index 0000000000..5ae8e364f0 --- /dev/null +++ b/boards/modalai/voxl2/src/lib/mpa/CMakeLists.txt @@ -0,0 +1,44 @@ +############################################################################ +# +# Copyright (c) 2025-2026 ModalAI, Inc. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# 3. Neither the name PX4 nor the names of its contributors may be +# used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS +# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED +# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +############################################################################ + +px4_add_git_submodule(TARGET git_mpa_libmodal-json PATH "libmodal-json") +px4_add_git_submodule(TARGET git_mpa_libmodal-pipe PATH "libmodal-pipe") + +px4_add_library(mpa mpa.cpp) + +target_link_libraries(mpa PRIVATE ${CMAKE_DL_LIBS}) + +target_include_directories(mpa PUBLIC + ${CMAKE_CURRENT_SOURCE_DIR}/libmodal-json/library/include + ${CMAKE_CURRENT_SOURCE_DIR}/libmodal-pipe/library/include +) diff --git a/boards/modalai/voxl2/src/lib/mpa/libmodal-json b/boards/modalai/voxl2/src/lib/mpa/libmodal-json new file mode 160000 index 0000000000..a18d9eee62 --- /dev/null +++ b/boards/modalai/voxl2/src/lib/mpa/libmodal-json @@ -0,0 +1 @@ +Subproject commit a18d9eee62465b8eef52251515f7195874afa260 diff --git a/boards/modalai/voxl2/src/lib/mpa/libmodal-pipe b/boards/modalai/voxl2/src/lib/mpa/libmodal-pipe new file mode 160000 index 0000000000..be51027375 --- /dev/null +++ b/boards/modalai/voxl2/src/lib/mpa/libmodal-pipe @@ -0,0 +1 @@ +Subproject commit be51027375ca4071a2c2ba7410fb2ddd4bbead0c diff --git a/boards/modalai/voxl2/src/lib/mpa/mpa.cpp b/boards/modalai/voxl2/src/lib/mpa/mpa.cpp new file mode 100644 index 0000000000..2f270b66c2 --- /dev/null +++ b/boards/modalai/voxl2/src/lib/mpa/mpa.cpp @@ -0,0 +1,262 @@ +/**************************************************************************** + * + * Copyright (c) 2025-2026 ModalAI, inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name PX4 nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +#include "mpa.hpp" +#include +#include +#include + +bool MPA::initialized = false; +void *MPA::handle = nullptr; +int MPA::current_client = 0; +int MPA::current_server = 0; + +MPA::pipe_client_set_simple_helper_cb_t MPA::helper_cb = nullptr; +MPA::pipe_client_set_connect_cb_t MPA::connect_cb = nullptr; +MPA::pipe_client_set_disconnect_cb_t MPA::disconnect_cb = nullptr; +MPA::pipe_client_open_t MPA::open_pipe = nullptr; +MPA::pipe_server_create_t MPA::create_pipe = nullptr; +MPA::pipe_server_write_t MPA::write_pipe = nullptr; +MPA::pipe_server_set_control_cb_t MPA::set_control_cb = nullptr; +MPA::pipe_server_close_t MPA::close_pipe = nullptr; +MPA::mpa_data_cb_t MPA::data_cb[MAX_MPA_CLIENTS]; + +// called whenever we connect or reconnect to the server +void MPA::ConnectCB(__attribute__((unused)) int ch, __attribute__((unused)) void *context) +{ + PX4_INFO("vfc status server connected"); + return; +} + +// called whenever we disconnect from the server +void MPA::DisconnectCB(__attribute__((unused)) int ch, __attribute__((unused)) void *context) +{ + PX4_INFO("vfc status server disconnected"); + return; +} + +void MPA::HelperCB(__attribute__((unused)) int ch, char *data, int bytes, __attribute__((unused)) void *context) +{ + // PX4_INFO("Got %d bytes in pipe callback", bytes); + + if (data_cb[ch]) { data_cb[ch](data, bytes); } + + return; +} + +int MPA::PipeClient(const char *pipe_name, int size, mpa_data_cb_t cb) +{ + if (!initialized) { + PX4_ERR("Cannot open pipe %s before initialization", pipe_name); + return -1; + } + + printf("waiting for server for pipe %s\n", pipe_name); + + if (open_pipe(current_client, pipe_name, "px4", EN_PIPE_CLIENT_SIMPLE_HELPER, size * 10) < 0) { + PX4_ERR("Error opening pipe %s", pipe_name); + return -1; + } + + data_cb[current_client] = cb; + current_client++; + + return current_client - 1; +} + +int MPA::PipeCreate(char *pipe_name, int flags) +{ + if (!initialized) { + PX4_ERR("Cannot open pipe %s before initialization", pipe_name); + return -1; + } + + pipe_info_t server_pipe; + strncpy(server_pipe.name, pipe_name, MODAL_PIPE_MAX_NAME_LEN); + server_pipe.name[MODAL_PIPE_MAX_NAME_LEN - 1] = 0; + server_pipe.location[0] = 0; + server_pipe.type[0] = 0; + strncpy(server_pipe.server_name, "px4_mpa", MODAL_PIPE_MAX_NAME_LEN); + server_pipe.size_bytes = MODAL_PIPE_DEFAULT_PIPE_SIZE; + server_pipe.server_pid = 0; + + if (create_pipe(current_server, server_pipe, flags) < 0) { + // remove_pid_file(server_pipe.server_name); + PX4_ERR("Error opening pipe %s", pipe_name); + return -1; + } + + current_server++; + + return current_server - 1; +} + +int MPA::PipeWrite(int ch, const void *data, int bytes) +{ + return write_pipe(ch, data, bytes); +} + +int MPA::PipeServerSetControlCb(int ch, mpa_control_cb_t cb, void *context) +{ + return set_control_cb(ch, cb, context); +} + +void MPA::PipeServerClose(int ch) +{ + if (close_pipe) { + close_pipe(ch); + } +} + +int MPA::Initialize() +{ + if (initialized) { + // Already successfully initialized + return 0; + } + + char libname[] = "libmodal_pipe.so"; + handle = dlopen(libname, RTLD_LAZY | RTLD_GLOBAL); + + if (!handle) { + PX4_ERR("Error opening library %s: %s\n", libname, dlerror()); + return -1; + + } else { + PX4_INFO("Successfully loaded library %s", libname); + } + + // set up all our MPA callbacks + char helper_cb_name[] = "pipe_client_set_simple_helper_cb"; + helper_cb = (pipe_client_set_simple_helper_cb_t) dlsym(handle, helper_cb_name); + + if (!helper_cb) { + PX4_ERR("Error finding symbol %s: %s\n", helper_cb_name, dlerror()); + return -1; + + } else { + PX4_DEBUG("Successfully loaded function %s", helper_cb_name); + } + + helper_cb(0, HelperCB, NULL); + + char connect_cb_name[] = "pipe_client_set_connect_cb"; + connect_cb = (pipe_client_set_connect_cb_t) dlsym(handle, connect_cb_name); + + if (!connect_cb) { + PX4_ERR("Error finding symbol %s: %s", connect_cb_name, dlerror()); + return -1; + + } else { + PX4_DEBUG("Successfully loaded function %s", connect_cb_name); + } + + connect_cb(0, ConnectCB, NULL); + + char disconnect_cb_name[] = "pipe_client_set_disconnect_cb"; + disconnect_cb = (pipe_client_set_disconnect_cb_t) dlsym(handle, disconnect_cb_name); + + if (!disconnect_cb) { + PX4_ERR("Error finding symbol %s: %s", disconnect_cb_name, dlerror()); + return -1; + + } else { + PX4_DEBUG("Successfully loaded function %s", disconnect_cb_name); + } + + disconnect_cb(0, DisconnectCB, NULL); + + // request a new pipe from the server + char open_pipe_name[] = "pipe_client_open"; + open_pipe = (pipe_client_open_t) dlsym(handle, open_pipe_name); + + if (!open_pipe) { + PX4_ERR("Error finding symbol %s: %s", open_pipe_name, dlerror()); + return -1; + + } else { + PX4_DEBUG("Successfully loaded function %s", open_pipe_name); + } + + // Create a new server pipe + char create_pipe_name[] = "pipe_server_create"; + create_pipe = (pipe_server_create_t) dlsym(handle, create_pipe_name); + + if (!create_pipe) { + PX4_ERR("Error finding symbol %s: %s", create_pipe_name, dlerror()); + return -1; + + } else { + PX4_DEBUG("Successfully loaded function %s", create_pipe_name); + } + + // Write to a server pipe + char write_pipe_name[] = "pipe_server_write"; + write_pipe = (pipe_server_write_t) dlsym(handle, write_pipe_name); + + if (!write_pipe) { + PX4_ERR("Error finding symbol %s: %s", write_pipe_name, dlerror()); + return -1; + + } else { + PX4_DEBUG("Successfully loaded function %s", write_pipe_name); + } + + // Set control callback for server pipe + char set_control_cb_name[] = "pipe_server_set_control_cb"; + set_control_cb = (pipe_server_set_control_cb_t) dlsym(handle, set_control_cb_name); + + if (!set_control_cb) { + PX4_ERR("Error finding symbol %s: %s", set_control_cb_name, dlerror()); + return -1; + + } else { + PX4_DEBUG("Successfully loaded function %s", set_control_cb_name); + } + + // Close server pipe + char close_pipe_name[] = "pipe_server_close"; + close_pipe = (pipe_server_close_t) dlsym(handle, close_pipe_name); + + if (!close_pipe) { + PX4_ERR("Error finding symbol %s: %s", close_pipe_name, dlerror()); + return -1; + + } else { + PX4_DEBUG("Successfully loaded function %s", close_pipe_name); + } + + initialized = true; + + return 0; +} diff --git a/boards/modalai/voxl2/src/lib/mpa/mpa.hpp b/boards/modalai/voxl2/src/lib/mpa/mpa.hpp new file mode 100644 index 0000000000..cd3640ba55 --- /dev/null +++ b/boards/modalai/voxl2/src/lib/mpa/mpa.hpp @@ -0,0 +1,83 @@ +/**************************************************************************** + * + * Copyright (c) 2025-2026 ModalAI, inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name PX4 nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ +#include + +#pragma once + +class MPA +{ +public: + static int Initialize(); + + typedef void (*mpa_data_cb_t)(char *data, int bytes); + typedef void (*mpa_control_cb_t)(int ch, char *data, int bytes, void *context); + + static int PipeClient(const char *pipe_name, int size, mpa_data_cb_t cb); + + static int PipeCreate(char *pipe_name, int flags = 0); + static int PipeWrite(int ch, const void *data, int bytes); + static int PipeServerSetControlCb(int ch, mpa_control_cb_t cb, void *context); + static void PipeServerClose(int ch); + +private: + static void HelperCB(__attribute__((unused)) int ch, char *data, int bytes, __attribute__((unused)) void *context); + static void DisconnectCB(__attribute__((unused)) int ch, __attribute__((unused)) void *context); + static void ConnectCB(__attribute__((unused)) int ch, __attribute__((unused)) void *context); + + typedef int (*pipe_client_set_simple_helper_cb_t)(int ch, client_simple_cb *cb, void *context); + typedef int (*pipe_client_set_connect_cb_t)(int ch, client_connect_cb *cb, void *context); + typedef int (*pipe_client_set_disconnect_cb_t)(int ch, client_disc_cb *cb, void *context); + typedef int (*pipe_client_open_t)(int ch, const char *name_or_location, const char *client_name, int flags, int buf_len); + typedef int (*pipe_server_create_t)(int ch, pipe_info_t info, int flags); + typedef int (*pipe_server_write_t)(int ch, const void *data, int bytes); + typedef int (*pipe_server_set_control_cb_t)(int ch, server_control_cb *cb, void *context); + typedef void (*pipe_server_close_t)(int ch); + + static pipe_client_set_simple_helper_cb_t helper_cb; + static pipe_client_set_connect_cb_t connect_cb; + static pipe_client_set_disconnect_cb_t disconnect_cb; + static pipe_client_open_t open_pipe; + static pipe_server_create_t create_pipe; + static pipe_server_write_t write_pipe; + static pipe_server_set_control_cb_t set_control_cb; + static pipe_server_close_t close_pipe; + + static bool initialized; + static void *handle; + + static int current_client; + static int current_server; + + static const int MAX_MPA_CLIENTS{8}; + static mpa_data_cb_t data_cb[MAX_MPA_CLIENTS]; +}; diff --git a/boards/modalai/voxl2/src/modules/sensor_baro_bridge/CMakeLists.txt b/boards/modalai/voxl2/src/modules/sensor_baro_bridge/CMakeLists.txt new file mode 100644 index 0000000000..1377ce00cf --- /dev/null +++ b/boards/modalai/voxl2/src/modules/sensor_baro_bridge/CMakeLists.txt @@ -0,0 +1,43 @@ +############################################################################ +# +# Copyright (c) 2025-2026 ModalAI, Inc. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# 3. Neither the name PX4 nor the names of its contributors may be +# used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS +# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED +# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +############################################################################ + +px4_add_module( + MODULE modules__sensor_baro_bridge + MAIN sensor_baro_bridge + INCLUDES + ${CMAKE_CURRENT_SOURCE_DIR}/../../lib/mpa + SRCS + sensor_baro_bridge.cpp + DEPENDS + mpa + ) diff --git a/boards/modalai/voxl2/src/modules/sensor_baro_bridge/sensor_baro_bridge.cpp b/boards/modalai/voxl2/src/modules/sensor_baro_bridge/sensor_baro_bridge.cpp new file mode 100644 index 0000000000..51ba8cf968 --- /dev/null +++ b/boards/modalai/voxl2/src/modules/sensor_baro_bridge/sensor_baro_bridge.cpp @@ -0,0 +1,183 @@ +/**************************************************************************** + * + * Copyright (c) 2025-2026 ModalAI, inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name PX4 nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ +#include "mpa.hpp" +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class SensorBaroBridge : public ModuleBase, public px4::WorkItem +{ +public: + static Descriptor desc; + + SensorBaroBridge(); + ~SensorBaroBridge() override = default; + + /** @see ModuleBase */ + static int task_spawn(int argc, char *argv[]); + + /** @see ModuleBase */ + static int custom_command(int argc, char *argv[]); + + /** @see ModuleBase */ + static int print_usage(const char *reason = nullptr); + + bool init(); + +private: + void Run() override; + + uORB::SubscriptionCallbackWorkItem _sensor_baro_sub{this, ORB_ID(sensor_baro)}; + + sensor_baro_s _sensor_baro{}; + + int baro_pipe_ch{0}; + +}; + +ModuleBase::Descriptor SensorBaroBridge::desc{task_spawn, custom_command, print_usage}; + +SensorBaroBridge::SensorBaroBridge() : + WorkItem(MODULE_NAME, px4::wq_configurations::nav_and_controllers) +{ +} + +bool SensorBaroBridge::init() +{ + if (MPA::Initialize() == -1) { + PX4_ERR("MPA init failed"); + return false; + } + + char baro_pipe_name[] = "px4_sensor_baro"; + baro_pipe_ch = MPA::PipeCreate(baro_pipe_name); + + if (baro_pipe_ch == -1) { + PX4_ERR("Pipe create failed for %s", baro_pipe_name); + return false; + } + + if (!_sensor_baro_sub.registerCallback()) { + PX4_ERR("callback registration failed"); + return false; + } + + return true; +} + +void SensorBaroBridge::Run() +{ + if (should_exit()) { + _sensor_baro_sub.unregisterCallback(); + exit_and_cleanup(desc); + return; + } + + if (_sensor_baro_sub.updated()) { + if (_sensor_baro_sub.update(&_sensor_baro)) { + baro_data_t baro; + memset(&baro, 0, sizeof(baro)); + + baro.magic_number = BARO_MAGIC_NUMBER; + baro.pressure_pa = _sensor_baro.pressure; + baro.temp_c = _sensor_baro.temperature; + baro.alt_amsl_m = 0.0f; // sensor_baro does not include altitude + baro.timestamp_ns = _sensor_baro.timestamp * 1000; // Convert µs to ns + baro.reserved_1 = 0; + baro.reserved_2 = 0; + + if (MPA::PipeWrite(baro_pipe_ch, (void *)&baro, sizeof(baro_data_t)) == -1) { + PX4_ERR("Pipe %d write failed!", baro_pipe_ch); + } + } + } +} + +int SensorBaroBridge::custom_command(int argc, char *argv[]) +{ + return print_usage("unknown command"); +} + +int SensorBaroBridge::task_spawn(int argc, char *argv[]) +{ + SensorBaroBridge *instance = new SensorBaroBridge(); + + if (instance) { + desc.object.store(instance); + desc.task_id = task_id_is_work_queue; + + if (instance->init()) { + return PX4_OK; + } + + } else { + PX4_ERR("alloc failed"); + } + + delete instance; + desc.object.store(nullptr); + desc.task_id = -1; + + return PX4_ERROR; +} + +int SensorBaroBridge::print_usage(const char *reason) +{ + if (reason) { + PX4_WARN("%s\n", reason); + } + + PRINT_MODULE_DESCRIPTION( + R"DESCR_STR( +### Description +Sensor baro bridge + +)DESCR_STR"); + + PRINT_MODULE_USAGE_NAME("sensor_baro_bridge", "system"); + PRINT_MODULE_USAGE_COMMAND("start"); + PRINT_MODULE_USAGE_DEFAULT_COMMANDS(); + + return 0; +} + +extern "C" __EXPORT int sensor_baro_bridge_main(int argc, char *argv[]) +{ + return ModuleBase::main(SensorBaroBridge::desc, argc, argv); +} diff --git a/boards/modalai/voxl2/src/modules/sensor_imu_raw_bridge/CMakeLists.txt b/boards/modalai/voxl2/src/modules/sensor_imu_raw_bridge/CMakeLists.txt new file mode 100644 index 0000000000..2a8a3783b4 --- /dev/null +++ b/boards/modalai/voxl2/src/modules/sensor_imu_raw_bridge/CMakeLists.txt @@ -0,0 +1,43 @@ +############################################################################ +# +# Copyright (c) 2025 ModalAI, Inc. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# 3. Neither the name PX4 nor the names of its contributors may be +# used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS +# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED +# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +############################################################################ + +px4_add_module( + MODULE modules__sensor_imu_raw_bridge + MAIN sensor_imu_raw_bridge + INCLUDES + ${CMAKE_CURRENT_SOURCE_DIR}/../../lib/mpa + SRCS + sensor_imu_raw_bridge.cpp + DEPENDS + mpa + ) diff --git a/boards/modalai/voxl2/src/modules/sensor_imu_raw_bridge/sensor_imu_raw_bridge.cpp b/boards/modalai/voxl2/src/modules/sensor_imu_raw_bridge/sensor_imu_raw_bridge.cpp new file mode 100644 index 0000000000..1b6bdcb0a1 --- /dev/null +++ b/boards/modalai/voxl2/src/modules/sensor_imu_raw_bridge/sensor_imu_raw_bridge.cpp @@ -0,0 +1,201 @@ +/**************************************************************************** + * + * Copyright (c) 2025 ModalAI, inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name PX4 nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ +#include "mpa.hpp" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class SensorImuRawBridge : public ModuleBase, public px4::WorkItem +{ +public: + static Descriptor desc; + + SensorImuRawBridge(); + ~SensorImuRawBridge() override = default; + + /** @see ModuleBase */ + static int task_spawn(int argc, char *argv[]); + + /** @see ModuleBase */ + static int custom_command(int argc, char *argv[]); + + /** @see ModuleBase */ + static int print_usage(const char *reason = nullptr); + + bool init(); + +private: + void Run() override; + + // Subscribe to raw accel topic (triggers the work item) + uORB::SubscriptionCallbackWorkItem _sensor_accel_sub{this, ORB_ID(sensor_accel)}; + + // Poll the raw gyro topic on each accel callback + uORB::Subscription _sensor_gyro_sub{ORB_ID(sensor_gyro)}; + + int imu_raw_pipe_ch{0}; + +}; + +ModuleBase::Descriptor SensorImuRawBridge::desc{task_spawn, custom_command, print_usage}; + +SensorImuRawBridge::SensorImuRawBridge() : + WorkItem(MODULE_NAME, px4::wq_configurations::nav_and_controllers) +{ +} + +bool SensorImuRawBridge::init() +{ + if (MPA::Initialize() == -1) { + PX4_ERR("MPA init failed"); + return false; + } + + char imu_raw_pipe_name[] = "px4_sensor_imu_raw"; + imu_raw_pipe_ch = MPA::PipeCreate(imu_raw_pipe_name); + + if (imu_raw_pipe_ch == -1) { + PX4_ERR("Pipe create failed for %s", imu_raw_pipe_name); + return false; + } + + if (!_sensor_accel_sub.registerCallback()) { + PX4_ERR("callback registration failed"); + return false; + } + + return true; +} + +void SensorImuRawBridge::Run() +{ + if (should_exit()) { + _sensor_accel_sub.unregisterCallback(); + exit_and_cleanup(desc); + return; + } + + sensor_accel_s accel_data; + + if (_sensor_accel_sub.update(&accel_data)) { + + imu_data_t imu; + memset(&imu, 0, sizeof(imu)); + imu.magic_number = IMU_MAGIC_NUMBER; + + // Raw acceleration (m/s^2) - straight from the driver, no TC applied + imu.accl_ms2[0] = accel_data.x; + imu.accl_ms2[1] = accel_data.y; + imu.accl_ms2[2] = accel_data.z; + + // Temperature from accel sensor + imu.temp_c = accel_data.temperature; + + // Raw angular velocity (rad/s) + sensor_gyro_s gyro_data; + + if (_sensor_gyro_sub.update(&gyro_data)) { + imu.gyro_rad[0] = gyro_data.x; + imu.gyro_rad[1] = gyro_data.y; + imu.gyro_rad[2] = gyro_data.z; + } + + imu.timestamp_ns = accel_data.timestamp * 1000; // Convert µs to ns + + if (MPA::PipeWrite(imu_raw_pipe_ch, (void *)&imu, sizeof(imu_data_t)) == -1) { + PX4_ERR("Pipe %d write failed!", imu_raw_pipe_ch); + } + } +} + +int SensorImuRawBridge::custom_command(int argc, char *argv[]) +{ + return print_usage("unknown command"); +} + +int SensorImuRawBridge::task_spawn(int argc, char *argv[]) +{ + SensorImuRawBridge *instance = new SensorImuRawBridge(); + + if (instance) { + desc.object.store(instance); + desc.task_id = task_id_is_work_queue; + + if (instance->init()) { + return PX4_OK; + } + + } else { + PX4_ERR("alloc failed"); + } + + delete instance; + desc.object.store(nullptr); + desc.task_id = -1; + + return PX4_ERROR; +} + +int SensorImuRawBridge::print_usage(const char *reason) +{ + if (reason) { + PX4_WARN("%s\n", reason); + } + + PRINT_MODULE_DESCRIPTION( + R"DESCR_STR( +### Description +Raw sensor IMU bridge. Publishes raw accel and gyro data from PX4 +to the apps processor via MPA pipe. No temperature compensation +or calibration offsets are applied. + +)DESCR_STR"); + + PRINT_MODULE_USAGE_NAME("sensor_imu_raw_bridge", "system"); + PRINT_MODULE_USAGE_COMMAND("start"); + PRINT_MODULE_USAGE_DEFAULT_COMMANDS(); + + return 0; +} + +extern "C" __EXPORT int sensor_imu_raw_bridge_main(int argc, char *argv[]) +{ + return ModuleBase::main(SensorImuRawBridge::desc, argc, argv); +} diff --git a/boards/modalai/voxl2/src/modules/sih_vio_bridge/CMakeLists.txt b/boards/modalai/voxl2/src/modules/sih_vio_bridge/CMakeLists.txt new file mode 100644 index 0000000000..ee380231d0 --- /dev/null +++ b/boards/modalai/voxl2/src/modules/sih_vio_bridge/CMakeLists.txt @@ -0,0 +1,43 @@ +############################################################################ +# +# Copyright (c) 2026 ModalAI, Inc. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# 3. Neither the name PX4 nor the names of its contributors may be +# used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS +# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED +# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +############################################################################ + +px4_add_module( + MODULE modules__sih_vio_bridge + MAIN sih_vio_bridge + INCLUDES + ${CMAKE_CURRENT_SOURCE_DIR}/../../lib/mpa + SRCS + sih_vio_bridge.cpp + DEPENDS + mpa + ) diff --git a/boards/modalai/voxl2/src/modules/sih_vio_bridge/sih_vio_bridge.cpp b/boards/modalai/voxl2/src/modules/sih_vio_bridge/sih_vio_bridge.cpp new file mode 100644 index 0000000000..6132a60e3f --- /dev/null +++ b/boards/modalai/voxl2/src/modules/sih_vio_bridge/sih_vio_bridge.cpp @@ -0,0 +1,283 @@ +/**************************************************************************** + * + * Copyright (c) 2026 ModalAI, Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name PX4 nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +/** + * @file sih_vio_bridge.cpp + * + * Bridges SIH ground truth pose data to MPA VIO pipes so that other VOXL2 + * services (e.g. voxl-vision-hub) can consume simulated pose as if it were + * real VIO data. + * + * Subscribes to vehicle_local_position_groundtruth and + * vehicle_attitude_groundtruth published by the SIH simulator module, + * converts the data to vio_data_t, and writes to the "hitl_vio" and "state" + * MPA pipes. + */ + +#include "mpa.hpp" +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class SihVioBridge : public ModuleBase, public px4::WorkItem +{ +public: + static Descriptor desc; + + SihVioBridge(); + ~SihVioBridge() override = default; + + static int task_spawn(int argc, char *argv[]); + static int custom_command(int argc, char *argv[]); + static int print_usage(const char *reason = nullptr); + + bool init(); + +private: + void Run() override; + + int64_t TimeMonotonic_ns(); + + uORB::SubscriptionCallbackWorkItem _local_pos_sub{this, ORB_ID(vehicle_local_position_groundtruth)}; + uORB::Subscription _attitude_sub{ORB_ID(vehicle_attitude_groundtruth)}; + uORB::Subscription _angular_vel_sub{ORB_ID(vehicle_angular_velocity_groundtruth)}; + + int _vio_pipe_ch{0}; + int _flow_pipe_ch{0}; +}; + +ModuleBase::Descriptor SihVioBridge::desc{task_spawn, custom_command, print_usage}; + +SihVioBridge::SihVioBridge() : + WorkItem(MODULE_NAME, px4::wq_configurations::nav_and_controllers) +{ +} + +bool SihVioBridge::init() +{ + if (MPA::Initialize() == -1) { + return false; + } + + char vio_pipe_name[] = "hitl_vio"; + _vio_pipe_ch = MPA::PipeCreate(vio_pipe_name); + + if (_vio_pipe_ch == -1) { + PX4_ERR("Pipe create failed for %s", vio_pipe_name); + return false; + } + + char flow_pipe_name[] = "state"; + _flow_pipe_ch = MPA::PipeCreate(flow_pipe_name); + + if (_flow_pipe_ch == -1) { + PX4_ERR("Pipe create failed for %s", flow_pipe_name); + return false; + } + + if (!_local_pos_sub.registerCallback()) { + PX4_ERR("callback registration failed"); + return false; + } + + return true; +} + +int64_t SihVioBridge::TimeMonotonic_ns() +{ + struct timespec ts; + + if (clock_gettime(CLOCK_MONOTONIC, &ts)) { + PX4_ERR("ERROR calling clock_gettime"); + return -1; + } + + return (int64_t)ts.tv_sec * 1000000000 + (int64_t)ts.tv_nsec; +} + +void SihVioBridge::Run() +{ + if (should_exit()) { + _local_pos_sub.unregisterCallback(); + exit_and_cleanup(desc); + return; + } + + if (_local_pos_sub.updated()) { + vehicle_local_position_s lpos{}; + + if (_local_pos_sub.copy(&lpos)) { + vio_data_t s; + memset(&s, 0, sizeof(s)); + + s.magic_number = VIO_MAGIC_NUMBER; + s.error_code = 0; + s.state = VIO_STATE_OK; + s.timestamp_ns = TimeMonotonic_ns(); + + // Position + s.T_imu_wrt_vio[0] = lpos.x; + s.T_imu_wrt_vio[1] = lpos.y; + s.T_imu_wrt_vio[2] = lpos.z; + + // Velocity + s.vel_imu_wrt_vio[0] = lpos.vx; + s.vel_imu_wrt_vio[1] = lpos.vy; + s.vel_imu_wrt_vio[2] = lpos.vz; + + // Attitude: convert quaternion to rotation matrix + vehicle_attitude_s att{}; + + if (_attitude_sub.copy(&att)) { + float w = att.q[0], x = att.q[1], y = att.q[2], z = att.q[3]; + float xx = x * x, yy = y * y, zz = z * z; + float xy = x * y, xz = x * z, yz = y * z; + float wx = w * x, wy = w * y, wz = w * z; + + s.R_imu_to_vio[0][0] = 1 - 2 * (yy + zz); + s.R_imu_to_vio[0][1] = 2 * (xy - wz); + s.R_imu_to_vio[0][2] = 2 * (xz + wy); + + s.R_imu_to_vio[1][0] = 2 * (xy + wz); + s.R_imu_to_vio[1][1] = 1 - 2 * (xx + zz); + s.R_imu_to_vio[1][2] = 2 * (yz - wx); + + s.R_imu_to_vio[2][0] = 2 * (xz - wy); + s.R_imu_to_vio[2][1] = 2 * (yz + wx); + s.R_imu_to_vio[2][2] = 1 - 2 * (xx + yy); + } + + // Angular velocity + vehicle_angular_velocity_s ang_vel{}; + + if (_angular_vel_sub.copy(&ang_vel)) { + s.imu_angular_vel[0] = ang_vel.xyz[0]; + s.imu_angular_vel[1] = ang_vel.xyz[1]; + s.imu_angular_vel[2] = ang_vel.xyz[2]; + } + + // Gravity vector in VIO frame (NED: gravity is +Z) + s.gravity_vector[0] = 0.f; + s.gravity_vector[1] = 0.f; + s.gravity_vector[2] = 1.f; + + // Ground truth has perfect quality + s.quality = 100; + s.n_feature_points = 25; + + // Small fixed covariance for ground truth + s.pose_covariance[0] = 1e-6f; // x + s.pose_covariance[6] = 1e-6f; // y + s.pose_covariance[11] = 1e-6f; // z + s.pose_covariance[15] = 1e-6f; // roll + s.pose_covariance[18] = 1e-6f; // pitch + s.pose_covariance[20] = 1e-6f; // yaw + + s.velocity_covariance[0] = 1e-6f; // vx + s.velocity_covariance[6] = 1e-6f; // vy + s.velocity_covariance[11] = 1e-6f; // vz + + if (MPA::PipeWrite(_vio_pipe_ch, (void *)&s, sizeof(vio_data_t)) == -1) { + PX4_ERR("Pipe %d write failed!", _vio_pipe_ch); + } + + if (MPA::PipeWrite(_flow_pipe_ch, (void *)&s, sizeof(vio_data_t)) == -1) { + PX4_ERR("Pipe %d write failed!", _flow_pipe_ch); + } + } + } +} + +int SihVioBridge::custom_command(int argc, char *argv[]) +{ + return print_usage("unknown command"); +} + +int SihVioBridge::task_spawn(int argc, char *argv[]) +{ + SihVioBridge *instance = new SihVioBridge(); + + if (instance) { + desc.object.store(instance); + desc.task_id = task_id_is_work_queue; + + if (instance->init()) { + return PX4_OK; + } + + } else { + PX4_ERR("alloc failed"); + } + + delete instance; + desc.object.store(nullptr); + desc.task_id = -1; + + return PX4_ERROR; +} + +int SihVioBridge::print_usage(const char *reason) +{ + if (reason) { + PX4_WARN("%s\n", reason); + } + + PRINT_MODULE_DESCRIPTION( + R"DESCR_STR( +### Description +Bridges SIH ground truth pose data to MPA VIO pipes. + +When running SIH simulation on VOXL2, this module publishes the simulated +pose (position, attitude, velocity, angular velocity) to the "hitl_vio" and +"state" MPA pipes in vio_data_t format, allowing other VOXL2 services to +consume simulated VIO data. + +)DESCR_STR"); + + PRINT_MODULE_USAGE_NAME("sih_vio_bridge", "simulation"); + PRINT_MODULE_USAGE_COMMAND("start"); + PRINT_MODULE_USAGE_DEFAULT_COMMANDS(); + + return 0; +} + +extern "C" __EXPORT int sih_vio_bridge_main(int argc, char *argv[]) +{ + return ModuleBase::main(SihVioBridge::desc, argc, argv); +} diff --git a/boards/modalai/voxl2/src/modules/vehicle_air_data_bridge/CMakeLists.txt b/boards/modalai/voxl2/src/modules/vehicle_air_data_bridge/CMakeLists.txt new file mode 100644 index 0000000000..a6dc08bc08 --- /dev/null +++ b/boards/modalai/voxl2/src/modules/vehicle_air_data_bridge/CMakeLists.txt @@ -0,0 +1,43 @@ +############################################################################ +# +# Copyright (c) 2025-2026 ModalAI, Inc. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# 3. Neither the name PX4 nor the names of its contributors may be +# used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS +# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED +# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +############################################################################ + +px4_add_module( + MODULE modules__vehicle_air_data_bridge + MAIN vehicle_air_data_bridge + INCLUDES + ${CMAKE_CURRENT_SOURCE_DIR}/../../lib/mpa + SRCS + vehicle_air_data_bridge.cpp + DEPENDS + mpa + ) diff --git a/boards/modalai/voxl2/src/modules/vehicle_air_data_bridge/vehicle_air_data_bridge.cpp b/boards/modalai/voxl2/src/modules/vehicle_air_data_bridge/vehicle_air_data_bridge.cpp new file mode 100644 index 0000000000..7943db6e5b --- /dev/null +++ b/boards/modalai/voxl2/src/modules/vehicle_air_data_bridge/vehicle_air_data_bridge.cpp @@ -0,0 +1,183 @@ +/**************************************************************************** + * + * Copyright (c) 2025-2026 ModalAI, inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name PX4 nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ +#include "mpa.hpp" +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class VehicleAirDataBridge : public ModuleBase, public px4::WorkItem +{ +public: + static Descriptor desc; + + VehicleAirDataBridge(); + ~VehicleAirDataBridge() override = default; + + /** @see ModuleBase */ + static int task_spawn(int argc, char *argv[]); + + /** @see ModuleBase */ + static int custom_command(int argc, char *argv[]); + + /** @see ModuleBase */ + static int print_usage(const char *reason = nullptr); + + bool init(); + +private: + void Run() override; + + uORB::SubscriptionCallbackWorkItem _vehicle_air_data_sub{this, ORB_ID(vehicle_air_data)}; + + vehicle_air_data_s _vehicle_air_data{}; + + int baro_pipe_ch{0}; + +}; + +ModuleBase::Descriptor VehicleAirDataBridge::desc{task_spawn, custom_command, print_usage}; + +VehicleAirDataBridge::VehicleAirDataBridge() : + WorkItem(MODULE_NAME, px4::wq_configurations::nav_and_controllers) +{ +} + +bool VehicleAirDataBridge::init() +{ + if (MPA::Initialize() == -1) { + PX4_ERR("MPA init failed"); + return false; + } + + char baro_pipe_name[] = "px4_vehicle_air_data"; + baro_pipe_ch = MPA::PipeCreate(baro_pipe_name); + + if (baro_pipe_ch == -1) { + PX4_ERR("Pipe create failed for %s", baro_pipe_name); + return false; + } + + if (!_vehicle_air_data_sub.registerCallback()) { + PX4_ERR("callback registration failed"); + return false; + } + + return true; +} + +void VehicleAirDataBridge::Run() +{ + if (should_exit()) { + _vehicle_air_data_sub.unregisterCallback(); + exit_and_cleanup(desc); + return; + } + + if (_vehicle_air_data_sub.updated()) { + if (_vehicle_air_data_sub.update(&_vehicle_air_data)) { + baro_data_t baro; + memset(&baro, 0, sizeof(baro)); + + baro.magic_number = BARO_MAGIC_NUMBER; + baro.pressure_pa = _vehicle_air_data.baro_pressure_pa; + baro.temp_c = _vehicle_air_data.ambient_temperature; + baro.alt_amsl_m = _vehicle_air_data.baro_alt_meter; + baro.timestamp_ns = _vehicle_air_data.timestamp * 1000; // Convert µs to ns + baro.reserved_1 = 0; + baro.reserved_2 = 0; + + if (MPA::PipeWrite(baro_pipe_ch, (void *)&baro, sizeof(baro_data_t)) == -1) { + PX4_ERR("Pipe %d write failed!", baro_pipe_ch); + } + } + } +} + +int VehicleAirDataBridge::custom_command(int argc, char *argv[]) +{ + return print_usage("unknown command"); +} + +int VehicleAirDataBridge::task_spawn(int argc, char *argv[]) +{ + VehicleAirDataBridge *instance = new VehicleAirDataBridge(); + + if (instance) { + desc.object.store(instance); + desc.task_id = task_id_is_work_queue; + + if (instance->init()) { + return PX4_OK; + } + + } else { + PX4_ERR("alloc failed"); + } + + delete instance; + desc.object.store(nullptr); + desc.task_id = -1; + + return PX4_ERROR; +} + +int VehicleAirDataBridge::print_usage(const char *reason) +{ + if (reason) { + PX4_WARN("%s\n", reason); + } + + PRINT_MODULE_DESCRIPTION( + R"DESCR_STR( +### Description +Vehicle air data bridge + +)DESCR_STR"); + + PRINT_MODULE_USAGE_NAME("vehicle_air_data_bridge", "system"); + PRINT_MODULE_USAGE_COMMAND("start"); + PRINT_MODULE_USAGE_DEFAULT_COMMANDS(); + + return 0; +} + +extern "C" __EXPORT int vehicle_air_data_bridge_main(int argc, char *argv[]) +{ + return ModuleBase::main(VehicleAirDataBridge::desc, argc, argv); +} diff --git a/boards/modalai/voxl2/src/modules/vehicle_local_position_bridge/CMakeLists.txt b/boards/modalai/voxl2/src/modules/vehicle_local_position_bridge/CMakeLists.txt new file mode 100644 index 0000000000..378cc56d82 --- /dev/null +++ b/boards/modalai/voxl2/src/modules/vehicle_local_position_bridge/CMakeLists.txt @@ -0,0 +1,43 @@ +############################################################################ +# +# Copyright (c) 2025-2026 ModalAI, Inc. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# 3. Neither the name PX4 nor the names of its contributors may be +# used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS +# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED +# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +############################################################################ + +px4_add_module( + MODULE modules__vehicle_local_position_bridge + MAIN vehicle_local_position_bridge + INCLUDES + ${CMAKE_CURRENT_SOURCE_DIR}/../../lib/mpa + SRCS + vehicle_local_position_bridge.cpp + DEPENDS + mpa + ) diff --git a/boards/modalai/voxl2/src/modules/vehicle_local_position_bridge/vehicle_local_position_bridge.cpp b/boards/modalai/voxl2/src/modules/vehicle_local_position_bridge/vehicle_local_position_bridge.cpp new file mode 100644 index 0000000000..d39f55dee1 --- /dev/null +++ b/boards/modalai/voxl2/src/modules/vehicle_local_position_bridge/vehicle_local_position_bridge.cpp @@ -0,0 +1,238 @@ +/**************************************************************************** + * + * Copyright (c) 2025-2026 ModalAI, inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name PX4 nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ +#include "mpa.hpp" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class VehicleLocalPositionBridge : public ModuleBase, public px4::WorkItem +{ +public: + static Descriptor desc; + + VehicleLocalPositionBridge(); + ~VehicleLocalPositionBridge() override = default; + + /** @see ModuleBase */ + static int task_spawn(int argc, char *argv[]); + + /** @see ModuleBase */ + static int custom_command(int argc, char *argv[]); + + /** @see ModuleBase */ + static int print_usage(const char *reason = nullptr); + + bool init(); + +private: + void Run() override; + + uORB::SubscriptionCallbackWorkItem _vehicle_local_position_sub{this, ORB_ID(vehicle_local_position)}; + + vehicle_local_position_s _vehicle_local_position{}; + + int _pipe_ch{0}; + +}; + +ModuleBase::Descriptor VehicleLocalPositionBridge::desc{task_spawn, custom_command, print_usage}; + +VehicleLocalPositionBridge::VehicleLocalPositionBridge() : + WorkItem(MODULE_NAME, px4::wq_configurations::nav_and_controllers) +{ +} + +bool VehicleLocalPositionBridge::init() +{ + if (MPA::Initialize() == -1) { + PX4_ERR("MPA init failed"); + return false; + } + + char pipe_name[] = "px4_vehicle_local_position"; + _pipe_ch = MPA::PipeCreate(pipe_name); + + if (_pipe_ch == -1) { + PX4_ERR("Pipe create failed for %s", pipe_name); + return false; + } + + if (!_vehicle_local_position_sub.registerCallback()) { + PX4_ERR("callback registration failed"); + return false; + } + + return true; +} + +void VehicleLocalPositionBridge::Run() +{ + if (should_exit()) { + _vehicle_local_position_sub.unregisterCallback(); + exit_and_cleanup(desc); + return; + } + + if (_vehicle_local_position_sub.updated()) { + if (_vehicle_local_position_sub.update(&_vehicle_local_position)) { + // Only publish if we have valid position data + if (!_vehicle_local_position.xy_valid && !_vehicle_local_position.z_valid) { + return; + } + + pose_vel_6dof_t pose; + + pose.magic_number = POSE_VEL_6DOF_MAGIC_NUMBER; + pose.timestamp_ns = _vehicle_local_position.timestamp * 1000; // Convert µs to ns + + // Position (NED frame) + if (_vehicle_local_position.xy_valid) { + pose.T_child_wrt_parent[0] = _vehicle_local_position.x; + pose.T_child_wrt_parent[1] = _vehicle_local_position.y; + + } else { + pose.T_child_wrt_parent[0] = NAN; + pose.T_child_wrt_parent[1] = NAN; + } + + if (_vehicle_local_position.z_valid) { + pose.T_child_wrt_parent[2] = _vehicle_local_position.z; + + } else { + pose.T_child_wrt_parent[2] = NAN; + } + + // Rotation matrix from heading (yaw rotation around Z axis) + // R_z(heading) = [cos(h) -sin(h) 0] + // [sin(h) cos(h) 0] + // [0 0 1] + float cos_h = cosf(_vehicle_local_position.heading); + float sin_h = sinf(_vehicle_local_position.heading); + pose.R_child_to_parent[0][0] = cos_h; + pose.R_child_to_parent[0][1] = -sin_h; + pose.R_child_to_parent[0][2] = 0.0f; + pose.R_child_to_parent[1][0] = sin_h; + pose.R_child_to_parent[1][1] = cos_h; + pose.R_child_to_parent[1][2] = 0.0f; + pose.R_child_to_parent[2][0] = 0.0f; + pose.R_child_to_parent[2][1] = 0.0f; + pose.R_child_to_parent[2][2] = 1.0f; + + // Velocity (NED frame) + if (_vehicle_local_position.v_xy_valid) { + pose.v_child_wrt_parent[0] = _vehicle_local_position.vx; + pose.v_child_wrt_parent[1] = _vehicle_local_position.vy; + + } else { + pose.v_child_wrt_parent[0] = NAN; + pose.v_child_wrt_parent[1] = NAN; + } + + if (_vehicle_local_position.v_z_valid) { + pose.v_child_wrt_parent[2] = _vehicle_local_position.vz; + + } else { + pose.v_child_wrt_parent[2] = NAN; + } + + // Angular velocity not available in vehicle_local_position + pose.w_child_wrt_child[0] = NAN; + pose.w_child_wrt_child[1] = NAN; + pose.w_child_wrt_child[2] = NAN; + + if (MPA::PipeWrite(_pipe_ch, (void *)&pose, sizeof(pose_vel_6dof_t)) == -1) { + PX4_ERR("Pipe %d write failed!", _pipe_ch); + } + } + } +} + +int VehicleLocalPositionBridge::custom_command(int argc, char *argv[]) +{ + return print_usage("unknown command"); +} + +int VehicleLocalPositionBridge::task_spawn(int argc, char *argv[]) +{ + VehicleLocalPositionBridge *instance = new VehicleLocalPositionBridge(); + + if (instance) { + desc.object.store(instance); + desc.task_id = task_id_is_work_queue; + + if (instance->init()) { + return PX4_OK; + } + + } else { + PX4_ERR("alloc failed"); + } + + delete instance; + desc.object.store(nullptr); + desc.task_id = -1; + + return PX4_ERROR; +} + +int VehicleLocalPositionBridge::print_usage(const char *reason) +{ + if (reason) { + PX4_WARN("%s\n", reason); + } + + PRINT_MODULE_DESCRIPTION( + R"DESCR_STR( +### Description +Vehicle local position bridge - publishes vehicle_local_position to MPA pipe as pose_vel_6dof_t + +)DESCR_STR"); + + PRINT_MODULE_USAGE_NAME("vehicle_local_position_bridge", "system"); + PRINT_MODULE_USAGE_COMMAND("start"); + PRINT_MODULE_USAGE_DEFAULT_COMMANDS(); + + return 0; +} + +extern "C" __EXPORT int vehicle_local_position_bridge_main(int argc, char *argv[]) +{ + return ModuleBase::main(VehicleLocalPositionBridge::desc, argc, argv); +} diff --git a/src/drivers/distance_sensor/ll40ls/parameters.c b/boards/modalai/voxl2/src/spi_posix.cpp similarity index 84% rename from src/drivers/distance_sensor/ll40ls/parameters.c rename to boards/modalai/voxl2/src/spi_posix.cpp index 327c3715d1..6e0efd2cf3 100644 --- a/src/drivers/distance_sensor/ll40ls/parameters.c +++ b/boards/modalai/voxl2/src/spi_posix.cpp @@ -1,6 +1,6 @@ /**************************************************************************** * - * Copyright (c) 2017-2019 PX4 Development Team. All rights reserved. + * Copyright (C) 2025-2026 PX4 Development Team. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -31,15 +31,10 @@ * ****************************************************************************/ -/** - * Lidar-Lite (LL40LS) - * - * @reboot_required true - * @min 0 - * @max 2 - * @group Sensors - * @value 0 Disabled - * @value 1 PWM - * @value 2 I2C - */ -PARAM_DEFINE_INT32(SENS_EN_LL40LS, 0); +#include +#include +#include + +constexpr px4_spi_bus_t px4_spi_buses[SPI_BUS_MAX_BUS_ITEMS] = { + initSPIBus(1, {initSPIDevice(DRV_IMU_DEVTYPE_ICM42688P, 0), }), +}; diff --git a/boards/modalai/voxl2-slpi/src/spi.cpp b/boards/modalai/voxl2/src/spi_qurt.cpp similarity index 94% rename from boards/modalai/voxl2-slpi/src/spi.cpp rename to boards/modalai/voxl2/src/spi_qurt.cpp index cd8eea2a72..6bff3f87a0 100644 --- a/boards/modalai/voxl2-slpi/src/spi.cpp +++ b/boards/modalai/voxl2/src/spi_qurt.cpp @@ -36,5 +36,5 @@ #include constexpr px4_spi_bus_t px4_spi_buses[SPI_BUS_MAX_BUS_ITEMS] = { - initSPIBus(1, {initSPIDevice(DRV_IMU_DEVTYPE_ICM42688P), }), + initSPIBus(1, {initSPIDevice(DRV_IMU_DEVTYPE_ICM42688P), initSPIDevice(DRV_IMU_DEVTYPE_BMI270), }), }; diff --git a/boards/modalai/voxl2/target/voxl-px4 b/boards/modalai/voxl2/target/voxl-px4 index 514fc026bb..861a4a8f2e 100755 --- a/boards/modalai/voxl2/target/voxl-px4 +++ b/boards/modalai/voxl2/target/voxl-px4 @@ -1,11 +1,13 @@ -#!/bin/bash +#!/usr/bin/env bash CONFIG_FILE="/etc/modalai/voxl-px4.conf" +AIRFRAME=MULTICOPTER GPS=NONE RC=SPEKTRUM ESC=VOXL_ESC POWER_MANAGER=VOXLPM +AIRSPEED_SENSOR=NONE DISTANCE_SENSOR=NONE OSD=DISABLE DAEMON_MODE=DISABLE @@ -27,10 +29,12 @@ if /bin/ls /usr/lib/rfsa/adsp/testsig-*.so &> /dev/null; then /bin/echo "Found DSP signature file" else /bin/echo "[WARNING] Could not find DSP signature file" - # Look for the DSP signature generation script - if [ -f /share/modalai/qrb5165-slpi-test-sig/generate-test-sig.sh ]; then - /bin/echo "[INFO] Attempting to generate the DSP signature file" - # Automatically generate the test signature so that px4 can run on SLPI DSP + # Look for the DSP signature generation script (platform-specific) + if [ -f /share/modalai/qcs6490-slpi-test-sig/generate-test-sig.sh ]; then + /bin/echo "[INFO] Attempting to generate the DSP signature file (qcs6490)" + /share/modalai/qcs6490-slpi-test-sig/generate-test-sig.sh + elif [ -f /share/modalai/qrb5165-slpi-test-sig/generate-test-sig.sh ]; then + /bin/echo "[INFO] Attempting to generate the DSP signature file (qrb5165)" /share/modalai/qrb5165-slpi-test-sig/generate-test-sig.sh else /bin/echo "[ERROR] Could not find the DSP signature file generation script" @@ -39,13 +43,16 @@ else fi print_usage() { - echo -e "\nUsage: voxl-px4 [-b (Specify Holybro GPS unit)]" + echo -e "\nUsage: voxl-px4 [-a (Specify Airspeed Sensor)]" + echo " [-b (Specify Holybro GPS unit)]" echo " [-c delete configuration file and exit]" echo " [-d start px4 without daemon mode]" echo " [-f (Use fake rc input instead of from a real transmitter)]" echo " [-m (Specify Matek GPS unit)]" echo " [-o (Start OSD module on the apps processor)]" + echo " [-p (Specify Fixed Wing airframe selected)]" echo " [-r (Specify TBS Crossfire RC receiver, MAVLINK)]" + echo " [-S (Start in SIH simulation mode)]" echo " [-w (Specify TBS Crossfire RC receiver, raw)]" echo " [-z (Use fake sensor calibration values)]" echo " [-h (show help)]" @@ -55,10 +62,12 @@ print_usage() { print_config_settings(){ echo -e "\n*************************" + echo "AIRFRAME=$AIRFRAME" echo "GPS=$GPS" echo "RC=$RC" echo "ESC=$ESC" echo "POWER MANAGER=$POWER_MANAGER" + echo "AIRSPEED SENSOR=$AIRSPEED_SENSOR" echo "DISTANCE SENSOR=$DISTANCE_SENSOR" echo "OSD=$OSD" echo "DAEMON_MODE=$DAEMON_MODE" @@ -71,9 +80,13 @@ print_config_settings(){ echo -e "*************************\n" } -while getopts "bcdhfmorwz" flag +while getopts "abcdhfmoprSwz" flag do case "${flag}" in + a) + echo "[INFO] MRO AIRSPEED Sensor selected" + AIRSPEED_SENSOR=MS4525DO + ;; b) echo "[INFO] Holybro GPS selected" GPS=HOLYBRO @@ -104,10 +117,19 @@ do echo "[INFO] OSD module selected" OSD=ENABLE ;; + p) + echo "[INFO] Airframe Selected as Fixed Wing" + AIRFRAME=FIXED_WING + ;; r) echo "[INFO] TBS Crossfire RC receiver, MAVLINK selected" RC=CRSF_MAV ;; + S) + echo "[INFO] SIH simulation mode selected" + px4 -s /usr/bin/voxl-px4-sih-start + exit 0 + ;; w) echo "[INFO] TBS Crossfire RC receiver, raw selected" RC=CRSF_RAW @@ -137,5 +159,6 @@ fi print_config_settings -GPS=$GPS RC=$RC ESC=$ESC POWER_MANAGER=$POWER_MANAGER DISTANCE_SENSOR=$DISTANCE_SENSOR \ -OSD=$OSD EXTRA_STEPS=$EXTRA_STEPS px4 $DAEMON -s /usr/bin/voxl-px4-start +AIRFRAME=$AIRFRAME GPS=$GPS RC=$RC ESC=$ESC POWER_MANAGER=$POWER_MANAGER DISTANCE_SENSOR=$DISTANCE_SENSOR \ +AIRSPEED_SENSOR=$AIRSPEED_SENSOR OSD=$OSD EXTRA_STEPS=$EXTRA_STEPS \ +px4 $DAEMON -s /usr/bin/voxl-px4-start diff --git a/boards/modalai/voxl2/target/voxl-px4-hitl b/boards/modalai/voxl2/target/voxl-px4-hitl index c2b2f41583..9e84134366 100755 --- a/boards/modalai/voxl2/target/voxl-px4-hitl +++ b/boards/modalai/voxl2/target/voxl-px4-hitl @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Make sure that the SLPI DSP test signature is there otherwise px4 cannot run # on the DSP @@ -6,10 +6,12 @@ if /bin/ls /usr/lib/rfsa/adsp/testsig-*.so &> /dev/null; then /bin/echo "Found DSP signature file" else /bin/echo "[WARNING] Could not find DSP signature file" - # Look for the DSP signature generation script - if [ -f /share/modalai/qrb5165-slpi-test-sig/generate-test-sig.sh ]; then - /bin/echo "[INFO] Attempting to generate the DSP signature file" - # Automatically generate the test signature so that px4 can run on SLPI DSP + # Look for the DSP signature generation script (platform-specific) + if [ -f /share/modalai/qcs6490-slpi-test-sig/generate-test-sig.sh ]; then + /bin/echo "[INFO] Attempting to generate the DSP signature file (qcs6490)" + /share/modalai/qcs6490-slpi-test-sig/generate-test-sig.sh + elif [ -f /share/modalai/qrb5165-slpi-test-sig/generate-test-sig.sh ]; then + /bin/echo "[INFO] Attempting to generate the DSP signature file (qrb5165)" /share/modalai/qrb5165-slpi-test-sig/generate-test-sig.sh else /bin/echo "[ERROR] Could not find the DSP signature file generation script" diff --git a/boards/modalai/voxl2/target/voxl-px4-hitl-start b/boards/modalai/voxl2/target/voxl-px4-hitl-start index 3f8bcdd503..61fd15e602 100755 --- a/boards/modalai/voxl2/target/voxl-px4-hitl-start +++ b/boards/modalai/voxl2/target/voxl-px4-hitl-start @@ -17,13 +17,15 @@ if [ $RETURNCODE -ne 0 ]; then fi fi -# We can only run on M0052, M0054, or M0104 so exit with error if that is not the case +# We can only run on M0052, M0054, M0104, or M0197 so exit with error if that is not the case if [ $PLATFORM = "M0052" ]; then /bin/echo "Running on M0052" elif [ $PLATFORM = "M0054" ]; then /bin/echo "Running on M0054" elif [ $PLATFORM = "M0104" ]; then /bin/echo "Running on M0104" +elif [ $PLATFORM = "M0197" ]; then + /bin/echo "Running on M0197" else /bin/echo "Error, cannot determine platform!" exit 0 @@ -76,7 +78,11 @@ microdds_client start -t udp -h 127.0.0.1 -p 8888 qshell pwm_out_sim start -m hil # g = gps, m = mag, o = odometry (vio), h = distance sensor, f = optic flow # qshell dsp_hitl start -g -m -o -h -f -qshell dsp_hitl start -g -m +if [ "$PLATFORM" == "M0197" ]; then + qshell dsp_hitl start -g -m -p 6 +else + qshell dsp_hitl start -g -m +fi # start the onboard fast link to connect to voxl-mavlink-server mavlink start -x -u 14556 -o 14557 -r 100000 -n lo -m onboard @@ -96,3 +102,5 @@ logger start -t -b 256 /bin/sleep 1 mavlink boot_complete + +sensor_imu_raw_bridge start diff --git a/boards/modalai/voxl2/target/voxl-px4-sih-set-default-parameters.config b/boards/modalai/voxl2/target/voxl-px4-sih-set-default-parameters.config new file mode 100644 index 0000000000..8515b7c927 --- /dev/null +++ b/boards/modalai/voxl2/target/voxl-px4-sih-set-default-parameters.config @@ -0,0 +1,71 @@ +# Default parameters for SIH (Simulator in Hardware) mode + +param select /data/px4/param/sih_parameters + +# Load in all of the current parameters that have been saved in the file +param load + +# Set airframe type +param set SYS_AUTOCONFIG 1 +param set SYS_AUTOSTART 4001 + +# Simulated accelerometer calibration (device ID 1310988 = DRV_IMU_DEVTYPE_SIM) +param set CAL_ACC0_ID 1310988 +param set CAL_ACC0_PRIO 75 +param set CAL_ACC0_ROT -1 +param set CAL_ACC0_XOFF 0.0 +param set CAL_ACC0_XSCALE 1.0 +param set CAL_ACC0_YOFF 0.0 +param set CAL_ACC0_YSCALE 1.0 +param set CAL_ACC0_ZOFF 0.0 +param set CAL_ACC0_ZSCALE 1.0 + +# Simulated gyroscope calibration (device ID 1310988 = DRV_IMU_DEVTYPE_SIM) +param set CAL_GYRO0_ID 1310988 +param set CAL_GYRO0_PRIO 75 +param set CAL_GYRO0_ROT -1 +param set CAL_GYRO0_XOFF 0.0 +param set CAL_GYRO0_YOFF 0.0 +param set CAL_GYRO0_ZOFF 0.0 + +# Simulated magnetometer calibration +param set CAL_MAG0_ID 197388 +param set CAL_MAG0_PRIO 75 +param set CAL_MAG0_ROT -1 +param set CAL_MAG0_XOFF 0.0 +param set CAL_MAG0_XSCALE 1.0 +param set CAL_MAG0_YOFF 0.0 +param set CAL_MAG0_YSCALE 1.0 +param set CAL_MAG0_ZOFF 0.0 +param set CAL_MAG0_ZSCALE 1.0 + +# Control allocation: map HIL_ACT outputs to motor functions +# pwm_out_sim uses HIL_ACT prefix on non-SITL boards +param set HIL_ACT_FUNC1 101 +param set HIL_ACT_FUNC2 102 +param set HIL_ACT_FUNC3 103 +param set HIL_ACT_FUNC4 104 + +# Rotor configuration for control allocator (quadrotor X) +param set CA_ROTOR_COUNT 4 +param set CA_AIRFRAME 0 +param set CA_ROTOR0_PX 1 +param set CA_ROTOR0_PY 1 +param set CA_ROTOR1_PX -1 +param set CA_ROTOR1_PY -1 +param set CA_ROTOR2_PX 1 +param set CA_ROTOR2_PY -1 +param set CA_ROTOR2_KM -0.05 +param set CA_ROTOR3_PX -1 +param set CA_ROTOR3_PY 1 +param set CA_ROTOR3_KM -0.05 + +# Vehicle type: quadrotor (required for multicopter position control) +param set MAV_TYPE 2 + +# Disable power supply check (no real battery in SIH mode) +param set CBRK_SUPPLY_CHK 894281 + +param save + +sleep 2 diff --git a/boards/modalai/voxl2/target/voxl-px4-sih-start b/boards/modalai/voxl2/target/voxl-px4-sih-start new file mode 100755 index 0000000000..b0ea470547 --- /dev/null +++ b/boards/modalai/voxl2/target/voxl-px4-sih-start @@ -0,0 +1,124 @@ +#!/bin/sh +# PX4 commands need the 'px4-' prefix in bash. +# (px4-alias.sh is expected to be in the PATH) +. px4-alias.sh + +echo -e "\n*************************" +echo "SIH Simulation Mode" +echo -e "*************************\n" + +# Sleep a little here. A lot happens when the uorb and muorb start +# and we need to make sure that it all completes successfully to avoid +# any possible race conditions. +/bin/sleep 1 + +# Set up the default sih parameters if the dedicated sih parameter file doesn't exist yet. +if [ ! -f /data/px4/param/sih_parameters ]; then + echo "[INFO] Setting default parameters for PX4 SIH on voxl" + . /etc/modalai/voxl-px4-sih-set-default-parameters.config + /bin/sync +# Otherwise load existing sih parameters +else + param select /data/px4/param/sih_parameters + param load +fi + +# Start simulated sensor drivers on DSP +/bin/echo "Starting simulated sensor drivers on DSP" +qshell simulator_sih start +qshell sensor_baro_sim start +qshell sensor_gps_sim start +qshell sensor_mag_sim start +qshell pwm_out_sim start + +# We do not change the value of SYS_AUTOCONFIG but if it does not +# show up as used then it is not reported to QGC and we get a +# missing parameter error. Also, we don't use SYS_AUTOSTART but QGC +# complains about it as well. +param touch SYS_AUTOCONFIG +param touch SYS_AUTOSTART + +# Start all of the processing modules on DSP +qshell sensors start +qshell ekf2 start + +qshell mc_pos_control start +qshell mc_att_control start +qshell mc_rate_control start +qshell mc_hover_thrust_estimator start +qshell mc_autotune_attitude_control start +qshell land_detector start multicopter + +qshell manual_control start +qshell control_allocator start +qshell load_mon start +qshell rc_update start + +qshell commander start + +# This is needed for altitude and position hold modes +qshell flight_mode_manager start + +# Start all of the processing modules on the applications processor +dataman start +navigator start +vehicle_air_data_bridge start +sensor_baro_bridge start +vehicle_local_position_bridge start +sih_vio_bridge start + +# Start uxrce_dds_client for ros2 offboard messages from agent over localhost +uxrce_dds_client start -t udp -h 127.0.0.1 -p 8888 + +# start the onboard fast link to connect to voxl-mavlink-server +mavlink start -x -u 14556 -o 14557 -r 100000 -n lo -m onboard + +# slow down some of the fastest streams +mavlink stream -u 14556 -s HIGHRES_IMU -r 10 +mavlink stream -u 14556 -s ATTITUDE -r 10 +mavlink stream -u 14556 -s ATTITUDE_QUATERNION -r 10 +mavlink stream -u 14556 -s GLOBAL_POSITION_INT -r 30 +mavlink stream -u 14556 -s SCALED_PRESSURE -r 10 + +# Increase heartbeat rate so VFC can get faster mode updates +mavlink stream -u 14556 -s HEARTBEAT -r 10 + +# start the slow normal mode for voxl-mavlink-server to forward to GCS +mavlink start -x -u 14558 -o 14559 -r 100000 -n lo + +# Start the jmavsim visualization stream. Change -t ip address to your desired endpoint +# TODO: Should go through voxl-mavlink-server, not just direct like this +# mavlink start -x -u 14560 -o 14560 -r 4000000 -t 192.168.101.1 -m minimal +# mavlink stream -u 14560 -s HIL_STATE_QUATERNION -r 200 + +mavlink boot_complete + +# Start logging module. This is done as the last step because any topics +# marked as optional will only be logged if they have been advertised when +# this is started. By starting it last it makes sure to see those +# advertisements as the other modules are starting before it. +# +# Set logger mode based on SDLOG_MODE parameter: +# 0: log when armed until disarm (default) +# 1: log from boot until disarm +# 2: log from boot until shutdown +# 3: log based on AUX1 RC channel +# 4: log from first armed until shutdown +LOGGER_ARGS="" +if param compare SDLOG_MODE 1 +then + LOGGER_ARGS="-e" +fi +if param compare SDLOG_MODE 2 +then + LOGGER_ARGS="-f" +fi +if param compare SDLOG_MODE 3 +then + LOGGER_ARGS="-x" +fi +if param compare SDLOG_MODE 4 +then + LOGGER_ARGS="-a" +fi +logger start $LOGGER_ARGS diff --git a/boards/modalai/voxl2/target/voxl-px4-start b/boards/modalai/voxl2/target/voxl-px4-start index aadb8ae1cc..0f761b37a5 100755 --- a/boards/modalai/voxl2/target/voxl-px4-start +++ b/boards/modalai/voxl2/target/voxl-px4-start @@ -4,10 +4,12 @@ . px4-alias.sh echo -e "\n*************************" +echo "AIRFRAME: $AIRFRAME" echo "GPS: $GPS" echo "RC: $RC" echo "ESC: $ESC" echo "POWER MANAGER: $POWER_MANAGER" +echo "AIRSPEED SENSOR: $AIRSPEED_SENSOR" echo "DISTANCE SENSOR: $DISTANCE_SENSOR" echo "OSD: $OSD" echo "EXTRA STEPS:" @@ -23,6 +25,8 @@ echo -e "*************************\n" # and modules manually from the px4 command shell if [ ! -z $MINIMAL_PX4 ]; then /bin/echo "Running minimal script" + param select /data/px4/param/parameters + param load exit 0 fi @@ -33,23 +37,30 @@ if [ $RETURNCODE -ne 0 ]; then # If we couldn't get the platform from the voxl-platform utility then check # /etc/version to see if there is an M0052 substring in the version string. If so, # then we assume that we are on M0052. - VERSIONSTRING=$( + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name NuttX nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ************************************************************************************/ + +#ifndef __ARCH_BOARD_BOARD_H +#define __ARCH_BOARD_BOARD_H + +/************************************************************************************ + * Included Files + ************************************************************************************/ +#include "board_dma_map.h" + +#include +#ifndef __ASSEMBLY__ +# include +#endif + +#include + +/************************************************************************************ + * Definitions + ************************************************************************************/ + +/* Clocking *************************************************************************/ +/* The SaamPixV1_1 uses a 8MHz crystal connected to the HSE. + * + * This is the "standard" configuration as set up by arch/arm/src/stm32f40xx_rcc.c: + * System Clock source : PLL (HSE) + * SYSCLK(Hz) : 168000000 Determined by PLL configuration + * HCLK(Hz) : 168000000 (STM32_RCC_CFGR_HPRE) + * AHB Prescaler : 1 (STM32_RCC_CFGR_HPRE) + * APB1 Prescaler : 4 (STM32_RCC_CFGR_PPRE1) + * APB2 Prescaler : 2 (STM32_RCC_CFGR_PPRE2) + * HSE Frequency(Hz) : 8000000 (STM32_BOARD_XTAL) + * PLLM : 8 (STM32_PLLCFG_PLLM) + * PLLN : 336 (STM32_PLLCFG_PLLN) + * PLLP : 2 (STM32_PLLCFG_PLLP) + * PLLQ : 7 (STM32_PLLCFG_PPQ) + * Main regulator output voltage : Scale1 mode Needed for high speed SYSCLK + * Flash Latency(WS) : 5 + * Prefetch Buffer : OFF + * Instruction cache : ON + * Data cache : ON + * Require 48MHz for USB OTG FS, : Enabled + * SDIO and RNG clock + */ + +/* HSI - 16 MHz RC factory-trimmed + * LSI - 32 KHz RC + * HSE - On-board crystal frequency is 8MHz + * LSE - not installed + */ + +#define STM32_BOARD_XTAL 8000000ul + +#define STM32_HSI_FREQUENCY 16000000ul +#define STM32_LSI_FREQUENCY 32000 +#define STM32_HSE_FREQUENCY STM32_BOARD_XTAL +//#define STM32_LSE_FREQUENCY 32768 + +/* Main PLL Configuration. + * + * PLL source is HSE + * PLL_VCO = (STM32_HSE_FREQUENCY / PLLM) * PLLN + * = (8,000,000 / 8) * 336 + * = 336,000,000 + * SYSCLK = PLL_VCO / PLLP + * = 336,000,000 / 2 = 168,000,000 + * USB OTG FS, SDIO and RNG Clock + * = PLL_VCO / PLLQ + * = 48,000,000 + */ + +#define STM32_PLLCFG_PLLM RCC_PLLCFG_PLLM(8) +#define STM32_PLLCFG_PLLN RCC_PLLCFG_PLLN(336) +#define STM32_PLLCFG_PLLP RCC_PLLCFG_PLLP_2 +#define STM32_PLLCFG_PLLQ RCC_PLLCFG_PLLQ(7) + +#define STM32_SYSCLK_FREQUENCY 168000000ul + +/* AHB clock (HCLK) is SYSCLK (168MHz) */ + +#define STM32_RCC_CFGR_HPRE RCC_CFGR_HPRE_SYSCLK /* HCLK = SYSCLK / 1 */ +#define STM32_HCLK_FREQUENCY STM32_SYSCLK_FREQUENCY +#define STM32_BOARD_HCLK STM32_HCLK_FREQUENCY /* same as above, to satisfy compiler */ + +/* APB1 clock (PCLK1) is HCLK/4 (42MHz) */ + +#define STM32_RCC_CFGR_PPRE1 RCC_CFGR_PPRE1_HCLKd4 /* PCLK1 = HCLK / 4 */ +#define STM32_PCLK1_FREQUENCY (STM32_HCLK_FREQUENCY/4) + +/* Timers driven from APB1 will be twice PCLK1 */ + +#define STM32_APB1_TIM2_CLKIN (2*STM32_PCLK1_FREQUENCY) +#define STM32_APB1_TIM3_CLKIN (2*STM32_PCLK1_FREQUENCY) +#define STM32_APB1_TIM4_CLKIN (2*STM32_PCLK1_FREQUENCY) +#define STM32_APB1_TIM5_CLKIN (2*STM32_PCLK1_FREQUENCY) +#define STM32_APB1_TIM6_CLKIN (2*STM32_PCLK1_FREQUENCY) +#define STM32_APB1_TIM7_CLKIN (2*STM32_PCLK1_FREQUENCY) +#define STM32_APB1_TIM12_CLKIN (2*STM32_PCLK1_FREQUENCY) +#define STM32_APB1_TIM13_CLKIN (2*STM32_PCLK1_FREQUENCY) +#define STM32_APB1_TIM14_CLKIN (2*STM32_PCLK1_FREQUENCY) + +/* APB2 clock (PCLK2) is HCLK/2 (84MHz) */ + +#define STM32_RCC_CFGR_PPRE2 RCC_CFGR_PPRE2_HCLKd2 /* PCLK2 = HCLK / 2 */ +#define STM32_PCLK2_FREQUENCY (STM32_HCLK_FREQUENCY/2) + +/* Timers driven from APB2 will be twice PCLK2 */ + +#define STM32_APB2_TIM1_CLKIN (2*STM32_PCLK2_FREQUENCY) +#define STM32_APB2_TIM8_CLKIN (2*STM32_PCLK2_FREQUENCY) +#define STM32_APB2_TIM9_CLKIN (2*STM32_PCLK2_FREQUENCY) +#define STM32_APB2_TIM10_CLKIN (2*STM32_PCLK2_FREQUENCY) +#define STM32_APB2_TIM11_CLKIN (2*STM32_PCLK2_FREQUENCY) + +/* Timer Frequencies, if APBx is set to 1, frequency is same to APBx + * otherwise frequency is 2xAPBx. + * Note: TIM1,8-11 are on APB2, others on APB1 + */ + +#define BOARD_TIM1_FREQUENCY STM32_APB2_TIM1_CLKIN +#define BOARD_TIM2_FREQUENCY STM32_APB1_TIM2_CLKIN +#define BOARD_TIM3_FREQUENCY STM32_APB1_TIM3_CLKIN +#define BOARD_TIM4_FREQUENCY STM32_APB1_TIM4_CLKIN +#define BOARD_TIM5_FREQUENCY STM32_APB1_TIM5_CLKIN +#define BOARD_TIM6_FREQUENCY STM32_APB1_TIM6_CLKIN +#define BOARD_TIM7_FREQUENCY STM32_APB1_TIM7_CLKIN +#define BOARD_TIM8_FREQUENCY STM32_APB2_TIM8_CLKIN +#define BOARD_TIM9_FREQUENCY STM32_APB2_TIM9_CLKIN +#define BOARD_TIM10_FREQUENCY STM32_APB2_TIM10_CLKIN +#define BOARD_TIM11_FREQUENCY STM32_APB2_TIM11_CLKIN +#define BOARD_TIM12_FREQUENCY STM32_APB1_TIM12_CLKIN +#define BOARD_TIM13_FREQUENCY STM32_APB1_TIM13_CLKIN +#define BOARD_TIM14_FREQUENCY STM32_APB1_TIM14_CLKIN + +/* SDIO dividers. Note that slower clocking is required when DMA is disabled + * in order to avoid RX overrun/TX underrun errors due to delayed responses + * to service FIFOs in interrupt driven mode. These values have not been + * tuned!!! + * + * SDIOCLK=48MHz, SDIO_CK=SDIOCLK/(118+2)=400 KHz + */ + +#define SDIO_INIT_CLKDIV (118 << SDIO_CLKCR_CLKDIV_SHIFT) + +/* DMA ON: SDIOCLK=48MHz, SDIO_CK=SDIOCLK/(1+2)=16 MHz + * DMA OFF: SDIOCLK=48MHz, SDIO_CK=SDIOCLK/(2+2)=12 MHz + */ + +#ifdef CONFIG_STM32_SDIO_DMA +# define SDIO_MMCXFR_CLKDIV (1 << SDIO_CLKCR_CLKDIV_SHIFT) +#else +# define SDIO_MMCXFR_CLKDIV (2 << SDIO_CLKCR_CLKDIV_SHIFT) +#endif + +/* DMA ON: SDIOCLK=48MHz, SDIO_CK=SDIOCLK/(1+2)=16 MHz + * DMA OFF: SDIOCLK=48MHz, SDIO_CK=SDIOCLK/(2+2)=12 MHz + */ + +#ifdef CONFIG_STM32_SDIO_DMA +# define SDIO_SDXFR_CLKDIV (1 << SDIO_CLKCR_CLKDIV_SHIFT) +#else +# define SDIO_SDXFR_CLKDIV (2 << SDIO_CLKCR_CLKDIV_SHIFT) +#endif + +/* Alternate function pin selections ************************************************/ + +/* + * UARTs. + */ +#define GPIO_USART1_RX GPIO_USART1_RX_2 /* RC_INPUT */ +#define GPIO_USART1_TX GPIO_USART1_TX_2 + +#define GPIO_USART2_RX GPIO_USART2_RX_2 +#define GPIO_USART2_TX GPIO_USART2_TX_2 +#define GPIO_USART2_RTS GPIO_USART2_RTS_2 +#define GPIO_USART2_CTS GPIO_USART2_CTS_2 + +#define GPIO_USART3_RX GPIO_USART3_RX_3 +#define GPIO_USART3_TX GPIO_USART3_TX_3 +#define GPIO_USART3_CTS 0 // unused +#define GPIO_USART3_RTS 0 // unused + +#define GPIO_UART4_RX GPIO_UART4_RX_1 +#define GPIO_UART4_TX GPIO_UART4_TX_1 + +#define GPIO_USART6_RX GPIO_USART6_RX_2 +#define GPIO_USART6_TX GPIO_USART6_TX_2 + +#define GPIO_UART7_RX GPIO_UART7_RX_1 +#define GPIO_UART7_TX GPIO_UART7_TX_1 + +/* UART8 has no alternate pin config */ + +/* + * CAN + * + * CAN1 is routed to the onboard transceiver. + */ +#define GPIO_CAN1_RX GPIO_CAN1_RX_3 +#define GPIO_CAN1_TX GPIO_CAN1_TX_3 + +/* + * I2C + * + * The optional _GPIO configurations allow the I2C driver to manually + * reset the bus to clear stuck slaves. They match the pin configuration, + * but are normally-high GPIOs. + */ +#define GPIO_I2C1_SCL GPIO_I2C1_SCL_2 +#define GPIO_I2C1_SDA GPIO_I2C1_SDA_2 +#define GPIO_I2C1_SCL_GPIO (GPIO_OUTPUT|GPIO_OPENDRAIN|GPIO_SPEED_50MHz|GPIO_OUTPUT_SET|GPIO_PORTB|GPIO_PIN8) +#define GPIO_I2C1_SDA_GPIO (GPIO_OUTPUT|GPIO_OPENDRAIN|GPIO_SPEED_50MHz|GPIO_OUTPUT_SET|GPIO_PORTB|GPIO_PIN9) + +#define GPIO_I2C2_SCL GPIO_I2C2_SCL_1 +#define GPIO_I2C2_SDA GPIO_I2C2_SDA_1 +#define GPIO_I2C2_SCL_GPIO (GPIO_OUTPUT|GPIO_OPENDRAIN|GPIO_SPEED_50MHz|GPIO_OUTPUT_SET|GPIO_PORTB|GPIO_PIN10) +#define GPIO_I2C2_SDA_GPIO (GPIO_OUTPUT|GPIO_OPENDRAIN|GPIO_SPEED_50MHz|GPIO_OUTPUT_SET|GPIO_PORTB|GPIO_PIN11) + +/* + * SPI + * + * There are sensors on SPI1, and SPI2 is connected to the FRAM. + */ +#define GPIO_SPI1_MISO (GPIO_SPI1_MISO_1|GPIO_SPEED_50MHz) +#define GPIO_SPI1_MOSI (GPIO_SPI1_MOSI_2|GPIO_SPEED_50MHz) +#define GPIO_SPI1_SCK (GPIO_SPI1_SCK_1|GPIO_SPEED_50MHz) + +#define GPIO_SPI2_MISO (GPIO_SPI2_MISO_1|GPIO_SPEED_50MHz) +#define GPIO_SPI2_MOSI (GPIO_SPI2_MOSI_1|GPIO_SPEED_50MHz) +#define GPIO_SPI2_SCK (GPIO_SPI2_SCK_2|GPIO_SPEED_50MHz) + +#define GPIO_SPI4_MISO (GPIO_SPI4_MISO_1|GPIO_SPEED_50MHz) +#define GPIO_SPI4_MOSI (GPIO_SPI4_MOSI_1|GPIO_SPEED_50MHz) +#define GPIO_SPI4_SCK (GPIO_SPI4_SCK_1|GPIO_SPEED_50MHz) + + +#endif /* __ARCH_BOARD_BOARD_H */ diff --git a/boards/saam/saampixv1_1/nuttx-config/include/board_dma_map.h b/boards/saam/saampixv1_1/nuttx-config/include/board_dma_map.h new file mode 100644 index 0000000000..c25b563cda --- /dev/null +++ b/boards/saam/saampixv1_1/nuttx-config/include/board_dma_map.h @@ -0,0 +1,87 @@ +/**************************************************************************** + * + * Copyright (c) 2020-2026 PX4 Development Team. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name PX4 nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +#pragma once + + +/* +| DMA1 | Stream 0 | Stream 1 | Stream 2 | Stream 3 | Stream 4 | Stream 5 | Stream 6 | Stream 7 | +|------------|------------------|------------------|------------------|------------------|------------------|------------------|------------------|------------------| +| Channel 0 | SPI3_RX_1 | - | SPI3_RX_2 | SPI2_RX | SPI2_TX | SPI3_TX_1 | - | SPI3_TX_2 | +| Channel 1 | I2C1_RX | - | TIM7_UP_1 | - | TIM7_UP_2 | I2C1_RX_1 | I2C1_TX | I2C1_TX_1 | +| Channel 2 | TIM4_CH1 | - | I2C4_RX | TIM4_CH2 | - | I2C4_RX | TIM4_UP | TIM4_CH3 | +| Channel 3 | - | TIM2_UP_1 | I2C3_RX_1 | I2C2_EXT_RX | I2C3_TX | TIM2_CH1 | TIM2_CH2 | TIM2_UP_2 | +| | | TIM2_CH3 | | | | | TIM2_CH4_1 | TIM2_CH4_2 | +| Channel 4 | UART5_RX | USART3_RX | UART4_RX | USART3_TX_1 | UART4_TX | USART2_RX | USART2_TX | UART5_TX | +| Channel 5 | UART8_TX | UART7_TX | TIM3_CH4 | UART7_RX | TIM3_CH1 | TIM3_CH2 | UART8_RX | TIM3_CH3 | +| | | | TIM3_UP | | TIM3_TRIG | | | | +| Channel 6 | TIM5_CH3 | TIM5_CH4_1 | TIM5_CH1 | TIM5_CH4_2 | TIM5_CH2 | - | TIM5_UP_2 | - | +| | TIM5_UP_1 | TIM5_TRIG_1 | | TIM5_TRIG_2 | | | | | +| Channel 7 | - | TIM6_UP | I2C2_RX | I2C2_RX_1 | USART3_TX_2 | DAC1 | DAC2 | I2C2_TX | +| | | | | | | | | | +| Usage | | | | | | | | | + + +| DMA2 | Stream 0 | Stream 1 | Stream 2 | Stream 3 | Stream 4 | Stream 5 | Stream 6 | Stream 7 | +|------------|------------------|------------------|------------------|------------------|------------------|------------------|------------------|------------------| +| Channel 0 | ADC1_1 | SAI1_A | TIM8_CH1_1 | SAI1_A_1 | ADC1_2 | SAI1_B_1 | TIM1_CH1_1 | - | +| | | | TIM8_CH2_1 | | | | TIM1_CH2_1 | | +| | | | TIM8_CH3_1 | | | | TIM1_CH3_1 | | +| Channel 1 | - | DCMI_1 | ADC2_1 | ADC2_2 | SAI1_B | SPI6_TX | SPI6_RX | DCMI_2 | +| Channel 2 | ADC3_1 | ADC3_2 | - | SPI5_RX_1 | SPI5_TX_1 | CRYP_OUT | CRYP_IN | HASH_IN | +| Channel 3 | SPI1_RX_1 | - | SPI1_RX_2 | SPI1_TX_1 | - | SPI1_TX_2 | - | QUADSPI | +| Channel 4 | SPI4_RX_1 | SPI4_TX_1 | USART1_RX_1 | SDIO | - | USART1_RX_2 | SDIO | USART1_TX | +| Channel 5 | - | USART6_RX_1 | USART6_RX_2 | SPI4_RX_2 | SPI4_TX_2 | - | USART6_TX_1 | USART6_TX_2 | +| Channel 6 | TIM1_TRIG_1 | TIM1_CH1_2 | TIM1_CH2_2 | TIM1_CH1 | TIM1_CH4 | TIM1_UP | TIM1_CH3_2 | - | +| | | | | | TIM1_TRIG_2 | | | | +| | | | | | TIM1_COM | | | | +| Channel 7 | - | TIM8_UP | TIM8_CH1_2 | TIM8_CH2_2 | TIM8_CH3_2 | SPI5_RX_2 | SPI5_TX_2 | TIM8_CH4 | +| | | | | | | | | TIM8_TRIG | +| | | | | | | | | TIM8_COM | +| | | | | | | | | | +| Usage | SPI4_RX_1 | USART6_RX_1 | USART1_RX_1 | | SPI4_TX_2 | | SDIO | | + */ + +// DMA1 Channel/Stream Selections +//--------------------------------------------//---------------------------//---------------- + + +// DMA2 Channel/Stream Selections +//--------------------------------------------//---------------------------//---------------- +#define DMACHAN_SPI4_RX DMAMAP_SPI4_RX_1 // DMA2, Stream 0, Channel 4 (SPI sensors RX) +#define DMAMAP_USART6_RX DMAMAP_USART6_RX_1 // DMA2, Stream 1, Channel 4 +#define DMAMAP_USART1_RX DMAMAP_USART1_RX_1 // DMA2, Stream 2, Channel 4 +// AVAILABLE // DMA2, Stream 3 +#define DMACHAN_SPI4_TX DMAMAP_SPI4_TX_2 // DMA2, Stream 4, Channel 5 (SPI sensors TX) +// AVAILABLE // DMA2, Stream 5, Channel 6 +#define DMAMAP_SDIO DMAMAP_SDIO_2 // DMA2, Stream 6, Channel 4 diff --git a/boards/xc-fly/xc-slam/nuttx-config/nsh/defconfig b/boards/saam/saampixv1_1/nuttx-config/nsh/defconfig similarity index 63% rename from boards/xc-fly/xc-slam/nuttx-config/nsh/defconfig rename to boards/saam/saampixv1_1/nuttx-config/nsh/defconfig index 64dc7a4b0c..be65922883 100644 --- a/boards/xc-fly/xc-slam/nuttx-config/nsh/defconfig +++ b/boards/saam/saampixv1_1/nuttx-config/nsh/defconfig @@ -50,46 +50,41 @@ # CONFIG_NSH_DISABLE_UMOUNT is not set # CONFIG_NSH_DISABLE_UNSET is not set # CONFIG_NSH_DISABLE_USLEEP is not set +# CONFIG_STM32_CCMEXCLUDE is not set CONFIG_ARCH="arm" CONFIG_ARCH_BOARD_CUSTOM=y -CONFIG_ARCH_BOARD_CUSTOM_DIR="../../../../boards/xc-fly/xc-slam/nuttx-config" +CONFIG_ARCH_BOARD_CUSTOM_DIR="../../../../boards/saam/saampixv1_1/nuttx-config" CONFIG_ARCH_BOARD_CUSTOM_DIR_RELPATH=y CONFIG_ARCH_BOARD_CUSTOM_NAME="px4" -CONFIG_ARCH_CHIP="stm32h7" -CONFIG_ARCH_CHIP_STM32H743VI=y -CONFIG_ARCH_CHIP_STM32H7=y +CONFIG_ARCH_CHIP="stm32" +CONFIG_ARCH_CHIP_STM32=y +CONFIG_ARCH_CHIP_STM32F427V=y CONFIG_ARCH_INTERRUPTSTACK=768 CONFIG_ARCH_STACKDUMP=y -CONFIG_ARMV7M_BASEPRI_WAR=y -CONFIG_ARMV7M_DCACHE=y -CONFIG_ARMV7M_DTCM=y -CONFIG_ARMV7M_ICACHE=y CONFIG_ARMV7M_MEMCPY=y CONFIG_ARMV7M_USEBASEPRI=y -CONFIG_ARM_MPU_EARLY_RESET=y CONFIG_BOARDCTL_RESET=y CONFIG_BOARD_ASSERT_RESET_VALUE=0 CONFIG_BOARD_CRASHDUMP=y -CONFIG_BOARD_LOOPSPERMSEC=95150 +CONFIG_BOARD_LOOPSPERMSEC=16717 CONFIG_BOARD_RESET_ON_ASSERT=2 CONFIG_BUILTIN=y CONFIG_CDCACM=y CONFIG_CDCACM_IFLOWCONTROL=y -CONFIG_CDCACM_PRODUCTID=0x0036 -CONFIG_CDCACM_PRODUCTSTR="X-MAV AP-H743v2" +CONFIG_CDCACM_PRODUCTID=0x008E +CONFIG_CDCACM_PRODUCTSTR="SaamPixV1_1 Flight Controller" CONFIG_CDCACM_RXBUFSIZE=600 -CONFIG_CDCACM_TXBUFSIZE=12000 -CONFIG_CDCACM_VENDORID=0x1B8C -CONFIG_CDCACM_VENDORSTR="X-MAV" +CONFIG_CDCACM_TXBUFSIZE=2000 +CONFIG_CDCACM_VENDORID=0x26ac +CONFIG_CDCACM_VENDORSTR="Saam Drones" CONFIG_DEBUG_FULLOPT=y CONFIG_DEBUG_HARDFAULT_ALERT=y -CONFIG_DEBUG_MEMFAULT=y CONFIG_DEBUG_SYMBOLS=y +CONFIG_DEBUG_TCBINFO=y CONFIG_DEFAULT_SMALL=y CONFIG_DEV_FIFO_SIZE=0 CONFIG_DEV_PIPE_MAXSIZE=1024 CONFIG_DEV_PIPE_SIZE=70 -CONFIG_EXPERIMENTAL=y CONFIG_FAT_DMAMEMORY=y CONFIG_FAT_LCNAMES=y CONFIG_FAT_LFN=y @@ -101,7 +96,6 @@ CONFIG_FS_FAT=y CONFIG_FS_FATTIME=y CONFIG_FS_PROCFS=y CONFIG_FS_PROCFS_INCLUDE_PROGMEM=y -CONFIG_FS_PROCFS_MAX_TASKS=64 CONFIG_FS_PROCFS_REGISTER=y CONFIG_FS_ROMFS=y CONFIG_GRAN=y @@ -113,8 +107,6 @@ CONFIG_I2C_RESET=y CONFIG_IDLETHREAD_STACKSIZE=750 CONFIG_INIT_ENTRYPOINT="nsh_main" CONFIG_INIT_STACKSIZE=3194 -CONFIG_IOB_NBUFFERS=24 -CONFIG_IOB_NCHAINS=24 CONFIG_LIBC_FLOATINGPOINT=y CONFIG_LIBC_LONG_LONG=y CONFIG_LIBC_MAX_EXITFUNS=1 @@ -124,14 +116,11 @@ CONFIG_MEMSET_OPTSPEED=y CONFIG_MMCSD=y CONFIG_MMCSD_SDIO=y CONFIG_MMCSD_SDIOWAIT_WRCOMPLETE=y -CONFIG_MM_IOB=y -CONFIG_MM_REGIONS=4 +CONFIG_MM_REGIONS=2 CONFIG_MTD=y CONFIG_MTD_BYTE_WRITE=y CONFIG_MTD_PARTITION=y -CONFIG_MTD_PROGMEM=y CONFIG_MTD_RAMTRON=y -CONFIG_MTD_W25=y CONFIG_NAME_MAX=40 CONFIG_NSH_ARCHINIT=y CONFIG_NSH_ARGCAT=y @@ -146,18 +135,17 @@ CONFIG_NSH_ROMFSETC=y CONFIG_NSH_ROMFSSECTSIZE=128 CONFIG_NSH_STRERROR=y CONFIG_NSH_VARS=y -CONFIG_OTG_ID_GPIO_DISABLE=y CONFIG_PIPES=y CONFIG_PREALLOC_TIMERS=50 CONFIG_PRIORITY_INHERITANCE=y CONFIG_PTHREAD_MUTEX_ROBUST=y CONFIG_PTHREAD_STACK_MIN=512 +CONFIG_RAMTRON_EMULATE_PAGE_SHIFT=5 +CONFIG_RAMTRON_EMULATE_SECTOR_SHIFT=5 CONFIG_RAMTRON_SETSPEED=y -CONFIG_RAM_SIZE=245760 -CONFIG_RAM_START=0x20010000 +CONFIG_RAM_SIZE=262144 +CONFIG_RAM_START=0x20000000 CONFIG_RAW_BINARY=y -CONFIG_READLINE_CMD_HISTORY=y -CONFIG_READLINE_TABCOMPLETION=y CONFIG_RTC_DATETIME=y CONFIG_SCHED_HPWORK=y CONFIG_SCHED_HPWORKPRIORITY=249 @@ -169,7 +157,7 @@ CONFIG_SCHED_LPWORK=y CONFIG_SCHED_LPWORKPRIORITY=50 CONFIG_SCHED_LPWORKSTACKSIZE=1632 CONFIG_SCHED_WAITPID=y -CONFIG_SDMMC1_SDIO_PULLUP=y +CONFIG_SDIO_BLOCKSETUP=y CONFIG_SEM_PREALLOCHOLDERS=32 CONFIG_SERIAL_IFLOWCONTROL_WATERMARKS=y CONFIG_SERIAL_TERMIOS=y @@ -181,88 +169,87 @@ CONFIG_SIG_SIGWORK=4 CONFIG_STACK_COLORATION=y CONFIG_START_DAY=30 CONFIG_START_MONTH=11 -CONFIG_STDIO_BUFFER_SIZE=256 -CONFIG_STM32H7_ADC1=y -CONFIG_STM32H7_ADC2=y -CONFIG_STM32H7_ADC3=y -CONFIG_STM32H7_BBSRAM=y -CONFIG_STM32H7_BBSRAM_FILES=5 -CONFIG_STM32H7_BDMA=y -CONFIG_STM32H7_BKPSRAM=y -CONFIG_STM32H7_DMA1=y -CONFIG_STM32H7_DMA2=y -CONFIG_STM32H7_DMACAPABLE=y -CONFIG_STM32H7_FLASH_OVERRIDE_I=y -CONFIG_STM32H7_FLOWCONTROL_BROKEN=y -CONFIG_STM32H7_I2C1=y -CONFIG_STM32H7_I2C4=y -CONFIG_STM32H7_I2C_DYNTIMEO=y -CONFIG_STM32H7_I2C_DYNTIMEO_STARTSTOP=10 -CONFIG_STM32H7_OTGFS=y -CONFIG_STM32H7_PROGMEM=y -CONFIG_STM32H7_RTC=y -CONFIG_STM32H7_RTC_HSECLOCK=y -CONFIG_STM32H7_RTC_MAGIC_REG=1 -CONFIG_STM32H7_SAVE_CRASHDUMP=y -CONFIG_STM32H7_SDMMC1=y -CONFIG_STM32H7_SERIALBRK_BSDCOMPAT=y -CONFIG_STM32H7_SERIAL_DISABLE_REORDERING=y -CONFIG_STM32H7_SPI1=y -CONFIG_STM32H7_SPI2=y -CONFIG_STM32H7_SPI2_DMA=y -CONFIG_STM32H7_SPI2_DMA_BUFFER=4096 -CONFIG_STM32H7_SPI3=y -CONFIG_STM32H7_SPI4=y -CONFIG_STM32H7_SPI_DMATHRESHOLD=8 -CONFIG_STM32H7_TIM1=y -CONFIG_STM32H7_TIM2=y -CONFIG_STM32H7_TIM3=y -CONFIG_STM32H7_TIM4=y -CONFIG_STM32H7_TIM8=y -CONFIG_STM32H7_UART4=y -CONFIG_STM32H7_UART5=y -CONFIG_STM32H7_UART7=y -CONFIG_STM32H7_UART8=y -CONFIG_STM32H7_USART1=y -CONFIG_STM32H7_USART2=y -CONFIG_STM32H7_USART3=y -CONFIG_STM32H7_USART6=y -CONFIG_STM32H7_USART_BREAKS=y -CONFIG_STM32H7_USART_INVERT=y -CONFIG_STM32H7_USART_SINGLEWIRE=y -CONFIG_STM32H7_USART_SWAP=y +CONFIG_STDIO_BUFFER_SIZE=32 +CONFIG_STM32_ADC1=y +CONFIG_STM32_BBSRAM=y +CONFIG_STM32_BBSRAM_FILES=5 +CONFIG_STM32_BKPSRAM=y +CONFIG_STM32_CCMDATARAM=y +CONFIG_STM32_DISABLE_IDLE_SLEEP_DURING_DEBUG=y +CONFIG_STM32_DMA1=y +CONFIG_STM32_DMA2=y +CONFIG_STM32_FLASH_CONFIG_I=y +CONFIG_STM32_FLOWCONTROL_BROKEN=y +CONFIG_STM32_I2C1=y +CONFIG_STM32_I2C2=y +CONFIG_STM32_I2CTIMEOMS=10 +CONFIG_STM32_I2CTIMEOTICKS=10 +CONFIG_STM32_JTAG_SW_ENABLE=y +CONFIG_STM32_OTGFS=y +CONFIG_STM32_PWR=y +CONFIG_STM32_RTC=y +CONFIG_STM32_RTC_HSECLOCK=y +CONFIG_STM32_RTC_MAGIC=0xfacefeee +CONFIG_STM32_RTC_MAGIC_REG=1 +CONFIG_STM32_RTC_MAGIC_TIME_SET=0xfacefeef +CONFIG_STM32_SAVE_CRASHDUMP=y +CONFIG_STM32_SDIO=y +CONFIG_STM32_SDIO_CARD=y +CONFIG_STM32_SERIALBRK_BSDCOMPAT=y +CONFIG_STM32_SERIAL_DISABLE_REORDERING=y +CONFIG_STM32_SPI1=y +CONFIG_STM32_SPI2=y +CONFIG_STM32_SPI4=y +CONFIG_STM32_SPI4_DMA=y +CONFIG_STM32_SPI4_DMA_BUFFER=512 +CONFIG_STM32_SPI_DMATHRESHOLD=8 +CONFIG_STM32_TIM10=y +CONFIG_STM32_TIM11=y +CONFIG_STM32_TIM3=y +CONFIG_STM32_TIM9=y +CONFIG_STM32_UART4=y +CONFIG_STM32_UART7=y +CONFIG_STM32_UART8=y +CONFIG_STM32_USART1=y +CONFIG_STM32_USART2=y +CONFIG_STM32_USART3=y +CONFIG_STM32_USART6=y +CONFIG_STM32_USART_BREAKS=y +CONFIG_STM32_USART_SINGLEWIRE=y +CONFIG_STM32_WWDG=y CONFIG_SYSTEM_CDCACM=y CONFIG_SYSTEM_NSH=y CONFIG_TASK_NAME_SIZE=24 -CONFIG_UART4_BAUD=921600 -CONFIG_UART4_RXBUFSIZE=3000 +CONFIG_UART4_BAUD=57600 +CONFIG_UART4_RXBUFSIZE=300 CONFIG_UART4_RXDMA=y -CONFIG_UART4_TXBUFSIZE=3000 -CONFIG_UART4_TXDMA=y -CONFIG_UART5_BAUD=57600 -CONFIG_UART5_RXBUFSIZE=600 -CONFIG_UART5_TXBUFSIZE=1500 +CONFIG_UART4_TXBUFSIZE=300 CONFIG_UART7_BAUD=57600 -CONFIG_UART7_RXBUFSIZE=600 -CONFIG_UART7_TXBUFSIZE=3000 +CONFIG_UART7_RXBUFSIZE=300 +CONFIG_UART7_RXDMA=y +CONFIG_UART7_SERIAL_CONSOLE=y +CONFIG_UART7_TXBUFSIZE=300 CONFIG_UART8_BAUD=57600 -CONFIG_UART8_RXBUFSIZE=600 -CONFIG_UART8_TXBUFSIZE=3000 -CONFIG_USART1_BAUD=57600 -CONFIG_USART1_RXBUFSIZE=600 -CONFIG_USART1_TXBUFSIZE=1500 +CONFIG_UART8_RXBUFSIZE=300 +CONFIG_UART8_TXBUFSIZE=300 +CONFIG_USART1_RXBUFSIZE=128 +CONFIG_USART1_RXDMA=y +CONFIG_USART1_TXBUFSIZE=32 CONFIG_USART2_BAUD=57600 +CONFIG_USART2_IFLOWCONTROL=y +CONFIG_USART2_OFLOWCONTROL=y CONFIG_USART2_RXBUFSIZE=600 -CONFIG_USART2_TXBUFSIZE=3000 +CONFIG_USART2_RXDMA=y +CONFIG_USART2_TXBUFSIZE=1100 CONFIG_USART3_BAUD=57600 -CONFIG_USART3_RXBUFSIZE=180 -CONFIG_USART3_TXBUFSIZE=1500 +CONFIG_USART3_RXBUFSIZE=300 +CONFIG_USART3_RXDMA=y +CONFIG_USART3_TXBUFSIZE=300 CONFIG_USART6_BAUD=57600 -CONFIG_USART6_RXBUFSIZE=180 -CONFIG_USART6_SERIAL_CONSOLE=y +CONFIG_USART6_RXBUFSIZE=300 +CONFIG_USART6_RXDMA=y +CONFIG_USART6_TXBUFSIZE=300 CONFIG_USBDEV=y CONFIG_USBDEV_BUSPOWERED=y CONFIG_USBDEV_MAXPOWER=500 CONFIG_USEC_PER_TICK=1000 -CONFIG_WATCHDOG=y -CONFIG_WQUEUE_NOTIFIER=y diff --git a/boards/saam/saampixv1_1/nuttx-config/scripts/script.ld b/boards/saam/saampixv1_1/nuttx-config/scripts/script.ld new file mode 100644 index 0000000000..cf3e2bcd20 --- /dev/null +++ b/boards/saam/saampixv1_1/nuttx-config/scripts/script.ld @@ -0,0 +1,138 @@ +/**************************************************************************** + * scripts/ld.script + * + * Copyright (C) 2011 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name NuttX nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +/* The STM32F427 has 2048Kb of FLASH beginning at address 0x0800:0000 and + * 256Kb of SRAM. SRAM is split up into three blocks: + * + * 1) 112Kb of SRAM beginning at address 0x2000:0000 + * 2) 16Kb of SRAM beginning at address 0x2001:c000 + * 3) 64Kb of SRAM beginning at address 0x2002:0000 + * 4) 64Kb of TCM SRAM beginning at address 0x1000:0000 + * + * When booting from FLASH, FLASH memory is aliased to address 0x0000:0000 + * where the code expects to begin execution by jumping to the entry point in + * the 0x0800:0000 address range. + * + * The first 0x4000 of flash is reserved for the bootloader. + */ + +MEMORY +{ + flash (rx) : ORIGIN = 0x08004000, LENGTH = 2032K + sram (rwx) : ORIGIN = 0x20000000, LENGTH = 192K + ccsram (rwx) : ORIGIN = 0x10000000, LENGTH = 64K +} + +OUTPUT_ARCH(arm) + +ENTRY(__start) /* treat __start as the anchor for dead code stripping */ +EXTERN(_vectors) /* force the vectors to be included in the output */ + +/* + * Ensure that abort() is present in the final object. The exception handling + * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). + */ +EXTERN(abort) +SECTIONS +{ + .text : { + _stext = ABSOLUTE(.); + *(.vectors) + . = ALIGN(32); + *(.text .text.*) + *(.fixup) + *(.gnu.warning) + *(.rodata .rodata.*) + *(.gnu.linkonce.t.*) + *(.got) + *(.gcc_except_table) + *(.gnu.linkonce.r.*) + _etext = ABSOLUTE(.); + + } > flash + + /* + * Init functions (static constructors and the like) + */ + .init_section : { + _sinit = ABSOLUTE(.); + KEEP(*(.init_array .init_array.*)) + _einit = ABSOLUTE(.); + } > flash + + + .ARM.extab : { + *(.ARM.extab*) + } > flash + + __exidx_start = ABSOLUTE(.); + .ARM.exidx : { + *(.ARM.exidx*) + } > flash + __exidx_end = ABSOLUTE(.); + + _eronly = ABSOLUTE(.); + + .data : { + _sdata = ABSOLUTE(.); + *(.data .data.*) + *(.gnu.linkonce.d.*) + CONSTRUCTORS + _edata = ABSOLUTE(.); + } > sram AT > flash + + .bss : { + _sbss = ABSOLUTE(.); + *(.bss .bss.*) + *(.gnu.linkonce.b.*) + *(COMMON) + . = ALIGN(4); + _ebss = ABSOLUTE(.); + } > sram + + /* Stabs debugging sections. */ + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_info 0 : { *(.debug_info) } + .debug_line 0 : { *(.debug_line) } + .debug_pubnames 0 : { *(.debug_pubnames) } + .debug_aranges 0 : { *(.debug_aranges) } +} diff --git a/src/modules/mavlink/mavlink_tests/CMakeLists.txt b/boards/saam/saampixv1_1/src/CMakeLists.txt similarity index 73% rename from src/modules/mavlink/mavlink_tests/CMakeLists.txt rename to boards/saam/saampixv1_1/src/CMakeLists.txt index a0c9481991..e28e360c23 100644 --- a/src/modules/mavlink/mavlink_tests/CMakeLists.txt +++ b/boards/saam/saampixv1_1/src/CMakeLists.txt @@ -31,26 +31,21 @@ # ############################################################################ -px4_add_module( - MODULE modules__mavlink__mavlink_tests - MAIN mavlink_tests - STACK_MAIN 8192 - INCLUDES - ${MAVLINK_LIBRARY_DIR} - ${MAVLINK_LIBRARY_DIR}/${CONFIG_MAVLINK_DIALECT} - COMPILE_FLAGS - -DMAVLINK_FTP_UNIT_TEST - #-DMAVLINK_FTP_DEBUG - -DMavlinkStream=MavlinkStreamTest - -DMavlinkFTP=MavlinkFTPTest - -Wno-cast-align # TODO: fix and enable - -Wno-address-of-packed-member # TODO: fix in c_library_v2 - -Wno-double-promotion # The fix has been proposed as PR upstream (2020-03-08) - SRCS - mavlink_tests.cpp - mavlink_ftp_test.cpp - ../mavlink_stream.cpp - ../mavlink_ftp.cpp - DEPENDS - mavlink_c_generate - ) +add_library(drivers_board + can.c + i2c.cpp + init.c + led.c + spi.cpp + timer_config.cpp + usb.c +) + +target_link_libraries(drivers_board + PRIVATE + arch_spi + drivers__led # drv_led_start + nuttx_arch # sdio + nuttx_drivers # sdio + px4_layer +) diff --git a/boards/saam/saampixv1_1/src/board_config.h b/boards/saam/saampixv1_1/src/board_config.h new file mode 100644 index 0000000000..7f29fc3f4a --- /dev/null +++ b/boards/saam/saampixv1_1/src/board_config.h @@ -0,0 +1,193 @@ +/**************************************************************************** + * + * Copyright (c) 2020-2026 PX4 Development Team. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name PX4 nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +/** + * @file board_config.h + * + * SaamPixV1_1 internal definitions + */ + +#pragma once + +/**************************************************************************************************** + * Included Files + ****************************************************************************************************/ + +#include +#include +#include + +/**************************************************************************************************** + * Definitions + ****************************************************************************************************/ +/* Configuration ************************************************************************************/ + + +/* SaamPixV1_1 GPIOs ***********************************************************************************/ +/* LEDs */ +#define GPIO_LED1 (GPIO_OUTPUT|GPIO_OPENDRAIN|GPIO_SPEED_50MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTA|GPIO_PIN8) +#define BOARD_OVERLOAD_LED LED_RED + +/* + * ADC channels + * + * These are the channel numbers of the ADCs of the microcontroller that can be used by the Px4 Firmware in the adc driver + */ +#define ADC_CHANNELS (1 << 4) | (1 << 10) | (1 << 11) | (1 << 12) | (1 << 13) | (1 << 14) | (1 << 15) + +// ADC defines to be used in sensors.cpp to read from a particular channel +#define ADC_5V_RAIL_SENSE 4 +#define ADC_BATTERY_CURRENT_CHANNEL 10 +#define ADC_BATTERY_VOLTAGE_CHANNEL 12 +#define ADC_RC_RSSI_CHANNEL 11 +#define ADC_AIRSPEED_VOLTAGE_CHANNEL 15 + +/* Power supply control and monitoring GPIOs */ +// #define GPIO_VDD_5V_PERIPH_EN (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTA|GPIO_PIN8) +// #define GPIO_VDD_BRICK_VALID (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTB|GPIO_PIN5) +// #define GPIO_VDD_SERVO_VALID (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTB|GPIO_PIN7) +// #define GPIO_VDD_3V3_SENSORS_EN (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_SET|GPIO_PORTE|GPIO_PIN3) +// #define GPIO_VDD_5V_HIPOWER_OC (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTE|GPIO_PIN10) +// #define GPIO_VDD_5V_PERIPH_OC (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTE|GPIO_PIN15) + +/* Tone alarm output */ +#define TONE_ALARM_TIMER 14 /* timer 14 */ +#define TONE_ALARM_CHANNEL 1 /* channel 1 */ +#define GPIO_TONE_ALARM_IDLE (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTA|GPIO_PIN7) +#define GPIO_TONE_ALARM (GPIO_ALT|GPIO_AF9|GPIO_SPEED_2MHz|GPIO_PUSHPULL|GPIO_PORTA|GPIO_PIN7) + +/* AUX PWMs + */ +#define DIRECT_PWM_OUTPUT_CHANNELS 8 + +/* USB OTG FS + * + * PA9 OTG_FS_VBUS VBUS sensing + */ +#define GPIO_OTGFS_VBUS (GPIO_INPUT|GPIO_FLOAT|GPIO_SPEED_100MHz|GPIO_OPENDRAIN|GPIO_PORTA|GPIO_PIN9) + + + +/* High-resolution timer */ +#define HRT_TIMER 8 /* use timer8 for the HRT */ +#define HRT_TIMER_CHANNEL 2 /* use capture/compare channel */ + +#define HRT_PPM_CHANNEL 1 +#define GPIO_PPM_IN GPIO_TIM8_CH1IN_1 + +/* PWM input driver. Use FMU AUX5 pins attached to timer4 channel 1 */ +#define PWMIN_TIMER 4 +#define PWMIN_TIMER_CHANNEL 1 +#define GPIO_PWM_IN GPIO_TIM1_CH1IN_2 + +#define RC_SERIAL_PORT "/dev/ttyS0" + +// #define GPIO_RSSI_IN (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTC|GPIO_PIN1) +#define GPIO_SBUS_INV (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_SET|GPIO_PORTA|GPIO_PIN10) +#define RC_INVERT_INPUT(_invert_true) px4_arch_gpiowrite(GPIO_SBUS_INV, _invert_true); + +#define GPIO_FRSKY_INV (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_SET|GPIO_PORTB|GPIO_PIN12) +#define INVERT_FRSKY(_invert_true) px4_arch_gpiowrite(GPIO_FRSKY_INV, _invert_true); + +/* Power switch controls */ +#define SPEKTRUM_POWER(_on_true) do { } while (0) + +/* + * SaamPixV1_1 has one RC_IN + * + * GPIO PPM_IN on PC6 T8CH1 + * SPEKTRUM_RX (it's TX or RX in Bind) on PC6 UART1 + * Inversion is possible via the 74LVC2G86 controlled by the FMU + * The FMU can drive GPIO PPM_IN as an output + */ + +#define GPIO_PPM_IN_AS_OUT (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_SET|GPIO_PORTC|GPIO_PIN6) +#define SPEKTRUM_RX_AS_GPIO_OUTPUT() px4_arch_configgpio(GPIO_PPM_IN_AS_OUT) +#define SPEKTRUM_RX_AS_UART() px4_arch_configgpio(GPIO_USART1_RX) +#define SPEKTRUM_OUT(_one_true) px4_arch_gpiowrite(GPIO_PPM_IN_AS_OUT, (_one_true)) + +/* By Providing BOARD_ADC_USB_CONNECTED (using the px4_arch abstraction) + * this board support the ADC system_power interface, and therefore + * provides the true logic GPIO BOARD_ADC_xxxx macros. + */ +#define BOARD_ADC_USB_CONNECTED (px4_arch_gpioread(GPIO_OTGFS_VBUS)) +#define BOARD_ADC_BRICK_VALID (1) +#define BOARD_ADC_SERVO_VALID (1) +#define BOARD_ADC_PERIPH_5V_OC (0) +#define BOARD_ADC_HIPOWER_5V_OC (0) + + +/* This board provides a DMA pool and APIs */ +#define BOARD_DMA_ALLOC_POOL_SIZE 5120 + +/* This board provides the board_on_reset interface */ + +#define BOARD_HAS_ON_RESET 1 + +__BEGIN_DECLS + +/**************************************************************************************************** + * Public Types + ****************************************************************************************************/ + +/**************************************************************************************************** + * Public data + ****************************************************************************************************/ + +#ifndef __ASSEMBLY__ + +/**************************************************************************************************** + * Public Functions + ****************************************************************************************************/ + +/**************************************************************************************************** + * Name: stm32_spiinitialize + * + * Description: + * Called to configure SPI chip select GPIO pins for the SaamPixV1_1 board. + * + ****************************************************************************************************/ + +extern void stm32_spiinitialize(void); + +extern void stm32_usbinitialize(void); + + +#define board_peripheral_reset(ms) + + +#include + +#endif /* __ASSEMBLY__ */ + +__END_DECLS diff --git a/boards/saam/saampixv1_1/src/can.c b/boards/saam/saampixv1_1/src/can.c new file mode 100644 index 0000000000..8b649ff7da --- /dev/null +++ b/boards/saam/saampixv1_1/src/can.c @@ -0,0 +1,129 @@ +/**************************************************************************** + * + * Copyright (c) 2020-2026 PX4 Development Team. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name PX4 nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +/** + * @file can.c + * + * Board-specific CAN functions. + */ + +/************************************************************************************ + * Included Files + ************************************************************************************/ + +#include + +#include +#include + +#include +#include + +#include "chip.h" +#include "arm_internal.h" + +#include "stm32.h" +#include "stm32_can.h" +#include "board_config.h" + +#ifdef CONFIG_CAN + +/************************************************************************************ + * Pre-processor Definitions + ************************************************************************************/ +/* Configuration ********************************************************************/ + +#if defined(CONFIG_STM32_CAN1) && defined(CONFIG_STM32_CAN2) +# warning "Both CAN1 and CAN2 are enabled. Assuming only CAN1." +# undef CONFIG_STM32_CAN2 +#endif + +#ifdef CONFIG_STM32_CAN1 +# define CAN_PORT 1 +#else +# define CAN_PORT 2 +#endif + +/************************************************************************************ + * Private Functions + ************************************************************************************/ + +/************************************************************************************ + * Public Functions + ************************************************************************************/ +int can_devinit(void); +/************************************************************************************ + * Name: can_devinit + * + * Description: + * All STM32 architectures must provide the following interface to work with + * examples/can. + * + ************************************************************************************/ + +int can_devinit(void) +{ + static bool initialized = false; + struct can_dev_s *can; + int ret; + + /* Check if we have already initialized */ + + if (!initialized) { + /* Call stm32_caninitialize() to get an instance of the CAN interface */ + + can = stm32_caninitialize(CAN_PORT); + + if (can == NULL) { + canerr("ERROR: Failed to get CAN interface\n"); + return -ENODEV; + } + + /* Register the CAN driver at "/dev/can0" */ + + ret = can_register("/dev/can0", can); + + if (ret < 0) { + canerr("ERROR: can_register failed: %d\n", ret); + return ret; + } + + /* Now we are initialized */ + + initialized = true; + } + + return OK; +} + +#endif diff --git a/boards/xc-fly/xc-slam/src/i2c.cpp b/boards/saam/saampixv1_1/src/i2c.cpp similarity index 94% rename from boards/xc-fly/xc-slam/src/i2c.cpp rename to boards/saam/saampixv1_1/src/i2c.cpp index d557e692af..8aad7babeb 100644 --- a/boards/xc-fly/xc-slam/src/i2c.cpp +++ b/boards/saam/saampixv1_1/src/i2c.cpp @@ -1,6 +1,6 @@ /**************************************************************************** * - * Copyright (C) 2021 PX4 Development Team. All rights reserved. + * Copyright (C) 2020-2026 PX4 Development Team. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -35,5 +35,5 @@ constexpr px4_i2c_bus_t px4_i2c_buses[I2C_BUS_MAX_BUS_ITEMS] = { initI2CBusInternal(1), - initI2CBusExternal(4), + initI2CBusExternal(2), }; diff --git a/boards/saam/saampixv1_1/src/init.c b/boards/saam/saampixv1_1/src/init.c new file mode 100644 index 0000000000..3977ae791e --- /dev/null +++ b/boards/saam/saampixv1_1/src/init.c @@ -0,0 +1,299 @@ +/**************************************************************************** + * + * Copyright (c) 2020-2026 PX4 Development Team. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name PX4 nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +/** + * @file init.c + * + * SaamPixV1_1-specific early startup code. This file implements the + * board_app_initialize() function that is called early by nsh during startup. + * + * Code here is run before the rcS script is invoked; it should start required + * subsystems and perform board-specific initialization. + */ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include +#include "board_config.h" +#include + +#include + +#include +#include + +#include +#include +#include + +/**************************************************************************** + * Pre-Processor Definitions + ****************************************************************************/ + +/* + * Ideally we'd be able to get these from arm_internal.h, + * but since we want to be able to disable the NuttX use + * of leds for system indication at will and there is no + * separate switch, we need to build independent of the + * CONFIG_ARCH_LEDS configuration switch. + */ +__BEGIN_DECLS +extern void led_init(void); +extern void led_on(int led); +extern void led_off(int led); +__END_DECLS + +/************************************************************************************ + * Name: board_on_reset + * + * Description: + * Optionally provided function called on entry to board_system_reset + * It should perform any house keeping prior to the rest. + * + * status - 1 if resetting to boot loader + * 0 if just resetting + * + ************************************************************************************/ +__EXPORT void board_on_reset(int status) +{ + /* configure the GPIO pins to outputs and keep them low */ + for (int i = 0; i < DIRECT_PWM_OUTPUT_CHANNELS; ++i) { + px4_arch_configgpio(io_timer_channel_get_gpio_output(i)); + } + + /** + * On resets invoked from system (not boot) insure we establish a low + * output state (discharge the pins) on PWM pins before they become inputs. + */ + + if (status >= 0) { + up_mdelay(400); + } +} + +/**************************************************************************** + * Public Functions + ****************************************************************************/ +/************************************************************************************ + * Name: stm32_boardinitialize + * + * Description: + * All STM32 architectures must provide the following entry point. This entry point + * is called early in the initialization -- after all memory has been configured + * and mapped but before any devices have been initialized. + * + ************************************************************************************/ + +__EXPORT void +stm32_boardinitialize(void) +{ + // Reset all PWM to Low outputs. + + board_on_reset(-1); + + /* configure LEDs */ + + board_autoled_initialize(); + + /* configure ADC pins */ + + stm32_configgpio(GPIO_ADC1_IN4); /* VDD_5V_SENS */ + stm32_configgpio(GPIO_ADC1_IN10); /* BATT_CURRENT_SENS */ + stm32_configgpio(GPIO_ADC1_IN12); /* BATT_VOLTAGE_SENS */ + stm32_configgpio(GPIO_ADC1_IN11); /* RSSI analog in */ + stm32_configgpio(GPIO_ADC1_IN13); /* FMU_AUX_ADC_1 */ + stm32_configgpio(GPIO_ADC1_IN14); /* FMU_AUX_ADC_2 */ + stm32_configgpio(GPIO_ADC1_IN15); /* PRESSURE_SENS */ + + /* configure power supply control/sense pins */ + + stm32_configgpio(GPIO_SBUS_INV); + stm32_configgpio(GPIO_FRSKY_INV); + + /* configure CAN interface */ + + stm32_configgpio(GPIO_CAN1_RX); + stm32_configgpio(GPIO_CAN1_TX); + + /* configure SPI interfaces */ + + stm32_spiinitialize(); + + stm32_configgpio(GPIO_I2C2_SCL); + stm32_configgpio(GPIO_I2C2_SDA); + + stm32_configgpio(GPIO_I2C1_SCL); + stm32_configgpio(GPIO_I2C1_SDA); + +} + +/**************************************************************************** + * Name: board_app_initialize + * + * Description: + * Perform application specific initialization. This function is never + * called directly from application code, but only indirectly via the + * (non-standard) boardctl() interface using the command BOARDIOC_INIT. + * + * Input Parameters: + * arg - The boardctl() argument is passed to the board_app_initialize() + * implementation without modification. The argument has no + * meaning to NuttX; the meaning of the argument is a contract + * between the board-specific initalization logic and the the + * matching application logic. The value cold be such things as a + * mode enumeration value, a set of DIP switch switch settings, a + * pointer to configuration data read from a file or serial FLASH, + * or whatever you would like to do with it. Every implementation + * should accept zero/NULL as a default configuration. + * + * Returned Value: + * Zero (OK) is returned on success; a negated errno value is returned on + * any failure to indicate the nature of the failure. + * + ****************************************************************************/ + +static struct spi_dev_s *spi1; +static struct spi_dev_s *spi2; +static struct spi_dev_s *spi4; +static struct sdio_dev_s *sdio; + +__EXPORT int board_app_initialize(uintptr_t arg) +{ + px4_platform_init(); + + /* configure the DMA allocator */ + + if (board_dma_alloc_init() < 0) { + syslog(LOG_ERR, "DMA alloc FAILED\n"); + } + +#if defined(SERIAL_HAVE_RXDMA) + // set up the serial DMA polling at 1ms intervals for received bytes that have not triggered a DMA event. + static struct hrt_call serial_dma_call; + hrt_call_every(&serial_dma_call, 1000, 1000, (hrt_callout)stm32_serial_dma_poll, NULL); +#endif + + /* initial LED state */ + drv_led_start(); + led_off(LED_AMBER); + + if (board_hardfault_init(2, true) != 0) { + led_on(LED_AMBER); + } + + /* Configure SPI-based devices */ + + spi4 = px4_spibus_initialize(4); + + if (!spi4) { + syslog(LOG_ERR, "[boot] FAILED to initialize SPI port 4\n"); + board_autoled_on(LED_AMBER); + } + + /* Default SPI4 to 10MHz and de-assert the known chip selects. */ + SPI_SETFREQUENCY(spi4, 10000000); + SPI_SETBITS(spi4, 8); + SPI_SETMODE(spi4, SPIDEV_MODE3); + up_udelay(20); + + /* Get the SPI port for the FRAM */ + + spi1 = stm32_spibus_initialize(1); + + if (!spi1) { + syslog(LOG_ERR, "[boot] FAILED to initialize SPI port 1\n"); + board_autoled_on(LED_AMBER); + } + + /* Default SPI1 to 37.5 MHz (40 MHz rounded to nearest valid divider, F4 max) + * and de-assert the known chip selects. */ + + // XXX start with 10.4 MHz in FRAM usage and go up to 37.5 once validated + SPI_SETFREQUENCY(spi1, 24 * 1000 * 1000); + SPI_SETBITS(spi1, 8); + + + spi2 = px4_spibus_initialize(2); + + /* Default SPI2 to 10MHz and de-assert the known chip selects. */ + SPI_SETFREQUENCY(spi2, 10000000); + SPI_SETBITS(spi2, 8); + + +#ifdef CONFIG_MMCSD + /* First, get an instance of the SDIO interface */ + + sdio = sdio_initialize(CONFIG_NSH_MMCSDSLOTNO); + + if (!sdio) { + syslog(LOG_ERR, "[boot] Failed to initialize SDIO slot %d\n", CONFIG_NSH_MMCSDSLOTNO); + } + + /* Now bind the SDIO interface to the MMC/SD driver */ + int ret = mmcsd_slotinitialize(CONFIG_NSH_MMCSDMINOR, sdio); + + if (ret != OK) { + syslog(LOG_ERR, "[boot] Failed to bind SDIO to the MMC/SD driver: %d\n", ret); + } + + /* Then let's guess and say that there is a card in the slot. There is no card detect GPIO. */ + sdio_mediachange(sdio, true); + +#endif + + /* Configure the HW based on the manifest */ + + px4_platform_configure(); + + return OK; +} diff --git a/boards/xc-fly/xc-slam/src/led.c b/boards/saam/saampixv1_1/src/led.c similarity index 71% rename from boards/xc-fly/xc-slam/src/led.c rename to boards/saam/saampixv1_1/src/led.c index 0420c1da2e..d332227614 100644 --- a/boards/xc-fly/xc-slam/src/led.c +++ b/boards/saam/saampixv1_1/src/led.c @@ -1,6 +1,6 @@ /**************************************************************************** * - * Copyright (c) 2021 PX4 Development Team. All rights reserved. + * Copyright (c) 2020-2026 PX4 Development Team. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -34,18 +34,16 @@ /** * @file led.c * - * LED backend. + * SaamPixV1_1 LED backend. */ #include #include -#include "chip.h" -#include "stm32_gpio.h" +#include "stm32.h" #include "board_config.h" -#include #include /* @@ -62,52 +60,37 @@ extern void led_off(int led); extern void led_toggle(int led); __END_DECLS -# define xlat(p) (p) -static uint32_t g_ledmap[] = { - GPIO_nLED_GREEN, // Indexed by BOARD_LED_GREEN - GPIO_nLED_BLUE, // Indexed by BOARD_LED_BLUE - GPIO_nLED_RED, // Indexed by BOARD_LED_RED -}; - -__EXPORT void led_init(void) +__EXPORT void led_init() { - /* Configure LED GPIOs for output */ - for (size_t l = 0; l < (sizeof(g_ledmap) / sizeof(g_ledmap[0])); l++) { - if (g_ledmap[l] != 0) { - stm32_configgpio(g_ledmap[l]); - } - } -} + /* Configure LED1 GPIO for output */ -static void phy_set_led(int led, bool state) -{ - /* Drive Low to switch on */ - if (g_ledmap[led] != 0) { - stm32_gpiowrite(g_ledmap[led], !state); - } -} - -static bool phy_get_led(int led) -{ - /* If Low it is on */ - if (g_ledmap[led] != 0) { - return !stm32_gpioread(g_ledmap[led]); - } - - return false; + stm32_configgpio(GPIO_LED1); } __EXPORT void led_on(int led) { - phy_set_led(xlat(led), true); + if (led == 1) { + /* Pull down to switch on */ + stm32_gpiowrite(GPIO_LED1, false); + } } __EXPORT void led_off(int led) { - phy_set_led(xlat(led), false); + if (led == 1) { + /* Pull up to switch off */ + stm32_gpiowrite(GPIO_LED1, true); + } } __EXPORT void led_toggle(int led) { - phy_set_led(xlat(led), !phy_get_led(xlat(led))); + if (led == 1) { + if (stm32_gpioread(GPIO_LED1)) { + stm32_gpiowrite(GPIO_LED1, false); + + } else { + stm32_gpiowrite(GPIO_LED1, true); + } + } } diff --git a/boards/xc-fly/xc-slim/src/spi.cpp b/boards/saam/saampixv1_1/src/spi.cpp similarity index 76% rename from boards/xc-fly/xc-slim/src/spi.cpp rename to boards/saam/saampixv1_1/src/spi.cpp index afaacd4eef..d62a3ab37f 100644 --- a/boards/xc-fly/xc-slim/src/spi.cpp +++ b/boards/saam/saampixv1_1/src/spi.cpp @@ -1,6 +1,6 @@ /**************************************************************************** * - * Copyright (C) 2021 PX4 Development Team. All rights reserved. + * Copyright (C) 2020-2026 PX4 Development Team. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -35,20 +35,18 @@ #include #include - constexpr px4_spi_bus_t px4_spi_buses[SPI_BUS_MAX_BUS_ITEMS] = { initSPIBus(SPI::Bus::SPI1, { - initSPIDevice(DRV_GYR_DEVTYPE_BMI088, SPI::CS{GPIO::PortA, GPIO::Pin3}, SPI::DRDY{GPIO::PortA, GPIO::Pin1}), - initSPIDevice(DRV_ACC_DEVTYPE_BMI088, SPI::CS{GPIO::PortA, GPIO::Pin2}, SPI::DRDY{GPIO::PortA, GPIO::Pin0}), + initSPIDevice(SPIDEV_FLASH(0), SPI::CS{GPIO::PortE, GPIO::Pin12}), }), - initSPIBus(SPI::Bus::SPI2, { - initSPIDevice(SPIDEV_FLASH(2), SPI::CS{GPIO::PortD, GPIO::Pin4}) - }), - initSPIBus(SPI::Bus::SPI3, { - //initSPIDevice(DRV_OSD_DEVTYPE_ATXXXX, SPI::CS{GPIO::PortA, GPIO::Pin15}) + initSPIBusExternal(SPI::Bus::SPI2, { + initSPIConfigExternal(SPI::CS{GPIO::PortD, GPIO::Pin7}), }), initSPIBus(SPI::Bus::SPI4, { - initSPIDevice(DRV_IMU_DEVTYPE_ICM42688P, SPI::CS{GPIO::PortC, GPIO::Pin13}, SPI::DRDY{GPIO::PortE, GPIO::Pin4}), + initSPIDevice(DRV_IMU_DEVTYPE_ICM20602, SPI::CS{GPIO::PortB, GPIO::Pin2}, SPI::DRDY{GPIO::PortE, GPIO::Pin4}), + initSPIDevice(DRV_MAG_DEVTYPE_LIS3MDL, SPI::CS{GPIO::PortD, GPIO::Pin11}), + initSPIDevice(DRV_BARO_DEVTYPE_MS5611, SPI::CS{GPIO::PortC, GPIO::Pin15}), + initSPIDevice(DRV_IMU_DEVTYPE_MPU9250, SPI::CS{GPIO::PortE, GPIO::Pin3}, SPI::DRDY{GPIO::PortE, GPIO::Pin10}), }), }; diff --git a/boards/xc-fly/xc-slam/src/timer_config.cpp b/boards/saam/saampixv1_1/src/timer_config.cpp similarity index 64% rename from boards/xc-fly/xc-slam/src/timer_config.cpp rename to boards/saam/saampixv1_1/src/timer_config.cpp index a1e8d8672b..520534a84c 100644 --- a/boards/xc-fly/xc-slam/src/timer_config.cpp +++ b/boards/saam/saampixv1_1/src/timer_config.cpp @@ -1,6 +1,6 @@ /**************************************************************************** * - * Copyright (C) 2021 PX4 Development Team. All rights reserved. + * Copyright (c) 2020-2026 PX4 Development Team. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -29,32 +29,24 @@ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * - * - * * TIM2_CH1 T HEATER > PWM OUT or GPIO PA15 ****************************************************************************/ - #include constexpr io_timers_t io_timers[MAX_IO_TIMERS] = { - initIOTimer(Timer::Timer1, DMA{DMA::Index1}), - initIOTimer(Timer::Timer2, DMA{DMA::Index1}), - initIOTimer(Timer::Timer3, DMA{DMA::Index1}), - // initIOTimer(Timer::Timer2), - // initIOTimer(Timer::Timer3), + initIOTimer(Timer::Timer1), + initIOTimer(Timer::Timer4), }; constexpr timer_io_channels_t timer_io_channels[MAX_TIMER_IO_CHANNELS] = { - initIOTimerChannel(io_timers, {Timer::Timer1, Timer::Channel1}, {GPIO::PortE, GPIO::Pin9}), - initIOTimerChannel(io_timers, {Timer::Timer1, Timer::Channel2}, {GPIO::PortE, GPIO::Pin11}), - initIOTimerChannel(io_timers, {Timer::Timer1, Timer::Channel3}, {GPIO::PortE, GPIO::Pin13}), - initIOTimerChannel(io_timers, {Timer::Timer1, Timer::Channel4}, {GPIO::PortE, GPIO::Pin14}), - initIOTimerChannel(io_timers, {Timer::Timer3, Timer::Channel4}, {GPIO::PortB, GPIO::Pin1}), - initIOTimerChannel(io_timers, {Timer::Timer3, Timer::Channel3}, {GPIO::PortB, GPIO::Pin0}), - initIOTimerChannel(io_timers, {Timer::Timer2, Timer::Channel3}, {GPIO::PortB, GPIO::Pin10}), - initIOTimerChannel(io_timers, {Timer::Timer2, Timer::Channel4}, {GPIO::PortB, GPIO::Pin11}), - - + initIOTimerChannelOutputClear(io_timers, {Timer::Timer1, Timer::Channel1}, {GPIO::PortE, GPIO::Pin9}), + initIOTimerChannelOutputClear(io_timers, {Timer::Timer1, Timer::Channel2}, {GPIO::PortE, GPIO::Pin11}), + initIOTimerChannelOutputClear(io_timers, {Timer::Timer1, Timer::Channel3}, {GPIO::PortE, GPIO::Pin13}), + initIOTimerChannelOutputClear(io_timers, {Timer::Timer1, Timer::Channel4}, {GPIO::PortE, GPIO::Pin14}), + initIOTimerChannelOutputClear(io_timers, {Timer::Timer4, Timer::Channel1}, {GPIO::PortD, GPIO::Pin12}), + initIOTimerChannelOutputClear(io_timers, {Timer::Timer4, Timer::Channel2}, {GPIO::PortD, GPIO::Pin13}), + initIOTimerChannelOutputClear(io_timers, {Timer::Timer4, Timer::Channel3}, {GPIO::PortD, GPIO::Pin14}), + initIOTimerChannelOutputClear(io_timers, {Timer::Timer4, Timer::Channel4}, {GPIO::PortD, GPIO::Pin15}), }; constexpr io_timers_channel_mapping_t io_timers_channel_mapping = diff --git a/boards/xc-fly/xc-slim/src/usb.c b/boards/saam/saampixv1_1/src/usb.c similarity index 70% rename from boards/xc-fly/xc-slim/src/usb.c rename to boards/saam/saampixv1_1/src/usb.c index 9591784866..49c4e7e9d3 100644 --- a/boards/xc-fly/xc-slim/src/usb.c +++ b/boards/saam/saampixv1_1/src/usb.c @@ -1,6 +1,6 @@ /**************************************************************************** * - * Copyright (C) 2021 PX4 Development Team. All rights reserved. + * Copyright (c) 2020-2026 PX4 Development Team. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -37,17 +37,41 @@ * Board-specific USB functions. */ -#include "board_config.h" +/************************************************************************************ + * Included Files + ************************************************************************************/ + +#include + +#include +#include +#include +#include + #include #include -#include -#include + +#include +#include +#include "board_config.h" + +/************************************************************************************ + * Definitions + ************************************************************************************/ + +/************************************************************************************ + * Private Functions + ************************************************************************************/ + +/************************************************************************************ + * Public Functions + ************************************************************************************/ /************************************************************************************ * Name: stm32_usbinitialize * * Description: - * Called to setup USB-related GPIO pins for the board. + * Called to setup USB-related GPIO pins for the SaamPixV1_1 board. * ************************************************************************************/ @@ -57,8 +81,12 @@ __EXPORT void stm32_usbinitialize(void) /* Configure the OTG FS VBUS sensing GPIO, Power On, and Overcurrent GPIOs */ -#ifdef CONFIG_STM32H7_OTGFS +#ifdef CONFIG_STM32_OTGFS stm32_configgpio(GPIO_OTGFS_VBUS); + /* XXX We only support device mode + stm32_configgpio(GPIO_OTGFS_PWRON); + stm32_configgpio(GPIO_OTGFS_OVER); + */ #endif } @@ -72,6 +100,7 @@ __EXPORT void stm32_usbinitialize(void) * while the USB is suspended. * ************************************************************************************/ + __EXPORT void stm32_usbsuspend(FAR struct usbdev_s *dev, bool resume) { uinfo("resume: %d\n", resume); diff --git a/boards/scumaker/pilotpi/default.px4board b/boards/scumaker/pilotpi/default.px4board index 7bb44aa427..990dd57ccd 100644 --- a/boards/scumaker/pilotpi/default.px4board +++ b/boards/scumaker/pilotpi/default.px4board @@ -55,7 +55,6 @@ CONFIG_MODULES_NAVIGATOR=y CONFIG_MODULES_RC_UPDATE=y CONFIG_MODULES_SENSORS=y CONFIG_MODULES_SIMULATION_SIMULATOR_SIH=y -CONFIG_MODULES_TEMPERATURE_COMPENSATION=y CONFIG_MODULES_VTOL_ATT_CONTROL=y CONFIG_SYSTEMCMDS_BSONDUMP=y CONFIG_SYSTEMCMDS_DYN=y diff --git a/boards/siyi/n7/default.px4board b/boards/siyi/n7/default.px4board index 3510122754..3b0896854e 100644 --- a/boards/siyi/n7/default.px4board +++ b/boards/siyi/n7/default.px4board @@ -58,7 +58,6 @@ CONFIG_MODULES_NAVIGATOR=y CONFIG_MODULES_RC_UPDATE=y CONFIG_MODULES_SENSORS=y CONFIG_MODULES_SIMULATION_SIMULATOR_SIH=y -CONFIG_MODULES_TEMPERATURE_COMPENSATION=y CONFIG_MODULES_UXRCE_DDS_CLIENT=y CONFIG_MODULES_VTOL_ATT_CONTROL=y CONFIG_SYSTEMCMDS_ACTUATOR_TEST=y diff --git a/boards/siyi/n7/nuttx-config/scripts/bootloader_script.ld b/boards/siyi/n7/nuttx-config/scripts/bootloader_script.ld index 43d36e7dc9..61d0c172d8 100644 --- a/boards/siyi/n7/nuttx-config/scripts/bootloader_script.ld +++ b/boards/siyi/n7/nuttx-config/scripts/bootloader_script.ld @@ -132,20 +132,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/siyi/n7/nuttx-config/scripts/script.ld b/boards/siyi/n7/nuttx-config/scripts/script.ld index d6019c0d13..b918d43379 100644 --- a/boards/siyi/n7/nuttx-config/scripts/script.ld +++ b/boards/siyi/n7/nuttx-config/scripts/script.ld @@ -131,7 +131,6 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) EXTERN(board_get_manifest) SECTIONS @@ -140,12 +139,6 @@ SECTIONS _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/siyi/n7/src/board_config.h b/boards/siyi/n7/src/board_config.h index e705c87890..fa9b83d778 100644 --- a/boards/siyi/n7/src/board_config.h +++ b/boards/siyi/n7/src/board_config.h @@ -139,8 +139,10 @@ /* HEATER * PWM in future */ -#define GPIO_HEATER_OUTPUT /* PA7 T14CH1 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTA|GPIO_PIN7) -#define HEATER_OUTPUT_EN(on_true) px4_arch_gpiowrite(GPIO_HEATER_OUTPUT, (on_true)) +#define GPIO_HEATER_OUTPUT +#define HEATER_NUM 1 +#define GPIO_HEATER1_OUTPUT /* PA7 T14CH1 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTA|GPIO_PIN7) +#define HEATER1_OUTPUT_EN(on_true) px4_arch_gpiowrite(GPIO_HEATER1_OUTPUT, (on_true)) /* PWM */ @@ -245,7 +247,7 @@ GPIO_CAN1_TX, \ GPIO_CAN1_RX, \ GPIO_CAN1_SILENT_S0, \ - GPIO_HEATER_OUTPUT, \ + GPIO_HEATER1_OUTPUT, \ GPIO_nPOWER_IN_A, \ GPIO_nPOWER_IN_B, \ GPIO_VDD_5V_PERIPH_nEN, \ diff --git a/boards/siyi/n7/src/hw_config.h b/boards/siyi/n7/src/hw_config.h index a6b71126e0..2967330579 100644 --- a/boards/siyi/n7/src/hw_config.h +++ b/boards/siyi/n7/src/hw_config.h @@ -28,8 +28,6 @@ * INTERFACE_USART 1 - (Optional) Scan and use the Serial interface for bootloading * USBDEVICESTRING "PX4 BL FMU v2.x" - USB id string * USBPRODUCTID 0x0011 - PID Should match defconfig - * BOOT_DELAY_ADDRESS 0x000001a0 - (Optional) From the linker script from Linker Script to get a custom - * delay provided by an APP FW * BOARD_TYPE 9 - Must match .prototype boad_id * _FLASH_KBYTES (*(uint16_t *)0x1fff7a22) - Run time flash size detection * BOARD_FLASH_SECTORS ((_FLASH_KBYTES == 0x400) ? 11 : 23) - Run time determine the physical last sector @@ -70,7 +68,6 @@ //#define USE_VBUS_PULL_DOWN #define INTERFACE_USART 1 #define INTERFACE_USART_CONFIG "/dev/ttyS0,115200" -#define BOOT_DELAY_ADDRESS 0x000001a0 #define BOARD_TYPE 1123 #define _FLASH_KBYTES (*(uint32_t *)0x1FF1E880) #define BOARD_FLASH_SECTORS (15) diff --git a/boards/sky-drones/smartap-airlink/default.px4board b/boards/sky-drones/smartap-airlink/default.px4board index b515bd555b..bebbb91f93 100644 --- a/boards/sky-drones/smartap-airlink/default.px4board +++ b/boards/sky-drones/smartap-airlink/default.px4board @@ -66,7 +66,6 @@ CONFIG_MODULES_NAVIGATOR=y CONFIG_MODULES_RC_UPDATE=y CONFIG_MODULES_SENSORS=y CONFIG_MODULES_SIMULATION_SIMULATOR_SIH=y -CONFIG_MODULES_TEMPERATURE_COMPENSATION=y CONFIG_MODULES_UXRCE_DDS_CLIENT=y CONFIG_MODULES_VTOL_ATT_CONTROL=y CONFIG_SYSTEMCMDS_ACTUATOR_TEST=y diff --git a/boards/sky-drones/smartap-airlink/init/rc.board_defaults b/boards/sky-drones/smartap-airlink/init/rc.board_defaults index 56acfa92fd..5655311c0c 100644 --- a/boards/sky-drones/smartap-airlink/init/rc.board_defaults +++ b/boards/sky-drones/smartap-airlink/init/rc.board_defaults @@ -10,7 +10,7 @@ param set-default SER_TEL2_BAUD 921600 # 921600 # Temperature stabilization param set-default SENS_EN_THERMAL 1 # Enable heater -param set-default SENS_TEMP_ID 2359314 # Heated IMU ID +param set-default HEATER1_IMU_ID 2359314 # Heated IMU ID # Battery scaling param set-default BAT1_N_CELLS 4 diff --git a/boards/sky-drones/smartap-airlink/nuttx-config/scripts/script.ld b/boards/sky-drones/smartap-airlink/nuttx-config/scripts/script.ld index 8d5a78da6b..0ed6652fac 100644 --- a/boards/sky-drones/smartap-airlink/nuttx-config/scripts/script.ld +++ b/boards/sky-drones/smartap-airlink/nuttx-config/scripts/script.ld @@ -89,7 +89,6 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) EXTERN(board_get_manifest) SECTIONS @@ -98,12 +97,6 @@ SECTIONS _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/sky-drones/smartap-airlink/src/board_config.h b/boards/sky-drones/smartap-airlink/src/board_config.h index 158fece58c..48c7695cb9 100644 --- a/boards/sky-drones/smartap-airlink/src/board_config.h +++ b/boards/sky-drones/smartap-airlink/src/board_config.h @@ -178,8 +178,10 @@ /* HEATER * PWM in future */ -#define GPIO_HEATER_OUTPUT /* PB10 T2CH3 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTB|GPIO_PIN10) -#define HEATER_OUTPUT_EN(on_true) px4_arch_gpiowrite(GPIO_HEATER_OUTPUT, (on_true)) +#define GPIO_HEATER_OUTPUT +#define HEATER_NUM 1 +#define GPIO_HEATER1_OUTPUT /* PB10 T2CH3 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTB|GPIO_PIN10) +#define HEATER1_OUTPUT_EN(on_true) px4_arch_gpiowrite(GPIO_HEATER1_OUTPUT, (on_true)) /* PC12 is nARMED * The GPIO will be set as input while not armed HW will have external HW Pull UP. @@ -208,7 +210,7 @@ #define GPIO_VDD_3V5_LTE_nOC /* PE15 */ (GPIO_INPUT |GPIO_FLOAT|GPIO_PORTE|GPIO_PIN15) #define GPIO_VDD_5V_HIPOWER_nEN /* PF12 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_SET|GPIO_PORTF|GPIO_PIN12) #define GPIO_VDD_5V_HIPOWER_nOC /* PF13 */ (GPIO_INPUT |GPIO_FLOAT|GPIO_PORTF|GPIO_PIN13) -#define GPIO_VDD_3V3_SENSORS4_EN /* PG8 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTG|GPIO_PIN8) +#define GPIO_VDD_3V3_SENSORS_EN /* PG8 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTG|GPIO_PIN8) /* Spare GPIO */ @@ -225,7 +227,7 @@ #define VDD_5V_PERIPH_EN(on_true) px4_arch_gpiowrite(GPIO_VDD_5V_PERIPH_nEN, !(on_true)) #define VDD_3V5_LTE_EN(on_true) px4_arch_gpiowrite(GPIO_VDD_3V5_LTE_nEN, on_true) #define VDD_5V_HIPOWER_EN(on_true) px4_arch_gpiowrite(GPIO_VDD_5V_HIPOWER_nEN, on_true) -#define VDD_3V3_SENSORS4_EN(on_true) px4_arch_gpiowrite(GPIO_VDD_3V3_SENSORS4_EN, (on_true)) +#define VDD_3V3_SENSORS_EN(on_true) px4_arch_gpiowrite(GPIO_VDD_3V3_SENSORS_EN, (on_true)) /* Tone alarm output */ @@ -335,12 +337,12 @@ GPIO_CAN1_RX, \ GPIO_CAN2_TX, \ GPIO_CAN2_RX, \ - GPIO_HEATER_OUTPUT, \ + GPIO_HEATER1_OUTPUT, \ GPIO_VDD_3V5_LTE_nEN, \ GPIO_VDD_3V5_LTE_nOC, \ GPIO_VDD_5V_HIPOWER_nEN, \ GPIO_VDD_5V_HIPOWER_nOC, \ - GPIO_VDD_3V3_SENSORS4_EN, \ + GPIO_VDD_3V3_SENSORS_EN, \ GPIO_PH11, \ GPIO_NFC_GPIO, \ GPIO_TONE_ALARM_IDLE, \ diff --git a/boards/sky-drones/smartap-airlink/src/init.cpp b/boards/sky-drones/smartap-airlink/src/init.cpp index 73a9582f9b..fa99e83feb 100644 --- a/boards/sky-drones/smartap-airlink/src/init.cpp +++ b/boards/sky-drones/smartap-airlink/src/init.cpp @@ -109,7 +109,7 @@ __EXPORT void board_peripheral_reset(int ms) VDD_3V5_LTE_EN(false); VDD_5V_HIPOWER_EN(false); board_control_spi_sensors_power(false, 0xffff); - VDD_3V3_SENSORS4_EN(false); + VDD_3V3_SENSORS_EN(false); /* wait for the peripheral rail to reach GND */ usleep(ms * 1000); @@ -121,7 +121,7 @@ __EXPORT void board_peripheral_reset(int ms) board_control_spi_sensors_power(true, 0xffff); VDD_3V5_LTE_EN(true); VDD_5V_HIPOWER_EN(true); - VDD_3V3_SENSORS4_EN(true); + VDD_3V3_SENSORS_EN(true); } @@ -211,7 +211,7 @@ __EXPORT int board_app_initialize(uintptr_t arg) /* Power on Interfaces */ VDD_3V5_LTE_EN(true); VDD_5V_HIPOWER_EN(true); - VDD_3V3_SENSORS4_EN(true); + VDD_3V3_SENSORS_EN(true); /* Need hrt running before using the ADC */ @@ -253,8 +253,8 @@ __EXPORT int board_app_initialize(uintptr_t arg) } // Power down the heater - px4_arch_configgpio(GPIO_HEATER_OUTPUT); - px4_arch_gpiowrite(GPIO_HEATER_OUTPUT, 1); + px4_arch_configgpio(GPIO_HEATER1_OUTPUT); + px4_arch_gpiowrite(GPIO_HEATER1_OUTPUT, 1); #ifdef CONFIG_MMCSD int ret = stm32_sdio_initialize(); diff --git a/boards/spracing/h7extreme/init/rc.board_defaults b/boards/spracing/h7extreme/init/rc.board_defaults index 92a8d971ab..15dd716d43 100644 --- a/boards/spracing/h7extreme/init/rc.board_defaults +++ b/boards/spracing/h7extreme/init/rc.board_defaults @@ -9,7 +9,4 @@ param set-default BAT1_A_PER_V 17 # system_power unavailable param set-default CBRK_SUPPLY_CHK 894281 -# Select the Generic 250 Racer by default -param set-default SYS_AUTOSTART 4050 - param set-default SYS_HAS_MAG 0 diff --git a/boards/spracing/h7extreme/nuttx-config/scripts/script.ld b/boards/spracing/h7extreme/nuttx-config/scripts/script.ld index 1076c3ab22..33a39b13f1 100644 --- a/boards/spracing/h7extreme/nuttx-config/scripts/script.ld +++ b/boards/spracing/h7extreme/nuttx-config/scripts/script.ld @@ -131,8 +131,6 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { @@ -184,12 +182,6 @@ SECTIONS _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.rodata .rodata.*) *(.fixup) diff --git a/boards/svehicle/e2/default.px4board b/boards/svehicle/e2/default.px4board index 751fc835dc..810b77994b 100644 --- a/boards/svehicle/e2/default.px4board +++ b/boards/svehicle/e2/default.px4board @@ -71,7 +71,6 @@ CONFIG_MODULES_NAVIGATOR=y CONFIG_MODE_NAVIGATOR_VTOL_TAKEOFF=y CONFIG_MODULES_RC_UPDATE=y CONFIG_MODULES_SENSORS=y -CONFIG_MODULES_TEMPERATURE_COMPENSATION=y CONFIG_MODULES_UXRCE_DDS_CLIENT=y CONFIG_MODULES_VTOL_ATT_CONTROL=y CONFIG_SYSTEMCMDS_ACTUATOR_TEST=y diff --git a/boards/svehicle/e2/nuttx-config/scripts/bootloader_script.ld b/boards/svehicle/e2/nuttx-config/scripts/bootloader_script.ld index 2e6eba3607..293b6cccec 100644 --- a/boards/svehicle/e2/nuttx-config/scripts/bootloader_script.ld +++ b/boards/svehicle/e2/nuttx-config/scripts/bootloader_script.ld @@ -132,20 +132,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/svehicle/e2/nuttx-config/scripts/script.ld b/boards/svehicle/e2/nuttx-config/scripts/script.ld index b6b341d4e8..32d7cf662a 100644 --- a/boards/svehicle/e2/nuttx-config/scripts/script.ld +++ b/boards/svehicle/e2/nuttx-config/scripts/script.ld @@ -131,7 +131,6 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) EXTERN(board_get_manifest) SECTIONS @@ -140,12 +139,6 @@ SECTIONS _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/svehicle/e2/pwm_voltage/CMakeLists.txt b/boards/svehicle/e2/pwm_voltage/CMakeLists.txt index 6db1696208..3e4501e0f8 100644 --- a/boards/svehicle/e2/pwm_voltage/CMakeLists.txt +++ b/boards/svehicle/e2/pwm_voltage/CMakeLists.txt @@ -37,6 +37,8 @@ px4_add_module( SRCS pwm_voltage.cpp + MODULE_CONFIG + parameters.yaml DEPENDS px4_work_queue ) diff --git a/boards/svehicle/e2/pwm_voltage/parameters.c b/boards/svehicle/e2/pwm_voltage/parameters.c deleted file mode 100644 index 728bcc7a55..0000000000 --- a/boards/svehicle/e2/pwm_voltage/parameters.c +++ /dev/null @@ -1,43 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2025 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Control PWM output voltage - * - * @value 0 3.3V - * @value 1 5.0V - * - * @reboot_required true - * @group PWM Outputs - */ -PARAM_DEFINE_INT32(PWM_VOLT_SEL, 0); diff --git a/boards/svehicle/e2/pwm_voltage/parameters.yaml b/boards/svehicle/e2/pwm_voltage/parameters.yaml new file mode 100644 index 0000000000..82a36ce833 --- /dev/null +++ b/boards/svehicle/e2/pwm_voltage/parameters.yaml @@ -0,0 +1,13 @@ +module_name: pwm_voltage +parameters: +- group: PWM Outputs + definitions: + PWM_VOLT_SEL: + description: + short: Control PWM output voltage + type: enum + values: + 0: 3.3V + 1: 5.0V + default: 0 + reboot_required: true diff --git a/boards/svehicle/e2/src/board_config.h b/boards/svehicle/e2/src/board_config.h index 98677855c9..778224ae4c 100644 --- a/boards/svehicle/e2/src/board_config.h +++ b/boards/svehicle/e2/src/board_config.h @@ -219,8 +219,10 @@ /* HEATER * PWM in future */ -#define GPIO_HEATER_OUTPUT /* PB10 T2CH3 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTB|GPIO_PIN10) -#define HEATER_OUTPUT_EN(on_true) px4_arch_gpiowrite(GPIO_HEATER_OUTPUT, (on_true)) +#define GPIO_HEATER_OUTPUT +#define HEATER_NUM 1 +#define GPIO_HEATER1_OUTPUT /* PB10 T2CH3 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTB|GPIO_PIN10) +#define HEATER1_OUTPUT_EN(on_true) px4_arch_gpiowrite(GPIO_HEATER1_OUTPUT, (on_true)) /* PE6 is nARMED * The GPIO will be set as input while not armed HW will have external HW Pull UP. @@ -257,7 +259,7 @@ #define GPIO_VDD_5V_PERIPH_nOC /* PE15 */ (GPIO_INPUT |GPIO_FLOAT|GPIO_PORTE|GPIO_PIN15) #define GPIO_VDD_5V_HIPOWER_nEN /* PG10 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_SET|GPIO_PORTG|GPIO_PIN10) #define GPIO_VDD_5V_HIPOWER_nOC /* PF13 */ (GPIO_INPUT |GPIO_FLOAT|GPIO_PORTF|GPIO_PIN13) -#define GPIO_VDD_3V3_SENSORS4_EN /* PG8 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTG|GPIO_PIN8) +#define GPIO_VDD_3V3_SENSORS_EN /* PG8 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTG|GPIO_PIN8) #define GPIO_VDD_3V3_SPEKTRUM_POWER_EN /* PH2 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTH|GPIO_PIN2) #define GPIO_VDD_3V3_SD_CARD_EN /* PC13 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTC|GPIO_PIN13) @@ -274,7 +276,7 @@ #define VDD_5V_PERIPH_EN(on_true) px4_arch_gpiowrite(GPIO_VDD_5V_PERIPH_nEN, !(on_true)) #define VDD_5V_HIPOWER_EN(on_true) px4_arch_gpiowrite(GPIO_VDD_5V_HIPOWER_nEN, !(on_true)) -#define VDD_3V3_SENSORS4_EN(on_true) px4_arch_gpiowrite(GPIO_VDD_3V3_SENSORS4_EN, (on_true)) +#define VDD_3V3_SENSORS_EN(on_true) px4_arch_gpiowrite(GPIO_VDD_3V3_SENSORS_EN, (on_true)) #define VDD_3V3_SPEKTRUM_POWER_EN(on_true) px4_arch_gpiowrite(GPIO_VDD_3V3_SPEKTRUM_POWER_EN, (on_true)) #define READ_VDD_3V3_SPEKTRUM_POWER_EN() px4_arch_gpioread(GPIO_VDD_3V3_SPEKTRUM_POWER_EN) #define VDD_3V3_SD_CARD_EN(on_true) px4_arch_gpiowrite(GPIO_VDD_3V3_SD_CARD_EN, (on_true)) @@ -410,7 +412,7 @@ GPIO_CAN1_RX, \ GPIO_CAN2_TX, \ GPIO_CAN2_RX, \ - GPIO_HEATER_OUTPUT, \ + GPIO_HEATER1_OUTPUT, \ GPIO_nPOWER_IN_A, \ GPIO_nPOWER_IN_B, \ GPIO_nPOWER_IN_C, \ @@ -418,7 +420,7 @@ GPIO_VDD_5V_PERIPH_nOC, \ GPIO_VDD_5V_HIPOWER_nEN, \ GPIO_VDD_5V_HIPOWER_nOC, \ - GPIO_VDD_3V3_SENSORS4_EN, \ + GPIO_VDD_3V3_SENSORS_EN, \ GPIO_VDD_3V3_SPEKTRUM_POWER_EN, \ GPIO_VDD_3V3_SD_CARD_EN, \ GPIO_ETH_POWER_EN, \ diff --git a/boards/svehicle/e2/src/hw_config.h b/boards/svehicle/e2/src/hw_config.h index 73d4ec88df..69cf294673 100644 --- a/boards/svehicle/e2/src/hw_config.h +++ b/boards/svehicle/e2/src/hw_config.h @@ -28,8 +28,6 @@ * INTERFACE_USART 1 - (Optional) Scan and use the Serial interface for bootloading * USBDEVICESTRING "PX4 BL FMU v2.x" - USB id string * USBPRODUCTID 0x0011 - PID Should match defconfig - * BOOT_DELAY_ADDRESS 0x000001a0 - (Optional) From the linker script from Linker Script to get a custom - * delay provided by an APP FW * BOARD_TYPE 9 - Must match .prototype boad_id * _FLASH_KBYTES (*(uint16_t *)0x1fff7a22) - Run time flash size detection * BOARD_FLASH_SECTORS ((_FLASH_KBYTES == 0x400) ? 11 : 23) - Run time determine the physical last sector @@ -70,7 +68,6 @@ //#define USE_VBUS_PULL_DOWN #define INTERFACE_USART 1 #define INTERFACE_USART_CONFIG "/dev/ttyS0,1500000" -#define BOOT_DELAY_ADDRESS 0x000001a0 #define BOARD_TYPE 6110 #define _FLASH_KBYTES (*(uint32_t *)0x1FF1E880) #define BOARD_FLASH_SECTORS (15) diff --git a/boards/svehicle/e2/src/init.c b/boards/svehicle/e2/src/init.c index 585bb41d5e..a497635ccd 100644 --- a/boards/svehicle/e2/src/init.c +++ b/boards/svehicle/e2/src/init.c @@ -212,7 +212,7 @@ __EXPORT int board_app_initialize(uintptr_t arg) VDD_3V3_SD_CARD_EN(true); VDD_5V_PERIPH_EN(true); VDD_5V_HIPOWER_EN(true); - VDD_3V3_SENSORS4_EN(true); + VDD_3V3_SENSORS_EN(true); VDD_3V3_SPEKTRUM_POWER_EN(true); /* Need hrt running before using the ADC */ diff --git a/boards/thepeach/k1/default.px4board b/boards/thepeach/k1/default.px4board index 6eb341d697..505b6fc26a 100644 --- a/boards/thepeach/k1/default.px4board +++ b/boards/thepeach/k1/default.px4board @@ -66,7 +66,6 @@ CONFIG_MODULES_NAVIGATOR=y CONFIG_MODULES_RC_UPDATE=y CONFIG_MODULES_SENSORS=y CONFIG_MODULES_SIMULATION_SIMULATOR_SIH=y -CONFIG_MODULES_TEMPERATURE_COMPENSATION=y CONFIG_MODULES_UUV_ATT_CONTROL=y CONFIG_MODULES_UUV_POS_CONTROL=y CONFIG_MODULES_UXRCE_DDS_CLIENT=y diff --git a/boards/thepeach/k1/nuttx-config/scripts/script.ld b/boards/thepeach/k1/nuttx-config/scripts/script.ld index 6d92733df8..cf3e2bcd20 100644 --- a/boards/thepeach/k1/nuttx-config/scripts/script.ld +++ b/boards/thepeach/k1/nuttx-config/scripts/script.ld @@ -65,20 +65,12 @@ EXTERN(_vectors) /* force the vectors to be included in the output */ * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/thepeach/r1/default.px4board b/boards/thepeach/r1/default.px4board index 6eb341d697..505b6fc26a 100644 --- a/boards/thepeach/r1/default.px4board +++ b/boards/thepeach/r1/default.px4board @@ -66,7 +66,6 @@ CONFIG_MODULES_NAVIGATOR=y CONFIG_MODULES_RC_UPDATE=y CONFIG_MODULES_SENSORS=y CONFIG_MODULES_SIMULATION_SIMULATOR_SIH=y -CONFIG_MODULES_TEMPERATURE_COMPENSATION=y CONFIG_MODULES_UUV_ATT_CONTROL=y CONFIG_MODULES_UUV_POS_CONTROL=y CONFIG_MODULES_UXRCE_DDS_CLIENT=y diff --git a/boards/thepeach/r1/nuttx-config/scripts/script.ld b/boards/thepeach/r1/nuttx-config/scripts/script.ld index 6d92733df8..cf3e2bcd20 100644 --- a/boards/thepeach/r1/nuttx-config/scripts/script.ld +++ b/boards/thepeach/r1/nuttx-config/scripts/script.ld @@ -65,20 +65,12 @@ EXTERN(_vectors) /* force the vectors to be included in the output */ * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/uvify/core/default.px4board b/boards/uvify/core/default.px4board index fb7f41c76f..26f61c6005 100644 --- a/boards/uvify/core/default.px4board +++ b/boards/uvify/core/default.px4board @@ -57,7 +57,6 @@ CONFIG_MODULES_NAVIGATOR=y CONFIG_MODULES_RC_UPDATE=y CONFIG_MODULES_SENSORS=y CONFIG_MODULES_SIMULATION_SIMULATOR_SIH=y -CONFIG_MODULES_TEMPERATURE_COMPENSATION=y CONFIG_SYSTEMCMDS_ACTUATOR_TEST=y CONFIG_SYSTEMCMDS_BL_UPDATE=y CONFIG_SYSTEMCMDS_BSONDUMP=y diff --git a/boards/uvify/core/nuttx-config/scripts/script.ld b/boards/uvify/core/nuttx-config/scripts/script.ld index 6d92733df8..cf3e2bcd20 100644 --- a/boards/uvify/core/nuttx-config/scripts/script.ld +++ b/boards/uvify/core/nuttx-config/scripts/script.ld @@ -65,20 +65,12 @@ EXTERN(_vectors) /* force the vectors to be included in the output */ * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/uvify/core/src/board_config.h b/boards/uvify/core/src/board_config.h index 22708b23e2..fcfaff7ac0 100644 --- a/boards/uvify/core/src/board_config.h +++ b/boards/uvify/core/src/board_config.h @@ -139,8 +139,10 @@ /* Heater pins (reserved) */ #define GPIO_HEATER_INPUT (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTC|GPIO_PIN6) -#define GPIO_HEATER_OUTPUT (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTC|GPIO_PIN6) -#define HEATER_OUTPUT_EN(on_true) px4_arch_gpiowrite(GPIO_HEATER_OUTPUT, (on_true)) +#define GPIO_HEATER_OUTPUT +#define HEATER_NUM 1 +#define GPIO_HEATER1_OUTPUT (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTC|GPIO_PIN6) +#define HEATER1_OUTPUT_EN(on_true) px4_arch_gpiowrite(GPIO_HEATER1_OUTPUT, (on_true)) /* Power switch controls */ diff --git a/boards/uvify/core/src/init.c b/boards/uvify/core/src/init.c index 6fb6034fba..74c04e643c 100644 --- a/boards/uvify/core/src/init.c +++ b/boards/uvify/core/src/init.c @@ -222,7 +222,7 @@ stm32_boardinitialize(void) // Configure heater GPIO. stm32_configgpio(GPIO_HEATER_INPUT); - stm32_configgpio(GPIO_HEATER_OUTPUT); + stm32_configgpio(GPIO_HEATER1_OUTPUT); } /**************************************************************************** @@ -283,7 +283,7 @@ __EXPORT int board_app_initialize(uintptr_t arg) } // Power down the heater. - stm32_gpiowrite(GPIO_HEATER_OUTPUT, 0); + stm32_gpiowrite(GPIO_HEATER1_OUTPUT, 0); // Configure SPI-based devices. spi1 = stm32_spibus_initialize(1); diff --git a/boards/x-mav/ap-h743r1/default.px4board b/boards/x-mav/ap-h743r1/default.px4board index 031e7520f4..1cd1f400c5 100644 --- a/boards/x-mav/ap-h743r1/default.px4board +++ b/boards/x-mav/ap-h743r1/default.px4board @@ -62,7 +62,6 @@ CONFIG_MODULES_MC_RATE_CONTROL=y CONFIG_MODULES_NAVIGATOR=y CONFIG_MODULES_RC_UPDATE=y CONFIG_MODULES_SENSORS=y -CONFIG_MODULES_TEMPERATURE_COMPENSATION=y CONFIG_MODULES_VTOL_ATT_CONTROL=y CONFIG_SYSTEMCMDS_ACTUATOR_TEST=y CONFIG_SYSTEMCMDS_BL_UPDATE=y diff --git a/boards/x-mav/ap-h743r1/init/rc.board_defaults b/boards/x-mav/ap-h743r1/init/rc.board_defaults index af3cd672e1..9f47c942fc 100644 --- a/boards/x-mav/ap-h743r1/init/rc.board_defaults +++ b/boards/x-mav/ap-h743r1/init/rc.board_defaults @@ -13,7 +13,6 @@ param set-default PWM_MAIN_TIM0 -4 param set-default RC_INPUT_PROTO -1 param set-default IMU_GYRO_RATEMAX 2000 -param set-default SYS_AUTOSTART 4001 param set-default MC_PITCHRATE_K 0.4 param set-default MC_ROLLRATE_K 0.35 param set-default MC_YAWRATE_K 1.2 diff --git a/boards/x-mav/ap-h743r1/init/rc.board_sensors b/boards/x-mav/ap-h743r1/init/rc.board_sensors index d34c45e4c4..2e3f096af0 100644 --- a/boards/x-mav/ap-h743r1/init/rc.board_sensors +++ b/boards/x-mav/ap-h743r1/init/rc.board_sensors @@ -17,10 +17,7 @@ then fi # baro -if ! dps310 -I start -a 0x76 -then - spl06 -I start -a 0x76 -fi +spl06 -I start -a 0x76 # internal mag qmc5883p -I -R 4 start diff --git a/boards/x-mav/ap-h743r1/nuttx-config/nsh/defconfig b/boards/x-mav/ap-h743r1/nuttx-config/nsh/defconfig index dc9d2800d1..9271b6c98e 100644 --- a/boards/x-mav/ap-h743r1/nuttx-config/nsh/defconfig +++ b/boards/x-mav/ap-h743r1/nuttx-config/nsh/defconfig @@ -243,7 +243,6 @@ CONFIG_UART7_RXBUFSIZE=600 CONFIG_UART7_TXBUFSIZE=3000 CONFIG_UART8_BAUD=57600 CONFIG_UART8_RXBUFSIZE=600 -CONFIG_UART8_SERIAL_CONSOLE=y CONFIG_UART8_TXBUFSIZE=3000 CONFIG_USART1_BAUD=57600 CONFIG_USART1_RXBUFSIZE=600 diff --git a/boards/x-mav/ap-h743r1/nuttx-config/scripts/bootloader_script.ld b/boards/x-mav/ap-h743r1/nuttx-config/scripts/bootloader_script.ld index abd27222b9..9888db610e 100644 --- a/boards/x-mav/ap-h743r1/nuttx-config/scripts/bootloader_script.ld +++ b/boards/x-mav/ap-h743r1/nuttx-config/scripts/bootloader_script.ld @@ -130,20 +130,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/x-mav/ap-h743r1/nuttx-config/scripts/script.ld b/boards/x-mav/ap-h743r1/nuttx-config/scripts/script.ld index ace39a1bd7..562a106f80 100644 --- a/boards/x-mav/ap-h743r1/nuttx-config/scripts/script.ld +++ b/boards/x-mav/ap-h743r1/nuttx-config/scripts/script.ld @@ -131,20 +131,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/x-mav/ap-h743r1/pwm_voltage/CMakeLists.txt b/boards/x-mav/ap-h743r1/pwm_voltage/CMakeLists.txt index 6db1696208..3e4501e0f8 100644 --- a/boards/x-mav/ap-h743r1/pwm_voltage/CMakeLists.txt +++ b/boards/x-mav/ap-h743r1/pwm_voltage/CMakeLists.txt @@ -37,6 +37,8 @@ px4_add_module( SRCS pwm_voltage.cpp + MODULE_CONFIG + parameters.yaml DEPENDS px4_work_queue ) diff --git a/boards/x-mav/ap-h743r1/pwm_voltage/parameters.c b/boards/x-mav/ap-h743r1/pwm_voltage/parameters.c deleted file mode 100644 index 728bcc7a55..0000000000 --- a/boards/x-mav/ap-h743r1/pwm_voltage/parameters.c +++ /dev/null @@ -1,43 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2025 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Control PWM output voltage - * - * @value 0 3.3V - * @value 1 5.0V - * - * @reboot_required true - * @group PWM Outputs - */ -PARAM_DEFINE_INT32(PWM_VOLT_SEL, 0); diff --git a/boards/x-mav/ap-h743r1/pwm_voltage/parameters.yaml b/boards/x-mav/ap-h743r1/pwm_voltage/parameters.yaml new file mode 100644 index 0000000000..82a36ce833 --- /dev/null +++ b/boards/x-mav/ap-h743r1/pwm_voltage/parameters.yaml @@ -0,0 +1,13 @@ +module_name: pwm_voltage +parameters: +- group: PWM Outputs + definitions: + PWM_VOLT_SEL: + description: + short: Control PWM output voltage + type: enum + values: + 0: 3.3V + 1: 5.0V + default: 0 + reboot_required: true diff --git a/boards/x-mav/ap-h743r1/src/can.c b/boards/x-mav/ap-h743r1/src/can.c index 71a89955e2..709d125ad3 100644 --- a/boards/x-mav/ap-h743r1/src/can.c +++ b/boards/x-mav/ap-h743r1/src/can.c @@ -49,8 +49,6 @@ uint16_t board_get_can_interfaces(void) { uint16_t enabled_interfaces = 0x3; - enabled_interfaces &= ~(1 << 1); - return enabled_interfaces; } diff --git a/boards/x-mav/ap-h743r1/src/hw_config.h b/boards/x-mav/ap-h743r1/src/hw_config.h index faffbab701..32b3226028 100644 --- a/boards/x-mav/ap-h743r1/src/hw_config.h +++ b/boards/x-mav/ap-h743r1/src/hw_config.h @@ -53,8 +53,6 @@ * INTERFACE_USART 1 - (Optional) Scan and use the Serial interface for bootloading * USBDEVICESTRING "PX4 BL FMU v2.x" - USB id string * USBPRODUCTID 0x0011 - PID Should match defconfig - * BOOT_DELAY_ADDRESS 0x000001a0 - (Optional) From the linker script from Linker Script to get a custom - * delay provided by an APP FW * BOARD_TYPE 9 - Must match .prototype boad_id * _FLASH_KBYTES (*(uint16_t *)0x1fff7a22) - Run time flash size detection * BOARD_FLASH_SECTORS ((_FLASH_KBYTES == 0x400) ? 11 : 23) - Run time determine the physical last sector @@ -95,7 +93,6 @@ //#define USE_VBUS_PULL_DOWN // #define INTERFACE_USART 6 #define INTERFACE_USART_CONFIG "/dev/ttyS5,57600" -#define BOOT_DELAY_ADDRESS 0x000001a0 #define BOARD_TYPE 1203 #define _FLASH_KBYTES (*(uint32_t *)0x1FF1E880) #define BOARD_FLASH_SECTORS (15) diff --git a/boards/x-mav/ap-h743v2/default.px4board b/boards/x-mav/ap-h743v2/default.px4board index 538f252ae0..f9970d3e05 100644 --- a/boards/x-mav/ap-h743v2/default.px4board +++ b/boards/x-mav/ap-h743v2/default.px4board @@ -61,7 +61,6 @@ CONFIG_MODULES_MC_RATE_CONTROL=y CONFIG_MODULES_NAVIGATOR=y CONFIG_MODULES_RC_UPDATE=y CONFIG_MODULES_SENSORS=y -CONFIG_MODULES_TEMPERATURE_COMPENSATION=y CONFIG_MODULES_VTOL_ATT_CONTROL=y CONFIG_SYSTEMCMDS_ACTUATOR_TEST=y CONFIG_SYSTEMCMDS_BL_UPDATE=y diff --git a/boards/x-mav/ap-h743v2/init/rc.board_defaults b/boards/x-mav/ap-h743v2/init/rc.board_defaults index b22e138e7d..da6e60e096 100644 --- a/boards/x-mav/ap-h743v2/init/rc.board_defaults +++ b/boards/x-mav/ap-h743v2/init/rc.board_defaults @@ -13,7 +13,6 @@ param set-default PWM_MAIN_TIM0 -4 param set-default RC_INPUT_PROTO -1 param set-default IMU_GYRO_RATEMAX 2000 -param set-default SYS_AUTOSTART 4001 param set-default MC_PITCHRATE_K 0.4 param set-default MC_ROLLRATE_K 0.35 param set-default MC_YAWRATE_K 1.2 diff --git a/boards/x-mav/ap-h743v2/nuttx-config/scripts/bootloader_script.ld b/boards/x-mav/ap-h743v2/nuttx-config/scripts/bootloader_script.ld index fb877cc443..fcf84a4c60 100644 --- a/boards/x-mav/ap-h743v2/nuttx-config/scripts/bootloader_script.ld +++ b/boards/x-mav/ap-h743v2/nuttx-config/scripts/bootloader_script.ld @@ -130,20 +130,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/x-mav/ap-h743v2/nuttx-config/scripts/script.ld b/boards/x-mav/ap-h743v2/nuttx-config/scripts/script.ld index 1dc1a0ef97..3686e2d66e 100644 --- a/boards/x-mav/ap-h743v2/nuttx-config/scripts/script.ld +++ b/boards/x-mav/ap-h743v2/nuttx-config/scripts/script.ld @@ -131,20 +131,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/x-mav/ap-h743v2/src/hw_config.h b/boards/x-mav/ap-h743v2/src/hw_config.h index 5ded44ad09..4955bd65ee 100644 --- a/boards/x-mav/ap-h743v2/src/hw_config.h +++ b/boards/x-mav/ap-h743v2/src/hw_config.h @@ -53,8 +53,6 @@ * INTERFACE_USART 1 - (Optional) Scan and use the Serial interface for bootloading * USBDEVICESTRING "PX4 BL FMU v2.x" - USB id string * USBPRODUCTID 0x0011 - PID Should match defconfig - * BOOT_DELAY_ADDRESS 0x000001a0 - (Optional) From the linker script from Linker Script to get a custom - * delay provided by an APP FW * BOARD_TYPE 9 - Must match .prototype boad_id * _FLASH_KBYTES (*(uint16_t *)0x1fff7a22) - Run time flash size detection * BOARD_FLASH_SECTORS ((_FLASH_KBYTES == 0x400) ? 11 : 23) - Run time determine the physical last sector @@ -95,7 +93,6 @@ //#define USE_VBUS_PULL_DOWN #define INTERFACE_USART 6 #define INTERFACE_USART_CONFIG "/dev/ttyS5,57600" -#define BOOT_DELAY_ADDRESS 0x000001a0 #define BOARD_TYPE 1200 #define BOARD_FLASH_SECTORS (14) #define BOARD_FLASH_SIZE (16 * 128 * 1024) diff --git a/boards/xc-fly/xc-slam/extras/xc-fly_xc-slam_bootloader.bin b/boards/xc-fly/xc-slam/extras/xc-fly_xc-slam_bootloader.bin deleted file mode 100755 index b8f290f227..0000000000 Binary files a/boards/xc-fly/xc-slam/extras/xc-fly_xc-slam_bootloader.bin and /dev/null differ diff --git a/boards/xc-fly/xc-slam/init/rc.board_defaults b/boards/xc-fly/xc-slam/init/rc.board_defaults deleted file mode 100644 index 828c3f01ba..0000000000 --- a/boards/xc-fly/xc-slam/init/rc.board_defaults +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/sh -# -# board specific defaults -#------------------------------------------------------------------------------ -param set-default BAT1_A_PER_V 17 -param set-default BAT1_N_CELLS 4 -param set-default BAT1_V_CHARGED 4.2 -param set-default BAT1_V_DIV 10.1 -param set-default BAT1_V_EMPTY 3.2 - -param set-default SYS_HAS_MAG 1 -param set-default PWM_MAIN_TIM0 -4 -param set-default RC_INPUT_PROTO -1 - -param set-default IMU_GYRO_RATEMAX 2000 -param set-default SYS_AUTOSTART 4001 -param set-default MC_PITCHRATE_K 0.4 -param set-default MC_ROLLRATE_K 0.35 -param set-default MC_YAWRATE_K 1.2 -param set-default MC_YAWRATE_MAX 360 -param set-default MAV_TYPE 2 -param set-default CA_AIRFRAME 0 -param set-default CA_ROTOR_COUNT 4 -param set-default CBRK_SUPPLY_CHK 894281 - -param set-default USB_MAV_MODE 5 diff --git a/boards/xc-fly/xc-slam/init/rc.board_extras b/boards/xc-fly/xc-slam/init/rc.board_extras deleted file mode 100644 index a6f12267a3..0000000000 --- a/boards/xc-fly/xc-slam/init/rc.board_extras +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh -# -# board specific extras init -#------------------------------------------------------------------------------ - -# DShot telemetry is always on UART7 -# dshot telemetry -d /dev/ttyS5 diff --git a/boards/xc-fly/xc-slam/init/rc.board_sensors b/boards/xc-fly/xc-slam/init/rc.board_sensors deleted file mode 100644 index 4f27cd2cf3..0000000000 --- a/boards/xc-fly/xc-slam/init/rc.board_sensors +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/sh -# -# board specific sensors init -#------------------------------------------------------------------------------ - -board_adc start -# heater start - -# BMI088 -bmi088 -A -R 2 -s start -bmi088 -G -R 2 -s start - -# 42688P -icm42688p -s start - -# baro -dps310 -I start -a 119 - -# internal mag -ist8310 -I -R 2 start diff --git a/boards/xc-fly/xc-slam/nuttx-config/include/board.h b/boards/xc-fly/xc-slam/nuttx-config/include/board.h deleted file mode 100644 index e9546956be..0000000000 --- a/boards/xc-fly/xc-slam/nuttx-config/include/board.h +++ /dev/null @@ -1,491 +0,0 @@ -/************************************************************************************ - * nuttx-configs/px4_fmu-v6u/include/board.h - * - * Copyright (C) 2016-2019 Gregory Nutt. All rights reserved. - * Authors: David Sidrane - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name NuttX nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ************************************************************************************/ -#ifndef __NUTTX_CONFIG_MATEKH743SLIM_INCLUDE_BOARD_H -#define __NUTTX_CONFIG_MATEKH743SLIM_INCLUDE_BOARD_H - -/************************************************************************************ - * Included Files - ************************************************************************************/ - -#include "board_dma_map.h" - -#include - -#ifndef __ASSEMBLY__ -# include -#endif - -#include "stm32_rcc.h" -#include "stm32_sdmmc.h" - -/************************************************************************************ - * Pre-processor Definitions - ************************************************************************************/ - -/* Clocking *************************************************************************/ -/* The MatekH743-Slim board provides the following clock sources: - * - * X1: 16 MHz crystal for HSE - * - * So we have these clock source available within the STM32 - * - * HSI: 16 MHz RC factory-trimmed - * HSE: 16 MHz crystal for HSE - */ - -#define STM32_BOARD_XTAL 8000000ul - -#define STM32_HSI_FREQUENCY 16000000ul -#define STM32_LSI_FREQUENCY 32000 -#define STM32_HSE_FREQUENCY STM32_BOARD_XTAL -#define STM32_LSE_FREQUENCY 32768 - -/* Main PLL Configuration. - * - * PLL source is HSE = 16,000,000 - * - * PLL_VCOx = (STM32_HSE_FREQUENCY / PLLM) * PLLN - * Subject to: - * - * 1 <= PLLM <= 63 - * 4 <= PLLN <= 512 - * 150 MHz <= PLL_VCOL <= 420MHz - * 192 MHz <= PLL_VCOH <= 836MHz - * - * SYSCLK = PLL_VCO / PLLP - * CPUCLK = SYSCLK / D1CPRE - * Subject to - * - * PLLP1 = {2, 4, 6, 8, ..., 128} - * PLLP2,3 = {2, 3, 4, ..., 128} - * CPUCLK <= 480 MHz - */ - -#define STM32_BOARD_USEHSE - -#define STM32_PLLCFG_PLLSRC RCC_PLLCKSELR_PLLSRC_HSE - -/* PLL1, wide 4 - 8 MHz input, enable DIVP, DIVQ, DIVR - * - * PLL1_VCO = (8,000,000 / 1) * 120 = 960 MHz - * - * PLL1P = PLL1_VCO/2 = 960 MHz / 2 = 480 MHz - * PLL1Q = PLL1_VCO/4 = 960 MHz / 4 = 240 MHz - * PLL1R = PLL1_VCO/8 = 960 MHz / 8 = 120 MHz - */ - -#define STM32_PLLCFG_PLL1CFG (RCC_PLLCFGR_PLL1VCOSEL_WIDE | \ - RCC_PLLCFGR_PLL1RGE_4_8_MHZ | \ - RCC_PLLCFGR_DIVP1EN | \ - RCC_PLLCFGR_DIVQ1EN | \ - RCC_PLLCFGR_DIVR1EN) -#define STM32_PLLCFG_PLL1M RCC_PLLCKSELR_DIVM1(1) -#define STM32_PLLCFG_PLL1N RCC_PLL1DIVR_N1(120) -#define STM32_PLLCFG_PLL1P RCC_PLL1DIVR_P1(2) -#define STM32_PLLCFG_PLL1Q RCC_PLL1DIVR_Q1(4) -#define STM32_PLLCFG_PLL1R RCC_PLL1DIVR_R1(8) - -#define STM32_VCO1_FREQUENCY ((STM32_HSE_FREQUENCY / 1) * 120) -#define STM32_PLL1P_FREQUENCY (STM32_VCO1_FREQUENCY / 2) -#define STM32_PLL1Q_FREQUENCY (STM32_VCO1_FREQUENCY / 4) -#define STM32_PLL1R_FREQUENCY (STM32_VCO1_FREQUENCY / 8) - -/* PLL2 */ - -#define STM32_PLLCFG_PLL2CFG (RCC_PLLCFGR_PLL2VCOSEL_WIDE | \ - RCC_PLLCFGR_PLL2RGE_4_8_MHZ | \ - RCC_PLLCFGR_DIVP2EN | \ - RCC_PLLCFGR_DIVQ2EN | \ - RCC_PLLCFGR_DIVR2EN) -#define STM32_PLLCFG_PLL2M RCC_PLLCKSELR_DIVM2(2) -#define STM32_PLLCFG_PLL2N RCC_PLL2DIVR_N2(48) -#define STM32_PLLCFG_PLL2P RCC_PLL2DIVR_P2(2) -#define STM32_PLLCFG_PLL2Q RCC_PLL2DIVR_Q2(2) -#define STM32_PLLCFG_PLL2R RCC_PLL2DIVR_R2(2) - -#define STM32_VCO2_FREQUENCY ((STM32_HSE_FREQUENCY / 2) * 48) -#define STM32_PLL2P_FREQUENCY (STM32_VCO2_FREQUENCY / 2) -#define STM32_PLL2Q_FREQUENCY (STM32_VCO2_FREQUENCY / 2) -#define STM32_PLL2R_FREQUENCY (STM32_VCO2_FREQUENCY / 2) - -/* PLL3 */ - -#define STM32_PLLCFG_PLL3CFG (RCC_PLLCFGR_PLL3VCOSEL_WIDE | \ - RCC_PLLCFGR_PLL3RGE_4_8_MHZ | \ - RCC_PLLCFGR_DIVQ3EN) -#define STM32_PLLCFG_PLL3M RCC_PLLCKSELR_DIVM3(2) -#define STM32_PLLCFG_PLL3N RCC_PLL3DIVR_N3(48) -#define STM32_PLLCFG_PLL3P RCC_PLL3DIVR_P3(2) -#define STM32_PLLCFG_PLL3Q RCC_PLL3DIVR_Q3(4) -#define STM32_PLLCFG_PLL3R RCC_PLL3DIVR_R3(2) - -#define STM32_VCO3_FREQUENCY ((STM32_HSE_FREQUENCY / 2) * 48) -#define STM32_PLL3P_FREQUENCY (STM32_VCO3_FREQUENCY / 2) -#define STM32_PLL3Q_FREQUENCY (STM32_VCO3_FREQUENCY / 4) -#define STM32_PLL3R_FREQUENCY (STM32_VCO3_FREQUENCY / 2) - -/* SYSCLK = PLL1P = 480MHz - * CPUCLK = SYSCLK / 1 = 480 MHz - */ - -#define STM32_RCC_D1CFGR_D1CPRE (RCC_D1CFGR_D1CPRE_SYSCLK) -#define STM32_SYSCLK_FREQUENCY (STM32_PLL1P_FREQUENCY) -#define STM32_CPUCLK_FREQUENCY (STM32_SYSCLK_FREQUENCY / 1) - -/* Configure Clock Assignments */ - -/* AHB clock (HCLK) is SYSCLK/2 (240 MHz max) - * HCLK1 = HCLK2 = HCLK3 = HCLK4 = 240 - */ - -#define STM32_RCC_D1CFGR_HPRE RCC_D1CFGR_HPRE_SYSCLKd2 /* HCLK = SYSCLK / 2 */ -#define STM32_ACLK_FREQUENCY (STM32_CPUCLK_FREQUENCY / 2) /* ACLK in D1, HCLK3 in D1 */ -#define STM32_HCLK_FREQUENCY (STM32_CPUCLK_FREQUENCY / 2) /* HCLK in D2, HCLK4 in D3 */ -#define STM32_BOARD_HCLK STM32_HCLK_FREQUENCY /* same as above, to satisfy compiler */ - -/* APB1 clock (PCLK1) is HCLK/2 (120 MHz) */ - -#define STM32_RCC_D2CFGR_D2PPRE1 RCC_D2CFGR_D2PPRE1_HCLKd2 /* PCLK1 = HCLK / 2 */ -#define STM32_PCLK1_FREQUENCY (STM32_HCLK_FREQUENCY/2) - -/* APB2 clock (PCLK2) is HCLK/2 (120 MHz) */ - -#define STM32_RCC_D2CFGR_D2PPRE2 RCC_D2CFGR_D2PPRE2_HCLKd2 /* PCLK2 = HCLK / 2 */ -#define STM32_PCLK2_FREQUENCY (STM32_HCLK_FREQUENCY/2) - -/* APB3 clock (PCLK3) is HCLK/2 (120 MHz) */ - -#define STM32_RCC_D1CFGR_D1PPRE RCC_D1CFGR_D1PPRE_HCLKd2 /* PCLK3 = HCLK / 2 */ -#define STM32_PCLK3_FREQUENCY (STM32_HCLK_FREQUENCY/2) - -/* APB4 clock (PCLK4) is HCLK/4 (120 MHz) */ - -#define STM32_RCC_D3CFGR_D3PPRE RCC_D3CFGR_D3PPRE_HCLKd2 /* PCLK4 = HCLK / 2 */ -#define STM32_PCLK4_FREQUENCY (STM32_HCLK_FREQUENCY/2) - -/* Timer clock frequencies */ - -/* Timers driven from APB1 will be twice PCLK1 */ - -#define STM32_APB1_TIM2_CLKIN (2*STM32_PCLK1_FREQUENCY) -#define STM32_APB1_TIM3_CLKIN (2*STM32_PCLK1_FREQUENCY) -#define STM32_APB1_TIM4_CLKIN (2*STM32_PCLK1_FREQUENCY) -#define STM32_APB1_TIM5_CLKIN (2*STM32_PCLK1_FREQUENCY) -#define STM32_APB1_TIM6_CLKIN (2*STM32_PCLK1_FREQUENCY) -#define STM32_APB1_TIM7_CLKIN (2*STM32_PCLK1_FREQUENCY) -#define STM32_APB1_TIM12_CLKIN (2*STM32_PCLK1_FREQUENCY) -#define STM32_APB1_TIM13_CLKIN (2*STM32_PCLK1_FREQUENCY) -#define STM32_APB1_TIM14_CLKIN (2*STM32_PCLK1_FREQUENCY) - -/* Timers driven from APB2 will be twice PCLK2 */ - -#define STM32_APB2_TIM1_CLKIN (2*STM32_PCLK2_FREQUENCY) -#define STM32_APB2_TIM8_CLKIN (2*STM32_PCLK2_FREQUENCY) -#define STM32_APB2_TIM15_CLKIN (2*STM32_PCLK2_FREQUENCY) -#define STM32_APB2_TIM16_CLKIN (2*STM32_PCLK2_FREQUENCY) -#define STM32_APB2_TIM17_CLKIN (2*STM32_PCLK2_FREQUENCY) - -/* Kernel Clock Configuration - * - * Note: look at Table 54 in ST Manual - */ - -/* I2C123 clock source */ - -#define STM32_RCC_D2CCIP2R_I2C123SRC RCC_D2CCIP2R_I2C123SEL_HSI - -/* I2C4 clock source */ - -#define STM32_RCC_D3CCIPR_I2C4SRC RCC_D3CCIPR_I2C4SEL_HSI - -/* SPI123 clock source */ - -#define STM32_RCC_D2CCIP1R_SPI123SRC RCC_D2CCIP1R_SPI123SEL_PLL2 - -/* SPI45 clock source */ - -#define STM32_RCC_D2CCIP1R_SPI45SRC RCC_D2CCIP1R_SPI45SEL_PLL2 - -/* SPI6 clock source */ - -#define STM32_RCC_D3CCIPR_SPI6SRC RCC_D3CCIPR_SPI6SEL_PLL2 - -/* USB 1 and 2 clock source */ - -#define STM32_RCC_D2CCIP2R_USBSRC RCC_D2CCIP2R_USBSEL_PLL3 - -/* ADC 1 2 3 clock source */ - -#define STM32_RCC_D3CCIPR_ADCSEL RCC_D3CCIPR_ADCSEL_PLL2 - -/* FDCAN 1 clock source */ - -// #define STM32_RCC_D2CCIP1R_FDCANSEL RCC_D2CCIP1R_FDCANSEL_HSE /* FDCAN 1 2 clock source */ - -#define STM32_FDCANCLK STM32_HSE_FREQUENCY - -/* FLASH wait states - * - * ------------ ---------- ----------- - * Vcore MAX ACLK WAIT STATES - * ------------ ---------- ----------- - * 1.15-1.26 V 70 MHz 0 - * (VOS1 level) 140 MHz 1 - * 210 MHz 2 - * 1.05-1.15 V 55 MHz 0 - * (VOS2 level) 110 MHz 1 - * 165 MHz 2 - * 220 MHz 3 - * 0.95-1.05 V 45 MHz 0 - * (VOS3 level) 90 MHz 1 - * 135 MHz 2 - * 180 MHz 3 - * 225 MHz 4 - * ------------ ---------- ----------- - */ - -#define BOARD_FLASH_WAITSTATES 2 - -/* SDMMC definitions ********************************************************/ - -/* Init 400kHz, freq = PLL1Q/(2*div) div = PLL1Q/(2*freq) */ - -#define STM32_SDMMC_INIT_CLKDIV (300 << STM32_SDMMC_CLKCR_CLKDIV_SHIFT) - -/* 25 MHz Max for now, 25 mHZ = PLL1Q/(2*div), div = PLL1Q/(2*freq) - * div = 4.8 = 240 / 50, So round up to 5 for default speed 24 MB/s - */ - -#if defined(CONFIG_STM32H7_SDMMC_XDMA) || defined(CONFIG_STM32H7_SDMMC_IDMA) -# define STM32_SDMMC_MMCXFR_CLKDIV (5 << STM32_SDMMC_CLKCR_CLKDIV_SHIFT) -#else -# define STM32_SDMMC_MMCXFR_CLKDIV (100 << STM32_SDMMC_CLKCR_CLKDIV_SHIFT) -#endif -#if defined(CONFIG_STM32H7_SDMMC_XDMA) || defined(CONFIG_STM32H7_SDMMC_IDMA) -# define STM32_SDMMC_SDXFR_CLKDIV (5 << STM32_SDMMC_CLKCR_CLKDIV_SHIFT) -#else -# define STM32_SDMMC_SDXFR_CLKDIV (100 << STM32_SDMMC_CLKCR_CLKDIV_SHIFT) -#endif - -#define STM32_SDMMC_CLKCR_EDGE STM32_SDMMC_CLKCR_NEGEDGE - -/* LED definitions ******************************************************************/ -/* The board has two, LED_GREEN a Green LED and LED_BLUE a Blue LED, - * that can be controlled by software. - * - * If CONFIG_ARCH_LEDS is not defined, then the user can control the LEDs in any way. - * The following definitions are used to access individual LEDs. - */ - -/* LED index values for use with board_userled() */ - -#define BOARD_LED1 0 -#define BOARD_LED2 1 -#define BOARD_LED3 2 -#define BOARD_NLEDS 3 - -#define BOARD_LED_RED BOARD_LED1 -#define BOARD_LED_GREEN BOARD_LED2 -#define BOARD_LED_BLUE BOARD_LED3 - -/* LED bits for use with board_userled_all() */ - -#define BOARD_LED1_BIT (1 << BOARD_LED1) -#define BOARD_LED2_BIT (1 << BOARD_LED2) -#define BOARD_LED3_BIT (1 << BOARD_LED3) - -/* If CONFIG_ARCH_LEDS is defined, the usage by the board port is defined in - * include/board.h and src/stm32_leds.c. The LEDs are used to encode OS-related - * events as follows: - * - * - * SYMBOL Meaning LED state - * Red Green Blue - * ---------------------- -------------------------- ------ ------ ----*/ - -#define LED_STARTED 0 /* NuttX has been started OFF OFF OFF */ -#define LED_HEAPALLOCATE 1 /* Heap has been allocated OFF OFF ON */ -#define LED_IRQSENABLED 2 /* Interrupts enabled OFF ON OFF */ -#define LED_STACKCREATED 3 /* Idle stack created OFF ON ON */ -#define LED_INIRQ 4 /* In an interrupt N/C N/C GLOW */ -#define LED_SIGNAL 5 /* In a signal handler N/C GLOW N/C */ -#define LED_ASSERTION 6 /* An assertion failed GLOW N/C GLOW */ -#define LED_PANIC 7 /* The system has crashed Blink OFF N/C */ -#define LED_IDLE 8 /* MCU is is sleep mode ON OFF OFF */ - -/* Thus if the Green LED is statically on, NuttX has successfully booted and - * is, apparently, running normally. If the Red LED is flashing at - * approximately 2Hz, then a fatal error has been detected and the system - * has halted. - */ - -/* Alternate function pin selections ************************************************/ - -#define GPIO_USART1_RX GPIO_USART1_RX_2 /* PBA10 */ -#define GPIO_USART1_TX GPIO_USART1_TX_2 /* PA9 */ -#define GPIO_USART1_CK GPIO_USART1_CK /* PB8 NC */ - -#define GPIO_USART2_RX GPIO_USART2_RX_2 /* PD6 */ -#define GPIO_USART2_TX GPIO_USART2_TX_2 /* PD5 */ -#define GPIO_USART2_CK GPIO_USART2_CK_2 /* PD7 NC */ - -#define GPIO_USART3_RX GPIO_USART3_RX_3 /* PD9 */ -#define GPIO_USART3_TX GPIO_USART3_TX_3 /* PD8 */ -#define GPIO_USART3_CK GPIO_USART3_CK_3 /* PD10 NC */ - -#define GPIO_UART4_RX GPIO_UART4_RX_3 /* PB8 */ -#define GPIO_UART4_TX GPIO_UART4_TX_3 /* PB9 */ - -#define GPIO_UART5_RX GPIO_UART5_RX_1 /* PB12 */ -#define GPIO_UART5_TX GPIO_UART5_TX_1 /* PB13 */ - -#define GPIO_USART6_RX GPIO_USART6_RX_1 /* PC7 */ -#define GPIO_USART6_TX GPIO_USART6_TX_1 /* PC6 */ - -#define GPIO_UART7_RX GPIO_UART7_RX_3 /* PE7 */ -#define GPIO_UART7_TX GPIO_UART7_TX_3 /* PE8 NC */ - -#define GPIO_UART8_RX GPIO_UART8_RX_1 /* PE0 */ -#define GPIO_UART8_TX GPIO_UART8_TX_1 /* PE1 */ - - - -/* SPI - * - - */ - -#define ADJ_SLEW_RATE(p) (((p) & ~GPIO_SPEED_MASK) | (GPIO_SPEED_2MHz)) - -#define GPIO_SPI1_MISO GPIO_SPI1_MISO_1 /* PA6 */ -#define GPIO_SPI1_MOSI GPIO_SPI1_MOSI_1 /* PA7 */ -#define GPIO_SPI1_SCK ADJ_SLEW_RATE(GPIO_SPI1_SCK_1) /* PA5 */ - -#define GPIO_SPI2_MISO GPIO_SPI2_MISO_1 /* PB14 */ -#define GPIO_SPI2_MOSI GPIO_SPI2_MOSI_3 /* PC3 */ -#define GPIO_SPI2_SCK ADJ_SLEW_RATE(GPIO_SPI2_SCK_5) /* PD3 */ - -#define GPIO_SPI3_MISO GPIO_SPI3_MISO_1 /* PB4 */ -#define GPIO_SPI3_MOSI GPIO_SPI3_MOSI_3 /* PB2 */ -#define GPIO_SPI3_SCK ADJ_SLEW_RATE(GPIO_SPI3_SCK_1) /* PB3 */ - -#define GPIO_SPI4_MISO GPIO_SPI4_MISO_2 /* PE5 */ -#define GPIO_SPI4_MOSI GPIO_SPI4_MOSI_2 /* PE6 */ -#define GPIO_SPI4_SCK ADJ_SLEW_RATE(GPIO_SPI4_SCK_2) /* PE2 */ - -/* I2C - * - - * - */ - -#define GPIO_I2C1_SCL GPIO_I2C1_SCL_1 /* PB6 */ -#define GPIO_I2C1_SDA GPIO_I2C1_SDA_1 /* PB7 */ - -#define GPIO_I2C1_SCL_GPIO (GPIO_OUTPUT | GPIO_OPENDRAIN |GPIO_SPEED_50MHz | GPIO_OUTPUT_SET | GPIO_PORTB | GPIO_PIN6) -#define GPIO_I2C1_SDA_GPIO (GPIO_OUTPUT | GPIO_OPENDRAIN |GPIO_SPEED_50MHz | GPIO_OUTPUT_SET | GPIO_PORTB | GPIO_PIN7) - -#define GPIO_I2C4_SCL GPIO_I2C4_SCL_1 /* PD12 */ -#define GPIO_I2C4_SDA GPIO_I2C4_SDA_1 /* PD13 */ - -#define GPIO_I2C4_SCL_GPIO (GPIO_OUTPUT | GPIO_OPENDRAIN |GPIO_SPEED_50MHz | GPIO_OUTPUT_SET | GPIO_PORTD | GPIO_PIN12) -#define GPIO_I2C4_SDA_GPIO (GPIO_OUTPUT | GPIO_OPENDRAIN |GPIO_SPEED_50MHz | GPIO_OUTPUT_SET | GPIO_PORTD | GPIO_PIN13) - -#define GPIO_CAN1_RX GPIO_CAN1_RX_3 /* PD0 */ -#define GPIO_CAN1_TX GPIO_CAN1_TX_3 /* PD1 */ - -/* SDMMC1 - * - * SDMMC1_D0 PC8 - * SDMMC1_D1 PC9 - * SDMMC1_D2 PC10 - * SDMMC1_D3 PC11 - * SDMMC1_CK PC12 - * SDMMC1_CMD PD2 - */ - -// #define GPIO_SDMMC1_D0 GPIO_SDMMC1_D0 /* PC8 */ -// #define GPIO_SDMMC1_D1 GPIO_SDMMC1_D1 /* PC9 */ -// #define GPIO_SDMMC1_D2 GPIO_SDMMC1_D2 /* PC10 */ -// #define GPIO_SDMMC1_D3 GPIO_SDMMC1_D3 /* PC11 */ -// #define GPIO_SDMMC1_CK GPIO_SDMMC1_CK /* PC12 */ -// #define GPIO_SDMMC1_CMD GPIO_SDMMC1_CMD /* PD2 */ - - -/* USB - * - * OTG_FS_DM PA11 - * OTG_FS_DP PA12 - * VBUS PA9 - */ - - -/* Board provides GPIO or other Hardware for signaling to timing analyzer */ - -// #if defined(CONFIG_BOARD_USE_PROBES) -// # include "stm32_gpio.h" -// # define PROBE_N(n) (1<<((n)-1)) -// # define PROBE_1 (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTI|GPIO_PIN0) /* PI0 AUX1 */ -// # define PROBE_2 (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTH|GPIO_PIN12) /* PH12 AUX2 */ -// # define PROBE_3 (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTH|GPIO_PIN11) /* PH11 AUX3 */ -// # define PROBE_4 (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTH|GPIO_PIN10) /* PH10 AUX4 */ -// # define PROBE_5 (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTD|GPIO_PIN13) /* PD13 AUX5 */ -// # define PROBE_6 (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTD|GPIO_PIN14) /* PD14 AUX6 */ -// # define PROBE_7 (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTH|GPIO_PIN6) /* PH6 AUX7 */ -// # define PROBE_8 (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTH|GPIO_PIN9) /* PH9 AUX8 */ -// # define PROBE_9 (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTE|GPIO_PIN11) /* PE11 CAP1 */ - -// # define PROBE_INIT(mask) \ -// do { \ -// if ((mask)& PROBE_N(1)) { stm32_configgpio(PROBE_1); } \ -// if ((mask)& PROBE_N(2)) { stm32_configgpio(PROBE_2); } \ -// if ((mask)& PROBE_N(3)) { stm32_configgpio(PROBE_3); } \ -// if ((mask)& PROBE_N(4)) { stm32_configgpio(PROBE_4); } \ -// if ((mask)& PROBE_N(5)) { stm32_configgpio(PROBE_5); } \ -// if ((mask)& PROBE_N(6)) { stm32_configgpio(PROBE_6); } \ -// if ((mask)& PROBE_N(7)) { stm32_configgpio(PROBE_7); } \ -// if ((mask)& PROBE_N(8)) { stm32_configgpio(PROBE_8); } \ -// if ((mask)& PROBE_N(9)) { stm32_configgpio(PROBE_9); } \ -// } while(0) - -// # define PROBE(n,s) do {stm32_gpiowrite(PROBE_##n,(s));}while(0) -// # define PROBE_MARK(n) PROBE(n,false);PROBE(n,true) -// #else -// # define PROBE_INIT(mask) -// # define PROBE(n,s) -// # define PROBE_MARK(n) -// #endif - -#endif /*__NUTTX_CONFIG_MATEKH743SLIM_INCLUDE_BOARD_H */ diff --git a/boards/xc-fly/xc-slam/nuttx-config/include/board_dma_map.h b/boards/xc-fly/xc-slam/nuttx-config/include/board_dma_map.h deleted file mode 100644 index a27735b354..0000000000 --- a/boards/xc-fly/xc-slam/nuttx-config/include/board_dma_map.h +++ /dev/null @@ -1,62 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2021 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -#pragma once -// #define DMAMAP_SPI1_RX DMAMAP_DMA12_SPI1RX_0 /* DMA1:37 */ -// #define DMAMAP_SPI1_TX DMAMAP_DMA12_SPI1TX_0 /* DMA1:38 */ - -#define DMAMAP_SPI2_RX DMAMAP_DMA12_SPI2RX_0 /* DMA1:39 */ -#define DMAMAP_SPI2_TX DMAMAP_DMA12_SPI2TX_0 /* DMA1:40 */ - -// DMAMUX2 -// #define DMAMAP_SPI3_RX DMAMAP_DMA12_SPI3RX_0 /* DMA1:61 */ -// #define DMAMAP_SPI3_TX DMAMAP_DMA12_SPI3TX_0 /* DMA1:62 */ - -// #define DMAMAP_SPI6_RX DMAMAP_BDMA_SPI6_RX /* BDMA:11 */ -// #define DMAMAP_SPI6_TX DMAMAP_BDMA_SPI6_TX /* BDMA:12 */ - -//TODO: UART DMA test -// #define DMAMAP_USART1_RX DMAMAP_DMA12_USART1RX_1 /*DMA2:41*/ -// #define DMAMAP_USART1_TX DMAMAP_DMA12_USART1TX_1 /*DMA2:42*/ - -// #define DMAMAP_USART2_RX DMAMAP_DMA12_USART2RX_1 /* DMA2:43 */ -// #define DMAMAP_USART2_TX DMAMAP_DMA12_USART2TX_1 /* DMA2:44 */ - -// #define DMAMAP_USART3_RX DMAMAP_DMA12_USART3RX_1 /* DMA2:45 */ -// #define DMAMAP_USART3_TX DMAMAP_DMA12_USART3TX_1 /* DMA2:46 */ - -#define DMAMAP_UART4_RX DMAMAP_DMA12_UART4RX_1 /* DMA1:63 */ -#define DMAMAP_UART4_TX DMAMAP_DMA12_UART4TX_1 /* DMA1:64 */ - -// #define DMAMAP_UART5_RX DMAMAP_DMA12_UART5RX_0 /* DMA1:65 */ -// #define DMAMAP_UART5_TX DMAMAP_DMA12_UART5RX_0 /* DMA1:66 */ diff --git a/boards/xc-fly/xc-slam/src/board_config.h b/boards/xc-fly/xc-slam/src/board_config.h deleted file mode 100644 index e5f6084ee9..0000000000 --- a/boards/xc-fly/xc-slam/src/board_config.h +++ /dev/null @@ -1,234 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2021 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file board_config.h - * - * Board internal definitions - */ - -#pragma once - -/**************************************************************************************************** - * Included Files - ****************************************************************************************************/ - -#include -#include -#include - -#include - -/**************************************************************************************************** - * Definitions - ****************************************************************************************************/ - -#define FLASH_BASED_PARAMS - - -/* LEDs are driven with push open drain to support Anode to 5V or 3.3V */ - -# define GPIO_nLED_RED /* PD15 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_50MHz|GPIO_OUTPUT_SET|GPIO_PORTD|GPIO_PIN15) -# define GPIO_nLED_GREEN /* PD11 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_50MHz|GPIO_OUTPUT_SET|GPIO_PORTD|GPIO_PIN11) -# define GPIO_nLED_BLUE /* PB15 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_50MHz|GPIO_OUTPUT_SET|GPIO_PORTB|GPIO_PIN15) - -# define BOARD_HAS_CONTROL_STATUS_LEDS 1 -# define BOARD_OVERLOAD_LED LED_RED -# define BOARD_ARMED_STATE_LED LED_BLUE - -/* - * ADC channels - * - * These are the channel numbers of the ADCs of the microcontroller that - * can be used by the Px4 Firmware in the adc driver - */ - -/* ADC defines to be used in sensors.cpp to read from a particular channel */ - -#define SYSTEM_ADC_BASE STM32_ADC1_BASE - -#define ADC12_CH(n) (n) - -#define PX4_ADC_GPIO \ - /* PC4 */ GPIO_ADC12_INP4, \ - /* PC5 */ GPIO_ADC12_INP8 - -/* Define GPIO pins used as ADC N.B. Channel numbers must match below */ -/* Define Channel numbers must match above GPIO pin IN(n)*/ -#define ADC_BATTERY_VOLTAGE_CHANNEL ADC12_CH(4) -#define ADC_BATTERY_CURRENT_CHANNEL ADC12_CH(8) - -#define ADC_CHANNELS \ - ((1 << ADC_BATTERY_VOLTAGE_CHANNEL) | \ - (1 << ADC_BATTERY_CURRENT_CHANNEL)) - -#define BOARD_ADC_OPEN_CIRCUIT_V (1.6f) - - - -/* Define Battery 1 Voltage Divider and A per V - */ - -// #define BOARD_BATTERY1_V_DIV (11.0f) /* measured with the provided PM board */ -// #define BOARD_BATTERY1_A_PER_V (40.0f) -// #define BOARD_BATTERY2_V_DIV (11.0f) /* measured with the provided PM board */ - -/* PWM - */ -#define DIRECT_PWM_OUTPUT_CHANNELS 8 - -#define BOARD_HAS_PWM DIRECT_PWM_OUTPUT_CHANNELS - - - - -// /* HEATER PA15 TIM2_CH1 -// * PWM in future -// */ -// #define GPIO_HEATER_OUTPUT /* PA15 T2CH1 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTA|GPIO_PIN15) -// #define HEATER_OUTPUT_EN(on_true) px4_arch_gpiowrite(GPIO_HEATER_OUTPUT, (on_true)) - - - - -/* Spare GPIO */ -#define GPIO_PA4 /* PA4 */ (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTA|GPIO_PIN4) -#define GPIO_PC0 /* PC0 */ (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTC|GPIO_PIN0) -#define GPIO_PC1 /* PC1 */ (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTC|GPIO_PIN1) -/* Tone alarm output */ - -#define TONE_ALARM_TIMER 2 /* Timer 2*/ -#define TONE_ALARM_CHANNEL 1 /* PA15 GPIO_TIM2_CH1 NC */ -/*NC can be modified with Spare GPIO then connected with hardware */ -#define GPIO_BUZZER_1 /* PA15 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTA|GPIO_PIN15) - -#define GPIO_TONE_ALARM_IDLE GPIO_BUZZER_1 -#define GPIO_TONE_ALARM GPIO_BUZZER_1 -#define GPIO_TONE_ALARM_GPIO /* PA15 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_SET|GPIO_PORTA|GPIO_PIN15) - -/* USB OTG FS - * - * PE15 OTG_FS_VBUS VBUS sensing - */ -#define GPIO_OTGFS_VBUS /* PE15 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_SPEED_100MHz|GPIO_PORTE|GPIO_PIN15) -#define BOARD_ADC_USB_CONNECTED (px4_arch_gpioread(GPIO_OTGFS_VBUS)) - -/* High-resolution timer */ -#define HRT_TIMER 8 /* use timer1 for the HRT */ -#define HRT_TIMER_CHANNEL 1 /* use capture/compare channel 1 */ - -/* RC Serial port */ -#define RC_SERIAL_PORT "/dev/ttyS4" -#define BOARD_SUPPORTS_RC_SERIAL_PORT_OUTPUT - -// #define GPIO_SBUS_INV (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTD|GPIO_PIN14) -// #define RC_INVERT_INPUT(_invert_true) px4_arch_gpiowrite(GPIO_SBUS_INV, _invert_true); - -/* SD card bringup does not work if performed on the IDLE thread because it - * will cause waiting. Use either: - * - * CONFIG_LIB_BOARDCTL=y, OR - * CONFIG_BOARD_INITIALIZE=y && CONFIG_BOARD_INITTHREAD=y - */ -#define SDIO_SLOTNO 0 /* Only one slot */ -#define SDIO_MINOR 0 -#if defined(CONFIG_BOARD_INITIALIZE) && !defined(CONFIG_LIB_BOARDCTL) && \ - !defined(CONFIG_BOARD_INITTHREAD) -# warning SDIO initialization cannot be perfomed on the IDLE thread -#endif - -/* This board provides a DMA pool and APIs */ -#define BOARD_DMA_ALLOC_POOL_SIZE 5120 - -/* This board provides the board_on_reset interface */ -#define BOARD_HAS_ON_RESET 1 - -#define PX4_GPIO_INIT_LIST { \ - GPIO_CAN1_TX,\ - GPIO_CAN1_RX, \ - PX4_ADC_GPIO, \ - GPIO_PC0, \ - GPIO_PC1, \ - GPIO_TONE_ALARM_IDLE, \ - } - -#define BOARD_ENABLE_CONSOLE_BUFFER - -#define BOARD_NUM_IO_TIMERS 5 - - -__BEGIN_DECLS - -/**************************************************************************************************** - * Public Types - ****************************************************************************************************/ - -/**************************************************************************************************** - * Public data - ****************************************************************************************************/ - -#ifndef __ASSEMBLY__ - -/**************************************************************************************************** - * Public Functions - ****************************************************************************************************/ - -/**************************************************************************** - * Name: stm32_sdio_initialize - * - * Description: - * Initialize SDIO-based MMC/SD card support - * - ****************************************************************************/ - -int stm32_sdio_initialize(void); - -/**************************************************************************************************** - * Name: stm32_spiinitialize - * - * Description: - * Called to configure SPI chip select GPIO pins for the board. - * - ****************************************************************************************************/ - -extern void stm32_spiinitialize(void); - -extern void stm32_usbinitialize(void); - -extern void board_peripheral_reset(int ms); - -#include - -#endif /* __ASSEMBLY__ */ - -__END_DECLS diff --git a/boards/xc-fly/xc-slam/src/flash_w25q128.c b/boards/xc-fly/xc-slam/src/flash_w25q128.c deleted file mode 100644 index 3a3e2cee1f..0000000000 --- a/boards/xc-fly/xc-slam/src/flash_w25q128.c +++ /dev/null @@ -1,505 +0,0 @@ -/**************************************************************************** - * - * Copyright (C) 2020 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file flash_w25q128.c - * - * Board-specific external flash W25Q128 functions. - */ - - -#include "board_config.h" -#include "qspi.h" -#include "arm_internal.h" -#include -#include - - -/************************************************************************************ - * Pre-processor Definitions - ************************************************************************************/ -/* Configuration ********************************************************************/ - -#define N25Q128_SECTOR_SIZE (4*1024) -#define N25Q128_SECTOR_SHIFT (12) -#define N25Q128_SECTOR_COUNT (4096) -#define N25Q128_PAGE_SIZE (256) -#define N25Q128_PAGE_SHIFT (8) - -#define W25Q_DUMMY_CYCLES_FAST_READ_QUAD 6 -#define W25Q_INSTR_FAST_READ_QUAD 0xEB -#define W25Q_ADDRESS_SIZE 3 // 3 bytes -> 24 bits - -#define N25QXXX_READ_STATUS 0x05 /* Read status register: * - * 0x05 | SR */ -#define N25QXXX_PAGE_PROGRAM 0x02 /* Page Program: * - * 0x02 | ADDR(MS) | ADDR(MID) | * - * ADDR(LS) | data */ -#define N25QXXX_WRITE_ENABLE 0x06 /* Write enable: * - * 0x06 */ -#define N25QXXX_WRITE_DISABLE 0x04 /* Write disable command code: * - * 0x04 */ -#define N25QXXX_SUBSECTOR_ERASE 0x20 /* Sub-sector Erase (4 kB) * - * 0x20 | ADDR(MS) | ADDR(MID) | * - * ADDR(LS) */ - - -/* N25QXXX Registers ****************************************************************/ -/* Status register bit definitions */ - -#define STATUS_BUSY_MASK (1 << 0) /* Bit 0: Device ready/busy status */ -# define STATUS_READY (0 << 0) /* 0 = Not Busy */ -# define STATUS_BUSY (1 << 0) /* 1 = Busy */ -#define STATUS_WEL_MASK (1 << 1) /* Bit 1: Write enable latch status */ -# define STATUS_WEL_DISABLED (0 << 1) /* 0 = Not Write Enabled */ -# define STATUS_WEL_ENABLED (1 << 1) /* 1 = Write Enabled */ -#define STATUS_BP_SHIFT (2) /* Bits 2-4: Block protect bits */ -#define STATUS_BP_MASK (7 << STATUS_BP_SHIFT) -# define STATUS_BP_NONE (0 << STATUS_BP_SHIFT) -# define STATUS_BP_ALL (7 << STATUS_BP_SHIFT) -#define STATUS_TB_MASK (1 << 5) /* Bit 5: Top / Bottom Protect */ -# define STATUS_TB_TOP (0 << 5) /* 0 = BP2-BP0 protect Top down */ -# define STATUS_TB_BOTTOM (1 << 5) /* 1 = BP2-BP0 protect Bottom up */ -#define STATUS_BP3_MASK (1 << 5) /* Bit 6: BP3 */ -#define STATUS_SRP0_MASK (1 << 7) /* Bit 7: Status register protect 0 */ -# define STATUS_SRP0_UNLOCKED (0 << 7) /* 0 = WP# no effect / PS Lock Down */ -# define STATUS_SRP0_LOCKED (1 << 7) /* 1 = WP# protect / OTP Lock Down */ - -/************************************************************************************ - * Private Types - ************************************************************************************/ - -/* This type represents the state of the MTD device. The struct mtd_dev_s must - * appear at the beginning of the definition so that you can freely cast between - * pointers to struct mtd_dev_s and struct n25qxxx_dev_s. - */ - -struct n25qxxx_dev_s { - //struct mtd_dev_s mtd; /* MTD interface */ - FAR struct qspi_dev_s *qspi; /* Saved QuadSPI interface instance */ - uint16_t nsectors; /* Number of erase sectors */ - uint8_t sectorshift; /* Log2 of sector size */ - uint8_t pageshift; /* Log2 of page size */ - FAR uint8_t *cmdbuf; /* Allocated command buffer */ - FAR uint8_t *readbuf; /* Allocated status read buffer */ -}; - -/**************************************************************************** - * Private Data - ****************************************************************************/ - -struct qspi_dev_s *ptr_qspi_dev; -struct qspi_meminfo_s qspi_meminfo = { - .flags = QSPIMEM_QUADIO, - .addrlen = W25Q_ADDRESS_SIZE, - .dummies = W25Q_DUMMY_CYCLES_FAST_READ_QUAD, - .cmd = W25Q_INSTR_FAST_READ_QUAD -}; - -struct n25qxxx_dev_s n25qxxx_dev; -uint8_t cmdbuf[4] = {0u}; -uint8_t readbuf[1] = {0u}; - -/************************************************************************************ - * Private Functions - ************************************************************************************/ -__ramfunc__ int n25qxxx_command(FAR struct qspi_dev_s *qspi, uint8_t cmd); -__ramfunc__ uint8_t n25qxxx_read_status(FAR struct n25qxxx_dev_s *priv); -__ramfunc__ int n25qxxx_command_read(FAR struct qspi_dev_s *qspi, uint8_t cmd, - FAR void *buffer, size_t buflen); -__ramfunc__ void n25qxxx_write_enable(FAR struct n25qxxx_dev_s *priv); -__ramfunc__ void n25qxxx_write_disable(FAR struct n25qxxx_dev_s *priv); - -__ramfunc__ int n25qxxx_write_page(struct n25qxxx_dev_s *priv, FAR const uint8_t *buffer, - off_t address, size_t buflen); - -__ramfunc__ int n25qxxx_write_one_page(struct n25qxxx_dev_s *priv, struct qspi_meminfo_s *meminfo); - -__ramfunc__ int n25qxxx_erase_sector(struct n25qxxx_dev_s *priv, off_t sector); - -__ramfunc__ bool n25qxxx_isprotected(FAR struct n25qxxx_dev_s *priv, uint8_t status, - off_t address); - -__ramfunc__ int n25qxxx_command_address(FAR struct qspi_dev_s *qspi, uint8_t cmd, - off_t addr, uint8_t addrlen); - -/************************************************************************************ - * Public Functions - ************************************************************************************/ - -void flash_w25q128_init(void) -{ - int qspi_interface_number = 0; - ptr_qspi_dev = stm32h7_qspi_initialize(qspi_interface_number); - n25qxxx_dev.qspi = ptr_qspi_dev; - n25qxxx_dev.cmdbuf = cmdbuf; - n25qxxx_dev.readbuf = readbuf; - n25qxxx_dev.sectorshift = N25Q128_SECTOR_SHIFT; - n25qxxx_dev.pageshift = N25Q128_PAGE_SHIFT; - n25qxxx_dev.nsectors = N25Q128_SECTOR_COUNT; -} - -__ramfunc__ ssize_t up_progmem_ext_getpage(size_t addr) -{ - ssize_t page_address = (addr - STM32_FMC_BANK4) / N25Q128_SECTOR_COUNT; - - return page_address; -} - -__ramfunc__ ssize_t up_progmem_ext_eraseblock(size_t block) -{ - ssize_t size = N25Q128_SECTOR_COUNT; - - irqstate_t irqstate = px4_enter_critical_section(); - stm32h7_qspi_exit_memorymapped(ptr_qspi_dev); - - n25qxxx_erase_sector(&n25qxxx_dev, block); - - stm32h7_qspi_enter_memorymapped(ptr_qspi_dev, &qspi_meminfo, 0); - px4_leave_critical_section(irqstate); - return size; -} - -__ramfunc__ ssize_t up_progmem_ext_write(size_t addr, FAR const void *buf, size_t count) -{ - ssize_t ret_val = 0; - - irqstate_t irqstate = px4_enter_critical_section(); - stm32h7_qspi_exit_memorymapped(ptr_qspi_dev); - - addr &= 0xFFFFFF; - n25qxxx_write_page(&n25qxxx_dev, buf, (off_t)addr, count); - - stm32h7_qspi_enter_memorymapped(ptr_qspi_dev, &qspi_meminfo, 0); - px4_leave_critical_section(irqstate); - - return ret_val; -} - -/************************************************************************************ - * Name: n25qxxx_command - ************************************************************************************/ - -__ramfunc__ int n25qxxx_command(FAR struct qspi_dev_s *qspi, uint8_t cmd) -{ - struct qspi_cmdinfo_s cmdinfo; - - finfo("CMD: %02" PRIx8 "\n", cmd); - - cmdinfo.flags = 0; - cmdinfo.addrlen = 0; - cmdinfo.cmd = cmd; - cmdinfo.buflen = 0; - cmdinfo.addr = 0; - cmdinfo.buffer = NULL; - - int rv; - rv = qspi_command(qspi, &cmdinfo); - return rv; -} - -/************************************************************************************ - * Name: n25qxxx_read_status - ************************************************************************************/ - -__ramfunc__ uint8_t n25qxxx_read_status(FAR struct n25qxxx_dev_s *priv) -{ - DEBUGVERIFY(n25qxxx_command_read(priv->qspi, N25QXXX_READ_STATUS, - (FAR void *)&priv->readbuf[0], 1)); - return priv->readbuf[0]; -} - -/************************************************************************************ - * Name: n25qxxx_command_read - ************************************************************************************/ - -__ramfunc__ int n25qxxx_command_read(FAR struct qspi_dev_s *qspi, uint8_t cmd, - FAR void *buffer, size_t buflen) -{ - struct qspi_cmdinfo_s cmdinfo; - - finfo("CMD: %02" PRIx8 " buflen: %zu\n", cmd, buflen); - - cmdinfo.flags = QSPICMD_READDATA; - cmdinfo.addrlen = 0; - cmdinfo.cmd = cmd; - cmdinfo.buflen = buflen; - cmdinfo.addr = 0; - cmdinfo.buffer = buffer; - - int rv; - rv = qspi_command(qspi, &cmdinfo); - return rv; -} - - -/************************************************************************************ - * Name: n25qxxx_write_enable - ************************************************************************************/ - -__ramfunc__ void n25qxxx_write_enable(FAR struct n25qxxx_dev_s *priv) -{ - uint8_t status; - - do { - n25qxxx_command(priv->qspi, N25QXXX_WRITE_ENABLE); - status = n25qxxx_read_status(priv); - } while ((status & STATUS_WEL_MASK) != STATUS_WEL_ENABLED); -} - -/************************************************************************************ - * Name: n25qxxx_write_disable - ************************************************************************************/ - -__ramfunc__ void n25qxxx_write_disable(FAR struct n25qxxx_dev_s *priv) -{ - uint8_t status; - - do { - n25qxxx_command(priv->qspi, N25QXXX_WRITE_DISABLE); - status = n25qxxx_read_status(priv); - } while ((status & STATUS_WEL_MASK) != STATUS_WEL_DISABLED); -} - -/************************************************************************************ - * Name: n25qxxx_write_page - ************************************************************************************/ - -__ramfunc__ int n25qxxx_write_page(struct n25qxxx_dev_s *priv, FAR const uint8_t *buffer, - off_t address, size_t buflen) -{ - struct qspi_meminfo_s meminfo; - unsigned int pagesize; - unsigned int npages; - unsigned int firstpagesize = 0; - int ret = OK; - unsigned int i; - - finfo("address: %08jx buflen: %zu\n", (intmax_t)address, buflen); - - pagesize = (1 << priv->pageshift); - - /* Set up non-varying parts of transfer description */ - - meminfo.flags = QSPIMEM_WRITE; - meminfo.cmd = N25QXXX_PAGE_PROGRAM; - meminfo.addrlen = 3; - meminfo.dummies = 0; - meminfo.buffer = (void *)buffer; - - if (0 != (address % pagesize)) { - firstpagesize = pagesize - (address % pagesize); - } - - if (buflen <= firstpagesize) { - meminfo.addr = address; - meminfo.buflen = buflen; - ret = n25qxxx_write_one_page(priv, &meminfo); - - } else { - - if (firstpagesize > 0) { - meminfo.addr = address; - meminfo.buflen = firstpagesize; - ret = n25qxxx_write_one_page(priv, &meminfo); - - buffer += firstpagesize; - address += firstpagesize; - buflen -= firstpagesize; - } - - npages = (buflen >> priv->pageshift); - - meminfo.buflen = pagesize; - - /* Then write each page */ - - for (i = 0; (i < npages) && (ret == OK); i++) { - /* Set up varying parts of the transfer description */ - - meminfo.addr = address; - meminfo.buffer = (void *)buffer; - - ret = n25qxxx_write_one_page(priv, &meminfo); - - /* Update for the next time through the loop */ - - buffer += pagesize; - address += pagesize; - buflen -= pagesize; - } - - if ((ret == OK) && (buflen > 0)) { - meminfo.addr = address; - meminfo.buffer = (void *)buffer; - meminfo.buflen = buflen; - - ret = n25qxxx_write_one_page(priv, &meminfo); - } - } - - return ret; -} - -__ramfunc__ int n25qxxx_write_one_page(struct n25qxxx_dev_s *priv, struct qspi_meminfo_s *meminfo) -{ - int ret; - - n25qxxx_write_enable(priv); - ret = qspi_memory(priv->qspi, meminfo); - n25qxxx_write_disable(priv); - - if (ret < 0) { - ferr("ERROR: QSPI_MEMORY failed writing address=%06" PRIx32 "\n", - meminfo->addr); - } - - return ret; -} - -/************************************************************************************ - * Name: n25qxxx_erase_sector - ************************************************************************************/ - -__ramfunc__ int n25qxxx_erase_sector(struct n25qxxx_dev_s *priv, off_t sector) -{ - off_t address; - uint8_t status; - - finfo("sector: %08jx\n", (intmax_t) sector); - - /* Check that the flash is ready and unprotected */ - - status = n25qxxx_read_status(priv); - - if ((status & STATUS_BUSY_MASK) != STATUS_READY) { - ferr("ERROR: Flash busy: %02" PRIx8, status); - return -EBUSY; - } - - /* Get the address associated with the sector */ - - address = (off_t)sector << priv->sectorshift; - - if ((status & (STATUS_BP3_MASK | STATUS_BP_MASK)) != 0 && - n25qxxx_isprotected(priv, status, address)) { - ferr("ERROR: Flash protected: %02" PRIx8, status); - return -EACCES; - } - - /* Send the sector erase command */ - - n25qxxx_write_enable(priv); - n25qxxx_command_address(priv->qspi, N25QXXX_SUBSECTOR_ERASE, address, 3); - - /* Wait for erasure to finish */ - - while ((n25qxxx_read_status(priv) & STATUS_BUSY_MASK) != 0); - - return OK; -} - -/************************************************************************************ - * Name: n25qxxx_isprotected - ************************************************************************************/ - -__ramfunc__ bool n25qxxx_isprotected(FAR struct n25qxxx_dev_s *priv, uint8_t status, - off_t address) -{ - off_t protstart; - off_t protend; - off_t protsize; - unsigned int bp; - - /* The BP field is spread across non-contiguous bits */ - - bp = (status & STATUS_BP_MASK) >> STATUS_BP_SHIFT; - - if (status & STATUS_BP3_MASK) { - bp |= 8; - } - - /* the BP field is essentially the power-of-two of the number of 64k sectors, - * saturated to the device size. - */ - - if (0 == bp) { - return false; - } - - protsize = 0x00010000; - protsize <<= (protsize << (bp - 1)); - protend = (1 << priv->sectorshift) * priv->nsectors; - - if (protsize > protend) { - protsize = protend; - } - - /* The final protection range then depends on if the protection region is - * configured top-down or bottom up (assuming CMP=0). - */ - - if ((status & STATUS_TB_MASK) != 0) { - protstart = 0x00000000; - protend = protstart + protsize; - - } else { - protstart = protend - protsize; - /* protend already computed above */ - } - - return (address >= protstart && address < protend); -} - -/************************************************************************************ - * Name: n25qxxx_command_address - ************************************************************************************/ - -__ramfunc__ int n25qxxx_command_address(FAR struct qspi_dev_s *qspi, uint8_t cmd, - off_t addr, uint8_t addrlen) -{ - struct qspi_cmdinfo_s cmdinfo; - - finfo("CMD: %02" PRIx8 " Address: %04jx addrlen=%" PRIx8 "\n", cmd, (intmax_t) addr, addrlen); - - cmdinfo.flags = QSPICMD_ADDRESS; - cmdinfo.addrlen = addrlen; - cmdinfo.cmd = cmd; - cmdinfo.buflen = 0; - cmdinfo.addr = addr; - cmdinfo.buffer = NULL; - - int rv; - rv = qspi_command(qspi, &cmdinfo); - return rv; -} diff --git a/boards/xc-fly/xc-slam/src/hw_config.h b/boards/xc-fly/xc-slam/src/hw_config.h deleted file mode 100644 index e986fe0e90..0000000000 --- a/boards/xc-fly/xc-slam/src/hw_config.h +++ /dev/null @@ -1,135 +0,0 @@ -/**************************************************************************** - * - * Copyright (C) 2021 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -#pragma once - -/**************************************************************************** - * 10-8--2016: - * To simplify the ripple effect on the tools, we will be using - * /dev/serial/by-id/PX4 to locate PX4 devices. Therefore - * moving forward all Bootloaders must contain the prefix "PX4 BL " - * in the USBDEVICESTRING - * This Change will be made in an upcoming BL release - ****************************************************************************/ -/* - * Define usage to configure a bootloader - * - * - * Constant example Usage - * APP_LOAD_ADDRESS 0x08004000 - The address in Linker Script, where the app fw is org-ed - * BOOTLOADER_DELAY 5000 - Ms to wait while under USB pwr or bootloader request - * BOARD_FMUV2 - * INTERFACE_USB 1 - (Optional) Scan and use the USB interface for bootloading - * INTERFACE_USART 1 - (Optional) Scan and use the Serial interface for bootloading - * USBDEVICESTRING "PX4 BL FMU v2.x" - USB id string - * USBPRODUCTID 0x0011 - PID Should match defconfig - * BOOT_DELAY_ADDRESS 0x000001a0 - (Optional) From the linker script from Linker Script to get a custom - * delay provided by an APP FW - * BOARD_TYPE 9 - Must match .prototype boad_id - * _FLASH_KBYTES (*(uint16_t *)0x1fff7a22) - Run time flash size detection - * BOARD_FLASH_SECTORS ((_FLASH_KBYTES == 0x400) ? 11 : 23) - Run time determine the physical last sector - * BOARD_FLASH_SECTORS 11 - Hard coded zero based last sector - * BOARD_FLASH_SIZE (_FLASH_KBYTES*1024)- Total Flash size of device, determined at run time. - * (1024 * 1024) - Hard coded Total Flash of device - The bootloader and app reserved will be deducted - * programmatically - * - * BOARD_FIRST_FLASH_SECTOR_TO_ERASE 2 - Optional sectors index in the flash_sectors table (F4 only), to begin erasing. - * This is to allow sectors to be reserved for app fw usage. That will NOT be erased - * during a FW upgrade. - * The default is 0, and selects the first sector to be erased, as the 0th entry in the - * flash_sectors table. Which is the second physical sector of FLASH in the device. - * The first physical sector of FLASH is used by the bootloader, and is not defined - * in the table. - * - * APP_RESERVATION_SIZE (BOARD_FIRST_FLASH_SECTOR_TO_ERASE * 16 * 1024) - Number of bytes reserved by the APP FW. This number plus - * BOOTLOADER_RESERVATION_SIZE will be deducted from - * BOARD_FLASH_SIZE to determine the size of the App FW - * and hence the address space of FLASH to erase and program. - * USBMFGSTRING "PX4 AP" - Optional USB MFG string (default is '3D Robotics' if not defined.) - * SERIAL_BREAK_DETECT_DISABLED - Optional prevent break selection on Serial port from entering or staying in BL - * - * * Other defines are somewhat self explanatory. - */ - -/* Boot device selection list*/ -#define USB0_DEV 0x01 -#define SERIAL0_DEV 0x02 -#define SERIAL1_DEV 0x04 - -#define APP_LOAD_ADDRESS 0x08020000 -#define BOOTLOADER_DELAY 5000 -#define INTERFACE_USB 1 -#define INTERFACE_USB_CONFIG "/dev/ttyACM0" -#define BOARD_VBUS MK_GPIO_INPUT(GPIO_OTGFS_VBUS) - -//#define USE_VBUS_PULL_DOWN -#define INTERFACE_USART 6 -#define INTERFACE_USART_CONFIG "/dev/ttyS5,57600" -#define BOOT_DELAY_ADDRESS 0x000001a0 -#define BOARD_TYPE 319 -#define BOARD_FLASH_SECTORS (14) -#define BOARD_FLASH_SIZE (16 * 128 * 1024) -#define APP_RESERVATION_SIZE (1 * 128 * 1024) - -#define OSC_FREQ 16 - -#define BOARD_PIN_LED_ACTIVITY GPIO_nLED_BLUE // BLUE -#define BOARD_PIN_LED_BOOTLOADER GPIO_nLED_RED // RED -#define BOARD_LED_ON 1 -#define BOARD_LED_OFF 0 - -#define SERIAL_BREAK_DETECT_DISABLED 1 - -#if !defined(ARCH_SN_MAX_LENGTH) -# define ARCH_SN_MAX_LENGTH 12 -#endif - -#if !defined(APP_RESERVATION_SIZE) -# define APP_RESERVATION_SIZE 0 -#endif - -#if !defined(BOARD_FIRST_FLASH_SECTOR_TO_ERASE) -# define BOARD_FIRST_FLASH_SECTOR_TO_ERASE 1 -#endif - -#if !defined(USB_DATA_ALIGN) -# define USB_DATA_ALIGN -#endif - -#ifndef BOOT_DEVICES_SELECTION -# define BOOT_DEVICES_SELECTION USB0_DEV|SERIAL0_DEV|SERIAL1_DEV -#endif - -#ifndef BOOT_DEVICES_FILTER_ONUSB -# define BOOT_DEVICES_FILTER_ONUSB USB0_DEV|SERIAL0_DEV|SERIAL1_DEV -#endif diff --git a/boards/xc-fly/xc-slam/src/init.c b/boards/xc-fly/xc-slam/src/init.c deleted file mode 100644 index cd7d3d2162..0000000000 --- a/boards/xc-fly/xc-slam/src/init.c +++ /dev/null @@ -1,210 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2021 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file init.c - * - * FMU-specific early startup code. This file implements the - * board_app_initialize() function that is called early by nsh during startup. - * - * Code here is run before the rcS script is invoked; it should start required - * subsystems and perform board-specific initialisation. - */ - -#include "board_config.h" - -#include - -#include -#include -#include -#include -#include -#include "arm_internal.h" - -#include -#include -#include -#include -#include -#include -#include - -#include - -# if defined(FLASH_BASED_PARAMS) -# include -#endif - -__BEGIN_DECLS -extern void led_init(void); -extern void led_on(int led); -extern void led_off(int led); -__END_DECLS - -/************************************************************************************ - * Name: board_peripheral_reset - * - * Description: - * - ************************************************************************************/ -__EXPORT void board_peripheral_reset(int ms) -{ - UNUSED(ms); -} - -/************************************************************************************ - * Name: board_on_reset - * - * Description: - * Optionally provided function called on entry to board_system_reset - * It should perform any house keeping prior to the rest. - * - * status - 1 if resetting to boot loader - * 0 if just resetting - * - ************************************************************************************/ -__EXPORT void board_on_reset(int status) -{ - for (int i = 0; i < DIRECT_PWM_OUTPUT_CHANNELS; ++i) { - px4_arch_configgpio(PX4_MAKE_GPIO_INPUT(io_timer_channel_get_as_pwm_input(i))); - } - - /* - * On resets invoked from system (not boot) ensure we establish a low - * output state on PWM pins to disarm the ESC and prevent the reset from potentially - * spinning up the motors. - */ - if (status >= 0) { - up_mdelay(100); - } -} - -/************************************************************************************ - * Name: stm32_boardinitialize - * - * Description: - * All STM32 architectures must provide the following entry point. This entry point - * is called early in the initialization -- after all memory has been configured - * and mapped but before any devices have been initialized. - * - ************************************************************************************/ -__EXPORT void stm32_boardinitialize(void) -{ - /* Reset PWM first thing */ - board_on_reset(-1); - - /* configure LEDs */ - board_autoled_initialize(); - - /* configure pins */ - const uint32_t gpio[] = PX4_GPIO_INIT_LIST; - px4_gpio_init(gpio, arraySize(gpio)); - - /* configure SPI interfaces */ - stm32_spiinitialize(); - - /* configure USB interfaces */ - stm32_usbinitialize(); - -} - -/**************************************************************************** - * Name: board_app_initialize - * - * Description: - * Perform application specific initialization. This function is never - * called directly from application code, but only indirectly via the - * (non-standard) boardctl() interface using the command BOARDIOC_INIT. - * - * Input Parameters: - * arg - The boardctl() argument is passed to the board_app_initialize() - * implementation without modification. The argument has no - * meaning to NuttX; - * - * Returned Value: - * Zero (OK) is returned on success; a negated errno value is returned on - * any failure to indicate the nature of the failure. - * - ****************************************************************************/ -__EXPORT int board_app_initialize(uintptr_t arg) -{ - /* Need hrt running before using the ADC */ - px4_platform_init(); - - /* configure the DMA allocator */ - if (board_dma_alloc_init() < 0) { - syslog(LOG_ERR, "[boot] DMA alloc FAILED\n"); - } - - /* initial LED state */ - drv_led_start(); - led_off(LED_RED); - led_off(LED_BLUE); - - if (board_hardfault_init(2, true) != 0) { - led_on(LED_BLUE); - } - -#ifdef CONFIG_MMCSD - int ret = stm32_sdio_initialize(); - - if (ret != OK) { - led_on(LED_BLUE); - return ret; - } - -#endif - -// TODO:internal flash store parameters -#if defined(FLASH_BASED_PARAMS) - static sector_descriptor_t params_sector_map[] = { - {15, 128 * 1024, 0x081E0000}, - {0, 0, 0}, - }; - - /* Initialize the flashfs layer to use heap allocated memory */ - int result = parameter_flashfs_init(params_sector_map, NULL, 0); - - if (result != OK) { - syslog(LOG_ERR, "[boot] FAILED to init params in FLASH %d\n", result); - led_on(LED_RED); - } - -#endif - - /* Configure the HW based on the manifest */ - px4_platform_configure(); - - return OK; -} diff --git a/boards/xc-fly/xc-slam/src/manifest.c b/boards/xc-fly/xc-slam/src/manifest.c deleted file mode 100644 index ab9c952cdd..0000000000 --- a/boards/xc-fly/xc-slam/src/manifest.c +++ /dev/null @@ -1,131 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2018-2021 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file manifest.c - * - * This module supplies the interface to the manifest of hardware that is - * optional and dependent on the HW REV and HW VER IDs - * - * The manifest allows the system to know whether a hardware option - * say for example the PX4IO is an no-pop option vs it is broken. - * - */ - -/**************************************************************************** - * Included Files - ****************************************************************************/ - -#include -#include - -#include -#include -#include - -#include "systemlib/px4_macros.h" - -/**************************************************************************** - * Pre-Processor Definitions - ****************************************************************************/ - -typedef struct { - uint32_t hw_ver_rev; /* the version and revision */ - const px4_hw_mft_item_t *mft; /* The first entry */ - uint32_t entries; /* the length of the list */ -} px4_hw_mft_list_entry_t; - -typedef px4_hw_mft_list_entry_t *px4_hw_mft_list_entry; -#define px4_hw_mft_list_uninitialized (px4_hw_mft_list_entry) -1 - -static const px4_hw_mft_item_t device_unsupported = {0, 0, 0}; - -// List of components on a specific board configuration -// The index of those components is given by the enum (px4_hw_mft_item_id_t) -// declared in board_common.h -static const px4_hw_mft_item_t hw_mft_list_v0600[] = { - { - .present = 0, - .mandatory = 0, - .connection = px4_hw_con_unknown, - }, -}; - -static px4_hw_mft_list_entry_t mft_lists[] = { - {V6U00, hw_mft_list_v0600, arraySize(hw_mft_list_v0600)}, -}; - -/************************************************************************************ - * Name: board_query_manifest - * - * Description: - * Optional returns manifest item. - * - * Input Parameters: - * manifest_id - the ID for the manifest item to retrieve - * - * Returned Value: - * 0 - item is not in manifest => assume legacy operations - * pointer to a manifest item - * - ************************************************************************************/ - -__EXPORT px4_hw_mft_item board_query_manifest(px4_hw_mft_item_id_t id) -{ - static px4_hw_mft_list_entry boards_manifest = px4_hw_mft_list_uninitialized; - - if (boards_manifest == px4_hw_mft_list_uninitialized) { - uint32_t ver_rev = board_get_hw_version() << 16; - ver_rev |= board_get_hw_revision(); - - for (unsigned i = 0; i < arraySize(mft_lists); i++) { - if (mft_lists[i].hw_ver_rev == ver_rev) { - boards_manifest = &mft_lists[i]; - break; - } - } - - if (boards_manifest == px4_hw_mft_list_uninitialized) { - syslog(LOG_ERR, "[boot] Board %08" PRIx32 " is not supported!\n", ver_rev); - } - } - - px4_hw_mft_item rv = &device_unsupported; - - if (boards_manifest != px4_hw_mft_list_uninitialized && - id < boards_manifest->entries) { - rv = &boards_manifest->mft[id]; - } - - return rv; -} diff --git a/boards/xc-fly/xc-slim/bootloader.px4board b/boards/xc-fly/xc-slim/bootloader.px4board deleted file mode 100644 index 19b6e662be..0000000000 --- a/boards/xc-fly/xc-slim/bootloader.px4board +++ /dev/null @@ -1,3 +0,0 @@ -CONFIG_BOARD_TOOLCHAIN="arm-none-eabi" -CONFIG_BOARD_ARCHITECTURE="cortex-m7" -CONFIG_BOARD_ROMFSROOT="" diff --git a/boards/xc-fly/xc-slim/extras/xc-fly_xc-slam_bootloader.bin b/boards/xc-fly/xc-slim/extras/xc-fly_xc-slam_bootloader.bin deleted file mode 100755 index b8f290f227..0000000000 Binary files a/boards/xc-fly/xc-slim/extras/xc-fly_xc-slam_bootloader.bin and /dev/null differ diff --git a/boards/xc-fly/xc-slim/firmware.prototype b/boards/xc-fly/xc-slim/firmware.prototype deleted file mode 100644 index 9d3f72a26b..0000000000 --- a/boards/xc-fly/xc-slim/firmware.prototype +++ /dev/null @@ -1,13 +0,0 @@ -{ - "board_id": 319, - "magic": "PX4FWv1", - "description": "Firmware for the XC-FLY board", - "image": "", - "build_time": 0, - "summary": "XC-FLY", - "version": "0.1", - "image_size": 0, - "image_maxsize": 1835008, - "git_identity": "", - "board_revision": 0 -} diff --git a/boards/xc-fly/xc-slim/init/rc.board_defaults b/boards/xc-fly/xc-slim/init/rc.board_defaults deleted file mode 100644 index 828c3f01ba..0000000000 --- a/boards/xc-fly/xc-slim/init/rc.board_defaults +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/sh -# -# board specific defaults -#------------------------------------------------------------------------------ -param set-default BAT1_A_PER_V 17 -param set-default BAT1_N_CELLS 4 -param set-default BAT1_V_CHARGED 4.2 -param set-default BAT1_V_DIV 10.1 -param set-default BAT1_V_EMPTY 3.2 - -param set-default SYS_HAS_MAG 1 -param set-default PWM_MAIN_TIM0 -4 -param set-default RC_INPUT_PROTO -1 - -param set-default IMU_GYRO_RATEMAX 2000 -param set-default SYS_AUTOSTART 4001 -param set-default MC_PITCHRATE_K 0.4 -param set-default MC_ROLLRATE_K 0.35 -param set-default MC_YAWRATE_K 1.2 -param set-default MC_YAWRATE_MAX 360 -param set-default MAV_TYPE 2 -param set-default CA_AIRFRAME 0 -param set-default CA_ROTOR_COUNT 4 -param set-default CBRK_SUPPLY_CHK 894281 - -param set-default USB_MAV_MODE 5 diff --git a/boards/xc-fly/xc-slim/init/rc.board_extras b/boards/xc-fly/xc-slim/init/rc.board_extras deleted file mode 100644 index a6f12267a3..0000000000 --- a/boards/xc-fly/xc-slim/init/rc.board_extras +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh -# -# board specific extras init -#------------------------------------------------------------------------------ - -# DShot telemetry is always on UART7 -# dshot telemetry -d /dev/ttyS5 diff --git a/boards/xc-fly/xc-slim/init/rc.board_sensors b/boards/xc-fly/xc-slim/init/rc.board_sensors deleted file mode 100644 index 4f27cd2cf3..0000000000 --- a/boards/xc-fly/xc-slim/init/rc.board_sensors +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/sh -# -# board specific sensors init -#------------------------------------------------------------------------------ - -board_adc start -# heater start - -# BMI088 -bmi088 -A -R 2 -s start -bmi088 -G -R 2 -s start - -# 42688P -icm42688p -s start - -# baro -dps310 -I start -a 119 - -# internal mag -ist8310 -I -R 2 start diff --git a/boards/xc-fly/xc-slim/nuttx-config/Kconfig b/boards/xc-fly/xc-slim/nuttx-config/Kconfig deleted file mode 100644 index bb33d3cfda..0000000000 --- a/boards/xc-fly/xc-slim/nuttx-config/Kconfig +++ /dev/null @@ -1,17 +0,0 @@ -# -# For a description of the syntax of this configuration file, -# see misc/tools/kconfig-language.txt. -# -config BOARD_HAS_PROBES - bool "Board provides GPIO or other Hardware for signaling to timing analyze." - default y - ---help--- - This board provides GPIO FMU-CH1-5, CAP1-6 as PROBE_1-11 to provide timing signals from selected drivers. - -config BOARD_USE_PROBES - bool "Enable the use the board provided FMU-CH1-5, CAP1-6 as PROBE_1-11" - default n - depends on BOARD_HAS_PROBES - - ---help--- - Select to use GPIO FMU-CH1-5, CAP1-6 to provide timing signals from selected drivers. diff --git a/boards/xc-fly/xc-slim/nuttx-config/bootloader/defconfig b/boards/xc-fly/xc-slim/nuttx-config/bootloader/defconfig deleted file mode 100644 index c4942fb50e..0000000000 --- a/boards/xc-fly/xc-slim/nuttx-config/bootloader/defconfig +++ /dev/null @@ -1,90 +0,0 @@ -# -# This file is autogenerated: PLEASE DO NOT EDIT IT. -# -# You can use "make menuconfig" to make any modifications to the installed .config file. -# You can then do "make savedefconfig" to generate a new defconfig file that includes your -# modifications. -# -# CONFIG_DEV_CONSOLE is not set -# CONFIG_DISABLE_PSEUDOFS_OPERATIONS is not set -# CONFIG_SPI_EXCHANGE is not set -# CONFIG_STM32H7_SYSCFG is not set -CONFIG_ARCH="arm" -CONFIG_ARCH_BOARD_CUSTOM=y -CONFIG_ARCH_BOARD_CUSTOM_DIR="../../../../boards/xc-fly/xc-slim/nuttx-config" -CONFIG_ARCH_BOARD_CUSTOM_DIR_RELPATH=y -CONFIG_ARCH_BOARD_CUSTOM_NAME="px4" -CONFIG_ARCH_CHIP="stm32h7" -CONFIG_ARCH_CHIP_STM32H743VI=y -CONFIG_ARCH_CHIP_STM32H7=y -CONFIG_ARCH_INTERRUPTSTACK=768 -CONFIG_ARMV7M_BASEPRI_WAR=y -CONFIG_ARMV7M_ICACHE=y -CONFIG_ARMV7M_MEMCPY=y -CONFIG_ARMV7M_USEBASEPRI=y -CONFIG_BOARDCTL=y -CONFIG_BOARDCTL_RESET=y -CONFIG_BOARD_ASSERT_RESET_VALUE=0 -CONFIG_BOARD_INITTHREAD_PRIORITY=254 -CONFIG_BOARD_LATE_INITIALIZE=y -CONFIG_BOARD_LOOPSPERMSEC=95150 -CONFIG_BOARD_RESET_ON_ASSERT=2 -CONFIG_CDCACM=y -CONFIG_CDCACM_IFLOWCONTROL=y -CONFIG_CDCACM_PRODUCTID=0x0036 -CONFIG_CDCACM_PRODUCTSTR="XC-FLY XC-SLIM Bootloader" -CONFIG_CDCACM_RXBUFSIZE=600 -CONFIG_CDCACM_TXBUFSIZE=12000 -CONFIG_CDCACM_VENDORID=0x1B8C -CONFIG_CDCACM_VENDORSTR="XC-FLY" -CONFIG_DEBUG_FULLOPT=y -CONFIG_DEBUG_SYMBOLS=y -CONFIG_DEBUG_TCBINFO=y -CONFIG_DEFAULT_SMALL=y -CONFIG_EXPERIMENTAL=y -CONFIG_FDCLONE_DISABLE=y -CONFIG_FDCLONE_STDIO=y -CONFIG_HAVE_CXX=y -CONFIG_HAVE_CXXINITIALIZE=y -CONFIG_IDLETHREAD_STACKSIZE=750 -CONFIG_INIT_ENTRYPOINT="bootloader_main" -CONFIG_INIT_STACKSIZE=3194 -CONFIG_LIBC_FLOATINGPOINT=y -CONFIG_LIBC_LONG_LONG=y -CONFIG_LIBC_STRERROR=y -CONFIG_MEMSET_64BIT=y -CONFIG_MEMSET_OPTSPEED=y -CONFIG_PREALLOC_TIMERS=50 -CONFIG_PTHREAD_STACK_MIN=512 -CONFIG_RAM_SIZE=245760 -CONFIG_RAM_START=0x20010000 -CONFIG_RAW_BINARY=y -CONFIG_SERIAL_TERMIOS=y -CONFIG_SIG_DEFAULT=y -CONFIG_SIG_SIGALRM_ACTION=y -CONFIG_SIG_SIGUSR1_ACTION=y -CONFIG_SIG_SIGUSR2_ACTION=y -CONFIG_SPI=y -CONFIG_STACK_COLORATION=y -CONFIG_START_DAY=30 -CONFIG_START_MONTH=11 -CONFIG_STDIO_BUFFER_SIZE=32 -CONFIG_STM32H7_BKPSRAM=y -CONFIG_STM32H7_DMA1=y -CONFIG_STM32H7_OTGFS=y -CONFIG_STM32H7_PROGMEM=y -CONFIG_STM32H7_SERIAL_DISABLE_REORDERING=y -CONFIG_STM32H7_TIM1=y -CONFIG_STM32H7_USART6=y -CONFIG_SYSTEMTICK_HOOK=y -CONFIG_SYSTEM_CDCACM=y -CONFIG_TASK_NAME_SIZE=24 -CONFIG_TTY_SIGINT=y -CONFIG_TTY_SIGINT_CHAR=0x03 -CONFIG_TTY_SIGTSTP=y -CONFIG_USART6_RXBUFSIZE=600 -CONFIG_USART6_TXBUFSIZE=300 -CONFIG_USBDEV=y -CONFIG_USBDEV_BUSPOWERED=y -CONFIG_USBDEV_MAXPOWER=500 -CONFIG_USEC_PER_TICK=1000 diff --git a/boards/xc-fly/xc-slim/nuttx-config/scripts/bootloader_script.ld b/boards/xc-fly/xc-slim/nuttx-config/scripts/bootloader_script.ld deleted file mode 100644 index fb877cc443..0000000000 --- a/boards/xc-fly/xc-slim/nuttx-config/scripts/bootloader_script.ld +++ /dev/null @@ -1,213 +0,0 @@ -/**************************************************************************** - * scripts/script.ld - * - * Copyright (C) 2016, 2019 Gregory Nutt. All rights reserved. - * Author: Gregory Nutt - * - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name NuttX nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/* The Durandal-v1 uses an STM32H743II has 2048Kb of main FLASH memory. - * The flash memory is partitioned into a User Flash memory and a System - * Flash memory. Each of these memories has two banks: - * - * 1) User Flash memory: - * - * Bank 1: Start address 0x0800:0000 to 0x080F:FFFF with 8 sectors, 128Kb each - * Bank 2: Start address 0x0810:0000 to 0x081F:FFFF with 8 sectors, 128Kb each - * - * 2) System Flash memory: - * - * Bank 1: Start address 0x1FF0:0000 to 0x1FF1:FFFF with 1 x 128Kb sector - * Bank 1: Start address 0x1FF4:0000 to 0x1FF5:FFFF with 1 x 128Kb sector - * - * 3) User option bytes for user configuration, only in Bank 1. - * - * In the STM32H743II, two different boot spaces can be selected through - * the BOOT pin and the boot base address programmed in the BOOT_ADD0 and - * BOOT_ADD1 option bytes: - * - * 1) BOOT=0: Boot address defined by user option byte BOOT_ADD0[15:0]. - * ST programmed value: Flash memory at 0x0800:0000 - * 2) BOOT=1: Boot address defined by user option byte BOOT_ADD1[15:0]. - * ST programmed value: System bootloader at 0x1FF0:0000 - * - * The Durandal has a Switch on board, the BOOT0 pin is at ground so by default, - * the STM32 will boot to address 0x0800:0000 in FLASH unless the swiutch is - * drepresed, then the boot will be from 0x1FF0:0000 - * - * The STM32H743ZI also has 1024Kb of data SRAM. - * SRAM is split up into several blocks and into three power domains: - * - * 1) TCM SRAMs are dedicated to the Cortex-M7 and are accessible with - * 0 wait states by the Cortex-M7 and by MDMA through AHBS slave bus - * - * 1.1) 128Kb of DTCM-RAM beginning at address 0x2000:0000 - * - * The DTCM-RAM is organized as 2 x 64Kb DTCM-RAMs on 2 x 32 bit - * DTCM ports. The DTCM-RAM could be used for critical real-time - * data, such as interrupt service routines or stack / heap memory. - * Both DTCM-RAMs can be used in parallel (for load/store operations) - * thanks to the Cortex-M7 dual issue capability. - * - * 1.2) 64Kb of ITCM-RAM beginning at address 0x0000:0000 - * - * This RAM is connected to ITCM 64-bit interface designed for - * execution of critical real-times routines by the CPU. - * - * 2) AXI SRAM (D1 domain) accessible by all system masters except BDMA - * through D1 domain AXI bus matrix - * - * 2.1) 512Kb of SRAM beginning at address 0x2400:0000 - * - * 3) AHB SRAM (D2 domain) accessible by all system masters except BDMA - * through D2 domain AHB bus matrix - * - * 3.1) 128Kb of SRAM1 beginning at address 0x3000:0000 - * 3.2) 128Kb of SRAM2 beginning at address 0x3002:0000 - * 3.3) 32Kb of SRAM3 beginning at address 0x3004:0000 - * - * SRAM1 - SRAM3 are one contiguous block: 288Kb at address 0x3000:0000 - * - * 4) AHB SRAM (D3 domain) accessible by most of system masters - * through D3 domain AHB bus matrix - * - * 4.1) 64Kb of SRAM4 beginning at address 0x3800:0000 - * 4.1) 4Kb of backup RAM beginning at address 0x3880:0000 - * - * When booting from FLASH, FLASH memory is aliased to address 0x0000:0000 - * where the code expects to begin execution by jumping to the entry point in - * the 0x0800:0000 address range. - */ - -MEMORY -{ - itcm (rwx) : ORIGIN = 0x00000000, LENGTH = 64K - flash (rx) : ORIGIN = 0x08000000, LENGTH = 2048K - dtcm1 (rwx) : ORIGIN = 0x20000000, LENGTH = 64K - dtcm2 (rwx) : ORIGIN = 0x20010000, LENGTH = 64K - sram (rwx) : ORIGIN = 0x24000000, LENGTH = 512K - sram1 (rwx) : ORIGIN = 0x30000000, LENGTH = 128K - sram2 (rwx) : ORIGIN = 0x30020000, LENGTH = 128K - sram3 (rwx) : ORIGIN = 0x30040000, LENGTH = 32K - sram4 (rwx) : ORIGIN = 0x38000000, LENGTH = 64K - bbram (rwx) : ORIGIN = 0x38800000, LENGTH = 4K -} - -OUTPUT_ARCH(arm) -EXTERN(_vectors) -ENTRY(_stext) - -/* - * Ensure that abort() is present in the final object. The exception handling - * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). - */ -EXTERN(abort) -EXTERN(_bootdelay_signature) - -SECTIONS -{ - .text : { - _stext = ABSOLUTE(.); - *(.vectors) - . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; - *(.text .text.*) - *(.fixup) - *(.gnu.warning) - *(.rodata .rodata.*) - *(.gnu.linkonce.t.*) - *(.glue_7) - *(.glue_7t) - *(.got) - *(.gcc_except_table) - *(.gnu.linkonce.r.*) - _etext = ABSOLUTE(.); - - } > flash - - /* - * Init functions (static constructors and the like) - */ - .init_section : { - _sinit = ABSOLUTE(.); - KEEP(*(.init_array .init_array.*)) - _einit = ABSOLUTE(.); - } > flash - - - .ARM.extab : { - *(.ARM.extab*) - } > flash - - __exidx_start = ABSOLUTE(.); - .ARM.exidx : { - *(.ARM.exidx*) - } > flash - __exidx_end = ABSOLUTE(.); - - _eronly = ABSOLUTE(.); - - .data : { - _sdata = ABSOLUTE(.); - *(.data .data.*) - *(.gnu.linkonce.d.*) - CONSTRUCTORS - _edata = ABSOLUTE(.); - } > sram AT > flash - - .bss : { - _sbss = ABSOLUTE(.); - *(.bss .bss.*) - *(.gnu.linkonce.b.*) - *(COMMON) - . = ALIGN(4); - _ebss = ABSOLUTE(.); - } > sram - - /* Stabs debugging sections. */ - .stab 0 : { *(.stab) } - .stabstr 0 : { *(.stabstr) } - .stab.excl 0 : { *(.stab.excl) } - .stab.exclstr 0 : { *(.stab.exclstr) } - .stab.index 0 : { *(.stab.index) } - .stab.indexstr 0 : { *(.stab.indexstr) } - .comment 0 : { *(.comment) } - .debug_abbrev 0 : { *(.debug_abbrev) } - .debug_info 0 : { *(.debug_info) } - .debug_line 0 : { *(.debug_line) } - .debug_pubnames 0 : { *(.debug_pubnames) } - .debug_aranges 0 : { *(.debug_aranges) } -} diff --git a/boards/xc-fly/xc-slim/nuttx-config/scripts/script.ld b/boards/xc-fly/xc-slim/nuttx-config/scripts/script.ld deleted file mode 100644 index 1dc1a0ef97..0000000000 --- a/boards/xc-fly/xc-slim/nuttx-config/scripts/script.ld +++ /dev/null @@ -1,228 +0,0 @@ -/**************************************************************************** - * scripts/script.ld - * - * Copyright (C) 2020 Gregory Nutt. All rights reserved. - * Author: Gregory Nutt - * - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name NuttX nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/* The board uses an STM32H743II and has 2048Kb of main FLASH memory. - * The flash memory is partitioned into a User Flash memory and a System - * Flash memory. Each of these memories has two banks: - * - * 1) User Flash memory: - * - * Bank 1: Start address 0x0800:0000 to 0x080F:FFFF with 8 sectors, 128Kb each - * Bank 2: Start address 0x0810:0000 to 0x081F:FFFF with 8 sectors, 128Kb each - * - * 2) System Flash memory: - * - * Bank 1: Start address 0x1FF0:0000 to 0x1FF1:FFFF with 1 x 128Kb sector - * Bank 1: Start address 0x1FF4:0000 to 0x1FF5:FFFF with 1 x 128Kb sector - * - * 3) User option bytes for user configuration, only in Bank 1. - * - * In the STM32H743II, two different boot spaces can be selected through - * the BOOT pin and the boot base address programmed in the BOOT_ADD0 and - * BOOT_ADD1 option bytes: - * - * 1) BOOT=0: Boot address defined by user option byte BOOT_ADD0[15:0]. - * ST programmed value: Flash memory at 0x0800:0000 - * 2) BOOT=1: Boot address defined by user option byte BOOT_ADD1[15:0]. - * ST programmed value: System bootloader at 0x1FF0:0000 - * - * There's a switch on board, the BOOT0 pin is at ground so by default, - * the STM32 will boot to address 0x0800:0000 in FLASH unless the switch is - * drepresed, then the boot will be from 0x1FF0:0000 - * - * The STM32H743ZI also has 1024Kb of data SRAM. - * SRAM is split up into several blocks and into three power domains: - * - * 1) TCM SRAMs are dedicated to the Cortex-M7 and are accessible with - * 0 wait states by the Cortex-M7 and by MDMA through AHBS slave bus - * - * 1.1) 128Kb of DTCM-RAM beginning at address 0x2000:0000 - * - * The DTCM-RAM is organized as 2 x 64Kb DTCM-RAMs on 2 x 32 bit - * DTCM ports. The DTCM-RAM could be used for critical real-time - * data, such as interrupt service routines or stack / heap memory. - * Both DTCM-RAMs can be used in parallel (for load/store operations) - * thanks to the Cortex-M7 dual issue capability. - * - * 1.2) 64Kb of ITCM-RAM beginning at address 0x0000:0000 - * - * This RAM is connected to ITCM 64-bit interface designed for - * execution of critical real-times routines by the CPU. - * - * 2) AXI SRAM (D1 domain) accessible by all system masters except BDMA - * through D1 domain AXI bus matrix - * - * 2.1) 512Kb of SRAM beginning at address 0x2400:0000 - * - * 3) AHB SRAM (D2 domain) accessible by all system masters except BDMA - * through D2 domain AHB bus matrix - * - * 3.1) 128Kb of SRAM1 beginning at address 0x3000:0000 - * 3.2) 128Kb of SRAM2 beginning at address 0x3002:0000 - * 3.3) 32Kb of SRAM3 beginning at address 0x3004:0000 - * - * SRAM1 - SRAM3 are one contiguous block: 288Kb at address 0x3000:0000 - * - * 4) AHB SRAM (D3 domain) accessible by most of system masters - * through D3 domain AHB bus matrix - * - * 4.1) 64Kb of SRAM4 beginning at address 0x3800:0000 - * 4.1) 4Kb of backup RAM beginning at address 0x3880:0000 - * - * When booting from FLASH, FLASH memory is aliased to address 0x0000:0000 - * where the code expects to begin execution by jumping to the entry point in - * the 0x0800:0000 address range. - */ - -MEMORY -{ - ITCM_RAM (rwx) : ORIGIN = 0x00000000, LENGTH = 64K - FLASH (rx) : ORIGIN = 0x08020000, LENGTH = 1792K - - DTCM1_RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 64K - DTCM2_RAM (rwx) : ORIGIN = 0x20010000, LENGTH = 64K - AXI_SRAM (rwx) : ORIGIN = 0x24000000, LENGTH = 512K /* D1 domain AXI bus */ - SRAM1 (rwx) : ORIGIN = 0x30000000, LENGTH = 128K /* D2 domain AHB bus */ - SRAM2 (rwx) : ORIGIN = 0x30020000, LENGTH = 128K /* D2 domain AHB bus */ - SRAM3 (rwx) : ORIGIN = 0x30040000, LENGTH = 32K /* D2 domain AHB bus */ - SRAM4 (rwx) : ORIGIN = 0x38000000, LENGTH = 64K /* D3 domain */ - BKPRAM (rwx) : ORIGIN = 0x38800000, LENGTH = 4K -} - -OUTPUT_ARCH(arm) -EXTERN(_vectors) -ENTRY(_stext) - -/* - * Ensure that abort() is present in the final object. The exception handling - * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). - */ -EXTERN(abort) -EXTERN(_bootdelay_signature) - -SECTIONS -{ - .text : { - _stext = ABSOLUTE(.); - *(.vectors) - . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; - *(.text .text.*) - *(.fixup) - *(.gnu.warning) - *(.rodata .rodata.*) - *(.gnu.linkonce.t.*) - *(.glue_7) - *(.glue_7t) - *(.got) - *(.gcc_except_table) - *(.gnu.linkonce.r.*) - _etext = ABSOLUTE(.); - - } > FLASH - - /* - * Init functions (static constructors and the like) - */ - .init_section : { - _sinit = ABSOLUTE(.); - KEEP(*(.init_array .init_array.*)) - _einit = ABSOLUTE(.); - } > FLASH - - - .ARM.extab : { - *(.ARM.extab*) - } > FLASH - - __exidx_start = ABSOLUTE(.); - .ARM.exidx : { - *(.ARM.exidx*) - } > FLASH - __exidx_end = ABSOLUTE(.); - - _eronly = ABSOLUTE(.); - - .data : { - _sdata = ABSOLUTE(.); - *(.data .data.*) - *(.gnu.linkonce.d.*) - CONSTRUCTORS - _edata = ABSOLUTE(.); - - /* Pad out last section as the STM32H7 Flash write size is 256 bits. 32 bytes */ - . = ALIGN(16); - FILL(0xffff) - . += 16; - } > AXI_SRAM AT > FLASH = 0xffff - - .bss : { - _sbss = ABSOLUTE(.); - *(.bss .bss.*) - *(.gnu.linkonce.b.*) - *(COMMON) - . = ALIGN(4); - _ebss = ABSOLUTE(.); - } > AXI_SRAM - - /* Emit the the D3 power domain section for locating BDMA data */ - - .sram4_reserve (NOLOAD) : - { - *(.sram4) - . = ALIGN(4); - _sram4_heap_start = ABSOLUTE(.); - } > SRAM4 - - /* Stabs debugging sections. */ - .stab 0 : { *(.stab) } - .stabstr 0 : { *(.stabstr) } - .stab.excl 0 : { *(.stab.excl) } - .stab.exclstr 0 : { *(.stab.exclstr) } - .stab.index 0 : { *(.stab.index) } - .stab.indexstr 0 : { *(.stab.indexstr) } - .comment 0 : { *(.comment) } - .debug_abbrev 0 : { *(.debug_abbrev) } - .debug_info 0 : { *(.debug_info) } - .debug_line 0 : { *(.debug_line) } - .debug_pubnames 0 : { *(.debug_pubnames) } - .debug_aranges 0 : { *(.debug_aranges) } -} diff --git a/boards/xc-fly/xc-slim/src/board_config.h b/boards/xc-fly/xc-slim/src/board_config.h deleted file mode 100644 index e5f6084ee9..0000000000 --- a/boards/xc-fly/xc-slim/src/board_config.h +++ /dev/null @@ -1,234 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2021 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file board_config.h - * - * Board internal definitions - */ - -#pragma once - -/**************************************************************************************************** - * Included Files - ****************************************************************************************************/ - -#include -#include -#include - -#include - -/**************************************************************************************************** - * Definitions - ****************************************************************************************************/ - -#define FLASH_BASED_PARAMS - - -/* LEDs are driven with push open drain to support Anode to 5V or 3.3V */ - -# define GPIO_nLED_RED /* PD15 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_50MHz|GPIO_OUTPUT_SET|GPIO_PORTD|GPIO_PIN15) -# define GPIO_nLED_GREEN /* PD11 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_50MHz|GPIO_OUTPUT_SET|GPIO_PORTD|GPIO_PIN11) -# define GPIO_nLED_BLUE /* PB15 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_50MHz|GPIO_OUTPUT_SET|GPIO_PORTB|GPIO_PIN15) - -# define BOARD_HAS_CONTROL_STATUS_LEDS 1 -# define BOARD_OVERLOAD_LED LED_RED -# define BOARD_ARMED_STATE_LED LED_BLUE - -/* - * ADC channels - * - * These are the channel numbers of the ADCs of the microcontroller that - * can be used by the Px4 Firmware in the adc driver - */ - -/* ADC defines to be used in sensors.cpp to read from a particular channel */ - -#define SYSTEM_ADC_BASE STM32_ADC1_BASE - -#define ADC12_CH(n) (n) - -#define PX4_ADC_GPIO \ - /* PC4 */ GPIO_ADC12_INP4, \ - /* PC5 */ GPIO_ADC12_INP8 - -/* Define GPIO pins used as ADC N.B. Channel numbers must match below */ -/* Define Channel numbers must match above GPIO pin IN(n)*/ -#define ADC_BATTERY_VOLTAGE_CHANNEL ADC12_CH(4) -#define ADC_BATTERY_CURRENT_CHANNEL ADC12_CH(8) - -#define ADC_CHANNELS \ - ((1 << ADC_BATTERY_VOLTAGE_CHANNEL) | \ - (1 << ADC_BATTERY_CURRENT_CHANNEL)) - -#define BOARD_ADC_OPEN_CIRCUIT_V (1.6f) - - - -/* Define Battery 1 Voltage Divider and A per V - */ - -// #define BOARD_BATTERY1_V_DIV (11.0f) /* measured with the provided PM board */ -// #define BOARD_BATTERY1_A_PER_V (40.0f) -// #define BOARD_BATTERY2_V_DIV (11.0f) /* measured with the provided PM board */ - -/* PWM - */ -#define DIRECT_PWM_OUTPUT_CHANNELS 8 - -#define BOARD_HAS_PWM DIRECT_PWM_OUTPUT_CHANNELS - - - - -// /* HEATER PA15 TIM2_CH1 -// * PWM in future -// */ -// #define GPIO_HEATER_OUTPUT /* PA15 T2CH1 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTA|GPIO_PIN15) -// #define HEATER_OUTPUT_EN(on_true) px4_arch_gpiowrite(GPIO_HEATER_OUTPUT, (on_true)) - - - - -/* Spare GPIO */ -#define GPIO_PA4 /* PA4 */ (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTA|GPIO_PIN4) -#define GPIO_PC0 /* PC0 */ (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTC|GPIO_PIN0) -#define GPIO_PC1 /* PC1 */ (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTC|GPIO_PIN1) -/* Tone alarm output */ - -#define TONE_ALARM_TIMER 2 /* Timer 2*/ -#define TONE_ALARM_CHANNEL 1 /* PA15 GPIO_TIM2_CH1 NC */ -/*NC can be modified with Spare GPIO then connected with hardware */ -#define GPIO_BUZZER_1 /* PA15 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTA|GPIO_PIN15) - -#define GPIO_TONE_ALARM_IDLE GPIO_BUZZER_1 -#define GPIO_TONE_ALARM GPIO_BUZZER_1 -#define GPIO_TONE_ALARM_GPIO /* PA15 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_SET|GPIO_PORTA|GPIO_PIN15) - -/* USB OTG FS - * - * PE15 OTG_FS_VBUS VBUS sensing - */ -#define GPIO_OTGFS_VBUS /* PE15 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_SPEED_100MHz|GPIO_PORTE|GPIO_PIN15) -#define BOARD_ADC_USB_CONNECTED (px4_arch_gpioread(GPIO_OTGFS_VBUS)) - -/* High-resolution timer */ -#define HRT_TIMER 8 /* use timer1 for the HRT */ -#define HRT_TIMER_CHANNEL 1 /* use capture/compare channel 1 */ - -/* RC Serial port */ -#define RC_SERIAL_PORT "/dev/ttyS4" -#define BOARD_SUPPORTS_RC_SERIAL_PORT_OUTPUT - -// #define GPIO_SBUS_INV (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTD|GPIO_PIN14) -// #define RC_INVERT_INPUT(_invert_true) px4_arch_gpiowrite(GPIO_SBUS_INV, _invert_true); - -/* SD card bringup does not work if performed on the IDLE thread because it - * will cause waiting. Use either: - * - * CONFIG_LIB_BOARDCTL=y, OR - * CONFIG_BOARD_INITIALIZE=y && CONFIG_BOARD_INITTHREAD=y - */ -#define SDIO_SLOTNO 0 /* Only one slot */ -#define SDIO_MINOR 0 -#if defined(CONFIG_BOARD_INITIALIZE) && !defined(CONFIG_LIB_BOARDCTL) && \ - !defined(CONFIG_BOARD_INITTHREAD) -# warning SDIO initialization cannot be perfomed on the IDLE thread -#endif - -/* This board provides a DMA pool and APIs */ -#define BOARD_DMA_ALLOC_POOL_SIZE 5120 - -/* This board provides the board_on_reset interface */ -#define BOARD_HAS_ON_RESET 1 - -#define PX4_GPIO_INIT_LIST { \ - GPIO_CAN1_TX,\ - GPIO_CAN1_RX, \ - PX4_ADC_GPIO, \ - GPIO_PC0, \ - GPIO_PC1, \ - GPIO_TONE_ALARM_IDLE, \ - } - -#define BOARD_ENABLE_CONSOLE_BUFFER - -#define BOARD_NUM_IO_TIMERS 5 - - -__BEGIN_DECLS - -/**************************************************************************************************** - * Public Types - ****************************************************************************************************/ - -/**************************************************************************************************** - * Public data - ****************************************************************************************************/ - -#ifndef __ASSEMBLY__ - -/**************************************************************************************************** - * Public Functions - ****************************************************************************************************/ - -/**************************************************************************** - * Name: stm32_sdio_initialize - * - * Description: - * Initialize SDIO-based MMC/SD card support - * - ****************************************************************************/ - -int stm32_sdio_initialize(void); - -/**************************************************************************************************** - * Name: stm32_spiinitialize - * - * Description: - * Called to configure SPI chip select GPIO pins for the board. - * - ****************************************************************************************************/ - -extern void stm32_spiinitialize(void); - -extern void stm32_usbinitialize(void); - -extern void board_peripheral_reset(int ms); - -#include - -#endif /* __ASSEMBLY__ */ - -__END_DECLS diff --git a/boards/xc-fly/xc-slim/src/flash_w25q128.c b/boards/xc-fly/xc-slim/src/flash_w25q128.c deleted file mode 100644 index 3a3e2cee1f..0000000000 --- a/boards/xc-fly/xc-slim/src/flash_w25q128.c +++ /dev/null @@ -1,505 +0,0 @@ -/**************************************************************************** - * - * Copyright (C) 2020 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file flash_w25q128.c - * - * Board-specific external flash W25Q128 functions. - */ - - -#include "board_config.h" -#include "qspi.h" -#include "arm_internal.h" -#include -#include - - -/************************************************************************************ - * Pre-processor Definitions - ************************************************************************************/ -/* Configuration ********************************************************************/ - -#define N25Q128_SECTOR_SIZE (4*1024) -#define N25Q128_SECTOR_SHIFT (12) -#define N25Q128_SECTOR_COUNT (4096) -#define N25Q128_PAGE_SIZE (256) -#define N25Q128_PAGE_SHIFT (8) - -#define W25Q_DUMMY_CYCLES_FAST_READ_QUAD 6 -#define W25Q_INSTR_FAST_READ_QUAD 0xEB -#define W25Q_ADDRESS_SIZE 3 // 3 bytes -> 24 bits - -#define N25QXXX_READ_STATUS 0x05 /* Read status register: * - * 0x05 | SR */ -#define N25QXXX_PAGE_PROGRAM 0x02 /* Page Program: * - * 0x02 | ADDR(MS) | ADDR(MID) | * - * ADDR(LS) | data */ -#define N25QXXX_WRITE_ENABLE 0x06 /* Write enable: * - * 0x06 */ -#define N25QXXX_WRITE_DISABLE 0x04 /* Write disable command code: * - * 0x04 */ -#define N25QXXX_SUBSECTOR_ERASE 0x20 /* Sub-sector Erase (4 kB) * - * 0x20 | ADDR(MS) | ADDR(MID) | * - * ADDR(LS) */ - - -/* N25QXXX Registers ****************************************************************/ -/* Status register bit definitions */ - -#define STATUS_BUSY_MASK (1 << 0) /* Bit 0: Device ready/busy status */ -# define STATUS_READY (0 << 0) /* 0 = Not Busy */ -# define STATUS_BUSY (1 << 0) /* 1 = Busy */ -#define STATUS_WEL_MASK (1 << 1) /* Bit 1: Write enable latch status */ -# define STATUS_WEL_DISABLED (0 << 1) /* 0 = Not Write Enabled */ -# define STATUS_WEL_ENABLED (1 << 1) /* 1 = Write Enabled */ -#define STATUS_BP_SHIFT (2) /* Bits 2-4: Block protect bits */ -#define STATUS_BP_MASK (7 << STATUS_BP_SHIFT) -# define STATUS_BP_NONE (0 << STATUS_BP_SHIFT) -# define STATUS_BP_ALL (7 << STATUS_BP_SHIFT) -#define STATUS_TB_MASK (1 << 5) /* Bit 5: Top / Bottom Protect */ -# define STATUS_TB_TOP (0 << 5) /* 0 = BP2-BP0 protect Top down */ -# define STATUS_TB_BOTTOM (1 << 5) /* 1 = BP2-BP0 protect Bottom up */ -#define STATUS_BP3_MASK (1 << 5) /* Bit 6: BP3 */ -#define STATUS_SRP0_MASK (1 << 7) /* Bit 7: Status register protect 0 */ -# define STATUS_SRP0_UNLOCKED (0 << 7) /* 0 = WP# no effect / PS Lock Down */ -# define STATUS_SRP0_LOCKED (1 << 7) /* 1 = WP# protect / OTP Lock Down */ - -/************************************************************************************ - * Private Types - ************************************************************************************/ - -/* This type represents the state of the MTD device. The struct mtd_dev_s must - * appear at the beginning of the definition so that you can freely cast between - * pointers to struct mtd_dev_s and struct n25qxxx_dev_s. - */ - -struct n25qxxx_dev_s { - //struct mtd_dev_s mtd; /* MTD interface */ - FAR struct qspi_dev_s *qspi; /* Saved QuadSPI interface instance */ - uint16_t nsectors; /* Number of erase sectors */ - uint8_t sectorshift; /* Log2 of sector size */ - uint8_t pageshift; /* Log2 of page size */ - FAR uint8_t *cmdbuf; /* Allocated command buffer */ - FAR uint8_t *readbuf; /* Allocated status read buffer */ -}; - -/**************************************************************************** - * Private Data - ****************************************************************************/ - -struct qspi_dev_s *ptr_qspi_dev; -struct qspi_meminfo_s qspi_meminfo = { - .flags = QSPIMEM_QUADIO, - .addrlen = W25Q_ADDRESS_SIZE, - .dummies = W25Q_DUMMY_CYCLES_FAST_READ_QUAD, - .cmd = W25Q_INSTR_FAST_READ_QUAD -}; - -struct n25qxxx_dev_s n25qxxx_dev; -uint8_t cmdbuf[4] = {0u}; -uint8_t readbuf[1] = {0u}; - -/************************************************************************************ - * Private Functions - ************************************************************************************/ -__ramfunc__ int n25qxxx_command(FAR struct qspi_dev_s *qspi, uint8_t cmd); -__ramfunc__ uint8_t n25qxxx_read_status(FAR struct n25qxxx_dev_s *priv); -__ramfunc__ int n25qxxx_command_read(FAR struct qspi_dev_s *qspi, uint8_t cmd, - FAR void *buffer, size_t buflen); -__ramfunc__ void n25qxxx_write_enable(FAR struct n25qxxx_dev_s *priv); -__ramfunc__ void n25qxxx_write_disable(FAR struct n25qxxx_dev_s *priv); - -__ramfunc__ int n25qxxx_write_page(struct n25qxxx_dev_s *priv, FAR const uint8_t *buffer, - off_t address, size_t buflen); - -__ramfunc__ int n25qxxx_write_one_page(struct n25qxxx_dev_s *priv, struct qspi_meminfo_s *meminfo); - -__ramfunc__ int n25qxxx_erase_sector(struct n25qxxx_dev_s *priv, off_t sector); - -__ramfunc__ bool n25qxxx_isprotected(FAR struct n25qxxx_dev_s *priv, uint8_t status, - off_t address); - -__ramfunc__ int n25qxxx_command_address(FAR struct qspi_dev_s *qspi, uint8_t cmd, - off_t addr, uint8_t addrlen); - -/************************************************************************************ - * Public Functions - ************************************************************************************/ - -void flash_w25q128_init(void) -{ - int qspi_interface_number = 0; - ptr_qspi_dev = stm32h7_qspi_initialize(qspi_interface_number); - n25qxxx_dev.qspi = ptr_qspi_dev; - n25qxxx_dev.cmdbuf = cmdbuf; - n25qxxx_dev.readbuf = readbuf; - n25qxxx_dev.sectorshift = N25Q128_SECTOR_SHIFT; - n25qxxx_dev.pageshift = N25Q128_PAGE_SHIFT; - n25qxxx_dev.nsectors = N25Q128_SECTOR_COUNT; -} - -__ramfunc__ ssize_t up_progmem_ext_getpage(size_t addr) -{ - ssize_t page_address = (addr - STM32_FMC_BANK4) / N25Q128_SECTOR_COUNT; - - return page_address; -} - -__ramfunc__ ssize_t up_progmem_ext_eraseblock(size_t block) -{ - ssize_t size = N25Q128_SECTOR_COUNT; - - irqstate_t irqstate = px4_enter_critical_section(); - stm32h7_qspi_exit_memorymapped(ptr_qspi_dev); - - n25qxxx_erase_sector(&n25qxxx_dev, block); - - stm32h7_qspi_enter_memorymapped(ptr_qspi_dev, &qspi_meminfo, 0); - px4_leave_critical_section(irqstate); - return size; -} - -__ramfunc__ ssize_t up_progmem_ext_write(size_t addr, FAR const void *buf, size_t count) -{ - ssize_t ret_val = 0; - - irqstate_t irqstate = px4_enter_critical_section(); - stm32h7_qspi_exit_memorymapped(ptr_qspi_dev); - - addr &= 0xFFFFFF; - n25qxxx_write_page(&n25qxxx_dev, buf, (off_t)addr, count); - - stm32h7_qspi_enter_memorymapped(ptr_qspi_dev, &qspi_meminfo, 0); - px4_leave_critical_section(irqstate); - - return ret_val; -} - -/************************************************************************************ - * Name: n25qxxx_command - ************************************************************************************/ - -__ramfunc__ int n25qxxx_command(FAR struct qspi_dev_s *qspi, uint8_t cmd) -{ - struct qspi_cmdinfo_s cmdinfo; - - finfo("CMD: %02" PRIx8 "\n", cmd); - - cmdinfo.flags = 0; - cmdinfo.addrlen = 0; - cmdinfo.cmd = cmd; - cmdinfo.buflen = 0; - cmdinfo.addr = 0; - cmdinfo.buffer = NULL; - - int rv; - rv = qspi_command(qspi, &cmdinfo); - return rv; -} - -/************************************************************************************ - * Name: n25qxxx_read_status - ************************************************************************************/ - -__ramfunc__ uint8_t n25qxxx_read_status(FAR struct n25qxxx_dev_s *priv) -{ - DEBUGVERIFY(n25qxxx_command_read(priv->qspi, N25QXXX_READ_STATUS, - (FAR void *)&priv->readbuf[0], 1)); - return priv->readbuf[0]; -} - -/************************************************************************************ - * Name: n25qxxx_command_read - ************************************************************************************/ - -__ramfunc__ int n25qxxx_command_read(FAR struct qspi_dev_s *qspi, uint8_t cmd, - FAR void *buffer, size_t buflen) -{ - struct qspi_cmdinfo_s cmdinfo; - - finfo("CMD: %02" PRIx8 " buflen: %zu\n", cmd, buflen); - - cmdinfo.flags = QSPICMD_READDATA; - cmdinfo.addrlen = 0; - cmdinfo.cmd = cmd; - cmdinfo.buflen = buflen; - cmdinfo.addr = 0; - cmdinfo.buffer = buffer; - - int rv; - rv = qspi_command(qspi, &cmdinfo); - return rv; -} - - -/************************************************************************************ - * Name: n25qxxx_write_enable - ************************************************************************************/ - -__ramfunc__ void n25qxxx_write_enable(FAR struct n25qxxx_dev_s *priv) -{ - uint8_t status; - - do { - n25qxxx_command(priv->qspi, N25QXXX_WRITE_ENABLE); - status = n25qxxx_read_status(priv); - } while ((status & STATUS_WEL_MASK) != STATUS_WEL_ENABLED); -} - -/************************************************************************************ - * Name: n25qxxx_write_disable - ************************************************************************************/ - -__ramfunc__ void n25qxxx_write_disable(FAR struct n25qxxx_dev_s *priv) -{ - uint8_t status; - - do { - n25qxxx_command(priv->qspi, N25QXXX_WRITE_DISABLE); - status = n25qxxx_read_status(priv); - } while ((status & STATUS_WEL_MASK) != STATUS_WEL_DISABLED); -} - -/************************************************************************************ - * Name: n25qxxx_write_page - ************************************************************************************/ - -__ramfunc__ int n25qxxx_write_page(struct n25qxxx_dev_s *priv, FAR const uint8_t *buffer, - off_t address, size_t buflen) -{ - struct qspi_meminfo_s meminfo; - unsigned int pagesize; - unsigned int npages; - unsigned int firstpagesize = 0; - int ret = OK; - unsigned int i; - - finfo("address: %08jx buflen: %zu\n", (intmax_t)address, buflen); - - pagesize = (1 << priv->pageshift); - - /* Set up non-varying parts of transfer description */ - - meminfo.flags = QSPIMEM_WRITE; - meminfo.cmd = N25QXXX_PAGE_PROGRAM; - meminfo.addrlen = 3; - meminfo.dummies = 0; - meminfo.buffer = (void *)buffer; - - if (0 != (address % pagesize)) { - firstpagesize = pagesize - (address % pagesize); - } - - if (buflen <= firstpagesize) { - meminfo.addr = address; - meminfo.buflen = buflen; - ret = n25qxxx_write_one_page(priv, &meminfo); - - } else { - - if (firstpagesize > 0) { - meminfo.addr = address; - meminfo.buflen = firstpagesize; - ret = n25qxxx_write_one_page(priv, &meminfo); - - buffer += firstpagesize; - address += firstpagesize; - buflen -= firstpagesize; - } - - npages = (buflen >> priv->pageshift); - - meminfo.buflen = pagesize; - - /* Then write each page */ - - for (i = 0; (i < npages) && (ret == OK); i++) { - /* Set up varying parts of the transfer description */ - - meminfo.addr = address; - meminfo.buffer = (void *)buffer; - - ret = n25qxxx_write_one_page(priv, &meminfo); - - /* Update for the next time through the loop */ - - buffer += pagesize; - address += pagesize; - buflen -= pagesize; - } - - if ((ret == OK) && (buflen > 0)) { - meminfo.addr = address; - meminfo.buffer = (void *)buffer; - meminfo.buflen = buflen; - - ret = n25qxxx_write_one_page(priv, &meminfo); - } - } - - return ret; -} - -__ramfunc__ int n25qxxx_write_one_page(struct n25qxxx_dev_s *priv, struct qspi_meminfo_s *meminfo) -{ - int ret; - - n25qxxx_write_enable(priv); - ret = qspi_memory(priv->qspi, meminfo); - n25qxxx_write_disable(priv); - - if (ret < 0) { - ferr("ERROR: QSPI_MEMORY failed writing address=%06" PRIx32 "\n", - meminfo->addr); - } - - return ret; -} - -/************************************************************************************ - * Name: n25qxxx_erase_sector - ************************************************************************************/ - -__ramfunc__ int n25qxxx_erase_sector(struct n25qxxx_dev_s *priv, off_t sector) -{ - off_t address; - uint8_t status; - - finfo("sector: %08jx\n", (intmax_t) sector); - - /* Check that the flash is ready and unprotected */ - - status = n25qxxx_read_status(priv); - - if ((status & STATUS_BUSY_MASK) != STATUS_READY) { - ferr("ERROR: Flash busy: %02" PRIx8, status); - return -EBUSY; - } - - /* Get the address associated with the sector */ - - address = (off_t)sector << priv->sectorshift; - - if ((status & (STATUS_BP3_MASK | STATUS_BP_MASK)) != 0 && - n25qxxx_isprotected(priv, status, address)) { - ferr("ERROR: Flash protected: %02" PRIx8, status); - return -EACCES; - } - - /* Send the sector erase command */ - - n25qxxx_write_enable(priv); - n25qxxx_command_address(priv->qspi, N25QXXX_SUBSECTOR_ERASE, address, 3); - - /* Wait for erasure to finish */ - - while ((n25qxxx_read_status(priv) & STATUS_BUSY_MASK) != 0); - - return OK; -} - -/************************************************************************************ - * Name: n25qxxx_isprotected - ************************************************************************************/ - -__ramfunc__ bool n25qxxx_isprotected(FAR struct n25qxxx_dev_s *priv, uint8_t status, - off_t address) -{ - off_t protstart; - off_t protend; - off_t protsize; - unsigned int bp; - - /* The BP field is spread across non-contiguous bits */ - - bp = (status & STATUS_BP_MASK) >> STATUS_BP_SHIFT; - - if (status & STATUS_BP3_MASK) { - bp |= 8; - } - - /* the BP field is essentially the power-of-two of the number of 64k sectors, - * saturated to the device size. - */ - - if (0 == bp) { - return false; - } - - protsize = 0x00010000; - protsize <<= (protsize << (bp - 1)); - protend = (1 << priv->sectorshift) * priv->nsectors; - - if (protsize > protend) { - protsize = protend; - } - - /* The final protection range then depends on if the protection region is - * configured top-down or bottom up (assuming CMP=0). - */ - - if ((status & STATUS_TB_MASK) != 0) { - protstart = 0x00000000; - protend = protstart + protsize; - - } else { - protstart = protend - protsize; - /* protend already computed above */ - } - - return (address >= protstart && address < protend); -} - -/************************************************************************************ - * Name: n25qxxx_command_address - ************************************************************************************/ - -__ramfunc__ int n25qxxx_command_address(FAR struct qspi_dev_s *qspi, uint8_t cmd, - off_t addr, uint8_t addrlen) -{ - struct qspi_cmdinfo_s cmdinfo; - - finfo("CMD: %02" PRIx8 " Address: %04jx addrlen=%" PRIx8 "\n", cmd, (intmax_t) addr, addrlen); - - cmdinfo.flags = QSPICMD_ADDRESS; - cmdinfo.addrlen = addrlen; - cmdinfo.cmd = cmd; - cmdinfo.buflen = 0; - cmdinfo.addr = addr; - cmdinfo.buffer = NULL; - - int rv; - rv = qspi_command(qspi, &cmdinfo); - return rv; -} diff --git a/boards/xc-fly/xc-slim/src/manifest.c b/boards/xc-fly/xc-slim/src/manifest.c deleted file mode 100644 index ab9c952cdd..0000000000 --- a/boards/xc-fly/xc-slim/src/manifest.c +++ /dev/null @@ -1,131 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2018-2021 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file manifest.c - * - * This module supplies the interface to the manifest of hardware that is - * optional and dependent on the HW REV and HW VER IDs - * - * The manifest allows the system to know whether a hardware option - * say for example the PX4IO is an no-pop option vs it is broken. - * - */ - -/**************************************************************************** - * Included Files - ****************************************************************************/ - -#include -#include - -#include -#include -#include - -#include "systemlib/px4_macros.h" - -/**************************************************************************** - * Pre-Processor Definitions - ****************************************************************************/ - -typedef struct { - uint32_t hw_ver_rev; /* the version and revision */ - const px4_hw_mft_item_t *mft; /* The first entry */ - uint32_t entries; /* the length of the list */ -} px4_hw_mft_list_entry_t; - -typedef px4_hw_mft_list_entry_t *px4_hw_mft_list_entry; -#define px4_hw_mft_list_uninitialized (px4_hw_mft_list_entry) -1 - -static const px4_hw_mft_item_t device_unsupported = {0, 0, 0}; - -// List of components on a specific board configuration -// The index of those components is given by the enum (px4_hw_mft_item_id_t) -// declared in board_common.h -static const px4_hw_mft_item_t hw_mft_list_v0600[] = { - { - .present = 0, - .mandatory = 0, - .connection = px4_hw_con_unknown, - }, -}; - -static px4_hw_mft_list_entry_t mft_lists[] = { - {V6U00, hw_mft_list_v0600, arraySize(hw_mft_list_v0600)}, -}; - -/************************************************************************************ - * Name: board_query_manifest - * - * Description: - * Optional returns manifest item. - * - * Input Parameters: - * manifest_id - the ID for the manifest item to retrieve - * - * Returned Value: - * 0 - item is not in manifest => assume legacy operations - * pointer to a manifest item - * - ************************************************************************************/ - -__EXPORT px4_hw_mft_item board_query_manifest(px4_hw_mft_item_id_t id) -{ - static px4_hw_mft_list_entry boards_manifest = px4_hw_mft_list_uninitialized; - - if (boards_manifest == px4_hw_mft_list_uninitialized) { - uint32_t ver_rev = board_get_hw_version() << 16; - ver_rev |= board_get_hw_revision(); - - for (unsigned i = 0; i < arraySize(mft_lists); i++) { - if (mft_lists[i].hw_ver_rev == ver_rev) { - boards_manifest = &mft_lists[i]; - break; - } - } - - if (boards_manifest == px4_hw_mft_list_uninitialized) { - syslog(LOG_ERR, "[boot] Board %08" PRIx32 " is not supported!\n", ver_rev); - } - } - - px4_hw_mft_item rv = &device_unsupported; - - if (boards_manifest != px4_hw_mft_list_uninitialized && - id < boards_manifest->entries) { - rv = &boards_manifest->mft[id]; - } - - return rv; -} diff --git a/boards/xc-fly/xc-slim/src/sdio.c b/boards/xc-fly/xc-slim/src/sdio.c deleted file mode 100644 index 869d757756..0000000000 --- a/boards/xc-fly/xc-slim/src/sdio.c +++ /dev/null @@ -1,177 +0,0 @@ -/**************************************************************************** - * - * Copyright (C) 2014, 2016 Gregory Nutt. All rights reserved. - * Author: Gregory Nutt - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name NuttX nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/**************************************************************************** - * Included Files - ****************************************************************************/ - -#include -#include - -#include -#include -#include -#include - -#include -#include - -#include "chip.h" -#include "board_config.h" -#include "stm32_gpio.h" -#include "stm32_sdmmc.h" - -#ifdef CONFIG_MMCSD - - -/**************************************************************************** - * Pre-processor Definitions - ****************************************************************************/ - -/* Card detections requires card support and a card detection GPIO */ - -#define HAVE_NCD 1 -#if !defined(GPIO_SDMMC1_NCD) -# undef HAVE_NCD -#endif - -/**************************************************************************** - * Private Data - ****************************************************************************/ - -static FAR struct sdio_dev_s *sdio_dev; -#ifdef HAVE_NCD -static bool g_sd_inserted = 0xff; /* Impossible value */ -#endif - -/**************************************************************************** - * Private Functions - ****************************************************************************/ - -/**************************************************************************** - * Name: stm32_ncd_interrupt - * - * Description: - * Card detect interrupt handler. - * - ****************************************************************************/ - -#ifdef HAVE_NCD -static int stm32_ncd_interrupt(int irq, FAR void *context) -{ - bool present; - - present = !stm32_gpioread(GPIO_SDMMC1_NCD); - - if (sdio_dev && present != g_sd_inserted) { - sdio_mediachange(sdio_dev, present); - g_sd_inserted = present; - } - - return OK; -} -#endif - -/**************************************************************************** - * Public Functions - ****************************************************************************/ - -/**************************************************************************** - * Name: stm32_sdio_initialize - * - * Description: - * Initialize SDIO-based MMC/SD card support - * - ****************************************************************************/ - -int stm32_sdio_initialize(void) -{ - int ret; - -#ifdef HAVE_NCD - /* Card detect */ - - bool cd_status; - - /* Configure the card detect GPIO */ - - stm32_configgpio(GPIO_SDMMC1_NCD); - - /* Register an interrupt handler for the card detect pin */ - - stm32_gpiosetevent(GPIO_SDMMC1_NCD, true, true, true, stm32_ncd_interrupt); -#endif - - /* Mount the SDIO-based MMC/SD block driver */ - /* First, get an instance of the SDIO interface */ - - finfo("Initializing SDIO slot %d\n", SDIO_SLOTNO); - - sdio_dev = sdio_initialize(SDIO_SLOTNO); - - if (!sdio_dev) { - syslog(LOG_ERR, "[boot] Failed to initialize SDIO slot %d\n", SDIO_SLOTNO); - return -ENODEV; - } - - /* Now bind the SDIO interface to the MMC/SD driver */ - - finfo("Bind SDIO to the MMC/SD driver, minor=%d\n", SDIO_MINOR); - - ret = mmcsd_slotinitialize(SDIO_MINOR, sdio_dev); - - if (ret != OK) { - syslog(LOG_ERR, "[boot] Failed to bind SDIO to the MMC/SD driver: %d\n", ret); - return ret; - } - - finfo("Successfully bound SDIO to the MMC/SD driver\n"); - -#ifdef HAVE_NCD - /* Use SD card detect pin to check if a card is g_sd_inserted */ - - cd_status = !stm32_gpioread(GPIO_SDMMC1_NCD); - finfo("Card detect : %d\n", cd_status); - - sdio_mediachange(sdio_dev, cd_status); -#else - /* Assume that the SD card is inserted. What choice do we have? */ - - sdio_mediachange(sdio_dev, true); -#endif - - return OK; -} - -#endif /* CONFIG_MMCSD */ diff --git a/boards/xc-fly/xc-slim/src/timer_config.cpp b/boards/xc-fly/xc-slim/src/timer_config.cpp deleted file mode 100644 index a1e8d8672b..0000000000 --- a/boards/xc-fly/xc-slim/src/timer_config.cpp +++ /dev/null @@ -1,61 +0,0 @@ -/**************************************************************************** - * - * Copyright (C) 2021 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * - * * TIM2_CH1 T HEATER > PWM OUT or GPIO PA15 - ****************************************************************************/ - - -#include - -constexpr io_timers_t io_timers[MAX_IO_TIMERS] = { - initIOTimer(Timer::Timer1, DMA{DMA::Index1}), - initIOTimer(Timer::Timer2, DMA{DMA::Index1}), - initIOTimer(Timer::Timer3, DMA{DMA::Index1}), - // initIOTimer(Timer::Timer2), - // initIOTimer(Timer::Timer3), -}; - -constexpr timer_io_channels_t timer_io_channels[MAX_TIMER_IO_CHANNELS] = { - initIOTimerChannel(io_timers, {Timer::Timer1, Timer::Channel1}, {GPIO::PortE, GPIO::Pin9}), - initIOTimerChannel(io_timers, {Timer::Timer1, Timer::Channel2}, {GPIO::PortE, GPIO::Pin11}), - initIOTimerChannel(io_timers, {Timer::Timer1, Timer::Channel3}, {GPIO::PortE, GPIO::Pin13}), - initIOTimerChannel(io_timers, {Timer::Timer1, Timer::Channel4}, {GPIO::PortE, GPIO::Pin14}), - initIOTimerChannel(io_timers, {Timer::Timer3, Timer::Channel4}, {GPIO::PortB, GPIO::Pin1}), - initIOTimerChannel(io_timers, {Timer::Timer3, Timer::Channel3}, {GPIO::PortB, GPIO::Pin0}), - initIOTimerChannel(io_timers, {Timer::Timer2, Timer::Channel3}, {GPIO::PortB, GPIO::Pin10}), - initIOTimerChannel(io_timers, {Timer::Timer2, Timer::Channel4}, {GPIO::PortB, GPIO::Pin11}), - - -}; - -constexpr io_timers_channel_mapping_t io_timers_channel_mapping = - initIOTimerChannelMapping(io_timers, timer_io_channels); diff --git a/boards/zeroone/x6/default.px4board b/boards/zeroone/x6/default.px4board index af7e91fb9a..3fbbe8b1c4 100644 --- a/boards/zeroone/x6/default.px4board +++ b/boards/zeroone/x6/default.px4board @@ -69,7 +69,6 @@ CONFIG_MODULES_NAVIGATOR=y CONFIG_MODE_NAVIGATOR_VTOL_TAKEOFF=y CONFIG_MODULES_RC_UPDATE=y CONFIG_MODULES_SENSORS=y -CONFIG_MODULES_TEMPERATURE_COMPENSATION=y CONFIG_MODULES_UXRCE_DDS_CLIENT=y CONFIG_MODULES_VTOL_ATT_CONTROL=y CONFIG_SYSTEMCMDS_ACTUATOR_TEST=y diff --git a/boards/zeroone/x6/init/rc.board_sensors b/boards/zeroone/x6/init/rc.board_sensors index ae42aa8ad2..cd320ec5d1 100644 --- a/boards/zeroone/x6/init/rc.board_sensors +++ b/boards/zeroone/x6/init/rc.board_sensors @@ -60,17 +60,17 @@ fi if ver hwtypecmp ZeroOneX6000 then # Internal SPI bus icm45686 with SPIX - icm45686 -b 2 -s -R 6 start //X6 & X6 air + icm45686 -b 2 -s -R 6 start # X6 & X6 air - bmi088 -A -R 4 -s start //X6 - bmi088 -G -R 4 -s start //X6 + bmi088 -A -R 4 -s start # X6 + bmi088 -G -R 4 -s start # X6 # Internal SPI bus icm45686 with SPIX - icm45686 -b 1 -s -R 8 start //X6 & X6 air + icm45686 -b 1 -s -R 8 start # X6 & X6 air fi -if ver hwtypecmp ZeroOneX6001 //X6 PRO +if ver hwtypecmp ZeroOneX6001 # X6 PRO then # Internal SPI bus IIM42653 with SPIX iim42653 -b 2 -s -R 6 start @@ -82,15 +82,16 @@ then iim42653 -b 1 -s -R 8 start fi - -rm3100 -I -b 4 start -# Internal magnetometer on I2c - -# External compass on GPS1/I2C1 (the 3rd external bus): standard Holybro Pixhawk 4 or CUAV V5 GPS/compass puck (with lights, safety button, and buzzer) +# External compass on GPS1/I2C1 bus ist8310 -X -b 1 -R 10 start - # Internal compass -ist8310 start -I -a 0x0E -R 12 +if ! rm3100 -I -b 4 start # X6 & X6 PRO & X6 Ultra +then + if ! ist8310 -I -a 0x0E -R 12 start # X6 air + then + bmm350 -I -b 4 -a 0x15 -R 14 start # X6 air II + fi +fi # Possible internal Baro if param compare SENS_INT_BARO_EN 1 diff --git a/boards/zeroone/x6/nuttx-config/scripts/bootloader_script.ld b/boards/zeroone/x6/nuttx-config/scripts/bootloader_script.ld index 2e6eba3607..293b6cccec 100644 --- a/boards/zeroone/x6/nuttx-config/scripts/bootloader_script.ld +++ b/boards/zeroone/x6/nuttx-config/scripts/bootloader_script.ld @@ -132,20 +132,12 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) - SECTIONS { .text : { _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/zeroone/x6/nuttx-config/scripts/script.ld b/boards/zeroone/x6/nuttx-config/scripts/script.ld index b6b341d4e8..32d7cf662a 100644 --- a/boards/zeroone/x6/nuttx-config/scripts/script.ld +++ b/boards/zeroone/x6/nuttx-config/scripts/script.ld @@ -131,7 +131,6 @@ ENTRY(_stext) * code pulled in by libgcc.a requires it (and that code cannot be easily avoided). */ EXTERN(abort) -EXTERN(_bootdelay_signature) EXTERN(board_get_manifest) SECTIONS @@ -140,12 +139,6 @@ SECTIONS _stext = ABSOLUTE(.); *(.vectors) . = ALIGN(32); - /* - This signature provides the bootloader with a way to delay booting - */ - _bootdelay_signature = ABSOLUTE(.); - FILL(0xffecc2925d7d05c5) - . += 8; *(.text .text.*) *(.fixup) *(.gnu.warning) diff --git a/boards/zeroone/x6/pwm_voltage/CMakeLists.txt b/boards/zeroone/x6/pwm_voltage/CMakeLists.txt index 6db1696208..3e4501e0f8 100644 --- a/boards/zeroone/x6/pwm_voltage/CMakeLists.txt +++ b/boards/zeroone/x6/pwm_voltage/CMakeLists.txt @@ -37,6 +37,8 @@ px4_add_module( SRCS pwm_voltage.cpp + MODULE_CONFIG + parameters.yaml DEPENDS px4_work_queue ) diff --git a/boards/zeroone/x6/pwm_voltage/parameters.c b/boards/zeroone/x6/pwm_voltage/parameters.c deleted file mode 100644 index 728bcc7a55..0000000000 --- a/boards/zeroone/x6/pwm_voltage/parameters.c +++ /dev/null @@ -1,43 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2025 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Control PWM output voltage - * - * @value 0 3.3V - * @value 1 5.0V - * - * @reboot_required true - * @group PWM Outputs - */ -PARAM_DEFINE_INT32(PWM_VOLT_SEL, 0); diff --git a/boards/zeroone/x6/pwm_voltage/parameters.yaml b/boards/zeroone/x6/pwm_voltage/parameters.yaml new file mode 100644 index 0000000000..82a36ce833 --- /dev/null +++ b/boards/zeroone/x6/pwm_voltage/parameters.yaml @@ -0,0 +1,13 @@ +module_name: pwm_voltage +parameters: +- group: PWM Outputs + definitions: + PWM_VOLT_SEL: + description: + short: Control PWM output voltage + type: enum + values: + 0: 3.3V + 1: 5.0V + default: 0 + reboot_required: true diff --git a/boards/zeroone/x6/src/board_config.h b/boards/zeroone/x6/src/board_config.h index 114c3ce101..f26740e790 100644 --- a/boards/zeroone/x6/src/board_config.h +++ b/boards/zeroone/x6/src/board_config.h @@ -226,8 +226,10 @@ /* HEATER * PWM in future */ -#define GPIO_HEATER_OUTPUT /* PB10 T2CH3 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTB|GPIO_PIN10) -#define HEATER_OUTPUT_EN(on_true) px4_arch_gpiowrite(GPIO_HEATER_OUTPUT, (on_true)) +#define GPIO_HEATER_OUTPUT +#define HEATER_NUM 1 +#define GPIO_HEATER1_OUTPUT /* PB10 T2CH3 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTB|GPIO_PIN10) +#define HEATER1_OUTPUT_EN(on_true) px4_arch_gpiowrite(GPIO_HEATER1_OUTPUT, (on_true)) /* PE6 is nARMED * The GPIO will be set as input while not armed HW will have external HW Pull UP. @@ -265,7 +267,7 @@ #define GPIO_VDD_5V_PERIPH_nOC /* PE15 */ (GPIO_INPUT |GPIO_FLOAT|GPIO_PORTE|GPIO_PIN15) #define GPIO_VDD_5V_HIPOWER_nEN /* PG10 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_SET|GPIO_PORTG|GPIO_PIN10) #define GPIO_VDD_5V_HIPOWER_nOC /* PF13 */ (GPIO_INPUT |GPIO_FLOAT|GPIO_PORTF|GPIO_PIN13) -#define GPIO_VDD_3V3_SENSORS4_EN /* PG8 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTG|GPIO_PIN8) +#define GPIO_VDD_3V3_SENSORS_EN /* PG8 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTG|GPIO_PIN8) #define GPIO_VDD_3V3_SPEKTRUM_POWER_EN /* PH2 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTH|GPIO_PIN2) #define GPIO_VDD_3V3_SD_CARD_EN /* PC13 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTC|GPIO_PIN13) @@ -287,7 +289,7 @@ #define VDD_5V_PERIPH_EN(on_true) px4_arch_gpiowrite(GPIO_VDD_5V_PERIPH_nEN, !(on_true)) #define VDD_5V_HIPOWER_EN(on_true) px4_arch_gpiowrite(GPIO_VDD_5V_HIPOWER_nEN, !(on_true)) -#define VDD_3V3_SENSORS4_EN(on_true) px4_arch_gpiowrite(GPIO_VDD_3V3_SENSORS4_EN, (on_true)) +#define VDD_3V3_SENSORS_EN(on_true) px4_arch_gpiowrite(GPIO_VDD_3V3_SENSORS_EN, (on_true)) #define VDD_3V3_SPEKTRUM_POWER_EN(on_true) px4_arch_gpiowrite(GPIO_VDD_3V3_SPEKTRUM_POWER_EN, (on_true)) #define READ_VDD_3V3_SPEKTRUM_POWER_EN() px4_arch_gpioread(GPIO_VDD_3V3_SPEKTRUM_POWER_EN) #define VDD_3V3_SD_CARD_EN(on_true) px4_arch_gpiowrite(GPIO_VDD_3V3_SD_CARD_EN, (on_true)) @@ -442,7 +444,7 @@ GPIO_CAN1_RX, \ GPIO_CAN2_TX, \ GPIO_CAN2_RX, \ - GPIO_HEATER_OUTPUT, \ + GPIO_HEATER1_OUTPUT, \ GPIO_nPOWER_IN_A, \ GPIO_nPOWER_IN_B, \ GPIO_nPOWER_IN_C, \ @@ -450,7 +452,7 @@ GPIO_VDD_5V_PERIPH_nOC, \ GPIO_VDD_5V_HIPOWER_nEN, \ GPIO_VDD_5V_HIPOWER_nOC, \ - GPIO_VDD_3V3_SENSORS4_EN, \ + GPIO_VDD_3V3_SENSORS_EN, \ GPIO_VDD_3V3_SPEKTRUM_POWER_EN, \ GPIO_VDD_3V3_SD_CARD_EN, \ GPIO_PD15, \ diff --git a/boards/zeroone/x6/src/hw_config.h b/boards/zeroone/x6/src/hw_config.h index 1873df6dc1..fd0b45627c 100644 --- a/boards/zeroone/x6/src/hw_config.h +++ b/boards/zeroone/x6/src/hw_config.h @@ -28,8 +28,6 @@ * INTERFACE_USART 1 - (Optional) Scan and use the Serial interface for bootloading * USBDEVICESTRING "PX4 BL FMU v2.x" - USB id string * USBPRODUCTID 0x0011 - PID Should match defconfig - * BOOT_DELAY_ADDRESS 0x000001a0 - (Optional) From the linker script from Linker Script to get a custom - * delay provided by an APP FW * BOARD_TYPE 9 - Must match .prototype boad_id * _FLASH_KBYTES (*(uint16_t *)0x1fff7a22) - Run time flash size detection * BOARD_FLASH_SECTORS ((_FLASH_KBYTES == 0x400) ? 11 : 23) - Run time determine the physical last sector @@ -70,7 +68,6 @@ //#define USE_VBUS_PULL_DOWN #define INTERFACE_USART 1 #define INTERFACE_USART_CONFIG "/dev/ttyS0,1500000" -#define BOOT_DELAY_ADDRESS 0x000001a0 #define BOARD_TYPE 5600 #define _FLASH_KBYTES (*(uint32_t *)0x1FF1E880) #define BOARD_FLASH_SECTORS (15) diff --git a/boards/zeroone/x6/src/init.c b/boards/zeroone/x6/src/init.c index 6320b5580e..fcd2135296 100644 --- a/boards/zeroone/x6/src/init.c +++ b/boards/zeroone/x6/src/init.c @@ -107,7 +107,7 @@ __EXPORT void board_peripheral_reset(int ms) VDD_5V_PERIPH_EN(false); board_control_spi_sensors_power(false, 0xffff); - VDD_3V3_SENSORS4_EN(false); + VDD_3V3_SENSORS_EN(false); bool last = READ_VDD_3V3_SPEKTRUM_POWER_EN(); /* Keep Spektum on to discharge rail*/ @@ -122,7 +122,7 @@ __EXPORT void board_peripheral_reset(int ms) /* switch the peripheral rail back on */ VDD_3V3_SPEKTRUM_POWER_EN(last); board_control_spi_sensors_power(true, 0xffff); - VDD_3V3_SENSORS4_EN(true); + VDD_3V3_SENSORS_EN(true); VDD_5V_PERIPH_EN(true); } @@ -219,7 +219,7 @@ __EXPORT int board_app_initialize(uintptr_t arg) VDD_3V3_SD_CARD_EN(true); VDD_5V_PERIPH_EN(true); VDD_5V_HIPOWER_EN(true); - VDD_3V3_SENSORS4_EN(true); + VDD_3V3_SENSORS_EN(true); VDD_3V3_SPEKTRUM_POWER_EN(true); /* Need hrt running before using the ADC */ diff --git a/cmake/coverage.cmake b/cmake/coverage.cmake index e5513f896e..bbc1d423cf 100644 --- a/cmake/coverage.cmake +++ b/cmake/coverage.cmake @@ -52,10 +52,10 @@ endif() # add code coverage build type if (("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") OR ("${CMAKE_CXX_COMPILER_ID}" MATCHES "AppleClang")) - set(CMAKE_C_FLAGS_COVERAGE "--coverage -ftest-coverage -fdiagnostics-absolute-paths -O0 -fprofile-arcs -fno-inline-functions" + set(CMAKE_C_FLAGS_COVERAGE "--coverage -ftest-coverage -fdiagnostics-absolute-paths ${PX4_DEBUG_OPT_LEVEL} -fprofile-arcs -fno-inline-functions" CACHE STRING "Flags used by the C compiler during coverage builds" FORCE) - set(CMAKE_CXX_FLAGS_COVERAGE "--coverage -ftest-coverage -fdiagnostics-absolute-paths -O0-fprofile-arcs -fno-inline-functions -fno-elide-constructors" + set(CMAKE_CXX_FLAGS_COVERAGE "--coverage -ftest-coverage -fdiagnostics-absolute-paths ${PX4_DEBUG_OPT_LEVEL} -fprofile-arcs -fno-inline-functions -fno-elide-constructors" CACHE STRING "Flags used by the C++ compiler during coverage builds" FORCE) set(CMAKE_EXE_LINKER_FLAGS_COVERAGE "-ftest-coverage -fdiagnostics-absolute-paths" @@ -63,11 +63,11 @@ if (("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") OR ("${CMAKE_CXX_COMPILER_ID}" else() # Add -fprofile-abs-path for GCC v8/9 later on - set(CMAKE_C_FLAGS_COVERAGE "--coverage -ftest-coverage -fprofile-arcs -O0 -fno-default-inline -fno-inline" + set(CMAKE_C_FLAGS_COVERAGE "--coverage -ftest-coverage -fprofile-arcs ${PX4_DEBUG_OPT_LEVEL} -fno-default-inline -fno-inline" CACHE STRING "Flags used by the C compiler during coverage builds" FORCE) # Add -fprofile-abs-path for GCC v8/9 later on - set(CMAKE_CXX_FLAGS_COVERAGE "--coverage -ftest-coverage -fprofile-arcs -O0 -fno-default-inline -fno-inline -fno-elide-constructors" + set(CMAKE_CXX_FLAGS_COVERAGE "--coverage -ftest-coverage -fprofile-arcs ${PX4_DEBUG_OPT_LEVEL} -fno-default-inline -fno-inline -fno-elide-constructors" CACHE STRING "Flags used by the C++ compiler during coverage builds" FORCE) set(CMAKE_EXE_LINKER_FLAGS_COVERAGE "--coverage -ftest-coverage -lgcov" diff --git a/cmake/package.cmake b/cmake/package.cmake index ecc168a92c..dbbded6caf 100644 --- a/cmake/package.cmake +++ b/cmake/package.cmake @@ -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,34 +59,70 @@ 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-harmonic, gstreamer1.0-plugins-base, gstreamer1.0-plugins-good, gstreamer1.0-plugins-bad, gstreamer1.0-plugins-ugly, gstreamer1.0-libav") + 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_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() set(CPACK_GENERATOR "ZIP") endif() +# Board-specific overrides (loaded after defaults are set) +if(EXISTS "${PX4_BOARD_DIR}/cmake/package.cmake") + include(${PX4_BOARD_DIR}/cmake/package.cmake) +endif() + include(CPack) diff --git a/cmake/px4_add_gtest.cmake b/cmake/px4_add_gtest.cmake index 7b4d1bc4c9..2cb605e061 100644 --- a/cmake/px4_add_gtest.cmake +++ b/cmake/px4_add_gtest.cmake @@ -31,6 +31,15 @@ # ############################################################################ +# Attach only matching test binaries to `test_results` when TESTFILTER is set. +# `ctest -R` filters execution only; without this helper the build still +# compiles every gtest target before running the filtered subset. +function(add_filtered_test_dependencies TESTNAME) + if(NOT TESTFILTER OR "${TESTNAME}" MATCHES "${TESTFILTER}") + add_dependencies(test_results ${TESTNAME}) + endif() +endfunction() + #============================================================================= # # px4_add_unit_gtest @@ -74,7 +83,7 @@ function(px4_add_unit_gtest) WORKING_DIRECTORY ${PX4_BINARY_DIR}) # attach it to the unit test target - add_dependencies(test_results ${TESTNAME}) + add_filtered_test_dependencies(${TESTNAME}) endif() endfunction() @@ -133,6 +142,6 @@ function(px4_add_functional_gtest) COMMAND ${PX4_BINARY_DIR}/${TESTNAME}) # attach it to the unit test target - add_dependencies(test_results ${TESTNAME}) + add_filtered_test_dependencies(${TESTNAME}) endif() endfunction() diff --git a/boards/xc-fly/xc-slim/src/CMakeLists.txt b/cmake/sbom.cmake similarity index 55% rename from boards/xc-fly/xc-slim/src/CMakeLists.txt rename to cmake/sbom.cmake index 798c524347..c259748db0 100644 --- a/boards/xc-fly/xc-slim/src/CMakeLists.txt +++ b/cmake/sbom.cmake @@ -1,6 +1,6 @@ ############################################################################ # -# Copyright (c) 2021 PX4 Development Team. All rights reserved. +# Copyright (c) 2026 PX4 Development Team. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -30,40 +30,43 @@ # POSSIBILITY OF SUCH DAMAGE. # ############################################################################ -if("${PX4_BOARD_LABEL}" STREQUAL "bootloader") - add_library(drivers_board - bootloader_main.c - usb.c - ) - target_link_libraries(drivers_board - PRIVATE - nuttx_arch - nuttx_drivers - bootloader - ) - target_include_directories(drivers_board PRIVATE ${PX4_SOURCE_DIR}/platforms/nuttx/src/bootloader/common) -else() - add_library(drivers_board - i2c.cpp - init.c - led.c - sdio.c - spi.cpp - timer_config.cpp - usb.c - mtd.cpp - ) - # add_dependencies(drivers_board arch_board_hw_info) +# SBOM - SPDX 2.3 JSON Software Bill of Materials generation + +option(GENERATE_SBOM "Generate SPDX 2.3 SBOM" ON) + +if(DEFINED ENV{PX4_SBOM_DISABLE}) + set(GENERATE_SBOM OFF) +endif() + +if(GENERATE_SBOM) + + # Write board-specific module list for the SBOM generator + set(sbom_module_list_file "${PX4_BINARY_DIR}/config_module_list.txt") + get_property(module_list GLOBAL PROPERTY PX4_MODULE_PATHS) + string(REPLACE ";" "\n" module_list_content "${module_list}") + file(GENERATE OUTPUT ${sbom_module_list_file} CONTENT "${module_list_content}\n") + + set(sbom_output "${PX4_BINARY_DIR}/${PX4_CONFIG}.sbom.spdx.json") + + add_custom_command( + OUTPUT ${sbom_output} + COMMAND ${PYTHON_EXECUTABLE} ${PX4_SOURCE_DIR}/Tools/ci/generate_sbom.py + --source-dir ${PX4_SOURCE_DIR} + --board ${PX4_CONFIG} + --modules-file ${sbom_module_list_file} + --compiler ${CMAKE_C_COMPILER} + --platform ${PX4_PLATFORM} + --output ${sbom_output} + DEPENDS + ${PX4_SOURCE_DIR}/Tools/ci/generate_sbom.py + ${PX4_SOURCE_DIR}/Tools/ci/license-overrides.yaml + ${PX4_SOURCE_DIR}/.gitmodules + ${PX4_SOURCE_DIR}/Tools/setup/requirements.txt + ${sbom_module_list_file} + COMMENT "Generating SPDX SBOM for ${PX4_CONFIG}" + ) + + add_custom_target(sbom ALL DEPENDS ${sbom_output}) - target_link_libraries(drivers_board - PRIVATE - arch_io_pins - arch_spi - arch_board_hw_info - drivers__led - nuttx_arch - nuttx_drivers - px4_layer - ) endif() diff --git a/docs/.vitepress/theme/style.css b/docs/.vitepress/theme/style.css index 161b1f383b..a155ff478f 100644 --- a/docs/.vitepress/theme/style.css +++ b/docs/.vitepress/theme/style.css @@ -162,6 +162,15 @@ } +/** + * Custom style to hide search on the ome page + * -------------------------------------------------------------------------- */ + +.home #local-search { + display: none; + } + + /** * Custom styles for wide pages * -------------------------------------------------------------------------- */ diff --git a/docs/_link_checker_sc/ignore_errors.json b/docs/_link_checker_sc/ignore_errors.json index 64705a503d..6819c0dc73 100644 --- a/docs/_link_checker_sc/ignore_errors.json +++ b/docs/_link_checker_sc/ignore_errors.json @@ -565,6 +565,11 @@ "fileRelativeToRoot": "assets\\simulation\\gazebo_classic\\gazebo_offboard.webm", "hideReason": "Its fine" }, + { + "type": "OrphanedImage", + "fileRelativeToRoot": "assets\\site\\px4_logo.svg", + "hideReason": "Used in the project root README.md, outside the docs folder" + }, { "type": "InternalLinkToHTML", "fileRelativeToRoot": "en\\flight_modes\\README.md", @@ -1010,5 +1015,717 @@ "text": "PX4 v1.13 Docs" }, "hideReason": "intended" + }, + { + "link": { + "url": "https://logs.px4.io/", + "text": "" + }, + "hideReason": "405 Method Not Allowed - works in browser" + }, + { + "link": { + "url": "https://www.st.com/en/development-tools/stsw-stm32080.html", + "text": "" + }, + "hideReason": "timeout - bot block", + "expiry": "2026-08-26" + }, + { + "link": { + "url": "https://www.molex.com/en-us/products/part-detail/5024430670", + "text": "" + }, + "hideReason": "timeout - bot block", + "expiry": "2026-08-26" + }, + { + "link": { + "url": "https://www.st.com/en/development-tools/stlink-v3minie.html", + "text": "" + }, + "hideReason": "timeout - bot block", + "expiry": "2026-08-26" + }, + { + "link": { + "url": "https://www.st.com/en/development-tools/stsw-link004.html", + "text": "" + }, + "hideReason": "timeout - bot block", + "expiry": "2026-08-26" + }, + { + "link": { + "url": "https://www.st.com/en/mems-and-sensors/iis2mdc.html", + "text": "" + }, + "hideReason": "timeout - bot block", + "expiry": "2026-08-26" + }, + { + "link": { + "url": "https://www.st.com/en/positioning/teseo-liv4f.html", + "text": "" + }, + "hideReason": "timeout - bot block", + "expiry": "2026-08-26" + }, + { + "link": { + "url": "https://www.st.com/en/development-tools/st-link-v2.html", + "text": "" + }, + "hideReason": "timeout - bot block", + "expiry": "2026-08-26" + }, + { + "link": { + "url": "https://www.st.com/en/microcontrollers-microprocessors/stm32f0-series.html", + "text": "" + }, + "hideReason": "timeout - bot block", + "expiry": "2026-08-26" + }, + { + "link": { + "url": "https://www.st.com/en/microcontrollers-microprocessors/stm32h743ii.html", + "text": "" + }, + "hideReason": "timeout - bot block", + "expiry": "2026-08-26" + }, + { + "link": { + "url": "https://www.st.com/en/microcontrollers-microprocessors/stm32f427-437.html", + "text": "" + }, + "hideReason": "timeout - bot block", + "expiry": "2026-08-26" + }, + { + "link": { + "url": "https://www.st.com/en/microcontrollers-microprocessors/stm32f745vg.html", + "text": "" + }, + "hideReason": "timeout - bot block", + "expiry": "2026-08-26" + }, + { + "link": { + "url": "https://www.st.com/en/microcontrollers-microprocessors/stm32f765ii.html", + "text": "" + }, + "hideReason": "timeout - bot block", + "expiry": "2026-08-26" + }, + { + "link": { + "url": "https://www.st.com/en/microcontrollers/stm32f405rg.html", + "text": "" + }, + "hideReason": "timeout - bot block", + "expiry": "2026-08-26" + }, + { + "link": { + "url": "https://www.st.com/en/microcontrollers-microprocessors/stm32h750vb.html", + "text": "" + }, + "hideReason": "timeout - bot block", + "expiry": "2026-08-26" + }, + { + "link": { + "url": "https://review.px4.io/plot_app?log=6a1a279c-1df8-4736-9f55-70ec16656d1e", + "text": "" + }, + "hideReason": "timeout - bot block", + "expiry": "2026-08-26" + }, + { + "link": { + "url": "https://www.skypull.technology/", + "text": "" + }, + "hideReason": "timeout - bot block", + "expiry": "2026-08-26" + }, + { + "link": { + "url": "https://www.st.com/en/microcontrollers-microprocessors/stm32-32-bit-arm-cortex-mcus.html", + "text": "" + }, + "hideReason": "timeout - bot block", + "expiry": "2026-08-26" + }, + { + "link": { + "url": "https://www.te.com/usa-en/product-CAT-BLPS0003.html", + "text": "" + }, + "hideReason": "timeout - bot block", + "expiry": "2026-08-26" + }, + { + "link": { + "url": "https://wiki.flightgear.org/Flight_Dynamics_Model", + "text": "" + }, + "hideReason": "timeout - bot block", + "expiry": "2026-08-26" + }, + { + "link": { + "url": "https://wiki.flightgear.org/Howto:Install_Flightgear_from_a_PPA", + "text": "" + }, + "hideReason": "timeout - bot block", + "expiry": "2026-08-26" + }, + { + "link": { + "url": "https://wiki.flightgear.org/Command_line_options", + "text": "" + }, + "hideReason": "timeout - bot block", + "expiry": "2026-08-26" + }, + { + "link": { + "url": "https://wiki.flightgear.org/Suggested_airports", + "text": "" + }, + "hideReason": "timeout - bot block", + "expiry": "2026-08-26" + }, + { + "link": { + "url": "https://wiki.flightgear.org/Howto:Multiplayer", + "text": "" + }, + "hideReason": "timeout - bot block", + "expiry": "2026-08-26" + }, + { + "link": { + "url": "https://wiki.flightgear.org/Property_tree", + "text": "" + }, + "hideReason": "timeout - bot block", + "expiry": "2026-08-26" + }, + { + "link": { + "url": "https://www.nxp.com/", + "text": "" + }, + "hideReason": "timeout - bot block", + "expiry": "2026-08-26" + }, + { + "link": { + "url": "https://www.hovergames.com/", + "text": "" + }, + "hideReason": "timeout - bot block", + "expiry": "2026-08-26" + }, + { + "link": { + "url": "https://senterasensors.com/phx/", + "text": "" + }, + "hideReason": "cert error in Node.js — page OK in browser", + "expiry": "2027-03-02" + }, + { + "link": { + "url": "https://app.gazebosim.org/PX4", + "text": "" + }, + "hideReason": "reports 404 to automated requests but tested good in browser — likely SPA client-side routing or bot detection", + "expiry": "2027-03-02" + }, + { + "link": { + "url": "https://duo3d.com/product/duo-minilx-lv1", + "text": "" + }, + "hideReason": "certificate error", + "expiry": "2027-03-03" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\airframes\\airframe_reference.md", + "link": { + "url": "https://docs.px4.io/main/en/frames_multicopter/holybro_qav250_pixhawk4_mini", + "text": "HolyBro QAV250" + }, + "hideReason": "Link from source" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\airframes\\airframe_reference.md", + "link": { + "url": "https://docs.px4.io/main/en/complete_vehicles_rover/aion_r1", + "text": "Aion Robotics R1 UGV" + }, + "hideReason": "Link from airframe data" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\complete_vehicles_mc\\px4_vision_kit.md", + "link": { + "url": "https://docs.px4.io/v1.13/en/complete_vehicles/px4_vision_kit#what-is-inside", + "text": "PX4 v1.13 Docs here" + }, + "hideReason": "Expected link to old version" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\computer_vision\\path_planning_interface.md", + "link": { + "url": "https://docs.px4.io/v1.14/en/computer_vision/path_planning_interface", + "text": "PX4 v1.14 docs" + }, + "hideReason": "Expected link to old version" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\concept\\control_allocation.md", + "link": { + "url": "https://docs.px4.io/v1.13/en/concept/mixing", + "text": "Mixing & Actuators" + }, + "hideReason": "Expected link to old version" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\concept\\control_allocation.md", + "link": { + "url": "https://docs.px4.io/v1.13/en/concept/geometry_files", + "text": "Geometry Files" + }, + "hideReason": "Expected link to old version" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\concept\\control_allocation.md", + "link": { + "url": "https://docs.px4.io/v1.13/en/dev_airframes/adding_a_new_frame", + "text": "Adding a New Airframe Configuration" + }, + "hideReason": "Expected link to old version" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\contribute\\dev_call.md", + "link": { + "url": "https://docs.px4.io/main/en/contribute/dev_call", + "text": "See the latest version" + }, + "hideReason": "Expected link to newest version" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\contribute\\support.md", + "link": { + "url": "https://docs.px4.io/main/en/contribute/support", + "text": "See the latest version" + }, + "hideReason": "Expected link to newest version" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\dev_log\\log_encryption.md", + "link": { + "url": "https://docs.px4.io/v1.15/en/dev_log/log_encryption", + "text": "Log Encryption (PX4 v1.15)" + }, + "hideReason": "Expected link to old version" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\flight_controller\\autopilot_discontinued.md", + "link": { + "url": "https://docs.px4.io/v1.13/en/flight_controller/dropix", + "text": "PX4 v1.13" + }, + "hideReason": "Expected link to old version" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\flight_controller\\autopilot_discontinued.md", + "link": { + "url": "https://docs.px4.io/v1.15/en/flight_controller/pixhawk3_pro", + "text": "PX4 v1.15" + }, + "hideReason": "Expected link to old version" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\flight_controller\\autopilot_discontinued.md", + "link": { + "url": "https://docs.px4.io/v1.15/en/flight_controller/omnibus_f4_sd", + "text": "PX4 v1.15" + }, + "hideReason": "Expected link to old version" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\flight_controller\\autopilot_discontinued.md", + "link": { + "url": "https://docs.px4.io/v1.16/en/flight_controller/cuav_x7", + "text": "PX4 v1.16" + }, + "hideReason": "Expected link to old version" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\flight_controller\\autopilot_discontinued.md", + "link": { + "url": "https://docs.px4.io/v1.16/en/flight_controller/cuav_v5", + "text": "PX4 v1.16" + }, + "hideReason": "Expected link to old version" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\flight_controller\\autopilot_discontinued.md", + "link": { + "url": "https://docs.px4.io/v1.15/en/flight_controller/pixhack_v3", + "text": "PX4 v1.15" + }, + "hideReason": "Expected link to old version" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\flight_controller\\autopilot_discontinued.md", + "link": { + "url": "https://docs.px4.io/v1.11/en/flight_controller/ocpoc_zynq#aerotenna-ocpoc-zynq-mini-flight-controller", + "text": "PX4v1.11" + }, + "hideReason": "Expected link to old version" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\flight_controller\\autopilot_discontinued.md", + "link": { + "url": "https://docs.px4.io/v1.16/en/flight_controller/pixhawk4_mini", + "text": "PX4 v1.16" + }, + "hideReason": "Expected link to old version" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\flight_controller\\autopilot_discontinued.md", + "link": { + "url": "https://docs.px4.io/v1.17/en/flight_controller/kakutef7", + "text": "PX4 v1.17" + }, + "hideReason": "Expected link to old version" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\flight_controller\\autopilot_discontinued.md", + "link": { + "url": "https://docs.px4.io/v1.16/en/flight_controller/pixhawk_mini", + "text": "PX4 v1.16" + }, + "hideReason": "Expected link to old version" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\flight_controller\\autopilot_discontinued.md", + "link": { + "url": "https://docs.px4.io/v1.16/en/flight_controller/pixfalcon", + "text": "PX4 v1.16" + }, + "hideReason": "Expected link to old version" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\flight_controller\\autopilot_discontinued.md", + "link": { + "url": "https://docs.px4.io/v1.16/en/flight_controller/holybro_pix32", + "text": "PX4 v1.16" + }, + "hideReason": "Expected link to old version" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\flight_controller\\autopilot_discontinued.md", + "link": { + "url": "https://docs.px4.io/v1.16/en/flight_controller/modalai_voxl_flight", + "text": "PX4 v1.16" + }, + "hideReason": "Expected link to old version" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\flight_controller\\autopilot_discontinued.md", + "link": { + "url": "https://docs.px4.io/v1.11/en/flight_controller/modalai_fc_v1", + "text": "PX4 v1.11" + }, + "hideReason": "Expected link to old version" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\flight_controller\\autopilot_discontinued.md", + "link": { + "url": "https://docs.px4.io/v1.16/en/flight_controller/mro_x2.1", + "text": "PX4 v1.16" + }, + "hideReason": "Expected link to old version" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\flight_controller\\autopilot_discontinued.md", + "link": { + "url": "https://docs.px4.io/v1.15/en/flight_controller/auav_x2", + "text": "PX4 v1.15" + }, + "hideReason": "Expected link to old version" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\flight_controller\\autopilot_discontinued.md", + "link": { + "url": "https://docs.px4.io/v1.15/en/flight_controller/nxp_rddrone_fmuk66", + "text": "PX4 v1.15 docs" + }, + "hideReason": "Expected link to old version" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\flight_controller\\autopilot_discontinued.md", + "link": { + "url": "https://docs.px4.io/v1.15/en/flight_controller/pixhawk", + "text": "PX4 v1.15" + }, + "hideReason": "Expected link to old version" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\flight_controller\\autopilot_discontinued.md", + "link": { + "url": "https://docs.px4.io/v1.15/en/complete_vehicles_mc/crazyflie2", + "text": "PX4 v1.15" + }, + "hideReason": "Expected link to old version" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\flight_controller\\autopilot_discontinued.md", + "link": { + "url": "https://docs.px4.io/v1.14/en/complete_vehicles/betafpv_beta75x#betafpv-beta75x-2s-brushless-whoop", + "text": "PX4 v1.14" + }, + "hideReason": "Expected link to old version" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\flight_controller\\autopilot_discontinued.md", + "link": { + "url": "https://docs.px4.io/v1.12/en/complete_vehicles/intel_aero", + "text": "PX4 v1.12" + }, + "hideReason": "Expected link to old version" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\flight_controller\\autopilot_discontinued.md", + "link": { + "url": "https://docs.px4.io/v1.11/en/flight_controller/snapdragon_flight", + "text": "PX4 v1.11" + }, + "hideReason": "Expected link to old version" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\flight_controller\\pixhawk6c_mini.md", + "link": { + "url": "https://docs.px4.io/v1.16/en/assembly/quick_start_pixhawk4_mini", + "text": "Pixhawk 4 Mini Wiring Quick Start" + }, + "hideReason": "Expected link to old version" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\frames_multicopter\\qav_r_5_kiss_esc_racer.md", + "link": { + "url": "https://docs.px4.io/v1.16/en/flight_controller/pixhawk_mini#connector-pin-assignments-pin-outs", + "text": "3DR Pixhawk Mini user manual" + }, + "hideReason": "Expected link to old version" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\gps_compass\\rtk_gps_drotek_xl.md", + "link": { + "url": "https://docs.px4.io/v1.13/en/gps_compass/rtk_gps_drotek_xl", + "text": "PX4 v1.13 here" + }, + "hideReason": "Expected link to old version" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\gps_compass\\rtk_gps_hex_hereplus.md", + "link": { + "url": "https://docs.px4.io/v1.11/en/gps_compass/rtk_gps_hex_hereplus", + "text": "PX4v1.11 docs" + }, + "hideReason": "Expected link to old version" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\middleware\\micrortps.md", + "link": { + "url": "https://docs.px4.io/v1.13/en/middleware/micrortps#rtps-dds-interface-px4-fast-rtps-dds-bridge", + "text": "Fast-RTPS Bridge" + }, + "hideReason": "Expected link to old version" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\middleware\\uxrce_dds.md", + "link": { + "url": "https://docs.px4.io/v1.13/en/middleware/micrortps#rtps-dds-interface-px4-fast-rtps-dds-bridge", + "text": "Fast-RTPS Bridge" + }, + "hideReason": "Expected link to old version" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\middleware\\uxrce_dds.md", + "link": { + "url": "https://docs.px4.io/v1.13/en/ros/ros2_comm", + "text": "ROS 2 applications written for PX4 v1.13" + }, + "hideReason": "Expected link to old version" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\middleware\\uxrce_dds.md", + "link": { + "url": "https://docs.px4.io/v1.13/en/middleware/micrortps#agent-in-an-offboard-fast-dds-interface-ros-independent", + "text": "directly" + }, + "hideReason": "Expected link to old version" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\middleware\\uxrce_dds.md", + "link": { + "url": "https://docs.px4.io/v1.13/en/dev_setup/fast-dds-installation", + "text": "Fast DDS Installation" + }, + "hideReason": "Expected link to old version" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\middleware\\uxrce_dds.md", + "link": { + "url": "https://docs.px4.io/v1.13/en/middleware/micrortps#agent-in-an-offboard-fast-dds-interface-ros-independent", + "text": "Fast DDS Interface ROS-Independent" + }, + "hideReason": "Expected link to old version" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\power_module\\holybro_pm06_pixhawk4mini_power_module.md", + "link": { + "url": "https://docs.px4.io/v1.16/en/assembly/quick_start_pixhawk4_mini#power", + "text": "Pixhawk 4 Mini" + }, + "hideReason": "Expected link to old version" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\releases\\1.14.md", + "link": { + "url": "https://docs.px4.io/v1.13/en/simulation/ignition_gazebo", + "text": "Ignition Gazebo" + }, + "hideReason": "Expected link to old version" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\releases\\1.14.md", + "link": { + "url": "https://docs.px4.io/v1.13/en/simulation/gazebo", + "text": "Gazebo" + }, + "hideReason": "Expected link to old version" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\releases\\1.14.md", + "link": { + "url": "https://docs.px4.io/v1.13/en/middleware/micrortps", + "text": "Fast-RTPS" + }, + "hideReason": "Expected link to old version" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\releases\\1.17.md", + "link": { + "url": "https://docs.px4.io/main/en/releases/main", + "text": "See the latest version" + }, + "hideReason": "Link to latest" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\releases\\main.md", + "link": { + "url": "https://docs.px4.io/main/en/releases/main", + "text": "See the latest version" + }, + "hideReason": "Link to latest" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\robotics\\index.md", + "link": { + "url": "https://docs.px4.io/v1.12/en/robotics/dronekit", + "text": "PX4 v1.12 > DroneKit" + }, + "hideReason": "Expected link to old version" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\ros2\\user_guide.md", + "link": { + "url": "https://docs.px4.io/v1.13/en/ros/ros2_comm", + "text": "PX4 v1.13 Docs" + }, + "hideReason": "Expected link to old version" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\sensor\\px4flow.md", + "link": { + "url": "https://docs.px4.io/v1.13/en/sensor/px4flow", + "text": "Legacy Docs for PX4Flow in v1.13" + }, + "hideReason": "Expected link to old version" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\test_and_ci\\test_flights.md", + "link": { + "url": "https://docs.px4.io/main/en/test_and_ci/test_flights", + "text": "See the latest version" + }, + "hideReason": "Expected link to old version" + }, + { + "type": "OrphanedImage", + "fileRelativeToRoot": "assets\\diagrams\\SIH_diagram.png", + "hideReason": "" } ] diff --git a/docs/assets/airframes/multicopter/amovlab_f410/amovlabf410_drone_v1.15.4.params b/docs/assets/airframes/multicopter/amovlab_f410/amovlabf410_drone_v1.15.4.params index 0b19f32c09..dbcc2af067 100644 --- a/docs/assets/airframes/multicopter/amovlab_f410/amovlabf410_drone_v1.15.4.params +++ b/docs/assets/airframes/multicopter/amovlab_f410/amovlabf410_drone_v1.15.4.params @@ -2,7 +2,7 @@ # # Stack: PX4 Pro # Vehicle: Amovlab F410 -# Version: 1.15.4 +# Version: 1.15.4 # Git Revision: 99c40407ff000000 # # Vehicle-Id Component-Id Name Value Type @@ -284,7 +284,6 @@ 1 1 COM_ARM_MAG_STR 2 6 1 1 COM_ARM_MIS_REQ 0 6 1 1 COM_ARM_ODID 0 6 -1 1 COM_ARM_SDCARD 1 6 1 1 COM_ARM_SWISBTN 0 6 1 1 COM_ARM_WO_GPS 1 6 1 1 COM_CPU_MAX 95.000000000000000000 9 @@ -301,19 +300,12 @@ 1 1 COM_FLTMODE5 -1 6 1 1 COM_FLTMODE6 8 6 1 1 COM_FLTT_LOW_ACT 3 6 -1 1 COM_FLT_PROFILE 0 6 1 1 COM_FLT_TIME_MAX -1 6 1 1 COM_FORCE_SAFETY 0 6 1 1 COM_HLDL_LOSS_T 120 6 -1 1 COM_HLDL_REG_T 0 6 1 1 COM_HOME_EN 1 6 1 1 COM_HOME_IN_AIR 0 6 -1 1 COM_IMB_PROP_ACT 0 6 -1 1 COM_KILL_DISARM 5.000000000000000000 9 -1 1 COM_LKDOWN_TKO 3.000000000000000000 9 1 1 COM_LOW_BAT_ACT 0 6 -1 1 COM_MOT_TEST_EN 1 6 -1 1 COM_OBC_LOSS_T 5.000000000000000000 9 1 1 COM_OBL_RC_ACT 0 6 1 1 COM_OBS_AVOID 0 6 1 1 COM_OF_LOSS_T 1.000000000000000000 9 @@ -330,7 +322,6 @@ 1 1 COM_RC_OVERRIDE 1 6 1 1 COM_RC_STICK_OV 30.000000000000000000 9 1 1 COM_SPOOLUP_TIME 1.000000000000000000 9 -1 1 COM_TAKEOFF_ACT 0 6 1 1 COM_THROW_EN 0 6 1 1 COM_THROW_SPEED 5.000000000000000000 9 1 1 COM_VEL_FS_EVH 1.000000000000000000 9 @@ -479,11 +470,6 @@ 1 1 EKF2_WIND_NSD 0.050000000745058060 9 1 1 EV_TSK_RC_LOSS 0 6 1 1 EV_TSK_STAT_DIS 0 6 -1 1 FD_ACT_EN 1 6 -1 1 FD_ACT_MOT_C2T 2.000000000000000000 9 -1 1 FD_ACT_MOT_THR 0.200000002980232239 9 -1 1 FD_ACT_MOT_TOUT 100 6 -1 1 FD_ESCS_EN 1 6 1 1 FD_EXT_ATS_EN 0 6 1 1 FD_EXT_ATS_TRIG 1900 6 1 1 FD_FAIL_P 60 6 diff --git a/docs/assets/airframes/multicopter/lumenier_qav250_pixhawk_mini/qav250_wiring_image_pixhawk_mini.jpg b/docs/assets/airframes/multicopter/lumenier_qav250_pixhawk_mini/qav250_wiring_image_pixhawk_mini.jpg deleted file mode 100644 index 240f8ea6c0..0000000000 Binary files a/docs/assets/airframes/multicopter/lumenier_qav250_pixhawk_mini/qav250_wiring_image_pixhawk_mini.jpg and /dev/null differ diff --git a/docs/assets/diagrams/px4_fw_attitude_controller_diagram.png b/docs/assets/diagrams/px4_fw_attitude_controller_diagram.png index 143e4bf613..043bf31e9d 100644 Binary files a/docs/assets/diagrams/px4_fw_attitude_controller_diagram.png and b/docs/assets/diagrams/px4_fw_attitude_controller_diagram.png differ diff --git a/docs/assets/flight_controller/auav_x2/auav_x2_airspeed_setup_3.png b/docs/assets/flight_controller/auav_x2/auav_x2_airspeed_setup_3.png deleted file mode 100644 index 4b3fc00a2e..0000000000 Binary files a/docs/assets/flight_controller/auav_x2/auav_x2_airspeed_setup_3.png and /dev/null differ diff --git a/docs/assets/flight_controller/auav_x2/auav_x2_basic_setup_1.png b/docs/assets/flight_controller/auav_x2/auav_x2_basic_setup_1.png deleted file mode 100644 index b6c6ae128d..0000000000 Binary files a/docs/assets/flight_controller/auav_x2/auav_x2_basic_setup_1.png and /dev/null differ diff --git a/docs/assets/flight_controller/auav_x2/auav_x2_basic_setup_2.jpg b/docs/assets/flight_controller/auav_x2/auav_x2_basic_setup_2.jpg deleted file mode 100644 index 4e39084f49..0000000000 Binary files a/docs/assets/flight_controller/auav_x2/auav_x2_basic_setup_2.jpg and /dev/null differ diff --git a/docs/assets/flight_controller/auav_x2/auav_x2_basic_setup_3.png b/docs/assets/flight_controller/auav_x2/auav_x2_basic_setup_3.png deleted file mode 100644 index 016e412fb8..0000000000 Binary files a/docs/assets/flight_controller/auav_x2/auav_x2_basic_setup_3.png and /dev/null differ diff --git a/docs/assets/flight_controller/auav_x2/auavx2_case2.jpg b/docs/assets/flight_controller/auav_x2/auavx2_case2.jpg deleted file mode 100644 index 5dd524d436..0000000000 Binary files a/docs/assets/flight_controller/auav_x2/auavx2_case2.jpg and /dev/null differ diff --git a/docs/assets/flight_controller/corvon_743v1/CORVON743V1_PortsConnection.png b/docs/assets/flight_controller/corvon_743v1/CORVON743V1_PortsConnection.png new file mode 100644 index 0000000000..3eb5530054 Binary files /dev/null and b/docs/assets/flight_controller/corvon_743v1/CORVON743V1_PortsConnection.png differ diff --git a/docs/assets/flight_controller/corvon_743v1/corvon_743v1_bottom.jpg b/docs/assets/flight_controller/corvon_743v1/corvon_743v1_bottom.jpg new file mode 100644 index 0000000000..e02cd6be2c Binary files /dev/null and b/docs/assets/flight_controller/corvon_743v1/corvon_743v1_bottom.jpg differ diff --git a/docs/assets/flight_controller/corvon_743v1/corvon_743v1_top.jpg b/docs/assets/flight_controller/corvon_743v1/corvon_743v1_top.jpg new file mode 100644 index 0000000000..a0862fc7ee Binary files /dev/null and b/docs/assets/flight_controller/corvon_743v1/corvon_743v1_top.jpg differ diff --git a/docs/assets/flight_controller/crazyflie/crazyflie2_hero.png b/docs/assets/flight_controller/crazyflie/crazyflie2_hero.png deleted file mode 100644 index 4b451cedb2..0000000000 Binary files a/docs/assets/flight_controller/crazyflie/crazyflie2_hero.png and /dev/null differ diff --git a/docs/assets/flight_controller/crazyflie/crazyflie_baro_foam.jpg b/docs/assets/flight_controller/crazyflie/crazyflie_baro_foam.jpg deleted file mode 100644 index 10462857d5..0000000000 Binary files a/docs/assets/flight_controller/crazyflie/crazyflie_baro_foam.jpg and /dev/null differ diff --git a/docs/assets/flight_controller/crazyflie/crazyflie_barometer.jpg b/docs/assets/flight_controller/crazyflie/crazyflie_barometer.jpg deleted file mode 100644 index 36e5231f0e..0000000000 Binary files a/docs/assets/flight_controller/crazyflie/crazyflie_barometer.jpg and /dev/null differ diff --git a/docs/assets/flight_controller/crazyflie/crazyflie_battery_setup.jpg b/docs/assets/flight_controller/crazyflie/crazyflie_battery_setup.jpg deleted file mode 100644 index 508538f927..0000000000 Binary files a/docs/assets/flight_controller/crazyflie/crazyflie_battery_setup.jpg and /dev/null differ diff --git a/docs/assets/flight_controller/crazyflie/crazyflie_opticalflow.jpg b/docs/assets/flight_controller/crazyflie/crazyflie_opticalflow.jpg deleted file mode 100644 index 528b74b5cd..0000000000 Binary files a/docs/assets/flight_controller/crazyflie/crazyflie_opticalflow.jpg and /dev/null differ diff --git a/docs/assets/flight_controller/crazyflie/crazyflie_sdcard.jpg b/docs/assets/flight_controller/crazyflie/crazyflie_sdcard.jpg deleted file mode 100644 index f7b1e53bba..0000000000 Binary files a/docs/assets/flight_controller/crazyflie/crazyflie_sdcard.jpg and /dev/null differ diff --git a/docs/assets/flight_controller/cuav_v5/pixhack_v5.jpg b/docs/assets/flight_controller/cuav_v5/pixhack_v5.jpg deleted file mode 100644 index bff7b3b4d6..0000000000 Binary files a/docs/assets/flight_controller/cuav_v5/pixhack_v5.jpg and /dev/null differ diff --git a/docs/assets/flight_controller/cuav_v5/pixhack_v5_connector.jpg b/docs/assets/flight_controller/cuav_v5/pixhack_v5_connector.jpg deleted file mode 100644 index de1e9b6767..0000000000 Binary files a/docs/assets/flight_controller/cuav_v5/pixhack_v5_connector.jpg and /dev/null differ diff --git a/docs/assets/flight_controller/cuav_v5/pixhack_v5_debug.jpg b/docs/assets/flight_controller/cuav_v5/pixhack_v5_debug.jpg deleted file mode 100644 index 5e5a937f7b..0000000000 Binary files a/docs/assets/flight_controller/cuav_v5/pixhack_v5_debug.jpg and /dev/null differ diff --git a/docs/assets/flight_controller/cuav_x25-evo/X25-EVO.jpg b/docs/assets/flight_controller/cuav_x25-evo/X25-EVO.jpg deleted file mode 100644 index bc68ecb20d..0000000000 Binary files a/docs/assets/flight_controller/cuav_x25-evo/X25-EVO.jpg and /dev/null differ diff --git a/docs/assets/flight_controller/cuav_x25-evo/x25_evo.jpg b/docs/assets/flight_controller/cuav_x25-evo/x25_evo.jpg new file mode 100644 index 0000000000..65901b0294 Binary files /dev/null and b/docs/assets/flight_controller/cuav_x25-evo/x25_evo.jpg differ diff --git a/docs/assets/flight_controller/cuav_x25-evo/x25_evo_pinouts.jpg b/docs/assets/flight_controller/cuav_x25-evo/x25_evo_pinouts.jpg new file mode 100644 index 0000000000..5b0c9a466e Binary files /dev/null and b/docs/assets/flight_controller/cuav_x25-evo/x25_evo_pinouts.jpg differ diff --git a/docs/assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_01.jpg b/docs/assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_01.jpg new file mode 100644 index 0000000000..ae592643eb Binary files /dev/null and b/docs/assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_01.jpg differ diff --git a/docs/assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_02.jpg b/docs/assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_02.jpg new file mode 100644 index 0000000000..f3e72826a9 Binary files /dev/null and b/docs/assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_02.jpg differ diff --git a/docs/assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_03.jpg b/docs/assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_03.jpg new file mode 100644 index 0000000000..cadadf8d18 Binary files /dev/null and b/docs/assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_03.jpg differ diff --git a/docs/assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_04.jpg b/docs/assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_04.jpg new file mode 100644 index 0000000000..333b708fbf Binary files /dev/null and b/docs/assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_04.jpg differ diff --git a/docs/assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_05.jpg b/docs/assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_05.jpg new file mode 100644 index 0000000000..09be37fc9f Binary files /dev/null and b/docs/assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_05.jpg differ diff --git a/docs/assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_06.jpg b/docs/assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_06.jpg new file mode 100644 index 0000000000..0b2a8b55cd Binary files /dev/null and b/docs/assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_06.jpg differ diff --git a/docs/assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_07.png b/docs/assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_07.png new file mode 100644 index 0000000000..66425cc0dc Binary files /dev/null and b/docs/assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_07.png differ diff --git a/docs/assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_08.jpg b/docs/assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_08.jpg new file mode 100644 index 0000000000..06aa02441e Binary files /dev/null and b/docs/assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_08.jpg differ diff --git a/docs/assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_09.jpg b/docs/assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_09.jpg new file mode 100644 index 0000000000..1628383e42 Binary files /dev/null and b/docs/assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_09.jpg differ diff --git a/docs/assets/flight_controller/cuav_x25-evo/x25_evo_size.png b/docs/assets/flight_controller/cuav_x25-evo/x25_evo_size.png new file mode 100644 index 0000000000..12e89e2021 Binary files /dev/null and b/docs/assets/flight_controller/cuav_x25-evo/x25_evo_size.png differ diff --git a/docs/assets/flight_controller/cuav_x25-super/x25-super.png b/docs/assets/flight_controller/cuav_x25-super/x25-super.png new file mode 100644 index 0000000000..70d518cdb1 Binary files /dev/null and b/docs/assets/flight_controller/cuav_x25-super/x25-super.png differ diff --git a/docs/assets/flight_controller/cuav_x25-super/x25-super_pinouts_01.png b/docs/assets/flight_controller/cuav_x25-super/x25-super_pinouts_01.png new file mode 100644 index 0000000000..8f2df218bb Binary files /dev/null and b/docs/assets/flight_controller/cuav_x25-super/x25-super_pinouts_01.png differ diff --git a/docs/assets/flight_controller/cuav_x25-super/x25-super_pinouts_02.png b/docs/assets/flight_controller/cuav_x25-super/x25-super_pinouts_02.png new file mode 100644 index 0000000000..2c0f2eed59 Binary files /dev/null and b/docs/assets/flight_controller/cuav_x25-super/x25-super_pinouts_02.png differ diff --git a/docs/assets/flight_controller/cuav_x25-super/x25-super_size.png b/docs/assets/flight_controller/cuav_x25-super/x25-super_size.png new file mode 100644 index 0000000000..05b2d10bc9 Binary files /dev/null and b/docs/assets/flight_controller/cuav_x25-super/x25-super_size.png differ diff --git a/docs/assets/flight_controller/cuav_x7/x7-pinouts.jpg b/docs/assets/flight_controller/cuav_x7/x7-pinouts.jpg deleted file mode 100644 index 70aa823f36..0000000000 Binary files a/docs/assets/flight_controller/cuav_x7/x7-pinouts.jpg and /dev/null differ diff --git a/docs/assets/flight_controller/cuav_x7/x7-size.jpg b/docs/assets/flight_controller/cuav_x7/x7-size.jpg deleted file mode 100644 index e363519b2c..0000000000 Binary files a/docs/assets/flight_controller/cuav_x7/x7-size.jpg and /dev/null differ diff --git a/docs/assets/flight_controller/cuav_x7/x7.jpg b/docs/assets/flight_controller/cuav_x7/x7.jpg deleted file mode 100644 index fc60c0eb0c..0000000000 Binary files a/docs/assets/flight_controller/cuav_x7/x7.jpg and /dev/null differ diff --git a/docs/assets/flight_controller/holybro_pix32/pix32_hero.jpg b/docs/assets/flight_controller/holybro_pix32/pix32_hero.jpg deleted file mode 100644 index 242359e5d6..0000000000 Binary files a/docs/assets/flight_controller/holybro_pix32/pix32_hero.jpg and /dev/null differ diff --git a/docs/assets/flight_controller/kakutef7/board.jpg b/docs/assets/flight_controller/kakutef7/board.jpg deleted file mode 100644 index de59d61054..0000000000 Binary files a/docs/assets/flight_controller/kakutef7/board.jpg and /dev/null differ diff --git a/docs/assets/flight_controller/kakutef7/debug_swd_port.jpg b/docs/assets/flight_controller/kakutef7/debug_swd_port.jpg deleted file mode 100644 index 56642a7317..0000000000 Binary files a/docs/assets/flight_controller/kakutef7/debug_swd_port.jpg and /dev/null differ diff --git a/docs/assets/flight_controller/kakutef7/debug_swd_port_gnd_vcc3_3.jpg b/docs/assets/flight_controller/kakutef7/debug_swd_port_gnd_vcc3_3.jpg deleted file mode 100644 index 1f6974dd1b..0000000000 Binary files a/docs/assets/flight_controller/kakutef7/debug_swd_port_gnd_vcc3_3.jpg and /dev/null differ diff --git a/docs/assets/flight_controller/kakutef7/silk.png b/docs/assets/flight_controller/kakutef7/silk.png deleted file mode 100644 index f22572ccbb..0000000000 Binary files a/docs/assets/flight_controller/kakutef7/silk.png and /dev/null differ diff --git a/docs/assets/flight_controller/modalai/fc_v1/bottom.png b/docs/assets/flight_controller/modalai/fc_v1/bottom.png deleted file mode 100644 index 3ae89e230a..0000000000 Binary files a/docs/assets/flight_controller/modalai/fc_v1/bottom.png and /dev/null differ diff --git a/docs/assets/flight_controller/modalai/fc_v1/dimensions.png b/docs/assets/flight_controller/modalai/fc_v1/dimensions.png deleted file mode 100644 index c3b535cffa..0000000000 Binary files a/docs/assets/flight_controller/modalai/fc_v1/dimensions.png and /dev/null differ diff --git a/docs/assets/flight_controller/modalai/fc_v1/main.jpg b/docs/assets/flight_controller/modalai/fc_v1/main.jpg deleted file mode 100644 index 4edb9f3d2b..0000000000 Binary files a/docs/assets/flight_controller/modalai/fc_v1/main.jpg and /dev/null differ diff --git a/docs/assets/flight_controller/modalai/fc_v1/orientation.png b/docs/assets/flight_controller/modalai/fc_v1/orientation.png deleted file mode 100644 index 289504fd7d..0000000000 Binary files a/docs/assets/flight_controller/modalai/fc_v1/orientation.png and /dev/null differ diff --git a/docs/assets/flight_controller/modalai/fc_v1/top.png b/docs/assets/flight_controller/modalai/fc_v1/top.png deleted file mode 100644 index ebda38e944..0000000000 Binary files a/docs/assets/flight_controller/modalai/fc_v1/top.png and /dev/null differ diff --git a/docs/assets/flight_controller/modalai/voxl_flight/voxl-flight-bottom.jpg b/docs/assets/flight_controller/modalai/voxl_flight/voxl-flight-bottom.jpg deleted file mode 100644 index 1376e0e1c6..0000000000 Binary files a/docs/assets/flight_controller/modalai/voxl_flight/voxl-flight-bottom.jpg and /dev/null differ diff --git a/docs/assets/flight_controller/modalai/voxl_flight/voxl-flight-dimensions.jpg b/docs/assets/flight_controller/modalai/voxl_flight/voxl-flight-dimensions.jpg deleted file mode 100644 index 56fc3edfd0..0000000000 Binary files a/docs/assets/flight_controller/modalai/voxl_flight/voxl-flight-dimensions.jpg and /dev/null differ diff --git a/docs/assets/flight_controller/modalai/voxl_flight/voxl-flight-dk.jpg b/docs/assets/flight_controller/modalai/voxl_flight/voxl-flight-dk.jpg deleted file mode 100644 index 37c9b53071..0000000000 Binary files a/docs/assets/flight_controller/modalai/voxl_flight/voxl-flight-dk.jpg and /dev/null differ diff --git a/docs/assets/flight_controller/modalai/voxl_flight/voxl-flight-top.jpg b/docs/assets/flight_controller/modalai/voxl_flight/voxl-flight-top.jpg deleted file mode 100644 index 874f142c5f..0000000000 Binary files a/docs/assets/flight_controller/modalai/voxl_flight/voxl-flight-top.jpg and /dev/null differ diff --git a/docs/assets/flight_controller/pixhawk1/arm_10pin_jtag_connector_pinout.jpg b/docs/assets/flight_controller/mro/arm_10pin_jtag_connector_pinout.jpg similarity index 100% rename from docs/assets/flight_controller/pixhawk1/arm_10pin_jtag_connector_pinout.jpg rename to docs/assets/flight_controller/mro/arm_10pin_jtag_connector_pinout.jpg diff --git a/docs/assets/flight_controller/pixhawk1/console_connector.jpg b/docs/assets/flight_controller/mro/console_connector.jpg similarity index 100% rename from docs/assets/flight_controller/pixhawk1/console_connector.jpg rename to docs/assets/flight_controller/mro/console_connector.jpg diff --git a/docs/assets/flight_controller/pixhawk1/console_debug.jpg b/docs/assets/flight_controller/mro/console_debug.jpg similarity index 100% rename from docs/assets/flight_controller/pixhawk1/console_debug.jpg rename to docs/assets/flight_controller/mro/console_debug.jpg diff --git a/docs/assets/flight_controller/pixhawk1/dronecode_probe.jpg b/docs/assets/flight_controller/mro/dronecode_probe.jpg similarity index 100% rename from docs/assets/flight_controller/pixhawk1/dronecode_probe.jpg rename to docs/assets/flight_controller/mro/dronecode_probe.jpg diff --git a/docs/assets/flight_controller/mro/mro_x2.1.jpg b/docs/assets/flight_controller/mro/mro_x2.1.jpg deleted file mode 100644 index c71538602d..0000000000 Binary files a/docs/assets/flight_controller/mro/mro_x2.1.jpg and /dev/null differ diff --git a/docs/assets/flight_controller/mro/mro_x21_wiring.png b/docs/assets/flight_controller/mro/mro_x21_wiring.png deleted file mode 100644 index 063e14913a..0000000000 Binary files a/docs/assets/flight_controller/mro/mro_x21_wiring.png and /dev/null differ diff --git a/docs/assets/flight_controller/pixhawk1/pixhawk_swd.jpg b/docs/assets/flight_controller/mro/pixhawk_swd.jpg similarity index 100% rename from docs/assets/flight_controller/pixhawk1/pixhawk_swd.jpg rename to docs/assets/flight_controller/mro/pixhawk_swd.jpg diff --git a/docs/assets/flight_controller/mro/px1_x21.jpg b/docs/assets/flight_controller/mro/px1_x21.jpg deleted file mode 100644 index 5b285fc9bb..0000000000 Binary files a/docs/assets/flight_controller/mro/px1_x21.jpg and /dev/null differ diff --git a/docs/assets/flight_controller/nxp_rddrone_fmuk66/HoverGamesDrone_14042019_XL_020.jpg b/docs/assets/flight_controller/nxp_rddrone_fmuk66/HoverGamesDrone_14042019_XL_020.jpg deleted file mode 100644 index a4d9d5e2d3..0000000000 Binary files a/docs/assets/flight_controller/nxp_rddrone_fmuk66/HoverGamesDrone_14042019_XL_020.jpg and /dev/null differ diff --git a/docs/assets/flight_controller/nxp_rddrone_fmuk66/HoverGamesDrone_14042019_XL_021.jpg b/docs/assets/flight_controller/nxp_rddrone_fmuk66/HoverGamesDrone_14042019_XL_021.jpg deleted file mode 100644 index e906ef3958..0000000000 Binary files a/docs/assets/flight_controller/nxp_rddrone_fmuk66/HoverGamesDrone_14042019_XL_021.jpg and /dev/null differ diff --git a/docs/assets/flight_controller/nxp_rddrone_fmuk66/hovergames_colored_small.png b/docs/assets/flight_controller/nxp_rddrone_fmuk66/hovergames_colored_small.png deleted file mode 100644 index aab2a34360..0000000000 Binary files a/docs/assets/flight_controller/nxp_rddrone_fmuk66/hovergames_colored_small.png and /dev/null differ diff --git a/docs/assets/flight_controller/nxp_rddrone_fmuk66/hovergames_drone_14042019_xl001.jpg b/docs/assets/flight_controller/nxp_rddrone_fmuk66/hovergames_drone_14042019_xl001.jpg deleted file mode 100644 index 432e7bb99b..0000000000 Binary files a/docs/assets/flight_controller/nxp_rddrone_fmuk66/hovergames_drone_14042019_xl001.jpg and /dev/null differ diff --git a/docs/assets/flight_controller/nxp_rddrone_fmuk66/rddrone_fmu66_kit_img_contents.jpg b/docs/assets/flight_controller/nxp_rddrone_fmuk66/rddrone_fmu66_kit_img_contents.jpg deleted file mode 100644 index e93a167d03..0000000000 Binary files a/docs/assets/flight_controller/nxp_rddrone_fmuk66/rddrone_fmu66_kit_img_contents.jpg and /dev/null differ diff --git a/docs/assets/flight_controller/omnibus_f4_sd/board.jpg b/docs/assets/flight_controller/omnibus_f4_sd/board.jpg deleted file mode 100644 index a4bb1c373d..0000000000 Binary files a/docs/assets/flight_controller/omnibus_f4_sd/board.jpg and /dev/null differ diff --git a/docs/assets/flight_controller/omnibus_f4_sd/hobbywing_xrotor_silk.png b/docs/assets/flight_controller/omnibus_f4_sd/hobbywing_xrotor_silk.png deleted file mode 100644 index cfd4a29aed..0000000000 Binary files a/docs/assets/flight_controller/omnibus_f4_sd/hobbywing_xrotor_silk.png and /dev/null differ diff --git a/docs/assets/flight_controller/omnibus_f4_sd/pullup-schematic.jpg b/docs/assets/flight_controller/omnibus_f4_sd/pullup-schematic.jpg deleted file mode 100644 index 74a26d680d..0000000000 Binary files a/docs/assets/flight_controller/omnibus_f4_sd/pullup-schematic.jpg and /dev/null differ diff --git a/docs/assets/flight_controller/omnibus_f4_sd/pullup.jpg b/docs/assets/flight_controller/omnibus_f4_sd/pullup.jpg deleted file mode 100644 index 3e627752b6..0000000000 Binary files a/docs/assets/flight_controller/omnibus_f4_sd/pullup.jpg and /dev/null differ diff --git a/docs/assets/flight_controller/omnibus_f4_sd/silk-bottom.jpg b/docs/assets/flight_controller/omnibus_f4_sd/silk-bottom.jpg deleted file mode 100644 index 282a4bb8e5..0000000000 Binary files a/docs/assets/flight_controller/omnibus_f4_sd/silk-bottom.jpg and /dev/null differ diff --git a/docs/assets/flight_controller/omnibus_f4_sd/silk-top.jpg b/docs/assets/flight_controller/omnibus_f4_sd/silk-top.jpg deleted file mode 100644 index daf813a166..0000000000 Binary files a/docs/assets/flight_controller/omnibus_f4_sd/silk-top.jpg and /dev/null differ diff --git a/docs/assets/flight_controller/omnibus_f4_sd/uart4-top.jpg b/docs/assets/flight_controller/omnibus_f4_sd/uart4-top.jpg deleted file mode 100644 index fce23cb016..0000000000 Binary files a/docs/assets/flight_controller/omnibus_f4_sd/uart4-top.jpg and /dev/null differ diff --git a/docs/assets/flight_controller/omnibus_f4_sd/uart4.jpg b/docs/assets/flight_controller/omnibus_f4_sd/uart4.jpg deleted file mode 100644 index 2ee48cd3bf..0000000000 Binary files a/docs/assets/flight_controller/omnibus_f4_sd/uart4.jpg and /dev/null differ diff --git a/docs/assets/flight_controller/omnibus_f4_sd/uart6.jpg b/docs/assets/flight_controller/omnibus_f4_sd/uart6.jpg deleted file mode 100644 index 1d1cc0a56e..0000000000 Binary files a/docs/assets/flight_controller/omnibus_f4_sd/uart6.jpg and /dev/null differ diff --git a/docs/assets/flight_controller/pixhack_v3/pixhack_v3_157_large_default.jpg b/docs/assets/flight_controller/pixhack_v3/pixhack_v3_157_large_default.jpg deleted file mode 100644 index 759a9f46b2..0000000000 Binary files a/docs/assets/flight_controller/pixhack_v3/pixhack_v3_157_large_default.jpg and /dev/null differ diff --git a/docs/assets/flight_controller/pixhawk1/pixhawk_connectors.png b/docs/assets/flight_controller/pixhawk1/pixhawk_connectors.png deleted file mode 100644 index df93bc88fd..0000000000 Binary files a/docs/assets/flight_controller/pixhawk1/pixhawk_connectors.png and /dev/null differ diff --git a/docs/assets/flight_controller/pixhawk3pro/pixhawk3_pro_debug_ports.jpg b/docs/assets/flight_controller/pixhawk3pro/pixhawk3_pro_debug_ports.jpg deleted file mode 100644 index e2ce0a8c29..0000000000 Binary files a/docs/assets/flight_controller/pixhawk3pro/pixhawk3_pro_debug_ports.jpg and /dev/null differ diff --git a/docs/assets/flight_controller/pixhawk4mini/pixhawk4mini_dimensions.png b/docs/assets/flight_controller/pixhawk4mini/pixhawk4mini_dimensions.png deleted file mode 100644 index 19c418e523..0000000000 Binary files a/docs/assets/flight_controller/pixhawk4mini/pixhawk4mini_dimensions.png and /dev/null differ diff --git a/docs/assets/flight_controller/pixhawk4mini/pixhawk4mini_fmu_debug.png b/docs/assets/flight_controller/pixhawk4mini/pixhawk4mini_fmu_debug.png deleted file mode 100644 index e842c8dc3f..0000000000 Binary files a/docs/assets/flight_controller/pixhawk4mini/pixhawk4mini_fmu_debug.png and /dev/null differ diff --git a/docs/assets/flight_controller/pixhawk4mini/pixhawk4mini_gps.png b/docs/assets/flight_controller/pixhawk4mini/pixhawk4mini_gps.png deleted file mode 100644 index f44c929679..0000000000 Binary files a/docs/assets/flight_controller/pixhawk4mini/pixhawk4mini_gps.png and /dev/null differ diff --git a/docs/assets/flight_controller/pixhawk4mini/pixhawk4mini_interfaces.png b/docs/assets/flight_controller/pixhawk4mini/pixhawk4mini_interfaces.png deleted file mode 100644 index 7479856227..0000000000 Binary files a/docs/assets/flight_controller/pixhawk4mini/pixhawk4mini_interfaces.png and /dev/null differ diff --git a/docs/assets/flight_controller/pixhawk4mini/pixhawk4mini_iso_1.png b/docs/assets/flight_controller/pixhawk4mini/pixhawk4mini_iso_1.png deleted file mode 100644 index 0273235572..0000000000 Binary files a/docs/assets/flight_controller/pixhawk4mini/pixhawk4mini_iso_1.png and /dev/null differ diff --git a/docs/assets/flight_controller/pixhawk4mini/pixhawk4mini_orientation.png b/docs/assets/flight_controller/pixhawk4mini/pixhawk4mini_orientation.png deleted file mode 100644 index 7579b3ecf4..0000000000 Binary files a/docs/assets/flight_controller/pixhawk4mini/pixhawk4mini_orientation.png and /dev/null differ diff --git a/docs/assets/flight_controller/pixhawk4mini/pixhawk4mini_rc_dsmsbus.png b/docs/assets/flight_controller/pixhawk4mini/pixhawk4mini_rc_dsmsbus.png deleted file mode 100644 index 9d019a476a..0000000000 Binary files a/docs/assets/flight_controller/pixhawk4mini/pixhawk4mini_rc_dsmsbus.png and /dev/null differ diff --git a/docs/assets/flight_controller/pixhawk4mini/pixhawk4mini_rc_ppm.png b/docs/assets/flight_controller/pixhawk4mini/pixhawk4mini_rc_ppm.png deleted file mode 100644 index da18c0568f..0000000000 Binary files a/docs/assets/flight_controller/pixhawk4mini/pixhawk4mini_rc_ppm.png and /dev/null differ diff --git a/docs/assets/flight_controller/pixhawk4mini/pixhawk4mini_sdcard.png b/docs/assets/flight_controller/pixhawk4mini/pixhawk4mini_sdcard.png deleted file mode 100644 index 4ba2ee3194..0000000000 Binary files a/docs/assets/flight_controller/pixhawk4mini/pixhawk4mini_sdcard.png and /dev/null differ diff --git a/docs/assets/flight_controller/pixhawk4mini/pixhawk4mini_telemetry.png b/docs/assets/flight_controller/pixhawk4mini/pixhawk4mini_telemetry.png deleted file mode 100644 index 7bc9b8f256..0000000000 Binary files a/docs/assets/flight_controller/pixhawk4mini/pixhawk4mini_telemetry.png and /dev/null differ diff --git a/docs/assets/flight_controller/pixhawk4mini/pixhawk4mini_wiring_overview.png b/docs/assets/flight_controller/pixhawk4mini/pixhawk4mini_wiring_overview.png deleted file mode 100644 index 663c0c808c..0000000000 Binary files a/docs/assets/flight_controller/pixhawk4mini/pixhawk4mini_wiring_overview.png and /dev/null differ diff --git a/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_4_pin_cable_drawing.png b/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_4_pin_cable_drawing.png deleted file mode 100644 index df8c2f8133..0000000000 Binary files a/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_4_pin_cable_drawing.png and /dev/null differ diff --git a/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_6_pin_cable_drawing.png b/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_6_pin_cable_drawing.png deleted file mode 100644 index 6006b356a5..0000000000 Binary files a/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_6_pin_cable_drawing.png and /dev/null differ diff --git a/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_6_to_6_and_4_pin_Y_cable_drawing.png b/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_6_to_6_and_4_pin_Y_cable_drawing.png deleted file mode 100644 index a94de44224..0000000000 Binary files a/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_6_to_6_and_4_pin_Y_cable_drawing.png and /dev/null differ diff --git a/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_6pin_JST_to_DF13_cable_drawing.png b/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_6pin_JST_to_DF13_cable_drawing.png deleted file mode 100644 index ccbb9d2bc1..0000000000 Binary files a/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_6pin_JST_to_DF13_cable_drawing.png and /dev/null differ diff --git a/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_8_channel_pwm_breakout_board_drawing.png b/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_8_channel_pwm_breakout_board_drawing.png deleted file mode 100644 index a5fc5e05d8..0000000000 Binary files a/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_8_channel_pwm_breakout_board_drawing.png and /dev/null differ diff --git a/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_8channel_pwm_breakout_cable_drawing.png b/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_8channel_pwm_breakout_cable_drawing.png deleted file mode 100644 index e10c52b760..0000000000 Binary files a/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_8channel_pwm_breakout_cable_drawing.png and /dev/null differ diff --git a/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_compass_drawing.png b/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_compass_drawing.png deleted file mode 100644 index 7a2f0a69eb..0000000000 Binary files a/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_compass_drawing.png and /dev/null differ diff --git a/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_drawing.png b/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_drawing.png deleted file mode 100644 index 945d2f087c..0000000000 Binary files a/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_drawing.png and /dev/null differ diff --git a/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_hero.jpg b/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_hero.jpg deleted file mode 100644 index 9ae3d33b5b..0000000000 Binary files a/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_hero.jpg and /dev/null differ diff --git a/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_mounting_arrow.jpg b/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_mounting_arrow.jpg deleted file mode 100644 index ea2e2ff831..0000000000 Binary files a/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_mounting_arrow.jpg and /dev/null differ diff --git a/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_pinout.png b/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_pinout.png deleted file mode 100644 index b53d1c7a03..0000000000 Binary files a/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_pinout.png and /dev/null differ diff --git a/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_port_main_out.png b/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_port_main_out.png deleted file mode 100644 index 7228f2d03a..0000000000 Binary files a/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_port_main_out.png and /dev/null differ diff --git a/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_port_rcin.png b/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_port_rcin.png deleted file mode 100644 index f1651b3965..0000000000 Binary files a/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_port_rcin.png and /dev/null differ diff --git a/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_port_spkt_dsm.png b/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_port_spkt_dsm.png deleted file mode 100644 index 8e47f84773..0000000000 Binary files a/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_port_spkt_dsm.png and /dev/null differ diff --git a/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_powering_quad_board.jpg b/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_powering_quad_board.jpg deleted file mode 100644 index 1d602e8240..0000000000 Binary files a/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_powering_quad_board.jpg and /dev/null differ diff --git a/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_quad_power_distribution_board_drawing.png b/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_quad_power_distribution_board_drawing.png deleted file mode 100644 index c303917ae4..0000000000 Binary files a/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_quad_power_distribution_board_drawing.png and /dev/null differ diff --git a/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_rc_in_cable_drawing.png b/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_rc_in_cable_drawing.png deleted file mode 100644 index d9c06ef813..0000000000 Binary files a/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_rc_in_cable_drawing.png and /dev/null differ diff --git a/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_safety_switch_drawing.png b/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_safety_switch_drawing.png deleted file mode 100644 index 592f6caa19..0000000000 Binary files a/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_safety_switch_drawing.png and /dev/null differ diff --git a/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_safety_switch_wiring.jpg b/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_safety_switch_wiring.jpg deleted file mode 100644 index a52f264332..0000000000 Binary files a/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_safety_switch_wiring.jpg and /dev/null differ diff --git a/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_with_compass.jpg b/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_with_compass.jpg deleted file mode 100644 index a5e6b86f9e..0000000000 Binary files a/docs/assets/flight_controller/pixhawk_mini/pixhawk_mini_with_compass.jpg and /dev/null differ diff --git a/docs/assets/hardware/hardware-ocpoc-zynq-mini.jpg b/docs/assets/hardware/hardware-ocpoc-zynq-mini.jpg deleted file mode 100644 index 3b49224ddd..0000000000 Binary files a/docs/assets/hardware/hardware-ocpoc-zynq-mini.jpg and /dev/null differ diff --git a/docs/assets/hardware/hardware-pixfalcon.png b/docs/assets/hardware/hardware-pixfalcon.png deleted file mode 100644 index 6e11e78efc..0000000000 Binary files a/docs/assets/hardware/hardware-pixfalcon.png and /dev/null differ diff --git a/docs/assets/hardware/hardware-pixhawk.png b/docs/assets/hardware/hardware-pixhawk.png deleted file mode 100644 index 27ab3e94ab..0000000000 Binary files a/docs/assets/hardware/hardware-pixhawk.png and /dev/null differ diff --git a/docs/assets/hardware/hardware-pixhawk3_pro.jpg b/docs/assets/hardware/hardware-pixhawk3_pro.jpg deleted file mode 100644 index 9a1f2cb027..0000000000 Binary files a/docs/assets/hardware/hardware-pixhawk3_pro.jpg and /dev/null differ diff --git a/docs/assets/hardware/joystick-message-frequency.png b/docs/assets/hardware/joystick-message-frequency.png deleted file mode 100644 index 9ef95ddec7..0000000000 Binary files a/docs/assets/hardware/joystick-message-frequency.png and /dev/null differ diff --git a/docs/assets/flight_controller/pixhawk4mini/pixhawk4mini_power_management.png b/docs/assets/hardware/power_module/holybro_pm06/pixhawk4mini_power_management.png similarity index 100% rename from docs/assets/flight_controller/pixhawk4mini/pixhawk4mini_power_management.png rename to docs/assets/hardware/power_module/holybro_pm06/pixhawk4mini_power_management.png diff --git a/docs/assets/hardware/telemetry/holybro_sik_longrange/holybro_sik_longrange.jpg b/docs/assets/hardware/telemetry/holybro_sik_longrange/holybro_sik_longrange.jpg new file mode 100644 index 0000000000..866bf6da20 Binary files /dev/null and b/docs/assets/hardware/telemetry/holybro_sik_longrange/holybro_sik_longrange.jpg differ diff --git a/docs/assets/hardware/telemetry/holybro_sik_longrange/holybro_sik_longrange_include1.png b/docs/assets/hardware/telemetry/holybro_sik_longrange/holybro_sik_longrange_include1.png new file mode 100644 index 0000000000..4c758c59e4 Binary files /dev/null and b/docs/assets/hardware/telemetry/holybro_sik_longrange/holybro_sik_longrange_include1.png differ diff --git a/docs/assets/hardware/telemetry/holybro_sik_longrange/holybro_sik_longrange_include2.png b/docs/assets/hardware/telemetry/holybro_sik_longrange/holybro_sik_longrange_include2.png new file mode 100644 index 0000000000..d73fcfb629 Binary files /dev/null and b/docs/assets/hardware/telemetry/holybro_sik_longrange/holybro_sik_longrange_include2.png differ diff --git a/docs/assets/hardware/telemetry/holybro_sik_longrange/holybro_sik_longrange_label.png b/docs/assets/hardware/telemetry/holybro_sik_longrange/holybro_sik_longrange_label.png new file mode 100644 index 0000000000..e31adb95d6 Binary files /dev/null and b/docs/assets/hardware/telemetry/holybro_sik_longrange/holybro_sik_longrange_label.png differ diff --git a/docs/assets/simulation/sih_overview.svg b/docs/assets/simulation/sih_overview.svg new file mode 100644 index 0000000000..70932a41a6 --- /dev/null +++ b/docs/assets/simulation/sih_overview.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + Actuator + Outputs + (uORB) + + + + + + + SIH Module + C++ / uORB + + + + + + Simulated + Sensor Data + (uORB) + diff --git a/docs/assets/site/logo_dronecode.png b/docs/assets/site/logo_dronecode.png deleted file mode 100644 index 94b6511b34..0000000000 Binary files a/docs/assets/site/logo_dronecode.png and /dev/null differ diff --git a/docs/assets/site/logo_pro_small.png b/docs/assets/site/logo_pro_small.png deleted file mode 100644 index 8a8618764c..0000000000 Binary files a/docs/assets/site/logo_pro_small.png and /dev/null differ diff --git a/docs/assets/vuepress/language_selector.png b/docs/assets/vuepress/language_selector.png deleted file mode 100644 index f870995b91..0000000000 Binary files a/docs/assets/vuepress/language_selector.png and /dev/null differ diff --git a/docs/en/SUMMARY.md b/docs/en/SUMMARY.md index f5cd4161ce..123223ee90 100644 --- a/docs/en/SUMMARY.md +++ b/docs/en/SUMMARY.md @@ -1,6 +1,6 @@ - [Introduction](index.md) - [Basic Concepts](getting_started/px4_basic_concepts.md) - +- [Try PX4 (Simulation)](simulation/px4_simulation_quickstart.md) - [Multicopters](frames_multicopter/index.md) - [Features](features_mc/index.md) - [Flight Modes](flight_modes_mc/index.md) @@ -152,15 +152,11 @@ - [Wiring Quickstart](assembly/quick_start_pixhawk5x.md) - [Holybro Pixhawk 4 (FMUv5)](flight_controller/pixhawk4.md) - [Wiring Quickstart](assembly/quick_start_pixhawk4.md) - - [Holybro Pixhawk 4 Mini (FMUv5) - Discontinued](flight_controller/pixhawk4_mini.md) - - [Wiring Quickstart](assembly/quick_start_pixhawk4_mini.md) - - [Drotek Pixhawk 3 Pro (FMUv4pro) - Discontinued](flight_controller/pixhawk3_pro.md) - [mRo Pixracer (FMUv4)](flight_controller/pixracer.md) - [Wiring Quickstart](assembly/quick_start_pixracer.md) - [Hex Cube Black (FMUv3)](flight_controller/pixhawk-2.md) - [mRo Pixhawk (FMUv3)](flight_controller/mro_pixhawk.md) - [mRo (3DR) Pixhawk Wiring Quickstart](assembly/quick_start_pixhawk.md) - - [Holybro Pixhawk Mini (FMUv3) - Discontinued](flight_controller/pixhawk_mini.md) - [Manufacturer-Supported Autopilots](flight_controller/autopilot_manufacturer_supported.md) - [Accton Godwit GA1](flight_controller/accton-godwit_ga1.md) - [AirMind MindPX](flight_controller/mindpx.md) @@ -168,12 +164,15 @@ - [ARK Electronics ARKV6X](flight_controller/ark_v6x.md) - [ARK FPV Flight Controller](flight_controller/ark_fpv.md) - [ARK Pi6X Flow Flight Controller](flight_controller/ark_pi6x.md) + - [CORVON 743v1](flight_controller/corvon_743v1.md) - [CUAV Nora](flight_controller/cuav_nora.md) - [CUAV V5+ (FMUv5)](flight_controller/cuav_v5_plus.md) - [Wiring Quickstart](assembly/quick_start_cuav_v5_plus.md) - [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) - [CubePilot Cube Yellow (CubePilot)](flight_controller/cubepilot_cube_yellow.md) @@ -204,22 +203,6 @@ - [PilotPi with Raspberry Pi OS](flight_controller/raspberry_pi_pilotpi_rpios.md) - [PilotPi with Ubuntu Server](flight_controller/raspberry_pi_pilotpi_ubuntu_server.md) - [Discontinued Autopilots/Vehicles](flight_controller/autopilot_discontinued.md) - - [Drotek Dropix (FMUv2)](flight_controller/dropix.md) - - [Omnibus F4 SD](flight_controller/omnibus_f4_sd.md) - - [Bitcraze Crazyflie 2.0 ](complete_vehicles_mc/crazyflie2.md) - - [Aerotenna OcPoC-Zynq Mini](flight_controller/ocpoc_zynq.md) - - [CUAV X7](flight_controller/cuav_x7.md) - - [CUAV v5](flight_controller/cuav_v5.md) - - [CUAV Pixhack v3 (FMUv3)](flight_controller/pixhack_v3.md) - - [Holybro Kakute F7](flight_controller/kakutef7.md) - - [Holybro Pixfalcon](flight_controller/pixfalcon.md) - - [Holybro pix32 (FMUv2)](flight_controller/holybro_pix32.md) - - [ModalAI Flight Core v1](flight_controller/modalai_fc_v1.md) - - [ModalAI VOXL Flight](flight_controller/modalai_voxl_flight.md) - - [mRo X2.1 (FMUv2)](flight_controller/mro_x2.1.md) - - [mRo AUAV-X2](flight_controller/auav_x2.md) - - [NXP RDDRONE-FMUK66 FMU](flight_controller/nxp_rddrone_fmuk66.md) - - [3DR Pixhawk 1](flight_controller/pixhawk.md) - [Pixhawk Autopilot Bus (PAB) & Carriers](flight_controller/pixhawk_autopilot_bus.md) - [ARK Electronics Pixhawk Autopilot Bus Carrier](flight_controller/ark_pab.md) - [Mounting the Flight Controller](assembly/mount_and_orient_controller.md) @@ -328,10 +311,11 @@ - [Vertiq Motor/ESC Modules](peripherals/vertiq.md) - [VESC Project ESCs](peripherals/vesc.md) - [Zubax Telega ESCs](dronecan/zubax_telega.md) - - [Radio Control (RC)](getting_started/rc_transmitter_receiver.md) - - [Radio Setup](config/radio.md) - - [Flight Modes](config/flight_mode.md) - - [Joysticks](config/joystick.md) + - [Manual Control](config/manual_control.md) + - [Radio Control (RC)](getting_started/rc_transmitter_receiver.md) + - [Radio Setup](config/radio.md) + - [Flight Modes](config/flight_mode.md) + - [Joysticks](config/joystick.md) - [Data Links](data_links/index.md) - [MAVLink Telemetry (OSD/GCS)](peripherals/mavlink_peripherals.md) - [Telemetry Radios](telemetry/index.md) @@ -339,6 +323,7 @@ - [RFD900 (SiK) Telemetry Radio](telemetry/rfd900_telemetry.md) - [ThunderFly TFSIK01 Telemetry Radio](telemetry/tfsik_telemetry.md) - [HolyBro (SIK) Telemetry Radio](telemetry/holybro_sik_radio.md) + - [HolyBro SiK Long Range Telemetry Radio](telemetry/holybro_sik_longrange.md) - [Telemetry Wifi](telemetry/telemetry_wifi.md) - [ESP8266 WiFi Module](telemetry/esp8266_wifi_module.md) - [ESP32 WiFi Module](telemetry/esp32_wifi_module.md) @@ -387,6 +372,7 @@ - [Servo Gripper](peripherals/gripper_servo.md) - [Peripherals](peripherals/index.md) - [ADSB/FLARM/UTM (Traffic Avoidance)](peripherals/adsb_flarm.md) + - [On-Screen Display (OSD)](peripherals/osd.md) - [Parachute](peripherals/parachute.md) - [Remote ID](peripherals/remote_id.md) - [I2C Peripherals](sensor_bus/i2c_general.md) @@ -397,6 +383,7 @@ - [PX4 DroneCAN Firmware](dronecan/px4_cannode_fw.md) - [ARK CANnode](dronecan/ark_cannode.md) - [RaccoonLab CAN Nodes](dronecan/raccoonlab_nodes.md) + - [DroneCAN Lights](dronecan/lights.md) - [Cable Wiring](assembly/cable_wiring.md) - [Companion Computers](companion_computer/index.md) - [Pixhawk + Companion Setup](companion_computer/pixhawk_companion.md) @@ -416,6 +403,7 @@ - [Serial Port Configuration](peripherals/serial_configuration.md) - [PX4 Ethernet Setup](advanced_config/ethernet_setup.md) - [Standard Configuration](config/index.md) + - [OEM Configuration](advanced_config/oem.md) - [Advanced Configuration](advanced_config/index.md) - [Using PX4's Navigation Filter (EKF2)](advanced_config/tuning_the_ecl_ekf.md) - [GNSS-Denied & Degraded Flight](advanced_config/gnss_degraded_or_denied_flight.md) @@ -482,17 +470,21 @@ - [Plugins](sim_gazebo_gz/plugins.md) - [Gazebo Models Repository](sim_gazebo_gz/gazebo_models.md) - [Multi-Vehicle Sim](sim_gazebo_gz/multi_vehicle_simulation.md) + - [SIH Simulation](sim_sih/index.md) + - [Hawkeye Visualizer](sim_hawkeye/index.md) - [Gazebo Classic Simulation](sim_gazebo_classic/index.md) - [Vehicles](sim_gazebo_classic/vehicles.md) - [Worlds](sim_gazebo_classic/worlds.md) - [Multi-Vehicle Sim](sim_gazebo_classic/multi_vehicle_simulation.md) - [Simulate Failsafes](simulation/failsafes.md) + - [Pre-built Packages](simulation/px4_sitl_prebuilt_packages.md) - [Hardware](hardware/index.md) - [Flight Controller Reference Design](hardware/reference_design.md) - [Manufacturer’s Board Support Guide](hardware/board_support_guide.md) - [Flight Controller Porting Guide](hardware/porting_guide.md) - [PX4 Board Configuration (kconfig)](hardware/porting_guide_config.md) - [NuttX Board Porting Guide](hardware/porting_guide_nuttx.md) + - [Board Firmware Packaging (.deb)](hardware/board_packaging.md) - [Serial Port Mapping](hardware/serial_port_mapping.md) - [Airframes](dev_airframes/index.md) - [Adding a New Airframe](dev_airframes/adding_a_new_frame.md) @@ -527,6 +519,8 @@ - [LongitudinalControlConfiguration](msg_docs/LongitudinalControlConfiguration.md) - [ManualControlSetpoint](msg_docs/ManualControlSetpoint.md) - [ModeCompleted](msg_docs/ModeCompleted.md) + - [RaptorInput](msg_docs/RaptorInput.md) + - [RaptorStatus](msg_docs/RaptorStatus.md) - [RegisterExtComponentReply](msg_docs/RegisterExtComponentReply.md) - [RegisterExtComponentRequest](msg_docs/RegisterExtComponentRequest.md) - [TrajectorySetpoint](msg_docs/TrajectorySetpoint.md) @@ -555,6 +549,7 @@ - [Airspeed](msg_docs/Airspeed.md) - [AirspeedWind](msg_docs/AirspeedWind.md) - [AutotuneAttitudeControlStatus](msg_docs/AutotuneAttitudeControlStatus.md) + - [AuxGlobalPosition](msg_docs/AuxGlobalPosition.md) - [BatteryInfo](msg_docs/BatteryInfo.md) - [ButtonEvent](msg_docs/ButtonEvent.md) - [CameraCapture](msg_docs/CameraCapture.md) @@ -577,6 +572,8 @@ - [DistanceSensorModeChangeRequest](msg_docs/DistanceSensorModeChangeRequest.md) - [DronecanNodeStatus](msg_docs/DronecanNodeStatus.md) - [Ekf2Timestamps](msg_docs/Ekf2Timestamps.md) + - [EscEepromRead](msg_docs/EscEepromRead.md) + - [EscEepromWrite](msg_docs/EscEepromWrite.md) - [EscReport](msg_docs/EscReport.md) - [EscStatus](msg_docs/EscStatus.md) - [EstimatorAidSource1d](msg_docs/EstimatorAidSource1d.md) @@ -585,6 +582,7 @@ - [EstimatorBias](msg_docs/EstimatorBias.md) - [EstimatorBias3d](msg_docs/EstimatorBias3d.md) - [EstimatorEventFlags](msg_docs/EstimatorEventFlags.md) + - [EstimatorFusionControl](msg_docs/EstimatorFusionControl.md) - [EstimatorGpsStatus](msg_docs/EstimatorGpsStatus.md) - [EstimatorInnovations](msg_docs/EstimatorInnovations.md) - [EstimatorSelectorStatus](msg_docs/EstimatorSelectorStatus.md) @@ -683,6 +681,7 @@ - [QshellReq](msg_docs/QshellReq.md) - [QshellRetval](msg_docs/QshellRetval.md) - [RadioStatus](msg_docs/RadioStatus.md) + - [RangingBeacon](msg_docs/RangingBeacon.md) - [RateCtrlStatus](msg_docs/RateCtrlStatus.md) - [RcChannels](msg_docs/RcChannels.md) - [RcParameterMap](msg_docs/RcParameterMap.md) @@ -748,6 +747,7 @@ - [VehicleThrustSetpoint](msg_docs/VehicleThrustSetpoint.md) - [VehicleTorqueSetpoint](msg_docs/VehicleTorqueSetpoint.md) - [VelocityLimits](msg_docs/VelocityLimits.md) + - [Vtx](msg_docs/Vtx.md) - [WheelEncoders](msg_docs/WheelEncoders.md) - [Wind](msg_docs/Wind.md) - [YawEstimatorStatus](msg_docs/YawEstimatorStatus.md) @@ -760,14 +760,23 @@ - [HomePositionV0](msg_docs/HomePositionV0.md) - [RegisterExtComponentReplyV0](msg_docs/RegisterExtComponentReplyV0.md) - [RegisterExtComponentRequestV0](msg_docs/RegisterExtComponentRequestV0.md) + - [RegisterExtComponentRequestV1](msg_docs/RegisterExtComponentRequestV1.md) - [VehicleAttitudeSetpointV0](msg_docs/VehicleAttitudeSetpointV0.md) + - [VehicleCommandAckV0](msg_docs/VehicleCommandAckV0.md) + - [VehicleGlobalPositionV0](msg_docs/VehicleGlobalPositionV0.md) - [VehicleLocalPositionV0](msg_docs/VehicleLocalPositionV0.md) - [VehicleStatusV0](msg_docs/VehicleStatusV0.md) + - [VehicleStatusV1](msg_docs/VehicleStatusV1.md) + - [VehicleStatusV2](msg_docs/VehicleStatusV2.md) + - [VehicleStatusV3](msg_docs/VehicleStatusV3.md) - [MAVLink Messaging](mavlink/index.md) - [Adding Messages](mavlink/adding_messages.md) - [Streaming Messages](mavlink/streaming_messages.md) + - [MAVLink Profiles](mavlink/mavlink_profiles.md) - [Receiving Messages](mavlink/receiving_messages.md) - [Custom MAVLink Messages](mavlink/custom_messages.md) + - [Message Signing](mavlink/message_signing.md) + - [Security Hardening](mavlink/security_hardening.md) - [Protocols/Microservices](mavlink/protocols.md) - [Standard Modes Protocol](mavlink/standard_modes.md) - [uXRCE-DDS (PX4-ROS 2/DDS Bridge)](middleware/uxrce_dds.md) @@ -854,21 +863,26 @@ - [Multi-Vehicle Sim with JMAVSim](sim_jmavsim/multi_vehicle.md) - [JSBSim Simulation](sim_jsbsim/index.md) - [AirSim Simulation](sim_airsim/index.md) - - [HITL Simulation](simulation/hitl.md) - - [Simulation-In-Hardware](sim_sih/index.md) + - [Hardware Simulation](simulation/hardware.md) + - [HITL Simulation](simulation/hitl.md) + - [SIH on Hardware](sim_sih/hardware.md) - [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) @@ -909,6 +923,7 @@ - [Translation](contribute/translation.md) - [Terminology/Notation](contribute/notation.md) - [Licenses](contribute/licenses.md) + - [SBOM](contribute/sbom.md) - [Releases](releases/index.md) - [Release Process](releases/release_process.md) - [main (alpha)](releases/main.md) diff --git a/docs/en/_sidebar.md b/docs/en/_sidebar.md index e4d2991d98..2a070333a2 100644 --- a/docs/en/_sidebar.md +++ b/docs/en/_sidebar.md @@ -95,6 +95,7 @@ - [Back-transition Tuning](/config_vtol/vtol_back_transition_tuning.md) - [VTOL w/o Airspeed Sensor](/config_vtol/vtol_without_airspeed_sensor.md) - [VTOL Weather Vane](/config_vtol/vtol_weathervane.md) + - [VTOL Ice Shedding](/config_vtol/vtol_ice_shedding.md) - [Flight Modes](/flight_modes_vtol/index.md) - [Mission Mode (VTOL)](/flight_modes_vtol/mission.md) - [Return Mode (VTOL)](/flight_modes_vtol/return.md) @@ -130,7 +131,7 @@ - [LED Meanings](/getting_started/led_meanings.md) - [Tune/Sound Meanings](/getting_started/tunes.md) - [QGroundControl Flight-Readiness Status](/flying/pre_flight_checks.md) - + - [Asset Tracking](/debug/asset_tracking.md) - [Hardware Selection & Setup](/hardware/drone_parts.md) - [Flight Controllers (Autopilots)](/flight_controller/index.md) - [Flight Controller Selection](/getting_started/flight_controller_selection.md) @@ -153,15 +154,11 @@ - [Wiring Quickstart](/assembly/quick_start_pixhawk5x.md) - [Holybro Pixhawk 4 (FMUv5)](/flight_controller/pixhawk4.md) - [Wiring Quickstart](/assembly/quick_start_pixhawk4.md) - - [Holybro Pixhawk 4 Mini (FMUv5) - Discontinued](/flight_controller/pixhawk4_mini.md) - - [Wiring Quickstart](/assembly/quick_start_pixhawk4_mini.md) - - [Drotek Pixhawk 3 Pro (FMUv4pro) - Discontinued](/flight_controller/pixhawk3_pro.md) - [mRo Pixracer (FMUv4)](/flight_controller/pixracer.md) - [Wiring Quickstart](/assembly/quick_start_pixracer.md) - [Hex Cube Black (FMUv3)](/flight_controller/pixhawk-2.md) - [mRo Pixhawk (FMUv3)](/flight_controller/mro_pixhawk.md) - [mRo (3DR) Pixhawk Wiring Quickstart](/assembly/quick_start_pixhawk.md) - - [Holybro Pixhawk Mini (FMUv3) - Discontinued](/flight_controller/pixhawk_mini.md) - [Manufacturer-Supported Autopilots](/flight_controller/autopilot_manufacturer_supported.md) - [Accton Godwit GA1](/flight_controller/accton-godwit_ga1.md) - [AirMind MindPX](/flight_controller/mindpx.md) @@ -175,10 +172,12 @@ - [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 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) - [CubePilot Cube Yellow (CubePilot)](/flight_controller/cubepilot_cube_yellow.md) - [Cube Wiring Quickstart](/assembly/quick_start_cube.md) + - [Gear Up AirBrainH743](/flight_controller/gearup_airbrainh743.md) - [Holybro Kakute H7v2](/flight_controller/kakuteh7v2.md) - [Holybro Kakute H7mini](/flight_controller/kakuteh7mini.md) - [Holybro Kakute H7](/flight_controller/kakuteh7.md) @@ -196,6 +195,7 @@ - [SVehicle E2](/flight_controller/svehicle_e2.md) - [ThePeach FCC-K1](/flight_controller/thepeach_k1.md) - [ThePeach FCC-R1](/flight_controller/thepeach_r1.md) + - [AP-H743-R1](/flight_controller/x-mav_ap-h743r1.md) - [Experimental Autopilots](/flight_controller/autopilot_experimental.md) - [BeagleBone Blue](/flight_controller/beaglebone_blue.md) - [Raspberry Pi 2/3 Navio2](/flight_controller/raspberry_pi_navio2.md) @@ -203,22 +203,6 @@ - [PilotPi with Raspberry Pi OS](/flight_controller/raspberry_pi_pilotpi_rpios.md) - [PilotPi with Ubuntu Server](/flight_controller/raspberry_pi_pilotpi_ubuntu_server.md) - [Discontinued Autopilots/Vehicles](/flight_controller/autopilot_discontinued.md) - - [Drotek Dropix (FMUv2)](/flight_controller/dropix.md) - - [Omnibus F4 SD](/flight_controller/omnibus_f4_sd.md) - - [Bitcraze Crazyflie 2.0 ](/complete_vehicles_mc/crazyflie2.md) - - [Aerotenna OcPoC-Zynq Mini](/flight_controller/ocpoc_zynq.md) - - [CUAV X7](/flight_controller/cuav_x7.md) - - [CUAV v5](/flight_controller/cuav_v5.md) - - [CUAV Pixhack v3 (FMUv3)](/flight_controller/pixhack_v3.md) - - [Holybro Kakute F7](/flight_controller/kakutef7.md) - - [Holybro Pixfalcon](/flight_controller/pixfalcon.md) - - [Holybro pix32 (FMUv2)](/flight_controller/holybro_pix32.md) - - [ModalAI Flight Core v1](/flight_controller/modalai_fc_v1.md) - - [ModalAI VOXL Flight](/flight_controller/modalai_voxl_flight.md) - - [mRo X2.1 (FMUv2)](/flight_controller/mro_x2.1.md) - - [mRo AUAV-X2](/flight_controller/auav_x2.md) - - [NXP RDDRONE-FMUK66 FMU](/flight_controller/nxp_rddrone_fmuk66.md) - - [3DR Pixhawk 1](/flight_controller/pixhawk.md) - [Pixhawk Autopilot Bus (PAB) & Carriers](/flight_controller/pixhawk_autopilot_bus.md) - [ARK Electronics Pixhawk Autopilot Bus Carrier](/flight_controller/ark_pab.md) - [Mounting the Flight Controller](/assembly/mount_and_orient_controller.md) @@ -252,8 +236,9 @@ - [Benewake TFmini Lidar](/sensor/tfmini.md) - [LeddarOne Lidar](/sensor/leddar_one.md) - [Lidar-Lite](/sensor/lidar_lite.md) - - [Lightware Lidars (SF/LW)](/sensor/sfxx_lidar.md) + - [Lightware Lidars (SF/LW/GRF)](/sensor/sfxx_lidar.md) - [Lightware SF45 Rotary Lidar](/sensor/sf45_rotating_lidar.md) + - [Lightware GRF250/GRF500 Gimbal Lidar](/sensor/grf_lidar.md) - [TeraRanger](/sensor/teraranger.md) - [✘ Lanbao PSK-CM8JL65-CC5](/sensor/cm8jl65_ir_distance_sensor.md) - [Avionics Anonymous Laser Altimeter UAVCAN Interface (CAN)](/dronecan/avanon_laser_interface.md) @@ -272,6 +257,8 @@ - [Holybro M8N & M9N GPS](/gps_compass/gps_holybro_m8n_m9n.md) - [Sky-Drones SmartAP GPS](/gps_compass/gps_smartap.md) - [RTK GNSS](/gps_compass/rtk_gps.md) + - [ARK G5 RTK GPS](/dronecan/ark_g5_rtk_gps.md) + - [ARK G5 RTK HEADING GPS](/dronecan/ark_g5_rtk_heading_gps.md) - [ARK RTK GPS (CAN)](/dronecan/ark_rtk_gps.md) - [ARK RTK GPS L1 L5 (CAN)](/dronecan/ark_rtk_gps_l1_l2.md) - [ARK X20 RTK GPS (CAN)](/dronecan/ark_x20_rtk_gps.md) @@ -313,19 +300,22 @@ - [Actuator Allocation](/config/actuators.md) - [ESC Calibration](/advanced_config/esc_calibration.md) - [ESCs & Motors](/peripherals/esc_motors.md) + - [ESC Protocols](/esc/esc_protocols.md) - [PWM ESCs and Servos](/peripherals/pwm_escs_and_servo.md) - [DShot ESCs](/peripherals/dshot.md) - [OneShot ESCs and Servos](/peripherals/oneshot.md) - [DroneCAN ESCs](/dronecan/escs.md) - - [Zubax Telega](/dronecan/zubax_telega.md) - [PX4 Sapog ESC Firmware](/dronecan/sapog.md) - - [Holybro Kotleta](/dronecan/holybro_kotleta.md) - - [Vertiq](/peripherals/vertiq.md) - - [VESC](/peripherals/vesc.md) - - [Radio Control (RC)](/getting_started/rc_transmitter_receiver.md) - - [Radio Setup](/config/radio.md) - - [Flight Modes](/config/flight_mode.md) - - [Joysticks](/config/joystick.md) + - [ARK 4IN1 ESC](/esc/ark_4in1_esc.md) + - [Holybro Kotleta](/dronecan/holybro_kotleta.md) + - [Vertiq Motor/ESC Modules](/peripherals/vertiq.md) + - [VESC Project ESCs](/peripherals/vesc.md) + - [Zubax Telega ESCs](/dronecan/zubax_telega.md) + - [Manual Control](/config/manual_control.md) + - [Radio Control (RC)](/getting_started/rc_transmitter_receiver.md) + - [Radio Setup](/config/radio.md) + - [Flight Modes](/config/flight_mode.md) + - [Joysticks](/config/joystick.md) - [Data Links](/data_links/index.md) - [MAVLink Telemetry (OSD/GCS)](/peripherals/mavlink_peripherals.md) - [Telemetry Radios](/telemetry/index.md) @@ -347,6 +337,7 @@ - [FrSky Telemetry](/peripherals/frsky_telemetry.md) - [TBS Crossfire (CRSF) Telemetry](/telemetry/crsf_telemetry.md) - [Satellite Comms (Iridium/RockBlock)](/advanced_features/satcom_roadblock.md) + - [Analog Video Transmitters](/vtx/index.md) - [Power Systems](/power_systems/index.md) - [Battery Estimation Tuning](/config/battery.md) @@ -380,6 +371,7 @@ - [Servo Gripper](/peripherals/gripper_servo.md) - [Peripherals](/peripherals/index.md) - [ADSB/FLARM/UTM (Traffic Avoidance)](/peripherals/adsb_flarm.md) + - [On-Screen Display (OSD)](/peripherals/osd.md) - [Parachute](/peripherals/parachute.md) - [Remote ID](/peripherals/remote_id.md) - [I2C Peripherals](/sensor_bus/i2c_general.md) @@ -390,6 +382,7 @@ - [PX4 DroneCAN Firmware](/dronecan/px4_cannode_fw.md) - [ARK CANnode](/dronecan/ark_cannode.md) - [RaccoonLab CAN Nodes](/dronecan/raccoonlab_nodes.md) + - [DroneCAN Lights](/dronecan/lights.md) - [Cable Wiring](/assembly/cable_wiring.md) - [Companion Computers](/companion_computer/index.md) - [Pixhawk + Companion Setup](/companion_computer/pixhawk_companion.md) @@ -411,6 +404,7 @@ - [Standard Configuration](/config/index.md) - [Advanced Configuration](/advanced_config/index.md) - [Using PX4's Navigation Filter (EKF2)](/advanced_config/tuning_the_ecl_ekf.md) + - [GNSS-Denied & Degraded Flight](/advanced_config/gnss_degraded_or_denied_flight.md) - [Finding/Updating Parameters](/advanced_config/parameters.md) - [Full Parameter Reference](/advanced_config/parameter_reference.md) @@ -500,6 +494,7 @@ - [PPS Time Synchronization](/advanced/pps_time_sync.md) - [Middleware](/middleware/index.md) - [uORB Messaging](/middleware/uorb.md) + - [uORB Docs Standard](/uorb/uorb_documentation.md) - [uORB Graph](/middleware/uorb_graph.md) - [uORB Message Reference](/msg_docs/index.md) - [Versioned](/msg_docs/versioned_messages.md) @@ -518,6 +513,8 @@ - [LongitudinalControlConfiguration](/msg_docs/LongitudinalControlConfiguration.md) - [ManualControlSetpoint](/msg_docs/ManualControlSetpoint.md) - [ModeCompleted](/msg_docs/ModeCompleted.md) + - [RaptorInput](/msg_docs/RaptorInput.md) + - [RaptorStatus](/msg_docs/RaptorStatus.md) - [RegisterExtComponentReply](/msg_docs/RegisterExtComponentReply.md) - [RegisterExtComponentRequest](/msg_docs/RegisterExtComponentRequest.md) - [TrajectorySetpoint](/msg_docs/TrajectorySetpoint.md) @@ -546,6 +543,7 @@ - [Airspeed](/msg_docs/Airspeed.md) - [AirspeedWind](/msg_docs/AirspeedWind.md) - [AutotuneAttitudeControlStatus](/msg_docs/AutotuneAttitudeControlStatus.md) + - [AuxGlobalPosition](/msg_docs/AuxGlobalPosition.md) - [BatteryInfo](/msg_docs/BatteryInfo.md) - [ButtonEvent](/msg_docs/ButtonEvent.md) - [CameraCapture](/msg_docs/CameraCapture.md) @@ -562,6 +560,7 @@ - [DebugKeyValue](/msg_docs/DebugKeyValue.md) - [DebugValue](/msg_docs/DebugValue.md) - [DebugVect](/msg_docs/DebugVect.md) + - [DeviceInformation](/msg_docs/DeviceInformation.md) - [DifferentialPressure](/msg_docs/DifferentialPressure.md) - [DistanceSensor](/msg_docs/DistanceSensor.md) - [DistanceSensorModeChangeRequest](/msg_docs/DistanceSensorModeChangeRequest.md) @@ -738,6 +737,7 @@ - [VehicleThrustSetpoint](/msg_docs/VehicleThrustSetpoint.md) - [VehicleTorqueSetpoint](/msg_docs/VehicleTorqueSetpoint.md) - [VelocityLimits](/msg_docs/VelocityLimits.md) + - [Vtx](/msg_docs/Vtx.md) - [WheelEncoders](/msg_docs/WheelEncoders.md) - [Wind](/msg_docs/Wind.md) - [YawEstimatorStatus](/msg_docs/YawEstimatorStatus.md) @@ -751,8 +751,11 @@ - [RegisterExtComponentReplyV0](/msg_docs/RegisterExtComponentReplyV0.md) - [RegisterExtComponentRequestV0](/msg_docs/RegisterExtComponentRequestV0.md) - [VehicleAttitudeSetpointV0](/msg_docs/VehicleAttitudeSetpointV0.md) + - [VehicleCommandAckV0](/msg_docs/VehicleCommandAckV0.md) + - [VehicleGlobalPositionV0](/msg_docs/VehicleGlobalPositionV0.md) - [VehicleLocalPositionV0](/msg_docs/VehicleLocalPositionV0.md) - [VehicleStatusV0](/msg_docs/VehicleStatusV0.md) + - [VehicleStatusV1](/msg_docs/VehicleStatusV1.md) - [MAVLink Messaging](/mavlink/index.md) - [Adding Messages](/mavlink/adding_messages.md) - [Streaming Messages](/mavlink/streaming_messages.md) @@ -817,9 +820,11 @@ - [Camera Integration/Architecture](/camera/camera_architecture.md) - [Computer Vision](/advanced/computer_vision.md) - [Motion Capture (VICON, Optitrack, NOKOV)](/tutorials/motion-capture.md) - - [Neural Networks](/advanced/neural_networks.md) - - [Neural Network Module Utilities](/advanced/nn_module_utilities.md) - - [TensorFlow Lite Micro (TFLM)](/advanced/tflm.md) + - [Neural Networks](/neural_networks/index.md) + - [MC NN Control Module (Generic)](/neural_networks/mc_neural_network_control.md) + - [Neural Network Module Utilities](/neural_networks/nn_module_utilities.md) + - [TensorFlow Lite Micro (TFLM)](/neural_networks/tflm.md) + - [RAPTOR Adaptive RL NN Module](/neural_networks/raptor.md) - [Installing driver for Intel RealSense R200](/advanced/realsense_intel_driver.md) - [Switching State Estimators](/advanced/switching_state_estimators.md) - [Out-of-Tree Modules](/advanced/out_of_tree_modules.md) @@ -847,16 +852,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) @@ -898,7 +907,9 @@ - [Terminology/Notation](/contribute/notation.md) - [Licenses](/contribute/licenses.md) - [Releases](/releases/index.md) + - [Release Process](/releases/release_process.md) - [main (alpha)](/releases/main.md) + - [1.17 (alpha)](/releases/1.17.md) - [1.16 (stable)](/releases/1.16.md) - [1.15](/releases/1.15.md) - [1.14](/releases/1.14.md) diff --git a/docs/en/advanced/computer_vision.md b/docs/en/advanced/computer_vision.md index a87182f6b9..8a21f6017c 100644 --- a/docs/en/advanced/computer_vision.md +++ b/docs/en/advanced/computer_vision.md @@ -67,7 +67,7 @@ The consensus [appears to be](https://discuss.px4.io/t/vio-vs-optical-flow/34680 Optical flow: -- Downward facing optical flow gives you a planar velocity thats corrected for angular velocity with the gyro. +- Downward facing optical flow gives you a planar velocity that's corrected for angular velocity with the gyro. - Requires an accurate distance to the ground and assumes a planar surface. Given those conditions it can be just as accurate/reliable as VIO (such as indoor flight) - Is more robust than VIO as it has fewer states. diff --git a/docs/en/advanced/gimbal_control.md b/docs/en/advanced/gimbal_control.md index f449b74587..c14f9ef2c8 100644 --- a/docs/en/advanced/gimbal_control.md +++ b/docs/en/advanced/gimbal_control.md @@ -20,7 +20,7 @@ By default this is set to `Disabled (-1)` and the driver does not run. After selecting the input mode, reboot the vehicle to start the mount driver. You should set `MNT_MODE_IN` to one of: `RC (1)`, `MAVlink gimbal protocol v2 (4)` or `Auto (0)` (the other options are deprecated). -If you select `Auto (0)`, the gimbal will automatically select either RC or or MAVLink input based on the latest input. +If you select `Auto (0)`, the gimbal will automatically select either RC or MAVLink input based on the latest input. Note that the auto-switch from MAVLink to RC requires a large stick motion! The output is set using the [MNT_MODE_OUT](../advanced_config/parameter_reference.md#MNT_MODE_OUT) parameter. diff --git a/docs/en/advanced/parameters_and_configurations.md b/docs/en/advanced/parameters_and_configurations.md index 95c086e26a..2126c73cb5 100644 --- a/docs/en/advanced/parameters_and_configurations.md +++ b/docs/en/advanced/parameters_and_configurations.md @@ -358,6 +358,62 @@ This ensures that metadata is always up-to-date with the code running on the veh This process is the same as for [events metadata](../concept/events_interface.md#publishing-event-metadata-to-a-gcs). For more information see [PX4 Metadata (Translation & Publication)](../advanced/px4_metadata.md) +## Read-Only Parameters + +Integrators who productize PX4 can lock down parameters so that end users cannot change safety-critical or product-defining settings. +This works in two phases: + +1. **Build time** — a YAML file in the board directory declares _which_ parameters are read-only. +2. **Run time** — `param lock` in the startup script activates enforcement. + +Before the lock, all parameters (including those on the read-only list) can be freely set by startup scripts (`rc.board_defaults`, airframe scripts, `config.txt`, etc.). +After the lock, any attempt to modify a read-only parameter is rejected. + +### Configuration + +Create `boards///readonly_params.yaml` with the following format: + +```yaml +# mode: 'block' = listed params are read-only (all others writable) +# mode: 'allow' = only listed params are writable (all others read-only) +mode: block +parameters: + - SYS_AUTOSTART + - SYS_AUTOCONFIG + - BAT1_N_CELLS +``` + +The two modes are: + +- **`block`**: The listed parameters are read-only; all other parameters remain writable. +- **`allow`**: Only the listed parameters are writable; all others become read-only. + +All parameter names in the list are validated at build time — the build will fail if any listed parameter does not exist in the firmware. +Boards without this file have no read-only enforcement (fully backward compatible). + +### Locking + +The `param lock` command is called in `rcS` after all startup scripts have finished setting parameters. +Before this call, startup scripts can freely use `param set-default` and `param set` on any parameter, including those on the read-only list. +After `param lock`, the read-only list is enforced. + +To set a specific locked value, use `param set-default` in a board startup script (e.g. `rc.board_defaults`) to set the desired default _before_ the lock activates. + +### Enforcement (after lock) + +Read-only parameters are enforced at all entry points: + +- **`param set`** and **`param set-default`** shell commands return an error. +- **MAVLink PARAM_SET** returns a `MAV_PARAM_ERROR_READ_ONLY` error to the GCS. +- **`param_set()`**, **`param_set_default_value()`** C API calls return `PX4_ERROR`. +- **`param reset`** silently skips read-only parameters (since `param_reset_all` loops over all params). +- **`param import`** / **`param load`** from file silently skips read-only parameters. + +### Notes + +- The read-only list is compiled into firmware as a `constexpr` array, so there is zero runtime overhead when the list is empty. +- If no `readonly_params.yaml` file exists for a board, `param lock` is a no-op. + ## Further Information - [Finding/Updating Parameters](../advanced_config/parameters.md) diff --git a/docs/en/advanced/pps_time_sync.md b/docs/en/advanced/pps_time_sync.md index fcd4291f70..8087243df0 100644 --- a/docs/en/advanced/pps_time_sync.md +++ b/docs/en/advanced/pps_time_sync.md @@ -57,6 +57,17 @@ param set PWM_MAIN_FUNC10 2064 param set PPS_CAP_ENABLE 1 ``` +#### Multi-GPS Setups + +If you have multiple GPS receivers, set `PPS_CAP_GPS_ID` to the device ID of the GPS receiver that emits the PPS signal. +When set to `0` (default), the driver uses the first available GPS instance. + +You can find the device ID by running: + +```sh +listener sensor_gps +``` + ### Wiring The wiring configuration depends on your specific flight controller. @@ -80,7 +91,7 @@ For FMUv6S, you need to route the PPS signal separately: For ARK FMUv6X on the Jetson carrier board: -1. Connect your GNSS module using either the 10-pin or 6-pin GPS connector: [ARK PAB GPS1 Interface](../flight_controller/ark_pab#gps1) +1. Connect your GNSS module using either the 10-pin or 6-pin GPS connector: [ARK PAB GPS1 Interface](../flight_controller/ark_pab.md#gps1) 2. Connect the PPS signal to the **FMU_CAP** pin: [ARK PAB ADIO Interface](../flight_controller/ark_pab.md#adio) ## Verification @@ -129,5 +140,5 @@ See also: The PPS signal provides much higher temporal precision than the transmitted time data, which has latency and jitter from serial communication. ::: warning -If the PPS driver does not sending any data for 5 seconds (despite having `PPS_CAP_ENABLE` set to 1), the `EKF2_GPS_DELAY` will be used instead for estimating the latency. +If the PPS driver does not send any data for 5 seconds (despite having `PPS_CAP_ENABLE` set to 1), the corresponding `SENS_GPS*_DELAY` parameter will be used instead for estimating the latency. ::: diff --git a/docs/en/advanced/px4_metadata.md b/docs/en/advanced/px4_metadata.md index 065b5fcf10..1ff3764471 100644 --- a/docs/en/advanced/px4_metadata.md +++ b/docs/en/advanced/px4_metadata.md @@ -45,7 +45,7 @@ Events metadata is also added to the log files, allowing log analysis tools (suc Binaries for flight controller targets with constrained memory do not store the parameter metadata in the binary, but instead reference the same data stored on `px4-travis.s3.amazonaws.com`. This applies, for example, to the [Omnibus F4 SD](../flight_controller/omnibus_f4_sd.md). -The metadata is uploaded via [github CI](https://github.com/PX4/PX4-Autopilot/blob/main/.github/workflows/metadata.yml) for all build targets (and hence will only be available once parameters have been merged into main). +The metadata is uploaded via the [build_all_targets](https://github.com/PX4/PX4-Autopilot/blob/main/.github/workflows/build_all_targets.yml) GitHub CI workflow for all build targets (and hence will only be available once parameters have been merged into main). ::: info You can identify memory constrained boards because they specify `CONFIG_BOARD_CONSTRAINED_FLASH=y` in their [px4board definition file](https://github.com/PX4/PX4-Autopilot/blob/main/boards/omnibus/f4sd/default.px4board). @@ -60,6 +60,7 @@ The metadata JSON files for CI builds of `main` are also copied to the github re This integrates with Crowdin to get translations, which are stored in the [translated](https://github.com/PX4/PX4-Metadata-Translations/tree/main/translated) folder as xz-compressed translation files for each language. These are referenced by the vehicle component metadata, and are downloaded when needed. For more information see [PX4-Metadata-Translations](https://github.com/PX4/PX4-Metadata-Translations/) and [Component Metadata Protocol > Translation](https://mavlink.io/en/services/component_information.html#translation). +This is orchestrated by the [docs-orchestrator](https://github.com/PX4/PX4-Autopilot/blob/main/.github/workflows/docs-orchestrator.yml) GitHub CI workflow, which also regenerates auto-generated documentation such as parameter reference, airframe reference, and uORB message docs. ::: info The parameter XML file of the main branch is copied into the QGC source tree via CI and is used as a fallback in cases where no metadata is available via the component metadata protocol (this approach predates the existence of the component metadata protocol). diff --git a/docs/en/advanced_config/advanced_flight_controller_orientation_leveling.md b/docs/en/advanced_config/advanced_flight_controller_orientation_leveling.md index 28007b730f..e4cc0a5c10 100644 --- a/docs/en/advanced_config/advanced_flight_controller_orientation_leveling.md +++ b/docs/en/advanced_config/advanced_flight_controller_orientation_leveling.md @@ -21,7 +21,7 @@ The other parameters can then be set in order to fine-tune the orientation of th You can locate the parameters in QGroundControl as shown below: 1. Open QGroundControl menu: **Settings > Parameters > Sensor Calibration**. -1. The parameters as located in the section as shown below (or you can search for them): +2. The parameters as located in the section as shown below (or you can search for them): ![FC Orientation QGC v2](../../assets/qgc/setup/sensor/fc_orientation_qgc_v2.png) @@ -34,3 +34,7 @@ You can locate the parameters in QGroundControl as shown below: Positive angles increase in CCW direction, negative angles increase in CW direction. - [SENS_BOARD_Z_OFF](../advanced_config/parameter_reference.md#SENS_BOARD_Z_OFF): Rotation, in degrees, around PX4FMU's Z axis Yaw axis. Positive angles increase in CCW direction, negative angles increase in CW direction. + +## See Also + +- [OEM/Factory Configuration](../advanced_config/oem.md) diff --git a/docs/en/advanced_config/bootloader_update.md b/docs/en/advanced_config/bootloader_update.md index 89669acc81..5d668305e1 100644 --- a/docs/en/advanced_config/bootloader_update.md +++ b/docs/en/advanced_config/bootloader_update.md @@ -160,7 +160,7 @@ After the bootloader has updated you can [Load PX4 Firmware](../config/firmware. ## FMUv2 Bootloader Update If _QGroundControl_ installs the FMUv2 target (see console during installation), and you have a newer board, you may need to update the bootloader in order to access all the memory on your flight controller. -This example explains how you can use [QGC Bootloader Update](qgc-bootloader-update-sys-bl-update) to update the bootloader. +This example explains how you can use [QGC Bootloader Update](#qgc-bootloader-update-sys-bl-update) to update the bootloader. ::: info Early FMUv2 [Pixhawk-series](../flight_controller/pixhawk_series.md#fmu_versions) flight controllers had a [hardware issue](../flight_controller/silicon_errata.md#fmuv2-pixhawk-silicon-errata) that restricted them to using 1MB of flash memory. @@ -195,3 +195,7 @@ To update the bootloader: Boards that are not part of the [Pixhawk Series](../flight_controller/pixhawk_series.md) will have their own mechanisms for bootloader update. For boards that are preflashed with Betaflight, see [Bootloader Flashing onto Betaflight Systems](bootloader_update_from_betaflight.md). + +## See Also + +- [OEM/Factory Configuration](../advanced_config/oem.md) diff --git a/docs/en/advanced_config/bootloader_update_v6xrt.md b/docs/en/advanced_config/bootloader_update_v6xrt.md index 9d7f92a4aa..5211ad2dd2 100644 --- a/docs/en/advanced_config/bootloader_update_v6xrt.md +++ b/docs/en/advanced_config/bootloader_update_v6xrt.md @@ -1,6 +1,6 @@ # Bootloader Update Pixhawk V6X-RT via USB -This topic explains explains to flash [Pixhawk FMUv6X-RT](../flight_controller/pixhawk6x-rt.md) bootloader via USB _without needing a debug probe_. +This topic explains how to flash [Pixhawk FMUv6X-RT](../flight_controller/pixhawk6x-rt.md) bootloader via USB _without needing a debug probe_. ## Overview @@ -33,7 +33,7 @@ arm-none-eabi-objcopy -O ihex build/px4_fmu-v6xrt_bootloader/px4_fmu-v6xrt_bootl ## Flashing the bootloader through USB -The Pixhawk V6X-RT comes with a build-in bootloader located on the ROM. +The Pixhawk V6X-RT comes with a built-in bootloader located on the ROM. To flash a new bootloader through USB you've got to download the [NXP MCUXpresso Secure Provisioning tool](https://www.nxp.com/design/design-center/software/development-software/mcuxpresso-software-and-tools-/mcuxpresso-secure-provisioning-tool:MCUXPRESSO-SECURE-PROVISIONING). The tool is available for Windows, Linux and macOS. @@ -79,7 +79,7 @@ The tool is available for Windows, Linux and macOS. ![Flash bootloader through Secure provisioning - Step 7](../../assets/advanced_config/bootloader_6xrt/bootloader_update_v6xrt_step7.png) -1. When the Target Memory configuration is succesful you can press the the **Erase All** button +1. When the Target Memory configuration is successful you can press the **Erase All** button ![Flash bootloader through Secure provisioning - Step 8](../../assets/advanced_config/bootloader_6xrt/bootloader_update_v6xrt_step8.png) diff --git a/docs/en/advanced_config/compass_power_compensation.md b/docs/en/advanced_config/compass_power_compensation.md index de0b5abbf7..52faf191fe 100644 --- a/docs/en/advanced_config/compass_power_compensation.md +++ b/docs/en/advanced_config/compass_power_compensation.md @@ -17,24 +17,24 @@ The process is demonstrated for a multicopter, but is equally valid for other ve Performing this power compensation is advisable only if all the following statements are true: 1. The compass cannot be moved away from the power-carrying cables. -1. There is a strong correlation between the compass readings and the thrust setpoint, and/or the battery current. +2. There is a strong correlation between the compass readings and the thrust setpoint, and/or the battery current. ![Corrupted mag](../../assets/advanced_config/corrupted_mag.png) -1. The drone cables are all fixed in place/do not move (calculated compensation parameters will be invalid if the current-carrying cables can move). +3. The drone cables are all fixed in place/do not move (calculated compensation parameters will be invalid if the current-carrying cables can move). ## How to Compensate the Compass 1. Make sure your drone runs a Firmware version supporting power compensation (current master, or releases from v.1.11.0). -1. Perform the [standard compass calibration](../config/compass.md#compass-calibration). -1. Set the parameter [SDLOG_MODE](../advanced_config/parameter_reference.md#SDLOG_MODE) to 2 to enable logging of data from boot. -1. Set the parameter [SDLOG_PROFILE](../advanced_config/parameter_reference.md#SDLOG_PROFILE) checkbox for _Sensor comparison_ (bit 6) to get more data points. -1. Secure the drone so that it cannot move, and attach the propellers (so the motors can draw the same current as in flight). +2. Perform the [standard compass calibration](../config/compass.md#compass-calibration). +3. Set the parameter [SDLOG_MODE](../advanced_config/parameter_reference.md#SDLOG_MODE) to 2 to enable logging of data from boot. +4. Set the parameter [SDLOG_PROFILE](../advanced_config/parameter_reference.md#SDLOG_PROFILE) checkbox for _Sensor comparison_ (bit 6) to get more data points. +5. Secure the drone so that it cannot move, and attach the propellers (so the motors can draw the same current as in flight). This example secures the vehicle using straps. ![strap](../../assets/advanced_config/strap.png) -1. Power the vehicle and switch into [ACRO flight mode](../flight_modes_mc/acro.md) (using this mode ensures the vehicle won't attempt to compensate for movement resulting from the straps). +6. Power the vehicle and switch into [ACRO flight mode](../flight_modes_mc/acro.md) (using this mode ensures the vehicle won't attempt to compensate for movement resulting from the straps). - Arm the vehicle and slowly raise the throttle to the maximum - Slowly lower the throttle down to zero - Disarm the vehicle @@ -43,7 +43,7 @@ Performing this power compensation is advisable only if all the following statem Perform the test carefully and closely monitor the vibrations. ::: -1. Retrieve the ulog and use the python script [mag_compensation.py](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/sensors/vehicle_magnetometer/mag_compensation/python/mag_compensation.py) to identify the compensation parameters. +7. Retrieve the ulog and use the python script [mag_compensation.py](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/sensors/vehicle_magnetometer/mag_compensation/python/mag_compensation.py) to identify the compensation parameters. ```sh python mag_compensation.py ~/path/to/log/logfile.ulg [--instance ] @@ -57,14 +57,18 @@ Performing this power compensation is advisable only if all the following statem If your log does not contain battery current measurements, you will need to comment out the respective lines in the Python script, such that it does the calculation for thrust only. ::: -1. The script will return the parameter identification for thrust as well as for current and print them to the console. +8. The script will return the parameter identification for thrust as well as for current and print them to the console. The figures that pop up from the script show the "goodness of fit" for each compass instance, and how the data would look if compensated with the suggested values. If a current measurement is available, using the current-compensation usually yields the better results. Here is an example of a log, where the current fit is good, but the thrust parameters are unusable as the relationship is not linear. ![line fit](../../assets/advanced_config/line_fit.png) -1. Once the parameters are identified, the power compensation must be enabled by setting [CAL_MAG_COMP_TYP](../advanced_config/parameter_reference.md#CAL_MAG_COMP_TYP) to 1 (when using thrust parameters) or 2 (when using current parameters). +9. Once the parameters are identified, the power compensation must be enabled by setting [CAL_MAG_COMP_TYP](../advanced_config/parameter_reference.md#CAL_MAG_COMP_TYP) to 1 (when using thrust parameters) or 2 (when using current parameters). Additionally, the compensation parameters for each axis of each compass must be set. ![comp params](../../assets/advanced_config/comp_params.png) + +## See Also + +- [OEM/Factory Configuration](../advanced_config/oem.md) diff --git a/docs/en/advanced_config/ethernet_setup.md b/docs/en/advanced_config/ethernet_setup.md index cc90e4aa3a..62c3be783f 100644 --- a/docs/en/advanced_config/ethernet_setup.md +++ b/docs/en/advanced_config/ethernet_setup.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) diff --git a/docs/en/advanced_config/imu_factory_calibration.md b/docs/en/advanced_config/imu_factory_calibration.md index ea60582bb8..ee242349d1 100644 --- a/docs/en/advanced_config/imu_factory_calibration.md +++ b/docs/en/advanced_config/imu_factory_calibration.md @@ -18,10 +18,10 @@ These values cannot be stored in the [frame configuration](../dev_airframes/addi ## Performing the Factory Calibration 1. Set the parameter [SYS_FAC_CAL_MODE](../advanced_config/parameter_reference.md#SYS_FAC_CAL_MODE) to 1. -1. Perform all IMU calibrations: [accelerometer](../config/accelerometer.md#performing-the-calibration), [gyroscope](../config/gyroscope.md#performing-the-calibration) and [magnetometer](../config/compass.md#performing-the-calibration). -1. Reboot the vehicle. +2. Perform all IMU calibrations: [accelerometer](../config/accelerometer.md#performing-the-calibration), [gyroscope](../config/gyroscope.md#performing-the-calibration) and [magnetometer](../config/compass.md#performing-the-calibration). +3. Reboot the vehicle. This will write all `CAL_ACC*`, `CAL_GYRO*` and `CAL_MAG*` parameters into `/fs/mtd_caldata`. -1. Set the parameter `SYS_FAC_CAL_MODE` back to 0 (default). +4. Set the parameter `SYS_FAC_CAL_MODE` back to 0 (default). ::: info If you only want to factory calibrate the accelerometer and the gyroscope you can set [SYS_FAC_CAL_MODE](../advanced_config/parameter_reference.md#SYS_FAC_CAL_MODE) to 2, in which case the magnetometer is omitted. @@ -32,3 +32,4 @@ Subsequent user calibrations will then take effect as usual (factory calibration ## Further Information - [QGroundControl User Guide > Sensors](https://docs.qgroundcontrol.com/master/en/qgc-user-guide/setup_view/sensors_px4.html) +- [OEM/Factory Configuration](../advanced_config/oem.md) diff --git a/docs/en/advanced_config/index.md b/docs/en/advanced_config/index.md index a01ce3a507..ba77dfd304 100644 --- a/docs/en/advanced_config/index.md +++ b/docs/en/advanced_config/index.md @@ -7,7 +7,7 @@ This topic lists configuration topics that are not particularly vehicle specific - [Finding/Updating Parameters](../advanced_config/parameters.md) - [Full Parameter Reference](../advanced_config/parameter_reference.md) -## Feature configuration +## Feature Configuration - [Using PX4's Navigation Filter (EKF2)](../advanced_config/tuning_the_ecl_ekf.md) - [GNSS-Denied and Degraded Flight](../advanced_config/gnss_degraded_or_denied_flight.md) @@ -17,13 +17,9 @@ This topic lists configuration topics that are not particularly vehicle specific ## OEM/Factory Calibration -- [IMU Factory Calibration](../advanced_config/imu_factory_calibration.md) -- [Sensor Thermal Compensation](../advanced_config/sensor_thermal_calibration.md) -- [Compass Power Compensation](../advanced_config/compass_power_compensation.md) -- [Advanced Controller Orientation](../advanced_config/advanced_flight_controller_orientation_leveling.md) -- [Static Pressure Buildup](../advanced_config/static_pressure_buildup.md) +- [OEM/Factory Configuration](../advanced_config/oem.md) -## Serial port/Ethernet configuration +## Serial port/Ethernet Configuration - [Serial Port Configuration](../peripherals/serial_configuration.md) - [MAVLink Telemetry (OSD/GCS)](../peripherals/mavlink_peripherals.md) diff --git a/docs/en/advanced_config/oem.md b/docs/en/advanced_config/oem.md new file mode 100644 index 0000000000..fedd99c601 --- /dev/null +++ b/docs/en/advanced_config/oem.md @@ -0,0 +1,20 @@ +# OEM/Factory Configuration + +This topic lists configuration and calibration topics that are more relevant to manufacturers/OEMs (though is some cases individual developers may find some relevant). + +- [IMU Factory Calibration](../advanced_config/imu_factory_calibration.md) +- [Sensor Thermal Compensation](../advanced_config/sensor_thermal_calibration.md) +- [Compass Power Compensation](../advanced_config/compass_power_compensation.md) +- [Advanced Controller Orientation](../advanced_config/advanced_flight_controller_orientation_leveling.md) +- [Static Pressure Buildup](../advanced_config/static_pressure_buildup.md) +- [Bootloader Update](../advanced_config/bootloader_update.md) + +## See Also + +- [Standard Configuration](../config/index.md) - Setup essential sensors/features needed for most PX4 vehicles. +- [Advanced Configuration](../advanced_config/index.md) +- Vehicle Config/Tuning: + - [Multicopter Config/Tuning](../config_mc/index.md) + - [Helicopter Config/Tuning](../config_heli/index.md) + - [Fixed-wing Config/Tuning](../config_fw/index.md) + - [VTOL Config/Tuning](../config_vtol/index.md) diff --git a/docs/en/advanced_config/parameter_reference.md b/docs/en/advanced_config/parameter_reference.md index da49de58f9..209ee502e7 100644 --- a/docs/en/advanced_config/parameter_reference.md +++ b/docs/en/advanced_config/parameter_reference.md @@ -12,15 +12,25 @@ If a listed parameter is missing from the Firmware see: [Finding/Updating Parame ## ADC +### ADC_ADS7128_REFV (`FLOAT`) {#ADC_ADS7128_REFV} + +Applied reference Voltage. + +The voltage applied to the ADS7128 board as reference + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 2.35 | 5.5 | 0.01 | 3.3 | V |   | + ### ADC_ADS7953_EN (`INT32`) {#ADC_ADS7953_EN} Enable ADS7953. Enable the driver for the ADS7953 board -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### ADC_ADS7953_REFV (`FLOAT`) {#ADC_ADS7953_REFV} @@ -28,19 +38,9 @@ Applied reference Voltage. The voltage applied to the ADS7953 board as reference -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 2.0 | 3.0 | 0.01 | 2.5 | V | - -### ADC_TLA2528_EN (`INT32`) {#ADC_TLA2528_EN} - -Enable TLA2528. - -Enable the driver for the TLA2528 - -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 2.0 | 3.0 | 0.01 | 2.5 | V |   | ### ADC_TLA2528_REFV (`FLOAT`) {#ADC_TLA2528_REFV} @@ -48,9 +48,9 @@ Applied reference Voltage. The voltage applied to the TLA2528 board as reference -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 2.0 | 3.0 | 0.01 | 2.5 | V | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 2.0 | 3.0 | 0.01 | 2.5 | V |   | ## ADSB @@ -61,9 +61,9 @@ First 4 characters of CALLSIGN. Sets first 4 characters of a total of 8. Valid characters are A-Z, 0-9, " ". Example "PX4 " -> 1347957792 For CALLSIGN shorter than 8 characters use the null terminator at the end '\0'. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### ADSB_CALLSIGN_2 (`INT32`) {#ADSB_CALLSIGN_2} @@ -72,9 +72,9 @@ Second 4 characters of CALLSIGN. Sets second 4 characters of a total of 8. Valid characters are A-Z, 0-9, " " only. Example "TEST" -> 1413829460 For CALLSIGN shorter than 8 characters use the null terminator at the end '\0'. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### ADSB_EMERGC (`INT32`) {#ADSB_EMERGC} @@ -92,9 +92,9 @@ Sets the vehicle emergency state - `5`: Interference - `6`: Downed -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 6 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 6 | | 0 | |   | ### ADSB_EMIT_TYPE (`INT32`) {#ADSB_EMIT_TYPE} @@ -125,9 +125,9 @@ Configure the emitter type of the vehicle. - `18`: ServiceSurf - `19`: PointObstacle -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 15 | | 14 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 19 | | 14 | |   | ### ADSB_GPS_OFF_LAT (`INT32`) {#ADSB_GPS_OFF_LAT} @@ -146,9 +146,9 @@ Sets GPS lataral offset encoding - `6`: LatRight4M - `7`: LatRight6M -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 7 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 7 | | 0 | |   | ### ADSB_GPS_OFF_LON (`INT32`) {#ADSB_GPS_OFF_LON} @@ -161,9 +161,9 @@ Sets GPS longitudinal offset encoding - `0`: NoData - `1`: AppliedBySensor -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 1 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 1 | | 0 | |   | ### ADSB_ICAO_ID (`INT32`) {#ADSB_ICAO_ID} @@ -171,9 +171,9 @@ ADSB-Out ICAO configuration. Defines the ICAO ID of the vehicle -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | -1 | 16777215 | | 1194684 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | -1 | 16777215 | | 1194684 | |   | ### ADSB_ICAO_SPECL (`INT32`) {#ADSB_ICAO_SPECL} @@ -181,9 +181,9 @@ ADSB-In Special ICAO configuration. This vehicle is always tracked. Use 0 to disable. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 16777215 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 16777215 | | 0 | |   | ### ADSB_IDENT (`INT32`) {#ADSB_IDENT} @@ -191,9 +191,9 @@ ADSB-Out Ident Configuration. Enable Identification of Position feature -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### ADSB_LEN_WIDTH (`INT32`) {#ADSB_LEN_WIDTH} @@ -220,9 +220,9 @@ Report the length and width of the vehicle in meters. In most cases, use '1' for - `14`: Len85_Wid80 - `15`: Len85_Wid90 -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 15 | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 15 | | 1 | |   | ### ADSB_LIST_MAX (`INT32`) {#ADSB_LIST_MAX} @@ -230,9 +230,9 @@ ADSB-In Vehicle List Size. Change number of targets to track -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 50 | | 25 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 50 | | 25 | |   | ### ADSB_MAX_SPEED (`INT32`) {#ADSB_MAX_SPEED} @@ -250,9 +250,9 @@ Informs ADSB vehicles of this vehicle's max speed capability - `5`: 1200Kts - `6`: Over1200Kts -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 6 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 6 | | 0 | |   | ### ADSB_SQUAWK (`INT32`) {#ADSB_SQUAWK} @@ -260,350 +260,432 @@ ADSB-Out squawk code configuration. This parameter defines the squawk code. Value should be between 0000 and 7777. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 7777 | | 1200 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 7777 | | 1200 | |   | ## Actuator Outputs ### PCA9685_CENT1 (`INT32`) {#PCA9685_CENT1} + + PCA9685 Output Channel 1 Center Value. Servo Center output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PCA9685_CENT10 (`INT32`) {#PCA9685_CENT10} + + PCA9685 Output Channel 10 Center Value. Servo Center output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PCA9685_CENT11 (`INT32`) {#PCA9685_CENT11} + + PCA9685 Output Channel 11 Center Value. Servo Center output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PCA9685_CENT12 (`INT32`) {#PCA9685_CENT12} + + PCA9685 Output Channel 12 Center Value. Servo Center output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PCA9685_CENT13 (`INT32`) {#PCA9685_CENT13} + + PCA9685 Output Channel 13 Center Value. Servo Center output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PCA9685_CENT14 (`INT32`) {#PCA9685_CENT14} + + PCA9685 Output Channel 14 Center Value. Servo Center output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PCA9685_CENT15 (`INT32`) {#PCA9685_CENT15} + + PCA9685 Output Channel 15 Center Value. Servo Center output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PCA9685_CENT16 (`INT32`) {#PCA9685_CENT16} + + PCA9685 Output Channel 16 Center Value. Servo Center output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PCA9685_CENT2 (`INT32`) {#PCA9685_CENT2} + + PCA9685 Output Channel 2 Center Value. Servo Center output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PCA9685_CENT3 (`INT32`) {#PCA9685_CENT3} + + PCA9685 Output Channel 3 Center Value. Servo Center output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PCA9685_CENT4 (`INT32`) {#PCA9685_CENT4} + + PCA9685 Output Channel 4 Center Value. Servo Center output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PCA9685_CENT5 (`INT32`) {#PCA9685_CENT5} + + PCA9685 Output Channel 5 Center Value. Servo Center output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PCA9685_CENT6 (`INT32`) {#PCA9685_CENT6} + + PCA9685 Output Channel 6 Center Value. Servo Center output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PCA9685_CENT7 (`INT32`) {#PCA9685_CENT7} + + PCA9685 Output Channel 7 Center Value. Servo Center output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PCA9685_CENT8 (`INT32`) {#PCA9685_CENT8} + + PCA9685 Output Channel 8 Center Value. Servo Center output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PCA9685_CENT9 (`INT32`) {#PCA9685_CENT9} + + PCA9685 Output Channel 9 Center Value. Servo Center output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PCA9685_DIS1 (`INT32`) {#PCA9685_DIS1} + + PCA9685 Output Channel 1 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 2200 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 2200 | | 1000 | |   | ### PCA9685_DIS10 (`INT32`) {#PCA9685_DIS10} + + PCA9685 Output Channel 10 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 2200 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 2200 | | 1000 | |   | ### PCA9685_DIS11 (`INT32`) {#PCA9685_DIS11} + + PCA9685 Output Channel 11 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 2200 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 2200 | | 1000 | |   | ### PCA9685_DIS12 (`INT32`) {#PCA9685_DIS12} + + PCA9685 Output Channel 12 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 2200 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 2200 | | 1000 | |   | ### PCA9685_DIS13 (`INT32`) {#PCA9685_DIS13} + + PCA9685 Output Channel 13 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 2200 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 2200 | | 1000 | |   | ### PCA9685_DIS14 (`INT32`) {#PCA9685_DIS14} + + PCA9685 Output Channel 14 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 2200 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 2200 | | 1000 | |   | ### PCA9685_DIS15 (`INT32`) {#PCA9685_DIS15} + + PCA9685 Output Channel 15 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 2200 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 2200 | | 1000 | |   | ### PCA9685_DIS16 (`INT32`) {#PCA9685_DIS16} + + PCA9685 Output Channel 16 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 2200 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 2200 | | 1000 | |   | ### PCA9685_DIS2 (`INT32`) {#PCA9685_DIS2} + + PCA9685 Output Channel 2 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 2200 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 2200 | | 1000 | |   | ### PCA9685_DIS3 (`INT32`) {#PCA9685_DIS3} + + PCA9685 Output Channel 3 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 2200 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 2200 | | 1000 | |   | ### PCA9685_DIS4 (`INT32`) {#PCA9685_DIS4} + + PCA9685 Output Channel 4 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 2200 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 2200 | | 1000 | |   | ### PCA9685_DIS5 (`INT32`) {#PCA9685_DIS5} + + PCA9685 Output Channel 5 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 2200 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 2200 | | 1000 | |   | ### PCA9685_DIS6 (`INT32`) {#PCA9685_DIS6} + + PCA9685 Output Channel 6 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 2200 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 2200 | | 1000 | |   | ### PCA9685_DIS7 (`INT32`) {#PCA9685_DIS7} + + PCA9685 Output Channel 7 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 2200 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 2200 | | 1000 | |   | ### PCA9685_DIS8 (`INT32`) {#PCA9685_DIS8} + + PCA9685 Output Channel 8 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 2200 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 2200 | | 1000 | |   | ### PCA9685_DIS9 (`INT32`) {#PCA9685_DIS9} + + PCA9685 Output Channel 9 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 2200 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 2200 | | 1000 | |   | ### PCA9685_DUTY_EN (`INT32`) {#PCA9685_DUTY_EN} + + Put the selected channels into Duty-Cycle output mode. The driver will output standard pulse-width encoded signal without this bit set. @@ -632,201 +714,254 @@ to 0 and 4096. Other standard params follows the same rule. - `14`: Put CH15 to Duty-Cycle mode - `15`: Put CH16 to Duty-Cycle mode -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 65535 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 65535 | | 0 | |   | ### PCA9685_EN_BUS (`INT32`) {#PCA9685_EN_BUS} + + Enable the PCA9685 output driver. The integer refers to the I2C bus number where PCA9685 is connected. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 10 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 10 | | 0 | |   | ### PCA9685_FAIL1 (`INT32`) {#PCA9685_FAIL1} + + PCA9685 Output Channel 1 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see PCA9685_FUNC1). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PCA9685_FAIL10 (`INT32`) {#PCA9685_FAIL10} + + PCA9685 Output Channel 10 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see PCA9685_FUNC10). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PCA9685_FAIL11 (`INT32`) {#PCA9685_FAIL11} + + PCA9685 Output Channel 11 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see PCA9685_FUNC11). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PCA9685_FAIL12 (`INT32`) {#PCA9685_FAIL12} + + PCA9685 Output Channel 12 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see PCA9685_FUNC12). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PCA9685_FAIL13 (`INT32`) {#PCA9685_FAIL13} + + PCA9685 Output Channel 13 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see PCA9685_FUNC13). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PCA9685_FAIL14 (`INT32`) {#PCA9685_FAIL14} + + PCA9685 Output Channel 14 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see PCA9685_FUNC14). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PCA9685_FAIL15 (`INT32`) {#PCA9685_FAIL15} + + PCA9685 Output Channel 15 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see PCA9685_FUNC15). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PCA9685_FAIL16 (`INT32`) {#PCA9685_FAIL16} + + PCA9685 Output Channel 16 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see PCA9685_FUNC16). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PCA9685_FAIL2 (`INT32`) {#PCA9685_FAIL2} + + PCA9685 Output Channel 2 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see PCA9685_FUNC2). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PCA9685_FAIL3 (`INT32`) {#PCA9685_FAIL3} + + PCA9685 Output Channel 3 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see PCA9685_FUNC3). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PCA9685_FAIL4 (`INT32`) {#PCA9685_FAIL4} + + PCA9685 Output Channel 4 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see PCA9685_FUNC4). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PCA9685_FAIL5 (`INT32`) {#PCA9685_FAIL5} + + PCA9685 Output Channel 5 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see PCA9685_FUNC5). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PCA9685_FAIL6 (`INT32`) {#PCA9685_FAIL6} + + PCA9685 Output Channel 6 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see PCA9685_FUNC6). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PCA9685_FAIL7 (`INT32`) {#PCA9685_FAIL7} + + PCA9685 Output Channel 7 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see PCA9685_FUNC7). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PCA9685_FAIL8 (`INT32`) {#PCA9685_FAIL8} + + PCA9685 Output Channel 8 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see PCA9685_FUNC8). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PCA9685_FAIL9 (`INT32`) {#PCA9685_FAIL9} + + PCA9685 Output Channel 9 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see PCA9685_FUNC9). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PCA9685_FUNC1 (`INT32`) {#PCA9685_FUNC1} + + PCA9685 Output Channel 1 Output Function. Select what should be output on PCA9685 Output Channel 1. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -889,15 +1024,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### PCA9685_FUNC10 (`INT32`) {#PCA9685_FUNC10} + + PCA9685 Output Channel 10 Output Function. Select what should be output on PCA9685 Output Channel 10. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -960,15 +1098,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### PCA9685_FUNC11 (`INT32`) {#PCA9685_FUNC11} + + PCA9685 Output Channel 11 Output Function. Select what should be output on PCA9685 Output Channel 11. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -1031,15 +1172,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### PCA9685_FUNC12 (`INT32`) {#PCA9685_FUNC12} + + PCA9685 Output Channel 12 Output Function. Select what should be output on PCA9685 Output Channel 12. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -1102,15 +1246,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### PCA9685_FUNC13 (`INT32`) {#PCA9685_FUNC13} + + PCA9685 Output Channel 13 Output Function. Select what should be output on PCA9685 Output Channel 13. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -1173,15 +1320,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### PCA9685_FUNC14 (`INT32`) {#PCA9685_FUNC14} + + PCA9685 Output Channel 14 Output Function. Select what should be output on PCA9685 Output Channel 14. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -1244,15 +1394,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### PCA9685_FUNC15 (`INT32`) {#PCA9685_FUNC15} + + PCA9685 Output Channel 15 Output Function. Select what should be output on PCA9685 Output Channel 15. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -1315,15 +1468,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### PCA9685_FUNC16 (`INT32`) {#PCA9685_FUNC16} + + PCA9685 Output Channel 16 Output Function. Select what should be output on PCA9685 Output Channel 16. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -1386,15 +1542,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### PCA9685_FUNC2 (`INT32`) {#PCA9685_FUNC2} + + PCA9685 Output Channel 2 Output Function. Select what should be output on PCA9685 Output Channel 2. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -1457,15 +1616,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### PCA9685_FUNC3 (`INT32`) {#PCA9685_FUNC3} + + PCA9685 Output Channel 3 Output Function. Select what should be output on PCA9685 Output Channel 3. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -1528,15 +1690,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### PCA9685_FUNC4 (`INT32`) {#PCA9685_FUNC4} + + PCA9685 Output Channel 4 Output Function. Select what should be output on PCA9685 Output Channel 4. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -1599,15 +1764,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### PCA9685_FUNC5 (`INT32`) {#PCA9685_FUNC5} + + PCA9685 Output Channel 5 Output Function. Select what should be output on PCA9685 Output Channel 5. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -1670,15 +1838,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### PCA9685_FUNC6 (`INT32`) {#PCA9685_FUNC6} + + PCA9685 Output Channel 6 Output Function. Select what should be output on PCA9685 Output Channel 6. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -1741,15 +1912,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### PCA9685_FUNC7 (`INT32`) {#PCA9685_FUNC7} + + PCA9685 Output Channel 7 Output Function. Select what should be output on PCA9685 Output Channel 7. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -1812,15 +1986,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### PCA9685_FUNC8 (`INT32`) {#PCA9685_FUNC8} + + PCA9685 Output Channel 8 Output Function. Select what should be output on PCA9685 Output Channel 8. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -1883,15 +2060,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### PCA9685_FUNC9 (`INT32`) {#PCA9685_FUNC9} + + PCA9685 Output Channel 9 Output Function. Select what should be output on PCA9685 Output Channel 9. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -1954,342 +2134,410 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### PCA9685_I2C_ADDR (`INT32`) {#PCA9685_I2C_ADDR} + + I2C address of PCA9685. The default address is 0x40 (64). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1 | 127 | | 64 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1 | 127 | | 64 | |   | ### PCA9685_MAX1 (`INT32`) {#PCA9685_MAX1} + + PCA9685 Output Channel 1 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1600 | 2200 | | 1900 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1600 | 2200 | | 1900 | |   | ### PCA9685_MAX10 (`INT32`) {#PCA9685_MAX10} + + PCA9685 Output Channel 10 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1600 | 2200 | | 1900 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1600 | 2200 | | 1900 | |   | ### PCA9685_MAX11 (`INT32`) {#PCA9685_MAX11} + + PCA9685 Output Channel 11 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1600 | 2200 | | 1900 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1600 | 2200 | | 1900 | |   | ### PCA9685_MAX12 (`INT32`) {#PCA9685_MAX12} + + PCA9685 Output Channel 12 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1600 | 2200 | | 1900 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1600 | 2200 | | 1900 | |   | ### PCA9685_MAX13 (`INT32`) {#PCA9685_MAX13} + + PCA9685 Output Channel 13 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1600 | 2200 | | 1900 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1600 | 2200 | | 1900 | |   | ### PCA9685_MAX14 (`INT32`) {#PCA9685_MAX14} + + PCA9685 Output Channel 14 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1600 | 2200 | | 1900 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1600 | 2200 | | 1900 | |   | ### PCA9685_MAX15 (`INT32`) {#PCA9685_MAX15} + + PCA9685 Output Channel 15 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1600 | 2200 | | 1900 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1600 | 2200 | | 1900 | |   | ### PCA9685_MAX16 (`INT32`) {#PCA9685_MAX16} + + PCA9685 Output Channel 16 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1600 | 2200 | | 1900 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1600 | 2200 | | 1900 | |   | ### PCA9685_MAX2 (`INT32`) {#PCA9685_MAX2} + + PCA9685 Output Channel 2 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1600 | 2200 | | 1900 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1600 | 2200 | | 1900 | |   | ### PCA9685_MAX3 (`INT32`) {#PCA9685_MAX3} + + PCA9685 Output Channel 3 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1600 | 2200 | | 1900 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1600 | 2200 | | 1900 | |   | ### PCA9685_MAX4 (`INT32`) {#PCA9685_MAX4} + + PCA9685 Output Channel 4 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1600 | 2200 | | 1900 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1600 | 2200 | | 1900 | |   | ### PCA9685_MAX5 (`INT32`) {#PCA9685_MAX5} + + PCA9685 Output Channel 5 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1600 | 2200 | | 1900 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1600 | 2200 | | 1900 | |   | ### PCA9685_MAX6 (`INT32`) {#PCA9685_MAX6} + + PCA9685 Output Channel 6 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1600 | 2200 | | 1900 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1600 | 2200 | | 1900 | |   | ### PCA9685_MAX7 (`INT32`) {#PCA9685_MAX7} + + PCA9685 Output Channel 7 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1600 | 2200 | | 1900 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1600 | 2200 | | 1900 | |   | ### PCA9685_MAX8 (`INT32`) {#PCA9685_MAX8} + + PCA9685 Output Channel 8 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1600 | 2200 | | 1900 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1600 | 2200 | | 1900 | |   | ### PCA9685_MAX9 (`INT32`) {#PCA9685_MAX9} + + PCA9685 Output Channel 9 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1600 | 2200 | | 1900 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1600 | 2200 | | 1900 | |   | ### PCA9685_MIN1 (`INT32`) {#PCA9685_MIN1} + + PCA9685 Output Channel 1 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 1400 | | 1100 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 1400 | | 1100 | |   | ### PCA9685_MIN10 (`INT32`) {#PCA9685_MIN10} + + PCA9685 Output Channel 10 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 1400 | | 1100 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 1400 | | 1100 | |   | ### PCA9685_MIN11 (`INT32`) {#PCA9685_MIN11} + + PCA9685 Output Channel 11 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 1400 | | 1100 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 1400 | | 1100 | |   | ### PCA9685_MIN12 (`INT32`) {#PCA9685_MIN12} + + PCA9685 Output Channel 12 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 1400 | | 1100 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 1400 | | 1100 | |   | ### PCA9685_MIN13 (`INT32`) {#PCA9685_MIN13} + + PCA9685 Output Channel 13 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 1400 | | 1100 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 1400 | | 1100 | |   | ### PCA9685_MIN14 (`INT32`) {#PCA9685_MIN14} + + PCA9685 Output Channel 14 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 1400 | | 1100 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 1400 | | 1100 | |   | ### PCA9685_MIN15 (`INT32`) {#PCA9685_MIN15} + + PCA9685 Output Channel 15 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 1400 | | 1100 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 1400 | | 1100 | |   | ### PCA9685_MIN16 (`INT32`) {#PCA9685_MIN16} + + PCA9685 Output Channel 16 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 1400 | | 1100 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 1400 | | 1100 | |   | ### PCA9685_MIN2 (`INT32`) {#PCA9685_MIN2} + + PCA9685 Output Channel 2 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 1400 | | 1100 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 1400 | | 1100 | |   | ### PCA9685_MIN3 (`INT32`) {#PCA9685_MIN3} + + PCA9685 Output Channel 3 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 1400 | | 1100 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 1400 | | 1100 | |   | ### PCA9685_MIN4 (`INT32`) {#PCA9685_MIN4} + + PCA9685 Output Channel 4 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 1400 | | 1100 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 1400 | | 1100 | |   | ### PCA9685_MIN5 (`INT32`) {#PCA9685_MIN5} + + PCA9685 Output Channel 5 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 1400 | | 1100 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 1400 | | 1100 | |   | ### PCA9685_MIN6 (`INT32`) {#PCA9685_MIN6} + + PCA9685 Output Channel 6 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 1400 | | 1100 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 1400 | | 1100 | |   | ### PCA9685_MIN7 (`INT32`) {#PCA9685_MIN7} + + PCA9685 Output Channel 7 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 1400 | | 1100 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 1400 | | 1100 | |   | ### PCA9685_MIN8 (`INT32`) {#PCA9685_MIN8} + + PCA9685 Output Channel 8 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 1400 | | 1100 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 1400 | | 1100 | |   | ### PCA9685_MIN9 (`INT32`) {#PCA9685_MIN9} + + PCA9685 Output Channel 9 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 1400 | | 1100 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 1400 | | 1100 | |   | ### PCA9685_PWM_FREQ (`FLOAT`) {#PCA9685_PWM_FREQ} + + PWM cycle frequency. Controls the PWM frequency at timing perspective. @@ -2300,12 +2548,14 @@ This parameter should be set to the same value as PWM update rate in most case. This parameter MUST NOT exceed upper limit of 400.0, if any outputs as generic 1000~2000us pulse width is desired. Frequency higher than 400 only makes sense in duty-cycle mode. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 23.8 | 1525.87 | | 50.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 23.8 | 1525.87 | | 50.0 | |   | ### PCA9685_REV (`INT32`) {#PCA9685_REV} + + Reverse Output Range for PCA9685 Output. Allows to reverse the output range for each channel. @@ -2330,12 +2580,14 @@ Note: this is only useful for servos. - `14`: PCA9685 Output Channel 15 - `15`: PCA9685 Output Channel 16 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 65535 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 65535 | | 0 | |   | ### PCA9685_SCHD_HZ (`FLOAT`) {#PCA9685_SCHD_HZ} + + PWM update rate. Controls the update rate of PWM output. @@ -2343,367 +2595,458 @@ Flight Controller will inform those numbers of update events in a second, to PCA Higher update rate will consume more I2C bandwidth, which may even lead to worse output latency, or completely block I2C bus. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 50.0 | 400.0 | | 50.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 50.0 | 400.0 | | 50.0 | |   | ### PWM_AUX_CENT1 (`INT32`) {#PWM_AUX_CENT1} + + PWM Aux 1 Center Value. Servo Center output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PWM_AUX_CENT10 (`INT32`) {#PWM_AUX_CENT10} + + PWM Capture 2 Center Value. Servo Center output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PWM_AUX_CENT11 (`INT32`) {#PWM_AUX_CENT11} + + PWM Capture 3 Center Value. Servo Center output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PWM_AUX_CENT2 (`INT32`) {#PWM_AUX_CENT2} + + PWM Aux 2 Center Value. Servo Center output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PWM_AUX_CENT3 (`INT32`) {#PWM_AUX_CENT3} + + PWM Aux 3 Center Value. Servo Center output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PWM_AUX_CENT4 (`INT32`) {#PWM_AUX_CENT4} + + PWM Aux 4 Center Value. Servo Center output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PWM_AUX_CENT5 (`INT32`) {#PWM_AUX_CENT5} + + PWM Aux 5 Center Value. Servo Center output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PWM_AUX_CENT6 (`INT32`) {#PWM_AUX_CENT6} + + PWM Aux 6 Center Value. Servo Center output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PWM_AUX_CENT7 (`INT32`) {#PWM_AUX_CENT7} + + PWM Aux 7 Center Value. Servo Center output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PWM_AUX_CENT8 (`INT32`) {#PWM_AUX_CENT8} + + PWM Aux 8 Center Value. Servo Center output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PWM_AUX_CENT9 (`INT32`) {#PWM_AUX_CENT9} + + PWM Capture 1 Center Value. Servo Center output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PWM_AUX_DIS1 (`INT32`) {#PWM_AUX_DIS1} + + PWM Aux 1 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 2200 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 2200 | | 1000 | |   | ### PWM_AUX_DIS10 (`INT32`) {#PWM_AUX_DIS10} + + PWM Capture 2 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 2200 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 2200 | | 1000 | |   | ### PWM_AUX_DIS11 (`INT32`) {#PWM_AUX_DIS11} + + PWM Capture 3 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 2200 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 2200 | | 1000 | |   | ### PWM_AUX_DIS2 (`INT32`) {#PWM_AUX_DIS2} + + PWM Aux 2 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 2200 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 2200 | | 1000 | |   | ### PWM_AUX_DIS3 (`INT32`) {#PWM_AUX_DIS3} + + PWM Aux 3 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 2200 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 2200 | | 1000 | |   | ### PWM_AUX_DIS4 (`INT32`) {#PWM_AUX_DIS4} + + PWM Aux 4 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 2200 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 2200 | | 1000 | |   | ### PWM_AUX_DIS5 (`INT32`) {#PWM_AUX_DIS5} + + PWM Aux 5 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 2200 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 2200 | | 1000 | |   | ### PWM_AUX_DIS6 (`INT32`) {#PWM_AUX_DIS6} + + PWM Aux 6 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 2200 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 2200 | | 1000 | |   | ### PWM_AUX_DIS7 (`INT32`) {#PWM_AUX_DIS7} + + PWM Aux 7 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 2200 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 2200 | | 1000 | |   | ### PWM_AUX_DIS8 (`INT32`) {#PWM_AUX_DIS8} + + PWM Aux 8 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 2200 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 2200 | | 1000 | |   | ### PWM_AUX_DIS9 (`INT32`) {#PWM_AUX_DIS9} + + PWM Capture 1 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 2200 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 2200 | | 1000 | |   | ### PWM_AUX_FAIL1 (`INT32`) {#PWM_AUX_FAIL1} + + PWM Aux 1 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see PWM_AUX_FUNC1). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PWM_AUX_FAIL10 (`INT32`) {#PWM_AUX_FAIL10} + + PWM Capture 2 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see PWM_AUX_FUNC2). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PWM_AUX_FAIL11 (`INT32`) {#PWM_AUX_FAIL11} + + PWM Capture 3 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see PWM_AUX_FUNC3). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PWM_AUX_FAIL2 (`INT32`) {#PWM_AUX_FAIL2} + + PWM Aux 2 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see PWM_AUX_FUNC2). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PWM_AUX_FAIL3 (`INT32`) {#PWM_AUX_FAIL3} + + PWM Aux 3 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see PWM_AUX_FUNC3). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PWM_AUX_FAIL4 (`INT32`) {#PWM_AUX_FAIL4} + + PWM Aux 4 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see PWM_AUX_FUNC4). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PWM_AUX_FAIL5 (`INT32`) {#PWM_AUX_FAIL5} + + PWM Aux 5 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see PWM_AUX_FUNC5). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PWM_AUX_FAIL6 (`INT32`) {#PWM_AUX_FAIL6} + + PWM Aux 6 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see PWM_AUX_FUNC6). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PWM_AUX_FAIL7 (`INT32`) {#PWM_AUX_FAIL7} + + PWM Aux 7 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see PWM_AUX_FUNC7). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PWM_AUX_FAIL8 (`INT32`) {#PWM_AUX_FAIL8} + + PWM Aux 8 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see PWM_AUX_FUNC8). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PWM_AUX_FAIL9 (`INT32`) {#PWM_AUX_FAIL9} + + PWM Capture 1 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see PWM_AUX_FUNC1). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PWM_AUX_FUNC1 (`INT32`) {#PWM_AUX_FUNC1} + + PWM Aux 1 Output Function. Select what should be output on PWM Aux 1. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -2770,15 +3113,18 @@ The default failsafe value is set according to the selected function: - `2064`: PPS Input - `2070`: RPM Input -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### PWM_AUX_FUNC10 (`INT32`) {#PWM_AUX_FUNC10} + + PWM Capture 2 Output Function. Select what should be output on PWM Capture 2. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -2845,15 +3191,18 @@ The default failsafe value is set according to the selected function: - `2064`: PPS Input - `2070`: RPM Input -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### PWM_AUX_FUNC11 (`INT32`) {#PWM_AUX_FUNC11} + + PWM Capture 3 Output Function. Select what should be output on PWM Capture 3. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -2920,15 +3269,18 @@ The default failsafe value is set according to the selected function: - `2064`: PPS Input - `2070`: RPM Input -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### PWM_AUX_FUNC2 (`INT32`) {#PWM_AUX_FUNC2} + + PWM Aux 2 Output Function. Select what should be output on PWM Aux 2. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -2995,15 +3347,18 @@ The default failsafe value is set according to the selected function: - `2064`: PPS Input - `2070`: RPM Input -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### PWM_AUX_FUNC3 (`INT32`) {#PWM_AUX_FUNC3} + + PWM Aux 3 Output Function. Select what should be output on PWM Aux 3. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -3070,15 +3425,18 @@ The default failsafe value is set according to the selected function: - `2064`: PPS Input - `2070`: RPM Input -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### PWM_AUX_FUNC4 (`INT32`) {#PWM_AUX_FUNC4} + + PWM Aux 4 Output Function. Select what should be output on PWM Aux 4. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -3145,15 +3503,18 @@ The default failsafe value is set according to the selected function: - `2064`: PPS Input - `2070`: RPM Input -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### PWM_AUX_FUNC5 (`INT32`) {#PWM_AUX_FUNC5} + + PWM Aux 5 Output Function. Select what should be output on PWM Aux 5. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -3220,15 +3581,18 @@ The default failsafe value is set according to the selected function: - `2064`: PPS Input - `2070`: RPM Input -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### PWM_AUX_FUNC6 (`INT32`) {#PWM_AUX_FUNC6} + + PWM Aux 6 Output Function. Select what should be output on PWM Aux 6. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -3295,15 +3659,18 @@ The default failsafe value is set according to the selected function: - `2064`: PPS Input - `2070`: RPM Input -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### PWM_AUX_FUNC7 (`INT32`) {#PWM_AUX_FUNC7} + + PWM Aux 7 Output Function. Select what should be output on PWM Aux 7. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -3370,15 +3737,18 @@ The default failsafe value is set according to the selected function: - `2064`: PPS Input - `2070`: RPM Input -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### PWM_AUX_FUNC8 (`INT32`) {#PWM_AUX_FUNC8} + + PWM Aux 8 Output Function. Select what should be output on PWM Aux 8. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -3445,15 +3815,18 @@ The default failsafe value is set according to the selected function: - `2064`: PPS Input - `2070`: RPM Input -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### PWM_AUX_FUNC9 (`INT32`) {#PWM_AUX_FUNC9} + + PWM Capture 1 Output Function. Select what should be output on PWM Capture 1. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -3520,232 +3893,278 @@ The default failsafe value is set according to the selected function: - `2064`: PPS Input - `2070`: RPM Input -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### PWM_AUX_MAX1 (`INT32`) {#PWM_AUX_MAX1} + + PWM Aux 1 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1600 | 2200 | | 2000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1600 | 2200 | | 2000 | |   | ### PWM_AUX_MAX10 (`INT32`) {#PWM_AUX_MAX10} + + PWM Capture 2 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1600 | 2200 | | 2000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1600 | 2200 | | 2000 | |   | ### PWM_AUX_MAX11 (`INT32`) {#PWM_AUX_MAX11} + + PWM Capture 3 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1600 | 2200 | | 2000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1600 | 2200 | | 2000 | |   | ### PWM_AUX_MAX2 (`INT32`) {#PWM_AUX_MAX2} + + PWM Aux 2 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1600 | 2200 | | 2000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1600 | 2200 | | 2000 | |   | ### PWM_AUX_MAX3 (`INT32`) {#PWM_AUX_MAX3} + + PWM Aux 3 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1600 | 2200 | | 2000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1600 | 2200 | | 2000 | |   | ### PWM_AUX_MAX4 (`INT32`) {#PWM_AUX_MAX4} + + PWM Aux 4 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1600 | 2200 | | 2000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1600 | 2200 | | 2000 | |   | ### PWM_AUX_MAX5 (`INT32`) {#PWM_AUX_MAX5} + + PWM Aux 5 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1600 | 2200 | | 2000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1600 | 2200 | | 2000 | |   | ### PWM_AUX_MAX6 (`INT32`) {#PWM_AUX_MAX6} + + PWM Aux 6 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1600 | 2200 | | 2000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1600 | 2200 | | 2000 | |   | ### PWM_AUX_MAX7 (`INT32`) {#PWM_AUX_MAX7} + + PWM Aux 7 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1600 | 2200 | | 2000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1600 | 2200 | | 2000 | |   | ### PWM_AUX_MAX8 (`INT32`) {#PWM_AUX_MAX8} + + PWM Aux 8 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1600 | 2200 | | 2000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1600 | 2200 | | 2000 | |   | ### PWM_AUX_MAX9 (`INT32`) {#PWM_AUX_MAX9} + + PWM Capture 1 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1600 | 2200 | | 2000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1600 | 2200 | | 2000 | |   | ### PWM_AUX_MIN1 (`INT32`) {#PWM_AUX_MIN1} + + PWM Aux 1 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 1400 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 1400 | | 1000 | |   | ### PWM_AUX_MIN10 (`INT32`) {#PWM_AUX_MIN10} + + PWM Capture 2 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 1400 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 1400 | | 1000 | |   | ### PWM_AUX_MIN11 (`INT32`) {#PWM_AUX_MIN11} + + PWM Capture 3 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 1400 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 1400 | | 1000 | |   | ### PWM_AUX_MIN2 (`INT32`) {#PWM_AUX_MIN2} + + PWM Aux 2 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 1400 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 1400 | | 1000 | |   | ### PWM_AUX_MIN3 (`INT32`) {#PWM_AUX_MIN3} + + PWM Aux 3 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 1400 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 1400 | | 1000 | |   | ### PWM_AUX_MIN4 (`INT32`) {#PWM_AUX_MIN4} + + PWM Aux 4 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 1400 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 1400 | | 1000 | |   | ### PWM_AUX_MIN5 (`INT32`) {#PWM_AUX_MIN5} + + PWM Aux 5 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 1400 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 1400 | | 1000 | |   | ### PWM_AUX_MIN6 (`INT32`) {#PWM_AUX_MIN6} + + PWM Aux 6 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 1400 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 1400 | | 1000 | |   | ### PWM_AUX_MIN7 (`INT32`) {#PWM_AUX_MIN7} + + PWM Aux 7 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 1400 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 1400 | | 1000 | |   | ### PWM_AUX_MIN8 (`INT32`) {#PWM_AUX_MIN8} + + PWM Aux 8 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 1400 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 1400 | | 1000 | |   | ### PWM_AUX_MIN9 (`INT32`) {#PWM_AUX_MIN9} + + PWM Capture 1 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 1400 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 1400 | | 1000 | |   | ### PWM_AUX_REV (`INT32`) {#PWM_AUX_REV} + + Reverse Output Range for PWM AUX. Allows to reverse the output range for each channel. @@ -3765,19 +4184,27 @@ Note: this is only useful for servos. - `9`: PWM Capture 2 - `10`: PWM Capture 3 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 2047 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 2047 | | 0 | |   | ### PWM_AUX_TIM0 (`INT32`) {#PWM_AUX_TIM0} + + + + Output Protocol Configuration for PWM Aux 1-4. -Select which Output Protocol to use for outputs PWM Aux 1-4. +Select the output protocol for PWM Aux 1-4: PWM, OneShot, DShot, or Bidirectional DShot. + Custom PWM rates can be used by directly setting any value >0. **Values:** +- `-8`: BDShot150 +- `-7`: BDShot300 +- `-6`: BDShot600 - `-5`: DShot150 - `-4`: DShot300 - `-3`: DShot600 @@ -3787,15 +4214,20 @@ Custom PWM rates can be used by directly setting any value >0. - `200`: PWM 200 Hz - `400`: PWM 400 Hz -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 400 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 400 | |   | ### PWM_AUX_TIM1 (`INT32`) {#PWM_AUX_TIM1} + + + + Output Protocol Configuration for PWM Aux 5-6. -Select which Output Protocol to use for outputs PWM Aux 5-6. +Select the output protocol for PWM Aux 5-6: PWM, OneShot, DShot, or Bidirectional DShot. + Custom PWM rates can be used by directly setting any value >0. **Values:** @@ -3806,15 +4238,20 @@ Custom PWM rates can be used by directly setting any value >0. - `200`: PWM 200 Hz - `400`: PWM 400 Hz -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 400 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 400 | |   | ### PWM_AUX_TIM2 (`INT32`) {#PWM_AUX_TIM2} + + + + Output Protocol Configuration for PWM Aux 7-8. -Select which Output Protocol to use for outputs PWM Aux 7-8. +Select the output protocol for PWM Aux 7-8: PWM, OneShot, DShot, or Bidirectional DShot. + Custom PWM rates can be used by directly setting any value >0. **Values:** @@ -3825,15 +4262,20 @@ Custom PWM rates can be used by directly setting any value >0. - `200`: PWM 200 Hz - `400`: PWM 400 Hz -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 400 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 400 | |   | ### PWM_AUX_TIM3 (`INT32`) {#PWM_AUX_TIM3} + + + + Output Protocol Configuration for PWM Capture 1-3. -Select which Output Protocol to use for outputs PWM Capture 1-3. +Select the output protocol for PWM Capture 1-3: PWM, OneShot, DShot, or Bidirectional DShot. + Custom PWM rates can be used by directly setting any value >0. **Values:** @@ -3844,191 +4286,338 @@ Custom PWM rates can be used by directly setting any value >0. - `200`: PWM 200 Hz - `400`: PWM 400 Hz -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 400 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 400 | |   | + +### PWM_MAIN_CENT1 (`INT32`) {#PWM_MAIN_CENT1} + + + +MAIN 1 Center Value. + +Servo Center output value (when not disarmed). + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | + +### PWM_MAIN_CENT2 (`INT32`) {#PWM_MAIN_CENT2} + + + +MAIN 2 Center Value. + +Servo Center output value (when not disarmed). + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | + +### PWM_MAIN_CENT3 (`INT32`) {#PWM_MAIN_CENT3} + + + +MAIN 3 Center Value. + +Servo Center output value (when not disarmed). + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | + +### PWM_MAIN_CENT4 (`INT32`) {#PWM_MAIN_CENT4} + + + +MAIN 4 Center Value. + +Servo Center output value (when not disarmed). + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | + +### PWM_MAIN_CENT5 (`INT32`) {#PWM_MAIN_CENT5} + + + +MAIN 5 Center Value. + +Servo Center output value (when not disarmed). + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | + +### PWM_MAIN_CENT6 (`INT32`) {#PWM_MAIN_CENT6} + + + +MAIN 6 Center Value. + +Servo Center output value (when not disarmed). + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | + +### PWM_MAIN_CENT7 (`INT32`) {#PWM_MAIN_CENT7} + + + +MAIN 7 Center Value. + +Servo Center output value (when not disarmed). + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | + +### PWM_MAIN_CENT8 (`INT32`) {#PWM_MAIN_CENT8} + + + +MAIN 8 Center Value. + +Servo Center output value (when not disarmed). + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PWM_MAIN_DIS1 (`INT32`) {#PWM_MAIN_DIS1} + + MAIN 1 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 2200 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 2200 | | 1000 | |   | ### PWM_MAIN_DIS2 (`INT32`) {#PWM_MAIN_DIS2} + + MAIN 2 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 2200 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 2200 | | 1000 | |   | ### PWM_MAIN_DIS3 (`INT32`) {#PWM_MAIN_DIS3} + + MAIN 3 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 2200 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 2200 | | 1000 | |   | ### PWM_MAIN_DIS4 (`INT32`) {#PWM_MAIN_DIS4} + + MAIN 4 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 2200 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 2200 | | 1000 | |   | ### PWM_MAIN_DIS5 (`INT32`) {#PWM_MAIN_DIS5} + + MAIN 5 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 2200 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 2200 | | 1000 | |   | ### PWM_MAIN_DIS6 (`INT32`) {#PWM_MAIN_DIS6} + + MAIN 6 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 2200 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 2200 | | 1000 | |   | ### PWM_MAIN_DIS7 (`INT32`) {#PWM_MAIN_DIS7} + + MAIN 7 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 2200 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 2200 | | 1000 | |   | ### PWM_MAIN_DIS8 (`INT32`) {#PWM_MAIN_DIS8} + + MAIN 8 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 2200 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 2200 | | 1000 | |   | ### PWM_MAIN_FAIL1 (`INT32`) {#PWM_MAIN_FAIL1} + + MAIN 1 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see PWM_MAIN_FUNC1). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PWM_MAIN_FAIL2 (`INT32`) {#PWM_MAIN_FAIL2} + + MAIN 2 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see PWM_MAIN_FUNC2). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PWM_MAIN_FAIL3 (`INT32`) {#PWM_MAIN_FAIL3} + + MAIN 3 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see PWM_MAIN_FUNC3). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PWM_MAIN_FAIL4 (`INT32`) {#PWM_MAIN_FAIL4} + + MAIN 4 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see PWM_MAIN_FUNC4). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PWM_MAIN_FAIL5 (`INT32`) {#PWM_MAIN_FAIL5} + + MAIN 5 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see PWM_MAIN_FUNC5). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PWM_MAIN_FAIL6 (`INT32`) {#PWM_MAIN_FAIL6} + + MAIN 6 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see PWM_MAIN_FUNC6). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PWM_MAIN_FAIL7 (`INT32`) {#PWM_MAIN_FAIL7} + + MAIN 7 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see PWM_MAIN_FUNC7). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PWM_MAIN_FAIL8 (`INT32`) {#PWM_MAIN_FAIL8} + + MAIN 8 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see PWM_MAIN_FUNC8). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 2200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 2200 | | -1 | |   | ### PWM_MAIN_FUNC1 (`INT32`) {#PWM_MAIN_FUNC1} + + MAIN 1 Output Function. Select what should be output on MAIN 1. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -4091,15 +4680,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### PWM_MAIN_FUNC2 (`INT32`) {#PWM_MAIN_FUNC2} + + MAIN 2 Output Function. Select what should be output on MAIN 2. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -4162,15 +4754,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### PWM_MAIN_FUNC3 (`INT32`) {#PWM_MAIN_FUNC3} + + MAIN 3 Output Function. Select what should be output on MAIN 3. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -4233,15 +4828,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### PWM_MAIN_FUNC4 (`INT32`) {#PWM_MAIN_FUNC4} + + MAIN 4 Output Function. Select what should be output on MAIN 4. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -4304,15 +4902,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### PWM_MAIN_FUNC5 (`INT32`) {#PWM_MAIN_FUNC5} + + MAIN 5 Output Function. Select what should be output on MAIN 5. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -4375,15 +4976,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### PWM_MAIN_FUNC6 (`INT32`) {#PWM_MAIN_FUNC6} + + MAIN 6 Output Function. Select what should be output on MAIN 6. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -4446,15 +5050,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### PWM_MAIN_FUNC7 (`INT32`) {#PWM_MAIN_FUNC7} + + MAIN 7 Output Function. Select what should be output on MAIN 7. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -4517,15 +5124,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### PWM_MAIN_FUNC8 (`INT32`) {#PWM_MAIN_FUNC8} + + MAIN 8 Output Function. Select what should be output on MAIN 8. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -4588,172 +5198,206 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### PWM_MAIN_MAX1 (`INT32`) {#PWM_MAIN_MAX1} + + MAIN 1 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1600 | 2200 | | 2000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1600 | 2200 | | 2000 | |   | ### PWM_MAIN_MAX2 (`INT32`) {#PWM_MAIN_MAX2} + + MAIN 2 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1600 | 2200 | | 2000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1600 | 2200 | | 2000 | |   | ### PWM_MAIN_MAX3 (`INT32`) {#PWM_MAIN_MAX3} + + MAIN 3 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1600 | 2200 | | 2000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1600 | 2200 | | 2000 | |   | ### PWM_MAIN_MAX4 (`INT32`) {#PWM_MAIN_MAX4} + + MAIN 4 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1600 | 2200 | | 2000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1600 | 2200 | | 2000 | |   | ### PWM_MAIN_MAX5 (`INT32`) {#PWM_MAIN_MAX5} + + MAIN 5 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1600 | 2200 | | 2000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1600 | 2200 | | 2000 | |   | ### PWM_MAIN_MAX6 (`INT32`) {#PWM_MAIN_MAX6} + + MAIN 6 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1600 | 2200 | | 2000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1600 | 2200 | | 2000 | |   | ### PWM_MAIN_MAX7 (`INT32`) {#PWM_MAIN_MAX7} + + MAIN 7 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1600 | 2200 | | 2000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1600 | 2200 | | 2000 | |   | ### PWM_MAIN_MAX8 (`INT32`) {#PWM_MAIN_MAX8} + + MAIN 8 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1600 | 2200 | | 2000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1600 | 2200 | | 2000 | |   | ### PWM_MAIN_MIN1 (`INT32`) {#PWM_MAIN_MIN1} + + MAIN 1 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 1400 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 1400 | | 1000 | |   | ### PWM_MAIN_MIN2 (`INT32`) {#PWM_MAIN_MIN2} + + MAIN 2 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 1400 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 1400 | | 1000 | |   | ### PWM_MAIN_MIN3 (`INT32`) {#PWM_MAIN_MIN3} + + MAIN 3 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 1400 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 1400 | | 1000 | |   | ### PWM_MAIN_MIN4 (`INT32`) {#PWM_MAIN_MIN4} + + MAIN 4 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 1400 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 1400 | | 1000 | |   | ### PWM_MAIN_MIN5 (`INT32`) {#PWM_MAIN_MIN5} + + MAIN 5 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 1400 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 1400 | | 1000 | |   | ### PWM_MAIN_MIN6 (`INT32`) {#PWM_MAIN_MIN6} + + MAIN 6 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 1400 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 1400 | | 1000 | |   | ### PWM_MAIN_MIN7 (`INT32`) {#PWM_MAIN_MIN7} + + MAIN 7 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 1400 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 1400 | | 1000 | |   | ### PWM_MAIN_MIN8 (`INT32`) {#PWM_MAIN_MIN8} + + MAIN 8 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800 | 1400 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800 | 1400 | | 1000 | |   | ### PWM_MAIN_REV (`INT32`) {#PWM_MAIN_REV} + + Reverse Output Range for PWM MAIN. Allows to reverse the output range for each channel. @@ -4770,15 +5414,20 @@ Note: this is only useful for servos. - `6`: MAIN 7 - `7`: MAIN 8 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 255 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 255 | | 0 | |   | ### PWM_MAIN_TIM0 (`INT32`) {#PWM_MAIN_TIM0} + + + + Output Protocol Configuration for MAIN 1-2. Select which Output Protocol to use for outputs MAIN 1-2. + Custom PWM rates can be used by directly setting any value >0. **Values:** @@ -4789,15 +5438,20 @@ Custom PWM rates can be used by directly setting any value >0. - `200`: PWM 200 Hz - `400`: PWM 400 Hz -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 400 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 400 | |   | ### PWM_MAIN_TIM1 (`INT32`) {#PWM_MAIN_TIM1} + + + + Output Protocol Configuration for MAIN 3-4. Select which Output Protocol to use for outputs MAIN 3-4. + Custom PWM rates can be used by directly setting any value >0. **Values:** @@ -4808,15 +5462,20 @@ Custom PWM rates can be used by directly setting any value >0. - `200`: PWM 200 Hz - `400`: PWM 400 Hz -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 400 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 400 | |   | ### PWM_MAIN_TIM2 (`INT32`) {#PWM_MAIN_TIM2} + + + + Output Protocol Configuration for MAIN 5-8. Select which Output Protocol to use for outputs MAIN 5-8. + Custom PWM rates can be used by directly setting any value >0. **Values:** @@ -4827,59 +5486,74 @@ Custom PWM rates can be used by directly setting any value >0. - `200`: PWM 200 Hz - `400`: PWM 400 Hz -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 400 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 400 | |   | ### RBCLW_DIS1 (`INT32`) {#RBCLW_DIS1} + + Roboclaw Driver Channel 1 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 128 | 128 | | 128 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 127 | 127 | | 127 | |   | ### RBCLW_DIS2 (`INT32`) {#RBCLW_DIS2} + + Roboclaw Driver Channel 2 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 128 | 128 | | 128 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 127 | 127 | | 127 | |   | ### RBCLW_FAIL1 (`INT32`) {#RBCLW_FAIL1} + + Roboclaw Driver Channel 1 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see RBCLW_FUNC1). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 257 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 257 | | -1 | |   | ### RBCLW_FAIL2 (`INT32`) {#RBCLW_FAIL2} + + Roboclaw Driver Channel 2 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see RBCLW_FUNC2). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 257 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 257 | | -1 | |   | ### RBCLW_FUNC1 (`INT32`) {#RBCLW_FUNC1} + + Roboclaw Driver Channel 1 Output Function. Select what should be output on Roboclaw Driver Channel 1. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -4942,15 +5616,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### RBCLW_FUNC2 (`INT32`) {#RBCLW_FUNC2} + + Roboclaw Driver Channel 2 Output Function. Select what should be output on Roboclaw Driver Channel 2. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -5013,52 +5690,62 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### RBCLW_MAX1 (`INT32`) {#RBCLW_MAX1} + + Roboclaw Driver Channel 1 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 128 | 256 | | 256 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 127 | 254 | | 254 | |   | ### RBCLW_MAX2 (`INT32`) {#RBCLW_MAX2} + + Roboclaw Driver Channel 2 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 128 | 256 | | 256 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 127 | 254 | | 254 | |   | ### RBCLW_MIN1 (`INT32`) {#RBCLW_MIN1} + + Roboclaw Driver Channel 1 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1 | 128 | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 127 | | 0 | |   | ### RBCLW_MIN2 (`INT32`) {#RBCLW_MIN2} + + Roboclaw Driver Channel 2 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1 | 128 | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 127 | | 0 | |   | ### RBCLW_REV (`INT32`) {#RBCLW_REV} + + Reverse Output Range for Roboclaw Driver. Allows to reverse the output range for each channel. @@ -5069,367 +5756,466 @@ Note: this is only useful for servos. - `0`: Roboclaw Driver Channel 1 - `1`: Roboclaw Driver Channel 2 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 3 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 3 | | 0 | |   | ### SIM_GZ_EC_DIS1 (`INT32`) {#SIM_GZ_EC_DIS1} + + SIM_GZ ESC 1 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 0 | |   | ### SIM_GZ_EC_DIS10 (`INT32`) {#SIM_GZ_EC_DIS10} + + SIM_GZ ESC 10 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 0 | |   | ### SIM_GZ_EC_DIS11 (`INT32`) {#SIM_GZ_EC_DIS11} + + SIM_GZ ESC 11 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 0 | |   | ### SIM_GZ_EC_DIS12 (`INT32`) {#SIM_GZ_EC_DIS12} + + SIM_GZ ESC 12 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 0 | |   | ### SIM_GZ_EC_DIS13 (`INT32`) {#SIM_GZ_EC_DIS13} + + SIM_GZ ESC 13 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 0 | |   | ### SIM_GZ_EC_DIS14 (`INT32`) {#SIM_GZ_EC_DIS14} + + SIM_GZ ESC 14 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 0 | |   | ### SIM_GZ_EC_DIS15 (`INT32`) {#SIM_GZ_EC_DIS15} + + SIM_GZ ESC 15 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 0 | |   | ### SIM_GZ_EC_DIS16 (`INT32`) {#SIM_GZ_EC_DIS16} + + SIM_GZ ESC 16 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 0 | |   | ### SIM_GZ_EC_DIS2 (`INT32`) {#SIM_GZ_EC_DIS2} + + SIM_GZ ESC 2 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 0 | |   | ### SIM_GZ_EC_DIS3 (`INT32`) {#SIM_GZ_EC_DIS3} + + SIM_GZ ESC 3 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 0 | |   | ### SIM_GZ_EC_DIS4 (`INT32`) {#SIM_GZ_EC_DIS4} + + SIM_GZ ESC 4 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 0 | |   | ### SIM_GZ_EC_DIS5 (`INT32`) {#SIM_GZ_EC_DIS5} + + SIM_GZ ESC 5 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 0 | |   | ### SIM_GZ_EC_DIS6 (`INT32`) {#SIM_GZ_EC_DIS6} + + SIM_GZ ESC 6 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 0 | |   | ### SIM_GZ_EC_DIS7 (`INT32`) {#SIM_GZ_EC_DIS7} + + SIM_GZ ESC 7 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 0 | |   | ### SIM_GZ_EC_DIS8 (`INT32`) {#SIM_GZ_EC_DIS8} + + SIM_GZ ESC 8 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 0 | |   | ### SIM_GZ_EC_DIS9 (`INT32`) {#SIM_GZ_EC_DIS9} + + SIM_GZ ESC 9 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 0 | |   | ### SIM_GZ_EC_FAIL1 (`INT32`) {#SIM_GZ_EC_FAIL1} + + SIM_GZ ESC 1 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see SIM_GZ_EC_FUNC1). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 1000 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1000 | | -1 | |   | ### SIM_GZ_EC_FAIL10 (`INT32`) {#SIM_GZ_EC_FAIL10} + + SIM_GZ ESC 10 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see SIM_GZ_EC_FUNC10). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 1000 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1000 | | -1 | |   | ### SIM_GZ_EC_FAIL11 (`INT32`) {#SIM_GZ_EC_FAIL11} + + SIM_GZ ESC 11 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see SIM_GZ_EC_FUNC11). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 1000 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1000 | | -1 | |   | ### SIM_GZ_EC_FAIL12 (`INT32`) {#SIM_GZ_EC_FAIL12} + + SIM_GZ ESC 12 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see SIM_GZ_EC_FUNC12). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 1000 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1000 | | -1 | |   | ### SIM_GZ_EC_FAIL13 (`INT32`) {#SIM_GZ_EC_FAIL13} + + SIM_GZ ESC 13 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see SIM_GZ_EC_FUNC13). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 1000 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1000 | | -1 | |   | ### SIM_GZ_EC_FAIL14 (`INT32`) {#SIM_GZ_EC_FAIL14} + + SIM_GZ ESC 14 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see SIM_GZ_EC_FUNC14). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 1000 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1000 | | -1 | |   | ### SIM_GZ_EC_FAIL15 (`INT32`) {#SIM_GZ_EC_FAIL15} + + SIM_GZ ESC 15 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see SIM_GZ_EC_FUNC15). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 1000 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1000 | | -1 | |   | ### SIM_GZ_EC_FAIL16 (`INT32`) {#SIM_GZ_EC_FAIL16} + + SIM_GZ ESC 16 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see SIM_GZ_EC_FUNC16). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 1000 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1000 | | -1 | |   | ### SIM_GZ_EC_FAIL2 (`INT32`) {#SIM_GZ_EC_FAIL2} + + SIM_GZ ESC 2 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see SIM_GZ_EC_FUNC2). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 1000 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1000 | | -1 | |   | ### SIM_GZ_EC_FAIL3 (`INT32`) {#SIM_GZ_EC_FAIL3} + + SIM_GZ ESC 3 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see SIM_GZ_EC_FUNC3). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 1000 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1000 | | -1 | |   | ### SIM_GZ_EC_FAIL4 (`INT32`) {#SIM_GZ_EC_FAIL4} + + SIM_GZ ESC 4 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see SIM_GZ_EC_FUNC4). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 1000 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1000 | | -1 | |   | ### SIM_GZ_EC_FAIL5 (`INT32`) {#SIM_GZ_EC_FAIL5} + + SIM_GZ ESC 5 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see SIM_GZ_EC_FUNC5). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 1000 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1000 | | -1 | |   | ### SIM_GZ_EC_FAIL6 (`INT32`) {#SIM_GZ_EC_FAIL6} + + SIM_GZ ESC 6 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see SIM_GZ_EC_FUNC6). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 1000 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1000 | | -1 | |   | ### SIM_GZ_EC_FAIL7 (`INT32`) {#SIM_GZ_EC_FAIL7} + + SIM_GZ ESC 7 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see SIM_GZ_EC_FUNC7). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 1000 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1000 | | -1 | |   | ### SIM_GZ_EC_FAIL8 (`INT32`) {#SIM_GZ_EC_FAIL8} + + SIM_GZ ESC 8 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see SIM_GZ_EC_FUNC8). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 1000 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1000 | | -1 | |   | ### SIM_GZ_EC_FAIL9 (`INT32`) {#SIM_GZ_EC_FAIL9} + + SIM_GZ ESC 9 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see SIM_GZ_EC_FUNC9). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 1000 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1000 | | -1 | |   | ### SIM_GZ_EC_FUNC1 (`INT32`) {#SIM_GZ_EC_FUNC1} + + SIM_GZ ESC 1 Output Function. Select what should be output on SIM_GZ ESC 1. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -5492,15 +6278,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### SIM_GZ_EC_FUNC10 (`INT32`) {#SIM_GZ_EC_FUNC10} + + SIM_GZ ESC 10 Output Function. Select what should be output on SIM_GZ ESC 10. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -5563,15 +6352,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### SIM_GZ_EC_FUNC11 (`INT32`) {#SIM_GZ_EC_FUNC11} + + SIM_GZ ESC 11 Output Function. Select what should be output on SIM_GZ ESC 11. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -5634,15 +6426,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### SIM_GZ_EC_FUNC12 (`INT32`) {#SIM_GZ_EC_FUNC12} + + SIM_GZ ESC 12 Output Function. Select what should be output on SIM_GZ ESC 12. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -5705,15 +6500,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### SIM_GZ_EC_FUNC13 (`INT32`) {#SIM_GZ_EC_FUNC13} + + SIM_GZ ESC 13 Output Function. Select what should be output on SIM_GZ ESC 13. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -5776,15 +6574,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### SIM_GZ_EC_FUNC14 (`INT32`) {#SIM_GZ_EC_FUNC14} + + SIM_GZ ESC 14 Output Function. Select what should be output on SIM_GZ ESC 14. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -5847,15 +6648,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### SIM_GZ_EC_FUNC15 (`INT32`) {#SIM_GZ_EC_FUNC15} + + SIM_GZ ESC 15 Output Function. Select what should be output on SIM_GZ ESC 15. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -5918,15 +6722,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### SIM_GZ_EC_FUNC16 (`INT32`) {#SIM_GZ_EC_FUNC16} + + SIM_GZ ESC 16 Output Function. Select what should be output on SIM_GZ ESC 16. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -5989,15 +6796,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### SIM_GZ_EC_FUNC2 (`INT32`) {#SIM_GZ_EC_FUNC2} + + SIM_GZ ESC 2 Output Function. Select what should be output on SIM_GZ ESC 2. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -6060,15 +6870,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### SIM_GZ_EC_FUNC3 (`INT32`) {#SIM_GZ_EC_FUNC3} + + SIM_GZ ESC 3 Output Function. Select what should be output on SIM_GZ ESC 3. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -6131,15 +6944,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### SIM_GZ_EC_FUNC4 (`INT32`) {#SIM_GZ_EC_FUNC4} + + SIM_GZ ESC 4 Output Function. Select what should be output on SIM_GZ ESC 4. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -6202,15 +7018,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### SIM_GZ_EC_FUNC5 (`INT32`) {#SIM_GZ_EC_FUNC5} + + SIM_GZ ESC 5 Output Function. Select what should be output on SIM_GZ ESC 5. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -6273,15 +7092,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### SIM_GZ_EC_FUNC6 (`INT32`) {#SIM_GZ_EC_FUNC6} + + SIM_GZ ESC 6 Output Function. Select what should be output on SIM_GZ ESC 6. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -6344,15 +7166,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### SIM_GZ_EC_FUNC7 (`INT32`) {#SIM_GZ_EC_FUNC7} + + SIM_GZ ESC 7 Output Function. Select what should be output on SIM_GZ ESC 7. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -6415,15 +7240,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### SIM_GZ_EC_FUNC8 (`INT32`) {#SIM_GZ_EC_FUNC8} + + SIM_GZ ESC 8 Output Function. Select what should be output on SIM_GZ ESC 8. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -6486,15 +7314,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### SIM_GZ_EC_FUNC9 (`INT32`) {#SIM_GZ_EC_FUNC9} + + SIM_GZ ESC 9 Output Function. Select what should be output on SIM_GZ ESC 9. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -6557,332 +7388,398 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### SIM_GZ_EC_MAX1 (`INT32`) {#SIM_GZ_EC_MAX1} + + SIM_GZ ESC 1 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 1000 | |   | ### SIM_GZ_EC_MAX10 (`INT32`) {#SIM_GZ_EC_MAX10} + + SIM_GZ ESC 10 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 1000 | |   | ### SIM_GZ_EC_MAX11 (`INT32`) {#SIM_GZ_EC_MAX11} + + SIM_GZ ESC 11 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 1000 | |   | ### SIM_GZ_EC_MAX12 (`INT32`) {#SIM_GZ_EC_MAX12} + + SIM_GZ ESC 12 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 1000 | |   | ### SIM_GZ_EC_MAX13 (`INT32`) {#SIM_GZ_EC_MAX13} + + SIM_GZ ESC 13 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 1000 | |   | ### SIM_GZ_EC_MAX14 (`INT32`) {#SIM_GZ_EC_MAX14} + + SIM_GZ ESC 14 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 1000 | |   | ### SIM_GZ_EC_MAX15 (`INT32`) {#SIM_GZ_EC_MAX15} + + SIM_GZ ESC 15 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 1000 | |   | ### SIM_GZ_EC_MAX16 (`INT32`) {#SIM_GZ_EC_MAX16} + + SIM_GZ ESC 16 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 1000 | |   | ### SIM_GZ_EC_MAX2 (`INT32`) {#SIM_GZ_EC_MAX2} + + SIM_GZ ESC 2 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 1000 | |   | ### SIM_GZ_EC_MAX3 (`INT32`) {#SIM_GZ_EC_MAX3} + + SIM_GZ ESC 3 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 1000 | |   | ### SIM_GZ_EC_MAX4 (`INT32`) {#SIM_GZ_EC_MAX4} + + SIM_GZ ESC 4 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 1000 | |   | ### SIM_GZ_EC_MAX5 (`INT32`) {#SIM_GZ_EC_MAX5} + + SIM_GZ ESC 5 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 1000 | |   | ### SIM_GZ_EC_MAX6 (`INT32`) {#SIM_GZ_EC_MAX6} + + SIM_GZ ESC 6 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 1000 | |   | ### SIM_GZ_EC_MAX7 (`INT32`) {#SIM_GZ_EC_MAX7} + + SIM_GZ ESC 7 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 1000 | |   | ### SIM_GZ_EC_MAX8 (`INT32`) {#SIM_GZ_EC_MAX8} + + SIM_GZ ESC 8 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 1000 | |   | ### SIM_GZ_EC_MAX9 (`INT32`) {#SIM_GZ_EC_MAX9} + + SIM_GZ ESC 9 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 1000 | |   | ### SIM_GZ_EC_MIN1 (`INT32`) {#SIM_GZ_EC_MIN1} + + SIM_GZ ESC 1 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 0 | |   | ### SIM_GZ_EC_MIN10 (`INT32`) {#SIM_GZ_EC_MIN10} + + SIM_GZ ESC 10 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 0 | |   | ### SIM_GZ_EC_MIN11 (`INT32`) {#SIM_GZ_EC_MIN11} + + SIM_GZ ESC 11 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 0 | |   | ### SIM_GZ_EC_MIN12 (`INT32`) {#SIM_GZ_EC_MIN12} + + SIM_GZ ESC 12 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 0 | |   | ### SIM_GZ_EC_MIN13 (`INT32`) {#SIM_GZ_EC_MIN13} + + SIM_GZ ESC 13 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 0 | |   | ### SIM_GZ_EC_MIN14 (`INT32`) {#SIM_GZ_EC_MIN14} + + SIM_GZ ESC 14 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 0 | |   | ### SIM_GZ_EC_MIN15 (`INT32`) {#SIM_GZ_EC_MIN15} + + SIM_GZ ESC 15 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 0 | |   | ### SIM_GZ_EC_MIN16 (`INT32`) {#SIM_GZ_EC_MIN16} + + SIM_GZ ESC 16 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 0 | |   | ### SIM_GZ_EC_MIN2 (`INT32`) {#SIM_GZ_EC_MIN2} + + SIM_GZ ESC 2 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 0 | |   | ### SIM_GZ_EC_MIN3 (`INT32`) {#SIM_GZ_EC_MIN3} + + SIM_GZ ESC 3 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 0 | |   | ### SIM_GZ_EC_MIN4 (`INT32`) {#SIM_GZ_EC_MIN4} + + SIM_GZ ESC 4 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 0 | |   | ### SIM_GZ_EC_MIN5 (`INT32`) {#SIM_GZ_EC_MIN5} + + SIM_GZ ESC 5 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 0 | |   | ### SIM_GZ_EC_MIN6 (`INT32`) {#SIM_GZ_EC_MIN6} + + SIM_GZ ESC 6 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 0 | |   | ### SIM_GZ_EC_MIN7 (`INT32`) {#SIM_GZ_EC_MIN7} + + SIM_GZ ESC 7 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 0 | |   | ### SIM_GZ_EC_MIN8 (`INT32`) {#SIM_GZ_EC_MIN8} + + SIM_GZ ESC 8 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 0 | |   | ### SIM_GZ_EC_MIN9 (`INT32`) {#SIM_GZ_EC_MIN9} + + SIM_GZ ESC 9 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 0 | |   | ### SIM_GZ_EC_REV (`INT32`) {#SIM_GZ_EC_REV} + + Reverse Output Range for SIM_GZ. Allows to reverse the output range for each channel. @@ -6907,191 +7804,242 @@ Note: this is only useful for servos. - `14`: SIM_GZ ESC 15 - `15`: SIM_GZ ESC 16 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 65535 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 65535 | | 0 | |   | ### SIM_GZ_SV_DIS1 (`INT32`) {#SIM_GZ_SV_DIS1} + + SIM_GZ Servo 1 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 500 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 500 | |   | ### SIM_GZ_SV_DIS2 (`INT32`) {#SIM_GZ_SV_DIS2} + + SIM_GZ Servo 2 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 500 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 500 | |   | ### SIM_GZ_SV_DIS3 (`INT32`) {#SIM_GZ_SV_DIS3} + + SIM_GZ Servo 3 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 500 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 500 | |   | ### SIM_GZ_SV_DIS4 (`INT32`) {#SIM_GZ_SV_DIS4} + + SIM_GZ Servo 4 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 500 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 500 | |   | ### SIM_GZ_SV_DIS5 (`INT32`) {#SIM_GZ_SV_DIS5} + + SIM_GZ Servo 5 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 500 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 500 | |   | ### SIM_GZ_SV_DIS6 (`INT32`) {#SIM_GZ_SV_DIS6} + + SIM_GZ Servo 6 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 500 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 500 | |   | ### SIM_GZ_SV_DIS7 (`INT32`) {#SIM_GZ_SV_DIS7} + + SIM_GZ Servo 7 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 500 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 500 | |   | ### SIM_GZ_SV_DIS8 (`INT32`) {#SIM_GZ_SV_DIS8} + + SIM_GZ Servo 8 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 500 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 500 | |   | ### SIM_GZ_SV_FAIL1 (`INT32`) {#SIM_GZ_SV_FAIL1} + + SIM_GZ Servo 1 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see SIM_GZ_SV_FUNC1). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 1000 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1000 | | -1 | |   | ### SIM_GZ_SV_FAIL2 (`INT32`) {#SIM_GZ_SV_FAIL2} + + SIM_GZ Servo 2 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see SIM_GZ_SV_FUNC2). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 1000 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1000 | | -1 | |   | ### SIM_GZ_SV_FAIL3 (`INT32`) {#SIM_GZ_SV_FAIL3} + + SIM_GZ Servo 3 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see SIM_GZ_SV_FUNC3). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 1000 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1000 | | -1 | |   | ### SIM_GZ_SV_FAIL4 (`INT32`) {#SIM_GZ_SV_FAIL4} + + SIM_GZ Servo 4 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see SIM_GZ_SV_FUNC4). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 1000 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1000 | | -1 | |   | ### SIM_GZ_SV_FAIL5 (`INT32`) {#SIM_GZ_SV_FAIL5} + + SIM_GZ Servo 5 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see SIM_GZ_SV_FUNC5). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 1000 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1000 | | -1 | |   | ### SIM_GZ_SV_FAIL6 (`INT32`) {#SIM_GZ_SV_FAIL6} + + SIM_GZ Servo 6 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see SIM_GZ_SV_FUNC6). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 1000 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1000 | | -1 | |   | ### SIM_GZ_SV_FAIL7 (`INT32`) {#SIM_GZ_SV_FAIL7} + + SIM_GZ Servo 7 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see SIM_GZ_SV_FUNC7). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 1000 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1000 | | -1 | |   | ### SIM_GZ_SV_FAIL8 (`INT32`) {#SIM_GZ_SV_FAIL8} + + SIM_GZ Servo 8 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see SIM_GZ_SV_FUNC8). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 1000 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1000 | | -1 | |   | ### SIM_GZ_SV_FUNC1 (`INT32`) {#SIM_GZ_SV_FUNC1} + + SIM_GZ Servo 1 Output Function. Select what should be output on SIM_GZ Servo 1. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -7154,15 +8102,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### SIM_GZ_SV_FUNC2 (`INT32`) {#SIM_GZ_SV_FUNC2} + + SIM_GZ Servo 2 Output Function. Select what should be output on SIM_GZ Servo 2. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -7225,15 +8176,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### SIM_GZ_SV_FUNC3 (`INT32`) {#SIM_GZ_SV_FUNC3} + + SIM_GZ Servo 3 Output Function. Select what should be output on SIM_GZ Servo 3. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -7296,15 +8250,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### SIM_GZ_SV_FUNC4 (`INT32`) {#SIM_GZ_SV_FUNC4} + + SIM_GZ Servo 4 Output Function. Select what should be output on SIM_GZ Servo 4. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -7367,15 +8324,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### SIM_GZ_SV_FUNC5 (`INT32`) {#SIM_GZ_SV_FUNC5} + + SIM_GZ Servo 5 Output Function. Select what should be output on SIM_GZ Servo 5. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -7438,15 +8398,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### SIM_GZ_SV_FUNC6 (`INT32`) {#SIM_GZ_SV_FUNC6} + + SIM_GZ Servo 6 Output Function. Select what should be output on SIM_GZ Servo 6. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -7509,15 +8472,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### SIM_GZ_SV_FUNC7 (`INT32`) {#SIM_GZ_SV_FUNC7} + + SIM_GZ Servo 7 Output Function. Select what should be output on SIM_GZ Servo 7. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -7580,15 +8546,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### SIM_GZ_SV_FUNC8 (`INT32`) {#SIM_GZ_SV_FUNC8} + + SIM_GZ Servo 8 Output Function. Select what should be output on SIM_GZ Servo 8. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -7651,172 +8620,206 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### SIM_GZ_SV_MAX1 (`INT32`) {#SIM_GZ_SV_MAX1} + + SIM_GZ Servo 1 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 1000 | |   | ### SIM_GZ_SV_MAX2 (`INT32`) {#SIM_GZ_SV_MAX2} + + SIM_GZ Servo 2 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 1000 | |   | ### SIM_GZ_SV_MAX3 (`INT32`) {#SIM_GZ_SV_MAX3} + + SIM_GZ Servo 3 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 1000 | |   | ### SIM_GZ_SV_MAX4 (`INT32`) {#SIM_GZ_SV_MAX4} + + SIM_GZ Servo 4 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 1000 | |   | ### SIM_GZ_SV_MAX5 (`INT32`) {#SIM_GZ_SV_MAX5} + + SIM_GZ Servo 5 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 1000 | |   | ### SIM_GZ_SV_MAX6 (`INT32`) {#SIM_GZ_SV_MAX6} + + SIM_GZ Servo 6 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 1000 | |   | ### SIM_GZ_SV_MAX7 (`INT32`) {#SIM_GZ_SV_MAX7} + + SIM_GZ Servo 7 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 1000 | |   | ### SIM_GZ_SV_MAX8 (`INT32`) {#SIM_GZ_SV_MAX8} + + SIM_GZ Servo 8 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 1000 | |   | ### SIM_GZ_SV_MIN1 (`INT32`) {#SIM_GZ_SV_MIN1} + + SIM_GZ Servo 1 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 0 | |   | ### SIM_GZ_SV_MIN2 (`INT32`) {#SIM_GZ_SV_MIN2} + + SIM_GZ Servo 2 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 0 | |   | ### SIM_GZ_SV_MIN3 (`INT32`) {#SIM_GZ_SV_MIN3} + + SIM_GZ Servo 3 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 0 | |   | ### SIM_GZ_SV_MIN4 (`INT32`) {#SIM_GZ_SV_MIN4} + + SIM_GZ Servo 4 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 0 | |   | ### SIM_GZ_SV_MIN5 (`INT32`) {#SIM_GZ_SV_MIN5} + + SIM_GZ Servo 5 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 0 | |   | ### SIM_GZ_SV_MIN6 (`INT32`) {#SIM_GZ_SV_MIN6} + + SIM_GZ Servo 6 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 0 | |   | ### SIM_GZ_SV_MIN7 (`INT32`) {#SIM_GZ_SV_MIN7} + + SIM_GZ Servo 7 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 0 | |   | ### SIM_GZ_SV_MIN8 (`INT32`) {#SIM_GZ_SV_MIN8} + + SIM_GZ Servo 8 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 0 | |   | ### SIM_GZ_SV_REV (`INT32`) {#SIM_GZ_SV_REV} + + Reverse Output Range for SIM_GZ. Allows to reverse the output range for each channel. @@ -7833,103 +8836,130 @@ Note: this is only useful for servos. - `6`: SIM_GZ Servo 7 - `7`: SIM_GZ Servo 8 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 255 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 255 | | 0 | |   | ### SIM_GZ_WH_DIS1 (`INT32`) {#SIM_GZ_WH_DIS1} + + SIM_GZ Wheels 1 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 200 | | 100 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 200 | | 100 | |   | ### SIM_GZ_WH_DIS2 (`INT32`) {#SIM_GZ_WH_DIS2} + + SIM_GZ Wheels 2 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 200 | | 100 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 200 | | 100 | |   | ### SIM_GZ_WH_DIS3 (`INT32`) {#SIM_GZ_WH_DIS3} + + SIM_GZ Wheels 3 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 200 | | 100 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 200 | | 100 | |   | ### SIM_GZ_WH_DIS4 (`INT32`) {#SIM_GZ_WH_DIS4} + + SIM_GZ Wheels 4 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 200 | | 100 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 200 | | 100 | |   | ### SIM_GZ_WH_FAIL1 (`INT32`) {#SIM_GZ_WH_FAIL1} + + SIM_GZ Wheels 1 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see SIM_GZ_WH_FUNC1). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 200 | | -1 | |   | ### SIM_GZ_WH_FAIL2 (`INT32`) {#SIM_GZ_WH_FAIL2} + + SIM_GZ Wheels 2 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see SIM_GZ_WH_FUNC2). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 200 | | -1 | |   | ### SIM_GZ_WH_FAIL3 (`INT32`) {#SIM_GZ_WH_FAIL3} + + SIM_GZ Wheels 3 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see SIM_GZ_WH_FUNC3). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 200 | | -1 | |   | ### SIM_GZ_WH_FAIL4 (`INT32`) {#SIM_GZ_WH_FAIL4} + + SIM_GZ Wheels 4 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see SIM_GZ_WH_FUNC4). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 200 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 200 | | -1 | |   | ### SIM_GZ_WH_FUNC1 (`INT32`) {#SIM_GZ_WH_FUNC1} + + SIM_GZ Wheels 1 Output Function. Select what should be output on SIM_GZ Wheels 1. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -7992,15 +9022,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### SIM_GZ_WH_FUNC2 (`INT32`) {#SIM_GZ_WH_FUNC2} + + SIM_GZ Wheels 2 Output Function. Select what should be output on SIM_GZ Wheels 2. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -8063,15 +9096,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### SIM_GZ_WH_FUNC3 (`INT32`) {#SIM_GZ_WH_FUNC3} + + SIM_GZ Wheels 3 Output Function. Select what should be output on SIM_GZ Wheels 3. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -8134,15 +9170,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### SIM_GZ_WH_FUNC4 (`INT32`) {#SIM_GZ_WH_FUNC4} + + SIM_GZ Wheels 4 Output Function. Select what should be output on SIM_GZ Wheels 4. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -8205,92 +9244,110 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### SIM_GZ_WH_MAX1 (`INT32`) {#SIM_GZ_WH_MAX1} + + SIM_GZ Wheels 1 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 200 | | 200 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 200 | | 200 | |   | ### SIM_GZ_WH_MAX2 (`INT32`) {#SIM_GZ_WH_MAX2} + + SIM_GZ Wheels 2 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 200 | | 200 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 200 | | 200 | |   | ### SIM_GZ_WH_MAX3 (`INT32`) {#SIM_GZ_WH_MAX3} + + SIM_GZ Wheels 3 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 200 | | 200 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 200 | | 200 | |   | ### SIM_GZ_WH_MAX4 (`INT32`) {#SIM_GZ_WH_MAX4} + + SIM_GZ Wheels 4 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 200 | | 200 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 200 | | 200 | |   | ### SIM_GZ_WH_MIN1 (`INT32`) {#SIM_GZ_WH_MIN1} + + SIM_GZ Wheels 1 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 200 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 200 | | 0 | |   | ### SIM_GZ_WH_MIN2 (`INT32`) {#SIM_GZ_WH_MIN2} + + SIM_GZ Wheels 2 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 200 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 200 | | 0 | |   | ### SIM_GZ_WH_MIN3 (`INT32`) {#SIM_GZ_WH_MIN3} + + SIM_GZ Wheels 3 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 200 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 200 | | 0 | |   | ### SIM_GZ_WH_MIN4 (`INT32`) {#SIM_GZ_WH_MIN4} + + SIM_GZ Wheels 4 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 200 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 200 | | 0 | |   | ### SIM_GZ_WH_REV (`INT32`) {#SIM_GZ_WH_REV} + + Reverse Output Range for SIM_GZ. Allows to reverse the output range for each channel. @@ -8303,15 +9360,18 @@ Note: this is only useful for servos. - `2`: SIM_GZ Wheels 3 - `3`: SIM_GZ Wheels 4 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 15 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 15 | | 0 | |   | ### TAP_ESC_FUNC1 (`INT32`) {#TAP_ESC_FUNC1} + + TAP ESC Output ESC 1 Output Function. Select what should be output on TAP ESC Output ESC 1. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -8374,15 +9434,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### TAP_ESC_FUNC2 (`INT32`) {#TAP_ESC_FUNC2} + + TAP ESC Output ESC 2 Output Function. Select what should be output on TAP ESC Output ESC 2. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -8445,15 +9508,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### TAP_ESC_FUNC3 (`INT32`) {#TAP_ESC_FUNC3} + + TAP ESC Output ESC 3 Output Function. Select what should be output on TAP ESC Output ESC 3. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -8516,15 +9582,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### TAP_ESC_FUNC4 (`INT32`) {#TAP_ESC_FUNC4} + + TAP ESC Output ESC 4 Output Function. Select what should be output on TAP ESC Output ESC 4. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -8587,15 +9656,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### TAP_ESC_FUNC5 (`INT32`) {#TAP_ESC_FUNC5} + + TAP ESC Output ESC 5 Output Function. Select what should be output on TAP ESC Output ESC 5. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -8658,15 +9730,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### TAP_ESC_FUNC6 (`INT32`) {#TAP_ESC_FUNC6} + + TAP ESC Output ESC 6 Output Function. Select what should be output on TAP ESC Output ESC 6. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -8729,15 +9804,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### TAP_ESC_FUNC7 (`INT32`) {#TAP_ESC_FUNC7} + + TAP ESC Output ESC 7 Output Function. Select what should be output on TAP ESC Output ESC 7. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -8800,15 +9878,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### TAP_ESC_FUNC8 (`INT32`) {#TAP_ESC_FUNC8} + + TAP ESC Output ESC 8 Output Function. Select what should be output on TAP ESC Output ESC 8. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -8871,12 +9952,14 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### TAP_ESC_REV (`INT32`) {#TAP_ESC_REV} + + Reverse Output Range for TAP ESC Output. Allows to reverse the output range for each channel. @@ -8893,103 +9976,186 @@ Note: this is only useful for servos. - `6`: TAP ESC Output ESC 7 - `7`: TAP ESC Output ESC 8 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 255 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 255 | | 0 | |   | ### UAVCAN_EC_FAIL1 (`INT32`) {#UAVCAN_EC_FAIL1} + + UAVCAN ESC 1 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see UAVCAN_EC_FUNC1). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 8191 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 8191 | | -1 | |   | + +### UAVCAN_EC_FAIL10 (`INT32`) {#UAVCAN_EC_FAIL10} + + + +UAVCAN ESC 10 Failsafe Value. + +This is the output value that is set when in failsafe mode. + +When set to -1 (default), the value depends on the function (see UAVCAN_EC_FUNC10). + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 8191 | | -1 | |   | + +### UAVCAN_EC_FAIL11 (`INT32`) {#UAVCAN_EC_FAIL11} + + + +UAVCAN ESC 11 Failsafe Value. + +This is the output value that is set when in failsafe mode. + +When set to -1 (default), the value depends on the function (see UAVCAN_EC_FUNC11). + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 8191 | | -1 | |   | + +### UAVCAN_EC_FAIL12 (`INT32`) {#UAVCAN_EC_FAIL12} + + + +UAVCAN ESC 12 Failsafe Value. + +This is the output value that is set when in failsafe mode. + +When set to -1 (default), the value depends on the function (see UAVCAN_EC_FUNC12). + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 8191 | | -1 | |   | ### UAVCAN_EC_FAIL2 (`INT32`) {#UAVCAN_EC_FAIL2} + + UAVCAN ESC 2 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see UAVCAN_EC_FUNC2). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 8191 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 8191 | | -1 | |   | ### UAVCAN_EC_FAIL3 (`INT32`) {#UAVCAN_EC_FAIL3} + + UAVCAN ESC 3 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see UAVCAN_EC_FUNC3). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 8191 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 8191 | | -1 | |   | ### UAVCAN_EC_FAIL4 (`INT32`) {#UAVCAN_EC_FAIL4} + + UAVCAN ESC 4 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see UAVCAN_EC_FUNC4). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 8191 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 8191 | | -1 | |   | ### UAVCAN_EC_FAIL5 (`INT32`) {#UAVCAN_EC_FAIL5} + + UAVCAN ESC 5 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see UAVCAN_EC_FUNC5). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 8191 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 8191 | | -1 | |   | ### UAVCAN_EC_FAIL6 (`INT32`) {#UAVCAN_EC_FAIL6} + + UAVCAN ESC 6 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see UAVCAN_EC_FUNC6). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 8191 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 8191 | | -1 | |   | ### UAVCAN_EC_FAIL7 (`INT32`) {#UAVCAN_EC_FAIL7} + + UAVCAN ESC 7 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see UAVCAN_EC_FUNC7). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 8191 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 8191 | | -1 | |   | ### UAVCAN_EC_FAIL8 (`INT32`) {#UAVCAN_EC_FAIL8} + + UAVCAN ESC 8 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see UAVCAN_EC_FUNC8). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 8191 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 8191 | | -1 | |   | + +### UAVCAN_EC_FAIL9 (`INT32`) {#UAVCAN_EC_FAIL9} + + + +UAVCAN ESC 9 Failsafe Value. + +This is the output value that is set when in failsafe mode. + +When set to -1 (default), the value depends on the function (see UAVCAN_EC_FUNC9). + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 8191 | | -1 | |   | ### UAVCAN_EC_FUNC1 (`INT32`) {#UAVCAN_EC_FUNC1} + + UAVCAN ESC 1 Output Function. Select what should be output on UAVCAN ESC 1. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -9052,15 +10218,240 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | + +### UAVCAN_EC_FUNC10 (`INT32`) {#UAVCAN_EC_FUNC10} + + + +UAVCAN ESC 10 Output Function. + +Select what should be output on UAVCAN ESC 10. + +The default failsafe value is set according to the selected function: + +- 'Min' for ConstantMin +- 'Max' for ConstantMax +- 'Max' for Parachute +- ('Max'+'Min')/2 for Servos +- 'Disarmed' for the rest + +**Values:** + +- `0`: Disabled +- `1`: Constant Min +- `2`: Constant Max +- `101`: Motor 1 +- `102`: Motor 2 +- `103`: Motor 3 +- `104`: Motor 4 +- `105`: Motor 5 +- `106`: Motor 6 +- `107`: Motor 7 +- `108`: Motor 8 +- `109`: Motor 9 +- `110`: Motor 10 +- `111`: Motor 11 +- `112`: Motor 12 +- `201`: Servo 1 +- `202`: Servo 2 +- `203`: Servo 3 +- `204`: Servo 4 +- `205`: Servo 5 +- `206`: Servo 6 +- `207`: Servo 7 +- `208`: Servo 8 +- `301`: Peripheral via Actuator Set 1 +- `302`: Peripheral via Actuator Set 2 +- `303`: Peripheral via Actuator Set 3 +- `304`: Peripheral via Actuator Set 4 +- `305`: Peripheral via Actuator Set 5 +- `306`: Peripheral via Actuator Set 6 +- `400`: Landing Gear +- `401`: Parachute +- `402`: RC Roll +- `403`: RC Pitch +- `404`: RC Throttle +- `405`: RC Yaw +- `406`: RC Flaps +- `407`: RC AUX 1 +- `408`: RC AUX 2 +- `409`: RC AUX 3 +- `410`: RC AUX 4 +- `411`: RC AUX 5 +- `412`: RC AUX 6 +- `420`: Gimbal Roll +- `421`: Gimbal Pitch +- `422`: Gimbal Yaw +- `430`: Gripper +- `440`: Landing Gear Wheel +- `450`: IC Engine Ignition +- `451`: IC Engine Throttle +- `452`: IC Engine Choke +- `453`: IC Engine Starter + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | + +### UAVCAN_EC_FUNC11 (`INT32`) {#UAVCAN_EC_FUNC11} + + + +UAVCAN ESC 11 Output Function. + +Select what should be output on UAVCAN ESC 11. + +The default failsafe value is set according to the selected function: + +- 'Min' for ConstantMin +- 'Max' for ConstantMax +- 'Max' for Parachute +- ('Max'+'Min')/2 for Servos +- 'Disarmed' for the rest + +**Values:** + +- `0`: Disabled +- `1`: Constant Min +- `2`: Constant Max +- `101`: Motor 1 +- `102`: Motor 2 +- `103`: Motor 3 +- `104`: Motor 4 +- `105`: Motor 5 +- `106`: Motor 6 +- `107`: Motor 7 +- `108`: Motor 8 +- `109`: Motor 9 +- `110`: Motor 10 +- `111`: Motor 11 +- `112`: Motor 12 +- `201`: Servo 1 +- `202`: Servo 2 +- `203`: Servo 3 +- `204`: Servo 4 +- `205`: Servo 5 +- `206`: Servo 6 +- `207`: Servo 7 +- `208`: Servo 8 +- `301`: Peripheral via Actuator Set 1 +- `302`: Peripheral via Actuator Set 2 +- `303`: Peripheral via Actuator Set 3 +- `304`: Peripheral via Actuator Set 4 +- `305`: Peripheral via Actuator Set 5 +- `306`: Peripheral via Actuator Set 6 +- `400`: Landing Gear +- `401`: Parachute +- `402`: RC Roll +- `403`: RC Pitch +- `404`: RC Throttle +- `405`: RC Yaw +- `406`: RC Flaps +- `407`: RC AUX 1 +- `408`: RC AUX 2 +- `409`: RC AUX 3 +- `410`: RC AUX 4 +- `411`: RC AUX 5 +- `412`: RC AUX 6 +- `420`: Gimbal Roll +- `421`: Gimbal Pitch +- `422`: Gimbal Yaw +- `430`: Gripper +- `440`: Landing Gear Wheel +- `450`: IC Engine Ignition +- `451`: IC Engine Throttle +- `452`: IC Engine Choke +- `453`: IC Engine Starter + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | + +### UAVCAN_EC_FUNC12 (`INT32`) {#UAVCAN_EC_FUNC12} + + + +UAVCAN ESC 12 Output Function. + +Select what should be output on UAVCAN ESC 12. + +The default failsafe value is set according to the selected function: + +- 'Min' for ConstantMin +- 'Max' for ConstantMax +- 'Max' for Parachute +- ('Max'+'Min')/2 for Servos +- 'Disarmed' for the rest + +**Values:** + +- `0`: Disabled +- `1`: Constant Min +- `2`: Constant Max +- `101`: Motor 1 +- `102`: Motor 2 +- `103`: Motor 3 +- `104`: Motor 4 +- `105`: Motor 5 +- `106`: Motor 6 +- `107`: Motor 7 +- `108`: Motor 8 +- `109`: Motor 9 +- `110`: Motor 10 +- `111`: Motor 11 +- `112`: Motor 12 +- `201`: Servo 1 +- `202`: Servo 2 +- `203`: Servo 3 +- `204`: Servo 4 +- `205`: Servo 5 +- `206`: Servo 6 +- `207`: Servo 7 +- `208`: Servo 8 +- `301`: Peripheral via Actuator Set 1 +- `302`: Peripheral via Actuator Set 2 +- `303`: Peripheral via Actuator Set 3 +- `304`: Peripheral via Actuator Set 4 +- `305`: Peripheral via Actuator Set 5 +- `306`: Peripheral via Actuator Set 6 +- `400`: Landing Gear +- `401`: Parachute +- `402`: RC Roll +- `403`: RC Pitch +- `404`: RC Throttle +- `405`: RC Yaw +- `406`: RC Flaps +- `407`: RC AUX 1 +- `408`: RC AUX 2 +- `409`: RC AUX 3 +- `410`: RC AUX 4 +- `411`: RC AUX 5 +- `412`: RC AUX 6 +- `420`: Gimbal Roll +- `421`: Gimbal Pitch +- `422`: Gimbal Yaw +- `430`: Gripper +- `440`: Landing Gear Wheel +- `450`: IC Engine Ignition +- `451`: IC Engine Throttle +- `452`: IC Engine Choke +- `453`: IC Engine Starter + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### UAVCAN_EC_FUNC2 (`INT32`) {#UAVCAN_EC_FUNC2} + + UAVCAN ESC 2 Output Function. Select what should be output on UAVCAN ESC 2. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -9123,15 +10514,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### UAVCAN_EC_FUNC3 (`INT32`) {#UAVCAN_EC_FUNC3} + + UAVCAN ESC 3 Output Function. Select what should be output on UAVCAN ESC 3. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -9194,15 +10588,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### UAVCAN_EC_FUNC4 (`INT32`) {#UAVCAN_EC_FUNC4} + + UAVCAN ESC 4 Output Function. Select what should be output on UAVCAN ESC 4. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -9265,15 +10662,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### UAVCAN_EC_FUNC5 (`INT32`) {#UAVCAN_EC_FUNC5} + + UAVCAN ESC 5 Output Function. Select what should be output on UAVCAN ESC 5. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -9336,15 +10736,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### UAVCAN_EC_FUNC6 (`INT32`) {#UAVCAN_EC_FUNC6} + + UAVCAN ESC 6 Output Function. Select what should be output on UAVCAN ESC 6. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -9407,15 +10810,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### UAVCAN_EC_FUNC7 (`INT32`) {#UAVCAN_EC_FUNC7} + + UAVCAN ESC 7 Output Function. Select what should be output on UAVCAN ESC 7. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -9478,15 +10884,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### UAVCAN_EC_FUNC8 (`INT32`) {#UAVCAN_EC_FUNC8} + + UAVCAN ESC 8 Output Function. Select what should be output on UAVCAN ESC 8. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -9549,172 +10958,376 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | + +### UAVCAN_EC_FUNC9 (`INT32`) {#UAVCAN_EC_FUNC9} + + + +UAVCAN ESC 9 Output Function. + +Select what should be output on UAVCAN ESC 9. + +The default failsafe value is set according to the selected function: + +- 'Min' for ConstantMin +- 'Max' for ConstantMax +- 'Max' for Parachute +- ('Max'+'Min')/2 for Servos +- 'Disarmed' for the rest + +**Values:** + +- `0`: Disabled +- `1`: Constant Min +- `2`: Constant Max +- `101`: Motor 1 +- `102`: Motor 2 +- `103`: Motor 3 +- `104`: Motor 4 +- `105`: Motor 5 +- `106`: Motor 6 +- `107`: Motor 7 +- `108`: Motor 8 +- `109`: Motor 9 +- `110`: Motor 10 +- `111`: Motor 11 +- `112`: Motor 12 +- `201`: Servo 1 +- `202`: Servo 2 +- `203`: Servo 3 +- `204`: Servo 4 +- `205`: Servo 5 +- `206`: Servo 6 +- `207`: Servo 7 +- `208`: Servo 8 +- `301`: Peripheral via Actuator Set 1 +- `302`: Peripheral via Actuator Set 2 +- `303`: Peripheral via Actuator Set 3 +- `304`: Peripheral via Actuator Set 4 +- `305`: Peripheral via Actuator Set 5 +- `306`: Peripheral via Actuator Set 6 +- `400`: Landing Gear +- `401`: Parachute +- `402`: RC Roll +- `403`: RC Pitch +- `404`: RC Throttle +- `405`: RC Yaw +- `406`: RC Flaps +- `407`: RC AUX 1 +- `408`: RC AUX 2 +- `409`: RC AUX 3 +- `410`: RC AUX 4 +- `411`: RC AUX 5 +- `412`: RC AUX 6 +- `420`: Gimbal Roll +- `421`: Gimbal Pitch +- `422`: Gimbal Yaw +- `430`: Gripper +- `440`: Landing Gear Wheel +- `450`: IC Engine Ignition +- `451`: IC Engine Throttle +- `452`: IC Engine Choke +- `453`: IC Engine Starter + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### UAVCAN_EC_MAX1 (`INT32`) {#UAVCAN_EC_MAX1} + + UAVCAN ESC 1 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 8191 | | 8191 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8191 | | 8191 | |   | + +### UAVCAN_EC_MAX10 (`INT32`) {#UAVCAN_EC_MAX10} + + + +UAVCAN ESC 10 Maximum Value. + +Maxmimum output value (when not disarmed). + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8191 | | 8191 | |   | + +### UAVCAN_EC_MAX11 (`INT32`) {#UAVCAN_EC_MAX11} + + + +UAVCAN ESC 11 Maximum Value. + +Maxmimum output value (when not disarmed). + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8191 | | 8191 | |   | + +### UAVCAN_EC_MAX12 (`INT32`) {#UAVCAN_EC_MAX12} + + + +UAVCAN ESC 12 Maximum Value. + +Maxmimum output value (when not disarmed). + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8191 | | 8191 | |   | ### UAVCAN_EC_MAX2 (`INT32`) {#UAVCAN_EC_MAX2} + + UAVCAN ESC 2 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 8191 | | 8191 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8191 | | 8191 | |   | ### UAVCAN_EC_MAX3 (`INT32`) {#UAVCAN_EC_MAX3} + + UAVCAN ESC 3 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 8191 | | 8191 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8191 | | 8191 | |   | ### UAVCAN_EC_MAX4 (`INT32`) {#UAVCAN_EC_MAX4} + + UAVCAN ESC 4 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 8191 | | 8191 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8191 | | 8191 | |   | ### UAVCAN_EC_MAX5 (`INT32`) {#UAVCAN_EC_MAX5} + + UAVCAN ESC 5 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 8191 | | 8191 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8191 | | 8191 | |   | ### UAVCAN_EC_MAX6 (`INT32`) {#UAVCAN_EC_MAX6} + + UAVCAN ESC 6 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 8191 | | 8191 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8191 | | 8191 | |   | ### UAVCAN_EC_MAX7 (`INT32`) {#UAVCAN_EC_MAX7} + + UAVCAN ESC 7 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 8191 | | 8191 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8191 | | 8191 | |   | ### UAVCAN_EC_MAX8 (`INT32`) {#UAVCAN_EC_MAX8} + + UAVCAN ESC 8 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 8191 | | 8191 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8191 | | 8191 | |   | + +### UAVCAN_EC_MAX9 (`INT32`) {#UAVCAN_EC_MAX9} + + + +UAVCAN ESC 9 Maximum Value. + +Maxmimum output value (when not disarmed). + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8191 | | 8191 | |   | ### UAVCAN_EC_MIN1 (`INT32`) {#UAVCAN_EC_MIN1} + + UAVCAN ESC 1 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 8191 | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8191 | | 1 | |   | + +### UAVCAN_EC_MIN10 (`INT32`) {#UAVCAN_EC_MIN10} + + + +UAVCAN ESC 10 Minimum Value. + +Minimum output value (when not disarmed). + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8191 | | 1 | |   | + +### UAVCAN_EC_MIN11 (`INT32`) {#UAVCAN_EC_MIN11} + + + +UAVCAN ESC 11 Minimum Value. + +Minimum output value (when not disarmed). + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8191 | | 1 | |   | + +### UAVCAN_EC_MIN12 (`INT32`) {#UAVCAN_EC_MIN12} + + + +UAVCAN ESC 12 Minimum Value. + +Minimum output value (when not disarmed). + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8191 | | 1 | |   | ### UAVCAN_EC_MIN2 (`INT32`) {#UAVCAN_EC_MIN2} + + UAVCAN ESC 2 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 8191 | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8191 | | 1 | |   | ### UAVCAN_EC_MIN3 (`INT32`) {#UAVCAN_EC_MIN3} + + UAVCAN ESC 3 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 8191 | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8191 | | 1 | |   | ### UAVCAN_EC_MIN4 (`INT32`) {#UAVCAN_EC_MIN4} + + UAVCAN ESC 4 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 8191 | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8191 | | 1 | |   | ### UAVCAN_EC_MIN5 (`INT32`) {#UAVCAN_EC_MIN5} + + UAVCAN ESC 5 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 8191 | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8191 | | 1 | |   | ### UAVCAN_EC_MIN6 (`INT32`) {#UAVCAN_EC_MIN6} + + UAVCAN ESC 6 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 8191 | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8191 | | 1 | |   | ### UAVCAN_EC_MIN7 (`INT32`) {#UAVCAN_EC_MIN7} + + UAVCAN ESC 7 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 8191 | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8191 | | 1 | |   | ### UAVCAN_EC_MIN8 (`INT32`) {#UAVCAN_EC_MIN8} + + UAVCAN ESC 8 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 8191 | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8191 | | 1 | |   | + +### UAVCAN_EC_MIN9 (`INT32`) {#UAVCAN_EC_MIN9} + + + +UAVCAN ESC 9 Minimum Value. + +Minimum output value (when not disarmed). + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8191 | | 1 | |   | ### UAVCAN_EC_REV (`INT32`) {#UAVCAN_EC_REV} + + Reverse Output Range for UAVCAN. Allows to reverse the output range for each channel. @@ -9730,192 +11343,247 @@ Note: this is only useful for servos. - `5`: UAVCAN ESC 6 - `6`: UAVCAN ESC 7 - `7`: UAVCAN ESC 8 +- `8`: UAVCAN ESC 9 +- `9`: UAVCAN ESC 10 +- `10`: UAVCAN ESC 11 +- `11`: UAVCAN ESC 12 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 255 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 4095 | | 0 | |   | ### UAVCAN_SV_DIS1 (`INT32`) {#UAVCAN_SV_DIS1} + + UAVCAN Servo 1 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 500 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 500 | |   | ### UAVCAN_SV_DIS2 (`INT32`) {#UAVCAN_SV_DIS2} + + UAVCAN Servo 2 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 500 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 500 | |   | ### UAVCAN_SV_DIS3 (`INT32`) {#UAVCAN_SV_DIS3} + + UAVCAN Servo 3 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 500 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 500 | |   | ### UAVCAN_SV_DIS4 (`INT32`) {#UAVCAN_SV_DIS4} + + UAVCAN Servo 4 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 500 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 500 | |   | ### UAVCAN_SV_DIS5 (`INT32`) {#UAVCAN_SV_DIS5} + + UAVCAN Servo 5 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 500 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 500 | |   | ### UAVCAN_SV_DIS6 (`INT32`) {#UAVCAN_SV_DIS6} + + UAVCAN Servo 6 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 500 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 500 | |   | ### UAVCAN_SV_DIS7 (`INT32`) {#UAVCAN_SV_DIS7} + + UAVCAN Servo 7 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 500 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 500 | |   | ### UAVCAN_SV_DIS8 (`INT32`) {#UAVCAN_SV_DIS8} + + UAVCAN Servo 8 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 500 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 500 | |   | ### UAVCAN_SV_FAIL1 (`INT32`) {#UAVCAN_SV_FAIL1} + + UAVCAN Servo 1 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see UAVCAN_SV_FUNC1). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 1000 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1000 | | -1 | |   | ### UAVCAN_SV_FAIL2 (`INT32`) {#UAVCAN_SV_FAIL2} + + UAVCAN Servo 2 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see UAVCAN_SV_FUNC2). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 1000 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1000 | | -1 | |   | ### UAVCAN_SV_FAIL3 (`INT32`) {#UAVCAN_SV_FAIL3} + + UAVCAN Servo 3 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see UAVCAN_SV_FUNC3). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 1000 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1000 | | -1 | |   | ### UAVCAN_SV_FAIL4 (`INT32`) {#UAVCAN_SV_FAIL4} + + UAVCAN Servo 4 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see UAVCAN_SV_FUNC4). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 1000 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1000 | | -1 | |   | ### UAVCAN_SV_FAIL5 (`INT32`) {#UAVCAN_SV_FAIL5} + + UAVCAN Servo 5 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see UAVCAN_SV_FUNC5). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 1000 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1000 | | -1 | |   | ### UAVCAN_SV_FAIL6 (`INT32`) {#UAVCAN_SV_FAIL6} + + UAVCAN Servo 6 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see UAVCAN_SV_FUNC6). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 1000 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1000 | | -1 | |   | ### UAVCAN_SV_FAIL7 (`INT32`) {#UAVCAN_SV_FAIL7} + + UAVCAN Servo 7 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see UAVCAN_SV_FUNC7). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 1000 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1000 | | -1 | |   | ### UAVCAN_SV_FAIL8 (`INT32`) {#UAVCAN_SV_FAIL8} + + UAVCAN Servo 8 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see UAVCAN_SV_FUNC8). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 1000 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1000 | | -1 | |   | ### UAVCAN_SV_FUNC1 (`INT32`) {#UAVCAN_SV_FUNC1} + + UAVCAN Servo 1 Output Function. Select what should be output on UAVCAN Servo 1. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -9978,15 +11646,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### UAVCAN_SV_FUNC2 (`INT32`) {#UAVCAN_SV_FUNC2} + + UAVCAN Servo 2 Output Function. Select what should be output on UAVCAN Servo 2. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -10049,15 +11720,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### UAVCAN_SV_FUNC3 (`INT32`) {#UAVCAN_SV_FUNC3} + + UAVCAN Servo 3 Output Function. Select what should be output on UAVCAN Servo 3. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -10120,15 +11794,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### UAVCAN_SV_FUNC4 (`INT32`) {#UAVCAN_SV_FUNC4} + + UAVCAN Servo 4 Output Function. Select what should be output on UAVCAN Servo 4. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -10191,15 +11868,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### UAVCAN_SV_FUNC5 (`INT32`) {#UAVCAN_SV_FUNC5} + + UAVCAN Servo 5 Output Function. Select what should be output on UAVCAN Servo 5. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -10262,15 +11942,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### UAVCAN_SV_FUNC6 (`INT32`) {#UAVCAN_SV_FUNC6} + + UAVCAN Servo 6 Output Function. Select what should be output on UAVCAN Servo 6. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -10333,15 +12016,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### UAVCAN_SV_FUNC7 (`INT32`) {#UAVCAN_SV_FUNC7} + + UAVCAN Servo 7 Output Function. Select what should be output on UAVCAN Servo 7. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -10404,15 +12090,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### UAVCAN_SV_FUNC8 (`INT32`) {#UAVCAN_SV_FUNC8} + + UAVCAN Servo 8 Output Function. Select what should be output on UAVCAN Servo 8. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -10475,172 +12164,206 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### UAVCAN_SV_MAX1 (`INT32`) {#UAVCAN_SV_MAX1} + + UAVCAN Servo 1 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 1000 | |   | ### UAVCAN_SV_MAX2 (`INT32`) {#UAVCAN_SV_MAX2} + + UAVCAN Servo 2 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 1000 | |   | ### UAVCAN_SV_MAX3 (`INT32`) {#UAVCAN_SV_MAX3} + + UAVCAN Servo 3 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 1000 | |   | ### UAVCAN_SV_MAX4 (`INT32`) {#UAVCAN_SV_MAX4} + + UAVCAN Servo 4 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 1000 | |   | ### UAVCAN_SV_MAX5 (`INT32`) {#UAVCAN_SV_MAX5} + + UAVCAN Servo 5 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 1000 | |   | ### UAVCAN_SV_MAX6 (`INT32`) {#UAVCAN_SV_MAX6} + + UAVCAN Servo 6 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 1000 | |   | ### UAVCAN_SV_MAX7 (`INT32`) {#UAVCAN_SV_MAX7} + + UAVCAN Servo 7 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 1000 | |   | ### UAVCAN_SV_MAX8 (`INT32`) {#UAVCAN_SV_MAX8} + + UAVCAN Servo 8 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 1000 | |   | ### UAVCAN_SV_MIN1 (`INT32`) {#UAVCAN_SV_MIN1} + + UAVCAN Servo 1 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 0 | |   | ### UAVCAN_SV_MIN2 (`INT32`) {#UAVCAN_SV_MIN2} + + UAVCAN Servo 2 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 0 | |   | ### UAVCAN_SV_MIN3 (`INT32`) {#UAVCAN_SV_MIN3} + + UAVCAN Servo 3 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 0 | |   | ### UAVCAN_SV_MIN4 (`INT32`) {#UAVCAN_SV_MIN4} + + UAVCAN Servo 4 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 0 | |   | ### UAVCAN_SV_MIN5 (`INT32`) {#UAVCAN_SV_MIN5} + + UAVCAN Servo 5 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 0 | |   | ### UAVCAN_SV_MIN6 (`INT32`) {#UAVCAN_SV_MIN6} + + UAVCAN Servo 6 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 0 | |   | ### UAVCAN_SV_MIN7 (`INT32`) {#UAVCAN_SV_MIN7} + + UAVCAN Servo 7 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 0 | |   | ### UAVCAN_SV_MIN8 (`INT32`) {#UAVCAN_SV_MIN8} + + UAVCAN Servo 8 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 0 | |   | ### UAVCAN_SV_REV (`INT32`) {#UAVCAN_SV_REV} + + Reverse Output Range for UAVCAN. Allows to reverse the output range for each channel. @@ -10657,191 +12380,242 @@ Note: this is only useful for servos. - `6`: UAVCAN Servo 7 - `7`: UAVCAN Servo 8 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 255 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 255 | | 0 | |   | ### UCAN1_ESC_FAIL1 (`INT32`) {#UCAN1_ESC_FAIL1} + + UAVCANv1 ESC 1 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see UCAN1_ESC_FUNC1). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 8191 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 8191 | | -1 | |   | ### UCAN1_ESC_FAIL10 (`INT32`) {#UCAN1_ESC_FAIL10} + + UAVCANv1 ESC 10 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see UCAN1_ESC_FUNC10). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 8191 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 8191 | | -1 | |   | ### UCAN1_ESC_FAIL11 (`INT32`) {#UCAN1_ESC_FAIL11} + + UAVCANv1 ESC 11 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see UCAN1_ESC_FUNC11). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 8191 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 8191 | | -1 | |   | ### UCAN1_ESC_FAIL12 (`INT32`) {#UCAN1_ESC_FAIL12} + + UAVCANv1 ESC 12 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see UCAN1_ESC_FUNC12). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 8191 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 8191 | | -1 | |   | ### UCAN1_ESC_FAIL13 (`INT32`) {#UCAN1_ESC_FAIL13} + + UAVCANv1 ESC 13 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see UCAN1_ESC_FUNC13). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 8191 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 8191 | | -1 | |   | ### UCAN1_ESC_FAIL14 (`INT32`) {#UCAN1_ESC_FAIL14} + + UAVCANv1 ESC 14 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see UCAN1_ESC_FUNC14). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 8191 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 8191 | | -1 | |   | ### UCAN1_ESC_FAIL15 (`INT32`) {#UCAN1_ESC_FAIL15} + + UAVCANv1 ESC 15 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see UCAN1_ESC_FUNC15). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 8191 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 8191 | | -1 | |   | ### UCAN1_ESC_FAIL16 (`INT32`) {#UCAN1_ESC_FAIL16} + + UAVCANv1 ESC 16 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see UCAN1_ESC_FUNC16). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 8191 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 8191 | | -1 | |   | ### UCAN1_ESC_FAIL2 (`INT32`) {#UCAN1_ESC_FAIL2} + + UAVCANv1 ESC 2 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see UCAN1_ESC_FUNC2). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 8191 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 8191 | | -1 | |   | ### UCAN1_ESC_FAIL3 (`INT32`) {#UCAN1_ESC_FAIL3} + + UAVCANv1 ESC 3 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see UCAN1_ESC_FUNC3). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 8191 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 8191 | | -1 | |   | ### UCAN1_ESC_FAIL4 (`INT32`) {#UCAN1_ESC_FAIL4} + + UAVCANv1 ESC 4 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see UCAN1_ESC_FUNC4). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 8191 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 8191 | | -1 | |   | ### UCAN1_ESC_FAIL5 (`INT32`) {#UCAN1_ESC_FAIL5} + + UAVCANv1 ESC 5 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see UCAN1_ESC_FUNC5). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 8191 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 8191 | | -1 | |   | ### UCAN1_ESC_FAIL6 (`INT32`) {#UCAN1_ESC_FAIL6} + + UAVCANv1 ESC 6 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see UCAN1_ESC_FUNC6). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 8191 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 8191 | | -1 | |   | ### UCAN1_ESC_FAIL7 (`INT32`) {#UCAN1_ESC_FAIL7} + + UAVCANv1 ESC 7 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see UCAN1_ESC_FUNC7). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 8191 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 8191 | | -1 | |   | ### UCAN1_ESC_FAIL8 (`INT32`) {#UCAN1_ESC_FAIL8} + + UAVCANv1 ESC 8 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see UCAN1_ESC_FUNC8). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 8191 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 8191 | | -1 | |   | ### UCAN1_ESC_FAIL9 (`INT32`) {#UCAN1_ESC_FAIL9} + + UAVCANv1 ESC 9 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see UCAN1_ESC_FUNC9). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 8191 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 8191 | | -1 | |   | ### UCAN1_ESC_FUNC1 (`INT32`) {#UCAN1_ESC_FUNC1} + + UAVCANv1 ESC 1 Output Function. Select what should be output on UAVCANv1 ESC 1. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -10904,15 +12678,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### UCAN1_ESC_FUNC10 (`INT32`) {#UCAN1_ESC_FUNC10} + + UAVCANv1 ESC 10 Output Function. Select what should be output on UAVCANv1 ESC 10. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -10975,15 +12752,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### UCAN1_ESC_FUNC11 (`INT32`) {#UCAN1_ESC_FUNC11} + + UAVCANv1 ESC 11 Output Function. Select what should be output on UAVCANv1 ESC 11. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -11046,15 +12826,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### UCAN1_ESC_FUNC12 (`INT32`) {#UCAN1_ESC_FUNC12} + + UAVCANv1 ESC 12 Output Function. Select what should be output on UAVCANv1 ESC 12. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -11117,15 +12900,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### UCAN1_ESC_FUNC13 (`INT32`) {#UCAN1_ESC_FUNC13} + + UAVCANv1 ESC 13 Output Function. Select what should be output on UAVCANv1 ESC 13. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -11188,15 +12974,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### UCAN1_ESC_FUNC14 (`INT32`) {#UCAN1_ESC_FUNC14} + + UAVCANv1 ESC 14 Output Function. Select what should be output on UAVCANv1 ESC 14. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -11259,15 +13048,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### UCAN1_ESC_FUNC15 (`INT32`) {#UCAN1_ESC_FUNC15} + + UAVCANv1 ESC 15 Output Function. Select what should be output on UAVCANv1 ESC 15. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -11330,15 +13122,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### UCAN1_ESC_FUNC16 (`INT32`) {#UCAN1_ESC_FUNC16} + + UAVCANv1 ESC 16 Output Function. Select what should be output on UAVCANv1 ESC 16. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -11401,15 +13196,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### UCAN1_ESC_FUNC2 (`INT32`) {#UCAN1_ESC_FUNC2} + + UAVCANv1 ESC 2 Output Function. Select what should be output on UAVCANv1 ESC 2. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -11472,15 +13270,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### UCAN1_ESC_FUNC3 (`INT32`) {#UCAN1_ESC_FUNC3} + + UAVCANv1 ESC 3 Output Function. Select what should be output on UAVCANv1 ESC 3. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -11543,15 +13344,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### UCAN1_ESC_FUNC4 (`INT32`) {#UCAN1_ESC_FUNC4} + + UAVCANv1 ESC 4 Output Function. Select what should be output on UAVCANv1 ESC 4. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -11614,15 +13418,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### UCAN1_ESC_FUNC5 (`INT32`) {#UCAN1_ESC_FUNC5} + + UAVCANv1 ESC 5 Output Function. Select what should be output on UAVCANv1 ESC 5. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -11685,15 +13492,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### UCAN1_ESC_FUNC6 (`INT32`) {#UCAN1_ESC_FUNC6} + + UAVCANv1 ESC 6 Output Function. Select what should be output on UAVCANv1 ESC 6. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -11756,15 +13566,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### UCAN1_ESC_FUNC7 (`INT32`) {#UCAN1_ESC_FUNC7} + + UAVCANv1 ESC 7 Output Function. Select what should be output on UAVCANv1 ESC 7. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -11827,15 +13640,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### UCAN1_ESC_FUNC8 (`INT32`) {#UCAN1_ESC_FUNC8} + + UAVCANv1 ESC 8 Output Function. Select what should be output on UAVCANv1 ESC 8. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -11898,15 +13714,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### UCAN1_ESC_FUNC9 (`INT32`) {#UCAN1_ESC_FUNC9} + + UAVCANv1 ESC 9 Output Function. Select what should be output on UAVCANv1 ESC 9. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -11969,332 +13788,398 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### UCAN1_ESC_MAX1 (`INT32`) {#UCAN1_ESC_MAX1} + + UAVCANv1 ESC 1 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 8191 | | 8191 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8191 | | 8191 | |   | ### UCAN1_ESC_MAX10 (`INT32`) {#UCAN1_ESC_MAX10} + + UAVCANv1 ESC 10 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 8191 | | 8191 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8191 | | 8191 | |   | ### UCAN1_ESC_MAX11 (`INT32`) {#UCAN1_ESC_MAX11} + + UAVCANv1 ESC 11 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 8191 | | 8191 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8191 | | 8191 | |   | ### UCAN1_ESC_MAX12 (`INT32`) {#UCAN1_ESC_MAX12} + + UAVCANv1 ESC 12 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 8191 | | 8191 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8191 | | 8191 | |   | ### UCAN1_ESC_MAX13 (`INT32`) {#UCAN1_ESC_MAX13} + + UAVCANv1 ESC 13 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 8191 | | 8191 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8191 | | 8191 | |   | ### UCAN1_ESC_MAX14 (`INT32`) {#UCAN1_ESC_MAX14} + + UAVCANv1 ESC 14 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 8191 | | 8191 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8191 | | 8191 | |   | ### UCAN1_ESC_MAX15 (`INT32`) {#UCAN1_ESC_MAX15} + + UAVCANv1 ESC 15 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 8191 | | 8191 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8191 | | 8191 | |   | ### UCAN1_ESC_MAX16 (`INT32`) {#UCAN1_ESC_MAX16} + + UAVCANv1 ESC 16 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 8191 | | 8191 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8191 | | 8191 | |   | ### UCAN1_ESC_MAX2 (`INT32`) {#UCAN1_ESC_MAX2} + + UAVCANv1 ESC 2 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 8191 | | 8191 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8191 | | 8191 | |   | ### UCAN1_ESC_MAX3 (`INT32`) {#UCAN1_ESC_MAX3} + + UAVCANv1 ESC 3 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 8191 | | 8191 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8191 | | 8191 | |   | ### UCAN1_ESC_MAX4 (`INT32`) {#UCAN1_ESC_MAX4} + + UAVCANv1 ESC 4 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 8191 | | 8191 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8191 | | 8191 | |   | ### UCAN1_ESC_MAX5 (`INT32`) {#UCAN1_ESC_MAX5} + + UAVCANv1 ESC 5 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 8191 | | 8191 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8191 | | 8191 | |   | ### UCAN1_ESC_MAX6 (`INT32`) {#UCAN1_ESC_MAX6} + + UAVCANv1 ESC 6 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 8191 | | 8191 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8191 | | 8191 | |   | ### UCAN1_ESC_MAX7 (`INT32`) {#UCAN1_ESC_MAX7} + + UAVCANv1 ESC 7 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 8191 | | 8191 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8191 | | 8191 | |   | ### UCAN1_ESC_MAX8 (`INT32`) {#UCAN1_ESC_MAX8} + + UAVCANv1 ESC 8 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 8191 | | 8191 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8191 | | 8191 | |   | ### UCAN1_ESC_MAX9 (`INT32`) {#UCAN1_ESC_MAX9} + + UAVCANv1 ESC 9 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 8191 | | 8191 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8191 | | 8191 | |   | ### UCAN1_ESC_MIN1 (`INT32`) {#UCAN1_ESC_MIN1} + + UAVCANv1 ESC 1 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 8191 | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8191 | | 1 | |   | ### UCAN1_ESC_MIN10 (`INT32`) {#UCAN1_ESC_MIN10} + + UAVCANv1 ESC 10 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 8191 | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8191 | | 1 | |   | ### UCAN1_ESC_MIN11 (`INT32`) {#UCAN1_ESC_MIN11} + + UAVCANv1 ESC 11 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 8191 | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8191 | | 1 | |   | ### UCAN1_ESC_MIN12 (`INT32`) {#UCAN1_ESC_MIN12} + + UAVCANv1 ESC 12 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 8191 | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8191 | | 1 | |   | ### UCAN1_ESC_MIN13 (`INT32`) {#UCAN1_ESC_MIN13} + + UAVCANv1 ESC 13 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 8191 | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8191 | | 1 | |   | ### UCAN1_ESC_MIN14 (`INT32`) {#UCAN1_ESC_MIN14} + + UAVCANv1 ESC 14 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 8191 | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8191 | | 1 | |   | ### UCAN1_ESC_MIN15 (`INT32`) {#UCAN1_ESC_MIN15} + + UAVCANv1 ESC 15 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 8191 | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8191 | | 1 | |   | ### UCAN1_ESC_MIN16 (`INT32`) {#UCAN1_ESC_MIN16} + + UAVCANv1 ESC 16 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 8191 | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8191 | | 1 | |   | ### UCAN1_ESC_MIN2 (`INT32`) {#UCAN1_ESC_MIN2} + + UAVCANv1 ESC 2 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 8191 | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8191 | | 1 | |   | ### UCAN1_ESC_MIN3 (`INT32`) {#UCAN1_ESC_MIN3} + + UAVCANv1 ESC 3 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 8191 | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8191 | | 1 | |   | ### UCAN1_ESC_MIN4 (`INT32`) {#UCAN1_ESC_MIN4} + + UAVCANv1 ESC 4 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 8191 | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8191 | | 1 | |   | ### UCAN1_ESC_MIN5 (`INT32`) {#UCAN1_ESC_MIN5} + + UAVCANv1 ESC 5 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 8191 | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8191 | | 1 | |   | ### UCAN1_ESC_MIN6 (`INT32`) {#UCAN1_ESC_MIN6} + + UAVCANv1 ESC 6 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 8191 | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8191 | | 1 | |   | ### UCAN1_ESC_MIN7 (`INT32`) {#UCAN1_ESC_MIN7} + + UAVCANv1 ESC 7 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 8191 | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8191 | | 1 | |   | ### UCAN1_ESC_MIN8 (`INT32`) {#UCAN1_ESC_MIN8} + + UAVCANv1 ESC 8 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 8191 | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8191 | | 1 | |   | ### UCAN1_ESC_MIN9 (`INT32`) {#UCAN1_ESC_MIN9} + + UAVCANv1 ESC 9 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 8191 | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8191 | | 1 | |   | ### UCAN1_ESC_REV (`INT32`) {#UCAN1_ESC_REV} + + Reverse Output Range for UAVCANv1. Allows to reverse the output range for each channel. @@ -12319,15 +14204,18 @@ Note: this is only useful for servos. - `14`: UAVCANv1 ESC 15 - `15`: UAVCANv1 ESC 16 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 65535 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 65535 | | 0 | |   | ### VOXL2_IO_FUNC1 (`INT32`) {#VOXL2_IO_FUNC1} + + VOXL2 IO Output PWM Channel 1 Output Function. Select what should be output on VOXL2 IO Output PWM Channel 1. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -12390,15 +14278,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### VOXL2_IO_FUNC2 (`INT32`) {#VOXL2_IO_FUNC2} + + VOXL2 IO Output PWM Channel 2 Output Function. Select what should be output on VOXL2 IO Output PWM Channel 2. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -12461,15 +14352,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### VOXL2_IO_FUNC3 (`INT32`) {#VOXL2_IO_FUNC3} + + VOXL2 IO Output PWM Channel 3 Output Function. Select what should be output on VOXL2 IO Output PWM Channel 3. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -12532,15 +14426,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### VOXL2_IO_FUNC4 (`INT32`) {#VOXL2_IO_FUNC4} + + VOXL2 IO Output PWM Channel 4 Output Function. Select what should be output on VOXL2 IO Output PWM Channel 4. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -12603,15 +14500,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### VOXL2_IO_FUNC5 (`INT32`) {#VOXL2_IO_FUNC5} + + VOXL2 IO Output PWM Channel 5 Output Function. Select what should be output on VOXL2 IO Output PWM Channel 5. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -12674,15 +14574,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### VOXL2_IO_FUNC6 (`INT32`) {#VOXL2_IO_FUNC6} + + VOXL2 IO Output PWM Channel 6 Output Function. Select what should be output on VOXL2 IO Output PWM Channel 6. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -12745,15 +14648,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### VOXL2_IO_FUNC7 (`INT32`) {#VOXL2_IO_FUNC7} + + VOXL2 IO Output PWM Channel 7 Output Function. Select what should be output on VOXL2 IO Output PWM Channel 7. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -12816,15 +14722,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### VOXL2_IO_FUNC8 (`INT32`) {#VOXL2_IO_FUNC8} + + VOXL2 IO Output PWM Channel 8 Output Function. Select what should be output on VOXL2 IO Output PWM Channel 8. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -12887,12 +14796,14 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### VOXL2_IO_REV (`INT32`) {#VOXL2_IO_REV} + + Reverse Output Range for VOXL2 IO Output. Allows to reverse the output range for each channel. @@ -12909,15 +14820,18 @@ Note: this is only useful for servos. - `6`: VOXL2 IO Output PWM Channel 7 - `7`: VOXL2 IO Output PWM Channel 8 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 255 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 255 | | 0 | |   | ### VOXL_ESC_FUNC1 (`INT32`) {#VOXL_ESC_FUNC1} + + VOXL ESC Output ESC 1 Output Function. Select what should be output on VOXL ESC Output ESC 1. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -12980,15 +14894,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### VOXL_ESC_FUNC2 (`INT32`) {#VOXL_ESC_FUNC2} + + VOXL ESC Output ESC 2 Output Function. Select what should be output on VOXL ESC Output ESC 2. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -13051,15 +14968,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### VOXL_ESC_FUNC3 (`INT32`) {#VOXL_ESC_FUNC3} + + VOXL ESC Output ESC 3 Output Function. Select what should be output on VOXL ESC Output ESC 3. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -13122,15 +15042,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### VOXL_ESC_FUNC4 (`INT32`) {#VOXL_ESC_FUNC4} + + VOXL ESC Output ESC 4 Output Function. Select what should be output on VOXL ESC Output ESC 4. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -13193,12 +15116,14 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### VOXL_ESC_REV (`INT32`) {#VOXL_ESC_REV} + + Reverse Output Range for VOXL ESC Output. Allows to reverse the output range for each channel. @@ -13211,367 +15136,466 @@ Note: this is only useful for servos. - `2`: VOXL ESC Output ESC 3 - `3`: VOXL ESC Output ESC 4 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 15 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 15 | | 0 | |   | ### VTQ_IO_DIS0 (`INT32`) {#VTQ_IO_DIS0} + + Vertiq IO CVI 0 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 65535 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 65535 | | 0 | |   | ### VTQ_IO_DIS1 (`INT32`) {#VTQ_IO_DIS1} + + Vertiq IO CVI 1 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 65535 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 65535 | | 0 | |   | ### VTQ_IO_DIS10 (`INT32`) {#VTQ_IO_DIS10} + + Vertiq IO CVI 10 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 65535 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 65535 | | 0 | |   | ### VTQ_IO_DIS11 (`INT32`) {#VTQ_IO_DIS11} + + Vertiq IO CVI 11 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 65535 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 65535 | | 0 | |   | ### VTQ_IO_DIS12 (`INT32`) {#VTQ_IO_DIS12} + + Vertiq IO CVI 12 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 65535 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 65535 | | 0 | |   | ### VTQ_IO_DIS13 (`INT32`) {#VTQ_IO_DIS13} + + Vertiq IO CVI 13 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 65535 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 65535 | | 0 | |   | ### VTQ_IO_DIS14 (`INT32`) {#VTQ_IO_DIS14} + + Vertiq IO CVI 14 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 65535 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 65535 | | 0 | |   | ### VTQ_IO_DIS15 (`INT32`) {#VTQ_IO_DIS15} + + Vertiq IO CVI 15 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 65535 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 65535 | | 0 | |   | ### VTQ_IO_DIS2 (`INT32`) {#VTQ_IO_DIS2} + + Vertiq IO CVI 2 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 65535 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 65535 | | 0 | |   | ### VTQ_IO_DIS3 (`INT32`) {#VTQ_IO_DIS3} + + Vertiq IO CVI 3 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 65535 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 65535 | | 0 | |   | ### VTQ_IO_DIS4 (`INT32`) {#VTQ_IO_DIS4} + + Vertiq IO CVI 4 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 65535 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 65535 | | 0 | |   | ### VTQ_IO_DIS5 (`INT32`) {#VTQ_IO_DIS5} + + Vertiq IO CVI 5 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 65535 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 65535 | | 0 | |   | ### VTQ_IO_DIS6 (`INT32`) {#VTQ_IO_DIS6} + + Vertiq IO CVI 6 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 65535 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 65535 | | 0 | |   | ### VTQ_IO_DIS7 (`INT32`) {#VTQ_IO_DIS7} + + Vertiq IO CVI 7 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 65535 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 65535 | | 0 | |   | ### VTQ_IO_DIS8 (`INT32`) {#VTQ_IO_DIS8} + + Vertiq IO CVI 8 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 65535 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 65535 | | 0 | |   | ### VTQ_IO_DIS9 (`INT32`) {#VTQ_IO_DIS9} + + Vertiq IO CVI 9 Disarmed Value. This is the output value that is set when not armed. + Note that non-motor outputs might already be active in prearm state if COM_PREARM_MODE is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 65535 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 65535 | | 0 | |   | ### VTQ_IO_FAIL0 (`INT32`) {#VTQ_IO_FAIL0} + + Vertiq IO CVI 0 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see VTQ_IO_FUNC0). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 500 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 500 | | -1 | |   | ### VTQ_IO_FAIL1 (`INT32`) {#VTQ_IO_FAIL1} + + Vertiq IO CVI 1 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see VTQ_IO_FUNC1). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 500 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 500 | | -1 | |   | ### VTQ_IO_FAIL10 (`INT32`) {#VTQ_IO_FAIL10} + + Vertiq IO CVI 10 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see VTQ_IO_FUNC10). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 500 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 500 | | -1 | |   | ### VTQ_IO_FAIL11 (`INT32`) {#VTQ_IO_FAIL11} + + Vertiq IO CVI 11 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see VTQ_IO_FUNC11). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 500 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 500 | | -1 | |   | ### VTQ_IO_FAIL12 (`INT32`) {#VTQ_IO_FAIL12} + + Vertiq IO CVI 12 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see VTQ_IO_FUNC12). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 500 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 500 | | -1 | |   | ### VTQ_IO_FAIL13 (`INT32`) {#VTQ_IO_FAIL13} + + Vertiq IO CVI 13 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see VTQ_IO_FUNC13). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 500 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 500 | | -1 | |   | ### VTQ_IO_FAIL14 (`INT32`) {#VTQ_IO_FAIL14} + + Vertiq IO CVI 14 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see VTQ_IO_FUNC14). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 500 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 500 | | -1 | |   | ### VTQ_IO_FAIL15 (`INT32`) {#VTQ_IO_FAIL15} + + Vertiq IO CVI 15 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see VTQ_IO_FUNC15). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 500 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 500 | | -1 | |   | ### VTQ_IO_FAIL2 (`INT32`) {#VTQ_IO_FAIL2} + + Vertiq IO CVI 2 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see VTQ_IO_FUNC2). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 500 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 500 | | -1 | |   | ### VTQ_IO_FAIL3 (`INT32`) {#VTQ_IO_FAIL3} + + Vertiq IO CVI 3 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see VTQ_IO_FUNC3). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 500 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 500 | | -1 | |   | ### VTQ_IO_FAIL4 (`INT32`) {#VTQ_IO_FAIL4} + + Vertiq IO CVI 4 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see VTQ_IO_FUNC4). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 500 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 500 | | -1 | |   | ### VTQ_IO_FAIL5 (`INT32`) {#VTQ_IO_FAIL5} + + Vertiq IO CVI 5 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see VTQ_IO_FUNC5). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 500 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 500 | | -1 | |   | ### VTQ_IO_FAIL6 (`INT32`) {#VTQ_IO_FAIL6} + + Vertiq IO CVI 6 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see VTQ_IO_FUNC6). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 500 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 500 | | -1 | |   | ### VTQ_IO_FAIL7 (`INT32`) {#VTQ_IO_FAIL7} + + Vertiq IO CVI 7 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see VTQ_IO_FUNC7). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 500 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 500 | | -1 | |   | ### VTQ_IO_FAIL8 (`INT32`) {#VTQ_IO_FAIL8} + + Vertiq IO CVI 8 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see VTQ_IO_FUNC8). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 500 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 500 | | -1 | |   | ### VTQ_IO_FAIL9 (`INT32`) {#VTQ_IO_FAIL9} + + Vertiq IO CVI 9 Failsafe Value. This is the output value that is set when in failsafe mode. + When set to -1 (default), the value depends on the function (see VTQ_IO_FUNC9). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 500 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 500 | | -1 | |   | ### VTQ_IO_FUNC0 (`INT32`) {#VTQ_IO_FUNC0} + + Vertiq IO CVI 0 Output Function. Select what should be output on Vertiq IO CVI 0. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -13634,15 +15658,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### VTQ_IO_FUNC1 (`INT32`) {#VTQ_IO_FUNC1} + + Vertiq IO CVI 1 Output Function. Select what should be output on Vertiq IO CVI 1. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -13705,15 +15732,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### VTQ_IO_FUNC10 (`INT32`) {#VTQ_IO_FUNC10} + + Vertiq IO CVI 10 Output Function. Select what should be output on Vertiq IO CVI 10. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -13776,15 +15806,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### VTQ_IO_FUNC11 (`INT32`) {#VTQ_IO_FUNC11} + + Vertiq IO CVI 11 Output Function. Select what should be output on Vertiq IO CVI 11. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -13847,15 +15880,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### VTQ_IO_FUNC12 (`INT32`) {#VTQ_IO_FUNC12} + + Vertiq IO CVI 12 Output Function. Select what should be output on Vertiq IO CVI 12. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -13918,15 +15954,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### VTQ_IO_FUNC13 (`INT32`) {#VTQ_IO_FUNC13} + + Vertiq IO CVI 13 Output Function. Select what should be output on Vertiq IO CVI 13. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -13989,15 +16028,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### VTQ_IO_FUNC14 (`INT32`) {#VTQ_IO_FUNC14} + + Vertiq IO CVI 14 Output Function. Select what should be output on Vertiq IO CVI 14. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -14060,15 +16102,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### VTQ_IO_FUNC15 (`INT32`) {#VTQ_IO_FUNC15} + + Vertiq IO CVI 15 Output Function. Select what should be output on Vertiq IO CVI 15. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -14131,15 +16176,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### VTQ_IO_FUNC2 (`INT32`) {#VTQ_IO_FUNC2} + + Vertiq IO CVI 2 Output Function. Select what should be output on Vertiq IO CVI 2. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -14202,15 +16250,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### VTQ_IO_FUNC3 (`INT32`) {#VTQ_IO_FUNC3} + + Vertiq IO CVI 3 Output Function. Select what should be output on Vertiq IO CVI 3. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -14273,15 +16324,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### VTQ_IO_FUNC4 (`INT32`) {#VTQ_IO_FUNC4} + + Vertiq IO CVI 4 Output Function. Select what should be output on Vertiq IO CVI 4. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -14344,15 +16398,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### VTQ_IO_FUNC5 (`INT32`) {#VTQ_IO_FUNC5} + + Vertiq IO CVI 5 Output Function. Select what should be output on Vertiq IO CVI 5. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -14415,15 +16472,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### VTQ_IO_FUNC6 (`INT32`) {#VTQ_IO_FUNC6} + + Vertiq IO CVI 6 Output Function. Select what should be output on Vertiq IO CVI 6. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -14486,15 +16546,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### VTQ_IO_FUNC7 (`INT32`) {#VTQ_IO_FUNC7} + + Vertiq IO CVI 7 Output Function. Select what should be output on Vertiq IO CVI 7. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -14557,15 +16620,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### VTQ_IO_FUNC8 (`INT32`) {#VTQ_IO_FUNC8} + + Vertiq IO CVI 8 Output Function. Select what should be output on Vertiq IO CVI 8. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -14628,15 +16694,18 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### VTQ_IO_FUNC9 (`INT32`) {#VTQ_IO_FUNC9} + + Vertiq IO CVI 9 Output Function. Select what should be output on Vertiq IO CVI 9. + The default failsafe value is set according to the selected function: - 'Min' for ConstantMin @@ -14699,332 +16768,398 @@ The default failsafe value is set according to the selected function: - `452`: IC Engine Choke - `453`: IC Engine Starter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### VTQ_IO_MAX0 (`INT32`) {#VTQ_IO_MAX0} + + Vertiq IO CVI 0 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 65535 | | 65535 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 65535 | | 65535 | |   | ### VTQ_IO_MAX1 (`INT32`) {#VTQ_IO_MAX1} + + Vertiq IO CVI 1 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 65535 | | 65535 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 65535 | | 65535 | |   | ### VTQ_IO_MAX10 (`INT32`) {#VTQ_IO_MAX10} + + Vertiq IO CVI 10 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 65535 | | 65535 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 65535 | | 65535 | |   | ### VTQ_IO_MAX11 (`INT32`) {#VTQ_IO_MAX11} + + Vertiq IO CVI 11 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 65535 | | 65535 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 65535 | | 65535 | |   | ### VTQ_IO_MAX12 (`INT32`) {#VTQ_IO_MAX12} + + Vertiq IO CVI 12 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 65535 | | 65535 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 65535 | | 65535 | |   | ### VTQ_IO_MAX13 (`INT32`) {#VTQ_IO_MAX13} + + Vertiq IO CVI 13 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 65535 | | 65535 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 65535 | | 65535 | |   | ### VTQ_IO_MAX14 (`INT32`) {#VTQ_IO_MAX14} + + Vertiq IO CVI 14 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 65535 | | 65535 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 65535 | | 65535 | |   | ### VTQ_IO_MAX15 (`INT32`) {#VTQ_IO_MAX15} + + Vertiq IO CVI 15 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 65535 | | 65535 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 65535 | | 65535 | |   | ### VTQ_IO_MAX2 (`INT32`) {#VTQ_IO_MAX2} + + Vertiq IO CVI 2 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 65535 | | 65535 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 65535 | | 65535 | |   | ### VTQ_IO_MAX3 (`INT32`) {#VTQ_IO_MAX3} + + Vertiq IO CVI 3 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 65535 | | 65535 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 65535 | | 65535 | |   | ### VTQ_IO_MAX4 (`INT32`) {#VTQ_IO_MAX4} + + Vertiq IO CVI 4 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 65535 | | 65535 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 65535 | | 65535 | |   | ### VTQ_IO_MAX5 (`INT32`) {#VTQ_IO_MAX5} + + Vertiq IO CVI 5 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 65535 | | 65535 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 65535 | | 65535 | |   | ### VTQ_IO_MAX6 (`INT32`) {#VTQ_IO_MAX6} + + Vertiq IO CVI 6 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 65535 | | 65535 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 65535 | | 65535 | |   | ### VTQ_IO_MAX7 (`INT32`) {#VTQ_IO_MAX7} + + Vertiq IO CVI 7 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 65535 | | 65535 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 65535 | | 65535 | |   | ### VTQ_IO_MAX8 (`INT32`) {#VTQ_IO_MAX8} + + Vertiq IO CVI 8 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 65535 | | 65535 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 65535 | | 65535 | |   | ### VTQ_IO_MAX9 (`INT32`) {#VTQ_IO_MAX9} + + Vertiq IO CVI 9 Maximum Value. Maxmimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 65535 | | 65535 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 65535 | | 65535 | |   | ### VTQ_IO_MIN0 (`INT32`) {#VTQ_IO_MIN0} + + Vertiq IO CVI 0 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 65535 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 65535 | | 0 | |   | ### VTQ_IO_MIN1 (`INT32`) {#VTQ_IO_MIN1} + + Vertiq IO CVI 1 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 65535 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 65535 | | 0 | |   | ### VTQ_IO_MIN10 (`INT32`) {#VTQ_IO_MIN10} + + Vertiq IO CVI 10 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 65535 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 65535 | | 0 | |   | ### VTQ_IO_MIN11 (`INT32`) {#VTQ_IO_MIN11} + + Vertiq IO CVI 11 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 65535 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 65535 | | 0 | |   | ### VTQ_IO_MIN12 (`INT32`) {#VTQ_IO_MIN12} + + Vertiq IO CVI 12 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 65535 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 65535 | | 0 | |   | ### VTQ_IO_MIN13 (`INT32`) {#VTQ_IO_MIN13} + + Vertiq IO CVI 13 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 65535 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 65535 | | 0 | |   | ### VTQ_IO_MIN14 (`INT32`) {#VTQ_IO_MIN14} + + Vertiq IO CVI 14 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 65535 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 65535 | | 0 | |   | ### VTQ_IO_MIN15 (`INT32`) {#VTQ_IO_MIN15} + + Vertiq IO CVI 15 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 65535 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 65535 | | 0 | |   | ### VTQ_IO_MIN2 (`INT32`) {#VTQ_IO_MIN2} + + Vertiq IO CVI 2 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 65535 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 65535 | | 0 | |   | ### VTQ_IO_MIN3 (`INT32`) {#VTQ_IO_MIN3} + + Vertiq IO CVI 3 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 65535 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 65535 | | 0 | |   | ### VTQ_IO_MIN4 (`INT32`) {#VTQ_IO_MIN4} + + Vertiq IO CVI 4 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 65535 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 65535 | | 0 | |   | ### VTQ_IO_MIN5 (`INT32`) {#VTQ_IO_MIN5} + + Vertiq IO CVI 5 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 65535 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 65535 | | 0 | |   | ### VTQ_IO_MIN6 (`INT32`) {#VTQ_IO_MIN6} + + Vertiq IO CVI 6 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 65535 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 65535 | | 0 | |   | ### VTQ_IO_MIN7 (`INT32`) {#VTQ_IO_MIN7} + + Vertiq IO CVI 7 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 65535 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 65535 | | 0 | |   | ### VTQ_IO_MIN8 (`INT32`) {#VTQ_IO_MIN8} + + Vertiq IO CVI 8 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 65535 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 65535 | | 0 | |   | ### VTQ_IO_MIN9 (`INT32`) {#VTQ_IO_MIN9} + + Vertiq IO CVI 9 Minimum Value. Minimum output value (when not disarmed). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 65535 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 65535 | | 0 | |   | ### VTQ_IO_REV (`INT32`) {#VTQ_IO_REV} + + Reverse Output Range for Vertiq IO. Allows to reverse the output range for each channel. @@ -15049,37 +17184,18 @@ Note: this is only useful for servos. - `13`: Vertiq IO CVI 14 - `14`: Vertiq IO CVI 15 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 32767 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 32767 | | 0 | |   | ## Airspeed Validator -### ASPD_BETA_GATE (`INT32`) {#ASPD_BETA_GATE} - -Gate size for sideslip angle fusion. - -Sets the number of standard deviations used by the innovation consistency test. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1 | 5 | | 1 | SD | - -### ASPD_BETA_NOISE (`FLOAT`) {#ASPD_BETA_NOISE} - -Wind estimator sideslip measurement noise. - -Sideslip measurement noise of the internal wind estimator(s) of the airspeed selector. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1 | | 0.15 | rad | - ### ASPD_DO_CHECKS (`INT32`) {#ASPD_DO_CHECKS} Enable checks on airspeed sensors. Controls which checks are run to check airspeed data for validity. Only applied if ASPD_PRIMARY > 0. + Note: The missing data check (bit 0) is implicitly always enabled when ASPD_DO_CHECKS > 0, even if bit 0 is not explicitly set. **Bitmask:** @@ -15090,9 +17206,9 @@ Note: The missing data check (bit 0) is implicitly always enabled when ASPD_DO_C - `3`: Load factor check (triggers if measurement is below stall speed) - `4`: First principle check (airspeed change vs. throttle and pitch) -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 31 | | 7 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 31 | | 7 | |   | ### ASPD_FALLBACK (`INT32`) {#ASPD_FALLBACK} @@ -15104,9 +17220,9 @@ Fallback options. - `1`: Fallback to groundspeed-minus-windspeed airspeed estimation - `2`: Fallback to thrust based airspeed estimation -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### ASPD_FP_T_WINDOW (`FLOAT`) {#ASPD_FP_T_WINDOW} @@ -15118,9 +17234,9 @@ and the vehicle pitches down. Is meant to catch degrading airspeed blockages as can happen when flying through icing conditions. Relies on FW_THR_TRIM being set accurately. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | | | 2.0 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | | | 2.0 | s |   | ### ASPD_FS_INNOV (`FLOAT`) {#ASPD_FS_INNOV} @@ -15131,9 +17247,9 @@ smaller values make it more sensitive. Large innovations indicate an inconsisten and measured airspeed. The time required to detect a fault when the threshold is exceeded depends on the size of the exceedance and is controlled by the ASPD_FS_INTEG parameter. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.5 | 10.0 | | 5. | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.5 | 10.0 | | 5.0 | m/s |   | ### ASPD_FS_INTEG (`FLOAT`) {#ASPD_FS_INTEG} @@ -15142,9 +17258,9 @@ Airspeed failure innovation integral threshold. This sets the time integral of airspeed innovation exceedance above ASPD_FS_INNOV required to trigger a failsafe. Larger values make the check less sensitive, smaller positive values make it more sensitive. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 50.0 | | 10. | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 50.0 | | 10.0 | m |   | ### ASPD_FS_T_START (`FLOAT`) {#ASPD_FS_T_START} @@ -15153,9 +17269,9 @@ Airspeed failsafe start delay. Delay before switching back to using airspeed sensor if checks indicate sensor is good. Set to a negative value to disable the re-enabling in flight. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1.0 | | | -1. | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1.0 | | | -1.0 | s |   | ### ASPD_FS_T_STOP (`FLOAT`) {#ASPD_FS_T_STOP} @@ -15163,9 +17279,9 @@ Airspeed failsafe stop delay. Delay before stopping use of airspeed sensor if checks indicate sensor is bad. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | | | 1. | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | | | 1.0 | s |   | ### ASPD_PRIMARY (`INT32`) {#ASPD_PRIMARY} @@ -15179,9 +17295,9 @@ Index or primary airspeed measurement source. - `3`: Third airspeed sensor - `4`: Thrust based airspeed -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 1 | |   | ### ASPD_SCALE_1 (`FLOAT`) {#ASPD_SCALE_1} @@ -15189,9 +17305,9 @@ Scale of airspeed sensor 1. This is the scale IAS --> CAS of the first airspeed sensor instance -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.5 | 2.0 | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.5 | 2.0 | | 1.0 | |   | ### ASPD_SCALE_2 (`FLOAT`) {#ASPD_SCALE_2} @@ -15199,9 +17315,9 @@ Scale of airspeed sensor 2. This is the scale IAS --> CAS of the second airspeed sensor instance -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.5 | 2.0 | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.5 | 2.0 | | 1.0 | |   | ### ASPD_SCALE_3 (`FLOAT`) {#ASPD_SCALE_3} @@ -15209,9 +17325,9 @@ Scale of airspeed sensor 3. This is the scale IAS --> CAS of the third airspeed sensor instance -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.5 | 2.0 | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.5 | 2.0 | | 1.0 | |   | ### ASPD_SCALE_APPLY (`INT32`) {#ASPD_SCALE_APPLY} @@ -15223,30 +17339,9 @@ Controls when to apply the new estimated airspeed scale(s). - `1`: Apply the estimated scale after disarm - `2`: Apply the estimated scale in air -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 2 | - -### ASPD_SCALE_NSD (`FLOAT`) {#ASPD_SCALE_NSD} - -Wind estimator true airspeed scale process noise spectral density. - -Airspeed scale process noise of the internal wind estimator(s) of the airspeed selector. -When unaided, the scale uncertainty (1-sigma, unitless) increases by this amount every second. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ------------ | -|   | 0 | 0.1 | | 1.e-4 | 1/s/sqrt(Hz) | - -### ASPD_TAS_GATE (`INT32`) {#ASPD_TAS_GATE} - -Gate size for true airspeed fusion. - -Sets the number of standard deviations used by the innovation consistency test. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1 | 5 | | 4 | SD | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 2 | |   | ### ASPD_TAS_NOISE (`FLOAT`) {#ASPD_TAS_NOISE} @@ -15254,9 +17349,9 @@ Wind estimator true airspeed measurement noise. True airspeed measurement noise of the internal wind estimator(s) of the airspeed selector. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 4 | | 1.4 | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 4 | | 1.4 | m/s |   | ### ASPD_WERR_THR (`FLOAT`) {#ASPD_WERR_THR} @@ -15265,9 +17360,9 @@ Horizontal wind uncertainty threshold for valid ground-minus-wind. The airspeed alternative derived from groundspeed and heading will be declared valid as soon and as long the horizontal wind uncertainty is below this value. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.01 | 5 | | 2. | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.01 | 5 | | 2.0 | m/s |   | ### ASPD_WIND_NSD (`FLOAT`) {#ASPD_WIND_NSD} @@ -15276,9 +17371,9 @@ Wind estimator wind process noise spectral density. Wind process noise of the internal wind estimator(s) of the airspeed selector. When unaided, the wind estimate uncertainty (1-sigma, in m/s) increases by this amount every second. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | -------------- | -|   | 0 | 1 | | 1.e-1 | m/s^2/sqrt(Hz) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | -------------- | --------- | +|   | 0 | 1 | | 0.1 | m/s^2/sqrt(Hz) |   | ## Attitude Q estimator @@ -15286,17 +17381,17 @@ When unaided, the wind estimate uncertainty (1-sigma, in m/s) increases by this Acceleration compensation based on GPS velocity. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------------ | ---- | -|   | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------------ | ---- | --------- | +|   | | | | Disabled (0) | |   | ### ATT_BIAS_MAX (`FLOAT`) {#ATT_BIAS_MAX} Gyro bias limit. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 0 | 2 | | 0.05 | rad/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | 0 | 2 | | 0.05 | rad/s |   | ### ATT_EN (`INT32`) {#ATT_EN} @@ -15304,9 +17399,9 @@ standalone attitude estimator enable (unsupported). Enable standalone quaternion based attitude estimator. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------------ | ---- | -|   | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------------ | ---- | --------- | +|   | | | | Disabled (0) | |   | ### ATT_EXT_HDG_M (`INT32`) {#ATT_EXT_HDG_M} @@ -15321,9 +17416,9 @@ Set to 2 to use heading from motion capture. - `1`: Vision - `2`: Motion Capture -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 2 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 2 | | 0 | |   | ### ATT_MAG_DECL (`FLOAT`) {#ATT_MAG_DECL} @@ -15333,51 +17428,51 @@ This parameter is not used in normal operation, as the declination is looked up based on the GPS coordinates of the vehicle. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | deg |   | ### ATT_MAG_DECL_A (`INT32`) {#ATT_MAG_DECL_A} Automatic GPS based declination compensation. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ----------- | ---- | -|   | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ----------- | ---- | --------- | +|   | | | | Enabled (1) | |   | ### ATT_W_ACC (`FLOAT`) {#ATT_W_ACC} -Complimentary filter accelerometer weight. +Complementary filter accelerometer weight. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1 | | 0.2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1 | | 0.2 | |   | ### ATT_W_EXT_HDG (`FLOAT`) {#ATT_W_EXT_HDG} -Complimentary filter external heading weight. +Complementary filter external heading weight. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1 | | 0.1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1 | | 0.1 | |   | ### ATT_W_GYRO_BIAS (`FLOAT`) {#ATT_W_GYRO_BIAS} -Complimentary filter gyroscope bias weight. +Complementary filter gyroscope bias weight. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1 | | 0.1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1 | | 0.1 | |   | ### ATT_W_MAG (`FLOAT`) {#ATT_W_MAG} -Complimentary filter magnetometer weight. +Complementary filter magnetometer weight. Set to 0 to avoid using the magnetometer. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1 | | 0.1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1 | | 0.1 | |   | ## Autotune @@ -15395,15 +17490,16 @@ immediately or after landing. - `1`: Apply the new gains after disarm - `2`: Apply the new gains in air -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 2 | |   | ### FW_AT_AXES (`INT32`) {#FW_AT_AXES} Tuning axes selection. Defines which axes will be tuned during the auto-tuning sequence + Set bits in the following positions to enable: 0 : Roll 1 : Pitch @@ -15415,9 +17511,9 @@ Set bits in the following positions to enable: - `1`: pitch - `2`: yaw -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1 | 7 | | 3 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1 | 7 | | 3 | |   | ### FW_AT_MAN_AUX (`INT32`) {#FW_AT_MAN_AUX} @@ -15435,9 +17531,9 @@ Defines which RC_MAP_AUXn parameter maps the manual control channel used to enab - `5`: Aux5 - `6`: Aux6 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 6 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 6 | | 0 | |   | ### FW_AT_SYSID_F0 (`FLOAT`) {#FW_AT_SYSID_F0} @@ -15445,9 +17541,9 @@ Start frequency of the injected signal. Can be set lower or higher than the end frequency -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 30.0 | | 1. | Hz | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 30.0 | | 1.0 | Hz |   | ### FW_AT_SYSID_F1 (`FLOAT`) {#FW_AT_SYSID_F1} @@ -15455,9 +17551,9 @@ End frequency of the injected signal. Can be set lower or higher than the start frequency -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 30.0 | | 10. | Hz | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 30.0 | | 10.0 | Hz |   | ### FW_AT_SYSID_TIME (`FLOAT`) {#FW_AT_SYSID_TIME} @@ -15465,9 +17561,9 @@ Maneuver time for each axis. Duration of the input signal sent on each axis during system identification -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 5 | 120 | | 10. | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 5 | 120 | | 10.0 | s |   | ### FW_AT_SYSID_TYPE (`INT32`) {#FW_AT_SYSID_TYPE} @@ -15481,9 +17577,9 @@ Type of signal used during system identification to excite the system. - `1`: Linear sine sweep - `2`: Logarithmic sine sweep -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 1 | |   | ### MC_AT_APPLY (`INT32`) {#MC_AT_APPLY} @@ -15492,6 +17588,7 @@ Controls when to apply the new gains. After the auto-tuning sequence is completed, a new set of gains is available and can be applied immediately or after landing. + WARNING Applying the gains in air is dangerous as there is no guarantee that those new gains will be able to stabilize the drone properly. @@ -15502,33 +17599,33 @@ the drone properly. - `1`: Apply the new gains after disarm - `2`: WARNING Apply the new gains in air -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 1 | |   | ### MC_AT_EN (`INT32`) {#MC_AT_EN} Multicopter autotune module enable. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------------ | ---- | -|   | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------------ | ---- | --------- | +|   | | | | Disabled (0) | |   | ### MC_AT_RISE_TIME (`FLOAT`) {#MC_AT_RISE_TIME} Desired angular rate closed-loop rise time. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.01 | 0.5 | | 0.14 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.01 | 0.5 | | 0.14 | s |   | ### MC_AT_SYSID_AMP (`FLOAT`) {#MC_AT_SYSID_AMP} Amplitude of the injected signal. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 6.0 | | 0.7 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 6.0 | | 0.7 | |   | ## Battery Calibration @@ -15540,9 +17637,9 @@ The voltage seen by the ADC multiplied by this factor will determine the battery current. A value of -1 means to use the board default. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | -1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | -1.0 | |   | ### BAT1_CAPACITY (`FLOAT`) {#BAT1_CAPACITY} @@ -15550,20 +17647,9 @@ Battery 1 capacity. Defines the capacity of battery 1 in mAh. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | -1.0 | 100000 | 50 | -1.0 | mAh | - -### BAT1_I_CHANNEL (`INT32`) {#BAT1_I_CHANNEL} - -Battery 1 Current ADC Channel. - -This parameter specifies the ADC channel used to monitor current of main power battery. -A value of -1 means to use the board default. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | -1.0 | 100000 | 50 | -1.0 | mAh |   | ### BAT1_I_FILT (`FLOAT`) {#BAT1_I_FILT} @@ -15573,9 +17659,9 @@ Low-pass filter time constant for the battery current ADC reading (in seconds). A higher value results in more smoothing and less noise, but slower response. A value of 0 disables the filter. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 5.0 | | 0.0 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 5.0 | | 0.0 | s |   | ### BAT1_I_OVERWRITE (`FLOAT`) {#BAT1_I_OVERWRITE} @@ -15589,9 +17675,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 | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### BAT1_N_CELLS (`INT32`) {#BAT1_N_CELLS} @@ -15619,9 +17705,9 @@ Defines the number of cells the attached battery consists of. - `15`: 15S Battery - `16`: 16S Battery -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### BAT1_R_INTERNAL (`FLOAT`) {#BAT1_R_INTERNAL} @@ -15629,9 +17715,9 @@ Explicitly defines the per cell internal resistance for battery 1. If non-negative, then this will be used instead of the online estimated internal resistance. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | -1.0 | 0.2 | 0.0005 | -1.0 | Ohm | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | -1.0 | 0.2 | 0.0005 | -1.0 | Ohm |   | ### BAT1_SOURCE (`INT32`) {#BAT1_SOURCE} @@ -15655,9 +17741,9 @@ This requires the ESC to provide both voltage as well as current (via ESC teleme - `1`: External - `2`: ESCs -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### BAT1_V_CHANNEL (`INT32`) {#BAT1_V_CHANNEL} @@ -15668,9 +17754,9 @@ A value of -1 means to use the board default. A value of -2 disables analog moni This is useful when the FMU supports both analog and digital voltage monitoring and you want to use digital monitoring exclusively. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | -1 | |   | ### BAT1_V_CHARGED (`FLOAT`) {#BAT1_V_CHARGED} @@ -15679,9 +17765,9 @@ Full cell voltage. Defines the voltage where a single cell of the battery is considered full. For a more accurate estimate set this below the nominal voltage of e.g. 4.2V -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | 0.01 | 4.05 | V | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | 0.01 | 4.05 | V |   | ### BAT1_V_DIV (`FLOAT`) {#BAT1_V_DIV} @@ -15692,9 +17778,9 @@ If using e.g. Mauch power modules the value from the datasheet can be applied straight here. A value of -1 means to use the board default. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | -1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | -1.0 | |   | ### BAT1_V_EMPTY (`FLOAT`) {#BAT1_V_EMPTY} @@ -15705,9 +17791,9 @@ The voltage should be chosen above the steep dropoff at 3.5V. A typical lithium battery can only be discharged under high load down to 10% before it drops off to a voltage level damaging the cells. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | 0.01 | 3.6 | V | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | 0.01 | 3.6 | V |   | ### BAT1_V_FILT (`FLOAT`) {#BAT1_V_FILT} @@ -15717,9 +17803,9 @@ Low-pass filter time constant for the battery voltage ADC reading (in seconds). A higher value results in more smoothing and less noise, but slower response. A value of 0 disables the filter. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 5.0 | | 0.0 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 5.0 | | 0.0 | s |   | ### BAT2_A_PER_V (`FLOAT`) {#BAT2_A_PER_V} @@ -15729,9 +17815,9 @@ The voltage seen by the ADC multiplied by this factor will determine the battery current. A value of -1 means to use the board default. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | -1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | -1.0 | |   | ### BAT2_CAPACITY (`FLOAT`) {#BAT2_CAPACITY} @@ -15739,20 +17825,9 @@ Battery 2 capacity. Defines the capacity of battery 2 in mAh. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | -1.0 | 100000 | 50 | -1.0 | mAh | - -### BAT2_I_CHANNEL (`INT32`) {#BAT2_I_CHANNEL} - -Battery 2 Current ADC Channel. - -This parameter specifies the ADC channel used to monitor current of main power battery. -A value of -1 means to use the board default. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | -1.0 | 100000 | 50 | -1.0 | mAh |   | ### BAT2_I_FILT (`FLOAT`) {#BAT2_I_FILT} @@ -15762,9 +17837,9 @@ Low-pass filter time constant for the battery current ADC reading (in seconds). A higher value results in more smoothing and less noise, but slower response. A value of 0 disables the filter. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 5.0 | | 0.0 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 5.0 | | 0.0 | s |   | ### BAT2_I_OVERWRITE (`FLOAT`) {#BAT2_I_OVERWRITE} @@ -15778,9 +17853,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 | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### BAT2_N_CELLS (`INT32`) {#BAT2_N_CELLS} @@ -15808,9 +17883,9 @@ Defines the number of cells the attached battery consists of. - `15`: 15S Battery - `16`: 16S Battery -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### BAT2_R_INTERNAL (`FLOAT`) {#BAT2_R_INTERNAL} @@ -15818,9 +17893,9 @@ Explicitly defines the per cell internal resistance for battery 2. If non-negative, then this will be used instead of the online estimated internal resistance. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | -1.0 | 0.2 | 0.0005 | -1.0 | Ohm | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | -1.0 | 0.2 | 0.0005 | -1.0 | Ohm |   | ### BAT2_SOURCE (`INT32`) {#BAT2_SOURCE} @@ -15844,9 +17919,9 @@ This requires the ESC to provide both voltage as well as current (via ESC teleme - `1`: External - `2`: ESCs -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | -1 | |   | ### BAT2_V_CHANNEL (`INT32`) {#BAT2_V_CHANNEL} @@ -15857,9 +17932,9 @@ A value of -1 means to use the board default. A value of -2 disables analog moni This is useful when the FMU supports both analog and digital voltage monitoring and you want to use digital monitoring exclusively. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | -1 | |   | ### BAT2_V_CHARGED (`FLOAT`) {#BAT2_V_CHARGED} @@ -15868,9 +17943,9 @@ Full cell voltage. Defines the voltage where a single cell of the battery is considered full. For a more accurate estimate set this below the nominal voltage of e.g. 4.2V -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | 0.01 | 4.05 | V | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | 0.01 | 4.05 | V |   | ### BAT2_V_DIV (`FLOAT`) {#BAT2_V_DIV} @@ -15881,9 +17956,9 @@ If using e.g. Mauch power modules the value from the datasheet can be applied straight here. A value of -1 means to use the board default. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | -1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | -1.0 | |   | ### BAT2_V_EMPTY (`FLOAT`) {#BAT2_V_EMPTY} @@ -15894,9 +17969,9 @@ The voltage should be chosen above the steep dropoff at 3.5V. A typical lithium battery can only be discharged under high load down to 10% before it drops off to a voltage level damaging the cells. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | 0.01 | 3.6 | V | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | 0.01 | 3.6 | V |   | ### BAT2_V_FILT (`FLOAT`) {#BAT2_V_FILT} @@ -15906,9 +17981,9 @@ Low-pass filter time constant for the battery voltage ADC reading (in seconds). A higher value results in more smoothing and less noise, but slower response. A value of 0 disables the filter. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 5.0 | | 0.0 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 5.0 | | 0.0 | s |   | ### BAT3_CAPACITY (`FLOAT`) {#BAT3_CAPACITY} @@ -15916,9 +17991,25 @@ Battery 3 capacity. Defines the capacity of battery 3 in mAh. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | -1.0 | 100000 | 50 | -1.0 | mAh | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | -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 | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### BAT3_N_CELLS (`INT32`) {#BAT3_N_CELLS} @@ -15946,9 +18037,9 @@ Defines the number of cells the attached battery consists of. - `15`: 15S Battery - `16`: 16S Battery -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### BAT3_R_INTERNAL (`FLOAT`) {#BAT3_R_INTERNAL} @@ -15956,9 +18047,9 @@ Explicitly defines the per cell internal resistance for battery 3. If non-negative, then this will be used instead of the online estimated internal resistance. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | -1.0 | 0.2 | 0.0005 | -1.0 | Ohm | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | -1.0 | 0.2 | 0.0005 | -1.0 | Ohm |   | ### BAT3_SOURCE (`INT32`) {#BAT3_SOURCE} @@ -15982,9 +18073,9 @@ This requires the ESC to provide both voltage as well as current (via ESC teleme - `1`: External - `2`: ESCs -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | -1 | |   | ### BAT3_V_CHARGED (`FLOAT`) {#BAT3_V_CHARGED} @@ -15993,9 +18084,9 @@ Full cell voltage. Defines the voltage where a single cell of the battery is considered full. For a more accurate estimate set this below the nominal voltage of e.g. 4.2V -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | 0.01 | 4.05 | V | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | 0.01 | 4.05 | V |   | ### BAT3_V_EMPTY (`FLOAT`) {#BAT3_V_EMPTY} @@ -16006,17 +18097,9 @@ The voltage should be chosen above the steep dropoff at 3.5V. A typical lithium battery can only be discharged under high load down to 10% before it drops off to a voltage level damaging the cells. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | 0.01 | 3.6 | V | - -### BAT_ADC_CHANNEL (`INT32`) {#BAT_ADC_CHANNEL} - -This parameter is deprecated. Please use BAT1_I_CHANNEL. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | 0.01 | 3.6 | V |   | ### BAT_AVRG_CURRENT (`FLOAT`) {#BAT_AVRG_CURRENT} @@ -16025,9 +18108,9 @@ Expected battery current in flight. This value is used to initialize the in-flight average current estimation, which in turn is used for estimating remaining flight time and RTL triggering. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 500 | 0.1 | 15 | A | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 500 | 0.1 | 15 | A |   | ### BAT_CRIT_THR (`FLOAT`) {#BAT_CRIT_THR} @@ -16037,9 +18120,9 @@ Sets the threshold when the battery will be reported as critically low. This has to be lower than the low threshold. This threshold commonly will trigger RTL. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.05 | 0.5 | 0.01 | 0.07 | norm | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.05 | 0.5 | 0.01 | 0.07 | norm |   | ### BAT_EMERGEN_THR (`FLOAT`) {#BAT_EMERGEN_THR} @@ -16049,9 +18132,9 @@ Sets the threshold when the battery will be reported as dangerously low. This has to be lower than the critical threshold. This threshold commonly will trigger landing. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.03 | 0.5 | 0.01 | 0.05 | norm | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.03 | 0.5 | 0.01 | 0.05 | norm |   | ### BAT_LOW_THR (`FLOAT`) {#BAT_LOW_THR} @@ -16060,9 +18143,9 @@ Low threshold. Sets the threshold when the battery will be reported as low. This has to be higher than the critical threshold. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.12 | 0.5 | 0.01 | 0.15 | norm | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.12 | 0.5 | 0.01 | 0.15 | norm |   | ### BAT_V_OFFS_CURR (`FLOAT`) {#BAT_V_OFFS_CURR} @@ -16071,9 +18154,9 @@ Offset in volt as seen by the ADC input of the current sensor. This offset will be subtracted before calculating the battery current based on the voltage. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ## CDCACM @@ -16087,9 +18170,9 @@ Enable USB autostart. - `1`: Auto-detect - `2`: MAVLink -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 2 | |   | ### USB_MAV_MODE (`INT32`) {#USB_MAV_MODE} @@ -16112,9 +18195,9 @@ Specify USB MAVLink mode. - `12`: uavionix - `13`: Low Bandwidth -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 2 | |   | ## Camera Capture @@ -16124,9 +18207,9 @@ Camera strobe delay. This parameter sets the delay between image integration start and strobe firing -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 100.0 | | 0.0 | ms | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 100.0 | | 0.0 | ms |   | ## Camera Control @@ -16139,9 +18222,9 @@ Camera capture edge. - `0`: Falling edge - `1`: Rising edge -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### CAM_CAP_FBACK (`INT32`) {#CAM_CAP_FBACK} @@ -16149,9 +18232,9 @@ Camera capture feedback. Enables camera capture feedback -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### CAM_CAP_MODE (`INT32`) {#CAM_CAP_MODE} @@ -16165,9 +18248,9 @@ Change time measurement - `1`: Get timestamp of mid exposure (active high) - `2`: Get timestamp of mid exposure (active low) -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ## Camera trigger @@ -16177,9 +18260,9 @@ Camera trigger activation time. This parameter sets the time the trigger needs to pulled high or low. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0.1 | 3000 | | 40.0 | ms | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0.1 | 3000 | | 40.0 | ms |   | ### TRIG_DISTANCE (`FLOAT`) {#TRIG_DISTANCE} @@ -16187,9 +18270,9 @@ Camera trigger distance. Sets the distance at which to trigger the camera. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | | 1 | 25.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | | 1 | 25.0 | m |   | ### TRIG_INTERFACE (`INT32`) {#TRIG_INTERFACE} @@ -16204,9 +18287,9 @@ Selects the trigger interface - `3`: MAVLink (Camera Protocol v1) - `4`: Generic PWM (IR trigger, servo) -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 4 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 4 | |   | ### TRIG_INTERVAL (`FLOAT`) {#TRIG_INTERVAL} @@ -16214,9 +18297,9 @@ Camera trigger interval. This parameter sets the time between two consecutive trigger events -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 4.0 | 10000.0 | | 40.0 | ms | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 4.0 | 10000.0 | | 40.0 | ms |   | ### TRIG_MIN_INTERVA (`FLOAT`) {#TRIG_MIN_INTERVA} @@ -16225,9 +18308,9 @@ Minimum camera trigger interval. This parameter sets the minimum time between two consecutive trigger events the specific camera setup is supporting. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 1.0 | 10000.0 | | 1.0 | ms | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 1.0 | 10000.0 | | 1.0 | ms |   | ### TRIG_MODE (`INT32`) {#TRIG_MODE} @@ -16241,9 +18324,9 @@ Camera trigger mode. - `3`: Distance based, always on - `4`: Distance based, on command (Survey mode) -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 4 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 4 | | 0 | |   | ### TRIG_POLARITY (`INT32`) {#TRIG_POLARITY} @@ -16256,25 +18339,25 @@ This parameter sets the polarity of the trigger (0 = active low, 1 = active high - `0`: Active low - `1`: Active high -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 1 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 1 | | 0 | |   | ### TRIG_PWM_NEUTRAL (`INT32`) {#TRIG_PWM_NEUTRAL} PWM neutral output on trigger pin. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 1000 | 2000 | | 1500 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 1000 | 2000 | | 1500 | us |   | ### TRIG_PWM_SHOOT (`INT32`) {#TRIG_PWM_SHOOT} PWM output to trigger shot. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 1000 | 2000 | | 1900 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 1000 | 2000 | | 1900 | us |   | ## Circuit Breaker @@ -16283,12 +18366,13 @@ PWM output to trigger shot. Circuit breaker for disabling buzzer. Setting this parameter to 782097 will disable the buzzer audio notification. + Setting this parameter to 782090 will disable the startup tune, while keeping all others enabled. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 782097 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 782097 | | 0 | |   | ### CBRK_FLIGHTTERM (`INT32`) {#CBRK_FLIGHTTERM} @@ -16299,9 +18383,9 @@ by the FailureDetector logic or if FMU is lost. This circuit breaker does not affect the RC loss, data link loss, geofence, and takeoff failure detection safety logic. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 121212 | | 121212 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 121212 | | 121212 | |   | ### CBRK_IO_SAFETY (`INT32`) {#CBRK_IO_SAFETY} @@ -16310,9 +18394,9 @@ Circuit breaker for IO safety. Setting this parameter to 22027 will disable IO safety. WARNING: ENABLING THIS CIRCUIT BREAKER IS AT OWN RISK -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 22027 | | 22027 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 22027 | | 22027 | |   | ### CBRK_SUPPLY_CHK (`INT32`) {#CBRK_SUPPLY_CHK} @@ -16322,9 +18406,9 @@ Setting this parameter to 894281 will disable the power valid checks in the commander. WARNING: ENABLING THIS CIRCUIT BREAKER IS AT OWN RISK -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 894281 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 894281 | | 0 | |   | ### CBRK_USB_CHK (`INT32`) {#CBRK_USB_CHK} @@ -16332,14 +18416,15 @@ Circuit breaker for USB link check. Setting this parameter to 197848 will disable the USB connected checks in the commander, setting it to 0 keeps them enabled (recommended). + We are generally recommending to not fly with the USB link connected and production vehicles should set this parameter to zero to prevent users from flying USB powered. However, for R&D purposes it has proven over the years to work just fine. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 197848 | | 197848 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 197848 | | 197848 | |   | ### CBRK_VTOLARMING (`INT32`) {#CBRK_VTOLARMING} @@ -16349,9 +18434,9 @@ Setting this parameter to 159753 will enable arming in fixed-wing mode for VTOLs. WARNING: ENABLING THIS CIRCUIT BREAKER IS AT OWN RISK -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 159753 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 159753 | | 0 | |   | ## Commander @@ -16370,9 +18455,9 @@ parameters. - `3`: Return mode - `4`: Terminate -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 3 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 4 | | 0 | |   | ### COM_ARMABLE (`INT32`) {#COM_ARMABLE} @@ -16385,9 +18470,9 @@ Set 0 to prevent accidental use of the vehicle e.g. for safety or maintenance re - `0`: Disallow arming - `1`: Allow arming -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ----------- | ---- | -|   | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 1 | |   | ### COM_ARM_AUTH_ID (`INT32`) {#COM_ARM_AUTH_ID} @@ -16395,9 +18480,9 @@ Arm authorizer system id. Used if arm authorization is requested by COM_ARM_AUTH_REQ. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 10 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 10 | |   | ### COM_ARM_AUTH_MET (`INT32`) {#COM_ARM_AUTH_MET} @@ -16408,16 +18493,17 @@ Methods: - one arm: request authorization and arm when authorization is received - two step arm: 1st arm command request an authorization and 2nd arm command arm the drone if authorized - Used if arm authorization is requested by COM_ARM_AUTH_REQ. + +Used if arm authorization is requested by COM_ARM_AUTH_REQ. **Values:** - `0`: one arm - `1`: two step arm -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### COM_ARM_AUTH_REQ (`INT32`) {#COM_ARM_AUTH_REQ} @@ -16425,9 +18511,9 @@ Require arm authorization to arm. By default off. The default allows to arm the vehicle without a arm authorization. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------------ | ---- | -|   | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------------ | ---- | --------- | +|   | | | | Disabled (0) | |   | ### COM_ARM_AUTH_TO (`FLOAT`) {#COM_ARM_AUTH_TO} @@ -16436,20 +18522,21 @@ Arm authorization timeout. Timeout for authorizer answer. Used if arm authorization is requested by COM_ARM_AUTH_REQ. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | 0.1 | 1 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | 0.1 | 1 | s |   | ### COM_ARM_BAT_MIN (`FLOAT`) {#COM_ARM_BAT_MIN} Minimum battery level for arming. Threshold for battery percentage below arming is prohibited. + A negative value means BAT_CRIT_THR is the threshold. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 0.9 | 0.01 | -1. | norm | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 0.9 | 0.01 | -1.0 | norm |   | ### COM_ARM_CHK_ESCS (`INT32`) {#COM_ARM_CHK_ESCS} @@ -16458,46 +18545,52 @@ Enable checks on ESCs that report telemetry. If this parameter is set, the system will check ESC's online status and failures. This param is specific for ESCs reporting status. It shall be used only if ESCs support telemetry. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------------ | ---- | -|   | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------------ | ---- | --------- | +|   | | | | Disabled (0) | |   | ### COM_ARM_HFLT_CHK (`INT32`) {#COM_ARM_HFLT_CHK} -Enable FMU SD card hardfault detection check. +Enable FMU SD card hardfault / watchdog detection check. -This check detects if there are hardfault files present on the +This check detects if there are hardfault / watchdog files present on the SD card. If so, and the parameter is enabled, arming is prevented. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ----------- | ---- | -|   | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ----------- | ---- | --------- | +|   | | | | Enabled (1) | |   | ### COM_ARM_IMU_ACC (`FLOAT`) {#COM_ARM_IMU_ACC} -Maximum accelerometer inconsistency between IMU units that will allow arming. +Max accelerometer inconsistency for arming. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 0.1 | 1.0 | 0.05 | 0.7 | m/s^2 | +Maximum accelerometer inconsistency between IMU units that will allow arming + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | 0.1 | 1.0 | 0.05 | 0.7 | m/s^2 |   | ### COM_ARM_IMU_GYR (`FLOAT`) {#COM_ARM_IMU_GYR} -Maximum rate gyro inconsistency between IMU units that will allow arming. +Max rate gyro inconsistency for arming. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 0.02 | 0.3 | 0.01 | 0.25 | rad/s | +Maximum rate gyro inconsistency between IMU units that will allow arming + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | 0.02 | 0.3 | 0.01 | 0.25 | rad/s |   | ### COM_ARM_MAG_ANG (`INT32`) {#COM_ARM_MAG_ANG} -Maximum magnetic field inconsistency between units that will allow arming. +Max magnetic field inconsistency for arming. + +Maximum magnetic field inconsistency between units that will allow arming Set -1 to disable the check. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 3 | 180 | | 60 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 3 | 180 | | 60 | deg |   | ### COM_ARM_MAG_STR (`INT32`) {#COM_ARM_MAG_STR} @@ -16512,9 +18605,9 @@ disturbance (check enabled by EKF2_MAG_CHECK) - `1`: Deny arming - `2`: Warning only -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 2 | |   | ### COM_ARM_MIS_REQ (`INT32`) {#COM_ARM_MIS_REQ} @@ -16522,45 +18615,40 @@ Require valid mission to arm. The default allows to arm the vehicle without a valid mission. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------------ | ---- | -|   | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------------ | ---- | --------- | +|   | | | | Disabled (0) | |   | ### COM_ARM_ODID (`INT32`) {#COM_ARM_ODID} -Enable Drone ID system detection and health check. +Open Drone ID system check and in-flight failsafe. -This check detects if the Open Drone ID system is missing. -Depending on the value of the parameter, the check can be -disabled, warn only or deny arming. +Actions other than warning also prevent arming. **Values:** - `0`: Disabled - `1`: Warning only -- `2`: Enforce Open Drone ID system presence +- `2`: Error only +- `3`: Return +- `4`: Land +- `5`: Terminate -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | -### COM_ARM_SDCARD (`INT32`) {#COM_ARM_SDCARD} +### COM_ARM_ON_BOOT (`INT32`) {#COM_ARM_ON_BOOT} -Enable FMU SD card detection check. +Arm automatically on boot. -This check detects if the FMU SD card is missing. -Depending on the value of the parameter, the check can be -disabled, warn only or deny arming. +When enabled, the vehicle arms automatically once all preflight checks pass after boot. +The vehicle will not re-arm after a manual disarm. +Has no effect if COM_ARMABLE is 0. -**Values:** - -- `0`: Disabled -- `1`: Warning only -- `2`: Enforce SD card presence - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### COM_ARM_SWISBTN (`INT32`) {#COM_ARM_SWISBTN} @@ -16569,9 +18657,9 @@ Arm switch is a momentary button. 0: Arming/disarming triggers on switch transition. 1: Arming/disarming triggers when holding the momentary button down like the stick gesture. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------------ | ---- | -|   | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------------ | ---- | --------- | +|   | | | | Disabled (0) | |   | ### COM_ARM_TRAFF (`INT32`) {#COM_ARM_TRAFF} @@ -16588,9 +18676,9 @@ disabled, warn only, or deny arming. - `2`: Enforce for all modes - `3`: Enforce for mission modes only -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### COM_ARM_WO_GPS (`INT32`) {#COM_ARM_WO_GPS} @@ -16606,20 +18694,21 @@ The settings deny arming and warn, allow arming and warn, or silently allow armi - `1`: Allow arming (with warning) - `2`: Allow arming (no warning) -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 1 | |   | ### COM_CPU_MAX (`FLOAT`) {#COM_CPU_MAX} Maximum allowed CPU load to still arm. The check fails if the CPU load is above this threshold for 2s. + A negative value disables the check. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 100 | 1 | 95.0 | % | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 100 | 1 | 95.0 | % |   | ### COM_DISARM_LAND (`FLOAT`) {#COM_DISARM_LAND} @@ -16627,24 +18716,27 @@ Time-out for auto disarm after landing. A non-zero, positive value specifies the time-out period in seconds after which the vehicle will be automatically disarmed in case a landing situation has been detected during this period. + A zero or negative value means that automatic disarming triggered by landing detection is disabled. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | 0.1 | 2.0 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | 0.1 | 2.0 | s |   | ### COM_DISARM_MAN (`INT32`) {#COM_DISARM_MAN} -Allow disarming via switch/stick/button on multicopters in manual thrust modes. +Allow disarming in manual thrust modes. + +Allow disarming via switch/stick/button on multicopters in manual thrust modes 0: Disallow disarming when not landed 1: Allow disarming in multicopter flight in modes where the thrust is directly controlled by thr throttle stick e.g. Stabilized, Acro -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ----------- | ---- | -|   | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ----------- | ---- | --------- | +|   | | | | Enabled (1) | |   | ### COM_DISARM_PRFLT (`FLOAT`) {#COM_DISARM_PRFLT} @@ -16653,11 +18745,12 @@ Time-out for auto disarm if not taking off. A non-zero, positive value specifies the time in seconds, within which the vehicle is expected to take off after arming. In case the vehicle didn't takeoff within the timeout it disarms again. + A negative value disables autmoatic disarming triggered by a pre-takeoff timeout. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | 0.1 | 10.0 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | 0.1 | 10.0 | s |   | ### COM_DLL_EXCEPT (`INT32`) {#COM_DLL_EXCEPT} @@ -16674,9 +18767,9 @@ See also COM_RCL_EXCEPT. - `3`: External Mode - `4`: Altitude Cruise -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 31 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 31 | | 0 | |   | ### COM_DL_LOSS_T (`INT32`) {#COM_DL_LOSS_T} @@ -16684,9 +18777,9 @@ GCS connection loss time threshold. After this amount of seconds without datalink, the GCS connection lost mode triggers -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 5 | 300 | 1 | 10 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 5 | 300 | 1 | 10 | s |   | ### COM_FAIL_ACT_T (`FLOAT`) {#COM_FAIL_ACT_T} @@ -16696,11 +18789,12 @@ Before entering failsafe (RTL, Land, Hold), wait COM_FAIL_ACT_T seconds in Hold for the user to realize. During that time the user can switch modes, but cannot take over control via the stick override feature (see COM_RC_OVERRIDE). Afterwards the configured failsafe action is triggered and the user may use stick override. + A zero value disables the delay. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 25.0 | | 5. | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 25.0 | | 5.0 | s |   | ### COM_FLIGHT_UUID (`INT32`) {#COM_FLIGHT_UUID} @@ -16710,9 +18804,9 @@ This number is incremented automatically after every flight on disarming in order to remember the next flight UUID. The first flight is 0. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | | | 0 | |   | ### COM_FLTMODE1 (`INT32`) {#COM_FLTMODE1} @@ -16748,9 +18842,9 @@ selected flight mode will be applied. - `106`: External Mode 7 - `107`: External Mode 8 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | -1 | |   | ### COM_FLTMODE2 (`INT32`) {#COM_FLTMODE2} @@ -16786,9 +18880,9 @@ selected flight mode will be applied. - `106`: External Mode 7 - `107`: External Mode 8 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | -1 | |   | ### COM_FLTMODE3 (`INT32`) {#COM_FLTMODE3} @@ -16824,9 +18918,9 @@ selected flight mode will be applied. - `106`: External Mode 7 - `107`: External Mode 8 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | -1 | |   | ### COM_FLTMODE4 (`INT32`) {#COM_FLTMODE4} @@ -16862,9 +18956,9 @@ selected flight mode will be applied. - `106`: External Mode 7 - `107`: External Mode 8 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | -1 | |   | ### COM_FLTMODE5 (`INT32`) {#COM_FLTMODE5} @@ -16900,9 +18994,9 @@ selected flight mode will be applied. - `106`: External Mode 7 - `107`: External Mode 8 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | -1 | |   | ### COM_FLTMODE6 (`INT32`) {#COM_FLTMODE6} @@ -16938,9 +19032,9 @@ selected flight mode will be applied. - `106`: External Mode 7 - `107`: External Mode 8 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | -1 | |   | ### COM_FLTT_LOW_ACT (`INT32`) {#COM_FLTT_LOW_ACT} @@ -16955,28 +19049,9 @@ the estimated time it takes to reach the RTL destination. - `1`: Warning - `3`: Return -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | 1 | 0 | - -### COM_FLT_PROFILE (`INT32`) {#COM_FLT_PROFILE} - -User Flight Profile. - -Describes the intended use of the vehicle. -Can be used by ground control software or log post processing. -This param does not influence the behavior within the firmware. This means for example the control logic is independent of the setting of this param (but depends on other params). - -**Values:** - -- `0`: Default -- `100`: Pro User -- `200`: Flight Tester -- `300`: Developer - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | 1 | 0 | |   | ### COM_FLT_TIME_MAX (`INT32`) {#COM_FLT_TIME_MAX} @@ -16986,13 +19061,15 @@ The vehicle aborts the current operation and returns to launch when the time since takeoff is above this value. It is not possible to resume the mission or switch to any auto mode other than RTL or Land. Taking over in any manual mode is still possible. + Starting from 90% of the maximum flight time, a warning message will be sent every 1 minute with the remaining time until automatic RTL. + Set to -1 to disable. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | | | -1 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | | | -1 | s |   | ### COM_FORCE_SAFETY (`INT32`) {#COM_FORCE_SAFETY} @@ -17000,9 +19077,9 @@ Enable force safety. Force safety when the vehicle disarms -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------------ | ---- | -|   | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------------ | ---- | --------- | +|   | | | | Disabled (0) | |   | ### COM_HLDL_LOSS_T (`INT32`) {#COM_HLDL_LOSS_T} @@ -17010,33 +19087,23 @@ High Latency Datalink loss time threshold. After this amount of seconds without datalink the data link lost mode triggers -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 60 | 3600 | | 120 | s | - -### COM_HLDL_REG_T (`INT32`) {#COM_HLDL_REG_T} - -High Latency Datalink regain time threshold. - -After a data link loss: after this number of seconds with a healthy datalink the 'datalink loss' -flag is set back to false - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 60 | | 0 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 60 | 3600 | | 120 | s |   | ### COM_HOME_EN (`INT32`) {#COM_HOME_EN} Home position enabled. Set home position automatically if possible. + During missions, the latitude/longitude of the home position is locked and will not reset during intermediate landings. It will only update once the mission is complete or landed outside of a mission. However, the altitude is still being adjusted to correct for GNSS vertical drift in the first 2 minutes after takeoff. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ----------- | ---- | -| ✓ | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ----------- | ---- | --------- | +| ✓ | | | | Enabled (1) | |   | ### COM_HOME_IN_AIR (`INT32`) {#COM_HOME_IN_AIR} @@ -17046,50 +19113,9 @@ If set to true, the autopilot is allowed to set its home position after takeoff The true home position is back-computed if a local position is estimate if available. If no local position is available, home is set to the current position. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------------ | ---- | -|   | | | | Disabled (0) | - -### COM_IMB_PROP_ACT (`INT32`) {#COM_IMB_PROP_ACT} - -Imbalanced propeller failsafe mode. - -Action the system takes when an imbalanced propeller is detected by the failure detector. -See also FD_IMB_PROP_THR to set the failure threshold. - -**Values:** - -- `-1`: Disabled -- `0`: Warning -- `1`: Return -- `2`: Land - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | 1 | 0 | - -### COM_KILL_DISARM (`FLOAT`) {#COM_KILL_DISARM} - -Timeout value for disarming when kill switch is engaged. - -Use RC_MAP_KILL_SW to map a kill switch. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 30.0 | 0.1 | 5.0 | s | - -### COM_LKDOWN_TKO (`FLOAT`) {#COM_LKDOWN_TKO} - -Timeout for detecting a failure after takeoff. - -A non-zero, positive value specifies the timeframe in seconds within failure detector is allowed to disarm the vehicle -if attitude exceeds the limits defined in FD_FAIL_P and FD_FAIL_R. -The check is not executed for flight modes that do support acrobatic maneuvers, e.g: Acro (MC/FW) and Manual (FW). -A zero or negative value means that the check is disabled. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1.0 | 5.0 | | 3.0 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------------ | ---- | --------- | +|   | | | | Disabled (0) | |   | ### COM_LOW_BAT_ACT (`INT32`) {#COM_LOW_BAT_ACT} @@ -17104,9 +19130,9 @@ for definition of battery states. - `2`: Land mode - `3`: Return at critical level, land at emergency level -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### COM_MODE0_HASH (`INT32`) {#COM_MODE0_HASH} @@ -17116,9 +19142,9 @@ This parameter is automatically set to identify external modes. It ensures that get assigned to the same index independent from their startup order, which is required when mapping an external mode to an RC switch. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### COM_MODE1_HASH (`INT32`) {#COM_MODE1_HASH} @@ -17128,9 +19154,9 @@ This parameter is automatically set to identify external modes. It ensures that get assigned to the same index independent from their startup order, which is required when mapping an external mode to an RC switch. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### COM_MODE2_HASH (`INT32`) {#COM_MODE2_HASH} @@ -17140,9 +19166,9 @@ This parameter is automatically set to identify external modes. It ensures that get assigned to the same index independent from their startup order, which is required when mapping an external mode to an RC switch. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### COM_MODE3_HASH (`INT32`) {#COM_MODE3_HASH} @@ -17152,9 +19178,9 @@ This parameter is automatically set to identify external modes. It ensures that get assigned to the same index independent from their startup order, which is required when mapping an external mode to an RC switch. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### COM_MODE4_HASH (`INT32`) {#COM_MODE4_HASH} @@ -17164,9 +19190,9 @@ This parameter is automatically set to identify external modes. It ensures that get assigned to the same index independent from their startup order, which is required when mapping an external mode to an RC switch. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### COM_MODE5_HASH (`INT32`) {#COM_MODE5_HASH} @@ -17176,9 +19202,9 @@ This parameter is automatically set to identify external modes. It ensures that get assigned to the same index independent from their startup order, which is required when mapping an external mode to an RC switch. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### COM_MODE6_HASH (`INT32`) {#COM_MODE6_HASH} @@ -17188,9 +19214,9 @@ This parameter is automatically set to identify external modes. It ensures that get assigned to the same index independent from their startup order, which is required when mapping an external mode to an RC switch. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### COM_MODE7_HASH (`INT32`) {#COM_MODE7_HASH} @@ -17200,9 +19226,9 @@ This parameter is automatically set to identify external modes. It ensures that get assigned to the same index independent from their startup order, which is required when mapping an external mode to an RC switch. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### COM_MODE_ARM_CHK (`INT32`) {#COM_MODE_ARM_CHK} @@ -17210,28 +19236,9 @@ Allow external mode registration while armed. By default disabled for safety reasons -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------------ | ---- | -|   | | | | Disabled (0) | - -### COM_MOT_TEST_EN (`INT32`) {#COM_MOT_TEST_EN} - -Enable Actuator Testing. - -If set, enables the actuator test interface via MAVLink (ACTUATOR_TEST), that -allows spinning the motors and moving the servos for testing purposes. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ----------- | ---- | -|   | | | | Enabled (1) | - -### COM_OBC_LOSS_T (`FLOAT`) {#COM_OBC_LOSS_T} - -Time-out to wait when onboard computer connection is lost before warning about loss connection. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 60 | 0.01 | 5.0 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------------ | ---- | --------- | +|   | | | | Disabled (0) | |   | ### COM_OBL_RC_ACT (`INT32`) {#COM_OBL_RC_ACT} @@ -17251,27 +19258,29 @@ set by COM_OF_LOSS_T in seconds. - `6`: Terminate - `7`: Disarm -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### COM_OF_LOSS_T (`FLOAT`) {#COM_OF_LOSS_T} -Time-out to wait when offboard connection is lost before triggering offboard lost action. +Offboard connection loss timeout. + +Time-out to wait when offboard connection is lost before triggering offboard lost action See COM_OBL_RC_ACT to configure action. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 60 | 0.01 | 1.0 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 60 | 0.01 | 1.0 | s |   | ### COM_PARACHUTE (`INT32`) {#COM_PARACHUTE} -Expect and require a healthy MAVLink parachute system. +Require MAVLink parachute system to be present and healthy. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------------ | ---- | -|   | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------------ | ---- | --------- | +|   | | | | Disabled (0) | |   | ### COM_POS_FS_EPH (`FLOAT`) {#COM_POS_FS_EPH} @@ -17282,11 +19291,12 @@ If the previous position error was below this threshold, there is an additional factor of 2.5 applied (threshold for invalidation 2.5 times the one for validation). Only used for multicopters and VTOLs in hover mode. Independent from estimator positioning data timeout threshold (see EKF2_NOAID_TOUT). + Set to -1 to disable. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 400 | | 5. | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 400 | | 5.0 | m |   | ### COM_POS_LOW_ACT (`INT32`) {#COM_POS_LOW_ACT} @@ -17306,9 +19316,9 @@ otherwise it is only a warning. - `4`: Terminate - `5`: Land -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | 1 | 3 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | 1 | 3 | |   | ### COM_POS_LOW_EPH (`FLOAT`) {#COM_POS_LOW_EPH} @@ -17317,11 +19327,12 @@ Low position accuracy failsafe threshold. This triggers the action specified in COM_POS_LOW_ACT if the estimated position accuracy is below this threshold. Local position has to be still declared valid, which requires some kind of velocity aiding or large dead-reckoning time (EKF2_NOAID_TOUT), and a high failsafe threshold (COM_POS_FS_EPH). + Set to -1 to disable. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 1000 | | -1.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1000 | | -1.0 | m |   | ### COM_POWER_COUNT (`INT32`) {#COM_POWER_COUNT} @@ -17330,9 +19341,9 @@ Required number of redundant power modules. This configures a check to verify the expected number of 5V rail power supplies are present. By default only one is expected. Note: CBRK_SUPPLY_CHK disables all power checks including this one. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 4 | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 4 | | 1 | |   | ### COM_PREARM_MODE (`INT32`) {#COM_PREARM_MODE} @@ -17347,9 +19358,9 @@ in which non-throttling actuators are active. - `1`: Safety button - `2`: Always -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### COM_QC_ACT (`INT32`) {#COM_QC_ACT} @@ -17362,20 +19373,21 @@ Set action after a quadchute. - `1`: Land mode - `2`: Hold mode -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### COM_RAM_MAX (`FLOAT`) {#COM_RAM_MAX} Maximum allowed RAM usage to pass checks. The check fails if the RAM usage is above this threshold. + A negative value disables the check. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 100 | 1 | 95.0 | % | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 100 | 1 | 95.0 | % |   | ### COM_RCL_EXCEPT (`INT32`) {#COM_RCL_EXCEPT} @@ -17393,9 +19405,9 @@ Auto modes are: Hold, Takeoff, Land, RTL, Descend, Follow Target, Precland, Orbi - `3`: External Mode - `4`: Altitude Cruise -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 31 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 31 | | 0 | |   | ### COM_RC_IN_MODE (`INT32`) {#COM_RC_IN_MODE} @@ -17403,7 +19415,9 @@ Manual control input source configuration. Selects stick input selection behavior: either a traditional remote control receiver (RC) or a MAVLink joystick (MANUAL_CONTROL message) + Priority sources are immediately switched to whenever they get valid. + 0 RC only. Requires valid RC calibration. 1 MAVLink only. RC and related checks are disabled. 2 Switches only if current source becomes invalid. @@ -17426,9 +19440,9 @@ Priority sources are immediately switched to whenever they get valid. - `7`: Prio: RC > MAVL 2 > MAVL 1 - `8`: Prio: MAVL 2 > MAVL 1 > RC -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 8 | | 3 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8 | | 3 | |   | ### COM_RC_LOSS_T (`FLOAT`) {#COM_RC_LOSS_T} @@ -17438,9 +19452,9 @@ The time in seconds without a new setpoint from RC or Joystick, after which the This must be kept short as the vehicle will use the last supplied setpoint until the timeout triggers. Ensure the value is not set lower than the update interval of the RC or Joystick. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 35 | 0.1 | 0.5 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 35 | 0.1 | 0.5 | s |   | ### COM_RC_OVERRIDE (`INT32`) {#COM_RC_OVERRIDE} @@ -17456,20 +19470,20 @@ Note: Only has an effect on multicopters, and VTOLs in multicopter mode. - `0`: Enable override during auto modes (except for in critical battery reaction) - `1`: Enable override during offboard mode -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 3 | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 3 | | 1 | |   | ### COM_RC_STICK_OV (`FLOAT`) {#COM_RC_STICK_OV} Stick override threshold. If COM_RC_OVERRIDE is enabled and the joystick input is moved more than this threshold -the autopilot the pilot takes over control. +the pilot takes over control. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 5 | 80 | 0.05 | 30.0 | % | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 5 | 80 | 0.05 | 30.0 | % |   | ### COM_SPOOLUP_TIME (`FLOAT`) {#COM_SPOOLUP_TIME} @@ -17482,24 +19496,9 @@ Goal: - Timeout for ESCs and smart batteries to successfulyy do failure checks e.g. for stuck rotors before the vehicle is off the ground -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 30 | 0.1 | 1.0 | s | - -### COM_TAKEOFF_ACT (`INT32`) {#COM_TAKEOFF_ACT} - -Action after TAKEOFF has been accepted. - -The mode transition after TAKEOFF has completed successfully. - -**Values:** - -- `0`: Hold -- `1`: Mission (if valid) - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 30 | 0.1 | 1.0 | s |   | ### COM_THROW_EN (`INT32`) {#COM_THROW_EN} @@ -17507,9 +19506,9 @@ Enable throw-start. Allows to start the vehicle by throwing it into the air. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------------ | ---- | -|   | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------------ | ---- | --------- | +|   | | | | Disabled (0) | |   | ### COM_THROW_SPEED (`FLOAT`) {#COM_THROW_SPEED} @@ -17518,11 +19517,12 @@ Minimum speed for the throw start. When the throw launch is enabled, the drone will only allow motors to spin after this speed is exceeded before detecting the freefall. This is a safety feature to ensure the drone does not turn on after accidental drop or a rapid movement before the throw. + Set to 0 to disable. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | | 0.1 | 5 | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | | 0.1 | 5 | m/s |   | ### COM_VEL_FS_EVH (`FLOAT`) {#COM_VEL_FS_EVH} @@ -17533,9 +19533,9 @@ The default is appropriate for a multicopter. Can be increased for a fixed-wing. If the previous velocity error was below this threshold, there is an additional factor of 2.5 applied (threshold for invalidation 2.5 times the one for validation). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | | | 1. | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | | | 1.0 | m/s |   | ### COM_WIND_MAX (`FLOAT`) {#COM_WIND_MAX} @@ -17544,9 +19544,9 @@ High wind speed failsafe threshold. Wind speed threshold above which an automatic failsafe action is triggered. Failsafe action can be specified with COM_WIND_MAX_ACT. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | | 0.1 | -1. | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | | 0.1 | -1.0 | m/s |   | ### COM_WIND_MAX_ACT (`INT32`) {#COM_WIND_MAX_ACT} @@ -17567,9 +19567,9 @@ mode is still possible. - `4`: Terminate - `5`: Land -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | 1 | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | 1 | 0 | |   | ### COM_WIND_WARN (`FLOAT`) {#COM_WIND_WARN} @@ -17577,11 +19577,12 @@ Wind speed warning threshold. A warning is triggered if the currently estimated wind speed is above this value. Warning is sent periodically (every 1 minute). + Set to -1 to disable. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | | 0.1 | -1. | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | | 0.1 | -1.0 | m/s |   | ### NAV_DLL_ACT (`INT32`) {#NAV_DLL_ACT} @@ -17600,9 +19601,9 @@ action will be executed. - `5`: Terminate - `6`: Disarm -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 6 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 6 | | 0 | |   | ### NAV_RCL_ACT (`INT32`) {#NAV_RCL_ACT} @@ -17619,9 +19620,9 @@ set by COM_RC_LOSS_T in seconds. - `5`: Terminate - `6`: Disarm -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1 | 6 | | 2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1 | 6 | | 2 | |   | ## Cyphal @@ -17629,9 +19630,9 @@ set by COM_RC_LOSS_T in seconds. UAVCAN/CAN v1 bus bitrate. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ----- | -| ✓ | 20000 | 1000000 | | 1000000 | bit/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ----- | --------- | +| ✓ | 20000 | 1000000 | | 1000000 | bit/s |   | ### CYPHAL_ENABLE (`INT32`) {#CYPHAL_ENABLE} @@ -17640,9 +19641,9 @@ Cyphal. 0 - Cyphal disabled. 1 - Enables Cyphal -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ----------- | ---- | -| ✓ | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ----------- | ---- | --------- | +| ✓ | | | | Enabled (1) | |   | ### CYPHAL_ID (`INT32`) {#CYPHAL_ID} @@ -17650,185 +19651,185 @@ Cyphal Node ID. Read the specs at https://opencyphal.org/ to learn more about Node ID. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | -1 | 125 | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | -1 | 125 | | 1 | |   | ### UCAN1_ACTR_PUB (`INT32`) {#UCAN1_ACTR_PUB} actuator_outputs uORB over Cyphal publication port ID. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 6143 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 6143 | | -1 | |   | ### UCAN1_BMS_BP_SUB (`INT32`) {#UCAN1_BMS_BP_SUB} UDRAL battery parameters subscription port ID. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 6143 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 6143 | | -1 | |   | ### UCAN1_BMS_BS_SUB (`INT32`) {#UCAN1_BMS_BS_SUB} UDRAL battery status subscription port ID. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 6143 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 6143 | | -1 | |   | ### UCAN1_BMS_ES_SUB (`INT32`) {#UCAN1_BMS_ES_SUB} UDRAL battery energy source subscription port ID. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 6143 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 6143 | | -1 | |   | ### UCAN1_ESC0_SUB (`INT32`) {#UCAN1_ESC0_SUB} ESC 0 subscription port ID. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 6143 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 6143 | | -1 | |   | ### UCAN1_ESC_PUB (`INT32`) {#UCAN1_ESC_PUB} Cyphal ESC publication port ID. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 6143 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 6143 | | -1 | |   | ### UCAN1_FB0_SUB (`INT32`) {#UCAN1_FB0_SUB} Cyphal ESC 0 zubax feedback port ID. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 6143 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 6143 | | -1 | |   | ### UCAN1_FB1_SUB (`INT32`) {#UCAN1_FB1_SUB} Cyphal ESC 1 zubax feedback port ID. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 6143 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 6143 | | -1 | |   | ### UCAN1_FB2_SUB (`INT32`) {#UCAN1_FB2_SUB} Cyphal ESC 2 zubax feedback port ID. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 6143 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 6143 | | -1 | |   | ### UCAN1_FB3_SUB (`INT32`) {#UCAN1_FB3_SUB} Cyphal ESC 3 zubax feedback port ID. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 6143 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 6143 | | -1 | |   | ### UCAN1_FB4_SUB (`INT32`) {#UCAN1_FB4_SUB} Cyphal ESC 4 zubax feedback port ID. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 6143 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 6143 | | -1 | |   | ### UCAN1_FB5_SUB (`INT32`) {#UCAN1_FB5_SUB} Cyphal ESC 5 zubax feedback port ID. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 6143 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 6143 | | -1 | |   | ### UCAN1_FB6_SUB (`INT32`) {#UCAN1_FB6_SUB} Cyphal ESC 6 zubax feedback port ID. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 6143 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 6143 | | -1 | |   | ### UCAN1_FB7_SUB (`INT32`) {#UCAN1_FB7_SUB} Cyphal ESC 7 zubax feedback port ID. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 6143 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 6143 | | -1 | |   | ### UCAN1_GPS0_SUB (`INT32`) {#UCAN1_GPS0_SUB} GPS 0 subscription port ID. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 6143 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 6143 | | -1 | |   | ### UCAN1_GPS1_SUB (`INT32`) {#UCAN1_GPS1_SUB} GPS 1 subscription port ID. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 6143 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 6143 | | -1 | |   | ### UCAN1_GPS_PUB (`INT32`) {#UCAN1_GPS_PUB} Cyphal GPS publication port ID. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 6143 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 6143 | | -1 | |   | ### UCAN1_LG_BMS_SUB (`INT32`) {#UCAN1_LG_BMS_SUB} Cyphal legacy battery port ID. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 6143 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 6143 | | -1 | |   | ### UCAN1_READ_PUB (`INT32`) {#UCAN1_READ_PUB} Cyphal ESC readiness port ID. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 6143 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 6143 | | -1 | |   | ### UCAN1_SERVO_PUB (`INT32`) {#UCAN1_SERVO_PUB} Cyphal Servo publication port ID. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 6143 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 6143 | | -1 | |   | ### UCAN1_UORB_GPS (`INT32`) {#UCAN1_UORB_GPS} sensor_gps uORB over Cyphal subscription port ID. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 6143 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 6143 | | -1 | |   | ### UCAN1_UORB_GPS_P (`INT32`) {#UCAN1_UORB_GPS_P} sensor_gps uORB over Cyphal publication port ID. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 6143 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 6143 | | -1 | |   | ## DShot @@ -17839,9 +19840,9 @@ DSHOT 3D deadband high. When the actuator_output is between DSHOT_3D_DEAD_L and DSHOT_3D_DEAD_H, motor will not spin. This value is with respect to the mixer_module range (0-1999), not the DSHOT values. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1000 | 1999 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1000 | 1999 | | 1000 | |   | ### DSHOT_3D_DEAD_L (`INT32`) {#DSHOT_3D_DEAD_L} @@ -17850,9 +19851,9 @@ DSHOT 3D deadband low. When the actuator_output is between DSHOT_3D_DEAD_L and DSHOT_3D_DEAD_H, motor will not spin. This value is with respect to the mixer_module range (0-1999), not the DSHOT values. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | | 1000 | |   | ### DSHOT_3D_ENABLE (`INT32`) {#DSHOT_3D_ENABLE} @@ -17864,21 +19865,36 @@ Direction 1) 48 is the slowest, 1047 is the fastest. Direction 2) 1049 is the slowest, 2047 is the fastest. When mixer outputs 1000 or value inside DSHOT 3D deadband, DShot 0 is sent. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------------ | ---- | -|   | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------------ | ---- | --------- | +|   | | | | Disabled (0) | |   | -### DSHOT_BIDIR_EN (`INT32`) {#DSHOT_BIDIR_EN} +### DSHOT_BIDIR_EDT (`INT32`) {#DSHOT_BIDIR_EDT} -Enable bidirectional DShot. +Enable Extended DShot Telemetry. -This parameter enables bidirectional DShot which provides RPM feedback. -Note that this requires ESCs that support bidirectional DSHot, e.g. BlHeli32. -This is not the same as DShot telemetry which requires an additional serial connection. +This parameter enables Extended DShot Telemetry which allows transmission of +additional telemetry within the eRPM frame. The EDT data is interleaved with +the eRPM frames at a low rate. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | + +### DSHOT_ESC_TYPE (`INT32`) {#DSHOT_ESC_TYPE} + +ESC Type. + +The ESC firmware type + +**Values:** + +- `0`: Unknown +- `1`: AM32 + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### DSHOT_MIN (`FLOAT`) {#DSHOT_MIN} @@ -17888,9 +19904,177 @@ Minimum Output Value for DShot in percent. The value depends on the ESC. Make sure to set this high enough so that the motors are always spinning while armed. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1 | 0.01 | 0.055 | norm | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1 | 0.01 | 0.055 | norm |   | + +### DSHOT_MOT_POL1 (`INT32`) {#DSHOT_MOT_POL1} + +Number of magnetic poles of motor 1. + +Number of magnetic poles for motor 1. +Required to compute RPM from the eRPM returned by ESC telemetry. +Either get the number from the motor spec sheet or count the magnets +on the bell of the motor (not the stator magnets). +Typical motors for 5 inch props have 14 poles. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 2 | 400 | | 14 | |   | + +### DSHOT_MOT_POL10 (`INT32`) {#DSHOT_MOT_POL10} + +Number of magnetic poles of motor 10. + +Number of magnetic poles for motor 10. +Required to compute RPM from the eRPM returned by ESC telemetry. +Either get the number from the motor spec sheet or count the magnets +on the bell of the motor (not the stator magnets). +Typical motors for 5 inch props have 14 poles. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 2 | 400 | | 14 | |   | + +### DSHOT_MOT_POL11 (`INT32`) {#DSHOT_MOT_POL11} + +Number of magnetic poles of motor 11. + +Number of magnetic poles for motor 11. +Required to compute RPM from the eRPM returned by ESC telemetry. +Either get the number from the motor spec sheet or count the magnets +on the bell of the motor (not the stator magnets). +Typical motors for 5 inch props have 14 poles. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 2 | 400 | | 14 | |   | + +### DSHOT_MOT_POL12 (`INT32`) {#DSHOT_MOT_POL12} + +Number of magnetic poles of motor 12. + +Number of magnetic poles for motor 12. +Required to compute RPM from the eRPM returned by ESC telemetry. +Either get the number from the motor spec sheet or count the magnets +on the bell of the motor (not the stator magnets). +Typical motors for 5 inch props have 14 poles. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 2 | 400 | | 14 | |   | + +### DSHOT_MOT_POL2 (`INT32`) {#DSHOT_MOT_POL2} + +Number of magnetic poles of motor 2. + +Number of magnetic poles for motor 2. +Required to compute RPM from the eRPM returned by ESC telemetry. +Either get the number from the motor spec sheet or count the magnets +on the bell of the motor (not the stator magnets). +Typical motors for 5 inch props have 14 poles. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 2 | 400 | | 14 | |   | + +### DSHOT_MOT_POL3 (`INT32`) {#DSHOT_MOT_POL3} + +Number of magnetic poles of motor 3. + +Number of magnetic poles for motor 3. +Required to compute RPM from the eRPM returned by ESC telemetry. +Either get the number from the motor spec sheet or count the magnets +on the bell of the motor (not the stator magnets). +Typical motors for 5 inch props have 14 poles. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 2 | 400 | | 14 | |   | + +### DSHOT_MOT_POL4 (`INT32`) {#DSHOT_MOT_POL4} + +Number of magnetic poles of motor 4. + +Number of magnetic poles for motor 4. +Required to compute RPM from the eRPM returned by ESC telemetry. +Either get the number from the motor spec sheet or count the magnets +on the bell of the motor (not the stator magnets). +Typical motors for 5 inch props have 14 poles. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 2 | 400 | | 14 | |   | + +### DSHOT_MOT_POL5 (`INT32`) {#DSHOT_MOT_POL5} + +Number of magnetic poles of motor 5. + +Number of magnetic poles for motor 5. +Required to compute RPM from the eRPM returned by ESC telemetry. +Either get the number from the motor spec sheet or count the magnets +on the bell of the motor (not the stator magnets). +Typical motors for 5 inch props have 14 poles. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 2 | 400 | | 14 | |   | + +### DSHOT_MOT_POL6 (`INT32`) {#DSHOT_MOT_POL6} + +Number of magnetic poles of motor 6. + +Number of magnetic poles for motor 6. +Required to compute RPM from the eRPM returned by ESC telemetry. +Either get the number from the motor spec sheet or count the magnets +on the bell of the motor (not the stator magnets). +Typical motors for 5 inch props have 14 poles. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 2 | 400 | | 14 | |   | + +### DSHOT_MOT_POL7 (`INT32`) {#DSHOT_MOT_POL7} + +Number of magnetic poles of motor 7. + +Number of magnetic poles for motor 7. +Required to compute RPM from the eRPM returned by ESC telemetry. +Either get the number from the motor spec sheet or count the magnets +on the bell of the motor (not the stator magnets). +Typical motors for 5 inch props have 14 poles. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 2 | 400 | | 14 | |   | + +### DSHOT_MOT_POL8 (`INT32`) {#DSHOT_MOT_POL8} + +Number of magnetic poles of motor 8. + +Number of magnetic poles for motor 8. +Required to compute RPM from the eRPM returned by ESC telemetry. +Either get the number from the motor spec sheet or count the magnets +on the bell of the motor (not the stator magnets). +Typical motors for 5 inch props have 14 poles. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 2 | 400 | | 14 | |   | + +### DSHOT_MOT_POL9 (`INT32`) {#DSHOT_MOT_POL9} + +Number of magnetic poles of motor 9. + +Number of magnetic poles for motor 9. +Required to compute RPM from the eRPM returned by ESC telemetry. +Either get the number from the motor spec sheet or count the magnets +on the bell of the motor (not the stator magnets). +Typical motors for 5 inch props have 14 poles. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 2 | 400 | | 14 | |   | ### DSHOT_TEL_CFG (`INT32`) {#DSHOT_TEL_CFG} @@ -17913,22 +20097,9 @@ Configure on which serial port to run DShot Driver. - `301`: Wifi Port - `401`: EXT2 -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | - -### MOT_POLE_COUNT (`INT32`) {#MOT_POLE_COUNT} - -Number of magnetic poles of the motors. - -Specify the number of magnetic poles of the motors. -It is required to compute the RPM value from the eRPM returned with the ESC telemetry. -Either get the number from the motor spec sheet or count the magnets on the bell of the motor (not the stator magnets). -Typical motors for 5 inch props have 14 poles. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 14 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ## EKF2 @@ -17936,9 +20107,9 @@ Typical motors for 5 inch props have 14 poles. 1-sigma IMU accelerometer switch-on bias. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ----- | -| ✓ | 0.0 | 0.5 | | 0.2 | m/s^2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ----- | --------- | +| ✓ | 0.0 | 0.5 | | 0.2 | m/s^2 |   | ### EKF2_ABL_ACCLIM (`FLOAT`) {#EKF2_ABL_ACCLIM} @@ -17946,9 +20117,9 @@ Maximum IMU accel magnitude that allows IMU bias learning. If the magnitude of the IMU accelerometer vector exceeds this value, the EKF accel bias state estimation will be inhibited. This reduces the adverse effect of high manoeuvre accelerations and IMU nonlinerity and scale factor errors on the accel bias estimates. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 20.0 | 200.0 | | 25.0 | m/s^2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | 20.0 | 200.0 | | 25.0 | m/s^2 |   | ### EKF2_ABL_GYRLIM (`FLOAT`) {#EKF2_ABL_GYRLIM} @@ -17956,9 +20127,9 @@ Maximum IMU gyro angular rate magnitude that allows IMU bias learning. If the magnitude of the IMU angular rate vector exceeds this value, the EKF accel bias state estimation will be inhibited. This reduces the adverse effect of rapid rotation rates and associated errors on the accel bias estimates. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 2.0 | 20.0 | | 3.0 | rad/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | 2.0 | 20.0 | | 3.0 | rad/s |   | ### EKF2_ABL_LIM (`FLOAT`) {#EKF2_ABL_LIM} @@ -17966,9 +20137,9 @@ Accelerometer bias learning limit. The ekf accel bias states will be limited to within a range equivalent to +- of this value. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 0.0 | 0.8 | | 0.4 | m/s^2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | 0.0 | 0.8 | | 0.4 | m/s^2 |   | ### EKF2_ABL_TAU (`FLOAT`) {#EKF2_ABL_TAU} @@ -17976,25 +20147,25 @@ Accel bias learning inhibit time constant. The vector magnitude of angular rate and acceleration used to check if learning should be inhibited has a peak hold filter applied to it with an exponential decay. This parameter controls the time constant of the decay. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 1.0 | | 0.5 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 1.0 | | 0.5 | s |   | ### EKF2_ACC_B_NOISE (`FLOAT`) {#EKF2_ACC_B_NOISE} Process noise for IMU accelerometer bias prediction. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 0.0 | 0.01 | | 0.003 | m/s^3 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | 0.0 | 0.01 | | 0.003 | m/s^3 |   | ### EKF2_ACC_NOISE (`FLOAT`) {#EKF2_ACC_NOISE} Accelerometer noise for covariance prediction. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 0.01 | 1.0 | | 0.35 | m/s^2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | 0.01 | 1.0 | | 0.35 | m/s^2 |   | ### EKF2_AGP0_CTRL (`INT32`) {#EKF2_AGP0_CTRL} @@ -18007,17 +20178,17 @@ Set bits in the following positions to enable: 0 : Horizontal position fusion 1 - `0`: Horizontal position - `1`: Vertical position -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 3 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 3 | | 0 | |   | ### EKF2_AGP0_DELAY (`FLOAT`) {#EKF2_AGP0_DELAY} Auxiliary global position sensor 0 delay (to IMU). -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 1000 | | 0 | ms | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 1000 | | 0 | ms |   | ### EKF2_AGP0_GATE (`FLOAT`) {#EKF2_AGP0_GATE} @@ -18025,9 +20196,9 @@ Gate size for auxiliary global position sensor 0 fusion. Sets the number of standard deviations used by the innovation consistency test. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1.0 | | | 3.0 | SD | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1.0 | | | 3.0 | SD |   | ### EKF2_AGP0_ID (`INT32`) {#EKF2_AGP0_ID} @@ -18035,9 +20206,9 @@ Auxiliary global position sensor 0 ID. Sensor ID for slot 0. Set to 0 to disable this slot. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 255 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 255 | | 0 | |   | ### EKF2_AGP0_MODE (`INT32`) {#EKF2_AGP0_MODE} @@ -18050,9 +20221,9 @@ Automatic: reset on fusion timeout if no other source of position is available D - `0`: Automatic - `1`: Dead-reckoning -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### EKF2_AGP0_NOISE (`FLOAT`) {#EKF2_AGP0_NOISE} @@ -18060,9 +20231,9 @@ Measurement noise for auxiliary global position sensor 0. Used to lower bound or replace the uncertainty included in the message -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.01 | | | 1.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.01 | | | 1.0 | m |   | ### EKF2_AGP1_CTRL (`INT32`) {#EKF2_AGP1_CTRL} @@ -18075,17 +20246,17 @@ Set bits in the following positions to enable: 0 : Horizontal position fusion 1 - `0`: Horizontal position - `1`: Vertical position -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 3 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 3 | | 0 | |   | ### EKF2_AGP1_DELAY (`FLOAT`) {#EKF2_AGP1_DELAY} Auxiliary global position sensor 1 delay (to IMU). -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 1000 | | 0 | ms | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 1000 | | 0 | ms |   | ### EKF2_AGP1_GATE (`FLOAT`) {#EKF2_AGP1_GATE} @@ -18093,9 +20264,9 @@ Gate size for auxiliary global position sensor 1 fusion. Sets the number of standard deviations used by the innovation consistency test. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1.0 | | | 3.0 | SD | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1.0 | | | 3.0 | SD |   | ### EKF2_AGP1_ID (`INT32`) {#EKF2_AGP1_ID} @@ -18103,9 +20274,9 @@ Auxiliary global position sensor 1 ID. Sensor ID for slot 1. Set to 0 to disable this slot. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 255 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 255 | | 0 | |   | ### EKF2_AGP1_MODE (`INT32`) {#EKF2_AGP1_MODE} @@ -18118,9 +20289,9 @@ Automatic: reset on fusion timeout if no other source of position is available D - `0`: Automatic - `1`: Dead-reckoning -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### EKF2_AGP1_NOISE (`FLOAT`) {#EKF2_AGP1_NOISE} @@ -18128,9 +20299,9 @@ Measurement noise for auxiliary global position sensor 1. Used to lower bound or replace the uncertainty included in the message -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.01 | | | 1.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.01 | | | 1.0 | m |   | ### EKF2_AGP2_CTRL (`INT32`) {#EKF2_AGP2_CTRL} @@ -18143,17 +20314,17 @@ Set bits in the following positions to enable: 0 : Horizontal position fusion 1 - `0`: Horizontal position - `1`: Vertical position -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 3 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 3 | | 0 | |   | ### EKF2_AGP2_DELAY (`FLOAT`) {#EKF2_AGP2_DELAY} Auxiliary global position sensor 2 delay (to IMU). -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 1000 | | 0 | ms | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 1000 | | 0 | ms |   | ### EKF2_AGP2_GATE (`FLOAT`) {#EKF2_AGP2_GATE} @@ -18161,9 +20332,9 @@ Gate size for auxiliary global position sensor 2 fusion. Sets the number of standard deviations used by the innovation consistency test. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1.0 | | | 3.0 | SD | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1.0 | | | 3.0 | SD |   | ### EKF2_AGP2_ID (`INT32`) {#EKF2_AGP2_ID} @@ -18171,9 +20342,9 @@ Auxiliary global position sensor 2 ID. Sensor ID for slot 2. Set to 0 to disable this slot. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 255 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 255 | | 0 | |   | ### EKF2_AGP2_MODE (`INT32`) {#EKF2_AGP2_MODE} @@ -18186,9 +20357,9 @@ Automatic: reset on fusion timeout if no other source of position is available D - `0`: Automatic - `1`: Dead-reckoning -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### EKF2_AGP2_NOISE (`FLOAT`) {#EKF2_AGP2_NOISE} @@ -18196,9 +20367,9 @@ Measurement noise for auxiliary global position sensor 2. Used to lower bound or replace the uncertainty included in the message -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.01 | | | 1.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.01 | | | 1.0 | m |   | ### EKF2_AGP3_CTRL (`INT32`) {#EKF2_AGP3_CTRL} @@ -18211,17 +20382,17 @@ Set bits in the following positions to enable: 0 : Horizontal position fusion 1 - `0`: Horizontal position - `1`: Vertical position -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 3 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 3 | | 0 | |   | ### EKF2_AGP3_DELAY (`FLOAT`) {#EKF2_AGP3_DELAY} Auxiliary global position sensor 3 delay (to IMU). -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 1000 | | 0 | ms | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 1000 | | 0 | ms |   | ### EKF2_AGP3_GATE (`FLOAT`) {#EKF2_AGP3_GATE} @@ -18229,9 +20400,9 @@ Gate size for auxiliary global position sensor 3 fusion. Sets the number of standard deviations used by the innovation consistency test. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1.0 | | | 3.0 | SD | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1.0 | | | 3.0 | SD |   | ### EKF2_AGP3_ID (`INT32`) {#EKF2_AGP3_ID} @@ -18239,9 +20410,9 @@ Auxiliary global position sensor 3 ID. Sensor ID for slot 3. Set to 0 to disable this slot. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 255 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 255 | | 0 | |   | ### EKF2_AGP3_MODE (`INT32`) {#EKF2_AGP3_MODE} @@ -18254,9 +20425,9 @@ Automatic: reset on fusion timeout if no other source of position is available D - `0`: Automatic - `1`: Dead-reckoning -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### EKF2_AGP3_NOISE (`FLOAT`) {#EKF2_AGP3_NOISE} @@ -18264,17 +20435,17 @@ Measurement noise for auxiliary global position sensor 3. Used to lower bound or replace the uncertainty included in the message -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.01 | | | 1.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.01 | | | 1.0 | m |   | ### EKF2_ANGERR_INIT (`FLOAT`) {#EKF2_ANGERR_INIT} 1-sigma tilt angle uncertainty after gravity vector alignment. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0.0 | 0.5 | | 0.1 | rad | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0.0 | 0.5 | | 0.1 | rad |   | ### EKF2_ARSP_THR (`FLOAT`) {#EKF2_ARSP_THR} @@ -18282,33 +20453,33 @@ Airspeed fusion threshold. Airspeed data is fused for wind estimation if above this threshold. Set to 0 to disable airspeed fusion. For reliable wind estimation both sideslip (see EKF2_FUSE_BETA) and airspeed fusion should be enabled. Only applies to fixed-wing vehicles (or VTOLs in fixed-wing mode). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | | | 0.0 | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | | | 0.0 | m/s |   | ### EKF2_ASPD_MAX (`FLOAT`) {#EKF2_ASPD_MAX} Maximum airspeed used for baro static pressure compensation. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 5.0 | 50.0 | | 20.0 | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 5.0 | 50.0 | | 20.0 | m/s |   | ### EKF2_ASP_DELAY (`FLOAT`) {#EKF2_ASP_DELAY} Airspeed measurement delay relative to IMU measurements. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 300 | | 100 | ms | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 300 | | 100 | ms |   | ### EKF2_AVEL_DELAY (`FLOAT`) {#EKF2_AVEL_DELAY} Auxiliary Velocity Estimate delay relative to IMU measurements. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 300 | | 5 | ms | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 300 | | 5 | ms |   | ### EKF2_BARO_CTRL (`INT32`) {#EKF2_BARO_CTRL} @@ -18316,17 +20487,17 @@ Barometric sensor height aiding. If this parameter is enabled then the estimator will make use of the barometric height measurements to estimate its height in addition to other height sources (if activated). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ----------- | ---- | -|   | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ----------- | ---- | --------- | +|   | | | | Enabled (1) | |   | ### EKF2_BARO_DELAY (`FLOAT`) {#EKF2_BARO_DELAY} Barometer measurement delay relative to IMU measurements. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 300 | | 0 | ms | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 300 | | 0 | ms |   | ### EKF2_BARO_GATE (`FLOAT`) {#EKF2_BARO_GATE} @@ -18334,17 +20505,17 @@ Gate size for barometric and GPS height fusion. Sets the number of standard deviations used by the innovation consistency test. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1.0 | | | 5.0 | SD | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1.0 | | | 5.0 | SD |   | ### EKF2_BARO_NOISE (`FLOAT`) {#EKF2_BARO_NOISE} Measurement noise for barometric altitude. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.01 | 15.0 | | 3.5 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.01 | 15.0 | | 3.5 | m |   | ### EKF2_BCOEF_X (`FLOAT`) {#EKF2_BCOEF_X} @@ -18352,9 +20523,9 @@ X-axis ballistic coefficient used for multi-rotor wind estimation. This parameter controls the prediction of drag produced by bluff body drag along the forward/reverse axis when flying a multi-copter which enables estimation of wind drift when enabled by the EKF2_DRAG_CTRL parameter. The drag produced by this effect scales with speed squared. The predicted drag from the rotors is specified separately by the EKF2_MCOEF parameter. Set this parameter to zero to turn off the bluff body drag model for this axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ------ | -|   | 0.0 | 200.0 | | 100.0 | kg/m^2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ------ | --------- | +|   | 0.0 | 200.0 | | 100.0 | kg/m^2 |   | ### EKF2_BCOEF_Y (`FLOAT`) {#EKF2_BCOEF_Y} @@ -18362,9 +20533,9 @@ Y-axis ballistic coefficient used for multi-rotor wind estimation. This parameter controls the prediction of drag produced by bluff body drag along the right/left axis when flying a multi-copter, which enables estimation of wind drift when enabled by the EKF2_DRAG_CTRL parameter. The drag produced by this effect scales with speed squared. The predicted drag from the rotors is specified separately by the EKF2_MCOEF parameter. Set this parameter to zero to turn off the bluff body drag model for this axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ------ | -|   | 0.0 | 200.0 | | 100.0 | kg/m^2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ------ | --------- | +|   | 0.0 | 200.0 | | 100.0 | kg/m^2 |   | ### EKF2_BETA_GATE (`FLOAT`) {#EKF2_BETA_GATE} @@ -18372,17 +20543,17 @@ Gate size for synthetic sideslip fusion. Sets the number of standard deviations used by the innovation consistency test. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1.0 | | | 5.0 | SD | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1.0 | | | 5.0 | SD |   | ### EKF2_BETA_NOISE (`FLOAT`) {#EKF2_BETA_NOISE} Noise for synthetic sideslip fusion. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 1.0 | | 0.3 | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 1.0 | | 0.3 | m/s |   | ### EKF2_DECL_TYPE (`INT32`) {#EKF2_DECL_TYPE} @@ -18395,9 +20566,9 @@ Set bits in the following positions to enable functions. 0 : Set to true to use - `0`: use geo_lookup declination - `1`: save EKF2_MAG_DECL on disarm -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 3 | | 3 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 3 | | 3 | |   | ### EKF2_DELAY_MAX (`FLOAT`) {#EKF2_DELAY_MAX} @@ -18405,9 +20576,9 @@ Maximum delay of all the aiding sensors. Defines the delay between the current time and the delayed-time horizon. This value should be at least as large as the largest EKF2_XXX_DELAY parameter. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 1000 | | 200 | ms | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 1000 | | 200 | ms |   | ### EKF2_DRAG_CTRL (`INT32`) {#EKF2_DRAG_CTRL} @@ -18415,9 +20586,9 @@ Multirotor wind estimation selection. Activate wind speed estimation using specific-force measurements and a drag model defined by EKF2*BCOEF*[XY] and EKF2_MCOEF. Only use on vehicles that have their thrust aligned with the Z axis and no thrust in the XY plane. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------------ | ---- | -|   | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------------ | ---- | --------- | +|   | | | | Disabled (0) | |   | ### EKF2_DRAG_NOISE (`FLOAT`) {#EKF2_DRAG_NOISE} @@ -18425,35 +20596,25 @@ Specific drag force observation noise variance. Used by the multi-rotor specific drag force model. Increasing this makes the multi-rotor wind estimates adjust more slowly. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | --------- | -|   | 0.5 | 10.0 | | 2.5 | (m/s^2)^2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | --------- | --------- | +|   | 0.5 | 10.0 | | 2.5 | (m/s^2)^2 |   | ### EKF2_EAS_NOISE (`FLOAT`) {#EKF2_EAS_NOISE} Measurement noise for airspeed fusion. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.5 | 5.0 | | 1.4 | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.5 | 5.0 | | 1.4 | m/s |   | ### EKF2_EN (`INT32`) {#EKF2_EN} EKF2 enable. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ----------- | ---- | -|   | | | | Enabled (1) | - -### EKF2_ENGINE_WRM (`INT32`) {#EKF2_ENGINE_WRM} - -Enable constant position fusion during engine warmup. - -When enabled, constant position fusion is enabled when the vehicle is landed and armed. This is intended for IC engine warmup (e.g., fuel engines on catapult) to allow mode transitions to auto/takeoff despite vibrations from running engines. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------------ | ---- | -|   | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ----------- | ---- | --------- | +|   | | | | Enabled (1) | |   | ### EKF2_EVA_NOISE (`FLOAT`) {#EKF2_EVA_NOISE} @@ -18461,9 +20622,9 @@ Measurement noise for vision angle measurements. Used to lower bound or replace the uncertainty included in the message -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.05 | | | 0.1 | rad | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.05 | | | 0.1 | rad |   | ### EKF2_EVP_GATE (`FLOAT`) {#EKF2_EVP_GATE} @@ -18471,9 +20632,9 @@ Gate size for vision position fusion. Sets the number of standard deviations used by the innovation consistency test. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1.0 | | | 5.0 | SD | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1.0 | | | 5.0 | SD |   | ### EKF2_EVP_NOISE (`FLOAT`) {#EKF2_EVP_NOISE} @@ -18481,9 +20642,9 @@ Measurement noise for vision position measurements. Used to lower bound or replace the uncertainty included in the message -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.01 | | | 0.1 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.01 | | | 0.1 | m |   | ### EKF2_EVV_GATE (`FLOAT`) {#EKF2_EVV_GATE} @@ -18491,9 +20652,9 @@ Gate size for vision velocity estimate fusion. Sets the number of standard deviations used by the innovation consistency test. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1.0 | | | 3.0 | SD | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1.0 | | | 3.0 | SD |   | ### EKF2_EVV_NOISE (`FLOAT`) {#EKF2_EVV_NOISE} @@ -18501,9 +20662,9 @@ Measurement noise for vision velocity measurements. Used to lower bound or replace the uncertainty included in the message -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.01 | | | 0.1 | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.01 | | | 0.1 | m/s |   | ### EKF2_EV_CTRL (`INT32`) {#EKF2_EV_CTRL} @@ -18518,17 +20679,17 @@ Set bits in the following positions to enable: 0 : Horizontal position fusion 1 - `2`: 3D velocity - `3`: Yaw -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 15 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 15 | | 0 | |   | ### EKF2_EV_DELAY (`FLOAT`) {#EKF2_EV_DELAY} Vision Position Estimator delay relative to IMU measurements. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 300 | | 0 | ms | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 300 | | 0 | ms |   | ### EKF2_EV_NOISE_MD (`INT32`) {#EKF2_EV_NOISE_MD} @@ -18541,9 +20702,9 @@ If set to 0 (default) the measurement noise is taken from the vision message and - `0`: EV reported variance (parameter lower bound) - `1`: EV noise parameters -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### EKF2_EV_POS_X (`FLOAT`) {#EKF2_EV_POS_X} @@ -18551,9 +20712,9 @@ X position of VI sensor focal point in body frame. Forward axis with origin relative to vehicle centre of gravity -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | m |   | ### EKF2_EV_POS_Y (`FLOAT`) {#EKF2_EV_POS_Y} @@ -18561,9 +20722,9 @@ Y position of VI sensor focal point in body frame. Forward axis with origin relative to vehicle centre of gravity -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | m |   | ### EKF2_EV_POS_Z (`FLOAT`) {#EKF2_EV_POS_Z} @@ -18571,9 +20732,9 @@ Z position of VI sensor focal point in body frame. Forward axis with origin relative to vehicle centre of gravity -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | m |   | ### EKF2_EV_QMIN (`INT32`) {#EKF2_EV_QMIN} @@ -18581,9 +20742,9 @@ External vision (EV) minimum quality (optional). External vision will only be started and fused if the quality metric is above this threshold. The quality metric is a completely optional field provided by some VIO systems. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 100 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 100 | | 0 | |   | ### EKF2_FUSE_BETA (`INT32`) {#EKF2_FUSE_BETA} @@ -18591,17 +20752,17 @@ Enable synthetic sideslip fusion. For reliable wind estimation both sideslip and airspeed fusion (see EKF2_ARSP_THR) should be enabled. Only applies to vehicles in fixed-wing mode or with airspeed fusion active. Note: side slip fusion is currently not supported for tailsitters. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------------ | ---- | -|   | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------------ | ---- | --------- | +|   | | | | Disabled (0) | |   | ### EKF2_GBIAS_INIT (`FLOAT`) {#EKF2_GBIAS_INIT} 1-sigma IMU gyro switch-on bias. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ----- | -| ✓ | 0.0 | 0.2 | | 0.1 | rad/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ----- | --------- | +| ✓ | 0.0 | 0.2 | | 0.1 | rad/s |   | ### EKF2_GND_EFF_DZ (`FLOAT`) {#EKF2_GND_EFF_DZ} @@ -18609,9 +20770,9 @@ Baro deadzone range for height fusion. Sets the value of deadzone applied to negative baro innovations. Deadzone is enabled when EKF2_GND_EFF_DZ > 0. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 10.0 | | 4.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 10.0 | | 4.0 | m |   | ### EKF2_GND_MAX_HGT (`FLOAT`) {#EKF2_GND_MAX_HGT} @@ -18619,9 +20780,9 @@ Height above ground level for ground effect zone. Sets the maximum distance to the ground level where negative baro innovations are expected. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 5.0 | | 0.5 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 5.0 | | 0.5 | m |   | ### EKF2_GPS_CHECK (`INT32`) {#EKF2_GPS_CHECK} @@ -18644,9 +20805,9 @@ Each threshold value is defined by the parameter indicated next to the check. Dr - `10`: GPS fix type (EKF2_REQ_FIX) - `11`: Jamming -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 4095 | | 2047 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 4095 | | 2047 | |   | ### EKF2_GPS_CTRL (`INT32`) {#EKF2_GPS_CTRL} @@ -18661,19 +20822,9 @@ Set bits in the following positions to enable: 0 : Longitude and latitude fusion - `2`: 3D velocity - `3`: Dual antenna heading -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 15 | | 7 | - -### EKF2_GPS_DELAY (`FLOAT`) {#EKF2_GPS_DELAY} - -GPS measurement delay relative to IMU measurement. - -GPS measurement delay relative to IMU measurement if PPS time correction is not available/enabled (PPS_CAP_ENABLE). - -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 300 | | 110 | ms | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 15 | | 7 | |   | ### EKF2_GPS_MODE (`INT32`) {#EKF2_GPS_MODE} @@ -18686,39 +20837,9 @@ Automatic: reset on fusion timeout if no other source of position is available. - `0`: Automatic - `1`: Dead-reckoning -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | - -### EKF2_GPS_POS_X (`FLOAT`) {#EKF2_GPS_POS_X} - -X position of GPS antenna in body frame. - -Forward (roll) axis with origin relative to vehicle centre of gravity - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | m | - -### EKF2_GPS_POS_Y (`FLOAT`) {#EKF2_GPS_POS_Y} - -Y position of GPS antenna in body frame. - -Right (pitch) axis with origin relative to vehicle centre of gravity - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | m | - -### EKF2_GPS_POS_Z (`FLOAT`) {#EKF2_GPS_POS_Z} - -Z position of GPS antenna in body frame. - -Down (yaw) axis with origin relative to vehicle centre of gravity - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### EKF2_GPS_P_GATE (`FLOAT`) {#EKF2_GPS_P_GATE} @@ -18726,17 +20847,17 @@ Gate size for GNSS position fusion. Sets the number of standard deviations used by the innovation consistency test. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1.0 | | | 5.0 | SD | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1.0 | | | 5.0 | SD |   | ### EKF2_GPS_P_NOISE (`FLOAT`) {#EKF2_GPS_P_NOISE} Measurement noise for GNSS position. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.01 | 10.0 | | 0.5 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.01 | 10.0 | | 0.5 | m |   | ### EKF2_GPS_V_GATE (`FLOAT`) {#EKF2_GPS_V_GATE} @@ -18744,33 +20865,33 @@ Gate size for GNSS velocity fusion. Sets the number of standard deviations used by the innovation consistency test. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1.0 | | | 5.0 | SD | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1.0 | | | 5.0 | SD |   | ### EKF2_GPS_V_NOISE (`FLOAT`) {#EKF2_GPS_V_NOISE} Measurement noise for GNSS velocity. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.01 | 5.0 | | 0.3 | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.01 | 5.0 | | 0.3 | m/s |   | ### EKF2_GPS_YAW_OFF (`FLOAT`) {#EKF2_GPS_YAW_OFF} Heading/Yaw offset for dual antenna GPS. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 360.0 | | 0.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 360.0 | | 0.0 | deg |   | ### EKF2_GRAV_NOISE (`FLOAT`) {#EKF2_GRAV_NOISE} Accelerometer measurement noise for gravity based observations. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 10.0 | | 1.0 | g0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 10.0 | | 1.0 | g0 |   | ### EKF2_GSF_TAS (`FLOAT`) {#EKF2_GSF_TAS} @@ -18778,9 +20899,9 @@ Default value of true airspeed used in EKF-GSF AHRS calculation. If no airspeed measurements are available, the EKF-GSF AHRS calculation will assume this value of true airspeed when compensating for centripetal acceleration during turns. Set to zero to disable centripetal acceleration compensation during fixed wing flight modes. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 100.0 | | 15.0 | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 100.0 | | 15.0 | m/s |   | ### EKF2_GYR_B_LIM (`FLOAT`) {#EKF2_GYR_B_LIM} @@ -18788,25 +20909,25 @@ Gyro bias learning limit. The ekf gyro bias states will be limited to within a range equivalent to +- of this value. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 0.0 | 0.4 | | 0.15 | rad/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | 0.0 | 0.4 | | 0.15 | rad/s |   | ### EKF2_GYR_B_NOISE (`FLOAT`) {#EKF2_GYR_B_NOISE} Process noise for IMU rate gyro bias prediction. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ------- | -|   | 0.0 | 0.01 | | 0.001 | rad/s^2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ------- | --------- | +|   | 0.0 | 0.01 | | 0.001 | rad/s^2 |   | ### EKF2_GYR_NOISE (`FLOAT`) {#EKF2_GYR_NOISE} Rate gyro noise for covariance prediction. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 0.0001 | 0.1 | | 0.015 | rad/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | 0.0001 | 0.1 | | 0.015 | rad/s |   | ### EKF2_HDG_GATE (`FLOAT`) {#EKF2_HDG_GATE} @@ -18814,23 +20935,24 @@ Gate size for heading fusion. Sets the number of standard deviations used by the innovation consistency test. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1.0 | | | 2.6 | SD | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1.0 | | | 2.6 | SD |   | ### EKF2_HEAD_NOISE (`FLOAT`) {#EKF2_HEAD_NOISE} Measurement noise for magnetic heading fusion. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.01 | 1.0 | | 0.3 | rad | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.01 | 1.0 | | 0.3 | rad |   | ### EKF2_HGT_REF (`INT32`) {#EKF2_HGT_REF} Determines the reference source of height data used by the EKF. -When multiple height sources are enabled at the same time, the height estimate will always converge towards the reference height source selected by this parameter. The range sensor and vision options should only be used when for operation over a flat surface as the local NED origin will move up and down with ground level. If GPS is set as reference but altitude fusion is disabled in EKF2_GPS_CTRL, the GPS altitude is still used to initiaize the bias of the other height sensors. +When multiple height sources are enabled at the same time, the height estimate will always converge towards the reference height source selected by this parameter. The range sensor and vision options should only be used when for operation over a flat surface as the local NED origin will move up and down with ground level. +If GPS is set as reference and EKF2_GPS_CTRL is not 0, the GPS altitude is still used to initiaize the bias of the other height sensors, regardless of the altitude fusion bit in EKF2_GPS_CTRL. **Values:** @@ -18839,9 +20961,9 @@ When multiple height sources are enabled at the same time, the height estimate w - `2`: Range sensor - `3`: Vision -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 1 | |   | ### EKF2_IMU_CTRL (`INT32`) {#EKF2_IMU_CTRL} @@ -18853,9 +20975,9 @@ IMU control. - `1`: Accel Bias - `2`: Gravity vector fusion -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 7 | | 7 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 7 | | 7 | |   | ### EKF2_IMU_POS_X (`FLOAT`) {#EKF2_IMU_POS_X} @@ -18863,9 +20985,9 @@ X position of IMU in body frame. Forward axis with origin relative to vehicle centre of gravity -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | m |   | ### EKF2_IMU_POS_Y (`FLOAT`) {#EKF2_IMU_POS_Y} @@ -18873,9 +20995,9 @@ Y position of IMU in body frame. Forward axis with origin relative to vehicle centre of gravity -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | m |   | ### EKF2_IMU_POS_Z (`FLOAT`) {#EKF2_IMU_POS_Z} @@ -18883,17 +21005,17 @@ Z position of IMU in body frame. Forward axis with origin relative to vehicle centre of gravity -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | m |   | ### EKF2_LOG_VERBOSE (`INT32`) {#EKF2_LOG_VERBOSE} Verbose logging. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ----------- | ---- | -|   | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ----------- | ---- | --------- | +|   | | | | Enabled (1) | |   | ### EKF2_MAG_ACCLIM (`FLOAT`) {#EKF2_MAG_ACCLIM} @@ -18901,17 +21023,17 @@ Horizontal acceleration threshold used for heading observability check. The heading is assumed to be observable when the body acceleration is greater than this parameter when a global position/velocity aiding source is active. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 0.0 | 5.0 | | 0.5 | m/s^2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | 0.0 | 5.0 | | 0.5 | m/s^2 |   | ### EKF2_MAG_B_NOISE (`FLOAT`) {#EKF2_MAG_B_NOISE} Process noise for body magnetic field prediction. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ------- | -|   | 0.0 | 0.1 | | 0.0001 | gauss/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ------- | --------- | +|   | 0.0 | 0.1 | | 0.0001 | gauss/s |   | ### EKF2_MAG_CHECK (`INT32`) {#EKF2_MAG_CHECK} @@ -18925,9 +21047,9 @@ Bitmask to set which check is used to decide whether the magnetometer data is va - `1`: Inclination (EKF2_MAG_CHK_INC) - `2`: Wait for WMM -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 7 | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 7 | | 1 | |   | ### EKF2_MAG_CHK_INC (`FLOAT`) {#EKF2_MAG_CHK_INC} @@ -18935,9 +21057,9 @@ Magnetic field inclination check tolerance. Maximum allowed deviation from the expected magnetic field inclination to pass the check. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 90.0 | | 20.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 90.0 | | 20.0 | deg |   | ### EKF2_MAG_CHK_STR (`FLOAT`) {#EKF2_MAG_CHK_STR} @@ -18945,33 +21067,33 @@ Magnetic field strength check tolerance. Maximum allowed deviation from the expected magnetic field strength to pass the check. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 0.0 | 1.0 | | 0.2 | gauss | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | 0.0 | 1.0 | | 0.2 | gauss |   | ### EKF2_MAG_DECL (`FLOAT`) {#EKF2_MAG_DECL} Magnetic declination. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | deg |   | ### EKF2_MAG_DELAY (`FLOAT`) {#EKF2_MAG_DELAY} Magnetometer measurement delay relative to IMU measurements. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 300 | | 0 | ms | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 300 | | 0 | ms |   | ### EKF2_MAG_E_NOISE (`FLOAT`) {#EKF2_MAG_E_NOISE} Process noise for earth magnetic field prediction. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ------- | -|   | 0.0 | 0.1 | | 0.001 | gauss/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ------- | --------- | +|   | 0.0 | 0.1 | | 0.001 | gauss/s |   | ### EKF2_MAG_GATE (`FLOAT`) {#EKF2_MAG_GATE} @@ -18979,17 +21101,17 @@ Gate size for magnetometer XYZ component fusion. Sets the number of standard deviations used by the innovation consistency test. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1.0 | | | 3.0 | SD | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1.0 | | | 3.0 | SD |   | ### EKF2_MAG_NOISE (`FLOAT`) {#EKF2_MAG_NOISE} Measurement noise for magnetometer 3-axis fusion. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 0.001 | 1.0 | | 0.05 | gauss | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | 0.001 | 1.0 | | 0.05 | gauss |   | ### EKF2_MAG_TYPE (`INT32`) {#EKF2_MAG_TYPE} @@ -19004,9 +21126,9 @@ Integer controlling the type of magnetometer fusion used - magnetic heading or 3 - `5`: None - `6`: Init -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### EKF2_MCOEF (`FLOAT`) {#EKF2_MCOEF} @@ -19014,9 +21136,9 @@ Propeller momentum drag coefficient for multi-rotor wind estimation. This parameter controls the prediction of drag produced by the propellers when flying a multi-copter, which enables estimation of wind drift when enabled by the EKF2_DRAG_CTRL parameter. The drag produced by this effect scales with speed not speed squared and is produced because some of the air velocity normal to the propeller axis of rotation is lost when passing through the rotor disc. This changes the momentum of the flow which creates a drag reaction force. When comparing un-ducted propellers of the same diameter, the effect is roughly proportional to the area of the propeller blades when viewed side on and changes with propeller selection. Momentum drag is significantly higher for ducted rotors. To account for the drag produced by the body which scales with speed squared, see documentation for the EKF2_BCOEF_X and EKF2_BCOEF_Y parameters. Set this parameter to zero to turn off the momentum drag model for both axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1.0 | | 0.15 | 1/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1.0 | | 0.15 | 1/s |   | ### EKF2_MIN_RNG (`FLOAT`) {#EKF2_MIN_RNG} @@ -19024,9 +21146,9 @@ Expected range finder reading when on ground. If the vehicle is on ground, is not moving as determined by the motion test and the range finder is returning invalid or no data, then an assumed range value of EKF2_MIN_RNG will be used by the terrain estimator so that a terrain height estimate is available at the start of flight in situations where the range finder may be inside its minimum measurements distance when on ground. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.01 | | | 0.01 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.01 | | | 0.01 | m |   | ### EKF2_MULTI_IMU (`INT32`) {#EKF2_MULTI_IMU} @@ -19034,9 +21156,9 @@ Multi-EKF IMUs. Maximum number of IMUs to use for Multi-EKF. Set 0 to disable. Requires SENS_IMU_MODE 0. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 4 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 4 | | 0 | |   | ### EKF2_MULTI_MAG (`INT32`) {#EKF2_MULTI_MAG} @@ -19044,17 +21166,17 @@ Multi-EKF Magnetometers. Maximum number of magnetometers to use for Multi-EKF. Set 0 to disable. Requires SENS_MAG_MODE 0. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 4 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 4 | | 0 | |   | ### EKF2_NOAID_NOISE (`FLOAT`) {#EKF2_NOAID_NOISE} Measurement noise for non-aiding position hold. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.5 | 50.0 | | 10.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.5 | 50.0 | | 10.0 | m |   | ### EKF2_NOAID_TOUT (`INT32`) {#EKF2_NOAID_TOUT} @@ -19062,9 +21184,9 @@ Maximum inertial dead-reckoning time. Maximum lapsed time from last fusion of measurements that constrain velocity drift before the EKF will report the horizontal nav solution as invalid -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 500000 | 10000000 | | 5000000 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 500000 | 10000000 | | 5000000 | us |   | ### EKF2_OF_CTRL (`INT32`) {#EKF2_OF_CTRL} @@ -19072,9 +21194,9 @@ Optical flow aiding. Enable optical flow fusion. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ----------- | ---- | -|   | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ----------- | ---- | --------- | +|   | | | | Enabled (1) | |   | ### EKF2_OF_DELAY (`FLOAT`) {#EKF2_OF_DELAY} @@ -19082,9 +21204,9 @@ Optical flow measurement delay relative to IMU measurements. Assumes measurement is timestamped at trailing edge of integration period -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 300 | | 20 | ms | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 300 | | 20 | ms |   | ### EKF2_OF_GATE (`FLOAT`) {#EKF2_OF_GATE} @@ -19092,9 +21214,9 @@ Gate size for optical flow fusion. Sets the number of standard deviations used by the innovation consistency test. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1.0 | | | 3.0 | SD | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1.0 | | | 3.0 | SD |   | ### EKF2_OF_GYR_SRC (`INT32`) {#EKF2_OF_GYR_SRC} @@ -19107,9 +21229,9 @@ Auto: use gyro from optical flow message if available, internal gyro otherwise. - `0`: Auto - `1`: Internal -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### EKF2_OF_N_MAX (`FLOAT`) {#EKF2_OF_N_MAX} @@ -19117,9 +21239,9 @@ Optical flow maximum noise. Measurement noise for the optical flow sensor when it's reported quality metric is at the minimum -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 0.05 | | | 0.5 | rad/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | 0.05 | | | 0.5 | rad/s |   | ### EKF2_OF_N_MIN (`FLOAT`) {#EKF2_OF_N_MIN} @@ -19127,9 +21249,9 @@ Optical flow minimum noise. Measurement noise for the optical flow sensor when it's reported quality metric is at the maximum -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 0.05 | | | 0.15 | rad/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | 0.05 | | | 0.15 | rad/s |   | ### EKF2_OF_POS_X (`FLOAT`) {#EKF2_OF_POS_X} @@ -19137,9 +21259,9 @@ X position of optical flow focal point in body frame. Forward axis with origin relative to vehicle centre of gravity -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | m |   | ### EKF2_OF_POS_Y (`FLOAT`) {#EKF2_OF_POS_Y} @@ -19147,9 +21269,9 @@ Y position of optical flow focal point in body frame. Forward axis with origin relative to vehicle centre of gravity -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | m |   | ### EKF2_OF_POS_Z (`FLOAT`) {#EKF2_OF_POS_Z} @@ -19157,9 +21279,9 @@ Z position of optical flow focal point in body frame. Forward axis with origin relative to vehicle centre of gravity -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | m |   | ### EKF2_OF_QMIN (`INT32`) {#EKF2_OF_QMIN} @@ -19167,9 +21289,9 @@ In air optical flow minimum quality. Optical Flow data will only be used in air if the sensor reports a quality metric >= EKF2_OF_QMIN -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 255 | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 255 | | 1 | |   | ### EKF2_OF_QMIN_GND (`INT32`) {#EKF2_OF_QMIN_GND} @@ -19177,9 +21299,9 @@ On ground optical flow minimum quality. Optical Flow data will only be used on the ground if the sensor reports a quality metric >= EKF2_OF_QMIN_GND -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 255 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 255 | | 0 | |   | ### EKF2_PCOEF_XN (`FLOAT`) {#EKF2_PCOEF_XN} @@ -19187,9 +21309,9 @@ Static pressure position error coefficient for the negative X axis. This is the ratio of static pressure error to dynamic pressure generated by a negative wind relative velocity along the X body axis. If the baro height estimate rises during backwards flight, then this will be a negative number. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -0.5 | 0.5 | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -0.5 | 0.5 | | 0.0 | |   | ### EKF2_PCOEF_XP (`FLOAT`) {#EKF2_PCOEF_XP} @@ -19197,9 +21319,9 @@ Static pressure position error coefficient for the positive X axis. This is the ratio of static pressure error to dynamic pressure generated by a positive wind relative velocity along the X body axis. If the baro height estimate rises during forward flight, then this will be a negative number. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -0.5 | 0.5 | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -0.5 | 0.5 | | 0.0 | |   | ### EKF2_PCOEF_YN (`FLOAT`) {#EKF2_PCOEF_YN} @@ -19207,9 +21329,9 @@ Pressure position error coefficient for the negative Y axis. This is the ratio of static pressure error to dynamic pressure generated by a wind relative velocity along the negative Y (LH) body axis. If the baro height estimate rises during sideways flight to the left, then this will be a negative number. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -0.5 | 0.5 | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -0.5 | 0.5 | | 0.0 | |   | ### EKF2_PCOEF_YP (`FLOAT`) {#EKF2_PCOEF_YP} @@ -19217,9 +21339,9 @@ Pressure position error coefficient for the positive Y axis. This is the ratio of static pressure error to dynamic pressure generated by a wind relative velocity along the positive Y (RH) body axis. If the baro height estimate rises during sideways flight to the right, then this will be a negative number. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -0.5 | 0.5 | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -0.5 | 0.5 | | 0.0 | |   | ### EKF2_PCOEF_Z (`FLOAT`) {#EKF2_PCOEF_Z} @@ -19227,9 +21349,19 @@ Static pressure position error coefficient for the Z axis. This is the ratio of static pressure error to dynamic pressure generated by a wind relative velocity along the Z body axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -0.5 | 0.5 | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -0.5 | 0.5 | | 0.0 | |   | + +### EKF2_POS_LOCK (`INT32`) {#EKF2_POS_LOCK} + +Enable constant position fusion while on ground. + +When enabled, constant position fusion is enabled when the vehicle is landeded if position has been initialized but has currently no vel/pos aiding. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------------ | ---- | --------- | +|   | | | | Disabled (0) | |   | ### EKF2_PREDICT_US (`INT32`) {#EKF2_PREDICT_US} @@ -19237,25 +21369,25 @@ EKF prediction period. EKF prediction period in microseconds. This should ideally be an integer multiple of the IMU time delta. Actual filter update will be an integer multiple of IMU update. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1000 | 20000 | | 10000 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1000 | 20000 | | 10000 | us |   | ### EKF2_REQ_EPH (`FLOAT`) {#EKF2_REQ_EPH} Required EPH to use GPS. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 2 | 100 | | 3.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 100 | | 3.0 | m |   | ### EKF2_REQ_EPV (`FLOAT`) {#EKF2_REQ_EPV} Required EPV to use GPS. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 2 | 100 | | 5.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 100 | | 5.0 | m |   | ### EKF2_REQ_FIX (`INT32`) {#EKF2_REQ_FIX} @@ -19273,9 +21405,9 @@ Minimum GPS fix type required for GPS usage. - `6`: RTK fixed - `8`: Extrapolated -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 3 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 3 | |   | ### EKF2_REQ_GPS_H (`FLOAT`) {#EKF2_REQ_GPS_H} @@ -19283,49 +21415,92 @@ Required GPS health time on startup. Minimum continuous period without GPS failure required to mark a healthy GPS status. It can be reduced to speed up initialization, but it's recommended to keep this unchanged for a vehicle. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0.1 | | | 10.0 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0.1 | | | 10.0 | s |   | ### EKF2_REQ_HDRIFT (`FLOAT`) {#EKF2_REQ_HDRIFT} Maximum horizontal drift speed to use GPS. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 1.0 | | 0.1 | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 1.0 | | 0.1 | m/s |   | ### EKF2_REQ_NSATS (`INT32`) {#EKF2_REQ_NSATS} Required satellite count to use GPS. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 4 | 12 | | 6 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 4 | 12 | | 6 | |   | ### EKF2_REQ_PDOP (`FLOAT`) {#EKF2_REQ_PDOP} Maximum PDOP to use GPS. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1.5 | 5.0 | | 2.5 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1.5 | 5.0 | | 2.5 | |   | ### EKF2_REQ_SACC (`FLOAT`) {#EKF2_REQ_SACC} Required speed accuracy to use GPS. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.5 | 5.0 | | 0.5 | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.5 | 5.0 | | 0.5 | m/s |   | ### EKF2_REQ_VDRIFT (`FLOAT`) {#EKF2_REQ_VDRIFT} Maximum vertical drift speed to use GPS. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 1.5 | | 0.2 | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 1.5 | | 0.2 | m/s |   | + +### EKF2_RNGBC_CTRL (`INT32`) {#EKF2_RNGBC_CTRL} + +Ranging beacon fusion control. + +Enable/disable ranging beacon fusion. + +**Values:** + +- `0`: Disable ranging beacon fusion +- `1`: Enable ranging beacon fusion + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | + +### EKF2_RNGBC_DELAY (`FLOAT`) {#EKF2_RNGBC_DELAY} + +Ranging beacon measurement delay relative to IMU measurements. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 1000 | | 0 | ms |   | + +### EKF2_RNGBC_GATE (`FLOAT`) {#EKF2_RNGBC_GATE} + +Gate size for ranging beacon fusion. + +Sets the number of standard deviations used by the innovation consistency test. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1.0 | | | 5.0 | SD |   | + +### EKF2_RNGBC_NOISE (`FLOAT`) {#EKF2_RNGBC_NOISE} + +Measurement noise for ranging beacon fusion. + +Used to lower bound or replace the uncertainty included in the message + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 500.0 | | 30.0 | m |   | ### EKF2_RNG_A_HMAX (`FLOAT`) {#EKF2_RNG_A_HMAX} @@ -19333,9 +21508,9 @@ Maximum height above ground allowed for conditional range aid mode. If the vehicle absolute altitude exceeds this value then the estimator will not fuse range measurements to estimate its height. This only applies when conditional range aid mode is activated (EKF2_RNG_CTRL = 1). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1.0 | 10.0 | | 5.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1.0 | 10.0 | | 5.0 | m |   | ### EKF2_RNG_A_VMAX (`FLOAT`) {#EKF2_RNG_A_VMAX} @@ -19343,9 +21518,9 @@ Maximum horizontal velocity allowed for conditional range aid mode. If the vehicle horizontal speed exceeds this value then the estimator will not fuse range measurements to estimate its height. This only applies when conditional range aid mode is activated (EKF2_RNG_CTRL = 1). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 2 | | 1.0 | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 2 | | 1.0 | m/s |   | ### EKF2_RNG_CTRL (`INT32`) {#EKF2_RNG_CTRL} @@ -19359,17 +21534,17 @@ WARNING: Range finder measurements are less reliable and can experience unexpect - `1`: Enabled (conditional mode) - `2`: Enabled -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 1 | |   | ### EKF2_RNG_DELAY (`FLOAT`) {#EKF2_RNG_DELAY} Range finder measurement delay relative to IMU measurements. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 300 | | 5 | ms | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 300 | | 5 | ms |   | ### EKF2_RNG_FOG (`FLOAT`) {#EKF2_RNG_FOG} @@ -19377,9 +21552,9 @@ Maximum distance at which the range finder could detect fog (m). Limit for fog detection. If the range finder measures a distance greater than this value, the measurement is considered to not be blocked by fog or rain. If there's a jump from larger than RNG_FOG to smaller than EKF2_RNG_FOG, the measurement may gets rejected. 0 - disabled -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 20.0 | | 3.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 20.0 | | 3.0 | m |   | ### EKF2_RNG_GATE (`FLOAT`) {#EKF2_RNG_GATE} @@ -19387,9 +21562,9 @@ Gate size for range finder fusion. Sets the number of standard deviations used by the innovation consistency test. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1.0 | | | 5.0 | SD | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1.0 | | | 5.0 | SD |   | ### EKF2_RNG_K_GATE (`FLOAT`) {#EKF2_RNG_K_GATE} @@ -19397,25 +21572,25 @@ Gate size used for range finder kinematic consistency check. To be used, the time derivative of the distance sensor measurements projected on the vertical axis needs to be statistically consistent with the estimated vertical velocity of the drone. Decrease this value to make the filter more robust against range finder faulty data (stuck, reflections, ...). Note: tune the range finder noise parameters (EKF2_RNG_NOISE and EKF2_RNG_SFE) before tuning this gate. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 5.0 | | 1.0 | SD | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 5.0 | | 1.0 | SD |   | ### EKF2_RNG_NOISE (`FLOAT`) {#EKF2_RNG_NOISE} Measurement noise for range finder fusion. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.01 | | | 0.1 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.01 | | | 0.1 | m |   | ### EKF2_RNG_PITCH (`FLOAT`) {#EKF2_RNG_PITCH} Range sensor pitch offset. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -0.75 | 0.75 | | 0.0 | rad | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -0.75 | 0.75 | | 0.0 | rad |   | ### EKF2_RNG_POS_X (`FLOAT`) {#EKF2_RNG_POS_X} @@ -19423,9 +21598,9 @@ X position of range finder origin in body frame. Forward axis with origin relative to vehicle centre of gravity -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | m |   | ### EKF2_RNG_POS_Y (`FLOAT`) {#EKF2_RNG_POS_Y} @@ -19433,9 +21608,9 @@ Y position of range finder origin in body frame. Forward axis with origin relative to vehicle centre of gravity -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | m |   | ### EKF2_RNG_POS_Z (`FLOAT`) {#EKF2_RNG_POS_Z} @@ -19443,9 +21618,9 @@ Z position of range finder origin in body frame. Forward axis with origin relative to vehicle centre of gravity -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | m |   | ### EKF2_RNG_QLTY_T (`FLOAT`) {#EKF2_RNG_QLTY_T} @@ -19453,9 +21628,9 @@ Minumum range validity period. Minimum duration during which the reported range finder signal quality needs to be non-zero in order to be declared valid (s) -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 5 | | 1.0 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 5 | | 1.0 | s |   | ### EKF2_RNG_SFE (`FLOAT`) {#EKF2_RNG_SFE} @@ -19463,9 +21638,9 @@ Range finder range dependent noise scaler. Specifies the increase in range finder noise with range. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 0.2 | | 0.05 | m/m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 0.2 | | 0.05 | m/m |   | ### EKF2_SEL_ERR_RED (`FLOAT`) {#EKF2_SEL_ERR_RED} @@ -19473,9 +21648,9 @@ Selector error reduce threshold. EKF2 instances have to be better than the selected by at least this amount before their relative score can be reduced. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.2 | |   | ### EKF2_SEL_IMU_ACC (`FLOAT`) {#EKF2_SEL_IMU_ACC} @@ -19483,9 +21658,9 @@ Selector acceleration threshold. EKF2 selector acceleration error threshold for comparing accelerometers. Acceleration vector differences larger than this will result in accumulated velocity error. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | | | | 1.0 | m/s^2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | | | | 1.0 | m/s^2 |   | ### EKF2_SEL_IMU_ANG (`FLOAT`) {#EKF2_SEL_IMU_ANG} @@ -19493,9 +21668,9 @@ Selector angular threshold. EKF2 selector maximum accumulated angular error threshold for comparing gyros. Accumulated angular error larger than this will result in the sensor being declared faulty. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 15.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 15.0 | deg |   | ### EKF2_SEL_IMU_RAT (`FLOAT`) {#EKF2_SEL_IMU_RAT} @@ -19503,9 +21678,9 @@ Selector angular rate threshold. EKF2 selector angular rate error threshold for comparing gyros. Angular rate vector differences larger than this will result in accumulated angular error. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | | | | 7.0 | deg/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | | | | 7.0 | deg/s |   | ### EKF2_SEL_IMU_VEL (`FLOAT`) {#EKF2_SEL_IMU_VEL} @@ -19513,9 +21688,35 @@ Selector angular threshold. EKF2 selector maximum accumulated velocity threshold for comparing accelerometers. Accumulated velocity error larger than this will result in the sensor being declared faulty. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 2.0 | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 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 | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 8191 | | 8191 | |   | ### EKF2_SYNT_MAG_Z (`INT32`) {#EKF2_SYNT_MAG_Z} @@ -19523,9 +21724,9 @@ Enable synthetic magnetometer Z component measurement. Use for vehicles where the measured body Z magnetic field is subject to strong magnetic interference. For magnetic heading fusion the magnetometer Z measurement will be replaced by a synthetic value calculated using the knowledge of the 3D magnetic field vector at the location of the drone. Therefore, this parameter will only have an effect if the global position of the drone is known. For 3D mag fusion the magnetometer Z measurement will simply be ignored instead of fusing the synthetic value. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------------ | ---- | -|   | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------------ | ---- | --------- | +|   | | | | Disabled (0) | |   | ### EKF2_TAS_GATE (`FLOAT`) {#EKF2_TAS_GATE} @@ -19533,9 +21734,9 @@ Gate size for TAS fusion. Sets the number of standard deviations used by the innovation consistency test. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1.0 | | | 5.0 | SD | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1.0 | | | 5.0 | SD |   | ### EKF2_TAU_POS (`FLOAT`) {#EKF2_TAU_POS} @@ -19543,41 +21744,41 @@ Output predictor position time constant. Controls how tightly the output track the EKF states -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 1.0 | | 0.25 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 1.0 | | 0.25 | s |   | ### EKF2_TAU_VEL (`FLOAT`) {#EKF2_TAU_VEL} Time constant of the velocity output prediction and smoothing filter. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | 1.0 | | 0.25 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | 1.0 | | 0.25 | s |   | ### EKF2_TERR_GRAD (`FLOAT`) {#EKF2_TERR_GRAD} Magnitude of terrain gradient. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | | | 0.5 | m/m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | | | 0.5 | m/m |   | ### EKF2_TERR_NOISE (`FLOAT`) {#EKF2_TERR_NOISE} Terrain altitude process noise. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.5 | | | 5.0 | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.5 | | | 5.0 | m/s |   | ### EKF2_VEL_LIM (`FLOAT`) {#EKF2_VEL_LIM} Velocity limit. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | --------- | --------- | ------- | ---- | -|   | | 299792458 | | 100 | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | --------- | --------- | ------- | ---- | --------- | +|   | | 299792458 | | 100 | m/s |   | ### EKF2_WIND_NSD (`FLOAT`) {#EKF2_WIND_NSD} @@ -19585,9 +21786,9 @@ Process noise spectral density for wind velocity prediction. When unaided, the wind estimate uncertainty (1-sigma, in m/s) increases by this amount every second. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | -------------- | -|   | 0.0 | 1.0 | | 0.05 | m/s^2/sqrt(Hz) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | -------------- | --------- | +|   | 0.0 | 1.0 | | 0.05 | m/s^2/sqrt(Hz) |   | ## ESC @@ -19595,25 +21796,25 @@ When unaided, the wind estimate uncertainty (1-sigma, in m/s) increases by this Required esc bootloader version. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 65535 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 65535 | | 0 | |   | ### ESC_FW_VER (`INT32`) {#ESC_FW_VER} Required esc firmware version. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 65535 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 65535 | | 0 | |   | ### ESC_HW_VER (`INT32`) {#ESC_HW_VER} Required esc hardware version. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 65535 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 65535 | | 0 | |   | ## Events @@ -19627,9 +21828,9 @@ if the vehicle was previously armed and only if the vehicle had RC signal at some point. Particularly useful for locating crashed drones without a GPS sensor. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### EV_TSK_STAT_DIS (`INT32`) {#EV_TSK_STAT_DIS} @@ -19640,11 +21841,9 @@ LEDs. When enabled and if the vehicle supports it, LEDs will flash indicating various vehicle status changes. Currently PX4 has not implemented any specific status events. -- - -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ## FW Attitude Control @@ -19654,9 +21853,9 @@ Maximum manual pitch angle. Applies to both directions in all manual modes with attitude stabilization but without altitude control -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 90.0 | 0.5 | 30.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 90.0 | 0.5 | 30.0 | deg |   | ### FW_MAN_R_MAX (`FLOAT`) {#FW_MAN_R_MAX} @@ -19664,9 +21863,9 @@ Maximum manual roll angle. Applies to both directions in all manual modes with attitude stabilization -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 90.0 | 0.5 | 45.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 90.0 | 0.5 | 45.0 | deg |   | ### FW_MAN_YR_MAX (`FLOAT`) {#FW_MAN_YR_MAX} @@ -19675,9 +21874,9 @@ Maximum manually added yaw rate. This is the maximally added yaw rate setpoint from the yaw stick in any attitude controlled flight mode. It is added to the yaw rate setpoint generated by the controller for turn coordination. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 0 | | 0.5 | 30. | deg/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | 0 | | 0.5 | 30.0 | deg/s |   | ### FW_PSP_OFF (`FLOAT`) {#FW_PSP_OFF} @@ -19687,25 +21886,25 @@ An airframe specific offset of the pitch setpoint in degrees, the value is added to the pitch setpoint and should correspond to the pitch at typical cruise speed of the airframe. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -90.0 | 90.0 | 0.5 | 0.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -90.0 | 90.0 | 0.5 | 0.0 | deg |   | ### FW_P_RMAX_NEG (`FLOAT`) {#FW_P_RMAX_NEG} Maximum negative / down pitch rate setpoint. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 0.0 | 180 | 0.5 | 60.0 | deg/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | 0.0 | 180 | 0.5 | 60.0 | deg/s |   | ### FW_P_RMAX_POS (`FLOAT`) {#FW_P_RMAX_POS} Maximum positive / up pitch rate setpoint. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 0.0 | 180 | 0.5 | 60.0 | deg/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | 0.0 | 180 | 0.5 | 60.0 | deg/s |   | ### FW_P_TC (`FLOAT`) {#FW_P_TC} @@ -19714,17 +21913,17 @@ Attitude pitch time constant. This defines the latency between a pitch step input and the achieved setpoint (inverse to a P gain). Smaller systems may require smaller values. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.2 | 1.0 | 0.05 | 0.4 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.2 | 1.0 | 0.05 | 0.4 | s |   | ### FW_R_RMAX (`FLOAT`) {#FW_R_RMAX} Maximum roll rate setpoint. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 0.0 | 180 | 0.5 | 70.0 | deg/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | 0.0 | 180 | 0.5 | 70.0 | deg/s |   | ### FW_R_TC (`FLOAT`) {#FW_R_TC} @@ -19733,17 +21932,17 @@ Attitude Roll Time Constant. This defines the latency between a roll step input and the achieved setpoint (inverse to a P gain). Smaller systems may require smaller values. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.2 | 1.0 | 0.05 | 0.4 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.2 | 1.0 | 0.05 | 0.4 | s |   | ### FW_WR_FF (`FLOAT`) {#FW_WR_FF} Wheel steering rate feed forward. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ------- | -|   | 0.0 | 10 | 0.05 | 0.2 | %/rad/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ------- | --------- | +|   | 0.0 | 10 | 0.05 | 0.2 | %/rad/s |   | ### FW_WR_I (`FLOAT`) {#FW_WR_I} @@ -19752,17 +21951,17 @@ Wheel steering rate integrator gain. This gain defines how much control response will result out of a steady state error. It trims any constant error. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 0.0 | 10 | 0.005 | 0.1 | %/rad | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | 0.0 | 10 | 0.005 | 0.1 | %/rad |   | ### FW_WR_IMAX (`FLOAT`) {#FW_WR_IMAX} Wheel steering rate integrator limit. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 1.0 | 0.05 | 0.4 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 1.0 | 0.05 | 0.4 | |   | ### FW_WR_P (`FLOAT`) {#FW_WR_P} @@ -19771,9 +21970,9 @@ Wheel steering rate proportional gain. This defines how much the wheel steering input will be commanded depending on the current body angular rate error. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ------- | -|   | 0.0 | 10 | 0.005 | 0.5 | %/rad/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ------- | --------- | +|   | 0.0 | 10 | 0.005 | 0.5 | %/rad/s |   | ### FW_W_EN (`INT32`) {#FW_W_EN} @@ -19782,9 +21981,9 @@ Enable wheel steering controller. Only enabled during automatic runway takeoff and landing. In all manual modes the wheel is directly controlled with yaw stick. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------------ | ---- | -|   | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------------ | ---- | --------- | +|   | | | | Disabled (0) | |   | ### FW_W_RMAX (`FLOAT`) {#FW_W_RMAX} @@ -19793,17 +21992,17 @@ Maximum wheel steering rate. This limits the maximum wheel steering rate the controller will output (in degrees per second). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 0.0 | 90.0 | 0.5 | 30.0 | deg/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | 0.0 | 90.0 | 0.5 | 30.0 | deg/s |   | ### FW_Y_RMAX (`FLOAT`) {#FW_Y_RMAX} Maximum yaw rate setpoint. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 0.0 | 180 | 0.5 | 50.0 | deg/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | 0.0 | 180 | 0.5 | 50.0 | deg/s |   | ## FW Auto Landing @@ -19814,9 +22013,9 @@ Flaps setting during landing. Sets a fraction of full flaps during landing. Also applies to flaperons if enabled in the mixer/allocation. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 1.0 | 0.01 | 1.0 | norm | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 1.0 | 0.01 | 1.0 | norm |   | ### FW_LND_ABORT (`INT32`) {#FW_LND_ABORT} @@ -19825,8 +22024,10 @@ Bit mask to set the automatic landing abort conditions. Terrain estimation: bit 0: Abort if terrain is not found bit 1: Abort if terrain times out (after a first successful measurement) + The last estimate is always used as ground, whether the last valid measurement or the land waypoint, depending on the selected abort criteria, until an abort condition is entered. If FW_LND_USETER == 0, these bits are ignored. + TODO: Extend automatic abort conditions e.g. glide slope tracking error (horizontal and vertical) @@ -19835,20 +22036,21 @@ e.g. glide slope tracking error (horizontal and vertical) - `0`: Abort if terrain is not found (only applies to mission landings) - `1`: Abort if terrain times out (after a first successful measurement) -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 3 | | 3 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 3 | | 3 | |   | ### FW_LND_AIRSPD (`FLOAT`) {#FW_LND_AIRSPD} Landing airspeed. The calibrated airspeed setpoint during landing. + If set <= 0, landing airspeed = FW_AIRSPD_MIN by default. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1.0 | | 0.1 | -1. | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1.0 | | 0.1 | -1.0 | m/s |   | ### FW_LND_ANG (`FLOAT`) {#FW_LND_ANG} @@ -19857,9 +22059,9 @@ Maximum landing slope angle. Typically the desired landing slope angle when landing configuration (flaps, airspeed) is enabled. Set this value within the vehicle's performance limits. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1.0 | 45.0 | 0.5 | 5.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1.0 | 45.0 | 0.5 | 5.0 | deg |   | ### FW_LND_EARLYCFG (`INT32`) {#FW_LND_EARLYCFG} @@ -19869,9 +22071,9 @@ Allows to deploy the landing configuration (flaps, landing airspeed, etc.) alrea the loiter-down waypoint before the final approach. Otherwise is enabled only in the final approach. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------------ | ---- | -|   | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------------ | ---- | --------- | +|   | | | | Disabled (0) | |   | ### FW_LND_FLALT (`FLOAT`) {#FW_LND_FLALT} @@ -19879,9 +22081,9 @@ Landing flare altitude (relative to landing altitude). NOTE: max(FW_LND_FLALT, FW_LND_FL_TIME \* |z-velocity|) is taken as the flare altitude -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | | 0.5 | 0.5 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | | 0.5 | 0.5 | m |   | ### FW_LND_FL_PMAX (`FLOAT`) {#FW_LND_FL_PMAX} @@ -19889,9 +22091,9 @@ Flare, maximum pitch. Maximum pitch during landing flare. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 45.0 | 0.5 | 15.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 45.0 | 0.5 | 15.0 | deg |   | ### FW_LND_FL_PMIN (`FLOAT`) {#FW_LND_FL_PMIN} @@ -19899,9 +22101,9 @@ Flare, minimum pitch. Minimum pitch during landing flare. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -5 | 15.0 | 0.5 | 2.5 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -5 | 15.0 | 0.5 | 2.5 | deg |   | ### FW_LND_FL_SINK (`FLOAT`) {#FW_LND_FL_SINK} @@ -19909,9 +22111,9 @@ Landing flare sink rate. TECS will attempt to control the aircraft to this sink rate via pitch angle (throttle killed during flare) -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 2 | 0.1 | 0.25 | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 2 | 0.1 | 0.25 | m/s |   | ### FW_LND_FL_TIME (`FLOAT`) {#FW_LND_FL_TIME} @@ -19919,11 +22121,12 @@ Landing flare time. Multiplied by the descent rate to calculate a dynamic altitude at which to trigger the flare. + NOTE: max(FW_LND_FLALT, FW_LND_FL_TIME \* descent rate) is taken as the flare altitude -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 5.0 | 0.1 | 1.0 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 5.0 | 0.1 | 1.0 | s |   | ### FW_LND_NUDGE (`INT32`) {#FW_LND_NUDGE} @@ -19931,6 +22134,7 @@ Landing touchdown nudging option. Approach angle nudging: shifts the touchdown point laterally while keeping the approach entrance point constant Approach path nudging: shifts the touchdown point laterally along with the entire approach path + This is useful for manually adjusting the landing point in real time when map or GNSS errors cause an offset from the desired landing vector. Nudging is done with yaw stick, constrained to FW_LND_TD_OFF (in meters) and the direction is relative to the vehicle heading (stick deflection to the right = land point moves to the right as seen by the vehicle). @@ -19941,17 +22145,17 @@ relative to the vehicle heading (stick deflection to the right = land point move - `1`: Nudge approach angle - `2`: Nudge approach path -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 2 | | 2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 2 | | 2 | |   | ### FW_LND_TD_OFF (`FLOAT`) {#FW_LND_TD_OFF} Maximum lateral position offset for the touchdown point. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 10.0 | 1 | 3.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 10.0 | 1 | 3.0 | m |   | ### FW_LND_TD_TIME (`FLOAT`) {#FW_LND_TD_TIME} @@ -19960,12 +22164,14 @@ Landing touchdown time (since flare start). This is the time after the start of flaring that we expect the vehicle to touch the runway. At this time, a 0.5s clamp down ramp will engage, constraining the pitch setpoint to RWTO_PSP. If enabled, ensure that RWTO_PSP is configured appropriately for full gear contact on ground roll. + Set to -1.0 to disable touchdown clamping. E.g. it may not be desirable to clamp on belly landings. + The touchdown time will be constrained to be greater than or equal to the flare time (FW_LND_FL_TIME). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1.0 | 5.0 | 0.1 | -1.0 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1.0 | 5.0 | 0.1 | -1.0 | s |   | ### FW_LND_THRTC_SC (`FLOAT`) {#FW_LND_THRTC_SC} @@ -19973,17 +22179,19 @@ Altitude time constant factor for landing and low-height flight. The TECS altitude time constant (FW_T_ALT_TC) is multiplied by this value. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.2 | 1.0 | 0.1 | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.2 | 1.0 | 0.1 | 1.0 | |   | ### FW_LND_USETER (`INT32`) {#FW_LND_USETER} Use terrain estimation during landing. This is critical for detecting when to flare, and should be enabled if possible. + If enabled and no measurement is found within a given timeout, the landing waypoint altitude will be used OR the landing will be aborted, depending on the criteria set in FW_LND_ABORT. + If disabled, FW_LND_ABORT terrain based criteria are ignored. **Values:** @@ -19992,17 +22200,17 @@ If disabled, FW_LND_ABORT terrain based criteria are ignored. - `1`: Use the terrain estimate to trigger the flare (only) - `2`: Calculate landing glide slope relative to the terrain estimate -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 2 | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 2 | | 1 | |   | ### FW_SPOILERS_LND (`FLOAT`) {#FW_SPOILERS_LND} Spoiler landing setting. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 1.0 | 0.01 | 0. | norm | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 1.0 | 0.01 | 0.0 | norm |   | ## FW Auto Takeoff @@ -20013,29 +22221,29 @@ Flaps setting during take-off. Sets a fraction of full flaps during take-off. Also applies to flaperons if enabled in the mixer/allocation. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 1.0 | 0.01 | 0.0 | norm | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 1.0 | 0.01 | 0.0 | norm |   | ### FW_LAUN_AC_T (`FLOAT`) {#FW_LAUN_AC_T} Trigger time. -Launch is detected when acceleration in body forward direction is above FW_LAUN_AC_THLD for FW_LAUN_AC_T seconds. +Launch is detected when the norm of body acceleration is above FW_LAUN_AC_THLD for FW_LAUN_AC_T seconds. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 5.0 | 0.05 | 0.05 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 5.0 | 0.05 | 0.05 | s |   | ### FW_LAUN_AC_THLD (`FLOAT`) {#FW_LAUN_AC_THLD} Trigger acceleration threshold. -Launch is detected when acceleration in body forward direction is above FW_LAUN_AC_THLD for FW_LAUN_AC_T seconds. +Launch is detected when the norm of body acceleration is above FW_LAUN_AC_THLD for FW_LAUN_AC_T seconds. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 0 | | 0.5 | 30.0 | m/s^2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | 0 | | 0.5 | 30.0 | m/s^2 |   | ### FW_LAUN_CS_LK_DY (`FLOAT`) {#FW_LAUN_CS_LK_DY} @@ -20045,9 +22253,9 @@ Locks control surfaces during pre-launch (armed) and until this time since launc Only affects control surfaces that have corresponding flag set, and not active for runway takeoff. Set to 0 to disable any surface locking after arming. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | | 0.1 | 0. | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | | 0.1 | 0.0 | s |   | ### FW_LAUN_DETCN_ON (`INT32`) {#FW_LAUN_DETCN_ON} @@ -20056,9 +22264,9 @@ Fixed-wing launch detection. Enables automatic launch detection based on measured acceleration. Use for hand- or catapult-launched vehicles. Not compatible with runway takeoff. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------------ | ---- | -|   | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------------ | ---- | --------- | +|   | | | | Disabled (0) | |   | ### FW_LAUN_MOT_DEL (`FLOAT`) {#FW_LAUN_MOT_DEL} @@ -20066,28 +22274,29 @@ Motor delay. Start the motor(s) this amount of seconds after launch is detected. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 10.0 | 0.5 | 0.0 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 10.0 | 0.5 | 0.0 | s |   | ### FW_TKO_AIRSPD (`FLOAT`) {#FW_TKO_AIRSPD} Takeoff Airspeed. The calibrated airspeed setpoint during the takeoff climbout. + If set <= 0, FW_AIRSPD_MIN will be set by default. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1.0 | | 0.1 | -1.0 | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1.0 | | 0.1 | -1.0 | m/s |   | ### FW_TKO_PITCH_MIN (`FLOAT`) {#FW_TKO_PITCH_MIN} Minimum pitch during takeoff. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -5.0 | 80.0 | 0.5 | 10.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -5.0 | 80.0 | 0.5 | 10.0 | deg |   | ## FW General @@ -20099,9 +22308,9 @@ The time the system should do open loop loiter and wait for GPS recovery before it starts descending. Set to 0 to disable. Roll angle is set to FW_GPSF_R. Does only apply for fixed-wing vehicles or VTOLs with NAV_FORCE_VT set to 0. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | | | 30 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | | | 30 | s |   | ### FW_GPSF_R (`FLOAT`) {#FW_GPSF_R} @@ -20109,9 +22318,9 @@ GPS failure fixed roll angle. Roll angle in GPS failure loiter mode. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 60.0 | 0.5 | 15.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 60.0 | 0.5 | 15.0 | deg |   | ### FW_POS_STK_CONF (`INT32`) {#FW_POS_STK_CONF} @@ -20124,9 +22333,9 @@ Applies in manual Position and Altitude flight modes. - `0`: Alternative stick configuration (height rate on throttle stick, airspeed on pitch stick) - `1`: Enable airspeed setpoint via sticks in altitude and position flight mode -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 3 | | 2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 3 | | 2 | |   | ### FW_P_LIM_MAX (`FLOAT`) {#FW_P_LIM_MAX} @@ -20134,9 +22343,9 @@ Maximum pitch angle setpoint. Applies in any altitude controlled flight mode. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 80.0 | 0.5 | 30.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 80.0 | 0.5 | 30.0 | deg |   | ### FW_P_LIM_MIN (`FLOAT`) {#FW_P_LIM_MIN} @@ -20144,9 +22353,9 @@ Minimum pitch angle setpoint. Applies in any altitude controlled flight mode. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -60.0 | 0.0 | 0.5 | -30.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -60.0 | 0.0 | 0.5 | -30.0 | deg |   | ### FW_R_LIM (`FLOAT`) {#FW_R_LIM} @@ -20154,9 +22363,9 @@ Maximum roll angle setpoint. Applies in any altitude controlled flight mode. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 35.0 | 75.0 | 0.5 | 50.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 35.0 | 75.0 | 0.5 | 50.0 | deg |   | ### FW_THR_IDLE (`FLOAT`) {#FW_THR_IDLE} @@ -20164,9 +22373,9 @@ Idle throttle. This is the minimum throttle while on the ground ("landed") in auto modes. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 1.0 | 0.01 | 0.0 | norm | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 1.0 | 0.01 | 0.0 | norm |   | ### FW_THR_MAX (`FLOAT`) {#FW_THR_MAX} @@ -20175,9 +22384,9 @@ Throttle limit max. Applies in any altitude controlled flight mode. Should be set accordingly to achieve FW_T_CLMB_MAX. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 1.0 | 0.01 | 1.0 | norm | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 1.0 | 0.01 | 1.0 | norm |   | ### FW_THR_MIN (`FLOAT`) {#FW_THR_MIN} @@ -20187,9 +22396,9 @@ Applies in any altitude controlled flight mode. Usually set to 0 but can be increased to prevent the motor from stopping when descending, which can increase achievable descent rates. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 1.0 | 0.01 | 0.0 | norm | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 1.0 | 0.01 | 0.0 | norm |   | ### FW_T_CLMB_R_SP (`FLOAT`) {#FW_T_CLMB_R_SP} @@ -20198,9 +22407,9 @@ Default target climbrate. In auto modes: default climb rate output by controller to achieve altitude setpoints. In manual modes: maximum climb rate setpoint. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | | 0.01 | 3.0 | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | | 0.01 | 3.0 | m/s |   | ### FW_T_SINK_R_SP (`FLOAT`) {#FW_T_SINK_R_SP} @@ -20209,9 +22418,9 @@ Default target sinkrate. In auto modes: default sink rate output by controller to achieve altitude setpoints. In manual modes: maximum sink rate setpoint. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | | 0.01 | 2.0 | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | | 0.01 | 2.0 | m/s |   | ### FW_T_SPDWEIGHT (`FLOAT`) {#FW_T_SPDWEIGHT} @@ -20222,9 +22431,9 @@ applies to speed vs height errors. 0 -> control height only 2 -> control speed only (gliders) -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 2.0 | 1.0 | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 2.0 | 1.0 | 1.0 | |   | ### FW_WING_HEIGHT (`FLOAT`) {#FW_WING_HEIGHT} @@ -20233,9 +22442,9 @@ Height (AGL) of the wings when the aircraft is on the ground. This is used to constrain a minimum altitude below which we keep wings level to avoid wing tip strike. It's safer to give a slight margin here (> 0m) -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | | 1 | 0.5 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | | 1 | 0.5 | m |   | ### FW_WING_SPAN (`FLOAT`) {#FW_WING_SPAN} @@ -20243,9 +22452,9 @@ The aircraft's wing span (length from tip to tip). This is used for limiting the roll setpoint near the ground. (if multiple wings, take the longest span) -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | | 0.1 | 3.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | | 0.1 | 3.0 | m |   | ## FW Lateral Control @@ -20256,9 +22465,9 @@ Path navigation roll slew rate limit. Maximum change in roll angle setpoint per second. Applied in all Auto modes, plus manual Position & Altitude modes. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 0 | | 1 | 90.0 | deg/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | 0 | | 1 | 90.0 | deg/s |   | ## FW Longitudinal Control @@ -20269,9 +22478,9 @@ Minimum groundspeed. The controller will increase the commanded airspeed to maintain this minimum groundspeed to the next waypoint. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 40 | 0.5 | 5.0 | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 40 | 0.5 | 5.0 | m/s |   | ### FW_THR_SLEW_MAX (`FLOAT`) {#FW_THR_SLEW_MAX} @@ -20279,17 +22488,17 @@ Throttle max slew rate. Maximum slew rate for the commanded throttle -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 1.0 | 0.01 | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 1.0 | 0.01 | 0.0 | |   | ### FW_T_ALT_TC (`FLOAT`) {#FW_T_ALT_TC} Altitude error time constant. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 2.0 | | 0.5 | 5.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 2.0 | | 0.5 | 5.0 | |   | ### FW_T_F_ALT_ERR (`FLOAT`) {#FW_T_F_ALT_ERR} @@ -20298,17 +22507,17 @@ Fast descend: minimum altitude error. Minimum altitude error needed to descend with max airspeed and minimal throttle. A negative value disables fast descend. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1.0 | | | -1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1.0 | | | -1.0 | |   | ### FW_T_HRATE_FF (`FLOAT`) {#FW_T_HRATE_FF} Height rate feed forward. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 1.0 | 0.05 | 0.3 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 1.0 | 0.05 | 0.5 | |   | ### FW_T_I_GAIN_PIT (`FLOAT`) {#FW_T_I_GAIN_PIT} @@ -20317,17 +22526,17 @@ Integrator gain pitch. Increase it to trim out speed and height offsets faster, with the downside of possible overshoots and oscillations. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 2.0 | 0.05 | 0.1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 2.0 | 0.05 | 0.1 | |   | ### FW_T_PTCH_DAMP (`FLOAT`) {#FW_T_PTCH_DAMP} Pitch damping gain. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 2.0 | 0.1 | 0.1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 2.0 | 0.1 | 0.1 | |   | ### FW_T_RLL2THR (`FLOAT`) {#FW_T_RLL2THR} @@ -20337,56 +22546,25 @@ Is used to compensate for the additional drag created by turning. Increase this gain if the aircraft initially loses energy in turns and reduce if the aircraft initially gains energy in turns. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 20.0 | 0.5 | 15.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 20.0 | 0.5 | 15.0 | |   | ### FW_T_SEB_R_FF (`FLOAT`) {#FW_T_SEB_R_FF} Specific total energy balance rate feedforward gain. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.5 | 3 | 0.01 | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.5 | 3 | 0.01 | 1.0 | |   | ### FW_T_SINK_MAX (`FLOAT`) {#FW_T_SINK_MAX} Maximum descent rate. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1.0 | 15.0 | 0.5 | 5.0 | m/s | - -### FW_T_SPD_DEV_STD (`FLOAT`) {#FW_T_SPD_DEV_STD} - -Airspeed rate measurement standard deviation. - -For the airspeed filter in TECS. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 0.01 | 10.0 | 0.1 | 0.2 | m/s^2 | - -### FW_T_SPD_PRC_STD (`FLOAT`) {#FW_T_SPD_PRC_STD} - -Process noise standard deviation for the airspeed rate. - -This is defining the noise in the airspeed rate for the constant airspeed rate model -of the TECS airspeed filter. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 0.01 | 10.0 | 0.1 | 0.2 | m/s^2 | - -### FW_T_SPD_STD (`FLOAT`) {#FW_T_SPD_STD} - -Airspeed measurement standard deviation. - -For the airspeed filter in TECS. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.01 | 10.0 | 0.1 | 0.07 | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1.0 | 15.0 | 0.5 | 5.0 | m/s |   | ### FW_T_STE_R_TC (`FLOAT`) {#FW_T_STE_R_TC} @@ -20394,17 +22572,17 @@ Specific total energy rate first order filter time constant. This filter is applied to the specific total energy rate used for throttle damping. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 2 | 0.01 | 0.4 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 2 | 0.01 | 0.4 | |   | ### FW_T_TAS_TC (`FLOAT`) {#FW_T_TAS_TC} True airspeed error time constant. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 2.0 | | 0.5 | 5.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 2.0 | | 0.5 | 5.0 | |   | ### FW_T_THR_DAMPING (`FLOAT`) {#FW_T_THR_DAMPING} @@ -20412,9 +22590,9 @@ Throttle damping factor. This is the damping gain for the throttle demand loop. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 1.0 | 0.01 | 0.05 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 1.0 | 0.01 | 0.05 | |   | ### FW_T_THR_INTEG (`FLOAT`) {#FW_T_THR_INTEG} @@ -20423,9 +22601,9 @@ Integrator gain throttle. Increase it to trim out speed and height offsets faster, with the downside of possible overshoots and oscillations. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 1.0 | 0.005 | 0.02 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 1.0 | 0.005 | 0.02 | |   | ### FW_T_THR_LOW_HGT (`FLOAT`) {#FW_T_THR_LOW_HGT} @@ -20435,11 +22613,12 @@ Height above ground threshold below which tighter altitude tracking gets enabled (see FW_LND_THRTC_SC). Below this height, TECS smoothly (1 sec / sec) transitions the altitude tracking time constant from FW_T_ALT_TC to FW_LND_THRTC_SC\*FW_T_ALT_TC. + -1 to disable. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | | 1 | -1. | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | | 1 | -1.0 | m |   | ### FW_T_VERT_ACC (`FLOAT`) {#FW_T_VERT_ACC} @@ -20449,9 +22628,9 @@ This is the maximum vertical acceleration either up or down that the controller will use to correct speed or height errors. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 1.0 | 10.0 | 0.5 | 7.0 | m/s^2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | 1.0 | 10.0 | 0.5 | 7.0 | m/s^2 |   | ### FW_WIND_ARSP_SC (`FLOAT`) {#FW_WIND_ARSP_SC} @@ -20461,9 +22640,9 @@ Multiplying this factor with the current absolute wind estimate gives the airspe added to the minimum airspeed setpoint limit. This helps to make the system more robust against disturbances (turbulence) in high wind. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | | 0.01 | 0. | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | | 0.01 | 0.0 | |   | ## FW NPFG Control @@ -20473,9 +22652,9 @@ NPFG damping ratio. Damping ratio of NPFG control law. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.10 | 1.00 | 0.01 | 0.7 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 1.0 | 0.01 | 0.7 | |   | ### NPFG_LB_PERIOD (`INT32`) {#NPFG_LB_PERIOD} @@ -20484,9 +22663,9 @@ Enable automatic lower bound on the NPFG period. Avoids limit cycling from a too aggressively tuned period/damping combination. If false, also disables upper bound NPFG_PERIOD_UB. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ----------- | ---- | -|   | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ----------- | ---- | --------- | +|   | | | | Enabled (1) | |   | ### NPFG_PERIOD (`FLOAT`) {#NPFG_PERIOD} @@ -20494,9 +22673,9 @@ NPFG period. Period of NPFG control law. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1.0 | 100.0 | 0.1 | 10.0 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1.0 | 100.0 | 0.1 | 10.0 | s |   | ### NPFG_PERIOD_SF (`FLOAT`) {#NPFG_PERIOD_SF} @@ -20505,9 +22684,9 @@ Period safety factor. Multiplied by period for conservative minimum period bounding (when period lower bounding is enabled). 1.0 bounds at marginal stability. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1.0 | 10.0 | 0.1 | 1.5 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1.0 | 10.0 | 0.1 | 1.5 | |   | ### NPFG_ROLL_TC (`FLOAT`) {#NPFG_ROLL_TC} @@ -20516,9 +22695,9 @@ Roll time constant. Time constant of roll controller command / response, modeled as first order delay. Used to determine lower period bound. Setting zero disables automatic period bounding. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.00 | 2.00 | 0.05 | 0.5 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 2.0 | 0.05 | 0.5 | s |   | ### NPFG_SW_DST_MLT (`FLOAT`) {#NPFG_SW_DST_MLT} @@ -20527,9 +22706,9 @@ NPFG switch distance multiplier. Multiplied by the track error boundary to determine when the aircraft switches to the next waypoint and/or path segment. Should be less than 1. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 1.0 | 0.01 | 0.32 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 1.0 | 0.01 | 0.32 | |   | ### NPFG_UB_PERIOD (`INT32`) {#NPFG_UB_PERIOD} @@ -20537,9 +22716,9 @@ Enable automatic upper bound on the NPFG period. Adapts period to maintain track keeping in variable winds and path curvature. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ----------- | ---- | -|   | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ----------- | ---- | --------- | +|   | | | | Enabled (1) | |   | ## FW Performance @@ -20549,9 +22728,9 @@ Airspeed scale with full flaps. Factor applied to the minimum and stall airspeed when flaps are fully deployed. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.5 | 1 | 0.01 | 1. | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.5 | 1 | 0.01 | 1.0 | |   | ### FW_AIRSPD_MAX (`FLOAT`) {#FW_AIRSPD_MAX} @@ -20559,9 +22738,9 @@ Maximum Airspeed (CAS). The maximal airspeed (calibrated airspeed) the user is able to command. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.5 | | 0.5 | 20.0 | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.5 | | 0.5 | 20.0 | m/s |   | ### FW_AIRSPD_MIN (`FLOAT`) {#FW_AIRSPD_MIN} @@ -20575,9 +22754,9 @@ with some margin between the stall speed and minimum airspeed. This value corresponds to the desired minimum speed with the default load factor (level flight, default weight), and is automatically adpated to the current load factor (calculated from roll setpoint and WEIGHT_GROSS/WEIGHT_BASE). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.5 | | 0.5 | 10.0 | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.5 | | 0.5 | 10.0 | m/s |   | ### FW_AIRSPD_STALL (`FLOAT`) {#FW_AIRSPD_STALL} @@ -20587,9 +22766,9 @@ The stall airspeed (calibrated airspeed) of the vehicle. It is used for airspeed sensor failure detection and for the control surface scaling airspeed limits. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.5 | | 0.5 | 7.0 | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.5 | | 0.5 | 7.0 | m/s |   | ### FW_AIRSPD_TRIM (`FLOAT`) {#FW_AIRSPD_TRIM} @@ -20599,9 +22778,9 @@ The trim CAS (calibrated airspeed) of the vehicle. If an airspeed controller is this is the default airspeed setpoint that the controller will try to achieve. This value corresponds to the trim airspeed with the default load factor (level flight, default weight). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.5 | | 0.5 | 15.0 | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.5 | | 0.5 | 15.0 | m/s |   | ### FW_SERVICE_CEIL (`FLOAT`) {#FW_SERVICE_CEIL} @@ -20611,31 +22790,33 @@ Altitude in standard atmosphere at which the vehicle in normal configuration (WE 0.5m/s at maximum throttle (FW_THR_MAX). Used to compensate for air density in FW_T_CLMB_MAX. Set negative to disable. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1.0 | | 1.0 | -1.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1.0 | | 1.0 | -1.0 | m |   | ### FW_THR_ASPD_MAX (`FLOAT`) {#FW_THR_ASPD_MAX} Throttle at max airspeed. Required throttle (at sea level, standard atmosphere) for level flight at maximum airspeed FW_AIRSPD_MAX + Set to 0 to disable mapping of airspeed to trim throttle. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1 | 0.01 | 0. | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1 | 0.01 | 0.0 | |   | ### FW_THR_ASPD_MIN (`FLOAT`) {#FW_THR_ASPD_MIN} Throttle at min airspeed. Required throttle (at sea level, standard atmosphere) for level flight at minimum airspeed FW_AIRSPD_MIN + Set to 0 to disable mapping of airspeed to trim throttle below FW_AIRSPD_TRIM. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1 | 0.01 | 0. | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1 | 0.01 | 0.0 | |   | ### FW_THR_TRIM (`FLOAT`) {#FW_THR_TRIM} @@ -20643,9 +22824,9 @@ Trim throttle. Required throttle (at sea level, standard atmosphere) for level flight at FW_AIRSPD_TRIM -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 1.0 | 0.01 | 0.6 | norm | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 1.0 | 0.01 | 0.6 | norm |   | ### FW_T_CLMB_MAX (`FLOAT`) {#FW_T_CLMB_MAX} @@ -20656,9 +22837,9 @@ the throttle set to FW_THR_MAX and the airspeed set to the trim value. For electric aircraft make sure this number can be achieved towards the end of flight when the battery voltage has reduced. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1.0 | | 0.5 | 5.0 | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1.0 | | 0.5 | 5.0 | m/s |   | ### FW_T_SINK_MIN (`FLOAT`) {#FW_T_SINK_MIN} @@ -20668,9 +22849,9 @@ This is the minimum calibrated sink rate of the aircraft with the throttle set to THR_MIN and flown at the same airspeed as used to measure FW_T_CLMB_MAX. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1.0 | | 0.5 | 2.0 | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1.0 | | 0.5 | 2.0 | m/s |   | ### WEIGHT_BASE (`FLOAT`) {#WEIGHT_BASE} @@ -20679,9 +22860,9 @@ Vehicle base weight. This is the weight of the vehicle at which it's performance limits were derived. A zero or negative value disables trim throttle and minimum airspeed compensation based on weight. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | 0.5 | -1.0 | kg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | 0.5 | -1.0 | kg |   | ### WEIGHT_GROSS (`FLOAT`) {#WEIGHT_GROSS} @@ -20691,9 +22872,9 @@ This is the actual weight of the vehicle at any time. This value will differ fro or removed from the base weight. Examples are the addition of payloads or larger batteries. A zero or negative value disables trim throttle and minimum airspeed compensation based on weight. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | 0.1 | -1.0 | kg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | 0.1 | -1.0 | kg |   | ## FW Rate Control @@ -20701,9 +22882,9 @@ disables trim throttle and minimum airspeed compensation based on weight. Acro body roll max rate setpoint. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 10 | 720 | | 90 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 10 | 720 | | 90 | deg |   | ### FW_ACRO_YAW_EN (`INT32`) {#FW_ACRO_YAW_EN} @@ -20714,25 +22895,25 @@ Otherwise the pilot commands directly the yaw actuator. It is disabled by default because an active yaw rate controller will fight against the natural turn coordination of the plane. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------------ | ---- | -|   | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------------ | ---- | --------- | +|   | | | | Disabled (0) | |   | ### FW_ACRO_Y_MAX (`FLOAT`) {#FW_ACRO_Y_MAX} Acro body pitch max rate setpoint. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 10 | 720 | | 90 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 10 | 720 | | 90 | deg |   | ### FW_ACRO_Z_MAX (`FLOAT`) {#FW_ACRO_Z_MAX} Acro body yaw max rate setpoint. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 10 | 720 | | 45 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 10 | 720 | | 45 | deg |   | ### FW_ARSP_SCALE_EN (`INT32`) {#FW_ARSP_SCALE_EN} @@ -20741,12 +22922,13 @@ Enable airspeed scaling. This enables a logic that automatically adjusts the output of the rate controller to take into account the real torque produced by an aerodynamic control surface given the current deviation from the trim airspeed (FW_AIRSPD_TRIM). + Enable when using aerodynamic control surfaces (e.g.: plane) Disable when using rotor wings (e.g.: autogyro) -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ----------- | ---- | -|   | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ----------- | ---- | --------- | +|   | | | | Enabled (1) | |   | ### FW_BAT_SCALE_EN (`INT32`) {#FW_BAT_SCALE_EN} @@ -20755,9 +22937,9 @@ Enable throttle scale by battery level. This compensates for voltage drop of the battery over time by attempting to normalize performance across the operating range of the battery. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------------ | ---- | -|   | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------------ | ---- | --------- | +|   | | | | Disabled (0) | |   | ### FW_DTRIM_P_VMAX (`FLOAT`) {#FW_DTRIM_P_VMAX} @@ -20765,9 +22947,9 @@ Pitch trim increment at maximum airspeed. This increment is added to TRIM_PITCH when airspeed is FW_AIRSPD_MAX. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -0.5 | 0.5 | 0.01 | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -0.5 | 0.5 | 0.01 | 0.0 | |   | ### FW_DTRIM_P_VMIN (`FLOAT`) {#FW_DTRIM_P_VMIN} @@ -20775,9 +22957,9 @@ Pitch trim increment at minimum airspeed. This increment is added to TRIM_PITCH when airspeed is FW_AIRSPD_MIN. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -0.5 | 0.5 | 0.01 | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -0.5 | 0.5 | 0.01 | 0.0 | |   | ### FW_DTRIM_R_VMAX (`FLOAT`) {#FW_DTRIM_R_VMAX} @@ -20785,9 +22967,9 @@ Roll trim increment at maximum airspeed. This increment is added to TRIM_ROLL when airspeed is FW_AIRSPD_MAX. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -0.5 | 0.5 | 0.01 | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -0.5 | 0.5 | 0.01 | 0.0 | |   | ### FW_DTRIM_R_VMIN (`FLOAT`) {#FW_DTRIM_R_VMIN} @@ -20795,9 +22977,9 @@ Roll trim increment at minimum airspeed. This increment is added to TRIM_ROLL when airspeed is FW_AIRSPD_MIN. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -0.5 | 0.5 | 0.01 | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -0.5 | 0.5 | 0.01 | 0.0 | |   | ### FW_DTRIM_Y_VMAX (`FLOAT`) {#FW_DTRIM_Y_VMAX} @@ -20805,9 +22987,9 @@ Yaw trim increment at maximum airspeed. This increment is added to TRIM_YAW when airspeed is FW_AIRSPD_MAX. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -0.5 | 0.5 | 0.01 | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -0.5 | 0.5 | 0.01 | 0.0 | |   | ### FW_DTRIM_Y_VMIN (`FLOAT`) {#FW_DTRIM_Y_VMIN} @@ -20815,17 +22997,37 @@ Yaw trim increment at minimum airspeed. This increment is added to TRIM_YAW when airspeed is FW_AIRSPD_MIN. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -0.5 | 0.5 | 0.01 | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -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 | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### FW_GC_EN (`INT32`) {#FW_GC_EN} Enable rate gain compression. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ----------- | ---- | -|   | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ----------- | ---- | --------- | +|   | | | | Enabled (1) | |   | ### FW_GC_GAIN_MIN (`FLOAT`) {#FW_GC_GAIN_MIN} @@ -20833,9 +23035,9 @@ Compression gain lower limit. The range of the compression gain is between this parameter and 1.0 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 1.0 | 0.01 | 0.3 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 1.0 | 0.01 | 0.3 | |   | ### FW_MAN_P_SC (`FLOAT`) {#FW_MAN_P_SC} @@ -20844,9 +23046,9 @@ Manual pitch scale. Scale factor applied to the desired pitch actuator command in full manual mode. This parameter allows to adjust the throws of the control surfaces. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | | 0.01 | 1.0 | norm | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | | 0.01 | 1.0 | norm |   | ### FW_MAN_R_SC (`FLOAT`) {#FW_MAN_R_SC} @@ -20855,9 +23057,9 @@ Manual roll scale. Scale factor applied to the desired roll actuator command in full manual mode. This parameter allows to adjust the throws of the control surfaces. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 1.0 | 0.01 | 1.0 | norm | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 1.0 | 0.01 | 1.0 | norm |   | ### FW_MAN_Y_SC (`FLOAT`) {#FW_MAN_Y_SC} @@ -20866,9 +23068,9 @@ Manual yaw scale. Scale factor applied to the desired yaw actuator command in full manual mode. This parameter allows to adjust the throws of the control surfaces. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | | 0.01 | 1.0 | norm | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | | 0.01 | 1.0 | norm |   | ### FW_PR_D (`FLOAT`) {#FW_PR_D} @@ -20876,9 +23078,9 @@ Pitch rate derivative gain. Pitch rate differential gain. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ------- | -|   | 0.0 | 10 | 0.005 | 0. | %/rad/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ------- | --------- | +|   | 0.0 | 10 | 0.005 | 0.0 | %/rad/s |   | ### FW_PR_FF (`FLOAT`) {#FW_PR_FF} @@ -20886,33 +23088,33 @@ Pitch rate feed forward. Direct feed forward from rate setpoint to control surface output -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ------- | -|   | 0.0 | 10.0 | 0.05 | 0.5 | %/rad/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ------- | --------- | +|   | 0.0 | 10.0 | 0.05 | 0.5 | %/rad/s |   | ### FW_PR_I (`FLOAT`) {#FW_PR_I} Pitch rate integrator gain. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 0.0 | 10 | 0.005 | 0.1 | %/rad | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | 0.0 | 10 | 0.005 | 0.1 | %/rad |   | ### FW_PR_IMAX (`FLOAT`) {#FW_PR_IMAX} Pitch rate integrator limit. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 1.0 | 0.05 | 0.4 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 1.0 | 0.05 | 0.4 | |   | ### FW_PR_P (`FLOAT`) {#FW_PR_P} Pitch rate proportional gain. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ------- | -|   | 0.0 | 10 | 0.005 | 0.08 | %/rad/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ------- | --------- | +|   | 0.0 | 10 | 0.005 | 0.08 | %/rad/s |   | ### FW_RLL_TO_YAW_FF (`FLOAT`) {#FW_RLL_TO_YAW_FF} @@ -20922,17 +23124,17 @@ This gain can be used to counteract the "adverse yaw" effect for fixed wings. When the plane enters a roll it will tend to yaw the nose out of the turn. This gain enables the use of a yaw actuator to counteract this effect. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | | 0.01 | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | | 0.01 | 0.0 | |   | ### FW_RR_D (`FLOAT`) {#FW_RR_D} Roll rate derivative gain. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ------- | -|   | 0.0 | 10 | 0.005 | 0.0 | %/rad/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ------- | --------- | +|   | 0.0 | 10 | 0.005 | 0.0 | %/rad/s |   | ### FW_RR_FF (`FLOAT`) {#FW_RR_FF} @@ -20940,33 +23142,33 @@ Roll rate feed forward. Direct feed forward from rate setpoint to control surface output. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ------- | -|   | 0.0 | 10.0 | 0.05 | 0.5 | %/rad/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ------- | --------- | +|   | 0.0 | 10.0 | 0.05 | 0.5 | %/rad/s |   | ### FW_RR_I (`FLOAT`) {#FW_RR_I} Roll rate integrator gain. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 0.0 | 10 | 0.01 | 0.1 | %/rad | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | 0.0 | 10 | 0.01 | 0.1 | %/rad |   | ### FW_RR_IMAX (`FLOAT`) {#FW_RR_IMAX} Roll integrator limit. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 1.0 | 0.05 | 0.2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 1.0 | 0.05 | 0.2 | |   | ### FW_RR_P (`FLOAT`) {#FW_RR_P} Roll rate proportional gain. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ------- | -|   | 0.0 | 10 | 0.005 | 0.05 | %/rad/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ------- | --------- | +|   | 0.0 | 10 | 0.005 | 0.05 | %/rad/s |   | ### FW_SPOILERS_MAN (`INT32`) {#FW_SPOILERS_MAN} @@ -20979,10 +23181,14 @@ 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 | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### FW_USE_AIRSPD (`INT32`) {#FW_USE_AIRSPD} @@ -20995,17 +23201,17 @@ If set to 1, the airspeed measurement data, if valid, is used in the following c - Position controller: airspeed setpoint tracking, takeoff logic - VTOL: transition logic -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ----------- | ---- | -|   | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ----------- | ---- | --------- | +|   | | | | Enabled (1) | |   | ### FW_YR_D (`FLOAT`) {#FW_YR_D} Yaw rate derivative gain. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ------- | -|   | 0.0 | 10 | 0.005 | 0.0 | %/rad/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ------- | --------- | +|   | 0.0 | 10 | 0.005 | 0.0 | %/rad/s |   | ### FW_YR_FF (`FLOAT`) {#FW_YR_FF} @@ -21013,132 +23219,80 @@ Yaw rate feed forward. Direct feed forward from rate setpoint to control surface output -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ------- | -|   | 0.0 | 10.0 | 0.05 | 0.3 | %/rad/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ------- | --------- | +|   | 0.0 | 10.0 | 0.05 | 0.3 | %/rad/s |   | ### FW_YR_I (`FLOAT`) {#FW_YR_I} Yaw rate integrator gain. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 0.0 | 10 | 0.5 | 0.1 | %/rad | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | 0.0 | 10 | 0.5 | 0.1 | %/rad |   | ### FW_YR_IMAX (`FLOAT`) {#FW_YR_IMAX} Yaw rate integrator limit. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 1.0 | 0.05 | 0.2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 1.0 | 0.05 | 0.2 | |   | ### FW_YR_P (`FLOAT`) {#FW_YR_P} Yaw rate proportional gain. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ------- | -|   | 0.0 | 10 | 0.005 | 0.05 | %/rad/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ------- | --------- | +|   | 0.0 | 10 | 0.005 | 0.05 | %/rad/s |   | ## Failure Detector -### FD_ACT_EN (`INT32`) {#FD_ACT_EN} +### FD_ALT_LOSS (`FLOAT`) {#FD_ALT_LOSS} -Enable Actuator Failure check. +Altitude loss threshold for termination and parachute deployment. -If enabled, failure detector will verify that for motors, a minimum amount of ESC current per throttle -level is being consumed. -Otherwise this indicates an motor failure. +Maximum altitude loss below the setpoint allowed before the vehicle terminates and deploys the parachute. Set to 0 to disable. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 200.0 | 0.5 | 0.0 | m |   | -### FD_ACT_HIGH_OFF (`FLOAT`) {#FD_ACT_HIGH_OFF} +### FD_ALT_LOSS_T (`FLOAT`) {#FD_ALT_LOSS_T} -Overcurrent motor failure limit offset. +Altitude loss failure trigger time. -threshold = FD_ACT_MOT_C2T \* thrust + FD_ACT_HIGH_OFF +Seconds that the altitude loss threshold must be exceeded before the failure is declared. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 30 | 1 | 10. | A | - -### FD_ACT_LOW_OFF (`FLOAT`) {#FD_ACT_LOW_OFF} - -Undercurrent motor failure limit offset. - -threshold = FD_ACT_MOT_C2T \* thrust - FD_ACT_LOW_OFF - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 30 | 1 | 10. | A | - -### FD_ACT_MOT_C2T (`FLOAT`) {#FD_ACT_MOT_C2T} - -Motor Failure Current/Throttle Scale. - -Determines the slope between expected steady state current and linearized, normalized thrust command. -E.g. FD_ACT_MOT_C2T A represents the expected steady state current at 100%. -FD_ACT_LOW_OFF and FD_ACT_HIGH_OFF offset the threshold from that slope. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 50.0 | 1 | 35. | A/% | - -### FD_ACT_MOT_THR (`FLOAT`) {#FD_ACT_MOT_THR} - -Motor Failure Thrust Threshold. - -Failure detection per motor only triggers above this thrust value. -Set to 1 to disable the detection. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 1.0 | 0.01 | 0.2 | norm | - -### FD_ACT_MOT_TOUT (`INT32`) {#FD_ACT_MOT_TOUT} - -Motor Failure Hysteresis Time. - -Motor failure only triggers after current thresholds are exceeded for this time. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 10 | 10000 | 100 | 1000 | ms | - -### FD_ESCS_EN (`INT32`) {#FD_ESCS_EN} - -Enable checks on ESCs that report their arming state. - -If enabled, failure detector will verify that all the ESCs have successfully armed when the vehicle has transitioned to the armed state. -Timeout for receiving an acknowledgement from the ESCs is 0.3s, if no feedback is received the failure detector will auto disarm the vehicle. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ----------- | ---- | -|   | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.02 | 5.0 | | 1.0 | s |   | ### FD_EXT_ATS_EN (`INT32`) {#FD_EXT_ATS_EN} -Enable PWM input on for engaging failsafe from an external automatic trigger system (ATS). +Enable PWM input from external ATS for failsafe. + +Enable PWM input on for engaging failsafe from an external automatic trigger system (ATS) Enabled on either AUX5 or MAIN5 depending on board. External ATS is required by ASTM F3322-18. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### FD_EXT_ATS_TRIG (`INT32`) {#FD_EXT_ATS_TRIG} -The PWM threshold from external automatic trigger system for engaging failsafe. +External ATS PWM threshold for failsafe. + +The PWM threshold from external automatic trigger system for engaging failsafe External ATS is required by ASTM F3322-18. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 1900 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 1900 | us |   | ### FD_FAIL_P (`INT32`) {#FD_FAIL_P} @@ -21149,11 +23303,12 @@ The flag triggers flight termination (if @CBRK_FLIGHTTERM = 0), which sets outputs to their failsafe values. On takeoff the flag triggers lockdown (irrespective of @CBRK_FLIGHTTERM), which disarms motors but does not set outputs to failsafe values. + Setting this parameter to 0 disables the check -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 180 | | 60 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 180 | | 60 | deg |   | ### FD_FAIL_P_TTRI (`FLOAT`) {#FD_FAIL_P_TTRI} @@ -21161,9 +23316,9 @@ Pitch failure trigger time. Seconds (decimal) that pitch has to exceed FD_FAIL_P before being considered as a failure. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.02 | 5 | | 0.3 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.02 | 5 | | 0.3 | s |   | ### FD_FAIL_R (`INT32`) {#FD_FAIL_R} @@ -21174,11 +23329,12 @@ The flag triggers flight termination (if @CBRK_FLIGHTTERM = 0), which sets outputs to their failsafe values. On takeoff the flag triggers lockdown (irrespective of @CBRK_FLIGHTTERM), which disarms motors but does not set outputs to failsafe values. + Setting this parameter to 0 disables the check -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 180 | | 60 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 180 | | 60 | deg |   | ### FD_FAIL_R_TTRI (`FLOAT`) {#FD_FAIL_R_TTRI} @@ -21186,9 +23342,9 @@ Roll failure trigger time. Seconds (decimal) that roll has to exceed FD_FAIL_R before being considered as a failure. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.02 | 5 | | 0.3 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.02 | 5 | | 0.3 | s |   | ### FD_IMB_PROP_THR (`INT32`) {#FD_IMB_PROP_THR} @@ -21196,11 +23352,12 @@ Imbalanced propeller check threshold. Value at which the imbalanced propeller metric (based on horizontal and vertical acceleration variance) triggers a failure + Setting this value to 0 disables the feature. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1000 | 1 | 30 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1000 | 1 | 30 | |   | ## Flight Task Orbit @@ -21208,9 +23365,9 @@ Setting this value to 0 disables the feature. Maximum radius of orbit. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1.0 | 10000.0 | 0.5 | 1000.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1.0 | 10000.0 | 0.5 | 1000.0 | m |   | ### MC_ORBIT_YAW_MOD (`INT32`) {#MC_ORBIT_YAW_MOD} @@ -21224,9 +23381,9 @@ Yaw behaviour during orbit flight. - `3`: Hold Front Tangent to Circle - `4`: Manually (yaw stick) Controlled -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ## Follow target @@ -21245,9 +23402,9 @@ to prevent terrain collisions due to GPS inaccuracies of the target. - `1`: 2D + Terrain: Maintain constant altitude relative to terrain below and track XY position - `2`: 3D Tracking: Track target's altitude (be aware that GPS altitude bias usually makes this useless) -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### FLW_TGT_DST (`FLOAT`) {#FLW_TGT_DST} @@ -21255,9 +23412,9 @@ Distance to follow target from. The distance in meters to follow the target at -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1.0 | | | 8.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1.0 | | | 8.0 | m |   | ### FLW_TGT_FA (`FLOAT`) {#FLW_TGT_FA} @@ -21266,12 +23423,13 @@ Follow Angle setting in degrees. Angle to follow the target from. 0.0 Equals straight in front of the target's course (direction of motion) and the angle increases in clockwise direction, meaning Right-side would be 90.0 degrees while Left-side is -90.0 degrees + Note: When the user force sets the angle out of the min/max range, it will be wrapped (e.g. 480 -> 120) in the range to gracefully handle the out of range. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -180.0 | 180.0 | | 180.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -180.0 | 180.0 | | 180.0 | |   | ### FLW_TGT_HT (`FLOAT`) {#FLW_TGT_HT} @@ -21279,20 +23437,22 @@ Follow target height. Following height above the target -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 8.0 | | | 8.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 8.0 | | | 8.0 | m |   | ### FLW_TGT_MAX_VEL (`FLOAT`) {#FLW_TGT_MAX_VEL} -Maximum tangential velocity setting for generating the follow orbit trajectory. +Max tangential velocity for follow orbit trajectory. + +Maximum tangential velocity setting for generating the follow orbit trajectory This is the maximum tangential velocity the drone will circle around the target whenever an orbit angle setpoint changes. Higher value means more aggressive follow behavior. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 20.0 | | 5.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 20.0 | | 5.0 | |   | ### FLW_TGT_RS (`FLOAT`) {#FLW_TGT_RS} @@ -21300,9 +23460,9 @@ Responsiveness to target movement in Target Estimator. lower values increase the responsiveness to changing position, but also ignore less noise -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 1.0 | | 0.1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 1.0 | | 0.1 | |   | ## GPS @@ -21327,9 +23487,9 @@ Configure on which serial port to run Main GPS. - `301`: Wifi Port - `401`: EXT2 -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 201 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 201 | |   | ### GPS_1_GNSS (`INT32`) {#GPS_1_GNSS} @@ -21337,8 +23497,11 @@ GNSS Systems for Primary GPS (integer bitmask). This integer bitmask controls the set of GNSS systems used by the receiver. Check your receiver's documentation on how many systems are supported to be used in parallel. + Currently this functionality is just implemented for u-blox receivers. + When no bits are set, the receiver's default configuration should be used. + Set bits true to enable: 0 : Use GPS (with QZSS) 1 : Use SBAS (multiple GPS augmentation systems) @@ -21356,15 +23519,16 @@ Set bits true to enable: - `4`: GLONASS - `5`: NAVIC -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 63 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 63 | | 0 | |   | ### GPS_1_PROTOCOL (`INT32`) {#GPS_1_PROTOCOL} Protocol for Main GPS. Select the GPS protocol over serial. + Auto-detection will probe all protocols, and thus is a bit slower. **Values:** @@ -21377,9 +23541,9 @@ Auto-detection will probe all protocols, and thus is a bit slower. - `5`: Femtomes - `6`: NMEA (generic) -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 7 | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 7 | | 1 | |   | ### GPS_2_CONFIG (`INT32`) {#GPS_2_CONFIG} @@ -21402,9 +23566,9 @@ Configure on which serial port to run Secondary GPS. - `301`: Wifi Port - `401`: EXT2 -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### GPS_2_GNSS (`INT32`) {#GPS_2_GNSS} @@ -21412,8 +23576,11 @@ GNSS Systems for Secondary GPS (integer bitmask). This integer bitmask controls the set of GNSS systems used by the receiver. Check your receiver's documentation on how many systems are supported to be used in parallel. + Currently this functionality is just implemented for u-blox receivers. + When no bits are set, the receiver's default configuration should be used. + Set bits true to enable: 0 : Use GPS (with QZSS) 1 : Use SBAS (multiple GPS augmentation systems) @@ -21431,15 +23598,16 @@ Set bits true to enable: - `4`: GLONASS - `5`: NAVIC -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 63 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 63 | | 0 | |   | ### GPS_2_PROTOCOL (`INT32`) {#GPS_2_PROTOCOL} Protocol for Secondary GPS. Select the GPS protocol over serial. + Auto-detection will probe all protocols, and thus is a bit slower. **Values:** @@ -21452,9 +23620,9 @@ Auto-detection will probe all protocols, and thus is a bit slower. - `5`: Femtomes - `6`: NMEA (generic) -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 6 | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 6 | | 1 | |   | ### GPS_CFG_WIPE (`INT32`) {#GPS_CFG_WIPE} @@ -21464,11 +23632,12 @@ Some UBX modules have a FLASH that allows to store persistent configuration that PX4 does override all configuration parameters it needs in RAM, which takes precedence over the values in FLASH. However, configuration parameters that are not overriden by PX4 can still cause unexpected problems during flight. To avoid these kind of problems a clean config can be reached by wiping the FLASH on boot. + Note: Currently only supported on UBX. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### GPS_DUMP_COMM (`INT32`) {#GPS_DUMP_COMM} @@ -21476,6 +23645,7 @@ Log GPS communication data. If this is set to 1, all GPS communication data will be published via uORB, and written to the log file as gps_dump message. + If this is set to 2, the main GPS is configured to output RTCM data, which is then logged as gps_dump and can be used for PPK. @@ -21485,9 +23655,9 @@ which is then logged as gps_dump and can be used for PPK. - `1`: Full communication - `2`: RTCM output (PPK) -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 2 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 2 | | 0 | |   | ### GPS_SAT_INFO (`INT32`) {#GPS_SAT_INFO} @@ -21496,9 +23666,9 @@ Enable sat info (if available). Enable publication of satellite info (ORB_ID(satellite_info)) if possible. Not available on MTK. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### GPS_UBX_BAUD2 (`INT32`) {#GPS_UBX_BAUD2} @@ -21508,9 +23678,9 @@ Select a baudrate for the F9P's UART2 port. In GPS_UBX_MODE 1, 2, and 3, the F9P's UART2 port is configured to send/receive RTCM corrections. Set this to 57600 if you want to attach a telemetry radio on UART2. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | | | 230400 | B/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | | | 230400 | B/s |   | ### GPS_UBX_CFG_INTF (`INT32`) {#GPS_UBX_CFG_INTF} @@ -21525,9 +23695,9 @@ u-blox protocol configuration for interfaces. - `4`: Enable I2C output protocol NMEA - `5`: Enable I2C output protocol RTCM3X -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 32 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 32 | | 0 | |   | ### GPS_UBX_DGNSS_TO (`INT32`) {#GPS_UBX_DGNSS_TO} @@ -21535,9 +23705,9 @@ u-blox GPS DGNSS timeout. When set to 0 (default), default DGNSS timeout set by u-blox will be used. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 255 | | 0 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 255 | | 0 | s |   | ### GPS_UBX_DYNMODEL (`INT32`) {#GPS_UBX_DYNMODEL} @@ -21554,9 +23724,9 @@ the expected application environment. - `7`: airborne with <2g acceleration - `8`: airborne with <4g acceleration -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 9 | | 7 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 9 | | 7 | |   | ### GPS_UBX_JAM_DET (`INT32`) {#GPS_UBX_JAM_DET} @@ -21567,9 +23737,9 @@ Enables or disables the high sensitivity mode for the u-blox jamming detection more sensitive algorithm to detect jamming. Disabling this may reduce false positives in electrically noisy environments. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ----------- | ---- | -| ✓ | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ----------- | ---- | --------- | +| ✓ | | | | Enabled (1) | |   | ### GPS_UBX_MIN_CNO (`INT32`) {#GPS_UBX_MIN_CNO} @@ -21577,19 +23747,21 @@ u-blox GPS minimum satellite signal level for navigation. When set to 0 (default), default minimum satellite signal level set by u-blox wll be used. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 255 | | 0 | dBHz | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 255 | | 0 | dBHz |   | ### GPS_UBX_MIN_ELEV (`INT32`) {#GPS_UBX_MIN_ELEV} -u-blox GPS minimum elevation for a GNSS satellite to be used in navigation. +u-blox GPS minimum satellite elevation angle. + +u-blox GPS minimum elevation for a GNSS satellite to be used in navigation When set to 0 (default), default minimum elevation set by u-blox will be used. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 127 | | 0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 127 | | 0 | deg |   | ### GPS_UBX_MODE (`INT32`) {#GPS_UBX_MODE} @@ -21597,6 +23769,7 @@ u-blox GPS Mode. Select the u-blox configuration setup. Most setups will use the default, including RTK and dual GPS without heading. + If rover has RTCM corrections from a static base (or other static correction source) coming in on UART2, then select Mode 5. The Heading mode requires 2 F9P devices to be attached. The main GPS will act as rover and output heading information, whereas the secondary will act as moving base. @@ -21616,17 +23789,17 @@ Mode 6 is intended for use with a ground control station (not necessarily an RTK - `5`: Rover with Static Base on UART2 (similar to Default, except coming in on UART2) - `6`: Ground Control Station (UART2 outputs NMEA) -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 1 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 6 | | 0 | |   | ### GPS_UBX_PPK (`INT32`) {#GPS_UBX_PPK} Enable MSM7 message output for PPK workflow. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### GPS_UBX_RATE (`INT32`) {#GPS_UBX_RATE} @@ -21635,31 +23808,36 @@ u-blox GPS output rate. Configure the output rate of u-blox GPS receivers (protocol v27+). When set to 0, automatic rate selection is used based on the receiver model. Default rates: M9N=8Hz, F9P L1L2=5Hz, F9P L1L5=5Hz, Others=10Hz. + Note: Higher rates reduce satellite count (e.g., >8Hz limits to 16 SVs on M9N). Max rates vary by model and RTK mode: F9P L1L2=5-7Hz, F9P L1L5=7-8Hz, X20=25Hz. High rates at 115200 baud may cause dropouts. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 25 | | 0 | Hz | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 25 | | 0 | Hz |   | ### GPS_YAW_OFFSET (`FLOAT`) {#GPS_YAW_OFFSET} Heading/Yaw offset for dual antenna GPS. Heading offset angle for dual antenna GPS setups that support heading estimation. + Set this to 0 if the antennas are parallel to the forward-facing direction of the vehicle and the rover (or Unicore primary) antenna is in front. + The offset angle increases clockwise. + Set this to 90 if the rover (or Unicore primary, or Septentrio Mosaic Aux) antenna is placed on the right side of the vehicle and the moving base antenna is on the left side. + (Note: the Unicore primary antenna is the one connected on the right as seen from the top). -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 360 | | 0. | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 360 | | 0.0 | deg |   | ### PPS_CAP_ENABLE (`INT32`) {#PPS_CAP_ENABLE} @@ -21667,9 +23845,24 @@ PPS capture enable. Enables the PPS capture module to refine the GPS time from pulses detected on a PWM pin configured as "PPS Input". -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | + +### PPS_CAP_GPS_ID (`INT32`) {#PPS_CAP_GPS_ID} + +PPS capture GPS receiver device ID. + +Device ID of the GPS receiver that emits the PPS signal captured on the +configured PWM input pin. When set to 0 (default), the first available +GPS instance is used. + +The device ID can be obtained from the sensor_gps publication +(e.g. via listener sensor_gps). + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | | | 0 | |   | ## Geofence @@ -21689,9 +23882,9 @@ which will kill the vehicle on violation of the fence. - `4`: Terminate - `5`: Land mode -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 5 | | 2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 5 | | 2 | |   | ### GF_MAX_HOR_DIST (`FLOAT`) {#GF_MAX_HOR_DIST} @@ -21700,9 +23893,9 @@ Max horizontal distance from Home. Maximum horizontal distance in meters the vehicle can be from Home before triggering a geofence action. Disabled if 0. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 10000 | 1 | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 10000 | 1 | 0.0 | m |   | ### GF_MAX_VER_DIST (`FLOAT`) {#GF_MAX_VER_DIST} @@ -21711,22 +23904,23 @@ Max vertical distance from Home. Maximum vertical distance in meters the vehicle can be from Home before triggering a geofence action. Disabled if 0. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 10000 | 1 | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 10000 | 1 | 0.0 | m |   | ### GF_PREDICT (`INT32`) {#GF_PREDICT} [EXPERIMENTAL] Use Pre-emptive geofence triggering. WARNING: This experimental feature may cause flyaways. Use at your own risk. + Predict the motion of the vehicle and trigger the breach if it is determined that the current trajectory would result in a breach happening before the vehicle can make evasive maneuvers. The vehicle is then re-routed to a safe hold position (stop for multirotor, loiter for fixed wing). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------------ | ---- | -|   | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------------ | ---- | --------- | +|   | | | | Disabled (0) | |   | ### GF_SOURCE (`INT32`) {#GF_SOURCE} @@ -21741,9 +23935,9 @@ no dependence on the position estimator - `0`: GPOS - `1`: GPS -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1 | | 0 | |   | ## Geometry @@ -21753,6 +23947,7 @@ Airframe selection. Defines which mixer implementation to use. Some are generic, while others are specifically fit to a certain vehicle with a fixed set of actuators. + 'Custom' should only be used if noting else can be used. **Values:** @@ -21774,9 +23969,9 @@ Some are generic, while others are specifically fit to a certain vehicle with a - `14`: Spacecraft 2D - `15`: Spacecraft 3D -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### CA_CS_LAUN_LK (`INT32`) {#CA_CS_LAUN_LK} @@ -21795,9 +23990,9 @@ If actuator launch lock is enabled, this surface is kept at the disarmed value. - `6`: Control Surface 7 - `7`: Control Surface 8 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 255 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 255 | | 0 | |   | ### CA_FAILURE_MODE (`INT32`) {#CA_FAILURE_MODE} @@ -21811,64 +24006,69 @@ reported by failure detector. - `0`: Ignore - `1`: Remove first failed motor from effectiveness -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### CA_HELI_PITCH_C0 (`FLOAT`) {#CA_HELI_PITCH_C0} Collective pitch curve at position 0. Defines the collective pitch at the interval position 0 for a given thrust setpoint. + Use negative values if the swash plate needs to move down to provide upwards thrust. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 1 | 0.1 | -0.05 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1 | 0.1 | -0.05 | |   | ### CA_HELI_PITCH_C1 (`FLOAT`) {#CA_HELI_PITCH_C1} Collective pitch curve at position 1. Defines the collective pitch at the interval position 1 for a given thrust setpoint. + Use negative values if the swash plate needs to move down to provide upwards thrust. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 1 | 0.1 | 0.0725 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1 | 0.1 | 0.0725 | |   | ### CA_HELI_PITCH_C2 (`FLOAT`) {#CA_HELI_PITCH_C2} Collective pitch curve at position 2. Defines the collective pitch at the interval position 2 for a given thrust setpoint. + Use negative values if the swash plate needs to move down to provide upwards thrust. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 1 | 0.1 | 0.2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1 | 0.1 | 0.2 | |   | ### CA_HELI_PITCH_C3 (`FLOAT`) {#CA_HELI_PITCH_C3} Collective pitch curve at position 3. Defines the collective pitch at the interval position 3 for a given thrust setpoint. + Use negative values if the swash plate needs to move down to provide upwards thrust. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 1 | 0.1 | 0.325 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1 | 0.1 | 0.325 | |   | ### CA_HELI_PITCH_C4 (`FLOAT`) {#CA_HELI_PITCH_C4} Collective pitch curve at position 4. Defines the collective pitch at the interval position 4 for a given thrust setpoint. + Use negative values if the swash plate needs to move down to provide upwards thrust. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 1 | 0.1 | 0.45 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1 | 0.1 | 0.45 | |   | ### CA_HELI_RPM_I (`FLOAT`) {#CA_HELI_RPM_I} @@ -21876,20 +24076,21 @@ Integral gain for rpm control. Same definition as the proportional gain but for integral. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 10 | 0.1 | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 10 | 0.1 | 0.0 | |   | ### CA_HELI_RPM_P (`FLOAT`) {#CA_HELI_RPM_P} Proportional gain for rpm control. Ratio between rpm error devided by 1000 to how much normalized output gets added to correct for it. + motor_command = throttle_curve + CA_HELI_RPM_P \* (rpm_setpoint - rpm_measurement) / 1000 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 10 | 0.1 | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 10 | 0.1 | 0.0 | |   | ### CA_HELI_RPM_SP (`FLOAT`) {#CA_HELI_RPM_SP} @@ -21897,9 +24098,9 @@ Setpoint for main rotor rpm. Requires rpm feedback for the controller. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 100 | 10000 | 1 | 1500 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 100 | 10000 | 1 | 1500 | |   | ### CA_HELI_THR_C0 (`FLOAT`) {#CA_HELI_THR_C0} @@ -21907,9 +24108,9 @@ Throttle curve at position 0. Defines the output throttle at the interval position 0. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1 | 0.1 | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1 | 0.1 | 1 | |   | ### CA_HELI_THR_C1 (`FLOAT`) {#CA_HELI_THR_C1} @@ -21917,9 +24118,9 @@ Throttle curve at position 1. Defines the output throttle at the interval position 1. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1 | 0.1 | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1 | 0.1 | 1 | |   | ### CA_HELI_THR_C2 (`FLOAT`) {#CA_HELI_THR_C2} @@ -21927,9 +24128,9 @@ Throttle curve at position 2. Defines the output throttle at the interval position 2. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1 | 0.1 | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1 | 0.1 | 1 | |   | ### CA_HELI_THR_C3 (`FLOAT`) {#CA_HELI_THR_C3} @@ -21937,9 +24138,9 @@ Throttle curve at position 3. Defines the output throttle at the interval position 3. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1 | 0.1 | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1 | 0.1 | 1 | |   | ### CA_HELI_THR_C4 (`FLOAT`) {#CA_HELI_THR_C4} @@ -21947,9 +24148,9 @@ Throttle curve at position 4. Defines the output throttle at the interval position 4. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1 | 0.1 | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1 | 0.1 | 1 | |   | ### CA_HELI_YAW_CCW (`INT32`) {#CA_HELI_YAW_CCW} @@ -21960,9 +24161,9 @@ positive thrust of the tail rotor is expected to rotate the vehicle clockwise. Set this parameter to true if the tail rotor provides thrust in counter-clockwise direction which is mostly the case when the main rotor turns counter-clockwise. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------------ | ---- | -|   | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------------ | ---- | --------- | +|   | | | | Disabled (0) | |   | ### CA_HELI_YAW_CP_O (`FLOAT`) {#CA_HELI_YAW_CP_O} @@ -21973,11 +24174,12 @@ This is used to increase the accuracy of the yaw drag torque compensation based by aligning the lowest rotor drag with zero compensation. For symmetric profile blades this is the command that results in exactly 0° collective blade angle. For lift profile blades this is typically a command resulting in slightly negative collective blade angle. + tail_output += CA_HELI_YAW_CP_S \* abs(collective_pitch - CA_HELI_YAW_CP_O) -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -2 | 2 | 0.1 | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -2 | 2 | 0.1 | 0.0 | |   | ### CA_HELI_YAW_CP_S (`FLOAT`) {#CA_HELI_YAW_CP_S} @@ -21985,11 +24187,12 @@ Scale for yaw compensation based on collective pitch. This allows to add a proportional factor of the collective pitch command to the yaw command. A negative value is needed when positive thrust of the tail rotor rotates the vehicle opposite to the main rotor turn direction. + tail_output += CA_HELI_YAW_CP_S \* abs(collective_pitch - CA_HELI_YAW_CP_O) -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -2 | 2 | 0.1 | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -2 | 2 | 0.1 | 0.0 | |   | ### CA_HELI_YAW_TH_S (`FLOAT`) {#CA_HELI_YAW_TH_S} @@ -21997,26 +24200,24 @@ Scale for yaw compensation based on throttle. This allows to add a proportional factor of the throttle command to the yaw command. A negative value is needed when positive thrust of the tail rotor rotates the vehicle opposite to the main rotor turn direction. + tail_output += CA_HELI_YAW_TH_S \* throttle -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -2 | 2 | 0.1 | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -2 | 2 | 0.1 | 0.0 | |   | ### CA_ICE_PERIOD (`FLOAT`) {#CA_ICE_PERIOD} Ice shedding cycle period. -Ice shedding prevents ice buildup in VTOL aircraft motors by -periodically spinning inactive rotors. When enabled (period +Ice shedding prevents ice buildup in VTOL aircraft motors by periodically spinning inactive rotors. +When enabled (period > 0), every cycle lasts for the defined period and includes a 2-second spin at 0.01 motor output. +If period <= 0, the feature is disabled. -> 0), every cycle lasts for the defined period and includes -> a 2‑second spin at 0.01 motor output. If period <= 0, the -> feature is disabled. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | | 0.1 | 0.0 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | | 0.1 | 0.0 | s |   | ### CA_MAX_SVO_THROW (`FLOAT`) {#CA_MAX_SVO_THROW} @@ -22026,9 +24227,9 @@ Used to linearize mechanical output of swashplate servos to avoid axis coupling This requires a symmetric setup where the servo horn is exactly centered with a 0 command. Setting to zero disables feature. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 75 | 0.1 | 0.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 75 | 0.1 | 0.0 | deg |   | ### CA_METHOD (`INT32`) {#CA_METHOD} @@ -22043,9 +24244,9 @@ If set to Automatic, the selection is based on the airframe (CA_AIRFRAME). - `1`: Pseudo-inverse with sequential desaturation technique - `2`: Automatic -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 2 | |   | ### CA_R0_SLEW (`FLOAT`) {#CA_R0_SLEW} @@ -22053,11 +24254,12 @@ Motor 0 slew rate limit. Forces the motor output signal to take at least the configured time (in seconds) to traverse its full range (normally [0, 1], or if reversible [-1, 1]). + Zero means that slew rate limiting is disabled. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 10 | 0.01 | 0.0 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 10 | 0.01 | 0.0 | s |   | ### CA_R10_SLEW (`FLOAT`) {#CA_R10_SLEW} @@ -22065,11 +24267,12 @@ Motor 10 slew rate limit. Forces the motor output signal to take at least the configured time (in seconds) to traverse its full range (normally [0, 1], or if reversible [-1, 1]). + Zero means that slew rate limiting is disabled. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 10 | 0.01 | 0.0 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 10 | 0.01 | 0.0 | s |   | ### CA_R11_SLEW (`FLOAT`) {#CA_R11_SLEW} @@ -22077,11 +24280,12 @@ Motor 11 slew rate limit. Forces the motor output signal to take at least the configured time (in seconds) to traverse its full range (normally [0, 1], or if reversible [-1, 1]). + Zero means that slew rate limiting is disabled. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 10 | 0.01 | 0.0 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 10 | 0.01 | 0.0 | s |   | ### CA_R1_SLEW (`FLOAT`) {#CA_R1_SLEW} @@ -22089,11 +24293,12 @@ Motor 1 slew rate limit. Forces the motor output signal to take at least the configured time (in seconds) to traverse its full range (normally [0, 1], or if reversible [-1, 1]). + Zero means that slew rate limiting is disabled. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 10 | 0.01 | 0.0 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 10 | 0.01 | 0.0 | s |   | ### CA_R2_SLEW (`FLOAT`) {#CA_R2_SLEW} @@ -22101,11 +24306,12 @@ Motor 2 slew rate limit. Forces the motor output signal to take at least the configured time (in seconds) to traverse its full range (normally [0, 1], or if reversible [-1, 1]). + Zero means that slew rate limiting is disabled. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 10 | 0.01 | 0.0 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 10 | 0.01 | 0.0 | s |   | ### CA_R3_SLEW (`FLOAT`) {#CA_R3_SLEW} @@ -22113,11 +24319,12 @@ Motor 3 slew rate limit. Forces the motor output signal to take at least the configured time (in seconds) to traverse its full range (normally [0, 1], or if reversible [-1, 1]). + Zero means that slew rate limiting is disabled. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 10 | 0.01 | 0.0 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 10 | 0.01 | 0.0 | s |   | ### CA_R4_SLEW (`FLOAT`) {#CA_R4_SLEW} @@ -22125,11 +24332,12 @@ Motor 4 slew rate limit. Forces the motor output signal to take at least the configured time (in seconds) to traverse its full range (normally [0, 1], or if reversible [-1, 1]). + Zero means that slew rate limiting is disabled. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 10 | 0.01 | 0.0 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 10 | 0.01 | 0.0 | s |   | ### CA_R5_SLEW (`FLOAT`) {#CA_R5_SLEW} @@ -22137,11 +24345,12 @@ Motor 5 slew rate limit. Forces the motor output signal to take at least the configured time (in seconds) to traverse its full range (normally [0, 1], or if reversible [-1, 1]). + Zero means that slew rate limiting is disabled. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 10 | 0.01 | 0.0 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 10 | 0.01 | 0.0 | s |   | ### CA_R6_SLEW (`FLOAT`) {#CA_R6_SLEW} @@ -22149,11 +24358,12 @@ Motor 6 slew rate limit. Forces the motor output signal to take at least the configured time (in seconds) to traverse its full range (normally [0, 1], or if reversible [-1, 1]). + Zero means that slew rate limiting is disabled. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 10 | 0.01 | 0.0 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 10 | 0.01 | 0.0 | s |   | ### CA_R7_SLEW (`FLOAT`) {#CA_R7_SLEW} @@ -22161,11 +24371,12 @@ Motor 7 slew rate limit. Forces the motor output signal to take at least the configured time (in seconds) to traverse its full range (normally [0, 1], or if reversible [-1, 1]). + Zero means that slew rate limiting is disabled. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 10 | 0.01 | 0.0 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 10 | 0.01 | 0.0 | s |   | ### CA_R8_SLEW (`FLOAT`) {#CA_R8_SLEW} @@ -22173,11 +24384,12 @@ Motor 8 slew rate limit. Forces the motor output signal to take at least the configured time (in seconds) to traverse its full range (normally [0, 1], or if reversible [-1, 1]). + Zero means that slew rate limiting is disabled. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 10 | 0.01 | 0.0 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 10 | 0.01 | 0.0 | s |   | ### CA_R9_SLEW (`FLOAT`) {#CA_R9_SLEW} @@ -22185,11 +24397,12 @@ Motor 9 slew rate limit. Forces the motor output signal to take at least the configured time (in seconds) to traverse its full range (normally [0, 1], or if reversible [-1, 1]). + Zero means that slew rate limiting is disabled. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 10 | 0.01 | 0.0 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 10 | 0.01 | 0.0 | s |   | ### CA_ROTOR0_AX (`FLOAT`) {#CA_ROTOR0_AX} @@ -22197,9 +24410,9 @@ Axis of rotor 0 thrust vector, X body axis component. Only the direction is considered (the vector is normalized). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | |   | ### CA_ROTOR0_AY (`FLOAT`) {#CA_ROTOR0_AY} @@ -22207,9 +24420,9 @@ Axis of rotor 0 thrust vector, Y body axis component. Only the direction is considered (the vector is normalized). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | |   | ### CA_ROTOR0_AZ (`FLOAT`) {#CA_ROTOR0_AZ} @@ -22217,9 +24430,9 @@ Axis of rotor 0 thrust vector, Z body axis component. Only the direction is considered (the vector is normalized). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | -1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | -1.0 | |   | ### CA_ROTOR0_CT (`FLOAT`) {#CA_ROTOR0_CT} @@ -22229,45 +24442,46 @@ The thrust coefficient if defined as Thrust = CT \* u^2, where u (with value between actuator minimum and maximum) is the output signal sent to the motor controller. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 100 | 1 | 6.5 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 100 | 1 | 6.5 | |   | ### CA_ROTOR0_KM (`FLOAT`) {#CA_ROTOR0_KM} Moment coefficient of rotor 0. The moment coefficient if defined as Torque = KM \* Thrust. + Use a positive value for a rotor with CCW rotation. Use a negative value for a rotor with CW rotation. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 1 | 0.01 | 0.05 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1 | 0.01 | 0.05 | |   | ### CA_ROTOR0_PX (`FLOAT`) {#CA_ROTOR0_PX} Position of rotor 0 along X body axis relative to center of gravity. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | m |   | ### CA_ROTOR0_PY (`FLOAT`) {#CA_ROTOR0_PY} Position of rotor 0 along Y body axis relative to center of gravity. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | m |   | ### CA_ROTOR0_PZ (`FLOAT`) {#CA_ROTOR0_PZ} Position of rotor 0 along Z body axis relative to center of gravity. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | m |   | ### CA_ROTOR0_TILT (`INT32`) {#CA_ROTOR0_TILT} @@ -22283,9 +24497,9 @@ If not set to None, this motor is tilted by the configured tilt servo. - `3`: Tilt 3 - `4`: Tilt 4 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### CA_ROTOR10_AX (`FLOAT`) {#CA_ROTOR10_AX} @@ -22293,9 +24507,9 @@ Axis of rotor 10 thrust vector, X body axis component. Only the direction is considered (the vector is normalized). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | |   | ### CA_ROTOR10_AY (`FLOAT`) {#CA_ROTOR10_AY} @@ -22303,9 +24517,9 @@ Axis of rotor 10 thrust vector, Y body axis component. Only the direction is considered (the vector is normalized). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | |   | ### CA_ROTOR10_AZ (`FLOAT`) {#CA_ROTOR10_AZ} @@ -22313,9 +24527,9 @@ Axis of rotor 10 thrust vector, Z body axis component. Only the direction is considered (the vector is normalized). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | -1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | -1.0 | |   | ### CA_ROTOR10_CT (`FLOAT`) {#CA_ROTOR10_CT} @@ -22325,45 +24539,46 @@ The thrust coefficient if defined as Thrust = CT \* u^2, where u (with value between actuator minimum and maximum) is the output signal sent to the motor controller. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 100 | 1 | 6.5 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 100 | 1 | 6.5 | |   | ### CA_ROTOR10_KM (`FLOAT`) {#CA_ROTOR10_KM} Moment coefficient of rotor 10. The moment coefficient if defined as Torque = KM \* Thrust. + Use a positive value for a rotor with CCW rotation. Use a negative value for a rotor with CW rotation. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 1 | 0.01 | 0.05 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1 | 0.01 | 0.05 | |   | ### CA_ROTOR10_PX (`FLOAT`) {#CA_ROTOR10_PX} Position of rotor 10 along X body axis relative to center of gravity. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | m |   | ### CA_ROTOR10_PY (`FLOAT`) {#CA_ROTOR10_PY} Position of rotor 10 along Y body axis relative to center of gravity. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | m |   | ### CA_ROTOR10_PZ (`FLOAT`) {#CA_ROTOR10_PZ} Position of rotor 10 along Z body axis relative to center of gravity. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | m |   | ### CA_ROTOR10_TILT (`INT32`) {#CA_ROTOR10_TILT} @@ -22379,9 +24594,9 @@ If not set to None, this motor is tilted by the configured tilt servo. - `3`: Tilt 3 - `4`: Tilt 4 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### CA_ROTOR11_AX (`FLOAT`) {#CA_ROTOR11_AX} @@ -22389,9 +24604,9 @@ Axis of rotor 11 thrust vector, X body axis component. Only the direction is considered (the vector is normalized). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | |   | ### CA_ROTOR11_AY (`FLOAT`) {#CA_ROTOR11_AY} @@ -22399,9 +24614,9 @@ Axis of rotor 11 thrust vector, Y body axis component. Only the direction is considered (the vector is normalized). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | |   | ### CA_ROTOR11_AZ (`FLOAT`) {#CA_ROTOR11_AZ} @@ -22409,9 +24624,9 @@ Axis of rotor 11 thrust vector, Z body axis component. Only the direction is considered (the vector is normalized). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | -1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | -1.0 | |   | ### CA_ROTOR11_CT (`FLOAT`) {#CA_ROTOR11_CT} @@ -22421,45 +24636,46 @@ The thrust coefficient if defined as Thrust = CT \* u^2, where u (with value between actuator minimum and maximum) is the output signal sent to the motor controller. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 100 | 1 | 6.5 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 100 | 1 | 6.5 | |   | ### CA_ROTOR11_KM (`FLOAT`) {#CA_ROTOR11_KM} Moment coefficient of rotor 11. The moment coefficient if defined as Torque = KM \* Thrust. + Use a positive value for a rotor with CCW rotation. Use a negative value for a rotor with CW rotation. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 1 | 0.01 | 0.05 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1 | 0.01 | 0.05 | |   | ### CA_ROTOR11_PX (`FLOAT`) {#CA_ROTOR11_PX} Position of rotor 11 along X body axis relative to center of gravity. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | m |   | ### CA_ROTOR11_PY (`FLOAT`) {#CA_ROTOR11_PY} Position of rotor 11 along Y body axis relative to center of gravity. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | m |   | ### CA_ROTOR11_PZ (`FLOAT`) {#CA_ROTOR11_PZ} Position of rotor 11 along Z body axis relative to center of gravity. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | m |   | ### CA_ROTOR11_TILT (`INT32`) {#CA_ROTOR11_TILT} @@ -22475,9 +24691,9 @@ If not set to None, this motor is tilted by the configured tilt servo. - `3`: Tilt 3 - `4`: Tilt 4 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### CA_ROTOR1_AX (`FLOAT`) {#CA_ROTOR1_AX} @@ -22485,9 +24701,9 @@ Axis of rotor 1 thrust vector, X body axis component. Only the direction is considered (the vector is normalized). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | |   | ### CA_ROTOR1_AY (`FLOAT`) {#CA_ROTOR1_AY} @@ -22495,9 +24711,9 @@ Axis of rotor 1 thrust vector, Y body axis component. Only the direction is considered (the vector is normalized). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | |   | ### CA_ROTOR1_AZ (`FLOAT`) {#CA_ROTOR1_AZ} @@ -22505,9 +24721,9 @@ Axis of rotor 1 thrust vector, Z body axis component. Only the direction is considered (the vector is normalized). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | -1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | -1.0 | |   | ### CA_ROTOR1_CT (`FLOAT`) {#CA_ROTOR1_CT} @@ -22517,45 +24733,46 @@ The thrust coefficient if defined as Thrust = CT \* u^2, where u (with value between actuator minimum and maximum) is the output signal sent to the motor controller. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 100 | 1 | 6.5 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 100 | 1 | 6.5 | |   | ### CA_ROTOR1_KM (`FLOAT`) {#CA_ROTOR1_KM} Moment coefficient of rotor 1. The moment coefficient if defined as Torque = KM \* Thrust. + Use a positive value for a rotor with CCW rotation. Use a negative value for a rotor with CW rotation. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 1 | 0.01 | 0.05 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1 | 0.01 | 0.05 | |   | ### CA_ROTOR1_PX (`FLOAT`) {#CA_ROTOR1_PX} Position of rotor 1 along X body axis relative to center of gravity. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | m |   | ### CA_ROTOR1_PY (`FLOAT`) {#CA_ROTOR1_PY} Position of rotor 1 along Y body axis relative to center of gravity. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | m |   | ### CA_ROTOR1_PZ (`FLOAT`) {#CA_ROTOR1_PZ} Position of rotor 1 along Z body axis relative to center of gravity. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | m |   | ### CA_ROTOR1_TILT (`INT32`) {#CA_ROTOR1_TILT} @@ -22571,9 +24788,9 @@ If not set to None, this motor is tilted by the configured tilt servo. - `3`: Tilt 3 - `4`: Tilt 4 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### CA_ROTOR2_AX (`FLOAT`) {#CA_ROTOR2_AX} @@ -22581,9 +24798,9 @@ Axis of rotor 2 thrust vector, X body axis component. Only the direction is considered (the vector is normalized). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | |   | ### CA_ROTOR2_AY (`FLOAT`) {#CA_ROTOR2_AY} @@ -22591,9 +24808,9 @@ Axis of rotor 2 thrust vector, Y body axis component. Only the direction is considered (the vector is normalized). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | |   | ### CA_ROTOR2_AZ (`FLOAT`) {#CA_ROTOR2_AZ} @@ -22601,9 +24818,9 @@ Axis of rotor 2 thrust vector, Z body axis component. Only the direction is considered (the vector is normalized). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | -1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | -1.0 | |   | ### CA_ROTOR2_CT (`FLOAT`) {#CA_ROTOR2_CT} @@ -22613,45 +24830,46 @@ The thrust coefficient if defined as Thrust = CT \* u^2, where u (with value between actuator minimum and maximum) is the output signal sent to the motor controller. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 100 | 1 | 6.5 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 100 | 1 | 6.5 | |   | ### CA_ROTOR2_KM (`FLOAT`) {#CA_ROTOR2_KM} Moment coefficient of rotor 2. The moment coefficient if defined as Torque = KM \* Thrust. + Use a positive value for a rotor with CCW rotation. Use a negative value for a rotor with CW rotation. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 1 | 0.01 | 0.05 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1 | 0.01 | 0.05 | |   | ### CA_ROTOR2_PX (`FLOAT`) {#CA_ROTOR2_PX} Position of rotor 2 along X body axis relative to center of gravity. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | m |   | ### CA_ROTOR2_PY (`FLOAT`) {#CA_ROTOR2_PY} Position of rotor 2 along Y body axis relative to center of gravity. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | m |   | ### CA_ROTOR2_PZ (`FLOAT`) {#CA_ROTOR2_PZ} Position of rotor 2 along Z body axis relative to center of gravity. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | m |   | ### CA_ROTOR2_TILT (`INT32`) {#CA_ROTOR2_TILT} @@ -22667,9 +24885,9 @@ If not set to None, this motor is tilted by the configured tilt servo. - `3`: Tilt 3 - `4`: Tilt 4 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### CA_ROTOR3_AX (`FLOAT`) {#CA_ROTOR3_AX} @@ -22677,9 +24895,9 @@ Axis of rotor 3 thrust vector, X body axis component. Only the direction is considered (the vector is normalized). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | |   | ### CA_ROTOR3_AY (`FLOAT`) {#CA_ROTOR3_AY} @@ -22687,9 +24905,9 @@ Axis of rotor 3 thrust vector, Y body axis component. Only the direction is considered (the vector is normalized). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | |   | ### CA_ROTOR3_AZ (`FLOAT`) {#CA_ROTOR3_AZ} @@ -22697,9 +24915,9 @@ Axis of rotor 3 thrust vector, Z body axis component. Only the direction is considered (the vector is normalized). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | -1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | -1.0 | |   | ### CA_ROTOR3_CT (`FLOAT`) {#CA_ROTOR3_CT} @@ -22709,45 +24927,46 @@ The thrust coefficient if defined as Thrust = CT \* u^2, where u (with value between actuator minimum and maximum) is the output signal sent to the motor controller. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 100 | 1 | 6.5 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 100 | 1 | 6.5 | |   | ### CA_ROTOR3_KM (`FLOAT`) {#CA_ROTOR3_KM} Moment coefficient of rotor 3. The moment coefficient if defined as Torque = KM \* Thrust. + Use a positive value for a rotor with CCW rotation. Use a negative value for a rotor with CW rotation. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 1 | 0.01 | 0.05 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1 | 0.01 | 0.05 | |   | ### CA_ROTOR3_PX (`FLOAT`) {#CA_ROTOR3_PX} Position of rotor 3 along X body axis relative to center of gravity. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | m |   | ### CA_ROTOR3_PY (`FLOAT`) {#CA_ROTOR3_PY} Position of rotor 3 along Y body axis relative to center of gravity. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | m |   | ### CA_ROTOR3_PZ (`FLOAT`) {#CA_ROTOR3_PZ} Position of rotor 3 along Z body axis relative to center of gravity. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | m |   | ### CA_ROTOR3_TILT (`INT32`) {#CA_ROTOR3_TILT} @@ -22763,9 +24982,9 @@ If not set to None, this motor is tilted by the configured tilt servo. - `3`: Tilt 3 - `4`: Tilt 4 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### CA_ROTOR4_AX (`FLOAT`) {#CA_ROTOR4_AX} @@ -22773,9 +24992,9 @@ Axis of rotor 4 thrust vector, X body axis component. Only the direction is considered (the vector is normalized). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | |   | ### CA_ROTOR4_AY (`FLOAT`) {#CA_ROTOR4_AY} @@ -22783,9 +25002,9 @@ Axis of rotor 4 thrust vector, Y body axis component. Only the direction is considered (the vector is normalized). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | |   | ### CA_ROTOR4_AZ (`FLOAT`) {#CA_ROTOR4_AZ} @@ -22793,9 +25012,9 @@ Axis of rotor 4 thrust vector, Z body axis component. Only the direction is considered (the vector is normalized). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | -1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | -1.0 | |   | ### CA_ROTOR4_CT (`FLOAT`) {#CA_ROTOR4_CT} @@ -22805,45 +25024,46 @@ The thrust coefficient if defined as Thrust = CT \* u^2, where u (with value between actuator minimum and maximum) is the output signal sent to the motor controller. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 100 | 1 | 6.5 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 100 | 1 | 6.5 | |   | ### CA_ROTOR4_KM (`FLOAT`) {#CA_ROTOR4_KM} Moment coefficient of rotor 4. The moment coefficient if defined as Torque = KM \* Thrust. + Use a positive value for a rotor with CCW rotation. Use a negative value for a rotor with CW rotation. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 1 | 0.01 | 0.05 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1 | 0.01 | 0.05 | |   | ### CA_ROTOR4_PX (`FLOAT`) {#CA_ROTOR4_PX} Position of rotor 4 along X body axis relative to center of gravity. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | m |   | ### CA_ROTOR4_PY (`FLOAT`) {#CA_ROTOR4_PY} Position of rotor 4 along Y body axis relative to center of gravity. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | m |   | ### CA_ROTOR4_PZ (`FLOAT`) {#CA_ROTOR4_PZ} Position of rotor 4 along Z body axis relative to center of gravity. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | m |   | ### CA_ROTOR4_TILT (`INT32`) {#CA_ROTOR4_TILT} @@ -22859,9 +25079,9 @@ If not set to None, this motor is tilted by the configured tilt servo. - `3`: Tilt 3 - `4`: Tilt 4 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### CA_ROTOR5_AX (`FLOAT`) {#CA_ROTOR5_AX} @@ -22869,9 +25089,9 @@ Axis of rotor 5 thrust vector, X body axis component. Only the direction is considered (the vector is normalized). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | |   | ### CA_ROTOR5_AY (`FLOAT`) {#CA_ROTOR5_AY} @@ -22879,9 +25099,9 @@ Axis of rotor 5 thrust vector, Y body axis component. Only the direction is considered (the vector is normalized). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | |   | ### CA_ROTOR5_AZ (`FLOAT`) {#CA_ROTOR5_AZ} @@ -22889,9 +25109,9 @@ Axis of rotor 5 thrust vector, Z body axis component. Only the direction is considered (the vector is normalized). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | -1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | -1.0 | |   | ### CA_ROTOR5_CT (`FLOAT`) {#CA_ROTOR5_CT} @@ -22901,45 +25121,46 @@ The thrust coefficient if defined as Thrust = CT \* u^2, where u (with value between actuator minimum and maximum) is the output signal sent to the motor controller. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 100 | 1 | 6.5 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 100 | 1 | 6.5 | |   | ### CA_ROTOR5_KM (`FLOAT`) {#CA_ROTOR5_KM} Moment coefficient of rotor 5. The moment coefficient if defined as Torque = KM \* Thrust. + Use a positive value for a rotor with CCW rotation. Use a negative value for a rotor with CW rotation. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 1 | 0.01 | 0.05 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1 | 0.01 | 0.05 | |   | ### CA_ROTOR5_PX (`FLOAT`) {#CA_ROTOR5_PX} Position of rotor 5 along X body axis relative to center of gravity. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | m |   | ### CA_ROTOR5_PY (`FLOAT`) {#CA_ROTOR5_PY} Position of rotor 5 along Y body axis relative to center of gravity. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | m |   | ### CA_ROTOR5_PZ (`FLOAT`) {#CA_ROTOR5_PZ} Position of rotor 5 along Z body axis relative to center of gravity. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | m |   | ### CA_ROTOR5_TILT (`INT32`) {#CA_ROTOR5_TILT} @@ -22955,9 +25176,9 @@ If not set to None, this motor is tilted by the configured tilt servo. - `3`: Tilt 3 - `4`: Tilt 4 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### CA_ROTOR6_AX (`FLOAT`) {#CA_ROTOR6_AX} @@ -22965,9 +25186,9 @@ Axis of rotor 6 thrust vector, X body axis component. Only the direction is considered (the vector is normalized). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | |   | ### CA_ROTOR6_AY (`FLOAT`) {#CA_ROTOR6_AY} @@ -22975,9 +25196,9 @@ Axis of rotor 6 thrust vector, Y body axis component. Only the direction is considered (the vector is normalized). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | |   | ### CA_ROTOR6_AZ (`FLOAT`) {#CA_ROTOR6_AZ} @@ -22985,9 +25206,9 @@ Axis of rotor 6 thrust vector, Z body axis component. Only the direction is considered (the vector is normalized). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | -1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | -1.0 | |   | ### CA_ROTOR6_CT (`FLOAT`) {#CA_ROTOR6_CT} @@ -22997,45 +25218,46 @@ The thrust coefficient if defined as Thrust = CT \* u^2, where u (with value between actuator minimum and maximum) is the output signal sent to the motor controller. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 100 | 1 | 6.5 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 100 | 1 | 6.5 | |   | ### CA_ROTOR6_KM (`FLOAT`) {#CA_ROTOR6_KM} Moment coefficient of rotor 6. The moment coefficient if defined as Torque = KM \* Thrust. + Use a positive value for a rotor with CCW rotation. Use a negative value for a rotor with CW rotation. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 1 | 0.01 | 0.05 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1 | 0.01 | 0.05 | |   | ### CA_ROTOR6_PX (`FLOAT`) {#CA_ROTOR6_PX} Position of rotor 6 along X body axis relative to center of gravity. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | m |   | ### CA_ROTOR6_PY (`FLOAT`) {#CA_ROTOR6_PY} Position of rotor 6 along Y body axis relative to center of gravity. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | m |   | ### CA_ROTOR6_PZ (`FLOAT`) {#CA_ROTOR6_PZ} Position of rotor 6 along Z body axis relative to center of gravity. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | m |   | ### CA_ROTOR6_TILT (`INT32`) {#CA_ROTOR6_TILT} @@ -23051,9 +25273,9 @@ If not set to None, this motor is tilted by the configured tilt servo. - `3`: Tilt 3 - `4`: Tilt 4 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### CA_ROTOR7_AX (`FLOAT`) {#CA_ROTOR7_AX} @@ -23061,9 +25283,9 @@ Axis of rotor 7 thrust vector, X body axis component. Only the direction is considered (the vector is normalized). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | |   | ### CA_ROTOR7_AY (`FLOAT`) {#CA_ROTOR7_AY} @@ -23071,9 +25293,9 @@ Axis of rotor 7 thrust vector, Y body axis component. Only the direction is considered (the vector is normalized). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | |   | ### CA_ROTOR7_AZ (`FLOAT`) {#CA_ROTOR7_AZ} @@ -23081,9 +25303,9 @@ Axis of rotor 7 thrust vector, Z body axis component. Only the direction is considered (the vector is normalized). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | -1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | -1.0 | |   | ### CA_ROTOR7_CT (`FLOAT`) {#CA_ROTOR7_CT} @@ -23093,45 +25315,46 @@ The thrust coefficient if defined as Thrust = CT \* u^2, where u (with value between actuator minimum and maximum) is the output signal sent to the motor controller. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 100 | 1 | 6.5 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 100 | 1 | 6.5 | |   | ### CA_ROTOR7_KM (`FLOAT`) {#CA_ROTOR7_KM} Moment coefficient of rotor 7. The moment coefficient if defined as Torque = KM \* Thrust. + Use a positive value for a rotor with CCW rotation. Use a negative value for a rotor with CW rotation. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 1 | 0.01 | 0.05 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1 | 0.01 | 0.05 | |   | ### CA_ROTOR7_PX (`FLOAT`) {#CA_ROTOR7_PX} Position of rotor 7 along X body axis relative to center of gravity. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | m |   | ### CA_ROTOR7_PY (`FLOAT`) {#CA_ROTOR7_PY} Position of rotor 7 along Y body axis relative to center of gravity. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | m |   | ### CA_ROTOR7_PZ (`FLOAT`) {#CA_ROTOR7_PZ} Position of rotor 7 along Z body axis relative to center of gravity. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | m |   | ### CA_ROTOR7_TILT (`INT32`) {#CA_ROTOR7_TILT} @@ -23147,9 +25370,9 @@ If not set to None, this motor is tilted by the configured tilt servo. - `3`: Tilt 3 - `4`: Tilt 4 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### CA_ROTOR8_AX (`FLOAT`) {#CA_ROTOR8_AX} @@ -23157,9 +25380,9 @@ Axis of rotor 8 thrust vector, X body axis component. Only the direction is considered (the vector is normalized). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | |   | ### CA_ROTOR8_AY (`FLOAT`) {#CA_ROTOR8_AY} @@ -23167,9 +25390,9 @@ Axis of rotor 8 thrust vector, Y body axis component. Only the direction is considered (the vector is normalized). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | |   | ### CA_ROTOR8_AZ (`FLOAT`) {#CA_ROTOR8_AZ} @@ -23177,9 +25400,9 @@ Axis of rotor 8 thrust vector, Z body axis component. Only the direction is considered (the vector is normalized). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | -1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | -1.0 | |   | ### CA_ROTOR8_CT (`FLOAT`) {#CA_ROTOR8_CT} @@ -23189,45 +25412,46 @@ The thrust coefficient if defined as Thrust = CT \* u^2, where u (with value between actuator minimum and maximum) is the output signal sent to the motor controller. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 100 | 1 | 6.5 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 100 | 1 | 6.5 | |   | ### CA_ROTOR8_KM (`FLOAT`) {#CA_ROTOR8_KM} Moment coefficient of rotor 8. The moment coefficient if defined as Torque = KM \* Thrust. + Use a positive value for a rotor with CCW rotation. Use a negative value for a rotor with CW rotation. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 1 | 0.01 | 0.05 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1 | 0.01 | 0.05 | |   | ### CA_ROTOR8_PX (`FLOAT`) {#CA_ROTOR8_PX} Position of rotor 8 along X body axis relative to center of gravity. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | m |   | ### CA_ROTOR8_PY (`FLOAT`) {#CA_ROTOR8_PY} Position of rotor 8 along Y body axis relative to center of gravity. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | m |   | ### CA_ROTOR8_PZ (`FLOAT`) {#CA_ROTOR8_PZ} Position of rotor 8 along Z body axis relative to center of gravity. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | m |   | ### CA_ROTOR8_TILT (`INT32`) {#CA_ROTOR8_TILT} @@ -23243,9 +25467,9 @@ If not set to None, this motor is tilted by the configured tilt servo. - `3`: Tilt 3 - `4`: Tilt 4 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### CA_ROTOR9_AX (`FLOAT`) {#CA_ROTOR9_AX} @@ -23253,9 +25477,9 @@ Axis of rotor 9 thrust vector, X body axis component. Only the direction is considered (the vector is normalized). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | |   | ### CA_ROTOR9_AY (`FLOAT`) {#CA_ROTOR9_AY} @@ -23263,9 +25487,9 @@ Axis of rotor 9 thrust vector, Y body axis component. Only the direction is considered (the vector is normalized). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | |   | ### CA_ROTOR9_AZ (`FLOAT`) {#CA_ROTOR9_AZ} @@ -23273,9 +25497,9 @@ Axis of rotor 9 thrust vector, Z body axis component. Only the direction is considered (the vector is normalized). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | -1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | -1.0 | |   | ### CA_ROTOR9_CT (`FLOAT`) {#CA_ROTOR9_CT} @@ -23285,45 +25509,46 @@ The thrust coefficient if defined as Thrust = CT \* u^2, where u (with value between actuator minimum and maximum) is the output signal sent to the motor controller. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 100 | 1 | 6.5 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 100 | 1 | 6.5 | |   | ### CA_ROTOR9_KM (`FLOAT`) {#CA_ROTOR9_KM} Moment coefficient of rotor 9. The moment coefficient if defined as Torque = KM \* Thrust. + Use a positive value for a rotor with CCW rotation. Use a negative value for a rotor with CW rotation. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 1 | 0.01 | 0.05 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1 | 0.01 | 0.05 | |   | ### CA_ROTOR9_PX (`FLOAT`) {#CA_ROTOR9_PX} Position of rotor 9 along X body axis relative to center of gravity. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | m |   | ### CA_ROTOR9_PY (`FLOAT`) {#CA_ROTOR9_PY} Position of rotor 9 along Y body axis relative to center of gravity. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | m |   | ### CA_ROTOR9_PZ (`FLOAT`) {#CA_ROTOR9_PZ} Position of rotor 9 along Z body axis relative to center of gravity. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -100 | 100 | 0.1 | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -100 | 100 | 0.1 | 0.0 | m |   | ### CA_ROTOR9_TILT (`INT32`) {#CA_ROTOR9_TILT} @@ -23339,9 +25564,9 @@ If not set to None, this motor is tilted by the configured tilt servo. - `3`: Tilt 3 - `4`: Tilt 4 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### CA_ROTOR_COUNT (`INT32`) {#CA_ROTOR_COUNT} @@ -23363,9 +25588,9 @@ Total number of rotors. - `11`: 11 - `12`: 12 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### CA_R_REV (`INT32`) {#CA_R_REV} @@ -23388,9 +25613,9 @@ Configure motors to be bidirectional/reversible. Note that the output driver nee - `10`: Motor 11 - `11`: Motor 12 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 4095 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 4095 | | 0 | |   | ### CA_SP0_ANG0 (`FLOAT`) {#CA_SP0_ANG0} @@ -23398,9 +25623,9 @@ Angle for swash plate servo 0. The angle is measured clockwise (as seen from top), with 0 pointing forwards (X axis). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 360 | 10 | 0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 360 | 10 | 0 | deg |   | ### CA_SP0_ANG1 (`FLOAT`) {#CA_SP0_ANG1} @@ -23408,9 +25633,9 @@ Angle for swash plate servo 1. The angle is measured clockwise (as seen from top), with 0 pointing forwards (X axis). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 360 | 10 | 140 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 360 | 10 | 140 | deg |   | ### CA_SP0_ANG2 (`FLOAT`) {#CA_SP0_ANG2} @@ -23418,9 +25643,9 @@ Angle for swash plate servo 2. The angle is measured clockwise (as seen from top), with 0 pointing forwards (X axis). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 360 | 10 | 220 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 360 | 10 | 220 | deg |   | ### CA_SP0_ANG3 (`FLOAT`) {#CA_SP0_ANG3} @@ -23428,9 +25653,9 @@ Angle for swash plate servo 3. The angle is measured clockwise (as seen from top), with 0 pointing forwards (X axis). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 360 | 10 | 0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 360 | 10 | 0 | deg |   | ### CA_SP0_ARM_L0 (`FLOAT`) {#CA_SP0_ARM_L0} @@ -23438,9 +25663,9 @@ Arm length for swash plate servo 0. This is relative to the other arm lengths. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 10 | 0.1 | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 10 | 0.1 | 1.0 | |   | ### CA_SP0_ARM_L1 (`FLOAT`) {#CA_SP0_ARM_L1} @@ -23448,9 +25673,9 @@ Arm length for swash plate servo 1. This is relative to the other arm lengths. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 10 | 0.1 | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 10 | 0.1 | 1.0 | |   | ### CA_SP0_ARM_L2 (`FLOAT`) {#CA_SP0_ARM_L2} @@ -23458,9 +25683,9 @@ Arm length for swash plate servo 2. This is relative to the other arm lengths. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 10 | 0.1 | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 10 | 0.1 | 1.0 | |   | ### CA_SP0_ARM_L3 (`FLOAT`) {#CA_SP0_ARM_L3} @@ -23468,9 +25693,9 @@ Arm length for swash plate servo 3. This is relative to the other arm lengths. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 10 | 0.1 | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 10 | 0.1 | 1.0 | |   | ### CA_SP0_COUNT (`INT32`) {#CA_SP0_COUNT} @@ -23482,9 +25707,9 @@ Number of swash plates servos. - `3`: 3 - `4`: 4 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 3 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 3 | |   | ### CA_SV0_SLEW (`FLOAT`) {#CA_SV0_SLEW} @@ -23492,11 +25717,12 @@ Servo 0 slew rate limit. Forces the servo output signal to take at least the configured time (in seconds) to traverse its full range [-100%, 100%]. + Zero means that slew rate limiting is disabled. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 10 | 0.05 | 0.0 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 10 | 0.05 | 0.0 | s |   | ### CA_SV1_SLEW (`FLOAT`) {#CA_SV1_SLEW} @@ -23504,11 +25730,12 @@ Servo 1 slew rate limit. Forces the servo output signal to take at least the configured time (in seconds) to traverse its full range [-100%, 100%]. + Zero means that slew rate limiting is disabled. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 10 | 0.05 | 0.0 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 10 | 0.05 | 0.0 | s |   | ### CA_SV2_SLEW (`FLOAT`) {#CA_SV2_SLEW} @@ -23516,11 +25743,12 @@ Servo 2 slew rate limit. Forces the servo output signal to take at least the configured time (in seconds) to traverse its full range [-100%, 100%]. + Zero means that slew rate limiting is disabled. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 10 | 0.05 | 0.0 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 10 | 0.05 | 0.0 | s |   | ### CA_SV3_SLEW (`FLOAT`) {#CA_SV3_SLEW} @@ -23528,11 +25756,12 @@ Servo 3 slew rate limit. Forces the servo output signal to take at least the configured time (in seconds) to traverse its full range [-100%, 100%]. + Zero means that slew rate limiting is disabled. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 10 | 0.05 | 0.0 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 10 | 0.05 | 0.0 | s |   | ### CA_SV4_SLEW (`FLOAT`) {#CA_SV4_SLEW} @@ -23540,11 +25769,12 @@ Servo 4 slew rate limit. Forces the servo output signal to take at least the configured time (in seconds) to traverse its full range [-100%, 100%]. + Zero means that slew rate limiting is disabled. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 10 | 0.05 | 0.0 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 10 | 0.05 | 0.0 | s |   | ### CA_SV5_SLEW (`FLOAT`) {#CA_SV5_SLEW} @@ -23552,11 +25782,12 @@ Servo 5 slew rate limit. Forces the servo output signal to take at least the configured time (in seconds) to traverse its full range [-100%, 100%]. + Zero means that slew rate limiting is disabled. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 10 | 0.05 | 0.0 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 10 | 0.05 | 0.0 | s |   | ### CA_SV6_SLEW (`FLOAT`) {#CA_SV6_SLEW} @@ -23564,11 +25795,12 @@ Servo 6 slew rate limit. Forces the servo output signal to take at least the configured time (in seconds) to traverse its full range [-100%, 100%]. + Zero means that slew rate limiting is disabled. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 10 | 0.05 | 0.0 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 10 | 0.05 | 0.0 | s |   | ### CA_SV7_SLEW (`FLOAT`) {#CA_SV7_SLEW} @@ -23576,63 +25808,65 @@ Servo 7 slew rate limit. Forces the servo output signal to take at least the configured time (in seconds) to traverse its full range [-100%, 100%]. + Zero means that slew rate limiting is disabled. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 10 | 0.05 | 0.0 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 10 | 0.05 | 0.0 | s |   | ### CA_SV_CS0_FLAP (`FLOAT`) {#CA_SV_CS0_FLAP} Control Surface 0 configuration as flap. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1.0 | 1.0 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1.0 | 1.0 | | 0 | |   | ### CA_SV_CS0_SPOIL (`FLOAT`) {#CA_SV_CS0_SPOIL} Control Surface 0 configuration as spoiler. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1.0 | 1.0 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1.0 | 1.0 | | 0 | |   | ### CA_SV_CS0_TRIM (`FLOAT`) {#CA_SV_CS0_TRIM} Control Surface 0 trim. Can be used to add an offset to the servo control. + NOTE: Do not use for PWM servos. Use the PWM CENTER parameters instead (e.g., PWM_MAIN_CENT, PWM_AUX_CENT) instead. This parameter can only be set if all PWM Center parameters are set to default. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1.0 | 1.0 | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1.0 | 1.0 | | 0.0 | |   | ### CA_SV_CS0_TRQ_P (`FLOAT`) {#CA_SV_CS0_TRQ_P} Control Surface 0 pitch torque scaling. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### CA_SV_CS0_TRQ_R (`FLOAT`) {#CA_SV_CS0_TRQ_R} Control Surface 0 roll torque scaling. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### CA_SV_CS0_TRQ_Y (`FLOAT`) {#CA_SV_CS0_TRQ_Y} Control Surface 0 yaw torque scaling. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### CA_SV_CS0_TYPE (`INT32`) {#CA_SV_CS0_TYPE} @@ -23660,61 +25894,62 @@ Control Surface 0 type. - `17`: Left Spoiler - `18`: Right Spoiler -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### CA_SV_CS1_FLAP (`FLOAT`) {#CA_SV_CS1_FLAP} Control Surface 1 configuration as flap. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1.0 | 1.0 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1.0 | 1.0 | | 0 | |   | ### CA_SV_CS1_SPOIL (`FLOAT`) {#CA_SV_CS1_SPOIL} Control Surface 1 configuration as spoiler. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1.0 | 1.0 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1.0 | 1.0 | | 0 | |   | ### CA_SV_CS1_TRIM (`FLOAT`) {#CA_SV_CS1_TRIM} Control Surface 1 trim. Can be used to add an offset to the servo control. + NOTE: Do not use for PWM servos. Use the PWM CENTER parameters instead (e.g., PWM_MAIN_CENT, PWM_AUX_CENT) instead. This parameter can only be set if all PWM Center parameters are set to default. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1.0 | 1.0 | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1.0 | 1.0 | | 0.0 | |   | ### CA_SV_CS1_TRQ_P (`FLOAT`) {#CA_SV_CS1_TRQ_P} Control Surface 1 pitch torque scaling. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### CA_SV_CS1_TRQ_R (`FLOAT`) {#CA_SV_CS1_TRQ_R} Control Surface 1 roll torque scaling. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### CA_SV_CS1_TRQ_Y (`FLOAT`) {#CA_SV_CS1_TRQ_Y} Control Surface 1 yaw torque scaling. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### CA_SV_CS1_TYPE (`INT32`) {#CA_SV_CS1_TYPE} @@ -23742,61 +25977,62 @@ Control Surface 1 type. - `17`: Left Spoiler - `18`: Right Spoiler -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### CA_SV_CS2_FLAP (`FLOAT`) {#CA_SV_CS2_FLAP} Control Surface 2 configuration as flap. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1.0 | 1.0 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1.0 | 1.0 | | 0 | |   | ### CA_SV_CS2_SPOIL (`FLOAT`) {#CA_SV_CS2_SPOIL} Control Surface 2 configuration as spoiler. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1.0 | 1.0 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1.0 | 1.0 | | 0 | |   | ### CA_SV_CS2_TRIM (`FLOAT`) {#CA_SV_CS2_TRIM} Control Surface 2 trim. Can be used to add an offset to the servo control. + NOTE: Do not use for PWM servos. Use the PWM CENTER parameters instead (e.g., PWM_MAIN_CENT, PWM_AUX_CENT) instead. This parameter can only be set if all PWM Center parameters are set to default. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1.0 | 1.0 | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1.0 | 1.0 | | 0.0 | |   | ### CA_SV_CS2_TRQ_P (`FLOAT`) {#CA_SV_CS2_TRQ_P} Control Surface 2 pitch torque scaling. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### CA_SV_CS2_TRQ_R (`FLOAT`) {#CA_SV_CS2_TRQ_R} Control Surface 2 roll torque scaling. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### CA_SV_CS2_TRQ_Y (`FLOAT`) {#CA_SV_CS2_TRQ_Y} Control Surface 2 yaw torque scaling. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### CA_SV_CS2_TYPE (`INT32`) {#CA_SV_CS2_TYPE} @@ -23824,61 +26060,62 @@ Control Surface 2 type. - `17`: Left Spoiler - `18`: Right Spoiler -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### CA_SV_CS3_FLAP (`FLOAT`) {#CA_SV_CS3_FLAP} Control Surface 3 configuration as flap. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1.0 | 1.0 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1.0 | 1.0 | | 0 | |   | ### CA_SV_CS3_SPOIL (`FLOAT`) {#CA_SV_CS3_SPOIL} Control Surface 3 configuration as spoiler. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1.0 | 1.0 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1.0 | 1.0 | | 0 | |   | ### CA_SV_CS3_TRIM (`FLOAT`) {#CA_SV_CS3_TRIM} Control Surface 3 trim. Can be used to add an offset to the servo control. + NOTE: Do not use for PWM servos. Use the PWM CENTER parameters instead (e.g., PWM_MAIN_CENT, PWM_AUX_CENT) instead. This parameter can only be set if all PWM Center parameters are set to default. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1.0 | 1.0 | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1.0 | 1.0 | | 0.0 | |   | ### CA_SV_CS3_TRQ_P (`FLOAT`) {#CA_SV_CS3_TRQ_P} Control Surface 3 pitch torque scaling. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### CA_SV_CS3_TRQ_R (`FLOAT`) {#CA_SV_CS3_TRQ_R} Control Surface 3 roll torque scaling. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### CA_SV_CS3_TRQ_Y (`FLOAT`) {#CA_SV_CS3_TRQ_Y} Control Surface 3 yaw torque scaling. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### CA_SV_CS3_TYPE (`INT32`) {#CA_SV_CS3_TYPE} @@ -23906,61 +26143,62 @@ Control Surface 3 type. - `17`: Left Spoiler - `18`: Right Spoiler -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### CA_SV_CS4_FLAP (`FLOAT`) {#CA_SV_CS4_FLAP} Control Surface 4 configuration as flap. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1.0 | 1.0 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1.0 | 1.0 | | 0 | |   | ### CA_SV_CS4_SPOIL (`FLOAT`) {#CA_SV_CS4_SPOIL} Control Surface 4 configuration as spoiler. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1.0 | 1.0 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1.0 | 1.0 | | 0 | |   | ### CA_SV_CS4_TRIM (`FLOAT`) {#CA_SV_CS4_TRIM} Control Surface 4 trim. Can be used to add an offset to the servo control. + NOTE: Do not use for PWM servos. Use the PWM CENTER parameters instead (e.g., PWM_MAIN_CENT, PWM_AUX_CENT) instead. This parameter can only be set if all PWM Center parameters are set to default. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1.0 | 1.0 | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1.0 | 1.0 | | 0.0 | |   | ### CA_SV_CS4_TRQ_P (`FLOAT`) {#CA_SV_CS4_TRQ_P} Control Surface 4 pitch torque scaling. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### CA_SV_CS4_TRQ_R (`FLOAT`) {#CA_SV_CS4_TRQ_R} Control Surface 4 roll torque scaling. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### CA_SV_CS4_TRQ_Y (`FLOAT`) {#CA_SV_CS4_TRQ_Y} Control Surface 4 yaw torque scaling. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### CA_SV_CS4_TYPE (`INT32`) {#CA_SV_CS4_TYPE} @@ -23988,61 +26226,62 @@ Control Surface 4 type. - `17`: Left Spoiler - `18`: Right Spoiler -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### CA_SV_CS5_FLAP (`FLOAT`) {#CA_SV_CS5_FLAP} Control Surface 5 configuration as flap. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1.0 | 1.0 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1.0 | 1.0 | | 0 | |   | ### CA_SV_CS5_SPOIL (`FLOAT`) {#CA_SV_CS5_SPOIL} Control Surface 5 configuration as spoiler. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1.0 | 1.0 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1.0 | 1.0 | | 0 | |   | ### CA_SV_CS5_TRIM (`FLOAT`) {#CA_SV_CS5_TRIM} Control Surface 5 trim. Can be used to add an offset to the servo control. + NOTE: Do not use for PWM servos. Use the PWM CENTER parameters instead (e.g., PWM_MAIN_CENT, PWM_AUX_CENT) instead. This parameter can only be set if all PWM Center parameters are set to default. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1.0 | 1.0 | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1.0 | 1.0 | | 0.0 | |   | ### CA_SV_CS5_TRQ_P (`FLOAT`) {#CA_SV_CS5_TRQ_P} Control Surface 5 pitch torque scaling. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### CA_SV_CS5_TRQ_R (`FLOAT`) {#CA_SV_CS5_TRQ_R} Control Surface 5 roll torque scaling. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### CA_SV_CS5_TRQ_Y (`FLOAT`) {#CA_SV_CS5_TRQ_Y} Control Surface 5 yaw torque scaling. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### CA_SV_CS5_TYPE (`INT32`) {#CA_SV_CS5_TYPE} @@ -24070,61 +26309,62 @@ Control Surface 5 type. - `17`: Left Spoiler - `18`: Right Spoiler -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### CA_SV_CS6_FLAP (`FLOAT`) {#CA_SV_CS6_FLAP} Control Surface 6 configuration as flap. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1.0 | 1.0 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1.0 | 1.0 | | 0 | |   | ### CA_SV_CS6_SPOIL (`FLOAT`) {#CA_SV_CS6_SPOIL} Control Surface 6 configuration as spoiler. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1.0 | 1.0 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1.0 | 1.0 | | 0 | |   | ### CA_SV_CS6_TRIM (`FLOAT`) {#CA_SV_CS6_TRIM} Control Surface 6 trim. Can be used to add an offset to the servo control. + NOTE: Do not use for PWM servos. Use the PWM CENTER parameters instead (e.g., PWM_MAIN_CENT, PWM_AUX_CENT) instead. This parameter can only be set if all PWM Center parameters are set to default. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1.0 | 1.0 | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1.0 | 1.0 | | 0.0 | |   | ### CA_SV_CS6_TRQ_P (`FLOAT`) {#CA_SV_CS6_TRQ_P} Control Surface 6 pitch torque scaling. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### CA_SV_CS6_TRQ_R (`FLOAT`) {#CA_SV_CS6_TRQ_R} Control Surface 6 roll torque scaling. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### CA_SV_CS6_TRQ_Y (`FLOAT`) {#CA_SV_CS6_TRQ_Y} Control Surface 6 yaw torque scaling. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### CA_SV_CS6_TYPE (`INT32`) {#CA_SV_CS6_TYPE} @@ -24152,61 +26392,62 @@ Control Surface 6 type. - `17`: Left Spoiler - `18`: Right Spoiler -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### CA_SV_CS7_FLAP (`FLOAT`) {#CA_SV_CS7_FLAP} Control Surface 7 configuration as flap. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1.0 | 1.0 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1.0 | 1.0 | | 0 | |   | ### CA_SV_CS7_SPOIL (`FLOAT`) {#CA_SV_CS7_SPOIL} Control Surface 7 configuration as spoiler. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1.0 | 1.0 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1.0 | 1.0 | | 0 | |   | ### CA_SV_CS7_TRIM (`FLOAT`) {#CA_SV_CS7_TRIM} Control Surface 7 trim. Can be used to add an offset to the servo control. + NOTE: Do not use for PWM servos. Use the PWM CENTER parameters instead (e.g., PWM_MAIN_CENT, PWM_AUX_CENT) instead. This parameter can only be set if all PWM Center parameters are set to default. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1.0 | 1.0 | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1.0 | 1.0 | | 0.0 | |   | ### CA_SV_CS7_TRQ_P (`FLOAT`) {#CA_SV_CS7_TRQ_P} Control Surface 7 pitch torque scaling. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### CA_SV_CS7_TRQ_R (`FLOAT`) {#CA_SV_CS7_TRQ_R} Control Surface 7 roll torque scaling. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### CA_SV_CS7_TRQ_Y (`FLOAT`) {#CA_SV_CS7_TRQ_Y} Control Surface 7 yaw torque scaling. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### CA_SV_CS7_TYPE (`INT32`) {#CA_SV_CS7_TYPE} @@ -24234,9 +26475,9 @@ Control Surface 7 type. - `17`: Left Spoiler - `18`: Right Spoiler -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### CA_SV_CS_COUNT (`INT32`) {#CA_SV_CS_COUNT} @@ -24254,17 +26495,17 @@ Total number of Control Surfaces. - `7`: 7 - `8`: 8 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### CA_SV_FLAP_SLEW (`FLOAT`) {#CA_SV_FLAP_SLEW} Control Surface slew rate for normalized flaps setpoint. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 5.0 | | 0.5 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 5.0 | | 0.5 | |   | ### CA_SV_TL0_CT (`INT32`) {#CA_SV_TL0_CT} @@ -24279,9 +26520,9 @@ Define if this servo is used for additional control. - `2`: Pitch - `3`: Yaw and Pitch -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 1 | |   | ### CA_SV_TL0_MAXA (`FLOAT`) {#CA_SV_TL0_MAXA} @@ -24290,9 +26531,9 @@ Tilt Servo 0 Tilt Angle at Maximum. Defines the tilt angle when the servo is at the maximum. An angle of zero means upwards. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -90.0 | 90.0 | | 90.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -90.0 | 90.0 | | 90.0 | deg |   | ### CA_SV_TL0_MINA (`FLOAT`) {#CA_SV_TL0_MINA} @@ -24301,9 +26542,9 @@ Tilt Servo 0 Tilt Angle at Minimum. Defines the tilt angle when the servo is at the minimum. An angle of zero means upwards. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -90.0 | 90.0 | | 0.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -90.0 | 90.0 | | 0.0 | deg |   | ### CA_SV_TL0_TD (`INT32`) {#CA_SV_TL0_TD} @@ -24318,9 +26559,9 @@ the motor axis aligns with the XZ-plane, points towards -X at the minimum and +X - `0`: Towards Front - `90`: Towards Right -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 359 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 359 | | 0 | |   | ### CA_SV_TL1_CT (`INT32`) {#CA_SV_TL1_CT} @@ -24335,9 +26576,9 @@ Define if this servo is used for additional control. - `2`: Pitch - `3`: Yaw and Pitch -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 1 | |   | ### CA_SV_TL1_MAXA (`FLOAT`) {#CA_SV_TL1_MAXA} @@ -24346,9 +26587,9 @@ Tilt Servo 1 Tilt Angle at Maximum. Defines the tilt angle when the servo is at the maximum. An angle of zero means upwards. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -90.0 | 90.0 | | 90.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -90.0 | 90.0 | | 90.0 | deg |   | ### CA_SV_TL1_MINA (`FLOAT`) {#CA_SV_TL1_MINA} @@ -24357,9 +26598,9 @@ Tilt Servo 1 Tilt Angle at Minimum. Defines the tilt angle when the servo is at the minimum. An angle of zero means upwards. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -90.0 | 90.0 | | 0.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -90.0 | 90.0 | | 0.0 | deg |   | ### CA_SV_TL1_TD (`INT32`) {#CA_SV_TL1_TD} @@ -24374,9 +26615,9 @@ the motor axis aligns with the XZ-plane, points towards -X at the minimum and +X - `0`: Towards Front - `90`: Towards Right -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 359 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 359 | | 0 | |   | ### CA_SV_TL2_CT (`INT32`) {#CA_SV_TL2_CT} @@ -24391,9 +26632,9 @@ Define if this servo is used for additional control. - `2`: Pitch - `3`: Yaw and Pitch -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 1 | |   | ### CA_SV_TL2_MAXA (`FLOAT`) {#CA_SV_TL2_MAXA} @@ -24402,9 +26643,9 @@ Tilt Servo 2 Tilt Angle at Maximum. Defines the tilt angle when the servo is at the maximum. An angle of zero means upwards. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -90.0 | 90.0 | | 90.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -90.0 | 90.0 | | 90.0 | deg |   | ### CA_SV_TL2_MINA (`FLOAT`) {#CA_SV_TL2_MINA} @@ -24413,9 +26654,9 @@ Tilt Servo 2 Tilt Angle at Minimum. Defines the tilt angle when the servo is at the minimum. An angle of zero means upwards. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -90.0 | 90.0 | | 0.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -90.0 | 90.0 | | 0.0 | deg |   | ### CA_SV_TL2_TD (`INT32`) {#CA_SV_TL2_TD} @@ -24430,9 +26671,9 @@ the motor axis aligns with the XZ-plane, points towards -X at the minimum and +X - `0`: Towards Front - `90`: Towards Right -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 359 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 359 | | 0 | |   | ### CA_SV_TL3_CT (`INT32`) {#CA_SV_TL3_CT} @@ -24447,9 +26688,9 @@ Define if this servo is used for additional control. - `2`: Pitch - `3`: Yaw and Pitch -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 1 | |   | ### CA_SV_TL3_MAXA (`FLOAT`) {#CA_SV_TL3_MAXA} @@ -24458,9 +26699,9 @@ Tilt Servo 3 Tilt Angle at Maximum. Defines the tilt angle when the servo is at the maximum. An angle of zero means upwards. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -90.0 | 90.0 | | 90.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -90.0 | 90.0 | | 90.0 | deg |   | ### CA_SV_TL3_MINA (`FLOAT`) {#CA_SV_TL3_MINA} @@ -24469,9 +26710,9 @@ Tilt Servo 3 Tilt Angle at Minimum. Defines the tilt angle when the servo is at the minimum. An angle of zero means upwards. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -90.0 | 90.0 | | 0.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -90.0 | 90.0 | | 0.0 | deg |   | ### CA_SV_TL3_TD (`INT32`) {#CA_SV_TL3_TD} @@ -24486,9 +26727,9 @@ the motor axis aligns with the XZ-plane, points towards -X at the minimum and +X - `0`: Towards Front - `90`: Towards Right -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 359 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 359 | | 0 | |   | ### CA_SV_TL_COUNT (`INT32`) {#CA_SV_TL_COUNT} @@ -24502,9 +26743,9 @@ Total number of Tilt Servos. - `3`: 3 - `4`: 4 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### SIM_GZ_SV_MAXA1 (`FLOAT`) {#SIM_GZ_SV_MAXA1} @@ -24513,9 +26754,9 @@ Servo 1 Angle at Maximum. Defines the angle when the servo is at the maximum. Currently only supported in gz simulation and must be coherent with .sdf file and CA_SV_TL{n}\_MAXA. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -180.0 | 180.0 | | 45.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -180.0 | 180.0 | | 45.0 | deg |   | ### SIM_GZ_SV_MAXA2 (`FLOAT`) {#SIM_GZ_SV_MAXA2} @@ -24524,9 +26765,9 @@ Servo 2 Angle at Maximum. Defines the angle when the servo is at the maximum. Currently only supported in gz simulation and must be coherent with .sdf file and CA_SV_TL{n}\_MAXA. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -180.0 | 180.0 | | 45.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -180.0 | 180.0 | | 45.0 | deg |   | ### SIM_GZ_SV_MAXA3 (`FLOAT`) {#SIM_GZ_SV_MAXA3} @@ -24535,9 +26776,9 @@ Servo 3 Angle at Maximum. Defines the angle when the servo is at the maximum. Currently only supported in gz simulation and must be coherent with .sdf file and CA_SV_TL{n}\_MAXA. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -180.0 | 180.0 | | 45.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -180.0 | 180.0 | | 45.0 | deg |   | ### SIM_GZ_SV_MAXA4 (`FLOAT`) {#SIM_GZ_SV_MAXA4} @@ -24546,9 +26787,9 @@ Servo 4 Angle at Maximum. Defines the angle when the servo is at the maximum. Currently only supported in gz simulation and must be coherent with .sdf file and CA_SV_TL{n}\_MAXA. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -180.0 | 180.0 | | 45.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -180.0 | 180.0 | | 45.0 | deg |   | ### SIM_GZ_SV_MAXA5 (`FLOAT`) {#SIM_GZ_SV_MAXA5} @@ -24557,9 +26798,9 @@ Servo 5 Angle at Maximum. Defines the angle when the servo is at the maximum. Currently only supported in gz simulation and must be coherent with .sdf file and CA_SV_TL{n}\_MAXA. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -180.0 | 180.0 | | 45.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -180.0 | 180.0 | | 45.0 | deg |   | ### SIM_GZ_SV_MAXA6 (`FLOAT`) {#SIM_GZ_SV_MAXA6} @@ -24568,9 +26809,9 @@ Servo 6 Angle at Maximum. Defines the angle when the servo is at the maximum. Currently only supported in gz simulation and must be coherent with .sdf file and CA_SV_TL{n}\_MAXA. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -180.0 | 180.0 | | 45.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -180.0 | 180.0 | | 45.0 | deg |   | ### SIM_GZ_SV_MAXA7 (`FLOAT`) {#SIM_GZ_SV_MAXA7} @@ -24579,9 +26820,9 @@ Servo 7 Angle at Maximum. Defines the angle when the servo is at the maximum. Currently only supported in gz simulation and must be coherent with .sdf file and CA_SV_TL{n}\_MAXA. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -180.0 | 180.0 | | 45.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -180.0 | 180.0 | | 45.0 | deg |   | ### SIM_GZ_SV_MAXA8 (`FLOAT`) {#SIM_GZ_SV_MAXA8} @@ -24590,9 +26831,9 @@ Servo 8 Angle at Maximum. Defines the angle when the servo is at the maximum. Currently only supported in gz simulation and must be coherent with .sdf file and CA_SV_TL{n}\_MAXA. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -180.0 | 180.0 | | 45.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -180.0 | 180.0 | | 45.0 | deg |   | ### SIM_GZ_SV_MINA1 (`FLOAT`) {#SIM_GZ_SV_MINA1} @@ -24601,9 +26842,9 @@ Servo 1 Angle at Minimum. Defines the angle when the servo is at the minimum. Currently only supported in gz simulation and must be coherent with .sdf file and CA_SV_TL{n}\_MINA. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -180.0 | 180.0 | | -45.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -180.0 | 180.0 | | -45.0 | deg |   | ### SIM_GZ_SV_MINA2 (`FLOAT`) {#SIM_GZ_SV_MINA2} @@ -24612,9 +26853,9 @@ Servo 2 Angle at Minimum. Defines the angle when the servo is at the minimum. Currently only supported in gz simulation and must be coherent with .sdf file and CA_SV_TL{n}\_MINA. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -180.0 | 180.0 | | -45.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -180.0 | 180.0 | | -45.0 | deg |   | ### SIM_GZ_SV_MINA3 (`FLOAT`) {#SIM_GZ_SV_MINA3} @@ -24623,9 +26864,9 @@ Servo 3 Angle at Minimum. Defines the angle when the servo is at the minimum. Currently only supported in gz simulation and must be coherent with .sdf file and CA_SV_TL{n}\_MINA. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -180.0 | 180.0 | | -45.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -180.0 | 180.0 | | -45.0 | deg |   | ### SIM_GZ_SV_MINA4 (`FLOAT`) {#SIM_GZ_SV_MINA4} @@ -24634,9 +26875,9 @@ Servo 4 Angle at Minimum. Defines the angle when the servo is at the minimum. Currently only supported in gz simulation and must be coherent with .sdf file and CA_SV_TL{n}\_MINA. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -180.0 | 180.0 | | -45.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -180.0 | 180.0 | | -45.0 | deg |   | ### SIM_GZ_SV_MINA5 (`FLOAT`) {#SIM_GZ_SV_MINA5} @@ -24645,9 +26886,9 @@ Servo 5 Angle at Minimum. Defines the angle when the servo is at the minimum. Currently only supported in gz simulation and must be coherent with .sdf file and CA_SV_TL{n}\_MINA. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -180.0 | 180.0 | | -45.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -180.0 | 180.0 | | -45.0 | deg |   | ### SIM_GZ_SV_MINA6 (`FLOAT`) {#SIM_GZ_SV_MINA6} @@ -24656,9 +26897,9 @@ Servo 6 Angle at Minimum. Defines the angle when the servo is at the minimum. Currently only supported in gz simulation and must be coherent with .sdf file and CA_SV_TL{n}\_MINA. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -180.0 | 180.0 | | -45.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -180.0 | 180.0 | | -45.0 | deg |   | ### SIM_GZ_SV_MINA7 (`FLOAT`) {#SIM_GZ_SV_MINA7} @@ -24667,9 +26908,9 @@ Servo 7 Angle at Minimum. Defines the angle when the servo is at the minimum. Currently only supported in gz simulation and must be coherent with .sdf file and CA_SV_TL{n}\_MINA. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -180.0 | 180.0 | | -45.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -180.0 | 180.0 | | -45.0 | deg |   | ### SIM_GZ_SV_MINA8 (`FLOAT`) {#SIM_GZ_SV_MINA8} @@ -24678,9 +26919,9 @@ Servo 8 Angle at Minimum. Defines the angle when the servo is at the minimum. Currently only supported in gz simulation and must be coherent with .sdf file and CA_SV_TL{n}\_MINA. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -180.0 | 180.0 | | -45.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -180.0 | 180.0 | | -45.0 | deg |   | ## Hover Thrust Estimator @@ -24691,9 +26932,9 @@ Gate size for acceleration fusion. Sets the number of standard deviations used by the innovation consistency test. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1.0 | 10.0 | | 3.0 | SD | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1.0 | 10.0 | | 3.0 | SD |   | ### HTE_HT_ERR_INIT (`FLOAT`) {#HTE_HT_ERR_INIT} @@ -24702,9 +26943,9 @@ by the innovation consistency test. Sets the number of standard deviations used by the innovation consistency test. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----------------- | -|   | 0.0 | 1.0 | | 0.1 | normalized_thrust | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----------------- | --------- | +|   | 0.0 | 1.0 | | 0.1 | normalized_thrust |   | ### HTE_HT_NOISE (`FLOAT`) {#HTE_HT_NOISE} @@ -24714,9 +26955,9 @@ Reduce to make the hover thrust estimate more stable, increase if the real hover thrust is expected to change quickly over time. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ------------------- | -|   | 0.0001 | 1.0 | | 0.0036 | normalized_thrust/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ------------------- | --------- | +|   | 0.0001 | 1.0 | | 0.0036 | normalized_thrust/s |   | ### HTE_THR_RANGE (`FLOAT`) {#HTE_THR_RANGE} @@ -24724,12 +26965,13 @@ Max deviation from MPC_THR_HOVER. Defines the range of the hover thrust estimate around MPC_THR_HOVER. A value of 0.2 with MPC_THR_HOVER at 0.5 results in a range of [0.3, 0.7]. + Set to a large value if the vehicle operates in varying physical conditions that affect the required hover thrust strongly (e.g. differently sized payloads). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----------------- | -|   | 0.01 | 0.4 | | 0.2 | normalized_thrust | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----------------- | --------- | +|   | 0.01 | 0.4 | | 0.2 | normalized_thrust |   | ### HTE_VXY_THR (`FLOAT`) {#HTE_VXY_THR} @@ -24737,11 +26979,12 @@ Horizontal velocity threshold for sensitivity reduction. Above this speed, the measurement noise is linearly increased to reduce the sensitivity of the estimator from biased measurement. + Set to a low value on vehicles with large lifting surfaces. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1.0 | 20.0 | | 10.0 | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1.0 | 20.0 | | 10.0 | m/s |   | ### HTE_VZ_THR (`FLOAT`) {#HTE_VZ_THR} @@ -24749,11 +26992,12 @@ Vertical velocity threshold for sensitivity reduction. Above this speed, the measurement noise is linearly increased to reduce the sensitivity of the estimator from biased measurement. + Set to a low value on vehicles affected by air drag when climbing or descending. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1.0 | 10.0 | | 2.0 | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1.0 | 10.0 | | 2.0 | m/s |   | ## ICE @@ -24761,17 +27005,17 @@ Set to a low value on vehicles affected by air drag when climbing or descending. Duration of choking during startup. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 10 | 0.1 | 5 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 10 | 0.1 | 5 | s |   | ### ICE_EN (`INT32`) {#ICE_EN} Enable internal combustion engine. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------------ | ---- | -|   | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------------ | ---- | --------- | +|   | | | | Disabled (0) | |   | ### ICE_IGN_DELAY (`FLOAT`) {#ICE_IGN_DELAY} @@ -24779,17 +27023,17 @@ Cold-start delay after ignition before engaging starter. In case that the ignition takes a moment to be up and running, this parameter can be set to account for that. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 10 | 0.1 | 0 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 10 | 0.1 | 0 | s |   | ### ICE_MIN_RUN_RPM (`FLOAT`) {#ICE_MIN_RUN_RPM} Minimum RPM for engine to be declared running. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 10000 | 1 | 2000 | rpm | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 10000 | 1 | 2000 | rpm |   | ### ICE_ON_SOURCE (`INT32`) {#ICE_ON_SOURCE} @@ -24802,9 +27046,9 @@ Engine start/stop input source. - `2`: Aux2 - `3`: On Vtol Transitions -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### ICE_RUN_FAULT_D (`INT32`) {#ICE_RUN_FAULT_D} @@ -24813,17 +27057,17 @@ Fault detection if it stops in running state. Enables restart if a fault is detected during the running state. Otherwise commands continues in running state until given an user request off. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ----------- | ---- | -|   | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ----------- | ---- | --------- | +|   | | | | Enabled (1) | |   | ### ICE_STOP_CHOKE (`INT32`) {#ICE_STOP_CHOKE} Apply choke when stopping engine. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ----------- | ---- | -|   | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ----------- | ---- | --------- | +|   | | | | Enabled (1) | |   | ### ICE_STRT_ATTEMPT (`INT32`) {#ICE_STRT_ATTEMPT} @@ -24831,9 +27075,9 @@ Number attempts for starting the engine. Number of accepted attempts for starting the engine before declaring a fault. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 10 | | 3 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 10 | | 3 | |   | ### ICE_STRT_DUR (`FLOAT`) {#ICE_STRT_DUR} @@ -24841,9 +27085,9 @@ Duration of single starting attempt (excl. choking). Maximum expected time for startup before declaring timeout. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 10 | 0.1 | 5 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 10 | 0.1 | 5 | s |   | ### ICE_STRT_THR (`FLOAT`) {#ICE_STRT_THR} @@ -24851,9 +27095,9 @@ Throttle value for starting engine. During the choking and the starting phase, the throttle value is set to this value. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1 | 0.01 | 0.1 | norm | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1 | 0.01 | 0.1 | norm |   | ### ICE_THR_SLEW (`FLOAT`) {#ICE_THR_SLEW} @@ -24861,9 +27105,9 @@ Throttle slew rate. Maximum rate of change of throttle value per second. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1 | 0.01 | 0.5 | 1/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1 | 0.01 | 0.5 | 1/s |   | ## Iridium SBD @@ -24888,35 +27132,39 @@ Configure on which serial port to run Iridium (with MAVLink). - `301`: Wifi Port - `401`: EXT2 -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### ISBD_READ_INT (`INT32`) {#ISBD_READ_INT} -Satellite radio read interval. Only required to be nonzero if data is not sent using a ring call. +Iridium SBD read interval. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 5000 | | 0 | s | +Satellite radio read interval. Only required to be nonzero if data is not sent using a ring call + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 5000 | | 0 | s |   | ### ISBD_SBD_TIMEOUT (`INT32`) {#ISBD_SBD_TIMEOUT} Iridium SBD session timeout. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 300 | | 60 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 300 | | 60 | s |   | ### ISBD_STACK_TIME (`INT32`) {#ISBD_STACK_TIME} -Time the Iridium driver will wait for additional mavlink messages to combine them into one SBD message. +Iridium SBD message stacking wait time. + +Time the Iridium driver will wait for additional mavlink messages to combine them into one SBD message Value 0 turns the functionality off -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 500 | | 0 | ms | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 500 | | 0 | ms |   | ## Land Detector @@ -24926,9 +27174,9 @@ Fixed-wing land detector: Max airspeed. Maximum airspeed allowed in the landed state -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 2 | 30 | | 6.00 | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 2 | 30 | | 6.0 | m/s |   | ### LNDFW_ROT_MAX (`FLOAT`) {#LNDFW_ROT_MAX} @@ -24937,9 +27185,9 @@ Fixed-wing land detector: max rotational speed. Maximum allowed norm of the angular velocity in the landed state. Only used if neither airspeed nor groundspeed can be used for landing detection. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | | | | 0.5 | deg/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | | | | 0.5 | deg/s |   | ### LNDFW_TRIG_TIME (`FLOAT`) {#LNDFW_TRIG_TIME} @@ -24947,9 +27195,9 @@ Fixed-wing land detection trigger time. Time the land conditions (speeds and acceleration) have to be satisfied to detect a landing. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0.1 | | | 2. | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0.1 | | | 2.0 | s |   | ### LNDFW_VEL_XY_MAX (`FLOAT`) {#LNDFW_VEL_XY_MAX} @@ -24959,9 +27207,9 @@ Maximum horizontal velocity allowed in the landed state. A factor of 0.7 is applied in case of airspeed-less flying (either because no sensor is present or sensor data got invalid in flight). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.5 | 20 | | 5.0 | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.5 | 20 | | 5.0 | m/s |   | ### LNDFW_VEL_Z_MAX (`FLOAT`) {#LNDFW_VEL_Z_MAX} @@ -24969,9 +27217,9 @@ Fixed-wing land detector: Max vertiacal velocity threshold. Maximum vertical velocity allowed in the landed state. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 20 | | 1.0 | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 20 | | 1.0 | m/s |   | ### LNDFW_XYACC_MAX (`FLOAT`) {#LNDFW_XYACC_MAX} @@ -24979,9 +27227,9 @@ Fixed-wing land detector: Max horizontal acceleration. Maximum horizontal (x,y body axes) acceleration allowed in the landed state -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 2 | 30 | | 8.0 | m/s^2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | 2 | 30 | | 8.0 | m/s^2 |   | ### LNDMC_ALT_GND (`FLOAT`) {#LNDMC_ALT_GND} @@ -24990,9 +27238,9 @@ Ground effect altitude for multicopters. The height above ground below which ground effect creates barometric altitude errors. A negative value indicates no ground effect. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | | | 2. | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | | | 2.0 | m |   | ### LNDMC_ROT_MAX (`FLOAT`) {#LNDMC_ROT_MAX} @@ -25000,9 +27248,9 @@ Multicopter max rotational speed. Maximum allowed norm of the angular velocity (roll, pitch) in the landed state. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | | | | 20.0 | deg/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | | | | 20.0 | deg/s |   | ### LNDMC_XY_VEL_MAX (`FLOAT`) {#LNDMC_XY_VEL_MAX} @@ -25010,9 +27258,9 @@ Multicopter max horizontal velocity. Maximum horizontal velocity allowed in the landed state -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 1.5 | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 1.5 | m/s |   | ### LNDMC_Z_VEL_MAX (`FLOAT`) {#LNDMC_Z_VEL_MAX} @@ -25023,9 +27271,9 @@ Has to be set lower than the expected minimal speed for landing, which is either MPC_LAND_SPEED or MPC_LAND_CRWL. This is enforced by an automatic check. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | | | 0.25 | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | | | 0.25 | m/s |   | ### LND_FLIGHT_T_HI (`INT32`) {#LND_FLIGHT_T_HI} @@ -25034,9 +27282,9 @@ Total flight time in microseconds. Total flight time of this autopilot. Higher 32 bits of the value. Flight time in microseconds = (LND_FLIGHT_T_HI << 32) | LND_FLIGHT_T_LO. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | | | 0 | |   | ### LND_FLIGHT_T_LO (`INT32`) {#LND_FLIGHT_T_LO} @@ -25045,9 +27293,9 @@ Total flight time in microseconds. Total flight time of this autopilot. Lower 32 bits of the value. Flight time in microseconds = (LND_FLIGHT_T_HI << 32) | LND_FLIGHT_T_LO. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | | | 0 | |   | ## Landing Target Estimator @@ -25058,9 +27306,9 @@ Acceleration uncertainty. Variance of acceleration measurement used for landing target position prediction. Higher values results in tighter following of the measurements and more lenient outlier rejection -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | --------- | -|   | 0.01 | | | 10.0 | (m/s^2)^2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | --------- | --------- | +|   | 0.01 | | | 10.0 | (m/s^2)^2 |   | ### LTEST_MEAS_UNC (`FLOAT`) {#LTEST_MEAS_UNC} @@ -25069,15 +27317,16 @@ Landing target measurement uncertainty. Variance of the landing target measurement from the driver. Higher values result in less aggressive following of the measurement and a smoother output as well as fewer rejected measurements. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---------- | -|   | | | | 0.005 | tan(rad)^2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---------- | --------- | +|   | | | | 0.005 | tan(rad)^2 |   | ### LTEST_MODE (`INT32`) {#LTEST_MODE} Landing target mode. Configure the mode of the landing target. Depending on the mode, the landing target observations are used differently to aid position estimation. + Mode Moving: The landing target may be moving around while in the field of view of the vehicle. Landing target measurements are not used to aid positioning. Mode Stationary: The landing target is stationary. Measured velocity w.r.t. the landing target is used to aid velocity estimation. @@ -25086,9 +27335,9 @@ Mode Stationary: The landing target is stationary. Measured velocity w.r.t. the - `0`: Moving - `1`: Stationary -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1 | | 0 | |   | ### LTEST_POS_UNC_IN (`FLOAT`) {#LTEST_POS_UNC_IN} @@ -25096,9 +27345,9 @@ Initial landing target position uncertainty. Initial variance of the relative landing target position in x and y direction -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.001 | | | 0.1 | m^2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.001 | | | 0.1 | m^2 |   | ### LTEST_SCALE_X (`FLOAT`) {#LTEST_SCALE_X} @@ -25106,9 +27355,9 @@ Scale factor for sensor measurements in sensor x axis. Landing target x measurements are scaled by this factor before being used -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.01 | | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.01 | | | 1.0 | |   | ### LTEST_SCALE_Y (`FLOAT`) {#LTEST_SCALE_Y} @@ -25116,33 +27365,33 @@ Scale factor for sensor measurements in sensor y axis. Landing target y measurements are scaled by this factor before being used -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.01 | | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.01 | | | 1.0 | |   | ### LTEST_SENS_POS_X (`FLOAT`) {#LTEST_SENS_POS_X} X Position of IRLOCK in body frame (forward). -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0.0 | m |   | ### LTEST_SENS_POS_Y (`FLOAT`) {#LTEST_SENS_POS_Y} Y Position of IRLOCK in body frame (right). -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0.0 | m |   | ### LTEST_SENS_POS_Z (`FLOAT`) {#LTEST_SENS_POS_Z} Z Position of IRLOCK in body frame (downward). -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0.0 | m |   | ### LTEST_SENS_ROT (`INT32`) {#LTEST_SENS_ROT} @@ -25161,9 +27410,9 @@ Default orientation of Yaw 90° - `6`: Yaw 270° - `7`: Yaw 315° -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | -1 | 40 | | 2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | -1 | 40 | | 2 | |   | ### LTEST_VEL_UNC_IN (`FLOAT`) {#LTEST_VEL_UNC_IN} @@ -25171,9 +27420,9 @@ Initial landing target velocity uncertainty. Initial variance of the relative landing target velocity in x and y directions -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ------- | -|   | 0.001 | | | 0.1 | (m/s)^2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ------- | --------- | +|   | 0.001 | | | 0.1 | (m/s)^2 |   | ## Local Position Estimator @@ -25182,11 +27431,12 @@ Initial variance of the relative landing target velocity in x and y directions Accelerometer xy noise density. Data sheet noise density = 150ug/sqrt(Hz) = 0.0015 m/s^2/sqrt(Hz) + Larger than data sheet to account for tilt error. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | -------------- | -|   | 0.00001 | 2 | | 0.012 | m/s^2/sqrt(Hz) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | -------------- | --------- | +|   | 1e-05 | 2 | | 0.012 | m/s^2/sqrt(Hz) |   | ### LPE_ACC_Z (`FLOAT`) {#LPE_ACC_Z} @@ -25194,99 +27444,101 @@ Accelerometer z noise density. Data sheet noise density = 150ug/sqrt(Hz) = 0.0015 m/s^2/sqrt(Hz) -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | -------------- | -|   | 0.00001 | 2 | | 0.02 | m/s^2/sqrt(Hz) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | -------------- | --------- | +|   | 1e-05 | 2 | | 0.02 | m/s^2/sqrt(Hz) |   | ### LPE_BAR_Z (`FLOAT`) {#LPE_BAR_Z} -Barometric presssure altitude z standard deviation. +Barometric pressure altitude z standard deviation. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.01 | 100 | | 3.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.01 | 100 | | 3.0 | m |   | ### LPE_EN (`INT32`) {#LPE_EN} Local position estimator enable (unsupported). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------------ | ---- | -|   | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------------ | ---- | --------- | +|   | | | | Disabled (0) | |   | ### LPE_EPH_MAX (`FLOAT`) {#LPE_EPH_MAX} Max EPH allowed for GPS initialization. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1.0 | 5.0 | | 3.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1.0 | 5.0 | | 3.0 | m |   | ### LPE_EPV_MAX (`FLOAT`) {#LPE_EPV_MAX} Max EPV allowed for GPS initialization. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1.0 | 5.0 | | 5.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1.0 | 5.0 | | 5.0 | m |   | ### LPE_FAKE_ORIGIN (`INT32`) {#LPE_FAKE_ORIGIN} -Enable publishing of a fake global position (e.g for AUTO missions using Optical Flow). +Enable fake global position for optical flow. + +Enable publishing of a fake global position (e.g for AUTO missions using Optical Flow) By initializing the estimator to the LPE_LAT/LON parameters when global information is unavailable -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1 | | 0 | |   | ### LPE_FGYRO_HP (`FLOAT`) {#LPE_FGYRO_HP} Flow gyro high pass filter cut off frequency. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 2 | | 0.001 | Hz | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 2 | | 0.001 | Hz |   | ### LPE_FLW_OFF_Z (`FLOAT`) {#LPE_FLW_OFF_Z} Optical flow z offset from center. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 1 | | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1 | | 0.0 | m |   | ### LPE_FLW_QMIN (`INT32`) {#LPE_FLW_QMIN} Optical flow minimum quality threshold. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 255 | | 150 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 255 | | 150 | |   | ### LPE_FLW_R (`FLOAT`) {#LPE_FLW_R} Optical flow rotation (roll/pitch) noise gain. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ------- | -|   | 0.1 | 10.0 | | 7.0 | m/s/rad | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ------- | --------- | +|   | 0.1 | 10.0 | | 7.0 | m/s/rad |   | ### LPE_FLW_RR (`FLOAT`) {#LPE_FLW_RR} Optical flow angular velocity noise gain. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 0.0 | 10.0 | | 7.0 | m/rad | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | 0.0 | 10.0 | | 7.0 | m/rad |   | ### LPE_FLW_SCALE (`FLOAT`) {#LPE_FLW_SCALE} Optical flow scale. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 10.0 | | 1.3 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 10.0 | | 1.3 | m |   | ### LPE_FUSION (`INT32`) {#LPE_FUSION} @@ -25301,6 +27553,7 @@ Set bits in the following positions to enable: 5 : Set to true to publish AGL as local position down component 6 : Set to true to enable flow gyro compensation 7 : Set to true to enable baro fusion + default (145 - GPS, baro, land detector) **Bitmask:** @@ -25314,17 +27567,17 @@ default (145 - GPS, baro, land detector) - `6`: flow gyro compensation - `7`: fuse baro -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 255 | | 145 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 255 | | 145 | |   | ### LPE_GPS_DELAY (`FLOAT`) {#LPE_GPS_DELAY} -GPS delay compensaton. +GPS delay compensation. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 0.4 | | 0.29 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 0.4 | | 0.29 | s |   | ### LPE_GPS_VXY (`FLOAT`) {#LPE_GPS_VXY} @@ -25332,97 +27585,99 @@ GPS xy velocity standard deviation. EPV used if greater than this value. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.01 | 2 | | 0.25 | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.01 | 2 | | 0.25 | m/s |   | ### LPE_GPS_VZ (`FLOAT`) {#LPE_GPS_VZ} GPS z velocity standard deviation. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.01 | 2 | | 0.25 | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.01 | 2 | | 0.25 | m/s |   | ### LPE_GPS_XY (`FLOAT`) {#LPE_GPS_XY} Minimum GPS xy standard deviation, uses reported EPH if greater. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.01 | 5 | | 1.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.01 | 5 | | 1.0 | m |   | ### LPE_GPS_Z (`FLOAT`) {#LPE_GPS_Z} Minimum GPS z standard deviation, uses reported EPV if greater. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.01 | 200 | | 3.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.01 | 200 | | 3.0 | m |   | ### LPE_LAND_VXY (`FLOAT`) {#LPE_LAND_VXY} Land detector xy velocity standard deviation. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.01 | 10.0 | | 0.05 | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.01 | 10.0 | | 0.05 | m/s |   | ### LPE_LAND_Z (`FLOAT`) {#LPE_LAND_Z} Land detector z standard deviation. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.001 | 10.0 | | 0.03 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.001 | 10.0 | | 0.03 | m |   | ### LPE_LAT (`FLOAT`) {#LPE_LAT} Local origin latitude for nav w/o GPS. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | --------- | ---- | -|   | -90 | 90 | | 47.397742 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | --------- | ---- | --------- | +|   | -90 | 90 | | 47.397742 | deg |   | ### LPE_LDR_OFF_Z (`FLOAT`) {#LPE_LDR_OFF_Z} Lidar z offset from center of vehicle +down. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 1 | | 0.00 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1 | | 0.0 | m |   | ### LPE_LDR_Z (`FLOAT`) {#LPE_LDR_Z} Lidar z standard deviation. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.01 | 1 | | 0.03 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.01 | 1 | | 0.03 | m |   | ### LPE_LON (`FLOAT`) {#LPE_LON} Local origin longitude for nav w/o GPS. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | -------- | ---- | -|   | -180 | 180 | | 8.545594 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | -------- | ---- | --------- | +|   | -180 | 180 | | 8.545594 | deg |   | ### LPE_LT_COV (`FLOAT`) {#LPE_LT_COV} -Minimum landing target standard covariance, uses reported covariance if greater. +Minimum landing target standard covariance. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 10 | | 0.0001 | m^2 | +Minimum landing target standard covariance, uses reported covariance if greater + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 10 | | 0.0001 | m^2 |   | ### LPE_PN_B (`FLOAT`) {#LPE_PN_B} Accel bias propagation noise density. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | -------------- | -|   | 0 | 1 | | 1e-3 | m/s^3/sqrt(Hz) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | -------------- | --------- | +|   | 0 | 1 | | 0.001 | m/s^3/sqrt(Hz) |   | ### LPE_PN_P (`FLOAT`) {#LPE_PN_P} @@ -25431,17 +27686,19 @@ Position propagation noise density. Increase to trust measurements more. Decrease to trust model more. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ------------ | -|   | 0 | 1 | | 0.1 | m/s/sqrt(Hz) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ------------ | --------- | +|   | 0 | 1 | | 0.1 | m/s/sqrt(Hz) |   | ### LPE_PN_T (`FLOAT`) {#LPE_PN_T} -Terrain random walk noise density, hilly/outdoor (0.1), flat/Indoor (0.001). +Terrain random walk noise density. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ------------ | -|   | 0 | 1 | | 0.001 | m/s/sqrt(Hz) | +Terrain random walk noise density, hilly/outdoor (0.1), flat/Indoor (0.001) + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ------------ | --------- | +|   | 0 | 1 | | 0.001 | m/s/sqrt(Hz) |   | ### LPE_PN_V (`FLOAT`) {#LPE_PN_V} @@ -25450,43 +27707,45 @@ Velocity propagation noise density. Increase to trust measurements more. Decrease to trust model more. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | -------------- | -|   | 0 | 1 | | 0.1 | m/s^2/sqrt(Hz) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | -------------- | --------- | +|   | 0 | 1 | | 0.1 | m/s^2/sqrt(Hz) |   | ### LPE_SNR_OFF_Z (`FLOAT`) {#LPE_SNR_OFF_Z} Sonar z offset from center of vehicle +down. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 1 | | 0.00 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1 | | 0.0 | m |   | ### LPE_SNR_Z (`FLOAT`) {#LPE_SNR_Z} Sonar z standard deviation. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.01 | 1 | | 0.05 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.01 | 1 | | 0.05 | m |   | ### LPE_T_MAX_GRADE (`FLOAT`) {#LPE_T_MAX_GRADE} -Terrain maximum percent grade, hilly/outdoor (100 = 45 deg), flat/Indoor (0 = 0 deg). +Terrain maximum percent grade. -Used to calculate increased terrain random walk nosie due to movement. +Terrain maximum percent grade, hilly/outdoor (100 = 45 deg), flat/Indoor (0 = 0 deg) -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 100 | | 1.0 | % | +Used to calculate increased terrain random walk noise due to movement. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 100 | | 1.0 | % |   | ### LPE_VIC_P (`FLOAT`) {#LPE_VIC_P} Vicon position standard deviation. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0001 | 1 | | 0.001 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0001 | 1 | | 0.001 | m |   | ### LPE_VIS_DELAY (`FLOAT`) {#LPE_VIS_DELAY} @@ -25494,49 +27753,49 @@ Vision delay compensation. Set to zero to enable automatic compensation from measurement timestamps -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 0.1 | | 0.1 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 0.1 | | 0.1 | s |   | ### LPE_VIS_XY (`FLOAT`) {#LPE_VIS_XY} Vision xy standard deviation. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.01 | 1 | | 0.1 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.01 | 1 | | 0.1 | m |   | ### LPE_VIS_Z (`FLOAT`) {#LPE_VIS_Z} Vision z standard deviation. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.01 | 100 | | 0.5 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.01 | 100 | | 0.5 | m |   | ### LPE_VXY_PUB (`FLOAT`) {#LPE_VXY_PUB} Required velocity xy standard deviation to publish position. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.01 | 1.0 | | 0.3 | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.01 | 1.0 | | 0.3 | m/s |   | ### LPE_X_LP (`FLOAT`) {#LPE_X_LP} Cut frequency for state publication. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 5 | 1000 | | 5.0 | Hz | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 5 | 1000 | | 5.0 | Hz |   | ### LPE_Z_PUB (`FLOAT`) {#LPE_Z_PUB} Required z standard deviation to publish altitude/ terrain. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.3 | 5.0 | | 1.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.3 | 5.0 | | 1.0 | m |   | ## MAVLink @@ -25553,9 +27812,9 @@ on the local network. - `1`: Always broadcast - `2`: Only multicast -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 1 | |   | ### MAV_0_CONFIG (`INT32`) {#MAV_0_CONFIG} @@ -25579,9 +27838,9 @@ Configure on which serial port to run MAVLink. - `401`: EXT2 - `1000`: Ethernet -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 101 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 101 | |   | ### MAV_0_FLOW_CTRL (`INT32`) {#MAV_0_FLOW_CTRL} @@ -25596,9 +27855,9 @@ instance. By default it is auto detected. Use when auto detection fails. - `1`: Force on - `2`: Auto-detected -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 2 | |   | ### MAV_0_FORWARD (`INT32`) {#MAV_0_FORWARD} @@ -25606,12 +27865,13 @@ Enable MAVLink Message forwarding for instance 0. If enabled, forward incoming MAVLink messages to other MAVLink ports if the message is either broadcast or the target is not the autopilot. + This allows for example a GCS to talk to a camera that is connected to the autopilot via MAVLink (on a different link than the GCS). -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ----------- | ---- | -| ✓ | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ----------- | ---- | --------- | +| ✓ | | | | Enabled (1) | |   | ### MAV_0_HL_FREQ (`FLOAT`) {#MAV_0_HL_FREQ} @@ -25621,9 +27881,9 @@ Positive real value that configures the transmission frequency of the HIGH_LATENCY2 stream for instance 0, configured in iridium mode. This parameter has no effect if the instance mode is different from iridium. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0.0 | 50.0 | 0.001 | 0.015 | Hz | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0.0 | 50.0 | 0.001 | 0.015 | Hz |   | ### MAV_0_MODE (`INT32`) {#MAV_0_MODE} @@ -25647,9 +27907,9 @@ vehicle's attitude) and their sending rates. - `12`: uAvionix - `13`: Low Bandwidth -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### MAV_0_RADIO_CTL (`INT32`) {#MAV_0_RADIO_CTL} @@ -25657,11 +27917,12 @@ Enable software throttling of mavlink on instance 0. If enabled, MAVLink messages will be throttled according to `txbuf` field reported by radio_status. + Requires a radio to send the mavlink message RADIO_STATUS. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ----------- | ---- | -| ✓ | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ----------- | ---- | --------- | +| ✓ | | | | Enabled (1) | |   | ### MAV_0_RATE (`INT32`) {#MAV_0_RATE} @@ -25670,13 +27931,14 @@ Maximum MAVLink sending rate for instance 0. Configure the maximum sending rate for the MAVLink streams in Bytes/sec. If the configured streams exceed the maximum rate, the sending rate of each stream is automatically decreased. + If this is set to 0 a value of half of the theoretical maximum bandwidth is used. This corresponds to baudrate/20 Bytes/s (baudrate/10 = maximum data rate on 8N1-configured links). -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | | | 1200 | B/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | | | 1200 | B/s |   | ### MAV_0_REMOTE_PRT (`INT32`) {#MAV_0_REMOTE_PRT} @@ -25685,9 +27947,9 @@ MAVLink Remote Port for instance 0. If ethernet enabled and selected as configuration for MAVLink instance 0, selected remote port will be set and used in MAVLink instance 0. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 14550 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 14550 | |   | ### MAV_0_UDP_PRT (`INT32`) {#MAV_0_UDP_PRT} @@ -25696,9 +27958,9 @@ MAVLink Network Port for instance 0. If ethernet enabled and selected as configuration for MAVLink instance 0, selected udp port will be set and used in MAVLink instance 0. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 14556 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 14556 | |   | ### MAV_1_BROADCAST (`INT32`) {#MAV_1_BROADCAST} @@ -25713,9 +27975,9 @@ on the local network. - `1`: Always broadcast - `2`: Only multicast -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### MAV_1_CONFIG (`INT32`) {#MAV_1_CONFIG} @@ -25739,9 +28001,9 @@ Configure on which serial port to run MAVLink. - `401`: EXT2 - `1000`: Ethernet -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### MAV_1_FLOW_CTRL (`INT32`) {#MAV_1_FLOW_CTRL} @@ -25756,9 +28018,9 @@ instance. By default it is auto detected. Use when auto detection fails. - `1`: Force on - `2`: Auto-detected -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 2 | |   | ### MAV_1_FORWARD (`INT32`) {#MAV_1_FORWARD} @@ -25766,12 +28028,13 @@ Enable MAVLink Message forwarding for instance 1. If enabled, forward incoming MAVLink messages to other MAVLink ports if the message is either broadcast or the target is not the autopilot. + This allows for example a GCS to talk to a camera that is connected to the autopilot via MAVLink (on a different link than the GCS). -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### MAV_1_HL_FREQ (`FLOAT`) {#MAV_1_HL_FREQ} @@ -25781,9 +28044,9 @@ Positive real value that configures the transmission frequency of the HIGH_LATENCY2 stream for instance 1, configured in iridium mode. This parameter has no effect if the instance mode is different from iridium. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0.0 | 50.0 | 0.001 | 0.015 | Hz | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0.0 | 50.0 | 0.001 | 0.015 | Hz |   | ### MAV_1_MODE (`INT32`) {#MAV_1_MODE} @@ -25807,9 +28070,9 @@ vehicle's attitude) and their sending rates. - `12`: uAvionix - `13`: Low Bandwidth -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 2 | |   | ### MAV_1_RADIO_CTL (`INT32`) {#MAV_1_RADIO_CTL} @@ -25817,11 +28080,12 @@ Enable software throttling of mavlink on instance 1. If enabled, MAVLink messages will be throttled according to `txbuf` field reported by radio_status. + Requires a radio to send the mavlink message RADIO_STATUS. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ----------- | ---- | -| ✓ | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ----------- | ---- | --------- | +| ✓ | | | | Enabled (1) | |   | ### MAV_1_RATE (`INT32`) {#MAV_1_RATE} @@ -25830,13 +28094,14 @@ Maximum MAVLink sending rate for instance 1. Configure the maximum sending rate for the MAVLink streams in Bytes/sec. If the configured streams exceed the maximum rate, the sending rate of each stream is automatically decreased. + If this is set to 0 a value of half of the theoretical maximum bandwidth is used. This corresponds to baudrate/20 Bytes/s (baudrate/10 = maximum data rate on 8N1-configured links). -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | | | 0 | B/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | | | 0 | B/s |   | ### MAV_1_REMOTE_PRT (`INT32`) {#MAV_1_REMOTE_PRT} @@ -25845,9 +28110,9 @@ MAVLink Remote Port for instance 1. If ethernet enabled and selected as configuration for MAVLink instance 1, selected remote port will be set and used in MAVLink instance 1. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### MAV_1_UDP_PRT (`INT32`) {#MAV_1_UDP_PRT} @@ -25856,9 +28121,9 @@ MAVLink Network Port for instance 1. If ethernet enabled and selected as configuration for MAVLink instance 1, selected udp port will be set and used in MAVLink instance 1. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### MAV_2_BROADCAST (`INT32`) {#MAV_2_BROADCAST} @@ -25873,9 +28138,9 @@ on the local network. - `1`: Always broadcast - `2`: Only multicast -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### MAV_2_CONFIG (`INT32`) {#MAV_2_CONFIG} @@ -25899,9 +28164,9 @@ Configure on which serial port to run MAVLink. - `401`: EXT2 - `1000`: Ethernet -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### MAV_2_FLOW_CTRL (`INT32`) {#MAV_2_FLOW_CTRL} @@ -25916,9 +28181,9 @@ instance. By default it is auto detected. Use when auto detection fails. - `1`: Force on - `2`: Auto-detected -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 2 | |   | ### MAV_2_FORWARD (`INT32`) {#MAV_2_FORWARD} @@ -25926,12 +28191,13 @@ Enable MAVLink Message forwarding for instance 2. If enabled, forward incoming MAVLink messages to other MAVLink ports if the message is either broadcast or the target is not the autopilot. + This allows for example a GCS to talk to a camera that is connected to the autopilot via MAVLink (on a different link than the GCS). -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### MAV_2_HL_FREQ (`FLOAT`) {#MAV_2_HL_FREQ} @@ -25941,9 +28207,9 @@ Positive real value that configures the transmission frequency of the HIGH_LATENCY2 stream for instance 2, configured in iridium mode. This parameter has no effect if the instance mode is different from iridium. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0.0 | 50.0 | 0.001 | 0.015 | Hz | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0.0 | 50.0 | 0.001 | 0.015 | Hz |   | ### MAV_2_MODE (`INT32`) {#MAV_2_MODE} @@ -25967,9 +28233,9 @@ vehicle's attitude) and their sending rates. - `12`: uAvionix - `13`: Low Bandwidth -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### MAV_2_RADIO_CTL (`INT32`) {#MAV_2_RADIO_CTL} @@ -25977,11 +28243,12 @@ Enable software throttling of mavlink on instance 2. If enabled, MAVLink messages will be throttled according to `txbuf` field reported by radio_status. + Requires a radio to send the mavlink message RADIO_STATUS. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ----------- | ---- | -| ✓ | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ----------- | ---- | --------- | +| ✓ | | | | Enabled (1) | |   | ### MAV_2_RATE (`INT32`) {#MAV_2_RATE} @@ -25990,13 +28257,14 @@ Maximum MAVLink sending rate for instance 2. Configure the maximum sending rate for the MAVLink streams in Bytes/sec. If the configured streams exceed the maximum rate, the sending rate of each stream is automatically decreased. + If this is set to 0 a value of half of the theoretical maximum bandwidth is used. This corresponds to baudrate/20 Bytes/s (baudrate/10 = maximum data rate on 8N1-configured links). -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | | | 0 | B/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | | | 0 | B/s |   | ### MAV_2_REMOTE_PRT (`INT32`) {#MAV_2_REMOTE_PRT} @@ -26005,9 +28273,9 @@ MAVLink Remote Port for instance 2. If ethernet enabled and selected as configuration for MAVLink instance 2, selected remote port will be set and used in MAVLink instance 2. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### MAV_2_UDP_PRT (`INT32`) {#MAV_2_UDP_PRT} @@ -26016,17 +28284,17 @@ MAVLink Network Port for instance 2. If ethernet enabled and selected as configuration for MAVLink instance 2, selected udp port will be set and used in MAVLink instance 2. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### MAV_COMP_ID (`INT32`) {#MAV_COMP_ID} MAVLink component ID. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 1 | 250 | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 1 | 250 | | 1 | |   | ### MAV_FWDEXTSP (`INT32`) {#MAV_FWDEXTSP} @@ -26035,9 +28303,9 @@ Forward external setpoint messages. If set to 1 incoming external setpoint messages will be directly forwarded to the controllers if in offboard control mode -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ----------- | ---- | -|   | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ----------- | ---- | --------- | +|   | | | | Enabled (1) | |   | ### MAV_HASH_CHK_EN (`INT32`) {#MAV_HASH_CHK_EN} @@ -26046,9 +28314,9 @@ Parameter hash check. Disabling the parameter hash check functionality will make the mavlink instance stream parameters continuously. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ----------- | ---- | -|   | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ----------- | ---- | --------- | +|   | | | | Enabled (1) | |   | ### MAV_HB_FORW_EN (`INT32`) {#MAV_HB_FORW_EN} @@ -26057,9 +28325,9 @@ Heartbeat message forwarding. The mavlink heartbeat message will not be forwarded if this parameter is set to 'disabled'. The main reason for disabling heartbeats to be forwarded is because they confuse dronekit. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ----------- | ---- | -|   | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ----------- | ---- | --------- | +|   | | | | Enabled (1) | |   | ### MAV_PROTO_VER (`INT32`) {#MAV_PROTO_VER} @@ -26070,9 +28338,9 @@ MAVLink protocol version. - `1`: Version 1 with auto-upgrade to v2 if detected - `2`: Version 2 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 2 | |   | ### MAV_RADIO_TOUT (`INT32`) {#MAV_RADIO_TOUT} @@ -26082,9 +28350,9 @@ If the connected radio stops reporting RADIO_STATUS for a certain time, a warning is triggered and, if MAV_X_RADIO_CTL is enabled, the software-flow control is reset. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1 | 250 | | 5 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1 | 250 | | 5 | s |   | ### MAV_SIK_RADIO_ID (`INT32`) {#MAV_SIK_RADIO_ID} @@ -26095,17 +28363,17 @@ SiK radio to this ID and re-set the parameter to 0. If the value is negative it will reset the complete radio config to factory defaults. Only applies if this mavlink instance is going through a SiK radio -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 240 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 240 | | 0 | |   | ### MAV_SYS_ID (`INT32`) {#MAV_SYS_ID} MAVLink system ID. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 1 | 250 | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 1 | 250 | | 1 | |   | ### MAV_S_FORWARD (`INT32`) {#MAV_S_FORWARD} @@ -26113,9 +28381,9 @@ Enable MAVLink forwarding on TELEM2. TELEM2 on Skynode only. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### MAV_S_MODE (`INT32`) {#MAV_S_MODE} @@ -26133,9 +28401,9 @@ vehicle's attitude) and their sending rates. - `11`: Onboard Low Bandwidth - `13`: Low Bandwidth -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 11 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 11 | |   | ### MAV_TYPE (`INT32`) {#MAV_TYPE} @@ -26162,9 +28430,9 @@ MAVLink airframe type. - `22`: VTOL Standard (separate fixed rotors for hover and cruise flight) - `23`: VTOL Tailsitter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 22 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 23 | | 0 | |   | ### MAV_USEHILGPS (`INT32`) {#MAV_USEHILGPS} @@ -26172,9 +28440,9 @@ Use/Accept HIL GPS message even if not in HIL mode. If set to 1 incoming HIL GPS messages are parsed. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------------ | ---- | -|   | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------------ | ---- | --------- | +|   | | | | Disabled (0) | |   | ## Magnetometer @@ -26191,9 +28459,9 @@ Defines which averaging mode to use during data polling. - `2`: 4 sample averaging - `3`: 8 sample averaging -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 1 | |   | ### BMM350_DRIVE (`INT32`) {#BMM350_DRIVE} @@ -26201,9 +28469,9 @@ BMM350 pad drive strength setting. This setting helps avoid signal problems like overshoot or undershoot. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 7 | | 7 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 7 | | 7 | |   | ### BMM350_ODR (`INT32`) {#BMM350_ODR} @@ -26223,9 +28491,9 @@ Defines which ODR rate to use during data polling. - `7`: 3.125 Hz - `8`: 1.5625 Hz -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 3 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 3 | |   | ## Magnetometer Bias Estimator @@ -26236,9 +28504,9 @@ Enable online mag bias calibration. This enables continuous calibration of the magnetometers before takeoff using gyro data. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ----------- | ---- | -| ✓ | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ----------- | ---- | --------- | +| ✓ | | | | Enabled (1) | |   | ### MBE_LEARN_GAIN (`FLOAT`) {#MBE_LEARN_GAIN} @@ -26247,9 +28515,9 @@ Mag bias estimator learning gain. Increase to make the estimator more responsive Decrease to make the estimator more robust to noise -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 100 | 0.1 | 18. | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 100 | 0.1 | 18.0 | |   | ## Manual Control @@ -26260,9 +28528,9 @@ Enable arm/disarm stick gesture. This determines if moving the left stick to the lower right arms and to the lower left disarms the vehicle. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ----------- | ---- | -|   | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ----------- | ---- | --------- | +|   | | | | Enabled (1) | |   | ### MAN_DEADZONE (`FLOAT`) {#MAN_DEADZONE} @@ -26270,12 +28538,13 @@ Deadzone for sticks (only specific use cases). Range around stick center ignored to prevent vehicle drift from stick hardware inaccuracy. + Does not apply to any precise constant input like throttle and attitude or rate piloting. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1 | 0.01 | 0.1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1 | 0.01 | 0.1 | |   | ### MAN_KILL_GEST_T (`FLOAT`) {#MAN_KILL_GEST_T} @@ -26284,11 +28553,12 @@ Trigger time for kill stick gesture. The timeout for holding the left stick to the lower left and the right stick to the lower right at the same time until the gesture kills the actuators one-way. + A negative value disables the feature. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 15 | | -1. | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 15 | | -1.0 | s |   | ## Mission @@ -26304,9 +28574,9 @@ has delivered before continuing mission. gimbal: CMD_DO_GIMBAL_MANAGER_PITCHYAW has reached the commanded orientation before beginning to take pictures. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | | | 0. | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | | | 0.0 | s |   | ### MIS_DIST_1WP (`FLOAT`) {#MIS_DIST_1WP} @@ -26316,9 +28586,9 @@ There will be a warning message if the current waypoint is more distant than MIS Has no effect on mission validity. Set a value of zero or less to disable. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 100000 | 100 | 10000 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 100000 | 100 | 10000 | m |   | ### MIS_LND_ABRT_ALT (`INT32`) {#MIS_LND_ABRT_ALT} @@ -26328,13 +28598,15 @@ Minimum altitude above landing point that the vehicle will climb to after an abo Then vehicle will loiter in this altitude until further command is received. Only applies to fixed-wing vehicles. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | | | 30 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | | | 30 | m |   | ### MIS_MNT_YAW_CTL (`INT32`) {#MIS_MNT_YAW_CTL} -Enable yaw control of the mount. (Only affects multicopters and ROI mission items). +Enable gimbal yaw control in missions. + +Enable yaw control of the mount. (Only affects multicopters and ROI mission items) If enabled, yaw commands will be sent to the mount and the vehicle will follow its heading towards the flight direction. If disabled, the vehicle will yaw towards the ROI. @@ -26344,9 +28616,9 @@ If disabled, the vehicle will yaw towards the ROI. - `0`: Disable - `1`: Enable -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1 | | 0 | |   | ### MIS_TAKEOFF_ALT (`FLOAT`) {#MIS_TAKEOFF_ALT} @@ -26355,9 +28627,9 @@ Default take-off altitude. This is the relative altitude the system will take off to if not otherwise specified. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | | 0.5 | 2.5 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | | 0.5 | 2.5 | m |   | ### MIS_TKO_LAND_REQ (`INT32`) {#MIS_TKO_LAND_REQ} @@ -26375,30 +28647,32 @@ Validity of configured takeoffs/landings is checked independently of the setting - `4`: Require both a takeoff and a landing, or neither - `5`: Same as previous when landed, in-air require landing only if no valid VTOL approach is present -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### MIS_YAW_ERR (`FLOAT`) {#MIS_YAW_ERR} Max yaw error in degrees needed for waypoint heading acceptance. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 90 | 1 | 12.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 90 | 1 | 12.0 | deg |   | ### MIS_YAW_TMT (`FLOAT`) {#MIS_YAW_TMT} -Time in seconds we wait on reaching target heading at a waypoint if it is forced. +Waypoint heading timeout. + +Time in seconds we wait on reaching target heading at a waypoint if it is forced If set > 0 it will ignore the target heading for normal waypoint acceptance. If the waypoint forces the heading the timeout will matter. For example on VTOL forwards transition. Mainly useful for VTOLs that have less yaw authority and might not reach target yaw in wind. Disabled by default. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 20 | 1 | -1.0 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 20 | 1 | -1.0 | s |   | ### MPC_YAW_MODE (`INT32`) {#MPC_YAW_MODE} @@ -26413,9 +28687,9 @@ Heading behavior in autonomous modes. - `4`: towards waypoint (yaw first) - `5`: yaw fixed -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 4 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 5 | | 0 | |   | ### NAV_ACC_RAD (`FLOAT`) {#NAV_ACC_RAD} @@ -26424,17 +28698,17 @@ Acceptance Radius. Default acceptance radius, overridden by acceptance radius of waypoint if set. For fixed wing the npfg switch distance is used for horizontal acceptance. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.05 | 200.0 | 0.5 | 10.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.05 | 200.0 | 0.5 | 10.0 | m |   | ### NAV_FORCE_VT (`INT32`) {#NAV_FORCE_VT} Force VTOL mode takeoff and land. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ----------- | ---- | -|   | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ----------- | ---- | --------- | +|   | | | | Enabled (1) | |   | ### NAV_FW_ALTL_RAD (`FLOAT`) {#NAV_FW_ALTL_RAD} @@ -26443,9 +28717,9 @@ FW Altitude Acceptance Radius before a landing. Altitude acceptance used for the last waypoint before a fixed-wing landing. This is usually smaller than the standard vertical acceptance because close to the ground higher accuracy is required. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.05 | 200.0 | | 5.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.05 | 200.0 | | 5.0 | m |   | ### NAV_FW_ALT_RAD (`FLOAT`) {#NAV_FW_ALT_RAD} @@ -26453,21 +28727,35 @@ FW Altitude Acceptance Radius. Acceptance radius for fixedwing altitude. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.05 | 200.0 | 0.5 | 10.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.05 | 200.0 | 0.5 | 10.0 | m |   | ### NAV_LOITER_RAD (`FLOAT`) {#NAV_LOITER_RAD} Loiter radius (FW only). Default value of loiter radius in fixed-wing mode (e.g. for Loiter mode). + The direction of the loiter can be set via the sign: A positive value for clockwise, negative for counter-clockwise. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -10000 | 10000 | 0.5 | 80.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -10000 | 10000 | 0.5 | 80.0 | m |   | + +### NAV_LTR_LAST_DL (`INT32`) {#NAV_LTR_LAST_DL} + +Loiter at last GCS heartbeat position on data link loss. + +When the data link is lost and this setting is enabled, +the vehicle will loiter at the position where the last GCS +heartbeat was received rather than at its current position. +Only applies to Hold mode during failsafe actions. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------------ | ---- | --------- | +|   | | | | Disabled (0) | |   | ### NAV_MC_ALT_RAD (`FLOAT`) {#NAV_MC_ALT_RAD} @@ -26475,9 +28763,9 @@ MC Altitude Acceptance Radius. Acceptance radius for multicopter altitude. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.05 | 200.0 | 0.5 | 0.8 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.05 | 200.0 | 0.5 | 0.8 | m |   | ### NAV_MIN_GND_DIST (`FLOAT`) {#NAV_MIN_GND_DIST} @@ -26487,11 +28775,12 @@ Minimum height above ground the vehicle is allowed to descend to during Mission excluding landing commands. Requires a distance sensor to be set up. Note: only prevents the vehicle from descending further, but does not force it to climb. + Set to a negative value to disable. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | | 1 | -1. | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | | 1 | -1.0 | m |   | ### NAV_MIN_LTR_ALT (`FLOAT`) {#NAV_MIN_LTR_ALT} @@ -26502,9 +28791,9 @@ mode without specifying an altitude (e.g. through Loiter switch on RC). Doesn't affect Loiters that are part of Missions or that are entered through a reposition setpoint ("Go to"). Set to a negative value to disable. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | | 0.5 | -1. | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | | 0.5 | -1.0 | m |   | ### NAV_TRAFF_AVOID (`INT32`) {#NAV_TRAFF_AVOID} @@ -26521,9 +28810,9 @@ to transponder data from e.g. ADSB transponders - `3`: Land mode - `4`: Position Hold mode -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 1 | |   | ### NAV_TRAFF_A_HOR (`FLOAT`) {#NAV_TRAFF_A_HOR} @@ -26531,17 +28820,17 @@ Set NAV TRAFFIC AVOID horizontal distance. Defines a crosstrack horizontal distance -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 500 | | | 500 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 500 | | | 500 | m |   | ### NAV_TRAFF_A_VER (`FLOAT`) {#NAV_TRAFF_A_VER} Set NAV TRAFFIC AVOID vertical distance. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 10 | 500 | | 500 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 10 | 500 | | 500 | m |   | ### NAV_TRAFF_COLL_T (`INT32`) {#NAV_TRAFF_COLL_T} @@ -26550,9 +28839,9 @@ Estimated time until collision. Minimum acceptable time until collsion. Assumes constant speed over 3d distance. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | --------- | --------- | ------- | ---- | -|   | 1 | 900000000 | | 60 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | --------- | --------- | ------- | ---- | --------- | +|   | 1 | 900000000 | | 60 | s |   | ## Mixer Output @@ -26562,8 +28851,10 @@ Multicopter air-mode. The air-mode enables the mixer to increase the total thrust of the multirotor in order to keep attitude and rate control even at low and high throttle. + This function should be disabled during tuning as it will help the controller to diverge if the closed-loop is unstable (i.e. the vehicle is not tuned yet). + Enabling air-mode for yaw requires the use of an arming switch. **Values:** @@ -26572,9 +28863,9 @@ Enabling air-mode for yaw requires the use of an arming switch. - `1`: Roll/Pitch - `2`: Roll/Pitch/Yaw -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ## ModalAI Custom Configuration @@ -26585,9 +28876,66 @@ Custom configuration for ModalAI drones. This can be set to indicate that drone behavior needs to be changed to match a custom setting -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | + +## Motor Failure + +### FD_ACT_EN (`INT32`) {#FD_ACT_EN} + +Enable Actuator Failure check. + +If enabled, the HealthAndArmingChecks will verify that for motors, a minimum amount of ESC current per throttle +level is being consumed. +Otherwise this indicates an motor failure. +This check only works for ESCs that report current consumption. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------------ | ---- | --------- | +|   | | | | Disabled (0) | |   | + +### MOTFAIL_C2T (`FLOAT`) {#MOTFAIL_C2T} + +Motor Failure Current/Throttle Scale. + +Determines the slope between expected steady state current and linearized, normalized thrust command. +E.g. FD_ACT_MOT_C2T A represents the expected steady state current at 100%. +FD_ACT_LOW_OFF and FD_ACT_HIGH_OFF offset the threshold from that slope. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 50.0 | 1 | 35.0 | A/% |   | + +### MOTFAIL_HIGH_OFF (`FLOAT`) {#MOTFAIL_HIGH_OFF} + +Overcurrent motor failure limit offset. + +threshold = FD_ACT_MOT_C2T \* thrust + FD_ACT_HIGH_OFF + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 30 | 1 | 10.0 | A |   | + +### MOTFAIL_LOW_OFF (`FLOAT`) {#MOTFAIL_LOW_OFF} + +Undercurrent motor failure limit offset. + +threshold = FD_ACT_MOT_C2T \* thrust - FD_ACT_LOW_OFF + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 30 | 1 | 10.0 | A |   | + +### MOTFAIL_TIME (`FLOAT`) {#MOTFAIL_TIME} + +Motor Failure Hysteresis Time. + +Motor failure only triggers after current thresholds are exceeded for this time. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.01 | 10 | 1 | 1.0 | s |   | ## Mount @@ -26606,25 +28954,25 @@ and relies on the IMU's attitude estimation. - `2`: Stabilize yaw for absolute/lock mode. - `3`: Stabilize pitch for absolute/lock mode. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### MNT_LND_P_MAX (`FLOAT`) {#MNT_LND_P_MAX} Pitch maximum when landed. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -90.0 | 90.0 | | 90.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -90.0 | 90.0 | | 90.0 | deg |   | ### MNT_LND_P_MIN (`FLOAT`) {#MNT_LND_P_MIN} Pitch minimum when landed. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -90.0 | 90.0 | | -90.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -90.0 | 90.0 | | -90.0 | deg |   | ### MNT_MAN_PITCH (`INT32`) {#MNT_MAN_PITCH} @@ -26640,9 +28988,9 @@ Auxiliary channel to control pitch (in AUX input or manual mode). - `5`: AUX5 - `6`: AUX6 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 6 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 6 | | 0 | |   | ### MNT_MAN_ROLL (`INT32`) {#MNT_MAN_ROLL} @@ -26658,9 +29006,9 @@ Auxiliary channel to control roll (in AUX input or manual mode). - `5`: AUX5 - `6`: AUX6 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 6 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 6 | | 0 | |   | ### MNT_MAN_YAW (`INT32`) {#MNT_MAN_YAW} @@ -26676,9 +29024,9 @@ Auxiliary channel to control yaw (in AUX input or manual mode). - `5`: AUX5 - `6`: AUX6 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 6 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 6 | | 0 | |   | ### MNT_MAV_COMPID (`INT32`) {#MNT_MAV_COMPID} @@ -26686,9 +29034,9 @@ Mavlink Component ID of the mount. If MNT_MODE_OUT is MAVLink protocol v2, mount configure/control commands will be sent with this component ID. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 154 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 154 | |   | ### MNT_MAV_SYSID (`INT32`) {#MNT_MAV_SYSID} @@ -26696,9 +29044,9 @@ Mavlink System ID of the mount. If MNT_MODE_OUT is MAVLink gimbal protocol v1, mount configure/control commands will be sent with this target ID. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 1 | |   | ### MNT_MAX_PITCH (`FLOAT`) {#MNT_MAX_PITCH} @@ -26706,9 +29054,9 @@ Max positive angle of pitch setpoint (only in MNT_MODE_OUT=AUX). Use output driver settings to calibrate (e.g. PWM_CENT/\_MIN/\_MAX). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 45.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 45.0 | deg |   | ### MNT_MIN_PITCH (`FLOAT`) {#MNT_MIN_PITCH} @@ -26716,15 +29064,16 @@ Min negative angle of pitch setpoint (only in MNT_MODE_OUT=AUX). Use output driver settings to calibrate (e.g. PWM_CENT/\_MIN/\_MAX). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | -45.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | -45.0 | deg |   | ### MNT_MODE_IN (`INT32`) {#MNT_MODE_IN} Mount input mode. This is the protocol used between the ground station and the autopilot. + Recommended is Auto, RC only or MAVLink gimbal protocol v2. The rest will be deprecated. @@ -26737,15 +29086,16 @@ The rest will be deprecated. - `3`: MAVLINK_DO_MOUNT (protocol v1, to be deprecated) - `4`: MAVlink gimbal protocol v2 -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | -1 | 4 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | -1 | 4 | | -1 | |   | ### MNT_MODE_OUT (`INT32`) {#MNT_MODE_OUT} Mount output mode. This is the protocol used between the autopilot and a connected gimbal. + Recommended is the MAVLink gimbal protocol v2 if the gimbal supports it. **Values:** @@ -26754,9 +29104,9 @@ Recommended is the MAVLink gimbal protocol v2 if the gimbal supports it. - `1`: MAVLink gimbal protocol v1 - `2`: MAVLink gimbal protocol v2 -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 2 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 2 | | 0 | |   | ### MNT_RANGE_ROLL (`FLOAT`) {#MNT_RANGE_ROLL} @@ -26764,9 +29114,9 @@ Range of roll channel output (only in MNT_MODE_OUT=AUX). Use output driver settings to calibrate (e.g. PWM_CENT/\_MIN/\_MAX). Note that only symmetric angular ranges are supported. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1.0 | 720.0 | | 90.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1.0 | 720.0 | | 90.0 | deg |   | ### MNT_RANGE_YAW (`FLOAT`) {#MNT_RANGE_YAW} @@ -26774,9 +29124,9 @@ Range of yaw channel output (only in MNT_MODE_OUT=AUX). Use output driver settings to calibrate (e.g. PWM_CENT/\_MIN/\_MAX). Note that only symmetric angular ranges are supported. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1.0 | 720.0 | | 360.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1.0 | 720.0 | | 360.0 | deg |   | ### MNT_RATE_PITCH (`FLOAT`) {#MNT_RATE_PITCH} @@ -26784,9 +29134,9 @@ Angular pitch rate for manual input in degrees/second. Full stick input [-1..1] translats to [-pitch rate..pitch rate]. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 1.0 | 90.0 | | 30.0 | deg/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | 1.0 | 90.0 | | 30.0 | deg/s |   | ### MNT_RATE_YAW (`FLOAT`) {#MNT_RATE_YAW} @@ -26794,9 +29144,9 @@ Angular yaw rate for manual input in degrees/second. Full stick input [-1..1] translats to [-yaw rate..yaw rate]. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 1.0 | 90.0 | | 30.0 | deg/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | 1.0 | 90.0 | | 30.0 | deg/s |   | ### MNT_RC_IN_MODE (`INT32`) {#MNT_RC_IN_MODE} @@ -26807,21 +29157,23 @@ Input mode for RC gimbal input. - `0`: Angle - `1`: Angular rate -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1 | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1 | | 1 | |   | ### MNT_TAU (`FLOAT`) {#MNT_TAU} -Alpha filter time constant defining the convergence rate (in seconds) for open-loop AUX mount control. +Time constant for open-loop AUX gimbal control. + +Alpha filter time constant defining the convergence rate (in seconds) for open-loop AUX mount control Use when no angular position feedback is available. With MNT_MODE_OUT set to AUX, the mount operates in open-loop and directly commands the servo output. Parameters must be tuned for the specific servo to approximate its speed and response. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | | | 0.3 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | | | 0.3 | |   | ## Multicopter Acro Mode @@ -26830,24 +29182,26 @@ Parameters must be tuned for the specific servo to approximate its speed and res Acro mode roll, pitch expo factor. Exponential factor for tuning the input curve shape. + 0 Purely linear input curve 1 Purely cubic input curve -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1 | | 0. | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1 | | 0.0 | |   | ### MC_ACRO_EXPO_Y (`FLOAT`) {#MC_ACRO_EXPO_Y} Acro mode yaw expo factor. Exponential factor for tuning the input curve shape. + 0 Purely linear input curve 1 Purely cubic input curve -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1 | | 0. | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1 | | 0.0 | |   | ### MC_ACRO_P_MAX (`FLOAT`) {#MC_ACRO_P_MAX} @@ -26855,9 +29209,9 @@ Acro mode maximum pitch rate. Full stick deflection leads to this rate. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 0.0 | 1800.0 | 5 | 100. | deg/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | 0.0 | 1800.0 | 5 | 100.0 | deg/s |   | ### MC_ACRO_R_MAX (`FLOAT`) {#MC_ACRO_R_MAX} @@ -26865,35 +29219,37 @@ Acro mode maximum roll rate. Full stick deflection leads to this rate. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 0.0 | 1800.0 | 5 | 100. | deg/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | 0.0 | 1800.0 | 5 | 100.0 | deg/s |   | ### MC_ACRO_SUPEXPO (`FLOAT`) {#MC_ACRO_SUPEXPO} Acro mode roll, pitch super expo factor. "Superexponential" factor for refining the input curve shape tuned using MC_ACRO_EXPO. + 0 Pure Expo function 0.7 reasonable shape enhancement for intuitive stick feel 0.95 very strong bent input curve only near maxima have effect -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 0.95 | | 0. | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 0.95 | | 0.0 | |   | ### MC_ACRO_SUPEXPOY (`FLOAT`) {#MC_ACRO_SUPEXPOY} Acro mode yaw super expo factor. "Superexponential" factor for refining the input curve shape tuned using MC_ACRO_EXPO_Y. + 0 Pure Expo function 0.7 reasonable shape enhancement for intuitive stick feel 0.95 very strong bent input curve only near maxima have effect -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 0.95 | | 0. | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 0.95 | | 0.0 | |   | ### MC_ACRO_Y_MAX (`FLOAT`) {#MC_ACRO_Y_MAX} @@ -26901,9 +29257,9 @@ Acro mode maximum yaw rate. Full stick deflection leads to this rate. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 0.0 | 1800.0 | 5 | 100. | deg/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | 0.0 | 1800.0 | 5 | 100.0 | deg/s |   | ## Multicopter Attitude Control @@ -26914,12 +29270,13 @@ Max pitch rate. Limit for pitch rate in manual and auto modes (except acro). Has effect for large rotations in autonomous mode, to avoid large control output and mixer saturation. + This is not only limited by the vehicle's properties, but also by the maximum measurement rate of the gyro. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 0.0 | 1800.0 | 5 | 220.0 | deg/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | 0.0 | 1800.0 | 5 | 220.0 | deg/s |   | ### MC_PITCH_P (`FLOAT`) {#MC_PITCH_P} @@ -26927,9 +29284,9 @@ Pitch P gain. Pitch proportional gain, i.e. desired angular speed in rad/s for error 1 rad. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 12 | 0.1 | 4.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 12 | 0.1 | 4.0 | |   | ### MC_ROLLRATE_MAX (`FLOAT`) {#MC_ROLLRATE_MAX} @@ -26938,12 +29295,13 @@ Max roll rate. Limit for roll rate in manual and auto modes (except acro). Has effect for large rotations in autonomous mode, to avoid large control output and mixer saturation. + This is not only limited by the vehicle's properties, but also by the maximum measurement rate of the gyro. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 0.0 | 1800.0 | 5 | 220.0 | deg/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | 0.0 | 1800.0 | 5 | 220.0 | deg/s |   | ### MC_ROLL_P (`FLOAT`) {#MC_ROLL_P} @@ -26951,17 +29309,17 @@ Roll P gain. Roll proportional gain, i.e. desired angular speed in rad/s for error 1 rad. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 12 | 0.1 | 4.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 12 | 0.1 | 4.0 | |   | ### MC_YAWRATE_MAX (`FLOAT`) {#MC_YAWRATE_MAX} Max yaw rate. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 0.0 | 1800.0 | 5 | 200.0 | deg/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | 0.0 | 1800.0 | 5 | 200.0 | deg/s |   | ### MC_YAW_P (`FLOAT`) {#MC_YAW_P} @@ -26969,9 +29327,9 @@ Yaw P gain. Yaw proportional gain, i.e. desired angular speed in rad/s for error 1 rad. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 5 | 0.1 | 2.8 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 5 | 0.1 | 2.8 | |   | ### MC_YAW_WEIGHT (`FLOAT`) {#MC_YAW_WEIGHT} @@ -26981,11 +29339,12 @@ A fraction [0,1] deprioritizing yaw compared to roll and pitch in non-linear att Deprioritizing yaw is necessary because multicopters have much less control authority in yaw compared to the other axes and it makes sense because yaw is not critical for stable hovering or 3D navigation. + For yaw control tuning use MC_YAW_P. This ratio has no impact on the yaw gain. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 1.0 | 0.1 | 0.4 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 1.0 | 0.1 | 0.4 | |   | ### MPC_YAWRAUTO_ACC (`FLOAT`) {#MPC_YAWRAUTO_ACC} @@ -26994,9 +29353,9 @@ Maximum yaw acceleration in autonomous modes. Limits the acceleration of the yaw setpoint to avoid large control output and mixer saturation. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ------- | -|   | 5 | 360 | 5 | 20. | deg/s^2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ------- | --------- | +|   | 5 | 360 | 5 | 20.0 | deg/s^2 |   | ### MPC_YAWRAUTO_MAX (`FLOAT`) {#MPC_YAWRAUTO_MAX} @@ -27005,21 +29364,23 @@ Maximum yaw rate in autonomous modes. Limits the rate of change of the yaw setpoint to avoid large control output and mixer saturation. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 5 | 360 | 5 | 60. | deg/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | 5 | 360 | 5 | 60.0 | deg/s |   | ## Multicopter Position Control ### CP_DELAY (`FLOAT`) {#CP_DELAY} -Average delay of the range sensor message plus the tracking delay of the position controller in seconds. +Range sensor and position controller average delay. + +Average delay of the range sensor message plus the tracking delay of the position controller in seconds Only used in Position mode. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1 | | 0.4 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1 | | 0.4 | s |   | ### CP_DIST (`FLOAT`) {#CP_DIST} @@ -27027,29 +29388,33 @@ Minimum distance the vehicle should keep to all obstacles. Only used in Position mode. Collision avoidance is disabled by setting this parameter to a negative value -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 15 | | -1.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 15 | | -1.0 | m |   | ### CP_GO_NO_DATA (`INT32`) {#CP_GO_NO_DATA} -Boolean to allow moving into directions where there is no sensor data (outside FOV). +Allow moving into directions without sensor data. + +Boolean to allow moving into directions where there is no sensor data (outside FOV) Only used in Position mode. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------------ | ---- | -|   | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------------ | ---- | --------- | +|   | | | | Disabled (0) | |   | ### CP_GUIDE_ANG (`FLOAT`) {#CP_GUIDE_ANG} -Angle left/right from the commanded setpoint by which the collision prevention algorithm can choose to change the setpoint direction. +Collision prevention guidance angle. + +Angle left/right from the commanded setpoint by which the collision prevention algorithm can choose to change the setpoint direction Only used in Position mode. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 90 | | 30. | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 90 | | 30.0 | deg |   | ### MC_MAN_TILT_TAU (`FLOAT`) {#MC_MAN_TILT_TAU} @@ -27057,9 +29422,9 @@ Manual tilt input filter time constant. Setting this parameter to 0 disables the filter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 2.0 | | 0.0 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 2.0 | | 0.0 | s |   | ### MPC_ACC_DECOUPLE (`INT32`) {#MPC_ACC_DECOUPLE} @@ -27069,17 +29434,17 @@ Set to decouple tilt from vertical acceleration. This provides smoother flight but slightly worse tracking in position and auto modes. Unset if accurate position tracking during dynamic maneuvers is more important than a smooth flight. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ----------- | ---- | -|   | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ----------- | ---- | --------- | +|   | | | | Enabled (1) | |   | ### MPC_ACC_DOWN_MAX (`FLOAT`) {#MPC_ACC_DOWN_MAX} Maximum downwards acceleration in climb rate controlled modes. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 2 | 15 | 1 | 3. | m/s^2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | 2 | 15 | 1 | 3.0 | m/s^2 |   | ### MPC_ACC_HOR (`FLOAT`) {#MPC_ACC_HOR} @@ -27087,9 +29452,9 @@ Acceleration for autonomous and for manual modes. When piloting manually, this parameter is only used in MPC_POS_MODE Acceleration based. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 2 | 15 | 1 | 3. | m/s^2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | 2 | 15 | 1 | 3.0 | m/s^2 |   | ### MPC_ACC_HOR_MAX (`FLOAT`) {#MPC_ACC_HOR_MAX} @@ -27099,17 +29464,17 @@ MPC_POS_MODE 1 just deceleration 4 not used, use MPC_ACC_HOR instead -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 2 | 15 | 1 | 5. | m/s^2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | 2 | 15 | 1 | 5.0 | m/s^2 |   | ### MPC_ACC_UP_MAX (`FLOAT`) {#MPC_ACC_UP_MAX} Maximum upwards acceleration in climb rate controlled modes. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 2 | 15 | 1 | 4. | m/s^2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | 2 | 15 | 1 | 4.0 | m/s^2 |   | ### MPC_ALT_MODE (`INT32`) {#MPC_ALT_MODE} @@ -27129,29 +29494,33 @@ The speed threshold is MPC_HOLD_MAX_XY - `1`: Terrain following - `2`: Terrain hold -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 2 | | 2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 2 | | 2 | |   | ### MPC_HOLD_MAX_XY (`FLOAT`) {#MPC_HOLD_MAX_XY} -Maximum horizontal velocity for which position hold is enabled (use 0 to disable check). +Max horizontal velocity for position hold. + +Maximum horizontal velocity for which position hold is enabled (use 0 to disable check) Only used with MPC_POS_MODE Direct velocity or MPC_ALT_MODE 2 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 3 | | 0.8 | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 3 | | 0.8 | m/s |   | ### MPC_HOLD_MAX_Z (`FLOAT`) {#MPC_HOLD_MAX_Z} -Maximum vertical velocity for which position hold is enabled (use 0 to disable check). +Max vertical velocity for position hold. + +Maximum vertical velocity for which position hold is enabled (use 0 to disable check) Only used with MPC_ALT_MODE 1 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 3 | | 0.6 | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 3 | | 0.6 | m/s |   | ### MPC_JERK_AUTO (`FLOAT`) {#MPC_JERK_AUTO} @@ -27160,9 +29529,9 @@ Jerk limit in autonomous modes. Limit the maximum jerk of the vehicle (how fast the acceleration can change). A lower value leads to smoother vehicle motions but also limited agility. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 1 | 80 | 1 | 4. | m/s^3 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | 1 | 80 | 1 | 4.0 | m/s^3 |   | ### MPC_JERK_MAX (`FLOAT`) {#MPC_JERK_MAX} @@ -27170,12 +29539,14 @@ Maximum horizontal and vertical jerk in Position/Altitude mode. Limit the maximum jerk (acceleration change) of the vehicle. A lower value leads to smoother motions but limits agility. + Setting this to the maximum value essentially disables the limit. + Only used with MPC_POS_MODE Acceleration based. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 0.5 | 500 | 1 | 8. | m/s^3 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | 0.5 | 500 | 1 | 8.0 | m/s^3 |   | ### MPC_LAND_ALT1 (`FLOAT`) {#MPC_LAND_ALT1} @@ -27185,9 +29556,9 @@ Below this altitude descending velocity gets limited to a value between "MPC_Z_VEL_MAX_DN" (or "MPC_Z_V_AUTO_DN") and "MPC_LAND_SPEED" Value needs to be higher than "MPC_LAND_ALT2" -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 122 | | 10. | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 122 | | 10.0 | m |   | ### MPC_LAND_ALT2 (`FLOAT`) {#MPC_LAND_ALT2} @@ -27197,9 +29568,9 @@ Below this altitude descending velocity gets limited to "MPC_LAND_SPEED" Value needs to be lower than "MPC_LAND_ALT1" -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 122 | | 5. | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 122 | | 5.0 | m |   | ### MPC_LAND_ALT3 (`FLOAT`) {#MPC_LAND_ALT3} @@ -27208,9 +29579,9 @@ Altitude for 3. step of slow landing. If a valid distance sensor measurement to the ground is available, limit descending velocity to "MPC_LAND_CRWL" below this altitude. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 122 | | 1. | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 122 | | 1.0 | m |   | ### MPC_LAND_CRWL (`FLOAT`) {#MPC_LAND_CRWL} @@ -27218,9 +29589,9 @@ Land crawl descend rate. Used below MPC_LAND_ALT3 if distance sensor data is availabe. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | | | 0.3 | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | | | 0.3 | m/s |   | ### MPC_LAND_RADIUS (`FLOAT`) {#MPC_LAND_RADIUS} @@ -27231,11 +29602,12 @@ allowed horizontal displacement from the original landing point. - If inside of the radius, only allow nudging inputs that do not move the vehicle outside of it. - If outside of the radius, only allow nudging inputs that move the vehicle back towards it. - Set it to -1 for infinite radius. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | | 1 | -1.0 | m | +Set it to -1 for infinite radius. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | | 1 | -1.0 | m |   | ### MPC_LAND_RC_HELP (`INT32`) {#MPC_LAND_RC_HELP} @@ -27246,6 +29618,7 @@ The descend speed is amended: stick full up - 0 stick centered - MPC_LAND_SPEED stick full down - 2 \* MPC_LAND_SPEED + Manual override during auto modes has to be disabled to use this feature (see COM_RC_OVERRIDE). **Values:** @@ -27253,45 +29626,46 @@ Manual override during auto modes has to be disabled to use this feature (see CO - `0`: Nudging disabled - `1`: Nudging enabled -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1 | | 0 | |   | ### MPC_LAND_SPEED (`FLOAT`) {#MPC_LAND_SPEED} Landing descend rate. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.6 | | | 0.7 | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.6 | | | 0.7 | m/s |   | ### MPC_MANTHR_MIN (`FLOAT`) {#MPC_MANTHR_MIN} Minimum collective thrust in Stabilized mode. The value is mapped to the lowest throttle stick position in Stabilized mode. + Too low collective thrust leads to loss of roll/pitch/yaw torque control authority. Airmode is used to keep torque authority with zero thrust (see MC_AIRMODE). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1 | 0.01 | 0.08 | norm | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1 | 0.01 | 0.08 | norm |   | ### MPC_MAN_TILT_MAX (`FLOAT`) {#MPC_MAN_TILT_MAX} Maximal tilt angle in Stabilized, Altitude and Altitude Cruise mode. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1 | 70 | 1 | 35. | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1 | 70 | 1 | 35.0 | deg |   | ### MPC_MAN_Y_MAX (`FLOAT`) {#MPC_MAN_Y_MAX} Max manual yaw rate for Stabilized, Altitude, Position mode. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 0 | 400 | 10 | 150. | deg/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | 0 | 400 | 10 | 150.0 | deg/s |   | ### MPC_MAN_Y_TAU (`FLOAT`) {#MPC_MAN_Y_TAU} @@ -27300,9 +29674,9 @@ Manual yaw rate input filter time constant. Not used in Stabilized mode Setting this parameter to 0 disables the filter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 5 | 0.01 | 0.08 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 5 | 0.01 | 0.08 | s |   | ### MPC_POS_MODE (`INT32`) {#MPC_POS_MODE} @@ -27321,20 +29695,23 @@ Sticks map to acceleration and there's a virtual brake drag - `0`: Direct velocity - `4`: Acceleration based -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 4 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 4 | |   | ### MPC_THR_CURVE (`INT32`) {#MPC_THR_CURVE} Thrust curve mapping in Stabilized Mode. Defines how the throttle stick is mapped to collective thrust in Stabilized mode. + Rescale to hover thrust estimate: Stick input is linearly rescaled, such that a centered throttle stick corresponds to the hover thrust estimator's output. + No rescale: Directly map the stick 1:1 to the output. Can be useful with very low hover thrust which leads to much distortion and the upper half getting sensitive. + Rescale to hover thrust parameter: Similar to rescaling to the hover thrust estimate, but it uses the hover thrust parameter value (see MPC_THR_HOVER) instead of estimated value. With MPC_THR_HOVER 0.5 it's equivalent to No rescale. @@ -27345,9 +29722,9 @@ With MPC_THR_HOVER 0.5 it's equivalent to No rescale. - `1`: No rescale - `2`: Rescale to parameter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### MPC_THR_HOVER (`FLOAT`) {#MPC_THR_HOVER} @@ -27358,9 +29735,9 @@ Used for initialization of the hover thrust estimator. The estimated hover thrust is used as base for zero vertical acceleration in altitude control. The hover thrust is important for land detection to work correctly. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 0.8 | 0.01 | 0.5 | norm | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 0.8 | 0.01 | 0.5 | norm |   | ### MPC_THR_MAX (`FLOAT`) {#MPC_THR_MAX} @@ -27368,9 +29745,9 @@ Maximum collective thrust in climb rate controlled modes. Limit allowed thrust e.g. for indoor test of overpowered vehicle. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1 | 0.05 | 1. | norm | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1 | 0.05 | 1.0 | norm |   | ### MPC_THR_MIN (`FLOAT`) {#MPC_THR_MIN} @@ -27380,9 +29757,9 @@ Too low thrust leads to loss of roll/pitch/yaw torque control authority. With airmode enabled this parameters can be set to 0 while still keeping torque authority (see MC_AIRMODE). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.05 | 0.5 | 0.01 | 0.12 | norm | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.05 | 0.5 | 0.01 | 0.12 | norm |   | ### MPC_THR_XY_MARG (`FLOAT`) {#MPC_THR_XY_MARG} @@ -27391,9 +29768,9 @@ Horizontal thrust margin. Margin that is kept for horizontal control when higher priority vertical thrust is saturated. To avoid completely starving horizontal control with high vertical error. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 0.5 | 0.01 | 0.3 | norm | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 0.5 | 0.01 | 0.3 | norm |   | ### MPC_TILTMAX_AIR (`FLOAT`) {#MPC_TILTMAX_AIR} @@ -27402,9 +29779,9 @@ Maximum tilt angle in air. Absolute maximum for all velocity or acceleration controlled modes. Any higher value is truncated. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 20 | 89 | 1 | 45. | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 20 | 89 | 1 | 45.0 | deg |   | ### MPC_TILTMAX_LND (`FLOAT`) {#MPC_TILTMAX_LND} @@ -27412,9 +29789,9 @@ Maximum tilt during inital takeoff ramp. Tighter tilt limit during takeoff to avoid tip over. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 5 | 89 | 1 | 12. | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 5 | 89 | 1 | 12.0 | deg |   | ### MPC_TKO_RAMP_T (`FLOAT`) {#MPC_TKO_RAMP_T} @@ -27424,17 +29801,17 @@ Increasing this value will make climb rate controlled takeoff slower. If it's too slow the drone might scratch the ground and tip over. A time constant of 0 disables the ramp -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 5 | | 3. | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 5 | | 3.0 | s |   | ### MPC_TKO_SPEED (`FLOAT`) {#MPC_TKO_SPEED} Takeoff climb rate. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1 | 5 | | 1.5 | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1 | 5 | | 1.5 | m/s |   | ### MPC_VELD_LP (`FLOAT`) {#MPC_VELD_LP} @@ -27442,9 +29819,9 @@ Velocity derivative low pass cutoff frequency. A value of 0 disables the filter. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 50 | 0.5 | 5.0 | Hz | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 50 | 0.5 | 5.0 | Hz |   | ### MPC_VEL_LP (`FLOAT`) {#MPC_VEL_LP} @@ -27452,21 +29829,22 @@ Velocity low pass cutoff frequency. A value of 0 disables the filter. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 50 | 0.5 | 0.0 | Hz | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 50 | 0.5 | 0.0 | Hz |   | ### MPC_VEL_MANUAL (`FLOAT`) {#MPC_VEL_MANUAL} Maximum horizontal velocity setpoint in Position mode. Must be smaller than MPC_XY_VEL_MAX. + The maximum sideways and backward speed can be set differently using MPC_VEL_MAN_SIDE and MPC_VEL_MAN_BACK, respectively. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 3 | 20 | 1 | 10. | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 3 | 20 | 1 | 10.0 | m/s |   | ### MPC_VEL_MAN_BACK (`FLOAT`) {#MPC_VEL_MAN_BACK} @@ -27475,9 +29853,9 @@ Maximum backward velocity in Position mode. If set to a negative value or larger than MPC_VEL_MANUAL then MPC_VEL_MANUAL is used. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 20 | 1 | -1. | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 20 | 1 | -1.0 | m/s |   | ### MPC_VEL_MAN_SIDE (`FLOAT`) {#MPC_VEL_MAN_SIDE} @@ -27486,9 +29864,9 @@ Maximum sideways velocity in Position mode. If set to a negative value or larger than MPC_VEL_MANUAL then MPC_VEL_MANUAL is used. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 20 | 1 | -1. | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 20 | 1 | -1.0 | m/s |   | ### MPC_VEL_NF_BW (`FLOAT`) {#MPC_VEL_NF_BW} @@ -27496,9 +29874,9 @@ Velocity notch filter bandwidth. A value of 0 disables the filter. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 50 | 0.5 | 5.0 | Hz | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 50 | 0.5 | 5.0 | Hz |   | ### MPC_VEL_NF_FRQ (`FLOAT`) {#MPC_VEL_NF_FRQ} @@ -27507,9 +29885,9 @@ Velocity notch filter frequency. The center frequency for the 2nd order notch filter on the velocity. A value of 0 disables the filter. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 50 | 0.5 | 0.0 | Hz | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 50 | 0.5 | 0.0 | Hz |   | ### MPC_XY_CRUISE (`FLOAT`) {#MPC_XY_CRUISE} @@ -27517,9 +29895,9 @@ Default horizontal velocity in autonomous modes. e.g. in Missions, RTL, Goto if the waypoint does not specify differently -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 3 | 20 | 1 | 5. | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 3 | 20 | 1 | 5.0 | m/s |   | ### MPC_XY_ERR_MAX (`FLOAT`) {#MPC_XY_ERR_MAX} @@ -27529,12 +29907,13 @@ The integration speed of the trajectory setpoint is linearly reduced with the horizontal position tracking error. When the error is above this parameter, the integration of the trajectory is stopped to wait for the drone. + This value can be adjusted depending on the tracking capabilities of the vehicle. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 10 | 1 | 2. | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 10 | 1 | 2.0 | |   | ### MPC_XY_P (`FLOAT`) {#MPC_XY_P} @@ -27542,17 +29921,17 @@ Proportional gain for horizontal position error. Defined as corrective velocity in m/s per m position error -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 2 | 0.1 | 0.95 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 2 | 0.1 | 0.95 | |   | ### MPC_XY_TRAJ_P (`FLOAT`) {#MPC_XY_TRAJ_P} Proportional gain for horizontal trajectory position error. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 1 | 0.1 | 0.5 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 1 | 0.1 | 0.5 | |   | ### MPC_XY_VEL_ALL (`FLOAT`) {#MPC_XY_VEL_ALL} @@ -27562,9 +29941,9 @@ If set to a value greater than zero, other parameters are automatically set (suc MPC_XY_VEL_MAX or MPC_VEL_MANUAL). If set to a negative value, the existing individual parameters are used. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -20 | 20 | 1 | -10. | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -20 | 20 | 1 | -10.0 | |   | ### MPC_XY_VEL_D_ACC (`FLOAT`) {#MPC_XY_VEL_D_ACC} @@ -27572,9 +29951,9 @@ Differential gain for horizontal velocity error. Defined as corrective acceleration in m/s^2 per m/s^2 velocity derivative -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 2 | 0.02 | 0.2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 2 | 0.02 | 0.2 | |   | ### MPC_XY_VEL_I_ACC (`FLOAT`) {#MPC_XY_VEL_I_ACC} @@ -27583,9 +29962,9 @@ Integral gain for horizontal velocity error. Defined as correction acceleration in m/s^2 per m velocity integral Allows to eliminate steady state errors in disturbances like wind. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 60 | 0.02 | 0.4 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 60 | 0.02 | 0.4 | |   | ### MPC_XY_VEL_MAX (`FLOAT`) {#MPC_XY_VEL_MAX} @@ -27594,9 +29973,9 @@ Maximum horizontal velocity. Absolute maximum for all velocity controlled modes. Any higher value is truncated. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 20 | 1 | 12. | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 20 | 1 | 12.0 | m/s |   | ### MPC_XY_VEL_P_ACC (`FLOAT`) {#MPC_XY_VEL_P_ACC} @@ -27604,9 +29983,9 @@ Proportional gain for horizontal velocity error. Defined as corrective acceleration in m/s^2 per m/s velocity error -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1.2 | 5 | 0.1 | 1.8 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1.2 | 5 | 0.1 | 1.8 | |   | ### MPC_Z_P (`FLOAT`) {#MPC_Z_P} @@ -27614,9 +29993,9 @@ Proportional gain for vertical position error. Defined as corrective velocity in m/s per m position error -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 1.5 | 0.1 | 1. | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 1.5 | 0.1 | 1.0 | |   | ### MPC_Z_VEL_ALL (`FLOAT`) {#MPC_Z_VEL_ALL} @@ -27626,9 +30005,9 @@ If set to a value greater than zero, other parameters are automatically set (suc MPC_Z_VEL_MAX_UP or MPC_LAND_SPEED). If set to a negative value, the existing individual parameters are used. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -3 | 8 | 0.5 | -3. | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -3 | 8 | 0.5 | -3.0 | |   | ### MPC_Z_VEL_D_ACC (`FLOAT`) {#MPC_Z_VEL_D_ACC} @@ -27636,9 +30015,9 @@ Differential gain for vertical velocity error. Defined as corrective acceleration in m/s^2 per m/s^2 velocity derivative -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 2 | 0.02 | 0. | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 2 | 0.02 | 0.0 | |   | ### MPC_Z_VEL_I_ACC (`FLOAT`) {#MPC_Z_VEL_I_ACC} @@ -27646,9 +30025,9 @@ Integral gain for vertical velocity error. Defined as corrective acceleration in m/s^2 per m velocity integral -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.2 | 3 | 0.1 | 2. | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.2 | 3 | 0.1 | 2.0 | |   | ### MPC_Z_VEL_MAX_DN (`FLOAT`) {#MPC_Z_VEL_MAX_DN} @@ -27656,11 +30035,12 @@ Maximum descent velocity. Absolute maximum for all climb rate controlled modes. In manually piloted modes full stick deflection commands this velocity. + For default autonomous velocity see MPC_Z_V_AUTO_UP -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.5 | 4 | 0.1 | 1.5 | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.5 | 4 | 0.1 | 1.5 | m/s |   | ### MPC_Z_VEL_MAX_UP (`FLOAT`) {#MPC_Z_VEL_MAX_UP} @@ -27668,11 +30048,12 @@ Maximum ascent velocity. Absolute maximum for all climb rate controlled modes. In manually piloted modes full stick deflection commands this velocity. + For default autonomous velocity see MPC_Z_V_AUTO_UP -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.5 | 8 | 0.1 | 3. | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.5 | 8 | 0.1 | 3.0 | m/s |   | ### MPC_Z_VEL_P_ACC (`FLOAT`) {#MPC_Z_VEL_P_ACC} @@ -27680,9 +30061,9 @@ Proportional gain for vertical velocity error. Defined as corrective acceleration in m/s^2 per m/s velocity error -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 2 | 15 | 0.1 | 4. | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 2 | 15 | 0.1 | 4.0 | |   | ### MPC_Z_V_AUTO_DN (`FLOAT`) {#MPC_Z_V_AUTO_DN} @@ -27690,9 +30071,9 @@ Descent velocity in autonomous modes. For manual modes and offboard, see MPC_Z_VEL_MAX_DN -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.5 | 4 | 0.5 | 1.5 | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.5 | 4 | 0.5 | 1.5 | m/s |   | ### MPC_Z_V_AUTO_UP (`FLOAT`) {#MPC_Z_V_AUTO_UP} @@ -27700,17 +30081,9 @@ Ascent velocity in autonomous modes. For manually controlled modes and offboard see MPC_Z_VEL_MAX_UP -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.5 | 8 | 0.5 | 3. | m/s | - -### SC_MAN_TILT_MAX (`FLOAT`) {#SC_MAN_TILT_MAX} - -Maximal tilt angle in Stabilized or Manual mode. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 90 | 1 | 90. | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.5 | 8 | 0.5 | 3.0 | m/s |   | ### SYS_VEHICLE_RESP (`FLOAT`) {#SYS_VEHICLE_RESP} @@ -27718,37 +30091,40 @@ Responsiveness. Changes the overall responsiveness of the vehicle. The higher the value, the faster the vehicle will react. + If set to a value greater than zero, other parameters are automatically set (such as the acceleration or jerk limits). If set to a negative value, the existing individual parameters are used. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 1 | 0.05 | -0.4 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1 | 0.05 | -0.4 | |   | ### WV_EN (`INT32`) {#WV_EN} Enable weathervane. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------------ | ---- | -|   | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------------ | ---- | --------- | +|   | | | | Disabled (0) | |   | ### WV_ROLL_MIN (`FLOAT`) {#WV_ROLL_MIN} -Minimum roll angle setpoint for weathervane controller to demand a yaw-rate. +Minimum roll angle for weathervane yaw-rate demand. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 5 | | 1.0 | deg | +Minimum roll angle setpoint for weathervane controller to demand a yaw-rate + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 5 | | 1.0 | deg |   | ### WV_YRATE_MAX (`FLOAT`) {#WV_YRATE_MAX} Maximum yawrate the weathervane controller is allowed to demand. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 0 | 120 | | 90.0 | deg/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | 0 | 120 | | 90.0 | deg/s |   | ## Multicopter Position Slow Mode @@ -27760,9 +30136,9 @@ This value is used in slow mode if no aux channel is mapped and no limit is commanded through MAVLink. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | | 0.1 | 3. | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | | 0.1 | 3.0 | m/s |   | ### MC_SLOW_DEF_VVEL (`FLOAT`) {#MC_SLOW_DEF_VVEL} @@ -27772,9 +30148,9 @@ This value is used in slow mode if no aux channel is mapped and no limit is commanded through MAVLink. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | | 0.1 | 1. | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | | 0.1 | 1.0 | m/s |   | ### MC_SLOW_DEF_YAWR (`FLOAT`) {#MC_SLOW_DEF_YAWR} @@ -27784,9 +30160,9 @@ This value is used in slow mode if no aux channel is mapped and no limit is commanded through MAVLink. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 1 | | 0.1 | 45. | deg/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | 1 | | 0.1 | 45.0 | deg/s |   | ### MC_SLOW_MAP_HVEL (`INT32`) {#MC_SLOW_MAP_HVEL} @@ -27802,13 +30178,15 @@ Manual input mapped to scale horizontal velocity in position slow mode. - `5`: AUX5 - `6`: AUX6 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### MC_SLOW_MAP_PTCH (`INT32`) {#MC_SLOW_MAP_PTCH} -RC_MAP_AUX{N} to allow for gimbal pitch rate control in position slow mode. +Gimbal pitch rate control input in position slow mode. + +RC_MAP_AUX{N} to allow for gimbal pitch rate control in position slow mode **Values:** @@ -27820,9 +30198,9 @@ RC_MAP_AUX{N} to allow for gimbal pitch rate control in position slow mode. - `5`: AUX5 - `6`: AUX6 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### MC_SLOW_MAP_VVEL (`INT32`) {#MC_SLOW_MAP_VVEL} @@ -27838,9 +30216,9 @@ Manual input mapped to scale vertical velocity in position slow mode. - `5`: AUX5 - `6`: AUX6 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### MC_SLOW_MAP_YAWR (`INT32`) {#MC_SLOW_MAP_YAWR} @@ -27856,9 +30234,9 @@ Manual input mapped to scale yaw rate in position slow mode. - `5`: AUX5 - `6`: AUX6 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### MC_SLOW_MIN_HVEL (`FLOAT`) {#MC_SLOW_MIN_HVEL} @@ -27866,9 +30244,9 @@ Horizontal velocity lower limit. The lowest input maps and is clamped to this velocity. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | | 0.1 | .3 | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | | 0.1 | 0.3 | m/s |   | ### MC_SLOW_MIN_VVEL (`FLOAT`) {#MC_SLOW_MIN_VVEL} @@ -27876,9 +30254,9 @@ Vertical velocity lower limit. The lowest input maps and is clamped to this velocity. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | | 0.1 | .3 | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | | 0.1 | 0.3 | m/s |   | ### MC_SLOW_MIN_YAWR (`FLOAT`) {#MC_SLOW_MIN_YAWR} @@ -27886,9 +30264,9 @@ Yaw rate lower limit. The lowest input maps and is clamped to this rate. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 1 | | 0.1 | 3. | deg/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | 1 | | 0.1 | 3.0 | deg/s |   | ## Multicopter Raptor @@ -27898,9 +30276,9 @@ Enable Raptor flight mode. When enabled, the Raptor flight mode will be available. Please set MC_RAPTOR_OFFB according to your use case. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------------ | ---- | -|   | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------------ | ---- | --------- | +|   | | | | Disabled (0) | |   | ### MC_RAPTOR_INTREF (`INT32`) {#MC_RAPTOR_INTREF} @@ -27914,9 +30292,9 @@ Use `mc_raptor intref lissajous ` to - `0`: None - `1`: Lissajous -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### MC_RAPTOR_OFFB (`INT32`) {#MC_RAPTOR_OFFB} @@ -27925,9 +30303,9 @@ Enable Offboard mode replacement. When enabled, the Raptor mode will replace the Offboard mode. If disabled, the Raptor mode will be available as a separate external mode. In the latter case, Raptor will just hold the position, without requiring external setpoints. When Raptor replaces the Offboard mode, it requires external setpoints to be activated. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------------ | ---- | -|   | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------------ | ---- | --------- | +|   | | | | Disabled (0) | |   | ### MC_RAPTOR_VERBOS (`INT32`) {#MC_RAPTOR_VERBOS} @@ -27935,9 +30313,9 @@ Enable verbose output. When enabled, the Raptor flight mode will print verbose output to the console. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------------ | ---- | -|   | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------------ | ---- | --------- | +|   | | | | Disabled (0) | |   | ## Multicopter Rate Control @@ -27951,9 +30329,9 @@ should constantly behave as if it was fully charged with reduced max acceleratio at lower battery percentages. i.e. if hover is at 0.5 throttle at 100% battery, it will still be 0.5 at 60% battery. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------------ | ---- | -|   | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------------ | ---- | --------- | +|   | | | | Disabled (0) | |   | ### MC_PITCHRATE_D (`FLOAT`) {#MC_PITCHRATE_D} @@ -27961,9 +30339,9 @@ Pitch rate D gain. Pitch rate differential gain. Small values help reduce fast oscillations. If value is too big oscillations will appear again. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | | 0.0005 | 0.003 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | | 0.0005 | 0.003 | |   | ### MC_PITCHRATE_FF (`FLOAT`) {#MC_PITCHRATE_FF} @@ -27971,9 +30349,9 @@ Pitch rate feedforward. Improves tracking performance. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | | | 0.0 | |   | ### MC_PITCHRATE_I (`FLOAT`) {#MC_PITCHRATE_I} @@ -27981,26 +30359,30 @@ Pitch rate I gain. Pitch rate integral gain. Can be set to compensate static thrust difference or gravity center offset. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | | 0.01 | 0.2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | | 0.01 | 0.2 | |   | ### MC_PITCHRATE_K (`FLOAT`) {#MC_PITCHRATE_K} Pitch rate controller gain. Global gain of the controller. + This gain scales the P, I and D terms of the controller: -output = MC_PITCHRATE_K _ (MC_PITCHRATE_P _ error -- MC_PITCHRATE_I \* error_integral -- MC_PITCHRATE_D \* error_derivative) - Set MC_PITCHRATE_P=1 to implement a PID in the ideal form. - Set MC_PITCHRATE_K=1 to implement a PID in the parallel form. +``` +output = MC_PITCHRATE_K * (MC_PITCHRATE_P * error ++ MC_PITCHRATE_I * error_integral ++ MC_PITCHRATE_D * error_derivative) +``` -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.01 | 5.0 | 0.0005 | 1.0 | +Set MC_PITCHRATE_P=1 to implement a PID in the ideal form. +Set MC_PITCHRATE_K=1 to implement a PID in the parallel form. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.01 | 5.0 | 0.0005 | 1.0 | |   | ### MC_PITCHRATE_P (`FLOAT`) {#MC_PITCHRATE_P} @@ -28008,9 +30390,9 @@ Pitch rate P gain. Pitch rate proportional gain, i.e. control output for angular speed error 1 rad/s. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.01 | 0.6 | 0.01 | 0.15 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.01 | 0.6 | 0.01 | 0.15 | |   | ### MC_PR_INT_LIM (`FLOAT`) {#MC_PR_INT_LIM} @@ -28018,9 +30400,9 @@ Pitch rate integrator limit. Can be set to increase the amount of integrator available to counteract disturbances or reduced to improve settling time after large pitch moment trim changes. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | | 0.01 | 0.30 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | | 0.01 | 0.3 | |   | ### MC_ROLLRATE_D (`FLOAT`) {#MC_ROLLRATE_D} @@ -28028,9 +30410,9 @@ Roll rate D gain. Roll rate differential gain. Small values help reduce fast oscillations. If value is too big oscillations will appear again. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 0.01 | 0.0005 | 0.003 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 0.01 | 0.0005 | 0.003 | |   | ### MC_ROLLRATE_FF (`FLOAT`) {#MC_ROLLRATE_FF} @@ -28038,9 +30420,9 @@ Roll rate feedforward. Improves tracking performance. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | | | 0.0 | |   | ### MC_ROLLRATE_I (`FLOAT`) {#MC_ROLLRATE_I} @@ -28048,26 +30430,30 @@ Roll rate I gain. Roll rate integral gain. Can be set to compensate static thrust difference or gravity center offset. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | | 0.01 | 0.2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | | 0.01 | 0.2 | |   | ### MC_ROLLRATE_K (`FLOAT`) {#MC_ROLLRATE_K} Roll rate controller gain. Global gain of the controller. + This gain scales the P, I and D terms of the controller: -output = MC_ROLLRATE_K _ (MC_ROLLRATE_P _ error -- MC_ROLLRATE_I \* error_integral -- MC_ROLLRATE_D \* error_derivative) - Set MC_ROLLRATE_P=1 to implement a PID in the ideal form. - Set MC_ROLLRATE_K=1 to implement a PID in the parallel form. +``` +output = MC_ROLLRATE_K * (MC_ROLLRATE_P * error ++ MC_ROLLRATE_I * error_integral ++ MC_ROLLRATE_D * error_derivative) +``` -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.01 | 5.0 | 0.0005 | 1.0 | +Set MC_ROLLRATE_P=1 to implement a PID in the ideal form. +Set MC_ROLLRATE_K=1 to implement a PID in the parallel form. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.01 | 5.0 | 0.0005 | 1.0 | |   | ### MC_ROLLRATE_P (`FLOAT`) {#MC_ROLLRATE_P} @@ -28075,9 +30461,9 @@ Roll rate P gain. Roll rate proportional gain, i.e. control output for angular speed error 1 rad/s. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.01 | 0.5 | 0.01 | 0.15 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.01 | 0.5 | 0.01 | 0.15 | |   | ### MC_RR_INT_LIM (`FLOAT`) {#MC_RR_INT_LIM} @@ -28085,9 +30471,9 @@ Roll rate integrator limit. Can be set to increase the amount of integrator available to counteract disturbances or reduced to improve settling time after large roll moment trim changes. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | | 0.01 | 0.30 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | | 0.01 | 0.3 | |   | ### MC_YAWRATE_D (`FLOAT`) {#MC_YAWRATE_D} @@ -28095,9 +30481,9 @@ Yaw rate D gain. Yaw rate differential gain. Small values help reduce fast oscillations. If value is too big oscillations will appear again. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | | 0.0005 | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | | 0.0005 | 0.0 | |   | ### MC_YAWRATE_FF (`FLOAT`) {#MC_YAWRATE_FF} @@ -28105,9 +30491,9 @@ Yaw rate feedforward. Improves tracking performance. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | | | 0.0 | |   | ### MC_YAWRATE_I (`FLOAT`) {#MC_YAWRATE_I} @@ -28115,26 +30501,30 @@ Yaw rate I gain. Yaw rate integral gain. Can be set to compensate static thrust difference or gravity center offset. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | | 0.01 | 0.1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | | 0.01 | 0.1 | |   | ### MC_YAWRATE_K (`FLOAT`) {#MC_YAWRATE_K} Yaw rate controller gain. Global gain of the controller. + This gain scales the P, I and D terms of the controller: -output = MC_YAWRATE_K _ (MC_YAWRATE_P _ error -- MC_YAWRATE_I \* error_integral -- MC_YAWRATE_D \* error_derivative) - Set MC_YAWRATE_P=1 to implement a PID in the ideal form. - Set MC_YAWRATE_K=1 to implement a PID in the parallel form. +``` +output = MC_YAWRATE_K * (MC_YAWRATE_P * error ++ MC_YAWRATE_I * error_integral ++ MC_YAWRATE_D * error_derivative) +``` -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.01 | 5.0 | 0.0005 | 1.0 | +Set MC_YAWRATE_P=1 to implement a PID in the ideal form. +Set MC_YAWRATE_K=1 to implement a PID in the parallel form. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.01 | 5.0 | 0.0005 | 1.0 | |   | ### MC_YAWRATE_P (`FLOAT`) {#MC_YAWRATE_P} @@ -28142,9 +30532,9 @@ Yaw rate P gain. Yaw rate proportional gain, i.e. control output for angular speed error 1 rad/s. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 0.6 | 0.01 | 0.2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 0.6 | 0.01 | 0.2 | |   | ### MC_YAW_TQ_CUTOFF (`FLOAT`) {#MC_YAW_TQ_CUTOFF} @@ -28153,9 +30543,9 @@ Low pass filter cutoff frequency for yaw torque setpoint. Reduces vibrations by lowering high frequency torque caused by rotor acceleration. 0 disables the filter -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 10 | | 2. | Hz | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 10 | | 2.0 | Hz |   | ### MC_YR_INT_LIM (`FLOAT`) {#MC_YR_INT_LIM} @@ -28163,9 +30553,9 @@ Yaw rate integrator limit. Can be set to increase the amount of integrator available to counteract disturbances or reduced to improve settling time after large yaw moment trim changes. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | | 0.01 | 0.30 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | | 0.01 | 0.3 | |   | ## Neural Control @@ -28173,41 +30563,47 @@ Can be set to increase the amount of integrator available to counteract disturba If true the neural network control is automatically started on boot. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ----------- | ---- | -|   | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ----------- | ---- | --------- | +|   | | | | Enabled (1) | |   | ### MC_NN_MANL_CTRL (`INT32`) {#MC_NN_MANL_CTRL} Enable or disable setting the trajectory setpoint with manual control. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ----------- | ---- | -| ✓ | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ----------- | ---- | --------- | +| ✓ | | | | Enabled (1) | |   | ### MC_NN_MAX_RPM (`INT32`) {#MC_NN_MAX_RPM} -The maximum RPM of the motors. Used to normalize the output of the neural network. +Max motor RPM for neural network normalization. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 80000 | | 22000 | +The maximum RPM of the motors. Used to normalize the output of the neural network + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 80000 | | 22000 | |   | ### MC_NN_MIN_RPM (`INT32`) {#MC_NN_MIN_RPM} -The minimum RPM of the motors. Used to normalize the output of the neural network. +Min motor RPM for neural network normalization. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 80000 | | 1000 | +The minimum RPM of the motors. Used to normalize the output of the neural network + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 80000 | | 1000 | |   | ### MC_NN_THRST_COEF (`FLOAT`) {#MC_NN_THRST_COEF} -Thrust coefficient of the motors. Used to normalize the output of the neural network. Divided by 100 000. +Motor thrust coefficient for NN normalization. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 5.0 | | 1.2 | +Thrust coefficient of the motors. Used to normalize the output of the neural network. Divided by 100 000 + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 5.0 | | 1.2 | |   | ## OSD @@ -28232,9 +30628,9 @@ Configure on which serial port to run MSP OSD. - `301`: Wifi Port - `401`: EXT2 -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### OSD_ATXXXX_CFG (`INT32`) {#OSD_ATXXXX_CFG} @@ -28249,9 +30645,9 @@ select the transmission standard. - `1`: NTSC - `2`: PAL -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### OSD_CH_HEIGHT (`INT32`) {#OSD_CH_HEIGHT} @@ -28261,9 +30657,9 @@ Controls the vertical position of the crosshair display. Resolution is limited by OSD to 15 discrete values. Negative values will display the crosshairs below the horizon -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -8 | 8 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -8 | 8 | | 0 | |   | ### OSD_DWELL_TIME (`INT32`) {#OSD_DWELL_TIME} @@ -28271,9 +30667,9 @@ OSD Dwell Time (ms). Amount of time in milliseconds to dwell at the beginning of the display, when scrolling. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 100 | 10000 | | 500 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 100 | 10000 | | 500 | |   | ### OSD_LOG_LEVEL (`INT32`) {#OSD_LOG_LEVEL} @@ -28281,9 +30677,9 @@ OSD Warning Level. Minimum security of log level to display on the OSD. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 3 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 3 | |   | ### OSD_RC_STICK (`INT32`) {#OSD_RC_STICK} @@ -28291,9 +30687,9 @@ OSD RC Stick commands. Forward RC stick input to VTX when disarmed -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1 | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1 | | 1 | |   | ### OSD_SCROLL_RATE (`INT32`) {#OSD_SCROLL_RATE} @@ -28302,9 +30698,9 @@ OSD Scroll Rate (ms). Scroll rate in milliseconds for OSD messages longer than available character width. This is lower-bounded by the nominal loop rate of this module. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 100 | 1000 | | 125 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 100 | 1000 | | 125 | |   | ### OSD_SYMBOLS (`INT32`) {#OSD_SYMBOLS} @@ -28337,9 +30733,9 @@ Configure / toggle support display options. - `20`: (unused) HORIZON_SIDEBARS - `21`: POWER -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 4194303 | | 16383 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 4194303 | | 16383 | |   | ## PWM Outputs @@ -28349,9 +30745,9 @@ S.BUS out. Set to 1 to enable S.BUS version 1 output instead of RSSI. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------------ | ---- | -|   | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------------ | ---- | --------- | +|   | | | | Disabled (0) | |   | ### THR_MDL_FAC (`FLOAT`) {#THR_MDL_FAC} @@ -28359,13 +30755,19 @@ Thrust to motor control signal model parameter. Parameter used to model the nonlinear relationship between motor control signal (e.g. PWM) and static thrust. -The model is: rel_thrust = factor _ rel_signal^2 + (1-factor) _ rel_signal, -where rel_thrust is the normalized thrust between 0 and 1, and + +The model is: + +``` +rel_thrust = factor * rel_signal^2 + (1-factor) * rel_signal +``` + +, where rel_thrust is the normalized thrust between 0 and 1, and rel_signal is the relative motor control signal between 0 and 1. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 1.0 | 0.1 | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 1.0 | 0.1 | 0.0 | |   | ## Payload Deliverer @@ -28378,9 +30780,9 @@ If the gripper has no feedback sensor, it will simply wait for this time before considering gripper actuation successful and publish a 'VehicleCommandAck' signaling successful gripper action -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | | | 1 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | | | 1 | s |   | ### PD_GRIPPER_TYPE (`INT32`) {#PD_GRIPPER_TYPE} @@ -28391,9 +30793,9 @@ Type of Gripper (Servo, etc.). - `-1`: Undefined - `0`: Servo -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 0 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 0 | | 0 | |   | ## Precision Land @@ -28403,9 +30805,9 @@ Landing Target Timeout. Time after which the landing target is considered lost without any new measurements. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 50 | 0.5 | 5.0 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 50 | 0.5 | 5.0 | s |   | ### PLD_FAPPR_ALT (`FLOAT`) {#PLD_FAPPR_ALT} @@ -28413,9 +30815,9 @@ Final approach altitude. Allow final approach (without horizontal positioning) if losing landing target closer than this to the ground. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 10 | 0.1 | 0.1 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 10 | 0.1 | 0.1 | m |   | ### PLD_HACC_RAD (`FLOAT`) {#PLD_HACC_RAD} @@ -28423,9 +30825,9 @@ Horizontal acceptance radius. Start descending if closer above landing target than this. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 10 | 0.1 | 0.2 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 10 | 0.1 | 0.2 | m |   | ### PLD_MAX_SRCH (`INT32`) {#PLD_MAX_SRCH} @@ -28433,9 +30835,9 @@ Maximum number of search attempts. Maximum number of times to search for the landing target if it is lost during the precision landing. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 100 | | 3 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 100 | | 3 | |   | ### PLD_SRCH_ALT (`FLOAT`) {#PLD_SRCH_ALT} @@ -28443,9 +30845,9 @@ Search altitude. Altitude above home to which to climb when searching for the landing target. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 100 | 0.1 | 10.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 100 | 0.1 | 10.0 | m |   | ### PLD_SRCH_TOUT (`FLOAT`) {#PLD_SRCH_TOUT} @@ -28453,9 +30855,9 @@ Search timeout. Time allowed to search for the landing target before falling back to normal landing. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 100 | 0.1 | 10.0 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 100 | 0.1 | 10.0 | s |   | ## Pure Pursuit @@ -28465,25 +30867,25 @@ Tuning parameter for the pure pursuit controller. Lower value -> More aggressive controller (beware overshoot/oscillations) -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 100 | 0.01 | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 100 | 0.01 | 1.0 | |   | ### PP_LOOKAHD_MAX (`FLOAT`) {#PP_LOOKAHD_MAX} Maximum lookahead distance for the pure pursuit controller. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 100 | 0.01 | 10.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 100 | 0.01 | 10.0 | m |   | ### PP_LOOKAHD_MIN (`FLOAT`) {#PP_LOOKAHD_MIN} Minimum lookahead distance for the pure pursuit controller. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 100 | 0.01 | 1.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 100 | 0.01 | 1.0 | m |   | ## RC @@ -28493,9 +30895,9 @@ Crossfire RC telemetry enable. Crossfire telemetry enable -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------------ | ---- | -|   | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------------ | ---- | --------- | +|   | | | | Disabled (0) | |   | ### RC_GHST_TEL_EN (`INT32`) {#RC_GHST_TEL_EN} @@ -28503,9 +30905,9 @@ Ghost RC telemetry enable. Ghost telemetry enable -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------------ | ---- | -|   | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------------ | ---- | --------- | +|   | | | | Disabled (0) | |   | ## RC Input @@ -28527,9 +30929,9 @@ Select your RC input protocol or auto to scan. - `6`: CRSF - `7`: GHST -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 7 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 7 | | -1 | |   | ## Radio Calibration @@ -28539,9 +30941,9 @@ RC channel 10 maximum. Maximum value for this channel. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1500.0 | 2200.0 | | 2000 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1500.0 | 2200.0 | | 2000 | us |   | ### RC10_MIN (`FLOAT`) {#RC10_MIN} @@ -28549,24 +30951,19 @@ RC channel 10 minimum. Minimum value for this channel. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800.0 | 1500.0 | | 1000 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800.0 | 1500.0 | | 1000 | us |   | -### RC10_REV (`FLOAT`) {#RC10_REV} +### RC10_REV (`INT32`) {#RC10_REV} RC channel 10 reverse. Set to -1 to reverse channel. -**Values:** - -- `-1.0`: Reverse -- `1.0`: Normal - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1.0 | 1.0 | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1 | | 1 | |   | ### RC10_TRIM (`FLOAT`) {#RC10_TRIM} @@ -28574,9 +30971,9 @@ RC channel 10 trim. Mid point value -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800.0 | 2200.0 | | 1500 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800.0 | 2200.0 | | 1500 | us |   | ### RC11_MAX (`FLOAT`) {#RC11_MAX} @@ -28584,9 +30981,9 @@ RC channel 11 maximum. Maximum value for this channel. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1500.0 | 2200.0 | | 2000 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1500.0 | 2200.0 | | 2000 | us |   | ### RC11_MIN (`FLOAT`) {#RC11_MIN} @@ -28594,24 +30991,19 @@ RC channel 11 minimum. Minimum value for this channel. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800.0 | 1500.0 | | 1000 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800.0 | 1500.0 | | 1000 | us |   | -### RC11_REV (`FLOAT`) {#RC11_REV} +### RC11_REV (`INT32`) {#RC11_REV} RC channel 11 reverse. Set to -1 to reverse channel. -**Values:** - -- `-1.0`: Reverse -- `1.0`: Normal - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1.0 | 1.0 | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1 | | 1 | |   | ### RC11_TRIM (`FLOAT`) {#RC11_TRIM} @@ -28619,9 +31011,9 @@ RC channel 11 trim. Mid point value -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800.0 | 2200.0 | | 1500 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800.0 | 2200.0 | | 1500 | us |   | ### RC12_MAX (`FLOAT`) {#RC12_MAX} @@ -28629,9 +31021,9 @@ RC channel 12 maximum. Maximum value for this channel. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1500.0 | 2200.0 | | 2000 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1500.0 | 2200.0 | | 2000 | us |   | ### RC12_MIN (`FLOAT`) {#RC12_MIN} @@ -28639,24 +31031,19 @@ RC channel 12 minimum. Minimum value for this channel. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800.0 | 1500.0 | | 1000 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800.0 | 1500.0 | | 1000 | us |   | -### RC12_REV (`FLOAT`) {#RC12_REV} +### RC12_REV (`INT32`) {#RC12_REV} RC channel 12 reverse. Set to -1 to reverse channel. -**Values:** - -- `-1.0`: Reverse -- `1.0`: Normal - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1.0 | 1.0 | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1 | | 1 | |   | ### RC12_TRIM (`FLOAT`) {#RC12_TRIM} @@ -28664,9 +31051,9 @@ RC channel 12 trim. Mid point value -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800.0 | 2200.0 | | 1500 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800.0 | 2200.0 | | 1500 | us |   | ### RC13_MAX (`FLOAT`) {#RC13_MAX} @@ -28674,9 +31061,9 @@ RC channel 13 maximum. Maximum value for this channel. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1500.0 | 2200.0 | | 2000 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1500.0 | 2200.0 | | 2000 | us |   | ### RC13_MIN (`FLOAT`) {#RC13_MIN} @@ -28684,24 +31071,19 @@ RC channel 13 minimum. Minimum value for this channel. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800.0 | 1500.0 | | 1000 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800.0 | 1500.0 | | 1000 | us |   | -### RC13_REV (`FLOAT`) {#RC13_REV} +### RC13_REV (`INT32`) {#RC13_REV} RC channel 13 reverse. Set to -1 to reverse channel. -**Values:** - -- `-1.0`: Reverse -- `1.0`: Normal - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1.0 | 1.0 | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1 | | 1 | |   | ### RC13_TRIM (`FLOAT`) {#RC13_TRIM} @@ -28709,9 +31091,9 @@ RC channel 13 trim. Mid point value -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800.0 | 2200.0 | | 1500 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800.0 | 2200.0 | | 1500 | us |   | ### RC14_MAX (`FLOAT`) {#RC14_MAX} @@ -28719,9 +31101,9 @@ RC channel 14 maximum. Maximum value for this channel. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1500.0 | 2200.0 | | 2000 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1500.0 | 2200.0 | | 2000 | us |   | ### RC14_MIN (`FLOAT`) {#RC14_MIN} @@ -28729,24 +31111,19 @@ RC channel 14 minimum. Minimum value for this channel. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800.0 | 1500.0 | | 1000 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800.0 | 1500.0 | | 1000 | us |   | -### RC14_REV (`FLOAT`) {#RC14_REV} +### RC14_REV (`INT32`) {#RC14_REV} RC channel 14 reverse. Set to -1 to reverse channel. -**Values:** - -- `-1.0`: Reverse -- `1.0`: Normal - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1.0 | 1.0 | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1 | | 1 | |   | ### RC14_TRIM (`FLOAT`) {#RC14_TRIM} @@ -28754,9 +31131,9 @@ RC channel 14 trim. Mid point value -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800.0 | 2200.0 | | 1500 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800.0 | 2200.0 | | 1500 | us |   | ### RC15_MAX (`FLOAT`) {#RC15_MAX} @@ -28764,9 +31141,9 @@ RC channel 15 maximum. Maximum value for this channel. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1500.0 | 2200.0 | | 2000 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1500.0 | 2200.0 | | 2000 | us |   | ### RC15_MIN (`FLOAT`) {#RC15_MIN} @@ -28774,24 +31151,19 @@ RC channel 15 minimum. Minimum value for this channel. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800.0 | 1500.0 | | 1000 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800.0 | 1500.0 | | 1000 | us |   | -### RC15_REV (`FLOAT`) {#RC15_REV} +### RC15_REV (`INT32`) {#RC15_REV} RC channel 15 reverse. Set to -1 to reverse channel. -**Values:** - -- `-1.0`: Reverse -- `1.0`: Normal - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1.0 | 1.0 | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1 | | 1 | |   | ### RC15_TRIM (`FLOAT`) {#RC15_TRIM} @@ -28799,9 +31171,9 @@ RC channel 15 trim. Mid point value -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800.0 | 2200.0 | | 1500 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800.0 | 2200.0 | | 1500 | us |   | ### RC16_MAX (`FLOAT`) {#RC16_MAX} @@ -28809,9 +31181,9 @@ RC channel 16 maximum. Maximum value for this channel. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1500.0 | 2200.0 | | 2000 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1500.0 | 2200.0 | | 2000 | us |   | ### RC16_MIN (`FLOAT`) {#RC16_MIN} @@ -28819,24 +31191,19 @@ RC channel 16 minimum. Minimum value for this channel. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800.0 | 1500.0 | | 1000 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800.0 | 1500.0 | | 1000 | us |   | -### RC16_REV (`FLOAT`) {#RC16_REV} +### RC16_REV (`INT32`) {#RC16_REV} RC channel 16 reverse. Set to -1 to reverse channel. -**Values:** - -- `-1.0`: Reverse -- `1.0`: Normal - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1.0 | 1.0 | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1 | | 1 | |   | ### RC16_TRIM (`FLOAT`) {#RC16_TRIM} @@ -28844,9 +31211,9 @@ RC channel 16 trim. Mid point value -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800.0 | 2200.0 | | 1500 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800.0 | 2200.0 | | 1500 | us |   | ### RC17_MAX (`FLOAT`) {#RC17_MAX} @@ -28854,9 +31221,9 @@ RC channel 17 maximum. Maximum value for this channel. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1500.0 | 2200.0 | | 2000 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1500.0 | 2200.0 | | 2000 | us |   | ### RC17_MIN (`FLOAT`) {#RC17_MIN} @@ -28864,24 +31231,19 @@ RC channel 17 minimum. Minimum value for this channel. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800.0 | 1500.0 | | 1000 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800.0 | 1500.0 | | 1000 | us |   | -### RC17_REV (`FLOAT`) {#RC17_REV} +### RC17_REV (`INT32`) {#RC17_REV} RC channel 17 reverse. Set to -1 to reverse channel. -**Values:** - -- `-1.0`: Reverse -- `1.0`: Normal - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1.0 | 1.0 | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1 | | 1 | |   | ### RC17_TRIM (`FLOAT`) {#RC17_TRIM} @@ -28889,9 +31251,9 @@ RC channel 17 trim. Mid point value -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800.0 | 2200.0 | | 1500 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800.0 | 2200.0 | | 1500 | us |   | ### RC18_MAX (`FLOAT`) {#RC18_MAX} @@ -28899,9 +31261,9 @@ RC channel 18 maximum. Maximum value for this channel. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1500.0 | 2200.0 | | 2000 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1500.0 | 2200.0 | | 2000 | us |   | ### RC18_MIN (`FLOAT`) {#RC18_MIN} @@ -28909,24 +31271,19 @@ RC channel 18 minimum. Minimum value for this channel. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800.0 | 1500.0 | | 1000 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800.0 | 1500.0 | | 1000 | us |   | -### RC18_REV (`FLOAT`) {#RC18_REV} +### RC18_REV (`INT32`) {#RC18_REV} RC channel 18 reverse. Set to -1 to reverse channel. -**Values:** - -- `-1.0`: Reverse -- `1.0`: Normal - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1.0 | 1.0 | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1 | | 1 | |   | ### RC18_TRIM (`FLOAT`) {#RC18_TRIM} @@ -28934,9 +31291,9 @@ RC channel 18 trim. Mid point value -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800.0 | 2200.0 | | 1500 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800.0 | 2200.0 | | 1500 | us |   | ### RC1_MAX (`FLOAT`) {#RC1_MAX} @@ -28944,9 +31301,9 @@ RC channel 1 maximum. Maximum value for RC channel 1 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1500.0 | 2200.0 | | 2000.0 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1500.0 | 2200.0 | | 2000.0 | us |   | ### RC1_MIN (`FLOAT`) {#RC1_MIN} @@ -28954,24 +31311,19 @@ RC channel 1 minimum. Minimum value for RC channel 1 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800.0 | 1500.0 | | 1000.0 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800.0 | 1500.0 | | 1000.0 | us |   | -### RC1_REV (`FLOAT`) {#RC1_REV} +### RC1_REV (`INT32`) {#RC1_REV} RC channel 1 reverse. Set to -1 to reverse channel. -**Values:** - -- `-1.0`: Reverse -- `1.0`: Normal - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1.0 | 1.0 | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1 | | 1 | |   | ### RC1_TRIM (`FLOAT`) {#RC1_TRIM} @@ -28979,9 +31331,9 @@ RC channel 1 trim. Mid point value -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800.0 | 2200.0 | | 1500.0 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800.0 | 2200.0 | | 1500.0 | us |   | ### RC2_MAX (`FLOAT`) {#RC2_MAX} @@ -28989,9 +31341,9 @@ RC channel 2 maximum. Maximum value for this channel. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1500.0 | 2200.0 | | 2000.0 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1500.0 | 2200.0 | | 2000.0 | us |   | ### RC2_MIN (`FLOAT`) {#RC2_MIN} @@ -28999,24 +31351,19 @@ RC channel 2 minimum. Minimum value for this channel. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800.0 | 1500.0 | | 1000.0 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800.0 | 1500.0 | | 1000.0 | us |   | -### RC2_REV (`FLOAT`) {#RC2_REV} +### RC2_REV (`INT32`) {#RC2_REV} RC channel 2 reverse. Set to -1 to reverse channel. -**Values:** - -- `-1.0`: Reverse -- `1.0`: Normal - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1.0 | 1.0 | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1 | | 1 | |   | ### RC2_TRIM (`FLOAT`) {#RC2_TRIM} @@ -29024,9 +31371,9 @@ RC channel 2 trim. Mid point value -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800.0 | 2200.0 | | 1500.0 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800.0 | 2200.0 | | 1500.0 | us |   | ### RC3_MAX (`FLOAT`) {#RC3_MAX} @@ -29034,9 +31381,9 @@ RC channel 3 maximum. Maximum value for this channel. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1500.0 | 2200.0 | | 2000 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1500.0 | 2200.0 | | 2000 | us |   | ### RC3_MIN (`FLOAT`) {#RC3_MIN} @@ -29044,24 +31391,19 @@ RC channel 3 minimum. Minimum value for this channel. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800.0 | 1500.0 | | 1000 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800.0 | 1500.0 | | 1000 | us |   | -### RC3_REV (`FLOAT`) {#RC3_REV} +### RC3_REV (`INT32`) {#RC3_REV} RC channel 3 reverse. Set to -1 to reverse channel. -**Values:** - -- `-1.0`: Reverse -- `1.0`: Normal - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1.0 | 1.0 | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1 | | 1 | |   | ### RC3_TRIM (`FLOAT`) {#RC3_TRIM} @@ -29069,9 +31411,9 @@ RC channel 3 trim. Mid point value -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800.0 | 2200.0 | | 1500 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800.0 | 2200.0 | | 1500 | us |   | ### RC4_MAX (`FLOAT`) {#RC4_MAX} @@ -29079,9 +31421,9 @@ RC channel 4 maximum. Maximum value for this channel. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1500.0 | 2200.0 | | 2000 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1500.0 | 2200.0 | | 2000 | us |   | ### RC4_MIN (`FLOAT`) {#RC4_MIN} @@ -29089,24 +31431,19 @@ RC channel 4 minimum. Minimum value for this channel. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800.0 | 1500.0 | | 1000 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800.0 | 1500.0 | | 1000 | us |   | -### RC4_REV (`FLOAT`) {#RC4_REV} +### RC4_REV (`INT32`) {#RC4_REV} RC channel 4 reverse. Set to -1 to reverse channel. -**Values:** - -- `-1.0`: Reverse -- `1.0`: Normal - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1.0 | 1.0 | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1 | | 1 | |   | ### RC4_TRIM (`FLOAT`) {#RC4_TRIM} @@ -29114,9 +31451,9 @@ RC channel 4 trim. Mid point value -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800.0 | 2200.0 | | 1500 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800.0 | 2200.0 | | 1500 | us |   | ### RC5_MAX (`FLOAT`) {#RC5_MAX} @@ -29124,9 +31461,9 @@ RC channel 5 maximum. Maximum value for this channel. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1500.0 | 2200.0 | | 2000 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1500.0 | 2200.0 | | 2000 | us |   | ### RC5_MIN (`FLOAT`) {#RC5_MIN} @@ -29134,24 +31471,19 @@ RC channel 5 minimum. Minimum value for this channel. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800.0 | 1500.0 | | 1000 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800.0 | 1500.0 | | 1000 | us |   | -### RC5_REV (`FLOAT`) {#RC5_REV} +### RC5_REV (`INT32`) {#RC5_REV} RC channel 5 reverse. Set to -1 to reverse channel. -**Values:** - -- `-1.0`: Reverse -- `1.0`: Normal - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1.0 | 1.0 | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1 | | 1 | |   | ### RC5_TRIM (`FLOAT`) {#RC5_TRIM} @@ -29159,9 +31491,9 @@ RC channel 5 trim. Mid point value -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800.0 | 2200.0 | | 1500 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800.0 | 2200.0 | | 1500 | us |   | ### RC6_MAX (`FLOAT`) {#RC6_MAX} @@ -29169,9 +31501,9 @@ RC channel 6 maximum. Maximum value for this channel. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1500.0 | 2200.0 | | 2000 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1500.0 | 2200.0 | | 2000 | us |   | ### RC6_MIN (`FLOAT`) {#RC6_MIN} @@ -29179,24 +31511,19 @@ RC channel 6 minimum. Minimum value for this channel. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800.0 | 1500.0 | | 1000 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800.0 | 1500.0 | | 1000 | us |   | -### RC6_REV (`FLOAT`) {#RC6_REV} +### RC6_REV (`INT32`) {#RC6_REV} RC channel 6 reverse. Set to -1 to reverse channel. -**Values:** - -- `-1.0`: Reverse -- `1.0`: Normal - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1.0 | 1.0 | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1 | | 1 | |   | ### RC6_TRIM (`FLOAT`) {#RC6_TRIM} @@ -29204,9 +31531,9 @@ RC channel 6 trim. Mid point value -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800.0 | 2200.0 | | 1500 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800.0 | 2200.0 | | 1500 | us |   | ### RC7_MAX (`FLOAT`) {#RC7_MAX} @@ -29214,9 +31541,9 @@ RC channel 7 maximum. Maximum value for this channel. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1500.0 | 2200.0 | | 2000 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1500.0 | 2200.0 | | 2000 | us |   | ### RC7_MIN (`FLOAT`) {#RC7_MIN} @@ -29224,24 +31551,19 @@ RC channel 7 minimum. Minimum value for this channel. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800.0 | 1500.0 | | 1000 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800.0 | 1500.0 | | 1000 | us |   | -### RC7_REV (`FLOAT`) {#RC7_REV} +### RC7_REV (`INT32`) {#RC7_REV} RC channel 7 reverse. Set to -1 to reverse channel. -**Values:** - -- `-1.0`: Reverse -- `1.0`: Normal - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1.0 | 1.0 | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1 | | 1 | |   | ### RC7_TRIM (`FLOAT`) {#RC7_TRIM} @@ -29249,9 +31571,9 @@ RC channel 7 trim. Mid point value -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800.0 | 2200.0 | | 1500 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800.0 | 2200.0 | | 1500 | us |   | ### RC8_MAX (`FLOAT`) {#RC8_MAX} @@ -29259,9 +31581,9 @@ RC channel 8 maximum. Maximum value for this channel. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1500.0 | 2200.0 | | 2000 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1500.0 | 2200.0 | | 2000 | us |   | ### RC8_MIN (`FLOAT`) {#RC8_MIN} @@ -29269,24 +31591,19 @@ RC channel 8 minimum. Minimum value for this channel. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800.0 | 1500.0 | | 1000 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800.0 | 1500.0 | | 1000 | us |   | -### RC8_REV (`FLOAT`) {#RC8_REV} +### RC8_REV (`INT32`) {#RC8_REV} RC channel 8 reverse. Set to -1 to reverse channel. -**Values:** - -- `-1.0`: Reverse -- `1.0`: Normal - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1.0 | 1.0 | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1 | | 1 | |   | ### RC8_TRIM (`FLOAT`) {#RC8_TRIM} @@ -29294,9 +31611,9 @@ RC channel 8 trim. Mid point value -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800.0 | 2200.0 | | 1500 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800.0 | 2200.0 | | 1500 | us |   | ### RC9_MAX (`FLOAT`) {#RC9_MAX} @@ -29304,9 +31621,9 @@ RC channel 9 maximum. Maximum value for this channel. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1500.0 | 2200.0 | | 2000 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1500.0 | 2200.0 | | 2000 | us |   | ### RC9_MIN (`FLOAT`) {#RC9_MIN} @@ -29314,24 +31631,19 @@ RC channel 9 minimum. Minimum value for this channel. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800.0 | 1500.0 | | 1000 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800.0 | 1500.0 | | 1000 | us |   | -### RC9_REV (`FLOAT`) {#RC9_REV} +### RC9_REV (`INT32`) {#RC9_REV} RC channel 9 reverse. Set to -1 to reverse channel. -**Values:** - -- `-1.0`: Reverse -- `1.0`: Normal - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1.0 | 1.0 | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1 | | 1 | |   | ### RC9_TRIM (`FLOAT`) {#RC9_TRIM} @@ -29339,9 +31651,9 @@ RC channel 9 trim. Mid point value -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 800.0 | 2200.0 | | 1500 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 800.0 | 2200.0 | | 1500 | us |   | ### RC_CHAN_CNT (`INT32`) {#RC_CHAN_CNT} @@ -29351,9 +31663,9 @@ This parameter is used by Ground Station software to save the number of channels which were used during RC calibration. It is only meant for ground station use. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 18 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 18 | | 0 | |   | ### RC_FAILS_THR (`INT32`) {#RC_FAILS_THR} @@ -29361,13 +31673,15 @@ Failsafe channel PWM threshold. Use RC_MAP_FAILSAFE to specify which channel is used to indicate RC loss via this threshold. By default this is the throttle channel. + Set to a PWM value slightly above the PWM value for the channel (e.g. throttle) in a failsafe event, but below the minimum PWM value for the channel during normal operation. + Note: The default value of 0 disables the feature (it is below the expected range). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 2200 | | 0 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 2200 | | 0 | us |   | ### RC_MAP_AUX1 (`INT32`) {#RC_MAP_AUX1} @@ -29395,9 +31709,9 @@ AUX1 Passthrough RC channel. - `17`: Channel 17 - `18`: Channel 18 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 18 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 18 | | 0 | |   | ### RC_MAP_AUX2 (`INT32`) {#RC_MAP_AUX2} @@ -29425,9 +31739,9 @@ AUX2 Passthrough RC channel. - `17`: Channel 17 - `18`: Channel 18 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 18 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 18 | | 0 | |   | ### RC_MAP_AUX3 (`INT32`) {#RC_MAP_AUX3} @@ -29455,9 +31769,9 @@ AUX3 Passthrough RC channel. - `17`: Channel 17 - `18`: Channel 18 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 18 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 18 | | 0 | |   | ### RC_MAP_AUX4 (`INT32`) {#RC_MAP_AUX4} @@ -29485,9 +31799,9 @@ AUX4 Passthrough RC channel. - `17`: Channel 17 - `18`: Channel 18 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 18 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 18 | | 0 | |   | ### RC_MAP_AUX5 (`INT32`) {#RC_MAP_AUX5} @@ -29515,9 +31829,9 @@ AUX5 Passthrough RC channel. - `17`: Channel 17 - `18`: Channel 18 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 18 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 18 | | 0 | |   | ### RC_MAP_AUX6 (`INT32`) {#RC_MAP_AUX6} @@ -29545,9 +31859,9 @@ AUX6 Passthrough RC channel. - `17`: Channel 17 - `18`: Channel 18 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 18 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 18 | | 0 | |   | ### RC_MAP_ENG_MOT (`INT32`) {#RC_MAP_ENG_MOT} @@ -29575,9 +31889,9 @@ RC channel to engage the main motor (for helicopters). - `17`: Channel 17 - `18`: Channel 18 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 18 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 18 | | 0 | |   | ### RC_MAP_FAILSAFE (`INT32`) {#RC_MAP_FAILSAFE} @@ -29586,6 +31900,7 @@ Failsafe channel mapping. Configures which RC channel is used by the receiver to indicate the signal was lost (on receivers that use output a fixed signal value to report lost signal). If set to 0, the channel mapped to throttle is used. + Use RC_FAILS_THR to set the threshold indicating lost signal. By default it's below the expected range and hence disabled. @@ -29611,9 +31926,9 @@ the expected range and hence disabled. - `17`: Channel 17 - `18`: Channel 18 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 18 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 18 | | 0 | |   | ### RC_MAP_PARAM1 (`INT32`) {#RC_MAP_PARAM1} @@ -29644,9 +31959,9 @@ Set to 0 to deactivate \* - `17`: Channel 17 - `18`: Channel 18 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 18 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 18 | | 0 | |   | ### RC_MAP_PARAM2 (`INT32`) {#RC_MAP_PARAM2} @@ -29677,9 +31992,9 @@ Set to 0 to deactivate \* - `17`: Channel 17 - `18`: Channel 18 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 18 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 18 | | 0 | |   | ### RC_MAP_PARAM3 (`INT32`) {#RC_MAP_PARAM3} @@ -29710,9 +32025,9 @@ Set to 0 to deactivate \* - `17`: Channel 17 - `18`: Channel 18 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 18 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 18 | | 0 | |   | ### RC_MAP_PITCH (`INT32`) {#RC_MAP_PITCH} @@ -29744,9 +32059,9 @@ A value of zero indicates the switch is not assigned. - `17`: Channel 17 - `18`: Channel 18 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 18 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 18 | | 0 | |   | ### RC_MAP_ROLL (`INT32`) {#RC_MAP_ROLL} @@ -29778,9 +32093,9 @@ A value of zero indicates the switch is not assigned. - `17`: Channel 17 - `18`: Channel 18 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 18 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 18 | | 0 | |   | ### RC_MAP_THROTTLE (`INT32`) {#RC_MAP_THROTTLE} @@ -29812,9 +32127,9 @@ A value of zero indicates the switch is not assigned. - `17`: Channel 17 - `18`: Channel 18 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 18 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 18 | | 0 | |   | ### RC_MAP_YAW (`INT32`) {#RC_MAP_YAW} @@ -29846,9 +32161,9 @@ A value of zero indicates the switch is not assigned. - `17`: Channel 17 - `18`: Channel 18 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 18 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 18 | | 0 | |   | ### RC_RSSI_PWM_CHAN (`INT32`) {#RC_RSSI_PWM_CHAN} @@ -29856,6 +32171,7 @@ PWM input channel that provides RSSI. 0: do not read RSSI from input channel 1-18: read RSSI from specified input channel + Specify the range for RSSI input with RC_RSSI_PWM_MIN and RC_RSSI_PWM_MAX parameters. **Values:** @@ -29880,9 +32196,9 @@ Specify the range for RSSI input with RC_RSSI_PWM_MIN and RC_RSSI_PWM_MAX parame - `17`: Channel 17 - `18`: Channel 18 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 18 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 18 | | 0 | |   | ### RC_RSSI_PWM_MAX (`INT32`) {#RC_RSSI_PWM_MAX} @@ -29890,9 +32206,9 @@ Max input value for RSSI reading. Only used if RC_RSSI_PWM_CHAN > 0 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 2000 | | 2000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 2000 | | 2000 | |   | ### RC_RSSI_PWM_MIN (`INT32`) {#RC_RSSI_PWM_MIN} @@ -29900,9 +32216,9 @@ Min input value for RSSI reading. Only used if RC_RSSI_PWM_CHAN > 0 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 2000 | | 1000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 2000 | | 1000 | |   | ### TRIM_PITCH (`FLOAT`) {#TRIM_PITCH} @@ -29911,9 +32227,9 @@ Pitch trim. The trim value is the actuator control value the system needs for straight and level flight. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -0.5 | 0.5 | 0.01 | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -0.5 | 0.5 | 0.01 | 0.0 | |   | ### TRIM_ROLL (`FLOAT`) {#TRIM_ROLL} @@ -29922,9 +32238,9 @@ Roll trim. The trim value is the actuator control value the system needs for straight and level flight. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -0.5 | 0.5 | 0.01 | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -0.5 | 0.5 | 0.01 | 0.0 | |   | ### TRIM_YAW (`FLOAT`) {#TRIM_YAW} @@ -29933,9 +32249,9 @@ Yaw trim. The trim value is the actuator control value the system needs for straight and level flight. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -0.5 | 0.5 | 0.01 | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -0.5 | 0.5 | 0.01 | 0.0 | |   | ## Radio Switches @@ -29950,9 +32266,9 @@ sign indicates polarity of comparison positive : true when channel>th negative : true when channelth negative : true when channelth negative : true when channelth negative : true when channelth negative : true when channelth negative : true when channelth negative : true when channelth negative : true when channelth negative : true when channelth negative : true when channel The rover starts to cut the corner earlier. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1 | 100 | 0.01 | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1 | 100 | 0.01 | 1 | |   | ### RA_ACC_RAD_MAX (`FLOAT`) {#RA_ACC_RAD_MAX} @@ -30735,17 +33055,17 @@ the previous, current and next waypoint. Higher value -> smoother trajectory at the cost of how close the rover gets to the waypoint (Set to -1 to disable corner cutting). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 100 | 0.01 | -1 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 100 | 0.01 | -1 | m |   | ### RA_MAX_STR_ANG (`FLOAT`) {#RA_MAX_STR_ANG} Maximum steering angle. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1.5708 | 0.01 | 0 | rad | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1.5708 | 0.01 | 0 | rad |   | ### RA_STR_RATE_LIM (`FLOAT`) {#RA_STR_RATE_LIM} @@ -30753,9 +33073,9 @@ Steering rate limit. Set to -1 to disable. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | -1 | 1000 | 0.01 | -1 | deg/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | -1 | 1000 | 0.01 | -1 | deg/s |   | ### RA_WHEEL_BASE (`FLOAT`) {#RA_WHEEL_BASE} @@ -30763,9 +33083,9 @@ Wheel base. Distance from the front to the rear axle. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 100 | 0.001 | 0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 100 | 0.001 | 0 | m |   | ## Rover Attitude Control @@ -30773,9 +33093,9 @@ Distance from the front to the rear axle. Proportional gain for closed loop yaw controller. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 100 | 0.01 | 0. | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 100 | 0.01 | 0.0 | |   | ## Rover Differential @@ -30788,9 +33108,9 @@ error between the desired and actual yaw. It is also used as the threshold wheth to a smooth stop at the next waypoint. This slow down effect is active if the angle between the line segments from prevWP-currWP and currWP-nextWP is smaller then 180 - RD_TRANS_DRV_TRN. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | -------- | ---- | -|   | 0.001 | 3.14159 | 0.01 | 0.174533 | rad | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | -------- | ---- | --------- | +|   | 0.001 | 3.14159 | 0.01 | 0.174533 | rad |   | ### RD_TRANS_TRN_DRV (`FLOAT`) {#RD_TRANS_TRN_DRV} @@ -30799,9 +33119,9 @@ Yaw error threshhold to switch from spot turning to driving. This threshold is used for the state machine to switch from turning to driving based on the error between the desired and actual yaw. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | --------- | ---- | -|   | 0.001 | 3.14159 | 0.01 | 0.0872665 | rad | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | --------- | ---- | --------- | +|   | 0.001 | 3.14159 | 0.01 | 0.0872665 | rad |   | ### RD_WHEEL_TRACK (`FLOAT`) {#RD_WHEEL_TRACK} @@ -30809,9 +33129,9 @@ Wheel track. Distance from the center of the right wheel to the center of the left wheel. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 100 | 0.001 | 0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 100 | 0.001 | 0 | m |   | ### RD_YAW_STK_GAIN (`FLOAT`) {#RD_YAW_STK_GAIN} @@ -30819,9 +33139,9 @@ Yaw stick gain for Manual mode. Assign value <1.0 to decrease stick response for yaw control. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 1 | 0.01 | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 1 | 0.01 | 1 | |   | ## Rover Mecanum @@ -30834,9 +33154,9 @@ by the stick inputs. This can be understood as a deadzone for the combined stick inputs for forward/backwards and lateral speed which defines a course direction. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 3.14 | 0.01 | 0.17 | rad | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 3.14 | 0.01 | 0.17 | rad |   | ### RM_WHEEL_TRACK (`FLOAT`) {#RM_WHEEL_TRACK} @@ -30844,9 +33164,9 @@ Wheel track. Distance from the center of the right wheel to the center of the left wheel. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 100 | 0.001 | 0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 100 | 0.001 | 0 | m |   | ### RM_YAW_STK_GAIN (`FLOAT`) {#RM_YAW_STK_GAIN} @@ -30854,9 +33174,9 @@ Yaw stick gain for Manual mode. Assign value <1.0 to decrease stick response for yaw control. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 1 | 0.01 | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 1 | 0.01 | 1 | |   | ## Rover Rate Control @@ -30867,9 +33187,9 @@ Yaw acceleration limit. Used to cap how quickly the magnitude of yaw rate setpoints can increase. Set to -1 to disable. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ------- | -|   | -1 | 10000 | 0.01 | -1. | deg/s^2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ------- | --------- | +|   | -1 | 10000 | 0.01 | -1.0 | deg/s^2 |   | ### RO_YAW_DECEL_LIM (`FLOAT`) {#RO_YAW_DECEL_LIM} @@ -30878,21 +33198,22 @@ Yaw deceleration limit. Used to cap how quickly the magnitude of yaw rate setpoints can decrease. Set to -1 to disable. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ------- | -|   | -1 | 10000 | 0.01 | -1. | deg/s^2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ------- | --------- | +|   | -1 | 10000 | 0.01 | -1.0 | deg/s^2 |   | ### RO_YAW_EXPO (`FLOAT`) {#RO_YAW_EXPO} Yaw rate expo factor. Exponential factor for tuning the input curve shape. + 0 Purely linear input curve 1 Purely cubic input curve -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1 | | 0. | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1 | | 0.0 | |   | ### RO_YAW_RATE_CORR (`FLOAT`) {#RO_YAW_RATE_CORR} @@ -30903,17 +33224,17 @@ Increase this value (x > 1) if the measured yaw rate is lower than the setpoint, Note: Tuning this is particularly useful for skid-steered rovers, or rovers with misaligned wheels/steering axes that cause a lot of friction when turning. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.01 | 10000 | 0.01 | 1. | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.01 | 10000 | 0.01 | 1.0 | |   | ### RO_YAW_RATE_I (`FLOAT`) {#RO_YAW_RATE_I} Integral gain for closed loop yaw rate controller. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 100 | 0.01 | 0. | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 100 | 0.01 | 0.0 | |   | ### RO_YAW_RATE_LIM (`FLOAT`) {#RO_YAW_RATE_LIM} @@ -30922,17 +33243,17 @@ Yaw rate limit. Used to cap yaw rate setpoints and map controller inputs to yaw rate setpoints in Acro, Stabilized and Position mode. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 0 | 10000 | 0.01 | 0. | deg/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | 0 | 10000 | 0.01 | 0.0 | deg/s |   | ### RO_YAW_RATE_P (`FLOAT`) {#RO_YAW_RATE_P} Proportional gain for closed loop yaw rate controller. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 100 | 0.01 | 0. | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 100 | 0.01 | 0.0 | |   | ### RO_YAW_RATE_TH (`FLOAT`) {#RO_YAW_RATE_TH} @@ -30940,9 +33261,9 @@ Yaw rate measurement threshold. The minimum threshold for the yaw rate measurement not to be interpreted as zero. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 0 | 100 | 0.01 | 3. | deg/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | 0 | 100 | 0.01 | 3.0 | deg/s |   | ### RO_YAW_STICK_DZ (`FLOAT`) {#RO_YAW_STICK_DZ} @@ -30950,22 +33271,23 @@ Yaw stick deadzone. Percentage of stick input range that will be interpreted as zero around the stick centered value. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1 | 0.01 | 0.1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1 | 0.01 | 0.1 | |   | ### RO_YAW_SUPEXPO (`FLOAT`) {#RO_YAW_SUPEXPO} Yaw rate super expo factor. "Superexponential" factor for refining the input curve shape tuned using RO_YAW_EXPO. + 0 Pure Expo function 0.7 reasonable shape enhancement for intuitive stick feel 0.95 very strong bent input curve only near maxima have effect -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 0.95 | | 0. | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 0.95 | | 0.0 | |   | ## Rover Velocity Control @@ -30976,9 +33298,9 @@ Acceleration limit. Set to -1 to disable. For mecanum rovers this limit is used for longitudinal and lateral acceleration. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | -1 | 100 | 0.01 | -1. | m/s^2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | -1 | 100 | 0.01 | -1.0 | m/s^2 |   | ### RO_DECEL_LIM (`FLOAT`) {#RO_DECEL_LIM} @@ -30988,9 +33310,9 @@ Set to -1 to disable. Note that if it is disabled the rover will not slow down when approaching waypoints in auto modes. For mecanum rovers this limit is used for longitudinal and lateral deceleration. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | -1 | 100 | 0.01 | -1. | m/s^2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | -1 | 100 | 0.01 | -1.0 | m/s^2 |   | ### RO_JERK_LIM (`FLOAT`) {#RO_JERK_LIM} @@ -31000,9 +33322,9 @@ Set to -1 to disable. Note that if it is disabled the rover will not slow down when approaching waypoints in auto modes. For mecanum rovers this limit is used for longitudinal and lateral jerk. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | -1 | 100 | 0.01 | -1. | m/s^3 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | -1 | 100 | 0.01 | -1.0 | m/s^3 |   | ### RO_MAX_THR_SPEED (`FLOAT`) {#RO_MAX_THR_SPEED} @@ -31010,17 +33332,17 @@ Speed the rover drives at maximum throttle. Used to linearly map speeds [m/s] to throttle values [-1. 1]. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 100 | 0.01 | 0. | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 100 | 0.01 | 0.0 | m/s |   | ### RO_SPEED_I (`FLOAT`) {#RO_SPEED_I} Integral gain for ground speed controller. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 100 | 0.001 | 0. | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 100 | 0.001 | 0.0 | |   | ### RO_SPEED_LIM (`FLOAT`) {#RO_SPEED_LIM} @@ -31028,32 +33350,35 @@ Speed limit. Used to cap speed setpoints and map controller inputs to speed setpoints in Position mode. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 100 | 0.01 | -1. | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 100 | 0.01 | -1.0 | m/s |   | ### RO_SPEED_P (`FLOAT`) {#RO_SPEED_P} Proportional gain for ground speed controller. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 100 | 0.01 | 0. | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 100 | 0.01 | 0.0 | |   | ### RO_SPEED_RED (`FLOAT`) {#RO_SPEED_RED} Tuning parameter for the speed reduction based on the course error. -Reduced_speed = RO_MAX_THR_SPEED _ (1 - normalized_course_error _ RO_SPEED_RED) +``` +Reduced_speed = RO_MAX_THR_SPEED * (1 - normalized_course_error * RO_SPEED_RED) +``` + The normalized course error is the angle between the current course and the bearing setpoint interpolated from [0, 180] -> [0, 1]. Higher value -> More speed reduction. Note: This is also used to calculate the speed at which the vehicle arrives at a waypoint in auto modes. Set to -1 to disable bearing error based speed reduction. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 100 | 0.01 | -1. | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 100 | 0.01 | -1.0 | |   | ### RO_SPEED_TH (`FLOAT`) {#RO_SPEED_TH} @@ -31062,9 +33387,9 @@ Speed measurement threshold. Set to -1 to disable. The minimum threshold for the speed measurement not to be interpreted as zero. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 100 | 0.01 | 0.1 | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 100 | 0.01 | 0.1 | m/s |   | ## Runway Takeoff @@ -31072,52 +33397,57 @@ The minimum threshold for the speed measurement not to be interpreted as zero. Throttle during runway takeoff. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 1.0 | 0.01 | 1.0 | norm | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 1.0 | 0.01 | 1.0 | norm |   | ### RWTO_NUDGE (`INT32`) {#RWTO_NUDGE} -Enable use of yaw stick for nudging the wheel during runway ground roll. +Enable yaw stick nudging during runway ground roll. + +Enable use of yaw stick for nudging the wheel during runway ground roll This is useful when map, GNSS, or yaw errors on ground are misaligned with what the operator intends for takeoff course. Particularly useful for skinny runways or if the wheel servo is a bit off trim. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ----------- | ---- | -|   | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ----------- | ---- | --------- | +|   | | | | Enabled (1) | |   | ### RWTO_PSP (`FLOAT`) {#RWTO_PSP} -Pitch setpoint during taxi / before takeoff rotation airspeed is reached. +Pitch setpoint during taxi / before rotation. + +Pitch setpoint during taxi / before takeoff rotation airspeed is reached A taildragger with steerable wheel might need to pitch up a little to keep its wheel on the ground before airspeed to takeoff is reached. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -10.0 | 20.0 | 0.5 | 0.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -10.0 | 20.0 | 0.5 | 0.0 | deg |   | ### RWTO_RAMP_TIME (`FLOAT`) {#RWTO_RAMP_TIME} Throttle ramp up time for runway takeoff. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1.0 | 15.0 | 0.1 | 2.0 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1.0 | 15.0 | 0.1 | 2.0 | s |   | ### RWTO_ROT_AIRSPD (`FLOAT`) {#RWTO_ROT_AIRSPD} Takeoff rotation airspeed. The calibrated airspeed threshold during the takeoff ground roll when the plane should start rotating (pitching up). -Must be less than the takeoff airspeed, will otherwise be capped at the takeoff airpeed (see FW_TKO_AIRSPD). +Must be less than the takeoff airspeed, will otherwise be capped at the takeoff airspeed (see FW_TKO_AIRSPD). + If set <= 0.0, defaults to 0.9 \* takeoff airspeed (see FW_TKO_AIRSPD) -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1.0 | | 0.1 | -1.0 | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1.0 | | 0.1 | -1.0 | m/s |   | ### RWTO_ROT_TIME (`FLOAT`) {#RWTO_ROT_TIME} @@ -31125,17 +33455,17 @@ Takeoff rotation time. This is the time desired to linearly ramp in takeoff pitch constraints during the takeoff rotation -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | | 0.1 | 1.0 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | | 0.1 | 1.0 | s |   | ### RWTO_TKOFF (`INT32`) {#RWTO_TKOFF} Runway takeoff with landing gear. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------------ | ---- | -|   | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------------ | ---- | --------- | +|   | | | | Disabled (0) | |   | ## SD Logging @@ -31150,9 +33480,9 @@ Selects the algorithm used for logfile encryption - `0`: Disabled - `2`: XChaCha20 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 2 | |   | ### SDLOG_BACKEND (`INT32`) {#SDLOG_BACKEND} @@ -31165,9 +33495,9 @@ If no logging is set the logger will not be started. Set bits true to enable: 0: - `0`: SD card logging - `1`: Mavlink logging -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 3 | | 3 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 3 | | 3 | |   | ### SDLOG_BOOT_BAT (`INT32`) {#SDLOG_BOOT_BAT} @@ -31175,19 +33505,19 @@ Battery-only Logging. When enabled, logging will not start from boot if battery power is not detected (e.g. powered via USB on a test bench). This prevents extraneous flight logs from being created during bench testing. Note that this only applies to log-from-boot modes. This has no effect on arm-based modes. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------------ | ---- | -|   | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------------ | ---- | --------- | +|   | | | | Disabled (0) | |   | ### SDLOG_DIRS_MAX (`INT32`) {#SDLOG_DIRS_MAX} Maximum number of log directories to keep. -If there are more log directories than this value, the system will delete the oldest directories during startup. In addition, the system will delete old logs if there is not enough free space left. The minimum amount is 300 MB. If this is set to 0, old directories will only be removed if the free space falls below the minimum. Note: this does not apply to mission log files. +If greater than 0, the oldest log directories are deleted at log start to keep the total directory count at or below this value. This cleanup is orthogonal to the free-space cleanup driven by SDLOG_ROTATE and SDLOG_MAX_SIZE, and is useful for capping log usage by count independent of available disk size (e.g. in SITL). A value of 0 disables this count-based cleanup. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 1000 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 1000 | | 0 | |   | ### SDLOG_EXCH_KEY (`INT32`) {#SDLOG_EXCH_KEY} @@ -31195,9 +33525,9 @@ Logfile Encryption key exchange key. If the logfile is encrypted using a symmetric key algorithm, the used encryption key is generated at logging start and stored on the sdcard RSA2048 encrypted using this key. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 255 | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 255 | | 1 | |   | ### SDLOG_KEY (`INT32`) {#SDLOG_KEY} @@ -31205,9 +33535,19 @@ Logfile Encryption key index. Selects the key in keystore, used for encrypting the log. When using a symmetric encryption algorithm, the key is generated at logging start and kept stored in this index. For symmetric algorithms, the key is volatile and valid only for the duration of logging. The key is stored in encrypted format on the sdcard alongside the logfile, using an RSA2048 key defined by the SDLOG_EXCHANGE_KEY -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 255 | | 2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 255 | | 2 | |   | + +### SDLOG_MAX_SIZE (`INT32`) {#SDLOG_MAX_SIZE} + +Maximum log file size. + +Maximum size of a single log file in mebibytes (1 MiB = 1024 \* 1024 bytes). When reached, the log file is closed and a new one is started. This value is also added to the cleanup threshold (see SDLOG_ROTATE) to reserve headroom for the next log file. A value of 0 disables both file rotation and the cleanup reservation. Must stay below the FAT32 file size limit of 4 GiB. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 4095 | | 1024 | MiB |   | ### SDLOG_MISSION (`INT32`) {#SDLOG_MISSION} @@ -31221,9 +33561,9 @@ If enabled, a small additional "mission" log file will be written to the SD card - `1`: All mission messages - `2`: Geotagging messages -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### SDLOG_MODE (`INT32`) {#SDLOG_MODE} @@ -31239,9 +33579,9 @@ Determines when to start and stop logging. By default, logging is started when a - `3`: while manual input AUX1 >30% - `4`: from 1st armed until shutdown -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### SDLOG_PROFILE (`INT32`) {#SDLOG_PROFILE} @@ -31264,9 +33604,19 @@ This integer bitmask controls the set and rates of logged topics. The default al - `10`: Mavlink tunnel message logging - `11`: High rate sensors -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 4095 | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 4095 | | 1 | |   | + +### SDLOG_ROTATE (`INT32`) {#SDLOG_ROTATE} + +Maximum disk usage percentage. + +Maximum percentage of disk space that logs may occupy during operation, including while writing a new log file. For example, a value of 90 means at least 10% of disk is always kept free, even while writing. A value of 100 lets logs fill the disk completely. A value of 0 disables space-based cleanup entirely. At log start, oldest logs are deleted as needed to maintain this guarantee, accounting for the next file write of up to SDLOG_MAX_SIZE. Cleanup always happens at log start (not boot) so logs can be downloaded via FTP before deletion. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 100 | | 90 | |   | ### SDLOG_UTC_OFFSET (`INT32`) {#SDLOG_UTC_OFFSET} @@ -31274,9 +33624,9 @@ UTC offset (unit: min). the difference in hours and minutes from Coordinated Universal Time (UTC) for a your place and date. for example, In case of South Korea(UTC+09:00), UTC offset is 540 min (9\*60) refer to https://en.wikipedia.org/wiki/List_of_UTC_time_offsets -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1000 | 1000 | | 0 | min | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1000 | 1000 | | 0 | min |   | ### SDLOG_UUID (`INT32`) {#SDLOG_UUID} @@ -31284,31 +33634,21 @@ Log UUID. If set to 1, add an ID to the log, which uniquely identifies the vehicle -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ----------- | ---- | -|   | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ----------- | ---- | --------- | +|   | | | | Enabled (1) | |   | ## SITL ### SIM_BAT_DRAIN (`FLOAT`) {#SIM_BAT_DRAIN} -Simulator Battery drain interval. +Simulated battery full-discharge time. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1 | 86400 | 1 | 60 | s | +Time in seconds for the simulated battery to drain from 100% to 0% while armed. Set to 0 to disable the battery simulator entirely (useful when battery state is provided externally, e.g. via MAVLink). -### SIM_BAT_ENABLE (`INT32`) {#SIM_BAT_ENABLE} - -Simulator Battery enabled. - -Enable or disable the internal battery simulation. This is useful -when the battery is simulated externally and interfaced with PX4 -through MAVLink for example. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ----------- | ---- | -|   | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | | 1 | 60 | s |   | ### SIM_BAT_MIN_PCT (`FLOAT`) {#SIM_BAT_MIN_PCT} @@ -31317,9 +33657,9 @@ Simulator Battery minimal percentage. Can be used to alter the battery level during SITL- or HITL-simulation on the fly. Particularly useful for testing different low-battery behaviour. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 100 | 0.1 | 50.0 | % | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 100 | 0.1 | 50.0 | % |   | ## Sensor Calibration @@ -31329,9 +33669,9 @@ Accelerometer 0 calibration device ID. Device ID of the accelerometer this calibration applies to. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### CAL_ACC0_PRIO (`INT32`) {#CAL_ACC0_PRIO} @@ -31347,9 +33687,9 @@ Accelerometer 0 priority. - `75`: High - `100`: Max -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | -1 | |   | ### CAL_ACC0_ROT (`INT32`) {#CAL_ACC0_ROT} @@ -31402,57 +33742,57 @@ An internal sensor will force a value of -1, so a GCS should only attempt to con - `39`: Pitch 315° - `40`: Roll 90°, Pitch 315° -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 40 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 40 | | -1 | |   | ### CAL_ACC0_XOFF (`FLOAT`) {#CAL_ACC0_XOFF} Accelerometer 0 X-axis offset. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | | | | 0.0 | m/s^2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | | | | 0.0 | m/s^2 |   | ### CAL_ACC0_XSCALE (`FLOAT`) {#CAL_ACC0_XSCALE} Accelerometer 0 X-axis scaling factor. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 3.0 | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 3.0 | | 1.0 | |   | ### CAL_ACC0_YOFF (`FLOAT`) {#CAL_ACC0_YOFF} Accelerometer 0 Y-axis offset. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | | | | 0.0 | m/s^2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | | | | 0.0 | m/s^2 |   | ### CAL_ACC0_YSCALE (`FLOAT`) {#CAL_ACC0_YSCALE} Accelerometer 0 Y-axis scaling factor. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 3.0 | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 3.0 | | 1.0 | |   | ### CAL_ACC0_ZOFF (`FLOAT`) {#CAL_ACC0_ZOFF} Accelerometer 0 Z-axis offset. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | | | | 0.0 | m/s^2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | | | | 0.0 | m/s^2 |   | ### CAL_ACC0_ZSCALE (`FLOAT`) {#CAL_ACC0_ZSCALE} Accelerometer 0 Z-axis scaling factor. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 3.0 | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 3.0 | | 1.0 | |   | ### CAL_ACC1_ID (`INT32`) {#CAL_ACC1_ID} @@ -31460,9 +33800,9 @@ Accelerometer 1 calibration device ID. Device ID of the accelerometer this calibration applies to. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### CAL_ACC1_PRIO (`INT32`) {#CAL_ACC1_PRIO} @@ -31478,9 +33818,9 @@ Accelerometer 1 priority. - `75`: High - `100`: Max -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | -1 | |   | ### CAL_ACC1_ROT (`INT32`) {#CAL_ACC1_ROT} @@ -31533,57 +33873,57 @@ An internal sensor will force a value of -1, so a GCS should only attempt to con - `39`: Pitch 315° - `40`: Roll 90°, Pitch 315° -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 40 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 40 | | -1 | |   | ### CAL_ACC1_XOFF (`FLOAT`) {#CAL_ACC1_XOFF} Accelerometer 1 X-axis offset. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | | | | 0.0 | m/s^2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | | | | 0.0 | m/s^2 |   | ### CAL_ACC1_XSCALE (`FLOAT`) {#CAL_ACC1_XSCALE} Accelerometer 1 X-axis scaling factor. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 3.0 | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 3.0 | | 1.0 | |   | ### CAL_ACC1_YOFF (`FLOAT`) {#CAL_ACC1_YOFF} Accelerometer 1 Y-axis offset. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | | | | 0.0 | m/s^2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | | | | 0.0 | m/s^2 |   | ### CAL_ACC1_YSCALE (`FLOAT`) {#CAL_ACC1_YSCALE} Accelerometer 1 Y-axis scaling factor. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 3.0 | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 3.0 | | 1.0 | |   | ### CAL_ACC1_ZOFF (`FLOAT`) {#CAL_ACC1_ZOFF} Accelerometer 1 Z-axis offset. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | | | | 0.0 | m/s^2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | | | | 0.0 | m/s^2 |   | ### CAL_ACC1_ZSCALE (`FLOAT`) {#CAL_ACC1_ZSCALE} Accelerometer 1 Z-axis scaling factor. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 3.0 | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 3.0 | | 1.0 | |   | ### CAL_ACC2_ID (`INT32`) {#CAL_ACC2_ID} @@ -31591,9 +33931,9 @@ Accelerometer 2 calibration device ID. Device ID of the accelerometer this calibration applies to. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### CAL_ACC2_PRIO (`INT32`) {#CAL_ACC2_PRIO} @@ -31609,9 +33949,9 @@ Accelerometer 2 priority. - `75`: High - `100`: Max -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | -1 | |   | ### CAL_ACC2_ROT (`INT32`) {#CAL_ACC2_ROT} @@ -31664,57 +34004,57 @@ An internal sensor will force a value of -1, so a GCS should only attempt to con - `39`: Pitch 315° - `40`: Roll 90°, Pitch 315° -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 40 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 40 | | -1 | |   | ### CAL_ACC2_XOFF (`FLOAT`) {#CAL_ACC2_XOFF} Accelerometer 2 X-axis offset. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | | | | 0.0 | m/s^2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | | | | 0.0 | m/s^2 |   | ### CAL_ACC2_XSCALE (`FLOAT`) {#CAL_ACC2_XSCALE} Accelerometer 2 X-axis scaling factor. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 3.0 | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 3.0 | | 1.0 | |   | ### CAL_ACC2_YOFF (`FLOAT`) {#CAL_ACC2_YOFF} Accelerometer 2 Y-axis offset. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | | | | 0.0 | m/s^2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | | | | 0.0 | m/s^2 |   | ### CAL_ACC2_YSCALE (`FLOAT`) {#CAL_ACC2_YSCALE} Accelerometer 2 Y-axis scaling factor. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 3.0 | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 3.0 | | 1.0 | |   | ### CAL_ACC2_ZOFF (`FLOAT`) {#CAL_ACC2_ZOFF} Accelerometer 2 Z-axis offset. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | | | | 0.0 | m/s^2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | | | | 0.0 | m/s^2 |   | ### CAL_ACC2_ZSCALE (`FLOAT`) {#CAL_ACC2_ZSCALE} Accelerometer 2 Z-axis scaling factor. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 3.0 | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 3.0 | | 1.0 | |   | ### CAL_ACC3_ID (`INT32`) {#CAL_ACC3_ID} @@ -31722,9 +34062,9 @@ Accelerometer 3 calibration device ID. Device ID of the accelerometer this calibration applies to. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### CAL_ACC3_PRIO (`INT32`) {#CAL_ACC3_PRIO} @@ -31740,9 +34080,9 @@ Accelerometer 3 priority. - `75`: High - `100`: Max -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | -1 | |   | ### CAL_ACC3_ROT (`INT32`) {#CAL_ACC3_ROT} @@ -31795,57 +34135,57 @@ An internal sensor will force a value of -1, so a GCS should only attempt to con - `39`: Pitch 315° - `40`: Roll 90°, Pitch 315° -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 40 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 40 | | -1 | |   | ### CAL_ACC3_XOFF (`FLOAT`) {#CAL_ACC3_XOFF} Accelerometer 3 X-axis offset. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | | | | 0.0 | m/s^2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | | | | 0.0 | m/s^2 |   | ### CAL_ACC3_XSCALE (`FLOAT`) {#CAL_ACC3_XSCALE} Accelerometer 3 X-axis scaling factor. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 3.0 | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 3.0 | | 1.0 | |   | ### CAL_ACC3_YOFF (`FLOAT`) {#CAL_ACC3_YOFF} Accelerometer 3 Y-axis offset. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | | | | 0.0 | m/s^2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | | | | 0.0 | m/s^2 |   | ### CAL_ACC3_YSCALE (`FLOAT`) {#CAL_ACC3_YSCALE} Accelerometer 3 Y-axis scaling factor. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 3.0 | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 3.0 | | 1.0 | |   | ### CAL_ACC3_ZOFF (`FLOAT`) {#CAL_ACC3_ZOFF} Accelerometer 3 Z-axis offset. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | | | | 0.0 | m/s^2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | | | | 0.0 | m/s^2 |   | ### CAL_ACC3_ZSCALE (`FLOAT`) {#CAL_ACC3_ZSCALE} Accelerometer 3 Z-axis scaling factor. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 3.0 | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 3.0 | | 1.0 | |   | ### CAL_BARO0_ID (`INT32`) {#CAL_BARO0_ID} @@ -31853,17 +34193,17 @@ Barometer 0 calibration device ID. Device ID of the barometer this calibration applies to. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### CAL_BARO0_OFF (`FLOAT`) {#CAL_BARO0_OFF} Barometer 0 offset. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### CAL_BARO0_PRIO (`INT32`) {#CAL_BARO0_PRIO} @@ -31879,9 +34219,9 @@ Barometer 0 priority. - `75`: High - `100`: Max -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | -1 | |   | ### CAL_BARO1_ID (`INT32`) {#CAL_BARO1_ID} @@ -31889,17 +34229,17 @@ Barometer 1 calibration device ID. Device ID of the barometer this calibration applies to. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### CAL_BARO1_OFF (`FLOAT`) {#CAL_BARO1_OFF} Barometer 1 offset. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### CAL_BARO1_PRIO (`INT32`) {#CAL_BARO1_PRIO} @@ -31915,9 +34255,9 @@ Barometer 1 priority. - `75`: High - `100`: Max -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | -1 | |   | ### CAL_BARO2_ID (`INT32`) {#CAL_BARO2_ID} @@ -31925,17 +34265,17 @@ Barometer 2 calibration device ID. Device ID of the barometer this calibration applies to. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### CAL_BARO2_OFF (`FLOAT`) {#CAL_BARO2_OFF} Barometer 2 offset. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### CAL_BARO2_PRIO (`INT32`) {#CAL_BARO2_PRIO} @@ -31951,9 +34291,9 @@ Barometer 2 priority. - `75`: High - `100`: Max -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | -1 | |   | ### CAL_BARO3_ID (`INT32`) {#CAL_BARO3_ID} @@ -31961,17 +34301,17 @@ Barometer 3 calibration device ID. Device ID of the barometer this calibration applies to. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### CAL_BARO3_OFF (`FLOAT`) {#CAL_BARO3_OFF} Barometer 3 offset. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### CAL_BARO3_PRIO (`INT32`) {#CAL_BARO3_PRIO} @@ -31987,9 +34327,9 @@ Barometer 3 priority. - `75`: High - `100`: Max -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | -1 | |   | ### CAL_GYRO0_ID (`INT32`) {#CAL_GYRO0_ID} @@ -31997,9 +34337,9 @@ Gyroscope 0 calibration device ID. Device ID of the gyroscope this calibration applies to. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### CAL_GYRO0_PRIO (`INT32`) {#CAL_GYRO0_PRIO} @@ -32015,9 +34355,9 @@ Gyroscope 0 priority. - `75`: High - `100`: Max -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | -1 | |   | ### CAL_GYRO0_ROT (`INT32`) {#CAL_GYRO0_ROT} @@ -32070,33 +34410,33 @@ An internal sensor will force a value of -1, so a GCS should only attempt to con - `39`: Pitch 315° - `40`: Roll 90°, Pitch 315° -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 40 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 40 | | -1 | |   | ### CAL_GYRO0_XOFF (`FLOAT`) {#CAL_GYRO0_XOFF} Gyroscope 0 X-axis offset. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | | | | 0.0 | rad/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | | | | 0.0 | rad/s |   | ### CAL_GYRO0_YOFF (`FLOAT`) {#CAL_GYRO0_YOFF} Gyroscope 0 Y-axis offset. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | | | | 0.0 | rad/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | | | | 0.0 | rad/s |   | ### CAL_GYRO0_ZOFF (`FLOAT`) {#CAL_GYRO0_ZOFF} Gyroscope 0 Z-axis offset. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | | | | 0.0 | rad/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | | | | 0.0 | rad/s |   | ### CAL_GYRO1_ID (`INT32`) {#CAL_GYRO1_ID} @@ -32104,9 +34444,9 @@ Gyroscope 1 calibration device ID. Device ID of the gyroscope this calibration applies to. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### CAL_GYRO1_PRIO (`INT32`) {#CAL_GYRO1_PRIO} @@ -32122,9 +34462,9 @@ Gyroscope 1 priority. - `75`: High - `100`: Max -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | -1 | |   | ### CAL_GYRO1_ROT (`INT32`) {#CAL_GYRO1_ROT} @@ -32177,33 +34517,33 @@ An internal sensor will force a value of -1, so a GCS should only attempt to con - `39`: Pitch 315° - `40`: Roll 90°, Pitch 315° -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 40 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 40 | | -1 | |   | ### CAL_GYRO1_XOFF (`FLOAT`) {#CAL_GYRO1_XOFF} Gyroscope 1 X-axis offset. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | | | | 0.0 | rad/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | | | | 0.0 | rad/s |   | ### CAL_GYRO1_YOFF (`FLOAT`) {#CAL_GYRO1_YOFF} Gyroscope 1 Y-axis offset. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | | | | 0.0 | rad/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | | | | 0.0 | rad/s |   | ### CAL_GYRO1_ZOFF (`FLOAT`) {#CAL_GYRO1_ZOFF} Gyroscope 1 Z-axis offset. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | | | | 0.0 | rad/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | | | | 0.0 | rad/s |   | ### CAL_GYRO2_ID (`INT32`) {#CAL_GYRO2_ID} @@ -32211,9 +34551,9 @@ Gyroscope 2 calibration device ID. Device ID of the gyroscope this calibration applies to. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### CAL_GYRO2_PRIO (`INT32`) {#CAL_GYRO2_PRIO} @@ -32229,9 +34569,9 @@ Gyroscope 2 priority. - `75`: High - `100`: Max -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | -1 | |   | ### CAL_GYRO2_ROT (`INT32`) {#CAL_GYRO2_ROT} @@ -32284,33 +34624,33 @@ An internal sensor will force a value of -1, so a GCS should only attempt to con - `39`: Pitch 315° - `40`: Roll 90°, Pitch 315° -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 40 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 40 | | -1 | |   | ### CAL_GYRO2_XOFF (`FLOAT`) {#CAL_GYRO2_XOFF} Gyroscope 2 X-axis offset. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | | | | 0.0 | rad/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | | | | 0.0 | rad/s |   | ### CAL_GYRO2_YOFF (`FLOAT`) {#CAL_GYRO2_YOFF} Gyroscope 2 Y-axis offset. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | | | | 0.0 | rad/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | | | | 0.0 | rad/s |   | ### CAL_GYRO2_ZOFF (`FLOAT`) {#CAL_GYRO2_ZOFF} Gyroscope 2 Z-axis offset. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | | | | 0.0 | rad/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | | | | 0.0 | rad/s |   | ### CAL_GYRO3_ID (`INT32`) {#CAL_GYRO3_ID} @@ -32318,9 +34658,9 @@ Gyroscope 3 calibration device ID. Device ID of the gyroscope this calibration applies to. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### CAL_GYRO3_PRIO (`INT32`) {#CAL_GYRO3_PRIO} @@ -32336,9 +34676,9 @@ Gyroscope 3 priority. - `75`: High - `100`: Max -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | -1 | |   | ### CAL_GYRO3_ROT (`INT32`) {#CAL_GYRO3_ROT} @@ -32391,33 +34731,33 @@ An internal sensor will force a value of -1, so a GCS should only attempt to con - `39`: Pitch 315° - `40`: Roll 90°, Pitch 315° -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 40 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 40 | | -1 | |   | ### CAL_GYRO3_XOFF (`FLOAT`) {#CAL_GYRO3_XOFF} Gyroscope 3 X-axis offset. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | | | | 0.0 | rad/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | | | | 0.0 | rad/s |   | ### CAL_GYRO3_YOFF (`FLOAT`) {#CAL_GYRO3_YOFF} Gyroscope 3 Y-axis offset. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | | | | 0.0 | rad/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | | | | 0.0 | rad/s |   | ### CAL_GYRO3_ZOFF (`FLOAT`) {#CAL_GYRO3_ZOFF} Gyroscope 3 Z-axis offset. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | | | | 0.0 | rad/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | | | | 0.0 | rad/s |   | ### CAL_MAG0_ID (`INT32`) {#CAL_MAG0_ID} @@ -32425,9 +34765,9 @@ Magnetometer 0 calibration device ID. Device ID of the magnetometer this calibration applies to. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### CAL_MAG0_PITCH (`FLOAT`) {#CAL_MAG0_PITCH} @@ -32435,9 +34775,9 @@ Magnetometer 0 Custom Euler Pitch Angle. Setting this parameter changes CAL_MAG0_ROT to "Custom Euler Angle" -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -180 | 180 | | 0.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -180 | 180 | | 0.0 | deg |   | ### CAL_MAG0_PRIO (`INT32`) {#CAL_MAG0_PRIO} @@ -32453,9 +34793,9 @@ Magnetometer 0 priority. - `75`: High - `100`: Max -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | -1 | |   | ### CAL_MAG0_ROLL (`FLOAT`) {#CAL_MAG0_ROLL} @@ -32463,9 +34803,9 @@ Magnetometer 0 Custom Euler Roll Angle. Setting this parameter changes CAL_MAG0_ROT to "Custom Euler Angle" -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -180 | 180 | | 0.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -180 | 180 | | 0.0 | deg |   | ### CAL_MAG0_ROT (`INT32`) {#CAL_MAG0_ROT} @@ -32520,9 +34860,9 @@ Set to "Custom Euler Angle" to define the rotation using CAL_MAG0_ROLL, CAL_MAG0 - `40`: Roll 90°, Pitch 315° - `100`: Custom Euler Angle -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 100 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 100 | | -1 | |   | ### CAL_MAG0_XCOMP (`FLOAT`) {#CAL_MAG0_XCOMP} @@ -32534,33 +34874,33 @@ and either current or throttle depending on value of CAL_MAG_COMP_TYP. Unit for throttle-based compensation is [G] and for current-based compensation [G/kA] -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### CAL_MAG0_XODIAG (`FLOAT`) {#CAL_MAG0_XODIAG} Magnetometer 0 X-axis off diagonal scale factor. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### CAL_MAG0_XOFF (`FLOAT`) {#CAL_MAG0_XOFF} Magnetometer 0 X-axis offset. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | | | | 0.0 | gauss | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | | | | 0.0 | gauss |   | ### CAL_MAG0_XSCALE (`FLOAT`) {#CAL_MAG0_XSCALE} Magnetometer 0 X-axis scaling factor. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 3.0 | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 3.0 | | 1.0 | |   | ### CAL_MAG0_YAW (`FLOAT`) {#CAL_MAG0_YAW} @@ -32568,9 +34908,9 @@ Magnetometer 0 Custom Euler Yaw Angle. Setting this parameter changes CAL_MAG0_ROT to "Custom Euler Angle" -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -180 | 180 | | 0.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -180 | 180 | | 0.0 | deg |   | ### CAL_MAG0_YCOMP (`FLOAT`) {#CAL_MAG0_YCOMP} @@ -32582,33 +34922,33 @@ and either current or throttle depending on value of CAL_MAG_COMP_TYP. Unit for throttle-based compensation is [G] and for current-based compensation [G/kA] -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### CAL_MAG0_YODIAG (`FLOAT`) {#CAL_MAG0_YODIAG} Magnetometer 0 Y-axis off diagonal scale factor. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### CAL_MAG0_YOFF (`FLOAT`) {#CAL_MAG0_YOFF} Magnetometer 0 Y-axis offset. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | | | | 0.0 | gauss | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | | | | 0.0 | gauss |   | ### CAL_MAG0_YSCALE (`FLOAT`) {#CAL_MAG0_YSCALE} Magnetometer 0 Y-axis scaling factor. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 3.0 | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 3.0 | | 1.0 | |   | ### CAL_MAG0_ZCOMP (`FLOAT`) {#CAL_MAG0_ZCOMP} @@ -32620,33 +34960,33 @@ and either current or throttle depending on value of CAL_MAG_COMP_TYP. Unit for throttle-based compensation is [G] and for current-based compensation [G/kA] -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### CAL_MAG0_ZODIAG (`FLOAT`) {#CAL_MAG0_ZODIAG} Magnetometer 0 Z-axis off diagonal scale factor. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### CAL_MAG0_ZOFF (`FLOAT`) {#CAL_MAG0_ZOFF} Magnetometer 0 Z-axis offset. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | | | | 0.0 | gauss | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | | | | 0.0 | gauss |   | ### CAL_MAG0_ZSCALE (`FLOAT`) {#CAL_MAG0_ZSCALE} Magnetometer 0 Z-axis scaling factor. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 3.0 | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 3.0 | | 1.0 | |   | ### CAL_MAG1_ID (`INT32`) {#CAL_MAG1_ID} @@ -32654,9 +34994,9 @@ Magnetometer 1 calibration device ID. Device ID of the magnetometer this calibration applies to. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### CAL_MAG1_PITCH (`FLOAT`) {#CAL_MAG1_PITCH} @@ -32664,9 +35004,9 @@ Magnetometer 1 Custom Euler Pitch Angle. Setting this parameter changes CAL_MAG1_ROT to "Custom Euler Angle" -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -180 | 180 | | 0.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -180 | 180 | | 0.0 | deg |   | ### CAL_MAG1_PRIO (`INT32`) {#CAL_MAG1_PRIO} @@ -32682,9 +35022,9 @@ Magnetometer 1 priority. - `75`: High - `100`: Max -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | -1 | |   | ### CAL_MAG1_ROLL (`FLOAT`) {#CAL_MAG1_ROLL} @@ -32692,9 +35032,9 @@ Magnetometer 1 Custom Euler Roll Angle. Setting this parameter changes CAL_MAG1_ROT to "Custom Euler Angle" -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -180 | 180 | | 0.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -180 | 180 | | 0.0 | deg |   | ### CAL_MAG1_ROT (`INT32`) {#CAL_MAG1_ROT} @@ -32749,9 +35089,9 @@ Set to "Custom Euler Angle" to define the rotation using CAL_MAG1_ROLL, CAL_MAG1 - `40`: Roll 90°, Pitch 315° - `100`: Custom Euler Angle -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 100 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 100 | | -1 | |   | ### CAL_MAG1_XCOMP (`FLOAT`) {#CAL_MAG1_XCOMP} @@ -32763,33 +35103,33 @@ and either current or throttle depending on value of CAL_MAG_COMP_TYP. Unit for throttle-based compensation is [G] and for current-based compensation [G/kA] -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### CAL_MAG1_XODIAG (`FLOAT`) {#CAL_MAG1_XODIAG} Magnetometer 1 X-axis off diagonal scale factor. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### CAL_MAG1_XOFF (`FLOAT`) {#CAL_MAG1_XOFF} Magnetometer 1 X-axis offset. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | | | | 0.0 | gauss | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | | | | 0.0 | gauss |   | ### CAL_MAG1_XSCALE (`FLOAT`) {#CAL_MAG1_XSCALE} Magnetometer 1 X-axis scaling factor. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 3.0 | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 3.0 | | 1.0 | |   | ### CAL_MAG1_YAW (`FLOAT`) {#CAL_MAG1_YAW} @@ -32797,9 +35137,9 @@ Magnetometer 1 Custom Euler Yaw Angle. Setting this parameter changes CAL_MAG1_ROT to "Custom Euler Angle" -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -180 | 180 | | 0.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -180 | 180 | | 0.0 | deg |   | ### CAL_MAG1_YCOMP (`FLOAT`) {#CAL_MAG1_YCOMP} @@ -32811,33 +35151,33 @@ and either current or throttle depending on value of CAL_MAG_COMP_TYP. Unit for throttle-based compensation is [G] and for current-based compensation [G/kA] -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### CAL_MAG1_YODIAG (`FLOAT`) {#CAL_MAG1_YODIAG} Magnetometer 1 Y-axis off diagonal scale factor. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### CAL_MAG1_YOFF (`FLOAT`) {#CAL_MAG1_YOFF} Magnetometer 1 Y-axis offset. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | | | | 0.0 | gauss | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | | | | 0.0 | gauss |   | ### CAL_MAG1_YSCALE (`FLOAT`) {#CAL_MAG1_YSCALE} Magnetometer 1 Y-axis scaling factor. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 3.0 | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 3.0 | | 1.0 | |   | ### CAL_MAG1_ZCOMP (`FLOAT`) {#CAL_MAG1_ZCOMP} @@ -32849,33 +35189,33 @@ and either current or throttle depending on value of CAL_MAG_COMP_TYP. Unit for throttle-based compensation is [G] and for current-based compensation [G/kA] -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### CAL_MAG1_ZODIAG (`FLOAT`) {#CAL_MAG1_ZODIAG} Magnetometer 1 Z-axis off diagonal scale factor. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### CAL_MAG1_ZOFF (`FLOAT`) {#CAL_MAG1_ZOFF} Magnetometer 1 Z-axis offset. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | | | | 0.0 | gauss | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | | | | 0.0 | gauss |   | ### CAL_MAG1_ZSCALE (`FLOAT`) {#CAL_MAG1_ZSCALE} Magnetometer 1 Z-axis scaling factor. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 3.0 | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 3.0 | | 1.0 | |   | ### CAL_MAG2_ID (`INT32`) {#CAL_MAG2_ID} @@ -32883,9 +35223,9 @@ Magnetometer 2 calibration device ID. Device ID of the magnetometer this calibration applies to. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### CAL_MAG2_PITCH (`FLOAT`) {#CAL_MAG2_PITCH} @@ -32893,9 +35233,9 @@ Magnetometer 2 Custom Euler Pitch Angle. Setting this parameter changes CAL_MAG2_ROT to "Custom Euler Angle" -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -180 | 180 | | 0.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -180 | 180 | | 0.0 | deg |   | ### CAL_MAG2_PRIO (`INT32`) {#CAL_MAG2_PRIO} @@ -32911,9 +35251,9 @@ Magnetometer 2 priority. - `75`: High - `100`: Max -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | -1 | |   | ### CAL_MAG2_ROLL (`FLOAT`) {#CAL_MAG2_ROLL} @@ -32921,9 +35261,9 @@ Magnetometer 2 Custom Euler Roll Angle. Setting this parameter changes CAL_MAG2_ROT to "Custom Euler Angle" -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -180 | 180 | | 0.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -180 | 180 | | 0.0 | deg |   | ### CAL_MAG2_ROT (`INT32`) {#CAL_MAG2_ROT} @@ -32978,9 +35318,9 @@ Set to "Custom Euler Angle" to define the rotation using CAL_MAG2_ROLL, CAL_MAG2 - `40`: Roll 90°, Pitch 315° - `100`: Custom Euler Angle -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 100 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 100 | | -1 | |   | ### CAL_MAG2_XCOMP (`FLOAT`) {#CAL_MAG2_XCOMP} @@ -32992,33 +35332,33 @@ and either current or throttle depending on value of CAL_MAG_COMP_TYP. Unit for throttle-based compensation is [G] and for current-based compensation [G/kA] -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### CAL_MAG2_XODIAG (`FLOAT`) {#CAL_MAG2_XODIAG} Magnetometer 2 X-axis off diagonal scale factor. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### CAL_MAG2_XOFF (`FLOAT`) {#CAL_MAG2_XOFF} Magnetometer 2 X-axis offset. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | | | | 0.0 | gauss | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | | | | 0.0 | gauss |   | ### CAL_MAG2_XSCALE (`FLOAT`) {#CAL_MAG2_XSCALE} Magnetometer 2 X-axis scaling factor. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 3.0 | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 3.0 | | 1.0 | |   | ### CAL_MAG2_YAW (`FLOAT`) {#CAL_MAG2_YAW} @@ -33026,9 +35366,9 @@ Magnetometer 2 Custom Euler Yaw Angle. Setting this parameter changes CAL_MAG2_ROT to "Custom Euler Angle" -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -180 | 180 | | 0.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -180 | 180 | | 0.0 | deg |   | ### CAL_MAG2_YCOMP (`FLOAT`) {#CAL_MAG2_YCOMP} @@ -33040,33 +35380,33 @@ and either current or throttle depending on value of CAL_MAG_COMP_TYP. Unit for throttle-based compensation is [G] and for current-based compensation [G/kA] -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### CAL_MAG2_YODIAG (`FLOAT`) {#CAL_MAG2_YODIAG} Magnetometer 2 Y-axis off diagonal scale factor. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### CAL_MAG2_YOFF (`FLOAT`) {#CAL_MAG2_YOFF} Magnetometer 2 Y-axis offset. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | | | | 0.0 | gauss | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | | | | 0.0 | gauss |   | ### CAL_MAG2_YSCALE (`FLOAT`) {#CAL_MAG2_YSCALE} Magnetometer 2 Y-axis scaling factor. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 3.0 | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 3.0 | | 1.0 | |   | ### CAL_MAG2_ZCOMP (`FLOAT`) {#CAL_MAG2_ZCOMP} @@ -33078,33 +35418,33 @@ and either current or throttle depending on value of CAL_MAG_COMP_TYP. Unit for throttle-based compensation is [G] and for current-based compensation [G/kA] -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### CAL_MAG2_ZODIAG (`FLOAT`) {#CAL_MAG2_ZODIAG} Magnetometer 2 Z-axis off diagonal scale factor. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### CAL_MAG2_ZOFF (`FLOAT`) {#CAL_MAG2_ZOFF} Magnetometer 2 Z-axis offset. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | | | | 0.0 | gauss | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | | | | 0.0 | gauss |   | ### CAL_MAG2_ZSCALE (`FLOAT`) {#CAL_MAG2_ZSCALE} Magnetometer 2 Z-axis scaling factor. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 3.0 | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 3.0 | | 1.0 | |   | ### CAL_MAG3_ID (`INT32`) {#CAL_MAG3_ID} @@ -33112,9 +35452,9 @@ Magnetometer 3 calibration device ID. Device ID of the magnetometer this calibration applies to. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### CAL_MAG3_PITCH (`FLOAT`) {#CAL_MAG3_PITCH} @@ -33122,9 +35462,9 @@ Magnetometer 3 Custom Euler Pitch Angle. Setting this parameter changes CAL_MAG3_ROT to "Custom Euler Angle" -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -180 | 180 | | 0.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -180 | 180 | | 0.0 | deg |   | ### CAL_MAG3_PRIO (`INT32`) {#CAL_MAG3_PRIO} @@ -33140,9 +35480,9 @@ Magnetometer 3 priority. - `75`: High - `100`: Max -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | -1 | |   | ### CAL_MAG3_ROLL (`FLOAT`) {#CAL_MAG3_ROLL} @@ -33150,9 +35490,9 @@ Magnetometer 3 Custom Euler Roll Angle. Setting this parameter changes CAL_MAG3_ROT to "Custom Euler Angle" -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -180 | 180 | | 0.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -180 | 180 | | 0.0 | deg |   | ### CAL_MAG3_ROT (`INT32`) {#CAL_MAG3_ROT} @@ -33207,9 +35547,9 @@ Set to "Custom Euler Angle" to define the rotation using CAL_MAG3_ROLL, CAL_MAG3 - `40`: Roll 90°, Pitch 315° - `100`: Custom Euler Angle -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 100 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 100 | | -1 | |   | ### CAL_MAG3_XCOMP (`FLOAT`) {#CAL_MAG3_XCOMP} @@ -33221,33 +35561,33 @@ and either current or throttle depending on value of CAL_MAG_COMP_TYP. Unit for throttle-based compensation is [G] and for current-based compensation [G/kA] -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### CAL_MAG3_XODIAG (`FLOAT`) {#CAL_MAG3_XODIAG} Magnetometer 3 X-axis off diagonal scale factor. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### CAL_MAG3_XOFF (`FLOAT`) {#CAL_MAG3_XOFF} Magnetometer 3 X-axis offset. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | | | | 0.0 | gauss | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | | | | 0.0 | gauss |   | ### CAL_MAG3_XSCALE (`FLOAT`) {#CAL_MAG3_XSCALE} Magnetometer 3 X-axis scaling factor. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 3.0 | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 3.0 | | 1.0 | |   | ### CAL_MAG3_YAW (`FLOAT`) {#CAL_MAG3_YAW} @@ -33255,9 +35595,9 @@ Magnetometer 3 Custom Euler Yaw Angle. Setting this parameter changes CAL_MAG3_ROT to "Custom Euler Angle" -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -180 | 180 | | 0.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -180 | 180 | | 0.0 | deg |   | ### CAL_MAG3_YCOMP (`FLOAT`) {#CAL_MAG3_YCOMP} @@ -33269,33 +35609,33 @@ and either current or throttle depending on value of CAL_MAG_COMP_TYP. Unit for throttle-based compensation is [G] and for current-based compensation [G/kA] -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### CAL_MAG3_YODIAG (`FLOAT`) {#CAL_MAG3_YODIAG} Magnetometer 3 Y-axis off diagonal scale factor. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### CAL_MAG3_YOFF (`FLOAT`) {#CAL_MAG3_YOFF} Magnetometer 3 Y-axis offset. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | | | | 0.0 | gauss | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | | | | 0.0 | gauss |   | ### CAL_MAG3_YSCALE (`FLOAT`) {#CAL_MAG3_YSCALE} Magnetometer 3 Y-axis scaling factor. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 3.0 | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 3.0 | | 1.0 | |   | ### CAL_MAG3_ZCOMP (`FLOAT`) {#CAL_MAG3_ZCOMP} @@ -33307,33 +35647,33 @@ and either current or throttle depending on value of CAL_MAG_COMP_TYP. Unit for throttle-based compensation is [G] and for current-based compensation [G/kA] -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### CAL_MAG3_ZODIAG (`FLOAT`) {#CAL_MAG3_ZODIAG} Magnetometer 3 Z-axis off diagonal scale factor. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### CAL_MAG3_ZOFF (`FLOAT`) {#CAL_MAG3_ZOFF} Magnetometer 3 Z-axis offset. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | | | | 0.0 | gauss | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | | | | 0.0 | gauss |   | ### CAL_MAG3_ZSCALE (`FLOAT`) {#CAL_MAG3_ZSCALE} Magnetometer 3 Z-axis scaling factor. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 3.0 | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 3.0 | | 1.0 | |   | ### CAL_MAG_COMP_TYP (`INT32`) {#CAL_MAG_COMP_TYP} @@ -33346,9 +35686,9 @@ Type of magnetometer compensation. - `2`: Current-based compensation (battery_status instance 0) - `3`: Current-based compensation (battery_status instance 1) -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### SENS_DPRES_ANSC (`FLOAT`) {#SENS_DPRES_ANSC} @@ -33357,12 +35697,13 @@ Differential pressure sensor analog scaling. Pick the appropriate scaling from the datasheet. this number defines the (linear) conversion from voltage to Pascal (pa). For the MPXV7002DP this is 1000. + NOTE: If the sensor always registers zero, try switching the static and dynamic tubes. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### SENS_DPRES_OFF (`FLOAT`) {#SENS_DPRES_OFF} @@ -33370,9 +35711,9 @@ Differential pressure sensor offset. The offset (zero-reading) in Pascal -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### SENS_DPRES_REV (`INT32`) {#SENS_DPRES_REV} @@ -33381,9 +35722,9 @@ Reverse differential pressure sensor readings. Reverse the raw measurements of all differential pressure sensors. This can be enabled if the sensors have static and dynamic ports swapped. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------------ | ---- | -|   | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------------ | ---- | --------- | +|   | | | | Disabled (0) | |   | ### SENS_FLOW_MAXHGT (`FLOAT`) {#SENS_FLOW_MAXHGT} @@ -33394,21 +35735,23 @@ The height setpoint will be limited to be no greater than this value when the na is completely reliant on optical flow data and the height above ground estimate is valid. The sensor may be usable above this height, but accuracy will progressively degrade. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1.0 | 100.0 | 0.1 | 100. | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1.0 | 100.0 | 0.1 | 100.0 | m |   | ### SENS_FLOW_MAXR (`FLOAT`) {#SENS_FLOW_MAXR} -Magnitude of maximum angular flow rate reliably measurable by the optical flow sensor. +Max angular flow rate measurable by sensor. + +Magnitude of maximum angular flow rate reliably measurable by the optical flow sensor Optical flow data will not fused by the estimators if the magnitude of the flow rate exceeds this value and control loops will be instructed to limit ground speed such that the flow rate produced by movement over ground is less than 50% of this value. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 1.0 | | | 8. | rad/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | 1.0 | | | 8.0 | rad/s |   | ### SENS_FLOW_MINHGT (`FLOAT`) {#SENS_FLOW_MINHGT} @@ -33417,9 +35760,9 @@ Minimum height above ground when reliant on optical flow. This parameter defines the minimum distance from ground at which the optical flow sensor operates reliably. The sensor may be usable below this height, but accuracy will progressively reduce to loss of focus. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 1.0 | 0.1 | 0.08 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 1.0 | 0.1 | 0.08 | m |   | ## Sensors @@ -33429,17 +35772,17 @@ Enable external ADS1115 ADC. If enabled, the internal ADC is not used. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### BAT1_C_MULT (`FLOAT`) {#BAT1_C_MULT} Capacity/current multiplier for high-current capable SMBUS battery. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 1.0 | |   | ### BAT1_SMBUS_MODEL (`INT32`) {#BAT1_SMBUS_MODEL} @@ -33451,17 +35794,17 @@ Battery device model. - `1`: BQ40Z50 based - `2`: BQ40Z80 based -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 2 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 2 | | 0 | |   | ### BATMON_ADDR_DFLT (`INT32`) {#BATMON_ADDR_DFLT} I2C address for BatMon battery 1. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 11 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 11 | |   | ### BATMON_DRIVER_EN (`INT32`) {#BATMON_DRIVER_EN} @@ -33473,9 +35816,9 @@ Parameter to enable BatMon module. - `1`: Start on default I2C addr(BATMON_ADDR_DFLT) - `2`: Autodetect I2C address (TODO) -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 2 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 2 | | 0 | |   | ### CAL_AIR_CMODEL (`INT32`) {#CAL_AIR_CMODEL} @@ -33497,17 +35840,19 @@ CAL_AIR_TUBELEN: Length of the tubes connecting the pitot to the sensor and the - `1`: Model without Pitot (1.5 mm tubes) - `2`: Tube Pressure Drop -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### CAL_AIR_TUBED_MM (`FLOAT`) {#CAL_AIR_TUBED_MM} -Airspeed sensor tube diameter. Only used for the Tube Pressure Drop Compensation. +Airspeed sensor tube diameter. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1.5 | 100 | | 1.5 | mm | +Only used for the Tube Pressure Drop Compensation + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1.5 | 100 | | 1.5 | mm |   | ### CAL_AIR_TUBELEN (`FLOAT`) {#CAL_AIR_TUBELEN} @@ -33515,9 +35860,9 @@ Airspeed sensor tube length. See the CAL_AIR_CMODEL explanation on how this parameter should be set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.01 | 2.00 | | 0.2 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.01 | 2.0 | | 0.2 | m |   | ### CAL_MAG_SIDES (`INT32`) {#CAL_MAG_SIDES} @@ -33525,9 +35870,9 @@ For legacy QGC support only. Use SENS_MAG_SIDES instead -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 63 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 63 | |   | ### GRF_RATE_CFG (`INT32`) {#GRF_RATE_CFG} @@ -33547,9 +35892,9 @@ The Lightware GRF distance sensor can increase the update rate to enable greater - `8`: 40 Hz - `9`: 50 Hz -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 4 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 4 | |   | ### GRF_SENS_MODEL (`INT32`) {#GRF_SENS_MODEL} @@ -33563,9 +35908,180 @@ GRF Sensor Model used to distinush between the GRF250 and GRF500 since both have - `1`: GRF250 - `2`: GRF500 -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | + +### HEATER1_IMU_ID (`INT32`) {#HEATER1_IMU_ID} + +The ID of the IMU controlled by heater 1. + +Specifies the sensor device ID (DEVID) that this heater instance controls. +-1 disables this heater instance. +If set to 0, auto-select is only supported when HEATER_NUM == 1. On boards with multiple heater outputs, +a valid DEVID must be configured for each heater to ensure a 1:1 mapping between heater output and IMU. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | + +### HEATER1_TEMP (`FLOAT`) {#HEATER1_TEMP} + +Target temperature for heater 1. + +Specify the target stable temperature (in degrees Celsius) for the IMU. +It is generally recommended to set this between 40°C and 60°C, +which must be higher than the maximum ambient temperature. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ------- | --------- | +| ✓ | 0 | 85.0 | | 55.0 | celcius |   | + +### HEATER1_TEMP_FF (`FLOAT`) {#HEATER1_TEMP_FF} + +IMU heater controller 1 feedforward value. + +Used to predict the baseline power consumption required to maintain temperature, +helping to reduce adjustment time. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 1.0 | | 0.05 | % |   | + +### HEATER1_TEMP_I (`FLOAT`) {#HEATER1_TEMP_I} + +IMU heater controller 1 integrator gain value. + +Integral gain is used to eliminate steady-state error, +ensuring that the temperature ultimately reaches the setpoint target. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 1.0 | | 0.025 | us/C |   | + +### HEATER1_TEMP_P (`FLOAT`) {#HEATER1_TEMP_P} + +IMU heater controller 1 proportional gain value. + +The proportional gain determines how quickly the controller responds to temperature deviations. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 2.0 | | 1.0 | us/C |   | + +### HEATER2_IMU_ID (`INT32`) {#HEATER2_IMU_ID} + +The ID of the IMU controlled by heater 2. + +Specifies the sensor device ID (DEVID) that this heater instance controls. +-1 disables this heater instance. +If set to 0, auto-select is only supported when HEATER_NUM == 1. On boards with multiple heater outputs, +a valid DEVID must be configured for each heater to ensure a 1:1 mapping between heater output and IMU. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | + +### HEATER2_TEMP (`FLOAT`) {#HEATER2_TEMP} + +Target temperature for heater 2. + +Specify the target stable temperature (in degrees Celsius) for the IMU. +It is generally recommended to set this between 40°C and 60°C, +which must be higher than the maximum ambient temperature. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ------- | --------- | +| ✓ | 0 | 85.0 | | 55.0 | celcius |   | + +### HEATER2_TEMP_FF (`FLOAT`) {#HEATER2_TEMP_FF} + +IMU heater controller 2 feedforward value. + +Used to predict the baseline power consumption required to maintain temperature, +helping to reduce adjustment time. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 1.0 | | 0.05 | % |   | + +### HEATER2_TEMP_I (`FLOAT`) {#HEATER2_TEMP_I} + +IMU heater controller 2 integrator gain value. + +Integral gain is used to eliminate steady-state error, +ensuring that the temperature ultimately reaches the setpoint target. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 1.0 | | 0.025 | us/C |   | + +### HEATER2_TEMP_P (`FLOAT`) {#HEATER2_TEMP_P} + +IMU heater controller 2 proportional gain value. + +The proportional gain determines how quickly the controller responds to temperature deviations. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 2.0 | | 1.0 | us/C |   | + +### HEATER3_IMU_ID (`INT32`) {#HEATER3_IMU_ID} + +The ID of the IMU controlled by heater 3. + +Specifies the sensor device ID (DEVID) that this heater instance controls. +-1 disables this heater instance. +If set to 0, auto-select is only supported when HEATER_NUM == 1. On boards with multiple heater outputs, +a valid DEVID must be configured for each heater to ensure a 1:1 mapping between heater output and IMU. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | + +### HEATER3_TEMP (`FLOAT`) {#HEATER3_TEMP} + +Target temperature for heater 3. + +Specify the target stable temperature (in degrees Celsius) for the IMU. +It is generally recommended to set this between 40°C and 60°C, +which must be higher than the maximum ambient temperature. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ------- | --------- | +| ✓ | 0 | 85.0 | | 55.0 | celcius |   | + +### HEATER3_TEMP_FF (`FLOAT`) {#HEATER3_TEMP_FF} + +IMU heater controller 3 feedforward value. + +Used to predict the baseline power consumption required to maintain temperature, +helping to reduce adjustment time. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 1.0 | | 0.05 | % |   | + +### HEATER3_TEMP_I (`FLOAT`) {#HEATER3_TEMP_I} + +IMU heater controller 3 integrator gain value. + +Integral gain is used to eliminate steady-state error, +ensuring that the temperature ultimately reaches the setpoint target. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 1.0 | | 0.025 | us/C |   | + +### HEATER3_TEMP_P (`FLOAT`) {#HEATER3_TEMP_P} + +IMU heater controller 3 proportional gain value. + +The proportional gain determines how quickly the controller responds to temperature deviations. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 2.0 | | 1.0 | us/C |   | ### ILABS_MODE (`INT32`) {#ILABS_MODE} @@ -33579,9 +36095,9 @@ or additionally supplies INS data such as position and velocity estimates. - `0`: Sensors Only (default) - `1`: INS -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### IMU_ACCEL_CUTOFF (`FLOAT`) {#IMU_ACCEL_CUTOFF} @@ -33590,9 +36106,9 @@ Low pass filter cutoff frequency for accel. The cutoff frequency for the 2nd order butterworth filter on the primary accelerometer. This only affects the signal sent to the controllers, not the estimators. 0 disables the filter. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 1000 | | 30.0 | Hz | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 1000 | | 30.0 | Hz |   | ### IMU_DGYRO_CUTOFF (`FLOAT`) {#IMU_DGYRO_CUTOFF} @@ -33604,19 +36120,20 @@ the D-term filter in the rate controller. The D-term uses the derivative of the rate and thus is the most susceptible to noise. Therefore, using a D-term filter allows to increase IMU_GYRO_CUTOFF, which leads to reduced control latency and permits to increase the P gains. + A value of 0 disables the filter. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 1000 | 0.1 | 20.0 | Hz | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 1000 | 0.1 | 20.0 | Hz |   | ### IMU_GYRO_CAL_EN (`INT32`) {#IMU_GYRO_CAL_EN} IMU gyro auto calibration enable. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ----------- | ---- | -| ✓ | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ----------- | ---- | --------- | +| ✓ | | | | Enabled (1) | |   | ### IMU_GYRO_CUTOFF (`FLOAT`) {#IMU_GYRO_CUTOFF} @@ -33625,11 +36142,12 @@ Low pass filter cutoff frequency for gyro. The cutoff frequency for the 2nd order butterworth filter on the primary gyro. This only affects the angular velocity sent to the controllers, not the estimators. It applies also to the angular acceleration (D-Term filter), see IMU_DGYRO_CUTOFF. + A value of 0 disables the filter. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 1000 | 0.1 | 40.0 | Hz | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 1000 | 0.1 | 40.0 | Hz |   | ### IMU_GYRO_DNF_BW (`FLOAT`) {#IMU_GYRO_DNF_BW} @@ -33637,9 +36155,9 @@ IMU gyro ESC notch filter bandwidth. Bandwidth per notch filter when using dynamic notch filtering with ESC RPM. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 5 | 30 | 0.1 | 15. | Hz | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 5 | 30 | 0.1 | 15.0 | Hz |   | ### IMU_GYRO_DNF_EN (`INT32`) {#IMU_GYRO_DNF_EN} @@ -33653,9 +36171,9 @@ Requires ESC RPM feedback or onboard FFT (IMU_GYRO_FFT_EN). - `0`: ESC RPM - `1`: FFT -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 3 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 3 | | 0 | |   | ### IMU_GYRO_DNF_HMC (`INT32`) {#IMU_GYRO_DNF_HMC} @@ -33663,9 +36181,9 @@ IMU gyro dynamic notch filter harmonics. ESC RPM number of harmonics (multiples of RPM) for ESC RPM dynamic notch filtering. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1 | 7 | | 3 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1 | 7 | | 3 | |   | ### IMU_GYRO_DNF_MIN (`FLOAT`) {#IMU_GYRO_DNF_MIN} @@ -33673,17 +36191,17 @@ IMU gyro dynamic notch filter minimum frequency. Minimum notch filter frequency in Hz. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | 0.1 | 25. | Hz | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | 0.1 | 25.0 | Hz |   | ### IMU_GYRO_FFT_EN (`INT32`) {#IMU_GYRO_FFT_EN} IMU gyro FFT enable. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### IMU_GYRO_FFT_LEN (`INT32`) {#IMU_GYRO_FFT_LEN} @@ -33696,33 +36214,33 @@ IMU gyro FFT length. - `1024`: 1024 - `4096`: 4096 -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 512 | Hz | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 512 | Hz |   | ### IMU_GYRO_FFT_MAX (`FLOAT`) {#IMU_GYRO_FFT_MAX} IMU gyro FFT maximum frequency. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 1 | 1000 | | 150. | Hz | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 1 | 1000 | | 150.0 | Hz |   | ### IMU_GYRO_FFT_MIN (`FLOAT`) {#IMU_GYRO_FFT_MIN} IMU gyro FFT minimum frequency. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 1 | 1000 | | 30. | Hz | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 1 | 1000 | | 30.0 | Hz |   | ### IMU_GYRO_FFT_SNR (`FLOAT`) {#IMU_GYRO_FFT_SNR} IMU gyro FFT SNR. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1 | 30 | | 10. | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1 | 30 | | 10.0 | |   | ### IMU_GYRO_NF0_BW (`FLOAT`) {#IMU_GYRO_NF0_BW} @@ -33732,9 +36250,9 @@ The frequency width of the stop band for the 2nd order notch filter on the prima See "IMU_GYRO_NF0_FRQ" to activate the filter and to set the notch frequency. Applies to both angular velocity and angular acceleration sent to the controllers. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 100 | 0.1 | 20.0 | Hz | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 100 | 0.1 | 20.0 | Hz |   | ### IMU_GYRO_NF0_FRQ (`FLOAT`) {#IMU_GYRO_NF0_FRQ} @@ -33745,11 +36263,12 @@ This filter can be enabled to avoid feedback amplification of structural resonan This only affects the signal sent to the controllers, not the estimators. Applies to both angular velocity and angular acceleration sent to the controllers. See "IMU_GYRO_NF0_BW" to set the bandwidth of the filter. + A value of 0 disables the filter. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 1000 | 0.1 | 0.0 | Hz | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 1000 | 0.1 | 0.0 | Hz |   | ### IMU_GYRO_NF1_BW (`FLOAT`) {#IMU_GYRO_NF1_BW} @@ -33759,9 +36278,9 @@ The frequency width of the stop band for the 2nd order notch filter on the prima See "IMU_GYRO_NF1_FRQ" to activate the filter and to set the notch frequency. Applies to both angular velocity and angular acceleration sent to the controllers. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 100 | 0.1 | 20.0 | Hz | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 100 | 0.1 | 20.0 | Hz |   | ### IMU_GYRO_NF1_FRQ (`FLOAT`) {#IMU_GYRO_NF1_FRQ} @@ -33772,11 +36291,12 @@ This filter can be enabled to avoid feedback amplification of structural resonan This only affects the signal sent to the controllers, not the estimators. Applies to both angular velocity and angular acceleration sent to the controllers. See "IMU_GYRO_NF1_BW" to set the bandwidth of the filter. + A value of 0 disables the filter. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 1000 | 0.1 | 0.0 | Hz | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 1000 | 0.1 | 0.0 | Hz |   | ### IMU_GYRO_RATEMAX (`INT32`) {#IMU_GYRO_RATEMAX} @@ -33784,6 +36304,7 @@ Gyro control data maximum publication rate (inner loop rate). The maximum rate the gyro control data (vehicle_angular_velocity) will be allowed to publish at. This is the loop rate for the rate controller and outputs. + Note: sensor data is always read and filtered at the full raw rate (eg commonly 8 kHz) regardless of this setting. **Values:** @@ -33795,9 +36316,9 @@ Note: sensor data is always read and filtered at the full raw rate (eg commonly - `1000`: 1000 Hz - `2000`: 2000 Hz -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 100 | 2000 | | 400 | Hz | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 100 | 2000 | | 400 | Hz |   | ### IMU_INTEG_RATE (`INT32`) {#IMU_INTEG_RATE} @@ -33813,113 +36334,113 @@ Recommended to set this to a multiple of the estimator update period (currently - `250`: 250 Hz - `400`: 400 Hz -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 100 | 1000 | | 200 | Hz | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 100 | 1000 | | 200 | Hz |   | ### INA220_CONFIG (`INT32`) {#INA220_CONFIG} INA220 Power Monitor Config. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 65535 | 1 | 8607 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 65535 | 1 | 8607 | |   | ### INA220_CUR_BAT (`FLOAT`) {#INA220_CUR_BAT} INA220 Power Monitor Battery Max Current. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 500.0 | 0.1 | 164.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 500.0 | 0.1 | 164.0 | |   | ### INA220_CUR_REG (`FLOAT`) {#INA220_CUR_REG} INA220 Power Monitor Regulator Max Current. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 500.0 | 0.1 | 164.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 500.0 | 0.1 | 164.0 | |   | ### INA220_SHUNT_BAT (`FLOAT`) {#INA220_SHUNT_BAT} INA220 Power Monitor Battery Shunt. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | ----------- | -------- | ---------- | ------- | ---- | -|   | 0.000000001 | 0.1 | .000000001 | 0.0005 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1e-09 | 0.1 | 1e-09 | 0.0005 | |   | ### INA220_SHUNT_REG (`FLOAT`) {#INA220_SHUNT_REG} INA220 Power Monitor Regulator Shunt. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | ----------- | -------- | ---------- | ------- | ---- | -|   | 0.000000001 | 0.1 | .000000001 | 0.0005 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1e-09 | 0.1 | 1e-09 | 0.0005 | |   | ### INA226_CONFIG (`INT32`) {#INA226_CONFIG} INA226 Power Monitor Config. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 65535 | 1 | 18139 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 65535 | 1 | 18139 | |   | ### INA226_CURRENT (`FLOAT`) {#INA226_CURRENT} INA226 Power Monitor Max Current. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0.1 | 200.0 | 0.1 | 164.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0.1 | 200.0 | 0.1 | 164.0 | |   | ### INA226_SHUNT (`FLOAT`) {#INA226_SHUNT} INA226 Power Monitor Shunt. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | ----------- | -------- | ---------- | ------- | ---- | -| ✓ | 0.000000001 | 0.1 | .000000001 | 0.0005 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 1e-09 | 0.1 | 1e-09 | 0.0005 | |   | ### INA228_CONFIG (`INT32`) {#INA228_CONFIG} INA228 Power Monitor Config. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 65535 | 1 | 63779 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 65535 | 1 | 63779 | |   | ### INA228_CURRENT (`FLOAT`) {#INA228_CURRENT} INA228 Power Monitor Max Current. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0.1 | 327.68 | 0.1 | 327.68 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0.1 | 327.68 | 0.1 | 327.68 | |   | ### INA228_SHUNT (`FLOAT`) {#INA228_SHUNT} INA228 Power Monitor Shunt. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | ----------- | -------- | ---------- | ------- | ---- | -| ✓ | 0.000000001 | 0.1 | .000000001 | 0.0005 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 1e-09 | 0.1 | 1e-09 | 0.0005 | |   | ### INA238_CURRENT (`FLOAT`) {#INA238_CURRENT} INA238 Power Monitor Max Current. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0.1 | 327.68 | 0.1 | 327.68 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0.1 | 327.68 | 0.1 | 327.68 | |   | ### INA238_SHUNT (`FLOAT`) {#INA238_SHUNT} INA238 Power Monitor Shunt. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | ----------- | -------- | ---------- | ------- | ---- | -| ✓ | 0.000000001 | 0.1 | .000000001 | 0.0005 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 1e-09 | 0.1 | 1e-09 | 0.0005 | |   | ### MS_ACCEL_RANGE (`INT32`) {#MS_ACCEL_RANGE} @@ -33928,9 +36449,9 @@ MicroStrain accelerometer range. -1 = Will not be configured, and will use the device default range. Ranges vary by device and map to integer codes. Check the device's [User Manual](https://www.hbkworld.com/en/products/transducers/inertial-sensors#!ref_microstrain.com) for supported ranges and set the corresponding integer. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | -1 | |   | ### MS_ALIGNMENT (`INT32`) {#MS_ALIGNMENT} @@ -33945,9 +36466,9 @@ Select the source of heading alignment. - `2`: Magnetometer - `3`: External Heading (first valid external heading will be used to initialize the filter) -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 1 | 15 | | 2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 1 | 15 | | 2 | |   | ### MS_BARO_RATE_HZ (`INT32`) {#MS_BARO_RATE_HZ} @@ -33956,9 +36477,9 @@ MicroStrain barometer data rate. Barometer data rate (Hz). Valid rates: 0 or any factor of 1000. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 1000 | | 50 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 1000 | | 50 | |   | ### MS_EHEAD_YAW (`FLOAT`) {#MS_EHEAD_YAW} @@ -33967,9 +36488,9 @@ MicroStrain External Heading Orientation (Yaw). The orientation of the device (Radians) with respect to the vehicle frame around the z axis. Requires MS_EXT_HEAD_EN to be enabled to be used. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0.0 | |   | ### MS_EMAG_PTCH (`FLOAT`) {#MS_EMAG_PTCH} @@ -33978,9 +36499,9 @@ MicroStrain External Magnetometer Orientation (Pitch). The orientation of the device (Radians) with respect to the vehicle frame around the y axis. Requires MS_EXT_MAG_EN to be enabled to be used. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0.0 | |   | ### MS_EMAG_ROLL (`FLOAT`) {#MS_EMAG_ROLL} @@ -33989,9 +36510,9 @@ MicroStrain External Magnetometer Orientation (Roll). The orientation of the device (Radians) with respect to the vehicle frame around the x axis. Requires MS_EXT_MAG_EN to be enabled to be used. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0.0 | |   | ### MS_EMAG_UNCERT (`FLOAT`) {#MS_EMAG_UNCERT} @@ -34000,9 +36521,9 @@ MicroStrain external magnetometer uncertainty. The 1-sigma uncertainty (in Gauss) for all axes, which will remain constant across all aiding measurements. Requires MS_EXT_MAG_EN to be enabled to be used. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0.1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0.1 | |   | ### MS_EMAG_YAW (`FLOAT`) {#MS_EMAG_YAW} @@ -34011,9 +36532,9 @@ MicroStrain External Magnetometer Orientation (Yaw). The orientation of the device (Radians) with respect to the vehicle frame around the z axis. Requires MS_EXT_MAG_EN to be enabled to be used. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0.0 | |   | ### MS_EXT_HEAD_EN (`INT32`) {#MS_EXT_HEAD_EN} @@ -34027,9 +36548,9 @@ If enabled, the filter will be configured to accept external heading as an aidin - `0`: Disabled - `1`: Enabled -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### MS_EXT_MAG_EN (`INT32`) {#MS_EXT_MAG_EN} @@ -34042,9 +36563,9 @@ Toggles external magnetometer aiding in the device filter. - `0`: Disabled - `1`: Enabled -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### MS_FILT_RATE_HZ (`INT32`) {#MS_FILT_RATE_HZ} @@ -34053,9 +36574,9 @@ MicroStrain EKF data rate. The rate at which the INS data is published (Hz). Valid rates: 0 or any factor of 1000. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 1000 | | 250 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 1000 | | 250 | |   | ### MS_GNSS_AID_SRC (`INT32`) {#MS_GNSS_AID_SRC} @@ -34070,9 +36591,9 @@ Select the source of gnss aiding (GNSS/INS). - `3`: GNSS receiver 1 only - `4`: GNSS receiver 2 only -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 1 | |   | ### MS_GNSS_OFF1_X (`FLOAT`) {#MS_GNSS_OFF1_X} @@ -34081,9 +36602,9 @@ MicroStrain GNSS lever arm offset 1 (X). Lever arm offset (m) in the X direction for the external GNSS receiver. In the case of a dual antenna setup, this is antenna 1. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0.0 | |   | ### MS_GNSS_OFF1_Y (`FLOAT`) {#MS_GNSS_OFF1_Y} @@ -34092,9 +36613,9 @@ MicroStrain GNSS lever arm offset 1 (Y). Lever arm offset (m) in the Y direction for the external GNSS receiver. In the case of a dual antenna setup, this is antenna 1. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0.0 | |   | ### MS_GNSS_OFF1_Z (`FLOAT`) {#MS_GNSS_OFF1_Z} @@ -34103,9 +36624,9 @@ MicroStrain GNSS lever arm offset 1 (Z). Lever arm offset (m) in the Z direction for the external GNSS receiver. In the case of a dual antenna setup, this is antenna 1. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0.0 | |   | ### MS_GNSS_OFF2_X (`FLOAT`) {#MS_GNSS_OFF2_X} @@ -34114,9 +36635,9 @@ MicroStrain GNSS lever arm offset 2 (X). Lever arm offset (m) in the X direction for antenna 2 This will only be used if the device supports a dual antenna setup. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0.0 | |   | ### MS_GNSS_OFF2_Y (`FLOAT`) {#MS_GNSS_OFF2_Y} @@ -34125,9 +36646,9 @@ MicroStrain GNSS lever arm offset 2 (Y). Lever arm offset (m) in the Y direction for antenna 2. This will only be used if the device supports a dual antenna setup. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0.0 | |   | ### MS_GNSS_OFF2_Z (`FLOAT`) {#MS_GNSS_OFF2_Z} @@ -34136,9 +36657,9 @@ MicroStrain GNSS lever arm offset 2 (Z). Lever arm offset (m) in the X direction for antenna 2. This will only be used if the device supports a dual antenna setup. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0.0 | |   | ### MS_GNSS_RATE_HZ (`INT32`) {#MS_GNSS_RATE_HZ} @@ -34147,9 +36668,9 @@ MicroStrain GNSS data rate. GNSS receiver 1 and 2 data rate (Hz). Valid rates: 0, 1 or 5. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 5 | | 5 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 5 | | 5 | |   | ### MS_GYRO_RANGE (`INT32`) {#MS_GYRO_RANGE} @@ -34158,9 +36679,9 @@ MicroStrain gyroscope range. -1 = Will not be configured, and will use the device default range. Ranges vary by device and map to integer codes. Check the device's [User Manual](https://www.hbkworld.com/en/products/transducers/inertial-sensors#!ref_microstrain.com) for supported ranges and set the corresponding integer. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | -1 | |   | ### MS_IMU_RATE_HZ (`INT32`) {#MS_IMU_RATE_HZ} @@ -34169,9 +36690,9 @@ MicroStrain IMU data rate. Accelerometer and Gyroscope data rate (Hz). Valid rates: 0 or any factor of 1000. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 1000 | | 500 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 1000 | | 500 | |   | ### MS_INT_HEAD_EN (`INT32`) {#MS_INT_HEAD_EN} @@ -34185,9 +36706,9 @@ If dual antennas are supported (CV7-GNSS/INS). The filter will be configured to - `0`: Disabled - `1`: Enabled -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### MS_INT_MAG_EN (`INT32`) {#MS_INT_MAG_EN} @@ -34200,9 +36721,9 @@ Toggles internal magnetometer aiding in the device filter. - `0`: Disabled - `1`: Enabled -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### MS_MAG_RATE_HZ (`INT32`) {#MS_MAG_RATE_HZ} @@ -34211,9 +36732,9 @@ MicroStrain magnetometer data rate. Magnetometer data rate (Hz). Valid rates: 0 or any factor of 1000. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 1000 | | 50 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 1000 | | 50 | |   | ### MS_MODE (`INT32`) {#MS_MODE} @@ -34227,9 +36748,9 @@ INS mode publishes the INS data to the vehicle topics to be used for navigation. - `0`: Sensor Mode - `1`: INS Mode -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### MS_OFLW_OFF_X (`FLOAT`) {#MS_OFLW_OFF_X} @@ -34238,9 +36759,9 @@ MicroStrain optical flow offset (X). Offset (m) in the X direction if an Optical Flow sensor is connected. Requires MS_OPT_FLOW_EN to be enabled to be used. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0.0 | |   | ### MS_OFLW_OFF_Y (`FLOAT`) {#MS_OFLW_OFF_Y} @@ -34249,9 +36770,9 @@ MicroStrain optical flow offset (Y). Offset (m) in the Y direction if an Optical Flow sensor is connected. Requires MS_OPT_FLOW_EN to be enabled to be used. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0.0 | |   | ### MS_OFLW_OFF_Z (`FLOAT`) {#MS_OFLW_OFF_Z} @@ -34260,9 +36781,9 @@ MicroStrain optical flow offset (Z). Offset (m) in the Z direction if an Optical Flow sensor is connected. Requires MS_OPT_FLOW_EN to be enabled to be used. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0.0 | |   | ### MS_OFLW_UNCERT (`FLOAT`) {#MS_OFLW_UNCERT} @@ -34272,9 +36793,9 @@ The 1-sigma uncertainty (in m/s) for the X and Y axes, which will remain constan The Z axis is not used for aiding. Requires MS_OPT_FLOW_EN to be enabled to be used. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0.1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0.1 | |   | ### MS_OPT_FLOW_EN (`INT32`) {#MS_OPT_FLOW_EN} @@ -34288,9 +36809,9 @@ The driver uses the body frame velocity from the optical flow sensor as the aidi - `0`: Disabled - `1`: Enabled -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### MS_SENSOR_PTCH (`FLOAT`) {#MS_SENSOR_PTCH} @@ -34299,9 +36820,9 @@ MicroStrain Sensor to Vehicle Transform (Pitch). The orientation of the device (Radians) with respect to the vehicle frame around the y axis. Requires MS_SVT_EN to be enabled to be used. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0.0 | |   | ### MS_SENSOR_ROLL (`FLOAT`) {#MS_SENSOR_ROLL} @@ -34310,9 +36831,9 @@ MicroStrain Sensor to vehicle transform (Roll). The orientation of the device (Radians) with respect to the vehicle frame around the x axis. Requires MS_SVT_EN to be enabled to be used. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0.0 | |   | ### MS_SENSOR_YAW (`FLOAT`) {#MS_SENSOR_YAW} @@ -34321,9 +36842,9 @@ MicroStrain Sensor to Vehicle Transform (Yaw). The orientation of the device (Radians) with respect to the vehicle frame around the z axis. Requires MS_SVT_EN to be enabled to be used. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0.0 | |   | ### MS_SVT_EN (`INT32`) {#MS_SVT_EN} @@ -34337,29 +36858,29 @@ The transform is described by MS_SENSOR_ROLL, MS_SENSOR_PITCH, MS_SENSOR_YAW. - `0`: Disabled - `1`: Enabled -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### PCF8583_MAGNET (`INT32`) {#PCF8583_MAGNET} PCF8583 rotorfreq (i2c) pulse count. -Nmumber of signals per rotation of actuator +Number of signals per rotation of actuator -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 1 | | | 2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 1 | | | 2 | |   | ### PCF8583_POOL (`INT32`) {#PCF8583_POOL} -PCF8583 rotorfreq (i2c) pool interval. +PCF8583 rotorfreq (i2c) poll interval. Determines how often the sensor is read out. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 1000000 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 1000000 | us |   | ### PCF8583_RESET (`INT32`) {#PCF8583_RESET} @@ -34370,9 +36891,9 @@ counter is able to store up to 6 digits reset of counter takes some time - measurement with reset has worse accuracy. 0 means reset counter after every measurement. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 500000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 500000 | |   | ### SBG_BAUDRATE (`INT32`) {#SBG_BAUDRATE} @@ -34381,9 +36902,9 @@ sbgECom driver baudrate. Baudrate used by default for serial communication between PX4 and SBG Systems INS through sbgECom driver. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 9600 | 921600 | | 921600 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 9600 | 921600 | | 921600 | |   | ### SBG_CONFIGURE_EN (`INT32`) {#SBG_CONFIGURE_EN} @@ -34392,9 +36913,9 @@ sbgECom driver INS configuration enable. Enable SBG Systems INS configuration through sbgECom driver on start. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------------ | ---- | -|   | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------------ | ---- | --------- | +|   | | | | Disabled (0) | |   | ### SBG_MODE (`INT32`) {#SBG_MODE} @@ -34404,6 +36925,7 @@ Modes available for sbgECom driver. In Sensors Only mode, use external IMU and magnetometer. In GNSS mode, use external GNSS in addition to sensors only mode. In INS mode, use external Kalman Filter in addition to GNSS mode. + In INS mode, requires EKF2_EN 0. Keeping both enabled can lead to an unexpected behavior and vehicle instability. @@ -34413,9 +36935,9 @@ can lead to an unexpected behavior and vehicle instability. - `1`: GNSS - `2`: INS (default) -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 2 | |   | ### SENS_AFBR_HYSTER (`INT32`) {#SENS_AFBR_HYSTER} @@ -34423,9 +36945,9 @@ AFBR Rangefinder Short/Long Range Threshold Hysteresis. This parameter defines the hysteresis for switching between short and long range mode. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1 | 10 | | 1 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1 | 10 | | 1 | m |   | ### SENS_AFBR_L_RATE (`INT32`) {#SENS_AFBR_L_RATE} @@ -34433,9 +36955,9 @@ AFBR Rangefinder Long Range Rate. This parameter defines measurement rate of the AFBR Rangefinder in long range mode. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1 | 100 | | 25 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1 | 100 | | 25 | |   | ### SENS_AFBR_MODE (`INT32`) {#SENS_AFBR_MODE} @@ -34450,9 +36972,9 @@ This parameter defines the mode of the AFBR Rangefinder. - `2`: High Speed Short Range Mode - `3`: High Speed Long Range Mode -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 3 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 3 | | 0 | |   | ### SENS_AFBR_S_RATE (`INT32`) {#SENS_AFBR_S_RATE} @@ -34460,9 +36982,9 @@ AFBR Rangefinder Short Range Rate. This parameter defines measurement rate of the AFBR Rangefinder in short range mode. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1 | 100 | | 50 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1 | 100 | | 50 | |   | ### SENS_AFBR_THRESH (`INT32`) {#SENS_AFBR_THRESH} @@ -34472,9 +36994,9 @@ This parameter defines the threshold for switching between short and long range The mode will switch from short to long range when the distance is greater than the threshold plus the hysteresis. The mode will switch from long to short range when the distance is less than the threshold minus the hysteresis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1 | 50 | | 4 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1 | 50 | | 4 | m |   | ### SENS_BAHRS_CFG (`INT32`) {#SENS_BAHRS_CFG} @@ -34497,17 +37019,17 @@ Configure on which serial port to run EULER-NAV BAHRS. - `301`: Wifi Port - `401`: EXT2 -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### SENS_BARO_QNH (`FLOAT`) {#SENS_BARO_QNH} QNH for barometer. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 500 | 1500 | | 1013.25 | hPa | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 500 | 1500 | | 1013.25 | hPa |   | ### SENS_BARO_RATE (`FLOAT`) {#SENS_BARO_RATE} @@ -34516,9 +37038,9 @@ Baro max rate. Barometric air data maximum publication rate. This is an upper bound, actual barometric data rate is still dependent on the sensor. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1 | 200 | | 20.0 | Hz | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1 | 200 | | 20.0 | Hz |   | ### SENS_BAR_AUTOCAL (`INT32`) {#SENS_BAR_AUTOCAL} @@ -34526,9 +37048,9 @@ Barometer auto calibration. Automatically calibrate barometer based on the GNSS height -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ----------- | ---- | -|   | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ----------- | ---- | --------- | +|   | | | | Enabled (1) | |   | ### SENS_BOARD_ROT (`INT32`) {#SENS_BOARD_ROT} @@ -34580,9 +37102,9 @@ This parameter defines the rotation of the FMU board relative to the platform. - `39`: Pitch 315° - `40`: Roll 90°, Pitch 315° -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | -1 | 40 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | -1 | 40 | | 0 | |   | ### SENS_BOARD_X_OFF (`FLOAT`) {#SENS_BOARD_X_OFF} @@ -34592,9 +37114,9 @@ Rotation from flight controller board to vehicle body frame. This parameter gets set during the "level horizon" calibration or can be set manually. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -45.0 | 45.0 | | 0.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -45.0 | 45.0 | | 0.0 | deg |   | ### SENS_BOARD_Y_OFF (`FLOAT`) {#SENS_BOARD_Y_OFF} @@ -34604,9 +37126,9 @@ Rotation from flight controller board to vehicle body frame. This parameter gets set during the "level horizon" calibration or can be set manually. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -45.0 | 45.0 | | 0.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -45.0 | 45.0 | | 0.0 | deg |   | ### SENS_BOARD_Z_OFF (`FLOAT`) {#SENS_BOARD_Z_OFF} @@ -34615,9 +37137,9 @@ Board rotation Z (yaw) offset. Rotation from flight controller board to vehicle body frame. Has to be set manually (not set by any calibration). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -45.0 | 45.0 | | 0.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -45.0 | 45.0 | | 0.0 | deg |   | ### SENS_CM8JL65_CFG (`INT32`) {#SENS_CM8JL65_CFG} @@ -34640,9 +37162,9 @@ Configure on which serial port to run Lanbao PSK-CM8JL65-CC5. - `301`: Wifi Port - `401`: EXT2 -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### SENS_CM8JL65_R_0 (`INT32`) {#SENS_CM8JL65_R_0} @@ -34659,9 +37181,9 @@ Distance Sensor Rotation as MAV_SENSOR_ORIENTATION enum - `24`: ROTATION_UPWARD_FACING - `25`: ROTATION_DOWNWARD_FACING -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 25 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 25 | |   | ### SENS_EN_ADIS164X (`INT32`) {#SENS_EN_ADIS164X} @@ -34672,17 +37194,17 @@ Analog Devices ADIS16448 IMU (external SPI). - `0`: Disabled - `1`: Enabled -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 1 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 1 | | 0 | |   | ### SENS_EN_ADIS165X (`INT32`) {#SENS_EN_ADIS165X} Analog Devices ADIS16507 IMU (external SPI). -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### SENS_EN_AGPSIM (`INT32`) {#SENS_EN_AGPSIM} @@ -34693,9 +37215,9 @@ Simulate Aux Global Position (AGP). - `0`: Disabled - `1`: Enabled -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 1 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 1 | | 0 | |   | ### SENS_EN_ARSPDSIM (`INT32`) {#SENS_EN_ARSPDSIM} @@ -34706,17 +37228,17 @@ Enable simulated airspeed sensor instance. - `0`: Disabled - `1`: Enabled -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 1 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 1 | | 0 | |   | ### SENS_EN_ASP5033 (`INT32`) {#SENS_EN_ASP5033} ASP5033 differential pressure sensor (external I2C). -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### SENS_EN_AUAVX (`INT32`) {#SENS_EN_AUAVX} @@ -34728,10 +37250,11 @@ Amphenol AUAV differential / absolute pressure sensor (external I2C). - `1`: AUAV L05D - `2`: AUAV L10D - `3`: AUAV L30D +- `4`: AUAV L60D -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### SENS_EN_BAROSIM (`INT32`) {#SENS_EN_BAROSIM} @@ -34742,25 +37265,25 @@ Enable simulated barometer sensor instance. - `0`: Disabled - `1`: Enabled -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 1 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 1 | | 0 | |   | ### SENS_EN_BATT (`INT32`) {#SENS_EN_BATT} SMBUS Smart battery driver BQ40Z50 and BQ40Z80. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### SENS_EN_ETSASPD (`INT32`) {#SENS_EN_ETSASPD} Eagle Tree airspeed sensor (external I2C). -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### SENS_EN_GPSSIM (`INT32`) {#SENS_EN_GPSSIM} @@ -34771,9 +37294,9 @@ Enable simulated GPS sinstance. - `0`: Disabled - `1`: Enabled -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 1 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 1 | | 0 | |   | ### SENS_EN_GRF_CFG (`INT32`) {#SENS_EN_GRF_CFG} @@ -34796,57 +37319,57 @@ Configure on which serial port to run Lightware GRF Rangefinder (serial). - `301`: Wifi Port - `401`: EXT2 -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### SENS_EN_INA220 (`INT32`) {#SENS_EN_INA220} Enable INA220 Power Monitor. -For systems a INA220 Power Monitor, this should be set to true +For systems with an INA220 Power Monitor, this should be set to true -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### SENS_EN_INA226 (`INT32`) {#SENS_EN_INA226} Enable INA226 Power Monitor. -For systems a INA226 Power Monitor, this should be set to true +For systems with an INA226 Power Monitor, this should be set to true -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### SENS_EN_INA228 (`INT32`) {#SENS_EN_INA228} Enable INA228 Power Monitor. -For systems a INA228 Power Monitor, this should be set to true +For systems with an INA228 Power Monitor, this should be set to true -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### SENS_EN_INA238 (`INT32`) {#SENS_EN_INA238} Enable INA238 Power Monitor. -For systems a INA238 Power Monitor, this should be set to true +For systems with an INA238 Power Monitor, this should be set to true -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### SENS_EN_IRLOCK (`INT32`) {#SENS_EN_IRLOCK} IR-LOCK Sensor (external I2C). -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### SENS_EN_LL40LS (`INT32`) {#SENS_EN_LL40LS} @@ -34858,9 +37381,9 @@ Lidar-Lite (LL40LS). - `1`: PWM - `2`: I2C -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 2 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 2 | | 0 | |   | ### SENS_EN_MAGSIM (`INT32`) {#SENS_EN_MAGSIM} @@ -34871,25 +37394,25 @@ Enable simulated magnetometer sensor instance. - `0`: Disabled - `1`: Enabled -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 1 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 1 | | 0 | |   | ### SENS_EN_MB12XX (`INT32`) {#SENS_EN_MB12XX} Maxbotix Sonar (mb12xx). -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### SENS_EN_MCP9808 (`INT32`) {#SENS_EN_MCP9808} Enable MCP9808 temperature sensor (external I2C). -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### SENS_EN_MPDT (`INT32`) {#SENS_EN_MPDT} @@ -34900,88 +37423,88 @@ Enable Mappydot rangefinder (i2c). - `0`: Disabled - `1`: Autodetect -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 1 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 1 | | 0 | |   | ### SENS_EN_MS4515 (`INT32`) {#SENS_EN_MS4515} TE MS4515 differential pressure sensor (external I2C). -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### SENS_EN_MS4525DO (`INT32`) {#SENS_EN_MS4525DO} TE MS4525DO differential pressure sensor (external I2C). -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### SENS_EN_MS5525DS (`INT32`) {#SENS_EN_MS5525DS} TE MS5525DSO differential pressure sensor (external I2C). -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### SENS_EN_PAA3905 (`INT32`) {#SENS_EN_PAA3905} PAA3905 Optical Flow. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### SENS_EN_PAW3902 (`INT32`) {#SENS_EN_PAW3902} PAW3902/PAW3903 Optical Flow. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### SENS_EN_PCF8583 (`INT32`) {#SENS_EN_PCF8583} -PCF8583 eneable driver. +PCF8583 enable driver. Run PCF8583 driver automatically **Values:** - `0`: Disabled -- `1`: Eneabled +- `1`: Enabled -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 1 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 1 | | 0 | |   | ### SENS_EN_PGA460 (`INT32`) {#SENS_EN_PGA460} PGA460 Ultrasonic driver (PGA460). -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### SENS_EN_PMW3901 (`INT32`) {#SENS_EN_PMW3901} PMW3901 Optical Flow. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### SENS_EN_PX4FLOW (`INT32`) {#SENS_EN_PX4FLOW} PX4 Flow Optical Flow. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### SENS_EN_SCH16T (`INT32`) {#SENS_EN_SCH16T} @@ -34992,17 +37515,17 @@ Murata SCH16T IMU (external SPI). - `0`: Disabled - `1`: Enabled -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 1 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 1 | | 0 | |   | ### SENS_EN_SDP3X (`INT32`) {#SENS_EN_SDP3X} Sensirion SDP3X differential pressure sensor (external I2C). -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### SENS_EN_SF0X (`INT32`) {#SENS_EN_SF0X} @@ -35019,9 +37542,9 @@ Lightware Laser Rangefinder hardware model (serial). - `7`: SF30/c - `8`: LW20/c -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 1 | |   | ### SENS_EN_SF1XX (`INT32`) {#SENS_EN_SF1XX} @@ -35040,9 +37563,9 @@ Lightware laser rangefinder (i2c). - `8`: GRF250 - `9`: GRF500 -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 9 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 9 | | 0 | |   | ### SENS_EN_SF45_CFG (`INT32`) {#SENS_EN_SF45_CFG} @@ -35065,49 +37588,49 @@ Configure on which serial port to run Lightware SF45 Rangefinder (serial). - `301`: Wifi Port - `401`: EXT2 -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### SENS_EN_SHT3X (`INT32`) {#SENS_EN_SHT3X} SHT3x temperature and hygrometer. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### SENS_EN_SPA06 (`INT32`) {#SENS_EN_SPA06} Goertek SPA06 Barometer (external I2C). -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### SENS_EN_SPL06 (`INT32`) {#SENS_EN_SPL06} Goertek SPL06 Barometer (external I2C). -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### SENS_EN_SR05 (`INT32`) {#SENS_EN_SR05} HY-SRF05 / HC-SR05. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### SENS_EN_TF02PRO (`INT32`) {#SENS_EN_TF02PRO} TF02 Pro Distance Sensor (i2c). -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### SENS_EN_THERMAL (`INT32`) {#SENS_EN_THERMAL} @@ -35119,9 +37642,9 @@ Thermal control of sensor temperature. - `0`: Thermal control off - `1`: Thermal control enabled -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | -1 | |   | ### SENS_EN_TMP102 (`INT32`) {#SENS_EN_TMP102} @@ -35129,9 +37652,9 @@ Enable TMP102. Enable the driver for the TMP102 temperature sensor -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### SENS_EN_TRANGER (`INT32`) {#SENS_EN_TRANGER} @@ -35146,25 +37669,25 @@ TeraRanger Rangefinder (i2c). - `4`: TREvo600Hz - `5`: TREvo3m -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 3 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 5 | | 0 | |   | ### SENS_EN_VL53L0X (`INT32`) {#SENS_EN_VL53L0X} VL53L0X Distance Sensor. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### SENS_EN_VL53L1X (`INT32`) {#SENS_EN_VL53L1X} VL53L1X Distance Sensor. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### SENS_EXT_I2C_PRB (`INT32`) {#SENS_EXT_I2C_PRB} @@ -35172,9 +37695,9 @@ External I2C probe. Probe for optional external I2C devices. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ----------- | ---- | -|   | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ----------- | ---- | --------- | +|   | | | | Enabled (1) | |   | ### SENS_FLOW_RATE (`FLOAT`) {#SENS_FLOW_RATE} @@ -35183,9 +37706,9 @@ Optical flow max rate. Optical flow data maximum publication rate. This is an upper bound, actual optical flow data rate is still dependent on the sensor. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 1 | 200 | | 70.0 | Hz | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 1 | 200 | | 70.0 | Hz |   | ### SENS_FLOW_ROT (`INT32`) {#SENS_FLOW_ROT} @@ -35205,17 +37728,17 @@ Zero rotation is defined as X on flow board pointing towards front of vehicle. - `6`: Yaw 270° - `7`: Yaw 315° -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### SENS_FLOW_SCALE (`FLOAT`) {#SENS_FLOW_SCALE} Optical flow scale factor. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.5 | 1.5 | | 1. | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.5 | 1.5 | | 1.0 | |   | ### SENS_FTX_CFG (`INT32`) {#SENS_FTX_CFG} @@ -35238,18 +37761,133 @@ Configure on which serial port to run FT Technologies Digital Wind Sensor (seria - `301`: Wifi Port - `401`: EXT2 -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | + +### SENS_GPS0_DELAY (`INT32`) {#SENS_GPS0_DELAY} + +GPS 0 measurement delay. + +GPS measurement delay relative to IMU measurements. +Matched to physical GPS receiver via SENS_GPS0_ID. +Only applied when the GPS driver does not provide its own +timestamp_sample correction. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 300 | | 110 | ms |   | + +### SENS_GPS0_ID (`INT32`) {#SENS_GPS0_ID} + +GPS 0 device ID. + +Device ID of the GPS receiver for antenna offset slot 0. +Set to 0 to disable this slot. When all slots are 0, offsets are +matched by uORB instance index (only reliable for serial GPS). + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | + +### SENS_GPS0_OFFX (`FLOAT`) {#SENS_GPS0_OFFX} + +GPS 0 antenna X position. + +Forward axis relative to vehicle centre of gravity. +Matched to physical GPS receiver via SENS_GPS0_ID. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | m |   | + +### SENS_GPS0_OFFY (`FLOAT`) {#SENS_GPS0_OFFY} + +GPS 0 antenna Y position. + +Right axis relative to vehicle centre of gravity. +Matched to physical GPS receiver via SENS_GPS0_ID. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | m |   | + +### SENS_GPS0_OFFZ (`FLOAT`) {#SENS_GPS0_OFFZ} + +GPS 0 antenna Z position. + +Down axis relative to vehicle centre of gravity. +Matched to physical GPS receiver via SENS_GPS0_ID. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | m |   | + +### SENS_GPS1_DELAY (`INT32`) {#SENS_GPS1_DELAY} + +GPS 1 measurement delay. + +GPS measurement delay relative to IMU measurements. +Matched to physical GPS receiver via SENS_GPS1_ID. +Only applied when the GPS driver does not provide its own +timestamp_sample correction. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 300 | | 110 | ms |   | + +### SENS_GPS1_ID (`INT32`) {#SENS_GPS1_ID} + +GPS 1 device ID. + +Device ID of the GPS receiver for antenna offset slot 1. +Set to 0 to disable this slot. When all slots are 0, offsets are +matched by uORB instance index (only reliable for serial GPS). + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | + +### SENS_GPS1_OFFX (`FLOAT`) {#SENS_GPS1_OFFX} + +GPS 1 antenna X position. + +Forward axis relative to vehicle centre of gravity. +Matched to physical GPS receiver via SENS_GPS1_ID. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | m |   | + +### SENS_GPS1_OFFY (`FLOAT`) {#SENS_GPS1_OFFY} + +GPS 1 antenna Y position. + +Right axis relative to vehicle centre of gravity. +Matched to physical GPS receiver via SENS_GPS1_ID. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | m |   | + +### SENS_GPS1_OFFZ (`FLOAT`) {#SENS_GPS1_OFFZ} + +GPS 1 antenna Z position. + +Down axis relative to vehicle centre of gravity. +Matched to physical GPS receiver via SENS_GPS1_ID. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | m |   | ### SENS_GPS_MASK (`INT32`) {#SENS_GPS_MASK} Multi GPS Blending Control Mask. -Set bits in the following positions to set which GPS accuracy metrics will be used to calculate the blending weight. Set to zero to disable and always used first GPS instance. -0 : Set to true to use speed accuracy -1 : Set to true to use horizontal position accuracy -2 : Set to true to use vertical position accuracy +Set bits in the following positions to set which GPS accuracy metrics will +be used to calculate the blending weight. Set to zero to disable and always +used first GPS instance. **Bitmask:** @@ -35257,9 +37895,9 @@ Set bits in the following positions to set which GPS accuracy metrics will be us - `1`: use hpos accuracy - `2`: use vpos accuracy -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 7 | | 7 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 7 | | 7 | |   | ### SENS_GPS_PRIME (`INT32`) {#SENS_GPS_PRIME} @@ -35269,26 +37907,26 @@ When no blending is active, this defines the preferred GPS receiver instance. The GPS selection logic waits until the primary receiver is available to send data to the EKF even if a secondary instance is already available. The secondary instance is then only used if the primary one times out. -Accepted values: --1 : Auto (equal priority for all instances) -0 : Main serial GPS instance -1 : Secondary serial GPS instance -2-127 : UAVCAN module node ID + +To select a DroneCAN GPS, set this to the node ID. + This parameter has no effect if blending is active. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 127 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 127 | | 0 | |   | ### SENS_GPS_TAU (`FLOAT`) {#SENS_GPS_TAU} Multi GPS Blending Time Constant. -Sets the longest time constant that will be applied to the calculation of GPS position and height offsets used to correct data from multiple GPS data for steady state position differences. +Sets the longest time constant that will be applied to the calculation of GPS +position and height offsets used to correct data from multiple GPS data for +steady state position differences. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1.0 | 100.0 | | 10.0 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1.0 | 100.0 | | 10.0 | s |   | ### SENS_ILABS_CFG (`INT32`) {#SENS_ILABS_CFG} @@ -35311,9 +37949,9 @@ Configure on which serial port to run InertialLabs. - `301`: Wifi Port - `401`: EXT2 -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### SENS_IMU_AUTOCAL (`INT32`) {#SENS_IMU_AUTOCAL} @@ -35321,9 +37959,9 @@ IMU auto calibration. Automatically initialize IMU (accel/gyro) calibration from bias estimates if available. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ----------- | ---- | -|   | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ----------- | ---- | --------- | +|   | | | | Enabled (1) | |   | ### SENS_IMU_CLPNOTI (`INT32`) {#SENS_IMU_CLPNOTI} @@ -35331,9 +37969,9 @@ IMU notify clipping. Notify the user if the IMU is clipping -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ----------- | ---- | -|   | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ----------- | ---- | --------- | +|   | | | | Enabled (1) | |   | ### SENS_IMU_MODE (`INT32`) {#SENS_IMU_MODE} @@ -35344,41 +37982,9 @@ Sensors hub IMU mode. - `0`: Disabled - `1`: Publish primary IMU selection -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 1 | - -### SENS_IMU_TEMP (`FLOAT`) {#SENS_IMU_TEMP} - -Target IMU temperature. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ------- | -|   | 0 | 85.0 | | 55.0 | celcius | - -### SENS_IMU_TEMP_FF (`FLOAT`) {#SENS_IMU_TEMP_FF} - -IMU heater controller feedforward value. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1.0 | | 0.05 | % | - -### SENS_IMU_TEMP_I (`FLOAT`) {#SENS_IMU_TEMP_I} - -IMU heater controller integrator gain value. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1.0 | | 0.025 | us/C | - -### SENS_IMU_TEMP_P (`FLOAT`) {#SENS_IMU_TEMP_P} - -IMU heater controller proportional gain value. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 2.0 | | 1.0 | us/C | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 1 | |   | ### SENS_INT_BARO_EN (`INT32`) {#SENS_INT_BARO_EN} @@ -35386,9 +37992,9 @@ Enable internal barometers. For systems with an external barometer, this should be set to false to make sure that the external is used. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ----------- | ---- | -| ✓ | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ----------- | ---- | --------- | +| ✓ | | | | Enabled (1) | |   | ### SENS_LEDDAR1_CFG (`INT32`) {#SENS_LEDDAR1_CFG} @@ -35411,9 +38017,9 @@ Configure on which serial port to run LeddarOne Rangefinder. - `301`: Wifi Port - `401`: EXT2 -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### SENS_MAG_AUTOCAL (`INT32`) {#SENS_MAG_AUTOCAL} @@ -35421,9 +38027,9 @@ Magnetometer auto calibration. Automatically initialize magnetometer calibration from bias estimate if available. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ----------- | ---- | -|   | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ----------- | ---- | --------- | +|   | | | | Enabled (1) | |   | ### SENS_MAG_AUTOROT (`INT32`) {#SENS_MAG_AUTOROT} @@ -35431,9 +38037,9 @@ Automatically set external rotations. During calibration attempt to automatically determine the rotation of external magnetometers. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ----------- | ---- | -|   | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ----------- | ---- | --------- | +|   | | | | Enabled (1) | |   | ### SENS_MAG_MODE (`INT32`) {#SENS_MAG_MODE} @@ -35444,9 +38050,9 @@ Sensors hub mag mode. - `0`: Publish all magnetometers - `1`: Publish primary magnetometer -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 1 | |   | ### SENS_MAG_RATE (`FLOAT`) {#SENS_MAG_RATE} @@ -35455,9 +38061,9 @@ Magnetometer max rate. Magnetometer data maximum publication rate. This is an upper bound, actual magnetometer data rate is still dependent on the sensor. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 1 | 200 | | 15.0 | Hz | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 1 | 200 | | 15.0 | Hz |   | ### SENS_MAG_SIDES (`INT32`) {#SENS_MAG_SIDES} @@ -35466,6 +38072,7 @@ Bitfield selecting mag sides for calibration. If set to two side calibration, only the offsets are estimated, the scale calibration is left unchanged. Thus an initial six side calibration is recommended. + Bits: ORIENTATION_TAIL_DOWN = 1 ORIENTATION_NOSE_DOWN = 2 @@ -35480,9 +38087,9 @@ ORIENTATION_RIGHTSIDE_UP = 32 - `38`: Three side calibration - `63`: Six side calibration -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 34 | 63 | | 63 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 34 | 63 | | 63 | |   | ### SENS_MB12_0_ROT (`INT32`) {#SENS_MB12_0_ROT} @@ -35501,9 +38108,9 @@ This parameter defines the rotation of the sensor relative to the platform. - `6`: Yaw 270° - `7`: Yaw 315° -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 7 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 7 | | 0 | |   | ### SENS_MB12_10_ROT (`INT32`) {#SENS_MB12_10_ROT} @@ -35522,9 +38129,9 @@ This parameter defines the rotation of the sensor relative to the platform. - `6`: Yaw 270° - `7`: Yaw 315° -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 7 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 7 | | 0 | |   | ### SENS_MB12_11_ROT (`INT32`) {#SENS_MB12_11_ROT} @@ -35543,9 +38150,9 @@ This parameter defines the rotation of the sensor relative to the platform. - `6`: Yaw 270° - `7`: Yaw 315° -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 7 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 7 | | 0 | |   | ### SENS_MB12_1_ROT (`INT32`) {#SENS_MB12_1_ROT} @@ -35564,9 +38171,9 @@ This parameter defines the rotation of the sensor relative to the platform. - `6`: Yaw 270° - `7`: Yaw 315° -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 7 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 7 | | 0 | |   | ### SENS_MB12_2_ROT (`INT32`) {#SENS_MB12_2_ROT} @@ -35585,9 +38192,9 @@ This parameter defines the rotation of the sensor relative to the platform. - `6`: Yaw 270° - `7`: Yaw 315° -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 7 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 7 | | 0 | |   | ### SENS_MB12_3_ROT (`INT32`) {#SENS_MB12_3_ROT} @@ -35606,9 +38213,9 @@ This parameter defines the rotation of the sensor relative to the platform. - `6`: Yaw 270° - `7`: Yaw 315° -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 7 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 7 | | 0 | |   | ### SENS_MB12_4_ROT (`INT32`) {#SENS_MB12_4_ROT} @@ -35627,9 +38234,9 @@ This parameter defines the rotation of the sensor relative to the platform. - `6`: Yaw 270° - `7`: Yaw 315° -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 7 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 7 | | 0 | |   | ### SENS_MB12_5_ROT (`INT32`) {#SENS_MB12_5_ROT} @@ -35648,9 +38255,9 @@ This parameter defines the rotation of the sensor relative to the platform. - `6`: Yaw 270° - `7`: Yaw 315° -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 7 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 7 | | 0 | |   | ### SENS_MB12_6_ROT (`INT32`) {#SENS_MB12_6_ROT} @@ -35669,9 +38276,9 @@ This parameter defines the rotation of the sensor relative to the platform. - `6`: Yaw 270° - `7`: Yaw 315° -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 7 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 7 | | 0 | |   | ### SENS_MB12_7_ROT (`INT32`) {#SENS_MB12_7_ROT} @@ -35690,9 +38297,9 @@ This parameter defines the rotation of the sensor relative to the platform. - `6`: Yaw 270° - `7`: Yaw 315° -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 7 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 7 | | 0 | |   | ### SENS_MB12_8_ROT (`INT32`) {#SENS_MB12_8_ROT} @@ -35711,9 +38318,9 @@ This parameter defines the rotation of the sensor relative to the platform. - `6`: Yaw 270° - `7`: Yaw 315° -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 7 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 7 | | 0 | |   | ### SENS_MB12_9_ROT (`INT32`) {#SENS_MB12_9_ROT} @@ -35732,9 +38339,9 @@ This parameter defines the rotation of the sensor relative to the platform. - `6`: Yaw 270° - `7`: Yaw 315° -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 7 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 7 | | 0 | |   | ### SENS_MPDT0_ROT (`INT32`) {#SENS_MPDT0_ROT} @@ -35753,9 +38360,9 @@ This parameter defines the rotation of the Mappydot sensor relative to the platf - `6`: Yaw 270° - `7`: Yaw 315° -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 7 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 7 | | 0 | |   | ### SENS_MPDT10_ROT (`INT32`) {#SENS_MPDT10_ROT} @@ -35774,9 +38381,9 @@ This parameter defines the rotation of the Mappydot sensor relative to the platf - `6`: Yaw 270° - `7`: Yaw 315° -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 7 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 7 | | 0 | |   | ### SENS_MPDT11_ROT (`INT32`) {#SENS_MPDT11_ROT} @@ -35795,9 +38402,9 @@ This parameter defines the rotation of the Mappydot sensor relative to the platf - `6`: Yaw 270° - `7`: Yaw 315° -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 7 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 7 | | 0 | |   | ### SENS_MPDT1_ROT (`INT32`) {#SENS_MPDT1_ROT} @@ -35816,9 +38423,9 @@ This parameter defines the rotation of the Mappydot sensor relative to the platf - `6`: Yaw 270° - `7`: Yaw 315° -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 7 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 7 | | 0 | |   | ### SENS_MPDT2_ROT (`INT32`) {#SENS_MPDT2_ROT} @@ -35837,9 +38444,9 @@ This parameter defines the rotation of the Mappydot sensor relative to the platf - `6`: Yaw 270° - `7`: Yaw 315° -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 7 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 7 | | 0 | |   | ### SENS_MPDT3_ROT (`INT32`) {#SENS_MPDT3_ROT} @@ -35858,9 +38465,9 @@ This parameter defines the rotation of the Mappydot sensor relative to the platf - `6`: Yaw 270° - `7`: Yaw 315° -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 7 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 7 | | 0 | |   | ### SENS_MPDT4_ROT (`INT32`) {#SENS_MPDT4_ROT} @@ -35879,9 +38486,9 @@ This parameter defines the rotation of the Mappydot sensor relative to the platf - `6`: Yaw 270° - `7`: Yaw 315° -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 7 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 7 | | 0 | |   | ### SENS_MPDT5_ROT (`INT32`) {#SENS_MPDT5_ROT} @@ -35900,9 +38507,9 @@ This parameter defines the rotation of the Mappydot sensor relative to the platf - `6`: Yaw 270° - `7`: Yaw 315° -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 7 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 7 | | 0 | |   | ### SENS_MPDT6_ROT (`INT32`) {#SENS_MPDT6_ROT} @@ -35921,9 +38528,9 @@ This parameter defines the rotation of the Mappydot sensor relative to the platf - `6`: Yaw 270° - `7`: Yaw 315° -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 7 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 7 | | 0 | |   | ### SENS_MPDT7_ROT (`INT32`) {#SENS_MPDT7_ROT} @@ -35942,9 +38549,9 @@ This parameter defines the rotation of the Mappydot sensor relative to the platf - `6`: Yaw 270° - `7`: Yaw 315° -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 7 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 7 | | 0 | |   | ### SENS_MPDT8_ROT (`INT32`) {#SENS_MPDT8_ROT} @@ -35963,9 +38570,9 @@ This parameter defines the rotation of the Mappydot sensor relative to the platf - `6`: Yaw 270° - `7`: Yaw 315° -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 7 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 7 | | 0 | |   | ### SENS_MPDT9_ROT (`INT32`) {#SENS_MPDT9_ROT} @@ -35984,9 +38591,9 @@ This parameter defines the rotation of the Mappydot sensor relative to the platf - `6`: Yaw 270° - `7`: Yaw 315° -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 7 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 7 | | 0 | |   | ### SENS_MS_CFG (`INT32`) {#SENS_MS_CFG} @@ -36009,9 +38616,9 @@ Configure on which serial port to run MICROSTRAIN. - `301`: Wifi Port - `401`: EXT2 -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### SENS_OR_ADIS164X (`INT32`) {#SENS_OR_ADIS164X} @@ -36022,9 +38629,9 @@ Analog Devices ADIS16448 IMU Orientation(external SPI). - `0`: ROTATION_NONE - `4`: ROTATION_YAW_180 -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 101 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 101 | | 0 | |   | ### SENS_SBG_CFG (`INT32`) {#SENS_SBG_CFG} @@ -36047,9 +38654,9 @@ Configure on which serial port to run sbgECom. - `301`: Wifi Port - `401`: EXT2 -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### SENS_SF0X_CFG (`INT32`) {#SENS_SF0X_CFG} @@ -36072,17 +38679,9 @@ Configure on which serial port to run Lightware Laser Rangefinder (serial). - `301`: Wifi Port - `401`: EXT2 -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | - -### SENS_TEMP_ID (`INT32`) {#SENS_TEMP_ID} - -Target IMU device ID to regulate temperature. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### SENS_TFLOW_CFG (`INT32`) {#SENS_TFLOW_CFG} @@ -36105,9 +38704,9 @@ Configure on which serial port to run ThoneFlow-3901U optical flow sensor. - `301`: Wifi Port - `401`: EXT2 -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### SENS_TFMINI_CFG (`INT32`) {#SENS_TFMINI_CFG} @@ -36130,9 +38729,9 @@ Configure on which serial port to run Benewake TFmini Rangefinder. - `301`: Wifi Port - `401`: EXT2 -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### SENS_TFMINI_HW (`INT32`) {#SENS_TFMINI_HW} @@ -36146,9 +38745,9 @@ Models differ in range and FoV. - `2`: ISTRA24 - `3`: ISTRA24_100m -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 1 | 3 | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 1 | 3 | | 1 | |   | ### SENS_ULAND_CFG (`INT32`) {#SENS_ULAND_CFG} @@ -36171,9 +38770,9 @@ Configure on which serial port to run uLanding Radar. - `301`: Wifi Port - `401`: EXT2 -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### SENS_VN_CFG (`INT32`) {#SENS_VN_CFG} @@ -36196,9 +38795,9 @@ Configure on which serial port to run VectorNav (VN-100, VN-200, VN-300). - `301`: Wifi Port - `401`: EXT2 -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### SF1XX_ROT (`INT32`) {#SF1XX_ROT} @@ -36216,9 +38815,9 @@ Applies to all models supported by SENS_EN_SF1XX. - `24`: Upward - `25`: Downward -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 25 | | 25 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 25 | | 25 | |   | ### SF45_ORIENT_CFG (`INT32`) {#SF45_ORIENT_CFG} @@ -36231,9 +38830,9 @@ The SF45 mounted facing upward or downward on the frame - `24`: Rotation upward - `25`: Rotation downward -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 24 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 24 | |   | ### SF45_UPDATE_CFG (`INT32`) {#SF45_UPDATE_CFG} @@ -36256,9 +38855,9 @@ The SF45 sets the update rate in Hz to allow greater resolution - `11`: 2500hz - `12`: 5000hz -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 5 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 5 | |   | ### SF45_YAW_CFG (`INT32`) {#SF45_YAW_CFG} @@ -36273,22 +38872,9 @@ The usb port on the sensor indicates 180deg, opposite usb is forward facing - `4`: Rotation backward - `6`: Rotation left -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | - -### SIM_ARSPD_FAIL (`INT32`) {#SIM_ARSPD_FAIL} - -Dynamically simulate failure of airspeed sensor instance. - -**Values:** - -- `0`: Disabled -- `1`: Enabled - -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 1 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### VN_MODE (`INT32`) {#VN_MODE} @@ -36301,25 +38887,25 @@ INS or sensors - `0`: Sensors Only (default) - `1`: INS -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### VOXLPM_SHUNT_BAT (`FLOAT`) {#VOXLPM_SHUNT_BAT} VOXL Power Monitor Shunt, Battery. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | ----------- | -------- | ---------- | ------- | ---- | -| ✓ | 0.000000001 | 0.1 | .000000001 | 0.00063 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 1e-09 | 0.1 | 1e-09 | 0.00063 | |   | ### VOXLPM_SHUNT_REG (`FLOAT`) {#VOXLPM_SHUNT_REG} VOXL Power Monitor Shunt, Regulator. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | ----------- | -------- | ---------- | ------- | ---- | -| ✓ | 0.000000001 | 0.1 | .000000001 | 0.0056 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 1e-09 | 0.1 | 1e-09 | 0.0056 | |   | ## Septentrio @@ -36331,15 +38917,16 @@ By default, the receiver is automatically configured. Sometimes it may be used f If the offered parameters aren't sufficient, this parameter can be disabled to have full control of the receiver configuration. A good way to use this is to enable automatic configuration, let the receiver be configured, and then disable it to make manual adjustments. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ----------- | ---- | -| ✓ | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ----------- | ---- | --------- | +| ✓ | | | | Enabled (1) | |   | ### SEP_CONST_USAGE (`INT32`) {#SEP_CONST_USAGE} Usage of different constellations. Choice of which constellations the receiver should use for PVT computation. + When this is 0, the constellation usage isn't changed. **Bitmask:** @@ -36350,9 +38937,9 @@ When this is 0, the constellation usage isn't changed. - `3`: SBAS - `4`: BeiDou -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 63 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 63 | | 0 | |   | ### SEP_DUMP_COMM (`INT32`) {#SEP_DUMP_COMM} @@ -36368,9 +38955,9 @@ For example, "To receiver" will log all commands and corrections sent by the dri - `2`: To receiver - `3`: Both -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 3 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 3 | | 0 | |   | ### SEP_HARDW_SETUP (`INT32`) {#SEP_HARDW_SETUP} @@ -36384,9 +38971,9 @@ Setup and expected use of the hardware. - `0`: Default - `1`: Moving base -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 1 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 1 | | 0 | |   | ### SEP_LOG_FORCE (`INT32`) {#SEP_LOG_FORCE} @@ -36394,9 +38981,9 @@ Whether to overwrite or add to existing logging. When the receiver is already set up to log data, this decides whether extra logged data should be added or overwrite existing data. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### SEP_LOG_HZ (`INT32`) {#SEP_LOG_HZ} @@ -36418,9 +39005,9 @@ Select the frequency at which the connected receiver should log data to its inte - `9`: 25 Hz - `10`: 50 Hz -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 10 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 10 | | 0 | |   | ### SEP_LOG_LEVEL (`INT32`) {#SEP_LOG_LEVEL} @@ -36435,9 +39022,9 @@ Select the level of detail that needs to be logged by the receiver. - `2`: Default - `3`: Full -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 3 | | 2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 3 | | 2 | |   | ### SEP_OUTP_HZ (`INT32`) {#SEP_OUTP_HZ} @@ -36452,23 +39039,24 @@ The output frequency of the main SBF blocks needed for PVT information. - `2`: 20 Hz - `3`: 25 Hz -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 3 | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 3 | | 1 | |   | ### SEP_PITCH_OFFS (`FLOAT`) {#SEP_PITCH_OFFS} Pitch offset for dual antenna GPS. Vertical offsets can be compensated for by adjusting the Pitch offset. + Note that this can be interpreted as the "roll" angle in case the antennas are aligned along the perpendicular axis. This occurs in situations where the two antenna ARPs may not be exactly at the same height in the vehicle reference frame. Since pitch is defined as the right-handed rotation about the vehicle Y axis, a situation where the main antenna is mounted lower than the aux antenna (assuming the default antenna setup) will result in a positive pitch. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | -90 | 90 | | 0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | -90 | 90 | | 0 | deg |   | ### SEP_PORT1_CFG (`INT32`) {#SEP_PORT1_CFG} @@ -36491,9 +39079,9 @@ Configure on which serial port to run GPS Port. - `301`: Wifi Port - `401`: EXT2 -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### SEP_PORT2_CFG (`INT32`) {#SEP_PORT2_CFG} @@ -36516,9 +39104,9 @@ Configure on which serial port to run Secondary GPS port. - `301`: Wifi Port - `401`: EXT2 -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### SEP_SAT_INFO (`INT32`) {#SEP_SAT_INFO} @@ -36526,46 +39114,51 @@ Enable sat info. Enable publication of satellite info (ORB_ID(satellite_info)) if possible. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### SEP_STREAM_LOG (`INT32`) {#SEP_STREAM_LOG} Logging stream used during automatic configuration. The stream the autopilot sets up on the receiver to output the logging data. + Set this to another value if the default stream is already used for another purpose. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 1 | 10 | | 2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 1 | 10 | | 2 | |   | ### SEP_STREAM_MAIN (`INT32`) {#SEP_STREAM_MAIN} Main stream used during automatic configuration. The stream the autopilot sets up on the receiver to output the main data. + Set this to another value if the default stream is already used for another purpose. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 1 | 10 | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 1 | 10 | | 1 | |   | ### SEP_YAW_OFFS (`FLOAT`) {#SEP_YAW_OFFS} Heading/Yaw offset for dual antenna GPS. Heading offset angle for dual antenna GPS setups that support heading estimation. + Set this to 0 if the antennas are parallel to the forward-facing direction of the vehicle and the rover antenna is in front. + The offset angle increases clockwise. + Set this to 90 if the rover antenna is placed on the right side of the vehicle and the moving base antenna is on the left side. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | -360 | 360 | | 0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | -360 | 360 | | 0 | deg |   | ## Serial @@ -36574,6 +39167,7 @@ right side of the vehicle and the moving base antenna is on the left side. Serial Configuration for CRSF RC Input Driver. Configure on which serial port to run CRSF RC Input Driver. + Crossfire RC (CRSF) driver. **Values:** @@ -36591,15 +39185,16 @@ Crossfire RC (CRSF) driver. - `301`: Wifi Port - `401`: EXT2 -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### RC_DSM_PRT_CFG (`INT32`) {#RC_DSM_PRT_CFG} Serial Configuration for DSM RC Input Driver. Configure on which serial port to run DSM RC Input Driver. + DSM RC (Spektrum) driver. **Values:** @@ -36617,15 +39212,16 @@ DSM RC (Spektrum) driver. - `301`: Wifi Port - `401`: EXT2 -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### RC_GHST_PRT_CFG (`INT32`) {#RC_GHST_PRT_CFG} Serial Configuration for GHST RC Input Driver. Configure on which serial port to run GHST RC Input Driver. + Ghost (GHST) RC driver. **Values:** @@ -36643,15 +39239,16 @@ Ghost (GHST) RC driver. - `301`: Wifi Port - `401`: EXT2 -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### RC_PORT_CONFIG (`INT32`) {#RC_PORT_CONFIG} Serial Configuration for RC Input Driver. Configure on which serial port to run RC Input Driver. + Setting this to 'Disabled' will use a board-specific default port for RC input. **Values:** @@ -36669,15 +39266,16 @@ Setting this to 'Disabled' will use a board-specific default port for RC input. - `301`: Wifi Port - `401`: EXT2 -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 300 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 300 | |   | ### RC_SBUS_PRT_CFG (`INT32`) {#RC_SBUS_PRT_CFG} Serial Configuration for SBUS RC Input Driver. Configure on which serial port to run SBUS RC Input Driver. + SBUS RC driver. **Values:** @@ -36695,15 +39293,16 @@ SBUS RC driver. - `301`: Wifi Port - `401`: EXT2 -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### SER_EXT2_BAUD (`INT32`) {#SER_EXT2_BAUD} Baudrate for the EXT2 Serial Port. Configure the Baudrate for the EXT2 Serial Port. + Note: certain drivers such as the GPS can determine the Baudrate automatically. **Values:** @@ -36735,15 +39334,16 @@ Note: certain drivers such as the GPS can determine the Baudrate automatically. - `2000000`: 2000000 8N1 - `3000000`: 3000000 8N1 -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 57600 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 57600 | |   | ### SER_GPS1_BAUD (`INT32`) {#SER_GPS1_BAUD} Baudrate for the GPS 1 Serial Port. Configure the Baudrate for the GPS 1 Serial Port. + Note: certain drivers such as the GPS can determine the Baudrate automatically. **Values:** @@ -36775,15 +39375,16 @@ Note: certain drivers such as the GPS can determine the Baudrate automatically. - `2000000`: 2000000 8N1 - `3000000`: 3000000 8N1 -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### SER_GPS2_BAUD (`INT32`) {#SER_GPS2_BAUD} Baudrate for the GPS 2 Serial Port. Configure the Baudrate for the GPS 2 Serial Port. + Note: certain drivers such as the GPS can determine the Baudrate automatically. **Values:** @@ -36815,15 +39416,16 @@ Note: certain drivers such as the GPS can determine the Baudrate automatically. - `2000000`: 2000000 8N1 - `3000000`: 3000000 8N1 -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### SER_GPS3_BAUD (`INT32`) {#SER_GPS3_BAUD} Baudrate for the GPS 3 Serial Port. Configure the Baudrate for the GPS 3 Serial Port. + Note: certain drivers such as the GPS can determine the Baudrate automatically. **Values:** @@ -36855,9 +39457,9 @@ Note: certain drivers such as the GPS can determine the Baudrate automatically. - `2000000`: 2000000 8N1 - `3000000`: 3000000 8N1 -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### SER_MXS_BAUD (`INT32`) {#SER_MXS_BAUD} @@ -36879,15 +39481,16 @@ Baudrate for the Serial Port connected to the MXS Transponder - `9`: 460800 - `10`: 921600 -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 10 | | 5 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 10 | | 5 | |   | ### SER_RC_BAUD (`INT32`) {#SER_RC_BAUD} Baudrate for the Radio Controller Serial Port. Configure the Baudrate for the Radio Controller Serial Port. + Note: certain drivers such as the GPS can determine the Baudrate automatically. **Values:** @@ -36919,15 +39522,16 @@ Note: certain drivers such as the GPS can determine the Baudrate automatically. - `2000000`: 2000000 8N1 - `3000000`: 3000000 8N1 -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### SER_TEL1_BAUD (`INT32`) {#SER_TEL1_BAUD} Baudrate for the TELEM 1 Serial Port. Configure the Baudrate for the TELEM 1 Serial Port. + Note: certain drivers such as the GPS can determine the Baudrate automatically. **Values:** @@ -36959,15 +39563,16 @@ Note: certain drivers such as the GPS can determine the Baudrate automatically. - `2000000`: 2000000 8N1 - `3000000`: 3000000 8N1 -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 57600 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 57600 | |   | ### SER_TEL2_BAUD (`INT32`) {#SER_TEL2_BAUD} Baudrate for the TELEM 2 Serial Port. Configure the Baudrate for the TELEM 2 Serial Port. + Note: certain drivers such as the GPS can determine the Baudrate automatically. **Values:** @@ -36999,15 +39604,16 @@ Note: certain drivers such as the GPS can determine the Baudrate automatically. - `2000000`: 2000000 8N1 - `3000000`: 3000000 8N1 -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 921600 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 921600 | |   | ### SER_TEL3_BAUD (`INT32`) {#SER_TEL3_BAUD} Baudrate for the TELEM 3 Serial Port. Configure the Baudrate for the TELEM 3 Serial Port. + Note: certain drivers such as the GPS can determine the Baudrate automatically. **Values:** @@ -37039,15 +39645,16 @@ Note: certain drivers such as the GPS can determine the Baudrate automatically. - `2000000`: 2000000 8N1 - `3000000`: 3000000 8N1 -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 57600 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 57600 | |   | ### SER_TEL4_BAUD (`INT32`) {#SER_TEL4_BAUD} Baudrate for the TELEM/SERIAL 4 Serial Port. Configure the Baudrate for the TELEM/SERIAL 4 Serial Port. + Note: certain drivers such as the GPS can determine the Baudrate automatically. **Values:** @@ -37079,15 +39686,16 @@ Note: certain drivers such as the GPS can determine the Baudrate automatically. - `2000000`: 2000000 8N1 - `3000000`: 3000000 8N1 -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 57600 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 57600 | |   | ### SER_URT6_BAUD (`INT32`) {#SER_URT6_BAUD} Baudrate for the UART 6 Serial Port. Configure the Baudrate for the UART 6 Serial Port. + Note: certain drivers such as the GPS can determine the Baudrate automatically. **Values:** @@ -37119,15 +39727,16 @@ Note: certain drivers such as the GPS can determine the Baudrate automatically. - `2000000`: 2000000 8N1 - `3000000`: 3000000 8N1 -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 57600 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 57600 | |   | ### SER_WIFI_BAUD (`INT32`) {#SER_WIFI_BAUD} Baudrate for the Wifi Port Serial Port. Configure the Baudrate for the Wifi Port Serial Port. + Note: certain drivers such as the GPS can determine the Baudrate automatically. **Values:** @@ -37159,9 +39768,9 @@ Note: certain drivers such as the GPS can determine the Baudrate automatically. - `2000000`: 2000000 8N1 - `3000000`: 3000000 8N1 -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 1 | |   | ## Simulation @@ -37174,9 +39783,9 @@ Enable airspeed sensor in Gazebo bridge. - `0`: Disabled - `1`: Enabled -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ----------- | ---- | -| ✓ | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 1 | |   | ### SIM_GZ_EN_BARO (`INT32`) {#SIM_GZ_EN_BARO} @@ -37187,9 +39796,9 @@ Enable barometer/air pressure sensor in Gazebo bridge. - `0`: Disabled - `1`: Enabled -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ----------- | ---- | -| ✓ | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 1 | |   | ### SIM_GZ_EN_FLOW (`INT32`) {#SIM_GZ_EN_FLOW} @@ -37200,9 +39809,9 @@ Enable optical flow sensor in Gazebo bridge. - `0`: Disabled - `1`: Enabled -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ----------- | ---- | -| ✓ | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 1 | |   | ### SIM_GZ_EN_GPS (`INT32`) {#SIM_GZ_EN_GPS} @@ -37213,9 +39822,9 @@ Enable GPS/NavSat sensor in Gazebo bridge. - `0`: Disabled - `1`: Enabled -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ----------- | ---- | -| ✓ | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 1 | |   | ### SIM_GZ_EN_LIDAR (`INT32`) {#SIM_GZ_EN_LIDAR} @@ -37226,9 +39835,9 @@ Enable laser/lidar sensors in Gazebo bridge. - `0`: Disabled - `1`: Enabled -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ----------- | ---- | -| ✓ | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 1 | |   | ### SIM_GZ_EN_ODOM (`INT32`) {#SIM_GZ_EN_ODOM} @@ -37239,9 +39848,9 @@ Enable odometry in Gazebo bridge. - `0`: Disabled - `1`: Enabled -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ----------- | ---- | -| ✓ | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 1 | |   | ## Simulation In Hardware @@ -37249,17 +39858,17 @@ Enable odometry in Gazebo bridge. distance sensor maximum range. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 1000.0 | 0.01 | 100.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 1000.0 | 0.01 | 100.0 | m |   | ### SIH_DISTSNSR_MIN (`FLOAT`) {#SIH_DISTSNSR_MIN} distance sensor minimum range. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 10.0 | 0.01 | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 10.0 | 0.01 | 0.0 | m |   | ### SIH_DISTSNSR_OVR (`FLOAT`) {#SIH_DISTSNSR_OVR} @@ -37267,9 +39876,107 @@ if >= 0 the distance sensor measures will be overridden by this value. Absolute value superior to 10000 will disable distance sensor -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | -1.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | -1.0 | m |   | + +### SIH_F_CP0 (`FLOAT`) {#SIH_F_CP0} + +Forward thruster static power coefficient. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | | | 0.0 | |   | + +### SIH_F_CP1 (`FLOAT`) {#SIH_F_CP1} + +Forward thruster power coefficient 1. + +CP(J) = CP0 + CP1*J + CP2*J^2 + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | + +### SIH_F_CP2 (`FLOAT`) {#SIH_F_CP2} + +Forward thruster power coefficient 2. + +CP(J) = CP0 + CP1*J + CP2*J^2 + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | 0.0 | | 0.0 | |   | + +### SIH_F_CT0 (`FLOAT`) {#SIH_F_CT0} + +Forward thruster static thrust coefficient. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | | | 0.0 | |   | + +### SIH_F_CT1 (`FLOAT`) {#SIH_F_CT1} + +Forward thruster thrust coefficient 1. + +CT(J) = CT0 + CT1*J + CT2*J^2 + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | + +### SIH_F_CT2 (`FLOAT`) {#SIH_F_CT2} + +Forward thruster thrust coefficient 2. + +CT(J) = CT0 + CT1*J + CT2*J^2 + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | 0.0 | | 0.0 | |   | + +### SIH_F_DIA_INCH (`FLOAT`) {#SIH_F_DIA_INCH} + +Forward thruster propeller diameter in inches. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | | | 0.1 | |   | + +### SIH_F_Q_MAX (`FLOAT`) {#SIH_F_Q_MAX} + +Forward thruster max torque (Nm). + +This is used for the Fixed-Wing, Tailsitter, or pusher of the Standard VTOL +if SIH_F_CP0 <= 0. +If SIH_F_CP0 > 0, propeller model with advance ratio J is used +and this parameter value is overridden at simulation startup. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | | | 0.0165 | Nm |   | + +### SIH_F_RPM_MAX (`FLOAT`) {#SIH_F_RPM_MAX} + +Forward thruster max RPM. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | | | 6000.0 | |   | + +### SIH_F_T_MAX (`FLOAT`) {#SIH_F_T_MAX} + +Forward thruster max thrust (N). + +This is used for the Fixed-Wing, Tailsitter, or pusher of the Standard VTOL +if SIH_F_CT0 <= 0. +If SIH_F_CT0 > 0, propeller model with advance ratio J is used +and this parameter value is overridden at simulation startup. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | | | 2.0 | N |   | ### SIH_IXX (`FLOAT`) {#SIH_IXX} @@ -37278,9 +39985,9 @@ Vehicle inertia about X axis. The inertia is a 3 by 3 symmetric matrix. It represents the difficulty of the vehicle to modify its angular rate. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ------ | -|   | 0.0 | | 0.005 | 0.025 | kg m^2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ------ | --------- | +|   | 0.0 | | 0.005 | 0.025 | kg m^2 |   | ### SIH_IXY (`FLOAT`) {#SIH_IXY} @@ -37289,9 +39996,9 @@ Vehicle cross term inertia xy. The inertia is a 3 by 3 symmetric matrix. This value can be set to 0 for a quad symmetric about its center of mass. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ------ | -|   | | | 0.005 | 0.0 | kg m^2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ------ | --------- | +|   | | | 0.005 | 0.0 | kg m^2 |   | ### SIH_IXZ (`FLOAT`) {#SIH_IXZ} @@ -37300,9 +40007,9 @@ Vehicle cross term inertia xz. The inertia is a 3 by 3 symmetric matrix. This value can be set to 0 for a quad symmetric about its center of mass. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ------ | -|   | | | 0.005 | 0.0 | kg m^2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ------ | --------- | +|   | | | 0.005 | 0.0 | kg m^2 |   | ### SIH_IYY (`FLOAT`) {#SIH_IYY} @@ -37311,9 +40018,9 @@ Vehicle inertia about Y axis. The inertia is a 3 by 3 symmetric matrix. It represents the difficulty of the vehicle to modify its angular rate. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ------ | -|   | 0.0 | | 0.005 | 0.025 | kg m^2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ------ | --------- | +|   | 0.0 | | 0.005 | 0.025 | kg m^2 |   | ### SIH_IYZ (`FLOAT`) {#SIH_IYZ} @@ -37322,9 +40029,9 @@ Vehicle cross term inertia yz. The inertia is a 3 by 3 symmetric matrix. This value can be set to 0 for a quad symmetric about its center of mass. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ------ | -|   | | | 0.005 | 0.0 | kg m^2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ------ | --------- | +|   | | | 0.005 | 0.0 | kg m^2 |   | ### SIH_IZZ (`FLOAT`) {#SIH_IZZ} @@ -37333,9 +40040,9 @@ Vehicle inertia about Z axis. The inertia is a 3 by 3 symmetric matrix. It represents the difficulty of the vehicle to modify its angular rate. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ------ | -|   | 0.0 | | 0.005 | 0.030 | kg m^2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ------ | --------- | +|   | 0.0 | | 0.005 | 0.03 | kg m^2 |   | ### SIH_KDV (`FLOAT`) {#SIH_KDV} @@ -37343,12 +40050,13 @@ First order drag coefficient. Physical coefficient representing the friction with air particules. The greater this value, the slower the quad will move. + Drag force function of velocity: D=-KDV*V. The maximum freefall velocity can be computed as V=10*MASS/KDV [m/s] -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ------- | -|   | 0.0 | | 0.05 | 1.0 | N/(m/s) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ------- | --------- | +|   | 0.0 | | 0.05 | 1.0 | N/(m/s) |   | ### SIH_KDW (`FLOAT`) {#SIH_KDW} @@ -37356,74 +40064,81 @@ First order angular damper coefficient. Physical coefficient representing the friction with air particules during rotations. The greater this value, the slower the quad will rotate. + Aerodynamic moment function of body rate: Ma=-KDW\*W_B. This value can be set to 0 if unknown. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---------- | -|   | 0.0 | | 0.005 | 0.025 | Nm/(rad/s) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---------- | --------- | +|   | 0.0 | | 0.005 | 0.025 | Nm/(rad/s) |   | ### SIH_LOC_H0 (`FLOAT`) {#SIH_LOC_H0} Initial AMSL ground altitude. This value represents the Above Mean Sea Level (AMSL) altitude where the simulation begins. + If using FlightGear as a visual animation, this value can be tweaked such that the vehicle lies on the ground at takeoff. + LAT0, LON0, H0, MU_X, MU_Y, and MU_Z should ideally be consistent among each others to represent a physical ground location on Earth. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -420.0 | 8848.0 | 0.01 | 489.4 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -420.0 | 8848.0 | 0.01 | 489.4 | m |   | ### SIH_LOC_LAT0 (`FLOAT`) {#SIH_LOC_LAT0} Initial geodetic latitude. This value represents the North-South location on Earth where the simulation begins. + LAT0, LON0, H0, MU_X, MU_Y, and MU_Z should ideally be consistent among each others to represent a physical ground location on Earth. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | --------- | ---- | -|   | -90 | 90 | | 47.397742 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | --------- | ---- | --------- | +|   | -90 | 90 | | 47.397742 | deg |   | ### SIH_LOC_LON0 (`FLOAT`) {#SIH_LOC_LON0} Initial geodetic longitude. This value represents the East-West location on Earth where the simulation begins. + LAT0, LON0, H0, MU_X, MU_Y, and MU_Z should ideally be consistent among each others to represent a physical ground location on Earth. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | -------- | ---- | -|   | -180 | 180 | | 8.545594 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | -------- | ---- | --------- | +|   | -180 | 180 | | 8.545594 | deg |   | ### SIH_L_PITCH (`FLOAT`) {#SIH_L_PITCH} Pitch arm length. This is the arm length generating the pitching moment + This value can be measured with a ruler. This corresponds to half the distance between the front and rear motors. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | | 0.05 | 0.2 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | | 0.05 | 0.2 | m |   | ### SIH_L_ROLL (`FLOAT`) {#SIH_L_ROLL} Roll arm length. This is the arm length generating the rolling moment + This value can be measured with a ruler. This corresponds to half the distance between the left and right motors. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | | 0.05 | 0.2 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | | 0.05 | 0.2 | m |   | ### SIH_MASS (`FLOAT`) {#SIH_MASS} @@ -37431,33 +40146,49 @@ Vehicle mass. This value can be measured by weighting the quad on a scale. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | | 0.1 | 1.0 | kg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | | 0.1 | 1.0 | kg |   | ### SIH_Q_MAX (`FLOAT`) {#SIH_Q_MAX} -Max propeller torque. +Max multicopter propeller torque. This is the maximum torque delivered by one propeller when the motor is running at full speed. + This value is usually about few percent of the maximum thrust force. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | | 0.05 | 0.1 | Nm | +Refer to SIH_F_Q_MAX for the propeller torque for FW, Tailsitter, and VTOL pusher. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | | 0.05 | 0.1 | Nm |   | + +### SIH_RNGBC_NOISE (`FLOAT`) {#SIH_RNGBC_NOISE} + +Ranging beacon measurement noise standard deviation. + +Gaussian noise added to simulated ranging beacon measurements. Set to 0 to disable noise. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 100.0 | | 30.0 | m |   | ### SIH_T_MAX (`FLOAT`) {#SIH_T_MAX} -Max propeller thrust force. +Max multicopter propeller thrust force. This is the maximum force delivered by one propeller when the motor is running at full speed. + This value is usually about 5 times the mass of the quadrotor. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | | 0.5 | 5.0 | N | +Refer to SIH_F_T_MAX for the thrust for FW, Tailsitter, and VTOL pusher. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | | 0.5 | 5.0 | N |   | ### SIH_T_TAU (`FLOAT`) {#SIH_T_TAU} @@ -37465,9 +40196,9 @@ thruster time constant tau. the time taken for the thruster to step from 0 to 100% should be about 4 times tau -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.05 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.05 | s |   | ### SIH_VEHICLE_TYPE (`INT32`) {#SIH_VEHICLE_TYPE} @@ -37482,9 +40213,25 @@ Vehicle type. - `4`: Hexacopter - `5`: Rover Ackermann -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | + +### SIH_WIND_E (`FLOAT`) {#SIH_WIND_E} + +Wind velocity from east direction. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | m/s |   | + +### SIH_WIND_N (`FLOAT`) {#SIH_WIND_N} + +Wind velocity from north direction. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | m/s |   | ## Simulator @@ -37500,665 +40247,57 @@ Drift: add a linearly growing bias to the sensor data - `0`: Stuck - `1`: Drift -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 3 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 3 | | 0 | |   | ### SIM_BARO_OFF_P (`FLOAT`) {#SIM_BARO_OFF_P} simulated barometer pressure offset. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### SIM_BARO_OFF_T (`FLOAT`) {#SIM_BARO_OFF_T} simulated barometer temperature offset. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ------- | -|   | | | | 0.0 | celcius | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ------- | --------- | +|   | | | | 0.0 | celcius |   | ### SIM_GPS_USED (`INT32`) {#SIM_GPS_USED} simulated GPS number of satellites used. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 50 | | 10 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 50 | | 10 | |   | ### SIM_MAG_OFFSET_X (`FLOAT`) {#SIM_MAG_OFFSET_X} simulated magnetometer X offset. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | | | | 0.0 | gauss | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | | | | 0.0 | gauss |   | ### SIM_MAG_OFFSET_Y (`FLOAT`) {#SIM_MAG_OFFSET_Y} simulated magnetometer Y offset. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | | | | 0.0 | gauss | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | | | | 0.0 | gauss |   | ### SIM_MAG_OFFSET_Z (`FLOAT`) {#SIM_MAG_OFFSET_Z} simulated magnetometer Z offset. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | | | | 0.0 | gauss | - -## Spacecraft Attitude Control - -### SC_PITCHRATE_MAX (`FLOAT`) {#SC_PITCHRATE_MAX} - -Max pitch rate. - -Limit for pitch rate in manual and auto modes (except acro). -Has effect for large rotations in autonomous mode, to avoid large control -output and mixer saturation. -This is not only limited by the vehicle's properties, but also by the maximum -measurement rate of the gyro. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 0.0 | 1800.0 | 5 | 220.0 | deg/s | - -### SC_PITCH_P (`FLOAT`) {#SC_PITCH_P} - -Pitch P gain. - -Pitch proportional gain, i.e. desired angular speed in rad/s for error 1 rad. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 12 | 0.1 | 6.5 | - -### SC_ROLLRATE_MAX (`FLOAT`) {#SC_ROLLRATE_MAX} - -Max roll rate. - -Limit for roll rate in manual and auto modes (except acro). -Has effect for large rotations in autonomous mode, to avoid large control -output and mixer saturation. -This is not only limited by the vehicle's properties, but also by the maximum -measurement rate of the gyro. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 0.0 | 1800.0 | 5 | 220.0 | deg/s | - -### SC_ROLL_P (`FLOAT`) {#SC_ROLL_P} - -Roll P gain. - -Roll proportional gain, i.e. desired angular speed in rad/s for error 1 rad. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 12 | 0.1 | 6.5 | - -### SC_YAWRATE_MAX (`FLOAT`) {#SC_YAWRATE_MAX} - -Max yaw rate. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 0.0 | 1800.0 | 5 | 200.0 | deg/s | - -### SC_YAW_P (`FLOAT`) {#SC_YAW_P} - -Yaw P gain. - -Yaw proportional gain, i.e. desired angular speed in rad/s for error 1 rad. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 5 | 0.1 | 2.8 | - -### SC_YAW_WEIGHT (`FLOAT`) {#SC_YAW_WEIGHT} - -Yaw weight. - -A fraction [0,1] deprioritizing yaw compared to roll and pitch in non-linear attitude control. -Deprioritizing yaw is necessary because multicopters have much less control authority -in yaw compared to the other axes and it makes sense because yaw is not critical for -stable hovering or 3D navigation. -For yaw control tuning use SC_YAW_P. This ratio has no impact on the yaw gain. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 1.0 | 0.1 | 0.4 | - -## Spacecraft Position Control - -### SC_MAN_TILT_TAU (`FLOAT`) {#SC_MAN_TILT_TAU} - -Manual tilt input filter time constant. - -Setting this parameter to 0 disables the filter - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 2.0 | | 0.0 | s | - -### SC_MAN_Y_SCALE (`FLOAT`) {#SC_MAN_Y_SCALE} - -Max manual yaw rate for Stabilized, Altitude, Position mode. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 0 | 400 | 10 | 150. | deg/s | - -### SPC_ACC (`FLOAT`) {#SPC_ACC} - -Acceleration for autonomous and for manual modes. - -When piloting manually, this parameter is only used in MPC_POS_MODE 4. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 2 | 15 | 1 | 3. | m/s^2 | - -### SPC_ACC_MAX (`FLOAT`) {#SPC_ACC_MAX} - -Maximum accelaration in autonomous modes. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 2 | 15 | 1 | 5. | m/s^2 | - -### SPC_JERK_AUTO (`FLOAT`) {#SPC_JERK_AUTO} - -Jerk limit in autonomous modes. - -Limit the maximum jerk of the vehicle (how fast the acceleration can change). -A lower value leads to smoother vehicle motions but also limited agility. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 1 | 80 | 1 | 4. | m/s^3 | - -### SPC_JERK_MAX (`FLOAT`) {#SPC_JERK_MAX} - -Maximum jerk in Position/Altitude mode. - -Limit the maximum jerk of the vehicle (how fast the acceleration can change). -A lower value leads to smoother motions but limits agility -(how fast it can change directions or break). -Setting this to the maximum value essentially disables the limit. -Only used with smooth MPC_POS_MODE 3 and 4. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 0.5 | 500 | 1 | 8. | m/s^3 | - -### SPC_MAN_Y_MAX (`FLOAT`) {#SPC_MAN_Y_MAX} - -Max manual yaw rate for Stabilized, Altitude, Position mode. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 0 | 400 | 10 | 150. | deg/s | - -### SPC_MAN_Y_TAU (`FLOAT`) {#SPC_MAN_Y_TAU} - -Manual yaw rate input filter time constant. - -Not used in Stabilized mode -Setting this parameter to 0 disables the filter - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 5 | 0.01 | 0.08 | s | - -### SPC_POS_I (`FLOAT`) {#SPC_POS_I} - -Integral gain for position error. - -Defined as corrective velocity in m/s per m velocity error - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 15 | 0.1 | 0. | - -### SPC_POS_I_LIM (`FLOAT`) {#SPC_POS_I_LIM} - -Integral limit for position error. - -Defined as corrective velocity in m/s per m velocity error - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 5 | 0.01 | 1. | - -### SPC_POS_P (`FLOAT`) {#SPC_POS_P} - -Proportional gain for position error. - -Defined as corrective velocity in m/s per m position error - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 2 | 0.1 | 0.2 | - -### SPC_THR_MAX (`FLOAT`) {#SPC_THR_MAX} - -Maximum collective thrust. - -Limit allowed thrust - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1 | 0.05 | 1. | norm | - -### SPC_VELD_LP (`FLOAT`) {#SPC_VELD_LP} - -Numerical velocity derivative low pass cutoff frequency. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 10 | 0.5 | 5.0 | Hz | - -### SPC_VEL_ALL (`FLOAT`) {#SPC_VEL_ALL} - -Overall Velocity Limit. - -If set to a value greater than zero, other parameters are automatically set (such as -MPC_VEL_MAX or MPC_VEL_MANUAL). -If set to a negative value, the existing individual parameters are used. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -20 | 20 | 1 | -10. | - -### SPC_VEL_CRUISE (`FLOAT`) {#SPC_VEL_CRUISE} - -Cruising elocity setpoint in autonomous modes. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 3 | 20 | 1 | 10. | m/s | - -### SPC_VEL_D (`FLOAT`) {#SPC_VEL_D} - -Derivative gain for velocity error. - -Defined as corrective acceleration in m/s^2 per m/s velocity error - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 15 | 0.1 | 0.0 | - -### SPC_VEL_I (`FLOAT`) {#SPC_VEL_I} - -Integral gain for velocity error. - -Defined as corrective acceleration in m/s^2 per m/s velocity error - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 15 | 0.1 | 0. | - -### SPC_VEL_I_LIM (`FLOAT`) {#SPC_VEL_I_LIM} - -Integral limit for velocity error. - -Defined as corrective acceleration in m/s^2 per m/s velocity error - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 5 | 0.1 | 1. | - -### SPC_VEL_MANUAL (`FLOAT`) {#SPC_VEL_MANUAL} - -Maximum velocity setpoint in Position mode. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 3 | 20 | 1 | 10. | m/s | - -### SPC_VEL_MAX (`FLOAT`) {#SPC_VEL_MAX} - -Maximum velocity. - -Absolute maximum for all velocity controlled modes. -Any higher value is truncated. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 20 | 1 | 12. | m/s | - -### SPC_VEL_P (`FLOAT`) {#SPC_VEL_P} - -Proportional gain for velocity error. - -Defined as corrective acceleration in m/s^2 per m/s velocity error - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 15 | 0.1 | 6.55 | - -## Spacecraft Rate Control - -### SC_ACRO_EXPO (`FLOAT`) {#SC_ACRO_EXPO} - -Acro mode Expo factor for Roll and Pitch. - -Exponential factor for tuning the input curve shape. -0 Purely linear input curve -1 Purely cubic input curve - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1 | | 0.69 | - -### SC_ACRO_EXPO_Y (`FLOAT`) {#SC_ACRO_EXPO_Y} - -Acro mode Expo factor for Yaw. - -Exponential factor for tuning the input curve shape. -0 Purely linear input curve -1 Purely cubic input curve - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1 | | 0.69 | - -### SC_ACRO_P_MAX (`FLOAT`) {#SC_ACRO_P_MAX} - -Max acro pitch rate. - -default: 2 turns per second - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 0.0 | 1800.0 | 5 | 720.0 | deg/s | - -### SC_ACRO_R_MAX (`FLOAT`) {#SC_ACRO_R_MAX} - -Max acro roll rate. - -default: 2 turns per second - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 0.0 | 1800.0 | 5 | 720.0 | deg/s | - -### SC_ACRO_SUPEXPO (`FLOAT`) {#SC_ACRO_SUPEXPO} - -Acro mode SuperExpo factor for Roll and Pitch. - -SuperExpo factor for refining the input curve shape tuned using SC_ACRO_EXPO. -0 Pure Expo function -0.7 reasonable shape enhancement for intuitive stick feel -0.95 very strong bent input curve only near maxima have effect - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 0.95 | | 0.7 | - -### SC_ACRO_SUPEXPOY (`FLOAT`) {#SC_ACRO_SUPEXPOY} - -Acro mode SuperExpo factor for Yaw. - -SuperExpo factor for refining the input curve shape tuned using SC_ACRO_EXPO_Y. -0 Pure Expo function -0.7 reasonable shape enhancement for intuitive stick feel -0.95 very strong bent input curve only near maxima have effect - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 0.95 | | 0.7 | - -### SC_ACRO_Y_MAX (`FLOAT`) {#SC_ACRO_Y_MAX} - -Max acro yaw rate. - -default 1.5 turns per second - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 0.0 | 1800.0 | 5 | 540.0 | deg/s | - -### SC_BAT_SCALE_EN (`INT32`) {#SC_BAT_SCALE_EN} - -Battery power level scaler. - -This compensates for voltage drop of the battery over time by attempting to -normalize performance across the operating range of the battery. The copter -should constantly behave as if it was fully charged with reduced max acceleration -at lower battery percentages. i.e. if hover is at 0.5 throttle at 100% battery, -it will still be 0.5 at 60% battery. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------------ | ---- | -|   | | | | Disabled (0) | - -### SC_MAN_F_MAX (`FLOAT`) {#SC_MAN_F_MAX} - -Manual mode maximum force. - -- - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1.0 | | 1.0 | - -### SC_MAN_T_MAX (`FLOAT`) {#SC_MAN_T_MAX} - -Manual mode maximum torque. - -- - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1.0 | | 1.0 | - -### SC_PITCHRATE_D (`FLOAT`) {#SC_PITCHRATE_D} - -Pitch rate D gain. - -Pitch rate differential gain. Small values help reduce fast oscillations. If value is too big oscillations will appear again. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | | 0.0005 | 0.003 | - -### SC_PITCHRATE_FF (`FLOAT`) {#SC_PITCHRATE_FF} - -Pitch rate feedforward. - -Improves tracking performance. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | | | 0.0 | - -### SC_PITCHRATE_I (`FLOAT`) {#SC_PITCHRATE_I} - -Pitch rate I gain. - -Pitch rate integral gain. Can be set to compensate static thrust difference or gravity center offset. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | | 0.01 | 0.2 | - -### SC_PITCHRATE_K (`FLOAT`) {#SC_PITCHRATE_K} - -Pitch rate controller gain. - -Global gain of the controller. -This gain scales the P, I and D terms of the controller: -output = SC_PITCHRATE_K _ (SC_PITCHRATE_P _ error - -- SC_PITCHRATE_I \* error_integral -- SC_PITCHRATE_D \* error_derivative) - Set SC_PITCHRATE_P=1 to implement a PID in the ideal form. - Set SC_PITCHRATE_K=1 to implement a PID in the parallel form. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.01 | 5.0 | 0.0005 | 1.0 | - -### SC_PITCHRATE_P (`FLOAT`) {#SC_PITCHRATE_P} - -Pitch rate P gain. - -Pitch rate proportional gain, i.e. control output for angular speed error 1 rad/s. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.01 | 0.6 | 0.01 | 0.15 | - -### SC_PR_INT_LIM (`FLOAT`) {#SC_PR_INT_LIM} - -Pitch rate integrator limit. - -Can be set to increase the amount of integrator available to counteract disturbances or reduced to improve settling time after large pitch moment trim changes. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | | 0.01 | 0.30 | - -### SC_ROLLRATE_D (`FLOAT`) {#SC_ROLLRATE_D} - -Roll rate D gain. - -Roll rate differential gain. Small values help reduce fast oscillations. If value is too big oscillations will appear again. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 0.01 | 0.0005 | 0.003 | - -### SC_ROLLRATE_FF (`FLOAT`) {#SC_ROLLRATE_FF} - -Roll rate feedforward. - -Improves tracking performance. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | | | 0.0 | - -### SC_ROLLRATE_I (`FLOAT`) {#SC_ROLLRATE_I} - -Roll rate I gain. - -Roll rate integral gain. Can be set to compensate static thrust difference or gravity center offset. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | | 0.01 | 0.2 | - -### SC_ROLLRATE_K (`FLOAT`) {#SC_ROLLRATE_K} - -Roll rate controller gain. - -Global gain of the controller. -This gain scales the P, I and D terms of the controller: -output = SC_ROLLRATE_K _ (SC_ROLLRATE_P _ error - -- SC_ROLLRATE_I \* error_integral -- SC_ROLLRATE_D \* error_derivative) - Set SC_ROLLRATE_P=1 to implement a PID in the ideal form. - Set SC_ROLLRATE_K=1 to implement a PID in the parallel form. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.01 | 5.0 | 0.0005 | 1.0 | - -### SC_ROLLRATE_P (`FLOAT`) {#SC_ROLLRATE_P} - -Roll rate P gain. - -Roll rate proportional gain, i.e. control output for angular speed error 1 rad/s. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.01 | 0.5 | 0.01 | 0.15 | - -### SC_RR_INT_LIM (`FLOAT`) {#SC_RR_INT_LIM} - -Roll rate integrator limit. - -Can be set to increase the amount of integrator available to counteract disturbances or reduced to improve settling time after large roll moment trim changes. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | | 0.01 | 0.30 | - -### SC_YAWRATE_D (`FLOAT`) {#SC_YAWRATE_D} - -Yaw rate D gain. - -Yaw rate differential gain. Small values help reduce fast oscillations. If value is too big oscillations will appear again. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | | 0.01 | 0.0 | - -### SC_YAWRATE_FF (`FLOAT`) {#SC_YAWRATE_FF} - -Yaw rate feedforward. - -Improves tracking performance. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | | 0.01 | 0.0 | - -### SC_YAWRATE_I (`FLOAT`) {#SC_YAWRATE_I} - -Yaw rate I gain. - -Yaw rate integral gain. Can be set to compensate static thrust difference or gravity center offset. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | | 0.01 | 0.865 | - -### SC_YAWRATE_K (`FLOAT`) {#SC_YAWRATE_K} - -Yaw rate controller gain. - -Global gain of the controller. -This gain scales the P, I and D terms of the controller: -output = SC_YAWRATE_K _ (SC_YAWRATE_P _ error - -- SC_YAWRATE_I \* error_integral -- SC_YAWRATE_D \* error_derivative) - Set SC_YAWRATE_P=1 to implement a PID in the ideal form. - Set SC_YAWRATE_K=1 to implement a PID in the parallel form. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 5.0 | 0.0005 | 1.0 | - -### SC_YAWRATE_P (`FLOAT`) {#SC_YAWRATE_P} - -Yaw rate P gain. - -Yaw rate proportional gain, i.e. control output for angular speed error 1 rad/s. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 10.0 | 0.01 | 10.0 | - -### SC_YR_INT_LIM (`FLOAT`) {#SC_YR_INT_LIM} - -Yaw rate integrator limit. - -Can be set to increase the amount of integrator available to counteract disturbances or reduced to improve settling time after large yaw moment trim changes. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | | 0.01 | 0.2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | | | | 0.0 | gauss |   | ## System @@ -38168,9 +40307,9 @@ RPM capture enable. Enables the RPM capture module to estimate RPM from pulses detected on a PWM pin configured as "RPM Input". -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### RPM_PULS_PER_REV (`INT32`) {#RPM_PULS_PER_REV} @@ -38178,9 +40317,9 @@ Voltage pulses per revolution. Number of voltage pulses per one rotor revolution on the capturing pin. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 1 | 50 | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 1 | 50 | | 1 | |   | ### SYS_AUTOCONFIG (`INT32`) {#SYS_AUTOCONFIG} @@ -38195,9 +40334,9 @@ RC\* parameters are preserved. - `0`: Keep parameters - `1`: Reset parameters to airframe defaults -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### SYS_AUTOSTART (`INT32`) {#SYS_AUTOSTART} @@ -38205,17 +40344,19 @@ Auto-start script index. CHANGING THIS VALUE REQUIRES A RESTART. Defines the auto-start script used to bootstrap the system. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 9999999 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 9999999 | | 0 | |   | ### SYS_BL_UPDATE (`INT32`) {#SYS_BL_UPDATE} Bootloader update. If enabled, update the bootloader on the next boot. + WARNING: do not cut the power during an update process, otherwise you will have to recover using some alternative method (e.g. JTAG). + Instructions: - Insert an SD card @@ -38224,48 +40365,57 @@ Instructions: - Wait until the board comes back up (or at least 2 minutes) - If it does not come back, check the file bootlog.txt on the SD card -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### SYS_CAL_ACCEL (`INT32`) {#SYS_CAL_ACCEL} -Enable auto start of accelerometer thermal calibration at the next power up. +Auto start accel thermal calibration on next boot. + +Enable auto start of accelerometer thermal calibration at the next power up 0 : Set to 0 to do nothing 1 : Set to 1 to start a calibration at next boot This parameter is reset to zero when the temperature calibration starts. + default (0, no calibration) -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1 | | 0 | |   | ### SYS_CAL_BARO (`INT32`) {#SYS_CAL_BARO} -Enable auto start of barometer thermal calibration at the next power up. +Auto start baro thermal calibration on next boot. + +Enable auto start of barometer thermal calibration at the next power up 0 : Set to 0 to do nothing 1 : Set to 1 to start a calibration at next boot This parameter is reset to zero when the temperature calibration starts. + default (0, no calibration) -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1 | | 0 | |   | ### SYS_CAL_GYRO (`INT32`) {#SYS_CAL_GYRO} -Enable auto start of rate gyro thermal calibration at the next power up. +Auto start gyro thermal calibration on next boot. + +Enable auto start of rate gyro thermal calibration at the next power up 0 : Set to 0 to do nothing 1 : Set to 1 to start a calibration at next boot This parameter is reset to zero when the temperature calibration starts. + default (0, no calibration) -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1 | | 0 | |   | ### SYS_CAL_TDEL (`INT32`) {#SYS_CAL_TDEL} @@ -38275,9 +40425,9 @@ A temperature increase greater than this value is required during calibration. Calibration will complete for each sensor when the temperature increase above the starting temperature exceeds the value set by SYS_CAL_TDEL. If the temperature rise is insufficient, the calibration will continue indefinitely and the board will need to be repowered to exit. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ------- | -|   | 10 | | | 24 | celcius | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ------- | --------- | +|   | 10 | | | 24 | celcius |   | ### SYS_CAL_TMAX (`INT32`) {#SYS_CAL_TMAX} @@ -38285,9 +40435,9 @@ Maximum starting temperature for thermal calibration. Temperature calibration will not start if the temperature of any sensor is higher than the value set by SYS_CAL_TMAX. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ------- | -|   | | | | 10 | celcius | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ------- | --------- | +|   | | | | 10 | celcius |   | ### SYS_CAL_TMIN (`INT32`) {#SYS_CAL_TMIN} @@ -38295,9 +40445,9 @@ Minimum starting temperature for thermal calibration. Temperature calibration for each sensor will ignore data if the temperature is lower than the value set by SYS_CAL_TMIN. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ------- | -|   | | | | 5 | celcius | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ------- | --------- | +|   | | | | 5 | celcius |   | ### SYS_DM_BACKEND (`INT32`) {#SYS_DM_BACKEND} @@ -38313,15 +40463,16 @@ non-persistent storage in RAM. - `0`: Default storage - `1`: RAM storage -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### SYS_FAC_CAL_MODE (`INT32`) {#SYS_FAC_CAL_MODE} Enable factory calibration mode. If enabled, future sensor calibrations will be stored to /fs/mtd_caldata. + Note: this is only supported on boards with a separate calibration storage /fs/mtd_caldata. @@ -38331,20 +40482,21 @@ Note: this is only supported on boards with a separate calibration storage - `1`: All sensors - `2`: All sensors except mag -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### SYS_FAILURE_EN (`INT32`) {#SYS_FAILURE_EN} Enable failure injection. If enabled allows MAVLink INJECT_FAILURE commands. + WARNING: the failures can easily cause crashes and are to be used with caution! -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------------ | ---- | -|   | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------------ | ---- | --------- | +|   | | | | Disabled (0) | |   | ### SYS_HAS_BARO (`INT32`) {#SYS_HAS_BARO} @@ -38355,9 +40507,9 @@ F4 SD variants. If disabled, the preflight checks will not check for the presence of a barometer. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ----------- | ---- | -| ✓ | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ----------- | ---- | --------- | +| ✓ | | | | Enabled (1) | |   | ### SYS_HAS_GPS (`INT32`) {#SYS_HAS_GPS} @@ -38367,9 +40519,9 @@ Disable this if the system has no GPS. If disabled, the sensors hub will not process sensor_gps, and GPS will not be available for the rest of the system. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ----------- | ---- | -| ✓ | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ----------- | ---- | --------- | +| ✓ | | | | Enabled (1) | |   | ### SYS_HAS_MAG (`INT32`) {#SYS_HAS_MAG} @@ -38378,9 +40530,9 @@ Control if and how many magnetometers are expected. 0: System has no magnetometer, preflight checks should pass without one. 1-N: Require the presence of N magnetometer sensors for check to pass. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 1 | |   | ### SYS_HAS_NUM_ASPD (`INT32`) {#SYS_HAS_NUM_ASPD} @@ -38390,20 +40542,21 @@ Set this to 0 if the board has no airspeed sensor. If set to 0, the preflight checks will not check for the presence of an airspeed sensor. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1 | | 0 | |   | ### SYS_HAS_NUM_DIST (`INT32`) {#SYS_HAS_NUM_DIST} Number of distance sensors to check being available. The preflight check will fail if fewer than this number of distance sensors with valid data is present. + Disable the check with 0. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 4 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 4 | | 0 | |   | ### SYS_HAS_NUM_OF (`INT32`) {#SYS_HAS_NUM_OF} @@ -38411,9 +40564,9 @@ Number of optical flow sensors required to be available. The preflight check will fail if fewer than this number of optical flow sensors with valid data are present. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1 | | 0 | |   | ### SYS_HF_MAV (`INT32`) {#SYS_HF_MAV} @@ -38423,9 +40576,9 @@ When this is enabled all the hardfaults on the SD card are streamed over MAVLink. This is useful for cases where the FMU does reset in-flight due to a hardfault and the SD card may not survive a crash. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ----------- | ---- | -|   | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ----------- | ---- | --------- | +|   | | | | Enabled (1) | |   | ### SYS_HITL (`INT32`) {#SYS_HITL} @@ -38434,6 +40587,7 @@ Enable HITL/SIH mode on next boot. While enabled the system will boot in Hardware-In-The-Loop (HITL) or Simulation-In-Hardware (SIH) mode and not enable all sensors and checks. When disabled the same vehicle can be flown normally. + Set to 'external HITL', if the system should perform as if it were a real vehicle (the only difference to a real system is then only the parameter value, which can be used for log analysis). @@ -38445,9 +40599,9 @@ value, which can be used for log analysis). - `1`: HITL enabled - `2`: SIH enabled -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### SYS_PARAM_VER (`INT32`) {#SYS_PARAM_VER} @@ -38458,9 +40612,9 @@ parameter version value via PARAM_DEFAULTS_VER. This is checked on bootup against SYS_PARAM_VER, and if they do not match, parameters are reset and reloaded from the airframe configuration. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | | | 1 | |   | ### SYS_RGB_MAXBRT (`FLOAT`) {#SYS_RGB_MAXBRT} @@ -38468,17 +40622,17 @@ RGB Led brightness limit. Set to 0 to disable, 1 for maximum brightness -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 1. | % | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 1.0 | % |   | ### SYS_STCK_EN (`INT32`) {#SYS_STCK_EN} Enable stack checking. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ----------- | ---- | -|   | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ----------- | ---- | --------- | +|   | | | | Enabled (1) | |   | ## Telemetry @@ -38488,9 +40642,9 @@ Blacksheep telemetry Enable. If true, the FMU will try to connect to Blacksheep telemetry on start up -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### TEL_FRSKY_CONFIG (`INT32`) {#TEL_FRSKY_CONFIG} @@ -38513,9 +40667,9 @@ Configure on which serial port to run FrSky Telemetry. - `301`: Wifi Port - `401`: EXT2 -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### TEL_HOTT_CONFIG (`INT32`) {#TEL_HOTT_CONFIG} @@ -38538,155 +40692,107 @@ Configure on which serial port to run HoTT Telemetry. - `301`: Wifi Port - `401`: EXT2 -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ## Testing -### TEST_1 (`INT32`) {#TEST_1} - -TEST_1. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 2 | - -### TEST_2 (`INT32`) {#TEST_2} - -TEST_2. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 4 | - -### TEST_3 (`FLOAT`) {#TEST_3} - -TEST_3. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 5.0 | - ### TEST_D (`FLOAT`) {#TEST_D} TEST_D. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.01 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.01 | |   | ### TEST_DEV (`FLOAT`) {#TEST_DEV} TEST_DEV. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 2.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 2.0 | |   | ### TEST_D_LP (`FLOAT`) {#TEST_D_LP} TEST_D_LP. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 10.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 10.0 | |   | ### TEST_HP (`FLOAT`) {#TEST_HP} TEST_HP. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 10.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 10.0 | |   | ### TEST_I (`FLOAT`) {#TEST_I} TEST_I. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.1 | |   | ### TEST_I_MAX (`FLOAT`) {#TEST_I_MAX} TEST_I_MAX. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 1.0 | |   | ### TEST_LP (`FLOAT`) {#TEST_LP} TEST_LP. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 10.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 10.0 | |   | ### TEST_MAX (`FLOAT`) {#TEST_MAX} TEST_MAX. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 1.0 | |   | ### TEST_MEAN (`FLOAT`) {#TEST_MEAN} TEST_MEAN. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 1.0 | |   | ### TEST_MIN (`FLOAT`) {#TEST_MIN} TEST_MIN. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | -1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | -1.0 | |   | ### TEST_P (`FLOAT`) {#TEST_P} TEST_P. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.2 | - -### TEST_PARAMS (`INT32`) {#TEST_PARAMS} - -TEST_PARAMS. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | -------- | ---- | -|   | | | | 12345678 | - -### TEST_RC2_X (`INT32`) {#TEST_RC2_X} - -TEST_RC2_X. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 16 | - -### TEST_RC_X (`INT32`) {#TEST_RC_X} - -TEST_RC_X. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 8 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.2 | |   | ### TEST_TRIM (`FLOAT`) {#TEST_TRIM} TEST_TRIM. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.5 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.5 | |   | ## Thermal Compensation @@ -38694,1889 +40800,1889 @@ TEST_TRIM. ID of Accelerometer that the calibration is for. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### TC_A0_TMAX (`FLOAT`) {#TC_A0_TMAX} Accelerometer calibration maximum temperature. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 100.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 100.0 | |   | ### TC_A0_TMIN (`FLOAT`) {#TC_A0_TMIN} Accelerometer calibration minimum temperature. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_A0_TREF (`FLOAT`) {#TC_A0_TREF} Accelerometer calibration reference temperature. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 25.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 25.0 | |   | ### TC_A0_X0_0 (`FLOAT`) {#TC_A0_X0_0} Accelerometer offset temperature ^0 polynomial coefficient - X axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_A0_X0_1 (`FLOAT`) {#TC_A0_X0_1} Accelerometer offset temperature ^0 polynomial coefficient - Y axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_A0_X0_2 (`FLOAT`) {#TC_A0_X0_2} Accelerometer offset temperature ^0 polynomial coefficient - Z axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_A0_X1_0 (`FLOAT`) {#TC_A0_X1_0} Accelerometer offset temperature ^1 polynomial coefficient - X axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_A0_X1_1 (`FLOAT`) {#TC_A0_X1_1} Accelerometer offset temperature ^1 polynomial coefficient - Y axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_A0_X1_2 (`FLOAT`) {#TC_A0_X1_2} Accelerometer offset temperature ^1 polynomial coefficient - Z axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_A0_X2_0 (`FLOAT`) {#TC_A0_X2_0} Accelerometer offset temperature ^2 polynomial coefficient - X axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_A0_X2_1 (`FLOAT`) {#TC_A0_X2_1} Accelerometer offset temperature ^2 polynomial coefficient - Y axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_A0_X2_2 (`FLOAT`) {#TC_A0_X2_2} Accelerometer offset temperature ^2 polynomial coefficient - Z axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_A0_X3_0 (`FLOAT`) {#TC_A0_X3_0} Accelerometer offset temperature ^3 polynomial coefficient - X axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_A0_X3_1 (`FLOAT`) {#TC_A0_X3_1} Accelerometer offset temperature ^3 polynomial coefficient - Y axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_A0_X3_2 (`FLOAT`) {#TC_A0_X3_2} Accelerometer offset temperature ^3 polynomial coefficient - Z axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_A1_ID (`INT32`) {#TC_A1_ID} ID of Accelerometer that the calibration is for. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### TC_A1_TMAX (`FLOAT`) {#TC_A1_TMAX} Accelerometer calibration maximum temperature. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 100.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 100.0 | |   | ### TC_A1_TMIN (`FLOAT`) {#TC_A1_TMIN} Accelerometer calibration minimum temperature. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_A1_TREF (`FLOAT`) {#TC_A1_TREF} Accelerometer calibration reference temperature. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 25.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 25.0 | |   | ### TC_A1_X0_0 (`FLOAT`) {#TC_A1_X0_0} Accelerometer offset temperature ^0 polynomial coefficient - X axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_A1_X0_1 (`FLOAT`) {#TC_A1_X0_1} Accelerometer offset temperature ^0 polynomial coefficient - Y axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_A1_X0_2 (`FLOAT`) {#TC_A1_X0_2} Accelerometer offset temperature ^0 polynomial coefficient - Z axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_A1_X1_0 (`FLOAT`) {#TC_A1_X1_0} Accelerometer offset temperature ^1 polynomial coefficient - X axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_A1_X1_1 (`FLOAT`) {#TC_A1_X1_1} Accelerometer offset temperature ^1 polynomial coefficient - Y axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_A1_X1_2 (`FLOAT`) {#TC_A1_X1_2} Accelerometer offset temperature ^1 polynomial coefficient - Z axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_A1_X2_0 (`FLOAT`) {#TC_A1_X2_0} Accelerometer offset temperature ^2 polynomial coefficient - X axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_A1_X2_1 (`FLOAT`) {#TC_A1_X2_1} Accelerometer offset temperature ^2 polynomial coefficient - Y axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_A1_X2_2 (`FLOAT`) {#TC_A1_X2_2} Accelerometer offset temperature ^2 polynomial coefficient - Z axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_A1_X3_0 (`FLOAT`) {#TC_A1_X3_0} Accelerometer offset temperature ^3 polynomial coefficient - X axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_A1_X3_1 (`FLOAT`) {#TC_A1_X3_1} Accelerometer offset temperature ^3 polynomial coefficient - Y axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_A1_X3_2 (`FLOAT`) {#TC_A1_X3_2} Accelerometer offset temperature ^3 polynomial coefficient - Z axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_A2_ID (`INT32`) {#TC_A2_ID} ID of Accelerometer that the calibration is for. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### TC_A2_TMAX (`FLOAT`) {#TC_A2_TMAX} Accelerometer calibration maximum temperature. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 100.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 100.0 | |   | ### TC_A2_TMIN (`FLOAT`) {#TC_A2_TMIN} Accelerometer calibration minimum temperature. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_A2_TREF (`FLOAT`) {#TC_A2_TREF} Accelerometer calibration reference temperature. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 25.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 25.0 | |   | ### TC_A2_X0_0 (`FLOAT`) {#TC_A2_X0_0} Accelerometer offset temperature ^0 polynomial coefficient - X axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_A2_X0_1 (`FLOAT`) {#TC_A2_X0_1} Accelerometer offset temperature ^0 polynomial coefficient - Y axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_A2_X0_2 (`FLOAT`) {#TC_A2_X0_2} Accelerometer offset temperature ^0 polynomial coefficient - Z axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_A2_X1_0 (`FLOAT`) {#TC_A2_X1_0} Accelerometer offset temperature ^1 polynomial coefficient - X axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_A2_X1_1 (`FLOAT`) {#TC_A2_X1_1} Accelerometer offset temperature ^1 polynomial coefficient - Y axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_A2_X1_2 (`FLOAT`) {#TC_A2_X1_2} Accelerometer offset temperature ^1 polynomial coefficient - Z axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_A2_X2_0 (`FLOAT`) {#TC_A2_X2_0} Accelerometer offset temperature ^2 polynomial coefficient - X axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_A2_X2_1 (`FLOAT`) {#TC_A2_X2_1} Accelerometer offset temperature ^2 polynomial coefficient - Y axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_A2_X2_2 (`FLOAT`) {#TC_A2_X2_2} Accelerometer offset temperature ^2 polynomial coefficient - Z axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_A2_X3_0 (`FLOAT`) {#TC_A2_X3_0} Accelerometer offset temperature ^3 polynomial coefficient - X axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_A2_X3_1 (`FLOAT`) {#TC_A2_X3_1} Accelerometer offset temperature ^3 polynomial coefficient - Y axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_A2_X3_2 (`FLOAT`) {#TC_A2_X3_2} Accelerometer offset temperature ^3 polynomial coefficient - Z axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_A3_ID (`INT32`) {#TC_A3_ID} ID of Accelerometer that the calibration is for. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### TC_A3_TMAX (`FLOAT`) {#TC_A3_TMAX} Accelerometer calibration maximum temperature. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 100.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 100.0 | |   | ### TC_A3_TMIN (`FLOAT`) {#TC_A3_TMIN} Accelerometer calibration minimum temperature. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_A3_TREF (`FLOAT`) {#TC_A3_TREF} Accelerometer calibration reference temperature. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 25.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 25.0 | |   | ### TC_A3_X0_0 (`FLOAT`) {#TC_A3_X0_0} Accelerometer offset temperature ^0 polynomial coefficient - X axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_A3_X0_1 (`FLOAT`) {#TC_A3_X0_1} Accelerometer offset temperature ^0 polynomial coefficient - Y axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_A3_X0_2 (`FLOAT`) {#TC_A3_X0_2} Accelerometer offset temperature ^0 polynomial coefficient - Z axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_A3_X1_0 (`FLOAT`) {#TC_A3_X1_0} Accelerometer offset temperature ^1 polynomial coefficient - X axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_A3_X1_1 (`FLOAT`) {#TC_A3_X1_1} Accelerometer offset temperature ^1 polynomial coefficient - Y axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_A3_X1_2 (`FLOAT`) {#TC_A3_X1_2} Accelerometer offset temperature ^1 polynomial coefficient - Z axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_A3_X2_0 (`FLOAT`) {#TC_A3_X2_0} Accelerometer offset temperature ^2 polynomial coefficient - X axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_A3_X2_1 (`FLOAT`) {#TC_A3_X2_1} Accelerometer offset temperature ^2 polynomial coefficient - Y axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_A3_X2_2 (`FLOAT`) {#TC_A3_X2_2} Accelerometer offset temperature ^2 polynomial coefficient - Z axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_A3_X3_0 (`FLOAT`) {#TC_A3_X3_0} Accelerometer offset temperature ^3 polynomial coefficient - X axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_A3_X3_1 (`FLOAT`) {#TC_A3_X3_1} Accelerometer offset temperature ^3 polynomial coefficient - Y axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_A3_X3_2 (`FLOAT`) {#TC_A3_X3_2} Accelerometer offset temperature ^3 polynomial coefficient - Z axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_A_ENABLE (`INT32`) {#TC_A_ENABLE} Thermal compensation for accelerometer sensors. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### TC_B0_ID (`INT32`) {#TC_B0_ID} ID of Barometer that the calibration is for. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### TC_B0_TMAX (`FLOAT`) {#TC_B0_TMAX} Barometer calibration maximum temperature. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 75.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 75.0 | |   | ### TC_B0_TMIN (`FLOAT`) {#TC_B0_TMIN} Barometer calibration minimum temperature. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 5.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 5.0 | |   | ### TC_B0_TREF (`FLOAT`) {#TC_B0_TREF} Barometer calibration reference temperature. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 40.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 40.0 | |   | ### TC_B0_X0 (`FLOAT`) {#TC_B0_X0} Barometer offset temperature ^0 polynomial coefficient. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_B0_X1 (`FLOAT`) {#TC_B0_X1} Barometer offset temperature ^1 polynomial coefficients. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_B0_X2 (`FLOAT`) {#TC_B0_X2} Barometer offset temperature ^2 polynomial coefficient. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_B0_X3 (`FLOAT`) {#TC_B0_X3} Barometer offset temperature ^3 polynomial coefficient. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_B0_X4 (`FLOAT`) {#TC_B0_X4} Barometer offset temperature ^4 polynomial coefficient. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_B0_X5 (`FLOAT`) {#TC_B0_X5} Barometer offset temperature ^5 polynomial coefficient. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_B1_ID (`INT32`) {#TC_B1_ID} ID of Barometer that the calibration is for. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### TC_B1_TMAX (`FLOAT`) {#TC_B1_TMAX} Barometer calibration maximum temperature. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 75.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 75.0 | |   | ### TC_B1_TMIN (`FLOAT`) {#TC_B1_TMIN} Barometer calibration minimum temperature. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 5.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 5.0 | |   | ### TC_B1_TREF (`FLOAT`) {#TC_B1_TREF} Barometer calibration reference temperature. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 40.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 40.0 | |   | ### TC_B1_X0 (`FLOAT`) {#TC_B1_X0} Barometer offset temperature ^0 polynomial coefficient. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_B1_X1 (`FLOAT`) {#TC_B1_X1} Barometer offset temperature ^1 polynomial coefficients. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_B1_X2 (`FLOAT`) {#TC_B1_X2} Barometer offset temperature ^2 polynomial coefficient. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_B1_X3 (`FLOAT`) {#TC_B1_X3} Barometer offset temperature ^3 polynomial coefficient. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_B1_X4 (`FLOAT`) {#TC_B1_X4} Barometer offset temperature ^4 polynomial coefficient. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_B1_X5 (`FLOAT`) {#TC_B1_X5} Barometer offset temperature ^5 polynomial coefficient. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_B2_ID (`INT32`) {#TC_B2_ID} ID of Barometer that the calibration is for. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### TC_B2_TMAX (`FLOAT`) {#TC_B2_TMAX} Barometer calibration maximum temperature. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 75.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 75.0 | |   | ### TC_B2_TMIN (`FLOAT`) {#TC_B2_TMIN} Barometer calibration minimum temperature. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 5.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 5.0 | |   | ### TC_B2_TREF (`FLOAT`) {#TC_B2_TREF} Barometer calibration reference temperature. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 40.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 40.0 | |   | ### TC_B2_X0 (`FLOAT`) {#TC_B2_X0} Barometer offset temperature ^0 polynomial coefficient. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_B2_X1 (`FLOAT`) {#TC_B2_X1} Barometer offset temperature ^1 polynomial coefficients. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_B2_X2 (`FLOAT`) {#TC_B2_X2} Barometer offset temperature ^2 polynomial coefficient. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_B2_X3 (`FLOAT`) {#TC_B2_X3} Barometer offset temperature ^3 polynomial coefficient. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_B2_X4 (`FLOAT`) {#TC_B2_X4} Barometer offset temperature ^4 polynomial coefficient. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_B2_X5 (`FLOAT`) {#TC_B2_X5} Barometer offset temperature ^5 polynomial coefficient. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_B3_ID (`INT32`) {#TC_B3_ID} ID of Barometer that the calibration is for. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### TC_B3_TMAX (`FLOAT`) {#TC_B3_TMAX} Barometer calibration maximum temperature. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 75.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 75.0 | |   | ### TC_B3_TMIN (`FLOAT`) {#TC_B3_TMIN} Barometer calibration minimum temperature. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 5.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 5.0 | |   | ### TC_B3_TREF (`FLOAT`) {#TC_B3_TREF} Barometer calibration reference temperature. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 40.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 40.0 | |   | ### TC_B3_X0 (`FLOAT`) {#TC_B3_X0} Barometer offset temperature ^0 polynomial coefficient. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_B3_X1 (`FLOAT`) {#TC_B3_X1} Barometer offset temperature ^1 polynomial coefficients. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_B3_X2 (`FLOAT`) {#TC_B3_X2} Barometer offset temperature ^2 polynomial coefficient. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_B3_X3 (`FLOAT`) {#TC_B3_X3} Barometer offset temperature ^3 polynomial coefficient. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_B3_X4 (`FLOAT`) {#TC_B3_X4} Barometer offset temperature ^4 polynomial coefficient. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_B3_X5 (`FLOAT`) {#TC_B3_X5} Barometer offset temperature ^5 polynomial coefficient. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_B_ENABLE (`INT32`) {#TC_B_ENABLE} Thermal compensation for barometric pressure sensors. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### TC_G0_ID (`INT32`) {#TC_G0_ID} ID of Gyro that the calibration is for. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### TC_G0_TMAX (`FLOAT`) {#TC_G0_TMAX} Gyro calibration maximum temperature. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 100.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 100.0 | |   | ### TC_G0_TMIN (`FLOAT`) {#TC_G0_TMIN} Gyro calibration minimum temperature. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_G0_TREF (`FLOAT`) {#TC_G0_TREF} Gyro calibration reference temperature. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 25.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 25.0 | |   | ### TC_G0_X0_0 (`FLOAT`) {#TC_G0_X0_0} Gyro rate offset temperature ^0 polynomial coefficient - X axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_G0_X0_1 (`FLOAT`) {#TC_G0_X0_1} Gyro rate offset temperature ^0 polynomial coefficient - Y axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_G0_X0_2 (`FLOAT`) {#TC_G0_X0_2} Gyro rate offset temperature ^0 polynomial coefficient - Z axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_G0_X1_0 (`FLOAT`) {#TC_G0_X1_0} Gyro rate offset temperature ^1 polynomial coefficient - X axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_G0_X1_1 (`FLOAT`) {#TC_G0_X1_1} Gyro rate offset temperature ^1 polynomial coefficient - Y axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_G0_X1_2 (`FLOAT`) {#TC_G0_X1_2} Gyro rate offset temperature ^1 polynomial coefficient - Z axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_G0_X2_0 (`FLOAT`) {#TC_G0_X2_0} Gyro rate offset temperature ^2 polynomial coefficient - X axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_G0_X2_1 (`FLOAT`) {#TC_G0_X2_1} Gyro rate offset temperature ^2 polynomial coefficient - Y axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_G0_X2_2 (`FLOAT`) {#TC_G0_X2_2} Gyro rate offset temperature ^2 polynomial coefficient - Z axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_G0_X3_0 (`FLOAT`) {#TC_G0_X3_0} Gyro rate offset temperature ^3 polynomial coefficient - X axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_G0_X3_1 (`FLOAT`) {#TC_G0_X3_1} Gyro rate offset temperature ^3 polynomial coefficient - Y axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_G0_X3_2 (`FLOAT`) {#TC_G0_X3_2} Gyro rate offset temperature ^3 polynomial coefficient - Z axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_G1_ID (`INT32`) {#TC_G1_ID} ID of Gyro that the calibration is for. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### TC_G1_TMAX (`FLOAT`) {#TC_G1_TMAX} Gyro calibration maximum temperature. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 100.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 100.0 | |   | ### TC_G1_TMIN (`FLOAT`) {#TC_G1_TMIN} Gyro calibration minimum temperature. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_G1_TREF (`FLOAT`) {#TC_G1_TREF} Gyro calibration reference temperature. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 25.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 25.0 | |   | ### TC_G1_X0_0 (`FLOAT`) {#TC_G1_X0_0} Gyro rate offset temperature ^0 polynomial coefficient - X axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_G1_X0_1 (`FLOAT`) {#TC_G1_X0_1} Gyro rate offset temperature ^0 polynomial coefficient - Y axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_G1_X0_2 (`FLOAT`) {#TC_G1_X0_2} Gyro rate offset temperature ^0 polynomial coefficient - Z axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_G1_X1_0 (`FLOAT`) {#TC_G1_X1_0} Gyro rate offset temperature ^1 polynomial coefficient - X axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_G1_X1_1 (`FLOAT`) {#TC_G1_X1_1} Gyro rate offset temperature ^1 polynomial coefficient - Y axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_G1_X1_2 (`FLOAT`) {#TC_G1_X1_2} Gyro rate offset temperature ^1 polynomial coefficient - Z axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_G1_X2_0 (`FLOAT`) {#TC_G1_X2_0} Gyro rate offset temperature ^2 polynomial coefficient - X axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_G1_X2_1 (`FLOAT`) {#TC_G1_X2_1} Gyro rate offset temperature ^2 polynomial coefficient - Y axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_G1_X2_2 (`FLOAT`) {#TC_G1_X2_2} Gyro rate offset temperature ^2 polynomial coefficient - Z axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_G1_X3_0 (`FLOAT`) {#TC_G1_X3_0} Gyro rate offset temperature ^3 polynomial coefficient - X axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_G1_X3_1 (`FLOAT`) {#TC_G1_X3_1} Gyro rate offset temperature ^3 polynomial coefficient - Y axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_G1_X3_2 (`FLOAT`) {#TC_G1_X3_2} Gyro rate offset temperature ^3 polynomial coefficient - Z axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_G2_ID (`INT32`) {#TC_G2_ID} ID of Gyro that the calibration is for. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### TC_G2_TMAX (`FLOAT`) {#TC_G2_TMAX} Gyro calibration maximum temperature. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 100.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 100.0 | |   | ### TC_G2_TMIN (`FLOAT`) {#TC_G2_TMIN} Gyro calibration minimum temperature. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_G2_TREF (`FLOAT`) {#TC_G2_TREF} Gyro calibration reference temperature. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 25.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 25.0 | |   | ### TC_G2_X0_0 (`FLOAT`) {#TC_G2_X0_0} Gyro rate offset temperature ^0 polynomial coefficient - X axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_G2_X0_1 (`FLOAT`) {#TC_G2_X0_1} Gyro rate offset temperature ^0 polynomial coefficient - Y axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_G2_X0_2 (`FLOAT`) {#TC_G2_X0_2} Gyro rate offset temperature ^0 polynomial coefficient - Z axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_G2_X1_0 (`FLOAT`) {#TC_G2_X1_0} Gyro rate offset temperature ^1 polynomial coefficient - X axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_G2_X1_1 (`FLOAT`) {#TC_G2_X1_1} Gyro rate offset temperature ^1 polynomial coefficient - Y axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_G2_X1_2 (`FLOAT`) {#TC_G2_X1_2} Gyro rate offset temperature ^1 polynomial coefficient - Z axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_G2_X2_0 (`FLOAT`) {#TC_G2_X2_0} Gyro rate offset temperature ^2 polynomial coefficient - X axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_G2_X2_1 (`FLOAT`) {#TC_G2_X2_1} Gyro rate offset temperature ^2 polynomial coefficient - Y axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_G2_X2_2 (`FLOAT`) {#TC_G2_X2_2} Gyro rate offset temperature ^2 polynomial coefficient - Z axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_G2_X3_0 (`FLOAT`) {#TC_G2_X3_0} Gyro rate offset temperature ^3 polynomial coefficient - X axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_G2_X3_1 (`FLOAT`) {#TC_G2_X3_1} Gyro rate offset temperature ^3 polynomial coefficient - Y axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_G2_X3_2 (`FLOAT`) {#TC_G2_X3_2} Gyro rate offset temperature ^3 polynomial coefficient - Z axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_G3_ID (`INT32`) {#TC_G3_ID} ID of Gyro that the calibration is for. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### TC_G3_TMAX (`FLOAT`) {#TC_G3_TMAX} Gyro calibration maximum temperature. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 100.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 100.0 | |   | ### TC_G3_TMIN (`FLOAT`) {#TC_G3_TMIN} Gyro calibration minimum temperature. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_G3_TREF (`FLOAT`) {#TC_G3_TREF} Gyro calibration reference temperature. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 25.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 25.0 | |   | ### TC_G3_X0_0 (`FLOAT`) {#TC_G3_X0_0} Gyro rate offset temperature ^0 polynomial coefficient - X axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_G3_X0_1 (`FLOAT`) {#TC_G3_X0_1} Gyro rate offset temperature ^0 polynomial coefficient - Y axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_G3_X0_2 (`FLOAT`) {#TC_G3_X0_2} Gyro rate offset temperature ^0 polynomial coefficient - Z axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_G3_X1_0 (`FLOAT`) {#TC_G3_X1_0} Gyro rate offset temperature ^1 polynomial coefficient - X axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_G3_X1_1 (`FLOAT`) {#TC_G3_X1_1} Gyro rate offset temperature ^1 polynomial coefficient - Y axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_G3_X1_2 (`FLOAT`) {#TC_G3_X1_2} Gyro rate offset temperature ^1 polynomial coefficient - Z axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_G3_X2_0 (`FLOAT`) {#TC_G3_X2_0} Gyro rate offset temperature ^2 polynomial coefficient - X axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_G3_X2_1 (`FLOAT`) {#TC_G3_X2_1} Gyro rate offset temperature ^2 polynomial coefficient - Y axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_G3_X2_2 (`FLOAT`) {#TC_G3_X2_2} Gyro rate offset temperature ^2 polynomial coefficient - Z axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_G3_X3_0 (`FLOAT`) {#TC_G3_X3_0} Gyro rate offset temperature ^3 polynomial coefficient - X axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_G3_X3_1 (`FLOAT`) {#TC_G3_X3_1} Gyro rate offset temperature ^3 polynomial coefficient - Y axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_G3_X3_2 (`FLOAT`) {#TC_G3_X3_2} Gyro rate offset temperature ^3 polynomial coefficient - Z axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_G_ENABLE (`INT32`) {#TC_G_ENABLE} Thermal compensation for rate gyro sensors. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### TC_M0_ID (`INT32`) {#TC_M0_ID} ID of Magnetometer that the calibration is for. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### TC_M0_TMAX (`FLOAT`) {#TC_M0_TMAX} Magnetometer calibration maximum temperature. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 100.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 100.0 | |   | ### TC_M0_TMIN (`FLOAT`) {#TC_M0_TMIN} Magnetometer calibration minimum temperature. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_M0_TREF (`FLOAT`) {#TC_M0_TREF} Magnetometer calibration reference temperature. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 25.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 25.0 | |   | ### TC_M0_X0_0 (`FLOAT`) {#TC_M0_X0_0} Magnetometer offset temperature ^0 polynomial coefficient - X axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_M0_X0_1 (`FLOAT`) {#TC_M0_X0_1} Magnetometer offset temperature ^0 polynomial coefficient - Y axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_M0_X0_2 (`FLOAT`) {#TC_M0_X0_2} Magnetometer offset temperature ^0 polynomial coefficient - Z axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_M0_X1_0 (`FLOAT`) {#TC_M0_X1_0} Magnetometer offset temperature ^1 polynomial coefficient - X axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_M0_X1_1 (`FLOAT`) {#TC_M0_X1_1} Magnetometer offset temperature ^1 polynomial coefficient - Y axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_M0_X1_2 (`FLOAT`) {#TC_M0_X1_2} Magnetometer offset temperature ^1 polynomial coefficient - Z axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_M0_X2_0 (`FLOAT`) {#TC_M0_X2_0} Magnetometer offset temperature ^2 polynomial coefficient - X axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_M0_X2_1 (`FLOAT`) {#TC_M0_X2_1} Magnetometer offset temperature ^2 polynomial coefficient - Y axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_M0_X2_2 (`FLOAT`) {#TC_M0_X2_2} Magnetometer offset temperature ^2 polynomial coefficient - Z axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_M0_X3_0 (`FLOAT`) {#TC_M0_X3_0} Magnetometer offset temperature ^3 polynomial coefficient - X axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_M0_X3_1 (`FLOAT`) {#TC_M0_X3_1} Magnetometer offset temperature ^3 polynomial coefficient - Y axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_M0_X3_2 (`FLOAT`) {#TC_M0_X3_2} Magnetometer offset temperature ^3 polynomial coefficient - Z axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_M1_ID (`INT32`) {#TC_M1_ID} ID of Magnetometer that the calibration is for. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### TC_M1_TMAX (`FLOAT`) {#TC_M1_TMAX} Magnetometer calibration maximum temperature. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 100.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 100.0 | |   | ### TC_M1_TMIN (`FLOAT`) {#TC_M1_TMIN} Magnetometer calibration minimum temperature. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_M1_TREF (`FLOAT`) {#TC_M1_TREF} Magnetometer calibration reference temperature. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 25.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 25.0 | |   | ### TC_M1_X0_0 (`FLOAT`) {#TC_M1_X0_0} Magnetometer offset temperature ^0 polynomial coefficient - X axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_M1_X0_1 (`FLOAT`) {#TC_M1_X0_1} Magnetometer offset temperature ^0 polynomial coefficient - Y axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_M1_X0_2 (`FLOAT`) {#TC_M1_X0_2} Magnetometer offset temperature ^0 polynomial coefficient - Z axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_M1_X1_0 (`FLOAT`) {#TC_M1_X1_0} Magnetometer offset temperature ^1 polynomial coefficient - X axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_M1_X1_1 (`FLOAT`) {#TC_M1_X1_1} Magnetometer offset temperature ^1 polynomial coefficient - Y axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_M1_X1_2 (`FLOAT`) {#TC_M1_X1_2} Magnetometer offset temperature ^1 polynomial coefficient - Z axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_M1_X2_0 (`FLOAT`) {#TC_M1_X2_0} Magnetometer offset temperature ^2 polynomial coefficient - X axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_M1_X2_1 (`FLOAT`) {#TC_M1_X2_1} Magnetometer offset temperature ^2 polynomial coefficient - Y axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_M1_X2_2 (`FLOAT`) {#TC_M1_X2_2} Magnetometer offset temperature ^2 polynomial coefficient - Z axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_M1_X3_0 (`FLOAT`) {#TC_M1_X3_0} Magnetometer offset temperature ^3 polynomial coefficient - X axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_M1_X3_1 (`FLOAT`) {#TC_M1_X3_1} Magnetometer offset temperature ^3 polynomial coefficient - Y axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_M1_X3_2 (`FLOAT`) {#TC_M1_X3_2} Magnetometer offset temperature ^3 polynomial coefficient - Z axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_M2_ID (`INT32`) {#TC_M2_ID} ID of Magnetometer that the calibration is for. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### TC_M2_TMAX (`FLOAT`) {#TC_M2_TMAX} Magnetometer calibration maximum temperature. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 100.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 100.0 | |   | ### TC_M2_TMIN (`FLOAT`) {#TC_M2_TMIN} Magnetometer calibration minimum temperature. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_M2_TREF (`FLOAT`) {#TC_M2_TREF} Magnetometer calibration reference temperature. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 25.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 25.0 | |   | ### TC_M2_X0_0 (`FLOAT`) {#TC_M2_X0_0} Magnetometer offset temperature ^0 polynomial coefficient - X axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_M2_X0_1 (`FLOAT`) {#TC_M2_X0_1} Magnetometer offset temperature ^0 polynomial coefficient - Y axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_M2_X0_2 (`FLOAT`) {#TC_M2_X0_2} Magnetometer offset temperature ^0 polynomial coefficient - Z axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_M2_X1_0 (`FLOAT`) {#TC_M2_X1_0} Magnetometer offset temperature ^1 polynomial coefficient - X axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_M2_X1_1 (`FLOAT`) {#TC_M2_X1_1} Magnetometer offset temperature ^1 polynomial coefficient - Y axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_M2_X1_2 (`FLOAT`) {#TC_M2_X1_2} Magnetometer offset temperature ^1 polynomial coefficient - Z axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_M2_X2_0 (`FLOAT`) {#TC_M2_X2_0} Magnetometer offset temperature ^2 polynomial coefficient - X axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_M2_X2_1 (`FLOAT`) {#TC_M2_X2_1} Magnetometer offset temperature ^2 polynomial coefficient - Y axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_M2_X2_2 (`FLOAT`) {#TC_M2_X2_2} Magnetometer offset temperature ^2 polynomial coefficient - Z axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_M2_X3_0 (`FLOAT`) {#TC_M2_X3_0} Magnetometer offset temperature ^3 polynomial coefficient - X axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_M2_X3_1 (`FLOAT`) {#TC_M2_X3_1} Magnetometer offset temperature ^3 polynomial coefficient - Y axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_M2_X3_2 (`FLOAT`) {#TC_M2_X3_2} Magnetometer offset temperature ^3 polynomial coefficient - Z axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_M3_ID (`INT32`) {#TC_M3_ID} ID of Magnetometer that the calibration is for. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### TC_M3_TMAX (`FLOAT`) {#TC_M3_TMAX} Magnetometer calibration maximum temperature. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 100.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 100.0 | |   | ### TC_M3_TMIN (`FLOAT`) {#TC_M3_TMIN} Magnetometer calibration minimum temperature. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_M3_TREF (`FLOAT`) {#TC_M3_TREF} Magnetometer calibration reference temperature. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 25.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 25.0 | |   | ### TC_M3_X0_0 (`FLOAT`) {#TC_M3_X0_0} Magnetometer offset temperature ^0 polynomial coefficient - X axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_M3_X0_1 (`FLOAT`) {#TC_M3_X0_1} Magnetometer offset temperature ^0 polynomial coefficient - Y axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_M3_X0_2 (`FLOAT`) {#TC_M3_X0_2} Magnetometer offset temperature ^0 polynomial coefficient - Z axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_M3_X1_0 (`FLOAT`) {#TC_M3_X1_0} Magnetometer offset temperature ^1 polynomial coefficient - X axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_M3_X1_1 (`FLOAT`) {#TC_M3_X1_1} Magnetometer offset temperature ^1 polynomial coefficient - Y axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_M3_X1_2 (`FLOAT`) {#TC_M3_X1_2} Magnetometer offset temperature ^1 polynomial coefficient - Z axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_M3_X2_0 (`FLOAT`) {#TC_M3_X2_0} Magnetometer offset temperature ^2 polynomial coefficient - X axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_M3_X2_1 (`FLOAT`) {#TC_M3_X2_1} Magnetometer offset temperature ^2 polynomial coefficient - Y axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_M3_X2_2 (`FLOAT`) {#TC_M3_X2_2} Magnetometer offset temperature ^2 polynomial coefficient - Z axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_M3_X3_0 (`FLOAT`) {#TC_M3_X3_0} Magnetometer offset temperature ^3 polynomial coefficient - X axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_M3_X3_1 (`FLOAT`) {#TC_M3_X3_1} Magnetometer offset temperature ^3 polynomial coefficient - Y axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_M3_X3_2 (`FLOAT`) {#TC_M3_X3_2} Magnetometer offset temperature ^3 polynomial coefficient - Z axis. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | |   | ### TC_M_ENABLE (`INT32`) {#TC_M_ENABLE} Thermal compensation for magnetometer sensors. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ## Transponder @@ -40586,9 +42692,9 @@ Sagetech External Configuration Mode. Disables auto-configuration mode enabling MXS config through external software. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### MXS_OP_MODE (`INT32`) {#MXS_OP_MODE} @@ -40603,9 +42709,9 @@ This parameter defines the operating mode of the MXS - `2`: Standby - `3`: Alt -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 3 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 3 | | 0 | |   | ### MXS_SER_CFG (`INT32`) {#MXS_SER_CFG} @@ -40628,9 +42734,9 @@ Configure on which serial port to run Sagetech MXS Serial Port. - `301`: Wifi Port - `401`: EXT2 -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### MXS_TARG_PORT (`INT32`) {#MXS_TARG_PORT} @@ -40644,9 +42750,9 @@ The MXS communication port to receive Target data from - `1`: COM0 - `2`: COM1 -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 2 | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 2 | | 1 | |   | ## UAVCAN @@ -40654,17 +42760,17 @@ The MXS communication port to receive Target data from UAVCAN CAN bus bitrate. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 20000 | 1000000 | | 1000000 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 20000 | 1000000 | | 1000000 | |   | ### CANNODE_NODE_ID (`INT32`) {#CANNODE_NODE_ID} UAVCAN CAN node ID (0 for dynamic allocation). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 127 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 127 | | 0 | |   | ### CANNODE_PUB_BAR (`INT32`) {#CANNODE_PUB_BAR} @@ -40673,17 +42779,17 @@ Enable barometer publication. Enables publication of static pressure and static temperature from the barometer sensor over UAVCAN. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ----------- | ---- | -| ✓ | | 1 | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ----------- | ---- | --------- | +| ✓ | | 1 | | Enabled (1) | |   | ### CANNODE_PUB_IMU (`INT32`) {#CANNODE_PUB_IMU} Enable RawIMU pub. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------------ | ---- | -|   | | 1 | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------------ | ---- | --------- | +|   | | 1 | | Disabled (0) | |   | ### CANNODE_PUB_MAG (`INT32`) {#CANNODE_PUB_MAG} @@ -40692,63 +42798,64 @@ Enable magnetometer publication. Enables publication of magnetic field strength from the magnetometer sensor over UAVCAN. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ----------- | ---- | -| ✓ | | 1 | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ----------- | ---- | --------- | +| ✓ | | 1 | | Enabled (1) | |   | ### CANNODE_PUB_MBD (`INT32`) {#CANNODE_PUB_MBD} Enable MovingBaselineData publication. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### CANNODE_SUB_MBD (`INT32`) {#CANNODE_SUB_MBD} Enable MovingBaselineData subscription. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | 1 | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | 1 | | Disabled (0) | |   | ### CANNODE_SUB_RTCM (`INT32`) {#CANNODE_SUB_RTCM} Enable RTCM subscription. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### CANNODE_TERM (`INT32`) {#CANNODE_TERM} CAN built-in bus termination. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------------ | ---- | -|   | | 1 | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------------ | ---- | --------- | +|   | | 1 | | Disabled (0) | |   | ### SIM_GZ_EN (`INT32`) {#SIM_GZ_EN} Simulator Gazebo bridge enable. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### UAVCAN_BITRATE (`INT32`) {#UAVCAN_BITRATE} UAVCAN CAN bus bitrate. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ----- | -| ✓ | 20000 | 1000000 | | 1000000 | bit/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ----- | --------- | +| ✓ | 20000 | 1000000 | | 1000000 | bit/s |   | ### UAVCAN_ECU_FUELT (`INT32`) {#UAVCAN_ECU_FUELT} UAVCAN fuel tank fuel type. This parameter defines the type of fuel used in the vehicle's fuel tank. + 0: Unknown 1: Liquid (e.g., gasoline, diesel) 2: Gas (e.g., hydrogen, methane, propane) @@ -40759,9 +42866,9 @@ This parameter defines the type of fuel used in the vehicle's fuel tank. - `1`: Liquid - `2`: Gas -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 2 | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 2 | | 1 | |   | ### UAVCAN_ECU_MAXF (`FLOAT`) {#UAVCAN_ECU_MAXF} @@ -40769,9 +42876,9 @@ UAVCAN fuel tank maximum capacity. This parameter defines the maximum fuel capacity of the vehicle's fuel tank. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ------ | -| ✓ | 0.0 | 100000.0 | 0.1 | 15.0 | liters | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ------ | --------- | +| ✓ | 0.0 | 100000.0 | 0.1 | 15.0 | liters |   | ### UAVCAN_ENABLE (`INT32`) {#UAVCAN_ENABLE} @@ -40789,9 +42896,9 @@ UAVCAN mode. - `2`: Sensors Automatic Config - `3`: Sensors and Actuators (ESCs) Automatic Config -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 3 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 3 | | 0 | |   | ### UAVCAN_ESC_IFACE (`INT32`) {#UAVCAN_ESC_IFACE} @@ -40813,16 +42920,87 @@ starve other nodes on the bus. - `6`: CAN7 - `7`: CAN8 -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 1 | 255 | | 255 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 1 | 255 | | 255 | |   | -### UAVCAN_LGT_ANTCL (`INT32`) {#UAVCAN_LGT_ANTCL} +### UAVCAN_LGT_FN0 (`INT32`) {#UAVCAN_LGT_FN0} -UAVCAN ANTI_COLLISION light operating mode. +Light 0 function. + +Function for light 0. +UAVCAN_LGT_MODE determines when the first option or second option is active Off/On. + +**Values:** + +- `0`: Status/Status +- `1`: Off/White +- `2`: Off/Red +- `3`: Off/Green +- `4`: Status/White +- `5`: Status/Red +- `6`: Status/Green +- `7`: Status/Off + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 9 | | 0 | |   | + +### UAVCAN_LGT_FN1 (`INT32`) {#UAVCAN_LGT_FN1} + +Light 1 function. + +Function for light 1. +UAVCAN_LGT_MODE determines when the first option or second option is active Off/On. + +**Values:** + +- `0`: Status/Status +- `1`: Off/White +- `2`: Off/Red +- `3`: Off/Green +- `4`: Status/White +- `5`: Status/Red +- `6`: Status/Green +- `7`: Status/Off + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 9 | | 0 | |   | + +### UAVCAN_LGT_ID0 (`INT32`) {#UAVCAN_LGT_ID0} + +Light 0 ID. + +specifies the light_id value for light 0 in UAVCAN LightsCommand messages. +This determines which physical LED responds to commands for this light slot. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 255 | | 0 | |   | + +### UAVCAN_LGT_ID1 (`INT32`) {#UAVCAN_LGT_ID1} + +Light 1 ID. + +specifies the light_id value for light 1 in UAVCAN LightsCommand messages. +This determines which physical LED responds to commands for this light slot. + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 255 | | 0 | |   | + +### UAVCAN_LGT_MODE (`INT32`) {#UAVCAN_LGT_MODE} + +UAVCAN Navigation light operating mode. This parameter defines the minimum condition under which the system will command -lights with anti-collision function to turn on (white). +Navigation lights to turn on. Affects lights with functions: Anti-collision, Colored Navigation Lights or Hybrid lights. + +For hybrid functions (StatusOrAntiCollision, etc.), the light +displays status colors when this mode is inactive, and switches to the +navigation light function when this mode becomes active. + 0 - Always off 1 - When autopilot is armed 2 - When autopilot is prearmed @@ -40835,93 +43013,9 @@ lights with anti-collision function to turn on (white). - `2`: When autopilot is prearmed - `3`: Always on -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 3 | | 2 | - -### UAVCAN_LGT_FN0 (`INT32`) {#UAVCAN_LGT_FN0} - -Light 0 function. - -Function assigned to light 0. -0: Status - displays system status colors -1: Anti-collision - white beacon controlled by LGT_ANTCL parameter - -**Values:** - -- `0`: Status Light -- `1`: Anti-collision Light - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1 | | 0 | - -### UAVCAN_LGT_FN1 (`INT32`) {#UAVCAN_LGT_FN1} - -Light 1 function. - -Function assigned to light 1. -0: Status - displays system status colors -1: Anti-collision - white beacon controlled by LGT_ANTCL parameter - -**Values:** - -- `0`: Status Light -- `1`: Anti-collision Light - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1 | | 0 | - -### UAVCAN_LGT_FN2 (`INT32`) {#UAVCAN_LGT_FN2} - -Light 2 function. - -Function assigned to light 2. -0: Status - displays system status colors -1: Anti-collision - white beacon controlled by LGT_ANTCL parameter - -**Values:** - -- `0`: Status Light -- `1`: Anti-collision Light - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1 | | 0 | - -### UAVCAN_LGT_ID0 (`INT32`) {#UAVCAN_LGT_ID0} - -Light 0 ID. - -specifies the light_id value for light 0 in UAVCAN LightsCommand messages. -This determines which physical LED responds to commands for this light slot. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 255 | | 0 | - -### UAVCAN_LGT_ID1 (`INT32`) {#UAVCAN_LGT_ID1} - -Light 1 ID. - -specifies the light_id value for light 1 in UAVCAN LightsCommand messages. -This determines which physical LED responds to commands for this light slot. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 255 | | 0 | - -### UAVCAN_LGT_ID2 (`INT32`) {#UAVCAN_LGT_ID2} - -Light 2 ID. - -specifies the light_id value for light 2 in UAVCAN LightsCommand messages. -This determines which physical LED responds to commands for this light slot. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 255 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 3 | | 1 | |   | ### UAVCAN_LGT_NUM (`INT32`) {#UAVCAN_LGT_NUM} @@ -40931,9 +43025,9 @@ Number of lights to control via UAVCAN LightsCommand messages. Set to 0 to disable UAVCAN light control. Each light uses two parameters: LGT_IDx for the light_id and LGT_FNx for the function. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 3 | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 2 | | 1 | |   | ### UAVCAN_NODE_ID (`INT32`) {#UAVCAN_NODE_ID} @@ -40941,9 +43035,9 @@ UAVCAN Node ID. Read the specs at https://dronecan.github.io/ to learn more about Node ID. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 1 | 125 | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 1 | 125 | | 1 | |   | ### UAVCAN_PUB_ARM (`INT32`) {#UAVCAN_PUB_ARM} @@ -40952,9 +43046,9 @@ publish Arming Status stream. Enable UAVCAN Arming Status stream publication uavcan::equipment::safety::ArmingStatus -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### UAVCAN_PUB_MBD (`INT32`) {#UAVCAN_PUB_MBD} @@ -40963,9 +43057,9 @@ publish moving baseline data RTCM stream. Enable UAVCAN RTCM stream publication ardupilot::gnss::MovingBaselineData -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### UAVCAN_PUB_RTCM (`INT32`) {#UAVCAN_PUB_RTCM} @@ -40974,9 +43068,9 @@ publish RTCM stream. Enable UAVCAN RTCM stream publication uavcan::equipment::gnss::RTCMStream -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### UAVCAN_RNG_MAX (`FLOAT`) {#UAVCAN_RNG_MAX} @@ -40984,9 +43078,9 @@ UAVCAN rangefinder maximum range. This parameter defines the maximum valid range for a rangefinder connected via UAVCAN. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 999.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 999.0 | m |   | ### UAVCAN_RNG_MIN (`FLOAT`) {#UAVCAN_RNG_MIN} @@ -40994,9 +43088,9 @@ UAVCAN rangefinder minimum range. This parameter defines the minimum valid range for a rangefinder connected via UAVCAN. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.0 | m |   | ### UAVCAN_SUB_ASPD (`INT32`) {#UAVCAN_SUB_ASPD} @@ -41007,9 +43101,9 @@ uavcan::equipment::air_data::IndicatedAirspeed uavcan::equipment::air_data::TrueAirspeed uavcan::equipment::air_data::StaticTemperature -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### UAVCAN_SUB_BARO (`INT32`) {#UAVCAN_SUB_BARO} @@ -41019,9 +43113,9 @@ Enable UAVCAN barometer subscription. uavcan::equipment::air_data::StaticPressure uavcan::equipment::air_data::StaticTemperature -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### UAVCAN_SUB_BAT (`INT32`) {#UAVCAN_SUB_BAT} @@ -41031,6 +43125,7 @@ Enable UAVCAN battery subscription. uavcan::equipment::power::BatteryInfo ardupilot::equipment::power::BatteryInfoAux cuav::equipment::power::CBAT + 0 - Disable 1 - Use raw data. Recommended for Smart battery 2 - Filter the data with internal battery library (unsupported with CBAT) @@ -41041,9 +43136,9 @@ cuav::equipment::power::CBAT - `1`: Raw data - `2`: Filter data -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 2 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 2 | | 0 | |   | ### UAVCAN_SUB_BTN (`INT32`) {#UAVCAN_SUB_BTN} @@ -41052,9 +43147,9 @@ subscription button. Enable UAVCAN button subscription. ardupilot::indication::Button -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### UAVCAN_SUB_DPRES (`INT32`) {#UAVCAN_SUB_DPRES} @@ -41063,9 +43158,9 @@ subscription differential pressure. Enable UAVCAN differential pressure subscription. uavcan::equipment::air_data::RawAirData -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### UAVCAN_SUB_FLOW (`INT32`) {#UAVCAN_SUB_FLOW} @@ -41073,9 +43168,9 @@ subscription flow. Enable UAVCAN optical flow subscription. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### UAVCAN_SUB_FUEL (`INT32`) {#UAVCAN_SUB_FUEL} @@ -41083,9 +43178,9 @@ subscription fuel tank. Enable UAVCAN fuel tank status subscription. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### UAVCAN_SUB_GPS (`INT32`) {#UAVCAN_SUB_GPS} @@ -41096,9 +43191,9 @@ uavcan::equipment::gnss::Fix uavcan::equipment::gnss::Fix2 uavcan::equipment::gnss::Auxiliary -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ----------- | ---- | -| ✓ | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ----------- | ---- | --------- | +| ✓ | | | | Enabled (1) | |   | ### UAVCAN_SUB_GPS_R (`INT32`) {#UAVCAN_SUB_GPS_R} @@ -41107,9 +43202,9 @@ subscription GPS Relative. Enable UAVCAN GPS Relative subscription. ardupilot::gnss::RelPosHeading -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ----------- | ---- | -| ✓ | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ----------- | ---- | --------- | +| ✓ | | | | Enabled (1) | |   | ### UAVCAN_SUB_HYGRO (`INT32`) {#UAVCAN_SUB_HYGRO} @@ -41118,9 +43213,9 @@ subscription hygrometer. Enable UAVCAN hygrometer subscriptions. dronecan::sensors::hygrometer::Hygrometer -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### UAVCAN_SUB_ICE (`INT32`) {#UAVCAN_SUB_ICE} @@ -41129,9 +43224,9 @@ subscription ICE. Enable UAVCAN internal combustion engine (ICE) subscription. uavcan::equipment::ice::reciprocating::Status -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### UAVCAN_SUB_IMU (`INT32`) {#UAVCAN_SUB_IMU} @@ -41140,9 +43235,9 @@ subscription IMU. Enable UAVCAN IMU subscription. uavcan::equipment::ahrs::RawIMU -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### UAVCAN_SUB_MAG (`INT32`) {#UAVCAN_SUB_MAG} @@ -41152,9 +43247,9 @@ Enable UAVCAN mag subscription. uavcan::equipment::ahrs::MagneticFieldStrength uavcan::equipment::ahrs::MagneticFieldStrength2 -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ----------- | ---- | -| ✓ | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ----------- | ---- | --------- | +| ✓ | | | | Enabled (1) | |   | ### UAVCAN_SUB_MBD (`INT32`) {#UAVCAN_SUB_MBD} @@ -41163,9 +43258,9 @@ subscription MovingBaselineData. Enable UAVCAN MovingBaselineData subscription. ardupilot::gnss::MovingBaselineData -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### UAVCAN_SUB_RNG (`INT32`) {#UAVCAN_SUB_RNG} @@ -41174,9 +43269,9 @@ subscription range finder. Enable UAVCAN range finder subscription. uavcan::equipment::range_sensor::Measurement -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ## UUV Attitude Control @@ -41184,241 +43279,245 @@ uavcan::equipment::range_sensor::Measurement Height rc-button down. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 16 | | 12 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 16 | | 12 | |   | ### UUV_HGT_B_UP (`INT32`) {#UUV_HGT_B_UP} Height rc-button up. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 16 | | 11 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 16 | | 11 | |   | ### UUV_HGT_D (`FLOAT`) {#UUV_HGT_D} Height differential gain. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 1.0 | |   | ### UUV_HGT_I (`FLOAT`) {#UUV_HGT_I} Height integrational gain. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.2 | |   | ### UUV_HGT_I_SPD (`FLOAT`) {#UUV_HGT_I_SPD} sum speed of error for integrational gain. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 1.0 | |   | ### UUV_HGT_MAX_DIFF (`FLOAT`) {#UUV_HGT_MAX_DIFF} -maximum Height distance controlled by manual input. Diff between actual and desired Height cant be higher than that. +Max height error from manual input. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.3 | +maximum Height distance controlled by manual input. Diff between actual and desired Height cannot be higher than that + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.3 | |   | ### UUV_HGT_P (`FLOAT`) {#UUV_HGT_P} Height proportional gain. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 1.0 | |   | ### UUV_HGT_STR (`FLOAT`) {#UUV_HGT_STR} Height change strength from manual input. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 1.0 | |   | ### UUV_MGM_PITCH (`FLOAT`) {#UUV_MGM_PITCH} Pitch gain for manual inputs in manual control mode. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | | | 0.05 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | | | 0.05 | |   | ### UUV_MGM_ROLL (`FLOAT`) {#UUV_MGM_ROLL} Roll gain for manual inputs in manual control mode. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | | | 0.05 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | | | 0.05 | |   | ### UUV_MGM_THRTL (`FLOAT`) {#UUV_MGM_THRTL} Throttle gain for manual inputs in manual control mode. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | | | 0.1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | | | 0.1 | |   | ### UUV_MGM_YAW (`FLOAT`) {#UUV_MGM_YAW} Yaw gain for manual inputs in manual control mode. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | | | 0.05 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | | | 0.05 | |   | ### UUV_PITCH_D (`FLOAT`) {#UUV_PITCH_D} Pitch differential gain. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 2.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 2.0 | |   | ### UUV_PITCH_P (`FLOAT`) {#UUV_PITCH_P} Pitch proportional gain. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 4.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 4.0 | |   | ### UUV_RGM_PITCH (`FLOAT`) {#UUV_RGM_PITCH} Pitch gain for manual inputs in rate control mode. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | | | 100.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | | | 100.0 | |   | ### UUV_RGM_ROLL (`FLOAT`) {#UUV_RGM_ROLL} Roll gain for manual inputs in rate control mode. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | | | 100.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | | | 100.0 | |   | ### UUV_RGM_THRTL (`FLOAT`) {#UUV_RGM_THRTL} Throttle gain for manual inputs in rate control mode. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | | | 10.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | | | 10.0 | |   | ### UUV_RGM_YAW (`FLOAT`) {#UUV_RGM_YAW} Yaw gain for manual inputs in rate control mode. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | | | 100.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | | | 100.0 | |   | ### UUV_ROLL_D (`FLOAT`) {#UUV_ROLL_D} Roll differential gain. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 1.5 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 1.5 | |   | ### UUV_ROLL_P (`FLOAT`) {#UUV_ROLL_P} Roll proportional gain. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 4.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 4.0 | |   | ### UUV_SGM_PITCH (`FLOAT`) {#UUV_SGM_PITCH} Pitch gain for manual inputs in attitude control mode. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | | | 0.5 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | | | 0.5 | |   | ### UUV_SGM_ROLL (`FLOAT`) {#UUV_SGM_ROLL} Roll gain for manual inputs in attitude control mode. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | | | 0.5 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | | | 0.5 | |   | ### UUV_SGM_THRTL (`FLOAT`) {#UUV_SGM_THRTL} Throttle gain for manual inputs in attitude control mode. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | | | 0.1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | | | 0.1 | |   | ### UUV_SGM_YAW (`FLOAT`) {#UUV_SGM_YAW} Yaw gain for manual inputs in attitude control mode. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | | | 0.5 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | | | 0.5 | |   | ### UUV_SP_MAX_AGE (`FLOAT`) {#UUV_SP_MAX_AGE} Maximum time (in seconds) before resetting setpoint. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 2.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 2.0 | |   | ### UUV_STICK_MODE (`INT32`) {#UUV_STICK_MODE} -Stick mode selector (0=Heave/sway control, roll/pitch leveled; 1=Pitch/roll control). +UUV stick input mode. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 1 | | 0 | +Stick mode selector (0=Heave/sway control, roll/pitch leveled; 1=Pitch/roll control) + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 1 | | 0 | |   | ### UUV_THRUST_SAT (`FLOAT`) {#UUV_THRUST_SAT} UUV Thrust setpoint Saturation. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 1.0 | | 0.1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 1.0 | | 0.1 | |   | ### UUV_TORQUE_SAT (`FLOAT`) {#UUV_TORQUE_SAT} UUV Torque setpoint Saturation. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 1.0 | | 0.3 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 1.0 | | 0.3 | |   | ### UUV_YAW_D (`FLOAT`) {#UUV_YAW_D} Yaw differential gain. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 2.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 2.0 | |   | ### UUV_YAW_P (`FLOAT`) {#UUV_YAW_P} Yawh proportional gain. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 4.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 4.0 | |   | ## UUV Position Control @@ -41426,57 +43525,57 @@ Yawh proportional gain. Gain of D controller X. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.2 | |   | ### UUV_GAIN_X_P (`FLOAT`) {#UUV_GAIN_X_P} Gain of P controller X. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 1.0 | |   | ### UUV_GAIN_Y_D (`FLOAT`) {#UUV_GAIN_Y_D} Gain of D controller Y. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.2 | |   | ### UUV_GAIN_Y_P (`FLOAT`) {#UUV_GAIN_Y_P} Gain of P controller Y. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 1.0 | |   | ### UUV_GAIN_Z_D (`FLOAT`) {#UUV_GAIN_Z_D} Gain of D controller Z. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.2 | |   | ### UUV_GAIN_Z_P (`FLOAT`) {#UUV_GAIN_Z_P} Gain of P controller Z. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 1.0 | |   | ### UUV_PGM_VEL (`FLOAT`) {#UUV_PGM_VEL} Gain for position control velocity setpoint update. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.5 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.5 | |   | ### UUV_POS_MODE (`INT32`) {#UUV_POS_MODE} @@ -41487,17 +43586,17 @@ Stabilization mode(1) or Position Control(0). - `0`: Moves position setpoint in world frame - `1`: Moves position setpoint in body frame -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 1 | |   | ### UUV_POS_STICK_DB (`FLOAT`) {#UUV_POS_STICK_DB} Deadband for changing position setpoint. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0.1 | |   | ### UUV_STAB_MODE (`INT32`) {#UUV_STAB_MODE} @@ -41508,9 +43607,9 @@ Stabilization mode(1) or Position Control(0). - `0`: Tracks previous attitude setpoint - `1`: Tracks horizontal attitude (allows yaw change) -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 1 | |   | ## UWB @@ -41520,9 +43619,9 @@ UWB sensor X offset in body frame. UWB sensor positioning in relation to Drone in NED. X offset. A Positive offset results in a Position o -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | 0.01 | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | 0.01 | 0.0 | m |   | ### UWB_INIT_OFF_Y (`FLOAT`) {#UWB_INIT_OFF_Y} @@ -41530,9 +43629,9 @@ UWB sensor Y offset in body frame. UWB sensor positioning in relation to Drone in NED. Y offset. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | 0.01 | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | 0.01 | 0.0 | m |   | ### UWB_INIT_OFF_Z (`FLOAT`) {#UWB_INIT_OFF_Z} @@ -41540,9 +43639,9 @@ UWB sensor Z offset in body frame. UWB sensor positioning in relation to Drone in NED. Z offset. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | 0.01 | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | 0.01 | 0.0 | m |   | ### UWB_PORT_CFG (`INT32`) {#UWB_PORT_CFG} @@ -41565,9 +43664,9 @@ Configure on which serial port to run Ultrawideband position sensor driver. - `301`: Wifi Port - `401`: EXT2 -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### UWB_SENS_ROT (`INT32`) {#UWB_SENS_ROT} @@ -41619,9 +43718,9 @@ The orientation of the sensor relative to the forward direction of the body fram - `39`: ROTATION_PITCH_315 - `40`: ROTATION_ROLL_90_PITCH_315 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ## UXRCE-DDS Client @@ -41635,9 +43734,9 @@ Decimal dot notation is not supported. IP address must be provided in int32 format. For example, 192.168.1.2 is mapped to -1062731518; 127.0.0.1 is mapped to 2130706433. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ---------- | ---- | -| ✓ | | | | 2130706433 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ---------- | ---- | --------- | +| ✓ | | | | 2130706433 | |   | ### UXRCE_DDS_CFG (`INT32`) {#UXRCE_DDS_CFG} @@ -41661,9 +43760,9 @@ Configure on which serial port to run UXRCE-DDS Client. - `401`: EXT2 - `1000`: Ethernet -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### UXRCE_DDS_DOM_ID (`INT32`) {#UXRCE_DDS_DOM_ID} @@ -41671,9 +43770,9 @@ uXRCE-DDS domain ID. uXRCE-DDS domain ID -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### UXRCE_DDS_FLCTRL (`INT32`) {#UXRCE_DDS_FLCTRL} @@ -41682,9 +43781,9 @@ Enable serial flow control for UXRCE interface. This is used to enable flow control for the serial uXRCE instance. Used for reliable high bandwidth communication. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### UXRCE_DDS_KEY (`INT32`) {#UXRCE_DDS_KEY} @@ -41694,9 +43793,9 @@ uXRCE-DDS key, must be different from zero. In a single agent - multi client configuration, each client must have a unique session key. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 1 | |   | ### UXRCE_DDS_NS_IDX (`INT32`) {#UXRCE_DDS_NS_IDX} @@ -41705,9 +43804,9 @@ Define an index-based message namespace. Defines an index-based namespace for DDS messages, e.g, uav_0, uav_1, up to uav_9999 A value less than zero leaves the namespace empty -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | -1 | 9999 | | -1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | -1 | 9999 | | -1 | |   | ### UXRCE_DDS_PRT (`INT32`) {#UXRCE_DDS_PRT} @@ -41716,9 +43815,9 @@ uXRCE-DDS UDP port. If ethernet is enabled and is the selected configuration for uXRCE-DDS, the selected UDP port will be set and used. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 65535 | | 8888 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 65535 | | 8888 | |   | ### UXRCE_DDS_PTCFG (`INT32`) {#UXRCE_DDS_PTCFG} @@ -41736,9 +43835,9 @@ Set the participant configuration on the Agent's system. - `1`: Localhost-only - `2`: Custom participant -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 2 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 2 | | 0 | |   | ### UXRCE_DDS_RX_TO (`INT32`) {#UXRCE_DDS_RX_TO} @@ -41747,9 +43846,9 @@ RX rate timeout configuration. Specifies after how many seconds without receiving data the DDS connection is reestablished. A value less than one disables the RX rate timeout. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | -1 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | -1 | s |   | ### UXRCE_DDS_SYNCC (`INT32`) {#UXRCE_DDS_SYNCC} @@ -41757,9 +43856,9 @@ Enable uXRCE-DDS system clock synchronization. When enabled along with UXRCE_DDS_SYNCT, uxrce_dds_client will set the system clock using the agents UTC timestamp. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ### UXRCE_DDS_SYNCT (`INT32`) {#UXRCE_DDS_SYNCT} @@ -41767,9 +43866,9 @@ Enable uXRCE-DDS timestamp synchronization. When enabled, uxrce_dds_client will synchronize the timestamps of the incoming and outgoing messages measuring the offset between the Agent OS time and the PX4 time. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ----------- | ---- | -| ✓ | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ----------- | ---- | --------- | +| ✓ | | | | Enabled (1) | |   | ### UXRCE_DDS_TX_TO (`INT32`) {#UXRCE_DDS_TX_TO} @@ -41778,9 +43877,9 @@ TX rate timeout configuration. Specifies after how many seconds without sending data the DDS connection is reestablished. A value less than one disables the TX rate timeout. -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 3 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 3 | s |   | ## VOXL ESC @@ -41790,9 +43889,9 @@ UART ESC baud rate. Default rate is 250Kbps, which is used in off-the-shelf MoadalAI ESC products. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | | | | 250000 | bit/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | | | | 250000 | bit/s |   | ### VOXL_ESC_CMD (`INT32`) {#VOXL_ESC_CMD} @@ -41805,9 +43904,9 @@ Selects between RPM or PWM commands - `0`: - RPM - `1`: - PWM -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 1 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 1 | | 0 | |   | ### VOXL_ESC_CONFIG (`INT32`) {#VOXL_ESC_CONFIG} @@ -41820,9 +43919,9 @@ Selects what type of UART ESC, if any, is being used. - `0`: - Disabled - `1`: - VOXL ESC -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 1 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 1 | | 0 | |   | ### VOXL_ESC_GPIO_CH (`INT32`) {#VOXL_ESC_GPIO_CH} @@ -41832,9 +43931,9 @@ GPIO Control Channel. - `0`: - Disabled -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 6 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 6 | | 0 | |   | ### VOXL_ESC_MODE (`INT32`) {#VOXL_ESC_MODE} @@ -41849,9 +43948,9 @@ Selects what type of mode is enabled, if any - `2`: - Turtle Mode enabled via AUX2 - `3`: - UART Passthrough Mode -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 2 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 3 | | 0 | |   | ### VOXL_ESC_PUB_BST (`INT32`) {#VOXL_ESC_PUB_BST} @@ -41864,9 +43963,9 @@ Only applicable to ESCs that report total battery voltage and current - `0`: - Disabled - `1`: - Enabled -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 1 | | 1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 1 | | 1 | |   | ### VOXL_ESC_PWR_MIN (`FLOAT`) {#VOXL_ESC_PWR_MIN} @@ -41876,9 +43975,9 @@ Minimum motor power for ESC when VOXL_ESC_CMD is set for PWM. Make sure to set this high enough so that the motors are always spinning while armed. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 1.0 | | 0.05 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 1.0 | | 0.05 | |   | ### VOXL_ESC_RPM_MAX (`INT32`) {#VOXL_ESC_RPM_MAX} @@ -41886,9 +43985,9 @@ UART ESC RPM Max. Maximum RPM for ESC -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 15000 | rpm | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 15000 | rpm |   | ### VOXL_ESC_RPM_MIN (`INT32`) {#VOXL_ESC_RPM_MIN} @@ -41896,9 +43995,9 @@ UART ESC RPM Min. Minimum RPM for ESC -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 5500 | rpm | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 5500 | rpm |   | ### VOXL_ESC_SDIR1 (`INT32`) {#VOXL_ESC_SDIR1} @@ -41909,9 +44008,9 @@ UART ESC ID 1 Spin Direction Flag. - `0`: - Default - `1`: - Reverse -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### VOXL_ESC_SDIR2 (`INT32`) {#VOXL_ESC_SDIR2} @@ -41922,9 +44021,9 @@ UART ESC ID 2 Spin Direction Flag. - `0`: - Default - `1`: - Reverse -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### VOXL_ESC_SDIR3 (`INT32`) {#VOXL_ESC_SDIR3} @@ -41935,9 +44034,9 @@ UART ESC ID 3 Spin Direction Flag. - `0`: - Default - `1`: - Reverse -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### VOXL_ESC_SDIR4 (`INT32`) {#VOXL_ESC_SDIR4} @@ -41948,41 +44047,59 @@ UART ESC ID 4 Spin Direction Flag. - `0`: - Default - `1`: - Reverse -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### VOXL_ESC_T_COSP (`FLOAT`) {#VOXL_ESC_T_COSP} UART ESC Turtle Mode Cosphi. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.000 | 1.000 | 0.001 | 0.990 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 1.0 | 0.001 | 0.99 | |   | ### VOXL_ESC_T_DEAD (`INT32`) {#VOXL_ESC_T_DEAD} UART ESC Turtle Mode Crash Flip Motor Deadband. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 100 | 1 | 20 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 100 | 1 | 20 | |   | ### VOXL_ESC_T_EXPO (`INT32`) {#VOXL_ESC_T_EXPO} UART ESC Turtle Mode Crash Flip Motor expo. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 100 | 1 | 35 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 100 | 1 | 35 | |   | ### VOXL_ESC_T_MINF (`FLOAT`) {#VOXL_ESC_T_MINF} UART ESC Turtle Mode Crash Flip Motor STICK_MINF. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 100.0 | 1.0 | 0.15 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 100.0 | 1.0 | 0.15 | |   | + +### VOXL_ESC_T_ON (`INT32`) {#VOXL_ESC_T_ON} + +UART ESC Turtle Mode button index for MAVLink manual control. + +Specifies which button in the MAVLink MANUAL_CONTROL buttons field +activates turtle mode. Only used when data source is a MAVLink instance. +When data source is RC, turtle mode activation uses the AUX channel +selected by VOXL_ESC_MODE instead. +Set to -1 to disable turtle mode activation via MAVLink buttons. + +**Values:** + +- `-1`: Disabled + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | -1 | 15 | | -1 | |   | ### VOXL_ESC_T_OVER (`INT32`) {#VOXL_ESC_T_OVER} @@ -41994,17 +44111,17 @@ Only applicable to ESCs that report temperature - `0`: - Disabled -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 200 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 200 | | 0 | |   | ### VOXL_ESC_T_PERC (`INT32`) {#VOXL_ESC_T_PERC} UART ESC Turtle Mode Crash Flip Motor Percent. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1 | 100 | 1 | 90 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1 | 100 | 1 | 90 | |   | ### VOXL_ESC_T_WARN (`INT32`) {#VOXL_ESC_T_WARN} @@ -42016,9 +44133,9 @@ Only applicable to ESCs that report temperature - `0`: - Disabled -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 200 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 200 | | 0 | |   | ### VOXL_ESC_VLOG (`INT32`) {#VOXL_ESC_VLOG} @@ -42029,9 +44146,9 @@ UART ESC verbose logging. - `0`: - Disabled - `1`: - Enabled -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 1 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 1 | | 0 | |   | ## VOXL2 IO @@ -42041,9 +44158,9 @@ VOXL2_IO UART baud rate. Default rate is 921600, which is used for communicating with VOXL2_IO board -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | | | | 921600 | bit/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | | | | 921600 | bit/s |   | ### VOXL2_IO_CMAX (`INT32`) {#VOXL2_IO_CMAX} @@ -42051,9 +44168,9 @@ VOXL2_IO Calibration Max PWM. Maximum duration (microseconds) for VOXL2_IO board -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 2000 | | 2000 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 2000 | | 2000 | us |   | ### VOXL2_IO_CMIN (`INT32`) {#VOXL2_IO_CMIN} @@ -42061,9 +44178,9 @@ VOXL2_IO Calibration Min PWM. Minimum duration (microseconds) for VOXL2_IO board -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 2000 | | 1050 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 2000 | | 1050 | us |   | ### VOXL2_IO_DIS (`INT32`) {#VOXL2_IO_DIS} @@ -42071,9 +44188,9 @@ VOXL2_IO Disabled PWM. Pulse duration in disabled state (microseconds) for VOXL2_IO board -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 2000 | | 1000 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 2000 | | 1000 | us |   | ### VOXL2_IO_MAX (`INT32`) {#VOXL2_IO_MAX} @@ -42081,9 +44198,9 @@ VOXL2_IO Max PWM. Maximum duration (microseconds) for VOXL2_IO board -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 2000 | | 2000 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 2000 | | 2000 | us |   | ### VOXL2_IO_MIN (`INT32`) {#VOXL2_IO_MIN} @@ -42091,9 +44208,9 @@ VOXL2_IO Min PWM. Minimum duration (microseconds) for VOXL2_IO board -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 2000 | | 1100 | us | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 2000 | | 1100 | us |   | ## VTOL Attitude Control @@ -42103,9 +44220,9 @@ Transition blending airspeed. Airspeed at which we can start blending both fw and mc controls. Set to 0 to disable. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.00 | 30.00 | 1 | 8.0 | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 30.0 | 1 | 8.0 | m/s |   | ### VT_ARSP_TRANS (`FLOAT`) {#VT_ARSP_TRANS} @@ -42113,9 +44230,9 @@ Transition airspeed. Airspeed at which we can switch to fw mode -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.00 | 30.00 | 1 | 10.0 | m/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 30.0 | 1 | 10.0 | m/s |   | ### VT_BT_TILT_DUR (`FLOAT`) {#VT_BT_TILT_DUR} @@ -42123,17 +44240,17 @@ Duration motor tilt up in backtransition. Time in seconds it takes to tilt form VT_TILT_FW to VT_TILT_MC. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 10 | 0.1 | 1. | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 10 | 0.1 | 1.0 | s |   | ### VT_B_DEC_I (`FLOAT`) {#VT_B_DEC_I} Backtransition deceleration setpoint to tilt I gain. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ------- | -|   | 0 | 0.3 | 0.05 | 0.1 | rad s/m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ------- | --------- | +|   | 0 | 0.3 | 0.05 | 0.1 | rad s/m |   | ### VT_B_DEC_MSS (`FLOAT`) {#VT_B_DEC_MSS} @@ -42142,9 +44259,9 @@ Approximate deceleration during back transition. Used to calculate back transition distance in an auto mode. For standard vtol and tiltrotors a controller is used to track this value during the transition. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ----- | -|   | 0.5 | 10 | 0.1 | 2.0 | m/s^2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ----- | --------- | +|   | 0.5 | 10 | 0.1 | 2.0 | m/s^2 |   | ### VT_B_TRANS_DUR (`FLOAT`) {#VT_B_TRANS_DUR} @@ -42152,9 +44269,9 @@ Maximum duration of a back transition. Transition is also declared over if the groundspeed drops below MPC_XY_CRUISE. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 20.00 | 1 | 10.0 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 20.0 | 1 | 10.0 | s |   | ### VT_B_TRANS_RAMP (`FLOAT`) {#VT_B_TRANS_RAMP} @@ -42162,9 +44279,9 @@ Back transition MC motor ramp up time. This sets the duration during which the MC motors ramp up to the commanded thrust during the back transition stage. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 20.0 | 0.1 | 3.0 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 20.0 | 0.1 | 3.0 | s |   | ### VT_ELEV_MC_LOCK (`INT32`) {#VT_ELEV_MC_LOCK} @@ -42172,9 +44289,9 @@ Lock control surfaces in hover. If set to 1 the control surfaces are locked at the disarmed value in multicopter mode. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ----------- | ---- | -|   | | | | Enabled (1) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ----------- | ---- | --------- | +|   | | | | Enabled (1) | |   | ### VT_FWD_THRUST_EN (`INT32`) {#VT_FWD_THRUST_EN} @@ -42185,6 +44302,7 @@ Uses puller/pusher (standard VTOL), or forward-tilt (tiltrotor VTOL) to accelera Only active if demanded pitch is below VT_PITCH_MIN. Use VT_FWD_THRUST_SC to tune it. Descend mode is treated as Landing too. + Only active (if enabled) in height-rate controlled modes. **Values:** @@ -42197,9 +44315,9 @@ Only active (if enabled) in height-rate controlled modes. - `5`: Enabled if above MPC_LAND_ALT1 (except LANDING) - `6`: Enabled if above MPC_LAND_ALT2 (except LANDING) -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### VT_FWD_THRUST_SC (`FLOAT`) {#VT_FWD_THRUST_SC} @@ -42208,15 +44326,15 @@ Fixed-wing actuation thrust scale in hover. Scale applied to the demanded pitch (below VT_PITCH_MIN) to get the fixed-wing forward actuation in hover mode. Enabled via VT_FWD_THRUST_EN. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 5.0 | 0.01 | 0.7 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 5.0 | 0.01 | 0.7 | |   | ### VT_FW_DIFTHR_EN (`INT32`) {#VT_FW_DIFTHR_EN} Differential thrust in forwards flight. -Enable differential thrust seperately for roll, pitch, yaw in forward (fixed-wing) mode. +Enable differential thrust separately for roll, pitch, yaw in forward (fixed-wing) mode. The effectiveness of differential thrust around the corresponding axis can be tuned by setting VT_FW_DIFTHR_S_R / VT_FW_DIFTHR_S_P / VT_FW_DIFTHR_S_Y. @@ -42226,9 +44344,9 @@ tuned by setting VT_FW_DIFTHR_S_R / VT_FW_DIFTHR_S_P / VT_FW_DIFTHR_S_Y. - `1`: Roll - `2`: Pitch -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 7 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 7 | | 0 | |   | ### VT_FW_DIFTHR_S_P (`FLOAT`) {#VT_FW_DIFTHR_S_P} @@ -42236,9 +44354,9 @@ Pitch differential thrust factor in forward flight. Differential thrust in forward flight is enabled via VT_FW_DIFTHR_EN. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 2.0 | 0.1 | 1. | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 2.0 | 0.1 | 1.0 | |   | ### VT_FW_DIFTHR_S_R (`FLOAT`) {#VT_FW_DIFTHR_S_R} @@ -42246,9 +44364,9 @@ Roll differential thrust factor in forward flight. Differential thrust in forward flight is enabled via VT_FW_DIFTHR_EN. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 2.0 | 0.1 | 1. | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 2.0 | 0.1 | 1.0 | |   | ### VT_FW_DIFTHR_S_Y (`FLOAT`) {#VT_FW_DIFTHR_S_Y} @@ -42256,9 +44374,9 @@ Yaw differential thrust factor in forward flight. Differential thrust in forward flight is enabled via VT_FW_DIFTHR_EN. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 2.0 | 0.1 | 0.1 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 2.0 | 0.1 | 0.1 | |   | ### VT_FW_MIN_ALT (`FLOAT`) {#VT_FW_MIN_ALT} @@ -42268,9 +44386,9 @@ Minimum altitude for fixed-wing flight. When the vehicle is in fixed-wing mode and the altitude drops below this altitude (relative altitude above local origin), it will instantly switch back to MC mode and execute behavior defined in COM_QC_ACT. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 200.0 | 1 | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 200.0 | 1 | 0.0 | m |   | ### VT_FW_QC_HMAX (`INT32`) {#VT_FW_QC_HMAX} @@ -42280,9 +44398,9 @@ Maximum height above the ground (if available, otherwise above Home if available, otherwise above the local origin) where triggering a quad-chute is possible. At high altitudes there is a big risk to deplete the battery and therefore crash if quad-chuting there. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | | 1 | 0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | | 1 | 0 | m |   | ### VT_FW_QC_P (`INT32`) {#VT_FW_QC_P} @@ -42292,9 +44410,9 @@ Absolute pitch threshold for quad-chute triggering in FW mode. Above this the vehicle will transition back to MC mode and execute behavior defined in COM_QC_ACT. Set to 0 do disable this threshold. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 180 | | 0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 180 | | 0 | deg |   | ### VT_FW_QC_R (`INT32`) {#VT_FW_QC_R} @@ -42304,9 +44422,9 @@ Absolute roll threshold for quad-chute triggering in FW mode. Above this the vehicle will transition back to MC mode and execute behavior defined in COM_QC_ACT. Set to 0 do disable this threshold. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 180 | | 0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 180 | | 0 | deg |   | ### VT_F_TRANS_DUR (`FLOAT`) {#VT_F_TRANS_DUR} @@ -42314,17 +44432,17 @@ Duration of a front transition. Time in seconds used for a transition -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 20.00 | 1 | 5.0 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 20.0 | 1 | 5.0 | s |   | ### VT_F_TRANS_THR (`FLOAT`) {#VT_F_TRANS_THR} Target throttle value for the transition to fixed-wing flight. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 1.0 | 0.01 | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 1.0 | 0.01 | 1.0 | |   | ### VT_F_TR_OL_TM (`FLOAT`) {#VT_F_TR_OL_TM} @@ -42334,9 +44452,9 @@ The duration of the front transition when there is no airspeed feedback availabl When airspeed is used, transition timeout is declared if airspeed does not reach VT_ARSP_BLEND after this time. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 1.0 | 30.0 | 0.5 | 6.0 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 1.0 | 30.0 | 0.5 | 6.0 | s |   | ### VT_LND_PITCH_MIN (`FLOAT`) {#VT_LND_PITCH_MIN} @@ -42345,9 +44463,9 @@ Minimum pitch angle during hover landing. Overrides VT_PITCH_MIN when the vehicle is in LAND mode (hovering). During landing it can be beneficial to reduce the pitch angle to reduce the generated lift in head wind. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -10.0 | 45.0 | 0.1 | 0.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -10.0 | 45.0 | 0.1 | 0.0 | deg |   | ### VT_PITCH_MIN (`FLOAT`) {#VT_PITCH_MIN} @@ -42356,9 +44474,9 @@ Minimum pitch angle during hover. Any pitch setpoint below this value is translated to a forward force by the fixed-wing forward actuation if VT_FWD_TRHUST_EN is set. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -10.0 | 45.0 | 0.1 | 0.0 | deg | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -10.0 | 45.0 | 0.1 | 0.0 | deg |   | ### VT_PSHER_SLEW (`FLOAT`) {#VT_PSHER_SLEW} @@ -42368,9 +44486,9 @@ Defines the slew rate of the puller/pusher throttle during transitions. Zero will deactivate the slew rate limiting and thus produce an instant throttle rise to the transition throttle VT_F_TRANS_THR. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | | 0.01 | 0.33 | 1/s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | | 0.01 | 0.33 | 1/s |   | ### VT_QC_ALT_LOSS (`FLOAT`) {#VT_QC_ALT_LOSS} @@ -42380,11 +44498,12 @@ Altitude error threshold for quad-chute triggering during fixed-wing flight. The check is only active if altitude is controlled and the vehicle is below the current altitude reference. The altitude error is relative to the highest altitude the vehicle has achieved since it has flown below the current altitude reference. + Set to 0 do disable. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 200.0 | 1 | 0.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 200.0 | 1 | 0.0 | m |   | ### VT_QC_T_ALT_LOSS (`FLOAT`) {#VT_QC_T_ALT_LOSS} @@ -42395,43 +44514,44 @@ in altitude-controlled flight modes. Active until 5s after completing transition to fixed-wing. If the current altitude is more than this value below the altitude at the beginning of the transition, it will instantly switch back to MC mode and execute behavior defined in COM_QC_ACT. + Set to 0 do disable this threshold. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 50 | 1 | 20.0 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 50 | 1 | 20.0 | m |   | ### VT_SPOILER_MC_LD (`FLOAT`) {#VT_SPOILER_MC_LD} Spoiler setting while landing (hover). -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | -1 | 1 | 0.1 | 0. | norm | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | -1 | 1 | 0.1 | 0.0 | norm |   | ### VT_TILT_FW (`FLOAT`) {#VT_TILT_FW} Normalized tilt in FW. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 1.0 | 0.01 | 1.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 1.0 | 0.01 | 1.0 | |   | ### VT_TILT_MC (`FLOAT`) {#VT_TILT_MC} Normalized tilt in Hover. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 1.0 | 0.01 | 0.0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 1.0 | 0.01 | 0.0 | |   | ### VT_TILT_TRANS (`FLOAT`) {#VT_TILT_TRANS} Normalized tilt in transition to FW. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 1.0 | 0.01 | 0.4 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 1.0 | 0.01 | 0.4 | |   | ### VT_TRANS_MIN_TM (`FLOAT`) {#VT_TRANS_MIN_TM} @@ -42439,9 +44559,9 @@ Front transition minimum time. Minimum time in seconds for front transition. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 20.0 | 0.1 | 2.0 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 20.0 | 0.1 | 2.0 | s |   | ### VT_TRANS_P2_DUR (`FLOAT`) {#VT_TRANS_P2_DUR} @@ -42449,9 +44569,9 @@ Duration of front transition phase 2. Time in seconds it takes to tilt form VT_TILT_TRANS to VT_TILT_FW. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 5.0 | 0.01 | 0.5 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 5.0 | 0.01 | 0.5 | s |   | ### VT_TRANS_TIMEOUT (`FLOAT`) {#VT_TRANS_TIMEOUT} @@ -42459,9 +44579,9 @@ Front transition timeout. Time in seconds after which transition will be cancelled. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.1 | 30.00 | 1 | 15.0 | s | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.1 | 30.0 | 1 | 15.0 | s |   | ### VT_TYPE (`INT32`) {#VT_TYPE} @@ -42473,9 +44593,9 @@ VTOL Type (Tailsitter=0, Tiltrotor=1, Standard=2). - `1`: Tiltrotor - `2`: Standard -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 2 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 2 | | 0 | |   | ### WV_GAIN (`FLOAT`) {#WV_GAIN} @@ -42483,9 +44603,9 @@ Weather-vane roll angle to yawrate. The desired gain to convert roll sp into yaw rate sp. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0.0 | 3.0 | 0.01 | 1.0 | Hz | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0.0 | 3.0 | 0.01 | 1.0 | Hz |   | ## VTOL Takeoff @@ -42495,9 +44615,9 @@ VTOL Takeoff relative loiter altitude. Altitude relative to home at which vehicle will loiter after front transition. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 20 | 300 | 1 | 80 | m | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 20 | 300 | 1 | 80 | m |   | ## VTX @@ -42534,9 +44654,9 @@ VTX table band 1-24 - `22`: Band 23 - `23`: Band 24 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### VTX_CHANNEL (`INT32`) {#VTX_CHANNEL} @@ -42563,9 +44683,9 @@ VTX table channel 1-16 - `14`: Channel 15 - `15`: Channel 16 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### VTX_DEVICE (`INT32`) {#VTX_DEVICE} @@ -42580,9 +44700,9 @@ Specific VTX device useful for workarounds and optimizations - `5120`: Peak THOR T67 - `10240`: Rush MAX SOLO -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### VTX_FREQUENCY (`INT32`) {#VTX_FREQUENCY} @@ -42591,9 +44711,9 @@ VTX frequency in MHz. If the VTX frequency is set, it will overwrite the band and channel settings. Set to 0 to use band and channel settings. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 32000 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 32000 | | 0 | |   | ### VTX_MAP_CONFIG (`INT32`) {#VTX_MAP_CONFIG} @@ -42612,9 +44732,9 @@ the PX4 build. - `3`: MSP for Power, AUX for Band and Channel - `4`: AUX for Power, Band and Channel -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### VTX_PIT_MODE (`INT32`) {#VTX_PIT_MODE} @@ -42622,9 +44742,9 @@ VTX pit mode. VTX pit mode reduces power to the minimum -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------------ | ---- | -|   | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------------ | ---- | --------- | +|   | | | | Disabled (0) | |   | ### VTX_POWER (`INT32`) {#VTX_POWER} @@ -42651,9 +44771,9 @@ VTX transmission power level 1-16 - `14`: Level 15 - `15`: Level 16 -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### VTX_SER_CFG (`INT32`) {#VTX_SER_CFG} @@ -42676,9 +44796,9 @@ Configure on which serial port to run VTX Serial Port. - `301`: Wifi Port - `401`: EXT2 -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ## Vertiq IO @@ -42703,9 +44823,9 @@ Configure on which serial port to run Vertiq IO. - `301`: Wifi Port - `401`: EXT2 -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 0 | |   | ### VTQ_ARM_BEHAVE (`INT32`) {#VTQ_ARM_BEHAVE} @@ -42718,9 +44838,9 @@ The behavior triggered when the flight controller arms. You have the option to u - `0`: Use Motor Arm Behavior - `1`: Send Explicit Arm Command -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### VTQ_BAUD (`INT32`) {#VTQ_BAUD} @@ -42728,9 +44848,9 @@ The IQUART driver's baud rate. The baud rate (in bits per second) used by the serial port connected with IQUART communication -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 115200 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 115200 | |   | ### VTQ_CONTROL_MODE (`INT32`) {#VTQ_CONTROL_MODE} @@ -42749,9 +44869,9 @@ This mode has faster reaction times. Only use this if you know the properties of - `1`: Voltage - `2`: Velocity -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### VTQ_DISARM_TRIG (`INT32`) {#VTQ_DISARM_TRIG} @@ -42766,9 +44886,9 @@ or set a predefined throttle setpoint - `1`: Coast Motors - `2`: Set Predefined Velocity Setpoint -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### VTQ_DISARM_VELO (`INT32`) {#VTQ_DISARM_VELO} @@ -42776,9 +44896,9 @@ Velocity sent when DISARM_TRIGGER is Set Predefined Velocity Setpoint. This is the velocity that will be sent to all motors when PX4 is disarmed and DISARM_TRIGGER is Set Predefined Velocity Setpoint -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 100 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 100 | | 0 | |   | ### VTQ_FC_DIR (`INT32`) {#VTQ_FC_DIR} @@ -42792,9 +44912,9 @@ they re-map negative signals. This parameter keeps the FC and ESC in agreement. - `0`: 2D - `1`: 3D -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### VTQ_MAX_VELOCITY (`FLOAT`) {#VTQ_MAX_VELOCITY} @@ -42802,9 +44922,9 @@ Module Param - Maximum velocity when CONTROL_MODE is set to Velocity. Only relevant in Velocity Mode. This is the velocity the controller will command at full throttle. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### VTQ_MAX_VOLTS (`FLOAT`) {#VTQ_MAX_VOLTS} @@ -42812,9 +44932,9 @@ Module Param - Maximum voltage when CONTROL_MODE is set to Voltage. Only relevant in Voltage Mode. This is the voltage the controller will command at full throttle. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### VTQ_MOTOR_DIR (`INT32`) {#VTQ_MOTOR_DIR} @@ -42830,9 +44950,9 @@ Set the targeted motor's spinning direction (clockwise vs. counter clockwise) an - `3`: 2D Counter Clockwise - `4`: 2D Clockwise -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### VTQ_NUM_CVS (`INT32`) {#VTQ_NUM_CVS} @@ -42840,9 +44960,9 @@ The number of Vertiq IFCI parameters to use. The total number of IFCI control variables being used across all connected modules -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | 0 | 16 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 16 | | 0 | |   | ### VTQ_PULSE_V_LIM (`FLOAT`) {#VTQ_PULSE_V_LIM} @@ -42850,9 +44970,9 @@ Module Param - Max pulsing voltage limit when in Voltage Limit Mode. This sets the max pulsing voltage limit when in Voltage Limit Mode. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### VTQ_PULSE_V_MODE (`INT32`) {#VTQ_PULSE_V_MODE} @@ -42866,9 +44986,9 @@ indicates that PULSE_VOLT_LIM is the maximum allowed voltage to apply towards pu - `0`: Supply Voltage Mode - `1`: Voltage Limit Mode -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### VTQ_REDO_READ (`INT32`) {#VTQ_REDO_READ} @@ -42877,9 +44997,9 @@ Reinitialize the target module's values into the PX4 parameters. Setting this value to true will reinitialize PX4's IQUART connected parameters to the value stored on the currently targeted motor. This is especially useful if your flight controller powered on before your connected modules -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------------ | ---- | -|   | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------------ | ---- | --------- | +|   | | | | Disabled (0) | |   | ### VTQ_TELEM_IDS_1 (`INT32`) {#VTQ_TELEM_IDS_1} @@ -42922,9 +45042,9 @@ The module IDs [0, 31] that should be asked for telemetry. The data received fro - `30`: Module ID 30 - `31`: Module ID 31 -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | ---------- | --------- | ------- | ---- | -| ✓ | 0 | 4294967295 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | ---------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 4294967295 | | 0 | |   | ### VTQ_TELEM_IDS_2 (`INT32`) {#VTQ_TELEM_IDS_2} @@ -42966,9 +45086,9 @@ The module IDs [32, 62] that should be asked for telemetry. The data received fr - `29`: Module ID 61 - `30`: Module ID 62 -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | ---------- | --------- | ------- | ---- | -| ✓ | 0 | 2147483647 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | ---------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 2147483647 | | 0 | |   | ### VTQ_THROTTLE_CVI (`INT32`) {#VTQ_THROTTLE_CVI} @@ -42976,9 +45096,9 @@ Module Param - The module's Throttle Control Value Index. This represents the Control Value Index where the targeted module will look for throttle commands -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 255 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 255 | | 0 | |   | ### VTQ_TQUE_OFF_ANG (`FLOAT`) {#VTQ_TQUE_OFF_ANG} @@ -42986,9 +45106,9 @@ Module Param - Offsets pulse angle to allow for mechanical properties. This offsets where the pulse starts around the motor to allow for propeller mechanical properties. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### VTQ_TRGT_MOD_ID (`INT32`) {#VTQ_TRGT_MOD_ID} @@ -42998,9 +45118,9 @@ This is the value used as the target module ID of all configuration parameters ( module ID matching this value will react to all get and set requests from PX4. Any Vertiq client made with dynamic object IDs should use this value to instantiate itself. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### VTQ_VELO_CUTOFF (`FLOAT`) {#VTQ_VELO_CUTOFF} @@ -43008,9 +45128,9 @@ Module Param - The minimum velocity required to allow pulsing. This is the velocity at which pulsing is allowed. Any velocity between VELOCITY_CUTOFF and -VELOCITY_CUTOFF will not pulse. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ### VTQ_X_CVI (`INT32`) {#VTQ_X_CVI} @@ -43018,9 +45138,9 @@ Module Param - CVI for the X rectangular coordinate. This represents the Control Value Index where the targeted module will look for the X rectangular coordinate. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 255 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 255 | | 0 | |   | ### VTQ_Y_CVI (`INT32`) {#VTQ_Y_CVI} @@ -43028,9 +45148,9 @@ Module Param - CVI for the Y rectangular coordinate. This represents the Control Value Index where the targeted module will look for the Y rectangular coordinate. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 255 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 255 | | 0 | |   | ### VTQ_ZERO_ANGLE (`FLOAT`) {#VTQ_ZERO_ANGLE} @@ -43038,9 +45158,9 @@ Module Param - The encoder angle at which theta is zero. The encoder angle at which theta is zero. Adjust this number to change the location of 0 phase when pulsing. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | | | | 0 | |   | ## Zenoh @@ -43052,9 +45172,9 @@ Set true (1) to start the Zenoh driver module (a.k.a the "Zenoh-Pico Node"). See https://docs.px4.io/main/en/middleware/zenoh and https://docs.px4.io/main/en/modules/modules_driver.html#zenoh -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------------ | ---- | -| ✓ | | | | Disabled (0) | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------------ | ---- | --------- | +| ✓ | | | | Disabled (0) | |   | ## Miscellaneous @@ -43072,9 +45192,9 @@ Accel filter settings. - `5`: 370 Hz - `6`: No filter -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 6 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 6 | |   | ### SCH16T_DECIM (`INT32`) {#SCH16T_DECIM} @@ -43088,9 +45208,9 @@ Gyro and Accel decimation settings. - `3`: 1475 Hz - `4`: 738 Hz -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 4 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 4 | |   | ### SCH16T_GYRO_FILT (`INT32`) {#SCH16T_GYRO_FILT} @@ -43106,9 +45226,9 @@ Gyro filter settings. - `5`: 370 Hz - `6`: No filter -| Reboot | minValue | maxValue | increment | default | unit | -| ------- | -------- | -------- | --------- | ------- | ---- | -| ✓ | | | | 2 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | | | | 2 | |   | ### SF1XX_MODE (`INT32`) {#SF1XX_MODE} @@ -43120,22 +45240,46 @@ Lightware laser rangefinder Operation Mode. - `1`: Enabled - `2`: Enabled in VTOL MC mode, listen to request from system in FW mode -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 2 | | 1 | - -### SPC_VEHICLE_RESP (`FLOAT`) {#SPC_VEHICLE_RESP} - -SPC_VEHICLE_RESP. - -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | | | | 0.5 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 2 | | 1 | |   | ### ZENOH_DOMAIN_ID (`INT32`) {#ZENOH_DOMAIN_ID} ROS2 RMW_ZENOH_CPP Domain id. -| Reboot | minValue | maxValue | increment | default | unit | -| ------ | -------- | -------- | --------- | ------- | ---- | -|   | 0 | 232 | | 0 | +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------ | -------- | -------- | --------- | ------- | ---- | --------- | +|   | 0 | 232 | | 0 | |   | + +### ZENOH_PUB_CC (`INT32`) {#ZENOH_PUB_CC} + +Zenoh publisher congestion control (global default). + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 1 | | 0 | |   | + +### ZENOH_PUB_EXPR (`INT32`) {#ZENOH_PUB_EXPR} + +Zenoh publisher express mode (global default). + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 1 | | 0 | |   | + +### ZENOH_PUB_PRIO (`INT32`) {#ZENOH_PUB_PRIO} + +Zenoh publisher priority (global default). + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 1 | 7 | | 5 | |   | + +### ZENOH_PUB_REL (`INT32`) {#ZENOH_PUB_REL} + +Zenoh publisher reliability (global default). + +| Reboot | minValue | maxValue | increment | default | unit | Read-Only | +| ------- | -------- | -------- | --------- | ------- | ---- | --------- | +| ✓ | 0 | 1 | | 0 | |   | diff --git a/docs/en/advanced_config/prearm_arm_disarm.md b/docs/en/advanced_config/prearm_arm_disarm.md index ec4ce4c7e2..a8fdb90bef 100644 --- a/docs/en/advanced_config/prearm_arm_disarm.md +++ b/docs/en/advanced_config/prearm_arm_disarm.md @@ -91,6 +91,28 @@ The feature is configured using the following timeouts. | [COM_DISARM_LAND](../advanced_config/parameter_reference.md#COM_DISARM_LAND) | Time-out for auto disarm after landing. Default: 2s (-1 to disable). | | [COM_DISARM_PRFLT](../advanced_config/parameter_reference.md#COM_DISARM_PRFLT) | Time-out for auto disarm if too slow to takeoff. Default: 10s (<=0 to disable). | +## Auto-Arming on Boot + +The vehicle can be configured to arm automatically on boot once all preflight checks pass, +using the `COM_ARM_ON_BOOT` parameter. For safety, PX4 enforces a minimum 5-second delay after boot before attempting to arm. + +Once armed this way, the vehicle will not re-arm automatically after a manual disarm. + +::: info +The parameter value is read once at boot. +Changing it while the system is running has no effect until the next reboot. +::: + +:::warning +Use with caution. +A vehicle that arms automatically can spin up motors and actuators without any operator gesture. +Ensure the vehicle is in a safe state before powering on. +::: + +| Parameter | Description | +| -------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| [COM_ARM_ON_BOOT](../advanced_config/parameter_reference.md#COM_ARM_ON_BOOT) | Arm automatically once preflight checks pass after boot. Default: `0` (Disabled). | + ## Pre-Arm Checks To reduce accidents, vehicles are only allowed to arm certain conditions are met (some of which are configurable). diff --git a/docs/en/advanced_config/sensor_thermal_calibration.md b/docs/en/advanced_config/sensor_thermal_calibration.md index 2ad1cdbc9f..e5501edfcf 100644 --- a/docs/en/advanced_config/sensor_thermal_calibration.md +++ b/docs/en/advanced_config/sensor_thermal_calibration.md @@ -77,14 +77,14 @@ Offboard calibration is run on a development computer using data collected durin To perform an offboard calibration: 1. Ensure the frame type is set before calibration, otherwise calibration parameters will be lost when the board is setup. -1. Power up the board and set the [TC_A_ENABLE](../advanced_config/parameter_reference.md#TC_A_ENABLE), [TC_B_ENABLE](../advanced_config/parameter_reference.md#TC_B_ENABLE), [TC_G_ENABLE](../advanced_config/parameter_reference.md#TC_G_ENABLE), and [TC_M_ENABLE](../advanced_config/parameter_reference.md#TC_M_ENABLE) parameters to `1`. -1. Set all [CAL_ACC\*](../advanced_config/parameter_reference.md#CAL_ACC0_ID), [CAL_GYRO\*](../advanced_config/parameter_reference.md#CAL_GYRO0_ID), [CAL_MAG\*](../advanced_config/parameter_reference.md#CAL_MAG0_ID), and [CAL_BARO\*](../advanced_config/parameter_reference.md#CAL_BARO0_ID) parameters to defaults. -1. Set the [SDLOG_MODE](../advanced_config/parameter_reference.md#SDLOG_MODE) parameter to 2 to enable logging of data from boot. -1. Set the [SDLOG_PROFILE](../advanced_config/parameter_reference.md#SDLOG_PROFILE) checkbox for _thermal calibration_ (bit 2) to log the raw sensor data required for calibration. -1. Cold soak the board to the minimum temperature it will be required to operate in. -1. Apply power and keeping the board still [^2], warm it slowly to the maximum required operating temperature. [^3] -1. Remove power and extract the .ulog file. -1. Open a terminal window in the **Firmware/Tools** directory and run the python calibration script: +2. Power up the board and set the [TC_A_ENABLE](../advanced_config/parameter_reference.md#TC_A_ENABLE), [TC_B_ENABLE](../advanced_config/parameter_reference.md#TC_B_ENABLE), [TC_G_ENABLE](../advanced_config/parameter_reference.md#TC_G_ENABLE), and [TC_M_ENABLE](../advanced_config/parameter_reference.md#TC_M_ENABLE) parameters to `1`. +3. Set all [CAL_ACC\*](../advanced_config/parameter_reference.md#CAL_ACC0_ID), [CAL_GYRO\*](../advanced_config/parameter_reference.md#CAL_GYRO0_ID), [CAL_MAG\*](../advanced_config/parameter_reference.md#CAL_MAG0_ID), and [CAL_BARO\*](../advanced_config/parameter_reference.md#CAL_BARO0_ID) parameters to defaults. +4. Set the [SDLOG_MODE](../advanced_config/parameter_reference.md#SDLOG_MODE) parameter to 2 to enable logging of data from boot. +5. Set the [SDLOG_PROFILE](../advanced_config/parameter_reference.md#SDLOG_PROFILE) checkbox for _thermal calibration_ (bit 2) to log the raw sensor data required for calibration. +6. Cold soak the board to the minimum temperature it will be required to operate in. +7. Apply power and keeping the board still [^2], warm it slowly to the maximum required operating temperature. [^3] +8. Remove power and extract the .ulog file. +9. Open a terminal window in the **Firmware/Tools** directory and run the python calibration script: ```sh python process_sensor_caldata.py @@ -92,9 +92,9 @@ To perform an offboard calibration: This will generate a **.pdf** file showing the measured data and curve fits for each sensor, and a **.params** file containing the calibration parameters. -1. Power the board, connect _QGroundControl_ and load the parameter from the generated **.params** file onto the board using _QGroundControl_. Due to the number of parameters, loading them may take some time. -1. After parameters have finished loading, set `SDLOG_MODE` to 1 to re-enable normal logging and remove power. -1. Power the board and perform a normal accelerometer sensor calibration using _QGroundControl_. It is important that this step is performed when board is within the calibration temperature range. The board must be repowered after this step before flying as the sudden offset changes can upset the navigation estimator and some parameters are not loaded by the algorithms that use them until the next startup. +10. Power the board, connect _QGroundControl_ and load the parameter from the generated **.params** file onto the board using _QGroundControl_. Due to the number of parameters, loading them may take some time. +11. After parameters have finished loading, set `SDLOG_MODE` to 1 to re-enable normal logging and remove power. +12. Power the board and perform a normal accelerometer sensor calibration using _QGroundControl_. It is important that this step is performed when board is within the calibration temperature range. The board must be repowered after this step before flying as the sudden offset changes can upset the navigation estimator and some parameters are not loaded by the algorithms that use them until the next startup. ## Implementation Detail {#implementation} @@ -141,19 +141,19 @@ Examples: The correction for thermal offsets (using the calibration parameters) is performed in the [sensors module](../modules/modules_system.md#sensors). The reference temperature is subtracted from the measured temperature to obtain a delta temperature where: -``` +```txt delta = measured_temperature - reference_temperature ``` The delta temperature is then used to calculate a offset, where: -``` +```txt offset = X0 + X1*delta + X2*delta**2 + ... + Xn*delta**n ``` The offset and temperature scale factor are then used to correct the sensor measurement where: -``` +```txt corrected_measurement = (raw_measurement - offset) * scale_factor ``` @@ -186,3 +186,7 @@ Scale factors are assumed to be temperature invariant due to the difficulty asso [^2]: Calibration of the barometric pressure sensor offsets requires a stable air pressure environment. The air pressure will change slowly due to weather and inside buildings can change rapidly due to external wind fluctuations and HVAC system operation. [^3]: Care must be taken when warming a cold soaked board to avoid formation of condensation on the board that can cause board damage under some circumstances. + +## See Also + +- [OEM/Factory Configuration](../advanced_config/oem.md) diff --git a/docs/en/advanced_config/static_pressure_buildup.md b/docs/en/advanced_config/static_pressure_buildup.md index 343d7c2b25..baaafa531d 100644 --- a/docs/en/advanced_config/static_pressure_buildup.md +++ b/docs/en/advanced_config/static_pressure_buildup.md @@ -9,7 +9,7 @@ The problem is particularly visible on multicopters because fixed wing vehicles One solution is to use foam-filled venting holes to reduce the buildup (as much as possible) and then attempt dynamic calibration to remove any remaining effects. -:::tip +::: tip Before "fixing" the problem you should first check that the Z setpoint tracks the estimated altitude (to verify that there are no controller issues). ::: @@ -27,7 +27,7 @@ By looking at the ground station you can review the effects of movement-induced This process allows rapid iteration without draining batteries: modify drone, drive/review, repeat! -:::tip +::: tip Aim for a barometer altitude drop of less than 2 metres at maximum horizontal speed before attempting software-based calibration below. ::: @@ -40,3 +40,7 @@ For more information see [Using PX4's Navigation Filter (EKF2) > Correction for The approach works well if the relationship between the error due to static pressure and the velocity varies linearly. If the vehicle has a more complex aerodynamic model it will be less effective. ::: + +## See Also + +- [OEM/Factory Configuration](../advanced_config/oem.md) diff --git a/docs/en/advanced_config/tuning_the_ecl_ekf.md b/docs/en/advanced_config/tuning_the_ecl_ekf.md index 6dc431532e..a1d2d72e6e 100644 --- a/docs/en/advanced_config/tuning_the_ecl_ekf.md +++ b/docs/en/advanced_config/tuning_the_ecl_ekf.md @@ -406,6 +406,16 @@ With Valid GNSS Data: - **Alternative Sources**: Dead-reckoning mode provides enhanced protection by requiring absence of alternative navigation sources before allowing resets. - **Boot Vulnerability**: Initial faulty GNSS data cannot be detected automatically; requires operator intervention and manual position correction. +#### Ground Position Lock + +When a vehicle equipped with dead-reckoning sensors (e.g. airspeed for fixed-wing, or optical flow) is sitting on the ground before takeoff, those sensors provide little to no aiding — airspeed and optical flow measurements are unreliable at rest. In this case, the EKF relies on _constant position fusion_ (fusing a synthetic position measurement at the last known position) to prevent the estimate from drifting. However, this is only active when the vehicle is detected as stationary, so handling the vehicle or starting the engine can interrupt it. + +To counter this, [EKF2_POS_LOCK](../advanced_config/parameter_reference.md#EKF2_POS_LOCK) can be enabled to force constant position fusion to run while landed and the global horizontal position has already been initialized. + +::: note +`EKF2_POS_LOCK` has no effect in flight. +::: + ### Range Finder [Range finder](../sensor/rangefinders.md) distance to ground is used by a single state filter to estimate the vertical position of the terrain relative to the height datum. @@ -594,7 +604,7 @@ When this has been done, the performance metadata files can be processed to prov - Attitude output data is found in the [VehicleAttitude](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/VehicleAttitude.msg) message. - Local position output data is found in the [VehicleLocalPosition](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/VehicleLocalPosition.msg) message. - Global \(WGS-84\) output data is found in the [VehicleGlobalPosition](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/VehicleGlobalPosition.msg) message. -- Wind velocity output data is found in the [Wind.msg](https://github.com/PX4/PX4-Autopilot/blob/main/msg/Wind.msg) message. +- Wind velocity output data is found in the [AirspeedWind.msg](https://github.com/PX4/PX4-Autopilot/blob/main/msg/AirspeedWind.msg) message. ### States diff --git a/docs/en/advanced_features/satcom_roadblock.md b/docs/en/advanced_features/satcom_roadblock.md index 7a6a21a1e4..14da742b57 100644 --- a/docs/en/advanced_features/satcom_roadblock.md +++ b/docs/en/advanced_features/satcom_roadblock.md @@ -9,7 +9,7 @@ Given good signal quality, users can expect a latency between 10 to 15 seconds. The following components are needed for the satellite communication link: -- A [RockBlock 9603 Iridium Satellite Modem](https://www.iridium.com/products/ground-control-rockblock-9603/) module connected to a Pixhawk flashed with the PX4 Autopilot. +- A [RockBlock 9603 Iridium Satellite Modem](https://www.iridium.com/products/rockblock-9603) module connected to a Pixhawk flashed with the PX4 Autopilot. - A message relay server running Ubuntu Linux. - A ground station computer running _QGroundControl_ on Ubuntu Linux @@ -55,15 +55,15 @@ The default baud rate of the module is 19200. However, the PX4 _iridiumsbd_ driv 1. Connect to the module with using a 19200/8-N-1 setting and check if the communication is working using the command: `AT`. The response should be: `OK`. -1. Change the baud rate: +2. Change the baud rate: - ``` + ```sh AT+IPR=9 ``` -1. Reconnect to the model now with a 115200/8-N-1 setting and save the configuration using: +3. Reconnect to the model now with a 115200/8-N-1 setting and save the configuration using: - ``` + ```sh AT&W0 ``` @@ -77,7 +77,7 @@ There is no need to set the baud rate for the port, as this is configured by the ::: info If the configuration parameter is not available in _QGroundControl_ then you may need to [add the driver to the firmware](../peripherals/serial_configuration.md#parameter_not_in_firmware): -``` +```txt drivers/telemetry/iridiumsbd ``` @@ -103,38 +103,38 @@ The relay server should be run on either Ubuntu 16.04 or 14.04 OS. - `5672` for the _RabbitMQ_ message broker (can be changed in the _rabbitmq_ settings) - `45679` for the HTTP POST interface (can be changed in the **relay.cfg** file) -1. Install the required python modules: +2. Install the required python modules: ```sh sudo pip install pika tornado future ``` -1. Install the `rabbitmq` message broker: +3. Install the `rabbitmq` message broker: ```sh sudo apt install rabbitmq-server ``` -1. Configure the broker's credentials (change PWD to your preferred password): +4. Configure the broker's credentials (change PWD to your preferred password): ```sh sudo rabbitmqctl add_user iridiumsbd PWD sudo rabbitmqctl set_permissions iridiumsbd ".*" ".*" ".*" ``` -1. Clone the [SatComInfrastructure](https://github.com/acfloria/SatComInfrastructure) repository: +5. Clone the [SatComInfrastructure](https://github.com/acfloria/SatComInfrastructure) repository: ```sh git clone https://github.com/acfloria/SatComInfrastructure.git ``` -1. Go to the location of the _SatComInfrastructure_ repo and configure the broker's queues: +6. Go to the location of the _SatComInfrastructure_ repo and configure the broker's queues: ```sh ./setup_rabbit.py localhost iridiumsbd PWD ``` -1. Verify the setup: +7. Verify the setup: ```sh sudo rabbitmqctl list_queues @@ -142,8 +142,8 @@ The relay server should be run on either Ubuntu 16.04 or 14.04 OS. This should give you a list of 4 queues: `MO`, `MO_LOG`, `MT`, `MT_LOG` -1. Edit the `relay.cfg` configuration file to reflect your settings. -1. Start the relay script in the detached mode: +8. Edit the `relay.cfg` configuration file to reflect your settings. +9. Start the relay script in the detached mode: ```sh screen -dm bash -c 'cd SatcomInfrastructure/; ./relay.py @@ -216,15 +216,15 @@ If in the terminal where the `udp2rabbit.py` script is running within a couple o ![Connect the High Latency link](../../assets/satcom/linkconnect.png) -1. Open a terminal on the ground station computer and change to the location of the _SatComInfrastructure_ repository. +2. Open a terminal on the ground station computer and change to the location of the _SatComInfrastructure_ repository. Then start the **udp2rabbit.py** script: ```sh ./udp2rabbit.py ``` -1. Power up the vehicle. -1. Wait until the first `HIGH_LATENCY2` message is received on QGC. +3. Power up the vehicle. +4. Wait until the first `HIGH_LATENCY2` message is received on QGC. This can be checked either using the _MAVLink Inspector_ widget or on the toolbar with the _LinkIndicator_. If more than one link is connected to the active vehicle the _LinkIndicator_ shows all of them by clicking on the name of the shown link: @@ -232,7 +232,7 @@ If in the terminal where the `udp2rabbit.py` script is running within a couple o The link indicator always shows the name of the priority link. -1. The satellite communication system is now ready to use. +5. The satellite communication system is now ready to use. The priority link, which is the link over which commands are send, is determined the following ways: - If no link is commanded by the user a regular radio telemetry link is preferred over the high latency link. - The autopilot and QGC will fall back from the regular radio telemetry to the high latency link if the vehicle is armed and the radio telemetry link is lost (no MAVLink messages received for a certain time). diff --git a/docs/en/airframes/airframe_reference.md b/docs/en/airframes/airframe_reference.md index 2067c8f6a5..cfe14928fb 100644 --- a/docs/en/airframes/airframe_reference.md +++ b/docs/en/airframes/airframe_reference.md @@ -402,7 +402,7 @@ div.frame_variant td, div.frame_variant th { Maintainer: Lorenz Meier <lorenz@px4.io>

SYS_AUTOSTART = 4050

- HolyBro QAV250 + HolyBro QAV250 Maintainer: Beat Kueng <beat-kueng@gmx.net>

SYS_AUTOSTART = 4052

@@ -457,6 +457,10 @@ div.frame_variant td, div.frame_variant th { SIH Quadcopter X Maintainer: Romain Chiappinelli <romain.chiap@gmail.com>

SYS_AUTOSTART = 1100

+ + SIH Hexacopter X + Maintainer: Romain Chiappinelli <romain.chiap@gmail.com>

SYS_AUTOSTART = 1105

+ @@ -604,7 +608,7 @@ div.frame_variant td, div.frame_variant th { Maintainer: John Doe <john@example.com>

SYS_AUTOSTART = 50000

- Aion Robotics R1 UGV + Aion Robotics R1 UGV Maintainer: John Doe <john@example.com>

SYS_AUTOSTART = 50001

diff --git a/docs/en/assembly/_assembly.md b/docs/en/assembly/_assembly.md index b5082bedd1..7a66851052 100644 --- a/docs/en/assembly/_assembly.md +++ b/docs/en/assembly/_assembly.md @@ -337,7 +337,7 @@ Note: Note that the PWM outputs are often labeled `AUX` or `MAIN`. Use the `AUX` bus if both are present, and `MAIN` otherwise. - [DShot ESC](../peripherals/dshot.md) (recommended) can only be used on the FMU PWM outputs. -- Motor outputs should be grouped together as much as possible rather than spread randomly across both the FMU and IO busses. +- Motor outputs should be grouped together as much as possible rather than spread randomly across both the FMU and IO buses. This is because if you assign some function to an output, such as DShot ESC, you can't then assign adjacent unused pins for anything other than a DShot ESC. ### Servos @@ -363,7 +363,7 @@ If you don't use servos that all accept the same voltage, you'll need to separat Other peripherals, such as high-power radios, cameras, and so on have their own power requirements. These will usually be supplied off a separate BEC. -The wiring and configuration of optional/less common components is covered within the [Hardware Hardware Selection & Setup](../hardware/drone_parts.md) topics for individual peripherals. +The wiring and configuration of optional/less common components is covered within the [Hardware Selection & Setup](../hardware/drone_parts.md) topics for individual peripherals. ## Build Tutorials @@ -409,11 +409,11 @@ 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) - [Holybro Pixhawk 4 Wiring Quickstart](../assembly/quick_start_pixhawk4.md) -- [Holybro Pixhawk 4 Mini (Discontinued) Wiring Quickstart](../assembly/quick_start_pixhawk4_mini.md) - [Holybro Durandal Wiring Quickstart](../assembly/quick_start_durandal.md) - [Holybro Pix32 v5 Wiring Quickstart](../assembly/quick_start_holybro_pix32_v5.md) - [Cube Wiring Quickstart](../assembly/quick_start_cube.md) (All cube variants) diff --git a/docs/en/assembly/mount_gps_compass.md b/docs/en/assembly/mount_gps_compass.md index fdea5886f4..9de612b847 100644 --- a/docs/en/assembly/mount_gps_compass.md +++ b/docs/en/assembly/mount_gps_compass.md @@ -20,7 +20,7 @@ For more information see [Setting the Compass Orientation](../config/flight_cont ## Position -In order to compensate for the relative motion between the receiver and the CoG, you should [configure](../advanced_config/parameters.md) the following parameters to set the offsets: [EKF2_GPS_POS_X](../advanced_config/parameter_reference.md#EKF2_GPS_POS_X), [EKF2_GPS_POS_Y](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Y) and [EKF2_GPS_POS_Z](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Z). +In order to compensate for the relative motion between the receiver and the CoG, you should [configure](../advanced_config/parameters.md) the following parameters to set the offsets: [SENS_GPS0_OFFX](../advanced_config/parameter_reference.md#SENS_GPS0_OFFX), [SENS_GPS0_OFFY](../advanced_config/parameter_reference.md#SENS_GPS0_OFFY) and [SENS_GPS0_OFFZ](../advanced_config/parameter_reference.md#SENS_GPS0_OFFZ). This is important because the body frame estimated by the EKF will converge on the location of the GNSS module and assume it to be at the CoG. If the GNSS module is significantly offset from the CoG, then rotation around the COG will be interpreted as an altitude change, which in some flight modes (such as position mode) will result in unnecessary corrections. diff --git a/docs/en/assembly/quick_start_cuav_v5_nano.md b/docs/en/assembly/quick_start_cuav_v5_nano.md index 0ccd8c5031..b41563ba50 100644 --- a/docs/en/assembly/quick_start_cuav_v5_nano.md +++ b/docs/en/assembly/quick_start_cuav_v5_nano.md @@ -33,7 +33,7 @@ We'll go through each of these in detail in the following sections. | DSM/SBUS/RSSI | Includes DSM, SBUS, RSSI signal input interface, DSM interface can be connected to DSM satellite receiver, SBUS interface to SBUS remote control receiver, RSSI for signal strength return module. | ::: info -For more interface information, please read [V5 nano Manual](http://manual.cuav.net/V5-nano.pdf). +For more interface information, please read [V5 nano Manual](https://manual.cuav.net/V5-nano.pdf). ::: ![quickstart](../../assets/flight_controller/cuav_v5_nano/connection/v5_nano_quickstart_03.png) @@ -128,6 +128,6 @@ Motors/servos are connected to the MAIN ports in the order specified for your ve - [Airframe buildlog using CUAV v5 nano on a DJI FlameWheel450](../frames_multicopter/dji_f450_cuav_5nano.md) - [CUAV V5 nano](../flight_controller/cuav_v5_nano.md) -- [V5 nano manual](http://manual.cuav.net/V5-nano.pdf) (CUAV) +- [V5 nano manual](https://manual.cuav.net/V5-nano.pdf) (CUAV) - [FMUv5 reference design pinout](https://docs.google.com/spreadsheets/d/1-n0__BYDedQrc_2NHqBenG1DNepAgnHpSGglke-QQwY/edit#gid=912976165) (CUAV) - [CUAV Github](https://github.com/cuav) (CUAV) diff --git a/docs/en/assembly/quick_start_cuav_v5_plus.md b/docs/en/assembly/quick_start_cuav_v5_plus.md index 6dfbbf4a57..66b1d8c0b5 100644 --- a/docs/en/assembly/quick_start_cuav_v5_plus.md +++ b/docs/en/assembly/quick_start_cuav_v5_plus.md @@ -33,7 +33,7 @@ We'll go through each of these in detail in the following sections. | DSM/SBUS/RSSI | Includes DSM, SBUS, RSSI signal input interface, DSM interface can be connected to DSM satellite receiver, SBUS interface to SBUS remote control receiver, RSSI for signal strength return module. | ::: info -For more interface information, please read [V5+ Manual](http://manual.cuav.net/V5-Plus.pdf). +For more interface information, please read [V5+ Manual](https://manual.cuav.net/V5-Plus.pdf). ::: ![V5+ AutoPilot](../../assets/flight_controller/cuav_v5_plus/connection/v5+_quickstart_02.png) @@ -122,12 +122,12 @@ Motors/servos are connected to the MAIN and AUX ports in the order specified for ## Pinouts -Download **V5+** pinouts from [here](http://manual.cuav.net/V5-Plus.pdf). +See [CUAV V5+ Manual](https://manual.cuav.net/V5-Plus.pdf). ## Further Information - [Airframe build-log using CUAV v5+ on a DJI FlameWheel450](../frames_multicopter/dji_f450_cuav_5plus.md) -- [CUAV V5+ Manual](http://manual.cuav.net/V5-Plus.pdf) (CUAV) +- [CUAV V5+ Manual](https://manual.cuav.net/V5-Plus.pdf) (CUAV) - [CUAV V5+ docs](https://doc.cuav.net/controller/v5-autopilot/en/v5+.html) (CUAV) - [FMUv5 reference design pinout](https://docs.google.com/spreadsheets/d/1-n0__BYDedQrc_2NHqBenG1DNepAgnHpSGglke-QQwY/edit#gid=912976165) (CUAV) - [CUAV Github](https://github.com/cuav) (CUAV) diff --git a/docs/en/assembly/quick_start_cuav_x25_evo.md b/docs/en/assembly/quick_start_cuav_x25_evo.md new file mode 100644 index 0000000000..452214617c --- /dev/null +++ b/docs/en/assembly/quick_start_cuav_x25_evo.md @@ -0,0 +1,153 @@ +# CUAV X25 EVO Wiring Quick Start + +::: warning +PX4 does not manufacture this (or any) autopilot. +Contact the [manufacturer](https://store.cuav.net/) for hardware support or compliance issues. +::: + +This quick start guide shows how to power the [X25 EVO](../flight_controller/cuav_x25-evo.md) flight controller and connect its most important peripherals. + +::: info +The following flight controller models are applicable to this quick start guide. +[CUAV X25 SUPER](../flight_controller/cuav_x25-super.md) +::: + +## Wiring Chart Overview + +The image below shows how to connect the most important sensors and peripherals (except the motor and servo outputs). +We'll go through each of these in detail in the following sections. + +![wiring](../../assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_01.jpg) + +| Interface | **Function** | +| :------------ | :----------------------------------------------------------------------------------------------------------------------------------------------------------- | +| POWER C1/C2 | Connect the PMU2 Lite to this port; this port is used for connecting the DroneCAN power module | +| M1 ~ M16 | PWM signal output ports, usable for controlling motors or servos; support 3.3V/5V PWM configuration | +| RC IN | Connect remote controller receivers with one-way protocols (e.g., SBUS/DSM/PPM). Note: ELRS/CRSF receivers should be connected to any serial port, not RC IN | +| RSSI | For connecting signal strength feedback modules | +| GPS&SAFETY | Connect Neo-series GPS or C-RTK-series RTK; this port includes interfaces for GPS, safety switch, and buzzer | +| GPS2 | Usable for connecting additional GPS/RTK modules | +| DEBUG (DSU) | For FMU chip debugging and reading debug device information; with ArduPilot firmware, it can be configured for other serial port functions | +| ADC3V3 | For analog level signal detection; the maximum detectable level signal is 3.3V | +| ADC6V6 | For analog level signal detection; the maximum detectable level signal is 6.6V (PX4 is not supported.) | +| TF CARD | Insert an SD card here to enable log storage functionality | +| ETH | Ethernet port, usable for connecting Ethernet devices such as companion computers | +| I2C1/2/3 | Connect external I2C devices (e.g., external compasses) for communication between the controller and I2C devices | +| TELEM1/TELEM2 | Connect telemetry modules (for data transmission) to enable MAVLINK data interaction | +| CAN1/2 | For communication between the controller and DroneCAN devices (e.g., connecting NEO4 SE GPS) | +| TYPE C | USB port of the controller, usable for connecting to the ground station, flashing firmware, and other operations | +| SPI6 | SPI port for external expansion; generally not used | + +## Vehicle Front + +::: info +If the controller cannot be mounted in the recommended/default orientation (e.g. due to space constraints) you will need to configure the autopilot software with the orientation that you actually used: [Flight Controller Orientation](../config/flight_controller_orientation.md). +::: + +![front](../../assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_02.jpg) + +## GPS + Compass + Buzzer + Safety Switch + LED + +We recommend using a CAN GPS/RTK (such as [Neo 4SE](https://store.cuav.net/shop/cuav-neo-4-se-gps-module/)); simply connect it to the **CAN 1** or **CAN 2** port. + +You can also use a standard GPS/RTK module(such as [NEO3 GPS](https://store.cuav.net/shop/neo-3/) (10-pin connector)) by connecting it to the **GPS&SAFETY** port. +Most commonly used GPS modules today integrate GPS, compass, safety switch, buzzer, and LED status light. + +If you need to use assisted GPS, connect to the **GPS2** port. + +The GPS/compass should be [mounted on the frame](../assembly/mount_gps_compass.md) as far away from other electronics as possible (separating the compass from other electronics will reduce interference), with the direction markings towards the front of the vehicle (the arrow on the NEO GPS should match the arrow on the flight controller). + +![GPS](../../assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_03.jpg) + +::: info +The GPS module's integrated safety switch is enabled _by default_ (when enabled, PX4 will not let you arm the vehicle). +To disable the safety, press and hold the safety switch for 1 second. +You can press the safety switch again to enable safety and disarm the vehicle (this can be useful if, for whatever reason, you are unable to disarm the vehicle from your remote control or ground station). +::: + +## Radio Control + +A remote control (RC) radio system is required if you want to _manually_ control your vehicle (PX4 does not require a radio system for autonomous flight modes). + +You will need to [select a compatible transmitter/receiver](../getting_started/rc_transmitter_receiver.md) and then _bind_ them so that they communicate (read the instructions that come with your specific transmitter/receiver). + +Connection methods vary by remote controller and receiver type: + +### Android Remote Controllers + +Take the H16 as an example: + +![H16 control](../../assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_04.jpg) + +Connect **TELEM1/TELEM2** to the UART0 port of the H16 remote controller, and link the H16’s SBUS pin to the **RC IN** port. + +### SBUS/DSM/PPM Protocol Receivers + +![SBUS/DSM/PPM control](../../assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_05.jpg) + +Use wires to connect the receiver to the **RC IN** port at the rear of the controller. + +### ELRS/CRSF Receivers + +![ELRS/CRSF control](../../assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_06.jpg) + +Connect the [ELRS/CRSF](../telemetry/crsf_telemetry.md) receiver to any UART serial port of the X25 EVO (e.g., **TELEM2**). + +## Power + +The X25 EVO comes standard with the PMU2 Lite power module, which supports 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). + +![Power](../../assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_07.png) + +## Telemetry (Radio) System + +[Telemetry system](../telemetry/index.md) allows you to communicate with the unmanned system via ground station software, enabling you to monitor and control the 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/). + +![Telemetry system](../../assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_04.jpg) + +## SD Card + +SD cards are highly recommended as they are required for [recording and analyzing flight details](../getting_started/flight_reporting.md), running tasks and using UAVCAN bus hardware. +An SD card is already installed on X25 EVO when it leaves the factory. + +::: tip +For more information see [Basic Concepts > SD Cards (Removable Memory)](../getting_started/px4_basic_concepts.md#sd-cards-removable-memory). +::: + +## Motors/Servo + +Motors/servos are connected to the **M1~M16** ports in the order specified for your vehicle in the [Airframe Reference](../airframes/airframe_reference.md). + +![Motors](../../assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_08.jpg) + +## Servo Power Supply + +The X25 EVO does not supply power to servos. If you need to power servos: + +1. Connect a BEC to the positive and negative terminals of any column among **M1 ~ M16** (the positive and negative terminals of **M1 ~ M16** are interconnected). +2. Then connect the servos to the same column. + +![servo power supply](../../assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_09.jpg) + +::: info +The power rail voltage must be appropriate for the servo being used! +::: + +## Other Peripherals + +The wiring and configuration of optional/less common components is covered within the topics for individual [peripherals](../peripherals/index.md). + +## Configuration + +General configuration information is covered in: [Autopilot Configuration](../config/index.md). + +QuadPlane-specific configuration is covered here: [QuadPlane VTOL Configuration](../config_vtol/vtol_quad_configuration.md) + +## Further information + +- [CUAV Docs](https://doc.cuav.net/) (CUAV) +- [X25 EVO](../flight_controller/cuav_x25-evo.md) (PX4 Doc Overview page) +- [X25 SUPER](../flight_controller/cuav_x25-super.md) (PX4 Doc Overview page) diff --git a/docs/en/assembly/quick_start_cube.md b/docs/en/assembly/quick_start_cube.md index a225d9d7cd..fefbf84e09 100644 --- a/docs/en/assembly/quick_start_cube.md +++ b/docs/en/assembly/quick_start_cube.md @@ -18,7 +18,7 @@ Further/updated information may be available in the [Cube User Manual](https://d ## Accessories -Cube comes with most (or all) of the accessories you will need when [purchased](../flight_controller/pixhawk-2.md#stores). +Cube comes with most (or all) of the accessories you will need when [purchased](../flight_controller/pixhawk-2.md#store). ![Cube Accessories](../../assets/flight_controller/cube/cube_accessories.jpg) diff --git a/docs/en/assembly/quick_start_pixhawk4_mini.md b/docs/en/assembly/quick_start_pixhawk4_mini.md deleted file mode 100644 index 78f5e647f7..0000000000 --- a/docs/en/assembly/quick_start_pixhawk4_mini.md +++ /dev/null @@ -1,161 +0,0 @@ -# _Pixhawk 4 Mini_ Wiring Quick Start - -:::warning -PX4 does not manufacture this (or any) autopilot. -Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. -::: - -This quick start guide shows how to power the [_Pixhawk® 4 Mini_](../flight_controller/pixhawk4_mini.md) flight controller and connect its most important peripherals. - -![Pixhawk4 mini](../../assets/flight_controller/pixhawk4mini/pixhawk4mini_iso_1.png) - -## Wiring Chart Overview - -The image below shows where to connect the most important sensors and peripherals (except for motors and servos). - -![*Pixhawk 4 Mini* Wiring Overview](../../assets/flight_controller/pixhawk4mini/pixhawk4mini_wiring_overview.png) - -:::tip -More information about available ports can be found here: [_Pixhawk 4 Mini_ > Interfaces](../flight_controller/pixhawk4_mini.md#interfaces). -::: - -## Mount and Orient Controller - -_Pixhawk 4 Mini_ should be mounted on your frame using vibration-damping foam pads (included in the kit). -It should be positioned as close to your vehicle’s center of gravity as possible, oriented top-side up with the arrow pointing towards the front of the vehicle. - -![*Pixhawk 4 Mini* Orientation](../../assets/flight_controller/pixhawk4mini/pixhawk4mini_orientation.png) - -::: info -If the controller cannot be mounted in the recommended/default orientation (e.g. due to space constraints) you will need to configure the autopilot software with the orientation that you actually used: [Flight Controller Orientation](../config/flight_controller_orientation.md). -::: - -## GPS + Compass + Buzzer + Safety Switch + LED - -Attach the provided GPS with integrated compass, safety switch, buzzer, and LED to the **GPS MODULE** port. The GPS/Compass should be [mounted on the frame](../assembly/mount_gps_compass.md) as far away from other electronics as possible, with the direction marker towards the front of the vehicle (separating the compass from other electronics will reduce interference). - -![Connect compass/GPS to Pixhawk 4](../../assets/flight_controller/pixhawk4mini/pixhawk4mini_gps.png) - -::: info -The GPS module's integrated safety switch is enabled _by default_ (when enabled, PX4 will not let you arm the vehicle). -To disable the safety press and hold the safety switch for 1 second. -You can press the safety switch again to enable safety and disarm the vehicle (this can be useful if, for whatever reason, you are unable to disarm the vehicle from your remote control or ground station). -::: - -## Power - -The Power Management Board (PMB) serves the purpose of a power module as well as a power distribution board. -In addition to providing regulated power to _Pixhawk 4 Mini_ and the ESCs, it sends information to the autopilot about the battery’s voltage and current draw. - -Connect the output of the PMB that comes with the kit to the **POWER** port of the _Pixhawk 4 Mini_ using a 6-wire cable. -The connections of the PMB, including power supply and signal connections to the ESCs and servos, are explained in the image below. - -![Pixhawk 4 - Power Management Board](../../assets/flight_controller/pixhawk4mini/pixhawk4mini_power_management.png) - -::: info -The image above only shows the connection of a single ESC and a single servo. -Connect the remaining ESCs and servos similarly. -::: - -| Pin(s) or Connector | Function | -| ------------------- | -------------------------------------------------------------------------- | -| B+ | Connect to ESC B+ to power the ESC | -| GND | Connect to ESC Ground | -| PWR | JST-GH 6-pin Connector, 5V 3A output
connect to _Pixhawk 4 Mini_ POWER | -| BAT | Power Input, connect to 2~12s LiPo Battery | - -The pinout of the _Pixhawk 4 Mini_ **POWER** port is shown below. -The `CURRENT` signal should carry an analog voltage from 0-3.3V for 0-120A as default. -The `VOLTAGE` signal should carry an analog voltage from 0-3.3V for 0-60V as default. -The VCC lines have to offer at least 3A continuous and should default to 5.1V. A lower voltage of 5V is still acceptable, but discouraged. - -| Pin | Signal | Volt | -| -------- | ------- | ----- | -| 1(red) | VCC | +5V | -| 2(black) | VCC | +5V | -| 3(black) | CURRENT | +3.3V | -| 4(black) | VOLTAGE | +3.3V | -| 5(black) | GND | GND | -| 6(black) | GND | GND | - -::: info -If using a plane or rover, the 8 pin power (+) rail of **MAIN OUT** will need to be separately powered in order to drive servos for rudders, elevons, etc. -To do this, the power rail needs to be connected to a BEC equipped ESC, a standalone 5V BEC, or a 2S LiPo battery. -Be careful with the voltage of servo you are going to use here. -::: - - - -::: info -Using the Power Module that comes with the kit you will need to configure the _Number of Cells_ in the [Power Settings](https://docs.qgroundcontrol.com/master/en/qgc-user-guide/setup_view/power.html) but you won't need to calibrate the _voltage divider_. -You will have to update the _voltage divider_ if you are using any other power module (e.g. the one from the Pixracer). -::: - -## Radio Control - -A remote control (RC) radio system is required if you want to _manually_ control your vehicle (PX4 does not require a radio system for autonomous flight modes). - -You will need to [select a compatible transmitter/receiver](../getting_started/rc_transmitter_receiver.md) and then _bind_ them so that they communicate (read the instructions that come with your specific transmitter/receiver). - -The instructions below show how to connect the different types of receivers to _Pixhawk 4 Mini_: - -- Spektrum/DSM or S.BUS receivers connect to the **DSM/SBUS RC** input. - - ![Pixhawk 4 Mini - Radio port for Spektrum receivers](../../assets/flight_controller/pixhawk4mini/pixhawk4mini_rc_dsmsbus.png) - -- PPM receivers connect to the **PPM RC** input port. - - ![Pixhawk 4 Mini - Radio port for PPM receivers](../../assets/flight_controller/pixhawk4mini/pixhawk4mini_rc_ppm.png) - -- PPM and PWM receivers that have an _individual wire for each channel_ must connect to the **PPM RC** port _via a PPM encoder_ [like this one](https://www.getfpv.com/radios/radio-accessories/holybro-ppm-encoder-module.html) (PPM-Sum receivers use a single signal wire for all channels). - -For more information about selecting a radio system, receiver compatibility, and binding your transmitter/receiver pair, see: [Remote Control Transmitters & Receivers](../getting_started/rc_transmitter_receiver.md). - -## Telemetry Radio (Optional) - -Telemetry radios may be used to communicate and control a vehicle in flight from a ground station (for example, you can direct the UAV to a particular position, or upload a new mission). - -The vehicle-based radio should be connected to the **TELEM1** port as shown below (if connected to this port, no further configuration is required). -The other radio is connected to your ground station computer or mobile device (usually by USB). - -![Pixhawk 4 Mini Telemetry](../../assets/flight_controller/pixhawk4mini/pixhawk4mini_telemetry.png) - -## microSD Card (Optional) - -SD cards are highly recommended as they are needed to [log and analyse flight details](../getting_started/flight_reporting.md), to run missions, and to use UAVCAN-bus hardware. -Insert the card (included in the kit) into _Pixhawk 4 Mini_ as shown below. - -![Pixhawk 4 Mini SD Card](../../assets/flight_controller/pixhawk4mini/pixhawk4mini_sdcard.png) - -:::tip -For more information see [Basic Concepts > SD Cards (Removable Memory)](../getting_started/px4_basic_concepts.md#sd-cards-removable-memory). -::: - -## Motors - -Motors/servos are connected to the **MAIN OUT** ports in the order specified for your vehicle in the [Airframe Reference](../airframes/airframe_reference.md). See [_Pixhawk 4 Mini_ > Supported Platforms](../flight_controller/pixhawk4_mini.md#supported-platforms) for more information. - -::: info -This reference lists the output port to motor/servo mapping for all supported air and ground frames (if your frame is not listed in the reference then use a "generic" airframe of the correct type). -::: - -:::warning -The mapping is not consistent across frames (e.g. you can't rely on the throttle being on the same output for all plane frames). -Make sure to use the correct mapping for your vehicle. -::: - -## Other Peripherals - -The wiring and configuration of optional/less common components is covered within the topics for individual [peripherals](../peripherals/index.md). - -## Configuration - -General configuration information is covered in: [Autopilot Configuration](../config/index.md). - -QuadPlane specific configuration is covered here: [QuadPlane VTOL Configuration](../config_vtol/vtol_quad_configuration.md) - - - -## Further information - -- [_Pixhawk 4 Mini_](../flight_controller/pixhawk4_mini.md) diff --git a/docs/en/assembly/quick_start_pixhawk5x.md b/docs/en/assembly/quick_start_pixhawk5x.md index 10db57bbf5..3516206416 100644 --- a/docs/en/assembly/quick_start_pixhawk5x.md +++ b/docs/en/assembly/quick_start_pixhawk5x.md @@ -52,7 +52,7 @@ You can press the safety switch again to enable safety and disarm the vehicle (t ## Power Connect the output of the _PM02D Power Module_ (PM board) that comes with the Standard Set to one of the **POWER** port of _Pixhawk 5X_ using the 6-wire cable. -The PM02D and Power ports on the Pixhawk 5X uses the 6 circuit [2.00mm Pitch CLIK-Mate Wire-to-Board PCB Receptacle](https://www.molex.com/en-us/products/part-detail/5024430670) & [Housing](https://www.molex.com/molex/products/part-detail/crimp_housings/5024390600). +The PM02D and Power ports on the Pixhawk 5X uses the 6 circuit [2.00mm Pitch CLIK-Mate Wire-to-Board PCB Receptacle](https://www.molex.com/en-us/products/part-detail/5024430670) & [Housing](https://www.molex.com/en-us/products/part-detail/5024390600). The PM02D Power Module supports **2~6S** battery, the board input should be connected to your LiPo battery. Note that the PM board does not supply power to the + and - pins of **FMU PWM OUT** and **I/O PWM OUT**. diff --git a/docs/en/assembly/quick_start_pixhawk6x.md b/docs/en/assembly/quick_start_pixhawk6x.md index b7f35adb96..ed8f6ccc01 100644 --- a/docs/en/assembly/quick_start_pixhawk6x.md +++ b/docs/en/assembly/quick_start_pixhawk6x.md @@ -65,7 +65,7 @@ You can press the safety switch again to enable safety and disarm the vehicle (t ## Power Connect the output of the _PM02D Power Module_ (PM board) that comes with the Standard Set to one of the **POWER** port of _Pixhawk 6X_ using the 6-wire cable. -The PM02D and Power ports on the Pixhawk 6X uses the 6 circuit [2.00mm Pitch CLIK-Mate Wire-to-Board PCB Receptacle](https://www.molex.com/en-us/products/part-detail/5024430670) & [Housing](https://www.molex.com/molex/products/part-detail/crimp_housings/5024390600). +The PM02D and Power ports on the Pixhawk 6X uses the 6 circuit [2.00mm Pitch CLIK-Mate Wire-to-Board PCB Receptacle](https://www.molex.com/en-us/products/part-detail/5024430670) & [Housing](https://www.molex.com/en-us/products/part-detail/5024390600). The PM02D Power Module supports **2~6S** battery, the board input should be connected to your LiPo battery. Note that the PM board does not supply power to the + and - pins of **FMU PWM OUT** and **I/O PWM OUT**. diff --git a/docs/en/assembly/quick_start_pixracer.md b/docs/en/assembly/quick_start_pixracer.md index dccbec98dd..ce4cbeac78 100644 --- a/docs/en/assembly/quick_start_pixracer.md +++ b/docs/en/assembly/quick_start_pixracer.md @@ -52,7 +52,7 @@ The instructions below show how to connect the different types of receivers: Pixracer has inbuilt WiFi, but also supports telemetry via external Wi-Fi or radio telemetry modules connected to the `TELEM1` or `TELEM2` ports. This is shown in the wiring diagram below. -![Pixracer external telemtry options](../../assets/flight_controller/pixracer/pixracer_top_telemetry.jpg) +![Pixracer external telemetry options](../../assets/flight_controller/pixracer/pixracer_top_telemetry.jpg) ::: info The `TELEM2` port must be configured as a second MAVLink instance using the [MAV_2_CONFIG](../advanced_config/parameter_reference.md#MAV_2_CONFIG) parameter. diff --git a/docs/en/camera/camera_architecture.md b/docs/en/camera/camera_architecture.md index b7de079bc2..5390641c38 100644 --- a/docs/en/camera/camera_architecture.md +++ b/docs/en/camera/camera_architecture.md @@ -36,7 +36,7 @@ The `camera_trigger`, `camera_capture` and `camera_feedback` modules are not use This work is handled by three PX4 components: [`camera_trigger` driver](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/camera_trigger), [`camera_capture` driver](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/camera_capture), [`camera-feedback` module](../modules/modules_system.md#camera-feedback). `camera_trigger` subscribes to the [VehicleCommand](../msg_docs/VehicleCommand.md) topic and monitors for updates to its [supported commands](../camera/fc_connected_camera.md#mavlink-command-interface). -Thes updates occur when either a command is received via MAVLink or when a [camera item is reached in a mission](#camera-commands-in-missions). +These updates occur when either a command is received via MAVLink or when a [camera item is reached in a mission](#camera-commands-in-missions). The commands enable and disable triggering, and configure triggering at time and distance intervals. The driver tracks these intervals, and when needed triggers the outputs. diff --git a/docs/en/camera/camera_intel_realsense_t265_vio.md b/docs/en/camera/camera_intel_realsense_t265_vio.md index 1fdb99e9ab..795ba5c2b4 100644 --- a/docs/en/camera/camera_intel_realsense_t265_vio.md +++ b/docs/en/camera/camera_intel_realsense_t265_vio.md @@ -18,17 +18,20 @@ No longer available. At a high level: -- The [`realsense-ros` wrapper](https://github.com/IntelRealSense/realsense-ros) provided by Intel should be used to extract the raw data from the camera. +- The [`realsense-ros` wrapper](https://github.com/realsenseai/realsense-ros) provided by Intel should be used to extract the raw data from the camera. - The camera should be mounted with lenses facing down (default). Be sure to specify the camera orientation by publishing the static transform between the `base_link` and `camera_pose_frame` in a ROS launch file, for example: + ```xml ``` + This is a static transform that links the camera ROS frame `camera_pose_frame` to the MAVROS drone frame `base_link`. - the first three `args` specify _translation_ x,y,z in metres from the center of the flight controller to the camera. For example, if the camera is 10cm in front of the controller and 4cm up, the first three numbers would be : [0.1, 0, 0.04,...] - the next three `args` specify rotation in radians (yaw, pitch, roll). So `[... 0, 1.5708, 0]` means pitch down by 90° (facing the ground). Facing straight forward would be [... 0 0 0]. + - The camera is sensitive to high-frequency vibrations! It should be soft-mounted with, for example, vibration isolation foam. diff --git a/docs/en/camera/fc_connected_camera.md b/docs/en/camera/fc_connected_camera.md index f3cee6de85..69ce7ee737 100644 --- a/docs/en/camera/fc_connected_camera.md +++ b/docs/en/camera/fc_connected_camera.md @@ -78,7 +78,7 @@ The shutter integration setting (`param2`) is only obeyed with a GPIO backend. ## Trigger Configuration -Cameras can be connected to the FC for triggering using different intefaces, such as PWM, and GPIO, by specifying the appropriate [trigger interface backend](#trigger-interface-backends). +Cameras can be connected to the FC for triggering using different interfaces, such as PWM, and GPIO, by specifying the appropriate [trigger interface backend](#trigger-interface-backends). You can also indicate the camera [trigger mode](#trigger-modes). This configuration can most easily be done from the _QGroundControl_ [Vehicle Setup > Camera](https://docs.qgroundcontrol.com/master/en/qgc-user-guide/setup_view/camera.html#px4-camera-setup) section. @@ -307,7 +307,7 @@ Wire up your cameras to your AUX port by connecting the ground and signal pins t ### Step 4 You will have to modify your driver to follow the sequence diagram above. -Public reference implementations for [IDS Imaging UEye](https://github.com/ProjectArtemis/ueye_cam) cameras and for [IEEE1394 compliant](https://github.com/andre-nguyen/camera1394) cameras are available. +Public reference implementations for [IDS Imaging UEye](https://github.com/anqixu/ueye_cam) cameras and for [IEEE1394 compliant](https://github.com/andre-nguyen/camera1394) cameras are available. ## See Also diff --git a/docs/en/camera/mavlink_v1_camera.md b/docs/en/camera/mavlink_v1_camera.md index ac39e743f8..9f6c97ecb2 100644 --- a/docs/en/camera/mavlink_v1_camera.md +++ b/docs/en/camera/mavlink_v1_camera.md @@ -1,4 +1,4 @@ -# Simple MAVLink Cameras (Camera Protcol v1) +# Simple MAVLink Cameras (Camera Protocol v1) This topic explains how to use PX4 with a MAVLink [camera](../camera/index.md) that implements the [Camera Protocol v1 (Simple Trigger Protocol)](https://mavlink.io/en/services/camera_v1.html) with PX4 and a Ground Station. @@ -18,7 +18,7 @@ This approach is retained for use with older MAVLink cameras. PX4 supports this command set for triggering cameras with native support for the protocol (as described in this topic), and also for [cameras attached to flight controller outputs](../camera/fc_connected_camera.md). Ground stations and MAVLink SDKs generally address camera commands to the autopilot, which then forwards them to a connected MAVLink channel of type `onboard`. -PX4 also re-emits any camera mission items it encouters in a mission as camera commands: commands that aren't accepted are logged. +PX4 also re-emits any camera mission items it encounters in a mission as camera commands: commands that aren't accepted are logged. In all cases the commands are sent with the system id of the autopilot and the component ID of 0 (i.e. addressed to all components, including cameras). PX4 will also emit a [CAMERA_TRIGGER](https://mavlink.io/en/messages/common.html#CAMERA_TRIGGER) whenever an image capture is triggered (the camera itself may also emit this message on triggering). diff --git a/docs/en/can/index.md b/docs/en/can/index.md index cf33b7a8c4..dd218fd62c 100644 --- a/docs/en/can/index.md +++ b/docs/en/can/index.md @@ -37,7 +37,7 @@ The wiring for CAN networks is the same for both DroneCAN and Cyphal/CAN (in fac Devices within a network are connected in a _daisy-chain_ in any order (this differs from UARTs peripherals, where you attach just one component per port). :::warning Don't connect each CAN peripheral to a separate CAN port! -Unlike UARTs, CAN peripherals are designed to be daisy chained, with additional ports such as `CAN2` used for [redundancy](redundancy). +Unlike UARTs, CAN peripherals are designed to be daisy chained, with additional ports such as `CAN2` used for [redundancy](#redundancy). ::: At either end of the chain, a 120Ω termination resistor should be connected between the two data lines. @@ -83,7 +83,7 @@ You only _need_ one CAN port to support an arbitrary number of CAN devices using Don't connect each CAN peripheral to a separate CAN port! ::: -Generally you'll daisy all CAN peripherals off a single port, and if there is more than one CAN port, use the second one for [redundancy](redundancy). +Generally you'll daisy all CAN peripherals off a single port, and if there is more than one CAN port, use the second one for [redundancy](#redundancy). If three are three ports, you might use the remaining network for devices that support another CAN protocol. The documentation for your flight controller should indicate which ports are supported/enabled. diff --git a/docs/en/companion_computer/companion_computer_peripherals.md b/docs/en/companion_computer/companion_computer_peripherals.md index 481603109a..d08e4fecfd 100644 --- a/docs/en/companion_computer/companion_computer_peripherals.md +++ b/docs/en/companion_computer/companion_computer_peripherals.md @@ -54,8 +54,8 @@ They are in no way guaranteed to be plug and play with your companion computer. Popular stereo cameras include: -- [Intel® RealSense™ Depth Camera D435](https://realsenseai.com/stereo-depth-cameras/stereo-depth-camera-d435/) -- [Intel® RealSense™ Depth Camera D415](https://realsenseai.com/stereo-depth-cameras/stereo-depth-camera-d415/) +- [Intel® RealSense™ Depth Camera D435](https://www.realsenseai.com/products/stereo-depth-camera-d435/) +- [Intel® RealSense™ Depth Camera D415](https://www.realsenseai.com/products/stereo-depth-camera-d415/) - [DUO MLX](https://duo3d.com/product/duo-minilx-lv1) ### VIO Cameras/Sensors diff --git a/docs/en/companion_computer/holybro_pixhawk_jetson_baseboard.md b/docs/en/companion_computer/holybro_pixhawk_jetson_baseboard.md index 5f51577043..7aa1ac3530 100644 --- a/docs/en/companion_computer/holybro_pixhawk_jetson_baseboard.md +++ b/docs/en/companion_computer/holybro_pixhawk_jetson_baseboard.md @@ -783,7 +783,7 @@ sudo apt install build-essential cmake git genromfs kconfig-frontends libncurses ## Building/Flashing the Pixhawk The recommended way to update PX4 is on the Pixhawk part of the board is to use your development computer. -You can either install install prebuilt binaries with QGroundControl, or first build and then upload custom firmware. +You can either install prebuilt binaries with QGroundControl, or first build and then upload custom firmware. Alternatively, you can build and deploy PX4 firmware to the Pixhawk part from the Jetson. diff --git a/docs/en/companion_computer/index.md b/docs/en/companion_computer/index.md index 7315e48cd5..0418c7de2c 100644 --- a/docs/en/companion_computer/index.md +++ b/docs/en/companion_computer/index.md @@ -33,7 +33,7 @@ They are listed here as they can be updated with "vanilla" PX4 firmware for test ## Companion Computer Options -PX4 can be used with computers that can be configured to communicate via MAVLink or microROS/uXRCE-DDS over over a serial port (or Ethernet port, if present). +PX4 can be used with computers that can be configured to communicate via MAVLink or microROS/uXRCE-DDS over a serial port (or Ethernet port, if present). A small subset of possible alternatives are listed below. Larger high power examples: diff --git a/docs/en/companion_computer/pixhawk_rpi.md b/docs/en/companion_computer/pixhawk_rpi.md index b998f897a1..69eb1d7c3c 100644 --- a/docs/en/companion_computer/pixhawk_rpi.md +++ b/docs/en/companion_computer/pixhawk_rpi.md @@ -1,6 +1,6 @@ # Raspberry Pi Companion with Pixhawk -This topic describes how to setup a Raspberry Pi ("RPi") companion companion running [ROS 2](../ros2/user_guide.md) on Linux Ubuntu OS, connecting to a [Pixhawk](../flight_controller/autopilot_pixhawk_standard.md) flight controller using a serial connection between the Pixhawk `TELEM2` port and the RPi's TX/RX pins. +This topic describes how to setup a Raspberry Pi ("RPi") companion running [ROS 2](../ros2/user_guide.md) on Linux Ubuntu OS, connecting to a [Pixhawk](../flight_controller/autopilot_pixhawk_standard.md) flight controller using a serial connection between the Pixhawk `TELEM2` port and the RPi's TX/RX pins. These instructions should be readily extensible to other RPi and flight controller configurations. diff --git a/docs/en/companion_computer/video_streaming.md b/docs/en/companion_computer/video_streaming.md index b15437fabb..ec91b92aa5 100644 --- a/docs/en/companion_computer/video_streaming.md +++ b/docs/en/companion_computer/video_streaming.md @@ -20,7 +20,7 @@ For a Ubuntu companion, a minimal set might be: sudo apt install gstreamer1.0-plugins-bad gstreamer1.0-libav gstreamer1.0-gl -y ``` -For the full set you can mirror the QGC dependencies installed by [/tools/setup/install-dependencies-debian.sh](https://github.com/mavlink/qgroundcontrol/blob/master/tools/setup/install-dependencies-debian.sh). +For the full set you can mirror the QGC dependencies installed by [/tools/setup/install_dependencies.py](https://github.com/mavlink/qgroundcontrol/blob/master/tools/setup/install_dependencies.py). At time of writing this is: ```sh diff --git a/docs/en/complete_vehicles_mc/crazyflie2.md b/docs/en/complete_vehicles_mc/crazyflie2.md index 5be15394fb..920c814ee3 100644 --- a/docs/en/complete_vehicles_mc/crazyflie2.md +++ b/docs/en/complete_vehicles_mc/crazyflie2.md @@ -1,306 +1,7 @@ + + + diff --git a/docs/en/complete_vehicles_mc/holybro_kopis2.md b/docs/en/complete_vehicles_mc/holybro_kopis2.md index 5db2798097..db0afd27b6 100644 --- a/docs/en/complete_vehicles_mc/holybro_kopis2.md +++ b/docs/en/complete_vehicles_mc/holybro_kopis2.md @@ -28,7 +28,7 @@ In addition you will need: The _Kopis 2_ comes preinstalled with Betaflight. Before loading PX4 firmware you must first install the PX4 bootloader. -Instructions for installing the bootloader can be found in the [Kakute F7](../flight_controller/kakutef7.md#bootloader) topic (this is the flight controller board on the _Kopis 2_). +Download the [kakutef7_bl.hex](https://raw.githubusercontent.com/PX4/PX4-Autopilot/release/1.17/docs/assets/flight_controller/kakutef7/kakutef7_bl_0b3fbe2da0.hex?download=true) bootloader binary and read [PX4 Bootloader Flashing onto Betaflight Systems](../advanced_config/bootloader_update_from_betaflight.md) for flashing instructions. :::tip You can always [reinstall Betaflight](../advanced_config/bootloader_update_from_betaflight.md#reinstall-betaflight) later if you want! diff --git a/docs/en/complete_vehicles_mc/px4_vision_kit.md b/docs/en/complete_vehicles_mc/px4_vision_kit.md index e20ea0da32..9c2e43991c 100644 --- a/docs/en/complete_vehicles_mc/px4_vision_kit.md +++ b/docs/en/complete_vehicles_mc/px4_vision_kit.md @@ -67,7 +67,7 @@ Difference between the PX4 Vision V1 and V1.5 can be found [here](https://docs.h ![PV4 Vision v1.5](../../assets/hardware/px4_vision_devkit/px4_vision_v1.5_whats_inside.jpg) -What's inside the PX4 Vision V1 can be found here in the [PX4 v1.13 Docs here](https://docs.px4.io/v1.13/en/complete_vehicles/px4_vision_kit.html#what-is-inside). +What's inside the PX4 Vision V1 can be found here in the [PX4 v1.13 Docs here](https://docs.px4.io/v1.13/en/complete_vehicles/px4_vision_kit#what-is-inside). The PX4 Vision DevKit contains following components: @@ -381,7 +381,7 @@ The carrier board pinouts and other information are in the [downloads section](h ## Other Development Resources - [_UP Core_ Wiki](https://github.com/up-board/up-community/wiki/Ubuntu) - _Up Core_ companion computer technical information -- [Occipital Developer Forum](https://structure.io/developers/) - _Structure Core_ camera information +- [Occipital Developer Forum](https://structure.io/structure-sdk/) - _Structure Core_ camera information - [Pixhawk 4 Overview](../flight_controller/pixhawk4.md) - [Pixhawk 6C Overview](../flight_controller/pixhawk6c.md) diff --git a/docs/en/complete_vehicles_rover/aion_r1.md b/docs/en/complete_vehicles_rover/aion_r1.md index 2ca9b0203b..1e4316e731 100644 --- a/docs/en/complete_vehicles_rover/aion_r1.md +++ b/docs/en/complete_vehicles_rover/aion_r1.md @@ -33,7 +33,7 @@ For this build this includes an [Auterion Skynode](../companion_computer/auterio If using a standard Pixhawk you could connect the RoboClaw to the Autopilot without an Adapter Board. ::: -The RoboClaw should be connected to a suitable suitable serial (UART) port on the flight controller, such as `GPS2` or `TELEM1`. +The RoboClaw should be connected to a suitable serial (UART) port on the flight controller, such as `GPS2` or `TELEM1`. Other RoboClaw wiring is detailed in the [RoboClaw User Manual](https://downloads.basicmicro.com/docs/roboclaw_user_manual.pdf) 'Packet Serial Wiring' section and shown below (this setup has been validated for compatibility). ![Serial Wiring Encoders](../../assets/airframes/rover/aion_r1/wiring_r1.jpg) diff --git a/docs/en/computer_vision/collision_prevention.md b/docs/en/computer_vision/collision_prevention.md index 1fad93be3d..06ecd76898 100644 --- a/docs/en/computer_vision/collision_prevention.md +++ b/docs/en/computer_vision/collision_prevention.md @@ -143,7 +143,7 @@ If you wish to move freely into directions without sensor coverage, this can be ### Acceleration Constraining -For this we split out the acceleration setpoint into two components, one parallel to the closest distance to the obstacle and one normal to it. Then we scale each of these components according the the figure below. +For this we split out the acceleration setpoint into two components, one parallel to the closest distance to the obstacle and one normal to it. Then we scale each of these components according to the figure below. ![Scalefactor](../../assets/computer_vision/collision_prevention/scalefactor.png) diff --git a/docs/en/computer_vision/path_planning_interface.md b/docs/en/computer_vision/path_planning_interface.md index 57e0d4f8c6..19a56738e6 100644 --- a/docs/en/computer_vision/path_planning_interface.md +++ b/docs/en/computer_vision/path_planning_interface.md @@ -18,4 +18,4 @@ This interface allows PX4 to stream a proposed path to a companion computer, and This enables features such obstacle avoidance in missions and safer landing to be provided by a planner on a companion computer. This actual code is still present in code at time of writing (PX4 v1.15). -Information about the API and associated features can be found in the [PX4 v1.14 docs](https://docs.px4.io/v1.14/en/computer_vision/path_planning_interface.html). +Information about the API and associated features can be found in the [PX4 v1.14 docs](https://docs.px4.io/v1.14/en/computer_vision/path_planning_interface). diff --git a/docs/en/computer_vision/visual_inertial_odometry.md b/docs/en/computer_vision/visual_inertial_odometry.md index 6b5d9ff178..0430f30538 100644 --- a/docs/en/computer_vision/visual_inertial_odometry.md +++ b/docs/en/computer_vision/visual_inertial_odometry.md @@ -97,8 +97,8 @@ The value can further be tuned by varying the parameter to find the value that y ## Check/Verify VIO Estimate {#verify_estimate} -::: info -The [MAV_ODOM_LP](../advanced_config/parameter_reference.md#MAV_ODOM_LP) parameter mentioned below was removed in PX4 v1.14. +::: warning +The `MAV_ODOM_LP` parameter mentioned below was removed in PX4 v1.14. This section needs to be updated. ::: diff --git a/docs/en/concept/control_allocation.md b/docs/en/concept/control_allocation.md index d6e60189f2..1467a705c3 100644 --- a/docs/en/concept/control_allocation.md +++ b/docs/en/concept/control_allocation.md @@ -2,7 +2,7 @@ ::: info Control allocation replaces the legacy mixing approach used in PX4 v1.13 and earlier. -For PX4 v1.13 documentation see: [Mixing & Actuators](https://docs.px4.io/v1.13/en/concept/mixing.html), [Geometry Files](https://docs.px4.io/v1.13/en/concept/geometry_files.html) and [Adding a New Airframe Configuration](https://docs.px4.io/v1.13/en/dev_airframes/adding_a_new_frame.html). +For PX4 v1.13 documentation see: [Mixing & Actuators](https://docs.px4.io/v1.13/en/concept/mixing), [Geometry Files](https://docs.px4.io/v1.13/en/concept/geometry_files) and [Adding a New Airframe Configuration](https://docs.px4.io/v1.13/en/dev_airframes/adding_a_new_frame). ::: PX4 takes desired torque and thrust commands from the core controllers and translates them to actuator commands which control motors or servos. diff --git a/docs/en/concept/events_interface.md b/docs/en/concept/events_interface.md index 6c29ebe798..71e37f8f99 100644 --- a/docs/en/concept/events_interface.md +++ b/docs/en/concept/events_interface.md @@ -92,7 +92,7 @@ Explanations and requirements: ``` - Above we specify a separate external and internal log level, which are the levels displayed to GCS users and in the log file, respectively: `{events::Log::Error, events::LogInternal::Info}`. - For the majority of cases you can pass a single log level, and this will be used for both exernal and internal cases. + For the majority of cases you can pass a single log level, and this will be used for both external and internal cases. There are cases it makes sense to have two different log levels. For example an RTL failsafe action: the user should see it as Warning/Error, whereas in the log, it is an expected system response, so it can be set to `Info`. diff --git a/docs/en/concept/flight_tasks.md b/docs/en/concept/flight_tasks.md index 242a1e96fe..83043322ea 100644 --- a/docs/en/concept/flight_tasks.md +++ b/docs/en/concept/flight_tasks.md @@ -114,7 +114,7 @@ The instructions below might be used to create a task named _MyTask_: ::: tip The task added above will be built on all boards, including those with constrained flash such as Pixhawk FMUv2. - If your task is not indended for use on boards with constrained flash it should instead be added to the conditional block shown below (as shown). + If your task is not intended for use on boards with constrained flash it should instead be added to the conditional block shown below (as shown). ```cmake ... diff --git a/docs/en/concept/system_startup.md b/docs/en/concept/system_startup.md index d425d35173..d42d1addd6 100644 --- a/docs/en/concept/system_startup.md +++ b/docs/en/concept/system_startup.md @@ -21,7 +21,7 @@ For that to work, a few things are required: - PX4 modules need to look like individual executables to the system. This is done via symbolic links. For each module a symbolic link `px4- -> px4` is created in the `bin` directory of the build folder. - When executed, the binary path is checked (`argv[0]`), and if it is a module (starts with `px4-`), it sends the command to the main px4 instance (see below). + When executed, the binary path is checked (`argv[0]`), and if it is a module (starts with `px4-`), it sends the command to the main PX4 instance (see below). :::tip The `px4-` prefix is used to avoid conflicts with system commands (e.g. `shutdown`), and it also allows for simple tab completion by typing `px4-`. @@ -30,13 +30,13 @@ For that to work, a few things are required: - The shell needs to know where to find the symbolic links. For that the `bin` directory with the symbolic links is added to the `PATH` variable right before executing the startup scripts. - The shell starts each module as a new (client) process. - Each client process needs to communicate with the main instance of px4 (the server), where the actual modules are running as threads. + Each client process needs to communicate with the main instance of PX4 (the server), where the actual modules are running as threads. This is done through a [UNIX socket](https://man7.org/linux/man-pages/man7/unix.7.html). The server listens on a socket, to which clients can connect and send a command. The server then sends the output and return code back to the client. - The startup scripts call the module directly, e.g. `commander start`, rather than using the `px4-` prefix. This works via aliases: for each module an alias in the form of `alias =px4-` is created in the file `bin/px4-alias.sh`. -- The `rcS` script is executed from the main px4 instance. +- The `rcS` script is executed from the main PX4 instance. It does not start any modules, but first updates the `PATH` variable and then simply runs a shell with the `rcS` file as argument. - In addition to that, multiple server instances can be started for multi-vehicle simulations. A client selects the instance via `--instance`. diff --git a/docs/en/config/_autotune.md b/docs/en/config/_autotune.md index fe5373b169..4c50255534 100644 --- a/docs/en/config/_autotune.md +++ b/docs/en/config/_autotune.md @@ -124,7 +124,7 @@ Additional notes:
- The instructions above tune the vehicle in [Altitude mode](../flight_modes_mc/altitude.md). - You can instead takeoff in [Takeoff mode](../flight_modes_mc/takeoff.md) and tune in [Position mode](../flight_modes_mc/position.md) if the vehicle is is _known_ to be stable in these modes. + You can instead takeoff in [Takeoff mode](../flight_modes_mc/takeoff.md) and tune in [Position mode](../flight_modes_mc/position.md) if the vehicle is _known_ to be stable in these modes.
@@ -241,7 +241,7 @@ To map a switch: 2. Set [RC_MAP_AUX1](../advanced_config/parameter_reference.md#RC_MAP_AUX1) to match the RC channel for your switch (you can use any of `RC_MAP_AUX1` to `RC_MAP_AUX6`). 3. Set [FW_AT_MAN_AUX](../advanced_config/parameter_reference.md#FW_AT_MAN_AUX) to the selected channel (i.e. `1: Aux 1` if you mapped `RC_MAP_AUX1`). -The auto tuner will be disabled when the switch is below `0.5` (on the manual control setpoint range of of `[-1, 1]`) and enabled when the switch channel is above `0.5`. +The auto tuner will be disabled when the switch is below `0.5` (on the manual control setpoint range of `[-1, 1]`) and enabled when the switch channel is above `0.5`. If using an RC AUX switch to enable autotuning, make sure to [select the tuning axes](#select-tuning-axis) before flight. diff --git a/docs/en/config/actuators.md b/docs/en/config/actuators.md index e15e5d1608..9544eef9c6 100644 --- a/docs/en/config/actuators.md +++ b/docs/en/config/actuators.md @@ -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](../payloads/generic_actuator_control.md#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 @@ -660,7 +674,6 @@ For each of the tilt servos: - If a safety button is used, it must be pressed before actuator testing is allowed. - The kill-switch can still be used to stop motors immediately. - Servos do not actually move until the corresponding slider is changed. -- The parameter [COM_MOT_TEST_EN](../advanced_config/parameter_reference.md#COM_MOT_TEST_EN) can be used to completely disable actuator testing. - On the shell, [actuator_test](../modules/modules_command.md#actuator-test) can be used as well for actuator testing. - VTOLs will automatically turn off motors pointing upwards during **fixed-wing flight**: - Standard VTOL : Motors defined as multicopter motors will be turned off diff --git a/docs/en/config/compass.md b/docs/en/config/compass.md index 0ad2622cbb..6d85007e92 100644 --- a/docs/en/config/compass.md +++ b/docs/en/config/compass.md @@ -27,9 +27,9 @@ Several types of compass calibration are available: 1. [Complete](#complete-calibration): This calibration is required after installing the autopilot on an airframe for the first time or when the configuration of the vehicle has changed significantly. It compensates for hard and soft iron effects by estimating an offset and a scale factor for each axis. 1. [Partial](#partial-quick-calibration): This calibration can be performed as a routine when preparing the vehicle for a flight, after changing the payload, or simply when the compass rose seems inaccurate. - This type of calibration only estimates the offsets to compensate for a hard iron effect. + This type of calibration only estimates the offsets to compensate for a hard-iron effect. 1. [Large vehicle](#large-vehicle-calibration): This calibration can be performed when the vehicle is too large or heavy to perform a complete calibration. - This type of calibration only estimates the offsets to compensate for a hard iron effect. + This type of calibration only estimates the offsets to compensate for a hard-iron effect. ## Performing the Calibration @@ -92,28 +92,77 @@ Notes: -This calibration process leverages external knowledge of vehicle's orientation and location, and a World Magnetic Model (WMM) to calibrate the hard iron biases. +This calibration process leverages external knowledge of the vehicle's orientation and location, along with a World Magnetic Model (WMM), to calibrate hard-iron biases. +It is designed for large or heavy vehicles where full-axis rotation is impractical. -1. Ensure GNSS Fix. - This is required to find the expected Earth magnetic field in WMM tables. -2. Align the vehicle to face True North. - Be as accurate as possible for best results. -3. Open the [QGroundControl MAVLink Console](https://docs.qgroundcontrol.com/master/en/qgc-user-guide/analyze_view/mavlink_console.html) and send the following command: +The calibration accepts an optional heading argument (), allowing you to specify the vehicle's current true heading. +This means you can perform a valid magnetometer calibration while the vehicle is pointed in any direction, not just North. + +::: tip +The [complete calibration](#complete-calibration) is more reliable, and should be used if you can physically rotate the vehicle through all required orientations. + +If the large vehicle calibration fails (magnetometer readings are inconsistent, or if yaw is unstable or incorrect) you will need to [recalibrate](#recalibration) using the complete calibration. +::: + +::: details Implementation details + +This implementation replaces an earlier version (PX4 v1.15 - PX4 v1.17) that required the vehicle to be facing True North. + +The calibration process: + +- Computes hard-iron bias offsets by comparing the expected Earth magnetic field vector (based on location and heading from WMM) with the measured field from the magnetometer(s). +- Adjusts magnetometer offset parameters so the heading estimate aligns correctly without requiring full 3-axis rotation. +- The calibration is applied immediately. + Offsets persist once parameters are saved (typically on disarm or reboot). + +::: + +#### Preconditions + +- Obtain a valid GNSS fix (required for World Magnetic Model lookup). +- Choose a location away from large metal objects or magnetic fields. +- If using an external compass, ensure it is [mounted](../assembly/mount_gps_compass.md) as far as possible from other electronics. + +#### Procedure + +1. **Ensure GNSS Fix.** + This is required to look up the expected Earth magnetic field from WMM tables. +2. **Align the vehicle to a known heading.** + This can be True North (0°), or any other known heading relative to True North. +3. Open the [QGroundControl MAVLink Console](https://docs.qgroundcontrol.com/master/en/qgc-user-guide/analyze_view/mavlink_console.html) and run: ```sh - commander calibrate mag quick + commander calibrate mag quick [heading] ``` -Notes: + | Parameter | Description | + | -------------------- | ---------------------------------------------------------------------------------- | + | `heading` (optional) | True heading of the vehicle in degrees (0–359). Defaults to 0° (North) if omitted. | -- This method is specifically designed for vehicles where full rotation is impractical or impossible. - If full rotation is possible, use the [complete calibration](#complete-calibration) instead. -- The vehicle doesn't need to be exactly levelled as this is automatically compensated using the tilt estimate. + **Examples:** + + | Vehicle Facing | Command | + | ---------------- | ----------------------------------- | + | North (0°) | `commander calibrate mag quick` | + | East (90°) | `commander calibrate mag quick 90` | + | South (180°) | `commander calibrate mag quick 180` | + | Southwest (225°) | `commander calibrate mag quick 225` | + +::: info Notes + +- The vehicle doesn't need to be exactly level. + Tilt is automatically compensated using the attitude estimate. - This calibration can also be triggered using the MAVLink command [MAV_CMD_FIXED_MAG_CAL_YAW](https://mavlink.io/en/messages/common.html#MAV_CMD_FIXED_MAG_CAL_YAW). -## Verification +::: -After the calibration is complete, check that the heading indicator and the heading of the arrow on the map are stable and match the orientation of the vehicle when turning it e.g. to the cardinal directions. +#### Verification + +After calibration: + +1. Check that the heading indicator in QGroundControl is stable. +2. Rotate the vehicle to cardinal directions (N/E/S/W) and verify the compass heading matches. +3. If using multiple magnetometers, confirm the correct sensor priority is set. ## Recalibration @@ -141,7 +190,7 @@ Recalibrate the compass when: ## Additional Calibration/Configuration -The process above will autodetect, [set default rotations](../advanced_config/parameter_reference.md#SENS_MAG_AUTOROT), calibrate, and prioritise, all available magnetometers. +The processes above will autodetect, [set default rotations](../advanced_config/parameter_reference.md#SENS_MAG_AUTOROT), calibrate, and prioritise, all available magnetometers. If external magnetometers are available, internal magnetometers are disabled. Further compass configuration should generally not be required. diff --git a/docs/en/config/joystick.md b/docs/en/config/joystick.md index 1ac83d50b0..e084503316 100644 --- a/docs/en/config/joystick.md +++ b/docs/en/config/joystick.md @@ -23,8 +23,7 @@ Information about how to set up a joystick is covered in: [QGroundControl > Joys In summary: - Open _QGroundControl_ -- Set the parameter [COM_RC_IN_MODE=1](../advanced_config/parameter_reference.md#COM_RC_IN_MODE) - `Joystick` - - See [Parameters](https://docs.qgroundcontrol.com/master/en/qgc-user-guide/setup_view/parameters.html) for information about setting parameters - - Setting the parameter to `2` or `3` also enables Joystick under some circumstances. +- [Enable a `COM_RC_IN_MODE` mode that allows Joystick](../config/manual_control.md#px4-configuration). + The default `RC or MAVLink keep first` should work if you plan to only have a Joystick connected. - Connect the joystick - Configure the connected joystick in: **Vehicle Setup > Joystick**. diff --git a/docs/en/config/manual_control.md b/docs/en/config/manual_control.md new file mode 100644 index 0000000000..61c7209e19 --- /dev/null +++ b/docs/en/config/manual_control.md @@ -0,0 +1,58 @@ +# Manual Control + +Pilots can control a vehicle manually using either a [Radio Control (RC) System](../getting_started/rc_transmitter_receiver.md) or a [Joystick/Gamepad](../config/joystick.md) controller connected via QGroundControl. +PX4 also supports using RC and/or multiple Joysticks, with fallback from one type to the other. + +![Taranis X9D Transmitter](../../assets/hardware/transmitters/frsky_taranis_x9d_transmitter.jpg) Photo of MicroNav, a ground controller with integrated joysticks + +## Overview + +_Joystick_ setups use QGroundControl to encode the control information from a "standard" computer gaming joystick into [MAVLink messages](https://mavlink.io/en/services/manual_control.html) that are sent to the vehicle over the (shared) telemetry radio channel. +They are often used in integrated GCS/manual control systems because it is cheaper and easier to integrate a joystick than a separate radio system. + +Joysticks are suitable for most applications provided your telemetry channel has a high enough bandwidth/low latency. +They are perfect for flying the PX4 simulator, because you can plug them directly into your ground control computer and start flying. + +_RC systems_ use a dedicated ground-based radio transmitter and vehicle-based receiver for sending control information. +They offer lower latency than Joysticks, and are very highly recommended when first tuning/testing a new frame design, when flying racers/acrobatically, and in other cases where low latency is important. +They can also be useful as a robust backup link for safety. +Note RC systems usually require significantly more configuration and calibration, much of which may be brand or model-specific. + +::: info +PX4 does not _require_ a manual control system for autonomous flight modes. +::: + +## PX4 Configuration + +::: tip +This section explains how to configure PX4 to use and prioritise various manual control sources (other configuration is covered in the guides for each type of manual control). +::: + +If you only have one manual control system, either RC or Joystick, then by default no manual control selection is required. +In this case PX4 locks to the first valid manual control source it detects and uses that source until the vehicle is rebooted. + +If you have multiple control sources, such as an RC system and/or one or more Joysticks, then you can use the [COM_RC_IN_MODE](../advanced_config/parameter_reference.md#COM_RC_IN_MODE) parameter to determine which source is active, specifying selection priorities and fallback behavior ([parameters can be set](../advanced_config/parameters.md#finding-a-parameter) using QGC): + +- `0`: RC only. +- `1`: MAVLink only. +- `2`: RC or MAVLink with fallback (switches if current source becomes invalid). +- `3`: RC or MAVLink keep first (locks to the first valid source until reboot). +- `4`: Disable manual control (ignores all sources). +- `5`: RC priority, then MAVLink (lower instance before higher) — `RC > MAVLink 1 > MAVLink 2` +- `6`: MAVLink priority (lower instance before higher), then RC — `MAVLink 1 > MAVLink 2 > RC` +- `7`: RC priority, then MAVLink (higher instance before lower) — `RC > MAVLink 2 > MAVLink 1` +- `8`: MAVLink priority (higher instance before lower), then RC — `MAVLink 2 > MAVLink 1 > RC` + +The [MAVLink instance](../peripherals/mavlink_peripherals.md#mavlink-instances) refers to an instance assigned to a serial port, such as [MAV_0_CONFIG](../advanced_config/parameter_reference.md#MAV_0_CONFIG). + +Notes: + +- RC checks are run for any option that uses RC (so not for `MAVLink only` or `Disable manual control`). +- When using priority sources, sources are evaluated as soon as they become valid and may trigger an immediate switch (if higher priority than the currently active source). +- A [Manual Control Loss Failsafe](../config/safety.md#manual-control-loss-failsafe) is triggered when none of the manual control inputs allowed by the `COM_RC_IN_MODE` mode are available for a time that is greater than the RC Loss Timeout. + As long as there is a fallback input source available, the failsafe is not triggered. + +## See Also + +- [Radio Control (RC)](../getting_started/rc_transmitter_receiver.md) +- [Joysticks](../config/joystick.md) diff --git a/docs/en/config/radio.md b/docs/en/config/radio.md index 35273e27a2..14a07b17f4 100644 --- a/docs/en/config/radio.md +++ b/docs/en/config/radio.md @@ -1,10 +1,12 @@ # Radio Control (RC) Setup -The _Radio Setup_ screen is used to configure the mapping of your RC controller's main attitude control sticks (roll, pitch, yaw, throttle) to channels, and to calibrate the minimum, maximum, trim and reverse settings for all other transmitter controls/RC channels. +The _Radio Setup_ screen is used to configure the mapping of your [RC controller's](../getting_started/rc_transmitter_receiver.md) main attitude control sticks (roll, pitch, yaw, throttle) to channels, and to calibrate the minimum, maximum, trim and reverse settings for all other transmitter controls/RC channels. ::: info -A [Joystick](../config/joystick.md) can be used instead of RC for manual control. -The [COM_RC_IN_MODE](../advanced_config/parameter_reference.md#COM_RC_IN_MODE) parameter [can be set](../advanced_config/parameters.md) to define what kind of manual controller(s) are enabled. +A [Joystick](../config/joystick.md) can also be used for [Manual Control](../config/manual_control.md). + +By default PX4 will latch the first valid controller it discovers and use it until the vehicle reboots. +If you have multiple controllers and you want to define their priority see [Manual Control > PX4 Configuration](../config/manual_control.md#px4-configuration). ::: ## Binding the Receiver diff --git a/docs/en/config/safety.md b/docs/en/config/safety.md index f89914c9b0..bf689edf83 100644 --- a/docs/en/config/safety.md +++ b/docs/en/config/safety.md @@ -111,19 +111,17 @@ The settings and underlying parameters are shown below. ## Manual Control Loss Failsafe -The manual control loss failsafe may be triggered if the connection to the [RC transmitter](../getting_started/rc_transmitter_receiver.md) or [joystick](../config/joystick.md) is lost, and there is no fallback. -If using an [RC transmitter](../getting_started/rc_transmitter_receiver.md) this is triggered if the RC [transmitter link is lost](../getting_started/rc_transmitter_receiver.md#set-signal-loss-behaviour). -If using [joysticks](../config/joystick.md) connected over a MAVLink data link, this is triggered if the joysticks are disconnected or the data link is lost. - -::: info -PX4 and the receiver may also need to be configured in order to _detect RC loss_: [Radio Setup > RC Loss Detection](../config/radio.md#rc-loss-detection). -::: +A [Manual Control Loss Failsafe](../config/safety.md#manual-control-loss-failsafe) is triggered after a [manual control loss timeout](#COM_RC_LOSS_T) in which none of the configured [Manual Controllers](../config/manual_control.md) are available. ![Safety - RC Loss (QGC)](../../assets/qgc/setup/safety/safety_rc_loss.png) The QGCroundControl Safety UI allows you to set the [failsafe action](#failsafe-actions) and [manual control loss timeout](#COM_RC_LOSS_T). Users that want to disable this failsafe in specific modes can do so using the parameter [COM_RCL_EXCEPT](#COM_RCL_EXCEPT). +::: info +PX4 and the receiver may also need to be configured in order to _detect RC loss_: [Radio Setup > RC Loss Detection](../config/radio.md#rc-loss-detection). +::: + Additional (and underlying) parameter settings are shown below. | Parameter | Setting | Description | @@ -253,6 +251,18 @@ The relevant parameters are shown below: | ---------------------------------------------------------------------------- | ---------------------------------------------------------------- | | [NAV_TRAFF_AVOID](../advanced_config/parameter_reference.md#NAV_TRAFF_AVOID) | Set the failsafe action: Disabled, Warn, Return mode, Land mode. | +## Remote ID Failsafe + + + +The Remote ID failsafe is triggered when the [Remote ID (Open Drone ID)](../peripherals/remote_id.md) module is not detected or reports as unhealthy while the vehicle is armed. + +The failsafe action and arming behaviour are both configured by the `COM_ARM_ODID` parameter: + +| Parameter | Description | +| ----------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [COM_ARM_ODID](../advanced_config/parameter_reference.md#COM_ARM_ODID) | Remote ID arming check and in-flight failsafe. `0`: Disabled (default), `1`: Warning only, `2`: Error only (prevents arming), `3`: Return, `4`: Land, `5`: Terminate.

On failsafe:
- `Error`, `Return`, `Land` and `Terminate` prevent arming.
- `Return`, `Land` and `Terminate` start the associated action/mode when airborne. | + ## Quad-chute Failsafe Failsafe for when a VTOL vehicle can no longer fly in fixed-wing mode, perhaps due to the failure of a pusher motor, airspeed sensor, or control surface. @@ -276,7 +286,7 @@ The parameters that control when the quad-chute will trigger are listed in the t ## High Wind Failsafe -The high wind failsafe can trigger a warning and/or other mode change when the wind speed exceeds the warning and maximum wind-speed threshhold values. +The high wind failsafe can trigger a warning and/or other mode change when the wind speed exceeds the warning and maximum wind-speed threshold values. The relevant parameters are listed in the table below. | Parameter | Description | @@ -300,6 +310,19 @@ Note that this check is _always enabled on takeoff_, irrespective of the `CBRK_F The failure detector is active in all vehicle types and modes, except for those where the vehicle is _expected_ to do flips (i.e. [Acro mode (MC)](../flight_modes_mc/acro.md), [Acro mode (FW)](../flight_modes_fw/acro.md), and [Manual (FW)](../flight_modes_fw/manual.md)). +### Altitude Loss Trigger {#altitude-loss-trigger} + + + +The failure detector can be configured to trigger if a rotary-wing vehicle loses too much altitude below its commanded setpoint while in an altitude-controlled flight mode (such as [Position mode](../flight_modes_mc/position.md) or [Altitude mode](../flight_modes_mc/altitude.md)). + +If the vehicle descends more than [FD_ALT_LOSS](#FD_ALT_LOSS) meters below the setpoint, [flight termination](../advanced_config/flight_termination.md) is triggered, which may deploy a [parachute](../peripherals/parachute.md). + +| Parameter | Description | +| -------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | +| [FD_ALT_LOSS](../advanced_config/parameter_reference.md#FD_ALT_LOSS) | Altitude loss threshold (m). Flight termination is triggered when the vehicle drops this far below the setpoint. Set to 0 to disable. | +| [FD_ALT_LOSS_T](../advanced_config/parameter_reference.md#FD_ALT_LOSS_T) | Time (s) the vehicle must remain below the threshold before flight termination is triggered. | + ### Attitude Trigger The failure detector can be configured to trigger if the vehicle attitude exceeds predefined pitch and roll values for longer than a specified time. @@ -316,23 +339,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 | -| -------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [FD_ACT_EN](../advanced_config/parameter_reference.md#FD_ACT_EN) | Enable/disable the motor failure trigger completely. | -| [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. | -| [FD_ACT_MOT_C2T](../advanced_config/parameter_reference.md#FD_ACT_MOT_C2T) | Scale between normalized [0,1] motor command and expected minimally reported currrent when the rotor is healthy. | -| [FD_ACT_MOT_TOUT](../advanced_config/parameter_reference.md#FD_ACT_MOT_TOUT) | Time in miliseconds for which the under current detection condition needs to stay true. | -| [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 | +| ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [FD_ACT_EN](../advanced_config/parameter_reference.md#FD_ACT_EN) | Enable/disable the motor failure trigger completely. | +| [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/%). | +| [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. | +| [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. | +| [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. | +| [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) @@ -366,11 +390,7 @@ This section lists the available emergency switches. A kill switch immediately stops all motor outputs — if flying, the vehicle will start to fall! -[By default](#COM_KILL_DISARM) the motors will restart if the switch is reverted within 5 seconds, after which the vehicle will automatically disarm, and you will need to arm it again in order to start the motors. - -| Parameter | Description | -| -------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | -| [COM_KILL_DISARM](../advanced_config/parameter_reference.md#COM_KILL_DISARM) | Timeout value for disarming after kill switch is engaged. Default: `5` seconds. | +The motors will restart if the switch is reverted within 5 seconds, after which the vehicle will automatically disarm, and you will need to arm it again in order to start the motors. ::: info There is also a [Kill Gesture](#kill-gesture), which cannot be reverted. @@ -412,7 +432,7 @@ A return switch can be used to immediately engage [Return mode](../flight_modes/ A kill gesture immediately stops all motor outputs — if flying, the vehicle will start to fall! -The action cannot be reverted without a reboot (this differs from a [Kill Switch](#kill-switch), where the operation can be reverted within the time period defined by [COM_KILL_DISARM](#COM_KILL_DISARM)). +The action cannot be reverted without a reboot (this differs from a [Kill Switch](#kill-switch), where the operation can be reverted within 5 seconds). | Parameter | Description | | -------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | @@ -444,9 +464,8 @@ These parameters can be used to set conditions that prevent arming. | [COM_ARM_BAT_MIN](../advanced_config/parameter_reference.md#COM_ARM_BAT_MIN) | Minimum battery level for arming. `0`: Disabled (default). Values: `0`-`0.9`, | | [COM_ARM_WO_GPS](../advanced_config/parameter_reference.md#COM_ARM_WO_GPS) | Enable arming without GPS. `0`: Disabled, `1`: Enabled (default). | | [COM_ARM_MIS_REQ](../advanced_config/parameter_reference.md#COM_ARM_MIS_REQ) | Require valid mission to arm. `0`: Disabled (default), `1`: Enabled . | -| [COM_ARM_SDCARD](../advanced_config/parameter_reference.md#COM_ARM_SDCARD) | Require SD card to arm. `0`: Disabled (default), `1`: Warning, `2`: Enabled. | | [COM_ARM_AUTH_REQ](../advanced_config/parameter_reference.md#COM_ARM_AUTH_REQ) | Requires arm authorisation from an external (MAVLink) system. Flag to allow arming (at all). `1`: Enabled, `0`: Disabled (default). Associated configuration parameters are prefixed with `COM_ARM_AUTH_`. | -| [COM_ARM_ODID](../advanced_config/parameter_reference.md#COM_ARM_ODID) | Require healthy Remote ID system to arm. `0`: Disabled (default), `1`: Warning, `2`: Enabled. | +| [COM_ARM_ODID](../advanced_config/parameter_reference.md#COM_ARM_ODID) | Remote ID arming check and in-flight failsafe. `0`: Disabled (default), `1`: Warning only, `2`: Error only, `3`: Return, `4`: Land, `5`: Terminate. See [Remote ID Failsafe](#remote-id-failsafe). | In addition there are a number of parameters that configure system and sensor limits that make prevent arming if exceeded: [COM_CPU_MAX](../advanced_config/parameter_reference.md#COM_CPU_MAX), [COM_ARM_IMU_ACC](../advanced_config/parameter_reference.md#COM_ARM_IMU_ACC), [COM_ARM_IMU_GYR](../advanced_config/parameter_reference.md#COM_ARM_IMU_GYR), [COM_ARM_MAG_ANG](../advanced_config/parameter_reference.md#COM_ARM_MAG_ANG), [COM_ARM_MAG_STR](../advanced_config/parameter_reference.md#COM_ARM_MAG_STR). diff --git a/docs/en/config_mc/filter_tuning.md b/docs/en/config_mc/filter_tuning.md index 868c350d9c..df4382601c 100644 --- a/docs/en/config_mc/filter_tuning.md +++ b/docs/en/config_mc/filter_tuning.md @@ -72,17 +72,17 @@ The ESC RPM feedback is used to track the rotor blade pass frequency and its har ESC RPM feedback requires ESCs capable of providing RPM feedback such as [DShot](../peripherals/dshot.md) with telemetry connected, a bidirectional DShot set up ([work in progress](https://github.com/PX4/PX4-Autopilot/pull/23863)), or [UAVCAN/DroneCAN ESCs](../dronecan/escs.md). Before enabling, make sure that the ESC RPM is correct. -You might have to adjust the [pole count of the motors](../advanced_config/parameter_reference.md#MOT_POLE_COUNT). +You might have to adjust the per-motor pole count (`DSHOT_MOT_POL1`–`DSHOT_MOT_POL12`). The following parameters should be set to enable and configure dynamic notch filters: -| Parameter | Description | -| ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------ | -| [IMU_GYRO_DNF_EN](../advanced_config/parameter_reference.md#IMU_GYRO_DNF_EN) | Enable IMU gyro dynamic notch filtering. `0`: ESC RPM, `1`: Onboard FFT. | -| [IMU_GYRO_FFT_EN](../advanced_config/parameter_reference.md#IMU_GYRO_FFT_EN) | Enable onboard FFT (required if `IMU_GYRO_DNF_EN` is set to `1`). | -| [IMU_GYRO_DNF_MIN](../advanced_config/parameter_reference.md#IMU_GYRO_DNF_MIN) | Minimum dynamic notch frequency in Hz. | -| [IMU_GYRO_DNF_BW](../advanced_config/parameter_reference.md#IMU_GYRO_DNF_BW) | Bandwidth for each notch filter in Hz. | -| [IMU_GYRO_DNF_HMC](../advanced_config/parameter_reference.md#IMU_GYRO_NF0_BW) | Number of harmonics to filter. | +| Parameter | Description | +| ----------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------ | +| [IMU_GYRO_DNF_EN](../advanced_config/parameter_reference.md#IMU_GYRO_DNF_EN) | Enable IMU gyro dynamic notch filtering. `0`: ESC RPM, `1`: Onboard FFT. | +| [IMU_GYRO_FFT_EN](../advanced_config/parameter_reference.md#IMU_GYRO_FFT_EN) | Enable onboard FFT (required if `IMU_GYRO_DNF_EN` is set to `1`). | +| [IMU_GYRO_DNF_MIN](../advanced_config/parameter_reference.md#IMU_GYRO_DNF_MIN) | Minimum dynamic notch frequency in Hz. | +| [IMU_GYRO_DNF_BW](../advanced_config/parameter_reference.md#IMU_GYRO_DNF_BW) | Bandwidth for each notch filter in Hz. | +| [IMU_GYRO_DNF_HMC](../advanced_config/parameter_reference.md#IMU_GYRO_NF0_BW) | Number of harmonics to filter. | ### Low-pass Filter diff --git a/docs/en/config_mc/pid_tuning_guide_multicopter_basic.md b/docs/en/config_mc/pid_tuning_guide_multicopter_basic.md index dcadf60b94..d8278c61c3 100644 --- a/docs/en/config_mc/pid_tuning_guide_multicopter_basic.md +++ b/docs/en/config_mc/pid_tuning_guide_multicopter_basic.md @@ -13,7 +13,7 @@ For example, different ESCs or motors change the optimal tuning gains. ## Introduction -PX4 uses **P**roportional, **I**ntegral, **D**erivative (PID) controllers (these are the most widespread control technique). +PX4 uses **P**roportional, **I**integral, **D**erivative (PID) controllers (these are the most widespread control technique). The _QGroundControl_ **PID Tuning** setup provides real-time plots of the vehicle setpoint and response curves. The goal of tuning is to set the P/I/D values such that the _Response_ curve matches the _Setpoint_ curve as closely as possible (i.e. a fast response without overshoots). @@ -35,7 +35,8 @@ Then adjust the sliders (as discussed below) to improve the tracking of the resp - Use [Position mode](../flight_modes_mc/position.md) to tune the _Velocity Controller_ and the _Position Controller_. Make sure to switch to the _Simple position control_ mode so you can generate step inputs. ![QGC PID tuning: Simple control selector](../../assets/mc_pid_tuning/qgc_mc_pid_tuning_simple_control.png) - ::: + +::: ## Preconditions @@ -65,11 +66,11 @@ Make sure to have assigned a [Kill switch](../config/safety.md#emergency-switche The tuning procedure is: 1. Arm the vehicle, takeoff, and hover (typically in [Position mode](../flight_modes_mc/position.md)). -1. Open _QGroundControl_ **Vehicle Setup > PID Tuning** +2. Open _QGroundControl_ **Vehicle Setup > PID Tuning** ![QGC Rate Controller Tuning UI](../../assets/mc_pid_tuning/qgc_mc_pid_tuning_rate_controller.png) -1. Select the **Rate Controller** tab. -1. Confirm that the airmode selector is set to **Disabled** -1. Set the _Thrust curve_ value to: 0.3 (PWM, power-based controllers) or 1 (RPM-based ESCs) +3. Select the **Rate Controller** tab. +4. Confirm that the airmode selector is set to **Disabled** +5. Set the _Thrust curve_ value to: 0.3 (PWM, power-based controllers) or 1 (RPM-based ESCs) ::: info For PWM, power-based and (some) UAVCAN speed controllers, the control signal to thrust relationship may not be linear. @@ -82,46 +83,49 @@ The tuning procedure is: For more information see the [detailed PID tuning guide](../config_mc/pid_tuning_guide_multicopter.md#thrust-curve). ::: -1. Set the _Select Tuning_ radio button to: **Roll**. -1. (Optionally) Select the **Automatic Flight Mode Switching** checkbox. +6. Set the _Select Tuning_ radio button to: **Roll**. +7. (Optionally) Select the **Automatic Flight Mode Switching** checkbox. This will _automatically_ switch from [Position mode](../flight_modes_mc/position.md) to [Stabilised mode](../flight_modes_mc/manual_stabilized.md) when you press the **Start** button -1. For rate controller tuning switch to _Acro mode_, _Stabilized mode_ or _Altitude mode_ (unless automatic switching is enabled). -1. Select the **Start** button in order to start tracking the setpoint and response curves. -1. Rapidly move the _roll stick_ full range and observe the step response on the plots. - :::tip - Stop tracking to enable easier inspection of the plots. - This happens automatically when you zoom/pan. - Use the **Start** button to restart the plots, and **Clear** to reset them. - ::: -1. Modify the three PID values using the sliders (for roll rate-tuning these affect `MC_ROLLRATE_K`, `MC_ROLLRATE_I`, `MC_ROLLRATE_D`) and observe the step response again. - The values are saved to the vehicle as soon as the sliders are moved. - ::: info - The goal is for the _Response_ curve to match the _Setpoint_ curve as closely as possible (i.e. a fast response without overshoots). - ::: - The PID values can be adjusted as follows: - - P (proportional) or K gain: - - increase this for more responsiveness - - reduce if the response is overshooting and/or oscillating (up to a certain point increasing the D gain also helps). - - D (derivative) gain: - - this can be increased to dampen overshoots and oscillations - - increase this only as much as needed, as it amplifies noise (and can lead to hot motors) - - I (integral) gain: - - used to reduce steady-state error - - if too low, the response might never reach the setpoint (e.g. in wind) - - if too high, slow oscillations can occur -1. Repeat the tuning process above for the pitch and yaw: - - Use _Select Tuning_ radio button to select the axis to tune - - Move the appropriate sticks (i.e. pitch stick for pitch, yaw stick for yaw). - - For pitch tuning, start with the same values as for roll. - :::tip - Use the **Save to Clipboard** and **Reset from Clipboard** buttons to copy the roll settings for initial pitch settings. - ::: -1. Repeat the tuning process for the attitude controller on all the axes. -1. Repeat the tuning process for the velocity and positions controllers (on all the axes). - - Use Position mode when tuning these controllers - - Select the **Simple position control** option in the _Position control mode ..._ selector (this allows direct control for the generation of step inputs) +8. For rate controller tuning switch to _Acro mode_, _Stabilized mode_ or _Altitude mode_ (unless automatic switching is enabled). +9. Select the **Start** button in order to start tracking the setpoint and response curves. +10. Rapidly move the _roll stick_ full range and observe the step response on the plots. + :::tip + Stop tracking to enable easier inspection of the plots. + This happens automatically when you zoom/pan. + Use the **Start** button to restart the plots, and **Clear** to reset them. + ::: +11. Modify the three PID values using the sliders (for roll rate-tuning these affect `MC_ROLLRATE_K`, `MC_ROLLRATE_I`, `MC_ROLLRATE_D`) and observe the step response again. + The values are saved to the vehicle as soon as the sliders are moved. - ![QGC PID tuning: Simple control selector](../../assets/mc_pid_tuning/qgc_mc_pid_tuning_simple_control.png) + ::: info + The goal is for the _Response_ curve to match the _Setpoint_ curve as closely as possible (i.e. a fast response without overshoots). + ::: + + The PID values can be adjusted as follows: + - P (proportional) or K gain: + - increase this for more responsiveness + - reduce if the response is overshooting and/or oscillating (up to a certain point increasing the D gain also helps). + - D (derivative) gain: + - this can be increased to dampen overshoots and oscillations + - increase this only as much as needed, as it amplifies noise (and can lead to hot motors) + - I (integral) gain: + - used to reduce steady-state error + - if too low, the response might never reach the setpoint (e.g. in wind) + - if too high, slow oscillations can occur + +12. Repeat the tuning process above for the pitch and yaw: + - Use _Select Tuning_ radio button to select the axis to tune + - Move the appropriate sticks (i.e. pitch stick for pitch, yaw stick for yaw). + - For pitch tuning, start with the same values as for roll. + :::tip + Use the **Save to Clipboard** and **Reset from Clipboard** buttons to copy the roll settings for initial pitch settings. + ::: +13. Repeat the tuning process for the attitude controller on all the axes. +14. Repeat the tuning process for the velocity and positions controllers (on all the axes). + - Use Position mode when tuning these controllers + - Select the **Simple position control** option in the _Position control mode ..._ selector (this allows direct control for the generation of step inputs) + + ![QGC PID tuning: Simple control selector](../../assets/mc_pid_tuning/qgc_mc_pid_tuning_simple_control.png) All done! Remember to re-enable airmode before leaving the setup. diff --git a/docs/en/config_rover/attitude_tuning.md b/docs/en/config_rover/attitude_tuning.md index e588daad96..1427591bb5 100644 --- a/docs/en/config_rover/attitude_tuning.md +++ b/docs/en/config_rover/attitude_tuning.md @@ -16,7 +16,7 @@ Configure the following [parameters](../advanced_config/parameters.md) in QGroun Put the rover into stabilized mode and move the left stick of your controller up to drive forwards. Disarm the rover and from the flight log plot the `measured_yaw` and the `adjusted_yaw_setpoint` from the [RoverAttitudeStatus](../msg_docs/RoverAttitudeStatus.md) message over each other. Increase/Decrease the parameter until you are satisfied with the setpoint tracking. - If you observe a steady state error in the yaw setpoint increase the the integrator of the rate controller: [RO_YAW_RATE_I](../advanced_config/parameter_reference.md#RO_YAW_RATE_I) . + If you observe a steady state error in the yaw setpoint increase the integrator of the rate controller: [RO_YAW_RATE_I](../advanced_config/parameter_reference.md#RO_YAW_RATE_I) . ::: The rover is now ready to drive in [Stabilized mode](../flight_modes_rover/manual.md#stabilized-mode) and the configuration can be continued with [velocity tuning](velocity_tuning.md). @@ -29,7 +29,7 @@ The attitude controller uses the following structure: ![Rover Attitude Controller](../../assets/config/rover/rover_attitude_controller.png) -The rate and attitude controllers are cascaded, therefor we only require one integrator in the structure to eliminate steady state errors. +The rate and attitude controllers are cascaded, therefore we only require one integrator in the structure to eliminate steady state errors. We placed the integrator in the rate controller since it can run without the attitude controller but not the other way around. ## Parameter Overview diff --git a/docs/en/config_rover/basic_setup.md b/docs/en/config_rover/basic_setup.md index e729fc6328..9f99507acd 100644 --- a/docs/en/config_rover/basic_setup.md +++ b/docs/en/config_rover/basic_setup.md @@ -129,7 +129,7 @@ In [Manual mode](../flight_modes_rover/manual.md#manual-mode) we can additionall - Differential Rover: $r=$ [RD_YAW_STK_GAIN](#RD_YAW_STK_GAIN), which enables adjusting the slope of the input mapping. This leads to a normalized steering input $\hat{\delta} = \delta \cdot r \in$ [-[RD_YAW_STK_GAIN](#RD_YAW_STK_GAIN), [RD_YAW_STK_GAIN](#RD_YAW_STK_GAIN)]. - Mecanum Rover: $r=$ [RM_YAW_STK_GAIN](#RM_YAW_STK_GAIN), which enables adjusting the slope of the input mapping. This leads to a normalized steering input $\hat{\delta} = \delta \cdot r \in$ [-[RM_YAW_STK_GAIN](#RM_YAW_STK_GAIN), [RM_YAW_STK_GAIN](#RM_YAW_STK_GAIN)]. -This scaling is useful to limit the normalized steering setpoint, if it is too aggresive for your rover in manual mode. +This scaling is useful to limit the normalized steering setpoint, if it is too aggressive for your rover in manual mode. You can experiment with the relationships graphically using the [PX4 SuperExpo Rover calculator](https://www.desmos.com/calculator/gwm8lrlanx). diff --git a/docs/en/config_rover/index.md b/docs/en/config_rover/index.md index 366377c8ab..917c691192 100644 --- a/docs/en/config_rover/index.md +++ b/docs/en/config_rover/index.md @@ -39,7 +39,7 @@ make px4_fmu-v6x_rover Note that configuration targets are constructed with the format "VENDOR_MODEL_VARIANT". -The built firmware can be installed as custom firmware, as shown above in in [Flashing the Rover Build](#flashing-the-rover-build). +The built firmware can be installed as custom firmware, as shown above in [Flashing the Rover Build](#flashing-the-rover-build). ::: info You can also enable the modules in default builds by adding these lines to your [board configuration](../hardware/porting_guide_config.md) (e.g. for fmu-v6x you might add them to [`main/boards/px4/fmu-v6x/default.px4board`](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/fmu-v6x/default.px4board)): diff --git a/docs/en/config_rover/rate_tuning.md b/docs/en/config_rover/rate_tuning.md index fd327d34ef..2bb44fe25d 100644 --- a/docs/en/config_rover/rate_tuning.md +++ b/docs/en/config_rover/rate_tuning.md @@ -11,7 +11,7 @@ Configure the following [parameters](../advanced_config/parameters.md) in QGroun 1. [RO_YAW_RATE_LIM](#RO_YAW_RATE_LIM): Maximum yaw rate you want to allow for your rover. :::tip - Limiting the yaw rate is necessary if the rover is prone rolling over, loosing traction at high speeds or if passenger comfort is important. + Limiting the yaw rate is necessary if the rover is prone rolling over, losing traction at high speeds or if passenger comfort is important. Small rovers especially can be prone to rolling over when steering aggressively at high speeds. If this is the case: diff --git a/docs/en/config_rover/velocity_tuning.md b/docs/en/config_rover/velocity_tuning.md index bf0429d43f..76463aca46 100644 --- a/docs/en/config_rover/velocity_tuning.md +++ b/docs/en/config_rover/velocity_tuning.md @@ -54,7 +54,7 @@ To tune the velocity controller configure the following [parameters](../advanced ## Manual Position Mode Parameters -These steps are only necessary if you are tuning/want to unlock the manual [Position mode](../flight_modes_rover/manual.md#position-mode). Othwerwise, you can continue with [position tuning](position_tuning.md) where these same parameters will also be configured. +These steps are only necessary if you are tuning/want to unlock the manual [Position mode](../flight_modes_rover/manual.md#position-mode). Otherwise, you can continue with [position tuning](position_tuning.md) where these same parameters will also be configured. 1. [PP_LOOKAHD_GAIN](#PP_LOOKAHD_GAIN): When driving in a straight line (right stick centered) position mode leverages the same path following algorithm used in [auto modes](../flight_modes_rover/auto.md) called [pure pursuit](position_tuning.md#pure-pursuit-guidance-logic-info-only) to achieve the best possible straight line driving behaviour. This parameter determines how aggressive the controller will steer towards the path. @@ -99,7 +99,7 @@ The speed controller uses the following structure: The feed forward mapping is done by interpolating the speed setpoint from [-[RO_MAX_THR_SPEED](../advanced_config/parameter_reference.md#RO_MAX_THR_SPEED), [RO_MAX_THR_SPEED](../advanced_config/parameter_reference.md#RO_MAX_THR_SPEED)] to [-1, 1]. -For ackermann and differential rovers the bearing is aligned with the vehicle yaw. Therefor the bearing is simply sent as a yaw setpoint to the [yaw controller](attitude_tuning.md#attitude-controller-structure-info-only) and the speed setpoint is always defined in body x direction. +For ackermann and differential rovers the bearing is aligned with the vehicle yaw. Therefore the bearing is simply sent as a yaw setpoint to the [yaw controller](attitude_tuning.md#attitude-controller-structure-info-only) and the speed setpoint is always defined in body x direction. For mecanum vehicles, the bearing and yaw are decoupled. The direction is controlled by splitting the velocity vector into one speed component in body x direction and one in body y direction. Both these setpoint are then sent to their own closed loop speed controllers. diff --git a/docs/en/config_vtol/vtol_ice_shedding.md b/docs/en/config_vtol/vtol_ice_shedding.md index bf9ccc80af..bf7f1b1459 100644 --- a/docs/en/config_vtol/vtol_ice_shedding.md +++ b/docs/en/config_vtol/vtol_ice_shedding.md @@ -6,7 +6,7 @@ Ice shedding is a feature that periodically spins unused motors in fixed-wing flight, to break off any ice that is starting to build up in the motors while it is still feasible to do so. -It is configured by the paramter `CA_ICE_PERIOD`. When it is 0, the feature is +It is configured by the parameter `CA_ICE_PERIOD`. When it is 0, the feature is disabled, when it is above 0, it sets the duration of the ice shedding cycle in seconds. In each cycle, the rotors are spun for two seconds at a motor output of 0.01. diff --git a/docs/en/config_vtol/vtol_quad_configuration.md b/docs/en/config_vtol/vtol_quad_configuration.md index 7c16e2e80e..07ac047941 100644 --- a/docs/en/config_vtol/vtol_quad_configuration.md +++ b/docs/en/config_vtol/vtol_quad_configuration.md @@ -95,7 +95,7 @@ It should be set to a value which ensures that the vehicle reaches a high enough [VT_TRANS_TIMEOUT](../advanced_config/parameter_reference.md#VT_TRANS_TIMEOUT) This specifies the upper limit for the duration of the front transition. If the vehicle has not reached the transition airspeed after this time, then the transition will be aborted and a [Quadchute](../config/safety.md#quad-chute-failsafe) event will be triggered. -:::note +::: info Additionally, if an airspeed sensor is present, the transition will also be aborted if the airspeed has not reached [VT_ARSP_BLEND](../advanced_config/parameter_reference.md#VT_ARSP_BLEND) after the openloop transition time [VT_F_TR_OL_TM](../advanced_config/parameter_reference.md#VT_F_TR_OL_TM) has elapsed. This checks is used to avoid a scenario where the vehicle gains excessive speed when the airspeed sensor is faulty. ::: diff --git a/docs/en/contribute/code.md b/docs/en/contribute/code.md index 0d51f2f120..d2b5239ca4 100644 --- a/docs/en/contribute/code.md +++ b/docs/en/contribute/code.md @@ -149,36 +149,35 @@ else { ## Commits and Commit Messages -Use descriptive, multi-paragraph commit messages for all non-trivial changes. -Structure them well so they make sense in the one-line summary but also provide full detail. +PX4 uses [conventional commits](https://www.conventionalcommits.org/) for all commit messages and PR titles. -```plain -Component: Explain the change in one sentence. Fixes #1234 +### Format -Prepend the software component to the start of the summary -line, either by the module name or a description of it. -(e.g. "mc_att_ctrl" or "multicopter attitude controller"). - -If the issue number is appended as , Github -will automatically close the issue when the commit is -merged to the master branch. - -The body of the message can contain several paragraphs. -Describe in detail what you changed. Link issues and flight -logs either related to this fix or to the testing results -of this commit. - -Describe the change and why you changed it, avoid to -paraphrase the code change (Good: "Adds an additional -safety check for vehicles with low quality GPS reception". -Bad: "Add gps_reception_check() function"). - -Reported-by: Name +``` +type(scope): short description of the change ``` -**Use **`git commit -s`** to sign off on all of your commits.** This will add `signed-off-by:` with your name and email as the last line. +Where **type** is the category of change (`feat`, `fix`, `docs`, `refactor`, `perf`, `test`, `build`, `ci`, `style`, `chore`, `revert`) and **scope** is the module or area affected (e.g. `ekf2`, `mavlink`, `navigator`). See the full [types and scopes tables](https://github.com/PX4/PX4-Autopilot/blob/main/CONTRIBUTING.md#commit-message-convention) in CONTRIBUTING.md. -This commit guide is based on best practices for the Linux Kernel and other [projects maintained](https://github.com/torvalds/subsurface-for-dirk/blob/a48494d2fbed58c751e9b7e8fbff88582f9b2d02/README#L88-L115) by Linus Torvalds. +Append `!` before the colon to mark a breaking change: `feat(ekf2)!: remove deprecated API`. + +### Examples + +``` +feat(ekf2): add height fusion timeout. Fixes #1234 + +The previous implementation did not handle the case where +height fusion data stops arriving mid-flight. This adds a +configurable timeout that falls back to barometric height. + +Tested in SITL with simulated sensor dropout. + +Signed-off-by: Your Name +``` + +The body of the message can contain several paragraphs. Describe in detail what you changed and why. Link related issues and flight logs. Describe the change and why you made it, rather than paraphrasing the code change. + +**Use `git commit -s` to sign off on all of your commits.** This adds `Signed-off-by:` with your name and email as the last line. ## Pull Requests diff --git a/docs/en/contribute/dev_call.md b/docs/en/contribute/dev_call.md index 54c4dfff08..1e61a7d4d5 100644 --- a/docs/en/contribute/dev_call.md +++ b/docs/en/contribute/dev_call.md @@ -7,7 +7,7 @@ const { site } = useData();
-

This page may be out out of date. See the latest version.

+

This page may be out of date. See the latest version.

@@ -15,8 +15,8 @@ The PX4 dev team and community come together to discuss any topic of interest to ## Who should attend? -- Core project maintainers -- Component maintainers +- Code Owners +- Reviewers - Test team lead - Dronecode members - Community members (you!) @@ -36,4 +36,4 @@ Please add your topics for discussion to the agenda before the meeting begins, b ## Schedule - TIME: Wednesday 17h00 CET ([subscribe to calendar](https://dronecode.org/calendar/)) -- **Join the call**: [https://discord.gg/BDYmr6FA6Q](https://discord.gg/BDYmr6FA6Q) +- **Join the call**: [https://discord.com/invite/BDYmr6FA6Q](https://discord.com/invite/BDYmr6FA6Q) diff --git a/docs/en/contribute/docs.md b/docs/en/contribute/docs.md index b0e03e247c..e596e284fa 100644 --- a/docs/en/contribute/docs.md +++ b/docs/en/contribute/docs.md @@ -18,9 +18,9 @@ Simple changes to _existing content_ can be made by clicking the **Edit on GitHu To edit an existing English page: 1. Open the page. -1. Click the **Edit on GitHub** link below the page content. -1. Make the desired change. -1. Below the Github page editor you'll be prompted to create a separate branch and then guided to submit a _pull request_. +2. Click the **Edit on GitHub** link below the page content. +3. Make the desired change. +4. Below the Github page editor you'll be prompted to create a separate branch and then guided to submit a _pull request_. The documentation team will review the request and either merge it or work with you to update it. @@ -34,9 +34,9 @@ More substantial changes, including adding new pages or adding/modifying images, For these kinds of changes we suggest using the same approach as for _code_: 1. Use the _git_ toolchain to get the PX4 source code onto your local computer. -1. Modify the documentation as needed (add, change, delete). -1. _Test_ that it builds properly using Vitepress. -1. Create a branch for your changes and create a pull request (PR) to pull it back into the [PX4-Autopilot](https://github.com/PX4/PX4-Autopilot) repo. +2. Modify the documentation as needed (add, change, delete). +3. _Test_ that it builds properly using Vitepress. +4. Create a branch for your changes and create a pull request (PR) to pull it back into the [PX4-Autopilot](https://github.com/PX4/PX4-Autopilot) repo. The following explain how to get the source code, build locally (to test), and modify the code. @@ -54,10 +54,10 @@ If you already have a clone of the [PX4-Autopilot](https://github.com/PX4/PX4-Au To get the library(s) sources onto your local computer you will need to use the git toolchain. The instructions below explain how to get git and use it on your local computer. -1. Download git for your computer from [https://git-scm.com/downloads](https://git-scm.com/downloads) -1. [Sign up](https://github.com/signup) for Github if you haven't already -1. Create a copy (Fork) of the [PX4-Autopilot repo](https://github.com/PX4/PX4-Autopilot) on Github ([instructions here](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/fork-a-repo)). -1. Clone (copy) your forked repository to your local computer: +1. Download git for your computer from [https://git-scm.com/downloads/](https://git-scm.com/downloads/) +2. [Sign up](https://github.com/signup) for Github if you haven't already +3. Create a copy (Fork) of the [PX4-Autopilot repo](https://github.com/PX4/PX4-Autopilot) on Github ([instructions here](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/fork-a-repo)). +4. Clone (copy) your forked repository to your local computer: ```sh cd ~/wherever/ @@ -70,19 +70,19 @@ The instructions below explain how to get git and use it on your local computer. git clone https://github.com/john_citizen/PX4-Autopilot.git ``` -1. Navigate to your local repository: +5. Navigate to your local repository: ```sh cd ~/wherever/PX4-Autopilot ``` -1. Add a _remote_ called "upstream" to point to the "official" PX4 version of the library: +6. Add a _remote_ called "upstream" to point to the "official" PX4 version of the library: ```sh - git remote add upstream https://github.com/PX4/PX4-Autopilot.git + git remote add upstream https://github.com/PX4/PX4-Autopilot ``` - :::tip + ::: tip A "remote" is a handle to a particular repository. The remote named _origin_ is created by default when you clone the repository, and points to _your fork_ of the guide. Above you create a new remote _upstream_ that points to the PX4 project version of the documents. @@ -147,19 +147,21 @@ Build the library locally to test that any changes you have made have rendered p - [Nodejs 18+](https://nodejs.org/en) - [Yarn classic](https://classic.yarnpkg.com/en/docs/install) -1. Navigate to your local repository and the `/docs` subdirectory: +2. Navigate to your local repository and the `/docs` subdirectory: ```sh cd ~/wherever/PX4-Autopilot/docs ``` -1. Install dependencies (including Vitepress): +3. Install dependencies (including Vitepress): ```sh yarn install ``` -1. Preview and serve the library: +4. (Optional) [Build the docs for PX4 metadata](#building-px4-docs-metadata) if your source contains changes to parameter or module docs that you want to check. + +5. Preview and serve the library: ```sh yarn start @@ -169,7 +171,7 @@ Build the library locally to test that any changes you have made have rendered p This will be something like: `http://localhost:5173/px4_user_guide/`. - Stop serving using **CTRL+C** in the terminal prompt. -1. Open previewed pages in your local editor: +6. Open previewed pages in your local editor: First specify a local text editor file using the `EDITOR` environment variable, before calling `yarn start` to preview the library. For example, you can enable VSCode as your default editor by entering: @@ -187,7 +189,7 @@ Build the library locally to test that any changes you have made have rendered p The **Open in your editor** link at the bottom of each page will then open the current page in the editor (this replaces the _Open in GitHub_ link). -1. You can build the library as it would be done for deployment: +7. You can build the library as it would be done for deployment: ```sh # Ubuntu @@ -202,6 +204,32 @@ Use `yarn start` to preview changes _as you make them_ (documents are updated an Before submitting a PR you should also build it using `yarn docs:build`, as this can highlight issues that are not visible when using `yarn start`. ::: +#### Building PX4 docs metadata + +PX4 Metadata is not automatically updated in the local docs tree when you make changes to source. +This can result in broken links showing up during testing if you link to new parameters, modules, airframes, or other content that is generated from source. + +You can generate the metadata and copy it into the tree on _Ubuntu_ (only) using the convenient yarn command: + +```sh +# Ubuntu +yarn build_docs_metadata_ubuntu +``` + +::: info +The generated metadata docs should not be included in PRs as they will complicate reveiwing (metadata is automatically generated when a PR merges in main). +It is not a problem if you do add such metadata, as it will be swamped on merge. +::: + +#### Check for broken links + +You can use the following command to check for broken links in the whole document: + +```sh +# Ubuntu +yarn linkcheck +``` + ### Source Code Structure The guide uses the [Vitepress](https://vitepress.dev/) toolchain. @@ -229,7 +257,7 @@ In overview: - Images must be stored in a sub folder of `/assets`. This is two folders down from content folders, so if you add an image you will reference it like: - ```plain + ```txt ![Image Description](../../assets/path_to_file/filename.jpg) ``` diff --git a/docs/en/contribute/git_examples.md b/docs/en/contribute/git_examples.md index 87c60b27fd..c0140b5280 100644 --- a/docs/en/contribute/git_examples.md +++ b/docs/en/contribute/git_examples.md @@ -20,7 +20,7 @@ Adding a feature to PX4 follows a defined workflow. In order to share your contr ```sh cd PX4-Autopilot git submodule update --init --recursive - git remote add upstream https://github.com/PX4/PX4-Autopilot.git + git remote add upstream https://github.com/PX4/PX4-Autopilot ``` - You should have now two remote repositories: One repository is called `upstream` that points to PX4/PX4-Autopilot, and one repository `origin` that points to your forked copy of the PX4 repository. @@ -50,12 +50,12 @@ Adding a feature to PX4 follows a defined workflow. In order to share your contr - Commit the added files with a meaningful message explaining your changes ```sh - git commit -m "" + git commit -s -m "feat(ekf2): add height fusion timeout" ``` - For a good commit message, please refer to the [Source Code Management](../contribute/code.md#commits-and-commit-messages) section. + Use [conventional commits](https://www.conventionalcommits.org/) format: `type(scope): description`. For details on types and scopes, see the [Source Code Management](../contribute/code.md#commits-and-commit-messages) section. -- Some time might have passed and the [upstream main](https://github.com/PX4/PX4-Autopilot.git) has changed. +- Some time might have passed and the [upstream main](https://github.com/PX4/PX4-Autopilot) has changed. PX4 prefers a linear commit history and uses [git rebase](https://git-scm.com/book/en/v2/Git-Branching-Rebasing). To include the newest changes from upstream in your local branch, switch to your main branch @@ -134,7 +134,7 @@ To get the source code for a _specific older release_ (tag): 1. Clone the PX4-Autopilot repo and navigate into _PX4-Autopilot_ directory: ```sh - git clone https://github.com/PX4/PX4-Autopilot.git + git clone https://github.com/PX4/PX4-Autopilot cd PX4-Autopilot ``` @@ -173,7 +173,7 @@ To get a release branch: - Clone the PX4-Autopilot repo and navigate into _PX4-Autopilot_ directory: ```sh - git clone https://github.com/PX4/PX4-Autopilot.git + git clone https://github.com/PX4/PX4-Autopilot cd PX4-Autopilot ``` diff --git a/docs/en/contribute/index.md b/docs/en/contribute/index.md index adf08e6a79..95acab11fe 100644 --- a/docs/en/contribute/index.md +++ b/docs/en/contribute/index.md @@ -7,7 +7,7 @@ const { site } = useData();
-

This page may be out out of date. See the latest version.

+

This page may be out of date. See the latest version.

@@ -20,7 +20,7 @@ We pledge to adhere to the [PX4 code of conduct](https://github.com/PX4/PX4-Auto This section contains information about how you can meet with the community and contribute to PX4: - [Dev Call](../contribute/dev_call.md) - Discuss architecture, pull requests, impacting issues with the dev team -- [Maintainers](./maintainers.md) - Maintainers of PX4 Subsystems and Ecosystem +- [Maintainers](./maintainers.md) - Maintainer roles, types, and how to become one - [Support](../contribute/support.md) - Get help and raise issues - [Source Code Management](../contribute/code.md) - Work with PX4 code - [Documentation](../contribute/docs.md) - Improve the docs diff --git a/docs/en/contribute/maintainers.md b/docs/en/contribute/maintainers.md index 122d2efb2f..f1d6f74f7d 100644 --- a/docs/en/contribute/maintainers.md +++ b/docs/en/contribute/maintainers.md @@ -1,57 +1,86 @@ # Maintainer Role -Dronecode maintainers have technical leadership and responsibility for specific areas of PX4, and for other ecosystem components such as MAVLink, MAVSDK, QGroundControl, and others. +Dronecode maintainers provide technical leadership for PX4 and for other ecosystem components such as MAVLink, MAVSDK, QGroundControl, and others. Some maintainers take responsibility for specific areas of the project, while others help across the project more broadly. The maintainer role is defined by the community with help and supervision from the [Dronecode Foundation](https://dronecode.org/). -To find the most up-to-date maintainers list, visit [PX4-Autopilot README](https://github.com/PX4/PX4-Autopilot#maintenance-team). +To find the most up-to-date maintainers list, see [`MAINTAINERS.md`](https://github.com/PX4/PX4-Autopilot/blob/main/MAINTAINERS.md) in the PX4-Autopilot repository. + +## Maintainer Types + +PX4 recognizes two types of maintainers. Both are full members of the maintainer team, have write access via the [`Dev Team`](https://github.com/orgs/PX4/teams/dev-team) GitHub team, and participate in maintainer decisions. + +- **Code Owners** are responsible for a specific category of the project (for example, State Estimation, Multirotor, or CI). They have final say on changes to their area, are the primary reviewers for that code, and help shape its roadmap. This is the role described in detail below. +- **Reviewers** help maintain PX4 across the project without ownership of a specific category. They review, triage, and contribute wherever their interests and time allow. Reviewers have the same access and voting rights as Code Owners, but no on-call responsibility for any specific area of the codebase. + +The Reviewer role is a good fit for contributors who want to help steward the project without committing to a specific component up front. A Reviewer may later become a Code Owner for a category by mutual agreement with the existing Code Owners of that category and sign-off from the maintainer team. ## Recruitment Process If you would like to join the PX4 maintainers team or if you want to nominate someone else follow the steps below: 1. Read the [role description](#dronecode-maintainer-role-description), and make sure you understand the responsibilities of the role. -2. To nominate yourself, reach out to one of the maintainers (see the complete list in the [PX4-Autopilot README](https://github.com/PX4/PX4-Autopilot#maintenance-team)), and seek their sponsorship. -3. Express your interest in becoming a maintainer, and specify which area you would like to maintain. +2. To nominate yourself, reach out to one of the maintainers (see the complete list in [`MAINTAINERS.md`](https://github.com/PX4/PX4-Autopilot/blob/main/MAINTAINERS.md)), and seek their sponsorship. +3. Express your interest in becoming a maintainer, and specify whether you are applying as a **Code Owner** (for a specific category) or as a **Reviewer** (helping across the project without a fixed category). 4. The sponsoring maintainer needs to bring this up for discussion in one of the [weekly developer calls](dev_call.md). The maintainer team will vote on the call to determine whether to accept you as a maintainer. +A Reviewer may later transition to a Code Owner role for a specific category. This requires agreement from the existing Code Owners of that category and sign-off from the maintainer team, following the same discussion and vote on the weekly developer call. + +### Adding a new maintainer + +Once the maintainer team has agreed to add a new maintainer, the change is landed via a pull request to [`MAINTAINERS.md`](https://github.com/PX4/PX4-Autopilot/blob/main/MAINTAINERS.md). The process is intentionally simple: + +1. A current maintainer opens a PR adding the new maintainer to the appropriate table (**Code Owners** with a category, or **Reviewers**). +2. The PR must be approved by at least one other current maintainer. +3. If the new maintainer is being added as a Code Owner or sub-owner of a specific component, the existing Code Owner of that component must be among the approvers. + +Once the PR is merged, the new maintainer proceeds through the [Onboarding Process](#onboarding-process) below. + ## Onboarding Process Once accepted every maintainers will go through the following process: 1. **Discord** server admin will grant you the `dev team` role, which gives you: 1. Basic admin privileges on discord. - 2. Access to the `#maintainers` channel. + 2. Access to the private `#maintainers` channel for internal maintainer discussion. 2. You will be given access to the GitHub team: "[`Dev Team`](https://github.com/orgs/PX4/teams/dev-team)" which grants you: 1. Permission to merge the PR of any of PX4 workspace repositories after it's approved 2. Permission to trigger GitHub actions when a new contributor opens a PR. 3. Permission to edit Issue/PR contents. 3. **Add your info to official PX4 channels**: - 1. Include your information on the PX4 [README](https://github.com/PX4/PX4-Autopilot/blob/main/README.md) next to the rest of the team - 2. Listed on the [Maintainers section](https://px4.io/community/maintainers/) of the PX4 website. - 3. Add your information to the internal Dronecode database of maintainers to keep you in sync. - 4. Community introduction to the new maintainer in the form of a forum post, which is promoted through ever growing official channels + 1. Add your information to the internal Dronecode database of maintainers to keep you in sync. + 2. Community introduction to the new maintainer in the form of a forum post, which is promoted through ever growing official channels ## Dronecode Maintainer Role Description +The responsibilities and qualifications below describe the **Code Owner** role in detail. **Reviewers** share the same spirit of technical stewardship, community guidance, and participation in maintainer meetings, without being tied to a specific category. Reviewers are expected to review and triage across the project where their expertise and interest apply. + ### Summary Maintainers lead/manage the development of a **specific category (referred to as category below)** of any Open Source Projects hosted within the Dronecode Foundation, such as the PX4 Autopilot. -### Responsibilities +### Responsibilities (Code Owner) 1. Take charge of overseeing the development in their category. 2. Provide guidance/advice on community members in their category. 3. Review relevant pull requests and issues from the community on GitHub. 4. Coordinate with the maintainer group. -5. Keep regular attendance on [weekly meetings ](dev_call.md). +5. Keep regular attendance on [weekly meetings](dev_call.md). 6. Help create and maintain a roadmap for the project your represent. 7. Uphold the [Code of Conduct](https://github.com/Dronecode/foundation/blob/main/CODE-OF-CONDUCT.md) of our community. +### Responsibilities (Reviewer) + +1. Review relevant pull requests and issues across the project where your expertise applies. +2. Help triage issues and guide community contributors. +3. Coordinate with the maintainer group. +4. Keep regular attendance on [weekly meetings](dev_call.md). +5. Uphold the [Code of Conduct](https://github.com/Dronecode/foundation/blob/main/CODE-OF-CONDUCT.md) of our community. + ### Qualifications 1. Proven track record of valuable contributions. -2. Domain expertise in the category field. +2. Domain expertise in the category field (for Code Owners) or broad working knowledge of the project (for Reviewers). 3. Good overview of the project you are applying to. 4. You need to manage approval from your employer when relevant. diff --git a/docs/en/contribute/sbom.md b/docs/en/contribute/sbom.md new file mode 100644 index 0000000000..3578bccda3 --- /dev/null +++ b/docs/en/contribute/sbom.md @@ -0,0 +1,226 @@ +# Software Bill of Materials (SBOM) + +PX4 generates a [Software Bill of Materials](https://ntia.gov/SBOM) for every firmware build in [SPDX 2.3](https://spdx.github.io/spdx-spec/v2.3/) JSON format. + +## Why SBOM? + +- **Regulatory compliance**: The EU Cyber Resilience Act (CRA) requires SBOMs for products with digital elements (reporting obligations begin in September 2026). +- **Supply chain transparency**: SBOMs enumerate every component compiled into firmware, enabling users and integrators to audit dependencies. +- **NTIA minimum elements**: Each SBOM satisfies all seven [NTIA required fields](https://www.ntia.gov/report/2021/minimum-elements-software-bill-materials-sbom): supplier, component name, version, unique identifier, dependency relationship, author, and timestamp. + +## Format + +PX4 uses SPDX 2.3 JSON. +SPDX is the Linux Foundation's own standard (ISO/IEC 5962), aligning with PX4's position as a Dronecode/LF project. +Zephyr RTOS also uses SPDX. + +Each SBOM contains: + +- **Primary package**: The PX4 firmware for a specific board target, marked with `primaryPackagePurpose: FIRMWARE`. +- **Git submodules**: All third-party libraries included via git submodules (~33 packages), with SPDX license identifiers and commit hashes. +- **Python build dependencies**: Packages from `Tools/setup/requirements.txt` marked as `BUILD_DEPENDENCY_OF` the firmware. +- **Board-specific modules**: Internal PX4 modules compiled for the target board. +- **Compiler**: The C compiler used for the build. + +Typical SBOM size: 70-100 packages, ~500 lines, ~20 KB JSON. + +## Generation + +SBOMs are generated automatically as part of every CMake build. +The output file is: + +```txt +build//.sbom.spdx.json +``` + +For example: + +```txt +build/px4_fmu-v6x_default/px4_fmu-v6x_default.sbom.spdx.json +``` + +The generator script is `Tools/ci/generate_sbom.py`. +It requires PyYAML (`pyyaml`) for loading license overrides. + +### CMake Integration + +The `sbom` CMake target is included in the default `ALL` target. +The relevant CMake module is `cmake/sbom.cmake`. + +### Disabling SBOM Generation + +Set the environment variable before building. +This is checked at CMake configure time, so a clean build or reconfigure is required: + +```sh +PX4_SBOM_DISABLE=1 make px4_fmu-v6x_default +``` + +If the build directory already exists, force a reconfigure: + +```sh +PX4_SBOM_DISABLE=1 cmake -B build/px4_fmu-v6x_default . +``` + +### Manual Generation + +You can also run the generator directly: + +```sh +python3 Tools/ci/generate_sbom.py \ + --source-dir . \ + --board px4_fmu-v6x_default \ + --modules-file build/px4_fmu-v6x_default/config_module_list.txt \ + --compiler arm-none-eabi-gcc \ + --output build/px4_fmu-v6x_default/px4_fmu-v6x_default.sbom.spdx.json +``` + +## Artifacts + +SBOMs are available in: + +| Location | Path | +| --------------- | ---------------------------------------- | +| Build directory | `build//.sbom.spdx.json` | +| GitHub Releases | Alongside `.px4` firmware files | +| S3 | Same directory as firmware artifacts | + +## Validation + +Validate an SBOM against the SPDX JSON schema: + +```sh +python3 -c " +import json +doc = json.load(open('build/px4_sitl_default/px4_sitl_default.sbom.spdx.json')) +assert doc['spdxVersion'] == 'SPDX-2.3' +assert doc['dataLicense'] == 'CC0-1.0' +assert len(doc['packages']) > 0 +print(f'Valid: {len(doc[\"packages\"])} packages') +" +``` + +For full schema validation, use the [SPDX online validator](https://tools.spdx.org/app/validate/) or the `spdx-tools` CLI. + +## License Detection + +Submodule licenses are identified through a combination of auto-detection and manual overrides. + +### Auto-Detection + +The generator reads the first 100 lines of each submodule's LICENSE or COPYING file +and matches keywords against known patterns. +Copyleft licenses (GPL, LGPL, AGPL) are checked before permissive ones +to prevent false positives. + +Supported patterns include: + +| SPDX Identifier | Matched Keywords | +| --------------- | ----------------------------------------------------- | +| GPL-3.0-only | "GNU GENERAL PUBLIC LICENSE", "Version 3" | +| GPL-2.0-only | "GNU GENERAL PUBLIC LICENSE", "Version 2" | +| LGPL-3.0-only | "GNU LESSER GENERAL PUBLIC LICENSE", "Version 3" | +| LGPL-2.1-only | "GNU Lesser General Public License", "Version 2.1" | +| AGPL-3.0-only | "GNU AFFERO GENERAL PUBLIC LICENSE", "Version 3" | +| Apache-2.0 | "Apache License", "Version 2.0" | +| MIT | "Permission is hereby granted" | +| BSD-3-Clause | "Redistribution and use", "Neither the name" | +| BSD-2-Clause | "Redistribution and use", "THIS SOFTWARE IS PROVIDED" | +| ISC | "Permission to use, copy, modify, and/or distribute" | +| EPL-2.0 | "Eclipse Public License", "2.0" | +| Unlicense | "The Unlicense", "unlicense.org" | + +If no pattern matches, the license is set to `NOASSERTION`. + +### Override File + +When auto-detection fails or returns the wrong result, +add an entry to `Tools/ci/license-overrides.yaml`: + +```yaml +overrides: + src/lib/crypto/libtomcrypt: + license: "Unlicense" + comment: "Public domain dedication. Functionally equivalent to Unlicense." +``` + +Each entry maps a submodule path to its correct SPDX license identifier. +The optional `comment` field is emitted as `licenseComments` in the SBOM, +providing context for auditors reviewing complex licensing situations +(dual licenses, composite LICENSE files, public domain dedications). + +### Copyleft Guardrail + +The `--verify-licenses` command flags submodules with copyleft licenses +(GPL, LGPL, AGPL) in a dedicated warning section. +This is informational only and does not cause a failure. +It helps maintainers track copyleft obligations when adding new submodules. + +### Platform Filtering + +Submodules under `platforms/nuttx/` are excluded from POSIX and QURT SBOMs. +The `--platform` argument (set automatically by CMake via `${PX4_PLATFORM}`) +controls which platform-specific submodules are included. +This ensures SITL builds do not list NuttX RTOS packages. + +### Verification + +Run the verify command to check detection for all submodules: + +```sh +python3 Tools/ci/generate_sbom.py --verify-licenses --source-dir . +``` + +This prints each submodule with its detected license, any override, and the final value. +It exits non-zero if any checked-out submodule resolves to `NOASSERTION` without an override. +Copyleft warnings are printed after the main table. + +### Adding a New Submodule + +1. Add the submodule normally. +2. Run `--verify-licenses` to confirm the license is detected. +3. If detection fails, add an override to `Tools/ci/license-overrides.yaml`. +4. If the license is not in the SPDX list, use `LicenseRef-`. + +### EU CRA Compliance + +The EU Cyber Resilience Act requires SBOMs for products with digital elements. +The goal is zero `NOASSERTION` licenses in shipped firmware SBOMs. +Every submodule should have either a detected or overridden license. +The `--verify-licenses` check enforces this in CI. + +## What's in an SBOM + +This section is for integrators, compliance teams, and anyone reviewing SBOM artifacts. + +### Where to Find SBOMs + +| Location | Path | +| --------------- | ---------------------------------------- | +| Build directory | `build//.sbom.spdx.json` | +| GitHub Releases | Alongside `.px4` firmware files | +| S3 | Same directory as firmware artifacts | + +### Reading the JSON + +Each SBOM is a single JSON document following SPDX 2.3. +Key fields: + +- **`packages`**: Array of all components. Each has `name`, `versionInfo`, `licenseConcluded`, and `SPDXID`. +- **`relationships`**: How packages relate. `CONTAINS` means a submodule is compiled into firmware. `BUILD_DEPENDENCY_OF` means a tool used only during build. +- **`licenseConcluded`**: The SPDX license identifier determined for that package. +- **`licenseComments`**: Free-text explanation for complex cases (dual licenses, composite files, public domain). +- **`externalRefs`**: Package URLs (purls) linking to GitHub repos or PyPI. + +### Understanding NOASSERTION + +`NOASSERTION` means no license could be determined. +For submodules, this happens when: + +- The submodule is not checked out (common in CI shallow clones). +- No LICENSE/COPYING file exists. +- The LICENSE file does not match any known pattern and no override is configured. + +For shipped firmware, `NOASSERTION` should be resolved by adding an override. +For build-only dependencies (Python packages), `NOASSERTION` is acceptable +since these are not compiled into the firmware binary. diff --git a/docs/en/contribute/support.md b/docs/en/contribute/support.md index 59cd6541ba..ad90e3c407 100644 --- a/docs/en/contribute/support.md +++ b/docs/en/contribute/support.md @@ -7,7 +7,7 @@ const { site } = useData();
-

This page may be out out of date. See the latest version.

+

This page may be out of date. See the latest version.

@@ -18,7 +18,7 @@ This section shows how you can get help from the core dev team and the wider com The core development team and community are active on the following channels: - [PX4 Discuss Forum](https://discuss.px4.io/) - Post here first! -- [PX4 Discord](https://discord.gg/dronecode) - Post here if you don't get a response in discuss within a few days (include a link to your forum topic). +- [PX4 Discord](https://discord.com/invite/dronecode) - Post here if you don't get a response in discuss within a few days (include a link to your forum topic). :::tip The Discuss Forum is much preferred because it is indexed by search engines and serves as a common knowledge base. diff --git a/docs/en/debug/asset_tracking.md b/docs/en/debug/asset_tracking.md index e933596944..57a962c552 100644 --- a/docs/en/debug/asset_tracking.md +++ b/docs/en/debug/asset_tracking.md @@ -1,6 +1,6 @@ # Asset Tracking - + PX4 can track and log detailed information about external hardware devices connected to the flight controller. This enables unique identification of vehicle parts throughout their operational lifetime using device IDs, serial numbers, and version information. diff --git a/docs/en/debug/debug_values.md b/docs/en/debug/debug_values.md index ee27780c01..ba2c183c8a 100644 --- a/docs/en/debug/debug_values.md +++ b/docs/en/debug/debug_values.md @@ -22,7 +22,7 @@ This tutorial shows how to send the MAVLink message `NAMED_VALUE_FLOAT` using th The code for this tutorial is available here: - [Debug Tutorial Code](https://github.com/PX4/PX4-Autopilot/blob/main/src/examples/px4_mavlink_debug/px4_mavlink_debug.cpp) -- [Enable the tutorial app](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/fmu-v5/default.px4board) by ensuring the MAVLink debug app (**CONFIG_EXAMPLES_PX4_MAVLINK_DEBUG**) is in the config of your board and set set to 'y'. +- [Enable the tutorial app](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/fmu-v5/default.px4board) by ensuring the MAVLink debug app (**CONFIG_EXAMPLES_PX4_MAVLINK_DEBUG**) is in the config of your board and set to 'y'. All required to set up a debug publication is this code snippet. First add the header file: diff --git a/docs/en/debug/eclipse_jlink.md b/docs/en/debug/eclipse_jlink.md index 056f8ea1b5..03a9c87c94 100644 --- a/docs/en/debug/eclipse_jlink.md +++ b/docs/en/debug/eclipse_jlink.md @@ -22,8 +22,8 @@ Setup PX4 by following the normal guidelines: To install _Eclipse_: 1. Download [Eclipse CDT for C/C++ Developers](https://github.com/eclipse-embed-cdt/org.eclipse.epp.packages/releases) (MCU GitHub). -1. Extract the Eclipse folder and copy it anywhere (there is no need to run any install scripts). -1. Run _Eclipse_ and choose a location for your initial workbench. +2. Extract the Eclipse folder and copy it anywhere (there is no need to run any install scripts). +3. Run _Eclipse_ and choose a location for your initial workbench. ### Segger Jlink Tools @@ -37,15 +37,15 @@ For more information, see: [https://gnu-mcu-eclipse.github.io/debug/jlink/instal ## First Use 1. Connect the _Segger JLink_ to the host computer and the [flight controller debug port](../debug/swd_debug.md) (via an adapter). -1. Power the flight controller. -1. Run _Eclipse_. -1. Add a source by choosing **File > Import > C/C++ > Existing Code as Makefile Project** and click **Next**. -1. Point it to the **PX4-Autopilot** folder and give it a name, then select _ARM Cross GCC_ in the _Toolchain for Indexer Settings_ and click **Finish**. +2. Power the flight controller. +3. Run _Eclipse_. +4. Add a source by choosing **File > Import > C/C++ > Existing Code as Makefile Project** and click **Next**. +5. Point it to the **PX4-Autopilot** folder and give it a name, then select _ARM Cross GCC_ in the _Toolchain for Indexer Settings_ and click **Finish**. Import takes a while, wait for it to complete. -1. Set the MCU settings: right-click on the top-level project in the Project Explorer, select _Properties_ then under MCU choose _SEGGER J-Link Path_. +6. Set the MCU settings: right-click on the top-level project in the Project Explorer, select _Properties_ then under MCU choose _SEGGER J-Link Path_. Set it as shown in the screenshot below. ![Eclipse: Segger J-Link Path](../../assets/debug/eclipse_segger_jlink_path.png) -1. Update packs: +7. Update packs: - Click the small icon on the top right called _Open Perspective_ and open the _Packs_ perspective. ![Eclipse: Workspace](../../assets/debug/eclipse_workspace_perspective.png) - Click the **update all** button. @@ -59,31 +59,31 @@ For more information, see: [https://gnu-mcu-eclipse.github.io/debug/jlink/instal - The STM32Fxx devices are found in the Keil folder, install by right-clicking and then selecting **install** on the according device for F4 and F7. -1. Setup debug configuration for target: +8. Setup debug configuration for target: - Right click project and open the _Settings_ (menu: **C/C++ Build > Settings**) - Choose the _Devices_ Tab, _Devices_ section (Not _Boards_). - Find the FMU chip you wish to debug. ![Eclipse: Select FMU in settings](../../assets/debug/eclipse_settings_devices_fmu.png) -1. Select debug configurations with the small drop-down next to the bug symbol: +9. Select debug configurations with the small drop-down next to the bug symbol: ![Eclipse: Debug config](../../assets/debug/eclipse_settings_debug_config.png) -1. Then select _GDB SEGGER J-Link Debugging_ and then the **New config** button on the top left. - ![Eclipse: GDB Segger Debug config](../../assets/debug/eclipse_settings_debug_config_gdb_segger.png) -1. Setup build config: - - Give it a name and set the _C/C++ Application_ to the corresponding **.elf** file. - - Choose _Disable Auto build_ +10. Then select _GDB SEGGER J-Link Debugging_ and then the **New config** button on the top left. + ![Eclipse: GDB Segger Debug config](../../assets/debug/eclipse_settings_debug_config_gdb_segger.png) +11. Setup build config: + - Give it a name and set the _C/C++ Application_ to the corresponding **.elf** file. + - Choose _Disable Auto build_ - ::: info - Remember that you must build the target from the command line before starting a debug session. - ::: + ::: info + Remember that you must build the target from the command line before starting a debug session. + ::: - ![Eclipse: GDB Segger Debug config](../../assets/debug/eclipse_settings_debug_config_gdb_segger_build_config.png) + ![Eclipse: GDB Segger Debug config](../../assets/debug/eclipse_settings_debug_config_gdb_segger_build_config.png) -1. The _Debugger_ and _Startup_ tabs shouldn’t need any modifications (just verify your settings with the screenshots below) +12. The _Debugger_ and _Startup_ tabs shouldn’t need any modifications (just verify your settings with the screenshots below) - ![Eclipse: GDB Segger Debug config: debugger tab](../../assets/debug/eclipse_settings_debug_config_gdb_segger_build_config_debugger_tab.png) - ![Eclipse: GDB Segger Debug config: startup tab](../../assets/debug/eclipse_settings_debug_config_gdb_segger_build_config_startup_tab.png) + ![Eclipse: GDB Segger Debug config: debugger tab](../../assets/debug/eclipse_settings_debug_config_gdb_segger_build_config_debugger_tab.png) + ![Eclipse: GDB Segger Debug config: startup tab](../../assets/debug/eclipse_settings_debug_config_gdb_segger_build_config_startup_tab.png) ## SEGGER Task-aware debugging @@ -101,18 +101,18 @@ To enable this feature for use in Eclipse: make px4_fmu-v5_default boardguiconfig ``` - (See [PX4 Menuconfig Setup](../hardware/porting_guide_config.md#px4-menuconfig-setup) for more information) on using the config tools). + (See [PX4 Menuconfig Setup](../hardware/porting_guide_config.md#px4-menuconfig-setup) for more information on using the config tools). - Ensure that the _Enable TCBinfo struct for debug_ is selected as shown: ![NuttX: Menuconfig: CONFIG_DEBUG_TCBINFO](../../assets/debug/nuttx_tcb_task_aware.png) -1. Compile the **jlink-nuttx.so** library in the terminal by running the following command in the terminal: `make jlink-nuttx` -1. Modify Eclipse to use this libary. +2. Compile the **jlink-nuttx.so** library in the terminal by running the following command in the terminal: `make jlink-nuttx` +3. Modify Eclipse to use this library. In the _J-Link GDB Server Setup_ configuration, update **Other options** to include `-rtos /home//Tools/jlink-nuttx.so`, as shown in the image below. ![Eclipse: GDB Segger Debug config RTOS aware: debugger tab](../../assets/debug/eclipse_settings_debug_config_gdb_segger_task_aware.png) -1. When running the debugger you should see now multiple threads instead of just one: +4. When running the debugger you should see now multiple threads instead of just one: ![Eclipse: GDB Segger Debug config RTOS aware: debug session](../../assets/debug/eclipse_settings_debug_config_gdb_segger_task_aware_tasks.png) diff --git a/docs/en/debug/gdb_debugging.md b/docs/en/debug/gdb_debugging.md index 1803fbd66c..a67aad7aa7 100644 --- a/docs/en/debug/gdb_debugging.md +++ b/docs/en/debug/gdb_debugging.md @@ -25,7 +25,7 @@ See the debug probe documentation for details on how to setup your debug connect - [SEGGER J-Link](probe_jlink.md): commercial probe, no built-in serial console, requires adapter. - [Black Magic Probe](probe_bmp.md): integrated GDB server and serial console, requires adapter. -- [STLink](probe_stlink): best value, integrated serial console, adapter must be soldered. +- [STLink](probe_stlink.md): best value, integrated serial console, adapter must be soldered. We recommend using the J-Link with the Pixhawk Debug Adapter or the STLinkv3-MINIE with a soldered custom cable. diff --git a/docs/en/debug/plotting_realtime_uorb_data.md b/docs/en/debug/plotting_realtime_uorb_data.md index 6bb79ca1e4..118dc3d958 100644 --- a/docs/en/debug/plotting_realtime_uorb_data.md +++ b/docs/en/debug/plotting_realtime_uorb_data.md @@ -70,7 +70,7 @@ cd ~/PX4-Autopilot make px4_sitl gz_x500 ``` -Open another terminal and start the `MicroXRCEAgent` to connect to the the simulator: +Open another terminal and start the `MicroXRCEAgent` to connect to the simulator: ```sh MicroXRCEAgent udp4 -p 8888; exec bash diff --git a/docs/en/debug/probe_mculink.md b/docs/en/debug/probe_mculink.md index ece2c2e965..2912d59a89 100644 --- a/docs/en/debug/probe_mculink.md +++ b/docs/en/debug/probe_mculink.md @@ -1,6 +1,6 @@ # MCU-Link Debug Probe -The [MCU-Link Debug Probe](https://www.nxp.com/design/design-center/software/development-software/mcuxpresso-software-and-tools-/mcu-link-debug-probe:MCU-LINK) is a cheap, fast and highly capable debug probe that can serve as a stand-alone debug and console communicator whn working with Pixhawk boards. +The [MCU-Link Debug Probe](https://www.nxp.com/design/design-center/software/development-software/mcuxpresso-software-and-tools-/mcu-link-debug-probe:MCU-LINK) is a cheap, fast and highly capable debug probe that can serve as a stand-alone debug and console communicator when working with Pixhawk boards. Key features: diff --git a/docs/en/debug/simulation_debugging.md b/docs/en/debug/simulation_debugging.md index b3f8b943f6..6cd7871bbb 100644 --- a/docs/en/debug/simulation_debugging.md +++ b/docs/en/debug/simulation_debugging.md @@ -106,7 +106,7 @@ You can also start your simulation, and _then_ attach `gdb`: ``` As the script runs, note the **SITL COMMAND:** output text located right above the large "PX4" text. - It will list the location of your px4 bin file for later use. + It will list the location of your PX4 bin file for later use. ```sh SITL COMMAND: "" ""/etc diff --git a/docs/en/debug/swd_debug.md b/docs/en/debug/swd_debug.md index 89188f6560..bb96fd3a8f 100644 --- a/docs/en/debug/swd_debug.md +++ b/docs/en/debug/swd_debug.md @@ -1,11 +1,11 @@ # SWD Debug Port -PX4 runs on ARM Cortex-M microcontrollers, which contain dedicated hardware for interactive debugging via the [_Serial Wire Debug (SWD)_][swd] interface and non-invasive profiling and high-bandwidth tracing via the [_Serial Wire Ouput (SWO)_][itm] and [_TRACE_ pins][etm]. +PX4 runs on ARM Cortex-M microcontrollers, which contain dedicated hardware for interactive debugging via the [_Serial Wire Debug (SWD)_][swd] interface and non-invasive profiling and high-bandwidth tracing via the [_Serial Wire Output (SWO)_][itm] and [_TRACE_ pins][etm]. The SWD debug interface allows direct, low-level, hardware access to the microcontroller's processor and peripherals, so it does not depend on any software on the device. Therefore it can be used to debug bootloaders and operating systems such as NuttX. -## Debug Signals +## Debug Signals {#debug-signals} Four signals are required for debugging (in bold) while the rest is recommended. @@ -27,11 +27,9 @@ The SWO pin can emit low-overhead, real-time profiling data with nanosecond time The TRACE pins require specialized debug probes to deal with the high bandwidth and subsequent datastream decoding. They are usually not accessible and are typically only used to debug very specific timing issues. - +## Autopilot Debug Ports {#debug-ports} -## Autopilot Debug Ports - -Flight controllers commonly provide a single debug port that exposes both the [SWD Interface](#debug-signals) and [System Console](system_console). +Flight controllers commonly provide a single debug port that exposes both the [SWD Interface](#debug-signals) and [System Console](system_console.md). The [Pixhawk Connector Standards](#pixhawk-standard-debug-ports) formalize the port that must be used in each FMU version. However there are still many boards that use different pinouts or connectors, so we recommend you check the [documentation for your autopilot](../flight_controller/index.md) to confirm port location and pinout. @@ -40,40 +38,52 @@ The debug port location and pinouts for a subset of autopilots are linked below: -| Autopilot | Debug Port | -| :---------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Holybro Pixhawk 6X-RT (FMUv6X-RT) | [Pixhawk Debug Full](#pixhawk-debug-full) | -| Holybro Pixhawk 6X (FMUv6x) | [Pixhawk Debug Full](#pixhawk-debug-full) | -| Holybro Pixhawk 5X (FMUv5x) | [Pixhawk Debug Full](#pixhawk-debug-full) | -| [Holybro Durandal](../flight_controller/durandal.md#debug-port) | [Pixhawk Debug Mini](#pixhawk-debug-mini) | -| [Holybro Kakute F7](../flight_controller/kakutef7.md#debug-port) | Solder pads | -| [Holybro Pixhawk 4 Mini](../flight_controller/pixhawk4_mini.md#debug-port) (FMUv5) | [Pixhawk Debug Mini](#pixhawk-debug-mini) | -| [Holybro Pixhawk 4](../flight_controller/pixhawk4.md#debug_port) (FMUv5) | [Pixhawk Debug Mini](#pixhawk-debug-mini) | -| [Drotek Pixhawk 3 Pro](../flight_controller/pixhawk3_pro.md#debug-port) (FMU-v4pro) | [Pixhawk Debug Mini](#pixhawk-debug-mini) | -| [CUAV V5+](../flight_controller/cuav_v5_plus.md#debug-port) | 6-pin JST GH
Digikey: [BM06B-GHS-TBT(LF)(SN)(N)][bm06b-ghs-tbt(lf)(sn)(n)] (vertical mount), [SM06B-GHS-TBT(LF)(SN)(N)][sm06b-ghs-tbt(lf)(sn)(n)] (side mount) | -| [CUAV V5nano](../flight_controller/cuav_v5_nano.md#debug_port) | 6-pin JST GH
Digikey: [BM06B-GHS-TBT(LF)(SN)(N)][bm06b-ghs-tbt(lf)(sn)(n)] (vertical mount), [SM06B-GHS-TBT(LF)(SN)(N)][sm06b-ghs-tbt(lf)(sn)(n)] (side mount) | -| [3DR Pixhawk](../flight_controller/pixhawk.md#swd-port) | ARM 10-pin JTAG Connector (also used for FMUv2 boards including: _mRo Pixhawk_, _HobbyKing HKPilot32_). | +| Autopilot | Debug Port | +| :----------------------------------------------------------------------------------- | :---------------------------------------- | +| [Holybro Pixhawk 6X-RT](../flight_controller/pixhawk6x-rt.md#debug_port) (FMUv6X-RT) | [Pixhawk Debug Full](#pixhawk-debug-full) | +| [Holybro Pixhawk 6X](../flight_controller/pixhawk6x.md#debug_port) (FMUv6x) | [Pixhawk Debug Full](#pixhawk-debug-full) | +| [Holybro Pixhawk 5X](../flight_controller/pixhawk5x.md#debug_port) (FMUv5x) | [Pixhawk Debug Full](#pixhawk-debug-full) | +| [Holybro Durandal](../flight_controller/durandal.md#debug-port) | [Pixhawk Debug Mini](#pixhawk-debug-mini) | +| [Holybro Pixhawk 4](../flight_controller/pixhawk4.md#debug_port) (FMUv5) | [Pixhawk Debug Mini](#pixhawk-debug-mini) | +| [Holybro Pixhawk 6X Pro](../flight_controller/pixhawk6x_pro.md#debug-port) | [Pixhawk Debug Full](#pixhawk-debug-full) | +| [Holybro Pixhawk 6C](../flight_controller/pixhawk6c.md#debug_port) | [Pixhawk Debug Full](#pixhawk-debug-full) | +| [Holybro Pixhawk 6C Mini](../flight_controller/pixhawk6c_mini.md#debug_port) | [Pixhawk Debug Mini](#pixhawk-debug-mini) | +| [Holybro Pix32 v6](../flight_controller/holybro_pix32_v6.md#debug_port) | [Pixhawk Debug Full](#pixhawk-debug-full) | +| [Holybro Pix32 v5](../flight_controller/holybro_pix32_v5.md#debug-port) | [Pixhawk Debug Mini](#pixhawk-debug-mini) | +| [Holybro Kakute H7](../flight_controller/kakuteh7.md#debug-port) | SWD pads and system console | +| [Holybro Kakute H7 mini](../flight_controller/kakuteh7mini.md#debug-port) | SWD pads and system console | +| [Holybro Kakute H7 V2](../flight_controller/kakuteh7v2.md#debug-port) | SWD pads and system console | +| [CUAV V5+](../flight_controller/cuav_v5_plus.md#debug-port) | Custom port but comes with adaptor cable | +| [CUAV V5nano](../flight_controller/cuav_v5_nano.md#debug_port) | Custom port but comes with adaptor cable | +| [CUAV Pixhawk V6X](../flight_controller/cuav_pixhawk_v6x.md#debug_port) | [Pixhawk Debug Full](#pixhawk-debug-full) | +| [CUAV X25-SUPER](../flight_controller/cuav_x25-super.md#debug_port) | [Pixhawk Debug Mini] | +| [CUAV X25-EVO](../flight_controller/cuav_x25-evo.md#debug_port) | [Pixhawk Debug Mini] | +| [CUAV Nora](../flight_controller/cuav_nora.md#debug-port) | Custom port but comes with adaptor cable. | +| [ARK Pixhawk Autopilot Bus Carrier](../flight_controller/ark_pab.md#debug-port) | [Pixhawk Debug Full](#pixhawk-debug-full) | +| [NXP MR-VMU-RT1176](../flight_controller/nxp_mr_vmu_rt1176.md#debug_port) | [Pixhawk Debug Full](#pixhawk-debug-full) | +| [mRo Pixracer](../flight_controller/pixracer.md#debug-port) | [Pixhawk Debug Mini](#pixhawk-debug-mini) | +| [S-Vehicle E2](../flight_controller/svehicle_e2.md#debug-port) | [Pixhawk Debug Mini] | +| [AP-H743-R1](../flight_controller/x-mav_ap-h743r1.md#debug-port) | 4-pin JST GH (SWD only) | +| [mRo Control Zero F7](../flight_controller/mro_control_zero_f7.md#debug_port) | | - - -## Pixhawk Connector Standard Debug Ports +## Pixhawk Connector Standard Debug Ports {#pixhawk-standard-debug-ports} The Pixhawk project has defines a standard pinout and connector type for different Pixhawk FMU releases: -:::tip +::: tip Check your [specific board](#port-information) to confirm the port used. ::: -| FMU Version | Pixhawk Version | Debug Port | -| :---------- | :-------------------------------------------------------------- | :---------------------------------------- | -| FMUv2 | [Pixhawk / Pixhawk 1](../flight_controller/pixhawk.md#swd-port) | 10 pin ARM Debug | -| FMUv3 | Pixhawk 2 | 6 pin SUR Debug | -| FMUv4 | Pixhawk 3 | [Pixhawk Debug Mini](#pixhawk-debug-mini) | -| FMUv5 | Pixhawk 4 FMUv5 | [Pixhawk Debug Mini](#pixhawk-debug-mini) | -| FMUv5X | Pixhawk 5X | [Pixhawk Debug Full](#pixhawk-debug-full) | -| FMUv6 | Pixhawk 6 | [Pixhawk Debug Full](#pixhawk-debug-full) | -| FMUv6X | Pixhawk 6X | [Pixhawk Debug Full](#pixhawk-debug-full) | -| FMUv6X-RT | Pixhawk 6X-RT | [Pixhawk Debug Full](#pixhawk-debug-full) | +| FMU Version | Pixhawk Version | Debug Port | +| :---------- | :------------------ | :---------------------------------------- | +| FMUv2 | Pixhawk / Pixhawk 1 | 10 pin ARM Debug | +| FMUv3 | Pixhawk 2 | 6 pin SUR Debug | +| FMUv4 | Pixhawk 3 | [Pixhawk Debug Mini](#pixhawk-debug-mini) | +| FMUv5 | Pixhawk 4 FMUv5 | [Pixhawk Debug Mini](#pixhawk-debug-mini) | +| FMUv5X | Pixhawk 5X | [Pixhawk Debug Full](#pixhawk-debug-full) | +| FMUv6 | Pixhawk 6 | [Pixhawk Debug Full](#pixhawk-debug-full) | +| FMUv6X | Pixhawk 6X | [Pixhawk Debug Full](#pixhawk-debug-full) | +| FMUv6X-RT | Pixhawk 6X-RT | [Pixhawk Debug Full](#pixhawk-debug-full) | ::: info There FMU and Pixhawk versions are (only) consistent after FMUv5X. @@ -81,7 +91,7 @@ There FMU and Pixhawk versions are (only) consistent after FMUv5X. ### Pixhawk Debug Mini -The [Pixhawk Connector Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-009%20Pixhawk%20Connector%20Standard.pdf) defines the _Pixhawk Debug Mini_, a _6-Pin SH Debug Port_ that provides access to both SWD pins and the [System Console](system_console). +The [Pixhawk Connector Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-009%20Pixhawk%20Connector%20Standard.pdf) defines the _Pixhawk Debug Mini_, a _6-Pin SH Debug Port_ that provides access to both SWD pins and the [System Console](system_console.md). This is used in FMUv4 and FMUv5. @@ -112,7 +122,7 @@ You can connect to the debug port using a [cable like this one](https://www.digi ### Pixhawk Debug Full -The [Pixhawk Connector Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-009%20Pixhawk%20Connector%20Standard.pdf) defines _Pixhawk Debug Full_, a _10-Pin SH Debug Port_ that provides access to both SWD pins and the [System Console](system_console). +The [Pixhawk Connector Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-009%20Pixhawk%20Connector%20Standard.pdf) defines _Pixhawk Debug Full_, a _10-Pin SH Debug Port_ that provides access to both SWD pins and the [System Console](system_console.md). This essentially moves the solder pads from beside the [Pixhawk Debug Mini](#pixhawk-debug-mini) into the connector, and also adds an SWO pin. This port is specified for use in FMUv5x, FMUv6, FMUv6x. @@ -142,18 +152,16 @@ You can connect to the debug port using a [cable like this one](https://www.digi ![10-pin JST SH Cable](../../assets/debug/cable_10pin_jst_sh.jpg) - +## Debug Probes for PX4 Hardware {#debug-probes} -## Debug Probes for PX4 Hardware - -Flight controllers commonly provide a [single debug port](#autopilot-debug-ports) that exposes both the [SWD Interface](#debug-signals) and [System Console](system_console). +Flight controllers commonly provide a [single debug port](#autopilot-debug-ports) that exposes both the [SWD Interface](#debug-signals) and [System Console](system_console.md). There are several debug probes that are tested and supported for connecting to one or both of these interfaces: - [SEGGER J-Link](../debug/probe_jlink.md): commercial probe, no built-in serial console, requires adapter. - [Black Magic Probe](../debug/probe_bmp.md): integrated GDB server and serial console, requires adapter. -- [STLink](../debug/probe_stlink): best value, integrated serial console, adapter must be soldered. -- [MCU-Link](../debug/probe_mculink): best value, integrated serial console, requires adapter. +- [STLink](../debug/probe_stlink.md): best value, integrated serial console, adapter must be soldered. +- [MCU-Link](../debug/probe_mculink.md): best value, integrated serial console, requires adapter. An adapter to connect to the debug port may come with your flight controller or debug probe. Other options are given below. @@ -191,7 +199,7 @@ Probes that are known to come with connectors are listed below: ### Board-specific Adapters -Some manufacturers provide cables to make it easy to connect the SWD interface and [System Console](../debug/system_console). +Some manufacturers provide cables to make it easy to connect the SWD interface and [System Console](../debug/system_console.md). - [CUAV V5nano](../flight_controller/cuav_v5_nano.md#debug_port) and [CUAV V5+](../flight_controller/cuav_v5_plus.md#debug-port) include this debug cable: @@ -205,7 +213,7 @@ You can also create custom cables for connecting to different boards or probes: - Connect the VREF pin, if supported by the debug probe. - Connect the remaining pins, if present. -See the [STLinkv3-MINIE](probe_stlink) for a guide on how to solder a custom cable. +See the [STLinkv3-MINIE](probe_stlink.md) for a guide on how to solder a custom cable. :::tip Where possible, we highly recommend that you create or obtain an adapter board rather than custom cables for connecting to SWD/JTAG debuggers and computers. @@ -217,5 +225,3 @@ This reduces the risk or poor wiring contributing to debugging problems, and has [swd]: https://developer.arm.com/documentation/ihi0031/a/The-Serial-Wire-Debug-Port--SW-DP- [itm]: https://developer.arm.com/documentation/ddi0403/d/Appendices/Debug-ITM-and-DWT-Packet-Protocol?lang=en [etm]: https://developer.arm.com/documentation/ihi0064/latest/ -[bm06b-ghs-tbt(lf)(sn)(n)]: https://www.digikey.com/en/products/detail/jst-sales-america-inc/BM06B-GHS-TBT/807804 -[sm06b-ghs-tbt(lf)(sn)(n)]: https://www.digikey.com/en/products/detail/jst-sales-america-inc/SM06B-GHS-TB/807790 diff --git a/docs/en/debug/system_console.md b/docs/en/debug/system_console.md index 4477fc86c7..12b4c3efbf 100644 --- a/docs/en/debug/system_console.md +++ b/docs/en/debug/system_console.md @@ -23,16 +23,10 @@ The sections below outline/link to the wiring and system console information for ### Board-Specific Wiring -The System Console UART pinouts/debug ports are typically documented in [autopilot overview pages](../flight_controller/index.md) (some are linked below): +The System Console UART pinouts/debug ports are typically documented in the affected [autopilot overview pages](../flight_controller/index.md). +For example, see [mRo Pixhawk](../flight_controller/mro_pixhawk.md#console-port) and [Pixracer](../flight_controller/pixracer.md#debug-port). -- [3DR Pixhawk v1 Flight Controller](../flight_controller/pixhawk.md#console-port) (also applies to - [mRo Pixhawk](../flight_controller/mro_pixhawk.md#debug-ports), [Holybro pix32](../flight_controller/holybro_pix32.md#debug-port)) -- [Pixhawk 3](../flight_controller/pixhawk3_pro.md#debug-port) -- [Pixracer](../flight_controller/pixracer.md#debug-port) - - - -### Pixhawk Debug Port +### Pixhawk Debug Port {#pixhawk_debug_port} Pixhawk flight controllers usually come with a [Pixhawk Connector Standard Debug Port](../debug/swd_debug.md#pixhawk-connector-standard-debug-ports) which will be either the 10 pin [Pixhawk Debug Full](../debug/swd_debug.md#pixhawk-debug-full) or 6 pin [Pixhawk Debug Mini](../debug/swd_debug.md#pixhawk-debug-mini) port. diff --git a/docs/en/dev_airframes/adding_a_new_frame.md b/docs/en/dev_airframes/adding_a_new_frame.md index f34ec3ea30..801d0b0bab 100644 --- a/docs/en/dev_airframes/adding_a_new_frame.md +++ b/docs/en/dev_airframes/adding_a_new_frame.md @@ -124,118 +124,79 @@ param set-default CA_ROTOR3_PY 0.15 param set-default CA_ROTOR3_KM -0.05 ``` -### Example - Babyshark VTOL Complete Vehicle +### Example - HolyBro QAV250 Complete Vehicle -A more complicated configuration file for a complete vehicle is provided below. -This is the configuration for the Baby Shark [Standard VTOL](../frames_vtol/standardvtol.md) ([original file here](https://github.com/PX4/PX4-Autopilot/blob/main/ROMFS/px4fmu_common/init.d/airframes/13014_vtol_babyshark)). +A more complete configuration file for a real vehicle is provided below. +This is the configuration for the [HolyBro QAV250](../frames_multicopter/holybro_qav250_pixhawk4_mini.md) quadrotor ([original file here](https://github.com/PX4/PX4-Autopilot/blob/main/ROMFS/px4fmu_common/init.d/airframes/4052_holybro_qav250)). -The shebang and documentation sections are similar to those for the generic frame, but here we also document what `outputs` are mapped to each motor and actuator. -Note that these outputs are documentation only; the actual mapping is done using parameters. +The shebang and documentation sections are similar to those for the generic frame. +Here we also add a `@url` link to the vehicle documentation, a `@maintainer`, and additional board exclusions. ```sh #!/bin/sh # -# @name BabyShark VTOL +# @name HolyBro QAV250 # -# @type Standard VTOL -# @class VTOL +# @url https://docs.px4.io/main/en/frames_multicopter/holybro_qav250_pixhawk4_mini # -# @maintainer Silvan Fuhrer +# @type Quadrotor x +# @class Copter # -# @output Motor1 motor 1 -# @output Motor2 motor 2 -# @output Motor3 motor 3 -# @output Motor4 motor 4 -# @output Motor5 Pusher motor -# @output Servo1 Ailerons -# @output Servo2 A-tail left -# @output Servo3 A-tail right +# @maintainer Beat Kueng # # @board px4_fmu-v2 exclude # @board bitcraze_crazyflie exclude -# @board holybro_kakutef7 exclude +# @board px4_fmu-v6x exclude +# @board ark_fmu-v6x exclude # ``` -As for the generic frame, we then include the generic VTOL defaults. +Next, we source the multicopter defaults. ```sh -. ${R}etc/init.d/rc.vtol_defaults +. ${R}etc/init.d/rc.mc_defaults ``` Then we define configuration parameters and [tuning gains](#tuning-gains): ```sh -param set-default MAV_TYPE 22 +# The set does not include a battery, but most people will probably use 4S +param set-default BAT1_N_CELLS 4 -param set-default BAT1_N_CELLS 6 +param set-default IMU_GYRO_CUTOFF 120 +param set-default IMU_DGYRO_CUTOFF 45 -param set-default FW_AIRSPD_MAX 30 -param set-default FW_AIRSPD_MIN 19 -param set-default FW_AIRSPD_TRIM 23 -param set-default FW_PN_R_SLEW_MAX 40 -param set-default FW_PSP_OFF 3 -param set-default FW_P_LIM_MAX 18 -param set-default FW_P_LIM_MIN -25 -param set-default FW_RLL_TO_YAW_FF 0.1 -param set-default FW_RR_P 0.08 -param set-default FW_R_LIM 45 -param set-default FW_R_RMAX 50 -param set-default FW_THR_TRIM 0.65 -param set-default FW_THR_MIN 0.3 -param set-default FW_THR_SLEW_MAX 0.6 -param set-default FW_T_HRATE_FF 0 -param set-default FW_T_SINK_MAX 15 -param set-default FW_T_SINK_MIN 3 -param set-default FW_YR_P 0.15 - -param set-default IMU_DGYRO_CUTOFF 15 -param set-default MC_PITCHRATE_MAX 60 -param set-default MC_ROLLRATE_MAX 60 -param set-default MC_YAWRATE_I 0.15 -param set-default MC_YAWRATE_MAX 40 -param set-default MC_YAWRATE_P 0.3 - -param set-default MPC_ACC_DOWN_MAX 2 -param set-default MPC_ACC_HOR_MAX 2 -param set-default MPC_ACC_UP_MAX 3 param set-default MC_AIRMODE 1 -param set-default MPC_JERK_AUTO 4 -param set-default MPC_LAND_SPEED 1 -param set-default MPC_MAN_TILT_MAX 25 -param set-default MPC_MAN_Y_MAX 40 -param set-default COM_SPOOLUP_TIME 1.5 -param set-default MPC_THR_HOVER 0.45 -param set-default MPC_TILTMAX_AIR 25 -param set-default MPC_TKO_RAMP_T 1.8 -param set-default MPC_TKO_SPEED 1 -param set-default MPC_VEL_MANUAL 3 -param set-default MPC_XY_CRUISE 3 -param set-default MPC_XY_VEL_MAX 3.5 -param set-default MPC_YAWRAUTO_MAX 40 -param set-default MPC_Z_VEL_MAX_UP 2 +param set-default MC_PITCHRATE_D 0.0012 +param set-default MC_PITCHRATE_I 0.35 +param set-default MC_PITCHRATE_MAX 1200 +param set-default MC_PITCHRATE_P 0.082 +param set-default MC_PITCH_P 8 +param set-default MC_ROLLRATE_D 0.0012 +param set-default MC_ROLLRATE_I 0.3 +param set-default MC_ROLLRATE_MAX 1200 +param set-default MC_ROLLRATE_P 0.076 +param set-default MC_ROLL_P 8 +param set-default MC_YAWRATE_I 0.3 +param set-default MC_YAWRATE_MAX 600 +param set-default MC_YAWRATE_P 0.25 +param set-default MC_YAW_P 4 -param set-default NAV_ACC_RAD 3 +param set-default MPC_MANTHR_MIN 0 +param set-default MPC_MAN_TILT_MAX 60 +param set-default MPC_THR_CURVE 1 +param set-default MPC_THR_HOVER 0.25 +param set-default MPC_THR_MIN 0.05 +param set-default MPC_Z_VEL_I_ACC 1.7 -param set-default SENS_BOARD_ROT 4 - -param set-default VT_ARSP_BLEND 10 -param set-default VT_ARSP_TRANS 21 -param set-default VT_B_DEC_MSS 1.5 -param set-default VT_B_TRANS_DUR 12 -param set-default VT_ELEV_MC_LOCK 0 -param set-default VT_FWD_THRUST_SC 1.2 -param set-default VT_F_TR_OL_TM 8 -param set-default VT_PSHER_SLEW 0.5 -param set-default VT_TRANS_MIN_TM 4 -param set-default VT_TYPE 2 +param set-default THR_MDL_FAC 0.3 ``` -Last of all, the file defines the control allocation parameters for the geometry and the parameters that set which outputs map to different motors and servos. +Last of all, the file defines the control allocation parameters for the geometry and the parameters that set which outputs map to different motors. ```sh -param set-default CA_AIRFRAME 2 -param set-default CA_ROTOR_COUNT 5 +# Square quadrotor X PX4 numbering +param set-default CA_ROTOR_COUNT 4 param set-default CA_ROTOR0_PX 1 param set-default CA_ROTOR0_PY 1 param set-default CA_ROTOR1_PX -1 @@ -246,34 +207,11 @@ param set-default CA_ROTOR2_KM -0.05 param set-default CA_ROTOR3_PX -1 param set-default CA_ROTOR3_PY 1 param set-default CA_ROTOR3_KM -0.05 -param set-default CA_ROTOR4_AX 1.0 -param set-default CA_ROTOR4_AZ 0.0 -param set-default CA_SV_CS_COUNT 3 -param set-default CA_SV_CS0_TYPE 15 -param set-default CA_SV_CS0_TRQ_R 1.0 -param set-default CA_SV_CS1_TRQ_P 0.5000 -param set-default CA_SV_CS1_TRQ_R 0.0000 -param set-default CA_SV_CS1_TRQ_Y -0.5000 -param set-default CA_SV_CS1_TYPE 13 -param set-default CA_SV_CS2_TRQ_P 0.5000 -param set-default CA_SV_CS2_TRQ_Y 0.5000 -param set-default CA_SV_CS2_TYPE 14 - -param set-default PWM_MAIN_FUNC1 201 -param set-default PWM_MAIN_FUNC2 202 -param set-default PWM_MAIN_FUNC3 105 -param set-default PWM_MAIN_FUNC4 203 -param set-default PWM_MAIN_FUNC5 101 -param set-default PWM_MAIN_FUNC6 102 -param set-default PWM_MAIN_FUNC7 103 -param set-default PWM_MAIN_FUNC8 104 - -param set-default PWM_MAIN_TIM0 50 -param set-default PWM_MAIN_DIS1 1500 -param set-default PWM_MAIN_DIS2 1500 -param set-default PWM_MAIN_DIS3 1000 -param set-default PWM_MAIN_DIS4 1500 +param set-default PWM_MAIN_FUNC1 101 +param set-default PWM_MAIN_FUNC2 102 +param set-default PWM_MAIN_FUNC3 103 +param set-default PWM_MAIN_FUNC4 104 ``` ## Adding a New Airframe Group diff --git a/docs/en/dev_log/log_encryption.md b/docs/en/dev_log/log_encryption.md index 23280698e0..c13a608032 100644 --- a/docs/en/dev_log/log_encryption.md +++ b/docs/en/dev_log/log_encryption.md @@ -15,7 +15,7 @@ To use it you will need to build firmware with this feature enabled and then upl Log encryption was has been improved in PX4 v1.16 to generate a single encrypted log file that contains both encrypted log data, and an encrypted symmetric key that you can use to decrypt it (provided you can decrypt the symmetric key). In earlier versions the encrypted symmetric key was stored in a separate file. -For more information see the [Log Encryption (PX4 v1.15)](https://docs.px4.io/v1.15/en/dev_log/log_encryption.html). +For more information see the [Log Encryption (PX4 v1.15)](https://docs.px4.io/v1.15/en/dev_log/log_encryption). ::: ## How ULog Encryption Works @@ -141,7 +141,7 @@ Note that the value is generated fresh for each log, and any value specified in You can use choose different locations for your keys as long as they aren't used by anything else. ::: -The key in `CONFIG_PUBLIC_KEY1` is the public key used to wrap the symmetric key in the the beginning of `.ulge` file (by default: see [SDLOG_EXCH_KEY](../advanced_config/parameter_reference.md#SDLOG_EXCH_KEY)). +The key in `CONFIG_PUBLIC_KEY1` is the public key used to wrap the symmetric key in the beginning of `.ulge` file (by default: see [SDLOG_EXCH_KEY](../advanced_config/parameter_reference.md#SDLOG_EXCH_KEY)). You can use the `rsa2048.pub` key for testing, or replace it with the path to your own public key in the file (see [Generate RSA Public & Private Keys](#generate-rsa-public-private-keys)). Build the firmware like this: diff --git a/docs/en/dev_log/logging.md b/docs/en/dev_log/logging.md index daa0d6d9e7..cb494f85d9 100644 --- a/docs/en/dev_log/logging.md +++ b/docs/en/dev_log/logging.md @@ -83,6 +83,31 @@ This configuration will log sensor_accel 0 at full rate, sensor_accel 1 at 10Hz, There are several scripts to analyze and convert logging files in the [pyulog](https://github.com/PX4/pyulog) repository. +## Log Cleanup + +PX4 automatically manages log storage by rotating log files during writing and cleaning up old logs when starting a new log. +Rotation is **on by default**: when the current file reaches [SDLOG_MAX_SIZE](../advanced_config/parameter_reference.md#SDLOG_MAX_SIZE), the logger closes it and opens a new one, and old `.ulg` files are deleted (oldest first) to keep free space above the threshold set by [SDLOG_ROTATE](../advanced_config/parameter_reference.md#SDLOG_ROTATE). + +Three parameters control how much space logs may use: + +- [SDLOG_ROTATE](../advanced_config/parameter_reference.md#SDLOG_ROTATE) is the maximum disk usage percentage (default 90). + Cleanup prior to logging (see below) ensures at least `(100 - SDLOG_ROTATE)%` of the disk stays free at all times, **even while writing a new log file**. + Setting it to `0` disables space-based cleanup entirely; setting it to `100` lets logs fill the disk completely. +- [SDLOG_MAX_SIZE](../advanced_config/parameter_reference.md#SDLOG_MAX_SIZE) is the maximum size of a single log file in MB + (default 1024). It also reserves headroom so that a full new file always fits after cleanup. +- [SDLOG_DIRS_MAX](../advanced_config/parameter_reference.md#SDLOG_DIRS_MAX) optionally caps the number of log directories kept (default 0, disabled). + This runs on top of the space-based cleanup and is mainly useful for capping log usage by count independent of available disk size (e.g. in SITL, where it defaults to `7`). + +At log start, the cleanup threshold is `((100 - SDLOG_ROTATE)% of disk) + SDLOG_MAX_SIZE`. +The oldest logs are deleted until the free space meets this threshold. +For example, on an 8 GB card with defaults, cleanup keeps at least `820 + 1024 = ~1.8 GB` free at log start, +so ~6 GB is usable for logs and disk usage never exceeds 90% during writing. +Small flash targets override `SDLOG_MAX_SIZE` to a smaller value to keep more logs within the available space. + +PX4 stores logs in directories named with one of two formats, depending on whether the system has valid time: date directories (such as `2024-01-15` or `2024-01-16`) when it does, and session directories (`sess001`) when it doesn't. +The cleanup algorithm prioritises deleting logs from whichever format is not currently in use. +This ensures that stale logs from a different time mode are cleaned up before current logs. + ## File size limitations The maximum file size depends on the file system and OS. diff --git a/docs/en/dev_setup/building_px4.md b/docs/en/dev_setup/building_px4.md index 4d54522bb4..80d7c274a0 100644 --- a/docs/en/dev_setup/building_px4.md +++ b/docs/en/dev_setup/building_px4.md @@ -121,10 +121,10 @@ The following list shows the build commands for the [Pixhawk standard](../flight - [Pixhawk Mini](../flight_controller/pixhawk_mini.md): `make px4_fmu-v3_default` - [Pixhawk 2 (Cube Black) (FMUv3)](../flight_controller/pixhawk-2.md): `make px4_fmu-v3_default` - [mRo Pixhawk (FMUv3)](../flight_controller/mro_pixhawk.md): `make px4_fmu-v3_default` (supports 2MB Flash) -- [Holybro pix32 (FMUv2)](../flight_controller/holybro_pix32.md): `make px4_fmu-v2_default` -- [Pixfalcon (FMUv2)](../flight_controller/pixfalcon.md): `make px4_fmu-v2_default` -- [Dropix (FMUv2)](../flight_controller/dropix.md): `make px4_fmu-v2_default` -- [Pixhawk 1 (FMUv2)](../flight_controller/pixhawk.md): `make px4_fmu-v2_default` +- [Holybro pix32 (FMUv2)](../flight_controller/autopilot_discontinued.md): `make px4_fmu-v2_default` - Discontinued +- [Pixfalcon (FMUv2)](../flight_controller/autopilot_discontinued.md): `make px4_fmu-v2_default` - Discontinued +- [Dropix (FMUv2)](../flight_controller/autopilot_discontinued.md): `make px4_fmu-v2_default` - Discontinued +- [Pixhawk 1 (FMUv2)](../flight_controller/autopilot_discontinued.md): `make px4_fmu-v2_default` - Discontinued :::warning You **must** use a supported version of GCC to build this board (e.g. the `gcc-arm-none-eabi` package from the current Ubuntu LTS, which is the same toolchain used by CI) or remove modules from the build. @@ -263,7 +263,7 @@ make [VENDOR_][MODEL][_VARIANT] [VIEWER_MODEL_DEBUGGER_WORLD] - **VENDOR:** The manufacturer of the board: `px4`, `aerotenna`, `airmind`, `atlflight`, `auav`, `beaglebone`, `intel`, `nxp`, etc. The vendor name for Pixhawk series boards is `px4`. - **MODEL:** The _board model_ "model": `sitl`, `fmu-v2`, `fmu-v3`, `fmu-v4`, `fmu-v5`, `navio2`, etc. -- **VARIANT:** Indicates particular configurations: e.g. `bootloader`, `cyphal`, which contain components that are not present in the `default` configuration. +- **VARIANT:** Indicates particular configurations: e.g. `bootloader`, `cyphal`, `sih`, which add or remove components to/from the `default` configuration. Most commonly this is `default`, and may be omitted. :::tip diff --git a/docs/en/dev_setup/dev_env.md b/docs/en/dev_setup/dev_env.md index 5d4810e00a..e9e249864e 100644 --- a/docs/en/dev_setup/dev_env.md +++ b/docs/en/dev_setup/dev_env.md @@ -1,5 +1,10 @@ # Setting up a Developer Environment (Toolchain) +::: tip +You only need a toolchain if you want to **modify and build** PX4 from source. +If you just want to run PX4 simulation without changing the code, use a pre-built [Docker container or .deb package](../simulation/px4_sitl_prebuilt_packages.md) instead. +::: + The _supported platforms_ for PX4 development are: - [Ubuntu Linux (24.04/22.04)](../dev_setup/dev_env_linux_ubuntu.md) diff --git a/docs/en/dev_setup/dev_env_linux_arch.md b/docs/en/dev_setup/dev_env_linux_arch.md index 7c200ce5b5..655792ef07 100644 --- a/docs/en/dev_setup/dev_env_linux_arch.md +++ b/docs/en/dev_setup/dev_env_linux_arch.md @@ -1,7 +1,7 @@ # Arch Linux Development Environment :::warning -This development environment is [community supported and maintained](../advanced/community_supported_dev_env). +This development environment is [community supported and maintained](../advanced/community_supported_dev_env.md). It may or may not work with current versions of PX4. See [Toolchain Installation](../dev_setup/dev_env.md) for information about the environments and tools supported by the core development team. diff --git a/docs/en/dev_setup/dev_env_mac.md b/docs/en/dev_setup/dev_env_mac.md index 8110a58173..f99229c567 100644 --- a/docs/en/dev_setup/dev_env_mac.md +++ b/docs/en/dev_setup/dev_env_mac.md @@ -8,7 +8,7 @@ This environment can be used to build PX4 for: It works on both Intel and Apple Silicon Macs. -:::tip +::: tip This setup is supported by the PX4 dev team. To build for [other targets](../dev_setup/dev_env.md#supported-targets) you will need to use a [different OS](../dev_setup/dev_env.md#supported-targets) or an [unsupported development environment](../advanced/community_supported_dev_env.md). ::: @@ -38,7 +38,7 @@ To build for [other targets](../dev_setup/dev_env.md#supported-targets) you will 4. **Ensure Python 3 is available.** Some PX4 build scripts require `python3` and `pip3` to be in your `PATH`. The Xcode Command Line Tools include Python 3 by default. - :::tip + ::: tip If you need to install or manage a different Python version, we recommend [pyenv](https://github.com/pyenv/pyenv), which lets you set global and per-directory Python versions. ::: @@ -58,8 +58,20 @@ To build for [other targets](../dev_setup/dev_env.md#supported-targets) you will ./Tools/setup/macos.sh --sim-tools ``` + ::: info + The setup script creates a Python virtual environment at `.venv` in the repo root and installs all Python dependencies into it. This keeps PX4's Python requirements isolated from your system Python and avoids conflicts with Homebrew's externally-managed Python. + + Activate it before building: + + ```sh + source .venv/bin/activate + ``` + + You'll need to re-run this command in each new terminal session. To activate it automatically when you `cd` into the repo, consider a tool like [direnv](https://direnv.net/) or add the activation to your `~/.zshrc`. + ::: + This installs: - - **`px4-dev`** — ARM cross-compiler (`arm-gcc-bin@13`), `cmake`, `ninja`, `ccache`, and other build tools + - **Toolchain packages** from the `osx-cross/arm` and `PX4/px4` Homebrew taps — ARM cross-compiler (`arm-gcc-bin@13`), `cmake`, `ninja`, `ccache`, `fastdds`, `genromfs`, `kconfig-frontends`, and other build tools - **Python packages** from `requirements.txt` - **`px4-sim`** (via `--sim-tools`) — Gazebo Harmonic simulation (`gz-harmonic`) and related tools diff --git a/docs/en/dev_setup/dev_env_windows_cygwin_packager_setup.md b/docs/en/dev_setup/dev_env_windows_cygwin_packager_setup.md index efec82e36e..666e8e6233 100644 --- a/docs/en/dev_setup/dev_env_windows_cygwin_packager_setup.md +++ b/docs/en/dev_setup/dev_env_windows_cygwin_packager_setup.md @@ -32,7 +32,7 @@ Omissions: You can also install the environment using shell scripts in the Github project. 1. Make sure you have [Git for Windows](https://git-scm.com/download/win) installed. -1. Clone the repository https://github.com/PX4/windows-toolchain to the location you want to install the toolchain. Default location and naming is achieved by opening the `Git Bash` and executing: +1. Clone the repository to the location you want to install the toolchain. Default location and naming is achieved by opening the `Git Bash` and executing: ```sh cd /c/ @@ -51,11 +51,11 @@ The result should be the same as using the scripts or MSI installer. The toolchain gets maintained and hence these instructions might not cover every detail of all the future changes. ::: -1. Create the _folders_: **C:\PX4\*\*, **C:\PX4\toolchain\*\* and \*\*C:\PX4\home\*\* -1. Download the _Cygwin installer_ file [setup-x86_64.exe](https://cygwin.com/setup-x86_64.exe) from the [official Cygwin website](https://cygwin.com/install.html) -1. Run the downloaded setup file -1. In the wizard choose to install into the folder: \*\*C:\PX4\toolchain\cygwin64\*\* -1. Select to install the default Cygwin base and the newest available version of the following additional packages: +1. Create the _folders_: **C:\PX4**, **C:\PX4\toolchain** and **C:\PX4\home** +2. Download the _Cygwin installer_ file [setup-x86_64.exe](https://cygwin.com/setup-x86_64.exe) from the [official Cygwin website](https://cygwin.com/install.html) +3. Run the downloaded setup file +4. In the wizard choose to install into the folder: **C:\PX4\toolchain\cygwin64** +5. Select to install the default Cygwin base and the newest available version of the following additional packages: - **Category:Packagename** - Devel:cmake (3.3.2 gives no deprecated warnings, 3.6.2 works but has the warnings) - Devel:gcc-g++ @@ -85,14 +85,14 @@ The toolchain gets maintained and hence these instructions might not cover every That's what [cygwin64/install-cygwin-px4.bat](https://github.com/PX4/PX4-windows-toolchain/blob/master/toolchain/cygwin64/install-cygwin-px4.bat) does. ::: -1. Write up or copy the **batch scripts** [`run-console.bat`](https://github.com/PX4/PX4-windows-toolchain/blob/master/run-console.bat) and [`setup-environment.bat`](https://github.com/PX4/PX4-windows-toolchain/blob/master/toolchain/scripts/setup-environment.bat). +6. Write up or copy the **batch scripts** [`run-console.bat`](https://github.com/PX4/PX4-windows-toolchain/blob/master/run-console.bat) and [`setup-environment.bat`](https://github.com/PX4/PX4-windows-toolchain/blob/master/toolchain/scripts/setup-environment.bat). The reason to start all the development tools through the prepared batch script is they preconfigure the starting program to use the local, portable Cygwin environment inside the toolchain's folder. This is done by always first calling the script [**setup-environment.bat**](https://github.com/PX4/PX4-windows-toolchain/blob/master/toolchain/scripts/setup-environment.bat) and the desired application like the console after that. The script [setup-environment.bat](https://github.com/PX4/PX4-windows-toolchain/blob/master/toolchain/scripts/setup-environment.bat) locally sets environmental variables for the workspace root directory `PX4_DIR`, all binary locations `PATH`, and the home directory of the unix environment `HOME`. -1. Add necessary **python packages** to your setup by opening the Cygwin toolchain console (double clicking **run-console.bat**) and executing +7. Add necessary **python packages** to your setup by opening the Cygwin toolchain console (double clicking **run-console.bat**) and executing ```sh pip2 install toml @@ -104,13 +104,13 @@ The toolchain gets maintained and hence these instructions might not cover every That's what [cygwin64/install-cygwin-python-packages.bat](https://github.com/PX4/PX4-windows-toolchain/blob/master/toolchain/cygwin64/install-cygwin-python-packages.bat) does. ::: -1. Download the [**ARM GCC compiler**](https://developer.arm.com/Tools%20and%20Software/GNU%20Toolchain) as zip archive of the binaries for Windows and unpack the content to the folder `C:\PX4\toolchain\gcc-arm`. +8. Download the [**ARM GCC compiler**](https://developer.arm.com/Tools%20and%20Software/GNU%20Toolchain) as zip archive of the binaries for Windows and unpack the content to the folder `C:\PX4\toolchain\gcc-arm`. ::: info This is what the toolchain does in: [gcc-arm/install-gcc-arm.bat](https://github.com/PX4/PX4-windows-toolchain/blob/master/toolchain/gcc-arm/install-gcc-arm.bat). ::: -1. Install the JDK: +9. Install the JDK: - Download Java 14 from [Oracle](https://www.oracle.com/java/technologies/downloads/) - Because sadly there is no portable archive containing the binaries directly you have to install it. - Find the binaries and move/copy them to **C:\PX4\toolchain\jdk**. @@ -120,31 +120,31 @@ The toolchain gets maintained and hence these instructions might not cover every This is what the toolchain does in: [jdk/install-jdk.bat](https://github.com/PX4/PX4-windows-toolchain/blob/master/toolchain/jdk/install-jdk.bat). ::: -1. Download [**Apache Ant**](https://ant.apache.org/bindownload.cgi) as zip archive of the binaries for Windows and unpack the content to the folder `C:\PX4\toolchain\apache-ant`. +10. Download [**Apache Ant**](https://ant.apache.org/bindownload.cgi) as zip archive of the binaries for Windows and unpack the content to the folder `C:\PX4\toolchain\apache-ant`. - :::tip - Make sure you don't have an additional folder layer from the folder which is inside the downloaded archive. - ::: + :::tip + Make sure you don't have an additional folder layer from the folder which is inside the downloaded archive. + ::: - ::: info - This is what the toolchain does in: [apache-ant/install-apache-ant.bat](https://github.com/PX4/PX4-windows-toolchain/blob/master/toolchain/apache-ant/install-apache-ant.bat). - ::: + ::: info + This is what the toolchain does in: [apache-ant/install-apache-ant.bat](https://github.com/PX4/PX4-windows-toolchain/blob/master/toolchain/apache-ant/install-apache-ant.bat). + ::: -1. Download, build and add _genromfs_ to the path: - - Clone the source code to the folder **C:\PX4\toolchain\genromfs\genromfs-src** with +11. Download, build and add _genromfs_ to the path: + - Clone the source code to the folder **C:\PX4\toolchain\genromfs\genromfs-src** with - ```sh - cd /c/toolchain/genromfs - git clone https://github.com/chexum/genromfs.git genromfs-src - ``` + ```sh + cd /c/toolchain/genromfs + git clone https://github.com/chexum/genromfs.git genromfs-src + ``` - - Compile it with: + - Compile it with: - ```sh - cd genromfs-src - make all - ``` + ```sh + cd genromfs-src + make all + ``` - - Copy the resulting binary **genromfs.exe** one folder level out to: **C:\PX4\toolchain\genromfs** + - Copy the resulting binary **genromfs.exe** one folder level out to: **C:\PX4\toolchain\genromfs** -1. Make sure all the binary folders of all the installed components are correctly listed in the `PATH` variable configured by [**setup-environment.bat**](https://github.com/PX4/PX4-windows-toolchain/blob/master/toolchain/scripts/setup-environment.bat). +12. Make sure all the binary folders of all the installed components are correctly listed in the `PATH` variable configured by [**setup-environment.bat**](https://github.com/PX4/PX4-windows-toolchain/blob/master/toolchain/scripts/setup-environment.bat). diff --git a/docs/en/dev_setup/dev_env_windows_vm.md b/docs/en/dev_setup/dev_env_windows_vm.md index 43704c78d2..13dc7b5b4d 100644 --- a/docs/en/dev_setup/dev_env_windows_vm.md +++ b/docs/en/dev_setup/dev_env_windows_vm.md @@ -13,9 +13,9 @@ After setting up the virtual machine, the installation and setup of PX4 within t While using a VM is a very easy way to set up and test an environment for building firmware, users should be aware: 1. Firmware building will be slower than native building on Linux. -1. The JMAVSim simulation, frame rate be much slower than on native Linux. +2. The JMAVSim simulation, frame rate be much slower than on native Linux. In some cases the vehicle may crash due to issues related to insufficient VM resources. -1. Gazebo and ROS can be installed, but are unusably slow. +3. Gazebo and ROS can be installed, but are unusably slow. :::tip Allocate as many CPU cores and memory resources to the VM as possible. @@ -29,33 +29,34 @@ There is also an incomplete section for VirtualBox at the end (we'd welcome expa VMWare performance is acceptable for basic usage (building Firmware) but not for running ROS or Gazebo Classic. -1. Download [VMWare Player Freeware](https://www.vmware.com/products/workstation-player/workstation-player-evaluation.html) -1. Install it on your Windows system -1. Download the desired version of [Ubuntu Desktop ISO Image](https://ubuntu.com/download/desktop). +1. Download [VMWare Workstation Pro](https://www.vmware.com/products/desktop-hypervisor/workstation-and-fusion) (the free player has been discontinued) +2. Install it on your Windows system +3. Download the desired version of [Ubuntu Desktop ISO Image](https://ubuntu.com/download/desktop). (see [Linux Instructions Page](../dev_setup/dev_env_linux.md) for recommended Ubuntu version). -1. Open _VMWare Player_. -1. Enable 3D acceleration in the VM's settings: **VM > Settings > Hardware > Display > Accelerate 3D graphics** +4. Open _Workstation Pro_. +5. Enable 3D acceleration in the VM's settings: **VM > Settings > Hardware > Display > Accelerate 3D graphics** ::: info This option is required to properly run 3D simulation environments like jMAVSim and Gazebo Classic. We recommend this is done before installing Linux in the virtual environment. ::: -1. Select the option to create a new virtual machine. -1. In the VM creation wizard choose the downloaded Ubuntu ISO image as your installation medium and will automatically detect the operating system you want to use. -1. Also in the wizard, select the resources you want to allocate to your virtual machine while it is running. +6. Select the option to create a new virtual machine. +7. In the VM creation wizard choose the downloaded Ubuntu ISO image as your installation medium and will automatically detect the operating system you want to use. +8. Also in the wizard, select the resources you want to allocate to your virtual machine while it is running. Allocate as much memory and as many CPU cores as you can without rendering your host Windows system unusable. -1. Run your new VM at the end of the wizard and let it install Ubuntu following the setup instructions. +9. Run your new VM at the end of the wizard and let it install Ubuntu following the setup instructions. Remember all settings are only for within your host operating system usage and hence you can disable any screen saver and local workstation security features which do not increase risk of a network attack. -1. Once the new VM is booted up make sure you install _VMWare tools drivers and tools extension_ inside your guest system. - This will enhance performance and usability of your VM usage: - - Significantly enhanced graphics performance - - Proper support for hardware device usage like USB port allocation (important for target upload), proper mouse wheel scrolling, sound support - - Guest display resolution adaption to the window size - - Clipboard sharing to host system - - File sharing to host system +10. Once the new VM is booted up make sure you install _VMWare tools drivers and tools extension_ inside your guest system. -1. Continue with [PX4 environment setup for Linux](../dev_setup/dev_env_linux.md) + This will enhance performance and usability of your VM usage: + - Significantly enhanced graphics performance + - Proper support for hardware device usage like USB port allocation (important for target upload), proper mouse wheel scrolling, sound support + - Guest display resolution adaption to the window size + - Clipboard sharing to host system + - File sharing to host system + +11. Continue with [PX4 environment setup for Linux](../dev_setup/dev_env_linux.md) ## VirtualBox 7 Setup @@ -81,9 +82,9 @@ To allow this, you need to configure USB passthrough settings: Then restart Ubuntu in the virtual machine. -1. Enable serial port(s) in VM: **VirtualBox > Settings > Serial Ports 1/2/3/etc...** -1. Enable USB controller in VM: **VirtualBox > Settings > USB** -1. Add USB filters for the bootloader in VM: **VirtualBox > Settings > USB > Add new USB filter**. +2. Enable serial port(s) in VM: **VirtualBox > Settings > Serial Ports 1/2/3/etc...** +3. Enable USB controller in VM: **VirtualBox > Settings > USB** +4. Add USB filters for the bootloader in VM: **VirtualBox > Settings > USB > Add new USB filter**. - Open the menu and plug in the USB cable connected to your autopilot. Select the `...Bootloader` device when it appears in the UI. @@ -94,7 +95,7 @@ To allow this, you need to configure USB passthrough settings: - Select the `...Autopilot` device when it appears (this happens after the bootloader completes). -1. Select the device in the VM instance's dropdown menu **VirtualBox > Devices > your_device** +5. Select the device in the VM instance's dropdown menu **VirtualBox > Devices > your_device** If successful, your device will show up with `lsusb` and QGroundControl will connect to the device automatically. You should also be able to build and upload firmware using a command like: diff --git a/docs/en/dev_setup/getting_started.md b/docs/en/dev_setup/getting_started.md index ade246eef9..d76f28a52a 100644 --- a/docs/en/dev_setup/getting_started.md +++ b/docs/en/dev_setup/getting_started.md @@ -2,6 +2,7 @@ This section contains topics about getting started with PX4 development: +- [PX4 Simulation QuickStart](../simulation/px4_simulation_quickstart.md) — Try PX4 in simulation without a build environment! - [Initial Setup](../dev_setup/config_initial.md) - [Toolchain Installation](../dev_setup/dev_env.md) - [Building the Code](../dev_setup/building_px4.md) diff --git a/docs/en/dev_setup/qtcreator.md b/docs/en/dev_setup/qtcreator.md index dd18bc946d..2769fc93fa 100644 --- a/docs/en/dev_setup/qtcreator.md +++ b/docs/en/dev_setup/qtcreator.md @@ -8,7 +8,7 @@ Qt Creator has been replaced by [VSCode](../dev_setup/vscode.md) as the official See [Toolchain Installation](../dev_setup/dev_env.md) for information about the environments and tools supported by the core development team. ::: -[Qt Creator](https://www.qt.io/download-open-source) is a popular cross-platform open-source IDE that can be used to compile and debug PX4. +[Qt Creator](https://www.qt.io/development/download-open-source) is a popular cross-platform open-source IDE that can be used to compile and debug PX4. ## Qt Creator Functionality diff --git a/docs/en/dronecan/ark_cannode.md b/docs/en/dronecan/ark_cannode.md index fdb403f717..0c04ae1bcf 100644 --- a/docs/en/dronecan/ark_cannode.md +++ b/docs/en/dronecan/ark_cannode.md @@ -28,7 +28,7 @@ Order this module from: - Pixhawk Standard SPI Connector - 7 Pin JST GH - PWM Connector - - 10 Pin JST JST + - 10 Pin JST - 8 PWM Outputs - Matches Pixhawk 4 PWM Connector Pinout - Pixhawk Standard Debug Connector @@ -77,7 +77,7 @@ DroneCAN configuration in PX4 is explained in more detail in [DroneCAN > Enablin You will need to enable the subscriber appropriate for each of the sensors that are connected to the ARK CANnode. -This is done using the the parameters named like `UAVCAN_SUB_*` in the parameter reference (such as [UAVCAN_SUB_ASPD](../advanced_config/parameter_reference.md#UAVCAN_SUB_ASPD), [UAVCAN_SUB_BARO](../advanced_config/parameter_reference.md#UAVCAN_SUB_BARO) etc.). +This is done using the parameters named like `UAVCAN_SUB_*` in the parameter reference (such as [UAVCAN_SUB_ASPD](../advanced_config/parameter_reference.md#UAVCAN_SUB_ASPD), [UAVCAN_SUB_BARO](../advanced_config/parameter_reference.md#UAVCAN_SUB_BARO) etc.). ## Ark CANNode Configuration diff --git a/docs/en/dronecan/ark_g5_rtk_gps.md b/docs/en/dronecan/ark_g5_rtk_gps.md index 0a7a1d8f4d..97304f5994 100644 --- a/docs/en/dronecan/ark_g5_rtk_gps.md +++ b/docs/en/dronecan/ark_g5_rtk_gps.md @@ -97,7 +97,7 @@ There is also CAN built-in bus termination via [CANNODE_TERM](../advanced_config You need to set necessary [DroneCAN](index.md) parameters and define offsets if the sensor is not centred within the vehicle: - Enable [UAVCAN_SUB_GPS](../advanced_config/parameter_reference.md#UAVCAN_SUB_GPS), [UAVCAN_SUB_MAG](../advanced_config/parameter_reference.md#UAVCAN_SUB_MAG), and [UAVCAN_SUB_BARO](../advanced_config/parameter_reference.md#UAVCAN_SUB_BARO). -- The parameters [EKF2_GPS_POS_X](../advanced_config/parameter_reference.md#EKF2_GPS_POS_X), [EKF2_GPS_POS_Y](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Y) and [EKF2_GPS_POS_Z](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Z) can be set to account for the offset of the ARK G5 RTK GPS from the vehicle's centre of gravity. +- The parameters [SENS_GPS0_OFFX](../advanced_config/parameter_reference.md#SENS_GPS0_OFFX), [SENS_GPS0_OFFY](../advanced_config/parameter_reference.md#SENS_GPS0_OFFY) and [SENS_GPS0_OFFZ](../advanced_config/parameter_reference.md#SENS_GPS0_OFFZ) can be set to account for the offset of the ARK G5 RTK GPS from the vehicle's centre of gravity. ## LED Meanings diff --git a/docs/en/dronecan/ark_g5_rtk_heading_gps.md b/docs/en/dronecan/ark_g5_rtk_heading_gps.md index 80505235ce..e82724a246 100644 --- a/docs/en/dronecan/ark_g5_rtk_heading_gps.md +++ b/docs/en/dronecan/ark_g5_rtk_heading_gps.md @@ -99,11 +99,11 @@ You need to set necessary [DroneCAN](index.md) parameters and define offsets if - Enable GPS yaw fusion by setting bit 3 of [EKF2_GPS_CTRL](../advanced_config/parameter_reference.md#EKF2_GPS_CTRL) to true. - Enable GPS blending to ensure the heading is always published by setting [SENS_GPS_MASK](../advanced_config/parameter_reference.md#SENS_GPS_MASK) to 7 (all three bits checked). - Enable [UAVCAN_SUB_GPS](../advanced_config/parameter_reference.md#UAVCAN_SUB_GPS), [UAVCAN_SUB_MAG](../advanced_config/parameter_reference.md#UAVCAN_SUB_MAG), and [UAVCAN_SUB_BARO](../advanced_config/parameter_reference.md#UAVCAN_SUB_BARO). -- The parameters [EKF2_GPS_POS_X](../advanced_config/parameter_reference.md#EKF2_GPS_POS_X), [EKF2_GPS_POS_Y](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Y) and [EKF2_GPS_POS_Z](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Z) can be set to account for the offset of the ARK G5 RTK HEADING GPS from the vehicle's centre of gravity. +- The parameters [SENS_GPS0_OFFX](../advanced_config/parameter_reference.md#SENS_GPS0_OFFX), [SENS_GPS0_OFFY](../advanced_config/parameter_reference.md#SENS_GPS0_OFFY) and [SENS_GPS0_OFFZ](../advanced_config/parameter_reference.md#SENS_GPS0_OFFZ) can be set to account for the offset of the ARK G5 RTK HEADING GPS from the vehicle's centre of gravity. ### Parameter references -This GPS is using ARK's private driver, the prameters below only exist on the firmware we ship the GPS with. You can set these params either in QGC or using the DroneCAN GUI Tool. +This GPS is using ARK's private driver, the parameters below only exist on the firmware we ship the GPS with. You can set these params either in QGC or using the DroneCAN GUI Tool. #### SEP_OFFS_YAW (float) diff --git a/docs/en/dronecan/ark_gps.md b/docs/en/dronecan/ark_gps.md index 9b91601ca6..7bd487c1cc 100644 --- a/docs/en/dronecan/ark_gps.md +++ b/docs/en/dronecan/ark_gps.md @@ -91,7 +91,7 @@ If the sensor is not centred within the vehicle you will also need to define sen - Enable GPS yaw fusion by setting bit 3 of [EKF2_GPS_CTRL](../advanced_config/parameter_reference.md#EKF2_GPS_CTRL) to true. - Enable [UAVCAN_SUB_GPS](../advanced_config/parameter_reference.md#UAVCAN_SUB_GPS), [UAVCAN_SUB_MAG](../advanced_config/parameter_reference.md#UAVCAN_SUB_MAG), and [UAVCAN_SUB_BARO](../advanced_config/parameter_reference.md#UAVCAN_SUB_BARO). -- The parameters [EKF2_GPS_POS_X](../advanced_config/parameter_reference.md#EKF2_GPS_POS_X), [EKF2_GPS_POS_Y](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Y) and [EKF2_GPS_POS_Z](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Z) can be set to account for the offset of the ARK GPS from the vehicles centre of gravity. +- The parameters [SENS_GPS0_OFFX](../advanced_config/parameter_reference.md#SENS_GPS0_OFFX), [SENS_GPS0_OFFY](../advanced_config/parameter_reference.md#SENS_GPS0_OFFY) and [SENS_GPS0_OFFZ](../advanced_config/parameter_reference.md#SENS_GPS0_OFFZ) can be set to account for the offset of the ARK GPS from the vehicles centre of gravity. ### ARK GPS Configuration diff --git a/docs/en/dronecan/ark_rtk_gps.md b/docs/en/dronecan/ark_rtk_gps.md index e3114685fa..8954430d81 100644 --- a/docs/en/dronecan/ark_rtk_gps.md +++ b/docs/en/dronecan/ark_rtk_gps.md @@ -84,8 +84,9 @@ You need to set necessary [DroneCAN](index.md) parameters and define offsets if - Enable GPS yaw fusion by setting bit 3 of [EKF2_GPS_CTRL](../advanced_config/parameter_reference.md#EKF2_GPS_CTRL) to true. - Enable GPS blending to ensure the heading is always published by setting [SENS_GPS_MASK](../advanced_config/parameter_reference.md#SENS_GPS_MASK) to 7 (all three bits checked). +- If using [Moving Baseline & GPS Heading](#setting-up-moving-baseline-gps-heading), set [SENS_GPS_PRIME](../advanced_config/parameter_reference.md#SENS_GPS_PRIME) to the CAN node ID of the _Moving Base_ module. The moving base is preferred because the rover receiver in a moving baseline configuration can experience degraded navigation rate and increased data latency when corrections are intermittent. - Enable [UAVCAN_SUB_GPS](../advanced_config/parameter_reference.md#UAVCAN_SUB_GPS), [UAVCAN_SUB_MAG](../advanced_config/parameter_reference.md#UAVCAN_SUB_MAG), and [UAVCAN_SUB_BARO](../advanced_config/parameter_reference.md#UAVCAN_SUB_BARO). -- The parameters [EKF2_GPS_POS_X](../advanced_config/parameter_reference.md#EKF2_GPS_POS_X), [EKF2_GPS_POS_Y](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Y) and [EKF2_GPS_POS_Z](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Z) can be set to account for the offset of the ARK RTK GPS from the vehicles centre of gravity. +- The parameters [SENS_GPS0_OFFX](../advanced_config/parameter_reference.md#SENS_GPS0_OFFX), [SENS_GPS0_OFFY](../advanced_config/parameter_reference.md#SENS_GPS0_OFFY) and [SENS_GPS0_OFFZ](../advanced_config/parameter_reference.md#SENS_GPS0_OFFZ) can be set to account for the offset of the ARK RTK GPS from the vehicles centre of gravity. ### ARK RTK GPS Configuration @@ -136,6 +137,7 @@ Setup via CAN: - On the _Moving Base_, set the following: - [GPS_UBX_MODE](../advanced_config/parameter_reference.md#GPS_UBX_MODE) to `4`. - [CANNODE_PUB_MBD](../advanced_config/parameter_reference.md#CANNODE_PUB_MBD) to `1`. +- On the _Flight Controller_, set [SENS_GPS_PRIME](../advanced_config/parameter_reference.md#SENS_GPS_PRIME) to the CAN node ID of the _Moving Base_ (see [PX4 Configuration](#px4-configuration)). Setup via UART: @@ -154,6 +156,7 @@ Setup via UART: - [GPS_YAW_OFFSET](../advanced_config/parameter_reference.md#GPS_YAW_OFFSET) to `0` if your _Rover_ is in front of your _Moving Base_, `90` if _Rover_ is right of _Moving Base_, `180` if _Rover_ is behind _Moving Base_, or `270` if _Rover_ is left of _Moving Base_. - On the _Moving Base_, set the following: - [GPS_UBX_MODE](../advanced_config/parameter_reference.md#GPS_UBX_MODE) to `2`. +- On the _Flight Controller_, set [SENS_GPS_PRIME](../advanced_config/parameter_reference.md#SENS_GPS_PRIME) to the CAN node ID of the _Moving Base_ (see [PX4 Configuration](#px4-configuration)). For more information see [Rover and Moving Base](../dronecan/index.md#rover-and-moving-base) in the DroneCAN guide. diff --git a/docs/en/dronecan/ark_rtk_gps_l1_l2.md b/docs/en/dronecan/ark_rtk_gps_l1_l2.md index 4e2175a147..1ea1fb494d 100644 --- a/docs/en/dronecan/ark_rtk_gps_l1_l2.md +++ b/docs/en/dronecan/ark_rtk_gps_l1_l2.md @@ -85,7 +85,7 @@ You need to set necessary [DroneCAN](index.md) parameters and define offsets if - Enable GPS yaw fusion by setting bit 3 of [EKF2_GPS_CTRL](../advanced_config/parameter_reference.md#EKF2_GPS_CTRL) to true. - Enable GPS blending to ensure the heading is always published by setting [SENS_GPS_MASK](../advanced_config/parameter_reference.md#SENS_GPS_MASK) to 7 (all three bits checked). - Enable [UAVCAN_SUB_GPS](../advanced_config/parameter_reference.md#UAVCAN_SUB_GPS), [UAVCAN_SUB_MAG](../advanced_config/parameter_reference.md#UAVCAN_SUB_MAG), and [UAVCAN_SUB_BARO](../advanced_config/parameter_reference.md#UAVCAN_SUB_BARO). -- The parameters [EKF2_GPS_POS_X](../advanced_config/parameter_reference.md#EKF2_GPS_POS_X), [EKF2_GPS_POS_Y](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Y) and [EKF2_GPS_POS_Z](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Z) can be set to account for the offset of the ARK RTK GPS L1 L5 from the vehicles centre of gravity. +- The parameters [SENS_GPS0_OFFX](../advanced_config/parameter_reference.md#SENS_GPS0_OFFX), [SENS_GPS0_OFFY](../advanced_config/parameter_reference.md#SENS_GPS0_OFFY) and [SENS_GPS0_OFFZ](../advanced_config/parameter_reference.md#SENS_GPS0_OFFZ) can be set to account for the offset of the ARK RTK GPS L1 L5 from the vehicles centre of gravity. ### ARK RTK GPS L1 L5 Configuration diff --git a/docs/en/dronecan/ark_x20_rtk_gps.md b/docs/en/dronecan/ark_x20_rtk_gps.md index 4afc299d5d..5962885103 100644 --- a/docs/en/dronecan/ark_x20_rtk_gps.md +++ b/docs/en/dronecan/ark_x20_rtk_gps.md @@ -88,7 +88,7 @@ You need to set necessary [DroneCAN](index.md) parameters and define offsets if - Enable GPS yaw fusion by setting bit 3 of [EKF2_GPS_CTRL](../advanced_config/parameter_reference.md#EKF2_GPS_CTRL) to true. - Enable GPS blending to ensure the heading is always published by setting [SENS_GPS_MASK](../advanced_config/parameter_reference.md#SENS_GPS_MASK) to 7 (all three bits checked). - Enable [UAVCAN_SUB_GPS](../advanced_config/parameter_reference.md#UAVCAN_SUB_GPS), [UAVCAN_SUB_MAG](../advanced_config/parameter_reference.md#UAVCAN_SUB_MAG), and [UAVCAN_SUB_BARO](../advanced_config/parameter_reference.md#UAVCAN_SUB_BARO). -- The parameters [EKF2_GPS_POS_X](../advanced_config/parameter_reference.md#EKF2_GPS_POS_X), [EKF2_GPS_POS_Y](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Y) and [EKF2_GPS_POS_Z](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Z) can be set to account for the offset of the ARK X20 RTK GPS from the vehicles centre of gravity. +- The parameters [SENS_GPS0_OFFX](../advanced_config/parameter_reference.md#SENS_GPS0_OFFX), [SENS_GPS0_OFFY](../advanced_config/parameter_reference.md#SENS_GPS0_OFFY) and [SENS_GPS0_OFFZ](../advanced_config/parameter_reference.md#SENS_GPS0_OFFZ) can be set to account for the offset of the ARK X20 RTK GPS from the vehicles centre of gravity. ### ARK X20 RTK GPS Configuration diff --git a/docs/en/dronecan/escs.md b/docs/en/dronecan/escs.md index 4b6eb3fafb..da950af29d 100644 --- a/docs/en/dronecan/escs.md +++ b/docs/en/dronecan/escs.md @@ -5,7 +5,7 @@ PX4 supports DroneCAN compliant ESCs. ## Supported ESC :::info -[Supported ESCs](../peripherals/esc_motors#supported-esc) in _ESCs & Motors_ may include additional devices that are not listed below. +[Supported ESCs](../peripherals/esc_motors.md#supported-esc) in _ESCs & Motors_ may include additional devices that are not listed below. ::: The following articles have specific hardware/firmware information: diff --git a/docs/en/dronecan/holybro_h_rtk_zed_f9p_gps.md b/docs/en/dronecan/holybro_h_rtk_zed_f9p_gps.md index de1de36510..db45481cb0 100644 --- a/docs/en/dronecan/holybro_h_rtk_zed_f9p_gps.md +++ b/docs/en/dronecan/holybro_h_rtk_zed_f9p_gps.md @@ -86,7 +86,7 @@ DroneCAN configuration in PX4 is explained in more detail in [DroneCAN > Enablin ### Sensor Position Configuration -- For the the single Rover the module should be mounted with the included mast. +- For the single Rover the module should be mounted with the included mast. - For the Dual ZED-F9P setup (moving baseline), the DroneCAN modules should be placed at least 30cm apart on the airframe and elevated on a mast also. See the following [mast](https://holybro.com/products/30-antenna-mount?_pos=20&_sid=67b49d76b&_ss=r). - F9P module arrow(s) should be pointing forward with respect to the autopilot orientation. diff --git a/docs/en/dronecan/holybro_m8n_gps.md b/docs/en/dronecan/holybro_m8n_gps.md index 68a859c72f..59eb7f5c0c 100644 --- a/docs/en/dronecan/holybro_m8n_gps.md +++ b/docs/en/dronecan/holybro_m8n_gps.md @@ -94,4 +94,4 @@ If the sensor is not centred within the vehicle you will also need to define sen - Enable GPS yaw fusion by setting bit 3 of [EKF2_GPS_CTRL](../advanced_config/parameter_reference.md#EKF2_GPS_CTRL) to true. - Enable [UAVCAN_SUB_GPS](../advanced_config/parameter_reference.md#UAVCAN_SUB_GPS), [UAVCAN_SUB_MAG](../advanced_config/parameter_reference.md#UAVCAN_SUB_MAG), and [UAVCAN_SUB_BARO](../advanced_config/parameter_reference.md#UAVCAN_SUB_BARO). - Set [CANNODE_TERM](../advanced_config/parameter_reference.md#CANNODE_TERM) to `1` if this is that last node on the CAN bus. -- The parameters [EKF2_GPS_POS_X](../advanced_config/parameter_reference.md#EKF2_GPS_POS_X), [EKF2_GPS_POS_Y](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Y) and [EKF2_GPS_POS_Z](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Z) can be set to account for the offset of the ARK GPS from the vehicles centre of gravity. +- The parameters [SENS_GPS0_OFFX](../advanced_config/parameter_reference.md#SENS_GPS0_OFFX), [SENS_GPS0_OFFY](../advanced_config/parameter_reference.md#SENS_GPS0_OFFY) and [SENS_GPS0_OFFZ](../advanced_config/parameter_reference.md#SENS_GPS0_OFFZ) can be set to account for the offset of the ARK GPS from the vehicles centre of gravity. diff --git a/docs/en/dronecan/index.md b/docs/en/dronecan/index.md index 00ba948cbc..5198db327e 100644 --- a/docs/en/dronecan/index.md +++ b/docs/en/dronecan/index.md @@ -152,7 +152,7 @@ DroneCAN peripherals connected to PX4 can also be [configured using parameters v By convention, parameters named with the prefix [CANNODE\_](../advanced_config/parameter_reference.md#CANNODE_BITRATE) have prefined meaning, and may be documented in the parameter reference. `CANNODE_` parameters prefixed with `CANNODE_PUB_` and `CANNODE_SUB_` enable the peripheral to publish or subscribe the associated DroneCAN message. These allow DroneCAN peripherals to be configured to only subscribe and publish messages that they actually need (in the same way that PX4 uses the corresponding `UAVCAN_PUB_`/`UAVCAN_SUB_` parameters). -Note that a peripheral might might not use `CANNODE_` parameters, in which case it may have to publish/subscribe to particular messages whether or not they are needed. +Note that a peripheral might not use `CANNODE_` parameters, in which case it may have to publish/subscribe to particular messages whether or not they are needed. The following sections provide additional detail on the PX4 and DroneCAN peripheral parameters used to enable particular features. @@ -188,7 +188,7 @@ GPS CANNODE parameter ([set using QGC](#qgc-cannode-parameter-configuration)): Other PX4 Parameters: -- If the GPS is not positioned at the vehicle centre of gravity you can account for the offset using [EKF2_GPS_POS_X](../advanced_config/parameter_reference.md#EKF2_GPS_POS_X), [EKF2_GPS_POS_Y](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Y) and [EKF2_GPS_POS_Z](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Z). +- If the GPS is not positioned at the vehicle centre of gravity you can account for the offset using [SENS_GPS0_OFFX](../advanced_config/parameter_reference.md#SENS_GPS0_OFFX), [SENS_GPS0_OFFY](../advanced_config/parameter_reference.md#SENS_GPS0_OFFY) and [SENS_GPS0_OFFZ](../advanced_config/parameter_reference.md#SENS_GPS0_OFFZ). - If the GPS module provides yaw information, you can enable GPS yaw fusion by setting bit 3 of [EKF2_GPS_CTRL](../advanced_config/parameter_reference.md#EKF2_GPS_CTRL) to true. #### RTK GPS @@ -283,16 +283,11 @@ Note that DroneCAN ESCs should be on their own dedicated CAN interface(s) becaus ### Lights -PX4 can control LEDs via DroneCAN [LightsCommand](https://dronecan.github.io/Specification/7._List_of_standard_data_types/#lightscommand) messages. +PX4 can control external LEDs on a connected DroneCAN peripheral using the standard DroneCAN [LightsCommand](https://dronecan.github.io/Specification/7._List_of_standard_data_types/#lightscommand) message. +Up to 2 lights acan be controlled. +Each light can independently show [system status colours](../getting_started/led_meanings.md#ui-led), a fixed colour (commonly used for indicating aircraft orientation), or switch between both depending on arm state. -Configuration: - -1. Set [UAVCAN_LGT_NUM](../advanced_config/parameter_reference.md#UAVCAN_LGT_NUM) to the number of lights (0 disables). You might need to reopen the ground station to have parameters for new instances available. -2. For each light slot (0 to NUM-1), set: - - `UAVCAN_LGT_IDx`: The `light_id` matching your peripheral. - - `UAVCAN_LGT_FNx`: `Status` for system status colours, or `Anti-collision` for white beacon. -3. For anti-collision lights, [UAVCAN_LGT_ANTCL](../advanced_config/parameter_reference.md#UAVCAN_LGT_ANTCL) controls when they illuminate (off, armed, prearmed, always on). -4. Reboot for any changes to take effect. +See [DroneCAN Lights](lights.md) for full configuration details. ## QGC CANNODE Parameter Configuration diff --git a/docs/en/dronecan/lights.md b/docs/en/dronecan/lights.md new file mode 100644 index 0000000000..579fe1f5a6 --- /dev/null +++ b/docs/en/dronecan/lights.md @@ -0,0 +1,61 @@ +# DroneCAN Lights + +PX4 can control external LEDs on a connected DroneCAN peripheral using the standard DroneCAN [LightsCommand](https://dronecan.github.io/Specification/7._List_of_standard_data_types/#lightscommand) message. + +Up to 2 lights are supported. +These can show [system status colours](../getting_started/led_meanings.md#ui-led), a fixed colour (used for indicating aircraft orientation), or switch between both depending on arm state. + +## Supported Devices + +Any DroneCAN peripheral implementing the standard `LightsCommand` message type should work. + +The following have been tested: + +- **Vertiq ESC LED add-ons**: Each ESC exposes two light IDs — one RGB (for status) and one white. + The `light_id` for each is calculated as `esc_index × 3 + BASE_ID`, where `BASE_ID` is 1 for RGB and 2 for white. + See [Vertiq](../peripherals/vertiq.md) for other ESC setup details. + +## PX4 Configuration + +1. Set up DroneCAN as described in [DroneCAN](index.md) (`UAVCAN_ENABLE` ≥ 2). +2. Set [UAVCAN_LGT_NUM](../advanced_config/parameter_reference.md#UAVCAN_LGT_NUM) to the number of lights (1 or 2). + Then reboot and reopen the ground station so that parameters for the new instances become visible. +3. Set the `light_id` and [light functions](#light_functions) of each light: + - [UAVCAN_LGT_ID0](../advanced_config/parameter_reference.md#UAVCAN_LGT_ID0) / [UAVCAN_LGT_ID1](../advanced_config/parameter_reference.md#UAVCAN_LGT_ID1): Set to a `light_id` value (as defined by the specific product). + - [UAVCAN_LGT_FN0](../advanced_config/parameter_reference.md#UAVCAN_LGT_FN0) / [UAVCAN_LGT_FN1](../advanced_config/parameter_reference.md#UAVCAN_LGT_FN1): Choose the desired [light function](#light_functions). +4. Set [UAVCAN_LGT_MODE](#UAVCAN_LGT_MODE) to control when fixed "orientation" colours activate. +5. Reboot for changes to take effect. + +### Light Functions {#light_functions} + +The functions of enabled lights are configured using [UAVCAN_LGT_FN0](../advanced_config/parameter_reference.md#UAVCAN_LGT_FN0) and [UAVCAN_LGT_FN1](../advanced_config/parameter_reference.md#UAVCAN_LGT_FN1), respectively. +Each function is represented by a value that defines two behaviours: one when the activation mode is **inactive** and one when it is **active**. + +| Value | Name | When mode inactive | When mode active | +| ----- | ------------- | -------------------- | -------------------- | +| 0 | Status/Status | System status colour | System status colour | +| 1 | Off/White | Off | White | +| 2 | Off/Red | Off | Red | +| 3 | Off/Green | Off | Green | +| 4 | Status/White | System status colour | White | +| 5 | Status/Red | System status colour | Red | +| 6 | Status/Green | System status colour | Green | +| 7 | Status/Off | System status colour | Off | + +Notes: + +- The [system status colours](../getting_started/led_meanings.md#ui-led) is the same LED pattern used by the flight controller's onboard status LED (e.g. red when disarmed, green when armed and ready). +- A fixed colour, commonly used to indicate aircraft orientation. For example it is a common convention to have a red light on the port side, green on starboard, or white to the rear. + These colours do not change with flight controller state. +- For _hybrid_ functions, such as `Status/Red`, the light shows the Status colour while the activation mode is inactive, then switches to the "fixed" light colour once the mode becomes active. + +### Activation Mode (`UAVCAN_LGT_MODE`) {#UAVCAN_LGT_MODE} + +The activation mode parameter ([UAVCAN_LGT_MODE](#UAVCAN_LGT_MODE)) controls when each light switches from its _inactive_ to its _active_ behaviour (configured with the [Light function](#light_functions)): + +| Value | Meaning | +| ----- | -------------------------------------------------------- | +| 0 | Always inactive (lights always show the inactive column) | +| 1 | Active when armed (default) | +| 2 | Active when prearmed or armed | +| 3 | Always active (lights always show the active column) | diff --git a/docs/en/esc/ark_4in1_esc.md b/docs/en/esc/ark_4in1_esc.md index 40fb8d607f..55445b6a94 100644 --- a/docs/en/esc/ark_4in1_esc.md +++ b/docs/en/esc/ark_4in1_esc.md @@ -51,6 +51,18 @@ Other - Open source AM32 firmware - [DIU Blue Framework Listed](https://www.diu.mil/blue-uas/framework) +## PX4 Configuration + +The ARK 4IN1 ESC supports DShot 300/600, Bidirectional DShot, and PWM input protocols. + +- **Bidirectional DShot**: Select BDShot300 or BDShot600 in the [Actuator Configuration](../config/actuators.md) to enable eRPM telemetry. +- **[Extended DShot Telemetry (EDT)](https://github.com/bird-sanctuary/extended-dshot-telemetry)**: AM32 firmware supports EDT, which provides temperature, voltage, and current through the BDShot signal. Enable with `DSHOT_BIDIR_EDT=1`. +- **AM32 EEPROM Settings**: Set `DSHOT_ESC_TYPE=1` to enable reading and writing ESC firmware settings via a ground station. + +See [DShot ESCs](../peripherals/dshot.md) for full setup details. + ## See Also - [ARK 4IN1 ESC CONS](https://docs.arkelectron.com/electronic-speed-controller/ark-4in1-esc) (ARK Docs) +- [DShot and Bidirectional DShot](https://brushlesswhoop.com/dshot-and-bidirectional-dshot/) (brushlesswhoop.com - General DShot reference) +- [Extended DShot Telemetry (EDT) Specification](https://github.com/bird-sanctuary/extended-dshot-telemetry) (bird-sanctuary) diff --git a/docs/en/flight_controller/accton-godwit_ga1.md b/docs/en/flight_controller/accton-godwit_ga1.md index e3671c20c6..3bc3c921a5 100644 --- a/docs/en/flight_controller/accton-godwit_ga1.md +++ b/docs/en/flight_controller/accton-godwit_ga1.md @@ -1,18 +1,18 @@ # Accton Godwit G-A1 -:::warning +::: warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://cubepilot.org/#/home) for hardware support or compliance issues. ::: -The G-A1 is a state-of-the-art flight controller developed derived from the [Pixhawk Autopilot v6X Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-012%20Pixhawk%20Autopilot%20v6X%20Standard.pdf). +The G-A1 is a state-of-the-art flight controller derived from the [Pixhawk Autopilot v6X Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-012%20Pixhawk%20Autopilot%20v6X%20Standard.pdf). It includes an STM32H753 double-precision floating-point FMU processor and an STM32F103 IO coprocessor, multiple IMUs with 6-axis inertial sensors, two pressure/temperature sensors, and a geomagnetic sensor. It also has independent buses and power supplies, and is designed for safety and rich expansion capabilities. With an integrated 10/100M Ethernet Physical Layer (PHY), the G-A1 can also communicate with a mission computer (airborne computer), high-end surveying and mapping cameras, and other UxV-mounted equipment for high-speed communications, meeting the needs of advanced UxV systems. -:::tip +::: tip Visit [Accton-IoT Godwit](https://www.accton-iot.com/godwit/) for more information. ::: @@ -65,7 +65,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo - 92.2 (L) x 51.2 (W) x 28.3 (H) mm - 77.6g (carrier board with IMU) -## Where to Buy +## Where to Buy {#store} - [Accton-IoT Godwit](https://www.accton-iot.com/godwit/) - [sales@accton-iot.com](sales@accton-iot.com) @@ -115,7 +115,7 @@ PPM receivers should be connected to the PPM interface. And other RC systems can ## GPS/Compass -The Godwit G-A1 has a built-in compass +The Godwit G-A1 has a built-in compass. Due to potential interference, the autopilot is usually used with an external I2C compass as part of a GPS/Compass combination. ![G-A1 GPS](../../assets/flight_controller/accton-godwit/ga1/gps.png "G-A1 GPS") diff --git a/docs/en/flight_controller/airlink.md b/docs/en/flight_controller/airlink.md index 30218fc14c..b59abb04c4 100644 --- a/docs/en/flight_controller/airlink.md +++ b/docs/en/flight_controller/airlink.md @@ -1,6 +1,6 @@ # Sky-Drones AIRLink -:::warning +::: warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://sky-drones.com/) for hardware support or compliance issues. ::: @@ -26,7 +26,7 @@ AIRLink has two computers and integrated LTE Module: ## Specifications - **Sensors** - - 3x Accelerometers, 3x Gyroscopes, 3x Magnetometers, 3x Pressure sensorss + - 3x Accelerometers, 3x Gyroscopes, 3x Magnetometers, 3x Pressure sensors - GNSS, Rangefinders, Lidars, Optical Flow, Cameras - 3x-redundant IMU - Vibration dampening @@ -59,7 +59,7 @@ AIRLink has two computers and integrated LTE Module: - Ethernet 10/100/1000 Native Gigabit - WiFi 802.11a/b/g/n/ac, Bluetooth - USB 3.0 Type C - - 2x Video: 4-Lane MIPI CSI (FPV Camera) and 4-Lane MIPI CSI with HMDI Input (Payload Camera) + - 2x Video: 4-Lane MIPI CSI (FPV Camera) and 4-Lane MIPI CSI with HDMI Input (Payload Camera) - **LTE/5G Connectivity Module** - Up to 600 Mbps bandwidth @@ -71,7 +71,7 @@ AIRLink has two computers and integrated LTE Module: - Antenna, 4x4 MIMO - Bands: Worldwide -## Where to Buy +## Where to Buy {#store} Purchase from the original Sky-Drones Store (worldwide shipping with 1-2 days order processing time): @@ -92,7 +92,7 @@ The standard set contains: - 1x FPV camera with CSI cable - 1x WiFi antenna with MMCX connector - 2x/4x LTE/5G antenna with MMCX connector -- 1x HDMI to mini HDMI cable1x set of cables (7 cables for all connectors) +- 1x HDMI to mini HDMI cable, 1x set of cables (7 cables for all connectors) [AIRLink Telemetry](https://sky-drones.com/sets/airlink-telemetry-set.html) based on the Microhard LAN/IP-based RF micromodule is available as an add-on and is fully compatible with AIRLink. @@ -327,7 +327,7 @@ For PPM receivers please use RC Connector PPM pin located on the left side of th ## Outputs -AIRLink has 16 PWM ouputs. Main outputs 1-8 and connected to IO MCU. AUX outputs 1-8 are connected to FMU. +AIRLink has 16 PWM outputs. Main outputs 1-8 and connected to IO MCU. AUX outputs 1-8 are connected to FMU. | Output | Timer | Channel | | ------ | -------- | --------- | @@ -344,14 +344,14 @@ AIRLink has 16 PWM ouputs. Main outputs 1-8 and connected to IO MCU. AUX outputs ## Building Firmware -:::tip +::: tip Most users will not need to build this firmware! 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: -``` +```sh make sky-drones_smartap-airlink ``` diff --git a/docs/en/flight_controller/ark_fpv.md b/docs/en/flight_controller/ark_fpv.md index e975b46b55..6dd1a9da0a 100644 --- a/docs/en/flight_controller/ark_fpv.md +++ b/docs/en/flight_controller/ark_fpv.md @@ -1,6 +1,6 @@ # ARK FPV Flight Controller -:::warning +::: warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://arkelectron.com/contact-us/) for hardware support or compliance issues. ::: @@ -9,11 +9,11 @@ The USA-built ARK FPV flight controller is based on the [ARKV6X](https://arkelec ![ARK FPV Main Photo](../../assets/flight_controller/arkfpv/ark_fpv.jpg) -:::info +::: info This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). ::: -## Where To Buy +## Where To Buy {#store} Order from [Ark Electronics](https://arkelectron.com/product/arkv6x/) (US) @@ -76,7 +76,7 @@ See the documentation [Ark Electronics GitBook](https://arkelectron.gitbook.io/a ## Additional Information -- Weight: 7.5 g g with MicroSD card +- Weight: 7.5 g with MicroSD card - Dimensions: 3.6 x 3.6 x 0.8 cm - USA Built - NDAA compliant - Heater: 1W for warming sensors in extreme cold diff --git a/docs/en/flight_controller/ark_pab.md b/docs/en/flight_controller/ark_pab.md index 235dbb0138..a3dc4b8544 100644 --- a/docs/en/flight_controller/ark_pab.md +++ b/docs/en/flight_controller/ark_pab.md @@ -1,6 +1,6 @@ # ARK Pixhawk Autopilot Bus Carrier -:::warning +::: warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://arkelectron.com/contact-us/) for hardware support or compliance issues. ::: @@ -11,7 +11,7 @@ The PAB form factor enables the ARK PAB Carrier to be used with any [PAB-compati ![ARKPAB Main Photo](../../assets/flight_controller/arkpab/ark_pab_main.jpg) -### Where To Buy +### Where To Buy {#store} Order From [Ark Electronics](https://arkelectron.com/product/ark-pixhawk-autopilot-bus-carrier/) (US) @@ -39,7 +39,7 @@ Order From [Ark Electronics](https://arkelectron.com/product/ark-pixhawk-autopil - 6 Pin JST-GH - Dual CAN Ports - 4 Pin JST-GH -- Triple Telemetry Ports with Flow - Control +- Triple Telemetry Ports with Flow Control - 6 Pin JST-GH - Eight PWM Outputs - 10 Pin JST-GH diff --git a/docs/en/flight_controller/ark_pi6x.md b/docs/en/flight_controller/ark_pi6x.md index c32abcd953..b37a8b451a 100644 --- a/docs/en/flight_controller/ark_pi6x.md +++ b/docs/en/flight_controller/ark_pi6x.md @@ -1,10 +1,19 @@ # ARK Pi6X Flow +::: warning +PX4 does not manufacture this (or any) autopilot. +Contact the [manufacturer](https://arkelectron.com/contact-us/) for hardware support or compliance issues. +::: + The [ARK Pi6X Flow](https://arkelectron.gitbook.io/ark-documentation/flight-controllers/ark-pi6x-flow) integrates a Raspberry Pi Compute Module 4 (CM4) Carrier, [ARKV6X Flight Controller](../flight_controller/ark_v6x.md), [ARK Flow sensors](../dronecan/ark_flow.md) , [ARK PAB Power Module](../power_module/ark_pab_power_module.md), and a 4-in-1 ESC, all mounted onto one compact board. ![ARK Pi6X Flow Flight Controller](../../assets/flight_controller/ark_pi6x_flow/ark_pi6xflow.jpg) -## Where to Buy +::: info +This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). +::: + +## Where to Buy {#store} Order this module from: diff --git a/docs/en/flight_controller/ark_v6x.md b/docs/en/flight_controller/ark_v6x.md index a4272fd806..3d6af0bf2d 100644 --- a/docs/en/flight_controller/ark_v6x.md +++ b/docs/en/flight_controller/ark_v6x.md @@ -1,11 +1,11 @@ # ARK Electronics ARKV6X -:::warning +::: warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://arkelectron.com/contact-us/) for hardware support or compliance issues. ::: -The USA-built [ARKV6X](<(https://arkelectron.gitbook.io/ark-documentation/flight-controllers/arkv6x)>) flight controller is based on the [FMUV6X and Pixhawk Autopilot Bus open source standards](https://github.com/pixhawk/Pixhawk-Standards). +The USA-built [ARKV6X](https://arkelectron.gitbook.io/ark-documentation/flight-controllers/arkv6x) flight controller is based on the [FMUV6X and Pixhawk Autopilot Bus open source standards](https://github.com/pixhawk/Pixhawk-Standards). With triple synced IMUs, data averaging, voting, and filtering is possible. The Pixhawk Autopilot Bus (PAB) form factor enables the ARKV6X to be used on any [PAB-compatible carrier board](../flight_controller/pixhawk_autopilot_bus.md), such as the [ARK Pixhawk Autopilot Bus Carrier](../flight_controller/ark_pab.md). @@ -16,7 +16,7 @@ The Pixhawk Autopilot Bus (PAB) form factor enables the ARKV6X to be used on any This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). ::: -## Where To Buy +## Where To Buy {#store} Order From [Ark Electronics](https://arkelectron.com/product/arkv6x/) (US) diff --git a/docs/en/flight_controller/arkpab.md b/docs/en/flight_controller/arkpab.md index dee03c10b2..e99ee9b8b6 100644 --- a/docs/en/flight_controller/arkpab.md +++ b/docs/en/flight_controller/arkpab.md @@ -1 +1,2 @@ + diff --git a/docs/en/flight_controller/arkv6x.md b/docs/en/flight_controller/arkv6x.md index f117e5345f..f3812b11af 100644 --- a/docs/en/flight_controller/arkv6x.md +++ b/docs/en/flight_controller/arkv6x.md @@ -1 +1,2 @@ + diff --git a/docs/en/flight_controller/auav_x2.md b/docs/en/flight_controller/auav_x2.md index 5908263a8c..89f35a4ec1 100644 --- a/docs/en/flight_controller/auav_x2.md +++ b/docs/en/flight_controller/auav_x2.md @@ -1,92 +1,8 @@ + + + diff --git a/docs/en/flight_controller/autopilot_discontinued.md b/docs/en/flight_controller/autopilot_discontinued.md index 2ae824c9a2..32ae09072a 100644 --- a/docs/en/flight_controller/autopilot_discontinued.md +++ b/docs/en/flight_controller/autopilot_discontinued.md @@ -6,26 +6,29 @@ They are listed because you may be using them in an existing drone, and because ## Autopilots -- [Drotek DroPix](../flight_controller/dropix.md) (FMUv2) -- [Omnibus F4 SD](../flight_controller/omnibus_f4_sd.md) -- [CUAV X7](../flight_controller/cuav_x7.md) -- [CUAV v5](../flight_controller/cuav_v5.md) (Pixhawk FMUv5) -- [CUAV Pixhack v3](../flight_controller/pixhack_v3.md) (FMUv3) -- [Aerotenna OcPoC-Zynq Mini](../flight_controller/ocpoc_zynq.md) -- [Holybro Pixhawk 4 Mini](../flight_controller/pixhawk4_mini.md) (FMUv5) -- [Holybro Kakute F7](../flight_controller/kakutef7.md) -- [Holybro Pixhawk Mini](../flight_controller/pixhawk_mini.md) (FMUv3) -- [Holybro Pixfalcon](../flight_controller/pixfalcon.md) (Pixhawk FMUv2) -- [Holybro Pix32](../flight_controller/holybro_pix32.md) (FMUv2) -- [ModalAI VOXL Flight](../flight_controller/modalai_voxl_flight.md) -- [ModalAI Flight Core v1](../flight_controller/modalai_fc_v1.md) -- [mRobotics-X2.1](../flight_controller/mro_x2.1.md) (FMUv2) -- [mRo AUAV-X2](../flight_controller/auav_x2.md) (Pixhawk FMUv2) -- [NXP FMUK66](../flight_controller/nxp_rddrone_fmuk66.md) (Discontinued) -- [3DR Pixhawk 1](../flight_controller/pixhawk.md) (Pixhawk FMUv2) +- _Drotek DroPix_ (FMUv2) — last published in [PX4 v1.13](https://docs.px4.io/v1.13/en/flight_controller/dropix) +- _Drotek Pixhawk 3 Pro_ (FMUv4pro) — last published in [PX4 v1.15](https://docs.px4.io/v1.15/en/flight_controller/pixhawk3_pro) +- _Omnibus F4 SD_ — last published in [PX4 v1.15](https://docs.px4.io/v1.15/en/flight_controller/omnibus_f4_sd) +- _CUAV X7_ — last published in [PX4 v1.16](https://docs.px4.io/v1.16/en/flight_controller/cuav_x7) +- _CUAV v5_ (Pixhawk FMUv5) — last published in [PX4 v1.16](https://docs.px4.io/v1.16/en/flight_controller/cuav_v5) +- _CUAV Pixhack v3_ (FMUv3) — last published in [PX4 v1.15](https://docs.px4.io/v1.15/en/flight_controller/pixhack_v3) +- _Aerotenna OcPoC-Zynq Mini_ — last published in [PX4v1.11](https://docs.px4.io/v1.11/en/flight_controller/ocpoc_zynq#aerotenna-ocpoc-zynq-mini-flight-controller) +- _Holybro Pixhawk 4 Mini_ (FMUv5) -— last published in [PX4 v1.16](https://docs.px4.io/v1.16/en/flight_controller/pixhawk4_mini) +- _Holybro Kakute F7_ — Marked as discontinued in PX4 v1.15. + Last published in [PX4 v1.17](https://docs.px4.io/v1.17/en/flight_controller/kakutef7). +- _Holybro Pixhawk Mini_ (FMUv3) — last published in [PX4 v1.16](https://docs.px4.io/v1.16/en/flight_controller/pixhawk_mini) +- _Holybro Pixfalcon_ (Pixhawk FMUv2) — last published in [PX4 v1.16](https://docs.px4.io/v1.16/en/flight_controller/pixfalcon) +- _Holybro Pix32_ (FMUv2) — last published in [PX4 v1.16](https://docs.px4.io/v1.16/en/flight_controller/holybro_pix32) +- _ModalAI VOXL Flight_ — last published in [PX4 v1.16](https://docs.px4.io/v1.16/en/flight_controller/modalai_voxl_flight) +- _ModalAI Flight Core v1_ — last published in [PX4 v1.11](https://docs.px4.io/v1.11/en/flight_controller/modalai_fc_v1) +- _mRobotics-X2.1_ (FMUv2) — last published in [PX4 v1.16](https://docs.px4.io/v1.16/en/flight_controller/mro_x2.1) +- _mRo AUAV-X2_ (Pixhawk FMUv2) — last published in [PX4 v1.15](https://docs.px4.io/v1.15/en/flight_controller/auav_x2) +- _NXP RDDRONE-FMUK66 FMU_ — last published in [PX4 v1.15 docs](https://docs.px4.io/v1.15/en/flight_controller/nxp_rddrone_fmuk66) +- _3DR Pixhawk 1_ (Pixhawk FMUv2) — last published in [PX4 v1.15](https://docs.px4.io/v1.15/en/flight_controller/pixhawk) ## Complete Vehicles -- [BetaFPV Beta75X 2S Brushless Whoop](https://docs.px4.io/v1.14/en/complete_vehicles/betafpv_beta75x.html#betafpv-beta75x-2s-brushless-whoop) (circa PX4 v1.14) -- [Intel® Aero RTF Drone](https://docs.px4.io/v1.12/en/complete_vehicles/intel_aero.html) (circa PX4 v1.12) -- [Qualcomm Snapdragon Flight](https://docs.px4.io/v1.11/en/flight_controller/snapdragon_flight.html) (circa PX4 v1.11) +- _Bitcraze Crazyflie 2.0_ — last published in [PX4 v1.15](https://docs.px4.io/v1.15/en/complete_vehicles_mc/crazyflie2) +- _BetaFPV Beta75X 2S Brushless Whoop_ — last published in [PX4 v1.14](https://docs.px4.io/v1.14/en/complete_vehicles/betafpv_beta75x#betafpv-beta75x-2s-brushless-whoop) +- _Intel® Aero RTF Drone_ — last published in [PX4 v1.12](https://docs.px4.io/v1.12/en/complete_vehicles/intel_aero) +- _Qualcomm Snapdragon Flight_ — last published in [PX4 v1.11](https://docs.px4.io/v1.11/en/flight_controller/snapdragon_flight) diff --git a/docs/en/flight_controller/autopilot_experimental.md b/docs/en/flight_controller/autopilot_experimental.md index 9c27a83656..d720e2e58d 100644 --- a/docs/en/flight_controller/autopilot_experimental.md +++ b/docs/en/flight_controller/autopilot_experimental.md @@ -1,6 +1,6 @@ # Community Supported & Experimental Autopilots -:::tip +::: tip For more information about PX4 project autopilot board support levels see: [px4.io/autopilots/](https://px4.io/autopilots/). ::: diff --git a/docs/en/flight_controller/autopilot_manufacturer_supported.md b/docs/en/flight_controller/autopilot_manufacturer_supported.md index 9cdb3492e4..f3fcfe819d 100644 --- a/docs/en/flight_controller/autopilot_manufacturer_supported.md +++ b/docs/en/flight_controller/autopilot_manufacturer_supported.md @@ -2,7 +2,7 @@ Manufacturer-supported autopilots are maintained and supported by a board manufacturer (manufacturers commit to delivering compatibility with the current stable PX4 release within 4 months of the official release announcement). -:::tip +::: tip For more information about PX4 project autopilot board support levels see: [px4.io/autopilots/](https://px4.io/autopilots/). ::: @@ -18,10 +18,12 @@ The boards in this category are: - [ARK Electronics ARKV6X](../flight_controller/ark_v6x.md) (and [ARK Electronics Pixhawk Autopilot Bus Carrier](../flight_controller/ark_pab.md)) - [ARK FPV Flight Controller](../flight_controller/ark_fpv.md) - [ARK Pi6X Flow Flight Controller](../flight_controller/ark_pi6x.md) -- [CUAV Nora](../flight_controller/cuav_nora.md)(CUAV X7 variant) +- [CORVON 743v1](../flight_controller/corvon_743v1.md) +- [CUAV Nora](../flight_controller/cuav_nora.md) (CUAV X7 variant) - [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) - [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) diff --git a/docs/en/flight_controller/autopilot_pixhawk_standard.md b/docs/en/flight_controller/autopilot_pixhawk_standard.md index 34e29d5660..5377b7f4fa 100644 --- a/docs/en/flight_controller/autopilot_pixhawk_standard.md +++ b/docs/en/flight_controller/autopilot_pixhawk_standard.md @@ -4,7 +4,7 @@ These boards are maintained, updated, tested and otherwise supported by the PX4 project maintainers and Dronecode test team. -:::tip +::: tip For more information about PX4 project autopilot board support levels see: [px4.io/autopilots/](https://px4.io/autopilots/). ::: diff --git a/docs/en/flight_controller/beaglebone_blue.md b/docs/en/flight_controller/beaglebone_blue.md index b716e9ebb5..d9ae488667 100644 --- a/docs/en/flight_controller/beaglebone_blue.md +++ b/docs/en/flight_controller/beaglebone_blue.md @@ -2,12 +2,12 @@ -:::warning +::: warning PX4 does not manufacture this (or any) autopilot. -Contact the [manufacturer](https://beagleboard.org/blue) for hardware support or compliance issues. +Contact the [manufacturer](https://www.beagleboard.org/boards/beaglebone-blue) for hardware support or compliance issues. ::: -[BeagleBone Blue](https://beagleboard.org/blue) is an all-in-one Linux-based computer. +[BeagleBone Blue](https://www.beagleboard.org/boards/beaglebone-blue) is an all-in-one Linux-based computer. Although it is optimized for robotics, this compact and inexpensive board has all necessary sensors and peripherals needed by a flight controller. This topic shows how to set up the board to run PX4 with [librobotcontrol](https://github.com/beagleboard/librobotcontrol) robotics package. @@ -17,13 +17,13 @@ This topic shows how to set up the board to run PX4 with [librobotcontrol](https _BeagleBone Blue_ images can be found here: -- [Latest stable OS image](https://beagleboard.org/latest-images). +- [Latest stable OS image](https://www.beagleboard.org/distros). - [Test OS images](https://rcn-ee.net/rootfs/bb.org/testing/) (updated frequently). Information about flashing OS images can be found on [this page](https://github.com/beagleboard/beaglebone-blue/wiki/Flashing-firmware). Other useful information can be found in the [FAQ](). -:::tip +::: tip Optionally you can update to a realtime kernel, and if you do, re-check if _librobotcontrol_ works properly with the realtime kernel. ::: @@ -33,7 +33,7 @@ The latest OS images at time of updating this document is [AM3358 Debian 10.3 20 The recommended way to build PX4 for _BeagleBone Blue_ is to compile on a development computer and upload the PX4 executable binary directly to the BeagleBone Blue. -:::tip +::: tip This approach is recommended over [native build](#native_builds) due to speed of deployment and ease of use. ::: @@ -79,7 +79,7 @@ echo "PermitRootLogin yes" >> /etc/ssh/sshd_config && systemctl restart sshd For _rsync_ over SSH with key authentication, follow the steps here (on the development machine): 1. Generate an SSH key if you have not previously done so: - ``` + ```sh ssh-keygen -t rsa ``` @@ -89,13 +89,13 @@ echo "PermitRootLogin yes" >> /etc/ssh/sshd_config && systemctl restart sshd 1. Define the BeagleBone Blue board as `beaglebone` in **/etc/hosts** and copy the public SSH key to the board for password-less SSH access: - ``` + ```sh ssh-copy-id debian@beaglebone ``` 1. Alternatively you can use the beaglebone's IP directly: - ``` + ```sh ssh-copy-id debian@ ``` @@ -115,7 +115,7 @@ echo "PermitRootLogin yes" >> /etc/ssh/sshd_config && systemctl restart sshd The ARM Cross Compiler for _BeagleBone Blue_ can be found at [Linaro Toolchain Binaries site](https://www.linaro.org/downloads/#gnu_and_llvm). - :::tip + ::: tip GCC in the toolchain should be compatible with kernel in _BeagleBone Blue_. General rule of thumb is to choose a toolchain where version of GCC is not higher than version of GCC which comes with the OS image on _BeagleBone Blue_. ::: @@ -129,7 +129,7 @@ echo "PermitRootLogin yes" >> /etc/ssh/sshd_config && systemctl restart sshd tar -xf gcc-linaro-13.0.0-2022.06-x86_64_arm-linux-gnueabihf.tar.xz ``` - :::tip + ::: tip The GCC version of the toolchain should be compatible with kernel in _BeagleBone Blue_. ::: @@ -147,7 +147,7 @@ echo "PermitRootLogin yes" >> /etc/ssh/sshd_config && systemctl restart sshd 1. Setup other dependencies by downloading the PX4 source code and then running the setup scripts: - ```` + ````sh git clone https://github.com/PX4/PX4-Autopilot.git --recursive ols ``` @@ -166,7 +166,7 @@ echo "PermitRootLogin yes" >> /etc/ssh/sshd_config && systemctl restart sshd Compile and Upload -``` +```sh make beaglebone_blue_default upload ``` @@ -185,9 +185,7 @@ sudo ./bin/px4 -s px4.config Currently _librobotcontrol_ requires root access. ::: - - -## Native Builds (optional) +## Native Builds (optional) {#native_builds} You can also natively build PX4 builds directly on the BeagleBone Blue. @@ -211,7 +209,7 @@ Run the following commands on the BeagleBone Blue (i.e. via SSH): ## Changes in config -All changes can be made in de px4.config file directly on beaglebone. +All changes can be made in the px4.config file directly on beaglebone. For example, you can change the WIFI to wlan. ::: info @@ -290,8 +288,6 @@ For a quadcopter with GPS and an SBUS receiver, here are typical connections: 1. Connect the ESC of motor 1, 2, 3 and 4 to channel 1, 2, 3 and 4 of servo outputs on BeagleBone Blue, respectively. If your ESC connector contains a power output pin, remove it and do not connect it to the power output pin of the servo channel on the BeagleBone Blue. - -1. Connect the above mentioned converted SBUS signal to the dsm2 port if you have the matching connector for dsm2, otherwise connect it to any other available UART port and change the corresponding port in **/home/debian/px4/px4.config** accordingly. - -1. Connect the signals of GPS module to GPS port on the BeagleBone Blue. +2. Connect the above mentioned converted SBUS signal to the dsm2 port if you have the matching connector for dsm2, otherwise connect it to any other available UART port and change the corresponding port in **/home/debian/px4/px4.config** accordingly. +3. Connect the signals of GPS module to GPS port on the BeagleBone Blue. Note that the signal pins of the GPS port on the BeagleBone Blue are only 3.3V tolerant, so choose your GPS module accordingly. diff --git a/docs/en/flight_controller/corvon_743v1.md b/docs/en/flight_controller/corvon_743v1.md new file mode 100644 index 0000000000..1f142d0793 --- /dev/null +++ b/docs/en/flight_controller/corvon_743v1.md @@ -0,0 +1,112 @@ +# CORVON 743v1 + + + +:::warning +PX4 does not manufacture this (or any) autopilot. Contact the manufacturer for hardware support or compliance issues. +::: + +The _CORVON 743v1_ is a flight controller designed by Feikong Technology Co., Ltd under the CORVON brand. +It features a powerful STM32H743 processor, dual high-performance IMUs (BMI088/BMI270), and an extensive array of interfaces. + +With its highly integrated 36x36mm footprint and 9g weight, and specialized interfaces like a direct plug-and-play DJI O3 Air Unit connector, this flight controller is optimized for space-constrained FPV builds and agile multirotors that require top-tier processing power and sensor redundancy. + +The board uses [Pixhawk Autopilot Standard Connections](https://docs.px4.io/main/en/flight_controller/autopilot_pixhawk_standard.html). + + + +::: info +This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). +::: + +## Key Features + +- **MCU:** STM32H743VIT6 MCU (32 Bit Arm® Cortex®-M7, 480MHz, 2MB Flash, 1MB RAM) +- **IMU:** Bosch BMI088, BMI270 (Dual IMU redundancy) +- **Barometer:** DPS310 +- **Magnetometer:** IST8310 +- **OSD:** Onboard AT7456E +- **Interfaces:** + - 7x UARTs + - 1x CAN (UAVCAN) + - 1x I2C + - Dedicated RC Input (UART6) + - 10x PWM outputs (DShot & Bi-Directional DShot supported) + - Dedicated DJI O3 Air Unit connector +- **Power:** + - 9V 3A BEC + - 5V 3A BEC + - ADC for battery voltage (up to 6S) and current monitoring + +## Where to Buy + +Order from [CORVON](https://corvon.tech). + +## Physical / Mechanical + +- **Mounting:** 30.5 x 30.5mm, Φ4mm +- **Dimensions:** 36 x 36 x 8 mm +- **Weight:** 9g + +## Specifications + +### Processors & Sensors + +- **FMU Processor:** STM32H743 + - 32 Bit Arm® Cortex®-M7, 480MHz + - 2MB Flash, 1MB RAM +- **On-board Sensors:** + - Accel/Gyro: Bosch BMI088, BMI270 + - Barometer: DPS310 + - Compass: IST8310 + +### Power Configuration + +The board has an internal voltage sensor and connections on the ESC connector for an external current sensor. + +- The voltage sensor handles up to 6S LiPo batteries. +- Two onboard BECs provide robust peripheral power (9V 3A and 5V 3A). + +## Connectors & Pinouts + +The following image shows the port connection details, including RC, UARTs, CAN, I2C, SWD Debug, and VTX connections. + + + +### Standard Serial Port Mapping + +| UART | PX4 Target Config | Default Usage | +| ------ | ----------------- | ------------- | +| USART1 | TELEM1 | MAVLink | +| UART4 | TELEM2 | MAVLink | +| USART2 | GPS1 | GPS | +| USART3 | TELEM3 | | +| UART8 | URT6 | | +| USART6 | RC | RC Input | +| UART7 | TELEM4 | ESC Telemetry | + +### Debug Port + +The board features a **4-pin SWD Debug** interface located on the right side of the board. This includes `SWCLK`, `SWDIO`, `3V3`, and `GND` for full hardware debugging. While a dedicated UART isn't strictly reserved for the NSH console by default, the full-speed USB connection provides MAVLink Console access out of the box. + +### RC Input + +RC Input is mapped to **UART6** via the explicit `SBUS/CRSF` connector block. + +- It fully supports PX4's standard `RC_INPUT` module protocols. +- The connector exposes both `RX6` and `TX6`, which makes it fully capable of bidirectional receiver protocols such as TBS Crossfire (CRSF), ELRS, and FPort, as well as traditional single-wire standards like SBUS (which operates inverted on RX6). + +## Building/Loading Firmware + +::: tip +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 from source: + +```sh +make corvon_743v1_default +``` + +Initial firmware flashing can be done over USB via QGroundControl. The bootloader status aligns with standard generic PX4 LED indications (Red = Bootloader/Error, Blue = Active/Activity, Green = Powered). diff --git a/docs/en/flight_controller/cuav_nora.md b/docs/en/flight_controller/cuav_nora.md index 3f6973240d..8c9fee2791 100644 --- a/docs/en/flight_controller/cuav_nora.md +++ b/docs/en/flight_controller/cuav_nora.md @@ -1,11 +1,11 @@ # CUAV Nora Flight Controller -:::warning +::: warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://www.cuav.net) for hardware support or compliance issues. ::: -The [Nora](https://doc.cuav.net/flight-controller/x7/en/nora.html)® flight controller is a high-performance autopilot. +The [Nora](https://doc.cuav.net/controller/x7/en/nora-plus.html)® flight controller is a high-performance autopilot. It is an ideal choice for industrial drones and large-scale heavy-duty drones. It is mainly supplied to commercial manufacturers. @@ -30,8 +30,8 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo - Car-grade RM3100 compass - High performance processor -:::tip -The manufacturer [CUAV Docs](https://doc.cuav.net/flight-controller/x7/en/nora.html) are the canonical reference for Nora. +::: tip +The manufacturer [CUAV Docs](https://doc.cuav.net/controller/x7/en/nora-plus.html) are the canonical reference for Nora. They should be used by preference as they contain the most complete and up to date information. ::: @@ -72,14 +72,14 @@ When it runs PX4 firmware, only 8 PWM outputs work. The remaining 6 PWM ports are still being adapted (so it is not compatible with VOLT at time of writing). ::: -## Where to Buy +## Where to Buy {#store} - [CUAV Store](https://store.cuav.net)<\br> - [CUAV Aliexpress](https://www.aliexpress.com/item/4001042501927.html?gps-id=8041884&scm=1007.14677.110221.0&scm_id=1007.14677.110221.0&scm-url=1007.14677.110221.0&pvid=3dc0a3ba-fa82-43d2-b0b3-6280e4329cef&spm=a2g0o.store_home.promoteRecommendProducts_7913969.58) ## Connections (Wiring) -[CUAV nora Wiring Quickstart](https://doc.cuav.net/flight-controller/x7/en/quick-start/quick-start-nora.html) +[CUAV nora Wiring Quickstart](https://doc.cuav.net/controller/x7/en/quick-start/quick-start-nora.html) ## Size and Pinouts @@ -87,7 +87,7 @@ The remaining 6 PWM ports are still being adapted (so it is not compatible with ![X7 pinouts](../../assets/flight_controller/cuav_nora/nora-pinouts.jpg) -:::warning +::: warning The `RCIN` port is limited to powering the rc receiver and cannot be connected to any power/load. ::: @@ -109,14 +109,14 @@ Under these conditions all power sources will be used in this order to power the ## Building Firmware -:::tip +::: tip Most users will not need to build this firmware! 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: -``` +```sh make cuav_nora_default ``` @@ -125,7 +125,7 @@ make cuav_nora_default The _Nora_ has over-current protection on the 5 Volt Peripheral and 5 Volt high power, which limits the current to 2.5A. The _Nora_ has short circuit protection. -:::warning +::: warning Up to 2.5 A can be delivered to the connectors listed as pin 1 (although these are only rated at 1 A). ::: @@ -153,7 +153,7 @@ The provided debug cable does not connect to the SWD port `Vref` pin (1). ![CUAV Debug cable](../../assets/flight_controller/cuav_v5_plus/cuav_v5_debug_cable.jpg) -:::warning +::: warning The SWD Vref pin (1) uses 5V as Vref but the CPU is run at 3.3V! Some JTAG adapters (SEGGER J-Link) will use the Vref voltage to set the voltage on the SWD lines. @@ -167,6 +167,6 @@ The complete set of supported configurations can be seen in the [Airframes Refer ## Further info -- [Quick start](https://doc.cuav.net/flight-controller/x7/en/quick-start/quick-start-nora.html) +- [Quick start](https://doc.cuav.net/controller/x7/en/quick-start/quick-start-nora.html) - [CUAV docs](https://doc.cuav.net/) - [nora schematic](https://github.com/cuav/hardware/tree/master/X7_Autopilot) diff --git a/docs/en/flight_controller/cuav_pixhawk_v6x.md b/docs/en/flight_controller/cuav_pixhawk_v6x.md index 5e91fa9819..6840b7a047 100644 --- a/docs/en/flight_controller/cuav_pixhawk_v6x.md +++ b/docs/en/flight_controller/cuav_pixhawk_v6x.md @@ -1,6 +1,6 @@ # CUAV Pixhawk V6X -:::warning +::: warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://store.cuav.net/) for hardware support or compliance issues. ::: @@ -11,7 +11,7 @@ It is based on the [Pixhawk​​® Autopilot FMUv6X Standard](https://github.co ![Pixhawk V6X](../../assets/flight_controller/cuav_pixhawk_v6x/pixhawk_v6x.jpg) -:::tip +::: tip This autopilot is [supported](../flight_controller/autopilot_pixhawk_standard.md) by the PX4 maintenance and test teams. ::: @@ -61,7 +61,7 @@ The Pixhawk® V6X is ideal for corporate research labs, academic research and co - 16- PWM servo outputs - 1 Dedicated R/C input for Spektrum / DSM and S.Bus with analog / PWM RSSI input - 3 TELEM Ports(with full flow control) -- 1 UART4(Seial and I2C) +- 1 UART4(Serial and I2C) - 2 GPS ports - 1 full GPS plus Safety Switch Port(GPS1) - 1 basic GPS port(with I2C,GPS2) @@ -104,7 +104,7 @@ The Pixhawk® V6X is ideal for corporate research labs, academic research and co ![Pixhawk V6X](../../assets/flight_controller/cuav_pixhawk_v6x/core.png) -## Where to Buy +## Where to Buy {#store} Order from [CUAV](https://store.cuav.net/). @@ -166,20 +166,18 @@ Analog battery monitoring via an ADC is not supported on this particular board, ## Building Firmware -:::tip +::: tip Most users will not need to build this firmware! 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: -``` +```sh make px4_fmu-v6x_default ``` - - -## Debug Port +## Debug Port {#debug_port} The [PX4 System Console](../debug/system_console.md) and [SWD interface](../debug/swd_debug.md) run on the **FMU Debug** port. diff --git a/docs/en/flight_controller/cuav_v5.md b/docs/en/flight_controller/cuav_v5.md index 25841b91ea..ed3719fbc0 100644 --- a/docs/en/flight_controller/cuav_v5.md +++ b/docs/en/flight_controller/cuav_v5.md @@ -1,144 +1,7 @@ + + + - -:::warning -This flight controller has been [discontinued](../flight_controller/autopilot_experimental.md) and is no longer commercially available. -::: - -:::warning -PX4 does not manufacture this (or any) autopilot. -Contact the [manufacturer](https://store.cuav.net/) for hardware support or compliance issues. -::: - -_CUAV v5_® (previously "Pixhack v5") is an advanced autopilot designed and made by CUAV®. -The board is based on the [Pixhawk-project](https://pixhawk.org/) **FMUv5** open hardware design. -It runs PX4 on the [NuttX](https://nuttx.apache.org/) OS, and is fully compatible with PX4 firmware. -It is intended primarily for academic and commercial developers. - -![CUAV v5](../../assets/flight_controller/cuav_v5/pixhack_v5.jpg) - -## Quick Summary - -- Main FMU Processor: STM32F765 - - 32 Bit Arm® Cortex®-M7, 216MHz, 2MB memory, 512KB RAM -- IO Processor: STM32F100 - - 32 Bit Arm® Cortex®-M3, 24MHz, 8KB SRAM -- On-board sensors: - - Accelerometer/Gyroscope: ICM-20689 - - Accelerometer/Gyroscope: BMI055 - - Magnetometer: IST8310 - - Barometer: MS5611 - -- Interfaces: - - 8-14 PWM outputs (6 from IO, 8 from FMU) - - 3 dedicated PWM/Capture inputs on FMU - - Dedicated R/C input for CPPM - - Dedicated R/C input for PPM and S.Bus - - analog / PWM RSSI input - - S.Bus servo output - - 5 general purpose serial ports - - 4 I2C ports - - 4 SPI buses - - 2 CANBuses with serial ESC - - Analog inputs for voltage / current of 2 batteries -- Power System: - - Power: 4.3~5.4V - - USB Input: 4.75~5.25V - - Servo Rail Input: 0~36V -- Weight and Dimensions: - - Weight: 90g - - Dimensions: 44x84x12mm -- Other Characteristics: - - Operating temperature: -20 ~ 80°C (Measured value) - -## Where to Buy - -Order from [CUAV](https://cuav.taobao.com/index.htm?spm=2013.1.w5002-16371268426.2.411f26d9E18eAz). - -## Connection - -![CUAV v5](../../assets/flight_controller/cuav_v5/pixhack_v5_connector.jpg) - -:::warning -The RCIN interface is limited to powering the rc receiver and cannot be connected to any power/load. -::: - -## Voltage Ratings - -_CUAV v5_ can be triple-redundant on the power supply if three power sources are supplied. The three power rails are: **POWER1**, **POWER2** and **USB**. - -::: info -The output power rails **FMU PWM OUT** and **I/O PWM OUT** (0V to 36V) do not power the flight controller board (and are not powered by it). -You must supply power to one of **POWER1**, **POWER2** or **USB** or the board will be unpowered. -::: - -**Normal Operation Maximum Ratings** - -Under these conditions all power sources will be used in this order to power the system: - -1. **POWER1** and **POWER2** inputs (4.3V to 5.4V) -1. **USB** input (4.75V to 5.25V) - -## Building Firmware - -:::tip -Most users will not need to build this firmware! -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: - -``` -make px4_fmu-v5_default -``` - -## Debug Port - -The [PX4 System Console](../debug/system_console.md) and [SWD interface](../debug/swd_debug.md) operate on the **FMU Debug** port. -Simply connect the FTDI cable to the Debug & F7 SWD connector. -To access the I/O Debug port, the user must remove the CUAV v5 shell. -Both ports have standard serial pins and can be connected to a standard FTDI cable (3.3V, but 5V tolerant). - -The pinout is as shown. - -![CUAV v5 debug](../../assets/flight_controller/cuav_v5/pixhack_v5_debug.jpg) - -| pin | CUAV v5 debug | -| --- | ------------- | -| 1 | GND | -| 2 | FMU-SWCLK | -| 3 | FMU-SWDIO | -| 4 | UART7_RX | -| 5 | UART7_TX | -| 6 | VCC | - -## Serial Port Mapping - -| UART | Device | Port | -| ------ | ---------- | ------------------------------------- | -| UART1 | /dev/ttyS0 | GPS | -| USART2 | /dev/ttyS1 | TELEM1 (flow control) | -| USART3 | /dev/ttyS2 | TELEM2 (flow control) | -| UART4 | /dev/ttyS3 | TELEM4 | -| USART6 | /dev/ttyS4 | TX is RC input from SBUS_RC connector | -| UART7 | /dev/ttyS5 | Debug Console | -| UART8 | /dev/ttyS6 | PX4IO | - - - -## Peripherals - -- [Digital Airspeed Sensor](https://item.taobao.com/item.htm?spm=a1z10.3-c-s.w4002-16371268452.37.6d9f48afsFgGZI&id=9512463037) -- [Telemetry Radio Modules](https://cuav.taobao.com/category-158480951.htm?spm=2013.1.w5002-16371268426.4.410b7a821qYbBq&search=y&catName=%CA%FD%B4%AB%B5%E7%CC%A8) -- [Rangefinders/Distance sensors](../sensor/rangefinders.md) - -## Supported Platforms / Airframes - -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 - -- [FMUv5 reference design pinout](https://docs.google.com/spreadsheets/d/1-n0__BYDedQrc_2NHqBenG1DNepAgnHpSGglke-QQwY/edit#gid=912976165). -- [CUAV Github](https://github.com/cuav) +DOC REMOVED: 202603 +--> diff --git a/docs/en/flight_controller/cuav_v5_nano.md b/docs/en/flight_controller/cuav_v5_nano.md index cae3e89850..137c1b8c59 100644 --- a/docs/en/flight_controller/cuav_v5_nano.md +++ b/docs/en/flight_controller/cuav_v5_nano.md @@ -1,6 +1,6 @@ # CUAV V5 nano Autopilot -:::warning +::: warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://store.cuav.net/) for hardware support or compliance issues. ::: @@ -58,7 +58,7 @@ Main FMU Processor: STM32F765◦32 Bit Arm® Cortex®-M7, 216MHz, 2MB memory, 51 - Other Characteristics: - Operating temperature: -20 ~ 85°C (Measured value) -## Where to Buy +## Where to Buy {#store} [CUAV Store](https://store.cuav.net/shop/v5-nano/) @@ -82,20 +82,18 @@ Download **V5 nano** pinouts from [here](http://manual.cuav.net/V5-Plus.pdf). ## Building Firmware -:::tip +::: tip Most users will not need to build this firmware! 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: -``` +```sh make px4_fmu-v5_default ``` - - -## Debug Port +## Debug Port {#debug_port} The [PX4 System Console](../debug/system_console.md) and [SWD interface](../debug/swd_debug.md) operate on the **FMU Debug** port (`DSU7`). The board does not have an I/O debug interface. @@ -119,7 +117,7 @@ The provided debug cable does not connect to the SWD port `Vref` pin (1). ![CUAV Debug cable](../../assets/flight_controller/cuav_v5_nano/cuav_nano_debug_cable.jpg) -:::warning +::: warning The SWD Vref pin (1) uses 5V as Vref but the CPU is run at 3.3V! Some JTAG adapters (SEGGER J-Link) will use the Vref voltage to set the voltage on the SWD lines. @@ -200,7 +198,7 @@ For direct connection to _Segger Jlink_ we recommended you use the 3.3 Volts of `PM2` can only measure battery voltage and current, but **not** power the flight controller. -:::warning +::: warning PX4 does not support this interface. ::: @@ -214,7 +212,7 @@ For example, the serial number Batch V011904((V01 is the number of V5, 1904 is t #### SBUS / DSM / RSSI interface Pin1 unfused -:::warning +::: warning This is a safety issue. ::: diff --git a/docs/en/flight_controller/cuav_v5_plus.md b/docs/en/flight_controller/cuav_v5_plus.md index 5c2eee9468..59be8ec60b 100644 --- a/docs/en/flight_controller/cuav_v5_plus.md +++ b/docs/en/flight_controller/cuav_v5_plus.md @@ -1,6 +1,6 @@ # CUAV V5+ Autopilot -:::warning +::: warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://store.cuav.net/) for hardware support or compliance issues. ::: @@ -58,7 +58,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo - Other Characteristics: - Operating temperature: -20 ~ 80°c(Measured value) -## Where to Buy +## Where to Buy {#store} [CUAV Aliexpress](https://www.aliexpress.com/item/32890380056.html?spm=a2g0o.detail.1000060.1.7a7233e7mLTlVl&gps-id=pcDetailBottomMoreThisSeller&scm=1007.13339.90158.0&scm_id=1007.13339.90158.0&scm-url=1007.13339.90158.0&pvid=d899bfab-a7ca-46e1-adf2-72ad1d649822) (International users) @@ -101,20 +101,20 @@ Under these conditions all power sources will be used in this order to power the The _V5+_ has over current protection on the 5 Volt Peripheral and 5 Volt high power, which limits the current to 2.5A. The _V5+_ has short circuit protection. -:::warning +::: warning Up to 2.5 A can be delivered to the connectors listed as pin 1 (although these are only rated at 1 A). ::: ## Building Firmware -:::tip +::: tip Most users will not need to build this firmware! 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: -``` +```sh make px4_fmu-v5_default ``` @@ -142,7 +142,7 @@ The provided debug cable does not connect to the SWD port `Vref` pin (1). ![CUAV Debug cable](../../assets/flight_controller/cuav_v5_plus/cuav_v5_debug_cable.jpg) -:::warning +::: warning The SWD Vref pin (1) uses 5V as Vref but the CPU is run at 3.3V! Some JTAG adapters (SEGGER J-Link) will use the Vref voltage to set the voltage on the SWD lines. @@ -205,7 +205,7 @@ The UAVCAN [NEO V2 PRO GNSS receiver](https://doc.cuav.net/gps/neo-series-gnss/e `DSU7` FMU Debug Pin 1 is 5 volts - not the 3.3 volts of the CPU. -Some JTAG use this voltage to set the IO levels when communicating to the target. +Some JTAG adapters use this voltage to set the IO levels when communicating to the target. For direct connection to _Segger Jlink_ we recommended you use the 3.3 Volts of DSM/SBUS/RSSI pin 4 as Pin 1 on the debug connector (`Vtref`). @@ -219,7 +219,7 @@ For example, the serial number Batch V011904((V01 is the number of V5, 1904 is t #### SBUS / DSM / RSSI interface Pin1 unfused -:::warning +::: warning This is a safety issue. ::: diff --git a/docs/en/flight_controller/cuav_x25-evo.md b/docs/en/flight_controller/cuav_x25-evo.md index 881290e9c8..c5a11b3886 100644 --- a/docs/en/flight_controller/cuav_x25-evo.md +++ b/docs/en/flight_controller/cuav_x25-evo.md @@ -1,6 +1,6 @@ # CUAV X25-EVO -:::warning +::: warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://store.cuav.net/) for hardware support or compliance issues. ::: @@ -9,7 +9,7 @@ The _X25-EVO_ is an advanced autopilot manufactured by CUAV®. The autopilot is recommended for commercial system integration but is also suitable for academic research and any other applications. -![X25-EVO AutoPilot - hero image](../../assets/flight_controller/cuav_x25-evo/X25-EVO.jpg) +![X25-EVO AutoPilot - hero image](../../assets/flight_controller/cuav_x25-evo/x25_evo.jpg) The X25-EVO brings you ultimate performance, stability, and reliability in every aspect. @@ -19,12 +19,17 @@ These flight controllers are [manufacturer supported](../flight_controller/autop ### Features -- Arm® Cortex-M7® processor (STM32H743XI) with Floating-Point Unit (FPU), operating at 480MHz, and featuring 2MB Flash memory. Enables developers to enhance productivity and efficiency, allowing for more complex algorithms and models. -- Automotive-grade RM3100 compass. Designed for better stability and anti-interference capability. -- Triple-redundant IMUs and dual-redundant barometers located on separate buses. If the PX4 autopilot detects a sensor failure, the system seamlessly switches to another sensor to maintain flight control reliability. -- Independent LDO power control supplies power to each sensor group. A vibration isolation system filters high-frequency vibrations and reduces noise to ensure accurate readings, enabling better overall flight performance for the vehicle. +- Arm® Cortex-M7® processor (STM32H743XI) with Floating-Point Unit (FPU), operating at 480MHz, and featuring 2MB Flash memory. + Enables developers to enhance productivity and efficiency, allowing for more complex algorithms and models. +- Automotive-grade RM3100 compass. + Designed for better stability and anti-interference capability. +- Triple-redundant IMUs and dual-redundant barometers located on separate buses. + If the PX4 autopilot detects a sensor failure, the system seamlessly switches to another sensor to maintain flight control reliability. +- Independent LDO power control supplies power to each sensor group. + A vibration isolation system filters high-frequency vibrations and reduces noise to ensure accurate readings, enabling better overall flight performance for the vehicle. - Integrated Microchip Ethernet PHY for high-speed communication with onboard devices like mission computers via Ethernet. -- Dual temperature compensation systems, located on the IMU board and FMU board respectively. Temperature is controlled by onboard heating resistors to achieve the optimal operating temperature for the IMUs. +- Dual temperature compensation systems, located on the IMU board and FMU board respectively. + Temperature is controlled by onboard heating resistors to achieve the optimal operating temperature for the IMUs. - PWM servo output voltage switchable between 3.3V or 5V. - Modular design for DIY carrier boards. @@ -33,7 +38,7 @@ These flight controllers are [manufacturer supported](../flight_controller/autop - Main Processor: STM32H743XI - 32-bit Arm® Cortex®-M7, 480MHz, 2MB Flash, 1MB RAM - Onboard Sensors: - - Accel/Gyro: IIM42652\*2 + - Accel/Gyro: IIM42652 (x2) - Accel/Gyro: IIM42653 - Magnetometer: RM3100 - Barometer: BMP581 @@ -47,14 +52,14 @@ These flight controllers are [manufacturer supported](../flight_controller/autop - Servo Rail Input: 0~9.9V - Rated Current: - Total Output Max Current: 10A - - TELEM1 and TELEM2 Output Current limiter: 4A - - CAN1 and CAN2 Output Current limiter: 2.4A + - `TELEM1` and `TELEM2` Output Current limiter: 4A + - `CAN1` and `CAN2` Output Current limiter: 2.4A - Other Ports Output Current limiter: 1.5A ### Interfaces - 16x PWM Servo Outputs -- 1x Dedicated R/C Input for Spektrum / DSM and S.Bus +- 1x Dedicated R/C Input(`RC IN`) for Spektrum / DSM and S.Bus - 1x Analog/PWM RSSI Input - 2x TELEM Ports (with full flow control) - 1x UART4 Port @@ -83,19 +88,24 @@ 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 + ![CUAV X25 EVO](../../assets/flight_controller/cuav_x25-evo/x25_evo_size.png) + +## Purchase Channels {#store} Order from [CUAV](https://store.cuav.net/). ## Assembly/Setup -- Not provided. +The [X25 EVO Wiring Quick Start](../assembly/quick_start_cuav_x25_evo.md) provides instructions on how to assemble required/important peripherals including GPS, Power Module etc. -## Pin Definitions +## Pinouts -- Not provided. +![CUAV X25 EVO Pinout](../../assets/flight_controller/cuav_x25-evo/x25_evo_pinouts.jpg) ## Serial Port Mapping @@ -106,12 +116,34 @@ Order from [CUAV](https://store.cuav.net/). | USART3 | /dev/ttyS2 | Debug Console | | UART4 | /dev/ttyS3 | UART4 | | UART5 | /dev/ttyS4 | TELEM2 | -| USART6 | /dev/ttyS5 | RC | +| USART6 | /dev/ttyS5 | RC IN | | UART7 | /dev/ttyS6 | TELEM1 | +## PWM Outputs {#pwm_outputs} + +This flight controller supports up to 16 FMU PWM outputs (MAIN). + +Outputs: + +- Outputs 1-8 support [DShot](../peripherals/dshot.md). +- Outputs 9-16 do not support DShot. +- Outputs 1-7 support [Bidirectional DShot](../peripherals/dshot.md#bidirectional-dshot-telemetry). +- Output 8 supports Bidirectional DShot output only (no eRPM capture). + +The 16 outputs are in 5 groups: + +- Outputs 1-4 in group1 (Timer5) +- Outputs 5-8 in group2 (Timer4) +- Outputs 9-11 in group3 (Timer1) +- Outputs 12-14 in group4 (Timer8) +- Outputs 15-16 in group5 (Timer12) + +All outputs within the same group must use the same output protocol and rate. + ## Voltage Ratings -The _X25-EVO_ achieves triple redundancy on power supplies if three power sources are provided. The three power rails are POWERC1, POWERC2, and USB. +The _X25-EVO_ achieves triple redundancy on power supplies if three power sources are provided. +The three power rails are `POWERC1`, `POWERC2`, and `USB`. - **POWER C1** and **POWER C2** are DroneCAN/UAVCAN battery interfaces. @@ -128,20 +160,18 @@ Digital DroneCAN/UAVCAN battery monitoring is enabled by default. ## Building Firmware -:::tip +::: tip Most users do not need to build this firmware! It is pre-built and installed automatically by _QGroundControl_ when the appropriate hardware is connected. ::: To [build PX4](../dev_setup/building_px4.md) for this target, execute: -``` +```sh make cuav_x25-evo_default ``` - - -## Debug Port +## Debug Port {#debug_port} The [PX4 System Console](../debug/system_console.md) and [SWD Interface](../debug/swd_debug.md) operate on the **FMU Debug** port. @@ -156,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 diff --git a/docs/en/flight_controller/cuav_x25-super.md b/docs/en/flight_controller/cuav_x25-super.md new file mode 100644 index 0000000000..502db14c63 --- /dev/null +++ b/docs/en/flight_controller/cuav_x25-super.md @@ -0,0 +1,178 @@ +# CUAV X25-SUPER + + + +::: warning +PX4 does not manufacture this (or any) autopilot. +Contact the [manufacturer](https://store.cuav.net/) for hardware support or compliance issues. +::: + +The _X25-SUPER_ is an advanced autopilot manufactured by CUAV®. + +The autopilot is recommended for commercial system integration but is also suitable for academic research and any other applications. + +![X25-SUPER AutoPilot - hero image](../../assets/flight_controller/cuav_x25-super/x25-super.png) + +The X25-SUPER brings you ultimate performance, stability, and reliability in every aspect. + +::: info +These flight controllers are [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). +::: + +### 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. +- 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. +- PWM servo output voltage switchable between 3.3V or 5V. +- Modular design for DIY carrier boards. + +### Processors & Sensors + +- Main Processor: STM32H743XI + - 32-bit Arm® Cortex®-M7, 480MHz, 2MB Flash, 1MB RAM +- Onboard Sensors: + - Accel/Gyro: SCH16T + - Accel/Gyro: IIM42652 + - Accel/Gyro: IIM42653 + - Magnetometer: RM3100 + - Barometer: BMP581 + - Barometer: ICP-20100 + +### Electrical Data + +- Rated Voltage: + - Input Voltage: 10~18V + - USB Power Input: 4.75~5.25V + - 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 + - Other Ports Output Current limiter: 1.5A + +### Interfaces + +- 16x PWM Servo Outputs +- 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 +- 2x GPS Ports + - 1x Full GPS plus Safety Switch Port (GPS1) + - 1x Basic GPS Port (with I2C, GPS2) +- 1x USB Port (TYPE-C) +- 1x Ethernet Port + - Transformerless application + - 100Mbps +- 3x I2C Bus Ports +- 1x SPI Bus + - 1x Chip Select Line + - 1x Data Ready Line + - 1x SPI Reset Line +- 5x CAN Ports for CAN Peripherals + - 3x CAN1 Bus Multiplexed Ports + - 2x CAN2 Bus Multiplexed Ports +- 2x Power Input Ports + - DroneCAN/UAVCAN Power Input +- 2x AD Ports + - Analog Input (3.3V) + - Analog Input (6.6V - not supported by PX4) +- 1x Dedicated Debug Port + - FMU Debug + +### Mechanical Data + +- Dimensions: + + ![CUAV X25-SUPER](../../assets/flight_controller/cuav_x25-super/x25-super_size.png) + +## Purchase Channels {#store} + +Order from [CUAV](https://store.cuav.net/). + +## Assembly/Setup + +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 + +![CUAV X25-SUPER Pinout_01](../../assets/flight_controller/cuav_x25-super/x25-super_pinouts_01.png) +![CUAV X25-SUPER Pinout_02](../../assets/flight_controller/cuav_x25-super/x25-super_pinouts_02.png) + +## Serial Port Mapping + +| UART | Device | Port | +| ------ | ---------- | ------------- | +| USART1 | /dev/ttyS0 | GPS1 | +| USART2 | /dev/ttyS1 | GPS2 | +| USART3 | /dev/ttyS2 | Debug Console | +| UART4 | /dev/ttyS3 | UART4 | +| UART5 | /dev/ttyS4 | TELEM2 | +| USART6 | /dev/ttyS5 | RC IN | +| UART7 | /dev/ttyS6 | TELEM1 | + +## RC Input + +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`. + +- **POWER C1** and **POWER C2** are DroneCAN/UAVCAN battery interfaces. + +**Normal Operation Maximum Ratings** + +Under these conditions, all power sources will be used to power the system in the following order: + +1. **POWER C1** and **POWER C2** Inputs (10V to 18V) +2. USB Input (4.75V to 5.25V) + +**Voltage monitoring** + +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). +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 +``` + +## Debug Port {#debug_port} + +The [PX4 System Console](../debug/system_console.md) and [SWD Interface](../debug/swd_debug.md) operate on the **FMU Debug** port. + +| Pin | Signal | Volt | +| ------- | -------------- | ----- | +| 1 (red) | 5V+ | +5V | +| 2 (blk) | DEBUG TX (OUT) | +3.3V | +| 3 (blk) | DEBUG RX (IN) | +3.3V | +| 4 (blk) | FMU_SWDIO | +3.3V | +| 5 (blk) | FMU_SWCLK | +3.3V | +| 6 (blk) | GND | GND | + +## Supported Platforms / Airframes + +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 + +- [CUAV Docs](https://doc.cuav.net/) diff --git a/docs/en/flight_controller/cuav_x7.md b/docs/en/flight_controller/cuav_x7.md index 8966cc86bc..8eb0b07db3 100644 --- a/docs/en/flight_controller/cuav_x7.md +++ b/docs/en/flight_controller/cuav_x7.md @@ -1,182 +1,7 @@ + + + - -:::warning -This flight controller has been [discontinued](../flight_controller/autopilot_experimental.md) and is no longer commercially available. -It has been superseded by the [CUAV X7+](https://doc.cuav.net/controller/x7/en/). -::: - -:::warning -PX4 does not manufacture this (or any) autopilot. -Contact the [manufacturer](https://www.cuav.net) for hardware support or compliance issues. -::: - -The [X7](https://doc.cuav.net/controller/x7/en/)® flight controller is a high-performance autopilot. -It is an ideal choice for industrial drones and large-scale heavy-duty drones. -It is mainly supplied to commercial manufacturers. - -![CUAV x7](../../assets/flight_controller/cuav_x7/x7.jpg) - -The flight controller adopts a modular design and can be matched with different base plates. -You can design a dedicated carrier board for your UAV to improve the integration of commercial systems, reduce wiring, improve system reliability, and enhance your UAV competitiveness (for example, integrating airspeed sensors, telemetry or even a companion computer, in the carrier board). -CUAV has also provided a variety of carrier boards for you to choose from. - -::: info -This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). -::: - -## Features - -- Internal shock absorption -- Modular design, can be DIY carrier board -- Support USB_HS, download logs faster (PX4 not yet supported) -- Support more DShot output -- Support IMU heating, make the sensor work better -- Dedicated CAN battery port -- 3 sets of IMU sensors -- Car-grade RM3100 compass -- High performance processor - -:::tip -The manufacturer [CUAV Docs](https://doc.cuav.net/flight-controller/x7/en/) are the canonical reference for the X7. -They should be used by preference as they contain the most complete and up to date information. -::: - -## Quick Summary - -- Main FMU Processor: STM32H743 -- On-board sensors: - - Accelerometer/Gyroscope: ICM-20689 - - Accelerometer/Gyroscope: ICM-20649 - - Accelerometer/Gyroscope: BMI088 - - Magnetometer: RM3100 - - Barometer: MS5611\*2 - -- Interfaces: - - 14 PWM outputs (12 supports Dshot) - - Support multiple RC inputs (SBUs / CPPM / DSM) - - Analogue / PWM RSSI input - - 2 GPS ports(GPS and UART4 ports) - - 4 i2c buses(Two i2c dedicated ports) - - 2 CAN bus ports - - 2 Power ports(Power A is common adc interface, Power C is DroneCAN battery interface) - - 2 ADC input - - 1 USB ports -- Power System: - - Power: 4.3~5.4V - - USB Input: 4.75~5.25V - - Servo Rail Input: 0~36V -- Weight and Dimensions: - - Weight: 101 g -- Other Characteristics: - - Operating temperature: -20 ~ 80°c(Measured value) - - Three imus - - Supports temperature compensation - - Internal shock absorption - -::: info -When it runs PX4 firmware, only 8 pwm works, the remaining 6 pwm are still being adapted, so it is not compatible with VOLT now. -::: - -## Where to Buy - -[CUAV Store](https://store.cuav.net) - -[CUAV aliexpress](https://www.aliexpress.com/item/4001042683738.html?spm=a2g0o.detail.1000060.2.1ebb2a9d3WDryi&gps-id=pcDetailBottomMoreThisSeller&scm=1007.13339.169870.0&scm_id=1007.13339.169870.0&scm-url=1007.13339.169870.0&pvid=f0df2481-1c0a-44eb-92a4-9c11c6cb3d06&_t=gps-id:pcDetailBottomMoreThisSeller,scm-url:1007.13339.169870.0,pvid:f0df2481-1c0a-44eb-92a4-9c11c6cb3d06,tpp_buckets:668%230%23131923%2320_668%23808%234094%23518_668%23888%233325%2319_668%234328%2319934%23630_668%232846%238115%23807_668%232717%237566%23827_668%231000022185%231000066058%230_668%233468%2315607%2376) - -## Connections (Wiring) - -[CUAV X7 Wiring Quickstart](https://doc.cuav.net/controller/x7/en/quick-start/quick-start-x7-plus.html) - -## Size and Pinouts - -![CUAV x7](../../assets/flight_controller/cuav_x7/x7-size.jpg) - -![X7 pinouts](../../assets/flight_controller/cuav_x7/x7-pinouts.jpg) - -:::warning -The `RCIN` port is limited to powering the RC receiver and cannot be connected to any power/load. -::: - -## Voltage Ratings - -The _X7 AutoPilot_ can be triple-redundant on the power supply if three power sources are supplied. -The power rails are: **POWERA**, **POWERC** and **USB**. - -::: info -The output power rails **PWM OUT** (0V to 36V) do not power the flight controller board (and are not powered by it). -You must supply power to one of **POWERA**, **POWERC** or **USB** or the board will be unpowered. -::: - -**Normal Operation Maximum Ratings** - -Under these conditions all power sources will be used in this order to power the system: - -1. **POWERA** and **POWERC** inputs (4.3V to 5.4V) -2. **USB** input (4.75V to 5.25V) - -## Building Firmware - -:::tip -Most users will not need to build this firmware! -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: - -``` -make cuav_x7pro_default -``` - -## Over Current Protection - -The _X7_ has over-current protection on the 5 Volt Peripheral and 5 Volt high power, which limits the current to 2.5A. -The _X7_ has short circuit protection. - -:::warning -Up to 2.5 A can be delivered to the connectors listed as pin 1 (although these are only rated at 1 A). -::: - -## Debug Port - -The system's serial console and SWD interface operate on the **DSU7** port. -Simply connect the FTDI cable to the DSU7 connector (the product list contains the CUAV FTDI cable). - -![Debug port (DSU7)](../../assets/flight_controller/cuav_v5_plus/debug_port_dsu7.jpg) - -The [PX4 System Console](../debug/system_console.md) and [SWD interface](../debug/swd_debug.md) operate on the **FMU Debug** port (`DSU7`). - -The debug port (`DSU7`) uses a [JST BM06B](https://www.digikey.com.au/en/products/detail/jst-sales-america-inc/BM06B-GHS-TBT-LF-SN-N/807850) connector and has the following pinout: - -| Pin | Signal | Volt | -| ------- | -------------- | ----- | -| 1 (red) | 5V+ | +5V | -| 2 (blk) | DEBUG TX (OUT) | +3.3V | -| 3 (blk) | DEBUG RX (IN) | +3.3V | -| 4 (blk) | FMU_SWDIO | +3.3V | -| 5 (blk) | FMU_SWCLK | +3.3V | -| 6 (blk) | GND | GND | - -CUAV provides a dedicated debugging cable, which can be connected to the `DSU7` port. -This splits out an FTDI cable for connecting the [PX4 System Console](../debug/system_console.md) to a computer USB port, and SWD pins used for SWD/JTAG debugging. -The provided debug cable does not connect to the SWD port `Vref` pin (1). - -![CUAV Debug cable](../../assets/flight_controller/cuav_v5_plus/cuav_v5_debug_cable.jpg) - -:::warning -The SWD Vref pin (1) uses 5V as Vref but the CPU is run at 3.3V! - -Some JTAG adapters (SEGGER J-Link) will use the Vref voltage to set the voltage on the SWD lines. -For direct connection to _Segger Jlink_ we recommended you use the 3.3 Volts from pin 4 of the connector marked `DSM`/`SBUS`/`RSSI` to provide `Vtref` to the JTAG (i.e. providing 3.3V and _NOT_ 5V). -::: - -## Supported Platforms / Airframes - -Any multicopter / plane / 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 - -- [CUAV docs](https://doc.cuav.net/) -- [x7 schematic](https://github.com/cuav/hardware/tree/master/X7_Autopilot) +DOC REMOVED: 202603 +--> diff --git a/docs/en/flight_controller/cubepilot_cube_orange.md b/docs/en/flight_controller/cubepilot_cube_orange.md index dc12957b5d..e379a5422c 100644 --- a/docs/en/flight_controller/cubepilot_cube_orange.md +++ b/docs/en/flight_controller/cubepilot_cube_orange.md @@ -1,6 +1,6 @@ # CubePilot Cube Orange Flight Controller -:::warning +::: warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://cubepilot.org/#/home) for hardware support or compliance issues. ::: @@ -10,7 +10,7 @@ The [Cube Orange](https://www.cubepilot.com/#/cube/features) flight controller i ![Cube Orange](../../assets/flight_controller/cube/orange/cube_orange_hero.jpg) The controller is designed to be used with a domain-specific carrier board in order to reduce the wiring, improve reliability, and ease of assembly. -For example, a carrier board for a commercial inspection vehicle might include connections for a companion computer, while a carrier board for a racer could includes ESCs for the frame of the vehicle. +For example, a carrier board for a commercial inspection vehicle might include connections for a companion computer, while a carrier board for a racer could include ESCs for the frame of the vehicle. The ADS-B carrier board includes a customized 1090MHz ADSB-In receiver from uAvionix. This provides attitude and location of commercial manned aircraft within the range of Cube. @@ -18,10 +18,14 @@ This is automatically configured and enabled in the default PX4 firmware. Cube includes vibration isolation on two of the IMU's, with a third fixed IMU as a reference / backup. -:::tip +::: tip The manufacturer [Cube User Guide](https://docs.cubepilot.org/user-guides/autopilot/the-cube) contains detailed information, including an overview of the [Differences between Cube Colours](https://docs.cubepilot.org/user-guides/autopilot/the-cube/introduction/specifications). ::: +::: info +This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). +::: + ## Key Features - 32bit STM32H753VI (32bit [ARM Cortex M7](https://en.wikipedia.org/wiki/ARM_Cortex-M#Cortex-M7), 400 MHz, Flash 2MB, RAM 1MB). @@ -36,9 +40,7 @@ The manufacturer [Cube User Guide](https://docs.cubepilot.org/user-guides/autopi - High-power, multi-tone piezo audio indicator - microSD card for high-rate logging over extended periods of time - - -## Where to Buy +## Where to Buy {#store} - [Reseller list](https://www.cubepilot.com/#/reseller/list) @@ -223,14 +225,14 @@ The manufacturer [Cube User Guide](https://docs.cubepilot.org/user-guides/autopi ## Building Firmware -:::tip +::: tip Most users will not need to build this firmware! 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, open up the terminal and enter: -``` +```sh make cubepilot_cubeorange ``` diff --git a/docs/en/flight_controller/cubepilot_cube_orangeplus.md b/docs/en/flight_controller/cubepilot_cube_orangeplus.md index 440d8ae01c..ec1e50ed92 100644 --- a/docs/en/flight_controller/cubepilot_cube_orangeplus.md +++ b/docs/en/flight_controller/cubepilot_cube_orangeplus.md @@ -1,17 +1,17 @@ # CubePilot Cube Orange+ Flight Controller -:::warning +::: warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://cubepilot.org/#/home) for hardware support or compliance issues. ::: The [Cube Orange+](https://www.cubepilot.com/#/cube/features) flight controller is a flexible autopilot intended primarily for manufacturers of commercial systems. -Cube Orange+ is similar to Cube Orange, but has a more powerful dual-core processor (STM32H757, and some different sensors parts. +Cube Orange+ is similar to Cube Orange, but has a more powerful dual-core processor (STM32H757), and some different sensor parts. ![Cube Orange](../../assets/flight_controller/cube/orangeplus/cubepilot_cube_orangeplus_standard_set.jpg) The controller is designed to be used with a domain-specific carrier board in order to reduce the wiring, improve reliability, and ease of assembly. -For example, a carrier board for a commercial inspection vehicle might include connections for a companion computer, while a carrier board for a racer could includes ESCs for the frame of the vehicle. +For example, a carrier board for a commercial inspection vehicle might include connections for a companion computer, while a carrier board for a racer could include ESCs for the frame of the vehicle. The ADS-B carrier board includes a customized 1090MHz ADSB-In receiver from uAvionix. This provides attitude and location of commercial manned aircraft within the range of Cube. @@ -19,10 +19,14 @@ This is automatically configured and enabled in the default PX4 firmware. Cube includes vibration isolation on two of the IMU's, with a third fixed IMU as a reference / backup. -:::tip +::: tip The manufacturer [Cube User Guide](https://docs.cubepilot.org/user-guides/autopilot/the-cube) contains detailed information, including an overview of the [Differences between Cube Colours](https://docs.cubepilot.org/user-guides/autopilot/the-cube/introduction/specifications). ::: +::: info +This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). +::: + ## Key Features - 32bit STM32H757ZI (32bit [ARM Cortex M7](https://en.wikipedia.org/wiki/ARM_Cortex-M#Cortex-M7), 400 MHz, Flash 2MB, RAM 1MB). @@ -37,9 +41,7 @@ The manufacturer [Cube User Guide](https://docs.cubepilot.org/user-guides/autopi - High-power, multi-tone piezo audio indicator - microSD card for high-rate logging over extended periods of time - - -## Where to Buy +## Where to Buy {#store} - [Reseller list](https://www.cubepilot.com/#/reseller/list) @@ -224,13 +226,13 @@ The manufacturer [Cube User Guide](https://docs.cubepilot.org/user-guides/autopi ## Building Firmware -:::warning +::: warning The firmware for Orange+ will be present in releases from PX4 v1.14. ::: To [build PX4](../dev_setup/building_px4.md) for this target, open up the terminal and enter: -``` +```sh make cubepilot_cubeorangeplus ``` diff --git a/docs/en/flight_controller/cubepilot_cube_yellow.md b/docs/en/flight_controller/cubepilot_cube_yellow.md index 778d647bc6..938e8fa9cc 100644 --- a/docs/en/flight_controller/cubepilot_cube_yellow.md +++ b/docs/en/flight_controller/cubepilot_cube_yellow.md @@ -1,6 +1,6 @@ # CubePilot Cube Yellow Flight Controller -:::warning +::: warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://cubepilot.org/#/home) for hardware support or compliance issues. ::: @@ -10,14 +10,18 @@ The Cube Yellow flight controller is a flexible autopilot intended primarily for ![Cube Yellow](../../assets/flight_controller/cube/yellow/cube_yellow_hero.jpg) The controller is designed to be used with a domain-specific carrier board in order to reduce the wiring, improve reliability, and ease of assembly. -For example, a carrier board for a commercial inspection vehicle might include connections for a companion computer, while a carrier board for a racer could includes ESCs for the frame of the vehicle. +For example, a carrier board for a commercial inspection vehicle might include connections for a companion computer, while a carrier board for a racer could include ESCs for the frame of the vehicle. Cube includes vibration isolation on two of the IMU's, with a third fixed IMU as a reference / backup. -:::tip +::: tip The manufacturer [Cube User Guide](https://docs.cubepilot.org/user-guides/autopilot/the-cube) contains detailed information, including an overview of the [Differences between Cube Colours](https://docs.cubepilot.org/user-guides/autopilot/the-cube/introduction/specifications). ::: +::: info +This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). +::: + ## Key Features - 32bit STM32F777VI (32bit [ARM Cortex M7](https://en.wikipedia.org/wiki/ARM_Cortex-M#Cortex-M7), 400 MHz, Flash 2MB, RAM 512 KB). @@ -32,9 +36,7 @@ The manufacturer [Cube User Guide](https://docs.cubepilot.org/user-guides/autopi - High-power, multi-tone piezo audio indicator - microSD card for high-rate logging over extended periods of time - - -## Where to Buy +## Where to Buy {#store} - [Reseller list](https://www.cubepilot.com/#/reseller/list) @@ -47,7 +49,7 @@ The manufacturer [Cube User Guide](https://docs.cubepilot.org/user-guides/autopi - **Processor:** - STM32F777VI (32bit [ARM Cortex M7](https://en.wikipedia.org/wiki/ARM_Cortex-M#Cortex-M7)) - 400 MHz - - 512 KB MB RAM + - 512 KB RAM - 2 MB Flash - **Failsafe co-processor:** - STM32F100 (32bit _ARM Cortex-M3_) @@ -121,14 +123,14 @@ Board schematics and other documentation can be found here: [The Cube Project](h ## Building Firmware -:::tip +::: tip Most users will not need to build this firmware! 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: -``` +```sh make cubepilot_cubeyellow ``` diff --git a/docs/en/flight_controller/dropix.md b/docs/en/flight_controller/dropix.md deleted file mode 100644 index e400005541..0000000000 --- a/docs/en/flight_controller/dropix.md +++ /dev/null @@ -1,7 +0,0 @@ -# DroPix Flight Controller (Discontinued) - - - -The Drotek® _DroPix autopilot_ is no longer available on the Drotek website, and is assumed to be discontinued. - -See [PX4 v1.13 Documentation > DroPix Flight Controller](https://docs.px4.io/v1.13/en/flight_controller/dropix.html) for documentation. diff --git a/docs/en/flight_controller/durandal.md b/docs/en/flight_controller/durandal.md index ca104201b3..6d4f198014 100644 --- a/docs/en/flight_controller/durandal.md +++ b/docs/en/flight_controller/durandal.md @@ -1,6 +1,6 @@ # Holybro Durandal -:::warning +::: warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. ::: @@ -19,7 +19,7 @@ At high level, some of the key features are: - Internal vibration isolation system. - Dual high-performance, low-noise IMUs on board are designed for demanding stabilization applications. -A summary of the key features, [assembly](../assembly/quick_start_durandal.md), and [purchase](#purchase) links can be found below. +A summary of the key features, [assembly](../assembly/quick_start_durandal.md), and [purchase](#store) links can be found below. ::: info This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). @@ -86,9 +86,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo For more information see: [Durandal Technical Data Sheet](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Durandal_technical_data_sheet_90f8875d-8035-4632-a936-a0d178062077.pdf). - - -## Where to Buy +## Where to Buy {#store} Order from [Holybro](https://holybro.com/products/durandal). @@ -155,14 +153,14 @@ The [Durandal Wiring Quick Start](../assembly/quick_start_durandal.md) provides ## Building Firmware -:::tip +::: tip Most users will not need to build this firmware! 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: -``` +```sh make holybro_durandal-v1_default ``` @@ -372,7 +370,7 @@ These can also be downloaded from [here](https://cdn.shopifycdn.net/s/files/1/06 -:::warning +::: warning \++ Sensors connected to pins 8, 9 must not send a signal exceeding the indicated voltage. ::: diff --git a/docs/en/flight_controller/gearup_airbrainh743.md b/docs/en/flight_controller/gearup_airbrainh743.md index 98c14710d7..bf612e332d 100644 --- a/docs/en/flight_controller/gearup_airbrainh743.md +++ b/docs/en/flight_controller/gearup_airbrainh743.md @@ -1,6 +1,6 @@ # Gear Up AirBrainH743 -:::warning +::: warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://takeyourgear.com/) for hardware support. ::: @@ -31,7 +31,7 @@ For more information and pinout, check the [GitHub documentation](https://github ## Connectors and Pins -:::warning +::: warning The pin order is different from the Pixhawk standard (compatible to the Betaflight standard). ::: @@ -74,7 +74,7 @@ Download the [gearup_airbrainh743_bootloader.bin](https://github.com/PX4/PX4-Aut To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make gearup_airbrainh743_default ``` @@ -84,13 +84,25 @@ Firmware can be installed in any of the normal ways: - Build and upload the source: - ``` + ```sh make gearup_airbrainh743_default upload ``` - [Load the firmware](../config/firmware.md) using _QGroundControl_. You can use either pre-built firmware or your own custom firmware. +### Flash Storage Troubleshooting + +The AirBrainH743 uses a 128MB NAND flash (W25N) with a littlefs filesystem for [logging](../dev_log/logging.md). +If the flash filesystem becomes corrupted, you can reformat it using the [System Console](../debug/system_console.md): + +```sh +mklittlefs /dev/mtd0 /fs/flash +``` + +This will erase all data on the flash and create a fresh littlefs filesystem. +The filesystem is immediately available after the command completes. + ### System Console UART1 (ttyS0) is configured for use as the [System Console](../debug/system_console.md). diff --git a/docs/en/flight_controller/holybro_pix32.md b/docs/en/flight_controller/holybro_pix32.md index 0c3942a94b..7ef63fc2af 100644 --- a/docs/en/flight_controller/holybro_pix32.md +++ b/docs/en/flight_controller/holybro_pix32.md @@ -1,106 +1,8 @@ + + + +--> diff --git a/docs/en/flight_controller/holybro_pix32_v5.md b/docs/en/flight_controller/holybro_pix32_v5.md index bf34c4d8c5..e3c2acaf5f 100644 --- a/docs/en/flight_controller/holybro_pix32_v5.md +++ b/docs/en/flight_controller/holybro_pix32_v5.md @@ -1,6 +1,6 @@ # Holybro Pix32 v5 -:::warning +::: warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. ::: @@ -71,7 +71,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo Additional information can be found in the [Pix32 V5 Technical Data Sheet](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_PIX32-V5_technical_data_sheet_v1.1.pdf). -## Where to Buy +## Where to Buy {#store} Order from [Holybro website](https://holybro.com/products/pix32-v5). @@ -118,14 +118,14 @@ Under these conditions the system will not draw any power (will not be operation ## Building Firmware -:::tip +::: tip Most users will not need to build this firmware! 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: -``` +```sh make holybro_pix32v5_default ``` diff --git a/docs/en/flight_controller/holybro_pix32_v6.md b/docs/en/flight_controller/holybro_pix32_v6.md index ca2a1355ce..d0ce11e333 100644 --- a/docs/en/flight_controller/holybro_pix32_v6.md +++ b/docs/en/flight_controller/holybro_pix32_v6.md @@ -1,6 +1,6 @@ # Holybro Pix32 v6 -:::warning +::: warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. ::: @@ -12,7 +12,7 @@ It is equipped with a high performance H7 Processor, and comes with IMU redundan @@ -85,7 +85,7 @@ This flight controller is perfect for people that is looking for a affordable an - Other Characteristics: - Operating & storage temperature: -40 ~ 85°c -## Where to Buy +## Where to Buy {#store} Order from [Holybro](https://holybro.com/products/pix32-v6). @@ -141,20 +141,18 @@ Holybro makes various analog [power modules](../power_module/index.md) for diffe ## Building Firmware -:::tip +::: tip Most users will not need to build this firmware! 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: -``` +```sh make px4_fmu-v6c_default ``` - - -## Debug Port +## Debug Port {#debug_port} The [PX4 System Console](../debug/system_console.md) and [SWD interface](../debug/swd_debug.md) run on the **FMU Debug** port. diff --git a/docs/en/flight_controller/kakutef7.md b/docs/en/flight_controller/kakutef7.md index 952d3cd66b..72e2f77c50 100644 --- a/docs/en/flight_controller/kakutef7.md +++ b/docs/en/flight_controller/kakutef7.md @@ -1,142 +1,7 @@ + + + - -## Debug Port - -### System Console - -UART3 RX and TX are configured for use as the [System Console](../debug/system_console.md). - -### SWD - -The [SWD interface](../debug/swd_debug.md) (JTAG) pins are: - -- `SWCLK`: Test Point 2 (Pin 72 on the CPU) -- `SWDIO`: Test Point 3 (Pin 76 on CPU) -- `GND`: As marked on board -- `VDD_3V3`: As marked on board - -These are shown below. - -![SWD Pins on Kakute F7 - CLK SWO](../../assets/flight_controller/kakutef7/debug_swd_port.jpg) ![SWD Pins on Kakute F7: GND and VDD_3V3](../../assets/flight_controller/kakutef7/debug_swd_port_gnd_vcc3_3.jpg) +DOC REMOVED: 202603 +--> diff --git a/docs/en/flight_controller/kakuteh7-wing.md b/docs/en/flight_controller/kakuteh7-wing.md index 2546a5cc01..ccf07f6e7d 100644 --- a/docs/en/flight_controller/kakuteh7-wing.md +++ b/docs/en/flight_controller/kakuteh7-wing.md @@ -2,7 +2,7 @@ -:::warning +::: warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. ::: @@ -13,7 +13,7 @@ The [Holybro Kakute H743 Wing](https://holybro.com/products/kakute-h743-wing) is This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). ::: -## Where to Buy +## Where to Buy {#store} The board can be bought from one of the following shops (for example): @@ -43,7 +43,7 @@ Download the [holybro_kakuteh7-wing.hex](https://github.com/PX4/PX4-Autopilot/ra To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make holybro_kakuteh7-wing_default ``` @@ -58,7 +58,7 @@ Firmware can be manually installed in any of the normal ways: - Build and upload the source: - ``` + ```sh make holybro_kakuteh7-wing_default upload ``` diff --git a/docs/en/flight_controller/kakuteh7.md b/docs/en/flight_controller/kakuteh7.md index b9c798f028..c2cd252a2b 100644 --- a/docs/en/flight_controller/kakuteh7.md +++ b/docs/en/flight_controller/kakuteh7.md @@ -2,7 +2,7 @@ -:::warning +::: warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. ::: @@ -36,13 +36,13 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo - Dimensions: 35x35mm - Weight: 8g -## Where to Buy +## Where to Buy {#store} The board can be bought from one of the following shops (for example): - [Holybro](https://holybro.com/products/kakute-h7) -:::tip +::: tip The _Kakute H7_ is designed to work with the _Tekko32_ 4-in-1 ESC and they can be bought in combination. ::: @@ -102,7 +102,7 @@ The firmware can be installed in any of the normal ways: You can use either pre-built firmware or your own custom firmware. ::: info -If you are loading the pre-built firmware via QGroundcontrol, you must use QGC Daily or QGC version newer than 4.1.7. +If you are loading the pre-built firmware via QGroundControl, you must use QGC Daily or QGC version newer than 4.1.7. ::: ## PX4 Configuration diff --git a/docs/en/flight_controller/kakuteh7mini.md b/docs/en/flight_controller/kakuteh7mini.md index 4a205fa89b..8d9f1d5054 100644 --- a/docs/en/flight_controller/kakuteh7mini.md +++ b/docs/en/flight_controller/kakuteh7mini.md @@ -2,7 +2,7 @@ -:::warning +::: warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. ::: @@ -40,7 +40,7 @@ PX4 runs on the H7 mini v1.3 and later. - Dimensions: 30x31x6mm - Weight: 5.5g -## Where to Buy +## Where to Buy {#store} The board can be bought from one of the following shops (for example): @@ -86,14 +86,14 @@ Download the [holybro_kakuteh7mini_bootloader.hex](https://github.com/PX4/PX4-Au To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make holybro_kakuteh7mini_default ``` ## Installing PX4 Firmware ::: info -If you are loading the pre-built firmware via QGroundcontrol, you must use QGC Daily or QGC version newer than 4.1.7. +If you are loading the pre-built firmware via QGroundControl, you must use QGC Daily or QGC version newer than 4.1.7. Prior to that release you will need to manually build and install the firmware. ::: @@ -101,7 +101,7 @@ Firmware can be manually installed in any of the normal ways: - Build and upload the source: - ``` + ```sh make holybro_kakuteh7mini_default upload ``` diff --git a/docs/en/flight_controller/kakuteh7v2.md b/docs/en/flight_controller/kakuteh7v2.md index c07c416db1..0c2ff5ea4e 100644 --- a/docs/en/flight_controller/kakuteh7v2.md +++ b/docs/en/flight_controller/kakuteh7v2.md @@ -1,6 +1,6 @@ # Holybro Kakute H7 V2 -:::warning +::: warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. ::: @@ -36,13 +36,13 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo - Dimensions: 35x35mm - Weight: 8g -## Where to Buy +## Where to Buy {#store} The board can be bought from one of the following shops (for example): - [Holybro](https://holybro.com/products/kakute-h7-v2) -:::tip +::: tip The _Kakute H7v2_ is designed to work with the _Tekko32_ 4-in-1 ESC and they can be bought in combination. ::: @@ -83,14 +83,14 @@ Download the [holybro_kakuteh7v2_bootloader.hex](https://github.com/PX4/PX4-Auto To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make holybro_kakuteh7v2_default ``` ## Installing PX4 Firmware ::: info -KakuteH7v2 is supported with PX4 master & PX4 v1.14 or newer. If you are loading the pre-built firmware via QGroundcontrol, you must use QGC Daily or QGC version newer than 4.1.7. +KakuteH7v2 is supported with PX4 master & PX4 v1.14 or newer. If you are loading the pre-built firmware via QGroundControl, you must use QGC Daily or QGC version newer than 4.1.7. Prior to that release you will need to manually build and install the firmware. ::: @@ -98,7 +98,7 @@ Firmware can be manually installed in any of the normal ways: - Build and upload the source: - ``` + ```sh make holybro_kakuteh7v2_default upload ``` diff --git a/docs/en/flight_controller/micoair743-lite.md b/docs/en/flight_controller/micoair743-lite.md index 7b3ed25128..d1c334f631 100644 --- a/docs/en/flight_controller/micoair743-lite.md +++ b/docs/en/flight_controller/micoair743-lite.md @@ -2,7 +2,7 @@ -:::warning +::: warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://micoair.com/) for hardware support or compliance issues. ::: @@ -12,7 +12,7 @@ MicoAir743-Lite is an ultra-high performance H743 flight controller with an unbe ![MicoAir743-Lite Front View](../../assets/flight_controller/micoair743_lite/front_view.png) Equipped with a high-performance H7 processor, the MicoAir743-Lite features a compact form factor with SH1.0 connectors (which are more suitable than Pixhawk-standard GH1.25 for this board size). -When paired with with Bluetooth telemetry, the board can be debugged with a phone or PC. +When paired with Bluetooth telemetry, the board can be debugged with a phone or PC. ::: info This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). @@ -67,7 +67,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo ![MicoAir743-Lite Size](../../assets/flight_controller/micoair743_lite/size.png) -## Where to Buy +## Where to Buy {#store} Order from [MicoAir Tech Store](https://store.micoair.com/product/micoair743-lite/). @@ -85,12 +85,12 @@ Pinouts definition can be found in the [MicoAir743-Lite_pinout.xlsx](https://raw | UART4 | /dev/ttyS3 | TELEM2 | | UART5 | /dev/ttyS4 | TELEM3 | | USART6 | /dev/ttyS5 | RC | -| UART7 | /dev/ttyS6 | URT6 | +| UART7 | /dev/ttyS6 | UART6 | | UART8 | /dev/ttyS7 | TELEM4 | ## Interfaces Diagram -::: note +::: info All the connectors used on the board are SH1.0 ::: diff --git a/docs/en/flight_controller/mindpx.md b/docs/en/flight_controller/mindpx.md index 87d96f18de..38692371b6 100644 --- a/docs/en/flight_controller/mindpx.md +++ b/docs/en/flight_controller/mindpx.md @@ -1,6 +1,6 @@ # MindPX Hardware -:::warning +::: warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](http://mindpx.net) for hardware support or compliance issues. ::: @@ -19,7 +19,7 @@ These flight controllers are [manufacturer supported](../flight_controller/autop The main hardware documentation is [here](http://mindpx.net/assets/accessories/Specification9.18_3_pdf.pdf). ::: -MindPX is a new generation autopilot system branched from Pixhawk®, been revised in schematic and structure, and been further enhanced with new features to make un-manned vehicle more smart and more friendly to use. +MindPX is a new generation autopilot system branched from Pixhawk®, has been revised in schematic and structure, and has been further enhanced with new features to make unmanned vehicle more smart and more friendly to use. MindPX increases total PWM output channels to 16 (8 main outputs + 8 aux outputs). This means that MindPX can support more complicated VTOL configurations and more fine control. @@ -79,14 +79,14 @@ For detailed Pin diagram, please refer to the [User Guide](http://mindpx.net/ass ### Building Firmware -:::tip +::: tip Most users will not need to build this firmware! 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: -``` +```sh make airmind_mindpx-v2_default ``` @@ -96,7 +96,7 @@ MindPX has a USB-TO-UART Bridge IC on the board. A micro-USB to USB type A cable is used for the connection. Connect micro-USB end to the 'OBC' port of MindPX and USB type A end to companion computer. -And the max BAUD rate is the same with px4 family, which is up to 921600. +And the max BAUD rate is the same as for the PX4 family, which is up to 921600. ## User Guide @@ -104,7 +104,7 @@ And the max BAUD rate is the same with px4 family, which is up to 921600. The user guide is [here](http://mindpx.net/assets/accessories/UserGuide9.18_2_pdf.pdf). ::: -## Where to Buy +## Where to Buy {#store} MindRacer is available at [AirMind Store](https://airmind.mindpx.net/catalog). You can also find MindRacer at Amazon® or eBay®. diff --git a/docs/en/flight_controller/mindracer.md b/docs/en/flight_controller/mindracer.md index 39dc1e5193..1e51d39d79 100644 --- a/docs/en/flight_controller/mindracer.md +++ b/docs/en/flight_controller/mindracer.md @@ -1,6 +1,6 @@ # MindRacer Hardware -:::warning +::: warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](http://mindpx.net) for hardware support or compliance issues. ::: @@ -59,14 +59,14 @@ The main hardware documentation is [here](http://mindpx.net/assets/accessories/m ### How to Build -:::tip +::: tip Most users will not need to build this firmware! 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: -``` +```sh make airmind_mindpx-v2_default ``` @@ -79,7 +79,7 @@ MindRacer has an attached Adapt IO board. MindRacer has a built-in UART-to-USB converter. To connect a companion computer, stack MindRacer on an interface board, and connect the companion computer to the USB port on the interface board. -And the max BAUD rate is the same with px4 family, which is up to 921600. +And the max BAUD rate is the same as for the PX4 family, which is up to 921600. ### User Guide @@ -87,7 +87,7 @@ And the max BAUD rate is the same with px4 family, which is up to 921600. The user guide is [here](http://mindpx.net/assets/accessories/mindracer_user_guide_v1.2.pdf) ::: -## Where to Buy +## Where to Buy {#store} MindRacer is available at [AirMind Store](https://airmind.mindpx.net/catalog). You can also find MindRacer at Amazon® or eBay®. diff --git a/docs/en/flight_controller/modalai_fc_v1.md b/docs/en/flight_controller/modalai_fc_v1.md index fdba7bec24..c7729f854a 100644 --- a/docs/en/flight_controller/modalai_fc_v1.md +++ b/docs/en/flight_controller/modalai_fc_v1.md @@ -1,146 +1,7 @@ -# ModalAI Flight Core v1 + - + - -[stm32f765ii]: https://www.st.com/en/microcontrollers-microprocessors/stm32f765ii.html -[bmp388]: https://www.adafruit.com/product/3966 -[icm-20602]: https://invensense.tdk.com/products/motion-tracking/6-axis/icm-20602/ -[bmi088]: https://www.bosch-sensortec.com/products/motion-sensors/imus/bmi088/ -[px4]: https://github.com/PX4/PX4-Autopilot/tree/main/boards/modalai/fc-v1 -[a71ch]: https://www.nxp.com/products/security-and-authentication/authentication/plug-and-trust-the-fast-easy-way-to-deploy-secure-iot-connections:A71CH - -## Dimensions - -![FlightCoreV1Dimensions](../../assets/flight_controller/modalai/fc_v1/dimensions.png) - -## PX4 Firmware Compatibility - -_Flight Core v1_ is fully compatible with the official PX4 Firmware from PX4 v1.11. - -ModalAI maintains a [branched PX4 version](https://github.com/modalai/px4-firmware/tree/modalai-1.11) for PX4 v1.11. -This includes UART ESC support and improvements in VIO and VOA that are planned to be upstreamed. - -More information about the firmware can be found [here](https://docs.modalai.com/flight-core-firmware/). - -## QGroundControl Support - -This board supported in QGroundControl 4.0 and later. - -## Availability - -- No longer available - -## Quick Start - -### Orientation - -The diagram below shows the recommended orientation, which corresponds to `ROTATION_NONE` starting with PX4 v1.11. - -![FlightCoreV1Orientation](../../assets/flight_controller/modalai/fc_v1/orientation.png) - -### Connectors - -Detailed information about the pinouts can be found [here](https://docs.modalai.com/flight-core-datasheet-connectors). - -![FlightCoreV1Top](../../assets/flight_controller/modalai/fc_v1/top.png) - -| Connector | Summary | -| --------- | ---------------------------------------------------------- | -| J1 | VOXL Communications Interface Connector (TELEM2) | -| J2 | Programming and Debug Connector | -| J3 | USB Connector | -| J4 | UART2, UART ESC (TELEM3) | -| J5 | Telemetry Connector (TELEM1) | -| J6 | VOXL-Power Management Input / Expansion | -| J7 | 8-Channel PWM Output Connector | -| J8 | CAN Bus Connector | -| J9 | PPM RC In | -| J10 | External GPS & Magnetometer Connector | -| J12 | RC input, Spektrum/SBus/UART Connector | -| J13 | I2C Display (Spare Sensor Connector) / Safety Button Input | - -![FlightCoreV1Bottom](../../assets/flight_controller/modalai/fc_v1/bottom.png) - -### User Guide - -The full user guide is available [here](https://docs.modalai.com/flight-core-manual/). - -### How to Build - -To [build PX4](../dev_setup/building_px4.md) for this target: - -``` -make modalai_fc-v1 -``` - -## Serial Port Mapping - -| UART | Device | Port | -| ------ | ---------- | ---------------------------------------- | -| USART1 | /dev/ttyS0 | GPS1 (J10) | -| USART2 | /dev/ttyS1 | TELEM3 (J4) | -| USART3 | /dev/ttyS2 | Debug Console (J2) | -| UART4 | /dev/ttyS3 | Expansion UART (J6) | -| UART5 | /dev/ttyS4 | TELEM2, Primary VOXL Communications (J1) | -| USART6 | /dev/ttyS5 | RC (J12) | -| UART7 | /dev/ttyS6 | TELEM1 (J5) | -| UART8 | /dev/ttyS7 | N/A | - - - -## Support - -Please visit the [ModalAI Forum](https://forum.modalai.com/category/10/flight-core) for more information. +DOC REMOVED: 202603 +--> diff --git a/docs/en/flight_controller/modalai_voxl_2.md b/docs/en/flight_controller/modalai_voxl_2.md index 7f4f9e2214..c09b34f7e7 100644 --- a/docs/en/flight_controller/modalai_voxl_2.md +++ b/docs/en/flight_controller/modalai_voxl_2.md @@ -1,11 +1,11 @@ # ModalAI VOXL 2 -:::warning +::: warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://forum.modalai.com/) for hardware support or compliance issues. ::: -The ModalAI [VOXL 2](https://modalai.com/voxl-2) ([Datasheet](https://docs.modalai.com/voxl2-datasheets/)) is ModalAI’s next-gen autonomous computing platform built around the Qualcomm QRB5165 processor. VOXL 2 boasts 8 cores, integrated PX4, seven camera concurrency, advanced onboard AI up to 15+ TOPS, and 5G connectivity. At 16 grams, VOXL 2 is the future of fully autonomous and connected drones! +The ModalAI [VOXL 2](https://www.modalai.com/products/voxl-2) ([Datasheet](https://docs.modalai.com/voxl2-datasheets/)) is ModalAI's next-gen autonomous computing platform built around the Qualcomm QRB5165 processor. VOXL 2 boasts 8 cores, integrated PX4, seven camera concurrency, advanced onboard AI up to 15+ TOPS, and 5G connectivity. At 16 grams, VOXL 2 is the future of fully autonomous and connected drones! ![VOXL-2](../../assets/flight_controller/modalai/voxl_2/voxl-2-hero.jpg) @@ -62,7 +62,7 @@ ModalAI is actively maintaining a [branched PX4 version](https://github.com/moda As VOXL 2 runs Ubuntu, the production releases of PX4 for VOXL 2 are distributed through [apt package management](https://docs.modalai.com/configure-pkg-manager/) and the [VOXL SDK](https://docs.modalai.com/voxl-sdk/). -More information about the firmware can be found [here](https://docs.modalai.com/voxl2-px4-developer-guide/). +More information about the firmware can be found [here](https://docs.modalai.com/voxl-px4/). ### main branch @@ -70,7 +70,7 @@ PX4 mainline supports VOXL 2 (board documentation [here](https://github.com/PX4/ ## QGroundControl Support -This board supported in QGroundControl 4.0 and later. +This board is supported in QGroundControl 4.0 and later. ## Availability @@ -78,17 +78,16 @@ This board supported in QGroundControl 4.0 and later. - [Starling 2 MAX](https://www.modalai.com/products/starling-2-max) - [Sentinel Development Drone powered by VOXL 2](https://www.modalai.com/pages/sentinel) - [Demo Video](https://www.youtube.com/watch?v=hMhQgWPLGXo) -- [VOXL 2 Flight Deck, ready to mount, tune and fly](https://www.modalai.com/collections/ready-to-mount/products/voxl-2-flight-deck) - [VOXL 2 Development Kits](https://www.modalai.com/products/voxl-2) - [Demo Video](https://www.youtube.com/watch?v=aVHBWbwp488) ## Quick Start -Quickstarts from the vendor are located [here](https://docs.modalai.com/voxl2-quickstarts/). +Quickstarts from the vendor are located [here](https://docs.modalai.com/voxl-2-hardware-quickstart/). ### VOXL SDK -VOXL SDK (Software Development Kit) consists of the open source [voxl-px4](https://docs.modalai.com/voxl-px4/), [core libraries](https://docs.modalai.com/core-libs/), [services](https://docs.modalai.com/mpa-services/), [tools](https://docs.modalai.com/inspect-tools/), [utilities](https://docs.modalai.com/sdk-utilities/), and [build environments](https://docs.modalai.com/build-environments/) that ModalAI provide to accelerate the use and development of VOXL compute boards and accessories. +VOXL SDK (Software Development Kit) consists of the open source [voxl-px4](https://docs.modalai.com/voxl-px4/), [core libraries](https://docs.modalai.com/core-libs/), [services](https://docs.modalai.com/mpa-services/), [tools](https://docs.modalai.com/inspect-tools/), and [build environments](https://docs.modalai.com/build-environments/) that ModalAI provide to accelerate the use and development of VOXL compute boards and accessories. VOXL SDK runs on VOXL, VOXL 2 and RB5 Flight! @@ -123,11 +122,11 @@ The PX4 user guide for VOXL 2 is available [here](https://docs.modalai.com/voxl- ### Developer Guide -The PX4 developer guide for VOXL 2 is available [here](https://docs.modalai.com/voxl-px4-developer-guide/). +The PX4 developer guide for VOXL 2 is available [here](https://docs.modalai.com/voxl-px4/). ### How to Build -See the [VOXL PX4 Build Guide](https://docs.modalai.com/voxl2-px4-build-guide/) on how to build. +See the [VOXL PX4 Build Guide](https://docs.modalai.com/voxl-px4-dev-build-guide/) on how to build. ## Support diff --git a/docs/en/flight_controller/modalai_voxl_flight.md b/docs/en/flight_controller/modalai_voxl_flight.md index 68d9bfbf0f..7f5ee9210d 100644 --- a/docs/en/flight_controller/modalai_voxl_flight.md +++ b/docs/en/flight_controller/modalai_voxl_flight.md @@ -1,202 +1,7 @@ -# ModalAI VOXL Flight + - + - -[stm32f765ii]: https://www.st.com/en/microcontrollers-microprocessors/stm32f765ii.html -[px4]: https://github.com/PX4/PX4-Autopilot/tree/main/boards/modalai/fc-v1 -[icm-20602]: https://invensense.tdk.com/products/motion-tracking/6-axis/icm-20602/ -[bmi088]: https://www.bosch-sensortec.com/products/motion-sensors/imus/bmi088/ -[bmp388]: https://www.adafruit.com/product/3966 -[a71ch]: https://www.nxp.com/products/security-and-authentication/authentication/plug-and-trust-the-fast-easy-way-to-deploy-secure-iot-connections:A71CH - -::: info -More detailed hardware documentation can be found [here](https://docs.modalai.com/voxl-flight-datasheet/). -::: - -## Dimensions - -![FlightCoreV1Dimensions](../../assets/flight_controller/modalai/voxl_flight/voxl-flight-dimensions.jpg) - -[3D STEP File](https://storage.googleapis.com/modalai_public/modal_drawings/M0019_VOXL-Flight.zip) - -## PX4 Firmware Compatibility - -_VOXL Flight_ is fully compatible with the official PX4 Firmware from PX4 v1.11. - -ModalAI maintains a [branched PX4 version](https://github.com/modalai/px4-firmware/tree/modalai-1.11) for PX4 v1.11. -This includes UART ESC support and improvements in VIO and VOA that are planned to be upstreamed. - -More information about the firmware can be found [here](https://docs.modalai.com/flight-core-firmware/). - -## QGroundControl Support - -This board supported in QGroundControl 4.0 and later. - -## Availability - -No longer available. - -## Quick Start - -A quickstart from the vendor is located [here](https://docs.modalai.com/voxl-flight-quickstart/). - -### voxl-vision-px4 - -The VOXL Flight runs [voxl-vision-px4](https://gitlab.com/voxl-public/modal-pipe-architecture/voxl-vision-px4) on the companion computer portion of the hardware serving as a sort of MAVLink proxy. -For details, the source code is available [here](https://gitlab.com/voxl-public/modal-pipe-architecture/voxl-vision-px4) - -### Connectors - -Detailed information about the pinouts can be found [here](https://docs.modalai.com/voxl-flight-datasheet-connectors/). - -#### Top - -![VOXLFlightTop](../../assets/flight_controller/modalai/voxl_flight/voxl-flight-top.jpg) - -_Note: 1000 Series connectors accessible from the STM32/PX4_ - -| Connector | Summary | Used By | -| --------- | -------------------------------------- | --------------------------------- | -| J2 | Hires 4k Image Sensor (CSI0) | Snapdragon - Linux | -| J3 | Stereo Image Sensor (CSI1) | Snapdragon - Linux | -| J6 | Cooling Fan Connector | Snapdragon - Linux | -| J7 | BLSP6 (GPIO) and BLSP9 (UART) | Snapdragon - Linux | -| J13 | Expansion B2B | Snapdragon - Linux | -| J14 | Integrated GNSS Antenna Connection | Snapdragon - Linux | -| J1001 | Programming and Debug/UART3 | STM32 - PX4 | -| J1002 | UART ESC, UART2/TELEM3 | STM32 - PX4 | -| J1003 | PPM RC In | STM32 - PX4 | -| J1004 | RC Input, Spektrum/SBus/UART6 | STM32 - PX4 | -| J1006 | USB 2.0 Connector (PX4/QGroundControl) | STM32 - PX4 | -| J1007 | 8-Channel PWM/DShot Output | STM32 - PX4 | -| J1008 | CAN Bus | STM32 - PX4 | -| J1009 | I2C3, UART4 | STM32 - PX4 | -| J1010 | Telemetry (TELEM1) | STM32 - PX4 | -| J1011 | I2C2, Safety Button Input | STM32 - PX4 | -| J1012 | External GPS & Mag, UART1, I2C1 | STM32 - PX4 | -| J1013 | Power Input, I2C3 | STM32 - PX4 (powers whole system) | - -#### Bottom - -![VOXLFlightBottom](../../assets/flight_controller/modalai/voxl_flight/voxl-flight-bottom.jpg) - -_Note: 1000 Series connectors accessible from the STM32/PX4_ - -| Connector | Summary | Used By | -| -------------- | --------------------------------------- | --------------------------- | -| J4 | Tracking/Optic Flow Image Sensor (CSI2) | Snapdragon - Linux | -| J8 | USB 3.0 OTG | Snapdragon - Linux, **adb** | -| J10 | BLSP7 UART and I2C off-board | Snapdragon - Linux | -| J11 | BLSP12 UART and I2C off-board | Snapdragon - Linux | -| VOXL microSD | | Snapdragon - Linux | -| PX4 microSD | 32Gb Max | STM32 - PX4 | -| Wi-Fi Antennas | Included | Snapdragon - Linux | - -### User Guide - -The full user guide is available [here](https://docs.modalai.com/voxl-flight-quickstart). - -### How to Build - -To [build PX4](../dev_setup/building_px4.md) for this target: - -``` -make modalai_fc-v1 -``` - -## Serial Port Mapping - -_Note: mappings shown are for the PX4 controlled interfaces only_ - -| UART | Device | Port | -| ------ | ---------- | --------------------------------------- | -| USART1 | /dev/ttyS0 | GPS1 (J1012) | -| USART2 | /dev/ttyS1 | TELEM3 (J1002) | -| USART3 | /dev/ttyS2 | Debug Console (J1001) | -| UART4 | /dev/ttyS3 | Expansion UART (J6) | -| UART5 | /dev/ttyS4 | UART between PX4 and Companion Computer | -| USART6 | /dev/ttyS5 | RC (J1004) | -| UART7 | /dev/ttyS6 | TELEM1 (J1010) | -| UART8 | /dev/ttyS7 | N/A | - - - -## Support - -Please visit the [ModalAI Forum](https://forum.modalai.com/category/8/voxl-flight) for more information. +DOC REMOVED: 202603 +--> diff --git a/docs/en/flight_controller/mro_control_zero_f7.md b/docs/en/flight_controller/mro_control_zero_f7.md index 8364326cf2..d40d8882a0 100644 --- a/docs/en/flight_controller/mro_control_zero_f7.md +++ b/docs/en/flight_controller/mro_control_zero_f7.md @@ -1,6 +1,6 @@ # mRo Control Zero F7 Flight Controller -:::warning +::: warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://store.mrobotics.io/) for hardware support or compliance issues. ::: @@ -30,7 +30,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo - [Bosch BMI088](https://www.bosch-sensortec.com/products/motion-sensors/imus/bmi088/) 3-axis accelerometer/gyroscope (internally vibration dampened) - [Invensense ICM-20602](https://invensense.tdk.com/products/motion-tracking/6-axis/icm-20602/) 3-axis accelerometer/gyroscope - [Invensense ICM-20948](https://invensense.tdk.com/products/motion-tracking/9-axis/icm-20948/) 3-axis accelerometer/gyroscope/magnetometer - - [Infineon DPS310 barometer](https://www.infineon.com/assets/row/public/documents/24/49/infineon-dps310-datasheet-en.pdf) - [Discontinued](https://www.infineon.com/part/DPS310) (So smooth and NO more light sensitivity) + - Infineon DPS310 barometer - [Discontinued](https://www.infineon.com/products/sensor/pressure-sensors/pressure-sensors-for-iot) (So smooth and NO more light sensitivity) - Interfaces: - 6x UART (serial ports total), 3x with HW flow control, 1x FRSky Telemetry (D or X types), 1x Console and 1x GPS+I2C @@ -56,31 +56,31 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo - Power System: - 3x Ultra low noise LDO voltage regulator -## Where to Buy +## Where to Buy {#store} - [mRo Control Zero](https://store.mrobotics.io/mRo-Control-Zero-F7-p/mro-ctrl-zero-f7.htm) ## Building Firmware -:::tip +::: tip Most users will not need to build this firmware! 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: -``` +```sh make mro_ctrl-zero-f7 ``` -## Debug Ports +## Debug Ports {#debug_port} ### Console Port The [PX4 System Console](../debug/system_console.md) runs on `USART7` using the pins listed below. This is a standard serial pinout, designed to connect to a [3.3V FTDI](https://www.digikey.com/en/products/detail/TTL-232R-3V3/768-1015-ND/1836393) cable (5V tolerant). -| mRo control zero f7 | | FTDI | +| mRo control zero f7 | | FTDI | | | ------------------- | ----------- | ---- | ---------------- | | 17 | USART7 Tx | 5 | FTDI RX (yellow) | | 19 | USART7 Rx | 4 | FTDI TX (orange) | diff --git a/docs/en/flight_controller/mro_pixhawk.md b/docs/en/flight_controller/mro_pixhawk.md index 8b8b467538..9c435867b0 100644 --- a/docs/en/flight_controller/mro_pixhawk.md +++ b/docs/en/flight_controller/mro_pixhawk.md @@ -1,13 +1,13 @@ # mRo Pixhawk Flight Controller (Pixhawk 1) -:::warning +::: warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://store.mrobotics.io/) for hardware support or compliance issues. ::: The _mRo Pixhawk®_ is a hardware compatible version of the original [Pixhawk 1](../flight_controller/pixhawk.md). It runs PX4 on the [NuttX](https://nuttx.apache.org/) OS. -:::tip +::: tip The controller can be used as a drop-in replacement for the 3DR® [Pixhawk 1](../flight_controller/pixhawk.md). The main difference is that it is based on the [Pixhawk-project](https://pixhawk.org/) **FMUv3** open hardware design, which corrects a bug that limited the original Pixhawk 1 to 1MB of flash. ::: @@ -16,7 +16,7 @@ The main difference is that it is based on the [Pixhawk-project](https://pixhawk Assembly/setup instructions for use with PX4 are provided here: [Pixhawk Wiring Quickstart](../assembly/quick_start_pixhawk.md) -:::tip +::: tip This autopilot is [supported](../flight_controller/autopilot_pixhawk_standard.md) by the PX4 maintenance and test teams. ::: @@ -62,24 +62,185 @@ This autopilot is [supported](../flight_controller/autopilot_pixhawk_standard.md ## Building Firmware -:::tip +::: tip Most users will not need to build this firmware! 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: -``` +```sh make px4_fmu-v3_default ``` ## Debug Ports -See [3DR Pixhawk 1 > Debug Ports](../flight_controller/pixhawk.md#debug-ports) +### Console Port + +The [PX4 System Console](../debug/system_console.md) runs on the port labeled [SERIAL4/5](#serial-4-5-port). + +::: tip +A convenient way to connect to the console is to use a [Zubax BugFace BF1](https://github.com/Zubax/bugface_bf1), as it comes with connectors that can be used with several different Pixhawk devices. +Simply connect the 6-pos DF13 1:1 cable on the [Zubax BugFace BF1](https://github.com/Zubax/bugface_bf1) to the Pixhawk `SERIAL4/5` port. + +![Zubax BugFace BF1](../../assets/flight_controller/mro/dronecode_probe.jpg) +::: + +The pinout is standard serial pinout, designed to connect to a [3.3V FTDI](https://www.digikey.com/en/products/detail/TTL-232R-3V3/768-1015-ND/1836393) cable (5V tolerant). + +| 3DR Pixhawk 1 | | FTDI | | +| ------------- | --------- | ---- | ---------------- | +| 1 | +5V (red) | | N/C | +| 2 | S4 Tx | | N/C | +| 3 | S4 Rx | | N/C | +| 4 | S5 Tx | 5 | FTDI RX (yellow) | +| 5 | S5 Rx | 4 | FTDI TX (orange) | +| 6 | GND | 1 | FTDI GND (black) | + +The wiring for an FTDI cable to a 6-pos DF13 1:1 connector is shown in the figure below. + +![Console Connector](../../assets/flight_controller/mro/console_connector.jpg) + +The complete wiring is shown below. + +![Console Debug](../../assets/flight_controller/mro/console_debug.jpg) + +::: info +For information on how to _use_ the console see: [System Console](../debug/system_console.md). +::: + +### SWD Port + +The [SWD](../debug/swd_debug.md) (JTAG) ports are hidden under the cover (which must be removed for hardware debugging). +There are separate ports for FMU and IO, as highlighted below. + +![Pixhawk SWD](../../assets/flight_controller/mro/pixhawk_swd.jpg) + +The ports are ARM 10-pin JTAG connectors, which you will probably have to solder. +The pinout for the ports is shown below (the square markers in the corners above indicates pin 1). + +![ARM 10-Pin connector pinout](../../assets/flight_controller/mro/arm_10pin_jtag_connector_pinout.jpg) + +::: info +All Pixhawk FMUv2 boards have a similar SWD port. +::: ## Pinouts -See [3DR Pixhawk 1 > Pinouts](../flight_controller/pixhawk.md#pinouts) +#### TELEM1, TELEM2 ports + +| Pin | Signal | Volt | +| ------- | --------- | ----- | +| 1 (red) | VCC | +5V | +| 2 (blk) | TX (OUT) | +3.3V | +| 3 (blk) | RX (IN) | +3.3V | +| 4 (blk) | CTS (IN) | +3.3V | +| 5 (blk) | RTS (OUT) | +3.3V | +| 6 (blk) | GND | GND | + +#### GPS port + +| Pin | Signal | Volt | +| ------- | -------- | ----- | +| 1 (red) | VCC | +5V | +| 2 (blk) | TX (OUT) | +3.3V | +| 3 (blk) | RX (IN) | +3.3V | +| 4 (blk) | CAN2 TX | +3.3V | +| 5 (blk) | CAN2 RX | +3.3V | +| 6 (blk) | GND | GND | + +#### SERIAL 4/5 port + +Due to space constraints two ports are on one connector. + +| Pin | Signal | Volt | +| ------- | ------- | ----- | +| 1 (red) | VCC | +5V | +| 2 (blk) | TX (#4) | +3.3V | +| 3 (blk) | RX (#4) | +3.3V | +| 4 (blk) | TX (#5) | +3.3V | +| 5 (blk) | RX (#5) | +3.3V | +| 6 (blk) | GND | GND | + +#### ADC 6.6V + +| Pin | Signal | Volt | +| ------- | ------ | ----------- | +| 1 (red) | VCC | +5V | +| 2 (blk) | ADC IN | up to +6.6V | +| 3 (blk) | GND | GND | + +#### ADC 3.3V + +| Pin | Signal | Volt | +| ------- | ------ | ----------- | +| 1 (red) | VCC | +5V | +| 2 (blk) | ADC IN | up to +3.3V | +| 3 (blk) | GND | GND | +| 4 (blk) | ADC IN | up to +3.3V | +| 5 (blk) | GND | GND | + +#### I2C + +| Pin | Signal | Volt | +| ------- | ------ | -------------- | +| 1 (red) | VCC | +5V | +| 2 (blk) | SCL | +3.3 (pullups) | +| 3 (blk) | SDA | +3.3 (pullups) | +| 4 (blk) | GND | GND | + +#### CAN + +| Pin | Signal | Volt | +| ------- | ------ | ---- | +| 1 (red) | VCC | +5V | +| 2 (blk) | CAN_H | +12V | +| 3 (blk) | CAN_L | +12V | +| 4 (blk) | GND | GND | + +#### SPI + +| Pin | Signal | Volt | +| ------- | ------------ | ---- | +| 1 (red) | VCC | +5V | +| 2 (blk) | SPI_EXT_SCK | +3.3 | +| 3 (blk) | SPI_EXT_MISO | +3.3 | +| 4 (blk) | SPI_EXT_MOSI | +3.3 | +| 5 (blk) | !SPI_EXT_NSS | +3.3 | +| 6 (blk) | !GPIO_EXT | +3.3 | +| 7 (blk) | GND | GND | + +#### POWER + +| Pin | Signal | Volt | +| ------- | ------- | ----- | +| 1 (red) | VCC | +5V | +| 2 (blk) | VCC | +5V | +| 3 (blk) | CURRENT | +3.3V | +| 4 (blk) | VOLTAGE | +3.3V | +| 5 (blk) | GND | GND | +| 6 (blk) | GND | GND | + +#### SWITCH + +| Pin | Signal | Volt | +| ------- | -------------- | ----- | +| 1 (red) | VCC | +3.3V | +| 2 (blk) | !IO_LED_SAFETY | GND | +| 3 (blk) | SAFETY | GND | + +## Serial Port Mapping + +| UART | Device | Port | +| ------ | ---------- | --------------------- | +| UART1 | /dev/ttyS0 | IO debug | +| USART2 | /dev/ttyS1 | TELEM1 (flow control) | +| USART3 | /dev/ttyS2 | TELEM2 (flow control) | +| UART4 | | +| UART7 | CONSOLE | +| UART8 | SERIAL4 | + + ## Serial Port Mapping diff --git a/docs/en/flight_controller/mro_x2.1.md b/docs/en/flight_controller/mro_x2.1.md index a0333c74de..1be40508d7 100644 --- a/docs/en/flight_controller/mro_x2.1.md +++ b/docs/en/flight_controller/mro_x2.1.md @@ -1,122 +1,10 @@ + + + +Doc removed 202603 + text="Discontinued" 202507 / PX4v1.16 -:::warning -This flight controller has been [discontinued](../flight_controller/autopilot_experimental.md) and is no longer commercially available. -::: - -:::warning -PX4 does not manufacture this (or any) autopilot. -Contact the [manufacturer](https://store.mrobotics.io/) for hardware support or compliance issues. -::: - -The [mRo-X2.1 autopilot](http://www.mRobotics.io/) is based on the [Pixhawk®-project](https://pixhawk.org/) **FMUv2** open hardware design. -It runs PX4 on the [NuttX](https://nuttx.apache.org/) OS. - -![mRo X2.1](../../assets/flight_controller/mro/mro_x2.1.jpg) - -::: info -This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). -::: - -## Quick Summary - -- Main System-on-Chip: [STM32F427](https://www.st.com/en/microcontrollers-microprocessors/stm32f427-437.html) - - CPU: STM32F427VIT6 ARM® microcontroller - Revision 3 - - IO: STM32F100C8T6 ARM® microcontroller -- Sensors: - - Invensense® MPU9250 9DOF - - Invensense ICM-20602 6DOF - - MEAS MS5611 barometer -- Dimensions/Weight - - Size: 36mm x 50mm - (Can be ordered with vertical, horizontal or no headers installed) - - Mounting Points: 30.5mm x 30.5mm 3.2mm diameter - - Weight: 10.9g - -The diagram below provides a side-by-side comparison with a Pixhawk 1. -The mRo features almost identical hardware and connectivity but -has a much smaller footprint. -Major differences are updated sensors and Rev 3 FMU. - -![Mro Pixhawk 1 vs X2.1 comparison](../../assets/flight_controller/mro/px1_x21.jpg) - -## Connectivity - -- 2.54mm headers: -- GPS (UART4) with I2C -- CAN Bus -- RC input -- PPM input -- Spektrum input -- RSSI input -- sBus input -- sBus output -- Power input -- Buzzer output -- LED output -- 8 x Servo outputs -- 6 x Aux outputs -- Offboard microUSB connector -- Kill Pin output _(Currently not supported by firmware)_ -- AirSpeed Sensor -- USART2 (Telem 1) -- USART3 (Telem 2) -- UART7 (Console) -- UART8 (OSD) - -## PX4 BootLoader Issue - -By default a mRo X2.1 might come preconfigured for ArduPilot® rather than PX4. This -can be seen during firmware update when the board is recognized as FMUv2 instead of X2.1. - -In this case you must update the BootLoader using [BL_Update_X21.zip](https://github.com/PX4/PX4-Autopilot/raw/main/docs/assets/hardware/BL_Update_X21.zip). -If this correction is not carried out your compass direction will be wrong and the -secondary IMU will not be detected. - -The update steps are: - -1. Download and extract [BL_Update_X21.zip](https://github.com/PX4/PX4-Autopilot/raw/main/docs/assets/hardware/BL_Update_X21.zip). -2. Find the folder _BL_Update_X21_. This contains a **bin** file and a subfolder named **/etc** containing an **rc.txt** file -3. Copy these files to your micro SD card's root directory and insert it into the mRO x2.1 -4. Power on the mRO x2.1 Wait for it to boot and then reboot 1 time. - -## Availability - -This product can be ordered at the [mRobotics® Store](https://store.mrobotics.io/mRo-X2-1-Rev-2-p/m10021a.htm). - -## Wiring Guide - -![mRo_X2.1_Wiring](../../assets/flight_controller/mro/mro_x21_wiring.png) - -## Building Firmware - -:::tip -Most users will not need to build this firmware! -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: - -``` -make mro_x21_default -``` - -## Schematics - -The board is documented on the mRo hardware repo: [x21_V2_schematic.pdf](https://github.com/mRoboticsIO/Hardware/blob/master/X2.1/Docs/x21_V2_schematic.pdf). - -## Serial Port Mapping - -| UART | Device | Port | -| ------ | ---------- | --------------- | -| USART1 | /dev/ttyS0 | IO debug | -| USART2 | /dev/ttyS1 | SERIAL1 | -| USART3 | /dev/ttyS2 | TELEM2 | -| UART4 | /dev/ttyS3 | GPS/I2C | -| USART6 | /dev/ttyS4 | PX4IO | -| UART7 | /dev/ttyS5 | SERIAL5 CONSOLE | -| UART8 | /dev/ttyS6 | SERIAL4 | - - +Note: Got ports using https://github.com/PX4/PX4-user_guide/pull/672#issuecomment-598198434 +--> diff --git a/docs/en/flight_controller/nxp_mr_vmu_rt1176.md b/docs/en/flight_controller/nxp_mr_vmu_rt1176.md index 972823967c..3b4e7ff027 100644 --- a/docs/en/flight_controller/nxp_mr_vmu_rt1176.md +++ b/docs/en/flight_controller/nxp_mr_vmu_rt1176.md @@ -2,7 +2,7 @@ -:::warning +::: warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://www.nxp.com) for hardware support (https://community.nxp.com/) or compliance issues. ::: @@ -23,7 +23,7 @@ It also removes the IO processor to enable 12 PWM ports, with 8 providing Dshot This board takes advantage of multiple Pixhawk​​® open standards, such as the FMUv6X-RT Standard, [Autopilot Bus Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-010%20Pixhawk%20Autopilot%20Bus%20Standard.pdf), and [Connector Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-009%20Pixhawk%20Connector%20Standard.pdf). Equipped with a high performance NXP i.mx RT1176 dual core Processor, modular design, triple redundancy, temperature-controlled IMU board, isolated sensor domains, delivering incredible performance, reliability, and flexibility. -:::tip +::: tip This autopilot is [supported](../flight_controller/autopilot_pixhawk_standard.md) by the PX4 maintenance and test teams. ::: @@ -133,7 +133,7 @@ Similar variants will be available from our licensees. - Other Characteristics: - Operating & storage temperature: -40 ~ 85°c -## Where to Buy +## Where to Buy {#store} Order from [NXP](https://www.nxp.com). @@ -214,7 +214,7 @@ Analog battery monitoring via an ADC is not supported on this particular board, ## Building Firmware -:::tip +::: tip Most users will not need to build this firmware! It is pre-built and automatically installed by _QGroundControl_ when appropriate hardware is connected. ::: diff --git a/docs/en/flight_controller/nxp_rddrone_fmuk66.md b/docs/en/flight_controller/nxp_rddrone_fmuk66.md index 863254bd67..b57415577c 100644 --- a/docs/en/flight_controller/nxp_rddrone_fmuk66.md +++ b/docs/en/flight_controller/nxp_rddrone_fmuk66.md @@ -1,131 +1,7 @@ + + + - -## Where to Buy - -**RDDRONE-FMUK66** reference design kit may be purchased direct from NXP or from any of NXP's authorised worldwide network of [electronics distributors](https://www.nxp.com/support/sample-and-buy/distributor-network:DISTRIBUTORS). - -- [Purchase Link](https://www.nxp.com/design/design-center/development-boards-and-designs/px4-robotic-drone-vehicle-flight-management-unit-vmu-fmu-rddrone-fmuk66:RDDRONE-FMUK66#buy) (www.nxp.com) -- Telemetry radios are purchased separately depending on frequency band: - - [HGD-TELEM433](https://www.nxp.com/part/HGD-TELEM433) - - [HGD-TELEM915](https://www.nxp.com/part/HGD-TELEM915) - -::: info -_RDDRONE-FMUK66_ FMU is also included in the complete HoverGames drone kit: [KIT-HGDRONEK66](https://www.nxp.com/design/design-center/development-boards-and-designs/nxp-hovergames-drone-kit-including-flight-controller-and-peripherals:KIT-HGDRONEK66#buy) -::: - - - -## Assembly/Setup - -https://nxp.gitbook.io/hovergames - -## Building Firmware - -:::tip -Most users will not need to build this firmware! -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: - -``` -make nxp_fmuk66-v3_default -``` - -## Debug Port - -The [PX4 System Console](../debug/system_console.md) and the [SWD interface](../debug/swd_debug.md) run on the [DCD-LZ FMU Debug](https://nxp.gitbook.io/hovergames/rddrone-fmuk66/connectors/debug-interface-dcd-lz) port. - -NXP's DCD-LZ is a 7 pin JST-GH connector and adds the nRST/MCU_RESET pin to the [Pixhawk 6-Pin standard debug port](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-009%20Pixhawk%20Connector%20Standard.pdf). - -The DCD-LZ breakout adapter permits the use of a standard 10 pin JTAG/SWD interface (i.e. using the Segger Jlink) and a standard 5 pin FTDI USB-TTL-3V3 type cable. - - - -## Supported Platforms / Airframes - -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). - -![HoverGames Drone Kit](../../assets/flight_controller/nxp_rddrone_fmuk66/hovergames_drone_14042019_xl001.jpg) - -:::tip -The NXP [HoverGames Drone Kit](https://www.nxp.com/kit-hgdronek66) (shown above) is a complete drone development kit that includes everything needed to build a quadcopter. -You only need to supply the 3S/4S LiPo battery. -::: - -## Further info - -- [HoverGames online documentation](https://nxp.gitbook.io/hovergames) PX4 user and programming guide, specific assembly, construction, debugging, programming instructions. - -- 3DModels supporting HoverGames and RDDRONE-FMUK66 can be found on _Thingiverse_ at these search links: [fmuk66](https://www.thingiverse.com/search?q=fmuk66&type=things&sort=relevant), [hovergames](https://www.thingiverse.com/search?q=hovergames&type=things&sort=relevant). - -![HoverGamesDronelogo](../../assets/flight_controller/nxp_rddrone_fmuk66/hovergames_colored_small.png) diff --git a/docs/en/flight_controller/ocpoc_zynq.md b/docs/en/flight_controller/ocpoc_zynq.md index 76641665fc..807468b20f 100644 --- a/docs/en/flight_controller/ocpoc_zynq.md +++ b/docs/en/flight_controller/ocpoc_zynq.md @@ -1,12 +1,7 @@ + + + diff --git a/docs/en/flight_controller/omnibus_f4_sd.md b/docs/en/flight_controller/omnibus_f4_sd.md index 8bdd390a1b..b7d37a2db2 100644 --- a/docs/en/flight_controller/omnibus_f4_sd.md +++ b/docs/en/flight_controller/omnibus_f4_sd.md @@ -1,261 +1,7 @@ -# Omnibus F4 SD + -:::warning -This flight controller has been [discontinued](../flight_controller/autopilot_experimental.md) and is no longer commercially available. -::: + - -## RC Telemetry - -The Omnibus supports telemetry to the RC Transmitter using [FrSky Telemetry](../peripherals/frsky_telemetry.md) or [CRSF Crossfire Telemetry](#crsf_telemetry). - - - -### CRSF Crossfire Telemetry - -[TBS CRSF Telemetry](../telemetry/crsf_telemetry.md) may be used to send telemetry data from the flight controller (the vehicle's attitude, battery, flight mode and GPS data) to an RC transmitter such as a Taranis. - -Benefits over [FrSky telemetry](../peripherals/frsky_telemetry.md) include: - -- Only a single UART is needed for RC and telemetry. -- The CRSF protocol is optimized for low latency. -- 150 Hz RC update rate. -- The signals are uninverted and thus no (external) inverter logic is required. - -::: info -If you use CRSF Telemetry you will need to build custom PX4 firmware. -By contrast, FrSky telemetry can use prebuilt firmware. -::: - -For Omnibus we recommend the [TBS Crossfire Nano RX](https://www.team-blacksheep.com/products/prod:crossfire_nano_rx), since it is specifically designed for small Quads. - -On the handheld controller (e.g. Taranis) you will also need a [Transmitter Module](https://www.team-blacksheep.com/shop/cat:tbs-crossfire-radio-transmitter#product_listing). -This can be plugged into the back of the RC controller. - -::: info -The referenced links above contains the documentation for the TX/RX modules. -::: - -#### Setup - -Connect the Nano RX and Omnibus pins as shown: - -| Omnibus UART1 | Nano RX | -| ------------- | ------- | -| TX | Ch2 | -| RX | Ch1 | - -Next update the TX/RX modules to use the CRSF protocol and set up telemetry. -Instructions for this are provided in the [TBS Crossfire Manual](https://www.team-blacksheep.com/media/files/tbs-crossfire-manual.pdf) (search for 'Setting up radio for CRSF'). - -#### PX4 CRSF Configuration - -You will need to build custom firmware to use CRSF. -For more information see [CRSF Telemetry](../telemetry/crsf_telemetry.md#px4-configuration). - - - -## PX4 Bootloader Update {#bootloader} - -The board comes pre-installed with [Betaflight](https://github.com/betaflight/betaflight/wiki). -Before PX4 firmware can be installed, the _PX4 bootloader_ must be flashed. -Download the [omnibusf4sd_bl.hex](https://github.com/PX4/PX4-Autopilot/raw/main/docs/assets/flight_controller/omnibus_f4_sd/omnibusf4sd_bl_d52b70cb39.hex) bootloader binary and read [this page](../advanced_config/bootloader_update_from_betaflight.md) for flashing instructions. - -## Building Firmware - -To [build PX4](../dev_setup/building_px4.md) for this target: - -``` -make omnibus_f4sd_default -``` - -## Installing PX4 Firmware - -You can use either pre-built firmware or your own custom firmware. - -:::warning -If you use [CRSF Telemetry](../telemetry/crsf_telemetry.md#px4-configuration) in your radio system, as describe above, then you must use custom firmware. -::: - -The firmware can be installed in any of the normal ways: - -- Build and upload the source - - ``` - make omnibus_f4sd_default upload - ``` - -- [Load the firmware](../config/firmware.md) using _QGroundControl_. - -## Configuration - -In addition to the [basic configuration](../config/index.md), the following parameters are important: - -| Parameter | Setting | -| ---------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | -| [SYS_HAS_MAG](../advanced_config/parameter_reference.md#SYS_HAS_MAG) | This should be disabled since the board does not have an internal mag. You can enable it if you attach an external mag. | -| [SYS_HAS_BARO](../advanced_config/parameter_reference.md#SYS_HAS_BARO) | Disable this if your board does not have a barometer. | - -## Further Info - -[This page](https://blog.unmanned.tech/omnibus-f4-flight-controller-guide/) provides a good overview with pinouts and setup instructions. +DOC REMOVED: 202603 +--> diff --git a/docs/en/flight_controller/pixfalcon.md b/docs/en/flight_controller/pixfalcon.md index d100c5d991..ad95ab4c86 100644 --- a/docs/en/flight_controller/pixfalcon.md +++ b/docs/en/flight_controller/pixfalcon.md @@ -1,75 +1,5 @@ + + + + text="Discontinued" px4_current="v1.15" year="2024". This change in 202603 --> diff --git a/docs/en/flight_controller/pixhack_v3.md b/docs/en/flight_controller/pixhack_v3.md index 3ca18f97f8..d7907a18c3 100644 --- a/docs/en/flight_controller/pixhack_v3.md +++ b/docs/en/flight_controller/pixhack_v3.md @@ -1,88 +1,8 @@ + + + - -## Serial Port Mapping - -| UART | Device | Port | -| ------ | ---------- | --------------------- | -| UART1 | /dev/ttyS0 | IO debug | -| USART2 | /dev/ttyS1 | TELEM1 (flow control) | -| USART3 | /dev/ttyS2 | TELEM2 (flow control) | -| UART4 | | | -| UART7 | | CONSOLE | -| UART8 | | SERIAL4 | +--> diff --git a/docs/en/flight_controller/pixhawk-2.md b/docs/en/flight_controller/pixhawk-2.md index 4b0d4e64f4..810ac51f65 100644 --- a/docs/en/flight_controller/pixhawk-2.md +++ b/docs/en/flight_controller/pixhawk-2.md @@ -1,11 +1,11 @@ # Hex Cube Black Flight Controller -:::warning +::: warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://cubepilot.org/#/home) for hardware support or compliance issues. ::: -:::tip +::: tip The [Cube Orange](cubepilot_cube_orange.md) is the successor to this product. We recommend however to consider products built on industry standards, such as the [Pixhawk Standards](autopilot_pixhawk_standard.md). This flight controller is not following the standard and uses a patented connector. @@ -26,7 +26,7 @@ Cube includes vibration isolation on two of the IMU's, with a third fixed IMU as The manufacturer [Cube User Guide](https://docs.cubepilot.org/user-guides/autopilot/the-cube) contains detailed information, including an overview of the [Differences between Cube Colours](https://docs.cubepilot.org/user-guides/autopilot/the-cube/introduction/specifications). ::: -:::tip +::: tip This autopilot is [supported](../flight_controller/autopilot_pixhawk_standard.md) by the PX4 maintenance and test teams. ::: @@ -47,9 +47,7 @@ This autopilot is [supported](../flight_controller/autopilot_pixhawk_standard.md - High-power, multi-tone piezo audio indicator - microSD card for high-rate logging over extended periods of time - - -## Where to Buy +## Where to Buy {#store} [Cube Black](https://www.cubepilot.com/#/reseller/list) (Reseller list) @@ -147,14 +145,14 @@ Board schematics and other documentation can be found here: [The Cube Project](h ## Building Firmware -:::tip +::: tip Most users will not need to build this firmware! 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: -``` +```sh make px4_fmu-v3_default ``` diff --git a/docs/en/flight_controller/pixhawk.md b/docs/en/flight_controller/pixhawk.md index 3645b7589f..c8bd92ee33 100644 --- a/docs/en/flight_controller/pixhawk.md +++ b/docs/en/flight_controller/pixhawk.md @@ -1,337 +1,6 @@ + + + - -## Debug Ports - -### Console Port - -The [PX4 System Console](../debug/system_console.md) runs on the port labeled [SERIAL4/5](#serial-4-5-port). - -:::tip -A convenient way to connect to the console is to use a [Zubax BugFace BF1](https://github.com/Zubax/bugface_bf1), as it comes with connectors that can be used with several different Pixhawk devices. -Simply connect the 6-pos DF13 1:1 cable on the [Zubax BugFace BF1](https://github.com/Zubax/bugface_bf1) to the Pixhawk `SERIAL4/5` port. - -![Zubax BugFace BF1](../../assets/flight_controller/pixhawk1/dronecode_probe.jpg) -::: - -The pinout is standard serial pinout, designed to connect to a [3.3V FTDI](https://www.digikey.com/en/products/detail/TTL-232R-3V3/768-1015-ND/1836393) cable (5V tolerant). - -| 3DR Pixhawk 1 | | FTDI | -| ------------- | --------- | ---- | ---------------- | -| 1 | +5V (red) | | N/C | -| 2 | S4 Tx | | N/C | -| 3 | S4 Rx | | N/C | -| 4 | S5 Tx | 5 | FTDI RX (yellow) | -| 5 | S5 Rx | 4 | FTDI TX (orange) | -| 6 | GND | 1 | FTDI GND (black) | - -The wiring for an FTDI cable to a 6-pos DF13 1:1 connector is shown in the figure below. - -![Console Connector](../../assets/flight_controller/pixhawk1/console_connector.jpg) - -The complete wiring is shown below. - -![Console Debug](../../assets/flight_controller/pixhawk1/console_debug.jpg) - -::: info -For information on how to _use_ the console see: [System Console](../debug/system_console.md). -::: - -### SWD Port - -The [SWD](../debug/swd_debug.md) (JTAG) ports are hidden under the cover (which must be removed for hardware debugging). -There are separate ports for FMU and IO, as highlighted below. - -![Pixhawk SWD](../../assets/flight_controller/pixhawk1/pixhawk_swd.jpg) - -The ports are ARM 10-pin JTAG connectors, which you will probably have to solder. -The pinout for the ports is shown below (the square markers in the corners above indicates pin 1). - -![ARM 10-Pin connector pinout](../../assets/flight_controller/pixhawk1/arm_10pin_jtag_connector_pinout.jpg) - -::: info -All Pixhawk FMUv2 boards have a similar SWD port. -::: - -## Building Firmware - -:::tip -Most users will not need to build this firmware! -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: - -``` -make px4_fmu-v2_default -``` - -## Parts / Housings - -- **ARM MINI JTAG (J6)**: 1.27 mm 10pos header (SHROUDED), for Black Magic Probe: FCI 20021521-00010D4LF ([Digi-Key](https://www.digikey.com/en/products/detail/20021521-00010T1LF/609-4054-ND/2414951),) or Samtec FTSH-105-01-F-DV-K (untested) or Harwin M50-3600542 ([Digikey](https://www.digikey.com/en/products/detail/harwin-inc/M50-3600542/2264370)) - - JTAG Adapter Option #1: [BlackMagic Probe](https://1bitsquared.com/products/black-magic-probe). Note, may come without cables (check with manufacturer). - If so, you will need the **Samtec FFSD-05-D-06.00-01-N** cable ([Samtec sample service](https://www.samtec.com/products/ffsd-05-d-06.00-01-n) or [Digi-Key Link: SAM8218-ND](https://www.digikey.com/en/products/detail/samtec-inc/ffsd-05-d-06-00-01-n/1106577)) or [Tag Connect Ribbon](https://www.tag-connect.com/product/10-pin-cortex-ribbon-cable-4-length-with-50-mil-connectors) and a Mini-USB cable. - - JTAG Adapter Option #2: [Digi-Key Link: ST-LINK/V2](https://www.digikey.com/product-detail/en/stmicroelectronics/ST-LINK-V2/497-10484-ND) / [ST USER MANUAL](https://www.st.com/resource/en/user_manual/dm00026748.pdf), needs an ARM Mini JTAG to 20pos adapter: [Digi-Key Link: 726-1193-ND](https://www.digikey.com/en/products/detail/texas-instruments/MDL-ADA2/1986451) - - JTAG Adapter Option #3: [Olimex ARM-TINY](https://www.olimex.com/wiki/ARM-USB-TINY) or any other OpenOCD-compatible ARM Cortex JTAG adapter, needs an ARM Mini JTAG to 20pos adapter: [Digi-Key Link: 726-1193-ND](https://www.digikey.com/en/products/detail/texas-instruments/MDL-ADA2/1986451) -- **USARTs**: Hirose DF13 6 pos ([Digi-Key Link: DF13A-6P-1.25H(20)](https://www.digikey.com/products/en?keywords=H3371-ND)) - - Mates: Hirose DF13 6 pos housing ([Digi-Key Link: Hirose DF13-6S-1.25C](https://www.digikey.com/products/en?keywords=H2182-ND)) -- **I2C and CAN**: Hirose DF13 4 pos ([Digi-Key Link: DF13A-4P-1.25H(20)](https://www.digikey.com/en/products/detail/hirose-electric-co-ltd/DF13A-4P-1-25H-20/530666) - discontinued) - -## Supported Platforms / Airframes - -Any multicopter / airplane / rover or boat that can be controlled with normal RC servos or Futaba S-Bus servos. +Doc removed 202604 +--> diff --git a/docs/en/flight_controller/pixhawk3_pro.md b/docs/en/flight_controller/pixhawk3_pro.md index 14819d84cb..deaacad9ac 100644 --- a/docs/en/flight_controller/pixhawk3_pro.md +++ b/docs/en/flight_controller/pixhawk3_pro.md @@ -1,87 +1,7 @@ + + + +DOC REMOVED: 202603 +--> diff --git a/docs/en/flight_controller/pixhawk4.md b/docs/en/flight_controller/pixhawk4.md index eb76f408ce..ec1dcfcebd 100644 --- a/docs/en/flight_controller/pixhawk4.md +++ b/docs/en/flight_controller/pixhawk4.md @@ -1,6 +1,6 @@ # Holybro Pixhawk 4 -:::warning +::: warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. ::: @@ -12,7 +12,7 @@ It is based on the [Pixhawk-project](https://pixhawk.org/) **FMUv5** open hardwa -:::tip +::: tip This autopilot is [supported](../flight_controller/autopilot_pixhawk_standard.md) by the PX4 maintenance and test teams. ::: @@ -51,7 +51,7 @@ This autopilot is [supported](../flight_controller/autopilot_pixhawk_standard.md Additional information can be found in the [Pixhawk 4 Technical Data Sheet](https://github.com/PX4/PX4-Autopilot/blob/main/docs/assets/flight_controller/pixhawk4/pixhawk4_technical_data_sheet.pdf). -## Where to Buy +## Where to Buy {#store} Order from [Holybro](https://holybro.com/products/pixhawk-4). @@ -59,7 +59,7 @@ Order from [Holybro](https://holybro.com/products/pixhawk-4). ![Pixhawk 4 connectors](../../assets/flight_controller/pixhawk4/pixhawk4-connectors.jpg) -:::warning +::: warning The **DSM/SBUS RC** and **PPM RC** ports are for RC receivers only. These are powered! NEVER connect any servos, power supplies or batteries (or to any connected receiver). ::: @@ -119,20 +119,18 @@ The [Pixhawk 4 Wiring Quick Start](../assembly/quick_start_pixhawk4.md) provides ## Building Firmware -:::tip +::: tip Most users will not need to build this firmware! 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: -``` +```sh make px4_fmu-v5_default ``` - - -## Debug Port +## Debug Port {#debug_port} The [PX4 System Console](../debug/system_console.md) and [SWD interface](../debug/swd_debug.md) run on the **FMU Debug** port, while the I/O console and SWD interface can be accessed via **I/O Debug** port. In order to access these ports, the user must remove the _Pixhawk 4_ casing. diff --git a/docs/en/flight_controller/pixhawk4_mini.md b/docs/en/flight_controller/pixhawk4_mini.md index 35b25801e6..d5ccdebf6a 100644 --- a/docs/en/flight_controller/pixhawk4_mini.md +++ b/docs/en/flight_controller/pixhawk4_mini.md @@ -1,160 +1,7 @@ + + + diff --git a/docs/en/flight_controller/pixhawk5x.md b/docs/en/flight_controller/pixhawk5x.md index 1511795af1..8989739038 100644 --- a/docs/en/flight_controller/pixhawk5x.md +++ b/docs/en/flight_controller/pixhawk5x.md @@ -1,6 +1,6 @@ # Holybro Pixhawk 5X -:::warning +::: warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. ::: @@ -12,7 +12,7 @@ It comes with the latest PX4 Autopilot​® pre-installed, triple redundancy, te -:::tip +::: tip This autopilot is [supported](../flight_controller/autopilot_pixhawk_standard.md) by the PX4 maintenance and test teams. ::: @@ -111,7 +111,7 @@ The Pixhawk® 5X is perfect for developers at corporate research labs, startups, - Other Characteristics: - Operating & storage temperature: -40 ~ 85°c -## Where to Buy +## Where to Buy {#store} Order from [Holybro](https://holybro.com/products/pixhawk-5x). @@ -129,10 +129,10 @@ The [Pixhawk 5X Wiring Quick Start](../assembly/quick_start_pixhawk5x.md) provid ::: info Connector pin assignments are left to right (i.e. Pin 1 is the left-most pin). -::: infos: +::: - The [camera capture pin](../camera/fc_connected_camera.md#camera-capture-configuration) (`PI0`) is pin 2 on the AD&IO port, marked above as `FMU_CAP1`. -- _Pixhawk 5X_ pinouts can be downloaded in PDF from from [here](https://github.com/PX4/PX4-user_guide/blob/main/assets/flight_controller/pixhawk5x/pixhawk5x_pinout.pdf) or [here](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_Pixhawk5X_Pinout.pdf). +- _Pixhawk 5X_ pinouts can be downloaded in PDF from [here](https://github.com/PX4/PX4-user_guide/blob/main/assets/flight_controller/pixhawk5x/pixhawk5x_pinout.pdf) or [here](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_Pixhawk5X_Pinout.pdf). ## Serial Port Mapping @@ -181,20 +181,18 @@ Analog battery monitoring via an ADC is not supported on this particular board, ## Building Firmware -:::tip +::: tip Most users will not need to build this firmware! 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: -``` +```sh make px4_fmu-v5x_default ``` - - -## Debug Port +## Debug Port {#debug_port} The [PX4 System Console](../debug/system_console.md) and [SWD interface](../debug/swd_debug.md) run on the **FMU Debug** port. diff --git a/docs/en/flight_controller/pixhawk6c.md b/docs/en/flight_controller/pixhawk6c.md index 9c3c2a55f5..c928f72679 100644 --- a/docs/en/flight_controller/pixhawk6c.md +++ b/docs/en/flight_controller/pixhawk6c.md @@ -1,6 +1,6 @@ # Holybro Pixhawk 6C -:::warning +::: warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. ::: @@ -12,7 +12,7 @@ It complies with the Pixhawk [Connector Standard](https://github.com/pixhawk/Pix -:::tip +::: tip This autopilot is [supported](../flight_controller/autopilot_pixhawk_standard.md) by the PX4 maintenance and test teams. ::: @@ -88,7 +88,7 @@ The Pixhawk® 6C is perfect for developers at corporate research labs, startups, - Other Characteristics: - Operating & storage temperature: -40 ~ 85°c -## Where to Buy +## Where to Buy {#store} Order from [Holybro](https://holybro.com/products/pixhawk-6c). @@ -147,20 +147,18 @@ Holybro makes various analog [power modules](../power_module/index.md) for diffe ## Building Firmware -:::tip +::: tip Most users will not need to build this firmware! 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: -``` +```sh make px4_fmu-v6c_default ``` - - -## Debug Port +## Debug Port {#debug_port} The [PX4 System Console](../debug/system_console.md) and [SWD interface](../debug/swd_debug.md) run on the **FMU Debug** port. diff --git a/docs/en/flight_controller/pixhawk6c_mini.md b/docs/en/flight_controller/pixhawk6c_mini.md index d4174f49ee..ee7f51698a 100644 --- a/docs/en/flight_controller/pixhawk6c_mini.md +++ b/docs/en/flight_controller/pixhawk6c_mini.md @@ -1,6 +1,6 @@ # Holybro Pixhawk 6C Mini -:::warning +::: warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. ::: @@ -12,7 +12,7 @@ It complies with the Pixhawk [Connector Standard](https://github.com/pixhawk/Pix ![Pixhawk6c mini A&B Image](../../assets/flight_controller/pixhawk6c_mini/HB_6C_MINI-A_B.jpg) -:::tip +::: tip This autopilot is [supported](../flight_controller/autopilot_pixhawk_standard.md) by the PX4 maintenance and test teams. ::: @@ -58,7 +58,7 @@ The Pixhawk® 6C Mini is perfect for developers at corporate research labs, star - USB Power Input: 4.75\~5.25V - Servo Rail Input: 0\~36V - Current Ratings: - - `TELEM1`` Max output current limiter: 1A + - `TELEM1` Max output current limiter: 1A - All other port combined output current limiter: 1A ### **Mechanical data** @@ -87,14 +87,14 @@ The Pixhawk® 6C Mini is perfect for developers at corporate research labs, star - Other Characteristics: - Operating & storage temperature: -40 ~ 85°c -## Where to Buy +## Where to Buy {#store} Order from [Holybro](https://holybro.com/products/pixhawk-6c-mini). ## Assembly/Setup -The Pixhawk 4 Mini's port is very similar to the Pixhawk 6C Mini's port. -Please refer to the [Pixhawk 4 Mini Wiring Quick Start](../assembly/quick_start_pixhawk4_mini.md) as it provides instructions on how to assemble required/important peripherals including GPS, Power Module etc. +The Pixhawk 6C Mini's ports are very similar to the Pixhawk 4 Mini's ports. +Please refer to the [Pixhawk 4 Mini Wiring Quick Start](https://docs.px4.io/v1.16/en/assembly/quick_start_pixhawk4_mini) (Discontinued) as it provides instructions on how to assemble required/important peripherals including GPS, Power Module etc. ## Pinouts @@ -151,20 +151,18 @@ Holybro makes various analog [power modules](../power_module/index.md) for diffe ## Building Firmware -:::tip +::: tip Most users will not need to build this firmware! 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: -``` +```sh make px4_fmu-v6c_default ``` - - -## Debug Port +## Debug Port {#debug_port} The [PX4 System Console](../debug/system_console.md) and [SWD interface](../debug/swd_debug.md) run on the **FMU Debug** port. @@ -201,7 +199,7 @@ The complete set of supported configurations can be seen in the [Airframes Refer ## See Also - [Holybro Docs](https://docs.holybro.com/) (Holybro) -- [Pixhawk 4 Mini Wiring Quick Start](../assembly/quick_start_pixhawk4_mini.md) (and [Pixhawk 6C Wiring QuickStart](../assembly/quick_start_pixhawk6c.md)) +- [Pixhawk 6C Wiring QuickStart](../assembly/quick_start_pixhawk6c.md) - [PM02 Power Module](../power_module/holybro_pm02.md) - [PM06 Power Module](../power_module/holybro_pm06_pixhawk4mini_power_module.md) - [PM07 Power Module](../power_module/holybro_pm07_pixhawk4_power_module.md) diff --git a/docs/en/flight_controller/pixhawk6x-rt.md b/docs/en/flight_controller/pixhawk6x-rt.md index 7912350e5c..bc9e868ad8 100644 --- a/docs/en/flight_controller/pixhawk6x-rt.md +++ b/docs/en/flight_controller/pixhawk6x-rt.md @@ -1,6 +1,6 @@ # Holybro Pixhawk 6X-RT -:::warning +::: warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. ::: @@ -13,7 +13,7 @@ Equipped with a high performance NXP i.mx RT1176 dual core Processor, modular de -:::tip +::: tip This autopilot is [supported](../flight_controller/autopilot_pixhawk_standard.md) by the PX4 maintenance and test teams. ::: @@ -120,9 +120,9 @@ The Pixhawk®​ 6X-RT is perfect for developers at corporate research labs, sta - Other Characteristics: - Operating & storage temperature: -40 ~ 85°c -## Where to Buy +## Where to Buy {#store} -Order from [Holybro](https://holybro.com/products/fmuv6x-rt-developer-edition). +Order from [Holybro](https://holybro.com/products/pixhawk-6x-rt). ## Assembly/Setup @@ -190,20 +190,18 @@ Analog battery monitoring via an ADC is not supported on this particular board, ## Building Firmware -:::tip +::: tip Most users will not need to build this firmware! 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: -``` +```sh make px4_fmu-v6xrt_default ``` - - -## Debug Port +## Debug Port {#debug_port} The [PX4 System Console](../debug/system_console.md) and [SWD interface](../debug/swd_debug.md) run on the **FMU Debug** port. diff --git a/docs/en/flight_controller/pixhawk6x.md b/docs/en/flight_controller/pixhawk6x.md index 72be1636f9..52ed6a4c54 100644 --- a/docs/en/flight_controller/pixhawk6x.md +++ b/docs/en/flight_controller/pixhawk6x.md @@ -1,6 +1,6 @@ # Holybro Pixhawk 6X -:::warning +::: warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. ::: @@ -51,7 +51,7 @@ Equipped with a high-performance H7 Processor, modular design, triple redundancy :::: -:::tip +::: tip This autopilot is [supported](../flight_controller/autopilot_pixhawk_standard.md) by the PX4 maintenance and test teams. ::: @@ -150,7 +150,7 @@ The Pixhawk®​ 6X is perfect for developers at corporate research labs, startu - Other Characteristics: - Operating & storage temperature: -40 ~ 85°c -## Where to Buy +## Where to Buy {#store} Order from [Holybro](https://holybro.com/products/pixhawk-6x). @@ -205,7 +205,7 @@ Under these conditions, all power sources will be used in this order to power th **Absolute Maximum Ratings** -Under these conditions, the system will not draw any power (will not be operational) but will remain intact. +Under these conditions, the system will not draw any power (will not be operational), but will remain intact. 1. **POWER1** and **POWER2** inputs (operational range 4.1V to 5.7V, 0V to 10V undamaged) 1. **USB** input (operational range 4.1V to 5.7V, 0V to 6V undamaged) @@ -221,20 +221,18 @@ Analog battery monitoring via an ADC is not supported on this particular board b ## Building Firmware -:::tip +::: tip Most users will not need to build this firmware! 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: -``` +```sh make px4_fmu-v6x_default ``` - - -## Debug Port +## Debug Port {#debug_port} The [PX4 System Console](../debug/system_console.md) and [SWD interface](../debug/swd_debug.md) run on the **FMU Debug** port. diff --git a/docs/en/flight_controller/pixhawk6x_pro.md b/docs/en/flight_controller/pixhawk6x_pro.md index a995f1d121..6d6e94fd14 100644 --- a/docs/en/flight_controller/pixhawk6x_pro.md +++ b/docs/en/flight_controller/pixhawk6x_pro.md @@ -1,6 +1,6 @@ # Holybro Pixhawk 6X Pro -:::warning +::: warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. ::: @@ -111,7 +111,7 @@ It can also be used with any other Pixhawk Autopilot Bus (PAB) specification-com ::: -## Where to Buy +## Where to Buy {#store} Order from [Holybro](https://holybro.com/products/pixhawk-6x-pro). @@ -188,14 +188,14 @@ Analog battery monitoring via an ADC is not supported on this particular board, ## Building Firmware -:::tip +::: tip Most users will not need to build this firmware! 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: -``` +```sh make px4_fmu-v6x_default ``` diff --git a/docs/en/flight_controller/pixhawk_mini.md b/docs/en/flight_controller/pixhawk_mini.md index d21e0cb4bc..5cef4b678c 100644 --- a/docs/en/flight_controller/pixhawk_mini.md +++ b/docs/en/flight_controller/pixhawk_mini.md @@ -1,324 +1,7 @@ + + + diff --git a/docs/en/flight_controller/pixhawk_series.md b/docs/en/flight_controller/pixhawk_series.md index cf1fd037d3..ca2d89b52b 100644 --- a/docs/en/flight_controller/pixhawk_series.md +++ b/docs/en/flight_controller/pixhawk_series.md @@ -6,7 +6,7 @@ Pixhawk is the reference hardware platform for PX4, and runs PX4 on the [NuttX]( Manufacturers have created many different boards based on the open designs, with form factors that are optimised for applications from cargo carrying though to first person view (FPV) racers. -:::tip +::: tip For computationally intensive tasks (e.g. computer vision) you will need a separate companion computer (e.g. [Raspberry Pi 2/3 Navio2](../flight_controller/raspberry_pi_navio2.md)) or a platform with an integrated companion solution. ::: @@ -71,7 +71,7 @@ PX4 _developers_ need to know the FMU version of their board, as this is require At very high level, the main differences are: -- **FMUv2:** Single board with STM32427VI processor ([Pixhawk 1 (Discontinued)](../flight_controller/pixhawk.md), [pix32](../flight_controller/holybro_pix32.md), [Pixfalcon](../flight_controller/pixfalcon.md), [Drotek DroPix](../flight_controller/dropix.md)) +- **FMUv2:** Single board with STM32427VI processor (Pixhawk 1 (discontinued), Holybro pix32 (discontinued), Pixfalcon (discontinued), Drotek DroPix (discontinued)) - **FMUv3:** Identical to FMUv2, but usable flash doubled to 2MB ([Hex Cube Black](../flight_controller/pixhawk-2.md),[CUAV Pixhack v3](../flight_controller/pixhack_v3.md),[mRo Pixhawk](../flight_controller/mro_pixhawk.md), [Pixhawk Mini (Discontinued)](../flight_controller/pixhawk_mini.md)) - **FMUv4:** Increased RAM. Faster CPU. More serial ports. No IO processor ([Pixracer](../flight_controller/pixracer.md)) - **FMUv4-PRO:** Slightly increased RAM. More serial ports. IO processor ([Pixhawk 3 Pro](../flight_controller/pixhawk3_pro.md)) @@ -135,7 +135,7 @@ Products that are based on independently created schematics are considered origi Product names/brands can also be trademarked. Trademarked names may not be used without the permission of the owner. -:::tip +::: tip _Pixhawk_ is a trademark, and cannot be used in product names without permission. ::: diff --git a/docs/en/flight_controller/pixracer.md b/docs/en/flight_controller/pixracer.md index 3cce3e9a50..15d84aec8f 100644 --- a/docs/en/flight_controller/pixracer.md +++ b/docs/en/flight_controller/pixracer.md @@ -1,6 +1,6 @@ # mRo Pixracer -:::warning +::: warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://store.mrobotics.io/) for hardware support or compliance issues. ::: @@ -10,7 +10,7 @@ In contrast to [Pixfalcon](../flight_controller/pixfalcon.md) and [Pixhawk](../f -:::tip +::: tip This autopilot is [supported](../flight_controller/autopilot_pixhawk_standard.md) by the PX4 maintenance and test teams. ::: @@ -30,7 +30,7 @@ This autopilot is [supported](../flight_controller/autopilot_pixhawk_standard.md - OneShot PWM out (configurable) - Optional: Safety switch and buzzer -## Where to Buy +## Where to Buy {#store} Pixracer Pro is available from the [store.3dr.com](https://store.3dr.com/pixracer-pro/). @@ -210,14 +210,14 @@ The following PDF files are provided for _convenience only_: ## Building Firmware -:::tip +::: tip Most users will not need to build this firmware! 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: -``` +```sh make px4_fmu-v4_default ``` diff --git a/docs/en/flight_controller/raccoonlab_fmu6x.md b/docs/en/flight_controller/raccoonlab_fmu6x.md index e8c7afdf5f..ccce7aabd4 100644 --- a/docs/en/flight_controller/raccoonlab_fmu6x.md +++ b/docs/en/flight_controller/raccoonlab_fmu6x.md @@ -1,6 +1,6 @@ # RaccoonLab FMUv6X Autopilot -:::warning +::: warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://raccoonlab.co) for hardware support or compliance issues. ::: @@ -18,7 +18,7 @@ The [Jetson Xavier NX HAT](https://docs.raccoonlab.co/guide/nx_hat/) is designed The [Raspberry Pi CM4 HAT](https://docs.raccoonlab.co/guide/rpi_hat/) provides robust features, including CAN bus connectivity, an LTE modem, internal voltage measurement, SWD debugging for other MCUs, and UART communication with PX4 over MAVLINK. These HATs expand the capabilities of devices, making them ideal for advanced robotics and UAV applications. -:::tip +::: tip This autopilot is [supported](../flight_controller/autopilot_pixhawk_standard.md) by the PX4 maintenance and test teams. ::: @@ -125,12 +125,12 @@ Under these conditions all power sources will be used in this order to power the 1. **POWER1** and **POWER2** inputs (4.9V to 5.5V) 2. **USB** input (4.75V to 5.25V) -:::tip +::: tip The manufacturer [RaccoonLab Docs](https://docs.raccoonlab.co/guide/autopilot/RCLv6X.html) are the canonical reference for the RaccoonLab FMUv6X Autopilot. They should be used by preference as they contain the most complete and up to date information. ::: -## Where to Buy +## Where to Buy {#store} [RaccoonLab Store](https://raccoonlab.co/store) @@ -138,7 +138,7 @@ They should be used by preference as they contain the most complete and up to da ## Building Firmware -:::tip +::: tip Most users will not need to build this firmware! It is pre-built and automatically installed by _QGroundControl_ when appropriate hardware is connected. ::: diff --git a/docs/en/flight_controller/radiolink_pix6.md b/docs/en/flight_controller/radiolink_pix6.md index 1574314338..0c5c0c73e5 100644 --- a/docs/en/flight_controller/radiolink_pix6.md +++ b/docs/en/flight_controller/radiolink_pix6.md @@ -2,7 +2,7 @@ -:::warning +::: warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://radiolink.com.cn/) for hardware support or compliance issues. ::: @@ -27,7 +27,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo - 32KB FRAM - FM25V02A - AT7456E OSD - Sensors - - Bosh BMI088 IMU (accel, gyro) + - Bosch BMI088 IMU (accel, gyro) - InvenSense ICM-42688 IMU (accel, gyro) - SPA06 barometer - IST8310 magnetometer @@ -48,7 +48,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo - Weight 80g - Size 94mm x 51.5mm x 14.5mm -## Where to Buy +## Where to Buy {#store} [Radiolink Amazon](https://www.radiolink.com.cn/pix6_where_to_buy)(International users) @@ -277,7 +277,7 @@ In addition to the [basic configuration](../config/index.md), the following para ### Powering the PIX6 The PIX6 has 2 dedicated power monitor ports, each with a 6 pin connector. -One is the Analog power monitor (`POWER1`), and the others is the I2C power monitor (`POWER2`). +One is the Analog power monitor (`POWER1`), and the other is the I2C power monitor (`POWER2`). The power module that comes with the flight controller with a wide voltage input range of 2-12S (7.4-50.4V), a maximum detection current of 90A (single ESC maximum detection current is 22.5A), a BEC output voltage of 5.3±0.2V, and a BEC output current of 2A. diff --git a/docs/en/flight_controller/raspberry_pi_navio2.md b/docs/en/flight_controller/raspberry_pi_navio2.md index cb88de2d2a..386f952e4e 100644 --- a/docs/en/flight_controller/raspberry_pi_navio2.md +++ b/docs/en/flight_controller/raspberry_pi_navio2.md @@ -2,7 +2,7 @@ -:::warning +::: warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://emlid.com/) for hardware support or compliance issues. ::: @@ -17,7 +17,7 @@ It allows you to build PX4 and transfer to the RPi, or build natively. Use the preconfigured [Emlid Raspberry Pi OS image for Navio 2](https://docs.emlid.com/navio2/configuring-raspberry-pi/). The default image will have most of the setup procedures shown below already done. -:::warning +::: warning Make sure not to upgrade the system (more specifically the kernel). By upgrading, a new kernel can get installed which lacks the necessary HW support (you can check with `ls /sys/class/pwm`, the directory should not be empty). ::: diff --git a/docs/en/flight_controller/raspberry_pi_pilotpi.md b/docs/en/flight_controller/raspberry_pi_pilotpi.md index 62fa7f305b..2e5edabab7 100644 --- a/docs/en/flight_controller/raspberry_pi_pilotpi.md +++ b/docs/en/flight_controller/raspberry_pi_pilotpi.md @@ -2,7 +2,7 @@ -:::warning +::: warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](mailto:lhf2613@gmail.com) for hardware support or compliance issues. ::: @@ -62,7 +62,7 @@ Direct accessible from RPi: ## Pinout -:::warning +::: warning It still uses old GH1.25 connectors. Wiring is compatible with Pixhawk 2.4.8 ::: @@ -175,7 +175,7 @@ This switch is connected to Pin22(BCM25). System rc script will check its value and decide whether PX4 should start alongside with system booting or not. - On: start PX4 automatically -- Off: don' t start PX4 +- Off: don't start PX4 ## Developer Quick Start diff --git a/docs/en/flight_controller/raspberry_pi_pilotpi_rpios.md b/docs/en/flight_controller/raspberry_pi_pilotpi_rpios.md index cdc202e563..1c1e5f28fa 100644 --- a/docs/en/flight_controller/raspberry_pi_pilotpi_rpios.md +++ b/docs/en/flight_controller/raspberry_pi_pilotpi_rpios.md @@ -125,7 +125,7 @@ Don't forget to turn off the switch when it is not needed. #### CSI camera ::: info -Enable CSI camera will stop anything works on I2C-0. +Enabling CSI camera will stop anything that works on I2C-0. ::: ```sh diff --git a/docs/en/flight_controller/raspberry_pi_pilotpi_ubuntu_server.md b/docs/en/flight_controller/raspberry_pi_pilotpi_ubuntu_server.md index abd6652d18..8d3e68b441 100644 --- a/docs/en/flight_controller/raspberry_pi_pilotpi_ubuntu_server.md +++ b/docs/en/flight_controller/raspberry_pi_pilotpi_ubuntu_server.md @@ -1,6 +1,6 @@ # PilotPi with Ubuntu Server -:::warning +::: warning Ubuntu Server on RPi 4B consumes a lot of current and generates a lot of heat. Design for better heat dissipation and high power consumption when using this hardware. ::: @@ -16,13 +16,13 @@ Both armhf and arm64 arch are supported. - [Ubuntu Server 18.04.5 for RPi2](https://cdimage.ubuntu.com/releases/18.04.5/release/ubuntu-18.04.5-preinstalled-server-armhf+raspi2.img.xz) - [Ubuntu Server 18.04.5 for RPi3](https://cdimage.ubuntu.com/releases/18.04.5/release/ubuntu-18.04.5-preinstalled-server-armhf+raspi3.img.xz) - [Ubuntu Server 18.04.5 for RPi4](https://cdimage.ubuntu.com/releases/18.04.5/release/ubuntu-18.04.5-preinstalled-server-armhf+raspi4.img.xz) -- [Ubuntu Server 20.04.1 for RPi 2/3/4](https://cdimage.ubuntu.com/releases/20.04.1/release/ubuntu-20.04.2-preinstalled-server-arm64+raspi.img.xz) +- [Ubuntu Server 20.04.1 for RPi 2/3/4](https://old-releases.ubuntu.com/releases/focal/ubuntu-20.04.2-preinstalled-server-arm64+raspi.img.xz) #### arm64 - [Ubuntu Server 18.04.5 for RPi3](https://cdimage.ubuntu.com/releases/18.04.5/release/ubuntu-18.04.5-preinstalled-server-arm64+raspi3.img.xz) - [Ubuntu Server 18.04.5 for RPi4](https://cdimage.ubuntu.com/releases/18.04.5/release/ubuntu-18.04.5-preinstalled-server-arm64+raspi4.img.xz) -- [Ubuntu Server 20.04.1 for RPi 3/4](https://cdimage.ubuntu.com/releases/20.04.1/release/ubuntu-20.04.2-preinstalled-server-arm64+raspi.img.xz) +- [Ubuntu Server 20.04.1 for RPi 3/4](https://old-releases.ubuntu.com/releases/focal/ubuntu-20.04.2-preinstalled-server-arm64+raspi.img.xz) #### Latest OS @@ -205,8 +205,8 @@ Don't forget to turn off the switch when it is not needed! #### CSI camera -:::warning -Enable CSI camera will stop anything works on I2C-0. +::: warning +Enabling CSI camera will stop anything that works on I2C-0. ::: ```sh diff --git a/docs/en/flight_controller/silicon_errata.md b/docs/en/flight_controller/silicon_errata.md index ff7cdbb849..5bb1215126 100644 --- a/docs/en/flight_controller/silicon_errata.md +++ b/docs/en/flight_controller/silicon_errata.md @@ -11,7 +11,7 @@ Flash Bank 2 and full speed USB device exclusive. Silicon revisions up to rev 2 (revision 3 is the first not affected) can produce errors / data corruption when accessing the 2nd flash bank while there is activity on PA12, which is one of the USB data lines. There is no workaround / software fix for this, except to not use the flash bank #2. Since USB is needed to program the device, Pixhawk revisions built with silicon revisions < rev 3 can only use up to 1MB of the 2MB flash of the microprocessor. -:::tip +::: tip The errata is fixed in later versions, but this may not be detected if you are using an older bootloader. See [Firmware > FMUv2 Bootloader Update](../config/firmware.md#bootloader) for more information. ::: diff --git a/docs/en/flight_controller/spracingh7extreme.md b/docs/en/flight_controller/spracingh7extreme.md index 0bc430681b..5ff8e7e69f 100644 --- a/docs/en/flight_controller/spracingh7extreme.md +++ b/docs/en/flight_controller/spracingh7extreme.md @@ -1,6 +1,6 @@ # SPRacingH7EXTREME (PX4 Edition) -:::warning +::: warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://shop.seriouslypro.com) for hardware support or compliance issues. ::: @@ -72,7 +72,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo - 36x36mm with 30.5\*30.5 mouting pattern, M4 holes. - Soft-mount M4 to M3 grommets supplied. -## Where to Buy +## Where to Buy {#store} The SPRacingH7EXTREME is available from the [Seriously Pro shop](https://shop.seriouslypro.com/sp-racing-h7-extreme). diff --git a/docs/en/flight_controller/svehicle_e2.md b/docs/en/flight_controller/svehicle_e2.md index 61629c8b6a..0359df5a9c 100644 --- a/docs/en/flight_controller/svehicle_e2.md +++ b/docs/en/flight_controller/svehicle_e2.md @@ -1,6 +1,6 @@ # S-Vehicle E2 -:::warning +::: warning PX4 does not manufacture this (or any) autopilot. ::: @@ -58,7 +58,7 @@ These flight controllers are [manufacturer supported](../flight_controller/autop - 1x Dedicated Debug Port - FMU Debug -## Purchase Channels +## Purchase Channels {#store} Order from [S-Vehicle](https://svehicle.cn/). diff --git a/docs/en/flight_controller/thepeach_k1.md b/docs/en/flight_controller/thepeach_k1.md index 59eab31f54..5f9ab0b246 100644 --- a/docs/en/flight_controller/thepeach_k1.md +++ b/docs/en/flight_controller/thepeach_k1.md @@ -1,6 +1,6 @@ # ThePeach FCC-K1 -:::warning +::: warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://thepeach.kr/) for hardware support or compliance issues. ::: @@ -11,6 +11,10 @@ It is based on the **Pixhawk-project FMUv3** open hardware design and runs **PX4 ![ThePeach FCC-K1](../../assets/flight_controller/thepeach_k1/main.png) +::: info +This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). +::: + ## Specifications - Main Processor: STM32F427VIT6 diff --git a/docs/en/flight_controller/thepeach_r1.md b/docs/en/flight_controller/thepeach_r1.md index 8881d2dc3a..6dbfc01264 100644 --- a/docs/en/flight_controller/thepeach_r1.md +++ b/docs/en/flight_controller/thepeach_r1.md @@ -1,6 +1,6 @@ # ThePeach FCC-R1 -:::warning +::: warning PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://thepeach.kr/) for hardware support or compliance issues. ::: @@ -11,6 +11,10 @@ It is based on the **Pixhawk-project FMUv3** open hardware design and runs **PX4 ![ThePeach_R1](../../assets/flight_controller/thepeach_r1/main.png) +::: info +This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). +::: + ## Specifications - Main Processor: STM32F427VIT6 diff --git a/docs/en/flight_controller/x-mav_ap-h743r1.md b/docs/en/flight_controller/x-mav_ap-h743r1.md index e6ccabed17..3277f9b366 100644 --- a/docs/en/flight_controller/x-mav_ap-h743r1.md +++ b/docs/en/flight_controller/x-mav_ap-h743r1.md @@ -2,7 +2,7 @@ -:::warning +::: warning PX4 does not manufacture this (or any) autopilot. ::: @@ -26,7 +26,7 @@ These flight controllers are [manufacturer supported](../flight_controller/autop - On-board sensors - Accel/Gyro: ICM-42688-P\*2(Version1), BMI270\*2(Version2) - Mag: QMC5883P - - Barometer: DPS310(Version1),SPL06(Version2) + - Barometer: SPL06 ### Interfaces @@ -45,7 +45,7 @@ These flight controllers are [manufacturer supported](../flight_controller/autop - FMU Debug - IO Debug -## Purchase Channels +## Purchase Channels {#store} Order from [X-MAV](https://www.x-mav.cn/). @@ -91,7 +91,7 @@ The 7 FMU PWM outputs are in 3 groups: - A1 - A4 are in one group. - A5, A6 are in a 2nd group. -- A7 is in a 3nd group. +- A7 is in a 3rd group. Channels within the same group need to use the same output rate. If any channel in a group uses DShot then all channels in the group need to use DShot. @@ -131,7 +131,7 @@ make x-mav_ap-h743r1_default 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). -## Debug Port +## Debug Port {#debug_port} ### SWD diff --git a/docs/en/flight_modes/offboard.md b/docs/en/flight_modes/offboard.md index 353c9b75a0..14de9749c6 100644 --- a/docs/en/flight_modes/offboard.md +++ b/docs/en/flight_modes/offboard.md @@ -2,17 +2,29 @@ +:::: warning + +Offboard control with ROS 2 requires _significant care_ to ensure that it is used safely. +Please read [ROS 2 Offboard Control](#ros-2-offboard-control) carefully to fully understand the risks involved when using it. +A good understanding of [PX4 controller diagrams](../flight_stack/controller_diagrams.md) is advised. + +::: tip +[PX4 ROS 2 Interface Library](../ros2/px4_ros2_interface_lib.md) provides a safer alternative. +::: + +:::: + The vehicle obeys position, velocity, acceleration, attitude, attitude rates or thrust/torque setpoints provided by some source that is external to the flight stack, such as a companion computer. The setpoints may be provided using MAVLink (or a MAVLink API such as [MAVSDK](https://mavsdk.mavlink.io/)) or by [ROS 2](../ros2/index.md). PX4 requires that the external controller provides a continuous 2Hz "proof of life" signal, by streaming any of the supported MAVLink setpoint messages or the ROS 2 [OffboardControlMode](../msg_docs/OffboardControlMode.md) message. -PX4 enables offboard control only after receiving the signal for more than a second, and will regain control if the signal stops. +PX4 enables switching to offboard control mode only after receiving the signal for more than a second, and will failsafe (controlled by [COM_OBL_RC_ACT](../advanced_config/parameter_reference.md#COM_OBL_RC_ACT)) if the signal stops. ::: info -- This mode requires position or pose/attitude information - e.g. GPS, optical flow, visual-inertial odometry, mocap, etc. -- RC control is disabled except to change modes (you can also fly without any manual controller at all by setting the parameter [COM_RC_IN_MODE](../advanced_config/parameter_reference.md#COM_RC_IN_MODE) to 4: Stick input disabled). -- The vehicle must be already be receiving a stream of MAVLink setpoint messages or ROS 2 [OffboardControlMode](../msg_docs/OffboardControlMode.md) messages before arming in offboard mode or switching to offboard mode when flying. +- This mode requires position or pose/attitude information - e.g. GPS, optical flow, visual-inertial odometry, mocap, etc. depending on the type of offboard setpoints that the external controller sends. +- Manual control is disabled except to change modes (you can also fly without any manual controller at all by setting the parameter [COM_RC_IN_MODE](../advanced_config/parameter_reference.md#COM_RC_IN_MODE) to `4: Disable manual control`). +- The vehicle must already be receiving a stream of MAVLink setpoint messages or ROS 2 [OffboardControlMode](../msg_docs/OffboardControlMode.md) messages before arming in offboard mode or switching to offboard mode when flying. - The vehicle will exit offboard mode if MAVLink setpoint messages or `OffboardControlMode` are not received at a rate of > 2Hz. - Not all coordinate frames and field values allowed by MAVLink are supported for all setpoint messages and vehicles. Read the sections below _carefully_ to ensure only supported values are used. @@ -38,13 +50,37 @@ Note that offboard mode only supports a very limited set of MAVLink commands and Operations, like taking off, landing, return to launch, may be best handled using the appropriate modes. Operations like uploading, downloading missions can be performed in any mode. -## ROS 2 Messages +## ROS 2 Offboard Control + +This section describes how to perform offboard control through one of the direct ROS 2 interfaces: UXRCE-DDS or Zenoh. + +When using direct ROS 2 offboard control, PX4 setpoint messages generated by external controllers are injected into the [PX4 control pipeline](../flight_stack/controller_diagrams.md). +Because messages from internal and external controllers are indistinguishable within PX4, precise synchronization is required in order to avoid the controllers writing conflicting messages to the same topic. + +In Offboard mode (only), an external system can use [`OffboardControlMode`](#the-offboardcontrolmode-px4-message) to specify which setpoint topics PX4 should publish/not publish, allowing them to be written safely by an external controller. + +::: warning + +PX4 has no means of filtering and distinguishing ROS 2 messages from internal messages, in any mode. +In order to interwork safely, the external controller must: + +- Publish PX4 setpoint messages **ONLY** in Offboard mode. +- Specify which setpoints it will write using the `OffboardControlMode` topic. +- Stream the `OffboardControlMode` topic as a keep-alive signal. +- Stream the setpoints it wants: unlike with MAVLink, PX4 won't trigger a failsafe if setpoints aren't sent regularly. + +If external setpoints are sent in any other flight mode, or they overwrite topics that have not been disabled by PX4 when in offboard mode, collisions are likely. +This will result in unexpected, and possibly catastrophic, behaviour. + +::: + +### The `OffboardControlMode` PX4 message The following ROS 2 messages and their particular fields and field values are allowed for the specified frames. In addition to providing heartbeat functionality, `OffboardControlMode` has two other main purposes: -1. Controls the level of the [PX4 control architecture](../flight_stack/controller_diagrams.md) at which offboard setpoints must be injected, and disables the bypassed controllers. -2. Determines which valid estimates (position or velocity) are required, and also which setpoint messages should be used. +1. Controls which internal PX4 control modules of the [PX4 control architecture](../flight_stack/controller_diagrams.md) shall remain active and which ones shall be disabled when the vehicle is in Offboard Mode. +2. Determines which valid estimates (position, velocity, etc.) are required. The `OffboardControlMode` message is defined as shown. @@ -69,33 +105,46 @@ For rovers see the [rover section](#rover). The fields are ordered in terms of priority such that `position` takes precedence over `velocity` and later fields, `velocity` takes precedence over `acceleration`, and so on. The first field that has a non-zero value (from top to bottom) defines what valid estimate is required in order to use offboard mode, and the setpoint message(s) that can be used. -For example, if the `acceleration` field is the first non-zero value, then PX4 requires a valid `velocity estimate`, and the setpoint must be specified using the `TrajectorySetpoint` message. +For example, if the `acceleration` field is the first non-zero value, then PX4 requires a valid `attitude estimate`, and the setpoint must be specified using the `TrajectorySetpoint` message. | desired control quantity | position field | velocity field | acceleration field | attitude field | body_rate field | thrust_and_torque field | direct_actuator field | required estimate | required message | | ------------------------ | -------------- | -------------- | ------------------ | -------------- | --------------- | ----------------------- | --------------------- | ----------------- | ------------------------------------------------------------------------------------------------------------------------------- | | position (NED) | ✓ | - | - | - | - | - | - | position | [TrajectorySetpoint](../msg_docs/TrajectorySetpoint.md) | | velocity (NED) | ✗ | ✓ | - | - | - | - | - | velocity | [TrajectorySetpoint](../msg_docs/TrajectorySetpoint.md) | -| acceleration (NED) | ✗ | ✗ | ✓ | - | - | - | - | velocity | [TrajectorySetpoint](../msg_docs/TrajectorySetpoint.md) | -| attitude (FRD) | ✗ | ✗ | ✗ | ✓ | - | - | - | none | [VehicleAttitudeSetpoint](../msg_docs/VehicleAttitudeSetpoint.md) | -| body_rate (FRD) | ✗ | ✗ | ✗ | ✗ | ✓ | - | - | none | [VehicleRatesSetpoint](../msg_docs/VehicleRatesSetpoint.md) | +| acceleration (NED) | ✗ | ✗ | ✓ | - | - | - | - | attitude | [TrajectorySetpoint](../msg_docs/TrajectorySetpoint.md) | +| attitude (FRD) | ✗ | ✗ | ✗ | ✓ | - | - | - | attitude | [VehicleAttitudeSetpoint](../msg_docs/VehicleAttitudeSetpoint.md) | +| body_rate (FRD) | ✗ | ✗ | ✗ | ✗ | ✓ | - | - | angular velocity | [VehicleRatesSetpoint](../msg_docs/VehicleRatesSetpoint.md) | | thrust and torque (FRD) | ✗ | ✗ | ✗ | ✗ | ✗ | ✓ | - | none | [VehicleThrustSetpoint](../msg_docs/VehicleThrustSetpoint.md) and [VehicleTorqueSetpoint](../msg_docs/VehicleTorqueSetpoint.md) | | direct motors and servos | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✓ | none | [ActuatorMotors](../msg_docs/ActuatorMotors.md) and [ActuatorServos](../msg_docs/ActuatorServos.md) | -where ✓ means that the bit is set, ✘ means that the bit is not set and `-` means that the bit is value is irrelevant. +where ✓ means that the bit is set, ✘ means that the bit is not set and `-` means that the bit value is irrelevant. ::: info Before using offboard mode with ROS 2, please spend a few minutes understanding the different [frame conventions](../ros2/user_guide.md#ros-2-px4-frame-conventions) that PX4 and ROS 2 use. ::: -### Copter +In the following, the different setpoint messages for the main supported airframes are explained. +For fixed-wing offboard control, please refer to the [PX4 ROS 2 Interface Library](../ros2/px4_ros2_interface_lib.md). + +### Multicopters - [px4_msgs::msg::TrajectorySetpoint](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/TrajectorySetpoint.msg) - The following input combinations are supported: - Position setpoint (`position` different from `NaN`). Non-`NaN` values of velocity and acceleration are used as feedforward terms for the inner loop controllers. - - Velocity setpoint (`velocity` different from `NaN` and `position` set to `NaN`). Non-`NaN` values acceleration are used as feedforward terms for the inner loop controllers. + - Velocity setpoint (`velocity` different from `NaN` and `position` set to `NaN`). Non-`NaN` values of acceleration are used as feedforward terms for the inner loop controllers. - Acceleration setpoint (`acceleration` different from `NaN` and `position` and `velocity` set to `NaN`) - - All values are interpreted in NED (Nord, East, Down) coordinate system and the units are `[m]`, `[m/s]` and `[m/s^2]` for position, velocity and acceleration, respectively. + - All values are interpreted in NED (North, East, Down) coordinate system and the units are `[m]`, `[m/s]` and `[m/s^2]` for position, velocity and acceleration, respectively. + + ::: warning + + Position, velocity and acceleration control for multicopters are all handled by the `mc_pos_control` module. + This module is enabled if any of `position`, `velocity` and `acceleration` fields are set to true. + However, only the content of the `TrajectorySetpoint` messages determines which of the three controllers shall run. + + This means that even if `OffboardControlMode` messages carry the intention of velocity control (only `velocity` field is set) but non-`NaN` position values are sent in the `TrajectorySetpoint` messages, then PX4 will keep running the position controller. + + ::: - [px4_msgs::msg::VehicleAttitudeSetpoint](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/VehicleAttitudeSetpoint.msg) - The following input combination is supported: @@ -194,13 +243,11 @@ The following offboard control modes bypass all internal PX4 control loops and s - [px4_msgs::msg::ActuatorMotors](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/ActuatorMotors.msg) + [px4_msgs::msg::ActuatorServos](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/ActuatorServos.msg) - You directly control the motor outputs and/or servo outputs. - - Currently works at lower level than then `control_allocator` module. - Do not publish these messages when not in offboard mode. - All the values normalized in `[-1, 1]`. For outputs that do not support negative values, negative entries map to `NaN`. - `NaN` maps to disarmed. -## MAVLink Messages +## MAVLink Offboard Control The following MAVLink messages and their particular fields and field values are allowed for the specified vehicle frames. @@ -311,7 +358,7 @@ _Offboard mode_ is affected by the following parameters: | Parameter | Description | | -------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | [COM_OF_LOSS_T](../advanced_config/parameter_reference.md#COM_OF_LOSS_T) | Time-out (in seconds) to wait when offboard connection is lost before triggering offboard lost failsafe (`COM_OBL_RC_ACT`) | -| [COM_OBL_RC_ACT](../advanced_config/parameter_reference.md#COM_OBL_RC_ACT) | Flight mode to switch to if offboard control is lost (Values are - `0`: _Position_, `1`: _Altitude_, `2`: _Manual_, `3`: *Return, `4`: *Land\*). | +| [COM_OBL_RC_ACT](../advanced_config/parameter_reference.md#COM_OBL_RC_ACT) | Flight mode to switch to if offboard control is lost (Values are - `0`: _Position_, `1`: _Altitude_, `2`: _Manual_, `3`: _Return_, `4`: _Land_). | | [COM_RC_OVERRIDE](../advanced_config/parameter_reference.md#COM_RC_OVERRIDE) | Controls whether stick movement on a multicopter (or VTOL in MC mode) causes a mode change to [Position mode](../flight_modes_mc/position.md). This is not enabled for offboard mode by default. | | [COM_RC_STICK_OV](../advanced_config/parameter_reference.md#COM_RC_STICK_OV) | The amount of stick movement that causes a transition to [Position mode](../flight_modes_mc/position.md) (if [COM_RC_OVERRIDE](#COM_RC_OVERRIDE) is enabled). | | [COM_RCL_EXCEPT](../advanced_config/parameter_reference.md#COM_RCL_EXCEPT) | Specify modes in which RC loss is ignored and the failsafe action not triggered. Set bit `2` to ignore RC loss in Offboard mode. | diff --git a/docs/en/flight_modes/return.md b/docs/en/flight_modes/return.md index 2b3bf4389d..3af824f938 100644 --- a/docs/en/flight_modes/return.md +++ b/docs/en/flight_modes/return.md @@ -110,11 +110,13 @@ The behaviour is fairly complex because it depends on the flight mode, and wheth Mission _with_ landing pattern: -- **Mission mode:** Mission is continued in "fast-forward mode" (jumps, delay and any other non-position commands ignored, loiter and other position waypoints converted to simple waypoints) and then lands. +- **Mission mode:** + - Mission is continued in "fast-forward mode" and then lands. + - DO_JUMP commands, delays and other non-position mission items are ignored, and loiter and other position waypoints are converted to simple waypoints. - **Auto mode other than mission mode:** - Ascend to a safe [minimum return altitude](#minimum-return-altitude) above any expected obstacles. - Fly directly to closest waypoint (for FW not a landing WP) and descend to waypoint altitude. - - Continue mission in fast forward mode from that waypoint. + - Continue mission in fast forward mode from that waypoint, using the same traversal rules as above. - **Manual modes:** - Ascend to a safe [minimum return altitude](#minimum-return-altitude) above any expected obstacles. - Fly directly to landing sequence position and descend to waypoint altitude @@ -124,7 +126,7 @@ Mission _without_ landing pattern defined: - **Mission mode:** - Mission flown "fast-backward" (in reverse) starting from the previous waypoint - - Jumps, delay and any other non-position commands ignored, loiter and other position waypoints converted to simple waypoints. + - DO_JUMP commands, delays and other non-position mission items are ignored, and loiter and other position waypoints are converted to simple waypoints. - VTOL vehicles transition to FW mode (if needed) before flying the mission in reverse. - On reaching waypoint 1, the vehicle ascends to the [minimum return altitude](#minimum-return-altitude) and flies to the home position (where it [lands or waits](#loiter-landing-at-destination)). - **Auto mode other than mission mode:** @@ -136,6 +138,11 @@ If no mission is defined PX4 will fly directly to home location and land (rally If the mission changes during return mode, then the behaviour is re-evaluated based on the new mission following the same rules as above (e.g. if the new mission has no landing sequence and you're in a mission, the mission is reversed). +::: info +For `RTL_TYPE=4`, PX4 currently chooses between continuing to a mission landing and reversing toward home by comparing raw mission item indices. +This is only an approximation of the flown path length, because the number if mission items is not indicative of the distance remaining and non-position items are also counted. +::: + ### Closest Safe Destination Return Type (RTL_TYPE=3) In this return type the vehicle: @@ -205,15 +212,15 @@ For this reason fixed-wing vehicles are configured to use [Mission landing/reall The RTL parameters are listed in [Parameter Reference > Return Mode](../advanced_config/parameter_reference.md#return-mode) (and summarised below). -| Parameter | Description | -| ----------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [RTL_TYPE](../advanced_config/parameter_reference.md#RTL_TYPE) | Return mechanism (path and destination).
`0`: Return to a rally point or home (whichever is closest) via direct path.
`1`: Return to a rally point or the mission landing pattern start point (whichever is closest), via direct path. If neither mission landing or rally points are defined return home via a direct path. If the destination is a mission landing pattern, follow the pattern to land.
`2`: Use mission path fast-forward to landing if a landing pattern is defined, otherwise fast-reverse to home. Ignore rally points. Fly direct to home if no mission plan is defined.
`3`: Return via direct path to closest destination: home, start of mission landing pattern or safe point. If the destination is a mission landing pattern, follow the pattern to land. | -| [RTL_RETURN_ALT](../advanced_config/parameter_reference.md#RTL_RETURN_ALT) | Return altitude in meters (default: 60m) when [RTL_CONE_ANG](../advanced_config/parameter_reference.md#RTL_CONE_ANG) is 0. If already above this value the vehicle will return at its current altitude. | -| [RTL_DESCEND_ALT](../advanced_config/parameter_reference.md#RTL_DESCEND_ALT) | Minimum return altitude and altitude at which the vehicle will slow or stop its initial descent from a higher return altitude (default: 30m) | -| [RTL_LAND_DELAY](../advanced_config/parameter_reference.md#RTL_LAND_DELAY) | Time to wait at `RTL_DESCEND_ALT` before landing (default: 0.5s) -by default this period is short so that the vehicle will simply slow and then land immediately. If set to -1 the system will loiter at `RTL_DESCEND_ALT` rather than landing. The delay is provided to allow you to configure time for landing gear to be deployed (triggered automatically). | -| [RTL_MIN_DIST](../advanced_config/parameter_reference.md#RTL_MIN_DIST) | Minimum horizontal distance from home position to trigger ascent to the return altitude specified by the "cone". If the vehicle is horizontally closer than this distance to home, it will return at its current altitude or `RTL_DESCEND_ALT` (whichever is higher) instead of first ascending to RTL_RETURN_ALT. | -| [RTL_CONE_ANG](../advanced_config/parameter_reference.md#RTL_CONE_ANG) | Half-angle of the cone that defines the vehicle RTL return altitude. Values (in degrees): 0, 25, 45, 65, 80, 90. Note that 0 is "no cone" (always return at `RTL_RETURN_ALT` or higher), while 90 indicates that the vehicle must return at the current altitude or `RTL_DESCEND_ALT` (whichever is higher). | -| [COM_RC_OVERRIDE](../advanced_config/parameter_reference.md#COM_RC_OVERRIDE) | Controls whether stick movement on a multicopter (or VTOL in MC mode) causes a mode change to [Position mode](../flight_modes_mc/position.md) (except when vehicle is handling a critical battery failsafe). This can be separately enabled for auto modes and for offboard mode, and is enabled in auto modes by default. | -| [COM_RC_STICK_OV](../advanced_config/parameter_reference.md#COM_RC_STICK_OV) | The amount of stick movement that causes a transition to [Position mode](../flight_modes_mc/position.md) (if [COM_RC_OVERRIDE](#COM_RC_OVERRIDE) is enabled). | -| [RTL_LOITER_RAD](../advanced_config/parameter_reference.md#RTL_LOITER_RAD) | [Fixed-wing Only] The radius of the loiter circle (at [RTL_LAND_DELAY](#RTL_LAND_DELAY)). | -| [MIS_TKO_LAND_REQ](../advanced_config/parameter_reference.md#MIS_TKO_LAND_REQ) | Specify whether a mission landing or takeoff pattern is _required_. Generally fixed-wing vehicles set this to require a landing pattern but VTOL do not. | +| Parameter | Description | +| ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [RTL_TYPE](../advanced_config/parameter_reference.md#RTL_TYPE) | Return mechanism (path and destination).
`0`: Return to a rally point or home (whichever is closest) via direct path.
`1`: Return to a rally point or the mission landing pattern start point (whichever is closest), via direct path. If neither mission landing or rally points are defined return home via a direct path. If the destination is a mission landing pattern, follow the pattern to land.
`2`: Use the mission path to landing while skipping DO_JUMP and other non-position mission items if a landing pattern is defined, otherwise fast-reverse to home with the same traversal rules. Ignore rally points. Fly direct to home if no mission plan is defined.
`3`: Return via direct path to closest destination: home, start of mission landing pattern or safe point. If the destination is a mission landing pattern, follow the pattern to land. | +| [RTL_RETURN_ALT](../advanced_config/parameter_reference.md#RTL_RETURN_ALT) | Return altitude in meters (default: 60m) when [RTL_CONE_ANG](../advanced_config/parameter_reference.md#RTL_CONE_ANG) is 0. If already above this value the vehicle will return at its current altitude. | +| [RTL_DESCEND_ALT](../advanced_config/parameter_reference.md#RTL_DESCEND_ALT) | Minimum return altitude and altitude at which the vehicle will slow or stop its initial descent from a higher return altitude (default: 30m) | +| [RTL_LAND_DELAY](../advanced_config/parameter_reference.md#RTL_LAND_DELAY) | Time to wait at `RTL_DESCEND_ALT` before landing (default: 0.5s) -by default this period is short so that the vehicle will simply slow and then land immediately. If set to -1 the system will loiter at `RTL_DESCEND_ALT` rather than landing. The delay is provided to allow you to configure time for landing gear to be deployed (triggered automatically). | +| [RTL_MIN_DIST](../advanced_config/parameter_reference.md#RTL_MIN_DIST) | Minimum horizontal distance from home position to trigger ascent to the return altitude specified by the "cone". If the vehicle is horizontally closer than this distance to home, it will return at its current altitude or `RTL_DESCEND_ALT` (whichever is higher) instead of first ascending to RTL_RETURN_ALT. | +| [RTL_CONE_ANG](../advanced_config/parameter_reference.md#RTL_CONE_ANG) | Half-angle of the cone that defines the vehicle RTL return altitude. Values (in degrees): 0, 25, 45, 65, 80, 90. Note that 0 is "no cone" (always return at `RTL_RETURN_ALT` or higher), while 90 indicates that the vehicle must return at the current altitude or `RTL_DESCEND_ALT` (whichever is higher). | +| [COM_RC_OVERRIDE](../advanced_config/parameter_reference.md#COM_RC_OVERRIDE) | Controls whether stick movement on a multicopter (or VTOL in MC mode) causes a mode change to [Position mode](../flight_modes_mc/position.md) (except when vehicle is handling a critical battery failsafe). This can be separately enabled for auto modes and for offboard mode, and is enabled in auto modes by default. | +| [COM_RC_STICK_OV](../advanced_config/parameter_reference.md#COM_RC_STICK_OV) | The amount of stick movement that causes a transition to [Position mode](../flight_modes_mc/position.md) (if [COM_RC_OVERRIDE](#COM_RC_OVERRIDE) is enabled). | +| [RTL_LOITER_RAD](../advanced_config/parameter_reference.md#RTL_LOITER_RAD) | [Fixed-wing Only] The radius of the loiter circle (at [RTL_LAND_DELAY](#RTL_LAND_DELAY)). | +| [MIS_TKO_LAND_REQ](../advanced_config/parameter_reference.md#MIS_TKO_LAND_REQ) | Specify whether a mission landing or takeoff pattern is _required_. Generally fixed-wing vehicles set this to require a landing pattern but VTOL do not. | diff --git a/docs/en/flight_modes_fw/mission.md b/docs/en/flight_modes_fw/mission.md index f3ee6ee95f..6dfde8ae1e 100644 --- a/docs/en/flight_modes_fw/mission.md +++ b/docs/en/flight_modes_fw/mission.md @@ -56,7 +56,7 @@ Missions can be paused by switching out of mission mode to any other mode (such If the vehicle was not capturing images when it was paused, on resuming it will head from its _current position_ towards the same waypoint as it as was heading towards originally. If the vehicle was capturing images (has camera trigger items) it will instead head from its current position towards the last waypoint it traveled through (before pausing), and then retrace its path at the same speed and with the same camera triggering behaviour. This ensures that in survey/camera missions the planned path is captured. -A mission can be uploaded while the vehicle is paused, in which which case the current active mission item is set to 1. +A mission can be uploaded while the vehicle is paused, in which case the current active mission item is set to 1. ::: info When a mission is paused while the camera on the vehicle was triggering, PX4 sets the current active mission item to the previous waypoint, so that when the mission is restarted the vehicle will retrace its last mission leg. @@ -95,8 +95,8 @@ _QGroundControl_ provides additional GCS-level mission handling support (in addi For more information see: -- [Remove mission after vehicle lands](https://docs.qgroundcontrol.com/master/en/qgc-user-guide/releases/stable_v3.2_long.html#remove-mission-after-vehicle-lands) -- [Resume mission after Return mode](https://docs.qgroundcontrol.com/master/en/qgc-user-guide/releases/stable_v3.2_long.html#resume-mission) +- [Remove mission after vehicle lands](https://docs.qgroundcontrol.com/Stable_V4.3/en/qgc-user-guide/releases/stable_v3.2_long.html#remove-mission-after-vehicle-lands) +- [Resume mission after Return mode](https://docs.qgroundcontrol.com/Stable_V4.3/en/qgc-user-guide/releases/stable_v3.2_long.html#resume-mission) ## Mission Parameters @@ -210,7 +210,7 @@ The diagram below shows the sorts of paths that you might expect. ![acc-rad](../../assets/flying/acceptance_radius_mission.png) Vehicles switch to the next waypoint as soon as they enter the acceptance radius. -This is defined by the "L1 distance", which is is computed from two parameters: [NPFG_DAMPING](../advanced_config/parameter_reference.md#NPFG_DAMPING) and [NPFG_PERIOD](../advanced_config/parameter_reference.md#NPFG_PERIOD), and the current ground speed. +This is defined by the "L1 distance", which is computed from two parameters: [NPFG_DAMPING](../advanced_config/parameter_reference.md#NPFG_DAMPING) and [NPFG_PERIOD](../advanced_config/parameter_reference.md#NPFG_PERIOD), and the current ground speed. By default, it's about 70 meters. The equation is: @@ -312,7 +312,7 @@ On _QGroundControl_ a popup button appears during landing to enable this. Aborting the landing results in a climb out to an orbit pattern centered above the land waypoint. The maximum of the aircraft's current altitude and [MIS_LND_ABRT_ALT](#MIS_LND_ABRT_ALT) is set as the abort orbit altitude height relative to (above) the landing waypoint. -Landing configuration (e.g. flaps, spoilers, landing airspeed) is disabled during abort and the aicraft flies in cruise conditions. +Landing configuration (e.g. flaps, spoilers, landing airspeed) is disabled during abort and the aircraft flies in cruise conditions. The abort command is disabled during the flare for safety. Operators may still manually abort the landing by switching to any manual mode, such as [Stabilized mode](../flight_modes_fw/stabilized.md)), though it should be noted that this is risky! @@ -352,7 +352,7 @@ Note that if the wheel controller is enabled ([FW_W_EN](#FW_W_EN)), the controll ::: info Nudging should not be used to supplement poor position control tuning. -If the vehicle is regularly showing poor tracking peformance on a defined path, please refer to the [fixed-wing control tuning guide](../flight_modes_fw/position.md) for instruction. +If the vehicle is regularly showing poor tracking performance on a defined path, please refer to the [fixed-wing control tuning guide](../flight_modes_fw/position.md) for instruction. ::: | Parameter | Description | @@ -363,7 +363,7 @@ If the vehicle is regularly showing poor tracking peformance on a defined path, ### Near Ground Safety Constraints -In landing mode, the distance sensor is used to determine proximity to the ground, and the airframe's geometry is used to calculate roll contraints to prevent wing strike. +In landing mode, the distance sensor is used to determine proximity to the ground, and the airframe's geometry is used to calculate roll constraints to prevent wing strike. ![Fixed-wing landing nudging](../../assets/flying/wing_geometry.png) diff --git a/docs/en/flight_modes_fw/takeoff.md b/docs/en/flight_modes_fw/takeoff.md index b95d0806e1..54769f7974 100644 --- a/docs/en/flight_modes_fw/takeoff.md +++ b/docs/en/flight_modes_fw/takeoff.md @@ -14,7 +14,7 @@ Vehicles are [hand or catapult launched](#catapult-hand-launch) by default, but - Flying vehicles will failsafe if they lose the altitude estimate. - Disarmed vehicles can switch to mode without valid altitude estimate but can't arm. - RC control switches can be used to change flight modes. -- RC stick movement is ignored in catapult takeoff but can can be used to nudge the vehicle in runway takeoff. +- RC stick movement is ignored in catapult takeoff but can be used to nudge the vehicle in runway takeoff. - The [Failure Detector](../config/safety.md#failure-detector) will automatically stop the engines if there is a problem on takeoff. @@ -100,18 +100,18 @@ To launch in this mode: The _launch detector_ is affected by the following parameters: -| Parameter | Description | -| ----------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | -| [FW_LAUN_DETCN_ON](../advanced_config/parameter_reference.md#FW_LAUN_DETCN_ON) | Enable automatic launch detection. If disabled motors spin up on arming already | -| [FW_LAUN_AC_THLD](../advanced_config/parameter_reference.md#FW_LAUN_AC_THLD) | Acceleration threshold (acceleration in body-forward direction must be above this value) | -| [FW_LAUN_AC_T](../advanced_config/parameter_reference.md#FW_LAUN_AC_T) | Trigger time (acceleration must be above threshold for this amount of seconds) | -| [FW_LAUN_MOT_DEL](../advanced_config/parameter_reference.md#FW_LAUN_MOT_DEL) | Delay from launch detection to motor spin up | -| [FW_LAUN_CS_LK_DY](../advanced_config/parameter_reference.md#FW_LAUN_CS_LK_DY) | Delay from launch detection to unlocking the control surfaces | -| [CA_CS_LAUN_LK](../advanced_config/parameter_reference.md#CA_CS_LAUN_LK) | Bitmask to select which control surfaces are to be locked during launch | +| Parameter | Description | +| ----------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | +| [FW_LAUN_DETCN_ON](../advanced_config/parameter_reference.md#FW_LAUN_DETCN_ON) | Enable automatic launch detection. If disabled motors spin up on arming already | +| [FW_LAUN_AC_THLD](../advanced_config/parameter_reference.md#FW_LAUN_AC_THLD) | Acceleration threshold (norm of acceleration must be above this value) | +| [FW_LAUN_AC_T](../advanced_config/parameter_reference.md#FW_LAUN_AC_T) | Trigger time (acceleration must be above threshold for this amount of seconds) | +| [FW_LAUN_MOT_DEL](../advanced_config/parameter_reference.md#FW_LAUN_MOT_DEL) | Delay from launch detection to motor spin up | +| [FW_LAUN_CS_LK_DY](../advanced_config/parameter_reference.md#FW_LAUN_CS_LK_DY) | Delay from launch detection to unlocking the control surfaces | +| [CA_CS_LAUN_LK](../advanced_config/parameter_reference.md#CA_CS_LAUN_LK) | Bitmask to select which control surfaces are to be locked during launch | ## Runway Takeoff {#runway_launch} -Runway takeoffs can be used by vehicles with landing gear and and steerable wheel (only). +Runway takeoffs can be used by vehicles with landing gear and steerable wheel (only). You will first need to enable the wheel controller using the parameter [FW_W_EN](#FW_W_EN). Vehicle should be centered and aligned with runway when takeoff is initiated. diff --git a/docs/en/flight_modes_mc/follow_me.md b/docs/en/flight_modes_mc/follow_me.md index 33b02a896e..9392a697ae 100644 --- a/docs/en/flight_modes_mc/follow_me.md +++ b/docs/en/flight_modes_mc/follow_me.md @@ -31,7 +31,7 @@ By default it will follow from directly behind the target at a distance of 8 met Users can adjust the follow angle, height and distance using an RC controller as shown above: - _Follow Height_ is controlled with the `up-down` input ("Throttle"). - Center the stick to keep follow the target at a constant hight. Raise or lower the stick to adjust height. + Center the stick to keep follow the target at a constant height. Raise or lower the stick to adjust height. - _Follow Distance_ is controlled with the `forward-back` input ("Pitch"). Pushing the stick forward increases the follow distance, pulling it back decreases the distance. - _Follow Angle_ is controlled with the `left-right` input ("Roll"). @@ -117,7 +117,7 @@ The altitude control mode determine whether the vehicle altitude is relative to - `2D + Terrain` makes the drone follow at a fixed height relative to the terrain underneath it, using information from a distance sensor. - If the vehicle does not have a distance sensor following will be identical to `2D tracking`. - Distance sensors aren't always accurate and vehicles may be "jumpy" when flying in this mode. - - Note that that height is relative to the ground underneath the vehicle, not the follow target. + - Note that height is relative to the ground underneath the vehicle, not the follow target. The drone may not follow altitude changes of the target! - `3D tracking` mode makes the drone follow at a height relative to the follow target, as supplied by its GPS sensor. diff --git a/docs/en/flight_modes_mc/mission.md b/docs/en/flight_modes_mc/mission.md index 04e7ccf433..d49685bc14 100644 --- a/docs/en/flight_modes_mc/mission.md +++ b/docs/en/flight_modes_mc/mission.md @@ -59,7 +59,7 @@ Missions can be paused by switching out of mission mode to any other mode (such If the vehicle was not capturing images when it was paused, on resuming it will head from its _current position_ towards the same waypoint as it as was heading towards originally. If the vehicle was capturing images (has camera trigger items) it will instead head from its current position towards the last waypoint it traveled through (before pausing), and then retrace its path at the same speed and with the same camera triggering behaviour. This ensures that in survey/camera missions the planned path is captured. -A mission can be uploaded while the vehicle is paused, in which which case the current active mission item is set to 1. +A mission can be uploaded while the vehicle is paused, in which case the current active mission item is set to 1. ::: info When a mission is paused while the camera on the vehicle was triggering, PX4 sets the current active mission item to the previous waypoint, so that when the mission is restarted the vehicle will retrace its last mission leg. @@ -95,8 +95,8 @@ _QGroundControl_ provides additional GCS-level mission handling support (in addi For more information see: -- [Remove mission after vehicle lands](https://docs.qgroundcontrol.com/master/en/qgc-user-guide/releases/stable_v3.2_long.html#remove-mission-after-vehicle-lands) -- [Resume mission after Return mode](https://docs.qgroundcontrol.com/master/en/qgc-user-guide/releases/stable_v3.2_long.html#resume-mission) +- [Remove mission after vehicle lands](https://docs.qgroundcontrol.com/Stable_V4.3/en/qgc-user-guide/releases/stable_v3.2_long.html#remove-mission-after-vehicle-lands) +- [Resume mission after Return mode](https://docs.qgroundcontrol.com/Stable_V4.3/en/qgc-user-guide/releases/stable_v3.2_long.html#resume-mission) ## Mission Parameters diff --git a/docs/en/flight_modes_mc/position.md b/docs/en/flight_modes_mc/position.md index 75fae4ab21..f577f3f234 100644 --- a/docs/en/flight_modes_mc/position.md +++ b/docs/en/flight_modes_mc/position.md @@ -78,7 +78,7 @@ All the parameters in the [Multicopter Position Control](../advanced_config/para ### Position Loss/Safety Position mode is dependent on having an acceptable position estimate. -If the estimate falls below acceptable levels, for example due to GPS loss, this may trigger a [Position (GPS) Loss Failsafe](../config/safety.md#position-gnss-loss-failsafe). +If the estimate falls below acceptable levels, for example due to GPS loss, this may trigger a [Position (GPS) Loss Failsafe](../config/safety.md#position-loss-failsafe). Depending on configuration, whether you have a remote control, and whether there is an adequate altitude estimate, PX4 may switch to altitude mode, manual mode, land mode or terminate. ## See Also diff --git a/docs/en/flight_modes_mc/return.md b/docs/en/flight_modes_mc/return.md index f5aef18d38..c3b45ccb59 100644 --- a/docs/en/flight_modes_mc/return.md +++ b/docs/en/flight_modes_mc/return.md @@ -48,7 +48,7 @@ This is useful when there are few obstacles near the destination, because it may ![Return mode cone](../../assets/flying/rtl_cone.jpg) -The cone affects the minimum return altitude if return mode is triggered within the cylinder defined by the maximum cone radius and `RTL_RETURN_ALT`: outside this cyclinder `RTL_RETURN_ALT` is used. +The cone affects the minimum return altitude if return mode is triggered within the cylinder defined by the maximum cone radius and `RTL_RETURN_ALT`: outside this cylinder `RTL_RETURN_ALT` is used. Inside the code the minimum return altitude is the intersection of the vehicle position with the cone, or `RTL_DESCEND_ALT` (whichever is higher). In other words, the vehicle must always ascend to at least `RTL_DESCEND_ALT` if below that value. diff --git a/docs/en/flight_modes_rover/auto.md b/docs/en/flight_modes_rover/auto.md index 937ae0d44d..52f58a6044 100644 --- a/docs/en/flight_modes_rover/auto.md +++ b/docs/en/flight_modes_rover/auto.md @@ -13,14 +13,14 @@ The mission is typically created and uploaded with a Ground Control Station (GCS The following commands can be used in missions at time of writing (PX4 v1.16): -| QGC mission item | Command | Description | -| ------------------- | ------------------------------------------------------------ | ------------------------------------------------- | -| Mission start | [MAV_CMD_MISSION_START](MAV_CMD_MISSION_START) | Starts the mission. | -| Waypoint | [MAV_CMD_NAV_WAYPOINT](MAV_CMD_NAV_WAYPOINT) | Navigate to waypoint. | -| Return to launch | [MAV_CMD_NAV_RETURN_TO_LAUNCH][MAV_CMD_NAV_RETURN_TO_LAUNCH] | Return to the launch location. | -| Change speed | [MAV_CMD_DO_CHANGE_SPEED][MAV_CMD_DO_CHANGE_SPEED] | Change the speed setpoint | -| Set launch location | [MAV_CMD_DO_SET_HOME](MAV_CMD_DO_SET_HOME) | Changes launch location to specified coordinates. | -| Jump to item (all) | [MAV_CMD_DO_JUMP][MAV_CMD_DO_JUMP] (and other jump commands) | Jump to specified mission item. | +| QGC mission item | Command | Description | +| ------------------- | ------------------------------------------- | ------------------------------------------------- | +| Mission start | [MAV_CMD_MISSION_START] | Starts the mission. | +| Waypoint | [MAV_CMD_NAV_WAYPOINT] | Navigate to waypoint. | +| Return to launch | [MAV_CMD_NAV_RETURN_TO_LAUNCH] | Return to the launch location. | +| Change speed | [MAV_CMD_DO_CHANGE_SPEED] | Change the speed setpoint | +| Set launch location | [MAV_CMD_DO_SET_HOME] | Changes launch location to specified coordinates. | +| Jump to item (all) | [MAV_CMD_DO_JUMP] (and other jump commands) | Jump to specified mission item. | [MAV_CMD_MISSION_START]: https://mavlink.io/en/messages/common.html#MAV_CMD_MISSION_START [MAV_CMD_NAV_WAYPOINT]: https://mavlink.io/en/messages/common.html#MAV_CMD_NAV_WAYPOINT diff --git a/docs/en/flight_modes_vtol/mission.md b/docs/en/flight_modes_vtol/mission.md index be4d19cf58..09693107fa 100644 --- a/docs/en/flight_modes_vtol/mission.md +++ b/docs/en/flight_modes_vtol/mission.md @@ -11,7 +11,7 @@ For more information see the specific docs for each mode: - [Mission Mode (MC)](../flight_modes_mc/mission.md) - [Mission Mode (FW)](../flight_modes_fw/mission.md) -The following sections outline mission mode behaviour that is VTOL specificL. +The following sections outline mission mode behaviour that is VTOL specific. ## Mission Commands diff --git a/docs/en/flight_stack/controller_diagrams.md b/docs/en/flight_stack/controller_diagrams.md index 2a63e7e6d7..6c3822f4bf 100644 --- a/docs/en/flight_stack/controller_diagrams.md +++ b/docs/en/flight_stack/controller_diagrams.md @@ -109,7 +109,7 @@ Increasing aircraft pitch angle will cause an increase in height but also a decr Increasing the throttle will increase airspeed but also height will increase due to the increase in lift. Therefore, we have two inputs (pitch angle and throttle) which both affect the two outputs (airspeed and altitude) which makes the control problem challenging. -TECS offers a solution by respresenting the problem in terms of energies rather than the original setpoints. +TECS offers a solution by representing the problem in terms of energies rather than the original setpoints. The total energy of an aircraft is the sum of kinetic and potential energy. Thrust (via throttle control) increases the total energy state of the aircraft. A given total energy state can be achieved by arbitrary combinations of potential and kinetic energies. In other words, flying at a high altitude but at a slow speed can be equivalent to flying at a low altitude but at a faster airspeed in a total energy sense. We refer to this as the specific energy balance and it is calculated from the current altitude and true airspeed setpoint. The specific energy balance is controlled via the aircraft pitch angle. @@ -163,6 +163,42 @@ $$\dot{B} = \gamma - \frac{\dot{V_T}}{g}$$ ## Fixed-Wing Attitude Controller +### Setpoint modificaiton + +Most fixed-wing aircraft cannot generate a sustained yaw rate using the rudder alone. As a result, the yaw component of the quaternion attitude error should be removed before computing the control action. + +This is achieved by premultiplying the setpoint quaternion with a rotation about the global down axis. The additional rotation cancels the yaw component of the attitude error while preserving the roll and pitch components. + +The yaw offset is + +$$ +\psi =-2\frac{\hat{q}_0 q_3 - \hat{q}_1 q_2 + \hat{q}_2 q_1 -\hat{q}_3 q_0} +{\hat{q}_0 q_0 - \hat{q}_1 q_1 - \hat{q}_2 q_2 + \hat{q}_3 q_3} +$$ + +The quaternion representing the yaw offset is + +$$ +ℚ_{\text{yaw}} = +\operatorname{normalize} +\left( +\begin{bmatrix} +1 \ +0 \ +0 \ +\frac{\psi}{2} +\end{bmatrix} +\right) +$$ + +The corrected setpoint quaternion is then obtained by applying the rotation + +$$ +ℚ_{\text{sp, corrected}} = ℚ_{\text{yaw}} \otimes ℚ_{sp} +$$ + +### Quaternion based attitude controller + ![FW Attitude Controller Diagram](../../assets/diagrams/px4_fw_attitude_controller_diagram.png) -### Tailsitter +### Tailsitter {#tailsitter_video} [UAV Works VALAQ Patrol Tailsitter](https://www.valaqpatrol.com/valaq_patrol_technical_data/) @@ -135,7 +137,7 @@ VTOL Control & Airspeed Fault Detection (PX4 Developer Summit 2019) -### Tiltrotor +### Tiltrotor {#tiltrotor_video} [Convergence Tiltrotor](../frames_vtol/vtol_tiltrotor_eflite_convergence_pixfalcon.md) diff --git a/docs/en/frames_vtol/tailsitter.md b/docs/en/frames_vtol/tailsitter.md index cddc2bfb1e..6a04209516 100644 --- a/docs/en/frames_vtol/tailsitter.md +++ b/docs/en/frames_vtol/tailsitter.md @@ -88,35 +88,36 @@ This section contains videos that are specific to Tailsitter VTOL (videos that a ## Gallery -
-
- -
- wingtraone -
-
-
- -
- -
-
-
- -
- -
-
-
- -
- -
-
- -
+:::: tabs + +::: tab WingtraOne +[WingtraOne](https://wingtra.com/mapping-drone-fast-accurate-surveying/) + +![Wingtra: WingtraOne VTOL Duo Tailsitter](../../assets/airframes/vtol/wingtraone/hero.jpg) +::: + +::: tab Skypull +[Skypull](https://www.skypull.technology/) + +![Skypull SP-1 VTOL QuadTailsitter](../../assets/airframes/vtol/skypull/skypull_sp1.jpg) +::: + +::: tab TBS Caipiroshka +[TBS Caipiroshka](../frames_vtol/vtol_tailsitter_caipiroshka_pixracer.md) + +![TBS Caipiroshka](../../assets/airframes/vtol/caipiroshka/caipiroshka.jpg) +::: + +::: tab Woshark +[Woshark](http://uav-cas.ac.cn/WOSHARK/) + +![Woshark](../../assets/airframes/vtol/xdwgood_ax1800/hero.jpg) +::: + +::: tab VALAQ Patrol Tailsitter +[UAV Works VALAQ Patrol Tailsitter](https://www.valaqpatrol.com/valaq_patrol_technical_data/) + +!["UAV Works VALAQ Patrol Tailsitte](../../assets/airframes/vtol/uav_works_valaq_patrol/hero.jpg) +::: + +:::: diff --git a/docs/en/frames_vtol/vtol_quadplane_falcon_vertigo_hybrid_rtf_dropix.md b/docs/en/frames_vtol/vtol_quadplane_falcon_vertigo_hybrid_rtf_dropix.md index 5c6db19062..28fed60b00 100644 --- a/docs/en/frames_vtol/vtol_quadplane_falcon_vertigo_hybrid_rtf_dropix.md +++ b/docs/en/frames_vtol/vtol_quadplane_falcon_vertigo_hybrid_rtf_dropix.md @@ -2,6 +2,7 @@ :::warning Discontinued The Falcon Venturi FPV Wing frame on which this vehicle is based is no longer available. +The Dropix FC used by this vehicle is discontinued. ::: The _Falcon Vertigo Hybrid VTOL_ is a quadplane VTOL aircraft that has been designed to work with PX4 and the Dropix (Pixhawk compatible) flight controller. It can carry a small GoPro camera. @@ -12,7 +13,7 @@ The components can also be purchased separately. Key information: - **Frame:** Falcon Vertigo Hybrid VTOL -- **Flight controller:** Dropix +- **Flight controller:** Dropix (Discontineud) - **Wing span:** 1.3m ![Falcon Vertigo Hybrid VTOL RTF](../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_complete.jpg) @@ -35,7 +36,7 @@ Almost everything you need is provided in the RTF kit (the links next to compone - Pusher motor power system - Carbon fiber tubes and mounts - G10 motor mounts -- 1 x [3700mah 4S 30C Lipo battery](https://www.overlander.co.uk/batteries/lipo-batteries/power-packs/3700mah-4s-14-8v-25c-lipo-battery-overlander-sport.html) +- 1 x [3700mah 4S 30C Lipo battery](https://wheelspinmodels.co.uk/i/3700mah-4s-14.8v-25c-lipo-battery-overlander-262221/) - Dropix power distribution board and cable The kit does not come with a radio receiver or (optional) telemetry modules. @@ -113,10 +114,6 @@ This kit includes Dropix flight controller with most of the required electronics -::: info -General information about connecting Dropix can be found in [Dropix Flight Controller](../flight_controller/dropix.md). -::: - #### Connect the ESC power connector and pass the signals cables to the flight controller 1. Connect the ESC to the power module using the XT60 connector diff --git a/docs/en/frames_vtol/vtol_quadplane_foxtech_loong_2160.md b/docs/en/frames_vtol/vtol_quadplane_foxtech_loong_2160.md index fd6063024b..ee76c6ec74 100644 --- a/docs/en/frames_vtol/vtol_quadplane_foxtech_loong_2160.md +++ b/docs/en/frames_vtol/vtol_quadplane_foxtech_loong_2160.md @@ -43,14 +43,14 @@ The following options have been tested: - [Holybro PM08D Power Module (alternative to Auterion PM)](https://holybro.com/collections/power-modules-pdbs/products/pm08d-digital-power-module-14s-200a) - [GPS F9P (included in Skynode eval. kit)](../gps_compass/rtk_gps_holybro_h-rtk-f9p.md) - [GPS M9N (cheaper alternative to F9P)](../gps_compass/rtk_gps_holybro_h-rtk-m8p.md) -- [Airspeed sensor (included in Skynode eval. kit)](https://www.dualrc.com/parts/airspeed-sensor-sdp33) — recommended for improved safety and performance +- [Airspeed sensor (included in Skynode eval. kit)](https://www.dualrc.com/parts/p/airspeed-sensor-sdp33) — recommended for improved safety and performance - [Airspeed sensor (cheaper alternative)](https://holybro.com/products/digital-air-speed-sensor-ms4525do) - [Lidar Lightware lw20-c (included in Skynode eval. kit)](../sensor/sfxx_lidar.md) (Optional) - [Lidar Seeed Studio PSK-CM8JL65-CC5 (cheaper alternative)](https://www.seeedstudio.com/PSK-CM8JL65-CC5-Infrared-Distance-Measuring-Sensor-p-4028.html) (Optional) - [Radio (RC) System](../getting_started/rc_transmitter_receiver.md) of your preference -- [Groundstation and Radio link](https://holybro.com/collections/rc-radio-transmitter-receiver/products/skydroid-h12?variant=42940989931709) +- [Groundstation and Radio link](https://holybro.com/products/skydroid-h12) - [USB-C extension cable](https://www.digitec.ch/en/s1/product/powerguard-usb-c-usb-c-025-m-usb-cables-22529949?dbq=1&gclid=Cj0KCQjw2cWgBhDYARIsALggUhrh-z-7DSU0wKfLBVa8filkXLQaxUpi7pC0ffQyRzLng8Ph01h2R1gaAp0mEALw_wcB&gclsrc=aw.ds) -- [I2C Splitter](https://www.3dxr.co.uk/autopilots-c2/the-cube-aka-pixhawk-2-1-c9/cube-cables-accessories-sensors-c15/cubepilot-i2c-can-splitter-jst-gh-4pin-p2840) +- [I2C Splitter](https://www.3dxr.co.uk/autopilots-c2/the-cube-aka-pixhawk-2-1-c9/cube-cables-accessories-sensors-c15/cubepilot-i2c-can-splitter-jst-gh-4pin-hx4-06152-p2840) - [3D-Printed mounts](https://github.com/PX4/PX4-Autopilot/raw/main/docs/assets/airframes/vtol/foxtech_loong_2160/loong-3d-prints.zip) - 1x Baseplate - 1x Stack-fixture @@ -301,7 +301,7 @@ To load the file: - If the [Lidar Lightware lw20-c (included in Skynode eval. kit)](../sensor/sfxx_lidar.md) is used, [SENS_EN_SF1XX](../advanced_config/parameter_reference.md#SENS_EN_SF1XX) needs to be set to 6 (SF/LW/20c). - Make that the correct airspeed sensor is selected. - If you use the recommended [SDP33 airspeed sensor](https://www.dualrc.com/parts/airspeed-sensor-sdp33) no changes will be needed as [SENS_EN_SDP3X](../advanced_config/parameter_reference.md#SENS_EN_SDP3X) is enabled (set to `1`) in the parameter file. + If you use the recommended [SDP33 airspeed sensor](https://www.dualrc.com/parts/p/airspeed-sensor-sdp33) no changes will be needed as [SENS_EN_SDP3X](../advanced_config/parameter_reference.md#SENS_EN_SDP3X) is enabled (set to `1`) in the parameter file. ### Sensor Calibration diff --git a/docs/en/frames_vtol/vtol_tailsitter_caipiroshka_pixracer.md b/docs/en/frames_vtol/vtol_tailsitter_caipiroshka_pixracer.md index c3880cbf69..8bb61f85b4 100644 --- a/docs/en/frames_vtol/vtol_tailsitter_caipiroshka_pixracer.md +++ b/docs/en/frames_vtol/vtol_tailsitter_caipiroshka_pixracer.md @@ -4,7 +4,7 @@ The Caipiroshka VTOL is a slightly modified _TBS Caipirinha_. ::: info The _TBS Caipirinha_ has been superseded and is no longer available. -These instructions _should_ work with the updated vehicle: [TBS Caipirinha 2](https://team-blacksheep.com/products/prod:tbs_caipi2_pnp). +These instructions _should_ work with the updated vehicle: [TBS Caipirinha 2](https://www.team-blacksheep.com/products/prod:tbs_caipi2_pnp). A number of other components have been updated in the parts list too. ::: @@ -12,7 +12,7 @@ A number of other components have been updated in the parts list too. ## Parts List -- TBS Caipirinha Wing (no longer available - try [TBS Caipirinha 2](https://team-blacksheep.com/products/prod:tbs_caipi2_pnp)) +- TBS Caipirinha Wing (no longer available - try [TBS Caipirinha 2](https://www.team-blacksheep.com/products/prod:tbs_caipi2_pnp)) - Left and right 3D-printed motor mount (design files) - CW 8045 propeller ([Eflight store](https://www.banggood.com/GEMFAN-Carbon-Nylon-8045-CWCCW-Propeller-For-Quadcopters-1-Pair-p-950874.html)) - CCW 8045 propeller ([Eflight store](https://www.banggood.com/GEMFAN-Carbon-Nylon-8045-CWCCW-Propeller-For-Quadcopters-1-Pair-p-950874.html)) @@ -24,7 +24,7 @@ A number of other components have been updated in the parts list too. - [GetFPV](https://www.getfpv.com/lumenier-30a-blheli-s-esc-opto-2-4s.html) - BEC (3A, 5-5.3V) (only needed if you are using ESCs which cannot act as a 5V power supply for the output rail) - 3S 2200 mA LiPo battery - - Team Orion 3S 11.1V 50 C ([Hobbyshop store](https://www.hobbyshop.ch/modellbau-elektronik/akku/team-orion-lipo-2200-3s-11-1v-50c-xt60-ori60163.html)) + - Team Orion 3S 11.1V 50 C ([Hobbyshop store](https://www.hobbyshop.ch/team-orion-lipo-2200-3s-11-1v-50c-xt60-ori60163.html)) - [Pixracer autopilot board + power module](../flight_controller/pixracer.md) - [Digital airspeed sensor](https://hobbyking.com/en_us/hkpilot-32-digital-air-speed-sensor-and-pitot-tube-set.html) diff --git a/docs/en/frames_vtol/vtol_tiltrotor_omp_hobby_zmo_fpv.md b/docs/en/frames_vtol/vtol_tiltrotor_omp_hobby_zmo_fpv.md index a850aedbb9..af6bcfe46e 100644 --- a/docs/en/frames_vtol/vtol_tiltrotor_omp_hobby_zmo_fpv.md +++ b/docs/en/frames_vtol/vtol_tiltrotor_omp_hobby_zmo_fpv.md @@ -25,9 +25,9 @@ Depending on the final takeoff weight the hover time might be limited (there is ## Where to Buy -- [OMP-Hobby](https://www.omphobby.com/OMPHOBBY-ZMO-VTOL-FPV-Aircraft-With-DJI-Goggles-And-Remote-Controller-p3069854.html) - [GetFPV](https://www.getfpv.com/omphobby-zmo-z3-vtol-fpv-1200mm-arf-plane-kit-no-fpv-system.html) - [FoxtechFPV](https://www.foxtechfpv.com/zmo-pro-fpv-vtol.html) +- [RMRC](https://www.readymaderc.com/products/details/omp-hobby-zmo-vtol-fpv-airplane-rtf-goggles-radio) ## Flight Controller @@ -43,7 +43,7 @@ The approximate maximum size of the FC is: 50x110x22mm - [GPS F9P (included in Skynode eval. kit)](../gps_compass/rtk_gps_holybro_h-rtk-f9p.md) - [GPS M9N (cheaper alternative to F9P)](../gps_compass/rtk_gps_holybro_h-rtk-m8p.md) -- [Airspeed sensor (included in Skynode eval. kit)](https://www.dualrc.com/parts/airspeed-sensor-sdp33) — recommended for improved safety and performance +- [Airspeed sensor (included in Skynode eval. kit)](https://www.dualrc.com/parts/p/airspeed-sensor-sdp33) — recommended for improved safety and performance - [Airspeed sensor (cheaper alternative)](https://holybro.com/products/digital-air-speed-sensor-ms4525do) - [Lidar Lightware lw20-c (included in Skynode eval. kit)](../sensor/sfxx_lidar.md) (Optional) - [Lidar Seeed Studio PSK-CM8JL65-CC5 (cheaper alternative)](https://www.seeedstudio.com/PSK-CM8JL65-CC5-Infrared-Distance-Measuring-Sensor-p-4028.html) (Optional) @@ -79,7 +79,7 @@ The following tools were used for this build. ### Preparations Remove the original flight controller, ESC and wing connector cables. -Also remove the the propellers. +Also remove the propellers. This will help you with the handling of the vehicle and will reduce the risk of an injury due to an unintentional motor startup. ZMO FPV in it's original state. @@ -97,7 +97,7 @@ Flight controller and wing connectors removed from the vehicle. 1. Unsolder the 3 female banana plug connectors of the rear motor (might not be necessary for the Pixhawk 6 integration). 1. Screw the ESC back in place with 4 M2.5 x 12 screws. 1. Shorten the rear motor wires and solder them as shown in the picture into place. -1. Solder signal and GND wires to the PWM input ot the ESC. +1. Solder signal and GND wires to the PWM input to the ESC. ![ESC 01](../../assets/airframes/vtol/omp_hobby_zmo_fpv/esc-01.jpg) @@ -288,7 +288,7 @@ To load the file: The airspeed sensor can be enabled in the [Parameters](../advanced_config/parameters.md#finding-updating-parameters) tab. -- If the [recommended airspeed sensor (SDP33)](https://www.dualrc.com/parts/airspeed-sensor-sdp33) is used, `SENS_EN_SDP3X` needs to be enabled. +- If the [recommended airspeed sensor (SDP33)](https://www.dualrc.com/parts/p/airspeed-sensor-sdp33) is used, `SENS_EN_SDP3X` needs to be enabled. - If the [Lidar Lightware lw20-c (included in Skynode eval. kit)](../sensor/sfxx_lidar.md) is used, `SENS_EN_SF1XX` needs to be set to 6 (SF/LW/20c). ### Sensor Calibration diff --git a/docs/en/getting_started/flight_reporting.md b/docs/en/getting_started/flight_reporting.md index 1485d71592..7f51c14fdf 100644 --- a/docs/en/getting_started/flight_reporting.md +++ b/docs/en/getting_started/flight_reporting.md @@ -38,7 +38,7 @@ For more information see [Settings > MAVLink Settings > MAVLink 2 Logging (PX4 o ## Sharing the Log Files for Review by PX4 Developers -The [Flight Review](https://logs.px4.io/) log file link can be shared for discussion in the [support forums](../contribute/support.md#forums-and-chat) or a [Github issue](../index.md#reporting-bugs-issues). +The [Flight Review](https://logs.px4.io/) log file link can be shared for discussion in the [support forums](../contribute/support.md#forums-and-chat) or a [Github issue](../contribute/support.md#issue-bug-reporting). ## Log Configuration diff --git a/docs/en/getting_started/rc_transmitter_receiver.md b/docs/en/getting_started/rc_transmitter_receiver.md index af96213ed0..c07886d0ab 100644 --- a/docs/en/getting_started/rc_transmitter_receiver.md +++ b/docs/en/getting_started/rc_transmitter_receiver.md @@ -3,13 +3,15 @@ A Radio Control (RC) system can be used to _manually_ control your vehicle from a handheld RC controller. This topic provides an overview of how RC works, how to choose an appropriate radio system for your vehicle, and how to connect it to your flight controller. -:::tip -PX4 can also be manually controlled using a [Joystick](../config/joystick.md) or gamepad-like controller: this is different to an RC system! -The [COM_RC_IN_MODE](../advanced_config/parameter_reference.md#COM_RC_IN_MODE) parameter [can be set](../advanced_config/parameters.md) to choose whether RC (default), Joystick, both, or neither, are enabled. +::: info +PX4 does not require a manual control system for autonomous flight modes. ::: -::: info -PX4 does not require a remote control system for autonomous flight modes. +:::tip +PX4 can also be [manually controlled](../config/manual_control.md) using a [Joystick](../config/joystick.md) or gamepad-like controller. + +By default PX4 will latch the first valid controller it discovers and use it until the vehicle reboots. +If you have multiple controllers and you want to define their priority see [Manual Control > PX4 Configuration](../config/manual_control.md#px4-configuration). ::: ## How do RC Systems Work? diff --git a/docs/en/gps_compass/gps_cuav_neo_3.md b/docs/en/gps_compass/gps_cuav_neo_3.md index a121b053eb..9950af6de2 100644 --- a/docs/en/gps_compass/gps_cuav_neo_3.md +++ b/docs/en/gps_compass/gps_cuav_neo_3.md @@ -47,7 +47,7 @@ It integrates Ublox M9N, IST8310, three-color LED lights and safety switches, an ## Where to Buy -- [CUAV](https://cuav.en.alibaba.com/product/1600217379204-820872629/CUAV_NEO_3_M9N_GPS_Module_for_Pixhawk_Compass_gps_tracker_navigation_gps.html?spm=a2700.shop_oth.74.1.636e28725EvVHb) +- [CUAV](https://www.alibaba.com/product-detail/CUAV_NEO_3_M9N_GPS_Module_for_Pixhawk_Compass_gps_tracker_navigation_gps_1600217379204.html) ## Wiring and Connections diff --git a/docs/en/gps_compass/gps_cuav_neo_3pro.md b/docs/en/gps_compass/gps_cuav_neo_3pro.md index 41389c7a5d..540981dba6 100644 --- a/docs/en/gps_compass/gps_cuav_neo_3pro.md +++ b/docs/en/gps_compass/gps_cuav_neo_3pro.md @@ -41,7 +41,7 @@ It integrates UBLOX M9N, STM32F4 MCU, RM3100 compass, three-color LED light and ## Where to Buy -- [CUAV](https://cuav.en.alibaba.com/product/1600165544920-820872629/Free_shipping_CUAV_Neo_3_pro_drone_UAVCAN_GNSS_processor_STM32F412_autopilot_ublox_M9N_positioning_RM3100_compass_uav_gps_module.html?spm=a2700.shop_oth.74.2.636e28725EvVHb) +- [CUAV](https://www.alibaba.com/product-detail/Free_shipping_CUAV_Neo_3_pro_drone_UAVCAN_GNSS_processor_STM32F412_autopilot_ublox_M9N_positioning_RM3100_compass_uav_gps_module_1600165544920.html) ## Wiring and Connections diff --git a/docs/en/gps_compass/index.md b/docs/en/gps_compass/index.md index 60b22b9558..322ab6d9bb 100644 --- a/docs/en/gps_compass/index.md +++ b/docs/en/gps_compass/index.md @@ -186,9 +186,9 @@ Some of GNSS terms that are useful for interpreting the data include: - `DOP`: Dilution of position (dimensionless). This is a measure of the geometric quality of satellite positions and their effect on the precision of the GPS receiver's calculations. - `EPH`: Standard deviation of horizontal position error (metres). - This represents the the uncertainty in the GPS fix latitude and longitude. + This represents the uncertainty in the GPS fix latitude and longitude. - `EPV`: Standard deviation of vertical position error (metres). - This represents the the uncertainty in the GPS fix altitude. + This represents the uncertainty in the GPS fix altitude. ### DOP vs EPH/EPV diff --git a/docs/en/gps_compass/magnetometer.md b/docs/en/gps_compass/magnetometer.md index 2e6ce4f524..1e79c546ae 100644 --- a/docs/en/gps_compass/magnetometer.md +++ b/docs/en/gps_compass/magnetometer.md @@ -22,7 +22,7 @@ If it fails before flight, arming will be denied. ### Compass Parts PX4 can be used with many magnetometer parts, including: Bosch BMM 150 MEMS (via I2C bus), HMC5883 / HMC5983 (I2C or SPI), IST8310 (I2C), LIS3MDL (I2C or SPI), RM3100, and more. -Other supported magnetometer parts and their busses can be inferred from the drivers listed in [Modules Reference: Magnetometer (Driver)](../modules/modules_driver_magnetometer.md). +Other supported magnetometer parts and their buses can be inferred from the drivers listed in [Modules Reference: Magnetometer (Driver)](../modules/modules_driver_magnetometer.md). These parts are included in stand alone compass modules, combined compass/GNSS modules, and also in many flight controllers, @@ -55,7 +55,7 @@ Note: Internal compasses are not recommended for real use as a heading source, because the performance is almost always very poor. -This is particularly true on on small vehicles where the flight controller has to be mounted close to motor/ESC power lines and other sources of electromagnetic interference. +This is particularly true on small vehicles where the flight controller has to be mounted close to motor/ESC power lines and other sources of electromagnetic interference. While they may be better on larger vehicles (e.g. VTOL), where it is possible to reduce electromagnetic interference by mounting the flight controller a long way from power supply lines, an external compass will almost always be better. ::: tip diff --git a/docs/en/gps_compass/rtk_gps.md b/docs/en/gps_compass/rtk_gps.md index 9b12190bdc..08896b71aa 100644 --- a/docs/en/gps_compass/rtk_gps.md +++ b/docs/en/gps_compass/rtk_gps.md @@ -14,51 +14,51 @@ Some RTK GNSS setups can provide yaw/heading information, as an alternative to t ## Supported Devices -PX4 supports the [u-blox M8P](https://www.u-blox.com/en/product/neo-m8p), [u-blox F9P](https://www.u-blox.com/en/product/zed-f9p-module) and the [Trimble MB-Two](https://oemgnss.trimble.com/en/products/receiver-modules/mb-two) GPS, and products that incorporate them. +PX4 supports the [u-blox M8P](https://www.u-blox.com/en/product/neo-m8p-series), [u-blox F9P](https://www.u-blox.com/en/product/zed-f9p-module) and the [Trimble MB-Two](https://oemgnss.trimble.com/en/products/receiver-modules/mb-two) GPS, and products that incorporate them. The RTK compatible devices below that are expected to work with PX4 (it omits discontined devices). The table indicates devices that also output yaw, and that can provide yaw when two on-vehicle units are used. It also highlights devices that connect via the CAN bus, and those which support PPK (Post-Processing Kinematic). -| Device | GPS | Compass | [DroneCAN] | [GPS Yaw] | PPK | -| :-------------------------------------------------------------------------------------------------------- | :------------------: | :------: | :--------: | :---------------------------------: | :-: | -| [ARK G5 RTK GPS](../dronecan/ark_g5_rtk_gps.md) | [mosaic-G5 P3] | IIS2MDC | ✓ | | | -| [ARK G5 RTK HEADING GPS](../dronecan/ark_g5_rtk_heading_gps.md) | [mosaic-G5 P3H] | IIS2MDC | ✓ | [Heading Capability][mosaic-G5 P3H] | | -| [ARK RTK GPS](../dronecan/ark_rtk_gps.md) | F9P | BMM150 | ✓ | [Dual F9P] | | -| [ARK RTK GPS L1 L5](../dronecan/ark_rtk_gps_l1_l2.md) | F9P | BMM150 | ✓ | | | -| [ARK MOSAIC-X5 RTK GPS](../dronecan/ark_mosaic__rtk_gps.md) | Mosaic-X5 | IIS2MDC | ✓ | [Septentrio Dual Antenna] | | -| [ARK X20 RTK GPS](../dronecan/ark_x20_rtk_gps.md) | X20P | IIS2MDC | ✓ | | | -| [CUAV C-RTK GPS](../gps_compass/rtk_gps_cuav_c-rtk.md) | M8P/M8N | ✓ | | | | -| [CUAV C-RTK2](../gps_compass/rtk_gps_cuav_c-rtk2.md) | F9P | ✓ | | [Dual F9P] | | -| [CUAV C-RTK 9Ps GPS](../gps_compass/rtk_gps_cuav_c-rtk-9ps.md) | F9P | RM3100 | | [Dual F9P] | | -| [CUAV C-RTK2 PPK/RTK GNSS](../gps_compass/rtk_gps_cuav_c-rtk.md) | F9P | RM3100 | | | ✓ | -| [CubePilot Here+ RTK GPS](../gps_compass/rtk_gps_hex_hereplus.md) | M8P | HMC5983 | | | | -| [CubePilot Here3 CAN GNSS GPS (M8N)](https://www.cubepilot.org/#/here/here3) | M8P | ICM20948 | ✓ | | | -| [Drotek SIRIUS RTK GNSS ROVER (F9P)](https://store-drotek.com/911-sirius-rtk-gnss-rover-f9p.html) | F9P | RM3100 | | [Dual F9P] | | -| [DATAGNSS NANO HRTK Receiver](../gps_compass/rtk_gps_datagnss_nano_hrtk.md) | [D10P] | IST8310 | | ✘ | | -| [DATAGNSS GEM1305 RTK Receiver](../gps_compass/rtk_gps_gem1305.md) | TAU951M | IST8310 | | ✘ | | -| [Femtones MINI2 Receiver](../gps_compass/rtk_gps_fem_mini2.md) | FB672, FB6A0 | ✓ | | | | -| [Freefly RTK GPS](../gps_compass/rtk_gps_freefly.md) | F9P | IST8310 | | | | -| [Holybro H-RTK ZED-F9P RTK Rover (DroneCAN variant)](../dronecan/holybro_h_rtk_zed_f9p_gps.md) | F9P | RM3100 | ✓ | [Dual F9P] | | -| [Holybro H-RTK ZED-F9P RTK Rover](https://holybro.com/collections/h-rtk-gps/products/h-rtk-zed-f9p-rover) | F9P | RM3100 | | [Dual F9P] | | -| [Holybro H-RTK F9P Ultralight](https://holybro.com/products/h-rtk-f9p-ultralight) | F9P | IST8310 | | [Dual F9P] | | -| [Holybro H-RTK F9P Helical or Base](../gps_compass/rtk_gps_holybro_h-rtk-f9p.md) | F9P | IST8310 | | [Dual F9P] | | -| [Holybro DroneCAN H-RTK F9P Helical](https://holybro.com/products/dronecan-h-rtk-f9p-helical) | F9P | BMM150 | ✓ | [Dual F9P] | | -| [Holybro H-RTK F9P Rover Lite](../gps_compass/rtk_gps_holybro_h-rtk-f9p.md) | F9P | IST8310 | | | | -| [Holybro DroneCAN H-RTK F9P Rover](https://holybro.com/products/dronecan-h-rtk-f9p-rover) | F9P | BMM150 | | [Dual F9P] | | -| [Holybro H-RTK M8P GNSS](../gps_compass/rtk_gps_holybro_h-rtk-m8p.md) | M8P | IST8310 | | | | -| [Holybro H-RTK Unicore UM982 GPS](../gps_compass/rtk_gps_holybro_unicore_um982.md) | UM982 | IST8310 | | [Unicore Dual Antenna] | | -| [LOCOSYS Hawk R1](../gps_compass/rtk_gps_locosys_r1.md) | MC-1612-V2b | | | | | -| [LOCOSYS Hawk R2](../gps_compass/rtk_gps_locosys_r2.md) | MC-1612-V2b | IST8310 | | | | -| [mRo u-blox ZED-F9 RTK L1/L2 GPS](https://store.mrobotics.io/product-p/m10020d.htm) | F9P | ✓ | | [Dual F9P] | | -| [Navisys L1/L2 ZED-F9P RTK - Base only](https://www.navisys.com.tw/productdetail?name=GR901&class=RTK) | F9P | | | | | -| [RaccoonLab L1/L2 ZED-F9P][RaccoonLab L1/L2 ZED-F9P] | F9P | RM3100 | ✓ | | | -| [RaccoonLab L1/L2 ZED-F9P with external antenna][RaccnLabL1L2ZED-F9P ext_ant] | F9P | RM3100 | ✓ | | | -| [Septentrio AsteRx-m3 Pro](../gps_compass/septentrio_asterx-rib.md) | AsteRx | ✓ | | [Septentrio Dual Antenna] | ✓ | -| [Septentrio mosaic-go](../gps_compass/septentrio_mosaic-go.md) | mosaic X5 / mosaic H | ✓ | | [Septentrio Dual Antenna] | ✓ | -| [SIRIUS RTK GNSS ROVER (F9P)](https://store-drotek.com/911-sirius-rtk-gnss-rover-f9p.html) | F9P | ✓ | | [Dual F9P] | | -| [SparkFun GPS-RTK2 Board - ZED-F9P](https://www.sparkfun.com/products/15136) | F9P | ✓ | | [Dual F9P] | | -| [Trimble MB-Two](../gps_compass/rtk_gps_trimble_mb_two.md) | F9P | ✓ | | ✓ | | +| Device | GPS | Compass | [DroneCAN] | [GPS Yaw] | PPK | +| :----------------------------------------------------------------------------------------------------------------- | :------------------: | :------: | :--------: | :---------------------------------: | :-: | +| [ARK G5 RTK GPS](../dronecan/ark_g5_rtk_gps.md) | [mosaic-G5 P3] | IIS2MDC | ✓ | | | +| [ARK G5 RTK HEADING GPS](../dronecan/ark_g5_rtk_heading_gps.md) | [mosaic-G5 P3H] | IIS2MDC | ✓ | [Heading Capability][mosaic-G5 P3H] | | +| [ARK RTK GPS](../dronecan/ark_rtk_gps.md) | F9P | BMM150 | ✓ | [Dual F9P] | | +| [ARK RTK GPS L1 L5](../dronecan/ark_rtk_gps_l1_l2.md) | F9P | BMM150 | ✓ | | | +| [ARK MOSAIC-X5 RTK GPS](../dronecan/ark_mosaic__rtk_gps.md) | Mosaic-X5 | IIS2MDC | ✓ | [Septentrio Dual Antenna] | | +| [ARK X20 RTK GPS](../dronecan/ark_x20_rtk_gps.md) | X20P | IIS2MDC | ✓ | | | +| [CUAV C-RTK GPS](../gps_compass/rtk_gps_cuav_c-rtk.md) | M8P/M8N | ✓ | | | | +| [CUAV C-RTK2](../gps_compass/rtk_gps_cuav_c-rtk2.md) | F9P | ✓ | | [Dual F9P] | | +| [CUAV C-RTK 9Ps GPS](../gps_compass/rtk_gps_cuav_c-rtk-9ps.md) | F9P | RM3100 | | [Dual F9P] | | +| [CUAV C-RTK2 PPK/RTK GNSS](../gps_compass/rtk_gps_cuav_c-rtk.md) | F9P | RM3100 | | | ✓ | +| [CubePilot Here+ RTK GPS](../gps_compass/rtk_gps_hex_hereplus.md) | M8P | HMC5983 | | | | +| [CubePilot Here3 CAN GNSS GPS (M8N)](https://www.cubepilot.org/#/here/here3) | M8P | ICM20948 | ✓ | | | +| [Drotek SIRIUS RTK GNSS ROVER (F9P)](https://store-drotek.com/911-sirius-rtk-gnss-rover-f9p.html) | F9P | RM3100 | | [Dual F9P] | | +| [DATAGNSS NANO HRTK Receiver](../gps_compass/rtk_gps_datagnss_nano_hrtk.md) | [D10P] | IST8310 | | ✘ | | +| [DATAGNSS GEM1305 RTK Receiver](../gps_compass/rtk_gps_gem1305.md) | TAU951M | IST8310 | | ✘ | | +| [Femtones MINI2 Receiver](../gps_compass/rtk_gps_fem_mini2.md) | FB672, FB6A0 | ✓ | | | | +| [Freefly RTK GPS](../gps_compass/rtk_gps_freefly.md) | F9P | IST8310 | | | | +| [Holybro H-RTK ZED-F9P RTK Rover (DroneCAN variant)](../dronecan/holybro_h_rtk_zed_f9p_gps.md) | F9P | RM3100 | ✓ | [Dual F9P] | | +| [Holybro H-RTK ZED-F9P RTK Rover](https://holybro.com/collections/h-rtk-gps/products/h-rtk-zed-f9p-rover) | F9P | RM3100 | | [Dual F9P] | | +| [Holybro H-RTK F9P Ultralight](https://holybro.com/products/h-rtk-f9p-ultralight) | F9P | IST8310 | | [Dual F9P] | | +| [Holybro H-RTK F9P Helical or Base](../gps_compass/rtk_gps_holybro_h-rtk-f9p.md) | F9P | IST8310 | | [Dual F9P] | | +| [Holybro DroneCAN H-RTK F9P Helical](https://holybro.com/products/dronecan-h-rtk-f9p-helical) | F9P | BMM150 | ✓ | [Dual F9P] | | +| [Holybro H-RTK F9P Rover Lite](../gps_compass/rtk_gps_holybro_h-rtk-f9p.md) | F9P | IST8310 | | | | +| [Holybro DroneCAN H-RTK F9P Rover](https://holybro.com/products/dronecan-h-rtk-f9p-rover) | F9P | BMM150 | | [Dual F9P] | | +| [Holybro H-RTK M8P GNSS](../gps_compass/rtk_gps_holybro_h-rtk-m8p.md) | M8P | IST8310 | | | | +| [Holybro H-RTK Unicore UM982 GPS](../gps_compass/rtk_gps_holybro_unicore_um982.md) | UM982 | IST8310 | | [Unicore Dual Antenna] | | +| [LOCOSYS Hawk R1](../gps_compass/rtk_gps_locosys_r1.md) | MC-1612-V2b | | | | | +| [LOCOSYS Hawk R2](../gps_compass/rtk_gps_locosys_r2.md) | MC-1612-V2b | IST8310 | | | | +| [mRo u-blox ZED-F9 RTK L1/L2 GPS](https://store.mrobotics.io/product-p/m10020d.htm) | F9P | ✓ | | [Dual F9P] | | +| [Navisys L1/L2 ZED-F9P RTK - Base only](https://www.navisys.com.tw/productdetail?name=GR901&class=RTK) | F9P | | | | | +| [RaccoonLab L1/L2 ZED-F9P][RaccoonLab L1/L2 ZED-F9P] | F9P | RM3100 | ✓ | | | +| [RaccoonLab L1/L2 ZED-F9P with external antenna][RaccnLabL1L2ZED-F9P ext_ant] | F9P | RM3100 | ✓ | | | +| [Septentrio AsteRx-m3 Pro](../gps_compass/septentrio_asterx-rib.md) | AsteRx | ✓ | | [Septentrio Dual Antenna] | ✓ | +| [Septentrio mosaic-go](../gps_compass/septentrio_mosaic-go.md) | mosaic X5 / mosaic H | ✓ | | [Septentrio Dual Antenna] | ✓ | +| [SIRIUS RTK GNSS ROVER (F9P)](https://store-drotek.com/911-sirius-rtk-gnss-rover-f9p.html) | F9P | ✓ | | [Dual F9P] | | +| [SparkFun GPS-RTK2 Board - ZED-F9P](https://www.sparkfun.com/sparkfun-gps-rtk2-board-zed-f9p-qwiic-gps-15136.html) | F9P | ✓ | | [Dual F9P] | | +| [Trimble MB-Two](../gps_compass/rtk_gps_trimble_mb_two.md) | F9P | ✓ | | ✓ | | diff --git a/docs/en/gps_compass/rtk_gps_cuav_c-rtk-9ps.md b/docs/en/gps_compass/rtk_gps_cuav_c-rtk-9ps.md index cc41632a6c..78d1345802 100644 --- a/docs/en/gps_compass/rtk_gps_cuav_c-rtk-9ps.md +++ b/docs/en/gps_compass/rtk_gps_cuav_c-rtk-9ps.md @@ -1,6 +1,6 @@ # CUAV C-RTK 9Ps -The CUAV [C-RTK 9Ps](https://www.cuav.net/en/c_rtk_9ps/) is a multi-satellite, multi-band, centimeter-level, RTK GNSS system. +The CUAV [C-RTK 9Ps](https://www.cuav.net/en/c-rtk-9ps-en/) is a multi-satellite, multi-band, centimeter-level, RTK GNSS system. The module simultaneously receives GPS, GLONASS, Galileo and Beidou satellite signals, enabling faster positioning and higher accuracy. It also supports [RTK GPS Heading](../gps_compass/u-blox_f9p_heading.md) using dual modules. @@ -12,7 +12,7 @@ This is ideal for survey drones, agricultural drones and other application scena ## Where to Buy -[cuav Store](https://store.cuav.net/shop/c-rtk-9ps/) +[cuav Store](https://store.cuav.net/?route=product%2Fproduct&path=61&product_id=187) ## Specification diff --git a/docs/en/gps_compass/rtk_gps_cuav_c-rtk.md b/docs/en/gps_compass/rtk_gps_cuav_c-rtk.md index 7cfc9b5c31..a5eef30010 100644 --- a/docs/en/gps_compass/rtk_gps_cuav_c-rtk.md +++ b/docs/en/gps_compass/rtk_gps_cuav_c-rtk.md @@ -1,6 +1,6 @@ # CUAV C-RTK -The [CUAV C-RTK GPS receiver](https://www.cuav.net/en/c_rtk_9ps/) is an [RTK GPS module](../gps_compass/rtk_gps.md) for the mass market. +The [CUAV C-RTK GPS receiver](https://www.cuav.net/en/c-rtk-9ps-en/) is an [RTK GPS module](../gps_compass/rtk_gps.md) for the mass market. A complete RTK system consists of at least two C-RTK modules \(one for the base station and the others for the aircraft\). Using RTK, PX4 can get its position with centimetre-level accuracy, which is much more accurate than can be provided by a normal GPS. @@ -8,7 +8,7 @@ A complete RTK system consists of at least two C-RTK modules \(one for the base ## Where to Buy - [cuav taobao](https://item.taobao.com/item.htm?id=565380634341&spm=2014.21600712.0.0) -- [cuav aliexpress](https://www.aliexpress.com/store/product/CUAV-NEW-Flight-Controller-GPS-C-RTK-differential-positioning-navigation-module-GPS-for-PIX4-Pixhawk-pixhack/3257035_32853894248.html?spm=2114.12010608.0.0.75592fadQKPPEn) +- [cuav aliexpress](https://www.aliexpress.com/item/32853894248.html?spm=2114.12010608.0.0.75592fadQKPPEn) ## Configuration @@ -16,7 +16,7 @@ RTK setup and use on PX4 via _QGroundControl_ is largely plug and play \(see [RT ## Wiring and Connections -C-RTK GPS comes with a cable that terminates in a 6-pin connector and 4-pin connector that are compatible with [Pixhack v3](https://doc.cuav.net/flight-controller/pixhack/en/quick-start-pixhack-v3x.html#gps--compass). +C-RTK GPS comes with a cable that terminates in a 6-pin connector and 4-pin connector that are compatible with [Pixhack v3](../flight_controller/pixhack_v3.md). The 6-pin connector provides the interface for RTK GPS, and should be connected to the flight controller's GPS port. The 4-pin connector is an m8n (standard) GPS interface that is intended for (optional) use as a second GPS. diff --git a/docs/en/gps_compass/rtk_gps_cuav_c-rtk2.md b/docs/en/gps_compass/rtk_gps_cuav_c-rtk2.md index fcfeba3d6d..d304416748 100644 --- a/docs/en/gps_compass/rtk_gps_cuav_c-rtk2.md +++ b/docs/en/gps_compass/rtk_gps_cuav_c-rtk2.md @@ -1,6 +1,6 @@ # CUAV C-RTK2 GNSS Module (RTK/PPK) -The [CUAV C-RTK2 receiver](https://www.cuav.net/en/c_rtk_9ps/) is a high-performance PPK/RTK positioning module created by CUAV for professional applications such as drone aerial surveying and mapping. +The [CUAV C-RTK2 receiver](https://www.cuav.net/en/c-rtk-9ps-en/) is a high-performance PPK/RTK positioning module created by CUAV for professional applications such as drone aerial surveying and mapping. It has a high-precision IMU and positioning module, and can reduce the number of required [control points](https://www.youtube.com/watch?v=3k7v5aXyuKQ) by more than to 80%. In addition to surveying/mapping, it is suitable for many other use-cases, including: agricultural plant protection and drone swarms. @@ -10,7 +10,7 @@ In addition to surveying/mapping, it is suitable for many other use-cases, inclu - High-performance H7 processor - High precision industrial grade IMU -- Support RTK and save RAW raw data (PPK) at the same time +- Support RTK and save raw data (PPK) at the same time - Multi-satellite and multi-frequency receivers - UAVCAN/Dronecan protocol - Support hotshoe and shutter trigger @@ -18,7 +18,7 @@ In addition to surveying/mapping, it is suitable for many other use-cases, inclu ## Where to Buy -- [CUAV Store](https://store.cuav.net/shop/c-rtk-2/) +- [CUAV Store](https://store.cuav.net/?route=product%2Fproduct&product_id=159) - [CUAV aliexpress](https://pt.aliexpress.com/item/1005003754165772.html?spm=a2g0o.store_pc_groupList.8148356.13.2f893550i0NE4o) # Quick Summary diff --git a/docs/en/gps_compass/rtk_gps_datagnss_nano_hrtk.md b/docs/en/gps_compass/rtk_gps_datagnss_nano_hrtk.md index daf50ca963..ab8f49c6ca 100644 --- a/docs/en/gps_compass/rtk_gps_datagnss_nano_hrtk.md +++ b/docs/en/gps_compass/rtk_gps_datagnss_nano_hrtk.md @@ -90,7 +90,7 @@ Note that for the base we recommend the [NANO RTK Receiver](https://www.datagnss ![DATAGNSS NANO RTK Receiver with case](../../assets/hardware/gps/datagnss_gem1305/nano_rtk_with_case.png) -See to [How to setup Base station](https://wiki.datagnss.com/index.php/GEM1305-autopilot#Base_station_setup) for information on how to configure the module for use as a base station (not including step 6 and later, for which you would QGroundControl instead of Mission Planner). +See to [How to setup Base station](https://docs.datagnss.com/#Base_station_setup) for information on how to configure the module for use as a base station (not including step 6 and later, for which you would QGroundControl instead of Mission Planner). ### Rover Setup (PX4) @@ -111,13 +111,12 @@ GPS and RTK configuration on PX4 via _QGroundControl_ is plug and play (see [RTK ## Resources -- [NANO RTK Receiver 2D drawing file](https://wiki.datagnss.com/images/3/31/EVK-DG-1206_V.2.0.pdf) - [NANO HRTK Receiver Wiki](https://docs.datagnss.com/gnss/rtk_receiver/NANO/nano-helix-rtk/) (DATAGNSS WiKi) - [HED-10L Heading RTK Receiver](https://docs.datagnss.com/gnss/rtk_receiver/HED-10L/) ## More information -- [NANO RTK Receiver](https://docs.datagnss.com/gnss/rtk_receiver/NANO/nano-rtk-receiver) +- [NANO RTK Receiver](https://docs.datagnss.com/gnss/rtk_receiver/NANO/nano-rtk-receiver/) - [HELIX Antenna for RTK](https://www.datagnss.com/collections/rtk-antenna/products/smart-helix-antenna) - [RTK Antenna AGR6302G](https://www.datagnss.com/collections/rtk-antenna/products/antenna-agr6302g) - [AT400 RTK Antenna](https://www.datagnss.com/collections/rtk-antenna/products/at400-multi-band-antenna-for-rtk) diff --git a/docs/en/gps_compass/rtk_gps_drotek_xl.md b/docs/en/gps_compass/rtk_gps_drotek_xl.md index 91e1d80245..867ef328d4 100644 --- a/docs/en/gps_compass/rtk_gps_drotek_xl.md +++ b/docs/en/gps_compass/rtk_gps_drotek_xl.md @@ -2,7 +2,7 @@ ::: info This module appears to have been discontinued, and is no longer on the Drotek site (September 2023). -The last documentation was in [PX4 v1.13 here](https://docs.px4.io/v1.13/en/gps_compass/rtk_gps_drotek_xl.html) +The last documentation was in [PX4 v1.13 here](https://docs.px4.io/v1.13/en/gps_compass/rtk_gps_drotek_xl) ::: diff --git a/docs/en/gps_compass/rtk_gps_gem1305.md b/docs/en/gps_compass/rtk_gps_gem1305.md index 1625484731..9309c85ff3 100644 --- a/docs/en/gps_compass/rtk_gps_gem1305.md +++ b/docs/en/gps_compass/rtk_gps_gem1305.md @@ -77,7 +77,7 @@ The 1.25mm pitch 6P connector (from left: PIN1 to PIN6) supports UART for GNSS a ## Hardware Setup RTK requires a base RTK module attached to the ground station, and a rover RTK module on the vehicle. -The data from the base needs to be transmitted to the drone via telemetry radio and inputed into the RTK receiver on the rover. +The data from the base needs to be transmitted to the drone via telemetry radio and inputted into the RTK receiver on the rover. ![RTK setup overview](../../assets/hardware/gps/datagnss_gem1305/setup_overview.png) @@ -93,7 +93,7 @@ Note that for the base we recommend the [NANO RTK Receiver](https://www.datagnss DATAGNSS NANO RTK Receiver -See to [How to setup Base station](https://wiki.datagnss.com/index.php/GEM1305-autopilot#Base_station_setup) for information on how to configure the module for use as a base station (not including step 6 and later, for which you would QGroundControl instead of Mission Planner). +See to [How to setup Base station](https://docs.datagnss.com/#Base_station_setup) for information on how to configure the module for use as a base station (not including step 6 and later, for which you would QGroundControl instead of Mission Planner). ### Rover Setup (PX4) @@ -115,14 +115,13 @@ GPS and RTK configuration on PX4 via _QGroundControl_ is plug and play (see [RTK ## Resources -- [NANO RTK Receiver 2D drawing file](https://wiki.datagnss.com/images/3/31/EVK-DG-1206_V.2.0.pdf) - [GEM1305 Wiki](https://docs.datagnss.com/gnss/rtk_receiver/GEM1305/) (DATAGNSS WiKi) - [HED-10L Heading RTK Receiver](https://docs.datagnss.com/gnss/rtk_receiver/HED-10L/) - [NANO HRTK Receiver](https://docs.datagnss.com/gnss/rtk_receiver/NANO/nano-helix-rtk/) ## More information -- [NANO RTK Receiver](https://www.datagnss.com/collections/evk/products/tau951m-1312-tiny-evk) +- [NANO RTK Receiver](https://www.datagnss.com/products/nano-rtk-receiver) - [HELIX Antenna for RTK](https://www.datagnss.com/collections/rtk-antenna/products/smart-helix-antenna) - [RTK Antenna AGR6302G](https://www.datagnss.com/collections/rtk-antenna/products/antenna-agr6302g) - [AT400 RTK Antenna](https://www.datagnss.com/collections/rtk-antenna/products/at400-multi-band-antenna-for-rtk) diff --git a/docs/en/gps_compass/rtk_gps_hex_hereplus.md b/docs/en/gps_compass/rtk_gps_hex_hereplus.md index b96de2a954..c4b924b9fe 100644 --- a/docs/en/gps_compass/rtk_gps_hex_hereplus.md +++ b/docs/en/gps_compass/rtk_gps_hex_hereplus.md @@ -5,7 +5,7 @@ ::: info This GPS is no longer available for purchase but is still compatible with PX4. -Usage documentation can be found in [PX4v1.11 docs](https://docs.px4.io/v1.11/en/gps_compass/rtk_gps_hex_hereplus.html) +Usage documentation can be found in [PX4v1.11 docs](https://docs.px4.io/v1.11/en/gps_compass/rtk_gps_hex_hereplus) ::: The **Here+ RTK GPS receiver** is a small, light and energy efficient [RTK GPS module](../gps_compass/rtk_gps.md), based on the u-blox M8P. Using RTK, PX4 can get its position with centimetre-level accuracy, which is much more accurate than can be provided by a normal GPS. diff --git a/docs/en/gps_compass/rtk_gps_holybro_h-rtk-f9p.md b/docs/en/gps_compass/rtk_gps_holybro_h-rtk-f9p.md index 80c6df2f41..cc1350d2cf 100644 --- a/docs/en/gps_compass/rtk_gps_holybro_h-rtk-f9p.md +++ b/docs/en/gps_compass/rtk_gps_holybro_h-rtk-f9p.md @@ -19,7 +19,7 @@ Using RTK allows PX4 to get its position with centimetre-level accuracy, which i ## Where to Buy - [H-RTK F9P (Holybro Website)](https://holybro.com/products/h-rtk-f9p-gnss-series) -- [H-RTK Accessories (Holybro Website)](https://holybro.com/collections/h-rtk-gps) +- [H-RTK Accessories (Holybro Website)](https://holybro.com/collections/gps) ## Configuration @@ -50,6 +50,6 @@ The cables/connectors may need to be modified in order to connect to other fligh ## GPS Accessories -[H-RTK Mount (Holybro Website)](https://holybro.com/products/vertical-mount-for-h-rtk-helical) +[H-RTK Mount (Holybro Website)](https://holybro.com/collections/gps-accessories/products/vertical-mount-for-h-rtk-helical) ![h-rtk](../../assets/hardware/gps/rtk_holybro_h-rtk_mount_3.png) diff --git a/docs/en/gps_compass/rtk_gps_holybro_h-rtk-m8p.md b/docs/en/gps_compass/rtk_gps_holybro_h-rtk-m8p.md index 59f0441912..eb9f2783a0 100644 --- a/docs/en/gps_compass/rtk_gps_holybro_h-rtk-m8p.md +++ b/docs/en/gps_compass/rtk_gps_holybro_h-rtk-m8p.md @@ -2,9 +2,10 @@ :::warning This GNSS has been discontinued, and is no longer commercially available. +Replaced by [Holybro H-RTK F9P GNSS](../gps_compass/rtk_gps_holybro_h-rtk-f9p.md). ::: -The [Holybro H-RTK M8P GNSS](https://holybro.com/collections/standard-h-rtk-series/products/h-rtk-m8p-gnss-series) is an [RTK GNSS module](../gps_compass/rtk_gps.md) series for the mass market. +The _Holybro H-RTK M8P GNSS_ is an [RTK GNSS module](../gps_compass/rtk_gps.md) series for the mass market. This family is similar to the [H-RTK M9P](../gps_compass/rtk_gps_holybro_h-rtk-f9p.md) series but uses the smaller, lighter, and less expensive M8P u-blox RTK GNSS module (which still provides far superior position resolution than previous generations\_. There are three models of Holybro H-RTK M8P to choose from, each with different antenna design to meet different needs. @@ -16,7 +17,7 @@ Using RTK allows PX4 to get its position with centimeter-level accuracy, which i ## Where to Buy -- [H-RTK M8P (GPS RTK Mounts)](https://holybro.com/products/vertical-mount-for-h-rtk-helical) +- Discontinued. ## Configuration @@ -30,9 +31,7 @@ All H-RTK GNSS models come with a GH 10-pin connector/cable that is compatible w The cables/connectors may need to be modified in order to connect to other flight controller boards (see [pin map](#pin_map)below). ::: - - -## Pin Map +## Pin Map {#pin_map} ![h-rtk_rover_pinmap](../../assets/hardware/gps/rtk_holybro_h-rtk-m8p_pinmap.jpg) diff --git a/docs/en/gps_compass/rtk_gps_holybro_unicore_um982.md b/docs/en/gps_compass/rtk_gps_holybro_unicore_um982.md index 8d5b155e1a..09848e3b3e 100644 --- a/docs/en/gps_compass/rtk_gps_holybro_unicore_um982.md +++ b/docs/en/gps_compass/rtk_gps_holybro_unicore_um982.md @@ -1,10 +1,10 @@ # Holybro H-RTK Unicore UM982 GPS -The [Holybro H-RTK Unicore UM982 GPS](https://holybro.com/products/h-rtk-um982) is an multi-band high-precision [RTK GNSS System](../gps_compass/rtk_gps.md) launched by Holybro. +The [Holybro H-RTK Unicore UM982 GPS](https://holybro.com/products/h-rtk-unicore-um982) is an multi-band high-precision [RTK GNSS System](../gps_compass/rtk_gps.md) launched by Holybro. ![HB-pmw3901-1](../../assets/hardware/gps/holybro-unicore-um982/holybro-unicore-um982-1.jpg) -This module is based on the [Unicore UM982 Chip](https://en.unicorecomm.com/products/detail/24), which supports RTK positioning and dual-antenna heading calculation. +This module is based on the [Unicore UM982 Chip](https://en.unicore.com/products/dual-antenna-gnss-um982/), which supports RTK positioning and dual-antenna heading calculation. This means that it can generate a moving baseline headline/yaw determinations for autopilots with just one GPS module and dual antennas - a magnetometer is not needed. Unlike when using a module such as the U-blox F9P, where you would need [two U-blox F9P modules to compute a heading angle](../gps_compass/u-blox_f9p_heading.md), with the Unicore UM982 GPS, you only need one GPS module! @@ -20,7 +20,7 @@ Additional technical information can be found at [Holybro Technical Documentatio ## Where to Buy -- [Holybro Website](https://holybro.com/products/h-rtk-um982) +- [Holybro Website](https://holybro.com/products/h-rtk-unicore-um982) ## Wiring diff --git a/docs/en/gps_compass/rtk_gps_locosys_r1.md b/docs/en/gps_compass/rtk_gps_locosys_r1.md index a42ae30627..a8b4200e03 100644 --- a/docs/en/gps_compass/rtk_gps_locosys_r1.md +++ b/docs/en/gps_compass/rtk_gps_locosys_r1.md @@ -26,7 +26,7 @@ For an equivalent GPS module with a compass try: [LOCOSYS Hawk R2](../gps_compas - Fast TTFF at low signal level - Free hybrid ephemeris prediction to achieve faster cold start - Default 5Hz, up to 10 Hz update rate (SBAS support 5Hz only). -- Build-in super capacitor to reserve system data for rapid satellite acquisition +- Built-in super capacitor to reserve system data for rapid satellite acquisition ![LOCOSYS Hawk R1](../../assets/hardware/gps/locosys_hawk_a1/locosys_hawk_a1_gps.png) diff --git a/docs/en/gps_compass/rtk_gps_locosys_r2.md b/docs/en/gps_compass/rtk_gps_locosys_r2.md index 0f45196913..d39fe4bdb1 100644 --- a/docs/en/gps_compass/rtk_gps_locosys_r2.md +++ b/docs/en/gps_compass/rtk_gps_locosys_r2.md @@ -22,8 +22,8 @@ The fast time-to-first-fix, RTK convergence, superior sensitivity, low power con - Fast TTFF at low signal level - Free hybrid ephemeris prediction to achieve faster cold start - Default 5Hz, up to 10 Hz update rate (SBAS support 5Hz only) -- Build-in super capacitor to reserve system data for rapid satellite acquisition -- Build-in 3 axis compass function +- Built-in super capacitor to reserve system data for rapid satellite acquisition +- Built-in 3 axis compass function - Three LED indicator for Power, PPS and Data transmit ![LOCOSYS Hawk R2](../../assets/hardware/gps/locosys_hawk_a1/locosys_hawk_a1_gps.png) diff --git a/docs/en/gps_compass/septentrio.md b/docs/en/gps_compass/septentrio.md index 3d2939aae9..90c4721538 100644 --- a/docs/en/gps_compass/septentrio.md +++ b/docs/en/gps_compass/septentrio.md @@ -10,7 +10,7 @@ Certain receivers are recommended for autopilot applications because of their ph Dual-antenna, ultra-low-power GNSS rover receiver with support for heading. -- [AsteRx-m3 Pro+](https://www.septentrio.com/en/products/gps/gnss-boards/asterx-m3-pro-plus) +- [AsteRx-m3 Pro+](https://www.septentrio.com/en/products/gnss-receivers/gnss-boards/asterx-m3-pro-plus) Dual-antenna, ultra-low-power versatile GNSS rover and base receiver with support for heading. @@ -19,7 +19,7 @@ Certain receivers are recommended for autopilot applications because of their ph Single-antenna evaluation kit with support for L5 frequency band, based on the mosaic-X5 GNSS receiver module. -- [mosaic-go heading](https://www.septentrio.com/en/products/gps/gnss-receiver-modules/mosaic-h-evaluation-kit) +- [mosaic-go heading](https://www.septentrio.com/en/products/gnss-receivers/gnss-receiver-modules/mosaic-h-evaluation-kit) Dual-antenna evaluation kit with support for heading, based on the mosaic-H GNSS receiver module. diff --git a/docs/en/gps_compass/septentrio_mosaic-go.md b/docs/en/gps_compass/septentrio_mosaic-go.md index 7c6bf7d3e7..85a1c55e99 100644 --- a/docs/en/gps_compass/septentrio_mosaic-go.md +++ b/docs/en/gps_compass/septentrio_mosaic-go.md @@ -2,8 +2,8 @@ The Septentrio mosaic-go receivers are evaluation kits for their mosaic-X5 and mosaic-H receiver modules. Because of their small size and low weight, they are ideal for autopilot applications. -The available variants are the [mosaic-go](https://www.septentrio.com/en/products/gps/gnss-receiver-modules/mosaic-go-evaluation-kit) -and [mosaic-go heading](https://www.septentrio.com/en/products/gps/gnss-receiver-modules/mosaic-h-evaluation-kit). +The available variants are the [mosaic-go](https://www.septentrio.com/en/products/gnss-receivers/gnss-receiver-modules/mosaic-go-evaluation-kit) +and [mosaic-go heading](https://www.septentrio.com/en/products/gnss-receivers/gnss-receiver-modules/mosaic-h-evaluation-kit). ![Mosaic go Highly Accurate GNSS Receiver Module](../../assets/hardware/gps/septentrio_sbf/mosaic-go.png) @@ -108,7 +108,7 @@ To enable multi-antenna attitude determination, follow the following procedure: These can be compensated for with the heading parameters provided by the Septentrio driver in PX4. ::: info -For optimal heading results, the two antennas should be seperated by at least 30cm / 11.8 in (ideally 50cm / 19.7in or more). +For optimal heading results, the two antennas should be separated by at least 30cm / 11.8 in (ideally 50cm / 19.7in or more). For additional configuration of the dual antenna setup, please refer to our [Knowledge Base](https://support.septentrio.com/l/858493/2022-04-19/xgrqd) or the [hardware manual](https://web.septentrio.com/l/858493/2022-04-19/xgrql). ::: diff --git a/docs/en/gps_compass/u-blox_f9p_heading.md b/docs/en/gps_compass/u-blox_f9p_heading.md index 586508d611..7e7f1dc97e 100644 --- a/docs/en/gps_compass/u-blox_f9p_heading.md +++ b/docs/en/gps_compass/u-blox_f9p_heading.md @@ -10,7 +10,7 @@ This feature works on F9P devices that support CAN or expose the GPS UART2 port. The following devices are supported: - [ARK RTK GPS](https://arkelectron.com/product/ark-rtk-gps/) (arkelectron.com) -- [SparkFun GPS-RTK2 Board - ZED-F9P](https://www.sparkfun.com/products/15136) (www.sparkfun.com) +- [SparkFun GPS-RTK2 Board - ZED-F9P](https://www.sparkfun.com/sparkfun-gps-rtk2-board-zed-f9p-qwiic-gps-15136.html) (www.sparkfun.com) - [SIRIUS RTK GNSS ROVER (F9P)](https://store-drotek.com/911-sirius-rtk-gnss-rover-f9p.html) (store-drotek.com) - [mRo u-blox ZED-F9 RTK L1/L2 GPS](https://store.mrobotics.io/product-p/m10020d.htm) (store.mrobotics.io) - [Holybro H-RTK F9P Helical or Base](https://holybro.com/products/h-rtk-f9p-gnss-series) (Holybro Store) diff --git a/docs/en/hardware/board_packaging.md b/docs/en/hardware/board_packaging.md new file mode 100644 index 0000000000..25454702af --- /dev/null +++ b/docs/en/hardware/board_packaging.md @@ -0,0 +1,298 @@ +# Board Firmware Packaging + +PX4 supports building distributable firmware packages for Linux-based (POSIX) boards. +While NuttX boards produce `.px4` firmware files that are flashed via QGroundControl, POSIX boards can produce `.deb` (Debian) packages that are installed using standard Linux package management tools (`dpkg`, `apt`). + +This page covers how manufacturers can add `.deb` packaging to their boards, with examples for both single-processor and multi-processor architectures. + +## Overview + +The packaging framework uses [CMake CPack](https://cmake.org/cmake/help/latest/module/CPack.html) with the DEB generator. +It is built on two extension points in the PX4 build system: + +- **`boards///cmake/package.cmake`**: CPack variable overrides (package name, version, dependencies, architecture, maintainer info). Loaded during CMake configure. +- **`boards///cmake/install.cmake`**: `install()` rules that define what goes into the package (binaries, scripts, config files, service files). Loaded from `platforms/posix/CMakeLists.txt` where build targets are available. + +When a board provides these files, CI automatically discovers and builds the `_deb` target alongside the normal firmware build. + +## Build Command + +For any board with packaging support: + +```sh +make __deb +``` + +For example: + +```sh +make modalai_voxl2_deb +``` + +This builds the `_default` configuration (and any companion builds for multi-processor boards), then runs `cpack -G DEB` in the build directory. +The resulting `.deb` file is placed in `build/__default/`. + +## Adding Packaging to a Board + +### File Structure + +``` +boards/// + cmake/ + package.cmake # CPack configuration (required) + install.cmake # Install rules (required) + debian/ + postinst # Post-install script (optional) + prerm # Pre-remove script (optional) + .service # Systemd unit file (optional) +``` + +### Step 1: CPack Configuration (package.cmake) + +This file sets CPack variables that control the `.deb` metadata. +It is included from `cmake/package.cmake` after the base CPack defaults are configured. + +```cmake +# boards///cmake/package.cmake + +# Derive Debian-compatible version from git tag +# v1.17.0-alpha1-42-gabcdef -> 1.17.0~alpha1.42.gabcdef +# v1.17.0 -> 1.17.0 +string(REGEX REPLACE "^v" "" _deb_ver "${PX4_GIT_TAG}") +string(REGEX REPLACE "-" "~" _deb_ver "${_deb_ver}") +string(REGEX REPLACE "~([0-9]+)~" ".\\1." _deb_ver "${_deb_ver}") + +# Target architecture (use the target arch, not the build host) +set(CPACK_DEBIAN_ARCHITECTURE "arm64") + +# Package identity +set(CPACK_DEBIAN_PACKAGE_NAME "my-px4-board") +set(CPACK_DEBIAN_FILE_NAME "my-px4-board_${_deb_ver}_arm64.deb") + +# Install prefix +set(CPACK_PACKAGING_INSTALL_PREFIX "/usr") +set(CPACK_INSTALL_PREFIX "/usr") +set(CPACK_SET_DESTDIR true) + +# Package metadata +set(CPACK_DEBIAN_PACKAGE_DESCRIPTION "PX4 Autopilot for My Board") +set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Vendor ") +set(CPACK_DEBIAN_PACKAGE_DEPENDS "some-dependency (>= 1.0)") +set(CPACK_DEBIAN_PACKAGE_CONFLICTS "") +set(CPACK_DEBIAN_PACKAGE_REPLACES "") + +# Disable shlibdeps for cross-compiled boards +set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS OFF) + +# Include post-install and pre-remove scripts (optional) +set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA + "${PX4_BOARD_DIR}/debian/postinst;${PX4_BOARD_DIR}/debian/prerm") +``` + +**Key variables:** + +| Variable | Purpose | +| -------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | +| `CPACK_DEBIAN_ARCHITECTURE` | Target architecture. Set explicitly for cross-compiled boards since `dpkg --print-architecture` reports the build host, not the target. | +| `CPACK_DEBIAN_PACKAGE_NAME` | Package name as it appears in `dpkg -l`. | +| `CPACK_DEBIAN_FILE_NAME` | Output `.deb` filename. | +| `CPACK_DEBIAN_PACKAGE_DEPENDS` | Runtime dependencies (comma-separated, Debian format). | +| `CPACK_DEBIAN_PACKAGE_SHLIBDEPS` | Set to `OFF` for cross-compiled boards where `dpkg-shlibdeps` cannot inspect target binaries. | + +### Step 2: Install Rules (install.cmake) + +This file defines what files are packaged in the `.deb`. +It is included from `platforms/posix/CMakeLists.txt` where the `px4` build target is available. + +All paths are relative to `CPACK_PACKAGING_INSTALL_PREFIX` (typically `/usr`). Use `../` to install outside the prefix (e.g., `../etc/` installs to `/etc/`). + +**Minimal example (single-processor board):** + +```cmake +# boards///cmake/install.cmake + +# PX4 binary +install(TARGETS px4 RUNTIME DESTINATION bin) + +# Module alias script (generated during build) +install(PROGRAMS ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/px4-alias.sh DESTINATION bin) + +# Startup scripts +install(PROGRAMS + ${PX4_BOARD_DIR}/target/my-px4-start + DESTINATION bin +) + +# Configuration files +install(FILES + ${PX4_BOARD_DIR}/target/my-config.conf + DESTINATION ../etc/my-board +) + +# Systemd service +install(FILES ${PX4_BOARD_DIR}/debian/my-px4.service + DESTINATION ../etc/systemd/system +) + +# Component metadata +install(FILES + ${PX4_BINARY_DIR}/actuators.json.xz + ${PX4_BINARY_DIR}/parameters.json.xz + DESTINATION ../data/px4/etc/extras + OPTIONAL +) +install(FILES ${PX4_BINARY_DIR}/events/all_events.json.xz + DESTINATION ../data/px4/etc/extras + OPTIONAL +) +``` + +### Step 3: Debian Scripts (optional) + +#### postinst + +Runs after the package is installed. Common tasks: + +- Create `px4-*` module symlinks from `px4-alias.sh` +- Set up required directories with correct ownership +- Run `systemctl daemon-reload` to pick up the service file +- Board-specific setup (e.g., DSP signature generation) + +```bash +#!/usr/bin/env bash +set -e + +# Create px4-* symlinks +if [ -f /usr/bin/px4-alias.sh ]; then + grep "^alias " /usr/bin/px4-alias.sh | \ + sed "s/alias \(px4-[a-zA-Z0-9_]*\)=.*/\1/" | while read cmd; do + ln -sf px4 "/usr/bin/${cmd}" + done +fi + +# Create data directories +mkdir -p /data/px4/param +mkdir -p /data/px4/etc/extras + +# Reload systemd +if command -v systemctl > /dev/null 2>&1; then + systemctl daemon-reload +fi +``` + +#### prerm + +Runs before the package is removed: + +```bash +#!/usr/bin/env bash +set -e + +# Stop the service +if command -v systemctl > /dev/null 2>&1; then + systemctl stop my-px4 2>/dev/null || true +fi + +# Remove px4-* symlinks +for f in /usr/bin/px4-*; do + if [ -L "$f" ] && [ "$(readlink "$f")" = "px4" ]; then + rm -f "$f" + fi +done +``` + +Both scripts must be executable (`chmod +x`). + +## Multi-Processor Boards + +Some boards run PX4 across multiple processors, for example the ModalAI VOXL2 which has a POSIX apps processor (ARM) and a Hexagon DSP (SLPI). +These produce two separate CMake builds, but the `.deb` must contain artifacts from both. + +### How It Works + +1. The `_default` build (POSIX/apps processor) owns the `.deb`. +2. The Makefile `%_deb` target builds `_default`, which chains any companion builds as CMake prerequisites. +3. The `install.cmake` pulls companion build artifacts via absolute path to the sibling build directory. +4. CPack runs in the `_default` build tree and produces a single `.deb`. + +### Companion Build Artifacts + +In `install.cmake`, reference the companion build output by absolute path: + +```cmake +# DSP firmware blob from companion SLPI build +set(SLPI_BUILD_DIR "${PX4_SOURCE_DIR}/build/_-slpi_default") + +install(FILES ${SLPI_BUILD_DIR}/platforms/qurt/libpx4.so + DESTINATION lib/rfsa/adsp + OPTIONAL +) +``` + +The `OPTIONAL` keyword allows the `.deb` to build even when the companion build hasn't run (useful for development/testing of just the apps-processor side). + +### VOXL2 Reference + +The VOXL2 board is a complete working example of multi-processor packaging: + +``` +boards/modalai/voxl2/ + cmake/ + package.cmake # CPack config: voxl-px4, arm64, deps, shlibdeps off + install.cmake # px4 binary, SLPI libpx4.so, scripts, configs, metadata + debian/ + postinst # Symlinks, DSP signature, directory setup + prerm # Stop service, remove symlinks + voxl-px4.service # Systemd unit (after sscrpcd, restart on-failure) + target/ + voxl-px4 # Main startup wrapper + voxl-px4-start # PX4 module startup script +``` + +The resulting `.deb` installs: + +| Path | Contents | +| -------------------------------------- | ------------------------------ | +| `/usr/bin/px4` | Apps processor PX4 binary | +| `/usr/bin/px4-alias.sh` | Module alias script | +| `/usr/bin/voxl-px4` | Startup wrapper | +| `/usr/bin/voxl-px4-start` | Module startup script | +| `/usr/lib/rfsa/adsp/libpx4.so` | DSP firmware (from SLPI build) | +| `/etc/modalai/*.config` | Board configuration files | +| `/etc/systemd/system/voxl-px4.service` | Systemd service | +| `/data/px4/etc/extras/*.json.xz` | Component metadata | + +## CI Integration + +### Automatic Discovery + +The CI system (`Tools/ci/generate_board_targets_json.py`) automatically discovers boards with `cmake/package.cmake` and adds a `__deb` target to the board's existing CI group. +No manual CI configuration is needed. + +### Artifact Collection + +The `Tools/ci/package_build_artifacts.sh` script collects `.deb` files alongside `.px4` and `.elf` artifacts. +On tagged releases, `.deb` files are uploaded to both S3 and GitHub Releases. + +## Version Format + +The `.deb` version is derived from `PX4_GIT_TAG` using Debian-compatible formatting: + +| Git Tag | Debian Version | Notes | +| --------------------------- | -------------------------- | -------------------------------------- | +| `v1.17.0` | `1.17.0` | Stable release | +| `v1.17.0-beta1` | `1.17.0~beta1` | Pre-release (`~` sorts before release) | +| `v1.17.0-alpha1-42-gabcdef` | `1.17.0~alpha1.42.gabcdef` | Development build | + +The `~` prefix in Debian versioning ensures pre-releases sort lower than the final release: `1.17.0~beta1 < 1.17.0`. + +## Checklist for New Boards + +1. Create `boards///cmake/package.cmake` with CPack variables +2. Create `boards///cmake/install.cmake` with install rules +3. (Optional) Create `boards///debian/postinst` and `prerm` +4. (Optional) Create `boards///debian/.service` +5. Test locally: `make __deb` +6. Verify: `dpkg-deb --info build/__default/_*.deb` +7. Verify: `dpkg-deb --contents build/__default/_*.deb` +8. CI picks it up automatically on the next push diff --git a/docs/en/hardware/board_support_guide.md b/docs/en/hardware/board_support_guide.md index dd9722e805..7f952135f8 100644 --- a/docs/en/hardware/board_support_guide.md +++ b/docs/en/hardware/board_support_guide.md @@ -53,7 +53,7 @@ PX4 generally only supports boards that are commercially available, which typica ### VER and REV ID (Hardware Revision and Version Sensing) {#ver_rev_id} FMUv5 and onwards have an electrical sensing mechanism. -This sensing coupled with optional configuration data will be used to define hardware’s configuration with respect to a mandatory device and power supply configuration. Manufacturers must obtain the VER and REV ID from PX4 board maintainers by issuing a PR to ammend the [DS-018 Pixhawk standard](https://github.com/pixhawk/Pixhawk-Standards) for board versions and revisions. +This sensing coupled with optional configuration data will be used to define hardware’s configuration with respect to a mandatory device and power supply configuration. Manufacturers must obtain the VER and REV ID from PX4 board maintainers by issuing a PR to amend the [DS-018 Pixhawk standard](https://github.com/pixhawk/Pixhawk-Standards) for board versions and revisions. Because these boards are 100% compliant with the Pixhawk standard, the values assigned for VER and REV ID are the defaults for that FMU Version. @@ -93,7 +93,7 @@ _New_ experimental boards are allocated [VER and REV IDs](#ver_rev_id) based on This category includes all boards that aren't supported by the PX4 project or a manufacturer, and that fall outside the"experimental" support. - Board is somewhat compatible on paper with something we already support, and it would take minimal effort to raise it to "experimental", but neither the dev-team or the manufacturer are currently pursuing this -- Manufacturer/Owner of hardware violates our [Code of Conduct](https://discuss.px4.io/t/code-of-conduct/13655) +- Manufacturer/Owner of hardware violates our [Code of Conduct](https://discuss.px4.io/t/px4-community-code-of-conduct/13655) - Closed source, where any of the necessary tools/libs/drivers/etc needed to add support for a board is deemed incompatible due to licensing restrictions - Board doesn't meet minimum requirements outlined in the General requirements diff --git a/docs/en/hardware/drone_parts.md b/docs/en/hardware/drone_parts.md index 405b79b08e..e4d80f7964 100644 --- a/docs/en/hardware/drone_parts.md +++ b/docs/en/hardware/drone_parts.md @@ -1,4 +1,4 @@ -# Hardware Hardware Selection & Setup +# Hardware Selection & Setup This section contains information the components that might be used in a drone, and how they are set up. diff --git a/docs/en/hardware/porting_guide_config.md b/docs/en/hardware/porting_guide_config.md index 8604109618..49adc2b24c 100644 --- a/docs/en/hardware/porting_guide_config.md +++ b/docs/en/hardware/porting_guide_config.md @@ -70,3 +70,19 @@ The command line and GUI interfaces are shown below. ### menuconfig Command Line Interface ![menuconfig command line interface](../../assets/hardware/kconfig-guiconfig.png) + +## Fortified Toolchain Compatibility + +Some toolchains define `_FORTIFY_SOURCE` by default. Those toolchains generally require some optimization, which means PX4 configurations that use `-O0` may fail. + +PX4 keeps the default debug optimization unchanged unless you explicitly opt in. To switch `PX4_DEBUG_OPT_LEVEL` from `-O0` to `-Og`, enable: + +- `Toolchain > Fortified toolchain support` + +This is the Kconfig symbol: + +```sh +CONFIG_BOARD_SUPPORT_FORTIFIED_TOOLCHAIN=y +``` + +You can set it either in `boardconfig`/`boardguiconfig` or directly in your board's `*.px4board` file. diff --git a/docs/en/index.md b/docs/en/index.md index f361486948..eff027780f 100644 --- a/docs/en/index.md +++ b/docs/en/index.md @@ -5,7 +5,7 @@ const { site } = useData(); # PX4 Autopilot User Guide -[![Releases](https://img.shields.io/badge/release-main-blue.svg)](https://github.com/PX4/PX4-Autopilot/releases) [![Discuss](https://img.shields.io/badge/discuss-px4-ff69b4.svg)](https://discuss.px4.io//) [![Discord](https://discordapp.com/api/guilds/1022170275984457759/widget.png?style=shield)](https://discord.gg/dronecode) +[![Releases](https://img.shields.io/badge/release-main-blue.svg)](https://github.com/PX4/PX4-Autopilot/releases) [![Discuss](https://img.shields.io/badge/discuss-px4-ff69b4.svg)](https://discuss.px4.io//) [![Discord](https://discordapp.com/api/guilds/1022170275984457759/widget.png?style=shield)](https://discord.com/invite/dronecode) PX4 is an open-source autopilot for drones and autonomous vehicles. It runs on multirotors, fixed-wing, VTOL, helicopters, rovers, and more. This guide covers everything from assembly and configuration to flight operations and development. @@ -21,11 +21,13 @@ Documented changes since the stable release are captured in the evolving [releas
+## Try PX4 + +No hardware needed. Run PX4 in simulation with a single command using [Docker or a .deb package](simulation/px4_simulation_quickstart.md). Connect [QGroundControl](https://qgroundcontrol.com), [MAVSDK](https://mavsdk.mavlink.io/), or [ROS 2](ros2/index.md) and start flying immediately. + ## For Developers -:::tip -Building on PX4 or extending the platform? Start here: [Development Guide](development/development.md). Set up your [dev environment](dev_setup/config_initial.md), [build from source](dev_setup/building_px4.md), run [SITL simulation](simulation/index.md), or integrate via [ROS 2](ros2/index.md) and [MAVSDK](https://mavsdk.mavlink.io/). -::: +Want to modify PX4 or build from source? Start with the [Development Guide](development/development.md): set up your [dev environment](dev_setup/dev_env.md), [build the code](dev_setup/building_px4.md), and run [SITL simulation](simulation/index.md). ## Getting Started @@ -49,7 +51,7 @@ Read [Operations](config/operations.md) to understand safety features and failsa ## Support -Get help on the [discussion forums](https://discuss.px4.io/) or [Discord](https://discord.gg/dronecode). See the [Support](contribute/support.md) page for diagnosing problems, reporting bugs, and joining the [weekly dev call](contribute/dev_call.md). +Get help on the [discussion forums](https://discuss.px4.io/) or [Discord](https://discord.com/invite/dronecode). See the [Support](contribute/support.md) page for diagnosing problems, reporting bugs, and joining the [weekly dev call](contribute/dev_call.md). ## Contributing @@ -93,9 +95,9 @@ The following icons used in this library are licensed separately (as shown below ## Governance -The PX4 Autopilot project is hosted by the [Dronecode Foundation](https://www.dronecode.org/), a [Linux Foundation](https://www.linuxfoundation.org/) Collaborative Project. Dronecode holds all PX4 trademarks and serves as the project's legal guardian, ensuring vendor-neutral stewardship. No single company owns the name or controls the roadmap. The source code is licensed under the [BSD 3-Clause](https://opensource.org/license/BSD-3-Clause) license, so you are free to use, modify, and distribute it in your own projects. +The PX4 Autopilot project is hosted by the [Dronecode Foundation](https://dronecode.org/), a [Linux Foundation](https://www.linuxfoundation.org/) Collaborative Project. Dronecode holds all PX4 trademarks and serves as the project's legal guardian, ensuring vendor-neutral stewardship. No single company owns the name or controls the roadmap. The source code is licensed under the [BSD 3-Clause](https://opensource.org/license/BSD-3-Clause) license, so you are free to use, modify, and distribute it in your own projects. -Dronecode Logo +Dronecode Logo Linux Foundation Logo
 
diff --git a/docs/en/log/flight_log_analysis.md b/docs/en/log/flight_log_analysis.md index 88073f60c2..978ab09e60 100644 --- a/docs/en/log/flight_log_analysis.md +++ b/docs/en/log/flight_log_analysis.md @@ -156,7 +156,7 @@ Key features: ### PX4Tools [PX4Tools](https://github.com/dronecrew/px4tools) is a log analysis toolbox for the PX4 autopilot written in Python. -The recommended installation procedure is to use [anaconda3](https://conda.io/docs/index.html). See [px4tools github page](https://github.com/dronecrew/px4tools) for details. +The recommended installation procedure is to use [anaconda3](https://docs.conda.io/docs/index.html). See [px4tools github page](https://github.com/dronecrew/px4tools) for details. Key features: diff --git a/docs/en/mavlink/adding_messages.md b/docs/en/mavlink/adding_messages.md index a0226dd26d..de0091a4ae 100644 --- a/docs/en/mavlink/adding_messages.md +++ b/docs/en/mavlink/adding_messages.md @@ -39,7 +39,7 @@ Once the message headers for your definitions are generated in the PX4 build, yo The first step in debugging is to confirm that any messages you've created are being sent/received as you expect. -You should should first use the `uorb top []` command to verify in real-time that your message is published and the rate (see [uORB Messaging](../middleware/uorb.md#uorb-top-command)). +You should first use the `uorb top []` command to verify in real-time that your message is published and the rate (see [uORB Messaging](../middleware/uorb.md#uorb-top-command)). This approach can also be used to test incoming messages that publish a uORB topic (for other messages you might use `printf` in your code and test in SITL). There are several approaches you can use to view MAVLink traffic: @@ -80,16 +80,16 @@ So if you have created a custom message in PX4 you won't be able to use it unles ### Updating QGroundControl -You will need to [Build QGroundControl](https://docs.qgroundcontrol.com/master/en/qgc-dev-guide/getting_started/index.html) including a pre-built C library that contains your custom messages. +You will need to [Build QGroundControl](https://docs.qgroundcontrol.com/master/en/qgc-dev-guide/getting_started/index.html) with your custom messages included. -QGC uses a pre-built C library that must be located at [/qgroundcontrol/libs/mavlink/include/mavlink](https://github.com/mavlink/qgroundcontrol/tree/master/libs/mavlink/include/mavlink) in the QGC source. +QGC fetches MAVLink via CMake using settings defined in [`cmake/CustomOptions.cmake`](https://github.com/mavlink/qgroundcontrol/blob/master/cmake/CustomOptions.cmake). +The key variables are `QGC_MAVLINK_GIT_REPO` (the MAVLink repository to fetch), `QGC_MAVLINK_GIT_TAG` (a specific commit or tag), and `QGC_MAVLINK_DIALECT` (the dialect, default: `all`). +To use a custom MAVLink repository or dialect, override these in a `CustomOverrides.cmake` file in the QGC source root. -By default this is pre-included as a submodule from but you can [generate your own MAVLink Libraries](https://mavlink.io/en/getting_started/generate_libraries.html). +QGC uses the **all** dialect by default, which includes **common.xml**. +You can include your messages in either file, or [generate your own MAVLink Libraries](https://mavlink.io/en/getting_started/generate_libraries.html). -QGC uses the **all.xml** dialect by default, which includes **common.xml**. -You can include your messages in either file. - -Note that if you use your own _custom dialect_ then it should include **ArduPilotMega.xml** (or it will miss all the existing messages), and you will need to change the dialect used by setting it in [`MAVLINK_CONF`](https://github.com/mavlink/qgroundcontrol/blob/master/QGCExternalLibs.pri#L52) when running _qmake_. +Note that if you use your own _custom dialect_ then it should include **all.xml** (or it may miss all the existing messages), and you will need to set `QGC_MAVLINK_DIALECT` accordingly in `CustomOverrides.cmake`. ### Updating MAVSDK diff --git a/docs/en/mavlink/index.md b/docs/en/mavlink/index.md index fd364c33a2..38c633412e 100644 --- a/docs/en/mavlink/index.md +++ b/docs/en/mavlink/index.md @@ -9,10 +9,16 @@ It also links instructions for how you can add PX4 support for: - [Adding Standard Messages](../mavlink/adding_messages.md) - [Streaming MAVLink messages](../mavlink/streaming_messages.md) +- [Configuring/Using MAVLink Profiles](../mavlink/mavlink_profiles.md) - [Handling incoming MAVLink messages (and writing to a uORB topic)](../mavlink/receiving_messages.md) - [Custom MAVLink Messages](../mavlink/custom_messages.md) +- [Message Signing](../mavlink/message_signing.md) - [Protocols/Microservices](../mavlink/protocols.md) +::: warning +MAVLink messages are unauthenticated by default. Without [message signing](../mavlink/message_signing.md) enabled, any device that can send MAVLink messages to the vehicle can execute commands including shell access, file operations, and flight termination. Production deployments must enable signing and follow the [Security Hardening](../mavlink/security_hardening.md) guide. +::: + ::: info We do not yet cover _command_ handling and sending, or how to implement your own microservices. ::: @@ -77,7 +83,7 @@ You will need to work with the [MAVLink team](https://mavlink.io/en/contributing ::: PX4 includes the [mavlink/mavlink](https://github.com/mavlink/mavlink) repo as a submodule under [/src/modules/mavlink](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/mavlink). -This contains XML definition files in [/mavlink/messages/1.0/](https://github.com/mavlink/mavlink/blob/master/message_definitions/v1.0/). +This contains XML definition files in [/mavlink/messages/1.0/](https://github.com/mavlink/mavlink/tree/master/message_definitions/v1.0). The build toolchain generates the MAVLink 2 C header files at build time. The XML file for which headers files are generated may be defined in the [PX4 kconfig board configuration](../hardware/porting_guide_config.md#px4-board-configuration-kconfig) on a per-board basis, using the variable `CONFIG_MAVLINK_DIALECT`: diff --git a/docs/en/mavlink/mavlink_profiles.md b/docs/en/mavlink/mavlink_profiles.md new file mode 100644 index 0000000000..c3ae6c8019 --- /dev/null +++ b/docs/en/mavlink/mavlink_profiles.md @@ -0,0 +1,67 @@ +# MAVLink Profiles + +A MAVLink _profile_ (also called a _mode_) defines a set of messages that can be streamed by default on a MAVLink channel and their rates. + +This section lists the profiles, and explains how they can be used and extended. + +## Available Profiles + +The available profiles (in source-code declaration order) are: + +- _Normal_ (`MAVLINK_MODE_NORMAL`): Set of messages for a GCS. +- _Onboard_ (`MAVLINK_MODE_ONBOARD`): Set of messages for a companion computer on a fast link (such as Ethernet). +- _Gimbal_ (`MAVLINK_MODE_GIMBAL`): Messages for a gimbal. Note this also enables message forwarding. +- _External Vision_ (`MAVLINK_MODE_EXTVISION`): Messages for offboard vision systems. +- _External Vision Minimal_ (`MAVLINK_MODE_EXTVISIONMIN`): Messages for offboard vision systems on slower links. +- _OSD_ (`MAVLINK_MODE_OSD`): Set of messages for an [On-Screen Display (OSD)](../peripherals/osd.md#mavlink-osd) system. +- _Magic_ (`MAVLINK_MODE_MAGIC`): No messages streamed by default. Used when configuring streaming dynamically via MAVLink. +- _Custom_ (`MAVLINK_MODE_CUSTOM`): Same as `MAVLINK_MODE_MAGIC`. +- _Config_ (`MAVLINK_MODE_CONFIG`): Set of messages for configuration interface, sent at higher rates. This is used, for example, to send the `MAVLINK_MODE_NORMAL` message set via USB to a GCS. +- _Iridium_ (`MAVLINK_MODE_IRIDIUM`): Streams `HIGH_LATENCY2` message to an iridium satellite phone. +- _Minimal_ (`MAVLINK_MODE_MINIMAL`): Minimal set of messages for use with a GCS on a poor telemetry link. +- _Onboard Low Bandwidth_ (`MAVLINK_MODE_ONBOARD_LOW_BANDWIDTH`): Set of messages to be streamed to a companion computer for re-routing to a reduced-traffic link, such as a GCS. +- _Low Bandwidth_ (`MAVLINK_MODE_LOW_BANDWIDTH`): Reduced message set for low bandwidth links. +- _uAvionix_ (`MAVLINK_MODE_UAVIONIX`): Messages for a uAvionix ADS-B beacon. +- _Distance Sensor_ (`MAVLINK_MODE_DISTANCE_SENSOR`): Streams distance sensor data at unlimited rate. + +:::tip +The profile defines the _default_ messages and rates. +A connected MAVLink system can still request the streams/rates it wants using [MAV_CMD_SET_MESSAGE_INTERVAL](https://mavlink.io/en/messages/common.html#MAV_CMD_SET_MESSAGE_INTERVAL). +::: + +To find the exact messages in each profile, search for `configure_streams_to_default` (or the above profile names) in [mavlink_main.cpp](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/mavlink_main.cpp). + +## Assigning Profiles to Ports + +[MAVLink Peripherals](../peripherals/mavlink_peripherals.md) explains how to set up a port for communicating over MAVLink. +This uses the concept of an abstract [MAVLink instance](../peripherals/mavlink_peripherals.md#mavlink-instances) which is then assigned to a serial port. + +The profile associated with a particular MAVLink instance is set using the associated `MAV_X_MODE` parameter: + +- [MAV_0_MODE](../advanced_config/parameter_reference.md#MAV_0_MODE) +- [MAV_1_MODE](../advanced_config/parameter_reference.md#MAV_1_MODE) +- [MAV_2_MODE](../advanced_config/parameter_reference.md#MAV_2_MODE) + +There are also dedicated profile parameters for ports that are not configured via MAVLink instances: + +- [USB_MAV_MODE](../advanced_config/parameter_reference.md#USB_MAV_MODE): Profile for the USB port (used when MAVLink is set or detected on USB). +- [MAV_S_MODE](../advanced_config/parameter_reference.md#MAV_S_MODE): Profile for the internal SOM (System on Module) to FMU communication channel, used on boards where the FMU and companion computer are co-located on the same module. + +Note that not all profiles can necessarily be set on these ports. + +## Adding Messages to a Profile + +You can add messages to a profile in appropriate `case` switch in the [Mavlink::configure_streams_to_default(const char \*configure_single_stream)](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/mavlink_main.cpp#L1430) method (see [mavlink_main.cpp](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/mavlink_main.cpp)). + +If you're testing with a GCS over USB you might add the message to the `MAVLINK_MODE_CONFIG` case using the `configure_stream_local()` method. +For example, to stream `BATTERY_STATUS_DEMO` at 5 Hz: + +```cpp + case MAVLINK_MODE_CONFIG: // USB + // Note: streams requiring low latency come first + ... + configure_stream_local("BATTERY_STATUS_DEMO", 5.0f); + ... +``` + +See [Streaming MAVLink Messages](streaming_messages.md) for a more detailed example. diff --git a/docs/en/mavlink/message_signing.md b/docs/en/mavlink/message_signing.md new file mode 100644 index 0000000000..22ab7e6001 --- /dev/null +++ b/docs/en/mavlink/message_signing.md @@ -0,0 +1,184 @@ +# MAVLink Message Signing + +[MAVLink 2 message signing](https://mavlink.io/en/guide/message_signing.html) allows PX4 to cryptographically verify that incoming MAVLink messages originate from a trusted source (authentication). + +::: info +This mechanism does not _encrypt_ the message payload. +::: + +## Overview + +When signing is enabled, PX4 appends a 13-byte [signature](https://mavlink.io/en/guide/message_signing.html#signature) to every outgoing MAVLink 2 message. + +Incoming messages are checked against the shared secret key, and unsigned or incorrectly signed messages are rejected (with [exceptions for safety-critical messages](#unsigned-message-allowlist)). + +The signing implementation is built into the MAVLink module and is always available, with no special build flags required. +The key is stored in an SD card: + +- **No key on SD card**: + Signing is disabled. + All messages are sent unsigned and all incoming messages are accepted. +- **Valid key on SD card**: + Signing is active on **all links** (including USB). + Outgoing messages are signed. + Incoming messages must be signed (with [exceptions](#unsigned-message-allowlist)). + +## Enable/Disable Signing + +Signing is controlled using the standard MAVLink [SETUP_SIGNING](https://mavlink.io/en/messages/common.html#SETUP_SIGNING) message (as per the [MAVLink signing specification](https://mavlink.io/en/guide/message_signing.html)): + +- To **enable** signing, send a `SETUP_SIGNING` message with a valid key on any link when no key is currently provisioned (see [Key Provisioning](#key-provisioning)). +- To **disable** signing via MAVLink, send a `SETUP_SIGNING` message with an all-zero key and timestamp. + This message **must be signed with the current active key**. + An unsigned blank-key message is rejected. +- To **change** the signing key, send a `SETUP_SIGNING` message with the new key on any link. + When signing is already active, the message must be signed with the current key. + +::: warning +Signing key changes (enable, disable, or rotate) are **rejected while the vehicle is armed**. +The vehicle must be disarmed before signing configuration can be changed. +::: + +::: tip +If the signing key is lost, you can still disable signing if you have physical access to the vehicle. +Either delete the key file (`/mavlink/mavlink-signing-key.bin`) from the SD card and reboot, or remove the SD card entirely. +::: + +## Key Provisioning + +The signing key is set by sending the MAVLink [SETUP_SIGNING](https://mavlink.io/en/messages/common.html#SETUP_SIGNING) message (ID 256) to PX4. +This message contains: + +- A 32-byte secret key +- A 64-bit initial timestamp + +PX4 accepts `SETUP_SIGNING` on **any link** (USB, telemetry radio, network, and so on). + +When signing is **not active** (no key provisioned), the first `SETUP_SIGNING` with a valid key enables signing. +When signing is **already active**, key changes (including disabling) require that the `SETUP_SIGNING` message is signed with the current key. + +Note that `SETUP_SIGNING` is rejected while the vehicle is armed (disarm before provisioning or changing keys). +As per the MAVLink specification, `SETUP_SIGNING` is never forwarded to other links. + +## Key Storage + +The secret key and timestamp are stored on the SD card at: + +```txt +/mavlink/mavlink-signing-key.bin +``` + +The file is a 40-byte binary file: + +| Offset | Size | Content | +| ------ | -------- | ------------------------------------- | +| 0 | 32 bytes | Secret key | +| 32 | 8 bytes | Timestamp (`uint64_t`, little-endian) | + +The file is created with mode `0600` (owner read/write only), and the containing `/mavlink/` directory is created with mode `0700` (owner only). + +On startup, PX4 reads the key from this file. +If the file exists and contains a non-zero key or timestamp, signing is activated automatically. + +::: info +The timestamp in the file is set when `SETUP_SIGNING` is received. +A graceful shutdown also writes the current timestamp back, but in practice most vehicles are powered off by pulling the battery, so the on-disk timestamp will typically remain at the value from the last key provisioning. +::: + +::: info +Storage of the key on the SD card means that signing can be disabled by removing the card. +Note that this requires physical access to the vehicle. +::: + +## How It Works + +### Initialization + +1. The MAVLink module calls `MavlinkSignControl::start()` during startup. +2. The `/mavlink/` directory is created if it doesn't exist. +3. The `mavlink-signing-key.bin` file is opened if it exists. +4. If a valid key is found (non-zero key or timestamp), signing is activated: the signing struct is wired into the MAVLink library and outgoing messages are signed. +5. If no valid key is found, the signing struct is left disconnected, and the MAVLink library operates with zero signing overhead. + +### Outgoing Messages + +When signing is active (valid key present), the `MAVLINK_SIGNING_FLAG_SIGN_OUTGOING` flag is set, which causes the MAVLink library to automatically append a [SHA-256 based signature](https://mavlink.io/en/guide/message_signing.html#signature) to every outgoing MAVLink 2 message. + +When no key is present, signing is completely bypassed with no CPU or bandwidth overhead. + +### Incoming Messages + +For each incoming message, the MAVLink library checks whether a valid signature is present. +If the message is unsigned or has an invalid signature, the library calls the `accept_unsigned` callback, which decides whether to accept or reject the message based on: + +1. **Signing not active**: If no key has been loaded, all messages are accepted. +2. **Allowlisted message**: Certain [safety-critical messages](#unsigned-message-allowlist) are always accepted. + +## Unsigned Message Allowlist + +The following messages are **always** accepted unsigned, regardless of the signing state. +These are safety-critical messages that may originate from systems that don't support signing: + +| Message | ID | Reason | +| ----------------------------------------------------------------------- | --- | -------------------------------------------------------- | +| [HEARTBEAT](https://mavlink.io/en/messages/common.html#HEARTBEAT) | 0 | System discovery and liveness detection | +| [RADIO_STATUS](https://mavlink.io/en/messages/common.html#RADIO_STATUS) | 109 | Radio link status from SiK radios and other radio modems | +| [ADSB_VEHICLE](https://mavlink.io/en/messages/common.html#ADSB_VEHICLE) | 246 | ADS-B traffic information for collision avoidance | +| [COLLISION](https://mavlink.io/en/messages/common.html#COLLISION) | 247 | Collision threat warnings | + +## Security Considerations + +### Signing is enforced on all links + +When signing is active, **all links require signed messages**. +This means: + +- An attacker cannot send unsigned commands on any link. +- Changing or disabling the key requires sending a `SETUP_SIGNING` message **signed with the current key**. +- Signing can be disabled via MAVLink by sending a signed `SETUP_SIGNING` with an all-zero key. + +### Armed guard + +`SETUP_SIGNING` is rejected while the vehicle is armed. +This prevents the signing configuration from being changed during flight, whether by accident or by an attacker who has obtained the key. + +### Lost key recovery + +If the signing key is lost on the GCS side and no device has the current key: + +- **Remove the SD card** and delete `/mavlink/mavlink-signing-key.bin`, then reboot. +- **Reflash via SWD/JTAG** if the SD card is not accessible. + +::: warning +There is no software-only recovery path for a lost key. +This is intentional: any MAVLink-based recovery mechanism would also be available to an attacker. +Physical access to the SD card or debug port is required. +::: + +### Other considerations + +- **Initial key provisioning**: When no key is provisioned, `SETUP_SIGNING` is accepted unsigned on any link. + Once a key is active, subsequent changes require a signed message. + Provision the initial key over a trusted connection, such as USB. +- **Key not exposed via parameters**: The secret key is stored in a separate file on the SD card, not as a MAVLink parameter, so it cannot be read back through the parameter protocol. +- **SD card access**: Anyone with physical access to the SD card can read or modify the `mavlink-signing-key.bin` file, or remove the card entirely to disable signing. + Ensure physical security of the vehicle if signing is used as a security control. +- **Replay protection**: The MAVLink signing protocol includes a timestamp that prevents replay attacks. + The on-disk timestamp is updated when a new key is provisioned via `SETUP_SIGNING`. + A graceful shutdown also persists the current timestamp, but since most vehicles are powered off by pulling the battery, the on-disk timestamp will typically remain at the value from the last key provisioning on reboot. +- **No encryption**: Message signing provides **authentication and integrity only**. + Messages are still sent in plaintext. + An eavesdropper can read all message contents (telemetry, commands, parameters, missions) but cannot forge or modify them without the key. +- **Allowlisted messages bypass signing**: A small set of [safety-critical messages](#unsigned-message-allowlist) are always accepted unsigned. + An attacker can spoof these specific messages (e.g. fake `ADSB_VEHICLE` traffic) even when signing is active. + +### What signing does NOT protect against + +| Attack | Why | +| ----------------------------------------------------- | ------------------------------------------------------- | +| Eavesdropping | Messages are not encrypted | +| SD card extraction | Key file is readable by anyone with physical access | +| Spoofed `HEARTBEAT`/`RADIO_STATUS`/`ADSB`/`COLLISION` | These are allowlisted unsigned | +| Lost key without SD card access | Requires SWD reflash | +| Key rotation | No automatic mechanism; manual re-provisioning required | +| In-flight key changes | `SETUP_SIGNING` rejected while armed | diff --git a/docs/en/mavlink/protocols.md b/docs/en/mavlink/protocols.md index 9dac078fb9..5105df2344 100644 --- a/docs/en/mavlink/protocols.md +++ b/docs/en/mavlink/protocols.md @@ -30,6 +30,7 @@ These services are known to be supported in some form: - [Landing Target Protocol](https://mavlink.io/en/services/landing_target.html) - [Manual Control (Joystick) Protocol](https://mavlink.io/en/services/manual_control.html) - [MAVLink Id Assignment (sysid, compid)](https://mavlink.io/en/services/mavlink_id_assignment.html) +- [Message Signing](../mavlink/message_signing.md) ([MAVLink spec](https://mavlink.io/en/guide/message_signing.html)) - [Mission Protocol](https://mavlink.io/en/services/mission.html) - [Offboard Control Protocol](https://mavlink.io/en/services/offboard_control.html) - [Remote ID](../peripherals/remote_id.md) ([Open Drone ID Protocol](https://mavlink.io/en/services/opendroneid.html)) diff --git a/docs/en/mavlink/security_hardening.md b/docs/en/mavlink/security_hardening.md new file mode 100644 index 0000000000..dae232734d --- /dev/null +++ b/docs/en/mavlink/security_hardening.md @@ -0,0 +1,104 @@ +# MAVLink Security Hardening for Production Deployments + + + +MAVLink is an open communication protocol designed for lightweight, low-latency communication between drones and ground stations. +By default, all MAVLink messages are unauthenticated. +This is intentional for development and testing, but **production deployments must enable [message signing](message_signing.md)** to prevent unauthorized access. + +::: warning +Without message signing enabled, any device that can send MAVLink messages to the vehicle (via radio, network, or serial) can execute any command, including shell access, file operations, parameter changes, mission uploads, arming, and flight termination. +::: + +## What Is at Risk + +When MAVLink signing is not enabled, an attacker within communication range can: + +| Capability | MAVLink mechanism | +| ---------------------------- | ------------------------------------------------ | +| Execute shell commands | `SERIAL_CONTROL` with `SERIAL_CONTROL_DEV_SHELL` | +| Read, write, or delete files | MAVLink FTP protocol | +| Change any flight parameter | `PARAM_SET` / `PARAM_EXT_SET` | +| Upload or overwrite missions | Mission protocol | +| Arm or disarm motors | `MAV_CMD_COMPONENT_ARM_DISARM` | +| Terminate flight (crash) | `MAV_CMD_DO_FLIGHTTERMINATION` | +| Trigger emergency landing | Spoofed `BATTERY_STATUS` | +| Reboot the vehicle | `MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN` | + +All of these are standard MAVLink capabilities used by ground control stations. +Without signing, there is no distinction between a legitimate GCS and an unauthorized sender. + +## Hardening Checklist + +### 1. Enable Message Signing + +Message signing provides cryptographic authentication for all MAVLink communication. +See [Message Signing](message_signing.md) for full details. + +Steps: + +1. Connect to the vehicle over a **trusted link** (USB or other secure connection). +2. Provision a 32-byte secret key using the [SETUP_SIGNING](https://mavlink.io/en/messages/common.html#SETUP_SIGNING) message. This works on any link, but use a trusted one for initial provisioning. +3. Provision the same key on all ground control stations and companion computers that need to communicate with the vehicle. +4. Verify that unsigned messages from unknown sources are rejected. + +::: info +Once a key is provisioned, signing is enforced automatically on **all links** (including USB). +Changing or disabling the key requires a signed `SETUP_SIGNING` message. +Signing changes are rejected while the vehicle is armed. +Signing can also be disabled by physically removing the key file from the SD card. +::: + +### 2. Secure Physical Access + +- **SD card**: The signing key is stored at `/mavlink/mavlink-signing-key.bin`. + Anyone with physical access to the SD card can read, modify, or remove the key file. +- **USB ports**: USB follows the same signing rules as all other links. + When signing is active, USB requires signed messages. +- **Debug ports (SWD/JTAG)**: If exposed, [Debug Ports](../debug/swd_debug.md) allow full firmware reflash and bypass all software security. + Not all vehicles expose debug connectors. + +::: warning +Signing protects all MAVLink links. +The primary physical attack surface is the SD card (key file extraction or deletion). +If your threat model includes physical access, secure the SD card slot and debug ports. +::: + +### 3. Secure Network Links + +- Do not expose MAVLink UDP/TCP ports to untrusted networks or the internet. +- Place MAVLink communication links behind firewalls or VPNs. +- Segment MAVLink networks from business or public networks. +- When using companion computers, audit which network interfaces MAVLink is bound to. + +### 4. Understand the Limitations + +- **No encryption**: + Message signing provides authentication and integrity, but messages are sent in plaintext. + An eavesdropper can read telemetry and commands but cannot forge them. +- **Allowlisted messages**: + A small set of [safety-critical messages](message_signing.md#unsigned-message-allowlist) (`HEARTBEAT`, `RADIO_STATUS`, `ADSB_VEHICLE`, `COLLISION`) are always accepted unsigned on all links. + An attacker could spoof these specific messages. +- **Key management**: + There is no automatic key rotation. + Keys must be reprovisioned manually via a signed `SETUP_SIGNING` message. +- **Lost key recovery**: + If the signing key is lost on all GCS devices, the only recovery is physical: remove the SD card and delete the key file, or reflash via SWD/JTAG. + There is no software-only recovery path. + See [Message Signing: Lost Key Recovery](message_signing.md#lost-key-recovery) for details. + +## Integrator Responsibility + +PX4 is open-source flight controller firmware used by manufacturers and system integrators to build commercial and custom drone platforms. + +Securing the communication links for a specific deployment is the responsibility of the system integrator. +This includes: + +- Choosing appropriate radio hardware and link security +- Enabling and managing MAVLink message signing +- Restricting network access to MAVLink interfaces +- Applying firmware updates that address security issues +- Evaluating whether the default configuration meets the security requirements of the target application + +PX4 provides the tools for securing MAVLink communication. +Integrators must enable and configure them for their deployment context. diff --git a/docs/en/mavlink/streaming_messages.md b/docs/en/mavlink/streaming_messages.md index da6716910f..710ab3a9b6 100644 --- a/docs/en/mavlink/streaming_messages.md +++ b/docs/en/mavlink/streaming_messages.md @@ -4,7 +4,7 @@ This tutorial demonstrates how to stream a uORB message as a MAVLink message, an ## Overview -[MAVLink messages](../middleware/mavlink.md) are streamed using a streaming class, derived from `MavlinkStream`, that has been added to the PX4 stream list. +[MAVLink messages](../middleware/mavlink.md) are streamed using a streaming class, derived from `MavlinkStream`, that has been added to the [PX4 stream list](#add-the-new-class-to-the-streaming-list). The class has framework methods that you implement so PX4 can get information it needs from the generated MAVLink message definition. It also has a `send()` method that is called each time the message needs to be sent — you override this to copy information from a uORB subscription to the MAVLink message object that is to be sent. @@ -187,15 +187,17 @@ Most streaming classes are very similar (see examples in [/src/modules/mavlink/s ::: -Next we include our new class in [mavlink_messages.cpp](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/mavlink_messages.cpp#L2193). -Add the line below to the part of the file where all the other streams are included: +### Add the new class to the streaming list + +Next we add our new class to the streaming list. + +First open [mavlink_messages.cpp](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/mavlink_messages.cpp#L2193) and add the line below to the part of the file where all the other streams are included: ```cpp #include "streams/BATTERY_STATUS_DEMO.hpp" ``` -Finally append the stream class to the `streams_list` at the bottom of -[mavlink_messages.cpp](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/mavlink_messages.cpp) +Then append the stream class to the `streams_list` at the bottom of [mavlink_messages.cpp](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/mavlink_messages.cpp) ```C StreamListItem *streams_list[] = { @@ -212,25 +214,12 @@ We cover that in the next sections. ## Streaming by Default -The easiest way to stream your messages by default (as part of a build) is to add them to [mavlink_main.cpp](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/mavlink_main.cpp) in the appropriate message group. +The easiest way to stream your messages by default (as part of a build) is to add them to appropriate [MAVLink Profile](../mavlink/mavlink_profiles.md), such as `MAVLINK_MODE_NORMAL` if you're streaming to a GCS over WiFI, or `MAVLINK_MODE_OSD` for an OSD device. -If you search in the file you'll find groups of messages defined in a switch statement: +This is covered in [Adding Messages to a Profile](..//mavlink/mavlink_profiles.md#adding-messages-to-a-profile), but in summary you first open [mavlink_main.cpp](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/mavlink_main.cpp), search for the method `Mavlink::configure_streams_to_default`, and then find the profile that you wish to update. -- `MAVLINK_MODE_NORMAL`: Streamed to a GCS. -- `MAVLINK_MODE_ONBOARD`: Streamed to a companion computer on a fast link, such as Ethernet -- `MAVLINK_MODE_ONBOARD_LOW_BANDWIDTH`: Streamed to a companion computer for re-routing to a reduced-traffic link, such as a GCS. -- `MAVLINK_MODE_GIMBAL`: Streamed to a gimbal -- `MAVLINK_MODE_EXTVISION`: Streamed to an external vision system -- `MAVLINK_MODE_EXTVISIONMIN`: Streamed to an external vision system on a slower link -- `MAVLINK_MODE_OSD`: Streamed to an OSD, such as an FPV headset. -- `MAVLINK_MODE_CUSTOM`: Stream nothing by default. Used when configuring streaming using MAVLink. -- `MAVLINK_MODE_MAGIC`: Same as `MAVLINK_MODE_CUSTOM` -- `MAVLINK_MODE_CONFIG`: Streaming over USB with higher rates than `MAVLINK_MODE_NORMAL`. -- `MAVLINK_MODE_MINIMAL`: Stream a minimal set of messages. Normally used for poor telemetry links. -- `MAVLINK_MODE_IRIDIUM`: Streamed to an iridium satellite phone - -Normally you'll be testing on a GCS, so you could just add the message to the `MAVLINK_MODE_NORMAL` case using the `configure_stream_local()` method. -For example, to stream CA_TRAJECTORY at 5 Hz: +If you're just testing on a GCS, you could add the message to the `MAVLINK_MODE_NORMAL` case using the `configure_stream_local()` method. +For example, to stream `BATTERY_STATUS_DEMO` at 5 Hz: ```cpp case MAVLINK_MODE_CONFIG: // USB diff --git a/docs/en/middleware/dds_topics.md b/docs/en/middleware/dds_topics.md index a6a4801f45..c9f73ce521 100644 --- a/docs/en/middleware/dds_topics.md +++ b/docs/en/middleware/dds_topics.md @@ -70,7 +70,6 @@ This document shows a markdown-rendered version of [dds_topics.yaml](https://git | /fmu/in/vehicle_torque_setpoint | [px4_msgs::msg::VehicleTorqueSetpoint](../msg_docs/VehicleTorqueSetpoint.md) | | /fmu/in/actuator_motors | [px4_msgs::msg::ActuatorMotors](../msg_docs/ActuatorMotors.md) | | /fmu/in/actuator_servos | [px4_msgs::msg::ActuatorServos](../msg_docs/ActuatorServos.md) | -| /fmu/in/aux_global_position | [px4_msgs::msg::AuxGlobalPosition](../msg_docs/AuxGlobalPosition.md) | | /fmu/in/fixed_wing_longitudinal_setpoint | [px4_msgs::msg::FixedWingLongitudinalSetpoint](../msg_docs/FixedWingLongitudinalSetpoint.md) | | /fmu/in/fixed_wing_lateral_setpoint | [px4_msgs::msg::FixedWingLateralSetpoint](../msg_docs/FixedWingLateralSetpoint.md) | | /fmu/in/longitudinal_control_configuration | [px4_msgs::msg::LongitudinalControlConfiguration](../msg_docs/LongitudinalControlConfiguration.md) | @@ -85,7 +84,9 @@ This document shows a markdown-rendered version of [dds_topics.yaml](https://git ## Subscriptions Multi -None +| Topic | Type | Route Field | Max Instances | +| --------------------------- | -------------------------------------------------------------------- | ----------- | ------------- | +| /fmu/in/aux_global_position | [px4_msgs::msg::AuxGlobalPosition](../msg_docs/AuxGlobalPosition.md) | `id` | 4 | ## Not Exported @@ -94,201 +95,209 @@ They are not build into the module, and hence are neither published or subscribe ::: details See messages -- [PositionControllerLandingStatus](../msg_docs/PositionControllerLandingStatus.md) -- [TrajectorySetpoint6dof](../msg_docs/TrajectorySetpoint6dof.md) -- [DebugArray](../msg_docs/DebugArray.md) -- [CanInterfaceStatus](../msg_docs/CanInterfaceStatus.md) -- [PowerButtonState](../msg_docs/PowerButtonState.md) -- [QshellReq](../msg_docs/QshellReq.md) -- [UlogStream](../msg_docs/UlogStream.md) -- [GpioConfig](../msg_docs/GpioConfig.md) -- [LandingGearWheel](../msg_docs/LandingGearWheel.md) -- [CameraCapture](../msg_docs/CameraCapture.md) -- [UavcanParameterValue](../msg_docs/UavcanParameterValue.md) -- [HeaterStatus](../msg_docs/HeaterStatus.md) -- [RoverRateStatus](../msg_docs/RoverRateStatus.md) -- [SensorUwb](../msg_docs/SensorUwb.md) -- [Ping](../msg_docs/Ping.md) -- [RadioStatus](../msg_docs/RadioStatus.md) -- [SensorSelection](../msg_docs/SensorSelection.md) -- [ActionRequest](../msg_docs/ActionRequest.md) -- [GimbalManagerStatus](../msg_docs/GimbalManagerStatus.md) -- [SystemPower](../msg_docs/SystemPower.md) -- [SensorAccel](../msg_docs/SensorAccel.md) -- [TiltrotorExtraControls](../msg_docs/TiltrotorExtraControls.md) -- [RateCtrlStatus](../msg_docs/RateCtrlStatus.md) -- [Mission](../msg_docs/Mission.md) -- [TecsStatus](../msg_docs/TecsStatus.md) -- [AdcReport](../msg_docs/AdcReport.md) -- [VehicleAirData](../msg_docs/VehicleAirData.md) -- [SensorMag](../msg_docs/SensorMag.md) -- [ActuatorControlsStatus](../msg_docs/ActuatorControlsStatus.md) -- [RegisterExtComponentRequestV0](../msg_docs/RegisterExtComponentRequestV0.md) -- [TaskStackInfo](../msg_docs/TaskStackInfo.md) -- [EstimatorAidSource3d](../msg_docs/EstimatorAidSource3d.md) -- [UlogStreamAck](../msg_docs/UlogStreamAck.md) -- [GpioOut](../msg_docs/GpioOut.md) -- [EstimatorGpsStatus](../msg_docs/EstimatorGpsStatus.md) -- [NavigatorMissionItem](../msg_docs/NavigatorMissionItem.md) -- [MavlinkLog](../msg_docs/MavlinkLog.md) -- [ParameterSetUsedRequest](../msg_docs/ParameterSetUsedRequest.md) -- [PurePursuitStatus](../msg_docs/PurePursuitStatus.md) -- [DifferentialPressure](../msg_docs/DifferentialPressure.md) -- [FollowTarget](../msg_docs/FollowTarget.md) -- [Gripper](../msg_docs/Gripper.md) -- [ActuatorOutputs](../msg_docs/ActuatorOutputs.md) -- [LoggerStatus](../msg_docs/LoggerStatus.md) -- [SatelliteInfo](../msg_docs/SatelliteInfo.md) -- [CameraStatus](../msg_docs/CameraStatus.md) - [GimbalControls](../msg_docs/GimbalControls.md) -- [TakeoffStatus](../msg_docs/TakeoffStatus.md) -- [MavlinkTunnel](../msg_docs/MavlinkTunnel.md) -- [OrbTestLarge](../msg_docs/OrbTestLarge.md) -- [FollowTargetStatus](../msg_docs/FollowTargetStatus.md) -- [EstimatorAidSource2d](../msg_docs/EstimatorAidSource2d.md) -- [SensorsStatus](../msg_docs/SensorsStatus.md) -- [MagWorkerData](../msg_docs/MagWorkerData.md) +- [CameraStatus](../msg_docs/CameraStatus.md) +- [GpioRequest](../msg_docs/GpioRequest.md) +- [SensorTemp](../msg_docs/SensorTemp.md) +- [DeviceInformation](../msg_docs/DeviceInformation.md) +- [EstimatorEventFlags](../msg_docs/EstimatorEventFlags.md) +- [EstimatorStates](../msg_docs/EstimatorStates.md) +- [SensorsStatusImu](../msg_docs/SensorsStatusImu.md) +- [EstimatorStatus](../msg_docs/EstimatorStatus.md) +- [RegisterExtComponentRequestV1](../msg_docs/RegisterExtComponentRequestV1.md) +- [UlogStream](../msg_docs/UlogStream.md) +- [OpenDroneIdOperatorId](../msg_docs/OpenDroneIdOperatorId.md) +- [RateCtrlStatus](../msg_docs/RateCtrlStatus.md) +- [SensorGnssStatus](../msg_docs/SensorGnssStatus.md) +- [EscEepromWrite](../msg_docs/EscEepromWrite.md) +- [IridiumsbdStatus](../msg_docs/IridiumsbdStatus.md) +- [EstimatorFusionControl](../msg_docs/EstimatorFusionControl.md) +- [GpioConfig](../msg_docs/GpioConfig.md) +- [RoverSpeedStatus](../msg_docs/RoverSpeedStatus.md) +- [InputRc](../msg_docs/InputRc.md) +- [TaskStackInfo](../msg_docs/TaskStackInfo.md) +- [PositionSetpoint](../msg_docs/PositionSetpoint.md) +- [SystemPower](../msg_docs/SystemPower.md) +- [VelocityLimits](../msg_docs/VelocityLimits.md) +- [CellularStatus](../msg_docs/CellularStatus.md) +- [DebugKeyValue](../msg_docs/DebugKeyValue.md) +- [GimbalManagerStatus](../msg_docs/GimbalManagerStatus.md) +- [DronecanNodeStatus](../msg_docs/DronecanNodeStatus.md) +- [NavigatorStatus](../msg_docs/NavigatorStatus.md) +- [Ping](../msg_docs/Ping.md) +- [Rpm](../msg_docs/Rpm.md) +- [MissionResult](../msg_docs/MissionResult.md) +- [PositionControllerLandingStatus](../msg_docs/PositionControllerLandingStatus.md) +- [FollowTargetEstimator](../msg_docs/FollowTargetEstimator.md) +- [Vtx](../msg_docs/Vtx.md) +- [ArmingCheckRequestV0](../msg_docs/ArmingCheckRequestV0.md) +- [EstimatorInnovations](../msg_docs/EstimatorInnovations.md) +- [VehicleStatusV1](../msg_docs/VehicleStatusV1.md) - [GeofenceStatus](../msg_docs/GeofenceStatus.md) -- [MagnetometerBiasEstimate](../msg_docs/MagnetometerBiasEstimate.md) -- [SensorCorrection](../msg_docs/SensorCorrection.md) +- [DatamanResponse](../msg_docs/DatamanResponse.md) +- [LaunchDetectionStatus](../msg_docs/LaunchDetectionStatus.md) +- [DebugValue](../msg_docs/DebugValue.md) +- [FollowTarget](../msg_docs/FollowTarget.md) +- [EstimatorAidSource2d](../msg_docs/EstimatorAidSource2d.md) +- [PowerMonitor](../msg_docs/PowerMonitor.md) +- [HeaterStatus](../msg_docs/HeaterStatus.md) +- [FuelTankStatus](../msg_docs/FuelTankStatus.md) - [SensorAccelFifo](../msg_docs/SensorAccelFifo.md) +- [SensorCorrection](../msg_docs/SensorCorrection.md) +- [VehicleStatusV0](../msg_docs/VehicleStatusV0.md) +- [SensorSelection](../msg_docs/SensorSelection.md) +- [MavlinkTunnel](../msg_docs/MavlinkTunnel.md) +- [EstimatorGpsStatus](../msg_docs/EstimatorGpsStatus.md) +- [AdcReport](../msg_docs/AdcReport.md) +- [UlogStreamAck](../msg_docs/UlogStreamAck.md) +- [CameraTrigger](../msg_docs/CameraTrigger.md) +- [DebugArray](../msg_docs/DebugArray.md) +- [SensorMag](../msg_docs/SensorMag.md) +- [FailureDetectorStatus](../msg_docs/FailureDetectorStatus.md) +- [FlightPhaseEstimation](../msg_docs/FlightPhaseEstimation.md) +- [NeuralControl](../msg_docs/NeuralControl.md) +- [PowerButtonState](../msg_docs/PowerButtonState.md) +- [RtlTimeEstimate](../msg_docs/RtlTimeEstimate.md) +- [Cpuload](../msg_docs/Cpuload.md) +- [WheelEncoders](../msg_docs/WheelEncoders.md) +- [SensorAirflow](../msg_docs/SensorAirflow.md) +- [OrbTest](../msg_docs/OrbTest.md) +- [GainCompression](../msg_docs/GainCompression.md) +- [RcParameterMap](../msg_docs/RcParameterMap.md) +- [ParameterUpdate](../msg_docs/ParameterUpdate.md) +- [PurePursuitStatus](../msg_docs/PurePursuitStatus.md) +- [VehicleGlobalPositionV0](../msg_docs/VehicleGlobalPositionV0.md) +- [GeneratorStatus](../msg_docs/GeneratorStatus.md) +- [Ekf2Timestamps](../msg_docs/Ekf2Timestamps.md) +- [FixedWingLateralStatus](../msg_docs/FixedWingLateralStatus.md) +- [GimbalManagerSetManualControl](../msg_docs/GimbalManagerSetManualControl.md) +- [YawEstimatorStatus](../msg_docs/YawEstimatorStatus.md) +- [SatelliteInfo](../msg_docs/SatelliteInfo.md) +- [FollowTargetStatus](../msg_docs/FollowTargetStatus.md) +- [CameraCapture](../msg_docs/CameraCapture.md) +- [AutotuneAttitudeControlStatus](../msg_docs/AutotuneAttitudeControlStatus.md) +- [GimbalManagerSetAttitude](../msg_docs/GimbalManagerSetAttitude.md) +- [VehicleAttitudeSetpointV0](../msg_docs/VehicleAttitudeSetpointV0.md) +- [MavlinkLog](../msg_docs/MavlinkLog.md) +- [ArmingCheckReplyV0](../msg_docs/ArmingCheckReplyV0.md) +- [DebugVect](../msg_docs/DebugVect.md) +- [HealthReport](../msg_docs/HealthReport.md) +- [Mission](../msg_docs/Mission.md) +- [ParameterSetUsedRequest](../msg_docs/ParameterSetUsedRequest.md) +- [MagnetometerBiasEstimate](../msg_docs/MagnetometerBiasEstimate.md) +- [Airspeed](../msg_docs/Airspeed.md) +- [TecsStatus](../msg_docs/TecsStatus.md) +- [LandingTargetInnovations](../msg_docs/LandingTargetInnovations.md) +- [EscStatus](../msg_docs/EscStatus.md) +- [VehicleLocalPositionV0](../msg_docs/VehicleLocalPositionV0.md) +- [FixedWingRunwayControl](../msg_docs/FixedWingRunwayControl.md) +- [RcChannels](../msg_docs/RcChannels.md) +- [EstimatorBias3d](../msg_docs/EstimatorBias3d.md) +- [DatamanRequest](../msg_docs/DatamanRequest.md) +- [SensorHygrometer](../msg_docs/SensorHygrometer.md) +- [MagWorkerData](../msg_docs/MagWorkerData.md) +- [BatteryInfo](../msg_docs/BatteryInfo.md) +- [LandingGearWheel](../msg_docs/LandingGearWheel.md) +- [SensorPreflightMag](../msg_docs/SensorPreflightMag.md) +- [Event](../msg_docs/Event.md) +- [LoggerStatus](../msg_docs/LoggerStatus.md) +- [ParameterSetValueRequest](../msg_docs/ParameterSetValueRequest.md) +- [VehicleAirData](../msg_docs/VehicleAirData.md) +- [VehicleAngularAccelerationSetpoint](../msg_docs/VehicleAngularAccelerationSetpoint.md) +- [Gripper](../msg_docs/Gripper.md) +- [PwmInput](../msg_docs/PwmInput.md) +- [BatteryStatusV0](../msg_docs/BatteryStatusV0.md) +- [GpioIn](../msg_docs/GpioIn.md) +- [PositionControllerStatus](../msg_docs/PositionControllerStatus.md) +- [VehicleAngularVelocity](../msg_docs/VehicleAngularVelocity.md) +- [RegisterExtComponentReplyV0](../msg_docs/RegisterExtComponentReplyV0.md) +- [RaptorStatus](../msg_docs/RaptorStatus.md) +- [DifferentialPressure](../msg_docs/DifferentialPressure.md) +- [VehicleLocalPositionSetpoint](../msg_docs/VehicleLocalPositionSetpoint.md) +- [VehicleAcceleration](../msg_docs/VehicleAcceleration.md) +- [HomePositionV0](../msg_docs/HomePositionV0.md) +- [RaptorInput](../msg_docs/RaptorInput.md) +- [TuneControl](../msg_docs/TuneControl.md) +- [ControlAllocatorStatus](../msg_docs/ControlAllocatorStatus.md) +- [NavigatorMissionItem](../msg_docs/NavigatorMissionItem.md) +- [SensorGyroFft](../msg_docs/SensorGyroFft.md) +- [VehicleConstraints](../msg_docs/VehicleConstraints.md) +- [PpsCapture](../msg_docs/PpsCapture.md) +- [VehicleRoi](../msg_docs/VehicleRoi.md) +- [SensorGyroFifo](../msg_docs/SensorGyroFifo.md) +- [EventV0](../msg_docs/EventV0.md) +- [ParameterResetRequest](../msg_docs/ParameterResetRequest.md) +- [GimbalDeviceInformation](../msg_docs/GimbalDeviceInformation.md) +- [FigureEightStatus](../msg_docs/FigureEightStatus.md) +- [ManualControlSwitches](../msg_docs/ManualControlSwitches.md) +- [SensorGnssRelative](../msg_docs/SensorGnssRelative.md) +- [OrbTestLarge](../msg_docs/OrbTestLarge.md) - [VehicleOpticalFlowVel](../msg_docs/VehicleOpticalFlowVel.md) - [EscReport](../msg_docs/EscReport.md) -- [SensorHygrometer](../msg_docs/SensorHygrometer.md) -- [FollowTargetEstimator](../msg_docs/FollowTargetEstimator.md) -- [NeuralControl](../msg_docs/NeuralControl.md) -- [CameraTrigger](../msg_docs/CameraTrigger.md) -- [DistanceSensorModeChangeRequest](../msg_docs/DistanceSensorModeChangeRequest.md) -- [PositionControllerStatus](../msg_docs/PositionControllerStatus.md) -- [GpsInjectData](../msg_docs/GpsInjectData.md) -- [VelocityLimits](../msg_docs/VelocityLimits.md) -- [Ekf2Timestamps](../msg_docs/Ekf2Timestamps.md) -- [WheelEncoders](../msg_docs/WheelEncoders.md) -- [FlightPhaseEstimation](../msg_docs/FlightPhaseEstimation.md) -- [GimbalManagerSetManualControl](../msg_docs/GimbalManagerSetManualControl.md) -- [OrbTestMedium](../msg_docs/OrbTestMedium.md) -- [LedControl](../msg_docs/LedControl.md) -- [RcChannels](../msg_docs/RcChannels.md) -- [SensorAirflow](../msg_docs/SensorAirflow.md) -- [GimbalManagerInformation](../msg_docs/GimbalManagerInformation.md) -- [InternalCombustionEngineControl](../msg_docs/InternalCombustionEngineControl.md) -- [SensorGyroFft](../msg_docs/SensorGyroFft.md) -- [SensorGyroFifo](../msg_docs/SensorGyroFifo.md) -- [VehicleLocalPositionSetpoint](../msg_docs/VehicleLocalPositionSetpoint.md) -- [SensorGnssRelative](../msg_docs/SensorGnssRelative.md) -- [BatteryInfo](../msg_docs/BatteryInfo.md) -- [VehicleAttitudeSetpointV0](../msg_docs/VehicleAttitudeSetpointV0.md) -- [OpenDroneIdOperatorId](../msg_docs/OpenDroneIdOperatorId.md) -- [Cpuload](../msg_docs/Cpuload.md) +- [RadioStatus](../msg_docs/RadioStatus.md) - [RoverAttitudeStatus](../msg_docs/RoverAttitudeStatus.md) -- [GeofenceResult](../msg_docs/GeofenceResult.md) -- [BatteryStatusV0](../msg_docs/BatteryStatusV0.md) -- [ActuatorArmed](../msg_docs/ActuatorArmed.md) -- [VehicleConstraints](../msg_docs/VehicleConstraints.md) -- [OpenDroneIdArmStatus](../msg_docs/OpenDroneIdArmStatus.md) +- [ActuatorOutputs](../msg_docs/ActuatorOutputs.md) +- [UavcanParameterRequest](../msg_docs/UavcanParameterRequest.md) +- [GpioOut](../msg_docs/GpioOut.md) +- [UavcanParameterValue](../msg_docs/UavcanParameterValue.md) +- [RtlStatus](../msg_docs/RtlStatus.md) +- [VehicleCommandAckV0](../msg_docs/VehicleCommandAckV0.md) +- [EscEepromRead](../msg_docs/EscEepromRead.md) +- [GpsInjectData](../msg_docs/GpsInjectData.md) +- [VehicleMagnetometer](../msg_docs/VehicleMagnetometer.md) +- [AirspeedValidatedV0](../msg_docs/AirspeedValidatedV0.md) - [VehicleImu](../msg_docs/VehicleImu.md) -- [RoverSpeedStatus](../msg_docs/RoverSpeedStatus.md) -- [RegisterExtComponentReplyV0](../msg_docs/RegisterExtComponentReplyV0.md) -- [VehicleStatusV1](../msg_docs/VehicleStatusV1.md) -- [HealthReport](../msg_docs/HealthReport.md) -- [EstimatorInnovations](../msg_docs/EstimatorInnovations.md) -- [PwmInput](../msg_docs/PwmInput.md) -- [DronecanNodeStatus](../msg_docs/DronecanNodeStatus.md) +- [GimbalDeviceSetAttitude](../msg_docs/GimbalDeviceSetAttitude.md) +- [TakeoffStatus](../msg_docs/TakeoffStatus.md) +- [OpenDroneIdSelfId](../msg_docs/OpenDroneIdSelfId.md) +- [SensorsStatus](../msg_docs/SensorsStatus.md) +- [IrlockReport](../msg_docs/IrlockReport.md) +- [SensorGyro](../msg_docs/SensorGyro.md) +- [SensorUwb](../msg_docs/SensorUwb.md) +- [NormalizedUnsignedSetpoint](../msg_docs/NormalizedUnsignedSetpoint.md) +- [EstimatorAidSource1d](../msg_docs/EstimatorAidSource1d.md) +- [OrbitStatus](../msg_docs/OrbitStatus.md) +- [TiltrotorExtraControls](../msg_docs/TiltrotorExtraControls.md) +- [GeofenceResult](../msg_docs/GeofenceResult.md) +- [SensorBaro](../msg_docs/SensorBaro.md) +- [SensorAccel](../msg_docs/SensorAccel.md) +- [ActuatorTest](../msg_docs/ActuatorTest.md) +- [OpenDroneIdArmStatus](../msg_docs/OpenDroneIdArmStatus.md) +- [EstimatorBias](../msg_docs/EstimatorBias.md) +- [RegisterExtComponentRequestV0](../msg_docs/RegisterExtComponentRequestV0.md) +- [EstimatorSelectorStatus](../msg_docs/EstimatorSelectorStatus.md) +- [ActuatorControlsStatus](../msg_docs/ActuatorControlsStatus.md) +- [RangingBeacon](../msg_docs/RangingBeacon.md) +- [TrajectorySetpoint6dof](../msg_docs/TrajectorySetpoint6dof.md) +- [ActuatorServosTrim](../msg_docs/ActuatorServosTrim.md) +- [LogMessage](../msg_docs/LogMessage.md) +- [CanInterfaceStatus](../msg_docs/CanInterfaceStatus.md) +- [HoverThrustEstimate](../msg_docs/HoverThrustEstimate.md) +- [DistanceSensorModeChangeRequest](../msg_docs/DistanceSensorModeChangeRequest.md) +- [VehicleImuStatus](../msg_docs/VehicleImuStatus.md) +- [AirspeedWind](../msg_docs/AirspeedWind.md) +- [OrbTestMedium](../msg_docs/OrbTestMedium.md) +- [QshellReq](../msg_docs/QshellReq.md) +- [EstimatorAidSource3d](../msg_docs/EstimatorAidSource3d.md) +- [LedControl](../msg_docs/LedControl.md) +- [QshellRetval](../msg_docs/QshellRetval.md) +- [EstimatorSensorBias](../msg_docs/EstimatorSensorBias.md) +- [VehicleStatusV2](../msg_docs/VehicleStatusV2.md) +- [LandingTargetPose](../msg_docs/LandingTargetPose.md) +- [OpenDroneIdSystem](../msg_docs/OpenDroneIdSystem.md) +- [FixedWingLateralGuidanceStatus](../msg_docs/FixedWingLateralGuidanceStatus.md) +- [InternalCombustionEngineStatus](../msg_docs/InternalCombustionEngineStatus.md) +- [VehicleStatusV3](../msg_docs/VehicleStatusV3.md) - [ConfigOverridesV0](../msg_docs/ConfigOverridesV0.md) - [ButtonEvent](../msg_docs/ButtonEvent.md) -- [SensorsStatusImu](../msg_docs/SensorsStatusImu.md) -- [ArmingCheckReplyV0](../msg_docs/ArmingCheckReplyV0.md) -- [RaptorInput](../msg_docs/RaptorInput.md) -- [RcParameterMap](../msg_docs/RcParameterMap.md) -- [GpsDump](../msg_docs/GpsDump.md) -- [PpsCapture](../msg_docs/PpsCapture.md) -- [SensorPreflightMag](../msg_docs/SensorPreflightMag.md) -- [VehicleStatusV0](../msg_docs/VehicleStatusV0.md) -- [MissionResult](../msg_docs/MissionResult.md) -- [InternalCombustionEngineStatus](../msg_docs/InternalCombustionEngineStatus.md) -- [GpioRequest](../msg_docs/GpioRequest.md) -- [Rpm](../msg_docs/Rpm.md) -- [GeneratorStatus](../msg_docs/GeneratorStatus.md) -- [AirspeedWind](../msg_docs/AirspeedWind.md) -- [Vtx](../msg_docs/Vtx.md) -- [FixedWingLateralGuidanceStatus](../msg_docs/FixedWingLateralGuidanceStatus.md) -- [EstimatorBias](../msg_docs/EstimatorBias.md) -- [CellularStatus](../msg_docs/CellularStatus.md) -- [DeviceInformation](../msg_docs/DeviceInformation.md) -- [VehicleMagnetometer](../msg_docs/VehicleMagnetometer.md) -- [EstimatorStatus](../msg_docs/EstimatorStatus.md) -- [RtlStatus](../msg_docs/RtlStatus.md) -- [EstimatorStates](../msg_docs/EstimatorStates.md) -- [DatamanResponse](../msg_docs/DatamanResponse.md) -- [VehicleRoi](../msg_docs/VehicleRoi.md) -- [ParameterSetValueResponse](../msg_docs/ParameterSetValueResponse.md) -- [LandingTargetPose](../msg_docs/LandingTargetPose.md) -- [VehicleLocalPositionV0](../msg_docs/VehicleLocalPositionV0.md) -- [LogMessage](../msg_docs/LogMessage.md) -- [ParameterResetRequest](../msg_docs/ParameterResetRequest.md) -- [DebugValue](../msg_docs/DebugValue.md) -- [GimbalDeviceSetAttitude](../msg_docs/GimbalDeviceSetAttitude.md) -- [VehicleAngularAccelerationSetpoint](../msg_docs/VehicleAngularAccelerationSetpoint.md) -- [VehicleAcceleration](../msg_docs/VehicleAcceleration.md) -- [DebugVect](../msg_docs/DebugVect.md) -- [ManualControlSwitches](../msg_docs/ManualControlSwitches.md) -- [SensorGyro](../msg_docs/SensorGyro.md) -- [PositionSetpoint](../msg_docs/PositionSetpoint.md) +- [GimbalManagerInformation](../msg_docs/GimbalManagerInformation.md) - [VehicleOpticalFlow](../msg_docs/VehicleOpticalFlow.md) -- [FigureEightStatus](../msg_docs/FigureEightStatus.md) -- [EstimatorAidSource1d](../msg_docs/EstimatorAidSource1d.md) -- [QshellRetval](../msg_docs/QshellRetval.md) -- [FuelTankStatus](../msg_docs/FuelTankStatus.md) -- [YawEstimatorStatus](../msg_docs/YawEstimatorStatus.md) -- [SensorGnssStatus](../msg_docs/SensorGnssStatus.md) -- [IridiumsbdStatus](../msg_docs/IridiumsbdStatus.md) -- [EscStatus](../msg_docs/EscStatus.md) -- [AutotuneAttitudeControlStatus](../msg_docs/AutotuneAttitudeControlStatus.md) -- [VehicleImuStatus](../msg_docs/VehicleImuStatus.md) -- [EstimatorSelectorStatus](../msg_docs/EstimatorSelectorStatus.md) -- [SensorTemp](../msg_docs/SensorTemp.md) -- [EstimatorEventFlags](../msg_docs/EstimatorEventFlags.md) -- [AirspeedValidatedV0](../msg_docs/AirspeedValidatedV0.md) -- [EventV0](../msg_docs/EventV0.md) -- [OpenDroneIdSystem](../msg_docs/OpenDroneIdSystem.md) -- [FailureDetectorStatus](../msg_docs/FailureDetectorStatus.md) -- [PowerMonitor](../msg_docs/PowerMonitor.md) -- [Airspeed](../msg_docs/Airspeed.md) -- [RtlTimeEstimate](../msg_docs/RtlTimeEstimate.md) -- [OrbitStatus](../msg_docs/OrbitStatus.md) -- [OrbTest](../msg_docs/OrbTest.md) -- [GimbalManagerSetAttitude](../msg_docs/GimbalManagerSetAttitude.md) -- [SensorBaro](../msg_docs/SensorBaro.md) -- [TuneControl](../msg_docs/TuneControl.md) -- [HoverThrustEstimate](../msg_docs/HoverThrustEstimate.md) -- [UavcanParameterRequest](../msg_docs/UavcanParameterRequest.md) -- [DatamanRequest](../msg_docs/DatamanRequest.md) -- [NormalizedUnsignedSetpoint](../msg_docs/NormalizedUnsignedSetpoint.md) -- [InputRc](../msg_docs/InputRc.md) -- [OpenDroneIdSelfId](../msg_docs/OpenDroneIdSelfId.md) -- [ControlAllocatorStatus](../msg_docs/ControlAllocatorStatus.md) -- [MountOrientation](../msg_docs/MountOrientation.md) -- [RaptorStatus](../msg_docs/RaptorStatus.md) -- [LandingTargetInnovations](../msg_docs/LandingTargetInnovations.md) -- [ParameterUpdate](../msg_docs/ParameterUpdate.md) -- [VehicleAngularVelocity](../msg_docs/VehicleAngularVelocity.md) -- [ArmingCheckRequestV0](../msg_docs/ArmingCheckRequestV0.md) -- [GimbalDeviceInformation](../msg_docs/GimbalDeviceInformation.md) -- [VehicleGlobalPositionV0](../msg_docs/VehicleGlobalPositionV0.md) -- [IrlockReport](../msg_docs/IrlockReport.md) -- [FixedWingRunwayControl](../msg_docs/FixedWingRunwayControl.md) -- [DebugKeyValue](../msg_docs/DebugKeyValue.md) -- [NavigatorStatus](../msg_docs/NavigatorStatus.md) -- [LaunchDetectionStatus](../msg_docs/LaunchDetectionStatus.md) -- [FixedWingLateralStatus](../msg_docs/FixedWingLateralStatus.md) -- [ActuatorTest](../msg_docs/ActuatorTest.md) -- [GainCompression](../msg_docs/GainCompression.md) -- [Event](../msg_docs/Event.md) -- [ActuatorServosTrim](../msg_docs/ActuatorServosTrim.md) -- [HomePositionV0](../msg_docs/HomePositionV0.md) -- [EstimatorSensorBias](../msg_docs/EstimatorSensorBias.md) -- [ParameterSetValueRequest](../msg_docs/ParameterSetValueRequest.md) - [Px4ioStatus](../msg_docs/Px4ioStatus.md) -- [GpioIn](../msg_docs/GpioIn.md) -- [EstimatorBias3d](../msg_docs/EstimatorBias3d.md) +- [GpsDump](../msg_docs/GpsDump.md) +- [ActuatorArmed](../msg_docs/ActuatorArmed.md) +- [ActionRequest](../msg_docs/ActionRequest.md) +- [MountOrientation](../msg_docs/MountOrientation.md) +- [ParameterSetValueResponse](../msg_docs/ParameterSetValueResponse.md) +- [InternalCombustionEngineControl](../msg_docs/InternalCombustionEngineControl.md) +- [RoverRateStatus](../msg_docs/RoverRateStatus.md) ::: diff --git a/docs/en/middleware/micrortps.md b/docs/en/middleware/micrortps.md index 47d08fd85e..2756225261 100644 --- a/docs/en/middleware/micrortps.md +++ b/docs/en/middleware/micrortps.md @@ -3,4 +3,4 @@ [uXRCE-DDS (PX4-ROS 2/DDS Bridge)](../middleware/uxrce_dds.md) has replaced the _Fast-RTPS Bridge_. -If you're working in PX4 v1.13 or earlier see: [Fast-RTPS Bridge](https://docs.px4.io/v1.13/en/middleware/micrortps.html#rtps-dds-interface-px4-fast-rtps-dds-bridge) +If you're working in PX4 v1.13 or earlier see: [Fast-RTPS Bridge](https://docs.px4.io/v1.13/en/middleware/micrortps#rtps-dds-interface-px4-fast-rtps-dds-bridge) diff --git a/docs/en/middleware/uorb.md b/docs/en/middleware/uorb.md index 401f3329b8..3c8e78e010 100644 --- a/docs/en/middleware/uorb.md +++ b/docs/en/middleware/uorb.md @@ -145,8 +145,8 @@ Versioned messages include an additional field `uint32 MESSAGE_VERSION = x`, whe Versioned and non-versioned messages are separated in the file system: - Non-versioned topic message files and [server service](../ros2/user_guide.md#px4-ros-2-service-servers) message files remain in the [`msg/`](https://github.com/PX4/PX4-Autopilot/tree/main/msg) and [`srv/`](https://github.com/PX4/PX4-Autopilot/tree/main/srv) directories, respectively. -- The current (highest) version of message files are located in the `versioned` subfolders ([`msg/versioned`](https://github.com/PX4/PX4-Autopilot/tree/main/msg/versioned) and [`srv/versioned`](https://github.com/PX4/PX4-Autopilot/tree/main/srv/versioned)). -- Older versions of messages are stored in nested `msg/px4_msgs_old/` subfolders ([`msg/px4_msgs_old/msg/`](https://github.com/PX4/PX4-Autopilot/tree/main/msg/px4_msgs_old/msg) and [`msg/px4_msgs_old/srv/`](https://github.com/PX4/PX4-Autopilot/tree/main/msg/px4_msgs_old/srv)). +- The current (highest) version of message files are located in the `versioned` subfolders ([`msg/versioned`](https://github.com/PX4/PX4-Autopilot/tree/main/msg/versioned) and [`srv/versioned`](https://github.com/PX4/PX4-Autopilot/tree/main/msg/versioned)). +- Older versions of messages are stored in nested `msg/px4_msgs_old/` subfolders ([`msg/px4_msgs_old/msg/`](https://github.com/PX4/PX4-Autopilot/tree/main/msg/px4_msgs_old/msg) and [`msg/px4_msgs_old/srv/`](https://github.com/PX4/PX4-Autopilot/tree/main/msg/px4_msgs_old)). The files are also renamed with a suffix to indicate their version number. ::: tip @@ -163,7 +163,7 @@ For the full list of versioned and non-versioned messages see: [uORB Message Ref For more on PX4 and ROS 2 communication, see [PX4-ROS 2 Bridge](../ros/ros2_comm.md). ::: info -ROS 2 plans to natively support message versioning in the future, but this is not implememented yet. +ROS 2 plans to natively support message versioning in the future, but this is not implemented yet. See the related ROS Enhancement Proposal ([REP 2011](https://github.com/ros-infrastructure/rep/pull/358)). See also this [Foxglove post](https://foxglove.dev/blog/sending-ros2-message-types-over-the-wire) on message hashing and type fetching. ::: diff --git a/docs/en/middleware/uxrce_dds.md b/docs/en/middleware/uxrce_dds.md index 806fe0f479..d00e0cf928 100644 --- a/docs/en/middleware/uxrce_dds.md +++ b/docs/en/middleware/uxrce_dds.md @@ -3,7 +3,7 @@ ::: info -uXRCE-DDS replaces the [Fast-RTPS Bridge](https://docs.px4.io/v1.13/en/middleware/micrortps.html#rtps-dds-interface-px4-fast-rtps-dds-bridge) used in PX4 v1.13. +uXRCE-DDS replaces the [Fast-RTPS Bridge](https://docs.px4.io/v1.13/en/middleware/micrortps#rtps-dds-interface-px4-fast-rtps-dds-bridge) used in PX4 v1.13. If you were using the Fast-RTPS Bridge, please follow the [migration guidelines](#fast-rtps-to-uxrce-dds-migration-guidelines). ::: @@ -32,9 +32,14 @@ The agent itself has no dependency on client-side code and can be built and/or i Code that wants to subscribe/publish to PX4 does have a dependency on client-side code; it requires uORB message definitions that match those used to create the PX4 uXRCE-DDS client so that it can interpret the messages. +- For _versioned_ PX4 messages, the [PX4 ROS 2 Message Transition Node](../ros2/px4_ros2_msg_translation_node.md) handles compatibility automatically. + This node acts as an agent-side translator, allowing your code to interact with PX4 without requiring strict, manual message synchronization. +- For unversioned messages, code that needs to publish to PX4 maintains a direct dependency on client-side definitions. + In these cases, you must ensure your local uORB message definitions exactly match those used to create the PX4 uXRCE-DDS client, so that the messages can be correctly interpreted. + ## Code Generation -The PX4 [uxrce_dds_client](../modules/modules_system.md#uxrce-dds-client) is generated at build time and included in PX4 firmare by default. +The PX4 [uxrce_dds_client](../modules/modules_system.md#uxrce-dds-client) is generated at build time and included in PX4 firmware by default. The agent has no dependency on client code. It can be built standalone or in a ROS 2 workspace, or installed as a snap package on Ubuntu. @@ -324,7 +329,7 @@ The configuration can be done using the [UXRCE-DDS parameters](../advanced_confi - [UXRCE_DDS_NS_IDX](../advanced_config/parameter_reference.md#UXRCE_DDS_NS_IDX) : Index-based namespace definition. Setting this parameter to any value other than `-1` creates a namespace with the prefix `uav_` and the specified value, e.g. `uav_0`, `uav_1`, etc. See [namespace](#customizing-the-namespace) for methods to define richer or arbitrary namespaces. - - [`UXRCE_DDS_FLCTRL`](../advanced_config/parameter_reference.md#UXRCE_DDS_FLCTRL) : Serial port hardware flow control enable. + - [`UXRCE_DDS_FLCTRL`](../advanced_config/parameter_reference.md#UXRCE_DDS_FLCTRL) : Serial port hardware flow control enable. To use hardware flow control, a custom MicroXRCE Agent needs to be adopted. Please refer to [this PR](https://github.com/eProsima/Micro-XRCE-DDS-Agent/pull/407) for the required changes, cherry-pick them on top of the [agent version](#build-run-within-ros-2-workspace) you need to use and then run the agent with the additional `--flow-control` option. ::: info @@ -385,11 +390,14 @@ Therefore, - If you're using a main or release version of PX4 you can get the message definitions by cloning the interface package [PX4/px4_msgs](https://github.com/PX4/px4_msgs) into your workspace. - If you're creating or modifying uORB messages you must manually update the messages in your workspace from your PX4 source tree. Generally this means that you would update [dds_topics.yaml](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/uxrce_dds_client/dds_topics.yaml), clone the interface package, and then manually synchronize it by copying the new/modified message definitions from [PX4-Autopilot/msg](https://github.com/PX4/PX4-Autopilot/tree/main/msg) to its `msg` folders. - Assuming that PX4-Autopilot is in your home directory `~`, while `px4_msgs` is in `~/px4_ros_com/src/`, then the command might be: + Assuming that PX4-Autopilot is in your home directory `~`, while `px4_msgs` is in `~/ros2_px4_ws/src/`, then the command might be: ```sh - rm ~/px4_ros_com/src/px4_msgs/msg/*.msg - cp ~/PX4-Autopilot/msg/*.msg ~/px4_ros_com/src/px4_msgs/msg/ + rm ~/ros2_px4_ws/src/px4_msgs/msg/*.msg + rm ~/ros2_px4_ws/src/px4_msgs/srv/*.srv + cp ~/PX4-Autopilot/msg/*.msg ~/ros2_px4_ws/src/px4_msgs/msg/ + cp ~/PX4-Autopilot/msg/versioned/*.msg ~/ros2_px4_ws/src/px4_msgs/msg/ + cp ~/PX4-Autopilot/srv/*.msg ~/ros2_px4_ws/src/px4_msgs/srv/ ``` ::: info @@ -522,10 +530,10 @@ subscriptions: subscriptions_multi: - - topic: /fmu/in/vehicle_optical_flow_vel - type: px4_msgs::msg::VehicleOpticalFlowVel - - ... + - topic: /fmu/in/aux_global_position + type: px4_msgs::msg::AuxGlobalPosition + route_field: id # OPTIONAL: field used to demux into instances + max_instances: 4 # Required when route_field is set ``` @@ -542,31 +550,42 @@ Each (`topic`,`type`) pairs defines: 4. The message type (`VehicleOdometry`, `VehicleStatus`, `OffboardControlMode`, etc.) and the ROS 2 package (`px4_msgs`) that is expected to provide the message definition. 5. **(Optional)**: An additional `rate_limit` field (only for publication entries), which specifies the maximum rate (Hz) at which messages will be published on this topic by PX4 to ROS 2. If left unspecified, the maximum publication rate limit is set to 100 Hz. -6. **(Optional)**: An additional `instance` field (only for publication entries), which lets you select which instance of a [multi-instance topic](./uorb.md#multi-instance) you want to be published to ROS 2. +6. **(Optional)**: An additional `instance` field (only for publication entries), which lets you select which instance of a [multi-instance topic](./uorb.md#multi-instance) you want to be published to ROS 2. If provided, this option changes the ROS 2 topic name of the advertised uORB topic appending the instance number: `fmu/out/[uorb topic name][instance]` (plus eventual namespace and message version). In the example above the final topic name would be `/fmu/out/vehicle_imu1`. -`subscriptions` and `subscriptions_multi` allow us to choose the uORB topic instance that ROS 2 topics are routed to: either a shared instance that may also be getting updates from internal PX4 uORB publishers, or a separate instance that is reserved for ROS2 publications, respectively. +`subscriptions` and `subscriptions_multi` allow us to choose the uORB topic instance that ROS 2 topics are routed to: either a shared instance that may also be getting updates from internal PX4 uORB publishers, or a separate instance that is reserved for ROS 2 publications, respectively. Without this mechanism all ROS 2 messages would be routed to the _same_ uORB topic instance (because ROS 2 does not have the concept of [multiple topic instances](../middleware/uorb.md#multi-instance)), and it would not be possible for PX4 subscribers to differentiate between streams from ROS 2 or PX4 publishers. Add a topic to the `subscriptions` section to: -- Create a unidirectional route going from the ROS2 topic to the _default_ instance (instance 0) of the associated uORB topic. - For example, it creates a ROS2 subscriber of `/fmu/in/vehicle_odometry` and a uORB publisher of `vehicle_odometry`. -- If other (internal) PX4 modules are already publishing on the same uORB topic instance as the ROS2 publisher, the instance's subscribers will receive all streams of messages. - The uORB subscriber will not be able to determine if an incoming message was published by PX4 or by ROS2. -- This is the desired behavior when the ROS2 publisher is expected to be the sole publisher on the topic instance (for example, replacing an internal publisher to the topic during offboard control), or when the source of multiple publishing streams does not matter. +- Create a unidirectional route going from the ROS 2 topic to the _default_ instance (instance 0) of the associated uORB topic. + For example, it creates a ROS 2 subscriber of `/fmu/in/vehicle_odometry` and a uORB publisher of `vehicle_odometry`. +- If other (internal) PX4 modules are already publishing on the same uORB topic instance as the ROS 2 publisher, the instance's subscribers will receive all streams of messages. + The uORB subscriber will not be able to determine if an incoming message was published by PX4 or by ROS 2. +- This is the desired behavior when the ROS 2 publisher is expected to be the sole publisher on the topic instance (for example, replacing an internal publisher to the topic during offboard control), or when the source of multiple publishing streams does not matter. Add a topic to the `subscriptions_multi` section to: -- Create a unidirectional route going from the ROS2 topic to a _new_ instance of the associated uORB topic. - For example, if `vehicle_odometry` has already `2` instances, it creates a ROS2 subscriber of `/fmu/in/vehicle_odometry` and a uORB publisher on instance `3` of `vehicle_odometry`. +- Create a unidirectional route going from the ROS 2 topic to a _new_ instance of the associated uORB topic. + For example, if `vehicle_odometry` has already `2` instances, it creates a ROS 2 subscriber of `/fmu/in/vehicle_odometry` and a uORB publisher on instance `3` of `vehicle_odometry`. - This ensures that no other internal PX4 module will publish on the same instance used by uXRCE-DDS. The subscribers will be able to subscribe to the desired instance and distinguish between publishers. -- Note, however, that this guarantees separation between PX4 and ROS2 publishers, not among multiple ROS2 publishers. - In that scenario, their messages will still be routed to the same instance. +- Without `route_field`, this guarantees separation between PX4 and ROS 2 publishers, but not among multiple ROS 2 publishers. In that scenario, their messages will still be routed to the same instance. - This is the desired behavior, for example, when you want PX4 to log the readings of two equal sensors; they will both publish on the same topic, but one will use instance 0 and the other will use instance 1. + Optionally, add `route_field` and `max_instances` to demultiplex a single ROS 2 topic into multiple uORB instances based on a message field value: + +- Each unique value of `route_field` is dynamically assigned to a separate uORB instance on first arrival, up to `max_instances`. + For example, a single `/fmu/in/aux_global_position` ROS 2 topic can be demultiplexed to up to 4 separate uORB instances of `aux_global_position`, with each unique `id` value mapped to its own instance. +- This allows multiple ROS 2 publishers to share a single DDS topic while PX4 subscribers can distinguish between them by subscribing to different uORB instances. +- `route_field` must be a field present in the message definition. `max_instances` is required when `route_field` is set and limits how many distinct sources can be demultiplexed simultaneously. + +::: warning +The `subscriptions_multi` feature with `route_field` is currently only implemented in the uXRCE-DDS client. +The Zenoh bridge module does not yet support demux routing — topics listed under `subscriptions_multi` in `dds_topics.yaml` will be ignored by the Zenoh bridge. +::: + You can arbitrarily change the configuration. For example, you could use different default namespaces or use a custom package to store the message definitions. @@ -584,7 +603,7 @@ For a list of services, details and examples see the [service documentation](../ ## Fast-RTPS to uXRCE-DDS Migration Guidelines These guidelines explain how to migrate from using PX4 v1.13 [Fast-RTPS](../middleware/micrortps.md) middleware to PX4 v1.14 `uXRCE-DDS` middleware. -These are useful if you have [ROS 2 applications written for PX4 v1.13](https://docs.px4.io/v1.13/en/ros/ros2_comm.html), or you have used Fast-RTPS to interface your applications to PX4 [directly](https://docs.px4.io/v1.13/en/middleware/micrortps.html#agent-in-an-offboard-fast-dds-interface-ros-independent). +These are useful if you have [ROS 2 applications written for PX4 v1.13](https://docs.px4.io/v1.13/en/ros/ros2_comm), or you have used Fast-RTPS to interface your applications to PX4 [directly](https://docs.px4.io/v1.13/en/middleware/micrortps#agent-in-an-offboard-fast-dds-interface-ros-independent). ::: info This section contains migration-specific information. @@ -593,7 +612,7 @@ You should also read the rest of this page to properly understand uXRCE-DDS. #### Dependencies do not need to be removed -uXRCE-DDS does not need the dependencies that were required for Fast-RTPS, such as those installed by following the topic [Fast DDS Installation](https://docs.px4.io/v1.13/en/dev_setup/fast-dds-installation.html). +uXRCE-DDS does not need the dependencies that were required for Fast-RTPS, such as those installed by following the topic [Fast DDS Installation](https://docs.px4.io/v1.13/en/dev_setup/fast-dds-installation). You can keep them if you want, without affecting your uXRCE-DDS applications. If you do choose to remove the dependencies, take care not to remove anything that is used by applications (for example, Java). @@ -646,7 +665,7 @@ There are many ways to install it on your PC / companion computer - for more inf #### Application-Specific Changes -If you where not using ROS 2 alongside the agent ([Fast DDS Interface ROS-Independent](https://docs.px4.io/v1.13/en/middleware/micrortps.html#agent-in-an-offboard-fast-dds-interface-ros-independent)), then you need to migrate to [eProsima Fast DDS](https://fast-dds.docs.eprosima.com/en/latest/index.html). +If you where not using ROS 2 alongside the agent ([Fast DDS Interface ROS-Independent](https://docs.px4.io/v1.13/en/middleware/micrortps#agent-in-an-offboard-fast-dds-interface-ros-independent)), then you need to migrate to [eProsima Fast DDS](https://fast-dds.docs.eprosima.com/en/latest/index.html). ROS 2 applications still need to compile alongside the PX4 messages, which you do by adding the [px4_msgs](https://github.com/PX4/px4_msgs) package to your workspace. You can remove the [px4_ros_com](https://github.com/PX4/px4_ros_com) package as it is no longer needed, other than for example code. diff --git a/docs/en/middleware/zenoh.md b/docs/en/middleware/zenoh.md index bfee1e79f1..75aa52b749 100644 --- a/docs/en/middleware/zenoh.md +++ b/docs/en/middleware/zenoh.md @@ -1,6 +1,6 @@ # Zenoh (PX4 ROS 2 rmw_zenoh) - + :::warning Experimental At the time of writing, PX4 Zenoh-pico is experimental, and hence subject to change. @@ -48,13 +48,18 @@ ros2 run rmw_zenoh_cpp rmw_zenohd For more information about the Zenoh Router see the [rmw_zenoh](https://github.com/ros2/rmw_zenoh?tab=readme-ov-file#start-the-zenoh-router) documentation. +::: note +From ROS 2 Jazzy onward, `rmw_zenoh` topic key expressions include the message type hash (RIHS01, as defined in REP-2016). This prevents interoperability with ROS 2 Humble and earlier. +For more information about key expressions, refer to the [rmw_zenoh design documentation](https://github.com/ros2/rmw_zenoh/blob/jazzy/docs/design.md#topic-and-service-name-mapping-to-zenoh-key-expressions). +::: + ## PX4 Zenoh-Pico Node Setup ### PX4 Firmware Before setting up the Zenoh communication, first make sure that your firmware contains the driver that implements the [`zenoh` driver](../modules/modules_driver.md#zenoh), which provides the implementation of the _PX4 Zenoh-Pico Node_. -You can check if the module is present on your board by searching for the key `CONFIG_MODULES_ZENOH=y` in your board's `default.px4board` KConfig file. +You can check if the module is present on your board by searching for the key `CONFIG_MODULES_ZENOH=y` in your board's `default.px4board` [KConfig file](../hardware/porting_guide_config.md). For example, you can see that the module is present in `px4_fmu-v6xrt` build targets from [/boards/px4/fmu-v6xrt/default.px4board](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/fmu-v6xrt/default.px4board#L91). If `CONFIG_MODULES_ZENOH=y` is not preset you can add this key to your board configuration and rebuild. @@ -78,6 +83,17 @@ You can check if Zenoh is present at runtime by using QGroundControl to [find th If present, the module is installed. ::: +::: warning +Interoperability with ROS 2 Humble and earlier requires setting `CONFIG_ZENOH_KEY_TYPE_HASH=n` to disable the +inclusion of the message type hash (RIHS01, as defined in REP-2016) in the Zenoh key expression. +Note that this will break compatibility with ROS 2 Jazzy and later. +::: + +::: tip +Per-publisher option overrides can be enabled or disabled at compile time using the `CONFIG_ZENOH_PUB_OPTION_OVERRIDE` KConfig key. +When this is disabled, PX4 uses only global publisher option parameters, and per-publisher CLI/config overrides are not available. +::: + ### Enable Zenoh on PX4 Startup Set the [ZENOH_ENABLE](../advanced_config/parameter_reference.md#ZENOH_ENABLE) parameter to `1` to enable Zenoh on PX4 startup. @@ -93,7 +109,7 @@ If you're using a different IP for the Zenoh daemon, run the following command ( zenoh config net client tcp/10.41.10.1:7447#iface=eth0 ``` -Note that for the simulation target with Zeroh (`px4_sitl_zenoh`) you won't need to make any changes because the default IP address of the Zenoh daemon is set to `localhost`. +Note that for the simulation target with Zenoh (`px4_sitl_zenoh`) you won't need to make any changes because the default IP address of the Zenoh daemon is set to `localhost`. :::warning Any changes to the network configuration require a PX4 system reboot to take effect. @@ -121,6 +137,21 @@ This folder contains three key files: - **`pub.csv`** – Maps **uORB topics to ROS2 topics** (used for publishing). - **`sub.csv`** – Maps **ROS2 topics to uORB topics** (used for subscribing). +#### Publisher Options + +Zenoh publisher behaviour can be controlled through global PX4 parameters: + +- [ZENOH_PUB_CC](../advanced_config/parameter_reference.md#ZENOH_PUB_CC): congestion control (`Drop` or `Block`) - controls what happens when the transport path is congested. `Drop` prefers freshness/latency and may drop messages, while `Block` preserves delivery by applying backpressure to the publisher. +- [ZENOH_PUB_REL](../advanced_config/parameter_reference.md#ZENOH_PUB_REL): reliability (`Reliable` or `BestEffort`) - selects the Zenoh reliability mode used by the router path and seen by the underlying ROS 2 `rmw_zenoh` transport. +- [ZENOH_PUB_EXPR](../advanced_config/parameter_reference.md#ZENOH_PUB_EXPR): express mode (`Disabled` or `Enabled`) - when enabled, Zenoh does not wait to batch this operation with others. This usually reduces latency at the cost of higher bandwidth/overhead. +- [ZENOH_PUB_PRIO](../advanced_config/parameter_reference.md#ZENOH_PUB_PRIO): priority (`RealTime`, `InteractiveHigh`, `InteractiveLow`, `DataHigh`, `Data`, `DataLow`, `Background`) - sets relative message priority for routing/scheduling under load. + +These are applied to all Zenoh publishers. + +If `CONFIG_ZENOH_PUB_OPTION_OVERRIDE=y`, individual publishers can override one or more global publisher options. +Default configuration [dds_topics.yaml](../middleware/dds_topics.md) already provides overrides for several publishers. +Individual publisher options can be overriden through the mapping configuration shown in the next section + ### 4. Modifying Topic Mappings Zenoh topic mappings define how data flows between PX4's internal uORB topics and external ROS2 topics via Zenoh. @@ -143,6 +174,24 @@ The main operations and their commands are: zenoh config add publisher [uorb_instance] ``` + When `CONFIG_ZENOH_PUB_OPTION_OVERRIDE=y`, publisher options can also be passed: + + ```sh + zenoh config add publisher [uorb_instance] [options] + ``` + + Options are comma-separated `key=value` pairs: + - `cc=drop|block` (congestion control) + - `express=true|false` (batching behaviour) + - `prio=real_time|interactive_high|interactive_low|data_high|data|data_low|background` (priority) + - `rel=reliable|best_effort` (reliability) + + Example: + + ```sh + zenoh config add publisher /fmu/out/vehicle_status vehicle_status 0 "cc=block,express=true,rel=best_effort" + ``` + - Subscribe to a Zenoh topic and forward it to a uORB topic: ```sh @@ -198,3 +247,7 @@ Subscription count: 0 The [PX4 ROS 2 Interface Library](../ros2/px4_ros2_interface_lib.md) works out of the box with Zenoh as a transport backend. This means you can publish and subscribe to PX4 topics over Zenoh without changing your ROS 2 nodes or dealing with DDS configuration. For setup details and supported message types, refer to the [PX4 ROS 2 Interface Library](../ros2/px4_ros2_interface_lib.md). + +::: info +The PX4 ROS 2 Interface Library is not compatible with ROS 2 Humble and earlier, as it requires the message type hash (RIHS01, as defined in REP-2016) to be included in the Zenoh key expression. +::: diff --git a/docs/en/modules/hello_sky.md b/docs/en/modules/hello_sky.md index 86aa6bd6e9..31dbbfc6e4 100644 --- a/docs/en/modules/hello_sky.md +++ b/docs/en/modules/hello_sky.md @@ -12,13 +12,15 @@ These are covered in [Application/Module Template](../modules/module_template.md You will require the following: -- [PX4 SITL Simulator](../simulation/index.md) _or_ a [PX4-compatible flight controller](../flight_controller/index.md). +- [Gazebo Simulator](../sim_gazebo_gz/index.md) (or another [PX4 SITL Simulator](../simulation/index.md)) _or_ a [PX4-compatible flight controller](../flight_controller/index.md). - [PX4 Development Toolchain](../dev_setup/dev_env.md) for the desired target. - [Download the PX4 Source Code](../dev_setup/building_px4.md#download-the-px4-source-code) from Github The source code [PX4-Autopilot/src/examples/px4_simple_app](https://github.com/PX4/PX4-Autopilot/tree/main/src/examples/px4_simple_app) directory contains a completed version of this tutorial that you can review if you get stuck. -- Rename (or delete) the **px4_simple_app** directory. +::: tip +Rename (or delete) the **px4_simple_app** directory. +::: ## Minimal Application @@ -26,14 +28,14 @@ In this section we create a _minimal application_ that just prints out `Hello Sk This consists of a single _C_ file and a _cmake_ definition (which tells the toolchain how to build the application). 1. Create a new directory **PX4-Autopilot/src/examples/px4_simple_app**. -1. Create a new C file in that directory named **px4_simple_app.c**: +2. Create a new C file in that directory named **px4_simple_app.c**: - Copy in the default header to the top of the page. This should be present in all contributed files! ```c /**************************************************************************** * - * Copyright (c) 2012-2022 PX4 Development Team. All rights reserved. + * Copyright (c) 2012-2026 PX4 Development Team. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -66,7 +68,7 @@ This consists of a single _C_ file and a _cmake_ definition (which tells the too ``` - Copy the following code below the default header. - This should be present in all contributed files! + Similar code should be present in all contributed files! ```c /** @@ -101,7 +103,7 @@ This consists of a single _C_ file and a _cmake_ definition (which tells the too ::: -1. Create and open a new _cmake_ definition file named **CMakeLists.txt**. +3. Create and open a new _cmake_ definition file named **CMakeLists.txt**. Copy in the text below: ```cmake @@ -147,6 +149,9 @@ This consists of a single _C_ file and a _cmake_ definition (which tells the too ) ``` + Note that in your own modules you'd use the current copyright year! + We're using `2015` here to match the example. + The `px4_add_module()` method builds a static library from a module description. - The `MODULE` block is the Firmware-unique name of the module (by convention the module name is prefixed by parent directories back to `src`). - The `MAIN` block lists the entry point of the module, which registers the command with NuttX so that it can be called from the PX4 shell or SITL console. @@ -161,10 +166,10 @@ This consists of a single _C_ file and a _cmake_ definition (which tells the too You can then run your command by loading the file at runtime using the `dyn` command: `dyn ./examples__px4_simple_app.px4mod` ::: -1. Create and open a new _Kconfig_ definition file named **Kconfig** and define your symbol for naming (see [Kconfig naming convention](../hardware/porting_guide_config.md#px4-kconfig-symbol-naming-convention)). +4. Create and open a new _Kconfig_ definition file named **Kconfig** and define your symbol for naming (see [Kconfig naming convention](../hardware/porting_guide_config.md#px4-kconfig-symbol-naming-convention)). Copy in the text below: - ```text + ```txt menuconfig EXAMPLES_PX4_SIMPLE_APP bool "px4_simple_app" default n @@ -179,27 +184,34 @@ In order to run it you first need to make sure that it is built as part of PX4. Applications are added to the build/firmware in the appropriate board-level _px4board_ file for your target: - PX4 SITL (Simulator): [PX4-Autopilot/boards/px4/sitl/default.px4board](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/sitl/default.px4board) -- Pixhawk v1/2: [PX4-Autopilot/boards/px4/fmu-v2/default.px4board](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/fmu-v2/default.px4board) -- Pixracer (px4/fmu-v4): [PX4-Autopilot/boards/px4/fmu-v4/default.px4board](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/fmu-v4/default.px4board) +- Pixhawk 6X (px4/fmu-v6x): [PX4-Autopilot/boards/px4/fmu-v6x/default.px4board](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/fmu-v6x/default.px4board) - _px4board_ files for other boards can be found in [PX4-Autopilot/boards/](https://github.com/PX4/PX4-Autopilot/tree/main/boards) -To enable the compilation of the application into the firmware add the corresponding Kconfig key `CONFIG_EXAMPLES_PX4_SIMPLE_APP=y` in the _px4board_ file or run [boardconfig](../hardware/porting_guide_config.md#px4-menuconfig-setup) `make px4_fmu-v4_default boardconfig`: +To enable the compilation of the application into the firmware add the corresponding Kconfig key `CONFIG_EXAMPLES_PX4_SIMPLE_APP=y` in the _px4board_ file or run [boardconfig](../hardware/porting_guide_config.md#px4-menuconfig-setup). +For example, to edit the board config for FMUv6x you would do: + +```sh +make fmu-v6x_default boardconfig ``` + +And then enable the app in the _boardconfig_ UI as shown: + +```txt examples ---> [x] PX4 Simple app ---- ``` ::: info -The line will already be present for most files, because the examples are included in firmware by default. +Examples are opt-in and not included in firmware by default (although they are in SITL). +You must explicitly enable them as shown above. ::: Build the example using the board-specific command: -- jMAVSim Simulator: `make px4_sitl_default jmavsim` -- Pixhawk v1/2: `make px4_fmu-v2_default` (or just `make px4_fmu-v2`) -- Pixhawk v3: `make px4_fmu-v4_default` -- Other boards: [Building the Code](../dev_setup/building_px4.md#building-for-nuttx) +- Gazebo Simulator: `make px4_sitl gz_x500` +- Pixhawk 6X: `make px4_fmu-v6x_default` +- Other boards: [Building the Code](../dev_setup/building_px4.md) ## Test App (Hardware) @@ -207,8 +219,7 @@ Build the example using the board-specific command: Enable the uploader and then reset the board: -- Pixhawk v1/2: `make px4_fmu-v2_default upload` -- Pixhawk v3: `make px4_fmu-v4_default upload` +- Pixhawk 6X: `make px4_fmu-v6x_default upload` It should print before you reset the board a number of compile messages and at the end: @@ -293,14 +304,14 @@ The benefits of the PX4 hardware abstraction comes into play here! There is no need to interact in any way with sensor drivers and no need to update your app if the board or sensors are updated. ::: -Individual message channels between applications are called [topics](../middleware/uorb.md). For this tutorial, we are interested in the [SensorCombined](https://github.com/PX4/PX4-Autopilot/blob/main/msg/SensorCombined.msg) topic, which holds the synchronized sensor data of the complete system. +Individual message channels between applications are called [topics](../middleware/uorb.md). For this tutorial, we are interested in the [VehicleAcceleration](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/VehicleAcceleration.msg) topic, which holds the filtered vehicle acceleration data. Subscribing to a topic is straightforward: ```cpp -#include +#include .. -int sensor_sub_fd = orb_subscribe(ORB_ID(sensor_combined)); +int sensor_sub_fd = orb_subscribe(ORB_ID(vehicle_acceleration)); ``` The `sensor_sub_fd` is a topic handle and can be used to very efficiently perform a blocking wait for new data. @@ -311,9 +322,9 @@ Adding `poll()` to the subscription looks like (_pseudocode, look for the full i ```cpp #include -#include +#include .. -int sensor_sub_fd = orb_subscribe(ORB_ID(sensor_combined)); +int sensor_sub_fd = orb_subscribe(ORB_ID(vehicle_acceleration)); /* one could wait for multiple topics with this technique, just using one here */ px4_pollfd_struct_t fds[] = { @@ -321,26 +332,26 @@ px4_pollfd_struct_t fds[] = { }; while (true) { - /* wait for sensor update of 1 file descriptor for 1000 ms (1 second) */ - int poll_ret = px4_poll(fds, 1, 1000); - .. - if (fds[0].revents & POLLIN) { - /* obtained data for the first file descriptor */ - struct sensor_combined_s raw; - /* copy sensors raw data into local buffer */ - orb_copy(ORB_ID(sensor_combined), sensor_sub_fd, &raw); - PX4_INFO("Accelerometer:\t%8.4f\t%8.4f\t%8.4f", - (double)raw.accelerometer_m_s2[0], - (double)raw.accelerometer_m_s2[1], - (double)raw.accelerometer_m_s2[2]); - } +/* wait for sensor update of 1 file descriptor for 1000 ms (1 second) */ +int poll_ret = px4_poll(fds, 1, 1000); +.. +if (fds[0].revents & POLLIN) { + /* obtained data for the first file descriptor */ + struct vehicle_acceleration_s accel; + /* copy sensors raw data into local buffer */ + orb_copy(ORB_ID(vehicle_acceleration), sensor_sub_fd, &accel); + PX4_INFO("Accelerometer:\t%8.4f\t%8.4f\t%8.4f", + (double)accel.xyz[0], + (double)accel.xyz[1], + (double)accel.xyz[2]); +} } ``` Compile the app again by entering: ```sh -make +make px4_sitl_default ``` ### Testing the uORB Subscription @@ -399,7 +410,7 @@ The [complete example code](https://github.com/PX4/PX4-Autopilot/blob/main/src/e ```c /**************************************************************************** * - * Copyright (c) 2012-2019 PX4 Development Team. All rights reserved. + * Copyright (c) 2012-2026 PX4 Development Team. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -448,7 +459,7 @@ The [complete example code](https://github.com/PX4/PX4-Autopilot/blob/main/src/e #include #include -#include +#include #include __EXPORT int px4_simple_app_main(int argc, char *argv[]); @@ -457,8 +468,8 @@ int px4_simple_app_main(int argc, char *argv[]) { PX4_INFO("Hello Sky!"); - /* subscribe to sensor_combined topic */ - int sensor_sub_fd = orb_subscribe(ORB_ID(sensor_combined)); + /* subscribe to vehicle_acceleration topic */ + int sensor_sub_fd = orb_subscribe(ORB_ID(vehicle_acceleration)); /* limit the update rate to 5 Hz */ orb_set_interval(sensor_sub_fd, 200); @@ -499,20 +510,20 @@ int px4_simple_app_main(int argc, char *argv[]) if (fds[0].revents & POLLIN) { /* obtained data for the first file descriptor */ - struct sensor_combined_s raw; + struct vehicle_acceleration_s accel; /* copy sensors raw data into local buffer */ - orb_copy(ORB_ID(sensor_combined), sensor_sub_fd, &raw); + orb_copy(ORB_ID(vehicle_acceleration), sensor_sub_fd, &accel); PX4_INFO("Accelerometer:\t%8.4f\t%8.4f\t%8.4f", - (double)raw.accelerometer_m_s2[0], - (double)raw.accelerometer_m_s2[1], - (double)raw.accelerometer_m_s2[2]); + (double)accel.xyz[0], + (double)accel.xyz[1], + (double)accel.xyz[2]); /* set att and publish this information for other apps the following does not have any meaning, it's just an example */ - att.q[0] = raw.accelerometer_m_s2[0]; - att.q[1] = raw.accelerometer_m_s2[1]; - att.q[2] = raw.accelerometer_m_s2[2]; + att.q[0] = accel.xyz[0]; + att.q[1] = accel.xyz[1]; + att.q[2] = accel.xyz[2]; orb_publish(ORB_ID(vehicle_attitude), att_pub, &att); } @@ -524,7 +535,6 @@ int px4_simple_app_main(int argc, char *argv[]) } PX4_INFO("exiting"); - return 0; } ``` diff --git a/docs/en/modules/module_template.md b/docs/en/modules/module_template.md index 291c6ff0cf..977071b220 100644 --- a/docs/en/modules/module_template.md +++ b/docs/en/modules/module_template.md @@ -22,13 +22,15 @@ The example shows how. In summary: 1. Specify the dependency on the work queue library in the cmake definition file ([CMakeLists.txt](https://github.com/PX4/PX4-Autopilot/blob/main/src/examples/work_item/CMakeLists.txt)): - ``` + + ```txt ... DEPENDS px4_work_queue ``` -1. In addition to `ModuleBase`, the task should also derive from `ScheduledWorkItem` (included from [ScheduledWorkItem.hpp](https://github.com/PX4/PX4-Autopilot/blob/main/platforms/common/include/px4_platform_common/px4_work_queue/ScheduledWorkItem.hpp)) -1. Specify the queue to add the task to in the constructor initialisation. + +2. In addition to `ModuleBase`, the task should also derive from `ScheduledWorkItem` (included from [ScheduledWorkItem.hpp](https://github.com/PX4/PX4-Autopilot/blob/main/platforms/common/include/px4_platform_common/px4_work_queue/ScheduledWorkItem.hpp)) +3. Specify the queue to add the task to in the constructor initialisation. The [work_item](https://github.com/PX4/PX4-Autopilot/blob/main/src/examples/work_item/WorkItemExample.cpp#L42) example adds itself to the `wq_configurations::test1` work queue as shown below: ```cpp @@ -43,9 +45,11 @@ In summary: The available work queues (`wq_configurations`) are listed in [WorkQueueManager.hpp](https://github.com/PX4/PX4-Autopilot/blob/main/platforms/common/include/px4_platform_common/px4_work_queue/WorkQueueManager.hpp#L49). ::: -1. Implement the `ScheduledWorkItem::Run()` method to perform "work". -1. Implement the `task_spawn` method, specifying that the task is a work queue (using the `task_id_is_work_queue` id. -1. Schedule the work queue task using one of the scheduling methods (in the example we use `ScheduleOnInterval` from within the `init` method). +4. Implement the `ScheduledWorkItem::Run()` method to perform "work". +5. Implement the `task_spawn` method, specifying that the task is a work queue (using the `task_id_is_work_queue` id). +6. Schedule the work queue task using one of the scheduling methods. + In the example, `init()` calls `registerCallback()` on a uORB subscription so that `Run()` is triggered whenever a new `sensor_accel` message is published. + `ScheduleOnInterval` is an alternative for fixed-rate scheduling. ## Tasks @@ -61,6 +65,6 @@ The template demonstrates the following additional features/aspects that are req [startup script](../concept/system_startup.md). - Command-line argument parsing. - Documentation: the `PRINT_MODULE_*` methods serve two purposes (the API is - documented [in the source code](https://github.com/PX4/PX4-Autopilot/blob/v1.8.0/src/platforms/px4_module.h#L381)): + documented [in the source code](https://github.com/PX4/PX4-Autopilot/blob/v1.17/platforms/common/include/px4_platform_common/module.h)): - They are used to print the command-line usage when entering `module help` on the console. - They are automatically extracted via script to generate the [Modules & Commands Reference](../modules/modules_main.md) page. diff --git a/docs/en/modules/modules_command.md b/docs/en/modules/modules_command.md index 499d7f1fdb..3d24101349 100644 --- a/docs/en/modules/modules_command.md +++ b/docs/en/modules/modules_command.md @@ -342,6 +342,19 @@ mft_cfg [arguments...] , id == revision for ) ``` +## mklittlefs + +Source: [systemcmds/mklittlefs](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/mklittlefs) + +Format a device with the littlefs filesystem. + +### Usage {#mklittlefs_usage} + +``` +mklittlefs [arguments...] + Device and mount point (e.g. /dev/mtd0 /fs/flash) +``` + ## mtd Source: [systemcmds/mtd](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/mtd) @@ -440,6 +453,7 @@ param [arguments...] show Show parameter values [-a] Show all parameters (not just used) [-c] Show only changed params (unused too) + [-l] Show only locked (read-only) params [-q] quiet mode, print only param value (name needs to be exact) [] Filter by param name (wildcard at end allowed, eg. sys_*) @@ -484,6 +498,8 @@ param [arguments...] find Show index of a param param name + + lock Lock read-only params (reject future set/reset) ``` ## payload_deliverer diff --git a/docs/en/modules/modules_driver.md b/docs/en/modules/modules_driver.md index 349b98659d..3a42139fe2 100644 --- a/docs/en/modules/modules_driver.md +++ b/docs/en/modules/modules_driver.md @@ -191,28 +191,13 @@ Source: [drivers/dshot](https://github.com/PX4/PX4-Autopilot/tree/main/src/drive ### Description -This is the DShot output driver. It is similar to the fmu driver, and can be used as drop-in replacement +This is the DShot output driver. It can be used as drop-in replacement to use DShot as ESC communication protocol instead of PWM. -On startup, the module tries to occupy all available pins for DShot output. -It skips all pins already in use (e.g. by a camera trigger module). - It supports: - DShot150, DShot300, DShot600 - telemetry via separate UART and publishing as esc_status message -- sending DShot commands via CLI - -### Examples - -Permanently reverse motor 1: - -``` -dshot reverse -m 1 -dshot save -m 1 -``` - -After saving, the reversed direction will be regarded as the normal one. So to reverse again repeat the same commands. ### Usage {#dshot_usage} @@ -226,36 +211,6 @@ dshot [arguments...] values: [-x] Swap RX/TX pins - reverse Reverse motor direction - [-m ] Motor index (1-based, default=all) - - normal Normal motor direction - [-m ] Motor index (1-based, default=all) - - save Save current settings - [-m ] Motor index (1-based, default=all) - - 3d_on Enable 3D mode - [-m ] Motor index (1-based, default=all) - - 3d_off Disable 3D mode - [-m ] Motor index (1-based, default=all) - - beep1 Send Beep pattern 1 - [-m ] Motor index (1-based, default=all) - - beep2 Send Beep pattern 2 - [-m ] Motor index (1-based, default=all) - - beep3 Send Beep pattern 3 - [-m ] Motor index (1-based, default=all) - - beep4 Send Beep pattern 4 - [-m ] Motor index (1-based, default=all) - - beep5 Send Beep pattern 5 - [-m ] Motor index (1-based, default=all) - stop status print status info @@ -363,7 +318,7 @@ Source: [modules/gimbal](https://github.com/PX4/PX4-Autopilot/tree/main/src/modu Mount/gimbal Gimbal control driver. It maps several different input methods (eg. RC or MAVLink) to a configured output (eg. AUX channels or MAVLink). -Documentation how to use it is on the [gimbal_control](https://docs.px4.io/main/en/advanced/gimbal_control.html) page. +Documentation how to use it is on the [gimbal_control](../advanced/gimbal_control.md) page. ### Examples @@ -926,7 +881,7 @@ that can be accepted by most ESCs and servos. It is typically started with: ``` -pca9685_pwm_out start -a 0x40 -b 1 +pca9685_pwm_out start -X -a 0x40 -b 1 ``` ### Usage {#pca9685_pwm_out_usage} diff --git a/docs/en/modules/modules_driver_adc.md b/docs/en/modules/modules_driver_adc.md index cecdbff037..35c45464b2 100644 --- a/docs/en/modules/modules_driver_adc.md +++ b/docs/en/modules/modules_driver_adc.md @@ -1,5 +1,29 @@ # Modules Reference: Adc (Driver) +## ADS7128 + +Source: [drivers/adc/ads7128](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/adc/ads7128) + +### Usage {#ADS7128_usage} + +``` +ADS7128 [arguments...] + Commands: + start + [-I] Internal I2C bus(es) + [-X] External I2C bus(es) + [-b ] board-specific bus (default=all) (external SPI: n-th bus + (default=1)) + [-f ] bus frequency in kHz + [-q] quiet startup (no message if no device found) + [-a ] I2C address + default: 16 + + stop + + status print status info +``` + ## TLA2528 Source: [drivers/adc/tla2528](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/adc/tla2528) diff --git a/docs/en/modules/modules_driver_imu.md b/docs/en/modules/modules_driver_imu.md index 67f9a2713b..5b3563564a 100644 --- a/docs/en/modules/modules_driver_imu.md +++ b/docs/en/modules/modules_driver_imu.md @@ -130,6 +130,32 @@ adis16507 [arguments...] status print status info ``` +## adis16607 + +Source: [drivers/imu/analog_devices/adis16607](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/analog_devices/adis16607) + +### Usage {#adis16607_usage} + +``` +adis16607 [arguments...] + Commands: + start + [-s] Internal SPI bus(es) + [-S] External SPI bus(es) + [-b ] board-specific bus (default=all) (external SPI: n-th bus + (default=1)) + [-c ] chip-select pin (for internal SPI) or index (for external SPI) + [-m ] SPI mode + [-f ] bus frequency in kHz + [-q] quiet startup (no message if no device found) + [-R ] Rotation + default: 0 + + stop + + status print status info +``` + ## bmi055 Source: [drivers/imu/bosch/bmi055](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/bosch/bmi055) @@ -764,6 +790,32 @@ lsm303d [arguments...] status print status info ``` +## lsm6dsv + +Source: [drivers/imu/st/lsm6dsv](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/st/lsm6dsv) + +### Usage {#lsm6dsv_usage} + +``` +lsm6dsv [arguments...] + Commands: + start + [-s] Internal SPI bus(es) + [-S] External SPI bus(es) + [-b ] board-specific bus (default=all) (external SPI: n-th bus + (default=1)) + [-c ] chip-select pin (for internal SPI) or index (for external SPI) + [-m ] SPI mode + [-f ] bus frequency in kHz + [-q] quiet startup (no message if no device found) + [-R ] Rotation + default: 0 + + stop + + status print status info +``` + ## lsm9ds1 Source: [drivers/imu/st/lsm9ds1](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/st/lsm9ds1) diff --git a/docs/en/modules/modules_driver_ins.md b/docs/en/modules/modules_driver_ins.md index 844aa645bb..cf40707586 100644 --- a/docs/en/modules/modules_driver_ins.md +++ b/docs/en/modules/modules_driver_ins.md @@ -9,7 +9,7 @@ Source: [drivers/ins/microstrain](https://github.com/PX4/PX4-Autopilot/tree/main MicroStrain by HBK Inertial Sensor Driver. Currently supports the following sensors: --[CV7-AR](https://www.hbkworld.com/en/products/transducers/inertial-sensors/vertical-reference-units--vru-/3dm-cv7-ar) -[CV7-AHRS](https://www.hbkworld.com/en/products/transducers/inertial-sensors/attitude-and-heading-reference-systems--ahrs-/3dm-cv7-ahrs) -[CV7-INS](https://www.hbkworld.com/en/products/transducers/inertial-sensors/inertial-navigation-systems--ins-/3dm-cv7-ins) -[CV7-GNSS/INS](https://www.hbkworld.com/en/products/transducers/inertial-sensors/inertial-navigation-systems--ins-/3dm-cv7-gnss-ins) +-[CV7-AR](https://www.hbkworld.com/en/products/transducers/inertial-sensors/vertical-reference-units--vru-/3dm-cv7-ar) -[CV7-AHRS](https://www.hbkworld.com/en/products/transducers/inertial-sensors/attitude-and-heading-reference-systems--ahrs-/3dm-cv7-ahrs) -[CV7-INS](https://www.hbkworld.com/en/products/transducers/inertial-sensors/navigation/3dm-cv7-ins) -[CV7-GNSS/INS](https://www.hbkworld.com/en/products/transducers/inertial-sensors/navigation/3dm-cv7-gnss-ins) This driver is not included in the firmware by default. Include the module in firmware by setting the diff --git a/docs/en/modules/modules_estimator.md b/docs/en/modules/modules_estimator.md index 8186889dd4..60af0e8c65 100644 --- a/docs/en/modules/modules_estimator.md +++ b/docs/en/modules/modules_estimator.md @@ -54,7 +54,7 @@ Source: [modules/ekf2](https://github.com/PX4/PX4-Autopilot/tree/main/src/module Attitude and position estimator using an Extended Kalman Filter. It is used for Multirotors and Fixed-Wing. -The documentation can be found on the [ECL/EKF Overview & Tuning](https://docs.px4.io/main/en/advanced_config/tuning_the_ecl_ekf.html) page. +The documentation can be found on the [ECL/EKF Overview & Tuning](../advanced_config/tuning_the_ecl_ekf.md) page. ekf2 can be started in replay mode (`-r`): in this mode, it does not access the system time, but only uses the timestamps from the sensor topics. diff --git a/docs/en/modules/modules_system.md b/docs/en/modules/modules_system.md index fe9b467cf6..2b0c0fc03c 100644 --- a/docs/en/modules/modules_system.md +++ b/docs/en/modules/modules_system.md @@ -321,7 +321,7 @@ Source: [drivers/heater](https://github.com/PX4/PX4-Autopilot/tree/main/src/driv ### Description -Background process running periodically on the LP work queue to regulate IMU temperature at a setpoint. +Background process running periodically on the INS{i} queue to regulate IMU temperature at a setpoint. This task can be started at boot from the startup scripts by setting SENS_EN_THERMAL or via CLI. @@ -732,7 +732,7 @@ The module is typically used together with uORB publisher rules, to specify whic The replay module will just publish all messages that are found in the log. It also applies the parameters from the log. -The replay procedure is documented on the [System-wide Replay](https://docs.px4.io/main/en/debug/system_wide_replay.html) +The replay procedure is documented on the [System-wide Replay](../debug/system_wide_replay.md) page. ### Usage {#replay_usage} @@ -921,6 +921,30 @@ system_power_simulation [arguments...] status print status info ``` +## task_watchdog + +Source: [modules/task_watchdog](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/task_watchdog) + +### Description + +Detects when a higher-priority task starves the system by running too long. +When starvation is detected, dumps the offending task's registers and stack, +and saves a cpuload snapshot. + +### Usage {#task_watchdog_usage} + +``` +task_watchdog [arguments...] + Commands: + start + + trigger Manually trigger the watchdog + + stop + + status print status info +``` + ## tattu_can Source: [drivers/tattu_can](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/tattu_can) diff --git a/docs/en/msg_docs/ActionRequest.md b/docs/en/msg_docs/ActionRequest.md index 9d3bad8a5f..1fafb6ea21 100644 --- a/docs/en/msg_docs/ActionRequest.md +++ b/docs/en/msg_docs/ActionRequest.md @@ -25,26 +25,26 @@ Request are published by `manual_control` and subscribed by the `commander` and ### ACTION {#ACTION} -| Name | Type | Value | Description | -| ------------------------------------------------------------------------------------------- | ------- | ----- | --------------------------------------------------------------------- | -| ACTION_DISARM | `uint8` | 0 | Disarm vehicle | -| ACTION_ARM | `uint8` | 1 | Arm vehicle | -| ACTION_TOGGLE_ARMING | `uint8` | 2 | Toggle arming | -| ACTION_UNKILL | `uint8` | 3 | Revert a kill action | -| ACTION_KILL | `uint8` | 4 | Kill vehicle (instantly stop the motors) | -| ACTION_SWITCH_MODE | `uint8` | 5 | Switch mode. The target mode is set in the `mode` field. | -| ACTION_VTOL_TRANSITION_TO_MULTICOPTER | `uint8` | 6 | Transition to hover flight | -| ACTION_VTOL_TRANSITION_TO_FIXEDWING | `uint8` | 7 | Transition to fast forward flight | -| ACTION_TERMINATION | `uint8` | 8 | Irreversibly output failsafe values on all outputs, trigger parachute | +| Name | Type | Value | Description | +| ----------------------------------------------------------------------------------------- | ------- | ----- | --------------------------------------------------------------------- | +| ACTION_DISARM | `uint8` | 0 | Disarm vehicle | +| ACTION_ARM | `uint8` | 1 | Arm vehicle | +| ACTION_TOGGLE_ARMING | `uint8` | 2 | Toggle arming | +| ACTION_UNKILL | `uint8` | 3 | Revert a kill action | +| ACTION_KILL | `uint8` | 4 | Kill vehicle (instantly stop the motors) | +| ACTION_SWITCH_MODE | `uint8` | 5 | Switch mode. The target mode is set in the `mode` field. | +| ACTION_VTOL_TRANSITION_TO_MULTICOPTER | `uint8` | 6 | Transition to hover flight | +| ACTION_VTOL_TRANSITION_TO_FIXEDWING | `uint8` | 7 | Transition to fast forward flight | +| ACTION_TERMINATION | `uint8` | 8 | Irreversibly output failsafe values on all outputs, trigger parachute | ### SOURCE {#SOURCE} -| Name | Type | Value | Description | -| --------------------------------------------------------- | ------- | ----- | --------------------------------------------------------------- | -| SOURCE_STICK_GESTURE | `uint8` | 0 | Triggered by holding the sticks in a certain position | -| SOURCE_RC_SWITCH | `uint8` | 1 | Triggered by an RC switch moving into a certain position | -| SOURCE_RC_BUTTON | `uint8` | 2 | Triggered by a momentary button on the RC being pressed or held | -| SOURCE_RC_MODE_SLOT | `uint8` | 3 | Mode change through the RC mode selection mechanism | +| Name | Type | Value | Description | +| ------------------------------------------------------- | ------- | ----- | --------------------------------------------------------------- | +| SOURCE_STICK_GESTURE | `uint8` | 0 | Triggered by holding the sticks in a certain position | +| SOURCE_RC_SWITCH | `uint8` | 1 | Triggered by an RC switch moving into a certain position | +| SOURCE_RC_BUTTON | `uint8` | 2 | Triggered by a momentary button on the RC being pressed or held | +| SOURCE_RC_MODE_SLOT | `uint8` | 3 | Mode change through the RC mode selection mechanism | ## Source Message @@ -59,26 +59,26 @@ Request are published by `manual_control` and subscribed by the `commander` and # It allows mapping triggers from various external interfaces like RC channels or MAVLink to cause an action. # Request are published by `manual_control` and subscribed by the `commander` and `vtol_att_control` modules. -uint64 timestamp # [us] Time since system start +uint64 timestamp # [us] Time since system start -uint8 action # [@enum ACTION] Requested action -uint8 ACTION_DISARM = 0 # Disarm vehicle -uint8 ACTION_ARM = 1 # Arm vehicle -uint8 ACTION_TOGGLE_ARMING = 2 # Toggle arming -uint8 ACTION_UNKILL = 3 # Revert a kill action -uint8 ACTION_KILL = 4 # Kill vehicle (instantly stop the motors) -uint8 ACTION_SWITCH_MODE = 5 # Switch mode. The target mode is set in the `mode` field. -uint8 ACTION_VTOL_TRANSITION_TO_MULTICOPTER = 6 # Transition to hover flight -uint8 ACTION_VTOL_TRANSITION_TO_FIXEDWING = 7 # Transition to fast forward flight -uint8 ACTION_TERMINATION = 8 # Irreversibly output failsafe values on all outputs, trigger parachute +uint8 action # [@enum ACTION] Requested action +uint8 ACTION_DISARM = 0 # Disarm vehicle +uint8 ACTION_ARM = 1 # Arm vehicle +uint8 ACTION_TOGGLE_ARMING = 2 # Toggle arming +uint8 ACTION_UNKILL = 3 # Revert a kill action +uint8 ACTION_KILL = 4 # Kill vehicle (instantly stop the motors) +uint8 ACTION_SWITCH_MODE = 5 # Switch mode. The target mode is set in the `mode` field. +uint8 ACTION_VTOL_TRANSITION_TO_MULTICOPTER = 6 # Transition to hover flight +uint8 ACTION_VTOL_TRANSITION_TO_FIXEDWING = 7 # Transition to fast forward flight +uint8 ACTION_TERMINATION = 8 # Irreversibly output failsafe values on all outputs, trigger parachute -uint8 source # [@enum SOURCE] Request trigger type, such as a switch, button or gesture -uint8 SOURCE_STICK_GESTURE = 0 # Triggered by holding the sticks in a certain position -uint8 SOURCE_RC_SWITCH = 1 # Triggered by an RC switch moving into a certain position -uint8 SOURCE_RC_BUTTON = 2 # Triggered by a momentary button on the RC being pressed or held -uint8 SOURCE_RC_MODE_SLOT = 3 # Mode change through the RC mode selection mechanism +uint8 source # [@enum SOURCE] Request trigger type, such as a switch, button or gesture +uint8 SOURCE_STICK_GESTURE = 0 # Triggered by holding the sticks in a certain position +uint8 SOURCE_RC_SWITCH = 1 # Triggered by an RC switch moving into a certain position +uint8 SOURCE_RC_BUTTON = 2 # Triggered by a momentary button on the RC being pressed or held +uint8 SOURCE_RC_MODE_SLOT = 3 # Mode change through the RC mode selection mechanism -uint8 mode # Requested mode. Only applies when `action` is `ACTION_SWITCH_MODE`. Values for this field are defined by the `vehicle_status_s::NAVIGATION_STATE_*` enumeration. +uint8 mode # Requested mode. Only applies when `action` is `ACTION_SWITCH_MODE`. Values for this field are defined by the `vehicle_status_s::NAVIGATION_STATE_*` enumeration. ``` ::: diff --git a/docs/en/msg_docs/ActuatorMotors.md b/docs/en/msg_docs/ActuatorMotors.md index e50477ebb2..4c7cad45b6 100644 --- a/docs/en/msg_docs/ActuatorMotors.md +++ b/docs/en/msg_docs/ActuatorMotors.md @@ -18,15 +18,15 @@ Published by the vehicle's allocation and consumed by the ESC protocol drivers e | timestamp | `uint64` | us | | Time since system start | | timestamp_sample | `uint64` | us | | Sampling timestamp of the data this control response is based on | | reversible_flags | `uint16` | | | Bitset indicating which motors are configured to be reversible | -| control | `float32[12]` | | [-1 : 1] | Normalized thrust. where 1 means maximum positive thrust, -1 maximum negative (if not supported by the output, <0 maps to NaN). NaN maps to disarmed (stop the motors) | +| control | `float32[12]` | | [-1 : 1] | Normalized thrust. Where 1 means maximum positive thrust, -1 maximum negative (if not supported by the output, <0 maps to NaN). NaN maps to disarmed (stop the motors) | ## Constants -| Name | Type | Value | Description | -| ----------------------------------------------------------------- | -------- | ----- | ----------- | -| MESSAGE_VERSION | `uint32` | 0 | -| ACTUATOR_FUNCTION_MOTOR1 | `uint8` | 101 | -| NUM_CONTROLS | `uint8` | 12 | +| Name | Type | Value | Description | +| --------------------------------------------------------------- | -------- | ----- | --------------------------------- | +| MESSAGE_VERSION | `uint32` | 0 | +| ACTUATOR_FUNCTION_MOTOR1 | `uint8` | 101 | output_functions.yaml Motor.start | +| NUM_CONTROLS | `uint8` | 12 | output_functions.yaml Motor.count | ## Source Message @@ -42,15 +42,15 @@ Published by the vehicle's allocation and consumed by the ESC protocol drivers e uint32 MESSAGE_VERSION = 0 -uint64 timestamp # [us] Time since system start -uint64 timestamp_sample # [us] Sampling timestamp of the data this control response is based on +uint64 timestamp # [us] Time since system start +uint64 timestamp_sample # [us] Sampling timestamp of the data this control response is based on -uint16 reversible_flags # [-] Bitset indicating which motors are configured to be reversible +uint16 reversible_flags # [-] Bitset indicating which motors are configured to be reversible -uint8 ACTUATOR_FUNCTION_MOTOR1 = 101 # +uint8 ACTUATOR_FUNCTION_MOTOR1 = 101 # output_functions.yaml Motor.start -uint8 NUM_CONTROLS = 12 # -float32[12] control # [@range -1, 1] Normalized thrust. where 1 means maximum positive thrust, -1 maximum negative (if not supported by the output, <0 maps to NaN). NaN maps to disarmed (stop the motors) +uint8 NUM_CONTROLS = 12 # output_functions.yaml Motor.count +float32[12] control # [@range -1, 1] Normalized thrust. Where 1 means maximum positive thrust, -1 maximum negative (if not supported by the output, <0 maps to NaN). NaN maps to disarmed (stop the motors) ``` ::: diff --git a/docs/en/msg_docs/ActuatorOutputs.md b/docs/en/msg_docs/ActuatorOutputs.md index fa8b313c4c..06cc930b7a 100644 --- a/docs/en/msg_docs/ActuatorOutputs.md +++ b/docs/en/msg_docs/ActuatorOutputs.md @@ -16,10 +16,10 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| --------------------------------------------------------------------- | ------- | ----- | ------------------- | -| NUM_ACTUATOR_OUTPUTS | `uint8` | 16 | -| NUM_ACTUATOR_OUTPUT_GROUPS | `uint8` | 4 | for sanity checking | +| Name | Type | Value | Description | +| ------------------------------------------------------------------- | ------- | ----- | ------------------- | +| NUM_ACTUATOR_OUTPUTS | `uint8` | 16 | +| NUM_ACTUATOR_OUTPUT_GROUPS | `uint8` | 4 | for sanity checking | ## Source Message diff --git a/docs/en/msg_docs/ActuatorServos.md b/docs/en/msg_docs/ActuatorServos.md index de537fcca6..7fc0c6f254 100644 --- a/docs/en/msg_docs/ActuatorServos.md +++ b/docs/en/msg_docs/ActuatorServos.md @@ -21,10 +21,10 @@ Published by the vehicle's allocation and consumed by the actuator output driver ## Constants -| Name | Type | Value | Description | -| ----------------------------------------------- | -------- | ----- | ----------- | -| MESSAGE_VERSION | `uint32` | 0 | -| NUM_CONTROLS | `uint8` | 8 | +| Name | Type | Value | Description | +| --------------------------------------------- | -------- | ----- | ----------- | +| MESSAGE_VERSION | `uint32` | 0 | +| NUM_CONTROLS | `uint8` | 8 | ## Source Message @@ -40,11 +40,11 @@ Published by the vehicle's allocation and consumed by the actuator output driver uint32 MESSAGE_VERSION = 0 -uint64 timestamp # [us] Time since system start -uint64 timestamp_sample # [us] Sampling timestamp of the data this control response is based on +uint64 timestamp # [us] Time since system start +uint64 timestamp_sample # [us] Sampling timestamp of the data this control response is based on -uint8 NUM_CONTROLS = 8 # -float32[8] control # [-] [@range -1, 1] Normalized output. 1 means maximum positive position. -1 maximum negative position (if not supported by the output, <0 maps to NaN). NaN maps to disarmed. +uint8 NUM_CONTROLS = 8 +float32[8] control # [-] [@range -1, 1] Normalized output. 1 means maximum positive position. -1 maximum negative position (if not supported by the output, <0 maps to NaN). NaN maps to disarmed. ``` ::: diff --git a/docs/en/msg_docs/ActuatorServosTrim.md b/docs/en/msg_docs/ActuatorServosTrim.md index 3b454b7d3f..01c831bc9f 100644 --- a/docs/en/msg_docs/ActuatorServosTrim.md +++ b/docs/en/msg_docs/ActuatorServosTrim.md @@ -17,9 +17,9 @@ Servo trims, added as offset to servo outputs. ## Constants -| Name | Type | Value | Description | -| ----------------------------------------- | ------- | ----- | ----------- | -| NUM_CONTROLS | `uint8` | 8 | +| Name | Type | Value | Description | +| --------------------------------------- | ------- | ----- | ----------- | +| NUM_CONTROLS | `uint8` | 8 | ## Source Message diff --git a/docs/en/msg_docs/ActuatorTest.md b/docs/en/msg_docs/ActuatorTest.md index 820c6214fa..52261b7d36 100644 --- a/docs/en/msg_docs/ActuatorTest.md +++ b/docs/en/msg_docs/ActuatorTest.md @@ -18,15 +18,15 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| ------------------------------------------------------------- | ------- | ----- | ---------------------------------------------------- | -| ACTION_RELEASE_CONTROL | `uint8` | 0 | exit test mode for the given function | -| ACTION_DO_CONTROL | `uint8` | 1 | enable actuator test mode | -| FUNCTION_MOTOR1 | `uint8` | 101 | -| MAX_NUM_MOTORS | `uint8` | 12 | -| FUNCTION_SERVO1 | `uint8` | 201 | -| MAX_NUM_SERVOS | `uint8` | 8 | -| ORB_QUEUE_LENGTH | `uint8` | 16 | >= MAX_NUM_MOTORS to support code in esc_calibration | +| Name | Type | Value | Description | +| ----------------------------------------------------------- | ------- | ----- | ---------------------------------------------------- | +| ACTION_RELEASE_CONTROL | `uint8` | 0 | exit test mode for the given function | +| ACTION_DO_CONTROL | `uint8` | 1 | enable actuator test mode | +| FUNCTION_MOTOR1 | `uint8` | 101 | +| MAX_NUM_MOTORS | `uint8` | 12 | +| FUNCTION_SERVO1 | `uint8` | 201 | +| MAX_NUM_SERVOS | `uint8` | 8 | +| ORB_QUEUE_LENGTH | `uint8` | 16 | >= MAX_NUM_MOTORS to support code in esc_calibration | ## Source Message diff --git a/docs/en/msg_docs/AirspeedValidated.md b/docs/en/msg_docs/AirspeedValidated.md index 92b2f35f1d..4d184d3271 100644 --- a/docs/en/msg_docs/AirspeedValidated.md +++ b/docs/en/msg_docs/AirspeedValidated.md @@ -30,20 +30,20 @@ Used by controllers, estimators and for airspeed reporting to operator. ### SOURCE {#SOURCE} -| Name | Type | Value | Description | -| ----------------------------------------------------------------- | ------ | ----- | ----------------------- | -| SOURCE_DISABLED | `int8` | -1 | Disabled | -| SOURCE_GROUND_MINUS_WIND | `int8` | 0 | Ground speed minus wind | -| SOURCE_SENSOR_1 | `int8` | 1 | Sensor 1 | -| SOURCE_SENSOR_2 | `int8` | 2 | Sensor 2 | -| SOURCE_SENSOR_3 | `int8` | 3 | Sensor 3 | -| SOURCE_SYNTHETIC | `int8` | 4 | Synthetic airspeed | +| Name | Type | Value | Description | +| --------------------------------------------------------------- | ------ | ----- | ----------------------- | +| SOURCE_DISABLED | `int8` | -1 | Disabled | +| SOURCE_GROUND_MINUS_WIND | `int8` | 0 | Ground speed minus wind | +| SOURCE_SENSOR_1 | `int8` | 1 | Sensor 1 | +| SOURCE_SENSOR_2 | `int8` | 2 | Sensor 2 | +| SOURCE_SENSOR_3 | `int8` | 3 | Sensor 3 | +| SOURCE_SYNTHETIC | `int8` | 4 | Synthetic airspeed | ## Constants -| Name | Type | Value | Description | -| ----------------------------------------------- | -------- | ----- | ----------- | -| MESSAGE_VERSION | `uint32` | 1 | +| Name | Type | Value | Description | +| --------------------------------------------- | -------- | ----- | ----------- | +| MESSAGE_VERSION | `uint32` | 1 | ## Source Message @@ -57,28 +57,27 @@ Used by controllers, estimators and for airspeed reporting to operator. # Provides information about airspeed (indicated, true, calibrated) and the source of the data. # Used by controllers, estimators and for airspeed reporting to operator. - uint32 MESSAGE_VERSION = 1 -uint64 timestamp # [us] Time since system start +uint64 timestamp # [us] Time since system start -float32 indicated_airspeed_m_s # [m/s] [@invalid NaN] Indicated airspeed (IAS) -float32 calibrated_airspeed_m_s # [m/s] [@invalid NaN] Calibrated airspeed (CAS) -float32 true_airspeed_m_s # [m/s] [@invalid NaN] True airspeed (TAS) +float32 indicated_airspeed_m_s # [m/s] [@invalid NaN] Indicated airspeed (IAS) +float32 calibrated_airspeed_m_s # [m/s] [@invalid NaN] Calibrated airspeed (CAS) +float32 true_airspeed_m_s # [m/s] [@invalid NaN] True airspeed (TAS) -int8 airspeed_source # [@enum SOURCE] Source of currently published airspeed values -int8 SOURCE_DISABLED = -1 # Disabled -int8 SOURCE_GROUND_MINUS_WIND = 0 # Ground speed minus wind -int8 SOURCE_SENSOR_1 = 1 # Sensor 1 -int8 SOURCE_SENSOR_2 = 2 # Sensor 2 -int8 SOURCE_SENSOR_3 = 3 # Sensor 3 -int8 SOURCE_SYNTHETIC = 4 # Synthetic airspeed +int8 airspeed_source # [@enum SOURCE] Source of currently published airspeed values +int8 SOURCE_DISABLED = -1 # Disabled +int8 SOURCE_GROUND_MINUS_WIND = 0 # Ground speed minus wind +int8 SOURCE_SENSOR_1 = 1 # Sensor 1 +int8 SOURCE_SENSOR_2 = 2 # Sensor 2 +int8 SOURCE_SENSOR_3 = 3 # Sensor 3 +int8 SOURCE_SYNTHETIC = 4 # Synthetic airspeed -float32 calibrated_ground_minus_wind_m_s # [m/s] [@invalid NaN] CAS calculated from groundspeed - windspeed, where windspeed is estimated based on a zero-sideslip assumption -float32 calibraded_airspeed_synth_m_s # [m/s] [@invalid NaN] Synthetic airspeed -float32 airspeed_derivative_filtered # [m/s^2] Filtered indicated airspeed derivative -float32 throttle_filtered # [-] Filtered fixed-wing throttle -float32 pitch_filtered # [rad] Filtered pitch +float32 calibrated_ground_minus_wind_m_s # [m/s] [@invalid NaN] CAS calculated from groundspeed - windspeed, where windspeed is estimated based on a zero-sideslip assumption +float32 calibraded_airspeed_synth_m_s # [m/s] [@invalid NaN] Synthetic airspeed +float32 airspeed_derivative_filtered # [m/s^2] Filtered indicated airspeed derivative +float32 throttle_filtered # [-] Filtered fixed-wing throttle +float32 pitch_filtered # [rad] Filtered pitch ``` ::: diff --git a/docs/en/msg_docs/AirspeedValidatedV0.md b/docs/en/msg_docs/AirspeedValidatedV0.md index 8591ec0c2a..d94137b67b 100644 --- a/docs/en/msg_docs/AirspeedValidatedV0.md +++ b/docs/en/msg_docs/AirspeedValidatedV0.md @@ -24,9 +24,9 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| ----------------------------------------------- | -------- | ----- | ----------- | -| MESSAGE_VERSION | `uint32` | 0 | +| Name | Type | Value | Description | +| --------------------------------------------- | -------- | ----- | ----------- | +| MESSAGE_VERSION | `uint32` | 0 | ## Source Message diff --git a/docs/en/msg_docs/AirspeedWind.md b/docs/en/msg_docs/AirspeedWind.md index 3be13ac999..fe4ef76b04 100644 --- a/docs/en/msg_docs/AirspeedWind.md +++ b/docs/en/msg_docs/AirspeedWind.md @@ -35,12 +35,12 @@ subscribed to by any other modules. ## Constants -| Name | Type | Value | Description | -| ------------------------------------------------------- | ------- | ----- | ---------------------------------------------------------------------------------- | -| SOURCE_AS_BETA_ONLY | `uint8` | 0 | Wind estimate only based on synthetic sideslip fusion | -| SOURCE_AS_SENSOR_1 | `uint8` | 1 | Combined synthetic sideslip and airspeed fusion (data from first airspeed sensor) | -| SOURCE_AS_SENSOR_2 | `uint8` | 2 | Combined synthetic sideslip and airspeed fusion (data from second airspeed sensor) | -| SOURCE_AS_SENSOR_3 | `uint8` | 3 | Combined synthetic sideslip and airspeed fusion (data from third airspeed sensor) | +| Name | Type | Value | Description | +| ----------------------------------------------------- | ------- | ----- | ---------------------------------------------------------------------------------- | +| SOURCE_AS_BETA_ONLY | `uint8` | 0 | Wind estimate only based on synthetic sideslip fusion | +| SOURCE_AS_SENSOR_1 | `uint8` | 1 | Combined synthetic sideslip and airspeed fusion (data from first airspeed sensor) | +| SOURCE_AS_SENSOR_2 | `uint8` | 2 | Combined synthetic sideslip and airspeed fusion (data from second airspeed sensor) | +| SOURCE_AS_SENSOR_3 | `uint8` | 3 | Combined synthetic sideslip and airspeed fusion (data from third airspeed sensor) | ## Source Message diff --git a/docs/en/msg_docs/ArmingCheckReply.md b/docs/en/msg_docs/ArmingCheckReply.md index 84e6f068d9..d3f499f83b 100644 --- a/docs/en/msg_docs/ArmingCheckReply.md +++ b/docs/en/msg_docs/ArmingCheckReply.md @@ -45,16 +45,16 @@ The message is not used by internal/FMU components, as their mode requirements a ### HEALTH_COMPONENT_INDEX {#HEALTH_COMPONENT_INDEX} -| Name | Type | Value | Description | -| ----------------------------------------------------------------------- | ------- | ----- | --------------------------------------------------------- | -| HEALTH_COMPONENT_INDEX_NONE | `uint8` | 0 | Index of health component for which this response applies | +| Name | Type | Value | Description | +| --------------------------------------------------------------------- | ------- | ----- | --------------------------------------------------------- | +| HEALTH_COMPONENT_INDEX_NONE | `uint8` | 0 | Index of health component for which this response applies | ## Constants -| Name | Type | Value | Description | -| ------------------------------------------------- | -------- | ----- | ----------- | -| MESSAGE_VERSION | `uint32` | 1 | -| ORB_QUEUE_LENGTH | `uint8` | 4 | +| Name | Type | Value | Description | +| ----------------------------------------------- | -------- | ----- | ----------- | +| MESSAGE_VERSION | `uint32` | 1 | +| ORB_QUEUE_LENGTH | `uint8` | 4 | ## Source Message @@ -72,40 +72,40 @@ The message is not used by internal/FMU components, as their mode requirements a # Note that the external component is identified by its registration_id, which is allocated to the component during registration (arming_check_id in RegisterExtComponentReply). # The message is not used by internal/FMU components, as their mode requirements are known at compile time. -uint32 MESSAGE_VERSION = 1 +uint32 MESSAGE_VERSION = 1 uint64 timestamp # [us] Time since system start. -uint8 request_id # [-] Id of ArmingCheckRequest for which this is a response -uint8 registration_id # [-] Id of external component emitting this response +uint8 request_id # [-] Id of ArmingCheckRequest for which this is a response +uint8 registration_id # [-] Id of external component emitting this response -uint8 HEALTH_COMPONENT_INDEX_NONE = 0 # Index of health component for which this response applies +uint8 HEALTH_COMPONENT_INDEX_NONE = 0 # Index of health component for which this response applies -uint8 health_component_index # [@enum HEALTH_COMPONENT_INDEX] -bool health_component_is_present # Unused. Intended for use with health events interface (health_component_t in events.json) -bool health_component_warning # Unused. Intended for use with health events interface (health_component_t in events.json) -bool health_component_error # Unused. Intended for use with health events interface (health_component_t in events.json) +uint8 health_component_index # [@enum HEALTH_COMPONENT_INDEX] +bool health_component_is_present # Unused. Intended for use with health events interface (health_component_t in events.json) +bool health_component_warning # Unused. Intended for use with health events interface (health_component_t in events.json) +bool health_component_error # Unused. Intended for use with health events interface (health_component_t in events.json) -bool can_arm_and_run # True if the component can arm. For navigation mode components, true if the component can arm in the mode or switch to the mode when already armed +bool can_arm_and_run # True if the component can arm. For navigation mode components, true if the component can arm in the mode or switch to the mode when already armed -uint8 num_events # Number of queued failure messages (Event) in the events field +uint8 num_events # Number of queued failure messages (Event) in the events field -Event[5] events # Arming failure reasons (Queue of events to report to GCS) +Event[5] events # Arming failure reasons (Queue of events to report to GCS) # Mode requirements -bool mode_req_angular_velocity # Requires angular velocity estimate (e.g. from gyroscope) -bool mode_req_attitude # Requires an attitude estimate -bool mode_req_local_alt # Requires a local altitude estimate -bool mode_req_local_position # Requires a local position estimate -bool mode_req_local_position_relaxed # Requires a more relaxed global position estimate -bool mode_req_global_position # Requires a global position estimate -bool mode_req_global_position_relaxed # Requires a relaxed global position estimate -bool mode_req_mission # Requires an uploaded mission -bool mode_req_home_position # Requires a home position (such as RTL/Return mode) -bool mode_req_prevent_arming # Prevent arming (such as in Land mode) -bool mode_req_manual_control # Requires a manual controller +bool mode_req_angular_velocity # Requires angular velocity estimate (e.g. from gyroscope) +bool mode_req_attitude # Requires an attitude estimate +bool mode_req_local_alt # Requires a local altitude estimate +bool mode_req_local_position # Requires a local position estimate +bool mode_req_local_position_relaxed # Requires a more relaxed global position estimate +bool mode_req_global_position # Requires a global position estimate +bool mode_req_global_position_relaxed # Requires a relaxed global position estimate +bool mode_req_mission # Requires an uploaded mission +bool mode_req_home_position # Requires a home position (such as RTL/Return mode) +bool mode_req_prevent_arming # Prevent arming (such as in Land mode) +bool mode_req_manual_control # Requires a manual controller -uint8 ORB_QUEUE_LENGTH = 4 +uint8 ORB_QUEUE_LENGTH = 4 ``` ::: diff --git a/docs/en/msg_docs/ArmingCheckReplyV0.md b/docs/en/msg_docs/ArmingCheckReplyV0.md index 4d13f6669c..ebbf6aaa6d 100644 --- a/docs/en/msg_docs/ArmingCheckReplyV0.md +++ b/docs/en/msg_docs/ArmingCheckReplyV0.md @@ -33,11 +33,11 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| ----------------------------------------------------------------------- | -------- | ----- | ----------- | -| MESSAGE_VERSION | `uint32` | 0 | -| HEALTH_COMPONENT_INDEX_NONE | `uint8` | 0 | -| ORB_QUEUE_LENGTH | `uint8` | 4 | +| Name | Type | Value | Description | +| --------------------------------------------------------------------- | -------- | ----- | ----------- | +| MESSAGE_VERSION | `uint32` | 0 | +| HEALTH_COMPONENT_INDEX_NONE | `uint8` | 0 | +| ORB_QUEUE_LENGTH | `uint8` | 4 | ## Source Message diff --git a/docs/en/msg_docs/ArmingCheckRequest.md b/docs/en/msg_docs/ArmingCheckRequest.md index 47b8ad6bf3..dfef3513b6 100644 --- a/docs/en/msg_docs/ArmingCheckRequest.md +++ b/docs/en/msg_docs/ArmingCheckRequest.md @@ -25,9 +25,9 @@ The reply will also include the registration_id for each external component, pro ## Constants -| Name | Type | Value | Description | -| ----------------------------------------------- | -------- | ----- | ----------- | -| MESSAGE_VERSION | `uint32` | 1 | +| Name | Type | Value | Description | +| --------------------------------------------- | -------- | ----- | ----------- | +| MESSAGE_VERSION | `uint32` | 1 | ## Source Message @@ -47,9 +47,9 @@ The reply will also include the registration_id for each external component, pro uint32 MESSAGE_VERSION = 1 -uint64 timestamp # [us] Time since system start +uint64 timestamp # [us] Time since system start -uint8 request_id # [-] Id of this request. Allows correlation with associated ArmingCheckReply messages. +uint8 request_id # [-] Id of this request. Allows correlation with associated ArmingCheckReply messages. uint32 valid_registrations_mask # [-] Bitmask of valid registration ID's (the bit is also cleared if flagged as unresponsive) ``` diff --git a/docs/en/msg_docs/ArmingCheckRequestV0.md b/docs/en/msg_docs/ArmingCheckRequestV0.md index 03a0377e27..f51dbd5a6d 100644 --- a/docs/en/msg_docs/ArmingCheckRequestV0.md +++ b/docs/en/msg_docs/ArmingCheckRequestV0.md @@ -24,9 +24,9 @@ The reply will also include the registration_id for each external component, pro ## Constants -| Name | Type | Value | Description | -| ----------------------------------------------- | -------- | ----- | ----------- | -| MESSAGE_VERSION | `uint32` | 0 | +| Name | Type | Value | Description | +| --------------------------------------------- | -------- | ----- | ----------- | +| MESSAGE_VERSION | `uint32` | 0 | ## Source Message diff --git a/docs/en/msg_docs/AutotuneAttitudeControlStatus.md b/docs/en/msg_docs/AutotuneAttitudeControlStatus.md index f8b2b2f2e9..61f732bf36 100644 --- a/docs/en/msg_docs/AutotuneAttitudeControlStatus.md +++ b/docs/en/msg_docs/AutotuneAttitudeControlStatus.md @@ -37,25 +37,25 @@ The rate_sp field is consumed by the controllers, while the remaining fields (mo ### STATE {#STATE} -| Name | Type | Value | Description | -| ------------------------------------------------------------------------------- | ------- | ----- | -------------------------------------------------------- | -| STATE_IDLE | `uint8` | 0 | Idle (not running) | -| STATE_INIT | `uint8` | 1 | Initialize filters and setup | -| STATE_ROLL_AMPLITUDE_DETECTION | `uint8` | 2 | FW only: determine required excitation amplitude (roll) | -| STATE_ROLL | `uint8` | 3 | Roll-axis excitation and model identification | -| STATE_ROLL_PAUSE | `uint8` | 4 | Pause to return to level flight | -| STATE_PITCH_AMPLITUDE_DETECTION | `uint8` | 5 | FW only: determine required excitation amplitude (pitch) | -| STATE_PITCH | `uint8` | 6 | Pitch-axis excitation and model identification | -| STATE_PITCH_PAUSE | `uint8` | 7 | Pause to return to level flight | -| STATE_YAW_AMPLITUDE_DETECTION | `uint8` | 8 | FW only: determine required excitation amplitude (yaw) | -| STATE_YAW | `uint8` | 9 | Yaw-axis excitation and model identification | -| STATE_YAW_PAUSE | `uint8` | 10 | Pause to return to level flight | -| STATE_VERIFICATION | `uint8` | 11 | Verify model and candidate gains | -| STATE_APPLY | `uint8` | 12 | Apply gains | -| STATE_TEST | `uint8` | 13 | Test gains in closed-loop | -| STATE_COMPLETE | `uint8` | 14 | Tuning completed successfully | -| STATE_FAIL | `uint8` | 15 | Tuning failed (model invalid or controller unstable) | -| STATE_WAIT_FOR_DISARM | `uint8` | 16 | Waiting for disarm before finalizing | +| Name | Type | Value | Description | +| ----------------------------------------------------------------------------- | ------- | ----- | -------------------------------------------------------- | +| STATE_IDLE | `uint8` | 0 | Idle (not running) | +| STATE_INIT | `uint8` | 1 | Initialize filters and setup | +| STATE_ROLL_AMPLITUDE_DETECTION | `uint8` | 2 | FW only: determine required excitation amplitude (roll) | +| STATE_ROLL | `uint8` | 3 | Roll-axis excitation and model identification | +| STATE_ROLL_PAUSE | `uint8` | 4 | Pause to return to level flight | +| STATE_PITCH_AMPLITUDE_DETECTION | `uint8` | 5 | FW only: determine required excitation amplitude (pitch) | +| STATE_PITCH | `uint8` | 6 | Pitch-axis excitation and model identification | +| STATE_PITCH_PAUSE | `uint8` | 7 | Pause to return to level flight | +| STATE_YAW_AMPLITUDE_DETECTION | `uint8` | 8 | FW only: determine required excitation amplitude (yaw) | +| STATE_YAW | `uint8` | 9 | Yaw-axis excitation and model identification | +| STATE_YAW_PAUSE | `uint8` | 10 | Pause to return to level flight | +| STATE_VERIFICATION | `uint8` | 11 | Verify model and candidate gains | +| STATE_APPLY | `uint8` | 12 | Apply gains | +| STATE_TEST | `uint8` | 13 | Test gains in closed-loop | +| STATE_COMPLETE | `uint8` | 14 | Tuning completed successfully | +| STATE_FAIL | `uint8` | 15 | Tuning failed (model invalid or controller unstable) | +| STATE_WAIT_FOR_DISARM | `uint8` | 16 | Waiting for disarm before finalizing | ## Source Message diff --git a/docs/en/msg_docs/AuxGlobalPosition.md b/docs/en/msg_docs/AuxGlobalPosition.md index e239d721c2..e612fc3a68 100644 --- a/docs/en/msg_docs/AuxGlobalPosition.md +++ b/docs/en/msg_docs/AuxGlobalPosition.md @@ -30,21 +30,21 @@ pseudolites, visual navigation, or other positioning system. ### SOURCE {#SOURCE} -| Name | Type | Value | Description | -| ----------------------------------------------------- | ------- | ----- | -------------- | -| SOURCE_UNKNOWN | `uint8` | 0 | Unknown source | -| SOURCE_GNSS | `uint8` | 1 | GNSS | -| SOURCE_VISION | `uint8` | 2 | Vision | -| SOURCE_PSEUDOLITES | `uint8` | 3 | Pseudolites | -| SOURCE_TERRAIN | `uint8` | 4 | Terrain | -| SOURCE_MAGNETIC | `uint8` | 5 | Magnetic | -| SOURCE_ESTIMATOR | `uint8` | 6 | Estimator | +| Name | Type | Value | Description | +| --------------------------------------------------- | ------- | ----- | -------------- | +| SOURCE_UNKNOWN | `uint8` | 0 | Unknown source | +| SOURCE_GNSS | `uint8` | 1 | GNSS | +| SOURCE_VISION | `uint8` | 2 | Vision | +| SOURCE_PSEUDOLITES | `uint8` | 3 | Pseudolites | +| SOURCE_TERRAIN | `uint8` | 4 | Terrain | +| SOURCE_MAGNETIC | `uint8` | 5 | Magnetic | +| SOURCE_ESTIMATOR | `uint8` | 6 | Estimator | ## Constants -| Name | Type | Value | Description | -| ----------------------------------------------- | -------- | ----- | ----------- | -| MESSAGE_VERSION | `uint32` | 1 | +| Name | Type | Value | Description | +| --------------------------------------------- | -------- | ----- | ----------- | +| MESSAGE_VERSION | `uint32` | 1 | ## Source Message diff --git a/docs/en/msg_docs/BatteryStatus.md b/docs/en/msg_docs/BatteryStatus.md index b9ba00d63a..3ab5a62065 100644 --- a/docs/en/msg_docs/BatteryStatus.md +++ b/docs/en/msg_docs/BatteryStatus.md @@ -25,7 +25,7 @@ Battery instance information is also logged and streamed in MAVLink telemetry. | remaining | `float32` | | [0 : 1] | Remaining capacity (Invalid: -1) | | scale | `float32` | | [1 : -] | Scaling factor to compensate for lower actuation power caused by voltage sag (Invalid: -1) | | time_remaining_s | `float32` | s | | Predicted time remaining until battery is empty under previous averaged load (Invalid: NaN) | -| temperature | `float32` | °C | | Temperature of the battery (Invalid: NaN) | +| temperature | `float32` | degC | | Temperature of the battery (Invalid: NaN) | | cell_count | `uint8` | | | Number of cells (Invalid: 0) | | source | `uint8` | | [SOURCE](#SOURCE) | Battery source | | priority | `uint8` | | | Zero based priority is the connection on the Power Controller V1..Vn AKA BrickN-1 | @@ -44,9 +44,9 @@ Battery instance information is also logged and streamed in MAVLink telemetry. | warning | `uint8` | | [WARNING](#WARNING)[STATE](#STATE) | Current battery warning | | faults | `uint16` | | [FAULT](#FAULT) | Smart battery supply status/fault flags (bitmask) for health indication | | full_charge_capacity_wh | `float32` | Wh | | Compensated battery capacity | -| remaining_capacity_wh | `float32` | Wh | | Compensated battery capacity remaining | +| remaining_capacity_wh | `float32` | Wh | | Compensated battery capacity remaining (Invalid: NaN) | | over_discharge_count | `uint16` | | | Number of battery overdischarge | -| nominal_voltage | `float32` | V | | Nominal voltage of the battery pack | +| nominal_voltage | `float32` | V | | Nominal voltage of the battery pack (Invalid: NaN) | | internal_resistance_estimate | `float32` | Ohm | | Internal resistance per cell estimate | | ocv_estimate | `float32` | V | | Open circuit voltage estimate | | ocv_estimate_filtered | `float32` | V | | Filtered open circuit voltage estimate | @@ -59,52 +59,52 @@ Battery instance information is also logged and streamed in MAVLink telemetry. ### SOURCE {#SOURCE} -| Name | Type | Value | Description | -| ------------------------------------------------------- | ------- | ----- | ---------------------------------------------- | -| SOURCE_POWER_MODULE | `uint8` | 0 | Power module (analog ADC or I2C power monitor) | -| SOURCE_EXTERNAL | `uint8` | 1 | External (MAVLink, CAN, or external driver) | -| SOURCE_ESCS | `uint8` | 2 | ESCs (via ESC telemetry) | +| Name | Type | Value | Description | +| ----------------------------------------------------- | ------- | ----- | ---------------------------------------------- | +| SOURCE_POWER_MODULE | `uint8` | 0 | Power module (analog ADC or I2C power monitor) | +| SOURCE_EXTERNAL | `uint8` | 1 | External (MAVLink, CAN, or external driver) | +| SOURCE_ESCS | `uint8` | 2 | ESCs (via ESC telemetry) | ### WARNING {#WARNING} -| Name | Type | Value | Description | -| --------------------------------------------------- | ------- | ----- | -------------------------------------------- | -| WARNING_NONE | `uint8` | 0 | No battery low voltage warning active | -| WARNING_LOW | `uint8` | 1 | Low voltage warning | -| WARNING_CRITICAL | `uint8` | 2 | Critical voltage, return / abort immediately | -| WARNING_EMERGENCY | `uint8` | 3 | Immediate landing required | -| WARNING_FAILED | `uint8` | 4 | Battery has failed completely | +| Name | Type | Value | Description | +| ------------------------------------------------- | ------- | ----- | -------------------------------------------- | +| WARNING_NONE | `uint8` | 0 | No battery low voltage warning active | +| WARNING_LOW | `uint8` | 1 | Low voltage warning | +| WARNING_CRITICAL | `uint8` | 2 | Critical voltage, return / abort immediately | +| WARNING_EMERGENCY | `uint8` | 3 | Immediate landing required | +| WARNING_FAILED | `uint8` | 4 | Battery has failed completely | ### STATE {#STATE} -| Name | Type | Value | Description | -| ----------------------------------------------- | ------- | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------- | -| STATE_UNHEALTHY | `uint8` | 6 | Battery is diagnosed to be defective or an error occurred, usage is discouraged / prohibited. Possible causes (faults) are listed in faults field | -| STATE_CHARGING | `uint8` | 7 | Battery is charging | +| Name | Type | Value | Description | +| --------------------------------------------- | ------- | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------- | +| STATE_UNHEALTHY | `uint8` | 6 | Battery is diagnosed to be defective or an error occurred, usage is discouraged / prohibited. Possible causes (faults) are listed in faults field | +| STATE_CHARGING | `uint8` | 7 | Battery is charging | ### FAULT {#FAULT} -| Name | Type | Value | Description | -| ----------------------------------------------------------------------- | ------- | ----- | -------------------------------------------------------------------------------------------------------------- | -| FAULT_DEEP_DISCHARGE | `uint8` | 0 | Battery has deep discharged | -| FAULT_SPIKES | `uint8` | 1 | Voltage spikes | -| FAULT_CELL_FAIL | `uint8` | 2 | One or more cells have failed | -| FAULT_OVER_CURRENT | `uint8` | 3 | Over-current | -| FAULT_OVER_TEMPERATURE | `uint8` | 4 | Over-temperature | -| FAULT_UNDER_TEMPERATURE | `uint8` | 5 | Under-temperature fault | -| FAULT_INCOMPATIBLE_VOLTAGE | `uint8` | 6 | Vehicle voltage is not compatible with this battery (batteries on same power rail should have similar voltage) | -| FAULT_INCOMPATIBLE_FIRMWARE | `uint8` | 7 | Battery firmware is not compatible with current autopilot firmware | -| FAULT_INCOMPATIBLE_MODEL | `uint8` | 8 | Battery model is not supported by the system | -| FAULT_HARDWARE_FAILURE | `uint8` | 9 | Hardware problem | -| FAULT_FAILED_TO_ARM | `uint8` | 10 | Battery had a problem while arming | -| FAULT_COUNT | `uint8` | 11 | Counter. Keep this as last element | +| Name | Type | Value | Description | +| --------------------------------------------------------------------- | ------- | ----- | -------------------------------------------------------------------------------------------------------------- | +| FAULT_DEEP_DISCHARGE | `uint8` | 0 | Battery has deep discharged | +| FAULT_SPIKES | `uint8` | 1 | Voltage spikes | +| FAULT_CELL_FAIL | `uint8` | 2 | One or more cells have failed | +| FAULT_OVER_CURRENT | `uint8` | 3 | Over-current | +| FAULT_OVER_TEMPERATURE | `uint8` | 4 | Over-temperature | +| FAULT_UNDER_TEMPERATURE | `uint8` | 5 | Under-temperature fault | +| FAULT_INCOMPATIBLE_VOLTAGE | `uint8` | 6 | Vehicle voltage is not compatible with this battery (batteries on same power rail should have similar voltage) | +| FAULT_INCOMPATIBLE_FIRMWARE | `uint8` | 7 | Battery firmware is not compatible with current autopilot firmware | +| FAULT_INCOMPATIBLE_MODEL | `uint8` | 8 | Battery model is not supported by the system | +| FAULT_HARDWARE_FAILURE | `uint8` | 9 | Hardware problem | +| FAULT_FAILED_TO_ARM | `uint8` | 10 | Battery had a problem while arming | +| FAULT_COUNT | `uint8` | 11 | Counter. Keep this as last element | ## Constants -| Name | Type | Value | Description | -| ----------------------------------------------- | -------- | ----- | ----------- | -| MESSAGE_VERSION | `uint32` | 1 | -| MAX_INSTANCES | `uint8` | 3 | +| Name | Type | Value | Description | +| --------------------------------------------- | -------- | ----- | ----------- | +| MESSAGE_VERSION | `uint32` | 1 | +| MAX_INSTANCES | `uint8` | 3 | ## Source Message @@ -122,76 +122,75 @@ Battery instance information is also logged and streamed in MAVLink telemetry. uint32 MESSAGE_VERSION = 1 uint8 MAX_INSTANCES = 3 -uint64 timestamp # [us] Time since system start +uint64 timestamp # [us] Time since system start -bool connected # Whether or not a battery is connected. For power modules this is based on a voltage threshold. -float32 voltage_v # [V] [@invalid 0] Battery voltage -float32 current_a # [A] [@invalid -1] Battery current -float32 current_average_a # [A] [@invalid -1] Battery current average (for FW average in level flight) -float32 discharged_mah # [mAh] [@invalid -1] Discharged amount -float32 remaining # [@range 0,1] [@invalid -1] Remaining capacity -float32 scale # [-] [@range 1,] [@invalid -1] Scaling factor to compensate for lower actuation power caused by voltage sag -float32 time_remaining_s # [s] [@invalid NaN] Predicted time remaining until battery is empty under previous averaged load -float32 temperature # [°C] [@invalid NaN] Temperature of the battery -uint8 cell_count # [-] [@invalid 0] Number of cells +bool connected # Whether or not a battery is connected. For power modules this is based on a voltage threshold. +float32 voltage_v # [V] [@invalid 0] Battery voltage +float32 current_a # [A] [@invalid -1] Battery current +float32 current_average_a # [A] [@invalid -1] Battery current average (for FW average in level flight) +float32 discharged_mah # [mAh] [@invalid -1] Discharged amount +float32 remaining # [@range 0,1] [@invalid -1] Remaining capacity +float32 scale # [-] [@range 1,] [@invalid -1] Scaling factor to compensate for lower actuation power caused by voltage sag +float32 time_remaining_s # [s] [@invalid NaN] Predicted time remaining until battery is empty under previous averaged load +float32 temperature # [degC] [@invalid NaN] Temperature of the battery +uint8 cell_count # [-] [@invalid 0] Number of cells +uint8 source # [@enum SOURCE] Battery source +uint8 SOURCE_POWER_MODULE = 0 # Power module (analog ADC or I2C power monitor) +uint8 SOURCE_EXTERNAL = 1 # External (MAVLink, CAN, or external driver) +uint8 SOURCE_ESCS = 2 # ESCs (via ESC telemetry) -uint8 source # [@enum SOURCE] Battery source -uint8 SOURCE_POWER_MODULE = 0 # Power module (analog ADC or I2C power monitor) -uint8 SOURCE_EXTERNAL = 1 # External (MAVLink, CAN, or external driver) -uint8 SOURCE_ESCS = 2 # ESCs (via ESC telemetry) +uint8 priority # [-] Zero based priority is the connection on the Power Controller V1..Vn AKA BrickN-1 +uint16 capacity # [mAh] Capacity of the battery when fully charged +uint16 cycle_count # [-] Number of discharge cycles the battery has experienced +uint16 average_time_to_empty # [minutes] Predicted remaining battery capacity based on the average rate of discharge +uint16 manufacture_date # [-] Manufacture date, part of serial number of the battery pack. Formatted as: Day + Month×32 + (Year–1980)×512 +uint16 state_of_health # [%] [@range 0, 100] State of health. FullChargeCapacity/DesignCapacity +uint16 max_error # [%] [@range 1, 100] Max error, expected margin of error in the state-of-charge calculation +uint8 id # [-] ID number of a battery. Should be unique and consistent for the lifetime of a vehicle. 1-indexed +uint16 interface_error # [-] Interface error counter -uint8 priority # [-] Zero based priority is the connection on the Power Controller V1..Vn AKA BrickN-1 -uint16 capacity # [mAh] Capacity of the battery when fully charged -uint16 cycle_count # [-] Number of discharge cycles the battery has experienced -uint16 average_time_to_empty # [minutes] Predicted remaining battery capacity based on the average rate of discharge -uint16 manufacture_date # [-] Manufacture date, part of serial number of the battery pack. Formatted as: Day + Month×32 + (Year–1980)×512 -uint16 state_of_health # [%] [@range 0, 100] State of health. FullChargeCapacity/DesignCapacity -uint16 max_error # [%] [@range 1, 100] Max error, expected margin of error in the state-of-charge calculation -uint8 id # [-] ID number of a battery. Should be unique and consistent for the lifetime of a vehicle. 1-indexed -uint16 interface_error # [-] Interface error counter +float32[14] voltage_cell_v # [V] [@invalid 0] Battery individual cell voltages +float32 max_cell_voltage_delta # [V] Max difference between individual cell voltages -float32[14] voltage_cell_v # [V] [@invalid 0] Battery individual cell voltages -float32 max_cell_voltage_delta # [V] Max difference between individual cell voltages +bool is_powering_off # Power off event imminent indication, false if unknown +bool is_required # Set if the battery is explicitly required before arming -bool is_powering_off # Power off event imminent indication, false if unknown -bool is_required # Set if the battery is explicitly required before arming +uint8 warning # [@enum WARNING STATE] Current battery warning +uint8 WARNING_NONE = 0 # No battery low voltage warning active +uint8 WARNING_LOW = 1 # Low voltage warning +uint8 WARNING_CRITICAL = 2 # Critical voltage, return / abort immediately +uint8 WARNING_EMERGENCY = 3 # Immediate landing required +uint8 WARNING_FAILED = 4 # Battery has failed completely +uint8 STATE_UNHEALTHY = 6 # Battery is diagnosed to be defective or an error occurred, usage is discouraged / prohibited. Possible causes (faults) are listed in faults field +uint8 STATE_CHARGING = 7 # Battery is charging -uint8 warning # [@enum WARNING STATE] Current battery warning -uint8 WARNING_NONE = 0 # No battery low voltage warning active -uint8 WARNING_LOW = 1 # Low voltage warning -uint8 WARNING_CRITICAL = 2 # Critical voltage, return / abort immediately -uint8 WARNING_EMERGENCY = 3 # Immediate landing required -uint8 WARNING_FAILED = 4 # Battery has failed completely -uint8 STATE_UNHEALTHY = 6 # Battery is diagnosed to be defective or an error occurred, usage is discouraged / prohibited. Possible causes (faults) are listed in faults field -uint8 STATE_CHARGING = 7 # Battery is charging +uint16 faults # [@enum FAULT] Smart battery supply status/fault flags (bitmask) for health indication +uint8 FAULT_DEEP_DISCHARGE = 0 # Battery has deep discharged +uint8 FAULT_SPIKES = 1 # Voltage spikes +uint8 FAULT_CELL_FAIL= 2 # One or more cells have failed +uint8 FAULT_OVER_CURRENT = 3 # Over-current +uint8 FAULT_OVER_TEMPERATURE = 4 # Over-temperature +uint8 FAULT_UNDER_TEMPERATURE = 5 # Under-temperature fault +uint8 FAULT_INCOMPATIBLE_VOLTAGE = 6 # Vehicle voltage is not compatible with this battery (batteries on same power rail should have similar voltage) +uint8 FAULT_INCOMPATIBLE_FIRMWARE = 7 # Battery firmware is not compatible with current autopilot firmware +uint8 FAULT_INCOMPATIBLE_MODEL = 8 # Battery model is not supported by the system +uint8 FAULT_HARDWARE_FAILURE = 9 # Hardware problem +uint8 FAULT_FAILED_TO_ARM = 10 # Battery had a problem while arming +uint8 FAULT_COUNT = 11 # Counter. Keep this as last element -uint16 faults # [@enum FAULT] Smart battery supply status/fault flags (bitmask) for health indication -uint8 FAULT_DEEP_DISCHARGE = 0 # Battery has deep discharged -uint8 FAULT_SPIKES = 1 # Voltage spikes -uint8 FAULT_CELL_FAIL= 2 # One or more cells have failed -uint8 FAULT_OVER_CURRENT = 3 # Over-current -uint8 FAULT_OVER_TEMPERATURE = 4 # Over-temperature -uint8 FAULT_UNDER_TEMPERATURE = 5 # Under-temperature fault -uint8 FAULT_INCOMPATIBLE_VOLTAGE = 6 # Vehicle voltage is not compatible with this battery (batteries on same power rail should have similar voltage) -uint8 FAULT_INCOMPATIBLE_FIRMWARE = 7 # Battery firmware is not compatible with current autopilot firmware -uint8 FAULT_INCOMPATIBLE_MODEL = 8 # Battery model is not supported by the system -uint8 FAULT_HARDWARE_FAILURE = 9 # Hardware problem -uint8 FAULT_FAILED_TO_ARM = 10 # Battery had a problem while arming -uint8 FAULT_COUNT = 11 # Counter. Keep this as last element +float32 full_charge_capacity_wh # [Wh] Compensated battery capacity +float32 remaining_capacity_wh # [Wh] [@invalid NaN] Compensated battery capacity remaining +uint16 over_discharge_count # [-] Number of battery overdischarge +float32 nominal_voltage # [V] [@invalid NaN] Nominal voltage of the battery pack -float32 full_charge_capacity_wh # [Wh] Compensated battery capacity -float32 remaining_capacity_wh # [Wh] Compensated battery capacity remaining -uint16 over_discharge_count # [-] Number of battery overdischarge -float32 nominal_voltage # [V] Nominal voltage of the battery pack - -float32 internal_resistance_estimate # [Ohm] Internal resistance per cell estimate -float32 ocv_estimate # [V] Open circuit voltage estimate -float32 ocv_estimate_filtered # [V] Filtered open circuit voltage estimate -float32 volt_based_soc_estimate # [-] [@range 0, 1] Normalized volt based state of charge estimate -float32 voltage_prediction # [V] Predicted voltage -float32 prediction_error # [V] Prediction error -float32 estimation_covariance_norm # [-] Norm of the covariance matrix +float32 internal_resistance_estimate # [Ohm] Internal resistance per cell estimate +float32 ocv_estimate # [V] Open circuit voltage estimate +float32 ocv_estimate_filtered # [V] Filtered open circuit voltage estimate +float32 volt_based_soc_estimate # [-] [@range 0, 1] Normalized volt based state of charge estimate +float32 voltage_prediction # [V] Predicted voltage +float32 prediction_error # [V] Prediction error +float32 estimation_covariance_norm # [-] Norm of the covariance matrix ``` ::: diff --git a/docs/en/msg_docs/BatteryStatusV0.md b/docs/en/msg_docs/BatteryStatusV0.md index 9517f30893..2dbe4a74fe 100644 --- a/docs/en/msg_docs/BatteryStatusV0.md +++ b/docs/en/msg_docs/BatteryStatusV0.md @@ -60,52 +60,52 @@ Battery instance information is also logged and streamed in MAVLink telemetry. ### SOURCE {#SOURCE} -| Name | Type | Value | Description | -| ------------------------------------------------------- | ------- | ----- | ---------------------------------------------- | -| SOURCE_POWER_MODULE | `uint8` | 0 | Power module (analog ADC or I2C power monitor) | -| SOURCE_EXTERNAL | `uint8` | 1 | External (MAVLink, CAN, or external driver) | -| SOURCE_ESCS | `uint8` | 2 | ESCs (via ESC telemetry) | +| Name | Type | Value | Description | +| ----------------------------------------------------- | ------- | ----- | ---------------------------------------------- | +| SOURCE_POWER_MODULE | `uint8` | 0 | Power module (analog ADC or I2C power monitor) | +| SOURCE_EXTERNAL | `uint8` | 1 | External (MAVLink, CAN, or external driver) | +| SOURCE_ESCS | `uint8` | 2 | ESCs (via ESC telemetry) | ### WARNING {#WARNING} -| Name | Type | Value | Description | -| --------------------------------------------------- | ------- | ----- | -------------------------------------------- | -| WARNING_NONE | `uint8` | 0 | No battery low voltage warning active | -| WARNING_LOW | `uint8` | 1 | Low voltage warning | -| WARNING_CRITICAL | `uint8` | 2 | Critical voltage, return / abort immediately | -| WARNING_EMERGENCY | `uint8` | 3 | Immediate landing required | -| WARNING_FAILED | `uint8` | 4 | Battery has failed completely | +| Name | Type | Value | Description | +| ------------------------------------------------- | ------- | ----- | -------------------------------------------- | +| WARNING_NONE | `uint8` | 0 | No battery low voltage warning active | +| WARNING_LOW | `uint8` | 1 | Low voltage warning | +| WARNING_CRITICAL | `uint8` | 2 | Critical voltage, return / abort immediately | +| WARNING_EMERGENCY | `uint8` | 3 | Immediate landing required | +| WARNING_FAILED | `uint8` | 4 | Battery has failed completely | ### STATE {#STATE} -| Name | Type | Value | Description | -| ----------------------------------------------- | ------- | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------- | -| STATE_UNHEALTHY | `uint8` | 6 | Battery is diagnosed to be defective or an error occurred, usage is discouraged / prohibited. Possible causes (faults) are listed in faults field | -| STATE_CHARGING | `uint8` | 7 | Battery is charging | +| Name | Type | Value | Description | +| --------------------------------------------- | ------- | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------- | +| STATE_UNHEALTHY | `uint8` | 6 | Battery is diagnosed to be defective or an error occurred, usage is discouraged / prohibited. Possible causes (faults) are listed in faults field | +| STATE_CHARGING | `uint8` | 7 | Battery is charging | ### FAULT {#FAULT} -| Name | Type | Value | Description | -| ----------------------------------------------------------------------- | ------- | ----- | -------------------------------------------------------------------------------------------------------------- | -| FAULT_DEEP_DISCHARGE | `uint8` | 0 | Battery has deep discharged | -| FAULT_SPIKES | `uint8` | 1 | Voltage spikes | -| FAULT_CELL_FAIL | `uint8` | 2 | One or more cells have failed | -| FAULT_OVER_CURRENT | `uint8` | 3 | Over-current | -| FAULT_OVER_TEMPERATURE | `uint8` | 4 | Over-temperature | -| FAULT_UNDER_TEMPERATURE | `uint8` | 5 | Under-temperature fault | -| FAULT_INCOMPATIBLE_VOLTAGE | `uint8` | 6 | Vehicle voltage is not compatible with this battery (batteries on same power rail should have similar voltage) | -| FAULT_INCOMPATIBLE_FIRMWARE | `uint8` | 7 | Battery firmware is not compatible with current autopilot firmware | -| FAULT_INCOMPATIBLE_MODEL | `uint8` | 8 | Battery model is not supported by the system | -| FAULT_HARDWARE_FAILURE | `uint8` | 9 | Hardware problem | -| FAULT_FAILED_TO_ARM | `uint8` | 10 | Battery had a problem while arming | -| FAULT_COUNT | `uint8` | 11 | Counter. Keep this as last element | +| Name | Type | Value | Description | +| --------------------------------------------------------------------- | ------- | ----- | -------------------------------------------------------------------------------------------------------------- | +| FAULT_DEEP_DISCHARGE | `uint8` | 0 | Battery has deep discharged | +| FAULT_SPIKES | `uint8` | 1 | Voltage spikes | +| FAULT_CELL_FAIL | `uint8` | 2 | One or more cells have failed | +| FAULT_OVER_CURRENT | `uint8` | 3 | Over-current | +| FAULT_OVER_TEMPERATURE | `uint8` | 4 | Over-temperature | +| FAULT_UNDER_TEMPERATURE | `uint8` | 5 | Under-temperature fault | +| FAULT_INCOMPATIBLE_VOLTAGE | `uint8` | 6 | Vehicle voltage is not compatible with this battery (batteries on same power rail should have similar voltage) | +| FAULT_INCOMPATIBLE_FIRMWARE | `uint8` | 7 | Battery firmware is not compatible with current autopilot firmware | +| FAULT_INCOMPATIBLE_MODEL | `uint8` | 8 | Battery model is not supported by the system | +| FAULT_HARDWARE_FAILURE | `uint8` | 9 | Hardware problem | +| FAULT_FAILED_TO_ARM | `uint8` | 10 | Battery had a problem while arming | +| FAULT_COUNT | `uint8` | 11 | Counter. Keep this as last element | ## Constants -| Name | Type | Value | Description | -| ----------------------------------------------- | -------- | ----- | ----------- | -| MESSAGE_VERSION | `uint32` | 0 | -| MAX_INSTANCES | `uint8` | 4 | +| Name | Type | Value | Description | +| --------------------------------------------- | -------- | ----- | ----------- | +| MESSAGE_VERSION | `uint32` | 0 | +| MAX_INSTANCES | `uint8` | 4 | ## Source Message diff --git a/docs/en/msg_docs/ButtonEvent.md b/docs/en/msg_docs/ButtonEvent.md index 34cf6e40e4..5f145c314e 100644 --- a/docs/en/msg_docs/ButtonEvent.md +++ b/docs/en/msg_docs/ButtonEvent.md @@ -15,9 +15,9 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| ------------------------------------------------- | ------- | ----- | ----------- | -| ORB_QUEUE_LENGTH | `uint8` | 2 | +| Name | Type | Value | Description | +| ----------------------------------------------- | ------- | ----- | ----------- | +| ORB_QUEUE_LENGTH | `uint8` | 2 | ## Source Message diff --git a/docs/en/msg_docs/CameraTrigger.md b/docs/en/msg_docs/CameraTrigger.md index fee6698518..f241941c9a 100644 --- a/docs/en/msg_docs/CameraTrigger.md +++ b/docs/en/msg_docs/CameraTrigger.md @@ -17,9 +17,9 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| ------------------------------------------------- | -------- | ----- | ----------- | -| ORB_QUEUE_LENGTH | `uint32` | 2 | +| Name | Type | Value | Description | +| ----------------------------------------------- | -------- | ----- | ----------- | +| ORB_QUEUE_LENGTH | `uint32` | 2 | ## Source Message diff --git a/docs/en/msg_docs/CellularStatus.md b/docs/en/msg_docs/CellularStatus.md index 10214361e7..a632b99d8a 100644 --- a/docs/en/msg_docs/CellularStatus.md +++ b/docs/en/msg_docs/CellularStatus.md @@ -27,40 +27,40 @@ This is currently used only for logging cell status from MAVLink. ### STATUS_FLAG {#STATUS_FLAG} -| Name | Type | Value | Description | -| ------------------------------------------------------------------- | -------- | ----- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| STATUS_FLAG_UNKNOWN | `uint16` | 1 | State unknown or not reportable | -| STATUS_FLAG_FAILED | `uint16` | 2 | Modem is unusable | -| STATUS_FLAG_INITIALIZING | `uint16` | 4 | Modem is being initialized | -| STATUS_FLAG_LOCKED | `uint16` | 8 | Modem is locked | -| STATUS_FLAG_DISABLED | `uint16` | 16 | Modem is not enabled and is powered down | -| STATUS_FLAG_DISABLING | `uint16` | 32 | Modem is currently transitioning to the STATUS_FLAG_DISABLED state | -| STATUS_FLAG_ENABLING | `uint16` | 64 | Modem is currently transitioning to the STATUS_FLAG_ENABLED state | -| STATUS_FLAG_ENABLED | `uint16` | 128 | Modem is enabled and powered on but not registered with a network provider and not available for data connections | -| STATUS_FLAG_SEARCHING | `uint16` | 256 | Modem is searching for a network provider to register | -| STATUS_FLAG_REGISTERED | `uint16` | 512 | Modem is registered with a network provider, and data connections and messaging may be available for use | -| STATUS_FLAG_DISCONNECTING | `uint16` | 1024 | Modem is disconnecting and deactivating the last active packet data bearer. This state will not be entered if more than one packet data bearer is active and one of the active bearers is deactivated | -| STATUS_FLAG_CONNECTING | `uint16` | 2048 | Modem is activating and connecting the first packet data bearer. Subsequent bearer activations when another bearer is already active do not cause this state to be entered | -| STATUS_FLAG_CONNECTED | `uint16` | 4096 | One or more packet data bearers is active and connected | +| Name | Type | Value | Description | +| ----------------------------------------------------------------- | -------- | ----- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| STATUS_FLAG_UNKNOWN | `uint16` | 1 | State unknown or not reportable | +| STATUS_FLAG_FAILED | `uint16` | 2 | Modem is unusable | +| STATUS_FLAG_INITIALIZING | `uint16` | 4 | Modem is being initialized | +| STATUS_FLAG_LOCKED | `uint16` | 8 | Modem is locked | +| STATUS_FLAG_DISABLED | `uint16` | 16 | Modem is not enabled and is powered down | +| STATUS_FLAG_DISABLING | `uint16` | 32 | Modem is currently transitioning to the STATUS_FLAG_DISABLED state | +| STATUS_FLAG_ENABLING | `uint16` | 64 | Modem is currently transitioning to the STATUS_FLAG_ENABLED state | +| STATUS_FLAG_ENABLED | `uint16` | 128 | Modem is enabled and powered on but not registered with a network provider and not available for data connections | +| STATUS_FLAG_SEARCHING | `uint16` | 256 | Modem is searching for a network provider to register | +| STATUS_FLAG_REGISTERED | `uint16` | 512 | Modem is registered with a network provider, and data connections and messaging may be available for use | +| STATUS_FLAG_DISCONNECTING | `uint16` | 1024 | Modem is disconnecting and deactivating the last active packet data bearer. This state will not be entered if more than one packet data bearer is active and one of the active bearers is deactivated | +| STATUS_FLAG_CONNECTING | `uint16` | 2048 | Modem is activating and connecting the first packet data bearer. Subsequent bearer activations when another bearer is already active do not cause this state to be entered | +| STATUS_FLAG_CONNECTED | `uint16` | 4096 | One or more packet data bearers is active and connected | ### FAILURE_REASON {#FAILURE_REASON} -| Name | Type | Value | Description | -| --------------------------------------------------------------------- | ------- | ----- | ----------------------------------------------- | -| FAILURE_REASON_NONE | `uint8` | 0 | No error | -| FAILURE_REASON_UNKNOWN | `uint8` | 1 | Error state is unknown | -| FAILURE_REASON_SIM_MISSING | `uint8` | 2 | SIM is required for the modem but missing | -| FAILURE_REASON_SIM_ERROR | `uint8` | 3 | SIM is available, but not usable for connection | +| Name | Type | Value | Description | +| ------------------------------------------------------------------- | ------- | ----- | ----------------------------------------------- | +| FAILURE_REASON_NONE | `uint8` | 0 | No error | +| FAILURE_REASON_UNKNOWN | `uint8` | 1 | Error state is unknown | +| FAILURE_REASON_SIM_MISSING | `uint8` | 2 | SIM is required for the modem but missing | +| FAILURE_REASON_SIM_ERROR | `uint8` | 3 | SIM is available, but not usable for connection | ### CELLULAR_NETWORK_RADIO_TYPE {#CELLULAR_NETWORK_RADIO_TYPE} -| Name | Type | Value | Description | -| ----------------------------------------------------------------------------------- | ------- | ----- | ----------- | -| CELLULAR_NETWORK_RADIO_TYPE_NONE | `uint8` | 0 | None | -| CELLULAR_NETWORK_RADIO_TYPE_GSM | `uint8` | 1 | GSM | -| CELLULAR_NETWORK_RADIO_TYPE_CDMA | `uint8` | 2 | CDMA | -| CELLULAR_NETWORK_RADIO_TYPE_WCDMA | `uint8` | 3 | WCDMA | -| CELLULAR_NETWORK_RADIO_TYPE_LTE | `uint8` | 4 | LTE | +| Name | Type | Value | Description | +| --------------------------------------------------------------------------------- | ------- | ----- | ----------- | +| CELLULAR_NETWORK_RADIO_TYPE_NONE | `uint8` | 0 | None | +| CELLULAR_NETWORK_RADIO_TYPE_GSM | `uint8` | 1 | GSM | +| CELLULAR_NETWORK_RADIO_TYPE_CDMA | `uint8` | 2 | CDMA | +| CELLULAR_NETWORK_RADIO_TYPE_WCDMA | `uint8` | 3 | WCDMA | +| CELLULAR_NETWORK_RADIO_TYPE_LTE | `uint8` | 4 | LTE | ## Source Message diff --git a/docs/en/msg_docs/ConfigOverrides.md b/docs/en/msg_docs/ConfigOverrides.md index 62f79f7498..89ce6c4130 100644 --- a/docs/en/msg_docs/ConfigOverrides.md +++ b/docs/en/msg_docs/ConfigOverrides.md @@ -22,12 +22,12 @@ Configurable overrides by (external) modes or mode executors. ## Constants -| Name | Type | Value | Description | -| ------------------------------------------------------------------- | -------- | ----- | ----------- | -| MESSAGE_VERSION | `uint32` | 1 | -| SOURCE_TYPE_MODE | `int8` | 0 | -| SOURCE_TYPE_MODE_EXECUTOR | `int8` | 1 | -| ORB_QUEUE_LENGTH | `uint8` | 4 | +| Name | Type | Value | Description | +| ----------------------------------------------------------------- | -------- | ----- | ----------- | +| MESSAGE_VERSION | `uint32` | 1 | +| SOURCE_TYPE_MODE | `int8` | 0 | +| SOURCE_TYPE_MODE_EXECUTOR | `int8` | 1 | +| ORB_QUEUE_LENGTH | `uint8` | 4 | ## Source Message diff --git a/docs/en/msg_docs/ConfigOverridesV0.md b/docs/en/msg_docs/ConfigOverridesV0.md index 1b882bb4b8..bd0a94d982 100644 --- a/docs/en/msg_docs/ConfigOverridesV0.md +++ b/docs/en/msg_docs/ConfigOverridesV0.md @@ -21,12 +21,12 @@ Configurable overrides by (external) modes or mode executors. ## Constants -| Name | Type | Value | Description | -| ------------------------------------------------------------------- | -------- | ----- | ----------- | -| MESSAGE_VERSION | `uint32` | 0 | -| SOURCE_TYPE_MODE | `int8` | 0 | -| SOURCE_TYPE_MODE_EXECUTOR | `int8` | 1 | -| ORB_QUEUE_LENGTH | `uint8` | 4 | +| Name | Type | Value | Description | +| ----------------------------------------------------------------- | -------- | ----- | ----------- | +| MESSAGE_VERSION | `uint32` | 0 | +| SOURCE_TYPE_MODE | `int8` | 0 | +| SOURCE_TYPE_MODE_EXECUTOR | `int8` | 1 | +| ORB_QUEUE_LENGTH | `uint8` | 4 | ## Source Message diff --git a/docs/en/msg_docs/ControlAllocatorStatus.md b/docs/en/msg_docs/ControlAllocatorStatus.md index 49d9506281..5b0c41e717 100644 --- a/docs/en/msg_docs/ControlAllocatorStatus.md +++ b/docs/en/msg_docs/ControlAllocatorStatus.md @@ -21,13 +21,13 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| --------------------------------------------------------------------------- | ------ | ----- | --------------------------------------------------------------------------------------------------------- | -| ACTUATOR_SATURATION_OK | `int8` | 0 | The actuator is not saturated | -| ACTUATOR_SATURATION_UPPER_DYN | `int8` | 1 | The actuator is saturated (with a value <= the desired value) because it cannot increase its value faster | -| ACTUATOR_SATURATION_UPPER | `int8` | 2 | The actuator is saturated (with a value <= the desired value) because it has reached its maximum value | -| ACTUATOR_SATURATION_LOWER_DYN | `int8` | -1 | The actuator is saturated (with a value >= the desired value) because it cannot decrease its value faster | -| ACTUATOR_SATURATION_LOWER | `int8` | -2 | The actuator is saturated (with a value >= the desired value) because it has reached its minimum value | +| Name | Type | Value | Description | +| ------------------------------------------------------------------------- | ------ | ----- | --------------------------------------------------------------------------------------------------------- | +| ACTUATOR_SATURATION_OK | `int8` | 0 | The actuator is not saturated | +| ACTUATOR_SATURATION_UPPER_DYN | `int8` | 1 | The actuator is saturated (with a value <= the desired value) because it cannot increase its value faster | +| ACTUATOR_SATURATION_UPPER | `int8` | 2 | The actuator is saturated (with a value <= the desired value) because it has reached its maximum value | +| ACTUATOR_SATURATION_LOWER_DYN | `int8` | -1 | The actuator is saturated (with a value >= the desired value) because it cannot decrease its value faster | +| ACTUATOR_SATURATION_LOWER | `int8` | -2 | The actuator is saturated (with a value >= the desired value) because it has reached its minimum value | ## Source Message diff --git a/docs/en/msg_docs/DatamanResponse.md b/docs/en/msg_docs/DatamanResponse.md index 62ea93d6d5..7d1039d73e 100644 --- a/docs/en/msg_docs/DatamanResponse.md +++ b/docs/en/msg_docs/DatamanResponse.md @@ -20,14 +20,14 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| ----------------------------------------------------------------------- | ------- | ----- | ----------- | -| STATUS_SUCCESS | `uint8` | 0 | -| STATUS_FAILURE_ID_ERR | `uint8` | 1 | -| STATUS_FAILURE_NO_DATA | `uint8` | 2 | -| STATUS_FAILURE_READ_FAILED | `uint8` | 3 | -| STATUS_FAILURE_WRITE_FAILED | `uint8` | 4 | -| STATUS_FAILURE_CLEAR_FAILED | `uint8` | 5 | +| Name | Type | Value | Description | +| --------------------------------------------------------------------- | ------- | ----- | ----------- | +| STATUS_SUCCESS | `uint8` | 0 | +| STATUS_FAILURE_ID_ERR | `uint8` | 1 | +| STATUS_FAILURE_NO_DATA | `uint8` | 2 | +| STATUS_FAILURE_READ_FAILED | `uint8` | 3 | +| STATUS_FAILURE_WRITE_FAILED | `uint8` | 4 | +| STATUS_FAILURE_CLEAR_FAILED | `uint8` | 5 | ## Source Message diff --git a/docs/en/msg_docs/DebugArray.md b/docs/en/msg_docs/DebugArray.md index b7fd0c81f9..22dddbaf25 100644 --- a/docs/en/msg_docs/DebugArray.md +++ b/docs/en/msg_docs/DebugArray.md @@ -17,9 +17,9 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| ------------------------------------- | ------- | ----- | ----------- | -| ARRAY_SIZE | `uint8` | 58 | +| Name | Type | Value | Description | +| ----------------------------------- | ------- | ----- | ----------- | +| ARRAY_SIZE | `uint8` | 58 | ## Source Message diff --git a/docs/en/msg_docs/DeviceInformation.md b/docs/en/msg_docs/DeviceInformation.md index 23e676b2a2..e6e5abc02d 100644 --- a/docs/en/msg_docs/DeviceInformation.md +++ b/docs/en/msg_docs/DeviceInformation.md @@ -27,24 +27,24 @@ as well as tracking of the used firmware versions on the devices. ### DEVICE_TYPE {#DEVICE_TYPE} -| Name | Type | Value | Description | -| ----------------------------------------------------------------------------------- | ------- | ----- | ---------------------- | -| DEVICE_TYPE_GENERIC | `uint8` | 0 | Generic/unknown sensor | -| DEVICE_TYPE_AIRSPEED | `uint8` | 1 | Airspeed sensor | -| DEVICE_TYPE_ESC | `uint8` | 2 | ESC | -| DEVICE_TYPE_SERVO | `uint8` | 3 | Servo | -| DEVICE_TYPE_GPS | `uint8` | 4 | GPS | -| DEVICE_TYPE_MAGNETOMETER | `uint8` | 5 | Magnetometer | -| DEVICE_TYPE_PARACHUTE | `uint8` | 6 | Parachute | -| DEVICE_TYPE_RANGEFINDER | `uint8` | 7 | Rangefinder | -| DEVICE_TYPE_WINCH | `uint8` | 8 | Winch | -| DEVICE_TYPE_BAROMETER | `uint8` | 9 | Barometer | -| DEVICE_TYPE_OPTICAL_FLOW | `uint8` | 10 | Optical flow | -| DEVICE_TYPE_ACCELEROMETER | `uint8` | 11 | Accelerometer | -| DEVICE_TYPE_GYROSCOPE | `uint8` | 12 | Gyroscope | -| DEVICE_TYPE_DIFFERENTIAL_PRESSURE | `uint8` | 13 | Differential pressure | -| DEVICE_TYPE_BATTERY | `uint8` | 14 | Battery | -| DEVICE_TYPE_HYGROMETER | `uint8` | 15 | Hygrometer | +| Name | Type | Value | Description | +| --------------------------------------------------------------------------------- | ------- | ----- | ---------------------- | +| DEVICE_TYPE_GENERIC | `uint8` | 0 | Generic/unknown sensor | +| DEVICE_TYPE_AIRSPEED | `uint8` | 1 | Airspeed sensor | +| DEVICE_TYPE_ESC | `uint8` | 2 | ESC | +| DEVICE_TYPE_SERVO | `uint8` | 3 | Servo | +| DEVICE_TYPE_GPS | `uint8` | 4 | GPS | +| DEVICE_TYPE_MAGNETOMETER | `uint8` | 5 | Magnetometer | +| DEVICE_TYPE_PARACHUTE | `uint8` | 6 | Parachute | +| DEVICE_TYPE_RANGEFINDER | `uint8` | 7 | Rangefinder | +| DEVICE_TYPE_WINCH | `uint8` | 8 | Winch | +| DEVICE_TYPE_BAROMETER | `uint8` | 9 | Barometer | +| DEVICE_TYPE_OPTICAL_FLOW | `uint8` | 10 | Optical flow | +| DEVICE_TYPE_ACCELEROMETER | `uint8` | 11 | Accelerometer | +| DEVICE_TYPE_GYROSCOPE | `uint8` | 12 | Gyroscope | +| DEVICE_TYPE_DIFFERENTIAL_PRESSURE | `uint8` | 13 | Differential pressure | +| DEVICE_TYPE_BATTERY | `uint8` | 14 | Battery | +| DEVICE_TYPE_HYGROMETER | `uint8` | 15 | Hygrometer | ## Source Message diff --git a/docs/en/msg_docs/DistanceSensor.md b/docs/en/msg_docs/DistanceSensor.md index 6bf1ea75b6..25b37cb826 100644 --- a/docs/en/msg_docs/DistanceSensor.md +++ b/docs/en/msg_docs/DistanceSensor.md @@ -28,30 +28,30 @@ DISTANCE_SENSOR message data. ## Constants -| Name | Type | Value | Description | -| ----------------------------------------------------------------------------- | ------- | ----- | ----------------------------- | -| MAV_DISTANCE_SENSOR_LASER | `uint8` | 0 | -| MAV_DISTANCE_SENSOR_ULTRASOUND | `uint8` | 1 | -| MAV_DISTANCE_SENSOR_INFRARED | `uint8` | 2 | -| MAV_DISTANCE_SENSOR_RADAR | `uint8` | 3 | -| ROTATION_YAW_0 | `uint8` | 0 | MAV_SENSOR_ROTATION_NONE | -| ROTATION_YAW_45 | `uint8` | 1 | MAV_SENSOR_ROTATION_YAW_45 | -| ROTATION_YAW_90 | `uint8` | 2 | MAV_SENSOR_ROTATION_YAW_90 | -| ROTATION_YAW_135 | `uint8` | 3 | MAV_SENSOR_ROTATION_YAW_135 | -| ROTATION_YAW_180 | `uint8` | 4 | MAV_SENSOR_ROTATION_YAW_180 | -| ROTATION_YAW_225 | `uint8` | 5 | MAV_SENSOR_ROTATION_YAW_225 | -| ROTATION_YAW_270 | `uint8` | 6 | MAV_SENSOR_ROTATION_YAW_270 | -| ROTATION_YAW_315 | `uint8` | 7 | MAV_SENSOR_ROTATION_YAW_315 | -| ROTATION_FORWARD_FACING | `uint8` | 0 | MAV_SENSOR_ROTATION_NONE | -| ROTATION_RIGHT_FACING | `uint8` | 2 | MAV_SENSOR_ROTATION_YAW_90 | -| ROTATION_BACKWARD_FACING | `uint8` | 4 | MAV_SENSOR_ROTATION_YAW_180 | -| ROTATION_LEFT_FACING | `uint8` | 6 | MAV_SENSOR_ROTATION_YAW_270 | -| ROTATION_UPWARD_FACING | `uint8` | 24 | MAV_SENSOR_ROTATION_PITCH_90 | -| ROTATION_DOWNWARD_FACING | `uint8` | 25 | MAV_SENSOR_ROTATION_PITCH_270 | -| ROTATION_CUSTOM | `uint8` | 100 | MAV_SENSOR_ROTATION_CUSTOM | -| MODE_UNKNOWN | `uint8` | 0 | -| MODE_ENABLED | `uint8` | 1 | -| MODE_DISABLED | `uint8` | 2 | +| Name | Type | Value | Description | +| --------------------------------------------------------------------------- | ------- | ----- | ----------------------------- | +| MAV_DISTANCE_SENSOR_LASER | `uint8` | 0 | +| MAV_DISTANCE_SENSOR_ULTRASOUND | `uint8` | 1 | +| MAV_DISTANCE_SENSOR_INFRARED | `uint8` | 2 | +| MAV_DISTANCE_SENSOR_RADAR | `uint8` | 3 | +| ROTATION_YAW_0 | `uint8` | 0 | MAV_SENSOR_ROTATION_NONE | +| ROTATION_YAW_45 | `uint8` | 1 | MAV_SENSOR_ROTATION_YAW_45 | +| ROTATION_YAW_90 | `uint8` | 2 | MAV_SENSOR_ROTATION_YAW_90 | +| ROTATION_YAW_135 | `uint8` | 3 | MAV_SENSOR_ROTATION_YAW_135 | +| ROTATION_YAW_180 | `uint8` | 4 | MAV_SENSOR_ROTATION_YAW_180 | +| ROTATION_YAW_225 | `uint8` | 5 | MAV_SENSOR_ROTATION_YAW_225 | +| ROTATION_YAW_270 | `uint8` | 6 | MAV_SENSOR_ROTATION_YAW_270 | +| ROTATION_YAW_315 | `uint8` | 7 | MAV_SENSOR_ROTATION_YAW_315 | +| ROTATION_FORWARD_FACING | `uint8` | 0 | MAV_SENSOR_ROTATION_NONE | +| ROTATION_RIGHT_FACING | `uint8` | 2 | MAV_SENSOR_ROTATION_YAW_90 | +| ROTATION_BACKWARD_FACING | `uint8` | 4 | MAV_SENSOR_ROTATION_YAW_180 | +| ROTATION_LEFT_FACING | `uint8` | 6 | MAV_SENSOR_ROTATION_YAW_270 | +| ROTATION_UPWARD_FACING | `uint8` | 24 | MAV_SENSOR_ROTATION_PITCH_90 | +| ROTATION_DOWNWARD_FACING | `uint8` | 25 | MAV_SENSOR_ROTATION_PITCH_270 | +| ROTATION_CUSTOM | `uint8` | 100 | MAV_SENSOR_ROTATION_CUSTOM | +| MODE_UNKNOWN | `uint8` | 0 | +| MODE_ENABLED | `uint8` | 1 | +| MODE_DISABLED | `uint8` | 2 | ## Source Message diff --git a/docs/en/msg_docs/DistanceSensorModeChangeRequest.md b/docs/en/msg_docs/DistanceSensorModeChangeRequest.md index 9e90312f14..19adb8f0d0 100644 --- a/docs/en/msg_docs/DistanceSensorModeChangeRequest.md +++ b/docs/en/msg_docs/DistanceSensorModeChangeRequest.md @@ -15,10 +15,10 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| --------------------------------------- | ------- | ----- | ----------- | -| REQUEST_OFF | `uint8` | 0 | -| REQUEST_ON | `uint8` | 1 | +| Name | Type | Value | Description | +| ------------------------------------- | ------- | ----- | ----------- | +| REQUEST_OFF | `uint8` | 0 | +| REQUEST_ON | `uint8` | 1 | ## Source Message diff --git a/docs/en/msg_docs/DronecanNodeStatus.md b/docs/en/msg_docs/DronecanNodeStatus.md index 9268356dff..9af534008d 100644 --- a/docs/en/msg_docs/DronecanNodeStatus.md +++ b/docs/en/msg_docs/DronecanNodeStatus.md @@ -20,17 +20,17 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| --------------------------------------------------------- | ------- | ----- | ------------------------------------------------------------------------------- | -| HEALTH_OK | `uint8` | 0 | The node is functioning properly. | -| HEALTH_WARNING | `uint8` | 1 | A critical parameter went out of range or the node encountered a minor failure. | -| HEALTH_ERROR | `uint8` | 2 | The node encountered a major failure. | -| HEALTH_CRITICAL | `uint8` | 3 | The node suffered a fatal malfunction. | -| MODE_OPERATIONAL | `uint8` | 0 | Normal operating mode. | -| MODE_INITIALIZATION | `uint8` | 1 | Initialization is in progress; this mode is entered immediately after startup. | -| MODE_MAINTENANCE | `uint8` | 2 | E.g. calibration, the bootloader is running, etc. | -| MODE_SOFTWARE_UPDATE | `uint8` | 3 | New software/firmware is being loaded. | -| MODE_OFFLINE | `uint8` | 7 | The node is no longer available. | +| Name | Type | Value | Description | +| ------------------------------------------------------- | ------- | ----- | ------------------------------------------------------------------------------- | +| HEALTH_OK | `uint8` | 0 | The node is functioning properly. | +| HEALTH_WARNING | `uint8` | 1 | A critical parameter went out of range or the node encountered a minor failure. | +| HEALTH_ERROR | `uint8` | 2 | The node encountered a major failure. | +| HEALTH_CRITICAL | `uint8` | 3 | The node suffered a fatal malfunction. | +| MODE_OPERATIONAL | `uint8` | 0 | Normal operating mode. | +| MODE_INITIALIZATION | `uint8` | 1 | Initialization is in progress; this mode is entered immediately after startup. | +| MODE_MAINTENANCE | `uint8` | 2 | E.g. calibration, the bootloader is running, etc. | +| MODE_SOFTWARE_UPDATE | `uint8` | 3 | New software/firmware is being loaded. | +| MODE_OFFLINE | `uint8` | 7 | The node is no longer available. | ## Source Message diff --git a/docs/en/msg_docs/Ekf2Timestamps.md b/docs/en/msg_docs/Ekf2Timestamps.md index 970bd52edf..fb58f1e819 100644 --- a/docs/en/msg_docs/Ekf2Timestamps.md +++ b/docs/en/msg_docs/Ekf2Timestamps.md @@ -23,9 +23,9 @@ this message contains the (relative) timestamps of the sensor inputs used by EKF ## Constants -| Name | Type | Value | Description | -| --------------------------------------------------------------------- | ------- | ----- | ------------------------------------------ | -| RELATIVE_TIMESTAMP_INVALID | `int16` | 32767 | (0x7fff) If one of the relative timestamps | +| Name | Type | Value | Description | +| ------------------------------------------------------------------- | ------- | ----- | ------------------------------------------ | +| RELATIVE_TIMESTAMP_INVALID | `int16` | 32767 | (0x7fff) If one of the relative timestamps | ## Source Message diff --git a/docs/en/msg_docs/EscEepromRead.md b/docs/en/msg_docs/EscEepromRead.md new file mode 100644 index 0000000000..410ebe15dc --- /dev/null +++ b/docs/en/msg_docs/EscEepromRead.md @@ -0,0 +1,41 @@ +--- +pageClass: is-wide-page +--- + +# EscEepromRead (UORB message) + +**TOPICS:** esc_eeprom_read + +## Fields + +| Name | Type | Unit [Frame] | Range/Enum | Description | +| --------- | ----------- | ------------ | ---------- | ---------------------------------------------------- | +| timestamp | `uint64` | us | | Time since system start | +| firmware | `uint8` | | | ESC firmware type (see ESC_FIRMWARE enum in MAVLink) | +| index | `uint8` | | | Index of the ESC (0 = ESC1, 1 = ESC2, etc.) | +| length | `uint16` | | | Length of valid data | +| data | `uint8[48]` | | | Raw ESC EEPROM data | + +## Constants + +| Name | Type | Value | Description | +| ----------------------------------------------- | ------- | ----- | -------------------------------- | +| ORB_QUEUE_LENGTH | `uint8` | 8 | To support 8 queued up responses | + +## Source Message + +[Source file (GitHub)](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EscEepromRead.msg) + +::: details Click here to see original file + +```c +uint64 timestamp # [us] Time since system start +uint8 firmware # [-] ESC firmware type (see ESC_FIRMWARE enum in MAVLink) +uint8 index # [-] Index of the ESC (0 = ESC1, 1 = ESC2, etc.) +uint16 length # [-] Length of valid data +uint8[48] data # [-] Raw ESC EEPROM data + +uint8 ORB_QUEUE_LENGTH = 8 # To support 8 queued up responses +``` + +::: diff --git a/docs/en/msg_docs/EscEepromWrite.md b/docs/en/msg_docs/EscEepromWrite.md new file mode 100644 index 0000000000..85691d7669 --- /dev/null +++ b/docs/en/msg_docs/EscEepromWrite.md @@ -0,0 +1,43 @@ +--- +pageClass: is-wide-page +--- + +# EscEepromWrite (UORB message) + +**TOPICS:** esc_eeprom_write + +## Fields + +| Name | Type | Unit [Frame] | Range/Enum | Description | +| ---------- | ----------- | ------------ | ---------- | ---------------------------------------------------------------------------------- | +| timestamp | `uint64` | us | | Time since system start | +| firmware | `uint8` | | | ESC firmware type (see ESC_FIRMWARE enum in MAVLink) | +| index | `uint8` | | | Index of the ESC (0 = ESC1, 1 = ESC2, etc, 255 = All) | +| length | `uint16` | | | Length of valid data | +| data | `uint8[48]` | | | Raw ESC EEPROM data | +| write_mask | `uint32[2]` | | | Bitmask indicating which bytes in the data array should be written (max 48 values) | + +## Constants + +| Name | Type | Value | Description | +| ----------------------------------------------- | ------- | ----- | ------------------------------- | +| ORB_QUEUE_LENGTH | `uint8` | 8 | To support 8 queued up requests | + +## Source Message + +[Source file (GitHub)](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EscEepromWrite.msg) + +::: details Click here to see original file + +```c +uint64 timestamp # [us] Time since system start +uint8 firmware # [-] ESC firmware type (see ESC_FIRMWARE enum in MAVLink) +uint8 index # [-] Index of the ESC (0 = ESC1, 1 = ESC2, etc, 255 = All) +uint16 length # [-] Length of valid data +uint8[48] data # [-] Raw ESC EEPROM data +uint32[2] write_mask # [-] Bitmask indicating which bytes in the data array should be written (max 48 values) + +uint8 ORB_QUEUE_LENGTH = 8 # To support 8 queued up requests +``` + +::: diff --git a/docs/en/msg_docs/EscReport.md b/docs/en/msg_docs/EscReport.md index 4babf4cc6e..ceb69748a6 100644 --- a/docs/en/msg_docs/EscReport.md +++ b/docs/en/msg_docs/EscReport.md @@ -8,49 +8,44 @@ pageClass: is-wide-page ## Fields -| Name | Type | Unit [Frame] | Range/Enum | Description | -| ----------------- | --------- | ------------ | ---------- | ------------------------------------------------------------------ | -| timestamp | `uint64` | | | time since system start (microseconds) | -| esc_errorcount | `uint32` | | | Number of reported errors by ESC - if supported | -| esc_rpm | `int32` | | | Motor RPM, negative for reverse rotation [RPM] - if supported | -| esc_voltage | `float32` | | | Voltage measured from current ESC [V] - if supported | -| esc_current | `float32` | | | Current measured from current ESC [A] - if supported | -| esc_temperature | `float32` | | | Temperature measured from current ESC [degC] - if supported | -| motor_temperature | `int16` | | | Temperature measured from current motor [degC] - if supported | -| esc_address | `uint8` | | | Address of current ESC (in most cases 1-8 / must be set by driver) | -| esc_cmdcount | `uint8` | | | Counter of number of commands | -| esc_state | `uint8` | | | State of ESC - depend on Vendor | -| actuator_function | `uint8` | | | actuator output function (one of Motor1...MotorN) | -| failures | `uint16` | | | Bitmask to indicate the internal ESC faults | -| esc_power | `int8` | | | Applied power 0-100 in % (negative values reserved) | +| Name | Type | Unit [Frame] | Range/Enum | Description | +| ----------------- | --------- | ------------ | ------------------- | ------------------------------------------------------- | +| timestamp | `uint64` | us | | Time since system start | +| esc_errorcount | `uint32` | | | Number of reported errors by ESC - if supported | +| esc_rpm | `int32` | rpm | | Motor RPM, negative for reverse rotation - if supported | +| esc_voltage | `float32` | V | | Voltage measured from current ESC - if supported | +| esc_current | `float32` | A | | Current measured from current ESC - if supported | +| esc_temperature | `float32` | degC | | Temperature measured from current ESC - if supported | +| motor_temperature | `int16` | degC | | Temperature measured from current motor - if supported | +| esc_state | `uint8` | | | State of ESC - depend on Vendor | +| actuator_function | `uint8` | | | Actuator output function (one of Motor1...MotorN) | +| failures | `uint16` | | [FAILURE](#FAILURE) | Bitmask to indicate the internal ESC faults | +| esc_power | `int8` | % | [0 : 100] | Applied power (negative values reserved) | + +## Enums + +### FAILURE {#FAILURE} + +| Name | Type | Value | Description | +| --------------------------------------------------------------------------- | ------- | ----- | ---------------------------------------------------------------------------- | +| FAILURE_OVER_CURRENT | `uint8` | 0 | (1 << 0) | +| FAILURE_OVER_VOLTAGE | `uint8` | 1 | (1 << 1) | +| FAILURE_MOTOR_OVER_TEMPERATURE | `uint8` | 2 | (1 << 2) | +| FAILURE_OVER_RPM | `uint8` | 3 | (1 << 3) | +| FAILURE_INCONSISTENT_CMD | `uint8` | 4 | (1 << 4) Set if ESC received an inconsistent command (i.e out of boundaries) | +| FAILURE_MOTOR_STUCK | `uint8` | 5 | (1 << 5) | +| FAILURE_GENERIC | `uint8` | 6 | (1 << 6) | +| FAILURE_MOTOR_WARN_TEMPERATURE | `uint8` | 7 | (1 << 7) | +| FAILURE_WARN_ESC_TEMPERATURE | `uint8` | 8 | (1 << 8) | +| FAILURE_OVER_ESC_TEMPERATURE | `uint8` | 9 | (1 << 9) | ## Constants -| Name | Type | Value | Description | -| ----------------------------------------------------------------------------- | ------- | ----- | ---------------------------------------------------------------------------- | -| ACTUATOR_FUNCTION_MOTOR1 | `uint8` | 101 | -| ACTUATOR_FUNCTION_MOTOR2 | `uint8` | 102 | -| ACTUATOR_FUNCTION_MOTOR3 | `uint8` | 103 | -| ACTUATOR_FUNCTION_MOTOR4 | `uint8` | 104 | -| ACTUATOR_FUNCTION_MOTOR5 | `uint8` | 105 | -| ACTUATOR_FUNCTION_MOTOR6 | `uint8` | 106 | -| ACTUATOR_FUNCTION_MOTOR7 | `uint8` | 107 | -| ACTUATOR_FUNCTION_MOTOR8 | `uint8` | 108 | -| ACTUATOR_FUNCTION_MOTOR9 | `uint8` | 109 | -| ACTUATOR_FUNCTION_MOTOR10 | `uint8` | 110 | -| ACTUATOR_FUNCTION_MOTOR11 | `uint8` | 111 | -| ACTUATOR_FUNCTION_MOTOR12 | `uint8` | 112 | -| FAILURE_OVER_CURRENT | `uint8` | 0 | (1 << 0) | -| FAILURE_OVER_VOLTAGE | `uint8` | 1 | (1 << 1) | -| FAILURE_MOTOR_OVER_TEMPERATURE | `uint8` | 2 | (1 << 2) | -| FAILURE_OVER_RPM | `uint8` | 3 | (1 << 3) | -| FAILURE_INCONSISTENT_CMD | `uint8` | 4 | (1 << 4) Set if ESC received an inconsistent command (i.e out of boundaries) | -| FAILURE_MOTOR_STUCK | `uint8` | 5 | (1 << 5) | -| FAILURE_GENERIC | `uint8` | 6 | (1 << 6) | -| FAILURE_MOTOR_WARN_TEMPERATURE | `uint8` | 7 | (1 << 7) | -| FAILURE_WARN_ESC_TEMPERATURE | `uint8` | 8 | (1 << 8) | -| FAILURE_OVER_ESC_TEMPERATURE | `uint8` | 9 | (1 << 9) | -| ESC_FAILURE_COUNT | `uint8` | 10 | Counter - keep it as last element! | +| Name | Type | Value | Description | +| --------------------------------------------------------------------- | ------- | ----- | --------------------------------------------------- | +| ACTUATOR_FUNCTION_MOTOR1 | `uint8` | 101 | +| ACTUATOR_FUNCTION_MOTOR_MAX | `uint8` | 112 | output_functions.yaml Motor.start + Motor.count - 1 | +| ESC_FAILURE_COUNT | `uint8` | 10 | Counter - keep it as last element! | ## Source Message @@ -59,47 +54,36 @@ pageClass: is-wide-page ::: details Click here to see original file ```c -uint64 timestamp # time since system start (microseconds) -uint32 esc_errorcount # Number of reported errors by ESC - if supported -int32 esc_rpm # Motor RPM, negative for reverse rotation [RPM] - if supported -float32 esc_voltage # Voltage measured from current ESC [V] - if supported -float32 esc_current # Current measured from current ESC [A] - if supported -float32 esc_temperature # Temperature measured from current ESC [degC] - if supported -int16 motor_temperature # Temperature measured from current motor [degC] - if supported -uint8 esc_address # Address of current ESC (in most cases 1-8 / must be set by driver) -uint8 esc_cmdcount # Counter of number of commands +uint64 timestamp # [us] Time since system start -uint8 esc_state # State of ESC - depend on Vendor +uint32 esc_errorcount # [-] Number of reported errors by ESC - if supported +int32 esc_rpm # [rpm] Motor RPM, negative for reverse rotation - if supported +float32 esc_voltage # [V] Voltage measured from current ESC - if supported +float32 esc_current # [A] Current measured from current ESC - if supported +float32 esc_temperature # [degC] Temperature measured from current ESC - if supported +int16 motor_temperature # [degC] Temperature measured from current motor - if supported -uint8 actuator_function # actuator output function (one of Motor1...MotorN) +uint8 esc_state # [-] State of ESC - depend on Vendor + +uint8 actuator_function # [-] Actuator output function (one of Motor1...MotorN) uint8 ACTUATOR_FUNCTION_MOTOR1 = 101 -uint8 ACTUATOR_FUNCTION_MOTOR2 = 102 -uint8 ACTUATOR_FUNCTION_MOTOR3 = 103 -uint8 ACTUATOR_FUNCTION_MOTOR4 = 104 -uint8 ACTUATOR_FUNCTION_MOTOR5 = 105 -uint8 ACTUATOR_FUNCTION_MOTOR6 = 106 -uint8 ACTUATOR_FUNCTION_MOTOR7 = 107 -uint8 ACTUATOR_FUNCTION_MOTOR8 = 108 -uint8 ACTUATOR_FUNCTION_MOTOR9 = 109 -uint8 ACTUATOR_FUNCTION_MOTOR10 = 110 -uint8 ACTUATOR_FUNCTION_MOTOR11 = 111 -uint8 ACTUATOR_FUNCTION_MOTOR12 = 112 +uint8 ACTUATOR_FUNCTION_MOTOR_MAX = 112 # output_functions.yaml Motor.start + Motor.count - 1 -uint16 failures # Bitmask to indicate the internal ESC faults -int8 esc_power # Applied power 0-100 in % (negative values reserved) +uint16 failures # [@enum FAILURE] Bitmask to indicate the internal ESC faults +int8 esc_power # [%] [@range 0,100] Applied power (negative values reserved) -uint8 FAILURE_OVER_CURRENT = 0 # (1 << 0) -uint8 FAILURE_OVER_VOLTAGE = 1 # (1 << 1) -uint8 FAILURE_MOTOR_OVER_TEMPERATURE = 2 # (1 << 2) -uint8 FAILURE_OVER_RPM = 3 # (1 << 3) -uint8 FAILURE_INCONSISTENT_CMD = 4 # (1 << 4) Set if ESC received an inconsistent command (i.e out of boundaries) -uint8 FAILURE_MOTOR_STUCK = 5 # (1 << 5) -uint8 FAILURE_GENERIC = 6 # (1 << 6) -uint8 FAILURE_MOTOR_WARN_TEMPERATURE = 7 # (1 << 7) -uint8 FAILURE_WARN_ESC_TEMPERATURE = 8 # (1 << 8) -uint8 FAILURE_OVER_ESC_TEMPERATURE = 9 # (1 << 9) -uint8 ESC_FAILURE_COUNT = 10 # Counter - keep it as last element! +uint8 FAILURE_OVER_CURRENT = 0 # (1 << 0) +uint8 FAILURE_OVER_VOLTAGE = 1 # (1 << 1) +uint8 FAILURE_MOTOR_OVER_TEMPERATURE = 2 # (1 << 2) +uint8 FAILURE_OVER_RPM = 3 # (1 << 3) +uint8 FAILURE_INCONSISTENT_CMD = 4 # (1 << 4) Set if ESC received an inconsistent command (i.e out of boundaries) +uint8 FAILURE_MOTOR_STUCK = 5 # (1 << 5) +uint8 FAILURE_GENERIC = 6 # (1 << 6) +uint8 FAILURE_MOTOR_WARN_TEMPERATURE = 7 # (1 << 7) +uint8 FAILURE_WARN_ESC_TEMPERATURE = 8 # (1 << 8) +uint8 FAILURE_OVER_ESC_TEMPERATURE = 9 # (1 << 9) +uint8 ESC_FAILURE_COUNT = 10 # Counter - keep it as last element! ``` ::: diff --git a/docs/en/msg_docs/EscStatus.md b/docs/en/msg_docs/EscStatus.md index 9f8b0a409a..4b1384a169 100644 --- a/docs/en/msg_docs/EscStatus.md +++ b/docs/en/msg_docs/EscStatus.md @@ -8,27 +8,34 @@ pageClass: is-wide-page ## Fields -| Name | Type | Unit [Frame] | Range/Enum | Description | -| ------------------ | -------------- | ------------ | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | -| timestamp | `uint64` | | | time since system start (microseconds) | -| counter | `uint16` | | | incremented by the writing thread everytime new data is stored | -| esc_count | `uint8` | | | number of connected ESCs | -| esc_connectiontype | `uint8` | | | how ESCs connected to the system | -| esc_online_flags | `uint8` | | | Bitmask indicating which ESC is online/offline | -| esc_armed_flags | `uint8` | | | Bitmask indicating which ESC is armed. For ESC's where the arming state is not known (returned by the ESC), the arming bits should always be set. | -| esc | `EscReport[8]` | | | +| Name | Type | Unit [Frame] | Range/Enum | Description | +| ------------------ | --------------- | ------------ | ------------------------------------------- | --------------------------------------------------------------- | +| timestamp | `uint64` | us | | Time since system start | +| counter | `uint16` | | | Incremented by the writing thread everytime new data is stored | +| esc_count | `uint8` | | | Number of connected ESCs | +| esc_connectiontype | `uint8` | | [ESC_CONNECTION_TYPE](#ESC_CONNECTION_TYPE) | How ESCs connected to the system | +| esc_online_flags | `uint16` | | | Bitmask indicating which ESC is online/offline (in motor order) | +| esc_armed_flags | `uint16` | | | Bitmask indicating which ESC is armed (in motor order) | +| esc | `EscReport[12]` | | | + +## Enums + +### ESC_CONNECTION_TYPE {#ESC_CONNECTION_TYPE} + +| Name | Type | Value | Description | +| --------------------------------------------------------------------- | ------- | ----- | ------------------------ | +| ESC_CONNECTION_TYPE_PPM | `uint8` | 0 | Traditional PPM ESC | +| ESC_CONNECTION_TYPE_SERIAL | `uint8` | 1 | Serial Bus connected ESC | +| ESC_CONNECTION_TYPE_ONESHOT | `uint8` | 2 | One Shot PPM | +| ESC_CONNECTION_TYPE_I2C | `uint8` | 3 | I2C | +| ESC_CONNECTION_TYPE_CAN | `uint8` | 4 | CAN-Bus | +| ESC_CONNECTION_TYPE_DSHOT | `uint8` | 5 | DShot | ## Constants -| Name | Type | Value | Description | -| ----------------------------------------------------------------------- | ------- | ----- | ----------------------------------------------------------------- | -| CONNECTED_ESC_MAX | `uint8` | 8 | The number of ESCs supported. Current (Q2/2013) we support 8 ESCs | -| ESC_CONNECTION_TYPE_PPM | `uint8` | 0 | Traditional PPM ESC | -| ESC_CONNECTION_TYPE_SERIAL | `uint8` | 1 | Serial Bus connected ESC | -| ESC_CONNECTION_TYPE_ONESHOT | `uint8` | 2 | One Shot PPM | -| ESC_CONNECTION_TYPE_I2C | `uint8` | 3 | I2C | -| ESC_CONNECTION_TYPE_CAN | `uint8` | 4 | CAN-Bus | -| ESC_CONNECTION_TYPE_DSHOT | `uint8` | 5 | DShot | +| Name | Type | Value | Description | +| ------------------------------------------------- | ------- | ----- | --------------------------------------------- | +| CONNECTED_ESC_MAX | `uint8` | 12 | The number of ESCs supported (Motor1-Motor12) | ## Source Message @@ -37,34 +44,38 @@ pageClass: is-wide-page ::: details Click here to see original file ```c -uint64 timestamp # time since system start (microseconds) -uint8 CONNECTED_ESC_MAX = 8 # The number of ESCs supported. Current (Q2/2013) we support 8 ESCs +uint64 timestamp # [us] Time since system start +uint8 CONNECTED_ESC_MAX = 12 # The number of ESCs supported (Motor1-Motor12) -uint8 ESC_CONNECTION_TYPE_PPM = 0 # Traditional PPM ESC -uint8 ESC_CONNECTION_TYPE_SERIAL = 1 # Serial Bus connected ESC -uint8 ESC_CONNECTION_TYPE_ONESHOT = 2 # One Shot PPM -uint8 ESC_CONNECTION_TYPE_I2C = 3 # I2C -uint8 ESC_CONNECTION_TYPE_CAN = 4 # CAN-Bus -uint8 ESC_CONNECTION_TYPE_DSHOT = 5 # DShot +uint8 ESC_CONNECTION_TYPE_PPM = 0 # Traditional PPM ESC +uint8 ESC_CONNECTION_TYPE_SERIAL = 1 # Serial Bus connected ESC +uint8 ESC_CONNECTION_TYPE_ONESHOT = 2 # One Shot PPM +uint8 ESC_CONNECTION_TYPE_I2C = 3 # I2C +uint8 ESC_CONNECTION_TYPE_CAN = 4 # CAN-Bus +uint8 ESC_CONNECTION_TYPE_DSHOT = 5 # DShot -uint16 counter # incremented by the writing thread everytime new data is stored +uint16 counter # [-] Incremented by the writing thread everytime new data is stored -uint8 esc_count # number of connected ESCs -uint8 esc_connectiontype # how ESCs connected to the system +uint8 esc_count # [-] Number of connected ESCs +uint8 esc_connectiontype # [@enum ESC_CONNECTION_TYPE] How ESCs connected to the system -uint8 esc_online_flags # Bitmask indicating which ESC is online/offline -# esc_online_flags bit 0 : Set to 1 if ESC0 is online -# esc_online_flags bit 1 : Set to 1 if ESC1 is online -# esc_online_flags bit 2 : Set to 1 if ESC2 is online -# esc_online_flags bit 3 : Set to 1 if ESC3 is online -# esc_online_flags bit 4 : Set to 1 if ESC4 is online -# esc_online_flags bit 5 : Set to 1 if ESC5 is online -# esc_online_flags bit 6 : Set to 1 if ESC6 is online -# esc_online_flags bit 7 : Set to 1 if ESC7 is online +uint16 esc_online_flags # Bitmask indicating which ESC is online/offline (in motor order) +# esc_online_flags bit 0 : Set to 1 if Motor1 is online +# esc_online_flags bit 1 : Set to 1 if Motor2 is online +# esc_online_flags bit 2 : Set to 1 if Motor3 is online +# esc_online_flags bit 3 : Set to 1 if Motor4 is online +# esc_online_flags bit 4 : Set to 1 if Motor5 is online +# esc_online_flags bit 5 : Set to 1 if Motor6 is online +# esc_online_flags bit 6 : Set to 1 if Motor7 is online +# esc_online_flags bit 7 : Set to 1 if Motor8 is online +# esc_online_flags bit 8 : Set to 1 if Motor9 is online +# esc_online_flags bit 9 : Set to 1 if Motor10 is online +# esc_online_flags bit 10: Set to 1 if Motor11 is online +# esc_online_flags bit 11: Set to 1 if Motor12 is online -uint8 esc_armed_flags # Bitmask indicating which ESC is armed. For ESC's where the arming state is not known (returned by the ESC), the arming bits should always be set. +uint16 esc_armed_flags # [-] Bitmask indicating which ESC is armed (in motor order) -EscReport[8] esc +EscReport[12] esc ``` ::: diff --git a/docs/en/msg_docs/EstimatorAidSource1d.md b/docs/en/msg_docs/EstimatorAidSource1d.md index 908495b407..3cf32e6a3f 100644 --- a/docs/en/msg_docs/EstimatorAidSource1d.md +++ b/docs/en/msg_docs/EstimatorAidSource1d.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 @@ -55,7 +55,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 diff --git a/docs/en/msg_docs/EstimatorFusionControl.md b/docs/en/msg_docs/EstimatorFusionControl.md new file mode 100644 index 0000000000..a812e03ce5 --- /dev/null +++ b/docs/en/msg_docs/EstimatorFusionControl.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 +``` + +::: diff --git a/docs/en/msg_docs/EstimatorStatus.md b/docs/en/msg_docs/EstimatorStatus.md index b07b023f3e..7f3ebf4b0c 100644 --- a/docs/en/msg_docs/EstimatorStatus.md +++ b/docs/en/msg_docs/EstimatorStatus.md @@ -51,52 +51,52 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| ------------------------------------------------------------------------------- | ------- | ----- | --------------------------------------------------------------------------------------------- | -| GPS_CHECK_FAIL_GPS_FIX | `uint8` | 0 | 0 : insufficient fix type (no 3D solution) | -| GPS_CHECK_FAIL_MIN_SAT_COUNT | `uint8` | 1 | 1 : minimum required sat count fail | -| GPS_CHECK_FAIL_MAX_PDOP | `uint8` | 2 | 2 : maximum allowed PDOP fail | -| GPS_CHECK_FAIL_MAX_HORZ_ERR | `uint8` | 3 | 3 : maximum allowed horizontal position error fail | -| GPS_CHECK_FAIL_MAX_VERT_ERR | `uint8` | 4 | 4 : maximum allowed vertical position error fail | -| GPS_CHECK_FAIL_MAX_SPD_ERR | `uint8` | 5 | 5 : maximum allowed speed error fail | -| GPS_CHECK_FAIL_MAX_HORZ_DRIFT | `uint8` | 6 | 6 : maximum allowed horizontal position drift fail - requires stationary vehicle | -| GPS_CHECK_FAIL_MAX_VERT_DRIFT | `uint8` | 7 | 7 : maximum allowed vertical position drift fail - requires stationary vehicle | -| GPS_CHECK_FAIL_MAX_HORZ_SPD_ERR | `uint8` | 8 | 8 : maximum allowed horizontal speed fail - requires stationary vehicle | -| GPS_CHECK_FAIL_MAX_VERT_SPD_ERR | `uint8` | 9 | 9 : maximum allowed vertical velocity discrepancy fail | -| GPS_CHECK_FAIL_SPOOFED | `uint8` | 10 | 10 : GPS signal is spoofed | -| GPS_CHECK_FAIL_JAMMED | `uint8` | 11 | 11 : GPS signal is jammed | -| CS_TILT_ALIGN | `uint8` | 0 | 0 - true if the filter tilt alignment is complete | -| CS_YAW_ALIGN | `uint8` | 1 | 1 - true if the filter yaw alignment is complete | -| CS_GNSS_POS | `uint8` | 2 | 2 - true if GNSS position measurements are being fused | -| CS_OPT_FLOW | `uint8` | 3 | 3 - true if optical flow measurements are being fused | -| CS_MAG_HDG | `uint8` | 4 | 4 - true if a simple magnetic yaw heading is being fused | -| CS_MAG_3D | `uint8` | 5 | 5 - true if 3-axis magnetometer measurement are being fused | -| CS_MAG_DEC | `uint8` | 6 | 6 - true if synthetic magnetic declination measurements are being fused | -| CS_IN_AIR | `uint8` | 7 | 7 - true when thought to be airborne | -| CS_WIND | `uint8` | 8 | 8 - true when wind velocity is being estimated | -| CS_BARO_HGT | `uint8` | 9 | 9 - true when baro data is being fused | -| CS_RNG_HGT | `uint8` | 10 | 10 - true when range finder data is being fused for height aiding | -| CS_GPS_HGT | `uint8` | 11 | 11 - true when GPS altitude is being fused | -| CS_EV_POS | `uint8` | 12 | 12 - true when local position data from external vision is being fused | -| CS_EV_YAW | `uint8` | 13 | 13 - true when yaw data from external vision measurements is being fused | -| CS_EV_HGT | `uint8` | 14 | 14 - true when height data from external vision measurements is being fused | -| CS_BETA | `uint8` | 15 | 15 - true when synthetic sideslip measurements are being fused | -| CS_MAG_FIELD | `uint8` | 16 | 16 - true when only the magnetic field states are updated by the magnetometer | -| CS_FIXED_WING | `uint8` | 17 | 17 - true when thought to be operating as a fixed wing vehicle with constrained sideslip | -| CS_MAG_FAULT | `uint8` | 18 | 18 - true when the magnetometer has been declared faulty and is no longer being used | -| CS_ASPD | `uint8` | 19 | 19 - true when airspeed measurements are being fused | -| CS_GND_EFFECT | `uint8` | 20 | 20 - true when when protection from ground effect induced static pressure rise is active | -| CS_RNG_STUCK | `uint8` | 21 | 21 - true when a stuck range finder sensor has been detected | -| CS_GPS_YAW | `uint8` | 22 | 22 - true when yaw (not ground course) data from a GPS receiver is being fused | -| CS_MAG_ALIGNED | `uint8` | 23 | 23 - true when the in-flight mag field alignment has been completed | -| CS_EV_VEL | `uint8` | 24 | 24 - true when local frame velocity data fusion from external vision measurements is intended | -| CS_SYNTHETIC_MAG_Z | `uint8` | 25 | 25 - true when we are using a synthesized measurement for the magnetometer Z component | -| CS_VEHICLE_AT_REST | `uint8` | 26 | 26 - true when the vehicle is at rest | -| CS_GPS_YAW_FAULT | `uint8` | 27 | 27 - true when the GNSS heading has been declared faulty and is no longer being used | -| CS_RNG_FAULT | `uint8` | 28 | 28 - true when the range finder has been declared faulty and is no longer being used | -| CS_GNSS_VEL | `uint8` | 44 | 44 - true if GNSS velocity measurement fusion is intended | -| CS_GNSS_FAULT | `uint8` | 45 | 45 - true if GNSS measurements have been declared faulty and are no longer used | -| CS_YAW_MANUAL | `uint8` | 46 | 46 - true if yaw has been set manually | +| Name | Type | Value | Description | +| ----------------------------------------------------------------------------- | ------- | ----- | --------------------------------------------------------------------------------------------- | +| GPS_CHECK_FAIL_GPS_FIX | `uint8` | 0 | 0 : insufficient fix type (no 3D solution) | +| GPS_CHECK_FAIL_MIN_SAT_COUNT | `uint8` | 1 | 1 : minimum required sat count fail | +| GPS_CHECK_FAIL_MAX_PDOP | `uint8` | 2 | 2 : maximum allowed PDOP fail | +| GPS_CHECK_FAIL_MAX_HORZ_ERR | `uint8` | 3 | 3 : maximum allowed horizontal position error fail | +| GPS_CHECK_FAIL_MAX_VERT_ERR | `uint8` | 4 | 4 : maximum allowed vertical position error fail | +| GPS_CHECK_FAIL_MAX_SPD_ERR | `uint8` | 5 | 5 : maximum allowed speed error fail | +| GPS_CHECK_FAIL_MAX_HORZ_DRIFT | `uint8` | 6 | 6 : maximum allowed horizontal position drift fail - requires stationary vehicle | +| GPS_CHECK_FAIL_MAX_VERT_DRIFT | `uint8` | 7 | 7 : maximum allowed vertical position drift fail - requires stationary vehicle | +| GPS_CHECK_FAIL_MAX_HORZ_SPD_ERR | `uint8` | 8 | 8 : maximum allowed horizontal speed fail - requires stationary vehicle | +| GPS_CHECK_FAIL_MAX_VERT_SPD_ERR | `uint8` | 9 | 9 : maximum allowed vertical velocity discrepancy fail | +| GPS_CHECK_FAIL_SPOOFED | `uint8` | 10 | 10 : GPS signal is spoofed | +| GPS_CHECK_FAIL_JAMMED | `uint8` | 11 | 11 : GPS signal is jammed | +| CS_TILT_ALIGN | `uint8` | 0 | 0 - true if the filter tilt alignment is complete | +| CS_YAW_ALIGN | `uint8` | 1 | 1 - true if the filter yaw alignment is complete | +| CS_GNSS_POS | `uint8` | 2 | 2 - true if GNSS position measurements are being fused | +| CS_OPT_FLOW | `uint8` | 3 | 3 - true if optical flow measurements are being fused | +| CS_MAG_HDG | `uint8` | 4 | 4 - true if a simple magnetic yaw heading is being fused | +| CS_MAG_3D | `uint8` | 5 | 5 - true if 3-axis magnetometer measurement are being fused | +| CS_MAG_DEC | `uint8` | 6 | 6 - true if synthetic magnetic declination measurements are being fused | +| CS_IN_AIR | `uint8` | 7 | 7 - true when thought to be airborne | +| CS_WIND | `uint8` | 8 | 8 - true when wind velocity is being estimated | +| CS_BARO_HGT | `uint8` | 9 | 9 - true when baro data is being fused | +| CS_RNG_HGT | `uint8` | 10 | 10 - true when range finder data is being fused for height aiding | +| CS_GPS_HGT | `uint8` | 11 | 11 - true when GPS altitude is being fused | +| CS_EV_POS | `uint8` | 12 | 12 - true when local position data from external vision is being fused | +| CS_EV_YAW | `uint8` | 13 | 13 - true when yaw data from external vision measurements is being fused | +| CS_EV_HGT | `uint8` | 14 | 14 - true when height data from external vision measurements is being fused | +| CS_BETA | `uint8` | 15 | 15 - true when synthetic sideslip measurements are being fused | +| CS_MAG_FIELD | `uint8` | 16 | 16 - true when only the magnetic field states are updated by the magnetometer | +| CS_FIXED_WING | `uint8` | 17 | 17 - true when thought to be operating as a fixed wing vehicle with constrained sideslip | +| CS_MAG_FAULT | `uint8` | 18 | 18 - true when the magnetometer has been declared faulty and is no longer being used | +| CS_ASPD | `uint8` | 19 | 19 - true when airspeed measurements are being fused | +| CS_GND_EFFECT | `uint8` | 20 | 20 - true when when protection from ground effect induced static pressure rise is active | +| CS_RNG_STUCK | `uint8` | 21 | 21 - true when a stuck range finder sensor has been detected | +| CS_GPS_YAW | `uint8` | 22 | 22 - true when yaw (not ground course) data from a GPS receiver is being fused | +| CS_MAG_ALIGNED | `uint8` | 23 | 23 - true when the in-flight mag field alignment has been completed | +| CS_EV_VEL | `uint8` | 24 | 24 - true when local frame velocity data fusion from external vision measurements is intended | +| CS_SYNTHETIC_MAG_Z | `uint8` | 25 | 25 - true when we are using a synthesized measurement for the magnetometer Z component | +| CS_VEHICLE_AT_REST | `uint8` | 26 | 26 - true when the vehicle is at rest | +| CS_GPS_YAW_FAULT | `uint8` | 27 | 27 - true when the GNSS heading has been declared faulty and is no longer being used | +| CS_RNG_FAULT | `uint8` | 28 | 28 - true when the range finder has been declared faulty and is no longer being used | +| CS_GNSS_VEL | `uint8` | 44 | 44 - true if GNSS velocity measurement fusion is intended | +| CS_GNSS_FAULT | `uint8` | 45 | 45 - true if GNSS measurements have been declared faulty and are no longer used | +| CS_YAW_MANUAL | `uint8` | 46 | 46 - true if yaw has been set manually | ## Source Message diff --git a/docs/en/msg_docs/EstimatorStatusFlags.md b/docs/en/msg_docs/EstimatorStatusFlags.md index 3768b26009..c1be312b00 100644 --- a/docs/en/msg_docs/EstimatorStatusFlags.md +++ b/docs/en/msg_docs/EstimatorStatusFlags.md @@ -61,6 +61,8 @@ pageClass: is-wide-page | cs_gnss_fault | `bool` | | | 45 - true if GNSS true if GNSS measurements (lat, lon, vel) have been declared faulty | | cs_yaw_manual | `bool` | | | 46 - true if yaw has been set manually | | cs_gnss_hgt_fault | `bool` | | | 47 - true if GNSS true if GNSS measurements (alt) have been declared faulty | +| cs_in_transition | `bool` | | | 48 - true if the vehicle is in vtol transition | +| cs_heading_observable | `bool` | | | 49 - true when heading is observable | | fault_status_changes | `uint32` | | | number of filter fault status (fs) changes | | fs_bad_mag_x | `bool` | | | 0 - true if the fusion of the magnetometer X-axis has encountered a numerical error | | fs_bad_mag_y | `bool` | | | 1 - true if the fusion of the magnetometer Y-axis has encountered a numerical error | @@ -135,6 +137,8 @@ bool cs_gnss_vel # 44 - true if GNSS velocity measurement fusion bool cs_gnss_fault # 45 - true if GNSS true if GNSS measurements (lat, lon, vel) have been declared faulty bool cs_yaw_manual # 46 - true if yaw has been set manually bool cs_gnss_hgt_fault # 47 - true if GNSS true if GNSS measurements (alt) have been declared faulty +bool cs_in_transition # 48 - true if the vehicle is in vtol transition +bool cs_heading_observable # 49 - true when heading is observable # fault status uint32 fault_status_changes # number of filter fault status (fs) changes diff --git a/docs/en/msg_docs/Event.md b/docs/en/msg_docs/Event.md index b32143749d..fefdadba76 100644 --- a/docs/en/msg_docs/Event.md +++ b/docs/en/msg_docs/Event.md @@ -20,10 +20,10 @@ Events interface. ## Constants -| Name | Type | Value | Description | -| ------------------------------------------------- | -------- | ----- | ----------- | -| MESSAGE_VERSION | `uint32` | 1 | -| ORB_QUEUE_LENGTH | `uint8` | 16 | +| Name | Type | Value | Description | +| ----------------------------------------------- | -------- | ----- | ----------- | +| MESSAGE_VERSION | `uint32` | 1 | +| ORB_QUEUE_LENGTH | `uint8` | 16 | ## Source Message diff --git a/docs/en/msg_docs/EventV0.md b/docs/en/msg_docs/EventV0.md index 3529c7a919..8aea29b2f0 100644 --- a/docs/en/msg_docs/EventV0.md +++ b/docs/en/msg_docs/EventV0.md @@ -20,10 +20,10 @@ this message is required here in the msg_old folder because other msg are depend ## Constants -| Name | Type | Value | Description | -| ------------------------------------------------- | -------- | ----- | ----------- | -| MESSAGE_VERSION | `uint32` | 0 | -| ORB_QUEUE_LENGTH | `uint8` | 16 | +| Name | Type | Value | Description | +| ----------------------------------------------- | -------- | ----- | ----------- | +| MESSAGE_VERSION | `uint32` | 0 | +| ORB_QUEUE_LENGTH | `uint8` | 16 | ## Source Message diff --git a/docs/en/msg_docs/FailsafeFlags.md b/docs/en/msg_docs/FailsafeFlags.md index 4d55acf155..b610696ab5 100644 --- a/docs/en/msg_docs/FailsafeFlags.md +++ b/docs/en/msg_docs/FailsafeFlags.md @@ -46,6 +46,11 @@ The flag comments are used as label for the failsafe state machine simulation | battery_warning | `uint8` | | | Battery warning level (see BatteryStatus.msg) | | battery_low_remaining_time | `bool` | | | Low battery based on remaining flight time | | battery_unhealthy | `bool` | | | Battery unhealthy | +| fd_critical_failure | `bool` | | | Critical failure (attitude limit exceeded, or external ATS) | +| fd_esc_arming_failure | `bool` | | | ESC failed to arm | +| fd_imbalanced_prop | `bool` | | | Imbalanced propeller detected | +| fd_motor_failure | `bool` | | | Motor failure | +| fd_alt_loss | `bool` | | | Uncommanded altitude loss (rotary-wing, altitude-controlled flight) | | geofence_breached | `bool` | | | Geofence breached (one or multiple) | | mission_failure | `bool` | | | Mission failure | | vtol_fixed_wing_system_failure | `bool` | | | vehicle in fixed-wing system failure failsafe mode (after quad-chute) | @@ -53,10 +58,8 @@ The flag comments are used as label for the failsafe state machine simulation | flight_time_limit_exceeded | `bool` | | | Maximum flight time exceeded | | position_accuracy_low | `bool` | | | Position estimate has dropped below threshold, but is currently still declared valid | | navigator_failure | `bool` | | | Navigator failed to execute a mode | -| fd_critical_failure | `bool` | | | Critical failure (attitude/altitude limit exceeded, or external ATS) | -| fd_esc_arming_failure | `bool` | | | ESC failed to arm | -| fd_imbalanced_prop | `bool` | | | Imbalanced propeller detected | -| fd_motor_failure | `bool` | | | Motor failure | +| parachute_unhealthy | `bool` | | | Parachute system missing or unhealthy | +| remote_id_unhealthy | `bool` | | | Remote ID (Open Drone ID) system missing or unhealthy | ## Source Message @@ -111,6 +114,13 @@ uint8 battery_warning # Battery warning level (see BatteryStatus bool battery_low_remaining_time # Low battery based on remaining flight time bool battery_unhealthy # Battery unhealthy +# Failure detector +bool fd_critical_failure # Critical failure (attitude limit exceeded, or external ATS) +bool fd_esc_arming_failure # ESC failed to arm +bool fd_imbalanced_prop # Imbalanced propeller detected +bool fd_motor_failure # Motor failure +bool fd_alt_loss # Uncommanded altitude loss (rotary-wing, altitude-controlled flight) + # Other bool geofence_breached # Geofence breached (one or multiple) bool mission_failure # Mission failure @@ -119,12 +129,8 @@ bool wind_limit_exceeded # Wind limit exceeded bool flight_time_limit_exceeded # Maximum flight time exceeded bool position_accuracy_low # Position estimate has dropped below threshold, but is currently still declared valid bool navigator_failure # Navigator failed to execute a mode - -# Failure detector -bool fd_critical_failure # Critical failure (attitude/altitude limit exceeded, or external ATS) -bool fd_esc_arming_failure # ESC failed to arm -bool fd_imbalanced_prop # Imbalanced propeller detected -bool fd_motor_failure # Motor failure +bool parachute_unhealthy # Parachute system missing or unhealthy +bool remote_id_unhealthy # Remote ID (Open Drone ID) system missing or unhealthy ``` ::: diff --git a/docs/en/msg_docs/FixedWingLateralSetpoint.md b/docs/en/msg_docs/FixedWingLateralSetpoint.md index 9bf930329b..601a8d29a1 100644 --- a/docs/en/msg_docs/FixedWingLateralSetpoint.md +++ b/docs/en/msg_docs/FixedWingLateralSetpoint.md @@ -4,7 +4,10 @@ pageClass: is-wide-page # FixedWingLateralSetpoint (UORB message) -Fixed Wing Lateral Setpoint message. Used by the fw_lateral_longitudinal_control module. At least one of course, airspeed_direction, or lateral_acceleration must be finite. +Fixed Wing Lateral Setpoint message. + +Used by the fw_lateral_longitudinal_control module +At least one of course, airspeed_direction, or lateral_acceleration must be finite. **TOPICS:** fixed_wing_lateral_setpoint @@ -12,16 +15,16 @@ Fixed Wing Lateral Setpoint message. Used by the fw_lateral_longitudinal_control | Name | Type | Unit [Frame] | Range/Enum | Description | | -------------------- | --------- | ------------ | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| timestamp | `uint64` | | | time since system start (microseconds) | +| timestamp | `uint64` | us | | Time since system start | | course | `float32` | rad | [-pi : pi] | Desired direction of travel over ground w.r.t (true) North. NAN if not controlled directly. | | airspeed_direction | `float32` | rad | [-pi : pi] | Desired horizontal angle of airspeed vector w.r.t. (true) North. Same as vehicle heading if in the absence of sideslip. NAN if not controlled directly, takes precedence over course if finite. | -| lateral_acceleration | `float32` | FRD | | Lateral acceleration setpoint. NAN if not controlled directly, used as feedforward if either course setpoint or airspeed_direction is finite. | +| lateral_acceleration | `float32` | m/s^2 [FRD] | | Lateral acceleration setpoint. NAN if not controlled directly, used as feedforward if either course setpoint or airspeed_direction is finite. | ## Constants -| Name | Type | Value | Description | -| ----------------------------------------------- | -------- | ----- | ----------- | -| MESSAGE_VERSION | `uint32` | 0 | +| Name | Type | Value | Description | +| --------------------------------------------- | -------- | ----- | ----------- | +| MESSAGE_VERSION | `uint32` | 0 | ## Source Message @@ -31,16 +34,17 @@ Fixed Wing Lateral Setpoint message. Used by the fw_lateral_longitudinal_control ```c # Fixed Wing Lateral Setpoint message +# # Used by the fw_lateral_longitudinal_control module # At least one of course, airspeed_direction, or lateral_acceleration must be finite. uint32 MESSAGE_VERSION = 0 -uint64 timestamp # time since system start (microseconds) +uint64 timestamp # [us] Time since system start -float32 course # [rad] [@range -pi, pi] Desired direction of travel over ground w.r.t (true) North. NAN if not controlled directly. -float32 airspeed_direction # [rad] [@range -pi, pi] Desired horizontal angle of airspeed vector w.r.t. (true) North. Same as vehicle heading if in the absence of sideslip. NAN if not controlled directly, takes precedence over course if finite. -float32 lateral_acceleration # [m/s^2] [FRD] Lateral acceleration setpoint. NAN if not controlled directly, used as feedforward if either course setpoint or airspeed_direction is finite. +float32 course # [rad] [@range -pi, pi] Desired direction of travel over ground w.r.t (true) North. NAN if not controlled directly. +float32 airspeed_direction # [rad] [@range -pi, pi] Desired horizontal angle of airspeed vector w.r.t. (true) North. Same as vehicle heading if in the absence of sideslip. NAN if not controlled directly, takes precedence over course if finite. +float32 lateral_acceleration # [m/s^2] [@frame FRD] Lateral acceleration setpoint. NAN if not controlled directly, used as feedforward if either course setpoint or airspeed_direction is finite. ``` ::: diff --git a/docs/en/msg_docs/FixedWingLongitudinalSetpoint.md b/docs/en/msg_docs/FixedWingLongitudinalSetpoint.md index a40237a7e3..9bb05d1b28 100644 --- a/docs/en/msg_docs/FixedWingLongitudinalSetpoint.md +++ b/docs/en/msg_docs/FixedWingLongitudinalSetpoint.md @@ -4,7 +4,11 @@ pageClass: is-wide-page # FixedWingLongitudinalSetpoint (UORB message) -Fixed Wing Longitudinal Setpoint message. Used by the fw_lateral_longitudinal_control module. If pitch_direct and throttle_direct are not both finite, then the controller relies on altitude/height_rate and equivalent_airspeed to control vertical motion. If both altitude and height_rate are NAN, the controller maintains the current altitude. +Fixed Wing Longitudinal Setpoint message. + +Used by the fw_lateral_longitudinal_control module +If pitch_direct and throttle_direct are not both finite, then the controller relies on altitude/height_rate and equivalent_airspeed to control vertical motion. +If both altitude and height_rate are NAN, the controller maintains the current altitude. **TOPICS:** fixed_wing_longitudinal_setpoint @@ -12,18 +16,18 @@ Fixed Wing Longitudinal Setpoint message. Used by the fw_lateral_longitudinal_co | Name | Type | Unit [Frame] | Range/Enum | Description | | ------------------- | --------- | ------------ | ---------- | ---------------------------------------------------------------------------------- | -| timestamp | `uint64` | | | time since system start (microseconds) | +| timestamp | `uint64` | us | | Time since system start | | altitude | `float32` | m | | Altitude setpoint AMSL, not controlled directly if NAN or if height_rate is finite | -| height_rate | `float32` | ENU | | Scalar height rate setpoint. NAN if not controlled directly | +| height_rate | `float32` | m/s [ENU] | | Scalar height rate setpoint. NAN if not controlled directly | | equivalent_airspeed | `float32` | m/s | [0 : inf] | Scalar equivalent airspeed setpoint. NAN if system default should be used | -| pitch_direct | `float32` | FRD | [-pi : pi] | NAN if not controlled, overrides total energy controller | +| pitch_direct | `float32` | rad [FRD] | [-pi : pi] | NAN if not controlled, overrides total energy controller | | throttle_direct | `float32` | norm | [0 : 1] | NAN if not controlled, overrides total energy controller | ## Constants -| Name | Type | Value | Description | -| ----------------------------------------------- | -------- | ----- | ----------- | -| MESSAGE_VERSION | `uint32` | 0 | +| Name | Type | Value | Description | +| --------------------------------------------- | -------- | ----- | ----------- | +| MESSAGE_VERSION | `uint32` | 0 | ## Source Message @@ -33,19 +37,20 @@ Fixed Wing Longitudinal Setpoint message. Used by the fw_lateral_longitudinal_co ```c # Fixed Wing Longitudinal Setpoint message +# # Used by the fw_lateral_longitudinal_control module # If pitch_direct and throttle_direct are not both finite, then the controller relies on altitude/height_rate and equivalent_airspeed to control vertical motion. # If both altitude and height_rate are NAN, the controller maintains the current altitude. uint32 MESSAGE_VERSION = 0 -uint64 timestamp # time since system start (microseconds) +uint64 timestamp # [us] Time since system start -float32 altitude # [m] Altitude setpoint AMSL, not controlled directly if NAN or if height_rate is finite -float32 height_rate # [m/s] [ENU] Scalar height rate setpoint. NAN if not controlled directly -float32 equivalent_airspeed # [m/s] [@range 0, inf] Scalar equivalent airspeed setpoint. NAN if system default should be used -float32 pitch_direct # [rad] [@range -pi, pi] [FRD] NAN if not controlled, overrides total energy controller -float32 throttle_direct # [norm] [@range 0,1] NAN if not controlled, overrides total energy controller +float32 altitude # [m] Altitude setpoint AMSL, not controlled directly if NAN or if height_rate is finite +float32 height_rate # [m/s] [@frame ENU] Scalar height rate setpoint. NAN if not controlled directly +float32 equivalent_airspeed # [m/s] [@range 0, inf] Scalar equivalent airspeed setpoint. NAN if system default should be used +float32 pitch_direct # [rad] [@range -pi, pi] [@frame FRD] NAN if not controlled, overrides total energy controller +float32 throttle_direct # [norm] [@range 0,1] NAN if not controlled, overrides total energy controller ``` ::: diff --git a/docs/en/msg_docs/FixedWingRunwayControl.md b/docs/en/msg_docs/FixedWingRunwayControl.md index 28306d58e8..db452bc2ff 100644 --- a/docs/en/msg_docs/FixedWingRunwayControl.md +++ b/docs/en/msg_docs/FixedWingRunwayControl.md @@ -19,12 +19,12 @@ Auxiliary control fields for fixed-wing runway takeoff/landing. ## Constants -| Name | Type | Value | Description | -| --------------------------------------------------------------- | ------- | ----- | ------------------------------------------------------------- | -| STATE_THROTTLE_RAMP | `uint8` | 0 | ramping up throttle | -| STATE_CLAMPED_TO_RUNWAY | `uint8` | 1 | clamped to runway, controlling yaw directly (wheel or rudder) | -| STATE_CLIMBOUT | `uint8` | 2 | climbout to safe height before navigation | -| STATE_FLYING | `uint8` | 3 | navigate freely | +| Name | Type | Value | Description | +| ------------------------------------------------------------- | ------- | ----- | ------------------------------------------------------------- | +| STATE_THROTTLE_RAMP | `uint8` | 0 | ramping up throttle | +| STATE_CLAMPED_TO_RUNWAY | `uint8` | 1 | clamped to runway, controlling yaw directly (wheel or rudder) | +| STATE_CLIMBOUT | `uint8` | 2 | climbout to safe height before navigation | +| STATE_FLYING | `uint8` | 3 | navigate freely | ## Source Message diff --git a/docs/en/msg_docs/FlightPhaseEstimation.md b/docs/en/msg_docs/FlightPhaseEstimation.md index 5ee4c1337d..ef8970eb5e 100644 --- a/docs/en/msg_docs/FlightPhaseEstimation.md +++ b/docs/en/msg_docs/FlightPhaseEstimation.md @@ -15,12 +15,12 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| --------------------------------------------------------- | ------- | ----- | ------------------------------- | -| FLIGHT_PHASE_UNKNOWN | `uint8` | 0 | vehicle flight phase is unknown | -| FLIGHT_PHASE_LEVEL | `uint8` | 1 | Vehicle is in level flight | -| FLIGHT_PHASE_DESCEND | `uint8` | 2 | vehicle is in descend | -| FLIGHT_PHASE_CLIMB | `uint8` | 3 | vehicle is climbing | +| Name | Type | Value | Description | +| ------------------------------------------------------- | ------- | ----- | ------------------------------- | +| FLIGHT_PHASE_UNKNOWN | `uint8` | 0 | vehicle flight phase is unknown | +| FLIGHT_PHASE_LEVEL | `uint8` | 1 | Vehicle is in level flight | +| FLIGHT_PHASE_DESCEND | `uint8` | 2 | vehicle is in descend | +| FLIGHT_PHASE_CLIMB | `uint8` | 3 | vehicle is climbing | ## Source Message diff --git a/docs/en/msg_docs/FuelTankStatus.md b/docs/en/msg_docs/FuelTankStatus.md index 43da180f53..3f3322d1af 100644 --- a/docs/en/msg_docs/FuelTankStatus.md +++ b/docs/en/msg_docs/FuelTankStatus.md @@ -22,11 +22,11 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| ----------------------------------------------------------- | ------- | ----- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | -| MAV_FUEL_TYPE_UNKNOWN | `uint8` | 0 | fuel type not specified. Fuel levels are normalized (i.e., maximum is 1, and other levels are relative to 1). | -| MAV_FUEL_TYPE_LIQUID | `uint8` | 1 | represents generic liquid fuels, such as gasoline or diesel. Fuel levels are measured in millilitres (ml), and flow rates in millilitres per second (ml/s). | -| MAV_FUEL_TYPE_GAS | `uint8` | 2 | represents a gas fuel, such as hydrogen, methane, or propane. Fuel levels are in kilo-Pascal (kPa), and flow rates are in milliliters per second (ml/s). | +| Name | Type | Value | Description | +| --------------------------------------------------------- | ------- | ----- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | +| MAV_FUEL_TYPE_UNKNOWN | `uint8` | 0 | fuel type not specified. Fuel levels are normalized (i.e., maximum is 1, and other levels are relative to 1). | +| MAV_FUEL_TYPE_LIQUID | `uint8` | 1 | represents generic liquid fuels, such as gasoline or diesel. Fuel levels are measured in millilitres (ml), and flow rates in millilitres per second (ml/s). | +| MAV_FUEL_TYPE_GAS | `uint8` | 2 | represents a gas fuel, such as hydrogen, methane, or propane. Fuel levels are in kilo-Pascal (kPa), and flow rates are in milliliters per second (ml/s). | ## Source Message diff --git a/docs/en/msg_docs/GeneratorStatus.md b/docs/en/msg_docs/GeneratorStatus.md index 41092269e5..50cb4d73da 100644 --- a/docs/en/msg_docs/GeneratorStatus.md +++ b/docs/en/msg_docs/GeneratorStatus.md @@ -25,31 +25,31 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| --------------------------------------------------------------------------------------------------------- | -------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| STATUS_FLAG_OFF | `uint64` | 1 | Generator is off. | -| STATUS_FLAG_READY | `uint64` | 2 | Generator is ready to start generating power. | -| STATUS_FLAG_GENERATING | `uint64` | 4 | Generator is generating power. | -| STATUS_FLAG_CHARGING | `uint64` | 8 | Generator is charging the batteries (generating enough power to charge and provide the load). | -| STATUS_FLAG_REDUCED_POWER | `uint64` | 16 | Generator is operating at a reduced maximum power. | -| STATUS_FLAG_MAXPOWER | `uint64` | 32 | Generator is providing the maximum output. | -| STATUS_FLAG_OVERTEMP_WARNING | `uint64` | 64 | Generator is near the maximum operating temperature, cooling is insufficient. | -| STATUS_FLAG_OVERTEMP_FAULT | `uint64` | 128 | Generator hit the maximum operating temperature and shutdown. | -| STATUS_FLAG_ELECTRONICS_OVERTEMP_WARNING | `uint64` | 256 | Power electronics are near the maximum operating temperature, cooling is insufficient. | -| STATUS_FLAG_ELECTRONICS_OVERTEMP_FAULT | `uint64` | 512 | Power electronics hit the maximum operating temperature and shutdown. | -| STATUS_FLAG_ELECTRONICS_FAULT | `uint64` | 1024 | Power electronics experienced a fault and shutdown. | -| STATUS_FLAG_POWERSOURCE_FAULT | `uint64` | 2048 | The power source supplying the generator failed e.g. mechanical generator stopped, tether is no longer providing power, solar cell is in shade, hydrogen reaction no longer happening. | -| STATUS_FLAG_COMMUNICATION_WARNING | `uint64` | 4096 | Generator controller having communication problems. | -| STATUS_FLAG_COOLING_WARNING | `uint64` | 8192 | Power electronic or generator cooling system error. | -| STATUS_FLAG_POWER_RAIL_FAULT | `uint64` | 16384 | Generator controller power rail experienced a fault. | -| STATUS_FLAG_OVERCURRENT_FAULT | `uint64` | 32768 | Generator controller exceeded the overcurrent threshold and shutdown to prevent damage. | -| STATUS_FLAG_BATTERY_OVERCHARGE_CURRENT_FAULT | `uint64` | 65536 | Generator controller detected a high current going into the batteries and shutdown to prevent battery damage. | -| STATUS_FLAG_OVERVOLTAGE_FAULT | `uint64` | 131072 | Generator controller exceeded it's overvoltage threshold and shutdown to prevent it exceeding the voltage rating. | -| STATUS_FLAG_BATTERY_UNDERVOLT_FAULT | `uint64` | 262144 | Batteries are under voltage (generator will not start). | -| STATUS_FLAG_START_INHIBITED | `uint64` | 524288 | Generator start is inhibited by e.g. a safety switch. | -| STATUS_FLAG_MAINTENANCE_REQUIRED | `uint64` | 1048576 | Generator requires maintenance. | -| STATUS_FLAG_WARMING_UP | `uint64` | 2097152 | Generator is not ready to generate yet. | -| STATUS_FLAG_IDLE | `uint64` | 4194304 | Generator is idle. | +| Name | Type | Value | Description | +| ------------------------------------------------------------------------------------------------------- | -------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| STATUS_FLAG_OFF | `uint64` | 1 | Generator is off. | +| STATUS_FLAG_READY | `uint64` | 2 | Generator is ready to start generating power. | +| STATUS_FLAG_GENERATING | `uint64` | 4 | Generator is generating power. | +| STATUS_FLAG_CHARGING | `uint64` | 8 | Generator is charging the batteries (generating enough power to charge and provide the load). | +| STATUS_FLAG_REDUCED_POWER | `uint64` | 16 | Generator is operating at a reduced maximum power. | +| STATUS_FLAG_MAXPOWER | `uint64` | 32 | Generator is providing the maximum output. | +| STATUS_FLAG_OVERTEMP_WARNING | `uint64` | 64 | Generator is near the maximum operating temperature, cooling is insufficient. | +| STATUS_FLAG_OVERTEMP_FAULT | `uint64` | 128 | Generator hit the maximum operating temperature and shutdown. | +| STATUS_FLAG_ELECTRONICS_OVERTEMP_WARNING | `uint64` | 256 | Power electronics are near the maximum operating temperature, cooling is insufficient. | +| STATUS_FLAG_ELECTRONICS_OVERTEMP_FAULT | `uint64` | 512 | Power electronics hit the maximum operating temperature and shutdown. | +| STATUS_FLAG_ELECTRONICS_FAULT | `uint64` | 1024 | Power electronics experienced a fault and shutdown. | +| STATUS_FLAG_POWERSOURCE_FAULT | `uint64` | 2048 | The power source supplying the generator failed e.g. mechanical generator stopped, tether is no longer providing power, solar cell is in shade, hydrogen reaction no longer happening. | +| STATUS_FLAG_COMMUNICATION_WARNING | `uint64` | 4096 | Generator controller having communication problems. | +| STATUS_FLAG_COOLING_WARNING | `uint64` | 8192 | Power electronic or generator cooling system error. | +| STATUS_FLAG_POWER_RAIL_FAULT | `uint64` | 16384 | Generator controller power rail experienced a fault. | +| STATUS_FLAG_OVERCURRENT_FAULT | `uint64` | 32768 | Generator controller exceeded the overcurrent threshold and shutdown to prevent damage. | +| STATUS_FLAG_BATTERY_OVERCHARGE_CURRENT_FAULT | `uint64` | 65536 | Generator controller detected a high current going into the batteries and shutdown to prevent battery damage. | +| STATUS_FLAG_OVERVOLTAGE_FAULT | `uint64` | 131072 | Generator controller exceeded it's overvoltage threshold and shutdown to prevent it exceeding the voltage rating. | +| STATUS_FLAG_BATTERY_UNDERVOLT_FAULT | `uint64` | 262144 | Batteries are under voltage (generator will not start). | +| STATUS_FLAG_START_INHIBITED | `uint64` | 524288 | Generator start is inhibited by e.g. a safety switch. | +| STATUS_FLAG_MAINTENANCE_REQUIRED | `uint64` | 1048576 | Generator requires maintenance. | +| STATUS_FLAG_WARMING_UP | `uint64` | 2097152 | Generator is not ready to generate yet. | +| STATUS_FLAG_IDLE | `uint64` | 4194304 | Generator is idle. | ## Source Message diff --git a/docs/en/msg_docs/GeofenceResult.md b/docs/en/msg_docs/GeofenceResult.md index 66fb6f97bd..dcfa5b2196 100644 --- a/docs/en/msg_docs/GeofenceResult.md +++ b/docs/en/msg_docs/GeofenceResult.md @@ -18,14 +18,14 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| ------------------------------------------------------- | ------- | ----- | ------------------------------- | ------ | -| GF_ACTION_NONE | `uint8` | 0 | no action on geofence violation | -| GF_ACTION_WARN | `uint8` | 1 | critical mavlink message | -| GF_ACTION_LOITER | `uint8` | 2 | switch to AUTO | LOITER | -| GF_ACTION_RTL | `uint8` | 3 | switch to AUTO | RTL | -| GF_ACTION_TERMINATE | `uint8` | 4 | flight termination | -| GF_ACTION_LAND | `uint8` | 5 | switch to AUTO | LAND | +| Name | Type | Value | Description | +| ----------------------------------------------------- | ------- | ----- | ------------------------------- | ------ | +| GF_ACTION_NONE | `uint8` | 0 | no action on geofence violation | +| GF_ACTION_WARN | `uint8` | 1 | critical mavlink message | +| GF_ACTION_LOITER | `uint8` | 2 | switch to AUTO | LOITER | +| GF_ACTION_RTL | `uint8` | 3 | switch to AUTO | RTL | +| GF_ACTION_TERMINATE | `uint8` | 4 | flight termination | +| GF_ACTION_LAND | `uint8` | 5 | switch to AUTO | LAND | ## Source Message diff --git a/docs/en/msg_docs/GeofenceStatus.md b/docs/en/msg_docs/GeofenceStatus.md index 6bde8a6566..ed988082ec 100644 --- a/docs/en/msg_docs/GeofenceStatus.md +++ b/docs/en/msg_docs/GeofenceStatus.md @@ -16,10 +16,10 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| --------------------------------------------------- | ------- | ----- | ----------- | -| GF_STATUS_LOADING | `uint8` | 0 | -| GF_STATUS_READY | `uint8` | 1 | +| Name | Type | Value | Description | +| ------------------------------------------------- | ------- | ----- | ----------- | +| GF_STATUS_LOADING | `uint8` | 0 | +| GF_STATUS_READY | `uint8` | 1 | ## Source Message diff --git a/docs/en/msg_docs/GimbalControls.md b/docs/en/msg_docs/GimbalControls.md index 0f7c46bdc6..3a75d2585b 100644 --- a/docs/en/msg_docs/GimbalControls.md +++ b/docs/en/msg_docs/GimbalControls.md @@ -16,11 +16,11 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| --------------------------------------- | ------- | ----- | ----------- | -| INDEX_ROLL | `uint8` | 0 | -| INDEX_PITCH | `uint8` | 1 | -| INDEX_YAW | `uint8` | 2 | +| Name | Type | Value | Description | +| ------------------------------------- | ------- | ----- | ----------- | +| INDEX_ROLL | `uint8` | 0 | +| INDEX_PITCH | `uint8` | 1 | +| INDEX_YAW | `uint8` | 2 | ## Source Message diff --git a/docs/en/msg_docs/GimbalDeviceAttitudeStatus.md b/docs/en/msg_docs/GimbalDeviceAttitudeStatus.md index 6dd13a0cb8..8133a321e1 100644 --- a/docs/en/msg_docs/GimbalDeviceAttitudeStatus.md +++ b/docs/en/msg_docs/GimbalDeviceAttitudeStatus.md @@ -26,15 +26,15 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| ----------------------------------------------------------------------------------- | -------- | ----- | ----------- | -| DEVICE_FLAGS_RETRACT | `uint16` | 1 | -| DEVICE_FLAGS_NEUTRAL | `uint16` | 2 | -| DEVICE_FLAGS_ROLL_LOCK | `uint16` | 4 | -| DEVICE_FLAGS_PITCH_LOCK | `uint16` | 8 | -| DEVICE_FLAGS_YAW_LOCK | `uint16` | 16 | -| DEVICE_FLAGS_YAW_IN_VEHICLE_FRAME | `uint16` | 32 | -| DEVICE_FLAGS_YAW_IN_EARTH_FRAME | `uint16` | 64 | +| Name | Type | Value | Description | +| --------------------------------------------------------------------------------- | -------- | ----- | ----------- | +| DEVICE_FLAGS_RETRACT | `uint16` | 1 | +| DEVICE_FLAGS_NEUTRAL | `uint16` | 2 | +| DEVICE_FLAGS_ROLL_LOCK | `uint16` | 4 | +| DEVICE_FLAGS_PITCH_LOCK | `uint16` | 8 | +| DEVICE_FLAGS_YAW_LOCK | `uint16` | 16 | +| DEVICE_FLAGS_YAW_IN_VEHICLE_FRAME | `uint16` | 32 | +| DEVICE_FLAGS_YAW_IN_EARTH_FRAME | `uint16` | 64 | ## Source Message diff --git a/docs/en/msg_docs/GimbalDeviceInformation.md b/docs/en/msg_docs/GimbalDeviceInformation.md index 3939d0e1a0..97439e9fba 100644 --- a/docs/en/msg_docs/GimbalDeviceInformation.md +++ b/docs/en/msg_docs/GimbalDeviceInformation.md @@ -29,20 +29,20 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| ----------------------------------------------------------------------------------------------------------- | -------- | ----- | ----------- | -| GIMBAL_DEVICE_CAP_FLAGS_HAS_RETRACT | `uint32` | 1 | -| GIMBAL_DEVICE_CAP_FLAGS_HAS_NEUTRAL | `uint32` | 2 | -| GIMBAL_DEVICE_CAP_FLAGS_HAS_ROLL_AXIS | `uint32` | 4 | -| GIMBAL_DEVICE_CAP_FLAGS_HAS_ROLL_FOLLOW | `uint32` | 8 | -| GIMBAL_DEVICE_CAP_FLAGS_HAS_ROLL_LOCK | `uint32` | 16 | -| GIMBAL_DEVICE_CAP_FLAGS_HAS_PITCH_AXIS | `uint32` | 32 | -| GIMBAL_DEVICE_CAP_FLAGS_HAS_PITCH_FOLLOW | `uint32` | 64 | -| GIMBAL_DEVICE_CAP_FLAGS_HAS_PITCH_LOCK | `uint32` | 128 | -| GIMBAL_DEVICE_CAP_FLAGS_HAS_YAW_AXIS | `uint32` | 256 | -| GIMBAL_DEVICE_CAP_FLAGS_HAS_YAW_FOLLOW | `uint32` | 512 | -| GIMBAL_DEVICE_CAP_FLAGS_HAS_YAW_LOCK | `uint32` | 1024 | -| GIMBAL_DEVICE_CAP_FLAGS_SUPPORTS_INFINITE_YAW | `uint32` | 2048 | +| Name | Type | Value | Description | +| --------------------------------------------------------------------------------------------------------- | -------- | ----- | ----------- | +| GIMBAL_DEVICE_CAP_FLAGS_HAS_RETRACT | `uint32` | 1 | +| GIMBAL_DEVICE_CAP_FLAGS_HAS_NEUTRAL | `uint32` | 2 | +| GIMBAL_DEVICE_CAP_FLAGS_HAS_ROLL_AXIS | `uint32` | 4 | +| GIMBAL_DEVICE_CAP_FLAGS_HAS_ROLL_FOLLOW | `uint32` | 8 | +| GIMBAL_DEVICE_CAP_FLAGS_HAS_ROLL_LOCK | `uint32` | 16 | +| GIMBAL_DEVICE_CAP_FLAGS_HAS_PITCH_AXIS | `uint32` | 32 | +| GIMBAL_DEVICE_CAP_FLAGS_HAS_PITCH_FOLLOW | `uint32` | 64 | +| GIMBAL_DEVICE_CAP_FLAGS_HAS_PITCH_LOCK | `uint32` | 128 | +| GIMBAL_DEVICE_CAP_FLAGS_HAS_YAW_AXIS | `uint32` | 256 | +| GIMBAL_DEVICE_CAP_FLAGS_HAS_YAW_FOLLOW | `uint32` | 512 | +| GIMBAL_DEVICE_CAP_FLAGS_HAS_YAW_LOCK | `uint32` | 1024 | +| GIMBAL_DEVICE_CAP_FLAGS_SUPPORTS_INFINITE_YAW | `uint32` | 2048 | ## Source Message diff --git a/docs/en/msg_docs/GimbalDeviceSetAttitude.md b/docs/en/msg_docs/GimbalDeviceSetAttitude.md index 7f8d77836f..6290a8c64b 100644 --- a/docs/en/msg_docs/GimbalDeviceSetAttitude.md +++ b/docs/en/msg_docs/GimbalDeviceSetAttitude.md @@ -21,13 +21,15 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| ----------------------------------------------------------------------------- | -------- | ----- | ----------- | -| GIMBAL_DEVICE_FLAGS_RETRACT | `uint32` | 1 | -| GIMBAL_DEVICE_FLAGS_NEUTRAL | `uint32` | 2 | -| GIMBAL_DEVICE_FLAGS_ROLL_LOCK | `uint32` | 4 | -| GIMBAL_DEVICE_FLAGS_PITCH_LOCK | `uint32` | 8 | -| GIMBAL_DEVICE_FLAGS_YAW_LOCK | `uint32` | 16 | +| Name | Type | Value | Description | +| ----------------------------------------------------------------------------------------------- | -------- | ----- | ----------- | +| GIMBAL_DEVICE_FLAGS_RETRACT | `uint32` | 1 | +| GIMBAL_DEVICE_FLAGS_NEUTRAL | `uint32` | 2 | +| GIMBAL_DEVICE_FLAGS_ROLL_LOCK | `uint32` | 4 | +| GIMBAL_DEVICE_FLAGS_PITCH_LOCK | `uint32` | 8 | +| GIMBAL_DEVICE_FLAGS_YAW_LOCK | `uint32` | 16 | +| GIMBAL_DEVICE_FLAGS_YAW_IN_VEHICLE_FRAME | `uint32` | 32 | +| GIMBAL_DEVICE_FLAGS_YAW_IN_EARTH_FRAME | `uint32` | 64 | ## Source Message @@ -47,6 +49,8 @@ uint32 GIMBAL_DEVICE_FLAGS_NEUTRAL = 2 uint32 GIMBAL_DEVICE_FLAGS_ROLL_LOCK = 4 uint32 GIMBAL_DEVICE_FLAGS_PITCH_LOCK = 8 uint32 GIMBAL_DEVICE_FLAGS_YAW_LOCK = 16 +uint32 GIMBAL_DEVICE_FLAGS_YAW_IN_VEHICLE_FRAME = 32 +uint32 GIMBAL_DEVICE_FLAGS_YAW_IN_EARTH_FRAME = 64 float32[4] q diff --git a/docs/en/msg_docs/GimbalManagerInformation.md b/docs/en/msg_docs/GimbalManagerInformation.md index a25d5a955f..e411fe3858 100644 --- a/docs/en/msg_docs/GimbalManagerInformation.md +++ b/docs/en/msg_docs/GimbalManagerInformation.md @@ -22,22 +22,22 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| --------------------------------------------------------------------------------------------------------------------- | -------- | ------ | ----------- | -| GIMBAL_MANAGER_CAP_FLAGS_HAS_RETRACT | `uint32` | 1 | -| GIMBAL_MANAGER_CAP_FLAGS_HAS_NEUTRAL | `uint32` | 2 | -| GIMBAL_MANAGER_CAP_FLAGS_HAS_ROLL_AXIS | `uint32` | 4 | -| GIMBAL_MANAGER_CAP_FLAGS_HAS_ROLL_FOLLOW | `uint32` | 8 | -| GIMBAL_MANAGER_CAP_FLAGS_HAS_ROLL_LOCK | `uint32` | 16 | -| GIMBAL_MANAGER_CAP_FLAGS_HAS_PITCH_AXIS | `uint32` | 32 | -| GIMBAL_MANAGER_CAP_FLAGS_HAS_PITCH_FOLLOW | `uint32` | 64 | -| GIMBAL_MANAGER_CAP_FLAGS_HAS_PITCH_LOCK | `uint32` | 128 | -| GIMBAL_MANAGER_CAP_FLAGS_HAS_YAW_AXIS | `uint32` | 256 | -| GIMBAL_MANAGER_CAP_FLAGS_HAS_YAW_FOLLOW | `uint32` | 512 | -| GIMBAL_MANAGER_CAP_FLAGS_HAS_YAW_LOCK | `uint32` | 1024 | -| GIMBAL_MANAGER_CAP_FLAGS_SUPPORTS_INFINITE_YAW | `uint32` | 2048 | -| GIMBAL_MANAGER_CAP_FLAGS_CAN_POINT_LOCATION_LOCAL | `uint32` | 65536 | -| GIMBAL_MANAGER_CAP_FLAGS_CAN_POINT_LOCATION_GLOBAL | `uint32` | 131072 | +| Name | Type | Value | Description | +| ------------------------------------------------------------------------------------------------------------------- | -------- | ------ | ----------- | +| GIMBAL_MANAGER_CAP_FLAGS_HAS_RETRACT | `uint32` | 1 | +| GIMBAL_MANAGER_CAP_FLAGS_HAS_NEUTRAL | `uint32` | 2 | +| GIMBAL_MANAGER_CAP_FLAGS_HAS_ROLL_AXIS | `uint32` | 4 | +| GIMBAL_MANAGER_CAP_FLAGS_HAS_ROLL_FOLLOW | `uint32` | 8 | +| GIMBAL_MANAGER_CAP_FLAGS_HAS_ROLL_LOCK | `uint32` | 16 | +| GIMBAL_MANAGER_CAP_FLAGS_HAS_PITCH_AXIS | `uint32` | 32 | +| GIMBAL_MANAGER_CAP_FLAGS_HAS_PITCH_FOLLOW | `uint32` | 64 | +| GIMBAL_MANAGER_CAP_FLAGS_HAS_PITCH_LOCK | `uint32` | 128 | +| GIMBAL_MANAGER_CAP_FLAGS_HAS_YAW_AXIS | `uint32` | 256 | +| GIMBAL_MANAGER_CAP_FLAGS_HAS_YAW_FOLLOW | `uint32` | 512 | +| GIMBAL_MANAGER_CAP_FLAGS_HAS_YAW_LOCK | `uint32` | 1024 | +| GIMBAL_MANAGER_CAP_FLAGS_SUPPORTS_INFINITE_YAW | `uint32` | 2048 | +| GIMBAL_MANAGER_CAP_FLAGS_CAN_POINT_LOCATION_LOCAL | `uint32` | 65536 | +| GIMBAL_MANAGER_CAP_FLAGS_CAN_POINT_LOCATION_GLOBAL | `uint32` | 131072 | ## Source Message diff --git a/docs/en/msg_docs/GimbalManagerSetAttitude.md b/docs/en/msg_docs/GimbalManagerSetAttitude.md index 67d2ce12ed..b8ff721105 100644 --- a/docs/en/msg_docs/GimbalManagerSetAttitude.md +++ b/docs/en/msg_docs/GimbalManagerSetAttitude.md @@ -24,14 +24,14 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| ------------------------------------------------------------------------------- | -------- | ----- | ----------- | -| GIMBAL_MANAGER_FLAGS_RETRACT | `uint32` | 1 | -| GIMBAL_MANAGER_FLAGS_NEUTRAL | `uint32` | 2 | -| GIMBAL_MANAGER_FLAGS_ROLL_LOCK | `uint32` | 4 | -| GIMBAL_MANAGER_FLAGS_PITCH_LOCK | `uint32` | 8 | -| GIMBAL_MANAGER_FLAGS_YAW_LOCK | `uint32` | 16 | -| ORB_QUEUE_LENGTH | `uint8` | 2 | +| Name | Type | Value | Description | +| ----------------------------------------------------------------------------- | -------- | ----- | ----------- | +| GIMBAL_MANAGER_FLAGS_RETRACT | `uint32` | 1 | +| GIMBAL_MANAGER_FLAGS_NEUTRAL | `uint32` | 2 | +| GIMBAL_MANAGER_FLAGS_ROLL_LOCK | `uint32` | 4 | +| GIMBAL_MANAGER_FLAGS_PITCH_LOCK | `uint32` | 8 | +| GIMBAL_MANAGER_FLAGS_YAW_LOCK | `uint32` | 16 | +| ORB_QUEUE_LENGTH | `uint8` | 2 | ## Source Message diff --git a/docs/en/msg_docs/GimbalManagerSetManualControl.md b/docs/en/msg_docs/GimbalManagerSetManualControl.md index e9ce204881..00de03232c 100644 --- a/docs/en/msg_docs/GimbalManagerSetManualControl.md +++ b/docs/en/msg_docs/GimbalManagerSetManualControl.md @@ -24,13 +24,13 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| ------------------------------------------------------------------------------- | -------- | ----- | ----------- | -| GIMBAL_MANAGER_FLAGS_RETRACT | `uint32` | 1 | -| GIMBAL_MANAGER_FLAGS_NEUTRAL | `uint32` | 2 | -| GIMBAL_MANAGER_FLAGS_ROLL_LOCK | `uint32` | 4 | -| GIMBAL_MANAGER_FLAGS_PITCH_LOCK | `uint32` | 8 | -| GIMBAL_MANAGER_FLAGS_YAW_LOCK | `uint32` | 16 | +| Name | Type | Value | Description | +| ----------------------------------------------------------------------------- | -------- | ----- | ----------- | +| GIMBAL_MANAGER_FLAGS_RETRACT | `uint32` | 1 | +| GIMBAL_MANAGER_FLAGS_NEUTRAL | `uint32` | 2 | +| GIMBAL_MANAGER_FLAGS_ROLL_LOCK | `uint32` | 4 | +| GIMBAL_MANAGER_FLAGS_PITCH_LOCK | `uint32` | 8 | +| GIMBAL_MANAGER_FLAGS_YAW_LOCK | `uint32` | 16 | ## Source Message diff --git a/docs/en/msg_docs/GotoSetpoint.md b/docs/en/msg_docs/GotoSetpoint.md index a656ab2dfc..0c38e78280 100644 --- a/docs/en/msg_docs/GotoSetpoint.md +++ b/docs/en/msg_docs/GotoSetpoint.md @@ -4,30 +4,36 @@ pageClass: is-wide-page # GotoSetpoint (UORB message) -Position and (optional) heading setpoints with corresponding speed constraints. Setpoints are intended as inputs to position and heading smoothers, respectively. Setpoints do not need to be kinematically consistent. Optional heading setpoints may be specified as controlled by the respective flag. Unset optional setpoints are not controlled. Unset optional constraints default to vehicle specifications. +Position and (optional) heading setpoints with corresponding speed constraints. + +Setpoints are intended as inputs to position and heading smoothers, respectively. +Setpoints do not need to be kinematically consistent. +Optional heading setpoints may be specified as controlled by the respective flag. +Unset optional setpoints are not controlled. +Unset optional constraints default to vehicle specifications. **TOPICS:** goto_setpoint ## Fields -| Name | Type | Unit [Frame] | Range/Enum | Description | -| ----------------------------- | ------------ | ------------ | ---------- | --------------------------------------------------------- | -| timestamp | `uint64` | | | time since system start (microseconds) | -| position | `float32[3]` | m | | NED local world frame | -| flag_control_heading | `bool` | | | true if heading is to be controlled | -| heading | `float32` | | | (optional) [rad] [-pi,pi] from North | -| flag_set_max_horizontal_speed | `bool` | | | true if setting a non-default horizontal speed limit | -| max_horizontal_speed | `float32` | | | (optional) [m/s] maximum speed (absolute) in the NE-plane | -| flag_set_max_vertical_speed | `bool` | | | true if setting a non-default vertical speed limit | -| max_vertical_speed | `float32` | | | (optional) [m/s] maximum speed (absolute) in the D-axis | -| flag_set_max_heading_rate | `bool` | | | true if setting a non-default heading rate limit | -| max_heading_rate | `float32` | | | (optional) [rad/s] maximum heading rate (absolute) | +| Name | Type | Unit [Frame] | Range/Enum | Description | +| ----------------------------- | ------------ | ------------ | ---------- | ---------------------------------------------------- | +| timestamp | `uint64` | us | | Time since system start | +| position | `float32[3]` | m [NED] | | NED local world frame | +| flag_control_heading | `bool` | | | true if heading is to be controlled | +| heading | `float32` | | | (optional) [rad] [-pi,pi] from North | +| flag_set_max_horizontal_speed | `bool` | | | true if setting a non-default horizontal speed limit | +| max_horizontal_speed | `float32` | m/s | | (optional) Maximum speed (absolute) in the NE-plane | +| flag_set_max_vertical_speed | `bool` | | | true if setting a non-default vertical speed limit | +| max_vertical_speed | `float32` | m/s | | (optional) Maximum speed (absolute) in the D-axis | +| flag_set_max_heading_rate | `bool` | | | true if setting a non-default heading rate limit | +| max_heading_rate | `float32` | rad/s | | (optional) Maximum heading rate (absolute) | ## Constants -| Name | Type | Value | Description | -| ----------------------------------------------- | -------- | ----- | ----------- | -| MESSAGE_VERSION | `uint32` | 0 | +| Name | Type | Value | Description | +| --------------------------------------------- | -------- | ----- | ----------- | +| MESSAGE_VERSION | `uint32` | 0 | ## Source Message @@ -37,31 +43,32 @@ Position and (optional) heading setpoints with corresponding speed constraints. ```c # Position and (optional) heading setpoints with corresponding speed constraints -# Setpoints are intended as inputs to position and heading smoothers, respectively -# Setpoints do not need to be kinematically consistent -# Optional heading setpoints may be specified as controlled by the respective flag -# Unset optional setpoints are not controlled -# Unset optional constraints default to vehicle specifications +# +# Setpoints are intended as inputs to position and heading smoothers, respectively. +# Setpoints do not need to be kinematically consistent. +# Optional heading setpoints may be specified as controlled by the respective flag. +# Unset optional setpoints are not controlled. +# Unset optional constraints default to vehicle specifications. uint32 MESSAGE_VERSION = 0 -uint64 timestamp # time since system start (microseconds) +uint64 timestamp # [us] Time since system start # setpoints -float32[3] position # [m] NED local world frame +float32[3] position # [m] [@frame NED] NED local world frame bool flag_control_heading # true if heading is to be controlled float32 heading # (optional) [rad] [-pi,pi] from North # constraints bool flag_set_max_horizontal_speed # true if setting a non-default horizontal speed limit -float32 max_horizontal_speed # (optional) [m/s] maximum speed (absolute) in the NE-plane +float32 max_horizontal_speed # [m/s] (optional) Maximum speed (absolute) in the NE-plane bool flag_set_max_vertical_speed # true if setting a non-default vertical speed limit -float32 max_vertical_speed # (optional) [m/s] maximum speed (absolute) in the D-axis +float32 max_vertical_speed # [m/s] (optional) Maximum speed (absolute) in the D-axis bool flag_set_max_heading_rate # true if setting a non-default heading rate limit -float32 max_heading_rate # (optional) [rad/s] maximum heading rate (absolute) +float32 max_heading_rate # [rad/s] (optional) Maximum heading rate (absolute) ``` ::: diff --git a/docs/en/msg_docs/GpioConfig.md b/docs/en/msg_docs/GpioConfig.md index f8b54041c1..cb83f527b7 100644 --- a/docs/en/msg_docs/GpioConfig.md +++ b/docs/en/msg_docs/GpioConfig.md @@ -20,19 +20,19 @@ GPIO configuration. ## Constants -| Name | Type | Value | Description | -| --------------------------------------------------------------- | -------- | ----- | ----------- | -| INPUT | `uint32` | 0 | 0x0000 | -| OUTPUT | `uint32` | 1 | 0x0001 | -| PULLUP | `uint32` | 16 | 0x0010 | -| PULLDOWN | `uint32` | 32 | 0x0020 | -| OPENDRAIN | `uint32` | 256 | 0x0100 | -| INPUT_FLOATING | `uint32` | 0 | 0x0000 | -| INPUT_PULLUP | `uint32` | 16 | 0x0010 | -| INPUT_PULLDOWN | `uint32` | 32 | 0x0020 | -| OUTPUT_PUSHPULL | `uint32` | 0 | 0x0000 | -| OUTPUT_OPENDRAIN | `uint32` | 256 | 0x0100 | -| OUTPUT_OPENDRAIN_PULLUP | `uint32` | 272 | 0x0110 | +| Name | Type | Value | Description | +| ------------------------------------------------------------- | -------- | ----- | ----------- | +| INPUT | `uint32` | 0 | 0x0000 | +| OUTPUT | `uint32` | 1 | 0x0001 | +| PULLUP | `uint32` | 16 | 0x0010 | +| PULLDOWN | `uint32` | 32 | 0x0020 | +| OPENDRAIN | `uint32` | 256 | 0x0100 | +| INPUT_FLOATING | `uint32` | 0 | 0x0000 | +| INPUT_PULLUP | `uint32` | 16 | 0x0010 | +| INPUT_PULLDOWN | `uint32` | 32 | 0x0020 | +| OUTPUT_PUSHPULL | `uint32` | 0 | 0x0000 | +| OUTPUT_OPENDRAIN | `uint32` | 256 | 0x0100 | +| OUTPUT_OPENDRAIN_PULLUP | `uint32` | 272 | 0x0110 | ## Source Message diff --git a/docs/en/msg_docs/GpioIn.md b/docs/en/msg_docs/GpioIn.md index f3af80cd4e..b14de7dcf4 100644 --- a/docs/en/msg_docs/GpioIn.md +++ b/docs/en/msg_docs/GpioIn.md @@ -18,9 +18,9 @@ GPIO mask and state. ## Constants -| Name | Type | Value | Description | -| ------------------------------------------- | ------- | ----- | ----------- | -| MAX_INSTANCES | `uint8` | 8 | +| Name | Type | Value | Description | +| ----------------------------------------- | ------- | ----- | ----------- | +| MAX_INSTANCES | `uint8` | 8 | ## Source Message diff --git a/docs/en/msg_docs/GpsDump.md b/docs/en/msg_docs/GpsDump.md index 888a0a825f..36ece90073 100644 --- a/docs/en/msg_docs/GpsDump.md +++ b/docs/en/msg_docs/GpsDump.md @@ -20,11 +20,11 @@ This message is used to dump the raw gps communication to the log. ## Constants -| Name | Type | Value | Description | -| ----------------------------------------------------- | ------- | ----- | ----------- | -| INSTANCE_MAIN | `uint8` | 0 | -| INSTANCE_SECONDARY | `uint8` | 1 | -| ORB_QUEUE_LENGTH | `uint8` | 16 | +| Name | Type | Value | Description | +| --------------------------------------------------- | ------- | ----- | ----------- | +| INSTANCE_MAIN | `uint8` | 0 | +| INSTANCE_SECONDARY | `uint8` | 1 | +| ORB_QUEUE_LENGTH | `uint8` | 16 | ## Source Message diff --git a/docs/en/msg_docs/GpsInjectData.md b/docs/en/msg_docs/GpsInjectData.md index 4bbcb5986d..3a109df62f 100644 --- a/docs/en/msg_docs/GpsInjectData.md +++ b/docs/en/msg_docs/GpsInjectData.md @@ -18,10 +18,10 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| ------------------------------------------------- | ------- | ----- | ----------- | -| ORB_QUEUE_LENGTH | `uint8` | 8 | -| MAX_INSTANCES | `uint8` | 2 | +| Name | Type | Value | Description | +| ----------------------------------------------- | ------- | ----- | ----------- | +| ORB_QUEUE_LENGTH | `uint8` | 8 | +| MAX_INSTANCES | `uint8` | 2 | ## Source Message diff --git a/docs/en/msg_docs/Gripper.md b/docs/en/msg_docs/Gripper.md index 8fcda0cacc..c5c52a4ecb 100644 --- a/docs/en/msg_docs/Gripper.md +++ b/docs/en/msg_docs/Gripper.md @@ -17,10 +17,10 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| ----------------------------------------------- | ------ | ----- | ----------- | -| COMMAND_GRAB | `int8` | 0 | -| COMMAND_RELEASE | `int8` | 1 | +| Name | Type | Value | Description | +| --------------------------------------------- | ------ | ----- | ----------- | +| COMMAND_GRAB | `int8` | 0 | +| COMMAND_RELEASE | `int8` | 1 | ## Source Message diff --git a/docs/en/msg_docs/HeaterStatus.md b/docs/en/msg_docs/HeaterStatus.md index 431b621226..129e0c493d 100644 --- a/docs/en/msg_docs/HeaterStatus.md +++ b/docs/en/msg_docs/HeaterStatus.md @@ -25,10 +25,10 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| ------------------------------------- | ------- | ----- | ----------- | -| MODE_GPIO | `uint8` | 1 | -| MODE_PX4IO | `uint8` | 2 | +| Name | Type | Value | Description | +| ----------------------------------- | ------- | ----- | ----------- | +| MODE_GPIO | `uint8` | 1 | +| MODE_PX4IO | `uint8` | 2 | ## Source Message diff --git a/docs/en/msg_docs/HomePosition.md b/docs/en/msg_docs/HomePosition.md index ed5b43dc3c..f41cca55a1 100644 --- a/docs/en/msg_docs/HomePosition.md +++ b/docs/en/msg_docs/HomePosition.md @@ -30,9 +30,9 @@ GPS home position in WGS84 coordinates. ## Constants -| Name | Type | Value | Description | -| ----------------------------------------------- | -------- | ----- | ----------- | -| MESSAGE_VERSION | `uint32` | 1 | +| Name | Type | Value | Description | +| --------------------------------------------- | -------- | ----- | ----------- | +| MESSAGE_VERSION | `uint32` | 1 | ## Source Message diff --git a/docs/en/msg_docs/HomePositionV0.md b/docs/en/msg_docs/HomePositionV0.md index fc9e0fd799..38ab01055d 100644 --- a/docs/en/msg_docs/HomePositionV0.md +++ b/docs/en/msg_docs/HomePositionV0.md @@ -28,9 +28,9 @@ GPS home position in WGS84 coordinates. ## Constants -| Name | Type | Value | Description | -| ----------------------------------------------- | -------- | ----- | ----------- | -| MESSAGE_VERSION | `uint32` | 0 | +| Name | Type | Value | Description | +| --------------------------------------------- | -------- | ----- | ----------- | +| MESSAGE_VERSION | `uint32` | 0 | ## Source Message diff --git a/docs/en/msg_docs/InputRc.md b/docs/en/msg_docs/InputRc.md index 9ad672ebc8..1fdb8607d7 100644 --- a/docs/en/msg_docs/InputRc.md +++ b/docs/en/msg_docs/InputRc.md @@ -28,26 +28,26 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| ------------------------------------------------------------------------------- | ------- | ----- | -------------------------------------------------------------------------------- | -| RC_INPUT_SOURCE_UNKNOWN | `uint8` | 0 | -| RC_INPUT_SOURCE_PX4FMU_PPM | `uint8` | 1 | -| RC_INPUT_SOURCE_PX4IO_PPM | `uint8` | 2 | -| RC_INPUT_SOURCE_PX4IO_SPEKTRUM | `uint8` | 3 | -| RC_INPUT_SOURCE_PX4IO_SBUS | `uint8` | 4 | -| RC_INPUT_SOURCE_PX4IO_ST24 | `uint8` | 5 | -| RC_INPUT_SOURCE_MAVLINK | `uint8` | 6 | -| RC_INPUT_SOURCE_QURT | `uint8` | 7 | -| RC_INPUT_SOURCE_PX4FMU_SPEKTRUM | `uint8` | 8 | -| RC_INPUT_SOURCE_PX4FMU_SBUS | `uint8` | 9 | -| RC_INPUT_SOURCE_PX4FMU_ST24 | `uint8` | 10 | -| RC_INPUT_SOURCE_PX4FMU_SUMD | `uint8` | 11 | -| RC_INPUT_SOURCE_PX4FMU_DSM | `uint8` | 12 | -| RC_INPUT_SOURCE_PX4IO_SUMD | `uint8` | 13 | -| RC_INPUT_SOURCE_PX4FMU_CRSF | `uint8` | 14 | -| RC_INPUT_SOURCE_PX4FMU_GHST | `uint8` | 15 | -| RC_INPUT_MAX_CHANNELS | `uint8` | 18 | Maximum number of R/C input channels in the system. S.Bus has up to 18 channels. | -| RSSI_MAX | `int8` | 100 | +| Name | Type | Value | Description | +| ----------------------------------------------------------------------------- | ------- | ----- | -------------------------------------------------------------------------------- | +| RC_INPUT_SOURCE_UNKNOWN | `uint8` | 0 | +| RC_INPUT_SOURCE_PX4FMU_PPM | `uint8` | 1 | +| RC_INPUT_SOURCE_PX4IO_PPM | `uint8` | 2 | +| RC_INPUT_SOURCE_PX4IO_SPEKTRUM | `uint8` | 3 | +| RC_INPUT_SOURCE_PX4IO_SBUS | `uint8` | 4 | +| RC_INPUT_SOURCE_PX4IO_ST24 | `uint8` | 5 | +| RC_INPUT_SOURCE_MAVLINK | `uint8` | 6 | +| RC_INPUT_SOURCE_QURT | `uint8` | 7 | +| RC_INPUT_SOURCE_PX4FMU_SPEKTRUM | `uint8` | 8 | +| RC_INPUT_SOURCE_PX4FMU_SBUS | `uint8` | 9 | +| RC_INPUT_SOURCE_PX4FMU_ST24 | `uint8` | 10 | +| RC_INPUT_SOURCE_PX4FMU_SUMD | `uint8` | 11 | +| RC_INPUT_SOURCE_PX4FMU_DSM | `uint8` | 12 | +| RC_INPUT_SOURCE_PX4IO_SUMD | `uint8` | 13 | +| RC_INPUT_SOURCE_PX4FMU_CRSF | `uint8` | 14 | +| RC_INPUT_SOURCE_PX4FMU_GHST | `uint8` | 15 | +| RC_INPUT_MAX_CHANNELS | `uint8` | 18 | Maximum number of R/C input channels in the system. S.Bus has up to 18 channels. | +| RSSI_MAX | `int8` | 100 | ## Source Message diff --git a/docs/en/msg_docs/InternalCombustionEngineStatus.md b/docs/en/msg_docs/InternalCombustionEngineStatus.md index 4fd2cb5662..67655c0e4b 100644 --- a/docs/en/msg_docs/InternalCombustionEngineStatus.md +++ b/docs/en/msg_docs/InternalCombustionEngineStatus.md @@ -36,36 +36,36 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| --------------------------------------------------------------------------------------------- | -------- | ------ | ------------------------------------------------------ | -| STATE_STOPPED | `uint8` | 0 | The engine is not running. This is the default state. | -| STATE_STARTING | `uint8` | 1 | The engine is starting. This is a transient state. | -| STATE_RUNNING | `uint8` | 2 | The engine is running normally. | -| STATE_FAULT | `uint8` | 3 | The engine can no longer function. | -| FLAG_GENERAL_ERROR | `uint32` | 1 | General error. | -| FLAG_CRANKSHAFT_SENSOR_ERROR_SUPPORTED | `uint32` | 2 | Error of the crankshaft sensor. This flag is optional. | -| FLAG_CRANKSHAFT_SENSOR_ERROR | `uint32` | 4 | -| FLAG_TEMPERATURE_SUPPORTED | `uint32` | 8 | Temperature levels. These flags are optional | -| FLAG_TEMPERATURE_BELOW_NOMINAL | `uint32` | 16 | Under-temperature warning | -| FLAG_TEMPERATURE_ABOVE_NOMINAL | `uint32` | 32 | Over-temperature warning | -| FLAG_TEMPERATURE_OVERHEATING | `uint32` | 64 | Critical overheating | -| FLAG_TEMPERATURE_EGT_ABOVE_NOMINAL | `uint32` | 128 | Exhaust gas over-temperature warning | -| FLAG_FUEL_PRESSURE_SUPPORTED | `uint32` | 256 | Fuel pressure. These flags are optional | -| FLAG_FUEL_PRESSURE_BELOW_NOMINAL | `uint32` | 512 | Under-pressure warning | -| FLAG_FUEL_PRESSURE_ABOVE_NOMINAL | `uint32` | 1024 | Over-pressure warning | -| FLAG_DETONATION_SUPPORTED | `uint32` | 2048 | Detonation warning. This flag is optional. | -| FLAG_DETONATION_OBSERVED | `uint32` | 4096 | Detonation condition observed warning | -| FLAG_MISFIRE_SUPPORTED | `uint32` | 8192 | Misfire warning. This flag is optional. | -| FLAG_MISFIRE_OBSERVED | `uint32` | 16384 | Misfire condition observed warning | -| FLAG_OIL_PRESSURE_SUPPORTED | `uint32` | 32768 | Oil pressure. These flags are optional | -| FLAG_OIL_PRESSURE_BELOW_NOMINAL | `uint32` | 65536 | Under-pressure warning | -| FLAG_OIL_PRESSURE_ABOVE_NOMINAL | `uint32` | 131072 | Over-pressure warning | -| FLAG_DEBRIS_SUPPORTED | `uint32` | 262144 | Debris warning. This flag is optional | -| FLAG_DEBRIS_DETECTED | `uint32` | 524288 | Detection of debris warning | -| SPARK_PLUG_SINGLE | `uint8` | 0 | -| SPARK_PLUG_FIRST_ACTIVE | `uint8` | 1 | -| SPARK_PLUG_SECOND_ACTIVE | `uint8` | 2 | -| SPARK_PLUG_BOTH_ACTIVE | `uint8` | 3 | +| Name | Type | Value | Description | +| ------------------------------------------------------------------------------------------- | -------- | ------ | ------------------------------------------------------ | +| STATE_STOPPED | `uint8` | 0 | The engine is not running. This is the default state. | +| STATE_STARTING | `uint8` | 1 | The engine is starting. This is a transient state. | +| STATE_RUNNING | `uint8` | 2 | The engine is running normally. | +| STATE_FAULT | `uint8` | 3 | The engine can no longer function. | +| FLAG_GENERAL_ERROR | `uint32` | 1 | General error. | +| FLAG_CRANKSHAFT_SENSOR_ERROR_SUPPORTED | `uint32` | 2 | Error of the crankshaft sensor. This flag is optional. | +| FLAG_CRANKSHAFT_SENSOR_ERROR | `uint32` | 4 | +| FLAG_TEMPERATURE_SUPPORTED | `uint32` | 8 | Temperature levels. These flags are optional | +| FLAG_TEMPERATURE_BELOW_NOMINAL | `uint32` | 16 | Under-temperature warning | +| FLAG_TEMPERATURE_ABOVE_NOMINAL | `uint32` | 32 | Over-temperature warning | +| FLAG_TEMPERATURE_OVERHEATING | `uint32` | 64 | Critical overheating | +| FLAG_TEMPERATURE_EGT_ABOVE_NOMINAL | `uint32` | 128 | Exhaust gas over-temperature warning | +| FLAG_FUEL_PRESSURE_SUPPORTED | `uint32` | 256 | Fuel pressure. These flags are optional | +| FLAG_FUEL_PRESSURE_BELOW_NOMINAL | `uint32` | 512 | Under-pressure warning | +| FLAG_FUEL_PRESSURE_ABOVE_NOMINAL | `uint32` | 1024 | Over-pressure warning | +| FLAG_DETONATION_SUPPORTED | `uint32` | 2048 | Detonation warning. This flag is optional. | +| FLAG_DETONATION_OBSERVED | `uint32` | 4096 | Detonation condition observed warning | +| FLAG_MISFIRE_SUPPORTED | `uint32` | 8192 | Misfire warning. This flag is optional. | +| FLAG_MISFIRE_OBSERVED | `uint32` | 16384 | Misfire condition observed warning | +| FLAG_OIL_PRESSURE_SUPPORTED | `uint32` | 32768 | Oil pressure. These flags are optional | +| FLAG_OIL_PRESSURE_BELOW_NOMINAL | `uint32` | 65536 | Under-pressure warning | +| FLAG_OIL_PRESSURE_ABOVE_NOMINAL | `uint32` | 131072 | Over-pressure warning | +| FLAG_DEBRIS_SUPPORTED | `uint32` | 262144 | Debris warning. This flag is optional | +| FLAG_DEBRIS_DETECTED | `uint32` | 524288 | Detection of debris warning | +| SPARK_PLUG_SINGLE | `uint8` | 0 | +| SPARK_PLUG_FIRST_ACTIVE | `uint8` | 1 | +| SPARK_PLUG_SECOND_ACTIVE | `uint8` | 2 | +| SPARK_PLUG_BOTH_ACTIVE | `uint8` | 3 | ## Source Message diff --git a/docs/en/msg_docs/LandingGear.md b/docs/en/msg_docs/LandingGear.md index 0abcc5b2b2..92438ee5aa 100644 --- a/docs/en/msg_docs/LandingGear.md +++ b/docs/en/msg_docs/LandingGear.md @@ -15,11 +15,11 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| ----------------------------------- | ------ | ----- | ---------------------- | -| GEAR_UP | `int8` | 1 | landing gear up | -| GEAR_DOWN | `int8` | -1 | landing gear down | -| GEAR_KEEP | `int8` | 0 | keep the current state | +| Name | Type | Value | Description | +| --------------------------------- | ------ | ----- | ---------------------- | +| GEAR_UP | `int8` | 1 | landing gear up | +| GEAR_DOWN | `int8` | -1 | landing gear down | +| GEAR_KEEP | `int8` | 0 | keep the current state | ## Source Message diff --git a/docs/en/msg_docs/LateralControlConfiguration.md b/docs/en/msg_docs/LateralControlConfiguration.md index a90bddb9fe..08e714ad7c 100644 --- a/docs/en/msg_docs/LateralControlConfiguration.md +++ b/docs/en/msg_docs/LateralControlConfiguration.md @@ -4,7 +4,9 @@ pageClass: is-wide-page # LateralControlConfiguration (UORB message) -Fixed Wing Lateral Control Configuration message. Used by the fw_lateral_longitudinal_control module to constrain FixedWingLateralSetpoint messages. +Fixed Wing Lateral Control Configuration message. + +Used by the fw_lateral_longitudinal_control module to constrain FixedWingLateralSetpoint messages. **TOPICS:** lateral_control_configuration @@ -12,14 +14,14 @@ Fixed Wing Lateral Control Configuration message. Used by the fw_lateral_longitu | Name | Type | Unit [Frame] | Range/Enum | Description | | ----------------- | --------- | ------------ | ---------- | ---------------------------------------------------------------------------- | -| timestamp | `uint64` | | | time since system start (microseconds) | -| lateral_accel_max | `float32` | m/s^2 | | currently maps to a maximum roll angle, accel_max = tan(roll_max) \* GRAVITY | +| timestamp | `uint64` | us | | Time since system start | +| lateral_accel_max | `float32` | m/s^2 | | Currently maps to a maximum roll angle, accel_max = tan(roll_max) \* GRAVITY | ## Constants -| Name | Type | Value | Description | -| ----------------------------------------------- | -------- | ----- | ----------- | -| MESSAGE_VERSION | `uint32` | 0 | +| Name | Type | Value | Description | +| --------------------------------------------- | -------- | ----- | ----------- | +| MESSAGE_VERSION | `uint32` | 0 | ## Source Message @@ -29,13 +31,14 @@ Fixed Wing Lateral Control Configuration message. Used by the fw_lateral_longitu ```c # Fixed Wing Lateral Control Configuration message +# # Used by the fw_lateral_longitudinal_control module to constrain FixedWingLateralSetpoint messages. uint32 MESSAGE_VERSION = 0 -uint64 timestamp # time since system start (microseconds) +uint64 timestamp # [us] Time since system start -float32 lateral_accel_max # [m/s^2] currently maps to a maximum roll angle, accel_max = tan(roll_max) * GRAVITY +float32 lateral_accel_max # [m/s^2] Currently maps to a maximum roll angle, accel_max = tan(roll_max) * GRAVITY ``` ::: diff --git a/docs/en/msg_docs/LaunchDetectionStatus.md b/docs/en/msg_docs/LaunchDetectionStatus.md index 13c5ff81f4..4db2d09153 100644 --- a/docs/en/msg_docs/LaunchDetectionStatus.md +++ b/docs/en/msg_docs/LaunchDetectionStatus.md @@ -18,11 +18,11 @@ Status of the launch detection state machine (fixed-wing only). ## Constants -| Name | Type | Value | Description | -| ----------------------------------------------------------------------------------------- | ------- | ----- | ------------------------------------------------------------------------------------------------- | -| STATE_WAITING_FOR_LAUNCH | `uint8` | 0 | waiting for launch | -| STATE_LAUNCH_DETECTED_DISABLED_MOTOR | `uint8` | 1 | launch detected, but keep motor(s) disabled (e.g. because it can't spin freely while on catapult) | -| STATE_FLYING | `uint8` | 2 | launch detected, use normal takeoff/flying configuration | +| Name | Type | Value | Description | +| --------------------------------------------------------------------------------------- | ------- | ----- | ------------------------------------------------------------------------------------------------- | +| STATE_WAITING_FOR_LAUNCH | `uint8` | 0 | waiting for launch | +| STATE_LAUNCH_DETECTED_DISABLED_MOTOR | `uint8` | 1 | launch detected, but keep motor(s) disabled (e.g. because it can't spin freely while on catapult) | +| STATE_FLYING | `uint8` | 2 | launch detected, use normal takeoff/flying configuration | ## Source Message diff --git a/docs/en/msg_docs/LedControl.md b/docs/en/msg_docs/LedControl.md index 0b066b2b90..f37d56d815 100644 --- a/docs/en/msg_docs/LedControl.md +++ b/docs/en/msg_docs/LedControl.md @@ -21,27 +21,27 @@ LED control: control a single or multiple LED's. These are the externally visibl ## Constants -| Name | Type | Value | Description | -| --------------------------------------------------- | ------- | ----- | --------------------------------------------------------------------------------------- | -| COLOR_OFF | `uint8` | 0 | this is only used in the drivers | -| COLOR_RED | `uint8` | 1 | -| COLOR_GREEN | `uint8` | 2 | -| COLOR_BLUE | `uint8` | 3 | -| COLOR_YELLOW | `uint8` | 4 | -| COLOR_PURPLE | `uint8` | 5 | -| COLOR_AMBER | `uint8` | 6 | -| COLOR_CYAN | `uint8` | 7 | -| COLOR_WHITE | `uint8` | 8 | -| MODE_OFF | `uint8` | 0 | turn LED off | -| MODE_ON | `uint8` | 1 | turn LED on | -| MODE_DISABLED | `uint8` | 2 | disable this priority (switch to lower priority setting) | -| MODE_BLINK_SLOW | `uint8` | 3 | -| MODE_BLINK_NORMAL | `uint8` | 4 | -| MODE_BLINK_FAST | `uint8` | 5 | -| MODE_BREATHE | `uint8` | 6 | continuously increase & decrease brightness (solid color if driver does not support it) | -| MODE_FLASH | `uint8` | 7 | two fast blinks (on/off) with timing as in MODE_BLINK_FAST and then off for a while | -| MAX_PRIORITY | `uint8` | 2 | maximum priority (minimum is 0) | -| ORB_QUEUE_LENGTH | `uint8` | 8 | needs to match BOARD_MAX_LEDS | +| Name | Type | Value | Description | +| ------------------------------------------------- | ------- | ----- | --------------------------------------------------------------------------------------- | +| COLOR_OFF | `uint8` | 0 | this is only used in the drivers | +| COLOR_RED | `uint8` | 1 | +| COLOR_GREEN | `uint8` | 2 | +| COLOR_BLUE | `uint8` | 3 | +| COLOR_YELLOW | `uint8` | 4 | +| COLOR_PURPLE | `uint8` | 5 | +| COLOR_AMBER | `uint8` | 6 | +| COLOR_CYAN | `uint8` | 7 | +| COLOR_WHITE | `uint8` | 8 | +| MODE_OFF | `uint8` | 0 | turn LED off | +| MODE_ON | `uint8` | 1 | turn LED on | +| MODE_DISABLED | `uint8` | 2 | disable this priority (switch to lower priority setting) | +| MODE_BLINK_SLOW | `uint8` | 3 | +| MODE_BLINK_NORMAL | `uint8` | 4 | +| MODE_BLINK_FAST | `uint8` | 5 | +| MODE_BREATHE | `uint8` | 6 | continuously increase & decrease brightness (solid color if driver does not support it) | +| MODE_FLASH | `uint8` | 7 | two fast blinks (on/off) with timing as in MODE_BLINK_FAST and then off for a while | +| MAX_PRIORITY | `uint8` | 2 | maximum priority (minimum is 0) | +| ORB_QUEUE_LENGTH | `uint8` | 8 | needs to match BOARD_MAX_LEDS | ## Source Message diff --git a/docs/en/msg_docs/LogMessage.md b/docs/en/msg_docs/LogMessage.md index c9cd50cdb3..b58188cfd9 100644 --- a/docs/en/msg_docs/LogMessage.md +++ b/docs/en/msg_docs/LogMessage.md @@ -18,9 +18,9 @@ A logging message, output with PX4_WARN, PX4_ERR, PX4_INFO. ## Constants -| Name | Type | Value | Description | -| ------------------------------------------------- | ------- | ----- | ----------- | -| ORB_QUEUE_LENGTH | `uint8` | 4 | +| Name | Type | Value | Description | +| ----------------------------------------------- | ------- | ----- | ----------- | +| ORB_QUEUE_LENGTH | `uint8` | 4 | ## Source Message diff --git a/docs/en/msg_docs/LoggerStatus.md b/docs/en/msg_docs/LoggerStatus.md index 48d3a54b2e..76c65f4afd 100644 --- a/docs/en/msg_docs/LoggerStatus.md +++ b/docs/en/msg_docs/LoggerStatus.md @@ -24,13 +24,13 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| ------------------------------------------------------- | ------- | ----- | ----------------------------------------- | -| LOGGER_TYPE_FULL | `uint8` | 0 | Normal, full size log | -| LOGGER_TYPE_MISSION | `uint8` | 1 | reduced mission log (e.g. for geotagging) | -| BACKEND_FILE | `uint8` | 1 | -| BACKEND_MAVLINK | `uint8` | 2 | -| BACKEND_ALL | `uint8` | 3 | +| Name | Type | Value | Description | +| ----------------------------------------------------- | ------- | ----- | ----------------------------------------- | +| LOGGER_TYPE_FULL | `uint8` | 0 | Normal, full size log | +| LOGGER_TYPE_MISSION | `uint8` | 1 | reduced mission log (e.g. for geotagging) | +| BACKEND_FILE | `uint8` | 1 | +| BACKEND_MAVLINK | `uint8` | 2 | +| BACKEND_ALL | `uint8` | 3 | ## Source Message diff --git a/docs/en/msg_docs/LongitudinalControlConfiguration.md b/docs/en/msg_docs/LongitudinalControlConfiguration.md index af335101e1..b88916dfa1 100644 --- a/docs/en/msg_docs/LongitudinalControlConfiguration.md +++ b/docs/en/msg_docs/LongitudinalControlConfiguration.md @@ -4,7 +4,10 @@ pageClass: is-wide-page # LongitudinalControlConfiguration (UORB message) -Fixed Wing Longitudinal Control Configuration message. Used by the fw_lateral_longitudinal_control module and TECS to constrain FixedWingLongitudinalSetpoint messages. and configure the resultant setpoints. +Fixed Wing Longitudinal Control Configuration message. + +Used by the fw_lateral_longitudinal_control module and TECS to constrain FixedWingLongitudinalSetpoint messages +and configure the resultant setpoints. **TOPICS:** longitudinal_control_configuration @@ -12,22 +15,22 @@ Fixed Wing Longitudinal Control Configuration message. Used by the fw_lateral_lo | Name | Type | Unit [Frame] | Range/Enum | Description | | ----------------------------- | --------- | ------------ | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | -| timestamp | `uint64` | | | time since system start (microseconds) | -| pitch_min | `float32` | rad | [-pi : pi] | defaults to FW_P_LIM_MIN if NAN. | -| pitch_max | `float32` | rad | [-pi : pi] | defaults to FW_P_LIM_MAX if NAN. | -| throttle_min | `float32` | norm | [0 : 1] | deaults to FW_THR_MIN if NAN. | -| throttle_max | `float32` | norm | [0 : 1] | defaults to FW_THR_MAX if NAN. | -| climb_rate_target | `float32` | m/s | | target climbrate to change altitude. Defaults to FW_T_CLIMB_MAX if NAN. Not used if height_rate is directly set in FixedWingLongitudinalSetpoint. | -| sink_rate_target | `float32` | m/s | | target sinkrate to change altitude. Defaults to FW_T_SINK_MAX if NAN. Not used if height_rate is directly set in FixedWingLongitudinalSetpoint. | -| speed_weight | `float32` | | [0 : 2] | , 0=pitch controls altitude only, 2=pitch controls airspeed only | -| enforce_low_height_condition | `bool` | boolean | | if true, the altitude controller is configured with an alternative timeconstant for tighter altitude tracking | -| disable_underspeed_protection | `bool` | boolean | | if true, underspeed handling is disabled in the altitude controller | +| timestamp | `uint64` | us | | Time since system start | +| pitch_min | `float32` | rad | [-pi : pi] | Defaults to FW_P_LIM_MIN if NAN. | +| pitch_max | `float32` | rad | [-pi : pi] | Defaults to FW_P_LIM_MAX if NAN. | +| throttle_min | `float32` | norm | [0 : 1] | Defaults to FW_THR_MIN if NAN. | +| throttle_max | `float32` | norm | [0 : 1] | Defaults to FW_THR_MAX if NAN. | +| climb_rate_target | `float32` | m/s | | Target climbrate to change altitude. Defaults to FW_T_CLIMB_MAX if NAN. Not used if height_rate is directly set in FixedWingLongitudinalSetpoint. | +| sink_rate_target | `float32` | m/s | | Target sinkrate to change altitude. Defaults to FW_T_SINK_MAX if NAN. Not used if height_rate is directly set in FixedWingLongitudinalSetpoint. | +| speed_weight | `float32` | | [0 : 2] | 0=pitch controls altitude only, 2=pitch controls airspeed only | +| enforce_low_height_condition | `bool` | | | If true, the altitude controller is configured with an alternative timeconstant for tighter altitude tracking | +| disable_underspeed_protection | `bool` | | | If true, underspeed handling is disabled in the altitude controller | ## Constants -| Name | Type | Value | Description | -| ----------------------------------------------- | -------- | ----- | ----------- | -| MESSAGE_VERSION | `uint32` | 0 | +| Name | Type | Value | Description | +| --------------------------------------------- | -------- | ----- | ----------- | +| MESSAGE_VERSION | `uint32` | 0 | ## Source Message @@ -37,22 +40,23 @@ Fixed Wing Longitudinal Control Configuration message. Used by the fw_lateral_lo ```c # Fixed Wing Longitudinal Control Configuration message +# # Used by the fw_lateral_longitudinal_control module and TECS to constrain FixedWingLongitudinalSetpoint messages # and configure the resultant setpoints. uint32 MESSAGE_VERSION = 0 -uint64 timestamp # time since system start (microseconds) +uint64 timestamp # [us] Time since system start -float32 pitch_min # [rad][@range -pi, pi] defaults to FW_P_LIM_MIN if NAN. -float32 pitch_max # [rad][@range -pi, pi] defaults to FW_P_LIM_MAX if NAN. -float32 throttle_min # [norm] [@range 0,1] deaults to FW_THR_MIN if NAN. -float32 throttle_max # [norm] [@range 0,1] defaults to FW_THR_MAX if NAN. -float32 climb_rate_target # [m/s] target climbrate to change altitude. Defaults to FW_T_CLIMB_MAX if NAN. Not used if height_rate is directly set in FixedWingLongitudinalSetpoint. -float32 sink_rate_target # [m/s] target sinkrate to change altitude. Defaults to FW_T_SINK_MAX if NAN. Not used if height_rate is directly set in FixedWingLongitudinalSetpoint. -float32 speed_weight # [@range 0,2], 0=pitch controls altitude only, 2=pitch controls airspeed only -bool enforce_low_height_condition # [boolean] if true, the altitude controller is configured with an alternative timeconstant for tighter altitude tracking -bool disable_underspeed_protection # [boolean] if true, underspeed handling is disabled in the altitude controller +float32 pitch_min # [rad] [@range -pi, pi] Defaults to FW_P_LIM_MIN if NAN. +float32 pitch_max # [rad] [@range -pi, pi] Defaults to FW_P_LIM_MAX if NAN. +float32 throttle_min # [norm] [@range 0,1] Defaults to FW_THR_MIN if NAN. +float32 throttle_max # [norm] [@range 0,1] Defaults to FW_THR_MAX if NAN. +float32 climb_rate_target # [m/s] Target climbrate to change altitude. Defaults to FW_T_CLIMB_MAX if NAN. Not used if height_rate is directly set in FixedWingLongitudinalSetpoint. +float32 sink_rate_target # [m/s] Target sinkrate to change altitude. Defaults to FW_T_SINK_MAX if NAN. Not used if height_rate is directly set in FixedWingLongitudinalSetpoint. +float32 speed_weight # [-] [@range 0,2] 0=pitch controls altitude only, 2=pitch controls airspeed only +bool enforce_low_height_condition # If true, the altitude controller is configured with an alternative timeconstant for tighter altitude tracking +bool disable_underspeed_protection # If true, underspeed handling is disabled in the altitude controller ``` ::: diff --git a/docs/en/msg_docs/MagWorkerData.md b/docs/en/msg_docs/MagWorkerData.md index 2b210ad6df..50343e828c 100644 --- a/docs/en/msg_docs/MagWorkerData.md +++ b/docs/en/msg_docs/MagWorkerData.md @@ -23,9 +23,9 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| --------------------------------- | ------- | ----- | ----------- | -| MAX_MAGS | `uint8` | 4 | +| Name | Type | Value | Description | +| ------------------------------- | ------- | ----- | ----------- | +| MAX_MAGS | `uint8` | 4 | ## Source Message diff --git a/docs/en/msg_docs/ManualControlSetpoint.md b/docs/en/msg_docs/ManualControlSetpoint.md index 5d85d3d27f..abb4be6864 100644 --- a/docs/en/msg_docs/ManualControlSetpoint.md +++ b/docs/en/msg_docs/ManualControlSetpoint.md @@ -30,17 +30,17 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| ------------------------------------------------- | -------- | ----- | ------------------------ | -| MESSAGE_VERSION | `uint32` | 0 | -| SOURCE_UNKNOWN | `uint8` | 0 | -| SOURCE_RC | `uint8` | 1 | radio control (input_rc) | -| SOURCE_MAVLINK_0 | `uint8` | 2 | mavlink instance 0 | -| SOURCE_MAVLINK_1 | `uint8` | 3 | mavlink instance 1 | -| SOURCE_MAVLINK_2 | `uint8` | 4 | mavlink instance 2 | -| SOURCE_MAVLINK_3 | `uint8` | 5 | mavlink instance 3 | -| SOURCE_MAVLINK_4 | `uint8` | 6 | mavlink instance 4 | -| SOURCE_MAVLINK_5 | `uint8` | 7 | mavlink instance 5 | +| Name | Type | Value | Description | +| ----------------------------------------------- | -------- | ----- | ------------------------ | +| MESSAGE_VERSION | `uint32` | 0 | +| SOURCE_UNKNOWN | `uint8` | 0 | +| SOURCE_RC | `uint8` | 1 | radio control (input_rc) | +| SOURCE_MAVLINK_0 | `uint8` | 2 | mavlink instance 0 | +| SOURCE_MAVLINK_1 | `uint8` | 3 | mavlink instance 1 | +| SOURCE_MAVLINK_2 | `uint8` | 4 | mavlink instance 2 | +| SOURCE_MAVLINK_3 | `uint8` | 5 | mavlink instance 3 | +| SOURCE_MAVLINK_4 | `uint8` | 6 | mavlink instance 4 | +| SOURCE_MAVLINK_5 | `uint8` | 7 | mavlink instance 5 | ## Source Message diff --git a/docs/en/msg_docs/ManualControlSwitches.md b/docs/en/msg_docs/ManualControlSwitches.md index 32457a40cc..a443726eb2 100644 --- a/docs/en/msg_docs/ManualControlSwitches.md +++ b/docs/en/msg_docs/ManualControlSwitches.md @@ -29,20 +29,20 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| --------------------------------------------------- | ------- | ----- | --------------------------------- | -| SWITCH_POS_NONE | `uint8` | 0 | switch is not mapped | -| SWITCH_POS_ON | `uint8` | 1 | switch activated (value = 1) | -| SWITCH_POS_MIDDLE | `uint8` | 2 | middle position (value = 0) | -| SWITCH_POS_OFF | `uint8` | 3 | switch not activated (value = -1) | -| MODE_SLOT_NONE | `uint8` | 0 | no mode slot assigned | -| MODE_SLOT_1 | `uint8` | 1 | mode slot 1 selected | -| MODE_SLOT_2 | `uint8` | 2 | mode slot 2 selected | -| MODE_SLOT_3 | `uint8` | 3 | mode slot 3 selected | -| MODE_SLOT_4 | `uint8` | 4 | mode slot 4 selected | -| MODE_SLOT_5 | `uint8` | 5 | mode slot 5 selected | -| MODE_SLOT_6 | `uint8` | 6 | mode slot 6 selected | -| MODE_SLOT_NUM | `uint8` | 6 | number of slots | +| Name | Type | Value | Description | +| ------------------------------------------------- | ------- | ----- | --------------------------------- | +| SWITCH_POS_NONE | `uint8` | 0 | switch is not mapped | +| SWITCH_POS_ON | `uint8` | 1 | switch activated (value = 1) | +| SWITCH_POS_MIDDLE | `uint8` | 2 | middle position (value = 0) | +| SWITCH_POS_OFF | `uint8` | 3 | switch not activated (value = -1) | +| MODE_SLOT_NONE | `uint8` | 0 | no mode slot assigned | +| MODE_SLOT_1 | `uint8` | 1 | mode slot 1 selected | +| MODE_SLOT_2 | `uint8` | 2 | mode slot 2 selected | +| MODE_SLOT_3 | `uint8` | 3 | mode slot 3 selected | +| MODE_SLOT_4 | `uint8` | 4 | mode slot 4 selected | +| MODE_SLOT_5 | `uint8` | 5 | mode slot 5 selected | +| MODE_SLOT_6 | `uint8` | 6 | mode slot 6 selected | +| MODE_SLOT_NUM | `uint8` | 6 | number of slots | ## Source Message diff --git a/docs/en/msg_docs/MavlinkLog.md b/docs/en/msg_docs/MavlinkLog.md index b95bdc65ff..102a020dd6 100644 --- a/docs/en/msg_docs/MavlinkLog.md +++ b/docs/en/msg_docs/MavlinkLog.md @@ -16,9 +16,9 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| ------------------------------------------------- | ------- | ----- | ----------- | -| ORB_QUEUE_LENGTH | `uint8` | 8 | +| Name | Type | Value | Description | +| ----------------------------------------------- | ------- | ----- | ----------- | +| ORB_QUEUE_LENGTH | `uint8` | 8 | ## Source Message diff --git a/docs/en/msg_docs/MavlinkTunnel.md b/docs/en/msg_docs/MavlinkTunnel.md index ca6556b13b..0e88f9c71e 100644 --- a/docs/en/msg_docs/MavlinkTunnel.md +++ b/docs/en/msg_docs/MavlinkTunnel.md @@ -21,19 +21,19 @@ MAV_TUNNEL_PAYLOAD_TYPE enum. ## Constants -| Name | Type | Value | Description | -| --------------------------------------------------------------------------------------------------- | ------- | ----- | ---------------------------------------- | -| MAV_TUNNEL_PAYLOAD_TYPE_UNKNOWN | `uint8` | 0 | Encoding of payload unknown | -| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED0 | `uint8` | 200 | Registered for STorM32 gimbal controller | -| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED1 | `uint8` | 201 | Registered for STorM32 gimbal controller | -| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED2 | `uint8` | 202 | Registered for STorM32 gimbal controller | -| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED3 | `uint8` | 203 | Registered for STorM32 gimbal controller | -| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED4 | `uint8` | 204 | Registered for STorM32 gimbal controller | -| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED5 | `uint8` | 205 | Registered for STorM32 gimbal controller | -| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED6 | `uint8` | 206 | Registered for STorM32 gimbal controller | -| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED7 | `uint8` | 207 | Registered for STorM32 gimbal controller | -| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED8 | `uint8` | 208 | Registered for STorM32 gimbal controller | -| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED9 | `uint8` | 209 | Registered for STorM32 gimbal controller | +| Name | Type | Value | Description | +| ------------------------------------------------------------------------------------------------- | ------- | ----- | ---------------------------------------- | +| MAV_TUNNEL_PAYLOAD_TYPE_UNKNOWN | `uint8` | 0 | Encoding of payload unknown | +| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED0 | `uint8` | 200 | Registered for STorM32 gimbal controller | +| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED1 | `uint8` | 201 | Registered for STorM32 gimbal controller | +| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED2 | `uint8` | 202 | Registered for STorM32 gimbal controller | +| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED3 | `uint8` | 203 | Registered for STorM32 gimbal controller | +| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED4 | `uint8` | 204 | Registered for STorM32 gimbal controller | +| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED5 | `uint8` | 205 | Registered for STorM32 gimbal controller | +| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED6 | `uint8` | 206 | Registered for STorM32 gimbal controller | +| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED7 | `uint8` | 207 | Registered for STorM32 gimbal controller | +| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED8 | `uint8` | 208 | Registered for STorM32 gimbal controller | +| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED9 | `uint8` | 209 | Registered for STorM32 gimbal controller | ## Source Message diff --git a/docs/en/msg_docs/MessageFormatRequest.md b/docs/en/msg_docs/MessageFormatRequest.md index c1c0e7ff19..c6e9c2fb2b 100644 --- a/docs/en/msg_docs/MessageFormatRequest.md +++ b/docs/en/msg_docs/MessageFormatRequest.md @@ -16,9 +16,9 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| --------------------------------------------------------------- | -------- | ----- | ------------------------------------------------------------------------------------------------------------------- | -| LATEST_PROTOCOL_VERSION | `uint16` | 1 | Current version of this protocol. Increase this whenever the MessageFormatRequest or MessageFormatResponse changes. | +| Name | Type | Value | Description | +| ------------------------------------------------------------- | -------- | ----- | ------------------------------------------------------------------------------------------------------------------- | +| LATEST_PROTOCOL_VERSION | `uint16` | 1 | Current version of this protocol. Increase this whenever the MessageFormatRequest or MessageFormatResponse changes. | ## Source Message diff --git a/docs/en/msg_docs/ModeCompleted.md b/docs/en/msg_docs/ModeCompleted.md index 2b223136fc..913246e7d2 100644 --- a/docs/en/msg_docs/ModeCompleted.md +++ b/docs/en/msg_docs/ModeCompleted.md @@ -18,11 +18,11 @@ Mode completion result, published by an active mode. The possible values of nav_ ## Constants -| Name | Type | Value | Description | -| --------------------------------------------------------- | -------- | ----- | --------------------------- | -| MESSAGE_VERSION | `uint32` | 0 | -| RESULT_SUCCESS | `uint8` | 0 | -| RESULT_FAILURE_OTHER | `uint8` | 100 | Mode failed (generic error) | +| Name | Type | Value | Description | +| ------------------------------------------------------- | -------- | ----- | --------------------------- | +| MESSAGE_VERSION | `uint32` | 0 | +| RESULT_SUCCESS | `uint8` | 0 | +| RESULT_FAILURE_OTHER | `uint8` | 100 | Mode failed (generic error) | ## Source Message diff --git a/docs/en/msg_docs/NavigatorStatus.md b/docs/en/msg_docs/NavigatorStatus.md index 18fe9235d4..dc8c0bc427 100644 --- a/docs/en/msg_docs/NavigatorStatus.md +++ b/docs/en/msg_docs/NavigatorStatus.md @@ -18,10 +18,10 @@ Current status of a Navigator mode. The possible values of nav_state are defined ## Constants -| Name | Type | Value | Description | -| ----------------------------------------- | ------- | ----- | --------------------------------------------------- | -| FAILURE_NONE | `uint8` | 0 | -| FAILURE_HAGL | `uint8` | 1 | Target altitude exceeds maximum height above ground | +| Name | Type | Value | Description | +| --------------------------------------- | ------- | ----- | --------------------------------------------------- | +| FAILURE_NONE | `uint8` | 0 | +| FAILURE_HAGL | `uint8` | 1 | Target altitude exceeds maximum height above ground | ## Source Message diff --git a/docs/en/msg_docs/ObstacleDistance.md b/docs/en/msg_docs/ObstacleDistance.md index 59b6eef1e6..c422c3e0d9 100644 --- a/docs/en/msg_docs/ObstacleDistance.md +++ b/docs/en/msg_docs/ObstacleDistance.md @@ -23,15 +23,15 @@ Obstacle distances in front of the sensor. ## Constants -| Name | Type | Value | Description | -| ----------------------------------------------------------------------------- | ------- | ----- | ----------- | -| MAV_FRAME_GLOBAL | `uint8` | 0 | -| MAV_FRAME_LOCAL_NED | `uint8` | 1 | -| MAV_FRAME_BODY_FRD | `uint8` | 12 | -| MAV_DISTANCE_SENSOR_LASER | `uint8` | 0 | -| MAV_DISTANCE_SENSOR_ULTRASOUND | `uint8` | 1 | -| MAV_DISTANCE_SENSOR_INFRARED | `uint8` | 2 | -| MAV_DISTANCE_SENSOR_RADAR | `uint8` | 3 | +| Name | Type | Value | Description | +| --------------------------------------------------------------------------- | ------- | ----- | ----------- | +| MAV_FRAME_GLOBAL | `uint8` | 0 | +| MAV_FRAME_LOCAL_NED | `uint8` | 1 | +| MAV_FRAME_BODY_FRD | `uint8` | 12 | +| MAV_DISTANCE_SENSOR_LASER | `uint8` | 0 | +| MAV_DISTANCE_SENSOR_ULTRASOUND | `uint8` | 1 | +| MAV_DISTANCE_SENSOR_INFRARED | `uint8` | 2 | +| MAV_DISTANCE_SENSOR_RADAR | `uint8` | 3 | ## Source Message diff --git a/docs/en/msg_docs/OrbTestMedium.md b/docs/en/msg_docs/OrbTestMedium.md index 52d8736a09..456a2f4ce4 100644 --- a/docs/en/msg_docs/OrbTestMedium.md +++ b/docs/en/msg_docs/OrbTestMedium.md @@ -16,9 +16,9 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| ------------------------------------------------- | ------- | ----- | ----------- | -| ORB_QUEUE_LENGTH | `uint8` | 16 | +| Name | Type | Value | Description | +| ----------------------------------------------- | ------- | ----- | ----------- | +| ORB_QUEUE_LENGTH | `uint8` | 16 | ## Source Message diff --git a/docs/en/msg_docs/OrbitStatus.md b/docs/en/msg_docs/OrbitStatus.md index 79f8cdd6f4..49207c039c 100644 --- a/docs/en/msg_docs/OrbitStatus.md +++ b/docs/en/msg_docs/OrbitStatus.md @@ -4,32 +4,49 @@ pageClass: is-wide-page # OrbitStatus (UORB message) -ORBIT_YAW_BEHAVIOUR. +Orbit status. + +Current state of an orbit or loiter manoeuver, published while the maneuver is executing. +For multirotors, published by the orbit flight task (FlightTaskOrbit) on each control cycle +when a valid GPS projection is available. +For fixed-wing, published by FixedWingModeManager during loiter. +Subscribed by the MAVLink module and streamed to the GCS as ORBIT_EXECUTION_STATUS (message 360). **TOPICS:** orbit_status ## Fields -| Name | Type | Unit [Frame] | Range/Enum | Description | -| ------------- | --------- | ------------ | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | -| timestamp | `uint64` | | | time since system start (microseconds) | -| radius | `float32` | | | Radius of the orbit circle. Positive values orbit clockwise, negative values orbit counter-clockwise. [m] | -| frame | `uint8` | | | The coordinate system of the fields: x, y, z. | -| x | `float64` | | | X coordinate of center point. Coordinate system depends on frame field: local = x position in meters _ 1e4, global = latitude in degrees _ 1e7. | -| y | `float64` | | | Y coordinate of center point. Coordinate system depends on frame field: local = y position in meters _ 1e4, global = latitude in degrees _ 1e7. | -| z | `float32` | | | Altitude of center point. Coordinate system depends on frame field. | -| yaw_behaviour | `uint8` | | | +| Name | Type | Unit [Frame] | Range/Enum | Description | +| ------------- | --------- | ------------ | ------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | +| timestamp | `uint64` | us | | Time since system start | +| radius | `float32` | m | | Radius of the orbit circle. Positive values orbit clockwise, negative values orbit counter-clockwise. | +| frame | `uint8` | | [FRAME](#FRAME) | The coordinate system of the fields: x, y, z | +| x | `float64` | | | X coordinate of center point. Coordinate system depends on frame field: `local = x position in meters * 1e4`, `global = latitude in degrees * 1e7`. | +| y | `float64` | | | Y coordinate of center point. Coordinate system depends on frame field: `local = y position in meters * 1e4`, `global = longitude in degrees * 1e7`. | +| z | `float32` | | | Altitude of center point. Coordinate system depends on frame field. | +| yaw_behaviour | `uint8` | | [ORBIT_YAW_BEHAVIOUR](#ORBIT_YAW_BEHAVIOUR) | -## Constants +## Enums -| Name | Type | Value | Description | -| ----------------------------------------------------------------------------------------------------------------- | ------- | ----- | ----------- | -| ORBIT_YAW_BEHAVIOUR_HOLD_FRONT_TO_CIRCLE_CENTER | `uint8` | 0 | -| ORBIT_YAW_BEHAVIOUR_HOLD_INITIAL_HEADING | `uint8` | 1 | -| ORBIT_YAW_BEHAVIOUR_UNCONTROLLED | `uint8` | 2 | -| ORBIT_YAW_BEHAVIOUR_HOLD_FRONT_TANGENT_TO_CIRCLE | `uint8` | 3 | -| ORBIT_YAW_BEHAVIOUR_RC_CONTROLLED | `uint8` | 4 | -| ORBIT_YAW_BEHAVIOUR_UNCHANGED | `uint8` | 5 | +### FRAME {#FRAME} + +| Name | Type | Value | Description | +| ----------------------------------------------------------------- | ------- | ----- | ------------------------------------------------------------------------------------ | +| FRAME_GLOBAL | `uint8` | 0 | WGS84 global frame, MSL altitude. x/y = latitude/longitude (degrees × 1e7) | +| FRAME_LOCAL_NED | `uint8` | 1 | Local NED frame. x/y = north/east position (meters × 1e4) | +| FRAME_GLOBAL_RELATIVE_ALT | `uint8` | 3 | WGS84 global frame, altitude above home. x/y = latitude/longitude (degrees × 1e7) | +| FRAME_GLOBAL_TERRAIN_ALT | `uint8` | 10 | WGS84 global frame, altitude above terrain. x/y = latitude/longitude (degrees × 1e7) | + +### ORBIT_YAW_BEHAVIOUR {#ORBIT_YAW_BEHAVIOUR} + +| Name | Type | Value | Description | +| --------------------------------------------------------------------------------------------------------------- | ------- | ----- | --------------------------------------------------------------------------------------------------------------------------------------------------- | +| ORBIT_YAW_BEHAVIOUR_HOLD_FRONT_TO_CIRCLE_CENTER | `uint8` | 0 | Vehicle front points to the center (default). | +| ORBIT_YAW_BEHAVIOUR_HOLD_INITIAL_HEADING | `uint8` | 1 | Vehicle front holds heading when message received. | +| ORBIT_YAW_BEHAVIOUR_UNCONTROLLED | `uint8` | 2 | Yaw uncontrolled. | +| ORBIT_YAW_BEHAVIOUR_HOLD_FRONT_TANGENT_TO_CIRCLE | `uint8` | 3 | Vehicle front follows flight path (tangential to circle). | +| ORBIT_YAW_BEHAVIOUR_RC_CONTROLLED | `uint8` | 4 | Yaw controlled by RC input. | +| ORBIT_YAW_BEHAVIOUR_UNCHANGED | `uint8` | 5 | Vehicle uses current yaw behaviour (unchanged). The vehicle-default yaw behaviour is used if this value is specified when orbit is first commanded. | ## Source Message @@ -38,21 +55,34 @@ ORBIT_YAW_BEHAVIOUR. ::: details Click here to see original file ```c -# ORBIT_YAW_BEHAVIOUR -uint8 ORBIT_YAW_BEHAVIOUR_HOLD_FRONT_TO_CIRCLE_CENTER = 0 -uint8 ORBIT_YAW_BEHAVIOUR_HOLD_INITIAL_HEADING = 1 -uint8 ORBIT_YAW_BEHAVIOUR_UNCONTROLLED = 2 -uint8 ORBIT_YAW_BEHAVIOUR_HOLD_FRONT_TANGENT_TO_CIRCLE = 3 -uint8 ORBIT_YAW_BEHAVIOUR_RC_CONTROLLED = 4 -uint8 ORBIT_YAW_BEHAVIOUR_UNCHANGED = 5 +# Orbit status +# +# Current state of an orbit or loiter manoeuver, published while the maneuver is executing. +# For multirotors, published by the orbit flight task (FlightTaskOrbit) on each control cycle +# when a valid GPS projection is available. +# For fixed-wing, published by FixedWingModeManager during loiter. +# Subscribed by the MAVLink module and streamed to the GCS as ORBIT_EXECUTION_STATUS (message 360). -uint64 timestamp # time since system start (microseconds) -float32 radius # Radius of the orbit circle. Positive values orbit clockwise, negative values orbit counter-clockwise. [m] -uint8 frame # The coordinate system of the fields: x, y, z. -float64 x # X coordinate of center point. Coordinate system depends on frame field: local = x position in meters * 1e4, global = latitude in degrees * 1e7. -float64 y # Y coordinate of center point. Coordinate system depends on frame field: local = y position in meters * 1e4, global = latitude in degrees * 1e7. -float32 z # Altitude of center point. Coordinate system depends on frame field. -uint8 yaw_behaviour +uint64 timestamp # [us] Time since system start +float32 radius # [m] Radius of the orbit circle. Positive values orbit clockwise, negative values orbit counter-clockwise. + +uint8 frame # [@enum FRAME] The coordinate system of the fields: x, y, z +uint8 FRAME_GLOBAL = 0 # WGS84 global frame, MSL altitude. x/y = latitude/longitude (degrees × 1e7) +uint8 FRAME_LOCAL_NED = 1 # Local NED frame. x/y = north/east position (meters × 1e4) +uint8 FRAME_GLOBAL_RELATIVE_ALT = 3 # WGS84 global frame, altitude above home. x/y = latitude/longitude (degrees × 1e7) +uint8 FRAME_GLOBAL_TERRAIN_ALT = 10 # WGS84 global frame, altitude above terrain. x/y = latitude/longitude (degrees × 1e7) + +float64 x # X coordinate of center point. Coordinate system depends on frame field: `local = x position in meters * 1e4`, `global = latitude in degrees * 1e7`. +float64 y # Y coordinate of center point. Coordinate system depends on frame field: `local = y position in meters * 1e4`, `global = longitude in degrees * 1e7`. +float32 z # Altitude of center point. Coordinate system depends on frame field. + +uint8 yaw_behaviour # [@enum ORBIT_YAW_BEHAVIOUR] +uint8 ORBIT_YAW_BEHAVIOUR_HOLD_FRONT_TO_CIRCLE_CENTER = 0 # Vehicle front points to the center (default). +uint8 ORBIT_YAW_BEHAVIOUR_HOLD_INITIAL_HEADING = 1 # Vehicle front holds heading when message received. +uint8 ORBIT_YAW_BEHAVIOUR_UNCONTROLLED = 2 # Yaw uncontrolled. +uint8 ORBIT_YAW_BEHAVIOUR_HOLD_FRONT_TANGENT_TO_CIRCLE = 3 # Vehicle front follows flight path (tangential to circle). +uint8 ORBIT_YAW_BEHAVIOUR_RC_CONTROLLED = 4 # Yaw controlled by RC input. +uint8 ORBIT_YAW_BEHAVIOUR_UNCHANGED = 5 # Vehicle uses current yaw behaviour (unchanged). The vehicle-default yaw behaviour is used if this value is specified when orbit is first commanded. ``` ::: diff --git a/docs/en/msg_docs/ParameterResetRequest.md b/docs/en/msg_docs/ParameterResetRequest.md index 209acf47f6..8cf0a658e0 100644 --- a/docs/en/msg_docs/ParameterResetRequest.md +++ b/docs/en/msg_docs/ParameterResetRequest.md @@ -18,9 +18,9 @@ ParameterResetRequest : Used by the primary to reset one or all parameter value( ## Constants -| Name | Type | Value | Description | -| ------------------------------------------------- | ------- | ----- | ----------- | -| ORB_QUEUE_LENGTH | `uint8` | 4 | +| Name | Type | Value | Description | +| ----------------------------------------------- | ------- | ----- | ----------- | +| ORB_QUEUE_LENGTH | `uint8` | 4 | ## Source Message diff --git a/docs/en/msg_docs/ParameterSetUsedRequest.md b/docs/en/msg_docs/ParameterSetUsedRequest.md index 5ff79ea1e4..f4c6ba1153 100644 --- a/docs/en/msg_docs/ParameterSetUsedRequest.md +++ b/docs/en/msg_docs/ParameterSetUsedRequest.md @@ -17,9 +17,9 @@ ParameterSetUsedRequest : Used by a remote to update the used flag for a paramet ## Constants -| Name | Type | Value | Description | -| ------------------------------------------------- | ------- | ----- | ----------- | -| ORB_QUEUE_LENGTH | `uint8` | 64 | +| Name | Type | Value | Description | +| ----------------------------------------------- | ------- | ----- | ----------- | +| ORB_QUEUE_LENGTH | `uint8` | 64 | ## Source Message diff --git a/docs/en/msg_docs/ParameterSetValueRequest.md b/docs/en/msg_docs/ParameterSetValueRequest.md index f229c6076e..96523f3a96 100644 --- a/docs/en/msg_docs/ParameterSetValueRequest.md +++ b/docs/en/msg_docs/ParameterSetValueRequest.md @@ -19,9 +19,9 @@ ParameterSetValueRequest : Used by a remote or primary to update the value for a ## Constants -| Name | Type | Value | Description | -| ------------------------------------------------- | ------- | ----- | ----------- | -| ORB_QUEUE_LENGTH | `uint8` | 32 | +| Name | Type | Value | Description | +| ----------------------------------------------- | ------- | ----- | ----------- | +| ORB_QUEUE_LENGTH | `uint8` | 32 | ## Source Message diff --git a/docs/en/msg_docs/ParameterSetValueResponse.md b/docs/en/msg_docs/ParameterSetValueResponse.md index f0a0bf4051..622eba399f 100644 --- a/docs/en/msg_docs/ParameterSetValueResponse.md +++ b/docs/en/msg_docs/ParameterSetValueResponse.md @@ -18,9 +18,9 @@ ParameterSetValueResponse : Response to a set value request by either primary or ## Constants -| Name | Type | Value | Description | -| ------------------------------------------------- | ------- | ----- | ----------- | -| ORB_QUEUE_LENGTH | `uint8` | 4 | +| Name | Type | Value | Description | +| ----------------------------------------------- | ------- | ----- | ----------- | +| ORB_QUEUE_LENGTH | `uint8` | 4 | ## Source Message diff --git a/docs/en/msg_docs/PositionControllerLandingStatus.md b/docs/en/msg_docs/PositionControllerLandingStatus.md index 567159f99e..7139db9d41 100644 --- a/docs/en/msg_docs/PositionControllerLandingStatus.md +++ b/docs/en/msg_docs/PositionControllerLandingStatus.md @@ -17,13 +17,13 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| --------------------------------------------------------------- | ------- | ----- | --------------------- | -| NOT_ABORTED | `uint8` | 0 | -| ABORTED_BY_OPERATOR | `uint8` | 1 | -| TERRAIN_NOT_FOUND | `uint8` | 2 | FW_LND_ABORT (1 << 0) | -| TERRAIN_TIMEOUT | `uint8` | 3 | FW_LND_ABORT (1 << 1) | -| UNKNOWN_ABORT_CRITERION | `uint8` | 4 | +| Name | Type | Value | Description | +| ------------------------------------------------------------- | ------- | ----- | --------------------- | +| NOT_ABORTED | `uint8` | 0 | +| ABORTED_BY_OPERATOR | `uint8` | 1 | +| TERRAIN_NOT_FOUND | `uint8` | 2 | FW_LND_ABORT (1 << 0) | +| TERRAIN_TIMEOUT | `uint8` | 3 | FW_LND_ABORT (1 << 1) | +| UNKNOWN_ABORT_CRITERION | `uint8` | 4 | ## Source Message diff --git a/docs/en/msg_docs/PositionSetpoint.md b/docs/en/msg_docs/PositionSetpoint.md index 2ed4747470..325987fd79 100644 --- a/docs/en/msg_docs/PositionSetpoint.md +++ b/docs/en/msg_docs/PositionSetpoint.md @@ -35,16 +35,16 @@ this file is only used in the position_setpoint triple as a dependency. ## Constants -| Name | Type | Value | Description | -| --------------------------------------------------------------- | ------- | ----- | -------------------------------------------------------------- | -| SETPOINT_TYPE_POSITION | `uint8` | 0 | position setpoint | -| SETPOINT_TYPE_VELOCITY | `uint8` | 1 | velocity setpoint | -| SETPOINT_TYPE_LOITER | `uint8` | 2 | loiter setpoint | -| SETPOINT_TYPE_TAKEOFF | `uint8` | 3 | takeoff setpoint | -| SETPOINT_TYPE_LAND | `uint8` | 4 | land setpoint, altitude must be ignored, descend until landing | -| SETPOINT_TYPE_IDLE | `uint8` | 5 | do nothing, switch off motors or keep at idle speed (MC) | -| LOITER_TYPE_ORBIT | `uint8` | 0 | Circular pattern | -| LOITER_TYPE_FIGUREEIGHT | `uint8` | 1 | Pattern resembling an 8 | +| Name | Type | Value | Description | +| ------------------------------------------------------------- | ------- | ----- | -------------------------------------------------------------- | +| SETPOINT_TYPE_POSITION | `uint8` | 0 | position setpoint | +| SETPOINT_TYPE_VELOCITY | `uint8` | 1 | velocity setpoint | +| SETPOINT_TYPE_LOITER | `uint8` | 2 | loiter setpoint | +| SETPOINT_TYPE_TAKEOFF | `uint8` | 3 | takeoff setpoint | +| SETPOINT_TYPE_LAND | `uint8` | 4 | land setpoint, altitude must be ignored, descend until landing | +| SETPOINT_TYPE_IDLE | `uint8` | 5 | do nothing, switch off motors or keep at idle speed (MC) | +| LOITER_TYPE_ORBIT | `uint8` | 0 | Circular pattern | +| LOITER_TYPE_FIGUREEIGHT | `uint8` | 1 | Pattern resembling an 8 | ## Source Message diff --git a/docs/en/msg_docs/PowerButtonState.md b/docs/en/msg_docs/PowerButtonState.md index e7f8f43b28..3b30f2e484 100644 --- a/docs/en/msg_docs/PowerButtonState.md +++ b/docs/en/msg_docs/PowerButtonState.md @@ -17,12 +17,12 @@ power button state notification message. ## Constants -| Name | Type | Value | Description | -| ----------------------------------------------------------------------------------- | ------- | ----- | ----------------------------------------------------------------------- | -| PWR_BUTTON_STATE_IDEL | `uint8` | 0 | Button went up without meeting shutdown button down time (delete event) | -| PWR_BUTTON_STATE_DOWN | `uint8` | 1 | Button went Down | -| PWR_BUTTON_STATE_UP | `uint8` | 2 | Button went Up | -| PWR_BUTTON_STATE_REQUEST_SHUTDOWN | `uint8` | 3 | Button went Up after meeting shutdown button down time | +| Name | Type | Value | Description | +| --------------------------------------------------------------------------------- | ------- | ----- | ----------------------------------------------------------------------- | +| PWR_BUTTON_STATE_IDEL | `uint8` | 0 | Button went up without meeting shutdown button down time (delete event) | +| PWR_BUTTON_STATE_DOWN | `uint8` | 1 | Button went Down | +| PWR_BUTTON_STATE_UP | `uint8` | 2 | Button went Up | +| PWR_BUTTON_STATE_REQUEST_SHUTDOWN | `uint8` | 3 | Button went Up after meeting shutdown button down time | ## Source Message diff --git a/docs/en/msg_docs/QshellReq.md b/docs/en/msg_docs/QshellReq.md index 346717a999..4bc7b69339 100644 --- a/docs/en/msg_docs/QshellReq.md +++ b/docs/en/msg_docs/QshellReq.md @@ -17,9 +17,9 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| ------------------------------------- | -------- | ----- | ----------- | -| MAX_STRLEN | `uint32` | 100 | +| Name | Type | Value | Description | +| ----------------------------------- | -------- | ----- | ----------- | +| MAX_STRLEN | `uint32` | 100 | ## Source Message diff --git a/docs/en/msg_docs/RangingBeacon.md b/docs/en/msg_docs/RangingBeacon.md new file mode 100644 index 0000000000..0fe99f07d8 --- /dev/null +++ b/docs/en/msg_docs/RangingBeacon.md @@ -0,0 +1,72 @@ +--- +pageClass: is-wide-page +--- + +# RangingBeacon (UORB message) + +Ranging beacon measurement data (e.g. LoRa, UWB). + +**TOPICS:** ranging_beacon + +## Fields + +| Name | Type | Unit [Frame] | Range/Enum | Description | +| ---------------- | --------- | ------------ | --------------------- | ------------------------------------------- | +| 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} + +| Name | Type | Value | Description | +| ------------------------------------------- | ------- | ----- | ------------------------------------ | +| ALT_TYPE_WGS84 | `uint8` | 0 | Altitude above WGS84 ellipsoid | +| 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 +``` + +::: diff --git a/docs/en/msg_docs/RaptorInput.md b/docs/en/msg_docs/RaptorInput.md index e18b7531ef..4f067c6d32 100644 --- a/docs/en/msg_docs/RaptorInput.md +++ b/docs/en/msg_docs/RaptorInput.md @@ -23,10 +23,10 @@ Raptor Input. ## Constants -| Name | Type | Value | Description | -| ----------------------------------------------- | -------- | ----- | --------------------------------------------- | -| MESSAGE_VERSION | `uint32` | 0 | -| ACTION_DIM | `uint8` | 4 | Policy output dimensionality (for quadrotors) | +| Name | Type | Value | Description | +| --------------------------------------------- | -------- | ----- | --------------------------------------------- | +| MESSAGE_VERSION | `uint32` | 0 | +| ACTION_DIM | `uint8` | 4 | Policy output dimensionality (for quadrotors) | ## Source Message diff --git a/docs/en/msg_docs/RaptorStatus.md b/docs/en/msg_docs/RaptorStatus.md index 945dbd521b..085a6ca81f 100644 --- a/docs/en/msg_docs/RaptorStatus.md +++ b/docs/en/msg_docs/RaptorStatus.md @@ -39,16 +39,16 @@ Raptor Status. ## Constants -| Name | Type | Value | Description | -| ------------------------------------------------------------------------------------------------------------- | -------- | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| MESSAGE_VERSION | `uint32` | 0 | -| EXIT_REASON_NONE | `uint8` | 0 | No exit reason => Raptor control step was executed (actuator_motors should have been published) | -| EXIT_REASON_NO_ANGULAR_VELOCITY_UPDATE | `uint8` | 1 | We synchronize the control onto the input observation with the highest update frequency, which is vehicle_angular_velocity. If there was no update, we do not need to execute the policy again | -| EXIT_REASON_NOT_ALL_OBSERVATIONS_SET | `uint8` | 2 | We can not execute the policy if not all observations are available | -| EXIT_REASON_ANGULAR_VELOCITY_STALE | `uint8` | 3 | If OBSERVATION_TIMEOUT_ANGULAR_VELOCITY is exceeded, we treat the vehicle_angular_velocity as stale and can not run the policy | -| EXIT_REASON_LOCAL_POSITION_STALE | `uint8` | 4 | If OBSERVATION_TIMEOUT_LOCAL_POSITION is exceeded, we treat the vehicle_local_position as stale and can not run the policy | -| EXIT_REASON_ATTITUDE_STALE | `uint8` | 5 | If OBSERVATION_TIMEOUT_ATTITUDE is exceeded, we treat the vehicle_attitude as stale and can not run the policy | -| EXIT_REASON_EXECUTOR_STATUS_SOURCE_NOT_CONTROL | `uint8` | 6 | The executor that runs the policy can run in oversampling mode, where it decides if the policy should be ran based on the timestamp and not based on fixed synchronization onto the vehicle_angular_velocity. In this case the executor can decide to skip running the policy if the interval is too small, in which case this flag is set. | +| Name | Type | Value | Description | +| ----------------------------------------------------------------------------------------------------------- | -------- | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| MESSAGE_VERSION | `uint32` | 0 | +| EXIT_REASON_NONE | `uint8` | 0 | No exit reason => Raptor control step was executed (actuator_motors should have been published) | +| EXIT_REASON_NO_ANGULAR_VELOCITY_UPDATE | `uint8` | 1 | We synchronize the control onto the input observation with the highest update frequency, which is vehicle_angular_velocity. If there was no update, we do not need to execute the policy again | +| EXIT_REASON_NOT_ALL_OBSERVATIONS_SET | `uint8` | 2 | We can not execute the policy if not all observations are available | +| EXIT_REASON_ANGULAR_VELOCITY_STALE | `uint8` | 3 | If OBSERVATION_TIMEOUT_ANGULAR_VELOCITY is exceeded, we treat the vehicle_angular_velocity as stale and can not run the policy | +| EXIT_REASON_LOCAL_POSITION_STALE | `uint8` | 4 | If OBSERVATION_TIMEOUT_LOCAL_POSITION is exceeded, we treat the vehicle_local_position as stale and can not run the policy | +| EXIT_REASON_ATTITUDE_STALE | `uint8` | 5 | If OBSERVATION_TIMEOUT_ATTITUDE is exceeded, we treat the vehicle_attitude as stale and can not run the policy | +| EXIT_REASON_EXECUTOR_STATUS_SOURCE_NOT_CONTROL | `uint8` | 6 | The executor that runs the policy can run in oversampling mode, where it decides if the policy should be ran based on the timestamp and not based on fixed synchronization onto the vehicle_angular_velocity. In this case the executor can decide to skip running the policy if the interval is too small, in which case this flag is set. | ## Source Message diff --git a/docs/en/msg_docs/RcChannels.md b/docs/en/msg_docs/RcChannels.md index 04894fd4c3..dab85439f6 100644 --- a/docs/en/msg_docs/RcChannels.md +++ b/docs/en/msg_docs/RcChannels.md @@ -21,39 +21,39 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| --------------------------------------------------------------------- | ------- | ----- | ----------- | -| FUNCTION_THROTTLE | `uint8` | 0 | -| FUNCTION_ROLL | `uint8` | 1 | -| FUNCTION_PITCH | `uint8` | 2 | -| FUNCTION_YAW | `uint8` | 3 | -| FUNCTION_RETURN | `uint8` | 4 | -| FUNCTION_LOITER | `uint8` | 5 | -| FUNCTION_OFFBOARD | `uint8` | 6 | -| FUNCTION_FLAPS | `uint8` | 7 | -| FUNCTION_AUX_1 | `uint8` | 8 | -| FUNCTION_AUX_2 | `uint8` | 9 | -| FUNCTION_AUX_3 | `uint8` | 10 | -| FUNCTION_AUX_4 | `uint8` | 11 | -| FUNCTION_AUX_5 | `uint8` | 12 | -| FUNCTION_AUX_6 | `uint8` | 13 | -| FUNCTION_PARAM_1 | `uint8` | 14 | -| FUNCTION_PARAM_2 | `uint8` | 15 | -| FUNCTION_PARAM_3_5 | `uint8` | 16 | -| FUNCTION_KILLSWITCH | `uint8` | 17 | -| FUNCTION_TRANSITION | `uint8` | 18 | -| FUNCTION_GEAR | `uint8` | 19 | -| FUNCTION_ARMSWITCH | `uint8` | 20 | -| FUNCTION_FLTBTN_SLOT_1 | `uint8` | 21 | -| FUNCTION_FLTBTN_SLOT_2 | `uint8` | 22 | -| FUNCTION_FLTBTN_SLOT_3 | `uint8` | 23 | -| FUNCTION_FLTBTN_SLOT_4 | `uint8` | 24 | -| FUNCTION_FLTBTN_SLOT_5 | `uint8` | 25 | -| FUNCTION_FLTBTN_SLOT_6 | `uint8` | 26 | -| FUNCTION_ENGAGE_MAIN_MOTOR | `uint8` | 27 | -| FUNCTION_PAYLOAD_POWER | `uint8` | 28 | -| FUNCTION_TERMINATION | `uint8` | 29 | -| FUNCTION_FLTBTN_SLOT_COUNT | `uint8` | 6 | +| Name | Type | Value | Description | +| ------------------------------------------------------------------- | ------- | ----- | ----------- | +| FUNCTION_THROTTLE | `uint8` | 0 | +| FUNCTION_ROLL | `uint8` | 1 | +| FUNCTION_PITCH | `uint8` | 2 | +| FUNCTION_YAW | `uint8` | 3 | +| FUNCTION_RETURN | `uint8` | 4 | +| FUNCTION_LOITER | `uint8` | 5 | +| FUNCTION_OFFBOARD | `uint8` | 6 | +| FUNCTION_FLAPS | `uint8` | 7 | +| FUNCTION_AUX_1 | `uint8` | 8 | +| FUNCTION_AUX_2 | `uint8` | 9 | +| FUNCTION_AUX_3 | `uint8` | 10 | +| FUNCTION_AUX_4 | `uint8` | 11 | +| FUNCTION_AUX_5 | `uint8` | 12 | +| FUNCTION_AUX_6 | `uint8` | 13 | +| FUNCTION_PARAM_1 | `uint8` | 14 | +| FUNCTION_PARAM_2 | `uint8` | 15 | +| FUNCTION_PARAM_3_5 | `uint8` | 16 | +| FUNCTION_KILLSWITCH | `uint8` | 17 | +| FUNCTION_TRANSITION | `uint8` | 18 | +| FUNCTION_GEAR | `uint8` | 19 | +| FUNCTION_ARMSWITCH | `uint8` | 20 | +| FUNCTION_FLTBTN_SLOT_1 | `uint8` | 21 | +| FUNCTION_FLTBTN_SLOT_2 | `uint8` | 22 | +| FUNCTION_FLTBTN_SLOT_3 | `uint8` | 23 | +| FUNCTION_FLTBTN_SLOT_4 | `uint8` | 24 | +| FUNCTION_FLTBTN_SLOT_5 | `uint8` | 25 | +| FUNCTION_FLTBTN_SLOT_6 | `uint8` | 26 | +| FUNCTION_ENGAGE_MAIN_MOTOR | `uint8` | 27 | +| FUNCTION_PAYLOAD_POWER | `uint8` | 28 | +| FUNCTION_TERMINATION | `uint8` | 29 | +| FUNCTION_FLTBTN_SLOT_COUNT | `uint8` | 6 | ## Source Message diff --git a/docs/en/msg_docs/RcParameterMap.md b/docs/en/msg_docs/RcParameterMap.md index 43b89f1c9d..750f5d76b3 100644 --- a/docs/en/msg_docs/RcParameterMap.md +++ b/docs/en/msg_docs/RcParameterMap.md @@ -21,10 +21,10 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| ----------------------------------------------------- | ------- | ----- | ------------------------------------------------------------------------------ | -| RC_PARAM_MAP_NCHAN | `uint8` | 3 | This limit is also hardcoded in the enum RC_CHANNELS_FUNCTION in rc_channels.h | -| PARAM_ID_LEN | `uint8` | 16 | corresponds to MAVLINK_MSG_PARAM_VALUE_FIELD_PARAM_ID_LEN | +| Name | Type | Value | Description | +| --------------------------------------------------- | ------- | ----- | ------------------------------------------------------------------------------ | +| RC_PARAM_MAP_NCHAN | `uint8` | 3 | This limit is also hardcoded in the enum RC_CHANNELS_FUNCTION in rc_channels.h | +| PARAM_ID_LEN | `uint8` | 16 | corresponds to MAVLINK_MSG_PARAM_VALUE_FIELD_PARAM_ID_LEN | ## Source Message diff --git a/docs/en/msg_docs/RegisterExtComponentReply.md b/docs/en/msg_docs/RegisterExtComponentReply.md index 1f14caeb6e..c6f483cc32 100644 --- a/docs/en/msg_docs/RegisterExtComponentReply.md +++ b/docs/en/msg_docs/RegisterExtComponentReply.md @@ -22,10 +22,10 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| ------------------------------------------------- | -------- | ----- | ----------- | -| MESSAGE_VERSION | `uint32` | 1 | -| ORB_QUEUE_LENGTH | `uint8` | 2 | +| Name | Type | Value | Description | +| ----------------------------------------------- | -------- | ----- | ----------- | +| MESSAGE_VERSION | `uint32` | 1 | +| ORB_QUEUE_LENGTH | `uint8` | 2 | ## Source Message diff --git a/docs/en/msg_docs/RegisterExtComponentReplyV0.md b/docs/en/msg_docs/RegisterExtComponentReplyV0.md index 67912cf38d..45e288206e 100644 --- a/docs/en/msg_docs/RegisterExtComponentReplyV0.md +++ b/docs/en/msg_docs/RegisterExtComponentReplyV0.md @@ -21,10 +21,10 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| ------------------------------------------------- | -------- | ----- | ----------- | -| MESSAGE_VERSION | `uint32` | 0 | -| ORB_QUEUE_LENGTH | `uint8` | 2 | +| Name | Type | Value | Description | +| ----------------------------------------------- | -------- | ----- | ----------- | +| MESSAGE_VERSION | `uint32` | 0 | +| ORB_QUEUE_LENGTH | `uint8` | 2 | ## Source Message diff --git a/docs/en/msg_docs/RegisterExtComponentRequest.md b/docs/en/msg_docs/RegisterExtComponentRequest.md index d12117c44b..c37c15672c 100644 --- a/docs/en/msg_docs/RegisterExtComponentRequest.md +++ b/docs/en/msg_docs/RegisterExtComponentRequest.md @@ -23,14 +23,15 @@ Request to register an external component. | replace_internal_mode | `uint8` | | | vehicle*status::NAVIGATION_STATE*\* | | activate_mode_immediately | `bool` | | | switch to the registered mode (can only be set in combination with an executor) | | not_user_selectable | `bool` | | | mode cannot be selected by the user | +| request_offboard_setpoints | `bool` | | | set to true if the registered mode wants to receive offboard trajectory setpoints via MAVLink | ## Constants -| Name | Type | Value | Description | -| ----------------------------------------------------------------------- | -------- | ----- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| MESSAGE_VERSION | `uint32` | 1 | -| LATEST_PX4_ROS2_API_VERSION | `uint16` | 1 | API version compatibility. Increase this on a breaking semantic change. Changes to any message field are detected separately and do not require an API version change. | -| ORB_QUEUE_LENGTH | `uint8` | 2 | +| Name | Type | Value | Description | +| --------------------------------------------------------------------- | -------- | ----- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| MESSAGE_VERSION | `uint32` | 2 | +| LATEST_PX4_ROS2_API_VERSION | `uint16` | 1 | API version compatibility. Increase this on a breaking semantic change. Changes to any message field are detected separately and do not require an API version change. | +| ORB_QUEUE_LENGTH | `uint8` | 2 | ## Source Message @@ -41,7 +42,7 @@ Request to register an external component. ```c # Request to register an external component -uint32 MESSAGE_VERSION = 1 +uint32 MESSAGE_VERSION = 2 uint64 timestamp # time since system start (microseconds) @@ -61,6 +62,7 @@ bool enable_replace_internal_mode # set to true if an internal mode should be r uint8 replace_internal_mode # vehicle_status::NAVIGATION_STATE_* bool activate_mode_immediately # switch to the registered mode (can only be set in combination with an executor) bool not_user_selectable # mode cannot be selected by the user +bool request_offboard_setpoints # set to true if the registered mode wants to receive offboard trajectory setpoints via MAVLink uint8 ORB_QUEUE_LENGTH = 2 ``` diff --git a/docs/en/msg_docs/RegisterExtComponentRequestV0.md b/docs/en/msg_docs/RegisterExtComponentRequestV0.md index b1c4cfc6d9..fff8c5c573 100644 --- a/docs/en/msg_docs/RegisterExtComponentRequestV0.md +++ b/docs/en/msg_docs/RegisterExtComponentRequestV0.md @@ -25,11 +25,11 @@ Request to register an external component. ## Constants -| Name | Type | Value | Description | -| ----------------------------------------------------------------------- | -------- | ----- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| MESSAGE_VERSION | `uint32` | 0 | -| LATEST_PX4_ROS2_API_VERSION | `uint16` | 1 | API version compatibility. Increase this on a breaking semantic change. Changes to any message field are detected separately and do not require an API version change. | -| ORB_QUEUE_LENGTH | `uint8` | 2 | +| Name | Type | Value | Description | +| --------------------------------------------------------------------- | -------- | ----- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| MESSAGE_VERSION | `uint32` | 0 | +| LATEST_PX4_ROS2_API_VERSION | `uint16` | 1 | API version compatibility. Increase this on a breaking semantic change. Changes to any message field are detected separately and do not require an API version change. | +| ORB_QUEUE_LENGTH | `uint8` | 2 | ## Source Message diff --git a/docs/en/msg_docs/RegisterExtComponentRequestV1.md b/docs/en/msg_docs/RegisterExtComponentRequestV1.md new file mode 100644 index 0000000000..ce12115eda --- /dev/null +++ b/docs/en/msg_docs/RegisterExtComponentRequestV1.md @@ -0,0 +1,68 @@ +--- +pageClass: is-wide-page +--- + +# RegisterExtComponentRequestV1 (UORB message) + +Request to register an external component. + +**TOPICS:** register_ext_component_request_v1 + +## Fields + +| Name | Type | Unit [Frame] | Range/Enum | Description | +| ---------------------------- | ---------- | ------------ | ---------- | ------------------------------------------------------------------------------------------------------- | +| timestamp | `uint64` | | | time since system start (microseconds) | +| request_id | `uint64` | | | ID, set this to a random value | +| name | `char[25]` | | | either the requested mode name, or component name | +| px4_ros2_api_version | `uint16` | | | Set to LATEST_PX4_ROS2_API_VERSION | +| register_arming_check | `bool` | | | +| register_mode | `bool` | | | registering a mode also requires arming_check to be set | +| register_mode_executor | `bool` | | | registering an executor also requires a mode to be registered (which is the owned mode by the executor) | +| enable_replace_internal_mode | `bool` | | | set to true if an internal mode should be replaced | +| replace_internal_mode | `uint8` | | | vehicle*status::NAVIGATION_STATE*\* | +| activate_mode_immediately | `bool` | | | switch to the registered mode (can only be set in combination with an executor) | +| not_user_selectable | `bool` | | | mode cannot be selected by the user | + +## Constants + +| Name | Type | Value | Description | +| --------------------------------------------------------------------- | -------- | ----- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| MESSAGE_VERSION | `uint32` | 1 | +| LATEST_PX4_ROS2_API_VERSION | `uint16` | 1 | API version compatibility. Increase this on a breaking semantic change. Changes to any message field are detected separately and do not require an API version change. | +| ORB_QUEUE_LENGTH | `uint8` | 2 | + +## Source Message + +[Source file (GitHub)](https://github.com/PX4/PX4-Autopilot/blob/main/msg/px4_msgs_old/msg/RegisterExtComponentRequestV1.msg) + +::: details Click here to see original file + +```c +# Request to register an external component + +uint32 MESSAGE_VERSION = 1 + +uint64 timestamp # time since system start (microseconds) + +uint64 request_id # ID, set this to a random value +char[25] name # either the requested mode name, or component name + +uint16 LATEST_PX4_ROS2_API_VERSION = 1 # API version compatibility. Increase this on a breaking semantic change. Changes to any message field are detected separately and do not require an API version change. + +uint16 px4_ros2_api_version # Set to LATEST_PX4_ROS2_API_VERSION + +# Components to be registered +bool register_arming_check +bool register_mode # registering a mode also requires arming_check to be set +bool register_mode_executor # registering an executor also requires a mode to be registered (which is the owned mode by the executor) + +bool enable_replace_internal_mode # set to true if an internal mode should be replaced +uint8 replace_internal_mode # vehicle_status::NAVIGATION_STATE_* +bool activate_mode_immediately # switch to the registered mode (can only be set in combination with an executor) +bool not_user_selectable # mode cannot be selected by the user + +uint8 ORB_QUEUE_LENGTH = 2 +``` + +::: diff --git a/docs/en/msg_docs/RtlStatus.md b/docs/en/msg_docs/RtlStatus.md index ea1da9648c..e23b16c6a7 100644 --- a/docs/en/msg_docs/RtlStatus.md +++ b/docs/en/msg_docs/RtlStatus.md @@ -15,17 +15,17 @@ pageClass: is-wide-page | is_evaluation_pending | `bool` | | | flag if the RTL point needs reevaluation (e.g. new safe points available, but need loading). | | has_vtol_approach | `bool` | | | flag if approaches are defined for current RTL_TYPE parameter setting | | rtl_type | `uint8` | | | Type of RTL chosen | -| safe_point_index | `uint8` | | | index of the chosen safe point, if in RTL_STATUS_TYPE_DIRECT_SAFE_POINT mode | +| safe_point_index | `uint8` | | | index of the chosen safe point, UINT8_MAX if no rally point was chosen | ## Constants -| Name | Type | Value | Description | -| --------------------------------------------------------------------------------------------- | ------- | ----- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | -| RTL_STATUS_TYPE_NONE | `uint8` | 0 | pending if evaluation can't pe performed currently e.g. when it is still loading the safe points | -| RTL_STATUS_TYPE_DIRECT_SAFE_POINT | `uint8` | 1 | chosen to directly go to a safe point or home position | -| RTL_STATUS_TYPE_DIRECT_MISSION_LAND | `uint8` | 2 | going straight to the beginning of the mission landing | -| RTL_STATUS_TYPE_FOLLOW_MISSION | `uint8` | 3 | Following the mission from start index to mission landing. Start index is current WP if in Mission mode, and closest WP otherwise. | -| RTL_STATUS_TYPE_FOLLOW_MISSION_REVERSE | `uint8` | 4 | Following the mission in reverse from start index to the beginning of the mission. Start index is previous WP if in Mission mode, and closest WP otherwise. | +| Name | Type | Value | Description | +| ------------------------------------------------------------------------------------------- | ------- | ----- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | +| RTL_STATUS_TYPE_NONE | `uint8` | 0 | pending if evaluation can't pe performed currently e.g. when it is still loading the safe points | +| RTL_STATUS_TYPE_DIRECT_SAFE_POINT | `uint8` | 1 | chosen to directly go to a safe point or home position | +| RTL_STATUS_TYPE_DIRECT_MISSION_LAND | `uint8` | 2 | going straight to the beginning of the mission landing | +| RTL_STATUS_TYPE_FOLLOW_MISSION | `uint8` | 3 | Following the mission from start index to mission landing. Start index is current WP if in Mission mode, and closest WP otherwise. | +| RTL_STATUS_TYPE_FOLLOW_MISSION_REVERSE | `uint8` | 4 | Following the mission in reverse from start index to the beginning of the mission. Start index is previous WP if in Mission mode, and closest WP otherwise. | ## Source Message @@ -42,7 +42,7 @@ bool is_evaluation_pending # flag if the RTL point needs reevaluation (e. bool has_vtol_approach # flag if approaches are defined for current RTL_TYPE parameter setting uint8 rtl_type # Type of RTL chosen -uint8 safe_point_index # index of the chosen safe point, if in RTL_STATUS_TYPE_DIRECT_SAFE_POINT mode +uint8 safe_point_index # index of the chosen safe point, UINT8_MAX if no rally point was chosen uint8 RTL_STATUS_TYPE_NONE=0 # pending if evaluation can't pe performed currently e.g. when it is still loading the safe points uint8 RTL_STATUS_TYPE_DIRECT_SAFE_POINT=1 # chosen to directly go to a safe point or home position diff --git a/docs/en/msg_docs/SatelliteInfo.md b/docs/en/msg_docs/SatelliteInfo.md index af1587d7a6..ca26b80284 100644 --- a/docs/en/msg_docs/SatelliteInfo.md +++ b/docs/en/msg_docs/SatelliteInfo.md @@ -21,9 +21,9 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| --------------------------------------------------------------- | ------- | ----- | ----------- | -| SAT_INFO_MAX_SATELLITES | `uint8` | 40 | +| Name | Type | Value | Description | +| ------------------------------------------------------------- | ------- | ----- | ----------- | +| SAT_INFO_MAX_SATELLITES | `uint8` | 40 | ## Source Message diff --git a/docs/en/msg_docs/SensorAccel.md b/docs/en/msg_docs/SensorAccel.md index 5c34986404..3a14c8a20e 100644 --- a/docs/en/msg_docs/SensorAccel.md +++ b/docs/en/msg_docs/SensorAccel.md @@ -23,9 +23,9 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| ------------------------------------------------- | ------- | ----- | ----------- | -| ORB_QUEUE_LENGTH | `uint8` | 8 | +| Name | Type | Value | Description | +| ----------------------------------------------- | ------- | ----- | ----------- | +| ORB_QUEUE_LENGTH | `uint8` | 8 | ## Source Message diff --git a/docs/en/msg_docs/SensorBaro.md b/docs/en/msg_docs/SensorBaro.md index 22038554af..3603ba504a 100644 --- a/docs/en/msg_docs/SensorBaro.md +++ b/docs/en/msg_docs/SensorBaro.md @@ -24,9 +24,9 @@ The information is published in the `SCALED_PRESSURE_n` MAVLink messages (along ## Constants -| Name | Type | Value | Description | -| ------------------------------------------------- | ------- | ----- | ----------- | -| ORB_QUEUE_LENGTH | `uint8` | 4 | +| Name | Type | Value | Description | +| ----------------------------------------------- | ------- | ----- | ----------- | +| ORB_QUEUE_LENGTH | `uint8` | 4 | ## Source Message diff --git a/docs/en/msg_docs/SensorCombined.md b/docs/en/msg_docs/SensorCombined.md index e04c3fcab4..44f02dab94 100644 --- a/docs/en/msg_docs/SensorCombined.md +++ b/docs/en/msg_docs/SensorCombined.md @@ -25,12 +25,12 @@ Sensor readings in SI-unit form. These fields are scaled and offset-compensated ## Constants -| Name | Type | Value | Description | -| --------------------------------------------------------------------- | ------- | ---------- | ---------------------------------------------------------------------------------------------------------------------- | -| RELATIVE_TIMESTAMP_INVALID | `int32` | 2147483647 | (0x7fffffff) If one of the relative timestamps is set to this value, it means the associated sensor values are invalid | -| CLIPPING_X | `uint8` | 1 | -| CLIPPING_Y | `uint8` | 2 | -| CLIPPING_Z | `uint8` | 4 | +| Name | Type | Value | Description | +| ------------------------------------------------------------------- | ------- | ---------- | ---------------------------------------------------------------------------------------------------------------------- | +| RELATIVE_TIMESTAMP_INVALID | `int32` | 2147483647 | (0x7fffffff) If one of the relative timestamps is set to this value, it means the associated sensor values are invalid | +| CLIPPING_X | `uint8` | 1 | +| CLIPPING_Y | `uint8` | 2 | +| CLIPPING_Z | `uint8` | 4 | ## Source Message diff --git a/docs/en/msg_docs/SensorGps.md b/docs/en/msg_docs/SensorGps.md index 4c8b3c58ab..831ff2e5f5 100644 --- a/docs/en/msg_docs/SensorGps.md +++ b/docs/en/msg_docs/SensorGps.md @@ -10,81 +10,84 @@ GPS position in WGS84 coordinates. the field 'timestamp' is for the position & v ## Fields -| Name | Type | Unit [Frame] | Range/Enum | Description | -| ----------------------- | --------- | ------------ | ---------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| timestamp | `uint64` | | | time since system start (microseconds) | -| timestamp_sample | `uint64` | | | -| device_id | `uint32` | | | unique device ID for the sensor that does not change between power cycles | -| latitude_deg | `float64` | | | Latitude in degrees, allows centimeter level RTK precision | -| longitude_deg | `float64` | | | Longitude in degrees, allows centimeter level RTK precision | -| altitude_msl_m | `float64` | | | Altitude above MSL, meters | -| altitude_ellipsoid_m | `float64` | | | Altitude above Ellipsoid, meters | -| s_variance_m_s | `float32` | | | GPS speed accuracy estimate, (metres/sec) | -| c_variance_rad | `float32` | | | GPS course accuracy estimate, (radians) | -| fix_type | `uint8` | | | Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. | -| eph | `float32` | | | GPS horizontal position accuracy (metres) | -| epv | `float32` | | | GPS vertical position accuracy (metres) | -| hdop | `float32` | | | Horizontal dilution of precision | -| vdop | `float32` | | | Vertical dilution of precision | -| noise_per_ms | `int32` | | | GPS noise per millisecond | -| automatic_gain_control | `uint16` | | | Automatic gain control monitor | -| jamming_state | `uint8` | | | indicates whether jamming has been detected or suspected by the receivers. O: Unknown, 1: OK, 2: Mitigated, 3: Detected | -| jamming_indicator | `int32` | | | indicates jamming is occurring | -| spoofing_state | `uint8` | | | indicates whether spoofing has been detected or suspected by the receivers. O: Unknown, 1: OK, 2: Mitigated, 3: Detected | -| authentication_state | `uint8` | | | GPS signal authentication state | -| vel_m_s | `float32` | | | GPS ground speed, (metres/sec) | -| vel_n_m_s | `float32` | | | GPS North velocity, (metres/sec) | -| vel_e_m_s | `float32` | | | GPS East velocity, (metres/sec) | -| vel_d_m_s | `float32` | | | GPS Down velocity, (metres/sec) | -| cog_rad | `float32` | | | Course over ground (NOT heading, but direction of movement), -PI..PI, (radians) | -| vel_ned_valid | `bool` | | | True if NED velocity is valid | -| timestamp_time_relative | `int32` | | | timestamp + timestamp_time_relative = Time of the UTC timestamp since system start, (microseconds) | -| time_utc_usec | `uint64` | | | Timestamp (microseconds, UTC), this is the timestamp which comes from the gps module. It might be unavailable right after cold start, indicated by a value of 0 | -| satellites_used | `uint8` | | | Number of satellites used | -| system_error | `uint32` | | | General errors with the connected GPS receiver | -| heading | `float32` | | | heading angle of XYZ body frame rel to NED. Set to NaN if not available and updated (used for dual antenna GPS), (rad, [-PI, PI]) | -| heading_offset | `float32` | | | heading offset of dual antenna array in body frame. Set to NaN if not applicable. (rad, [-PI, PI]) | -| heading_accuracy | `float32` | | | heading accuracy (rad, [0, 2PI]) | -| rtcm_injection_rate | `float32` | | | RTCM message injection rate Hz | -| selected_rtcm_instance | `uint8` | | | uorb instance that is being used for RTCM corrections | -| rtcm_crc_failed | `bool` | | | RTCM message CRC failure detected | -| rtcm_msg_used | `uint8` | | | Indicates if the RTCM message was used successfully by the receiver | +| Name | Type | Unit [Frame] | Range/Enum | Description | +| ----------------------- | --------- | ------------------ | ---------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| timestamp | `uint64` | | | time since system start (microseconds) | +| timestamp_sample | `uint64` | | | +| device_id | `uint32` | | | unique device ID for the sensor that does not change between power cycles | +| latitude_deg | `float64` | | | Latitude in degrees, allows centimeter level RTK precision | +| longitude_deg | `float64` | | | Longitude in degrees, allows centimeter level RTK precision | +| altitude_msl_m | `float64` | | | Altitude above MSL, meters | +| altitude_ellipsoid_m | `float64` | | | Altitude above Ellipsoid, meters | +| s_variance_m_s | `float32` | | | GPS speed accuracy estimate, (metres/sec) | +| c_variance_rad | `float32` | | | GPS course accuracy estimate, (radians) | +| fix_type | `uint8` | | | Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. | +| eph | `float32` | | | GPS horizontal position accuracy (metres) | +| epv | `float32` | | | GPS vertical position accuracy (metres) | +| hdop | `float32` | | | Horizontal dilution of precision | +| vdop | `float32` | | | Vertical dilution of precision | +| noise_per_ms | `int32` | | | GPS noise per millisecond | +| automatic_gain_control | `uint16` | | | Automatic gain control monitor | +| jamming_state | `uint8` | | | indicates whether jamming has been detected or suspected by the receivers. O: Unknown, 1: OK, 2: Mitigated, 3: Detected | +| jamming_indicator | `int32` | | | indicates jamming is occurring | +| spoofing_state | `uint8` | | | indicates whether spoofing has been detected or suspected by the receivers. O: Unknown, 1: OK, 2: Mitigated, 3: Detected | +| authentication_state | `uint8` | | | GPS signal authentication state | +| vel_m_s | `float32` | | | GPS ground speed, (metres/sec) | +| vel_n_m_s | `float32` | | | GPS North velocity, (metres/sec) | +| vel_e_m_s | `float32` | | | GPS East velocity, (metres/sec) | +| vel_d_m_s | `float32` | | | GPS Down velocity, (metres/sec) | +| cog_rad | `float32` | | | Course over ground (NOT heading, but direction of movement), -PI..PI, (radians) | +| vel_ned_valid | `bool` | | | True if NED velocity is valid | +| timestamp_time_relative | `int32` | | | timestamp + timestamp_time_relative = Time of the UTC timestamp since system start, (microseconds) | +| time_utc_usec | `uint64` | | | Timestamp (microseconds, UTC), this is the timestamp which comes from the gps module. It might be unavailable right after cold start, indicated by a value of 0 | +| satellites_used | `uint8` | | | Number of satellites used | +| system_error | `uint32` | | | General errors with the connected GPS receiver | +| heading | `float32` | | | heading angle of XYZ body frame rel to NED. Set to NaN if not available and updated (used for dual antenna GPS), (rad, [-PI, PI]) | +| heading_offset | `float32` | | | heading offset of dual antenna array in body frame. Set to NaN if not applicable. (rad, [-PI, PI]) | +| heading_accuracy | `float32` | | | heading accuracy (rad, [0, 2PI]) | +| rtcm_injection_rate | `float32` | | | RTCM message injection rate Hz | +| selected_rtcm_instance | `uint8` | | | uorb instance that is being used for RTCM corrections | +| rtcm_crc_failed | `bool` | | | RTCM message CRC failure detected | +| rtcm_msg_used | `uint8` | | | Indicates if the RTCM message was used successfully by the receiver | +| antenna_offset_x | `float32` | m [body frame FRD] | | X Position of GNSS antenna | +| antenna_offset_y | `float32` | m [body frame FRD] | | Y Position of GNSS antenna | +| antenna_offset_z | `float32` | m [body frame FRD] | | Z Position of GNSS antenna | ## Constants -| Name | Type | Value | Description | -| ----------------------------------------------------------------------------------- | -------- | ----- | ------------------------------------------ | -| FIX_TYPE_NONE | `uint8` | 1 | Value 0 is also valid to represent no fix. | -| FIX_TYPE_2D | `uint8` | 2 | -| FIX_TYPE_3D | `uint8` | 3 | -| FIX_TYPE_RTCM_CODE_DIFFERENTIAL | `uint8` | 4 | -| FIX_TYPE_RTK_FLOAT | `uint8` | 5 | -| FIX_TYPE_RTK_FIXED | `uint8` | 6 | -| FIX_TYPE_EXTRAPOLATED | `uint8` | 8 | -| JAMMING_STATE_UNKNOWN | `uint8` | 0 | default | -| JAMMING_STATE_OK | `uint8` | 1 | -| JAMMING_STATE_MITIGATED | `uint8` | 2 | -| JAMMING_STATE_DETECTED | `uint8` | 3 | -| SPOOFING_STATE_UNKNOWN | `uint8` | 0 | default | -| SPOOFING_STATE_OK | `uint8` | 1 | -| SPOOFING_STATE_MITIGATED | `uint8` | 2 | -| SPOOFING_STATE_DETECTED | `uint8` | 3 | -| AUTHENTICATION_STATE_UNKNOWN | `uint8` | 0 | default | -| AUTHENTICATION_STATE_INITIALIZING | `uint8` | 1 | -| AUTHENTICATION_STATE_ERROR | `uint8` | 2 | -| AUTHENTICATION_STATE_OK | `uint8` | 3 | -| AUTHENTICATION_STATE_DISABLED | `uint8` | 4 | -| SYSTEM_ERROR_OK | `uint32` | 0 | default | -| SYSTEM_ERROR_INCOMING_CORRECTIONS | `uint32` | 1 | -| SYSTEM_ERROR_CONFIGURATION | `uint32` | 2 | -| SYSTEM_ERROR_SOFTWARE | `uint32` | 4 | -| SYSTEM_ERROR_ANTENNA | `uint32` | 8 | -| SYSTEM_ERROR_EVENT_CONGESTION | `uint32` | 16 | -| SYSTEM_ERROR_CPU_OVERLOAD | `uint32` | 32 | -| SYSTEM_ERROR_OUTPUT_CONGESTION | `uint32` | 64 | -| RTCM_MSG_USED_UNKNOWN | `uint8` | 0 | -| RTCM_MSG_USED_NOT_USED | `uint8` | 1 | -| RTCM_MSG_USED_USED | `uint8` | 2 | +| Name | Type | Value | Description | +| --------------------------------------------------------------------------------- | -------- | ----- | ------------------------------------------ | +| FIX_TYPE_NONE | `uint8` | 1 | Value 0 is also valid to represent no fix. | +| FIX_TYPE_2D | `uint8` | 2 | +| FIX_TYPE_3D | `uint8` | 3 | +| FIX_TYPE_RTCM_CODE_DIFFERENTIAL | `uint8` | 4 | +| FIX_TYPE_RTK_FLOAT | `uint8` | 5 | +| FIX_TYPE_RTK_FIXED | `uint8` | 6 | +| FIX_TYPE_EXTRAPOLATED | `uint8` | 8 | +| JAMMING_STATE_UNKNOWN | `uint8` | 0 | default | +| JAMMING_STATE_OK | `uint8` | 1 | +| JAMMING_STATE_MITIGATED | `uint8` | 2 | +| JAMMING_STATE_DETECTED | `uint8` | 3 | +| SPOOFING_STATE_UNKNOWN | `uint8` | 0 | default | +| SPOOFING_STATE_OK | `uint8` | 1 | +| SPOOFING_STATE_MITIGATED | `uint8` | 2 | +| SPOOFING_STATE_DETECTED | `uint8` | 3 | +| AUTHENTICATION_STATE_UNKNOWN | `uint8` | 0 | default | +| AUTHENTICATION_STATE_INITIALIZING | `uint8` | 1 | +| AUTHENTICATION_STATE_ERROR | `uint8` | 2 | +| AUTHENTICATION_STATE_OK | `uint8` | 3 | +| AUTHENTICATION_STATE_DISABLED | `uint8` | 4 | +| SYSTEM_ERROR_OK | `uint32` | 0 | default | +| SYSTEM_ERROR_INCOMING_CORRECTIONS | `uint32` | 1 | +| SYSTEM_ERROR_CONFIGURATION | `uint32` | 2 | +| SYSTEM_ERROR_SOFTWARE | `uint32` | 4 | +| SYSTEM_ERROR_ANTENNA | `uint32` | 8 | +| SYSTEM_ERROR_EVENT_CONGESTION | `uint32` | 16 | +| SYSTEM_ERROR_CPU_OVERLOAD | `uint32` | 32 | +| SYSTEM_ERROR_OUTPUT_CONGESTION | `uint32` | 64 | +| RTCM_MSG_USED_UNKNOWN | `uint8` | 0 | +| RTCM_MSG_USED_NOT_USED | `uint8` | 1 | +| RTCM_MSG_USED_USED | `uint8` | 2 | ## Source Message @@ -182,6 +185,10 @@ uint8 RTCM_MSG_USED_NOT_USED = 1 uint8 RTCM_MSG_USED_USED = 2 uint8 rtcm_msg_used # Indicates if the RTCM message was used successfully by the receiver +float32 antenna_offset_x # [m] [@frame body frame FRD] X Position of GNSS antenna +float32 antenna_offset_y # [m] [@frame body frame FRD] Y Position of GNSS antenna +float32 antenna_offset_z # [m] [@frame body frame FRD] Z Position of GNSS antenna + # TOPICS sensor_gps vehicle_gps_position ``` diff --git a/docs/en/msg_docs/SensorGyro.md b/docs/en/msg_docs/SensorGyro.md index aea82546dd..8e4c63b5b4 100644 --- a/docs/en/msg_docs/SensorGyro.md +++ b/docs/en/msg_docs/SensorGyro.md @@ -23,9 +23,9 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| ------------------------------------------------- | ------- | ----- | ----------- | -| ORB_QUEUE_LENGTH | `uint8` | 8 | +| Name | Type | Value | Description | +| ----------------------------------------------- | ------- | ----- | ----------- | +| ORB_QUEUE_LENGTH | `uint8` | 8 | ## Source Message diff --git a/docs/en/msg_docs/SensorGyroFifo.md b/docs/en/msg_docs/SensorGyroFifo.md index b084261cd4..e2cabb5190 100644 --- a/docs/en/msg_docs/SensorGyroFifo.md +++ b/docs/en/msg_docs/SensorGyroFifo.md @@ -22,9 +22,9 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| ------------------------------------------------- | ------- | ----- | ----------- | -| ORB_QUEUE_LENGTH | `uint8` | 4 | +| Name | Type | Value | Description | +| ----------------------------------------------- | ------- | ----- | ----------- | +| ORB_QUEUE_LENGTH | `uint8` | 4 | ## Source Message diff --git a/docs/en/msg_docs/SensorMag.md b/docs/en/msg_docs/SensorMag.md index 06f95d0fab..f689f00380 100644 --- a/docs/en/msg_docs/SensorMag.md +++ b/docs/en/msg_docs/SensorMag.md @@ -21,9 +21,9 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| ------------------------------------------------- | ------- | ----- | ----------- | -| ORB_QUEUE_LENGTH | `uint8` | 4 | +| Name | Type | Value | Description | +| ----------------------------------------------- | ------- | ----- | ----------- | +| ORB_QUEUE_LENGTH | `uint8` | 4 | ## Source Message diff --git a/docs/en/msg_docs/SensorOpticalFlow.md b/docs/en/msg_docs/SensorOpticalFlow.md index 698b6a1f44..fc3af0e977 100644 --- a/docs/en/msg_docs/SensorOpticalFlow.md +++ b/docs/en/msg_docs/SensorOpticalFlow.md @@ -28,12 +28,12 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| ------------------------------------------------------- | ------- | ----- | ----------- | -| MODE_UNKNOWN | `uint8` | 0 | -| MODE_BRIGHT | `uint8` | 1 | -| MODE_LOWLIGHT | `uint8` | 2 | -| MODE_SUPER_LOWLIGHT | `uint8` | 3 | +| Name | Type | Value | Description | +| ----------------------------------------------------- | ------- | ----- | ----------- | +| MODE_UNKNOWN | `uint8` | 0 | +| MODE_BRIGHT | `uint8` | 1 | +| MODE_LOWLIGHT | `uint8` | 2 | +| MODE_SUPER_LOWLIGHT | `uint8` | 3 | ## Source Message diff --git a/docs/en/msg_docs/SystemPower.md b/docs/en/msg_docs/SystemPower.md index 2fe83124d2..3d9c8caf93 100644 --- a/docs/en/msg_docs/SystemPower.md +++ b/docs/en/msg_docs/SystemPower.md @@ -27,16 +27,16 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| ------------------------------------------------------- | ------- | ----- | ----------- | -| BRICK1_VALID_SHIFTS | `uint8` | 0 | -| BRICK1_VALID_MASK | `uint8` | 1 | -| BRICK2_VALID_SHIFTS | `uint8` | 1 | -| BRICK2_VALID_MASK | `uint8` | 2 | -| BRICK3_VALID_SHIFTS | `uint8` | 2 | -| BRICK3_VALID_MASK | `uint8` | 4 | -| BRICK4_VALID_SHIFTS | `uint8` | 3 | -| BRICK4_VALID_MASK | `uint8` | 8 | +| Name | Type | Value | Description | +| ----------------------------------------------------- | ------- | ----- | ----------- | +| BRICK1_VALID_SHIFTS | `uint8` | 0 | +| BRICK1_VALID_MASK | `uint8` | 1 | +| BRICK2_VALID_SHIFTS | `uint8` | 1 | +| BRICK2_VALID_MASK | `uint8` | 2 | +| BRICK3_VALID_SHIFTS | `uint8` | 2 | +| BRICK3_VALID_MASK | `uint8` | 4 | +| BRICK4_VALID_SHIFTS | `uint8` | 3 | +| BRICK4_VALID_MASK | `uint8` | 8 | ## Source Message diff --git a/docs/en/msg_docs/TakeoffStatus.md b/docs/en/msg_docs/TakeoffStatus.md index 8567effe40..6176bb4b8f 100644 --- a/docs/en/msg_docs/TakeoffStatus.md +++ b/docs/en/msg_docs/TakeoffStatus.md @@ -18,14 +18,14 @@ Status of the takeoff state machine currently just available for multicopters. ## Constants -| Name | Type | Value | Description | -| ------------------------------------------------------------------------------- | ------- | ----- | ----------- | -| TAKEOFF_STATE_UNINITIALIZED | `uint8` | 0 | -| TAKEOFF_STATE_DISARMED | `uint8` | 1 | -| TAKEOFF_STATE_SPOOLUP | `uint8` | 2 | -| TAKEOFF_STATE_READY_FOR_TAKEOFF | `uint8` | 3 | -| TAKEOFF_STATE_RAMPUP | `uint8` | 4 | -| TAKEOFF_STATE_FLIGHT | `uint8` | 5 | +| Name | Type | Value | Description | +| ----------------------------------------------------------------------------- | ------- | ----- | ----------- | +| TAKEOFF_STATE_UNINITIALIZED | `uint8` | 0 | +| TAKEOFF_STATE_DISARMED | `uint8` | 1 | +| TAKEOFF_STATE_SPOOLUP | `uint8` | 2 | +| TAKEOFF_STATE_READY_FOR_TAKEOFF | `uint8` | 3 | +| TAKEOFF_STATE_RAMPUP | `uint8` | 4 | +| TAKEOFF_STATE_FLIGHT | `uint8` | 5 | ## Source Message diff --git a/docs/en/msg_docs/TaskStackInfo.md b/docs/en/msg_docs/TaskStackInfo.md index c435321bdf..50794256a9 100644 --- a/docs/en/msg_docs/TaskStackInfo.md +++ b/docs/en/msg_docs/TaskStackInfo.md @@ -18,9 +18,9 @@ stack information for a single running process. ## Constants -| Name | Type | Value | Description | -| ------------------------------------------------- | ------- | ----- | ----------- | -| ORB_QUEUE_LENGTH | `uint8` | 2 | +| Name | Type | Value | Description | +| ----------------------------------------------- | ------- | ----- | ----------- | +| ORB_QUEUE_LENGTH | `uint8` | 2 | ## Source Message diff --git a/docs/en/msg_docs/TelemetryStatus.md b/docs/en/msg_docs/TelemetryStatus.md index db09b59472..4693292061 100644 --- a/docs/en/msg_docs/TelemetryStatus.md +++ b/docs/en/msg_docs/TelemetryStatus.md @@ -52,14 +52,14 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| ------------------------------------------------------------------- | -------- | ------- | ----------------------------------------------- | -| LINK_TYPE_GENERIC | `uint8` | 0 | -| LINK_TYPE_UBIQUITY_BULLET | `uint8` | 1 | -| LINK_TYPE_WIRE | `uint8` | 2 | -| LINK_TYPE_USB | `uint8` | 3 | -| LINK_TYPE_IRIDIUM | `uint8` | 4 | -| HEARTBEAT_TIMEOUT_US | `uint64` | 2500000 | Heartbeat timeout (tolerate missing 1 + jitter) | +| Name | Type | Value | Description | +| ----------------------------------------------------------------- | -------- | ------- | ----------------------------------------------- | +| LINK_TYPE_GENERIC | `uint8` | 0 | +| LINK_TYPE_UBIQUITY_BULLET | `uint8` | 1 | +| LINK_TYPE_WIRE | `uint8` | 2 | +| LINK_TYPE_USB | `uint8` | 3 | +| LINK_TYPE_IRIDIUM | `uint8` | 4 | +| HEARTBEAT_TIMEOUT_US | `uint64` | 2500000 | Heartbeat timeout (tolerate missing 1 + jitter) | ## Source Message diff --git a/docs/en/msg_docs/TimesyncStatus.md b/docs/en/msg_docs/TimesyncStatus.md index 7344f7c5b8..4162364860 100644 --- a/docs/en/msg_docs/TimesyncStatus.md +++ b/docs/en/msg_docs/TimesyncStatus.md @@ -19,11 +19,11 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| --------------------------------------------------------------- | ------- | ----- | ----------- | -| SOURCE_PROTOCOL_UNKNOWN | `uint8` | 0 | -| SOURCE_PROTOCOL_MAVLINK | `uint8` | 1 | -| SOURCE_PROTOCOL_DDS | `uint8` | 2 | +| Name | Type | Value | Description | +| ------------------------------------------------------------- | ------- | ----- | ----------- | +| SOURCE_PROTOCOL_UNKNOWN | `uint8` | 0 | +| SOURCE_PROTOCOL_MAVLINK | `uint8` | 1 | +| SOURCE_PROTOCOL_DDS | `uint8` | 2 | ## Source Message diff --git a/docs/en/msg_docs/TrajectorySetpoint.md b/docs/en/msg_docs/TrajectorySetpoint.md index a778ddcf0b..1a6f1af1f2 100644 --- a/docs/en/msg_docs/TrajectorySetpoint.md +++ b/docs/en/msg_docs/TrajectorySetpoint.md @@ -22,9 +22,9 @@ Trajectory setpoint in NED frame. Input to PID position controller. Needs to be ## Constants -| Name | Type | Value | Description | -| ----------------------------------------------- | -------- | ----- | ----------- | -| MESSAGE_VERSION | `uint32` | 0 | +| Name | Type | Value | Description | +| --------------------------------------------- | -------- | ----- | ----------- | +| MESSAGE_VERSION | `uint32` | 0 | ## Source Message diff --git a/docs/en/msg_docs/TransponderReport.md b/docs/en/msg_docs/TransponderReport.md index 6d1aba922f..fb39f90153 100644 --- a/docs/en/msg_docs/TransponderReport.md +++ b/docs/en/msg_docs/TransponderReport.md @@ -28,37 +28,37 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| --------------------------------------------------------------------------------------- | -------- | ----- | ----------- | -| PX4_ADSB_FLAGS_VALID_COORDS | `uint16` | 1 | -| PX4_ADSB_FLAGS_VALID_ALTITUDE | `uint16` | 2 | -| PX4_ADSB_FLAGS_VALID_HEADING | `uint16` | 4 | -| PX4_ADSB_FLAGS_VALID_VELOCITY | `uint16` | 8 | -| PX4_ADSB_FLAGS_VALID_CALLSIGN | `uint16` | 16 | -| PX4_ADSB_FLAGS_VALID_SQUAWK | `uint16` | 32 | -| PX4_ADSB_FLAGS_RETRANSLATE | `uint16` | 256 | -| ADSB_EMITTER_TYPE_NO_INFO | `uint16` | 0 | -| ADSB_EMITTER_TYPE_LIGHT | `uint16` | 1 | -| ADSB_EMITTER_TYPE_SMALL | `uint16` | 2 | -| ADSB_EMITTER_TYPE_LARGE | `uint16` | 3 | -| ADSB_EMITTER_TYPE_HIGH_VORTEX_LARGE | `uint16` | 4 | -| ADSB_EMITTER_TYPE_HEAVY | `uint16` | 5 | -| ADSB_EMITTER_TYPE_HIGHLY_MANUV | `uint16` | 6 | -| ADSB_EMITTER_TYPE_ROTOCRAFT | `uint16` | 7 | -| ADSB_EMITTER_TYPE_UNASSIGNED | `uint16` | 8 | -| ADSB_EMITTER_TYPE_GLIDER | `uint16` | 9 | -| ADSB_EMITTER_TYPE_LIGHTER_AIR | `uint16` | 10 | -| ADSB_EMITTER_TYPE_PARACHUTE | `uint16` | 11 | -| ADSB_EMITTER_TYPE_ULTRA_LIGHT | `uint16` | 12 | -| ADSB_EMITTER_TYPE_UNASSIGNED2 | `uint16` | 13 | -| ADSB_EMITTER_TYPE_UAV | `uint16` | 14 | -| ADSB_EMITTER_TYPE_SPACE | `uint16` | 15 | -| ADSB_EMITTER_TYPE_UNASSGINED3 | `uint16` | 16 | -| ADSB_EMITTER_TYPE_EMERGENCY_SURFACE | `uint16` | 17 | -| ADSB_EMITTER_TYPE_SERVICE_SURFACE | `uint16` | 18 | -| ADSB_EMITTER_TYPE_POINT_OBSTACLE | `uint16` | 19 | -| ADSB_EMITTER_TYPE_ENUM_END | `uint16` | 20 | -| ORB_QUEUE_LENGTH | `uint8` | 16 | +| Name | Type | Value | Description | +| ------------------------------------------------------------------------------------- | -------- | ----- | ----------- | +| PX4_ADSB_FLAGS_VALID_COORDS | `uint16` | 1 | +| PX4_ADSB_FLAGS_VALID_ALTITUDE | `uint16` | 2 | +| PX4_ADSB_FLAGS_VALID_HEADING | `uint16` | 4 | +| PX4_ADSB_FLAGS_VALID_VELOCITY | `uint16` | 8 | +| PX4_ADSB_FLAGS_VALID_CALLSIGN | `uint16` | 16 | +| PX4_ADSB_FLAGS_VALID_SQUAWK | `uint16` | 32 | +| PX4_ADSB_FLAGS_RETRANSLATE | `uint16` | 256 | +| ADSB_EMITTER_TYPE_NO_INFO | `uint16` | 0 | +| ADSB_EMITTER_TYPE_LIGHT | `uint16` | 1 | +| ADSB_EMITTER_TYPE_SMALL | `uint16` | 2 | +| ADSB_EMITTER_TYPE_LARGE | `uint16` | 3 | +| ADSB_EMITTER_TYPE_HIGH_VORTEX_LARGE | `uint16` | 4 | +| ADSB_EMITTER_TYPE_HEAVY | `uint16` | 5 | +| ADSB_EMITTER_TYPE_HIGHLY_MANUV | `uint16` | 6 | +| ADSB_EMITTER_TYPE_ROTOCRAFT | `uint16` | 7 | +| ADSB_EMITTER_TYPE_UNASSIGNED | `uint16` | 8 | +| ADSB_EMITTER_TYPE_GLIDER | `uint16` | 9 | +| ADSB_EMITTER_TYPE_LIGHTER_AIR | `uint16` | 10 | +| ADSB_EMITTER_TYPE_PARACHUTE | `uint16` | 11 | +| ADSB_EMITTER_TYPE_ULTRA_LIGHT | `uint16` | 12 | +| ADSB_EMITTER_TYPE_UNASSIGNED2 | `uint16` | 13 | +| ADSB_EMITTER_TYPE_UAV | `uint16` | 14 | +| ADSB_EMITTER_TYPE_SPACE | `uint16` | 15 | +| ADSB_EMITTER_TYPE_UNASSGINED3 | `uint16` | 16 | +| ADSB_EMITTER_TYPE_EMERGENCY_SURFACE | `uint16` | 17 | +| ADSB_EMITTER_TYPE_SERVICE_SURFACE | `uint16` | 18 | +| ADSB_EMITTER_TYPE_POINT_OBSTACLE | `uint16` | 19 | +| ADSB_EMITTER_TYPE_ENUM_END | `uint16` | 20 | +| ORB_QUEUE_LENGTH | `uint8` | 16 | ## Source Message diff --git a/docs/en/msg_docs/TuneControl.md b/docs/en/msg_docs/TuneControl.md index 25a79645d4..af44d088f2 100644 --- a/docs/en/msg_docs/TuneControl.md +++ b/docs/en/msg_docs/TuneControl.md @@ -22,33 +22,33 @@ This message is used to control the tunes, when the tune_id is set to CUSTOM. th ## Constants -| Name | Type | Value | Description | -| ------------------------------------------------------------------------- | ------- | ----- | ----------- | -| TUNE_ID_STOP | `uint8` | 0 | -| TUNE_ID_STARTUP | `uint8` | 1 | -| TUNE_ID_ERROR | `uint8` | 2 | -| TUNE_ID_NOTIFY_POSITIVE | `uint8` | 3 | -| TUNE_ID_NOTIFY_NEUTRAL | `uint8` | 4 | -| TUNE_ID_NOTIFY_NEGATIVE | `uint8` | 5 | -| TUNE_ID_ARMING_WARNING | `uint8` | 6 | -| TUNE_ID_BATTERY_WARNING_SLOW | `uint8` | 7 | -| TUNE_ID_BATTERY_WARNING_FAST | `uint8` | 8 | -| TUNE_ID_GPS_WARNING | `uint8` | 9 | -| TUNE_ID_ARMING_FAILURE | `uint8` | 10 | -| TUNE_ID_PARACHUTE_RELEASE | `uint8` | 11 | -| TUNE_ID_SINGLE_BEEP | `uint8` | 12 | -| TUNE_ID_HOME_SET | `uint8` | 13 | -| TUNE_ID_SD_INIT | `uint8` | 14 | -| TUNE_ID_SD_ERROR | `uint8` | 15 | -| TUNE_ID_PROG_PX4IO | `uint8` | 16 | -| TUNE_ID_PROG_PX4IO_OK | `uint8` | 17 | -| TUNE_ID_PROG_PX4IO_ERR | `uint8` | 18 | -| TUNE_ID_POWER_OFF | `uint8` | 19 | -| NUMBER_OF_TUNES | `uint8` | 20 | -| VOLUME_LEVEL_MIN | `uint8` | 0 | -| VOLUME_LEVEL_DEFAULT | `uint8` | 20 | -| VOLUME_LEVEL_MAX | `uint8` | 100 | -| ORB_QUEUE_LENGTH | `uint8` | 4 | +| Name | Type | Value | Description | +| ----------------------------------------------------------------------- | ------- | ----- | ----------- | +| TUNE_ID_STOP | `uint8` | 0 | +| TUNE_ID_STARTUP | `uint8` | 1 | +| TUNE_ID_ERROR | `uint8` | 2 | +| TUNE_ID_NOTIFY_POSITIVE | `uint8` | 3 | +| TUNE_ID_NOTIFY_NEUTRAL | `uint8` | 4 | +| TUNE_ID_NOTIFY_NEGATIVE | `uint8` | 5 | +| TUNE_ID_ARMING_WARNING | `uint8` | 6 | +| TUNE_ID_BATTERY_WARNING_SLOW | `uint8` | 7 | +| TUNE_ID_BATTERY_WARNING_FAST | `uint8` | 8 | +| TUNE_ID_GPS_WARNING | `uint8` | 9 | +| TUNE_ID_ARMING_FAILURE | `uint8` | 10 | +| TUNE_ID_PARACHUTE_RELEASE | `uint8` | 11 | +| TUNE_ID_SINGLE_BEEP | `uint8` | 12 | +| TUNE_ID_HOME_SET | `uint8` | 13 | +| TUNE_ID_SD_INIT | `uint8` | 14 | +| TUNE_ID_SD_ERROR | `uint8` | 15 | +| TUNE_ID_PROG_PX4IO | `uint8` | 16 | +| TUNE_ID_PROG_PX4IO_OK | `uint8` | 17 | +| TUNE_ID_PROG_PX4IO_ERR | `uint8` | 18 | +| TUNE_ID_POWER_OFF | `uint8` | 19 | +| NUMBER_OF_TUNES | `uint8` | 20 | +| VOLUME_LEVEL_MIN | `uint8` | 0 | +| VOLUME_LEVEL_DEFAULT | `uint8` | 20 | +| VOLUME_LEVEL_MAX | `uint8` | 100 | +| ORB_QUEUE_LENGTH | `uint8` | 4 | ## Source Message diff --git a/docs/en/msg_docs/UavcanParameterRequest.md b/docs/en/msg_docs/UavcanParameterRequest.md index 6354c399e9..b9dfe137af 100644 --- a/docs/en/msg_docs/UavcanParameterRequest.md +++ b/docs/en/msg_docs/UavcanParameterRequest.md @@ -23,16 +23,16 @@ UAVCAN-MAVLink parameter bridge request type. ## Constants -| Name | Type | Value | Description | -| ------------------------------------------------------------------------------- | ------- | ----- | --------------------------------- | -| MESSAGE_TYPE_PARAM_REQUEST_READ | `uint8` | 20 | MAVLINK_MSG_ID_PARAM_REQUEST_READ | -| MESSAGE_TYPE_PARAM_REQUEST_LIST | `uint8` | 21 | MAVLINK_MSG_ID_PARAM_REQUEST_LIST | -| MESSAGE_TYPE_PARAM_SET | `uint8` | 23 | MAVLINK_MSG_ID_PARAM_SET | -| NODE_ID_ALL | `uint8` | 0 | MAV_COMP_ID_ALL | -| PARAM_TYPE_UINT8 | `uint8` | 1 | MAV_PARAM_TYPE_UINT8 | -| PARAM_TYPE_INT64 | `uint8` | 8 | MAV_PARAM_TYPE_INT64 | -| PARAM_TYPE_REAL32 | `uint8` | 9 | MAV_PARAM_TYPE_REAL32 | -| ORB_QUEUE_LENGTH | `uint8` | 4 | +| Name | Type | Value | Description | +| ----------------------------------------------------------------------------- | ------- | ----- | --------------------------------- | +| MESSAGE_TYPE_PARAM_REQUEST_READ | `uint8` | 20 | MAVLINK_MSG_ID_PARAM_REQUEST_READ | +| MESSAGE_TYPE_PARAM_REQUEST_LIST | `uint8` | 21 | MAVLINK_MSG_ID_PARAM_REQUEST_LIST | +| MESSAGE_TYPE_PARAM_SET | `uint8` | 23 | MAVLINK_MSG_ID_PARAM_SET | +| NODE_ID_ALL | `uint8` | 0 | MAV_COMP_ID_ALL | +| PARAM_TYPE_UINT8 | `uint8` | 1 | MAV_PARAM_TYPE_UINT8 | +| PARAM_TYPE_INT64 | `uint8` | 8 | MAV_PARAM_TYPE_INT64 | +| PARAM_TYPE_REAL32 | `uint8` | 9 | MAV_PARAM_TYPE_REAL32 | +| ORB_QUEUE_LENGTH | `uint8` | 4 | ## Source Message diff --git a/docs/en/msg_docs/UlogStream.md b/docs/en/msg_docs/UlogStream.md index f52c44da41..6702b9f9f5 100644 --- a/docs/en/msg_docs/UlogStream.md +++ b/docs/en/msg_docs/UlogStream.md @@ -21,10 +21,10 @@ Message to stream ULog data from the logger. Corresponds to the LOGGING_DATA. ma ## Constants -| Name | Type | Value | Description | -| ------------------------------------------------- | ------- | ----- | -------------------------------------------------------------------- | -| FLAGS_NEED_ACK | `uint8` | 1 | if set, this message requires to be acked. | -| ORB_QUEUE_LENGTH | `uint8` | 16 | TODO: we might be able to reduce this if mavlink polled on the topic | +| Name | Type | Value | Description | +| ----------------------------------------------- | ------- | ----- | -------------------------------------------------------------------- | +| FLAGS_NEED_ACK | `uint8` | 1 | if set, this message requires to be acked. | +| ORB_QUEUE_LENGTH | `uint8` | 16 | TODO: we might be able to reduce this if mavlink polled on the topic | ## Source Message diff --git a/docs/en/msg_docs/UlogStreamAck.md b/docs/en/msg_docs/UlogStreamAck.md index 95f4e73f9e..55ba8e7048 100644 --- a/docs/en/msg_docs/UlogStreamAck.md +++ b/docs/en/msg_docs/UlogStreamAck.md @@ -17,10 +17,10 @@ Ack a previously sent ulog_stream message that had. the NEED_ACK flag set. ## Constants -| Name | Type | Value | Description | -| ------------------------------------------- | ------- | ----- | -------------------------------------------------------------------------------- | -| ACK_TIMEOUT | `int32` | 50 | timeout waiting for an ack until we retry to send the message [ms] | -| ACK_MAX_TRIES | `int32` | 50 | maximum amount of tries to (re-)send a message, each time waiting ACK_TIMEOUT ms | +| Name | Type | Value | Description | +| ----------------------------------------- | ------- | ----- | -------------------------------------------------------------------------------- | +| ACK_TIMEOUT | `int32` | 50 | timeout waiting for an ack until we retry to send the message [ms] | +| ACK_MAX_TRIES | `int32` | 50 | maximum amount of tries to (re-)send a message, each time waiting ACK_TIMEOUT ms | ## Source Message diff --git a/docs/en/msg_docs/UnregisterExtComponent.md b/docs/en/msg_docs/UnregisterExtComponent.md index 8f9ba0d68f..7325d3b083 100644 --- a/docs/en/msg_docs/UnregisterExtComponent.md +++ b/docs/en/msg_docs/UnregisterExtComponent.md @@ -18,9 +18,9 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| ----------------------------------------------- | -------- | ----- | ----------- | -| MESSAGE_VERSION | `uint32` | 0 | +| Name | Type | Value | Description | +| --------------------------------------------- | -------- | ----- | ----------- | +| MESSAGE_VERSION | `uint32` | 0 | ## Source Message diff --git a/docs/en/msg_docs/VehicleAngularVelocity.md b/docs/en/msg_docs/VehicleAngularVelocity.md index 81fa680129..3359202a6b 100644 --- a/docs/en/msg_docs/VehicleAngularVelocity.md +++ b/docs/en/msg_docs/VehicleAngularVelocity.md @@ -17,9 +17,9 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| ----------------------------------------------- | -------- | ----- | ----------- | -| MESSAGE_VERSION | `uint32` | 0 | +| Name | Type | Value | Description | +| --------------------------------------------- | -------- | ----- | ----------- | +| MESSAGE_VERSION | `uint32` | 0 | ## Source Message diff --git a/docs/en/msg_docs/VehicleAttitude.md b/docs/en/msg_docs/VehicleAttitude.md index 526e299db5..157597339e 100644 --- a/docs/en/msg_docs/VehicleAttitude.md +++ b/docs/en/msg_docs/VehicleAttitude.md @@ -20,9 +20,9 @@ This is similar to the mavlink message ATTITUDE_QUATERNION, but for onboard use. ## Constants -| Name | Type | Value | Description | -| ----------------------------------------------- | -------- | ----- | ----------- | -| MESSAGE_VERSION | `uint32` | 0 | +| Name | Type | Value | Description | +| --------------------------------------------- | -------- | ----- | ----------- | +| MESSAGE_VERSION | `uint32` | 0 | ## Source Message diff --git a/docs/en/msg_docs/VehicleAttitudeSetpoint.md b/docs/en/msg_docs/VehicleAttitudeSetpoint.md index 7bc0940ba3..0e14ead96f 100644 --- a/docs/en/msg_docs/VehicleAttitudeSetpoint.md +++ b/docs/en/msg_docs/VehicleAttitudeSetpoint.md @@ -17,9 +17,9 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| ----------------------------------------------- | -------- | ----- | ----------- | -| MESSAGE_VERSION | `uint32` | 1 | +| Name | Type | Value | Description | +| --------------------------------------------- | -------- | ----- | ----------- | +| MESSAGE_VERSION | `uint32` | 1 | ## Source Message diff --git a/docs/en/msg_docs/VehicleAttitudeSetpointV0.md b/docs/en/msg_docs/VehicleAttitudeSetpointV0.md index 9a53c593f9..465082a772 100644 --- a/docs/en/msg_docs/VehicleAttitudeSetpointV0.md +++ b/docs/en/msg_docs/VehicleAttitudeSetpointV0.md @@ -19,9 +19,9 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| ----------------------------------------------- | -------- | ----- | ----------- | -| MESSAGE_VERSION | `uint32` | 0 | +| Name | Type | Value | Description | +| --------------------------------------------- | -------- | ----- | ----------- | +| MESSAGE_VERSION | `uint32` | 0 | ## Source Message diff --git a/docs/en/msg_docs/VehicleCommand.md b/docs/en/msg_docs/VehicleCommand.md index 32b719e7b7..0ee8c6fcad 100644 --- a/docs/en/msg_docs/VehicleCommand.md +++ b/docs/en/msg_docs/VehicleCommand.md @@ -1052,6 +1052,20 @@ Actuator configuration command. | 6 | | | ? | | 7 | | | ? | +### VEHICLE_CMD_ESC_REQUEST_EEPROM (312) + +Request EEPROM data from an ESC. + +| Param | Units | Range/Enum | Description | +| ----- | ----- | ---------- | ------------- | +| 1 | | | ESC Index | +| 2 | | | Firmware Type | +| 3 | | | Unused | +| 4 | | | Unused | +| 5 | | | Unused | +| 6 | | | ? | +| 7 | | | ? | + ### VEHICLE_CMD_COMPONENT_ARM_DISARM (400) Arms / Disarms a component. @@ -1444,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). @@ -1490,34 +1518,34 @@ Change mode by specifying nav_state directly. ### ORBIT_YAW_BEHAVIOUR {#ORBIT_YAW_BEHAVIOUR} -| Name | Type | Value | Description | -| ----------------------------------------------------------------------------------------------------------------- | ------- | ----- | ----------- | -| ORBIT_YAW_BEHAVIOUR_HOLD_FRONT_TO_CIRCLE_CENTER | `uint8` | 0 | -| ORBIT_YAW_BEHAVIOUR_HOLD_INITIAL_HEADING | `uint8` | 1 | -| ORBIT_YAW_BEHAVIOUR_UNCONTROLLED | `uint8` | 2 | -| ORBIT_YAW_BEHAVIOUR_HOLD_FRONT_TANGENT_TO_CIRCLE | `uint8` | 3 | -| ORBIT_YAW_BEHAVIOUR_RC_CONTROLLED | `uint8` | 4 | -| ORBIT_YAW_BEHAVIOUR_UNCHANGED | `uint8` | 5 | +| Name | Type | Value | Description | +| --------------------------------------------------------------------------------------------------------------- | ------- | ----- | ----------- | +| ORBIT_YAW_BEHAVIOUR_HOLD_FRONT_TO_CIRCLE_CENTER | `uint8` | 0 | +| ORBIT_YAW_BEHAVIOUR_HOLD_INITIAL_HEADING | `uint8` | 1 | +| ORBIT_YAW_BEHAVIOUR_UNCONTROLLED | `uint8` | 2 | +| ORBIT_YAW_BEHAVIOUR_HOLD_FRONT_TANGENT_TO_CIRCLE | `uint8` | 3 | +| ORBIT_YAW_BEHAVIOUR_RC_CONTROLLED | `uint8` | 4 | +| ORBIT_YAW_BEHAVIOUR_UNCHANGED | `uint8` | 5 | ### VEHICLE_ROI {#VEHICLE_ROI} -| Name | Type | Value | Description | -| --------------------------------------------------------- | ------- | ----- | ---------------------------- | -| VEHICLE_ROI_NONE | `uint8` | 0 | No region of interest. | -| VEHICLE_ROI_WPNEXT | `uint8` | 1 | Point toward next MISSION. | -| VEHICLE_ROI_WPINDEX | `uint8` | 2 | Point toward given MISSION. | -| VEHICLE_ROI_LOCATION | `uint8` | 3 | Point toward fixed location. | -| VEHICLE_ROI_TARGET | `uint8` | 4 | Point toward target. | -| VEHICLE_ROI_ENUM_END | `uint8` | 5 | +| Name | Type | Value | Description | +| ------------------------------------------------------- | ------- | ----- | ---------------------------- | +| VEHICLE_ROI_NONE | `uint8` | 0 | No region of interest. | +| VEHICLE_ROI_WPNEXT | `uint8` | 1 | Point toward next MISSION. | +| VEHICLE_ROI_WPINDEX | `uint8` | 2 | Point toward given MISSION. | +| VEHICLE_ROI_LOCATION | `uint8` | 3 | Point toward fixed location. | +| VEHICLE_ROI_TARGET | `uint8` | 4 | Point toward target. | +| VEHICLE_ROI_ENUM_END | `uint8` | 5 | ### SPEED_TYPE {#SPEED_TYPE} -| Name | Type | Value | Description | -| ----------------------------------------------------------------- | ------- | ----- | ----------- | -| SPEED_TYPE_AIRSPEED | `uint8` | 0 | -| SPEED_TYPE_GROUNDSPEED | `uint8` | 1 | -| SPEED_TYPE_CLIMB_SPEED | `uint8` | 2 | -| SPEED_TYPE_DESCEND_SPEED | `uint8` | 3 | +| Name | Type | Value | Description | +| --------------------------------------------------------------- | ------- | ----- | ----------- | +| SPEED_TYPE_AIRSPEED | `uint8` | 0 | +| SPEED_TYPE_GROUNDSPEED | `uint8` | 1 | +| SPEED_TYPE_CLIMB_SPEED | `uint8` | 2 | +| SPEED_TYPE_DESCEND_SPEED | `uint8` | 3 | ### MAV_MOUNT_MODE {#MAV_MOUNT_MODE} @@ -1526,50 +1554,65 @@ Change mode by specifying nav_state directly. ## Constants -| Name | Type | Value | Description | -| ----------------------------------------------------------------------------------------------------------- | -------- | ----- | ------------------------------------------------------------------------------------------ | -| MESSAGE_VERSION | `uint32` | 0 | -| PREFLIGHT_CALIBRATION_TEMPERATURE_CALIBRATION | `uint16` | 3 | Param value for VEHICLE_CMD_PREFLIGHT_CALIBRATION to start temperature calibration. | -| VEHICLE_MOUNT_MODE_RETRACT | `uint8` | 0 | Load and keep safe position (Roll,Pitch,Yaw) from permanent memory and stop stabilization. | -| VEHICLE_MOUNT_MODE_NEUTRAL | `uint8` | 1 | Load and keep neutral position (Roll,Pitch,Yaw) from permanent memory. | -| VEHICLE_MOUNT_MODE_MAVLINK_TARGETING | `uint8` | 2 | Load neutral position and start MAVLink Roll,Pitch,Yaw control with stabilization. | -| VEHICLE_MOUNT_MODE_RC_TARGETING | `uint8` | 3 | Load neutral position and start RC Roll,Pitch,Yaw control with stabilization. | -| VEHICLE_MOUNT_MODE_GPS_POINT | `uint8` | 4 | Load neutral position and start to point to Lat,Lon,Alt. | -| VEHICLE_MOUNT_MODE_ENUM_END | `uint8` | 5 | -| PARACHUTE_ACTION_DISABLE | `uint8` | 0 | -| PARACHUTE_ACTION_ENABLE | `uint8` | 1 | -| PARACHUTE_ACTION_RELEASE | `uint8` | 2 | -| FAILURE_UNIT_SENSOR_GYRO | `uint8` | 0 | -| FAILURE_UNIT_SENSOR_ACCEL | `uint8` | 1 | -| FAILURE_UNIT_SENSOR_MAG | `uint8` | 2 | -| FAILURE_UNIT_SENSOR_BARO | `uint8` | 3 | -| FAILURE_UNIT_SENSOR_GPS | `uint8` | 4 | -| FAILURE_UNIT_SENSOR_OPTICAL_FLOW | `uint8` | 5 | -| FAILURE_UNIT_SENSOR_VIO | `uint8` | 6 | -| FAILURE_UNIT_SENSOR_DISTANCE_SENSOR | `uint8` | 7 | -| FAILURE_UNIT_SENSOR_AIRSPEED | `uint8` | 8 | -| FAILURE_UNIT_SYSTEM_BATTERY | `uint8` | 100 | -| FAILURE_UNIT_SYSTEM_MOTOR | `uint8` | 101 | -| FAILURE_UNIT_SYSTEM_SERVO | `uint8` | 102 | -| FAILURE_UNIT_SYSTEM_AVOIDANCE | `uint8` | 103 | -| FAILURE_UNIT_SYSTEM_RC_SIGNAL | `uint8` | 104 | -| FAILURE_UNIT_SYSTEM_MAVLINK_SIGNAL | `uint8` | 105 | -| FAILURE_TYPE_OK | `uint8` | 0 | -| FAILURE_TYPE_OFF | `uint8` | 1 | -| FAILURE_TYPE_STUCK | `uint8` | 2 | -| FAILURE_TYPE_GARBAGE | `uint8` | 3 | -| FAILURE_TYPE_WRONG | `uint8` | 4 | -| FAILURE_TYPE_SLOW | `uint8` | 5 | -| FAILURE_TYPE_DELAYED | `uint8` | 6 | -| FAILURE_TYPE_INTERMITTENT | `uint8` | 7 | -| ARMING_ACTION_DISARM | `int8` | 0 | -| ARMING_ACTION_ARM | `int8` | 1 | -| GRIPPER_ACTION_RELEASE | `uint8` | 0 | -| GRIPPER_ACTION_GRAB | `uint8` | 1 | -| SAFETY_OFF | `uint8` | 0 | -| SAFETY_ON | `uint8` | 1 | -| ORB_QUEUE_LENGTH | `uint8` | 8 | -| COMPONENT_MODE_EXECUTOR_START | `uint16` | 1000 | +| Name | Type | Value | Description | +| --------------------------------------------------------------------------------------------------------- | -------- | ----- | ----------------------------------------------------------------------------------------------------- | +| MESSAGE_VERSION | `uint32` | 0 | +| PREFLIGHT_CALIBRATION_TEMPERATURE_CALIBRATION | `uint16` | 3 | Param value for VEHICLE_CMD_PREFLIGHT_CALIBRATION to start temperature calibration. | +| FUSION_SOURCE_GPS | `uint8` | 0 | GNSS (EKF2_GPS{i}\_CTRL, use instance param) | +| FUSION_SOURCE_OF | `uint8` | 1 | Optical Flow (EKF2_OF_CTRL) | +| FUSION_SOURCE_EV | `uint8` | 2 | External Vision (EKF2_EV_CTRL) | +| FUSION_SOURCE_AGP | `uint8` | 3 | Auxiliary Global Position (EKF2_AGP{i}\_CTRL, use instance param) | +| FUSION_SOURCE_BARO | `uint8` | 4 | Barometer (EKF2_BARO_CTRL) | +| FUSION_SOURCE_RNG | `uint8` | 5 | Range Finder (EKF2_RNG_CTRL) | +| FUSION_SOURCE_MAG | `uint8` | 6 | Magnetometer (EKF2_MAG_TYPE) | +| FUSION_SOURCE_ASPD | `uint8` | 7 | Airspeed (EKF2_ARSP_THR) | +| FUSION_SOURCE_RNGBCN | `uint8` | 8 | Ranging Beacon | +| VEHICLE_MOUNT_MODE_RETRACT | `uint8` | 0 | Load and keep safe position (Roll,Pitch,Yaw) from permanent memory and stop stabilization. | +| VEHICLE_MOUNT_MODE_NEUTRAL | `uint8` | 1 | Load and keep neutral position (Roll,Pitch,Yaw) from permanent memory. | +| VEHICLE_MOUNT_MODE_MAVLINK_TARGETING | `uint8` | 2 | Load neutral position and start MAVLink Roll,Pitch,Yaw control with stabilization. | +| VEHICLE_MOUNT_MODE_RC_TARGETING | `uint8` | 3 | Load neutral position and start RC Roll,Pitch,Yaw control with stabilization. | +| VEHICLE_MOUNT_MODE_GPS_POINT | `uint8` | 4 | Load neutral position and start to point to Lat,Lon,Alt. | +| VEHICLE_MOUNT_MODE_ENUM_END | `uint8` | 5 | +| ACTUATOR_CONFIGURATION_NONE | `uint8` | 0 | Do nothing. | +| ACTUATOR_CONFIGURATION_BEEP | `uint8` | 1 | Command the actuator to beep now. | +| ACTUATOR_CONFIGURATION_3D_MODE_ON | `uint8` | 2 | Permanently set the actuator (ESC) to 3D mode (reversible thrust). | +| ACTUATOR_CONFIGURATION_3D_MODE_OFF | `uint8` | 3 | Permanently set the actuator (ESC) to non 3D mode (non-reversible thrust). | +| ACTUATOR_CONFIGURATION_SPIN_DIRECTION1 | `uint8` | 4 | Permanently set the actuator (ESC) to spin direction 1 (which can be clockwise or counter-clockwise). | +| ACTUATOR_CONFIGURATION_SPIN_DIRECTION2 | `uint8` | 5 | Permanently set the actuator (ESC) to spin direction 2 (opposite of direction 1). | +| PARACHUTE_ACTION_DISABLE | `uint8` | 0 | +| PARACHUTE_ACTION_ENABLE | `uint8` | 1 | +| PARACHUTE_ACTION_RELEASE | `uint8` | 2 | +| FAILURE_UNIT_SENSOR_GYRO | `uint8` | 0 | +| FAILURE_UNIT_SENSOR_ACCEL | `uint8` | 1 | +| FAILURE_UNIT_SENSOR_MAG | `uint8` | 2 | +| FAILURE_UNIT_SENSOR_BARO | `uint8` | 3 | +| FAILURE_UNIT_SENSOR_GPS | `uint8` | 4 | +| FAILURE_UNIT_SENSOR_OPTICAL_FLOW | `uint8` | 5 | +| FAILURE_UNIT_SENSOR_VIO | `uint8` | 6 | +| FAILURE_UNIT_SENSOR_DISTANCE_SENSOR | `uint8` | 7 | +| FAILURE_UNIT_SENSOR_AIRSPEED | `uint8` | 8 | +| FAILURE_UNIT_SYSTEM_BATTERY | `uint8` | 100 | +| FAILURE_UNIT_SYSTEM_MOTOR | `uint8` | 101 | +| FAILURE_UNIT_SYSTEM_SERVO | `uint8` | 102 | +| FAILURE_UNIT_SYSTEM_AVOIDANCE | `uint8` | 103 | +| FAILURE_UNIT_SYSTEM_RC_SIGNAL | `uint8` | 104 | +| FAILURE_UNIT_SYSTEM_MAVLINK_SIGNAL | `uint8` | 105 | +| FAILURE_TYPE_OK | `uint8` | 0 | +| FAILURE_TYPE_OFF | `uint8` | 1 | +| FAILURE_TYPE_STUCK | `uint8` | 2 | +| FAILURE_TYPE_GARBAGE | `uint8` | 3 | +| FAILURE_TYPE_WRONG | `uint8` | 4 | +| FAILURE_TYPE_SLOW | `uint8` | 5 | +| FAILURE_TYPE_DELAYED | `uint8` | 6 | +| FAILURE_TYPE_INTERMITTENT | `uint8` | 7 | +| ARMING_ACTION_DISARM | `int8` | 0 | +| ARMING_ACTION_ARM | `int8` | 1 | +| GRIPPER_ACTION_RELEASE | `uint8` | 0 | +| GRIPPER_ACTION_GRAB | `uint8` | 1 | +| SAFETY_OFF | `uint8` | 0 | +| SAFETY_ON | `uint8` | 1 | +| ORB_QUEUE_LENGTH | `uint8` | 8 | +| COMPONENT_MODE_EXECUTOR_START | `uint16` | 1000 | ## Source Message @@ -1660,6 +1703,7 @@ uint16 VEHICLE_CMD_GIMBAL_DEVICE_INFORMATION = 283 # Command to ask information uint16 VEHICLE_CMD_MISSION_START = 300 # Start running a mission. |first_item: the first mission item to run|last_item: the last mission item to run (after this item is run, the mission ends)| uint16 VEHICLE_CMD_ACTUATOR_TEST = 310 # Actuator testing command. |[@range -1,1] value|[s] timeout|Unused|Unused|output function| uint16 VEHICLE_CMD_CONFIGURE_ACTUATOR = 311 # Actuator configuration command. |configuration|Unused|Unused|Unused|output function| +uint16 VEHICLE_CMD_ESC_REQUEST_EEPROM = 312 # Request EEPROM data from an ESC. |ESC Index|Firmware Type|Unused|Unused|Unused| uint16 VEHICLE_CMD_COMPONENT_ARM_DISARM = 400 # Arms / Disarms a component. |1 to arm, 0 to disarm. uint16 VEHICLE_CMD_RUN_PREARM_CHECKS = 401 # Instructs a target system to run pre-arm checks. uint16 VEHICLE_CMD_INJECT_FAILURE = 420 # Inject artificial failure for testing purposes. @@ -1689,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). @@ -1709,6 +1764,13 @@ uint8 VEHICLE_ROI_LOCATION = 3 # Point toward fixed location. uint8 VEHICLE_ROI_TARGET = 4 # Point toward target. uint8 VEHICLE_ROI_ENUM_END = 5 +uint8 ACTUATOR_CONFIGURATION_NONE = 0 # Do nothing. +uint8 ACTUATOR_CONFIGURATION_BEEP = 1 # Command the actuator to beep now. +uint8 ACTUATOR_CONFIGURATION_3D_MODE_ON = 2 # Permanently set the actuator (ESC) to 3D mode (reversible thrust). +uint8 ACTUATOR_CONFIGURATION_3D_MODE_OFF = 3 # Permanently set the actuator (ESC) to non 3D mode (non-reversible thrust). +uint8 ACTUATOR_CONFIGURATION_SPIN_DIRECTION1 = 4 # Permanently set the actuator (ESC) to spin direction 1 (which can be clockwise or counter-clockwise). +uint8 ACTUATOR_CONFIGURATION_SPIN_DIRECTION2 = 5 # Permanently set the actuator (ESC) to spin direction 2 (opposite of direction 1). + uint8 PARACHUTE_ACTION_DISABLE = 0 uint8 PARACHUTE_ACTION_ENABLE = 1 uint8 PARACHUTE_ACTION_RELEASE = 2 diff --git a/docs/en/msg_docs/VehicleCommandAck.md b/docs/en/msg_docs/VehicleCommandAck.md index c902b3c7f6..7aea6ba850 100644 --- a/docs/en/msg_docs/VehicleCommandAck.md +++ b/docs/en/msg_docs/VehicleCommandAck.md @@ -4,42 +4,55 @@ pageClass: is-wide-page # VehicleCommandAck (UORB message) -Vehicle Command Ackonwledgement uORB message. Used for acknowledging the vehicle command being received. Follows the MAVLink COMMAND_ACK message definition. +Vehicle Command Acknowledgement uORB message. + +Used for acknowledging the vehicle command being received. +Follows the MAVLink COMMAND_ACK message definition **TOPICS:** vehicle_command_ack ## Fields -| Name | Type | Unit [Frame] | Range/Enum | Description | -| ---------------- | -------- | ------------ | ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | -| timestamp | `uint64` | | | time since system start (microseconds) | -| command | `uint32` | | | Command that is being acknowledged | -| result | `uint8` | | | Command result | -| result_param1 | `uint8` | | | Also used as progress[%], it can be set with the reason why the command was denied, or the progress percentage when result is MAV_RESULT_IN_PROGRESS | -| result_param2 | `int32` | | | Additional parameter of the result, example: which parameter of MAV_CMD_NAV_WAYPOINT caused it to be denied. | -| target_system | `uint8` | | | -| target_component | `uint16` | | | Target component / mode executor | -| from_external | `bool` | | | Indicates if the command came from an external source | +| Name | Type | Unit [Frame] | Range/Enum | Description | +| ---------------- | -------- | --------------------------- | ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | +| timestamp | `uint64` | us | | time since system start | +| command | `uint32` | | | Command that is being acknowledged | +| result | `uint8` | | [VEHICLE_CMD_RESULT](#VEHICLE_CMD_RESULT) | Command result | +| result_param1 | `uint8` | | | Can be set with the reason why the command was denied, or the progress percentage when result is MAV_RESULT_IN_PROGRESS (%) | +| result_param2 | `int32` | enum ARM_AUTH_DENIED_REASON | | Additional parameter of the result, example: which parameter of MAV_CMD_NAV_WAYPOINT caused it to be denied, or what ARM_AUTH_DENIED_REASON | +| target_system | `uint8` | | | Target system | +| target_component | `uint16` | | | Target component / mode executor | +| from_external | `bool` | | | Indicates if the command came from an external source | + +## Enums + +### VEHICLE_CMD_RESULT {#VEHICLE_CMD_RESULT} + +| Name | Type | Value | Description | +| ----------------------------------------------------------------------------------------------- | ------- | ----- | ---------------------------------------------------- | +| VEHICLE_CMD_RESULT_ACCEPTED | `uint8` | 0 | Command ACCEPTED and EXECUTED | +| VEHICLE_CMD_RESULT_TEMPORARILY_REJECTED | `uint8` | 1 | Command TEMPORARY REJECTED/DENIED | +| VEHICLE_CMD_RESULT_DENIED | `uint8` | 2 | Command PERMANENTLY DENIED | +| VEHICLE_CMD_RESULT_UNSUPPORTED | `uint8` | 3 | Command UNKNOWN/UNSUPPORTED | +| VEHICLE_CMD_RESULT_FAILED | `uint8` | 4 | Command executed, but failed | +| VEHICLE_CMD_RESULT_IN_PROGRESS | `uint8` | 5 | Command being executed | +| VEHICLE_CMD_RESULT_CANCELLED | `uint8` | 6 | Command Canceled | +| VEHICLE_CMD_RESULT_COMMAND_LONG_ONLY | `uint8` | 7 | Command is only accepted when sent as a COMMAND_LONG | +| VEHICLE_CMD_RESULT_COMMAND_INT_ONLY | `uint8` | 8 | Command is only accepted when sent as a COMMAND_INT | +| VEHICLE_CMD_RESULT_UNSUPPORTED_MAV_FRAME | `uint8` | 9 | Command does not support specified frame | ## Constants -| Name | Type | Value | Description | -| ----------------------------------------------------------------------------------------------- | -------- | ----- | --------------------------------- | -| MESSAGE_VERSION | `uint32` | 0 | -| VEHICLE_CMD_RESULT_ACCEPTED | `uint8` | 0 | Command ACCEPTED and EXECUTED | -| VEHICLE_CMD_RESULT_TEMPORARILY_REJECTED | `uint8` | 1 | Command TEMPORARY REJECTED/DENIED | -| VEHICLE_CMD_RESULT_DENIED | `uint8` | 2 | Command PERMANENTLY DENIED | -| VEHICLE_CMD_RESULT_UNSUPPORTED | `uint8` | 3 | Command UNKNOWN/UNSUPPORTED | -| VEHICLE_CMD_RESULT_FAILED | `uint8` | 4 | Command executed, but failed | -| VEHICLE_CMD_RESULT_IN_PROGRESS | `uint8` | 5 | Command being executed | -| VEHICLE_CMD_RESULT_CANCELLED | `uint8` | 6 | Command Canceled | -| ARM_AUTH_DENIED_REASON_GENERIC | `uint16` | 0 | -| ARM_AUTH_DENIED_REASON_NONE | `uint16` | 1 | -| ARM_AUTH_DENIED_REASON_INVALID_WAYPOINT | `uint16` | 2 | -| ARM_AUTH_DENIED_REASON_TIMEOUT | `uint16` | 3 | -| ARM_AUTH_DENIED_REASON_AIRSPACE_IN_USE | `uint16` | 4 | -| ARM_AUTH_DENIED_REASON_BAD_WEATHER | `uint16` | 5 | -| ORB_QUEUE_LENGTH | `uint8` | 8 | +| Name | Type | Value | Description | +| --------------------------------------------------------------------------------------------- | -------- | ----- | ----------- | +| MESSAGE_VERSION | `uint32` | 1 | +| ORB_QUEUE_LENGTH | `uint8` | 8 | +| ARM_AUTH_DENIED_REASON_GENERIC | `uint16` | 0 | +| ARM_AUTH_DENIED_REASON_NONE | `uint16` | 1 | +| ARM_AUTH_DENIED_REASON_INVALID_WAYPOINT | `uint16` | 2 | +| ARM_AUTH_DENIED_REASON_TIMEOUT | `uint16` | 3 | +| ARM_AUTH_DENIED_REASON_AIRSPACE_IN_USE | `uint16` | 4 | +| ARM_AUTH_DENIED_REASON_BAD_WEATHER | `uint16` | 5 | ## Source Message @@ -48,23 +61,35 @@ Vehicle Command Ackonwledgement uORB message. Used for acknowledging the vehicle ::: details Click here to see original file ```c -# Vehicle Command Ackonwledgement uORB message. +# Vehicle Command Acknowledgement uORB message. +# # Used for acknowledging the vehicle command being received. # Follows the MAVLink COMMAND_ACK message definition -uint32 MESSAGE_VERSION = 0 +uint32 MESSAGE_VERSION = 1 -uint64 timestamp # time since system start (microseconds) +uint64 timestamp # [us] time since system start -# Result cases. This follows the MAVLink MAV_RESULT enum definition -uint8 VEHICLE_CMD_RESULT_ACCEPTED = 0 # Command ACCEPTED and EXECUTED | -uint8 VEHICLE_CMD_RESULT_TEMPORARILY_REJECTED = 1 # Command TEMPORARY REJECTED/DENIED | -uint8 VEHICLE_CMD_RESULT_DENIED = 2 # Command PERMANENTLY DENIED | -uint8 VEHICLE_CMD_RESULT_UNSUPPORTED = 3 # Command UNKNOWN/UNSUPPORTED | -uint8 VEHICLE_CMD_RESULT_FAILED = 4 # Command executed, but failed | -uint8 VEHICLE_CMD_RESULT_IN_PROGRESS = 5 # Command being executed | -uint8 VEHICLE_CMD_RESULT_CANCELLED = 6 # Command Canceled +uint8 ORB_QUEUE_LENGTH = 8 +uint32 command # [-] Command that is being acknowledged + +uint8 result # [@enum VEHICLE_CMD_RESULT] Command result +# VEHICLE_CMD_RESULT Result cases. Follows the MAVLink MAV_RESULT enum definition +uint8 VEHICLE_CMD_RESULT_ACCEPTED = 0 # Command ACCEPTED and EXECUTED +uint8 VEHICLE_CMD_RESULT_TEMPORARILY_REJECTED = 1 # Command TEMPORARY REJECTED/DENIED +uint8 VEHICLE_CMD_RESULT_DENIED = 2 # Command PERMANENTLY DENIED +uint8 VEHICLE_CMD_RESULT_UNSUPPORTED = 3 # Command UNKNOWN/UNSUPPORTED +uint8 VEHICLE_CMD_RESULT_FAILED = 4 # Command executed, but failed +uint8 VEHICLE_CMD_RESULT_IN_PROGRESS = 5 # Command being executed +uint8 VEHICLE_CMD_RESULT_CANCELLED = 6 # Command Canceled +uint8 VEHICLE_CMD_RESULT_COMMAND_LONG_ONLY = 7 # Command is only accepted when sent as a COMMAND_LONG +uint8 VEHICLE_CMD_RESULT_COMMAND_INT_ONLY = 8 # Command is only accepted when sent as a COMMAND_INT +uint8 VEHICLE_CMD_RESULT_UNSUPPORTED_MAV_FRAME = 9 # Command does not support specified frame + +uint8 result_param1 # [-] Can be set with the reason why the command was denied, or the progress percentage when result is MAV_RESULT_IN_PROGRESS (%) + +int32 result_param2 # [enum ARM_AUTH_DENIED_REASON] Additional parameter of the result, example: which parameter of MAV_CMD_NAV_WAYPOINT caused it to be denied, or what ARM_AUTH_DENIED_REASON # Arming denied specific cases uint16 ARM_AUTH_DENIED_REASON_GENERIC = 0 uint16 ARM_AUTH_DENIED_REASON_NONE = 1 @@ -73,16 +98,10 @@ uint16 ARM_AUTH_DENIED_REASON_TIMEOUT = 3 uint16 ARM_AUTH_DENIED_REASON_AIRSPACE_IN_USE = 4 uint16 ARM_AUTH_DENIED_REASON_BAD_WEATHER = 5 -uint8 ORB_QUEUE_LENGTH = 8 +uint8 target_system # [-] Target system +uint16 target_component # Target component / mode executor -uint32 command # Command that is being acknowledged -uint8 result # Command result -uint8 result_param1 # Also used as progress[%], it can be set with the reason why the command was denied, or the progress percentage when result is MAV_RESULT_IN_PROGRESS -int32 result_param2 # Additional parameter of the result, example: which parameter of MAV_CMD_NAV_WAYPOINT caused it to be denied. -uint8 target_system -uint16 target_component # Target component / mode executor - -bool from_external # Indicates if the command came from an external source +bool from_external # Indicates if the command came from an external source ``` ::: diff --git a/docs/en/msg_docs/VehicleCommandAckV0.md b/docs/en/msg_docs/VehicleCommandAckV0.md new file mode 100644 index 0000000000..89a638853a --- /dev/null +++ b/docs/en/msg_docs/VehicleCommandAckV0.md @@ -0,0 +1,88 @@ +--- +pageClass: is-wide-page +--- + +# VehicleCommandAckV0 (UORB message) + +Vehicle Command Ackonwledgement uORB message. Used for acknowledging the vehicle command being received. Follows the MAVLink COMMAND_ACK message definition. + +**TOPICS:** vehicle_command_ack_v0 + +## Fields + +| Name | Type | Unit [Frame] | Range/Enum | Description | +| ---------------- | -------- | ------------ | ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | +| timestamp | `uint64` | | | time since system start (microseconds) | +| command | `uint32` | | | Command that is being acknowledged | +| result | `uint8` | | | Command result | +| result_param1 | `uint8` | | | Also used as progress[%], it can be set with the reason why the command was denied, or the progress percentage when result is MAV_RESULT_IN_PROGRESS | +| result_param2 | `int32` | | | Additional parameter of the result, example: which parameter of MAV_CMD_NAV_WAYPOINT caused it to be denied. | +| target_system | `uint8` | | | +| target_component | `uint16` | | | Target component / mode executor | +| from_external | `bool` | | | Indicates if the command came from an external source | + +## Constants + +| Name | Type | Value | Description | +| --------------------------------------------------------------------------------------------- | -------- | ----- | --------------------------------- | +| MESSAGE_VERSION | `uint32` | 0 | +| VEHICLE_CMD_RESULT_ACCEPTED | `uint8` | 0 | Command ACCEPTED and EXECUTED | +| VEHICLE_CMD_RESULT_TEMPORARILY_REJECTED | `uint8` | 1 | Command TEMPORARY REJECTED/DENIED | +| VEHICLE_CMD_RESULT_DENIED | `uint8` | 2 | Command PERMANENTLY DENIED | +| VEHICLE_CMD_RESULT_UNSUPPORTED | `uint8` | 3 | Command UNKNOWN/UNSUPPORTED | +| VEHICLE_CMD_RESULT_FAILED | `uint8` | 4 | Command executed, but failed | +| VEHICLE_CMD_RESULT_IN_PROGRESS | `uint8` | 5 | Command being executed | +| VEHICLE_CMD_RESULT_CANCELLED | `uint8` | 6 | Command Canceled | +| ARM_AUTH_DENIED_REASON_GENERIC | `uint16` | 0 | +| ARM_AUTH_DENIED_REASON_NONE | `uint16` | 1 | +| ARM_AUTH_DENIED_REASON_INVALID_WAYPOINT | `uint16` | 2 | +| ARM_AUTH_DENIED_REASON_TIMEOUT | `uint16` | 3 | +| ARM_AUTH_DENIED_REASON_AIRSPACE_IN_USE | `uint16` | 4 | +| ARM_AUTH_DENIED_REASON_BAD_WEATHER | `uint16` | 5 | +| ORB_QUEUE_LENGTH | `uint8` | 8 | + +## Source Message + +[Source file (GitHub)](https://github.com/PX4/PX4-Autopilot/blob/main/msg/px4_msgs_old/msg/VehicleCommandAckV0.msg) + +::: details Click here to see original file + +```c +# Vehicle Command Ackonwledgement uORB message. +# Used for acknowledging the vehicle command being received. +# Follows the MAVLink COMMAND_ACK message definition + +uint32 MESSAGE_VERSION = 0 + +uint64 timestamp # time since system start (microseconds) + +# Result cases. This follows the MAVLink MAV_RESULT enum definition +uint8 VEHICLE_CMD_RESULT_ACCEPTED = 0 # Command ACCEPTED and EXECUTED | +uint8 VEHICLE_CMD_RESULT_TEMPORARILY_REJECTED = 1 # Command TEMPORARY REJECTED/DENIED | +uint8 VEHICLE_CMD_RESULT_DENIED = 2 # Command PERMANENTLY DENIED | +uint8 VEHICLE_CMD_RESULT_UNSUPPORTED = 3 # Command UNKNOWN/UNSUPPORTED | +uint8 VEHICLE_CMD_RESULT_FAILED = 4 # Command executed, but failed | +uint8 VEHICLE_CMD_RESULT_IN_PROGRESS = 5 # Command being executed | +uint8 VEHICLE_CMD_RESULT_CANCELLED = 6 # Command Canceled + +# Arming denied specific cases +uint16 ARM_AUTH_DENIED_REASON_GENERIC = 0 +uint16 ARM_AUTH_DENIED_REASON_NONE = 1 +uint16 ARM_AUTH_DENIED_REASON_INVALID_WAYPOINT = 2 +uint16 ARM_AUTH_DENIED_REASON_TIMEOUT = 3 +uint16 ARM_AUTH_DENIED_REASON_AIRSPACE_IN_USE = 4 +uint16 ARM_AUTH_DENIED_REASON_BAD_WEATHER = 5 + +uint8 ORB_QUEUE_LENGTH = 8 + +uint32 command # Command that is being acknowledged +uint8 result # Command result +uint8 result_param1 # Also used as progress[%], it can be set with the reason why the command was denied, or the progress percentage when result is MAV_RESULT_IN_PROGRESS +int32 result_param2 # Additional parameter of the result, example: which parameter of MAV_CMD_NAV_WAYPOINT caused it to be denied. +uint8 target_system +uint16 target_component # Target component / mode executor + +bool from_external # Indicates if the command came from an external source +``` + +::: diff --git a/docs/en/msg_docs/VehicleControlMode.md b/docs/en/msg_docs/VehicleControlMode.md index e122049c8c..b5e05a6058 100644 --- a/docs/en/msg_docs/VehicleControlMode.md +++ b/docs/en/msg_docs/VehicleControlMode.md @@ -29,9 +29,9 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| ----------------------------------------------- | -------- | ----- | ----------- | -| MESSAGE_VERSION | `uint32` | 0 | +| Name | Type | Value | Description | +| --------------------------------------------- | -------- | ----- | ----------- | +| MESSAGE_VERSION | `uint32` | 0 | ## Source Message diff --git a/docs/en/msg_docs/VehicleGlobalPosition.md b/docs/en/msg_docs/VehicleGlobalPosition.md index 4e4fed0f7e..1d2634d8b8 100644 --- a/docs/en/msg_docs/VehicleGlobalPosition.md +++ b/docs/en/msg_docs/VehicleGlobalPosition.md @@ -33,9 +33,9 @@ Fused global position in WGS84. This struct contains global position estimation. ## Constants -| Name | Type | Value | Description | -| ----------------------------------------------- | -------- | ----- | ----------- | -| MESSAGE_VERSION | `uint32` | 0 | +| Name | Type | Value | Description | +| --------------------------------------------- | -------- | ----- | ----------- | +| MESSAGE_VERSION | `uint32` | 0 | ## Source Message diff --git a/docs/en/msg_docs/VehicleGlobalPositionV0.md b/docs/en/msg_docs/VehicleGlobalPositionV0.md index cc90fc9405..fe0d3b1858 100644 --- a/docs/en/msg_docs/VehicleGlobalPositionV0.md +++ b/docs/en/msg_docs/VehicleGlobalPositionV0.md @@ -33,9 +33,9 @@ Fused global position in WGS84. This struct contains global position estimation. ## Constants -| Name | Type | Value | Description | -| ----------------------------------------------- | -------- | ----- | ----------- | -| MESSAGE_VERSION | `uint32` | 0 | +| Name | Type | Value | Description | +| --------------------------------------------- | -------- | ----- | ----------- | +| MESSAGE_VERSION | `uint32` | 0 | ## Source Message diff --git a/docs/en/msg_docs/VehicleImu.md b/docs/en/msg_docs/VehicleImu.md index 005cf34ae6..7e30180a53 100644 --- a/docs/en/msg_docs/VehicleImu.md +++ b/docs/en/msg_docs/VehicleImu.md @@ -27,11 +27,11 @@ IMU readings in SI-unit form. ## Constants -| Name | Type | Value | Description | -| ------------------------------------- | ------- | ----- | ----------- | -| CLIPPING_X | `uint8` | 1 | -| CLIPPING_Y | `uint8` | 2 | -| CLIPPING_Z | `uint8` | 4 | +| Name | Type | Value | Description | +| ----------------------------------- | ------- | ----- | ----------- | +| CLIPPING_X | `uint8` | 1 | +| CLIPPING_Y | `uint8` | 2 | +| CLIPPING_Z | `uint8` | 4 | ## Source Message diff --git a/docs/en/msg_docs/VehicleLandDetected.md b/docs/en/msg_docs/VehicleLandDetected.md index 6cc434124e..9b9b357b73 100644 --- a/docs/en/msg_docs/VehicleLandDetected.md +++ b/docs/en/msg_docs/VehicleLandDetected.md @@ -26,9 +26,9 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| ----------------------------------------------- | -------- | ----- | ----------- | -| MESSAGE_VERSION | `uint32` | 0 | +| Name | Type | Value | Description | +| --------------------------------------------- | -------- | ----- | ----------- | +| MESSAGE_VERSION | `uint32` | 0 | ## Source Message diff --git a/docs/en/msg_docs/VehicleLocalPosition.md b/docs/en/msg_docs/VehicleLocalPosition.md index 855cb89910..3aa8c7dd7d 100644 --- a/docs/en/msg_docs/VehicleLocalPosition.md +++ b/docs/en/msg_docs/VehicleLocalPosition.md @@ -68,12 +68,12 @@ Fused local position in NED. The coordinate system origin is the vehicle positio ## Constants -| Name | Type | Value | Description | -| ----------------------------------------------------------------- | -------- | ----- | ----------------------------------------------------------------------------------------- | -| MESSAGE_VERSION | `uint32` | 1 | -| DIST_BOTTOM_SENSOR_NONE | `uint8` | 0 | -| DIST_BOTTOM_SENSOR_RANGE | `uint8` | 1 | (1 << 0) a range sensor is used to estimate dist_bottom field | -| DIST_BOTTOM_SENSOR_FLOW | `uint8` | 2 | (1 << 1) a flow sensor is used to estimate dist_bottom field (mostly fixed-wing use case) | +| Name | Type | Value | Description | +| --------------------------------------------------------------- | -------- | ----- | ----------------------------------------------------------------------------------------- | +| MESSAGE_VERSION | `uint32` | 1 | +| DIST_BOTTOM_SENSOR_NONE | `uint8` | 0 | +| DIST_BOTTOM_SENSOR_RANGE | `uint8` | 1 | (1 << 0) a range sensor is used to estimate dist_bottom field | +| DIST_BOTTOM_SENSOR_FLOW | `uint8` | 2 | (1 << 1) a flow sensor is used to estimate dist_bottom field (mostly fixed-wing use case) | ## Source Message diff --git a/docs/en/msg_docs/VehicleLocalPositionV0.md b/docs/en/msg_docs/VehicleLocalPositionV0.md index 1596c85b1b..535f0cee6f 100644 --- a/docs/en/msg_docs/VehicleLocalPositionV0.md +++ b/docs/en/msg_docs/VehicleLocalPositionV0.md @@ -67,12 +67,12 @@ Fused local position in NED. The coordinate system origin is the vehicle positio ## Constants -| Name | Type | Value | Description | -| ----------------------------------------------------------------- | -------- | ----- | ----------------------------------------------------------------------------------------- | -| MESSAGE_VERSION | `uint32` | 0 | -| DIST_BOTTOM_SENSOR_NONE | `uint8` | 0 | -| DIST_BOTTOM_SENSOR_RANGE | `uint8` | 1 | (1 << 0) a range sensor is used to estimate dist_bottom field | -| DIST_BOTTOM_SENSOR_FLOW | `uint8` | 2 | (1 << 1) a flow sensor is used to estimate dist_bottom field (mostly fixed-wing use case) | +| Name | Type | Value | Description | +| --------------------------------------------------------------- | -------- | ----- | ----------------------------------------------------------------------------------------- | +| MESSAGE_VERSION | `uint32` | 0 | +| DIST_BOTTOM_SENSOR_NONE | `uint8` | 0 | +| DIST_BOTTOM_SENSOR_RANGE | `uint8` | 1 | (1 << 0) a range sensor is used to estimate dist_bottom field | +| DIST_BOTTOM_SENSOR_FLOW | `uint8` | 2 | (1 << 1) a flow sensor is used to estimate dist_bottom field (mostly fixed-wing use case) | ## Source Message diff --git a/docs/en/msg_docs/VehicleOdometry.md b/docs/en/msg_docs/VehicleOdometry.md index a89f94d675..a3c6d201fd 100644 --- a/docs/en/msg_docs/VehicleOdometry.md +++ b/docs/en/msg_docs/VehicleOdometry.md @@ -32,26 +32,26 @@ Fits ROS REP 147 for aerial vehicles ### POSE_FRAME {#POSE_FRAME} -| Name | Type | Value | Description | -| ----------------------------------------------------- | ------- | ----- | --------------------------------------------------------------------------------------------- | -| POSE_FRAME_UNKNOWN | `uint8` | 0 | Unknown frame | -| POSE_FRAME_NED | `uint8` | 1 | North-East-Down (NED) navigation frame. Aligned with True North. | -| POSE_FRAME_FRD | `uint8` | 2 | Forward-Right-Down (FRD) frame. Constant arbitrary heading offset from True North. Z is down. | +| Name | Type | Value | Description | +| --------------------------------------------------- | ------- | ----- | --------------------------------------------------------------------------------------------- | +| POSE_FRAME_UNKNOWN | `uint8` | 0 | Unknown frame | +| POSE_FRAME_NED | `uint8` | 1 | North-East-Down (NED) navigation frame. Aligned with True North. | +| POSE_FRAME_FRD | `uint8` | 2 | Forward-Right-Down (FRD) frame. Constant arbitrary heading offset from True North. Z is down. | ### VELOCITY_FRAME {#VELOCITY_FRAME} -| Name | Type | Value | Description | -| --------------------------------------------------------------- | ------- | ----- | ------------------------------------------------------------------------------------------------------- | -| VELOCITY_FRAME_UNKNOWN | `uint8` | 0 | Unknown frame | -| VELOCITY_FRAME_NED | `uint8` | 1 | NED navigation frame at current position. | -| VELOCITY_FRAME_FRD | `uint8` | 2 | FRD navigation frame at current position. Constant arbitrary heading offset from True North. Z is down. | -| VELOCITY_FRAME_BODY_FRD | `uint8` | 3 | FRD body-fixed frame | +| Name | Type | Value | Description | +| ------------------------------------------------------------- | ------- | ----- | ------------------------------------------------------------------------------------------------------- | +| VELOCITY_FRAME_UNKNOWN | `uint8` | 0 | Unknown frame | +| VELOCITY_FRAME_NED | `uint8` | 1 | NED navigation frame at current position. | +| VELOCITY_FRAME_FRD | `uint8` | 2 | FRD navigation frame at current position. Constant arbitrary heading offset from True North. Z is down. | +| VELOCITY_FRAME_BODY_FRD | `uint8` | 3 | FRD body-fixed frame | ## Constants -| Name | Type | Value | Description | -| ----------------------------------------------- | -------- | ----- | ----------- | -| MESSAGE_VERSION | `uint32` | 0 | +| Name | Type | Value | Description | +| --------------------------------------------- | -------- | ----- | ----------- | +| MESSAGE_VERSION | `uint32` | 0 | ## Source Message diff --git a/docs/en/msg_docs/VehicleRatesSetpoint.md b/docs/en/msg_docs/VehicleRatesSetpoint.md index 3d9fed57d8..edfc3ada80 100644 --- a/docs/en/msg_docs/VehicleRatesSetpoint.md +++ b/docs/en/msg_docs/VehicleRatesSetpoint.md @@ -19,9 +19,9 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| ----------------------------------------------- | -------- | ----- | ----------- | -| MESSAGE_VERSION | `uint32` | 0 | +| Name | Type | Value | Description | +| --------------------------------------------- | -------- | ----- | ----------- | +| MESSAGE_VERSION | `uint32` | 0 | ## Source Message diff --git a/docs/en/msg_docs/VehicleRoi.md b/docs/en/msg_docs/VehicleRoi.md index 3ddf7ad10b..af6fbd086e 100644 --- a/docs/en/msg_docs/VehicleRoi.md +++ b/docs/en/msg_docs/VehicleRoi.md @@ -23,14 +23,14 @@ Vehicle Region Of Interest (ROI). ## Constants -| Name | Type | Value | Description | -| ----------------------------------------- | ------- | ----- | ---------------------------------------------- | -| ROI_NONE | `uint8` | 0 | No region of interest | -| ROI_WPNEXT | `uint8` | 1 | Point toward next MISSION with optional offset | -| ROI_WPINDEX | `uint8` | 2 | Point toward given MISSION | -| ROI_LOCATION | `uint8` | 3 | Point toward fixed location | -| ROI_TARGET | `uint8` | 4 | Point toward target | -| ROI_ENUM_END | `uint8` | 5 | +| Name | Type | Value | Description | +| --------------------------------------- | ------- | ----- | ---------------------------------------------- | +| ROI_NONE | `uint8` | 0 | No region of interest | +| ROI_WPNEXT | `uint8` | 1 | Point toward next MISSION with optional offset | +| ROI_WPINDEX | `uint8` | 2 | Point toward given MISSION | +| ROI_LOCATION | `uint8` | 3 | Point toward fixed location | +| ROI_TARGET | `uint8` | 4 | Point toward target | +| ROI_ENUM_END | `uint8` | 5 | ## Source Message diff --git a/docs/en/msg_docs/VehicleStatus.md b/docs/en/msg_docs/VehicleStatus.md index caf184cd96..86c6e9df89 100644 --- a/docs/en/msg_docs/VehicleStatus.md +++ b/docs/en/msg_docs/VehicleStatus.md @@ -23,9 +23,9 @@ Encodes the system state of the vehicle published by commander. | nav_state | `uint8` | | | Currently active mode | | executor_in_charge | `uint8` | | | Current mode executor in charge (0=Autopilot) | | nav_state_display | `uint8` | | | User-visible nav state sent via MAVLink (executor state if active, otherwise nav_state) | +| accepts_offboard_setpoints | `bool` | | | True if the current mode accepts offboard trajectory setpoints via MAVLink | | valid_nav_states_mask | `uint32` | | | Bitmask for all valid nav_state values | | can_set_nav_states_mask | `uint32` | | | Bitmask for all modes that a user can select | -| failure_detector_status | `uint16` | | | | hil_state | `uint8` | | | | vehicle_type | `uint8` | | | | failsafe | `bool` | | | true if system is in failsafe state (e.g.:RTL, Hover, Terminate, ...) | @@ -56,71 +56,62 @@ Encodes the system state of the vehicle published by commander. ## Constants -| Name | Type | Value | Description | -| ----------------------------------------------------------------------------------------- | -------- | ----- | ------------------------------------------------ | -| MESSAGE_VERSION | `uint32` | 2 | -| ARMING_STATE_DISARMED | `uint8` | 1 | -| ARMING_STATE_ARMED | `uint8` | 2 | -| ARM_DISARM_REASON_STICK_GESTURE | `uint8` | 1 | -| ARM_DISARM_REASON_RC_SWITCH | `uint8` | 2 | -| ARM_DISARM_REASON_COMMAND_INTERNAL | `uint8` | 3 | -| ARM_DISARM_REASON_COMMAND_EXTERNAL | `uint8` | 4 | -| ARM_DISARM_REASON_MISSION_START | `uint8` | 5 | -| ARM_DISARM_REASON_LANDING | `uint8` | 6 | -| ARM_DISARM_REASON_PREFLIGHT_INACTION | `uint8` | 7 | -| ARM_DISARM_REASON_KILL_SWITCH | `uint8` | 8 | -| ARM_DISARM_REASON_RC_BUTTON | `uint8` | 13 | -| ARM_DISARM_REASON_FAILSAFE | `uint8` | 14 | -| NAVIGATION_STATE_MANUAL | `uint8` | 0 | Manual mode | -| NAVIGATION_STATE_ALTCTL | `uint8` | 1 | Altitude control mode | -| NAVIGATION_STATE_POSCTL | `uint8` | 2 | Position control mode | -| NAVIGATION_STATE_AUTO_MISSION | `uint8` | 3 | Auto mission mode | -| NAVIGATION_STATE_AUTO_LOITER | `uint8` | 4 | Auto loiter mode | -| NAVIGATION_STATE_AUTO_RTL | `uint8` | 5 | Auto return to launch mode | -| NAVIGATION_STATE_POSITION_SLOW | `uint8` | 6 | -| NAVIGATION_STATE_FREE5 | `uint8` | 7 | -| NAVIGATION_STATE_ALTITUDE_CRUISE | `uint8` | 8 | Altitude with Cruise mode | -| NAVIGATION_STATE_FREE3 | `uint8` | 9 | -| NAVIGATION_STATE_ACRO | `uint8` | 10 | Acro mode | -| NAVIGATION_STATE_FREE2 | `uint8` | 11 | -| NAVIGATION_STATE_DESCEND | `uint8` | 12 | Descend mode (no position control) | -| NAVIGATION_STATE_TERMINATION | `uint8` | 13 | Termination mode | -| NAVIGATION_STATE_OFFBOARD | `uint8` | 14 | -| NAVIGATION_STATE_STAB | `uint8` | 15 | Stabilized mode | -| NAVIGATION_STATE_FREE1 | `uint8` | 16 | -| NAVIGATION_STATE_AUTO_TAKEOFF | `uint8` | 17 | Takeoff | -| NAVIGATION_STATE_AUTO_LAND | `uint8` | 18 | Land | -| NAVIGATION_STATE_AUTO_FOLLOW_TARGET | `uint8` | 19 | Auto Follow | -| NAVIGATION_STATE_AUTO_PRECLAND | `uint8` | 20 | Precision land with landing target | -| NAVIGATION_STATE_ORBIT | `uint8` | 21 | Orbit in a circle | -| NAVIGATION_STATE_AUTO_VTOL_TAKEOFF | `uint8` | 22 | Takeoff, transition, establish loiter | -| NAVIGATION_STATE_EXTERNAL1 | `uint8` | 23 | -| NAVIGATION_STATE_EXTERNAL2 | `uint8` | 24 | -| NAVIGATION_STATE_EXTERNAL3 | `uint8` | 25 | -| NAVIGATION_STATE_EXTERNAL4 | `uint8` | 26 | -| NAVIGATION_STATE_EXTERNAL5 | `uint8` | 27 | -| NAVIGATION_STATE_EXTERNAL6 | `uint8` | 28 | -| NAVIGATION_STATE_EXTERNAL7 | `uint8` | 29 | -| NAVIGATION_STATE_EXTERNAL8 | `uint8` | 30 | -| NAVIGATION_STATE_MAX | `uint8` | 31 | -| FAILURE_NONE | `uint16` | 0 | -| FAILURE_ROLL | `uint16` | 1 | (1 << 0) | -| FAILURE_PITCH | `uint16` | 2 | (1 << 1) | -| FAILURE_ALT | `uint16` | 4 | (1 << 2) | -| FAILURE_EXT | `uint16` | 8 | (1 << 3) | -| FAILURE_ARM_ESC | `uint16` | 16 | (1 << 4) | -| FAILURE_BATTERY | `uint16` | 32 | (1 << 5) | -| FAILURE_IMBALANCED_PROP | `uint16` | 64 | (1 << 6) | -| FAILURE_MOTOR | `uint16` | 128 | (1 << 7) | -| HIL_STATE_OFF | `uint8` | 0 | -| HIL_STATE_ON | `uint8` | 1 | -| VEHICLE_TYPE_UNSPECIFIED | `uint8` | 0 | -| VEHICLE_TYPE_ROTARY_WING | `uint8` | 1 | -| VEHICLE_TYPE_FIXED_WING | `uint8` | 2 | -| VEHICLE_TYPE_ROVER | `uint8` | 3 | -| FAILSAFE_DEFER_STATE_DISABLED | `uint8` | 0 | -| FAILSAFE_DEFER_STATE_ENABLED | `uint8` | 1 | -| FAILSAFE_DEFER_STATE_WOULD_FAILSAFE | `uint8` | 2 | Failsafes deferred, but would trigger a failsafe | +| Name | Type | Value | Description | +| --------------------------------------------------------------------------------------- | -------- | ----- | ------------------------------------------------ | +| MESSAGE_VERSION | `uint32` | 4 | +| ARMING_STATE_DISARMED | `uint8` | 1 | +| ARMING_STATE_ARMED | `uint8` | 2 | +| ARM_DISARM_REASON_STICK_GESTURE | `uint8` | 1 | +| ARM_DISARM_REASON_RC_SWITCH | `uint8` | 2 | +| ARM_DISARM_REASON_COMMAND_INTERNAL | `uint8` | 3 | +| ARM_DISARM_REASON_COMMAND_EXTERNAL | `uint8` | 4 | +| ARM_DISARM_REASON_MISSION_START | `uint8` | 5 | +| ARM_DISARM_REASON_LANDING | `uint8` | 6 | +| ARM_DISARM_REASON_PREFLIGHT_INACTION | `uint8` | 7 | +| ARM_DISARM_REASON_KILL_SWITCH | `uint8` | 8 | +| ARM_DISARM_REASON_RC_BUTTON | `uint8` | 13 | +| ARM_DISARM_REASON_FAILSAFE | `uint8` | 14 | +| NAVIGATION_STATE_MANUAL | `uint8` | 0 | Manual mode | +| NAVIGATION_STATE_ALTCTL | `uint8` | 1 | Altitude control mode | +| NAVIGATION_STATE_POSCTL | `uint8` | 2 | Position control mode | +| NAVIGATION_STATE_AUTO_MISSION | `uint8` | 3 | Auto mission mode | +| NAVIGATION_STATE_AUTO_LOITER | `uint8` | 4 | Auto loiter mode | +| NAVIGATION_STATE_AUTO_RTL | `uint8` | 5 | Auto return to launch mode | +| NAVIGATION_STATE_POSITION_SLOW | `uint8` | 6 | +| NAVIGATION_STATE_FREE5 | `uint8` | 7 | +| NAVIGATION_STATE_ALTITUDE_CRUISE | `uint8` | 8 | Altitude with Cruise mode | +| NAVIGATION_STATE_FREE3 | `uint8` | 9 | +| NAVIGATION_STATE_ACRO | `uint8` | 10 | Acro mode | +| NAVIGATION_STATE_FREE2 | `uint8` | 11 | +| NAVIGATION_STATE_DESCEND | `uint8` | 12 | Descend mode (no position control) | +| NAVIGATION_STATE_TERMINATION | `uint8` | 13 | Termination mode | +| NAVIGATION_STATE_OFFBOARD | `uint8` | 14 | +| NAVIGATION_STATE_STAB | `uint8` | 15 | Stabilized mode | +| NAVIGATION_STATE_FREE1 | `uint8` | 16 | +| NAVIGATION_STATE_AUTO_TAKEOFF | `uint8` | 17 | Takeoff | +| NAVIGATION_STATE_AUTO_LAND | `uint8` | 18 | Land | +| NAVIGATION_STATE_AUTO_FOLLOW_TARGET | `uint8` | 19 | Auto Follow | +| NAVIGATION_STATE_AUTO_PRECLAND | `uint8` | 20 | Precision land with landing target | +| NAVIGATION_STATE_ORBIT | `uint8` | 21 | Orbit in a circle | +| NAVIGATION_STATE_AUTO_VTOL_TAKEOFF | `uint8` | 22 | Takeoff, transition, establish loiter | +| NAVIGATION_STATE_EXTERNAL1 | `uint8` | 23 | +| NAVIGATION_STATE_EXTERNAL2 | `uint8` | 24 | +| NAVIGATION_STATE_EXTERNAL3 | `uint8` | 25 | +| NAVIGATION_STATE_EXTERNAL4 | `uint8` | 26 | +| NAVIGATION_STATE_EXTERNAL5 | `uint8` | 27 | +| NAVIGATION_STATE_EXTERNAL6 | `uint8` | 28 | +| NAVIGATION_STATE_EXTERNAL7 | `uint8` | 29 | +| NAVIGATION_STATE_EXTERNAL8 | `uint8` | 30 | +| NAVIGATION_STATE_MAX | `uint8` | 31 | +| HIL_STATE_OFF | `uint8` | 0 | +| HIL_STATE_ON | `uint8` | 1 | +| VEHICLE_TYPE_UNSPECIFIED | `uint8` | 0 | +| VEHICLE_TYPE_ROTARY_WING | `uint8` | 1 | +| VEHICLE_TYPE_FIXED_WING | `uint8` | 2 | +| VEHICLE_TYPE_ROVER | `uint8` | 3 | +| FAILSAFE_DEFER_STATE_DISABLED | `uint8` | 0 | +| FAILSAFE_DEFER_STATE_ENABLED | `uint8` | 1 | +| FAILSAFE_DEFER_STATE_WOULD_FAILSAFE | `uint8` | 2 | Failsafes deferred, but would trigger a failsafe | ## Source Message @@ -131,7 +122,7 @@ Encodes the system state of the vehicle published by commander. ```c # Encodes the system state of the vehicle published by commander -uint32 MESSAGE_VERSION = 2 +uint32 MESSAGE_VERSION = 4 uint64 timestamp # time since system start (microseconds) @@ -196,21 +187,11 @@ uint8 NAVIGATION_STATE_MAX = 31 uint8 executor_in_charge # Current mode executor in charge (0=Autopilot) uint8 nav_state_display # User-visible nav state sent via MAVLink (executor state if active, otherwise nav_state) +bool accepts_offboard_setpoints # True if the current mode accepts offboard trajectory setpoints via MAVLink + uint32 valid_nav_states_mask # Bitmask for all valid nav_state values uint32 can_set_nav_states_mask # Bitmask for all modes that a user can select -# Bitmask of detected failures -uint16 failure_detector_status -uint16 FAILURE_NONE = 0 -uint16 FAILURE_ROLL = 1 # (1 << 0) -uint16 FAILURE_PITCH = 2 # (1 << 1) -uint16 FAILURE_ALT = 4 # (1 << 2) -uint16 FAILURE_EXT = 8 # (1 << 3) -uint16 FAILURE_ARM_ESC = 16 # (1 << 4) -uint16 FAILURE_BATTERY = 32 # (1 << 5) -uint16 FAILURE_IMBALANCED_PROP = 64 # (1 << 6) -uint16 FAILURE_MOTOR = 128 # (1 << 7) - uint8 hil_state uint8 HIL_STATE_OFF = 0 uint8 HIL_STATE_ON = 1 diff --git a/docs/en/msg_docs/VehicleStatusV0.md b/docs/en/msg_docs/VehicleStatusV0.md index cba82e8e6d..1475bce8ea 100644 --- a/docs/en/msg_docs/VehicleStatusV0.md +++ b/docs/en/msg_docs/VehicleStatusV0.md @@ -56,76 +56,76 @@ Encodes the system state of the vehicle published by commander. ## Constants -| Name | Type | Value | Description | -| ----------------------------------------------------------------------------------------------- | -------- | ----- | ------------------------------------------------ | -| MESSAGE_VERSION | `uint32` | 0 | -| ARMING_STATE_DISARMED | `uint8` | 1 | -| ARMING_STATE_ARMED | `uint8` | 2 | -| ARM_DISARM_REASON_TRANSITION_TO_STANDBY | `uint8` | 0 | -| ARM_DISARM_REASON_STICK_GESTURE | `uint8` | 1 | -| ARM_DISARM_REASON_RC_SWITCH | `uint8` | 2 | -| ARM_DISARM_REASON_COMMAND_INTERNAL | `uint8` | 3 | -| ARM_DISARM_REASON_COMMAND_EXTERNAL | `uint8` | 4 | -| ARM_DISARM_REASON_MISSION_START | `uint8` | 5 | -| ARM_DISARM_REASON_SAFETY_BUTTON | `uint8` | 6 | -| ARM_DISARM_REASON_AUTO_DISARM_LAND | `uint8` | 7 | -| ARM_DISARM_REASON_AUTO_DISARM_PREFLIGHT | `uint8` | 8 | -| ARM_DISARM_REASON_KILL_SWITCH | `uint8` | 9 | -| ARM_DISARM_REASON_LOCKDOWN | `uint8` | 10 | -| ARM_DISARM_REASON_FAILURE_DETECTOR | `uint8` | 11 | -| ARM_DISARM_REASON_SHUTDOWN | `uint8` | 12 | -| ARM_DISARM_REASON_UNIT_TEST | `uint8` | 13 | -| NAVIGATION_STATE_MANUAL | `uint8` | 0 | Manual mode | -| NAVIGATION_STATE_ALTCTL | `uint8` | 1 | Altitude control mode | -| NAVIGATION_STATE_POSCTL | `uint8` | 2 | Position control mode | -| NAVIGATION_STATE_AUTO_MISSION | `uint8` | 3 | Auto mission mode | -| NAVIGATION_STATE_AUTO_LOITER | `uint8` | 4 | Auto loiter mode | -| NAVIGATION_STATE_AUTO_RTL | `uint8` | 5 | Auto return to launch mode | -| NAVIGATION_STATE_POSITION_SLOW | `uint8` | 6 | -| NAVIGATION_STATE_FREE5 | `uint8` | 7 | -| NAVIGATION_STATE_FREE4 | `uint8` | 8 | -| NAVIGATION_STATE_FREE3 | `uint8` | 9 | -| NAVIGATION_STATE_ACRO | `uint8` | 10 | Acro mode | -| NAVIGATION_STATE_FREE2 | `uint8` | 11 | -| NAVIGATION_STATE_DESCEND | `uint8` | 12 | Descend mode (no position control) | -| NAVIGATION_STATE_TERMINATION | `uint8` | 13 | Termination mode | -| NAVIGATION_STATE_OFFBOARD | `uint8` | 14 | -| NAVIGATION_STATE_STAB | `uint8` | 15 | Stabilized mode | -| NAVIGATION_STATE_FREE1 | `uint8` | 16 | -| NAVIGATION_STATE_AUTO_TAKEOFF | `uint8` | 17 | Takeoff | -| NAVIGATION_STATE_AUTO_LAND | `uint8` | 18 | Land | -| NAVIGATION_STATE_AUTO_FOLLOW_TARGET | `uint8` | 19 | Auto Follow | -| NAVIGATION_STATE_AUTO_PRECLAND | `uint8` | 20 | Precision land with landing target | -| NAVIGATION_STATE_ORBIT | `uint8` | 21 | Orbit in a circle | -| NAVIGATION_STATE_AUTO_VTOL_TAKEOFF | `uint8` | 22 | Takeoff, transition, establish loiter | -| NAVIGATION_STATE_EXTERNAL1 | `uint8` | 23 | -| NAVIGATION_STATE_EXTERNAL2 | `uint8` | 24 | -| NAVIGATION_STATE_EXTERNAL3 | `uint8` | 25 | -| NAVIGATION_STATE_EXTERNAL4 | `uint8` | 26 | -| NAVIGATION_STATE_EXTERNAL5 | `uint8` | 27 | -| NAVIGATION_STATE_EXTERNAL6 | `uint8` | 28 | -| NAVIGATION_STATE_EXTERNAL7 | `uint8` | 29 | -| NAVIGATION_STATE_EXTERNAL8 | `uint8` | 30 | -| NAVIGATION_STATE_MAX | `uint8` | 31 | -| FAILURE_NONE | `uint16` | 0 | -| FAILURE_ROLL | `uint16` | 1 | (1 << 0) | -| FAILURE_PITCH | `uint16` | 2 | (1 << 1) | -| FAILURE_ALT | `uint16` | 4 | (1 << 2) | -| FAILURE_EXT | `uint16` | 8 | (1 << 3) | -| FAILURE_ARM_ESC | `uint16` | 16 | (1 << 4) | -| FAILURE_BATTERY | `uint16` | 32 | (1 << 5) | -| FAILURE_IMBALANCED_PROP | `uint16` | 64 | (1 << 6) | -| FAILURE_MOTOR | `uint16` | 128 | (1 << 7) | -| HIL_STATE_OFF | `uint8` | 0 | -| HIL_STATE_ON | `uint8` | 1 | -| VEHICLE_TYPE_UNKNOWN | `uint8` | 0 | -| VEHICLE_TYPE_ROTARY_WING | `uint8` | 1 | -| VEHICLE_TYPE_FIXED_WING | `uint8` | 2 | -| VEHICLE_TYPE_ROVER | `uint8` | 3 | -| VEHICLE_TYPE_AIRSHIP | `uint8` | 4 | -| FAILSAFE_DEFER_STATE_DISABLED | `uint8` | 0 | -| FAILSAFE_DEFER_STATE_ENABLED | `uint8` | 1 | -| FAILSAFE_DEFER_STATE_WOULD_FAILSAFE | `uint8` | 2 | Failsafes deferred, but would trigger a failsafe | +| Name | Type | Value | Description | +| --------------------------------------------------------------------------------------------- | -------- | ----- | ------------------------------------------------ | +| MESSAGE_VERSION | `uint32` | 0 | +| ARMING_STATE_DISARMED | `uint8` | 1 | +| ARMING_STATE_ARMED | `uint8` | 2 | +| ARM_DISARM_REASON_TRANSITION_TO_STANDBY | `uint8` | 0 | +| ARM_DISARM_REASON_STICK_GESTURE | `uint8` | 1 | +| ARM_DISARM_REASON_RC_SWITCH | `uint8` | 2 | +| ARM_DISARM_REASON_COMMAND_INTERNAL | `uint8` | 3 | +| ARM_DISARM_REASON_COMMAND_EXTERNAL | `uint8` | 4 | +| ARM_DISARM_REASON_MISSION_START | `uint8` | 5 | +| ARM_DISARM_REASON_SAFETY_BUTTON | `uint8` | 6 | +| ARM_DISARM_REASON_AUTO_DISARM_LAND | `uint8` | 7 | +| ARM_DISARM_REASON_AUTO_DISARM_PREFLIGHT | `uint8` | 8 | +| ARM_DISARM_REASON_KILL_SWITCH | `uint8` | 9 | +| ARM_DISARM_REASON_LOCKDOWN | `uint8` | 10 | +| ARM_DISARM_REASON_FAILURE_DETECTOR | `uint8` | 11 | +| ARM_DISARM_REASON_SHUTDOWN | `uint8` | 12 | +| ARM_DISARM_REASON_UNIT_TEST | `uint8` | 13 | +| NAVIGATION_STATE_MANUAL | `uint8` | 0 | Manual mode | +| NAVIGATION_STATE_ALTCTL | `uint8` | 1 | Altitude control mode | +| NAVIGATION_STATE_POSCTL | `uint8` | 2 | Position control mode | +| NAVIGATION_STATE_AUTO_MISSION | `uint8` | 3 | Auto mission mode | +| NAVIGATION_STATE_AUTO_LOITER | `uint8` | 4 | Auto loiter mode | +| NAVIGATION_STATE_AUTO_RTL | `uint8` | 5 | Auto return to launch mode | +| NAVIGATION_STATE_POSITION_SLOW | `uint8` | 6 | +| NAVIGATION_STATE_FREE5 | `uint8` | 7 | +| NAVIGATION_STATE_FREE4 | `uint8` | 8 | +| NAVIGATION_STATE_FREE3 | `uint8` | 9 | +| NAVIGATION_STATE_ACRO | `uint8` | 10 | Acro mode | +| NAVIGATION_STATE_FREE2 | `uint8` | 11 | +| NAVIGATION_STATE_DESCEND | `uint8` | 12 | Descend mode (no position control) | +| NAVIGATION_STATE_TERMINATION | `uint8` | 13 | Termination mode | +| NAVIGATION_STATE_OFFBOARD | `uint8` | 14 | +| NAVIGATION_STATE_STAB | `uint8` | 15 | Stabilized mode | +| NAVIGATION_STATE_FREE1 | `uint8` | 16 | +| NAVIGATION_STATE_AUTO_TAKEOFF | `uint8` | 17 | Takeoff | +| NAVIGATION_STATE_AUTO_LAND | `uint8` | 18 | Land | +| NAVIGATION_STATE_AUTO_FOLLOW_TARGET | `uint8` | 19 | Auto Follow | +| NAVIGATION_STATE_AUTO_PRECLAND | `uint8` | 20 | Precision land with landing target | +| NAVIGATION_STATE_ORBIT | `uint8` | 21 | Orbit in a circle | +| NAVIGATION_STATE_AUTO_VTOL_TAKEOFF | `uint8` | 22 | Takeoff, transition, establish loiter | +| NAVIGATION_STATE_EXTERNAL1 | `uint8` | 23 | +| NAVIGATION_STATE_EXTERNAL2 | `uint8` | 24 | +| NAVIGATION_STATE_EXTERNAL3 | `uint8` | 25 | +| NAVIGATION_STATE_EXTERNAL4 | `uint8` | 26 | +| NAVIGATION_STATE_EXTERNAL5 | `uint8` | 27 | +| NAVIGATION_STATE_EXTERNAL6 | `uint8` | 28 | +| NAVIGATION_STATE_EXTERNAL7 | `uint8` | 29 | +| NAVIGATION_STATE_EXTERNAL8 | `uint8` | 30 | +| NAVIGATION_STATE_MAX | `uint8` | 31 | +| FAILURE_NONE | `uint16` | 0 | +| FAILURE_ROLL | `uint16` | 1 | (1 << 0) | +| FAILURE_PITCH | `uint16` | 2 | (1 << 1) | +| FAILURE_ALT | `uint16` | 4 | (1 << 2) | +| FAILURE_EXT | `uint16` | 8 | (1 << 3) | +| FAILURE_ARM_ESC | `uint16` | 16 | (1 << 4) | +| FAILURE_BATTERY | `uint16` | 32 | (1 << 5) | +| FAILURE_IMBALANCED_PROP | `uint16` | 64 | (1 << 6) | +| FAILURE_MOTOR | `uint16` | 128 | (1 << 7) | +| HIL_STATE_OFF | `uint8` | 0 | +| HIL_STATE_ON | `uint8` | 1 | +| VEHICLE_TYPE_UNKNOWN | `uint8` | 0 | +| VEHICLE_TYPE_ROTARY_WING | `uint8` | 1 | +| VEHICLE_TYPE_FIXED_WING | `uint8` | 2 | +| VEHICLE_TYPE_ROVER | `uint8` | 3 | +| VEHICLE_TYPE_AIRSHIP | `uint8` | 4 | +| FAILSAFE_DEFER_STATE_DISABLED | `uint8` | 0 | +| FAILSAFE_DEFER_STATE_ENABLED | `uint8` | 1 | +| FAILSAFE_DEFER_STATE_WOULD_FAILSAFE | `uint8` | 2 | Failsafes deferred, but would trigger a failsafe | ## Source Message diff --git a/docs/en/msg_docs/VehicleStatusV1.md b/docs/en/msg_docs/VehicleStatusV1.md index 23d7f066bd..c38ce82a9e 100644 --- a/docs/en/msg_docs/VehicleStatusV1.md +++ b/docs/en/msg_docs/VehicleStatusV1.md @@ -56,91 +56,91 @@ Encodes the system state of the vehicle published by commander. ### NAVIGATION_STATE {#NAVIGATION_STATE} -| Name | Type | Value | Description | -| --------------------------------------------------------------------------------------- | ------- | ----- | ------------------------------------- | -| NAVIGATION_STATE_MANUAL | `uint8` | 0 | Manual mode | -| NAVIGATION_STATE_ALTCTL | `uint8` | 1 | Altitude control mode | -| NAVIGATION_STATE_POSCTL | `uint8` | 2 | Position control mode | -| NAVIGATION_STATE_AUTO_MISSION | `uint8` | 3 | Auto mission mode | -| NAVIGATION_STATE_AUTO_LOITER | `uint8` | 4 | Auto loiter mode | -| NAVIGATION_STATE_AUTO_RTL | `uint8` | 5 | Auto return to launch mode | -| NAVIGATION_STATE_POSITION_SLOW | `uint8` | 6 | -| NAVIGATION_STATE_FREE5 | `uint8` | 7 | -| NAVIGATION_STATE_ALTITUDE_CRUISE | `uint8` | 8 | Altitude with Cruise mode | -| NAVIGATION_STATE_FREE3 | `uint8` | 9 | -| NAVIGATION_STATE_ACRO | `uint8` | 10 | Acro mode | -| NAVIGATION_STATE_FREE2 | `uint8` | 11 | -| NAVIGATION_STATE_DESCEND | `uint8` | 12 | Descend mode (no position control) | -| NAVIGATION_STATE_TERMINATION | `uint8` | 13 | Termination mode | -| NAVIGATION_STATE_OFFBOARD | `uint8` | 14 | -| NAVIGATION_STATE_STAB | `uint8` | 15 | Stabilized mode | -| NAVIGATION_STATE_FREE1 | `uint8` | 16 | -| NAVIGATION_STATE_AUTO_TAKEOFF | `uint8` | 17 | Takeoff | -| NAVIGATION_STATE_AUTO_LAND | `uint8` | 18 | Land | -| NAVIGATION_STATE_AUTO_FOLLOW_TARGET | `uint8` | 19 | Auto Follow | -| NAVIGATION_STATE_AUTO_PRECLAND | `uint8` | 20 | Precision land with landing target | -| NAVIGATION_STATE_ORBIT | `uint8` | 21 | Orbit in a circle | -| NAVIGATION_STATE_AUTO_VTOL_TAKEOFF | `uint8` | 22 | Takeoff, transition, establish loiter | -| NAVIGATION_STATE_EXTERNAL1 | `uint8` | 23 | -| NAVIGATION_STATE_EXTERNAL2 | `uint8` | 24 | -| NAVIGATION_STATE_EXTERNAL3 | `uint8` | 25 | -| NAVIGATION_STATE_EXTERNAL4 | `uint8` | 26 | -| NAVIGATION_STATE_EXTERNAL5 | `uint8` | 27 | -| NAVIGATION_STATE_EXTERNAL6 | `uint8` | 28 | -| NAVIGATION_STATE_EXTERNAL7 | `uint8` | 29 | -| NAVIGATION_STATE_EXTERNAL8 | `uint8` | 30 | -| NAVIGATION_STATE_MAX | `uint8` | 31 | +| Name | Type | Value | Description | +| ------------------------------------------------------------------------------------- | ------- | ----- | ------------------------------------- | +| NAVIGATION_STATE_MANUAL | `uint8` | 0 | Manual mode | +| NAVIGATION_STATE_ALTCTL | `uint8` | 1 | Altitude control mode | +| NAVIGATION_STATE_POSCTL | `uint8` | 2 | Position control mode | +| NAVIGATION_STATE_AUTO_MISSION | `uint8` | 3 | Auto mission mode | +| NAVIGATION_STATE_AUTO_LOITER | `uint8` | 4 | Auto loiter mode | +| NAVIGATION_STATE_AUTO_RTL | `uint8` | 5 | Auto return to launch mode | +| NAVIGATION_STATE_POSITION_SLOW | `uint8` | 6 | +| NAVIGATION_STATE_FREE5 | `uint8` | 7 | +| NAVIGATION_STATE_ALTITUDE_CRUISE | `uint8` | 8 | Altitude with Cruise mode | +| NAVIGATION_STATE_FREE3 | `uint8` | 9 | +| NAVIGATION_STATE_ACRO | `uint8` | 10 | Acro mode | +| NAVIGATION_STATE_FREE2 | `uint8` | 11 | +| NAVIGATION_STATE_DESCEND | `uint8` | 12 | Descend mode (no position control) | +| NAVIGATION_STATE_TERMINATION | `uint8` | 13 | Termination mode | +| NAVIGATION_STATE_OFFBOARD | `uint8` | 14 | +| NAVIGATION_STATE_STAB | `uint8` | 15 | Stabilized mode | +| NAVIGATION_STATE_FREE1 | `uint8` | 16 | +| NAVIGATION_STATE_AUTO_TAKEOFF | `uint8` | 17 | Takeoff | +| NAVIGATION_STATE_AUTO_LAND | `uint8` | 18 | Land | +| NAVIGATION_STATE_AUTO_FOLLOW_TARGET | `uint8` | 19 | Auto Follow | +| NAVIGATION_STATE_AUTO_PRECLAND | `uint8` | 20 | Precision land with landing target | +| NAVIGATION_STATE_ORBIT | `uint8` | 21 | Orbit in a circle | +| NAVIGATION_STATE_AUTO_VTOL_TAKEOFF | `uint8` | 22 | Takeoff, transition, establish loiter | +| NAVIGATION_STATE_EXTERNAL1 | `uint8` | 23 | +| NAVIGATION_STATE_EXTERNAL2 | `uint8` | 24 | +| NAVIGATION_STATE_EXTERNAL3 | `uint8` | 25 | +| NAVIGATION_STATE_EXTERNAL4 | `uint8` | 26 | +| NAVIGATION_STATE_EXTERNAL5 | `uint8` | 27 | +| NAVIGATION_STATE_EXTERNAL6 | `uint8` | 28 | +| NAVIGATION_STATE_EXTERNAL7 | `uint8` | 29 | +| NAVIGATION_STATE_EXTERNAL8 | `uint8` | 30 | +| NAVIGATION_STATE_MAX | `uint8` | 31 | ### FAILURE {#FAILURE} -| Name | Type | Value | Description | -| --------------------------------------------------------------- | -------- | ----- | ----------- | -| FAILURE_NONE | `uint16` | 0 | -| FAILURE_ROLL | `uint16` | 1 | (1 << 0) | -| FAILURE_PITCH | `uint16` | 2 | (1 << 1) | -| FAILURE_ALT | `uint16` | 4 | (1 << 2) | -| FAILURE_EXT | `uint16` | 8 | (1 << 3) | -| FAILURE_ARM_ESC | `uint16` | 16 | (1 << 4) | -| FAILURE_BATTERY | `uint16` | 32 | (1 << 5) | -| FAILURE_IMBALANCED_PROP | `uint16` | 64 | (1 << 6) | -| FAILURE_MOTOR | `uint16` | 128 | (1 << 7) | +| Name | Type | Value | Description | +| ------------------------------------------------------------- | -------- | ----- | ----------- | +| FAILURE_NONE | `uint16` | 0 | +| FAILURE_ROLL | `uint16` | 1 | (1 << 0) | +| FAILURE_PITCH | `uint16` | 2 | (1 << 1) | +| FAILURE_ALT | `uint16` | 4 | (1 << 2) | +| FAILURE_EXT | `uint16` | 8 | (1 << 3) | +| FAILURE_ARM_ESC | `uint16` | 16 | (1 << 4) | +| FAILURE_BATTERY | `uint16` | 32 | (1 << 5) | +| FAILURE_IMBALANCED_PROP | `uint16` | 64 | (1 << 6) | +| FAILURE_MOTOR | `uint16` | 128 | (1 << 7) | ### VEHICLE_TYPE {#VEHICLE_TYPE} -| Name | Type | Value | Description | -| ----------------------------------------------------------------- | ------- | ----- | ----------- | -| VEHICLE_TYPE_UNSPECIFIED | `uint8` | 0 | -| VEHICLE_TYPE_ROTARY_WING | `uint8` | 1 | -| VEHICLE_TYPE_FIXED_WING | `uint8` | 2 | -| VEHICLE_TYPE_ROVER | `uint8` | 3 | +| Name | Type | Value | Description | +| --------------------------------------------------------------- | ------- | ----- | ----------- | +| VEHICLE_TYPE_UNSPECIFIED | `uint8` | 0 | +| VEHICLE_TYPE_ROTARY_WING | `uint8` | 1 | +| VEHICLE_TYPE_FIXED_WING | `uint8` | 2 | +| VEHICLE_TYPE_ROVER | `uint8` | 3 | ### FAILSAFE_DEFER_STATE {#FAILSAFE_DEFER_STATE} -| Name | Type | Value | Description | -| --------------------------------------------------------------------------------------- | ------- | ----- | ------------------------------------------------ | -| FAILSAFE_DEFER_STATE_DISABLED | `uint8` | 0 | -| FAILSAFE_DEFER_STATE_ENABLED | `uint8` | 1 | -| FAILSAFE_DEFER_STATE_WOULD_FAILSAFE | `uint8` | 2 | Failsafes deferred, but would trigger a failsafe | +| Name | Type | Value | Description | +| ------------------------------------------------------------------------------------- | ------- | ----- | ------------------------------------------------ | +| FAILSAFE_DEFER_STATE_DISABLED | `uint8` | 0 | +| FAILSAFE_DEFER_STATE_ENABLED | `uint8` | 1 | +| FAILSAFE_DEFER_STATE_WOULD_FAILSAFE | `uint8` | 2 | Failsafes deferred, but would trigger a failsafe | ## Constants -| Name | Type | Value | Description | -| ----------------------------------------------------------------------------------------- | -------- | ----- | ----------- | -| MESSAGE_VERSION | `uint32` | 1 | -| ARMING_STATE_DISARMED | `uint8` | 1 | -| ARMING_STATE_ARMED | `uint8` | 2 | -| ARM_DISARM_REASON_STICK_GESTURE | `uint8` | 1 | -| ARM_DISARM_REASON_RC_SWITCH | `uint8` | 2 | -| ARM_DISARM_REASON_COMMAND_INTERNAL | `uint8` | 3 | -| ARM_DISARM_REASON_COMMAND_EXTERNAL | `uint8` | 4 | -| ARM_DISARM_REASON_MISSION_START | `uint8` | 5 | -| ARM_DISARM_REASON_LANDING | `uint8` | 6 | -| ARM_DISARM_REASON_PREFLIGHT_INACTION | `uint8` | 7 | -| ARM_DISARM_REASON_KILL_SWITCH | `uint8` | 8 | -| ARM_DISARM_REASON_RC_BUTTON | `uint8` | 13 | -| ARM_DISARM_REASON_FAILSAFE | `uint8` | 14 | -| HIL_STATE_OFF | `uint8` | 0 | -| HIL_STATE_ON | `uint8` | 1 | +| Name | Type | Value | Description | +| --------------------------------------------------------------------------------------- | -------- | ----- | ----------- | +| MESSAGE_VERSION | `uint32` | 1 | +| ARMING_STATE_DISARMED | `uint8` | 1 | +| ARMING_STATE_ARMED | `uint8` | 2 | +| ARM_DISARM_REASON_STICK_GESTURE | `uint8` | 1 | +| ARM_DISARM_REASON_RC_SWITCH | `uint8` | 2 | +| ARM_DISARM_REASON_COMMAND_INTERNAL | `uint8` | 3 | +| ARM_DISARM_REASON_COMMAND_EXTERNAL | `uint8` | 4 | +| ARM_DISARM_REASON_MISSION_START | `uint8` | 5 | +| ARM_DISARM_REASON_LANDING | `uint8` | 6 | +| ARM_DISARM_REASON_PREFLIGHT_INACTION | `uint8` | 7 | +| ARM_DISARM_REASON_KILL_SWITCH | `uint8` | 8 | +| ARM_DISARM_REASON_RC_BUTTON | `uint8` | 13 | +| ARM_DISARM_REASON_FAILSAFE | `uint8` | 14 | +| HIL_STATE_OFF | `uint8` | 0 | +| HIL_STATE_ON | `uint8` | 1 | ## Source Message diff --git a/docs/en/msg_docs/VehicleStatusV2.md b/docs/en/msg_docs/VehicleStatusV2.md new file mode 100644 index 0000000000..29e3d1a3a9 --- /dev/null +++ b/docs/en/msg_docs/VehicleStatusV2.md @@ -0,0 +1,269 @@ +--- +pageClass: is-wide-page +--- + +# VehicleStatusV2 (UORB message) + +Encodes the system state of the vehicle published by commander. + +**TOPICS:** vehicle_status_v2 + +## Fields + +| Name | Type | Unit [Frame] | Range/Enum | Description | +| -------------------------------- | -------- | ------------ | ---------- | ----------------------------------------------------------------------------------------------- | +| timestamp | `uint64` | | | time since system start (microseconds) | +| armed_time | `uint64` | | | Arming timestamp (microseconds) | +| takeoff_time | `uint64` | | | Takeoff timestamp (microseconds) | +| arming_state | `uint8` | | | +| latest_arming_reason | `uint8` | | | +| latest_disarming_reason | `uint8` | | | +| nav_state_timestamp | `uint64` | | | time when current nav_state activated | +| nav_state_user_intention | `uint8` | | | Mode that the user selected (might be different from nav_state in a failsafe situation) | +| nav_state | `uint8` | | | Currently active mode | +| executor_in_charge | `uint8` | | | Current mode executor in charge (0=Autopilot) | +| nav_state_display | `uint8` | | | User-visible nav state sent via MAVLink (executor state if active, otherwise nav_state) | +| valid_nav_states_mask | `uint32` | | | Bitmask for all valid nav_state values | +| can_set_nav_states_mask | `uint32` | | | Bitmask for all modes that a user can select | +| failure_detector_status | `uint16` | | | +| hil_state | `uint8` | | | +| vehicle_type | `uint8` | | | +| failsafe | `bool` | | | true if system is in failsafe state (e.g.:RTL, Hover, Terminate, ...) | +| failsafe_and_user_took_over | `bool` | | | true if system is in failsafe state but the user took over control | +| failsafe_defer_state | `uint8` | | | one of FAILSAFE*DEFER_STATE*\* | +| gcs_connection_lost | `bool` | | | datalink to GCS lost | +| gcs_connection_lost_counter | `uint8` | | | counts unique GCS connection lost events | +| high_latency_data_link_lost | `bool` | | | Set to true if the high latency data link (eg. RockBlock Iridium 9603 telemetry module) is lost | +| is_vtol | `bool` | | | True if the system is VTOL capable | +| is_vtol_tailsitter | `bool` | | | True if the system performs a 90° pitch down rotation during transition from MC to FW | +| in_transition_mode | `bool` | | | True if VTOL is doing a transition | +| in_transition_to_fw | `bool` | | | True if VTOL is doing a transition from MC to FW | +| system_type | `uint8` | | | system type, contains mavlink MAV_TYPE | +| system_id | `uint8` | | | system id, contains MAVLink's system ID field | +| component_id | `uint8` | | | subsystem / component id, contains MAVLink's component ID field | +| safety_button_available | `bool` | | | Set to true if a safety button is connected | +| safety_off | `bool` | | | Set to true if safety is off | +| power_input_valid | `bool` | | | set if input power is valid | +| usb_connected | `bool` | | | set to true (never cleared) once telemetry received from usb link | +| open_drone_id_system_present | `bool` | | | +| open_drone_id_system_healthy | `bool` | | | +| parachute_system_present | `bool` | | | +| parachute_system_healthy | `bool` | | | +| traffic_avoidance_system_present | `bool` | | | +| rc_calibration_in_progress | `bool` | | | +| calibration_enabled | `bool` | | | +| pre_flight_checks_pass | `bool` | | | true if all checks necessary to arm pass | + +## Constants + +| Name | Type | Value | Description | +| --------------------------------------------------------------------------------------- | -------- | ----- | ------------------------------------------------ | +| MESSAGE_VERSION | `uint32` | 2 | +| ARMING_STATE_DISARMED | `uint8` | 1 | +| ARMING_STATE_ARMED | `uint8` | 2 | +| ARM_DISARM_REASON_STICK_GESTURE | `uint8` | 1 | +| ARM_DISARM_REASON_RC_SWITCH | `uint8` | 2 | +| ARM_DISARM_REASON_COMMAND_INTERNAL | `uint8` | 3 | +| ARM_DISARM_REASON_COMMAND_EXTERNAL | `uint8` | 4 | +| ARM_DISARM_REASON_MISSION_START | `uint8` | 5 | +| ARM_DISARM_REASON_LANDING | `uint8` | 6 | +| ARM_DISARM_REASON_PREFLIGHT_INACTION | `uint8` | 7 | +| ARM_DISARM_REASON_KILL_SWITCH | `uint8` | 8 | +| ARM_DISARM_REASON_RC_BUTTON | `uint8` | 13 | +| ARM_DISARM_REASON_FAILSAFE | `uint8` | 14 | +| NAVIGATION_STATE_MANUAL | `uint8` | 0 | Manual mode | +| NAVIGATION_STATE_ALTCTL | `uint8` | 1 | Altitude control mode | +| NAVIGATION_STATE_POSCTL | `uint8` | 2 | Position control mode | +| NAVIGATION_STATE_AUTO_MISSION | `uint8` | 3 | Auto mission mode | +| NAVIGATION_STATE_AUTO_LOITER | `uint8` | 4 | Auto loiter mode | +| NAVIGATION_STATE_AUTO_RTL | `uint8` | 5 | Auto return to launch mode | +| NAVIGATION_STATE_POSITION_SLOW | `uint8` | 6 | +| NAVIGATION_STATE_FREE5 | `uint8` | 7 | +| NAVIGATION_STATE_ALTITUDE_CRUISE | `uint8` | 8 | Altitude with Cruise mode | +| NAVIGATION_STATE_FREE3 | `uint8` | 9 | +| NAVIGATION_STATE_ACRO | `uint8` | 10 | Acro mode | +| NAVIGATION_STATE_FREE2 | `uint8` | 11 | +| NAVIGATION_STATE_DESCEND | `uint8` | 12 | Descend mode (no position control) | +| NAVIGATION_STATE_TERMINATION | `uint8` | 13 | Termination mode | +| NAVIGATION_STATE_OFFBOARD | `uint8` | 14 | +| NAVIGATION_STATE_STAB | `uint8` | 15 | Stabilized mode | +| NAVIGATION_STATE_FREE1 | `uint8` | 16 | +| NAVIGATION_STATE_AUTO_TAKEOFF | `uint8` | 17 | Takeoff | +| NAVIGATION_STATE_AUTO_LAND | `uint8` | 18 | Land | +| NAVIGATION_STATE_AUTO_FOLLOW_TARGET | `uint8` | 19 | Auto Follow | +| NAVIGATION_STATE_AUTO_PRECLAND | `uint8` | 20 | Precision land with landing target | +| NAVIGATION_STATE_ORBIT | `uint8` | 21 | Orbit in a circle | +| NAVIGATION_STATE_AUTO_VTOL_TAKEOFF | `uint8` | 22 | Takeoff, transition, establish loiter | +| NAVIGATION_STATE_EXTERNAL1 | `uint8` | 23 | +| NAVIGATION_STATE_EXTERNAL2 | `uint8` | 24 | +| NAVIGATION_STATE_EXTERNAL3 | `uint8` | 25 | +| NAVIGATION_STATE_EXTERNAL4 | `uint8` | 26 | +| NAVIGATION_STATE_EXTERNAL5 | `uint8` | 27 | +| NAVIGATION_STATE_EXTERNAL6 | `uint8` | 28 | +| NAVIGATION_STATE_EXTERNAL7 | `uint8` | 29 | +| NAVIGATION_STATE_EXTERNAL8 | `uint8` | 30 | +| NAVIGATION_STATE_MAX | `uint8` | 31 | +| FAILURE_NONE | `uint16` | 0 | +| FAILURE_ROLL | `uint16` | 1 | (1 << 0) | +| FAILURE_PITCH | `uint16` | 2 | (1 << 1) | +| FAILURE_ALT | `uint16` | 4 | (1 << 2) | +| FAILURE_EXT | `uint16` | 8 | (1 << 3) | +| FAILURE_ARM_ESC | `uint16` | 16 | (1 << 4) | +| FAILURE_BATTERY | `uint16` | 32 | (1 << 5) | +| FAILURE_IMBALANCED_PROP | `uint16` | 64 | (1 << 6) | +| FAILURE_MOTOR | `uint16` | 128 | (1 << 7) | +| HIL_STATE_OFF | `uint8` | 0 | +| HIL_STATE_ON | `uint8` | 1 | +| VEHICLE_TYPE_UNSPECIFIED | `uint8` | 0 | +| VEHICLE_TYPE_ROTARY_WING | `uint8` | 1 | +| VEHICLE_TYPE_FIXED_WING | `uint8` | 2 | +| VEHICLE_TYPE_ROVER | `uint8` | 3 | +| FAILSAFE_DEFER_STATE_DISABLED | `uint8` | 0 | +| FAILSAFE_DEFER_STATE_ENABLED | `uint8` | 1 | +| FAILSAFE_DEFER_STATE_WOULD_FAILSAFE | `uint8` | 2 | Failsafes deferred, but would trigger a failsafe | + +## Source Message + +[Source file (GitHub)](https://github.com/PX4/PX4-Autopilot/blob/main/msg/px4_msgs_old/msg/VehicleStatusV2.msg) + +::: details Click here to see original file + +```c +# Encodes the system state of the vehicle published by commander + +uint32 MESSAGE_VERSION = 2 + +uint64 timestamp # time since system start (microseconds) + +uint64 armed_time # Arming timestamp (microseconds) +uint64 takeoff_time # Takeoff timestamp (microseconds) + +uint8 arming_state +uint8 ARMING_STATE_DISARMED = 1 +uint8 ARMING_STATE_ARMED = 2 + +uint8 latest_arming_reason +uint8 latest_disarming_reason +uint8 ARM_DISARM_REASON_STICK_GESTURE = 1 +uint8 ARM_DISARM_REASON_RC_SWITCH = 2 +uint8 ARM_DISARM_REASON_COMMAND_INTERNAL = 3 +uint8 ARM_DISARM_REASON_COMMAND_EXTERNAL = 4 +uint8 ARM_DISARM_REASON_MISSION_START = 5 +uint8 ARM_DISARM_REASON_LANDING = 6 +uint8 ARM_DISARM_REASON_PREFLIGHT_INACTION = 7 +uint8 ARM_DISARM_REASON_KILL_SWITCH = 8 +uint8 ARM_DISARM_REASON_RC_BUTTON = 13 +uint8 ARM_DISARM_REASON_FAILSAFE = 14 + +uint64 nav_state_timestamp # time when current nav_state activated + +uint8 nav_state_user_intention # Mode that the user selected (might be different from nav_state in a failsafe situation) + +uint8 nav_state # Currently active mode +uint8 NAVIGATION_STATE_MANUAL = 0 # Manual mode +uint8 NAVIGATION_STATE_ALTCTL = 1 # Altitude control mode +uint8 NAVIGATION_STATE_POSCTL = 2 # Position control mode +uint8 NAVIGATION_STATE_AUTO_MISSION = 3 # Auto mission mode +uint8 NAVIGATION_STATE_AUTO_LOITER = 4 # Auto loiter mode +uint8 NAVIGATION_STATE_AUTO_RTL = 5 # Auto return to launch mode +uint8 NAVIGATION_STATE_POSITION_SLOW = 6 +uint8 NAVIGATION_STATE_FREE5 = 7 +uint8 NAVIGATION_STATE_ALTITUDE_CRUISE = 8 # Altitude with Cruise mode +uint8 NAVIGATION_STATE_FREE3 = 9 +uint8 NAVIGATION_STATE_ACRO = 10 # Acro mode +uint8 NAVIGATION_STATE_FREE2 = 11 +uint8 NAVIGATION_STATE_DESCEND = 12 # Descend mode (no position control) +uint8 NAVIGATION_STATE_TERMINATION = 13 # Termination mode +uint8 NAVIGATION_STATE_OFFBOARD = 14 +uint8 NAVIGATION_STATE_STAB = 15 # Stabilized mode +uint8 NAVIGATION_STATE_FREE1 = 16 +uint8 NAVIGATION_STATE_AUTO_TAKEOFF = 17 # Takeoff +uint8 NAVIGATION_STATE_AUTO_LAND = 18 # Land +uint8 NAVIGATION_STATE_AUTO_FOLLOW_TARGET = 19 # Auto Follow +uint8 NAVIGATION_STATE_AUTO_PRECLAND = 20 # Precision land with landing target +uint8 NAVIGATION_STATE_ORBIT = 21 # Orbit in a circle +uint8 NAVIGATION_STATE_AUTO_VTOL_TAKEOFF = 22 # Takeoff, transition, establish loiter +uint8 NAVIGATION_STATE_EXTERNAL1 = 23 +uint8 NAVIGATION_STATE_EXTERNAL2 = 24 +uint8 NAVIGATION_STATE_EXTERNAL3 = 25 +uint8 NAVIGATION_STATE_EXTERNAL4 = 26 +uint8 NAVIGATION_STATE_EXTERNAL5 = 27 +uint8 NAVIGATION_STATE_EXTERNAL6 = 28 +uint8 NAVIGATION_STATE_EXTERNAL7 = 29 +uint8 NAVIGATION_STATE_EXTERNAL8 = 30 +uint8 NAVIGATION_STATE_MAX = 31 + +uint8 executor_in_charge # Current mode executor in charge (0=Autopilot) +uint8 nav_state_display # User-visible nav state sent via MAVLink (executor state if active, otherwise nav_state) + +uint32 valid_nav_states_mask # Bitmask for all valid nav_state values +uint32 can_set_nav_states_mask # Bitmask for all modes that a user can select + +# Bitmask of detected failures +uint16 failure_detector_status +uint16 FAILURE_NONE = 0 +uint16 FAILURE_ROLL = 1 # (1 << 0) +uint16 FAILURE_PITCH = 2 # (1 << 1) +uint16 FAILURE_ALT = 4 # (1 << 2) +uint16 FAILURE_EXT = 8 # (1 << 3) +uint16 FAILURE_ARM_ESC = 16 # (1 << 4) +uint16 FAILURE_BATTERY = 32 # (1 << 5) +uint16 FAILURE_IMBALANCED_PROP = 64 # (1 << 6) +uint16 FAILURE_MOTOR = 128 # (1 << 7) + +uint8 hil_state +uint8 HIL_STATE_OFF = 0 +uint8 HIL_STATE_ON = 1 + +# Current vehicle locomotion method. A vehicle can have different methods (e.g. VTOL transitions from RW to FW method) +uint8 vehicle_type +uint8 VEHICLE_TYPE_UNSPECIFIED = 0 +uint8 VEHICLE_TYPE_ROTARY_WING = 1 +uint8 VEHICLE_TYPE_FIXED_WING = 2 +uint8 VEHICLE_TYPE_ROVER = 3 + +uint8 FAILSAFE_DEFER_STATE_DISABLED = 0 +uint8 FAILSAFE_DEFER_STATE_ENABLED = 1 +uint8 FAILSAFE_DEFER_STATE_WOULD_FAILSAFE = 2 # Failsafes deferred, but would trigger a failsafe + +bool failsafe # true if system is in failsafe state (e.g.:RTL, Hover, Terminate, ...) +bool failsafe_and_user_took_over # true if system is in failsafe state but the user took over control +uint8 failsafe_defer_state # one of FAILSAFE_DEFER_STATE_* + +# Link loss +bool gcs_connection_lost # datalink to GCS lost +uint8 gcs_connection_lost_counter # counts unique GCS connection lost events +bool high_latency_data_link_lost # Set to true if the high latency data link (eg. RockBlock Iridium 9603 telemetry module) is lost + +# VTOL flags +bool is_vtol # True if the system is VTOL capable +bool is_vtol_tailsitter # True if the system performs a 90° pitch down rotation during transition from MC to FW +bool in_transition_mode # True if VTOL is doing a transition +bool in_transition_to_fw # True if VTOL is doing a transition from MC to FW + +# MAVLink identification +uint8 system_type # system type, contains mavlink MAV_TYPE +uint8 system_id # system id, contains MAVLink's system ID field +uint8 component_id # subsystem / component id, contains MAVLink's component ID field + +bool safety_button_available # Set to true if a safety button is connected +bool safety_off # Set to true if safety is off + +bool power_input_valid # set if input power is valid +bool usb_connected # set to true (never cleared) once telemetry received from usb link + +bool open_drone_id_system_present +bool open_drone_id_system_healthy + +bool parachute_system_present +bool parachute_system_healthy + +bool traffic_avoidance_system_present + +bool rc_calibration_in_progress +bool calibration_enabled + +bool pre_flight_checks_pass # true if all checks necessary to arm pass +``` + +::: diff --git a/docs/en/msg_docs/VehicleStatusV3.md b/docs/en/msg_docs/VehicleStatusV3.md new file mode 100644 index 0000000000..9be48b41cb --- /dev/null +++ b/docs/en/msg_docs/VehicleStatusV3.md @@ -0,0 +1,247 @@ +--- +pageClass: is-wide-page +--- + +# VehicleStatusV3 (UORB message) + +Encodes the system state of the vehicle published by commander. + +**TOPICS:** vehicle_status_v3 + +## Fields + +| Name | Type | Unit [Frame] | Range/Enum | Description | +| -------------------------------- | -------- | ------------ | ---------- | ----------------------------------------------------------------------------------------------- | +| timestamp | `uint64` | | | time since system start (microseconds) | +| armed_time | `uint64` | | | Arming timestamp (microseconds) | +| takeoff_time | `uint64` | | | Takeoff timestamp (microseconds) | +| arming_state | `uint8` | | | +| latest_arming_reason | `uint8` | | | +| latest_disarming_reason | `uint8` | | | +| nav_state_timestamp | `uint64` | | | time when current nav_state activated | +| nav_state_user_intention | `uint8` | | | Mode that the user selected (might be different from nav_state in a failsafe situation) | +| nav_state | `uint8` | | | Currently active mode | +| executor_in_charge | `uint8` | | | Current mode executor in charge (0=Autopilot) | +| nav_state_display | `uint8` | | | User-visible nav state sent via MAVLink (executor state if active, otherwise nav_state) | +| valid_nav_states_mask | `uint32` | | | Bitmask for all valid nav_state values | +| can_set_nav_states_mask | `uint32` | | | Bitmask for all modes that a user can select | +| hil_state | `uint8` | | | +| vehicle_type | `uint8` | | | +| failsafe | `bool` | | | true if system is in failsafe state (e.g.:RTL, Hover, Terminate, ...) | +| failsafe_and_user_took_over | `bool` | | | true if system is in failsafe state but the user took over control | +| failsafe_defer_state | `uint8` | | | one of FAILSAFE*DEFER_STATE*\* | +| gcs_connection_lost | `bool` | | | datalink to GCS lost | +| gcs_connection_lost_counter | `uint8` | | | counts unique GCS connection lost events | +| high_latency_data_link_lost | `bool` | | | Set to true if the high latency data link (eg. RockBlock Iridium 9603 telemetry module) is lost | +| is_vtol | `bool` | | | True if the system is VTOL capable | +| is_vtol_tailsitter | `bool` | | | True if the system performs a 90° pitch down rotation during transition from MC to FW | +| in_transition_mode | `bool` | | | True if VTOL is doing a transition | +| in_transition_to_fw | `bool` | | | True if VTOL is doing a transition from MC to FW | +| system_type | `uint8` | | | system type, contains mavlink MAV_TYPE | +| system_id | `uint8` | | | system id, contains MAVLink's system ID field | +| component_id | `uint8` | | | subsystem / component id, contains MAVLink's component ID field | +| safety_button_available | `bool` | | | Set to true if a safety button is connected | +| safety_off | `bool` | | | Set to true if safety is off | +| power_input_valid | `bool` | | | set if input power is valid | +| usb_connected | `bool` | | | set to true (never cleared) once telemetry received from usb link | +| open_drone_id_system_present | `bool` | | | +| open_drone_id_system_healthy | `bool` | | | +| parachute_system_present | `bool` | | | +| parachute_system_healthy | `bool` | | | +| traffic_avoidance_system_present | `bool` | | | +| rc_calibration_in_progress | `bool` | | | +| calibration_enabled | `bool` | | | +| pre_flight_checks_pass | `bool` | | | true if all checks necessary to arm pass | + +## Constants + +| Name | Type | Value | Description | +| --------------------------------------------------------------------------------------- | -------- | ----- | ------------------------------------------------ | +| MESSAGE_VERSION | `uint32` | 3 | +| ARMING_STATE_DISARMED | `uint8` | 1 | +| ARMING_STATE_ARMED | `uint8` | 2 | +| ARM_DISARM_REASON_STICK_GESTURE | `uint8` | 1 | +| ARM_DISARM_REASON_RC_SWITCH | `uint8` | 2 | +| ARM_DISARM_REASON_COMMAND_INTERNAL | `uint8` | 3 | +| ARM_DISARM_REASON_COMMAND_EXTERNAL | `uint8` | 4 | +| ARM_DISARM_REASON_MISSION_START | `uint8` | 5 | +| ARM_DISARM_REASON_LANDING | `uint8` | 6 | +| ARM_DISARM_REASON_PREFLIGHT_INACTION | `uint8` | 7 | +| ARM_DISARM_REASON_KILL_SWITCH | `uint8` | 8 | +| ARM_DISARM_REASON_RC_BUTTON | `uint8` | 13 | +| ARM_DISARM_REASON_FAILSAFE | `uint8` | 14 | +| NAVIGATION_STATE_MANUAL | `uint8` | 0 | Manual mode | +| NAVIGATION_STATE_ALTCTL | `uint8` | 1 | Altitude control mode | +| NAVIGATION_STATE_POSCTL | `uint8` | 2 | Position control mode | +| NAVIGATION_STATE_AUTO_MISSION | `uint8` | 3 | Auto mission mode | +| NAVIGATION_STATE_AUTO_LOITER | `uint8` | 4 | Auto loiter mode | +| NAVIGATION_STATE_AUTO_RTL | `uint8` | 5 | Auto return to launch mode | +| NAVIGATION_STATE_POSITION_SLOW | `uint8` | 6 | +| NAVIGATION_STATE_FREE5 | `uint8` | 7 | +| NAVIGATION_STATE_ALTITUDE_CRUISE | `uint8` | 8 | Altitude with Cruise mode | +| NAVIGATION_STATE_FREE3 | `uint8` | 9 | +| NAVIGATION_STATE_ACRO | `uint8` | 10 | Acro mode | +| NAVIGATION_STATE_FREE2 | `uint8` | 11 | +| NAVIGATION_STATE_DESCEND | `uint8` | 12 | Descend mode (no position control) | +| NAVIGATION_STATE_TERMINATION | `uint8` | 13 | Termination mode | +| NAVIGATION_STATE_OFFBOARD | `uint8` | 14 | +| NAVIGATION_STATE_STAB | `uint8` | 15 | Stabilized mode | +| NAVIGATION_STATE_FREE1 | `uint8` | 16 | +| NAVIGATION_STATE_AUTO_TAKEOFF | `uint8` | 17 | Takeoff | +| NAVIGATION_STATE_AUTO_LAND | `uint8` | 18 | Land | +| NAVIGATION_STATE_AUTO_FOLLOW_TARGET | `uint8` | 19 | Auto Follow | +| NAVIGATION_STATE_AUTO_PRECLAND | `uint8` | 20 | Precision land with landing target | +| NAVIGATION_STATE_ORBIT | `uint8` | 21 | Orbit in a circle | +| NAVIGATION_STATE_AUTO_VTOL_TAKEOFF | `uint8` | 22 | Takeoff, transition, establish loiter | +| NAVIGATION_STATE_EXTERNAL1 | `uint8` | 23 | +| NAVIGATION_STATE_EXTERNAL2 | `uint8` | 24 | +| NAVIGATION_STATE_EXTERNAL3 | `uint8` | 25 | +| NAVIGATION_STATE_EXTERNAL4 | `uint8` | 26 | +| NAVIGATION_STATE_EXTERNAL5 | `uint8` | 27 | +| NAVIGATION_STATE_EXTERNAL6 | `uint8` | 28 | +| NAVIGATION_STATE_EXTERNAL7 | `uint8` | 29 | +| NAVIGATION_STATE_EXTERNAL8 | `uint8` | 30 | +| NAVIGATION_STATE_MAX | `uint8` | 31 | +| HIL_STATE_OFF | `uint8` | 0 | +| HIL_STATE_ON | `uint8` | 1 | +| VEHICLE_TYPE_UNSPECIFIED | `uint8` | 0 | +| VEHICLE_TYPE_ROTARY_WING | `uint8` | 1 | +| VEHICLE_TYPE_FIXED_WING | `uint8` | 2 | +| VEHICLE_TYPE_ROVER | `uint8` | 3 | +| FAILSAFE_DEFER_STATE_DISABLED | `uint8` | 0 | +| FAILSAFE_DEFER_STATE_ENABLED | `uint8` | 1 | +| FAILSAFE_DEFER_STATE_WOULD_FAILSAFE | `uint8` | 2 | Failsafes deferred, but would trigger a failsafe | + +## Source Message + +[Source file (GitHub)](https://github.com/PX4/PX4-Autopilot/blob/main/msg/px4_msgs_old/msg/VehicleStatusV3.msg) + +::: details Click here to see original file + +```c +# Encodes the system state of the vehicle published by commander + +uint32 MESSAGE_VERSION = 3 + +uint64 timestamp # time since system start (microseconds) + +uint64 armed_time # Arming timestamp (microseconds) +uint64 takeoff_time # Takeoff timestamp (microseconds) + +uint8 arming_state +uint8 ARMING_STATE_DISARMED = 1 +uint8 ARMING_STATE_ARMED = 2 + +uint8 latest_arming_reason +uint8 latest_disarming_reason +uint8 ARM_DISARM_REASON_STICK_GESTURE = 1 +uint8 ARM_DISARM_REASON_RC_SWITCH = 2 +uint8 ARM_DISARM_REASON_COMMAND_INTERNAL = 3 +uint8 ARM_DISARM_REASON_COMMAND_EXTERNAL = 4 +uint8 ARM_DISARM_REASON_MISSION_START = 5 +uint8 ARM_DISARM_REASON_LANDING = 6 +uint8 ARM_DISARM_REASON_PREFLIGHT_INACTION = 7 +uint8 ARM_DISARM_REASON_KILL_SWITCH = 8 +uint8 ARM_DISARM_REASON_RC_BUTTON = 13 +uint8 ARM_DISARM_REASON_FAILSAFE = 14 + +uint64 nav_state_timestamp # time when current nav_state activated + +uint8 nav_state_user_intention # Mode that the user selected (might be different from nav_state in a failsafe situation) + +uint8 nav_state # Currently active mode +uint8 NAVIGATION_STATE_MANUAL = 0 # Manual mode +uint8 NAVIGATION_STATE_ALTCTL = 1 # Altitude control mode +uint8 NAVIGATION_STATE_POSCTL = 2 # Position control mode +uint8 NAVIGATION_STATE_AUTO_MISSION = 3 # Auto mission mode +uint8 NAVIGATION_STATE_AUTO_LOITER = 4 # Auto loiter mode +uint8 NAVIGATION_STATE_AUTO_RTL = 5 # Auto return to launch mode +uint8 NAVIGATION_STATE_POSITION_SLOW = 6 +uint8 NAVIGATION_STATE_FREE5 = 7 +uint8 NAVIGATION_STATE_ALTITUDE_CRUISE = 8 # Altitude with Cruise mode +uint8 NAVIGATION_STATE_FREE3 = 9 +uint8 NAVIGATION_STATE_ACRO = 10 # Acro mode +uint8 NAVIGATION_STATE_FREE2 = 11 +uint8 NAVIGATION_STATE_DESCEND = 12 # Descend mode (no position control) +uint8 NAVIGATION_STATE_TERMINATION = 13 # Termination mode +uint8 NAVIGATION_STATE_OFFBOARD = 14 +uint8 NAVIGATION_STATE_STAB = 15 # Stabilized mode +uint8 NAVIGATION_STATE_FREE1 = 16 +uint8 NAVIGATION_STATE_AUTO_TAKEOFF = 17 # Takeoff +uint8 NAVIGATION_STATE_AUTO_LAND = 18 # Land +uint8 NAVIGATION_STATE_AUTO_FOLLOW_TARGET = 19 # Auto Follow +uint8 NAVIGATION_STATE_AUTO_PRECLAND = 20 # Precision land with landing target +uint8 NAVIGATION_STATE_ORBIT = 21 # Orbit in a circle +uint8 NAVIGATION_STATE_AUTO_VTOL_TAKEOFF = 22 # Takeoff, transition, establish loiter +uint8 NAVIGATION_STATE_EXTERNAL1 = 23 +uint8 NAVIGATION_STATE_EXTERNAL2 = 24 +uint8 NAVIGATION_STATE_EXTERNAL3 = 25 +uint8 NAVIGATION_STATE_EXTERNAL4 = 26 +uint8 NAVIGATION_STATE_EXTERNAL5 = 27 +uint8 NAVIGATION_STATE_EXTERNAL6 = 28 +uint8 NAVIGATION_STATE_EXTERNAL7 = 29 +uint8 NAVIGATION_STATE_EXTERNAL8 = 30 +uint8 NAVIGATION_STATE_MAX = 31 + +uint8 executor_in_charge # Current mode executor in charge (0=Autopilot) +uint8 nav_state_display # User-visible nav state sent via MAVLink (executor state if active, otherwise nav_state) + +uint32 valid_nav_states_mask # Bitmask for all valid nav_state values +uint32 can_set_nav_states_mask # Bitmask for all modes that a user can select + +uint8 hil_state +uint8 HIL_STATE_OFF = 0 +uint8 HIL_STATE_ON = 1 + +# Current vehicle locomotion method. A vehicle can have different methods (e.g. VTOL transitions from RW to FW method) +uint8 vehicle_type +uint8 VEHICLE_TYPE_UNSPECIFIED = 0 +uint8 VEHICLE_TYPE_ROTARY_WING = 1 +uint8 VEHICLE_TYPE_FIXED_WING = 2 +uint8 VEHICLE_TYPE_ROVER = 3 + +uint8 FAILSAFE_DEFER_STATE_DISABLED = 0 +uint8 FAILSAFE_DEFER_STATE_ENABLED = 1 +uint8 FAILSAFE_DEFER_STATE_WOULD_FAILSAFE = 2 # Failsafes deferred, but would trigger a failsafe + +bool failsafe # true if system is in failsafe state (e.g.:RTL, Hover, Terminate, ...) +bool failsafe_and_user_took_over # true if system is in failsafe state but the user took over control +uint8 failsafe_defer_state # one of FAILSAFE_DEFER_STATE_* + +# Link loss +bool gcs_connection_lost # datalink to GCS lost +uint8 gcs_connection_lost_counter # counts unique GCS connection lost events +bool high_latency_data_link_lost # Set to true if the high latency data link (eg. RockBlock Iridium 9603 telemetry module) is lost + +# VTOL flags +bool is_vtol # True if the system is VTOL capable +bool is_vtol_tailsitter # True if the system performs a 90° pitch down rotation during transition from MC to FW +bool in_transition_mode # True if VTOL is doing a transition +bool in_transition_to_fw # True if VTOL is doing a transition from MC to FW + +# MAVLink identification +uint8 system_type # system type, contains mavlink MAV_TYPE +uint8 system_id # system id, contains MAVLink's system ID field +uint8 component_id # subsystem / component id, contains MAVLink's component ID field + +bool safety_button_available # Set to true if a safety button is connected +bool safety_off # Set to true if safety is off + +bool power_input_valid # set if input power is valid +bool usb_connected # set to true (never cleared) once telemetry received from usb link + +bool open_drone_id_system_present +bool open_drone_id_system_healthy + +bool parachute_system_present +bool parachute_system_healthy + +bool traffic_avoidance_system_present + +bool rc_calibration_in_progress +bool calibration_enabled + +bool pre_flight_checks_pass # true if all checks necessary to arm pass +``` + +::: diff --git a/docs/en/msg_docs/VtolVehicleStatus.md b/docs/en/msg_docs/VtolVehicleStatus.md index 4e8ce77a48..fb949e1413 100644 --- a/docs/en/msg_docs/VtolVehicleStatus.md +++ b/docs/en/msg_docs/VtolVehicleStatus.md @@ -18,14 +18,14 @@ VEHICLE_VTOL_STATE, should match 1:1 MAVLinks's MAV_VTOL_STATE. ## Constants -| Name | Type | Value | Description | -| --------------------------------------------------------------------------------------- | -------- | ----- | ----------- | -| MESSAGE_VERSION | `uint32` | 0 | -| VEHICLE_VTOL_STATE_UNDEFINED | `uint8` | 0 | -| VEHICLE_VTOL_STATE_TRANSITION_TO_FW | `uint8` | 1 | -| VEHICLE_VTOL_STATE_TRANSITION_TO_MC | `uint8` | 2 | -| VEHICLE_VTOL_STATE_MC | `uint8` | 3 | -| VEHICLE_VTOL_STATE_FW | `uint8` | 4 | +| Name | Type | Value | Description | +| ------------------------------------------------------------------------------------- | -------- | ----- | ----------- | +| MESSAGE_VERSION | `uint32` | 0 | +| VEHICLE_VTOL_STATE_UNDEFINED | `uint8` | 0 | +| VEHICLE_VTOL_STATE_TRANSITION_TO_FW | `uint8` | 1 | +| VEHICLE_VTOL_STATE_TRANSITION_TO_MC | `uint8` | 2 | +| VEHICLE_VTOL_STATE_MC | `uint8` | 3 | +| VEHICLE_VTOL_STATE_FW | `uint8` | 4 | ## Source Message diff --git a/docs/en/msg_docs/Vtx.md b/docs/en/msg_docs/Vtx.md index 7cf2657bf0..855d464767 100644 --- a/docs/en/msg_docs/Vtx.md +++ b/docs/en/msg_docs/Vtx.md @@ -24,20 +24,20 @@ pageClass: is-wide-page ## Constants -| Name | Type | Value | Description | -| ------------------------------------------------------------------- | ------- | ----- | ----------------------------------------- | -| BAND_NAME_LENGTH | `uint8` | 12 | -| POWER_LABEL_LENGTH | `uint8` | 4 | -| PROTOCOL_NONE | `uint8` | 0 | No protocol is detected, usually an error | -| PROTOCOL_SMART_AUDIO_V1 | `uint8` | 10 | -| PROTOCOL_SMART_AUDIO_V2 | `uint8` | 20 | -| PROTOCOL_SMART_AUDIO_V2_1 | `uint8` | 21 | -| PROTOCOL_TRAMP | `uint8` | 100 | -| DEVICE_UNKNOWN | `uint8` | 0 | -| DEVICE_PEAK_THOR_T67 | `uint8` | 20 | -| DEVICE_RUSH_MAX_SOLO | `uint8` | 40 | -| MODE_NORMAL | `uint8` | 0 | -| MODE_PIT | `uint8` | 1 | +| Name | Type | Value | Description | +| ----------------------------------------------------------------- | ------- | ----- | ----------------------------------------- | +| BAND_NAME_LENGTH | `uint8` | 12 | +| POWER_LABEL_LENGTH | `uint8` | 4 | +| PROTOCOL_NONE | `uint8` | 0 | No protocol is detected, usually an error | +| PROTOCOL_SMART_AUDIO_V1 | `uint8` | 10 | +| PROTOCOL_SMART_AUDIO_V2 | `uint8` | 20 | +| PROTOCOL_SMART_AUDIO_V2_1 | `uint8` | 21 | +| PROTOCOL_TRAMP | `uint8` | 100 | +| DEVICE_UNKNOWN | `uint8` | 0 | +| DEVICE_PEAK_THOR_T67 | `uint8` | 20 | +| DEVICE_RUSH_MAX_SOLO | `uint8` | 40 | +| MODE_NORMAL | `uint8` | 0 | +| MODE_PIT | `uint8` | 1 | ## Source Message diff --git a/docs/en/msg_docs/Wind.md b/docs/en/msg_docs/Wind.md index c30a092752..67f3f76211 100644 --- a/docs/en/msg_docs/Wind.md +++ b/docs/en/msg_docs/Wind.md @@ -28,9 +28,9 @@ Published by the navigation filter (EKF2) for use by other flight modules and li ## Constants -| Name | Type | Value | Description | -| ----------------------------------------------- | -------- | ----- | ----------- | -| MESSAGE_VERSION | `uint32` | 0 | +| Name | Type | Value | Description | +| --------------------------------------------- | -------- | ----- | ----------- | +| MESSAGE_VERSION | `uint32` | 0 | ## Source Message diff --git a/docs/en/msg_docs/index.md b/docs/en/msg_docs/index.md index e0129b2216..098dc2226a 100644 --- a/docs/en/msg_docs/index.md +++ b/docs/en/msg_docs/index.md @@ -22,12 +22,12 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m - [BatteryStatus](BatteryStatus.md) — Battery status. - [ConfigOverrides](ConfigOverrides.md) — Configurable overrides by (external) modes or mode executors. - [Event](Event.md) — Events interface. -- [FixedWingLateralSetpoint](FixedWingLateralSetpoint.md) — Fixed Wing Lateral Setpoint message. Used by the fw_lateral_longitudinal_control module. At least one of course, airspeed_direction, or lateral_acceleration must be finite. -- [FixedWingLongitudinalSetpoint](FixedWingLongitudinalSetpoint.md) — Fixed Wing Longitudinal Setpoint message. Used by the fw_lateral_longitudinal_control module. If pitch_direct and throttle_direct are not both finite, then the controller relies on altitude/height_rate and equivalent_airspeed to control vertical motion. If both altitude and height_rate are NAN, the controller maintains the current altitude. -- [GotoSetpoint](GotoSetpoint.md) — Position and (optional) heading setpoints with corresponding speed constraints. Setpoints are intended as inputs to position and heading smoothers, respectively. Setpoints do not need to be kinematically consistent. Optional heading setpoints may be specified as controlled by the respective flag. Unset optional setpoints are not controlled. Unset optional constraints default to vehicle specifications. +- [FixedWingLateralSetpoint](FixedWingLateralSetpoint.md) — Fixed Wing Lateral Setpoint message. +- [FixedWingLongitudinalSetpoint](FixedWingLongitudinalSetpoint.md) — Fixed Wing Longitudinal Setpoint message. +- [GotoSetpoint](GotoSetpoint.md) — Position and (optional) heading setpoints with corresponding speed constraints. - [HomePosition](HomePosition.md) — GPS home position in WGS84 coordinates. -- [LateralControlConfiguration](LateralControlConfiguration.md) — Fixed Wing Lateral Control Configuration message. Used by the fw_lateral_longitudinal_control module to constrain FixedWingLateralSetpoint messages. -- [LongitudinalControlConfiguration](LongitudinalControlConfiguration.md) — Fixed Wing Longitudinal Control Configuration message. Used by the fw_lateral_longitudinal_control module and TECS to constrain FixedWingLongitudinalSetpoint messages. and configure the resultant setpoints. +- [LateralControlConfiguration](LateralControlConfiguration.md) — Fixed Wing Lateral Control Configuration message. +- [LongitudinalControlConfiguration](LongitudinalControlConfiguration.md) — Fixed Wing Longitudinal Control Configuration message. - [ManualControlSetpoint](ManualControlSetpoint.md) - [ModeCompleted](ModeCompleted.md) — Mode completion result, published by an active mode. The possible values of nav_state are defined in the VehicleStatus msg. Note that this is not always published (e.g. when a user switches modes or on. failsafe activation). - [RaptorInput](RaptorInput.md) — Raptor Input. @@ -40,7 +40,7 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m - [VehicleAttitude](VehicleAttitude.md) — This is similar to the mavlink message ATTITUDE_QUATERNION, but for onboard use. The quaternion uses the Hamilton convention, and the order is q(w, x, y, z). - [VehicleAttitudeSetpoint](VehicleAttitudeSetpoint.md) - [VehicleCommand](VehicleCommand.md) — Vehicle Command uORB message. Used for commanding a mission / action / etc. Follows the MAVLink COMMAND_INT / COMMAND_LONG definition. -- [VehicleCommandAck](VehicleCommandAck.md) — Vehicle Command Ackonwledgement uORB message. Used for acknowledging the vehicle command being received. Follows the MAVLink COMMAND_ACK message definition. +- [VehicleCommandAck](VehicleCommandAck.md) — Vehicle Command Acknowledgement uORB message. - [VehicleControlMode](VehicleControlMode.md) - [VehicleGlobalPosition](VehicleGlobalPosition.md) — Fused global position in WGS84. This struct contains global position estimation. It is not the raw GPS. measurement (@see vehicle_gps_position). This topic is usually published by the position. estimator, which will take more sources of information into account than just GPS,. e.g. control inputs of the vehicle in a Kalman-filter implementation. - [VehicleLandDetected](VehicleLandDetected.md) @@ -85,6 +85,8 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m - [DistanceSensorModeChangeRequest](DistanceSensorModeChangeRequest.md) - [DronecanNodeStatus](DronecanNodeStatus.md) - [Ekf2Timestamps](Ekf2Timestamps.md) — this message contains the (relative) timestamps of the sensor inputs used by EKF2. It can be used for reproducible replay. +- [EscEepromRead](EscEepromRead.md) +- [EscEepromWrite](EscEepromWrite.md) - [EscReport](EscReport.md) - [EscStatus](EscStatus.md) - [EstimatorAidSource1d](EstimatorAidSource1d.md) @@ -93,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) @@ -170,7 +173,7 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m - [OrbTest](OrbTest.md) - [OrbTestLarge](OrbTestLarge.md) - [OrbTestMedium](OrbTestMedium.md) -- [OrbitStatus](OrbitStatus.md) — ORBIT_YAW_BEHAVIOUR. +- [OrbitStatus](OrbitStatus.md) — Orbit status. - [ParameterResetRequest](ParameterResetRequest.md) — ParameterResetRequest : Used by the primary to reset one or all parameter value(s) on the remote. - [ParameterSetUsedRequest](ParameterSetUsedRequest.md) — ParameterSetUsedRequest : Used by a remote to update the used flag for a parameter on the primary. - [ParameterSetValueRequest](ParameterSetValueRequest.md) — ParameterSetValueRequest : Used by a remote or primary to update the value for a parameter at the other end. @@ -190,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) @@ -267,8 +271,12 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m - [HomePositionV0](HomePositionV0.md) — GPS home position in WGS84 coordinates. - [RegisterExtComponentReplyV0](RegisterExtComponentReplyV0.md) - [RegisterExtComponentRequestV0](RegisterExtComponentRequestV0.md) — Request to register an external component. +- [RegisterExtComponentRequestV1](RegisterExtComponentRequestV1.md) — Request to register an external component. - [VehicleAttitudeSetpointV0](VehicleAttitudeSetpointV0.md) +- [VehicleCommandAckV0](VehicleCommandAckV0.md) — Vehicle Command Ackonwledgement uORB message. Used for acknowledging the vehicle command being received. Follows the MAVLink COMMAND_ACK message definition. - [VehicleGlobalPositionV0](VehicleGlobalPositionV0.md) — Fused global position in WGS84. This struct contains global position estimation. It is not the raw GPS. measurement (@see vehicle_gps_position). This topic is usually published by the position. estimator, which will take more sources of information into account than just GPS,. e.g. control inputs of the vehicle in a Kalman-filter implementation. - [VehicleLocalPositionV0](VehicleLocalPositionV0.md) — Fused local position in NED. The coordinate system origin is the vehicle position at the time when the EKF2-module was started. - [VehicleStatusV0](VehicleStatusV0.md) — Encodes the system state of the vehicle published by commander. - [VehicleStatusV1](VehicleStatusV1.md) — Encodes the system state of the vehicle published by commander. +- [VehicleStatusV2](VehicleStatusV2.md) — Encodes the system state of the vehicle published by commander. +- [VehicleStatusV3](VehicleStatusV3.md) — Encodes the system state of the vehicle published by commander. diff --git a/docs/en/neural_networks/mc_neural_network_control.md b/docs/en/neural_networks/mc_neural_network_control.md index 0c1cc83b57..8f4c21e3b0 100644 --- a/docs/en/neural_networks/mc_neural_network_control.md +++ b/docs/en/neural_networks/mc_neural_network_control.md @@ -17,7 +17,7 @@ Note that after training the network you will need to update and rebuild PX4. TLFM is a mature inference library intended for use on embedded devices. It has support for several architectures, so there is a high likelihood that you can build it for the board you want to use. -If not, there are other possible NN frameworks, such as [Eigen](https://eigen.tuxfamily.org/index.php?title=Main_Page) and [Executorch](https://pytorch.org/executorch-overview). +If not, there are other possible NN frameworks, such as [Eigen](https://eigen.tuxfamily.org/index.php?title=Main_Page) and [Executorch](https://docs.pytorch.org/executorch/stable/intro-overview.html). This document explains how you can include the module in your PX4 build, and provides a broad overview of how it works. The other documents in the section provide more information about the integration, allowing you to replace the NN with a version trained on different data, or even to replace the TLFM library altogether. diff --git a/docs/en/neural_networks/nn_module_utilities.md b/docs/en/neural_networks/nn_module_utilities.md index b1df217ded..cf6e29d5d2 100644 --- a/docs/en/neural_networks/nn_module_utilities.md +++ b/docs/en/neural_networks/nn_module_utilities.md @@ -41,7 +41,7 @@ This only works for some flight controllers, so you might have to use an RC cont This specifies what you want to create, you can read more about this in the [Control Interface](../ros2/px4_ros2_control_interface.md). In this case we register an arming check and a mode. 2. Wait for a [RegisterExtComponentReply](../msg_docs/RegisterExtComponentReply.md). - This will give feedback on wether the mode registration was successful, and what the mode and arming check id is for the new mode. + This will give feedback on whether the mode registration was successful, and what the mode and arming check id is for the new mode. 3. [Optional] With the mode id, publish a [VehicleControlMode](../msg_docs/VehicleControlMode.md) message on the `config_control_setpoints` topic. Here you can configure what other modules run in parallel. The example controller replaces everything, so it turns off allocation. @@ -71,7 +71,7 @@ For these messages to be saved in your logs you need to include `debug` in the [ The module has two includes for measuring the inference times. The first one is a driver that works on the actual flight controller units, but a second one, `chrono`, is loaded for SITL testing. -Which timing library is included and used is based on wether PX4 is built with NUTTX or not. +Which timing library is included and used is based on whether PX4 is built with NUTTX or not. ## Changing the setpoint diff --git a/docs/en/neural_networks/raptor.md b/docs/en/neural_networks/raptor.md index c82b78ad6c..d8ab4ee98b 100644 --- a/docs/en/neural_networks/raptor.md +++ b/docs/en/neural_networks/raptor.md @@ -1,6 +1,6 @@ # RAPTOR: A Neural Network Module for Adaptive Quadrotor Control - + ::: warning This is an experimental module. diff --git a/docs/en/payloads/generic_actuator_control.md b/docs/en/payloads/generic_actuator_control.md index 82bd1f4df9..305dc52cc2 100644 --- a/docs/en/payloads/generic_actuator_control.md +++ b/docs/en/payloads/generic_actuator_control.md @@ -66,7 +66,7 @@ To use a generic actuator in a mission: ## MAVSDK (Example script) -The following [MAVSDK](https://mavsdk.mavlink.io/main/en/index.html) [example code](https://github.com/mavlink/MAVSDK/blob/main/examples/set_actuator/set_actuator.cpp) shows how to trigger payload release using the MAVSDK Action plugin's [`set_actuator()`](https://mavsdk.mavlink.io/main/en/cpp/api_reference/classmavsdk_1_1_action.html#classmavsdk_1_1_action_1ad30beac27f05c62dcf6a3d0928b86e4c) method. +The following [MAVSDK](https://mavsdk.mavlink.io/main/en/index.html) [example code](https://github.com/mavlink/MAVSDK/blob/main/cpp/examples/set_actuator/set_actuator.cpp) shows how to trigger payload release using the MAVSDK Action plugin's [`set_actuator()`](https://mavsdk.mavlink.io/main/en/cpp/api_reference/classmavsdk_1_1_action.html#classmavsdk_1_1_action_1ad30beac27f05c62dcf6a3d0928b86e4c) method. The `set_actuator()` index values map to the MAVLink payload outputs defined for your airframe. diff --git a/docs/en/peripherals/adsb_flarm.md b/docs/en/peripherals/adsb_flarm.md index 9cf011bf39..71364f1d4b 100644 --- a/docs/en/peripherals/adsb_flarm.md +++ b/docs/en/peripherals/adsb_flarm.md @@ -1,6 +1,6 @@ # ADS-B/FLARM/UTM Receivers: Air Traffic Avoidance -PX4 supports simple air traffic avoidance in [missions](../flying/missions.md) using [ADS-B](https://en.wikipedia.org/wiki/Automatic_dependent_surveillance_%E2%80%93_broadcast), [FLARM](https://en.wikipedia.org/wiki/FLARM), or [UTM](https://www.faa.gov/uas/research_development/traffic_management) transponders that use the standard MAVLink interfaces. +PX4 supports simple air traffic avoidance in [missions](../flying/missions.md) using [ADS-B](https://en.wikipedia.org/wiki/Automatic_dependent_surveillance_%E2%80%93_broadcast), [FLARM](https://en.wikipedia.org/wiki/FLARM), or [UTM](https://www.faa.gov/uas/advanced_operations/traffic_management) transponders that use the standard MAVLink interfaces. If a potential collision is detected, PX4 can _warn_, immediately [land](../flight_modes_mc/land.md), or [return](../flight_modes_mc/return.md) (depending on the value of [NAV_TRAFF_AVOID](#NAV_TRAFF_AVOID)). @@ -18,7 +18,7 @@ It has been tested with the following devices: Any of the devices can be connected to any free/unused serial port on the flight controller. Most commonly they are connected to `TELEM2` (if this is not being use for some other purpose). -### PingRX +### PingRX Pro The PingRX MAVLink port uses a JST ZHR-4 mating connector with pinout as shown below. @@ -29,9 +29,17 @@ The PingRX MAVLink port uses a JST ZHR-4 mating connector with pinout as shown b | 3 (blk) | Power | +4 to 6V | | 4 (blk) | GND | GND | -The PingRX comes with connector cable that can be attached directly to the TELEM2 port (DF13-6P) on an [mRo Pixhawk](../flight_controller/mro_pixhawk.md). +The PingRX comes with connector cable that can be attached directly to the `TELEM2` port (DF13-6P) on an [mRo Pixhawk](../flight_controller/mro_pixhawk.md). For other ports or boards, you will need to obtain your own cable. +The recommended port configuration for this receiver is: + +| Parameter | Recommended Value | +| ---------------------------------------------------------------------------- | ----------------- | +| [MAV_X_CONFIG](../advanced_config/parameter_reference.md#MAV_1_CONFIG) | `TELEM 2` | +| [MAV_X_MODE](../advanced_config/parameter_reference.md#MAV_1_MODE) | uAvionix | +| [MAV_X_RADIO_CTL](../advanced_config/parameter_reference.md#MAV_1_RADIO_CTL) | Disabled | + ## FLARM FLARM has an on-board DF-13 6 Pin connector that has an identical pinout to the [mRo Pixhawk](../flight_controller/mro_pixhawk.md). @@ -49,19 +57,19 @@ FLARM has an on-board DF-13 6 Pin connector that has an identical pinout to the The TX and RX on the flight controller must be connected to the RX and TX on the FLARM, respectively. ::: -## Software Configuration +## PX4 Configuration ### Port Configuration -The recievers are configured in the same way as any other [MAVLink Peripheral](../peripherals/mavlink_peripherals.md). -The only _specific_ setup is that the port baud rate must be set to 57600 and the a low-bandwidth profile (`MAV_X_MODE`). +The receivers are configured in the same way as any other [MAVLink Peripheral](../peripherals/mavlink_peripherals.md). +The recommended configuration for most devices (unless they have device-specific configuration like PingRX) is to connect to `TELEM 2` and [set the parameters](../advanced_config/parameters.md) as shown: -Assuming you have connected the device to the TELEM2 port, [set the parameters](../advanced_config/parameters.md) as shown: - -- [MAV_1_CONFIG](../advanced_config/parameter_reference.md#MAV_1_CONFIG) = TELEM 2 -- [MAV_1_MODE](../advanced_config/parameter_reference.md#MAV_1_MODE) = Normal -- [MAV_1_RATE](../advanced_config/parameter_reference.md#MAV_1_RATE) = 0 (default sending rate for port). -- [MAV_1_FORWARD](../advanced_config/parameter_reference.md#MAV_1_FORWARD) = Enabled +| Parameter | Recommended Value | +| ------------------------------------------------------------------------ | --------------------------------- | +| [MAV_X_CONFIG](../advanced_config/parameter_reference.md#MAV_1_CONFIG) | `TELEM 2` | +| [MAV_X_MODE](../advanced_config/parameter_reference.md#MAV_1_MODE) | Normal | +| [MAV_X_RATE](../advanced_config/parameter_reference.md#MAV_1_RATE) | 0 (default sending rate for port) | +| [MAV_X_FORWARD](../advanced_config/parameter_reference.md#MAV_1_FORWARD) | Enabled | Then reboot the vehicle. @@ -74,7 +82,7 @@ Configure the action when there is a potential collision using the parameter bel | Parameter | Description | | ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [NAV_TRAFF_AVOID](../advanced_config/parameter_reference.md#NAV_TRAFF_AVOID) | Enable traffic avoidance mode specify avoidance response. 0: Disable, 1: Warn only, 2: Return mode, 3: Land mode. | -| [NAV_TRAFF_A_HOR](../advanced_config/parameter_reference.md#NAV_TRAFF_A_HOR) | Horizonal radius of cylinder around the vehicle that defines its airspace (i.e. the airspace in the ground plane). | +| [NAV_TRAFF_A_HOR](../advanced_config/parameter_reference.md#NAV_TRAFF_A_HOR) | Horizontal radius of cylinder around the vehicle that defines its airspace (i.e. the airspace in the ground plane). | | [NAV_TRAFF_A_VER](../advanced_config/parameter_reference.md#NAV_TRAFF_A_VER) | Vertical height above and below vehicle of the cylinder that defines its airspace (also see [NAV_TRAFF_A_HOR](#NAV_TRAFF_A_HOR)). | | [NAV_TRAFF_COLL_T](../advanced_config/parameter_reference.md#NAV_TRAFF_COLL_T) | Collision time threshold. Avoidance will trigger if the estimated time until collision drops below this value (the estimated time is based on relative speed of traffic and UAV). | @@ -136,8 +144,8 @@ Use with care in real flight! To enable this feature: 1. Uncomment the code in `AdsbConflict::run_fake_traffic()`([AdsbConflict.cpp](https://github.com/PX4/PX4-Autopilot/blob/main/src/lib/adsb/AdsbConflict.cpp#L342C1-L342C1)). -1. Rebuild and run PX4. -1. Execute the [`navigator fake_traffic` command](../modules/modules_controller.md#navigator) in the [QGroundControl MAVLink Shell](https://docs.qgroundcontrol.com/master/en/qgc-user-guide/analyze_view/mavlink_console.html) (or some other [PX4 Console or MAVLink shell](../debug/consoles.md), such as the PX4 simulator terminal). +2. Rebuild and run PX4. +3. Execute the [`navigator fake_traffic` command](../modules/modules_controller.md#navigator) in the [QGroundControl MAVLink Shell](https://docs.qgroundcontrol.com/master/en/qgc-user-guide/analyze_view/mavlink_console.html) (or some other [PX4 Console or MAVLink shell](../debug/consoles.md), such as the PX4 simulator terminal). The code in `run_fake_traffic()` is then executed. You should see ADS-B warnings in the Console/MAVLink shell, and QGC should also show an ADS-B traffic popup. @@ -147,7 +155,7 @@ These simulate ADS-B traffic where there may be a conflict, where there won't be ::: details Information about the test methods -The relevent methods are defined in [AdsbConflict.cpp](https://github.com/PX4/PX4-Autopilot/blob/main/src/lib/adsb/AdsbConflict.cpp#L342C1-L342C1). +The relevant methods are defined in [AdsbConflict.cpp](https://github.com/PX4/PX4-Autopilot/blob/main/src/lib/adsb/AdsbConflict.cpp#L342C1-L342C1). #### `run_fake_traffic()` method diff --git a/docs/en/peripherals/dshot.md b/docs/en/peripherals/dshot.md index 2030946d1a..e1e1761d44 100644 --- a/docs/en/peripherals/dshot.md +++ b/docs/en/peripherals/dshot.md @@ -13,7 +13,7 @@ This topic shows how to connect and configure DShot ESCs. ## Supported ESC -[ESCs & Motors > Supported ESCs](../peripherals/esc_motors#supported-esc) has a list of supported ESC (check "Protocols" column for DShot ESC). +[ESCs & Motors > Supported ESCs](../peripherals/esc_motors.md#supported-esc) has a list of supported ESC (check "Protocols" column for DShot ESC). ## Wiring/Connections {#wiring} @@ -47,71 +47,12 @@ Then connect the battery and arm the vehicle. The ESCs should initialize and the motors turn in the correct directions. - If the motors do not spin in the correct direction (for the [selected airframe](../airframes/airframe_reference.md)) you can reverse them in the UI using the **Set Spin Direction** option (this option appears after you select DShot and assign motors). - You can also reverse motors by sending an [ESC Command](#commands). ## ESC Commands {#commands} Commands can be sent to the ESC via the [MAVLink shell](../debug/mavlink_shell.md). See [here](../modules/modules_driver.md#dshot) for a full reference of the supported commands. -The most important ones are: - -- Make a motor connected to to FMU output pin 1 beep (helps with identifying motors) - - ```sh - dshot beep1 -m 1 - ``` - -- Retrieve ESC information (requires telemetry, see below): - - ```sh - nsh> dshot esc_info -m 2 - INFO [dshot] ESC Type: #TEKKO32_4in1# - INFO [dshot] MCU Serial Number: xxxxxx-xxxxxx-xxxxxx-xxxxxx - INFO [dshot] Firmware version: 32.60 - INFO [dshot] Rotation Direction: normal - INFO [dshot] 3D Mode: off - INFO [dshot] Low voltage Limit: off - INFO [dshot] Current Limit: off - INFO [dshot] LED 0: unsupported - INFO [dshot] LED 1: unsupported - INFO [dshot] LED 2: unsupported - INFO [dshot] LED 3: unsupported - ``` - -- Permanently set the spin direction of a motor connected to FMU output pin 1 (while motors are _not_ spinning): - - Set spin direction to `reversed`: - - ```sh - dshot reverse -m 1 - dshot save -m 1 - ``` - - Retrieving ESC information will then show: - - ```sh - Rotation Direction: reversed - ``` - - - Set spin direction to `normal`: - - ```sh - dshot normal -m 1 - dshot save -m 1 - ``` - - Retrieving ESC information will then show: - - ```sh - Rotation Direction: normal - ``` - - ::: info - - The commands will have no effect if the motors are spinning, or if the ESC is already set to the corresponding direction. - - The ESC will revert to its last saved direction (normal or reversed) on reboot if `save` is not called after changing the direction. - - ::: - ## ESC Telemetry Some ESCs are capable of sending telemetry back to the flight controller through a UART RX port. @@ -128,62 +69,78 @@ The provided telemetry includes: To enable this feature (on ESCs that support it): 1. Join all the telemetry wires from all the ESCs together, and then connect them to one of the RX pins on an unused flight controller serial port. -1. Enable telemetry on that serial port using [DSHOT_TEL_CFG](../advanced_config/parameter_reference.md#DSHOT_TEL_CFG). - -After a reboot you can check if telemetry is working (make sure the battery is connected) using: - -```sh -dshot esc_info -m 1 -``` +2. Enable telemetry on that serial port using [DSHOT_TEL_CFG](../advanced_config/parameter_reference.md#DSHOT_TEL_CFG). :::tip -You may have to configure [MOT_POLE_COUNT](../advanced_config/parameter_reference.md#MOT_POLE_COUNT) to get the correct RPM values. +You may have to configure the per-motor pole count parameters ([`DSHOT_MOT_POL1`–`DSHOT_MOT_POL12`](../advanced_config/parameter_reference.md#DSHOT_MOT_POL1)) to get correct RPM values. +The default value for these is 14 poles, which is typical for 5-inch prop motors. ::: :::tip -Not all DSHOT-capable ESCs support `[esc_info]`(e.g. APD 80F3x), even when telemetry is supported and enabled. -The resulting error is: - -```sh -ERROR [dshot] No data received. If telemetry is setup correctly, try again. -``` - -Check manufacturer documentation for confirmation/details. +[Extended DShot Telemetry (EDT)](#extended-dshot-telemetry-edt) can provide temperature, voltage, and current through the BDShot signal — no serial telemetry wire needed. ::: ## Bidirectional DShot (Telemetry) -Bidirectional DShot is a protocol that can provide telemetry including: high rate ESC RPM data, voltage, current, and temperature with a single wire. +Bidirectional DShot (BDShot) enables the ESC to send eRPM telemetry back to the flight controller on the same signal wire used for throttle commands — no additional telemetry wire is needed for RPM data. +High-rate eRPM data significantly improves the performance of [Dynamic Notch Filters](../config_mc/filter_tuning.md#dynamic-notch-filters) and enables more precise vehicle tuning. -The PX4 implementation currently enables only ESC RPM (eRPM) data collection from each ESC at high frequencies. -This telemetry significantly improves the performance of [Dynamic Notch Filters](../config_mc/filter_tuning.md#dynamic-notch-filters) and enables more precise vehicle tuning. +With [Extended DShot Telemetry (EDT)](#extended-dshot-telemetry-edt) enabled, BDShot can also provide temperature, voltage, and current data. + +### Hardware Support + +BDShot requires a flight controller with DMA-capable timers. +Any FMU output on a supported timer can be used for BDShot — multiple timers are supported through sequential burst/capture. + +Supported processors: + +- **STM32H7**: All FMU outputs on DMA-capable timers +- **i.MXRT** (V6X-RT & Tropic): All FMU outputs ::: info -The [ESC Telemetry](#esc-telemetry) described above is currently still necessary if you want voltage, current, or temperature information. -It's setup and use is independent of bidirectional DShot. -::: - -### Hardware Setup - The ESC must be connected to FMU outputs only. -These will be labeled `MAIN` on flight controllers that only have one PWM bus, and `AUX` on controllers that have both `MAIN` and `AUX` ports (i.e. FCs that have an IO board). - -:::warning **Limited hardware support** -This feature is only supported on flight controllers with the following processors: - -- STM32H7: First four FMU outputs - - Must be connected to the first 4 FMU outputs, and these outputs must also be mapped to the same timer. - - [KakuteH7](../flight_controller/kakuteh7v2.md) is not supported because the outputs are not mapped to the same timer. -- [i.MXRT](../flight_controller/nxp_mr_vmu_rt1176.md) (V6X-RT & Tropic): 8 FMU outputs. - -No other boards are supported. +These are labeled `MAIN` on controllers with a single PWM bus, and `AUX` on controllers with both `MAIN` and `AUX` ports (i.e. those with an IO board). ::: -### Configuration {#bidirectional-dshot-configuration} +### PX4 Configuration {#bidirectional-dshot-configuration} -To enable bidirectional DShot, set the [DSHOT_BIDIR_EN](../advanced_config/parameter_reference.md#DSHOT_BIDIR_EN) parameter. +BDShot is enabled **per-timer** in the [Actuator Configuration](../config/actuators.md) UI. +Select **BDShot150**, **BDShot300**, or **BDShot600** as the output protocol instead of the corresponding DShot speed. +There is no separate enable parameter — choosing a BDShot protocol activates bidirectional telemetry on that timer's outputs. -The system calculates actual motor RPM from the received eRPM data using the [MOT_POLE_COUNT](../advanced_config/parameter_reference.md#MOT_POLE_COUNT) parameter. -This parameter must be set correctly for accurate RPM reporting. +The system calculates actual motor RPM from eRPM data using per-motor pole count parameters: `DSHOT_MOT_POL1` through `DSHOT_MOT_POL12` (one per motor output). +The default is 14 poles, which is typical for 5-inch prop motors. +If you are using AM32 ESCs, the motor pole count must also be set in the AM32 firmware configuration (e.g. via the AM32 configurator tool) to match. + +### Extended DShot Telemetry (EDT) + +EDT extends BDShot by interleaving temperature, voltage, and current data into the eRPM telemetry frames. +This allows ESC health monitoring through the same signal wire, without requiring a separate serial telemetry connection. + +To enable EDT: + +1. Configure BDShot on the desired outputs (see above). +2. Set `DSHOT_BIDIR_EDT` to `1` and reboot. + +The ESC firmware must support EDT (e.g. [AM32](https://github.com/am32-firmware/AM32)). + +When both serial telemetry and BDShot/EDT are enabled, the driver merges data from both sources. + +## AM32 ESC Settings (EEPROM) + +PX4 can read and write AM32 ESC firmware settings (EEPROM) via a ground station, enabling remote ESC configuration without connecting directly to each ESC. + +### Requirements + +- ESCs running [AM32 firmware](https://github.com/am32-firmware/AM32) with serial telemetry connected ([DSHOT_TEL_CFG](../advanced_config/parameter_reference.md#DSHOT_TEL_CFG)) +- `DSHOT_ESC_TYPE` set to `1` (AM32) +- Ground station with ESC EEPROM support (QGroundControl feature in development) +- MAVLink development dialect enabled on the flight controller + +### How It Works + +PX4 automatically reads the full EEPROM from each ESC on boot. +The ground station can then display individual settings and allow the user to modify them. +Changes are written back to the ESC one byte at a time using the DShot programming protocol. diff --git a/docs/en/peripherals/esc_motors.md b/docs/en/peripherals/esc_motors.md index 7fddeb999d..8849c357de 100644 --- a/docs/en/peripherals/esc_motors.md +++ b/docs/en/peripherals/esc_motors.md @@ -11,7 +11,7 @@ The following list is non-exhaustive. | ESC Device | Protocols | Firmwares | Notes | | ------------------------------ | ------------------------------------ | ------------------------ | ----------------------------------------------------- | -| [ARK 4IN1 ESC] | [Dshot], [PWM] | [AM32] | Has versions with/without connnectors | +| [ARK 4IN1 ESC] | [Dshot], [PWM] | [AM32] | Has versions with/without connectors | | [Holybro Kotleta 20] | [DroneCAN], [PWM] | [PX4 Sapog ESC Firmware] | | | [Vertiq Motor & ESC modules] | [Dshot], [OneShot], Multishot, [PWM] | Vertiq firmware | Larger modules support DroneCAN, ESC and Motor in one | | [RaccoonLab CAN PWM ESC nodes] | [DroneCAN], Cyphal | | Cyphal and DroneCAN notes for PWM ESC | diff --git a/docs/en/peripherals/frsky_telemetry.md b/docs/en/peripherals/frsky_telemetry.md index 74326ca07a..b0f17e1dab 100644 --- a/docs/en/peripherals/frsky_telemetry.md +++ b/docs/en/peripherals/frsky_telemetry.md @@ -166,7 +166,7 @@ D-Port receivers transmit the following messages (from [here](https://github.com ## FrSky Telemetry Receivers -Pixhawk/PX4 supports D (old) and S (new) FrSky telemetry. The table belows all FrSky receivers that support telemetry via a D/S.PORT (in theory all of these should work). +Pixhawk/PX4 supports D (old) and S (new) FrSky telemetry. The table below lists all FrSky receivers that support telemetry via a D/S.PORT (in theory all of these should work). :::tip Note that the X series receivers listed below are recommended (e.g. XSR, X8R). The R and G series have not been tested/validated by the test team, but should work. @@ -213,8 +213,8 @@ You will need connectors that are appropriate for your autopilot (e.g. _JST-GH c The Pixracer includes electronics for converting between S.PORT and UART signals, but for other boards you will need a UART to S.PORT adapter. These can be sourced from: -- [FrSky FUL-1](https://www.frsky-rc.com/product/ful-1/): [unmannedtech.co.uk](https://www.unmannedtechshop.co.uk/frsky-transmitter-receiver-upgrade-adapter-ful-1/) -- SPC: [getfpv.com](https://www.getfpv.com/frsky-smart-port-converter-cable.html), [unmannedtechshop.co.uk](https://www.unmannedtechshop.co.uk/frsky-smart-port-converter-spc/) +- [FrSky FUL-1](https://www.frsky-rc.com/product/ful-1/): [unmannedtech.co.uk](https://www.unmannedtechshop.co.uk/products/frsky-transmitter-receiver-upgrade-adapter-ful-1) +- SPC: [getfpv.com](https://www.getfpv.com/frsky-smart-port-converter-cable.html), [unmannedtechshop.co.uk](https://www.unmannedtechshop.co.uk/products/frsky-smart-port-converter-spc) More information about the connections for different boards is given below. diff --git a/docs/en/peripherals/index.md b/docs/en/peripherals/index.md index f77dc57ffa..14fb0e070c 100644 --- a/docs/en/peripherals/index.md +++ b/docs/en/peripherals/index.md @@ -2,8 +2,9 @@ This section contains topics about peripheral hardware that can be connected to a flight controller (not including [cameras and other payloads](../payloads/index.md)). -The peripherals are not _required_ for flight, but may support it by providing improved safety, or allowing the vehicle to meet regulartory requirements: +The peripherals are not _required_ for flight, but may support it by providing improved safety, or allowing the vehicle to meet regulatory requirements: - [ADSB/FLARM/UTM (Traffic Avoidance)](../peripherals/adsb_flarm.md) +- [On-Screen Display (OSD)](../peripherals/osd.md) - [Parachute](../peripherals/parachute.md) - [Remote ID](../peripherals/remote_id.md) diff --git a/docs/en/peripherals/mavlink_peripherals.md b/docs/en/peripherals/mavlink_peripherals.md index 9a790a9218..cfc4ba46ce 100644 --- a/docs/en/peripherals/mavlink_peripherals.md +++ b/docs/en/peripherals/mavlink_peripherals.md @@ -1,6 +1,6 @@ # MAVLink Peripherals (GCS/OSD/Gimbal/Camera/Companion) -Ground Control Stations (GCS), On-Screen Displays (OSD), MAVLink Cameras & Gimbals, Remote IDs, Companion Computers, ADS-B receivers, and other MAVLink peripherals interact with PX4 using separate MAVLink streams, sent via different serial ports. +Ground Control Stations (GCS), [MAVLink On-Screen Displays (OSD)](../peripherals/osd.md#mavlink-osd), MAVLink [Cameras](../camera/mavlink_v2_camera.md) and [Gimbals](../advanced/gimbal_control.md), [Remote IDs](../peripherals/remote_id.md), Companion Computers, [ADS-B receivers](../peripherals/adsb_flarm.md), and other MAVLink peripherals interact with PX4 using separate MAVLink streams, sent via different serial ports. In order to configure that a particular serial port is used for MAVLink traffic with a particular peripheral, we use [Serial Port Configuration](../peripherals/serial_configuration.md), assigning one of the abstract "MAVLink instance" configuration parameters to the desired port. We then set other properties of the MAVLink channel using the parameters associated with our selected MAVLink instance, so that they match the requirements of our particular peripheral. @@ -26,29 +26,8 @@ The parameters for each instance are: - [MAV_X_CONFIG](../advanced_config/parameter_reference.md#MAV_0_CONFIG) - Set the serial port (UART) for this instance "X", where X is 0, 1, 2. It can be any unused port, e.g.: `TELEM2`, `TELEM3`, `GPS2` etc. For more information see [Serial Port Configuration](../peripherals/serial_configuration.md). -- [MAV_X_MODE](../advanced_config/parameter_reference.md#MAV_0_MODE) - Specify the telemetry mode/target (the set of messages to stream for the current instance and their rate). - The default values are: - - _Normal_: Standard set of messages for a GCS. - - _Custom_ or _Magic_: Nothing (in the default PX4 implementation). - Modes may be used for testing when developing a new mode. - - _Onboard_: Standard set of messages for a companion computer. - - _OSD_: Standard set of messages for an OSD system. - - _Config_: Standard set of messages and rate configuration for a fast link (e.g. USB). - - _Minimal_: Minimal set of messages for use with a GCS connected on a high latency link. - - _External Vision_: Messages for offboard vision systems. - - _Gimbal_: Messages for a gimbal. Note this also enables [message forwarding](#MAV_X_FORWARD) - - _Onboard Low Bandwidth_: Standard set of messages for a companion computer connected on a lower speed link. - - _uAvionix_: Messages for a uAvionix ADS-B beacon. - - ::: info - If you need to find the specific set of message for each mode search for `MAVLINK_MODE_` in [/src/modules/mavlink/mavlink_main.cpp](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/mavlink_main.cpp). - ::: - - :::tip - The mode defines the _default_ messages and rates. - A connected MAVLink system can still request the streams/rates that it wants using [MAV_CMD_SET_MESSAGE_INTERVAL](https://mavlink.io/en/messages/common.html#MAV_CMD_SET_MESSAGE_INTERVAL). - ::: - +- [MAV_X_MODE](../advanced_config/parameter_reference.md#MAV_0_MODE) - Specify the [MAVLink profile](../mavlink/mavlink_profiles.md) for the instance, such as _Normal_ or _OSD_. + Profiles define a particular set of streamed messages and their rates — you should choose a profile that is appropriate for your channel and the peripheral. - [MAV_X_RATE](../advanced_config/parameter_reference.md#MAV_0_MODE) - Set the maximum _data rate_ for this instance (bytes/second). - This is the combined rate for all streams of individual message (the rates for individual messages are reduced if the total rate exceeds this value). - The default setting will generally be acceptable, but might be reduced if the telemetry link becomes saturated and too many messages are being dropped. @@ -116,6 +95,7 @@ Links to setup instructions for specific MAVLink components: ## See Also +- [MAVLink Profiles](../mavlink/mavlink_profiles.md) - [Serial Port Configuration](../peripherals/serial_configuration.md) - [PX4 Ethernet Setup > PX4 MAVLink Serial Port Configuration](../advanced_config/ethernet_setup.md#px4-mavlink-serial-port-configuration) - [Serial Port Mapping](../hardware/serial_port_mapping.md) diff --git a/docs/en/peripherals/osd.md b/docs/en/peripherals/osd.md new file mode 100644 index 0000000000..5f2a5dd70e --- /dev/null +++ b/docs/en/peripherals/osd.md @@ -0,0 +1,103 @@ +# On-Screen Display (OSD) + +An **On-Screen Display (OSD)** overlays flight telemetry — battery, altitude, GPS, RSSI, attitude, etc. — onto a pilot's video feed. +OSDs are commonly used in FPV and long-range flying so the pilot can see live flight data without looking away from the video. + +PX4 supports three distinct OSD mechanisms, each targeting a different class of video system: + +| Mechanism | Use case | Transport | Runs on FC? | +| --------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------- | -------------------------------------------------------------- | +| [MSP OSD](#msp-osd) | Digital FPV air units and video goggles that speak Betaflight MSP (e.g. DJI O3/O4, Walksnail, HDZero, Caddx Vista) | Serial, MSPv1 | Yes — [`msp_osd`](../modules/modules_driver.md#msp-osd) driver | +| [ATXXXX Analog OSD](#atxxxx-analog-osd) | Legacy analog video with an on-board MAX7456/ATXXXX overlay chip (e.g. OmnibusF4SD) | SPI to on-board chip | Yes — [`atxxxx`](../modules/modules_driver.md#atxxxx) driver | +| [MAVLink OSD](#mavlink-osd) | MAVLink-aware ground stations and displays that render their own OSD from telemetry (e.g. Yaapu on EdgeTX/OpenTX, Skydroid, mLRS HUDs) | Serial, MAVLink | No — streams MAVLink; the display renders the OSD | + +Which one you use is determined by your video hardware, not by PX4 preference. +If you're unsure, start with your video system's documentation and match the OSD mechanism it expects. + +## MSP OSD + +**MSP (MultiWii Serial Protocol) OSD** is the mechanism used by digital FPV systems (DJI, Walksnail, HDZero) and by many digital goggles/air units to render telemetry over the pilot's video feed. +PX4 implements the subset of MSP used for OSD telemetry, matching what Betaflight and INAV send. + +The [`msp_osd`](../modules/modules_driver.md#msp-osd) driver converts uORB topics (battery, GPS, attitude, etc.) to MSP packets and sends them out a serial port at 115200 baud. + +### Supported displays + +PX4 currently sends a subset of MSP messages. +Reliably-working display items include: + +- Craft name and flight mode / arming state +- Battery voltage, current draw, mAh consumed, average cell voltage +- GPS latitude, longitude, satellite count, ground speed +- Home distance and direction +- Altitude (from GNSS / baro) +- RSSI +- Crosshairs toggle + +Some items in [`OSD_SYMBOLS`](../advanced_config/parameter_reference.md#OSD_SYMBOLS) are reserved but not yet implemented — see the parameter's `(unused)` bit labels. +For feature-completeness work, see the tracking issues on GitHub. + +### Hardware setup + +1. Connect the digital air unit's MSP / telemetry input to a free UART on the flight controller (TX → RX, RX → TX, GND → GND). +2. Power the air unit from its own BEC or a VTX power pad — most air units expect 5 V or battery voltage, not autopilot 5 V. +3. Note which PX4 serial device the UART maps to on your board (e.g. `TELEM2` → `/dev/ttyS2`). + See [Serial Port Mapping](../hardware/serial_port_mapping.md). + +### Firmware requirements + +The `msp_osd` driver is included in the default build for most modern Pixhawk and FPV-oriented boards (e.g. `px4_fmu-v5x`, `px4_fmu-v6x`, `ark_fpv`, `cuav_7-nano`, `micoair_h743*`). +If your board does not include it by default, enable it via [board config](../hardware/porting_guide_config.md#px4-menuconfig-setup): + +```sh +make _default boardconfig +# drivers → OSD → msp_osd +``` + +Then rebuild and flash. + +### PX4 configuration + +1. Assign the selected serial port to MSP OSD with [`MSP_OSD_CONFIG`](../advanced_config/parameter_reference.md#MSP_OSD_CONFIG). +2. Set the matching `SER__BAUD` to `115200`. +3. Reboot. +4. Tune the display via the [`OSD_*` parameters](../advanced_config/parameter_reference.md#osd): + - [`OSD_SYMBOLS`](../advanced_config/parameter_reference.md#OSD_SYMBOLS) — bitmask selecting which items appear. + - [`OSD_CH_HEIGHT`](../advanced_config/parameter_reference.md#OSD_CH_HEIGHT) — vertical position of the crosshairs. + - [`OSD_LOG_LEVEL`](../advanced_config/parameter_reference.md#OSD_LOG_LEVEL) — minimum severity for on-screen warnings. + - [`OSD_SCROLL_RATE`](../advanced_config/parameter_reference.md#OSD_SCROLL_RATE) / [`OSD_DWELL_TIME`](../advanced_config/parameter_reference.md#OSD_DWELL_TIME) — scrolling of long messages. + - [`OSD_RC_STICK`](../advanced_config/parameter_reference.md#OSD_RC_STICK) — forward RC sticks to the VTX when disarmed, so you can navigate the VTX menu. + +### Worked examples + +- [Reptile Dragon 2 > msp_osd Module](../frames_plane/reptile_dragon_2.md#msp-osd-module) — end-to-end wiring and configuration for a Caddx Vista build. +- [Turbo Timber Evolution](../frames_plane/turbo_timber_evolution.md) — references the same setup pattern. + +## MAVLink OSD + +Some OSDs render their own overlay directly from the MAVLink telemetry stream — the flight controller simply streams MAVLink at a rate the display can parse. +PX4 exposes this via a dedicated MAVLink stream profile. + +To use a MAVLink OSD: + +1. Choose an unused MAVLink instance ([`MAV_X_CONFIG`](../peripherals/mavlink_peripherals.md#default_ports)) and assign it to the serial port connected to the display. +2. Configure the mode of the selected MAVLink instance with [`MAV_X_MODE`](./mavlink_peripherals.md#MAV_X_MODE) by setting it to **`OSD`**. + The `OSD` mode uses a built-in rate table tuned for low-bandwidth OSD consumption. +3. Set the matching `SER__BAUD` to the baud rate the display expects. + +The stream content is fixed (defined in `src/modules/mavlink/mavlink_main.cpp`) and cannot be customised from parameters. +See [MAVLink Peripherals (GCS/OSD/Gimbal/Camera/Companion)](./mavlink_peripherals.md) for the full MAVLink-side configuration. + +## ATXXXX Analog OSD + +The [`atxxxx`](../modules/modules_driver.md#atxxxx) driver targets boards with an on-board MAX7456 / ATXXXX chip that overlays characters onto an analog video stream (PAL or NTSC). +This was common on older F4-class FCs such as OmnibusF4SD and is largely superseded by digital systems. + +No external wiring is required on boards that include the chip; to enable it, set [`OSD_ATXXXX_CFG`](../advanced_config/parameter_reference.md#OSD_ATXXXX_CFG) to `1` (NTSC) or `2` (PAL) and reboot. + +## See also + +- [Parameter Reference > OSD](../advanced_config/parameter_reference.md#osd) — all OSD parameters. +- [MAVLink Peripherals (GCS/OSD/Gimbal/Camera/Companion)](./mavlink_peripherals.md) — MAVLink serial configuration. +- [Serial Port Configuration](./serial_configuration.md) — assigning modules to UARTs. +- [`msp_osd` module reference](../modules/modules_driver.md#msp-osd) — CLI usage and source. diff --git a/docs/en/peripherals/parachute.md b/docs/en/peripherals/parachute.md index 6760760abe..9487d8e3a1 100644 --- a/docs/en/peripherals/parachute.md +++ b/docs/en/peripherals/parachute.md @@ -44,6 +44,7 @@ To enable flight termination: - Set [Safety](../config/safety.md) action to _Flight termination_ for checks where you want the parachute to trigger. - Set [Failure Detector](../config/safety.md#failure-detector) pitch angles, roll angles and time triggers for crash/flip detection, and disable the failure/IMU timeout circuit breaker (i.e. set [CBRK_FLIGHTTERM=0](../advanced_config/parameter_reference.md#CBRK_FLIGHTTERM)). +- Set [FD_ALT_LOSS](../advanced_config/parameter_reference.md#FD_ALT_LOSS) to enable flight termination if a rotary-wing vehicle loses too much altitude below its setpoint (see [Altitude Loss Trigger](../config/safety.md#altitude-loss-trigger)). ::: info You can also configure an [external Automatic Trigger System (ATS)](../config/safety.md#external-automatic-trigger-system-ats) for failure detection. diff --git a/docs/en/peripherals/pwm_escs_and_servo.md b/docs/en/peripherals/pwm_escs_and_servo.md index f1bd89a7ef..df523713af 100644 --- a/docs/en/peripherals/pwm_escs_and_servo.md +++ b/docs/en/peripherals/pwm_escs_and_servo.md @@ -65,7 +65,7 @@ In this case the wire will normally be connected to the flight controller servo PWM motors and servos are configured using the [Actuator Configuration](../config/actuators.md) screen in QGroundControl. -After assigning outputs and basic calibration, you may then wish to peform an [ESC Calibration](../advanced_config/esc_calibration.md). +After assigning outputs and basic calibration, you may then wish to perform an [ESC Calibration](../advanced_config/esc_calibration.md). Additional PX4 PWM configuration parameters can be found here: [PWM Outputs](../advanced_config/parameter_reference.md#pwm-outputs). diff --git a/docs/en/peripherals/remote_id.md b/docs/en/peripherals/remote_id.md index 60d3413661..5f94c207de 100644 --- a/docs/en/peripherals/remote_id.md +++ b/docs/en/peripherals/remote_id.md @@ -143,20 +143,19 @@ The [CAN Remote ID Not Working](../peripherals/remote_id.md#can-remote-id-not-wo There is no need to explicitly enable Remote ID (supported Remote ID messages are either streamed by default or must be requested in the current implementation, even if no remote ID is connected). -### Prevent Arming based on Remote ID +### Remote ID Failsafe and Arming Check -To only allow arming when a Remote ID is ready, [set](../advanced_config/parameters.md#conditional-parameters) the parameter [COM_ARM_ODID](#COM_ARM_ODID) to `2` (it is disabled by default). + -| Parameter | Description | -| ----------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [COM_ARM_ODID](../advanced_config/parameter_reference.md#COM_ARM_ODID) | Enable Drone ID system detection and health check. `0`: Disable (default), `1`: Warn if Remote ID not detected but still allow arming, `2`: Only allow arming if Remote ID is present. | +The [COM_ARM_ODID](../advanced_config/parameter_reference.md#COM_ARM_ODID) parameter configures both the arming check and the in-flight failsafe action when the Remote ID system is missing or unhealthy. +For more information see [Remote ID Failsafe](http://localhost:5173/px4_user_guide/en/config/safety#remote-id-failsafe) in _Safety Configuration_. ## Module Broadcast Testing Integrators should test than the remote ID module is broadcasting the correct information, such as UAV location, ID, operator ID and so on. This is most easily done using a 3rd party application on your mobile device: -- [Drone Scanner](https://github.com/dronetag/drone-scanner) (Google Play or Apple App store) +- [Drone Scanner](https://help.dronetag.com/drone-scanner/) (Google Play or Apple App store) - [OpenDroneID OSM](https://play.google.com/store/apps/details?id=org.opendroneid.android_osm&hl=en&gl=US) (Google Play) ## Implementation @@ -173,7 +172,7 @@ The following message can be streamed on request (using [MAV_CMD_SET_MESSAGE_INT - [OPEN_DRONE_ID_BASIC_ID](https://mavlink.io/en/messages/common.html#OPEN_DRONE_ID_BASIC_ID) - UAV identity information (essentially a serial number) - PX4 v1.14 specifies a serial number ([MAV_ODID_ID_TYPE_SERIAL_NUMBER](https://mavlink.io/en/messages/common.html#MAV_ODID_ID_TYPE_SERIAL_NUMBER)) but does not use the required format (ANSI/CTA-2063 format). -PX4 prevents arming based on Remote ID health if parameter [COM_ARM_ODID](../advanced_config/parameter_reference.md#COM_ARM_ODID) is set to `2`. +PX4 can prevent arming and/or trigger an in-flight failsafe based on Remote ID health via the [COM_ARM_ODID](../advanced_config/parameter_reference.md#COM_ARM_ODID) parameter. The UAV will then require `HEARTBEAT` messages from the Remote ID as a precondition for arming the UAV. You can also set the parameter to `1` to warn but still allow arming when Remote ID `HEARTBEAT` messages are not detected. diff --git a/docs/en/peripherals/serial_configuration.md b/docs/en/peripherals/serial_configuration.md index 65650feef5..50dfabe1fc 100644 --- a/docs/en/peripherals/serial_configuration.md +++ b/docs/en/peripherals/serial_configuration.md @@ -106,7 +106,7 @@ The following ports are commonly mapped to specific functions on all boards: This is configured by default as a MAVLink port the onboard profile (for companion computers). The configuration for MAVLink is unique to this port (it doesn't use the `MAV_X_CONFIG` parameters). - - [SYS_USB_AUTO](../advanced_config/parameter_reference.md#SYS_USB_AUTO) sets whether the port is set to no partiular protocol, autodetects the protocol, or sets the comms link to MAVLink. + - [SYS_USB_AUTO](../advanced_config/parameter_reference.md#SYS_USB_AUTO) sets whether the port is set to no particular protocol, autodetects the protocol, or sets the comms link to MAVLink. - [USB_MAV_MODE](../advanced_config/parameter_reference.md#USB_MAV_MODE) sets the MAVLink profile that is used if MAVLink is set or detected. Other ports generally have no assigned functions by default (are disabled). diff --git a/docs/en/peripherals/vertiq.md b/docs/en/peripherals/vertiq.md index 224118a8bf..f9b350f474 100644 --- a/docs/en/peripherals/vertiq.md +++ b/docs/en/peripherals/vertiq.md @@ -6,7 +6,7 @@ With closed loop velocity control for the fastest response times available, clas ![Vertiq Module Lineup](../../assets/peripherals/esc_vertiq/vertiq_esc_lineup.jpg) -All Vertiq modules support traditional [PWM input, DShot, OneShot, and Multishot communication protocols](https://iqmotion.readthedocs.io/en/latest/communication_protocols/hobby_protocol.html). Vertiq's larger modules also support [DroneCAN control](https://iqmotion.readthedocs.io/en/latest/communication_protocols/dronecan_protocol.html). +All Vertiq modules support traditional [PWM input, DShot, OneShot, and Multishot communication protocols](https://iqmotion.readthedocs.io/en/latest/communication_protocols/timer_based_protocol.html). Vertiq's larger modules also support [DroneCAN control](https://iqmotion.readthedocs.io/en/latest/communication_protocols/dronecan_protocol.html). ## Where to Buy @@ -46,7 +46,7 @@ Standard Vertiq ESC modules do not include LEDs. ::: Vertiq LED Add-on modules have two LEDs per ESC (RGB for status, White for anti-collision). -See [DroneCAN Lights](../dronecan/index.md#lights) for configuration instructions. +See [DroneCAN Lights](../dronecan/lights.md) for configuration instructions. The `light_id` for each LED is calculated as: `esc_index × 3 + BASE_ID`, where `BASE_ID` is 1 for RGB and 2 for White. diff --git a/docs/en/power_module/holybro_pm06_pixhawk4mini_power_module.md b/docs/en/power_module/holybro_pm06_pixhawk4mini_power_module.md index 9821c35cea..8e09fbb98a 100644 --- a/docs/en/power_module/holybro_pm06_pixhawk4mini_power_module.md +++ b/docs/en/power_module/holybro_pm06_pixhawk4mini_power_module.md @@ -26,6 +26,8 @@ This power module has integrated power distribution board and provides regulated ## Wiring/Connections -Wiring and connection examples can be found in: [Pixhawk 4 Mini > Power](../assembly/quick_start_pixhawk4_mini.md#power). +![pm06_pin_map](../../assets/hardware/power_module/holybro_pm06/pm06_pin_map.jpg) - +This image shows the wiring and connections for the [Pixhawk 4 Mini](https://docs.px4.io/v1.16/en/assembly/quick_start_pixhawk4_mini#power) (discontinued). + +![Pixhawk 4 - Power Management Board](../../assets/hardware/power_module/holybro_pm06/pixhawk4mini_power_management.png) diff --git a/docs/en/power_module/index.md b/docs/en/power_module/index.md index fe78d1c223..e982218f5a 100644 --- a/docs/en/power_module/index.md +++ b/docs/en/power_module/index.md @@ -13,7 +13,7 @@ The PX4 battery/power module configuration (via the ADC interface) is covered in For easiest assembly use a power module or PDB recommended by your FC manufacturer, and sized for your power requirements. The Pixhawk connector standard requires that the VCC line must provide at least 2.5A continuous current and default to 5.3V. -In in practice flight controllers may have different recommendations or preferences, so if you don't (or can't) use a recommended module, check that the module matches your FC's requirements. +In practice flight controllers may have different recommendations or preferences, so if you don't (or can't) use a recommended module, check that the module matches your FC's requirements. ::: This section provides information about a number of power modules and power distribution boards (see FC manufacturer docs for more options): diff --git a/docs/en/releases/1.12.md b/docs/en/releases/1.12.md index 0c1f8dcb35..60b1c0b7ff 100644 --- a/docs/en/releases/1.12.md +++ b/docs/en/releases/1.12.md @@ -28,7 +28,7 @@ - **RTL Trigger based on remaining flight range ([PR#16399](https://github.com/PX4/PX4-Autopilot/pull/16399))** - Calculates time to home, on RTL, taking into account vehicle speed, wind speed, and destination distance/direction -- **Pre-emptive geofence breach ([PR#16400](https://github.com/PX4/PX4-Autopilot/pull/16400))** +- **Preemptive geofence breach ([PR#16400](https://github.com/PX4/PX4-Autopilot/pull/16400))** - Triggers a breach if the _predicted_ current trajectory will result in a breach, allowing the vehicle to be re-routed to a safe hold position. - **Airframe Scripts** - The syntax for setting defaults was changed and custom scripts require an update @@ -124,7 +124,7 @@ These are removed: ### NuttX -Nuttx was upgraded from [8.2+ to NuttX 10.10.0+](https://github.com/apache/incubator-nuttx/compare/nuttx-8.2..nuttx-10.0.1) (@ [904a602c74dc08a100b5c2bd490807de19e73e10](https://github.com/apache/incubator-nuttx/commit/904a602c74dc08a100b5c2bd490807de19e73e10)) +Nuttx was upgraded from [8.2+ to NuttX 10.10.0+](https://github.com/apache/nuttx/compare/nuttx-8.2..nuttx-10.0.1) (@ [904a602c74dc08a100b5c2bd490807de19e73e10](https://github.com/apache/nuttx/commit/904a602c74dc08a100b5c2bd490807de19e73e10)) - **SDCARD performance:** Results in better performance on H7 Targets - [**BACKPORT**] stm32:SDIO:Use 250 Ms Data path timeout, regardless of Card Clock frequency diff --git a/docs/en/releases/1.14.md b/docs/en/releases/1.14.md index 71f9522c22..85548b2ac8 100644 --- a/docs/en/releases/1.14.md +++ b/docs/en/releases/1.14.md @@ -51,10 +51,10 @@ The new [Failsafe State Machine Simulation](../config/safety_simulation.md) allo ### New Gazebo -Given [the recent changes](https://discourse.ros.org/t/a-new-era-for-gazebo-cross-post/25012) by the Open Robotics simulation team, we are introducing name changes for our gazebo simulations, mirroring Open Robotics naming scheme, starting with v1.14: +Given [the recent changes](https://discourse.openrobotics.org/t/a-new-era-for-gazebo-cross-post/25012) by the Open Robotics simulation team, we are introducing name changes for our gazebo simulations, mirroring Open Robotics naming scheme, starting with v1.14: -- [Ignition Gazebo](https://docs.px4.io/v1.13/en/simulation/ignition_gazebo.html) to [Gazebo](../sim_gazebo_gz/index.md) -- [Gazebo](https://docs.px4.io/v1.13/en/simulation/gazebo.html) to [Gazebo Classic](../sim_gazebo_classic/index.md). +- [Ignition Gazebo](https://docs.px4.io/v1.13/en/simulation/ignition_gazebo) to [Gazebo](../sim_gazebo_gz/index.md) +- [Gazebo](https://docs.px4.io/v1.13/en/simulation/gazebo) to [Gazebo Classic](../sim_gazebo_classic/index.md). Most importantly this affects the PX4 build target names as well: @@ -63,7 +63,7 @@ Most importantly this affects the PX4 build target names as well: ### Improved ROS 2 Interface via uXRCE-DDS -We updated the ROS 2 interface, replacing [Fast-RTPS](https://docs.px4.io/v1.13/en/middleware/micrortps.html) with [uXRCE-DDS](../ros2/user_guide.md), resulting in an improved experience across the board. +We updated the ROS 2 interface, replacing [Fast-RTPS](https://docs.px4.io/v1.13/en/middleware/micrortps) with [uXRCE-DDS](../ros2/user_guide.md), resulting in an improved experience across the board. The change also avoids the need for `_rtps` build targets, enabling the interface on even more targets by default. ## Upgrade Guide @@ -84,7 +84,7 @@ For users upgrading from previous versions, please take a moment to review the f 1. Fast-RTPS users must port their code to the new uXRCE-DDS interface. Application code should only require minor modifications. These include (minimally): -Modifying topic names to match the new naming pattern, which changed from `fmu//out` to `fmu/out/`, and [Adusting the QoS settings](../ros2/user_guide.md#ros-2-subscriber-qos-settings). +Modifying topic names to match the new naming pattern, which changed from `fmu//out` to `fmu/out/`, and [Adjusting the QoS settings](../ros2/user_guide.md#ros-2-subscriber-qos-settings). For more information see [Fast-RTPS to uXRCE-DDS Migration Guidelines](../middleware/uxrce_dds.md#fast-rtps-to-uxrce-dds-migration-guidelines) @@ -101,7 +101,7 @@ For more information see [Fast-RTPS to uXRCE-DDS Migration Guidelines](../middle - Failsafe state machine rewrite and [web simulation](../config/safety_simulation.md) - Improved preflight failure check reporting (requires QGC [v4.2.0](https://github.com/mavlink/qgroundcontrol/releases/tag/v4.2.0) or later): [PX4-Autopilot#20030](https://github.com/PX4/PX4-Autopilot/pull/20030) and [qgroundcontrol#10362](https://github.com/mavlink/qgroundcontrol/pull/10362) -- [Package delivery in mission](../advanced/package_delivery.md): For package delivery applications, inital support for payload delivery in mission for gripper actuator was added +- [Package delivery in mission](../advanced/package_delivery.md): For package delivery applications, initial support for payload delivery in mission for gripper actuator was added - Manual control setpoint message redefinition: `manual_control_setpoint.x`, `y`, `z`, `w` -> `roll`, `pitch`, `yaw`, `throttle`; `throttle scale [0,1] -> [-1,1]` - [PX4-Autopilot#15949](https://github.com/PX4/PX4-Autopilot/pull/15949) - Default motor PWM configuration - [PX4-Autopilot#21800](https://github.com/PX4/PX4-Autopilot/pull/21800) - Fix PWM/Oneshot calibration - [PX4-Autopilot#21726](https://github.com/PX4/PX4-Autopilot/pull/21726) @@ -134,7 +134,7 @@ For more information see [Fast-RTPS to uXRCE-DDS Migration Guidelines](../middle - [Gazebo-classic] Addition of Omnicopter model: A fully actuated omnidirectional vehicle model has been added to Gazebo SITL - https://github.com/PX4/PX4-SITL_gazebo-classic/pull/866 - [Gazebo-classic] Addition of Advanced liftdrag plugin: Advanced liftdrag plugin that models nonlinear aerodynamics based on AVL - [PX4-SITL_gazebo-classic#901](https://github.com/PX4/PX4-SITL_gazebo-classic/pull/901) - [Gazebo-classic] Addition of Safe landing world: Addition of safe landing world, for testing safe landing - [PX4-SITL_gazebo-classic#93](https://github.com/PX4/PX4-SITL_gazebo-classic/pull/93) -- [Gazebo-classic] Depricated Ubuntu Bionic reated tests: Removed testing due to EOL of Ubuntu Bionic - [PX4-SITL_gazebo-classic#974](https://github.com/PX4/PX4-SITL_gazebo-classic/pull/974) +- [Gazebo-classic] Deprecated Ubuntu Bionic reated tests: Removed testing due to EOL of Ubuntu Bionic - [PX4-SITL_gazebo-classic#974](https://github.com/PX4/PX4-SITL_gazebo-classic/pull/974) - [SIH] Standalone sensor simulations in tree: Ability to simulate sensors in tree that was part of SIH is now a stand alone sensor module. Sensors include magnetometer, GPS, Barometer, Airspeed - [PX4-Autopilot#20137](https://github.com/PX4/PX4-Autopilot/pull/20137), https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/simulation/sensor_airspeed_sim - [SIH] Failure injection for battery simulation - https://github.com/PX4/PX4-Autopilot/commit/ebc1d7544e8146788c9e7cf5e8b64f60199240e4 diff --git a/docs/en/releases/1.15.md b/docs/en/releases/1.15.md index c63d1c708b..942c0213db 100644 --- a/docs/en/releases/1.15.md +++ b/docs/en/releases/1.15.md @@ -67,7 +67,7 @@ Please continue reading for [upgrade instructions](#upgrade-guide). ### Control -- **[Offboard]** [ros2 offboard control](../flight_modes/offboard.md#ros-2-messages) allows for direct motors and servo control ([PX4-Autopilot#22222](https://github.com/PX4/PX4-Autopilot/pull/22222)) +- **[Offboard]** [ros2 offboard control](../flight_modes/offboard.md#ros-2-offboard-control) allows for direct motors and servo control ([PX4-Autopilot#22222](https://github.com/PX4/PX4-Autopilot/pull/22222)) ### Estimation @@ -79,7 +79,7 @@ Please continue reading for [upgrade instructions](#upgrade-guide). - Correct way of describing the quaternion uncertainty using Lie group theory - Use Joseph stabilized covariance update algorithm for better covariance stability and allow use of "consider states" (inactive states with non-zero variance) ([PX4-Autopilot#22770](https://github.com/PX4/PX4-Autopilot/pull/22770)) - Covariance prediction, measurement jacobians, state struct and covariance index auto-generated using SymForce -- Manual position update throught MAVLink (`MAV_CMD_EXTERNAL_POSITION_ESTIMATE`) +- Manual position update through MAVLink (`MAV_CMD_EXTERNAL_POSITION_ESTIMATE`) - Add Auxiliary Global Position (AGP) fusion (for e.g.: external map matching vision algorithm) **Mag:** diff --git a/docs/en/releases/1.16.md b/docs/en/releases/1.16.md index 42019f52d1..e4aa448dd6 100644 --- a/docs/en/releases/1.16.md +++ b/docs/en/releases/1.16.md @@ -55,7 +55,7 @@ Please continue reading for [upgrade instructions](#upgrade-guide). - [Battery level estimation improvements](../config/battery.md). ([PX4-Autopilot#23205](https://github.com/PX4/PX4-Autopilot/pull/23205)). - [Voltage-based estimation with load compensation](../config/battery.md#voltage-based-estimation-with-load-compensation) now uses a real-time estimate of the internal resistance of the battery to compensate voltage drops under load (with increased current), providing a better capacity estimate than with the raw measured voltage. - Thrust-based load compensation has been removed (along with the `BATn_V_LOAD_DROP` parameters, where `n` is the battery number). -- The [Position (GNSS) loss failsafe](../config/safety.md#position-gnss-loss-failsafe) configurable delay (`COM_POS_FS_DELAY`) has been removed. +- The [Position (GNSS) loss failsafe](../config/safety.md#position-loss-failsafe) configurable delay (`COM_POS_FS_DELAY`) has been removed. The failsafe will now trigger 1 second after position has been lost. ([PX4-Autopilot#24063](https://github.com/PX4/PX4-Autopilot/pull/24063)). - [Log Encryption](../dev_log/log_encryption.md) now generates an encrypted log that contains the public-key-encrypted symmetric key that can be used to decrypt it, instead of putting the key into a separate file. This makes log decryption much easier, as there is no need to download or identify a separate key file. @@ -138,7 +138,7 @@ Please continue reading for [upgrade instructions](#upgrade-guide). - mavlink_ftp: handle relative paths correctly. ([PX4-Autopilot#22980](https://github.com/PX4/PX4-Autopilot/pull/22980)) - Parameter to always start mavlink stream via USB. ([PX4-Autopilot#22234](https://github.com/PX4/PX4-Autopilot/pull/22234)) - Refactor: MAVLink message handling in one function, reference instead of pointer to main instance ([PX4-Autopilo#23219](https://github.com/PX4/PX4-Autopilot/pull/22234)) -- mavlink log handler rewrite for improved effeciency ([PX4-Autopilo#23219](https://github.com/PX4/PX4-Autopilot/pull/22234)) +- mavlink log handler rewrite for improved efficiency ([PX4-Autopilo#23219](https://github.com/PX4/PX4-Autopilot/pull/22234)) ### Multi-Rotor diff --git a/docs/en/releases/1.17.md b/docs/en/releases/1.17.md index 67728cca98..85643647da 100644 --- a/docs/en/releases/1.17.md +++ b/docs/en/releases/1.17.md @@ -9,11 +9,11 @@ const { site } = useData();
-

This page is on a release branch, and hence probably out of date. See the latest version.

+

This page is on a release branch, and hence probably out of date. See the latest version.

-This contains changes to PX4 planned for PX4 v1.17 (since the last major release [PX v1.16](../releases/1.16.md)). +This contains changes in PX4 v1.17 (since the last major release [PX v1.16](../releases/1.16.md)). ::: warning PX4 v1.17 is in alpha/beta testing. @@ -57,7 +57,7 @@ Please continue reading for [upgrade instructions](#upgrade-guide). --> -- [MC Neural Network Module](../advanced/neural_networkss.md) +- [MC Neural Network Module](../advanced/neural_networks.md) ### Estimation @@ -79,7 +79,7 @@ Please continue reading for [upgrade instructions](#upgrade-guide). - Add synthetic mecanum rover model: [PX4-gazebo-models#113](https://github.com/PX4/PX4-gazebo-models/pull/113) - Update synthetic ackermann rover model: [PX4-gazebo-models#117](https://github.com/PX4/PX4-gazebo-models/pull/117) -- [Simulation-in-Hardware (SIH)](../sim_sih/index.md#compatibility) +- [Simulation-in-Hardware (SIH)](../sim_sih/index.md#supported-vehicle-types) - New simulation: MC Hexacopter X - New simulation: Ackermann Rover diff --git a/docs/en/releases/index.md b/docs/en/releases/index.md index cb00c401d5..229e0d3b80 100644 --- a/docs/en/releases/index.md +++ b/docs/en/releases/index.md @@ -3,7 +3,7 @@ A list of PX4 release notes, they contain a list of the changes that went into each release, explaining the included features, bug fixes, deprecations and updates in detail. - [main](../releases/main.md) (changes planned for v1.18 or later) -- [v1.17](../releases/1.17.md) (changes planned for v1.17, since v1.16) +- [v1.17](../releases/1.17.md) (changes in v1.17, since v1.16) - [v1.16](../releases/1.16.md) - [v1.15](../releases/1.15.md) - [v1.14](../releases/1.14.md) diff --git a/docs/en/releases/main.md b/docs/en/releases/main.md index acee02d522..5aff2f6310 100644 --- a/docs/en/releases/main.md +++ b/docs/en/releases/main.md @@ -9,7 +9,7 @@ const { site } = useData();
-

This page is on a release branch, and hence probably out of date. See the latest version.

+

This page is on a release branch, and hence probably out of date. See the latest version.

@@ -22,7 +22,8 @@ Update these notes with features that are going to be in `main` (PX4 v1.18 or la ## Read Before Upgrading -- TBD … +- Log rotation is now enabled by default. Previously, a single log file grew for the entire flight and old logs were only deleted at boot once free space fell below a fixed 300 MB floor. The logger now caps each log file at [SDLOG_MAX_SIZE](../advanced_config/parameter_reference.md#SDLOG_MAX_SIZE) (new parameter, default `1024` MB) and keeps a configurable percentage of the disk free via [SDLOG_ROTATE](../advanced_config/parameter_reference.md#SDLOG_ROTATE) (new parameter, default `90`, so at least 10% free). Cleanup runs at log start rather than boot, so logs can still be downloaded via FTP before they are deleted. See [Log Cleanup](../dev_log/logging.md#log-cleanup) for details. +- `SDLOG_DIRS_MAX` behaviour changed: it is now an orthogonal directory-count cap that runs on top of the new space-based cleanup, and the default is `0` (disabled). Previously it enforced a fixed ~300 MB free-space floor even when set to `0`. If you relied on that implicit floor, set [SDLOG_ROTATE](../advanced_config/parameter_reference.md#SDLOG_ROTATE) instead. Please continue reading for [upgrade instructions](#upgrade-guide). @@ -40,16 +41,22 @@ Please continue reading for [upgrade instructions](#upgrade-guide). ### Common +- [Remote ID (Open Drone ID) in-flight failsafe](../peripherals/remote_id.md): extended [COM_ARM_ODID](../advanced_config/parameter_reference.md#COM_ARM_ODID) to also trigger a configurable failsafe action (Return, Land, or Terminate) if the Remote ID heartbeat is lost while airborne. Users previously on `COM_ARM_ODID=2` retain the same arming behaviour; set to `3` or higher to enable the in-flight action. ([PX4-Autopilot#27029](https://github.com/PX4/PX4-Autopilot/pull/27029)) - [QGroundControl Bootloader Update](../advanced_config/bootloader_update.md#qgc-bootloader-update-sys-bl-update) via the [SYS_BL_UPDATE](../advanced_config/parameter_reference.md#SYS_BL_UPDATE) parameter has been re-enabled after being broken for a number of releases. ([PX4-Autopilot#25032: build: romf: fix generation of rc.board_bootloader_upgrade](https://github.com/PX4/PX4-Autopilot/pull/25032)). +- [Feature: Allow prioritization of manual control inputs based on their instance number in ascending or descending order](../config/manual_control.md#px4-configuration). ([PX4-Autopilot#25602: Ascending and descending manual control input priorities](https://github.com/PX4/PX4-Autopilot/pull/25602)). ### Control - Added new flight mode(s): [Altitude Cruise (MC)](../flight_modes_mc/altitude_cruise.md), Altitude Cruise (FW). For fixed-wing the mode behaves the same as Altitude mode but you can disable the manual control loss failsafe. ([PX4-Autopilot#25435: Add new flight mode: Altitude Cruise](https://github.com/PX4/PX4-Autopilot/pull/25435)). +### Safety + +- Rotary-wing vehicles now support uncommanded altitude loss detection: if the vehicle descends more than [FD_ALT_LOSS](../advanced_config/parameter_reference.md#FD_ALT_LOSS) meters below its setpoint in altitude-controlled flight, flight termination (and parachute deployment) is triggered. See [Altitude Loss Trigger](../config/safety.md#altitude-loss-trigger). ([PX4-Autopilot#26837](https://github.com/PX4/PX4-Autopilot/pull/26837)) + ### Estimation -- TBD +- Added [EKF2_POS_LOCK](../advanced_config/parameter_reference.md#EKF2_POS_LOCK) to force constant position fusion while landed, useful for vehicles relying on dead-reckoning sensors (airspeed, optical flow) that provide no aiding on the ground. ### Sensors @@ -58,7 +65,7 @@ Please continue reading for [upgrade instructions](#upgrade-guide). ### Simulation -- TBD +- SIH: Add option to set wind velocity ([PX4-Autopilot#26467](https://github.com/PX4-Autopilot/pull/26467)) diff --git a/docs/en/sensor/airspeed.md b/docs/en/sensor/airspeed.md index c77b680ebb..90975951ae 100644 --- a/docs/en/sensor/airspeed.md +++ b/docs/en/sensor/airspeed.md @@ -11,8 +11,8 @@ For fixed-wing flight it is the airspeed that guarantees lift — not ground spe Recommended digital airspeed sensors include: - Based on [Pitot tube](https://en.wikipedia.org/wiki/Pitot_tube) - - I2C MEAS Spec series (e.g. [MS4525DO](https://www.te.com/usa-en/product-CAT-BLPS0002.html), [MS5525](https://www.te.com/usa-en/product-CAT-BLPS0003.html)) - - [mRo I2C Airspeed Sensor JST-GH MS4525DO](https://store.3dr.com/mro-i2c-airspeed-sensor-jst-gh-ms4525do/) (3DR store) + - I2C MEAS Spec series (e.g. [MS4525DO](https://www.te.com/en/product-20003581-00.html), [MS5525](https://www.te.com/usa-en/product-CAT-BLPS0003.html)) + - [mRo I2C Airspeed Sensor JST-GH MS4525DO](https://store.3dr.com/airspeed-sensor-jst-gh-ms4525do/) (3DR store) - [Digital Differential Airspeed Sensor Kit - MS4525DO](https://store-drotek.com/793-digital-differential-airspeed-sensor-kit-.html) (Drotek). - [Holybro Digital Air Speed Sensor - MS4525DO](https://holybro.com/collections/sensors/products/digital-air-speed-sensor-ms4525do) - [Holybro Digital Air Speed Sensor - MS5525DSO](https://holybro.com/collections/sensors/products/digital-air-speed-sensor-ms5525dso) @@ -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. diff --git a/docs/en/sensor/airspeed_tfslot.md b/docs/en/sensor/airspeed_tfslot.md index 413911ecbd..c95b404ff7 100644 --- a/docs/en/sensor/airspeed_tfslot.md +++ b/docs/en/sensor/airspeed_tfslot.md @@ -5,7 +5,7 @@ ![TFSLOT and TFSLOT WITH TFASPDIMU02 board](../../assets/hardware/sensors/airspeed/tsflot_compose.jpg) [TFSLOT](https://github.com/ThunderFly-aerospace/TFSLOT01) is an airspeed sensor based on venturi effects. -In the basic configuration, the TFSLOT is equipped with the [TFASPDIMU02](https://github.com/ThunderFly-aerospace/TFASPDIMU02) sensor board, which contains a differential pressure sensor ([Sensirion SDP3x series](https://sensirion.com/products/catalog/?filter_series=d1816d53-f5c8-47e3-ab47-818c3fd54259)) and a 9-axis motion tracking sensor ([ICM-20948](https://invensense.tdk.com/products/motion-tracking/9-axis/icm-20948/)). +In the basic configuration, the TFSLOT is equipped with the [TFASPDIMU02](https://github.com/ThunderFly-aerospace/TFASPDIMU02) sensor board, which contains a differential pressure sensor ([Sensirion SDP3x series](https://sensirion.com/products/catalog?filter_series=d1816d53-f5c8-47e3-ab47-818c3fd54259)) and a 9-axis motion tracking sensor ([ICM-20948](https://invensense.tdk.com/products/motion-tracking/9-axis/icm-20948/)). The IMU unit can be used as an external compass. - This design brings several advantages when used on small-scale and slow-flying UAVs. diff --git a/docs/en/sensor/grf_lidar.md b/docs/en/sensor/grf_lidar.md index 836596e026..4f48bc1884 100644 --- a/docs/en/sensor/grf_lidar.md +++ b/docs/en/sensor/grf_lidar.md @@ -55,8 +55,8 @@ The [parameters to change](../advanced_config/parameters.md) are listed in the t | Parameter | Description | | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------- | | [SENS_EN_GRF_CFG](../advanced_config/parameter_reference.md#SENS_EN_GRF_CFG) | Set to the serial port the sensor is connected to. | -| [GRF_UPDATE_CFG](../advanced_config/parameter_reference.md#GRF_UPDATE_CFG) | Set the update rate. | -| [GRF_SENS_MODEL](../advanced_config/parameter_reference.md#GRF_SENS_MODEL) | Set the update rate. | +| [GRF_RATE_CFG](../advanced_config/parameter_reference.md#GRF_RATE_CFG) | Set the update rate. | +| [GRF_SENS_MODEL](../advanced_config/parameter_reference.md#GRF_SENS_MODEL) | Set the sensor model to use. | ## Testing diff --git a/docs/en/sensor/index.md b/docs/en/sensor/index.md index 5521b35a39..bb1a39f77b 100644 --- a/docs/en/sensor/index.md +++ b/docs/en/sensor/index.md @@ -41,7 +41,7 @@ Optional: Enables a more accurate position lock than GPS alone, and can be used indoors when no GPS signal is available. - [Tachometers (Revolution Counters)](../sensor/tachometers.md) — Only used for logging. -Other optional: +Primarily for OEMs/Manufacturers: - [IMU/Compass Factory Calibration](../advanced_config/imu_factory_calibration.md) — Save calibration settings to persistent storage. - [Sensor Thermal Compensation](../advanced_config/sensor_thermal_calibration.md) — Compensate sensors for temperature variations. diff --git a/docs/en/sensor/inertial_navigation_systems.md b/docs/en/sensor/inertial_navigation_systems.md index bdf7f39b6d..971778ddc1 100644 --- a/docs/en/sensor/inertial_navigation_systems.md +++ b/docs/en/sensor/inertial_navigation_systems.md @@ -49,5 +49,4 @@ Essentially it is an AHRS that also includes position/velocity estimation. ## Further Information -- [What is an Inertial Navigation System?](https://www.vectornav.com/resources/inertial-navigation-articles/what-is-an-ins) (VectorNav) - [Inertial Navigation Primer](https://www.vectornav.com/resources/inertial-navigation-primer) (VectorNav) diff --git a/docs/en/sensor/inertiallabs.md b/docs/en/sensor/inertiallabs.md index 2d677e0d53..45fc7197a0 100644 --- a/docs/en/sensor/inertiallabs.md +++ b/docs/en/sensor/inertiallabs.md @@ -21,8 +21,8 @@ The mode is configurable using a parameter. [Get technical support or send requests to sales team](https://inertiallabs.com/inertial-labs-inc/contact-inertial-labs-team/). Recommended sensors: -- [INS-U GNSS/INS](https://inertiallabs.com/ins-u-datasheet): Recommended for fixed-wing systems without hovering, where static heading is not necessary. -- [INS-DU DUAL GNSS/INS](https://inertiallabs.com/ins-du-datasheet): Recommended for multicopter systems where hovering and low dynamics requires the use of static heading. +- [INS-U GNSS/INS](https://inertiallabs.com/wp-content/uploads/2026/01/INS-U_INS-U-OEM_Datasheet_REV2.18_JAN2026.pdf): Recommended for fixed-wing systems without hovering, where static heading is not necessary. +- [INS-DU DUAL GNSS/INS](https://inertiallabs.com/wp-content/uploads/2025/12/INS-DU_INS-DU-OEM_Datasheet_REV1.00_DEC2025.pdf): Recommended for multicopter systems where hovering and low dynamics requires the use of static heading. ## Hardware Setup diff --git a/docs/en/sensor/lidar_lite.md b/docs/en/sensor/lidar_lite.md index 56162491fe..7c7bc4a5e1 100644 --- a/docs/en/sensor/lidar_lite.md +++ b/docs/en/sensor/lidar_lite.md @@ -6,7 +6,7 @@ LIDAR-Lite is a compact, high-performance optical distant measurement sensor sol ## Where to Buy -- [LIDAR-Lite v3](https://buy.garmin.com/en-AU/AU/p/557294) (5cm - 40m) +- [LIDAR-Lite v3](https://www.garmin.com/en-AU/p/557294/) (5cm - 40m) ## Pinouts diff --git a/docs/en/sensor/microstrain.md b/docs/en/sensor/microstrain.md index 9a6964180d..5ae6d3d448 100644 --- a/docs/en/sensor/microstrain.md +++ b/docs/en/sensor/microstrain.md @@ -7,10 +7,10 @@ Widely used across industries like aerospace, robotics, industrial automation, a The driver currently supports the following hardware: -- [`MicroStrain CV7-AR`](https://www.hbkworld.com/en/products/transducers/inertial-sensors/vertical-reference-units--vru-/3dm-cv7-ar): Inertial Measurement Unit (IMU) and Vertical Reference Unit (VRU) -- [`MicroStrain CV7-AHRS`](https://www.hbkworld.com/en/products/transducers/inertial-sensors/attitude-and-heading-reference-systems--ahrs-/3dm-cv7-ahrs): Inertial Measurement Unit (IMU) and Attitude Heading Reference System (AHRS) -- [`MicroStrain CV7-INS`](https://www.hbkworld.com/en/products/transducers/inertial-sensors/inertial-navigation-systems--ins-/3dm-cv7-ins): Inertial Measurement Unit (IMU) and Inertial Navigation System (INS). -- [`MicroStrain CV7-GNSS/INS`](https://www.hbkworld.com/en/products/transducers/inertial-sensors/inertial-navigation-systems--ins-/3dm-cv7-gnss-ins): Inertial Measurement Unit (IMU) and Inertial Navigation System (INS) combined with dual multiband (GNSS) receivers. +- [`MicroStrain CV7-AR`](https://www.hbkworld.com/en/products/transducers/inertial-sensors/vertical-reference/3dm-cv7-ar): Inertial Measurement Unit (IMU) and Vertical Reference Unit (VRU) +- [`MicroStrain CV7-AHRS`](https://www.hbkworld.com/en/products/transducers/inertial-sensors/attitude-and-heading/3dm-cv7-ahrs): Inertial Measurement Unit (IMU) and Attitude Heading Reference System (AHRS) +- [`MicroStrain CV7-INS`](https://www.hbkworld.com/en/products/transducers/inertial-sensors/navigation/3dm-cv7-ins): Inertial Measurement Unit (IMU) and Inertial Navigation System (INS). +- [`MicroStrain CV7-GNSS/INS`](https://www.hbkworld.com/en/products/transducers/inertial-sensors/navigation/3dm-cv7-gnss-ins): Inertial Measurement Unit (IMU) and Inertial Navigation System (INS) combined with dual multiband (GNSS) receivers. PX4 can use these sensors to provide raw IMU data for EKF2 or to replace EKF2 as an external INS. For more information, including user manuals and datasheets, please refer to the sensors product page. @@ -18,7 +18,7 @@ For more information, including user manuals and datasheets, please refer to the ## Where to Buy MicroStrain sensors can be purchased through HBK's official [MicroStrain product page](https://www.hbkworld.com/en/products/transducers/inertial-sensors) or through authorized distributors globally. -For large orders, custom requirements, or technical inquiries, reach out directly to [sales](https://www.hbkworld.com/en/contact-us/contact-sales-microstrain) +For large orders, custom requirements, or technical inquiries, reach out directly to [sales](https://www.hbkworld.com/en/contact-us) ## Hardware Setup diff --git a/docs/en/sensor/optical_flow.md b/docs/en/sensor/optical_flow.md index f76a40b4bb..3a6da0f3cf 100644 --- a/docs/en/sensor/optical_flow.md +++ b/docs/en/sensor/optical_flow.md @@ -34,6 +34,12 @@ The output of the flow when moving in different directions must be as follows: | Right | - X | | Left | + X | +::: info +The integrated flow values are **angular measurements** (radians) representing rotation of the image about the sensor's body axes using the right-hand convention. +They are _not_ translational displacements along those axes, which is why forward vehicle movement (along X) appears in the Y flow axis, and rightward movement (along Y) appears in the X flow axis. +Specifically, forward movement causes the ground image to rotate about the Y axis (+ Y), while rightward movement causes a negative rotation about the X axis (- X). +::: + Sensor data from the optical flow device is fused with other velocity data sources. The approach used for fusing sensor data and any offsets from the center of the vehicle must be configured in the [estimator](#estimators). @@ -71,7 +77,7 @@ It is used in a number of products, including some from: Bitcraze, Tindie, Hex, ### Other Cameras/Sensors It is also possible to use a board/quad that has an integrated camera. -For this the [Optical Flow repo](https://github.com/PX4/OpticalFlow) can be used (see also [snap_cam](https://github.com/PX4/snap_cam)). +For this the [Optical Flow repo](https://github.com/PX4/PX4-OpticalFlow) can be used (see also [snap_cam](https://github.com/PX4/snap_cam)). ## Range Finders diff --git a/docs/en/sensor/px4flow.md b/docs/en/sensor/px4flow.md index d0d5104758..83edc7f785 100644 --- a/docs/en/sensor/px4flow.md +++ b/docs/en/sensor/px4flow.md @@ -5,4 +5,4 @@ PX4 does not support the PX4Flow [optical flow](../sensor/optical_flow.md) sensor from PX4 v1.13 (it doesn't work with current firmware). PX4 may work with older PX4Flow firmware. -Documentation has been removed (if needed, see [Legacy Docs for PX4Flow in v1.13](https://docs.px4.io/v1.13/en/sensor/px4flow.html)). +Documentation has been removed (if needed, see [Legacy Docs for PX4Flow in v1.13](https://docs.px4.io/v1.13/en/sensor/px4flow)). diff --git a/docs/en/sensor/rangefinders.md b/docs/en/sensor/rangefinders.md index 425b129241..90e1b6a0e9 100644 --- a/docs/en/sensor/rangefinders.md +++ b/docs/en/sensor/rangefinders.md @@ -93,7 +93,7 @@ It has a sensor range from (5cm - 40m) and can be connected to either PWM or I2C ### MaxBotix I2CXL-MaxSonar-EZ -The MaxBotix [I2CXL-MaxSonar-EZ](https://www.maxbotix.com/product-category/i2cxl-maxsonar-ez-products) range has a number of relatively short-ranged sonar based rangefinders that are suitable for assisted takeoff/landing and collision avoidance. +The MaxBotix [I2CXL-MaxSonar-EZ](https://maxbotix.com/collections/i2cxl-maxsonar-ez-products) range has a number of relatively short-ranged sonar based rangefinders that are suitable for assisted takeoff/landing and collision avoidance. These can be connected using an I2C port. The rangefinders are enabled using the parameter [SENS_EN_MB12XX](../advanced_config/parameter_reference.md#SENS_EN_MB12XX). @@ -163,7 +163,7 @@ Features: - [VL53L1CBV0FY-1](https://www.st.com/resource/en/datasheet/vl53l1.pdf) sensor - Input voltage sensor -- CAN connectors: 2 [UCANPHY Micro (JST-GH 4)](https://raccoonlabdev.github.io/docs/guide/wires/). +- CAN connectors: 2 [UCANPHY Micro (JST-GH 4)](https://docs.raccoonlab.co/guide/wires/). ## Configuration/Setup {#configuration} diff --git a/docs/en/sensor/sbgecom.md b/docs/en/sensor/sbgecom.md index 2115f1f4c1..60b79771af 100644 --- a/docs/en/sensor/sbgecom.md +++ b/docs/en/sensor/sbgecom.md @@ -2,7 +2,7 @@ [SBG-Systems](https://www.sbg-systems.com/) designs, manufactures, and support an extensive range of state-of-the-art inertial sensors such as Inertial Measurement Units (IMU), Attitude and Heading Reference Systems (AHRS), Inertial Navigation Systems with embedded GNSS (INS/GNSS), and so on. -PX4 supports [all SBG Systems products](https://www.sbg-systems.com/products/) and can use these as an [external INS](../sensor/inertial_navigation_systems.md) (bypassing/replacing the EKF2 estimator), or as a source of raw sensor data provided to the navigation estimator. +PX4 supports [all SBG Systems products](https://www.sbg-systems.com/) and can use these as an [external INS](../sensor/inertial_navigation_systems.md) (bypassing/replacing the EKF2 estimator), or as a source of raw sensor data provided to the navigation estimator. ![Ellipse](../../assets/hardware/sensors/inertial/ellipse-inertial-navigation-system.png) @@ -17,7 +17,7 @@ SBG Systems products provide a range of benefits to PX4 users and can be integra The sbgECom PX4 driver is streamlined to provide a simple plug-and-play architecture, removing engineering obstacles and allowing the acceleration of the design, development, and launch of platforms to keep pace with the rapid rate of innovation. -The driver supports [all SBG Systems products](https://www.sbg-systems.com/products/). +The driver supports [all SBG Systems products](https://www.sbg-systems.com/). In particular the following systems are recommended: - **Pulse:** Recommended for fixed-wing systems without hovering, where static heading is not necessary. @@ -142,5 +142,5 @@ Published topics can be viewed using the `listener` command. ## Hardware Specifications -- [Product Briefs](https://www.sbg-systems.com/products/) +- [Product Briefs](https://www.sbg-systems.com/) - [Datasheets](https://www.sbg-systems.com/contact/#products) diff --git a/docs/en/sensor/sf45_rotating_lidar.md b/docs/en/sensor/sf45_rotating_lidar.md index 796c194440..39dc53a02b 100644 --- a/docs/en/sensor/sf45_rotating_lidar.md +++ b/docs/en/sensor/sf45_rotating_lidar.md @@ -12,7 +12,7 @@ You will need to [create and use a custom build](#add-the-driver-to-the-px4-buil ## LightWare Studio Setup -In the [LightWare Studio](https://www.lightwarelidar.com/resources-software) app set following values: +In the [LightWare Studio](https://lightwarelidar.com/resources-software/) app set following values: | Parameter | Description | | --------- | ----------- | diff --git a/docs/en/sensor/sfxx_lidar.md b/docs/en/sensor/sfxx_lidar.md index 2ca57d9972..ea17162b36 100644 --- a/docs/en/sensor/sfxx_lidar.md +++ b/docs/en/sensor/sfxx_lidar.md @@ -9,14 +9,14 @@ These are useful for applications including terrain following, precision hoverin The following models are supported by PX4, and can be connected to either the I2C or Serial bus (the tables below indicates what bus can be used for each model). -| Model | Range (m) | Bus | Description | -| ------------------------------------------------------- | --------- | ----------------- | ------------------------------------------------------------------------------------------ | -| [SF11/C](https://lightwarelidar.com/shop/sf11-c-100-m/) | 100 | Serial or I2C bus | -| [LW20/C](https://lightware.co.za/products/lw20-c-100-m) | 100 | I2C bus | Waterproofed (IP67) with servo for sense-and-avoid applications | -| [SF30/D](https://lightwarelidar.com/shop/sf30-d-200-m/) | 200 | I2C bus | Waterproofed (IP67) | -| [SF45/B](../sensor/sf45_rotating_lidar.md) | 50 | Serial | Rotary Lidar (Used for [Collision Prevention](../computer_vision/collision_prevention.md)) | -| [GRF250](../sensor/grf_lidar.md) | 250 | Serial or I2C | Gimbal Range Finder | -| [GRF500](../sensor/grf_lidar.md) | 500 | Serial or I2C | Gimbal Range Finder | +| Model | Range (m) | Bus | Description | +| ---------------------------------------------------------- | --------- | ----------------- | ------------------------------------------------------------------------------------------ | +| [SF11/C](https://lightwarelidar.com/shop/sf11-c-100-m/) | 100 | Serial or I2C bus | +| [LW20/C](https://lightwarelidar.com/products/lw20-c-100-m) | 100 | I2C bus | Waterproofed (IP67) with servo for sense-and-avoid applications | +| [SF30/D](https://lightwarelidar.com/shop/sf30-d-200-m/) | 200 | I2C bus | Waterproofed (IP67) | +| [SF45/B](../sensor/sf45_rotating_lidar.md) | 50 | Serial | Rotary Lidar (Used for [Collision Prevention](../computer_vision/collision_prevention.md)) | +| [GRF250](../sensor/grf_lidar.md) | 250 | Serial or I2C | Gimbal Range Finder | +| [GRF500](../sensor/grf_lidar.md) | 500 | Serial or I2C | Gimbal Range Finder | ::: details Discontinued diff --git a/docs/en/sensor/teraranger.md b/docs/en/sensor/teraranger.md index 4faed11532..a3d9fc7dcf 100644 --- a/docs/en/sensor/teraranger.md +++ b/docs/en/sensor/teraranger.md @@ -1,12 +1,17 @@ -# TeraRanger Rangefinders +# TeraRanger Rangefinders (Discontinued) + +::: warning +TeraRanger Evo sensors were discontinued by Terabee in May 2024. +Limited stock may still be available from third-party resellers such as [Tribotix](https://tribotix.com/product/teraranger-evo-60m/). +::: TeraRanger provide a number of lightweight distance measurement sensor based on infrared Time-of-Flight (ToF) technology. They are typically faster and have greater range than sonar, and smaller and lighter than laser-based systems. PX4 supports: -- [TeraRanger Evo 60m](https://www.terabee.com/shop/lidar-tof-range-finders/teraranger-evo-60m/) (0.5 – 60 m) -- [TeraRanger Evo 600Hz](https://www.terabee.com/shop/lidar-tof-range-finders/teraranger-evo-600hz/) (0.75 - 8 m) +- [TeraRanger Evo 60m](https://tribotix.com/product/teraranger-evo-60m/) (0.5 – 60 m) +- [TeraRanger Evo 600Hz](https://tribotix.com/product/teraranger-evo-600hz/) (0.75 - 8 m) ::: info PX4 also supports _TeraRanger One_ (I2C adapter required). diff --git a/docs/en/sensor/thunderfly_tachometer.md b/docs/en/sensor/thunderfly_tachometer.md index 779af6f29a..b4f7c0bb71 100644 --- a/docs/en/sensor/thunderfly_tachometer.md +++ b/docs/en/sensor/thunderfly_tachometer.md @@ -31,7 +31,7 @@ The LED lights up when the pulse input is grounded or exposed to logical 0, so y Hall-Effect sensors (magnetically operated) are ideal for harsh environments, where dirt, dust, and water can contact the sensed rotor. Many different hall effect sensors are commercially available. -For example, a [55100 Miniature Flange Mounting Proximity Sensor](https://m.littelfuse.com/media?resourcetype=datasheets&itemid=6d69d457-770e-46ba-9998-012c5e0aedd7&filename=littelfuse-hall-effect-sensors-55100-datasheet) is a good choice. +For example, a [55100 Miniature Flange Mounting Proximity Sensor](https://www.littelfuse.com/assetdocs/littelfuse-hall-effect-sensors-55100-datasheet?assetguid=6d69d457-770e-46ba-9998-012c5e0aedd7) is a good choice. ![Example of Hall effect probe](../../assets/hardware/sensors/tfrpm/hall_probe.jpg) @@ -90,7 +90,7 @@ pcf8583 status ``` If the driver is running, the I²C port will be printed along with other basic parameters of the running instance. -If the driver is not running it can be started started using theprocedure described above. +If the driver is not running it can be started using theprocedure described above. The [listener](../modules/modules_command.md#listener) command allows you to monitor RPM UORB messages from the running driver. diff --git a/docs/en/sensor/vectornav.md b/docs/en/sensor/vectornav.md index cbe8f7b53a..a26d69ebe2 100644 --- a/docs/en/sensor/vectornav.md +++ b/docs/en/sensor/vectornav.md @@ -42,7 +42,7 @@ This can be changed to any rigid rotation using the VectorNav Reference Frame Ro If using a GNSS-enabled product, the GNSS antenna must be mounted rigidly with respect to the inertial sensor and with an unobstructed sky view. If using a dual-GNSS-enabled product (VN-3X0), the secondary antenna must be mounted rigidly with respect to the primary antenna and the inertial sensor with an unobstructed sky view. -For more mounting requirements and recommendations, see the relevant [Quick Start Guide](https://www.vectornav.com/resources/quick-start-guides). +For more mounting requirements and recommendations, see the relevant [Quick Start Guide](https://www.vectornav.com/resources/technical-documentation/quick-start-guides). ## Firmware Configuration @@ -76,7 +76,7 @@ IMU data should be published at 800Hz (400Hz if using VN-300). ## VectorNav Configuration -Definitions for all commands and registers referenced in this section can be found in the respective [VectorNav ICD](https://www.vectornav.com/resources/interface-control-documents). +Definitions for all commands and registers referenced in this section can be found in the respective [VectorNav ICD](https://www.vectornav.com/resources/technical-documentation/interface-control-documents). Upon initialization, PX4 configures the VectorNav unit as follows: @@ -131,5 +131,5 @@ Published topics can be viewed using the `listener` command. ## Hardware Specifications -- [Product Briefs](https://www.vectornav.com/resources/product-briefs) -- [Datasheets](https://www.vectornav.com/resources/datasheets) +- [Product Briefs](https://www.vectornav.com/resources/product-information/product-briefs) +- [Datasheets](https://www.vectornav.com/resources/technical-documentation/datasheets) diff --git a/docs/en/sensor_bus/translator_tfi2cadt.md b/docs/en/sensor_bus/translator_tfi2cadt.md index 0c12106d78..002a47eedf 100644 --- a/docs/en/sensor_bus/translator_tfi2cadt.md +++ b/docs/en/sensor_bus/translator_tfi2cadt.md @@ -13,7 +13,7 @@ The module contains two pairs of connectors, each pair responsible for different ::: info [TFI2CADT01](https://github.com/ThunderFly-aerospace/TFI2CADT01) is designed as open-source hardware with GPLv3 license. -It is commercially available from [ThunderFly](https://www.thunderfly.cz/) company or from [Tindie eshop](https://www.tindie.com/products/26353/). +It is commercially available from [ThunderFly](https://www.thunderfly.cz/) company or from [Tindie eshop](https://www.tindie.com/products/thunderfly/tfi2cadt01-pixhawk-i2c-address-translator/). ::: ## Address Translation Method @@ -30,7 +30,7 @@ If you need your own value for address translation, changing the configuration r The tachometer sensor [TFRPM01](../sensor/thunderfly_tachometer.md) can be set to two different addresses using a solder jumper. If the autopilot has three buses, only 6 sensors can be connected and no bus remains free (2 available addresses \* 3 I2C ports). In some multicopters or VTOL solutions, there is a need to measure the RPM of 8 or more elements. -The [TFI2CADT01](https://www.tindie.com/products/26353/) is highly recommended in this case. +The [TFI2CADT01](https://www.tindie.com/products/thunderfly/tfi2cadt01-pixhawk-i2c-address-translator/) is highly recommended in this case. ![Multiple sensors](../../assets/peripherals/i2c_tfi2cadt/tfi2cadt01_multi_tfrpm01.jpg) diff --git a/docs/en/sim_gazebo_classic/index.md b/docs/en/sim_gazebo_classic/index.md index fe46a05255..8437a55744 100644 --- a/docs/en/sim_gazebo_classic/index.md +++ b/docs/en/sim_gazebo_classic/index.md @@ -345,7 +345,7 @@ The video below shows that the location of the environment is aligned with the w For extended development sessions it might be more convenient to start Gazebo Classic and PX4 separately or even from within an IDE. -In addition to the existing cmake targets that run `sitl_run.sh` with parameters for px4 to load the correct model it creates a launcher targets named `px4_` that is a thin wrapper around original sitl px4 app. +In addition to the existing cmake targets that run `sitl_run.sh` with parameters for PX4 to load the correct model it creates a launcher targets named `px4_` that is a thin wrapper around original sitl PX4 app. This thin wrapper simply embeds app arguments like current working directories and the path to the model file. To start Gazebo Classic and PX4 separately: @@ -365,7 +365,7 @@ To start Gazebo Classic and PX4 separately: - In your IDE select `px4_` target you want to debug (e.g. `px4_iris`) - Start the debug session directly from IDE -This approach significantly reduces the debug cycle time because simulator is always running in background and you only re-run the px4 process which is very light. +This approach significantly reduces the debug cycle time because simulator is always running in background and you only re-run the PX4 process which is very light. ## Simulated Survey Camera diff --git a/docs/en/sim_gazebo_gz/gazebo_models.md b/docs/en/sim_gazebo_gz/gazebo_models.md index 34af877400..623cf8e711 100644 --- a/docs/en/sim_gazebo_gz/gazebo_models.md +++ b/docs/en/sim_gazebo_gz/gazebo_models.md @@ -45,7 +45,7 @@ You can connect a PX4-enabled vehicle to an instance of _gz-server_ using severa You can then drag and drop any PX4 model into your simulation. ::: info - These models are taken from an web-server called [Gazebo Fuel](https://app.gazebosim.org/dashboard), which essentially acts as an online database for all types of models and worlds that can be launched in Gazebo. + These models are taken from an web-server called [Gazebo Fuel](https://app.gazebosim.org/PX4), which essentially acts as an online database for all types of models and worlds that can be launched in Gazebo. ::: After dropping the vehicle of your choice into Gazebo, launch PX4 SITL with: diff --git a/docs/en/sim_gazebo_gz/index.md b/docs/en/sim_gazebo_gz/index.md index 8f4ed2fee8..100b6e8f06 100644 --- a/docs/en/sim_gazebo_gz/index.md +++ b/docs/en/sim_gazebo_gz/index.md @@ -5,7 +5,7 @@ Gazebo was previously known as "Gazebo Ignition" (while _Gazebo Classic_ was pre See the [official blog post](https://www.openrobotics.org/blog/2022/4/6/a-new-era-for-gazebo) for more information. ::: -[Gazebo](https://gazebosim.org/home) is an open source robotics simulator. +[Gazebo](https://gazebosim.org/docs/latest/getstarted/) is an open source robotics simulator. It supersedes the older [Gazebo Classic](../sim_gazebo_classic/index.md) simulator, and is the only supported version of Gazebo for Ubuntu 22.04 and onwards. **Supported Vehicles:** Quadrotor, Plane, VTOL, Rover @@ -301,7 +301,7 @@ where `ARGS` is a list of environment variables including: - `PX4_GZ_FOLLOW_OFFSET_X`, `PX4_GZ_FOLLOW_OFFSET_Y`, `PX4_GZ_FOLLOW_OFFSET_Z`: Set the relative offset of the follow camera to the vehicle. -The PX4 Gazebo worlds and and models databases [can be found on GitHub here](https://github.com/PX4/PX4-gazebo-models). +The PX4 Gazebo worlds and models databases [can be found on GitHub here](https://github.com/PX4/PX4-gazebo-models). ::: info `gz_env.sh.in` is compiled and made available in `$PX4_DIR/build/px4_sitl_default/rootfs/gz_env.sh` diff --git a/docs/en/sim_gazebo_gz/tools_avl_automation.md b/docs/en/sim_gazebo_gz/tools_avl_automation.md index 68ecaade04..a1a884cfe0 100644 --- a/docs/en/sim_gazebo_gz/tools_avl_automation.md +++ b/docs/en/sim_gazebo_gz/tools_avl_automation.md @@ -118,7 +118,7 @@ From the stability derivatives log file, the following advanced lift drag plugin | CYa | CYa | dCy/da (sideforce slope wrt alpha) | | Cla | Cell | dCl/da (roll moment slope wrt alpha) | | Cma | Cema | dCm/da (pitching moment slope wrt aLpha - before stall) | -| Cna | Cena | dCn/da (yaw moment slope wrt alpha) | +| Can | Cena | dCn/da (yaw moment slope wrt alpha) | | CLb | CLb | dCL/dbeta (lift coefficient slope wrt beta) | | CYb | CYb | dCY/dbeta (side force slope wrt beta) | | Clb | Cell | dCl/dbeta (roll moment slope wrt beta) | diff --git a/docs/en/sim_gazebo_gz/vehicles.md b/docs/en/sim_gazebo_gz/vehicles.md index 10f377d465..0c32cb68bd 100644 --- a/docs/en/sim_gazebo_gz/vehicles.md +++ b/docs/en/sim_gazebo_gz/vehicles.md @@ -8,7 +8,7 @@ Supported vehicle types include: mutirotor, VTOL, Plane, Rover. :::warning See [Gazebo Classic Vehicles](../sim_gazebo_classic/vehicles.md) for vehicles that work with the older [Gazebo "Classic" simulation](../sim_gazebo_classic/index.md). -Note that vehicle models are not interchangable between the two versions of the simulator: the vehicles on this page only work with (new) [Gazebo](../sim_gazebo_gz/index.md). +Note that vehicle models are not interchangeable between the two versions of the simulator: the vehicles on this page only work with (new) [Gazebo](../sim_gazebo_gz/index.md). ::: ## Multicopter @@ -114,6 +114,11 @@ This model has a [gimbal](../advanced/gimbal_control.md) attached to the front w The gimbal joints uses position control with a kinematic chain ZXY. +According to the file [Gimbal model.sdf file](https://github.com/PX4/PX4-gazebo-models/blob/main/models/gimbal/model.sdf): + +- the default horizontal field of view is 2.0 rad ~= 115° +- the default vertical field of view is 0.8848 rad ~= 50.7° + ![Quadrotor(x500) with gimbal (Front-facing) in Gazebo](../../assets/simulation/gazebo/vehicles/x500_gimbal.png). ```sh diff --git a/docs/en/sim_gazebo_gz/worlds.md b/docs/en/sim_gazebo_gz/worlds.md index 8d10d50754..32f047db39 100644 --- a/docs/en/sim_gazebo_gz/worlds.md +++ b/docs/en/sim_gazebo_gz/worlds.md @@ -104,4 +104,4 @@ The PX4 toolchain will automatically spawn a world that has the same name as the The model specific worlds are: -- [Aruco world](#aruco): Default world with an [ArUco marker](https://docs.opencv.org/4.x/d5/dae/tutorial_aruco_detection.html) that can be used with with [x500_mono_cam_down](../sim_gazebo_gz/vehicles.md#x500-quadrotor-with-monocular-camera-down-facing) for testing [precision landing](../advanced_features/precland.md). +- [Aruco world](#aruco): Default world with an [ArUco marker](https://docs.opencv.org/4.x/d5/dae/tutorial_aruco_detection.html) that can be used with [x500_mono_cam_down](../sim_gazebo_gz/vehicles.md#x500-quadrotor-with-monocular-camera-down-facing) for testing [precision landing](../advanced_features/precland.md). diff --git a/docs/en/sim_hawkeye/index.md b/docs/en/sim_hawkeye/index.md new file mode 100644 index 0000000000..15d8d2ed28 --- /dev/null +++ b/docs/en/sim_hawkeye/index.md @@ -0,0 +1,61 @@ +# Hawkeye Visualizer + +[Hawkeye](https://px4.github.io/Hawkeye/) is a real-time 3D flight _visualizer_ for PX4. + +Hawkeye is the natural pair for [SIH](../sim_sih/index.md) — SIH runs the physics of an aircraft simulation and outputs MAVLink [HIL_STATE_QUATERNION](https://mavlink.io/en/messages/common.html#HIL_STATE_QUATERNION) messages, Hawkeye uses these to show you what's happening. + +Hawkeye has zero runtime dependencies, supports up to 16 vehicles simultaneously, and can replay PX4 ULog (`.ulg`) flight logs with transport controls, markers, and multi-drone correlation analysis. + +## Install + +### macOS (Homebrew) + +```sh +brew tap PX4/px4 +brew install PX4/px4/hawkeye +``` + +### Linux (Debian/Ubuntu) + +Download the `.deb` from the [Hawkeye releases page](https://github.com/PX4/Hawkeye/releases/latest): + +```sh +sudo dpkg -i hawkeye-*.deb +``` + +### Windows and source builds + +For Ubuntu 24.04 or later in WSL2 you can install the packages in the same way: + +```sh +sudo dpkg -i hawkeye-*.deb +``` + +For other versions of Ubuntu (or native Windows builds) you may need to [Build from source](https://px4.github.io/Hawkeye/developer/build) (Hawkeye docs). + +## Usage with SIH + +Start PX4 SIH, then launch Hawkeye in a separate terminal: + +```sh +# Terminal 1 +make px4_sitl sihsim_quadx + +# Terminal 2 +hawkeye +``` + +Hawkeye listens on UDP port 19410 — the same port SIH sends [HIL_STATE_QUATERNION](https://mavlink.io/en/messages/common.html#HIL_STATE_QUATERNION) on — so no configuration is needed. +The vehicle appears in the Hawkeye window as soon as SIH starts streaming. + +For fixed-wing or tailsitter simulation, Hawkeye auto-detects the vehicle type from MAVLink `HEARTBEAT` and loads the matching 3D model. + +## Full documentation + +Complete documentation — including multi-vehicle SITL, ULog replay, HUD modes, camera controls, and correlation analysis — lives at **[px4.github.io/Hawkeye](https://px4.github.io/Hawkeye/)**. + +- [First SITL run](https://px4.github.io/Hawkeye/first-sitl) — the shortest path from install to seeing a vehicle move +- [Multi-Drone Replay](https://px4.github.io/Hawkeye/multi_drone) — compare multiple flights with deconfliction and correlation +- [Live SITL Integration](https://px4.github.io/Hawkeye/sitl) — single-vehicle and multi-instance swarm workflows +- [Command-Line Reference](https://px4.github.io/Hawkeye/cli) — every CLI flag with examples +- [Source code](https://github.com/PX4/Hawkeye) diff --git a/docs/en/sim_jmavsim/index.md b/docs/en/sim_jmavsim/index.md index f8e25ef607..5bfcd1ca0e 100644 --- a/docs/en/sim_jmavsim/index.md +++ b/docs/en/sim_jmavsim/index.md @@ -22,36 +22,31 @@ jMAVSim can also be used for HITL Simulation ([as shown here](../simulation/hitl ## Installation -jMAVSim setup is included in our [standard build instructions](../dev_setup/dev_env.md) for Ubuntu Linux and Windows. -Follow the instructions below to install jMAVSim on macOS. +jMAVSim requires JDK 17 or later. +On Ubuntu and Windows, the [standard development environment setup](../dev_setup/dev_env.md) scripts install all required dependencies including Java. +On macOS, you need to install Java manually as shown below. ### macOS -To setup the environment for [jMAVSim](../sim_jmavsim/index.md) simulation: +jMAVSim requires OpenJDK 17 or later. +Install it via Homebrew: -1. Install a recent version of Java (e.g. Java 15). - You can download [Java 15 (or later) from Oracle](https://www.oracle.com/java/technologies/downloads/?er=221886) or use [Eclipse Temurin](https://adoptium.net): +```sh +brew install openjdk@17 +``` - ```sh - brew install --cask temurin - ``` +Homebrew installs OpenJDK but does not link it into your `PATH`, so you need to set `JAVA_HOME` for jMAVSim to find it. +Add this to your shell profile (e.g. `~/.zshrc`): -1. Install jMAVSim: - - ```sh - brew install px4-sim-jmavsim - ``` - - :::warning - PX4 v1.11 and beyond require at least JDK 15 for jMAVSim simulation. - - For earlier versions, macOS users might see the error `Exception in thread "main" java.lang.UnsupportedClassVersionError:`. - You can find the fix in the [jMAVSim with SITL > Troubleshooting](../sim_jmavsim/index.md#troubleshooting)). - ::: +```sh +export JAVA_HOME=$(/usr/libexec/java_home -v 17) +``` ## Simulation Environment -Software in the Loop Simulation runs the complete system on the host machine and simulates the autopilot. It connects via local network to the simulator. The setup looks like this: +Software in the Loop Simulation runs the complete system on the host machine and simulates the autopilot. +It connects via local network to the simulator. +The setup looks like this: [![Mermaid graph: SITL Simulator](https://mermaid.ink/img/eyJjb2RlIjoiZ3JhcGggTFI7XG4gIFNpbXVsYXRvci0tPk1BVkxpbms7XG4gIE1BVkxpbmstLT5TSVRMOyIsIm1lcm1haWQiOnsidGhlbWUiOiJkZWZhdWx0In0sInVwZGF0ZUVkaXRvciI6ZmFsc2V9)](https://mermaid-js.github.io/mermaid-live-editor/#/edit/eyJjb2RlIjoiZ3JhcGggTFI7XG4gIFNpbXVsYXRvci0tPk1BVkxpbms7XG4gIE1BVkxpbmstLT5TSVRMOyIsIm1lcm1haWQiOnsidGhlbWUiOiJkZWZhdWx0In0sInVwZGF0ZUVkaXRvciI6ZmFsc2V9) @@ -94,7 +89,8 @@ It will also bring up a window showing a 3D view of the [jMAVSim](https://github ## Taking it to the Sky -The system will start printing status information. You will be able to start flying once you have a position lock (shortly after the console displays the message: _EKF commencing GPS fusion_). +The system will start printing status information. +You will be able to start flying once you have a position lock (shortly after the console displays the message: _EKF commencing GPS fusion_). To takeoff enter the following into the console: @@ -196,8 +192,8 @@ Lockstep makes it possible to [change the simulation speed](#change-simulation-s The sequence of steps for lockstep are: 1. The simulation sends a sensor message [HIL_SENSOR](https://mavlink.io/en/messages/common.html#HIL_SENSOR) including a timestamp `time_usec` to update the sensor state and time of PX4. -1. PX4 receives this and does one iteration of state estimation, controls, etc. and eventually sends an actuator message [HIL_ACTUATOR_CONTROLS](https://mavlink.io/en/messages/common.html#HIL_ACTUATOR_CONTROLS). -1. The simulation waits until it receives the actuator/motor message, then simulates the physics and calculates the next sensor message to send to PX4 again. +2. PX4 receives this and does one iteration of state estimation, controls, etc. and eventually sends an actuator message [HIL_ACTUATOR_CONTROLS](https://mavlink.io/en/messages/common.html#HIL_ACTUATOR_CONTROLS). +3. The simulation waits until it receives the actuator/motor message, then simulates the physics and calculates the next sensor message to send to PX4 again. The system starts with a "freewheeling" period where the simulation sends sensor messages including time and therefore runs PX4 until it has initialized and responds with an actuator message. @@ -217,11 +213,13 @@ To disable lockstep in: ## Extending and Customizing -To extend or customize the simulation interface, edit the files in the **Tools/jMAVSim** folder. The code can be accessed through the[jMAVSim repository](https://github.com/px4/jMAVSim) on Github. +To extend or customize the simulation interface, edit the files in the **Tools/jMAVSim** folder. +The code can be accessed through the[jMAVSim repository](https://github.com/px4/jMAVSim) on Github. ::: info The build system enforces the correct submodule to be checked out for all dependencies, including the simulator. -It will not overwrite changes in files in the directory, however, when these changes are committed the submodule needs to be registered in the Firmware repo with the new commit hash. To do so, `git add Tools/jMAVSim` and commit the change. +It will not overwrite changes in files in the directory, however, when these changes are committed the submodule needs to be registered in the Firmware repo with the new commit hash. +To do so, `git add Tools/jMAVSim` and commit the change. This will update the GIT hash of the simulator. ::: @@ -234,6 +232,75 @@ The simulation can be [interfaced to ROS](../simulation/ros_interface.md) the sa - The startup scripts are discussed in [System Startup](../concept/system_startup.md). - The simulated root file system ("`/`" directory) is created inside the build directory here: `build/px4_sitl_default/rootfs`. +## Display-Only Mode + +jMAVSim can run as a display-only renderer for other simulators (like [SIH](../sim_sih/index.md)), with its internal physics disabled. +In this mode, jMAVSim receives vehicle position via MAVLink and only renders the 3D view. + +To use jMAVSim as a display for SIH running in SITL: + +```sh +# Start SIH first +make px4_sitl_sih sihsim_quadx + +# In another terminal, start jMAVSim in display-only mode +./Tools/simulation/jmavsim/jmavsim_run.sh -p 19410 -u -q -o # 19410 is the default SIH display port +``` + +For SIH running on flight controller hardware: + +```sh +./Tools/simulation/jmavsim/jmavsim_run.sh -q -d /dev/ttyACM0 -b 2000000 -o +``` + +Use `-a` for airplane display or `-t` for tailsitter display. + +## Command-Line Reference + +The `jmavsim_run.sh` launch script accepts the following flags: + +| Flag | Description | +| ------------- | ------------------------------------------------ | +| `-b ` | Serial baud rate (default: 921600) | +| `-d ` | Serial device path (e.g., `/dev/ttyACM0`) | +| `-u` | Use UDP connection instead of serial | +| `-i ` | Simulated MAVLink system ID | +| `-p ` | UDP port (default: 14560) | +| `-q` | No interactive console | +| `-s ` | TCP serial port | +| `-r ` | Render rate in Hz | +| `-l` | Enable lockstep | +| `-o` | Display-only mode (disable physics, render only) | +| `-a` | Use airplane model | +| `-t` | Use tailsitter model | +| `HEADLESS=1` | Environment variable: run without GUI window | + +## How jMAVSim Works + +jMAVSim is a Java-based lightweight simulator that communicates with PX4 via MAVLink HIL (Hardware-In-the-Loop) messages. + +In normal mode: + +1. PX4 sends actuator commands via [HIL_ACTUATOR_CONTROLS](https://mavlink.io/en/messages/common.html#HIL_ACTUATOR_CONTROLS). +2. jMAVSim runs its physics engine to compute the vehicle state. +3. jMAVSim sends sensor data back via [HIL_SENSOR](https://mavlink.io/en/messages/common.html#HIL_SENSOR) and [HIL_GPS](https://mavlink.io/en/messages/common.html#HIL_GPS). + +In **display-only mode** (`-o` flag), jMAVSim disables its physics engine and only reads [HIL_STATE_QUATERNION](https://mavlink.io/en/messages/common.html#HIL_STATE_QUATERNION) messages to render the vehicle position. +This allows it to visualize vehicles from other simulators like SIH. + +jMAVSim supports [lockstep synchronization](#lockstep) with PX4 (enabled with `-l` flag), ensuring deterministic simulation results. + +## Keyboard Shortcuts + +Camera modes in the jMAVSim 3D view: + +| Key | Camera Mode | +| ------------- | ------------------------------------ | +| **F** | First person (attached to vehicle) | +| **S** | Stationary (fixed position) | +| **G** | Gimbal (follows vehicle orientation) | +| **(default)** | Third person follow | + ## Troubleshooting ### java.long.NoClassDefFoundError @@ -307,7 +374,7 @@ sudo gedit /etc/java-8-openjdk/accessibility.properties and comment out the line indicated below: ```sh -#assistive_technologies=org.GNOME.Acessibility.AtkWrapper +#assistive_technologies=org.GNOME.Accessibility.AtkWrapper ``` For more info, check [this GitHub issue](https://github.com/PX4/PX4-Autopilot/issues/9557). @@ -324,8 +391,8 @@ Exception in thread "main" java.lang.UnsupportedClassVersionError: me/drton/jmav This error is telling you, you need a more recent version of Java in your environment. Class file version 58 corresponds to jdk14, version 59 to jdk15, version 60 to jdk 16 etc. -To fix it under macOS, we recommend installing OpenJDK through homebrew +To fix it under macOS, install a newer OpenJDK via Homebrew: ```sh -brew install --cask adoptopenjdk16 +brew install openjdk@17 ``` diff --git a/docs/en/sim_sih/hardware.md b/docs/en/sim_sih/hardware.md new file mode 100644 index 0000000000..8d9cba7304 --- /dev/null +++ b/docs/en/sim_sih/hardware.md @@ -0,0 +1,182 @@ +# SIH on Flight Controller Hardware + +[SIH](../sim_sih/index.md) can run directly on flight controller hardware with `SYS_AUTOSTART` set to the desired value for the frame. +This replaces real sensors with simulated data while running on the actual autopilot. + +For a comparison of SIH and HITL on hardware, see [Hardware Simulation](../simulation/hardware.md). + +## Starting SIH + +1. Connect the flight controller to QGroundControl via USB. +2. Set `SYS_AUTOSTART` parameter to the desired airframe. +3. Reboot the flight controller. +4. The SIH module starts automatically and provides simulated sensor data. + +::: tip +To ensure there is no leftover parameter from previous setup, it is recommended to reset all the parameters to firmware's default before modifying `SYS_AUTOSTART`. +::: + +The following airframes are supported. + +| SIH Airframe | SYS_AUTOSTART | Status | +| --------------- | ------------- | ------------ | +| Quadrotor X | 1100 | Stable | +| Airplane | 1101 | Experimental | +| Tailsitter Duo | 1102 | Experimental | +| Standard VTOL | 1103 | Experimental | +| Ackermann Rover | 1104 | Experimental | +| Hexacopter X | 1105 | Experimental | + +Once running, the vehicle can be controlled from QGroundControl or an RC controller. + +## Firmware Builds with SIH + +The SIH module is included in many, but not all, default firmware builds. +This list can change between PX4 releases. +Always verify using the method in [Check if SIH is in Firmware](#check-if-sih-is-in-firmware). + +The table below lists build targets that include SIH at the time of writing: + +| Build Target | Board | +| ------------------------------------ | -------------------------- | +| `px4_fmu-v3_default` | Pixhawk 2 (Cube Black) | +| `px4_fmu-v4_default` | Pixhawk 3 Pro | +| `px4_fmu-v4pro_default` | Pixracer | +| `px4_fmu-v5_default` | Pixhawk 4 | +| `px4_fmu-v5x_default` | Pixhawk 5X | +| `px4_fmu-v6c_default` | Pixhawk 6C | +| `px4_fmu-v6c_raptor` | Pixhawk 6C (Raptor) | +| `px4_fmu-v6x_multicopter` | Pixhawk 6X (multicopter) | +| `auterion_fmu-v6s_default` | Auterion FMU-v6S | +| `auterion_fmu-v6x_default` | Auterion FMU-v6X | +| `holybro_durandal-v1_default` | Holybro Durandal | +| `holybro_kakuteh7_default` | Holybro Kakute H7 | +| `holybro_kakuteh7v2_default` | Holybro Kakute H7 V2 | +| `holybro_pix32v5_default` | Holybro Pix32 V5 | +| `cuav_nora_default` | CUAV Nora | +| `cuav_x7pro_default` | CUAV X7 Pro | +| `cuav_x25-evo_default` | CUAV X25 EVO | +| `cuav_x25-super_default` | CUAV X25 Super | +| `cubepilot_cubeyellow_default` | CubePilot Cube Yellow | +| `mro_pixracerpro_default` | MRO PixRacer Pro | +| `mro_x21_default` | MRO X2.1 | +| `mro_ctrl-zero-h7_default` | MRO Ctrl Zero H7 | +| `mro_ctrl-zero-h7-oem_default` | MRO Ctrl Zero H7 OEM | +| `mro_ctrl-zero-f7_default` | MRO Ctrl Zero F7 | +| `mro_ctrl-zero-f7-oem_default` | MRO Ctrl Zero F7 OEM | +| `mro_ctrl-zero-classic_default` | MRO Ctrl Zero Classic | +| `3dr_ctrl-zero-h7-oem-revg_default` | 3DR Ctrl Zero H7 OEM RevG | +| `modalai_fc-v1_default` | ModalAI FC V1 | +| `nxp_fmuk66-v3_default` | NXP FMUK66-V3 | +| `nxp_fmuk66-e_default` | NXP FMUK66-E | +| `radiolink_PIX6_default` | Radiolink PIX6 | +| `siyi_n7_default` | SIYI N7 | +| `sky-drones_smartap-airlink_default` | Sky-Drones SmartAP Airlink | +| `uvify_core_default` | UVify Core | +| `atl_mantis-edu_default` | ATL Mantis EDU | +| `av_x-v1_default` | AV X-V1 | +| `narinfc_h7_default` | NarinFC H7 | +| `thepeach_k1_default` | ThePeach K1 | +| `thepeach_r1_default` | ThePeach R1 | +| `airmind_mindpx-v2_default` | AirMind MindPX V2 | +| `beaglebone_blue_default` | BeagleBone Blue | +| `bluerobotics_navigator_default` | BlueRobotics Navigator | +| `emlid_navio2_default` | Emlid Navio2 | +| `px4_raspberrypi_default` | Raspberry Pi | +| `scumaker_pilotpi_default` | Scumaker PilotPi | + +::: info +Some boards (e.g., `px4_fmu-v6x_default`, `cubepilot_cubeorange_default`) do not include SIH in their default build due to flash memory constraints. +You can add SIH to any board -- see [Check if SIH is in Firmware](#check-if-sih-is-in-firmware). +::: + +## Requirements + +- A flight controller with SIH module included in firmware (see [Firmware Builds with SIH](#firmware-builds-with-sih)). +- USB connection for QGroundControl. +- Optional: jMAVSim for 3D visualization via serial link (see [Visualization](#hardware-visualization)). + +## Check if SIH is in Firmware + +SIH is included in [most default firmware builds](#check-if-sih-is-in-firmware). +To verify, search for `sih` in the parameter list in QGroundControl. If `SIH_*` parameters are available, the module is included. + +To add SIH to a custom build, enable it in the board configuration: + +```txt +CONFIG_MODULES_SIMULATION_SIMULATOR_SIH=y +``` + +## Visualization (Optional) {#hardware-visualization} + +If you need a visual aid to see what the simulated vehicle is doing on hardware: + +### QGroundControl + +Connect the flight controller via USB. QGC shows the vehicle on the map view with attitude, position, and telemetry, the same as a real flight. + +### jMAVSim (3D Display-Only) + +jMAVSim can render a 3D view of the vehicle over a serial connection. No physics are simulated in jMAVSim -- it is display-only. + +```sh +./Tools/simulation/jmavsim/jmavsim_run.sh -q -d /dev/ttyACM0 -b 2000000 -o +``` + +Where `/dev/ttyACM0` is the serial device for the flight controller. +On macOS, this is typically `/dev/tty.usbmodem*`. + +## Controlling Actuators + +:::warning +If you want to control throttle actuators in SIH, make sure to remove propellers for safety. +::: + +In some scenarios, it may be useful to control an actuator while running SIH on hardware. For example, you might want to verify that winches or grippers are functioning correctly by checking the servo responses. + +**To enable actuator control in SIH:** + +1. Configure PWM parameters in the airframe file: + + Ensure your airframe file includes the necessary parameters to map PWM outputs to the correct channels. + + For example, if a servo is connected to MAIN 3 and you want to map it to AUX1 on your RC, use the following command: + + `param set-default PWM_MAIN_FUNC3 407` + + You can find a full list of available values for `PWM_MAIN_FUNCn` [here](../advanced_config/parameter_reference.md#PWM_MAIN_FUNC1). In this case, `407` maps the MAIN 3 output to AUX1 on the RC. + + Alternatively, you can use the [`PWM_AUX_FUNCn`](../advanced_config/parameter_reference.md#PWM_AUX_FUNC1) parameters. + + You may also configure the output as desired: + - Disarmed PWM: ([`PWM_MAIN_DISn`](../advanced_config/parameter_reference.md#PWM_MAIN_DIS1) / [`PWM_AUX_DIS1`](../advanced_config/parameter_reference.md#PWM_AUX_DIS1)) + - Minimum PWM ([`PWM_MAIN_MINn`](../advanced_config/parameter_reference.md#PWM_MAIN_MIN1) / [`PWM_AUX_MINn`](../advanced_config/parameter_reference.md#PWM_AUX_MIN1)) + - Maximum PWM ([`PWM_MAIN_MAXn`](../advanced_config/parameter_reference.md#PWM_MAIN_MAX1) / [`PWM_AUX_MAXn`](../advanced_config/parameter_reference.md#PWM_AUX_MAX1)) + +2. Manually start the PWM output driver + + For safety, the PWM driver is not started automatically in SIH. To enable it, run the following command in the MAVLink shell: + + ```sh + pwm_out start + ``` + + **And to disable it again:** + + ```sh + pwm_out stop + ``` + +## Adding New Airframes (FC) + +Airframe configuration for SIH on a flight controller differs from SITL in a few ways: + +- Airframe file goes in `ROMFS/px4fmu_common/init.d/airframes` and follows the naming template `${ID}_${model_name}.hil`, where `ID` is the `SYS_AUTOSTART_ID` used to select the airframe, and `model_name` is the airframe model name. +- Add the model name in `ROMFS/px4fmu_common/init.d/airframes/CMakeLists.txt` to generate a corresponding make target. +- Actuators are configured with `HIL_ACT_FUNC*` parameters (not the usual `PWM_MAIN_FUNC*` parameters). + This is to avoid using the real actuator outputs in SIH. + Similarly, the bitfield for inverting individual actuator output ranges is `HIL_ACT_REV`, rather than `PWM_MAIN_REV`. + +For general airframe setup (SIH parameters, EKF2 tuning), see [Adding New Airframes](index.md#adding-new-airframes) on the main SIH page. + +For examples, see the `.hil` airframes in [ROMFS/px4fmu_common/init.d/airframes](https://github.com/PX4/PX4-Autopilot/tree/main/ROMFS/px4fmu_common/init.d/airframes). diff --git a/docs/en/sim_sih/index.md b/docs/en/sim_sih/index.md index 07767e72ef..9823ebd594 100644 --- a/docs/en/sim_sih/index.md +++ b/docs/en/sim_sih/index.md @@ -1,278 +1,231 @@ -# Simulation-In-Hardware (SIH) +# SIH Simulation - + -:::warning -This simulator is [community supported and maintained](../simulation/community_supported_simulators.md). -It may or may not work with current versions of PX4 (known to work in PX4 v1.14). +SIH (Simulation-In-Hardware) is a lightweight, headless simulator with zero external dependencies that runs physics directly inside PX4 via uORB messages. +No GUI, no external processes, no rendering overhead — just PX4 running a C++ physics model. +This makes it the fastest way to iterate on flight code. -See [Toolchain Installation](../dev_setup/dev_env.md) for information about the environments and tools supported by the core development team. +::: tip +SIH is also available as a [prebuilt Docker container or .deb package](../simulation/px4_sitl_prebuilt_packages.md), which is useful if you don't need to modify PX4 itself. +See [PX4 Simulation QuickStart](../simulation/px4_simulation_quickstart.md) for a one-line instruction on how this is used. ::: -Simulation-In-Hardware (SIH) is an alternative to [Hardware In The Loop simulation (HITL)](../simulation/hitl.md) for quadrotors, fixed-wing vehicles (airplane), and VTOL tailsitters. - -SIH can be used by new PX4 users to get familiar with PX4 and the different modes and features, and of course to learn to fly a vehicle using an RC controller in simulation, which is not possible using SITL. - ## Overview -With SIH the whole simulation is running on embedded hardware: the controller, the state estimator, and the simulator. -The Desktop computer is only used to display the virtual vehicle. +SIH runs as a PX4 module that replaces real sensor and actuator hardware with a simulated physics model. +It provides simulated IMU, GPS, barometer, magnetometer, and airspeed sensor data via uORB, and reads actuator outputs to update the vehicle state at each timestep. -![Simulator MAVLink API](../../assets/diagrams/SIH_diagram.png) +The simulation runs in lockstep with PX4, ensuring deterministic and reproducible results. +It also integrates seamlessly with ROS 2 with no additional configuration (see [ROS 2 Integration](#ros-2-integration) below). -### Compatibility +Two modes are supported: -- SIH is compatible with all PX4 supported boards except those based on FMUv2. -- SIH for MC quadrotor is supported from PX4 v1.9. -- SIH for FW (airplane) and VTOL tailsitter are supported from PX4 v1.13. -- SIH as SITL (without hardware) from PX4 v1.14. -- SIH for Standard VTOL from PX4 v1.16. -- SIH for MC Hexacopter X from PX4 v1.17. -- SIH for Ackermann Rover from PX4 v1.17. +- **[SITL](#sih-as-sitl-no-fc):** Runs on your computer with no hardware needed, and headless (without a UI) by default. + _This is the fastest and easiest way to start a simulation on PX4._ -### Benefits +- **[SIH on flight controller hardware](#sih-on-flight-controller-hardware):** Runs the entire simulation on the autopilot (`SYS_HITL=2`). -SIH provides several benefits over HITL: +### Supported Vehicle Types -- It ensures synchronous timing by avoiding the bidirectional connection to the computer. - As a result the user does not need such a powerful desktop computer. -- The whole simulation remains inside the PX4 environment. - Developers who are familiar with PX4 can more easily incorporate their own mathematical model into the simulator. - They can, for instance, modify the aerodynamic model, or noise level of the sensors, or even add a sensor to be simulated. -- The physical parameters representing the vehicle (such as mass, inertia, and maximum thrust force) can easily be modified from the [SIH parameters](../advanced_config/parameter_reference.md#simulation-in-hardware). +The following vehicle types are supported: -## Requirements - -To run the SIH, you will need a: - -- [Flight controller](../flight_controller/index.md), such as a Pixhawk-series board. - - ::: info - From PX4 v1.14 you can run [SIH "as SITL"](#sih-as-sitl-no-fc), in which case a flight controller is not required. - ::: - -- [Manual controller](../getting_started/px4_basic_concepts.md#manual-control): either a [radio control system](../getting_started/rc_transmitter_receiver.md) or a [joystick](../config/joystick.md). -- QGroundControl for flying the vehicle via GCS. -- Development computer for visualizing the virtual vehicle (optional). - -## Check if SIH is in Firmware - -The modules required for SIH are built into most PX4 firmware by default. -These include: [`pwm_out_sim`](../modules/modules_driver.md#pwm-out-sim), [`sensor_baro_sim`](../modules/modules_system.md#sensor-baro-sim), [`sensor_gps_sim`](../modules/modules_system.md#sensor-gps-sim) and [`sensor_mag_sim`](../modules/modules_system.md#sensor-mag-sim). - -To check that these are present on your flight controller: - -1. Start QGroundControl. -2. Open **Analyze Tools > Mavlink Console**. -3. Enter the following commands in the console: - - ```sh - pwm_out_sim status - ``` - - ```sh - sensor_baro_sim status - ``` - - ```sh - sensor_gps_sim status - ``` - - ```sh - sensor_mag_sim status - ``` - - ::: tip - Note that when using SIH on real hardware you do not need to additionally enable the modules using their corresponding parameters ([SENS_EN_GPSSIM](../advanced_config/parameter_reference.md#SENS_EN_GPSSIM), [SENS_EN_BAROSIM](../advanced_config/parameter_reference.md#SENS_EN_BAROSIM), [SENS_EN_MAGSIM](../advanced_config/parameter_reference.md#SENS_EN_MAGSIM)). - ::: - -4. If a valid status is returned you can start using SIH. - -If any of the returned values above are `nsh: MODULENAME: command not found`, then you don't have the module installed. -In this case you will have to add them to your board configuration and then rebuild and install the firmware. - -### Adding SIH to the Firmware - -Add the following key to the configuration file for your flight controller to include all the required modules (for an example see [boards/px4/fmu-v6x/default.px4board](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/fmu-v6x/default.px4board)). -Then re-build the firmware and flash it to the board. - -```text -CONFIG_MODULES_SIMULATION_SIMULATOR_SIH=y -``` - -::: details What does this do? - -This installs the dependencies in [simulator_sih/Kconfig](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/simulation/simulator_sih/Kconfig). -It is equivalent to: - -```text -CONFIG_MODULES_SIMULATION_PWM_OUT_SIM=y -CONFIG_MODULES_SIMULATION_SENSOR_BARO_SIM=y -CONFIG_MODULES_SIMULATION_SENSOR_GPS_SIM=y -CONFIG_MODULES_SIMULATION_SENSOR_MAG_SIM=y -``` +| Vehicle | Make Target | Status | +| --------------------------------------------------------------- | ---------------------------------------- | ------------ | +| Quadrotor X | `make px4_sitl_sih sihsim_quadx` | Stable | +| Hexarotor X | `make px4_sitl_sih sihsim_hexa` | Experimental | +| Fixed-wing (airplane) | `make px4_sitl_sih sihsim_airplane` | Experimental | +| Tailsitter VTOL | `make px4_sitl_sih sihsim_xvert` | Experimental | +| Standard VTOL (QuadPlane) | `make px4_sitl_sih sihsim_standard_vtol` | Experimental | +| Ackermann Rover | `make px4_sitl_sih sihsim_rover` | Experimental | +::: warning +Only the quadrotor vehicle type is stable and recommended for development. All other vehicle types (hexarotor, fixed-wing, VTOL, rover) are experimental and may have aerodynamic model or controller interaction issues that produce unrealistic flight behaviour. ::: -As an alterative to updating configuration files manually, you can use the following command to launch a GUI configuration tool, and interactively enable the required modules at the path: **modules > Simulation > simulator_sih**. -For example, to update the fmu-v6x configuration you would use: +### How SIH Works + +![SIH Overview](../../assets/simulation/sih_overview.svg) + +SIH differs from external simulators: + +- **No MAVLink simulator API:** SIH communicates entirely via uORB (PX4's internal message bus). +- **No external process:** The physics model runs in the same PX4 process. +- **Lockstep by default:** Simulation time is synchronized with PX4 scheduling. + +## SIH as SITL {#sih-as-sitl-no-fc} + +SIH as SITL is the easiest and fastest way to set up a simulator with PX4. +It requires no hardware, and very few extra dependencies. + +### Quick Start + +To build PX4 and run SIH for a quadrotor: ```sh -make px4_fmu-v6x boardconfig +make px4_sitl_sih sihsim_quadx ``` -After uploading, check that the required modules are present. +QGroundControl auto-connects on UDP port 14550 — just open it and you'll see the vehicle. +Note that the simulation is "headless" by default (has no GUI), but you can use an external viewer. -::: note -To use rover in SIH you must use the [rover build](../config_rover/index.md#flashing-the-rover-build) or add the rover modules to your board configuration. -::: - -## Starting SIH - -To set up/start SIH: - -1. Connect the flight controller to the desktop computer with a USB cable. -2. Open QGroundControl and wait for the flight controller too boot and connect. -3. Open [Vehicle Setup > Airframe](../config/airframe.md) then select the desired frame: - - [SIH Quadcopter X](../airframes/airframe_reference.md#copter_simulation_sih_quadcopter_x) - - **SIH Hexacopter X** (currently only has an airframe for SITL to safe flash so on flight control hardware it has to be manually configured equivalently). - - [SIH plane AERT](../airframes/airframe_reference.md#plane_simulation_sih_plane_aert) - - [SIH Tailsitter Duo](../airframes/airframe_reference.md#vtol_simulation_sih_tailsitter_duo) - - [SIH Standard VTOL QuadPlane](../airframes/airframe_reference.md#vtol_simulation_sih_standard_vtol_quadplane) - - [SIH Ackermann Rover](../airframes/airframe_reference.md#rover_rover_sih_rover_ackermann) - -The autopilot will then reboot. -The `sih` module is started on reboot, and the vehicle should be displayed on the ground control station map. - -:::warning -The airplane needs to takeoff in manual mode at full throttle. -Also, if the airplane crashes the state estimator might lose its fix. -::: - -## Display/Visualisation (optional) - -The SIH-simulated vehicle can be displayed using [jMAVSim](../sim_jmavsim/index.md) as a visualiser. +See [Supported vehicle types](#supported-vehicle-types) for other vehicles. ::: tip -SIH does not _need_ a visualiser — you can connect with QGroundControl and fly the vehicle without one. +Use the `px4_sitl_sih` build target! +The `px4_sitl` target will work, but will also build Gazebo libraries. ::: -To display the simulated vehicle: +### Visualization (Optional) {#sitl-visualization} -1. Close _QGroundControl_ (if open). -1. Unplug and replug the flight controller (allow a few seconds for it to boot). -1. Start jMAVSim by calling the script **jmavsim_run.sh** from a terminal: +SIH is intentionally headless by default. +If you need a visual aid to see what the vehicle is doing you can use QGroundControl to track path over ground, and/or [Hawkeye](../sim_hawkeye/index.md) as a 3D viewer. - ```sh - ./Tools/simulation/jmavsim/jmavsim_run.sh -q -d /dev/ttyACM0 -b 2000000 -o - ``` +#### QGroundControl - where the flags are: - - `-q` to allow the communication to _QGroundControl_ (optional). - - `-d` to start the serial device `/dev/ttyACM0` on Linux. - On macOS this would be `/dev/tty.usbmodem1`. - - `-b` to set the serial baud rate to `2000000`. - - `-o` to start jMAVSim in _display Only_ mode (i.e. the physical engine is turned off and jMAVSim only displays the trajectory given by the SIH in real-time). - - add a flag `-a` to display an aircraft or `-t` to display a tailsitter. - If this flag is not present a quadrotor will be displayed by default. +QGC auto-connects on UDP port 14550. Open QGC while SIH is running and the vehicle appears on the map view with attitude, position, and telemetry. -1. After few seconds, _QGroundControl_ can be opened again. +#### Hawkeye (3D Visualizer) -At this point, the system can be armed and flown. -The vehicle can be observed moving in jMAVSim, and on the QGC _Fly_ view. +[Hawkeye](../sim_hawkeye/index.md) renders a real-time 3D view of the vehicle using MAVLink position data. +No physics are simulated in Hawkeye — it is a visualizer only. -## SIH as SITL (no FC) - -SIH can be run as SITL (Software-In-The-Loop) from v1.14. -What this means is that the simulation code is executed on the laptop/computer instead of a flight controller, similar to Gazebo or jMAVSim. -In this case you don't need the flight controller hardware. - -To run SIH as SITL: - -1. Install the [PX4 Development toolchain](../dev_setup/dev_env.md). -2. Run the appropriate make command for each vehicle type (at the root of the PX4-Autopilot repository): - - Quadcopter - - ```sh - make px4_sitl sihsim_quadx - ``` - - - Hexacopter - - ```sh - make px4_sitl sihsim_hex - ``` - - - Fixed-wing (plane) - - ```sh - make px4_sitl sihsim_airplane - ``` - - - XVert VTOL tailsitter - - ```sh - make px4_sitl sihsim_xvert - ``` - - - Standard VTOL - - ```sh - make px4_sitl sihsim_standard_vtol - ``` - - - Ackermann Rover - - ```sh - make px4_sitl sihsim_rover_ackermann - ``` - -### Change Simulation Speed - -SITL allows the simulation to be run faster than real time. -To run the airplane simulation 10 times faster than real time, run the command: +In a separate terminal, run: ```sh -PX4_SIM_SPEED_FACTOR=10 make px4_sitl sihsim_airplane +hawkeye ``` -To display the vehicle in jMAVSim during SITL mode, enter the following command in another terminal: +Hawkeye connects on UDP port 19410 by default (the same port SIH sends `HIL_STATE_QUATERNION` on). +It then auto-detects the vehicle type from the MAVLink `HEARTBEAT` and loads the matching 3D model. + +The [Hawkeye](../sim_hawkeye/index.md) overview page explains how to install the software. +See the [Hawkeye docs](https://px4.github.io/Hawkeye/) for other features, such as ULog replay, and multi-vehicle visualization. + +### Environment Configuration + +#### Change Simulation Speed + +SIH supports faster-than-realtime simulation via the `PX4_SIM_SPEED_FACTOR` environment variable: ```sh -./Tools/simulation/jmavsim/jmavsim_run.sh -p 19410 -u -q -o +# Run at 10x speed +PX4_SIM_SPEED_FACTOR=10 make px4_sitl_sih sihsim_quadx ``` -- add a flag `-a` to display an aircraft or `-t` to display a tailsitter. - If this flag is not present a quadrotor will be displayed by default. +#### Wind Simulation -### Set Custom Takeoff Location +SIH supports setting a wind velocity with the PX4 parameters [`SIH_WIND_N`](../advanced_config/parameter_reference.md#SIH_WIND_E) and [`SIH_WIND_E`](../advanced_config/parameter_reference.md#SIH_WIND_E) [m/s]. The parameters can also be changed during flight to simulate changing wind. -The takeoff location in SIH on SITL can be set using environment variables. -This will override the default takeoff location. +#### Set Custom Takeoff Location -The variables to set are: `PX4_HOME_LAT`, `PX4_HOME_LON`, and `PX4_HOME_ALT`. - -For example: +The default takeoff location can be set using environment variables: ```sh export PX4_HOME_LAT=28.452386 export PX4_HOME_LON=-13.867138 export PX4_HOME_ALT=28.5 -make px4_sitl sihsim_quadx +make px4_sitl_sih sihsim_quadx ``` +### ROS 2 Integration + +SIH works with ROS 2 via the [uXRCE-DDS](../middleware/uxrce_dds.md) client, which auto-starts in SITL mode. +This is the same mechanism used by Gazebo — both simulators expose the same set of uORB topics to ROS 2. +The DDS agent connects on UDP port **8888** by default (configurable via `UXRCE_DDS_PRT` parameter or `PX4_UXRCE_DDS_PORT` environment variable). + +To use SIH with ROS 2: + +1. Start SIH: + + ```sh + make px4_sitl_sih sihsim_quadx + ``` + +2. In a separate terminal, start the Micro XRCE-DDS Agent: + + ```sh + MicroXRCEAgent udp4 -p 8888 + ``` + +See [uXRCE-DDS (PX4-ROS 2/DDS Bridge)](../middleware/uxrce_dds.md) for full setup instructions, including agent installation and ROS 2 workspace configuration. + +### Port Reference + +PX4 SITL opens the following UDP ports (all instance-aware, offset by instance number N). + +| PX4 sends to (remote) | PX4 listens on (local) | Use for | Instance offset | +| --------------------- | ---------------------- | ----------------------------- | ----------------------------------------- | +| **14550** | 18570 (+N) | QGroundControl, GCS tools | Yes | +| **14540** (+N) | 14580 (+N) | MAVSDK, MAVROS, offboard APIs | Yes (capped at 14549 for 10+ instances) | +| **14030** (+N) | 14280 (+N) | Onboard camera/payload | Yes | +| **13280** (+N) | 13030 (+N) | Gimbal control | Yes | +| **19410** (+N) | 19450 (+N) | Hawkeye visualizer (SIH only) | Yes | +| **8888** | - | uXRCE-DDS / ROS 2 | No (use DDS namespace for multi-instance) | + +QGC auto-connects on port **14550** by default. MAVSDK connects on **14540**. No manual port configuration needed for single-instance use. + +### Multi-Vehicle Simulation + +SIH supports multi-vehicle simulation using PX4's instance system. +Each instance gets unique MAVLink ports, a unique system ID, and a separate DDS namespace. + +To launch multiple SIH vehicles, first build: + +```sh +make px4_sitl_sih sihsim_quadx +``` + +Then use the multi-instance launch script: + +```sh +./Tools/simulation/sitl_multiple_run.sh 3 sihsim_quadx px4_sitl_sih +``` + +Or launch instances manually: + +```sh +# Terminal 1 (instance 0) +make px4_sitl_sih sihsim_quadx + +# Terminal 2 (instance 1) +./build/px4_sitl_sih/bin/px4 -i 1 -d ./build/px4_sitl_sih/etc + +# Terminal 3 (instance 2) +./build/px4_sitl_sih/bin/px4 -i 2 -d ./build/px4_sitl_sih/etc +``` + +Each instance allocates ports automatically (all offset by instance number): + +| Instance | MAVLink (18570+N) | MAVLink (14540+N) | DDS (8888) Namespace | +| -------- | ----------------- | ----------------- | -------------------- | +| 0 | 18570 | 14540 | (default) | +| 1 | 18571 | 14541 | px4_1 | +| 2 | 18572 | 14542 | px4_2 | + +See [Port Reference](#port-reference) for the complete list of ports. + +## Running the SIH on Flight Controller Hardware {#sih-on-flight-controller-hardware} + +::: info +The SIH on flight controller is community supported. +::: + +SIH can also run on flight controller hardware, replacing real sensors with simulated data while running on the actual autopilot. +See [SIH on Flight Controller Hardware](hardware.md) for setup instructions. + ## Adding New Airframes [Adding a new airframe](../dev_airframes/adding_a_new_frame.md) for use in SIH simulation is much the same as for other use cases. You still need to configure your vehicle type and [geometry](../config/actuators.md) (`CA_` parameters) and start any other defaults for that specific vehicle. ::: warning -Not every vehicle can be simulated with SIH — there are currently [four supported vehicle types](../advanced_config/parameter_reference.md#SIH_VEHICLE_TYPE), each of which has a relatively rigid implementation in [`sih.cpp`](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/simulation/simulator_sih/sih.cpp). +Not every vehicle can be simulated with SIH — there are currently [six supported vehicle types](../advanced_config/parameter_reference.md#SIH_VEHICLE_TYPE) (quadcopter, fixed-wing, tailsitter, standard VTOL, hexacopter, rover), each of which has a relatively rigid implementation in [`sih.cpp`](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/simulation/simulator_sih/sih.cpp). ::: The specific differences for SIH simulation airframes are listed in the sections below. -For all variants of SIH: +### All Variants - Set all the [Simulation In Hardware](../advanced_config/parameter_reference.md#simulation-in-hardware) parameters (prefixed with `SIH_`) in order to configure the physical model of the vehicle. @@ -290,17 +243,13 @@ For all variants of SIH: For SIH on SITL you will need to explicitly enable these sensors as shown below. ::: -- `param set-default EKF2_GPS_DELAY 0` to improve state estimator performance (the assumption of instant GPS measurements would normally be unrealistic, but is accurate for SIH). +- `param set-default SENS_GPS0_DELAY 0` to improve state estimator performance (the assumption of instant GPS measurements would normally be unrealistic, but is accurate for SIH). -For SIH on FC: +### SIH on Flight Controller -- Airframe file goes in `ROMFS/px4fmu_common/init.d/airframes` and follows the naming template `${ID}_${model_name}.hil`, where `ID` is the `SYS_AUTOSTART_ID` used to select the airframe, and `model_name` is the airframe model name. -- Add the model name in `ROMFS/px4fmu_common/init.d/airframes/CMakeLists.txt` to generate a corresponding make target. -- Actuators are configured with `HIL_ACT_FUNC*` parameters (not the usual `PWM_MAIN_FUNC*` parameters). - This is to avoid using the real actuator outputs in SIH. - Similarly, the bitfield for inverting individual actuator output ranges is `HIL_ACT_REV`, rather than `PWM_MAIN_REV`. +See [Adding New Airframes (FC)](../sim_sih/hardware.md#adding-new-airframes-fc) in _SIH on Flight Controller Hardware_. -For SIH as SITL (no FC): +### SIH as SITL - Airframe file goes in `ROMFS/px4fmu_common/init.d-posix/airframes` and follows the naming template `${ID}_sihsim_${model_name}`, where `ID` is the `SYS_AUTOSTART_ID` used to select the airframe, and `model_name` is the airframe model name. - Add the model name in `src/modules/simulation/simulator_sih/CMakeLists.txt` to generate a corresponding make target. @@ -314,68 +263,54 @@ For SIH as SITL (no FC): - `param set-default SENS_EN_MAGSIM 1` - `param set-default SENS_EN_ARSPDSIM 1` (if it is a fixed-wing or VTOL airframe with airspeed sensor) -For specific examples see the `_sihsim_` airframes in [ROMFS/px4fmu_common/init.d-posix/airframes](https://github.com/PX4/PX4-Autopilot/blob/main/ROMFS/px4fmu_common/init.d-posix/airframes/) (SIH as SITL) and [ROMFS/px4fmu_common/init.d/airframes](https://github.com/PX4/PX4-Autopilot/tree/main/ROMFS/px4fmu_common/init.d/airframes) (SIH on FC). - -## Controlling Actuators in SIH - -:::warning -If you want to control throttling actuators in SIH, make sure to remove propellers for safety. -::: - -In some scenarios, it may be useful to control an actuator while running SIH. For example, you might want to verify that winches or grippers are functioning correctly by checking the servo responses. - -To enable actuator control in SIH: - -1. Configure PWM parameters in the airframe file: - -Ensure your airframe file includes the necessary parameters to map PWM outputs to the correct channels. - -For example, if a servo is connected to MAIN 3 and you want to map it to AUX1 on your RC, use the following command: - -`param set-default PWM_MAIN_FUNC3 407` - -You can find a full list of available values for `PWM_MAIN_FUNCn` [here](../advanced_config/parameter_reference.md#PWM_MAIN_FUNC1). In this case, `407` maps the MAIN 3 output to AUX1 on the RC. - -Alternatively, you can use the [`PWM_AUX_FUNCn`](../advanced_config/parameter_reference.md#PWM_AUX_FUNC1) parameters. - -You may also configure the output as desired: - -- Disarmed PWM: ([`PWM_MAIN_DISn`](../advanced_config/parameter_reference.md#PWM_MAIN_DIS1) / [`PWM_AUX_DIS1`](../advanced_config/parameter_reference.md#PWM_AUX_DIS1)) -- Minimum PWM ([`PWM_MAIN_MINn`](../advanced_config/parameter_reference.md#PWM_MAIN_MIN1) / [`PWM_AUX_MINn`](../advanced_config/parameter_reference.md#PWM_AUX_MIN1)) -- Maximum PWM ([`PWM_MAIN_MAXn`](../advanced_config/parameter_reference.md#PWM_MAIN_MAX1) / [`PWM_AUX_MAXn`](../advanced_config/parameter_reference.md#PWM_AUX_MAX1)) - -2. Manually start the PWM output driver - -For safety, the PWM driver is not started automatically in SIH. To enable it, run the following command in the MAVLink shell: - -`pwm_out start` - -And to disable it again: - -`pwm_out stop` +For specific examples see the `_sihsim_` airframes in [ROMFS/px4fmu_common/init.d-posix/airframes](https://github.com/PX4/PX4-Autopilot/tree/main/ROMFS/px4fmu_common/init.d-posix/airframes) (SIH as SITL) and [ROMFS/px4fmu_common/init.d/airframes](https://github.com/PX4/PX4-Autopilot/tree/main/ROMFS/px4fmu_common/init.d/airframes) (SIH on FC). ## Dynamic Models The dynamic models for the various vehicles are: -- Quadcopter: [pdf report](https://github.com/PX4/PX4-Autopilot/raw/main/docs/assets/simulation/SIH_dynamic_model.pdf). -- Hexacopter: Equivalent to the Quadcopter but with a symmetric hexacopter x actuation setup. -- Fixed-wing: Inspired by the PhD thesis: "Dynamics modeling of agile fixed-wing unmanned aerial vehicles." Khan, Waqas, supervised by Nahon, Meyer, McGill University, PhD thesis, 2016. -- Tailsitter: Inspired by the master's thesis: "Modeling and control of a flying wing tailsitter unmanned aerial vehicle." Chiappinelli, Romain, supervised by Nahon, Meyer, McGill University, Masters thesis, 2018. -- Ackermann Rover: Based on lateral vehicle dynamics of the bicycle model adapted from [Sri Anumakonda, Everything you need to know about Self-Driving Cars in <30 minutes](https://srianumakonda.medium.com/everything-you-need-to-know-about-self-driving-in-30-minutes-b38d68bd3427) +- Quadrotor: [pdf](https://github.com/PX4/PX4-Autopilot/raw/main/docs/assets/simulation/SIH_dynamic_model.pdf) +- Fixed-wing: based on Khan (2016), see references below +- Tailsitter: based on Chiappinelli (2018), see references below +- Rover: bicycle model with linear tire model + +**Propeller model with advance ratio** + +Since PX4 v1.17, the propeller model for fixed-wing, tailsitter, and VTOL pusher vehicles is based on the equations from UIUC Propeller Database. + +UIUC_prop_equations + +This model includes the thrust coefficient CT(J) and power coefficient CP(J) as functions of the advance ratio J. +As a result, the maximum thrust force is realistically reduced as the aircraft speed is increased. +The SIH implements the thrust and power coefficients as second-order polynomial fits. + +CT = SIH_F_CT0 + SIH_F_CT1⋅J + SIH_F_CT2⋅J² + +CP = SIH_F_CP0 + SIH_F_CP1⋅J + SIH_F_CP2⋅J² + +If `SIH_F_CT0` and `SIH_F_CP0` are non-zero and positive, the SIH uses the model with advance ratio. +If not, the SIH uses a simple model with maximum thrust force given by `SIH_F_T_MAX` and maximum torque given by `SIH_F_Q_MAX`. + +**References:** + +1. PX4 Development Team, "SIH Dynamic Model," PX4-Autopilot, 2019. [PDF](https://github.com/PX4/PX4-Autopilot/raw/main/docs/assets/simulation/SIH_dynamic_model.pdf) +2. W. Khan, "Dynamics modeling of agile fixed-wing unmanned aerial vehicles," Ph.D. thesis, Dept. of Mechanical Engineering, McGill University, Montreal, 2016. +3. R. Chiappinelli, "Modeling and control of a flying wing tailsitter unmanned aerial vehicle," M.Sc. thesis, Dept. of Mechanical Engineering, McGill University, Montreal, 2018. +4. S. Anumakonda, "Everything you need to know about Self-Driving Cars," 2021. [Link](https://srianumakonda.medium.com/everything-you-need-to-know-about-self-driving-in-30-minutes-b38d68bd3427) +5. J.B. Brandt, R.W. Deters, G.K. Ananda, O.D. Dantsker, and M.S. Selig, UIUC Propeller Database, Vols 1-4, University of Illinois at Urbana-Champaign, Department of Aerospace Engineering, retrieved from https://m-selig.ae.illinois.edu/props/propDB.html. ## Video - +SIH demo with a fixed-wing vehicle @[youtube](https://youtu.be/PzIpSCRD8Jo) +How to parametrize the thrust and power coefficients CT & CP @[youtube](https://www.youtube.com/watch?v=KNSd9ge0sSw) ## Credits SIH was originally developed by Coriolis g Corporation. The airplane model and tailsitter models were added by Altitude R&D inc. -Both are Canadian companies: - Coriolis g developed a new type of Vertical Takeoff and Landing (VTOL) vehicles based on passive coupling systems; -- [Altitude R&D](https://www.altitude-rd.com/) is specialized in dynamics, control, and real-time simulation (today relocated in Zurich). +- [Altitude R&D](https://www.altitude-rd.com/) is specialized in dynamics, control, and real-time simulation (located in Zurich). The simulator is released for free under BSD license. diff --git a/docs/en/simulation/community_supported_simulators.md b/docs/en/simulation/community_supported_simulators.md index a7bbda97c0..a750104b33 100644 --- a/docs/en/simulation/community_supported_simulators.md +++ b/docs/en/simulation/community_supported_simulators.md @@ -12,10 +12,13 @@ See [Toolchain Installation](../dev_setup/dev_env.md) for information about the The tools have variable levels of support from their communities (some are well supported and others are not). Questions about these tools should be raised on the [discussion forums](../contribute/support.md#forums-and-chat) -| Simulator | Description | -| --------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| [Simulation-In-Hardware](../sim_sih/index.md) (SIH) |

A simulator implemented in C++ as a PX4 module directly in the Firmware [code](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/simulation/simulator_sih). It can be ran in SITL directly on the computer or as an alternative to HITL offering a hard real-time simulation directly on the hardware autopilot.

Supported Vehicles: Quad, Hexa, Plane, Tailsitter, Standard VTOL, Ackermann Rover

| -| [FlightGear](../sim_flightgear/index.md) |

A simulator that provides physically and visually realistic simulations. In particular it can simulate many weather conditions, including thunderstorms, snow, rain and hail, and can also simulate thermals and different types of atmospheric flows. [Multi-vehicle simulation](../sim_flightgear/multi_vehicle.md) is also supported.

Supported Vehicles: Plane, Autogyro, Rover

| -| [JMAVSim](../sim_jmavsim/index.md) |

A simple multirotor/quad simulator. This was previously part of the PX4 development toolchain but was removed in favour of [Gazebo](../sim_gazebo_gz/index.md).

Supported Vehicles: Quad

| -| [JSBSim](../sim_jsbsim/index.md) |

A simulator that provides advanced flight dynamics models. This can be used to model realistic flight dynamics based on wind tunnel data.

Supported Vehicles: Plane, Quad, Hex

| -| [AirSim](../sim_airsim/index.md) |

A cross platform simulator that provides physically and visually realistic simulations. This simulator is resource intensive, and requires a significantly more powerful computer than the other simulators described here.

Supported Vehicles: Iris (MultiRotor model and a configuration for PX4 QuadRotor in the X configuration).

| +| Simulator | Description | +| ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| [FlightGear](../sim_flightgear/index.md) |

A simulator that provides physically and visually realistic simulations. In particular it can simulate many weather conditions, including thunderstorms, snow, rain and hail, and can also simulate thermals and different types of atmospheric flows. [Multi-vehicle simulation](../sim_flightgear/multi_vehicle.md) is also supported.

Supported Vehicles: Plane, Autogyro, Rover

| +| [JMAVSim](../sim_jmavsim/index.md) |

A simple multirotor/quad simulator. This was previously part of the PX4 development toolchain but was removed in favour of [Gazebo](../sim_gazebo_gz/index.md).

Supported Vehicles: Quad

| +| [JSBSim](../sim_jsbsim/index.md) |

A simulator that provides advanced flight dynamics models. This can be used to model realistic flight dynamics based on wind tunnel data.

Supported Vehicles: Plane, Quad, Hex

| +| [AirSim](../sim_airsim/index.md) |

A cross platform simulator that provides physically and visually realistic simulations. This simulator is resource intensive, and requires a significantly more powerful computer than the other simulators described here.

Supported Vehicles: Iris (MultiRotor model and a configuration for PX4 QuadRotor in the X configuration).

| + +:::tip +[Gazebo](../sim_gazebo_gz/index.md) and [SIH](../sim_sih/index.md) are the officially supported simulators. See the [Simulation](index.md) page for more information. +::: diff --git a/docs/en/simulation/failsafes.md b/docs/en/simulation/failsafes.md index 0087c8970d..78d6357195 100644 --- a/docs/en/simulation/failsafes.md +++ b/docs/en/simulation/failsafes.md @@ -47,7 +47,7 @@ To control how fast the battery depletes to the minimal value use the parameter By changing [SIM_BAT_MIN_PCT](../advanced_config/parameter_reference.md#SIM_BAT_MIN_PCT) in flight, you can also test regaining capacity to simulate inaccurate battery state estimation or in-air charging technology. ::: -It is also possible to disable the simulated battery using [SIM_BAT_ENABLE](../advanced_config/parameter_reference.md#SIM_BAT_ENABLE) in order to, for example, provide an external battery simulation via MAVLink. +The simulated battery can be completely disabled by setting [SIM_BAT_DRAIN](../advanced_config/parameter_reference.md#SIM_BAT_DRAIN) to 0. This is useful, for example, if you provide an external battery simulation via MAVLink. ## Sensor/System Failure diff --git a/docs/en/simulation/hardware.md b/docs/en/simulation/hardware.md new file mode 100644 index 0000000000..59efad7a67 --- /dev/null +++ b/docs/en/simulation/hardware.md @@ -0,0 +1,29 @@ +# Hardware Simulation + +PX4 can run simulation directly on a real flight controller, replacing real sensors with simulated data, while otherwise executing the full flight stack on actual autopilot hardware. + +::: info +Simulating PX4 on flight controller hardware exercises more flight stack code than SITL, and tests more of your hardware integration. +It can surface issues with running PX4 that might hidden when running on a desktop OS and hardware, or even a different flight controller board. +::: + +Two simulation approaches are available, controlled by the [SYS_HITL](../advanced_config/parameter_reference.md#SYS_HITL) parameter: + +- **[HITL Simulation](../simulation/hitl.md) (`SYS_HITL=1`):** An external simulator (Gazebo Classic or jMAVSim) runs physics on a companion computer and sends sensor data to the flight controller via MAVLink HIL messages. Requires a USB/UART connection and simulator setup. +- **[SIH on Hardware](../sim_sih/hardware.md) (`SYS_HITL=2`):** A C++ physics model runs directly on the flight controller itself. No external simulator, no companion computer, no MAVLink sensor data. Just set the parameter and reboot. + +## HITL vs SIH {#comparision} + +| | HITL (`SYS_HITL=1`) | SIH (`SYS_HITL=2`) | +| ----------------- | -------------------------------------------- | ---------------------------------------------------- | +| Physics model | External simulator (Gazebo Classic, jMAVSim) | Internal C++ module | +| Communication | MAVLink HIL messages | uORB (internal) | +| External process | Required | Not required | +| Setup complexity | Higher | Lower | +| Sensor simulation | Camera, lidar, etc. (via simulator) | IMU, GPS, baro, mag, airspeed only | +| Vehicle types | Quadcopter, Standard VTOL | Quad, Hex, FW, VTOL Tailsitter, Standard VTOL, Rover | + +## When to Use Which + +- Use **SIH** if you want the simplest possible setup. No external dependencies. +- Use **HITL** if you need an external physics engine, 3D visualization from Gazebo Classic, or camera/lidar sensor simulation that SIH does not provide. diff --git a/docs/en/simulation/hitl.md b/docs/en/simulation/hitl.md index 7da9cfeeca..ac1474d8d8 100644 --- a/docs/en/simulation/hitl.md +++ b/docs/en/simulation/hitl.md @@ -12,20 +12,18 @@ This approach has the benefit of testing most of the actual flight code on the r PX4 supports HITL for multicopters (using [jMAVSim](../sim_jmavsim/index.md) or [Gazebo Classic](../sim_gazebo_classic/index.md)) and VTOL (using Gazebo Classic). - +For a comparison of HITL and SIH on hardware, see [Hardware Simulation](../simulation/hardware.md). -## HITL-Compatible Airframes +## HITL-Compatible Airframes {#compatible_airframe} The set of compatible airframes vs simulators is: | Airframe | `SYS_AUTOSTART` | Gazebo Classic | jMAVSim | | ---------------------------------------------------------------------------------------------------------------- | --------------- | -------------- | ------- | | [HIL Quadcopter X](../airframes/airframe_reference.md#copter_simulation_hil_quadcopter_x) | 1001 | Y | Y | -| [HIL Standard VTOL QuadPlane](../airframes/airframe_reference.md#vtol_standard_vtol_hil_standard_vtol_quadplane) | 1002 | Y | +| [HIL Standard VTOL QuadPlane](../airframes/airframe_reference.md#vtol_standard_vtol_hil_standard_vtol_quadplane) | 1002 | Y | | - - -## HITL Simulation Environment +## HITL Simulation Environment {#simulation_environment} With Hardware-in-the-Loop (HITL) simulation the normal PX4 firmware is run on real hardware. JMAVSim or Gazebo Classic (running on a development computer) are connected to the flight controller hardware via USB/UART. @@ -101,16 +99,16 @@ make px4_fmu-v6x boardconfig 2. Select a [compatible airframe](#compatible_airframe) you want to test. Then click **Apply and Restart** on top-right of the _Airframe Setup_ page. -3. Calibrate your RC or Joystick, if needed. +3. Calibrate your [Manual Controller](../config/manual_control.md) (RC or Joystick), if needed. 4. Setup UDP 1. Under the _General_ tab of the settings menu, uncheck all _AutoConnect_ boxes except for **UDP**. ![QGC Auto-connect settings for HITL](../../assets/gcs/qgc_hitl_autoconnect.png) -5. (Optional) Configure Joystick and Failsafe. - Set the following [parameters](../advanced_config/parameters.md) in order to use a joystick instead of an RC remote control transmitter: - - [COM_RC_IN_MODE](../advanced_config/parameter_reference.md#COM_RC_IN_MODE) to "Joystick/No RC Checks". This allows joystick input and disables RC input checks. - - [NAV_RCL_ACT](../advanced_config/parameter_reference.md#NAV_RCL_ACT) to "Disabled". This ensures that no RC failsafe actions interfere when not running HITL with a radio control. +5. (Optional) Configure your manual controller priority and failsafe: + - [Enable a mode in `COM_RC_IN_MODE` that enables and prioritises the controllers you want to use](../config/manual_control.md#px4-configuration). + The default `RC or MAVLink keep first` should work if you plan to only have a Joystick (no RC). + - You can set [NAV_RCL_ACT](../advanced_config/parameter_reference.md#NAV_RCL_ACT) to disable manual control loss failsafe while flying in a simulation. :::tip The _QGroundControl User Guide_ also has instructions on [Joystick](https://docs.qgroundcontrol.com/master/en/qgc-user-guide/setup_view/joystick.html) and [Virtual Joystick](https://docs.qgroundcontrol.com/master/en/qgc-user-guide/settings_view/virtual_joystick.html) setup. @@ -131,12 +129,12 @@ Make sure _QGroundControl_ is not running! 1. Build PX4 with [Gazebo Classic](../sim_gazebo_classic/index.md) (in order to build the Gazebo Classic plugins). ```sh - cd + cd DONT_RUN=1 make px4_sitl_default gazebo-classic ``` -1. Open the vehicle model's sdf file (e.g. **Tools/simulation/gazebo-classic/sitl_gazebo-classic/models/iris_hitl/iris_hitl.sdf**). -1. Replace the `serialDevice` parameter (`/dev/ttyACM0`) if necessary. +2. Open the vehicle model's sdf file (e.g. **Tools/simulation/gazebo-classic/sitl_gazebo-classic/models/iris_hitl/iris_hitl.sdf**). +3. Replace the `serialDevice` parameter (`/dev/ttyACM0`) if necessary. ::: info The serial device depends on what port is used to connect the vehicle to the computer (this is usually `/dev/ttyACM0`). @@ -144,7 +142,7 @@ Make sure _QGroundControl_ is not running! The correct device will be the last one shown. ::: -1. Set up the environment variables: +4. Set up the environment variables: ```sh source Tools/simulation/gazebo-classic/setup_gazebo.bash $(pwd) $(pwd)/build/px4_sitl_default @@ -156,7 +154,7 @@ Make sure _QGroundControl_ is not running! gazebo Tools/simulation/gazebo-classic/sitl_gazebo-classic/worlds/hitl_iris.world ``` -1. Start _QGroundControl_. +5. Start _QGroundControl_. It should autoconnect to PX4 and Gazebo Classic. #### jMAVSim (Quadrotor only) @@ -166,7 +164,7 @@ Make sure _QGroundControl_ is not running! ::: 1. Connect the flight controller to the computer and wait for it to boot. -1. Run jMAVSim in HITL mode: +2. Run jMAVSim in HITL mode: ```sh ./Tools/simulation/jmavsim/jmavsim_run.sh -q -s -d /dev/ttyACM0 -b 921600 -r 250 @@ -178,7 +176,7 @@ Make sure _QGroundControl_ is not running! On Windows (including Cygwin) it would be the COM1 or another port - check the connection in the Windows Device Manager. ::: -1. Start _QGroundControl_. +3. Start _QGroundControl_. It should autoconnect to PX4 and jMAVSim. ## Fly an Autonomous Mission in HITL diff --git a/docs/en/simulation/index.md b/docs/en/simulation/index.md index 9951cd4fde..39db89d5a8 100644 --- a/docs/en/simulation/index.md +++ b/docs/en/simulation/index.md @@ -3,38 +3,83 @@ Simulators allow PX4 flight code to control a computer modeled vehicle in a simulated "world". You can interact with this vehicle just as you might with a real vehicle, using _QGroundControl_, an offboard API, or a radio controller/gamepad. -:::tip -Simulation is a quick, easy, and most importantly, _safe_ way to test changes to PX4 code before attempting to fly in the real world. -It is also a good way to start flying with PX4 when you haven't yet got a vehicle to experiment with. -::: - PX4 supports both _Software In the Loop (SITL)_ simulation, where the flight stack runs on computer (either the same computer or another computer on the same network) and _Hardware In the Loop (HITL)_ simulation using a simulation firmware on a real flight controller board. Information about available simulators and how to set them up are provided in the next section. The other sections provide general information about how the simulator works, and are not required to _use_ the simulators. +:::tip +Simulation is a quick, easy, and most importantly, _safe_ way to test changes to PX4 code before attempting to fly in the real world. +It is also a good way to start flying with PX4 when you haven't yet got a vehicle to experiment with. +::: + ## Supported Simulators The following simulators are supported by the PX4 core development team. +:::info +Gazebo Classic is being downgraded to [community supported](../simulation/community_supported_simulators.md) and is no longer recommended as the default simulation solution. +Use [Gazebo](../sim_gazebo_gz/index.md) (formerly Gazebo Ignition) for new projects. +If you have an older workflow that does not yet work in newer Gazebo, Gazebo Classic remains available but will not receive core team maintenance going forward. +See [PX4-Autopilot#23602](https://github.com/PX4/PX4-Autopilot/issues/23602) for the deprecation timeline and migration status. +::: + | Simulator | Description | | ------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [Gazebo](../sim_gazebo_gz/index.md) | Gazebo supersedes [Gazebo Classic](../sim_gazebo_classic/index.md), featuring more advanced rendering, physics and sensor models. It is the only version of Gazebo available from Ubuntu Linux 22.04

A powerful 3D simulation environment that is particularly suitable for testing object-avoidance and computer vision. It can also be used for [multi-vehicle simulation](../simulation/multi-vehicle-simulation.md) and is commonly used with [ROS](../simulation/ros_interface.md), a collection of tools for automating vehicle control.

Supported Vehicles: Quad, VTOL (Standard, Tailsitter, Tiltroter), Plane, Rovers | +| [SIH](../sim_sih/index.md) | A lightweight, headless simulator that runs physics directly inside PX4 as a C++ module (no external dependencies). Headless by default for fastest iteration. Supports ROS 2 via uXRCE-DDS. Can also run on flight controller hardware (`SYS_HITL=2`).

**Supported Vehicles:** Quad, Hex, Plane, Tailsitter, Standard VTOL, Rover | | [Gazebo Classic](../sim_gazebo_classic/index.md) | A powerful 3D simulation environment that is particularly suitable for testing object-avoidance and computer vision. It can also be used for [multi-vehicle simulation](../simulation/multi-vehicle-simulation.md) and is commonly used with [ROS](../simulation/ros_interface.md), a collection of tools for automating vehicle control.

**Supported Vehicles:** Quad ([Iris](../airframes/airframe_reference.md#copter_quadrotor_x_generic_quadcopter)), Hex (Typhoon H480), [Generic Standard VTOL (QuadPlane)](../airframes/airframe_reference.md#vtol_standard_vtol_generic_standard_vtol), Tailsitter, Plane, Rover, Submarine | There are also a number of [Community Supported Simulators](../simulation/community_supported_simulators.md). ---- +:::tip +To run PX4 SITL without setting up a build environment, [pre-built packages and containers](px4_sitl_prebuilt_packages.md) are available. +::: -The remainder of this topic is a "somewhat generic" description of how the simulation infrastructure works. -It is not required to _use_ the simulators. +### Simulator Comparison + +| Feature | Gazebo | SIH | +| ------------------------- | ----------------------------------------- | ------------------------------------------------------------------- | +| **Default Mode** | GUI with 3D rendering | Headless (fastest iteration) | +| **3D Visualization** | Built-in (photorealistic) | Optional: QGC map or jMAVSim display-only | +| **Physics Engine** | External (gz-physics) | Internal (C++ module, uORB) | +| **External Dependencies** | Gazebo packages, rendering libs | None | +| **Vehicle Types** | Quad, VTOL, Plane, Rovers | Quad, Hex, Plane, Tailsitter, Std VTOL, Rover | +| **Multi-vehicle** | Yes (documented) | Yes ([multi-vehicle](../sim_sih/index.md#multi-vehicle-simulation)) | +| **Sensor Simulation** | Camera, LiDAR, depth, IMU, GPS, baro, mag | IMU, GPS, baro, mag, airspeed | +| **Custom Worlds/Models** | Yes (SDF, large model library) | No | +| **ROS 2 Integration** | Yes (uXRCE-DDS) | Yes (uXRCE-DDS) | +| **Extensibility** | Plugins, custom sensors, environments | Modify C++ source, tune SIH\_\* parameters | +| **Community/Ecosystem** | Large Gazebo community, model repos | PX4-internal | +| **Faster-than-Realtime** | Yes | Yes | +| **Runs on FC Hardware** | No | Yes (SYS_HITL=2) | +| **macOS Apple Silicon** | Unstable (known issues) | Works natively | +| **Lockstep** | Yes | Yes | + +:::tip +For a detailed analysis of PX4 simulation user needs, priorities, and pain points, see the [PX4 Simulation Integration Survey Report](https://www.mcguirerobotics.com/px4_sim_research_report/) (K. McGuire, Dronecode Foundation, Dec 2025, 120 respondents). +::: + +### Which Simulator Should I Use? + +- **Full-featured simulation with 3D rendering, custom worlds, camera/lidar sensors, or rich sensor ecosystems:** Use [Gazebo](../sim_gazebo_gz/index.md). Largest ecosystem, custom models and plugins, photorealistic rendering, extensive sensor library, large community. +- **Fast headless iteration, controls research, zero-dependency setup, or macOS:** Use [SIH](../sim_sih/index.md). Runs entirely inside PX4 with no external dependencies, headless by default for maximum speed, physics parameters directly tunable via `SIH_*` params. Supports ROS 2 via uXRCE-DDS. +- **Hardware integration testing without propellers:** Use [SIH on flight controller hardware](../sim_sih/index.md#sih-on-flight-controller-hardware) (`SYS_HITL=2`). + +:::info +SIH is headless by default. For optional 3D visualization, you can use [jMAVSim in display-only mode](../sim_sih/index.md#visualization-optional) or monitor the vehicle in QGroundControl's map view. +::: ## Simulator MAVLink API -All simulators except for Gazebo communicate with PX4 using the Simulator MAVLink API. +Most external simulators communicate with PX4 using the Simulator MAVLink API. This API defines a set of MAVLink messages that supply sensor data from the simulated world to PX4 and return motor and actuator values from the flight code that will be applied to the simulated vehicle. The image below shows the message flow. +:::info +SIH does not use the MAVLink simulator API. It runs physics internally via uORB messages. Gazebo communicates with PX4 via gz_bridge (Gazebo transport), not MAVLink. +::: + ![Simulator MAVLink API](../../assets/simulation/px4_simulator_messages.svg) ::: info @@ -67,7 +112,7 @@ The messages are described below (see links for specific detail). -PX4 directly uses the [Gazebo API](https://gazebosim.org/docs) to interface with [Gazebo](../sim_gazebo_gz/index.md) and MAVlink is not required. +PX4 directly uses the [Gazebo API](https://gazebosim.org/docs/) to interface with [Gazebo](../sim_gazebo_gz/index.md) and MAVlink is not required. ## Default PX4 MAVLink UDP Ports @@ -95,7 +140,7 @@ See [System Startup](../concept/system_startup.md) to learn more. ## SITL Simulation Environment -The diagram below shows a typical SITL simulation environment for any of the supported simulators that use MAVLink (i.e. all of them except Gazebo). +The diagram below shows a typical SITL simulation environment for any of the supported simulators that use MAVLink (i.e. most external simulators, but not Gazebo or SIH). ![PX4 SITL overview](../../assets/simulation/px4_sitl_overview.svg) @@ -149,8 +194,16 @@ make px4_sitl jmavsim # Start PX4 with no simulator (i.e. to use your own "custom" simulator) make px4_sitl none_iris + +# SIH (headless, zero dependencies) +make px4_sitl_sih sihsim_quadx +make px4_sitl_sih sihsim_airplane ``` +::: info +Use `px4_sitl_sih` instead of `px4_sitl` to avoid building Gazebo dependencies. +::: + The simulation can be further configured via environment variables: - Any of the [PX4 parameters](../advanced_config/parameter_reference.md) can be overridden via `export PX4_PARAM_{name}={value}`. @@ -161,7 +214,7 @@ For more information see: [Building the Code > PX4 Make Build Targets](../dev_se ### Run Simulation Faster than Realtime {#simulation_speed} -SITL can be run faster or slower than real-time when using Gazebo, Gazebo Classic, or jMAVSim. +SITL can be run faster or slower than real-time when using Gazebo, Gazebo Classic, jMAVSim, or SIH. The speed factor is set using the environment variable `PX4_SIM_SPEED_FACTOR`. @@ -175,6 +228,7 @@ For more information see: - Gazebo: [Change Simulation Speed](../sim_gazebo_gz/index.md#change-simulation-speed) - Gazebo Classic: [Change Simulation Speed](../sim_gazebo_classic/index.md#change-simulation-speed) and [Lockstep](../sim_gazebo_classic/index.md#lockstep) - jMAVSim: [Change Simulation Speed](../sim_jmavsim/index.md#change-simulation-speed) and [Lockstep](../sim_jmavsim/index.md#lockstep) +- SIH: Supports `PX4_SIM_SPEED_FACTOR` for faster-than-realtime simulation. ### Startup Scripts @@ -209,7 +263,7 @@ For setup information see the _QGroundControl User Guide_: PX4 supports capture of both still images and video from within the [Gazebo Classic](../sim_gazebo_classic/index.md) simulated environment. This can be enabled/set up as described in [Gazebo Glassic > Video Streaming](../sim_gazebo_classic/index.md#video-streaming). -The simulated camera is a gazebo classic plugin that implements the [MAVLink Camera Protocol](https://mavlink.io/en/protocol/camera.html) . +The simulated camera is a gazebo classic plugin that implements the [MAVLink Camera Protocol](https://mavlink.io/en/services/camera.html) . PX4 connects/integrates with this camera in _exactly the same way_ as it would with any other MAVLink camera: 1. [TRIG_INTERFACE](../advanced_config/parameter_reference.md#TRIG_INTERFACE) must be set to `3` to configure the camera trigger driver for use with a MAVLink camera diff --git a/docs/en/simulation/multi-vehicle-simulation.md b/docs/en/simulation/multi-vehicle-simulation.md index 2dfebd00d7..34c7d8cd68 100644 --- a/docs/en/simulation/multi-vehicle-simulation.md +++ b/docs/en/simulation/multi-vehicle-simulation.md @@ -6,6 +6,7 @@ PX4 supports multi-vehicle simulation using the following simulators: - [Multi-Vehicle Sim with Gazebo Classic](../sim_gazebo_classic/multi_vehicle_simulation.md) (both with and without ROS) - [Multi-Vehicle Sim with FlightGear](../sim_flightgear/multi_vehicle.md) - [Multi-Vehicle Sim with JMAVSim](../sim_jmavsim/multi_vehicle.md) +- [Multi-Vehicle Sim with SIH](../sim_sih/index.md#multi-vehicle-simulation) The choice of the simulator depends on the vehicle to be simulated, how "good" the simulation needs to be (and for what features), and how many vehicles need to be simulated at a time: @@ -18,5 +19,8 @@ The choice of the simulator depends on the vehicle to be simulated, how "good" t Note, this is the successor of [Gazebo Classic](../sim_gazebo_classic/index.md) (below). - [Gazebo Classic](../sim_gazebo_classic/index.md) is less accurate and less heavy-weight and supports many features and vehicles that aren't available for FlightGear. It can simulate many more vehicles at a time than FlightGear and it allows for different types of vehicles to be simulated at the same time. -- JMAVSim is a very light-weight simulator that supports only quadcopters. +- [JMAVSim](../sim_jmavsim/index.md) is a very light-weight simulator that supports only quadcopters. It is recommended if you need to support a lot of quadcopters, and the simulation only needs to be approximate. +- [SIH](../sim_sih/index.md) is the lightest-weight option with zero external dependencies. + Since SIH is headless and runs physics internally, it can launch many instances with minimal resource usage. + It supports all 6 vehicle types (quad, hex, plane, tailsitter, standard VTOL, rover). diff --git a/docs/en/simulation/px4_simulation_quickstart.md b/docs/en/simulation/px4_simulation_quickstart.md new file mode 100644 index 0000000000..7a314741f4 --- /dev/null +++ b/docs/en/simulation/px4_simulation_quickstart.md @@ -0,0 +1,25 @@ +# PX4 Simulation QuickStart + +First install [Docker](https://docs.docker.com/get-docker/) (a free tool that runs containers). + +The following command will then run a PX4 quadrotor simulation that you can connect to [QGroundControl](https://qgroundcontrol.com), [MAVSDK](https://mavsdk.mavlink.io/) or [ROS 2](../ros2/user_guide.md) (on Linux, macOS, and Windows): + +```sh +docker run --rm -it -p 14550:14550/udp px4io/px4-sitl:latest +``` + +That's it — open [QGroundControl](https://qgroundcontrol.com) and fly! + +::: tip + +To try [other vehicle types](../sim_sih/#supported-vehicle-types) append the corresponding line below to the command: + +```sh +-e PX4_SIM_MODEL=sihsim_airplane # Plane +-e PX4_SIM_MODEL=sihsim_standard_vtol # Standard VTOL +-e PX4_SIM_MODEL=sihsim_rover # Ackermann rover +``` + +For more information and options see [Container Images](../simulation/px4_sitl_prebuilt_packages.md#container-images) (in _Pre-built SITL Packages_) and [SIH Simulation](../sim_sih/index.md). + +::: diff --git a/docs/en/simulation/px4_sitl_prebuilt_packages.md b/docs/en/simulation/px4_sitl_prebuilt_packages.md new file mode 100644 index 0000000000..4371c22551 --- /dev/null +++ b/docs/en/simulation/px4_sitl_prebuilt_packages.md @@ -0,0 +1,297 @@ +# Pre-built SITL Packages + +Pre-built packages let you run [PX4 SITL simulation](index.md) without setting up a build environment. + +This is very useful if you don't need to modify PX4 itself. +For example, if you want to write drone apps using [MAVSDK](https://mavsdk.mavlink.io) or [ROS 2](../ros2/user_guide.md), or you just want to fly with PX4. + +::: tip +See [PX4 Simulation QuickStart](px4_simulation_quickstart.md) for a one-line instruction to run the SIH package in a container. +::: + +## What's Available + +Two simulators are packaged, each available as a `.deb` package (Ubuntu) or a Docker [container](#container-images) (any OS): + +| Simulator | Format | Package / Image | Size | +| -------------------------------------------- | --------- | ----------------------- | ------- | +| [SIH](../sim_sih/index.md) | .deb | `px4` | ~10 MB | +| | container | `px4io/px4-sitl` | ~100 MB | +| [Gazebo Harmonic](../sim_gazebo_gz/index.md) | .deb | `px4-gazebo` | ~30 MB | +| | container | `px4io/px4-sitl-gazebo` | ~2 GB | + +SIH is a lightweight, headless simulator built into PX4 with no external dependencies. +Gazebo provides full 3D simulation with camera, LiDAR, and custom worlds. +Sizes are approximate and vary between releases. + +For help choosing between simulators, see the [simulator comparison table](index.md#simulator-comparison). + +### Versions and Releases + +Packages and images are versioned to match PX4 tags (e.g. `v1.17.0`, `v1.17.0~beta1`). +`.deb` packages are built for **Ubuntu 22.04 (Jammy)** and **24.04 (Noble)**, on both **amd64** and **arm64**. +Container images support **amd64** and **arm64**. +Stable releases and pre-releases are published on the [PX4 Releases](https://github.com/PX4/PX4-Autopilot/releases) page. + +## .deb Packages (Ubuntu) + +Download the `.deb` file for your Ubuntu version and architecture from the [PX4 Releases](https://github.com/PX4/PX4-Autopilot/releases) page, then install as shown below. +After installation the binary is added to the default Ubuntu system paths, and can be run from anywhere. + +### px4 (SIH) + +No extra repositories are required: + +```bash +sudo apt install ./px4_*.deb +``` + +### px4-gazebo (Gazebo Harmonic) + +The package depends on Gazebo Harmonic runtime libraries from the OSRF repository. +Add the repository first, then install: + +```bash +# Add OSRF Gazebo repository (one-time setup) +sudo curl -fsSL 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" \ + | sudo tee /etc/apt/sources.list.d/gazebo-stable.list > /dev/null +sudo apt update + +# Install (resolves Gazebo dependencies automatically) +sudo apt install ./px4-gazebo_*.deb +``` + +### Uninstalling + +```bash +sudo apt remove px4 # SIH package +sudo apt remove px4-gazebo # Gazebo package +``` + +## Container Images + +Container images are built using the same `.deb` packages described above, packaged into minimal Docker images. +They are published to [Docker Hub](https://hub.docker.com/u/px4io) on every tagged release. +You will need to [install Docker](https://docs.docker.com/get-docker/). + +| Image | Simulator | +| ----------------------------- | --------------- | +| `px4io/px4-sitl:` | SIH (headless) | +| `px4io/px4-sitl-gazebo:` | Gazebo Harmonic | + +Tags follow PX4 versions (e.g. `v1.17.0`). + +### Running + +```bash +# SIH +docker run --rm -it -p 14550:14550/udp px4io/px4-sitl:latest + +# Gazebo +docker run --rm -it -p 14550:14550/udp px4io/px4-sitl-gazebo:latest +``` + +Pass environment variables with `-e`: + +```bash +docker run --rm -it -p 14550:14550/udp \ + -e PX4_SIM_MODEL=sihsim_airplane \ + px4io/px4-sitl:latest +``` + +The quick-start command above only exposes the QGroundControl port. +To use MAVSDK, uXRCE-DDS (ROS 2), or MAVSim Viewer, expose the additional ports: + +```bash +docker run --rm -it \ + -p 14550:14550/udp \ + -p 14540:14540/udp \ + -p 8888:8888/udp \ + -p 19410:19410/udp \ + px4io/px4-sitl:latest +``` + +| Port | Protocol | Used by | +| ----- | -------- | --------------------------- | +| 14550 | UDP | QGroundControl | +| 14540 | UDP | MAVSDK / offboard API | +| 8888 | UDP | uXRCE-DDS agent (ROS 2) | +| 19410 | UDP | SIH display (MAVSim Viewer) | + +On Linux, you can skip individual port flags and use `--network host` instead: + +```bash +docker run --rm -it --network host px4io/px4-sitl:latest +``` + +## Configuration + +These options apply to both `.deb` packages and containers. +Note that after the first section below we only show how to use them with the deb packages (the pattern for using the options doesn't change). + +### Vehicle Selection + +Set `PX4_SIM_MODEL` to choose a vehicle. + +SIH: + +```bash +# Deb package +PX4_SIM_MODEL=sihsim_airplane px4 + +# Container +docker run --rm -it -p 14550:14550/udp px4io/px4-sitl:latest -e PX4_SIM_MODEL=sihsim_airplane +``` + +Gazebo: + +``` +# Deb package +PX4_SIM_MODEL=gz_x500 px4-gazebo + +# Container +docker run --rm -it -p 14550:14550/udp px4io/px4-sitl-gazebo:latest -e PX4_SIM_MODEL=gz_x500 +``` + +See [SIH Supported Vehicles](../sim_sih/index.md#supported-vehicle-types) and [Gazebo Vehicles](../sim_gazebo_gz/vehicles.md) for the full lists. + +### World Selection (Gazebo only) + +```sh +PX4_GZ_WORLD=baylands PX4_SIM_MODEL=gz_x500 px4-gazebo +``` + +See [Gazebo Worlds](../sim_gazebo_gz/worlds.md) for available worlds. + +### Environment Variables + +| Variable | Description | Default | +| -------------------- | ------------------------------------------------------------------ | -------------------- | +| `PX4_SIM_MODEL` | Vehicle model (e.g. `gz_x500`, `sihsim_quadx`) | (required) | +| `PX4_GZ_WORLD` | Gazebo world name, without `.sdf` (e.g. `baylands`) | `default` | +| `HEADLESS` | Set to `1` to disable Gazebo GUI | (unset) | +| `PX4_UXRCE_DDS_PORT` | uXRCE-DDS agent UDP port | `8888` | +| `PX4_UXRCE_DDS_NS` | uXRCE-DDS ROS namespace | (none) | +| `XDG_DATA_HOME` | Base directory for per-instance working data (parameters, dataman) | `$HOME/.local/share` | + +## Multi-Instance + +Multiple simulated vehicles can run simultaneously by passing the `-i` flag with an instance number. +Each instance must be started in a separate terminal (or container). This works with both simulators. + +```sh +# Terminal 1 +PX4_SIM_MODEL=sihsim_quadx px4 -i 0 + +# Terminal 2 +PX4_SIM_MODEL=sihsim_quadx px4 -i 1 +``` + +MAVLink and uXRCE-DDS port numbers are automatically offset by the instance number. + +Each package (`px4` and `px4-gazebo`) is a standalone install. Do not mix instances from the two packages in the same session. + +## MAVLink and QGroundControl + +PX4 opens several MAVLink UDP ports on startup. +[QGroundControl](https://qgroundcontrol.com) auto-connects on UDP port 14550. +You can also connect [MAVSDK](https://mavsdk.mavlink.io) or any MAVLink-compatible tool. + +| Link | Mode | UDP Local Port | UDP Remote Port | Data Rate | +| ---------------------- | ------- | ---------------- | ---------------- | --------- | +| GCS link | Normal | 18570 + instance | 14550 | 4 Mbps | +| API/Offboard link | Onboard | 14580 + instance | 14540 + instance | 4 Mbps | +| Onboard link to camera | Onboard | 14280 + instance | 14030 + instance | 4 kbps | +| Onboard link to gimbal | Gimbal | 13030 + instance | 13280 + instance | 400 kbps | +| SIH display (SIH only) | Custom | 19450 + instance | 19410 + instance | 400 kbps | + +By default, MAVLink only listens on localhost. +Set parameter `MAV_{i}_BROADCAST = 1` to enable network access. + +## ROS 2 Integration + +The `uxrce_dds_client` module starts automatically and connects to a Micro XRCE-DDS Agent over UDP. +Run the agent before starting PX4: + +```sh +MicroXRCEAgent udp4 -p 8888 +``` + +| Setting | Default | +| ---------- | ----------- | +| Transport | UDP | +| Agent IP | `127.0.0.1` | +| Agent Port | `8888` | + +Environment variables `PX4_UXRCE_DDS_PORT` and `PX4_UXRCE_DDS_NS` override the corresponding PX4 parameters ([UXRCE_DDS_PRT](../advanced_config/parameter_reference.md#UXRCE_DDS_PRT), [UXRCE_DDS_NS_IDX](../advanced_config/parameter_reference.md#UXRCE_DDS_NS_IDX)) at runtime without modifying stored parameters: + +```sh +PX4_UXRCE_DDS_PORT=9999 PX4_UXRCE_DDS_NS=drone1 PX4_SIM_MODEL=sihsim_quadx px4 +``` + +## Daemon Mode + +Start PX4 without an interactive shell (useful for CI pipelines and automated testing): + +```sh +PX4_SIM_MODEL=sihsim_quadx px4 -d +``` + +## Installed File Layout + +### px4 + +```txt +/opt/px4/ + bin/ + px4 # PX4 binary + px4-* # Module symlinks + px4-alias.sh # Shell aliases + etc/ # ROMFS (init scripts, mixers, airframes) + init.d-posix/ + +/usr/bin/px4 -> /opt/px4/bin/px4 +``` + +### px4-gazebo + +```txt +/opt/px4-gazebo/ + bin/ + px4 # PX4 binary + px4-gazebo # Gazebo wrapper (sets GZ_SIM_* env vars) + px4-* # Module symlinks + px4-alias.sh # Shell aliases + etc/ # ROMFS (init scripts, mixers, airframes) + init.d-posix/ + share/gz/ + models/ # Gazebo vehicle models + worlds/ # Gazebo world files + server.config + lib/gz/plugins/ # PX4 Gazebo plugins + +/usr/bin/px4-gazebo -> /opt/px4-gazebo/bin/px4-gazebo +``` + +### Runtime directories (created on first run, per user) + +```sh +$XDG_DATA_HOME/px4/rootfs// # parameters, dataman, eeprom +``` + +## Building .deb Files Locally + +To build `.deb` files locally (e.g. to package a custom PX4 branch): + +```sh +# SIH — produces px4_*.deb +make px4_sitl_sih +cd build/px4_sitl_sih && cpack -G DEB + +# Gazebo — produces px4-gazebo_*.deb +make px4_sitl_default +cd build/px4_sitl_default && cpack -G DEB +``` diff --git a/docs/en/smart_batteries/index.md b/docs/en/smart_batteries/index.md index 805ad60619..45d726e1ef 100644 --- a/docs/en/smart_batteries/index.md +++ b/docs/en/smart_batteries/index.md @@ -1,7 +1,7 @@ # Smart Batteries Smart Batteries provide more accurate (and often more detailed) information about the state of a battery than an autopilot can estimate for "dumb" batteries. -This allows for more more reliable flight planning notification of failure conditions. +This allows for more reliable flight planning notification of failure conditions. The information may include some of: remaining charge, time-to-empty (estimated), cell voltages (rated max/min, current voltage, etc.), temperature, currents, fault information, battery vendor, chemistry, etc. PX4 supports (at least) following smart batteries: diff --git a/docs/en/smart_batteries/rotoye_batmon.md b/docs/en/smart_batteries/rotoye_batmon.md index a50eba58e2..fe453bb014 100644 --- a/docs/en/smart_batteries/rotoye_batmon.md +++ b/docs/en/smart_batteries/rotoye_batmon.md @@ -1,6 +1,6 @@ # Rotoye Batmon -[Rotoye Batmon](https://rotoye.com/batmon/) is a kit for adding smart battery functionality to off-the-shelf Lithium-Ion and LiPo batteries. +[Rotoye Batmon](https://shop.rotoye.com/batmon/) is a kit for adding smart battery functionality to off-the-shelf Lithium-Ion and LiPo batteries. It can be purchased as a standalone unit or as part of a factory-assembled smart-battery. ![Rotoye Batmon Board](../../assets/hardware/smart_batteries/rotoye_batmon/smart-battery-rotoye.jpg) @@ -9,7 +9,7 @@ It can be purchased as a standalone unit or as part of a factory-assembled smart ## Where to Buy -[Rotoye Store](https://rotoye.com/batmon/): Batmon kits, custom smart-batteries, and accessories +[Rotoye Store](https://shop.rotoye.com/batmon/): Batmon kits, custom smart-batteries, and accessories ## Wiring/Connections @@ -50,7 +50,3 @@ In _QGroundControl_: batt_smbus start -X -b 1 -a 11 # External bus 1, address 0x0b batt_smbus start -X -b 1 -a 12 # External bus 1, address 0x0c ``` - -## Further Information - -[Quick Start Guide](https://rotoye.com/batmon-tutorial/) (Rotoye) diff --git a/docs/en/software_update/stm32_bootloader.md b/docs/en/software_update/stm32_bootloader.md index cbb0d2648d..fac2fb498e 100644 --- a/docs/en/software_update/stm32_bootloader.md +++ b/docs/en/software_update/stm32_bootloader.md @@ -62,7 +62,7 @@ arm-none-eabi-gdb ### J-Link -These instructions are for the [J-Link GDB server](https://www.segger.com/jlink-gdb-server.html). +These instructions are for the [J-Link GDB server](https://www.segger.com/products/debug-probes/j-link/tools/j-link-gdb-server/about-j-link-gdb-server/). #### Prerequisites diff --git a/docs/en/telemetry/cuav_p8_radio.md b/docs/en/telemetry/cuav_p8_radio.md index a20873b889..f8440a664d 100644 --- a/docs/en/telemetry/cuav_p8_radio.md +++ b/docs/en/telemetry/cuav_p8_radio.md @@ -19,7 +19,7 @@ It supports multiple modes such as point-to-point, point-to-multipoint, and rela ## Where to Buy -- [CUAV store](https://www.cuav.net/en/p8-2/) +- [CUAV store](https://www.cuav.net/en/p8-en/) - [CUAV alibaba](https://www.alibaba.com/product-detail/Free-shipping-CUAV-UAV-P8-Radio_1600324379418.html?spm=a2747.manage.0.0.2dca71d2bY4B0M) ## PX4 Configuration @@ -61,6 +61,6 @@ CUAV P8 Radio does not support power supply from the flight controller, it needs ## More information -[P8 manual](http://manual.cuav.net/data-transmission/p8-radio/p8-user-manual-en.pdf) +[P8 manual](https://manual.cuav.net/data-transmission/p8-radio/p8_user_manual_cn.pdf) [CUAV P8 Radio](https://doc.cuav.net/data-transmission/p8-radio/en/) (Official Guide) diff --git a/docs/en/telemetry/holybro_sik_longrange.md b/docs/en/telemetry/holybro_sik_longrange.md new file mode 100644 index 0000000000..b236ead623 --- /dev/null +++ b/docs/en/telemetry/holybro_sik_longrange.md @@ -0,0 +1,100 @@ +# Holybro SiK Telemetry Radio - Long Range + +This Holybro SiK Long Range Telemetry Radio is a small, light, and inexpensive open-source radio platform with an extended range (~20km) compared to the standard model. + +This radio is plug-and-play, ready for all Pixhawk Standard and other similar flight controllers, providing the easiest way to set up a telemetry connection between your controller and a ground station. +It uses open-source firmware that has been specially designed to work well with MAVLink packets and to be integrated with PX4, ArduPilot, Mission Planner and QGroundControl. + +The radios are available in 915 MHz or 433 MHz versions. +Please purchase the model that is appropriate for your country/region. + +![Sik Telemetry Radio - Long Range](../../assets/hardware/telemetry/holybro_sik_longrange/holybro_sik_longrange.jpg) + +## Where to Buy + +- [Holybro SiK Telemetry Radio - Long Range](https://holybro.com/collections/telemetry-radios/products/sik-telemetry-radio-1w) + +## Features + +- 1W maximum RF output and up to 20km range (compared to 100mW/300m for the short range version). +- Open-source SIK firmware +- Plug-n-play for Pixhawk Standard Flight Controllers +- The Easiest way to connect your controller and Ground Station +- Interchangeable air and ground radio +- 6-position JST-GH connector + +## Specification + +- 1 W maximum output power (adjustable) -117 dBm receive sensitivity +- RP-SMA connector +- 2-way full-duplex communication through adaptive TDM UART interface +- Transparent serial link +- MAVLink protocol framing +- Frequency Hopping Spread Spectrum (FHSS) Configurable duty cycle +- Error correction corrects up to 25% of bit errors Open-source SIK firmware +- Configurable through Mission Planner & APM Planner +- FT230X USB to BASIC UART IC +- USB Type C connector +- XT30 power connector for 7~28V DC input + +## LEDs Indicators Status + +The radios have four status LEDs. +The USB `RX` and `TX` LEDs indicate the status of reception and transmission of the USB port. +The `RADIO` and `ACT` two LED lights indicate the status of the RF circuit. + +- USB-TX LED (orange): + - Blinking: USB port has data transmission + - Off: USB port has no data transmission +- USB-RX LED (orange): + - Blinking: USB port has data reception + - Off: USB port has no data reception +- Radio LED (Green) + - Blinking: Searching for another radio + - Solid: Link is established with another radio +- ACT LED (Red) + - Flashing: Transmitting data + - Solid: In firmware update mode + +![Holybro SiK LongRange LED Indicators](../../assets/hardware/telemetry/holybro_sik_longrange/holybro_sik_longrange_label.png) + +## Connecting to Flight Controller + +Supply the power (7~28V) to the radio via the XT30 connector. +Use the 6-pin JST-GH connector that comes with the radio to connect the radio to your flight controller's `TELEM1` port. + +Note that `TELEM2` can also be used, but you may need to [configure the telemetry port](../peripherals/mavlink_peripherals.md) on some flight controllers. + +## Connecting to a PC or Ground Station + +First, power the module with a 7~28V DC source. +Then, connect the radio to your Windows PC or Ground Station using a Type-C USB cable. + +The necessary drivers should be installed automatically, and the radio will appear as a new “USB Serial Port” in the Windows Device Manager under Ports (COM & LPT). +The Mission Planner's COM Port selection drop-down should also include the newly added COM port. + +## Packages Include + +### Single Radio + +- 1W Radio modules with antennas (1) +- High-gain omnidirectional antenna (1) +- Male Type-C to male Type-C USB cable (1) +- Male XT30 to female XT30 adapter cable (1) +- Male XT30 to female XT60 adapter cable (1) +- JST-GH-6P to JST-GH-6P cable (1) (for Pixhawk Standard FC) +- Rubber damping grommet (3) + +![Sik Telemetry Radio - LongRange Package1](../../assets/hardware/telemetry/holybro_sik_longrange/holybro_sik_longrange_include1.png) + +### Pair Radios + +- 1W Radio modules with antennas (2) +- High-gain omnidirectional antenna (2) +- Male Type-C to male Type-C USB cable (1) +- Male XT30 to female XT30 adapter cable (1) +- Male XT30 to female XT60 adapter cable (1) +- JST-GH-6P to JST-GH-6P cable (1) (for Pixhawk Standard FC) +- Rubber damping grommet (3) + +![Sik Telemetry Radio - LongRange Package2](../../assets/hardware/telemetry/holybro_sik_longrange/holybro_sik_longrange_include2.png) diff --git a/docs/en/telemetry/index.md b/docs/en/telemetry/index.md index aca1af6bf0..5e172a9b42 100644 --- a/docs/en/telemetry/index.md +++ b/docs/en/telemetry/index.md @@ -6,6 +6,7 @@ PX4 supports a number of types of telemetry radios: - [SiK Radio](../telemetry/sik_radio.md) based firmware (more generally, any radio with a UART interface should work). - [HolyBro SiK Telemetry Radio](../telemetry/holybro_sik_radio.md) + - [HolyBro SiK Long Range](../telemetry/holybro_sik_longrange.md) - [RFD900 Telemetry Radio](../telemetry/rfd900_telemetry.md) - [ThunderFly TFSIK01 Telemetry Radio](../telemetry/tfsik_telemetry.md) - _HKPilot Telemetry Radio_ (Discontinued) diff --git a/docs/en/telemetry/jfi_telemetry.md b/docs/en/telemetry/jfi_telemetry.md index a6e7073379..67e9484ce4 100644 --- a/docs/en/telemetry/jfi_telemetry.md +++ b/docs/en/telemetry/jfi_telemetry.md @@ -94,7 +94,7 @@ If you want to change the baud rate: ### One-to-many (1:N) Setups For one-to-many (1:N) setups a higher baud rate is _highly recommended_ to ensure stable data reception. -All J.Fi devices should be set to the same baud rate (although communication may work even when when devices use different baud rates). +All J.Fi devices should be set to the same baud rate (although communication may work even when devices use different baud rates). This should be changed in both PX4 and the J.Fi modules as explained in the previous section. You will also need to make sure that all vehicles on the MAVLink network are assigned a unique **System ID** ([MAV_SYS_ID](../advanced_config/parameter_reference.md#MAV_SYS_ID)). diff --git a/docs/en/telemetry/sik_radio.md b/docs/en/telemetry/sik_radio.md index 97d234fa80..f5e9fae8cb 100644 --- a/docs/en/telemetry/sik_radio.md +++ b/docs/en/telemetry/sik_radio.md @@ -14,6 +14,7 @@ Hardware for the SiK radio can be obtained from various manufacturers/stores in ## Vendors - [Holybro Telemetry Radio](../telemetry/holybro_sik_radio.md) +- [HolyBro SiK Long Range](../telemetry/holybro_sik_longrange.md) - [RFD900 Telemetry Radio](../telemetry/rfd900_telemetry.md) - [ThunderFly TFSIK01 Telemetry Radio](../telemetry/tfsik_telemetry.md) - _HKPilot Telemetry Radio_ (Discontinued) diff --git a/docs/en/test_and_ci/integration_testing_mavsdk.md b/docs/en/test_and_ci/integration_testing_mavsdk.md index 1e2bea35d4..0d588d2f31 100644 --- a/docs/en/test_and_ci/integration_testing_mavsdk.md +++ b/docs/en/test_and_ci/integration_testing_mavsdk.md @@ -7,7 +7,7 @@ In future we plan to generalise them for any platform/hardware. The instructions below explain how to setup and run the tests locally. -:::note +::: info This is the recommended integration test framework for PX4. ::: diff --git a/docs/en/test_and_ci/integration_testing_ros1_mavros.md b/docs/en/test_and_ci/integration_testing_ros1_mavros.md index 591413058a..6b689fe3b7 100644 --- a/docs/en/test_and_ci/integration_testing_ros1_mavros.md +++ b/docs/en/test_and_ci/integration_testing_ros1_mavros.md @@ -8,7 +8,7 @@ It should be used only for new test cases that _require_ ROS 1. [MAVSDK Integration Testing](../test_and_ci/integration_testing_mavsdk.md) is preferred when writing new tests. ::: -:::note +::: info All PX4 integration tests are executed automatically by our [Continuous Integration](../test_and_ci/continous_integration.md) system. ::: diff --git a/docs/en/test_and_ci/test_flights.md b/docs/en/test_and_ci/test_flights.md index 91a7681f97..ffccd7f6d1 100644 --- a/docs/en/test_and_ci/test_flights.md +++ b/docs/en/test_and_ci/test_flights.md @@ -7,7 +7,7 @@ const { site } = useData();
-

This page may be out out of date. See the latest version.

+

This page may be out of date. See the latest version.

@@ -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) diff --git a/docs/en/test_and_ci/unit_tests.md b/docs/en/test_and_ci/unit_tests.md index 250a381c11..f11a996935 100644 --- a/docs/en/test_and_ci/unit_tests.md +++ b/docs/en/test_and_ci/unit_tests.md @@ -133,7 +133,7 @@ The steps to create new SITL unit tests are as follows: } ``` - `OPTION` can be `OPT_NOALLTEST`,`OPT_NOJIGTEST` or `0` and is considered if within px4 shell one of the two commands are called: + `OPTION` can be `OPT_NOALLTEST`,`OPT_NOJIGTEST` or `0` and is considered if within PX4 shell one of the two commands are called: ```sh pxh> tests all diff --git a/docs/en/test_cards/fw_01_manual_modes.md b/docs/en/test_cards/fw_01_manual_modes.md new file mode 100644 index 0000000000..78d8be34a2 --- /dev/null +++ b/docs/en/test_cards/fw_01_manual_modes.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 diff --git a/docs/en/test_cards/fw_02_full_autonomous.md b/docs/en/test_cards/fw_02_full_autonomous.md new file mode 100644 index 0000000000..c8405bd03d --- /dev/null +++ b/docs/en/test_cards/fw_02_full_autonomous.md @@ -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) diff --git a/docs/en/test_cards/mc_02_full_autonomous.md b/docs/en/test_cards/mc_02_full_autonomous.md index e3d015fbf2..e040ed0b7a 100644 --- a/docs/en/test_cards/mc_02_full_autonomous.md +++ b/docs/en/test_cards/mc_02_full_autonomous.md @@ -54,7 +54,7 @@ Plan a mission on the ground. Ensure the mission has - Take-off should be smooth as throttle is raised - Mission should upload on first attempt - Vehicle should automatically take-off upon engaging Auto -- Vehicle shoud adjust height to RTL altitude before returning home +- Vehicle should adjust height to RTL altitude before returning home - Upon landing, copter should not bounce on the ground - -:::info -Using the Power Module that comes with the kit you will need to configure the _Number of Cells_ in the [Power Settings](https://docs.qgroundcontrol.com/master/en/qgc-user-guide/setup_view/power.html) but you won't need to calibrate the _voltage divider_. -You will have to update the _voltage divider_ if you are using any other power module (e.g. the one from the Pixracer). -::: - -## 무선 조종 - -A remote control (RC) radio system is required if you want to _manually_ control your vehicle (PX4 does not require a radio system for autonomous flight modes). - -You will need to [select a compatible transmitter/receiver](../getting_started/rc_transmitter_receiver.md) and then _bind_ them so that they communicate (read the instructions that come with your specific transmitter/receiver). - -The instructions below show how to connect the different types of receivers to _Pixhawk 4 Mini_: - -- Spektrum/DSM or S.BUS receivers connect to the **DSM/SBUS RC** input. - - ![Pixhawk 4 Mini - Radio port for Spektrum receivers](../../assets/flight_controller/pixhawk4mini/pixhawk4mini_rc_dsmsbus.png) - -- PPM receivers connect to the **PPM RC** input port. - - ![Pixhawk 4 Mini - Radio port for PPM receivers](../../assets/flight_controller/pixhawk4mini/pixhawk4mini_rc_ppm.png) - -- PPM and PWM receivers that have an _individual wire for each channel_ must connect to the **PPM RC** port _via a PPM encoder_ [like this one](https://www.getfpv.com/radios/radio-accessories/holybro-ppm-encoder-module.html) (PPM-Sum receivers use a single signal wire for all channels). - -For more information about selecting a radio system, receiver compatibility, and binding your transmitter/receiver pair, see: [Remote Control Transmitters & Receivers](../getting_started/rc_transmitter_receiver.md). - -## Telemetry Radio (Optional) - -무선 텔레메트리는 지상국 프로그램에서 비행 차량의 통신/제어에 사용합니다(예 : UAV를 특정 위치로 지시하거나 새 임무를 업로드 할 수 있음). - -The vehicle-based radio should be connected to the **TELEM1** port as shown below (if connected to this port, no further configuration is required). -다른 텔레메트리는 일반적으로 지상국 컴퓨터나 모바일 장치에 USB를 통하여 연결됩니다. - -![Pixhawk 4 Mini Telemetry](../../assets/flight_controller/pixhawk4mini/pixhawk4mini_telemetry.png) - -## micro SD 카드 (선택 사항) - -SD cards are highly recommended as they are needed to [log and analyse flight details](../getting_started/flight_reporting.md), to run missions, and to use UAVCAN-bus hardware. -Insert the card (included in the kit) into _Pixhawk 4 Mini_ as shown below. - -![Pixhawk 4 Mini SD Card](../../assets/flight_controller/pixhawk4mini/pixhawk4mini_sdcard.png) - -:::tip -For more information see [Basic Concepts > SD Cards (Removable Memory)](../getting_started/px4_basic_concepts.md#sd-cards-removable-memory). -::: - -## 모터 - -Motors/servos are connected to the **MAIN OUT** ports in the order specified for your vehicle in the [Airframe Reference](../airframes/airframe_reference.md). See [_Pixhawk 4 Mini_ > Supported Platforms](../flight_controller/pixhawk4_mini.md#supported-platforms) for more information. - -:::info -이 참고사항은 모든 지원되는 기체 프레임의 출력 포트의 모터/서보 연결 리스트입니다. 프레임이 참고사항에 기재되어 있지 않다면, 올바른 유형의 "일반" 프레임을 사용하십시오. -::: - -:::warning -The mapping is not consistent across frames (e.g. you can't rely on the throttle being on the same output for all plane frames). -가지고 있는 기체의 프레임에 대해 올바르게 모터를 제대로 연결하였는지 다시 한 번 확인하십시오. -::: - -## 기타 주변 장치 - -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) - - - -## 추가 정보 - -- [_Pixhawk 4 Mini_](../flight_controller/pixhawk4_mini.md) diff --git a/docs/ko/assembly/quick_start_pixhawk5x.md b/docs/ko/assembly/quick_start_pixhawk5x.md index 461900263c..18e9f8c07b 100644 --- a/docs/ko/assembly/quick_start_pixhawk5x.md +++ b/docs/ko/assembly/quick_start_pixhawk5x.md @@ -53,7 +53,7 @@ The GPS module's integrated safety switch is enabled _by default_ (when enabled, ## 전원 Connect the output of the _PM02D Power Module_ (PM board) that comes with the Standard Set to one of the **POWER** port of _Pixhawk 5X_ using the 6-wire cable. -The PM02D and Power ports on the Pixhawk 5X uses the 6 circuit [2.00mm Pitch CLIK-Mate Wire-to-Board PCB Receptacle](https://www.molex.com/en-us/products/part-detail/5024430670) & [Housing](https://www.molex.com/molex/products/part-detail/crimp_housings/5024390600). +The PM02D and Power ports on the Pixhawk 5X uses the 6 circuit [2.00mm Pitch CLIK-Mate Wire-to-Board PCB Receptacle](https://www.molex.com/en-us/products/part-detail/5024430670) & [Housing](https://www.molex.com/en-us/products/part-detail/5024390600). The PM02D Power Module supports **2~6S** battery, the board input should be connected to your LiPo battery. Note that the PM board does not supply power to the + and - pins of **FMU PWM OUT** and **I/O PWM OUT**. diff --git a/docs/ko/assembly/quick_start_pixhawk6x.md b/docs/ko/assembly/quick_start_pixhawk6x.md index b1728c3a62..7a928314d6 100644 --- a/docs/ko/assembly/quick_start_pixhawk6x.md +++ b/docs/ko/assembly/quick_start_pixhawk6x.md @@ -66,7 +66,7 @@ The GPS module's integrated safety switch is enabled _by default_ (when enabled, ## 전원 Connect the output of the _PM02D Power Module_ (PM board) that comes with the Standard Set to one of the **POWER** port of _Pixhawk 6X_ using the 6-wire cable. -The PM02D and Power ports on the Pixhawk 6X uses the 6 circuit [2.00mm Pitch CLIK-Mate Wire-to-Board PCB Receptacle](https://www.molex.com/en-us/products/part-detail/5024430670) & [Housing](https://www.molex.com/molex/products/part-detail/crimp_housings/5024390600). +The PM02D and Power ports on the Pixhawk 6X uses the 6 circuit [2.00mm Pitch CLIK-Mate Wire-to-Board PCB Receptacle](https://www.molex.com/en-us/products/part-detail/5024430670) & [Housing](https://www.molex.com/en-us/products/part-detail/5024390600). The PM02D Power Module supports **2~6S** battery, the board input should be connected to your LiPo battery. Note that the PM board does not supply power to the + and - pins of **FMU PWM OUT** and **I/O PWM OUT**. diff --git a/docs/ko/assembly/quick_start_pixracer.md b/docs/ko/assembly/quick_start_pixracer.md index bc571e0ce5..467f304b9e 100644 --- a/docs/ko/assembly/quick_start_pixracer.md +++ b/docs/ko/assembly/quick_start_pixracer.md @@ -52,7 +52,7 @@ You will need to [select a compatible transmitter/receiver](../getting_started/r Pixracer has inbuilt WiFi, but also supports telemetry via external Wi-Fi or radio telemetry modules connected to the `TELEM1` or `TELEM2` ports. 무선 다이어그램은 아래의 그림과 같습니다. -![Pixracer external telemtry options](../../assets/flight_controller/pixracer/pixracer_top_telemetry.jpg) +![Pixracer external telemetry options](../../assets/flight_controller/pixracer/pixracer_top_telemetry.jpg) :::info The `TELEM2` port must be configured as a second MAVLink instance using the [MAV_2_CONFIG](../advanced_config/parameter_reference.md#MAV_2_CONFIG) parameter. diff --git a/docs/ko/camera/camera_architecture.md b/docs/ko/camera/camera_architecture.md index 6620af5b06..7103bbe83c 100644 --- a/docs/ko/camera/camera_architecture.md +++ b/docs/ko/camera/camera_architecture.md @@ -36,7 +36,7 @@ The `camera_trigger`, `camera_capture` and `camera_feedback` modules are not use This work is handled by three PX4 components: [`camera_trigger` driver](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/camera_trigger), [`camera_capture` driver](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/camera_capture), [`camera-feedback` module](../modules/modules_system.md#camera-feedback). `camera_trigger` subscribes to the [VehicleCommand](../msg_docs/VehicleCommand.md) topic and monitors for updates to its [supported commands](../camera/fc_connected_camera.md#mavlink-command-interface). -Thes updates occur when either a command is received via MAVLink or when a [camera item is reached in a mission](#camera-commands-in-missions). +These updates occur when either a command is received via MAVLink or when a [camera item is reached in a mission](#camera-commands-in-missions). The commands enable and disable triggering, and configure triggering at time and distance intervals. The driver tracks these intervals, and when needed triggers the outputs. diff --git a/docs/ko/camera/camera_intel_realsense_t265_vio.md b/docs/ko/camera/camera_intel_realsense_t265_vio.md index d5f0a450c4..78c1e48224 100644 --- a/docs/ko/camera/camera_intel_realsense_t265_vio.md +++ b/docs/ko/camera/camera_intel_realsense_t265_vio.md @@ -18,17 +18,22 @@ No longer available. At a high level: -- The [`realsense-ros` wrapper](https://github.com/IntelRealSense/realsense-ros) provided by Intel should be used to extract the raw data from the camera. +- The [`realsense-ros` wrapper](https://github.com/realsenseai/realsense-ros) provided by Intel should be used to extract the raw data from the camera. + - The camera should be mounted with lenses facing down (default). Be sure to specify the camera orientation by publishing the static transform between the `base_link` and `camera_pose_frame` in a ROS launch file, for example: + ```xml ``` + This is a static transform that links the camera ROS frame `camera_pose_frame` to the MAVROS drone frame `base_link`. + - the first three `args` specify _translation_ x,y,z in metres from the center of the flight controller to the camera. For example, if the camera is 10cm in front of the controller and 4cm up, the first three numbers would be : [0.1, 0, 0.04,...] - the next three `args` specify rotation in radians (yaw, pitch, roll). So `[... 0, 1.5708, 0]` means pitch down by 90° (facing the ground). Facing straight forward would be [... 0 0 0]. + - The camera is sensitive to high-frequency vibrations! It should be soft-mounted with, for example, vibration isolation foam. diff --git a/docs/ko/camera/fc_connected_camera.md b/docs/ko/camera/fc_connected_camera.md index f8a87bb31a..a7782ce9a0 100644 --- a/docs/ko/camera/fc_connected_camera.md +++ b/docs/ko/camera/fc_connected_camera.md @@ -79,7 +79,7 @@ The shutter integration setting (`param2`) is only obeyed with a GPIO backend. ## Trigger Configuration -Cameras can be connected to the FC for triggering using different intefaces, such as PWM, and GPIO, by specifying the appropriate [trigger interface backend](#trigger-interface-backends). +Cameras can be connected to the FC for triggering using different interfaces, such as PWM, and GPIO, by specifying the appropriate [trigger interface backend](#trigger-interface-backends). You can also indicate the camera [trigger mode](#trigger-modes). This configuration can most easily be done from the _QGroundControl_ [Vehicle Setup > Camera](https://docs.qgroundcontrol.com/master/en/qgc-user-guide/setup_view/camera.html#px4-camera-setup) section. @@ -308,7 +308,7 @@ Wire up your cameras to your AUX port by connecting the ground and signal pins t ### Step 4 You will have to modify your driver to follow the sequence diagram above. -Public reference implementations for [IDS Imaging UEye](https://github.com/ProjectArtemis/ueye_cam) cameras and for [IEEE1394 compliant](https://github.com/andre-nguyen/camera1394) cameras are available. +Public reference implementations for [IDS Imaging UEye](https://github.com/anqixu/ueye_cam) cameras and for [IEEE1394 compliant](https://github.com/andre-nguyen/camera1394) cameras are available. ## See Also diff --git a/docs/ko/camera/mavlink_v1_camera.md b/docs/ko/camera/mavlink_v1_camera.md index b0984e8e4a..f80abceba4 100644 --- a/docs/ko/camera/mavlink_v1_camera.md +++ b/docs/ko/camera/mavlink_v1_camera.md @@ -1,4 +1,4 @@ -# Simple MAVLink Cameras (Camera Protcol v1) +# Simple MAVLink Cameras (Camera Protocol v1) This topic explains how to use PX4 with a MAVLink [camera](../camera/index.md) that implements the [Camera Protocol v1 (Simple Trigger Protocol)](https://mavlink.io/en/services/camera_v1.html) with PX4 and a Ground Station. @@ -18,7 +18,7 @@ This approach is retained for use with older MAVLink cameras. PX4 supports this command set for triggering cameras with native support for the protocol (as described in this topic), and also for [cameras attached to flight controller outputs](../camera/fc_connected_camera.md). Ground stations and MAVLink SDKs generally address camera commands to the autopilot, which then forwards them to a connected MAVLink channel of type `onboard`. -PX4 also re-emits any camera mission items it encouters in a mission as camera commands: commands that aren't accepted are logged. +PX4 also re-emits any camera mission items it encounters in a mission as camera commands: commands that aren't accepted are logged. In all cases the commands are sent with the system id of the autopilot and the component ID of 0 (i.e. addressed to all components, including cameras). PX4 will also emit a [CAMERA_TRIGGER](https://mavlink.io/en/messages/common.html#CAMERA_TRIGGER) whenever an image capture is triggered (the camera itself may also emit this message on triggering). diff --git a/docs/ko/can/index.md b/docs/ko/can/index.md index d628ee0ede..58dbce4ad9 100644 --- a/docs/ko/can/index.md +++ b/docs/ko/can/index.md @@ -38,7 +38,7 @@ Devices within a network are connected in a _daisy-chain_ in any order (this dif :::warning Don't connect each CAN peripheral to a separate CAN port! -Unlike UARTs, CAN peripherals are designed to be daisy chained, with additional ports such as `CAN2` used for [redundancy](redundancy). +Unlike UARTs, CAN peripherals are designed to be daisy chained, with additional ports such as `CAN2` used for [redundancy](#redundancy). ::: At either end of the chain, a 120Ω termination resistor should be connected between the two data lines. @@ -84,7 +84,7 @@ You only _need_ one CAN port to support an arbitrary number of CAN devices using Don't connect each CAN peripheral to a separate CAN port! ::: -Generally you'll daisy all CAN peripherals off a single port, and if there is more than one CAN port, use the second one for [redundancy](redundancy). +Generally you'll daisy all CAN peripherals off a single port, and if there is more than one CAN port, use the second one for [redundancy](#redundancy). If three are three ports, you might use the remaining network for devices that support another CAN protocol. The documentation for your flight controller should indicate which ports are supported/enabled. diff --git a/docs/ko/companion_computer/companion_computer_peripherals.md b/docs/ko/companion_computer/companion_computer_peripherals.md index 1fde23244d..a24216a6d9 100644 --- a/docs/ko/companion_computer/companion_computer_peripherals.md +++ b/docs/ko/companion_computer/companion_computer_peripherals.md @@ -54,8 +54,8 @@ They are in no way guaranteed to be plug and play with your companion computer. Popular stereo cameras include: -- [Intel® RealSense™ Depth Camera D435](https://realsenseai.com/stereo-depth-cameras/stereo-depth-camera-d435/) -- [Intel® RealSense™ Depth Camera D415](https://realsenseai.com/stereo-depth-cameras/stereo-depth-camera-d415/) +- [Intel® RealSense™ Depth Camera D435](https://www.realsenseai.com/products/stereo-depth-camera-d435/) +- [Intel® RealSense™ Depth Camera D415](https://www.realsenseai.com/products/stereo-depth-camera-d415/) - [DUO MLX](https://duo3d.com/product/duo-minilx-lv1) ### VIO Cameras/Sensors diff --git a/docs/ko/companion_computer/holybro_pixhawk_jetson_baseboard.md b/docs/ko/companion_computer/holybro_pixhawk_jetson_baseboard.md index be5e958812..550c830611 100644 --- a/docs/ko/companion_computer/holybro_pixhawk_jetson_baseboard.md +++ b/docs/ko/companion_computer/holybro_pixhawk_jetson_baseboard.md @@ -786,7 +786,7 @@ sudo apt install build-essential cmake git genromfs kconfig-frontends libncurses ## Building/Flashing the Pixhawk The recommended way to update PX4 is on the Pixhawk part of the board is to use your development computer. -You can either install install prebuilt binaries with QGroundControl, or first build and then upload custom firmware. +You can either install prebuilt binaries with QGroundControl, or first build and then upload custom firmware. Alternatively, you can build and deploy PX4 firmware to the Pixhawk part from the Jetson. diff --git a/docs/ko/companion_computer/holybro_pixhawk_rpi_cm4_baseboard.md b/docs/ko/companion_computer/holybro_pixhawk_rpi_cm4_baseboard.md index 0f062e642b..0fb0567d87 100644 --- a/docs/ko/companion_computer/holybro_pixhawk_rpi_cm4_baseboard.md +++ b/docs/ko/companion_computer/holybro_pixhawk_rpi_cm4_baseboard.md @@ -99,7 +99,7 @@ The image below shows the wiring in greater detail. This section explains how you install your preferred Linux distro, such as "Raspberry Pi OS 64bit" onto the RPi EMCC. -참고: +Notes: - If you are using PX4, you will need to use PX4 version 1.13.1 or newer for PX4 to recognize this baseboard. - The fan does not indicate if the RPi CM4 is powered/running or not. diff --git a/docs/ko/companion_computer/index.md b/docs/ko/companion_computer/index.md index 481e8c1693..3add792b73 100644 --- a/docs/ko/companion_computer/index.md +++ b/docs/ko/companion_computer/index.md @@ -33,7 +33,7 @@ They are listed here as they can be updated with "vanilla" PX4 firmware for test ## Companion Computer Options -PX4 can be used with computers that can be configured to communicate via MAVLink or microROS/uXRCE-DDS over over a serial port (or Ethernet port, if present). +PX4 can be used with computers that can be configured to communicate via MAVLink or microROS/uXRCE-DDS over a serial port (or Ethernet port, if present). A small subset of possible alternatives are listed below. Larger high power examples: diff --git a/docs/ko/companion_computer/pixhawk_rpi.md b/docs/ko/companion_computer/pixhawk_rpi.md index 070dbd0b3e..da2ce6a159 100644 --- a/docs/ko/companion_computer/pixhawk_rpi.md +++ b/docs/ko/companion_computer/pixhawk_rpi.md @@ -1,6 +1,6 @@ # Raspberry Pi Companion with Pixhawk -This topic describes how to setup a Raspberry Pi ("RPi") companion companion running [ROS 2](../ros2/user_guide.md) on Linux Ubuntu OS, connecting to a [Pixhawk](../flight_controller/autopilot_pixhawk_standard.md) flight controller using a serial connection between the Pixhawk `TELEM2` port and the RPi's TX/RX pins. +This topic describes how to setup a Raspberry Pi ("RPi") companion running [ROS 2](../ros2/user_guide.md) on Linux Ubuntu OS, connecting to a [Pixhawk](../flight_controller/autopilot_pixhawk_standard.md) flight controller using a serial connection between the Pixhawk `TELEM2` port and the RPi's TX/RX pins. These instructions should be readily extensible to other RPi and flight controller configurations. diff --git a/docs/ko/companion_computer/video_streaming.md b/docs/ko/companion_computer/video_streaming.md index 67f705362d..2b05f23af4 100644 --- a/docs/ko/companion_computer/video_streaming.md +++ b/docs/ko/companion_computer/video_streaming.md @@ -20,7 +20,7 @@ For a Ubuntu companion, a minimal set might be: sudo apt install gstreamer1.0-plugins-bad gstreamer1.0-libav gstreamer1.0-gl -y ``` -For the full set you can mirror the QGC dependencies installed by [/tools/setup/install-dependencies-debian.sh](https://github.com/mavlink/qgroundcontrol/blob/master/tools/setup/install-dependencies-debian.sh). +For the full set you can mirror the QGC dependencies installed by [/tools/setup/install_dependencies.py](https://github.com/mavlink/qgroundcontrol/blob/master/tools/setup/install_dependencies.py). At time of writing this is: ```sh diff --git a/docs/ko/complete_vehicles_mc/crazyflie2.md b/docs/ko/complete_vehicles_mc/crazyflie2.md index 14dde9d1af..920c814ee3 100644 --- a/docs/ko/complete_vehicles_mc/crazyflie2.md +++ b/docs/ko/complete_vehicles_mc/crazyflie2.md @@ -1,319 +1,7 @@ + + + diff --git a/docs/ko/complete_vehicles_mc/holybro_kopis2.md b/docs/ko/complete_vehicles_mc/holybro_kopis2.md index ac8c2c7417..7db71dddcc 100644 --- a/docs/ko/complete_vehicles_mc/holybro_kopis2.md +++ b/docs/ko/complete_vehicles_mc/holybro_kopis2.md @@ -29,7 +29,7 @@ The _Kopis 2_ can be bought from a number of vendors, including: The _Kopis 2_ comes preinstalled with Betaflight. Before loading PX4 firmware you must first install the PX4 bootloader. -Instructions for installing the bootloader can be found in the [Kakute F7](../flight_controller/kakutef7.md#bootloader) topic (this is the flight controller board on the _Kopis 2_). +Download the [kakutef7_bl.hex](https://raw.githubusercontent.com/PX4/PX4-Autopilot/release/1.17/docs/assets/flight_controller/kakutef7/kakutef7_bl_0b3fbe2da0.hex?download=true) bootloader binary and read [PX4 Bootloader Flashing onto Betaflight Systems](../advanced_config/bootloader_update_from_betaflight.md) for flashing instructions. :::tip You can always [reinstall Betaflight](../advanced_config/bootloader_update_from_betaflight.md#reinstall-betaflight) later if you want! diff --git a/docs/ko/complete_vehicles_mc/px4_vision_kit.md b/docs/ko/complete_vehicles_mc/px4_vision_kit.md index 732cca2f3b..55489bc589 100644 --- a/docs/ko/complete_vehicles_mc/px4_vision_kit.md +++ b/docs/ko/complete_vehicles_mc/px4_vision_kit.md @@ -70,7 +70,7 @@ Difference between the PX4 Vision V1 and V1.5 can be found [here](https://docs.h ![PV4 Vision v1.5](../../assets/hardware/px4_vision_devkit/px4_vision_v1.5_whats_inside.jpg) -What's inside the PX4 Vision V1 can be found here in the [PX4 v1.13 Docs here](https://docs.px4.io/v1.13/en/complete_vehicles/px4_vision_kit.html#what-is-inside). +What's inside the PX4 Vision V1 can be found here in the [PX4 v1.13 Docs here](https://docs.px4.io/v1.13/en/complete_vehicles/px4_vision_kit#what-is-inside). The PX4 Vision DevKit contains following components: @@ -403,7 +403,7 @@ The carrier board pinouts and other information are in the [downloads section](h ## Other Development Resources - [_UP Core_ Wiki](https://github.com/up-board/up-community/wiki/Ubuntu) - _Up Core_ companion computer technical information -- [Occipital Developer Forum](https://structure.io/developers/) - _Structure Core_ camera information +- [Occipital Developer Forum](https://structure.io/structure-sdk/) - _Structure Core_ camera information - [Pixhawk 4 Overview](../flight_controller/pixhawk4.md) - [Pixhawk 6C Overview](../flight_controller/pixhawk6c.md) diff --git a/docs/ko/complete_vehicles_rover/aion_r1.md b/docs/ko/complete_vehicles_rover/aion_r1.md index 7399c97675..1ef825f4d0 100644 --- a/docs/ko/complete_vehicles_rover/aion_r1.md +++ b/docs/ko/complete_vehicles_rover/aion_r1.md @@ -33,7 +33,7 @@ For this build this includes an [Auterion Skynode](../companion_computer/auterio If using a standard Pixhawk you could connect the RoboClaw to the Autopilot without an Adapter Board. ::: -The RoboClaw should be connected to a suitable suitable serial (UART) port on the flight controller, such as `GPS2` or `TELEM1`. +The RoboClaw should be connected to a suitable serial (UART) port on the flight controller, such as `GPS2` or `TELEM1`. Other RoboClaw wiring is detailed in the [RoboClaw User Manual](https://downloads.basicmicro.com/docs/roboclaw_user_manual.pdf) 'Packet Serial Wiring' section and shown below (this setup has been validated for compatibility). ![Serial Wiring Encoders](../../assets/airframes/rover/aion_r1/wiring_r1.jpg) diff --git a/docs/ko/computer_vision/collision_prevention.md b/docs/ko/computer_vision/collision_prevention.md index 12d78ce16b..6b7effa795 100644 --- a/docs/ko/computer_vision/collision_prevention.md +++ b/docs/ko/computer_vision/collision_prevention.md @@ -143,7 +143,7 @@ If you wish to move freely into directions without sensor coverage, this can be ### Acceleration Constraining -For this we split out the acceleration setpoint into two components, one parallel to the closest distance to the obstacle and one normal to it. Then we scale each of these components according the the figure below. +For this we split out the acceleration setpoint into two components, one parallel to the closest distance to the obstacle and one normal to it. Then we scale each of these components according to the figure below. ![Scalefactor](../../assets/computer_vision/collision_prevention/scalefactor.png) diff --git a/docs/ko/computer_vision/path_planning_interface.md b/docs/ko/computer_vision/path_planning_interface.md index cae7400715..3e6fb9688d 100644 --- a/docs/ko/computer_vision/path_planning_interface.md +++ b/docs/ko/computer_vision/path_planning_interface.md @@ -18,4 +18,4 @@ This interface allows PX4 to stream a proposed path to a companion computer, and This enables features such obstacle avoidance in missions and safer landing to be provided by a planner on a companion computer. This actual code is still present in code at time of writing (PX4 v1.15). -Information about the API and associated features can be found in the [PX4 v1.14 docs](https://docs.px4.io/v1.14/en/computer_vision/path_planning_interface.html). +Information about the API and associated features can be found in the [PX4 v1.14 docs](https://docs.px4.io/v1.14/en/computer_vision/path_planning_interface). diff --git a/docs/ko/computer_vision/visual_inertial_odometry.md b/docs/ko/computer_vision/visual_inertial_odometry.md index 9601bae4ce..54d4524328 100644 --- a/docs/ko/computer_vision/visual_inertial_odometry.md +++ b/docs/ko/computer_vision/visual_inertial_odometry.md @@ -101,8 +101,8 @@ A plot of external data vs. onboard estimate (as above) can be generated using [ ## Check/Verify VIO Estimate {#verify_estimate} -:::info -The [MAV_ODOM_LP](../advanced_config/parameter_reference.md#MAV_ODOM_LP) parameter mentioned below was removed in PX4 v1.14. +:::warning +The `MAV_ODOM_LP` parameter mentioned below was removed in PX4 v1.14. This section needs to be updated. ::: diff --git a/docs/ko/concept/control_allocation.md b/docs/ko/concept/control_allocation.md index 98eab32fd7..f6b392d3d0 100644 --- a/docs/ko/concept/control_allocation.md +++ b/docs/ko/concept/control_allocation.md @@ -2,7 +2,7 @@ :::info Control allocation replaces the legacy mixing approach used in PX4 v1.13 and earlier. -For PX4 v1.13 documentation see: [Mixing & Actuators](https://docs.px4.io/v1.13/en/concept/mixing.html), [Geometry Files](https://docs.px4.io/v1.13/en/concept/geometry_files.html) and [Adding a New Airframe Configuration](https://docs.px4.io/v1.13/en/dev_airframes/adding_a_new_frame.html). +For PX4 v1.13 documentation see: [Mixing & Actuators](https://docs.px4.io/v1.13/en/concept/mixing), [Geometry Files](https://docs.px4.io/v1.13/en/concept/geometry_files) and [Adding a New Airframe Configuration](https://docs.px4.io/v1.13/en/dev_airframes/adding_a_new_frame). ::: PX4 takes desired torque and thrust commands from the core controllers and translates them to actuator commands which control motors or servos. @@ -31,7 +31,7 @@ Overview of the mixing pipeline in terms of modules and uORB topics (press to sh ![Pipeline Overview](../../assets/concepts/control_allocation_pipeline.png) -참고: +Notes: - The rate controller outputs torque and thrust setpoints - the `control_allocator` module: diff --git a/docs/ko/concept/events_interface.md b/docs/ko/concept/events_interface.md index b6c2f7c76f..2814b8437f 100644 --- a/docs/ko/concept/events_interface.md +++ b/docs/ko/concept/events_interface.md @@ -94,7 +94,7 @@ Explanations and requirements: ``` - Above we specify a separate external and internal log level, which are the levels displayed to GCS users and in the log file, respectively: `{events::Log::Error, events::LogInternal::Info}`. - For the majority of cases you can pass a single log level, and this will be used for both exernal and internal cases. + For the majority of cases you can pass a single log level, and this will be used for both external and internal cases. There are cases it makes sense to have two different log levels. For example an RTL failsafe action: the user should see it as Warning/Error, whereas in the log, it is an expected system response, so it can be set to `Info`. diff --git a/docs/ko/concept/flight_tasks.md b/docs/ko/concept/flight_tasks.md index 6ffe26163b..bd6924c2c4 100644 --- a/docs/ko/concept/flight_tasks.md +++ b/docs/ko/concept/flight_tasks.md @@ -116,7 +116,7 @@ The instructions below might be used to create a task named _MyTask_: ::: tip The task added above will be built on all boards, including those with constrained flash such as Pixhawk FMUv2. - If your task is not indended for use on boards with constrained flash it should instead be added to the conditional block shown below (as shown). + If your task is not intended for use on boards with constrained flash it should instead be added to the conditional block shown below (as shown). ```cmake ... diff --git a/docs/ko/concept/system_startup.md b/docs/ko/concept/system_startup.md index 058b7577c7..1463f336f3 100644 --- a/docs/ko/concept/system_startup.md +++ b/docs/ko/concept/system_startup.md @@ -21,7 +21,7 @@ On POSIX, the system shell is used as script interpreter (e.g. /bin/sh, being sy - PX4 모듈은 시스템에서 개별적으로 실행할 수 있어야합니다. 이 동작은 심볼릭 링크로 처리합니다. For each module a symbolic link `px4- -> px4` is created in the `bin` directory of the build folder. - When executed, the binary path is checked (`argv[0]`), and if it is a module (starts with `px4-`), it sends the command to the main px4 instance (see below). + When executed, the binary path is checked (`argv[0]`), and if it is a module (starts with `px4-`), it sends the command to the main PX4 instance (see below). :::tip The `px4-` prefix is used to avoid conflicts with system commands (e.g. `shutdown`), and it also allows for simple tab completion by typing `px4-`. @@ -32,7 +32,7 @@ On POSIX, the system shell is used as script interpreter (e.g. /bin/sh, being sy For that the `bin` directory with the symbolic links is added to the `PATH` variable right before executing the startup scripts. - 쉘은 각 모듈을 새로운(클라이언트) 프로세스로 시작합니다. - 각 클라이언트 프로세스는 실제 모듈이 스레드로 실행되는 px4(서버)의 기본 인스턴스와 통신합니다. + Each client process needs to communicate with the main instance of PX4 (the server), where the actual modules are running as threads. This is done through a [UNIX socket](https://man7.org/linux/man-pages/man7/unix.7.html). 서버는 클라이언트가 연결하고 명령을 보낼 수 있는 소켓으로 수신 대기합니다. 그런 다음 서버는 출력과 반환 코드를 다시 클라이언트로 전송합니다. @@ -40,7 +40,7 @@ On POSIX, the system shell is used as script interpreter (e.g. /bin/sh, being sy - The startup scripts call the module directly, e.g. `commander start`, rather than using the `px4-` prefix. This works via aliases: for each module an alias in the form of `alias =px4-` is created in the file `bin/px4-alias.sh`. -- The `rcS` script is executed from the main px4 instance. +- The `rcS` script is executed from the main PX4 instance. It does not start any modules, but first updates the `PATH` variable and then simply runs a shell with the `rcS` file as argument. - 그 외에도, 다중 기체 시뮬레이션을 위하여 여러 서버 인스턴스를 시작할 수 있습니다. diff --git a/docs/ko/config/_autotune.md b/docs/ko/config/_autotune.md index 932f43efc7..9a18e88cd9 100644 --- a/docs/ko/config/_autotune.md +++ b/docs/ko/config/_autotune.md @@ -126,7 +126,7 @@ Additional notes:
- The instructions above tune the vehicle in [Altitude mode](../flight_modes_mc/altitude.md). - You can instead takeoff in [Takeoff mode](../flight_modes_mc/takeoff.md) and tune in [Position mode](../flight_modes_mc/position.md) if the vehicle is is _known_ to be stable in these modes. + You can instead takeoff in [Takeoff mode](../flight_modes_mc/takeoff.md) and tune in [Position mode](../flight_modes_mc/position.md) if the vehicle is _known_ to be stable in these modes.
@@ -243,7 +243,7 @@ To map a switch: 2. Set [RC_MAP_AUX1](../advanced_config/parameter_reference.md#RC_MAP_AUX1) to match the RC channel for your switch (you can use any of `RC_MAP_AUX1` to `RC_MAP_AUX6`). 3. Set [FW_AT_MAN_AUX](../advanced_config/parameter_reference.md#FW_AT_MAN_AUX) to the selected channel (i.e. `1: Aux 1` if you mapped `RC_MAP_AUX1`). -The auto tuner will be disabled when the switch is below `0.5` (on the manual control setpoint range of of `[-1, 1]`) and enabled when the switch channel is above `0.5`. +The auto tuner will be disabled when the switch is below `0.5` (on the manual control setpoint range of `[-1, 1]`) and enabled when the switch channel is above `0.5`. If using an RC AUX switch to enable autotuning, make sure to [select the tuning axes](#select-tuning-axis) before flight. diff --git a/docs/ko/config/actuators.md b/docs/ko/config/actuators.md index 48ceecb4bd..f031384f99 100644 --- a/docs/ko/config/actuators.md +++ b/docs/ko/config/actuators.md @@ -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](../payloads/generic_actuator_control.md#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 @@ -675,7 +689,6 @@ For each of the tilt servos: - 안전 버튼을 쿨러야 액츄에이트를 테스트 할 수 있습니다. - 중지 스위치를 사용하면 모터를 즉시 중지할 수 있습니다. - 해당 슬라이더가 변경될 때까지 서보는 실제로 이동하지 않습니다. -- The parameter [COM_MOT_TEST_EN](../advanced_config/parameter_reference.md#COM_MOT_TEST_EN) can be used to completely disable actuator testing. - On the shell, [actuator_test](../modules/modules_command.md#actuator-test) can be used as well for actuator testing. - VTOLs will automatically turn off motors pointing upwards during **fixed-wing flight**: - 표준 VTOL: 멀티콥터 모터로 정의된 모터가 꺼집니다. diff --git a/docs/ko/config/compass.md b/docs/ko/config/compass.md index c93f6f49ab..027bc628d3 100644 --- a/docs/ko/config/compass.md +++ b/docs/ko/config/compass.md @@ -86,7 +86,7 @@ This calibration is similar to the well-known figure-8 compass calibration done 2-3 oscillations of ~30 degrees in every direction is usually sufficient. 2. Wait for the heading estimate to stabilize and verify that the compass rose is pointing to the correct direction (this can take a couple of seconds). -참고: +Notes: - There is no start/stop for this type of calibration (the algorithm runs continuously when the vehicle is disarmed). - The calibration is immediately applied to the data (no reboot is required) but is saved to the calibration parameters after disarming the vehicle only (the calibration is lost if no arming/disarming sequence is performed between calibration and shutdown). @@ -109,7 +109,7 @@ This calibration process leverages external knowledge of vehicle's orientation a commander calibrate mag quick ``` -참고: +Notes: - This method is specifically designed for vehicles where full rotation is impractical or impossible. If full rotation is possible, use the [complete calibration](#complete-calibration) instead. diff --git a/docs/ko/config/joystick.md b/docs/ko/config/joystick.md index 3ac6d2699f..9c2dfb3327 100644 --- a/docs/ko/config/joystick.md +++ b/docs/ko/config/joystick.md @@ -23,8 +23,7 @@ Information about how to set up a joystick is covered in: [QGroundControl > Joys 요약 - Open _QGroundControl_ -- Set the parameter [COM_RC_IN_MODE=1](../advanced_config/parameter_reference.md#COM_RC_IN_MODE) - `Joystick` - - See [Parameters](https://docs.qgroundcontrol.com/master/en/qgc-user-guide/setup_view/parameters.html) for information about setting parameters - - Setting the parameter to `2` or `3` also enables Joystick under some circumstances. +- [Enable a `COM_RC_IN_MODE` mode that allows Joystick](../config/manual_control.md#px4-configuration). + The default `RC or MAVLink keep first` should work if you plan to only have a Joystick connected. - 조이스틱을 연결합니다. - Configure the connected joystick in: **Vehicle Setup > Joystick**. diff --git a/docs/ko/config/manual_control.md b/docs/ko/config/manual_control.md new file mode 100644 index 0000000000..dc6385767a --- /dev/null +++ b/docs/ko/config/manual_control.md @@ -0,0 +1,58 @@ +# Manual Control + +Pilots can control a vehicle manually using either a [Radio Control (RC) System](../getting_started/rc_transmitter_receiver.md) or a [Joystick/Gamepad](../config/joystick.md) controller connected via QGroundControl. +PX4 also supports using RC and/or multiple Joysticks, with fallback from one type to the other. + +![Taranis X9D Transmitter](../../assets/hardware/transmitters/frsky_taranis_x9d_transmitter.jpg) Photo of MicroNav, a ground controller with integrated joysticks + +## 개요 + +_Joystick_ setups use QGroundControl to encode the control information from a "standard" computer gaming joystick into [MAVLink messages](https://mavlink.io/en/services/manual_control.html) that are sent to the vehicle over the (shared) telemetry radio channel. +They are often used in integrated GCS/manual control systems because it is cheaper and easier to integrate a joystick than a separate radio system. + +Joysticks are suitable for most applications provided your telemetry channel has a high enough bandwidth/low latency. +They are perfect for flying the PX4 simulator, because you can plug them directly into your ground control computer and start flying. + +_RC systems_ use a dedicated ground-based radio transmitter and vehicle-based receiver for sending control information. +They offer lower latency than Joysticks, and are very highly recommended when first tuning/testing a new frame design, when flying racers/acrobatically, and in other cases where low latency is important. +They can also be useful as a robust backup link for safety. +Note RC systems usually require significantly more configuration and calibration, much of which may be brand or model-specific. + +:::info +PX4 does not _require_ a manual control system for autonomous flight modes. +::: + +## PX4 설정 + +:::tip +This section explains how to configure PX4 to use and prioritise various manual control sources (other configuration is covered in the guides for each type of manual control). +::: + +If you only have one manual control system, either RC or Joystick, then by default no manual control selection is required. +In this case PX4 locks to the first valid manual control source it detects and uses that source until the vehicle is rebooted. + +If you have multiple control sources, such as an RC system and/or one or more Joysticks, then you can use the [COM_RC_IN_MODE](../advanced_config/parameter_reference.md#COM_RC_IN_MODE) parameter to determine which source is active, specifying selection priorities and fallback behavior ([parameters can be set](../advanced_config/parameters.md#finding-a-parameter) using QGC): + +- `0`: RC only. +- `1`: MAVLink only. +- `2`: RC or MAVLink with fallback (switches if current source becomes invalid). +- `3`: RC or MAVLink keep first (locks to the first valid source until reboot). +- `4`: Disable manual control (ignores all sources). +- `5`: RC priority, then MAVLink (lower instance before higher) — `RC > MAVLink 1 > MAVLink 2` +- `6`: MAVLink priority (lower instance before higher), then RC — `MAVLink 1 > MAVLink 2 > RC` +- `7`: RC priority, then MAVLink (higher instance before lower) — `RC > MAVLink 2 > MAVLink 1` +- `8`: MAVLink priority (higher instance before lower), then RC — `MAVLink 2 > MAVLink 1 > RC` + +The [MAVLink instance](../peripherals/mavlink_peripherals.md#mavlink-instances) refers to an instance assigned to a serial port, such as [MAV_0_CONFIG](../advanced_config/parameter_reference.md#MAV_0_CONFIG). + +Notes: + +- RC checks are run for any option that uses RC (so not for `MAVLink only` or `Disable manual control`). +- When using priority sources, sources are evaluated as soon as they become valid and may trigger an immediate switch (if higher priority than the currently active source). +- A [Manual Control Loss Failsafe](../config/safety.md#manual-control-loss-failsafe) is triggered when none of the manual control inputs allowed by the `COM_RC_IN_MODE` mode are available for a time that is greater than the RC Loss Timeout. + As long as there is a fallback input source available, the failsafe is not triggered. + +## See Also + +- [Radio Control (RC)](../getting_started/rc_transmitter_receiver.md) +- [Joysticks](../config/joystick.md) diff --git a/docs/ko/config/radio.md b/docs/ko/config/radio.md index 1ca698c54a..23cbbb80d6 100644 --- a/docs/ko/config/radio.md +++ b/docs/ko/config/radio.md @@ -1,10 +1,12 @@ # Radio Control (RC) Setup -The _Radio Setup_ screen is used to configure the mapping of your RC controller's main attitude control sticks (roll, pitch, yaw, throttle) to channels, and to calibrate the minimum, maximum, trim and reverse settings for all other transmitter controls/RC channels. +The _Radio Setup_ screen is used to configure the mapping of your [RC controller's](../getting_started/rc_transmitter_receiver.md) main attitude control sticks (roll, pitch, yaw, throttle) to channels, and to calibrate the minimum, maximum, trim and reverse settings for all other transmitter controls/RC channels. :::info -A [Joystick](../config/joystick.md) can be used instead of RC for manual control. -The [COM_RC_IN_MODE](../advanced_config/parameter_reference.md#COM_RC_IN_MODE) parameter [can be set](../advanced_config/parameters.md) to define what kind of manual controller(s) are enabled. +A [Joystick](../config/joystick.md) can also be used for [Manual Control](../config/manual_control.md). + +By default PX4 will latch the first valid controller it discovers and use it until the vehicle reboots. +If you have multiple controllers and you want to define their priority see [Manual Control > PX4 Configuration](../config/manual_control.md#px4-configuration). ::: ## 수신기 바인딩 diff --git a/docs/ko/config/safety.md b/docs/ko/config/safety.md index afa785d204..d7276ea8f5 100644 --- a/docs/ko/config/safety.md +++ b/docs/ko/config/safety.md @@ -111,19 +111,17 @@ There are several other "battery related" failsafe mechanisms that may be config ## Manual Control Loss Failsafe -The manual control loss failsafe may be triggered if the connection to the [RC transmitter](../getting_started/rc_transmitter_receiver.md) or [joystick](../config/joystick.md) is lost, and there is no fallback. -If using an [RC transmitter](../getting_started/rc_transmitter_receiver.md) this is triggered if the RC [transmitter link is lost](../getting_started/rc_transmitter_receiver.md#set-signal-loss-behaviour). -If using [joysticks](../config/joystick.md) connected over a MAVLink data link, this is triggered if the joysticks are disconnected or the data link is lost. - -:::info -PX4 and the receiver may also need to be configured in order to _detect RC loss_: [Radio Setup > RC Loss Detection](../config/radio.md#rc-loss-detection). -::: +A [Manual Control Loss Failsafe](../config/safety.md#manual-control-loss-failsafe) is triggered after a [manual control loss timeout](#COM_RC_LOSS_T) in which none of the configured [Manual Controllers](../config/manual_control.md) are available. ![Safety - RC Loss (QGC)](../../assets/qgc/setup/safety/safety_rc_loss.png) The QGCroundControl Safety UI allows you to set the [failsafe action](#failsafe-actions) and [manual control loss timeout](#COM_RC_LOSS_T). Users that want to disable this failsafe in specific modes can do so using the parameter [COM_RCL_EXCEPT](#COM_RCL_EXCEPT). +:::info +PX4 and the receiver may also need to be configured in order to _detect RC loss_: [Radio Setup > RC Loss Detection](../config/radio.md#rc-loss-detection). +::: + Additional (and underlying) parameter settings are shown below. | 매개변수 | 설정 | 설명 | @@ -181,17 +179,22 @@ Due to the inherent danger of this, this function is disabled using [CBRK_FLIGHT | Preemptive geofence triggering | [GF_PREDICT](../advanced_config/parameter_reference.md#GF_PREDICT) | (Experimental) Trigger geofence if current motion of the vehicle is predicted to trigger the breach (rather than late triggering after the breach). | | Circuit breaker for flight termination | [CBRK_FLIGHTTERM](../advanced_config/parameter_reference.md#CBRK_FLIGHTTERM) | 비행 종료 작업을 활성화/비활성화합니다 (기본적으로 비활성화 됨). | -## Position (GNSS) Loss Failsafe +## Position Estimation Failsafes + +This section describes failsafes related to the quality of the vehicle's position estimate. + +### Position Loss Failsafe The _Position Loss Failsafe_ is triggered if the quality of the PX4 position estimate falls below acceptable levels (this might be caused by GPS loss) while in a mode that requires an acceptable position estimate. -The sections below cover first the trigger and then the failsafe action taken by the controller. ### Position Loss Failsafe Trigger -There are basically two mechanisms in PX4 to trigger position failsafes: +The position loss failsafe triggers if the position estimate becomes _invalid_. There are two mechanisms in PX4 to invalidate the position estimate: -- A timeout since the last sensor data was fused that provides direct speed or horizontal position measurements. Sensors that fall into that category are: GNSS, optical flow, airspeed, VIO, auxiliary global position. -- The estimated horizontal position accuracy exceeds a certain threshold. This check is only done on hovering systems (rotary wing vehicles or VTOLs in hover phase). +- A timeout since the last sensor data was fused that provides direct speed or horizontal position measurements. + - Sensors that fall into that category are: GNSS, optical flow, airspeed, VIO, auxiliary global position. +- The estimated horizontal position inaccuracy exceeds the threshold [COM_POS_LOW_EPH](../advanced_config/parameter_reference.md#COM_POS_LOW_EPH) + - This check is only done on hovering systems (rotary-wing vehicles or VTOLs in hover phase). For fixed-wing vehicles, refer to the [Position Accuracy Low](#position-accuracy-low-failsafe) section. The relevant parameters shown below. @@ -207,14 +210,24 @@ Multicopters will switch to [Altitude mode](../flight_modes_mc/altitude.md) if a Fixed-wing planes, and VTOLs not configured to land in hover ([NAV_FORCE_VT](../advanced_config/parameter_reference.md#NAV_FORCE_VT)), have a parameter ([FW_GPSF_LT](../advanced_config/parameter_reference.md#FW_GPSF_LT)) that defines how long they will loiter (circle with a constant roll angle ([FW_GPSF_R](../advanced_config/parameter_reference.md#FW_GPSF_R)) at the current altitude) after losing position before attempting to land. If VTOLs have are configured to switch to hover for landing ([NAV_FORCE_VT](../advanced_config/parameter_reference.md#NAV_FORCE_VT)) then they will first transition and then descend. -The relevant parameters for all vehicles shown below. +The relevant parameters are: -Parameters that only affect Fixed-wing vehicles: +| 매개변수 | 설명 | +| ----------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [FW_GPSF_LT](../advanced_config/parameter_reference.md#FW_GPSF_LT) | Fixed-wing only: Loiter time (waiting at current altitude for position estimation recovery before starting to descend). 비활성화 하려면 0으로 설정하십시오. | +| [FW_GPSF_R](../advanced_config/parameter_reference.md#FW_GPSF_R) | 선회 비행시 고정 롤/뱅크 각도. | +| [NAV_FORCE_VT](../advanced_config/parameter_reference.md#NAV_FORCE_VT) | If true, force VTOL takeoff and landing, even in `Descend` failsafe. | -| 매개변수 | 설명 | -| ----------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [FW_GPSF_LT](../advanced_config/parameter_reference.md#FW_GPSF_LT) | Loiter time (waiting for GPS recovery before it goes into land or flight termination). 비활성화 하려면 0으로 설정하십시오. | -| [FW_GPSF_R](../advanced_config/parameter_reference.md#FW_GPSF_R) | 선회 비행시 고정 롤/뱅크 각도. | +### Position Accuracy Low Failsafe + +In Fixed-wing, the position estimate is never strictly invalidated as long as we have a horizontal aiding source, such as an airspeed sensor. In that case, a separate failsafe can be configured that triggers if the position estimate inacuraccy exceeds the threshold [COM_POS_LOW_EPH](../advanced_config/parameter_reference.md#COM_POS_LOW_EPH). The failsafe action is taken if the vehicle is in mission or hold mode, otherwise it is only a warning. The relevant parameters are: + +| 매개변수 | 설명 | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | +| [COM_POS_LOW_EPH](../advanced_config/parameter_reference.md#COM_POS_LOW_EPH) | Position inaccuracy threshold above which COM_POS_LOW_ACT is taken. | +| [COM_POS_LOW_ACT](../advanced_config/parameter_reference.md#COM_POS_LOW_ACT) | Failsafe action taken when position inaccuracy is above configured threshold. | + +Note that if there is no horizontal aiding source anymore, the position estimate is invalidated after `EKF2_NOAID_TOUT`, and the standard position loss failsafe applies. ## 오프 보드 안전 장치 @@ -238,6 +251,18 @@ The Traffic Avoidance Failsafe allows PX4 to respond to transponder data (e.g. f | ---------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------- | | [NAV_TRAFF_AVOID](../advanced_config/parameter_reference.md#NAV_TRAFF_AVOID) | 비상 안전 장치를 설정합니다 : 비활성화, 경고, 귀환 모드, 착륙 모드. | +## Remote ID Failsafe + + + +The Remote ID failsafe is triggered when the [Remote ID (Open Drone ID)](../peripherals/remote_id.md) module is not detected or reports as unhealthy while the vehicle is armed. + +The failsafe action and arming behaviour are both configured by the `COM_ARM_ODID` parameter: + +| 매개변수 | 설명 | +| ----------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [COM_ARM_ODID](../advanced_config/parameter_reference.md#COM_ARM_ODID) | Remote ID arming check and in-flight failsafe. `0`: Disabled (default), `1`: Warning only, `2`: Error only (prevents arming), `3`: Return, `4`: Land, `5`: Terminate.

On failsafe:
- `Error`, `Return`, `Land` and `Terminate` prevent arming.
- `Return`, `Land` and `Terminate` start the associated action/mode when airborne. | + ## Quad-chute Failsafe Failsafe for when a VTOL vehicle can no longer fly in fixed-wing mode, perhaps due to the failure of a pusher motor, airspeed sensor, or control surface. @@ -261,7 +286,7 @@ The parameters that control when the quad-chute will trigger are listed in the t ## High Wind Failsafe -The high wind failsafe can trigger a warning and/or other mode change when the wind speed exceeds the warning and maximum wind-speed threshhold values. +The high wind failsafe can trigger a warning and/or other mode change when the wind speed exceeds the warning and maximum wind-speed threshold values. The relevant parameters are listed in the table below. | 매개변수 | 설명 | @@ -285,6 +310,19 @@ Note that this check is _always enabled on takeoff_, irrespective of the `CBRK_F The failure detector is active in all vehicle types and modes, except for those where the vehicle is _expected_ to do flips (i.e. [Acro mode (MC)](../flight_modes_mc/acro.md), [Acro mode (FW)](../flight_modes_fw/acro.md), and [Manual (FW)](../flight_modes_fw/manual.md)). +### Altitude Loss Trigger {#altitude-loss-trigger} + + + +The failure detector can be configured to trigger if a rotary-wing vehicle loses too much altitude below its commanded setpoint while in an altitude-controlled flight mode (such as [Position mode](../flight_modes_mc/position.md) or [Altitude mode](../flight_modes_mc/altitude.md)). + +If the vehicle descends more than [FD_ALT_LOSS](#FD_ALT_LOSS) meters below the setpoint, [flight termination](../advanced_config/flight_termination.md) is triggered, which may deploy a [parachute](../peripherals/parachute.md). + +| 매개변수 | 설명 | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [FD_ALT_LOSS](../advanced_config/parameter_reference.md#FD_ALT_LOSS) | Altitude loss threshold (m). Flight termination is triggered when the vehicle drops this far below the setpoint. 비활성화 하려면 0으로 설정하십시오. | +| [FD_ALT_LOSS_T](../advanced_config/parameter_reference.md#FD_ALT_LOSS_T) | Time (s) the vehicle must remain below the threshold before flight termination is triggered. | + ### 자세 감지기 기체의 자세가 지정된 시간보다 오랫동안 사전 정의 된 피치 및 롤 값을 초과하는 경우 동작하도록 고장 감지기를 설정할 수 있습니다. @@ -301,23 +339,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} +``` -| 매개변수 | 설명 | -| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [FD_ACT_EN](../advanced_config/parameter_reference.md#FD_ACT_EN) | Enable/disable the motor failure trigger completely. | -| [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. | -| [FD_ACT_MOT_C2T](../advanced_config/parameter_reference.md#FD_ACT_MOT_C2T) | Scale between normalized [0,1] motor command and expected minimally reported currrent when the rotor is healthy. | -| [FD_ACT_MOT_TOUT](../advanced_config/parameter_reference.md#FD_ACT_MOT_TOUT) | Time in miliseconds for which the under current detection condition needs to stay true. | -| [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. | +| 매개변수 | 설명 | +| ----------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [FD_ACT_EN](../advanced_config/parameter_reference.md#FD_ACT_EN) | Enable/disable the motor failure trigger completely. | +| [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/%). | +| [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. | +| [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. | +| [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. | +| [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) @@ -351,11 +390,7 @@ Remote control switches can be configured (as part of _QGroundControl_ [Flight M A kill switch immediately stops all motor outputs — if flying, the vehicle will start to fall! -[By default](#COM_KILL_DISARM) the motors will restart if the switch is reverted within 5 seconds, after which the vehicle will automatically disarm, and you will need to arm it again in order to start the motors. - -| 매개변수 | 설명 | -| -------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | -| [COM_KILL_DISARM](../advanced_config/parameter_reference.md#COM_KILL_DISARM) | Timeout value for disarming after kill switch is engaged. Default: `5` seconds. | +The motors will restart if the switch is reverted within 5 seconds, after which the vehicle will automatically disarm, and you will need to arm it again in order to start the motors. :::info There is also a [Kill Gesture](#kill-gesture), which cannot be reverted. @@ -397,7 +432,7 @@ A return switch can be used to immediately engage [Return mode](../flight_modes/ A kill gesture immediately stops all motor outputs — if flying, the vehicle will start to fall! -The action cannot be reverted without a reboot (this differs from a [Kill Switch](#kill-switch), where the operation can be reverted within the time period defined by [COM_KILL_DISARM](#COM_KILL_DISARM)). +The action cannot be reverted without a reboot (this differs from a [Kill Switch](#kill-switch), where the operation can be reverted within 5 seconds). | 매개변수 | 설명 | | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -423,15 +458,15 @@ The [relevant parameters](../advanced_config/parameters.md) are shown below: These parameters can be used to set conditions that prevent arming. -| 매개변수 | 설명 | -| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [COM_ARMABLE](../advanced_config/parameter_reference.md#COM_ARMABLE) | Enable arming (at all). `0`: Disabled, `1`: Enabled (default). | -| [COM_ARM_BAT_MIN](../advanced_config/parameter_reference.md#COM_ARM_BAT_MIN) | Minimum battery level for arming. `0`: Disabled (default). Values: `0`-`0.9`, | -| [COM_ARM_WO_GPS](../advanced_config/parameter_reference.md#COM_ARM_WO_GPS) | Enable arming without GPS. `0`: Disabled, `1`: Enabled (default). | -| [COM_ARM_MIS_REQ](../advanced_config/parameter_reference.md#COM_ARM_MIS_REQ) | Require valid mission to arm. `0`: Disabled (default), `1`: Enabled . | -| [COM_ARM_SDCARD](../advanced_config/parameter_reference.md#COM_ARM_SDCARD) | Require SD card to arm. `0`: Disabled (default), `1`: Warning, `2`: Enabled. | -| [COM_ARM_AUTH_REQ](../advanced_config/parameter_reference.md#COM_ARM_AUTH_REQ) | Requires arm authorisation from an external (MAVLink) system. Flag to allow arming (at all). `1`: Enabled, `0`: Disabled (default). Associated configuration parameters are prefixed with `COM_ARM_AUTH_`. | -| [COM_ARM_ODID](../advanced_config/parameter_reference.md#COM_ARM_ODID) | Require healthy Remote ID system to arm. `0`: Disabled (default), `1`: Warning, `2`: Enabled. | +| 매개변수 | 설명 | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [COM_ARMABLE](../advanced_config/parameter_reference.md#COM_ARMABLE) | Enable arming (at all). `0`: Disabled, `1`: Enabled (default). | +| [COM_ARM_BAT_MIN](../advanced_config/parameter_reference.md#COM_ARM_BAT_MIN) | Minimum battery level for arming. `0`: Disabled (default). Values: `0`-`0.9`, | +| [COM_ARM_WO_GPS](../advanced_config/parameter_reference.md#COM_ARM_WO_GPS) | Enable arming without GPS. `0`: Disabled, `1`: Enabled (default). | +| [COM_ARM_MIS_REQ](../advanced_config/parameter_reference.md#COM_ARM_MIS_REQ) | Require valid mission to arm. `0`: Disabled (default), `1`: Enabled . | +| [COM_ARM_SDCARD](../advanced_config/parameter_reference.md#COM_ARM_SDCARD) | Require SD card to arm. `0`: Disabled (default), `1`: Warning, `2`: Enabled. | +| [COM_ARM_AUTH_REQ](../advanced_config/parameter_reference.md#COM_ARM_AUTH_REQ) | Requires arm authorisation from an external (MAVLink) system. Flag to allow arming (at all). `1`: Enabled, `0`: Disabled (default). Associated configuration parameters are prefixed with `COM_ARM_AUTH_`. | +| [COM_ARM_ODID](../advanced_config/parameter_reference.md#COM_ARM_ODID) | Remote ID arming check and in-flight failsafe. `0`: Disabled (default), `1`: Warning only, `2`: Error only, `3`: Return, `4`: Land, `5`: Terminate. See [Remote ID Failsafe](#remote-id-failsafe). | In addition there are a number of parameters that configure system and sensor limits that make prevent arming if exceeded: [COM_CPU_MAX](../advanced_config/parameter_reference.md#COM_CPU_MAX), [COM_ARM_IMU_ACC](../advanced_config/parameter_reference.md#COM_ARM_IMU_ACC), [COM_ARM_IMU_GYR](../advanced_config/parameter_reference.md#COM_ARM_IMU_GYR), [COM_ARM_MAG_ANG](../advanced_config/parameter_reference.md#COM_ARM_MAG_ANG), [COM_ARM_MAG_STR](../advanced_config/parameter_reference.md#COM_ARM_MAG_STR). diff --git a/docs/ko/config_mc/filter_tuning.md b/docs/ko/config_mc/filter_tuning.md index 2a7e2cd406..e706088a2b 100644 --- a/docs/ko/config_mc/filter_tuning.md +++ b/docs/ko/config_mc/filter_tuning.md @@ -72,17 +72,17 @@ The ESC RPM feedback is used to track the rotor blade pass frequency and its har ESC RPM feedback requires ESCs capable of providing RPM feedback such as [DShot](../peripherals/dshot.md) with telemetry connected, a bidirectional DShot set up ([work in progress](https://github.com/PX4/PX4-Autopilot/pull/23863)), or [UAVCAN/DroneCAN ESCs](../dronecan/escs.md). Before enabling, make sure that the ESC RPM is correct. -You might have to adjust the [pole count of the motors](../advanced_config/parameter_reference.md#MOT_POLE_COUNT). +You might have to adjust the per-motor pole count (`DSHOT_MOT_POL1`–`DSHOT_MOT_POL12`). The following parameters should be set to enable and configure dynamic notch filters: -| 매개변수 | 설명 | -| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | -| [IMU_GYRO_DNF_EN](../advanced_config/parameter_reference.md#IMU_GYRO_DNF_EN) | Enable IMU gyro dynamic notch filtering. `0`: ESC RPM, `1`: Onboard FFT. | -| [IMU_GYRO_FFT_EN](../advanced_config/parameter_reference.md#IMU_GYRO_FFT_EN) | Enable onboard FFT (required if `IMU_GYRO_DNF_EN` is set to `1`). | -| [IMU_GYRO_DNF_MIN](../advanced_config/parameter_reference.md#IMU_GYRO_DNF_MIN) | Minimum dynamic notch frequency in Hz. | -| [IMU_GYRO_DNF_BW](../advanced_config/parameter_reference.md#IMU_GYRO_DNF_BW) | Bandwidth for each notch filter in Hz. | -| [IMU_GYRO_DNF_HMC](../advanced_config/parameter_reference.md#IMU_GYRO_NF0_BW) | Number of harmonics to filter. | +| 매개변수 | 설명 | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | +| [IMU_GYRO_DNF_EN](../advanced_config/parameter_reference.md#IMU_GYRO_DNF_EN) | Enable IMU gyro dynamic notch filtering. `0`: ESC RPM, `1`: Onboard FFT. | +| [IMU_GYRO_FFT_EN](../advanced_config/parameter_reference.md#IMU_GYRO_FFT_EN) | Enable onboard FFT (required if `IMU_GYRO_DNF_EN` is set to `1`). | +| [IMU_GYRO_DNF_MIN](../advanced_config/parameter_reference.md#IMU_GYRO_DNF_MIN) | Minimum dynamic notch frequency in Hz. | +| [IMU_GYRO_DNF_BW](../advanced_config/parameter_reference.md#IMU_GYRO_DNF_BW) | Bandwidth for each notch filter in Hz. | +| [IMU_GYRO_DNF_HMC](../advanced_config/parameter_reference.md#IMU_GYRO_NF0_BW) | Number of harmonics to filter. | ### Low-pass Filter diff --git a/docs/ko/config_mc/pid_tuning_guide_multicopter_basic.md b/docs/ko/config_mc/pid_tuning_guide_multicopter_basic.md index c17c455ddd..b6569ea0c4 100644 --- a/docs/ko/config_mc/pid_tuning_guide_multicopter_basic.md +++ b/docs/ko/config_mc/pid_tuning_guide_multicopter_basic.md @@ -13,7 +13,7 @@ For example, different ESCs or motors change the optimal tuning gains. ## 소개 -PX4 uses **P**roportional, **I**ntegral, **D**erivative (PID) controllers (these are the most widespread control technique). +PX4 uses **P**roportional, **I**integral, **D**erivative (PID) controllers (these are the most widespread control technique). The _QGroundControl_ **PID Tuning** setup provides real-time plots of the vehicle setpoint and response curves. The goal of tuning is to set the P/I/D values such that the _Response_ curve matches the _Setpoint_ curve as closely as possible (i.e. a fast response without overshoots). diff --git a/docs/ko/config_rover/attitude_tuning.md b/docs/ko/config_rover/attitude_tuning.md index b2efc4d5c7..cf176e587f 100644 --- a/docs/ko/config_rover/attitude_tuning.md +++ b/docs/ko/config_rover/attitude_tuning.md @@ -16,7 +16,7 @@ Configure the following [parameters](../advanced_config/parameters.md) in QGroun Put the rover into stabilized mode and move the left stick of your controller up to drive forwards. Disarm the rover and from the flight log plot the `measured_yaw` and the `adjusted_yaw_setpoint` from the [RoverAttitudeStatus](../msg_docs/RoverAttitudeStatus.md) message over each other. Increase/Decrease the parameter until you are satisfied with the setpoint tracking. - If you observe a steady state error in the yaw setpoint increase the the integrator of the rate controller: [RO_YAW_RATE_I](../advanced_config/parameter_reference.md#RO_YAW_RATE_I) . + If you observe a steady state error in the yaw setpoint increase the integrator of the rate controller: [RO_YAW_RATE_I](../advanced_config/parameter_reference.md#RO_YAW_RATE_I) . ::: @@ -30,7 +30,7 @@ The attitude controller uses the following structure: ![Rover Attitude Controller](../../assets/config/rover/rover_attitude_controller.png) -The rate and attitude controllers are cascaded, therefor we only require one integrator in the structure to eliminate steady state errors. +The rate and attitude controllers are cascaded, therefore we only require one integrator in the structure to eliminate steady state errors. We placed the integrator in the rate controller since it can run without the attitude controller but not the other way around. ## Parameter Overview diff --git a/docs/ko/config_rover/basic_setup.md b/docs/ko/config_rover/basic_setup.md index 53b9e2ddb1..f9bcc3a665 100644 --- a/docs/ko/config_rover/basic_setup.md +++ b/docs/ko/config_rover/basic_setup.md @@ -138,7 +138,7 @@ In [Manual mode](../flight_modes_rover/manual.md#manual-mode) we can additionall - Differential Rover: $r=$ [RD_YAW_STK_GAIN](#RD_YAW_STK_GAIN), which enables adjusting the slope of the input mapping. This leads to a normalized steering input $\hat{\delta} = \delta \cdot r \in$ [-[RD_YAW_STK_GAIN](#RD_YAW_STK_GAIN), [RD_YAW_STK_GAIN](#RD_YAW_STK_GAIN)]. - Mecanum Rover: $r=$ [RM_YAW_STK_GAIN](#RM_YAW_STK_GAIN), which enables adjusting the slope of the input mapping. This leads to a normalized steering input $\hat{\delta} = \delta \cdot r \in$ [-[RM_YAW_STK_GAIN](#RM_YAW_STK_GAIN), [RM_YAW_STK_GAIN](#RM_YAW_STK_GAIN)]. -This scaling is useful to limit the normalized steering setpoint, if it is too aggresive for your rover in manual mode. +This scaling is useful to limit the normalized steering setpoint, if it is too aggressive for your rover in manual mode. You can experiment with the relationships graphically using the [PX4 SuperExpo Rover calculator](https://www.desmos.com/calculator/gwm8lrlanx). diff --git a/docs/ko/config_rover/index.md b/docs/ko/config_rover/index.md index aff8b6389a..960fedc2f4 100644 --- a/docs/ko/config_rover/index.md +++ b/docs/ko/config_rover/index.md @@ -39,7 +39,7 @@ make px4_fmu-v6x_rover Note that configuration targets are constructed with the format "VENDOR_MODEL_VARIANT". -The built firmware can be installed as custom firmware, as shown above in in [Flashing the Rover Build](#flashing-the-rover-build). +The built firmware can be installed as custom firmware, as shown above in [Flashing the Rover Build](#flashing-the-rover-build). :::info You can also enable the modules in default builds by adding these lines to your [board configuration](../hardware/porting_guide_config.md) (e.g. for fmu-v6x you might add them to [`main/boards/px4/fmu-v6x/default.px4board`](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/fmu-v6x/default.px4board)): diff --git a/docs/ko/config_rover/rate_tuning.md b/docs/ko/config_rover/rate_tuning.md index 47ee11cbf9..2b317b4631 100644 --- a/docs/ko/config_rover/rate_tuning.md +++ b/docs/ko/config_rover/rate_tuning.md @@ -11,7 +11,7 @@ Configure the following [parameters](../advanced_config/parameters.md) in QGroun 1. [RO_YAW_RATE_LIM](#RO_YAW_RATE_LIM): Maximum yaw rate you want to allow for your rover. :::tip - Limiting the yaw rate is necessary if the rover is prone rolling over, loosing traction at high speeds or if passenger comfort is important. + Limiting the yaw rate is necessary if the rover is prone rolling over, losing traction at high speeds or if passenger comfort is important. Small rovers especially can be prone to rolling over when steering aggressively at high speeds. If this is the case: diff --git a/docs/ko/config_rover/velocity_tuning.md b/docs/ko/config_rover/velocity_tuning.md index 8e7f44f954..6b91165ed2 100644 --- a/docs/ko/config_rover/velocity_tuning.md +++ b/docs/ko/config_rover/velocity_tuning.md @@ -60,7 +60,7 @@ To tune the velocity controller configure the following [parameters](../advanced ## Manual Position Mode Parameters -These steps are only necessary if you are tuning/want to unlock the manual [Position mode](../flight_modes_rover/manual.md#position-mode). Othwerwise, you can continue with [position tuning](position_tuning.md) where these same parameters will also be configured. +These steps are only necessary if you are tuning/want to unlock the manual [Position mode](../flight_modes_rover/manual.md#position-mode). Otherwise, you can continue with [position tuning](position_tuning.md) where these same parameters will also be configured. 1. [PP_LOOKAHD_GAIN](#PP_LOOKAHD_GAIN): When driving in a straight line (right stick centered) position mode leverages the same path following algorithm used in [auto modes](../flight_modes_rover/auto.md) called [pure pursuit](position_tuning.md#pure-pursuit-guidance-logic-info-only) to achieve the best possible straight line driving behaviour. This parameter determines how aggressive the controller will steer towards the path. @@ -109,7 +109,7 @@ The speed controller uses the following structure: The feed forward mapping is done by interpolating the speed setpoint from [-[RO_MAX_THR_SPEED](../advanced_config/parameter_reference.md#RO_MAX_THR_SPEED), [RO_MAX_THR_SPEED](../advanced_config/parameter_reference.md#RO_MAX_THR_SPEED)] to [-1, 1]. -For ackermann and differential rovers the bearing is aligned with the vehicle yaw. Therefor the bearing is simply sent as a yaw setpoint to the [yaw controller](attitude_tuning.md#attitude-controller-structure-info-only) and the speed setpoint is always defined in body x direction. +For ackermann and differential rovers the bearing is aligned with the vehicle yaw. Therefore the bearing is simply sent as a yaw setpoint to the [yaw controller](attitude_tuning.md#attitude-controller-structure-info-only) and the speed setpoint is always defined in body x direction. For mecanum vehicles, the bearing and yaw are decoupled. The direction is controlled by splitting the velocity vector into one speed component in body x direction and one in body y direction. Both these setpoint are then sent to their own closed loop speed controllers. diff --git a/docs/ko/config_vtol/vtol_ice_shedding.md b/docs/ko/config_vtol/vtol_ice_shedding.md index ae719602af..76b084333b 100644 --- a/docs/ko/config_vtol/vtol_ice_shedding.md +++ b/docs/ko/config_vtol/vtol_ice_shedding.md @@ -6,7 +6,7 @@ Ice shedding is a feature that periodically spins unused motors in fixed-wing flight, to break off any ice that is starting to build up in the motors while it is still feasible to do so. -It is configured by the paramter `CA_ICE_PERIOD`. When it is 0, the feature is +It is configured by the parameter `CA_ICE_PERIOD`. When it is 0, the feature is disabled, when it is above 0, it sets the duration of the ice shedding cycle in seconds. In each cycle, the rotors are spun for two seconds at a motor output of 0.01. diff --git a/docs/ko/config_vtol/vtol_quad_configuration.md b/docs/ko/config_vtol/vtol_quad_configuration.md index d442eda0b6..88af569268 100644 --- a/docs/ko/config_vtol/vtol_quad_configuration.md +++ b/docs/ko/config_vtol/vtol_quad_configuration.md @@ -95,7 +95,7 @@ It should be set to a value which ensures that the vehicle reaches a high enough [VT_TRANS_TIMEOUT](../advanced_config/parameter_reference.md#VT_TRANS_TIMEOUT) This specifies the upper limit for the duration of the front transition. If the vehicle has not reached the transition airspeed after this time, then the transition will be aborted and a [Quadchute](../config/safety.md#quad-chute-failsafe) event will be triggered. -:::note +::: info Additionally, if an airspeed sensor is present, the transition will also be aborted if the airspeed has not reached [VT_ARSP_BLEND](../advanced_config/parameter_reference.md#VT_ARSP_BLEND) after the openloop transition time [VT_F_TR_OL_TM](../advanced_config/parameter_reference.md#VT_F_TR_OL_TM) has elapsed. This checks is used to avoid a scenario where the vehicle gains excessive speed when the airspeed sensor is faulty. ::: diff --git a/docs/ko/contribute/code.md b/docs/ko/contribute/code.md index 16535ea2eb..2fcbddace8 100644 --- a/docs/ko/contribute/code.md +++ b/docs/ko/contribute/code.md @@ -151,36 +151,35 @@ else { ## 커밋과 커밋 메시지 -Use descriptive, multi-paragraph commit messages for all non-trivial changes. -쉽게 이해할 수 있는 한 줄 요약과 자세한 세부정보도 기록하십시오. +PX4 uses [conventional commits](https://www.conventionalcommits.org/) for all commit messages and PR titles. -```plain -Component: Explain the change in one sentence. Fixes #1234 +### Format -Prepend the software component to the start of the summary -line, either by the module name or a description of it. -(e.g. "mc_att_ctrl" or "multicopter attitude controller"). - -If the issue number is appended as , Github -will automatically close the issue when the commit is -merged to the master branch. - -The body of the message can contain several paragraphs. -Describe in detail what you changed. Link issues and flight -logs either related to this fix or to the testing results -of this commit. - -Describe the change and why you changed it, avoid to -paraphrase the code change (Good: "Adds an additional -safety check for vehicles with low quality GPS reception". -Bad: "Add gps_reception_check() function"). - -Reported-by: Name +``` +type(scope): short description of the change ``` -**Use **`git commit -s`** to sign off on all of your commits.** This will add `signed-off-by:` with your name and email as the last line. +Where **type** is the category of change (`feat`, `fix`, `docs`, `refactor`, `perf`, `test`, `build`, `ci`, `style`, `chore`, `revert`) and **scope** is the module or area affected (e.g. `ekf2`, `mavlink`, `navigator`). See the full [types and scopes tables](https://github.com/PX4/PX4-Autopilot/blob/main/CONTRIBUTING.md#commit-message-convention) in CONTRIBUTING.md. -This commit guide is based on best practices for the Linux Kernel and other [projects maintained](https://github.com/torvalds/subsurface-for-dirk/blob/a48494d2fbed58c751e9b7e8fbff88582f9b2d02/README#L88-L115) by Linus Torvalds. +Append `!` before the colon to mark a breaking change: `feat(ekf2)!: remove deprecated API`. + +### 예 + +``` +feat(ekf2): add height fusion timeout. Fixes #1234 + +The previous implementation did not handle the case where +height fusion data stops arriving mid-flight. This adds a +configurable timeout that falls back to barometric height. + +Tested in SITL with simulated sensor dropout. + +Signed-off-by: Your Name +``` + +The body of the message can contain several paragraphs. Describe in detail what you changed and why. Link related issues and flight logs. Describe the change and why you made it, rather than paraphrasing the code change. + +**Use `git commit -s` to sign off on all of your commits.** This adds `Signed-off-by:` with your name and email as the last line. ## Pull Requests diff --git a/docs/ko/contribute/dev_call.md b/docs/ko/contribute/dev_call.md index ff5ed0e045..e1a6f4d239 100644 --- a/docs/ko/contribute/dev_call.md +++ b/docs/ko/contribute/dev_call.md @@ -7,7 +7,7 @@ const { site } = useData();
-

This page may be out out of date. See the latest version.

+

This page may be out of date. See the latest version.

@@ -15,8 +15,8 @@ The PX4 dev team and community come together to discuss any topic of interest to ## Who should attend? -- 핵심 프로젝트 관리자 -- 구성요소 관리자 +- Code Owners +- Reviewers - 테스트 팀 관리자 - 드론코드 회원 - Community members (you!) @@ -36,4 +36,4 @@ Please add your topics for discussion to the agenda before the meeting begins, b ## 일정 - TIME: Wednesday 17h00 CET ([subscribe to calendar](https://dronecode.org/calendar/)) -- **Join the call**: [https://discord.gg/BDYmr6FA6Q](https://discord.gg/BDYmr6FA6Q) +- **Join the call**: [https://discord.com/invite/BDYmr6FA6Q](https://discord.com/invite/BDYmr6FA6Q) diff --git a/docs/ko/contribute/docs.md b/docs/ko/contribute/docs.md index f0713b2edf..f4e25fd611 100644 --- a/docs/ko/contribute/docs.md +++ b/docs/ko/contribute/docs.md @@ -56,7 +56,7 @@ If you already have a clone of the [PX4-Autopilot](https://github.com/PX4/PX4-Au 라이브러리 소스를 로컬 컴퓨터로 가져오려면 git 명령어를 사용하여야 합니다. 아래 지침은 git을 가져와 로컬 컴퓨터에서 사용하는 방법을 설명합니다. -1. Download git for your computer from [https://git-scm.com/downloads](https://git-scm.com/downloads) +1. Download git for your computer from [https://git-scm.com/downloads/](https://git-scm.com/downloads/) 2. [Sign up](https://github.com/signup) for Github if you haven't already @@ -84,10 +84,10 @@ If you already have a clone of the [PX4-Autopilot](https://github.com/PX4/PX4-Au 6. Add a _remote_ called "upstream" to point to the "official" PX4 version of the library: ```sh - git remote add upstream https://github.com/PX4/PX4-Autopilot.git + git remote add upstream https://github.com/PX4/PX4-Autopilot ``` - :::tip + ::: tip A "remote" is a handle to a particular repository. The remote named _origin_ is created by default when you clone the repository, and points to _your fork_ of the guide. Above you create a new remote _upstream_ that points to the PX4 project version of the documents. @@ -167,7 +167,9 @@ Within the repository you created above: yarn install ``` -4. Preview and serve the library: +4. (Optional) [Build the docs for PX4 metadata](#building-px4-docs-metadata) if your source contains changes to parameter or module docs that you want to check. + +5. Preview and serve the library: ```sh yarn docs:dev @@ -177,7 +179,7 @@ Within the repository you created above: This will be something like: `http://localhost:5173/px4_user_guide/`. - Stop serving using **CTRL+C** in the terminal prompt. -5. Open previewed pages in your local editor: +6. Open previewed pages in your local editor: First specify a local text editor file using the `EDITOR` environment variable, before calling `yarn start` to preview the library. For example, you can enable VSCode as your default editor by entering: @@ -196,7 +198,7 @@ Within the repository you created above: The **Open in your editor** link at the bottom of each page will then open the current page in the editor (this replaces the _Open in GitHub_ link). -6. 다음을 사용하여 라이브러리를 빌드합니다. +7. 다음을 사용하여 라이브러리를 빌드합니다. ```sh # Ubuntu @@ -211,6 +213,32 @@ Use `yarn start` to preview changes _as you make them_ (documents are updated an Before submitting a PR you should also build it using `yarn docs:build`, as this can highlight issues that are not visible when using `yarn start`. ::: +#### Building PX4 docs metadata + +PX4 Metadata is not automatically updated in the local docs tree when you make changes to source. +This can result in broken links showing up during testing if you link to new parameters, modules, airframes, or other content that is generated from source. + +You can generate the metadata and copy it into the tree on _Ubuntu_ (only) using the convenient yarn command: + +```sh +# Ubuntu +yarn build_docs_metadata_ubuntu +``` + +:::info +The generated metadata docs should not be included in PRs as they will complicate reveiwing (metadata is automatically generated when a PR merges in main). +It is not a problem if you do add such metadata, as it will be swamped on merge. +::: + +#### Check for broken links + +You can use the following command to check for broken links in the whole document: + +```sh +# Ubuntu +yarn linkcheck +``` + ### 소스 코드 구조 The guide uses the [Vitepress](https://vitepress.dev/) toolchain. @@ -242,7 +270,7 @@ The guide uses the [Vitepress](https://vitepress.dev/) toolchain. - Images must be stored in a sub folder of `/assets`. 이것은 콘텐츠 폴더에서 두 개의 폴더 아래에 있으므로, 이미지를 추가하면 다음과 같이 참조하게 됩니다. - ```plain + ```txt ![Image Description](../../assets/path_to_file/filename.jpg) ``` diff --git a/docs/ko/contribute/git_examples.md b/docs/ko/contribute/git_examples.md index 96773607f6..b178d9c400 100644 --- a/docs/ko/contribute/git_examples.md +++ b/docs/ko/contribute/git_examples.md @@ -22,7 +22,7 @@ PX4 기능 추가 절차는 다음과 같습니다. 다음 예제를 따라 PX4 ```sh cd PX4-Autopilot git submodule update --init --recursive - git remote add upstream https://github.com/PX4/PX4-Autopilot.git + git remote add upstream https://github.com/PX4/PX4-Autopilot ``` - You should have now two remote repositories: One repository is called `upstream` that points to PX4/PX4-Autopilot, and one repository `origin` that points to your forked copy of the PX4 repository. @@ -54,12 +54,12 @@ PX4 기능 추가 절차는 다음과 같습니다. 다음 예제를 따라 PX4 - 변경 사항을 설명하는 메시지와 함께 추가된 파일을 커밋합니다. ```sh - git commit -m "" + git commit -s -m "feat(ekf2): add height fusion timeout" ``` - For a good commit message, please refer to the [Source Code Management](../contribute/code.md#commits-and-commit-messages) section. + Use [conventional commits](https://www.conventionalcommits.org/) format: `type(scope): description`. For details on types and scopes, see the [Source Code Management](../contribute/code.md#commits-and-commit-messages) section. -- Some time might have passed and the [upstream main](https://github.com/PX4/PX4-Autopilot.git) has changed. +- Some time might have passed and the [upstream main](https://github.com/PX4/PX4-Autopilot) has changed. PX4 prefers a linear commit history and uses [git rebase](https://git-scm.com/book/en/v2/Git-Branching-Rebasing). To include the newest changes from upstream in your local branch, switch to your main branch @@ -139,7 +139,7 @@ To get the source code for a _specific older release_ (tag): 1. Clone the PX4-Autopilot repo and navigate into _PX4-Autopilot_ directory: ```sh - git clone https://github.com/PX4/PX4-Autopilot.git + git clone https://github.com/PX4/PX4-Autopilot cd PX4-Autopilot ``` @@ -179,7 +179,7 @@ To get a release branch: - Clone the PX4-Autopilot repo and navigate into _PX4-Autopilot_ directory: ```sh - git clone https://github.com/PX4/PX4-Autopilot.git + git clone https://github.com/PX4/PX4-Autopilot cd PX4-Autopilot ``` diff --git a/docs/ko/contribute/index.md b/docs/ko/contribute/index.md index adf08e6a79..95acab11fe 100644 --- a/docs/ko/contribute/index.md +++ b/docs/ko/contribute/index.md @@ -7,7 +7,7 @@ const { site } = useData();
-

This page may be out out of date. See the latest version.

+

This page may be out of date. See the latest version.

@@ -20,7 +20,7 @@ We pledge to adhere to the [PX4 code of conduct](https://github.com/PX4/PX4-Auto This section contains information about how you can meet with the community and contribute to PX4: - [Dev Call](../contribute/dev_call.md) - Discuss architecture, pull requests, impacting issues with the dev team -- [Maintainers](./maintainers.md) - Maintainers of PX4 Subsystems and Ecosystem +- [Maintainers](./maintainers.md) - Maintainer roles, types, and how to become one - [Support](../contribute/support.md) - Get help and raise issues - [Source Code Management](../contribute/code.md) - Work with PX4 code - [Documentation](../contribute/docs.md) - Improve the docs diff --git a/docs/ko/contribute/maintainers.md b/docs/ko/contribute/maintainers.md index 774b655aed..ce79159b3c 100644 --- a/docs/ko/contribute/maintainers.md +++ b/docs/ko/contribute/maintainers.md @@ -1,57 +1,86 @@ # Maintainer Role -Dronecode maintainers have technical leadership and responsibility for specific areas of PX4, and for other ecosystem components such as MAVLink, MAVSDK, QGroundControl, and others. +Dronecode maintainers provide technical leadership for PX4 and for other ecosystem components such as MAVLink, MAVSDK, QGroundControl, and others. Some maintainers take responsibility for specific areas of the project, while others help across the project more broadly. The maintainer role is defined by the community with help and supervision from the [Dronecode Foundation](https://dronecode.org/). -To find the most up-to-date maintainers list, visit [PX4-Autopilot README](https://github.com/PX4/PX4-Autopilot#maintenance-team). +To find the most up-to-date maintainers list, see [`MAINTAINERS.md`](https://github.com/PX4/PX4-Autopilot/blob/main/MAINTAINERS.md) in the PX4-Autopilot repository. + +## Maintainer Types + +PX4 recognizes two types of maintainers. Both are full members of the maintainer team, have write access via the [`Dev Team`](https://github.com/orgs/PX4/teams/dev-team) GitHub team, and participate in maintainer decisions. + +- **Code Owners** are responsible for a specific category of the project (for example, State Estimation, Multirotor, or CI). They have final say on changes to their area, are the primary reviewers for that code, and help shape its roadmap. This is the role described in detail below. +- **Reviewers** help maintain PX4 across the project without ownership of a specific category. They review, triage, and contribute wherever their interests and time allow. Reviewers have the same access and voting rights as Code Owners, but no on-call responsibility for any specific area of the codebase. + +The Reviewer role is a good fit for contributors who want to help steward the project without committing to a specific component up front. A Reviewer may later become a Code Owner for a category by mutual agreement with the existing Code Owners of that category and sign-off from the maintainer team. ## Recruitment Process If you would like to join the PX4 maintainers team or if you want to nominate someone else follow the steps below: 1. Read the [role description](#dronecode-maintainer-role-description), and make sure you understand the responsibilities of the role. -2. To nominate yourself, reach out to one of the maintainers (see the complete list in the [PX4-Autopilot README](https://github.com/PX4/PX4-Autopilot#maintenance-team)), and seek their sponsorship. -3. Express your interest in becoming a maintainer, and specify which area you would like to maintain. +2. To nominate yourself, reach out to one of the maintainers (see the complete list in [`MAINTAINERS.md`](https://github.com/PX4/PX4-Autopilot/blob/main/MAINTAINERS.md)), and seek their sponsorship. +3. Express your interest in becoming a maintainer, and specify whether you are applying as a **Code Owner** (for a specific category) or as a **Reviewer** (helping across the project without a fixed category). 4. The sponsoring maintainer needs to bring this up for discussion in one of the [weekly developer calls](dev_call.md). The maintainer team will vote on the call to determine whether to accept you as a maintainer. +A Reviewer may later transition to a Code Owner role for a specific category. This requires agreement from the existing Code Owners of that category and sign-off from the maintainer team, following the same discussion and vote on the weekly developer call. + +### Adding a new maintainer + +Once the maintainer team has agreed to add a new maintainer, the change is landed via a pull request to [`MAINTAINERS.md`](https://github.com/PX4/PX4-Autopilot/blob/main/MAINTAINERS.md). The process is intentionally simple: + +1. A current maintainer opens a PR adding the new maintainer to the appropriate table (**Code Owners** with a category, or **Reviewers**). +2. The PR must be approved by at least one other current maintainer. +3. If the new maintainer is being added as a Code Owner or sub-owner of a specific component, the existing Code Owner of that component must be among the approvers. + +Once the PR is merged, the new maintainer proceeds through the [Onboarding Process](#onboarding-process) below. + ## Onboarding Process Once accepted every maintainers will go through the following process: 1. **Discord** server admin will grant you the `dev team` role, which gives you: 1. Basic admin privileges on discord. - 2. Access to the `#maintainers` channel. + 2. Access to the private `#maintainers` channel for internal maintainer discussion. 2. You will be given access to the GitHub team: "[`Dev Team`](https://github.com/orgs/PX4/teams/dev-team)" which grants you: 1. Permission to merge the PR of any of PX4 workspace repositories after it's approved 2. Permission to trigger GitHub actions when a new contributor opens a PR. 3. Permission to edit Issue/PR contents. 3. **Add your info to official PX4 channels**: - 1. Include your information on the PX4 [README](https://github.com/PX4/PX4-Autopilot/blob/main/README.md) next to the rest of the team - 2. Listed on the [Maintainers section](https://px4.io/community/maintainers/) of the PX4 website. - 3. Add your information to the internal Dronecode database of maintainers to keep you in sync. - 4. Community introduction to the new maintainer in the form of a forum post, which is promoted through ever growing official channels + 1. Add your information to the internal Dronecode database of maintainers to keep you in sync. + 2. Community introduction to the new maintainer in the form of a forum post, which is promoted through ever growing official channels ## Dronecode Maintainer Role Description +The responsibilities and qualifications below describe the **Code Owner** role in detail. **Reviewers** share the same spirit of technical stewardship, community guidance, and participation in maintainer meetings, without being tied to a specific category. Reviewers are expected to review and triage across the project where their expertise and interest apply. + ### 요약 Maintainers lead/manage the development of a **specific category (referred to as category below)** of any Open Source Projects hosted within the Dronecode Foundation, such as the PX4 Autopilot. -### Responsibilities +### Responsibilities (Code Owner) 1. Take charge of overseeing the development in their category. 2. Provide guidance/advice on community members in their category. 3. Review relevant pull requests and issues from the community on GitHub. 4. Coordinate with the maintainer group. -5. Keep regular attendance on [weekly meetings ](dev_call.md). +5. Keep regular attendance on [weekly meetings](dev_call.md). 6. Help create and maintain a roadmap for the project your represent. 7. Uphold the [Code of Conduct](https://github.com/Dronecode/foundation/blob/main/CODE-OF-CONDUCT.md) of our community. +### Responsibilities (Reviewer) + +1. Review relevant pull requests and issues across the project where your expertise applies. +2. Help triage issues and guide community contributors. +3. Coordinate with the maintainer group. +4. Keep regular attendance on [weekly meetings](dev_call.md). +5. Uphold the [Code of Conduct](https://github.com/Dronecode/foundation/blob/main/CODE-OF-CONDUCT.md) of our community. + ### Qualifications 1. Proven track record of valuable contributions. -2. Domain expertise in the category field. +2. Domain expertise in the category field (for Code Owners) or broad working knowledge of the project (for Reviewers). 3. Good overview of the project you are applying to. 4. You need to manage approval from your employer when relevant. diff --git a/docs/ko/contribute/sbom.md b/docs/ko/contribute/sbom.md new file mode 100644 index 0000000000..9445c1900b --- /dev/null +++ b/docs/ko/contribute/sbom.md @@ -0,0 +1,226 @@ +# Software Bill of Materials (SBOM) + +PX4 generates a [Software Bill of Materials](https://ntia.gov/SBOM) for every firmware build in [SPDX 2.3](https://spdx.github.io/spdx-spec/v2.3/) JSON format. + +## Why SBOM? + +- **Regulatory compliance**: The EU Cyber Resilience Act (CRA) requires SBOMs for products with digital elements (reporting obligations begin in September 2026). +- **Supply chain transparency**: SBOMs enumerate every component compiled into firmware, enabling users and integrators to audit dependencies. +- **NTIA minimum elements**: Each SBOM satisfies all seven [NTIA required fields](https://www.ntia.gov/report/2021/minimum-elements-software-bill-materials-sbom): supplier, component name, version, unique identifier, dependency relationship, author, and timestamp. + +## Format + +PX4 uses SPDX 2.3 JSON. +SPDX is the Linux Foundation's own standard (ISO/IEC 5962), aligning with PX4's position as a Dronecode/LF project. +Zephyr RTOS also uses SPDX. + +Each SBOM contains: + +- **Primary package**: The PX4 firmware for a specific board target, marked with `primaryPackagePurpose: FIRMWARE`. +- **Git submodules**: All third-party libraries included via git submodules (~33 packages), with SPDX license identifiers and commit hashes. +- **Python build dependencies**: Packages from `Tools/setup/requirements.txt` marked as `BUILD_DEPENDENCY_OF` the firmware. +- **Board-specific modules**: Internal PX4 modules compiled for the target board. +- **Compiler**: The C compiler used for the build. + +Typical SBOM size: 70-100 packages, ~500 lines, ~20 KB JSON. + +## Generation + +SBOMs are generated automatically as part of every CMake build. +The output file is: + +```txt +build//.sbom.spdx.json +``` + +예: + +```txt +build/px4_fmu-v6x_default/px4_fmu-v6x_default.sbom.spdx.json +``` + +The generator script is `Tools/ci/generate_sbom.py`. +It requires PyYAML (`pyyaml`) for loading license overrides. + +### CMake Integration + +The `sbom` CMake target is included in the default `ALL` target. +The relevant CMake module is `cmake/sbom.cmake`. + +### Disabling SBOM Generation + +Set the environment variable before building. +This is checked at CMake configure time, so a clean build or reconfigure is required: + +```sh +PX4_SBOM_DISABLE=1 make px4_fmu-v6x_default +``` + +If the build directory already exists, force a reconfigure: + +```sh +PX4_SBOM_DISABLE=1 cmake -B build/px4_fmu-v6x_default . +``` + +### Manual Generation + +You can also run the generator directly: + +```sh +python3 Tools/ci/generate_sbom.py \ + --source-dir . \ + --board px4_fmu-v6x_default \ + --modules-file build/px4_fmu-v6x_default/config_module_list.txt \ + --compiler arm-none-eabi-gcc \ + --output build/px4_fmu-v6x_default/px4_fmu-v6x_default.sbom.spdx.json +``` + +## Artifacts + +SBOMs are available in: + +| Location | Path | +| --------------- | ---------------------------------------- | +| Build directory | `build//.sbom.spdx.json` | +| GitHub Releases | Alongside `.px4` firmware files | +| S3 | Same directory as firmware artifacts | + +## Validation + +Validate an SBOM against the SPDX JSON schema: + +```sh +python3 -c " +import json +doc = json.load(open('build/px4_sitl_default/px4_sitl_default.sbom.spdx.json')) +assert doc['spdxVersion'] == 'SPDX-2.3' +assert doc['dataLicense'] == 'CC0-1.0' +assert len(doc['packages']) > 0 +print(f'Valid: {len(doc[\"packages\"])} packages') +" +``` + +For full schema validation, use the [SPDX online validator](https://tools.spdx.org/app/validate/) or the `spdx-tools` CLI. + +## License Detection + +Submodule licenses are identified through a combination of auto-detection and manual overrides. + +### Auto-Detection + +The generator reads the first 100 lines of each submodule's LICENSE or COPYING file +and matches keywords against known patterns. +Copyleft licenses (GPL, LGPL, AGPL) are checked before permissive ones +to prevent false positives. + +Supported patterns include: + +| SPDX Identifier | Matched Keywords | +| ----------------------------- | ------------------------------------------------------------------ | +| GPL-3.0-only | "GNU GENERAL PUBLIC LICENSE", "Version 3" | +| GPL-2.0-only | "GNU GENERAL PUBLIC LICENSE", "Version 2" | +| LGPL-3.0-only | "GNU LESSER GENERAL PUBLIC LICENSE", "Version 3" | +| LGPL-2.1-only | "GNU Lesser General Public License", "Version 2.1" | +| AGPL-3.0-only | "GNU AFFERO GENERAL PUBLIC LICENSE", "Version 3" | +| Apache-2.0 | "Apache License", "Version 2.0" | +| MIT | "Permission is hereby granted" | +| BSD-3-Clause | "Redistribution and use", "Neither the name" | +| BSD-2-Clause | "Redistribution and use", "THIS SOFTWARE IS PROVIDED" | +| ISC | "Permission to use, copy, modify, and/or distribute" | +| EPL-2.0 | "Eclipse Public License", "2.0" | +| Unlicense | "The Unlicense", "unlicense.org" | + +If no pattern matches, the license is set to `NOASSERTION`. + +### Override File + +When auto-detection fails or returns the wrong result, +add an entry to `Tools/ci/license-overrides.yaml`: + +```yaml +overrides: + src/lib/crypto/libtomcrypt: + license: "Unlicense" + comment: "Public domain dedication. Functionally equivalent to Unlicense." +``` + +Each entry maps a submodule path to its correct SPDX license identifier. +The optional `comment` field is emitted as `licenseComments` in the SBOM, +providing context for auditors reviewing complex licensing situations +(dual licenses, composite LICENSE files, public domain dedications). + +### Copyleft Guardrail + +The `--verify-licenses` command flags submodules with copyleft licenses +(GPL, LGPL, AGPL) in a dedicated warning section. +This is informational only and does not cause a failure. +It helps maintainers track copyleft obligations when adding new submodules. + +### Platform Filtering + +Submodules under `platforms/nuttx/` are excluded from POSIX and QURT SBOMs. +The `--platform` argument (set automatically by CMake via `${PX4_PLATFORM}`) +controls which platform-specific submodules are included. +This ensures SITL builds do not list NuttX RTOS packages. + +### 검증 + +Run the verify command to check detection for all submodules: + +```sh +python3 Tools/ci/generate_sbom.py --verify-licenses --source-dir . +``` + +This prints each submodule with its detected license, any override, and the final value. +It exits non-zero if any checked-out submodule resolves to `NOASSERTION` without an override. +Copyleft warnings are printed after the main table. + +### Adding a New Submodule + +1. Add the submodule normally. +2. Run `--verify-licenses` to confirm the license is detected. +3. If detection fails, add an override to `Tools/ci/license-overrides.yaml`. +4. If the license is not in the SPDX list, use `LicenseRef-`. + +### EU CRA Compliance + +The EU Cyber Resilience Act requires SBOMs for products with digital elements. +The goal is zero `NOASSERTION` licenses in shipped firmware SBOMs. +Every submodule should have either a detected or overridden license. +The `--verify-licenses` check enforces this in CI. + +## What's in an SBOM + +This section is for integrators, compliance teams, and anyone reviewing SBOM artifacts. + +### Where to Find SBOMs + +| Location | Path | +| --------------- | ---------------------------------------- | +| Build directory | `build//.sbom.spdx.json` | +| GitHub Releases | Alongside `.px4` firmware files | +| S3 | Same directory as firmware artifacts | + +### Reading the JSON + +Each SBOM is a single JSON document following SPDX 2.3. +Key fields: + +- **`packages`**: Array of all components. Each has `name`, `versionInfo`, `licenseConcluded`, and `SPDXID`. +- **`relationships`**: How packages relate. `CONTAINS` means a submodule is compiled into firmware. `BUILD_DEPENDENCY_OF` means a tool used only during build. +- **`licenseConcluded`**: The SPDX license identifier determined for that package. +- **`licenseComments`**: Free-text explanation for complex cases (dual licenses, composite files, public domain). +- **`externalRefs`**: Package URLs (purls) linking to GitHub repos or PyPI. + +### Understanding NOASSERTION + +`NOASSERTION` means no license could be determined. +For submodules, this happens when: + +- The submodule is not checked out (common in CI shallow clones). +- No LICENSE/COPYING file exists. +- The LICENSE file does not match any known pattern and no override is configured. + +For shipped firmware, `NOASSERTION` should be resolved by adding an override. +For build-only dependencies (Python packages), `NOASSERTION` is acceptable +since these are not compiled into the firmware binary. diff --git a/docs/ko/contribute/support.md b/docs/ko/contribute/support.md index ae7d5b0203..cc286cb3d5 100644 --- a/docs/ko/contribute/support.md +++ b/docs/ko/contribute/support.md @@ -7,7 +7,7 @@ const { site } = useData();
-

This page may be out out of date. See the latest version.

+

This page may be out of date. See the latest version.

@@ -18,7 +18,7 @@ const { site } = useData(); The core development team and community are active on the following channels: - [PX4 Discuss Forum](https://discuss.px4.io/) - Post here first! -- [PX4 Discord](https://discord.gg/dronecode) - Post here if you don't get a response in discuss within a few days (include a link to your forum topic). +- [PX4 Discord](https://discord.com/invite/dronecode) - Post here if you don't get a response in discuss within a few days (include a link to your forum topic). :::tip The Discuss Forum is much preferred because it is indexed by search engines and serves as a common knowledge base. diff --git a/docs/ko/debug/asset_tracking.md b/docs/ko/debug/asset_tracking.md index 31461d4a29..bd6a79d128 100644 --- a/docs/ko/debug/asset_tracking.md +++ b/docs/ko/debug/asset_tracking.md @@ -1,6 +1,6 @@ # Asset Tracking - + PX4 can track and log detailed information about external hardware devices connected to the flight controller. This enables unique identification of vehicle parts throughout their operational lifetime using device IDs, serial numbers, and version information. diff --git a/docs/ko/debug/debug_values.md b/docs/ko/debug/debug_values.md index 4e2cf2f49b..2918e626dc 100644 --- a/docs/ko/debug/debug_values.md +++ b/docs/ko/debug/debug_values.md @@ -22,7 +22,7 @@ This tutorial shows how to send the MAVLink message `NAMED_VALUE_FLOAT` using th 이 자습서의 코드는 다음에서 사용할 수 있습니다. - [Debug Tutorial Code](https://github.com/PX4/PX4-Autopilot/blob/main/src/examples/px4_mavlink_debug/px4_mavlink_debug.cpp) -- [Enable the tutorial app](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/fmu-v5/default.px4board) by ensuring the MAVLink debug app (**CONFIG_EXAMPLES_PX4_MAVLINK_DEBUG**) is in the config of your board and set set to 'y'. +- [Enable the tutorial app](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/fmu-v5/default.px4board) by ensuring the MAVLink debug app (**CONFIG_EXAMPLES_PX4_MAVLINK_DEBUG**) is in the config of your board and set to 'y'. 디버그 게시를 설정에 필요한 것은 아래의 코드입니다. 먼저 헤더 파일을 추가합니다. diff --git a/docs/ko/debug/eclipse_jlink.md b/docs/ko/debug/eclipse_jlink.md index 7aef08e6fc..9fb288ee97 100644 --- a/docs/ko/debug/eclipse_jlink.md +++ b/docs/ko/debug/eclipse_jlink.md @@ -122,7 +122,7 @@ To enable this feature for use in Eclipse: 2. Compile the **jlink-nuttx.so** library in the terminal by running the following command in the terminal: `make jlink-nuttx` -3. Modify Eclipse to use this libary. +3. Modify Eclipse to use this library. In the _J-Link GDB Server Setup_ configuration, update **Other options** to include `-rtos /home//Tools/jlink-nuttx.so`, as shown in the image below. ![Eclipse: GDB Segger Debug config RTOS aware: debugger tab](../../assets/debug/eclipse_settings_debug_config_gdb_segger_task_aware.png) diff --git a/docs/ko/debug/gdb_debugging.md b/docs/ko/debug/gdb_debugging.md index c902496e7a..7f08538da3 100644 --- a/docs/ko/debug/gdb_debugging.md +++ b/docs/ko/debug/gdb_debugging.md @@ -25,7 +25,7 @@ See the debug probe documentation for details on how to setup your debug connect - [SEGGER J-Link](probe_jlink.md): commercial probe, no built-in serial console, requires adapter. - [Black Magic Probe](probe_bmp.md): integrated GDB server and serial console, requires adapter. -- [STLink](probe_stlink): best value, integrated serial console, adapter must be soldered. +- [STLink](probe_stlink.md): best value, integrated serial console, adapter must be soldered. We recommend using the J-Link with the Pixhawk Debug Adapter or the STLinkv3-MINIE with a soldered custom cable. diff --git a/docs/ko/debug/plotting_realtime_uorb_data.md b/docs/ko/debug/plotting_realtime_uorb_data.md index bb11f5c109..17334f8fa8 100644 --- a/docs/ko/debug/plotting_realtime_uorb_data.md +++ b/docs/ko/debug/plotting_realtime_uorb_data.md @@ -72,7 +72,7 @@ cd ~/PX4-Autopilot make px4_sitl gz_x500 ``` -Open another terminal and start the `MicroXRCEAgent` to connect to the the simulator: +Open another terminal and start the `MicroXRCEAgent` to connect to the simulator: ```sh MicroXRCEAgent udp4 -p 8888; exec bash diff --git a/docs/ko/debug/probe_mculink.md b/docs/ko/debug/probe_mculink.md index d61135b956..1e03cca665 100644 --- a/docs/ko/debug/probe_mculink.md +++ b/docs/ko/debug/probe_mculink.md @@ -1,6 +1,6 @@ # MCU-Link Debug Probe -The [MCU-Link Debug Probe](https://www.nxp.com/design/design-center/software/development-software/mcuxpresso-software-and-tools-/mcu-link-debug-probe:MCU-LINK) is a cheap, fast and highly capable debug probe that can serve as a stand-alone debug and console communicator whn working with Pixhawk boards. +The [MCU-Link Debug Probe](https://www.nxp.com/design/design-center/software/development-software/mcuxpresso-software-and-tools-/mcu-link-debug-probe:MCU-LINK) is a cheap, fast and highly capable debug probe that can serve as a stand-alone debug and console communicator when working with Pixhawk boards. 주요 기능: diff --git a/docs/ko/debug/simulation_debugging.md b/docs/ko/debug/simulation_debugging.md index d73c942298..fa0945db8b 100644 --- a/docs/ko/debug/simulation_debugging.md +++ b/docs/ko/debug/simulation_debugging.md @@ -106,7 +106,7 @@ You can also start your simulation, and _then_ attach `gdb`: ``` As the script runs, note the **SITL COMMAND:** output text located right above the large "PX4" text. - It will list the location of your px4 bin file for later use. + It will list the location of your PX4 bin file for later use. ```sh SITL COMMAND: "" ""/etc diff --git a/docs/ko/debug/swd_debug.md b/docs/ko/debug/swd_debug.md index b8730cea52..e432954960 100644 --- a/docs/ko/debug/swd_debug.md +++ b/docs/ko/debug/swd_debug.md @@ -1,11 +1,11 @@ # SWD Debug Port -PX4 runs on ARM Cortex-M microcontrollers, which contain dedicated hardware for interactive debugging via the [_Serial Wire Debug (SWD)_][swd] interface and non-invasive profiling and high-bandwidth tracing via the [_Serial Wire Ouput (SWO)_][itm] and [_TRACE_ pins][etm]. +PX4 runs on ARM Cortex-M microcontrollers, which contain dedicated hardware for interactive debugging via the [_Serial Wire Debug (SWD)_][swd] interface and non-invasive profiling and high-bandwidth tracing via the [_Serial Wire Output (SWO)_][itm] and [_TRACE_ pins][etm]. The SWD debug interface allows direct, low-level, hardware access to the microcontroller's processor and peripherals, so it does not depend on any software on the device. Therefore it can be used to debug bootloaders and operating systems such as NuttX. -## Debug Signals +## Debug Signals {#debug-signals} Four signals are required for debugging (in bold) while the rest is recommended. @@ -27,11 +27,9 @@ The SWO pin can emit low-overhead, real-time profiling data with nanosecond time The TRACE pins require specialized debug probes to deal with the high bandwidth and subsequent datastream decoding. They are usually not accessible and are typically only used to debug very specific timing issues. - +## Autopilot Debug Ports {#debug-ports} -## 자동비행장치 디버그 포트 - -Flight controllers commonly provide a single debug port that exposes both the [SWD Interface](#debug-signals) and [System Console](system_console). +Flight controllers commonly provide a single debug port that exposes both the [SWD Interface](#debug-signals) and [System Console](system_console.md). The [Pixhawk Connector Standards](#pixhawk-standard-debug-ports) formalize the port that must be used in each FMU version. However there are still many boards that use different pinouts or connectors, so we recommend you check the [documentation for your autopilot](../flight_controller/index.md) to confirm port location and pinout. @@ -40,23 +38,35 @@ The debug port location and pinouts for a subset of autopilots are linked below: -| 오토파일럿 | 디버그 포트 | -| :----------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Holybro Pixhawk 6X-RT (FMUv6X-RT) | [Pixhawk Debug Full](#pixhawk-debug-full) | -| Holybro Pixhawk 6X (FMUv6x) | [Pixhawk Debug Full](#pixhawk-debug-full) | -| Holybro Pixhawk 5X (FMUv5x) | [Pixhawk Debug Full](#pixhawk-debug-full) | -| [Holybro Durandal](../flight_controller/durandal.md#debug-port) | [Pixhawk Debug Mini](#pixhawk-debug-mini) | -| [Holybro Kakute F7](../flight_controller/kakutef7.md#debug-port) | Solder pads | -| [Holybro Pixhawk 4 Mini](../flight_controller/pixhawk4_mini.md#debug-port) (FMUv5) | [Pixhawk Debug Mini](#pixhawk-debug-mini) | -| [Holybro Pixhawk 4](../flight_controller/pixhawk4.md#debug_port) (FMUv5) | [Pixhawk Debug Mini](#pixhawk-debug-mini) | -| [Drotek Pixhawk 3 Pro](../flight_controller/pixhawk3_pro.md#debug-port) (FMU-v4pro) | [Pixhawk Debug Mini](#pixhawk-debug-mini) | -| [CUAV V5+](../flight_controller/cuav_v5_plus.md#debug-port) | 6-pin JST GH
Digikey: [BM06B-GHS-TBT(LF)(SN)(N)][bm06b-ghs-tbt(lf)(sn)(n)] (vertical mount), [SM06B-GHS-TBT(LF)(SN)(N)][sm06b-ghs-tbt(lf)(sn)(n)] (side mount) | -| [CUAV V5nano](../flight_controller/cuav_v5_nano.md#debug_port) | 6-pin JST GH
Digikey: [BM06B-GHS-TBT(LF)(SN)(N)][bm06b-ghs-tbt(lf)(sn)(n)] (vertical mount), [SM06B-GHS-TBT(LF)(SN)(N)][sm06b-ghs-tbt(lf)(sn)(n)] (side mount) | -| [3DR Pixhawk](../flight_controller/pixhawk.md#swd-port) | ARM 10-pin JTAG Connector (also used for FMUv2 boards including: _mRo Pixhawk_, _HobbyKing HKPilot32_). | +| 오토파일럿 | 디버그 포트 | +| :------------------------------------------------------------------------------------------------------ | :----------------------------------------------------------------------- | +| [Holybro Pixhawk 6X-RT](../flight_controller/pixhawk6x-rt.md#debug_port) (FMUv6X-RT) | [Pixhawk Debug Full](#pixhawk-debug-full) | +| [Holybro Pixhawk 6X](../flight_controller/pixhawk6x.md#debug_port) (FMUv6x) | [Pixhawk Debug Full](#pixhawk-debug-full) | +| [Holybro Pixhawk 5X](../flight_controller/pixhawk5x.md#debug_port) (FMUv5x) | [Pixhawk Debug Full](#pixhawk-debug-full) | +| [Holybro Durandal](../flight_controller/durandal.md#debug-port) | [Pixhawk Debug Mini](#pixhawk-debug-mini) | +| [Holybro Pixhawk 4](../flight_controller/pixhawk4.md#debug_port) (FMUv5) | [Pixhawk Debug Mini](#pixhawk-debug-mini) | +| [Holybro Pixhawk 6X Pro](../flight_controller/pixhawk6x_pro.md#debug-port) | [Pixhawk Debug Full](#pixhawk-debug-full) | +| [Holybro Pixhawk 6C](../flight_controller/pixhawk6c.md#debug_port) | [Pixhawk Debug Full](#pixhawk-debug-full) | +| [Holybro Pixhawk 6C Mini](../flight_controller/pixhawk6c_mini.md#debug_port) | [Pixhawk Debug Mini](#pixhawk-debug-mini) | +| [Holybro Pix32 v6](../flight_controller/holybro_pix32_v6.md#debug_port) | [Pixhawk Debug Full](#pixhawk-debug-full) | +| [Holybro Pix32 v5](../flight_controller/holybro_pix32_v5.md#debug-port) | [Pixhawk Debug Mini](#pixhawk-debug-mini) | +| [Holybro Kakute H7](../flight_controller/kakuteh7.md#debug-port) | SWD pads and system console | +| [Holybro Kakute H7 mini](../flight_controller/kakuteh7mini.md#debug-port) | SWD pads and system console | +| [Holybro Kakute H7 V2](../flight_controller/kakuteh7v2.md#debug-port) | SWD pads and system console | +| [CUAV V5+](../flight_controller/cuav_v5_plus.md#debug-port) | Custom port but comes with adaptor cable | +| [CUAV V5nano](../flight_controller/cuav_v5_nano.md#debug_port) | Custom port but comes with adaptor cable | +| [CUAV Pixhawk V6X](../flight_controller/cuav_pixhawk_v6x.md#debug_port) | [Pixhawk Debug Full](#pixhawk-debug-full) | +| [CUAV X25-SUPER](../flight_controller/cuav_x25-super.md#debug_port) | [Pixhawk Debug Mini] | +| [CUAV X25-EVO](../flight_controller/cuav_x25-evo.md#debug_port) | [Pixhawk Debug Mini] | +| [CUAV Nora](../flight_controller/cuav_nora.md#debug-port) | Custom port but comes with adaptor cable. | +| [ARK Pixhawk Autopilot Bus Carrier](../flight_controller/ark_pab.md#debug-port) | [Pixhawk Debug Full](#pixhawk-debug-full) | +| [NXP MR-VMU-RT1176](../flight_controller/nxp_mr_vmu_rt1176.md#debug_port) | [Pixhawk Debug Full](#pixhawk-debug-full) | +| [mRo Pixracer](../flight_controller/pixracer.md#debug-port) | [Pixhawk Debug Mini](#pixhawk-debug-mini) | +| [S-Vehicle E2](../flight_controller/svehicle_e2.md#debug-port) | [Pixhawk Debug Mini] | +| [AP-H743-R1](../flight_controller/x-mav_ap-h743r1.md#debug-port) | 4-pin JST GH (SWD only) | +| [mRo Control Zero F7](../flight_controller/mro_control_zero_f7.md#debug_port) | | - - -## Pixhawk Connector Standard Debug Ports +## Pixhawk Connector Standard Debug Ports {#pixhawk-standard-debug-ports} The Pixhawk project has defines a standard pinout and connector type for different Pixhawk FMU releases: @@ -64,16 +74,16 @@ The Pixhawk project has defines a standard pinout and connector type for differe Check your [specific board](#port-information) to confirm the port used. ::: -| FMU 버전 | Pixhawk Version | 디버그 포트 | -| :-------- | :-------------------------------------------------------------- | :---------------------------------------- | -| FMUv2 | [Pixhawk / Pixhawk 1](../flight_controller/pixhawk.md#swd-port) | 10핀 ARM 디버그 | -| FMUv3 | Pixhawk 2 | 6핀 SUR 디버그 | -| FMUv4 | Pixhawk 3 | [Pixhawk Debug Mini](#pixhawk-debug-mini) | -| FMUv5 | Pixhawk 4 FMUv5 | [Pixhawk Debug Mini](#pixhawk-debug-mini) | -| FMUv5X | Pixhawk 5X | [Pixhawk Debug Full](#pixhawk-debug-full) | -| FMUv6 | Pixhawk 6 | [Pixhawk Debug Full](#pixhawk-debug-full) | -| FMUv6X | Pixhawk 6X | [Pixhawk Debug Full](#pixhawk-debug-full) | -| FMUv6X-RT | Pixhawk 6X-RT | [Pixhawk Debug Full](#pixhawk-debug-full) | +| FMU 버전 | Pixhawk Version | 디버그 포트 | +| :-------- | :------------------ | :---------------------------------------- | +| FMUv2 | Pixhawk / Pixhawk 1 | 10핀 ARM 디버그 | +| FMUv3 | Pixhawk 2 | 6핀 SUR 디버그 | +| FMUv4 | Pixhawk 3 | [Pixhawk Debug Mini](#pixhawk-debug-mini) | +| FMUv5 | Pixhawk 4 FMUv5 | [Pixhawk Debug Mini](#pixhawk-debug-mini) | +| FMUv5X | Pixhawk 5X | [Pixhawk Debug Full](#pixhawk-debug-full) | +| FMUv6 | Pixhawk 6 | [Pixhawk Debug Full](#pixhawk-debug-full) | +| FMUv6X | Pixhawk 6X | [Pixhawk Debug Full](#pixhawk-debug-full) | +| FMUv6X-RT | Pixhawk 6X-RT | [Pixhawk Debug Full](#pixhawk-debug-full) | :::info There FMU and Pixhawk versions are (only) consistent after FMUv5X. @@ -81,7 +91,7 @@ There FMU and Pixhawk versions are (only) consistent after FMUv5X. ### Pixhawk Debug Mini -The [Pixhawk Connector Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-009%20Pixhawk%20Connector%20Standard.pdf) defines the _Pixhawk Debug Mini_, a _6-Pin SH Debug Port_ that provides access to both SWD pins and the [System Console](system_console). +The [Pixhawk Connector Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-009%20Pixhawk%20Connector%20Standard.pdf) defines the _Pixhawk Debug Mini_, a _6-Pin SH Debug Port_ that provides access to both SWD pins and the [System Console](system_console.md). This is used in FMUv4 and FMUv5. @@ -112,7 +122,7 @@ You can connect to the debug port using a [cable like this one](https://www.digi ### Pixhawk Debug Full -The [Pixhawk Connector Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-009%20Pixhawk%20Connector%20Standard.pdf) defines _Pixhawk Debug Full_, a _10-Pin SH Debug Port_ that provides access to both SWD pins and the [System Console](system_console). +The [Pixhawk Connector Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-009%20Pixhawk%20Connector%20Standard.pdf) defines _Pixhawk Debug Full_, a _10-Pin SH Debug Port_ that provides access to both SWD pins and the [System Console](system_console.md). This essentially moves the solder pads from beside the [Pixhawk Debug Mini](#pixhawk-debug-mini) into the connector, and also adds an SWO pin. This port is specified for use in FMUv5x, FMUv6, FMUv6x. @@ -142,18 +152,16 @@ You can connect to the debug port using a [cable like this one](https://www.digi ![10-pin JST SH Cable](../../assets/debug/cable_10pin_jst_sh.jpg) - +## Debug Probes for PX4 Hardware {#debug-probes} -## Debug Probes for PX4 Hardware - -Flight controllers commonly provide a [single debug port](#autopilot-debug-ports) that exposes both the [SWD Interface](#debug-signals) and [System Console](system_console). +Flight controllers commonly provide a [single debug port](#autopilot-debug-ports) that exposes both the [SWD Interface](#debug-signals) and [System Console](system_console.md). There are several debug probes that are tested and supported for connecting to one or both of these interfaces: - [SEGGER J-Link](../debug/probe_jlink.md): commercial probe, no built-in serial console, requires adapter. - [Black Magic Probe](../debug/probe_bmp.md): integrated GDB server and serial console, requires adapter. -- [STLink](../debug/probe_stlink): best value, integrated serial console, adapter must be soldered. -- [MCU-Link](../debug/probe_mculink): best value, integrated serial console, requires adapter. +- [STLink](../debug/probe_stlink.md): best value, integrated serial console, adapter must be soldered. +- [MCU-Link](../debug/probe_mculink.md): best value, integrated serial console, requires adapter. An adapter to connect to the debug port may come with your flight controller or debug probe. Other options are given below. @@ -191,7 +199,7 @@ Probes that are known to come with connectors are listed below: ### Board-specific Adapters -Some manufacturers provide cables to make it easy to connect the SWD interface and [System Console](../debug/system_console). +Some manufacturers provide cables to make it easy to connect the SWD interface and [System Console](../debug/system_console.md). - [CUAV V5nano](../flight_controller/cuav_v5_nano.md#debug_port) and [CUAV V5+](../flight_controller/cuav_v5_plus.md#debug-port) include this debug cable: @@ -205,7 +213,7 @@ You can also create custom cables for connecting to different boards or probes: - Connect the VREF pin, if supported by the debug probe. - Connect the remaining pins, if present. -See the [STLinkv3-MINIE](probe_stlink) for a guide on how to solder a custom cable. +See the [STLinkv3-MINIE](probe_stlink.md) for a guide on how to solder a custom cable. :::tip Where possible, we highly recommend that you create or obtain an adapter board rather than custom cables for connecting to SWD/JTAG debuggers and computers. @@ -217,5 +225,3 @@ This reduces the risk or poor wiring contributing to debugging problems, and has [swd]: https://developer.arm.com/documentation/ihi0031/a/The-Serial-Wire-Debug-Port--SW-DP- [itm]: https://developer.arm.com/documentation/ddi0403/d/Appendices/Debug-ITM-and-DWT-Packet-Protocol?lang=en [etm]: https://developer.arm.com/documentation/ihi0064/latest/ -[bm06b-ghs-tbt(lf)(sn)(n)]: https://www.digikey.com/en/products/detail/jst-sales-america-inc/BM06B-GHS-TBT/807804 -[sm06b-ghs-tbt(lf)(sn)(n)]: https://www.digikey.com/en/products/detail/jst-sales-america-inc/SM06B-GHS-TB/807790 diff --git a/docs/ko/debug/system_console.md b/docs/ko/debug/system_console.md index ca67c28b61..4fdb0ca65f 100644 --- a/docs/ko/debug/system_console.md +++ b/docs/ko/debug/system_console.md @@ -23,16 +23,10 @@ Developers targeting a number of different boards may wish to use a [debug adapt ### 보드별 연결 방법 -The System Console UART pinouts/debug ports are typically documented in [autopilot overview pages](../flight_controller/index.md) (some are linked below): +The System Console UART pinouts/debug ports are typically documented in the affected [autopilot overview pages](../flight_controller/index.md). +For example, see [mRo Pixhawk](../flight_controller/mro_pixhawk.md#console-port) and [Pixracer](../flight_controller/pixracer.md#debug-port). -- [3DR Pixhawk v1 Flight Controller](../flight_controller/pixhawk.md#console-port) (also applies to - [mRo Pixhawk](../flight_controller/mro_pixhawk.md#debug-ports), [Holybro pix32](../flight_controller/holybro_pix32.md#debug-port)) -- [Pixhawk 3](../flight_controller/pixhawk3_pro.md#debug-port) -- [Pixracer](../flight_controller/pixracer.md#debug-port) - - - -### Pixhawk 디버그 포트 +### Pixhawk Debug Port {#pixhawk_debug_port} Pixhawk flight controllers usually come with a [Pixhawk Connector Standard Debug Port](../debug/swd_debug.md#pixhawk-connector-standard-debug-ports) which will be either the 10 pin [Pixhawk Debug Full](../debug/swd_debug.md#pixhawk-debug-full) or 6 pin [Pixhawk Debug Mini](../debug/swd_debug.md#pixhawk-debug-mini) port. diff --git a/docs/ko/dev_airframes/adding_a_new_frame.md b/docs/ko/dev_airframes/adding_a_new_frame.md index 59aece9838..5f5133b9b7 100644 --- a/docs/ko/dev_airframes/adding_a_new_frame.md +++ b/docs/ko/dev_airframes/adding_a_new_frame.md @@ -124,118 +124,79 @@ param set-default CA_ROTOR3_PY 0.15 param set-default CA_ROTOR3_KM -0.05 ``` -### Example - Babyshark VTOL Complete Vehicle +### Example - HolyBro QAV250 Complete Vehicle -A more complicated configuration file for a complete vehicle is provided below. -This is the configuration for the Baby Shark [Standard VTOL](../frames_vtol/standardvtol.md) ([original file here](https://github.com/PX4/PX4-Autopilot/blob/main/ROMFS/px4fmu_common/init.d/airframes/13014_vtol_babyshark)). +A more complete configuration file for a real vehicle is provided below. +This is the configuration for the [HolyBro QAV250](../frames_multicopter/holybro_qav250_pixhawk4_mini.md) quadrotor ([original file here](https://github.com/PX4/PX4-Autopilot/blob/main/ROMFS/px4fmu_common/init.d/airframes/4052_holybro_qav250)). -The shebang and documentation sections are similar to those for the generic frame, but here we also document what `outputs` are mapped to each motor and actuator. -Note that these outputs are documentation only; the actual mapping is done using parameters. +The shebang and documentation sections are similar to those for the generic frame. +Here we also add a `@url` link to the vehicle documentation, a `@maintainer`, and additional board exclusions. ```sh #!/bin/sh # -# @name BabyShark VTOL +# @name HolyBro QAV250 # -# @type Standard VTOL -# @class VTOL +# @url https://docs.px4.io/main/en/frames_multicopter/holybro_qav250_pixhawk4_mini # -# @maintainer Silvan Fuhrer +# @type Quadrotor x +# @class Copter # -# @output Motor1 motor 1 -# @output Motor2 motor 2 -# @output Motor3 motor 3 -# @output Motor4 motor 4 -# @output Motor5 Pusher motor -# @output Servo1 Ailerons -# @output Servo2 A-tail left -# @output Servo3 A-tail right +# @maintainer Beat Kueng # # @board px4_fmu-v2 exclude # @board bitcraze_crazyflie exclude -# @board holybro_kakutef7 exclude +# @board px4_fmu-v6x exclude +# @board ark_fmu-v6x exclude # ``` -As for the generic frame, we then include the generic VTOL defaults. +Next, we source the multicopter defaults. ```sh -. ${R}etc/init.d/rc.vtol_defaults +. ${R}etc/init.d/rc.mc_defaults ``` Then we define configuration parameters and [tuning gains](#tuning-gains): ```sh -param set-default MAV_TYPE 22 +# The set does not include a battery, but most people will probably use 4S +param set-default BAT1_N_CELLS 4 -param set-default BAT1_N_CELLS 6 +param set-default IMU_GYRO_CUTOFF 120 +param set-default IMU_DGYRO_CUTOFF 45 -param set-default FW_AIRSPD_MAX 30 -param set-default FW_AIRSPD_MIN 19 -param set-default FW_AIRSPD_TRIM 23 -param set-default FW_PN_R_SLEW_MAX 40 -param set-default FW_PSP_OFF 3 -param set-default FW_P_LIM_MAX 18 -param set-default FW_P_LIM_MIN -25 -param set-default FW_RLL_TO_YAW_FF 0.1 -param set-default FW_RR_P 0.08 -param set-default FW_R_LIM 45 -param set-default FW_R_RMAX 50 -param set-default FW_THR_TRIM 0.65 -param set-default FW_THR_MIN 0.3 -param set-default FW_THR_SLEW_MAX 0.6 -param set-default FW_T_HRATE_FF 0 -param set-default FW_T_SINK_MAX 15 -param set-default FW_T_SINK_MIN 3 -param set-default FW_YR_P 0.15 - -param set-default IMU_DGYRO_CUTOFF 15 -param set-default MC_PITCHRATE_MAX 60 -param set-default MC_ROLLRATE_MAX 60 -param set-default MC_YAWRATE_I 0.15 -param set-default MC_YAWRATE_MAX 40 -param set-default MC_YAWRATE_P 0.3 - -param set-default MPC_ACC_DOWN_MAX 2 -param set-default MPC_ACC_HOR_MAX 2 -param set-default MPC_ACC_UP_MAX 3 param set-default MC_AIRMODE 1 -param set-default MPC_JERK_AUTO 4 -param set-default MPC_LAND_SPEED 1 -param set-default MPC_MAN_TILT_MAX 25 -param set-default MPC_MAN_Y_MAX 40 -param set-default COM_SPOOLUP_TIME 1.5 -param set-default MPC_THR_HOVER 0.45 -param set-default MPC_TILTMAX_AIR 25 -param set-default MPC_TKO_RAMP_T 1.8 -param set-default MPC_TKO_SPEED 1 -param set-default MPC_VEL_MANUAL 3 -param set-default MPC_XY_CRUISE 3 -param set-default MPC_XY_VEL_MAX 3.5 -param set-default MPC_YAWRAUTO_MAX 40 -param set-default MPC_Z_VEL_MAX_UP 2 +param set-default MC_PITCHRATE_D 0.0012 +param set-default MC_PITCHRATE_I 0.35 +param set-default MC_PITCHRATE_MAX 1200 +param set-default MC_PITCHRATE_P 0.082 +param set-default MC_PITCH_P 8 +param set-default MC_ROLLRATE_D 0.0012 +param set-default MC_ROLLRATE_I 0.3 +param set-default MC_ROLLRATE_MAX 1200 +param set-default MC_ROLLRATE_P 0.076 +param set-default MC_ROLL_P 8 +param set-default MC_YAWRATE_I 0.3 +param set-default MC_YAWRATE_MAX 600 +param set-default MC_YAWRATE_P 0.25 +param set-default MC_YAW_P 4 -param set-default NAV_ACC_RAD 3 +param set-default MPC_MANTHR_MIN 0 +param set-default MPC_MAN_TILT_MAX 60 +param set-default MPC_THR_CURVE 1 +param set-default MPC_THR_HOVER 0.25 +param set-default MPC_THR_MIN 0.05 +param set-default MPC_Z_VEL_I_ACC 1.7 -param set-default SENS_BOARD_ROT 4 - -param set-default VT_ARSP_BLEND 10 -param set-default VT_ARSP_TRANS 21 -param set-default VT_B_DEC_MSS 1.5 -param set-default VT_B_TRANS_DUR 12 -param set-default VT_ELEV_MC_LOCK 0 -param set-default VT_FWD_THRUST_SC 1.2 -param set-default VT_F_TR_OL_TM 8 -param set-default VT_PSHER_SLEW 0.5 -param set-default VT_TRANS_MIN_TM 4 -param set-default VT_TYPE 2 +param set-default THR_MDL_FAC 0.3 ``` -Last of all, the file defines the control allocation parameters for the geometry and the parameters that set which outputs map to different motors and servos. +Last of all, the file defines the control allocation parameters for the geometry and the parameters that set which outputs map to different motors. ```sh -param set-default CA_AIRFRAME 2 -param set-default CA_ROTOR_COUNT 5 +# Square quadrotor X PX4 numbering +param set-default CA_ROTOR_COUNT 4 param set-default CA_ROTOR0_PX 1 param set-default CA_ROTOR0_PY 1 param set-default CA_ROTOR1_PX -1 @@ -246,34 +207,11 @@ param set-default CA_ROTOR2_KM -0.05 param set-default CA_ROTOR3_PX -1 param set-default CA_ROTOR3_PY 1 param set-default CA_ROTOR3_KM -0.05 -param set-default CA_ROTOR4_AX 1.0 -param set-default CA_ROTOR4_AZ 0.0 -param set-default CA_SV_CS_COUNT 3 -param set-default CA_SV_CS0_TYPE 15 -param set-default CA_SV_CS0_TRQ_R 1.0 -param set-default CA_SV_CS1_TRQ_P 0.5000 -param set-default CA_SV_CS1_TRQ_R 0.0000 -param set-default CA_SV_CS1_TRQ_Y -0.5000 -param set-default CA_SV_CS1_TYPE 13 -param set-default CA_SV_CS2_TRQ_P 0.5000 -param set-default CA_SV_CS2_TRQ_Y 0.5000 -param set-default CA_SV_CS2_TYPE 14 - -param set-default PWM_MAIN_FUNC1 201 -param set-default PWM_MAIN_FUNC2 202 -param set-default PWM_MAIN_FUNC3 105 -param set-default PWM_MAIN_FUNC4 203 -param set-default PWM_MAIN_FUNC5 101 -param set-default PWM_MAIN_FUNC6 102 -param set-default PWM_MAIN_FUNC7 103 -param set-default PWM_MAIN_FUNC8 104 - -param set-default PWM_MAIN_TIM0 50 -param set-default PWM_MAIN_DIS1 1500 -param set-default PWM_MAIN_DIS2 1500 -param set-default PWM_MAIN_DIS3 1000 -param set-default PWM_MAIN_DIS4 1500 +param set-default PWM_MAIN_FUNC1 101 +param set-default PWM_MAIN_FUNC2 102 +param set-default PWM_MAIN_FUNC3 103 +param set-default PWM_MAIN_FUNC4 104 ``` ## 새 기체 그룹 추가 diff --git a/docs/ko/dev_log/log_encryption.md b/docs/ko/dev_log/log_encryption.md index e8a9a04267..e3b5fb372f 100644 --- a/docs/ko/dev_log/log_encryption.md +++ b/docs/ko/dev_log/log_encryption.md @@ -15,7 +15,7 @@ To use it you will need to build firmware with this feature enabled and then upl Log encryption was has been improved in PX4 v1.16 to generate a single encrypted log file that contains both encrypted log data, and an encrypted symmetric key that you can use to decrypt it (provided you can decrypt the symmetric key). In earlier versions the encrypted symmetric key was stored in a separate file. -For more information see the [Log Encryption (PX4 v1.15)](https://docs.px4.io/v1.15/en/dev_log/log_encryption.html). +For more information see the [Log Encryption (PX4 v1.15)](https://docs.px4.io/v1.15/en/dev_log/log_encryption). ::: ## How ULog Encryption Works @@ -142,7 +142,7 @@ Note that the value is generated fresh for each log, and any value specified in You can use choose different locations for your keys as long as they aren't used by anything else. ::: -The key in `CONFIG_PUBLIC_KEY1` is the public key used to wrap the symmetric key in the the beginning of `.ulge` file (by default: see [SDLOG_EXCH_KEY](../advanced_config/parameter_reference.md#SDLOG_EXCH_KEY)). +The key in `CONFIG_PUBLIC_KEY1` is the public key used to wrap the symmetric key in the beginning of `.ulge` file (by default: see [SDLOG_EXCH_KEY](../advanced_config/parameter_reference.md#SDLOG_EXCH_KEY)). You can use the `rsa2048.pub` key for testing, or replace it with the path to your own public key in the file (see [Generate RSA Public & Private Keys](#generate-rsa-public-private-keys)). Build the firmware like this: @@ -342,7 +342,7 @@ PX4-Autopilot/ │ │ ├── public_key.pub # Public key in hex format ``` -참고: +Notes: - The script will not overwrite any existing keys in the folders. It will generate a new public key if the folder only includes a private key. diff --git a/docs/ko/dev_log/logging.md b/docs/ko/dev_log/logging.md index 527e053184..531a094ecf 100644 --- a/docs/ko/dev_log/logging.md +++ b/docs/ko/dev_log/logging.md @@ -83,6 +83,31 @@ sensor_mag 200 1 There are several scripts to analyze and convert logging files in the [pyulog](https://github.com/PX4/pyulog) repository. +## Log Cleanup + +PX4 automatically manages log storage by rotating log files during writing and cleaning up old logs when starting a new log. +Rotation is **on by default**: when the current file reaches [SDLOG_MAX_SIZE](../advanced_config/parameter_reference.md#SDLOG_MAX_SIZE), the logger closes it and opens a new one, and old `.ulg` files are deleted (oldest first) to keep free space above the threshold set by [SDLOG_ROTATE](../advanced_config/parameter_reference.md#SDLOG_ROTATE). + +Three parameters control how much space logs may use: + +- [SDLOG_ROTATE](../advanced_config/parameter_reference.md#SDLOG_ROTATE) is the maximum disk usage percentage (default 90). + Cleanup prior to logging (see below) ensures at least `(100 - SDLOG_ROTATE)%` of the disk stays free at all times, **even while writing a new log file**. + Setting it to `0` disables space-based cleanup entirely; setting it to `100` lets logs fill the disk completely. +- [SDLOG_MAX_SIZE](../advanced_config/parameter_reference.md#SDLOG_MAX_SIZE) is the maximum size of a single log file in MB + (default 1024). It also reserves headroom so that a full new file always fits after cleanup. +- [SDLOG_DIRS_MAX](../advanced_config/parameter_reference.md#SDLOG_DIRS_MAX) optionally caps the number of log directories kept (default 0, disabled). + This runs on top of the space-based cleanup and is mainly useful for capping log usage by count independent of available disk size (e.g. in SITL, where it defaults to `7`). + +At log start, the cleanup threshold is `((100 - SDLOG_ROTATE)% of disk) + SDLOG_MAX_SIZE`. +The oldest logs are deleted until the free space meets this threshold. +For example, on an 8 GB card with defaults, cleanup keeps at least `820 + 1024 = ~1.8 GB` free at log start, +so ~6 GB is usable for logs and disk usage never exceeds 90% during writing. +Small flash targets override `SDLOG_MAX_SIZE` to a smaller value to keep more logs within the available space. + +PX4 stores logs in directories named with one of two formats, depending on whether the system has valid time: date directories (such as `2024-01-15` or `2024-01-16`) when it does, and session directories (`sess001`) when it doesn't. +The cleanup algorithm prioritises deleting logs from whichever format is not currently in use. +This ensures that stale logs from a different time mode are cleaned up before current logs. + ## File size limitations The maximum file size depends on the file system and OS. diff --git a/docs/ko/dev_setup/building_px4.md b/docs/ko/dev_setup/building_px4.md index 19f4a787fd..39d15b4cf6 100644 --- a/docs/ko/dev_setup/building_px4.md +++ b/docs/ko/dev_setup/building_px4.md @@ -136,13 +136,13 @@ The following list shows the build commands for the [Pixhawk standard](../flight - [mRo Pixhawk (FMUv3)](../flight_controller/mro_pixhawk.md): `make px4_fmu-v3_default` (supports 2MB Flash) -- [Holybro pix32 (FMUv2)](../flight_controller/holybro_pix32.md): `make px4_fmu-v2_default` +- [Holybro pix32 (FMUv2)](../flight_controller/autopilot_discontinued.md): `make px4_fmu-v2_default` - Discontinued -- [Pixfalcon (FMUv2)](../flight_controller/pixfalcon.md): `make px4_fmu-v2_default` +- [Pixfalcon (FMUv2)](../flight_controller/autopilot_discontinued.md): `make px4_fmu-v2_default` - Discontinued -- [Dropix (FMUv2)](../flight_controller/dropix.md): `make px4_fmu-v2_default` +- [Dropix (FMUv2)](../flight_controller/autopilot_discontinued.md): `make px4_fmu-v2_default` - Discontinued -- [Pixhawk 1 (FMUv2)](../flight_controller/pixhawk.md): `make px4_fmu-v2_default` +- [Pixhawk 1 (FMUv2)](../flight_controller/autopilot_discontinued.md): `make px4_fmu-v2_default` - Discontinued :::warning You **must** use a supported version of GCC to build this board (e.g. the `gcc-arm-none-eabi` package from the current Ubuntu LTS, which is the same toolchain used by CI) or remove modules from the build. @@ -282,7 +282,7 @@ make [VENDOR_][MODEL][_VARIANT] [VIEWER_MODEL_DEBUGGER_WORLD] - **VENDOR:** The manufacturer of the board: `px4`, `aerotenna`, `airmind`, `atlflight`, `auav`, `beaglebone`, `intel`, `nxp`, etc. The vendor name for Pixhawk series boards is `px4`. - **MODEL:** The _board model_ "model": `sitl`, `fmu-v2`, `fmu-v3`, `fmu-v4`, `fmu-v5`, `navio2`, etc. -- **VARIANT:** Indicates particular configurations: e.g. `bootloader`, `cyphal`, which contain components that are not present in the `default` configuration. +- **VARIANT:** Indicates particular configurations: e.g. `bootloader`, `cyphal`, `sih`, which add or remove components to/from the `default` configuration. Most commonly this is `default`, and may be omitted. :::tip diff --git a/docs/ko/dev_setup/dev_env.md b/docs/ko/dev_setup/dev_env.md index 69d749fe4d..d2f877fe13 100644 --- a/docs/ko/dev_setup/dev_env.md +++ b/docs/ko/dev_setup/dev_env.md @@ -1,5 +1,10 @@ # 파일 및 코드 설치개발자 환경 설정 (툴체인) +:::tip +You only need a toolchain if you want to **modify and build** PX4 from source. +If you just want to run PX4 simulation without changing the code, use a pre-built [Docker container or .deb package](../simulation/px4_sitl_prebuilt_packages.md) instead. +::: + The _supported platforms_ for PX4 development are: - [Ubuntu Linux (24.04/22.04)](../dev_setup/dev_env_linux_ubuntu.md) diff --git a/docs/ko/dev_setup/dev_env_linux_arch.md b/docs/ko/dev_setup/dev_env_linux_arch.md index d091713081..1bea210e90 100644 --- a/docs/ko/dev_setup/dev_env_linux_arch.md +++ b/docs/ko/dev_setup/dev_env_linux_arch.md @@ -1,7 +1,7 @@ # Arch Linux 개발 환경 :::warning -This development environment is [community supported and maintained](../advanced/community_supported_dev_env). +This development environment is [community supported and maintained](../advanced/community_supported_dev_env.md). It may or may not work with current versions of PX4. See [Toolchain Installation](../dev_setup/dev_env.md) for information about the environments and tools supported by the core development team. diff --git a/docs/ko/dev_setup/dev_env_mac.md b/docs/ko/dev_setup/dev_env_mac.md index 63e8e3ca38..d8381e7417 100644 --- a/docs/ko/dev_setup/dev_env_mac.md +++ b/docs/ko/dev_setup/dev_env_mac.md @@ -1,116 +1,135 @@ # macOS Development Environment -아래에서 macOS용 PX4 개발 환경 설정 방법을 설명합니다. +The following instructions set up a PX4 development environment on macOS. PX4 빌드에 사용되어 집니다. - Pixhawk와 기타 NuttX 기반 하드웨어 -- [Gazebo Classic Simulation](../sim_gazebo_classic/index.md) +- [Gazebo Simulation](../sim_gazebo_gz/index.md) (Gazebo Harmonic) + +It works on both Intel and Apple Silicon Macs. :::tip This setup is supported by the PX4 dev team. -To build other targets you will need to use a [different OS](../dev_setup/dev_env.md#supported-targets) (or an [unsupported development environment](../advanced/community_supported_dev_env.md)). +To build for [other targets](../dev_setup/dev_env.md#supported-targets) you will need to use a [different OS](../dev_setup/dev_env.md#supported-targets) or an [unsupported development environment](../advanced/community_supported_dev_env.md). ::: -## 영상 가이드 +## Development Environment Setup - +### 준비 사항 -## Base Setup - -The "base" macOS setup installs the tools needed for building firmware, and includes the common tools that will be needed for installing/using the simulators. - -### Environment Setup - -:::details -Apple Silicon MacBook users! -If you have an Apple M1, M2 etc. MacBook, make sure to run the terminal as x86 by setting up an x86 terminal: - -1. Locate the Terminal application within the Utilities folder (**Finder > Go menu > Utilities**) -2. Select _Terminal.app_ and right-click on it, then choose **Duplicate**. -3. Rename the duplicated Terminal app, e.g. to _x86 Terminal_ -4. Now select the renamed _x86 Terminal_ app and right-click and choose \*_Get Info_ -5. Check the box for **Open using Rosetta**, then close the window -6. Run the _x86 Terminal_ as usual, which will fully support the current PX4 toolchain - -::: - -First set up the environment - -1. Enable more open files by appending the following line to the `~/.zshenv` file (creating it if necessary): +1. **Install Xcode Command Line Tools** — provides `git`, `make`, and the Apple `clang` compiler: ```sh - echo ulimit -S -n 2048 >> ~/.zshenv + xcode-select --install + ``` + +2. **Install Homebrew** by following the [installation instructions](https://brew.sh). + +3. **Increase the open-file limit.** The PX4 build opens many files simultaneously and the macOS default limit (256) is too low — you may see `"LD: too many open files"` errors without this. + + Add the following line to your shell startup file so it applies to every new terminal session. + macOS defaults to **zsh** since Catalina, so add it to `~/.zshrc` (use `~/.bashrc` if you use bash): + + ```sh + echo "ulimit -S -n 2048" >> ~/.zshrc + ``` + + Then **open a new terminal** (or run `source ~/.zshrc`) for the change to take effect. + +4. **Ensure Python 3 is available.** Some PX4 build scripts require `python3` and `pip3` to be in your `PATH`. The Xcode Command Line Tools include Python 3 by default. + + ::: tip + If you need to install or manage a different Python version, we recommend [pyenv](https://github.com/pyenv/pyenv), which lets you set global and per-directory Python versions. + +::: + +### Install Development Tools + +1. **Download PX4 Source Code:** + + ```sh + git clone https://github.com/PX4/PX4-Autopilot.git + cd PX4-Autopilot + git submodule update --init --recursive --force + ``` + +2. **Install development environment libraries** from the [macos.sh](https://github.com/PX4/PX4-Autopilot/blob/main/Tools/setup/macos.sh) helper script: + + ```sh + ./Tools/setup/macos.sh --sim-tools ``` ::: info - If you don't do this, the build toolchain may report the error: `"LD: too many open files"` + The setup script creates a Python virtual environment at `.venv` in the repo root and installs all Python dependencies into it. This keeps PX4's Python requirements isolated from your system Python and avoids conflicts with Homebrew's externally-managed Python. + + Activate it before building: + + ```sh + source .venv/bin/activate + ``` + + You'll need to re-run this command in each new terminal session. To activate it automatically when you `cd` into the repo, consider a tool like [direnv](https://direnv.net/) or add the activation to your `~/.zshrc`. ::: -2. Enforce Python 3 by appending the following lines to `~/.zshenv` + This installs: - ```sh - # Point pip3 to macOS system python 3 pip - alias pip3=/usr/bin/pip3 - ``` - -### 공통 도구 - -To setup the environment to be able to build for Pixhawk/NuttX hardware (and install the common tools for using simulators): - -1. Install Homebrew by following these [installation instructions](https://brew.sh). - -2. Run these commands in your shell to install the common tools: - - ```sh - brew tap PX4/px4 - brew install px4-dev - ``` - -3. Install the required Python packages: - - ```sh - # install required packages using pip3 - python3 -m pip install --user pyserial empty toml numpy pandas jinja2 pyyaml pyros-genmsg packaging kconfiglib future jsonschema - # if this fails with a permissions error, your Python install is in a system path - use this command instead: - sudo -H python3 -m pip install --user pyserial empty toml numpy pandas jinja2 pyyaml pyros-genmsg packaging kconfiglib future jsonschema - ``` - -## Gazebo Classic Simulation - -To setup the environment for [Gazebo Classic](../sim_gazebo_classic/index.md) simulation: - -1. Run the following commands in your shell: - - ```sh - brew unlink tbb - sed -i.bak '/disable! date:/s/^/ /; /disable! date:/s/./#/3' $(brew --prefix)/Library/Taps/homebrew/homebrew-core/Formula/tbb@2020.rb - brew install tbb@2020 - brew link tbb@2020 - ``` + - **Toolchain packages** from the `osx-cross/arm` and `PX4/px4` Homebrew taps — ARM cross-compiler (`arm-gcc-bin@13`), `cmake`, `ninja`, `ccache`, `fastdds`, `genromfs`, `kconfig-frontends`, and other build tools + - **Python packages** from `requirements.txt` + - **`px4-sim`** (via `--sim-tools`) — Gazebo Harmonic simulation (`gz-harmonic`) and related tools ::: info - September 2021: The commands above are a workaround to this bug: [PX4-Autopilot#17644](https://github.com/PX4/PX4-Autopilot/issues/17644). - They can be removed once it is fixed (along with this note). + Omit `--sim-tools` if you only need to build for NuttX hardware and don't need simulation. + + Use `--reinstall` to force reinstallation of all Homebrew formulas (useful if something is broken). ::: -2. To install SITL simulation with Gazebo Classic: +### Gazebo Simulation - ```sh - brew install --cask temurin - brew install --cask xquartz - brew install px4-sim-gazebo - ``` +The `--sim-tools` flag installs the `px4-sim` Homebrew formula, which pulls in Gazebo Harmonic. -3. Run the macOS setup script: `PX4-Autopilot/Tools/setup/macos.sh` - The easiest way to do this is to clone the PX4 source, and then run the script from the directory, as shown: +If you skipped `--sim-tools` during initial setup and want to add simulation later: - ```sh - git clone https://github.com/PX4/PX4-Autopilot.git --recursive - cd PX4-Autopilot/Tools/setup - sh macos.sh - ``` +```sh +brew tap PX4/px4 +brew install px4-sim +``` + +:::info +Gazebo requires **XQuartz** for display on macOS. +If you don't already have it installed: + +```sh +brew install --cask xquartz +``` + +You may need to log out and back in after installing XQuartz. +::: + +### Verify Installation + +After installation, verify the key tools are available: + +```sh +# NuttX cross-compiler (from arm-gcc-bin@13) +arm-none-eabi-gcc --version + +# Build tools +cmake --version +ninja --version + +# Gazebo (if --sim-tools was used) +gz sim --versions +``` + +Quick smoke test — build and run a simulation target: + +```sh +make px4_sitl gz_x500 +``` + +If everything is set up correctly, this will build PX4 SITL and launch a Gazebo simulation with the x500 quadcopter. ## 다음 단계 @@ -120,7 +139,7 @@ To setup the environment for [Gazebo Classic](../sim_gazebo_classic/index.md) si - Install the [QGroundControl Daily Build](../dev_setup/qgc_daily_build.md) - :::tip + ::: tip The _daily build_ includes development tools that are hidden in release builds. 또한, 릴리스 빌드에서 아직 지원되지 않는 새로운 PX4 기능에 대한 액세스를 제공할 수도 있습니다. diff --git a/docs/ko/dev_setup/dev_env_windows_vm.md b/docs/ko/dev_setup/dev_env_windows_vm.md index 8d4c829fb7..4a7ac70cb9 100644 --- a/docs/ko/dev_setup/dev_env_windows_vm.md +++ b/docs/ko/dev_setup/dev_env_windows_vm.md @@ -29,14 +29,14 @@ There is also an incomplete section for VirtualBox at the end (we'd welcome expa VMWare performance is acceptable for basic usage (building Firmware) but not for running ROS or Gazebo Classic. -1. Download [VMWare Player Freeware](https://www.vmware.com/products/workstation-player/workstation-player-evaluation.html) +1. Download [VMWare Workstation Pro](https://www.vmware.com/products/desktop-hypervisor/workstation-and-fusion) (the free player has been discontinued) 2. 윈도우 시스템에 설치합니다. 3. Download the desired version of [Ubuntu Desktop ISO Image](https://ubuntu.com/download/desktop). (see [Linux Instructions Page](../dev_setup/dev_env_linux.md) for recommended Ubuntu version). -4. Open _VMWare Player_. +4. Open _Workstation Pro_. 5. Enable 3D acceleration in the VM's settings: **VM > Settings > Hardware > Display > Accelerate 3D graphics** diff --git a/docs/ko/dev_setup/getting_started.md b/docs/ko/dev_setup/getting_started.md index 1a991e9e8c..1ccd676ec7 100644 --- a/docs/ko/dev_setup/getting_started.md +++ b/docs/ko/dev_setup/getting_started.md @@ -2,6 +2,7 @@ 이 섹션에는 PX4 개발에 관련된 주제가 포함되어 있습니다. +- [PX4 Simulation QuickStart](../simulation/px4_simulation_quickstart.md) — Try PX4 in simulation without a build environment! - [Initial Setup](../dev_setup/config_initial.md) - [Toolchain Installation](../dev_setup/dev_env.md) - [Building the Code](../dev_setup/building_px4.md) diff --git a/docs/ko/dev_setup/qtcreator.md b/docs/ko/dev_setup/qtcreator.md index e1c9da5e7d..f12c3ad4d6 100644 --- a/docs/ko/dev_setup/qtcreator.md +++ b/docs/ko/dev_setup/qtcreator.md @@ -8,7 +8,7 @@ Qt Creator has been replaced by [VSCode](../dev_setup/vscode.md) as the official See [Toolchain Installation](../dev_setup/dev_env.md) for information about the environments and tools supported by the core development team. ::: -[Qt Creator](https://www.qt.io/download-open-source) is a popular cross-platform open-source IDE that can be used to compile and debug PX4. +[Qt Creator](https://www.qt.io/development/download-open-source) is a popular cross-platform open-source IDE that can be used to compile and debug PX4. ## Qt Creator 기능 diff --git a/docs/ko/dronecan/ark_cannode.md b/docs/ko/dronecan/ark_cannode.md index 918d210e8f..75830d2be0 100644 --- a/docs/ko/dronecan/ark_cannode.md +++ b/docs/ko/dronecan/ark_cannode.md @@ -28,7 +28,7 @@ Order this module from: - Pixhawk Standard SPI Connector - 7 Pin JST GH - PWM Connector - - 10 Pin JST JST + - 10 Pin JST - 8 PWM Outputs - Matches Pixhawk 4 PWM Connector Pinout - Pixhawk Standard Debug Connector @@ -77,7 +77,7 @@ DroneCAN configuration in PX4 is explained in more detail in [DroneCAN > Enablin You will need to enable the subscriber appropriate for each of the sensors that are connected to the ARK CANnode. -This is done using the the parameters named like `UAVCAN_SUB_*` in the parameter reference (such as [UAVCAN_SUB_ASPD](../advanced_config/parameter_reference.md#UAVCAN_SUB_ASPD), [UAVCAN_SUB_BARO](../advanced_config/parameter_reference.md#UAVCAN_SUB_BARO) etc.). +This is done using the parameters named like `UAVCAN_SUB_*` in the parameter reference (such as [UAVCAN_SUB_ASPD](../advanced_config/parameter_reference.md#UAVCAN_SUB_ASPD), [UAVCAN_SUB_BARO](../advanced_config/parameter_reference.md#UAVCAN_SUB_BARO) etc.). ## Ark CANNode Configuration diff --git a/docs/ko/dronecan/ark_g5_rtk_gps.md b/docs/ko/dronecan/ark_g5_rtk_gps.md index 92ab020b62..b067e5dc08 100644 --- a/docs/ko/dronecan/ark_g5_rtk_gps.md +++ b/docs/ko/dronecan/ark_g5_rtk_gps.md @@ -97,7 +97,7 @@ There is also CAN built-in bus termination via [CANNODE_TERM](../advanced_config You need to set necessary [DroneCAN](index.md) parameters and define offsets if the sensor is not centred within the vehicle: - Enable [UAVCAN_SUB_GPS](../advanced_config/parameter_reference.md#UAVCAN_SUB_GPS), [UAVCAN_SUB_MAG](../advanced_config/parameter_reference.md#UAVCAN_SUB_MAG), and [UAVCAN_SUB_BARO](../advanced_config/parameter_reference.md#UAVCAN_SUB_BARO). -- The parameters [EKF2_GPS_POS_X](../advanced_config/parameter_reference.md#EKF2_GPS_POS_X), [EKF2_GPS_POS_Y](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Y) and [EKF2_GPS_POS_Z](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Z) can be set to account for the offset of the ARK G5 RTK GPS from the vehicle's centre of gravity. +- The parameters [SENS_GPS0_OFFX](../advanced_config/parameter_reference.md#SENS_GPS0_OFFX), [SENS_GPS0_OFFY](../advanced_config/parameter_reference.md#SENS_GPS0_OFFY) and [SENS_GPS0_OFFZ](../advanced_config/parameter_reference.md#SENS_GPS0_OFFZ) can be set to account for the offset of the ARK G5 RTK GPS from the vehicle's centre of gravity. ## LED 신호의 의미 diff --git a/docs/ko/dronecan/ark_g5_rtk_heading_gps.md b/docs/ko/dronecan/ark_g5_rtk_heading_gps.md index 3b019a9b96..7b5da8df23 100644 --- a/docs/ko/dronecan/ark_g5_rtk_heading_gps.md +++ b/docs/ko/dronecan/ark_g5_rtk_heading_gps.md @@ -99,11 +99,11 @@ You need to set necessary [DroneCAN](index.md) parameters and define offsets if - Enable GPS yaw fusion by setting bit 3 of [EKF2_GPS_CTRL](../advanced_config/parameter_reference.md#EKF2_GPS_CTRL) to true. - Enable GPS blending to ensure the heading is always published by setting [SENS_GPS_MASK](../advanced_config/parameter_reference.md#SENS_GPS_MASK) to 7 (all three bits checked). - Enable [UAVCAN_SUB_GPS](../advanced_config/parameter_reference.md#UAVCAN_SUB_GPS), [UAVCAN_SUB_MAG](../advanced_config/parameter_reference.md#UAVCAN_SUB_MAG), and [UAVCAN_SUB_BARO](../advanced_config/parameter_reference.md#UAVCAN_SUB_BARO). -- The parameters [EKF2_GPS_POS_X](../advanced_config/parameter_reference.md#EKF2_GPS_POS_X), [EKF2_GPS_POS_Y](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Y) and [EKF2_GPS_POS_Z](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Z) can be set to account for the offset of the ARK G5 RTK HEADING GPS from the vehicle's centre of gravity. +- The parameters [SENS_GPS0_OFFX](../advanced_config/parameter_reference.md#SENS_GPS0_OFFX), [SENS_GPS0_OFFY](../advanced_config/parameter_reference.md#SENS_GPS0_OFFY) and [SENS_GPS0_OFFZ](../advanced_config/parameter_reference.md#SENS_GPS0_OFFZ) can be set to account for the offset of the ARK G5 RTK HEADING GPS from the vehicle's centre of gravity. ### Parameter references -This GPS is using ARK's private driver, the prameters below only exist on the firmware we ship the GPS with. You can set these params either in QGC or using the DroneCAN GUI Tool. +This GPS is using ARK's private driver, the parameters below only exist on the firmware we ship the GPS with. You can set these params either in QGC or using the DroneCAN GUI Tool. #### SEP_OFFS_YAW (float) diff --git a/docs/ko/dronecan/ark_gps.md b/docs/ko/dronecan/ark_gps.md index 4bcd150a6d..4a369996d9 100644 --- a/docs/ko/dronecan/ark_gps.md +++ b/docs/ko/dronecan/ark_gps.md @@ -91,7 +91,7 @@ If the sensor is not centred within the vehicle you will also need to define sen - Enable GPS yaw fusion by setting bit 3 of [EKF2_GPS_CTRL](../advanced_config/parameter_reference.md#EKF2_GPS_CTRL) to true. - Enable [UAVCAN_SUB_GPS](../advanced_config/parameter_reference.md#UAVCAN_SUB_GPS), [UAVCAN_SUB_MAG](../advanced_config/parameter_reference.md#UAVCAN_SUB_MAG), and [UAVCAN_SUB_BARO](../advanced_config/parameter_reference.md#UAVCAN_SUB_BARO). -- The parameters [EKF2_GPS_POS_X](../advanced_config/parameter_reference.md#EKF2_GPS_POS_X), [EKF2_GPS_POS_Y](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Y) and [EKF2_GPS_POS_Z](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Z) can be set to account for the offset of the ARK GPS from the vehicles centre of gravity. +- The parameters [SENS_GPS0_OFFX](../advanced_config/parameter_reference.md#SENS_GPS0_OFFX), [SENS_GPS0_OFFY](../advanced_config/parameter_reference.md#SENS_GPS0_OFFY) and [SENS_GPS0_OFFZ](../advanced_config/parameter_reference.md#SENS_GPS0_OFFZ) can be set to account for the offset of the ARK GPS from the vehicles centre of gravity. ### ARK GPS Configuration diff --git a/docs/ko/dronecan/ark_rtk_gps.md b/docs/ko/dronecan/ark_rtk_gps.md index e66dfbbcb6..6264ed2e7e 100644 --- a/docs/ko/dronecan/ark_rtk_gps.md +++ b/docs/ko/dronecan/ark_rtk_gps.md @@ -84,8 +84,9 @@ You need to set necessary [DroneCAN](index.md) parameters and define offsets if - Enable GPS yaw fusion by setting bit 3 of [EKF2_GPS_CTRL](../advanced_config/parameter_reference.md#EKF2_GPS_CTRL) to true. - Enable GPS blending to ensure the heading is always published by setting [SENS_GPS_MASK](../advanced_config/parameter_reference.md#SENS_GPS_MASK) to 7 (all three bits checked). +- If using [Moving Baseline & GPS Heading](#setting-up-moving-baseline-gps-heading), set [SENS_GPS_PRIME](../advanced_config/parameter_reference.md#SENS_GPS_PRIME) to the CAN node ID of the _Moving Base_ module. The moving base is preferred because the rover receiver in a moving baseline configuration can experience degraded navigation rate and increased data latency when corrections are intermittent. - Enable [UAVCAN_SUB_GPS](../advanced_config/parameter_reference.md#UAVCAN_SUB_GPS), [UAVCAN_SUB_MAG](../advanced_config/parameter_reference.md#UAVCAN_SUB_MAG), and [UAVCAN_SUB_BARO](../advanced_config/parameter_reference.md#UAVCAN_SUB_BARO). -- The parameters [EKF2_GPS_POS_X](../advanced_config/parameter_reference.md#EKF2_GPS_POS_X), [EKF2_GPS_POS_Y](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Y) and [EKF2_GPS_POS_Z](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Z) can be set to account for the offset of the ARK RTK GPS from the vehicles centre of gravity. +- The parameters [SENS_GPS0_OFFX](../advanced_config/parameter_reference.md#SENS_GPS0_OFFX), [SENS_GPS0_OFFY](../advanced_config/parameter_reference.md#SENS_GPS0_OFFY) and [SENS_GPS0_OFFZ](../advanced_config/parameter_reference.md#SENS_GPS0_OFFZ) can be set to account for the offset of the ARK RTK GPS from the vehicles centre of gravity. ### ARK RTK GPS Configuration @@ -137,6 +138,7 @@ Setup via CAN: - On the _Moving Base_, set the following: - [GPS_UBX_MODE](../advanced_config/parameter_reference.md#GPS_UBX_MODE) to `4`. - [CANNODE_PUB_MBD](../advanced_config/parameter_reference.md#CANNODE_PUB_MBD) to `1`. +- On the _Flight Controller_, set [SENS_GPS_PRIME](../advanced_config/parameter_reference.md#SENS_GPS_PRIME) to the CAN node ID of the _Moving Base_ (see [PX4 Configuration](#px4-configuration)). Setup via UART: @@ -155,6 +157,7 @@ Setup via UART: - [GPS_YAW_OFFSET](../advanced_config/parameter_reference.md#GPS_YAW_OFFSET) to `0` if your _Rover_ is in front of your _Moving Base_, `90` if _Rover_ is right of _Moving Base_, `180` if _Rover_ is behind _Moving Base_, or `270` if _Rover_ is left of _Moving Base_. - On the _Moving Base_, set the following: - [GPS_UBX_MODE](../advanced_config/parameter_reference.md#GPS_UBX_MODE) to `2`. +- On the _Flight Controller_, set [SENS_GPS_PRIME](../advanced_config/parameter_reference.md#SENS_GPS_PRIME) to the CAN node ID of the _Moving Base_ (see [PX4 Configuration](#px4-configuration)). For more information see [Rover and Moving Base](../dronecan/index.md#rover-and-moving-base) in the DroneCAN guide. diff --git a/docs/ko/dronecan/ark_rtk_gps_l1_l2.md b/docs/ko/dronecan/ark_rtk_gps_l1_l2.md index de5de1a5eb..5cdd64540d 100644 --- a/docs/ko/dronecan/ark_rtk_gps_l1_l2.md +++ b/docs/ko/dronecan/ark_rtk_gps_l1_l2.md @@ -85,7 +85,7 @@ You need to set necessary [DroneCAN](index.md) parameters and define offsets if - Enable GPS yaw fusion by setting bit 3 of [EKF2_GPS_CTRL](../advanced_config/parameter_reference.md#EKF2_GPS_CTRL) to true. - Enable GPS blending to ensure the heading is always published by setting [SENS_GPS_MASK](../advanced_config/parameter_reference.md#SENS_GPS_MASK) to 7 (all three bits checked). - Enable [UAVCAN_SUB_GPS](../advanced_config/parameter_reference.md#UAVCAN_SUB_GPS), [UAVCAN_SUB_MAG](../advanced_config/parameter_reference.md#UAVCAN_SUB_MAG), and [UAVCAN_SUB_BARO](../advanced_config/parameter_reference.md#UAVCAN_SUB_BARO). -- The parameters [EKF2_GPS_POS_X](../advanced_config/parameter_reference.md#EKF2_GPS_POS_X), [EKF2_GPS_POS_Y](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Y) and [EKF2_GPS_POS_Z](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Z) can be set to account for the offset of the ARK RTK GPS L1 L5 from the vehicles centre of gravity. +- The parameters [SENS_GPS0_OFFX](../advanced_config/parameter_reference.md#SENS_GPS0_OFFX), [SENS_GPS0_OFFY](../advanced_config/parameter_reference.md#SENS_GPS0_OFFY) and [SENS_GPS0_OFFZ](../advanced_config/parameter_reference.md#SENS_GPS0_OFFZ) can be set to account for the offset of the ARK RTK GPS L1 L5 from the vehicles centre of gravity. ### ARK RTK GPS L1 L5 Configuration diff --git a/docs/ko/dronecan/ark_x20_rtk_gps.md b/docs/ko/dronecan/ark_x20_rtk_gps.md index 6473bae5db..5e9bf24b55 100644 --- a/docs/ko/dronecan/ark_x20_rtk_gps.md +++ b/docs/ko/dronecan/ark_x20_rtk_gps.md @@ -88,7 +88,7 @@ You need to set necessary [DroneCAN](index.md) parameters and define offsets if - Enable GPS yaw fusion by setting bit 3 of [EKF2_GPS_CTRL](../advanced_config/parameter_reference.md#EKF2_GPS_CTRL) to true. - Enable GPS blending to ensure the heading is always published by setting [SENS_GPS_MASK](../advanced_config/parameter_reference.md#SENS_GPS_MASK) to 7 (all three bits checked). - Enable [UAVCAN_SUB_GPS](../advanced_config/parameter_reference.md#UAVCAN_SUB_GPS), [UAVCAN_SUB_MAG](../advanced_config/parameter_reference.md#UAVCAN_SUB_MAG), and [UAVCAN_SUB_BARO](../advanced_config/parameter_reference.md#UAVCAN_SUB_BARO). -- The parameters [EKF2_GPS_POS_X](../advanced_config/parameter_reference.md#EKF2_GPS_POS_X), [EKF2_GPS_POS_Y](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Y) and [EKF2_GPS_POS_Z](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Z) can be set to account for the offset of the ARK X20 RTK GPS from the vehicles centre of gravity. +- The parameters [SENS_GPS0_OFFX](../advanced_config/parameter_reference.md#SENS_GPS0_OFFX), [SENS_GPS0_OFFY](../advanced_config/parameter_reference.md#SENS_GPS0_OFFY) and [SENS_GPS0_OFFZ](../advanced_config/parameter_reference.md#SENS_GPS0_OFFZ) can be set to account for the offset of the ARK X20 RTK GPS from the vehicles centre of gravity. ### ARK X20 RTK GPS Configuration diff --git a/docs/ko/dronecan/escs.md b/docs/ko/dronecan/escs.md index 6afea8c2e2..52df2d565c 100644 --- a/docs/ko/dronecan/escs.md +++ b/docs/ko/dronecan/escs.md @@ -5,7 +5,7 @@ PX4 supports DroneCAN compliant ESCs. ## Supported ESC :::info -[Supported ESCs](../peripherals/esc_motors#supported-esc) in _ESCs & Motors_ may include additional devices that are not listed below. +[Supported ESCs](../peripherals/esc_motors.md#supported-esc) in _ESCs & Motors_ may include additional devices that are not listed below. ::: The following articles have specific hardware/firmware information: diff --git a/docs/ko/dronecan/holybro_h_rtk_zed_f9p_gps.md b/docs/ko/dronecan/holybro_h_rtk_zed_f9p_gps.md index 18d6915235..06df69e834 100644 --- a/docs/ko/dronecan/holybro_h_rtk_zed_f9p_gps.md +++ b/docs/ko/dronecan/holybro_h_rtk_zed_f9p_gps.md @@ -86,7 +86,7 @@ DroneCAN configuration in PX4 is explained in more detail in [DroneCAN > Enablin ### Sensor Position Configuration -- For the the single Rover the module should be mounted with the included mast. +- For the single Rover the module should be mounted with the included mast. - For the Dual ZED-F9P setup (moving baseline), the DroneCAN modules should be placed at least 30cm apart on the airframe and elevated on a mast also. See the following [mast](https://holybro.com/products/30-antenna-mount?_pos=20&_sid=67b49d76b&_ss=r). - F9P module arrow(s) should be pointing forward with respect to the autopilot orientation. diff --git a/docs/ko/dronecan/holybro_m8n_gps.md b/docs/ko/dronecan/holybro_m8n_gps.md index f8ba0a5e74..92b784336e 100644 --- a/docs/ko/dronecan/holybro_m8n_gps.md +++ b/docs/ko/dronecan/holybro_m8n_gps.md @@ -94,4 +94,4 @@ If the sensor is not centred within the vehicle you will also need to define sen - Enable GPS yaw fusion by setting bit 3 of [EKF2_GPS_CTRL](../advanced_config/parameter_reference.md#EKF2_GPS_CTRL) to true. - Enable [UAVCAN_SUB_GPS](../advanced_config/parameter_reference.md#UAVCAN_SUB_GPS), [UAVCAN_SUB_MAG](../advanced_config/parameter_reference.md#UAVCAN_SUB_MAG), and [UAVCAN_SUB_BARO](../advanced_config/parameter_reference.md#UAVCAN_SUB_BARO). - Set [CANNODE_TERM](../advanced_config/parameter_reference.md#CANNODE_TERM) to `1` if this is that last node on the CAN bus. -- The parameters [EKF2_GPS_POS_X](../advanced_config/parameter_reference.md#EKF2_GPS_POS_X), [EKF2_GPS_POS_Y](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Y) and [EKF2_GPS_POS_Z](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Z) can be set to account for the offset of the ARK GPS from the vehicles centre of gravity. +- The parameters [SENS_GPS0_OFFX](../advanced_config/parameter_reference.md#SENS_GPS0_OFFX), [SENS_GPS0_OFFY](../advanced_config/parameter_reference.md#SENS_GPS0_OFFY) and [SENS_GPS0_OFFZ](../advanced_config/parameter_reference.md#SENS_GPS0_OFFZ) can be set to account for the offset of the ARK GPS from the vehicles centre of gravity. diff --git a/docs/ko/dronecan/index.md b/docs/ko/dronecan/index.md index 8b6738922d..cba14ba2af 100644 --- a/docs/ko/dronecan/index.md +++ b/docs/ko/dronecan/index.md @@ -158,7 +158,7 @@ DroneCAN peripherals connected to PX4 can also be [configured using parameters v By convention, parameters named with the prefix [CANNODE\_](../advanced_config/parameter_reference.md#CANNODE_BITRATE) have prefined meaning, and may be documented in the parameter reference. `CANNODE_` parameters prefixed with `CANNODE_PUB_` and `CANNODE_SUB_` enable the peripheral to publish or subscribe the associated DroneCAN message. These allow DroneCAN peripherals to be configured to only subscribe and publish messages that they actually need (in the same way that PX4 uses the corresponding `UAVCAN_PUB_`/`UAVCAN_SUB_` parameters). -Note that a peripheral might might not use `CANNODE_` parameters, in which case it may have to publish/subscribe to particular messages whether or not they are needed. +Note that a peripheral might not use `CANNODE_` parameters, in which case it may have to publish/subscribe to particular messages whether or not they are needed. The following sections provide additional detail on the PX4 and DroneCAN peripheral parameters used to enable particular features. @@ -194,7 +194,7 @@ GPS CANNODE parameter ([set using QGC](#qgc-cannode-parameter-configuration)): Other PX4 Parameters: -- If the GPS is not positioned at the vehicle centre of gravity you can account for the offset using [EKF2_GPS_POS_X](../advanced_config/parameter_reference.md#EKF2_GPS_POS_X), [EKF2_GPS_POS_Y](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Y) and [EKF2_GPS_POS_Z](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Z). +- If the GPS is not positioned at the vehicle centre of gravity you can account for the offset using [SENS_GPS0_OFFX](../advanced_config/parameter_reference.md#SENS_GPS0_OFFX), [SENS_GPS0_OFFY](../advanced_config/parameter_reference.md#SENS_GPS0_OFFY) and [SENS_GPS0_OFFZ](../advanced_config/parameter_reference.md#SENS_GPS0_OFFZ). - If the GPS module provides yaw information, you can enable GPS yaw fusion by setting bit 3 of [EKF2_GPS_CTRL](../advanced_config/parameter_reference.md#EKF2_GPS_CTRL) to true. #### RTK GPS @@ -287,6 +287,14 @@ PX4 DroneCAN parameters: Select the specific CAN interface(s) used for ESC data output using the [UAVCAN_ESC_IFACE](../advanced_config/parameter_reference.md#UAVCAN_ESC_IFACE) parameter (all that all interfaces are selected by default). Note that DroneCAN ESCs should be on their own dedicated CAN interface(s) because ESC messages can saturate the bus and starve other nodes of bandwidth. +### Lights + +PX4 can control external LEDs on a connected DroneCAN peripheral using the standard DroneCAN [LightsCommand](https://dronecan.github.io/Specification/7._List_of_standard_data_types/#lightscommand) message. +Up to 2 lights acan be controlled. +Each light can independently show [system status colours](../getting_started/led_meanings.md#ui-led), a fixed colour (commonly used for indicating aircraft orientation), or switch between both depending on arm state. + +See [DroneCAN Lights](lights.md) for full configuration details. + ## QGC CANNODE Parameter Configuration QGroundControl can inspect and modify parameters belonging to CAN devices attached to the flight controller, provided the device are connected to the flight controller before QGC is started. diff --git a/docs/ko/dronecan/lights.md b/docs/ko/dronecan/lights.md new file mode 100644 index 0000000000..c58433378a --- /dev/null +++ b/docs/ko/dronecan/lights.md @@ -0,0 +1,61 @@ +# DroneCAN Lights + +PX4 can control external LEDs on a connected DroneCAN peripheral using the standard DroneCAN [LightsCommand](https://dronecan.github.io/Specification/7._List_of_standard_data_types/#lightscommand) message. + +Up to 2 lights are supported. +These can show [system status colours](../getting_started/led_meanings.md#ui-led), a fixed colour (used for indicating aircraft orientation), or switch between both depending on arm state. + +## 지원되는 RTK 장치 + +Any DroneCAN peripheral implementing the standard `LightsCommand` message type should work. + +The following have been tested: + +- **Vertiq ESC LED add-ons**: Each ESC exposes two light IDs — one RGB (for status) and one white. + The `light_id` for each is calculated as `esc_index × 3 + BASE_ID`, where `BASE_ID` is 1 for RGB and 2 for white. + See [Vertiq](../peripherals/vertiq.md) for other ESC setup details. + +## PX4 설정 + +1. Set up DroneCAN as described in [DroneCAN](index.md) (`UAVCAN_ENABLE` ≥ 2). +2. Set [UAVCAN_LGT_NUM](../advanced_config/parameter_reference.md#UAVCAN_LGT_NUM) to the number of lights (1 or 2). + Then reboot and reopen the ground station so that parameters for the new instances become visible. +3. Set the `light_id` and [light functions](#light_functions) of each light: + - [UAVCAN_LGT_ID0](../advanced_config/parameter_reference.md#UAVCAN_LGT_ID0) / [UAVCAN_LGT_ID1](../advanced_config/parameter_reference.md#UAVCAN_LGT_ID1): Set to a `light_id` value (as defined by the specific product). + - [UAVCAN_LGT_FN0](../advanced_config/parameter_reference.md#UAVCAN_LGT_FN0) / [UAVCAN_LGT_FN1](../advanced_config/parameter_reference.md#UAVCAN_LGT_FN1): Choose the desired [light function](#light_functions). +4. Set [UAVCAN_LGT_MODE](#UAVCAN_LGT_MODE) to control when fixed "orientation" colours activate. +5. Reboot for changes to take effect. + +### Light Functions {#light_functions} + +The functions of enabled lights are configured using [UAVCAN_LGT_FN0](../advanced_config/parameter_reference.md#UAVCAN_LGT_FN0) and [UAVCAN_LGT_FN1](../advanced_config/parameter_reference.md#UAVCAN_LGT_FN1), respectively. +Each function is represented by a value that defines two behaviours: one when the activation mode is **inactive** and one when it is **active**. + +| Value | 명칭 | When mode inactive | When mode active | +| ----- | ------------- | -------------------- | -------------------- | +| 0 | Status/Status | System status colour | System status colour | +| 1 | Off/White | Off | 흰색 | +| 2 | Off/Red | Off | 빨강 | +| 3 | Off/Green | Off | 녹색 | +| 4 | Status/White | System status colour | 흰색 | +| 5 | Status/Red | System status colour | 빨강 | +| 6 | Status/Green | System status colour | 녹색 | +| 7 | Status/Off | System status colour | Off | + +Notes: + +- The [system status colours](../getting_started/led_meanings.md#ui-led) is the same LED pattern used by the flight controller's onboard status LED (e.g. red when disarmed, green when armed and ready). +- A fixed colour, commonly used to indicate aircraft orientation. For example it is a common convention to have a red light on the port side, green on starboard, or white to the rear. + These colours do not change with flight controller state. +- For _hybrid_ functions, such as `Status/Red`, the light shows the Status colour while the activation mode is inactive, then switches to the "fixed" light colour once the mode becomes active. + +### Activation Mode (`UAVCAN_LGT_MODE`) {#UAVCAN_LGT_MODE} + +The activation mode parameter ([UAVCAN_LGT_MODE](#UAVCAN_LGT_MODE)) controls when each light switches from its _inactive_ to its _active_ behaviour (configured with the [Light function](#light_functions)): + +| Value | 설명 | +| ----- | --------------------------------------------------------------------------- | +| 0 | Always inactive (lights always show the inactive column) | +| 1 | Active when armed (default) | +| 2 | Active when prearmed or armed | +| 3 | Always active (lights always show the active column) | diff --git a/docs/ko/esc/ark_4in1_esc.md b/docs/ko/esc/ark_4in1_esc.md index 21ed5bd061..675b83d3f0 100644 --- a/docs/ko/esc/ark_4in1_esc.md +++ b/docs/ko/esc/ark_4in1_esc.md @@ -58,6 +58,18 @@ Other - Open source AM32 firmware - [DIU Blue Framework Listed](https://www.diu.mil/blue-uas/framework) +## PX4 설정 + +The ARK 4IN1 ESC supports DShot 300/600, Bidirectional DShot, and PWM input protocols. + +- **Bidirectional DShot**: Select BDShot300 or BDShot600 in the [Actuator Configuration](../config/actuators.md) to enable eRPM telemetry. +- **[Extended DShot Telemetry (EDT)](https://github.com/bird-sanctuary/extended-dshot-telemetry)**: AM32 firmware supports EDT, which provides temperature, voltage, and current through the BDShot signal. Enable with `DSHOT_BIDIR_EDT=1`. +- **AM32 EEPROM Settings**: Set `DSHOT_ESC_TYPE=1` to enable reading and writing ESC firmware settings via a ground station. + +See [DShot ESCs](../peripherals/dshot.md) for full setup details. + ## See Also - [ARK 4IN1 ESC CONS](https://docs.arkelectron.com/electronic-speed-controller/ark-4in1-esc) (ARK Docs) +- [DShot and Bidirectional DShot](https://brushlesswhoop.com/dshot-and-bidirectional-dshot/) (brushlesswhoop.com - General DShot reference) +- [Extended DShot Telemetry (EDT) Specification](https://github.com/bird-sanctuary/extended-dshot-telemetry) (bird-sanctuary) diff --git a/docs/ko/flight_controller/accton-godwit_ga1.md b/docs/ko/flight_controller/accton-godwit_ga1.md index bd968f852e..a15211e004 100644 --- a/docs/ko/flight_controller/accton-godwit_ga1.md +++ b/docs/ko/flight_controller/accton-godwit_ga1.md @@ -5,7 +5,7 @@ PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://cubepilot.org/#/home) for hardware support or compliance issues. ::: -The G-A1 is a state-of-the-art flight controller developed derived from the [Pixhawk Autopilot v6X Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-012%20Pixhawk%20Autopilot%20v6X%20Standard.pdf). +The G-A1 is a state-of-the-art flight controller derived from the [Pixhawk Autopilot v6X Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-012%20Pixhawk%20Autopilot%20v6X%20Standard.pdf). It includes an STM32H753 double-precision floating-point FMU processor and an STM32F103 IO coprocessor, multiple IMUs with 6-axis inertial sensors, two pressure/temperature sensors, and a geomagnetic sensor. It also has independent buses and power supplies, and is designed for safety and rich expansion capabilities. @@ -65,7 +65,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo - 92.2 (L) x 51.2 (W) x 28.3 (H) mm - 77.6g (carrier board with IMU) -## 구매처 +## Where to Buy {#store} - [Accton-IoT Godwit](https://www.accton-iot.com/godwit/) - [sales@accton-iot.com](sales@accton-iot.com) @@ -115,7 +115,7 @@ PPM receivers should be connected to the PPM interface. And other RC systems can ## GPS/나침반 -The Godwit G-A1 has a built-in compass +The Godwit G-A1 has a built-in compass. Due to potential interference, the autopilot is usually used with an external I2C compass as part of a GPS/Compass combination. ![G-A1 GPS](../../assets/flight_controller/accton-godwit/ga1/gps.png "G-A1 GPS") diff --git a/docs/ko/flight_controller/airlink.md b/docs/ko/flight_controller/airlink.md index de1a5dddb5..dd200cd01b 100644 --- a/docs/ko/flight_controller/airlink.md +++ b/docs/ko/flight_controller/airlink.md @@ -26,7 +26,7 @@ AIRLink has two computers and integrated LTE Module: ## 사양 - **Sensors** - - 3x Accelerometers, 3x Gyroscopes, 3x Magnetometers, 3x Pressure sensorss + - 3x Accelerometers, 3x Gyroscopes, 3x Magnetometers, 3x Pressure sensors - GNSS, Rangefinders, Lidars, Optical Flow, Cameras - 3x-redundant IMU - Vibration dampening @@ -59,7 +59,7 @@ AIRLink has two computers and integrated LTE Module: - Ethernet 10/100/1000 Native Gigabit - WiFi 802.11a/b/g/n/ac, Bluetooth - USB 3.0 Type C - - 2x Video: 4-Lane MIPI CSI (FPV Camera) and 4-Lane MIPI CSI with HMDI Input (Payload Camera) + - 2x Video: 4-Lane MIPI CSI (FPV Camera) and 4-Lane MIPI CSI with HDMI Input (Payload Camera) - **LTE/5G Connectivity Module** - Up to 600 Mbps bandwidth @@ -71,7 +71,7 @@ AIRLink has two computers and integrated LTE Module: - Antenna, 4x4 MIMO - Bands: Worldwide -## 구매처 +## Where to Buy {#store} Purchase from the original Sky-Drones Store (worldwide shipping with 1-2 days order processing time): @@ -92,7 +92,7 @@ The standard set contains: - 1x FPV camera with CSI cable - 1x WiFi antenna with MMCX connector - 2x/4x LTE/5G antenna with MMCX connector -- 1x HDMI to mini HDMI cable1x set of cables (7 cables for all connectors) +- 1x HDMI to mini HDMI cable, 1x set of cables (7 cables for all connectors) [AIRLink Telemetry](https://sky-drones.com/sets/airlink-telemetry-set.html) based on the Microhard LAN/IP-based RF micromodule is available as an add-on and is fully compatible with AIRLink. @@ -331,7 +331,7 @@ For PPM receivers please use RC Connector PPM pin located on the left side of th ## 출력 -AIRLink has 16 PWM ouputs. Main outputs 1-8 and connected to IO MCU. AUX outputs 1-8 are connected to FMU. +AIRLink has 16 PWM outputs. Main outputs 1-8 and connected to IO MCU. AUX outputs 1-8 are connected to FMU. | 출력 | Timer | Channel | | ----- | -------- | --------- | @@ -355,7 +355,7 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make sky-drones_smartap-airlink ``` diff --git a/docs/ko/flight_controller/ark_fpv.md b/docs/ko/flight_controller/ark_fpv.md index a8a28b4359..ef83bcf66b 100644 --- a/docs/ko/flight_controller/ark_fpv.md +++ b/docs/ko/flight_controller/ark_fpv.md @@ -13,7 +13,7 @@ The USA-built ARK FPV flight controller is based on the [ARKV6X](https://arkelec This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). ::: -## Where To Buy +## Where To Buy {#store} Order from [Ark Electronics](https://arkelectron.com/product/arkv6x/) (US) @@ -76,7 +76,7 @@ See the documentation [Ark Electronics GitBook](https://arkelectron.gitbook.io/a ## 추가 정보 -- Weight: 7.5 g g with MicroSD card +- Weight: 7.5 g with MicroSD card - Dimensions: 3.6 x 3.6 x 0.8 cm - USA Built - NDAA compliant - Heater: 1W for warming sensors in extreme cold diff --git a/docs/ko/flight_controller/ark_pab.md b/docs/ko/flight_controller/ark_pab.md index 6e6dfa8036..39d342f33c 100644 --- a/docs/ko/flight_controller/ark_pab.md +++ b/docs/ko/flight_controller/ark_pab.md @@ -11,7 +11,7 @@ The PAB form factor enables the ARK PAB Carrier to be used with any [PAB-compati ![ARKPAB Main Photo](../../assets/flight_controller/arkpab/ark_pab_main.jpg) -### Where To Buy +### Where To Buy {#store} Order From [Ark Electronics](https://arkelectron.com/product/ark-pixhawk-autopilot-bus-carrier/) (US) @@ -39,7 +39,7 @@ Order From [Ark Electronics](https://arkelectron.com/product/ark-pixhawk-autopil - 6 Pin JST-GH - Dual CAN Ports - 4 Pin JST-GH -- Triple Telemetry Ports with Flow - Control +- Triple Telemetry Ports with Flow Control - 6 Pin JST-GH - Eight PWM Outputs - 10 Pin JST-GH diff --git a/docs/ko/flight_controller/ark_pi6x.md b/docs/ko/flight_controller/ark_pi6x.md index 662ff829b9..c057084540 100644 --- a/docs/ko/flight_controller/ark_pi6x.md +++ b/docs/ko/flight_controller/ark_pi6x.md @@ -1,10 +1,19 @@ # ARK Pi6X Flow +:::warning +PX4 does not manufacture this (or any) autopilot. +Contact the [manufacturer](https://arkelectron.com/contact-us/) for hardware support or compliance issues. +::: + The [ARK Pi6X Flow](https://arkelectron.gitbook.io/ark-documentation/flight-controllers/ark-pi6x-flow) integrates a Raspberry Pi Compute Module 4 (CM4) Carrier, [ARKV6X Flight Controller](../flight_controller/ark_v6x.md), [ARK Flow sensors](../dronecan/ark_flow.md) , [ARK PAB Power Module](../power_module/ark_pab_power_module.md), and a 4-in-1 ESC, all mounted onto one compact board. ![ARK Pi6X Flow Flight Controller](../../assets/flight_controller/ark_pi6x_flow/ark_pi6xflow.jpg) -## 구매처 +:::info +This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). +::: + +## Where to Buy {#store} Order this module from: diff --git a/docs/ko/flight_controller/ark_v6x.md b/docs/ko/flight_controller/ark_v6x.md index cd18e266bf..c487306c8e 100644 --- a/docs/ko/flight_controller/ark_v6x.md +++ b/docs/ko/flight_controller/ark_v6x.md @@ -5,7 +5,7 @@ PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://arkelectron.com/contact-us/) for hardware support or compliance issues. ::: -The USA-built [ARKV6X](\(https://arkelectron.gitbook.io/ark-documentation/flight-controllers/arkv6x\)) flight controller is based on the [FMUV6X and Pixhawk Autopilot Bus open source standards](https://github.com/pixhawk/Pixhawk-Standards). +The USA-built [ARKV6X](https://arkelectron.gitbook.io/ark-documentation/flight-controllers/arkv6x) flight controller is based on the [FMUV6X and Pixhawk Autopilot Bus open source standards](https://github.com/pixhawk/Pixhawk-Standards). With triple synced IMUs, data averaging, voting, and filtering is possible. The Pixhawk Autopilot Bus (PAB) form factor enables the ARKV6X to be used on any [PAB-compatible carrier board](../flight_controller/pixhawk_autopilot_bus.md), such as the [ARK Pixhawk Autopilot Bus Carrier](../flight_controller/ark_pab.md). @@ -16,7 +16,7 @@ The Pixhawk Autopilot Bus (PAB) form factor enables the ARKV6X to be used on any This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). ::: -## Where To Buy +## Where To Buy {#store} Order From [Ark Electronics](https://arkelectron.com/product/arkv6x/) (US) diff --git a/docs/ko/flight_controller/arkpab.md b/docs/ko/flight_controller/arkpab.md index dee03c10b2..e99ee9b8b6 100644 --- a/docs/ko/flight_controller/arkpab.md +++ b/docs/ko/flight_controller/arkpab.md @@ -1 +1,2 @@ + diff --git a/docs/ko/flight_controller/arkv6x.md b/docs/ko/flight_controller/arkv6x.md index f117e5345f..f3812b11af 100644 --- a/docs/ko/flight_controller/arkv6x.md +++ b/docs/ko/flight_controller/arkv6x.md @@ -1 +1,2 @@ + diff --git a/docs/ko/flight_controller/auav_x2.md b/docs/ko/flight_controller/auav_x2.md index ed1db72bc5..89f35a4ec1 100644 --- a/docs/ko/flight_controller/auav_x2.md +++ b/docs/ko/flight_controller/auav_x2.md @@ -1,92 +1,8 @@ -# AUAV-X2 자동조종장치 (단종됨) + - + diff --git a/docs/ko/flight_controller/autopilot_discontinued.md b/docs/ko/flight_controller/autopilot_discontinued.md index bb0259f8ef..2167166008 100644 --- a/docs/ko/flight_controller/autopilot_discontinued.md +++ b/docs/ko/flight_controller/autopilot_discontinued.md @@ -6,26 +6,29 @@ They are listed because you may be using them in an existing drone, and because ## 자동조종장치 -- [Drotek DroPix](../flight_controller/dropix.md) (FMUv2) -- [Omnibus F4 SD](../flight_controller/omnibus_f4_sd.md) -- [CUAV X7](../flight_controller/cuav_x7.md) -- [CUAV v5](../flight_controller/cuav_v5.md) (Pixhawk FMUv5) -- [CUAV Pixhack v3](../flight_controller/pixhack_v3.md) (FMUv3) -- [Aerotenna OcPoC-Zynq Mini](../flight_controller/ocpoc_zynq.md) -- [Holybro Pixhawk 4 Mini](../flight_controller/pixhawk4_mini.md) (FMUv5) -- [Holybro Kakute F7](../flight_controller/kakutef7.md) -- [Holybro Pixhawk Mini](../flight_controller/pixhawk_mini.md) (FMUv3) -- [Holybro Pixfalcon](../flight_controller/pixfalcon.md) (Pixhawk FMUv2) -- [Holybro Pix32](../flight_controller/holybro_pix32.md) (FMUv2) -- [ModalAI VOXL Flight](../flight_controller/modalai_voxl_flight.md) -- [ModalAI Flight Core v1](../flight_controller/modalai_fc_v1.md) -- [mRobotics-X2.1](../flight_controller/mro_x2.1.md) (FMUv2) -- [mRo AUAV-X2](../flight_controller/auav_x2.md) (Pixhawk FMUv2) -- [NXP FMUK66](../flight_controller/nxp_rddrone_fmuk66.md) (Discontinued) -- [3DR Pixhawk 1](../flight_controller/pixhawk.md) (Pixhawk FMUv2) +- _Drotek DroPix_ (FMUv2) — last published in [PX4 v1.13](https://docs.px4.io/v1.13/en/flight_controller/dropix) +- _Drotek Pixhawk 3 Pro_ (FMUv4pro) — last published in [PX4 v1.15](https://docs.px4.io/v1.15/en/flight_controller/pixhawk3_pro) +- _Omnibus F4 SD_ — last published in [PX4 v1.15](https://docs.px4.io/v1.15/en/flight_controller/omnibus_f4_sd) +- _CUAV X7_ — last published in [PX4 v1.16](https://docs.px4.io/v1.16/en/flight_controller/cuav_x7) +- _CUAV v5_ (Pixhawk FMUv5) — last published in [PX4 v1.16](https://docs.px4.io/v1.16/en/flight_controller/cuav_v5) +- _CUAV Pixhack v3_ (FMUv3) — last published in [PX4 v1.15](https://docs.px4.io/v1.15/en/flight_controller/pixhack_v3) +- _Aerotenna OcPoC-Zynq Mini_ — last published in [PX4v1.11](https://docs.px4.io/v1.11/en/flight_controller/ocpoc_zynq#aerotenna-ocpoc-zynq-mini-flight-controller) +- _Holybro Pixhawk 4 Mini_ (FMUv5) -— last published in [PX4 v1.16](https://docs.px4.io/v1.16/en/flight_controller/pixhawk4_mini) +- _Holybro Kakute F7_ — Marked as discontinued in PX4 v1.15. + Last published in [PX4 v1.17](https://docs.px4.io/v1.17/en/flight_controller/kakutef7). +- _Holybro Pixhawk Mini_ (FMUv3) — last published in [PX4 v1.16](https://docs.px4.io/v1.16/en/flight_controller/pixhawk_mini) +- _Holybro Pixfalcon_ (Pixhawk FMUv2) — last published in [PX4 v1.16](https://docs.px4.io/v1.16/en/flight_controller/pixfalcon) +- _Holybro Pix32_ (FMUv2) — last published in [PX4 v1.16](https://docs.px4.io/v1.16/en/flight_controller/holybro_pix32) +- _ModalAI VOXL Flight_ — last published in [PX4 v1.16](https://docs.px4.io/v1.16/en/flight_controller/modalai_voxl_flight) +- _ModalAI Flight Core v1_ — last published in [PX4 v1.11](https://docs.px4.io/v1.11/en/flight_controller/modalai_fc_v1) +- _mRobotics-X2.1_ (FMUv2) — last published in [PX4 v1.16](https://docs.px4.io/v1.16/en/flight_controller/mro_x2.1) +- _mRo AUAV-X2_ (Pixhawk FMUv2) — last published in [PX4 v1.15](https://docs.px4.io/v1.15/en/flight_controller/auav_x2) +- _NXP RDDRONE-FMUK66 FMU_ — last published in [PX4 v1.15 docs](https://docs.px4.io/v1.15/en/flight_controller/nxp_rddrone_fmuk66) +- _3DR Pixhawk 1_ (Pixhawk FMUv2) — last published in [PX4 v1.15](https://docs.px4.io/v1.15/en/flight_controller/pixhawk) ## 완성 기체 -- [BetaFPV Beta75X 2S Brushless Whoop](https://docs.px4.io/v1.14/en/complete_vehicles/betafpv_beta75x.html#betafpv-beta75x-2s-brushless-whoop) (circa PX4 v1.14) -- [Intel® Aero RTF Drone](https://docs.px4.io/v1.12/en/complete_vehicles/intel_aero.html) (circa PX4 v1.12) -- [Qualcomm Snapdragon Flight](https://docs.px4.io/v1.11/en/flight_controller/snapdragon_flight.html) (circa PX4 v1.11) +- _Bitcraze Crazyflie 2.0_ — last published in [PX4 v1.15](https://docs.px4.io/v1.15/en/complete_vehicles_mc/crazyflie2) +- _BetaFPV Beta75X 2S Brushless Whoop_ — last published in [PX4 v1.14](https://docs.px4.io/v1.14/en/complete_vehicles/betafpv_beta75x#betafpv-beta75x-2s-brushless-whoop) +- _Intel® Aero RTF Drone_ — last published in [PX4 v1.12](https://docs.px4.io/v1.12/en/complete_vehicles/intel_aero) +- _Qualcomm Snapdragon Flight_ — last published in [PX4 v1.11](https://docs.px4.io/v1.11/en/flight_controller/snapdragon_flight) diff --git a/docs/ko/flight_controller/autopilot_manufacturer_supported.md b/docs/ko/flight_controller/autopilot_manufacturer_supported.md index 0d9b0ca603..1e7e70ca20 100644 --- a/docs/ko/flight_controller/autopilot_manufacturer_supported.md +++ b/docs/ko/flight_controller/autopilot_manufacturer_supported.md @@ -18,10 +18,12 @@ This category includes boards that are not fully compliant with the pixhawk stan - [ARK Electronics ARKV6X](../flight_controller/ark_v6x.md) (and [ARK Electronics Pixhawk Autopilot Bus Carrier](../flight_controller/ark_pab.md)) - [ARK FPV Flight Controller](../flight_controller/ark_fpv.md) - [ARK Pi6X Flow Flight Controller](../flight_controller/ark_pi6x.md) -- [CUAV Nora](../flight_controller/cuav_nora.md)(CUAV X7 variant) +- [CORVON 743v1](../flight_controller/corvon_743v1.md) +- [CUAV Nora](../flight_controller/cuav_nora.md) (CUAV X7 variant) - [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) - [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) diff --git a/docs/ko/flight_controller/beaglebone_blue.md b/docs/ko/flight_controller/beaglebone_blue.md index 95602eb614..5187536992 100644 --- a/docs/ko/flight_controller/beaglebone_blue.md +++ b/docs/ko/flight_controller/beaglebone_blue.md @@ -4,10 +4,10 @@ :::warning PX4 does not manufacture this (or any) autopilot. -Contact the [manufacturer](https://beagleboard.org/blue) for hardware support or compliance issues. +Contact the [manufacturer](https://www.beagleboard.org/boards/beaglebone-blue) for hardware support or compliance issues. ::: -[BeagleBone Blue](https://beagleboard.org/blue) is an all-in-one Linux-based computer. +[BeagleBone Blue](https://www.beagleboard.org/boards/beaglebone-blue) is an all-in-one Linux-based computer. 로봇 공학에 최적화되어 있지만, 이 작고 저렴한 보드에는 비행 콘트롤러에 필요한 모든 센서와 주변 장치가 있습니다. This topic shows how to set up the board to run PX4 with [librobotcontrol](https://github.com/beagleboard/librobotcontrol) robotics package. @@ -17,7 +17,7 @@ This topic shows how to set up the board to run PX4 with [librobotcontrol](https _BeagleBone Blue_ images can be found here: -- [Latest stable OS image](https://beagleboard.org/latest-images). +- [Latest stable OS image](https://www.beagleboard.org/distros). - [Test OS images](https://rcn-ee.net/rootfs/bb.org/testing/) (updated frequently). Information about flashing OS images can be found on [this page](https://github.com/beagleboard/beaglebone-blue/wiki/Flashing-firmware). @@ -79,7 +79,7 @@ echo "PermitRootLogin yes" >> /etc/ssh/sshd_config && systemctl restart sshd For _rsync_ over SSH with key authentication, follow the steps here (on the development machine): 1. 이전에 생성하지 않은 경우 SSH 키를 생성합니다. - ``` + ```sh ssh-keygen -t rsa ``` @@ -89,13 +89,13 @@ echo "PermitRootLogin yes" >> /etc/ssh/sshd_config && systemctl restart sshd 2. Define the BeagleBone Blue board as `beaglebone` in **/etc/hosts** and copy the public SSH key to the board for password-less SSH access: - ``` + ```sh ssh-copy-id debian@beaglebone ``` 3. 또는 beaglebone의 IP를 직접 사용할 수 있습니다. - ``` + ```sh ssh-copy-id debian@ ``` @@ -116,7 +116,7 @@ echo "PermitRootLogin yes" >> /etc/ssh/sshd_config && systemctl restart sshd The ARM Cross Compiler for _BeagleBone Blue_ can be found at [Linaro Toolchain Binaries site](https://www.linaro.org/downloads/#gnu_and_llvm). - :::tip + ::: tip GCC in the toolchain should be compatible with kernel in _BeagleBone Blue_. General rule of thumb is to choose a toolchain where version of GCC is not higher than version of GCC which comes with the OS image on _BeagleBone Blue_. @@ -131,7 +131,7 @@ echo "PermitRootLogin yes" >> /etc/ssh/sshd_config && systemctl restart sshd tar -xf gcc-linaro-13.0.0-2022.06-x86_64_arm-linux-gnueabihf.tar.xz ``` - :::tip + ::: tip The GCC version of the toolchain should be compatible with kernel in _BeagleBone Blue_. ::: @@ -151,7 +151,7 @@ echo "PermitRootLogin yes" >> /etc/ssh/sshd_config && systemctl restart sshd 3. Setup other dependencies by downloading the PX4 source code and then running the setup scripts: - ```` + ````sh git clone https://github.com/PX4/PX4-Autopilot.git --recursive ols ``` @@ -170,7 +170,7 @@ echo "PermitRootLogin yes" >> /etc/ssh/sshd_config && systemctl restart sshd Compile and Upload -``` +```sh make beaglebone_blue_default upload ``` @@ -189,9 +189,7 @@ sudo ./bin/px4 -s px4.config Currently _librobotcontrol_ requires root access. ::: - - -## 네이티브 빌드(선택 사항) +## Native Builds (optional) {#native_builds} You can also natively build PX4 builds directly on the BeagleBone Blue. @@ -216,7 +214,7 @@ Run the following commands on the BeagleBone Blue (i.e. via SSH): ## Changes in config -All changes can be made in de px4.config file directly on beaglebone. +All changes can be made in the px4.config file directly on beaglebone. For example, you can change the WIFI to wlan. :::info @@ -295,8 +293,6 @@ For a quadcopter with GPS and an SBUS receiver, here are typical connections: 1. 비글본 블루에서 모터 1, 2, 3 및 4의 ESC를 서보 출력의 채널 1, 2, 3 및 4에 연결합니다. 비글본 블루에서 ESC 커넥터에 전원 출력이 포함되어 있는 경우 핀, 제거 및 서보 채널의 전원 출력 핀에 연결하지 마십시오. - 2. Connect the above mentioned converted SBUS signal to the dsm2 port if you have the matching connector for dsm2, otherwise connect it to any other available UART port and change the corresponding port in **/home/debian/px4/px4.config** accordingly. - 3. GPS 모듈의 신호를 비글본 블루의 GPS 포트에 연결합니다 BeagleBone Blue에있는 GPS 포트의 신호 핀은 3.3V만 허용하므로 이에 적합한 GPS 모듈을 선택하십시오. diff --git a/docs/ko/flight_controller/corvon_743v1.md b/docs/ko/flight_controller/corvon_743v1.md new file mode 100644 index 0000000000..b3a8333c02 --- /dev/null +++ b/docs/ko/flight_controller/corvon_743v1.md @@ -0,0 +1,112 @@ +# CORVON 743v1 + + + +:::warning +PX4 does not manufacture this (or any) autopilot. Contact the manufacturer for hardware support or compliance issues. +::: + +The _CORVON 743v1_ is a flight controller designed by Feikong Technology Co., Ltd under the CORVON brand. +It features a powerful STM32H743 processor, dual high-performance IMUs (BMI088/BMI270), and an extensive array of interfaces. + +With its highly integrated 36x36mm footprint and 9g weight, and specialized interfaces like a direct plug-and-play DJI O3 Air Unit connector, this flight controller is optimized for space-constrained FPV builds and agile multirotors that require top-tier processing power and sensor redundancy. + +The board uses [Pixhawk Autopilot Standard Connections](https://docs.px4.io/main/en/flight_controller/autopilot_pixhawk_standard.html). + + + +:::info +This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). +::: + +## 주요 특징 + +- **MCU:** STM32H743VIT6 MCU (32 Bit Arm® Cortex®-M7, 480MHz, 2MB Flash, 1MB RAM) +- **IMU:** Bosch BMI088, BMI270 (Dual IMU redundancy) +- **Barometer:** DPS310 +- **Magnetometer:** IST8310 +- **OSD:** Onboard AT7456E +- **Interfaces:** + - 7x UARTs + - 1x CAN (UAVCAN) + - I2C 1개 + - Dedicated RC Input (UART6) + - 10x PWM outputs (DShot & Bi-Directional DShot supported) + - Dedicated DJI O3 Air Unit connector +- **Power:** + - 9V 3A BEC + - 5V 3A BEC + - ADC for battery voltage (up to 6S) and current monitoring + +## 구매처 + +Order from [CORVON](https://corvon.tech). + +## Physical / Mechanical + +- **Mounting:** 30.5 x 30.5mm, Φ4mm +- **Dimensions:** 36 x 36 x 8 mm +- **Weight:** 9g + +## 사양 + +### Processors & Sensors + +- **FMU Processor:** STM32H743 + - 32 Bit Arm® Cortex®-M7, 480MHz + - 2MB Flash, 1MB RAM +- **On-board Sensors:** + - Accel/Gyro: Bosch BMI088, BMI270 + - Barometer: DPS310 + - Compass: IST8310 + +### Power Configuration + +The board has an internal voltage sensor and connections on the ESC connector for an external current sensor. + +- The voltage sensor handles up to 6S LiPo batteries. +- Two onboard BECs provide robust peripheral power (9V 3A and 5V 3A). + +## Connectors & Pinouts + +The following image shows the port connection details, including RC, UARTs, CAN, I2C, SWD Debug, and VTX connections. + + + +### Standard Serial Port Mapping + +| UART | PX4 Target Config | Default Usage | +| ------ | ----------------- | ------------- | +| USART1 | TELEM1 | MAVLink | +| UART4 | TELEM2 | MAVLink | +| USART2 | GPS1 | GPS | +| USART3 | TELEM3 | | +| UART8 | URT6 | | +| USART6 | RC | RC Input | +| UART7 | TELEM4 | ESC Telemetry | + +### 디버그 포트 + +The board features a **4-pin SWD Debug** interface located on the right side of the board. This includes `SWCLK`, `SWDIO`, `3V3`, and `GND` for full hardware debugging. While a dedicated UART isn't strictly reserved for the NSH console by default, the full-speed USB connection provides MAVLink Console access out of the box. + +### RC Input + +RC Input is mapped to **UART6** via the explicit `SBUS/CRSF` connector block. + +- It fully supports PX4's standard `RC_INPUT` module protocols. +- The connector exposes both `RX6` and `TX6`, which makes it fully capable of bidirectional receiver protocols such as TBS Crossfire (CRSF), ELRS, and FPort, as well as traditional single-wire standards like SBUS (which operates inverted on RX6). + +## Building/Loading Firmware + +:::tip +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 from source: + +```sh +make corvon_743v1_default +``` + +Initial firmware flashing can be done over USB via QGroundControl. The bootloader status aligns with standard generic PX4 LED indications (Red = Bootloader/Error, Blue = Active/Activity, Green = Powered). diff --git a/docs/ko/flight_controller/cuav_nora.md b/docs/ko/flight_controller/cuav_nora.md index 1729b7e98e..ee99bfce15 100644 --- a/docs/ko/flight_controller/cuav_nora.md +++ b/docs/ko/flight_controller/cuav_nora.md @@ -5,7 +5,7 @@ PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://www.cuav.net) for hardware support or compliance issues. ::: -The [Nora](https://doc.cuav.net/flight-controller/x7/en/nora.html)® flight controller is a high-performance autopilot. +The [Nora](https://doc.cuav.net/controller/x7/en/nora-plus.html)® flight controller is a high-performance autopilot. 산업용 드론과 대형 대형 드론에 적합합니다. 주로 상용 제조업체에 공급됩니다. @@ -31,7 +31,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo - 고성능 프로세서 :::tip -The manufacturer [CUAV Docs](https://doc.cuav.net/flight-controller/x7/en/nora.html) are the canonical reference for Nora. +The manufacturer [CUAV Docs](https://doc.cuav.net/controller/x7/en/nora-plus.html) are the canonical reference for Nora. 가장 정확한 최신 정보를 포함하고 있습니다. ::: @@ -76,14 +76,14 @@ When it runs PX4 firmware, only 8 PWM outputs work. 나머지 6 개의 PWM 포트는 여전히 조정중입니다(따라서 작성시 VOLT와 호환되지 않음). ::: -## 구매처 +## Where to Buy {#store} - [CUAV Store](https://store.cuav.net)<\br> - [CUAV Aliexpress](https://www.aliexpress.com/item/4001042501927.html?gps-id=8041884&scm=1007.14677.110221.0&scm_id=1007.14677.110221.0&scm-url=1007.14677.110221.0&pvid=3dc0a3ba-fa82-43d2-b0b3-6280e4329cef&spm=a2g0o.store_home.promoteRecommendProducts_7913969.58) ## 배선 -[CUAV nora Wiring Quickstart](https://doc.cuav.net/flight-controller/x7/en/quick-start/quick-start-nora.html) +[CUAV nora Wiring Quickstart](https://doc.cuav.net/controller/x7/en/quick-start/quick-start-nora.html) ## 크기와 핀배열 @@ -120,7 +120,7 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make cuav_nora_default ``` @@ -171,6 +171,6 @@ The complete set of supported configurations can be seen in the [Airframes Refer ## 추가 정보 -- [Quick start](https://doc.cuav.net/flight-controller/x7/en/quick-start/quick-start-nora.html) +- [Quick start](https://doc.cuav.net/controller/x7/en/quick-start/quick-start-nora.html) - [CUAV docs](https://doc.cuav.net/) - [nora schematic](https://github.com/cuav/hardware/tree/master/X7_Autopilot) diff --git a/docs/ko/flight_controller/cuav_pixhawk_v6x.md b/docs/ko/flight_controller/cuav_pixhawk_v6x.md index b253c1a36d..773b68f95c 100644 --- a/docs/ko/flight_controller/cuav_pixhawk_v6x.md +++ b/docs/ko/flight_controller/cuav_pixhawk_v6x.md @@ -61,7 +61,7 @@ The Pixhawk® V6X is ideal for corporate research labs, academic research and co - 16- PWM servo outputs - 1 Dedicated R/C input for Spektrum / DSM and S.Bus with analog / PWM RSSI input - 3 TELEM Ports(with full flow control) -- 1 UART4(Seial and I2C) +- 1 UART4(Serial and I2C) - 2 GPS ports - 1 full GPS plus Safety Switch Port(GPS1) - 1 basic GPS port(with I2C,GPS2) @@ -104,7 +104,7 @@ The Pixhawk® V6X is ideal for corporate research labs, academic research and co ![Pixhawk V6X](../../assets/flight_controller/cuav_pixhawk_v6x/core.png) -## 구매처 +## Where to Buy {#store} Order from [CUAV](https://store.cuav.net/). @@ -116,7 +116,7 @@ The [Pixhawk V6X Wiring Quick Start](../assembly/quick_start_cuav_pixhawk_v6x.md ![Pixhawk V6x Pinout](../../assets/flight_controller/cuav_pixhawk_v6x/pixhawk_v6x_pinouts.png) -참고: +Notes: - The [camera capture pin](../camera/fc_connected_camera.md#camera-capture-configuration) (`PI0`) is pin 2 on the AD&IO port, marked above as `FMU_CAP1`. @@ -173,13 +173,11 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make px4_fmu-v6x_default ``` - - -## 디버그 포트 +## Debug Port {#debug_port} The [PX4 System Console](../debug/system_console.md) and [SWD interface](../debug/swd_debug.md) run on the **FMU Debug** port. diff --git a/docs/ko/flight_controller/cuav_v5.md b/docs/ko/flight_controller/cuav_v5.md index 45867dd428..ed3719fbc0 100644 --- a/docs/ko/flight_controller/cuav_v5.md +++ b/docs/ko/flight_controller/cuav_v5.md @@ -1,149 +1,7 @@ -# CUAV v5 (단종) + - + - -## 주변 장치 - -- [Digital Airspeed Sensor](https://item.taobao.com/item.htm?spm=a1z10.3-c-s.w4002-16371268452.37.6d9f48afsFgGZI&id=9512463037) -- [Telemetry Radio Modules](https://cuav.taobao.com/category-158480951.htm?spm=2013.1.w5002-16371268426.4.410b7a821qYbBq&search=y&catName=%CA%FD%B4%AB%B5%E7%CC%A8) -- [Rangefinders/Distance sensors](../sensor/rangefinders.md) - -## 지원 플랫폼 및 기체 - -일반 RC 서보 또는 Futaba S-Bus 서보로 제어 가능한 모든 멀티콥터/비행기/로버 또는 보트. -The complete set of supported configurations can be seen in the [Airframes Reference](../airframes/airframe_reference.md). - -## 추가 정보 - -- [FMUv5 reference design pinout](https://docs.google.com/spreadsheets/d/1-n0__BYDedQrc_2NHqBenG1DNepAgnHpSGglke-QQwY/edit#gid=912976165). -- [CUAV Github](https://github.com/cuav) +DOC REMOVED: 202603 +--> diff --git a/docs/ko/flight_controller/cuav_v5_nano.md b/docs/ko/flight_controller/cuav_v5_nano.md index 87f674128f..c69a71029d 100644 --- a/docs/ko/flight_controller/cuav_v5_nano.md +++ b/docs/ko/flight_controller/cuav_v5_nano.md @@ -60,7 +60,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo - 기타 특성: - 작동 온도: -20 ~ 85°c (측정치) -## 구매처 +## Where to Buy {#store} [CUAV Store](https://store.cuav.net/shop/v5-nano/) @@ -91,13 +91,11 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make px4_fmu-v5_default ``` - - -## 디버그 포트 +## Debug Port {#debug_port} The [PX4 System Console](../debug/system_console.md) and [SWD interface](../debug/swd_debug.md) operate on the **FMU Debug** port (`DSU7`). 보드에는 I/O 디버그 인터페이스가 없습니다. diff --git a/docs/ko/flight_controller/cuav_v5_plus.md b/docs/ko/flight_controller/cuav_v5_plus.md index ad67c1bcf2..8050de95bf 100644 --- a/docs/ko/flight_controller/cuav_v5_plus.md +++ b/docs/ko/flight_controller/cuav_v5_plus.md @@ -63,7 +63,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo - 기타 특성: - 작동 온도: -20 ~ 80°c (측정 값) -## 구매처 +## Where to Buy {#store} [CUAV Aliexpress](https://www.aliexpress.com/item/32890380056.html?spm=a2g0o.detail.1000060.1.7a7233e7mLTlVl&gps-id=pcDetailBottomMoreThisSeller&scm=1007.13339.90158.0&scm_id=1007.13339.90158.0&scm-url=1007.13339.90158.0&pvid=d899bfab-a7ca-46e1-adf2-72ad1d649822) (International users) @@ -119,7 +119,7 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make px4_fmu-v5_default ``` @@ -210,7 +210,7 @@ The UAVCAN [NEO V2 PRO GNSS receiver](https://doc.cuav.net/gps/neo-series-gnss/e `DSU7` FMU Debug Pin 1 is 5 volts - not the 3.3 volts of the CPU. -Some JTAG use this voltage to set the IO levels when communicating to the target. +Some JTAG adapters use this voltage to set the IO levels when communicating to the target. For direct connection to _Segger Jlink_ we recommended you use the 3.3 Volts of DSM/SBUS/RSSI pin 4 as Pin 1 on the debug connector (`Vtref`). diff --git a/docs/ko/flight_controller/cuav_x25-evo.md b/docs/ko/flight_controller/cuav_x25-evo.md index 45e9162e8d..4b3b46a4ee 100644 --- a/docs/ko/flight_controller/cuav_x25-evo.md +++ b/docs/ko/flight_controller/cuav_x25-evo.md @@ -9,7 +9,7 @@ The _X25-EVO_ is an advanced autopilot manufactured by CUAV®. The autopilot is recommended for commercial system integration but is also suitable for academic research and any other applications. -![X25-EVO AutoPilot - hero image](../../assets/flight_controller/cuav_x25-evo/X25-EVO.jpg) +![X25-EVO AutoPilot - hero image](../../assets/flight_controller/cuav_x25-evo/x25_evo.jpg) The X25-EVO brings you ultimate performance, stability, and reliability in every aspect. @@ -19,12 +19,17 @@ The X25-EVO brings you ultimate performance, stability, and reliability in every ### 특징 -- Arm® Cortex-M7® processor (STM32H743XI) with Floating-Point Unit (FPU), operating at 480MHz, and featuring 2MB Flash memory. Enables developers to enhance productivity and efficiency, allowing for more complex algorithms and models. -- Automotive-grade RM3100 compass. Designed for better stability and anti-interference capability. -- Triple-redundant IMUs and dual-redundant barometers located on separate buses. If the PX4 autopilot detects a sensor failure, the system seamlessly switches to another sensor to maintain flight control reliability. -- Independent LDO power control supplies power to each sensor group. A vibration isolation system filters high-frequency vibrations and reduces noise to ensure accurate readings, enabling better overall flight performance for the vehicle. +- Arm® Cortex-M7® processor (STM32H743XI) with Floating-Point Unit (FPU), operating at 480MHz, and featuring 2MB Flash memory. + Enables developers to enhance productivity and efficiency, allowing for more complex algorithms and models. +- Automotive-grade RM3100 compass. + Designed for better stability and anti-interference capability. +- Triple-redundant IMUs and dual-redundant barometers located on separate buses. + If the PX4 autopilot detects a sensor failure, the system seamlessly switches to another sensor to maintain flight control reliability. +- Independent LDO power control supplies power to each sensor group. + A vibration isolation system filters high-frequency vibrations and reduces noise to ensure accurate readings, enabling better overall flight performance for the vehicle. - Integrated Microchip Ethernet PHY for high-speed communication with onboard devices like mission computers via Ethernet. -- Dual temperature compensation systems, located on the IMU board and FMU board respectively. Temperature is controlled by onboard heating resistors to achieve the optimal operating temperature for the IMUs. +- Dual temperature compensation systems, located on the IMU board and FMU board respectively. + Temperature is controlled by onboard heating resistors to achieve the optimal operating temperature for the IMUs. - PWM servo output voltage switchable between 3.3V or 5V. - Modular design for DIY carrier boards. @@ -33,7 +38,7 @@ The X25-EVO brings you ultimate performance, stability, and reliability in every - Main Processor: STM32H743XI - 32-bit Arm® Cortex®-M7, 480MHz, 2MB Flash, 1MB RAM - Onboard Sensors: - - Accel/Gyro: IIM42652\*2 + - Accel/Gyro: IIM42652 (x2) - Accel/Gyro: IIM42653 - 자력계 : RM3100 - Barometer: BMP581 @@ -47,14 +52,14 @@ The X25-EVO brings you ultimate performance, stability, and reliability in every - Servo Rail Input: 0~9.9V - Rated Current: - Total Output Max Current: 10A - - TELEM1 and TELEM2 Output Current limiter: 4A - - CAN1 and CAN2 Output Current limiter: 2.4A + - `TELEM1` and `TELEM2` Output Current limiter: 4A + - `CAN1` and `CAN2` Output Current limiter: 2.4A - Other Ports Output Current limiter: 1.5A ### 인터페이스 - 16x PWM Servo Outputs -- 1x Dedicated R/C Input for Spektrum / DSM and S.Bus +- 1x Dedicated R/C Input(`RC IN`) for Spektrum / DSM and S.Bus - 1x Analog/PWM RSSI Input - 2x TELEM Ports (with full flow control) - 1x UART4 Port @@ -83,19 +88,24 @@ 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 + ![CUAV X25 EVO](../../assets/flight_controller/cuav_x25-evo/x25_evo_size.png) + +## Purchase Channels {#store} Order from [CUAV](https://store.cuav.net/). ## 조립 및 설정 -- Not provided. +The [X25 EVO Wiring Quick Start](../assembly/quick_start_cuav_x25_evo.md) provides instructions on how to assemble required/important peripherals including GPS, Power Module etc. -## Pin Definitions +## 핀배열 -- Not provided. +![CUAV X25 EVO Pinout](../../assets/flight_controller/cuav_x25-evo/x25_evo_pinouts.jpg) ## 시리얼 포트 매핑 @@ -106,12 +116,34 @@ Order from [CUAV](https://store.cuav.net/). | USART3 | /dev/ttyS2 | 디버그 콘솔 | | UART4 | /dev/ttyS3 | UART4 | | UART5 | /dev/ttyS4 | TELEM2 | -| USART6 | /dev/ttyS5 | RC | +| USART6 | /dev/ttyS5 | RC IN | | UART7 | /dev/ttyS6 | TELEM1 | +## PWM Outputs {#pwm_outputs} + +This flight controller supports up to 16 FMU PWM outputs (MAIN). + +Outputs: + +- Outputs 1-8 support [DShot](../peripherals/dshot.md). +- Outputs 9-16 do not support DShot. +- Outputs 1-7 support [Bidirectional DShot](../peripherals/dshot.md#bidirectional-dshot-telemetry). +- Output 8 supports Bidirectional DShot output only (no eRPM capture). + +The 16 outputs are in 5 groups: + +- Outputs 1-4 in group1 (Timer5) +- Outputs 5-8 in group2 (Timer4) +- Outputs 9-11 in group3 (Timer1) +- Outputs 12-14 in group4 (Timer8) +- Outputs 15-16 in group5 (Timer12) + +All outputs within the same group must use the same output protocol and rate. + ## 정격 전압 -The _X25-EVO_ achieves triple redundancy on power supplies if three power sources are provided. The three power rails are POWERC1, POWERC2, and USB. +The _X25-EVO_ achieves triple redundancy on power supplies if three power sources are provided. +The three power rails are `POWERC1`, `POWERC2`, and `USB`. - **POWER C1** and **POWER C2** are DroneCAN/UAVCAN battery interfaces. @@ -135,13 +167,11 @@ It is pre-built and installed automatically by _QGroundControl_ when the appropr To [build PX4](../dev_setup/building_px4.md) for this target, execute: -``` +```sh make cuav_x25-evo_default ``` - - -## 디버그 포트 +## Debug Port {#debug_port} The [PX4 System Console](../debug/system_console.md) and [SWD Interface](../debug/swd_debug.md) operate on the **FMU Debug** port. @@ -156,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). ## 추가 정보 diff --git a/docs/ko/flight_controller/cuav_x25-super.md b/docs/ko/flight_controller/cuav_x25-super.md new file mode 100644 index 0000000000..62f9083291 --- /dev/null +++ b/docs/ko/flight_controller/cuav_x25-super.md @@ -0,0 +1,178 @@ +# CUAV X25-SUPER + + + +:::warning +PX4 does not manufacture this (or any) autopilot. +Contact the [manufacturer](https://store.cuav.net/) for hardware support or compliance issues. +::: + +The _X25-SUPER_ is an advanced autopilot manufactured by CUAV®. + +The autopilot is recommended for commercial system integration but is also suitable for academic research and any other applications. + +![X25-SUPER AutoPilot - hero image](../../assets/flight_controller/cuav_x25-super/x25-super.png) + +The X25-SUPER brings you ultimate performance, stability, and reliability in every aspect. + +:::info +이 비행 컨트롤러는 [제조업체에서 지원](../flight_controller/autopilot_manufacturer_supported.md)합니다. +::: + +### 특징 + +- 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. +- PWM servo output voltage switchable between 3.3V or 5V. +- Modular design for DIY carrier boards. + +### Processors & Sensors + +- Main Processor: STM32H743XI + - 32-bit Arm® Cortex®-M7, 480MHz, 2MB Flash, 1MB RAM +- Onboard Sensors: + - Accel/Gyro: SCH16T + - Accel/Gyro: IIM42652 + - Accel/Gyro: IIM42653 + - 자력계 : RM3100 + - Barometer: BMP581 + - Barometer: ICP-20100 + +### 전기 데이터 + +- Rated Voltage: + - Input Voltage: 10~18V + - USB 전원 입력: 4.75~5.25V + - 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 + - Other Ports Output Current limiter: 1.5A + +### 인터페이스 + +- 16x PWM Servo Outputs +- 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 +- 2x GPS Ports + - 1x Full GPS plus Safety Switch Port (GPS1) + - 1x Basic GPS Port (with I2C, GPS2) +- 1x USB Port (TYPE-C) +- 1x Ethernet Port + - Transformerless application + - 100Mbps +- 3x I2C Bus Ports +- 1x SPI Bus + - 1x Chip Select Line + - 1x Data Ready Line + - 1x SPI Reset Line +- 5x CAN Ports for CAN Peripherals + - 3x CAN1 Bus Multiplexed Ports + - 2x CAN2 Bus Multiplexed Ports +- 2x Power Input Ports + - DroneCAN/UAVCAN Power Input +- 2x AD Ports + - Analog Input (3.3V) + - Analog Input (6.6V - not supported by PX4) +- 1x Dedicated Debug Port + - FMU Debug + +### 기계식 부품 + +- Dimensions: + + ![CUAV X25-SUPER](../../assets/flight_controller/cuav_x25-super/x25-super_size.png) + +## Purchase Channels {#store} + +Order from [CUAV](https://store.cuav.net/). + +## 조립 및 설정 + +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. + +## 핀배열 + +![CUAV X25-SUPER Pinout_01](../../assets/flight_controller/cuav_x25-super/x25-super_pinouts_01.png) +![CUAV X25-SUPER Pinout_02](../../assets/flight_controller/cuav_x25-super/x25-super_pinouts_02.png) + +## 시리얼 포트 매핑 + +| UART | 장치 | 포트 | +| ------ | ---------- | ------ | +| USART1 | /dev/ttyS0 | GPS1 | +| USART2 | /dev/ttyS1 | GPS2 | +| USART3 | /dev/ttyS2 | 디버그 콘솔 | +| UART4 | /dev/ttyS3 | UART4 | +| UART5 | /dev/ttyS4 | TELEM2 | +| USART6 | /dev/ttyS5 | RC IN | +| UART7 | /dev/ttyS6 | TELEM1 | + +## RC Input + +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`. + +- **POWER C1** and **POWER C2** are DroneCAN/UAVCAN battery interfaces. + +**Normal Operation Maximum Ratings** + +Under these conditions, all power sources will be used to power the system in the following order: + +1. **POWER C1** and **POWER C2** Inputs (10V to 18V) +2. USB Input (4.75V to 5.25V) + +**Voltage monitoring** + +Digital DroneCAN/UAVCAN battery monitoring is enabled by default. + +## 펌웨어 빌드 + +:::tip +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 +``` + +## Debug Port {#debug_port} + +The [PX4 System Console](../debug/system_console.md) and [SWD Interface](../debug/swd_debug.md) operate on the **FMU Debug** port. + +| 핀 | 신호 | 전압 | +| ------------------------- | ------------------------------- | --------------------- | +| 1(red) | 5V+ | +5V | +| 2 (흑) | DEBUG TX(출력) | +3.3V | +| 3 (흑) | DEBUG TX(입력) | +3.3V | +| 4 (흑) | FMU_SWDIO | +3.3V | +| 5 (흑) | FMU_SWCLK | +3.3V | +| 6 (흑) | GND | GND | + +## 지원 플랫폼 및 기체 + +일반 RC 서보 또는 Futaba S-Bus 서보로 제어 가능한 모든 멀티콥터/비행기/로버 또는 보트. +The complete set of supported configurations can be seen in the [Airframes Reference](../airframes/airframe_reference.md). + +## 추가 정보 + +- [CUAV Docs](https://doc.cuav.net/) diff --git a/docs/ko/flight_controller/cuav_x7.md b/docs/ko/flight_controller/cuav_x7.md index 89f345c533..8eb0b07db3 100644 --- a/docs/ko/flight_controller/cuav_x7.md +++ b/docs/ko/flight_controller/cuav_x7.md @@ -1,186 +1,7 @@ + + + - -:::warning -This flight controller has been [discontinued](../flight_controller/autopilot_experimental.md) and is no longer commercially available. -It has been superseded by the [CUAV X7+](https://doc.cuav.net/controller/x7/en/). -::: - -:::warning -PX4 does not manufacture this (or any) autopilot. -Contact the [manufacturer](https://www.cuav.net) for hardware support or compliance issues. -::: - -The [X7](https://doc.cuav.net/controller/x7/en/)® flight controller is a high-performance autopilot. -산업용 드론과 대형 대형 드론에 적합합니다. -주로 상용 제조업체에 공급됩니다. - -![CUAV x7](../../assets/flight_controller/cuav_x7/x7.jpg) - -모듈식 설계를 채택하였고, 다른베이스 플레이트와 일치시킬 수 있습니다. -상용 시스템의 통합을 개선하고, 배선을 줄이며, 시스템 안정성을 개선하고, UAV 경쟁력을 향상시키기 위해 UAV용 전용 캐리어 보드를 설계할 수 있습니다 (예 : 캐리어 보드에 대기 속도 센서, 원격 측정 또는 보조 컴퓨터 통합). -CUAV는 선택할 수있는 다양한 캐리어 보드를 제공합니다. - -:::info -This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). -::: - -## 특징 - -- 내부 충격 흡수 -- 모듈식 설계, DIY 캐리어 보드 가능 -- USB_HS 지원, 로그 다운로드 속도 향상(PX4는 아직 지원되지 않음) -- Support more DShot output -- IMU 가열 지원, 센서 작동 개선 -- Dedicated CAN battery port -- IMU 센서 3 세트 -- 자동차 등급 RM3100 나침반 -- 고성능 프로세서 - -:::tip -The manufacturer [CUAV Docs](https://doc.cuav.net/flight-controller/x7/en/) are the canonical reference for the X7. -가장 정확한 최신 정보를 포함하고 있습니다. -::: - -## 요약 - -- 메인 FMU 프로세서: STM32H743 - -- 내장 센서 : - - 가속도계/자이로스코프 : ICM-20689 - - 가속도계/자이로스코프 : ICM-20649 - - 가속도계/자이로스코프 : BMI088 - - 자력계 : RM3100 - - Barometer: MS5611\*2 - -- 인터페이스: - - PWM 출력 14개 (12개 Dshot 지원) - - 다중 RC 입력 지원(SBU/CPPM/DSM) - - 아날로그/PWM RSSI 입력 - - 2 개의 GPS 포트(GPS 및 UART4 포트) - - i2c 버스 4 개(i2c 전용 포트 2 개) - - CAN 버스 포트 2 개 - - 2 Power ports(Power A is common adc interface, Power C is DroneCAN battery interface) - - 2 ADC input - - USB 포트 1 개 - -- 전원시스템 - - 전원: 4.3~5.4V - - USB 입력: 4.75~5.25V - - 서보 레일 입력: 0~36V - -- 중량과 크기 - - 무게 : 101g - -- 기타 특성: - - 작동 온도: -20 ~ 80°c (측정 값) - - 3개의 imus - - 온도 보상 지원 - - 내부 충격 흡수 - -:::info -When it runs PX4 firmware, only 8 pwm works, the remaining 6 pwm are still being adapted, so it is not compatible with VOLT now. -::: - -## 구매처 - -[CUAV Store](https://store.cuav.net) - -[CUAV aliexpress](https://www.aliexpress.com/item/4001042683738.html?spm=a2g0o.detail.1000060.2.1ebb2a9d3WDryi&gps-id=pcDetailBottomMoreThisSeller&scm=1007.13339.169870.0&scm_id=1007.13339.169870.0&scm-url=1007.13339.169870.0&pvid=f0df2481-1c0a-44eb-92a4-9c11c6cb3d06&_t=gps-id:pcDetailBottomMoreThisSeller,scm-url:1007.13339.169870.0,pvid:f0df2481-1c0a-44eb-92a4-9c11c6cb3d06,tpp_buckets:668%230%23131923%2320_668%23808%234094%23518_668%23888%233325%2319_668%234328%2319934%23630_668%232846%238115%23807_668%232717%237566%23827_668%231000022185%231000066058%230_668%233468%2315607%2376) - -## 배선 - -[CUAV X7 Wiring Quickstart](https://doc.cuav.net/controller/x7/en/quick-start/quick-start-x7-plus.html) - -## 크기와 핀배열 - -![CUAV x7](../../assets/flight_controller/cuav_x7/x7-size.jpg) - -![X7 pinouts](../../assets/flight_controller/cuav_x7/x7-pinouts.jpg) - -:::warning -The `RCIN` port is limited to powering the RC receiver and cannot be connected to any power/load. -::: - -## 정격 전압 - -The _X7 AutoPilot_ can be triple-redundant on the power supply if three power sources are supplied. -The power rails are: **POWERA**, **POWERC** and **USB**. - -:::info -The output power rails **PWM OUT** (0V to 36V) do not power the flight controller board (and are not powered by it). -You must supply power to one of **POWERA**, **POWERC** or **USB** or the board will be unpowered. -::: - -**Normal Operation Maximum Ratings** - -이러한 조건에서 전원은 아래의 순서대로 시스템에 전원을 공급하여야합니다. - -1. **POWERA** and **POWERC** inputs (4.3V to 5.4V) -2. **USB** input (4.75V to 5.25V) - -## 펌웨어 빌드 - -:::tip -Most users will not need to build this firmware! -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: - -``` -make cuav_x7pro_default -``` - -## 과전류 보호 - -The _X7_ has over-current protection on the 5 Volt Peripheral and 5 Volt high power, which limits the current to 2.5A. -The _X7_ has short circuit protection. - -:::warning -Up to 2.5 A can be delivered to the connectors listed as pin 1 (although these are only rated at 1 A). -::: - -## 디버그 포트 - -The system's serial console and SWD interface operate on the **DSU7** port. -FTDI 케이블을 DSU7 커넥터에 연결하기만 하면됩니다. 제품 목록에는 CUAV FTDI 케이블이 포함되어 있습니다. - -![Debug port (DSU7)](../../assets/flight_controller/cuav_v5_plus/debug_port_dsu7.jpg) - -The [PX4 System Console](../debug/system_console.md) and [SWD interface](../debug/swd_debug.md) operate on the **FMU Debug** port (`DSU7`). - -The debug port (`DSU7`) uses a [JST BM06B](https://www.digikey.com.au/en/products/detail/jst-sales-america-inc/BM06B-GHS-TBT-LF-SN-N/807850) connector and has the following pinout: - -| 핀 | 신호 | 전압 | -| ------------------------- | ------------------------------- | --------------------- | -| 1(red) | 5V+ | +5V | -| 2 (흑) | DEBUG TX(출력) | +3.3V | -| 3 (흑) | DEBUG TX(입력) | +3.3V | -| 4 (흑) | FMU_SWDIO | +3.3V | -| 5 (흑) | FMU_SWCLK | +3.3V | -| 6 (흑) | GND | GND | - -CUAV provides a dedicated debugging cable, which can be connected to the `DSU7` port. -This splits out an FTDI cable for connecting the [PX4 System Console](../debug/system_console.md) to a computer USB port, and SWD pins used for SWD/JTAG debugging. -The provided debug cable does not connect to the SWD port `Vref` pin (1). - -![CUAV Debug cable](../../assets/flight_controller/cuav_v5_plus/cuav_v5_debug_cable.jpg) - -:::warning -The SWD Vref pin (1) uses 5V as Vref but the CPU is run at 3.3V! - -일부 JTAG 어댑터 (SEGGER J-Link)는 Vref 전압을 사용하여 SWD 라인의 전압을 설정합니다. -For direct connection to _Segger Jlink_ we recommended you use the 3.3 Volts from pin 4 of the connector marked `DSM`/`SBUS`/`RSSI` to provide `Vtref` to the JTAG (i.e. providing 3.3V and _NOT_ 5V). -::: - -## 지원 플랫폼 및 기체 - -Any multicopter / plane / 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). - -## 추가 정보 - -- [CUAV docs](https://doc.cuav.net/) -- [x7 schematic](https://github.com/cuav/hardware/tree/master/X7_Autopilot) +DOC REMOVED: 202603 +--> diff --git a/docs/ko/flight_controller/cubepilot_cube_orange.md b/docs/ko/flight_controller/cubepilot_cube_orange.md index 63cbac179e..f52e3220cd 100644 --- a/docs/ko/flight_controller/cubepilot_cube_orange.md +++ b/docs/ko/flight_controller/cubepilot_cube_orange.md @@ -10,7 +10,7 @@ The [Cube Orange](https://www.cubepilot.com/#/cube/features) flight controller i ![Cube Orange](../../assets/flight_controller/cube/orange/cube_orange_hero.jpg) 배선을 줄이고 신뢰성을 높이며 조립을 쉽게하기 위해 도메인별 캐리어 보드와 함께 사용하도록 설계되었습니다. -예를 들어, 상용 검사 기체 캐리어보드에는 보조 컴퓨터용 연결이 포함될 수 있는 반면, 레이서 용 캐리어보드는 기체 프레임을 형성하는 ESC를 포함할 수 있습니다. +For example, a carrier board for a commercial inspection vehicle might include connections for a companion computer, while a carrier board for a racer could include ESCs for the frame of the vehicle. The ADS-B carrier board includes a customized 1090MHz ADSB-In receiver from uAvionix. This provides attitude and location of commercial manned aircraft within the range of Cube. @@ -22,6 +22,10 @@ Cube에는 2 개의 IMU에 진동 차단이 포함되어 있으며, 세 번째 The manufacturer [Cube User Guide](https://docs.cubepilot.org/user-guides/autopilot/the-cube) contains detailed information, including an overview of the [Differences between Cube Colours](https://docs.cubepilot.org/user-guides/autopilot/the-cube/introduction/specifications). ::: +:::info +This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). +::: + ## 주요 특징 - 32bit STM32H753VI (32bit [ARM Cortex M7](https://en.wikipedia.org/wiki/ARM_Cortex-M#Cortex-M7), 400 MHz, Flash 2MB, RAM 1MB). @@ -36,9 +40,7 @@ The manufacturer [Cube User Guide](https://docs.cubepilot.org/user-guides/autopi - 고전력 멀티톤 피에조 오디오 표시기 - 장기간 고속 로깅용 microSD 카드 - - -## 구매처 +## Where to Buy {#store} - [Reseller list](https://www.cubepilot.com/#/reseller/list) @@ -232,7 +234,7 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target, open up the terminal and enter: -``` +```sh make cubepilot_cubeorange ``` diff --git a/docs/ko/flight_controller/cubepilot_cube_orangeplus.md b/docs/ko/flight_controller/cubepilot_cube_orangeplus.md index b85f689284..171c9f4aeb 100644 --- a/docs/ko/flight_controller/cubepilot_cube_orangeplus.md +++ b/docs/ko/flight_controller/cubepilot_cube_orangeplus.md @@ -6,12 +6,12 @@ Contact the [manufacturer](https://cubepilot.org/#/home) for hardware support or ::: The [Cube Orange+](https://www.cubepilot.com/#/cube/features) flight controller is a flexible autopilot intended primarily for manufacturers of commercial systems. -Cube Orange+ is similar to Cube Orange, but has a more powerful dual-core processor (STM32H757, and some different sensors parts. +Cube Orange+ is similar to Cube Orange, but has a more powerful dual-core processor (STM32H757), and some different sensor parts. ![Cube Orange](../../assets/flight_controller/cube/orangeplus/cubepilot_cube_orangeplus_standard_set.jpg) 배선을 줄이고 신뢰성을 높이며 조립을 쉽게하기 위해 도메인별 캐리어 보드와 함께 사용하도록 설계되었습니다. -예를 들어, 상용 검사 기체 캐리어보드에는 보조 컴퓨터용 연결이 포함될 수 있는 반면, 레이서 용 캐리어보드는 기체 프레임을 형성하는 ESC를 포함할 수 있습니다. +For example, a carrier board for a commercial inspection vehicle might include connections for a companion computer, while a carrier board for a racer could include ESCs for the frame of the vehicle. The ADS-B carrier board includes a customized 1090MHz ADSB-In receiver from uAvionix. This provides attitude and location of commercial manned aircraft within the range of Cube. @@ -23,6 +23,10 @@ Cube에는 2 개의 IMU에 진동 차단이 포함되어 있으며, 세 번째 The manufacturer [Cube User Guide](https://docs.cubepilot.org/user-guides/autopilot/the-cube) contains detailed information, including an overview of the [Differences between Cube Colours](https://docs.cubepilot.org/user-guides/autopilot/the-cube/introduction/specifications). ::: +:::info +This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). +::: + ## 주요 특징 - 32bit STM32H757ZI (32bit [ARM Cortex M7](https://en.wikipedia.org/wiki/ARM_Cortex-M#Cortex-M7), 400 MHz, Flash 2MB, RAM 1MB). @@ -37,9 +41,7 @@ The manufacturer [Cube User Guide](https://docs.cubepilot.org/user-guides/autopi - 고전력 멀티톤 피에조 오디오 표시기 - 장기간 고속 로깅용 microSD 카드 - - -## 구매처 +## Where to Buy {#store} - [Reseller list](https://www.cubepilot.com/#/reseller/list) @@ -232,7 +234,7 @@ The firmware for Orange+ will be present in releases from PX4 v1.14. To [build PX4](../dev_setup/building_px4.md) for this target, open up the terminal and enter: -``` +```sh make cubepilot_cubeorangeplus ``` diff --git a/docs/ko/flight_controller/cubepilot_cube_yellow.md b/docs/ko/flight_controller/cubepilot_cube_yellow.md index f4e050f757..ba02f82b42 100644 --- a/docs/ko/flight_controller/cubepilot_cube_yellow.md +++ b/docs/ko/flight_controller/cubepilot_cube_yellow.md @@ -10,7 +10,7 @@ The Cube Yellow flight controller is a flexible autopilot intended primarily for ![Cube Yellow](../../assets/flight_controller/cube/yellow/cube_yellow_hero.jpg) 배선을 줄이고 신뢰성을 높이며 조립을 쉽게하기 위해 도메인별 캐리어 보드와 함께 사용하도록 설계되었습니다. -예를 들어, 상용 검사 기체 캐리어보드에는 보조 컴퓨터용 연결이 포함될 수 있는 반면, 레이서 용 캐리어보드는 기체 프레임을 형성하는 ESC를 포함할 수 있습니다. +For example, a carrier board for a commercial inspection vehicle might include connections for a companion computer, while a carrier board for a racer could include ESCs for the frame of the vehicle. Cube에는 2 개의 IMU에 진동 차단이 포함되어 있으며, 세 번째 고정 IMU는 참조 백업용으로 사용됩니다. @@ -18,6 +18,10 @@ Cube에는 2 개의 IMU에 진동 차단이 포함되어 있으며, 세 번째 The manufacturer [Cube User Guide](https://docs.cubepilot.org/user-guides/autopilot/the-cube) contains detailed information, including an overview of the [Differences between Cube Colours](https://docs.cubepilot.org/user-guides/autopilot/the-cube/introduction/specifications). ::: +:::info +This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). +::: + ## 주요 특징 - 32bit STM32F777VI (32bit [ARM Cortex M7](https://en.wikipedia.org/wiki/ARM_Cortex-M#Cortex-M7), 400 MHz, Flash 2MB, RAM 512 KB). @@ -32,9 +36,7 @@ The manufacturer [Cube User Guide](https://docs.cubepilot.org/user-guides/autopi - 고전력 멀티톤 피에조 오디오 표시기 - 장기간 고속 로깅용 microSD 카드 - - -## 구매처 +## Where to Buy {#store} - [Reseller list](https://www.cubepilot.com/#/reseller/list) @@ -47,7 +49,7 @@ The manufacturer [Cube User Guide](https://docs.cubepilot.org/user-guides/autopi - **Processor:** - STM32F777VI (32bit [ARM Cortex M7](https://en.wikipedia.org/wiki/ARM_Cortex-M#Cortex-M7)) - 400 MHz - - 512 KB MB RAM + - 512 KB RAM - 2 MB Flash - **Failsafe co-processor:** - STM32F100 (32bit _ARM Cortex-M3_) @@ -130,7 +132,7 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make cubepilot_cubeyellow ``` diff --git a/docs/ko/flight_controller/dropix.md b/docs/ko/flight_controller/dropix.md deleted file mode 100644 index e400005541..0000000000 --- a/docs/ko/flight_controller/dropix.md +++ /dev/null @@ -1,7 +0,0 @@ -# DroPix Flight Controller (Discontinued) - - - -The Drotek® _DroPix autopilot_ is no longer available on the Drotek website, and is assumed to be discontinued. - -See [PX4 v1.13 Documentation > DroPix Flight Controller](https://docs.px4.io/v1.13/en/flight_controller/dropix.html) for documentation. diff --git a/docs/ko/flight_controller/durandal.md b/docs/ko/flight_controller/durandal.md index 6f2fc66681..ae2886940b 100644 --- a/docs/ko/flight_controller/durandal.md +++ b/docs/ko/flight_controller/durandal.md @@ -19,7 +19,7 @@ Holybro가 설계하고 개발하였습니다. - 내부 진동 차단 시스템. - 듀얼 고성능, 저잡음 IMU 온보드는 까다로운 안정화 애플리케이션을 위해 설계되었습니다. -A summary of the key features, [assembly](../assembly/quick_start_durandal.md), and [purchase](#purchase) links can be found below. +A summary of the key features, [assembly](../assembly/quick_start_durandal.md), and [purchase](#store) links can be found below. :::info This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). @@ -86,9 +86,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo For more information see: [Durandal Technical Data Sheet](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Durandal_technical_data_sheet_90f8875d-8035-4632-a936-a0d178062077.pdf). - - -## 구매처 +## Where to Buy {#store} Order from [Holybro](https://holybro.com/products/durandal). @@ -162,7 +160,7 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make holybro_durandal-v1_default ``` diff --git a/docs/ko/flight_controller/gearup_airbrainh743.md b/docs/ko/flight_controller/gearup_airbrainh743.md index a1fcf95a4c..fbcdf35dea 100644 --- a/docs/ko/flight_controller/gearup_airbrainh743.md +++ b/docs/ko/flight_controller/gearup_airbrainh743.md @@ -74,7 +74,7 @@ Download the [gearup_airbrainh743_bootloader.bin](https://github.com/PX4/PX4-Aut To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make gearup_airbrainh743_default ``` @@ -84,13 +84,25 @@ Firmware can be installed in any of the normal ways: - Build and upload the source: - ``` + ```sh make gearup_airbrainh743_default upload ``` - [Load the firmware](../config/firmware.md) using _QGroundControl_. 미리 빌드된 펌웨어나 사용자 지정 펌웨어를 사용할 수 있습니다. +### Flash Storage Troubleshooting + +The AirBrainH743 uses a 128MB NAND flash (W25N) with a littlefs filesystem for [logging](../dev_log/logging.md). +If the flash filesystem becomes corrupted, you can reformat it using the [System Console](../debug/system_console.md): + +```sh +mklittlefs /dev/mtd0 /fs/flash +``` + +This will erase all data on the flash and create a fresh littlefs filesystem. +The filesystem is immediately available after the command completes. + ### 시스템 콘솔 UART1 (ttyS0) is configured for use as the [System Console](../debug/system_console.md). diff --git a/docs/ko/flight_controller/holybro_pix32.md b/docs/ko/flight_controller/holybro_pix32.md index ab57a27967..7ef63fc2af 100644 --- a/docs/ko/flight_controller/holybro_pix32.md +++ b/docs/ko/flight_controller/holybro_pix32.md @@ -1,106 +1,8 @@ + + + +--> diff --git a/docs/ko/flight_controller/holybro_pix32_v5.md b/docs/ko/flight_controller/holybro_pix32_v5.md index 49f4ffaecd..cabfb262f7 100644 --- a/docs/ko/flight_controller/holybro_pix32_v5.md +++ b/docs/ko/flight_controller/holybro_pix32_v5.md @@ -71,7 +71,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo Additional information can be found in the [Pix32 V5 Technical Data Sheet](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_PIX32-V5_technical_data_sheet_v1.1.pdf). -## 구매처 +## Where to Buy {#store} Order from [Holybro website](https://holybro.com/products/pix32-v5). @@ -125,7 +125,7 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make holybro_pix32v5_default ``` diff --git a/docs/ko/flight_controller/holybro_pix32_v6.md b/docs/ko/flight_controller/holybro_pix32_v6.md index f91f924f4a..eaaabb148c 100644 --- a/docs/ko/flight_controller/holybro_pix32_v6.md +++ b/docs/ko/flight_controller/holybro_pix32_v6.md @@ -12,7 +12,7 @@ It is equipped with a high performance H7 Processor, and comes with IMU redundan @@ -93,7 +93,7 @@ This flight controller is perfect for people that is looking for a affordable an - 기타 특성: - Operating & storage temperature: -40 ~ 85°c -## 구매처 +## Where to Buy {#store} Order from [Holybro](https://holybro.com/products/pix32-v6). @@ -156,13 +156,11 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make px4_fmu-v6c_default ``` - - -## 디버그 포트 +## Debug Port {#debug_port} The [PX4 System Console](../debug/system_console.md) and [SWD interface](../debug/swd_debug.md) run on the **FMU Debug** port. diff --git a/docs/ko/flight_controller/kakutef7.md b/docs/ko/flight_controller/kakutef7.md index 09871f8b6b..72e2f77c50 100644 --- a/docs/ko/flight_controller/kakutef7.md +++ b/docs/ko/flight_controller/kakutef7.md @@ -1,142 +1,7 @@ + + + - -## 디버그 포트 - -### 시스템 콘솔 - -UART3 RX and TX are configured for use as the [System Console](../debug/system_console.md). - -### SWD - -The [SWD interface](../debug/swd_debug.md) (JTAG) pins are: - -- `SWCLK`: Test Point 2 (Pin 72 on the CPU) -- `SWDIO`: Test Point 3 (Pin 76 on CPU) -- `GND`: As marked on board -- `VDD_3V3`: As marked on board - -These are shown below. - -![SWD Pins on Kakute F7 - CLK SWO](../../assets/flight_controller/kakutef7/debug_swd_port.jpg) ![SWD Pins on Kakute F7: GND and VDD_3V3](../../assets/flight_controller/kakutef7/debug_swd_port_gnd_vcc3_3.jpg) +DOC REMOVED: 202603 +--> diff --git a/docs/ko/flight_controller/kakuteh7-wing.md b/docs/ko/flight_controller/kakuteh7-wing.md index 52868213ba..e2ba88998b 100644 --- a/docs/ko/flight_controller/kakuteh7-wing.md +++ b/docs/ko/flight_controller/kakuteh7-wing.md @@ -13,7 +13,7 @@ The [Holybro Kakute H743 Wing](https://holybro.com/products/kakute-h743-wing) is This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). ::: -## 구매처 +## Where to Buy {#store} The board can be bought from one of the following shops (for example): @@ -43,7 +43,7 @@ Download the [holybro_kakuteh7-wing.hex](https://github.com/PX4/PX4-Autopilot/ra To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make holybro_kakuteh7-wing_default ``` @@ -58,7 +58,7 @@ Firmware can be manually installed in any of the normal ways: - Build and upload the source: - ``` + ```sh make holybro_kakuteh7-wing_default upload ``` diff --git a/docs/ko/flight_controller/kakuteh7.md b/docs/ko/flight_controller/kakuteh7.md index 8df0f06362..fbaa5157e9 100644 --- a/docs/ko/flight_controller/kakuteh7.md +++ b/docs/ko/flight_controller/kakuteh7.md @@ -36,7 +36,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo - Dimensions: 35x35mm - Weight: 8g -## 구매처 +## Where to Buy {#store} The board can be bought from one of the following shops (for example): @@ -102,7 +102,7 @@ make holybro_kakuteh7_default 미리 빌드된 펌웨어나 사용자 지정 펌웨어를 사용할 수 있습니다. :::info -If you are loading the pre-built firmware via QGroundcontrol, you must use QGC Daily or QGC version newer than 4.1.7. +If you are loading the pre-built firmware via QGroundControl, you must use QGC Daily or QGC version newer than 4.1.7. ::: ## PX4 설정 diff --git a/docs/ko/flight_controller/kakuteh7mini.md b/docs/ko/flight_controller/kakuteh7mini.md index 6c6ee145e3..b776c257ea 100644 --- a/docs/ko/flight_controller/kakuteh7mini.md +++ b/docs/ko/flight_controller/kakuteh7mini.md @@ -40,7 +40,7 @@ PX4 runs on the H7 mini v1.3 and later. - Dimensions: 30x31x6mm - Weight: 5.5g -## 구매처 +## Where to Buy {#store} The board can be bought from one of the following shops (for example): @@ -86,14 +86,14 @@ Download the [holybro_kakuteh7mini_bootloader.hex](https://github.com/PX4/PX4-Au To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make holybro_kakuteh7mini_default ``` ## 펌웨어 설치 :::info -If you are loading the pre-built firmware via QGroundcontrol, you must use QGC Daily or QGC version newer than 4.1.7. +If you are loading the pre-built firmware via QGroundControl, you must use QGC Daily or QGC version newer than 4.1.7. Prior to that release you will need to manually build and install the firmware. ::: @@ -101,7 +101,7 @@ Firmware can be manually installed in any of the normal ways: - Build and upload the source: - ``` + ```sh make holybro_kakuteh7mini_default upload ``` diff --git a/docs/ko/flight_controller/kakuteh7v2.md b/docs/ko/flight_controller/kakuteh7v2.md index bb49e7a9be..e452813056 100644 --- a/docs/ko/flight_controller/kakuteh7v2.md +++ b/docs/ko/flight_controller/kakuteh7v2.md @@ -36,7 +36,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo - Dimensions: 35x35mm - Weight: 8g -## 구매처 +## Where to Buy {#store} The board can be bought from one of the following shops (for example): @@ -83,14 +83,14 @@ Download the [holybro_kakuteh7v2_bootloader.hex](https://github.com/PX4/PX4-Auto To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make holybro_kakuteh7v2_default ``` ## 펌웨어 설치 :::info -KakuteH7v2 is supported with PX4 master & PX4 v1.14 or newer. If you are loading the pre-built firmware via QGroundcontrol, you must use QGC Daily or QGC version newer than 4.1.7. +KakuteH7v2 is supported with PX4 master & PX4 v1.14 or newer. If you are loading the pre-built firmware via QGroundControl, you must use QGC Daily or QGC version newer than 4.1.7. Prior to that release you will need to manually build and install the firmware. ::: @@ -98,7 +98,7 @@ Firmware can be manually installed in any of the normal ways: - Build and upload the source: - ``` + ```sh make holybro_kakuteh7v2_default upload ``` diff --git a/docs/ko/flight_controller/micoair743-lite.md b/docs/ko/flight_controller/micoair743-lite.md index 2bf4b980a0..4657696149 100644 --- a/docs/ko/flight_controller/micoair743-lite.md +++ b/docs/ko/flight_controller/micoair743-lite.md @@ -12,7 +12,7 @@ MicoAir743-Lite is an ultra-high performance H743 flight controller with an unbe ![MicoAir743-Lite Front View](../../assets/flight_controller/micoair743_lite/front_view.png) Equipped with a high-performance H7 processor, the MicoAir743-Lite features a compact form factor with SH1.0 connectors (which are more suitable than Pixhawk-standard GH1.25 for this board size). -When paired with with Bluetooth telemetry, the board can be debugged with a phone or PC. +When paired with Bluetooth telemetry, the board can be debugged with a phone or PC. :::info This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). @@ -67,7 +67,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo ![MicoAir743-Lite Size](../../assets/flight_controller/micoair743_lite/size.png) -## 구매처 +## Where to Buy {#store} Order from [MicoAir Tech Store](https://store.micoair.com/product/micoair743-lite/). @@ -85,12 +85,12 @@ Pinouts definition can be found in the [MicoAir743-Lite_pinout.xlsx](https://raw | UART4 | /dev/ttyS3 | TELEM2 | | UART5 | /dev/ttyS4 | TELEM3 | | USART6 | /dev/ttyS5 | RC | -| UART7 | /dev/ttyS6 | URT6 | +| UART7 | /dev/ttyS6 | UART6 | | UART8 | /dev/ttyS7 | TELEM4 | ## Interfaces Diagram -:::note +:::info All the connectors used on the board are SH1.0 ::: diff --git a/docs/ko/flight_controller/mindpx.md b/docs/ko/flight_controller/mindpx.md index e3bf186c00..4381fca415 100644 --- a/docs/ko/flight_controller/mindpx.md +++ b/docs/ko/flight_controller/mindpx.md @@ -19,7 +19,7 @@ AirMind® [MindPX](http://mindpx.net) 시리즈는 Pixhawk&re 주요 하드웨어 문서는 [여기](http://mindpx.net/assets/accessories/Specification9.18_3_pdf.pdf)를 참고하십시오. ::: -MindPX는 Pixhawk®에서 분기된 차세대 자동조종장치로, 회로도와 구조가 수정되었으며, 무인기체를 보다 스마트하고 사용하기 용이하도록 새로운 기능으로 더욱 강화되었습니다. +MindPX is a new generation autopilot system branched from Pixhawk®, has been revised in schematic and structure, and has been further enhanced with new features to make unmanned vehicle more smart and more friendly to use. MindPX는 총 PWM 출력 채널을 16 (8개의 주출력 + 8 aux 출력)으로 증가시킵니다. MindPX는보다 복잡한 VTOL 구성과보다 정밀한 제어를 지원할 수 있습니다. @@ -86,7 +86,7 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make airmind_mindpx-v2_default ``` @@ -96,7 +96,7 @@ MindPX에는 보드에는 USB-TO-UART 브리지 IC가 있습니다. 마이크로 USB-USB A형 케이블로 연결합니다. 마이크로 USB 끝을 MindPX의 'OBC'포트에 연결하고, USB 유형 A 끝을 보조 컴퓨터에 연결합니다. -그리고, 최대 BAUD 속도는 px4 제품군과 동일하며 최대 921600입니다. +And the max BAUD rate is the same as for the PX4 family, which is up to 921600. ## 사용자 가이드 @@ -104,7 +104,7 @@ MindPX에는 보드에는 USB-TO-UART 브리지 IC가 있습니다. 사용자 가이드는 [여기](http://mindpx.net/assets/accessories/UserGuide9.18_2_pdf.pdf)를 참고하십시오. ::: -## 구매처 +## Where to Buy {#store} MindRacer is available at [AirMind Store](https://airmind.mindpx.net/catalog). Amazon® 또는 eBay®에서도 MindRacer를 구매할 수 있습니다. diff --git a/docs/ko/flight_controller/mindracer.md b/docs/ko/flight_controller/mindracer.md index a1b4b9d547..c73c84aa1a 100644 --- a/docs/ko/flight_controller/mindracer.md +++ b/docs/ko/flight_controller/mindracer.md @@ -66,7 +66,7 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make airmind_mindpx-v2_default ``` @@ -79,7 +79,7 @@ MindRacer에는 Adapt IO 보드가 부착되어 있습니다. MindRacer에는 UART-USB 변환기가 내장되어 있습니다. 보조 컴퓨터를 연결하려면 인터페이스 보드에 MindRacer를 적재후, 보조 컴퓨터를 인터페이스 보드의 USB 포트에 연결합니다. -그리고, 최대 BAUD 속도는 px4 제품군과 동일하며 최대 921600입니다. +And the max BAUD rate is the same as for the PX4 family, which is up to 921600. ### 사용자 가이드 @@ -87,7 +87,7 @@ MindRacer에는 UART-USB 변환기가 내장되어 있습니다. The user guide is [here](http://mindpx.net/assets/accessories/mindracer_user_guide_v1.2.pdf) ::: -## 구매처 +## Where to Buy {#store} MindRacer is available at [AirMind Store](https://airmind.mindpx.net/catalog). Amazon® 또는 eBay®에서도 MindRacer를 구매할 수 있습니다. diff --git a/docs/ko/flight_controller/modalai_fc_v1.md b/docs/ko/flight_controller/modalai_fc_v1.md index c34ccd0469..c7729f854a 100644 --- a/docs/ko/flight_controller/modalai_fc_v1.md +++ b/docs/ko/flight_controller/modalai_fc_v1.md @@ -1,146 +1,7 @@ -# ModalAI Flight Core v1 + - + - -[stm32f765ii]: https://www.st.com/en/microcontrollers-microprocessors/stm32f765ii.html -[bmp388]: https://www.adafruit.com/product/3966 -[icm-20602]: https://invensense.tdk.com/products/motion-tracking/6-axis/icm-20602/ -[bmi088]: https://www.bosch-sensortec.com/products/motion-sensors/imus/bmi088/ -[px4]: https://github.com/PX4/PX4-Autopilot/tree/main/boards/modalai/fc-v1 -[a71ch]: https://www.nxp.com/products/security-and-authentication/authentication/plug-and-trust-the-fast-easy-way-to-deploy-secure-iot-connections:A71CH - -## 크기 - -![FlightCoreV1Dimensions](../../assets/flight_controller/modalai/fc_v1/dimensions.png) - -## PX4 Firmware Compatibility - -_Flight Core v1_ is fully compatible with the official PX4 Firmware from PX4 v1.11. - -ModalAI maintains a [branched PX4 version](https://github.com/modalai/px4-firmware/tree/modalai-1.11) for PX4 v1.11. -This includes UART ESC support and improvements in VIO and VOA that are planned to be upstreamed. - -More information about the firmware can be found [here](https://docs.modalai.com/flight-core-firmware/). - -## QGroundControl 지원 - -아래 다이어그램은 PX4 v1.11(및 ModalAI가 유지하는 PX4 v1.10 브랜치)부터 ROTATION_NONE 권장 방향을 나타냅니다. - -## 구매처 - -- No longer available - -## 빠른 시작 - -### 방향 - -The diagram below shows the recommended orientation, which corresponds to `ROTATION_NONE` starting with PX4 v1.11. - -![FlightCoreV1Orientation](../../assets/flight_controller/modalai/fc_v1/orientation.png) - -### 커넥터 - -Detailed information about the pinouts can be found [here](https://docs.modalai.com/flight-core-datasheet-connectors). - -![FlightCoreV1Top](../../assets/flight_controller/modalai/fc_v1/top.png) - -| 커넥터 | 요약 | -| --- | --------------------------------------------------------- | -| J1 | VOXL 통신 인터페이스 커넥터 (TELEM2) | -| J2 | 프로그래밍 및 디버그 커넥터 | -| J3 | USB 커넥터 | -| J4 | UART2, UART ESC (TELEM3) | -| J5 | 텔레메트리 커넥터 (TELEM1) | -| J6 | VOXL - 전원 관리 입력/확장 | -| J7 | 8 채널 PWM 출력 커넥터 | -| J8 | CAN 버스 커넥터 | -| J9 | PPM RC 입력 | -| J10 | External GPS & Magnetometer Connector | -| J12 | RC 입력, Spektrum/SBus/UART 커넥터 | -| J13 | I2C 디스플레이(예비 센서 커넥터)/안전 버튼 입력 | - -![FlightCoreV1Bottom](../../assets/flight_controller/modalai/fc_v1/bottom.png) - -### 사용자 가이드 - -The full user guide is available [here](https://docs.modalai.com/flight-core-manual/). - -### 빌드 방법 - -To [build PX4](../dev_setup/building_px4.md) for this target: - -``` -make modalai_fc-v1 -``` - -## 시리얼 포트 매핑 - -| UART | 장치 | 포트 | -| ------ | ---------- | ------------------------------------------ | -| USART1 | /dev/ttyS0 | GPS1 (J10) | -| USART2 | /dev/ttyS1 | TELEM3 (J4) | -| USART3 | /dev/ttyS2 | 디버깅 콘솔(J2) | -| UART4 | /dev/ttyS3 | 확장 UART (J6) | -| UART5 | /dev/ttyS4 | TELEM2, 기본 VOXL 통신 (J1) | -| USART6 | /dev/ttyS5 | RC (J12) | -| UART7 | /dev/ttyS6 | TELEM1 (J5) | -| UART8 | /dev/ttyS7 | 해당없음 | - - - -## 지원 - -Please visit the [ModalAI Forum](https://forum.modalai.com/category/10/flight-core) for more information. +DOC REMOVED: 202603 +--> diff --git a/docs/ko/flight_controller/modalai_voxl_2.md b/docs/ko/flight_controller/modalai_voxl_2.md index 51a37f1928..2915d8f092 100644 --- a/docs/ko/flight_controller/modalai_voxl_2.md +++ b/docs/ko/flight_controller/modalai_voxl_2.md @@ -5,7 +5,7 @@ PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://forum.modalai.com/) for hardware support or compliance issues. ::: -The ModalAI [VOXL 2](https://modalai.com/voxl-2) ([Datasheet](https://docs.modalai.com/voxl2-datasheets/)) is ModalAI’s next-gen autonomous computing platform built around the Qualcomm QRB5165 processor. VOXL 2 boasts 8 cores, integrated PX4, seven camera concurrency, advanced onboard AI up to 15+ TOPS, and 5G connectivity. At 16 grams, VOXL 2 is the future of fully autonomous and connected drones! +The ModalAI [VOXL 2](https://www.modalai.com/products/voxl-2) ([Datasheet](https://docs.modalai.com/voxl2-datasheets/)) is ModalAI's next-gen autonomous computing platform built around the Qualcomm QRB5165 processor. VOXL 2 boasts 8 cores, integrated PX4, seven camera concurrency, advanced onboard AI up to 15+ TOPS, and 5G connectivity. At 16 grams, VOXL 2 is the future of fully autonomous and connected drones! ![VOXL-2](../../assets/flight_controller/modalai/voxl_2/voxl-2-hero.jpg) @@ -62,7 +62,7 @@ ModalAI is actively maintaining a [branched PX4 version](https://github.com/moda As VOXL 2 runs Ubuntu, the production releases of PX4 for VOXL 2 are distributed through [apt package management](https://docs.modalai.com/configure-pkg-manager/) and the [VOXL SDK](https://docs.modalai.com/voxl-sdk/). -More information about the firmware can be found [here](https://docs.modalai.com/voxl2-px4-developer-guide/). +More information about the firmware can be found [here](https://docs.modalai.com/voxl-px4/). ### main branch @@ -70,7 +70,7 @@ PX4 mainline supports VOXL 2 (board documentation [here](https://github.com/PX4/ ## QGroundControl 지원 -아래 다이어그램은 PX4 v1.11(및 ModalAI가 유지하는 PX4 v1.10 브랜치)부터 ROTATION_NONE 권장 방향을 나타냅니다. +This board is supported in QGroundControl 4.0 and later. ## 구매처 @@ -78,17 +78,16 @@ PX4 mainline supports VOXL 2 (board documentation [here](https://github.com/PX4/ - [Starling 2 MAX](https://www.modalai.com/products/starling-2-max) - [Sentinel Development Drone powered by VOXL 2](https://www.modalai.com/pages/sentinel) - [Demo Video](https://www.youtube.com/watch?v=hMhQgWPLGXo) -- [VOXL 2 Flight Deck, ready to mount, tune and fly](https://www.modalai.com/collections/ready-to-mount/products/voxl-2-flight-deck) - [VOXL 2 Development Kits](https://www.modalai.com/products/voxl-2) - [Demo Video](https://www.youtube.com/watch?v=aVHBWbwp488) ## 빠른 시작 -Quickstarts from the vendor are located [here](https://docs.modalai.com/voxl2-quickstarts/). +Quickstarts from the vendor are located [here](https://docs.modalai.com/voxl-2-hardware-quickstart/). ### VOXL SDK -VOXL SDK (Software Development Kit) consists of the open source [voxl-px4](https://docs.modalai.com/voxl-px4/), [core libraries](https://docs.modalai.com/core-libs/), [services](https://docs.modalai.com/mpa-services/), [tools](https://docs.modalai.com/inspect-tools/), [utilities](https://docs.modalai.com/sdk-utilities/), and [build environments](https://docs.modalai.com/build-environments/) that ModalAI provide to accelerate the use and development of VOXL compute boards and accessories. +VOXL SDK (Software Development Kit) consists of the open source [voxl-px4](https://docs.modalai.com/voxl-px4/), [core libraries](https://docs.modalai.com/core-libs/), [services](https://docs.modalai.com/mpa-services/), [tools](https://docs.modalai.com/inspect-tools/), and [build environments](https://docs.modalai.com/build-environments/) that ModalAI provide to accelerate the use and development of VOXL compute boards and accessories. VOXL SDK runs on VOXL, VOXL 2 and RB5 Flight! @@ -123,11 +122,11 @@ The PX4 user guide for VOXL 2 is available [here](https://docs.modalai.com/voxl- ### Developer Guide -The PX4 developer guide for VOXL 2 is available [here](https://docs.modalai.com/voxl-px4-developer-guide/). +The PX4 developer guide for VOXL 2 is available [here](https://docs.modalai.com/voxl-px4/). ### 빌드 방법 -See the [VOXL PX4 Build Guide](https://docs.modalai.com/voxl2-px4-build-guide/) on how to build. +See the [VOXL PX4 Build Guide](https://docs.modalai.com/voxl-px4-dev-build-guide/) on how to build. ## 지원 diff --git a/docs/ko/flight_controller/modalai_voxl_flight.md b/docs/ko/flight_controller/modalai_voxl_flight.md index 848dd9fd19..7f5ee9210d 100644 --- a/docs/ko/flight_controller/modalai_voxl_flight.md +++ b/docs/ko/flight_controller/modalai_voxl_flight.md @@ -1,202 +1,7 @@ -# ModalAI VOXL Flight + - + - -[stm32f765ii]: https://www.st.com/en/microcontrollers-microprocessors/stm32f765ii.html -[px4]: https://github.com/PX4/PX4-Autopilot/tree/main/boards/modalai/fc-v1 -[icm-20602]: https://invensense.tdk.com/products/motion-tracking/6-axis/icm-20602/ -[bmi088]: https://www.bosch-sensortec.com/products/motion-sensors/imus/bmi088/ -[bmp388]: https://www.adafruit.com/product/3966 -[a71ch]: https://www.nxp.com/products/security-and-authentication/authentication/plug-and-trust-the-fast-easy-way-to-deploy-secure-iot-connections:A71CH - -:::info -More detailed hardware documentation can be found [here](https://docs.modalai.com/voxl-flight-datasheet/). -::: - -## 크기 - -![FlightCoreV1Dimensions](../../assets/flight_controller/modalai/voxl_flight/voxl-flight-dimensions.jpg) - -[3D STEP File](https://storage.googleapis.com/modalai_public/modal_drawings/M0019_VOXL-Flight.zip) - -## PX4 Firmware Compatibility - -_VOXL Flight_ is fully compatible with the official PX4 Firmware from PX4 v1.11. - -ModalAI maintains a [branched PX4 version](https://github.com/modalai/px4-firmware/tree/modalai-1.11) for PX4 v1.11. -This includes UART ESC support and improvements in VIO and VOA that are planned to be upstreamed. - -More information about the firmware can be found [here](https://docs.modalai.com/flight-core-firmware/). - -## QGroundControl 지원 - -아래 다이어그램은 PX4 v1.11(및 ModalAI가 유지하는 PX4 v1.10 브랜치)부터 ROTATION_NONE 권장 방향을 나타냅니다. - -## 구매처 - -No longer available. - -## 빠른 시작 - -A quickstart from the vendor is located [here](https://docs.modalai.com/voxl-flight-quickstart/). - -### voxl-vision-px4 - -The VOXL Flight runs [voxl-vision-px4](https://gitlab.com/voxl-public/modal-pipe-architecture/voxl-vision-px4) on the companion computer portion of the hardware serving as a sort of MAVLink proxy. -For details, the source code is available [here](https://gitlab.com/voxl-public/modal-pipe-architecture/voxl-vision-px4) - -### 커넥터 - -Detailed information about the pinouts can be found [here](https://docs.modalai.com/voxl-flight-datasheet-connectors/). - -#### 상단 - -![VOXLFlightTop](../../assets/flight_controller/modalai/voxl_flight/voxl-flight-top.jpg) - -_Note: 1000 Series connectors accessible from the STM32/PX4_ - -| 커넥터 | 요약 | 사용처 | -| ----- | ------------------------------------------------------------------- | ---------------------------------------------------- | -| J2 | 4k 이미지 센서 (CSI0) 고용 | Snapdragon - Linux | -| J3 | 스테레오 이미지 센서 (CSI1) | Snapdragon - Linux | -| J6 | 냉각 팬 커넥터 | Snapdragon - Linux | -| J7 | BLSP6 (GPIO) and BLSP9 (UART) | Snapdragon - Linux | -| J13 | 확장 B2B | Snapdragon - Linux | -| J14 | 통합 GNSS 안테나 연결 | Snapdragon - Linux | -| J1001 | 프로그래밍 및 디버그/UART3 | STM32 - PX4 | -| J1002 | UART ESC, UART2/TELEM3 | STM32 - PX4 | -| J1003 | PPM RC 입력 | STM32 - PX4 | -| J1004 | RC 입력, Spektrum/SBus/UART6 | STM32 - PX4 | -| J1006 | USB 2.0 커넥터(PX4/QGroundControl) | STM32 - PX4 | -| J1007 | 8 채널 PWM/DShot 출력 | STM32 - PX4 | -| J1008 | CAN 버스 | STM32 - PX4 | -| J1009 | I2C3, UART4 | STM32 - PX4 | -| J1010 | 텔레메트리 (TELEM1) | STM32 - PX4 | -| J1011 | I2C2, 안전 버튼 입력 | STM32 - PX4 | -| J1012 | External GPS & Mag, UART1, I2C1 | STM32 - PX4 | -| J1013 | 전원 입력, I2C3 | STM32 - PX4 (powers whole system) | - -#### 하단 - -![VOXLFlightBottom](../../assets/flight_controller/modalai/voxl_flight/voxl-flight-bottom.jpg) - -_Note: 1000 Series connectors accessible from the STM32/PX4_ - -| 커넥터 | 요약 | 사용처 | -| ------------ | -------------------------------------- | --------------------------- | -| J4 | 추적/광류 이미지 센서 (CSI2) | Snapdragon - Linux | -| J8 | USB 3.0 OTG | Snapdragon - Linux, **adb** | -| J10 | BLSP7 UART 및 I2C 오프보드 | Snapdragon - Linux | -| J11 | BLSP12 UART 및 I2C 오프보드 | Snapdragon - Linux | -| VOXL microSD | | Snapdragon - Linux | -| PX4 microSD | 32Gb Max | STM32 - PX4 | -| Wi-Fi 안테나 | 포함됨. | Snapdragon - Linux | - -### 사용자 가이드 - -The full user guide is available [here](https://docs.modalai.com/voxl-flight-quickstart). - -### 빌드 방법 - -To [build PX4](../dev_setup/building_px4.md) for this target: - -``` -make modalai_fc-v1 -``` - -## 시리얼 포트 매핑 - -_Note: mappings shown are for the PX4 controlled interfaces only_ - -| UART | 장치 | 포트 | -| ------ | ---------- | --------------------------------- | -| USART1 | /dev/ttyS0 | GPS1 (J1012) | -| USART2 | /dev/ttyS1 | TELEM3 (J1002) | -| USART3 | /dev/ttyS2 | 디버그 콘솔(J1001) | -| UART4 | /dev/ttyS3 | 확장 UART (J6) | -| UART5 | /dev/ttyS4 | PX4와 보조 컴퓨터간의 UART | -| USART6 | /dev/ttyS5 | RC (J1004) | -| UART7 | /dev/ttyS6 | TELEM1 (J1010) | -| UART8 | /dev/ttyS7 | 해당없음 | - - - -## 지원 - -Please visit the [ModalAI Forum](https://forum.modalai.com/category/8/voxl-flight) for more information. +DOC REMOVED: 202603 +--> diff --git a/docs/ko/flight_controller/mro_control_zero_f7.md b/docs/ko/flight_controller/mro_control_zero_f7.md index 384d719929..c0d537ac5e 100644 --- a/docs/ko/flight_controller/mro_control_zero_f7.md +++ b/docs/ko/flight_controller/mro_control_zero_f7.md @@ -30,7 +30,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo - [Bosch BMI088](https://www.bosch-sensortec.com/products/motion-sensors/imus/bmi088/) 3-axis accelerometer/gyroscope (internally vibration dampened) - [Invensense ICM-20602](https://invensense.tdk.com/products/motion-tracking/6-axis/icm-20602/) 3-axis accelerometer/gyroscope - [Invensense ICM-20948](https://invensense.tdk.com/products/motion-tracking/9-axis/icm-20948/) 3-axis accelerometer/gyroscope/magnetometer - - [Infineon DPS310 barometer](https://www.infineon.com/assets/row/public/documents/24/49/infineon-dps310-datasheet-en.pdf) - [Discontinued](https://www.infineon.com/part/DPS310) (So smooth and NO more light sensitivity) + - Infineon DPS310 barometer - [Discontinued](https://www.infineon.com/products/sensor/pressure-sensors/pressure-sensors-for-iot) (So smooth and NO more light sensitivity) - 인터페이스: - 6x UART(총 직렬 포트), 3x(HW 흐름 제어 포함), 1x FRSky Telemetry(D 또는 X 유형), 1x 콘솔 및 1x GPS + I2C @@ -56,7 +56,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo - 전원시스템 - 초저잡음 LDO 전압 조정기 3개 -## 구매처 +## Where to Buy {#store} - [mRo Control Zero](https://store.mrobotics.io/mRo-Control-Zero-F7-p/mro-ctrl-zero-f7.htm) @@ -69,22 +69,22 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make mro_ctrl-zero-f7 ``` -## 디버그 포트 +## Debug Ports {#debug_port} ### 콘솔 포트 The [PX4 System Console](../debug/system_console.md) runs on `USART7` using the pins listed below. This is a standard serial pinout, designed to connect to a [3.3V FTDI](https://www.digikey.com/en/products/detail/TTL-232R-3V3/768-1015-ND/1836393) cable (5V tolerant). -\| mRo control zero f7 | | FTDI | -\| ------------------- | ----------- | ---- | ---------------- | -\| 17 | USART7 Tx | 5 | FTDI RX (yellow) | -\| 19 | USART7 Rx | 4 | FTDI TX (orange) | -\| 6 | USART21 GND | 1 | FTDI GND (black) | +| mRo control zero f7 | | FTDI | | +| ------------------- | ----------- | ---- | ------------------------------- | +| 17 | USART7 Tx | 5 | FTDI RX (황) | +| 19 | USART7 Rx | 4 | FTDI TX (적황) | +| 6 | USART21 GND | 1 | FTDI GND (흑) | ### SWD 포트 diff --git a/docs/ko/flight_controller/mro_pixhawk.md b/docs/ko/flight_controller/mro_pixhawk.md index ecfc33c9d2..a635998340 100644 --- a/docs/ko/flight_controller/mro_pixhawk.md +++ b/docs/ko/flight_controller/mro_pixhawk.md @@ -72,17 +72,178 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make px4_fmu-v3_default ``` ## 디버그 포트 -See [3DR Pixhawk 1 > Debug Ports](../flight_controller/pixhawk.md#debug-ports) +### 콘솔 포트 + +The [PX4 System Console](../debug/system_console.md) runs on the port labeled [SERIAL4/5](#serial-4-5-port). + +:::tip +A convenient way to connect to the console is to use a [Zubax BugFace BF1](https://github.com/Zubax/bugface_bf1), as it comes with connectors that can be used with several different Pixhawk devices. +Simply connect the 6-pos DF13 1:1 cable on the [Zubax BugFace BF1](https://github.com/Zubax/bugface_bf1) to the Pixhawk `SERIAL4/5` port. + +![Zubax BugFace BF1](../../assets/flight_controller/mro/dronecode_probe.jpg) +::: + +The pinout is standard serial pinout, designed to connect to a [3.3V FTDI](https://www.digikey.com/en/products/detail/TTL-232R-3V3/768-1015-ND/1836393) cable (5V tolerant). + +| 3DR Pixhawk 1 | | FTDI | | +| ------------- | -------------------------- | ---- | ------------------------------- | +| 1 | +5V (적) | | N/C | +| 2 | S4 Tx | | N/C | +| 3 | S4 Rx | | N/C | +| 4 | S5 Tx | 5 | FTDI RX (황) | +| 5 | S5 Rx | 4 | FTDI TX (적황) | +| 6 | GND | 1 | FTDI GND (흑) | + +The wiring for an FTDI cable to a 6-pos DF13 1:1 connector is shown in the figure below. + +![Console Connector](../../assets/flight_controller/mro/console_connector.jpg) + +The complete wiring is shown below. + +![Console Debug](../../assets/flight_controller/mro/console_debug.jpg) + +:::info +For information on how to _use_ the console see: [System Console](../debug/system_console.md). +::: + +### SWD 포트 + +The [SWD](../debug/swd_debug.md) (JTAG) ports are hidden under the cover (which must be removed for hardware debugging). +There are separate ports for FMU and IO, as highlighted below. + +![Pixhawk SWD](../../assets/flight_controller/mro/pixhawk_swd.jpg) + +The ports are ARM 10-pin JTAG connectors, which you will probably have to solder. +The pinout for the ports is shown below (the square markers in the corners above indicates pin 1). + +![ARM 10-Pin connector pinout](../../assets/flight_controller/mro/arm_10pin_jtag_connector_pinout.jpg) + +:::info +All Pixhawk FMUv2 boards have a similar SWD port. +::: ## 핀배열 -See [3DR Pixhawk 1 > Pinouts](../flight_controller/pixhawk.md#pinouts) +#### TELEM1, TELEM2 포트 + +| 핀 | 신호 | 전압 | +| ------------------------- | --------------------------- | --------------------- | +| 1(red) | VCC | +5V | +| 2 (흑) | TX (출력) | +3.3V | +| 3 (흑) | RX (입력) | +3.3V | +| 4 (흑) | CTS (입력) | +3.3V | +| 5 (흑) | RTS (출력) | +3.3V | +| 6 (흑) | GND | GND | + +#### GPS 포트 + +| 핀 | 신호 | 전압 | +| ------------------------- | -------------------------- | --------------------- | +| 1(red) | VCC | +5V | +| 2 (흑) | TX (출력) | +3.3V | +| 3 (흑) | RX (입력) | +3.3V | +| 4 (흑) | CAN2 TX | +3.3V | +| 5 (흑) | CAN2 RX | +3.3V | +| 6 (흑) | GND | GND | + +#### SERIAL 4/5 port + +Due to space constraints two ports are on one connector. + +| 핀 | 신호 | 전압 | +| ------------------------- | -------------------------- | --------------------- | +| 1(red) | VCC | +5V | +| 2 (흑) | TX (#4) | +3.3V | +| 3 (흑) | RX (#4) | +3.3V | +| 4 (흑) | TX (#5) | +3.3V | +| 5 (흑) | RX (#5) | +3.3V | +| 6 (흑) | GND | GND | + +#### ADC 6.6V + +| 핀 | 신호 | 전압 | +| ------------------------- | ------ | ------------------------ | +| 1(red) | VCC | +5V | +| 2 (흑) | ADC 입력 | 최대 +6.6V | +| 3 (흑) | GND | GND | + +#### ADC 3.3V + +| 핀 | 신호 | 전압 | +| ------------------------- | ------ | ------------------------ | +| 1(red) | VCC | +5V | +| 2 (흑) | ADC 입력 | 최대 +3.3V | +| 3 (흑) | GND | GND | +| 4 (흑) | ADC 입력 | 최대 +3.3V | +| 5 (흑) | GND | GND | + +#### I2C + +| 핀 | 신호 | 전압 | +| ------------------------- | --- | -------------------------------------------- | +| 1(red) | VCC | +5V | +| 2 (흑) | SCL | +3.3 (풀업) | +| 3 (흑) | SDA | +3.3 (풀업) | +| 4 (흑) | GND | GND | + +#### CAN + +| 핀 | 신호 | 전압 | +| ------------------------- | -------------------------- | ---- | +| 1(red) | VCC | +5V | +| 2 (흑) | CAN_H | +12V | +| 3 (흑) | CAN_L | +12V | +| 4 (흑) | GND | GND | + +#### SPI + +| 핀 | 신호 | 전압 | +| ------------------------- | ------------------------------------------------------ | -------------------- | +| 1(red) | VCC | +5V | +| 2 (흑) | SPI_EXT_SCK | +3.3 | +| 3 (흑) | SPI_EXT_MISO | +3.3 | +| 4 (흑) | SPI_EXT_MOSI | +3.3 | +| 5 (흑) | !SPI_EXT_NSS | +3.3 | +| 6 (흑) | !GPIO_EXT | +3.3 | +| 7 (흑) | GND | GND | + +#### 전원 + +| 핀 | 신호 | 전압 | +| ------------------------- | ------- | --------------------- | +| 1(red) | VCC | +5V | +| 2 (흑) | VCC | +5V | +| 3 (흑) | CURRENT | +3.3V | +| 4 (흑) | VOLTAGE | +3.3V | +| 5 (흑) | GND | GND | +| 6 (흑) | GND | GND | + +#### 스위치 + +| 핀 | 신호 | 전압 | +| ------------------------- | -------------------------------------------------------- | --------------------- | +| 1(red) | VCC | +3.3V | +| 2 (흑) | !IO_LED_SAFETY | GND | +| 3 (흑) | SAFETY | GND | + +## 시리얼 포트 매핑 + +| UART | 장치 | 포트 | +| ------ | ---------- | --------------------------------- | +| UART1 | /dev/ttyS0 | IO 디버그 | +| USART2 | /dev/ttyS1 | TELEM1 (흐름 제어) | +| USART3 | /dev/ttyS2 | TELEM2 (흐름 제어) | +| UART4 | | | +| UART7 | 콘솔 | | +| UART8 | SERIAL4 | | + + ## 시리얼 포트 매핑 diff --git a/docs/ko/flight_controller/mro_x2.1.md b/docs/ko/flight_controller/mro_x2.1.md index aa601aebe5..1be40508d7 100644 --- a/docs/ko/flight_controller/mro_x2.1.md +++ b/docs/ko/flight_controller/mro_x2.1.md @@ -1,121 +1,10 @@ + + + +Doc removed 202603 + text="Discontinued" 202507 / PX4v1.16 -:::warning -This flight controller has been [discontinued](../flight_controller/autopilot_experimental.md) and is no longer commercially available. -::: - -:::warning -PX4 does not manufacture this (or any) autopilot. -Contact the [manufacturer](https://store.mrobotics.io/) for hardware support or compliance issues. -::: - -The [mRo-X2.1 autopilot](http://www.mRobotics.io/) is based on the [Pixhawk®-project](https://pixhawk.org/) **FMUv2** open hardware design. -It runs PX4 on the [NuttX](https://nuttx.apache.org/) OS. - -![mRo X2.1](../../assets/flight_controller/mro/mro_x2.1.jpg) - -:::info -This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). -::: - -## 요약 - -- Main System-on-Chip: [STM32F427](https://www.st.com/en/microcontrollers-microprocessors/stm32f427-437.html) - - CPU : STM32F427VIT6 ARM® 마이크로 컨트롤러 - 개정판 3 - - IO: STM32F100C8T6 ARM® 마이크로 컨트롤러 -- 센서: - - Invensense® MPU9250 9DOF - - Invensense ICM-20602 6DOF - - MEAS MS5611 기압계 -- 크기/중량 - - Size: 36mm x 50mm - (Can be ordered with vertical, horizontal or no headers installed) - - 장착 위치: 직경 30.5mm x 30.5mm 3.2mm - - 중량: 10.9g - -아래 다이어그램은 Pixhawk 1과 비교한 것입니다. -mRo는 거의 동일한 하드웨어와 연결 기능을 제공하지만, 설치 공간이 훨씬 작습니다. -주요 차이점은 업데이트된 센서와 Rev 3 FMU입니다. - -![Mro Pixhawk 1 vs X2.1 comparison](../../assets/flight_controller/mro/px1_x21.jpg) - -## 연결성 - -- 2.54mm 헤더 : -- I2C가 장착 된 GPS(UART4) -- CAN 버스 -- RC 입력 -- PPM 입력 -- Spektrum 입력 -- RSSI 입력 -- sBus 입력 -- sBus 출력 -- 전원 입력 -- 부저 출력 -- LED 출력 -- Servo 출력 8개 -- Aux 출력 6개 -- 오프 보드 microUSB 커넥터 -- Kill Pin output _(Currently not supported by firmware)_ -- 항속 센서 -- USART2 (Telem 1) -- USART3 (Telem 2) -- UART7 (콘솔) -- UART8 (OSD) - -## PX4 부트로더 문제 - -기본적으로 mRo X2.1은 PX4가 아닌 ArduPilot® 용으로 미리 설정되어 제공될 수 있습니다. This -can be seen during firmware update when the board is recognized as FMUv2 instead of X2.1. - -In this case you must update the BootLoader using [BL_Update_X21.zip](https://github.com/PX4/PX4-Autopilot/raw/main/docs/assets/hardware/BL_Update_X21.zip). -이 캘리브레이션을 수행하지 않으면 나침반 방향이 잘못되어 -보조 IMU는 감지되지 않을 수 있습니다. - -업데이트 단계는 다음과 같습니다. - -1. Download and extract [BL_Update_X21.zip](https://github.com/PX4/PX4-Autopilot/raw/main/docs/assets/hardware/BL_Update_X21.zip). -2. Find the folder _BL_Update_X21_. This contains a **bin** file and a subfolder named **/etc** containing an **rc.txt** file -3. 이 파일을 마이크로 SD 카드의 루트 디렉토리에 복사하여 mRO x2.1에 삽입하십시오. -4. Mro x2.1의 전원을 켜십시오. 부팅시까지 기다렸다가 한 번 재부팅하십시오. - -## 구매처 - -This product can be ordered at the [mRobotics® Store](https://store.mrobotics.io/mRo-X2-1-Rev-2-p/m10021a.htm). - -## 배선 가이드 - -![mRo_X2.1_Wiring](../../assets/flight_controller/mro/mro_x21_wiring.png) - -## 펌웨어 빌드 - -:::tip -Most users will not need to build this firmware! -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: - -``` -make mro_x21_default -``` - -## 회로도 - -The board is documented on the mRo hardware repo: [x21_V2_schematic.pdf](https://github.com/mRoboticsIO/Hardware/blob/master/X2.1/Docs/x21_V2_schematic.pdf). - -## 시리얼 포트 매핑 - -| UART | 장치 | 포트 | -| ------ | ---------- | ---------- | -| USART1 | /dev/ttyS0 | IO 디버그 | -| USART2 | /dev/ttyS1 | SERIAL1 | -| USART3 | /dev/ttyS2 | TELEM2 | -| UART4 | /dev/ttyS3 | GPS/I2C | -| USART6 | /dev/ttyS4 | PX4IO | -| UART7 | /dev/ttyS5 | SERIAL5 콘솔 | -| UART8 | /dev/ttyS6 | SERIAL4 | - - +Note: Got ports using https://github.com/PX4/PX4-user_guide/pull/672#issuecomment-598198434 +--> diff --git a/docs/ko/flight_controller/nxp_mr_vmu_rt1176.md b/docs/ko/flight_controller/nxp_mr_vmu_rt1176.md index 47ad884bda..5231cf1607 100644 --- a/docs/ko/flight_controller/nxp_mr_vmu_rt1176.md +++ b/docs/ko/flight_controller/nxp_mr_vmu_rt1176.md @@ -147,7 +147,7 @@ Similar variants will be available from our licensees. - 기타 특성: - Operating & storage temperature: -40 ~ 85°c -## 구매처 +## Where to Buy {#store} Order from [NXP](https://www.nxp.com). @@ -174,7 +174,7 @@ _MR-VMU-RT1176_ connectors (following [Pixhawk Connector Standard](https://githu [NXP MR-VMU-RT1176 Baseboard Pinout](https://nxp.gitbook.io/vmu-rt1176/pin-out) (nxp.gitbook.io) -참고: +Notes: - The [camera capture pin](../camera/fc_connected_camera.md#camera-capture-configuration) (`PI0`) is pin 2 on the AD&IO port, marked above as `FMU_CAP1`. diff --git a/docs/ko/flight_controller/nxp_rddrone_fmuk66.md b/docs/ko/flight_controller/nxp_rddrone_fmuk66.md index 508581ebb2..b57415577c 100644 --- a/docs/ko/flight_controller/nxp_rddrone_fmuk66.md +++ b/docs/ko/flight_controller/nxp_rddrone_fmuk66.md @@ -1,131 +1,7 @@ + + + - -## 구매처 - -**RDDRONE-FMUK66** reference design kit may be purchased direct from NXP or from any of NXP's authorised worldwide network of [electronics distributors](https://www.nxp.com/support/sample-and-buy/distributor-network:DISTRIBUTORS). - -- [Purchase Link](https://www.nxp.com/design/design-center/development-boards-and-designs/px4-robotic-drone-vehicle-flight-management-unit-vmu-fmu-rddrone-fmuk66:RDDRONE-FMUK66#buy) (www.nxp.com) -- 원격 측정 라디오는 주파수 대역에 따라 별도로 구매하여야 합니다. - - [HGD-TELEM433](https://www.nxp.com/part/HGD-TELEM433) - - [HGD-TELEM915](https://www.nxp.com/part/HGD-TELEM915) - -:::info -_RDDRONE-FMUK66_ FMU is also included in the complete HoverGames drone kit: [KIT-HGDRONEK66](https://www.nxp.com/design/design-center/development-boards-and-designs/nxp-hovergames-drone-kit-including-flight-controller-and-peripherals:KIT-HGDRONEK66#buy) -::: - - - -## 조립 및 설정 - -https://nxp.gitbook.io/hovergames - -## 펌웨어 빌드 - -:::tip -Most users will not need to build this firmware! -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: - -``` -make nxp_fmuk66-v3_default -``` - -## 디버그 포트 - -The [PX4 System Console](../debug/system_console.md) and the [SWD interface](../debug/swd_debug.md) run on the [DCD-LZ FMU Debug](https://nxp.gitbook.io/hovergames/rddrone-fmuk66/connectors/debug-interface-dcd-lz) port. - -NXP's DCD-LZ is a 7 pin JST-GH connector and adds the nRST/MCU_RESET pin to the [Pixhawk 6-Pin standard debug port](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-009%20Pixhawk%20Connector%20Standard.pdf). - -DCD-LZ 브레이크아웃 어댑터를 사용하면 표준 10핀 JTAG/SWD 인터페이스(예 : Segger Jlink 사용) 및 표준 5핀 FTDI USB-TTL-3V3 유형 케이블을 사용할 수 있습니다. - - - -## 지원 플랫폼 및 기체 - -일반 RC 서보 또는 Futaba S-Bus 서보로 제어 가능한 모든 멀티콥터/비행기/로버 또는 보트. -The complete set of supported configurations can be seen in the [Airframes Reference](../airframes/airframe_reference.md). - -![HoverGames Drone Kit](../../assets/flight_controller/nxp_rddrone_fmuk66/hovergames_drone_14042019_xl001.jpg) - -:::tip -The NXP [HoverGames Drone Kit](https://www.nxp.com/kit-hgdronek66) (shown above) is a complete drone development kit that includes everything needed to build a quadcopter. -3S/4S LiPo 배터리만 추가로 구매하시면 됩니다. -::: - -## 추가 정보 - -- [HoverGames online documentation](https://nxp.gitbook.io/hovergames) PX4 user and programming guide, specific assembly, construction, debugging, programming instructions. - -- 3DModels supporting HoverGames and RDDRONE-FMUK66 can be found on _Thingiverse_ at these search links: [fmuk66](https://www.thingiverse.com/search?q=fmuk66&type=things&sort=relevant), [hovergames](https://www.thingiverse.com/search?q=hovergames&type=things&sort=relevant). - -![HoverGamesDronelogo](../../assets/flight_controller/nxp_rddrone_fmuk66/hovergames_colored_small.png) diff --git a/docs/ko/flight_controller/ocpoc_zynq.md b/docs/ko/flight_controller/ocpoc_zynq.md index 76641665fc..807468b20f 100644 --- a/docs/ko/flight_controller/ocpoc_zynq.md +++ b/docs/ko/flight_controller/ocpoc_zynq.md @@ -1,12 +1,7 @@ + + + diff --git a/docs/ko/flight_controller/omnibus_f4_sd.md b/docs/ko/flight_controller/omnibus_f4_sd.md index 83e30a7dc7..b7d37a2db2 100644 --- a/docs/ko/flight_controller/omnibus_f4_sd.md +++ b/docs/ko/flight_controller/omnibus_f4_sd.md @@ -1,266 +1,7 @@ -# Omnibus F4 SD + -:::warning -This flight controller has been [discontinued](../flight_controller/autopilot_experimental.md) and is no longer commercially available. -::: + - -## RC 텔레메트리 - -The Omnibus supports telemetry to the RC Transmitter using [FrSky Telemetry](../peripherals/frsky_telemetry.md) or [CRSF Crossfire Telemetry](#crsf_telemetry). - - - -### CRSF Crossfire 텔레메트리 - -[TBS CRSF Telemetry](../telemetry/crsf_telemetry.md) may be used to send telemetry data from the flight controller (the vehicle's attitude, battery, flight mode and GPS data) to an RC transmitter such as a Taranis. - -Benefits over [FrSky telemetry](../peripherals/frsky_telemetry.md) include: - -- RC와 텔레메트리에는 단일 UART 만 필요합니다. -- CRSF 프로토콜은 응답시간 느린 장치에 최적화되어 있습니다. -- 150Hz RC 업데이트 속도. -- 신호는 반전되지 않으므로 외부 인버터 로직이 필요하지 않습니다. - -:::info -If you use CRSF Telemetry you will need to build custom PX4 firmware. -By contrast, FrSky telemetry can use prebuilt firmware. -::: - -For Omnibus we recommend the [TBS Crossfire Nano RX](https://www.team-blacksheep.com/products/prod:crossfire_nano_rx), since it is specifically designed for small Quads. - -On the handheld controller (e.g. Taranis) you will also need a [Transmitter Module](https://www.team-blacksheep.com/shop/cat:tbs-crossfire-radio-transmitter#product_listing). -이것은 RC 콘트롤러의 뒷면에 장착할 수 있습니다. - -:::info -The referenced links above contains the documentation for the TX/RX modules. -::: - -#### 설정 - -다음과 같이 Nano RX와 Omnibus 핀을 연결합니다. - -| Omnibus UART1 | Nano RX | -| ------------- | ------- | -| TX | Ch2 | -| RX | Ch1 | - -다음으로 TX/RX 모듈을 업데이트하여 CRSF 프로토콜을 사용하고 텔레메트리를 설정합니다. -Instructions for this are provided in the [TBS Crossfire Manual](https://www.team-blacksheep.com/media/files/tbs-crossfire-manual.pdf) (search for 'Setting up radio for CRSF'). - -#### PX4 CRSF Configuration - -You will need to build custom firmware to use CRSF. -For more information see [CRSF Telemetry](../telemetry/crsf_telemetry.md#px4-configuration). - - - -## PX4 Bootloader Update {#bootloader} - -The board comes pre-installed with [Betaflight](https://github.com/betaflight/betaflight/wiki). -Before PX4 firmware can be installed, the _PX4 bootloader_ must be flashed. -Download the [omnibusf4sd_bl.hex](https://github.com/PX4/PX4-Autopilot/raw/main/docs/assets/flight_controller/omnibus_f4_sd/omnibusf4sd_bl_d52b70cb39.hex) bootloader binary and read [this page](../advanced_config/bootloader_update_from_betaflight.md) for flashing instructions. - -## 펌웨어 빌드 - -To [build PX4](../dev_setup/building_px4.md) for this target: - -``` -make omnibus_f4sd_default -``` - -## 펌웨어 설치 - -미리 빌드된 펌웨어나 사용자 지정 펌웨어를 사용할 수 있습니다. - -:::warning -If you use [CRSF Telemetry](../telemetry/crsf_telemetry.md#px4-configuration) in your radio system, as describe above, then you must use custom firmware. -::: - -펌웨어는 일반적인 방법으로 설치할 수 있습니다. - -- 소스 빌드 및 업로드 - - ``` - make omnibus_f4sd_default upload - ``` - -- [Load the firmware](../config/firmware.md) using _QGroundControl_. - -## 설정 - -In addition to the [basic configuration](../config/index.md), the following parameters are important: - -| 매개변수 | 설정 | -| ---------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ | -| [SYS_HAS_MAG](../advanced_config/parameter_reference.md#SYS_HAS_MAG) | 보드에 내부 자력계가 없기 때문에 비활성화하여야 합니다. 외부 자력계를 연결하여 활성화 할 수 있습니다. | -| [SYS_HAS_BARO](../advanced_config/parameter_reference.md#SYS_HAS_BARO) | 보드에 기압계가 없는 경우에는 비활성화 하십시오. | - -## 추가 정보 - -[This page](https://blog.unmanned.tech/omnibus-f4-flight-controller-guide/) provides a good overview with pinouts and setup instructions. +DOC REMOVED: 202603 +--> diff --git a/docs/ko/flight_controller/pixfalcon.md b/docs/ko/flight_controller/pixfalcon.md index e56c76c608..ad95ab4c86 100644 --- a/docs/ko/flight_controller/pixfalcon.md +++ b/docs/ko/flight_controller/pixfalcon.md @@ -1,75 +1,5 @@ -# Pixfalcon 비행 콘트롤러 (단종됨) + - - -:::warning -This flight controller has been [discontinued](../flight_controller/autopilot_experimental.md) and is no longer commercially available. -::: - -:::warning -PX4 does not manufacture this (or any) autopilot. -Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. -::: - -The Pixfalcon autopilot (designed by [Holybro®](https://holybro.com/)) is binary-compatible (FMUv2) derivative of the [Pixhawk 1](../flight_controller/pixhawk.md) design that has been optimized for space-constrained applications such as FPV racers. It has less IO to allow for the reduction in size. - -![Pixfalcon hero image](../../assets/hardware/hardware-pixfalcon.png) - -## 요약 - -- Main System-on-Chip: [STM32F427](https://www.st.com/en/microcontrollers-microprocessors/stm32f427-437.html) - - CPU : 단정밀도 FPU의 180MHz ARM® Cortexex® M4 - - RAM : 256KB SRAM (L1) -- 페일세이프 시스템 온칩 : STM32F100 - - CPU: 24 MHz ARM Cortex M3 - - RAM : 8KB SRAM -- GPS: u-blox® M8 (번들) - -### 연결성 - -- I2C 1개 -- UART 2개(하나는 원격 측정/OSD 용, 흐름 제어 없음) -- 수동 오버라이드 기능이 있는 PWM 8개 -- S.BUS / PPM 입력 - -## 구매처: - -No longer available. - -Optional hardware: - -- Optical flow: PX4 Flow unit from manufacturer [Holybro](https://holybro.com/products/px4flow) -- Digital Airspeed sensor from manufacturer [Holybro](https://holybro.com/products/digital-air-speed-sensor-ms4525do) -- 텔레메트리가 통합 화면 디스플레이 - - Micro HKPilot Telemetry Radio Module with On Screen Display (OSD) unit - 433MHz. (Discontinued) -- 순수 텔레메트리 옵션: - - [SIK Radios](../telemetry/sik_radio.md) - -## 펌웨어 빌드 - -:::tip -Most users will not need to build this firmware! -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: - -``` -make px4_fmu-v2_default -``` - -## 디버그 포트 - -This board does not have a debug port (i.e it does not have a port for accessing the [System Console](../debug/system_console.md) or the [SWD interface](../debug/swd_debug.md) (JTAG). - -개발자는 SWD용 보드 테스트 패드와 STM32F4 (IC) TX와 RX에 와이어를 납땜하여 콘솔을 획득할 수 있습니다. - -## 시리얼 포트 매핑 - -| UART | 장치 | 포트 | -| ------ | ---------- | --------------------------------- | -| UART1 | /dev/ttyS0 | IO 디버그 | -| USART2 | /dev/ttyS1 | TELEM1 (흐름 제어) | -| UART4 | /dev/ttyS2 | GPS | - - + diff --git a/docs/ko/flight_controller/pixhack_v3.md b/docs/ko/flight_controller/pixhack_v3.md index 8cb90a77df..d7907a18c3 100644 --- a/docs/ko/flight_controller/pixhack_v3.md +++ b/docs/ko/flight_controller/pixhack_v3.md @@ -1,88 +1,8 @@ + + + - -## 시리얼 포트 매핑 - -| UART | 장치 | 포트 | -| ------ | ---------- | --------------------------------- | -| UART1 | /dev/ttyS0 | IO 디버그 | -| USART2 | /dev/ttyS1 | TELEM1 (흐름 제어) | -| USART3 | /dev/ttyS2 | TELEM2 (흐름 제어) | -| UART4 | | | -| UART7 | | 콘솔 | -| UART8 | | SERIAL4 | +--> diff --git a/docs/ko/flight_controller/pixhawk-2.md b/docs/ko/flight_controller/pixhawk-2.md index d08c6dbc4a..a2daa87681 100644 --- a/docs/ko/flight_controller/pixhawk-2.md +++ b/docs/ko/flight_controller/pixhawk-2.md @@ -47,9 +47,7 @@ This autopilot is [supported](../flight_controller/autopilot_pixhawk_standard.md - 고전력 멀티톤 피에조 오디오 표시기 - 장기간 고속 로깅용 microSD 카드 - - -## 구매처 +## Where to Buy {#store} [Cube Black](https://www.cubepilot.com/#/reseller/list) (Reseller list) @@ -155,7 +153,7 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make px4_fmu-v3_default ``` diff --git a/docs/ko/flight_controller/pixhawk.md b/docs/ko/flight_controller/pixhawk.md index fa31f7a468..c8bd92ee33 100644 --- a/docs/ko/flight_controller/pixhawk.md +++ b/docs/ko/flight_controller/pixhawk.md @@ -1,338 +1,6 @@ -# 3DR Pixhawk 1 비행 콘트롤러 (단종됨) + -:::warning -This flight controller has been [discontinued](../flight_controller/autopilot_experimental.md) and is no longer commercially available. -You can use the [mRo Pixhawk](../flight_controller/mro_pixhawk.md) as a drop-in replacement. -::: - -:::warning -PX4 does not manufacture this (or any) autopilot. -지원 또는 규정준수 문제는 제조업체에 문의하십시오. -::: - -The _3DR Pixhawk® 1_ autopilot is a popular general purpose flight controller based on the [Pixhawk-project](https://pixhawk.org/) **FMUv2** open hardware design (it combines the functionality of the PX4FMU + PX4IO). -It runs PX4 on the [NuttX](https://nuttx.apache.org/) OS. - -![Pixhawk Image](../../assets/hardware/hardware-pixhawk.png) - -Assembly/setup instructions for use with PX4 are provided here: [Pixhawk Wiring Quickstart](../assembly/quick_start_pixhawk.md) - -## 주요 특징 - -- Main System-on-Chip: [STM32F427](https://www.st.com/en/microcontrollers-microprocessors/stm32f427-437.html) - - CPU : 단정밀도 FPU의 180MHz ARM® Cortexex® M4 - - RAM : 256KB SRAM (L1) -- 페일세이프 시스템 온칩 : STM32F100 - - CPU: 24 MHz ARM Cortex M3 - - RAM : 8KB SRAM -- Wifi: ESP8266 외장형 -- GPS: u-blox® 7/8 (Hobbyking®) / u-blox 6 (3D Robotics) -- Optical flow: [PX4 Flow unit](../sensor/px4flow.md) -- 중복 전원공급장치 및 자동 장애 조치 -- 외부 안전 스위치 -- 다색 LED 주시각 표시기 -- 고전력 멀티톤 피에조 오디오 표시기 -- 장기간 고속 로깅용 microSD 카드 - -연결성 - -- I2C 1개 -- CAN 1개 (2개는 옵션) -- ADC 1개 -- UART 4개 (흐름 제어 2개 포함) -- 콘솔 1개 -- 수동 오버라이드 기능이 있는 PWM 8개 -- 6개 PWM / GPIO / PWM 입력 -- S.BUS / PPM / Spektrum 입력 -- S.BUS 출력 - -# 구매처 - -원래 3DR®에서 제조하였습니다. -이 보드는 PX4®의 최초 표준 마이크로 콘트롤러 플랫폼이었습니다. While the board is no longer manufactured by 3DR, you can use the [mRo Pixhawk](../flight_controller/mro_pixhawk.md) as a drop-in replacement. - -mRo Pixhawk 주문: - -- [Bare Bones](https://store.mrobotics.io/Genuine-PixHawk-1-Barebones-p/mro-pixhawk1-bb-mr.htm) - Just the board (useful as a 3DR Pixhawk replacement) -- [mRo Pixhawk 2.4.6 Essential Kit](https://store.mrobotics.io/Genuine-PixHawk-Flight-Controller-p/mro-pixhawk1-minkit-mr.htm) - includes everything except for telemetry radios -- [mRo Pixhawk 2.4.6 Cool Kit! (Limited edition)](https://store.mrobotics.io/product-p/mro-pixhawk1-fullkit-mr.htm) - includes everything you need including telemetry radios - -## 사양 - -### 프로세서 - -- 32bit STM32F427 [Cortex-M4F](https://en.wikipedia.org/wiki/ARM_Cortex-M#Cortex-M4) core with FPU -- 168 MHz -- 256 KB RAM -- 2 MB Flash -- 32 비트 STM32F103 failsafe 코 프로세서 - -### 센서 - -- ST Micro L3GD20H 3축 16비트 자이로스코프 -- ST 마이크로 LSM303D 14 비트 가속도계/자력계 -- Invensense MPU 6000 3축 가속도계/자이로스코프 -- MEAS MS5611 기압계 - -### 인터페이스 - -- UART (직렬 포트) 5개, 1 개의 고전력 지원, 2x (HW 흐름 제어 포함) -- CAN 2개(하나는 내부 3.3V 트랜시버, 하나는 확장 커넥터에 있음) -- Spektrum DSM/DSM2/DSM-X® Satellite 호환 입력 -- Futaba S.BUS® 호환 입력 및 출력 -- PPM 합계 신호 입력 -- RSSI(PWM 또는 전압) 입력 -- I2C -- SPI -- 3.3 및 6.6V ADC 입력 -- 내부 microUSB 포트 및 외부 microUSB 포트 확장 - - - -### 전력 시스템 및 보호 - -- 자동 복구 기능의 이상적인 다이오드 컨트롤러 -- Servo rail high-power (max. 10V) and high-current (10A+) ready -- 모든 주변 장치 출력 과전류 보호, 모든 입력 ESD 보호 - -## 정격 전압 - -Pixhawk 는 3 개의 전원이 공급되는 경우에는 전원 공급 장치의 3중 중복이 가능합니다. 세 개의 레일은 전원 모듈 입력, 서보 레일 입력과 USB 입력입니다. - -### 정상 작동 최대 정격 전압 - -이러한 조건에서 전원은 아래의 순서대로 시스템에 전원을 공급하여야합니다. - -- 전원 모듈 입력 (4.8V ~ 5.4V) -- Servo rail input (4.8V to 5.4V) **UP TO 10V FOR MANUAL OVERRIDE, BUT AUTOPILOT PART WILL BE UNPOWERED ABOVE 5.7V IF POWER MODULE INPUT IS NOT PRESENT** -- USB 전원 입력 (4.8V ~ 5.4V) - -### 절대 최대 정격 전압 - -아래의 조건에서 시스템은 전원을 사용하지 않지만(작동하지 않음), 그대로 유지됩니다. - -- 전원 모듈 입력(4.1V ~ 5.7V, 0V ~ 20V 손상되지 않음) -- 서보 레일 입력(4.1V ~ 5.7V, 0V ~ 20V) -- USB 전원 입력(4.1V ~ 5.7V, 0V ~ 6V) - -## 회로도 - -[FMUv2 + IOv2 schematic](https://raw.githubusercontent.com/PX4/Hardware/master/FMUv2/PX4FMUv2.4.5.pdf) -- Schematic and layout - -:::info -As a CC-BY-SA 3.0 licensed Open Hardware design, all schematics and design files are [available](https://github.com/pixhawk/Hardware). -::: - -## 연결 - -Pixhawk ports are shown below. -These use Hirose DF13 connectors (predating the JST-GH connectors defined in the Pixhawk connector standard). - -:::warning -Many 3DR Pixhawk clones use Molex picoblade connectors instead of DF13 connectors. -They have rectangular instead of square pins, and cannot be assumed to be compatible. -::: - -![Pixhawk Connectors](../../assets/flight_controller/pixhawk1/pixhawk_connectors.png) - -:::tip -The `RC IN` port is for RC receivers only and provides sufficient power for that purpose. -**NEVER** connect any servos, power supplies or batteries to it or to the receiver connected to it. -::: - -## 핀배열 - -#### TELEM1, TELEM2 포트 - -| 핀 | 신호 | 전압 | -| ------------------------- | --------------------------- | --------------------- | -| 1(red) | VCC | +5V | -| 2 (흑) | TX (출력) | +3.3V | -| 3 (흑) | RX (입력) | +3.3V | -| 4 (흑) | CTS (입력) | +3.3V | -| 5 (흑) | RTS (출력) | +3.3V | -| 6 (흑) | GND | GND | - -#### GPS 포트 - -| 핀 | 신호 | 전압 | -| ------------------------- | -------------------------- | --------------------- | -| 1(red) | VCC | +5V | -| 2 (흑) | TX (출력) | +3.3V | -| 3 (흑) | RX (입력) | +3.3V | -| 4 (흑) | CAN2 TX | +3.3V | -| 5 (흑) | CAN2 RX | +3.3V | -| 6 (흑) | GND | GND | - -#### SERIAL 4/5 포트 - -공간 제약으로 인하여 두 개의 포트가 하나의 커넥터에 있습니다. - -| 핀 | 신호 | 전압 | -| ------------------------- | -------------------------- | --------------------- | -| 1(red) | VCC | +5V | -| 2 (흑) | TX (#4) | +3.3V | -| 3 (흑) | RX (#4) | +3.3V | -| 4 (흑) | TX (#5) | +3.3V | -| 5 (흑) | RX (#5) | +3.3V | -| 6 (흑) | GND | GND | - -#### ADC 6.6V - -| 핀 | 신호 | 전압 | -| ------------------------- | ------ | ------------------------ | -| 1(red) | VCC | +5V | -| 2 (흑) | ADC 입력 | 최대 +6.6V | -| 3 (흑) | GND | GND | - -#### ADC 3.3V - -| 핀 | 신호 | 전압 | -| ------------------------- | ------ | ------------------------ | -| 1(red) | VCC | +5V | -| 2 (흑) | ADC 입력 | 최대 +3.3V | -| 3 (흑) | GND | GND | -| 4 (흑) | ADC 입력 | 최대 +3.3V | -| 5 (흑) | GND | GND | - -#### I2C - -| 핀 | 신호 | 전압 | -| ------------------------- | --- | -------------------------------------------- | -| 1(red) | VCC | +5V | -| 2 (흑) | SCL | +3.3 (풀업) | -| 3 (흑) | SDA | +3.3 (풀업) | -| 4 (흑) | GND | GND | - -#### CAN - -| 핀 | 신호 | 전압 | -| ------------------------- | -------------------------- | ---- | -| 1(red) | VCC | +5V | -| 2 (흑) | CAN_H | +12V | -| 3 (흑) | CAN_L | +12V | -| 4 (흑) | GND | GND | - -#### SPI - -| 핀 | 신호 | 전압 | -| ------------------------- | ------------------------------------------------------ | -------------------- | -| 1(red) | VCC | +5V | -| 2 (흑) | SPI_EXT_SCK | +3.3 | -| 3 (흑) | SPI_EXT_MISO | +3.3 | -| 4 (흑) | SPI_EXT_MOSI | +3.3 | -| 5 (흑) | !SPI_EXT_NSS | +3.3 | -| 6 (흑) | !GPIO_EXT | +3.3 | -| 7 (흑) | GND | GND | - -#### 전원 - -| 핀 | 신호 | 전압 | -| ------------------------- | ------- | --------------------- | -| 1(red) | VCC | +5V | -| 2 (흑) | VCC | +5V | -| 3 (흑) | CURRENT | +3.3V | -| 4 (흑) | VOLTAGE | +3.3V | -| 5 (흑) | GND | GND | -| 6 (흑) | GND | GND | - -#### 스위치 - -| 핀 | 신호 | 전압 | -| ------------------------- | -------------------------------------------------------- | --------------------- | -| 1(red) | VCC | +3.3V | -| 2 (흑) | !IO_LED_SAFETY | GND | -| 3 (흑) | SAFETY | GND | - -## 시리얼 포트 매핑 - -| UART | 장치 | 포트 | -| ------ | ---------- | --------------------------------- | -| UART1 | /dev/ttyS0 | IO 디버그 | -| USART2 | /dev/ttyS1 | TELEM1 (흐름 제어) | -| USART3 | /dev/ttyS2 | TELEM2 (흐름 제어) | -| UART4 | | | -| UART7 | 콘솔 | | -| UART8 | SERIAL4 | | - - - -## 디버그 포트 - -### 콘솔 포트 - -The [PX4 System Console](../debug/system_console.md) runs on the port labeled [SERIAL4/5](#serial-4-5-port). - -:::tip -A convenient way to connect to the console is to use a [Zubax BugFace BF1](https://github.com/Zubax/bugface_bf1), as it comes with connectors that can be used with several different Pixhawk devices. -Simply connect the 6-pos DF13 1:1 cable on the [Zubax BugFace BF1](https://github.com/Zubax/bugface_bf1) to the Pixhawk `SERIAL4/5` port. - -![Zubax BugFace BF1](../../assets/flight_controller/pixhawk1/dronecode_probe.jpg) -::: - -The pinout is standard serial pinout, designed to connect to a [3.3V FTDI](https://www.digikey.com/en/products/detail/TTL-232R-3V3/768-1015-ND/1836393) cable (5V tolerant). - -\| 3DR Pixhawk 1 | | FTDI | -\| ------------- | --------- | ---- | ---------------- | -\| 1 | +5V (red) | | N/C | -\| 2 | S4 Tx | | N/C | -\| 3 | S4 Rx | | N/C | -\| 4 | S5 Tx | 5 | FTDI RX (yellow) | -\| 5 | S5 Rx | 4 | FTDI TX (orange) | -\| 6 | GND | 1 | FTDI GND (black) | - -6 핀 DF13 1 : 1 커넥터에 대한 FTDI 케이블의 배선은 아래 그림과 같습니다. - -![Console Connector](../../assets/flight_controller/pixhawk1/console_connector.jpg) - -전체 배선은 아래와 같습니다. - -![Console Debug](../../assets/flight_controller/pixhawk1/console_debug.jpg) - -:::info -For information on how to _use_ the console see: [System Console](../debug/system_console.md). -::: - -### SWD 포트 - -The [SWD](../debug/swd_debug.md) (JTAG) ports are hidden under the cover (which must be removed for hardware debugging). -아래에 강조 표시된 것처럼 FMU와 IO를 위한 별도의 포트가 존재합니다. - -![Pixhawk SWD](../../assets/flight_controller/pixhawk1/pixhawk_swd.jpg) - -포트는 ARM 10핀 JTAG 커넥터이므로 납땜이 필요합니다. -포트의 핀배열은 아래와 같습니다(위 모서리의 사각형 마커는 핀 1을 나타냄). - -![ARM 10-Pin connector pinout](../../assets/flight_controller/pixhawk1/arm_10pin_jtag_connector_pinout.jpg) - -:::info -All Pixhawk FMUv2 boards have a similar SWD port. -::: - -## 펌웨어 빌드 - -:::tip -Most users will not need to build this firmware! -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: - -``` -make px4_fmu-v2_default -``` - -## 부품 / 하우징 - -- **ARM MINI JTAG (J6)**: 1.27 mm 10pos header (SHROUDED), for Black Magic Probe: FCI 20021521-00010D4LF ([Digi-Key](https://www.digikey.com/en/products/detail/20021521-00010T1LF/609-4054-ND/2414951),) or Samtec FTSH-105-01-F-DV-K (untested) or Harwin M50-3600542 ([Digikey](https://www.digikey.com/en/products/detail/harwin-inc/M50-3600542/2264370)) - - JTAG Adapter Option #1: [BlackMagic Probe](https://1bitsquared.com/products/black-magic-probe). 케이블 없이 제공될 수 있습니다 (제조업체에 확인). - If so, you will need the **Samtec FFSD-05-D-06.00-01-N** cable ([Samtec sample service](https://www.samtec.com/products/ffsd-05-d-06.00-01-n) or [Digi-Key Link: SAM8218-ND](https://www.digikey.com/en/products/detail/samtec-inc/ffsd-05-d-06-00-01-n/1106577)) or [Tag Connect Ribbon](https://www.tag-connect.com/product/10-pin-cortex-ribbon-cable-4-length-with-50-mil-connectors) and a Mini-USB cable. - - JTAG Adapter Option #2: [Digi-Key Link: ST-LINK/V2](https://www.digikey.com/product-detail/en/stmicroelectronics/ST-LINK-V2/497-10484-ND) / [ST USER MANUAL](https://www.st.com/resource/en/user_manual/dm00026748.pdf), needs an ARM Mini JTAG to 20pos adapter: [Digi-Key Link: 726-1193-ND](https://www.digikey.com/en/products/detail/texas-instruments/MDL-ADA2/1986451) - - JTAG Adapter Option #3: [Olimex ARM-TINY](https://www.olimex.com/wiki/ARM-USB-TINY) or any other OpenOCD-compatible ARM Cortex JTAG adapter, needs an ARM Mini JTAG to 20pos adapter: [Digi-Key Link: 726-1193-ND](https://www.digikey.com/en/products/detail/texas-instruments/MDL-ADA2/1986451) -- **USARTs**: Hirose DF13 6 pos ([Digi-Key Link: DF13A-6P-1.25H(20)](https://www.digikey.com/products/en?keywords=H3371-ND)) - - Mates: Hirose DF13 6 pos housing ([Digi-Key Link: Hirose DF13-6S-1.25C](https://www.digikey.com/products/en?keywords=H2182-ND)) -- **I2C and CAN**: Hirose DF13 4 pos ([Digi-Key Link: DF13A-4P-1.25H(20)](https://www.digikey.com/en/products/detail/hirose-electric-co-ltd/DF13A-4P-1-25H-20/530666) - discontinued) - -## 지원 플랫폼 및 기체 - -일반 RC 서보 또는 Futaba S-Bus 서보로 제어 가능한 모든 멀티콥터/비행기/로버 또는 보트. + diff --git a/docs/ko/flight_controller/pixhawk3_pro.md b/docs/ko/flight_controller/pixhawk3_pro.md index a3816ba164..deaacad9ac 100644 --- a/docs/ko/flight_controller/pixhawk3_pro.md +++ b/docs/ko/flight_controller/pixhawk3_pro.md @@ -1,87 +1,7 @@ + + + +DOC REMOVED: 202603 +--> diff --git a/docs/ko/flight_controller/pixhawk4.md b/docs/ko/flight_controller/pixhawk4.md index 4d7950a549..f655f5422a 100644 --- a/docs/ko/flight_controller/pixhawk4.md +++ b/docs/ko/flight_controller/pixhawk4.md @@ -51,7 +51,7 @@ This autopilot is [supported](../flight_controller/autopilot_pixhawk_standard.md Additional information can be found in the [Pixhawk 4 Technical Data Sheet](https://github.com/PX4/PX4-Autopilot/blob/main/docs/assets/flight_controller/pixhawk4/pixhawk4_technical_data_sheet.pdf). -## 구매처 +## Where to Buy {#store} Order from [Holybro](https://holybro.com/products/pixhawk-4). @@ -126,13 +126,11 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make px4_fmu-v5_default ``` - - -## 디버그 포트 +## Debug Port {#debug_port} The [PX4 System Console](../debug/system_console.md) and [SWD interface](../debug/swd_debug.md) run on the **FMU Debug** port, while the I/O console and SWD interface can be accessed via **I/O Debug** port. In order to access these ports, the user must remove the _Pixhawk 4_ casing. diff --git a/docs/ko/flight_controller/pixhawk4_mini.md b/docs/ko/flight_controller/pixhawk4_mini.md index eff052486a..d5ccdebf6a 100644 --- a/docs/ko/flight_controller/pixhawk4_mini.md +++ b/docs/ko/flight_controller/pixhawk4_mini.md @@ -1,160 +1,7 @@ + + + diff --git a/docs/ko/flight_controller/pixhawk5x.md b/docs/ko/flight_controller/pixhawk5x.md index 79b021586f..31e1259da2 100644 --- a/docs/ko/flight_controller/pixhawk5x.md +++ b/docs/ko/flight_controller/pixhawk5x.md @@ -113,7 +113,7 @@ The Pixhawk® 5X is perfect for developers at corporate research labs, startups, - 기타 특성: - Operating & storage temperature: -40 ~ 85°c -## 구매처 +## Where to Buy {#store} Order from [Holybro](https://holybro.com/products/pixhawk-5x). @@ -131,10 +131,10 @@ The [Pixhawk 5X Wiring Quick Start](../assembly/quick_start_pixhawk5x.md) provid :::info Connector pin assignments are left to right (i.e. Pin 1 is the left-most pin). -::: infos: +::: - The [camera capture pin](../camera/fc_connected_camera.md#camera-capture-configuration) (`PI0`) is pin 2 on the AD&IO port, marked above as `FMU_CAP1`. -- _Pixhawk 5X_ pinouts can be downloaded in PDF from from [here](https://github.com/PX4/PX4-user_guide/blob/main/assets/flight_controller/pixhawk5x/pixhawk5x_pinout.pdf) or [here](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_Pixhawk5X_Pinout.pdf). +- _Pixhawk 5X_ pinouts can be downloaded in PDF from [here](https://github.com/PX4/PX4-user_guide/blob/main/assets/flight_controller/pixhawk5x/pixhawk5x_pinout.pdf) or [here](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_Pixhawk5X_Pinout.pdf). ## 시리얼 포트 매핑 @@ -177,7 +177,7 @@ The **POWER1** & **POWER2** ports on the Pixhawk 5X uses the 6 circuit [2.00mm P Digital I2C battery monitoring is enabled by default (see [Quickstart > Power](../assembly/quick_start_pixhawk5x.md#power)). -::: info +:::info Analog battery monitoring via an ADC is not supported on this particular board, but may be supported in variations of this flight controller with a different baseboard. ::: @@ -190,13 +190,11 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make px4_fmu-v5x_default ``` - - -## 디버그 포트 +## Debug Port {#debug_port} The [PX4 System Console](../debug/system_console.md) and [SWD interface](../debug/swd_debug.md) run on the **FMU Debug** port. diff --git a/docs/ko/flight_controller/pixhawk6c.md b/docs/ko/flight_controller/pixhawk6c.md index 015476573a..f546315388 100644 --- a/docs/ko/flight_controller/pixhawk6c.md +++ b/docs/ko/flight_controller/pixhawk6c.md @@ -96,7 +96,7 @@ The Pixhawk® 6C is perfect for developers at corporate research labs, startups, - 기타 특성: - Operating & storage temperature: -40 ~ 85°c -## 구매처 +## Where to Buy {#store} Order from [Holybro](https://holybro.com/products/pixhawk-6c). @@ -162,13 +162,11 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make px4_fmu-v6c_default ``` - - -## 디버그 포트 +## Debug Port {#debug_port} The [PX4 System Console](../debug/system_console.md) and [SWD interface](../debug/swd_debug.md) run on the **FMU Debug** port. diff --git a/docs/ko/flight_controller/pixhawk6c_mini.md b/docs/ko/flight_controller/pixhawk6c_mini.md index 8d884325c9..7fb0edced5 100644 --- a/docs/ko/flight_controller/pixhawk6c_mini.md +++ b/docs/ko/flight_controller/pixhawk6c_mini.md @@ -58,7 +58,7 @@ The Pixhawk® 6C Mini is perfect for developers at corporate research labs, star - USB Power Input: 4.75\~5.25V - Servo Rail Input: 0\~36V - Current Ratings: - - \`TELEM1\`\` Max output current limiter: 1A + - `TELEM1` Max output current limiter: 1A - All other port combined output current limiter: 1A ### **Mechanical data** @@ -94,14 +94,14 @@ The Pixhawk® 6C Mini is perfect for developers at corporate research labs, star - 기타 특성: - Operating & storage temperature: -40 ~ 85°c -## 구매처 +## Where to Buy {#store} Order from [Holybro](https://holybro.com/products/pixhawk-6c-mini). ## 조립 및 설정 -The Pixhawk 4 Mini's port is very similar to the Pixhawk 6C Mini's port. -Please refer to the [Pixhawk 4 Mini Wiring Quick Start](../assembly/quick_start_pixhawk4_mini.md) as it provides instructions on how to assemble required/important peripherals including GPS, Power Module etc. +The Pixhawk 6C Mini's ports are very similar to the Pixhawk 4 Mini's ports. +Please refer to the [Pixhawk 4 Mini Wiring Quick Start](https://docs.px4.io/v1.16/en/assembly/quick_start_pixhawk4_mini) (Discontinued) as it provides instructions on how to assemble required/important peripherals including GPS, Power Module etc. ## 핀배열 @@ -165,13 +165,11 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make px4_fmu-v6c_default ``` - - -## 디버그 포트 +## Debug Port {#debug_port} The [PX4 System Console](../debug/system_console.md) and [SWD interface](../debug/swd_debug.md) run on the **FMU Debug** port. @@ -208,7 +206,7 @@ The complete set of supported configurations can be seen in the [Airframes Refer ## See Also - [Holybro Docs](https://docs.holybro.com/) (Holybro) -- [Pixhawk 4 Mini Wiring Quick Start](../assembly/quick_start_pixhawk4_mini.md) (and [Pixhawk 6C Wiring QuickStart](../assembly/quick_start_pixhawk6c.md)) +- [Pixhawk 6C Wiring QuickStart](../assembly/quick_start_pixhawk6c.md) - [PM02 Power Module](../power_module/holybro_pm02.md) - [PM06 Power Module](../power_module/holybro_pm06_pixhawk4mini_power_module.md) - [PM07 Power Module](../power_module/holybro_pm07_pixhawk4_power_module.md) diff --git a/docs/ko/flight_controller/pixhawk6x-rt.md b/docs/ko/flight_controller/pixhawk6x-rt.md index a455ebc174..57a280b267 100644 --- a/docs/ko/flight_controller/pixhawk6x-rt.md +++ b/docs/ko/flight_controller/pixhawk6x-rt.md @@ -130,9 +130,9 @@ The Pixhawk®​ 6X-RT is perfect for developers at corporate research labs, sta - 기타 특성: - Operating & storage temperature: -40 ~ 85°c -## 구매처 +## Where to Buy {#store} -Order from [Holybro](https://holybro.com/products/fmuv6x-rt-developer-edition). +Order from [Holybro](https://holybro.com/products/pixhawk-6x-rt). ## 조립 및 설정 @@ -149,7 +149,7 @@ Sample Wiring Diagram - [Holybro Pixhawk Baseboard Pinout](https://docs.holybro.com/autopilot/pixhawk-6x/pixhawk-baseboard-pinout) - [Holybro Pixhawk Mini-Baseboard Pinout](https://docs.holybro.com/autopilot/pixhawk-6x/pixhawk-mini-baseboard-pinout) -참고: +Notes: - The [camera capture pin](../camera/fc_connected_camera.md#camera-capture-configuration) (`PI0`) is pin 2 on the AD&IO port, marked above as `FMU_CAP1`. @@ -207,13 +207,11 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make px4_fmu-v6xrt_default ``` - - -## 디버그 포트 +## Debug Port {#debug_port} The [PX4 System Console](../debug/system_console.md) and [SWD interface](../debug/swd_debug.md) run on the **FMU Debug** port. diff --git a/docs/ko/flight_controller/pixhawk6x.md b/docs/ko/flight_controller/pixhawk6x.md index 23f70f486a..9639ae4ccc 100644 --- a/docs/ko/flight_controller/pixhawk6x.md +++ b/docs/ko/flight_controller/pixhawk6x.md @@ -160,7 +160,7 @@ The Pixhawk®​ 6X is perfect for developers at corporate research labs, startu - 기타 특성: - Operating & storage temperature: -40 ~ 85°c -## 구매처 +## Where to Buy {#store} Order from [Holybro](https://holybro.com/products/pixhawk-6x). @@ -180,7 +180,7 @@ Sample Wiring Diagram - [Holybro Pixhawk Jetson Baseboard](https://docs.holybro.com/autopilot/pixhawk-baseboards/pixhawk-jetson-baseboard) - [Holybro Pixhawk RPi CM4 Baseboard](https://docs.holybro.com/autopilot/pixhawk-baseboards/pixhawk-rpi-cm4-baseboard) -참고: +Notes: - The [camera capture pin](../camera/fc_connected_camera.md#camera-capture-configuration) (`PI0`) is pin 2 on the AD&IO port, marked above as `FMU_CAP1`. @@ -215,7 +215,7 @@ The **POWER1** & **POWER2** ports on the Pixhawk 6X uses the 6 circuit [2.00mm P **Absolute Maximum Ratings** -Under these conditions, the system will not draw any power (will not be operational) but will remain intact. +Under these conditions, the system will not draw any power (will not be operational), but will remain intact. 1. **POWER1** and **POWER2** inputs (operational range 4.1V to 5.7V, 0V to 10V undamaged) 2. **USB** input (operational range 4.1V to 5.7V, 0V to 6V undamaged) @@ -238,13 +238,11 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make px4_fmu-v6x_default ``` - - -## 디버그 포트 +## Debug Port {#debug_port} The [PX4 System Console](../debug/system_console.md) and [SWD interface](../debug/swd_debug.md) run on the **FMU Debug** port. diff --git a/docs/ko/flight_controller/pixhawk6x_pro.md b/docs/ko/flight_controller/pixhawk6x_pro.md index f68b51f3f5..acd5685fda 100644 --- a/docs/ko/flight_controller/pixhawk6x_pro.md +++ b/docs/ko/flight_controller/pixhawk6x_pro.md @@ -115,7 +115,7 @@ Mechanical data ::: -## 구매처 +## Where to Buy {#store} Order from [Holybro](https://holybro.com/products/pixhawk-6x-pro). @@ -140,7 +140,7 @@ The [Pixhawk 6X Wiring Quick Start](../assembly/quick_start_pixhawk6x.md) provid - [Holybro Pixhawk Jetson Baseboard](https://docs.holybro.com/autopilot/pixhawk-baseboards/pixhawk-jetson-baseboard) - [Holybro Pixhawk RPi CM4 Baseboard](https://docs.holybro.com/autopilot/pixhawk-baseboards/pixhawk-rpi-cm4-baseboard) -참고: +Notes: - The [camera capture pin](../camera/fc_connected_camera.md#camera-capture-configuration) (`PI0`) is pin 2 on the AD&IO port, marked above as `FMU_CAP1`. @@ -199,7 +199,7 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make px4_fmu-v6x_default ``` diff --git a/docs/ko/flight_controller/pixhawk_mini.md b/docs/ko/flight_controller/pixhawk_mini.md index 99a74fde7d..5cef4b678c 100644 --- a/docs/ko/flight_controller/pixhawk_mini.md +++ b/docs/ko/flight_controller/pixhawk_mini.md @@ -1,327 +1,7 @@ + + + diff --git a/docs/ko/flight_controller/pixhawk_series.md b/docs/ko/flight_controller/pixhawk_series.md index 7bca3dc03a..14e0cc7b1e 100644 --- a/docs/ko/flight_controller/pixhawk_series.md +++ b/docs/ko/flight_controller/pixhawk_series.md @@ -71,7 +71,7 @@ PX4 _developers_ need to know the FMU version of their board, as this is require 주요 차이점은 아래와 같습니다. -- **FMUv2:** Single board with STM32427VI processor ([Pixhawk 1 (Discontinued)](../flight_controller/pixhawk.md), [pix32](../flight_controller/holybro_pix32.md), [Pixfalcon](../flight_controller/pixfalcon.md), [Drotek DroPix](../flight_controller/dropix.md)) +- **FMUv2:** Single board with STM32427VI processor (Pixhawk 1 (discontinued), Holybro pix32 (discontinued), Pixfalcon (discontinued), Drotek DroPix (discontinued)) - **FMUv3:** Identical to FMUv2, but usable flash doubled to 2MB ([Hex Cube Black](../flight_controller/pixhawk-2.md),[CUAV Pixhack v3](../flight_controller/pixhack_v3.md),[mRo Pixhawk](../flight_controller/mro_pixhawk.md), [Pixhawk Mini (Discontinued)](../flight_controller/pixhawk_mini.md)) - **FMUv4:** Increased RAM. 더 빨라진 CPU. 더 많은 직렬 포트. No IO processor ([Pixracer](../flight_controller/pixracer.md)) - **FMUv4-PRO:** Slightly increased RAM. 더 많은 직렬 포트. IO processor ([Pixhawk 3 Pro](../flight_controller/pixhawk3_pro.md)) diff --git a/docs/ko/flight_controller/pixracer.md b/docs/ko/flight_controller/pixracer.md index 36f0e3c063..2da76d3c40 100644 --- a/docs/ko/flight_controller/pixracer.md +++ b/docs/ko/flight_controller/pixracer.md @@ -30,7 +30,7 @@ This autopilot is [supported](../flight_controller/autopilot_pixhawk_standard.md - OneShot PWM 출력(설정 가능) - 옵션 : 안전 스위치 및 부저 -## 구매처 +## Where to Buy {#store} Pixracer Pro is available from the [store.3dr.com](https://store.3dr.com/pixracer-pro/). @@ -217,7 +217,7 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make px4_fmu-v4_default ``` diff --git a/docs/ko/flight_controller/raccoonlab_fmu6x.md b/docs/ko/flight_controller/raccoonlab_fmu6x.md index 7fa7485a3b..c5a5af8388 100644 --- a/docs/ko/flight_controller/raccoonlab_fmu6x.md +++ b/docs/ko/flight_controller/raccoonlab_fmu6x.md @@ -130,7 +130,7 @@ The manufacturer [RaccoonLab Docs](https://docs.raccoonlab.co/guide/autopilot/RC 가장 정확한 최신 정보를 포함하고 있습니다. ::: -## 구매처 +## Where to Buy {#store} [RaccoonLab Store](https://raccoonlab.co/store) diff --git a/docs/ko/flight_controller/radiolink_pix6.md b/docs/ko/flight_controller/radiolink_pix6.md index ab54385075..ca8b1dd9ba 100644 --- a/docs/ko/flight_controller/radiolink_pix6.md +++ b/docs/ko/flight_controller/radiolink_pix6.md @@ -27,7 +27,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo - 32KB FRAM - FM25V02A - AT7456E OSD - 센서 - - Bosh BMI088 IMU (accel, gyro) + - Bosch BMI088 IMU (accel, gyro) - InvenSense ICM-42688 IMU (accel, gyro) - SPA06 barometer - IST8310 magnetometer @@ -48,7 +48,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo - Weight 80g - Size 94mm x 51.5mm x 14.5mm -## 구매처 +## Where to Buy {#store} [Radiolink Amazon](https://www.radiolink.com.cn/pix6_where_to_buy)(International users) @@ -278,7 +278,7 @@ In addition to the [basic configuration](../config/index.md), the following para ### Powering the PIX6 The PIX6 has 2 dedicated power monitor ports, each with a 6 pin connector. -One is the Analog power monitor (`POWER1`), and the others is the I2C power monitor (`POWER2`). +One is the Analog power monitor (`POWER1`), and the other is the I2C power monitor (`POWER2`). The power module that comes with the flight controller with a wide voltage input range of 2-12S (7.4-50.4V), a maximum detection current of 90A (single ESC maximum detection current is 22.5A), a BEC output voltage of 5.3±0.2V, and a BEC output current of 2A. diff --git a/docs/ko/flight_controller/raspberry_pi_pilotpi.md b/docs/ko/flight_controller/raspberry_pi_pilotpi.md index e497ee5d9f..14ac91f624 100644 --- a/docs/ko/flight_controller/raspberry_pi_pilotpi.md +++ b/docs/ko/flight_controller/raspberry_pi_pilotpi.md @@ -175,7 +175,7 @@ ADC 3 & 4 will have VCC driven by: 시스템 rc 스크립트는 해당 값을 확인하고, PX4가 시스템 부팅시 시작 여부를 결정합니다. - 켜짐: 자동으로 PX4 시작 -- 꺼짐: PX4를 시작하지 않습니다. +- Off: don't start PX4 ## 개발자 가이드 diff --git a/docs/ko/flight_controller/raspberry_pi_pilotpi_rpios.md b/docs/ko/flight_controller/raspberry_pi_pilotpi_rpios.md index f841c3aa95..1aadc63a83 100644 --- a/docs/ko/flight_controller/raspberry_pi_pilotpi_rpios.md +++ b/docs/ko/flight_controller/raspberry_pi_pilotpi_rpios.md @@ -125,7 +125,7 @@ Don't forget to turn off the switch when it is not needed. #### CSI 카메라 :::info -Enable CSI camera will stop anything works on I2C-0. +Enabling CSI camera will stop anything that works on I2C-0. ::: ```sh diff --git a/docs/ko/flight_controller/raspberry_pi_pilotpi_ubuntu_server.md b/docs/ko/flight_controller/raspberry_pi_pilotpi_ubuntu_server.md index 9ed4fe3bae..17549018a0 100644 --- a/docs/ko/flight_controller/raspberry_pi_pilotpi_ubuntu_server.md +++ b/docs/ko/flight_controller/raspberry_pi_pilotpi_ubuntu_server.md @@ -16,13 +16,13 @@ armhf와 arm64 arch가 모두 지원됩니다. - [Ubuntu Server 18.04.5 for RPi2](https://cdimage.ubuntu.com/releases/18.04.5/release/ubuntu-18.04.5-preinstalled-server-armhf+raspi2.img.xz) - [Ubuntu Server 18.04.5 for RPi3](https://cdimage.ubuntu.com/releases/18.04.5/release/ubuntu-18.04.5-preinstalled-server-armhf+raspi3.img.xz) - [Ubuntu Server 18.04.5 for RPi4](https://cdimage.ubuntu.com/releases/18.04.5/release/ubuntu-18.04.5-preinstalled-server-armhf+raspi4.img.xz) -- [Ubuntu Server 20.04.1 for RPi 2/3/4](https://cdimage.ubuntu.com/releases/20.04.1/release/ubuntu-20.04.2-preinstalled-server-arm64+raspi.img.xz) +- [Ubuntu Server 20.04.1 for RPi 2/3/4](https://old-releases.ubuntu.com/releases/focal/ubuntu-20.04.2-preinstalled-server-arm64+raspi.img.xz) #### arm64 - [Ubuntu Server 18.04.5 for RPi3](https://cdimage.ubuntu.com/releases/18.04.5/release/ubuntu-18.04.5-preinstalled-server-arm64+raspi3.img.xz) - [Ubuntu Server 18.04.5 for RPi4](https://cdimage.ubuntu.com/releases/18.04.5/release/ubuntu-18.04.5-preinstalled-server-arm64+raspi4.img.xz) -- [Ubuntu Server 20.04.1 for RPi 3/4](https://cdimage.ubuntu.com/releases/20.04.1/release/ubuntu-20.04.2-preinstalled-server-arm64+raspi.img.xz) +- [Ubuntu Server 20.04.1 for RPi 3/4](https://old-releases.ubuntu.com/releases/focal/ubuntu-20.04.2-preinstalled-server-arm64+raspi.img.xz) #### 최신 운영체제 @@ -206,7 +206,7 @@ Don't forget to turn off the switch when it is not needed! #### CSI 카메라 :::warning -Enable CSI camera will stop anything works on I2C-0. +Enabling CSI camera will stop anything that works on I2C-0. ::: ```sh diff --git a/docs/ko/flight_controller/spracingh7extreme.md b/docs/ko/flight_controller/spracingh7extreme.md index c96de351e2..ba0a030c3e 100644 --- a/docs/ko/flight_controller/spracingh7extreme.md +++ b/docs/ko/flight_controller/spracingh7extreme.md @@ -72,7 +72,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo - 36x36mm with 30.5\*30.5 mouting pattern, M4 holes. - 소프트 마운트 M4 ~ M3 그로밋이 제공됩니다. -## 구매처 +## Where to Buy {#store} The SPRacingH7EXTREME is available from the [Seriously Pro shop](https://shop.seriouslypro.com/sp-racing-h7-extreme). diff --git a/docs/ko/flight_controller/svehicle_e2.md b/docs/ko/flight_controller/svehicle_e2.md index 1e010d1aa5..04fafa37b6 100644 --- a/docs/ko/flight_controller/svehicle_e2.md +++ b/docs/ko/flight_controller/svehicle_e2.md @@ -58,7 +58,7 @@ It brings you ultimate performance, stability, and reliability in every aspect. - 1x Dedicated Debug Port - FMU Debug -## Purchase Channels +## Purchase Channels {#store} Order from [S-Vehicle](https://svehicle.cn/). diff --git a/docs/ko/flight_controller/thepeach_k1.md b/docs/ko/flight_controller/thepeach_k1.md index 75ba377045..8df064c216 100644 --- a/docs/ko/flight_controller/thepeach_k1.md +++ b/docs/ko/flight_controller/thepeach_k1.md @@ -11,6 +11,10 @@ It is based on the **Pixhawk-project FMUv3** open hardware design and runs **PX4 ![ThePeach FCC-K1](../../assets/flight_controller/thepeach_k1/main.png) +:::info +This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). +::: + ## 사양 - Main 프로세서: STM32F427VIT6 diff --git a/docs/ko/flight_controller/thepeach_r1.md b/docs/ko/flight_controller/thepeach_r1.md index a07044eeaa..0b85a90e30 100644 --- a/docs/ko/flight_controller/thepeach_r1.md +++ b/docs/ko/flight_controller/thepeach_r1.md @@ -11,6 +11,10 @@ It is based on the **Pixhawk-project FMUv3** open hardware design and runs **PX4 ![ThePeach_R1](../../assets/flight_controller/thepeach_r1/main.png) +:::info +This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). +::: + ## 사양 - Main 프로세서: STM32F427VIT6 diff --git a/docs/ko/flight_controller/x-mav_ap-h743r1.md b/docs/ko/flight_controller/x-mav_ap-h743r1.md index a7968d946c..7660e69631 100644 --- a/docs/ko/flight_controller/x-mav_ap-h743r1.md +++ b/docs/ko/flight_controller/x-mav_ap-h743r1.md @@ -26,7 +26,7 @@ It brings you ultimate performance, stability, and reliability in every aspect. - 내장 센서 : - Accel/Gyro: ICM-42688-P\*2(Version1), BMI270\*2(Version2) - Mag: QMC5883P - - Barometer: DPS310(Version1),SPL06(Version2) + - Barometer: SPL06 ### 인터페이스 @@ -45,7 +45,7 @@ It brings you ultimate performance, stability, and reliability in every aspect. - FMU Debug - IO 디버그 -## Purchase Channels +## Purchase Channels {#store} Order from [X-MAV](https://www.x-mav.cn/). @@ -92,7 +92,7 @@ The 7 FMU PWM outputs are in 3 groups: - A1 - A4 are in one group. - A5, A6 are in a 2nd group. -- A7 is in a 3nd group. +- A7 is in a 3rd group. Channels within the same group need to use the same output rate. If any channel in a group uses DShot then all channels in the group need to use DShot. @@ -132,7 +132,7 @@ make x-mav_ap-h743r1_default 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). -## 디버그 포트 +## Debug Port {#debug_port} ### SWD diff --git a/docs/ko/flight_modes/offboard.md b/docs/ko/flight_modes/offboard.md index 008b779940..acbc7e3a1d 100644 --- a/docs/ko/flight_modes/offboard.md +++ b/docs/ko/flight_modes/offboard.md @@ -2,17 +2,29 @@ +:::: warning + +Offboard control with ROS 2 requires _significant care_ to ensure that it is used safely. +Please read [ROS 2 Offboard Control](#ros-2-offboard-control) carefully to fully understand the risks involved when using it. +A good understanding of [PX4 controller diagrams](../flight_stack/controller_diagrams.md) is advised. + +:::tip +[PX4 ROS 2 Interface Library](../ros2/px4_ros2_interface_lib.md) provides a safer alternative. +::: + +:::: + The vehicle obeys position, velocity, acceleration, attitude, attitude rates or thrust/torque setpoints provided by some source that is external to the flight stack, such as a companion computer. The setpoints may be provided using MAVLink (or a MAVLink API such as [MAVSDK](https://mavsdk.mavlink.io/)) or by [ROS 2](../ros2/index.md). PX4 requires that the external controller provides a continuous 2Hz "proof of life" signal, by streaming any of the supported MAVLink setpoint messages or the ROS 2 [OffboardControlMode](../msg_docs/OffboardControlMode.md) message. -PX4 enables offboard control only after receiving the signal for more than a second, and will regain control if the signal stops. +PX4 enables switching to offboard control mode only after receiving the signal for more than a second, and will failsafe (controlled by [COM_OBL_RC_ACT](../advanced_config/parameter_reference.md#COM_OBL_RC_ACT)) if the signal stops. ::: info -- 이 모드에는 위치 또는 자세/태도 정보(GPS, 광학 흐름, 시각-관성 주행 거리 측정, 모캡 등)가 필요합니다. -- RC control is disabled except to change modes (you can also fly without any manual controller at all by setting the parameter [COM_RC_IN_MODE](../advanced_config/parameter_reference.md#COM_RC_IN_MODE) to 4: Stick input disabled). -- The vehicle must be already be receiving a stream of MAVLink setpoint messages or ROS 2 [OffboardControlMode](../msg_docs/OffboardControlMode.md) messages before arming in offboard mode or switching to offboard mode when flying. +- This mode requires position or pose/attitude information - e.g. GPS, optical flow, visual-inertial odometry, mocap, etc. depending on the type of offboard setpoints that the external controller sends. +- Manual control is disabled except to change modes (you can also fly without any manual controller at all by setting the parameter [COM_RC_IN_MODE](../advanced_config/parameter_reference.md#COM_RC_IN_MODE) to `4: Disable manual control`). +- The vehicle must already be receiving a stream of MAVLink setpoint messages or ROS 2 [OffboardControlMode](../msg_docs/OffboardControlMode.md) messages before arming in offboard mode or switching to offboard mode when flying. - The vehicle will exit offboard mode if MAVLink setpoint messages or `OffboardControlMode` are not received at a rate of > 2Hz. - Not all coordinate frames and field values allowed by MAVLink are supported for all setpoint messages and vehicles. Read the sections below _carefully_ to ensure only supported values are used. @@ -38,13 +50,37 @@ Note that offboard mode only supports a very limited set of MAVLink commands and Operations, like taking off, landing, return to launch, may be best handled using the appropriate modes. Operations like uploading, downloading missions can be performed in any mode. -## ROS 2 Messages +## ROS 2 Offboard Control + +This section describes how to perform offboard control through one of the direct ROS 2 interfaces: UXRCE-DDS or Zenoh. + +When using direct ROS 2 offboard control, PX4 setpoint messages generated by external controllers are injected into the [PX4 control pipeline](../flight_stack/controller_diagrams.md). +Because messages from internal and external controllers are indistinguishable within PX4, precise synchronization is required in order to avoid the controllers writing conflicting messages to the same topic. + +In Offboard mode (only), an external system can use [`OffboardControlMode`](#the-offboardcontrolmode-px4-message) to specify which setpoint topics PX4 should publish/not publish, allowing them to be written safely by an external controller. + +::: warning + +PX4 has no means of filtering and distinguishing ROS 2 messages from internal messages, in any mode. +In order to interwork safely, the external controller must: + +- Publish PX4 setpoint messages **ONLY** in Offboard mode. +- Specify which setpoints it will write using the `OffboardControlMode` topic. +- Stream the `OffboardControlMode` topic as a keep-alive signal. +- Stream the setpoints it wants: unlike with MAVLink, PX4 won't trigger a failsafe if setpoints aren't sent regularly. + +If external setpoints are sent in any other flight mode, or they overwrite topics that have not been disabled by PX4 when in offboard mode, collisions are likely. +This will result in unexpected, and possibly catastrophic, behaviour. + +::: + +### The `OffboardControlMode` PX4 message The following ROS 2 messages and their particular fields and field values are allowed for the specified frames. In addition to providing heartbeat functionality, `OffboardControlMode` has two other main purposes: -1. Controls the level of the [PX4 control architecture](../flight_stack/controller_diagrams.md) at which offboard setpoints must be injected, and disables the bypassed controllers. -2. Determines which valid estimates (position or velocity) are required, and also which setpoint messages should be used. +1. Controls which internal PX4 control modules of the [PX4 control architecture](../flight_stack/controller_diagrams.md) shall remain active and which ones shall be disabled when the vehicle is in Offboard Mode. +2. Determines which valid estimates (position, velocity, etc.) are required. The `OffboardControlMode` message is defined as shown. @@ -69,33 +105,48 @@ For rovers see the [rover section](#rover). The fields are ordered in terms of priority such that `position` takes precedence over `velocity` and later fields, `velocity` takes precedence over `acceleration`, and so on. The first field that has a non-zero value (from top to bottom) defines what valid estimate is required in order to use offboard mode, and the setpoint message(s) that can be used. -For example, if the `acceleration` field is the first non-zero value, then PX4 requires a valid `velocity estimate`, and the setpoint must be specified using the `TrajectorySetpoint` message. +For example, if the `acceleration` field is the first non-zero value, then PX4 requires a valid `attitude estimate`, and the setpoint must be specified using the `TrajectorySetpoint` message. | desired control quantity | position field | velocity field | acceleration field | attitude field | body_rate field | thrust_and_torque field | direct_actuator field | required estimate | required message | | ------------------------------------------------------- | -------------- | -------------- | ------------------ | -------------- | ------------------------------------ | ----------------------------------------------------------------- | ------------------------------------------ | ----------------- | ------------------------------------------------------------------------------------------------------------------------------- | | position (NED) | ✓ | - | - | - | - | - | - | position | [TrajectorySetpoint](../msg_docs/TrajectorySetpoint.md) | | velocity (NED) | ✗ | ✓ | - | - | - | - | - | velocity | [TrajectorySetpoint](../msg_docs/TrajectorySetpoint.md) | -| acceleration (NED) | ✗ | ✗ | ✓ | - | - | - | - | velocity | [TrajectorySetpoint](../msg_docs/TrajectorySetpoint.md) | -| attitude (FRD) | ✗ | ✗ | ✗ | ✓ | - | - | - | none | [VehicleAttitudeSetpoint](../msg_docs/VehicleAttitudeSetpoint.md) | -| body_rate (FRD) | ✗ | ✗ | ✗ | ✗ | ✓ | - | - | none | [VehicleRatesSetpoint](../msg_docs/VehicleRatesSetpoint.md) | +| acceleration (NED) | ✗ | ✗ | ✓ | - | - | - | - | attitude | [TrajectorySetpoint](../msg_docs/TrajectorySetpoint.md) | +| attitude (FRD) | ✗ | ✗ | ✗ | ✓ | - | - | - | attitude | [VehicleAttitudeSetpoint](../msg_docs/VehicleAttitudeSetpoint.md) | +| body_rate (FRD) | ✗ | ✗ | ✗ | ✗ | ✓ | - | - | angular velocity | [VehicleRatesSetpoint](../msg_docs/VehicleRatesSetpoint.md) | | thrust and torque (FRD) | ✗ | ✗ | ✗ | ✗ | ✗ | ✓ | - | none | [VehicleThrustSetpoint](../msg_docs/VehicleThrustSetpoint.md) and [VehicleTorqueSetpoint](../msg_docs/VehicleTorqueSetpoint.md) | | direct motors and servos | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✓ | none | [ActuatorMotors](../msg_docs/ActuatorMotors.md) and [ActuatorServos](../msg_docs/ActuatorServos.md) | -where ✓ means that the bit is set, ✘ means that the bit is not set and `-` means that the bit is value is irrelevant. +where ✓ means that the bit is set, ✘ means that the bit is not set and `-` means that the bit value is irrelevant. :::info Before using offboard mode with ROS 2, please spend a few minutes understanding the different [frame conventions](../ros2/user_guide.md#ros-2-px4-frame-conventions) that PX4 and ROS 2 use. ::: -### 콥터 +In the following, the different setpoint messages for the main supported airframes are explained. +For fixed-wing offboard control, please refer to the [PX4 ROS 2 Interface Library](../ros2/px4_ros2_interface_lib.md). + +### 멀티콥터 - [px4_msgs::msg::TrajectorySetpoint](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/TrajectorySetpoint.msg) + - 다음 입력 조합이 지원됩니다. - Position setpoint (`position` different from `NaN`). Non-`NaN` values of velocity and acceleration are used as feedforward terms for the inner loop controllers. - - Velocity setpoint (`velocity` different from `NaN` and `position` set to `NaN`). Non-`NaN` values acceleration are used as feedforward terms for the inner loop controllers. + - Velocity setpoint (`velocity` different from `NaN` and `position` set to `NaN`). Non-`NaN` values of acceleration are used as feedforward terms for the inner loop controllers. - Acceleration setpoint (`acceleration` different from `NaN` and `position` and `velocity` set to `NaN`) - - All values are interpreted in NED (Nord, East, Down) coordinate system and the units are `[m]`, `[m/s]` and `[m/s^2]` for position, velocity and acceleration, respectively. + - All values are interpreted in NED (North, East, Down) coordinate system and the units are `[m]`, `[m/s]` and `[m/s^2]` for position, velocity and acceleration, respectively. + + ::: warning + + Position, velocity and acceleration control for multicopters are all handled by the `mc_pos_control` module. + This module is enabled if any of `position`, `velocity` and `acceleration` fields are set to true. + However, only the content of the `TrajectorySetpoint` messages determines which of the three controllers shall run. + + This means that even if `OffboardControlMode` messages carry the intention of velocity control (only `velocity` field is set) but non-`NaN` position values are sent in the `TrajectorySetpoint` messages, then PX4 will keep running the position controller. + + +::: - [px4_msgs::msg::VehicleAttitudeSetpoint](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/VehicleAttitudeSetpoint.msg) - The following input combination is supported: @@ -194,13 +245,11 @@ The following offboard control modes bypass all internal PX4 control loops and s - [px4_msgs::msg::ActuatorMotors](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/ActuatorMotors.msg) + [px4_msgs::msg::ActuatorServos](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/ActuatorServos.msg) - You directly control the motor outputs and/or servo outputs. - - Currently works at lower level than then `control_allocator` module. - Do not publish these messages when not in offboard mode. - All the values normalized in `[-1, 1]`. For outputs that do not support negative values, negative entries map to `NaN`. - `NaN` maps to disarmed. -## MAVLink Messages +## MAVLink Offboard Control The following MAVLink messages and their particular fields and field values are allowed for the specified vehicle frames. diff --git a/docs/ko/flight_modes/return.md b/docs/ko/flight_modes/return.md index bbc6972f5e..4dd1e5540b 100644 --- a/docs/ko/flight_modes/return.md +++ b/docs/ko/flight_modes/return.md @@ -110,11 +110,13 @@ The behaviour is fairly complex because it depends on the flight mode, and wheth Mission _with_ landing pattern: -- **Mission mode:** Mission is continued in "fast-forward mode" (jumps, delay and any other non-position commands ignored, loiter and other position waypoints converted to simple waypoints) and then lands. +- **Mission mode:** + - Mission is continued in "fast-forward mode" and then lands. + - DO_JUMP commands, delays and other non-position mission items are ignored, and loiter and other position waypoints are converted to simple waypoints. - **Auto mode other than mission mode:** - Ascend to a safe [minimum return altitude](#minimum-return-altitude) above any expected obstacles. - 가장 가까운 웨이포인트 (착륙 WP가 아닌 FW의 경우)로 직접 비행하고 웨이포인트 고도로 하강합니다. - - 그 웨이포인트에서 빨리 감기 모드로 임무를 계속 수행합니다. + - Continue mission in fast forward mode from that waypoint, using the same traversal rules as above. - **Manual modes:** - Ascend to a safe [minimum return altitude](#minimum-return-altitude) above any expected obstacles. - 착륙 순서 위치로 직접 비행하고 웨이포인트 고도로 하강합니다. @@ -124,7 +126,7 @@ Mission _without_ landing pattern defined: - **Mission mode:** - 이전 웨이포인트에서 시작하여 "빨리 후진"(역방향) 비행한 미션 - - 점프, 지연 및 기타 위치가 아닌 명령은 무시되며, 선회 및 기타 위치 웨이포인트는 단순 웨이포인트로 변환됩니다. + - DO_JUMP commands, delays and other non-position mission items are ignored, and loiter and other position waypoints are converted to simple waypoints. - VTOL은 임무를 역으로 비행하기 전에 필요한 경우에는 고정익 모드로 전환합니다. - On reaching waypoint 1, the vehicle ascends to the [minimum return altitude](#minimum-return-altitude) and flies to the home position (where it [lands or waits](#loiter-landing-at-destination)). - **Auto mode other than mission mode:** @@ -136,6 +138,11 @@ Mission _without_ landing pattern defined: 복귀 모드에서 임무가 변경되면 위와 동일한 규칙에 따라 새 임무에 따라 행동이 재평가됩니다 (예 : 새 임무에 착륙 순서가없고 임무를 수행중인 경우 임무가 반전 됨). +:::info +For `RTL_TYPE=4`, PX4 currently chooses between continuing to a mission landing and reversing toward home by comparing raw mission item indices. +This is only an approximation of the flown path length, because the number if mission items is not indicative of the distance remaining and non-position items are also counted. +::: + ### 가장 가까운 안전한 대상 복귀 유형 (RTL_TYPE = 3) 이 복귀 유형에서 기체의 동작: @@ -205,15 +212,15 @@ For this reason fixed-wing vehicles are configured to use [Mission landing/reall The RTL parameters are listed in [Parameter Reference > Return Mode](../advanced_config/parameter_reference.md#return-mode) (and summarised below). -| 매개변수 | 설명 | -| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [RTL_TYPE](../advanced_config/parameter_reference.md#RTL_TYPE) | Return mechanism (path and destination).
`0`: Return to a rally point or home (whichever is closest) via direct path.
`1`: Return to a rally point or the mission landing pattern start point (whichever is closest), via direct path. 임무 착륙 또는 집결 지점이 모두 정의되지 않은 경우에는 직접 경로를 통해 홈으로 복귀합니다. If the destination is a mission landing pattern, follow the pattern to land.
`2`: Use mission path fast-forward to landing if a landing pattern is defined, otherwise fast-reverse to home. 랠리포인트를 무시합니다. Fly direct to home if no mission plan is defined.
`3`: Return via direct path to closest destination: home, start of mission landing pattern or safe point. 목적지가 임무 착륙 패턴인 경우 패턴을 따라 착륙합니다. | -| [RTL_RETURN_ALT](../advanced_config/parameter_reference.md#RTL_RETURN_ALT) | Return altitude in meters (default: 60m) when [RTL_CONE_ANG](../advanced_config/parameter_reference.md#RTL_CONE_ANG) is 0. 이미 이 값을 초과하면 기체는 현재 고도로 복귀합니다. | -| [RTL_DESCEND_ALT](../advanced_config/parameter_reference.md#RTL_DESCEND_ALT) | 기체가 더 높은 복귀 고도에서 감속하거나 초기 하강을 중지할 최소 복귀 고도 및 고도 (기본값 : 30m) | -| [RTL_LAND_DELAY](../advanced_config/parameter_reference.md#RTL_LAND_DELAY) | Time to wait at `RTL_DESCEND_ALT` before landing (default: 0.5s) -by default this period is short so that the vehicle will simply slow and then land immediately. If set to -1 the system will loiter at `RTL_DESCEND_ALT` rather than landing. 이 지연은 랜딩 기어가 배치될 시간을 설정합니다. (자동으로 동작함). | -| [RTL_MIN_DIST](../advanced_config/parameter_reference.md#RTL_MIN_DIST) | 홈 위치에서 "원뿔"에 지정된 복귀 고도까지 상승을 시작하는 최소 수평 거리. If the vehicle is horizontally closer than this distance to home, it will return at its current altitude or `RTL_DESCEND_ALT` (whichever is higher) instead of first ascending to RTL_RETURN_ALT. | -| [RTL_CONE_ANG](../advanced_config/parameter_reference.md#RTL_CONE_ANG) | 기체 RTL 리턴 고도를 정의하는 원뿔의 반각. 값 (도) : 0, 25, 45, 65, 80, 90. Note that 0 is "no cone" (always return at `RTL_RETURN_ALT` or higher), while 90 indicates that the vehicle must return at the current altitude or `RTL_DESCEND_ALT` (whichever is higher). | -| [COM_RC_OVERRIDE](../advanced_config/parameter_reference.md#COM_RC_OVERRIDE) | Controls whether stick movement on a multicopter (or VTOL in MC mode) causes a mode change to [Position mode](../flight_modes_mc/position.md) (except when vehicle is handling a critical battery failsafe). 자동 모드와 오프보드 모드에 대해 별도로 활성화할 수 있으며, 기본적으로 자동 모드에서 활성화됩니다. | -| [COM_RC_STICK_OV](../advanced_config/parameter_reference.md#COM_RC_STICK_OV) | The amount of stick movement that causes a transition to [Position mode](../flight_modes_mc/position.md) (if [COM_RC_OVERRIDE](#COM_RC_OVERRIDE) is enabled). | -| [RTL_LOITER_RAD](../advanced_config/parameter_reference.md#RTL_LOITER_RAD) | [Fixed-wing Only] The radius of the loiter circle (at [RTL_LAND_DELAY](#RTL_LAND_DELAY)). | -| [MIS_TKO_LAND_REQ](../advanced_config/parameter_reference.md#MIS_TKO_LAND_REQ) | Specify whether a mission landing or takeoff pattern is _required_. Generally fixed-wing vehicles set this to require a landing pattern but VTOL do not. | +| 매개변수 | 설명 | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [RTL_TYPE](../advanced_config/parameter_reference.md#RTL_TYPE) | Return mechanism (path and destination).
`0`: Return to a rally point or home (whichever is closest) via direct path.
`1`: Return to a rally point or the mission landing pattern start point (whichever is closest), via direct path. 임무 착륙 또는 집결 지점이 모두 정의되지 않은 경우에는 직접 경로를 통해 홈으로 복귀합니다. If the destination is a mission landing pattern, follow the pattern to land.
`2`: Use the mission path to landing while skipping DO_JUMP and other non-position mission items if a landing pattern is defined, otherwise fast-reverse to home with the same traversal rules. 랠리포인트를 무시합니다. Fly direct to home if no mission plan is defined.
`3`: Return via direct path to closest destination: home, start of mission landing pattern or safe point. 목적지가 임무 착륙 패턴인 경우 패턴을 따라 착륙합니다. | +| [RTL_RETURN_ALT](../advanced_config/parameter_reference.md#RTL_RETURN_ALT) | Return altitude in meters (default: 60m) when [RTL_CONE_ANG](../advanced_config/parameter_reference.md#RTL_CONE_ANG) is 0. 이미 이 값을 초과하면 기체는 현재 고도로 복귀합니다. | +| [RTL_DESCEND_ALT](../advanced_config/parameter_reference.md#RTL_DESCEND_ALT) | 기체가 더 높은 복귀 고도에서 감속하거나 초기 하강을 중지할 최소 복귀 고도 및 고도 (기본값 : 30m) | +| [RTL_LAND_DELAY](../advanced_config/parameter_reference.md#RTL_LAND_DELAY) | Time to wait at `RTL_DESCEND_ALT` before landing (default: 0.5s) -by default this period is short so that the vehicle will simply slow and then land immediately. If set to -1 the system will loiter at `RTL_DESCEND_ALT` rather than landing. 이 지연은 랜딩 기어가 배치될 시간을 설정합니다. (자동으로 동작함). | +| [RTL_MIN_DIST](../advanced_config/parameter_reference.md#RTL_MIN_DIST) | 홈 위치에서 "원뿔"에 지정된 복귀 고도까지 상승을 시작하는 최소 수평 거리. If the vehicle is horizontally closer than this distance to home, it will return at its current altitude or `RTL_DESCEND_ALT` (whichever is higher) instead of first ascending to RTL_RETURN_ALT. | +| [RTL_CONE_ANG](../advanced_config/parameter_reference.md#RTL_CONE_ANG) | 기체 RTL 리턴 고도를 정의하는 원뿔의 반각. 값 (도) : 0, 25, 45, 65, 80, 90. Note that 0 is "no cone" (always return at `RTL_RETURN_ALT` or higher), while 90 indicates that the vehicle must return at the current altitude or `RTL_DESCEND_ALT` (whichever is higher). | +| [COM_RC_OVERRIDE](../advanced_config/parameter_reference.md#COM_RC_OVERRIDE) | Controls whether stick movement on a multicopter (or VTOL in MC mode) causes a mode change to [Position mode](../flight_modes_mc/position.md) (except when vehicle is handling a critical battery failsafe). 자동 모드와 오프보드 모드에 대해 별도로 활성화할 수 있으며, 기본적으로 자동 모드에서 활성화됩니다. | +| [COM_RC_STICK_OV](../advanced_config/parameter_reference.md#COM_RC_STICK_OV) | The amount of stick movement that causes a transition to [Position mode](../flight_modes_mc/position.md) (if [COM_RC_OVERRIDE](#COM_RC_OVERRIDE) is enabled). | +| [RTL_LOITER_RAD](../advanced_config/parameter_reference.md#RTL_LOITER_RAD) | [Fixed-wing Only] The radius of the loiter circle (at [RTL_LAND_DELAY](#RTL_LAND_DELAY)). | +| [MIS_TKO_LAND_REQ](../advanced_config/parameter_reference.md#MIS_TKO_LAND_REQ) | Specify whether a mission landing or takeoff pattern is _required_. Generally fixed-wing vehicles set this to require a landing pattern but VTOL do not. | diff --git a/docs/ko/flight_modes_fw/mission.md b/docs/ko/flight_modes_fw/mission.md index fe14d439ae..c74baf6d86 100644 --- a/docs/ko/flight_modes_fw/mission.md +++ b/docs/ko/flight_modes_fw/mission.md @@ -61,7 +61,7 @@ Missions can be paused by switching out of mission mode to any other mode (such If the vehicle was not capturing images when it was paused, on resuming it will head from its _current position_ towards the same waypoint as it as was heading towards originally. If the vehicle was capturing images (has camera trigger items) it will instead head from its current position towards the last waypoint it traveled through (before pausing), and then retrace its path at the same speed and with the same camera triggering behaviour. This ensures that in survey/camera missions the planned path is captured. -A mission can be uploaded while the vehicle is paused, in which which case the current active mission item is set to 1. +A mission can be uploaded while the vehicle is paused, in which case the current active mission item is set to 1. :::info When a mission is paused while the camera on the vehicle was triggering, PX4 sets the current active mission item to the previous waypoint, so that when the mission is restarted the vehicle will retrace its last mission leg. @@ -100,8 +100,8 @@ _QGroundControl_ provides additional GCS-level mission handling support (in addi 더 자세한 정보는 다음을 참고하십시오. -- [Remove mission after vehicle lands](https://docs.qgroundcontrol.com/master/en/qgc-user-guide/releases/stable_v3.2_long.html#remove-mission-after-vehicle-lands) -- [Resume mission after Return mode](https://docs.qgroundcontrol.com/master/en/qgc-user-guide/releases/stable_v3.2_long.html#resume-mission) +- [Remove mission after vehicle lands](https://docs.qgroundcontrol.com/Stable_V4.3/en/qgc-user-guide/releases/stable_v3.2_long.html#remove-mission-after-vehicle-lands) +- [Resume mission after Return mode](https://docs.qgroundcontrol.com/Stable_V4.3/en/qgc-user-guide/releases/stable_v3.2_long.html#resume-mission) ## Mission Parameters @@ -215,7 +215,7 @@ The diagram below shows the sorts of paths that you might expect. ![acc-rad](../../assets/flying/acceptance_radius_mission.png) Vehicles switch to the next waypoint as soon as they enter the acceptance radius. -This is defined by the "L1 distance", which is is computed from two parameters: [NPFG_DAMPING](../advanced_config/parameter_reference.md#NPFG_DAMPING) and [NPFG_PERIOD](../advanced_config/parameter_reference.md#NPFG_PERIOD), and the current ground speed. +This is defined by the "L1 distance", which is computed from two parameters: [NPFG_DAMPING](../advanced_config/parameter_reference.md#NPFG_DAMPING) and [NPFG_PERIOD](../advanced_config/parameter_reference.md#NPFG_PERIOD), and the current ground speed. By default, it's about 70 meters. The equation is: @@ -317,7 +317,7 @@ On _QGroundControl_ a popup button appears during landing to enable this. Aborting the landing results in a climb out to an orbit pattern centered above the land waypoint. The maximum of the aircraft's current altitude and [MIS_LND_ABRT_ALT](#MIS_LND_ABRT_ALT) is set as the abort orbit altitude height relative to (above) the landing waypoint. -Landing configuration (e.g. flaps, spoilers, landing airspeed) is disabled during abort and the aicraft flies in cruise conditions. +Landing configuration (e.g. flaps, spoilers, landing airspeed) is disabled during abort and the aircraft flies in cruise conditions. The abort command is disabled during the flare for safety. Operators may still manually abort the landing by switching to any manual mode, such as [Stabilized mode](../flight_modes_fw/stabilized.md)), though it should be noted that this is risky! @@ -357,7 +357,7 @@ Note that if the wheel controller is enabled ([FW_W_EN](#FW_W_EN)), the controll :::info Nudging should not be used to supplement poor position control tuning. -If the vehicle is regularly showing poor tracking peformance on a defined path, please refer to the [fixed-wing control tuning guide](../flight_modes_fw/position.md) for instruction. +If the vehicle is regularly showing poor tracking performance on a defined path, please refer to the [fixed-wing control tuning guide](../flight_modes_fw/position.md) for instruction. ::: | 매개변수 | 설명 | @@ -368,7 +368,7 @@ If the vehicle is regularly showing poor tracking peformance on a defined path, ### Near Ground Safety Constraints -In landing mode, the distance sensor is used to determine proximity to the ground, and the airframe's geometry is used to calculate roll contraints to prevent wing strike. +In landing mode, the distance sensor is used to determine proximity to the ground, and the airframe's geometry is used to calculate roll constraints to prevent wing strike. ![Fixed-wing landing nudging](../../assets/flying/wing_geometry.png) diff --git a/docs/ko/flight_modes_fw/takeoff.md b/docs/ko/flight_modes_fw/takeoff.md index 7cce984ec9..e0b54a6dc6 100644 --- a/docs/ko/flight_modes_fw/takeoff.md +++ b/docs/ko/flight_modes_fw/takeoff.md @@ -14,7 +14,7 @@ Vehicles are [hand or catapult launched](#catapult-hand-launch) by default, but - Flying vehicles will failsafe if they lose the altitude estimate. - Disarmed vehicles can switch to mode without valid altitude estimate but can't arm. - RC control switches can be used to change flight modes. -- RC stick movement is ignored in catapult takeoff but can can be used to nudge the vehicle in runway takeoff. +- RC stick movement is ignored in catapult takeoff but can be used to nudge the vehicle in runway takeoff. - The [Failure Detector](../config/safety.md#failure-detector) will automatically stop the engines if there is a problem on takeoff. @@ -85,6 +85,7 @@ The vehicle always respects normal FW max/min throttle settings during takeoff ( In _catapult/hand-launch mode_ the vehicle waits to detect launch (based on acceleration trigger). On launch it enables the motor(s) and climbs with the maximum climb rate [FW_T_CLMB_MAX](#FW_T_CLMB_MAX) while keeping the pitch setpoint above [FW_TKO_PITCH_MIN](#FW_TKO_PITCH_MIN). Once it reaches [MIS_TAKEOFF_ALT](#MIS_TAKEOFF_ALT) it will automatically switch to [Hold mode](../flight_modes_fw/hold.md) and loiter. +It is possible to delay the activation of the motors and control surfaces separately, see parameters [FW_LAUN_MOT_DEL](#FW_LAUN_MOT_DEL), [FW_LAUN_CS_LK_DY](#FW_LAUN_CS_LK_DY) and [CA_CS_LAUN_LK](#CA_CS_LAUN_LK). The later is also exposed in the actuator configuration page under the advanced view. All RC stick movement is ignored during the full takeoff sequence. @@ -99,16 +100,18 @@ To launch in this mode: The _launch detector_ is affected by the following parameters: -| 매개변수 | 설명 | -| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | -| [FW_LAUN_DETCN_ON](../advanced_config/parameter_reference.md#FW_LAUN_DETCN_ON) | Enable automatic launch detection. If disabled motors spin up on arming already | -| [FW_LAUN_AC_THLD](../advanced_config/parameter_reference.md#FW_LAUN_AC_THLD) | Acceleration threshold (acceleration in body-forward direction must be above this value) | -| [FW_LAUN_AC_T](../advanced_config/parameter_reference.md#FW_LAUN_AC_T) | Trigger time (acceleration must be above threshold for this amount of seconds) | -| [FW_LAUN_MOT_DEL](../advanced_config/parameter_reference.md#FW_LAUN_MOT_DEL) | Delay from launch detection to motor spin up | +| 매개변수 | 설명 | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | +| [FW_LAUN_DETCN_ON](../advanced_config/parameter_reference.md#FW_LAUN_DETCN_ON) | Enable automatic launch detection. If disabled motors spin up on arming already | +| [FW_LAUN_AC_THLD](../advanced_config/parameter_reference.md#FW_LAUN_AC_THLD) | Acceleration threshold (norm of acceleration must be above this value) | +| [FW_LAUN_AC_T](../advanced_config/parameter_reference.md#FW_LAUN_AC_T) | Trigger time (acceleration must be above threshold for this amount of seconds) | +| [FW_LAUN_MOT_DEL](../advanced_config/parameter_reference.md#FW_LAUN_MOT_DEL) | Delay from launch detection to motor spin up | +| [FW_LAUN_CS_LK_DY](../advanced_config/parameter_reference.md#FW_LAUN_CS_LK_DY) | Delay from launch detection to unlocking the control surfaces | +| [CA_CS_LAUN_LK](../advanced_config/parameter_reference.md#CA_CS_LAUN_LK) | Bitmask to select which control surfaces are to be locked during launch | ## Runway Takeoff {#runway_launch} -Runway takeoffs can be used by vehicles with landing gear and and steerable wheel (only). +Runway takeoffs can be used by vehicles with landing gear and steerable wheel (only). You will first need to enable the wheel controller using the parameter [FW_W_EN](#FW_W_EN). Vehicle should be centered and aligned with runway when takeoff is initiated. diff --git a/docs/ko/flight_modes_mc/follow_me.md b/docs/ko/flight_modes_mc/follow_me.md index 154a7a2636..58edba9113 100644 --- a/docs/ko/flight_modes_mc/follow_me.md +++ b/docs/ko/flight_modes_mc/follow_me.md @@ -31,7 +31,7 @@ By default it will follow from directly behind the target at a distance of 8 met Users can adjust the follow angle, height and distance using an RC controller as shown above: - _Follow Height_ is controlled with the `up-down` input ("Throttle"). - Center the stick to keep follow the target at a constant hight. Raise or lower the stick to adjust height. + Center the stick to keep follow the target at a constant height. Raise or lower the stick to adjust height. - _Follow Distance_ is controlled with the `forward-back` input ("Pitch"). Pushing the stick forward increases the follow distance, pulling it back decreases the distance. - _Follow Angle_ is controlled with the `left-right` input ("Roll"). @@ -117,7 +117,7 @@ The altitude control mode determine whether the vehicle altitude is relative to - `2D + Terrain` makes the drone follow at a fixed height relative to the terrain underneath it, using information from a distance sensor. - If the vehicle does not have a distance sensor following will be identical to `2D tracking`. - Distance sensors aren't always accurate and vehicles may be "jumpy" when flying in this mode. - - Note that that height is relative to the ground underneath the vehicle, not the follow target. + - Note that height is relative to the ground underneath the vehicle, not the follow target. The drone may not follow altitude changes of the target! - `3D tracking` mode makes the drone follow at a height relative to the follow target, as supplied by its GPS sensor. diff --git a/docs/ko/flight_modes_mc/mission.md b/docs/ko/flight_modes_mc/mission.md index 630e542ee5..01ac5535bc 100644 --- a/docs/ko/flight_modes_mc/mission.md +++ b/docs/ko/flight_modes_mc/mission.md @@ -64,7 +64,7 @@ Missions can be paused by switching out of mission mode to any other mode (such If the vehicle was not capturing images when it was paused, on resuming it will head from its _current position_ towards the same waypoint as it as was heading towards originally. If the vehicle was capturing images (has camera trigger items) it will instead head from its current position towards the last waypoint it traveled through (before pausing), and then retrace its path at the same speed and with the same camera triggering behaviour. This ensures that in survey/camera missions the planned path is captured. -A mission can be uploaded while the vehicle is paused, in which which case the current active mission item is set to 1. +A mission can be uploaded while the vehicle is paused, in which case the current active mission item is set to 1. :::info When a mission is paused while the camera on the vehicle was triggering, PX4 sets the current active mission item to the previous waypoint, so that when the mission is restarted the vehicle will retrace its last mission leg. @@ -100,8 +100,8 @@ _QGroundControl_ provides additional GCS-level mission handling support (in addi 더 자세한 정보는 다음을 참고하십시오. -- [Remove mission after vehicle lands](https://docs.qgroundcontrol.com/master/en/qgc-user-guide/releases/stable_v3.2_long.html#remove-mission-after-vehicle-lands) -- [Resume mission after Return mode](https://docs.qgroundcontrol.com/master/en/qgc-user-guide/releases/stable_v3.2_long.html#resume-mission) +- [Remove mission after vehicle lands](https://docs.qgroundcontrol.com/Stable_V4.3/en/qgc-user-guide/releases/stable_v3.2_long.html#remove-mission-after-vehicle-lands) +- [Resume mission after Return mode](https://docs.qgroundcontrol.com/Stable_V4.3/en/qgc-user-guide/releases/stable_v3.2_long.html#resume-mission) ## Mission Parameters diff --git a/docs/ko/flight_modes_mc/position.md b/docs/ko/flight_modes_mc/position.md index a70a503627..e2d5aa329b 100644 --- a/docs/ko/flight_modes_mc/position.md +++ b/docs/ko/flight_modes_mc/position.md @@ -78,7 +78,7 @@ All the parameters in the [Multicopter Position Control](../advanced_config/para ### Position Loss/Safety Position mode is dependent on having an acceptable position estimate. -If the estimate falls below acceptable levels, for example due to GPS loss, this may trigger a [Position (GPS) Loss Failsafe](../config/safety.md#position-gnss-loss-failsafe). +If the estimate falls below acceptable levels, for example due to GPS loss, this may trigger a [Position (GPS) Loss Failsafe](../config/safety.md#position-loss-failsafe). Depending on configuration, whether you have a remote control, and whether there is an adequate altitude estimate, PX4 may switch to altitude mode, manual mode, land mode or terminate. ## See Also diff --git a/docs/ko/flight_modes_mc/return.md b/docs/ko/flight_modes_mc/return.md index 3d2c1d8ad1..e2b1685402 100644 --- a/docs/ko/flight_modes_mc/return.md +++ b/docs/ko/flight_modes_mc/return.md @@ -48,7 +48,7 @@ This is useful when there are few obstacles near the destination, because it may ![Return mode cone](../../assets/flying/rtl_cone.jpg) -The cone affects the minimum return altitude if return mode is triggered within the cylinder defined by the maximum cone radius and `RTL_RETURN_ALT`: outside this cyclinder `RTL_RETURN_ALT` is used. +The cone affects the minimum return altitude if return mode is triggered within the cylinder defined by the maximum cone radius and `RTL_RETURN_ALT`: outside this cylinder `RTL_RETURN_ALT` is used. Inside the code the minimum return altitude is the intersection of the vehicle position with the cone, or `RTL_DESCEND_ALT` (whichever is higher). In other words, the vehicle must always ascend to at least `RTL_DESCEND_ALT` if below that value. diff --git a/docs/ko/flight_modes_mc/throw_launch.md b/docs/ko/flight_modes_mc/throw_launch.md index 5b4a197bc7..315dccb474 100644 --- a/docs/ko/flight_modes_mc/throw_launch.md +++ b/docs/ko/flight_modes_mc/throw_launch.md @@ -22,7 +22,7 @@ The vehicle will not automatically disarm after arming, and must be manually dis The vehicle detects that it has been thrown based on reaching a certain speed (5m/s), and then starts the motors at the apex of the throw (once it determines that it has started to fall). You need to throw the vehicle high enough so that it can stabilize its height well before falling anywhere near people or obstacles. -참고: +Notes: - The mode is disabled by default, and must be enabled using a [parameter](#parameters) before arming. - When enabled you cannot take off from the ground using the normal modes. diff --git a/docs/ko/flight_modes_rover/auto.md b/docs/ko/flight_modes_rover/auto.md index eba2785ec9..73db971a25 100644 --- a/docs/ko/flight_modes_rover/auto.md +++ b/docs/ko/flight_modes_rover/auto.md @@ -13,14 +13,14 @@ The mission is typically created and uploaded with a Ground Control Station (GCS The following commands can be used in missions at time of writing (PX4 v1.16): -| QGC mission item | 통신 | 설명 | -| ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------- | -| Mission start | [MAV_CMD_MISSION_START](MAV_CMD_MISSION_START) | Starts the mission. | -| Waypoint | [MAV_CMD_NAV_WAYPOINT](MAV_CMD_NAV_WAYPOINT) | Navigate to waypoint. | -| Return to launch | [MAV\_CMD\_NAV\_RETURN\_TO\_LAUNCH][MAV_CMD_NAV_RETURN_TO_LAUNCH] | Return to the launch location. | -| Change speed | [MAV\_CMD\_DO\_CHANGE\_SPEED][MAV_CMD_DO_CHANGE_SPEED] | Change the speed setpoint | -| Set launch location | [MAV_CMD_DO_SET_HOME](MAV_CMD_DO_SET_HOME) | Changes launch location to specified coordinates. | -| Jump to item (all) | [MAV\_CMD\_DO\_JUMP][MAV_CMD_DO_JUMP] (and other jump commands) | Jump to specified mission item. | +| QGC mission item | 통신 | 설명 | +| ------------------------------------- | ----------------------------------------------------------------- | ----------------------------------------------------------------- | +| Mission start | [MAV\_CMD\_MISSION\_START][MAV_CMD_MISSION_START] | Starts the mission. | +| Waypoint | [MAV\_CMD\_NAV\_WAYPOINT][MAV_CMD_NAV_WAYPOINT] | Navigate to waypoint. | +| Return to launch | [MAV\_CMD\_NAV\_RETURN\_TO\_LAUNCH][MAV_CMD_NAV_RETURN_TO_LAUNCH] | Return to the launch location. | +| Change speed | [MAV\_CMD\_DO\_CHANGE\_SPEED][MAV_CMD_DO_CHANGE_SPEED] | Change the speed setpoint | +| Set launch location | [MAV\_CMD\_DO\_SET\_HOME][MAV_CMD_DO_SET_HOME] | Changes launch location to specified coordinates. | +| Jump to item (all) | [MAV\_CMD\_DO\_JUMP][MAV_CMD_DO_JUMP] (and other jump commands) | Jump to specified mission item. | [MAV_CMD_MISSION_START]: https://mavlink.io/en/messages/common.html#MAV_CMD_MISSION_START [MAV_CMD_NAV_WAYPOINT]: https://mavlink.io/en/messages/common.html#MAV_CMD_NAV_WAYPOINT diff --git a/docs/ko/flight_modes_vtol/mission.md b/docs/ko/flight_modes_vtol/mission.md index be4d19cf58..09693107fa 100644 --- a/docs/ko/flight_modes_vtol/mission.md +++ b/docs/ko/flight_modes_vtol/mission.md @@ -11,7 +11,7 @@ For more information see the specific docs for each mode: - [Mission Mode (MC)](../flight_modes_mc/mission.md) - [Mission Mode (FW)](../flight_modes_fw/mission.md) -The following sections outline mission mode behaviour that is VTOL specificL. +The following sections outline mission mode behaviour that is VTOL specific. ## Mission Commands diff --git a/docs/ko/flight_stack/controller_diagrams.md b/docs/ko/flight_stack/controller_diagrams.md index fa12f0e50e..97fc96f664 100644 --- a/docs/ko/flight_stack/controller_diagrams.md +++ b/docs/ko/flight_stack/controller_diagrams.md @@ -110,7 +110,7 @@ Make sure to tune the attitude controller before attempting to tune TECS. 스로틀을 높이면 속도가 증가하지만, 양력 증가로 인하여 높이도 증가합니다. 따라서 제어 문제를 어렵게 만드는 두 개의 출력(대기 속도 및 고도)에 모두 영향을 미치는 두 개의 입력(피치 각도 및 스로틀)이 존재합니다. -TECS는 원래 설정이 아닌 에너지 측면에서 문제를 표현하여 솔루션을 제공합니다. +TECS offers a solution by representing the problem in terms of energies rather than the original setpoints. 항공기의 총 에너지는 운동 에너지와 위치 에너지의 합입니다. 추력(스로틀 제어를 통해)은 항공기의 총 에너지를 증가시킵니다. 주어진 총 에너지 상태는 위치 에너지와 운동 에너지의 조합입니다. 즉, 높은 고도에서 느린 속도로 비행하는 것은 총 에너지 측면에서 낮은 고도에서 더 빠른 속도로 비행하는 것과 동일합니다. 이를 특정 에너지 균형이라고 하며, 현재 고도와 실제 속도 설정값으로 계산합니다. 특정 에너지 균형은 항공기 피치 각도를 통하여 제어됩니다. @@ -164,6 +164,42 @@ $$\dot{B} = \gamma - \frac{\dot{V_T}}{g}$$ ## 고정익 자세 콘트롤러 +### Setpoint modificaiton + +Most fixed-wing aircraft cannot generate a sustained yaw rate using the rudder alone. As a result, the yaw component of the quaternion attitude error should be removed before computing the control action. + +This is achieved by premultiplying the setpoint quaternion with a rotation about the global down axis. The additional rotation cancels the yaw component of the attitude error while preserving the roll and pitch components. + +The yaw offset is + +$$ +\psi =-2\frac{\hat{q}_0 q_3 - \hat{q}_1 q_2 + \hat{q}_2 q_1 -\hat{q}_3 q_0} +{\hat{q}_0 q_0 - \hat{q}_1 q_1 - \hat{q}_2 q_2 + \hat{q}_3 q_3} +$$ + +The quaternion representing the yaw offset is + +$$ +ℚ_{\text{yaw}} = +\operatorname{normalize} +\left( +\begin{bmatrix} +1 \ +0 \ +0 \ +\frac{\psi}{2} +\end{bmatrix} +\right) +$$ + +The corrected setpoint quaternion is then obtained by applying the rotation + +$$ +ℚ_{\text{sp, corrected}} = ℚ_{\text{yaw}} \otimes ℚ_{sp} +$$ + +### Quaternion based attitude controller + ![FW Attitude Controller Diagram](../../assets/diagrams/px4_fw_attitude_controller_diagram.png) -### 테일시터 +### Tailsitter {#tailsitter_video} [UAV Works VALAQ Patrol Tailsitter](https://www.valaqpatrol.com/valaq_patrol_technical_data/) @@ -136,7 +137,7 @@ VTOL Control & Airspeed Fault Detection (PX4 Developer Summit 2019) -### 틸트로터 +### Tiltrotor {#tiltrotor_video} [Convergence Tiltrotor](../frames_vtol/vtol_tiltrotor_eflite_convergence_pixfalcon.md) diff --git a/docs/ko/frames_vtol/tailsitter.md b/docs/ko/frames_vtol/tailsitter.md index 2bb1d4c4d5..b363259e08 100644 --- a/docs/ko/frames_vtol/tailsitter.md +++ b/docs/ko/frames_vtol/tailsitter.md @@ -89,35 +89,36 @@ This section contains videos that are specific to Tailsitter VTOL (videos that a ## ### Duo -
-
- -
- wingtraone -
-
-
- -
- -
-
-
- -
- -
-
-
- -
- -
-
- -
+:::: tabs + +:::tab WingtraOne +[WingtraOne](https://wingtra.com/mapping-drone-fast-accurate-surveying/) + +![Wingtra: WingtraOne VTOL Duo Tailsitter](../../assets/airframes/vtol/wingtraone/hero.jpg) +::: + +:::tab Skypull +[Skypull](https://www.skypull.technology/) + +![Skypull SP-1 VTOL QuadTailsitter](../../assets/airframes/vtol/skypull/skypull_sp1.jpg) +::: + +:::tab TBS Caipiroshka +[TBS Caipiroshka](../frames_vtol/vtol_tailsitter_caipiroshka_pixracer.md) + +![TBS Caipiroshka](../../assets/airframes/vtol/caipiroshka/caipiroshka.jpg) +::: + +:::tab Woshark +[Woshark](http://uav-cas.ac.cn/WOSHARK/) + +![Woshark](../../assets/airframes/vtol/xdwgood_ax1800/hero.jpg) +::: + +:::tab VALAQ Patrol Tailsitter +[UAV Works VALAQ Patrol Tailsitter](https://www.valaqpatrol.com/valaq_patrol_technical_data/) + +!["UAV Works VALAQ Patrol Tailsitte](../../assets/airframes/vtol/uav_works_valaq_patrol/hero.jpg) +::: + +:::: diff --git a/docs/ko/frames_vtol/vtol_quadplane_falcon_vertigo_hybrid_rtf_dropix.md b/docs/ko/frames_vtol/vtol_quadplane_falcon_vertigo_hybrid_rtf_dropix.md index 2e390ce6dc..b5d720138c 100644 --- a/docs/ko/frames_vtol/vtol_quadplane_falcon_vertigo_hybrid_rtf_dropix.md +++ b/docs/ko/frames_vtol/vtol_quadplane_falcon_vertigo_hybrid_rtf_dropix.md @@ -3,6 +3,7 @@ :::warning Discontinued The Falcon Venturi FPV Wing frame on which this vehicle is based is no longer available. +The Dropix FC used by this vehicle is discontinued. ::: The _Falcon Vertigo Hybrid VTOL_ is a quadplane VTOL aircraft that has been designed to work with PX4 and the Dropix (Pixhawk compatible) flight controller. 소형 GoPro 카메라를 장착할 수 있습니다. @@ -13,7 +14,7 @@ RTF 키트에는 RC 수신기와 텔레메트리를 제외하고, 시스템에 주요 정보: - **Frame:** Falcon Vertigo Hybrid VTOL -- **Flight controller:** Dropix +- **Flight controller:** Dropix (Discontineud) - **Wing span:** 1.3m ![Falcon Vertigo Hybrid VTOL RTF](../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_complete.jpg) @@ -36,7 +37,7 @@ RTF 키트에는 RC 수신기와 텔레메트리를 제외하고, 시스템에 - 푸셔 모터 전원 시스템 - 탄소 섬유 튜브 및 마운트 - G10 모터 마운트 -- 1 x [3700mah 4S 30C Lipo battery](https://www.overlander.co.uk/batteries/lipo-batteries/power-packs/3700mah-4s-14-8v-25c-lipo-battery-overlander-sport.html) +- 1 x [3700mah 4S 30C Lipo battery](https://wheelspinmodels.co.uk/i/3700mah-4s-14.8v-25c-lipo-battery-overlander-262221/) - Dropix power distribution board and cable 이 키트는 라디오 수신기 또는 텔레메트리(선택 사항)는 제공하지 않습니다. @@ -115,21 +116,17 @@ RTF 키트는 아래와 같이 조립하여야 합니다. -:::info -General information about connecting Dropix can be found in [Dropix Flight Controller](../flight_controller/dropix.md). -::: +#### Connect the ESC power connector and pass the signals cables to the flight controller -#### ESC 전원 커넥터를 연결하고, 신호 케이블을 비행 컨트롤러에 연결합니다. - -1. XT60 커넥터를 사용하여 ESC를 전원 모듈에 연결합니다. +1. Connect the ESC to the power module using the XT60 connector -2. 신호 케이블을 비행 컨트롤러로 연결합니다. +2. Pass the signals cables through to the flight controller -#### 모터 배선 +#### Motor Wiring Motor and servo wiring is nearly entirely up to you, but should match the [Generic Standard VTOL](../airframes/airframe_reference.md#vtol_standard_vtol_generic_standard_vtol) configuration, as shown in the airframe reference. The geometry and output assignment can be configured in the [Actuators Configuration](../config/actuators.md#actuator-outputs) @@ -139,81 +136,81 @@ For example, you might wire it up like this example (orientation as if "sitting | 포트 | 연결 | | ------ | ---------------------- | | MAIN 1 | Front right motor, CCW | -| MAIN 2 | 후방 촤즉 모터, 반시계 방향 | -| MAIN 3 | 전방 좌측 모터, 시계방향 | -| MAIN 4 | 후방 우측 모터, 시계 방향 | -| AUX 1 | 좌측 보조익 | -| AUX 2 | 우측 보조익 | -| AUX 3 | 승강타 | -| AUX 4 | 방향타 | -| AUX 5 | 스로틀 | +| MAIN 2 | Back left motor, CCW | +| MAIN 3 | Front left motor, CW | +| MAIN 4 | Back right motor, CW | +| AUX 1 | Left aileron | +| AUX 2 | Right aileron | +| AUX 3 | Elevator | +| AUX 4 | Rudder | +| AUX 5 | Throttle | -#### 비행 컨트롤러 연결 : 모터, 서보, RC 수신기, 전류 센서 +#### Flight Controller Connections: Motors, Servos, RC receiver, current sensor -아래 이미지는 dropix 비행 컨트롤러의 뒷면을 보여, 주며 쿼드 모터 케이블, 에일러론 신호 케이블, 스로틀 모터, 전류 센서 및 수신기 (RC IN) 입력 핀을 연결하기위한 출력 핀을 강조하여 표시합니다. +The image below shows back of the dropix flight controller, highlighting the outputs pins to connect quad motors cables, aileron signal cables, throttle motor, and the current sensor and receiver (RC IN) input pins. -1. 쿼드 모터 신호 케이블을 연결합니다. +1. Connect quad motors signal cables. -2. 보조 출력에 에일러론 케이블과 스로틀 모터를 연결합니다. +2. Connect the aileron cables and throttle motor in the auxiliary outputs. -3. ESC의 스로틀 모터 신호 케이블을 적절한 비행 컨트롤러 보조 포트에 연결합니다. ESC를 스로틀 모터에 연결합니다. +3. Connect the throttle motor signal cable from the ESC to the appropriate flight controller auxiliary port. Connect the ESC to the throttle motor. -4. 수신기를 RC IN에 연결합니다. +4. Connect the receiver (RC IN). -#### 비행 컨트롤러 연결 : 원격 측정, 대기 속도 센서, GPS, 부저 및 안전 스위치 +#### Flight Controller Connections: Telemetry, Airspeed Sensor, GPS, Buzzer and Safety Switch -센서 입력, 원격 측정, 부저 및 안전 스위치는 아래 연결 다이어그램과 같이 비행 컨트롤러의 전면에 위치합니다. +The sensor inputs, telemetry, buzzer and safety switch are located in the front of the flight controller, as shown in the connection diagram below. Dropix connectors front -1. 그림과 같이 원격 측정, 대기 속도 센서, GPS, 부저 및 안전 스위치를 연결합니다. +1. Connect the telemetry, airspeed sensor, GPS, buzzer and safety switch as shown. -#### 비행 컨트롤러 : 전원 모듈 및 외부 USB 연결 +#### Flight Controller: Connect power module and external USB -USB 포트, 전원 모듈 및 외부 USB에 대한 입력은 비행 컨트롤러의 오른쪽에 있습니다. +The inputs for the USB port, power module and external USB are located on the right side of the flight controller. -1. 그림과 같이 전원과 USB를 연결합니다. +1. Connect power and USB as shown :::tip The external USB is optional. -비행 컨트롤러를 장착 후, USB 포트에 액세스하기 어려운 경우에 사용하여야 합니다. +It should be used if access to the USB port is difficult once the flight controller is mounted. ::: -#### -- 피토 튜브 (대기 속도 센서) 설치 +#### Install the pitot tube (airspeed sensor) -피토 튜브는 비행기 전면에 설치되며 튜브를 통해 대기 속도 센서에 연결됩니다. +The pitot tube is installed on the front of the plane and connected to the airspeed sensor via a tube. :::warning -It is important that nothing obstructs airflow to the Pitot tube. 이것은 고정익 비행과 쿼드에서 비행기로의 전환에 매우 중요합니다. +It is important that nothing obstructs airflow to the Pitot tube. This is critical for fixed-wing flight and for transitioning from quad to plane. ::: -1. 비행기 전면에 피토 튜브를 설치합니다 +1. Install the Pitot tube in the front of the plane -2. 연결 튜브를 고정하고 구부러 지거나 꼬이지 않았는 지 확인합니다. +2. Secure the connecting tubing and ensure that it is not bent/kinked. -3. 튜브를 대기 속도 센서에 연결합니다. +3. Connect the tubes to the airspeed sensor. -#### 수신기 및 원격 측정 모듈 설치 / 연결 +#### Install/connect receiver and telemetry module -1. 수신기와 원격 측정 모듈을 차량 프레임 외부에 붙여 넣습니다. +1. Paste the receiver and telemetry module to the outside of the vehicle frame. @@ -225,27 +222,27 @@ It is important that nothing obstructs airflow to the Pitot tube. 이것은 고 -#### GPS / 나침반 모듈 +#### GPS/Compass module -GPS / 나침반 모듈은 기본 방향으로 날개에 이미 장착되어 있습니다. 이를 위해 추가 작업을 할 필요가 없습니다! +The GPS/Compass module is already mounted on the wing, in the default orientation. You don't need to have to do anything extra for this! -#### 비행 컨트롤러 장착 및 방향 설정 +#### Mount and orient the flight controller -1. 비행 컨트롤러 방향을 270도로 설정합니다. +1. Set your flight controller orientation to 270 degrees. -2. 진동 감쇠폼을 사용하여 컨트롤러를 제자리에 고정합니다. +2. Secure the controller in place using vibration damping foam. -### 4 단계 : 최종 조립 확인 +### Step 4: Final Assembly Checks -마지막 조립 단계는 차량이 안정적이고 모터가 올바르게 설정되었는 지 확인하는 것입니다. +The final assembly step is to check the vehicle is stable and that the motors have been set up correctly. -1. 모터가 올바른 방향으로 회전하는지 확인하십시오 (아래 QuadX 다이어그램 참조). +1. Check that the motors turn in the correct directions (as in the QuadX diagram below). @@ -254,12 +251,12 @@ GPS / 나침반 모듈은 기본 방향으로 날개에 이미 장착되어 있 ::: -2. 차량이 예상 무게 중심 주변에서 균형을 이루는 지 확인하십시오. - - 손가락으로 기체의 무게 중심을 잡고 차량이 안정적인지 확인하십시오. +2. Check the vehicle is balanced around the expected centre of gravity + - Hold the vehicle with your fingers at the center of gravity and check that the vehicle remains stable. ![Level Centre of Gravity](../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_57_level_centre_of_gravity.jpg) - - 차량이 앞이나 뒤로 기울면 모터를 움직여 균형을 잡으십시오. + - If the vehicle leans forward or backwards, move the motors to balance it. ![Level Motors](../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_55_level_motors.jpg) @@ -267,7 +264,7 @@ GPS / 나침반 모듈은 기본 방향으로 날개에 이미 장착되어 있 Perform the normal [Basic Configuration](../config/index.md). -참고: +Notes: 1. For [Airframe](../config/airframe.md) select the vehicle group/type as _Standard VTOL_ and the specific vehicle as [Generic Standard VTOL](../airframes/airframe_reference.md#vtol_standard_vtol_generic_standard_vtol) as shown below. @@ -279,7 +276,7 @@ Perform the normal [Basic Configuration](../config/index.md). 4. The default parameters are often sufficient for stable flight. For more detailed tuning information see [Standard VTOL Wiring and Configuration](../config_vtol/vtol_quad_configuration.md). -보정을 마치면 VTOL이 비행할 준비가 됩니다. +After you finish calibration the VTOL is ready to fly. ## 비디오 diff --git a/docs/ko/frames_vtol/vtol_quadplane_foxtech_loong_2160.md b/docs/ko/frames_vtol/vtol_quadplane_foxtech_loong_2160.md index ad64afc43e..09bc8736e7 100644 --- a/docs/ko/frames_vtol/vtol_quadplane_foxtech_loong_2160.md +++ b/docs/ko/frames_vtol/vtol_quadplane_foxtech_loong_2160.md @@ -43,14 +43,14 @@ The following options have been tested: - [Holybro PM08D Power Module (alternative to Auterion PM)](https://holybro.com/collections/power-modules-pdbs/products/pm08d-digital-power-module-14s-200a) - [GPS F9P (included in Skynode eval. kit)](../gps_compass/rtk_gps_holybro_h-rtk-f9p.md) - [GPS M9N (cheaper alternative to F9P)](../gps_compass/rtk_gps_holybro_h-rtk-m8p.md) -- [Airspeed sensor (included in Skynode eval. kit)](https://www.dualrc.com/parts/airspeed-sensor-sdp33) — recommended for improved safety and performance +- [Airspeed sensor (included in Skynode eval. kit)](https://www.dualrc.com/parts/p/airspeed-sensor-sdp33) — recommended for improved safety and performance - [Airspeed sensor (cheaper alternative)](https://holybro.com/products/digital-air-speed-sensor-ms4525do) - [Lidar Lightware lw20-c (included in Skynode eval. kit)](../sensor/sfxx_lidar.md) (Optional) - [Lidar Seeed Studio PSK-CM8JL65-CC5 (cheaper alternative)](https://www.seeedstudio.com/PSK-CM8JL65-CC5-Infrared-Distance-Measuring-Sensor-p-4028.html) (Optional) - [Radio (RC) System](../getting_started/rc_transmitter_receiver.md) of your preference -- [Groundstation and Radio link](https://holybro.com/collections/rc-radio-transmitter-receiver/products/skydroid-h12?variant=42940989931709) +- [Groundstation and Radio link](https://holybro.com/products/skydroid-h12) - [USB-C extension cable](https://www.digitec.ch/en/s1/product/powerguard-usb-c-usb-c-025-m-usb-cables-22529949?dbq=1&gclid=Cj0KCQjw2cWgBhDYARIsALggUhrh-z-7DSU0wKfLBVa8filkXLQaxUpi7pC0ffQyRzLng8Ph01h2R1gaAp0mEALw_wcB&gclsrc=aw.ds) -- [I2C Splitter](https://www.3dxr.co.uk/autopilots-c2/the-cube-aka-pixhawk-2-1-c9/cube-cables-accessories-sensors-c15/cubepilot-i2c-can-splitter-jst-gh-4pin-p2840) +- [I2C Splitter](https://www.3dxr.co.uk/autopilots-c2/the-cube-aka-pixhawk-2-1-c9/cube-cables-accessories-sensors-c15/cubepilot-i2c-can-splitter-jst-gh-4pin-hx4-06152-p2840) - [3D-Printed mounts](https://github.com/PX4/PX4-Autopilot/raw/main/docs/assets/airframes/vtol/foxtech_loong_2160/loong-3d-prints.zip) - 1x Baseplate - 1x Stack-fixture @@ -270,7 +270,7 @@ MAIN: 4. Aileron left 5. Elevator right 6. Elevator left -7. 방향타 +7. Rudder AUX: @@ -305,7 +305,7 @@ To load the file: - If the [Lidar Lightware lw20-c (included in Skynode eval. kit)](../sensor/sfxx_lidar.md) is used, [SENS_EN_SF1XX](../advanced_config/parameter_reference.md#SENS_EN_SF1XX) needs to be set to 6 (SF/LW/20c). - Make that the correct airspeed sensor is selected. - If you use the recommended [SDP33 airspeed sensor](https://www.dualrc.com/parts/airspeed-sensor-sdp33) no changes will be needed as [SENS_EN_SDP3X](../advanced_config/parameter_reference.md#SENS_EN_SDP3X) is enabled (set to `1`) in the parameter file. + If you use the recommended [SDP33 airspeed sensor](https://www.dualrc.com/parts/p/airspeed-sensor-sdp33) no changes will be needed as [SENS_EN_SDP3X](../advanced_config/parameter_reference.md#SENS_EN_SDP3X) is enabled (set to `1`) in the parameter file. ### Sensor Calibration diff --git a/docs/ko/frames_vtol/vtol_quadplane_fun_cub_vtol_pixhawk.md b/docs/ko/frames_vtol/vtol_quadplane_fun_cub_vtol_pixhawk.md index cb090bee2e..69be7ff7c4 100644 --- a/docs/ko/frames_vtol/vtol_quadplane_fun_cub_vtol_pixhawk.md +++ b/docs/ko/frames_vtol/vtol_quadplane_fun_cub_vtol_pixhawk.md @@ -51,10 +51,10 @@ For example, you might wire it up like this example (orientation as if "sitting | MAIN 3 | 전방 좌측 모터(시계 방향) | | MAIN 4 | 후방 우측 모터(시계 방향) | | AUX 1 | 좌측 보조익 TODO | -| AUX 2 | 우측 보조익 | -| AUX 3 | 승강타 | -| AUX 4 | 방향타 | -| AUX 5 | 스로틀 | +| AUX 2 | Right aileron | +| AUX 3 | Elevator | +| AUX 4 | Rudder | +| AUX 5 | Throttle | For further instructions on wiring and configurations please see: [Standard VTOL Wiring and Configuration](../config_vtol/vtol_quad_configuration.md). @@ -69,7 +69,7 @@ For further instructions on wiring and configurations please see: 3. The default parameters are often sufficient for stable flight. For more detailed tuning information see [Standard VTOL Wiring and Configuration](../config_vtol/vtol_quad_configuration.md). -보정을 마치면 VTOL이 비행할 준비가 됩니다. +After you finish calibration the VTOL is ready to fly. ## 비디오 diff --git a/docs/ko/frames_vtol/vtol_quadplane_volantex_ranger_ex_pixhawk.md b/docs/ko/frames_vtol/vtol_quadplane_volantex_ranger_ex_pixhawk.md index 5b3cccaeaf..737fe88381 100644 --- a/docs/ko/frames_vtol/vtol_quadplane_volantex_ranger_ex_pixhawk.md +++ b/docs/ko/frames_vtol/vtol_quadplane_volantex_ranger_ex_pixhawk.md @@ -92,14 +92,14 @@ Pixhawk의 출력은 다음과 같이 연결되어야합니다 ( "평면에 앉 | 포트 | 연결 | | ------ | ---------------------- | | MAIN 1 | Front right motor, CCW | -| MAIN 2 | 후방 촤즉 모터, 반시계 방향 | -| MAIN 3 | 전방 좌측 모터, 시계방향 | -| MAIN 4 | 후방 우측 모터, 시계 방향 | -| AUX 1 | 좌측 보조익 | -| AUX 2 | 우측 보조익 | -| AUX 3 | 승강타 | -| AUX 4 | 방향타 | -| AUX 5 | 스로틀 | +| MAIN 2 | Back left motor, CCW | +| MAIN 3 | Front left motor, CW | +| MAIN 4 | Back right motor, CW | +| AUX 1 | Left aileron | +| AUX 2 | Right aileron | +| AUX 3 | Elevator | +| AUX 4 | Rudder | +| AUX 5 | Throttle | :::info The servo direction can be reversed using the PWM_REV parameters in the PWM_OUTPUT group of QGroundControl (cogwheel tab, last item in the left menu) diff --git a/docs/ko/frames_vtol/vtol_tailsitter_caipiroshka_pixracer.md b/docs/ko/frames_vtol/vtol_tailsitter_caipiroshka_pixracer.md index 7cb8848371..6580d0bba2 100644 --- a/docs/ko/frames_vtol/vtol_tailsitter_caipiroshka_pixracer.md +++ b/docs/ko/frames_vtol/vtol_tailsitter_caipiroshka_pixracer.md @@ -4,7 +4,7 @@ The Caipiroshka VTOL is a slightly modified _TBS Caipirinha_. :::info The _TBS Caipirinha_ has been superseded and is no longer available. -These instructions _should_ work with the updated vehicle: [TBS Caipirinha 2](https://team-blacksheep.com/products/prod:tbs_caipi2_pnp). +These instructions _should_ work with the updated vehicle: [TBS Caipirinha 2](https://www.team-blacksheep.com/products/prod:tbs_caipi2_pnp). 부품 목록에서 다른 여러 구성 요소도 업데이트 되었습니다. ::: @@ -12,7 +12,7 @@ These instructions _should_ work with the updated vehicle: [TBS Caipirinha 2](ht ## 부품 목록 -- TBS Caipirinha Wing (no longer available - try [TBS Caipirinha 2](https://team-blacksheep.com/products/prod:tbs_caipi2_pnp)) +- TBS Caipirinha Wing (no longer available - try [TBS Caipirinha 2](https://www.team-blacksheep.com/products/prod:tbs_caipi2_pnp)) - Left and right 3D-printed motor mount (design files) - CW 8045 propeller ([Eflight store](https://www.banggood.com/GEMFAN-Carbon-Nylon-8045-CWCCW-Propeller-For-Quadcopters-1-Pair-p-950874.html)) - CCW 8045 propeller ([Eflight store](https://www.banggood.com/GEMFAN-Carbon-Nylon-8045-CWCCW-Propeller-For-Quadcopters-1-Pair-p-950874.html)) @@ -24,7 +24,7 @@ These instructions _should_ work with the updated vehicle: [TBS Caipirinha 2](ht - [GetFPV](https://www.getfpv.com/lumenier-30a-blheli-s-esc-opto-2-4s.html) - BEC (3A, 5-5.3V) (출력 레일 용 5V 전원 공급 장치로 작동 할 수없는 ESC를 사용하는 경우에만 필요) - 3S 2200 mA 리포 배터리 - - Team Orion 3S 11.1V 50 C ([Hobbyshop store](https://www.hobbyshop.ch/modellbau-elektronik/akku/team-orion-lipo-2200-3s-11-1v-50c-xt60-ori60163.html)) + - Team Orion 3S 11.1V 50 C ([Hobbyshop store](https://www.hobbyshop.ch/team-orion-lipo-2200-3s-11-1v-50c-xt60-ori60163.html)) - [Pixracer autopilot board + power module](../flight_controller/pixracer.md) - [Digital airspeed sensor](https://hobbyking.com/en_us/hkpilot-32-digital-air-speed-sensor-and-pitot-tube-set.html) diff --git a/docs/ko/frames_vtol/vtol_tiltrotor_omp_hobby_zmo_fpv.md b/docs/ko/frames_vtol/vtol_tiltrotor_omp_hobby_zmo_fpv.md index f8f16bf6d9..5e42675263 100644 --- a/docs/ko/frames_vtol/vtol_tiltrotor_omp_hobby_zmo_fpv.md +++ b/docs/ko/frames_vtol/vtol_tiltrotor_omp_hobby_zmo_fpv.md @@ -25,9 +25,9 @@ Depending on the final takeoff weight the hover time might be limited (there is ## 구매처 -- [OMP-Hobby](https://www.omphobby.com/OMPHOBBY-ZMO-VTOL-FPV-Aircraft-With-DJI-Goggles-And-Remote-Controller-p3069854.html) - [GetFPV](https://www.getfpv.com/omphobby-zmo-z3-vtol-fpv-1200mm-arf-plane-kit-no-fpv-system.html) - [FoxtechFPV](https://www.foxtechfpv.com/zmo-pro-fpv-vtol.html) +- [RMRC](https://www.readymaderc.com/products/details/omp-hobby-zmo-vtol-fpv-airplane-rtf-goggles-radio) ## 비행 콘트롤러 @@ -43,7 +43,7 @@ The approximate maximum size of the FC is: 50x110x22mm - [GPS F9P (included in Skynode eval. kit)](../gps_compass/rtk_gps_holybro_h-rtk-f9p.md) - [GPS M9N (cheaper alternative to F9P)](../gps_compass/rtk_gps_holybro_h-rtk-m8p.md) -- [Airspeed sensor (included in Skynode eval. kit)](https://www.dualrc.com/parts/airspeed-sensor-sdp33) — recommended for improved safety and performance +- [Airspeed sensor (included in Skynode eval. kit)](https://www.dualrc.com/parts/p/airspeed-sensor-sdp33) — recommended for improved safety and performance - [Airspeed sensor (cheaper alternative)](https://holybro.com/products/digital-air-speed-sensor-ms4525do) - [Lidar Lightware lw20-c (included in Skynode eval. kit)](../sensor/sfxx_lidar.md) (Optional) - [Lidar Seeed Studio PSK-CM8JL65-CC5 (cheaper alternative)](https://www.seeedstudio.com/PSK-CM8JL65-CC5-Infrared-Distance-Measuring-Sensor-p-4028.html) (Optional) @@ -79,7 +79,7 @@ The following tools were used for this build. ### Preparations Remove the original flight controller, ESC and wing connector cables. -Also remove the the propellers. +Also remove the propellers. This will help you with the handling of the vehicle and will reduce the risk of an injury due to an unintentional motor startup. ZMO FPV in it's original state. @@ -101,7 +101,7 @@ Flight controller and wing connectors removed from the vehicle. 4. Shorten the rear motor wires and solder them as shown in the picture into place. -5. Solder signal and GND wires to the PWM input ot the ESC. +5. Solder signal and GND wires to the PWM input to the ESC. ![ESC 01](../../assets/airframes/vtol/omp_hobby_zmo_fpv/esc-01.jpg) @@ -293,7 +293,7 @@ To load the file: The airspeed sensor can be enabled in the [Parameters](../advanced_config/parameters.md#finding-updating-parameters) tab. -- If the [recommended airspeed sensor (SDP33)](https://www.dualrc.com/parts/airspeed-sensor-sdp33) is used, `SENS_EN_SDP3X` needs to be enabled. +- If the [recommended airspeed sensor (SDP33)](https://www.dualrc.com/parts/p/airspeed-sensor-sdp33) is used, `SENS_EN_SDP3X` needs to be enabled. - If the [Lidar Lightware lw20-c (included in Skynode eval. kit)](../sensor/sfxx_lidar.md) is used, `SENS_EN_SF1XX` needs to be set to 6 (SF/LW/20c). ### Sensor Calibration diff --git a/docs/ko/getting_started/flight_reporting.md b/docs/ko/getting_started/flight_reporting.md index 1cce986830..02cffd153f 100644 --- a/docs/ko/getting_started/flight_reporting.md +++ b/docs/ko/getting_started/flight_reporting.md @@ -38,7 +38,7 @@ For more information see [Settings > MAVLink Settings > MAVLink 2 Logging (PX4 o ## PX4 개발자가 검토할 로그 파일 공유 -The [Flight Review](https://logs.px4.io/) log file link can be shared for discussion in the [support forums](../contribute/support.md#forums-and-chat) or a [Github issue](../index.md#reporting-bugs-issues). +The [Flight Review](https://logs.px4.io/) log file link can be shared for discussion in the [support forums](../contribute/support.md#forums-and-chat) or a [Github issue](../contribute/support.md#issue-bug-reporting). ## 로그 설정 diff --git a/docs/ko/getting_started/rc_transmitter_receiver.md b/docs/ko/getting_started/rc_transmitter_receiver.md index 071945f2d7..0c7c31e120 100644 --- a/docs/ko/getting_started/rc_transmitter_receiver.md +++ b/docs/ko/getting_started/rc_transmitter_receiver.md @@ -3,13 +3,15 @@ A Radio Control (RC) system can be used to _manually_ control your vehicle from a handheld RC controller. This topic provides an overview of how RC works, how to choose an appropriate radio system for your vehicle, and how to connect it to your flight controller. -:::tip -PX4 can also be manually controlled using a [Joystick](../config/joystick.md) or gamepad-like controller: this is different to an RC system! -The [COM_RC_IN_MODE](../advanced_config/parameter_reference.md#COM_RC_IN_MODE) parameter [can be set](../advanced_config/parameters.md) to choose whether RC (default), Joystick, both, or neither, are enabled. +:::info +PX4 does not require a manual control system for autonomous flight modes. ::: -:::info -PX4 does not require a remote control system for autonomous flight modes. +:::tip +PX4 can also be [manually controlled](../config/manual_control.md) using a [Joystick](../config/joystick.md) or gamepad-like controller. + +By default PX4 will latch the first valid controller it discovers and use it until the vehicle reboots. +If you have multiple controllers and you want to define their priority see [Manual Control > PX4 Configuration](../config/manual_control.md#px4-configuration). ::: ## 무선 조종기 작동 방법 diff --git a/docs/ko/gps_compass/gps_cuav_neo_3.md b/docs/ko/gps_compass/gps_cuav_neo_3.md index df1e935bf9..022d24faa2 100644 --- a/docs/ko/gps_compass/gps_cuav_neo_3.md +++ b/docs/ko/gps_compass/gps_cuav_neo_3.md @@ -47,7 +47,7 @@ It integrates Ublox M9N, IST8310, three-color LED lights and safety switches, an ## 구매처 -- [CUAV](https://cuav.en.alibaba.com/product/1600217379204-820872629/CUAV_NEO_3_M9N_GPS_Module_for_Pixhawk_Compass_gps_tracker_navigation_gps.html?spm=a2700.shop_oth.74.1.636e28725EvVHb) +- [CUAV](https://www.alibaba.com/product-detail/CUAV_NEO_3_M9N_GPS_Module_for_Pixhawk_Compass_gps_tracker_navigation_gps_1600217379204.html) ## 배선 diff --git a/docs/ko/gps_compass/gps_cuav_neo_3pro.md b/docs/ko/gps_compass/gps_cuav_neo_3pro.md index 970a9e43bc..55fdfb33b3 100644 --- a/docs/ko/gps_compass/gps_cuav_neo_3pro.md +++ b/docs/ko/gps_compass/gps_cuav_neo_3pro.md @@ -41,7 +41,7 @@ It integrates UBLOX M9N, STM32F4 MCU, RM3100 compass, three-color LED light and ## 구매처 -- [CUAV](https://cuav.en.alibaba.com/product/1600165544920-820872629/Free_shipping_CUAV_Neo_3_pro_drone_UAVCAN_GNSS_processor_STM32F412_autopilot_ublox_M9N_positioning_RM3100_compass_uav_gps_module.html?spm=a2700.shop_oth.74.2.636e28725EvVHb) +- [CUAV](https://www.alibaba.com/product-detail/Free_shipping_CUAV_Neo_3_pro_drone_UAVCAN_GNSS_processor_STM32F412_autopilot_ublox_M9N_positioning_RM3100_compass_uav_gps_module_1600165544920.html) ## 배선 diff --git a/docs/ko/gps_compass/index.md b/docs/ko/gps_compass/index.md index d6afb08543..93814a2be6 100644 --- a/docs/ko/gps_compass/index.md +++ b/docs/ko/gps_compass/index.md @@ -64,7 +64,7 @@ These have been tested by the PX4 dev team, or which are popular within the PX4 [Hb Micro M8N]: https://holybro.com/products/micro-m8n-gps [CubePilot Here2]: ../gps_compass/gps_hex_here2.md -참고: +Notes: - ✓ or a specific part number indicate that a features is supported, while ✘ or empty show that the feature is not supported. "?"는 "알 수 없음"을 나타냅니다. @@ -187,9 +187,9 @@ Some of GNSS terms that are useful for interpreting the data include: - `DOP`: Dilution of position (dimensionless). This is a measure of the geometric quality of satellite positions and their effect on the precision of the GPS receiver's calculations. - `EPH`: Standard deviation of horizontal position error (metres). - This represents the the uncertainty in the GPS fix latitude and longitude. + This represents the uncertainty in the GPS fix latitude and longitude. - `EPV`: Standard deviation of vertical position error (metres). - This represents the the uncertainty in the GPS fix altitude. + This represents the uncertainty in the GPS fix altitude. ### DOP vs EPH/EPV diff --git a/docs/ko/gps_compass/magnetometer.md b/docs/ko/gps_compass/magnetometer.md index 5474b68bbd..2c46339587 100644 --- a/docs/ko/gps_compass/magnetometer.md +++ b/docs/ko/gps_compass/magnetometer.md @@ -22,7 +22,7 @@ If it fails before flight, arming will be denied. ### Compass Parts PX4 can be used with many magnetometer parts, including: Bosch BMM 150 MEMS (via I2C bus), HMC5883 / HMC5983 (I2C or SPI), IST8310 (I2C), LIS3MDL (I2C or SPI), RM3100, and more. -Other supported magnetometer parts and their busses can be inferred from the drivers listed in [Modules Reference: Magnetometer (Driver)](../modules/modules_driver_magnetometer.md). +Other supported magnetometer parts and their buses can be inferred from the drivers listed in [Modules Reference: Magnetometer (Driver)](../modules/modules_driver_magnetometer.md). These parts are included in stand alone compass modules, combined compass/GNSS modules, and also in many flight controllers, @@ -55,7 +55,7 @@ This list contains stand-alone magnetometer modules (without GNSS). Internal compasses are not recommended for real use as a heading source, because the performance is almost always very poor. -This is particularly true on on small vehicles where the flight controller has to be mounted close to motor/ESC power lines and other sources of electromagnetic interference. +This is particularly true on small vehicles where the flight controller has to be mounted close to motor/ESC power lines and other sources of electromagnetic interference. While they may be better on larger vehicles (e.g. VTOL), where it is possible to reduce electromagnetic interference by mounting the flight controller a long way from power supply lines, an external compass will almost always be better. :::tip diff --git a/docs/ko/gps_compass/rtk_gps.md b/docs/ko/gps_compass/rtk_gps.md index 8b0e09ca86..8eff243cad 100644 --- a/docs/ko/gps_compass/rtk_gps.md +++ b/docs/ko/gps_compass/rtk_gps.md @@ -14,7 +14,7 @@ Some RTK GNSS setups can provide yaw/heading information, as an alternative to t ## 지원되는 RTK 장치 -PX4 supports the [u-blox M8P](https://www.u-blox.com/en/product/neo-m8p), [u-blox F9P](https://www.u-blox.com/en/product/zed-f9p-module) and the [Trimble MB-Two](https://oemgnss.trimble.com/en/products/receiver-modules/mb-two) GPS, and products that incorporate them. +PX4 supports the [u-blox M8P](https://www.u-blox.com/en/product/neo-m8p-series), [u-blox F9P](https://www.u-blox.com/en/product/zed-f9p-module) and the [Trimble MB-Two](https://oemgnss.trimble.com/en/products/receiver-modules/mb-two) GPS, and products that incorporate them. :::note 일부 RTK 모듈은 특정 기능(베이스 또는 로버)으로만 사용할 수 있는 반면, 다른 모듈은 서로 교환하여 사용할 수 있습니다. @@ -58,7 +58,7 @@ It also highlights devices that connect via the CAN bus, and those which support | [Septentrio AsteRx-m3 Pro](../gps_compass/septentrio_asterx-rib.md) | AsteRx | ✓ | | [Septentrio Dual Antenna] | ✓ | | [Septentrio mosaic-go](../gps_compass/septentrio_mosaic-go.md) | mosaic X5 / mosaic H | ✓ | | [Septentrio Dual Antenna] | ✓ | | [SIRIUS RTK GNSS ROVER (F9P)](https://store-drotek.com/911-sirius-rtk-gnss-rover-f9p.html) | F9P | ✓ | | [Dual F9P] | | -| [SparkFun GPS-RTK2 Board - ZED-F9P](https://www.sparkfun.com/products/15136) | F9P | ✓ | | [Dual F9P] | | +| [SparkFun GPS-RTK2 Board - ZED-F9P](https://www.sparkfun.com/sparkfun-gps-rtk2-board-zed-f9p-qwiic-gps-15136.html) | F9P | ✓ | | [Dual F9P] | | | [Trimble MB-Two](../gps_compass/rtk_gps_trimble_mb_two.md) | F9P | ✓ | | ✓ | | @@ -75,7 +75,7 @@ It also highlights devices that connect via the CAN bus, and those which support [mosaic-G5 P3H]: https://www.septentrio.com/en/products/gnss-receivers/gnss-receiver-modules/mosaic-G5-P3H [D10P]: https://docs.datagnss.com/gnss/gnss_module/D10P_RTK -참고: +Notes: - ✓ or a specific part number indicate that a features is supported, while ✘ or empty show that the feature is not supported. "?"는 "알 수 없음"을 나타냅니다. diff --git a/docs/ko/gps_compass/rtk_gps_cuav_c-rtk-9ps.md b/docs/ko/gps_compass/rtk_gps_cuav_c-rtk-9ps.md index 148c69608e..8ee956fd67 100644 --- a/docs/ko/gps_compass/rtk_gps_cuav_c-rtk-9ps.md +++ b/docs/ko/gps_compass/rtk_gps_cuav_c-rtk-9ps.md @@ -1,6 +1,6 @@ # CUAV C-RTK 9Ps -The CUAV [C-RTK 9Ps](https://www.cuav.net/en/c_rtk_9ps/) is a multi-satellite, multi-band, centimeter-level, RTK GNSS system. +The CUAV [C-RTK 9Ps](https://www.cuav.net/en/c-rtk-9ps-en/) is a multi-satellite, multi-band, centimeter-level, RTK GNSS system. The module simultaneously receives GPS, GLONASS, Galileo and Beidou satellite signals, enabling faster positioning and higher accuracy. It also supports [RTK GPS Heading](../gps_compass/u-blox_f9p_heading.md) using dual modules. @@ -12,7 +12,7 @@ This is ideal for survey drones, agricultural drones and other application scena ## 구매처 -[cuav Store](https://store.cuav.net/shop/c-rtk-9ps/) +[cuav Store](https://store.cuav.net/?route=product%2Fproduct&path=61&product_id=187) ## 사양 diff --git a/docs/ko/gps_compass/rtk_gps_cuav_c-rtk.md b/docs/ko/gps_compass/rtk_gps_cuav_c-rtk.md index 52a2c14024..2a3e7952cc 100644 --- a/docs/ko/gps_compass/rtk_gps_cuav_c-rtk.md +++ b/docs/ko/gps_compass/rtk_gps_cuav_c-rtk.md @@ -1,6 +1,6 @@ # CUAV C-RTK -The [CUAV C-RTK GPS receiver](https://www.cuav.net/en/c_rtk_9ps/) is an [RTK GPS module](../gps_compass/rtk_gps.md) for the mass market. +The [CUAV C-RTK GPS receiver](https://www.cuav.net/en/c-rtk-9ps-en/) is an [RTK GPS module](../gps_compass/rtk_gps.md) for the mass market. 완전한 RTK 시스템은 2개 이상의 C-RTK 모듈 \(하나는 기지국용, 다른 하나는 항공기용\)으로 구성됩니다. RTK를 사용하면 PX4는 일반 GPS에서 제공하는 것 보다 훨씬 더 정확한 센티미터 수준의 정확도로 위치를 파악할 수 있습니다. @@ -8,7 +8,7 @@ The [CUAV C-RTK GPS receiver](https://www.cuav.net/en/c_rtk_9ps/) is an [RTK GPS ## 구매처 - [cuav taobao](https://item.taobao.com/item.htm?id=565380634341&spm=2014.21600712.0.0) -- [cuav aliexpress](https://www.aliexpress.com/store/product/CUAV-NEW-Flight-Controller-GPS-C-RTK-differential-positioning-navigation-module-GPS-for-PIX4-Pixhawk-pixhack/3257035_32853894248.html?spm=2114.12010608.0.0.75592fadQKPPEn) +- [cuav aliexpress](https://www.aliexpress.com/item/32853894248.html?spm=2114.12010608.0.0.75592fadQKPPEn) ## 설정 @@ -16,7 +16,7 @@ RTK setup and use on PX4 via _QGroundControl_ is largely plug and play \(see [RT ## 배선 -C-RTK GPS comes with a cable that terminates in a 6-pin connector and 4-pin connector that are compatible with [Pixhack v3](https://doc.cuav.net/flight-controller/pixhack/en/quick-start-pixhack-v3x.html#gps--compass). +C-RTK GPS comes with a cable that terminates in a 6-pin connector and 4-pin connector that are compatible with [Pixhack v3](../flight_controller/pixhack_v3.md). 6핀 커넥터는 RTK GPS 용 인터페이스를 제공하며 비행 콘트롤러의 GPS 포트에 연결하여야합니다. 4핀 커넥터는 두 번째 GPS로 사용하기 위한 (옵션) m8n (표준) GPS 인터페이스입니다. diff --git a/docs/ko/gps_compass/rtk_gps_cuav_c-rtk2.md b/docs/ko/gps_compass/rtk_gps_cuav_c-rtk2.md index 6aea7d8563..14269d956a 100644 --- a/docs/ko/gps_compass/rtk_gps_cuav_c-rtk2.md +++ b/docs/ko/gps_compass/rtk_gps_cuav_c-rtk2.md @@ -1,6 +1,6 @@ # CUAV C-RTK2 GNSS Module (RTK/PPK) -The [CUAV C-RTK2 receiver](https://www.cuav.net/en/c_rtk_9ps/) is a high-performance PPK/RTK positioning module created by CUAV for professional applications such as drone aerial surveying and mapping. +The [CUAV C-RTK2 receiver](https://www.cuav.net/en/c-rtk-9ps-en/) is a high-performance PPK/RTK positioning module created by CUAV for professional applications such as drone aerial surveying and mapping. It has a high-precision IMU and positioning module, and can reduce the number of required [control points](https://www.youtube.com/watch?v=3k7v5aXyuKQ) by more than to 80%. In addition to surveying/mapping, it is suitable for many other use-cases, including: agricultural plant protection and drone swarms. @@ -10,7 +10,7 @@ In addition to surveying/mapping, it is suitable for many other use-cases, inclu - High-performance H7 processor - High precision industrial grade IMU -- Support RTK and save RAW raw data (PPK) at the same time +- Support RTK and save raw data (PPK) at the same time - Multi-satellite and multi-frequency receivers - UAVCAN/Dronecan protocol - Support hotshoe and shutter trigger @@ -18,7 +18,7 @@ In addition to surveying/mapping, it is suitable for many other use-cases, inclu ## 구매처 -- [CUAV Store](https://store.cuav.net/shop/c-rtk-2/) +- [CUAV Store](https://store.cuav.net/?route=product%2Fproduct&product_id=159) - [CUAV aliexpress](https://pt.aliexpress.com/item/1005003754165772.html?spm=a2g0o.store_pc_groupList.8148356.13.2f893550i0NE4o) # 요약 diff --git a/docs/ko/gps_compass/rtk_gps_datagnss_nano_hrtk.md b/docs/ko/gps_compass/rtk_gps_datagnss_nano_hrtk.md index 4db5b0567e..29845a96b9 100644 --- a/docs/ko/gps_compass/rtk_gps_datagnss_nano_hrtk.md +++ b/docs/ko/gps_compass/rtk_gps_datagnss_nano_hrtk.md @@ -90,7 +90,7 @@ Note that for the base we recommend the [NANO RTK Receiver](https://www.datagnss ![DATAGNSS NANO RTK Receiver with case](../../assets/hardware/gps/datagnss_gem1305/nano_rtk_with_case.png) -See to [How to setup Base station](https://wiki.datagnss.com/index.php/GEM1305-autopilot#Base_station_setup) for information on how to configure the module for use as a base station (not including step 6 and later, for which you would QGroundControl instead of Mission Planner). +See to [How to setup Base station](https://docs.datagnss.com/#Base_station_setup) for information on how to configure the module for use as a base station (not including step 6 and later, for which you would QGroundControl instead of Mission Planner). ### Rover Setup (PX4) @@ -111,13 +111,12 @@ GPS and RTK configuration on PX4 via _QGroundControl_ is plug and play (see [RTK ## Resources -- [NANO RTK Receiver 2D drawing file](https://wiki.datagnss.com/images/3/31/EVK-DG-1206_V.2.0.pdf) - [NANO HRTK Receiver Wiki](https://docs.datagnss.com/gnss/rtk_receiver/NANO/nano-helix-rtk/) (DATAGNSS WiKi) - [HED-10L Heading RTK Receiver](https://docs.datagnss.com/gnss/rtk_receiver/HED-10L/) ## More information -- [NANO RTK Receiver](https://docs.datagnss.com/gnss/rtk_receiver/NANO/nano-rtk-receiver) +- [NANO RTK Receiver](https://docs.datagnss.com/gnss/rtk_receiver/NANO/nano-rtk-receiver/) - [HELIX Antenna for RTK](https://www.datagnss.com/collections/rtk-antenna/products/smart-helix-antenna) - [RTK Antenna AGR6302G](https://www.datagnss.com/collections/rtk-antenna/products/antenna-agr6302g) - [AT400 RTK Antenna](https://www.datagnss.com/collections/rtk-antenna/products/at400-multi-band-antenna-for-rtk) diff --git a/docs/ko/gps_compass/rtk_gps_drotek_xl.md b/docs/ko/gps_compass/rtk_gps_drotek_xl.md index 7b032cad86..b67ca1c93e 100644 --- a/docs/ko/gps_compass/rtk_gps_drotek_xl.md +++ b/docs/ko/gps_compass/rtk_gps_drotek_xl.md @@ -2,7 +2,7 @@ :::info This module appears to have been discontinued, and is no longer on the Drotek site (September 2023). -The last documentation was in [PX4 v1.13 here](https://docs.px4.io/v1.13/en/gps_compass/rtk_gps_drotek_xl.html) +The last documentation was in [PX4 v1.13 here](https://docs.px4.io/v1.13/en/gps_compass/rtk_gps_drotek_xl) ::: diff --git a/docs/ko/gps_compass/rtk_gps_gem1305.md b/docs/ko/gps_compass/rtk_gps_gem1305.md index a10248fed2..05589e0039 100644 --- a/docs/ko/gps_compass/rtk_gps_gem1305.md +++ b/docs/ko/gps_compass/rtk_gps_gem1305.md @@ -77,7 +77,7 @@ The 1.25mm pitch 6P connector (from left: PIN1 to PIN6) supports UART for GNSS a ## 하드웨어 설정 RTK requires a base RTK module attached to the ground station, and a rover RTK module on the vehicle. -The data from the base needs to be transmitted to the drone via telemetry radio and inputed into the RTK receiver on the rover. +The data from the base needs to be transmitted to the drone via telemetry radio and inputted into the RTK receiver on the rover. ![RTK setup overview](../../assets/hardware/gps/datagnss_gem1305/setup_overview.png) @@ -93,7 +93,7 @@ Note that for the base we recommend the [NANO RTK Receiver](https://www.datagnss DATAGNSS NANO RTK Receiver -See to [How to setup Base station](https://wiki.datagnss.com/index.php/GEM1305-autopilot#Base_station_setup) for information on how to configure the module for use as a base station (not including step 6 and later, for which you would QGroundControl instead of Mission Planner). +See to [How to setup Base station](https://docs.datagnss.com/#Base_station_setup) for information on how to configure the module for use as a base station (not including step 6 and later, for which you would QGroundControl instead of Mission Planner). ### Rover Setup (PX4) @@ -115,14 +115,13 @@ GPS and RTK configuration on PX4 via _QGroundControl_ is plug and play (see [RTK ## Resources -- [NANO RTK Receiver 2D drawing file](https://wiki.datagnss.com/images/3/31/EVK-DG-1206_V.2.0.pdf) - [GEM1305 Wiki](https://docs.datagnss.com/gnss/rtk_receiver/GEM1305/) (DATAGNSS WiKi) - [HED-10L Heading RTK Receiver](https://docs.datagnss.com/gnss/rtk_receiver/HED-10L/) - [NANO HRTK Receiver](https://docs.datagnss.com/gnss/rtk_receiver/NANO/nano-helix-rtk/) ## More information -- [NANO RTK Receiver](https://www.datagnss.com/collections/evk/products/tau951m-1312-tiny-evk) +- [NANO RTK Receiver](https://www.datagnss.com/products/nano-rtk-receiver) - [HELIX Antenna for RTK](https://www.datagnss.com/collections/rtk-antenna/products/smart-helix-antenna) - [RTK Antenna AGR6302G](https://www.datagnss.com/collections/rtk-antenna/products/antenna-agr6302g) - [AT400 RTK Antenna](https://www.datagnss.com/collections/rtk-antenna/products/at400-multi-band-antenna-for-rtk) diff --git a/docs/ko/gps_compass/rtk_gps_hex_hereplus.md b/docs/ko/gps_compass/rtk_gps_hex_hereplus.md index af20afe92a..0f01c3f646 100644 --- a/docs/ko/gps_compass/rtk_gps_hex_hereplus.md +++ b/docs/ko/gps_compass/rtk_gps_hex_hereplus.md @@ -5,7 +5,7 @@ :::info This GPS is no longer available for purchase but is still compatible with PX4. -Usage documentation can be found in [PX4v1.11 docs](https://docs.px4.io/v1.11/en/gps_compass/rtk_gps_hex_hereplus.html) +Usage documentation can be found in [PX4v1.11 docs](https://docs.px4.io/v1.11/en/gps_compass/rtk_gps_hex_hereplus) ::: The **Here+ RTK GPS receiver** is a small, light and energy efficient [RTK GPS module](../gps_compass/rtk_gps.md), based on the u-blox M8P. RTK를 사용하면 PX4는 일반 GPS에서 제공하는 것 보다 훨씬 더 정확한 센티미터 수준의 정확도로 위치를 파악할 수 있습니다. diff --git a/docs/ko/gps_compass/rtk_gps_holybro_h-rtk-f9p.md b/docs/ko/gps_compass/rtk_gps_holybro_h-rtk-f9p.md index aa56937f56..8044dcd28d 100644 --- a/docs/ko/gps_compass/rtk_gps_holybro_h-rtk-f9p.md +++ b/docs/ko/gps_compass/rtk_gps_holybro_h-rtk-f9p.md @@ -19,7 +19,7 @@ Using RTK allows PX4 to get its position with centimetre-level accuracy, which i ## 구매처 - [H-RTK F9P (Holybro Website)](https://holybro.com/products/h-rtk-f9p-gnss-series) -- [H-RTK Accessories (Holybro Website)](https://holybro.com/collections/h-rtk-gps) +- [H-RTK Accessories (Holybro Website)](https://holybro.com/collections/gps) ## 설정 @@ -50,6 +50,6 @@ The cables/connectors may need to be modified in order to connect to other fligh ## GPS 소품 -[H-RTK Mount (Holybro Website)](https://holybro.com/products/vertical-mount-for-h-rtk-helical) +[H-RTK Mount (Holybro Website)](https://holybro.com/collections/gps-accessories/products/vertical-mount-for-h-rtk-helical) ![h-rtk](../../assets/hardware/gps/rtk_holybro_h-rtk_mount_3.png) diff --git a/docs/ko/gps_compass/rtk_gps_holybro_h-rtk-m8p.md b/docs/ko/gps_compass/rtk_gps_holybro_h-rtk-m8p.md index 7a62557d76..d2f983c492 100644 --- a/docs/ko/gps_compass/rtk_gps_holybro_h-rtk-m8p.md +++ b/docs/ko/gps_compass/rtk_gps_holybro_h-rtk-m8p.md @@ -2,9 +2,10 @@ :::warning This GNSS has been discontinued, and is no longer commercially available. +Replaced by [Holybro H-RTK F9P GNSS](../gps_compass/rtk_gps_holybro_h-rtk-f9p.md). ::: -The [Holybro H-RTK M8P GNSS](https://holybro.com/collections/standard-h-rtk-series/products/h-rtk-m8p-gnss-series) is an [RTK GNSS module](../gps_compass/rtk_gps.md) series for the mass market. +The _Holybro H-RTK M8P GNSS_ is an [RTK GNSS module](../gps_compass/rtk_gps.md) series for the mass market. This family is similar to the [H-RTK M9P](../gps_compass/rtk_gps_holybro_h-rtk-f9p.md) series but uses the smaller, lighter, and less expensive M8P u-blox RTK GNSS module (which still provides far superior position resolution than previous generations\_. Holybro H-RTK M8P에는 세 가지 모델이 있으며, 각각 다른 요구 사항을 충족하기 위해 서로 다른 안테나 디자인을 사용합니다. @@ -16,7 +17,7 @@ RTK를 사용하면 PX4는 일반 GPS에서 제공하는 것 보다 훨씬 더 ## 구매처 -- [H-RTK M8P (GPS RTK Mounts)](https://holybro.com/products/vertical-mount-for-h-rtk-helical) +- Discontinued. ## 설정 @@ -30,9 +31,7 @@ All H-RTK GNSS models come with a GH 10-pin connector/cable that is compatible w The cables/connectors may need to be modified in order to connect to other flight controller boards (see [pin map](#pin_map)below). ::: - - -## 핀 맵 +## Pin Map {#pin_map} ![h-rtk_rover_pinmap](../../assets/hardware/gps/rtk_holybro_h-rtk-m8p_pinmap.jpg) diff --git a/docs/ko/gps_compass/rtk_gps_holybro_unicore_um982.md b/docs/ko/gps_compass/rtk_gps_holybro_unicore_um982.md index 69d2c0de92..af8d6e1264 100644 --- a/docs/ko/gps_compass/rtk_gps_holybro_unicore_um982.md +++ b/docs/ko/gps_compass/rtk_gps_holybro_unicore_um982.md @@ -1,10 +1,10 @@ # Holybro H-RTK Unicore UM982 GPS -The [Holybro H-RTK Unicore UM982 GPS](https://holybro.com/products/h-rtk-um982) is an multi-band high-precision [RTK GNSS System](../gps_compass/rtk_gps.md) launched by Holybro. +The [Holybro H-RTK Unicore UM982 GPS](https://holybro.com/products/h-rtk-unicore-um982) is an multi-band high-precision [RTK GNSS System](../gps_compass/rtk_gps.md) launched by Holybro. ![HB-pmw3901-1](../../assets/hardware/gps/holybro-unicore-um982/holybro-unicore-um982-1.jpg) -This module is based on the [Unicore UM982 Chip](https://en.unicorecomm.com/products/detail/24), which supports RTK positioning and dual-antenna heading calculation. +This module is based on the [Unicore UM982 Chip](https://en.unicore.com/products/dual-antenna-gnss-um982/), which supports RTK positioning and dual-antenna heading calculation. This means that it can generate a moving baseline headline/yaw determinations for autopilots with just one GPS module and dual antennas - a magnetometer is not needed. Unlike when using a module such as the U-blox F9P, where you would need [two U-blox F9P modules to compute a heading angle](../gps_compass/u-blox_f9p_heading.md), with the Unicore UM982 GPS, you only need one GPS module! @@ -20,7 +20,7 @@ Additional technical information can be found at [Holybro Technical Documentatio ## 구매처 -- [Holybro Website](https://holybro.com/products/h-rtk-um982) +- [Holybro Website](https://holybro.com/products/h-rtk-unicore-um982) ## 배선 diff --git a/docs/ko/gps_compass/rtk_gps_locosys_r1.md b/docs/ko/gps_compass/rtk_gps_locosys_r1.md index 0e608794ce..06025daca0 100644 --- a/docs/ko/gps_compass/rtk_gps_locosys_r1.md +++ b/docs/ko/gps_compass/rtk_gps_locosys_r1.md @@ -26,7 +26,7 @@ For an equivalent GPS module with a compass try: [LOCOSYS Hawk R2](../gps_compas - Fast TTFF at low signal level - Free hybrid ephemeris prediction to achieve faster cold start - Default 5Hz, up to 10 Hz update rate (SBAS support 5Hz only). -- Build-in super capacitor to reserve system data for rapid satellite acquisition +- Built-in super capacitor to reserve system data for rapid satellite acquisition ![LOCOSYS Hawk R1](../../assets/hardware/gps/locosys_hawk_a1/locosys_hawk_a1_gps.png) diff --git a/docs/ko/gps_compass/rtk_gps_locosys_r2.md b/docs/ko/gps_compass/rtk_gps_locosys_r2.md index d2c9f493f0..534b964f34 100644 --- a/docs/ko/gps_compass/rtk_gps_locosys_r2.md +++ b/docs/ko/gps_compass/rtk_gps_locosys_r2.md @@ -22,8 +22,8 @@ The fast time-to-first-fix, RTK convergence, superior sensitivity, low power con - Fast TTFF at low signal level - Free hybrid ephemeris prediction to achieve faster cold start - Default 5Hz, up to 10 Hz update rate (SBAS support 5Hz only) -- Build-in super capacitor to reserve system data for rapid satellite acquisition -- Build-in 3 axis compass function +- Built-in super capacitor to reserve system data for rapid satellite acquisition +- Built-in 3 axis compass function - Three LED indicator for Power, PPS and Data transmit ![LOCOSYS Hawk R2](../../assets/hardware/gps/locosys_hawk_a1/locosys_hawk_a1_gps.png) diff --git a/docs/ko/gps_compass/septentrio.md b/docs/ko/gps_compass/septentrio.md index 2160154b9e..eb31f237cd 100644 --- a/docs/ko/gps_compass/septentrio.md +++ b/docs/ko/gps_compass/septentrio.md @@ -10,7 +10,7 @@ Certain receivers are recommended for autopilot applications because of their ph Dual-antenna, ultra-low-power GNSS rover receiver with support for heading. -- [AsteRx-m3 Pro+](https://www.septentrio.com/en/products/gps/gnss-boards/asterx-m3-pro-plus) +- [AsteRx-m3 Pro+](https://www.septentrio.com/en/products/gnss-receivers/gnss-boards/asterx-m3-pro-plus) Dual-antenna, ultra-low-power versatile GNSS rover and base receiver with support for heading. @@ -19,7 +19,7 @@ Certain receivers are recommended for autopilot applications because of their ph Single-antenna evaluation kit with support for L5 frequency band, based on the mosaic-X5 GNSS receiver module. -- [mosaic-go heading](https://www.septentrio.com/en/products/gps/gnss-receiver-modules/mosaic-h-evaluation-kit) +- [mosaic-go heading](https://www.septentrio.com/en/products/gnss-receivers/gnss-receiver-modules/mosaic-h-evaluation-kit) Dual-antenna evaluation kit with support for heading, based on the mosaic-H GNSS receiver module. diff --git a/docs/ko/gps_compass/septentrio_mosaic-go.md b/docs/ko/gps_compass/septentrio_mosaic-go.md index 87dcc69e74..5e7fcd0772 100644 --- a/docs/ko/gps_compass/septentrio_mosaic-go.md +++ b/docs/ko/gps_compass/septentrio_mosaic-go.md @@ -2,8 +2,8 @@ The Septentrio mosaic-go receivers are evaluation kits for their mosaic-X5 and mosaic-H receiver modules. Because of their small size and low weight, they are ideal for autopilot applications. -The available variants are the [mosaic-go](https://www.septentrio.com/en/products/gps/gnss-receiver-modules/mosaic-go-evaluation-kit) -and [mosaic-go heading](https://www.septentrio.com/en/products/gps/gnss-receiver-modules/mosaic-h-evaluation-kit). +The available variants are the [mosaic-go](https://www.septentrio.com/en/products/gnss-receivers/gnss-receiver-modules/mosaic-go-evaluation-kit) +and [mosaic-go heading](https://www.septentrio.com/en/products/gnss-receivers/gnss-receiver-modules/mosaic-h-evaluation-kit). ![Mosaic go Highly Accurate GNSS Receiver Module](../../assets/hardware/gps/septentrio_sbf/mosaic-go.png) @@ -108,7 +108,7 @@ To enable multi-antenna attitude determination, follow the following procedure: These can be compensated for with the heading parameters provided by the Septentrio driver in PX4. :::info -For optimal heading results, the two antennas should be seperated by at least 30cm / 11.8 in (ideally 50cm / 19.7in or more). +For optimal heading results, the two antennas should be separated by at least 30cm / 11.8 in (ideally 50cm / 19.7in or more). For additional configuration of the dual antenna setup, please refer to our [Knowledge Base](https://support.septentrio.com/l/858493/2022-04-19/xgrqd) or the [hardware manual](https://web.septentrio.com/l/858493/2022-04-19/xgrql). ::: diff --git a/docs/ko/gps_compass/u-blox_f9p_heading.md b/docs/ko/gps_compass/u-blox_f9p_heading.md index b7f672d078..e0640b3111 100644 --- a/docs/ko/gps_compass/u-blox_f9p_heading.md +++ b/docs/ko/gps_compass/u-blox_f9p_heading.md @@ -10,7 +10,7 @@ This feature works on F9P devices that support CAN or expose the GPS UART2 port. The following devices are supported: - [ARK RTK GPS](https://arkelectron.com/product/ark-rtk-gps/) (arkelectron.com) -- [SparkFun GPS-RTK2 Board - ZED-F9P](https://www.sparkfun.com/products/15136) (www.sparkfun.com) +- [SparkFun GPS-RTK2 Board - ZED-F9P](https://www.sparkfun.com/sparkfun-gps-rtk2-board-zed-f9p-qwiic-gps-15136.html) (www.sparkfun.com) - [SIRIUS RTK GNSS ROVER (F9P)](https://store-drotek.com/911-sirius-rtk-gnss-rover-f9p.html) (store-drotek.com) - [mRo u-blox ZED-F9 RTK L1/L2 GPS](https://store.mrobotics.io/product-p/m10020d.htm) (store.mrobotics.io) - [Holybro H-RTK F9P Helical or Base](https://holybro.com/products/h-rtk-f9p-gnss-series) (Holybro Store) diff --git a/docs/ko/hardware/board_packaging.md b/docs/ko/hardware/board_packaging.md new file mode 100644 index 0000000000..746729d454 --- /dev/null +++ b/docs/ko/hardware/board_packaging.md @@ -0,0 +1,298 @@ +# Board Firmware Packaging + +PX4 supports building distributable firmware packages for Linux-based (POSIX) boards. +While NuttX boards produce `.px4` firmware files that are flashed via QGroundControl, POSIX boards can produce `.deb` (Debian) packages that are installed using standard Linux package management tools (`dpkg`, `apt`). + +This page covers how manufacturers can add `.deb` packaging to their boards, with examples for both single-processor and multi-processor architectures. + +## 개요 + +The packaging framework uses [CMake CPack](https://cmake.org/cmake/help/latest/module/CPack.html) with the DEB generator. +It is built on two extension points in the PX4 build system: + +- **`boards///cmake/package.cmake`**: CPack variable overrides (package name, version, dependencies, architecture, maintainer info). Loaded during CMake configure. +- **`boards///cmake/install.cmake`**: `install()` rules that define what goes into the package (binaries, scripts, config files, service files). Loaded from `platforms/posix/CMakeLists.txt` where build targets are available. + +When a board provides these files, CI automatically discovers and builds the `_deb` target alongside the normal firmware build. + +## Build Command + +For any board with packaging support: + +```sh +make __deb +``` + +예: + +```sh +make modalai_voxl2_deb +``` + +This builds the `_default` configuration (and any companion builds for multi-processor boards), then runs `cpack -G DEB` in the build directory. +The resulting `.deb` file is placed in `build/__default/`. + +## Adding Packaging to a Board + +### File Structure + +``` +boards/// + cmake/ + package.cmake # CPack configuration (required) + install.cmake # Install rules (required) + debian/ + postinst # Post-install script (optional) + prerm # Pre-remove script (optional) + .service # Systemd unit file (optional) +``` + +### Step 1: CPack Configuration (package.cmake) + +This file sets CPack variables that control the `.deb` metadata. +It is included from `cmake/package.cmake` after the base CPack defaults are configured. + +```cmake +# boards///cmake/package.cmake + +# Derive Debian-compatible version from git tag +# v1.17.0-alpha1-42-gabcdef -> 1.17.0~alpha1.42.gabcdef +# v1.17.0 -> 1.17.0 +string(REGEX REPLACE "^v" "" _deb_ver "${PX4_GIT_TAG}") +string(REGEX REPLACE "-" "~" _deb_ver "${_deb_ver}") +string(REGEX REPLACE "~([0-9]+)~" ".\\1." _deb_ver "${_deb_ver}") + +# Target architecture (use the target arch, not the build host) +set(CPACK_DEBIAN_ARCHITECTURE "arm64") + +# Package identity +set(CPACK_DEBIAN_PACKAGE_NAME "my-px4-board") +set(CPACK_DEBIAN_FILE_NAME "my-px4-board_${_deb_ver}_arm64.deb") + +# Install prefix +set(CPACK_PACKAGING_INSTALL_PREFIX "/usr") +set(CPACK_INSTALL_PREFIX "/usr") +set(CPACK_SET_DESTDIR true) + +# Package metadata +set(CPACK_DEBIAN_PACKAGE_DESCRIPTION "PX4 Autopilot for My Board") +set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Vendor ") +set(CPACK_DEBIAN_PACKAGE_DEPENDS "some-dependency (>= 1.0)") +set(CPACK_DEBIAN_PACKAGE_CONFLICTS "") +set(CPACK_DEBIAN_PACKAGE_REPLACES "") + +# Disable shlibdeps for cross-compiled boards +set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS OFF) + +# Include post-install and pre-remove scripts (optional) +set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA + "${PX4_BOARD_DIR}/debian/postinst;${PX4_BOARD_DIR}/debian/prerm") +``` + +**Key variables:** + +| 변수 | Purpose | +| -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `CPACK_DEBIAN_ARCHITECTURE` | Target architecture. Set explicitly for cross-compiled boards since `dpkg --print-architecture` reports the build host, not the target. | +| `CPACK_DEBIAN_PACKAGE_NAME` | Package name as it appears in `dpkg -l`. | +| `CPACK_DEBIAN_FILE_NAME` | Output `.deb` filename. | +| `CPACK_DEBIAN_PACKAGE_DEPENDS` | Runtime dependencies (comma-separated, Debian format). | +| `CPACK_DEBIAN_PACKAGE_SHLIBDEPS` | Set to `OFF` for cross-compiled boards where `dpkg-shlibdeps` cannot inspect target binaries. | + +### Step 2: Install Rules (install.cmake) + +This file defines what files are packaged in the `.deb`. +It is included from `platforms/posix/CMakeLists.txt` where the `px4` build target is available. + +All paths are relative to `CPACK_PACKAGING_INSTALL_PREFIX` (typically `/usr`). Use `../` to install outside the prefix (e.g., `../etc/` installs to `/etc/`). + +**Minimal example (single-processor board):** + +```cmake +# boards///cmake/install.cmake + +# PX4 binary +install(TARGETS px4 RUNTIME DESTINATION bin) + +# Module alias script (generated during build) +install(PROGRAMS ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/px4-alias.sh DESTINATION bin) + +# Startup scripts +install(PROGRAMS + ${PX4_BOARD_DIR}/target/my-px4-start + DESTINATION bin +) + +# Configuration files +install(FILES + ${PX4_BOARD_DIR}/target/my-config.conf + DESTINATION ../etc/my-board +) + +# Systemd service +install(FILES ${PX4_BOARD_DIR}/debian/my-px4.service + DESTINATION ../etc/systemd/system +) + +# Component metadata +install(FILES + ${PX4_BINARY_DIR}/actuators.json.xz + ${PX4_BINARY_DIR}/parameters.json.xz + DESTINATION ../data/px4/etc/extras + OPTIONAL +) +install(FILES ${PX4_BINARY_DIR}/events/all_events.json.xz + DESTINATION ../data/px4/etc/extras + OPTIONAL +) +``` + +### Step 3: Debian Scripts (optional) + +#### postinst + +Runs after the package is installed. Common tasks: + +- Create `px4-*` module symlinks from `px4-alias.sh` +- Set up required directories with correct ownership +- Run `systemctl daemon-reload` to pick up the service file +- Board-specific setup (e.g., DSP signature generation) + +```bash +#!/usr/bin/env bash +set -e + +# Create px4-* symlinks +if [ -f /usr/bin/px4-alias.sh ]; then + grep "^alias " /usr/bin/px4-alias.sh | \ + sed "s/alias \(px4-[a-zA-Z0-9_]*\)=.*/\1/" | while read cmd; do + ln -sf px4 "/usr/bin/${cmd}" + done +fi + +# Create data directories +mkdir -p /data/px4/param +mkdir -p /data/px4/etc/extras + +# Reload systemd +if command -v systemctl > /dev/null 2>&1; then + systemctl daemon-reload +fi +``` + +#### prerm + +Runs before the package is removed: + +```bash +#!/usr/bin/env bash +set -e + +# Stop the service +if command -v systemctl > /dev/null 2>&1; then + systemctl stop my-px4 2>/dev/null || true +fi + +# Remove px4-* symlinks +for f in /usr/bin/px4-*; do + if [ -L "$f" ] && [ "$(readlink "$f")" = "px4" ]; then + rm -f "$f" + fi +done +``` + +Both scripts must be executable (`chmod +x`). + +## Multi-Processor Boards + +Some boards run PX4 across multiple processors, for example the ModalAI VOXL2 which has a POSIX apps processor (ARM) and a Hexagon DSP (SLPI). +These produce two separate CMake builds, but the `.deb` must contain artifacts from both. + +### How It Works + +1. The `_default` build (POSIX/apps processor) owns the `.deb`. +2. The Makefile `%_deb` target builds `_default`, which chains any companion builds as CMake prerequisites. +3. The `install.cmake` pulls companion build artifacts via absolute path to the sibling build directory. +4. CPack runs in the `_default` build tree and produces a single `.deb`. + +### Companion Build Artifacts + +In `install.cmake`, reference the companion build output by absolute path: + +```cmake +# DSP firmware blob from companion SLPI build +set(SLPI_BUILD_DIR "${PX4_SOURCE_DIR}/build/_-slpi_default") + +install(FILES ${SLPI_BUILD_DIR}/platforms/qurt/libpx4.so + DESTINATION lib/rfsa/adsp + OPTIONAL +) +``` + +The `OPTIONAL` keyword allows the `.deb` to build even when the companion build hasn't run (useful for development/testing of just the apps-processor side). + +### VOXL2 Reference + +The VOXL2 board is a complete working example of multi-processor packaging: + +``` +boards/modalai/voxl2/ + cmake/ + package.cmake # CPack config: voxl-px4, arm64, deps, shlibdeps off + install.cmake # px4 binary, SLPI libpx4.so, scripts, configs, metadata + debian/ + postinst # Symlinks, DSP signature, directory setup + prerm # Stop service, remove symlinks + voxl-px4.service # Systemd unit (after sscrpcd, restart on-failure) + target/ + voxl-px4 # Main startup wrapper + voxl-px4-start # PX4 module startup script +``` + +The resulting `.deb` installs: + +| Path | Contents | +| -------------------------------------- | ------------------------------------------------- | +| `/usr/bin/px4` | Apps processor PX4 binary | +| `/usr/bin/px4-alias.sh` | Module alias script | +| `/usr/bin/voxl-px4` | Startup wrapper | +| `/usr/bin/voxl-px4-start` | Module startup script | +| `/usr/lib/rfsa/adsp/libpx4.so` | DSP firmware (from SLPI build) | +| `/etc/modalai/*.config` | Board configuration files | +| `/etc/systemd/system/voxl-px4.service` | Systemd service | +| `/data/px4/etc/extras/*.json.xz` | Component metadata | + +## CI Integration + +### Automatic Discovery + +The CI system (`Tools/ci/generate_board_targets_json.py`) automatically discovers boards with `cmake/package.cmake` and adds a `__deb` target to the board's existing CI group. +No manual CI configuration is needed. + +### Artifact Collection + +The `Tools/ci/package_build_artifacts.sh` script collects `.deb` files alongside `.px4` and `.elf` artifacts. +On tagged releases, `.deb` files are uploaded to both S3 and GitHub Releases. + +## Version Format + +The `.deb` version is derived from `PX4_GIT_TAG` using Debian-compatible formatting: + +| Git Tag | Debian Version | 참고 | +| --------------------------- | -------------------------- | --------------------------------------------------------- | +| `v1.17.0` | `1.17.0` | Stable release | +| `v1.17.0-beta1` | `1.17.0~beta1` | Pre-release (`~` sorts before release) | +| `v1.17.0-alpha1-42-gabcdef` | `1.17.0~alpha1.42.gabcdef` | Development build | + +The `~` prefix in Debian versioning ensures pre-releases sort lower than the final release: `1.17.0~beta1 < 1.17.0`. + +## Checklist for New Boards + +1. Create `boards///cmake/package.cmake` with CPack variables +2. Create `boards///cmake/install.cmake` with install rules +3. (Optional) Create `boards///debian/postinst` and `prerm` +4. (Optional) Create `boards///debian/.service` +5. Test locally: `make __deb` +6. Verify: `dpkg-deb --info build/__default/_*.deb` +7. Verify: `dpkg-deb --contents build/__default/_*.deb` +8. CI picks it up automatically on the next push diff --git a/docs/ko/hardware/board_support_guide.md b/docs/ko/hardware/board_support_guide.md index ad5dec6778..63183773a5 100644 --- a/docs/ko/hardware/board_support_guide.md +++ b/docs/ko/hardware/board_support_guide.md @@ -57,7 +57,7 @@ PX4는 일반적으로 상업적으로 사용 가능한 보드만 지원하므 ### VER and REV ID (Hardware Revision and Version Sensing) {#ver_rev_id} FMUv5 이상에는 전기 감지 메커니즘이 있습니다. -선택적 구성 데이터와 결합된 이 감지는 필수 장치 및 전원 공급 장치 구성과 관련하여 하드웨어 구성을 정의합니다. Manufacturers must obtain the VER and REV ID from PX4 board maintainers by issuing a PR to ammend the [DS-018 Pixhawk standard](https://github.com/pixhawk/Pixhawk-Standards) for board versions and revisions. +선택적 구성 데이터와 결합된 이 감지는 필수 장치 및 전원 공급 장치 구성과 관련하여 하드웨어 구성을 정의합니다. Manufacturers must obtain the VER and REV ID from PX4 board maintainers by issuing a PR to amend the [DS-018 Pixhawk standard](https://github.com/pixhawk/Pixhawk-Standards) for board versions and revisions. Because these boards are 100% compliant with the Pixhawk standard, the values assigned for VER and REV ID are the defaults for that FMU Version. @@ -97,7 +97,7 @@ _New_ experimental boards are allocated [VER and REV IDs](#ver_rev_id) based on 이 범주에는 PX4 프로젝트 또는 제조업체에서 지원하지 않고 "실험적" 지원에 해당하지 않는 모든 보드가 포함됩니다. - 보드는 우리가 이미 지원하는 것과 문서상 어느 정도 호환되며 "실험적"으로 올리려면, 최소한의 노력이 필요하지만 개발 팀이나 제조업체 모두 현재 이를 추구하지 않습니다. -- Manufacturer/Owner of hardware violates our [Code of Conduct](https://discuss.px4.io/t/code-of-conduct/13655) +- Manufacturer/Owner of hardware violates our [Code of Conduct](https://discuss.px4.io/t/px4-community-code-of-conduct/13655) - 라이선스 제한으로 인해 보드 지원을 추가하는 데 필요한 도구/libs/drivers/etc가 호환되지 않는 것으로 간주되는 비공개 소스 - 보드가 일반 요구 사항에 명시된 최소 요구 사항을 충족하지 않습니다. diff --git a/docs/ko/hardware/drone_parts.md b/docs/ko/hardware/drone_parts.md index fe395f1b44..94c826c1ad 100644 --- a/docs/ko/hardware/drone_parts.md +++ b/docs/ko/hardware/drone_parts.md @@ -1,4 +1,4 @@ -# Hardware Hardware Selection & Setup +# Hardware Selection & Setup PX4 완제품 기체와 자체 제작 드론의 부품들에 대하여 설명합니다. diff --git a/docs/ko/hardware/porting_guide_config.md b/docs/ko/hardware/porting_guide_config.md index 5f21a6fdd5..6073da83f6 100644 --- a/docs/ko/hardware/porting_guide_config.md +++ b/docs/ko/hardware/porting_guide_config.md @@ -70,3 +70,19 @@ The command line and GUI interfaces are shown below. ### menuconfig Command Line Interface ![menuconfig command line interface](../../assets/hardware/kconfig-guiconfig.png) + +## Fortified Toolchain Compatibility + +Some toolchains define `_FORTIFY_SOURCE` by default. Those toolchains generally require some optimization, which means PX4 configurations that use `-O0` may fail. + +PX4 keeps the default debug optimization unchanged unless you explicitly opt in. To switch `PX4_DEBUG_OPT_LEVEL` from `-O0` to `-Og`, enable: + +- `Toolchain > Fortified toolchain support` + +This is the Kconfig symbol: + +```sh +CONFIG_BOARD_SUPPORT_FORTIFIED_TOOLCHAIN=y +``` + +You can set it either in `boardconfig`/`boardguiconfig` or directly in your board's `*.px4board` file. diff --git a/docs/ko/index.md b/docs/ko/index.md index 339b6ecf6c..da08f100bd 100644 --- a/docs/ko/index.md +++ b/docs/ko/index.md @@ -5,7 +5,7 @@ const { site } = useData(); # PX4 Autopilot 사용자 안내서 -[![Releases](https://img.shields.io/badge/release-main-blue.svg)](https://github.com/PX4/PX4-Autopilot/releases) [![Discuss](https://img.shields.io/badge/discuss-px4-ff69b4.svg)](https://discuss.px4.io//) [![Discord](https://discordapp.com/api/guilds/1022170275984457759/widget.png?style=shield)](https://discord.gg/dronecode) +[![Releases](https://img.shields.io/badge/release-main-blue.svg)](https://github.com/PX4/PX4-Autopilot/releases) [![Discuss](https://img.shields.io/badge/discuss-px4-ff69b4.svg)](https://discuss.px4.io//) [![Discord](https://discordapp.com/api/guilds/1022170275984457759/widget.png?style=shield)](https://discord.com/invite/dronecode) PX4 is an open-source autopilot for drones and autonomous vehicles. It runs on multirotors, fixed-wing, VTOL, helicopters, rovers, and more. This guide covers everything from assembly and configuration to flight operations and development. @@ -21,11 +21,13 @@ Documented changes since the stable release are captured in the evolving [releas
+## Try PX4 + +No hardware needed. Run PX4 in simulation with a single command using [Docker or a .deb package](simulation/px4_simulation_quickstart.md). Connect [QGroundControl](https://qgroundcontrol.com), [MAVSDK](https://mavsdk.mavlink.io/), or [ROS 2](ros2/index.md) and start flying immediately. + ## For Developers -:::tip -Building on PX4 or extending the platform? Start here: [Development Guide](development/development.md). Set up your [dev environment](dev_setup/config_initial.md), [build from source](dev_setup/building_px4.md), run [SITL simulation](simulation/index.md), or integrate via [ROS 2](ros2/index.md) and [MAVSDK](https://mavsdk.mavlink.io/). -::: +Want to modify PX4 or build from source? Start with the [Development Guide](development/development.md): set up your [dev environment](dev_setup/dev_env.md), [build the code](dev_setup/building_px4.md), and run [SITL simulation](simulation/index.md). ## 시작하기 @@ -49,7 +51,7 @@ Read [Operations](config/operations.md) to understand safety features and failsa ## 지원 -Get help on the [discussion forums](https://discuss.px4.io/) or [Discord](https://discord.gg/dronecode). See the [Support](contribute/support.md) page for diagnosing problems, reporting bugs, and joining the [weekly dev call](contribute/dev_call.md). +Get help on the [discussion forums](https://discuss.px4.io/) or [Discord](https://discord.com/invite/dronecode). See the [Support](contribute/support.md) page for diagnosing problems, reporting bugs, and joining the [weekly dev call](contribute/dev_call.md). ## 기여 @@ -94,9 +96,9 @@ The calendar default timezone is Central European Time (CET). ## 운영 방법 -The PX4 Autopilot project is hosted by the [Dronecode Foundation](https://www.dronecode.org/), a [Linux Foundation](https://www.linuxfoundation.org/) Collaborative Project. Dronecode holds all PX4 trademarks and serves as the project's legal guardian, ensuring vendor-neutral stewardship. No single company owns the name or controls the roadmap. The source code is licensed under the [BSD 3-Clause](https://opensource.org/license/BSD-3-Clause) license, so you are free to use, modify, and distribute it in your own projects. +The PX4 Autopilot project is hosted by the [Dronecode Foundation](https://dronecode.org/), a [Linux Foundation](https://www.linuxfoundation.org/) Collaborative Project. Dronecode holds all PX4 trademarks and serves as the project's legal guardian, ensuring vendor-neutral stewardship. No single company owns the name or controls the roadmap. The source code is licensed under the [BSD 3-Clause](https://opensource.org/license/BSD-3-Clause) license, so you are free to use, modify, and distribute it in your own projects. -Dronecode Logo Linux Foundation Logo +Dronecode Logo Linux Foundation Logo
 
diff --git a/docs/ko/mavlink/adding_messages.md b/docs/ko/mavlink/adding_messages.md index 275e8de7d5..87de83d3f9 100644 --- a/docs/ko/mavlink/adding_messages.md +++ b/docs/ko/mavlink/adding_messages.md @@ -39,7 +39,7 @@ Once the message headers for your definitions are generated in the PX4 build, yo The first step in debugging is to confirm that any messages you've created are being sent/received as you expect. -You should should first use the `uorb top []` command to verify in real-time that your message is published and the rate (see [uORB Messaging](../middleware/uorb.md#uorb-top-command)). +You should first use the `uorb top []` command to verify in real-time that your message is published and the rate (see [uORB Messaging](../middleware/uorb.md#uorb-top-command)). This approach can also be used to test incoming messages that publish a uORB topic (for other messages you might use `printf` in your code and test in SITL). There are several approaches you can use to view MAVLink traffic: @@ -82,16 +82,16 @@ So if you have created a custom message in PX4 you won't be able to use it unles ### Updating QGroundControl -You will need to [Build QGroundControl](https://docs.qgroundcontrol.com/master/en/qgc-dev-guide/getting_started/index.html) including a pre-built C library that contains your custom messages. +You will need to [Build QGroundControl](https://docs.qgroundcontrol.com/master/en/qgc-dev-guide/getting_started/index.html) with your custom messages included. -QGC uses a pre-built C library that must be located at [/qgroundcontrol/libs/mavlink/include/mavlink](https://github.com/mavlink/qgroundcontrol/tree/master/libs/mavlink/include/mavlink) in the QGC source. +QGC fetches MAVLink via CMake using settings defined in [`cmake/CustomOptions.cmake`](https://github.com/mavlink/qgroundcontrol/blob/master/cmake/CustomOptions.cmake). +The key variables are `QGC_MAVLINK_GIT_REPO` (the MAVLink repository to fetch), `QGC_MAVLINK_GIT_TAG` (a specific commit or tag), and `QGC_MAVLINK_DIALECT` (the dialect, default: `all`). +To use a custom MAVLink repository or dialect, override these in a `CustomOverrides.cmake` file in the QGC source root. -By default this is pre-included as a submodule from but you can [generate your own MAVLink Libraries](https://mavlink.io/en/getting_started/generate_libraries.html). +QGC uses the **all** dialect by default, which includes **common.xml**. +You can include your messages in either file, or [generate your own MAVLink Libraries](https://mavlink.io/en/getting_started/generate_libraries.html). -QGC uses the **all.xml** dialect by default, which includes **common.xml**. -You can include your messages in either file. - -Note that if you use your own _custom dialect_ then it should include **ArduPilotMega.xml** (or it will miss all the existing messages), and you will need to change the dialect used by setting it in [`MAVLINK_CONF`](https://github.com/mavlink/qgroundcontrol/blob/master/QGCExternalLibs.pri#L52) when running _qmake_. +Note that if you use your own _custom dialect_ then it should include **all.xml** (or it may miss all the existing messages), and you will need to set `QGC_MAVLINK_DIALECT` accordingly in `CustomOverrides.cmake`. ### Updating MAVSDK diff --git a/docs/ko/mavlink/index.md b/docs/ko/mavlink/index.md index 53ed4c4a1f..b8030b913e 100644 --- a/docs/ko/mavlink/index.md +++ b/docs/ko/mavlink/index.md @@ -9,10 +9,16 @@ It also links instructions for how you can add PX4 support for: - [Adding Standard Messages](../mavlink/adding_messages.md) - [Streaming MAVLink messages](../mavlink/streaming_messages.md) +- [Configuring/Using MAVLink Profiles](../mavlink/mavlink_profiles.md) - [Handling incoming MAVLink messages (and writing to a uORB topic)](../mavlink/receiving_messages.md) - [Custom MAVLink Messages](../mavlink/custom_messages.md) +- [Message Signing](../mavlink/message_signing.md) - [Protocols/Microservices](../mavlink/protocols.md) +:::warning +MAVLink messages are unauthenticated by default. Without [message signing](../mavlink/message_signing.md) enabled, any device that can send MAVLink messages to the vehicle can execute commands including shell access, file operations, and flight termination. Production deployments must enable signing and follow the [Security Hardening](../mavlink/security_hardening.md) guide. +::: + :::info We do not yet cover _command_ handling and sending, or how to implement your own microservices. ::: @@ -77,7 +83,7 @@ You will need to work with the [MAVLink team](https://mavlink.io/en/contributing ::: PX4 includes the [mavlink/mavlink](https://github.com/mavlink/mavlink) repo as a submodule under [/src/modules/mavlink](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/mavlink). -This contains XML definition files in [/mavlink/messages/1.0/](https://github.com/mavlink/mavlink/blob/master/message_definitions/v1.0/). +This contains XML definition files in [/mavlink/messages/1.0/](https://github.com/mavlink/mavlink/tree/master/message_definitions/v1.0). The build toolchain generates the MAVLink 2 C header files at build time. The XML file for which headers files are generated may be defined in the [PX4 kconfig board configuration](../hardware/porting_guide_config.md#px4-board-configuration-kconfig) on a per-board basis, using the variable `CONFIG_MAVLINK_DIALECT`: diff --git a/docs/ko/mavlink/mavlink_profiles.md b/docs/ko/mavlink/mavlink_profiles.md new file mode 100644 index 0000000000..c3ae6c8019 --- /dev/null +++ b/docs/ko/mavlink/mavlink_profiles.md @@ -0,0 +1,67 @@ +# MAVLink Profiles + +A MAVLink _profile_ (also called a _mode_) defines a set of messages that can be streamed by default on a MAVLink channel and their rates. + +This section lists the profiles, and explains how they can be used and extended. + +## Available Profiles + +The available profiles (in source-code declaration order) are: + +- _Normal_ (`MAVLINK_MODE_NORMAL`): Set of messages for a GCS. +- _Onboard_ (`MAVLINK_MODE_ONBOARD`): Set of messages for a companion computer on a fast link (such as Ethernet). +- _Gimbal_ (`MAVLINK_MODE_GIMBAL`): Messages for a gimbal. Note this also enables message forwarding. +- _External Vision_ (`MAVLINK_MODE_EXTVISION`): Messages for offboard vision systems. +- _External Vision Minimal_ (`MAVLINK_MODE_EXTVISIONMIN`): Messages for offboard vision systems on slower links. +- _OSD_ (`MAVLINK_MODE_OSD`): Set of messages for an [On-Screen Display (OSD)](../peripherals/osd.md#mavlink-osd) system. +- _Magic_ (`MAVLINK_MODE_MAGIC`): No messages streamed by default. Used when configuring streaming dynamically via MAVLink. +- _Custom_ (`MAVLINK_MODE_CUSTOM`): Same as `MAVLINK_MODE_MAGIC`. +- _Config_ (`MAVLINK_MODE_CONFIG`): Set of messages for configuration interface, sent at higher rates. This is used, for example, to send the `MAVLINK_MODE_NORMAL` message set via USB to a GCS. +- _Iridium_ (`MAVLINK_MODE_IRIDIUM`): Streams `HIGH_LATENCY2` message to an iridium satellite phone. +- _Minimal_ (`MAVLINK_MODE_MINIMAL`): Minimal set of messages for use with a GCS on a poor telemetry link. +- _Onboard Low Bandwidth_ (`MAVLINK_MODE_ONBOARD_LOW_BANDWIDTH`): Set of messages to be streamed to a companion computer for re-routing to a reduced-traffic link, such as a GCS. +- _Low Bandwidth_ (`MAVLINK_MODE_LOW_BANDWIDTH`): Reduced message set for low bandwidth links. +- _uAvionix_ (`MAVLINK_MODE_UAVIONIX`): Messages for a uAvionix ADS-B beacon. +- _Distance Sensor_ (`MAVLINK_MODE_DISTANCE_SENSOR`): Streams distance sensor data at unlimited rate. + +:::tip +The profile defines the _default_ messages and rates. +A connected MAVLink system can still request the streams/rates it wants using [MAV_CMD_SET_MESSAGE_INTERVAL](https://mavlink.io/en/messages/common.html#MAV_CMD_SET_MESSAGE_INTERVAL). +::: + +To find the exact messages in each profile, search for `configure_streams_to_default` (or the above profile names) in [mavlink_main.cpp](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/mavlink_main.cpp). + +## Assigning Profiles to Ports + +[MAVLink Peripherals](../peripherals/mavlink_peripherals.md) explains how to set up a port for communicating over MAVLink. +This uses the concept of an abstract [MAVLink instance](../peripherals/mavlink_peripherals.md#mavlink-instances) which is then assigned to a serial port. + +The profile associated with a particular MAVLink instance is set using the associated `MAV_X_MODE` parameter: + +- [MAV_0_MODE](../advanced_config/parameter_reference.md#MAV_0_MODE) +- [MAV_1_MODE](../advanced_config/parameter_reference.md#MAV_1_MODE) +- [MAV_2_MODE](../advanced_config/parameter_reference.md#MAV_2_MODE) + +There are also dedicated profile parameters for ports that are not configured via MAVLink instances: + +- [USB_MAV_MODE](../advanced_config/parameter_reference.md#USB_MAV_MODE): Profile for the USB port (used when MAVLink is set or detected on USB). +- [MAV_S_MODE](../advanced_config/parameter_reference.md#MAV_S_MODE): Profile for the internal SOM (System on Module) to FMU communication channel, used on boards where the FMU and companion computer are co-located on the same module. + +Note that not all profiles can necessarily be set on these ports. + +## Adding Messages to a Profile + +You can add messages to a profile in appropriate `case` switch in the [Mavlink::configure_streams_to_default(const char \*configure_single_stream)](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/mavlink_main.cpp#L1430) method (see [mavlink_main.cpp](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/mavlink_main.cpp)). + +If you're testing with a GCS over USB you might add the message to the `MAVLINK_MODE_CONFIG` case using the `configure_stream_local()` method. +For example, to stream `BATTERY_STATUS_DEMO` at 5 Hz: + +```cpp + case MAVLINK_MODE_CONFIG: // USB + // Note: streams requiring low latency come first + ... + configure_stream_local("BATTERY_STATUS_DEMO", 5.0f); + ... +``` + +See [Streaming MAVLink Messages](streaming_messages.md) for a more detailed example. diff --git a/docs/ko/mavlink/message_signing.md b/docs/ko/mavlink/message_signing.md new file mode 100644 index 0000000000..9de0fb4e07 --- /dev/null +++ b/docs/ko/mavlink/message_signing.md @@ -0,0 +1,184 @@ +# MAVLink Message Signing + +[MAVLink 2 message signing](https://mavlink.io/en/guide/message_signing.html) allows PX4 to cryptographically verify that incoming MAVLink messages originate from a trusted source (authentication). + +:::info +This mechanism does not _encrypt_ the message payload. +::: + +## 개요 + +When signing is enabled, PX4 appends a 13-byte [signature](https://mavlink.io/en/guide/message_signing.html#signature) to every outgoing MAVLink 2 message. + +Incoming messages are checked against the shared secret key, and unsigned or incorrectly signed messages are rejected (with [exceptions for safety-critical messages](#unsigned-message-allowlist)). + +The signing implementation is built into the MAVLink module and is always available, with no special build flags required. +The key is stored in an SD card: + +- **No key on SD card**: + Signing is disabled. + All messages are sent unsigned and all incoming messages are accepted. +- **Valid key on SD card**: + Signing is active on **all links** (including USB). + Outgoing messages are signed. + Incoming messages must be signed (with [exceptions](#unsigned-message-allowlist)). + +## Enable/Disable Signing + +Signing is controlled using the standard MAVLink [SETUP_SIGNING](https://mavlink.io/en/messages/common.html#SETUP_SIGNING) message (as per the [MAVLink signing specification](https://mavlink.io/en/guide/message_signing.html)): + +- To **enable** signing, send a `SETUP_SIGNING` message with a valid key on any link when no key is currently provisioned (see [Key Provisioning](#key-provisioning)). +- To **disable** signing via MAVLink, send a `SETUP_SIGNING` message with an all-zero key and timestamp. + This message **must be signed with the current active key**. + An unsigned blank-key message is rejected. +- To **change** the signing key, send a `SETUP_SIGNING` message with the new key on any link. + When signing is already active, the message must be signed with the current key. + +:::warning +Signing key changes (enable, disable, or rotate) are **rejected while the vehicle is armed**. +The vehicle must be disarmed before signing configuration can be changed. +::: + +:::tip +If the signing key is lost, you can still disable signing if you have physical access to the vehicle. +Either delete the key file (`/mavlink/mavlink-signing-key.bin`) from the SD card and reboot, or remove the SD card entirely. +::: + +## Key Provisioning + +The signing key is set by sending the MAVLink [SETUP_SIGNING](https://mavlink.io/en/messages/common.html#SETUP_SIGNING) message (ID 256) to PX4. +This message contains: + +- A 32-byte secret key +- A 64-bit initial timestamp + +PX4 accepts `SETUP_SIGNING` on **any link** (USB, telemetry radio, network, and so on). + +When signing is **not active** (no key provisioned), the first `SETUP_SIGNING` with a valid key enables signing. +When signing is **already active**, key changes (including disabling) require that the `SETUP_SIGNING` message is signed with the current key. + +Note that `SETUP_SIGNING` is rejected while the vehicle is armed (disarm before provisioning or changing keys). +As per the MAVLink specification, `SETUP_SIGNING` is never forwarded to other links. + +## Key Storage + +The secret key and timestamp are stored on the SD card at: + +```txt +/mavlink/mavlink-signing-key.bin +``` + +The file is a 40-byte binary file: + +| Offset | Size | Content | +| ------ | -------- | -------------------------------------------------------- | +| 0 | 32 bytes | Secret key | +| 32 | 8 bytes | Timestamp (`uint64_t`, little-endian) | + +The file is created with mode `0600` (owner read/write only), and the containing `/mavlink/` directory is created with mode `0700` (owner only). + +On startup, PX4 reads the key from this file. +If the file exists and contains a non-zero key or timestamp, signing is activated automatically. + +:::info +The timestamp in the file is set when `SETUP_SIGNING` is received. +A graceful shutdown also writes the current timestamp back, but in practice most vehicles are powered off by pulling the battery, so the on-disk timestamp will typically remain at the value from the last key provisioning. +::: + +:::info +Storage of the key on the SD card means that signing can be disabled by removing the card. +Note that this requires physical access to the vehicle. +::: + +## How It Works + +### Initialization + +1. The MAVLink module calls `MavlinkSignControl::start()` during startup. +2. The `/mavlink/` directory is created if it doesn't exist. +3. The `mavlink-signing-key.bin` file is opened if it exists. +4. If a valid key is found (non-zero key or timestamp), signing is activated: the signing struct is wired into the MAVLink library and outgoing messages are signed. +5. If no valid key is found, the signing struct is left disconnected, and the MAVLink library operates with zero signing overhead. + +### Outgoing Messages + +When signing is active (valid key present), the `MAVLINK_SIGNING_FLAG_SIGN_OUTGOING` flag is set, which causes the MAVLink library to automatically append a [SHA-256 based signature](https://mavlink.io/en/guide/message_signing.html#signature) to every outgoing MAVLink 2 message. + +When no key is present, signing is completely bypassed with no CPU or bandwidth overhead. + +### Incoming Messages + +For each incoming message, the MAVLink library checks whether a valid signature is present. +If the message is unsigned or has an invalid signature, the library calls the `accept_unsigned` callback, which decides whether to accept or reject the message based on: + +1. **Signing not active**: If no key has been loaded, all messages are accepted. +2. **Allowlisted message**: Certain [safety-critical messages](#unsigned-message-allowlist) are always accepted. + +## Unsigned Message Allowlist + +The following messages are **always** accepted unsigned, regardless of the signing state. +These are safety-critical messages that may originate from systems that don't support signing: + +| 메시지 | ID | Reason | +| -------------------------------------------------------------------------------------------- | --- | -------------------------------------------------------- | +| [HEARTBEAT](https://mavlink.io/en/messages/common.html#HEARTBEAT) | 0 | System discovery and liveness detection | +| [RADIO_STATUS](https://mavlink.io/en/messages/common.html#RADIO_STATUS) | 109 | Radio link status from SiK radios and other radio modems | +| [ADSB_VEHICLE](https://mavlink.io/en/messages/common.html#ADSB_VEHICLE) | 246 | ADS-B traffic information for collision avoidance | +| [COLLISION](https://mavlink.io/en/messages/common.html#COLLISION) | 247 | Collision threat warnings | + +## Security Considerations + +### Signing is enforced on all links + +When signing is active, **all links require signed messages**. +This means: + +- An attacker cannot send unsigned commands on any link. +- Changing or disabling the key requires sending a `SETUP_SIGNING` message **signed with the current key**. +- Signing can be disabled via MAVLink by sending a signed `SETUP_SIGNING` with an all-zero key. + +### Armed guard + +`SETUP_SIGNING` is rejected while the vehicle is armed. +This prevents the signing configuration from being changed during flight, whether by accident or by an attacker who has obtained the key. + +### Lost key recovery + +If the signing key is lost on the GCS side and no device has the current key: + +- **Remove the SD card** and delete `/mavlink/mavlink-signing-key.bin`, then reboot. +- **Reflash via SWD/JTAG** if the SD card is not accessible. + +:::warning +There is no software-only recovery path for a lost key. +This is intentional: any MAVLink-based recovery mechanism would also be available to an attacker. +Physical access to the SD card or debug port is required. +::: + +### Other considerations + +- **Initial key provisioning**: When no key is provisioned, `SETUP_SIGNING` is accepted unsigned on any link. + Once a key is active, subsequent changes require a signed message. + Provision the initial key over a trusted connection, such as USB. +- **Key not exposed via parameters**: The secret key is stored in a separate file on the SD card, not as a MAVLink parameter, so it cannot be read back through the parameter protocol. +- **SD card access**: Anyone with physical access to the SD card can read or modify the `mavlink-signing-key.bin` file, or remove the card entirely to disable signing. + Ensure physical security of the vehicle if signing is used as a security control. +- **Replay protection**: The MAVLink signing protocol includes a timestamp that prevents replay attacks. + The on-disk timestamp is updated when a new key is provisioned via `SETUP_SIGNING`. + A graceful shutdown also persists the current timestamp, but since most vehicles are powered off by pulling the battery, the on-disk timestamp will typically remain at the value from the last key provisioning on reboot. +- **No encryption**: Message signing provides **authentication and integrity only**. + Messages are still sent in plaintext. + An eavesdropper can read all message contents (telemetry, commands, parameters, missions) but cannot forge or modify them without the key. +- **Allowlisted messages bypass signing**: A small set of [safety-critical messages](#unsigned-message-allowlist) are always accepted unsigned. + An attacker can spoof these specific messages (e.g. fake `ADSB_VEHICLE` traffic) even when signing is active. + +### What signing does NOT protect against + +| Attack | Why | +| ----------------------------------------------------- | ------------------------------------------------------- | +| Eavesdropping | Messages are not encrypted | +| SD card extraction | Key file is readable by anyone with physical access | +| Spoofed `HEARTBEAT`/`RADIO_STATUS`/`ADSB`/`COLLISION` | These are allowlisted unsigned | +| Lost key without SD card access | Requires SWD reflash | +| Key rotation | No automatic mechanism; manual re-provisioning required | +| In-flight key changes | `SETUP_SIGNING` rejected while armed | diff --git a/docs/ko/mavlink/protocols.md b/docs/ko/mavlink/protocols.md index e169080ae9..459b44b8bb 100644 --- a/docs/ko/mavlink/protocols.md +++ b/docs/ko/mavlink/protocols.md @@ -30,6 +30,7 @@ These services are known to be supported in some form: - [Landing Target Protocol](https://mavlink.io/en/services/landing_target.html) - [Manual Control (Joystick) Protocol](https://mavlink.io/en/services/manual_control.html) - [MAVLink Id Assignment (sysid, compid)](https://mavlink.io/en/services/mavlink_id_assignment.html) +- [Message Signing](../mavlink/message_signing.md) ([MAVLink spec](https://mavlink.io/en/guide/message_signing.html)) - [Mission Protocol](https://mavlink.io/en/services/mission.html) - [Offboard Control Protocol](https://mavlink.io/en/services/offboard_control.html) - [Remote ID](../peripherals/remote_id.md) ([Open Drone ID Protocol](https://mavlink.io/en/services/opendroneid.html)) diff --git a/docs/ko/mavlink/security_hardening.md b/docs/ko/mavlink/security_hardening.md new file mode 100644 index 0000000000..f02eeeb1cd --- /dev/null +++ b/docs/ko/mavlink/security_hardening.md @@ -0,0 +1,104 @@ +# MAVLink Security Hardening for Production Deployments + + + +MAVLink is an open communication protocol designed for lightweight, low-latency communication between drones and ground stations. +By default, all MAVLink messages are unauthenticated. +This is intentional for development and testing, but **production deployments must enable [message signing](message_signing.md)** to prevent unauthorized access. + +:::warning +Without message signing enabled, any device that can send MAVLink messages to the vehicle (via radio, network, or serial) can execute any command, including shell access, file operations, parameter changes, mission uploads, arming, and flight termination. +::: + +## What Is at Risk + +When MAVLink signing is not enabled, an attacker within communication range can: + +| Capability | MAVLink mechanism | +| ------------------------------------------- | ------------------------------------------------ | +| Execute shell commands | `SERIAL_CONTROL` with `SERIAL_CONTROL_DEV_SHELL` | +| Read, write, or delete files | MAVLink FTP protocol | +| Change any flight parameter | `PARAM_SET` / `PARAM_EXT_SET` | +| Upload or overwrite missions | Mission protocol | +| Arm or disarm motors | `MAV_CMD_COMPONENT_ARM_DISARM` | +| Terminate flight (crash) | `MAV_CMD_DO_FLIGHTTERMINATION` | +| Trigger emergency landing | Spoofed `BATTERY_STATUS` | +| Reboot the vehicle | `MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN` | + +All of these are standard MAVLink capabilities used by ground control stations. +Without signing, there is no distinction between a legitimate GCS and an unauthorized sender. + +## Hardening Checklist + +### 1. Enable Message Signing + +Message signing provides cryptographic authentication for all MAVLink communication. +See [Message Signing](message_signing.md) for full details. + +Steps: + +1. Connect to the vehicle over a **trusted link** (USB or other secure connection). +2. Provision a 32-byte secret key using the [SETUP_SIGNING](https://mavlink.io/en/messages/common.html#SETUP_SIGNING) message. This works on any link, but use a trusted one for initial provisioning. +3. Provision the same key on all ground control stations and companion computers that need to communicate with the vehicle. +4. Verify that unsigned messages from unknown sources are rejected. + +:::info +Once a key is provisioned, signing is enforced automatically on **all links** (including USB). +Changing or disabling the key requires a signed `SETUP_SIGNING` message. +Signing changes are rejected while the vehicle is armed. +Signing can also be disabled by physically removing the key file from the SD card. +::: + +### 2. Secure Physical Access + +- **SD card**: The signing key is stored at `/mavlink/mavlink-signing-key.bin`. + Anyone with physical access to the SD card can read, modify, or remove the key file. +- **USB ports**: USB follows the same signing rules as all other links. + When signing is active, USB requires signed messages. +- **Debug ports (SWD/JTAG)**: If exposed, [Debug Ports](../debug/swd_debug.md) allow full firmware reflash and bypass all software security. + Not all vehicles expose debug connectors. + +:::warning +Signing protects all MAVLink links. +The primary physical attack surface is the SD card (key file extraction or deletion). +If your threat model includes physical access, secure the SD card slot and debug ports. +::: + +### 3. Secure Network Links + +- Do not expose MAVLink UDP/TCP ports to untrusted networks or the internet. +- Place MAVLink communication links behind firewalls or VPNs. +- Segment MAVLink networks from business or public networks. +- When using companion computers, audit which network interfaces MAVLink is bound to. + +### 4. Understand the Limitations + +- **No encryption**: + Message signing provides authentication and integrity, but messages are sent in plaintext. + An eavesdropper can read telemetry and commands but cannot forge them. +- **Allowlisted messages**: + A small set of [safety-critical messages](message_signing.md#unsigned-message-allowlist) (`HEARTBEAT`, `RADIO_STATUS`, `ADSB_VEHICLE`, `COLLISION`) are always accepted unsigned on all links. + An attacker could spoof these specific messages. +- **Key management**: + There is no automatic key rotation. + Keys must be reprovisioned manually via a signed `SETUP_SIGNING` message. +- **Lost key recovery**: + If the signing key is lost on all GCS devices, the only recovery is physical: remove the SD card and delete the key file, or reflash via SWD/JTAG. + There is no software-only recovery path. + See [Message Signing: Lost Key Recovery](message_signing.md#lost-key-recovery) for details. + +## Integrator Responsibility + +PX4 is open-source flight controller firmware used by manufacturers and system integrators to build commercial and custom drone platforms. + +Securing the communication links for a specific deployment is the responsibility of the system integrator. +여기에는 다음의 항목들이 포함됩니다. + +- Choosing appropriate radio hardware and link security +- Enabling and managing MAVLink message signing +- Restricting network access to MAVLink interfaces +- Applying firmware updates that address security issues +- Evaluating whether the default configuration meets the security requirements of the target application + +PX4 provides the tools for securing MAVLink communication. +Integrators must enable and configure them for their deployment context. diff --git a/docs/ko/mavlink/streaming_messages.md b/docs/ko/mavlink/streaming_messages.md index 44c74440b4..413c19217a 100644 --- a/docs/ko/mavlink/streaming_messages.md +++ b/docs/ko/mavlink/streaming_messages.md @@ -4,7 +4,7 @@ This tutorial demonstrates how to stream a uORB message as a MAVLink message, an ## 개요 -[MAVLink messages](../middleware/mavlink.md) are streamed using a streaming class, derived from `MavlinkStream`, that has been added to the PX4 stream list. +[MAVLink messages](../middleware/mavlink.md) are streamed using a streaming class, derived from `MavlinkStream`, that has been added to the [PX4 stream list](#add-the-new-class-to-the-streaming-list). The class has framework methods that you implement so PX4 can get information it needs from the generated MAVLink message definition. It also has a `send()` method that is called each time the message needs to be sent — you override this to copy information from a uORB subscription to the MAVLink message object that is to be sent. @@ -190,15 +190,17 @@ Most streaming classes are very similar (see examples in [/src/modules/mavlink/s ::: -Next we include our new class in [mavlink_messages.cpp](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/mavlink_messages.cpp#L2193). -Add the line below to the part of the file where all the other streams are included: +### Add the new class to the streaming list + +Next we add our new class to the streaming list. + +First open [mavlink_messages.cpp](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/mavlink_messages.cpp#L2193) and add the line below to the part of the file where all the other streams are included: ```cpp #include "streams/BATTERY_STATUS_DEMO.hpp" ``` -Finally append the stream class to the `streams_list` at the bottom of -[mavlink_messages.cpp](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/mavlink_messages.cpp) +Then append the stream class to the `streams_list` at the bottom of [mavlink_messages.cpp](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/mavlink_messages.cpp) ```C StreamListItem *streams_list[] = { @@ -215,25 +217,12 @@ We cover that in the next sections. ## Streaming by Default -The easiest way to stream your messages by default (as part of a build) is to add them to [mavlink_main.cpp](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/mavlink_main.cpp) in the appropriate message group. +The easiest way to stream your messages by default (as part of a build) is to add them to appropriate [MAVLink Profile](../mavlink/mavlink_profiles.md), such as `MAVLINK_MODE_NORMAL` if you're streaming to a GCS over WiFI, or `MAVLINK_MODE_OSD` for an OSD device. -If you search in the file you'll find groups of messages defined in a switch statement: +This is covered in [Adding Messages to a Profile](..//mavlink/mavlink_profiles.md#adding-messages-to-a-profile), but in summary you first open [mavlink_main.cpp](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/mavlink_main.cpp), search for the method `Mavlink::configure_streams_to_default`, and then find the profile that you wish to update. -- `MAVLINK_MODE_NORMAL`: Streamed to a GCS. -- `MAVLINK_MODE_ONBOARD`: Streamed to a companion computer on a fast link, such as Ethernet -- `MAVLINK_MODE_ONBOARD_LOW_BANDWIDTH`: Streamed to a companion computer for re-routing to a reduced-traffic link, such as a GCS. -- `MAVLINK_MODE_GIMBAL`: Streamed to a gimbal -- `MAVLINK_MODE_EXTVISION`: Streamed to an external vision system -- `MAVLINK_MODE_EXTVISIONMIN`: Streamed to an external vision system on a slower link -- `MAVLINK_MODE_OSD`: Streamed to an OSD, such as an FPV headset. -- `MAVLINK_MODE_CUSTOM`: Stream nothing by default. Used when configuring streaming using MAVLink. -- `MAVLINK_MODE_MAGIC`: Same as `MAVLINK_MODE_CUSTOM` -- `MAVLINK_MODE_CONFIG`: Streaming over USB with higher rates than `MAVLINK_MODE_NORMAL`. -- `MAVLINK_MODE_MINIMAL`: Stream a minimal set of messages. Normally used for poor telemetry links. -- `MAVLINK_MODE_IRIDIUM`: Streamed to an iridium satellite phone - -Normally you'll be testing on a GCS, so you could just add the message to the `MAVLINK_MODE_NORMAL` case using the `configure_stream_local()` method. -For example, to stream CA_TRAJECTORY at 5 Hz: +If you're just testing on a GCS, you could add the message to the `MAVLINK_MODE_NORMAL` case using the `configure_stream_local()` method. +For example, to stream `BATTERY_STATUS_DEMO` at 5 Hz: ```cpp case MAVLINK_MODE_CONFIG: // USB diff --git a/docs/ko/middleware/dds_topics.md b/docs/ko/middleware/dds_topics.md index 642635db4c..5c28dce375 100644 --- a/docs/ko/middleware/dds_topics.md +++ b/docs/ko/middleware/dds_topics.md @@ -70,7 +70,6 @@ This document shows a markdown-rendered version of [dds_topics.yaml](https://git | /fmu/in/vehicle_torque_setpoint | [px4_msgs::msg::VehicleTorqueSetpoint](../msg_docs/VehicleTorqueSetpoint.md) | | /fmu/in/actuator_motors | [px4_msgs::msg::ActuatorMotors](../msg_docs/ActuatorMotors.md) | | /fmu/in/actuator_servos | [px4_msgs::msg::ActuatorServos](../msg_docs/ActuatorServos.md) | -| /fmu/in/aux_global_position | [px4_msgs::msg::VehicleGlobalPosition](../msg_docs/VehicleGlobalPosition.md) | | /fmu/in/fixed_wing_longitudinal_setpoint | [px4_msgs::msg::FixedWingLongitudinalSetpoint](../msg_docs/FixedWingLongitudinalSetpoint.md) | | /fmu/in/fixed_wing_lateral_setpoint | [px4_msgs::msg::FixedWingLateralSetpoint](../msg_docs/FixedWingLateralSetpoint.md) | | /fmu/in/longitudinal_control_configuration | [px4_msgs::msg::LongitudinalControlConfiguration](../msg_docs/LongitudinalControlConfiguration.md) | @@ -85,7 +84,9 @@ This document shows a markdown-rendered version of [dds_topics.yaml](https://git ## Subscriptions Multi -None +| Topic | 형식 | Route Field | Max Instances | +| --------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- | ------------- | +| /fmu/in/aux_global_position | [px4_msgs::msg::AuxGlobalPosition](../msg_docs/AuxGlobalPosition.md) | `id` | 4 | ## Not Exported @@ -95,200 +96,210 @@ They are not build into the module, and hence are neither published or subscribe :::details See messages -- [GpioIn](../msg_docs/GpioIn.md) -- [SystemPower](../msg_docs/SystemPower.md) -- [LandingTargetInnovations](../msg_docs/LandingTargetInnovations.md) -- [VehicleOpticalFlow](../msg_docs/VehicleOpticalFlow.md) -- [LandingTargetPose](../msg_docs/LandingTargetPose.md) -- [EstimatorGpsStatus](../msg_docs/EstimatorGpsStatus.md) -- [EstimatorBias](../msg_docs/EstimatorBias.md) -- [ParameterSetValueResponse](../msg_docs/ParameterSetValueResponse.md) -- [LogMessage](../msg_docs/LogMessage.md) -- [PowerMonitor](../msg_docs/PowerMonitor.md) -- [VehicleConstraints](../msg_docs/VehicleConstraints.md) -- [SensorAirflow](../msg_docs/SensorAirflow.md) -- [ArmingCheckRequestV0](../msg_docs/ArmingCheckRequestV0.md) -- [ActuatorArmed](../msg_docs/ActuatorArmed.md) -- [HoverThrustEstimate](../msg_docs/HoverThrustEstimate.md) -- [LaunchDetectionStatus](../msg_docs/LaunchDetectionStatus.md) -- [DifferentialPressure](../msg_docs/DifferentialPressure.md) -- [MagnetometerBiasEstimate](../msg_docs/MagnetometerBiasEstimate.md) -- [PwmInput](../msg_docs/PwmInput.md) -- [OrbTestMedium](../msg_docs/OrbTestMedium.md) -- [QshellReq](../msg_docs/QshellReq.md) -- [GeofenceStatus](../msg_docs/GeofenceStatus.md) -- [RcChannels](../msg_docs/RcChannels.md) -- [Cpuload](../msg_docs/Cpuload.md) -- [DebugArray](../msg_docs/DebugArray.md) -- [FlightPhaseEstimation](../msg_docs/FlightPhaseEstimation.md) -- [Mission](../msg_docs/Mission.md) -- [Airspeed](../msg_docs/Airspeed.md) -- [LedControl](../msg_docs/LedControl.md) -- [HealthReport](../msg_docs/HealthReport.md) -- [FixedWingLateralGuidanceStatus](../msg_docs/FixedWingLateralGuidanceStatus.md) -- [FigureEightStatus](../msg_docs/FigureEightStatus.md) -- [EstimatorInnovations](../msg_docs/EstimatorInnovations.md) -- [VehicleImuStatus](../msg_docs/VehicleImuStatus.md) -- [VehicleLocalPositionSetpoint](../msg_docs/VehicleLocalPositionSetpoint.md) -- [InputRc](../msg_docs/InputRc.md) -- [UavcanParameterRequest](../msg_docs/UavcanParameterRequest.md) -- [FixedWingRunwayControl](../msg_docs/FixedWingRunwayControl.md) -- [SensorCorrection](../msg_docs/SensorCorrection.md) -- [ControlAllocatorStatus](../msg_docs/ControlAllocatorStatus.md) -- [AirspeedValidatedV0](../msg_docs/AirspeedValidatedV0.md) -- [CanInterfaceStatus](../msg_docs/CanInterfaceStatus.md) -- [SensorSelection](../msg_docs/SensorSelection.md) -- [DeviceInformation](../msg_docs/DeviceInformation.md) -- [CameraTrigger](../msg_docs/CameraTrigger.md) -- [SensorAccel](../msg_docs/SensorAccel.md) -- [ActuatorServosTrim](../msg_docs/ActuatorServosTrim.md) -- [SensorsStatusImu](../msg_docs/SensorsStatusImu.md) -- [EstimatorBias3d](../msg_docs/EstimatorBias3d.md) -- [GimbalManagerStatus](../msg_docs/GimbalManagerStatus.md) -- [BatteryStatusV0](../msg_docs/BatteryStatusV0.md) -- [OpenDroneIdSelfId](../msg_docs/OpenDroneIdSelfId.md) -- [VehicleImu](../msg_docs/VehicleImu.md) -- [MissionResult](../msg_docs/MissionResult.md) -- [SensorAccelFifo](../msg_docs/SensorAccelFifo.md) -- [DistanceSensorModeChangeRequest](../msg_docs/DistanceSensorModeChangeRequest.md) -- [SensorPreflightMag](../msg_docs/SensorPreflightMag.md) -- [OrbTest](../msg_docs/OrbTest.md) -- [PositionControllerLandingStatus](../msg_docs/PositionControllerLandingStatus.md) -- [FuelTankStatus](../msg_docs/FuelTankStatus.md) -- [OpenDroneIdSystem](../msg_docs/OpenDroneIdSystem.md) -- [OrbitStatus](../msg_docs/OrbitStatus.md) -- [Px4ioStatus](../msg_docs/Px4ioStatus.md) -- [RtlStatus](../msg_docs/RtlStatus.md) -- [ButtonEvent](../msg_docs/ButtonEvent.md) -- [VehicleLocalPositionV0](../msg_docs/VehicleLocalPositionV0.md) -- [DebugValue](../msg_docs/DebugValue.md) -- [ParameterSetUsedRequest](../msg_docs/ParameterSetUsedRequest.md) -- [RoverSpeedStatus](../msg_docs/RoverSpeedStatus.md) -- [SensorHygrometer](../msg_docs/SensorHygrometer.md) -- [OpenDroneIdOperatorId](../msg_docs/OpenDroneIdOperatorId.md) -- [InternalCombustionEngineStatus](../msg_docs/InternalCombustionEngineStatus.md) -- [GpioOut](../msg_docs/GpioOut.md) -- [ActuatorTest](../msg_docs/ActuatorTest.md) -- [SensorBaro](../msg_docs/SensorBaro.md) -- [PositionControllerStatus](../msg_docs/PositionControllerStatus.md) -- [PurePursuitStatus](../msg_docs/PurePursuitStatus.md) -- [RoverRateStatus](../msg_docs/RoverRateStatus.md) -- [TecsStatus](../msg_docs/TecsStatus.md) -- [PpsCapture](../msg_docs/PpsCapture.md) -- [RaptorStatus](../msg_docs/RaptorStatus.md) -- [EventV0](../msg_docs/EventV0.md) -- [GpioRequest](../msg_docs/GpioRequest.md) -- [FollowTargetEstimator](../msg_docs/FollowTargetEstimator.md) -- [MagWorkerData](../msg_docs/MagWorkerData.md) -- [FollowTarget](../msg_docs/FollowTarget.md) -- [EstimatorAidSource1d](../msg_docs/EstimatorAidSource1d.md) -- [GimbalDeviceSetAttitude](../msg_docs/GimbalDeviceSetAttitude.md) -- [SensorGnssRelative](../msg_docs/SensorGnssRelative.md) -- [ActionRequest](../msg_docs/ActionRequest.md) -- [NavigatorMissionItem](../msg_docs/NavigatorMissionItem.md) -- [GpsInjectData](../msg_docs/GpsInjectData.md) -- [VehicleStatusV0](../msg_docs/VehicleStatusV0.md) -- [DronecanNodeStatus](../msg_docs/DronecanNodeStatus.md) -- [UlogStream](../msg_docs/UlogStream.md) -- [DebugKeyValue](../msg_docs/DebugKeyValue.md) -- [NavigatorStatus](../msg_docs/NavigatorStatus.md) -- [MountOrientation](../msg_docs/MountOrientation.md) -- [RcParameterMap](../msg_docs/RcParameterMap.md) -- [AdcReport](../msg_docs/AdcReport.md) -- [EstimatorSensorBias](../msg_docs/EstimatorSensorBias.md) -- [InternalCombustionEngineControl](../msg_docs/InternalCombustionEngineControl.md) -- [MavlinkLog](../msg_docs/MavlinkLog.md) -- [VehicleMagnetometer](../msg_docs/VehicleMagnetometer.md) -- [GpioConfig](../msg_docs/GpioConfig.md) -- [GainCompression](../msg_docs/GainCompression.md) -- [DebugVect](../msg_docs/DebugVect.md) -- [ArmingCheckReplyV0](../msg_docs/ArmingCheckReplyV0.md) -- [VehicleAttitudeSetpointV0](../msg_docs/VehicleAttitudeSetpointV0.md) -- [FollowTargetStatus](../msg_docs/FollowTargetStatus.md) -- [RtlTimeEstimate](../msg_docs/RtlTimeEstimate.md) -- [RoverAttitudeStatus](../msg_docs/RoverAttitudeStatus.md) -- [SensorUwb](../msg_docs/SensorUwb.md) -- [YawEstimatorStatus](../msg_docs/YawEstimatorStatus.md) -- [VelocityLimits](../msg_docs/VelocityLimits.md) -- [TrajectorySetpoint6dof](../msg_docs/TrajectorySetpoint6dof.md) -- [OpenDroneIdArmStatus](../msg_docs/OpenDroneIdArmStatus.md) -- [EscStatus](../msg_docs/EscStatus.md) -- [GimbalManagerInformation](../msg_docs/GimbalManagerInformation.md) -- [HeaterStatus](../msg_docs/HeaterStatus.md) -- [EstimatorSelectorStatus](../msg_docs/EstimatorSelectorStatus.md) -- [GeofenceResult](../msg_docs/GeofenceResult.md) -- [PowerButtonState](../msg_docs/PowerButtonState.md) -- [Rpm](../msg_docs/Rpm.md) -- [WheelEncoders](../msg_docs/WheelEncoders.md) -- [LoggerStatus](../msg_docs/LoggerStatus.md) -- [CellularStatus](../msg_docs/CellularStatus.md) -- [TuneControl](../msg_docs/TuneControl.md) -- [ConfigOverridesV0](../msg_docs/ConfigOverridesV0.md) -- [GimbalManagerSetAttitude](../msg_docs/GimbalManagerSetAttitude.md) -- [OrbTestLarge](../msg_docs/OrbTestLarge.md) -- [BatteryInfo](../msg_docs/BatteryInfo.md) -- [CameraStatus](../msg_docs/CameraStatus.md) -- [QshellRetval](../msg_docs/QshellRetval.md) -- [SensorMag](../msg_docs/SensorMag.md) -- [RateCtrlStatus](../msg_docs/RateCtrlStatus.md) -- [TaskStackInfo](../msg_docs/TaskStackInfo.md) -- [EstimatorAidSource2d](../msg_docs/EstimatorAidSource2d.md) -- [AirspeedWind](../msg_docs/AirspeedWind.md) -- [AutotuneAttitudeControlStatus](../msg_docs/AutotuneAttitudeControlStatus.md) -- [GimbalDeviceInformation](../msg_docs/GimbalDeviceInformation.md) -- [GpsDump](../msg_docs/GpsDump.md) -- [SensorTemp](../msg_docs/SensorTemp.md) -- [ParameterResetRequest](../msg_docs/ParameterResetRequest.md) -- [TiltrotorExtraControls](../msg_docs/TiltrotorExtraControls.md) -- [SensorsStatus](../msg_docs/SensorsStatus.md) -- [EstimatorStatus](../msg_docs/EstimatorStatus.md) -- [FailureDetectorStatus](../msg_docs/FailureDetectorStatus.md) -- [VehicleAirData](../msg_docs/VehicleAirData.md) -- [ActuatorControlsStatus](../msg_docs/ActuatorControlsStatus.md) -- [TakeoffStatus](../msg_docs/TakeoffStatus.md) -- [GeneratorStatus](../msg_docs/GeneratorStatus.md) -- [SensorGyroFifo](../msg_docs/SensorGyroFifo.md) -- [VehicleAngularVelocity](../msg_docs/VehicleAngularVelocity.md) -- [LandingGearWheel](../msg_docs/LandingGearWheel.md) -- [ParameterSetValueRequest](../msg_docs/ParameterSetValueRequest.md) -- [RegisterExtComponentReplyV0](../msg_docs/RegisterExtComponentReplyV0.md) -- [RaptorInput](../msg_docs/RaptorInput.md) -- [SensorGyro](../msg_docs/SensorGyro.md) -- [ParameterUpdate](../msg_docs/ParameterUpdate.md) -- [NormalizedUnsignedSetpoint](../msg_docs/NormalizedUnsignedSetpoint.md) -- [PositionSetpoint](../msg_docs/PositionSetpoint.md) -- [EstimatorStates](../msg_docs/EstimatorStates.md) -- [ActuatorOutputs](../msg_docs/ActuatorOutputs.md) -- [ManualControlSwitches](../msg_docs/ManualControlSwitches.md) -- [UavcanParameterValue](../msg_docs/UavcanParameterValue.md) -- [VehicleAngularAccelerationSetpoint](../msg_docs/VehicleAngularAccelerationSetpoint.md) -- [EstimatorEventFlags](../msg_docs/EstimatorEventFlags.md) -- [SensorGnssStatus](../msg_docs/SensorGnssStatus.md) -- [GimbalManagerSetManualControl](../msg_docs/GimbalManagerSetManualControl.md) -- [HomePositionV0](../msg_docs/HomePositionV0.md) -- [FixedWingLateralStatus](../msg_docs/FixedWingLateralStatus.md) -- [SatelliteInfo](../msg_docs/SatelliteInfo.md) - [IrlockReport](../msg_docs/IrlockReport.md) -- [Ping](../msg_docs/Ping.md) -- [CameraCapture](../msg_docs/CameraCapture.md) -- [Vtx](../msg_docs/Vtx.md) -- [Ekf2Timestamps](../msg_docs/Ekf2Timestamps.md) -- [RegisterExtComponentRequestV0](../msg_docs/RegisterExtComponentRequestV0.md) -- [EscReport](../msg_docs/EscReport.md) -- [Gripper](../msg_docs/Gripper.md) -- [UlogStreamAck](../msg_docs/UlogStreamAck.md) -- [SensorGyroFft](../msg_docs/SensorGyroFft.md) -- [VehicleRoi](../msg_docs/VehicleRoi.md) -- [VehicleAcceleration](../msg_docs/VehicleAcceleration.md) -- [NeuralControl](../msg_docs/NeuralControl.md) -- [DatamanResponse](../msg_docs/DatamanResponse.md) -- [GimbalControls](../msg_docs/GimbalControls.md) -- [MavlinkTunnel](../msg_docs/MavlinkTunnel.md) -- [EstimatorAidSource3d](../msg_docs/EstimatorAidSource3d.md) -- [DatamanRequest](../msg_docs/DatamanRequest.md) +- [FailureDetectorStatus](../msg_docs/FailureDetectorStatus.md) +- [MissionResult](../msg_docs/MissionResult.md) +- [SensorSelection](../msg_docs/SensorSelection.md) - [Event](../msg_docs/Event.md) -- [RadioStatus](../msg_docs/RadioStatus.md) +- [MountOrientation](../msg_docs/MountOrientation.md) +- [NeuralControl](../msg_docs/NeuralControl.md) +- [VehicleAttitudeSetpointV0](../msg_docs/VehicleAttitudeSetpointV0.md) +- [DifferentialPressure](../msg_docs/DifferentialPressure.md) +- [EstimatorGpsStatus](../msg_docs/EstimatorGpsStatus.md) +- [LedControl](../msg_docs/LedControl.md) +- [RtlStatus](../msg_docs/RtlStatus.md) +- [Rpm](../msg_docs/Rpm.md) +- [QshellReq](../msg_docs/QshellReq.md) +- [ArmingCheckReplyV0](../msg_docs/ArmingCheckReplyV0.md) +- [OrbTest](../msg_docs/OrbTest.md) +- [VehicleImuStatus](../msg_docs/VehicleImuStatus.md) +- [OrbitStatus](../msg_docs/OrbitStatus.md) +- [BatteryInfo](../msg_docs/BatteryInfo.md) +- [RegisterExtComponentReplyV0](../msg_docs/RegisterExtComponentReplyV0.md) +- [HeaterStatus](../msg_docs/HeaterStatus.md) +- [VehicleAngularVelocity](../msg_docs/VehicleAngularVelocity.md) +- [DeviceInformation](../msg_docs/DeviceInformation.md) +- [VehicleLocalPositionV0](../msg_docs/VehicleLocalPositionV0.md) +- [PowerButtonState](../msg_docs/PowerButtonState.md) +- [SensorAirflow](../msg_docs/SensorAirflow.md) +- [TrajectorySetpoint6dof](../msg_docs/TrajectorySetpoint6dof.md) +- [VehicleStatusV0](../msg_docs/VehicleStatusV0.md) +- [HealthReport](../msg_docs/HealthReport.md) +- [FollowTargetEstimator](../msg_docs/FollowTargetEstimator.md) +- [InternalCombustionEngineControl](../msg_docs/InternalCombustionEngineControl.md) +- [AirspeedWind](../msg_docs/AirspeedWind.md) +- [SensorGnssRelative](../msg_docs/SensorGnssRelative.md) +- [VehicleImu](../msg_docs/VehicleImu.md) +- [VehicleStatusV3](../msg_docs/VehicleStatusV3.md) +- [NormalizedUnsignedSetpoint](../msg_docs/NormalizedUnsignedSetpoint.md) +- [EstimatorSelectorStatus](../msg_docs/EstimatorSelectorStatus.md) +- [ActuatorTest](../msg_docs/ActuatorTest.md) +- [CanInterfaceStatus](../msg_docs/CanInterfaceStatus.md) - [VehicleOpticalFlowVel](../msg_docs/VehicleOpticalFlowVel.md) +- [VehicleStatusV1](../msg_docs/VehicleStatusV1.md) +- [SensorGnssStatus](../msg_docs/SensorGnssStatus.md) +- [PwmInput](../msg_docs/PwmInput.md) +- [RcParameterMap](../msg_docs/RcParameterMap.md) +- [VehicleConstraints](../msg_docs/VehicleConstraints.md) +- [SystemPower](../msg_docs/SystemPower.md) +- [Ekf2Timestamps](../msg_docs/Ekf2Timestamps.md) +- [InternalCombustionEngineStatus](../msg_docs/InternalCombustionEngineStatus.md) +- [UavcanParameterValue](../msg_docs/UavcanParameterValue.md) +- [EstimatorEventFlags](../msg_docs/EstimatorEventFlags.md) +- [DebugVect](../msg_docs/DebugVect.md) +- [FollowTarget](../msg_docs/FollowTarget.md) +- [TiltrotorExtraControls](../msg_docs/TiltrotorExtraControls.md) +- [TuneControl](../msg_docs/TuneControl.md) +- [PositionSetpoint](../msg_docs/PositionSetpoint.md) +- [ParameterSetUsedRequest](../msg_docs/ParameterSetUsedRequest.md) +- [SensorAccelFifo](../msg_docs/SensorAccelFifo.md) +- [EventV0](../msg_docs/EventV0.md) +- [AutotuneAttitudeControlStatus](../msg_docs/AutotuneAttitudeControlStatus.md) +- [SensorTemp](../msg_docs/SensorTemp.md) +- [OpenDroneIdSelfId](../msg_docs/OpenDroneIdSelfId.md) +- [FollowTargetStatus](../msg_docs/FollowTargetStatus.md) +- [VehicleGlobalPositionV0](../msg_docs/VehicleGlobalPositionV0.md) +- [LandingGearWheel](../msg_docs/LandingGearWheel.md) +- [SensorsStatus](../msg_docs/SensorsStatus.md) +- [HomePositionV0](../msg_docs/HomePositionV0.md) +- [ParameterUpdate](../msg_docs/ParameterUpdate.md) +- [EstimatorInnovations](../msg_docs/EstimatorInnovations.md) +- [ButtonEvent](../msg_docs/ButtonEvent.md) +- [RaptorInput](../msg_docs/RaptorInput.md) +- [VehicleOpticalFlow](../msg_docs/VehicleOpticalFlow.md) +- [GpioConfig](../msg_docs/GpioConfig.md) +- [SensorMag](../msg_docs/SensorMag.md) +- [LogMessage](../msg_docs/LogMessage.md) +- [GeofenceResult](../msg_docs/GeofenceResult.md) +- [LoggerStatus](../msg_docs/LoggerStatus.md) +- [RcChannels](../msg_docs/RcChannels.md) +- [MagWorkerData](../msg_docs/MagWorkerData.md) - [IridiumsbdStatus](../msg_docs/IridiumsbdStatus.md) +- [SensorGyroFifo](../msg_docs/SensorGyroFifo.md) +- [GeofenceStatus](../msg_docs/GeofenceStatus.md) +- [UlogStreamAck](../msg_docs/UlogStreamAck.md) +- [Airspeed](../msg_docs/Airspeed.md) +- [ActuatorArmed](../msg_docs/ActuatorArmed.md) +- [ParameterSetValueResponse](../msg_docs/ParameterSetValueResponse.md) +- [SensorPreflightMag](../msg_docs/SensorPreflightMag.md) +- [GimbalManagerStatus](../msg_docs/GimbalManagerStatus.md) +- [GimbalDeviceSetAttitude](../msg_docs/GimbalDeviceSetAttitude.md) +- [GimbalManagerInformation](../msg_docs/GimbalManagerInformation.md) +- [EstimatorBias](../msg_docs/EstimatorBias.md) +- [TecsStatus](../msg_docs/TecsStatus.md) +- [GimbalControls](../msg_docs/GimbalControls.md) +- [Mission](../msg_docs/Mission.md) +- [GainCompression](../msg_docs/GainCompression.md) +- [ConfigOverridesV0](../msg_docs/ConfigOverridesV0.md) +- [Ping](../msg_docs/Ping.md) +- [ActuatorControlsStatus](../msg_docs/ActuatorControlsStatus.md) +- [CellularStatus](../msg_docs/CellularStatus.md) +- [DronecanNodeStatus](../msg_docs/DronecanNodeStatus.md) +- [EscEepromWrite](../msg_docs/EscEepromWrite.md) +- [MagnetometerBiasEstimate](../msg_docs/MagnetometerBiasEstimate.md) +- [FixedWingLateralGuidanceStatus](../msg_docs/FixedWingLateralGuidanceStatus.md) +- [OrbTestMedium](../msg_docs/OrbTestMedium.md) +- [PositionControllerStatus](../msg_docs/PositionControllerStatus.md) +- [EscReport](../msg_docs/EscReport.md) +- [SensorGyro](../msg_docs/SensorGyro.md) +- [DatamanRequest](../msg_docs/DatamanRequest.md) +- [FixedWingLateralStatus](../msg_docs/FixedWingLateralStatus.md) +- [GeneratorStatus](../msg_docs/GeneratorStatus.md) +- [SensorAccel](../msg_docs/SensorAccel.md) +- [RangingBeacon](../msg_docs/RangingBeacon.md) +- [RegisterExtComponentRequestV1](../msg_docs/RegisterExtComponentRequestV1.md) +- [GpsDump](../msg_docs/GpsDump.md) +- [GimbalManagerSetManualControl](../msg_docs/GimbalManagerSetManualControl.md) +- [Vtx](../msg_docs/Vtx.md) +- [VehicleStatusV2](../msg_docs/VehicleStatusV2.md) +- [InputRc](../msg_docs/InputRc.md) +- [DebugKeyValue](../msg_docs/DebugKeyValue.md) +- [VehicleMagnetometer](../msg_docs/VehicleMagnetometer.md) +- [OpenDroneIdSystem](../msg_docs/OpenDroneIdSystem.md) +- [RoverAttitudeStatus](../msg_docs/RoverAttitudeStatus.md) +- [GpsInjectData](../msg_docs/GpsInjectData.md) +- [TaskStackInfo](../msg_docs/TaskStackInfo.md) +- [FixedWingRunwayControl](../msg_docs/FixedWingRunwayControl.md) +- [SensorsStatusImu](../msg_docs/SensorsStatusImu.md) +- [VehicleAirData](../msg_docs/VehicleAirData.md) +- [PpsCapture](../msg_docs/PpsCapture.md) +- [CameraStatus](../msg_docs/CameraStatus.md) +- [SensorGyroFft](../msg_docs/SensorGyroFft.md) +- [ParameterResetRequest](../msg_docs/ParameterResetRequest.md) +- [EstimatorBias3d](../msg_docs/EstimatorBias3d.md) +- [PowerMonitor](../msg_docs/PowerMonitor.md) +- [GimbalManagerSetAttitude](../msg_docs/GimbalManagerSetAttitude.md) +- [EstimatorStates](../msg_docs/EstimatorStates.md) +- [FlightPhaseEstimation](../msg_docs/FlightPhaseEstimation.md) +- [SensorUwb](../msg_docs/SensorUwb.md) +- [EscStatus](../msg_docs/EscStatus.md) +- [RegisterExtComponentRequestV0](../msg_docs/RegisterExtComponentRequestV0.md) +- [TakeoffStatus](../msg_docs/TakeoffStatus.md) +- [EstimatorAidSource1d](../msg_docs/EstimatorAidSource1d.md) +- [UavcanParameterRequest](../msg_docs/UavcanParameterRequest.md) +- [EstimatorSensorBias](../msg_docs/EstimatorSensorBias.md) +- [SatelliteInfo](../msg_docs/SatelliteInfo.md) +- [MavlinkLog](../msg_docs/MavlinkLog.md) +- [VehicleCommandAckV0](../msg_docs/VehicleCommandAckV0.md) +- [VehicleAcceleration](../msg_docs/VehicleAcceleration.md) +- [BatteryStatusV0](../msg_docs/BatteryStatusV0.md) +- [CameraTrigger](../msg_docs/CameraTrigger.md) +- [ActuatorOutputs](../msg_docs/ActuatorOutputs.md) +- [EstimatorAidSource2d](../msg_docs/EstimatorAidSource2d.md) +- [EstimatorFusionControl](../msg_docs/EstimatorFusionControl.md) +- [ActionRequest](../msg_docs/ActionRequest.md) +- [DebugArray](../msg_docs/DebugArray.md) +- [AirspeedValidatedV0](../msg_docs/AirspeedValidatedV0.md) +- [RtlTimeEstimate](../msg_docs/RtlTimeEstimate.md) +- [DebugValue](../msg_docs/DebugValue.md) +- [NavigatorMissionItem](../msg_docs/NavigatorMissionItem.md) +- [ArmingCheckRequestV0](../msg_docs/ArmingCheckRequestV0.md) +- [DistanceSensorModeChangeRequest](../msg_docs/DistanceSensorModeChangeRequest.md) +- [FuelTankStatus](../msg_docs/FuelTankStatus.md) +- [PurePursuitStatus](../msg_docs/PurePursuitStatus.md) +- [EscEepromRead](../msg_docs/EscEepromRead.md) +- [UlogStream](../msg_docs/UlogStream.md) +- [VehicleAngularAccelerationSetpoint](../msg_docs/VehicleAngularAccelerationSetpoint.md) +- [CameraCapture](../msg_docs/CameraCapture.md) +- [NavigatorStatus](../msg_docs/NavigatorStatus.md) +- [RoverRateStatus](../msg_docs/RoverRateStatus.md) +- [DatamanResponse](../msg_docs/DatamanResponse.md) +- [PositionControllerLandingStatus](../msg_docs/PositionControllerLandingStatus.md) +- [WheelEncoders](../msg_docs/WheelEncoders.md) +- [FigureEightStatus](../msg_docs/FigureEightStatus.md) +- [GpioOut](../msg_docs/GpioOut.md) +- [RateCtrlStatus](../msg_docs/RateCtrlStatus.md) +- [SensorHygrometer](../msg_docs/SensorHygrometer.md) +- [RaptorStatus](../msg_docs/RaptorStatus.md) +- [Px4ioStatus](../msg_docs/Px4ioStatus.md) +- [VehicleLocalPositionSetpoint](../msg_docs/VehicleLocalPositionSetpoint.md) +- [RadioStatus](../msg_docs/RadioStatus.md) +- [SensorBaro](../msg_docs/SensorBaro.md) +- [YawEstimatorStatus](../msg_docs/YawEstimatorStatus.md) +- [SensorCorrection](../msg_docs/SensorCorrection.md) +- [Gripper](../msg_docs/Gripper.md) +- [LandingTargetPose](../msg_docs/LandingTargetPose.md) +- [EstimatorStatus](../msg_docs/EstimatorStatus.md) +- [GpioRequest](../msg_docs/GpioRequest.md) +- [QshellRetval](../msg_docs/QshellRetval.md) +- [OrbTestLarge](../msg_docs/OrbTestLarge.md) +- [ActuatorServosTrim](../msg_docs/ActuatorServosTrim.md) +- [VehicleRoi](../msg_docs/VehicleRoi.md) +- [GpioIn](../msg_docs/GpioIn.md) +- [HoverThrustEstimate](../msg_docs/HoverThrustEstimate.md) +- [RoverSpeedStatus](../msg_docs/RoverSpeedStatus.md) +- [LaunchDetectionStatus](../msg_docs/LaunchDetectionStatus.md) +- [ParameterSetValueRequest](../msg_docs/ParameterSetValueRequest.md) +- [OpenDroneIdOperatorId](../msg_docs/OpenDroneIdOperatorId.md) +- [Cpuload](../msg_docs/Cpuload.md) +- [ControlAllocatorStatus](../msg_docs/ControlAllocatorStatus.md) +- [OpenDroneIdArmStatus](../msg_docs/OpenDroneIdArmStatus.md) +- [LandingTargetInnovations](../msg_docs/LandingTargetInnovations.md) +- [EstimatorAidSource3d](../msg_docs/EstimatorAidSource3d.md) +- [VelocityLimits](../msg_docs/VelocityLimits.md) +- [AdcReport](../msg_docs/AdcReport.md) +- [GimbalDeviceInformation](../msg_docs/GimbalDeviceInformation.md) +- [MavlinkTunnel](../msg_docs/MavlinkTunnel.md) +- [ManualControlSwitches](../msg_docs/ManualControlSwitches.md) ::: diff --git a/docs/ko/middleware/micrortps.md b/docs/ko/middleware/micrortps.md index f54335d412..a84ccde4ab 100644 --- a/docs/ko/middleware/micrortps.md +++ b/docs/ko/middleware/micrortps.md @@ -3,4 +3,4 @@ [uXRCE-DDS (PX4-ROS 2/DDS Bridge)](../middleware/uxrce_dds.md) has replaced the _Fast-RTPS Bridge_. -If you're working in PX4 v1.13 or earlier see: [Fast-RTPS Bridge](https://docs.px4.io/v1.13/en/middleware/micrortps.html#rtps-dds-interface-px4-fast-rtps-dds-bridge) +If you're working in PX4 v1.13 or earlier see: [Fast-RTPS Bridge](https://docs.px4.io/v1.13/en/middleware/micrortps#rtps-dds-interface-px4-fast-rtps-dds-bridge) diff --git a/docs/ko/middleware/uorb.md b/docs/ko/middleware/uorb.md index 1928f9acf5..762d5cb2c0 100644 --- a/docs/ko/middleware/uorb.md +++ b/docs/ko/middleware/uorb.md @@ -145,8 +145,8 @@ Versioned messages include an additional field `uint32 MESSAGE_VERSION = x`, whe Versioned and non-versioned messages are separated in the file system: - Non-versioned topic message files and [server service](../ros2/user_guide.md#px4-ros-2-service-servers) message files remain in the [`msg/`](https://github.com/PX4/PX4-Autopilot/tree/main/msg) and [`srv/`](https://github.com/PX4/PX4-Autopilot/tree/main/srv) directories, respectively. -- The current (highest) version of message files are located in the `versioned` subfolders ([`msg/versioned`](https://github.com/PX4/PX4-Autopilot/tree/main/msg/versioned) and [`srv/versioned`](https://github.com/PX4/PX4-Autopilot/tree/main/srv/versioned)). -- Older versions of messages are stored in nested `msg/px4_msgs_old/` subfolders ([`msg/px4_msgs_old/msg/`](https://github.com/PX4/PX4-Autopilot/tree/main/msg/px4_msgs_old/msg) and [`msg/px4_msgs_old/srv/`](https://github.com/PX4/PX4-Autopilot/tree/main/msg/px4_msgs_old/srv)). +- The current (highest) version of message files are located in the `versioned` subfolders ([`msg/versioned`](https://github.com/PX4/PX4-Autopilot/tree/main/msg/versioned) and [`srv/versioned`](https://github.com/PX4/PX4-Autopilot/tree/main/msg/versioned)). +- Older versions of messages are stored in nested `msg/px4_msgs_old/` subfolders ([`msg/px4_msgs_old/msg/`](https://github.com/PX4/PX4-Autopilot/tree/main/msg/px4_msgs_old/msg) and [`msg/px4_msgs_old/srv/`](https://github.com/PX4/PX4-Autopilot/tree/main/msg/px4_msgs_old)). The files are also renamed with a suffix to indicate their version number. :::tip @@ -163,7 +163,7 @@ For the full list of versioned and non-versioned messages see: [uORB Message Ref For more on PX4 and ROS 2 communication, see [PX4-ROS 2 Bridge](../ros/ros2_comm.md). :::info -ROS 2 plans to natively support message versioning in the future, but this is not implememented yet. +ROS 2 plans to natively support message versioning in the future, but this is not implemented yet. See the related ROS Enhancement Proposal ([REP 2011](https://github.com/ros-infrastructure/rep/pull/358)). See also this [Foxglove post](https://foxglove.dev/blog/sending-ros2-message-types-over-the-wire) on message hashing and type fetching. ::: diff --git a/docs/ko/middleware/uxrce_dds.md b/docs/ko/middleware/uxrce_dds.md index b1f4a3b284..bd0ad66d0c 100644 --- a/docs/ko/middleware/uxrce_dds.md +++ b/docs/ko/middleware/uxrce_dds.md @@ -3,7 +3,7 @@ :::info -uXRCE-DDS replaces the [Fast-RTPS Bridge](https://docs.px4.io/v1.13/en/middleware/micrortps.html#rtps-dds-interface-px4-fast-rtps-dds-bridge) used in PX4 v1.13. +uXRCE-DDS replaces the [Fast-RTPS Bridge](https://docs.px4.io/v1.13/en/middleware/micrortps#rtps-dds-interface-px4-fast-rtps-dds-bridge) used in PX4 v1.13. If you were using the Fast-RTPS Bridge, please follow the [migration guidelines](#fast-rtps-to-uxrce-dds-migration-guidelines). ::: @@ -32,9 +32,14 @@ The agent itself has no dependency on client-side code and can be built and/or i Code that wants to subscribe/publish to PX4 does have a dependency on client-side code; it requires uORB message definitions that match those used to create the PX4 uXRCE-DDS client so that it can interpret the messages. +- For _versioned_ PX4 messages, the [PX4 ROS 2 Message Transition Node](../ros2/px4_ros2_msg_translation_node.md) handles compatibility automatically. + This node acts as an agent-side translator, allowing your code to interact with PX4 without requiring strict, manual message synchronization. +- For unversioned messages, code that needs to publish to PX4 maintains a direct dependency on client-side definitions. + In these cases, you must ensure your local uORB message definitions exactly match those used to create the PX4 uXRCE-DDS client, so that the messages can be correctly interpreted. + ## Code Generation -The PX4 [uxrce_dds_client](../modules/modules_system.md#uxrce-dds-client) is generated at build time and included in PX4 firmare by default. +The PX4 [uxrce_dds_client](../modules/modules_system.md#uxrce-dds-client) is generated at build time and included in PX4 firmware by default. The agent has no dependency on client code. It can be built standalone or in a ROS 2 workspace, or installed as a snap package on Ubuntu. @@ -335,7 +340,7 @@ The configuration can be done using the [UXRCE-DDS parameters](../advanced_confi - [UXRCE_DDS_NS_IDX](../advanced_config/parameter_reference.md#UXRCE_DDS_NS_IDX) : Index-based namespace definition. Setting this parameter to any value other than `-1` creates a namespace with the prefix `uav_` and the specified value, e.g. `uav_0`, `uav_1`, etc. See [namespace](#customizing-the-namespace) for methods to define richer or arbitrary namespaces. - - [`UXRCE_DDS_FLCTRL`](../advanced_config/parameter_reference.md#UXRCE_DDS_FLCTRL) : Serial port hardware flow control enable. + - [`UXRCE_DDS_FLCTRL`](../advanced_config/parameter_reference.md#UXRCE_DDS_FLCTRL) : Serial port hardware flow control enable. To use hardware flow control, a custom MicroXRCE Agent needs to be adopted. Please refer to [this PR](https://github.com/eProsima/Micro-XRCE-DDS-Agent/pull/407) for the required changes, cherry-pick them on top of the [agent version](#build-run-within-ros-2-workspace) you need to use and then run the agent with the additional `--flow-control` option. :::info @@ -397,11 +402,14 @@ Therefore, - If you're using a main or release version of PX4 you can get the message definitions by cloning the interface package [PX4/px4_msgs](https://github.com/PX4/px4_msgs) into your workspace. - If you're creating or modifying uORB messages you must manually update the messages in your workspace from your PX4 source tree. Generally this means that you would update [dds_topics.yaml](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/uxrce_dds_client/dds_topics.yaml), clone the interface package, and then manually synchronize it by copying the new/modified message definitions from [PX4-Autopilot/msg](https://github.com/PX4/PX4-Autopilot/tree/main/msg) to its `msg` folders. - Assuming that PX4-Autopilot is in your home directory `~`, while `px4_msgs` is in `~/px4_ros_com/src/`, then the command might be: + Assuming that PX4-Autopilot is in your home directory `~`, while `px4_msgs` is in `~/ros2_px4_ws/src/`, then the command might be: ```sh - rm ~/px4_ros_com/src/px4_msgs/msg/*.msg - cp ~/PX4-Autopilot/msg/*.msg ~/px4_ros_com/src/px4_msgs/msg/ + rm ~/ros2_px4_ws/src/px4_msgs/msg/*.msg + rm ~/ros2_px4_ws/src/px4_msgs/srv/*.srv + cp ~/PX4-Autopilot/msg/*.msg ~/ros2_px4_ws/src/px4_msgs/msg/ + cp ~/PX4-Autopilot/msg/versioned/*.msg ~/ros2_px4_ws/src/px4_msgs/msg/ + cp ~/PX4-Autopilot/srv/*.msg ~/ros2_px4_ws/src/px4_msgs/srv/ ``` ::: info @@ -535,10 +543,10 @@ subscriptions: subscriptions_multi: - - topic: /fmu/in/vehicle_optical_flow_vel - type: px4_msgs::msg::VehicleOpticalFlowVel - - ... + - topic: /fmu/in/aux_global_position + type: px4_msgs::msg::AuxGlobalPosition + route_field: id # OPTIONAL: field used to demux into instances + max_instances: 4 # Required when route_field is set ``` @@ -555,31 +563,42 @@ Each (`topic`,`type`) pairs defines: 4. The message type (`VehicleOdometry`, `VehicleStatus`, `OffboardControlMode`, etc.) and the ROS 2 package (`px4_msgs`) that is expected to provide the message definition. 5. **(Optional)**: An additional `rate_limit` field (only for publication entries), which specifies the maximum rate (Hz) at which messages will be published on this topic by PX4 to ROS 2. If left unspecified, the maximum publication rate limit is set to 100 Hz. -6. **(Optional)**: An additional `instance` field (only for publication entries), which lets you select which instance of a [multi-instance topic](./uorb.md#multi-instance) you want to be published to ROS 2. +6. **(Optional)**: An additional `instance` field (only for publication entries), which lets you select which instance of a [multi-instance topic](./uorb.md#multi-instance) you want to be published to ROS 2. If provided, this option changes the ROS 2 topic name of the advertised uORB topic appending the instance number: `fmu/out/[uorb topic name][instance]` (plus eventual namespace and message version). In the example above the final topic name would be `/fmu/out/vehicle_imu1`. -`subscriptions` and `subscriptions_multi` allow us to choose the uORB topic instance that ROS 2 topics are routed to: either a shared instance that may also be getting updates from internal PX4 uORB publishers, or a separate instance that is reserved for ROS2 publications, respectively. +`subscriptions` and `subscriptions_multi` allow us to choose the uORB topic instance that ROS 2 topics are routed to: either a shared instance that may also be getting updates from internal PX4 uORB publishers, or a separate instance that is reserved for ROS 2 publications, respectively. Without this mechanism all ROS 2 messages would be routed to the _same_ uORB topic instance (because ROS 2 does not have the concept of [multiple topic instances](../middleware/uorb.md#multi-instance)), and it would not be possible for PX4 subscribers to differentiate between streams from ROS 2 or PX4 publishers. Add a topic to the `subscriptions` section to: -- Create a unidirectional route going from the ROS2 topic to the _default_ instance (instance 0) of the associated uORB topic. - For example, it creates a ROS2 subscriber of `/fmu/in/vehicle_odometry` and a uORB publisher of `vehicle_odometry`. -- If other (internal) PX4 modules are already publishing on the same uORB topic instance as the ROS2 publisher, the instance's subscribers will receive all streams of messages. - The uORB subscriber will not be able to determine if an incoming message was published by PX4 or by ROS2. -- This is the desired behavior when the ROS2 publisher is expected to be the sole publisher on the topic instance (for example, replacing an internal publisher to the topic during offboard control), or when the source of multiple publishing streams does not matter. +- Create a unidirectional route going from the ROS 2 topic to the _default_ instance (instance 0) of the associated uORB topic. + For example, it creates a ROS 2 subscriber of `/fmu/in/vehicle_odometry` and a uORB publisher of `vehicle_odometry`. +- If other (internal) PX4 modules are already publishing on the same uORB topic instance as the ROS 2 publisher, the instance's subscribers will receive all streams of messages. + The uORB subscriber will not be able to determine if an incoming message was published by PX4 or by ROS 2. +- This is the desired behavior when the ROS 2 publisher is expected to be the sole publisher on the topic instance (for example, replacing an internal publisher to the topic during offboard control), or when the source of multiple publishing streams does not matter. Add a topic to the `subscriptions_multi` section to: -- Create a unidirectional route going from the ROS2 topic to a _new_ instance of the associated uORB topic. - For example, if `vehicle_odometry` has already `2` instances, it creates a ROS2 subscriber of `/fmu/in/vehicle_odometry` and a uORB publisher on instance `3` of `vehicle_odometry`. +- Create a unidirectional route going from the ROS 2 topic to a _new_ instance of the associated uORB topic. + For example, if `vehicle_odometry` has already `2` instances, it creates a ROS 2 subscriber of `/fmu/in/vehicle_odometry` and a uORB publisher on instance `3` of `vehicle_odometry`. - This ensures that no other internal PX4 module will publish on the same instance used by uXRCE-DDS. The subscribers will be able to subscribe to the desired instance and distinguish between publishers. -- Note, however, that this guarantees separation between PX4 and ROS2 publishers, not among multiple ROS2 publishers. - In that scenario, their messages will still be routed to the same instance. +- Without `route_field`, this guarantees separation between PX4 and ROS 2 publishers, but not among multiple ROS 2 publishers. In that scenario, their messages will still be routed to the same instance. - This is the desired behavior, for example, when you want PX4 to log the readings of two equal sensors; they will both publish on the same topic, but one will use instance 0 and the other will use instance 1. + Optionally, add `route_field` and `max_instances` to demultiplex a single ROS 2 topic into multiple uORB instances based on a message field value: + +- Each unique value of `route_field` is dynamically assigned to a separate uORB instance on first arrival, up to `max_instances`. + For example, a single `/fmu/in/aux_global_position` ROS 2 topic can be demultiplexed to up to 4 separate uORB instances of `aux_global_position`, with each unique `id` value mapped to its own instance. +- This allows multiple ROS 2 publishers to share a single DDS topic while PX4 subscribers can distinguish between them by subscribing to different uORB instances. +- `route_field` must be a field present in the message definition. `max_instances` is required when `route_field` is set and limits how many distinct sources can be demultiplexed simultaneously. + +:::warning +The `subscriptions_multi` feature with `route_field` is currently only implemented in the uXRCE-DDS client. +The Zenoh bridge module does not yet support demux routing — topics listed under `subscriptions_multi` in `dds_topics.yaml` will be ignored by the Zenoh bridge. +::: + You can arbitrarily change the configuration. For example, you could use different default namespaces or use a custom package to store the message definitions. @@ -597,7 +616,7 @@ For a list of services, details and examples see the [service documentation](../ ## Fast-RTPS to uXRCE-DDS Migration Guidelines These guidelines explain how to migrate from using PX4 v1.13 [Fast-RTPS](../middleware/micrortps.md) middleware to PX4 v1.14 `uXRCE-DDS` middleware. -These are useful if you have [ROS 2 applications written for PX4 v1.13](https://docs.px4.io/v1.13/en/ros/ros2_comm.html), or you have used Fast-RTPS to interface your applications to PX4 [directly](https://docs.px4.io/v1.13/en/middleware/micrortps.html#agent-in-an-offboard-fast-dds-interface-ros-independent). +These are useful if you have [ROS 2 applications written for PX4 v1.13](https://docs.px4.io/v1.13/en/ros/ros2_comm), or you have used Fast-RTPS to interface your applications to PX4 [directly](https://docs.px4.io/v1.13/en/middleware/micrortps#agent-in-an-offboard-fast-dds-interface-ros-independent). :::info This section contains migration-specific information. @@ -606,7 +625,7 @@ You should also read the rest of this page to properly understand uXRCE-DDS. #### Dependencies do not need to be removed -uXRCE-DDS does not need the dependencies that were required for Fast-RTPS, such as those installed by following the topic [Fast DDS Installation](https://docs.px4.io/v1.13/en/dev_setup/fast-dds-installation.html). +uXRCE-DDS does not need the dependencies that were required for Fast-RTPS, such as those installed by following the topic [Fast DDS Installation](https://docs.px4.io/v1.13/en/dev_setup/fast-dds-installation). You can keep them if you want, without affecting your uXRCE-DDS applications. If you do choose to remove the dependencies, take care not to remove anything that is used by applications (for example, Java). @@ -659,7 +678,7 @@ There are many ways to install it on your PC / companion computer - for more inf #### Application-Specific Changes -If you where not using ROS 2 alongside the agent ([Fast DDS Interface ROS-Independent](https://docs.px4.io/v1.13/en/middleware/micrortps.html#agent-in-an-offboard-fast-dds-interface-ros-independent)), then you need to migrate to [eProsima Fast DDS](https://fast-dds.docs.eprosima.com/en/latest/index.html). +If you where not using ROS 2 alongside the agent ([Fast DDS Interface ROS-Independent](https://docs.px4.io/v1.13/en/middleware/micrortps#agent-in-an-offboard-fast-dds-interface-ros-independent)), then you need to migrate to [eProsima Fast DDS](https://fast-dds.docs.eprosima.com/en/latest/index.html). ROS 2 applications still need to compile alongside the PX4 messages, which you do by adding the [px4_msgs](https://github.com/PX4/px4_msgs) package to your workspace. You can remove the [px4_ros_com](https://github.com/PX4/px4_ros_com) package as it is no longer needed, other than for example code. diff --git a/docs/ko/middleware/zenoh.md b/docs/ko/middleware/zenoh.md index 71ca88d941..41ce18676c 100644 --- a/docs/ko/middleware/zenoh.md +++ b/docs/ko/middleware/zenoh.md @@ -1,6 +1,6 @@ # Zenoh (PX4 ROS 2 rmw_zenoh) - + :::warning 실험 @@ -49,6 +49,11 @@ ros2 run rmw_zenoh_cpp rmw_zenohd For more information about the Zenoh Router see the [rmw_zenoh](https://github.com/ros2/rmw_zenoh?tab=readme-ov-file#start-the-zenoh-router) documentation. +:::note +From ROS 2 Jazzy onward, `rmw_zenoh` topic key expressions include the message type hash (RIHS01, as defined in REP-2016). This prevents interoperability with ROS 2 Humble and earlier. +For more information about key expressions, refer to the [rmw_zenoh design documentation](https://github.com/ros2/rmw_zenoh/blob/jazzy/docs/design.md#topic-and-service-name-mapping-to-zenoh-key-expressions). +::: + ## PX4 Zenoh-Pico Node Setup ### PX4 Firmware @@ -79,6 +84,12 @@ You can check if Zenoh is present at runtime by using QGroundControl to [find th If present, the module is installed. ::: +:::warning +Interoperability with ROS 2 Humble and earlier requires setting `CONFIG_ZENOH_KEY_TYPE_HASH=n` to disable the +inclusion of the message type hash (RIHS01, as defined in REP-2016) in the Zenoh key expression. +Note that this will break compatibility with ROS 2 Jazzy and later. +::: + ### Enable Zenoh on PX4 Startup Set the [ZENOH_ENABLE](../advanced_config/parameter_reference.md#ZENOH_ENABLE) parameter to `1` to enable Zenoh on PX4 startup. @@ -94,7 +105,7 @@ If you're using a different IP for the Zenoh daemon, run the following command ( zenoh config net client tcp/10.41.10.1:7447#iface=eth0 ``` -Note that for the simulation target with Zeroh (`px4_sitl_zenoh`) you won't need to make any changes because the default IP address of the Zenoh daemon is set to `localhost`. +Note that for the simulation target with Zenoh (`px4_sitl_zenoh`) you won't need to make any changes because the default IP address of the Zenoh daemon is set to `localhost`. :::warning Any changes to the network configuration require a PX4 system reboot to take effect. @@ -199,3 +210,7 @@ Subscription count: 0 The [PX4 ROS 2 Interface Library](../ros2/px4_ros2_interface_lib.md) works out of the box with Zenoh as a transport backend. This means you can publish and subscribe to PX4 topics over Zenoh without changing your ROS 2 nodes or dealing with DDS configuration. For setup details and supported message types, refer to the [PX4 ROS 2 Interface Library](../ros2/px4_ros2_interface_lib.md). + +:::info +The PX4 ROS 2 Interface Library is not compatible with ROS 2 Humble and earlier, as it requires the message type hash (RIHS01, as defined in REP-2016) to be included in the Zenoh key expression. +::: diff --git a/docs/ko/modules/hello_sky.md b/docs/ko/modules/hello_sky.md index 58e6469aa5..e6d0d5e32f 100644 --- a/docs/ko/modules/hello_sky.md +++ b/docs/ko/modules/hello_sky.md @@ -12,13 +12,15 @@ These are covered in [Application/Module Template](../modules/module_template.md 다음과 같은 것이 필요합니다. -- [PX4 SITL Simulator](../simulation/index.md) _or_ a [PX4-compatible flight controller](../flight_controller/index.md). +- [Gazebo Simulator](../sim_gazebo_gz/index.md) (or another [PX4 SITL Simulator](../simulation/index.md)) _or_ a [PX4-compatible flight controller](../flight_controller/index.md). - [PX4 Development Toolchain](../dev_setup/dev_env.md) for the desired target. - [Download the PX4 Source Code](../dev_setup/building_px4.md#download-the-px4-source-code) from Github The source code [PX4-Autopilot/src/examples/px4_simple_app](https://github.com/PX4/PX4-Autopilot/tree/main/src/examples/px4_simple_app) directory contains a completed version of this tutorial that you can review if you get stuck. -- Rename (or delete) the **px4_simple_app** directory. +:::tip +Rename (or delete) the **px4_simple_app** directory. +::: ## 간단한 어플리케이션 @@ -34,7 +36,7 @@ This consists of a single _C_ file and a _cmake_ definition (which tells the too ```c /**************************************************************************** * - * Copyright (c) 2012-2022 PX4 Development Team. All rights reserved. + * Copyright (c) 2012-2026 PX4 Development Team. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -67,7 +69,7 @@ This consists of a single _C_ file and a _cmake_ definition (which tells the too ``` - 기본 헤더 아래에 다음 코드를 복사합니다. - 이것은 기여한 모든 파일에 첨부하여야 합니다. + Similar code should be present in all contributed files! ```c /** @@ -150,6 +152,9 @@ This consists of a single _C_ file and a _cmake_ definition (which tells the too ) ``` + Note that in your own modules you'd use the current copyright year! + We're using `2015` here to match the example. + The `px4_add_module()` method builds a static library from a module description. - The `MODULE` block is the Firmware-unique name of the module (by convention the module name is prefixed by parent directories back to `src`). @@ -170,7 +175,7 @@ This consists of a single _C_ file and a _cmake_ definition (which tells the too 4. Create and open a new _Kconfig_ definition file named **Kconfig** and define your symbol for naming (see [Kconfig naming convention](../hardware/porting_guide_config.md#px4-kconfig-symbol-naming-convention)). 아래 텍스트를 복사하십시오. - ```text + ```txt menuconfig EXAMPLES_PX4_SIMPLE_APP bool "px4_simple_app" default n @@ -185,27 +190,34 @@ This consists of a single _C_ file and a _cmake_ definition (which tells the too Applications are added to the build/firmware in the appropriate board-level _px4board_ file for your target: - PX4 SITL (Simulator): [PX4-Autopilot/boards/px4/sitl/default.px4board](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/sitl/default.px4board) -- Pixhawk v1/2: [PX4-Autopilot/boards/px4/fmu-v2/default.px4board](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/fmu-v2/default.px4board) -- Pixracer (px4/fmu-v4): [PX4-Autopilot/boards/px4/fmu-v4/default.px4board](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/fmu-v4/default.px4board) +- Pixhawk 6X (px4/fmu-v6x): [PX4-Autopilot/boards/px4/fmu-v6x/default.px4board](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/fmu-v6x/default.px4board) - _px4board_ files for other boards can be found in [PX4-Autopilot/boards/](https://github.com/PX4/PX4-Autopilot/tree/main/boards) -To enable the compilation of the application into the firmware add the corresponding Kconfig key `CONFIG_EXAMPLES_PX4_SIMPLE_APP=y` in the _px4board_ file or run [boardconfig](../hardware/porting_guide_config.md#px4-menuconfig-setup) `make px4_fmu-v4_default boardconfig`: +To enable the compilation of the application into the firmware add the corresponding Kconfig key `CONFIG_EXAMPLES_PX4_SIMPLE_APP=y` in the _px4board_ file or run [boardconfig](../hardware/porting_guide_config.md#px4-menuconfig-setup). +For example, to edit the board config for FMUv6x you would do: + +```sh +make fmu-v6x_default boardconfig ``` + +And then enable the app in the _boardconfig_ UI as shown: + +```txt examples ---> [x] PX4 Simple app ---- ``` :::info -The line will already be present for most files, because the examples are included in firmware by default. +Examples are opt-in and not included in firmware by default (although they are in SITL). +You must explicitly enable them as shown above. ::: 보드별 명령어를 사용하여, 예제를 빌드합니다. -- jMAVSim Simulator: `make px4_sitl_default jmavsim` -- Pixhawk v1/2: `make px4_fmu-v2_default` (or just `make px4_fmu-v2`) -- Pixhawk v3: `make px4_fmu-v4_default` -- Other boards: [Building the Code](../dev_setup/building_px4.md#building-for-nuttx) +- Gazebo Simulator: `make px4_sitl gz_x500` +- Pixhawk 6X: `make px4_fmu-v6x_default` +- Other boards: [Building the Code](../dev_setup/building_px4.md) ## 앱 테스트(하드웨어) @@ -213,8 +225,7 @@ The line will already be present for most files, because the examples are includ 업로더를 활성화한 다음 보드를 재설정합니다. -- Pixhawk v1/2: `make px4_fmu-v2_default upload` -- Pixhawk v3: `make px4_fmu-v4_default upload` +- Pixhawk 6X: `make px4_fmu-v6x_default upload` 보드 재설정전에 컴파일 메시지를 인쇄하고 마지막에 다음을 인쇄합니다. @@ -299,14 +310,14 @@ The benefits of the PX4 hardware abstraction comes into play here! 센서 드라이버와 어떤 식으로든 상호 작용할 필요가 없으며, 보드 또는 센서가 업데이트된 경우 앱을 업데이트할 필요도 없습니다. ::: -Individual message channels between applications are called [topics](../middleware/uorb.md). For this tutorial, we are interested in the [SensorCombined](https://github.com/PX4/PX4-Autopilot/blob/main/msg/SensorCombined.msg) topic, which holds the synchronized sensor data of the complete system. +Individual message channels between applications are called [topics](../middleware/uorb.md). For this tutorial, we are interested in the [VehicleAcceleration](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/VehicleAcceleration.msg) topic, which holds the filtered vehicle acceleration data. 주제 구독은 간단합니다. ```cpp -#include +#include .. -int sensor_sub_fd = orb_subscribe(ORB_ID(sensor_combined)); +int sensor_sub_fd = orb_subscribe(ORB_ID(vehicle_acceleration)); ``` The `sensor_sub_fd` is a topic handle and can be used to very efficiently perform a blocking wait for new data. @@ -317,9 +328,9 @@ Adding `poll()` to the subscription looks like (_pseudocode, look for the full i ```cpp #include -#include +#include .. -int sensor_sub_fd = orb_subscribe(ORB_ID(sensor_combined)); +int sensor_sub_fd = orb_subscribe(ORB_ID(vehicle_acceleration)); /* one could wait for multiple topics with this technique, just using one here */ px4_pollfd_struct_t fds[] = { @@ -327,26 +338,26 @@ px4_pollfd_struct_t fds[] = { }; while (true) { - /* wait for sensor update of 1 file descriptor for 1000 ms (1 second) */ - int poll_ret = px4_poll(fds, 1, 1000); - .. - if (fds[0].revents & POLLIN) { - /* obtained data for the first file descriptor */ - struct sensor_combined_s raw; - /* copy sensors raw data into local buffer */ - orb_copy(ORB_ID(sensor_combined), sensor_sub_fd, &raw); - PX4_INFO("Accelerometer:\t%8.4f\t%8.4f\t%8.4f", - (double)raw.accelerometer_m_s2[0], - (double)raw.accelerometer_m_s2[1], - (double)raw.accelerometer_m_s2[2]); - } +/* wait for sensor update of 1 file descriptor for 1000 ms (1 second) */ +int poll_ret = px4_poll(fds, 1, 1000); +.. +if (fds[0].revents & POLLIN) { + /* obtained data for the first file descriptor */ + struct vehicle_acceleration_s accel; + /* copy sensors raw data into local buffer */ + orb_copy(ORB_ID(vehicle_acceleration), sensor_sub_fd, &accel); + PX4_INFO("Accelerometer:\t%8.4f\t%8.4f\t%8.4f", + (double)accel.xyz[0], + (double)accel.xyz[1], + (double)accel.xyz[2]); +} } ``` 아래의 명령어로 앱을 다시 컴파일합니다. ```sh -make +make px4_sitl_default ``` ### uORB 구독 테스트 @@ -405,7 +416,7 @@ The [complete example code](https://github.com/PX4/PX4-Autopilot/blob/main/src/e ```c /**************************************************************************** * - * Copyright (c) 2012-2019 PX4 Development Team. All rights reserved. + * Copyright (c) 2012-2026 PX4 Development Team. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -454,7 +465,7 @@ The [complete example code](https://github.com/PX4/PX4-Autopilot/blob/main/src/e #include #include -#include +#include #include __EXPORT int px4_simple_app_main(int argc, char *argv[]); @@ -463,8 +474,8 @@ int px4_simple_app_main(int argc, char *argv[]) { PX4_INFO("Hello Sky!"); - /* subscribe to sensor_combined topic */ - int sensor_sub_fd = orb_subscribe(ORB_ID(sensor_combined)); + /* subscribe to vehicle_acceleration topic */ + int sensor_sub_fd = orb_subscribe(ORB_ID(vehicle_acceleration)); /* limit the update rate to 5 Hz */ orb_set_interval(sensor_sub_fd, 200); @@ -505,20 +516,20 @@ int px4_simple_app_main(int argc, char *argv[]) if (fds[0].revents & POLLIN) { /* obtained data for the first file descriptor */ - struct sensor_combined_s raw; + struct vehicle_acceleration_s accel; /* copy sensors raw data into local buffer */ - orb_copy(ORB_ID(sensor_combined), sensor_sub_fd, &raw); + orb_copy(ORB_ID(vehicle_acceleration), sensor_sub_fd, &accel); PX4_INFO("Accelerometer:\t%8.4f\t%8.4f\t%8.4f", - (double)raw.accelerometer_m_s2[0], - (double)raw.accelerometer_m_s2[1], - (double)raw.accelerometer_m_s2[2]); + (double)accel.xyz[0], + (double)accel.xyz[1], + (double)accel.xyz[2]); /* set att and publish this information for other apps the following does not have any meaning, it's just an example */ - att.q[0] = raw.accelerometer_m_s2[0]; - att.q[1] = raw.accelerometer_m_s2[1]; - att.q[2] = raw.accelerometer_m_s2[2]; + att.q[0] = accel.xyz[0]; + att.q[1] = accel.xyz[1]; + att.q[2] = accel.xyz[2]; orb_publish(ORB_ID(vehicle_attitude), att_pub, &att); } @@ -530,7 +541,6 @@ int px4_simple_app_main(int argc, char *argv[]) } PX4_INFO("exiting"); - return 0; } ``` diff --git a/docs/ko/modules/module_template.md b/docs/ko/modules/module_template.md index 79c3b14655..3451f665c8 100644 --- a/docs/ko/modules/module_template.md +++ b/docs/ko/modules/module_template.md @@ -22,7 +22,8 @@ PX4-Autopilot contains a template for writing a new application (module) that ru 요약 1. Specify the dependency on the work queue library in the cmake definition file ([CMakeLists.txt](https://github.com/PX4/PX4-Autopilot/blob/main/src/examples/work_item/CMakeLists.txt)): - ``` + + ```txt ... DEPENDS px4_work_queue @@ -48,9 +49,11 @@ PX4-Autopilot contains a template for writing a new application (module) that ru 4. Implement the `ScheduledWorkItem::Run()` method to perform "work". -5. Implement the `task_spawn` method, specifying that the task is a work queue (using the `task_id_is_work_queue` id. +5. Implement the `task_spawn` method, specifying that the task is a work queue (using the `task_id_is_work_queue` id). -6. Schedule the work queue task using one of the scheduling methods (in the example we use `ScheduleOnInterval` from within the `init` method). +6. Schedule the work queue task using one of the scheduling methods. + In the example, `init()` calls `registerCallback()` on a uORB subscription so that `Run()` is triggered whenever a new `sensor_accel` message is published. + `ScheduleOnInterval` is an alternative for fixed-rate scheduling. ## 작업 @@ -66,6 +69,6 @@ PX4/PX4-Autopilot contains a template for writing a new application (module) tha [startup script](../concept/system_startup.md). - 명령줄 인수 구문 분석. - Documentation: the `PRINT_MODULE_*` methods serve two purposes (the API is - documented [in the source code](https://github.com/PX4/PX4-Autopilot/blob/v1.8.0/src/platforms/px4_module.h#L381)): + documented [in the source code](https://github.com/PX4/PX4-Autopilot/blob/v1.17/platforms/common/include/px4_platform_common/module.h)): - They are used to print the command-line usage when entering `module help` on the console. - They are automatically extracted via script to generate the [Modules & Commands Reference](../modules/modules_main.md) page. diff --git a/docs/ko/modules/modules_command.md b/docs/ko/modules/modules_command.md index 6fba14c9ac..916d1334c6 100644 --- a/docs/ko/modules/modules_command.md +++ b/docs/ko/modules/modules_command.md @@ -342,6 +342,19 @@ mft_cfg [arguments...] , id == revision for ) ``` +## mklittlefs + +Source: [systemcmds/mklittlefs](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/mklittlefs) + +Format a device with the littlefs filesystem. + +### Usage {#mklittlefs_usage} + +``` +mklittlefs [arguments...] + Device and mount point (e.g. /dev/mtd0 /fs/flash) +``` + ## mtd Source: [systemcmds/mtd](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/mtd) diff --git a/docs/ko/modules/modules_driver.md b/docs/ko/modules/modules_driver.md index eaa588cf0e..9d31302cf2 100644 --- a/docs/ko/modules/modules_driver.md +++ b/docs/ko/modules/modules_driver.md @@ -191,28 +191,13 @@ Source: [drivers/dshot](https://github.com/PX4/PX4-Autopilot/tree/main/src/drive ### 설명 -This is the DShot output driver. It is similar to the fmu driver, and can be used as drop-in replacement +This is the DShot output driver. It can be used as drop-in replacement to use DShot as ESC communication protocol instead of PWM. -On startup, the module tries to occupy all available pins for DShot output. -It skips all pins already in use (e.g. by a camera trigger module). - It supports: - DShot150, DShot300, DShot600 - telemetry via separate UART and publishing as esc_status message -- sending DShot commands via CLI - -### 예 - -Permanently reverse motor 1: - -``` -dshot reverse -m 1 -dshot save -m 1 -``` - -After saving, the reversed direction will be regarded as the normal one. So to reverse again repeat the same commands. ### Usage {#dshot_usage} @@ -226,36 +211,6 @@ dshot [arguments...] values: [-x] Swap RX/TX pins - reverse Reverse motor direction - [-m ] Motor index (1-based, default=all) - - normal Normal motor direction - [-m ] Motor index (1-based, default=all) - - save Save current settings - [-m ] Motor index (1-based, default=all) - - 3d_on Enable 3D mode - [-m ] Motor index (1-based, default=all) - - 3d_off Disable 3D mode - [-m ] Motor index (1-based, default=all) - - beep1 Send Beep pattern 1 - [-m ] Motor index (1-based, default=all) - - beep2 Send Beep pattern 2 - [-m ] Motor index (1-based, default=all) - - beep3 Send Beep pattern 3 - [-m ] Motor index (1-based, default=all) - - beep4 Send Beep pattern 4 - [-m ] Motor index (1-based, default=all) - - beep5 Send Beep pattern 5 - [-m ] Motor index (1-based, default=all) - stop status print status info @@ -363,7 +318,7 @@ Source: [modules/gimbal](https://github.com/PX4/PX4-Autopilot/tree/main/src/modu Mount/gimbal Gimbal control driver. It maps several different input methods (eg. RC or MAVLink) to a configured output (eg. AUX channels or MAVLink). -Documentation how to use it is on the [gimbal_control](https://docs.px4.io/main/en/advanced/gimbal_control.html) page. +Documentation how to use it is on the [gimbal_control](../advanced/gimbal_control.md) page. ### 예 @@ -926,7 +881,7 @@ that can be accepted by most ESCs and servos. It is typically started with: ``` -pca9685_pwm_out start -a 0x40 -b 1 +pca9685_pwm_out start -X -a 0x40 -b 1 ``` ### Usage {#pca9685_pwm_out_usage} @@ -1109,7 +1064,7 @@ px4io [arguments...] ## rgbled -Source: [drivers/lights/rgbled](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/lights/rgbled) +Source: [drivers/lights/rgbled_ncp5623c](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/lights/rgbled_ncp5623c) ### Usage {#rgbled_usage} @@ -1124,7 +1079,9 @@ rgbled [arguments...] [-f ] bus frequency in kHz [-q] quiet startup (no message if no device found) [-a ] I2C address - default: 85 + default: 57 + [-o ] RGB PWM Assignment + default: 123 stop diff --git a/docs/ko/modules/modules_driver_distance_sensor.md b/docs/ko/modules/modules_driver_distance_sensor.md index 3d34e69be4..f1ca2664f9 100644 --- a/docs/ko/modules/modules_driver_distance_sensor.md +++ b/docs/ko/modules/modules_driver_distance_sensor.md @@ -98,13 +98,56 @@ leddar_one [arguments...] stop Stop driver ``` +## lightware_grf_serial + +Source: [drivers/distance_sensor/lightware_grf_serial](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/distance_sensor/lightware_grf_serial) + +### 설명 + +Serial bus driver for the Lightware GRF Laser rangefinder. + +### 설정 + +https://docs.px4.io/main/en/sensor/grf_lidar + +### 매개변수 + +https://docs.px4.io/main/en/advanced_config/parameter_reference#GRF_SENS_MODEL +https://docs.px4.io/main/en/advanced_config/parameter_reference#GRF_RATE_CFG +https://docs.px4.io/main/en/advanced_config/parameter_reference#SENS_EN_GRF_CFG + +### 예 + +Attempt to start driver on a specified serial device. + +``` +lightware_grf_serial start -d /dev/ttyS1 +``` + +Stop driver + +``` +lightware_grf_serial stop +``` + +### Usage {#lightware_grf_serial_usage} + +``` +lightware_grf_serial [arguments...] + Commands: + start Start driver + -d Serial device + + stop Stop driver +``` + ## lightware_laser_i2c Source: [drivers/distance_sensor/lightware_laser_i2c](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/distance_sensor/lightware_laser_i2c) ### 설명 -I2C bus driver for Lightware SFxx series LIDAR rangefinders: SF10/a, SF10/b, SF10/c, SF11/c, SF/LW20, SF30/d. +I2C bus driver for Lightware LIDAR rangefinders: SF10/a, SF10/b, SF10/c, SF11/c, SF/LW20, SF/LW30/d, GRF250, GRF500. Setup/usage information: https://docs.px4.io/main/en/sensor/sfxx_lidar.html @@ -122,8 +165,6 @@ lightware_laser_i2c [arguments...] [-q] quiet startup (no message if no device found) [-a ] I2C address default: 102 - [-R ] Sensor rotation - downward facing by default - default: 25 stop diff --git a/docs/ko/modules/modules_driver_imu.md b/docs/ko/modules/modules_driver_imu.md index cc58388343..22607b01c8 100644 --- a/docs/ko/modules/modules_driver_imu.md +++ b/docs/ko/modules/modules_driver_imu.md @@ -130,6 +130,32 @@ adis16507 [arguments...] status print status info ``` +## adis16607 + +Source: [drivers/imu/analog_devices/adis16607](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/analog_devices/adis16607) + +### Usage {#adis16607_usage} + +``` +adis16607 [arguments...] + Commands: + start + [-s] Internal SPI bus(es) + [-S] External SPI bus(es) + [-b ] board-specific bus (default=all) (external SPI: n-th bus + (default=1)) + [-c ] chip-select pin (for internal SPI) or index (for external SPI) + [-m ] SPI mode + [-f ] bus frequency in kHz + [-q] quiet startup (no message if no device found) + [-R ] Rotation + default: 0 + + stop + + status print status info +``` + ## bmi055 Source: [drivers/imu/bosch/bmi055](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/bosch/bmi055) @@ -764,6 +790,32 @@ lsm303d [arguments...] status print status info ``` +## lsm6dsv + +Source: [drivers/imu/st/lsm6dsv](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/st/lsm6dsv) + +### Usage {#lsm6dsv_usage} + +``` +lsm6dsv [arguments...] + Commands: + start + [-s] Internal SPI bus(es) + [-S] External SPI bus(es) + [-b ] board-specific bus (default=all) (external SPI: n-th bus + (default=1)) + [-c ] chip-select pin (for internal SPI) or index (for external SPI) + [-m ] SPI mode + [-f ] bus frequency in kHz + [-q] quiet startup (no message if no device found) + [-R ] Rotation + default: 0 + + stop + + status print status info +``` + ## lsm9ds1 Source: [drivers/imu/st/lsm9ds1](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/st/lsm9ds1) diff --git a/docs/ko/modules/modules_driver_ins.md b/docs/ko/modules/modules_driver_ins.md index ca390b9321..d6c7d98d43 100644 --- a/docs/ko/modules/modules_driver_ins.md +++ b/docs/ko/modules/modules_driver_ins.md @@ -9,7 +9,7 @@ Source: [drivers/ins/microstrain](https://github.com/PX4/PX4-Autopilot/tree/main MicroStrain by HBK Inertial Sensor Driver. Currently supports the following sensors: --[CV7-AR](https://www.hbkworld.com/en/products/transducers/inertial-sensors/vertical-reference-units--vru-/3dm-cv7-ar) -[CV7-AHRS](https://www.hbkworld.com/en/products/transducers/inertial-sensors/attitude-and-heading-reference-systems--ahrs-/3dm-cv7-ahrs) -[CV7-INS](https://www.hbkworld.com/en/products/transducers/inertial-sensors/inertial-navigation-systems--ins-/3dm-cv7-ins) -[CV7-GNSS/INS](https://www.hbkworld.com/en/products/transducers/inertial-sensors/inertial-navigation-systems--ins-/3dm-cv7-gnss-ins) +-[CV7-AR](https://www.hbkworld.com/en/products/transducers/inertial-sensors/vertical-reference-units--vru-/3dm-cv7-ar) -[CV7-AHRS](https://www.hbkworld.com/en/products/transducers/inertial-sensors/attitude-and-heading-reference-systems--ahrs-/3dm-cv7-ahrs) -[CV7-INS](https://www.hbkworld.com/en/products/transducers/inertial-sensors/navigation/3dm-cv7-ins) -[CV7-GNSS/INS](https://www.hbkworld.com/en/products/transducers/inertial-sensors/navigation/3dm-cv7-gnss-ins) This driver is not included in the firmware by default. Include the module in firmware by setting the diff --git a/docs/ko/modules/modules_estimator.md b/docs/ko/modules/modules_estimator.md index c4f57f3fff..7c80f73d98 100644 --- a/docs/ko/modules/modules_estimator.md +++ b/docs/ko/modules/modules_estimator.md @@ -49,7 +49,7 @@ Source: [modules/ekf2](https://github.com/PX4/PX4-Autopilot/tree/main/src/module 확장 칼만 필터를 사용한 태도 및 위치 추정기입니다. 멀티콥터와 고정익에 사용됩니다. -The documentation can be found on the [ECL/EKF Overview & Tuning](https://docs.px4.io/main/en/advanced_config/tuning_the_ecl_ekf.html) page. +The documentation can be found on the [ECL/EKF Overview & Tuning](../advanced_config/tuning_the_ecl_ekf.md) page. ekf2 can be started in replay mode (`-r`): in this mode, it does not access the system time, but only uses the timestamps from the sensor topics. diff --git a/docs/ko/modules/modules_system.md b/docs/ko/modules/modules_system.md index 8be479bba8..bd3753acec 100644 --- a/docs/ko/modules/modules_system.md +++ b/docs/ko/modules/modules_system.md @@ -321,7 +321,7 @@ Source: [drivers/heater](https://github.com/PX4/PX4-Autopilot/tree/main/src/driv ### 설명 -Background process running periodically on the LP work queue to regulate IMU temperature at a setpoint. +Background process running periodically on the INS{i} queue to regulate IMU temperature at a setpoint. This task can be started at boot from the startup scripts by setting SENS_EN_THERMAL or via CLI. @@ -732,7 +732,7 @@ The module is typically used together with uORB publisher rules, to specify whic The replay module will just publish all messages that are found in the log. It also applies the parameters from the log. -The replay procedure is documented on the [System-wide Replay](https://docs.px4.io/main/en/debug/system_wide_replay.html) +The replay procedure is documented on the [System-wide Replay](../debug/system_wide_replay.md) page. ### Usage {#replay_usage} @@ -921,6 +921,30 @@ system_power_simulation [arguments...] status print status info ``` +## task_watchdog + +Source: [modules/task_watchdog](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/task_watchdog) + +### 설명 + +Detects when a higher-priority task starves the system by running too long. +When starvation is detected, dumps the offending task's registers and stack, +and saves a cpuload snapshot. + +### Usage {#task_watchdog_usage} + +``` +task_watchdog [arguments...] + Commands: + start + + trigger Manually trigger the watchdog + + stop + + status print status info +``` + ## tattu_can Source: [drivers/tattu_can](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/tattu_can) diff --git a/docs/ko/msg_docs/ActionRequest.md b/docs/ko/msg_docs/ActionRequest.md index 94f8d7d693..00753e7a53 100644 --- a/docs/ko/msg_docs/ActionRequest.md +++ b/docs/ko/msg_docs/ActionRequest.md @@ -25,26 +25,26 @@ Request are published by `manual_control` and subscribed by the `commander` and ### ACTION {#ACTION} -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | ----- | ---------------------------------------------------------------------------------------- | -| ACTION_DISARM | `uint8` | 0 | Disarm vehicle | -| ACTION_ARM | `uint8` | 1 | Arm vehicle | -| ACTION_TOGGLE_ARMING | `uint8` | 2 | Toggle arming | -| ACTION_UNKILL | `uint8` | 3 | Revert a kill action | -| ACTION_KILL | `uint8` | 4 | Kill vehicle (instantly stop the motors) | -| ACTION_SWITCH_MODE | `uint8` | 5 | Switch mode. The target mode is set in the `mode` field. | -| ACTION_VTOL_TRANSITION_TO_MULTICOPTER | `uint8` | 6 | Transition to hover flight | -| ACTION_VTOL_TRANSITION_TO_FIXEDWING | `uint8` | 7 | Transition to fast forward flight | -| ACTION_TERMINATION | `uint8` | 8 | Irreversibly output failsafe values on all outputs, trigger parachute | +| 명칭 | 형식 | Value | 설명 | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | ----- | ---------------------------------------------------------------------------------------- | +| ACTION_DISARM | `uint8` | 0 | Disarm vehicle | +| ACTION_ARM | `uint8` | 1 | Arm vehicle | +| ACTION_TOGGLE_ARMING | `uint8` | 2 | Toggle arming | +| ACTION_UNKILL | `uint8` | 3 | Revert a kill action | +| ACTION_KILL | `uint8` | 4 | Kill vehicle (instantly stop the motors) | +| ACTION_SWITCH_MODE | `uint8` | 5 | Switch mode. The target mode is set in the `mode` field. | +| ACTION_VTOL_TRANSITION_TO_MULTICOPTER | `uint8` | 6 | Transition to hover flight | +| ACTION_VTOL_TRANSITION_TO_FIXEDWING | `uint8` | 7 | Transition to fast forward flight | +| ACTION_TERMINATION | `uint8` | 8 | Irreversibly output failsafe values on all outputs, trigger parachute | ### SOURCE {#SOURCE} -| 명칭 | 형식 | Value | 설명 | -| ---------------------------------------------------------------------------------------------------------------------- | ------- | ----- | --------------------------------------------------------------- | -| SOURCE_STICK_GESTURE | `uint8` | 0 | Triggered by holding the sticks in a certain position | -| SOURCE_RC_SWITCH | `uint8` | 1 | Triggered by an RC switch moving into a certain position | -| SOURCE_RC_BUTTON | `uint8` | 2 | Triggered by a momentary button on the RC being pressed or held | -| SOURCE_RC_MODE_SLOT | `uint8` | 3 | Mode change through the RC mode selection mechanism | +| 명칭 | 형식 | Value | 설명 | +| -------------------------------------------------------------------------------------------------------------------- | ------- | ----- | --------------------------------------------------------------- | +| SOURCE_STICK_GESTURE | `uint8` | 0 | Triggered by holding the sticks in a certain position | +| SOURCE_RC_SWITCH | `uint8` | 1 | Triggered by an RC switch moving into a certain position | +| SOURCE_RC_BUTTON | `uint8` | 2 | Triggered by a momentary button on the RC being pressed or held | +| SOURCE_RC_MODE_SLOT | `uint8` | 3 | Mode change through the RC mode selection mechanism | ## Source Message @@ -60,26 +60,26 @@ Click here to see original file # It allows mapping triggers from various external interfaces like RC channels or MAVLink to cause an action. # Request are published by `manual_control` and subscribed by the `commander` and `vtol_att_control` modules. -uint64 timestamp # [us] Time since system start +uint64 timestamp # [us] Time since system start -uint8 action # [@enum ACTION] Requested action -uint8 ACTION_DISARM = 0 # Disarm vehicle -uint8 ACTION_ARM = 1 # Arm vehicle -uint8 ACTION_TOGGLE_ARMING = 2 # Toggle arming -uint8 ACTION_UNKILL = 3 # Revert a kill action -uint8 ACTION_KILL = 4 # Kill vehicle (instantly stop the motors) -uint8 ACTION_SWITCH_MODE = 5 # Switch mode. The target mode is set in the `mode` field. -uint8 ACTION_VTOL_TRANSITION_TO_MULTICOPTER = 6 # Transition to hover flight -uint8 ACTION_VTOL_TRANSITION_TO_FIXEDWING = 7 # Transition to fast forward flight -uint8 ACTION_TERMINATION = 8 # Irreversibly output failsafe values on all outputs, trigger parachute +uint8 action # [@enum ACTION] Requested action +uint8 ACTION_DISARM = 0 # Disarm vehicle +uint8 ACTION_ARM = 1 # Arm vehicle +uint8 ACTION_TOGGLE_ARMING = 2 # Toggle arming +uint8 ACTION_UNKILL = 3 # Revert a kill action +uint8 ACTION_KILL = 4 # Kill vehicle (instantly stop the motors) +uint8 ACTION_SWITCH_MODE = 5 # Switch mode. The target mode is set in the `mode` field. +uint8 ACTION_VTOL_TRANSITION_TO_MULTICOPTER = 6 # Transition to hover flight +uint8 ACTION_VTOL_TRANSITION_TO_FIXEDWING = 7 # Transition to fast forward flight +uint8 ACTION_TERMINATION = 8 # Irreversibly output failsafe values on all outputs, trigger parachute -uint8 source # [@enum SOURCE] Request trigger type, such as a switch, button or gesture -uint8 SOURCE_STICK_GESTURE = 0 # Triggered by holding the sticks in a certain position -uint8 SOURCE_RC_SWITCH = 1 # Triggered by an RC switch moving into a certain position -uint8 SOURCE_RC_BUTTON = 2 # Triggered by a momentary button on the RC being pressed or held -uint8 SOURCE_RC_MODE_SLOT = 3 # Mode change through the RC mode selection mechanism +uint8 source # [@enum SOURCE] Request trigger type, such as a switch, button or gesture +uint8 SOURCE_STICK_GESTURE = 0 # Triggered by holding the sticks in a certain position +uint8 SOURCE_RC_SWITCH = 1 # Triggered by an RC switch moving into a certain position +uint8 SOURCE_RC_BUTTON = 2 # Triggered by a momentary button on the RC being pressed or held +uint8 SOURCE_RC_MODE_SLOT = 3 # Mode change through the RC mode selection mechanism -uint8 mode # Requested mode. Only applies when `action` is `ACTION_SWITCH_MODE`. Values for this field are defined by the `vehicle_status_s::NAVIGATION_STATE_*` enumeration. +uint8 mode # Requested mode. Only applies when `action` is `ACTION_SWITCH_MODE`. Values for this field are defined by the `vehicle_status_s::NAVIGATION_STATE_*` enumeration. ``` ::: diff --git a/docs/ko/msg_docs/ActuatorMotors.md b/docs/ko/msg_docs/ActuatorMotors.md index eb794ef1c6..43f6ef6846 100644 --- a/docs/ko/msg_docs/ActuatorMotors.md +++ b/docs/ko/msg_docs/ActuatorMotors.md @@ -18,15 +18,15 @@ Published by the vehicle's allocation and consumed by the ESC protocol drivers e | timestamp | `uint64` | us | | Time since system start | | timestamp_sample | `uint64` | us | | Sampling timestamp of the data this control response is based on | | reversible_flags | `uint16` | | | Bitset indicating which motors are configured to be reversible | -| control | `float32[12]` | | [-1 : 1] | Normalized thrust. where 1 means maximum positive thrust, -1 maximum negative (if not supported by the output, <0 maps to NaN). NaN maps to disarmed (stop the motors) | +| control | `float32[12]` | | [-1 : 1] | Normalized thrust. Where 1 means maximum positive thrust, -1 maximum negative (if not supported by the output, <0 maps to NaN). NaN maps to disarmed (stop the motors) | ## Constants -| 명칭 | 형식 | Value | 설명 | -| ----------------------------------------------------------------------------------------------------------- | -------- | ----- | -- | -| MESSAGE_VERSION | `uint32` | 0 | | -| ACTUATOR_FUNCTION_MOTOR1 | `uint8` | 101 | | -| NUM_CONTROLS | `uint8` | 12 | | +| 명칭 | 형식 | Value | 설명 | +| --------------------------------------------------------------------------------------------------------- | -------- | ----- | -------------------------------------------------------------------------------------- | +| MESSAGE_VERSION | `uint32` | 0 | | +| ACTUATOR_FUNCTION_MOTOR1 | `uint8` | 101 | output_functions.yaml Motor.start | +| NUM_CONTROLS | `uint8` | 12 | output_functions.yaml Motor.count | ## Source Message @@ -43,15 +43,15 @@ Click here to see original file uint32 MESSAGE_VERSION = 0 -uint64 timestamp # [us] Time since system start -uint64 timestamp_sample # [us] Sampling timestamp of the data this control response is based on +uint64 timestamp # [us] Time since system start +uint64 timestamp_sample # [us] Sampling timestamp of the data this control response is based on -uint16 reversible_flags # [-] Bitset indicating which motors are configured to be reversible +uint16 reversible_flags # [-] Bitset indicating which motors are configured to be reversible -uint8 ACTUATOR_FUNCTION_MOTOR1 = 101 # +uint8 ACTUATOR_FUNCTION_MOTOR1 = 101 # output_functions.yaml Motor.start -uint8 NUM_CONTROLS = 12 # -float32[12] control # [@range -1, 1] Normalized thrust. where 1 means maximum positive thrust, -1 maximum negative (if not supported by the output, <0 maps to NaN). NaN maps to disarmed (stop the motors) +uint8 NUM_CONTROLS = 12 # output_functions.yaml Motor.count +float32[12] control # [@range -1, 1] Normalized thrust. Where 1 means maximum positive thrust, -1 maximum negative (if not supported by the output, <0 maps to NaN). NaN maps to disarmed (stop the motors) ``` ::: diff --git a/docs/ko/msg_docs/ActuatorOutputs.md b/docs/ko/msg_docs/ActuatorOutputs.md index cbdaacf727..10a809e645 100644 --- a/docs/ko/msg_docs/ActuatorOutputs.md +++ b/docs/ko/msg_docs/ActuatorOutputs.md @@ -16,10 +16,10 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------------------------------------------------------------------- | ------- | ----- | ------------------- | -| NUM_ACTUATOR_OUTPUTS | `uint8` | 16 | | -| NUM_ACTUATOR_OUTPUT_GROUPS | `uint8` | 4 | for sanity checking | +| 명칭 | 형식 | Value | 설명 | +| ---------------------------------------------------------------------------------------------------------------------------------- | ------- | ----- | ------------------- | +| NUM_ACTUATOR_OUTPUTS | `uint8` | 16 | | +| NUM_ACTUATOR_OUTPUT_GROUPS | `uint8` | 4 | for sanity checking | ## Source Message diff --git a/docs/ko/msg_docs/ActuatorServos.md b/docs/ko/msg_docs/ActuatorServos.md index 41776a04f5..23358da50b 100644 --- a/docs/ko/msg_docs/ActuatorServos.md +++ b/docs/ko/msg_docs/ActuatorServos.md @@ -21,10 +21,10 @@ Published by the vehicle's allocation and consumed by the actuator output driver ## Constants -| 명칭 | 형식 | Value | 설명 | -| -------------------------------------------------------------------- | -------- | ----- | -- | -| MESSAGE_VERSION | `uint32` | 0 | | -| NUM_CONTROLS | `uint8` | 8 | | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------ | -------- | ----- | -- | +| MESSAGE_VERSION | `uint32` | 0 | | +| NUM_CONTROLS | `uint8` | 8 | | ## Source Message @@ -41,11 +41,11 @@ Click here to see original file uint32 MESSAGE_VERSION = 0 -uint64 timestamp # [us] Time since system start -uint64 timestamp_sample # [us] Sampling timestamp of the data this control response is based on +uint64 timestamp # [us] Time since system start +uint64 timestamp_sample # [us] Sampling timestamp of the data this control response is based on -uint8 NUM_CONTROLS = 8 # -float32[8] control # [-] [@range -1, 1] Normalized output. 1 means maximum positive position. -1 maximum negative position (if not supported by the output, <0 maps to NaN). NaN maps to disarmed. +uint8 NUM_CONTROLS = 8 +float32[8] control # [-] [@range -1, 1] Normalized output. 1 means maximum positive position. -1 maximum negative position (if not supported by the output, <0 maps to NaN). NaN maps to disarmed. ``` ::: diff --git a/docs/ko/msg_docs/ActuatorServosTrim.md b/docs/ko/msg_docs/ActuatorServosTrim.md index f507eb06b5..ea248b526b 100644 --- a/docs/ko/msg_docs/ActuatorServosTrim.md +++ b/docs/ko/msg_docs/ActuatorServosTrim.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Servo trims, added as offset to servo outputs. -**TOPICS:** actuator_servostrim +**TOPICS:** actuator_servos_trim ## Fields @@ -17,9 +17,9 @@ Servo trims, added as offset to servo outputs. ## Constants -| 명칭 | 형식 | Value | 설명 | -| -------------------------------------------------------------- | ------- | ----- | -- | -| NUM_CONTROLS | `uint8` | 8 | | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------ | ------- | ----- | -- | +| NUM_CONTROLS | `uint8` | 8 | | ## Source Message diff --git a/docs/ko/msg_docs/ActuatorTest.md b/docs/ko/msg_docs/ActuatorTest.md index ffb159486c..c63e5fb98b 100644 --- a/docs/ko/msg_docs/ActuatorTest.md +++ b/docs/ko/msg_docs/ActuatorTest.md @@ -18,15 +18,15 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------------------------------------- | ------- | ----- | -------------------------------------------------------------------------------------------------------------------- | -| ACTION_RELEASE_CONTROL | `uint8` | 0 | exit test mode for the given function | -| ACTION_DO_CONTROL | `uint8` | 1 | enable actuator test mode | -| FUNCTION_MOTOR1 | `uint8` | 101 | | -| MAX_NUM_MOTORS | `uint8` | 12 | | -| FUNCTION_SERVO1 | `uint8` | 201 | | -| MAX_NUM_SERVOS | `uint8` | 8 | | -| ORB_QUEUE_LENGTH | `uint8` | 16 | > = MAX_NUM_MOTORS to support code in esc_calibration | +| 명칭 | 형식 | Value | 설명 | +| ----------------------------------------------------------------------------------------------------- | ------- | ----- | -------------------------------------------------------------------------------------------------------------------- | +| ACTION_RELEASE_CONTROL | `uint8` | 0 | exit test mode for the given function | +| ACTION_DO_CONTROL | `uint8` | 1 | enable actuator test mode | +| FUNCTION_MOTOR1 | `uint8` | 101 | | +| MAX_NUM_MOTORS | `uint8` | 12 | | +| FUNCTION_SERVO1 | `uint8` | 201 | | +| MAX_NUM_SERVOS | `uint8` | 8 | | +| ORB_QUEUE_LENGTH | `uint8` | 16 | > = MAX_NUM_MOTORS to support code in esc_calibration | ## Source Message diff --git a/docs/ko/msg_docs/AirspeedValidated.md b/docs/ko/msg_docs/AirspeedValidated.md index aeffcc6904..33d43f1764 100644 --- a/docs/ko/msg_docs/AirspeedValidated.md +++ b/docs/ko/msg_docs/AirspeedValidated.md @@ -30,20 +30,20 @@ Used by controllers, estimators and for airspeed reporting to operator. ### SOURCE {#SOURCE} -| 명칭 | 형식 | Value | 설명 | -| -------------------------------------------------------------------------------------------------------------------------------- | ------ | ----- | ----------------------- | -| SOURCE_DISABLED | `int8` | -1 | Disabled | -| SOURCE_GROUND_MINUS_WIND | `int8` | 0 | Ground speed minus wind | -| SOURCE_SENSOR_1 | `int8` | 1 | Sensor 1 | -| SOURCE_SENSOR_2 | `int8` | 2 | Sensor 2 | -| SOURCE_SENSOR_3 | `int8` | 3 | Sensor 3 | -| SOURCE_SYNTHETIC | `int8` | 4 | Synthetic airspeed | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------------------------------------------------------------------ | ------ | ----- | ----------------------- | +| SOURCE_DISABLED | `int8` | -1 | Disabled | +| SOURCE_GROUND_MINUS_WIND | `int8` | 0 | Ground speed minus wind | +| SOURCE_SENSOR_1 | `int8` | 1 | Sensor 1 | +| SOURCE_SENSOR_2 | `int8` | 2 | Sensor 2 | +| SOURCE_SENSOR_3 | `int8` | 3 | Sensor 3 | +| SOURCE_SYNTHETIC | `int8` | 4 | Synthetic airspeed | ## Constants -| 명칭 | 형식 | Value | 설명 | -| -------------------------------------------------------------------- | -------- | ----- | -- | -| MESSAGE_VERSION | `uint32` | 1 | | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------ | -------- | ----- | -- | +| MESSAGE_VERSION | `uint32` | 1 | | ## Source Message @@ -58,28 +58,27 @@ Click here to see original file # Provides information about airspeed (indicated, true, calibrated) and the source of the data. # Used by controllers, estimators and for airspeed reporting to operator. - uint32 MESSAGE_VERSION = 1 -uint64 timestamp # [us] Time since system start +uint64 timestamp # [us] Time since system start -float32 indicated_airspeed_m_s # [m/s] [@invalid NaN] Indicated airspeed (IAS) -float32 calibrated_airspeed_m_s # [m/s] [@invalid NaN] Calibrated airspeed (CAS) -float32 true_airspeed_m_s # [m/s] [@invalid NaN] True airspeed (TAS) +float32 indicated_airspeed_m_s # [m/s] [@invalid NaN] Indicated airspeed (IAS) +float32 calibrated_airspeed_m_s # [m/s] [@invalid NaN] Calibrated airspeed (CAS) +float32 true_airspeed_m_s # [m/s] [@invalid NaN] True airspeed (TAS) -int8 airspeed_source # [@enum SOURCE] Source of currently published airspeed values -int8 SOURCE_DISABLED = -1 # Disabled -int8 SOURCE_GROUND_MINUS_WIND = 0 # Ground speed minus wind -int8 SOURCE_SENSOR_1 = 1 # Sensor 1 -int8 SOURCE_SENSOR_2 = 2 # Sensor 2 -int8 SOURCE_SENSOR_3 = 3 # Sensor 3 -int8 SOURCE_SYNTHETIC = 4 # Synthetic airspeed +int8 airspeed_source # [@enum SOURCE] Source of currently published airspeed values +int8 SOURCE_DISABLED = -1 # Disabled +int8 SOURCE_GROUND_MINUS_WIND = 0 # Ground speed minus wind +int8 SOURCE_SENSOR_1 = 1 # Sensor 1 +int8 SOURCE_SENSOR_2 = 2 # Sensor 2 +int8 SOURCE_SENSOR_3 = 3 # Sensor 3 +int8 SOURCE_SYNTHETIC = 4 # Synthetic airspeed -float32 calibrated_ground_minus_wind_m_s # [m/s] [@invalid NaN] CAS calculated from groundspeed - windspeed, where windspeed is estimated based on a zero-sideslip assumption -float32 calibraded_airspeed_synth_m_s # [m/s] [@invalid NaN] Synthetic airspeed -float32 airspeed_derivative_filtered # [m/s^2] Filtered indicated airspeed derivative -float32 throttle_filtered # [-] Filtered fixed-wing throttle -float32 pitch_filtered # [rad] Filtered pitch +float32 calibrated_ground_minus_wind_m_s # [m/s] [@invalid NaN] CAS calculated from groundspeed - windspeed, where windspeed is estimated based on a zero-sideslip assumption +float32 calibraded_airspeed_synth_m_s # [m/s] [@invalid NaN] Synthetic airspeed +float32 airspeed_derivative_filtered # [m/s^2] Filtered indicated airspeed derivative +float32 throttle_filtered # [-] Filtered fixed-wing throttle +float32 pitch_filtered # [rad] Filtered pitch ``` ::: diff --git a/docs/ko/msg_docs/AirspeedValidatedV0.md b/docs/ko/msg_docs/AirspeedValidatedV0.md index e311b1e496..2b22c48b39 100644 --- a/docs/ko/msg_docs/AirspeedValidatedV0.md +++ b/docs/ko/msg_docs/AirspeedValidatedV0.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # AirspeedValidatedV0 (UORB message) -**TOPICS:** airspeed_validatedv0 +**TOPICS:** airspeed_validated_v0 ## Fields @@ -24,9 +24,9 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| -------------------------------------------------------------------- | -------- | ----- | -- | -| MESSAGE_VERSION | `uint32` | 0 | | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------ | -------- | ----- | -- | +| MESSAGE_VERSION | `uint32` | 0 | | ## Source Message diff --git a/docs/ko/msg_docs/AirspeedWind.md b/docs/ko/msg_docs/AirspeedWind.md index a3aaf9ab46..21f4b2f06d 100644 --- a/docs/ko/msg_docs/AirspeedWind.md +++ b/docs/ko/msg_docs/AirspeedWind.md @@ -35,12 +35,12 @@ subscribed to by any other modules. ## Constants -| 명칭 | 형식 | Value | 설명 | -| ---------------------------------------------------------------------------------------------------------------------- | ------- | ----- | ----------------------------------------------------------------------------------------------------- | -| SOURCE_AS_BETA_ONLY | `uint8` | 0 | Wind estimate only based on synthetic sideslip fusion | -| SOURCE_AS_SENSOR_1 | `uint8` | 1 | Combined synthetic sideslip and airspeed fusion (data from first airspeed sensor) | -| SOURCE_AS_SENSOR_2 | `uint8` | 2 | Combined synthetic sideslip and airspeed fusion (data from second airspeed sensor) | -| SOURCE_AS_SENSOR_3 | `uint8` | 3 | Combined synthetic sideslip and airspeed fusion (data from third airspeed sensor) | +| 명칭 | 형식 | Value | 설명 | +| -------------------------------------------------------------------------------------------------------------------- | ------- | ----- | ----------------------------------------------------------------------------------------------------- | +| SOURCE_AS_BETA_ONLY | `uint8` | 0 | Wind estimate only based on synthetic sideslip fusion | +| SOURCE_AS_SENSOR_1 | `uint8` | 1 | Combined synthetic sideslip and airspeed fusion (data from first airspeed sensor) | +| SOURCE_AS_SENSOR_2 | `uint8` | 2 | Combined synthetic sideslip and airspeed fusion (data from second airspeed sensor) | +| SOURCE_AS_SENSOR_3 | `uint8` | 3 | Combined synthetic sideslip and airspeed fusion (data from third airspeed sensor) | ## Source Message diff --git a/docs/ko/msg_docs/ArmingCheckReply.md b/docs/ko/msg_docs/ArmingCheckReply.md index bf5e6d21d7..1d138c66d8 100644 --- a/docs/ko/msg_docs/ArmingCheckReply.md +++ b/docs/ko/msg_docs/ArmingCheckReply.md @@ -13,7 +13,7 @@ The request is sent regularly to all registered ROS modes, even while armed, so Note that the external component is identified by its registration_id, which is allocated to the component during registration (arming_check_id in RegisterExtComponentReply). The message is not used by internal/FMU components, as their mode requirements are known at compile time. -**TOPICS:** arming_checkreply +**TOPICS:** arming_check_reply ## Fields @@ -45,16 +45,16 @@ The message is not used by internal/FMU components, as their mode requirements a ### HEALTH_COMPONENT_INDEX {#HEALTH_COMPONENT_INDEX} -| 명칭 | 형식 | Value | 설명 | -| -------------------------------------------------------------------------------------------------------------------------------------- | ------- | ----- | --------------------------------------------------------- | -| HEALTH_COMPONENT_INDEX_NONE | `uint8` | 0 | Index of health component for which this response applies | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------------------------------------------------------------------------ | ------- | ----- | --------------------------------------------------------- | +| HEALTH_COMPONENT_INDEX_NONE | `uint8` | 0 | Index of health component for which this response applies | ## Constants -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------------------------- | -------- | ----- | -- | -| MESSAGE_VERSION | `uint32` | 1 | | -| ORB_QUEUE_LENGTH | `uint8` | 4 | | +| 명칭 | 형식 | Value | 설명 | +| ----------------------------------------------------------------------------------------- | -------- | ----- | -- | +| MESSAGE_VERSION | `uint32` | 1 | | +| ORB_QUEUE_LENGTH | `uint8` | 4 | | ## Source Message @@ -73,40 +73,40 @@ Click here to see original file # Note that the external component is identified by its registration_id, which is allocated to the component during registration (arming_check_id in RegisterExtComponentReply). # The message is not used by internal/FMU components, as their mode requirements are known at compile time. -uint32 MESSAGE_VERSION = 1 +uint32 MESSAGE_VERSION = 1 uint64 timestamp # [us] Time since system start. -uint8 request_id # [-] Id of ArmingCheckRequest for which this is a response -uint8 registration_id # [-] Id of external component emitting this response +uint8 request_id # [-] Id of ArmingCheckRequest for which this is a response +uint8 registration_id # [-] Id of external component emitting this response -uint8 HEALTH_COMPONENT_INDEX_NONE = 0 # Index of health component for which this response applies +uint8 HEALTH_COMPONENT_INDEX_NONE = 0 # Index of health component for which this response applies -uint8 health_component_index # [@enum HEALTH_COMPONENT_INDEX] -bool health_component_is_present # Unused. Intended for use with health events interface (health_component_t in events.json) -bool health_component_warning # Unused. Intended for use with health events interface (health_component_t in events.json) -bool health_component_error # Unused. Intended for use with health events interface (health_component_t in events.json) +uint8 health_component_index # [@enum HEALTH_COMPONENT_INDEX] +bool health_component_is_present # Unused. Intended for use with health events interface (health_component_t in events.json) +bool health_component_warning # Unused. Intended for use with health events interface (health_component_t in events.json) +bool health_component_error # Unused. Intended for use with health events interface (health_component_t in events.json) -bool can_arm_and_run # True if the component can arm. For navigation mode components, true if the component can arm in the mode or switch to the mode when already armed +bool can_arm_and_run # True if the component can arm. For navigation mode components, true if the component can arm in the mode or switch to the mode when already armed -uint8 num_events # Number of queued failure messages (Event) in the events field +uint8 num_events # Number of queued failure messages (Event) in the events field -Event[5] events # Arming failure reasons (Queue of events to report to GCS) +Event[5] events # Arming failure reasons (Queue of events to report to GCS) # Mode requirements -bool mode_req_angular_velocity # Requires angular velocity estimate (e.g. from gyroscope) -bool mode_req_attitude # Requires an attitude estimate -bool mode_req_local_alt # Requires a local altitude estimate -bool mode_req_local_position # Requires a local position estimate -bool mode_req_local_position_relaxed # Requires a more relaxed global position estimate -bool mode_req_global_position # Requires a global position estimate -bool mode_req_global_position_relaxed # Requires a relaxed global position estimate -bool mode_req_mission # Requires an uploaded mission -bool mode_req_home_position # Requires a home position (such as RTL/Return mode) -bool mode_req_prevent_arming # Prevent arming (such as in Land mode) -bool mode_req_manual_control # Requires a manual controller +bool mode_req_angular_velocity # Requires angular velocity estimate (e.g. from gyroscope) +bool mode_req_attitude # Requires an attitude estimate +bool mode_req_local_alt # Requires a local altitude estimate +bool mode_req_local_position # Requires a local position estimate +bool mode_req_local_position_relaxed # Requires a more relaxed global position estimate +bool mode_req_global_position # Requires a global position estimate +bool mode_req_global_position_relaxed # Requires a relaxed global position estimate +bool mode_req_mission # Requires an uploaded mission +bool mode_req_home_position # Requires a home position (such as RTL/Return mode) +bool mode_req_prevent_arming # Prevent arming (such as in Land mode) +bool mode_req_manual_control # Requires a manual controller -uint8 ORB_QUEUE_LENGTH = 4 +uint8 ORB_QUEUE_LENGTH = 4 ``` ::: diff --git a/docs/ko/msg_docs/ArmingCheckReplyV0.md b/docs/ko/msg_docs/ArmingCheckReplyV0.md index 10a7bd8602..b5bf63dfce 100644 --- a/docs/ko/msg_docs/ArmingCheckReplyV0.md +++ b/docs/ko/msg_docs/ArmingCheckReplyV0.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # ArmingCheckReplyV0 (UORB message) -**TOPICS:** arming_checkreplyv0 +**TOPICS:** arming_check_reply_v0 ## Fields @@ -33,11 +33,11 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| -------------------------------------------------------------------------------------------------------------------------------------- | -------- | ----- | -- | -| MESSAGE_VERSION | `uint32` | 0 | | -| HEALTH_COMPONENT_INDEX_NONE | `uint8` | 0 | | -| ORB_QUEUE_LENGTH | `uint8` | 4 | | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------------------------------------------------------------------------ | -------- | ----- | -- | +| MESSAGE_VERSION | `uint32` | 0 | | +| HEALTH_COMPONENT_INDEX_NONE | `uint8` | 0 | | +| ORB_QUEUE_LENGTH | `uint8` | 4 | | ## Source Message diff --git a/docs/ko/msg_docs/ArmingCheckRequest.md b/docs/ko/msg_docs/ArmingCheckRequest.md index d67cf35311..4c854266aa 100644 --- a/docs/ko/msg_docs/ArmingCheckRequest.md +++ b/docs/ko/msg_docs/ArmingCheckRequest.md @@ -13,7 +13,7 @@ The request is sent regularly, even while armed, so that the FMU always knows th The reply will include the published request_id, allowing correlation of all arming check information for a particular request. The reply will also include the registration_id for each external component, provided to it during the registration process (RegisterExtComponentReply). -**TOPICS:** arming_checkrequest +**TOPICS:** arming_check_request ## Fields @@ -25,9 +25,9 @@ The reply will also include the registration_id for each external component, pro ## Constants -| 명칭 | 형식 | Value | 설명 | -| -------------------------------------------------------------------- | -------- | ----- | -- | -| MESSAGE_VERSION | `uint32` | 1 | | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------ | -------- | ----- | -- | +| MESSAGE_VERSION | `uint32` | 1 | | ## Source Message @@ -48,9 +48,9 @@ Click here to see original file uint32 MESSAGE_VERSION = 1 -uint64 timestamp # [us] Time since system start +uint64 timestamp # [us] Time since system start -uint8 request_id # [-] Id of this request. Allows correlation with associated ArmingCheckReply messages. +uint8 request_id # [-] Id of this request. Allows correlation with associated ArmingCheckReply messages. uint32 valid_registrations_mask # [-] Bitmask of valid registration ID's (the bit is also cleared if flagged as unresponsive) ``` diff --git a/docs/ko/msg_docs/ArmingCheckRequestV0.md b/docs/ko/msg_docs/ArmingCheckRequestV0.md index 1014b8f53e..4fa228b580 100644 --- a/docs/ko/msg_docs/ArmingCheckRequestV0.md +++ b/docs/ko/msg_docs/ArmingCheckRequestV0.md @@ -13,7 +13,7 @@ The request is sent regularly, even while armed, so that the FMU always knows th The reply will include the published request_id, allowing correlation of all arming check information for a particular request. The reply will also include the registration_id for each external component, provided to it during the registration process (RegisterExtComponentReply). -**TOPICS:** arming_checkrequestv0 +**TOPICS:** arming_check_request_v0 ## Fields @@ -24,9 +24,9 @@ The reply will also include the registration_id for each external component, pro ## Constants -| 명칭 | 형식 | Value | 설명 | -| -------------------------------------------------------------------- | -------- | ----- | -- | -| MESSAGE_VERSION | `uint32` | 0 | | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------ | -------- | ----- | -- | +| MESSAGE_VERSION | `uint32` | 0 | | ## Source Message diff --git a/docs/ko/msg_docs/AutotuneAttitudeControlStatus.md b/docs/ko/msg_docs/AutotuneAttitudeControlStatus.md index 6831460328..fe1edac6bc 100644 --- a/docs/ko/msg_docs/AutotuneAttitudeControlStatus.md +++ b/docs/ko/msg_docs/AutotuneAttitudeControlStatus.md @@ -11,7 +11,7 @@ and is subscribed to by the respective attitude controllers to command rate setp The rate_sp field is consumed by the controllers, while the remaining fields (model coefficients, gains, filters, and autotune state) are used for logging and debugging. -**TOPICS:** autotune_attitudecontrol_status +**TOPICS:** autotune_attitude_control_status ## Fields @@ -37,25 +37,25 @@ The rate_sp field is consumed by the controllers, while the remaining fields (mo ### STATE {#STATE} -| 명칭 | 형식 | Value | 설명 | -| ---------------------------------------------------------------------------------------------------------------------------------------------- | ------- | ----- | ------------------------------------------------------------------------------------------- | -| STATE_IDLE | `uint8` | 0 | Idle (not running) | -| STATE_INIT | `uint8` | 1 | Initialize filters and setup | -| STATE_ROLL_AMPLITUDE_DETECTION | `uint8` | 2 | FW only: determine required excitation amplitude (roll) | -| STATE_ROLL | `uint8` | 3 | Roll-axis excitation and model identification | -| STATE_ROLL_PAUSE | `uint8` | 4 | Pause to return to level flight | -| STATE_PITCH_AMPLITUDE_DETECTION | `uint8` | 5 | FW only: determine required excitation amplitude (pitch) | -| STATE_PITCH | `uint8` | 6 | Pitch-axis excitation and model identification | -| STATE_PITCH_PAUSE | `uint8` | 7 | Pause to return to level flight | -| STATE_YAW_AMPLITUDE_DETECTION | `uint8` | 8 | FW only: determine required excitation amplitude (yaw) | -| STATE_YAW | `uint8` | 9 | Yaw-axis excitation and model identification | -| STATE_YAW_PAUSE | `uint8` | 10 | Pause to return to level flight | -| STATE_VERIFICATION | `uint8` | 11 | Verify model and candidate gains | -| STATE_APPLY | `uint8` | 12 | Apply gains | -| STATE_TEST | `uint8` | 13 | Test gains in closed-loop | -| STATE_COMPLETE | `uint8` | 14 | Tuning completed successfully | -| STATE_FAIL | `uint8` | 15 | Tuning failed (model invalid or controller unstable) | -| STATE_WAIT_FOR_DISARM | `uint8` | 16 | Waiting for disarm before finalizing | +| 명칭 | 형식 | Value | 설명 | +| -------------------------------------------------------------------------------------------------------------------------------------------- | ------- | ----- | ------------------------------------------------------------------------------------------- | +| STATE_IDLE | `uint8` | 0 | Idle (not running) | +| STATE_INIT | `uint8` | 1 | Initialize filters and setup | +| STATE_ROLL_AMPLITUDE_DETECTION | `uint8` | 2 | FW only: determine required excitation amplitude (roll) | +| STATE_ROLL | `uint8` | 3 | Roll-axis excitation and model identification | +| STATE_ROLL_PAUSE | `uint8` | 4 | Pause to return to level flight | +| STATE_PITCH_AMPLITUDE_DETECTION | `uint8` | 5 | FW only: determine required excitation amplitude (pitch) | +| STATE_PITCH | `uint8` | 6 | Pitch-axis excitation and model identification | +| STATE_PITCH_PAUSE | `uint8` | 7 | Pause to return to level flight | +| STATE_YAW_AMPLITUDE_DETECTION | `uint8` | 8 | FW only: determine required excitation amplitude (yaw) | +| STATE_YAW | `uint8` | 9 | Yaw-axis excitation and model identification | +| STATE_YAW_PAUSE | `uint8` | 10 | Pause to return to level flight | +| STATE_VERIFICATION | `uint8` | 11 | Verify model and candidate gains | +| STATE_APPLY | `uint8` | 12 | Apply gains | +| STATE_TEST | `uint8` | 13 | Test gains in closed-loop | +| STATE_COMPLETE | `uint8` | 14 | Tuning completed successfully | +| STATE_FAIL | `uint8` | 15 | Tuning failed (model invalid or controller unstable) | +| STATE_WAIT_FOR_DISARM | `uint8` | 16 | Waiting for disarm before finalizing | ## Source Message diff --git a/docs/ko/msg_docs/AuxGlobalPosition.md b/docs/ko/msg_docs/AuxGlobalPosition.md new file mode 100644 index 0000000000..881504a091 --- /dev/null +++ b/docs/ko/msg_docs/AuxGlobalPosition.md @@ -0,0 +1,90 @@ +--- +pageClass: is-wide-page +--- + +# AuxGlobalPosition (UORB message) + +Auxiliary global position. + +This message provides global position data from an external source such as +pseudolites, visual navigation, or other positioning system. + +**TOPICS:** aux_global_position + +## Fields + +| 명칭 | 형식 | Unit [Frame] | Range/Enum | 설명 | +| ------------------------------------------------------------------------------------ | --------- | ---------------------------------------------------------------- | ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| timestamp | `uint64` | us | | Time since system start | +| timestamp_sample | `uint64` | us | | Timestamp of the raw data | +| id | `uint8` | | | Unique identifier for the AGP source | +| source | `uint8` | | [SOURCE](#SOURCE) | Source type of the position data (based on mavlink::GLOBAL_POSITION_SRC) | +| lat | `float64` | deg | | Latitude in WGS84 | +| lon | `float64` | deg | | Longitude in WGS84 | +| alt | `float32` | m | | Altitude above mean sea level (AMSL) (Invalid: NaN) | +| eph | `float32` | m | | Std dev of horizontal position, lower bounded by NOISE param (Invalid: NaN) | +| epv | `float32` | m | | Std dev of vertical position, lower bounded by NOISE param (Invalid: NaN) | +| lat_lon_reset_counter | `uint8` | | | Counter for reset events on horizontal position coordinates | + +## Enums + +### SOURCE {#SOURCE} + +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------------ | ------- | ----- | -------------- | +| SOURCE_UNKNOWN | `uint8` | 0 | Unknown source | +| SOURCE_GNSS | `uint8` | 1 | GNSS | +| SOURCE_VISION | `uint8` | 2 | Vision | +| SOURCE_PSEUDOLITES | `uint8` | 3 | Pseudolites | +| SOURCE_TERRAIN | `uint8` | 4 | Terrain | +| SOURCE_MAGNETIC | `uint8` | 5 | Magnetic | +| SOURCE_ESTIMATOR | `uint8` | 6 | 추정기 | + +## Constants + +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------ | -------- | ----- | -- | +| MESSAGE_VERSION | `uint32` | 1 | | + +## Source Message + +[Source file (GitHub)](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/AuxGlobalPosition.msg) + +:::details +Click here to see original file + +```c +# Auxiliary global position +# +# This message provides global position data from an external source such as +# pseudolites, visual navigation, or other positioning system. + +uint32 MESSAGE_VERSION = 1 + +uint64 timestamp # [us] Time since system start +uint64 timestamp_sample # [us] Timestamp of the raw data + +uint8 id # [-] Unique identifier for the AGP source +uint8 source # [@enum SOURCE] Source type of the position data (based on mavlink::GLOBAL_POSITION_SRC) +uint8 SOURCE_UNKNOWN = 0 # Unknown source +uint8 SOURCE_GNSS = 1 # GNSS +uint8 SOURCE_VISION = 2 # Vision +uint8 SOURCE_PSEUDOLITES = 3 # Pseudolites +uint8 SOURCE_TERRAIN = 4 # Terrain +uint8 SOURCE_MAGNETIC = 5 # Magnetic +uint8 SOURCE_ESTIMATOR = 6 # Estimator + +# lat, lon: required for horizontal position fusion, alt: required for vertical position fusion +float64 lat # [deg] Latitude in WGS84 +float64 lon # [deg] Longitude in WGS84 +float32 alt # [m] [@invalid NaN] Altitude above mean sea level (AMSL) + +float32 eph # [m] [@invalid NaN] Std dev of horizontal position, lower bounded by NOISE param +float32 epv # [m] [@invalid NaN] Std dev of vertical position, lower bounded by NOISE param + +uint8 lat_lon_reset_counter # [-] Counter for reset events on horizontal position coordinates + +# TOPICS aux_global_position +``` + +::: diff --git a/docs/ko/msg_docs/BatteryStatus.md b/docs/ko/msg_docs/BatteryStatus.md index 9058d50080..0809a57da3 100644 --- a/docs/ko/msg_docs/BatteryStatus.md +++ b/docs/ko/msg_docs/BatteryStatus.md @@ -25,7 +25,7 @@ Battery instance information is also logged and streamed in MAVLink telemetry. | remaining | `float32` | | [0 : 1] | Remaining capacity (Invalid: -1) | | scale | `float32` | | [1 : -] | Scaling factor to compensate for lower actuation power caused by voltage sag (Invalid: -1) | | time_remaining_s | `float32` | s | | Predicted time remaining until battery is empty under previous averaged load (Invalid: NaN) | -| temperature | `float32` | °C | | Temperature of the battery (Invalid: NaN) | +| temperature | `float32` | degC | | Temperature of the battery (Invalid: NaN) | | cell_count | `uint8` | | | Number of cells (Invalid: 0) | | source | `uint8` | | [SOURCE](#SOURCE) | Battery source | | priority | `uint8` | | | Zero based priority is the connection on the Power Controller V1..Vn AKA BrickN-1 | @@ -59,52 +59,52 @@ Battery instance information is also logged and streamed in MAVLink telemetry. ### SOURCE {#SOURCE} -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------------------------------- | ------- | ----- | ----------------------------------------------------------------- | -| SOURCE_POWER_MODULE | `uint8` | 0 | Power module (analog ADC or I2C power monitor) | -| SOURCE_EXTERNAL | `uint8` | 1 | External (MAVLink, CAN, or external driver) | -| SOURCE_ESCS | `uint8` | 2 | ESCs (via ESC telemetry) | +| 명칭 | 형식 | Value | 설명 | +| ----------------------------------------------------------------------------------------------- | ------- | ----- | ----------------------------------------------------------------- | +| SOURCE_POWER_MODULE | `uint8` | 0 | Power module (analog ADC or I2C power monitor) | +| SOURCE_EXTERNAL | `uint8` | 1 | External (MAVLink, CAN, or external driver) | +| SOURCE_ESCS | `uint8` | 2 | ESCs (via ESC telemetry) | ### WARNING {#WARNING} -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------ | ------- | ----- | -------------------------------------------- | -| WARNING_NONE | `uint8` | 0 | No battery low voltage warning active | -| WARNING_LOW | `uint8` | 1 | Low voltage warning | -| WARNING_CRITICAL | `uint8` | 2 | Critical voltage, return / abort immediately | -| WARNING_EMERGENCY | `uint8` | 3 | Immediate landing required | -| WARNING_FAILED | `uint8` | 4 | Battery has failed completely | +| 명칭 | 형식 | Value | 설명 | +| ---------------------------------------------------------------------- | ------- | ----- | -------------------------------------------- | +| WARNING_NONE | `uint8` | 0 | No battery low voltage warning active | +| WARNING_LOW | `uint8` | 1 | Low voltage warning | +| WARNING_CRITICAL | `uint8` | 2 | Critical voltage, return / abort immediately | +| WARNING_EMERGENCY | `uint8` | 3 | Immediate landing required | +| WARNING_FAILED | `uint8` | 4 | Battery has failed completely | ### STATE {#STATE} -| 명칭 | 형식 | Value | 설명 | -| -------------------------------------------------------------------- | ------- | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| STATE_UNHEALTHY | `uint8` | 6 | Battery is diagnosed to be defective or an error occurred, usage is discouraged / prohibited. Possible causes (faults) are listed in faults field | -| STATE_CHARGING | `uint8` | 7 | Battery is charging | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------ | ------- | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| STATE_UNHEALTHY | `uint8` | 6 | Battery is diagnosed to be defective or an error occurred, usage is discouraged / prohibited. Possible causes (faults) are listed in faults field | +| STATE_CHARGING | `uint8` | 7 | Battery is charging | ### FAULT {#FAULT} -| 명칭 | 형식 | Value | 설명 | -| ---------------------------------------------------------------------------------------------------------------------- | ------- | ----- | --------------------------------------------------------------------------------------------------------------------------------- | -| FAULT_DEEP_DISCHARGE | `uint8` | 0 | Battery has deep discharged | -| FAULT_SPIKES | `uint8` | 1 | Voltage spikes | -| FAULT_CELL_FAIL | `uint8` | 2 | One or more cells have failed | -| FAULT_OVER_CURRENT | `uint8` | 3 | Over-current | -| FAULT_OVER_TEMPERATURE | `uint8` | 4 | Over-temperature | -| FAULT_UNDER_TEMPERATURE | `uint8` | 5 | Under-temperature fault | -| FAULT_INCOMPATIBLE_VOLTAGE | `uint8` | 6 | Vehicle voltage is not compatible with this battery (batteries on same power rail should have similar voltage) | -| FAULT_INCOMPATIBLE_FIRMWARE | `uint8` | 7 | Battery firmware is not compatible with current autopilot firmware | -| FAULT_INCOMPATIBLE_MODEL | `uint8` | 8 | Battery model is not supported by the system | -| FAULT_HARDWARE_FAILURE | `uint8` | 9 | Hardware problem | -| FAULT_FAILED_TO_ARM | `uint8` | 10 | Battery had a problem while arming | -| FAULT_COUNT | `uint8` | 11 | Counter. Keep this as last element | +| 명칭 | 형식 | Value | 설명 | +| -------------------------------------------------------------------------------------------------------------------- | ------- | ----- | --------------------------------------------------------------------------------------------------------------------------------- | +| FAULT_DEEP_DISCHARGE | `uint8` | 0 | Battery has deep discharged | +| FAULT_SPIKES | `uint8` | 1 | Voltage spikes | +| FAULT_CELL_FAIL | `uint8` | 2 | One or more cells have failed | +| FAULT_OVER_CURRENT | `uint8` | 3 | Over-current | +| FAULT_OVER_TEMPERATURE | `uint8` | 4 | Over-temperature | +| FAULT_UNDER_TEMPERATURE | `uint8` | 5 | Under-temperature fault | +| FAULT_INCOMPATIBLE_VOLTAGE | `uint8` | 6 | Vehicle voltage is not compatible with this battery (batteries on same power rail should have similar voltage) | +| FAULT_INCOMPATIBLE_FIRMWARE | `uint8` | 7 | Battery firmware is not compatible with current autopilot firmware | +| FAULT_INCOMPATIBLE_MODEL | `uint8` | 8 | Battery model is not supported by the system | +| FAULT_HARDWARE_FAILURE | `uint8` | 9 | Hardware problem | +| FAULT_FAILED_TO_ARM | `uint8` | 10 | Battery had a problem while arming | +| FAULT_COUNT | `uint8` | 11 | Counter. Keep this as last element | ## Constants -| 명칭 | 형식 | Value | 설명 | -| -------------------------------------------------------------------- | -------- | ----- | -- | -| MESSAGE_VERSION | `uint32` | 1 | | -| MAX_INSTANCES | `uint8` | 3 | | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------ | -------- | ----- | -- | +| MESSAGE_VERSION | `uint32` | 1 | | +| MAX_INSTANCES | `uint8` | 3 | | ## Source Message @@ -123,76 +123,75 @@ Click here to see original file uint32 MESSAGE_VERSION = 1 uint8 MAX_INSTANCES = 3 -uint64 timestamp # [us] Time since system start +uint64 timestamp # [us] Time since system start -bool connected # Whether or not a battery is connected. For power modules this is based on a voltage threshold. -float32 voltage_v # [V] [@invalid 0] Battery voltage -float32 current_a # [A] [@invalid -1] Battery current -float32 current_average_a # [A] [@invalid -1] Battery current average (for FW average in level flight) -float32 discharged_mah # [mAh] [@invalid -1] Discharged amount -float32 remaining # [@range 0,1] [@invalid -1] Remaining capacity -float32 scale # [-] [@range 1,] [@invalid -1] Scaling factor to compensate for lower actuation power caused by voltage sag -float32 time_remaining_s # [s] [@invalid NaN] Predicted time remaining until battery is empty under previous averaged load -float32 temperature # [°C] [@invalid NaN] Temperature of the battery -uint8 cell_count # [-] [@invalid 0] Number of cells +bool connected # Whether or not a battery is connected. For power modules this is based on a voltage threshold. +float32 voltage_v # [V] [@invalid 0] Battery voltage +float32 current_a # [A] [@invalid -1] Battery current +float32 current_average_a # [A] [@invalid -1] Battery current average (for FW average in level flight) +float32 discharged_mah # [mAh] [@invalid -1] Discharged amount +float32 remaining # [@range 0,1] [@invalid -1] Remaining capacity +float32 scale # [-] [@range 1,] [@invalid -1] Scaling factor to compensate for lower actuation power caused by voltage sag +float32 time_remaining_s # [s] [@invalid NaN] Predicted time remaining until battery is empty under previous averaged load +float32 temperature # [degC] [@invalid NaN] Temperature of the battery +uint8 cell_count # [-] [@invalid 0] Number of cells +uint8 source # [@enum SOURCE] Battery source +uint8 SOURCE_POWER_MODULE = 0 # Power module (analog ADC or I2C power monitor) +uint8 SOURCE_EXTERNAL = 1 # External (MAVLink, CAN, or external driver) +uint8 SOURCE_ESCS = 2 # ESCs (via ESC telemetry) -uint8 source # [@enum SOURCE] Battery source -uint8 SOURCE_POWER_MODULE = 0 # Power module (analog ADC or I2C power monitor) -uint8 SOURCE_EXTERNAL = 1 # External (MAVLink, CAN, or external driver) -uint8 SOURCE_ESCS = 2 # ESCs (via ESC telemetry) +uint8 priority # [-] Zero based priority is the connection on the Power Controller V1..Vn AKA BrickN-1 +uint16 capacity # [mAh] Capacity of the battery when fully charged +uint16 cycle_count # [-] Number of discharge cycles the battery has experienced +uint16 average_time_to_empty # [minutes] Predicted remaining battery capacity based on the average rate of discharge +uint16 manufacture_date # [-] Manufacture date, part of serial number of the battery pack. Formatted as: Day + Month×32 + (Year–1980)×512 +uint16 state_of_health # [%] [@range 0, 100] State of health. FullChargeCapacity/DesignCapacity +uint16 max_error # [%] [@range 1, 100] Max error, expected margin of error in the state-of-charge calculation +uint8 id # [-] ID number of a battery. Should be unique and consistent for the lifetime of a vehicle. 1-indexed +uint16 interface_error # [-] Interface error counter -uint8 priority # [-] Zero based priority is the connection on the Power Controller V1..Vn AKA BrickN-1 -uint16 capacity # [mAh] Capacity of the battery when fully charged -uint16 cycle_count # [-] Number of discharge cycles the battery has experienced -uint16 average_time_to_empty # [minutes] Predicted remaining battery capacity based on the average rate of discharge -uint16 manufacture_date # [-] Manufacture date, part of serial number of the battery pack. Formatted as: Day + Month×32 + (Year–1980)×512 -uint16 state_of_health # [%] [@range 0, 100] State of health. FullChargeCapacity/DesignCapacity -uint16 max_error # [%] [@range 1, 100] Max error, expected margin of error in the state-of-charge calculation -uint8 id # [-] ID number of a battery. Should be unique and consistent for the lifetime of a vehicle. 1-indexed -uint16 interface_error # [-] Interface error counter +float32[14] voltage_cell_v # [V] [@invalid 0] Battery individual cell voltages +float32 max_cell_voltage_delta # [V] Max difference between individual cell voltages -float32[14] voltage_cell_v # [V] [@invalid 0] Battery individual cell voltages -float32 max_cell_voltage_delta # [V] Max difference between individual cell voltages +bool is_powering_off # Power off event imminent indication, false if unknown +bool is_required # Set if the battery is explicitly required before arming -bool is_powering_off # Power off event imminent indication, false if unknown -bool is_required # Set if the battery is explicitly required before arming +uint8 warning # [@enum WARNING STATE] Current battery warning +uint8 WARNING_NONE = 0 # No battery low voltage warning active +uint8 WARNING_LOW = 1 # Low voltage warning +uint8 WARNING_CRITICAL = 2 # Critical voltage, return / abort immediately +uint8 WARNING_EMERGENCY = 3 # Immediate landing required +uint8 WARNING_FAILED = 4 # Battery has failed completely +uint8 STATE_UNHEALTHY = 6 # Battery is diagnosed to be defective or an error occurred, usage is discouraged / prohibited. Possible causes (faults) are listed in faults field +uint8 STATE_CHARGING = 7 # Battery is charging -uint8 warning # [@enum WARNING STATE] Current battery warning -uint8 WARNING_NONE = 0 # No battery low voltage warning active -uint8 WARNING_LOW = 1 # Low voltage warning -uint8 WARNING_CRITICAL = 2 # Critical voltage, return / abort immediately -uint8 WARNING_EMERGENCY = 3 # Immediate landing required -uint8 WARNING_FAILED = 4 # Battery has failed completely -uint8 STATE_UNHEALTHY = 6 # Battery is diagnosed to be defective or an error occurred, usage is discouraged / prohibited. Possible causes (faults) are listed in faults field -uint8 STATE_CHARGING = 7 # Battery is charging +uint16 faults # [@enum FAULT] Smart battery supply status/fault flags (bitmask) for health indication +uint8 FAULT_DEEP_DISCHARGE = 0 # Battery has deep discharged +uint8 FAULT_SPIKES = 1 # Voltage spikes +uint8 FAULT_CELL_FAIL= 2 # One or more cells have failed +uint8 FAULT_OVER_CURRENT = 3 # Over-current +uint8 FAULT_OVER_TEMPERATURE = 4 # Over-temperature +uint8 FAULT_UNDER_TEMPERATURE = 5 # Under-temperature fault +uint8 FAULT_INCOMPATIBLE_VOLTAGE = 6 # Vehicle voltage is not compatible with this battery (batteries on same power rail should have similar voltage) +uint8 FAULT_INCOMPATIBLE_FIRMWARE = 7 # Battery firmware is not compatible with current autopilot firmware +uint8 FAULT_INCOMPATIBLE_MODEL = 8 # Battery model is not supported by the system +uint8 FAULT_HARDWARE_FAILURE = 9 # Hardware problem +uint8 FAULT_FAILED_TO_ARM = 10 # Battery had a problem while arming +uint8 FAULT_COUNT = 11 # Counter. Keep this as last element -uint16 faults # [@enum FAULT] Smart battery supply status/fault flags (bitmask) for health indication -uint8 FAULT_DEEP_DISCHARGE = 0 # Battery has deep discharged -uint8 FAULT_SPIKES = 1 # Voltage spikes -uint8 FAULT_CELL_FAIL= 2 # One or more cells have failed -uint8 FAULT_OVER_CURRENT = 3 # Over-current -uint8 FAULT_OVER_TEMPERATURE = 4 # Over-temperature -uint8 FAULT_UNDER_TEMPERATURE = 5 # Under-temperature fault -uint8 FAULT_INCOMPATIBLE_VOLTAGE = 6 # Vehicle voltage is not compatible with this battery (batteries on same power rail should have similar voltage) -uint8 FAULT_INCOMPATIBLE_FIRMWARE = 7 # Battery firmware is not compatible with current autopilot firmware -uint8 FAULT_INCOMPATIBLE_MODEL = 8 # Battery model is not supported by the system -uint8 FAULT_HARDWARE_FAILURE = 9 # Hardware problem -uint8 FAULT_FAILED_TO_ARM = 10 # Battery had a problem while arming -uint8 FAULT_COUNT = 11 # Counter. Keep this as last element +float32 full_charge_capacity_wh # [Wh] Compensated battery capacity +float32 remaining_capacity_wh # [Wh] Compensated battery capacity remaining +uint16 over_discharge_count # [-] Number of battery overdischarge +float32 nominal_voltage # [V] Nominal voltage of the battery pack -float32 full_charge_capacity_wh # [Wh] Compensated battery capacity -float32 remaining_capacity_wh # [Wh] Compensated battery capacity remaining -uint16 over_discharge_count # [-] Number of battery overdischarge -float32 nominal_voltage # [V] Nominal voltage of the battery pack - -float32 internal_resistance_estimate # [Ohm] Internal resistance per cell estimate -float32 ocv_estimate # [V] Open circuit voltage estimate -float32 ocv_estimate_filtered # [V] Filtered open circuit voltage estimate -float32 volt_based_soc_estimate # [-] [@range 0, 1] Normalized volt based state of charge estimate -float32 voltage_prediction # [V] Predicted voltage -float32 prediction_error # [V] Prediction error -float32 estimation_covariance_norm # [-] Norm of the covariance matrix +float32 internal_resistance_estimate # [Ohm] Internal resistance per cell estimate +float32 ocv_estimate # [V] Open circuit voltage estimate +float32 ocv_estimate_filtered # [V] Filtered open circuit voltage estimate +float32 volt_based_soc_estimate # [-] [@range 0, 1] Normalized volt based state of charge estimate +float32 voltage_prediction # [V] Predicted voltage +float32 prediction_error # [V] Prediction error +float32 estimation_covariance_norm # [-] Norm of the covariance matrix ``` ::: diff --git a/docs/ko/msg_docs/BatteryStatusV0.md b/docs/ko/msg_docs/BatteryStatusV0.md index 569b955594..6859b3c3e3 100644 --- a/docs/ko/msg_docs/BatteryStatusV0.md +++ b/docs/ko/msg_docs/BatteryStatusV0.md @@ -10,7 +10,7 @@ Battery status information for up to 4 battery instances. These are populated from power module and smart battery device drivers, and one battery updated from MAVLink. Battery instance information is also logged and streamed in MAVLink telemetry. -**TOPICS:** battery_statusv0 +**TOPICS:** battery_status_v0 ## Fields @@ -60,52 +60,52 @@ Battery instance information is also logged and streamed in MAVLink telemetry. ### SOURCE {#SOURCE} -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------------------------------- | ------- | ----- | ----------------------------------------------------------------- | -| SOURCE_POWER_MODULE | `uint8` | 0 | Power module (analog ADC or I2C power monitor) | -| SOURCE_EXTERNAL | `uint8` | 1 | External (MAVLink, CAN, or external driver) | -| SOURCE_ESCS | `uint8` | 2 | ESCs (via ESC telemetry) | +| 명칭 | 형식 | Value | 설명 | +| ----------------------------------------------------------------------------------------------- | ------- | ----- | ----------------------------------------------------------------- | +| SOURCE_POWER_MODULE | `uint8` | 0 | Power module (analog ADC or I2C power monitor) | +| SOURCE_EXTERNAL | `uint8` | 1 | External (MAVLink, CAN, or external driver) | +| SOURCE_ESCS | `uint8` | 2 | ESCs (via ESC telemetry) | ### WARNING {#WARNING} -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------ | ------- | ----- | -------------------------------------------- | -| WARNING_NONE | `uint8` | 0 | No battery low voltage warning active | -| WARNING_LOW | `uint8` | 1 | Low voltage warning | -| WARNING_CRITICAL | `uint8` | 2 | Critical voltage, return / abort immediately | -| WARNING_EMERGENCY | `uint8` | 3 | Immediate landing required | -| WARNING_FAILED | `uint8` | 4 | Battery has failed completely | +| 명칭 | 형식 | Value | 설명 | +| ---------------------------------------------------------------------- | ------- | ----- | -------------------------------------------- | +| WARNING_NONE | `uint8` | 0 | No battery low voltage warning active | +| WARNING_LOW | `uint8` | 1 | Low voltage warning | +| WARNING_CRITICAL | `uint8` | 2 | Critical voltage, return / abort immediately | +| WARNING_EMERGENCY | `uint8` | 3 | Immediate landing required | +| WARNING_FAILED | `uint8` | 4 | Battery has failed completely | ### STATE {#STATE} -| 명칭 | 형식 | Value | 설명 | -| -------------------------------------------------------------------- | ------- | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| STATE_UNHEALTHY | `uint8` | 6 | Battery is diagnosed to be defective or an error occurred, usage is discouraged / prohibited. Possible causes (faults) are listed in faults field | -| STATE_CHARGING | `uint8` | 7 | Battery is charging | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------ | ------- | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| STATE_UNHEALTHY | `uint8` | 6 | Battery is diagnosed to be defective or an error occurred, usage is discouraged / prohibited. Possible causes (faults) are listed in faults field | +| STATE_CHARGING | `uint8` | 7 | Battery is charging | ### FAULT {#FAULT} -| 명칭 | 형식 | Value | 설명 | -| ---------------------------------------------------------------------------------------------------------------------- | ------- | ----- | --------------------------------------------------------------------------------------------------------------------------------- | -| FAULT_DEEP_DISCHARGE | `uint8` | 0 | Battery has deep discharged | -| FAULT_SPIKES | `uint8` | 1 | Voltage spikes | -| FAULT_CELL_FAIL | `uint8` | 2 | One or more cells have failed | -| FAULT_OVER_CURRENT | `uint8` | 3 | Over-current | -| FAULT_OVER_TEMPERATURE | `uint8` | 4 | Over-temperature | -| FAULT_UNDER_TEMPERATURE | `uint8` | 5 | Under-temperature fault | -| FAULT_INCOMPATIBLE_VOLTAGE | `uint8` | 6 | Vehicle voltage is not compatible with this battery (batteries on same power rail should have similar voltage) | -| FAULT_INCOMPATIBLE_FIRMWARE | `uint8` | 7 | Battery firmware is not compatible with current autopilot firmware | -| FAULT_INCOMPATIBLE_MODEL | `uint8` | 8 | Battery model is not supported by the system | -| FAULT_HARDWARE_FAILURE | `uint8` | 9 | Hardware problem | -| FAULT_FAILED_TO_ARM | `uint8` | 10 | Battery had a problem while arming | -| FAULT_COUNT | `uint8` | 11 | Counter. Keep this as last element | +| 명칭 | 형식 | Value | 설명 | +| -------------------------------------------------------------------------------------------------------------------- | ------- | ----- | --------------------------------------------------------------------------------------------------------------------------------- | +| FAULT_DEEP_DISCHARGE | `uint8` | 0 | Battery has deep discharged | +| FAULT_SPIKES | `uint8` | 1 | Voltage spikes | +| FAULT_CELL_FAIL | `uint8` | 2 | One or more cells have failed | +| FAULT_OVER_CURRENT | `uint8` | 3 | Over-current | +| FAULT_OVER_TEMPERATURE | `uint8` | 4 | Over-temperature | +| FAULT_UNDER_TEMPERATURE | `uint8` | 5 | Under-temperature fault | +| FAULT_INCOMPATIBLE_VOLTAGE | `uint8` | 6 | Vehicle voltage is not compatible with this battery (batteries on same power rail should have similar voltage) | +| FAULT_INCOMPATIBLE_FIRMWARE | `uint8` | 7 | Battery firmware is not compatible with current autopilot firmware | +| FAULT_INCOMPATIBLE_MODEL | `uint8` | 8 | Battery model is not supported by the system | +| FAULT_HARDWARE_FAILURE | `uint8` | 9 | Hardware problem | +| FAULT_FAILED_TO_ARM | `uint8` | 10 | Battery had a problem while arming | +| FAULT_COUNT | `uint8` | 11 | Counter. Keep this as last element | ## Constants -| 명칭 | 형식 | Value | 설명 | -| -------------------------------------------------------------------- | -------- | ----- | -- | -| MESSAGE_VERSION | `uint32` | 0 | | -| MAX_INSTANCES | `uint8` | 4 | | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------ | -------- | ----- | -- | +| MESSAGE_VERSION | `uint32` | 0 | | +| MAX_INSTANCES | `uint8` | 4 | | ## Source Message diff --git a/docs/ko/msg_docs/ButtonEvent.md b/docs/ko/msg_docs/ButtonEvent.md index 26b8256910..464887c736 100644 --- a/docs/ko/msg_docs/ButtonEvent.md +++ b/docs/ko/msg_docs/ButtonEvent.md @@ -15,9 +15,9 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------------------------- | ------- | ----- | -- | -| ORB_QUEUE_LENGTH | `uint8` | 2 | | +| 명칭 | 형식 | Value | 설명 | +| ----------------------------------------------------------------------------------------- | ------- | ----- | -- | +| ORB_QUEUE_LENGTH | `uint8` | 2 | | ## Source Message diff --git a/docs/ko/msg_docs/CameraTrigger.md b/docs/ko/msg_docs/CameraTrigger.md index c59b50d542..07ae75942e 100644 --- a/docs/ko/msg_docs/CameraTrigger.md +++ b/docs/ko/msg_docs/CameraTrigger.md @@ -17,9 +17,9 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------------------------- | -------- | ----- | -- | -| ORB_QUEUE_LENGTH | `uint32` | 2 | | +| 명칭 | 형식 | Value | 설명 | +| ----------------------------------------------------------------------------------------- | -------- | ----- | -- | +| ORB_QUEUE_LENGTH | `uint32` | 2 | | ## Source Message diff --git a/docs/ko/msg_docs/CanInterfaceStatus.md b/docs/ko/msg_docs/CanInterfaceStatus.md index e00ec7c3ae..f777bc55e6 100644 --- a/docs/ko/msg_docs/CanInterfaceStatus.md +++ b/docs/ko/msg_docs/CanInterfaceStatus.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # CanInterfaceStatus (UORB message) -**TOPICS:** can_interfacestatus +**TOPICS:** can_interface_status ## Fields diff --git a/docs/ko/msg_docs/CellularStatus.md b/docs/ko/msg_docs/CellularStatus.md index d5a547f472..fb0c17c251 100644 --- a/docs/ko/msg_docs/CellularStatus.md +++ b/docs/ko/msg_docs/CellularStatus.md @@ -27,40 +27,40 @@ This is currently used only for logging cell status from MAVLink. ### STATUS_FLAG {#STATUS_FLAG} -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------------------------------------------- | -------- | ----- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| STATUS_FLAG_UNKNOWN | `uint16` | 1 | State unknown or not reportable | -| STATUS_FLAG_FAILED | `uint16` | 2 | Modem is unusable | -| STATUS_FLAG_INITIALIZING | `uint16` | 4 | Modem is being initialized | -| STATUS_FLAG_LOCKED | `uint16` | 8 | Modem is locked | -| STATUS_FLAG_DISABLED | `uint16` | 16 | Modem is not enabled and is powered down | -| STATUS_FLAG_DISABLING | `uint16` | 32 | Modem is currently transitioning to the STATUS_FLAG_DISABLED state | -| STATUS_FLAG_ENABLING | `uint16` | 64 | Modem is currently transitioning to the STATUS_FLAG_ENABLED state | -| STATUS_FLAG_ENABLED | `uint16` | 128 | Modem is enabled and powered on but not registered with a network provider and not available for data connections | -| STATUS_FLAG_SEARCHING | `uint16` | 256 | Modem is searching for a network provider to register | -| STATUS_FLAG_REGISTERED | `uint16` | 512 | Modem is registered with a network provider, and data connections and messaging may be available for use | -| STATUS_FLAG_DISCONNECTING | `uint16` | 1024 | Modem is disconnecting and deactivating the last active packet data bearer. This state will not be entered if more than one packet data bearer is active and one of the active bearers is deactivated | -| STATUS_FLAG_CONNECTING | `uint16` | 2048 | Modem is activating and connecting the first packet data bearer. Subsequent bearer activations when another bearer is already active do not cause this state to be entered | -| STATUS_FLAG_CONNECTED | `uint16` | 4096 | One or more packet data bearers is active and connected | +| 명칭 | 형식 | Value | 설명 | +| ----------------------------------------------------------------------------------------------------------- | -------- | ----- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| STATUS_FLAG_UNKNOWN | `uint16` | 1 | State unknown or not reportable | +| STATUS_FLAG_FAILED | `uint16` | 2 | Modem is unusable | +| STATUS_FLAG_INITIALIZING | `uint16` | 4 | Modem is being initialized | +| STATUS_FLAG_LOCKED | `uint16` | 8 | Modem is locked | +| STATUS_FLAG_DISABLED | `uint16` | 16 | Modem is not enabled and is powered down | +| STATUS_FLAG_DISABLING | `uint16` | 32 | Modem is currently transitioning to the STATUS_FLAG_DISABLED state | +| STATUS_FLAG_ENABLING | `uint16` | 64 | Modem is currently transitioning to the STATUS_FLAG_ENABLED state | +| STATUS_FLAG_ENABLED | `uint16` | 128 | Modem is enabled and powered on but not registered with a network provider and not available for data connections | +| STATUS_FLAG_SEARCHING | `uint16` | 256 | Modem is searching for a network provider to register | +| STATUS_FLAG_REGISTERED | `uint16` | 512 | Modem is registered with a network provider, and data connections and messaging may be available for use | +| STATUS_FLAG_DISCONNECTING | `uint16` | 1024 | Modem is disconnecting and deactivating the last active packet data bearer. This state will not be entered if more than one packet data bearer is active and one of the active bearers is deactivated | +| STATUS_FLAG_CONNECTING | `uint16` | 2048 | Modem is activating and connecting the first packet data bearer. Subsequent bearer activations when another bearer is already active do not cause this state to be entered | +| STATUS_FLAG_CONNECTED | `uint16` | 4096 | One or more packet data bearers is active and connected | ### FAILURE_REASON {#FAILURE_REASON} -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------------------------------------------------------------------ | ------- | ----- | ----------------------------------------------- | -| FAILURE_REASON_NONE | `uint8` | 0 | No error | -| FAILURE_REASON_UNKNOWN | `uint8` | 1 | Error state is unknown | -| FAILURE_REASON_SIM_MISSING | `uint8` | 2 | SIM is required for the modem but missing | -| FAILURE_REASON_SIM_ERROR | `uint8` | 3 | SIM is available, but not usable for connection | +| 명칭 | 형식 | Value | 설명 | +| ---------------------------------------------------------------------------------------------------------------------------------- | ------- | ----- | ----------------------------------------------- | +| FAILURE_REASON_NONE | `uint8` | 0 | No error | +| FAILURE_REASON_UNKNOWN | `uint8` | 1 | Error state is unknown | +| FAILURE_REASON_SIM_MISSING | `uint8` | 2 | SIM is required for the modem but missing | +| FAILURE_REASON_SIM_ERROR | `uint8` | 3 | SIM is available, but not usable for connection | ### CELLULAR_NETWORK_RADIO_TYPE {#CELLULAR_NETWORK_RADIO_TYPE} -| 명칭 | 형식 | Value | 설명 | -| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | ----- | ----- | -| CELLULAR_NETWORK_RADIO_TYPE_NONE | `uint8` | 0 | None | -| CELLULAR_NETWORK_RADIO_TYPE_GSM | `uint8` | 1 | GSM | -| CELLULAR_NETWORK_RADIO_TYPE_CDMA | `uint8` | 2 | CDMA | -| CELLULAR_NETWORK_RADIO_TYPE_WCDMA | `uint8` | 3 | WCDMA | -| CELLULAR_NETWORK_RADIO_TYPE_LTE | `uint8` | 4 | LTE | +| 명칭 | 형식 | Value | 설명 | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | ----- | ----- | +| CELLULAR_NETWORK_RADIO_TYPE_NONE | `uint8` | 0 | None | +| CELLULAR_NETWORK_RADIO_TYPE_GSM | `uint8` | 1 | GSM | +| CELLULAR_NETWORK_RADIO_TYPE_CDMA | `uint8` | 2 | CDMA | +| CELLULAR_NETWORK_RADIO_TYPE_WCDMA | `uint8` | 3 | WCDMA | +| CELLULAR_NETWORK_RADIO_TYPE_LTE | `uint8` | 4 | LTE | ## Source Message diff --git a/docs/ko/msg_docs/ConfigOverrides.md b/docs/ko/msg_docs/ConfigOverrides.md index cb1c45cbee..750c091ab6 100644 --- a/docs/ko/msg_docs/ConfigOverrides.md +++ b/docs/ko/msg_docs/ConfigOverrides.md @@ -22,12 +22,12 @@ Configurable overrides by (external) modes or mode executors. ## Constants -| 명칭 | 형식 | Value | 설명 | -| ---------------------------------------------------------------------------------------------------------------------------------- | -------- | ----- | -- | -| MESSAGE_VERSION | `uint32` | 1 | | -| SOURCE_TYPE_MODE | `int8` | 0 | | -| SOURCE_TYPE_MODE_EXECUTOR | `int8` | 1 | | -| ORB_QUEUE_LENGTH | `uint8` | 4 | | +| 명칭 | 형식 | Value | 설명 | +| -------------------------------------------------------------------------------------------------------------------------------- | -------- | ----- | -- | +| MESSAGE_VERSION | `uint32` | 1 | | +| SOURCE_TYPE_MODE | `int8` | 0 | | +| SOURCE_TYPE_MODE_EXECUTOR | `int8` | 1 | | +| ORB_QUEUE_LENGTH | `uint8` | 4 | | ## Source Message diff --git a/docs/ko/msg_docs/ConfigOverridesV0.md b/docs/ko/msg_docs/ConfigOverridesV0.md index a7dcaf2a98..bb4b184712 100644 --- a/docs/ko/msg_docs/ConfigOverridesV0.md +++ b/docs/ko/msg_docs/ConfigOverridesV0.md @@ -21,12 +21,12 @@ Configurable overrides by (external) modes or mode executors. ## Constants -| 명칭 | 형식 | Value | 설명 | -| ---------------------------------------------------------------------------------------------------------------------------------- | -------- | ----- | -- | -| MESSAGE_VERSION | `uint32` | 0 | | -| SOURCE_TYPE_MODE | `int8` | 0 | | -| SOURCE_TYPE_MODE_EXECUTOR | `int8` | 1 | | -| ORB_QUEUE_LENGTH | `uint8` | 4 | | +| 명칭 | 형식 | Value | 설명 | +| -------------------------------------------------------------------------------------------------------------------------------- | -------- | ----- | -- | +| MESSAGE_VERSION | `uint32` | 0 | | +| SOURCE_TYPE_MODE | `int8` | 0 | | +| SOURCE_TYPE_MODE_EXECUTOR | `int8` | 1 | | +| ORB_QUEUE_LENGTH | `uint8` | 4 | | ## Source Message diff --git a/docs/ko/msg_docs/ControlAllocatorStatus.md b/docs/ko/msg_docs/ControlAllocatorStatus.md index 4239807f5a..42632fd7f6 100644 --- a/docs/ko/msg_docs/ControlAllocatorStatus.md +++ b/docs/ko/msg_docs/ControlAllocatorStatus.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # ControlAllocatorStatus (UORB message) -**TOPICS:** control_allocatorstatus +**TOPICS:** control_allocator_status ## Fields @@ -21,13 +21,13 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------------------------------------------------------------------------ | ------ | ----- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | -| ACTUATOR_SATURATION_OK | `int8` | 0 | The actuator is not saturated | -| ACTUATOR_SATURATION_UPPER_DYN | `int8` | 1 | The actuator is saturated (with a value <= the desired value) because it cannot increase its value faster | -| ACTUATOR_SATURATION_UPPER | `int8` | 2 | The actuator is saturated (with a value <= the desired value) because it has reached its maximum value | -| ACTUATOR_SATURATION_LOWER_DYN | `int8` | -1 | The actuator is saturated (with a value >= the desired value) because it cannot decrease its value faster | -| ACTUATOR_SATURATION_LOWER | `int8` | -2 | The actuator is saturated (with a value >= the desired value) because it has reached its minimum value | +| 명칭 | 형식 | Value | 설명 | +| ---------------------------------------------------------------------------------------------------------------------------------------- | ------ | ----- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | +| ACTUATOR_SATURATION_OK | `int8` | 0 | The actuator is not saturated | +| ACTUATOR_SATURATION_UPPER_DYN | `int8` | 1 | The actuator is saturated (with a value <= the desired value) because it cannot increase its value faster | +| ACTUATOR_SATURATION_UPPER | `int8` | 2 | The actuator is saturated (with a value <= the desired value) because it has reached its maximum value | +| ACTUATOR_SATURATION_LOWER_DYN | `int8` | -1 | The actuator is saturated (with a value >= the desired value) because it cannot decrease its value faster | +| ACTUATOR_SATURATION_LOWER | `int8` | -2 | The actuator is saturated (with a value >= the desired value) because it has reached its minimum value | ## Source Message diff --git a/docs/ko/msg_docs/DatamanResponse.md b/docs/ko/msg_docs/DatamanResponse.md index fd41bf5a34..b404859c45 100644 --- a/docs/ko/msg_docs/DatamanResponse.md +++ b/docs/ko/msg_docs/DatamanResponse.md @@ -20,14 +20,14 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| -------------------------------------------------------------------------------------------------------------------------------------- | ------- | ----- | -- | -| STATUS_SUCCESS | `uint8` | 0 | | -| STATUS_FAILURE_ID_ERR | `uint8` | 1 | | -| STATUS_FAILURE_NO_DATA | `uint8` | 2 | | -| STATUS_FAILURE_READ_FAILED | `uint8` | 3 | | -| STATUS_FAILURE_WRITE_FAILED | `uint8` | 4 | | -| STATUS_FAILURE_CLEAR_FAILED | `uint8` | 5 | | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------------------------------------------------------------------------ | ------- | ----- | -- | +| STATUS_SUCCESS | `uint8` | 0 | | +| STATUS_FAILURE_ID_ERR | `uint8` | 1 | | +| STATUS_FAILURE_NO_DATA | `uint8` | 2 | | +| STATUS_FAILURE_READ_FAILED | `uint8` | 3 | | +| STATUS_FAILURE_WRITE_FAILED | `uint8` | 4 | | +| STATUS_FAILURE_CLEAR_FAILED | `uint8` | 5 | | ## Source Message diff --git a/docs/ko/msg_docs/DebugArray.md b/docs/ko/msg_docs/DebugArray.md index 80918ae97f..67b715fa2a 100644 --- a/docs/ko/msg_docs/DebugArray.md +++ b/docs/ko/msg_docs/DebugArray.md @@ -17,9 +17,9 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| ---------------------------------------------------------- | ------- | ----- | -- | -| ARRAY_SIZE | `uint8` | 58 | | +| 명칭 | 형식 | Value | 설명 | +| -------------------------------------------------------- | ------- | ----- | -- | +| ARRAY_SIZE | `uint8` | 58 | | ## Source Message diff --git a/docs/ko/msg_docs/DebugKeyValue.md b/docs/ko/msg_docs/DebugKeyValue.md index 1ed3816e57..3734a5f61b 100644 --- a/docs/ko/msg_docs/DebugKeyValue.md +++ b/docs/ko/msg_docs/DebugKeyValue.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # DebugKeyValue (UORB message) -**TOPICS:** debug_keyvalue +**TOPICS:** debug_key_value ## Fields diff --git a/docs/ko/msg_docs/DeviceInformation.md b/docs/ko/msg_docs/DeviceInformation.md index af01a4f244..5183964ddb 100644 --- a/docs/ko/msg_docs/DeviceInformation.md +++ b/docs/ko/msg_docs/DeviceInformation.md @@ -17,8 +17,7 @@ as well as tracking of the used firmware versions on the devices. | ------------------------------------- | ---------- | ---------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | | timestamp | `uint64` | | | time since system start (microseconds) | | device_type | `uint8` | | [DEVICE_TYPE](#DEVICE_TYPE) | Type of the device. Matches MAVLink DEVICE_TYPE enum | -| vendor_name | `char[32]` | | | Name of the device vendor | -| model_name | `char[32]` | | | Name of the device model | +| name | `char[80]` | | | Name of device e.g. DroneCAN node name | | `uint32` | | | Unique device ID for the sensor. Does not change between power cycles. (Invalid: 0 if not available) | | | firmware_version | `char[24]` | | | Firmware version. (Invalid: empty if not available) | | hardware_version | `char[24]` | | | Hardware version. (Invalid: empty if not available) | @@ -28,24 +27,24 @@ as well as tracking of the used firmware versions on the devices. ### DEVICE_TYPE {#DEVICE_TYPE} -| 명칭 | 형식 | Value | 설명 | -| -------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | ----- | ---------------------- | -| DEVICE_TYPE_GENERIC | `uint8` | 0 | Generic/unknown sensor | -| DEVICE_TYPE_AIRSPEED | `uint8` | 1 | 풍속 센서 | -| DEVICE_TYPE_ESC | `uint8` | 2 | ESC | -| DEVICE_TYPE_SERVO | `uint8` | 3 | Servo | -| DEVICE_TYPE_GPS | `uint8` | 4 | GPS | -| DEVICE_TYPE_MAGNETOMETER | `uint8` | 5 | 자기 센서 | -| DEVICE_TYPE_PARACHUTE | `uint8` | 6 | 낙하산 | -| DEVICE_TYPE_RANGEFINDER | `uint8` | 7 | Rangefinder | -| DEVICE_TYPE_WINCH | `uint8` | 8 | Winch | -| DEVICE_TYPE_BAROMETER | `uint8` | 9 | 기압계 | -| DEVICE_TYPE_OPTICAL_FLOW | `uint8` | 10 | Optical flow | -| DEVICE_TYPE_ACCELEROMETER | `uint8` | 11 | Accelerometer | -| DEVICE_TYPE_GYROSCOPE | `uint8` | 12 | Gyroscope | -| DEVICE_TYPE_DIFFERENTIAL_PRESSURE | `uint8` | 13 | Differential pressure | -| DEVICE_TYPE_BATTERY | `uint8` | 14 | Battery | -| DEVICE_TYPE_HYGROMETER | `uint8` | 15 | Hygrometer | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------------------------------------------------------------------------------------ | ------- | ----- | ---------------------- | +| DEVICE_TYPE_GENERIC | `uint8` | 0 | Generic/unknown sensor | +| DEVICE_TYPE_AIRSPEED | `uint8` | 1 | 풍속 센서 | +| DEVICE_TYPE_ESC | `uint8` | 2 | ESC | +| DEVICE_TYPE_SERVO | `uint8` | 3 | Servo | +| DEVICE_TYPE_GPS | `uint8` | 4 | GPS | +| DEVICE_TYPE_MAGNETOMETER | `uint8` | 5 | 자기 센서 | +| DEVICE_TYPE_PARACHUTE | `uint8` | 6 | 낙하산 | +| DEVICE_TYPE_RANGEFINDER | `uint8` | 7 | Rangefinder | +| DEVICE_TYPE_WINCH | `uint8` | 8 | Winch | +| DEVICE_TYPE_BAROMETER | `uint8` | 9 | 기압계 | +| DEVICE_TYPE_OPTICAL_FLOW | `uint8` | 10 | Optical flow | +| DEVICE_TYPE_ACCELEROMETER | `uint8` | 11 | Accelerometer | +| DEVICE_TYPE_GYROSCOPE | `uint8` | 12 | Gyroscope | +| DEVICE_TYPE_DIFFERENTIAL_PRESSURE | `uint8` | 13 | Differential pressure | +| DEVICE_TYPE_BATTERY | `uint8` | 14 | Battery | +| DEVICE_TYPE_HYGROMETER | `uint8` | 15 | Hygrometer | ## Source Message @@ -63,7 +62,6 @@ Click here to see original file uint64 timestamp # time since system start (microseconds) uint8 device_type # [@enum DEVICE_TYPE] Type of the device. Matches MAVLink DEVICE_TYPE enum - uint8 DEVICE_TYPE_GENERIC = 0 # Generic/unknown sensor uint8 DEVICE_TYPE_AIRSPEED = 1 # Airspeed sensor uint8 DEVICE_TYPE_ESC = 2 # ESC @@ -81,8 +79,7 @@ uint8 DEVICE_TYPE_DIFFERENTIAL_PRESSURE = 13 # Differential pressure uint8 DEVICE_TYPE_BATTERY = 14 # Battery uint8 DEVICE_TYPE_HYGROMETER = 15 # Hygrometer -char[32] vendor_name # Name of the device vendor -char[32] model_name # Name of the device model +char[80] name # Name of device e.g. DroneCAN node name uint32 device_id # [-] [@invalid 0 if not available] Unique device ID for the sensor. Does not change between power cycles. char[24] firmware_version # [-] [@invalid empty if not available] Firmware version. diff --git a/docs/ko/msg_docs/DistanceSensor.md b/docs/ko/msg_docs/DistanceSensor.md index d66f400c91..16747401fc 100644 --- a/docs/ko/msg_docs/DistanceSensor.md +++ b/docs/ko/msg_docs/DistanceSensor.md @@ -28,30 +28,30 @@ DISTANCE_SENSOR message data. ## Constants -| 명칭 | 형식 | Value | 설명 | -| -------------------------------------------------------------------------------------------------------------------------------------------- | ------- | ----- | ----------------------------------------------------------------------------------------------------------------- | -| MAV_DISTANCE_SENSOR_LASER | `uint8` | 0 | | -| MAV_DISTANCE_SENSOR_ULTRASOUND | `uint8` | 1 | | -| MAV_DISTANCE_SENSOR_INFRARED | `uint8` | 2 | | -| MAV_DISTANCE_SENSOR_RADAR | `uint8` | 3 | | -| ROTATION_YAW_0 | `uint8` | 0 | MAV_SENSOR_ROTATION_NONE | -| ROTATION_YAW_45 | `uint8` | 1 | MAV_SENSOR_ROTATION_YAW_45 | -| ROTATION_YAW_90 | `uint8` | 2 | MAV_SENSOR_ROTATION_YAW_90 | -| ROTATION_YAW_135 | `uint8` | 3 | MAV_SENSOR_ROTATION_YAW_135 | -| ROTATION_YAW_180 | `uint8` | 4 | MAV_SENSOR_ROTATION_YAW_180 | -| ROTATION_YAW_225 | `uint8` | 5 | MAV_SENSOR_ROTATION_YAW_225 | -| ROTATION_YAW_270 | `uint8` | 6 | MAV_SENSOR_ROTATION_YAW_270 | -| ROTATION_YAW_315 | `uint8` | 7 | MAV_SENSOR_ROTATION_YAW_315 | -| ROTATION_FORWARD_FACING | `uint8` | 0 | MAV_SENSOR_ROTATION_NONE | -| ROTATION_RIGHT_FACING | `uint8` | 2 | MAV_SENSOR_ROTATION_YAW_90 | -| ROTATION_BACKWARD_FACING | `uint8` | 4 | MAV_SENSOR_ROTATION_YAW_180 | -| ROTATION_LEFT_FACING | `uint8` | 6 | MAV_SENSOR_ROTATION_YAW_270 | -| ROTATION_UPWARD_FACING | `uint8` | 24 | MAV_SENSOR_ROTATION_PITCH_90 | -| ROTATION_DOWNWARD_FACING | `uint8` | 25 | MAV_SENSOR_ROTATION_PITCH_270 | -| ROTATION_CUSTOM | `uint8` | 100 | MAV_SENSOR_ROTATION_CUSTOM | -| MODE_UNKNOWN | `uint8` | 0 | | -| MODE_ENABLED | `uint8` | 1 | | -| MODE_DISABLED | `uint8` | 2 | | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------------------------------------------------------------------------------ | ------- | ----- | ----------------------------------------------------------------------------------------------------------------- | +| MAV_DISTANCE_SENSOR_LASER | `uint8` | 0 | | +| MAV_DISTANCE_SENSOR_ULTRASOUND | `uint8` | 1 | | +| MAV_DISTANCE_SENSOR_INFRARED | `uint8` | 2 | | +| MAV_DISTANCE_SENSOR_RADAR | `uint8` | 3 | | +| ROTATION_YAW_0 | `uint8` | 0 | MAV_SENSOR_ROTATION_NONE | +| ROTATION_YAW_45 | `uint8` | 1 | MAV_SENSOR_ROTATION_YAW_45 | +| ROTATION_YAW_90 | `uint8` | 2 | MAV_SENSOR_ROTATION_YAW_90 | +| ROTATION_YAW_135 | `uint8` | 3 | MAV_SENSOR_ROTATION_YAW_135 | +| ROTATION_YAW_180 | `uint8` | 4 | MAV_SENSOR_ROTATION_YAW_180 | +| ROTATION_YAW_225 | `uint8` | 5 | MAV_SENSOR_ROTATION_YAW_225 | +| ROTATION_YAW_270 | `uint8` | 6 | MAV_SENSOR_ROTATION_YAW_270 | +| ROTATION_YAW_315 | `uint8` | 7 | MAV_SENSOR_ROTATION_YAW_315 | +| ROTATION_FORWARD_FACING | `uint8` | 0 | MAV_SENSOR_ROTATION_NONE | +| ROTATION_RIGHT_FACING | `uint8` | 2 | MAV_SENSOR_ROTATION_YAW_90 | +| ROTATION_BACKWARD_FACING | `uint8` | 4 | MAV_SENSOR_ROTATION_YAW_180 | +| ROTATION_LEFT_FACING | `uint8` | 6 | MAV_SENSOR_ROTATION_YAW_270 | +| ROTATION_UPWARD_FACING | `uint8` | 24 | MAV_SENSOR_ROTATION_PITCH_90 | +| ROTATION_DOWNWARD_FACING | `uint8` | 25 | MAV_SENSOR_ROTATION_PITCH_270 | +| ROTATION_CUSTOM | `uint8` | 100 | MAV_SENSOR_ROTATION_CUSTOM | +| MODE_UNKNOWN | `uint8` | 0 | | +| MODE_ENABLED | `uint8` | 1 | | +| MODE_DISABLED | `uint8` | 2 | | ## Source Message diff --git a/docs/ko/msg_docs/DistanceSensorModeChangeRequest.md b/docs/ko/msg_docs/DistanceSensorModeChangeRequest.md index 8c222c5d97..50fcfdc283 100644 --- a/docs/ko/msg_docs/DistanceSensorModeChangeRequest.md +++ b/docs/ko/msg_docs/DistanceSensorModeChangeRequest.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # DistanceSensorModeChangeRequest (UORB message) -**TOPICS:** distance_sensormode_changerequest +**TOPICS:** distance_sensor_mode_change_request ## Fields @@ -15,10 +15,10 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------ | ------- | ----- | -- | -| REQUEST_OFF | `uint8` | 0 | | -| REQUEST_ON | `uint8` | 1 | | +| 명칭 | 형식 | Value | 설명 | +| ---------------------------------------------------------- | ------- | ----- | -- | +| REQUEST_OFF | `uint8` | 0 | | +| REQUEST_ON | `uint8` | 1 | | ## Source Message diff --git a/docs/ko/msg_docs/DronecanNodeStatus.md b/docs/ko/msg_docs/DronecanNodeStatus.md index 7a4cbd8f7a..1243556fd6 100644 --- a/docs/ko/msg_docs/DronecanNodeStatus.md +++ b/docs/ko/msg_docs/DronecanNodeStatus.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # DronecanNodeStatus (UORB message) -**TOPICS:** dronecan_nodestatus +**TOPICS:** dronecan_node_status ## Fields @@ -20,17 +20,17 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| --------------------------------------------------------------------------------------------------- | ------- | ----- | ----------------------------------------------------------------------------------------------- | -| HEALTH_OK | `uint8` | 0 | The node is functioning properly. | -| HEALTH_WARNING | `uint8` | 1 | A critical parameter went out of range or the node encountered a minor failure. | -| HEALTH_ERROR | `uint8` | 2 | The node encountered a major failure. | -| HEALTH_CRITICAL | `uint8` | 3 | The node suffered a fatal malfunction. | -| MODE_OPERATIONAL | `uint8` | 0 | Normal operating mode. | -| MODE_INITIALIZATION | `uint8` | 1 | Initialization is in progress; this mode is entered immediately after startup. | -| MODE_MAINTENANCE | `uint8` | 2 | 예: calibration, the bootloader is running, etc. | -| MODE_SOFTWARE_UPDATE | `uint8` | 3 | New software/firmware is being loaded. | -| MODE_OFFLINE | `uint8` | 7 | The node is no longer available. | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------------------------------------- | ------- | ----- | ----------------------------------------------------------------------------------------------- | +| HEALTH_OK | `uint8` | 0 | The node is functioning properly. | +| HEALTH_WARNING | `uint8` | 1 | A critical parameter went out of range or the node encountered a minor failure. | +| HEALTH_ERROR | `uint8` | 2 | The node encountered a major failure. | +| HEALTH_CRITICAL | `uint8` | 3 | The node suffered a fatal malfunction. | +| MODE_OPERATIONAL | `uint8` | 0 | Normal operating mode. | +| MODE_INITIALIZATION | `uint8` | 1 | Initialization is in progress; this mode is entered immediately after startup. | +| MODE_MAINTENANCE | `uint8` | 2 | 예: calibration, the bootloader is running, etc. | +| MODE_SOFTWARE_UPDATE | `uint8` | 3 | New software/firmware is being loaded. | +| MODE_OFFLINE | `uint8` | 7 | The node is no longer available. | ## Source Message diff --git a/docs/ko/msg_docs/Ekf2Timestamps.md b/docs/ko/msg_docs/Ekf2Timestamps.md index 844d062050..86c1d98964 100644 --- a/docs/ko/msg_docs/Ekf2Timestamps.md +++ b/docs/ko/msg_docs/Ekf2Timestamps.md @@ -23,9 +23,9 @@ this message contains the (relative) timestamps of the sensor inputs used by EKF ## Constants -| 명칭 | 형식 | Value | 설명 | -| --------------------------------------------------------------------------------------------------------------- | ------- | ----- | ------------------------------------------------------------- | -| RELATIVE_TIMESTAMP_INVALID | `int16` | 32767 | (0x7fff) If one of the relative timestamps | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------------------------------------------------- | ------- | ----- | ------------------------------------------------------------- | +| RELATIVE_TIMESTAMP_INVALID | `int16` | 32767 | (0x7fff) If one of the relative timestamps | ## Source Message diff --git a/docs/ko/msg_docs/EscEepromRead.md b/docs/ko/msg_docs/EscEepromRead.md new file mode 100644 index 0000000000..5fc773d4c3 --- /dev/null +++ b/docs/ko/msg_docs/EscEepromRead.md @@ -0,0 +1,42 @@ +--- +pageClass: is-wide-page +--- + +# EscEepromRead (UORB message) + +**TOPICS:** esc_eeprom_read + +## Fields + +| 명칭 | 형식 | Unit [Frame] | Range/Enum | 설명 | +| --------- | ----------- | ---------------------------------------------------------------- | ---------- | -------------------------------------------------------------------------------------------- | +| timestamp | `uint64` | us | | Time since system start | +| firmware | `uint8` | | | ESC firmware type (see ESC_FIRMWARE enum in MAVLink) | +| index | `uint8` | | | Index of the ESC (0 = ESC1, 1 = ESC2, etc.) | +| length | `uint16` | | | Length of valid data | +| data | `uint8[48]` | | | Raw ESC EEPROM data | + +## Constants + +| 명칭 | 형식 | Value | 설명 | +| ----------------------------------------------------------------------------------------- | ------- | ----- | -------------------------------- | +| ORB_QUEUE_LENGTH | `uint8` | 8 | To support 8 queued up responses | + +## Source Message + +[Source file (GitHub)](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EscEepromRead.msg) + +:::details +Click here to see original file + +```c +uint64 timestamp # [us] Time since system start +uint8 firmware # [-] ESC firmware type (see ESC_FIRMWARE enum in MAVLink) +uint8 index # [-] Index of the ESC (0 = ESC1, 1 = ESC2, etc.) +uint16 length # [-] Length of valid data +uint8[48] data # [-] Raw ESC EEPROM data + +uint8 ORB_QUEUE_LENGTH = 8 # To support 8 queued up responses +``` + +::: diff --git a/docs/ko/msg_docs/EscEepromWrite.md b/docs/ko/msg_docs/EscEepromWrite.md new file mode 100644 index 0000000000..ada9774e17 --- /dev/null +++ b/docs/ko/msg_docs/EscEepromWrite.md @@ -0,0 +1,44 @@ +--- +pageClass: is-wide-page +--- + +# EscEepromWrite (UORB message) + +**TOPICS:** esc_eeprom_write + +## Fields + +| 명칭 | 형식 | Unit [Frame] | Range/Enum | 설명 | +| ------------------------------- | ----------- | ---------------------------------------------------------------- | ---------- | ----------------------------------------------------------------------------------------------------- | +| timestamp | `uint64` | us | | Time since system start | +| firmware | `uint8` | | | ESC firmware type (see ESC_FIRMWARE enum in MAVLink) | +| index | `uint8` | | | Index of the ESC (0 = ESC1, 1 = ESC2, etc, 255 = All) | +| length | `uint16` | | | Length of valid data | +| data | `uint8[48]` | | | Raw ESC EEPROM data | +| write_mask | `uint32[2]` | | | Bitmask indicating which bytes in the data array should be written (max 48 values) | + +## Constants + +| 명칭 | 형식 | Value | 설명 | +| ----------------------------------------------------------------------------------------- | ------- | ----- | ------------------------------- | +| ORB_QUEUE_LENGTH | `uint8` | 8 | To support 8 queued up requests | + +## Source Message + +[Source file (GitHub)](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EscEepromWrite.msg) + +:::details +Click here to see original file + +```c +uint64 timestamp # [us] Time since system start +uint8 firmware # [-] ESC firmware type (see ESC_FIRMWARE enum in MAVLink) +uint8 index # [-] Index of the ESC (0 = ESC1, 1 = ESC2, etc, 255 = All) +uint16 length # [-] Length of valid data +uint8[48] data # [-] Raw ESC EEPROM data +uint32[2] write_mask # [-] Bitmask indicating which bytes in the data array should be written (max 48 values) + +uint8 ORB_QUEUE_LENGTH = 8 # To support 8 queued up requests +``` + +::: diff --git a/docs/ko/msg_docs/EscReport.md b/docs/ko/msg_docs/EscReport.md index 9ad39f92cd..1af1ff1fe7 100644 --- a/docs/ko/msg_docs/EscReport.md +++ b/docs/ko/msg_docs/EscReport.md @@ -8,48 +8,44 @@ pageClass: is-wide-page ## Fields -| 명칭 | 형식 | Unit [Frame] | Range/Enum | 설명 | -| -------------------------------------- | --------- | ---------------------------------------------------------------- | ---------- | -------------------------------------------------------------------------------------------------------------------- | -| timestamp | `uint64` | | | time since system start (microseconds) | -| esc_errorcount | `uint32` | | | Number of reported errors by ESC - if supported | -| esc_rpm | `int32` | | | Motor RPM, negative for reverse rotation [RPM] - if supported | -| esc_voltage | `float32` | | | Voltage measured from current ESC [V] - if supported | -| esc_current | `float32` | | | Current measured from current ESC [A] - if supported | -| esc_temperature | `float32` | | | Temperature measured from current ESC [degC] - if supported | -| esc_address | `uint8` | | | Address of current ESC (in most cases 1-8 / must be set by driver) | -| esc_cmdcount | `uint8` | | | Counter of number of commands | -| esc_state | `uint8` | | | State of ESC - depend on Vendor | -| actuator_function | `uint8` | | | actuator output function (one of Motor1...MotorN) | -| failures | `uint16` | | | Bitmask to indicate the internal ESC faults | -| esc_power | `int8` | | | Applied power 0-100 in % (negative values reserved) | +| 명칭 | 형식 | Unit [Frame] | Range/Enum | 설명 | +| -------------------------------------- | --------- | ---------------------------------------------------------------- | ----------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | +| timestamp | `uint64` | us | | Time since system start | +| esc_errorcount | `uint32` | | | Number of reported errors by ESC - if supported | +| esc_rpm | `int32` | rpm | | Motor RPM, negative for reverse rotation - if supported | +| esc_voltage | `float32` | V | | Voltage measured from current ESC - if supported | +| esc_current | `float32` | A | | Current measured from current ESC - if supported | +| esc_temperature | `float32` | degC | | Temperature measured from current ESC - if supported | +| motor_temperature | `int16` | degC | | Temperature measured from current motor - if supported | +| esc_state | `uint8` | | | State of ESC - depend on Vendor | +| actuator_function | `uint8` | | | Actuator output function (one of Motor1...MotorN) | +| failures | `uint16` | | [FAILURE](#FAILURE) | Bitmask to indicate the internal ESC faults | +| esc_power | `int8` | % | [0 : 100] | Applied power (negative values reserved) | + +## Enums + +### FAILURE {#FAILURE} + +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------------------------------------------------------------------------------ | ------- | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| FAILURE_OVER_CURRENT | `uint8` | 0 | (1 << 0) | +| FAILURE_OVER_VOLTAGE | `uint8` | 1 | (1 << 1) | +| FAILURE_MOTOR_OVER_TEMPERATURE | `uint8` | 2 | (1 << 2) | +| FAILURE_OVER_RPM | `uint8` | 3 | (1 << 3) | +| FAILURE_INCONSISTENT_CMD | `uint8` | 4 | (1 << 4) Set if ESC received an inconsistent command (i.e out of boundaries) | +| FAILURE_MOTOR_STUCK | `uint8` | 5 | (1 << 5) | +| FAILURE_GENERIC | `uint8` | 6 | (1 << 6) | +| FAILURE_MOTOR_WARN_TEMPERATURE | `uint8` | 7 | (1 << 7) | +| FAILURE_WARN_ESC_TEMPERATURE | `uint8` | 8 | (1 << 8) | +| FAILURE_OVER_ESC_TEMPERATURE | `uint8` | 9 | (1 << 9) | ## Constants -| 명칭 | 형식 | Value | 설명 | -| -------------------------------------------------------------------------------------------------------------------------------------------- | ------- | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| ACTUATOR_FUNCTION_MOTOR1 | `uint8` | 101 | | -| ACTUATOR_FUNCTION_MOTOR2 | `uint8` | 102 | | -| ACTUATOR_FUNCTION_MOTOR3 | `uint8` | 103 | | -| ACTUATOR_FUNCTION_MOTOR4 | `uint8` | 104 | | -| ACTUATOR_FUNCTION_MOTOR5 | `uint8` | 105 | | -| ACTUATOR_FUNCTION_MOTOR6 | `uint8` | 106 | | -| ACTUATOR_FUNCTION_MOTOR7 | `uint8` | 107 | | -| ACTUATOR_FUNCTION_MOTOR8 | `uint8` | 108 | | -| ACTUATOR_FUNCTION_MOTOR9 | `uint8` | 109 | | -| ACTUATOR_FUNCTION_MOTOR10 | `uint8` | 110 | | -| ACTUATOR_FUNCTION_MOTOR11 | `uint8` | 111 | | -| ACTUATOR_FUNCTION_MOTOR12 | `uint8` | 112 | | -| FAILURE_OVER_CURRENT | `uint8` | 0 | (1 << 0) | -| FAILURE_OVER_VOLTAGE | `uint8` | 1 | (1 << 1) | -| FAILURE_MOTOR_OVER_TEMPERATURE | `uint8` | 2 | (1 << 2) | -| FAILURE_OVER_RPM | `uint8` | 3 | (1 << 3) | -| FAILURE_INCONSISTENT_CMD | `uint8` | 4 | (1 << 4) Set if ESC received an inconsistent command (i.e out of boundaries) | -| FAILURE_MOTOR_STUCK | `uint8` | 5 | (1 << 5) | -| FAILURE_GENERIC | `uint8` | 6 | (1 << 6) | -| FAILURE_MOTOR_WARN_TEMPERATURE | `uint8` | 7 | (1 << 7) | -| FAILURE_WARN_ESC_TEMPERATURE | `uint8` | 8 | (1 << 8) | -| FAILURE_OVER_ESC_TEMPERATURE | `uint8` | 9 | (1 << 9) | -| ESC_FAILURE_COUNT | `uint8` | 10 | Counter - keep it as last element! | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------------------------------------------------------------------------ | ------- | ----- | ------------------------------------------------------------------------------------------------------------------------ | +| ACTUATOR_FUNCTION_MOTOR1 | `uint8` | 101 | | +| ACTUATOR_FUNCTION_MOTOR_MAX | `uint8` | 112 | output_functions.yaml Motor.start + Motor.count - 1 | +| ESC_FAILURE_COUNT | `uint8` | 10 | Counter - keep it as last element! | ## Source Message @@ -59,46 +55,36 @@ pageClass: is-wide-page Click here to see original file ```c -uint64 timestamp # time since system start (microseconds) -uint32 esc_errorcount # Number of reported errors by ESC - if supported -int32 esc_rpm # Motor RPM, negative for reverse rotation [RPM] - if supported -float32 esc_voltage # Voltage measured from current ESC [V] - if supported -float32 esc_current # Current measured from current ESC [A] - if supported -float32 esc_temperature # Temperature measured from current ESC [degC] - if supported -uint8 esc_address # Address of current ESC (in most cases 1-8 / must be set by driver) -uint8 esc_cmdcount # Counter of number of commands +uint64 timestamp # [us] Time since system start -uint8 esc_state # State of ESC - depend on Vendor +uint32 esc_errorcount # [-] Number of reported errors by ESC - if supported +int32 esc_rpm # [rpm] Motor RPM, negative for reverse rotation - if supported +float32 esc_voltage # [V] Voltage measured from current ESC - if supported +float32 esc_current # [A] Current measured from current ESC - if supported +float32 esc_temperature # [degC] Temperature measured from current ESC - if supported +int16 motor_temperature # [degC] Temperature measured from current motor - if supported -uint8 actuator_function # actuator output function (one of Motor1...MotorN) +uint8 esc_state # [-] State of ESC - depend on Vendor + +uint8 actuator_function # [-] Actuator output function (one of Motor1...MotorN) uint8 ACTUATOR_FUNCTION_MOTOR1 = 101 -uint8 ACTUATOR_FUNCTION_MOTOR2 = 102 -uint8 ACTUATOR_FUNCTION_MOTOR3 = 103 -uint8 ACTUATOR_FUNCTION_MOTOR4 = 104 -uint8 ACTUATOR_FUNCTION_MOTOR5 = 105 -uint8 ACTUATOR_FUNCTION_MOTOR6 = 106 -uint8 ACTUATOR_FUNCTION_MOTOR7 = 107 -uint8 ACTUATOR_FUNCTION_MOTOR8 = 108 -uint8 ACTUATOR_FUNCTION_MOTOR9 = 109 -uint8 ACTUATOR_FUNCTION_MOTOR10 = 110 -uint8 ACTUATOR_FUNCTION_MOTOR11 = 111 -uint8 ACTUATOR_FUNCTION_MOTOR12 = 112 +uint8 ACTUATOR_FUNCTION_MOTOR_MAX = 112 # output_functions.yaml Motor.start + Motor.count - 1 -uint16 failures # Bitmask to indicate the internal ESC faults -int8 esc_power # Applied power 0-100 in % (negative values reserved) +uint16 failures # [@enum FAILURE] Bitmask to indicate the internal ESC faults +int8 esc_power # [%] [@range 0,100] Applied power (negative values reserved) -uint8 FAILURE_OVER_CURRENT = 0 # (1 << 0) -uint8 FAILURE_OVER_VOLTAGE = 1 # (1 << 1) -uint8 FAILURE_MOTOR_OVER_TEMPERATURE = 2 # (1 << 2) -uint8 FAILURE_OVER_RPM = 3 # (1 << 3) -uint8 FAILURE_INCONSISTENT_CMD = 4 # (1 << 4) Set if ESC received an inconsistent command (i.e out of boundaries) -uint8 FAILURE_MOTOR_STUCK = 5 # (1 << 5) -uint8 FAILURE_GENERIC = 6 # (1 << 6) -uint8 FAILURE_MOTOR_WARN_TEMPERATURE = 7 # (1 << 7) -uint8 FAILURE_WARN_ESC_TEMPERATURE = 8 # (1 << 8) -uint8 FAILURE_OVER_ESC_TEMPERATURE = 9 # (1 << 9) -uint8 ESC_FAILURE_COUNT = 10 # Counter - keep it as last element! +uint8 FAILURE_OVER_CURRENT = 0 # (1 << 0) +uint8 FAILURE_OVER_VOLTAGE = 1 # (1 << 1) +uint8 FAILURE_MOTOR_OVER_TEMPERATURE = 2 # (1 << 2) +uint8 FAILURE_OVER_RPM = 3 # (1 << 3) +uint8 FAILURE_INCONSISTENT_CMD = 4 # (1 << 4) Set if ESC received an inconsistent command (i.e out of boundaries) +uint8 FAILURE_MOTOR_STUCK = 5 # (1 << 5) +uint8 FAILURE_GENERIC = 6 # (1 << 6) +uint8 FAILURE_MOTOR_WARN_TEMPERATURE = 7 # (1 << 7) +uint8 FAILURE_WARN_ESC_TEMPERATURE = 8 # (1 << 8) +uint8 FAILURE_OVER_ESC_TEMPERATURE = 9 # (1 << 9) +uint8 ESC_FAILURE_COUNT = 10 # Counter - keep it as last element! ``` ::: diff --git a/docs/ko/msg_docs/EscStatus.md b/docs/ko/msg_docs/EscStatus.md index e3678d9ff0..b9f900aab2 100644 --- a/docs/ko/msg_docs/EscStatus.md +++ b/docs/ko/msg_docs/EscStatus.md @@ -8,27 +8,34 @@ pageClass: is-wide-page ## Fields -| 명칭 | 형식 | Unit [Frame] | Range/Enum | 설명 | -| ---------------------------------------------------------- | -------------- | ---------------------------------------------------------------- | ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| timestamp | `uint64` | | | time since system start (microseconds) | -| counter | `uint16` | | | incremented by the writing thread everytime new data is stored | -| esc_count | `uint8` | | | number of connected ESCs | -| esc_connectiontype | `uint8` | | | how ESCs connected to the system | -| esc_online_flags | `uint8` | | | Bitmask indicating which ESC is online/offline | -| esc_armed_flags | `uint8` | | | Bitmask indicating which ESC is armed. For ESC's where the arming state is not known (returned by the ESC), the arming bits should always be set. | -| esc | `EscReport[8]` | | | | +| 명칭 | 형식 | Unit [Frame] | Range/Enum | 설명 | +| ---------------------------------------------------------- | --------------- | ---------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | +| timestamp | `uint64` | us | | Time since system start | +| counter | `uint16` | | | Incremented by the writing thread everytime new data is stored | +| esc_count | `uint8` | | | Number of connected ESCs | +| esc_connectiontype | `uint8` | | [ESC_CONNECTION_TYPE](#ESC_CONNECTION_TYPE) | How ESCs connected to the system | +| esc_online_flags | `uint16` | | | Bitmask indicating which ESC is online/offline (in motor order) | +| esc_armed_flags | `uint16` | | | Bitmask indicating which ESC is armed (in motor order) | +| esc | `EscReport[12]` | | | | + +## Enums + +### ESC_CONNECTION_TYPE {#ESC_CONNECTION_TYPE} + +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------------------------------------------------------------------------ | ------- | ----- | ------------------------ | +| ESC_CONNECTION_TYPE_PPM | `uint8` | 0 | Traditional PPM ESC | +| ESC_CONNECTION_TYPE_SERIAL | `uint8` | 1 | Serial Bus connected ESC | +| ESC_CONNECTION_TYPE_ONESHOT | `uint8` | 2 | One Shot PPM | +| ESC_CONNECTION_TYPE_I2C | `uint8` | 3 | I2C | +| ESC_CONNECTION_TYPE_CAN | `uint8` | 4 | CAN-Bus | +| ESC_CONNECTION_TYPE_DSHOT | `uint8` | 5 | DShot | ## Constants -| 명칭 | 형식 | Value | 설명 | -| -------------------------------------------------------------------------------------------------------------------------------------- | ------- | ----- | ---------------------------------------------------------------------------------------------------- | -| CONNECTED_ESC_MAX | `uint8` | 8 | The number of ESCs supported. Current (Q2/2013) we support 8 ESCs | -| ESC_CONNECTION_TYPE_PPM | `uint8` | 0 | Traditional PPM ESC | -| ESC_CONNECTION_TYPE_SERIAL | `uint8` | 1 | Serial Bus connected ESC | -| ESC_CONNECTION_TYPE_ONESHOT | `uint8` | 2 | One Shot PPM | -| ESC_CONNECTION_TYPE_I2C | `uint8` | 3 | I2C | -| ESC_CONNECTION_TYPE_CAN | `uint8` | 4 | CAN-Bus | -| ESC_CONNECTION_TYPE_DSHOT | `uint8` | 5 | DShot | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------------------------------- | ------- | ----- | ---------------------------------------------------------------- | +| CONNECTED_ESC_MAX | `uint8` | 12 | The number of ESCs supported (Motor1-Motor12) | ## Source Message @@ -38,34 +45,38 @@ pageClass: is-wide-page Click here to see original file ```c -uint64 timestamp # time since system start (microseconds) -uint8 CONNECTED_ESC_MAX = 8 # The number of ESCs supported. Current (Q2/2013) we support 8 ESCs +uint64 timestamp # [us] Time since system start +uint8 CONNECTED_ESC_MAX = 12 # The number of ESCs supported (Motor1-Motor12) -uint8 ESC_CONNECTION_TYPE_PPM = 0 # Traditional PPM ESC -uint8 ESC_CONNECTION_TYPE_SERIAL = 1 # Serial Bus connected ESC -uint8 ESC_CONNECTION_TYPE_ONESHOT = 2 # One Shot PPM -uint8 ESC_CONNECTION_TYPE_I2C = 3 # I2C -uint8 ESC_CONNECTION_TYPE_CAN = 4 # CAN-Bus -uint8 ESC_CONNECTION_TYPE_DSHOT = 5 # DShot +uint8 ESC_CONNECTION_TYPE_PPM = 0 # Traditional PPM ESC +uint8 ESC_CONNECTION_TYPE_SERIAL = 1 # Serial Bus connected ESC +uint8 ESC_CONNECTION_TYPE_ONESHOT = 2 # One Shot PPM +uint8 ESC_CONNECTION_TYPE_I2C = 3 # I2C +uint8 ESC_CONNECTION_TYPE_CAN = 4 # CAN-Bus +uint8 ESC_CONNECTION_TYPE_DSHOT = 5 # DShot -uint16 counter # incremented by the writing thread everytime new data is stored +uint16 counter # [-] Incremented by the writing thread everytime new data is stored -uint8 esc_count # number of connected ESCs -uint8 esc_connectiontype # how ESCs connected to the system +uint8 esc_count # [-] Number of connected ESCs +uint8 esc_connectiontype # [@enum ESC_CONNECTION_TYPE] How ESCs connected to the system -uint8 esc_online_flags # Bitmask indicating which ESC is online/offline -# esc_online_flags bit 0 : Set to 1 if ESC0 is online -# esc_online_flags bit 1 : Set to 1 if ESC1 is online -# esc_online_flags bit 2 : Set to 1 if ESC2 is online -# esc_online_flags bit 3 : Set to 1 if ESC3 is online -# esc_online_flags bit 4 : Set to 1 if ESC4 is online -# esc_online_flags bit 5 : Set to 1 if ESC5 is online -# esc_online_flags bit 6 : Set to 1 if ESC6 is online -# esc_online_flags bit 7 : Set to 1 if ESC7 is online +uint16 esc_online_flags # Bitmask indicating which ESC is online/offline (in motor order) +# esc_online_flags bit 0 : Set to 1 if Motor1 is online +# esc_online_flags bit 1 : Set to 1 if Motor2 is online +# esc_online_flags bit 2 : Set to 1 if Motor3 is online +# esc_online_flags bit 3 : Set to 1 if Motor4 is online +# esc_online_flags bit 4 : Set to 1 if Motor5 is online +# esc_online_flags bit 5 : Set to 1 if Motor6 is online +# esc_online_flags bit 6 : Set to 1 if Motor7 is online +# esc_online_flags bit 7 : Set to 1 if Motor8 is online +# esc_online_flags bit 8 : Set to 1 if Motor9 is online +# esc_online_flags bit 9 : Set to 1 if Motor10 is online +# esc_online_flags bit 10: Set to 1 if Motor11 is online +# esc_online_flags bit 11: Set to 1 if Motor12 is online -uint8 esc_armed_flags # Bitmask indicating which ESC is armed. For ESC's where the arming state is not known (returned by the ESC), the arming bits should always be set. +uint16 esc_armed_flags # [-] Bitmask indicating which ESC is armed (in motor order) -EscReport[8] esc +EscReport[12] esc ``` ::: diff --git a/docs/ko/msg_docs/EstimatorAidSource1d.md b/docs/ko/msg_docs/EstimatorAidSource1d.md index d2ea0e4575..54b0f5b52c 100644 --- a/docs/ko/msg_docs/EstimatorAidSource1d.md +++ b/docs/ko/msg_docs/EstimatorAidSource1d.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 diff --git a/docs/ko/msg_docs/EstimatorEventFlags.md b/docs/ko/msg_docs/EstimatorEventFlags.md index f4f6350ab1..e7776f8656 100644 --- a/docs/ko/msg_docs/EstimatorEventFlags.md +++ b/docs/ko/msg_docs/EstimatorEventFlags.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # EstimatorEventFlags (UORB message) -**TOPICS:** estimator_eventflags +**TOPICS:** estimator_event_flags ## Fields diff --git a/docs/ko/msg_docs/EstimatorFusionControl.md b/docs/ko/msg_docs/EstimatorFusionControl.md new file mode 100644 index 0000000000..fbdb5dae67 --- /dev/null +++ b/docs/ko/msg_docs/EstimatorFusionControl.md @@ -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 +``` + +::: diff --git a/docs/ko/msg_docs/EstimatorGpsStatus.md b/docs/ko/msg_docs/EstimatorGpsStatus.md index b7a4b3c9ff..1cb6e33e9b 100644 --- a/docs/ko/msg_docs/EstimatorGpsStatus.md +++ b/docs/ko/msg_docs/EstimatorGpsStatus.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # EstimatorGpsStatus (UORB message) -**TOPICS:** estimator_gpsstatus +**TOPICS:** estimator_gps_status ## Fields diff --git a/docs/ko/msg_docs/EstimatorSelectorStatus.md b/docs/ko/msg_docs/EstimatorSelectorStatus.md index a908697306..7f5d943721 100644 --- a/docs/ko/msg_docs/EstimatorSelectorStatus.md +++ b/docs/ko/msg_docs/EstimatorSelectorStatus.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # EstimatorSelectorStatus (UORB message) -**TOPICS:** estimator_selectorstatus +**TOPICS:** estimator_selector_status ## Fields diff --git a/docs/ko/msg_docs/EstimatorSensorBias.md b/docs/ko/msg_docs/EstimatorSensorBias.md index babb6a5532..7f2ca119e1 100644 --- a/docs/ko/msg_docs/EstimatorSensorBias.md +++ b/docs/ko/msg_docs/EstimatorSensorBias.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Sensor readings and in-run biases in SI-unit form. Sensor readings are compensated for static offsets,. scale errors, in-run bias and thermal drift (if thermal compensation is enabled and available). -**TOPICS:** estimator_sensorbias +**TOPICS:** estimator_sensor_bias ## Fields diff --git a/docs/ko/msg_docs/EstimatorStatus.md b/docs/ko/msg_docs/EstimatorStatus.md index bbc1a2b612..d97f0fec95 100644 --- a/docs/ko/msg_docs/EstimatorStatus.md +++ b/docs/ko/msg_docs/EstimatorStatus.md @@ -51,52 +51,52 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | ----- | ------------------------------------------------------------------------------------------------- | -| GPS_CHECK_FAIL_GPS_FIX | `uint8` | 0 | 0 : insufficient fix type (no 3D solution) | -| GPS_CHECK_FAIL_MIN_SAT_COUNT | `uint8` | 1 | 1 : minimum required sat count fail | -| GPS_CHECK_FAIL_MAX_PDOP | `uint8` | 2 | 2 : maximum allowed PDOP fail | -| GPS_CHECK_FAIL_MAX_HORZ_ERR | `uint8` | 3 | 3 : maximum allowed horizontal position error fail | -| GPS_CHECK_FAIL_MAX_VERT_ERR | `uint8` | 4 | 4 : maximum allowed vertical position error fail | -| GPS_CHECK_FAIL_MAX_SPD_ERR | `uint8` | 5 | 5 : maximum allowed speed error fail | -| GPS_CHECK_FAIL_MAX_HORZ_DRIFT | `uint8` | 6 | 6 : maximum allowed horizontal position drift fail - requires stationary vehicle | -| GPS_CHECK_FAIL_MAX_VERT_DRIFT | `uint8` | 7 | 7 : maximum allowed vertical position drift fail - requires stationary vehicle | -| GPS_CHECK_FAIL_MAX_HORZ_SPD_ERR | `uint8` | 8 | 8 : maximum allowed horizontal speed fail - requires stationary vehicle | -| GPS_CHECK_FAIL_MAX_VERT_SPD_ERR | `uint8` | 9 | 9 : maximum allowed vertical velocity discrepancy fail | -| GPS_CHECK_FAIL_SPOOFED | `uint8` | 10 | 10 : GPS signal is spoofed | -| GPS_CHECK_FAIL_JAMMED | `uint8` | 11 | 11 : GPS signal is jammed | -| CS_TILT_ALIGN | `uint8` | 0 | 0 - true if the filter tilt alignment is complete | -| CS_YAW_ALIGN | `uint8` | 1 | 1 - true if the filter yaw alignment is complete | -| CS_GNSS_POS | `uint8` | 2 | 2 - true if GNSS position measurements are being fused | -| CS_OPT_FLOW | `uint8` | 3 | 3 - true if optical flow measurements are being fused | -| CS_MAG_HDG | `uint8` | 4 | 4 - true if a simple magnetic yaw heading is being fused | -| CS_MAG_3D | `uint8` | 5 | 5 - true if 3-axis magnetometer measurement are being fused | -| CS_MAG_DEC | `uint8` | 6 | 6 - true if synthetic magnetic declination measurements are being fused | -| CS_IN_AIR | `uint8` | 7 | 7 - true when thought to be airborne | -| CS_WIND | `uint8` | 8 | 8 - true when wind velocity is being estimated | -| CS_BARO_HGT | `uint8` | 9 | 9 - true when baro data is being fused | -| CS_RNG_HGT | `uint8` | 10 | 10 - true when range finder data is being fused for height aiding | -| CS_GPS_HGT | `uint8` | 11 | 11 - true when GPS altitude is being fused | -| CS_EV_POS | `uint8` | 12 | 12 - true when local position data from external vision is being fused | -| CS_EV_YAW | `uint8` | 13 | 13 - true when yaw data from external vision measurements is being fused | -| CS_EV_HGT | `uint8` | 14 | 14 - true when height data from external vision measurements is being fused | -| CS_BETA | `uint8` | 15 | 15 - true when synthetic sideslip measurements are being fused | -| CS_MAG_FIELD | `uint8` | 16 | 16 - true when only the magnetic field states are updated by the magnetometer | -| CS_FIXED_WING | `uint8` | 17 | 17 - true when thought to be operating as a fixed wing vehicle with constrained sideslip | -| CS_MAG_FAULT | `uint8` | 18 | 18 - true when the magnetometer has been declared faulty and is no longer being used | -| CS_ASPD | `uint8` | 19 | 19 - true when airspeed measurements are being fused | -| CS_GND_EFFECT | `uint8` | 20 | 20 - true when when protection from ground effect induced static pressure rise is active | -| CS_RNG_STUCK | `uint8` | 21 | 21 - true when a stuck range finder sensor has been detected | -| CS_GPS_YAW | `uint8` | 22 | 22 - true when yaw (not ground course) data from a GPS receiver is being fused | -| CS_MAG_ALIGNED | `uint8` | 23 | 23 - true when the in-flight mag field alignment has been completed | -| CS_EV_VEL | `uint8` | 24 | 24 - true when local frame velocity data fusion from external vision measurements is intended | -| CS_SYNTHETIC_MAG_Z | `uint8` | 25 | 25 - true when we are using a synthesized measurement for the magnetometer Z component | -| CS_VEHICLE_AT_REST | `uint8` | 26 | 26 - true when the vehicle is at rest | -| CS_GPS_YAW_FAULT | `uint8` | 27 | 27 - true when the GNSS heading has been declared faulty and is no longer being used | -| CS_RNG_FAULT | `uint8` | 28 | 28 - true when the range finder has been declared faulty and is no longer being used | -| CS_GNSS_VEL | `uint8` | 44 | 44 - true if GNSS velocity measurement fusion is intended | -| CS_GNSS_FAULT | `uint8` | 45 | 45 - true if GNSS measurements have been declared faulty and are no longer used | -| CS_YAW_MANUAL | `uint8` | 46 | 46 - true if yaw has been set manually | +| 명칭 | 형식 | Value | 설명 | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | ----- | ------------------------------------------------------------------------------------------------- | +| GPS_CHECK_FAIL_GPS_FIX | `uint8` | 0 | 0 : insufficient fix type (no 3D solution) | +| GPS_CHECK_FAIL_MIN_SAT_COUNT | `uint8` | 1 | 1 : minimum required sat count fail | +| GPS_CHECK_FAIL_MAX_PDOP | `uint8` | 2 | 2 : maximum allowed PDOP fail | +| GPS_CHECK_FAIL_MAX_HORZ_ERR | `uint8` | 3 | 3 : maximum allowed horizontal position error fail | +| GPS_CHECK_FAIL_MAX_VERT_ERR | `uint8` | 4 | 4 : maximum allowed vertical position error fail | +| GPS_CHECK_FAIL_MAX_SPD_ERR | `uint8` | 5 | 5 : maximum allowed speed error fail | +| GPS_CHECK_FAIL_MAX_HORZ_DRIFT | `uint8` | 6 | 6 : maximum allowed horizontal position drift fail - requires stationary vehicle | +| GPS_CHECK_FAIL_MAX_VERT_DRIFT | `uint8` | 7 | 7 : maximum allowed vertical position drift fail - requires stationary vehicle | +| GPS_CHECK_FAIL_MAX_HORZ_SPD_ERR | `uint8` | 8 | 8 : maximum allowed horizontal speed fail - requires stationary vehicle | +| GPS_CHECK_FAIL_MAX_VERT_SPD_ERR | `uint8` | 9 | 9 : maximum allowed vertical velocity discrepancy fail | +| GPS_CHECK_FAIL_SPOOFED | `uint8` | 10 | 10 : GPS signal is spoofed | +| GPS_CHECK_FAIL_JAMMED | `uint8` | 11 | 11 : GPS signal is jammed | +| CS_TILT_ALIGN | `uint8` | 0 | 0 - true if the filter tilt alignment is complete | +| CS_YAW_ALIGN | `uint8` | 1 | 1 - true if the filter yaw alignment is complete | +| CS_GNSS_POS | `uint8` | 2 | 2 - true if GNSS position measurements are being fused | +| CS_OPT_FLOW | `uint8` | 3 | 3 - true if optical flow measurements are being fused | +| CS_MAG_HDG | `uint8` | 4 | 4 - true if a simple magnetic yaw heading is being fused | +| CS_MAG_3D | `uint8` | 5 | 5 - true if 3-axis magnetometer measurement are being fused | +| CS_MAG_DEC | `uint8` | 6 | 6 - true if synthetic magnetic declination measurements are being fused | +| CS_IN_AIR | `uint8` | 7 | 7 - true when thought to be airborne | +| CS_WIND | `uint8` | 8 | 8 - true when wind velocity is being estimated | +| CS_BARO_HGT | `uint8` | 9 | 9 - true when baro data is being fused | +| CS_RNG_HGT | `uint8` | 10 | 10 - true when range finder data is being fused for height aiding | +| CS_GPS_HGT | `uint8` | 11 | 11 - true when GPS altitude is being fused | +| CS_EV_POS | `uint8` | 12 | 12 - true when local position data from external vision is being fused | +| CS_EV_YAW | `uint8` | 13 | 13 - true when yaw data from external vision measurements is being fused | +| CS_EV_HGT | `uint8` | 14 | 14 - true when height data from external vision measurements is being fused | +| CS_BETA | `uint8` | 15 | 15 - true when synthetic sideslip measurements are being fused | +| CS_MAG_FIELD | `uint8` | 16 | 16 - true when only the magnetic field states are updated by the magnetometer | +| CS_FIXED_WING | `uint8` | 17 | 17 - true when thought to be operating as a fixed wing vehicle with constrained sideslip | +| CS_MAG_FAULT | `uint8` | 18 | 18 - true when the magnetometer has been declared faulty and is no longer being used | +| CS_ASPD | `uint8` | 19 | 19 - true when airspeed measurements are being fused | +| CS_GND_EFFECT | `uint8` | 20 | 20 - true when when protection from ground effect induced static pressure rise is active | +| CS_RNG_STUCK | `uint8` | 21 | 21 - true when a stuck range finder sensor has been detected | +| CS_GPS_YAW | `uint8` | 22 | 22 - true when yaw (not ground course) data from a GPS receiver is being fused | +| CS_MAG_ALIGNED | `uint8` | 23 | 23 - true when the in-flight mag field alignment has been completed | +| CS_EV_VEL | `uint8` | 24 | 24 - true when local frame velocity data fusion from external vision measurements is intended | +| CS_SYNTHETIC_MAG_Z | `uint8` | 25 | 25 - true when we are using a synthesized measurement for the magnetometer Z component | +| CS_VEHICLE_AT_REST | `uint8` | 26 | 26 - true when the vehicle is at rest | +| CS_GPS_YAW_FAULT | `uint8` | 27 | 27 - true when the GNSS heading has been declared faulty and is no longer being used | +| CS_RNG_FAULT | `uint8` | 28 | 28 - true when the range finder has been declared faulty and is no longer being used | +| CS_GNSS_VEL | `uint8` | 44 | 44 - true if GNSS velocity measurement fusion is intended | +| CS_GNSS_FAULT | `uint8` | 45 | 45 - true if GNSS measurements have been declared faulty and are no longer used | +| CS_YAW_MANUAL | `uint8` | 46 | 46 - true if yaw has been set manually | ## Source Message diff --git a/docs/ko/msg_docs/EstimatorStatusFlags.md b/docs/ko/msg_docs/EstimatorStatusFlags.md index 0b907904f0..435b900f93 100644 --- a/docs/ko/msg_docs/EstimatorStatusFlags.md +++ b/docs/ko/msg_docs/EstimatorStatusFlags.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # EstimatorStatusFlags (UORB message) -**TOPICS:** estimator_statusflags +**TOPICS:** estimator_status_flags ## Fields @@ -61,6 +61,8 @@ pageClass: is-wide-page | cs_gnss_fault | `bool` | | | 45 - true if GNSS true if GNSS measurements (lat, lon, vel) have been declared faulty | | cs_yaw_manual | `bool` | | | 46 - true if yaw has been set manually | | cs_gnss_hgt_fault | `bool` | | | 47 - true if GNSS true if GNSS measurements (alt) have been declared faulty | +| cs_in_transition | `bool` | | | 48 - true if the vehicle is in vtol transition | +| cs_heading_observable | `bool` | | | 49 - true when heading is observable | | fault_status_changes | `uint32` | | | number of filter fault status (fs) changes | | fs_bad_mag_x | `bool` | | | 0 - true if the fusion of the magnetometer X-axis has encountered a numerical error | | fs_bad_mag_y | `bool` | | | 1 - true if the fusion of the magnetometer Y-axis has encountered a numerical error | @@ -136,6 +138,8 @@ bool cs_gnss_vel # 44 - true if GNSS velocity measurement fusion bool cs_gnss_fault # 45 - true if GNSS true if GNSS measurements (lat, lon, vel) have been declared faulty bool cs_yaw_manual # 46 - true if yaw has been set manually bool cs_gnss_hgt_fault # 47 - true if GNSS true if GNSS measurements (alt) have been declared faulty +bool cs_in_transition # 48 - true if the vehicle is in vtol transition +bool cs_heading_observable # 49 - true when heading is observable # fault status uint32 fault_status_changes # number of filter fault status (fs) changes diff --git a/docs/ko/msg_docs/Event.md b/docs/ko/msg_docs/Event.md index 6fa988c3fd..b196dd7a08 100644 --- a/docs/ko/msg_docs/Event.md +++ b/docs/ko/msg_docs/Event.md @@ -20,10 +20,10 @@ Events interface. ## Constants -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------------------------- | -------- | ----- | -- | -| MESSAGE_VERSION | `uint32` | 1 | | -| ORB_QUEUE_LENGTH | `uint8` | 16 | | +| 명칭 | 형식 | Value | 설명 | +| ----------------------------------------------------------------------------------------- | -------- | ----- | -- | +| MESSAGE_VERSION | `uint32` | 1 | | +| ORB_QUEUE_LENGTH | `uint8` | 16 | | ## Source Message diff --git a/docs/ko/msg_docs/EventV0.md b/docs/ko/msg_docs/EventV0.md index 4bc23e839a..5a85824724 100644 --- a/docs/ko/msg_docs/EventV0.md +++ b/docs/ko/msg_docs/EventV0.md @@ -6,7 +6,7 @@ pageClass: is-wide-page this message is required here in the msg_old folder because other msg are depending on it. Events interface. -**TOPICS:** eventv0 +**TOPICS:** event_v0 ## Fields @@ -20,10 +20,10 @@ this message is required here in the msg_old folder because other msg are depend ## Constants -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------------------------- | -------- | ----- | -- | -| MESSAGE_VERSION | `uint32` | 0 | | -| ORB_QUEUE_LENGTH | `uint8` | 16 | | +| 명칭 | 형식 | Value | 설명 | +| ----------------------------------------------------------------------------------------- | -------- | ----- | -- | +| MESSAGE_VERSION | `uint32` | 0 | | +| ORB_QUEUE_LENGTH | `uint8` | 16 | | ## Source Message diff --git a/docs/ko/msg_docs/FailsafeFlags.md b/docs/ko/msg_docs/FailsafeFlags.md index 04514b37ba..51dfba06eb 100644 --- a/docs/ko/msg_docs/FailsafeFlags.md +++ b/docs/ko/msg_docs/FailsafeFlags.md @@ -46,6 +46,11 @@ The flag comments are used as label for the failsafe state machine simulation | battery_warning | `uint8` | | | Battery warning level (see BatteryStatus.msg) | | battery_low_remaining_time | `bool` | | | Low battery based on remaining flight time | | battery_unhealthy | `bool` | | | Battery unhealthy | +| fd_critical_failure | `bool` | | | Critical failure (attitude limit exceeded, or external ATS) | +| fd_esc_arming_failure | `bool` | | | ESC failed to arm | +| fd_imbalanced_prop | `bool` | | | Imbalanced propeller detected | +| fd_motor_failure | `bool` | | | Motor failure | +| fd_alt_loss | `bool` | | | Uncommanded altitude loss (rotary-wing, altitude-controlled flight) | | geofence_breached | `bool` | | | Geofence breached (one or multiple) | | mission_failure | `bool` | | | Mission failure | | vtol_fixed_wing_system_failure | `bool` | | | vehicle in fixed-wing system failure failsafe mode (after quad-chute) | @@ -53,10 +58,8 @@ The flag comments are used as label for the failsafe state machine simulation | flight_time_limit_exceeded | `bool` | | | Maximum flight time exceeded | | position_accuracy_low | `bool` | | | Position estimate has dropped below threshold, but is currently still declared valid | | navigator_failure | `bool` | | | Navigator failed to execute a mode | -| fd_critical_failure | `bool` | | | Critical failure (attitude/altitude limit exceeded, or external ATS) | -| fd_esc_arming_failure | `bool` | | | ESC failed to arm | -| fd_imbalanced_prop | `bool` | | | Imbalanced propeller detected | -| fd_motor_failure | `bool` | | | Motor failure | +| parachute_unhealthy | `bool` | | | Parachute system missing or unhealthy | +| remote_id_unhealthy | `bool` | | | Remote ID (Open Drone ID) system missing or unhealthy | ## Source Message @@ -112,6 +115,13 @@ uint8 battery_warning # Battery warning level (see BatteryStatus bool battery_low_remaining_time # Low battery based on remaining flight time bool battery_unhealthy # Battery unhealthy +# Failure detector +bool fd_critical_failure # Critical failure (attitude limit exceeded, or external ATS) +bool fd_esc_arming_failure # ESC failed to arm +bool fd_imbalanced_prop # Imbalanced propeller detected +bool fd_motor_failure # Motor failure +bool fd_alt_loss # Uncommanded altitude loss (rotary-wing, altitude-controlled flight) + # Other bool geofence_breached # Geofence breached (one or multiple) bool mission_failure # Mission failure @@ -120,12 +130,8 @@ bool wind_limit_exceeded # Wind limit exceeded bool flight_time_limit_exceeded # Maximum flight time exceeded bool position_accuracy_low # Position estimate has dropped below threshold, but is currently still declared valid bool navigator_failure # Navigator failed to execute a mode - -# Failure detector -bool fd_critical_failure # Critical failure (attitude/altitude limit exceeded, or external ATS) -bool fd_esc_arming_failure # ESC failed to arm -bool fd_imbalanced_prop # Imbalanced propeller detected -bool fd_motor_failure # Motor failure +bool parachute_unhealthy # Parachute system missing or unhealthy +bool remote_id_unhealthy # Remote ID (Open Drone ID) system missing or unhealthy ``` ::: diff --git a/docs/ko/msg_docs/FailureDetectorStatus.md b/docs/ko/msg_docs/FailureDetectorStatus.md index 9b4de32cae..35100c0056 100644 --- a/docs/ko/msg_docs/FailureDetectorStatus.md +++ b/docs/ko/msg_docs/FailureDetectorStatus.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # FailureDetectorStatus (UORB message) -**TOPICS:** failure_detectorstatus +**TOPICS:** failure_detector_status ## Fields diff --git a/docs/ko/msg_docs/FigureEightStatus.md b/docs/ko/msg_docs/FigureEightStatus.md index 375d856181..5687ddfba6 100644 --- a/docs/ko/msg_docs/FigureEightStatus.md +++ b/docs/ko/msg_docs/FigureEightStatus.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # FigureEightStatus (UORB message) -**TOPICS:** figure_eightstatus +**TOPICS:** figure_eight_status ## Fields diff --git a/docs/ko/msg_docs/FixedWingLateralGuidanceStatus.md b/docs/ko/msg_docs/FixedWingLateralGuidanceStatus.md index c8f636e377..9419c5989e 100644 --- a/docs/ko/msg_docs/FixedWingLateralGuidanceStatus.md +++ b/docs/ko/msg_docs/FixedWingLateralGuidanceStatus.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Fixed Wing Lateral Guidance Status message. Published by fw_pos_control module to report the resultant lateral setpoints and NPFG debug outputs. -**TOPICS:** fixed_winglateral_guidancestatus +**TOPICS:** fixed_wing_lateral_guidance_status ## Fields diff --git a/docs/ko/msg_docs/FixedWingLateralSetpoint.md b/docs/ko/msg_docs/FixedWingLateralSetpoint.md index c0ecdb3a9e..2b04265811 100644 --- a/docs/ko/msg_docs/FixedWingLateralSetpoint.md +++ b/docs/ko/msg_docs/FixedWingLateralSetpoint.md @@ -4,24 +4,27 @@ pageClass: is-wide-page # FixedWingLateralSetpoint (UORB message) -Fixed Wing Lateral Setpoint message. Used by the fw_lateral_longitudinal_control module. At least one of course, airspeed_direction, or lateral_acceleration must be finite. +Fixed Wing Lateral Setpoint message. -**TOPICS:** fixed_winglateral_setpoint +Used by the fw_lateral_longitudinal_control module +At least one of course, airspeed_direction, or lateral_acceleration must be finite. + +**TOPICS:** fixed_wing_lateral_setpoint ## Fields | 명칭 | 형식 | Unit [Frame] | Range/Enum | 설명 | | ----------------------------------------- | --------- | ---------------------------------------------------------------- | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| timestamp | `uint64` | | | time since system start (microseconds) | +| timestamp | `uint64` | us | | Time since system start | | course | `float32` | rad | [-pi : pi] | Desired direction of travel over ground w.r.t (true) North. NAN if not controlled directly. | | airspeed_direction | `float32` | rad | [-pi : pi] | Desired horizontal angle of airspeed vector w.r.t. (true) North. Same as vehicle heading if in the absence of sideslip. NAN if not controlled directly, takes precedence over course if finite. | -| lateral_acceleration | `float32` | FRD | | Lateral acceleration setpoint. NAN if not controlled directly, used as feedforward if either course setpoint or airspeed_direction is finite. | +| lateral_acceleration | `float32` | m/s^2 [FRD] | | Lateral acceleration setpoint. NAN if not controlled directly, used as feedforward if either course setpoint or airspeed_direction is finite. | ## Constants -| 명칭 | 형식 | Value | 설명 | -| -------------------------------------------------------------------- | -------- | ----- | -- | -| MESSAGE_VERSION | `uint32` | 0 | | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------ | -------- | ----- | -- | +| MESSAGE_VERSION | `uint32` | 0 | | ## Source Message @@ -32,16 +35,17 @@ Click here to see original file ```c # Fixed Wing Lateral Setpoint message +# # Used by the fw_lateral_longitudinal_control module # At least one of course, airspeed_direction, or lateral_acceleration must be finite. uint32 MESSAGE_VERSION = 0 -uint64 timestamp # time since system start (microseconds) +uint64 timestamp # [us] Time since system start -float32 course # [rad] [@range -pi, pi] Desired direction of travel over ground w.r.t (true) North. NAN if not controlled directly. -float32 airspeed_direction # [rad] [@range -pi, pi] Desired horizontal angle of airspeed vector w.r.t. (true) North. Same as vehicle heading if in the absence of sideslip. NAN if not controlled directly, takes precedence over course if finite. -float32 lateral_acceleration # [m/s^2] [FRD] Lateral acceleration setpoint. NAN if not controlled directly, used as feedforward if either course setpoint or airspeed_direction is finite. +float32 course # [rad] [@range -pi, pi] Desired direction of travel over ground w.r.t (true) North. NAN if not controlled directly. +float32 airspeed_direction # [rad] [@range -pi, pi] Desired horizontal angle of airspeed vector w.r.t. (true) North. Same as vehicle heading if in the absence of sideslip. NAN if not controlled directly, takes precedence over course if finite. +float32 lateral_acceleration # [m/s^2] [@frame FRD] Lateral acceleration setpoint. NAN if not controlled directly, used as feedforward if either course setpoint or airspeed_direction is finite. ``` ::: diff --git a/docs/ko/msg_docs/FixedWingLateralStatus.md b/docs/ko/msg_docs/FixedWingLateralStatus.md index 442146c4d8..34ec390be1 100644 --- a/docs/ko/msg_docs/FixedWingLateralStatus.md +++ b/docs/ko/msg_docs/FixedWingLateralStatus.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Fixed Wing Lateral Status message. Published by the fw_lateral_longitudinal_control module to report the resultant lateral setpoint. -**TOPICS:** fixed_winglateral_status +**TOPICS:** fixed_wing_lateral_status ## Fields diff --git a/docs/ko/msg_docs/FixedWingLongitudinalSetpoint.md b/docs/ko/msg_docs/FixedWingLongitudinalSetpoint.md index 2ba24c7f5f..04e46510b3 100644 --- a/docs/ko/msg_docs/FixedWingLongitudinalSetpoint.md +++ b/docs/ko/msg_docs/FixedWingLongitudinalSetpoint.md @@ -4,26 +4,30 @@ pageClass: is-wide-page # FixedWingLongitudinalSetpoint (UORB message) -Fixed Wing Longitudinal Setpoint message. Used by the fw_lateral_longitudinal_control module. If pitch_direct and throttle_direct are not both finite, then the controller relies on altitude/height_rate and equivalent_airspeed to control vertical motion. If both altitude and height_rate are NAN, the controller maintains the current altitude. +Fixed Wing Longitudinal Setpoint message. -**TOPICS:** fixed_winglongitudinal_setpoint +Used by the fw_lateral_longitudinal_control module +If pitch_direct and throttle_direct are not both finite, then the controller relies on altitude/height_rate and equivalent_airspeed to control vertical motion. +If both altitude and height_rate are NAN, the controller maintains the current altitude. + +**TOPICS:** fixed_wing_longitudinal_setpoint ## Fields | 명칭 | 형식 | Unit [Frame] | Range/Enum | 설명 | | ---------------------------------------- | --------- | ---------------------------------------------------------------- | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------- | -| timestamp | `uint64` | | | time since system start (microseconds) | +| timestamp | `uint64` | us | | Time since system start | | altitude | `float32` | m | | Altitude setpoint AMSL, not controlled directly if NAN or if height_rate is finite | -| height_rate | `float32` | ENU | | Scalar height rate setpoint. NAN if not controlled directly | +| height_rate | `float32` | m/s [ENU] | | Scalar height rate setpoint. NAN if not controlled directly | | equivalent_airspeed | `float32` | m/s | [0 : inf] | Scalar equivalent airspeed setpoint. NAN if system default should be used | -| pitch_direct | `float32` | FRD | [-pi : pi] | NAN if not controlled, overrides total energy controller | +| pitch_direct | `float32` | rad [FRD] | [-pi : pi] | NAN if not controlled, overrides total energy controller | | throttle_direct | `float32` | norm | [0 : 1] | NAN if not controlled, overrides total energy controller | ## Constants -| 명칭 | 형식 | Value | 설명 | -| -------------------------------------------------------------------- | -------- | ----- | -- | -| MESSAGE_VERSION | `uint32` | 0 | | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------ | -------- | ----- | -- | +| MESSAGE_VERSION | `uint32` | 0 | | ## Source Message @@ -34,19 +38,20 @@ Click here to see original file ```c # Fixed Wing Longitudinal Setpoint message +# # Used by the fw_lateral_longitudinal_control module # If pitch_direct and throttle_direct are not both finite, then the controller relies on altitude/height_rate and equivalent_airspeed to control vertical motion. # If both altitude and height_rate are NAN, the controller maintains the current altitude. uint32 MESSAGE_VERSION = 0 -uint64 timestamp # time since system start (microseconds) +uint64 timestamp # [us] Time since system start -float32 altitude # [m] Altitude setpoint AMSL, not controlled directly if NAN or if height_rate is finite -float32 height_rate # [m/s] [ENU] Scalar height rate setpoint. NAN if not controlled directly -float32 equivalent_airspeed # [m/s] [@range 0, inf] Scalar equivalent airspeed setpoint. NAN if system default should be used -float32 pitch_direct # [rad] [@range -pi, pi] [FRD] NAN if not controlled, overrides total energy controller -float32 throttle_direct # [norm] [@range 0,1] NAN if not controlled, overrides total energy controller +float32 altitude # [m] Altitude setpoint AMSL, not controlled directly if NAN or if height_rate is finite +float32 height_rate # [m/s] [@frame ENU] Scalar height rate setpoint. NAN if not controlled directly +float32 equivalent_airspeed # [m/s] [@range 0, inf] Scalar equivalent airspeed setpoint. NAN if system default should be used +float32 pitch_direct # [rad] [@range -pi, pi] [@frame FRD] NAN if not controlled, overrides total energy controller +float32 throttle_direct # [norm] [@range 0,1] NAN if not controlled, overrides total energy controller ``` ::: diff --git a/docs/ko/msg_docs/FixedWingRunwayControl.md b/docs/ko/msg_docs/FixedWingRunwayControl.md index b05ac86b18..7208f6374d 100644 --- a/docs/ko/msg_docs/FixedWingRunwayControl.md +++ b/docs/ko/msg_docs/FixedWingRunwayControl.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Auxiliary control fields for fixed-wing runway takeoff/landing. -**TOPICS:** fixed_wingrunway_control +**TOPICS:** fixed_wing_runway_control ## Fields @@ -19,12 +19,12 @@ Auxiliary control fields for fixed-wing runway takeoff/landing. ## Constants -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------------------------------------------------------------ | ------- | ----- | -------------------------------------------------------------------------------- | -| STATE_THROTTLE_RAMP | `uint8` | 0 | ramping up throttle | -| STATE_CLAMPED_TO_RUNWAY | `uint8` | 1 | clamped to runway, controlling yaw directly (wheel or rudder) | -| STATE_CLIMBOUT | `uint8` | 2 | climbout to safe height before navigation | -| STATE_FLYING | `uint8` | 3 | navigate freely | +| 명칭 | 형식 | Value | 설명 | +| ---------------------------------------------------------------------------------------------------------------------------- | ------- | ----- | -------------------------------------------------------------------------------- | +| STATE_THROTTLE_RAMP | `uint8` | 0 | ramping up throttle | +| STATE_CLAMPED_TO_RUNWAY | `uint8` | 1 | clamped to runway, controlling yaw directly (wheel or rudder) | +| STATE_CLIMBOUT | `uint8` | 2 | climbout to safe height before navigation | +| STATE_FLYING | `uint8` | 3 | navigate freely | ## Source Message diff --git a/docs/ko/msg_docs/FlightPhaseEstimation.md b/docs/ko/msg_docs/FlightPhaseEstimation.md index b859adfc27..2d88790c67 100644 --- a/docs/ko/msg_docs/FlightPhaseEstimation.md +++ b/docs/ko/msg_docs/FlightPhaseEstimation.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # FlightPhaseEstimation (UORB message) -**TOPICS:** flight_phaseestimation +**TOPICS:** flight_phase_estimation ## Fields @@ -15,12 +15,12 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| --------------------------------------------------------------------------------------------------- | ------- | ----- | ------------------------------- | -| FLIGHT_PHASE_UNKNOWN | `uint8` | 0 | vehicle flight phase is unknown | -| FLIGHT_PHASE_LEVEL | `uint8` | 1 | Vehicle is in level flight | -| FLIGHT_PHASE_DESCEND | `uint8` | 2 | vehicle is in descend | -| FLIGHT_PHASE_CLIMB | `uint8` | 3 | vehicle is climbing | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------------------------------------- | ------- | ----- | ------------------------------- | +| FLIGHT_PHASE_UNKNOWN | `uint8` | 0 | vehicle flight phase is unknown | +| FLIGHT_PHASE_LEVEL | `uint8` | 1 | Vehicle is in level flight | +| FLIGHT_PHASE_DESCEND | `uint8` | 2 | vehicle is in descend | +| FLIGHT_PHASE_CLIMB | `uint8` | 3 | vehicle is climbing | ## Source Message diff --git a/docs/ko/msg_docs/FollowTargetEstimator.md b/docs/ko/msg_docs/FollowTargetEstimator.md index 799cab3655..fe7c845bcf 100644 --- a/docs/ko/msg_docs/FollowTargetEstimator.md +++ b/docs/ko/msg_docs/FollowTargetEstimator.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # FollowTargetEstimator (UORB message) -**TOPICS:** follow_targetestimator +**TOPICS:** follow_target_estimator ## Fields diff --git a/docs/ko/msg_docs/FollowTargetStatus.md b/docs/ko/msg_docs/FollowTargetStatus.md index 7fe978c12a..a0fd16599e 100644 --- a/docs/ko/msg_docs/FollowTargetStatus.md +++ b/docs/ko/msg_docs/FollowTargetStatus.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # FollowTargetStatus (UORB message) -**TOPICS:** follow_targetstatus +**TOPICS:** follow_target_status ## Fields diff --git a/docs/ko/msg_docs/FuelTankStatus.md b/docs/ko/msg_docs/FuelTankStatus.md index 82da178157..b7c26d2339 100644 --- a/docs/ko/msg_docs/FuelTankStatus.md +++ b/docs/ko/msg_docs/FuelTankStatus.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # FuelTankStatus (UORB message) -**TOPICS:** fuel_tankstatus +**TOPICS:** fuel_tank_status ## Fields @@ -22,11 +22,11 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| -------------------------------------------------------------------------------------------------------------------------- | ------- | ----- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| MAV_FUEL_TYPE_UNKNOWN | `uint8` | 0 | fuel type not specified. Fuel levels are normalized (i.e., maximum is 1, and other levels are relative to 1). | -| MAV_FUEL_TYPE_LIQUID | `uint8` | 1 | represents generic liquid fuels, such as gasoline or diesel. Fuel levels are measured in millilitres (ml), and flow rates in millilitres per second (ml/s). | -| MAV_FUEL_TYPE_GAS | `uint8` | 2 | represents a gas fuel, such as hydrogen, methane, or propane. Fuel levels are in kilo-Pascal (kPa), and flow rates are in milliliters per second (ml/s). | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------------------------------------------------------------ | ------- | ----- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| MAV_FUEL_TYPE_UNKNOWN | `uint8` | 0 | fuel type not specified. Fuel levels are normalized (i.e., maximum is 1, and other levels are relative to 1). | +| MAV_FUEL_TYPE_LIQUID | `uint8` | 1 | represents generic liquid fuels, such as gasoline or diesel. Fuel levels are measured in millilitres (ml), and flow rates in millilitres per second (ml/s). | +| MAV_FUEL_TYPE_GAS | `uint8` | 2 | represents a gas fuel, such as hydrogen, methane, or propane. Fuel levels are in kilo-Pascal (kPa), and flow rates are in milliliters per second (ml/s). | ## Source Message diff --git a/docs/ko/msg_docs/GeneratorStatus.md b/docs/ko/msg_docs/GeneratorStatus.md index 838563a7c9..d190cc30c4 100644 --- a/docs/ko/msg_docs/GeneratorStatus.md +++ b/docs/ko/msg_docs/GeneratorStatus.md @@ -25,31 +25,31 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| STATUS_FLAG_OFF | `uint64` | 1 | Generator is off. | -| STATUS_FLAG_READY | `uint64` | 2 | Generator is ready to start generating power. | -| STATUS_FLAG_GENERATING | `uint64` | 4 | Generator is generating power. | -| STATUS_FLAG_CHARGING | `uint64` | 8 | Generator is charging the batteries (generating enough power to charge and provide the load). | -| STATUS_FLAG_REDUCED_POWER | `uint64` | 16 | Generator is operating at a reduced maximum power. | -| STATUS_FLAG_MAXPOWER | `uint64` | 32 | Generator is providing the maximum output. | -| STATUS_FLAG_OVERTEMP_WARNING | `uint64` | 64 | Generator is near the maximum operating temperature, cooling is insufficient. | -| STATUS_FLAG_OVERTEMP_FAULT | `uint64` | 128 | Generator hit the maximum operating temperature and shutdown. | -| STATUS_FLAG_ELECTRONICS_OVERTEMP_WARNING | `uint64` | 256 | Power electronics are near the maximum operating temperature, cooling is insufficient. | -| STATUS_FLAG_ELECTRONICS_OVERTEMP_FAULT | `uint64` | 512 | Power electronics hit the maximum operating temperature and shutdown. | -| STATUS_FLAG_ELECTRONICS_FAULT | `uint64` | 1024 | Power electronics experienced a fault and shutdown. | -| STATUS_FLAG_POWERSOURCE_FAULT | `uint64` | 2048 | The power source supplying the generator failed e.g. mechanical generator stopped, tether is no longer providing power, solar cell is in shade, hydrogen reaction no longer happening. | -| STATUS_FLAG_COMMUNICATION_WARNING | `uint64` | 4096 | Generator controller having communication problems. | -| STATUS_FLAG_COOLING_WARNING | `uint64` | 8192 | Power electronic or generator cooling system error. | -| STATUS_FLAG_POWER_RAIL_FAULT | `uint64` | 16384 | Generator controller power rail experienced a fault. | -| STATUS_FLAG_OVERCURRENT_FAULT | `uint64` | 32768 | Generator controller exceeded the overcurrent threshold and shutdown to prevent damage. | -| STATUS_FLAG_BATTERY_OVERCHARGE_CURRENT_FAULT | `uint64` | 65536 | Generator controller detected a high current going into the batteries and shutdown to prevent battery damage. | -| STATUS_FLAG_OVERVOLTAGE_FAULT | `uint64` | 131072 | Generator controller exceeded it's overvoltage threshold and shutdown to prevent it exceeding the voltage rating. | -| STATUS_FLAG_BATTERY_UNDERVOLT_FAULT | `uint64` | 262144 | Batteries are under voltage (generator will not start). | -| STATUS_FLAG_START_INHIBITED | `uint64` | 524288 | Generator start is inhibited by e.g. a safety switch. | -| STATUS_FLAG_MAINTENANCE_REQUIRED | `uint64` | 1048576 | Generator requires maintenance. | -| STATUS_FLAG_WARMING_UP | `uint64` | 2097152 | Generator is not ready to generate yet. | -| STATUS_FLAG_IDLE | `uint64` | 4194304 | Generator is idle. | +| 명칭 | 형식 | Value | 설명 | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| STATUS_FLAG_OFF | `uint64` | 1 | Generator is off. | +| STATUS_FLAG_READY | `uint64` | 2 | Generator is ready to start generating power. | +| STATUS_FLAG_GENERATING | `uint64` | 4 | Generator is generating power. | +| STATUS_FLAG_CHARGING | `uint64` | 8 | Generator is charging the batteries (generating enough power to charge and provide the load). | +| STATUS_FLAG_REDUCED_POWER | `uint64` | 16 | Generator is operating at a reduced maximum power. | +| STATUS_FLAG_MAXPOWER | `uint64` | 32 | Generator is providing the maximum output. | +| STATUS_FLAG_OVERTEMP_WARNING | `uint64` | 64 | Generator is near the maximum operating temperature, cooling is insufficient. | +| STATUS_FLAG_OVERTEMP_FAULT | `uint64` | 128 | Generator hit the maximum operating temperature and shutdown. | +| STATUS_FLAG_ELECTRONICS_OVERTEMP_WARNING | `uint64` | 256 | Power electronics are near the maximum operating temperature, cooling is insufficient. | +| STATUS_FLAG_ELECTRONICS_OVERTEMP_FAULT | `uint64` | 512 | Power electronics hit the maximum operating temperature and shutdown. | +| STATUS_FLAG_ELECTRONICS_FAULT | `uint64` | 1024 | Power electronics experienced a fault and shutdown. | +| STATUS_FLAG_POWERSOURCE_FAULT | `uint64` | 2048 | The power source supplying the generator failed e.g. mechanical generator stopped, tether is no longer providing power, solar cell is in shade, hydrogen reaction no longer happening. | +| STATUS_FLAG_COMMUNICATION_WARNING | `uint64` | 4096 | Generator controller having communication problems. | +| STATUS_FLAG_COOLING_WARNING | `uint64` | 8192 | Power electronic or generator cooling system error. | +| STATUS_FLAG_POWER_RAIL_FAULT | `uint64` | 16384 | Generator controller power rail experienced a fault. | +| STATUS_FLAG_OVERCURRENT_FAULT | `uint64` | 32768 | Generator controller exceeded the overcurrent threshold and shutdown to prevent damage. | +| STATUS_FLAG_BATTERY_OVERCHARGE_CURRENT_FAULT | `uint64` | 65536 | Generator controller detected a high current going into the batteries and shutdown to prevent battery damage. | +| STATUS_FLAG_OVERVOLTAGE_FAULT | `uint64` | 131072 | Generator controller exceeded it's overvoltage threshold and shutdown to prevent it exceeding the voltage rating. | +| STATUS_FLAG_BATTERY_UNDERVOLT_FAULT | `uint64` | 262144 | Batteries are under voltage (generator will not start). | +| STATUS_FLAG_START_INHIBITED | `uint64` | 524288 | Generator start is inhibited by e.g. a safety switch. | +| STATUS_FLAG_MAINTENANCE_REQUIRED | `uint64` | 1048576 | Generator requires maintenance. | +| STATUS_FLAG_WARMING_UP | `uint64` | 2097152 | Generator is not ready to generate yet. | +| STATUS_FLAG_IDLE | `uint64` | 4194304 | Generator is idle. | ## Source Message diff --git a/docs/ko/msg_docs/GeofenceResult.md b/docs/ko/msg_docs/GeofenceResult.md index f6c650b707..ae89ed1a2b 100644 --- a/docs/ko/msg_docs/GeofenceResult.md +++ b/docs/ko/msg_docs/GeofenceResult.md @@ -18,14 +18,14 @@ pageClass: is-wide-page ## Constants -\| Name | Type | Value | Description | -\| ------------------------------------------------------- | ------- | ----- | ------------------------------- | ------ | -\| GF_ACTION_NONE | `uint8` | 0 | no action on geofence violation | -\| GF_ACTION_WARN | `uint8` | 1 | critical mavlink message | -\| GF_ACTION_LOITER | `uint8` | 2 | switch to AUTO | LOITER | -\| GF_ACTION_RTL | `uint8` | 3 | switch to AUTO | RTL | -\| GF_ACTION_TERMINATE | `uint8` | 4 | flight termination | -\| GF_ACTION_LAND | `uint8` | 5 | switch to AUTO | LAND | +\| Name | Type | Value | Description | +\| ----------------------------------------------------- | ------- | ----- | ------------------------------- | ------ | +\| GF_ACTION_NONE | `uint8` | 0 | no action on geofence violation | +\| GF_ACTION_WARN | `uint8` | 1 | critical mavlink message | +\| GF_ACTION_LOITER | `uint8` | 2 | switch to AUTO | LOITER | +\| GF_ACTION_RTL | `uint8` | 3 | switch to AUTO | RTL | +\| GF_ACTION_TERMINATE | `uint8` | 4 | flight termination | +\| GF_ACTION_LAND | `uint8` | 5 | switch to AUTO | LAND | ## Source Message diff --git a/docs/ko/msg_docs/GeofenceStatus.md b/docs/ko/msg_docs/GeofenceStatus.md index a12563d15e..383ec9f1b8 100644 --- a/docs/ko/msg_docs/GeofenceStatus.md +++ b/docs/ko/msg_docs/GeofenceStatus.md @@ -16,10 +16,10 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| --------------------------------------------------------------------------------------------- | ------- | ----- | -- | -| GF_STATUS_LOADING | `uint8` | 0 | | -| GF_STATUS_READY | `uint8` | 1 | | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------------------------------- | ------- | ----- | -- | +| GF_STATUS_LOADING | `uint8` | 0 | | +| GF_STATUS_READY | `uint8` | 1 | | ## Source Message diff --git a/docs/ko/msg_docs/GimbalControls.md b/docs/ko/msg_docs/GimbalControls.md index 2757e77784..22c6de1a76 100644 --- a/docs/ko/msg_docs/GimbalControls.md +++ b/docs/ko/msg_docs/GimbalControls.md @@ -16,11 +16,11 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------ | ------- | ----- | -- | -| INDEX_ROLL | `uint8` | 0 | | -| INDEX_PITCH | `uint8` | 1 | | -| INDEX_YAW | `uint8` | 2 | | +| 명칭 | 형식 | Value | 설명 | +| ---------------------------------------------------------- | ------- | ----- | -- | +| INDEX_ROLL | `uint8` | 0 | | +| INDEX_PITCH | `uint8` | 1 | | +| INDEX_YAW | `uint8` | 2 | | ## Source Message diff --git a/docs/ko/msg_docs/GimbalDeviceAttitudeStatus.md b/docs/ko/msg_docs/GimbalDeviceAttitudeStatus.md index 83ee93aa44..a947b14c06 100644 --- a/docs/ko/msg_docs/GimbalDeviceAttitudeStatus.md +++ b/docs/ko/msg_docs/GimbalDeviceAttitudeStatus.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # GimbalDeviceAttitudeStatus (UORB message) -**TOPICS:** gimbal_deviceattitude_status +**TOPICS:** gimbal_device_attitude_status ## Fields @@ -26,15 +26,15 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ----- | -- | -| DEVICE_FLAGS_RETRACT | `uint16` | 1 | | -| DEVICE_FLAGS_NEUTRAL | `uint16` | 2 | | -| DEVICE_FLAGS_ROLL_LOCK | `uint16` | 4 | | -| DEVICE_FLAGS_PITCH_LOCK | `uint16` | 8 | | -| DEVICE_FLAGS_YAW_LOCK | `uint16` | 16 | | -| DEVICE_FLAGS_YAW_IN_VEHICLE_FRAME | `uint16` | 32 | | -| DEVICE_FLAGS_YAW_IN_EARTH_FRAME | `uint16` | 64 | | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------- | ----- | -- | +| DEVICE_FLAGS_RETRACT | `uint16` | 1 | | +| DEVICE_FLAGS_NEUTRAL | `uint16` | 2 | | +| DEVICE_FLAGS_ROLL_LOCK | `uint16` | 4 | | +| DEVICE_FLAGS_PITCH_LOCK | `uint16` | 8 | | +| DEVICE_FLAGS_YAW_LOCK | `uint16` | 16 | | +| DEVICE_FLAGS_YAW_IN_VEHICLE_FRAME | `uint16` | 32 | | +| DEVICE_FLAGS_YAW_IN_EARTH_FRAME | `uint16` | 64 | | ## Source Message diff --git a/docs/ko/msg_docs/GimbalDeviceInformation.md b/docs/ko/msg_docs/GimbalDeviceInformation.md index 19b6db7b88..6e3e0b1ca3 100644 --- a/docs/ko/msg_docs/GimbalDeviceInformation.md +++ b/docs/ko/msg_docs/GimbalDeviceInformation.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # GimbalDeviceInformation (UORB message) -**TOPICS:** gimbal_deviceinformation +**TOPICS:** gimbal_device_information ## Fields @@ -29,20 +29,20 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ----- | -- | -| GIMBAL_DEVICE_CAP_FLAGS_HAS_RETRACT | `uint32` | 1 | | -| GIMBAL_DEVICE_CAP_FLAGS_HAS_NEUTRAL | `uint32` | 2 | | -| GIMBAL_DEVICE_CAP_FLAGS_HAS_ROLL_AXIS | `uint32` | 4 | | -| GIMBAL_DEVICE_CAP_FLAGS_HAS_ROLL_FOLLOW | `uint32` | 8 | | -| GIMBAL_DEVICE_CAP_FLAGS_HAS_ROLL_LOCK | `uint32` | 16 | | -| GIMBAL_DEVICE_CAP_FLAGS_HAS_PITCH_AXIS | `uint32` | 32 | | -| GIMBAL_DEVICE_CAP_FLAGS_HAS_PITCH_FOLLOW | `uint32` | 64 | | -| GIMBAL_DEVICE_CAP_FLAGS_HAS_PITCH_LOCK | `uint32` | 128 | | -| GIMBAL_DEVICE_CAP_FLAGS_HAS_YAW_AXIS | `uint32` | 256 | | -| GIMBAL_DEVICE_CAP_FLAGS_HAS_YAW_FOLLOW | `uint32` | 512 | | -| GIMBAL_DEVICE_CAP_FLAGS_HAS_YAW_LOCK | `uint32` | 1024 | | -| GIMBAL_DEVICE_CAP_FLAGS_SUPPORTS_INFINITE_YAW | `uint32` | 2048 | | +| 명칭 | 형식 | Value | 설명 | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ----- | -- | +| GIMBAL_DEVICE_CAP_FLAGS_HAS_RETRACT | `uint32` | 1 | | +| GIMBAL_DEVICE_CAP_FLAGS_HAS_NEUTRAL | `uint32` | 2 | | +| GIMBAL_DEVICE_CAP_FLAGS_HAS_ROLL_AXIS | `uint32` | 4 | | +| GIMBAL_DEVICE_CAP_FLAGS_HAS_ROLL_FOLLOW | `uint32` | 8 | | +| GIMBAL_DEVICE_CAP_FLAGS_HAS_ROLL_LOCK | `uint32` | 16 | | +| GIMBAL_DEVICE_CAP_FLAGS_HAS_PITCH_AXIS | `uint32` | 32 | | +| GIMBAL_DEVICE_CAP_FLAGS_HAS_PITCH_FOLLOW | `uint32` | 64 | | +| GIMBAL_DEVICE_CAP_FLAGS_HAS_PITCH_LOCK | `uint32` | 128 | | +| GIMBAL_DEVICE_CAP_FLAGS_HAS_YAW_AXIS | `uint32` | 256 | | +| GIMBAL_DEVICE_CAP_FLAGS_HAS_YAW_FOLLOW | `uint32` | 512 | | +| GIMBAL_DEVICE_CAP_FLAGS_HAS_YAW_LOCK | `uint32` | 1024 | | +| GIMBAL_DEVICE_CAP_FLAGS_SUPPORTS_INFINITE_YAW | `uint32` | 2048 | | ## Source Message diff --git a/docs/ko/msg_docs/GimbalDeviceSetAttitude.md b/docs/ko/msg_docs/GimbalDeviceSetAttitude.md index 4ddac878bb..771841e98c 100644 --- a/docs/ko/msg_docs/GimbalDeviceSetAttitude.md +++ b/docs/ko/msg_docs/GimbalDeviceSetAttitude.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # GimbalDeviceSetAttitude (UORB message) -**TOPICS:** gimbal_deviceset_attitude +**TOPICS:** gimbal_device_set_attitude ## Fields @@ -21,13 +21,13 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ----- | -- | -| GIMBAL_DEVICE_FLAGS_RETRACT | `uint32` | 1 | | -| GIMBAL_DEVICE_FLAGS_NEUTRAL | `uint32` | 2 | | -| GIMBAL_DEVICE_FLAGS_ROLL_LOCK | `uint32` | 4 | | -| GIMBAL_DEVICE_FLAGS_PITCH_LOCK | `uint32` | 8 | | -| GIMBAL_DEVICE_FLAGS_YAW_LOCK | `uint32` | 16 | | +| 명칭 | 형식 | Value | 설명 | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ----- | -- | +| GIMBAL_DEVICE_FLAGS_RETRACT | `uint32` | 1 | | +| GIMBAL_DEVICE_FLAGS_NEUTRAL | `uint32` | 2 | | +| GIMBAL_DEVICE_FLAGS_ROLL_LOCK | `uint32` | 4 | | +| GIMBAL_DEVICE_FLAGS_PITCH_LOCK | `uint32` | 8 | | +| GIMBAL_DEVICE_FLAGS_YAW_LOCK | `uint32` | 16 | | ## Source Message diff --git a/docs/ko/msg_docs/GimbalManagerInformation.md b/docs/ko/msg_docs/GimbalManagerInformation.md index bbc7286498..5dd0fea9a9 100644 --- a/docs/ko/msg_docs/GimbalManagerInformation.md +++ b/docs/ko/msg_docs/GimbalManagerInformation.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # GimbalManagerInformation (UORB message) -**TOPICS:** gimbal_managerinformation +**TOPICS:** gimbal_manager_information ## Fields @@ -22,22 +22,22 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------- | ------ | -- | -| GIMBAL_MANAGER_CAP_FLAGS_HAS_RETRACT | `uint32` | 1 | | -| GIMBAL_MANAGER_CAP_FLAGS_HAS_NEUTRAL | `uint32` | 2 | | -| GIMBAL_MANAGER_CAP_FLAGS_HAS_ROLL_AXIS | `uint32` | 4 | | -| GIMBAL_MANAGER_CAP_FLAGS_HAS_ROLL_FOLLOW | `uint32` | 8 | | -| GIMBAL_MANAGER_CAP_FLAGS_HAS_ROLL_LOCK | `uint32` | 16 | | -| GIMBAL_MANAGER_CAP_FLAGS_HAS_PITCH_AXIS | `uint32` | 32 | | -| GIMBAL_MANAGER_CAP_FLAGS_HAS_PITCH_FOLLOW | `uint32` | 64 | | -| GIMBAL_MANAGER_CAP_FLAGS_HAS_PITCH_LOCK | `uint32` | 128 | | -| GIMBAL_MANAGER_CAP_FLAGS_HAS_YAW_AXIS | `uint32` | 256 | | -| GIMBAL_MANAGER_CAP_FLAGS_HAS_YAW_FOLLOW | `uint32` | 512 | | -| GIMBAL_MANAGER_CAP_FLAGS_HAS_YAW_LOCK | `uint32` | 1024 | | -| GIMBAL_MANAGER_CAP_FLAGS_SUPPORTS_INFINITE_YAW | `uint32` | 2048 | | -| GIMBAL_MANAGER_CAP_FLAGS_CAN_POINT_LOCATION_LOCAL | `uint32` | 65536 | | -| GIMBAL_MANAGER_CAP_FLAGS_CAN_POINT_LOCATION_GLOBAL | `uint32` | 131072 | | +| 명칭 | 형식 | Value | 설명 | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ------ | -- | +| GIMBAL_MANAGER_CAP_FLAGS_HAS_RETRACT | `uint32` | 1 | | +| GIMBAL_MANAGER_CAP_FLAGS_HAS_NEUTRAL | `uint32` | 2 | | +| GIMBAL_MANAGER_CAP_FLAGS_HAS_ROLL_AXIS | `uint32` | 4 | | +| GIMBAL_MANAGER_CAP_FLAGS_HAS_ROLL_FOLLOW | `uint32` | 8 | | +| GIMBAL_MANAGER_CAP_FLAGS_HAS_ROLL_LOCK | `uint32` | 16 | | +| GIMBAL_MANAGER_CAP_FLAGS_HAS_PITCH_AXIS | `uint32` | 32 | | +| GIMBAL_MANAGER_CAP_FLAGS_HAS_PITCH_FOLLOW | `uint32` | 64 | | +| GIMBAL_MANAGER_CAP_FLAGS_HAS_PITCH_LOCK | `uint32` | 128 | | +| GIMBAL_MANAGER_CAP_FLAGS_HAS_YAW_AXIS | `uint32` | 256 | | +| GIMBAL_MANAGER_CAP_FLAGS_HAS_YAW_FOLLOW | `uint32` | 512 | | +| GIMBAL_MANAGER_CAP_FLAGS_HAS_YAW_LOCK | `uint32` | 1024 | | +| GIMBAL_MANAGER_CAP_FLAGS_SUPPORTS_INFINITE_YAW | `uint32` | 2048 | | +| GIMBAL_MANAGER_CAP_FLAGS_CAN_POINT_LOCATION_LOCAL | `uint32` | 65536 | | +| GIMBAL_MANAGER_CAP_FLAGS_CAN_POINT_LOCATION_GLOBAL | `uint32` | 131072 | | ## Source Message diff --git a/docs/ko/msg_docs/GimbalManagerSetAttitude.md b/docs/ko/msg_docs/GimbalManagerSetAttitude.md index 538cb79b54..99197472ea 100644 --- a/docs/ko/msg_docs/GimbalManagerSetAttitude.md +++ b/docs/ko/msg_docs/GimbalManagerSetAttitude.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # GimbalManagerSetAttitude (UORB message) -**TOPICS:** gimbal_managerset_attitude +**TOPICS:** gimbal_manager_set_attitude ## Fields @@ -24,14 +24,14 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ----- | -- | -| GIMBAL_MANAGER_FLAGS_RETRACT | `uint32` | 1 | | -| GIMBAL_MANAGER_FLAGS_NEUTRAL | `uint32` | 2 | | -| GIMBAL_MANAGER_FLAGS_ROLL_LOCK | `uint32` | 4 | | -| GIMBAL_MANAGER_FLAGS_PITCH_LOCK | `uint32` | 8 | | -| GIMBAL_MANAGER_FLAGS_YAW_LOCK | `uint32` | 16 | | -| ORB_QUEUE_LENGTH | `uint8` | 2 | | +| 명칭 | 형식 | Value | 설명 | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ----- | -- | +| GIMBAL_MANAGER_FLAGS_RETRACT | `uint32` | 1 | | +| GIMBAL_MANAGER_FLAGS_NEUTRAL | `uint32` | 2 | | +| GIMBAL_MANAGER_FLAGS_ROLL_LOCK | `uint32` | 4 | | +| GIMBAL_MANAGER_FLAGS_PITCH_LOCK | `uint32` | 8 | | +| GIMBAL_MANAGER_FLAGS_YAW_LOCK | `uint32` | 16 | | +| ORB_QUEUE_LENGTH | `uint8` | 2 | | ## Source Message diff --git a/docs/ko/msg_docs/GimbalManagerSetManualControl.md b/docs/ko/msg_docs/GimbalManagerSetManualControl.md index b3bca540a0..8c0a0bb642 100644 --- a/docs/ko/msg_docs/GimbalManagerSetManualControl.md +++ b/docs/ko/msg_docs/GimbalManagerSetManualControl.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # GimbalManagerSetManualControl (UORB message) -**TOPICS:** gimbal_managerset_manualcontrol +**TOPICS:** gimbal_manager_set_manual_control ## Fields @@ -24,13 +24,13 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ----- | -- | -| GIMBAL_MANAGER_FLAGS_RETRACT | `uint32` | 1 | | -| GIMBAL_MANAGER_FLAGS_NEUTRAL | `uint32` | 2 | | -| GIMBAL_MANAGER_FLAGS_ROLL_LOCK | `uint32` | 4 | | -| GIMBAL_MANAGER_FLAGS_PITCH_LOCK | `uint32` | 8 | | -| GIMBAL_MANAGER_FLAGS_YAW_LOCK | `uint32` | 16 | | +| 명칭 | 형식 | Value | 설명 | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ----- | -- | +| GIMBAL_MANAGER_FLAGS_RETRACT | `uint32` | 1 | | +| GIMBAL_MANAGER_FLAGS_NEUTRAL | `uint32` | 2 | | +| GIMBAL_MANAGER_FLAGS_ROLL_LOCK | `uint32` | 4 | | +| GIMBAL_MANAGER_FLAGS_PITCH_LOCK | `uint32` | 8 | | +| GIMBAL_MANAGER_FLAGS_YAW_LOCK | `uint32` | 16 | | ## Source Message diff --git a/docs/ko/msg_docs/GimbalManagerStatus.md b/docs/ko/msg_docs/GimbalManagerStatus.md index a664c44f05..eb870c1504 100644 --- a/docs/ko/msg_docs/GimbalManagerStatus.md +++ b/docs/ko/msg_docs/GimbalManagerStatus.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # GimbalManagerStatus (UORB message) -**TOPICS:** gimbal_managerstatus +**TOPICS:** gimbal_manager_status ## Fields diff --git a/docs/ko/msg_docs/GotoSetpoint.md b/docs/ko/msg_docs/GotoSetpoint.md index eca8aaf6cf..2f89625e7c 100644 --- a/docs/ko/msg_docs/GotoSetpoint.md +++ b/docs/ko/msg_docs/GotoSetpoint.md @@ -4,7 +4,13 @@ pageClass: is-wide-page # GotoSetpoint (UORB message) -Position and (optional) heading setpoints with corresponding speed constraints. Setpoints are intended as inputs to position and heading smoothers, respectively. Setpoints do not need to be kinematically consistent. Optional heading setpoints may be specified as controlled by the respective flag. Unset optional setpoints are not controlled. Unset optional constraints default to vehicle specifications. +Position and (optional) heading setpoints with corresponding speed constraints. + +Setpoints are intended as inputs to position and heading smoothers, respectively. +Setpoints do not need to be kinematically consistent. +Optional heading setpoints may be specified as controlled by the respective flag. +Unset optional setpoints are not controlled. +Unset optional constraints default to vehicle specifications. **TOPICS:** goto_setpoint @@ -12,22 +18,22 @@ Position and (optional) heading setpoints with corresponding speed constraints. | 명칭 | 형식 | Unit [Frame] | Range/Enum | 설명 | | ----------------------------------------------------------------------------------------------------------------- | ------------ | ---------------------------------------------------------------- | ---------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| timestamp | `uint64` | | | time since system start (microseconds) | -| position | `float32[3]` | m | | NED local world frame | +| timestamp | `uint64` | us | | Time since system start | +| position | `float32[3]` | m [NED] | | NED local world frame | | flag_control_heading | `bool` | | | true if heading is to be controlled | | heading | `float32` | | | (optional) [rad] [-pi,pi] from North | | flag_set_max_horizontal_speed | `bool` | | | true if setting a non-default horizontal speed limit | -| max_horizontal_speed | `float32` | | | (optional) [m/s] maximum speed (absolute) in the NE-plane | +| max_horizontal_speed | `float32` | m/s | | (optional) Maximum speed (absolute) in the NE-plane | | flag_set_max_vertical_speed | `bool` | | | true if setting a non-default vertical speed limit | -| max_vertical_speed | `float32` | | | (optional) [m/s] maximum speed (absolute) in the D-axis | +| max_vertical_speed | `float32` | m/s | | (optional) Maximum speed (absolute) in the D-axis | | flag_set_max_heading_rate | `bool` | | | true if setting a non-default heading rate limit | -| max_heading_rate | `float32` | | | (optional) [rad/s] maximum heading rate (absolute) | +| max_heading_rate | `float32` | rad/s | | (optional) Maximum heading rate (absolute) | ## Constants -| 명칭 | 형식 | Value | 설명 | -| -------------------------------------------------------------------- | -------- | ----- | -- | -| MESSAGE_VERSION | `uint32` | 0 | | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------ | -------- | ----- | -- | +| MESSAGE_VERSION | `uint32` | 0 | | ## Source Message @@ -38,31 +44,32 @@ Click here to see original file ```c # Position and (optional) heading setpoints with corresponding speed constraints -# Setpoints are intended as inputs to position and heading smoothers, respectively -# Setpoints do not need to be kinematically consistent -# Optional heading setpoints may be specified as controlled by the respective flag -# Unset optional setpoints are not controlled -# Unset optional constraints default to vehicle specifications +# +# Setpoints are intended as inputs to position and heading smoothers, respectively. +# Setpoints do not need to be kinematically consistent. +# Optional heading setpoints may be specified as controlled by the respective flag. +# Unset optional setpoints are not controlled. +# Unset optional constraints default to vehicle specifications. uint32 MESSAGE_VERSION = 0 -uint64 timestamp # time since system start (microseconds) +uint64 timestamp # [us] Time since system start # setpoints -float32[3] position # [m] NED local world frame +float32[3] position # [m] [@frame NED] NED local world frame bool flag_control_heading # true if heading is to be controlled float32 heading # (optional) [rad] [-pi,pi] from North # constraints bool flag_set_max_horizontal_speed # true if setting a non-default horizontal speed limit -float32 max_horizontal_speed # (optional) [m/s] maximum speed (absolute) in the NE-plane +float32 max_horizontal_speed # [m/s] (optional) Maximum speed (absolute) in the NE-plane bool flag_set_max_vertical_speed # true if setting a non-default vertical speed limit -float32 max_vertical_speed # (optional) [m/s] maximum speed (absolute) in the D-axis +float32 max_vertical_speed # [m/s] (optional) Maximum speed (absolute) in the D-axis bool flag_set_max_heading_rate # true if setting a non-default heading rate limit -float32 max_heading_rate # (optional) [rad/s] maximum heading rate (absolute) +float32 max_heading_rate # [rad/s] (optional) Maximum heading rate (absolute) ``` ::: diff --git a/docs/ko/msg_docs/GpioConfig.md b/docs/ko/msg_docs/GpioConfig.md index fba68b892d..afd713d6d3 100644 --- a/docs/ko/msg_docs/GpioConfig.md +++ b/docs/ko/msg_docs/GpioConfig.md @@ -20,19 +20,19 @@ GPIO configuration. ## Constants -| 명칭 | 형식 | Value | 설명 | -| ---------------------------------------------------------------------------------------------------------- | -------- | ----- | ------ | -| INPUT | `uint32` | 0 | 0x0000 | -| OUTPUT | `uint32` | 1 | 0x0001 | -| PULLUP | `uint32` | 16 | 0x0010 | -| PULLDOWN | `uint32` | 32 | 0x0020 | -| OPENDRAIN | `uint32` | 256 | 0x0100 | -| INPUT_FLOATING | `uint32` | 0 | 0x0000 | -| INPUT_PULLUP | `uint32` | 16 | 0x0010 | -| INPUT_PULLDOWN | `uint32` | 32 | 0x0020 | -| OUTPUT_PUSHPULL | `uint32` | 0 | 0x0000 | -| OUTPUT_OPENDRAIN | `uint32` | 256 | 0x0100 | -| OUTPUT_OPENDRAIN_PULLUP | `uint32` | 272 | 0x0110 | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------------------------------------------- | -------- | ----- | ------ | +| INPUT | `uint32` | 0 | 0x0000 | +| OUTPUT | `uint32` | 1 | 0x0001 | +| PULLUP | `uint32` | 16 | 0x0010 | +| PULLDOWN | `uint32` | 32 | 0x0020 | +| OPENDRAIN | `uint32` | 256 | 0x0100 | +| INPUT_FLOATING | `uint32` | 0 | 0x0000 | +| INPUT_PULLUP | `uint32` | 16 | 0x0010 | +| INPUT_PULLDOWN | `uint32` | 32 | 0x0020 | +| OUTPUT_PUSHPULL | `uint32` | 0 | 0x0000 | +| OUTPUT_OPENDRAIN | `uint32` | 256 | 0x0100 | +| OUTPUT_OPENDRAIN_PULLUP | `uint32` | 272 | 0x0110 | ## Source Message diff --git a/docs/ko/msg_docs/GpioIn.md b/docs/ko/msg_docs/GpioIn.md index 5bbaf4ae51..8ef9a7e3bd 100644 --- a/docs/ko/msg_docs/GpioIn.md +++ b/docs/ko/msg_docs/GpioIn.md @@ -18,9 +18,9 @@ GPIO mask and state. ## Constants -| 명칭 | 형식 | Value | 설명 | -| ---------------------------------------------------------------- | ------- | ----- | -- | -| MAX_INSTANCES | `uint8` | 8 | | +| 명칭 | 형식 | Value | 설명 | +| -------------------------------------------------------------- | ------- | ----- | -- | +| MAX_INSTANCES | `uint8` | 8 | | ## Source Message diff --git a/docs/ko/msg_docs/GpsDump.md b/docs/ko/msg_docs/GpsDump.md index a0afd2f854..cc6d37a6fe 100644 --- a/docs/ko/msg_docs/GpsDump.md +++ b/docs/ko/msg_docs/GpsDump.md @@ -20,11 +20,11 @@ This message is used to dump the raw gps communication to the log. ## Constants -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------------------------- | ------- | ----- | -- | -| INSTANCE_MAIN | `uint8` | 0 | | -| INSTANCE_SECONDARY | `uint8` | 1 | | -| ORB_QUEUE_LENGTH | `uint8` | 16 | | +| 명칭 | 형식 | Value | 설명 | +| ----------------------------------------------------------------------------------------- | ------- | ----- | -- | +| INSTANCE_MAIN | `uint8` | 0 | | +| INSTANCE_SECONDARY | `uint8` | 1 | | +| ORB_QUEUE_LENGTH | `uint8` | 16 | | ## Source Message diff --git a/docs/ko/msg_docs/GpsInjectData.md b/docs/ko/msg_docs/GpsInjectData.md index 041afba713..39de9ec10e 100644 --- a/docs/ko/msg_docs/GpsInjectData.md +++ b/docs/ko/msg_docs/GpsInjectData.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # GpsInjectData (UORB message) -**TOPICS:** gps_injectdata +**TOPICS:** gps_inject_data ## Fields @@ -18,10 +18,10 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------------------------- | ------- | ----- | -- | -| ORB_QUEUE_LENGTH | `uint8` | 8 | | -| MAX_INSTANCES | `uint8` | 2 | | +| 명칭 | 형식 | Value | 설명 | +| ----------------------------------------------------------------------------------------- | ------- | ----- | -- | +| ORB_QUEUE_LENGTH | `uint8` | 8 | | +| MAX_INSTANCES | `uint8` | 2 | | ## Source Message diff --git a/docs/ko/msg_docs/Gripper.md b/docs/ko/msg_docs/Gripper.md index 86e1393f8e..9046e0510e 100644 --- a/docs/ko/msg_docs/Gripper.md +++ b/docs/ko/msg_docs/Gripper.md @@ -17,10 +17,10 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| -------------------------------------------------------------------- | ------ | ----- | -- | -| COMMAND_GRAB | `int8` | 0 | | -| COMMAND_RELEASE | `int8` | 1 | | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------ | ------ | ----- | -- | +| COMMAND_GRAB | `int8` | 0 | | +| COMMAND_RELEASE | `int8` | 1 | | ## Source Message diff --git a/docs/ko/msg_docs/HeaterStatus.md b/docs/ko/msg_docs/HeaterStatus.md index d587e119d5..663b0ae165 100644 --- a/docs/ko/msg_docs/HeaterStatus.md +++ b/docs/ko/msg_docs/HeaterStatus.md @@ -25,10 +25,10 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| ---------------------------------------------------------- | ------- | ----- | -- | -| MODE_GPIO | `uint8` | 1 | | -| MODE_PX4IO | `uint8` | 2 | | +| 명칭 | 형식 | Value | 설명 | +| -------------------------------------------------------- | ------- | ----- | -- | +| MODE_GPIO | `uint8` | 1 | | +| MODE_PX4IO | `uint8` | 2 | | ## Source Message diff --git a/docs/ko/msg_docs/HomePosition.md b/docs/ko/msg_docs/HomePosition.md index 1dca6ffb41..1952ef623f 100644 --- a/docs/ko/msg_docs/HomePosition.md +++ b/docs/ko/msg_docs/HomePosition.md @@ -30,9 +30,9 @@ GPS home position in WGS84 coordinates. ## Constants -| 명칭 | 형식 | Value | 설명 | -| -------------------------------------------------------------------- | -------- | ----- | -- | -| MESSAGE_VERSION | `uint32` | 1 | | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------ | -------- | ----- | -- | +| MESSAGE_VERSION | `uint32` | 1 | | ## Source Message diff --git a/docs/ko/msg_docs/HomePositionV0.md b/docs/ko/msg_docs/HomePositionV0.md index 8fcde53cb5..96c499ab26 100644 --- a/docs/ko/msg_docs/HomePositionV0.md +++ b/docs/ko/msg_docs/HomePositionV0.md @@ -6,7 +6,7 @@ pageClass: is-wide-page GPS home position in WGS84 coordinates. -**TOPICS:** home_positionv0 +**TOPICS:** home_position_v0 ## Fields @@ -28,9 +28,9 @@ GPS home position in WGS84 coordinates. ## Constants -| 명칭 | 형식 | Value | 설명 | -| -------------------------------------------------------------------- | -------- | ----- | -- | -| MESSAGE_VERSION | `uint32` | 0 | | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------ | -------- | ----- | -- | +| MESSAGE_VERSION | `uint32` | 0 | | ## Source Message diff --git a/docs/ko/msg_docs/HoverThrustEstimate.md b/docs/ko/msg_docs/HoverThrustEstimate.md index d39e2dea3d..4352290705 100644 --- a/docs/ko/msg_docs/HoverThrustEstimate.md +++ b/docs/ko/msg_docs/HoverThrustEstimate.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # HoverThrustEstimate (UORB message) -**TOPICS:** hover_thrustestimate +**TOPICS:** hover_thrust_estimate ## Fields diff --git a/docs/ko/msg_docs/InputRc.md b/docs/ko/msg_docs/InputRc.md index 130ad9ada4..be71c98fc2 100644 --- a/docs/ko/msg_docs/InputRc.md +++ b/docs/ko/msg_docs/InputRc.md @@ -28,26 +28,26 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | ----- | -------------------------------------------------------------------------------------------------------------------------------- | -| RC_INPUT_SOURCE_UNKNOWN | `uint8` | 0 | | -| RC_INPUT_SOURCE_PX4FMU_PPM | `uint8` | 1 | | -| RC_INPUT_SOURCE_PX4IO_PPM | `uint8` | 2 | | -| RC_INPUT_SOURCE_PX4IO_SPEKTRUM | `uint8` | 3 | | -| RC_INPUT_SOURCE_PX4IO_SBUS | `uint8` | 4 | | -| RC_INPUT_SOURCE_PX4IO_ST24 | `uint8` | 5 | | -| RC_INPUT_SOURCE_MAVLINK | `uint8` | 6 | | -| RC_INPUT_SOURCE_QURT | `uint8` | 7 | | -| RC_INPUT_SOURCE_PX4FMU_SPEKTRUM | `uint8` | 8 | | -| RC_INPUT_SOURCE_PX4FMU_SBUS | `uint8` | 9 | | -| RC_INPUT_SOURCE_PX4FMU_ST24 | `uint8` | 10 | | -| RC_INPUT_SOURCE_PX4FMU_SUMD | `uint8` | 11 | | -| RC_INPUT_SOURCE_PX4FMU_DSM | `uint8` | 12 | | -| RC_INPUT_SOURCE_PX4IO_SUMD | `uint8` | 13 | | -| RC_INPUT_SOURCE_PX4FMU_CRSF | `uint8` | 14 | | -| RC_INPUT_SOURCE_PX4FMU_GHST | `uint8` | 15 | | -| RC_INPUT_MAX_CHANNELS | `uint8` | 18 | Maximum number of R/C input channels in the system. S.Bus has up to 18 channels. | -| RSSI_MAX | `int8` | 100 | | +| 명칭 | 형식 | Value | 설명 | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | ----- | -------------------------------------------------------------------------------------------------------------------------------- | +| RC_INPUT_SOURCE_UNKNOWN | `uint8` | 0 | | +| RC_INPUT_SOURCE_PX4FMU_PPM | `uint8` | 1 | | +| RC_INPUT_SOURCE_PX4IO_PPM | `uint8` | 2 | | +| RC_INPUT_SOURCE_PX4IO_SPEKTRUM | `uint8` | 3 | | +| RC_INPUT_SOURCE_PX4IO_SBUS | `uint8` | 4 | | +| RC_INPUT_SOURCE_PX4IO_ST24 | `uint8` | 5 | | +| RC_INPUT_SOURCE_MAVLINK | `uint8` | 6 | | +| RC_INPUT_SOURCE_QURT | `uint8` | 7 | | +| RC_INPUT_SOURCE_PX4FMU_SPEKTRUM | `uint8` | 8 | | +| RC_INPUT_SOURCE_PX4FMU_SBUS | `uint8` | 9 | | +| RC_INPUT_SOURCE_PX4FMU_ST24 | `uint8` | 10 | | +| RC_INPUT_SOURCE_PX4FMU_SUMD | `uint8` | 11 | | +| RC_INPUT_SOURCE_PX4FMU_DSM | `uint8` | 12 | | +| RC_INPUT_SOURCE_PX4IO_SUMD | `uint8` | 13 | | +| RC_INPUT_SOURCE_PX4FMU_CRSF | `uint8` | 14 | | +| RC_INPUT_SOURCE_PX4FMU_GHST | `uint8` | 15 | | +| RC_INPUT_MAX_CHANNELS | `uint8` | 18 | Maximum number of R/C input channels in the system. S.Bus has up to 18 channels. | +| RSSI_MAX | `int8` | 100 | | ## Source Message diff --git a/docs/ko/msg_docs/InternalCombustionEngineControl.md b/docs/ko/msg_docs/InternalCombustionEngineControl.md index a7d6822f00..9ba4466e4a 100644 --- a/docs/ko/msg_docs/InternalCombustionEngineControl.md +++ b/docs/ko/msg_docs/InternalCombustionEngineControl.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # InternalCombustionEngineControl (UORB message) -**TOPICS:** internal_combustionengine_control +**TOPICS:** internal_combustion_engine_control ## Fields diff --git a/docs/ko/msg_docs/InternalCombustionEngineStatus.md b/docs/ko/msg_docs/InternalCombustionEngineStatus.md index 99fc9fae60..73d177f43c 100644 --- a/docs/ko/msg_docs/InternalCombustionEngineStatus.md +++ b/docs/ko/msg_docs/InternalCombustionEngineStatus.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # InternalCombustionEngineStatus (UORB message) -**TOPICS:** internal_combustionengine_status +**TOPICS:** internal_combustion_engine_status ## Fields @@ -36,36 +36,36 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ------ | -------------------------------------------------------------------------------------- | -| STATE_STOPPED | `uint8` | 0 | The engine is not running. This is the default state. | -| STATE_STARTING | `uint8` | 1 | The engine is starting. This is a transient state. | -| STATE_RUNNING | `uint8` | 2 | The engine is running normally. | -| STATE_FAULT | `uint8` | 3 | The engine can no longer function. | -| FLAG_GENERAL_ERROR | `uint32` | 1 | General error. | -| FLAG_CRANKSHAFT_SENSOR_ERROR_SUPPORTED | `uint32` | 2 | Error of the crankshaft sensor. This flag is optional. | -| FLAG_CRANKSHAFT_SENSOR_ERROR | `uint32` | 4 | | -| FLAG_TEMPERATURE_SUPPORTED | `uint32` | 8 | Temperature levels. These flags are optional | -| FLAG_TEMPERATURE_BELOW_NOMINAL | `uint32` | 16 | Under-temperature warning | -| FLAG_TEMPERATURE_ABOVE_NOMINAL | `uint32` | 32 | Over-temperature warning | -| FLAG_TEMPERATURE_OVERHEATING | `uint32` | 64 | Critical overheating | -| FLAG_TEMPERATURE_EGT_ABOVE_NOMINAL | `uint32` | 128 | Exhaust gas over-temperature warning | -| FLAG_FUEL_PRESSURE_SUPPORTED | `uint32` | 256 | Fuel pressure. These flags are optional | -| FLAG_FUEL_PRESSURE_BELOW_NOMINAL | `uint32` | 512 | Under-pressure warning | -| FLAG_FUEL_PRESSURE_ABOVE_NOMINAL | `uint32` | 1024 | Over-pressure warning | -| FLAG_DETONATION_SUPPORTED | `uint32` | 2048 | Detonation warning. This flag is optional. | -| FLAG_DETONATION_OBSERVED | `uint32` | 4096 | Detonation condition observed warning | -| FLAG_MISFIRE_SUPPORTED | `uint32` | 8192 | Misfire warning. This flag is optional. | -| FLAG_MISFIRE_OBSERVED | `uint32` | 16384 | Misfire condition observed warning | -| FLAG_OIL_PRESSURE_SUPPORTED | `uint32` | 32768 | Oil pressure. These flags are optional | -| FLAG_OIL_PRESSURE_BELOW_NOMINAL | `uint32` | 65536 | Under-pressure warning | -| FLAG_OIL_PRESSURE_ABOVE_NOMINAL | `uint32` | 131072 | Over-pressure warning | -| FLAG_DEBRIS_SUPPORTED | `uint32` | 262144 | Debris warning. This flag is optional | -| FLAG_DEBRIS_DETECTED | `uint32` | 524288 | Detection of debris warning | -| SPARK_PLUG_SINGLE | `uint8` | 0 | | -| SPARK_PLUG_FIRST_ACTIVE | `uint8` | 1 | | -| SPARK_PLUG_SECOND_ACTIVE | `uint8` | 2 | | -| SPARK_PLUG_BOTH_ACTIVE | `uint8` | 3 | | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ------ | -------------------------------------------------------------------------------------- | +| STATE_STOPPED | `uint8` | 0 | The engine is not running. This is the default state. | +| STATE_STARTING | `uint8` | 1 | The engine is starting. This is a transient state. | +| STATE_RUNNING | `uint8` | 2 | The engine is running normally. | +| STATE_FAULT | `uint8` | 3 | The engine can no longer function. | +| FLAG_GENERAL_ERROR | `uint32` | 1 | General error. | +| FLAG_CRANKSHAFT_SENSOR_ERROR_SUPPORTED | `uint32` | 2 | Error of the crankshaft sensor. This flag is optional. | +| FLAG_CRANKSHAFT_SENSOR_ERROR | `uint32` | 4 | | +| FLAG_TEMPERATURE_SUPPORTED | `uint32` | 8 | Temperature levels. These flags are optional | +| FLAG_TEMPERATURE_BELOW_NOMINAL | `uint32` | 16 | Under-temperature warning | +| FLAG_TEMPERATURE_ABOVE_NOMINAL | `uint32` | 32 | Over-temperature warning | +| FLAG_TEMPERATURE_OVERHEATING | `uint32` | 64 | Critical overheating | +| FLAG_TEMPERATURE_EGT_ABOVE_NOMINAL | `uint32` | 128 | Exhaust gas over-temperature warning | +| FLAG_FUEL_PRESSURE_SUPPORTED | `uint32` | 256 | Fuel pressure. These flags are optional | +| FLAG_FUEL_PRESSURE_BELOW_NOMINAL | `uint32` | 512 | Under-pressure warning | +| FLAG_FUEL_PRESSURE_ABOVE_NOMINAL | `uint32` | 1024 | Over-pressure warning | +| FLAG_DETONATION_SUPPORTED | `uint32` | 2048 | Detonation warning. This flag is optional. | +| FLAG_DETONATION_OBSERVED | `uint32` | 4096 | Detonation condition observed warning | +| FLAG_MISFIRE_SUPPORTED | `uint32` | 8192 | Misfire warning. This flag is optional. | +| FLAG_MISFIRE_OBSERVED | `uint32` | 16384 | Misfire condition observed warning | +| FLAG_OIL_PRESSURE_SUPPORTED | `uint32` | 32768 | Oil pressure. These flags are optional | +| FLAG_OIL_PRESSURE_BELOW_NOMINAL | `uint32` | 65536 | Under-pressure warning | +| FLAG_OIL_PRESSURE_ABOVE_NOMINAL | `uint32` | 131072 | Over-pressure warning | +| FLAG_DEBRIS_SUPPORTED | `uint32` | 262144 | Debris warning. This flag is optional | +| FLAG_DEBRIS_DETECTED | `uint32` | 524288 | Detection of debris warning | +| SPARK_PLUG_SINGLE | `uint8` | 0 | | +| SPARK_PLUG_FIRST_ACTIVE | `uint8` | 1 | | +| SPARK_PLUG_SECOND_ACTIVE | `uint8` | 2 | | +| SPARK_PLUG_BOTH_ACTIVE | `uint8` | 3 | | ## Source Message diff --git a/docs/ko/msg_docs/LandingGear.md b/docs/ko/msg_docs/LandingGear.md index 3781f1816e..018f490094 100644 --- a/docs/ko/msg_docs/LandingGear.md +++ b/docs/ko/msg_docs/LandingGear.md @@ -15,11 +15,11 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| -------------------------------------------------------- | ------ | ----- | ---------------------- | -| GEAR_UP | `int8` | 1 | landing gear up | -| GEAR_DOWN | `int8` | -1 | landing gear down | -| GEAR_KEEP | `int8` | 0 | keep the current state | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------ | ------ | ----- | ---------------------- | +| GEAR_UP | `int8` | 1 | landing gear up | +| GEAR_DOWN | `int8` | -1 | landing gear down | +| GEAR_KEEP | `int8` | 0 | keep the current state | ## Source Message diff --git a/docs/ko/msg_docs/LandingGearWheel.md b/docs/ko/msg_docs/LandingGearWheel.md index a815e88f5f..6b890aec5d 100644 --- a/docs/ko/msg_docs/LandingGearWheel.md +++ b/docs/ko/msg_docs/LandingGearWheel.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # LandingGearWheel (UORB message) -**TOPICS:** landing_gearwheel +**TOPICS:** landing_gear_wheel ## Fields diff --git a/docs/ko/msg_docs/LandingTargetInnovations.md b/docs/ko/msg_docs/LandingTargetInnovations.md index e82715c4a9..685eef10ce 100644 --- a/docs/ko/msg_docs/LandingTargetInnovations.md +++ b/docs/ko/msg_docs/LandingTargetInnovations.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # LandingTargetInnovations (UORB message) -**TOPICS:** landing_targetinnovations +**TOPICS:** landing_target_innovations ## Fields diff --git a/docs/ko/msg_docs/LandingTargetPose.md b/docs/ko/msg_docs/LandingTargetPose.md index 404e715203..c39dc87b5d 100644 --- a/docs/ko/msg_docs/LandingTargetPose.md +++ b/docs/ko/msg_docs/LandingTargetPose.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Relative position of precision land target in navigation (body fixed, north aligned, NED) and inertial (world fixed, north aligned, NED) frames. -**TOPICS:** landing_targetpose +**TOPICS:** landing_target_pose ## Fields diff --git a/docs/ko/msg_docs/LateralControlConfiguration.md b/docs/ko/msg_docs/LateralControlConfiguration.md index cac7d54072..04ea25be03 100644 --- a/docs/ko/msg_docs/LateralControlConfiguration.md +++ b/docs/ko/msg_docs/LateralControlConfiguration.md @@ -4,22 +4,24 @@ pageClass: is-wide-page # LateralControlConfiguration (UORB message) -Fixed Wing Lateral Control Configuration message. Used by the fw_lateral_longitudinal_control module to constrain FixedWingLateralSetpoint messages. +Fixed Wing Lateral Control Configuration message. -**TOPICS:** lateral_controlconfiguration +Used by the fw_lateral_longitudinal_control module to constrain FixedWingLateralSetpoint messages. + +**TOPICS:** lateral_control_configuration ## Fields | 명칭 | 형식 | Unit [Frame] | Range/Enum | 설명 | | ----------------------------------------------------------- | --------- | ---------------------------------------------------------------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------- | -| timestamp | `uint64` | | | time since system start (microseconds) | -| lateral_accel_max | `float32` | m/s^2 | | currently maps to a maximum roll angle, accel_max = tan(roll_max) \* GRAVITY | +| timestamp | `uint64` | us | | Time since system start | +| lateral_accel_max | `float32` | m/s^2 | | Currently maps to a maximum roll angle, accel_max = tan(roll_max) \* GRAVITY | ## Constants -| 명칭 | 형식 | Value | 설명 | -| -------------------------------------------------------------------- | -------- | ----- | -- | -| MESSAGE_VERSION | `uint32` | 0 | | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------ | -------- | ----- | -- | +| MESSAGE_VERSION | `uint32` | 0 | | ## Source Message @@ -30,13 +32,14 @@ Click here to see original file ```c # Fixed Wing Lateral Control Configuration message +# # Used by the fw_lateral_longitudinal_control module to constrain FixedWingLateralSetpoint messages. uint32 MESSAGE_VERSION = 0 -uint64 timestamp # time since system start (microseconds) +uint64 timestamp # [us] Time since system start -float32 lateral_accel_max # [m/s^2] currently maps to a maximum roll angle, accel_max = tan(roll_max) * GRAVITY +float32 lateral_accel_max # [m/s^2] Currently maps to a maximum roll angle, accel_max = tan(roll_max) * GRAVITY ``` ::: diff --git a/docs/ko/msg_docs/LaunchDetectionStatus.md b/docs/ko/msg_docs/LaunchDetectionStatus.md index 5ef459164b..4a4a814dde 100644 --- a/docs/ko/msg_docs/LaunchDetectionStatus.md +++ b/docs/ko/msg_docs/LaunchDetectionStatus.md @@ -6,22 +6,23 @@ pageClass: is-wide-page Status of the launch detection state machine (fixed-wing only). -**TOPICS:** launch_detectionstatus +**TOPICS:** launch_detection_status ## Fields -| 명칭 | 형식 | Unit [Frame] | Range/Enum | 설명 | -| ---------------------------------------------------------------- | -------- | ---------------------------------------------------------------- | ---------- | --------------------------------------------------------- | -| timestamp | `uint64` | | | time since system start (microseconds) | -| launch_detection_state | `uint8` | | | | +| 명칭 | 형식 | Unit [Frame] | Range/Enum | 설명 | +| ------------------------------------------------------------------------------------------------ | -------- | ---------------------------------------------------------------- | ---------- | -------------------------------------------------------------------------------------------------------------------------------- | +| timestamp | `uint64` | | | time since system start (microseconds) | +| launch_detection_state | `uint8` | | | | +| selected_control_surface_disarmed | `bool` | | | flag indicating whether selected actuators should kept disarmed (have to be configured in control allocation) | ## Constants -| 명칭 | 형식 | Value | 설명 | -| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | ----- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| STATE_WAITING_FOR_LAUNCH | `uint8` | 0 | waiting for launch | -| STATE_LAUNCH_DETECTED_DISABLED_MOTOR | `uint8` | 1 | launch detected, but keep motor(s) disabled (e.g. because it can't spin freely while on catapult) | -| STATE_FLYING | `uint8` | 2 | launch detected, use normal takeoff/flying configuration | +| 명칭 | 형식 | Value | 설명 | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | ----- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| STATE_WAITING_FOR_LAUNCH | `uint8` | 0 | waiting for launch | +| STATE_LAUNCH_DETECTED_DISABLED_MOTOR | `uint8` | 1 | launch detected, but keep motor(s) disabled (e.g. because it can't spin freely while on catapult) | +| STATE_FLYING | `uint8` | 2 | launch detected, use normal takeoff/flying configuration | ## Source Message @@ -40,6 +41,8 @@ uint8 STATE_LAUNCH_DETECTED_DISABLED_MOTOR = 1 # launch detected, but keep moto uint8 STATE_FLYING = 2 # launch detected, use normal takeoff/flying configuration uint8 launch_detection_state + +bool selected_control_surface_disarmed # [-] flag indicating whether selected actuators should kept disarmed (have to be configured in control allocation) ``` ::: diff --git a/docs/ko/msg_docs/LedControl.md b/docs/ko/msg_docs/LedControl.md index 3ee8b926aa..3edd88a45e 100644 --- a/docs/ko/msg_docs/LedControl.md +++ b/docs/ko/msg_docs/LedControl.md @@ -21,27 +21,27 @@ LED control: control a single or multiple LED's. These are the externally visibl ## Constants -| 명칭 | 형식 | Value | 설명 | -| --------------------------------------------------------------------------------------------- | ------- | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------ | -| COLOR_OFF | `uint8` | 0 | this is only used in the drivers | -| COLOR_RED | `uint8` | 1 | | -| COLOR_GREEN | `uint8` | 2 | | -| COLOR_BLUE | `uint8` | 3 | | -| COLOR_YELLOW | `uint8` | 4 | | -| COLOR_PURPLE | `uint8` | 5 | | -| COLOR_AMBER | `uint8` | 6 | | -| COLOR_CYAN | `uint8` | 7 | | -| COLOR_WHITE | `uint8` | 8 | | -| MODE_OFF | `uint8` | 0 | turn LED off | -| MODE_ON | `uint8` | 1 | turn LED on | -| MODE_DISABLED | `uint8` | 2 | disable this priority (switch to lower priority setting) | -| MODE_BLINK_SLOW | `uint8` | 3 | | -| MODE_BLINK_NORMAL | `uint8` | 4 | | -| MODE_BLINK_FAST | `uint8` | 5 | | -| MODE_BREATHE | `uint8` | 6 | continuously increase & decrease brightness (solid color if driver does not support it) | -| MODE_FLASH | `uint8` | 7 | two fast blinks (on/off) with timing as in MODE_BLINK_FAST and then off for a while | -| MAX_PRIORITY | `uint8` | 2 | maximum priority (minimum is 0) | -| ORB_QUEUE_LENGTH | `uint8` | 8 | needs to match BOARD_MAX_LEDS | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------------------------------- | ------- | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------ | +| COLOR_OFF | `uint8` | 0 | this is only used in the drivers | +| COLOR_RED | `uint8` | 1 | | +| COLOR_GREEN | `uint8` | 2 | | +| COLOR_BLUE | `uint8` | 3 | | +| COLOR_YELLOW | `uint8` | 4 | | +| COLOR_PURPLE | `uint8` | 5 | | +| COLOR_AMBER | `uint8` | 6 | | +| COLOR_CYAN | `uint8` | 7 | | +| COLOR_WHITE | `uint8` | 8 | | +| MODE_OFF | `uint8` | 0 | turn LED off | +| MODE_ON | `uint8` | 1 | turn LED on | +| MODE_DISABLED | `uint8` | 2 | disable this priority (switch to lower priority setting) | +| MODE_BLINK_SLOW | `uint8` | 3 | | +| MODE_BLINK_NORMAL | `uint8` | 4 | | +| MODE_BLINK_FAST | `uint8` | 5 | | +| MODE_BREATHE | `uint8` | 6 | continuously increase & decrease brightness (solid color if driver does not support it) | +| MODE_FLASH | `uint8` | 7 | two fast blinks (on/off) with timing as in MODE_BLINK_FAST and then off for a while | +| MAX_PRIORITY | `uint8` | 2 | maximum priority (minimum is 0) | +| ORB_QUEUE_LENGTH | `uint8` | 8 | needs to match BOARD_MAX_LEDS | ## Source Message diff --git a/docs/ko/msg_docs/LogMessage.md b/docs/ko/msg_docs/LogMessage.md index 96b04eb262..52a96f62d5 100644 --- a/docs/ko/msg_docs/LogMessage.md +++ b/docs/ko/msg_docs/LogMessage.md @@ -18,9 +18,9 @@ A logging message, output with PX4_WARN, PX4_ERR, PX4_INFO. ## Constants -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------------------------- | ------- | ----- | -- | -| ORB_QUEUE_LENGTH | `uint8` | 4 | | +| 명칭 | 형식 | Value | 설명 | +| ----------------------------------------------------------------------------------------- | ------- | ----- | -- | +| ORB_QUEUE_LENGTH | `uint8` | 4 | | ## Source Message diff --git a/docs/ko/msg_docs/LoggerStatus.md b/docs/ko/msg_docs/LoggerStatus.md index 59f5a9bb25..1a56229f34 100644 --- a/docs/ko/msg_docs/LoggerStatus.md +++ b/docs/ko/msg_docs/LoggerStatus.md @@ -24,13 +24,13 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------------------------------- | ------- | ----- | -------------------------------------------------------------------------------------------- | -| LOGGER_TYPE_FULL | `uint8` | 0 | Normal, full size log | -| LOGGER_TYPE_MISSION | `uint8` | 1 | reduced mission log (e.g. for geotagging) | -| BACKEND_FILE | `uint8` | 1 | | -| BACKEND_MAVLINK | `uint8` | 2 | | -| BACKEND_ALL | `uint8` | 3 | | +| 명칭 | 형식 | Value | 설명 | +| ----------------------------------------------------------------------------------------------- | ------- | ----- | -------------------------------------------------------------------------------------------- | +| LOGGER_TYPE_FULL | `uint8` | 0 | Normal, full size log | +| LOGGER_TYPE_MISSION | `uint8` | 1 | reduced mission log (e.g. for geotagging) | +| BACKEND_FILE | `uint8` | 1 | | +| BACKEND_MAVLINK | `uint8` | 2 | | +| BACKEND_ALL | `uint8` | 3 | | ## Source Message diff --git a/docs/ko/msg_docs/LongitudinalControlConfiguration.md b/docs/ko/msg_docs/LongitudinalControlConfiguration.md index a9d7c67f20..38c777329f 100644 --- a/docs/ko/msg_docs/LongitudinalControlConfiguration.md +++ b/docs/ko/msg_docs/LongitudinalControlConfiguration.md @@ -4,30 +4,33 @@ pageClass: is-wide-page # LongitudinalControlConfiguration (UORB message) -Fixed Wing Longitudinal Control Configuration message. Used by the fw_lateral_longitudinal_control module and TECS to constrain FixedWingLongitudinalSetpoint messages. and configure the resultant setpoints. +Fixed Wing Longitudinal Control Configuration message. -**TOPICS:** longitudinal_controlconfiguration +Used by the fw_lateral_longitudinal_control module and TECS to constrain FixedWingLongitudinalSetpoint messages +and configure the resultant setpoints. + +**TOPICS:** longitudinal_control_configuration ## Fields | 명칭 | 형식 | Unit [Frame] | Range/Enum | 설명 | | ------------------------------------------------------------------------------------------- | --------- | ---------------------------------------------------------------- | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| timestamp | `uint64` | | | time since system start (microseconds) | -| pitch_min | `float32` | rad | [-pi : pi] | defaults to FW_P_LIM_MIN if NAN. | -| pitch_max | `float32` | rad | [-pi : pi] | defaults to FW_P_LIM_MAX if NAN. | -| throttle_min | `float32` | norm | [0 : 1] | deaults to FW_THR_MIN if NAN. | -| throttle_max | `float32` | norm | [0 : 1] | defaults to FW_THR_MAX if NAN. | -| climb_rate_target | `float32` | m/s | | target climbrate to change altitude. Defaults to FW_T_CLIMB_MAX if NAN. Not used if height_rate is directly set in FixedWingLongitudinalSetpoint. | -| sink_rate_target | `float32` | m/s | | target sinkrate to change altitude. Defaults to FW_T_SINK_MAX if NAN. Not used if height_rate is directly set in FixedWingLongitudinalSetpoint. | -| speed_weight | `float32` | | [0 : 2] | , 0=pitch controls altitude only, 2=pitch controls airspeed only | -| enforce_low_height_condition | `bool` | boolean | | if true, the altitude controller is configured with an alternative timeconstant for tighter altitude tracking | -| disable_underspeed_protection | `bool` | boolean | | if true, underspeed handling is disabled in the altitude controller | +| timestamp | `uint64` | us | | Time since system start | +| pitch_min | `float32` | rad | [-pi : pi] | Defaults to FW_P_LIM_MIN if NAN. | +| pitch_max | `float32` | rad | [-pi : pi] | Defaults to FW_P_LIM_MAX if NAN. | +| throttle_min | `float32` | norm | [0 : 1] | Defaults to FW_THR_MIN if NAN. | +| throttle_max | `float32` | norm | [0 : 1] | Defaults to FW_THR_MAX if NAN. | +| climb_rate_target | `float32` | m/s | | Target climbrate to change altitude. Defaults to FW_T_CLIMB_MAX if NAN. Not used if height_rate is directly set in FixedWingLongitudinalSetpoint. | +| sink_rate_target | `float32` | m/s | | Target sinkrate to change altitude. Defaults to FW_T_SINK_MAX if NAN. Not used if height_rate is directly set in FixedWingLongitudinalSetpoint. | +| speed_weight | `float32` | | [0 : 2] | 0=pitch controls altitude only, 2=pitch controls airspeed only | +| enforce_low_height_condition | `bool` | | | If true, the altitude controller is configured with an alternative timeconstant for tighter altitude tracking | +| disable_underspeed_protection | `bool` | | | If true, underspeed handling is disabled in the altitude controller | ## Constants -| 명칭 | 형식 | Value | 설명 | -| -------------------------------------------------------------------- | -------- | ----- | -- | -| MESSAGE_VERSION | `uint32` | 0 | | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------ | -------- | ----- | -- | +| MESSAGE_VERSION | `uint32` | 0 | | ## Source Message @@ -38,22 +41,23 @@ Click here to see original file ```c # Fixed Wing Longitudinal Control Configuration message +# # Used by the fw_lateral_longitudinal_control module and TECS to constrain FixedWingLongitudinalSetpoint messages # and configure the resultant setpoints. uint32 MESSAGE_VERSION = 0 -uint64 timestamp # time since system start (microseconds) +uint64 timestamp # [us] Time since system start -float32 pitch_min # [rad][@range -pi, pi] defaults to FW_P_LIM_MIN if NAN. -float32 pitch_max # [rad][@range -pi, pi] defaults to FW_P_LIM_MAX if NAN. -float32 throttle_min # [norm] [@range 0,1] deaults to FW_THR_MIN if NAN. -float32 throttle_max # [norm] [@range 0,1] defaults to FW_THR_MAX if NAN. -float32 climb_rate_target # [m/s] target climbrate to change altitude. Defaults to FW_T_CLIMB_MAX if NAN. Not used if height_rate is directly set in FixedWingLongitudinalSetpoint. -float32 sink_rate_target # [m/s] target sinkrate to change altitude. Defaults to FW_T_SINK_MAX if NAN. Not used if height_rate is directly set in FixedWingLongitudinalSetpoint. -float32 speed_weight # [@range 0,2], 0=pitch controls altitude only, 2=pitch controls airspeed only -bool enforce_low_height_condition # [boolean] if true, the altitude controller is configured with an alternative timeconstant for tighter altitude tracking -bool disable_underspeed_protection # [boolean] if true, underspeed handling is disabled in the altitude controller +float32 pitch_min # [rad] [@range -pi, pi] Defaults to FW_P_LIM_MIN if NAN. +float32 pitch_max # [rad] [@range -pi, pi] Defaults to FW_P_LIM_MAX if NAN. +float32 throttle_min # [norm] [@range 0,1] Defaults to FW_THR_MIN if NAN. +float32 throttle_max # [norm] [@range 0,1] Defaults to FW_THR_MAX if NAN. +float32 climb_rate_target # [m/s] Target climbrate to change altitude. Defaults to FW_T_CLIMB_MAX if NAN. Not used if height_rate is directly set in FixedWingLongitudinalSetpoint. +float32 sink_rate_target # [m/s] Target sinkrate to change altitude. Defaults to FW_T_SINK_MAX if NAN. Not used if height_rate is directly set in FixedWingLongitudinalSetpoint. +float32 speed_weight # [-] [@range 0,2] 0=pitch controls altitude only, 2=pitch controls airspeed only +bool enforce_low_height_condition # If true, the altitude controller is configured with an alternative timeconstant for tighter altitude tracking +bool disable_underspeed_protection # If true, underspeed handling is disabled in the altitude controller ``` ::: diff --git a/docs/ko/msg_docs/MagWorkerData.md b/docs/ko/msg_docs/MagWorkerData.md index d064f7b94c..864c6a25fc 100644 --- a/docs/ko/msg_docs/MagWorkerData.md +++ b/docs/ko/msg_docs/MagWorkerData.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # MagWorkerData (UORB message) -**TOPICS:** mag_workerdata +**TOPICS:** mag_worker_data ## Fields @@ -23,9 +23,9 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------ | ------- | ----- | -- | -| MAX_MAGS | `uint8` | 4 | | +| 명칭 | 형식 | Value | 설명 | +| ---------------------------------------------------- | ------- | ----- | -- | +| MAX_MAGS | `uint8` | 4 | | ## Source Message diff --git a/docs/ko/msg_docs/MagnetometerBiasEstimate.md b/docs/ko/msg_docs/MagnetometerBiasEstimate.md index 3b3ff1987c..14fddaece3 100644 --- a/docs/ko/msg_docs/MagnetometerBiasEstimate.md +++ b/docs/ko/msg_docs/MagnetometerBiasEstimate.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # MagnetometerBiasEstimate (UORB message) -**TOPICS:** magnetometer_biasestimate +**TOPICS:** magnetometer_bias_estimate ## Fields diff --git a/docs/ko/msg_docs/ManualControlSetpoint.md b/docs/ko/msg_docs/ManualControlSetpoint.md index 7cbccf2f40..a3188dfce0 100644 --- a/docs/ko/msg_docs/ManualControlSetpoint.md +++ b/docs/ko/msg_docs/ManualControlSetpoint.md @@ -30,17 +30,17 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------------------------- | -------- | ----- | ---------------------------------------------------------------- | -| MESSAGE_VERSION | `uint32` | 0 | | -| SOURCE_UNKNOWN | `uint8` | 0 | | -| SOURCE_RC | `uint8` | 1 | radio control (input_rc) | -| SOURCE_MAVLINK_0 | `uint8` | 2 | mavlink instance 0 | -| SOURCE_MAVLINK_1 | `uint8` | 3 | mavlink instance 1 | -| SOURCE_MAVLINK_2 | `uint8` | 4 | mavlink instance 2 | -| SOURCE_MAVLINK_3 | `uint8` | 5 | mavlink instance 3 | -| SOURCE_MAVLINK_4 | `uint8` | 6 | mavlink instance 4 | -| SOURCE_MAVLINK_5 | `uint8` | 7 | mavlink instance 5 | +| 명칭 | 형식 | Value | 설명 | +| ----------------------------------------------------------------------------------------- | -------- | ----- | ---------------------------------------------------------------- | +| MESSAGE_VERSION | `uint32` | 0 | | +| SOURCE_UNKNOWN | `uint8` | 0 | | +| SOURCE_RC | `uint8` | 1 | radio control (input_rc) | +| SOURCE_MAVLINK_0 | `uint8` | 2 | mavlink instance 0 | +| SOURCE_MAVLINK_1 | `uint8` | 3 | mavlink instance 1 | +| SOURCE_MAVLINK_2 | `uint8` | 4 | mavlink instance 2 | +| SOURCE_MAVLINK_3 | `uint8` | 5 | mavlink instance 3 | +| SOURCE_MAVLINK_4 | `uint8` | 6 | mavlink instance 4 | +| SOURCE_MAVLINK_5 | `uint8` | 7 | mavlink instance 5 | ## Source Message diff --git a/docs/ko/msg_docs/ManualControlSwitches.md b/docs/ko/msg_docs/ManualControlSwitches.md index e5bbf63d8a..4aee61004a 100644 --- a/docs/ko/msg_docs/ManualControlSwitches.md +++ b/docs/ko/msg_docs/ManualControlSwitches.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # ManualControlSwitches (UORB message) -**TOPICS:** manual_controlswitches +**TOPICS:** manual_control_switches ## Fields @@ -29,20 +29,20 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| --------------------------------------------------------------------------------------------- | ------- | ----- | ---------------------------------------------------- | -| SWITCH_POS_NONE | `uint8` | 0 | switch is not mapped | -| SWITCH_POS_ON | `uint8` | 1 | switch activated (value = 1) | -| SWITCH_POS_MIDDLE | `uint8` | 2 | middle position (value = 0) | -| SWITCH_POS_OFF | `uint8` | 3 | switch not activated (value = -1) | -| MODE_SLOT_NONE | `uint8` | 0 | no mode slot assigned | -| MODE_SLOT_1 | `uint8` | 1 | mode slot 1 selected | -| MODE_SLOT_2 | `uint8` | 2 | mode slot 2 selected | -| MODE_SLOT_3 | `uint8` | 3 | mode slot 3 selected | -| MODE_SLOT_4 | `uint8` | 4 | mode slot 4 selected | -| MODE_SLOT_5 | `uint8` | 5 | mode slot 5 selected | -| MODE_SLOT_6 | `uint8` | 6 | mode slot 6 selected | -| MODE_SLOT_NUM | `uint8` | 6 | number of slots | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------------------------------- | ------- | ----- | ---------------------------------------------------- | +| SWITCH_POS_NONE | `uint8` | 0 | switch is not mapped | +| SWITCH_POS_ON | `uint8` | 1 | switch activated (value = 1) | +| SWITCH_POS_MIDDLE | `uint8` | 2 | middle position (value = 0) | +| SWITCH_POS_OFF | `uint8` | 3 | switch not activated (value = -1) | +| MODE_SLOT_NONE | `uint8` | 0 | no mode slot assigned | +| MODE_SLOT_1 | `uint8` | 1 | mode slot 1 selected | +| MODE_SLOT_2 | `uint8` | 2 | mode slot 2 selected | +| MODE_SLOT_3 | `uint8` | 3 | mode slot 3 selected | +| MODE_SLOT_4 | `uint8` | 4 | mode slot 4 selected | +| MODE_SLOT_5 | `uint8` | 5 | mode slot 5 selected | +| MODE_SLOT_6 | `uint8` | 6 | mode slot 6 selected | +| MODE_SLOT_NUM | `uint8` | 6 | number of slots | ## Source Message diff --git a/docs/ko/msg_docs/MavlinkLog.md b/docs/ko/msg_docs/MavlinkLog.md index ddc17e1344..8a429f0563 100644 --- a/docs/ko/msg_docs/MavlinkLog.md +++ b/docs/ko/msg_docs/MavlinkLog.md @@ -16,9 +16,9 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------------------------- | ------- | ----- | -- | -| ORB_QUEUE_LENGTH | `uint8` | 8 | | +| 명칭 | 형식 | Value | 설명 | +| ----------------------------------------------------------------------------------------- | ------- | ----- | -- | +| ORB_QUEUE_LENGTH | `uint8` | 8 | | ## Source Message diff --git a/docs/ko/msg_docs/MavlinkTunnel.md b/docs/ko/msg_docs/MavlinkTunnel.md index d32551de64..d327070f5f 100644 --- a/docs/ko/msg_docs/MavlinkTunnel.md +++ b/docs/ko/msg_docs/MavlinkTunnel.md @@ -21,19 +21,19 @@ MAV_TUNNEL_PAYLOAD_TYPE enum. ## Constants -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------- | ----- | ---------------------------------------- | -| MAV_TUNNEL_PAYLOAD_TYPE_UNKNOWN | `uint8` | 0 | Encoding of payload unknown | -| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED0 | `uint8` | 200 | Registered for STorM32 gimbal controller | -| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED1 | `uint8` | 201 | Registered for STorM32 gimbal controller | -| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED2 | `uint8` | 202 | Registered for STorM32 gimbal controller | -| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED3 | `uint8` | 203 | Registered for STorM32 gimbal controller | -| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED4 | `uint8` | 204 | Registered for STorM32 gimbal controller | -| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED5 | `uint8` | 205 | Registered for STorM32 gimbal controller | -| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED6 | `uint8` | 206 | Registered for STorM32 gimbal controller | -| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED7 | `uint8` | 207 | Registered for STorM32 gimbal controller | -| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED8 | `uint8` | 208 | Registered for STorM32 gimbal controller | -| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED9 | `uint8` | 209 | Registered for STorM32 gimbal controller | +| 명칭 | 형식 | Value | 설명 | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | ----- | ---------------------------------------- | +| MAV_TUNNEL_PAYLOAD_TYPE_UNKNOWN | `uint8` | 0 | Encoding of payload unknown | +| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED0 | `uint8` | 200 | Registered for STorM32 gimbal controller | +| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED1 | `uint8` | 201 | Registered for STorM32 gimbal controller | +| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED2 | `uint8` | 202 | Registered for STorM32 gimbal controller | +| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED3 | `uint8` | 203 | Registered for STorM32 gimbal controller | +| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED4 | `uint8` | 204 | Registered for STorM32 gimbal controller | +| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED5 | `uint8` | 205 | Registered for STorM32 gimbal controller | +| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED6 | `uint8` | 206 | Registered for STorM32 gimbal controller | +| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED7 | `uint8` | 207 | Registered for STorM32 gimbal controller | +| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED8 | `uint8` | 208 | Registered for STorM32 gimbal controller | +| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED9 | `uint8` | 209 | Registered for STorM32 gimbal controller | ## Source Message diff --git a/docs/ko/msg_docs/MessageFormatRequest.md b/docs/ko/msg_docs/MessageFormatRequest.md index e79150861c..681b66e3a8 100644 --- a/docs/ko/msg_docs/MessageFormatRequest.md +++ b/docs/ko/msg_docs/MessageFormatRequest.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # MessageFormatRequest (UORB message) -**TOPICS:** message_formatrequest +**TOPICS:** message_format_request ## Fields @@ -16,9 +16,9 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| --------------------------------------------------------------------------------------------------------- | -------- | ----- | --------------------------------------------------------------------------------------------------------------------------------------------------- | -| LATEST_PROTOCOL_VERSION | `uint16` | 1 | Current version of this protocol. Increase this whenever the MessageFormatRequest or MessageFormatResponse changes. | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------------------------------------------- | -------- | ----- | --------------------------------------------------------------------------------------------------------------------------------------------------- | +| LATEST_PROTOCOL_VERSION | `uint16` | 1 | Current version of this protocol. Increase this whenever the MessageFormatRequest or MessageFormatResponse changes. | ## Source Message diff --git a/docs/ko/msg_docs/MessageFormatResponse.md b/docs/ko/msg_docs/MessageFormatResponse.md index dab3670a29..17863ee66f 100644 --- a/docs/ko/msg_docs/MessageFormatResponse.md +++ b/docs/ko/msg_docs/MessageFormatResponse.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # MessageFormatResponse (UORB message) -**TOPICS:** message_formatresponse +**TOPICS:** message_format_response ## Fields diff --git a/docs/ko/msg_docs/ModeCompleted.md b/docs/ko/msg_docs/ModeCompleted.md index 612c19d953..fc8b13d529 100644 --- a/docs/ko/msg_docs/ModeCompleted.md +++ b/docs/ko/msg_docs/ModeCompleted.md @@ -18,11 +18,11 @@ Mode completion result, published by an active mode. The possible values of nav_ ## Constants -| 명칭 | 형식 | Value | 설명 | -| --------------------------------------------------------------------------------------------------- | -------- | ----- | ---------------------------------------------- | -| MESSAGE_VERSION | `uint32` | 0 | | -| RESULT_SUCCESS | `uint8` | 0 | | -| RESULT_FAILURE_OTHER | `uint8` | 100 | Mode failed (generic error) | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------------------------------------- | -------- | ----- | ---------------------------------------------- | +| MESSAGE_VERSION | `uint32` | 0 | | +| RESULT_SUCCESS | `uint8` | 0 | | +| RESULT_FAILURE_OTHER | `uint8` | 100 | Mode failed (generic error) | ## Source Message diff --git a/docs/ko/msg_docs/NavigatorMissionItem.md b/docs/ko/msg_docs/NavigatorMissionItem.md index 93e9bd7529..99c3d690c7 100644 --- a/docs/ko/msg_docs/NavigatorMissionItem.md +++ b/docs/ko/msg_docs/NavigatorMissionItem.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # NavigatorMissionItem (UORB message) -**TOPICS:** navigator_missionitem +**TOPICS:** navigator_mission_item ## Fields diff --git a/docs/ko/msg_docs/NavigatorStatus.md b/docs/ko/msg_docs/NavigatorStatus.md index 88f7cd48de..728abc7e18 100644 --- a/docs/ko/msg_docs/NavigatorStatus.md +++ b/docs/ko/msg_docs/NavigatorStatus.md @@ -18,10 +18,10 @@ Current status of a Navigator mode. The possible values of nav_state are defined ## Constants -| 명칭 | 형식 | Value | 설명 | -| -------------------------------------------------------------- | ------- | ----- | --------------------------------------------------- | -| FAILURE_NONE | `uint8` | 0 | | -| FAILURE_HAGL | `uint8` | 1 | Target altitude exceeds maximum height above ground | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------ | ------- | ----- | --------------------------------------------------- | +| FAILURE_NONE | `uint8` | 0 | | +| FAILURE_HAGL | `uint8` | 1 | Target altitude exceeds maximum height above ground | ## Source Message diff --git a/docs/ko/msg_docs/ObstacleDistance.md b/docs/ko/msg_docs/ObstacleDistance.md index af0fa0246a..a1e6dfbd58 100644 --- a/docs/ko/msg_docs/ObstacleDistance.md +++ b/docs/ko/msg_docs/ObstacleDistance.md @@ -23,15 +23,15 @@ Obstacle distances in front of the sensor. ## Constants -| 명칭 | 형식 | Value | 설명 | -| -------------------------------------------------------------------------------------------------------------------------------------------- | ------- | ----- | -- | -| MAV_FRAME_GLOBAL | `uint8` | 0 | | -| MAV_FRAME_LOCAL_NED | `uint8` | 1 | | -| MAV_FRAME_BODY_FRD | `uint8` | 12 | | -| MAV_DISTANCE_SENSOR_LASER | `uint8` | 0 | | -| MAV_DISTANCE_SENSOR_ULTRASOUND | `uint8` | 1 | | -| MAV_DISTANCE_SENSOR_INFRARED | `uint8` | 2 | | -| MAV_DISTANCE_SENSOR_RADAR | `uint8` | 3 | | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------------------------------------------------------------------------------ | ------- | ----- | -- | +| MAV_FRAME_GLOBAL | `uint8` | 0 | | +| MAV_FRAME_LOCAL_NED | `uint8` | 1 | | +| MAV_FRAME_BODY_FRD | `uint8` | 12 | | +| MAV_DISTANCE_SENSOR_LASER | `uint8` | 0 | | +| MAV_DISTANCE_SENSOR_ULTRASOUND | `uint8` | 1 | | +| MAV_DISTANCE_SENSOR_INFRARED | `uint8` | 2 | | +| MAV_DISTANCE_SENSOR_RADAR | `uint8` | 3 | | ## Source Message diff --git a/docs/ko/msg_docs/OffboardControlMode.md b/docs/ko/msg_docs/OffboardControlMode.md index ebb818ef90..117ff4654b 100644 --- a/docs/ko/msg_docs/OffboardControlMode.md +++ b/docs/ko/msg_docs/OffboardControlMode.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Off-board control mode. -**TOPICS:** offboard_controlmode +**TOPICS:** offboard_control_mode ## Fields diff --git a/docs/ko/msg_docs/OnboardComputerStatus.md b/docs/ko/msg_docs/OnboardComputerStatus.md index faf2732f7a..5d7b7aeacb 100644 --- a/docs/ko/msg_docs/OnboardComputerStatus.md +++ b/docs/ko/msg_docs/OnboardComputerStatus.md @@ -6,7 +6,7 @@ pageClass: is-wide-page ONBOARD_COMPUTER_STATUS message data. -**TOPICS:** onboard_computerstatus +**TOPICS:** onboard_computer_status ## Fields diff --git a/docs/ko/msg_docs/OpenDroneIdArmStatus.md b/docs/ko/msg_docs/OpenDroneIdArmStatus.md index 85005cc985..8a0ff3861f 100644 --- a/docs/ko/msg_docs/OpenDroneIdArmStatus.md +++ b/docs/ko/msg_docs/OpenDroneIdArmStatus.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # OpenDroneIdArmStatus (UORB message) -**TOPICS:** open_droneid_armstatus +**TOPICS:** open_drone_id_arm_status ## Fields diff --git a/docs/ko/msg_docs/OpenDroneIdOperatorId.md b/docs/ko/msg_docs/OpenDroneIdOperatorId.md index e1a879b49e..0058e86f19 100644 --- a/docs/ko/msg_docs/OpenDroneIdOperatorId.md +++ b/docs/ko/msg_docs/OpenDroneIdOperatorId.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # OpenDroneIdOperatorId (UORB message) -**TOPICS:** open_droneid_operatorid +**TOPICS:** open_drone_id_operator_id ## Fields diff --git a/docs/ko/msg_docs/OpenDroneIdSelfId.md b/docs/ko/msg_docs/OpenDroneIdSelfId.md index 4c20d7a368..0b2d6a9a97 100644 --- a/docs/ko/msg_docs/OpenDroneIdSelfId.md +++ b/docs/ko/msg_docs/OpenDroneIdSelfId.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # OpenDroneIdSelfId (UORB message) -**TOPICS:** open_droneid_selfid +**TOPICS:** open_drone_id_self_id ## Fields diff --git a/docs/ko/msg_docs/OpenDroneIdSystem.md b/docs/ko/msg_docs/OpenDroneIdSystem.md index 7e92821350..7ddb668dfd 100644 --- a/docs/ko/msg_docs/OpenDroneIdSystem.md +++ b/docs/ko/msg_docs/OpenDroneIdSystem.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # OpenDroneIdSystem (UORB message) -**TOPICS:** open_droneid_system +**TOPICS:** open_drone_id_system ## Fields diff --git a/docs/ko/msg_docs/OrbTestLarge.md b/docs/ko/msg_docs/OrbTestLarge.md index ad59a33640..78474280d1 100644 --- a/docs/ko/msg_docs/OrbTestLarge.md +++ b/docs/ko/msg_docs/OrbTestLarge.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # OrbTestLarge (UORB message) -**TOPICS:** orb_testlarge +**TOPICS:** orb_test_large ## Fields diff --git a/docs/ko/msg_docs/OrbTestMedium.md b/docs/ko/msg_docs/OrbTestMedium.md index 8e7aaf27c3..a7dbf4264f 100644 --- a/docs/ko/msg_docs/OrbTestMedium.md +++ b/docs/ko/msg_docs/OrbTestMedium.md @@ -16,9 +16,9 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------------------------- | ------- | ----- | -- | -| ORB_QUEUE_LENGTH | `uint8` | 16 | | +| 명칭 | 형식 | Value | 설명 | +| ----------------------------------------------------------------------------------------- | ------- | ----- | -- | +| ORB_QUEUE_LENGTH | `uint8` | 16 | | ## Source Message diff --git a/docs/ko/msg_docs/OrbitStatus.md b/docs/ko/msg_docs/OrbitStatus.md index 4273d7f627..262110a341 100644 --- a/docs/ko/msg_docs/OrbitStatus.md +++ b/docs/ko/msg_docs/OrbitStatus.md @@ -22,14 +22,14 @@ ORBIT_YAW_BEHAVIOUR. ## Constants -| 명칭 | 형식 | Value | 설명 | -| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | ----- | -- | -| ORBIT_YAW_BEHAVIOUR_HOLD_FRONT_TO_CIRCLE_CENTER | `uint8` | 0 | | -| ORBIT_YAW_BEHAVIOUR_HOLD_INITIAL_HEADING | `uint8` | 1 | | -| ORBIT_YAW_BEHAVIOUR_UNCONTROLLED | `uint8` | 2 | | -| ORBIT_YAW_BEHAVIOUR_HOLD_FRONT_TANGENT_TO_CIRCLE | `uint8` | 3 | | -| ORBIT_YAW_BEHAVIOUR_RC_CONTROLLED | `uint8` | 4 | | -| ORBIT_YAW_BEHAVIOUR_UNCHANGED | `uint8` | 5 | | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------- | ----- | -- | +| ORBIT_YAW_BEHAVIOUR_HOLD_FRONT_TO_CIRCLE_CENTER | `uint8` | 0 | | +| ORBIT_YAW_BEHAVIOUR_HOLD_INITIAL_HEADING | `uint8` | 1 | | +| ORBIT_YAW_BEHAVIOUR_UNCONTROLLED | `uint8` | 2 | | +| ORBIT_YAW_BEHAVIOUR_HOLD_FRONT_TANGENT_TO_CIRCLE | `uint8` | 3 | | +| ORBIT_YAW_BEHAVIOUR_RC_CONTROLLED | `uint8` | 4 | | +| ORBIT_YAW_BEHAVIOUR_UNCHANGED | `uint8` | 5 | | ## Source Message diff --git a/docs/ko/msg_docs/ParameterResetRequest.md b/docs/ko/msg_docs/ParameterResetRequest.md index f945088419..2b531e50c9 100644 --- a/docs/ko/msg_docs/ParameterResetRequest.md +++ b/docs/ko/msg_docs/ParameterResetRequest.md @@ -6,7 +6,7 @@ pageClass: is-wide-page ParameterResetRequest : Used by the primary to reset one or all parameter value(s) on the remote. -**TOPICS:** parameter_resetrequest +**TOPICS:** parameter_reset_request ## Fields @@ -18,9 +18,9 @@ ParameterResetRequest : Used by the primary to reset one or all parameter value( ## Constants -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------------------------- | ------- | ----- | -- | -| ORB_QUEUE_LENGTH | `uint8` | 4 | | +| 명칭 | 형식 | Value | 설명 | +| ----------------------------------------------------------------------------------------- | ------- | ----- | -- | +| ORB_QUEUE_LENGTH | `uint8` | 4 | | ## Source Message diff --git a/docs/ko/msg_docs/ParameterSetUsedRequest.md b/docs/ko/msg_docs/ParameterSetUsedRequest.md index 1539fa0b2e..5f861b0daa 100644 --- a/docs/ko/msg_docs/ParameterSetUsedRequest.md +++ b/docs/ko/msg_docs/ParameterSetUsedRequest.md @@ -6,7 +6,7 @@ pageClass: is-wide-page ParameterSetUsedRequest : Used by a remote to update the used flag for a parameter on the primary. -**TOPICS:** parameter_setused_request +**TOPICS:** parameter_set_used_request ## Fields @@ -17,9 +17,9 @@ ParameterSetUsedRequest : Used by a remote to update the used flag for a paramet ## Constants -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------------------------- | ------- | ----- | -- | -| ORB_QUEUE_LENGTH | `uint8` | 64 | | +| 명칭 | 형식 | Value | 설명 | +| ----------------------------------------------------------------------------------------- | ------- | ----- | -- | +| ORB_QUEUE_LENGTH | `uint8` | 64 | | ## Source Message diff --git a/docs/ko/msg_docs/ParameterSetValueRequest.md b/docs/ko/msg_docs/ParameterSetValueRequest.md index 3a405780ef..e2edc67d89 100644 --- a/docs/ko/msg_docs/ParameterSetValueRequest.md +++ b/docs/ko/msg_docs/ParameterSetValueRequest.md @@ -19,9 +19,9 @@ ParameterSetValueRequest : Used by a remote or primary to update the value for a ## Constants -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------------------------- | ------- | ----- | -- | -| ORB_QUEUE_LENGTH | `uint8` | 32 | | +| 명칭 | 형식 | Value | 설명 | +| ----------------------------------------------------------------------------------------- | ------- | ----- | -- | +| ORB_QUEUE_LENGTH | `uint8` | 32 | | ## Source Message diff --git a/docs/ko/msg_docs/ParameterSetValueResponse.md b/docs/ko/msg_docs/ParameterSetValueResponse.md index da1392e540..79bfa010bf 100644 --- a/docs/ko/msg_docs/ParameterSetValueResponse.md +++ b/docs/ko/msg_docs/ParameterSetValueResponse.md @@ -18,9 +18,9 @@ ParameterSetValueResponse : Response to a set value request by either primary or ## Constants -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------------------------- | ------- | ----- | -- | -| ORB_QUEUE_LENGTH | `uint8` | 4 | | +| 명칭 | 형식 | Value | 설명 | +| ----------------------------------------------------------------------------------------- | ------- | ----- | -- | +| ORB_QUEUE_LENGTH | `uint8` | 4 | | ## Source Message diff --git a/docs/ko/msg_docs/PositionControllerLandingStatus.md b/docs/ko/msg_docs/PositionControllerLandingStatus.md index f91a4d7514..88d7bd4f35 100644 --- a/docs/ko/msg_docs/PositionControllerLandingStatus.md +++ b/docs/ko/msg_docs/PositionControllerLandingStatus.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # PositionControllerLandingStatus (UORB message) -**TOPICS:** position_controllerlanding_status +**TOPICS:** position_controller_landing_status ## Fields @@ -17,13 +17,13 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| --------------------------------------------------------------------------------------------------------- | ------- | ----- | ------------------------------------------------------------------------------------------------------------------------------------ | -| NOT_ABORTED | `uint8` | 0 | | -| ABORTED_BY_OPERATOR | `uint8` | 1 | | -| TERRAIN_NOT_FOUND | `uint8` | 2 | FW_LND_ABORT (1 << 0) | -| TERRAIN_TIMEOUT | `uint8` | 3 | FW_LND_ABORT (1 << 1) | -| UNKNOWN_ABORT_CRITERION | `uint8` | 4 | | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------------------------------------------- | ------- | ----- | ------------------------------------------------------------------------------------------------------------------------------------ | +| NOT_ABORTED | `uint8` | 0 | | +| ABORTED_BY_OPERATOR | `uint8` | 1 | | +| TERRAIN_NOT_FOUND | `uint8` | 2 | FW_LND_ABORT (1 << 0) | +| TERRAIN_TIMEOUT | `uint8` | 3 | FW_LND_ABORT (1 << 1) | +| UNKNOWN_ABORT_CRITERION | `uint8` | 4 | | ## Source Message diff --git a/docs/ko/msg_docs/PositionControllerStatus.md b/docs/ko/msg_docs/PositionControllerStatus.md index 3b7dd545d9..8ad453a08a 100644 --- a/docs/ko/msg_docs/PositionControllerStatus.md +++ b/docs/ko/msg_docs/PositionControllerStatus.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # PositionControllerStatus (UORB message) -**TOPICS:** position_controllerstatus +**TOPICS:** position_controller_status ## Fields diff --git a/docs/ko/msg_docs/PositionSetpoint.md b/docs/ko/msg_docs/PositionSetpoint.md index a00b37083c..cfde088fe8 100644 --- a/docs/ko/msg_docs/PositionSetpoint.md +++ b/docs/ko/msg_docs/PositionSetpoint.md @@ -35,16 +35,16 @@ this file is only used in the position_setpoint triple as a dependency. ## Constants -| 명칭 | 형식 | Value | 설명 | -| --------------------------------------------------------------------------------------------------------- | ------- | ----- | --------------------------------------------------------------------------- | -| SETPOINT_TYPE_POSITION | `uint8` | 0 | position setpoint | -| SETPOINT_TYPE_VELOCITY | `uint8` | 1 | velocity setpoint | -| SETPOINT_TYPE_LOITER | `uint8` | 2 | loiter setpoint | -| SETPOINT_TYPE_TAKEOFF | `uint8` | 3 | takeoff setpoint | -| SETPOINT_TYPE_LAND | `uint8` | 4 | land setpoint, altitude must be ignored, descend until landing | -| SETPOINT_TYPE_IDLE | `uint8` | 5 | do nothing, switch off motors or keep at idle speed (MC) | -| LOITER_TYPE_ORBIT | `uint8` | 0 | Circular pattern | -| LOITER_TYPE_FIGUREEIGHT | `uint8` | 1 | Pattern resembling an 8 | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------------------------------------------- | ------- | ----- | --------------------------------------------------------------------------- | +| SETPOINT_TYPE_POSITION | `uint8` | 0 | position setpoint | +| SETPOINT_TYPE_VELOCITY | `uint8` | 1 | velocity setpoint | +| SETPOINT_TYPE_LOITER | `uint8` | 2 | loiter setpoint | +| SETPOINT_TYPE_TAKEOFF | `uint8` | 3 | takeoff setpoint | +| SETPOINT_TYPE_LAND | `uint8` | 4 | land setpoint, altitude must be ignored, descend until landing | +| SETPOINT_TYPE_IDLE | `uint8` | 5 | do nothing, switch off motors or keep at idle speed (MC) | +| LOITER_TYPE_ORBIT | `uint8` | 0 | Circular pattern | +| LOITER_TYPE_FIGUREEIGHT | `uint8` | 1 | Pattern resembling an 8 | ## Source Message diff --git a/docs/ko/msg_docs/PositionSetpointTriplet.md b/docs/ko/msg_docs/PositionSetpointTriplet.md index 52762394aa..4c9b7935d8 100644 --- a/docs/ko/msg_docs/PositionSetpointTriplet.md +++ b/docs/ko/msg_docs/PositionSetpointTriplet.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Global position setpoint triplet in WGS84 coordinates. This are the three next waypoints (or just the next two or one). -**TOPICS:** position_setpointtriplet +**TOPICS:** position_setpoint_triplet ## Fields diff --git a/docs/ko/msg_docs/PowerButtonState.md b/docs/ko/msg_docs/PowerButtonState.md index a28a40261c..473e9baf4d 100644 --- a/docs/ko/msg_docs/PowerButtonState.md +++ b/docs/ko/msg_docs/PowerButtonState.md @@ -6,7 +6,7 @@ pageClass: is-wide-page power button state notification message. -**TOPICS:** power_buttonstate +**TOPICS:** power_button_state ## Fields @@ -17,12 +17,12 @@ power button state notification message. ## Constants -| 명칭 | 형식 | Value | 설명 | -| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | ----- | ------------------------------------------------------------------------------------------ | -| PWR_BUTTON_STATE_IDEL | `uint8` | 0 | Button went up without meeting shutdown button down time (delete event) | -| PWR_BUTTON_STATE_DOWN | `uint8` | 1 | Button went Down | -| PWR_BUTTON_STATE_UP | `uint8` | 2 | Button went Up | -| PWR_BUTTON_STATE_REQUEST_SHUTDOWN | `uint8` | 3 | Button went Up after meeting shutdown button down time | +| 명칭 | 형식 | Value | 설명 | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | ----- | ------------------------------------------------------------------------------------------ | +| PWR_BUTTON_STATE_IDEL | `uint8` | 0 | Button went up without meeting shutdown button down time (delete event) | +| PWR_BUTTON_STATE_DOWN | `uint8` | 1 | Button went Down | +| PWR_BUTTON_STATE_UP | `uint8` | 2 | Button went Up | +| PWR_BUTTON_STATE_REQUEST_SHUTDOWN | `uint8` | 3 | Button went Up after meeting shutdown button down time | ## Source Message diff --git a/docs/ko/msg_docs/PurePursuitStatus.md b/docs/ko/msg_docs/PurePursuitStatus.md index b099125813..efa799de5a 100644 --- a/docs/ko/msg_docs/PurePursuitStatus.md +++ b/docs/ko/msg_docs/PurePursuitStatus.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Pure pursuit status. -**TOPICS:** pure_pursuitstatus +**TOPICS:** pure_pursuit_status ## Fields diff --git a/docs/ko/msg_docs/QshellReq.md b/docs/ko/msg_docs/QshellReq.md index 451f900693..63857b04f5 100644 --- a/docs/ko/msg_docs/QshellReq.md +++ b/docs/ko/msg_docs/QshellReq.md @@ -17,9 +17,9 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| ---------------------------------------------------------- | -------- | ----- | -- | -| MAX_STRLEN | `uint32` | 100 | | +| 명칭 | 형식 | Value | 설명 | +| -------------------------------------------------------- | -------- | ----- | -- | +| MAX_STRLEN | `uint32` | 100 | | ## Source Message diff --git a/docs/ko/msg_docs/RangingBeacon.md b/docs/ko/msg_docs/RangingBeacon.md new file mode 100644 index 0000000000..9d790fd773 --- /dev/null +++ b/docs/ko/msg_docs/RangingBeacon.md @@ -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 | 설명 | +| ------------------------------------------------------------------------------------- | ------- | ----- | ------------------------------------------------------- | +| ALT_TYPE_WGS84 | `uint8` | 0 | Altitude above WGS84 ellipsoid | +| 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 +``` + +::: diff --git a/docs/ko/msg_docs/RaptorInput.md b/docs/ko/msg_docs/RaptorInput.md index 7089aae299..da312ff72f 100644 --- a/docs/ko/msg_docs/RaptorInput.md +++ b/docs/ko/msg_docs/RaptorInput.md @@ -23,10 +23,10 @@ Raptor Input. ## Constants -| 명칭 | 형식 | Value | 설명 | -| -------------------------------------------------------------------- | -------- | ----- | ---------------------------------------------------------------- | -| MESSAGE_VERSION | `uint32` | 0 | | -| ACTION_DIM | `uint8` | 4 | Policy output dimensionality (for quadrotors) | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------ | -------- | ----- | ---------------------------------------------------------------- | +| MESSAGE_VERSION | `uint32` | 0 | | +| ACTION_DIM | `uint8` | 4 | Policy output dimensionality (for quadrotors) | ## Source Message diff --git a/docs/ko/msg_docs/RaptorStatus.md b/docs/ko/msg_docs/RaptorStatus.md index 0325c004db..e2e3c6f5ca 100644 --- a/docs/ko/msg_docs/RaptorStatus.md +++ b/docs/ko/msg_docs/RaptorStatus.md @@ -39,16 +39,16 @@ Raptor Status. ## Constants -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ----- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| MESSAGE_VERSION | `uint32` | 0 | | -| EXIT_REASON_NONE | `uint8` | 0 | No exit reason => Raptor control step was executed (actuator_motors should have been published) | -| EXIT_REASON_NO_ANGULAR_VELOCITY_UPDATE | `uint8` | 1 | We synchronize the control onto the input observation with the highest update frequency, which is vehicle_angular_velocity. If there was no update, we do not need to execute the policy again | -| EXIT_REASON_NOT_ALL_OBSERVATIONS_SET | `uint8` | 2 | We can not execute the policy if not all observations are available | -| EXIT_REASON_ANGULAR_VELOCITY_STALE | `uint8` | 3 | If OBSERVATION_TIMEOUT_ANGULAR_VELOCITY is exceeded, we treat the vehicle_angular_velocity as stale and can not run the policy | -| EXIT_REASON_LOCAL_POSITION_STALE | `uint8` | 4 | If OBSERVATION_TIMEOUT_LOCAL_POSITION is exceeded, we treat the vehicle_local_position as stale and can not run the policy | -| EXIT_REASON_ATTITUDE_STALE | `uint8` | 5 | If OBSERVATION_TIMEOUT_ATTITUDE is exceeded, we treat the vehicle_attitude as stale and can not run the policy | -| EXIT_REASON_EXECUTOR_STATUS_SOURCE_NOT_CONTROL | `uint8` | 6 | The executor that runs the policy can run in oversampling mode, where it decides if the policy should be ran based on the timestamp and not based on fixed synchronization onto the vehicle_angular_velocity. In this case the executor can decide to skip running the policy if the interval is too small, in which case this flag is set. | +| 명칭 | 형식 | Value | 설명 | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ----- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| MESSAGE_VERSION | `uint32` | 0 | | +| EXIT_REASON_NONE | `uint8` | 0 | No exit reason => Raptor control step was executed (actuator_motors should have been published) | +| EXIT_REASON_NO_ANGULAR_VELOCITY_UPDATE | `uint8` | 1 | We synchronize the control onto the input observation with the highest update frequency, which is vehicle_angular_velocity. If there was no update, we do not need to execute the policy again | +| EXIT_REASON_NOT_ALL_OBSERVATIONS_SET | `uint8` | 2 | We can not execute the policy if not all observations are available | +| EXIT_REASON_ANGULAR_VELOCITY_STALE | `uint8` | 3 | If OBSERVATION_TIMEOUT_ANGULAR_VELOCITY is exceeded, we treat the vehicle_angular_velocity as stale and can not run the policy | +| EXIT_REASON_LOCAL_POSITION_STALE | `uint8` | 4 | If OBSERVATION_TIMEOUT_LOCAL_POSITION is exceeded, we treat the vehicle_local_position as stale and can not run the policy | +| EXIT_REASON_ATTITUDE_STALE | `uint8` | 5 | If OBSERVATION_TIMEOUT_ATTITUDE is exceeded, we treat the vehicle_attitude as stale and can not run the policy | +| EXIT_REASON_EXECUTOR_STATUS_SOURCE_NOT_CONTROL | `uint8` | 6 | The executor that runs the policy can run in oversampling mode, where it decides if the policy should be ran based on the timestamp and not based on fixed synchronization onto the vehicle_angular_velocity. In this case the executor can decide to skip running the policy if the interval is too small, in which case this flag is set. | ## Source Message diff --git a/docs/ko/msg_docs/RateCtrlStatus.md b/docs/ko/msg_docs/RateCtrlStatus.md index 9b297ca4a0..cb7412deef 100644 --- a/docs/ko/msg_docs/RateCtrlStatus.md +++ b/docs/ko/msg_docs/RateCtrlStatus.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # RateCtrlStatus (UORB message) -**TOPICS:** rate_ctrlstatus +**TOPICS:** rate_ctrl_status ## Fields diff --git a/docs/ko/msg_docs/RcChannels.md b/docs/ko/msg_docs/RcChannels.md index 90baf9744a..80ed6c9fe6 100644 --- a/docs/ko/msg_docs/RcChannels.md +++ b/docs/ko/msg_docs/RcChannels.md @@ -21,39 +21,39 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------------------------------------------------------------------ | ------- | ----- | -- | -| FUNCTION_THROTTLE | `uint8` | 0 | | -| FUNCTION_ROLL | `uint8` | 1 | | -| FUNCTION_PITCH | `uint8` | 2 | | -| FUNCTION_YAW | `uint8` | 3 | | -| FUNCTION_RETURN | `uint8` | 4 | | -| FUNCTION_LOITER | `uint8` | 5 | | -| FUNCTION_OFFBOARD | `uint8` | 6 | | -| FUNCTION_FLAPS | `uint8` | 7 | | -| FUNCTION_AUX_1 | `uint8` | 8 | | -| FUNCTION_AUX_2 | `uint8` | 9 | | -| FUNCTION_AUX_3 | `uint8` | 10 | | -| FUNCTION_AUX_4 | `uint8` | 11 | | -| FUNCTION_AUX_5 | `uint8` | 12 | | -| FUNCTION_AUX_6 | `uint8` | 13 | | -| FUNCTION_PARAM_1 | `uint8` | 14 | | -| FUNCTION_PARAM_2 | `uint8` | 15 | | -| FUNCTION_PARAM_3_5 | `uint8` | 16 | | -| FUNCTION_KILLSWITCH | `uint8` | 17 | | -| FUNCTION_TRANSITION | `uint8` | 18 | | -| FUNCTION_GEAR | `uint8` | 19 | | -| FUNCTION_ARMSWITCH | `uint8` | 20 | | -| FUNCTION_FLTBTN_SLOT_1 | `uint8` | 21 | | -| FUNCTION_FLTBTN_SLOT_2 | `uint8` | 22 | | -| FUNCTION_FLTBTN_SLOT_3 | `uint8` | 23 | | -| FUNCTION_FLTBTN_SLOT_4 | `uint8` | 24 | | -| FUNCTION_FLTBTN_SLOT_5 | `uint8` | 25 | | -| FUNCTION_FLTBTN_SLOT_6 | `uint8` | 26 | | -| FUNCTION_ENGAGE_MAIN_MOTOR | `uint8` | 27 | | -| FUNCTION_PAYLOAD_POWER | `uint8` | 28 | | -| FUNCTION_TERMINATION | `uint8` | 29 | | -| FUNCTION_FLTBTN_SLOT_COUNT | `uint8` | 6 | | +| 명칭 | 형식 | Value | 설명 | +| ---------------------------------------------------------------------------------------------------------------------------------- | ------- | ----- | -- | +| FUNCTION_THROTTLE | `uint8` | 0 | | +| FUNCTION_ROLL | `uint8` | 1 | | +| FUNCTION_PITCH | `uint8` | 2 | | +| FUNCTION_YAW | `uint8` | 3 | | +| FUNCTION_RETURN | `uint8` | 4 | | +| FUNCTION_LOITER | `uint8` | 5 | | +| FUNCTION_OFFBOARD | `uint8` | 6 | | +| FUNCTION_FLAPS | `uint8` | 7 | | +| FUNCTION_AUX_1 | `uint8` | 8 | | +| FUNCTION_AUX_2 | `uint8` | 9 | | +| FUNCTION_AUX_3 | `uint8` | 10 | | +| FUNCTION_AUX_4 | `uint8` | 11 | | +| FUNCTION_AUX_5 | `uint8` | 12 | | +| FUNCTION_AUX_6 | `uint8` | 13 | | +| FUNCTION_PARAM_1 | `uint8` | 14 | | +| FUNCTION_PARAM_2 | `uint8` | 15 | | +| FUNCTION_PARAM_3_5 | `uint8` | 16 | | +| FUNCTION_KILLSWITCH | `uint8` | 17 | | +| FUNCTION_TRANSITION | `uint8` | 18 | | +| FUNCTION_GEAR | `uint8` | 19 | | +| FUNCTION_ARMSWITCH | `uint8` | 20 | | +| FUNCTION_FLTBTN_SLOT_1 | `uint8` | 21 | | +| FUNCTION_FLTBTN_SLOT_2 | `uint8` | 22 | | +| FUNCTION_FLTBTN_SLOT_3 | `uint8` | 23 | | +| FUNCTION_FLTBTN_SLOT_4 | `uint8` | 24 | | +| FUNCTION_FLTBTN_SLOT_5 | `uint8` | 25 | | +| FUNCTION_FLTBTN_SLOT_6 | `uint8` | 26 | | +| FUNCTION_ENGAGE_MAIN_MOTOR | `uint8` | 27 | | +| FUNCTION_PAYLOAD_POWER | `uint8` | 28 | | +| FUNCTION_TERMINATION | `uint8` | 29 | | +| FUNCTION_FLTBTN_SLOT_COUNT | `uint8` | 6 | | ## Source Message diff --git a/docs/ko/msg_docs/RcParameterMap.md b/docs/ko/msg_docs/RcParameterMap.md index 52fbfddb41..80a6e91985 100644 --- a/docs/ko/msg_docs/RcParameterMap.md +++ b/docs/ko/msg_docs/RcParameterMap.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # RcParameterMap (UORB message) -**TOPICS:** rc_parametermap +**TOPICS:** rc_parameter_map ## Fields @@ -21,10 +21,10 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| -------------------------------------------------------------------------------------------------------------------- | ------- | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| RC_PARAM_MAP_NCHAN | `uint8` | 3 | This limit is also hardcoded in the enum RC_CHANNELS_FUNCTION in rc_channels.h | -| PARAM_ID_LEN | `uint8` | 16 | corresponds to MAVLINK_MSG_PARAM_VALUE_FIELD_PARAM_ID_LEN | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------------------------------------------------------ | ------- | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| RC_PARAM_MAP_NCHAN | `uint8` | 3 | This limit is also hardcoded in the enum RC_CHANNELS_FUNCTION in rc_channels.h | +| PARAM_ID_LEN | `uint8` | 16 | corresponds to MAVLINK_MSG_PARAM_VALUE_FIELD_PARAM_ID_LEN | ## Source Message diff --git a/docs/ko/msg_docs/RegisterExtComponentReply.md b/docs/ko/msg_docs/RegisterExtComponentReply.md index 0f210ccbef..18e57aee36 100644 --- a/docs/ko/msg_docs/RegisterExtComponentReply.md +++ b/docs/ko/msg_docs/RegisterExtComponentReply.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # RegisterExtComponentReply (UORB message) -**TOPICS:** register_extcomponent_reply +**TOPICS:** register_ext_component_reply ## Fields @@ -22,10 +22,10 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------------------------- | -------- | ----- | -- | -| MESSAGE_VERSION | `uint32` | 1 | | -| ORB_QUEUE_LENGTH | `uint8` | 2 | | +| 명칭 | 형식 | Value | 설명 | +| ----------------------------------------------------------------------------------------- | -------- | ----- | -- | +| MESSAGE_VERSION | `uint32` | 1 | | +| ORB_QUEUE_LENGTH | `uint8` | 2 | | ## Source Message diff --git a/docs/ko/msg_docs/RegisterExtComponentReplyV0.md b/docs/ko/msg_docs/RegisterExtComponentReplyV0.md index 3266cff2ce..2d2c8c5de0 100644 --- a/docs/ko/msg_docs/RegisterExtComponentReplyV0.md +++ b/docs/ko/msg_docs/RegisterExtComponentReplyV0.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # RegisterExtComponentReplyV0 (UORB message) -**TOPICS:** register_extcomponent_replyv0 +**TOPICS:** register_ext_component_reply_v0 ## Fields @@ -21,10 +21,10 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------------------------- | -------- | ----- | -- | -| MESSAGE_VERSION | `uint32` | 0 | | -| ORB_QUEUE_LENGTH | `uint8` | 2 | | +| 명칭 | 형식 | Value | 설명 | +| ----------------------------------------------------------------------------------------- | -------- | ----- | -- | +| MESSAGE_VERSION | `uint32` | 0 | | +| ORB_QUEUE_LENGTH | `uint8` | 2 | | ## Source Message diff --git a/docs/ko/msg_docs/RegisterExtComponentRequest.md b/docs/ko/msg_docs/RegisterExtComponentRequest.md index c373dd7477..5c81aec501 100644 --- a/docs/ko/msg_docs/RegisterExtComponentRequest.md +++ b/docs/ko/msg_docs/RegisterExtComponentRequest.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Request to register an external component. -**TOPICS:** register_extcomponent_request +**TOPICS:** register_ext_component_request ## Fields @@ -23,14 +23,15 @@ Request to register an external component. | replace_internal_mode | `uint8` | | | vehicle_status::NAVIGATION_STATE_\* | | activate_mode_immediately | `bool` | | | switch to the registered mode (can only be set in combination with an executor) | | not_user_selectable | `bool` | | | mode cannot be selected by the user | +| request_offboard_setpoints | `bool` | | | set to true if the registered mode wants to receive offboard trajectory setpoints via MAVLink | ## Constants -| 명칭 | 형식 | Value | 설명 | -| ----------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ----- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| MESSAGE_VERSION | `uint32` | 1 | | -| LATEST_PX4_ROS2_API_VERSION | `uint16` | 1 | API version compatibility. Increase this on a breaking semantic change. Changes to any message field are detected separately and do not require an API version change. | -| ORB_QUEUE_LENGTH | `uint8` | 2 | | +| 명칭 | 형식 | Value | 설명 | +| --------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ----- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| MESSAGE_VERSION | `uint32` | 2 | | +| LATEST_PX4_ROS2_API_VERSION | `uint16` | 1 | API version compatibility. Increase this on a breaking semantic change. Changes to any message field are detected separately and do not require an API version change. | +| ORB_QUEUE_LENGTH | `uint8` | 2 | | ## Source Message @@ -42,7 +43,7 @@ Click here to see original file ```c # Request to register an external component -uint32 MESSAGE_VERSION = 1 +uint32 MESSAGE_VERSION = 2 uint64 timestamp # time since system start (microseconds) @@ -62,6 +63,7 @@ bool enable_replace_internal_mode # set to true if an internal mode should be r uint8 replace_internal_mode # vehicle_status::NAVIGATION_STATE_* bool activate_mode_immediately # switch to the registered mode (can only be set in combination with an executor) bool not_user_selectable # mode cannot be selected by the user +bool request_offboard_setpoints # set to true if the registered mode wants to receive offboard trajectory setpoints via MAVLink uint8 ORB_QUEUE_LENGTH = 2 ``` diff --git a/docs/ko/msg_docs/RegisterExtComponentRequestV0.md b/docs/ko/msg_docs/RegisterExtComponentRequestV0.md index ce3700a623..58aa143a68 100644 --- a/docs/ko/msg_docs/RegisterExtComponentRequestV0.md +++ b/docs/ko/msg_docs/RegisterExtComponentRequestV0.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Request to register an external component. -**TOPICS:** register_extcomponent_requestv0 +**TOPICS:** register_ext_component_request_v0 ## Fields @@ -25,11 +25,11 @@ Request to register an external component. ## Constants -| 명칭 | 형식 | Value | 설명 | -| ----------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ----- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| MESSAGE_VERSION | `uint32` | 0 | | -| LATEST_PX4_ROS2_API_VERSION | `uint16` | 1 | API version compatibility. Increase this on a breaking semantic change. Changes to any message field are detected separately and do not require an API version change. | -| ORB_QUEUE_LENGTH | `uint8` | 2 | | +| 명칭 | 형식 | Value | 설명 | +| --------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ----- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| MESSAGE_VERSION | `uint32` | 0 | | +| LATEST_PX4_ROS2_API_VERSION | `uint16` | 1 | API version compatibility. Increase this on a breaking semantic change. Changes to any message field are detected separately and do not require an API version change. | +| ORB_QUEUE_LENGTH | `uint8` | 2 | | ## Source Message diff --git a/docs/ko/msg_docs/RegisterExtComponentRequestV1.md b/docs/ko/msg_docs/RegisterExtComponentRequestV1.md new file mode 100644 index 0000000000..998312a833 --- /dev/null +++ b/docs/ko/msg_docs/RegisterExtComponentRequestV1.md @@ -0,0 +1,69 @@ +--- +pageClass: is-wide-page +--- + +# RegisterExtComponentRequestV1 (UORB message) + +Request to register an external component. + +**TOPICS:** register_ext_component_request_v1 + +## Fields + +| 명칭 | 형식 | Unit [Frame] | Range/Enum | 설명 | +| ------------------------------------------------------------------------------------------- | ---------- | ---------------------------------------------------------------- | ---------- | -------------------------------------------------------------------------------------------------------------------------- | +| timestamp | `uint64` | | | time since system start (microseconds) | +| request_id | `uint64` | | | ID, set this to a random value | +| name | `char[25]` | | | either the requested mode name, or component name | +| px4_ros2_api_version | `uint16` | | | Set to LATEST_PX4_ROS2_API_VERSION | +| register_arming_check | `bool` | | | | +| register_mode | `bool` | | | registering a mode also requires arming_check to be set | +| register_mode_executor | `bool` | | | registering an executor also requires a mode to be registered (which is the owned mode by the executor) | +| enable_replace_internal_mode | `bool` | | | set to true if an internal mode should be replaced | +| replace_internal_mode | `uint8` | | | vehicle_status::NAVIGATION_STATE_\* | +| activate_mode_immediately | `bool` | | | switch to the registered mode (can only be set in combination with an executor) | +| not_user_selectable | `bool` | | | mode cannot be selected by the user | + +## Constants + +| 명칭 | 형식 | Value | 설명 | +| --------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ----- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| MESSAGE_VERSION | `uint32` | 1 | | +| LATEST_PX4_ROS2_API_VERSION | `uint16` | 1 | API version compatibility. Increase this on a breaking semantic change. Changes to any message field are detected separately and do not require an API version change. | +| ORB_QUEUE_LENGTH | `uint8` | 2 | | + +## Source Message + +[Source file (GitHub)](https://github.com/PX4/PX4-Autopilot/blob/main/msg/px4_msgs_old/msg/RegisterExtComponentRequestV1.msg) + +:::details +Click here to see original file + +```c +# Request to register an external component + +uint32 MESSAGE_VERSION = 1 + +uint64 timestamp # time since system start (microseconds) + +uint64 request_id # ID, set this to a random value +char[25] name # either the requested mode name, or component name + +uint16 LATEST_PX4_ROS2_API_VERSION = 1 # API version compatibility. Increase this on a breaking semantic change. Changes to any message field are detected separately and do not require an API version change. + +uint16 px4_ros2_api_version # Set to LATEST_PX4_ROS2_API_VERSION + +# Components to be registered +bool register_arming_check +bool register_mode # registering a mode also requires arming_check to be set +bool register_mode_executor # registering an executor also requires a mode to be registered (which is the owned mode by the executor) + +bool enable_replace_internal_mode # set to true if an internal mode should be replaced +uint8 replace_internal_mode # vehicle_status::NAVIGATION_STATE_* +bool activate_mode_immediately # switch to the registered mode (can only be set in combination with an executor) +bool not_user_selectable # mode cannot be selected by the user + +uint8 ORB_QUEUE_LENGTH = 2 +``` + +::: diff --git a/docs/ko/msg_docs/RoverAttitudeSetpoint.md b/docs/ko/msg_docs/RoverAttitudeSetpoint.md index 2d6d3c390f..29e99ecc47 100644 --- a/docs/ko/msg_docs/RoverAttitudeSetpoint.md +++ b/docs/ko/msg_docs/RoverAttitudeSetpoint.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Rover Attitude Setpoint. -**TOPICS:** rover_attitudesetpoint +**TOPICS:** rover_attitude_setpoint ## Fields diff --git a/docs/ko/msg_docs/RoverAttitudeStatus.md b/docs/ko/msg_docs/RoverAttitudeStatus.md index 416d52ec34..aa28a5663a 100644 --- a/docs/ko/msg_docs/RoverAttitudeStatus.md +++ b/docs/ko/msg_docs/RoverAttitudeStatus.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Rover Attitude Status. -**TOPICS:** rover_attitudestatus +**TOPICS:** rover_attitude_status ## Fields diff --git a/docs/ko/msg_docs/RoverPositionSetpoint.md b/docs/ko/msg_docs/RoverPositionSetpoint.md index 7371a64cc6..8467d51e56 100644 --- a/docs/ko/msg_docs/RoverPositionSetpoint.md +++ b/docs/ko/msg_docs/RoverPositionSetpoint.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Rover Position Setpoint. -**TOPICS:** rover_positionsetpoint +**TOPICS:** rover_position_setpoint ## Fields diff --git a/docs/ko/msg_docs/RoverRateSetpoint.md b/docs/ko/msg_docs/RoverRateSetpoint.md index 35029e72d3..ff8e3d2d09 100644 --- a/docs/ko/msg_docs/RoverRateSetpoint.md +++ b/docs/ko/msg_docs/RoverRateSetpoint.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Rover Rate setpoint. -**TOPICS:** rover_ratesetpoint +**TOPICS:** rover_rate_setpoint ## Fields diff --git a/docs/ko/msg_docs/RoverRateStatus.md b/docs/ko/msg_docs/RoverRateStatus.md index 3bd0642d4f..39b608963c 100644 --- a/docs/ko/msg_docs/RoverRateStatus.md +++ b/docs/ko/msg_docs/RoverRateStatus.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Rover Rate Status. -**TOPICS:** rover_ratestatus +**TOPICS:** rover_rate_status ## Fields diff --git a/docs/ko/msg_docs/RoverSpeedSetpoint.md b/docs/ko/msg_docs/RoverSpeedSetpoint.md index 3c87dda1fe..dfb97f7440 100644 --- a/docs/ko/msg_docs/RoverSpeedSetpoint.md +++ b/docs/ko/msg_docs/RoverSpeedSetpoint.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Rover Speed Setpoint. -**TOPICS:** rover_speedsetpoint +**TOPICS:** rover_speed_setpoint ## Fields diff --git a/docs/ko/msg_docs/RoverSpeedStatus.md b/docs/ko/msg_docs/RoverSpeedStatus.md index 161c20da43..49e3107e06 100644 --- a/docs/ko/msg_docs/RoverSpeedStatus.md +++ b/docs/ko/msg_docs/RoverSpeedStatus.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Rover Velocity Status. -**TOPICS:** rover_speedstatus +**TOPICS:** rover_speed_status ## Fields diff --git a/docs/ko/msg_docs/RoverSteeringSetpoint.md b/docs/ko/msg_docs/RoverSteeringSetpoint.md index fb18a4dd08..afe9294e61 100644 --- a/docs/ko/msg_docs/RoverSteeringSetpoint.md +++ b/docs/ko/msg_docs/RoverSteeringSetpoint.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Rover Steering setpoint. -**TOPICS:** rover_steeringsetpoint +**TOPICS:** rover_steering_setpoint ## Fields diff --git a/docs/ko/msg_docs/RoverThrottleSetpoint.md b/docs/ko/msg_docs/RoverThrottleSetpoint.md index d05660b098..052eadcbc1 100644 --- a/docs/ko/msg_docs/RoverThrottleSetpoint.md +++ b/docs/ko/msg_docs/RoverThrottleSetpoint.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Rover Throttle setpoint. -**TOPICS:** rover_throttlesetpoint +**TOPICS:** rover_throttle_setpoint ## Fields diff --git a/docs/ko/msg_docs/RtlStatus.md b/docs/ko/msg_docs/RtlStatus.md index b2937a5a61..96c290b072 100644 --- a/docs/ko/msg_docs/RtlStatus.md +++ b/docs/ko/msg_docs/RtlStatus.md @@ -8,24 +8,24 @@ pageClass: is-wide-page ## Fields -| 명칭 | 형식 | Unit [Frame] | Range/Enum | 설명 | -| --------------------------------------------------------------- | -------- | ---------------------------------------------------------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| timestamp | `uint64` | | | time since system start (microseconds) | -| safe_points_id | `uint32` | | | unique ID of active set of safe_point_items | -| is_evaluation_pending | `bool` | | | flag if the RTL point needs reevaluation (e.g. new safe points available, but need loading). | -| has_vtol_approach | `bool` | | | flag if approaches are defined for current RTL_TYPE parameter setting | -| rtl_type | `uint8` | | | Type of RTL chosen | -| safe_point_index | `uint8` | | | index of the chosen safe point, if in RTL_STATUS_TYPE_DIRECT_SAFE_POINT mode | +| 명칭 | 형식 | Unit [Frame] | Range/Enum | 설명 | +| --------------------------------------------------------------- | -------- | ---------------------------------------------------------------- | ---------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| timestamp | `uint64` | | | time since system start (microseconds) | +| safe_points_id | `uint32` | | | unique ID of active set of safe_point_items | +| is_evaluation_pending | `bool` | | | flag if the RTL point needs reevaluation (e.g. new safe points available, but need loading). | +| has_vtol_approach | `bool` | | | flag if approaches are defined for current RTL_TYPE parameter setting | +| rtl_type | `uint8` | | | Type of RTL chosen | +| safe_point_index | `uint8` | | | index of the chosen safe point, UINT8_MAX if no rally point was chosen | ## Constants -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------- | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| RTL_STATUS_TYPE_NONE | `uint8` | 0 | pending if evaluation can't pe performed currently e.g. when it is still loading the safe points | -| RTL_STATUS_TYPE_DIRECT_SAFE_POINT | `uint8` | 1 | chosen to directly go to a safe point or home position | -| RTL_STATUS_TYPE_DIRECT_MISSION_LAND | `uint8` | 2 | going straight to the beginning of the mission landing | -| RTL_STATUS_TYPE_FOLLOW_MISSION | `uint8` | 3 | Following the mission from start index to mission landing. Start index is current WP if in Mission mode, and closest WP otherwise. | -| RTL_STATUS_TYPE_FOLLOW_MISSION_REVERSE | `uint8` | 4 | Following the mission in reverse from start index to the beginning of the mission. Start index is previous WP if in Mission mode, and closest WP otherwise. | +| 명칭 | 형식 | Value | 설명 | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| RTL_STATUS_TYPE_NONE | `uint8` | 0 | pending if evaluation can't pe performed currently e.g. when it is still loading the safe points | +| RTL_STATUS_TYPE_DIRECT_SAFE_POINT | `uint8` | 1 | chosen to directly go to a safe point or home position | +| RTL_STATUS_TYPE_DIRECT_MISSION_LAND | `uint8` | 2 | going straight to the beginning of the mission landing | +| RTL_STATUS_TYPE_FOLLOW_MISSION | `uint8` | 3 | Following the mission from start index to mission landing. Start index is current WP if in Mission mode, and closest WP otherwise. | +| RTL_STATUS_TYPE_FOLLOW_MISSION_REVERSE | `uint8` | 4 | Following the mission in reverse from start index to the beginning of the mission. Start index is previous WP if in Mission mode, and closest WP otherwise. | ## Source Message @@ -43,7 +43,7 @@ bool is_evaluation_pending # flag if the RTL point needs reevaluation (e. bool has_vtol_approach # flag if approaches are defined for current RTL_TYPE parameter setting uint8 rtl_type # Type of RTL chosen -uint8 safe_point_index # index of the chosen safe point, if in RTL_STATUS_TYPE_DIRECT_SAFE_POINT mode +uint8 safe_point_index # index of the chosen safe point, UINT8_MAX if no rally point was chosen uint8 RTL_STATUS_TYPE_NONE=0 # pending if evaluation can't pe performed currently e.g. when it is still loading the safe points uint8 RTL_STATUS_TYPE_DIRECT_SAFE_POINT=1 # chosen to directly go to a safe point or home position diff --git a/docs/ko/msg_docs/RtlTimeEstimate.md b/docs/ko/msg_docs/RtlTimeEstimate.md index 640008a18e..f71a30f333 100644 --- a/docs/ko/msg_docs/RtlTimeEstimate.md +++ b/docs/ko/msg_docs/RtlTimeEstimate.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # RtlTimeEstimate (UORB message) -**TOPICS:** rtl_timeestimate +**TOPICS:** rtl_time_estimate ## Fields diff --git a/docs/ko/msg_docs/SatelliteInfo.md b/docs/ko/msg_docs/SatelliteInfo.md index 244068aee3..0f889eac3b 100644 --- a/docs/ko/msg_docs/SatelliteInfo.md +++ b/docs/ko/msg_docs/SatelliteInfo.md @@ -21,9 +21,9 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------------------------------------------------------------ | ------- | ----- | -- | -| SAT_INFO_MAX_SATELLITES | `uint8` | 40 | | +| 명칭 | 형식 | Value | 설명 | +| ---------------------------------------------------------------------------------------------------------------------------- | ------- | ----- | -- | +| SAT_INFO_MAX_SATELLITES | `uint8` | 40 | | ## Source Message diff --git a/docs/ko/msg_docs/SensorAccel.md b/docs/ko/msg_docs/SensorAccel.md index e73dd5b593..fa8ce793fa 100644 --- a/docs/ko/msg_docs/SensorAccel.md +++ b/docs/ko/msg_docs/SensorAccel.md @@ -23,9 +23,9 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------------------------- | ------- | ----- | -- | -| ORB_QUEUE_LENGTH | `uint8` | 8 | | +| 명칭 | 형식 | Value | 설명 | +| ----------------------------------------------------------------------------------------- | ------- | ----- | -- | +| ORB_QUEUE_LENGTH | `uint8` | 8 | | ## Source Message diff --git a/docs/ko/msg_docs/SensorAccelFifo.md b/docs/ko/msg_docs/SensorAccelFifo.md index 210582255b..37066f8488 100644 --- a/docs/ko/msg_docs/SensorAccelFifo.md +++ b/docs/ko/msg_docs/SensorAccelFifo.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # SensorAccelFifo (UORB message) -**TOPICS:** sensor_accelfifo +**TOPICS:** sensor_accel_fifo ## Fields diff --git a/docs/ko/msg_docs/SensorBaro.md b/docs/ko/msg_docs/SensorBaro.md index 5ab06a270a..16ca8c4ffd 100644 --- a/docs/ko/msg_docs/SensorBaro.md +++ b/docs/ko/msg_docs/SensorBaro.md @@ -24,9 +24,9 @@ The information is published in the `SCALED_PRESSURE_n` MAVLink messages (along ## Constants -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------------------------- | ------- | ----- | -- | -| ORB_QUEUE_LENGTH | `uint8` | 4 | | +| 명칭 | 형식 | Value | 설명 | +| ----------------------------------------------------------------------------------------- | ------- | ----- | -- | +| ORB_QUEUE_LENGTH | `uint8` | 4 | | ## Source Message diff --git a/docs/ko/msg_docs/SensorCombined.md b/docs/ko/msg_docs/SensorCombined.md index bcadd24a73..8c243c1cb3 100644 --- a/docs/ko/msg_docs/SensorCombined.md +++ b/docs/ko/msg_docs/SensorCombined.md @@ -25,12 +25,12 @@ Sensor readings in SI-unit form. These fields are scaled and offset-compensated ## Constants -| 명칭 | 형식 | Value | 설명 | -| --------------------------------------------------------------------------------------------------------------- | ------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------- | -| RELATIVE_TIMESTAMP_INVALID | `int32` | 2147483647 | (0x7fffffff) If one of the relative timestamps is set to this value, it means the associated sensor values are invalid | -| CLIPPING_X | `uint8` | 1 | | -| CLIPPING_Y | `uint8` | 2 | | -| CLIPPING_Z | `uint8` | 4 | | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------------------------------------------------- | ------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------- | +| RELATIVE_TIMESTAMP_INVALID | `int32` | 2147483647 | (0x7fffffff) If one of the relative timestamps is set to this value, it means the associated sensor values are invalid | +| CLIPPING_X | `uint8` | 1 | | +| CLIPPING_Y | `uint8` | 2 | | +| CLIPPING_Z | `uint8` | 4 | | ## Source Message diff --git a/docs/ko/msg_docs/SensorGnssRelative.md b/docs/ko/msg_docs/SensorGnssRelative.md index 0fea3a7b92..1d7f9d42a4 100644 --- a/docs/ko/msg_docs/SensorGnssRelative.md +++ b/docs/ko/msg_docs/SensorGnssRelative.md @@ -6,7 +6,7 @@ pageClass: is-wide-page GNSS relative positioning information in NED frame. The NED frame is defined as the local topological system at the reference station. -**TOPICS:** sensor_gnssrelative +**TOPICS:** sensor_gnss_relative ## Fields diff --git a/docs/ko/msg_docs/SensorGnssStatus.md b/docs/ko/msg_docs/SensorGnssStatus.md index a0392d9293..bf273d74e9 100644 --- a/docs/ko/msg_docs/SensorGnssStatus.md +++ b/docs/ko/msg_docs/SensorGnssStatus.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Gnss quality indicators. -**TOPICS:** sensor_gnssstatus +**TOPICS:** sensor_gnss_status ## Fields diff --git a/docs/ko/msg_docs/SensorGps.md b/docs/ko/msg_docs/SensorGps.md index 895a60e8f0..272b556d60 100644 --- a/docs/ko/msg_docs/SensorGps.md +++ b/docs/ko/msg_docs/SensorGps.md @@ -10,81 +10,84 @@ GPS position in WGS84 coordinates. the field 'timestamp' is for the position & v ## Fields -| 명칭 | 형식 | Unit [Frame] | Range/Enum | 설명 | -| ----------------------------------------------------------------------------- | --------- | ---------------------------------------------------------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| timestamp | `uint64` | | | time since system start (microseconds) | -| timestamp_sample | `uint64` | | | | -| device_id | `uint32` | | | unique device ID for the sensor that does not change between power cycles | -| latitude_deg | `float64` | | | Latitude in degrees, allows centimeter level RTK precision | -| longitude_deg | `float64` | | | Longitude in degrees, allows centimeter level RTK precision | -| altitude_msl_m | `float64` | | | Altitude above MSL, meters | -| altitude_ellipsoid_m | `float64` | | | Altitude above Ellipsoid, meters | -| s_variance_m_s | `float32` | | | GPS speed accuracy estimate, (metres/sec) | -| c_variance_rad | `float32` | | | GPS course accuracy estimate, (radians) | -| fix_type | `uint8` | | | Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. | -| eph | `float32` | | | GPS horizontal position accuracy (metres) | -| epv | `float32` | | | GPS vertical position accuracy (metres) | -| hdop | `float32` | | | Horizontal dilution of precision | -| vdop | `float32` | | | Vertical dilution of precision | -| noise_per_ms | `int32` | | | GPS noise per millisecond | -| automatic_gain_control | `uint16` | | | Automatic gain control monitor | -| jamming_state | `uint8` | | | indicates whether jamming has been detected or suspected by the receivers. O: Unknown, 1: OK, 2: Mitigated, 3: Detected | -| jamming_indicator | `int32` | | | indicates jamming is occurring | -| spoofing_state | `uint8` | | | indicates whether spoofing has been detected or suspected by the receivers. O: Unknown, 1: OK, 2: Mitigated, 3: Detected | -| authentication_state | `uint8` | | | GPS signal authentication state | -| vel_m_s | `float32` | | | GPS ground speed, (metres/sec) | -| vel_n_m_s | `float32` | | | GPS North velocity, (metres/sec) | -| vel_e_m_s | `float32` | | | GPS East velocity, (metres/sec) | -| vel_d_m_s | `float32` | | | GPS Down velocity, (metres/sec) | -| cog_rad | `float32` | | | Course over ground (NOT heading, but direction of movement), -PI..PI, (radians) | -| vel_ned_valid | `bool` | | | True if NED velocity is valid | -| timestamp_time_relative | `int32` | | | timestamp + timestamp_time_relative = Time of the UTC timestamp since system start, (microseconds) | -| time_utc_usec | `uint64` | | | Timestamp (microseconds, UTC), this is the timestamp which comes from the gps module. It might be unavailable right after cold start, indicated by a value of 0 | -| satellites_used | `uint8` | | | Number of satellites used | -| system_error | `uint32` | | | General errors with the connected GPS receiver | -| heading | `float32` | | | heading angle of XYZ body frame rel to NED. Set to NaN if not available and updated (used for dual antenna GPS), (rad, [-PI, PI]) | -| heading_offset | `float32` | | | heading offset of dual antenna array in body frame. Set to NaN if not applicable. (rad, [-PI, PI]) | -| heading_accuracy | `float32` | | | heading accuracy (rad, [0, 2PI]) | -| rtcm_injection_rate | `float32` | | | RTCM message injection rate Hz | -| selected_rtcm_instance | `uint8` | | | uorb instance that is being used for RTCM corrections | -| rtcm_crc_failed | `bool` | | | RTCM message CRC failure detected | -| rtcm_msg_used | `uint8` | | | Indicates if the RTCM message was used successfully by the receiver | +| 명칭 | 형식 | Unit [Frame] | Range/Enum | 설명 | +| ----------------------------------------------------------------------------- | --------- | ---------------------------------------------------------------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| timestamp | `uint64` | | | time since system start (microseconds) | +| timestamp_sample | `uint64` | | | | +| device_id | `uint32` | | | unique device ID for the sensor that does not change between power cycles | +| latitude_deg | `float64` | | | Latitude in degrees, allows centimeter level RTK precision | +| longitude_deg | `float64` | | | Longitude in degrees, allows centimeter level RTK precision | +| altitude_msl_m | `float64` | | | Altitude above MSL, meters | +| altitude_ellipsoid_m | `float64` | | | Altitude above Ellipsoid, meters | +| s_variance_m_s | `float32` | | | GPS speed accuracy estimate, (metres/sec) | +| c_variance_rad | `float32` | | | GPS course accuracy estimate, (radians) | +| fix_type | `uint8` | | | Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. | +| eph | `float32` | | | GPS horizontal position accuracy (metres) | +| epv | `float32` | | | GPS vertical position accuracy (metres) | +| hdop | `float32` | | | Horizontal dilution of precision | +| vdop | `float32` | | | Vertical dilution of precision | +| noise_per_ms | `int32` | | | GPS noise per millisecond | +| automatic_gain_control | `uint16` | | | Automatic gain control monitor | +| jamming_state | `uint8` | | | indicates whether jamming has been detected or suspected by the receivers. O: Unknown, 1: OK, 2: Mitigated, 3: Detected | +| jamming_indicator | `int32` | | | indicates jamming is occurring | +| spoofing_state | `uint8` | | | indicates whether spoofing has been detected or suspected by the receivers. O: Unknown, 1: OK, 2: Mitigated, 3: Detected | +| authentication_state | `uint8` | | | GPS signal authentication state | +| vel_m_s | `float32` | | | GPS ground speed, (metres/sec) | +| vel_n_m_s | `float32` | | | GPS North velocity, (metres/sec) | +| vel_e_m_s | `float32` | | | GPS East velocity, (metres/sec) | +| vel_d_m_s | `float32` | | | GPS Down velocity, (metres/sec) | +| cog_rad | `float32` | | | Course over ground (NOT heading, but direction of movement), -PI..PI, (radians) | +| vel_ned_valid | `bool` | | | True if NED velocity is valid | +| timestamp_time_relative | `int32` | | | timestamp + timestamp_time_relative = Time of the UTC timestamp since system start, (microseconds) | +| time_utc_usec | `uint64` | | | Timestamp (microseconds, UTC), this is the timestamp which comes from the gps module. It might be unavailable right after cold start, indicated by a value of 0 | +| satellites_used | `uint8` | | | Number of satellites used | +| system_error | `uint32` | | | General errors with the connected GPS receiver | +| heading | `float32` | | | heading angle of XYZ body frame rel to NED. Set to NaN if not available and updated (used for dual antenna GPS), (rad, [-PI, PI]) | +| heading_offset | `float32` | | | heading offset of dual antenna array in body frame. Set to NaN if not applicable. (rad, [-PI, PI]) | +| heading_accuracy | `float32` | | | heading accuracy (rad, [0, 2PI]) | +| rtcm_injection_rate | `float32` | | | RTCM message injection rate Hz | +| selected_rtcm_instance | `uint8` | | | uorb instance that is being used for RTCM corrections | +| rtcm_crc_failed | `bool` | | | RTCM message CRC failure detected | +| rtcm_msg_used | `uint8` | | | Indicates if the RTCM message was used successfully by the receiver | +| antenna_offset_x | `float32` | m [body frame FRD] | | X Position of GNSS antenna | +| antenna_offset_y | `float32` | m [body frame FRD] | | Y Position of GNSS antenna | +| antenna_offset_z | `float32` | m [body frame FRD] | | Z Position of GNSS antenna | ## Constants -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ----- | ---------------------------------------------------------- | -| FIX_TYPE_NONE | `uint8` | 1 | Value 0 is also valid to represent no fix. | -| FIX_TYPE_2D | `uint8` | 2 | | -| FIX_TYPE_3D | `uint8` | 3 | | -| FIX_TYPE_RTCM_CODE_DIFFERENTIAL | `uint8` | 4 | | -| FIX_TYPE_RTK_FLOAT | `uint8` | 5 | | -| FIX_TYPE_RTK_FIXED | `uint8` | 6 | | -| FIX_TYPE_EXTRAPOLATED | `uint8` | 8 | | -| JAMMING_STATE_UNKNOWN | `uint8` | 0 | default | -| JAMMING_STATE_OK | `uint8` | 1 | | -| JAMMING_STATE_MITIGATED | `uint8` | 2 | | -| JAMMING_STATE_DETECTED | `uint8` | 3 | | -| SPOOFING_STATE_UNKNOWN | `uint8` | 0 | default | -| SPOOFING_STATE_OK | `uint8` | 1 | | -| SPOOFING_STATE_MITIGATED | `uint8` | 2 | | -| SPOOFING_STATE_DETECTED | `uint8` | 3 | | -| AUTHENTICATION_STATE_UNKNOWN | `uint8` | 0 | default | -| AUTHENTICATION_STATE_INITIALIZING | `uint8` | 1 | | -| AUTHENTICATION_STATE_ERROR | `uint8` | 2 | | -| AUTHENTICATION_STATE_OK | `uint8` | 3 | | -| AUTHENTICATION_STATE_DISABLED | `uint8` | 4 | | -| SYSTEM_ERROR_OK | `uint32` | 0 | default | -| SYSTEM_ERROR_INCOMING_CORRECTIONS | `uint32` | 1 | | -| SYSTEM_ERROR_CONFIGURATION | `uint32` | 2 | | -| SYSTEM_ERROR_SOFTWARE | `uint32` | 4 | | -| SYSTEM_ERROR_ANTENNA | `uint32` | 8 | | -| SYSTEM_ERROR_EVENT_CONGESTION | `uint32` | 16 | | -| SYSTEM_ERROR_CPU_OVERLOAD | `uint32` | 32 | | -| SYSTEM_ERROR_OUTPUT_CONGESTION | `uint32` | 64 | | -| RTCM_MSG_USED_UNKNOWN | `uint8` | 0 | | -| RTCM_MSG_USED_NOT_USED | `uint8` | 1 | | -| RTCM_MSG_USED_USED | `uint8` | 2 | | +| 명칭 | 형식 | Value | 설명 | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ----- | ---------------------------------------------------------- | +| FIX_TYPE_NONE | `uint8` | 1 | Value 0 is also valid to represent no fix. | +| FIX_TYPE_2D | `uint8` | 2 | | +| FIX_TYPE_3D | `uint8` | 3 | | +| FIX_TYPE_RTCM_CODE_DIFFERENTIAL | `uint8` | 4 | | +| FIX_TYPE_RTK_FLOAT | `uint8` | 5 | | +| FIX_TYPE_RTK_FIXED | `uint8` | 6 | | +| FIX_TYPE_EXTRAPOLATED | `uint8` | 8 | | +| JAMMING_STATE_UNKNOWN | `uint8` | 0 | default | +| JAMMING_STATE_OK | `uint8` | 1 | | +| JAMMING_STATE_MITIGATED | `uint8` | 2 | | +| JAMMING_STATE_DETECTED | `uint8` | 3 | | +| SPOOFING_STATE_UNKNOWN | `uint8` | 0 | default | +| SPOOFING_STATE_OK | `uint8` | 1 | | +| SPOOFING_STATE_MITIGATED | `uint8` | 2 | | +| SPOOFING_STATE_DETECTED | `uint8` | 3 | | +| AUTHENTICATION_STATE_UNKNOWN | `uint8` | 0 | default | +| AUTHENTICATION_STATE_INITIALIZING | `uint8` | 1 | | +| AUTHENTICATION_STATE_ERROR | `uint8` | 2 | | +| AUTHENTICATION_STATE_OK | `uint8` | 3 | | +| AUTHENTICATION_STATE_DISABLED | `uint8` | 4 | | +| SYSTEM_ERROR_OK | `uint32` | 0 | default | +| SYSTEM_ERROR_INCOMING_CORRECTIONS | `uint32` | 1 | | +| SYSTEM_ERROR_CONFIGURATION | `uint32` | 2 | | +| SYSTEM_ERROR_SOFTWARE | `uint32` | 4 | | +| SYSTEM_ERROR_ANTENNA | `uint32` | 8 | | +| SYSTEM_ERROR_EVENT_CONGESTION | `uint32` | 16 | | +| SYSTEM_ERROR_CPU_OVERLOAD | `uint32` | 32 | | +| SYSTEM_ERROR_OUTPUT_CONGESTION | `uint32` | 64 | | +| RTCM_MSG_USED_UNKNOWN | `uint8` | 0 | | +| RTCM_MSG_USED_NOT_USED | `uint8` | 1 | | +| RTCM_MSG_USED_USED | `uint8` | 2 | | ## Source Message @@ -183,6 +186,10 @@ uint8 RTCM_MSG_USED_NOT_USED = 1 uint8 RTCM_MSG_USED_USED = 2 uint8 rtcm_msg_used # Indicates if the RTCM message was used successfully by the receiver +float32 antenna_offset_x # [m] [@frame body frame FRD] X Position of GNSS antenna +float32 antenna_offset_y # [m] [@frame body frame FRD] Y Position of GNSS antenna +float32 antenna_offset_z # [m] [@frame body frame FRD] Z Position of GNSS antenna + # TOPICS sensor_gps vehicle_gps_position ``` diff --git a/docs/ko/msg_docs/SensorGyro.md b/docs/ko/msg_docs/SensorGyro.md index 71eb80d0c5..6dc85207fc 100644 --- a/docs/ko/msg_docs/SensorGyro.md +++ b/docs/ko/msg_docs/SensorGyro.md @@ -23,9 +23,9 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------------------------- | ------- | ----- | -- | -| ORB_QUEUE_LENGTH | `uint8` | 8 | | +| 명칭 | 형식 | Value | 설명 | +| ----------------------------------------------------------------------------------------- | ------- | ----- | -- | +| ORB_QUEUE_LENGTH | `uint8` | 8 | | ## Source Message diff --git a/docs/ko/msg_docs/SensorGyroFft.md b/docs/ko/msg_docs/SensorGyroFft.md index db7dd2359d..a1b4edddb3 100644 --- a/docs/ko/msg_docs/SensorGyroFft.md +++ b/docs/ko/msg_docs/SensorGyroFft.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # SensorGyroFft (UORB message) -**TOPICS:** sensor_gyrofft +**TOPICS:** sensor_gyro_fft ## Fields diff --git a/docs/ko/msg_docs/SensorGyroFifo.md b/docs/ko/msg_docs/SensorGyroFifo.md index 9309924553..1494c0d382 100644 --- a/docs/ko/msg_docs/SensorGyroFifo.md +++ b/docs/ko/msg_docs/SensorGyroFifo.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # SensorGyroFifo (UORB message) -**TOPICS:** sensor_gyrofifo +**TOPICS:** sensor_gyro_fifo ## Fields @@ -22,9 +22,9 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------------------------- | ------- | ----- | -- | -| ORB_QUEUE_LENGTH | `uint8` | 4 | | +| 명칭 | 형식 | Value | 설명 | +| ----------------------------------------------------------------------------------------- | ------- | ----- | -- | +| ORB_QUEUE_LENGTH | `uint8` | 4 | | ## Source Message diff --git a/docs/ko/msg_docs/SensorMag.md b/docs/ko/msg_docs/SensorMag.md index 98b4a1d1fd..19779e15cd 100644 --- a/docs/ko/msg_docs/SensorMag.md +++ b/docs/ko/msg_docs/SensorMag.md @@ -21,9 +21,9 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------------------------- | ------- | ----- | -- | -| ORB_QUEUE_LENGTH | `uint8` | 4 | | +| 명칭 | 형식 | Value | 설명 | +| ----------------------------------------------------------------------------------------- | ------- | ----- | -- | +| ORB_QUEUE_LENGTH | `uint8` | 4 | | ## Source Message diff --git a/docs/ko/msg_docs/SensorOpticalFlow.md b/docs/ko/msg_docs/SensorOpticalFlow.md index 1b6e407e1c..79a5a1b372 100644 --- a/docs/ko/msg_docs/SensorOpticalFlow.md +++ b/docs/ko/msg_docs/SensorOpticalFlow.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # SensorOpticalFlow (UORB message) -**TOPICS:** sensor_opticalflow +**TOPICS:** sensor_optical_flow ## Fields @@ -28,12 +28,12 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------------------------------- | ------- | ----- | -- | -| MODE_UNKNOWN | `uint8` | 0 | | -| MODE_BRIGHT | `uint8` | 1 | | -| MODE_LOWLIGHT | `uint8` | 2 | | -| MODE_SUPER_LOWLIGHT | `uint8` | 3 | | +| 명칭 | 형식 | Value | 설명 | +| ----------------------------------------------------------------------------------------------- | ------- | ----- | -- | +| MODE_UNKNOWN | `uint8` | 0 | | +| MODE_BRIGHT | `uint8` | 1 | | +| MODE_LOWLIGHT | `uint8` | 2 | | +| MODE_SUPER_LOWLIGHT | `uint8` | 3 | | ## Source Message diff --git a/docs/ko/msg_docs/SensorPreflightMag.md b/docs/ko/msg_docs/SensorPreflightMag.md index 2f47320d2a..e4f218590c 100644 --- a/docs/ko/msg_docs/SensorPreflightMag.md +++ b/docs/ko/msg_docs/SensorPreflightMag.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Pre-flight sensor check metrics. The topic will not be updated when the vehicle is armed. -**TOPICS:** sensor_preflightmag +**TOPICS:** sensor_preflight_mag ## Fields diff --git a/docs/ko/msg_docs/SensorsStatusImu.md b/docs/ko/msg_docs/SensorsStatusImu.md index cd716510f9..51a393aa53 100644 --- a/docs/ko/msg_docs/SensorsStatusImu.md +++ b/docs/ko/msg_docs/SensorsStatusImu.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Sensor check metrics. This will be zero for a sensor that's primary or unpopulated. -**TOPICS:** sensors_statusimu +**TOPICS:** sensors_status_imu ## Fields diff --git a/docs/ko/msg_docs/SystemPower.md b/docs/ko/msg_docs/SystemPower.md index fae286bc67..83efd7eda8 100644 --- a/docs/ko/msg_docs/SystemPower.md +++ b/docs/ko/msg_docs/SystemPower.md @@ -27,16 +27,16 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------------------------------- | ------- | ----- | -- | -| BRICK1_VALID_SHIFTS | `uint8` | 0 | | -| BRICK1_VALID_MASK | `uint8` | 1 | | -| BRICK2_VALID_SHIFTS | `uint8` | 1 | | -| BRICK2_VALID_MASK | `uint8` | 2 | | -| BRICK3_VALID_SHIFTS | `uint8` | 2 | | -| BRICK3_VALID_MASK | `uint8` | 4 | | -| BRICK4_VALID_SHIFTS | `uint8` | 3 | | -| BRICK4_VALID_MASK | `uint8` | 8 | | +| 명칭 | 형식 | Value | 설명 | +| ----------------------------------------------------------------------------------------------- | ------- | ----- | -- | +| BRICK1_VALID_SHIFTS | `uint8` | 0 | | +| BRICK1_VALID_MASK | `uint8` | 1 | | +| BRICK2_VALID_SHIFTS | `uint8` | 1 | | +| BRICK2_VALID_MASK | `uint8` | 2 | | +| BRICK3_VALID_SHIFTS | `uint8` | 2 | | +| BRICK3_VALID_MASK | `uint8` | 4 | | +| BRICK4_VALID_SHIFTS | `uint8` | 3 | | +| BRICK4_VALID_MASK | `uint8` | 8 | | ## Source Message diff --git a/docs/ko/msg_docs/TakeoffStatus.md b/docs/ko/msg_docs/TakeoffStatus.md index 4797f9e947..030ebe66bb 100644 --- a/docs/ko/msg_docs/TakeoffStatus.md +++ b/docs/ko/msg_docs/TakeoffStatus.md @@ -18,14 +18,14 @@ Status of the takeoff state machine currently just available for multicopters. ## Constants -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | ----- | -- | -| TAKEOFF_STATE_UNINITIALIZED | `uint8` | 0 | | -| TAKEOFF_STATE_DISARMED | `uint8` | 1 | | -| TAKEOFF_STATE_SPOOLUP | `uint8` | 2 | | -| TAKEOFF_STATE_READY_FOR_TAKEOFF | `uint8` | 3 | | -| TAKEOFF_STATE_RAMPUP | `uint8` | 4 | | -| TAKEOFF_STATE_FLIGHT | `uint8` | 5 | | +| 명칭 | 형식 | Value | 설명 | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | ----- | -- | +| TAKEOFF_STATE_UNINITIALIZED | `uint8` | 0 | | +| TAKEOFF_STATE_DISARMED | `uint8` | 1 | | +| TAKEOFF_STATE_SPOOLUP | `uint8` | 2 | | +| TAKEOFF_STATE_READY_FOR_TAKEOFF | `uint8` | 3 | | +| TAKEOFF_STATE_RAMPUP | `uint8` | 4 | | +| TAKEOFF_STATE_FLIGHT | `uint8` | 5 | | ## Source Message diff --git a/docs/ko/msg_docs/TaskStackInfo.md b/docs/ko/msg_docs/TaskStackInfo.md index b876ff4a7d..89f61d0213 100644 --- a/docs/ko/msg_docs/TaskStackInfo.md +++ b/docs/ko/msg_docs/TaskStackInfo.md @@ -6,7 +6,7 @@ pageClass: is-wide-page stack information for a single running process. -**TOPICS:** task_stackinfo +**TOPICS:** task_stack_info ## Fields @@ -18,9 +18,9 @@ stack information for a single running process. ## Constants -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------------------------- | ------- | ----- | -- | -| ORB_QUEUE_LENGTH | `uint8` | 2 | | +| 명칭 | 형식 | Value | 설명 | +| ----------------------------------------------------------------------------------------- | ------- | ----- | -- | +| ORB_QUEUE_LENGTH | `uint8` | 2 | | ## Source Message diff --git a/docs/ko/msg_docs/TelemetryStatus.md b/docs/ko/msg_docs/TelemetryStatus.md index 0061ddec9a..c94308039f 100644 --- a/docs/ko/msg_docs/TelemetryStatus.md +++ b/docs/ko/msg_docs/TelemetryStatus.md @@ -36,6 +36,7 @@ pageClass: is-wide-page | heartbeat_type_onboard_controller | `bool` | | | MAV_TYPE_ONBOARD_CONTROLLER | | heartbeat_type_gimbal | `bool` | | | MAV_TYPE_GIMBAL | | heartbeat_type_adsb | `bool` | | | MAV_TYPE_ADSB | +| heartbeat_type_flarm | `bool` | | | MAV_TYPE_FLARM | | heartbeat_type_camera | `bool` | | | MAV_TYPE_CAMERA | | heartbeat_type_parachute | `bool` | | | MAV_TYPE_PARACHUTE | | heartbeat_type_open_drone_id | `bool` | | | MAV_TYPE_ODID | @@ -51,14 +52,14 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| ---------------------------------------------------------------------------------------------------------------------------------- | -------- | ------- | ------------------------------------------------------------------ | -| LINK_TYPE_GENERIC | `uint8` | 0 | | -| LINK_TYPE_UBIQUITY_BULLET | `uint8` | 1 | | -| LINK_TYPE_WIRE | `uint8` | 2 | | -| LINK_TYPE_USB | `uint8` | 3 | | -| LINK_TYPE_IRIDIUM | `uint8` | 4 | | -| HEARTBEAT_TIMEOUT_US | `uint64` | 2500000 | Heartbeat timeout (tolerate missing 1 + jitter) | +| 명칭 | 형식 | Value | 설명 | +| -------------------------------------------------------------------------------------------------------------------------------- | -------- | ------- | ------------------------------------------------------------------ | +| LINK_TYPE_GENERIC | `uint8` | 0 | | +| LINK_TYPE_UBIQUITY_BULLET | `uint8` | 1 | | +| LINK_TYPE_WIRE | `uint8` | 2 | | +| LINK_TYPE_USB | `uint8` | 3 | | +| LINK_TYPE_IRIDIUM | `uint8` | 4 | | +| HEARTBEAT_TIMEOUT_US | `uint64` | 2500000 | Heartbeat timeout (tolerate missing 1 + jitter) | ## Source Message @@ -113,6 +114,7 @@ bool heartbeat_type_gcs # MAV_TYPE_GCS bool heartbeat_type_onboard_controller # MAV_TYPE_ONBOARD_CONTROLLER bool heartbeat_type_gimbal # MAV_TYPE_GIMBAL bool heartbeat_type_adsb # MAV_TYPE_ADSB +bool heartbeat_type_flarm # MAV_TYPE_FLARM bool heartbeat_type_camera # MAV_TYPE_CAMERA bool heartbeat_type_parachute # MAV_TYPE_PARACHUTE bool heartbeat_type_open_drone_id # MAV_TYPE_ODID diff --git a/docs/ko/msg_docs/TiltrotorExtraControls.md b/docs/ko/msg_docs/TiltrotorExtraControls.md index 8a081e8243..1384289bc1 100644 --- a/docs/ko/msg_docs/TiltrotorExtraControls.md +++ b/docs/ko/msg_docs/TiltrotorExtraControls.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # TiltrotorExtraControls (UORB message) -**TOPICS:** tiltrotor_extracontrols +**TOPICS:** tiltrotor_extra_controls ## Fields diff --git a/docs/ko/msg_docs/TimesyncStatus.md b/docs/ko/msg_docs/TimesyncStatus.md index 0893914b5d..719de90220 100644 --- a/docs/ko/msg_docs/TimesyncStatus.md +++ b/docs/ko/msg_docs/TimesyncStatus.md @@ -19,11 +19,11 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| --------------------------------------------------------------------------------------------------------- | ------- | ----- | -- | -| SOURCE_PROTOCOL_UNKNOWN | `uint8` | 0 | | -| SOURCE_PROTOCOL_MAVLINK | `uint8` | 1 | | -| SOURCE_PROTOCOL_DDS | `uint8` | 2 | | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------------------------------------------- | ------- | ----- | -- | +| SOURCE_PROTOCOL_UNKNOWN | `uint8` | 0 | | +| SOURCE_PROTOCOL_MAVLINK | `uint8` | 1 | | +| SOURCE_PROTOCOL_DDS | `uint8` | 2 | | ## Source Message diff --git a/docs/ko/msg_docs/TrajectorySetpoint.md b/docs/ko/msg_docs/TrajectorySetpoint.md index 78afc474ec..5765eec965 100644 --- a/docs/ko/msg_docs/TrajectorySetpoint.md +++ b/docs/ko/msg_docs/TrajectorySetpoint.md @@ -22,9 +22,9 @@ Trajectory setpoint in NED frame. Input to PID position controller. Needs to be ## Constants -| 명칭 | 형식 | Value | 설명 | -| -------------------------------------------------------------------- | -------- | ----- | -- | -| MESSAGE_VERSION | `uint32` | 0 | | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------ | -------- | ----- | -- | +| MESSAGE_VERSION | `uint32` | 0 | | ## Source Message diff --git a/docs/ko/msg_docs/TransponderReport.md b/docs/ko/msg_docs/TransponderReport.md index a501f648a3..b759ee2d8c 100644 --- a/docs/ko/msg_docs/TransponderReport.md +++ b/docs/ko/msg_docs/TransponderReport.md @@ -28,37 +28,37 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------- | ----- | -- | -| PX4_ADSB_FLAGS_VALID_COORDS | `uint16` | 1 | | -| PX4_ADSB_FLAGS_VALID_ALTITUDE | `uint16` | 2 | | -| PX4_ADSB_FLAGS_VALID_HEADING | `uint16` | 4 | | -| PX4_ADSB_FLAGS_VALID_VELOCITY | `uint16` | 8 | | -| PX4_ADSB_FLAGS_VALID_CALLSIGN | `uint16` | 16 | | -| PX4_ADSB_FLAGS_VALID_SQUAWK | `uint16` | 32 | | -| PX4_ADSB_FLAGS_RETRANSLATE | `uint16` | 256 | | -| ADSB_EMITTER_TYPE_NO_INFO | `uint16` | 0 | | -| ADSB_EMITTER_TYPE_LIGHT | `uint16` | 1 | | -| ADSB_EMITTER_TYPE_SMALL | `uint16` | 2 | | -| ADSB_EMITTER_TYPE_LARGE | `uint16` | 3 | | -| ADSB_EMITTER_TYPE_HIGH_VORTEX_LARGE | `uint16` | 4 | | -| ADSB_EMITTER_TYPE_HEAVY | `uint16` | 5 | | -| ADSB_EMITTER_TYPE_HIGHLY_MANUV | `uint16` | 6 | | -| ADSB_EMITTER_TYPE_ROTOCRAFT | `uint16` | 7 | | -| ADSB_EMITTER_TYPE_UNASSIGNED | `uint16` | 8 | | -| ADSB_EMITTER_TYPE_GLIDER | `uint16` | 9 | | -| ADSB_EMITTER_TYPE_LIGHTER_AIR | `uint16` | 10 | | -| ADSB_EMITTER_TYPE_PARACHUTE | `uint16` | 11 | | -| ADSB_EMITTER_TYPE_ULTRA_LIGHT | `uint16` | 12 | | -| ADSB_EMITTER_TYPE_UNASSIGNED2 | `uint16` | 13 | | -| ADSB_EMITTER_TYPE_UAV | `uint16` | 14 | | -| ADSB_EMITTER_TYPE_SPACE | `uint16` | 15 | | -| ADSB_EMITTER_TYPE_UNASSGINED3 | `uint16` | 16 | | -| ADSB_EMITTER_TYPE_EMERGENCY_SURFACE | `uint16` | 17 | | -| ADSB_EMITTER_TYPE_SERVICE_SURFACE | `uint16` | 18 | | -| ADSB_EMITTER_TYPE_POINT_OBSTACLE | `uint16` | 19 | | -| ADSB_EMITTER_TYPE_ENUM_END | `uint16` | 20 | | -| ORB_QUEUE_LENGTH | `uint8` | 16 | | +| 명칭 | 형식 | Value | 설명 | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ----- | -- | +| PX4_ADSB_FLAGS_VALID_COORDS | `uint16` | 1 | | +| PX4_ADSB_FLAGS_VALID_ALTITUDE | `uint16` | 2 | | +| PX4_ADSB_FLAGS_VALID_HEADING | `uint16` | 4 | | +| PX4_ADSB_FLAGS_VALID_VELOCITY | `uint16` | 8 | | +| PX4_ADSB_FLAGS_VALID_CALLSIGN | `uint16` | 16 | | +| PX4_ADSB_FLAGS_VALID_SQUAWK | `uint16` | 32 | | +| PX4_ADSB_FLAGS_RETRANSLATE | `uint16` | 256 | | +| ADSB_EMITTER_TYPE_NO_INFO | `uint16` | 0 | | +| ADSB_EMITTER_TYPE_LIGHT | `uint16` | 1 | | +| ADSB_EMITTER_TYPE_SMALL | `uint16` | 2 | | +| ADSB_EMITTER_TYPE_LARGE | `uint16` | 3 | | +| ADSB_EMITTER_TYPE_HIGH_VORTEX_LARGE | `uint16` | 4 | | +| ADSB_EMITTER_TYPE_HEAVY | `uint16` | 5 | | +| ADSB_EMITTER_TYPE_HIGHLY_MANUV | `uint16` | 6 | | +| ADSB_EMITTER_TYPE_ROTOCRAFT | `uint16` | 7 | | +| ADSB_EMITTER_TYPE_UNASSIGNED | `uint16` | 8 | | +| ADSB_EMITTER_TYPE_GLIDER | `uint16` | 9 | | +| ADSB_EMITTER_TYPE_LIGHTER_AIR | `uint16` | 10 | | +| ADSB_EMITTER_TYPE_PARACHUTE | `uint16` | 11 | | +| ADSB_EMITTER_TYPE_ULTRA_LIGHT | `uint16` | 12 | | +| ADSB_EMITTER_TYPE_UNASSIGNED2 | `uint16` | 13 | | +| ADSB_EMITTER_TYPE_UAV | `uint16` | 14 | | +| ADSB_EMITTER_TYPE_SPACE | `uint16` | 15 | | +| ADSB_EMITTER_TYPE_UNASSGINED3 | `uint16` | 16 | | +| ADSB_EMITTER_TYPE_EMERGENCY_SURFACE | `uint16` | 17 | | +| ADSB_EMITTER_TYPE_SERVICE_SURFACE | `uint16` | 18 | | +| ADSB_EMITTER_TYPE_POINT_OBSTACLE | `uint16` | 19 | | +| ADSB_EMITTER_TYPE_ENUM_END | `uint16` | 20 | | +| ORB_QUEUE_LENGTH | `uint8` | 16 | | ## Source Message diff --git a/docs/ko/msg_docs/TuneControl.md b/docs/ko/msg_docs/TuneControl.md index 5e1da3cd11..6ac453e9c4 100644 --- a/docs/ko/msg_docs/TuneControl.md +++ b/docs/ko/msg_docs/TuneControl.md @@ -22,33 +22,33 @@ This message is used to control the tunes, when the tune_id is set to CUSTOM. th ## Constants -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | ----- | -- | -| TUNE_ID_STOP | `uint8` | 0 | | -| TUNE_ID_STARTUP | `uint8` | 1 | | -| TUNE_ID_ERROR | `uint8` | 2 | | -| TUNE_ID_NOTIFY_POSITIVE | `uint8` | 3 | | -| TUNE_ID_NOTIFY_NEUTRAL | `uint8` | 4 | | -| TUNE_ID_NOTIFY_NEGATIVE | `uint8` | 5 | | -| TUNE_ID_ARMING_WARNING | `uint8` | 6 | | -| TUNE_ID_BATTERY_WARNING_SLOW | `uint8` | 7 | | -| TUNE_ID_BATTERY_WARNING_FAST | `uint8` | 8 | | -| TUNE_ID_GPS_WARNING | `uint8` | 9 | | -| TUNE_ID_ARMING_FAILURE | `uint8` | 10 | | -| TUNE_ID_PARACHUTE_RELEASE | `uint8` | 11 | | -| TUNE_ID_SINGLE_BEEP | `uint8` | 12 | | -| TUNE_ID_HOME_SET | `uint8` | 13 | | -| TUNE_ID_SD_INIT | `uint8` | 14 | | -| TUNE_ID_SD_ERROR | `uint8` | 15 | | -| TUNE_ID_PROG_PX4IO | `uint8` | 16 | | -| TUNE_ID_PROG_PX4IO_OK | `uint8` | 17 | | -| TUNE_ID_PROG_PX4IO_ERR | `uint8` | 18 | | -| TUNE_ID_POWER_OFF | `uint8` | 19 | | -| NUMBER_OF_TUNES | `uint8` | 20 | | -| VOLUME_LEVEL_MIN | `uint8` | 0 | | -| VOLUME_LEVEL_DEFAULT | `uint8` | 20 | | -| VOLUME_LEVEL_MAX | `uint8` | 100 | | -| ORB_QUEUE_LENGTH | `uint8` | 4 | | +| 명칭 | 형식 | Value | 설명 | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | ----- | -- | +| TUNE_ID_STOP | `uint8` | 0 | | +| TUNE_ID_STARTUP | `uint8` | 1 | | +| TUNE_ID_ERROR | `uint8` | 2 | | +| TUNE_ID_NOTIFY_POSITIVE | `uint8` | 3 | | +| TUNE_ID_NOTIFY_NEUTRAL | `uint8` | 4 | | +| TUNE_ID_NOTIFY_NEGATIVE | `uint8` | 5 | | +| TUNE_ID_ARMING_WARNING | `uint8` | 6 | | +| TUNE_ID_BATTERY_WARNING_SLOW | `uint8` | 7 | | +| TUNE_ID_BATTERY_WARNING_FAST | `uint8` | 8 | | +| TUNE_ID_GPS_WARNING | `uint8` | 9 | | +| TUNE_ID_ARMING_FAILURE | `uint8` | 10 | | +| TUNE_ID_PARACHUTE_RELEASE | `uint8` | 11 | | +| TUNE_ID_SINGLE_BEEP | `uint8` | 12 | | +| TUNE_ID_HOME_SET | `uint8` | 13 | | +| TUNE_ID_SD_INIT | `uint8` | 14 | | +| TUNE_ID_SD_ERROR | `uint8` | 15 | | +| TUNE_ID_PROG_PX4IO | `uint8` | 16 | | +| TUNE_ID_PROG_PX4IO_OK | `uint8` | 17 | | +| TUNE_ID_PROG_PX4IO_ERR | `uint8` | 18 | | +| TUNE_ID_POWER_OFF | `uint8` | 19 | | +| NUMBER_OF_TUNES | `uint8` | 20 | | +| VOLUME_LEVEL_MIN | `uint8` | 0 | | +| VOLUME_LEVEL_DEFAULT | `uint8` | 20 | | +| VOLUME_LEVEL_MAX | `uint8` | 100 | | +| ORB_QUEUE_LENGTH | `uint8` | 4 | | ## Source Message diff --git a/docs/ko/msg_docs/UavcanParameterRequest.md b/docs/ko/msg_docs/UavcanParameterRequest.md index d2cb0f7771..0e3250cd3b 100644 --- a/docs/ko/msg_docs/UavcanParameterRequest.md +++ b/docs/ko/msg_docs/UavcanParameterRequest.md @@ -6,7 +6,7 @@ pageClass: is-wide-page UAVCAN-MAVLink parameter bridge request type. -**TOPICS:** uavcan_parameterrequest +**TOPICS:** uavcan_parameter_request ## Fields @@ -23,16 +23,16 @@ UAVCAN-MAVLink parameter bridge request type. ## Constants -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | ----- | ------------------------------------------------------------------------------------------------------------------------------------------ | -| MESSAGE_TYPE_PARAM_REQUEST_READ | `uint8` | 20 | MAVLINK_MSG_ID_PARAM_REQUEST_READ | -| MESSAGE_TYPE_PARAM_REQUEST_LIST | `uint8` | 21 | MAVLINK_MSG_ID_PARAM_REQUEST_LIST | -| MESSAGE_TYPE_PARAM_SET | `uint8` | 23 | MAVLINK_MSG_ID_PARAM_SET | -| NODE_ID_ALL | `uint8` | 0 | MAV_COMP_ID_ALL | -| PARAM_TYPE_UINT8 | `uint8` | 1 | MAV_PARAM_TYPE_UINT8 | -| PARAM_TYPE_INT64 | `uint8` | 8 | MAV_PARAM_TYPE_INT64 | -| PARAM_TYPE_REAL32 | `uint8` | 9 | MAV_PARAM_TYPE_REAL32 | -| ORB_QUEUE_LENGTH | `uint8` | 4 | | +| 명칭 | 형식 | Value | 설명 | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | ----- | ------------------------------------------------------------------------------------------------------------------------------------------ | +| MESSAGE_TYPE_PARAM_REQUEST_READ | `uint8` | 20 | MAVLINK_MSG_ID_PARAM_REQUEST_READ | +| MESSAGE_TYPE_PARAM_REQUEST_LIST | `uint8` | 21 | MAVLINK_MSG_ID_PARAM_REQUEST_LIST | +| MESSAGE_TYPE_PARAM_SET | `uint8` | 23 | MAVLINK_MSG_ID_PARAM_SET | +| NODE_ID_ALL | `uint8` | 0 | MAV_COMP_ID_ALL | +| PARAM_TYPE_UINT8 | `uint8` | 1 | MAV_PARAM_TYPE_UINT8 | +| PARAM_TYPE_INT64 | `uint8` | 8 | MAV_PARAM_TYPE_INT64 | +| PARAM_TYPE_REAL32 | `uint8` | 9 | MAV_PARAM_TYPE_REAL32 | +| ORB_QUEUE_LENGTH | `uint8` | 4 | | ## Source Message diff --git a/docs/ko/msg_docs/UavcanParameterValue.md b/docs/ko/msg_docs/UavcanParameterValue.md index 606f06bbad..d7efeb7811 100644 --- a/docs/ko/msg_docs/UavcanParameterValue.md +++ b/docs/ko/msg_docs/UavcanParameterValue.md @@ -6,7 +6,7 @@ pageClass: is-wide-page UAVCAN-MAVLink parameter bridge response type. -**TOPICS:** uavcan_parametervalue +**TOPICS:** uavcan_parameter_value ## Fields diff --git a/docs/ko/msg_docs/UlogStream.md b/docs/ko/msg_docs/UlogStream.md index 2025b806f0..eb8b8ec85e 100644 --- a/docs/ko/msg_docs/UlogStream.md +++ b/docs/ko/msg_docs/UlogStream.md @@ -21,10 +21,10 @@ Message to stream ULog data from the logger. Corresponds to the LOGGING_DATA. ma ## Constants -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------------------------- | ------- | ----- | ------------------------------------------------------------------------------------ | -| FLAGS_NEED_ACK | `uint8` | 1 | if set, this message requires to be acked. | -| ORB_QUEUE_LENGTH | `uint8` | 16 | TODO: we might be able to reduce this if mavlink polled on the topic | +| 명칭 | 형식 | Value | 설명 | +| ----------------------------------------------------------------------------------------- | ------- | ----- | ------------------------------------------------------------------------------------ | +| FLAGS_NEED_ACK | `uint8` | 1 | if set, this message requires to be acked. | +| ORB_QUEUE_LENGTH | `uint8` | 16 | TODO: we might be able to reduce this if mavlink polled on the topic | ## Source Message diff --git a/docs/ko/msg_docs/UlogStreamAck.md b/docs/ko/msg_docs/UlogStreamAck.md index 67fa1eed8a..1d7838b21d 100644 --- a/docs/ko/msg_docs/UlogStreamAck.md +++ b/docs/ko/msg_docs/UlogStreamAck.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Ack a previously sent ulog_stream message that had. the NEED_ACK flag set. -**TOPICS:** ulog_streamack +**TOPICS:** ulog_stream_ack ## Fields @@ -17,10 +17,10 @@ Ack a previously sent ulog_stream message that had. the NEED_ACK flag set. ## Constants -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------------------- | ------- | ----- | ------------------------------------------------------------------------------------------------------------------------ | -| ACK_TIMEOUT | `int32` | 50 | timeout waiting for an ack until we retry to send the message [ms] | -| ACK_MAX_TRIES | `int32` | 50 | maximum amount of tries to (re-)send a message, each time waiting ACK_TIMEOUT ms | +| 명칭 | 형식 | Value | 설명 | +| ----------------------------------------------------------------------------------- | ------- | ----- | ------------------------------------------------------------------------------------------------------------------------ | +| ACK_TIMEOUT | `int32` | 50 | timeout waiting for an ack until we retry to send the message [ms] | +| ACK_MAX_TRIES | `int32` | 50 | maximum amount of tries to (re-)send a message, each time waiting ACK_TIMEOUT ms | ## Source Message diff --git a/docs/ko/msg_docs/UnregisterExtComponent.md b/docs/ko/msg_docs/UnregisterExtComponent.md index 67f2a7e058..eddc1058c1 100644 --- a/docs/ko/msg_docs/UnregisterExtComponent.md +++ b/docs/ko/msg_docs/UnregisterExtComponent.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # UnregisterExtComponent (UORB message) -**TOPICS:** unregister_extcomponent +**TOPICS:** unregister_ext_component ## Fields @@ -18,9 +18,9 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| -------------------------------------------------------------------- | -------- | ----- | -- | -| MESSAGE_VERSION | `uint32` | 0 | | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------ | -------- | ----- | -- | +| MESSAGE_VERSION | `uint32` | 0 | | ## Source Message diff --git a/docs/ko/msg_docs/VehicleAirData.md b/docs/ko/msg_docs/VehicleAirData.md index cc1ceb71e1..ec964acd4c 100644 --- a/docs/ko/msg_docs/VehicleAirData.md +++ b/docs/ko/msg_docs/VehicleAirData.md @@ -9,7 +9,7 @@ Vehicle air data. Data from the currently selected barometer (plus ambient temperature from the source specified in temperature_source). Includes calculated data such as barometric altitude and air density. -**TOPICS:** vehicle_airdata +**TOPICS:** vehicle_air_data ## Fields diff --git a/docs/ko/msg_docs/VehicleAngularAccelerationSetpoint.md b/docs/ko/msg_docs/VehicleAngularAccelerationSetpoint.md index 4989f5d30b..cd2bc7bedd 100644 --- a/docs/ko/msg_docs/VehicleAngularAccelerationSetpoint.md +++ b/docs/ko/msg_docs/VehicleAngularAccelerationSetpoint.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # VehicleAngularAccelerationSetpoint (UORB message) -**TOPICS:** vehicle_angularacceleration_setpoint +**TOPICS:** vehicle_angular_acceleration_setpoint ## Fields diff --git a/docs/ko/msg_docs/VehicleAngularVelocity.md b/docs/ko/msg_docs/VehicleAngularVelocity.md index b12ac9e5a6..1b2552bedf 100644 --- a/docs/ko/msg_docs/VehicleAngularVelocity.md +++ b/docs/ko/msg_docs/VehicleAngularVelocity.md @@ -17,9 +17,9 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| -------------------------------------------------------------------- | -------- | ----- | -- | -| MESSAGE_VERSION | `uint32` | 0 | | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------ | -------- | ----- | -- | +| MESSAGE_VERSION | `uint32` | 0 | | ## Source Message diff --git a/docs/ko/msg_docs/VehicleAttitude.md b/docs/ko/msg_docs/VehicleAttitude.md index f3c3cc59c0..59c6ed443d 100644 --- a/docs/ko/msg_docs/VehicleAttitude.md +++ b/docs/ko/msg_docs/VehicleAttitude.md @@ -20,9 +20,9 @@ This is similar to the mavlink message ATTITUDE_QUATERNION, but for onboard use. ## Constants -| 명칭 | 형식 | Value | 설명 | -| -------------------------------------------------------------------- | -------- | ----- | -- | -| MESSAGE_VERSION | `uint32` | 0 | | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------ | -------- | ----- | -- | +| MESSAGE_VERSION | `uint32` | 0 | | ## Source Message diff --git a/docs/ko/msg_docs/VehicleAttitudeSetpoint.md b/docs/ko/msg_docs/VehicleAttitudeSetpoint.md index 27ab886978..96c48ee7eb 100644 --- a/docs/ko/msg_docs/VehicleAttitudeSetpoint.md +++ b/docs/ko/msg_docs/VehicleAttitudeSetpoint.md @@ -17,9 +17,9 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| -------------------------------------------------------------------- | -------- | ----- | -- | -| MESSAGE_VERSION | `uint32` | 1 | | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------ | -------- | ----- | -- | +| MESSAGE_VERSION | `uint32` | 1 | | ## Source Message diff --git a/docs/ko/msg_docs/VehicleAttitudeSetpointV0.md b/docs/ko/msg_docs/VehicleAttitudeSetpointV0.md index 1d1ed1de3f..756358d9ae 100644 --- a/docs/ko/msg_docs/VehicleAttitudeSetpointV0.md +++ b/docs/ko/msg_docs/VehicleAttitudeSetpointV0.md @@ -19,9 +19,9 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| -------------------------------------------------------------------- | -------- | ----- | -- | -| MESSAGE_VERSION | `uint32` | 0 | | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------ | -------- | ----- | -- | +| MESSAGE_VERSION | `uint32` | 0 | | ## Source Message diff --git a/docs/ko/msg_docs/VehicleCommand.md b/docs/ko/msg_docs/VehicleCommand.md index 88a1068ee2..0e93b24937 100644 --- a/docs/ko/msg_docs/VehicleCommand.md +++ b/docs/ko/msg_docs/VehicleCommand.md @@ -1052,6 +1052,20 @@ Actuator configuration command. | 6 | | | ? | | 7 | | | ? | +### VEHICLE_CMD_ESC_REQUEST_EEPROM (312) + +Request EEPROM data from an ESC. + +| Param | 단위 | Range/Enum | 설명 | +| ----- | -- | ---------- | ------------- | +| 1 | | | ESC Index | +| 2 | | | Firmware Type | +| 3 | | | Unused | +| 4 | | | Unused | +| 5 | | | Unused | +| 6 | | | ? | +| 7 | | | ? | + ### VEHICLE_CMD_COMPONENT_ARM_DISARM (400) Arms / Disarms a component. @@ -1444,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). @@ -1490,34 +1518,34 @@ Change mode by specifying nav_state directly. ### ORBIT_YAW_BEHAVIOUR {#ORBIT_YAW_BEHAVIOUR} -| 명칭 | 형식 | Value | 설명 | -| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | ----- | -- | -| ORBIT_YAW_BEHAVIOUR_HOLD_FRONT_TO_CIRCLE_CENTER | `uint8` | 0 | | -| ORBIT_YAW_BEHAVIOUR_HOLD_INITIAL_HEADING | `uint8` | 1 | | -| ORBIT_YAW_BEHAVIOUR_UNCONTROLLED | `uint8` | 2 | | -| ORBIT_YAW_BEHAVIOUR_HOLD_FRONT_TANGENT_TO_CIRCLE | `uint8` | 3 | | -| ORBIT_YAW_BEHAVIOUR_RC_CONTROLLED | `uint8` | 4 | | -| ORBIT_YAW_BEHAVIOUR_UNCHANGED | `uint8` | 5 | | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------- | ----- | -- | +| ORBIT_YAW_BEHAVIOUR_HOLD_FRONT_TO_CIRCLE_CENTER | `uint8` | 0 | | +| ORBIT_YAW_BEHAVIOUR_HOLD_INITIAL_HEADING | `uint8` | 1 | | +| ORBIT_YAW_BEHAVIOUR_UNCONTROLLED | `uint8` | 2 | | +| ORBIT_YAW_BEHAVIOUR_HOLD_FRONT_TANGENT_TO_CIRCLE | `uint8` | 3 | | +| ORBIT_YAW_BEHAVIOUR_RC_CONTROLLED | `uint8` | 4 | | +| ORBIT_YAW_BEHAVIOUR_UNCHANGED | `uint8` | 5 | | ### VEHICLE_ROI {#VEHICLE_ROI} -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------------------------------------------------------ | ------- | ----- | -------------------------------------------- | -| VEHICLE_ROI_NONE | `uint8` | 0 | No region of interest. | -| VEHICLE_ROI_WPNEXT | `uint8` | 1 | Point toward next MISSION. | -| VEHICLE_ROI_WPINDEX | `uint8` | 2 | Point toward given MISSION. | -| VEHICLE_ROI_LOCATION | `uint8` | 3 | Point toward fixed location. | -| VEHICLE_ROI_TARGET | `uint8` | 4 | Point toward target. | -| VEHICLE_ROI_ENUM_END | `uint8` | 5 | | +| 명칭 | 형식 | Value | 설명 | +| ---------------------------------------------------------------------------------------------------------------------- | ------- | ----- | -------------------------------------------- | +| VEHICLE_ROI_NONE | `uint8` | 0 | No region of interest. | +| VEHICLE_ROI_WPNEXT | `uint8` | 1 | Point toward next MISSION. | +| VEHICLE_ROI_WPINDEX | `uint8` | 2 | Point toward given MISSION. | +| VEHICLE_ROI_LOCATION | `uint8` | 3 | Point toward fixed location. | +| VEHICLE_ROI_TARGET | `uint8` | 4 | Point toward target. | +| VEHICLE_ROI_ENUM_END | `uint8` | 5 | | ### SPEED_TYPE {#SPEED_TYPE} -| 명칭 | 형식 | Value | 설명 | -| -------------------------------------------------------------------------------------------------------------------------------- | ------- | ----- | -- | -| SPEED_TYPE_AIRSPEED | `uint8` | 0 | | -| SPEED_TYPE_GROUNDSPEED | `uint8` | 1 | | -| SPEED_TYPE_CLIMB_SPEED | `uint8` | 2 | | -| SPEED_TYPE_DESCEND_SPEED | `uint8` | 3 | | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------------------------------------------------------------------ | ------- | ----- | -- | +| SPEED_TYPE_AIRSPEED | `uint8` | 0 | | +| SPEED_TYPE_GROUNDSPEED | `uint8` | 1 | | +| SPEED_TYPE_CLIMB_SPEED | `uint8` | 2 | | +| SPEED_TYPE_DESCEND_SPEED | `uint8` | 3 | | ### MAV_MOUNT_MODE {#MAV_MOUNT_MODE} @@ -1526,50 +1554,65 @@ Change mode by specifying nav_state directly. ## Constants -| 명칭 | 형식 | Value | 설명 | -| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| MESSAGE_VERSION | `uint32` | 0 | | -| PREFLIGHT_CALIBRATION_TEMPERATURE_CALIBRATION | `uint16` | 3 | Param value for VEHICLE_CMD_PREFLIGHT_CALIBRATION to start temperature calibration. | -| VEHICLE_MOUNT_MODE_RETRACT | `uint8` | 0 | Load and keep safe position (Roll,Pitch,Yaw) from permanent memory and stop stabilization. | -| VEHICLE_MOUNT_MODE_NEUTRAL | `uint8` | 1 | Load and keep neutral position (Roll,Pitch,Yaw) from permanent memory. | -| VEHICLE_MOUNT_MODE_MAVLINK_TARGETING | `uint8` | 2 | Load neutral position and start MAVLink Roll,Pitch,Yaw control with stabilization. | -| VEHICLE_MOUNT_MODE_RC_TARGETING | `uint8` | 3 | Load neutral position and start RC Roll,Pitch,Yaw control with stabilization. | -| VEHICLE_MOUNT_MODE_GPS_POINT | `uint8` | 4 | Load neutral position and start to point to Lat,Lon,Alt. | -| VEHICLE_MOUNT_MODE_ENUM_END | `uint8` | 5 | | -| PARACHUTE_ACTION_DISABLE | `uint8` | 0 | | -| PARACHUTE_ACTION_ENABLE | `uint8` | 1 | | -| PARACHUTE_ACTION_RELEASE | `uint8` | 2 | | -| FAILURE_UNIT_SENSOR_GYRO | `uint8` | 0 | | -| FAILURE_UNIT_SENSOR_ACCEL | `uint8` | 1 | | -| FAILURE_UNIT_SENSOR_MAG | `uint8` | 2 | | -| FAILURE_UNIT_SENSOR_BARO | `uint8` | 3 | | -| FAILURE_UNIT_SENSOR_GPS | `uint8` | 4 | | -| FAILURE_UNIT_SENSOR_OPTICAL_FLOW | `uint8` | 5 | | -| FAILURE_UNIT_SENSOR_VIO | `uint8` | 6 | | -| FAILURE_UNIT_SENSOR_DISTANCE_SENSOR | `uint8` | 7 | | -| FAILURE_UNIT_SENSOR_AIRSPEED | `uint8` | 8 | | -| FAILURE_UNIT_SYSTEM_BATTERY | `uint8` | 100 | | -| FAILURE_UNIT_SYSTEM_MOTOR | `uint8` | 101 | | -| FAILURE_UNIT_SYSTEM_SERVO | `uint8` | 102 | | -| FAILURE_UNIT_SYSTEM_AVOIDANCE | `uint8` | 103 | | -| FAILURE_UNIT_SYSTEM_RC_SIGNAL | `uint8` | 104 | | -| FAILURE_UNIT_SYSTEM_MAVLINK_SIGNAL | `uint8` | 105 | | -| FAILURE_TYPE_OK | `uint8` | 0 | | -| FAILURE_TYPE_OFF | `uint8` | 1 | | -| FAILURE_TYPE_STUCK | `uint8` | 2 | | -| FAILURE_TYPE_GARBAGE | `uint8` | 3 | | -| FAILURE_TYPE_WRONG | `uint8` | 4 | | -| FAILURE_TYPE_SLOW | `uint8` | 5 | | -| FAILURE_TYPE_DELAYED | `uint8` | 6 | | -| FAILURE_TYPE_INTERMITTENT | `uint8` | 7 | | -| ARMING_ACTION_DISARM | `int8` | 0 | | -| ARMING_ACTION_ARM | `int8` | 1 | | -| GRIPPER_ACTION_RELEASE | `uint8` | 0 | | -| GRIPPER_ACTION_GRAB | `uint8` | 1 | | -| SAFETY_OFF | `uint8` | 0 | | -| SAFETY_ON | `uint8` | 1 | | -| ORB_QUEUE_LENGTH | `uint8` | 8 | | -| COMPONENT_MODE_EXECUTOR_START | `uint16` | 1000 | | +| 명칭 | 형식 | Value | 설명 | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| MESSAGE_VERSION | `uint32` | 0 | | +| PREFLIGHT_CALIBRATION_TEMPERATURE_CALIBRATION | `uint16` | 3 | Param value for VEHICLE_CMD_PREFLIGHT_CALIBRATION to start temperature calibration. | +| FUSION_SOURCE_GPS | `uint8` | 0 | GNSS (EKF2_GPS{i}\_CTRL, use instance param) | +| FUSION_SOURCE_OF | `uint8` | 1 | Optical Flow (EKF2_OF_CTRL) | +| FUSION_SOURCE_EV | `uint8` | 2 | External Vision (EKF2_EV_CTRL) | +| FUSION_SOURCE_AGP | `uint8` | 3 | Auxiliary Global Position (EKF2_AGP{i}\_CTRL, use instance param) | +| FUSION_SOURCE_BARO | `uint8` | 4 | Barometer (EKF2_BARO_CTRL) | +| FUSION_SOURCE_RNG | `uint8` | 5 | Range Finder (EKF2_RNG_CTRL) | +| FUSION_SOURCE_MAG | `uint8` | 6 | Magnetometer (EKF2_MAG_TYPE) | +| FUSION_SOURCE_ASPD | `uint8` | 7 | Airspeed (EKF2_ARSP_THR) | +| FUSION_SOURCE_RNGBCN | `uint8` | 8 | Ranging Beacon | +| VEHICLE_MOUNT_MODE_RETRACT | `uint8` | 0 | Load and keep safe position (Roll,Pitch,Yaw) from permanent memory and stop stabilization. | +| VEHICLE_MOUNT_MODE_NEUTRAL | `uint8` | 1 | Load and keep neutral position (Roll,Pitch,Yaw) from permanent memory. | +| VEHICLE_MOUNT_MODE_MAVLINK_TARGETING | `uint8` | 2 | Load neutral position and start MAVLink Roll,Pitch,Yaw control with stabilization. | +| VEHICLE_MOUNT_MODE_RC_TARGETING | `uint8` | 3 | Load neutral position and start RC Roll,Pitch,Yaw control with stabilization. | +| VEHICLE_MOUNT_MODE_GPS_POINT | `uint8` | 4 | Load neutral position and start to point to Lat,Lon,Alt. | +| VEHICLE_MOUNT_MODE_ENUM_END | `uint8` | 5 | | +| ACTUATOR_CONFIGURATION_NONE | `uint8` | 0 | Do nothing. | +| ACTUATOR_CONFIGURATION_BEEP | `uint8` | 1 | Command the actuator to beep now. | +| ACTUATOR_CONFIGURATION_3D_MODE_ON | `uint8` | 2 | Permanently set the actuator (ESC) to 3D mode (reversible thrust). | +| ACTUATOR_CONFIGURATION_3D_MODE_OFF | `uint8` | 3 | Permanently set the actuator (ESC) to non 3D mode (non-reversible thrust). | +| ACTUATOR_CONFIGURATION_SPIN_DIRECTION1 | `uint8` | 4 | Permanently set the actuator (ESC) to spin direction 1 (which can be clockwise or counter-clockwise). | +| ACTUATOR_CONFIGURATION_SPIN_DIRECTION2 | `uint8` | 5 | Permanently set the actuator (ESC) to spin direction 2 (opposite of direction 1). | +| PARACHUTE_ACTION_DISABLE | `uint8` | 0 | | +| PARACHUTE_ACTION_ENABLE | `uint8` | 1 | | +| PARACHUTE_ACTION_RELEASE | `uint8` | 2 | | +| FAILURE_UNIT_SENSOR_GYRO | `uint8` | 0 | | +| FAILURE_UNIT_SENSOR_ACCEL | `uint8` | 1 | | +| FAILURE_UNIT_SENSOR_MAG | `uint8` | 2 | | +| FAILURE_UNIT_SENSOR_BARO | `uint8` | 3 | | +| FAILURE_UNIT_SENSOR_GPS | `uint8` | 4 | | +| FAILURE_UNIT_SENSOR_OPTICAL_FLOW | `uint8` | 5 | | +| FAILURE_UNIT_SENSOR_VIO | `uint8` | 6 | | +| FAILURE_UNIT_SENSOR_DISTANCE_SENSOR | `uint8` | 7 | | +| FAILURE_UNIT_SENSOR_AIRSPEED | `uint8` | 8 | | +| FAILURE_UNIT_SYSTEM_BATTERY | `uint8` | 100 | | +| FAILURE_UNIT_SYSTEM_MOTOR | `uint8` | 101 | | +| FAILURE_UNIT_SYSTEM_SERVO | `uint8` | 102 | | +| FAILURE_UNIT_SYSTEM_AVOIDANCE | `uint8` | 103 | | +| FAILURE_UNIT_SYSTEM_RC_SIGNAL | `uint8` | 104 | | +| FAILURE_UNIT_SYSTEM_MAVLINK_SIGNAL | `uint8` | 105 | | +| FAILURE_TYPE_OK | `uint8` | 0 | | +| FAILURE_TYPE_OFF | `uint8` | 1 | | +| FAILURE_TYPE_STUCK | `uint8` | 2 | | +| FAILURE_TYPE_GARBAGE | `uint8` | 3 | | +| FAILURE_TYPE_WRONG | `uint8` | 4 | | +| FAILURE_TYPE_SLOW | `uint8` | 5 | | +| FAILURE_TYPE_DELAYED | `uint8` | 6 | | +| FAILURE_TYPE_INTERMITTENT | `uint8` | 7 | | +| ARMING_ACTION_DISARM | `int8` | 0 | | +| ARMING_ACTION_ARM | `int8` | 1 | | +| GRIPPER_ACTION_RELEASE | `uint8` | 0 | | +| GRIPPER_ACTION_GRAB | `uint8` | 1 | | +| SAFETY_OFF | `uint8` | 0 | | +| SAFETY_ON | `uint8` | 1 | | +| ORB_QUEUE_LENGTH | `uint8` | 8 | | +| COMPONENT_MODE_EXECUTOR_START | `uint16` | 1000 | | ## Source Message @@ -1661,6 +1704,7 @@ uint16 VEHICLE_CMD_GIMBAL_DEVICE_INFORMATION = 283 # Command to ask information uint16 VEHICLE_CMD_MISSION_START = 300 # Start running a mission. |first_item: the first mission item to run|last_item: the last mission item to run (after this item is run, the mission ends)| uint16 VEHICLE_CMD_ACTUATOR_TEST = 310 # Actuator testing command. |[@range -1,1] value|[s] timeout|Unused|Unused|output function| uint16 VEHICLE_CMD_CONFIGURE_ACTUATOR = 311 # Actuator configuration command. |configuration|Unused|Unused|Unused|output function| +uint16 VEHICLE_CMD_ESC_REQUEST_EEPROM = 312 # Request EEPROM data from an ESC. |ESC Index|Firmware Type|Unused|Unused|Unused| uint16 VEHICLE_CMD_COMPONENT_ARM_DISARM = 400 # Arms / Disarms a component. |1 to arm, 0 to disarm. uint16 VEHICLE_CMD_RUN_PREARM_CHECKS = 401 # Instructs a target system to run pre-arm checks. uint16 VEHICLE_CMD_INJECT_FAILURE = 420 # Inject artificial failure for testing purposes. @@ -1690,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). @@ -1710,6 +1765,13 @@ uint8 VEHICLE_ROI_LOCATION = 3 # Point toward fixed location. uint8 VEHICLE_ROI_TARGET = 4 # Point toward target. uint8 VEHICLE_ROI_ENUM_END = 5 +uint8 ACTUATOR_CONFIGURATION_NONE = 0 # Do nothing. +uint8 ACTUATOR_CONFIGURATION_BEEP = 1 # Command the actuator to beep now. +uint8 ACTUATOR_CONFIGURATION_3D_MODE_ON = 2 # Permanently set the actuator (ESC) to 3D mode (reversible thrust). +uint8 ACTUATOR_CONFIGURATION_3D_MODE_OFF = 3 # Permanently set the actuator (ESC) to non 3D mode (non-reversible thrust). +uint8 ACTUATOR_CONFIGURATION_SPIN_DIRECTION1 = 4 # Permanently set the actuator (ESC) to spin direction 1 (which can be clockwise or counter-clockwise). +uint8 ACTUATOR_CONFIGURATION_SPIN_DIRECTION2 = 5 # Permanently set the actuator (ESC) to spin direction 2 (opposite of direction 1). + uint8 PARACHUTE_ACTION_DISABLE = 0 uint8 PARACHUTE_ACTION_ENABLE = 1 uint8 PARACHUTE_ACTION_RELEASE = 2 diff --git a/docs/ko/msg_docs/VehicleCommandAck.md b/docs/ko/msg_docs/VehicleCommandAck.md index 1573f3a243..509f1a0097 100644 --- a/docs/ko/msg_docs/VehicleCommandAck.md +++ b/docs/ko/msg_docs/VehicleCommandAck.md @@ -4,42 +4,55 @@ pageClass: is-wide-page # VehicleCommandAck (UORB message) -Vehicle Command Ackonwledgement uORB message. Used for acknowledging the vehicle command being received. Follows the MAVLink COMMAND_ACK message definition. +Vehicle Command Acknowledgement uORB message. -**TOPICS:** vehicle_commandack +Used for acknowledging the vehicle command being received. +Follows the MAVLink COMMAND_ACK message definition + +**TOPICS:** vehicle_command_ack ## Fields -| 명칭 | 형식 | Unit [Frame] | Range/Enum | 설명 | -| ------------------------------------- | -------- | ---------------------------------------------------------------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| timestamp | `uint64` | | | time since system start (microseconds) | -| command | `uint32` | | | Command that is being acknowledged | -| result | `uint8` | | | Command result | -| result_param1 | `uint8` | | | Also used as progress[%], it can be set with the reason why the command was denied, or the progress percentage when result is MAV_RESULT_IN_PROGRESS | -| result_param2 | `int32` | | | Additional parameter of the result, example: which parameter of MAV_CMD_NAV_WAYPOINT caused it to be denied. | -| target_system | `uint8` | | | | -| target_component | `uint16` | | | Target component / mode executor | -| from_external | `bool` | | | Indicates if the command came from an external source | +| 명칭 | 형식 | Unit [Frame] | Range/Enum | 설명 | +| ------------------------------------- | -------- | ------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| timestamp | `uint64` | us | | time since system start | +| command | `uint32` | | | Command that is being acknowledged | +| result | `uint8` | | [VEHICLE_CMD_RESULT](#VEHICLE_CMD_RESULT) | Command result | +| result_param1 | `uint8` | | | Can be set with the reason why the command was denied, or the progress percentage when result is MAV_RESULT_IN_PROGRESS (%) | +| result_param2 | `int32` | enum ARM_AUTH_DENIED_REASON | | Additional parameter of the result, example: which parameter of MAV_CMD_NAV_WAYPOINT caused it to be denied, or what ARM_AUTH_DENIED_REASON | +| target_system | `uint8` | | | Target system | +| target_component | `uint16` | | | Target component / mode executor | +| from_external | `bool` | | | Indicates if the command came from an external source | + +## Enums + +### VEHICLE_CMD_RESULT {#VEHICLE_CMD_RESULT} + +| 명칭 | 형식 | Value | 설명 | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | ----- | ------------------------------------------------------------------------- | +| VEHICLE_CMD_RESULT_ACCEPTED | `uint8` | 0 | Command ACCEPTED and EXECUTED | +| VEHICLE_CMD_RESULT_TEMPORARILY_REJECTED | `uint8` | 1 | Command TEMPORARY REJECTED/DENIED | +| VEHICLE_CMD_RESULT_DENIED | `uint8` | 2 | Command PERMANENTLY DENIED | +| VEHICLE_CMD_RESULT_UNSUPPORTED | `uint8` | 3 | Command UNKNOWN/UNSUPPORTED | +| VEHICLE_CMD_RESULT_FAILED | `uint8` | 4 | Command executed, but failed | +| VEHICLE_CMD_RESULT_IN_PROGRESS | `uint8` | 5 | Command being executed | +| VEHICLE_CMD_RESULT_CANCELLED | `uint8` | 6 | Command Canceled | +| VEHICLE_CMD_RESULT_COMMAND_LONG_ONLY | `uint8` | 7 | Command is only accepted when sent as a COMMAND_LONG | +| VEHICLE_CMD_RESULT_COMMAND_INT_ONLY | `uint8` | 8 | Command is only accepted when sent as a COMMAND_INT | +| VEHICLE_CMD_RESULT_UNSUPPORTED_MAV_FRAME | `uint8` | 9 | Command does not support specified frame | ## Constants -| 명칭 | 형식 | Value | 설명 | -| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ----- | --------------------------------- | -| MESSAGE_VERSION | `uint32` | 0 | | -| VEHICLE_CMD_RESULT_ACCEPTED | `uint8` | 0 | Command ACCEPTED and EXECUTED | -| VEHICLE_CMD_RESULT_TEMPORARILY_REJECTED | `uint8` | 1 | Command TEMPORARY REJECTED/DENIED | -| VEHICLE_CMD_RESULT_DENIED | `uint8` | 2 | Command PERMANENTLY DENIED | -| VEHICLE_CMD_RESULT_UNSUPPORTED | `uint8` | 3 | Command UNKNOWN/UNSUPPORTED | -| VEHICLE_CMD_RESULT_FAILED | `uint8` | 4 | Command executed, but failed | -| VEHICLE_CMD_RESULT_IN_PROGRESS | `uint8` | 5 | Command being executed | -| VEHICLE_CMD_RESULT_CANCELLED | `uint8` | 6 | Command Canceled | -| ARM_AUTH_DENIED_REASON_GENERIC | `uint16` | 0 | | -| ARM_AUTH_DENIED_REASON_NONE | `uint16` | 1 | | -| ARM_AUTH_DENIED_REASON_INVALID_WAYPOINT | `uint16` | 2 | | -| ARM_AUTH_DENIED_REASON_TIMEOUT | `uint16` | 3 | | -| ARM_AUTH_DENIED_REASON_AIRSPACE_IN_USE | `uint16` | 4 | | -| ARM_AUTH_DENIED_REASON_BAD_WEATHER | `uint16` | 5 | | -| ORB_QUEUE_LENGTH | `uint8` | 8 | | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ----- | -- | +| MESSAGE_VERSION | `uint32` | 1 | | +| ORB_QUEUE_LENGTH | `uint8` | 8 | | +| ARM_AUTH_DENIED_REASON_GENERIC | `uint16` | 0 | | +| ARM_AUTH_DENIED_REASON_NONE | `uint16` | 1 | | +| ARM_AUTH_DENIED_REASON_INVALID_WAYPOINT | `uint16` | 2 | | +| ARM_AUTH_DENIED_REASON_TIMEOUT | `uint16` | 3 | | +| ARM_AUTH_DENIED_REASON_AIRSPACE_IN_USE | `uint16` | 4 | | +| ARM_AUTH_DENIED_REASON_BAD_WEATHER | `uint16` | 5 | | ## Source Message @@ -49,23 +62,35 @@ Vehicle Command Ackonwledgement uORB message. Used for acknowledging the vehicle Click here to see original file ```c -# Vehicle Command Ackonwledgement uORB message. +# Vehicle Command Acknowledgement uORB message. +# # Used for acknowledging the vehicle command being received. # Follows the MAVLink COMMAND_ACK message definition -uint32 MESSAGE_VERSION = 0 +uint32 MESSAGE_VERSION = 1 -uint64 timestamp # time since system start (microseconds) +uint64 timestamp # [us] time since system start -# Result cases. This follows the MAVLink MAV_RESULT enum definition -uint8 VEHICLE_CMD_RESULT_ACCEPTED = 0 # Command ACCEPTED and EXECUTED | -uint8 VEHICLE_CMD_RESULT_TEMPORARILY_REJECTED = 1 # Command TEMPORARY REJECTED/DENIED | -uint8 VEHICLE_CMD_RESULT_DENIED = 2 # Command PERMANENTLY DENIED | -uint8 VEHICLE_CMD_RESULT_UNSUPPORTED = 3 # Command UNKNOWN/UNSUPPORTED | -uint8 VEHICLE_CMD_RESULT_FAILED = 4 # Command executed, but failed | -uint8 VEHICLE_CMD_RESULT_IN_PROGRESS = 5 # Command being executed | -uint8 VEHICLE_CMD_RESULT_CANCELLED = 6 # Command Canceled +uint8 ORB_QUEUE_LENGTH = 8 +uint32 command # [-] Command that is being acknowledged + +uint8 result # [@enum VEHICLE_CMD_RESULT] Command result +# VEHICLE_CMD_RESULT Result cases. Follows the MAVLink MAV_RESULT enum definition +uint8 VEHICLE_CMD_RESULT_ACCEPTED = 0 # Command ACCEPTED and EXECUTED +uint8 VEHICLE_CMD_RESULT_TEMPORARILY_REJECTED = 1 # Command TEMPORARY REJECTED/DENIED +uint8 VEHICLE_CMD_RESULT_DENIED = 2 # Command PERMANENTLY DENIED +uint8 VEHICLE_CMD_RESULT_UNSUPPORTED = 3 # Command UNKNOWN/UNSUPPORTED +uint8 VEHICLE_CMD_RESULT_FAILED = 4 # Command executed, but failed +uint8 VEHICLE_CMD_RESULT_IN_PROGRESS = 5 # Command being executed +uint8 VEHICLE_CMD_RESULT_CANCELLED = 6 # Command Canceled +uint8 VEHICLE_CMD_RESULT_COMMAND_LONG_ONLY = 7 # Command is only accepted when sent as a COMMAND_LONG +uint8 VEHICLE_CMD_RESULT_COMMAND_INT_ONLY = 8 # Command is only accepted when sent as a COMMAND_INT +uint8 VEHICLE_CMD_RESULT_UNSUPPORTED_MAV_FRAME = 9 # Command does not support specified frame + +uint8 result_param1 # [-] Can be set with the reason why the command was denied, or the progress percentage when result is MAV_RESULT_IN_PROGRESS (%) + +int32 result_param2 # [enum ARM_AUTH_DENIED_REASON] Additional parameter of the result, example: which parameter of MAV_CMD_NAV_WAYPOINT caused it to be denied, or what ARM_AUTH_DENIED_REASON # Arming denied specific cases uint16 ARM_AUTH_DENIED_REASON_GENERIC = 0 uint16 ARM_AUTH_DENIED_REASON_NONE = 1 @@ -74,16 +99,10 @@ uint16 ARM_AUTH_DENIED_REASON_TIMEOUT = 3 uint16 ARM_AUTH_DENIED_REASON_AIRSPACE_IN_USE = 4 uint16 ARM_AUTH_DENIED_REASON_BAD_WEATHER = 5 -uint8 ORB_QUEUE_LENGTH = 8 +uint8 target_system # [-] Target system +uint16 target_component # Target component / mode executor -uint32 command # Command that is being acknowledged -uint8 result # Command result -uint8 result_param1 # Also used as progress[%], it can be set with the reason why the command was denied, or the progress percentage when result is MAV_RESULT_IN_PROGRESS -int32 result_param2 # Additional parameter of the result, example: which parameter of MAV_CMD_NAV_WAYPOINT caused it to be denied. -uint8 target_system -uint16 target_component # Target component / mode executor - -bool from_external # Indicates if the command came from an external source +bool from_external # Indicates if the command came from an external source ``` ::: diff --git a/docs/ko/msg_docs/VehicleCommandAckV0.md b/docs/ko/msg_docs/VehicleCommandAckV0.md new file mode 100644 index 0000000000..298c20f5ed --- /dev/null +++ b/docs/ko/msg_docs/VehicleCommandAckV0.md @@ -0,0 +1,89 @@ +--- +pageClass: is-wide-page +--- + +# VehicleCommandAckV0 (UORB message) + +Vehicle Command Ackonwledgement uORB message. Used for acknowledging the vehicle command being received. Follows the MAVLink COMMAND_ACK message definition. + +**TOPICS:** vehicle_command_ack_v0 + +## Fields + +| 명칭 | 형식 | Unit [Frame] | Range/Enum | 설명 | +| ------------------------------------- | -------- | ---------------------------------------------------------------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| timestamp | `uint64` | | | time since system start (microseconds) | +| command | `uint32` | | | Command that is being acknowledged | +| result | `uint8` | | | Command result | +| result_param1 | `uint8` | | | Also used as progress[%], it can be set with the reason why the command was denied, or the progress percentage when result is MAV_RESULT_IN_PROGRESS | +| result_param2 | `int32` | | | Additional parameter of the result, example: which parameter of MAV_CMD_NAV_WAYPOINT caused it to be denied. | +| target_system | `uint8` | | | | +| target_component | `uint16` | | | Target component / mode executor | +| from_external | `bool` | | | Indicates if the command came from an external source | + +## Constants + +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ----- | --------------------------------- | +| MESSAGE_VERSION | `uint32` | 0 | | +| VEHICLE_CMD_RESULT_ACCEPTED | `uint8` | 0 | Command ACCEPTED and EXECUTED | +| VEHICLE_CMD_RESULT_TEMPORARILY_REJECTED | `uint8` | 1 | Command TEMPORARY REJECTED/DENIED | +| VEHICLE_CMD_RESULT_DENIED | `uint8` | 2 | Command PERMANENTLY DENIED | +| VEHICLE_CMD_RESULT_UNSUPPORTED | `uint8` | 3 | Command UNKNOWN/UNSUPPORTED | +| VEHICLE_CMD_RESULT_FAILED | `uint8` | 4 | Command executed, but failed | +| VEHICLE_CMD_RESULT_IN_PROGRESS | `uint8` | 5 | Command being executed | +| VEHICLE_CMD_RESULT_CANCELLED | `uint8` | 6 | Command Canceled | +| ARM_AUTH_DENIED_REASON_GENERIC | `uint16` | 0 | | +| ARM_AUTH_DENIED_REASON_NONE | `uint16` | 1 | | +| ARM_AUTH_DENIED_REASON_INVALID_WAYPOINT | `uint16` | 2 | | +| ARM_AUTH_DENIED_REASON_TIMEOUT | `uint16` | 3 | | +| ARM_AUTH_DENIED_REASON_AIRSPACE_IN_USE | `uint16` | 4 | | +| ARM_AUTH_DENIED_REASON_BAD_WEATHER | `uint16` | 5 | | +| ORB_QUEUE_LENGTH | `uint8` | 8 | | + +## Source Message + +[Source file (GitHub)](https://github.com/PX4/PX4-Autopilot/blob/main/msg/px4_msgs_old/msg/VehicleCommandAckV0.msg) + +:::details +Click here to see original file + +```c +# Vehicle Command Ackonwledgement uORB message. +# Used for acknowledging the vehicle command being received. +# Follows the MAVLink COMMAND_ACK message definition + +uint32 MESSAGE_VERSION = 0 + +uint64 timestamp # time since system start (microseconds) + +# Result cases. This follows the MAVLink MAV_RESULT enum definition +uint8 VEHICLE_CMD_RESULT_ACCEPTED = 0 # Command ACCEPTED and EXECUTED | +uint8 VEHICLE_CMD_RESULT_TEMPORARILY_REJECTED = 1 # Command TEMPORARY REJECTED/DENIED | +uint8 VEHICLE_CMD_RESULT_DENIED = 2 # Command PERMANENTLY DENIED | +uint8 VEHICLE_CMD_RESULT_UNSUPPORTED = 3 # Command UNKNOWN/UNSUPPORTED | +uint8 VEHICLE_CMD_RESULT_FAILED = 4 # Command executed, but failed | +uint8 VEHICLE_CMD_RESULT_IN_PROGRESS = 5 # Command being executed | +uint8 VEHICLE_CMD_RESULT_CANCELLED = 6 # Command Canceled + +# Arming denied specific cases +uint16 ARM_AUTH_DENIED_REASON_GENERIC = 0 +uint16 ARM_AUTH_DENIED_REASON_NONE = 1 +uint16 ARM_AUTH_DENIED_REASON_INVALID_WAYPOINT = 2 +uint16 ARM_AUTH_DENIED_REASON_TIMEOUT = 3 +uint16 ARM_AUTH_DENIED_REASON_AIRSPACE_IN_USE = 4 +uint16 ARM_AUTH_DENIED_REASON_BAD_WEATHER = 5 + +uint8 ORB_QUEUE_LENGTH = 8 + +uint32 command # Command that is being acknowledged +uint8 result # Command result +uint8 result_param1 # Also used as progress[%], it can be set with the reason why the command was denied, or the progress percentage when result is MAV_RESULT_IN_PROGRESS +int32 result_param2 # Additional parameter of the result, example: which parameter of MAV_CMD_NAV_WAYPOINT caused it to be denied. +uint8 target_system +uint16 target_component # Target component / mode executor + +bool from_external # Indicates if the command came from an external source +``` + +::: diff --git a/docs/ko/msg_docs/VehicleControlMode.md b/docs/ko/msg_docs/VehicleControlMode.md index 63d54865b1..9cdc1bc6ca 100644 --- a/docs/ko/msg_docs/VehicleControlMode.md +++ b/docs/ko/msg_docs/VehicleControlMode.md @@ -29,9 +29,9 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| -------------------------------------------------------------------- | -------- | ----- | -- | -| MESSAGE_VERSION | `uint32` | 0 | | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------ | -------- | ----- | -- | +| MESSAGE_VERSION | `uint32` | 0 | | ## Source Message diff --git a/docs/ko/msg_docs/VehicleGlobalPosition.md b/docs/ko/msg_docs/VehicleGlobalPosition.md index 7e3fcd4f4a..595141025c 100644 --- a/docs/ko/msg_docs/VehicleGlobalPosition.md +++ b/docs/ko/msg_docs/VehicleGlobalPosition.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Fused global position in WGS84. This struct contains global position estimation. It is not the raw GPS. measurement (@see vehicle_gps_position). This topic is usually published by the position. estimator, which will take more sources of information into account than just GPS,. e.g. control inputs of the vehicle in a Kalman-filter implementation. -**TOPICS:** vehicle_global_position vehicle_global_position_groundtruth external_ins_global_position estimator_global_position aux_global_position +**TOPICS:** vehicle_global_position vehicle_global_position_groundtruth external_ins_global_position estimator_global_position ## Fields @@ -33,9 +33,9 @@ Fused global position in WGS84. This struct contains global position estimation. ## Constants -| 명칭 | 형식 | Value | 설명 | -| -------------------------------------------------------------------- | -------- | ----- | -- | -| MESSAGE_VERSION | `uint32` | 0 | | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------ | -------- | ----- | -- | +| MESSAGE_VERSION | `uint32` | 0 | | ## Source Message @@ -81,7 +81,6 @@ bool dead_reckoning # True if this position is estimated through dead-reckoning # TOPICS vehicle_global_position vehicle_global_position_groundtruth external_ins_global_position # TOPICS estimator_global_position -# TOPICS aux_global_position ``` ::: diff --git a/docs/ko/msg_docs/VehicleGlobalPositionV0.md b/docs/ko/msg_docs/VehicleGlobalPositionV0.md new file mode 100644 index 0000000000..f27a0c8b4b --- /dev/null +++ b/docs/ko/msg_docs/VehicleGlobalPositionV0.md @@ -0,0 +1,86 @@ +--- +pageClass: is-wide-page +--- + +# VehicleGlobalPositionV0 (UORB message) + +Fused global position in WGS84. This struct contains global position estimation. It is not the raw GPS. measurement (@see vehicle_gps_position). This topic is usually published by the position. estimator, which will take more sources of information into account than just GPS,. e.g. control inputs of the vehicle in a Kalman-filter implementation. + +**TOPICS:** vehicle_global_position vehicle_global_position_groundtruth external_ins_global_position estimator_global_position + +## Fields + +| 명칭 | 형식 | Unit [Frame] | Range/Enum | 설명 | +| ------------------------------------------------------------------------------------ | --------- | ---------------------------------------------------------------- | ---------- | ---------------------------------------------------------------------------- | +| timestamp | `uint64` | | | time since system start (microseconds) | +| timestamp_sample | `uint64` | | | the timestamp of the raw data (microseconds) | +| lat | `float64` | | | Latitude, (degrees) | +| lon | `float64` | | | Longitude, (degrees) | +| alt | `float32` | | | Altitude AMSL, (meters) | +| alt_ellipsoid | `float32` | | | Altitude above ellipsoid, (meters) | +| lat_lon_valid | `bool` | | | | +| alt_valid | `bool` | | | | +| delta_alt | `float32` | | | Reset delta for altitude | +| delta_terrain | `float32` | | | Reset delta for terrain | +| lat_lon_reset_counter | `uint8` | | | Counter for reset events on horizontal position coordinates | +| alt_reset_counter | `uint8` | | | Counter for reset events on altitude | +| terrain_reset_counter | `uint8` | | | Counter for reset events on terrain | +| eph | `float32` | | | Standard deviation of horizontal position error, (metres) | +| epv | `float32` | | | Standard deviation of vertical position error, (metres) | +| terrain_alt | `float32` | | | Terrain altitude WGS84, (metres) | +| terrain_alt_valid | `bool` | | | Terrain altitude estimate is valid | +| dead_reckoning | `bool` | | | True if this position is estimated through dead-reckoning | + +## Constants + +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------ | -------- | ----- | -- | +| MESSAGE_VERSION | `uint32` | 0 | | + +## Source Message + +[Source file (GitHub)](https://github.com/PX4/PX4-Autopilot/blob/main/msg/px4_msgs_old/msg/VehicleGlobalPositionV0.msg) + +:::details +Click here to see original file + +```c +# Fused global position in WGS84. +# This struct contains global position estimation. It is not the raw GPS +# measurement (@see vehicle_gps_position). This topic is usually published by the position +# estimator, which will take more sources of information into account than just GPS, +# e.g. control inputs of the vehicle in a Kalman-filter implementation. +# + +uint32 MESSAGE_VERSION = 0 + +uint64 timestamp # time since system start (microseconds) +uint64 timestamp_sample # the timestamp of the raw data (microseconds) + +float64 lat # Latitude, (degrees) +float64 lon # Longitude, (degrees) +float32 alt # Altitude AMSL, (meters) +float32 alt_ellipsoid # Altitude above ellipsoid, (meters) + +bool lat_lon_valid +bool alt_valid + +float32 delta_alt # Reset delta for altitude +float32 delta_terrain # Reset delta for terrain +uint8 lat_lon_reset_counter # Counter for reset events on horizontal position coordinates +uint8 alt_reset_counter # Counter for reset events on altitude +uint8 terrain_reset_counter # Counter for reset events on terrain + +float32 eph # Standard deviation of horizontal position error, (metres) +float32 epv # Standard deviation of vertical position error, (metres) + +float32 terrain_alt # Terrain altitude WGS84, (metres) +bool terrain_alt_valid # Terrain altitude estimate is valid + +bool dead_reckoning # True if this position is estimated through dead-reckoning + +# TOPICS vehicle_global_position vehicle_global_position_groundtruth external_ins_global_position +# TOPICS estimator_global_position +``` + +::: diff --git a/docs/ko/msg_docs/VehicleImu.md b/docs/ko/msg_docs/VehicleImu.md index 74520f4fa4..f29254ab4e 100644 --- a/docs/ko/msg_docs/VehicleImu.md +++ b/docs/ko/msg_docs/VehicleImu.md @@ -27,11 +27,11 @@ IMU readings in SI-unit form. ## Constants -| 명칭 | 형식 | Value | 설명 | -| ---------------------------------------------------------- | ------- | ----- | -- | -| CLIPPING_X | `uint8` | 1 | | -| CLIPPING_Y | `uint8` | 2 | | -| CLIPPING_Z | `uint8` | 4 | | +| 명칭 | 형식 | Value | 설명 | +| -------------------------------------------------------- | ------- | ----- | -- | +| CLIPPING_X | `uint8` | 1 | | +| CLIPPING_Y | `uint8` | 2 | | +| CLIPPING_Z | `uint8` | 4 | | ## Source Message diff --git a/docs/ko/msg_docs/VehicleImuStatus.md b/docs/ko/msg_docs/VehicleImuStatus.md index 7cf1612c42..1acea3a534 100644 --- a/docs/ko/msg_docs/VehicleImuStatus.md +++ b/docs/ko/msg_docs/VehicleImuStatus.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # VehicleImuStatus (UORB message) -**TOPICS:** vehicle_imustatus +**TOPICS:** vehicle_imu_status ## Fields diff --git a/docs/ko/msg_docs/VehicleLandDetected.md b/docs/ko/msg_docs/VehicleLandDetected.md index b7a3cbd68e..888be3ceb0 100644 --- a/docs/ko/msg_docs/VehicleLandDetected.md +++ b/docs/ko/msg_docs/VehicleLandDetected.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # VehicleLandDetected (UORB message) -**TOPICS:** vehicle_landdetected +**TOPICS:** vehicle_land_detected ## Fields @@ -26,9 +26,9 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| -------------------------------------------------------------------- | -------- | ----- | -- | -| MESSAGE_VERSION | `uint32` | 0 | | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------ | -------- | ----- | -- | +| MESSAGE_VERSION | `uint32` | 0 | | ## Source Message diff --git a/docs/ko/msg_docs/VehicleLocalPosition.md b/docs/ko/msg_docs/VehicleLocalPosition.md index c2d2a179c0..c134a4eaa4 100644 --- a/docs/ko/msg_docs/VehicleLocalPosition.md +++ b/docs/ko/msg_docs/VehicleLocalPosition.md @@ -68,12 +68,12 @@ Fused local position in NED. The coordinate system origin is the vehicle positio ## Constants -| 명칭 | 형식 | Value | 설명 | -| -------------------------------------------------------------------------------------------------------------------------------- | -------- | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| MESSAGE_VERSION | `uint32` | 1 | | -| DIST_BOTTOM_SENSOR_NONE | `uint8` | 0 | | -| DIST_BOTTOM_SENSOR_RANGE | `uint8` | 1 | (1 << 0) a range sensor is used to estimate dist_bottom field | -| DIST_BOTTOM_SENSOR_FLOW | `uint8` | 2 | (1 << 1) a flow sensor is used to estimate dist_bottom field (mostly fixed-wing use case) | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------------------------------------------------------------------ | -------- | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| MESSAGE_VERSION | `uint32` | 1 | | +| DIST_BOTTOM_SENSOR_NONE | `uint8` | 0 | | +| DIST_BOTTOM_SENSOR_RANGE | `uint8` | 1 | (1 << 0) a range sensor is used to estimate dist_bottom field | +| DIST_BOTTOM_SENSOR_FLOW | `uint8` | 2 | (1 << 1) a flow sensor is used to estimate dist_bottom field (mostly fixed-wing use case) | ## Source Message diff --git a/docs/ko/msg_docs/VehicleLocalPositionSetpoint.md b/docs/ko/msg_docs/VehicleLocalPositionSetpoint.md index a6015eae16..6455819fdd 100644 --- a/docs/ko/msg_docs/VehicleLocalPositionSetpoint.md +++ b/docs/ko/msg_docs/VehicleLocalPositionSetpoint.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Local position setpoint in NED frame. Telemetry of PID position controller to monitor tracking. NaN means the state was not controlled. -**TOPICS:** vehicle_localposition_setpoint +**TOPICS:** vehicle_local_position_setpoint ## Fields diff --git a/docs/ko/msg_docs/VehicleLocalPositionV0.md b/docs/ko/msg_docs/VehicleLocalPositionV0.md index f76947c7dd..422846c926 100644 --- a/docs/ko/msg_docs/VehicleLocalPositionV0.md +++ b/docs/ko/msg_docs/VehicleLocalPositionV0.md @@ -67,12 +67,12 @@ Fused local position in NED. The coordinate system origin is the vehicle positio ## Constants -| 명칭 | 형식 | Value | 설명 | -| -------------------------------------------------------------------------------------------------------------------------------- | -------- | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| MESSAGE_VERSION | `uint32` | 0 | | -| DIST_BOTTOM_SENSOR_NONE | `uint8` | 0 | | -| DIST_BOTTOM_SENSOR_RANGE | `uint8` | 1 | (1 << 0) a range sensor is used to estimate dist_bottom field | -| DIST_BOTTOM_SENSOR_FLOW | `uint8` | 2 | (1 << 1) a flow sensor is used to estimate dist_bottom field (mostly fixed-wing use case) | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------------------------------------------------------------------ | -------- | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| MESSAGE_VERSION | `uint32` | 0 | | +| DIST_BOTTOM_SENSOR_NONE | `uint8` | 0 | | +| DIST_BOTTOM_SENSOR_RANGE | `uint8` | 1 | (1 << 0) a range sensor is used to estimate dist_bottom field | +| DIST_BOTTOM_SENSOR_FLOW | `uint8` | 2 | (1 << 1) a flow sensor is used to estimate dist_bottom field (mostly fixed-wing use case) | ## Source Message diff --git a/docs/ko/msg_docs/VehicleOdometry.md b/docs/ko/msg_docs/VehicleOdometry.md index 30159d40ef..4b658fb27f 100644 --- a/docs/ko/msg_docs/VehicleOdometry.md +++ b/docs/ko/msg_docs/VehicleOdometry.md @@ -32,26 +32,26 @@ Fits ROS REP 147 for aerial vehicles ### POSE_FRAME {#POSE_FRAME} -| 명칭 | 형식 | Value | 설명 | -| ----------------------------------------------------------------------------------------------- | ------- | ----- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| POSE_FRAME_UNKNOWN | `uint8` | 0 | Unknown frame | -| POSE_FRAME_NED | `uint8` | 1 | North-East-Down (NED) navigation frame. Aligned with True North. | -| POSE_FRAME_FRD | `uint8` | 2 | Forward-Right-Down (FRD) frame. Constant arbitrary heading offset from True North. Z is down. | +| 명칭 | 형식 | Value | 설명 | +| --------------------------------------------------------------------------------------------- | ------- | ----- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| POSE_FRAME_UNKNOWN | `uint8` | 0 | Unknown frame | +| POSE_FRAME_NED | `uint8` | 1 | North-East-Down (NED) navigation frame. Aligned with True North. | +| POSE_FRAME_FRD | `uint8` | 2 | Forward-Right-Down (FRD) frame. Constant arbitrary heading offset from True North. Z is down. | ### VELOCITY_FRAME {#VELOCITY_FRAME} -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------------------------------------------------------------ | ------- | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | -| VELOCITY_FRAME_UNKNOWN | `uint8` | 0 | Unknown frame | -| VELOCITY_FRAME_NED | `uint8` | 1 | NED navigation frame at current position. | -| VELOCITY_FRAME_FRD | `uint8` | 2 | FRD navigation frame at current position. Constant arbitrary heading offset from True North. Z is down. | -| VELOCITY_FRAME_BODY_FRD | `uint8` | 3 | FRD body-fixed frame | +| 명칭 | 형식 | Value | 설명 | +| ---------------------------------------------------------------------------------------------------------------------------- | ------- | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | +| VELOCITY_FRAME_UNKNOWN | `uint8` | 0 | Unknown frame | +| VELOCITY_FRAME_NED | `uint8` | 1 | NED navigation frame at current position. | +| VELOCITY_FRAME_FRD | `uint8` | 2 | FRD navigation frame at current position. Constant arbitrary heading offset from True North. Z is down. | +| VELOCITY_FRAME_BODY_FRD | `uint8` | 3 | FRD body-fixed frame | ## Constants -| 명칭 | 형식 | Value | 설명 | -| -------------------------------------------------------------------- | -------- | ----- | -- | -| MESSAGE_VERSION | `uint32` | 0 | | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------ | -------- | ----- | -- | +| MESSAGE_VERSION | `uint32` | 0 | | ## Source Message diff --git a/docs/ko/msg_docs/VehicleOpticalFlow.md b/docs/ko/msg_docs/VehicleOpticalFlow.md index 848458e9b6..ce756250a8 100644 --- a/docs/ko/msg_docs/VehicleOpticalFlow.md +++ b/docs/ko/msg_docs/VehicleOpticalFlow.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Optical flow in XYZ body frame in SI units. -**TOPICS:** vehicle_opticalflow +**TOPICS:** vehicle_optical_flow ## Fields diff --git a/docs/ko/msg_docs/VehicleRatesSetpoint.md b/docs/ko/msg_docs/VehicleRatesSetpoint.md index 9ddb01c33a..9d41d8c560 100644 --- a/docs/ko/msg_docs/VehicleRatesSetpoint.md +++ b/docs/ko/msg_docs/VehicleRatesSetpoint.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # VehicleRatesSetpoint (UORB message) -**TOPICS:** vehicle_ratessetpoint +**TOPICS:** vehicle_rates_setpoint ## Fields @@ -19,9 +19,9 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| -------------------------------------------------------------------- | -------- | ----- | -- | -| MESSAGE_VERSION | `uint32` | 0 | | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------ | -------- | ----- | -- | +| MESSAGE_VERSION | `uint32` | 0 | | ## Source Message diff --git a/docs/ko/msg_docs/VehicleRoi.md b/docs/ko/msg_docs/VehicleRoi.md index f54ffc2be4..3b0c15c68c 100644 --- a/docs/ko/msg_docs/VehicleRoi.md +++ b/docs/ko/msg_docs/VehicleRoi.md @@ -23,14 +23,14 @@ Vehicle Region Of Interest (ROI). ## Constants -| 명칭 | 형식 | Value | 설명 | -| ----------------------------------------------------------------------------------- | ------- | ----- | ---------------------------------------------- | -| ROI_NONE | `uint8` | 0 | No region of interest | -| ROI_WPNEXT | `uint8` | 1 | Point toward next MISSION with optional offset | -| ROI_WPINDEX | `uint8` | 2 | Point toward given MISSION | -| ROI_LOCATION | `uint8` | 3 | Point toward fixed location | -| ROI_TARGET | `uint8` | 4 | Point toward target | -| ROI_ENUM_END | `uint8` | 5 | | +| 명칭 | 형식 | Value | 설명 | +| --------------------------------------------------------------------------------- | ------- | ----- | ---------------------------------------------- | +| ROI_NONE | `uint8` | 0 | No region of interest | +| ROI_WPNEXT | `uint8` | 1 | Point toward next MISSION with optional offset | +| ROI_WPINDEX | `uint8` | 2 | Point toward given MISSION | +| ROI_LOCATION | `uint8` | 3 | Point toward fixed location | +| ROI_TARGET | `uint8` | 4 | Point toward target | +| ROI_ENUM_END | `uint8` | 5 | | ## Source Message diff --git a/docs/ko/msg_docs/VehicleStatus.md b/docs/ko/msg_docs/VehicleStatus.md index d7663812c3..474d479055 100644 --- a/docs/ko/msg_docs/VehicleStatus.md +++ b/docs/ko/msg_docs/VehicleStatus.md @@ -22,9 +22,10 @@ Encodes the system state of the vehicle published by commander. | nav_state_user_intention | `uint8` | | | Mode that the user selected (might be different from nav_state in a failsafe situation) | | nav_state | `uint8` | | | Currently active mode | | executor_in_charge | `uint8` | | | Current mode executor in charge (0=Autopilot) | +| nav_state_display | `uint8` | | | User-visible nav state sent via MAVLink (executor state if active, otherwise nav_state) | +| accepts_offboard_setpoints | `bool` | | | True if the current mode accepts offboard trajectory setpoints via MAVLink | | valid_nav_states_mask | `uint32` | | | Bitmask for all valid nav_state values | | can_set_nav_states_mask | `uint32` | | | Bitmask for all modes that a user can select | -| failure_detector_status | `uint16` | | | | | hil_state | `uint8` | | | | | vehicle_type | `uint8` | | | | | failsafe | `bool` | | | true if system is in failsafe state (e.g.:RTL, Hover, Terminate, ...) | @@ -48,77 +49,69 @@ Encodes the system state of the vehicle published by commander. | open_drone_id_system_healthy | `bool` | | | | | parachute_system_present | `bool` | | | | | parachute_system_healthy | `bool` | | | | +| traffic_avoidance_system_present | `bool` | | | | | rc_calibration_in_progress | `bool` | | | | | calibration_enabled | `bool` | | | | | pre_flight_checks_pass | `bool` | | | true if all checks necessary to arm pass | ## Constants -| 명칭 | 형식 | Value | 설명 | -| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ----- | ----------------------------------------------------------------------------- | -| MESSAGE_VERSION | `uint32` | 1 | | -| ARMING_STATE_DISARMED | `uint8` | 1 | | -| ARMING_STATE_ARMED | `uint8` | 2 | | -| ARM_DISARM_REASON_STICK_GESTURE | `uint8` | 1 | | -| ARM_DISARM_REASON_RC_SWITCH | `uint8` | 2 | | -| ARM_DISARM_REASON_COMMAND_INTERNAL | `uint8` | 3 | | -| ARM_DISARM_REASON_COMMAND_EXTERNAL | `uint8` | 4 | | -| ARM_DISARM_REASON_MISSION_START | `uint8` | 5 | | -| ARM_DISARM_REASON_LANDING | `uint8` | 6 | | -| ARM_DISARM_REASON_PREFLIGHT_INACTION | `uint8` | 7 | | -| ARM_DISARM_REASON_KILL_SWITCH | `uint8` | 8 | | -| ARM_DISARM_REASON_RC_BUTTON | `uint8` | 13 | | -| ARM_DISARM_REASON_FAILSAFE | `uint8` | 14 | | -| NAVIGATION_STATE_MANUAL | `uint8` | 0 | Manual mode | -| NAVIGATION_STATE_ALTCTL | `uint8` | 1 | Altitude control mode | -| NAVIGATION_STATE_POSCTL | `uint8` | 2 | Position control mode | -| NAVIGATION_STATE_AUTO_MISSION | `uint8` | 3 | Auto mission mode | -| NAVIGATION_STATE_AUTO_LOITER | `uint8` | 4 | Auto loiter mode | -| NAVIGATION_STATE_AUTO_RTL | `uint8` | 5 | Auto return to launch mode | -| NAVIGATION_STATE_POSITION_SLOW | `uint8` | 6 | | -| NAVIGATION_STATE_FREE5 | `uint8` | 7 | | -| NAVIGATION_STATE_ALTITUDE_CRUISE | `uint8` | 8 | Altitude with Cruise mode | -| NAVIGATION_STATE_FREE3 | `uint8` | 9 | | -| NAVIGATION_STATE_ACRO | `uint8` | 10 | Acro mode | -| NAVIGATION_STATE_FREE2 | `uint8` | 11 | | -| NAVIGATION_STATE_DESCEND | `uint8` | 12 | Descend mode (no position control) | -| NAVIGATION_STATE_TERMINATION | `uint8` | 13 | Termination mode | -| NAVIGATION_STATE_OFFBOARD | `uint8` | 14 | | -| NAVIGATION_STATE_STAB | `uint8` | 15 | Stabilized mode | -| NAVIGATION_STATE_FREE1 | `uint8` | 16 | | -| NAVIGATION_STATE_AUTO_TAKEOFF | `uint8` | 17 | Takeoff | -| NAVIGATION_STATE_AUTO_LAND | `uint8` | 18 | Land | -| NAVIGATION_STATE_AUTO_FOLLOW_TARGET | `uint8` | 19 | Auto Follow | -| NAVIGATION_STATE_AUTO_PRECLAND | `uint8` | 20 | Precision land with landing target | -| NAVIGATION_STATE_ORBIT | `uint8` | 21 | Orbit in a circle | -| NAVIGATION_STATE_AUTO_VTOL_TAKEOFF | `uint8` | 22 | Takeoff, transition, establish loiter | -| NAVIGATION_STATE_EXTERNAL1 | `uint8` | 23 | | -| NAVIGATION_STATE_EXTERNAL2 | `uint8` | 24 | | -| NAVIGATION_STATE_EXTERNAL3 | `uint8` | 25 | | -| NAVIGATION_STATE_EXTERNAL4 | `uint8` | 26 | | -| NAVIGATION_STATE_EXTERNAL5 | `uint8` | 27 | | -| NAVIGATION_STATE_EXTERNAL6 | `uint8` | 28 | | -| NAVIGATION_STATE_EXTERNAL7 | `uint8` | 29 | | -| NAVIGATION_STATE_EXTERNAL8 | `uint8` | 30 | | -| NAVIGATION_STATE_MAX | `uint8` | 31 | | -| FAILURE_NONE | `uint16` | 0 | | -| FAILURE_ROLL | `uint16` | 1 | (1 << 0) | -| FAILURE_PITCH | `uint16` | 2 | (1 << 1) | -| FAILURE_ALT | `uint16` | 4 | (1 << 2) | -| FAILURE_EXT | `uint16` | 8 | (1 << 3) | -| FAILURE_ARM_ESC | `uint16` | 16 | (1 << 4) | -| FAILURE_BATTERY | `uint16` | 32 | (1 << 5) | -| FAILURE_IMBALANCED_PROP | `uint16` | 64 | (1 << 6) | -| FAILURE_MOTOR | `uint16` | 128 | (1 << 7) | -| HIL_STATE_OFF | `uint8` | 0 | | -| HIL_STATE_ON | `uint8` | 1 | | -| VEHICLE_TYPE_UNSPECIFIED | `uint8` | 0 | | -| VEHICLE_TYPE_ROTARY_WING | `uint8` | 1 | | -| VEHICLE_TYPE_FIXED_WING | `uint8` | 2 | | -| VEHICLE_TYPE_ROVER | `uint8` | 3 | | -| FAILSAFE_DEFER_STATE_DISABLED | `uint8` | 0 | | -| FAILSAFE_DEFER_STATE_ENABLED | `uint8` | 1 | | -| FAILSAFE_DEFER_STATE_WOULD_FAILSAFE | `uint8` | 2 | Failsafes deferred, but would trigger a failsafe | +| 명칭 | 형식 | Value | 설명 | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ----- | ----------------------------------------------------- | +| MESSAGE_VERSION | `uint32` | 4 | | +| ARMING_STATE_DISARMED | `uint8` | 1 | | +| ARMING_STATE_ARMED | `uint8` | 2 | | +| ARM_DISARM_REASON_STICK_GESTURE | `uint8` | 1 | | +| ARM_DISARM_REASON_RC_SWITCH | `uint8` | 2 | | +| ARM_DISARM_REASON_COMMAND_INTERNAL | `uint8` | 3 | | +| ARM_DISARM_REASON_COMMAND_EXTERNAL | `uint8` | 4 | | +| ARM_DISARM_REASON_MISSION_START | `uint8` | 5 | | +| ARM_DISARM_REASON_LANDING | `uint8` | 6 | | +| ARM_DISARM_REASON_PREFLIGHT_INACTION | `uint8` | 7 | | +| ARM_DISARM_REASON_KILL_SWITCH | `uint8` | 8 | | +| ARM_DISARM_REASON_RC_BUTTON | `uint8` | 13 | | +| ARM_DISARM_REASON_FAILSAFE | `uint8` | 14 | | +| NAVIGATION_STATE_MANUAL | `uint8` | 0 | Manual mode | +| NAVIGATION_STATE_ALTCTL | `uint8` | 1 | Altitude control mode | +| NAVIGATION_STATE_POSCTL | `uint8` | 2 | Position control mode | +| NAVIGATION_STATE_AUTO_MISSION | `uint8` | 3 | Auto mission mode | +| NAVIGATION_STATE_AUTO_LOITER | `uint8` | 4 | Auto loiter mode | +| NAVIGATION_STATE_AUTO_RTL | `uint8` | 5 | Auto return to launch mode | +| NAVIGATION_STATE_POSITION_SLOW | `uint8` | 6 | | +| NAVIGATION_STATE_FREE5 | `uint8` | 7 | | +| NAVIGATION_STATE_ALTITUDE_CRUISE | `uint8` | 8 | Altitude with Cruise mode | +| NAVIGATION_STATE_FREE3 | `uint8` | 9 | | +| NAVIGATION_STATE_ACRO | `uint8` | 10 | Acro mode | +| NAVIGATION_STATE_FREE2 | `uint8` | 11 | | +| NAVIGATION_STATE_DESCEND | `uint8` | 12 | Descend mode (no position control) | +| NAVIGATION_STATE_TERMINATION | `uint8` | 13 | Termination mode | +| NAVIGATION_STATE_OFFBOARD | `uint8` | 14 | | +| NAVIGATION_STATE_STAB | `uint8` | 15 | Stabilized mode | +| NAVIGATION_STATE_FREE1 | `uint8` | 16 | | +| NAVIGATION_STATE_AUTO_TAKEOFF | `uint8` | 17 | Takeoff | +| NAVIGATION_STATE_AUTO_LAND | `uint8` | 18 | Land | +| NAVIGATION_STATE_AUTO_FOLLOW_TARGET | `uint8` | 19 | Auto Follow | +| NAVIGATION_STATE_AUTO_PRECLAND | `uint8` | 20 | Precision land with landing target | +| NAVIGATION_STATE_ORBIT | `uint8` | 21 | Orbit in a circle | +| NAVIGATION_STATE_AUTO_VTOL_TAKEOFF | `uint8` | 22 | Takeoff, transition, establish loiter | +| NAVIGATION_STATE_EXTERNAL1 | `uint8` | 23 | | +| NAVIGATION_STATE_EXTERNAL2 | `uint8` | 24 | | +| NAVIGATION_STATE_EXTERNAL3 | `uint8` | 25 | | +| NAVIGATION_STATE_EXTERNAL4 | `uint8` | 26 | | +| NAVIGATION_STATE_EXTERNAL5 | `uint8` | 27 | | +| NAVIGATION_STATE_EXTERNAL6 | `uint8` | 28 | | +| NAVIGATION_STATE_EXTERNAL7 | `uint8` | 29 | | +| NAVIGATION_STATE_EXTERNAL8 | `uint8` | 30 | | +| NAVIGATION_STATE_MAX | `uint8` | 31 | | +| HIL_STATE_OFF | `uint8` | 0 | | +| HIL_STATE_ON | `uint8` | 1 | | +| VEHICLE_TYPE_UNSPECIFIED | `uint8` | 0 | | +| VEHICLE_TYPE_ROTARY_WING | `uint8` | 1 | | +| VEHICLE_TYPE_FIXED_WING | `uint8` | 2 | | +| VEHICLE_TYPE_ROVER | `uint8` | 3 | | +| FAILSAFE_DEFER_STATE_DISABLED | `uint8` | 0 | | +| FAILSAFE_DEFER_STATE_ENABLED | `uint8` | 1 | | +| FAILSAFE_DEFER_STATE_WOULD_FAILSAFE | `uint8` | 2 | Failsafes deferred, but would trigger a failsafe | ## Source Message @@ -130,7 +123,7 @@ Click here to see original file ```c # Encodes the system state of the vehicle published by commander -uint32 MESSAGE_VERSION = 1 +uint32 MESSAGE_VERSION = 4 uint64 timestamp # time since system start (microseconds) @@ -193,22 +186,13 @@ uint8 NAVIGATION_STATE_EXTERNAL8 = 30 uint8 NAVIGATION_STATE_MAX = 31 uint8 executor_in_charge # Current mode executor in charge (0=Autopilot) +uint8 nav_state_display # User-visible nav state sent via MAVLink (executor state if active, otherwise nav_state) + +bool accepts_offboard_setpoints # True if the current mode accepts offboard trajectory setpoints via MAVLink uint32 valid_nav_states_mask # Bitmask for all valid nav_state values uint32 can_set_nav_states_mask # Bitmask for all modes that a user can select -# Bitmask of detected failures -uint16 failure_detector_status -uint16 FAILURE_NONE = 0 -uint16 FAILURE_ROLL = 1 # (1 << 0) -uint16 FAILURE_PITCH = 2 # (1 << 1) -uint16 FAILURE_ALT = 4 # (1 << 2) -uint16 FAILURE_EXT = 8 # (1 << 3) -uint16 FAILURE_ARM_ESC = 16 # (1 << 4) -uint16 FAILURE_BATTERY = 32 # (1 << 5) -uint16 FAILURE_IMBALANCED_PROP = 64 # (1 << 6) -uint16 FAILURE_MOTOR = 128 # (1 << 7) - uint8 hil_state uint8 HIL_STATE_OFF = 0 uint8 HIL_STATE_ON = 1 @@ -256,6 +240,8 @@ bool open_drone_id_system_healthy bool parachute_system_present bool parachute_system_healthy +bool traffic_avoidance_system_present + bool rc_calibration_in_progress bool calibration_enabled diff --git a/docs/ko/msg_docs/VehicleStatusV0.md b/docs/ko/msg_docs/VehicleStatusV0.md index c3d872ff41..b1fba4c292 100644 --- a/docs/ko/msg_docs/VehicleStatusV0.md +++ b/docs/ko/msg_docs/VehicleStatusV0.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Encodes the system state of the vehicle published by commander. -**TOPICS:** vehicle_statusv0 +**TOPICS:** vehicle_status_v0 ## Fields @@ -56,76 +56,76 @@ Encodes the system state of the vehicle published by commander. ## Constants -| 명칭 | 형식 | Value | 설명 | -| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ----- | ----------------------------------------------------------------------------- | -| MESSAGE_VERSION | `uint32` | 0 | | -| ARMING_STATE_DISARMED | `uint8` | 1 | | -| ARMING_STATE_ARMED | `uint8` | 2 | | -| ARM_DISARM_REASON_TRANSITION_TO_STANDBY | `uint8` | 0 | | -| ARM_DISARM_REASON_STICK_GESTURE | `uint8` | 1 | | -| ARM_DISARM_REASON_RC_SWITCH | `uint8` | 2 | | -| ARM_DISARM_REASON_COMMAND_INTERNAL | `uint8` | 3 | | -| ARM_DISARM_REASON_COMMAND_EXTERNAL | `uint8` | 4 | | -| ARM_DISARM_REASON_MISSION_START | `uint8` | 5 | | -| ARM_DISARM_REASON_SAFETY_BUTTON | `uint8` | 6 | | -| ARM_DISARM_REASON_AUTO_DISARM_LAND | `uint8` | 7 | | -| ARM_DISARM_REASON_AUTO_DISARM_PREFLIGHT | `uint8` | 8 | | -| ARM_DISARM_REASON_KILL_SWITCH | `uint8` | 9 | | -| ARM_DISARM_REASON_LOCKDOWN | `uint8` | 10 | | -| ARM_DISARM_REASON_FAILURE_DETECTOR | `uint8` | 11 | | -| ARM_DISARM_REASON_SHUTDOWN | `uint8` | 12 | | -| ARM_DISARM_REASON_UNIT_TEST | `uint8` | 13 | | -| NAVIGATION_STATE_MANUAL | `uint8` | 0 | Manual mode | -| NAVIGATION_STATE_ALTCTL | `uint8` | 1 | Altitude control mode | -| NAVIGATION_STATE_POSCTL | `uint8` | 2 | Position control mode | -| NAVIGATION_STATE_AUTO_MISSION | `uint8` | 3 | Auto mission mode | -| NAVIGATION_STATE_AUTO_LOITER | `uint8` | 4 | Auto loiter mode | -| NAVIGATION_STATE_AUTO_RTL | `uint8` | 5 | Auto return to launch mode | -| NAVIGATION_STATE_POSITION_SLOW | `uint8` | 6 | | -| NAVIGATION_STATE_FREE5 | `uint8` | 7 | | -| NAVIGATION_STATE_FREE4 | `uint8` | 8 | | -| NAVIGATION_STATE_FREE3 | `uint8` | 9 | | -| NAVIGATION_STATE_ACRO | `uint8` | 10 | Acro mode | -| NAVIGATION_STATE_FREE2 | `uint8` | 11 | | -| NAVIGATION_STATE_DESCEND | `uint8` | 12 | Descend mode (no position control) | -| NAVIGATION_STATE_TERMINATION | `uint8` | 13 | Termination mode | -| NAVIGATION_STATE_OFFBOARD | `uint8` | 14 | | -| NAVIGATION_STATE_STAB | `uint8` | 15 | Stabilized mode | -| NAVIGATION_STATE_FREE1 | `uint8` | 16 | | -| NAVIGATION_STATE_AUTO_TAKEOFF | `uint8` | 17 | Takeoff | -| NAVIGATION_STATE_AUTO_LAND | `uint8` | 18 | Land | -| NAVIGATION_STATE_AUTO_FOLLOW_TARGET | `uint8` | 19 | Auto Follow | -| NAVIGATION_STATE_AUTO_PRECLAND | `uint8` | 20 | Precision land with landing target | -| NAVIGATION_STATE_ORBIT | `uint8` | 21 | Orbit in a circle | -| NAVIGATION_STATE_AUTO_VTOL_TAKEOFF | `uint8` | 22 | Takeoff, transition, establish loiter | -| NAVIGATION_STATE_EXTERNAL1 | `uint8` | 23 | | -| NAVIGATION_STATE_EXTERNAL2 | `uint8` | 24 | | -| NAVIGATION_STATE_EXTERNAL3 | `uint8` | 25 | | -| NAVIGATION_STATE_EXTERNAL4 | `uint8` | 26 | | -| NAVIGATION_STATE_EXTERNAL5 | `uint8` | 27 | | -| NAVIGATION_STATE_EXTERNAL6 | `uint8` | 28 | | -| NAVIGATION_STATE_EXTERNAL7 | `uint8` | 29 | | -| NAVIGATION_STATE_EXTERNAL8 | `uint8` | 30 | | -| NAVIGATION_STATE_MAX | `uint8` | 31 | | -| FAILURE_NONE | `uint16` | 0 | | -| FAILURE_ROLL | `uint16` | 1 | (1 << 0) | -| FAILURE_PITCH | `uint16` | 2 | (1 << 1) | -| FAILURE_ALT | `uint16` | 4 | (1 << 2) | -| FAILURE_EXT | `uint16` | 8 | (1 << 3) | -| FAILURE_ARM_ESC | `uint16` | 16 | (1 << 4) | -| FAILURE_BATTERY | `uint16` | 32 | (1 << 5) | -| FAILURE_IMBALANCED_PROP | `uint16` | 64 | (1 << 6) | -| FAILURE_MOTOR | `uint16` | 128 | (1 << 7) | -| HIL_STATE_OFF | `uint8` | 0 | | -| HIL_STATE_ON | `uint8` | 1 | | -| VEHICLE_TYPE_UNKNOWN | `uint8` | 0 | | -| VEHICLE_TYPE_ROTARY_WING | `uint8` | 1 | | -| VEHICLE_TYPE_FIXED_WING | `uint8` | 2 | | -| VEHICLE_TYPE_ROVER | `uint8` | 3 | | -| VEHICLE_TYPE_AIRSHIP | `uint8` | 4 | | -| FAILSAFE_DEFER_STATE_DISABLED | `uint8` | 0 | | -| FAILSAFE_DEFER_STATE_ENABLED | `uint8` | 1 | | -| FAILSAFE_DEFER_STATE_WOULD_FAILSAFE | `uint8` | 2 | Failsafes deferred, but would trigger a failsafe | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------- | ----- | ----------------------------------------------------------------------------- | +| MESSAGE_VERSION | `uint32` | 0 | | +| ARMING_STATE_DISARMED | `uint8` | 1 | | +| ARMING_STATE_ARMED | `uint8` | 2 | | +| ARM_DISARM_REASON_TRANSITION_TO_STANDBY | `uint8` | 0 | | +| ARM_DISARM_REASON_STICK_GESTURE | `uint8` | 1 | | +| ARM_DISARM_REASON_RC_SWITCH | `uint8` | 2 | | +| ARM_DISARM_REASON_COMMAND_INTERNAL | `uint8` | 3 | | +| ARM_DISARM_REASON_COMMAND_EXTERNAL | `uint8` | 4 | | +| ARM_DISARM_REASON_MISSION_START | `uint8` | 5 | | +| ARM_DISARM_REASON_SAFETY_BUTTON | `uint8` | 6 | | +| ARM_DISARM_REASON_AUTO_DISARM_LAND | `uint8` | 7 | | +| ARM_DISARM_REASON_AUTO_DISARM_PREFLIGHT | `uint8` | 8 | | +| ARM_DISARM_REASON_KILL_SWITCH | `uint8` | 9 | | +| ARM_DISARM_REASON_LOCKDOWN | `uint8` | 10 | | +| ARM_DISARM_REASON_FAILURE_DETECTOR | `uint8` | 11 | | +| ARM_DISARM_REASON_SHUTDOWN | `uint8` | 12 | | +| ARM_DISARM_REASON_UNIT_TEST | `uint8` | 13 | | +| NAVIGATION_STATE_MANUAL | `uint8` | 0 | Manual mode | +| NAVIGATION_STATE_ALTCTL | `uint8` | 1 | Altitude control mode | +| NAVIGATION_STATE_POSCTL | `uint8` | 2 | Position control mode | +| NAVIGATION_STATE_AUTO_MISSION | `uint8` | 3 | Auto mission mode | +| NAVIGATION_STATE_AUTO_LOITER | `uint8` | 4 | Auto loiter mode | +| NAVIGATION_STATE_AUTO_RTL | `uint8` | 5 | Auto return to launch mode | +| NAVIGATION_STATE_POSITION_SLOW | `uint8` | 6 | | +| NAVIGATION_STATE_FREE5 | `uint8` | 7 | | +| NAVIGATION_STATE_FREE4 | `uint8` | 8 | | +| NAVIGATION_STATE_FREE3 | `uint8` | 9 | | +| NAVIGATION_STATE_ACRO | `uint8` | 10 | Acro mode | +| NAVIGATION_STATE_FREE2 | `uint8` | 11 | | +| NAVIGATION_STATE_DESCEND | `uint8` | 12 | Descend mode (no position control) | +| NAVIGATION_STATE_TERMINATION | `uint8` | 13 | Termination mode | +| NAVIGATION_STATE_OFFBOARD | `uint8` | 14 | | +| NAVIGATION_STATE_STAB | `uint8` | 15 | Stabilized mode | +| NAVIGATION_STATE_FREE1 | `uint8` | 16 | | +| NAVIGATION_STATE_AUTO_TAKEOFF | `uint8` | 17 | Takeoff | +| NAVIGATION_STATE_AUTO_LAND | `uint8` | 18 | Land | +| NAVIGATION_STATE_AUTO_FOLLOW_TARGET | `uint8` | 19 | Auto Follow | +| NAVIGATION_STATE_AUTO_PRECLAND | `uint8` | 20 | Precision land with landing target | +| NAVIGATION_STATE_ORBIT | `uint8` | 21 | Orbit in a circle | +| NAVIGATION_STATE_AUTO_VTOL_TAKEOFF | `uint8` | 22 | Takeoff, transition, establish loiter | +| NAVIGATION_STATE_EXTERNAL1 | `uint8` | 23 | | +| NAVIGATION_STATE_EXTERNAL2 | `uint8` | 24 | | +| NAVIGATION_STATE_EXTERNAL3 | `uint8` | 25 | | +| NAVIGATION_STATE_EXTERNAL4 | `uint8` | 26 | | +| NAVIGATION_STATE_EXTERNAL5 | `uint8` | 27 | | +| NAVIGATION_STATE_EXTERNAL6 | `uint8` | 28 | | +| NAVIGATION_STATE_EXTERNAL7 | `uint8` | 29 | | +| NAVIGATION_STATE_EXTERNAL8 | `uint8` | 30 | | +| NAVIGATION_STATE_MAX | `uint8` | 31 | | +| FAILURE_NONE | `uint16` | 0 | | +| FAILURE_ROLL | `uint16` | 1 | (1 << 0) | +| FAILURE_PITCH | `uint16` | 2 | (1 << 1) | +| FAILURE_ALT | `uint16` | 4 | (1 << 2) | +| FAILURE_EXT | `uint16` | 8 | (1 << 3) | +| FAILURE_ARM_ESC | `uint16` | 16 | (1 << 4) | +| FAILURE_BATTERY | `uint16` | 32 | (1 << 5) | +| FAILURE_IMBALANCED_PROP | `uint16` | 64 | (1 << 6) | +| FAILURE_MOTOR | `uint16` | 128 | (1 << 7) | +| HIL_STATE_OFF | `uint8` | 0 | | +| HIL_STATE_ON | `uint8` | 1 | | +| VEHICLE_TYPE_UNKNOWN | `uint8` | 0 | | +| VEHICLE_TYPE_ROTARY_WING | `uint8` | 1 | | +| VEHICLE_TYPE_FIXED_WING | `uint8` | 2 | | +| VEHICLE_TYPE_ROVER | `uint8` | 3 | | +| VEHICLE_TYPE_AIRSHIP | `uint8` | 4 | | +| FAILSAFE_DEFER_STATE_DISABLED | `uint8` | 0 | | +| FAILSAFE_DEFER_STATE_ENABLED | `uint8` | 1 | | +| FAILSAFE_DEFER_STATE_WOULD_FAILSAFE | `uint8` | 2 | Failsafes deferred, but would trigger a failsafe | ## Source Message diff --git a/docs/ko/msg_docs/VehicleStatusV1.md b/docs/ko/msg_docs/VehicleStatusV1.md new file mode 100644 index 0000000000..c9d37c611e --- /dev/null +++ b/docs/ko/msg_docs/VehicleStatusV1.md @@ -0,0 +1,287 @@ +--- +pageClass: is-wide-page +--- + +# VehicleStatusV1 (UORB message) + +Encodes the system state of the vehicle published by commander. + +**TOPICS:** vehicle_status_v1 + +## Fields + +| 명칭 | 형식 | Unit [Frame] | Range/Enum | 설명 | +| ---------------------------------------------------------------------------------------------------------------- | -------- | ---------------------------------------------------------------- | --------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| timestamp | `uint64` | us | | Time since system start | +| armed_time | `uint64` | us | | Arming timestamp | +| takeoff_time | `uint64` | us | | Takeoff timestamp | +| arming_state | `uint8` | | | | +| latest_arming_reason | `uint8` | | | | +| latest_disarming_reason | `uint8` | | | | +| nav_state_timestamp | `uint64` | | | Time when current nav_state activated | +| nav_state_user_intention | `uint8` | | | Mode that the user selected (might be different from nav_state in a failsafe situation) | +| nav_state | `uint8` | | [NAVIGATION_STATE](#NAVIGATION_STATE) | Currently active mode | +| executor_in_charge | `uint8` | | | Current mode executor in charge (0=Autopilot) | +| valid_nav_states_mask | `uint32` | | | Bitmask for all valid nav_state values | +| can_set_nav_states_mask | `uint32` | | | Bitmask for all modes that a user can select | +| failure_detector_status | `uint16` | | [FAILURE](#FAILURE) | | +| hil_state | `uint8` | enum HIL_STATE | | | +| vehicle_type | `uint8` | | [VEHICLE_TYPE](#VEHICLE_TYPE) | | +| failsafe | `bool` | | | true if system is in failsafe state (e.g.:RTL, Hover, Terminate, ...) | +| failsafe_and_user_took_over | `bool` | | | true if system is in failsafe state but the user took over control | +| failsafe_defer_state | `uint8` | | [FAILSAFE_DEFER_STATE](#FAILSAFE_DEFER_STATE) | | +| gcs_connection_lost | `bool` | | | datalink to GCS lost | +| gcs_connection_lost_counter | `uint8` | | | counts unique GCS connection lost events | +| high_latency_data_link_lost | `bool` | | | Set to true if the high latency data link (eg. RockBlock Iridium 9603 telemetry module) is lost | +| is_vtol | `bool` | | | True if the system is VTOL capable | +| is_vtol_tailsitter | `bool` | | | True if the system performs a 90° pitch down rotation during transition from MC to FW | +| in_transition_mode | `bool` | | | True if VTOL is doing a transition | +| in_transition_to_fw | `bool` | | | True if VTOL is doing a transition from MC to FW | +| system_type | `uint8` | | | system type, contains mavlink MAV_TYPE | +| system_id | `uint8` | | | system id, contains MAVLink's system ID field | +| component_id | `uint8` | | | subsystem / component id, contains MAVLink's component ID field | +| safety_button_available | `bool` | | | Set to true if a safety button is connected | +| safety_off | `bool` | | | Set to true if safety is off | +| power_input_valid | `bool` | | | Set if input power is valid | +| usb_connected | `bool` | | | Set to true (never cleared) once telemetry received from usb link | +| open_drone_id_system_present | `bool` | | | | +| open_drone_id_system_healthy | `bool` | | | | +| parachute_system_present | `bool` | | | | +| parachute_system_healthy | `bool` | | | | +| rc_calibration_in_progress | `bool` | | | | +| calibration_enabled | `bool` | | | | +| pre_flight_checks_pass | `bool` | | | true if all checks necessary to arm pass | + +## Enums + +### NAVIGATION_STATE {#NAVIGATION_STATE} + +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | ----- | ----------------------------------------------------- | +| NAVIGATION_STATE_MANUAL | `uint8` | 0 | Manual mode | +| NAVIGATION_STATE_ALTCTL | `uint8` | 1 | Altitude control mode | +| NAVIGATION_STATE_POSCTL | `uint8` | 2 | Position control mode | +| NAVIGATION_STATE_AUTO_MISSION | `uint8` | 3 | Auto mission mode | +| NAVIGATION_STATE_AUTO_LOITER | `uint8` | 4 | Auto loiter mode | +| NAVIGATION_STATE_AUTO_RTL | `uint8` | 5 | Auto return to launch mode | +| NAVIGATION_STATE_POSITION_SLOW | `uint8` | 6 | | +| NAVIGATION_STATE_FREE5 | `uint8` | 7 | | +| NAVIGATION_STATE_ALTITUDE_CRUISE | `uint8` | 8 | Altitude with Cruise mode | +| NAVIGATION_STATE_FREE3 | `uint8` | 9 | | +| NAVIGATION_STATE_ACRO | `uint8` | 10 | Acro mode | +| NAVIGATION_STATE_FREE2 | `uint8` | 11 | | +| NAVIGATION_STATE_DESCEND | `uint8` | 12 | Descend mode (no position control) | +| NAVIGATION_STATE_TERMINATION | `uint8` | 13 | Termination mode | +| NAVIGATION_STATE_OFFBOARD | `uint8` | 14 | | +| NAVIGATION_STATE_STAB | `uint8` | 15 | Stabilized mode | +| NAVIGATION_STATE_FREE1 | `uint8` | 16 | | +| NAVIGATION_STATE_AUTO_TAKEOFF | `uint8` | 17 | Takeoff | +| NAVIGATION_STATE_AUTO_LAND | `uint8` | 18 | Land | +| NAVIGATION_STATE_AUTO_FOLLOW_TARGET | `uint8` | 19 | Auto Follow | +| NAVIGATION_STATE_AUTO_PRECLAND | `uint8` | 20 | Precision land with landing target | +| NAVIGATION_STATE_ORBIT | `uint8` | 21 | Orbit in a circle | +| NAVIGATION_STATE_AUTO_VTOL_TAKEOFF | `uint8` | 22 | Takeoff, transition, establish loiter | +| NAVIGATION_STATE_EXTERNAL1 | `uint8` | 23 | | +| NAVIGATION_STATE_EXTERNAL2 | `uint8` | 24 | | +| NAVIGATION_STATE_EXTERNAL3 | `uint8` | 25 | | +| NAVIGATION_STATE_EXTERNAL4 | `uint8` | 26 | | +| NAVIGATION_STATE_EXTERNAL5 | `uint8` | 27 | | +| NAVIGATION_STATE_EXTERNAL6 | `uint8` | 28 | | +| NAVIGATION_STATE_EXTERNAL7 | `uint8` | 29 | | +| NAVIGATION_STATE_EXTERNAL8 | `uint8` | 30 | | +| NAVIGATION_STATE_MAX | `uint8` | 31 | | + +### FAILURE {#FAILURE} + +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------------------------------------------- | -------- | ----- | ----------------------------------------------------------------------------- | +| FAILURE_NONE | `uint16` | 0 | | +| FAILURE_ROLL | `uint16` | 1 | (1 << 0) | +| FAILURE_PITCH | `uint16` | 2 | (1 << 1) | +| FAILURE_ALT | `uint16` | 4 | (1 << 2) | +| FAILURE_EXT | `uint16` | 8 | (1 << 3) | +| FAILURE_ARM_ESC | `uint16` | 16 | (1 << 4) | +| FAILURE_BATTERY | `uint16` | 32 | (1 << 5) | +| FAILURE_IMBALANCED_PROP | `uint16` | 64 | (1 << 6) | +| FAILURE_MOTOR | `uint16` | 128 | (1 << 7) | + +### VEHICLE_TYPE {#VEHICLE_TYPE} + +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------------------------------------------------------------------ | ------- | ----- | -- | +| VEHICLE_TYPE_UNSPECIFIED | `uint8` | 0 | | +| VEHICLE_TYPE_ROTARY_WING | `uint8` | 1 | | +| VEHICLE_TYPE_FIXED_WING | `uint8` | 2 | | +| VEHICLE_TYPE_ROVER | `uint8` | 3 | | + +### FAILSAFE_DEFER_STATE {#FAILSAFE_DEFER_STATE} + +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | ----- | ------------------------------------------------ | +| FAILSAFE_DEFER_STATE_DISABLED | `uint8` | 0 | | +| FAILSAFE_DEFER_STATE_ENABLED | `uint8` | 1 | | +| FAILSAFE_DEFER_STATE_WOULD_FAILSAFE | `uint8` | 2 | Failsafes deferred, but would trigger a failsafe | + +## Constants + +| 명칭 | 형식 | Value | 설명 | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ----- | -- | +| MESSAGE_VERSION | `uint32` | 1 | | +| ARMING_STATE_DISARMED | `uint8` | 1 | | +| ARMING_STATE_ARMED | `uint8` | 2 | | +| ARM_DISARM_REASON_STICK_GESTURE | `uint8` | 1 | | +| ARM_DISARM_REASON_RC_SWITCH | `uint8` | 2 | | +| ARM_DISARM_REASON_COMMAND_INTERNAL | `uint8` | 3 | | +| ARM_DISARM_REASON_COMMAND_EXTERNAL | `uint8` | 4 | | +| ARM_DISARM_REASON_MISSION_START | `uint8` | 5 | | +| ARM_DISARM_REASON_LANDING | `uint8` | 6 | | +| ARM_DISARM_REASON_PREFLIGHT_INACTION | `uint8` | 7 | | +| ARM_DISARM_REASON_KILL_SWITCH | `uint8` | 8 | | +| ARM_DISARM_REASON_RC_BUTTON | `uint8` | 13 | | +| ARM_DISARM_REASON_FAILSAFE | `uint8` | 14 | | +| HIL_STATE_OFF | `uint8` | 0 | | +| HIL_STATE_ON | `uint8` | 1 | | + +## Source Message + +[Source file (GitHub)](https://github.com/PX4/PX4-Autopilot/blob/main/msg/px4_msgs_old/msg/VehicleStatusV1.msg) + +:::details +Click here to see original file + +```c +# Encodes the system state of the vehicle published by commander + +uint32 MESSAGE_VERSION = 1 + +uint64 timestamp # [us] Time since system start + +uint64 armed_time # [us] Arming timestamp +uint64 takeoff_time # [us] Takeoff timestamp + +uint8 arming_state +uint8 ARMING_STATE_DISARMED = 1 +uint8 ARMING_STATE_ARMED = 2 + +uint8 latest_arming_reason +uint8 latest_disarming_reason +uint8 ARM_DISARM_REASON_STICK_GESTURE = 1 +uint8 ARM_DISARM_REASON_RC_SWITCH = 2 +uint8 ARM_DISARM_REASON_COMMAND_INTERNAL = 3 +uint8 ARM_DISARM_REASON_COMMAND_EXTERNAL = 4 +uint8 ARM_DISARM_REASON_MISSION_START = 5 +uint8 ARM_DISARM_REASON_LANDING = 6 +uint8 ARM_DISARM_REASON_PREFLIGHT_INACTION = 7 +uint8 ARM_DISARM_REASON_KILL_SWITCH = 8 +uint8 ARM_DISARM_REASON_RC_BUTTON = 13 +uint8 ARM_DISARM_REASON_FAILSAFE = 14 + +uint64 nav_state_timestamp # Time when current nav_state activated + +uint8 nav_state_user_intention # Mode that the user selected (might be different from nav_state in a failsafe situation) + +uint8 nav_state # [@enum NAVIGATION_STATE] Currently active mode +uint8 NAVIGATION_STATE_MANUAL = 0 # Manual mode +uint8 NAVIGATION_STATE_ALTCTL = 1 # Altitude control mode +uint8 NAVIGATION_STATE_POSCTL = 2 # Position control mode +uint8 NAVIGATION_STATE_AUTO_MISSION = 3 # Auto mission mode +uint8 NAVIGATION_STATE_AUTO_LOITER = 4 # Auto loiter mode +uint8 NAVIGATION_STATE_AUTO_RTL = 5 # Auto return to launch mode +uint8 NAVIGATION_STATE_POSITION_SLOW = 6 +uint8 NAVIGATION_STATE_FREE5 = 7 +uint8 NAVIGATION_STATE_ALTITUDE_CRUISE = 8 # Altitude with Cruise mode +uint8 NAVIGATION_STATE_FREE3 = 9 +uint8 NAVIGATION_STATE_ACRO = 10 # Acro mode +uint8 NAVIGATION_STATE_FREE2 = 11 +uint8 NAVIGATION_STATE_DESCEND = 12 # Descend mode (no position control) +uint8 NAVIGATION_STATE_TERMINATION = 13 # Termination mode +uint8 NAVIGATION_STATE_OFFBOARD = 14 +uint8 NAVIGATION_STATE_STAB = 15 # Stabilized mode +uint8 NAVIGATION_STATE_FREE1 = 16 +uint8 NAVIGATION_STATE_AUTO_TAKEOFF = 17 # Takeoff +uint8 NAVIGATION_STATE_AUTO_LAND = 18 # Land +uint8 NAVIGATION_STATE_AUTO_FOLLOW_TARGET = 19 # Auto Follow +uint8 NAVIGATION_STATE_AUTO_PRECLAND = 20 # Precision land with landing target +uint8 NAVIGATION_STATE_ORBIT = 21 # Orbit in a circle +uint8 NAVIGATION_STATE_AUTO_VTOL_TAKEOFF = 22 # Takeoff, transition, establish loiter +uint8 NAVIGATION_STATE_EXTERNAL1 = 23 +uint8 NAVIGATION_STATE_EXTERNAL2 = 24 +uint8 NAVIGATION_STATE_EXTERNAL3 = 25 +uint8 NAVIGATION_STATE_EXTERNAL4 = 26 +uint8 NAVIGATION_STATE_EXTERNAL5 = 27 +uint8 NAVIGATION_STATE_EXTERNAL6 = 28 +uint8 NAVIGATION_STATE_EXTERNAL7 = 29 +uint8 NAVIGATION_STATE_EXTERNAL8 = 30 +uint8 NAVIGATION_STATE_MAX = 31 + +uint8 executor_in_charge # [-] Current mode executor in charge (0=Autopilot) + +uint32 valid_nav_states_mask # [-] Bitmask for all valid nav_state values +uint32 can_set_nav_states_mask # [-] Bitmask for all modes that a user can select + +# Bitmask of detected failures +uint16 failure_detector_status # [@enum FAILURE] +uint16 FAILURE_NONE = 0 +uint16 FAILURE_ROLL = 1 # (1 << 0) +uint16 FAILURE_PITCH = 2 # (1 << 1) +uint16 FAILURE_ALT = 4 # (1 << 2) +uint16 FAILURE_EXT = 8 # (1 << 3) +uint16 FAILURE_ARM_ESC = 16 # (1 << 4) +uint16 FAILURE_BATTERY = 32 # (1 << 5) +uint16 FAILURE_IMBALANCED_PROP = 64 # (1 << 6) +uint16 FAILURE_MOTOR = 128 # (1 << 7) + +uint8 hil_state # [enum HIL_STATE] +uint8 HIL_STATE_OFF = 0 +uint8 HIL_STATE_ON = 1 + +# Current vehicle locomotion method. A vehicle can have different methods (e.g. VTOL transitions from RW to FW method) +uint8 vehicle_type # [@enum VEHICLE_TYPE] +uint8 VEHICLE_TYPE_UNSPECIFIED = 0 +uint8 VEHICLE_TYPE_ROTARY_WING = 1 +uint8 VEHICLE_TYPE_FIXED_WING = 2 +uint8 VEHICLE_TYPE_ROVER = 3 + +uint8 FAILSAFE_DEFER_STATE_DISABLED = 0 +uint8 FAILSAFE_DEFER_STATE_ENABLED = 1 +uint8 FAILSAFE_DEFER_STATE_WOULD_FAILSAFE = 2 # Failsafes deferred, but would trigger a failsafe + +bool failsafe # true if system is in failsafe state (e.g.:RTL, Hover, Terminate, ...) +bool failsafe_and_user_took_over # true if system is in failsafe state but the user took over control +uint8 failsafe_defer_state # [@enum FAILSAFE_DEFER_STATE] + +# Link loss +bool gcs_connection_lost # datalink to GCS lost +uint8 gcs_connection_lost_counter # counts unique GCS connection lost events +bool high_latency_data_link_lost # Set to true if the high latency data link (eg. RockBlock Iridium 9603 telemetry module) is lost + +# VTOL flags +bool is_vtol # True if the system is VTOL capable +bool is_vtol_tailsitter # True if the system performs a 90° pitch down rotation during transition from MC to FW +bool in_transition_mode # True if VTOL is doing a transition +bool in_transition_to_fw # True if VTOL is doing a transition from MC to FW + +# MAVLink identification +uint8 system_type # system type, contains mavlink MAV_TYPE +uint8 system_id # system id, contains MAVLink's system ID field +uint8 component_id # subsystem / component id, contains MAVLink's component ID field + +bool safety_button_available # Set to true if a safety button is connected +bool safety_off # Set to true if safety is off + +bool power_input_valid # Set if input power is valid +bool usb_connected # Set to true (never cleared) once telemetry received from usb link + +bool open_drone_id_system_present +bool open_drone_id_system_healthy + +bool parachute_system_present +bool parachute_system_healthy + +bool rc_calibration_in_progress +bool calibration_enabled + +bool pre_flight_checks_pass # true if all checks necessary to arm pass +``` + +::: diff --git a/docs/ko/msg_docs/VehicleStatusV2.md b/docs/ko/msg_docs/VehicleStatusV2.md new file mode 100644 index 0000000000..05f57f7233 --- /dev/null +++ b/docs/ko/msg_docs/VehicleStatusV2.md @@ -0,0 +1,270 @@ +--- +pageClass: is-wide-page +--- + +# VehicleStatusV2 (UORB message) + +Encodes the system state of the vehicle published by commander. + +**TOPICS:** vehicle_status_v2 + +## Fields + +| 명칭 | 형식 | Unit [Frame] | Range/Enum | 설명 | +| ---------------------------------------------------------------------------------------------------------------- | -------- | ---------------------------------------------------------------- | ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| timestamp | `uint64` | | | time since system start (microseconds) | +| armed_time | `uint64` | | | Arming timestamp (microseconds) | +| takeoff_time | `uint64` | | | Takeoff timestamp (microseconds) | +| arming_state | `uint8` | | | | +| latest_arming_reason | `uint8` | | | | +| latest_disarming_reason | `uint8` | | | | +| nav_state_timestamp | `uint64` | | | time when current nav_state activated | +| nav_state_user_intention | `uint8` | | | Mode that the user selected (might be different from nav_state in a failsafe situation) | +| nav_state | `uint8` | | | Currently active mode | +| executor_in_charge | `uint8` | | | Current mode executor in charge (0=Autopilot) | +| nav_state_display | `uint8` | | | User-visible nav state sent via MAVLink (executor state if active, otherwise nav_state) | +| valid_nav_states_mask | `uint32` | | | Bitmask for all valid nav_state values | +| can_set_nav_states_mask | `uint32` | | | Bitmask for all modes that a user can select | +| failure_detector_status | `uint16` | | | | +| hil_state | `uint8` | | | | +| vehicle_type | `uint8` | | | | +| failsafe | `bool` | | | true if system is in failsafe state (e.g.:RTL, Hover, Terminate, ...) | +| failsafe_and_user_took_over | `bool` | | | true if system is in failsafe state but the user took over control | +| failsafe_defer_state | `uint8` | | | one of FAILSAFE_DEFER_STATE_\* | +| gcs_connection_lost | `bool` | | | datalink to GCS lost | +| gcs_connection_lost_counter | `uint8` | | | counts unique GCS connection lost events | +| high_latency_data_link_lost | `bool` | | | Set to true if the high latency data link (eg. RockBlock Iridium 9603 telemetry module) is lost | +| is_vtol | `bool` | | | True if the system is VTOL capable | +| is_vtol_tailsitter | `bool` | | | True if the system performs a 90° pitch down rotation during transition from MC to FW | +| in_transition_mode | `bool` | | | True if VTOL is doing a transition | +| in_transition_to_fw | `bool` | | | True if VTOL is doing a transition from MC to FW | +| system_type | `uint8` | | | system type, contains mavlink MAV_TYPE | +| system_id | `uint8` | | | system id, contains MAVLink's system ID field | +| component_id | `uint8` | | | subsystem / component id, contains MAVLink's component ID field | +| safety_button_available | `bool` | | | Set to true if a safety button is connected | +| safety_off | `bool` | | | Set to true if safety is off | +| power_input_valid | `bool` | | | set if input power is valid | +| usb_connected | `bool` | | | set to true (never cleared) once telemetry received from usb link | +| open_drone_id_system_present | `bool` | | | | +| open_drone_id_system_healthy | `bool` | | | | +| parachute_system_present | `bool` | | | | +| parachute_system_healthy | `bool` | | | | +| traffic_avoidance_system_present | `bool` | | | | +| rc_calibration_in_progress | `bool` | | | | +| calibration_enabled | `bool` | | | | +| pre_flight_checks_pass | `bool` | | | true if all checks necessary to arm pass | + +## Constants + +| 명칭 | 형식 | Value | 설명 | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ----- | ----------------------------------------------------------------------------- | +| MESSAGE_VERSION | `uint32` | 2 | | +| ARMING_STATE_DISARMED | `uint8` | 1 | | +| ARMING_STATE_ARMED | `uint8` | 2 | | +| ARM_DISARM_REASON_STICK_GESTURE | `uint8` | 1 | | +| ARM_DISARM_REASON_RC_SWITCH | `uint8` | 2 | | +| ARM_DISARM_REASON_COMMAND_INTERNAL | `uint8` | 3 | | +| ARM_DISARM_REASON_COMMAND_EXTERNAL | `uint8` | 4 | | +| ARM_DISARM_REASON_MISSION_START | `uint8` | 5 | | +| ARM_DISARM_REASON_LANDING | `uint8` | 6 | | +| ARM_DISARM_REASON_PREFLIGHT_INACTION | `uint8` | 7 | | +| ARM_DISARM_REASON_KILL_SWITCH | `uint8` | 8 | | +| ARM_DISARM_REASON_RC_BUTTON | `uint8` | 13 | | +| ARM_DISARM_REASON_FAILSAFE | `uint8` | 14 | | +| NAVIGATION_STATE_MANUAL | `uint8` | 0 | Manual mode | +| NAVIGATION_STATE_ALTCTL | `uint8` | 1 | Altitude control mode | +| NAVIGATION_STATE_POSCTL | `uint8` | 2 | Position control mode | +| NAVIGATION_STATE_AUTO_MISSION | `uint8` | 3 | Auto mission mode | +| NAVIGATION_STATE_AUTO_LOITER | `uint8` | 4 | Auto loiter mode | +| NAVIGATION_STATE_AUTO_RTL | `uint8` | 5 | Auto return to launch mode | +| NAVIGATION_STATE_POSITION_SLOW | `uint8` | 6 | | +| NAVIGATION_STATE_FREE5 | `uint8` | 7 | | +| NAVIGATION_STATE_ALTITUDE_CRUISE | `uint8` | 8 | Altitude with Cruise mode | +| NAVIGATION_STATE_FREE3 | `uint8` | 9 | | +| NAVIGATION_STATE_ACRO | `uint8` | 10 | Acro mode | +| NAVIGATION_STATE_FREE2 | `uint8` | 11 | | +| NAVIGATION_STATE_DESCEND | `uint8` | 12 | Descend mode (no position control) | +| NAVIGATION_STATE_TERMINATION | `uint8` | 13 | Termination mode | +| NAVIGATION_STATE_OFFBOARD | `uint8` | 14 | | +| NAVIGATION_STATE_STAB | `uint8` | 15 | Stabilized mode | +| NAVIGATION_STATE_FREE1 | `uint8` | 16 | | +| NAVIGATION_STATE_AUTO_TAKEOFF | `uint8` | 17 | Takeoff | +| NAVIGATION_STATE_AUTO_LAND | `uint8` | 18 | Land | +| NAVIGATION_STATE_AUTO_FOLLOW_TARGET | `uint8` | 19 | Auto Follow | +| NAVIGATION_STATE_AUTO_PRECLAND | `uint8` | 20 | Precision land with landing target | +| NAVIGATION_STATE_ORBIT | `uint8` | 21 | Orbit in a circle | +| NAVIGATION_STATE_AUTO_VTOL_TAKEOFF | `uint8` | 22 | Takeoff, transition, establish loiter | +| NAVIGATION_STATE_EXTERNAL1 | `uint8` | 23 | | +| NAVIGATION_STATE_EXTERNAL2 | `uint8` | 24 | | +| NAVIGATION_STATE_EXTERNAL3 | `uint8` | 25 | | +| NAVIGATION_STATE_EXTERNAL4 | `uint8` | 26 | | +| NAVIGATION_STATE_EXTERNAL5 | `uint8` | 27 | | +| NAVIGATION_STATE_EXTERNAL6 | `uint8` | 28 | | +| NAVIGATION_STATE_EXTERNAL7 | `uint8` | 29 | | +| NAVIGATION_STATE_EXTERNAL8 | `uint8` | 30 | | +| NAVIGATION_STATE_MAX | `uint8` | 31 | | +| FAILURE_NONE | `uint16` | 0 | | +| FAILURE_ROLL | `uint16` | 1 | (1 << 0) | +| FAILURE_PITCH | `uint16` | 2 | (1 << 1) | +| FAILURE_ALT | `uint16` | 4 | (1 << 2) | +| FAILURE_EXT | `uint16` | 8 | (1 << 3) | +| FAILURE_ARM_ESC | `uint16` | 16 | (1 << 4) | +| FAILURE_BATTERY | `uint16` | 32 | (1 << 5) | +| FAILURE_IMBALANCED_PROP | `uint16` | 64 | (1 << 6) | +| FAILURE_MOTOR | `uint16` | 128 | (1 << 7) | +| HIL_STATE_OFF | `uint8` | 0 | | +| HIL_STATE_ON | `uint8` | 1 | | +| VEHICLE_TYPE_UNSPECIFIED | `uint8` | 0 | | +| VEHICLE_TYPE_ROTARY_WING | `uint8` | 1 | | +| VEHICLE_TYPE_FIXED_WING | `uint8` | 2 | | +| VEHICLE_TYPE_ROVER | `uint8` | 3 | | +| FAILSAFE_DEFER_STATE_DISABLED | `uint8` | 0 | | +| FAILSAFE_DEFER_STATE_ENABLED | `uint8` | 1 | | +| FAILSAFE_DEFER_STATE_WOULD_FAILSAFE | `uint8` | 2 | Failsafes deferred, but would trigger a failsafe | + +## Source Message + +[Source file (GitHub)](https://github.com/PX4/PX4-Autopilot/blob/main/msg/px4_msgs_old/msg/VehicleStatusV2.msg) + +:::details +Click here to see original file + +```c +# Encodes the system state of the vehicle published by commander + +uint32 MESSAGE_VERSION = 2 + +uint64 timestamp # time since system start (microseconds) + +uint64 armed_time # Arming timestamp (microseconds) +uint64 takeoff_time # Takeoff timestamp (microseconds) + +uint8 arming_state +uint8 ARMING_STATE_DISARMED = 1 +uint8 ARMING_STATE_ARMED = 2 + +uint8 latest_arming_reason +uint8 latest_disarming_reason +uint8 ARM_DISARM_REASON_STICK_GESTURE = 1 +uint8 ARM_DISARM_REASON_RC_SWITCH = 2 +uint8 ARM_DISARM_REASON_COMMAND_INTERNAL = 3 +uint8 ARM_DISARM_REASON_COMMAND_EXTERNAL = 4 +uint8 ARM_DISARM_REASON_MISSION_START = 5 +uint8 ARM_DISARM_REASON_LANDING = 6 +uint8 ARM_DISARM_REASON_PREFLIGHT_INACTION = 7 +uint8 ARM_DISARM_REASON_KILL_SWITCH = 8 +uint8 ARM_DISARM_REASON_RC_BUTTON = 13 +uint8 ARM_DISARM_REASON_FAILSAFE = 14 + +uint64 nav_state_timestamp # time when current nav_state activated + +uint8 nav_state_user_intention # Mode that the user selected (might be different from nav_state in a failsafe situation) + +uint8 nav_state # Currently active mode +uint8 NAVIGATION_STATE_MANUAL = 0 # Manual mode +uint8 NAVIGATION_STATE_ALTCTL = 1 # Altitude control mode +uint8 NAVIGATION_STATE_POSCTL = 2 # Position control mode +uint8 NAVIGATION_STATE_AUTO_MISSION = 3 # Auto mission mode +uint8 NAVIGATION_STATE_AUTO_LOITER = 4 # Auto loiter mode +uint8 NAVIGATION_STATE_AUTO_RTL = 5 # Auto return to launch mode +uint8 NAVIGATION_STATE_POSITION_SLOW = 6 +uint8 NAVIGATION_STATE_FREE5 = 7 +uint8 NAVIGATION_STATE_ALTITUDE_CRUISE = 8 # Altitude with Cruise mode +uint8 NAVIGATION_STATE_FREE3 = 9 +uint8 NAVIGATION_STATE_ACRO = 10 # Acro mode +uint8 NAVIGATION_STATE_FREE2 = 11 +uint8 NAVIGATION_STATE_DESCEND = 12 # Descend mode (no position control) +uint8 NAVIGATION_STATE_TERMINATION = 13 # Termination mode +uint8 NAVIGATION_STATE_OFFBOARD = 14 +uint8 NAVIGATION_STATE_STAB = 15 # Stabilized mode +uint8 NAVIGATION_STATE_FREE1 = 16 +uint8 NAVIGATION_STATE_AUTO_TAKEOFF = 17 # Takeoff +uint8 NAVIGATION_STATE_AUTO_LAND = 18 # Land +uint8 NAVIGATION_STATE_AUTO_FOLLOW_TARGET = 19 # Auto Follow +uint8 NAVIGATION_STATE_AUTO_PRECLAND = 20 # Precision land with landing target +uint8 NAVIGATION_STATE_ORBIT = 21 # Orbit in a circle +uint8 NAVIGATION_STATE_AUTO_VTOL_TAKEOFF = 22 # Takeoff, transition, establish loiter +uint8 NAVIGATION_STATE_EXTERNAL1 = 23 +uint8 NAVIGATION_STATE_EXTERNAL2 = 24 +uint8 NAVIGATION_STATE_EXTERNAL3 = 25 +uint8 NAVIGATION_STATE_EXTERNAL4 = 26 +uint8 NAVIGATION_STATE_EXTERNAL5 = 27 +uint8 NAVIGATION_STATE_EXTERNAL6 = 28 +uint8 NAVIGATION_STATE_EXTERNAL7 = 29 +uint8 NAVIGATION_STATE_EXTERNAL8 = 30 +uint8 NAVIGATION_STATE_MAX = 31 + +uint8 executor_in_charge # Current mode executor in charge (0=Autopilot) +uint8 nav_state_display # User-visible nav state sent via MAVLink (executor state if active, otherwise nav_state) + +uint32 valid_nav_states_mask # Bitmask for all valid nav_state values +uint32 can_set_nav_states_mask # Bitmask for all modes that a user can select + +# Bitmask of detected failures +uint16 failure_detector_status +uint16 FAILURE_NONE = 0 +uint16 FAILURE_ROLL = 1 # (1 << 0) +uint16 FAILURE_PITCH = 2 # (1 << 1) +uint16 FAILURE_ALT = 4 # (1 << 2) +uint16 FAILURE_EXT = 8 # (1 << 3) +uint16 FAILURE_ARM_ESC = 16 # (1 << 4) +uint16 FAILURE_BATTERY = 32 # (1 << 5) +uint16 FAILURE_IMBALANCED_PROP = 64 # (1 << 6) +uint16 FAILURE_MOTOR = 128 # (1 << 7) + +uint8 hil_state +uint8 HIL_STATE_OFF = 0 +uint8 HIL_STATE_ON = 1 + +# Current vehicle locomotion method. A vehicle can have different methods (e.g. VTOL transitions from RW to FW method) +uint8 vehicle_type +uint8 VEHICLE_TYPE_UNSPECIFIED = 0 +uint8 VEHICLE_TYPE_ROTARY_WING = 1 +uint8 VEHICLE_TYPE_FIXED_WING = 2 +uint8 VEHICLE_TYPE_ROVER = 3 + +uint8 FAILSAFE_DEFER_STATE_DISABLED = 0 +uint8 FAILSAFE_DEFER_STATE_ENABLED = 1 +uint8 FAILSAFE_DEFER_STATE_WOULD_FAILSAFE = 2 # Failsafes deferred, but would trigger a failsafe + +bool failsafe # true if system is in failsafe state (e.g.:RTL, Hover, Terminate, ...) +bool failsafe_and_user_took_over # true if system is in failsafe state but the user took over control +uint8 failsafe_defer_state # one of FAILSAFE_DEFER_STATE_* + +# Link loss +bool gcs_connection_lost # datalink to GCS lost +uint8 gcs_connection_lost_counter # counts unique GCS connection lost events +bool high_latency_data_link_lost # Set to true if the high latency data link (eg. RockBlock Iridium 9603 telemetry module) is lost + +# VTOL flags +bool is_vtol # True if the system is VTOL capable +bool is_vtol_tailsitter # True if the system performs a 90° pitch down rotation during transition from MC to FW +bool in_transition_mode # True if VTOL is doing a transition +bool in_transition_to_fw # True if VTOL is doing a transition from MC to FW + +# MAVLink identification +uint8 system_type # system type, contains mavlink MAV_TYPE +uint8 system_id # system id, contains MAVLink's system ID field +uint8 component_id # subsystem / component id, contains MAVLink's component ID field + +bool safety_button_available # Set to true if a safety button is connected +bool safety_off # Set to true if safety is off + +bool power_input_valid # set if input power is valid +bool usb_connected # set to true (never cleared) once telemetry received from usb link + +bool open_drone_id_system_present +bool open_drone_id_system_healthy + +bool parachute_system_present +bool parachute_system_healthy + +bool traffic_avoidance_system_present + +bool rc_calibration_in_progress +bool calibration_enabled + +bool pre_flight_checks_pass # true if all checks necessary to arm pass +``` + +::: diff --git a/docs/ko/msg_docs/VehicleStatusV3.md b/docs/ko/msg_docs/VehicleStatusV3.md new file mode 100644 index 0000000000..9c96f34636 --- /dev/null +++ b/docs/ko/msg_docs/VehicleStatusV3.md @@ -0,0 +1,248 @@ +--- +pageClass: is-wide-page +--- + +# VehicleStatusV3 (UORB message) + +Encodes the system state of the vehicle published by commander. + +**TOPICS:** vehicle_status_v3 + +## Fields + +| 명칭 | 형식 | Unit [Frame] | Range/Enum | 설명 | +| ---------------------------------------------------------------------------------------------------------------- | -------- | ---------------------------------------------------------------- | ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| timestamp | `uint64` | | | time since system start (microseconds) | +| armed_time | `uint64` | | | Arming timestamp (microseconds) | +| takeoff_time | `uint64` | | | Takeoff timestamp (microseconds) | +| arming_state | `uint8` | | | | +| latest_arming_reason | `uint8` | | | | +| latest_disarming_reason | `uint8` | | | | +| nav_state_timestamp | `uint64` | | | time when current nav_state activated | +| nav_state_user_intention | `uint8` | | | Mode that the user selected (might be different from nav_state in a failsafe situation) | +| nav_state | `uint8` | | | Currently active mode | +| executor_in_charge | `uint8` | | | Current mode executor in charge (0=Autopilot) | +| nav_state_display | `uint8` | | | User-visible nav state sent via MAVLink (executor state if active, otherwise nav_state) | +| valid_nav_states_mask | `uint32` | | | Bitmask for all valid nav_state values | +| can_set_nav_states_mask | `uint32` | | | Bitmask for all modes that a user can select | +| hil_state | `uint8` | | | | +| vehicle_type | `uint8` | | | | +| failsafe | `bool` | | | true if system is in failsafe state (e.g.:RTL, Hover, Terminate, ...) | +| failsafe_and_user_took_over | `bool` | | | true if system is in failsafe state but the user took over control | +| failsafe_defer_state | `uint8` | | | one of FAILSAFE_DEFER_STATE_\* | +| gcs_connection_lost | `bool` | | | datalink to GCS lost | +| gcs_connection_lost_counter | `uint8` | | | counts unique GCS connection lost events | +| high_latency_data_link_lost | `bool` | | | Set to true if the high latency data link (eg. RockBlock Iridium 9603 telemetry module) is lost | +| is_vtol | `bool` | | | True if the system is VTOL capable | +| is_vtol_tailsitter | `bool` | | | True if the system performs a 90° pitch down rotation during transition from MC to FW | +| in_transition_mode | `bool` | | | True if VTOL is doing a transition | +| in_transition_to_fw | `bool` | | | True if VTOL is doing a transition from MC to FW | +| system_type | `uint8` | | | system type, contains mavlink MAV_TYPE | +| system_id | `uint8` | | | system id, contains MAVLink's system ID field | +| component_id | `uint8` | | | subsystem / component id, contains MAVLink's component ID field | +| safety_button_available | `bool` | | | Set to true if a safety button is connected | +| safety_off | `bool` | | | Set to true if safety is off | +| power_input_valid | `bool` | | | set if input power is valid | +| usb_connected | `bool` | | | set to true (never cleared) once telemetry received from usb link | +| open_drone_id_system_present | `bool` | | | | +| open_drone_id_system_healthy | `bool` | | | | +| parachute_system_present | `bool` | | | | +| parachute_system_healthy | `bool` | | | | +| traffic_avoidance_system_present | `bool` | | | | +| rc_calibration_in_progress | `bool` | | | | +| calibration_enabled | `bool` | | | | +| pre_flight_checks_pass | `bool` | | | true if all checks necessary to arm pass | + +## Constants + +| 명칭 | 형식 | Value | 설명 | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ----- | ----------------------------------------------------- | +| MESSAGE_VERSION | `uint32` | 3 | | +| ARMING_STATE_DISARMED | `uint8` | 1 | | +| ARMING_STATE_ARMED | `uint8` | 2 | | +| ARM_DISARM_REASON_STICK_GESTURE | `uint8` | 1 | | +| ARM_DISARM_REASON_RC_SWITCH | `uint8` | 2 | | +| ARM_DISARM_REASON_COMMAND_INTERNAL | `uint8` | 3 | | +| ARM_DISARM_REASON_COMMAND_EXTERNAL | `uint8` | 4 | | +| ARM_DISARM_REASON_MISSION_START | `uint8` | 5 | | +| ARM_DISARM_REASON_LANDING | `uint8` | 6 | | +| ARM_DISARM_REASON_PREFLIGHT_INACTION | `uint8` | 7 | | +| ARM_DISARM_REASON_KILL_SWITCH | `uint8` | 8 | | +| ARM_DISARM_REASON_RC_BUTTON | `uint8` | 13 | | +| ARM_DISARM_REASON_FAILSAFE | `uint8` | 14 | | +| NAVIGATION_STATE_MANUAL | `uint8` | 0 | Manual mode | +| NAVIGATION_STATE_ALTCTL | `uint8` | 1 | Altitude control mode | +| NAVIGATION_STATE_POSCTL | `uint8` | 2 | Position control mode | +| NAVIGATION_STATE_AUTO_MISSION | `uint8` | 3 | Auto mission mode | +| NAVIGATION_STATE_AUTO_LOITER | `uint8` | 4 | Auto loiter mode | +| NAVIGATION_STATE_AUTO_RTL | `uint8` | 5 | Auto return to launch mode | +| NAVIGATION_STATE_POSITION_SLOW | `uint8` | 6 | | +| NAVIGATION_STATE_FREE5 | `uint8` | 7 | | +| NAVIGATION_STATE_ALTITUDE_CRUISE | `uint8` | 8 | Altitude with Cruise mode | +| NAVIGATION_STATE_FREE3 | `uint8` | 9 | | +| NAVIGATION_STATE_ACRO | `uint8` | 10 | Acro mode | +| NAVIGATION_STATE_FREE2 | `uint8` | 11 | | +| NAVIGATION_STATE_DESCEND | `uint8` | 12 | Descend mode (no position control) | +| NAVIGATION_STATE_TERMINATION | `uint8` | 13 | Termination mode | +| NAVIGATION_STATE_OFFBOARD | `uint8` | 14 | | +| NAVIGATION_STATE_STAB | `uint8` | 15 | Stabilized mode | +| NAVIGATION_STATE_FREE1 | `uint8` | 16 | | +| NAVIGATION_STATE_AUTO_TAKEOFF | `uint8` | 17 | Takeoff | +| NAVIGATION_STATE_AUTO_LAND | `uint8` | 18 | Land | +| NAVIGATION_STATE_AUTO_FOLLOW_TARGET | `uint8` | 19 | Auto Follow | +| NAVIGATION_STATE_AUTO_PRECLAND | `uint8` | 20 | Precision land with landing target | +| NAVIGATION_STATE_ORBIT | `uint8` | 21 | Orbit in a circle | +| NAVIGATION_STATE_AUTO_VTOL_TAKEOFF | `uint8` | 22 | Takeoff, transition, establish loiter | +| NAVIGATION_STATE_EXTERNAL1 | `uint8` | 23 | | +| NAVIGATION_STATE_EXTERNAL2 | `uint8` | 24 | | +| NAVIGATION_STATE_EXTERNAL3 | `uint8` | 25 | | +| NAVIGATION_STATE_EXTERNAL4 | `uint8` | 26 | | +| NAVIGATION_STATE_EXTERNAL5 | `uint8` | 27 | | +| NAVIGATION_STATE_EXTERNAL6 | `uint8` | 28 | | +| NAVIGATION_STATE_EXTERNAL7 | `uint8` | 29 | | +| NAVIGATION_STATE_EXTERNAL8 | `uint8` | 30 | | +| NAVIGATION_STATE_MAX | `uint8` | 31 | | +| HIL_STATE_OFF | `uint8` | 0 | | +| HIL_STATE_ON | `uint8` | 1 | | +| VEHICLE_TYPE_UNSPECIFIED | `uint8` | 0 | | +| VEHICLE_TYPE_ROTARY_WING | `uint8` | 1 | | +| VEHICLE_TYPE_FIXED_WING | `uint8` | 2 | | +| VEHICLE_TYPE_ROVER | `uint8` | 3 | | +| FAILSAFE_DEFER_STATE_DISABLED | `uint8` | 0 | | +| FAILSAFE_DEFER_STATE_ENABLED | `uint8` | 1 | | +| FAILSAFE_DEFER_STATE_WOULD_FAILSAFE | `uint8` | 2 | Failsafes deferred, but would trigger a failsafe | + +## Source Message + +[Source file (GitHub)](https://github.com/PX4/PX4-Autopilot/blob/main/msg/px4_msgs_old/msg/VehicleStatusV3.msg) + +:::details +Click here to see original file + +```c +# Encodes the system state of the vehicle published by commander + +uint32 MESSAGE_VERSION = 3 + +uint64 timestamp # time since system start (microseconds) + +uint64 armed_time # Arming timestamp (microseconds) +uint64 takeoff_time # Takeoff timestamp (microseconds) + +uint8 arming_state +uint8 ARMING_STATE_DISARMED = 1 +uint8 ARMING_STATE_ARMED = 2 + +uint8 latest_arming_reason +uint8 latest_disarming_reason +uint8 ARM_DISARM_REASON_STICK_GESTURE = 1 +uint8 ARM_DISARM_REASON_RC_SWITCH = 2 +uint8 ARM_DISARM_REASON_COMMAND_INTERNAL = 3 +uint8 ARM_DISARM_REASON_COMMAND_EXTERNAL = 4 +uint8 ARM_DISARM_REASON_MISSION_START = 5 +uint8 ARM_DISARM_REASON_LANDING = 6 +uint8 ARM_DISARM_REASON_PREFLIGHT_INACTION = 7 +uint8 ARM_DISARM_REASON_KILL_SWITCH = 8 +uint8 ARM_DISARM_REASON_RC_BUTTON = 13 +uint8 ARM_DISARM_REASON_FAILSAFE = 14 + +uint64 nav_state_timestamp # time when current nav_state activated + +uint8 nav_state_user_intention # Mode that the user selected (might be different from nav_state in a failsafe situation) + +uint8 nav_state # Currently active mode +uint8 NAVIGATION_STATE_MANUAL = 0 # Manual mode +uint8 NAVIGATION_STATE_ALTCTL = 1 # Altitude control mode +uint8 NAVIGATION_STATE_POSCTL = 2 # Position control mode +uint8 NAVIGATION_STATE_AUTO_MISSION = 3 # Auto mission mode +uint8 NAVIGATION_STATE_AUTO_LOITER = 4 # Auto loiter mode +uint8 NAVIGATION_STATE_AUTO_RTL = 5 # Auto return to launch mode +uint8 NAVIGATION_STATE_POSITION_SLOW = 6 +uint8 NAVIGATION_STATE_FREE5 = 7 +uint8 NAVIGATION_STATE_ALTITUDE_CRUISE = 8 # Altitude with Cruise mode +uint8 NAVIGATION_STATE_FREE3 = 9 +uint8 NAVIGATION_STATE_ACRO = 10 # Acro mode +uint8 NAVIGATION_STATE_FREE2 = 11 +uint8 NAVIGATION_STATE_DESCEND = 12 # Descend mode (no position control) +uint8 NAVIGATION_STATE_TERMINATION = 13 # Termination mode +uint8 NAVIGATION_STATE_OFFBOARD = 14 +uint8 NAVIGATION_STATE_STAB = 15 # Stabilized mode +uint8 NAVIGATION_STATE_FREE1 = 16 +uint8 NAVIGATION_STATE_AUTO_TAKEOFF = 17 # Takeoff +uint8 NAVIGATION_STATE_AUTO_LAND = 18 # Land +uint8 NAVIGATION_STATE_AUTO_FOLLOW_TARGET = 19 # Auto Follow +uint8 NAVIGATION_STATE_AUTO_PRECLAND = 20 # Precision land with landing target +uint8 NAVIGATION_STATE_ORBIT = 21 # Orbit in a circle +uint8 NAVIGATION_STATE_AUTO_VTOL_TAKEOFF = 22 # Takeoff, transition, establish loiter +uint8 NAVIGATION_STATE_EXTERNAL1 = 23 +uint8 NAVIGATION_STATE_EXTERNAL2 = 24 +uint8 NAVIGATION_STATE_EXTERNAL3 = 25 +uint8 NAVIGATION_STATE_EXTERNAL4 = 26 +uint8 NAVIGATION_STATE_EXTERNAL5 = 27 +uint8 NAVIGATION_STATE_EXTERNAL6 = 28 +uint8 NAVIGATION_STATE_EXTERNAL7 = 29 +uint8 NAVIGATION_STATE_EXTERNAL8 = 30 +uint8 NAVIGATION_STATE_MAX = 31 + +uint8 executor_in_charge # Current mode executor in charge (0=Autopilot) +uint8 nav_state_display # User-visible nav state sent via MAVLink (executor state if active, otherwise nav_state) + +uint32 valid_nav_states_mask # Bitmask for all valid nav_state values +uint32 can_set_nav_states_mask # Bitmask for all modes that a user can select + +uint8 hil_state +uint8 HIL_STATE_OFF = 0 +uint8 HIL_STATE_ON = 1 + +# Current vehicle locomotion method. A vehicle can have different methods (e.g. VTOL transitions from RW to FW method) +uint8 vehicle_type +uint8 VEHICLE_TYPE_UNSPECIFIED = 0 +uint8 VEHICLE_TYPE_ROTARY_WING = 1 +uint8 VEHICLE_TYPE_FIXED_WING = 2 +uint8 VEHICLE_TYPE_ROVER = 3 + +uint8 FAILSAFE_DEFER_STATE_DISABLED = 0 +uint8 FAILSAFE_DEFER_STATE_ENABLED = 1 +uint8 FAILSAFE_DEFER_STATE_WOULD_FAILSAFE = 2 # Failsafes deferred, but would trigger a failsafe + +bool failsafe # true if system is in failsafe state (e.g.:RTL, Hover, Terminate, ...) +bool failsafe_and_user_took_over # true if system is in failsafe state but the user took over control +uint8 failsafe_defer_state # one of FAILSAFE_DEFER_STATE_* + +# Link loss +bool gcs_connection_lost # datalink to GCS lost +uint8 gcs_connection_lost_counter # counts unique GCS connection lost events +bool high_latency_data_link_lost # Set to true if the high latency data link (eg. RockBlock Iridium 9603 telemetry module) is lost + +# VTOL flags +bool is_vtol # True if the system is VTOL capable +bool is_vtol_tailsitter # True if the system performs a 90° pitch down rotation during transition from MC to FW +bool in_transition_mode # True if VTOL is doing a transition +bool in_transition_to_fw # True if VTOL is doing a transition from MC to FW + +# MAVLink identification +uint8 system_type # system type, contains mavlink MAV_TYPE +uint8 system_id # system id, contains MAVLink's system ID field +uint8 component_id # subsystem / component id, contains MAVLink's component ID field + +bool safety_button_available # Set to true if a safety button is connected +bool safety_off # Set to true if safety is off + +bool power_input_valid # set if input power is valid +bool usb_connected # set to true (never cleared) once telemetry received from usb link + +bool open_drone_id_system_present +bool open_drone_id_system_healthy + +bool parachute_system_present +bool parachute_system_healthy + +bool traffic_avoidance_system_present + +bool rc_calibration_in_progress +bool calibration_enabled + +bool pre_flight_checks_pass # true if all checks necessary to arm pass +``` + +::: diff --git a/docs/ko/msg_docs/VtolVehicleStatus.md b/docs/ko/msg_docs/VtolVehicleStatus.md index b725e0ccdd..bc09d11ed2 100644 --- a/docs/ko/msg_docs/VtolVehicleStatus.md +++ b/docs/ko/msg_docs/VtolVehicleStatus.md @@ -6,7 +6,7 @@ pageClass: is-wide-page VEHICLE_VTOL_STATE, should match 1:1 MAVLinks's MAV_VTOL_STATE. -**TOPICS:** vtol_vehiclestatus +**TOPICS:** vtol_vehicle_status ## Fields @@ -18,14 +18,14 @@ VEHICLE_VTOL_STATE, should match 1:1 MAVLinks's MAV_VTOL_STATE. ## Constants -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------- | ----- | -- | -| MESSAGE_VERSION | `uint32` | 0 | | -| VEHICLE_VTOL_STATE_UNDEFINED | `uint8` | 0 | | -| VEHICLE_VTOL_STATE_TRANSITION_TO_FW | `uint8` | 1 | | -| VEHICLE_VTOL_STATE_TRANSITION_TO_MC | `uint8` | 2 | | -| VEHICLE_VTOL_STATE_MC | `uint8` | 3 | | -| VEHICLE_VTOL_STATE_FW | `uint8` | 4 | | +| 명칭 | 형식 | Value | 설명 | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ----- | -- | +| MESSAGE_VERSION | `uint32` | 0 | | +| VEHICLE_VTOL_STATE_UNDEFINED | `uint8` | 0 | | +| VEHICLE_VTOL_STATE_TRANSITION_TO_FW | `uint8` | 1 | | +| VEHICLE_VTOL_STATE_TRANSITION_TO_MC | `uint8` | 2 | | +| VEHICLE_VTOL_STATE_MC | `uint8` | 3 | | +| VEHICLE_VTOL_STATE_FW | `uint8` | 4 | | ## Source Message diff --git a/docs/ko/msg_docs/Vtx.md b/docs/ko/msg_docs/Vtx.md index 2ab56882dd..d9511574b7 100644 --- a/docs/ko/msg_docs/Vtx.md +++ b/docs/ko/msg_docs/Vtx.md @@ -24,20 +24,20 @@ pageClass: is-wide-page ## Constants -| 명칭 | 형식 | Value | 설명 | -| ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | ----- | ----------------------------------------- | -| BAND_NAME_LENGTH | `uint8` | 12 | | -| POWER_LABEL_LENGTH | `uint8` | 4 | | -| PROTOCOL_NONE | `uint8` | 0 | No protocol is detected, usually an error | -| PROTOCOL_SMART_AUDIO_V1 | `uint8` | 10 | | -| PROTOCOL_SMART_AUDIO_V2 | `uint8` | 20 | | -| PROTOCOL_SMART_AUDIO_V2_1 | `uint8` | 21 | | -| PROTOCOL_TRAMP | `uint8` | 100 | | -| DEVICE_UNKNOWN | `uint8` | 0 | | -| DEVICE_PEAK_THOR_T67 | `uint8` | 20 | | -| DEVICE_RUSH_MAX_SOLO | `uint8` | 40 | | -| MODE_NORMAL | `uint8` | 0 | | -| MODE_PIT | `uint8` | 1 | | +| 명칭 | 형식 | Value | 설명 | +| ----------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | ----- | ----------------------------------------- | +| BAND_NAME_LENGTH | `uint8` | 12 | | +| POWER_LABEL_LENGTH | `uint8` | 4 | | +| PROTOCOL_NONE | `uint8` | 0 | No protocol is detected, usually an error | +| PROTOCOL_SMART_AUDIO_V1 | `uint8` | 10 | | +| PROTOCOL_SMART_AUDIO_V2 | `uint8` | 20 | | +| PROTOCOL_SMART_AUDIO_V2_1 | `uint8` | 21 | | +| PROTOCOL_TRAMP | `uint8` | 100 | | +| DEVICE_UNKNOWN | `uint8` | 0 | | +| DEVICE_PEAK_THOR_T67 | `uint8` | 20 | | +| DEVICE_RUSH_MAX_SOLO | `uint8` | 40 | | +| MODE_NORMAL | `uint8` | 0 | | +| MODE_PIT | `uint8` | 1 | | ## Source Message diff --git a/docs/ko/msg_docs/Wind.md b/docs/ko/msg_docs/Wind.md index 30f6c498e4..1dccdcddc5 100644 --- a/docs/ko/msg_docs/Wind.md +++ b/docs/ko/msg_docs/Wind.md @@ -28,9 +28,9 @@ Published by the navigation filter (EKF2) for use by other flight modules and li ## Constants -| 명칭 | 형식 | Value | 설명 | -| -------------------------------------------------------------------- | -------- | ----- | -- | -| MESSAGE_VERSION | `uint32` | 0 | | +| 명칭 | 형식 | Value | 설명 | +| ------------------------------------------------------------------ | -------- | ----- | -- | +| MESSAGE_VERSION | `uint32` | 0 | | ## Source Message diff --git a/docs/ko/msg_docs/YawEstimatorStatus.md b/docs/ko/msg_docs/YawEstimatorStatus.md index 3bd44fc563..392f045576 100644 --- a/docs/ko/msg_docs/YawEstimatorStatus.md +++ b/docs/ko/msg_docs/YawEstimatorStatus.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # YawEstimatorStatus (UORB message) -**TOPICS:** yaw_estimatorstatus +**TOPICS:** yaw_estimator_status ## Fields diff --git a/docs/ko/msg_docs/index.md b/docs/ko/msg_docs/index.md index 603270ff7a..ab689a7e25 100644 --- a/docs/ko/msg_docs/index.md +++ b/docs/ko/msg_docs/index.md @@ -18,15 +18,16 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m - [AirspeedValidated](AirspeedValidated.md) — Validated airspeed. - [ArmingCheckReply](ArmingCheckReply.md) — Arming check reply. - [ArmingCheckRequest](ArmingCheckRequest.md) — Arming check request. +- [AuxGlobalPosition](AuxGlobalPosition.md) — Auxiliary global position. - [BatteryStatus](BatteryStatus.md) — Battery status. - [ConfigOverrides](ConfigOverrides.md) — Configurable overrides by (external) modes or mode executors. - [Event](Event.md) — Events interface. -- [FixedWingLateralSetpoint](FixedWingLateralSetpoint.md) — Fixed Wing Lateral Setpoint message. Used by the fw_lateral_longitudinal_control module. At least one of course, airspeed_direction, or lateral_acceleration must be finite. -- [FixedWingLongitudinalSetpoint](FixedWingLongitudinalSetpoint.md) — Fixed Wing Longitudinal Setpoint message. Used by the fw_lateral_longitudinal_control module. If pitch_direct and throttle_direct are not both finite, then the controller relies on altitude/height_rate and equivalent_airspeed to control vertical motion. If both altitude and height_rate are NAN, the controller maintains the current altitude. -- [GotoSetpoint](GotoSetpoint.md) — Position and (optional) heading setpoints with corresponding speed constraints. Setpoints are intended as inputs to position and heading smoothers, respectively. Setpoints do not need to be kinematically consistent. Optional heading setpoints may be specified as controlled by the respective flag. Unset optional setpoints are not controlled. Unset optional constraints default to vehicle specifications. +- [FixedWingLateralSetpoint](FixedWingLateralSetpoint.md) — Fixed Wing Lateral Setpoint message. +- [FixedWingLongitudinalSetpoint](FixedWingLongitudinalSetpoint.md) — Fixed Wing Longitudinal Setpoint message. +- [GotoSetpoint](GotoSetpoint.md) — Position and (optional) heading setpoints with corresponding speed constraints. - [HomePosition](HomePosition.md) — GPS home position in WGS84 coordinates. -- [LateralControlConfiguration](LateralControlConfiguration.md) — Fixed Wing Lateral Control Configuration message. Used by the fw_lateral_longitudinal_control module to constrain FixedWingLateralSetpoint messages. -- [LongitudinalControlConfiguration](LongitudinalControlConfiguration.md) — Fixed Wing Longitudinal Control Configuration message. Used by the fw_lateral_longitudinal_control module and TECS to constrain FixedWingLongitudinalSetpoint messages. and configure the resultant setpoints. +- [LateralControlConfiguration](LateralControlConfiguration.md) — Fixed Wing Lateral Control Configuration message. +- [LongitudinalControlConfiguration](LongitudinalControlConfiguration.md) — Fixed Wing Longitudinal Control Configuration message. - [ManualControlSetpoint](ManualControlSetpoint.md) - [ModeCompleted](ModeCompleted.md) — Mode completion result, published by an active mode. The possible values of nav_state are defined in the VehicleStatus msg. Note that this is not always published (e.g. when a user switches modes or on. failsafe activation). - [RaptorInput](RaptorInput.md) — Raptor Input. @@ -39,7 +40,7 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m - [VehicleAttitude](VehicleAttitude.md) — This is similar to the mavlink message ATTITUDE_QUATERNION, but for onboard use. The quaternion uses the Hamilton convention, and the order is q(w, x, y, z). - [VehicleAttitudeSetpoint](VehicleAttitudeSetpoint.md) - [VehicleCommand](VehicleCommand.md) — Vehicle Command uORB message. Used for commanding a mission / action / etc. Follows the MAVLink COMMAND_INT / COMMAND_LONG definition. -- [VehicleCommandAck](VehicleCommandAck.md) — Vehicle Command Ackonwledgement uORB message. Used for acknowledging the vehicle command being received. Follows the MAVLink COMMAND_ACK message definition. +- [VehicleCommandAck](VehicleCommandAck.md) — Vehicle Command Acknowledgement uORB message. - [VehicleControlMode](VehicleControlMode.md) - [VehicleGlobalPosition](VehicleGlobalPosition.md) — Fused global position in WGS84. This struct contains global position estimation. It is not the raw GPS. measurement (@see vehicle_gps_position). This topic is usually published by the position. estimator, which will take more sources of information into account than just GPS,. e.g. control inputs of the vehicle in a Kalman-filter implementation. - [VehicleLandDetected](VehicleLandDetected.md) @@ -84,6 +85,8 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m - [DistanceSensorModeChangeRequest](DistanceSensorModeChangeRequest.md) - [DronecanNodeStatus](DronecanNodeStatus.md) - [Ekf2Timestamps](Ekf2Timestamps.md) — this message contains the (relative) timestamps of the sensor inputs used by EKF2. It can be used for reproducible replay. +- [EscEepromRead](EscEepromRead.md) +- [EscEepromWrite](EscEepromWrite.md) - [EscReport](EscReport.md) - [EscStatus](EscStatus.md) - [EstimatorAidSource1d](EstimatorAidSource1d.md) @@ -92,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) @@ -189,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) @@ -266,6 +271,12 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m - [HomePositionV0](HomePositionV0.md) — GPS home position in WGS84 coordinates. - [RegisterExtComponentReplyV0](RegisterExtComponentReplyV0.md) - [RegisterExtComponentRequestV0](RegisterExtComponentRequestV0.md) — Request to register an external component. +- [RegisterExtComponentRequestV1](RegisterExtComponentRequestV1.md) — Request to register an external component. - [VehicleAttitudeSetpointV0](VehicleAttitudeSetpointV0.md) +- [VehicleCommandAckV0](VehicleCommandAckV0.md) — Vehicle Command Ackonwledgement uORB message. Used for acknowledging the vehicle command being received. Follows the MAVLink COMMAND_ACK message definition. +- [VehicleGlobalPositionV0](VehicleGlobalPositionV0.md) — Fused global position in WGS84. This struct contains global position estimation. It is not the raw GPS. measurement (@see vehicle_gps_position). This topic is usually published by the position. estimator, which will take more sources of information into account than just GPS,. e.g. control inputs of the vehicle in a Kalman-filter implementation. - [VehicleLocalPositionV0](VehicleLocalPositionV0.md) — Fused local position in NED. The coordinate system origin is the vehicle position at the time when the EKF2-module was started. - [VehicleStatusV0](VehicleStatusV0.md) — Encodes the system state of the vehicle published by commander. +- [VehicleStatusV1](VehicleStatusV1.md) — Encodes the system state of the vehicle published by commander. +- [VehicleStatusV2](VehicleStatusV2.md) — Encodes the system state of the vehicle published by commander. +- [VehicleStatusV3](VehicleStatusV3.md) — Encodes the system state of the vehicle published by commander. diff --git a/docs/ko/neural_networks/mc_neural_network_control.md b/docs/ko/neural_networks/mc_neural_network_control.md index ba696594a3..e7ad40119e 100644 --- a/docs/ko/neural_networks/mc_neural_network_control.md +++ b/docs/ko/neural_networks/mc_neural_network_control.md @@ -17,7 +17,7 @@ Note that after training the network you will need to update and rebuild PX4. TLFM is a mature inference library intended for use on embedded devices. It has support for several architectures, so there is a high likelihood that you can build it for the board you want to use. -If not, there are other possible NN frameworks, such as [Eigen](https://eigen.tuxfamily.org/index.php?title=Main_Page) and [Executorch](https://pytorch.org/executorch-overview). +If not, there are other possible NN frameworks, such as [Eigen](https://eigen.tuxfamily.org/index.php?title=Main_Page) and [Executorch](https://docs.pytorch.org/executorch/stable/intro-overview.html). This document explains how you can include the module in your PX4 build, and provides a broad overview of how it works. The other documents in the section provide more information about the integration, allowing you to replace the NN with a version trained on different data, or even to replace the TLFM library altogether. diff --git a/docs/ko/neural_networks/nn_module_utilities.md b/docs/ko/neural_networks/nn_module_utilities.md index 5b21cb6817..d559d46d07 100644 --- a/docs/ko/neural_networks/nn_module_utilities.md +++ b/docs/ko/neural_networks/nn_module_utilities.md @@ -41,7 +41,7 @@ This only works for some flight controllers, so you might have to use an RC cont This specifies what you want to create, you can read more about this in the [Control Interface](../ros2/px4_ros2_control_interface.md). In this case we register an arming check and a mode. 2. Wait for a [RegisterExtComponentReply](../msg_docs/RegisterExtComponentReply.md). - This will give feedback on wether the mode registration was successful, and what the mode and arming check id is for the new mode. + This will give feedback on whether the mode registration was successful, and what the mode and arming check id is for the new mode. 3. [Optional] With the mode id, publish a [VehicleControlMode](../msg_docs/VehicleControlMode.md) message on the `config_control_setpoints` topic. Here you can configure what other modules run in parallel. The example controller replaces everything, so it turns off allocation. @@ -71,7 +71,7 @@ For these messages to be saved in your logs you need to include `debug` in the [ The module has two includes for measuring the inference times. The first one is a driver that works on the actual flight controller units, but a second one, `chrono`, is loaded for SITL testing. -Which timing library is included and used is based on wether PX4 is built with NUTTX or not. +Which timing library is included and used is based on whether PX4 is built with NUTTX or not. ## Changing the setpoint diff --git a/docs/ko/neural_networks/raptor.md b/docs/ko/neural_networks/raptor.md index 4a7685e1c1..c30ceb1b38 100644 --- a/docs/ko/neural_networks/raptor.md +++ b/docs/ko/neural_networks/raptor.md @@ -1,6 +1,6 @@ # RAPTOR: A Neural Network Module for Adaptive Quadrotor Control - + :::warning This is an experimental module. diff --git a/docs/ko/payloads/generic_actuator_control.md b/docs/ko/payloads/generic_actuator_control.md index a2132bd7bd..b53cce4509 100644 --- a/docs/ko/payloads/generic_actuator_control.md +++ b/docs/ko/payloads/generic_actuator_control.md @@ -68,7 +68,7 @@ To use a generic actuator in a mission: ## MAVSDK (Example script) -The following [MAVSDK](https://mavsdk.mavlink.io/main/en/index.html) [example code](https://github.com/mavlink/MAVSDK/blob/main/examples/set_actuator/set_actuator.cpp) shows how to trigger payload release using the MAVSDK Action plugin's [`set_actuator()`](https://mavsdk.mavlink.io/main/en/cpp/api_reference/classmavsdk_1_1_action.html#classmavsdk_1_1_action_1ad30beac27f05c62dcf6a3d0928b86e4c) method. +The following [MAVSDK](https://mavsdk.mavlink.io/main/en/index.html) [example code](https://github.com/mavlink/MAVSDK/blob/main/cpp/examples/set_actuator/set_actuator.cpp) shows how to trigger payload release using the MAVSDK Action plugin's [`set_actuator()`](https://mavsdk.mavlink.io/main/en/cpp/api_reference/classmavsdk_1_1_action.html#classmavsdk_1_1_action_1ad30beac27f05c62dcf6a3d0928b86e4c) method. The `set_actuator()` index values map to the MAVLink payload outputs defined for your airframe. diff --git a/docs/ko/peripherals/adsb_flarm.md b/docs/ko/peripherals/adsb_flarm.md index 539a220abd..f4e9bcc79a 100644 --- a/docs/ko/peripherals/adsb_flarm.md +++ b/docs/ko/peripherals/adsb_flarm.md @@ -1,6 +1,6 @@ # ADS-B/FLARM/UTM Receivers: Air Traffic Avoidance -PX4 supports simple air traffic avoidance in [missions](../flying/missions.md) using [ADS-B](https://en.wikipedia.org/wiki/Automatic_dependent_surveillance_%E2%80%93_broadcast), [FLARM](https://en.wikipedia.org/wiki/FLARM), or [UTM](https://www.faa.gov/uas/research_development/traffic_management) transponders that use the standard MAVLink interfaces. +PX4 supports simple air traffic avoidance in [missions](../flying/missions.md) using [ADS-B](https://en.wikipedia.org/wiki/Automatic_dependent_surveillance_%E2%80%93_broadcast), [FLARM](https://en.wikipedia.org/wiki/FLARM), or [UTM](https://www.faa.gov/uas/advanced_operations/traffic_management) transponders that use the standard MAVLink interfaces. If a potential collision is detected, PX4 can _warn_, immediately [land](../flight_modes_mc/land.md), or [return](../flight_modes_mc/return.md) (depending on the value of [NAV_TRAFF_AVOID](#NAV_TRAFF_AVOID)). @@ -53,7 +53,7 @@ The TX and RX on the flight controller must be connected to the RX and TX on the ### Port Configuration -The recievers are configured in the same way as any other [MAVLink Peripheral](../peripherals/mavlink_peripherals.md). +The receivers are configured in the same way as any other [MAVLink Peripheral](../peripherals/mavlink_peripherals.md). The only _specific_ setup is that the port baud rate must be set to 57600 and the a low-bandwidth profile (`MAV_X_MODE`). Assuming you have connected the device to the TELEM2 port, [set the parameters](../advanced_config/parameters.md) as shown: @@ -74,10 +74,27 @@ Configure the action when there is a potential collision using the parameter bel | 매개변수 | 설명 | | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | [NAV_TRAFF_AVOID](../advanced_config/parameter_reference.md#NAV_TRAFF_AVOID) | Enable traffic avoidance mode specify avoidance response. 0: Disable, 1: Warn only, 2: Return mode, 3: Land mode. | -| [NAV_TRAFF_A_HOR](../advanced_config/parameter_reference.md#NAV_TRAFF_A_HOR) | Horizonal radius of cylinder around the vehicle that defines its airspace (i.e. the airspace in the ground plane). | +| [NAV_TRAFF_A_HOR](../advanced_config/parameter_reference.md#NAV_TRAFF_A_HOR) | Horizontal radius of cylinder around the vehicle that defines its airspace (i.e. the airspace in the ground plane). | | [NAV_TRAFF_A_VER](../advanced_config/parameter_reference.md#NAV_TRAFF_A_VER) | Vertical height above and below vehicle of the cylinder that defines its airspace (also see [NAV_TRAFF_A_HOR](#NAV_TRAFF_A_HOR)). | | [NAV_TRAFF_COLL_T](../advanced_config/parameter_reference.md#NAV_TRAFF_COLL_T) | Collision time threshold. Avoidance will trigger if the estimated time until collision drops below this value (the estimated time is based on relative speed of traffic and UAV). | +### Arming Check + +PX4 can be configured to check for the presence of a traffic avoidance system (ADSB or FLARM transponder) before arming. +This ensures that a traffic avoidance system is connected and functioning before flight. + +The check is configured using the [COM_ARM_TRAFF](../advanced_config/parameter_reference.md#COM_ARM_TRAFF) parameter: + +| Value | 설명 | +| ----- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 0 | Disabled (default). No check is performed. | +| 1 | Warning only. A warning is issued if no traffic avoidance system is detected, but arming is allowed. | +| 2 | Enforce for all modes. Arming is denied if no traffic avoidance system is detected, regardless of flight mode. | +| 3 | Enforce for mission modes only. Arming is denied if no traffic avoidance system is detected and a mission mode is planned. | + +When a traffic avoidance system is detected, the system tracks its presence with a 3-second timeout. +If the system is lost or regained, corresponding events are logged ("Traffic avoidance system lost" / "Traffic avoidance system regained"). + ## 구현 ### ADSB/FLARM @@ -131,7 +148,7 @@ These simulate ADS-B traffic where there may be a conflict, where there won't be :::details Information about the test methods -The relevent methods are defined in [AdsbConflict.cpp](https://github.com/PX4/PX4-Autopilot/blob/main/src/lib/adsb/AdsbConflict.cpp#L342C1-L342C1). +The relevant methods are defined in [AdsbConflict.cpp](https://github.com/PX4/PX4-Autopilot/blob/main/src/lib/adsb/AdsbConflict.cpp#L342C1-L342C1). #### `run_fake_traffic()` method diff --git a/docs/ko/peripherals/dshot.md b/docs/ko/peripherals/dshot.md index 020bd3a994..c3cb9666f0 100644 --- a/docs/ko/peripherals/dshot.md +++ b/docs/ko/peripherals/dshot.md @@ -13,7 +13,7 @@ DShot is an alternative ESC protocol that has several advantages over [PWM](../p ## Supported ESC -[ESCs & Motors > Supported ESCs](../peripherals/esc_motors#supported-esc) has a list of supported ESC (check "Protocols" column for DShot ESC). +[ESCs & Motors > Supported ESCs](../peripherals/esc_motors.md#supported-esc) has a list of supported ESC (check "Protocols" column for DShot ESC). ## Wiring/Connections {#wiring} @@ -47,74 +47,12 @@ You should set the parameter to the highest speed supported by your ESC (accordi ESC가 초기화되고 모터가 올바른 방향으로 회전하여야 합니다. - If the motors do not spin in the correct direction (for the [selected airframe](../airframes/airframe_reference.md)) you can reverse them in the UI using the **Set Spin Direction** option (this option appears after you select DShot and assign motors). - You can also reverse motors by sending an [ESC Command](#commands). ## ESC Commands {#commands} Commands can be sent to the ESC via the [MAVLink shell](../debug/mavlink_shell.md). See [here](../modules/modules_driver.md#dshot) for a full reference of the supported commands. -가장 중요한 것은 다음과 같습니다. - -- Make a motor connected to to FMU output pin 1 beep (helps with identifying motors) - - ```sh - dshot beep1 -m 1 - ``` - -- Retrieve ESC information (requires telemetry, see below): - - ```sh - nsh> dshot esc_info -m 2 - INFO [dshot] ESC Type: #TEKKO32_4in1# - INFO [dshot] MCU Serial Number: xxxxxx-xxxxxx-xxxxxx-xxxxxx - INFO [dshot] Firmware version: 32.60 - INFO [dshot] Rotation Direction: normal - INFO [dshot] 3D Mode: off - INFO [dshot] Low voltage Limit: off - INFO [dshot] Current Limit: off - INFO [dshot] LED 0: unsupported - INFO [dshot] LED 1: unsupported - INFO [dshot] LED 2: unsupported - INFO [dshot] LED 3: unsupported - ``` - -- Permanently set the spin direction of a motor connected to FMU output pin 1 (while motors are _not_ spinning): - - - Set spin direction to `reversed`: - - ```sh - dshot reverse -m 1 - dshot save -m 1 - ``` - - Retrieving ESC information will then show: - - ```sh - Rotation Direction: reversed - ``` - - - Set spin direction to `normal`: - - ```sh - dshot normal -m 1 - dshot save -m 1 - ``` - - Retrieving ESC information will then show: - - ```sh - Rotation Direction: normal - ``` - - :::note - - - The commands will have no effect if the motors are spinning, or if the ESC is already set to the corresponding direction. - - The ESC will revert to its last saved direction (normal or reversed) on reboot if `save` is not called after changing the direction. - - -::: - ## ESC Telemetry Some ESCs are capable of sending telemetry back to the flight controller through a UART RX port. @@ -133,61 +71,76 @@ The provided telemetry includes: 1. 모든 ESC의 모든 원격 측정 와이어를 함께 연결한 다음, 사용하지 않는 비행 콘트롤러 직렬 포트의 RX핀 중 하나에 연결합니다. 2. Enable telemetry on that serial port using [DSHOT_TEL_CFG](../advanced_config/parameter_reference.md#DSHOT_TEL_CFG). -재부팅 후 다음을 사용하여 텔레메트리 작동 여부를 확인할 수 있습니다 (배터리가 연결되어 있는 지 확인). - -```sh -dshot esc_info -m 1 -``` - :::tip -You may have to configure [MOT_POLE_COUNT](../advanced_config/parameter_reference.md#MOT_POLE_COUNT) to get the correct RPM values. +You may have to configure the per-motor pole count parameters ([`DSHOT_MOT_POL1`–`DSHOT_MOT_POL12`](../advanced_config/parameter_reference.md#DSHOT_MOT_POL1)) to get correct RPM values. +The default value for these is 14 poles, which is typical for 5-inch prop motors. ::: :::tip -Not all DSHOT-capable ESCs support `[esc_info]`(e.g. APD 80F3x), even when telemetry is supported and enabled. -결과 오류는 다음과 같습니다. - -```sh -ERROR [dshot] No data received. If telemetry is setup correctly, try again. -``` - -세부 사항은 제조업체 문서를 확인하십시오. +[Extended DShot Telemetry (EDT)](#extended-dshot-telemetry-edt) can provide temperature, voltage, and current through the BDShot signal — no serial telemetry wire needed. ::: ## Bidirectional DShot (Telemetry) -Bidirectional DShot is a protocol that can provide telemetry including: high rate ESC RPM data, voltage, current, and temperature with a single wire. +Bidirectional DShot (BDShot) enables the ESC to send eRPM telemetry back to the flight controller on the same signal wire used for throttle commands — no additional telemetry wire is needed for RPM data. +High-rate eRPM data significantly improves the performance of [Dynamic Notch Filters](../config_mc/filter_tuning.md#dynamic-notch-filters) and enables more precise vehicle tuning. -The PX4 implementation currently enables only ESC RPM (eRPM) data collection from each ESC at high frequencies. -This telemetry significantly improves the performance of [Dynamic Notch Filters](../config_mc/filter_tuning.md#dynamic-notch-filters) and enables more precise vehicle tuning. +With [Extended DShot Telemetry (EDT)](#extended-dshot-telemetry-edt) enabled, BDShot can also provide temperature, voltage, and current data. + +### Hardware Support + +BDShot requires a flight controller with DMA-capable timers. +Any FMU output on a supported timer can be used for BDShot — multiple timers are supported through sequential burst/capture. + +Supported processors: + +- **STM32H7**: All FMU outputs on DMA-capable timers +- **i.MXRT** (V6X-RT & Tropic): All FMU outputs :::info -The [ESC Telemetry](#esc-telemetry) described above is currently still necessary if you want voltage, current, or temperature information. -It's setup and use is independent of bidirectional DShot. -::: - -### 하드웨어 설정 - The ESC must be connected to FMU outputs only. -These will be labeled `MAIN` on flight controllers that only have one PWM bus, and `AUX` on controllers that have both `MAIN` and `AUX` ports (i.e. FCs that have an IO board). - -:::warning -**Limited hardware support** -This feature is only supported on flight controllers with the following processors: - -- STM32H7: First four FMU outputs - - Must be connected to the first 4 FMU outputs, and these outputs must also be mapped to the same timer. - - [KakuteH7](../flight_controller/kakuteh7v2.md) is not supported because the outputs are not mapped to the same timer. -- [i.MXRT](../flight_controller/nxp_mr_vmu_rt1176.md) (V6X-RT & Tropic): 8 FMU outputs. - -No other boards are supported. +These are labeled `MAIN` on controllers with a single PWM bus, and `AUX` on controllers with both `MAIN` and `AUX` ports (i.e. those with an IO board). ::: -### Configuration {#bidirectional-dshot-configuration} +### PX4 Configuration {#bidirectional-dshot-configuration} -To enable bidirectional DShot, set the [DSHOT_BIDIR_EN](../advanced_config/parameter_reference.md#DSHOT_BIDIR_EN) parameter. +BDShot is enabled **per-timer** in the [Actuator Configuration](../config/actuators.md) UI. +Select **BDShot150**, **BDShot300**, or **BDShot600** as the output protocol instead of the corresponding DShot speed. +There is no separate enable parameter — choosing a BDShot protocol activates bidirectional telemetry on that timer's outputs. -The system calculates actual motor RPM from the received eRPM data using the [MOT_POLE_COUNT](../advanced_config/parameter_reference.md#MOT_POLE_COUNT) parameter. -This parameter must be set correctly for accurate RPM reporting. +The system calculates actual motor RPM from eRPM data using per-motor pole count parameters: `DSHOT_MOT_POL1` through `DSHOT_MOT_POL12` (one per motor output). +The default is 14 poles, which is typical for 5-inch prop motors. +If you are using AM32 ESCs, the motor pole count must also be set in the AM32 firmware configuration (e.g. via the AM32 configurator tool) to match. + +### Extended DShot Telemetry (EDT) + +EDT extends BDShot by interleaving temperature, voltage, and current data into the eRPM telemetry frames. +This allows ESC health monitoring through the same signal wire, without requiring a separate serial telemetry connection. + +To enable EDT: + +1. Configure BDShot on the desired outputs (see above). +2. Set `DSHOT_BIDIR_EDT` to `1` and reboot. + +The ESC firmware must support EDT (e.g. [AM32](https://github.com/am32-firmware/AM32)). + +When both serial telemetry and BDShot/EDT are enabled, the driver merges data from both sources. + +## AM32 ESC Settings (EEPROM) + +PX4 can read and write AM32 ESC firmware settings (EEPROM) via a ground station, enabling remote ESC configuration without connecting directly to each ESC. + +### Requirements + +- ESCs running [AM32 firmware](https://github.com/am32-firmware/AM32) with serial telemetry connected ([DSHOT_TEL_CFG](../advanced_config/parameter_reference.md#DSHOT_TEL_CFG)) +- `DSHOT_ESC_TYPE` set to `1` (AM32) +- Ground station with ESC EEPROM support (QGroundControl feature in development) +- MAVLink development dialect enabled on the flight controller + +### How It Works + +PX4 automatically reads the full EEPROM from each ESC on boot. +The ground station can then display individual settings and allow the user to modify them. +Changes are written back to the ESC one byte at a time using the DShot programming protocol. diff --git a/docs/ko/peripherals/esc_motors.md b/docs/ko/peripherals/esc_motors.md index 3705936825..3f08eeed0c 100644 --- a/docs/ko/peripherals/esc_motors.md +++ b/docs/ko/peripherals/esc_motors.md @@ -11,7 +11,7 @@ The following list is non-exhaustive. | ESC Device | Protocols | Firmwares | 참고 | | ------------------------------ | ------------------------------------ | ------------------------ | ----------------------------------------------------- | -| [ARK 4IN1 ESC] | [Dshot], [PWM] | [AM32] | Has versions with/without connnectors | +| [ARK 4IN1 ESC] | [Dshot], [PWM] | [AM32] | Has versions with/without connectors | | [Holybro Kotleta 20] | [DroneCAN], [PWM] | [PX4 Sapog ESC Firmware] | | | [Vertiq Motor & ESC modules] | [Dshot], [OneShot], Multishot, [PWM] | Vertiq firmware | Larger modules support DroneCAN, ESC and Motor in one | | [RaccoonLab CAN PWM ESC nodes] | [DroneCAN], Cyphal | | Cyphal and DroneCAN notes for PWM ESC | diff --git a/docs/ko/peripherals/frsky_telemetry.md b/docs/ko/peripherals/frsky_telemetry.md index ef5fc1acff..7d5fbd4412 100644 --- a/docs/ko/peripherals/frsky_telemetry.md +++ b/docs/ko/peripherals/frsky_telemetry.md @@ -167,7 +167,7 @@ D-Port receivers transmit the following messages (from [here](https://github.com ## FrSky 텔레메트리 수신기 -Pixhawk/PX4는 D (이전) 및 S (신규) FrSky 텔레메트리를 지원합니다. 아래 표는 D/S.PORT 텔레메트리를 지원하는 FrSky 수신기들입니다 (이론상 모두 작동함). +Pixhawk/PX4는 D (이전) 및 S (신규) FrSky 텔레메트리를 지원합니다. The table below lists all FrSky receivers that support telemetry via a D/S.PORT (in theory all of these should work). :::tip Note that the X series receivers listed below are recommended (e.g. XSR, X8R). R 및 G 시리즈는 테스트팀에 의해 검증되지 않았지만 작동하여야 합니다. @@ -214,8 +214,8 @@ You will need connectors that are appropriate for your autopilot (e.g. _JST-GH c Pixracer에는 S.PORT와 UART 간의 신호 변환 장치가 포함되어 있지만, 다른 보드의 경우 UART-S.PORT 어댑터가 필요합니다. 아래에서 구매 가능합니다. -- [FrSky FUL-1](https://www.frsky-rc.com/product/ful-1/): [unmannedtech.co.uk](https://www.unmannedtechshop.co.uk/frsky-transmitter-receiver-upgrade-adapter-ful-1/) -- SPC: [getfpv.com](https://www.getfpv.com/frsky-smart-port-converter-cable.html), [unmannedtechshop.co.uk](https://www.unmannedtechshop.co.uk/frsky-smart-port-converter-spc/) +- [FrSky FUL-1](https://www.frsky-rc.com/product/ful-1/): [unmannedtech.co.uk](https://www.unmannedtechshop.co.uk/products/frsky-transmitter-receiver-upgrade-adapter-ful-1) +- SPC: [getfpv.com](https://www.getfpv.com/frsky-smart-port-converter-cable.html), [unmannedtechshop.co.uk](https://www.unmannedtechshop.co.uk/products/frsky-smart-port-converter-spc) 다른 보드에서의 연결 방법은 아래에 기술되어 있습니다. diff --git a/docs/ko/peripherals/index.md b/docs/ko/peripherals/index.md index 16373b523e..ef3e627940 100644 --- a/docs/ko/peripherals/index.md +++ b/docs/ko/peripherals/index.md @@ -2,8 +2,9 @@ This section contains topics about peripheral hardware that can be connected to a flight controller (not including [cameras and other payloads](../payloads/index.md)). -The peripherals are not _required_ for flight, but may support it by providing improved safety, or allowing the vehicle to meet regulartory requirements: +The peripherals are not _required_ for flight, but may support it by providing improved safety, or allowing the vehicle to meet regulatory requirements: - [ADSB/FLARM/UTM (Traffic Avoidance)](../peripherals/adsb_flarm.md) +- [On-Screen Display (OSD)](../peripherals/osd.md) - [Parachute](../peripherals/parachute.md) - [Remote ID](../peripherals/remote_id.md) diff --git a/docs/ko/peripherals/mavlink_peripherals.md b/docs/ko/peripherals/mavlink_peripherals.md index 4ce03dc962..72a8fd61a2 100644 --- a/docs/ko/peripherals/mavlink_peripherals.md +++ b/docs/ko/peripherals/mavlink_peripherals.md @@ -1,6 +1,6 @@ # MAVLink Peripherals (GCS/OSD/Gimbal/Camera/Companion) -Ground Control Stations (GCS), On-Screen Displays (OSD), MAVLink Cameras & Gimbals, Remote IDs, Companion Computers, ADS-B receivers, and other MAVLink peripherals interact with PX4 using separate MAVLink streams, sent via different serial ports. +Ground Control Stations (GCS), [MAVLink On-Screen Displays (OSD)](../peripherals/osd.md#mavlink-osd), MAVLink [Cameras](../camera/mavlink_v2_camera.md) and [Gimbals](../advanced/gimbal_control.md), [Remote IDs](../peripherals/remote_id.md), Companion Computers, [ADS-B receivers](../peripherals/adsb_flarm.md), and other MAVLink peripherals interact with PX4 using separate MAVLink streams, sent via different serial ports. In order to configure that a particular serial port is used for MAVLink traffic with a particular peripheral, we use [Serial Port Configuration](../peripherals/serial_configuration.md), assigning one of the abstract "MAVLink instance" configuration parameters to the desired port. We then set other properties of the MAVLink channel using the parameters associated with our selected MAVLink instance, so that they match the requirements of our particular peripheral. @@ -26,38 +26,12 @@ The number in the name means nothing; you can assign any instance to any port. - [MAV_X_CONFIG](../advanced_config/parameter_reference.md#MAV_0_CONFIG) - Set the serial port (UART) for this instance "X", where X is 0, 1, 2. It can be any unused port, e.g.: `TELEM2`, `TELEM3`, `GPS2` etc. For more information see [Serial Port Configuration](../peripherals/serial_configuration.md). - -- [MAV_X_MODE](../advanced_config/parameter_reference.md#MAV_0_MODE) - Specify the telemetry mode/target (the set of messages to stream for the current instance and their rate). - 기본값은 아래와 같습니다. - - - _Normal_: Standard set of messages for a GCS. - - _Custom_ or _Magic_: Nothing (in the default PX4 implementation). - 모드는 새 모드를 개발시 테스트용으로 사용할 수 있습니다. - - _Onboard_: Standard set of messages for a companion computer. - - _OSD_: Standard set of messages for an OSD system. - - _Config_: Standard set of messages and rate configuration for a fast link (e.g. USB). - - _Minimal_: Minimal set of messages for use with a GCS connected on a high latency link. - - _External Vision_: Messages for offboard vision systems. - - _Gimbal_: Messages for a gimbal. Note this also enables [message forwarding](#MAV_X_FORWARD) - - _Onboard Low Bandwidth_: Standard set of messages for a companion computer connected on a lower speed link. - - _uAvionix_: Messages for a uAvionix ADS-B beacon. - - ::: info - If you need to find the specific set of message for each mode search for `MAVLINK_MODE_` in [/src/modules/mavlink/mavlink_main.cpp](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/mavlink_main.cpp). - -::: - - :::tip - The mode defines the _default_ messages and rates. - A connected MAVLink system can still request the streams/rates that it wants using [MAV_CMD_SET_MESSAGE_INTERVAL](https://mavlink.io/en/messages/common.html#MAV_CMD_SET_MESSAGE_INTERVAL). - -::: - +- [MAV_X_MODE](../advanced_config/parameter_reference.md#MAV_0_MODE) - Specify the [MAVLink profile](../mavlink/mavlink_profiles.md) for the instance, such as _Normal_ or _OSD_. + Profiles define a particular set of streamed messages and their rates — you should choose a profile that is appropriate for your channel and the peripheral. - [MAV_X_RATE](../advanced_config/parameter_reference.md#MAV_0_MODE) - Set the maximum _data rate_ for this instance (bytes/second). - 이는 개별 메시지의 모든 스트림에 대한 결합 비율입니다 (총 비율이이 값을 초과하면 개별 메시지에 대한 비율이 감소됨). - 기본 설정은 일반적으로 허용되지만 원격 분석 링크가 포화 상태가 되고, 너무 많은 메시지가 삭제되는 경우에는 감소할 수 있습니다. - 값이 0이면 데이터 속도가 이론적인 값의 절반으로 설정됩니다. - - [MAV_X_FORWARD](../advanced_config/parameter_reference.md#MAV_0_FORWARD) - Enable forwarding of MAVLink packets received by the current instance onto other interfaces. 예를 들어 GCS가 보조 컴퓨터에 연결된 MAVLink 지원 카메라와 통신할 수 있도록 GCS와 보조 컴퓨터간에 메시지를 전송에 사용할 수 있습니다. @@ -121,6 +95,7 @@ Links to setup instructions for specific MAVLink components: ## See Also +- [MAVLink Profiles](../mavlink/mavlink_profiles.md) - [Serial Port Configuration](../peripherals/serial_configuration.md) - [PX4 Ethernet Setup > PX4 MAVLink Serial Port Configuration](../advanced_config/ethernet_setup.md#px4-mavlink-serial-port-configuration) - [Serial Port Mapping](../hardware/serial_port_mapping.md) diff --git a/docs/ko/peripherals/osd.md b/docs/ko/peripherals/osd.md new file mode 100644 index 0000000000..d0dd696085 --- /dev/null +++ b/docs/ko/peripherals/osd.md @@ -0,0 +1,103 @@ +# On-Screen Display (OSD) + +An **On-Screen Display (OSD)** overlays flight telemetry — battery, altitude, GPS, RSSI, attitude, etc. — onto a pilot's video feed. +OSDs are commonly used in FPV and long-range flying so the pilot can see live flight data without looking away from the video. + +PX4 supports three distinct OSD mechanisms, each targeting a different class of video system: + +| Mechanism | Use case | Transport | Runs on FC? | +| --------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------- | -------------------------------------------------------------- | +| [MSP OSD](#msp-osd) | Digital FPV air units and video goggles that speak Betaflight MSP (e.g. DJI O3/O4, Walksnail, HDZero, Caddx Vista) | Serial, MSPv1 | Yes — [`msp_osd`](../modules/modules_driver.md#msp-osd) driver | +| [ATXXXX Analog OSD](#atxxxx-analog-osd) | Legacy analog video with an on-board MAX7456/ATXXXX overlay chip (e.g. OmnibusF4SD) | SPI to on-board chip | Yes — [`atxxxx`](../modules/modules_driver.md#atxxxx) driver | +| [MAVLink OSD](#mavlink-osd) | MAVLink-aware ground stations and displays that render their own OSD from telemetry (e.g. Yaapu on EdgeTX/OpenTX, Skydroid, mLRS HUDs) | Serial, MAVLink | No — streams MAVLink; the display renders the OSD | + +Which one you use is determined by your video hardware, not by PX4 preference. +If you're unsure, start with your video system's documentation and match the OSD mechanism it expects. + +## MSP OSD + +**MSP (MultiWii Serial Protocol) OSD** is the mechanism used by digital FPV systems (DJI, Walksnail, HDZero) and by many digital goggles/air units to render telemetry over the pilot's video feed. +PX4 implements the subset of MSP used for OSD telemetry, matching what Betaflight and INAV send. + +The [`msp_osd`](../modules/modules_driver.md#msp-osd) driver converts uORB topics (battery, GPS, attitude, etc.) to MSP packets and sends them out a serial port at 115200 baud. + +### Supported displays + +PX4 currently sends a subset of MSP messages. +Reliably-working display items include: + +- Craft name and flight mode / arming state +- Battery voltage, current draw, mAh consumed, average cell voltage +- GPS latitude, longitude, satellite count, ground speed +- Home distance and direction +- Altitude (from GNSS / baro) +- RSSI +- Crosshairs toggle + +Some items in [`OSD_SYMBOLS`](../advanced_config/parameter_reference.md#OSD_SYMBOLS) are reserved but not yet implemented — see the parameter's `(unused)` bit labels. +For feature-completeness work, see the tracking issues on GitHub. + +### 하드웨어 설정 + +1. Connect the digital air unit's MSP / telemetry input to a free UART on the flight controller (TX → RX, RX → TX, GND → GND). +2. Power the air unit from its own BEC or a VTX power pad — most air units expect 5 V or battery voltage, not autopilot 5 V. +3. Note which PX4 serial device the UART maps to on your board (e.g. `TELEM2` → `/dev/ttyS2`). + See [Serial Port Mapping](../hardware/serial_port_mapping.md). + +### Firmware requirements + +The `msp_osd` driver is included in the default build for most modern Pixhawk and FPV-oriented boards (e.g. `px4_fmu-v5x`, `px4_fmu-v6x`, `ark_fpv`, `cuav_7-nano`, `micoair_h743*`). +If your board does not include it by default, enable it via [board config](../hardware/porting_guide_config.md#px4-menuconfig-setup): + +```sh +make _default boardconfig +# drivers → OSD → msp_osd +``` + +Then rebuild and flash. + +### PX4 configuration + +1. Assign the selected serial port to MSP OSD with [`MSP_OSD_CONFIG`](../advanced_config/parameter_reference.md#MSP_OSD_CONFIG). +2. Set the matching `SER__BAUD` to `115200`. +3. Reboot. +4. Tune the display via the [`OSD_*` parameters](../advanced_config/parameter_reference.md#osd): + - [`OSD_SYMBOLS`](../advanced_config/parameter_reference.md#OSD_SYMBOLS) — bitmask selecting which items appear. + - [`OSD_CH_HEIGHT`](../advanced_config/parameter_reference.md#OSD_CH_HEIGHT) — vertical position of the crosshairs. + - [`OSD_LOG_LEVEL`](../advanced_config/parameter_reference.md#OSD_LOG_LEVEL) — minimum severity for on-screen warnings. + - [`OSD_SCROLL_RATE`](../advanced_config/parameter_reference.md#OSD_SCROLL_RATE) / [`OSD_DWELL_TIME`](../advanced_config/parameter_reference.md#OSD_DWELL_TIME) — scrolling of long messages. + - [`OSD_RC_STICK`](../advanced_config/parameter_reference.md#OSD_RC_STICK) — forward RC sticks to the VTX when disarmed, so you can navigate the VTX menu. + +### Worked examples + +- [Reptile Dragon 2 > msp_osd Module](../frames_plane/reptile_dragon_2.md#msp-osd-module) — end-to-end wiring and configuration for a Caddx Vista build. +- [Turbo Timber Evolution](../frames_plane/turbo_timber_evolution.md) — references the same setup pattern. + +## MAVLink OSD + +Some OSDs render their own overlay directly from the MAVLink telemetry stream — the flight controller simply streams MAVLink at a rate the display can parse. +PX4 exposes this via a dedicated MAVLink stream profile. + +To use a MAVLink OSD: + +1. Choose an unused MAVLink instance ([`MAV_X_CONFIG`](../peripherals/mavlink_peripherals.md#default_ports)) and assign it to the serial port connected to the display. +2. Configure the mode of the selected MAVLink instance with [`MAV_X_MODE`](./mavlink_peripherals.md#MAV_X_MODE) by setting it to **`OSD`**. + The `OSD` mode uses a built-in rate table tuned for low-bandwidth OSD consumption. +3. Set the matching `SER__BAUD` to the baud rate the display expects. + +The stream content is fixed (defined in `src/modules/mavlink/mavlink_main.cpp`) and cannot be customised from parameters. +See [MAVLink Peripherals (GCS/OSD/Gimbal/Camera/Companion)](./mavlink_peripherals.md) for the full MAVLink-side configuration. + +## ATXXXX Analog OSD + +The [`atxxxx`](../modules/modules_driver.md#atxxxx) driver targets boards with an on-board MAX7456 / ATXXXX chip that overlays characters onto an analog video stream (PAL or NTSC). +This was common on older F4-class FCs such as OmnibusF4SD and is largely superseded by digital systems. + +No external wiring is required on boards that include the chip; to enable it, set [`OSD_ATXXXX_CFG`](../advanced_config/parameter_reference.md#OSD_ATXXXX_CFG) to `1` (NTSC) or `2` (PAL) and reboot. + +## See also + +- [Parameter Reference > OSD](../advanced_config/parameter_reference.md#osd) — all OSD parameters. +- [MAVLink Peripherals (GCS/OSD/Gimbal/Camera/Companion)](./mavlink_peripherals.md) — MAVLink serial configuration. +- [Serial Port Configuration](./serial_configuration.md) — assigning modules to UARTs. +- [`msp_osd` module reference](../modules/modules_driver.md#msp-osd) — CLI usage and source. diff --git a/docs/ko/peripherals/parachute.md b/docs/ko/peripherals/parachute.md index 688e229ac9..528d12f07b 100644 --- a/docs/ko/peripherals/parachute.md +++ b/docs/ko/peripherals/parachute.md @@ -44,6 +44,7 @@ To enable flight termination: - Set [Safety](../config/safety.md) action to _Flight termination_ for checks where you want the parachute to trigger. - Set [Failure Detector](../config/safety.md#failure-detector) pitch angles, roll angles and time triggers for crash/flip detection, and disable the failure/IMU timeout circuit breaker (i.e. set [CBRK_FLIGHTTERM=0](../advanced_config/parameter_reference.md#CBRK_FLIGHTTERM)). +- Set [FD_ALT_LOSS](../advanced_config/parameter_reference.md#FD_ALT_LOSS) to enable flight termination if a rotary-wing vehicle loses too much altitude below its setpoint (see [Altitude Loss Trigger](../config/safety.md#altitude-loss-trigger)). :::info You can also configure an [external Automatic Trigger System (ATS)](../config/safety.md#external-automatic-trigger-system-ats) for failure detection. diff --git a/docs/ko/peripherals/pwm_escs_and_servo.md b/docs/ko/peripherals/pwm_escs_and_servo.md index 6b6c6c8b72..ffe8ab5ed0 100644 --- a/docs/ko/peripherals/pwm_escs_and_servo.md +++ b/docs/ko/peripherals/pwm_escs_and_servo.md @@ -66,7 +66,7 @@ On an opto-isolated ESC **without** BEC, the +5V line might need to be connected PWM motors and servos are configured using the [Actuator Configuration](../config/actuators.md) screen in QGroundControl. -After assigning outputs and basic calibration, you may then wish to peform an [ESC Calibration](../advanced_config/esc_calibration.md). +After assigning outputs and basic calibration, you may then wish to perform an [ESC Calibration](../advanced_config/esc_calibration.md). Additional PX4 PWM configuration parameters can be found here: [PWM Outputs](../advanced_config/parameter_reference.md#pwm-outputs). diff --git a/docs/ko/peripherals/remote_id.md b/docs/ko/peripherals/remote_id.md index fb9e2083be..c2eda8b445 100644 --- a/docs/ko/peripherals/remote_id.md +++ b/docs/ko/peripherals/remote_id.md @@ -144,20 +144,19 @@ The [CAN Remote ID Not Working](../peripherals/remote_id.md#can-remote-id-not-wo There is no need to explicitly enable Remote ID (supported Remote ID messages are either streamed by default or must be requested in the current implementation, even if no remote ID is connected). -### Prevent Arming based on Remote ID +### Remote ID Failsafe and Arming Check -To only allow arming when a Remote ID is ready, [set](../advanced_config/parameters.md#conditional-parameters) the parameter [COM_ARM_ODID](#COM_ARM_ODID) to `2` (it is disabled by default). + -| 매개변수 | 설명 | -| ----------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [COM_ARM_ODID](../advanced_config/parameter_reference.md#COM_ARM_ODID) | Enable Drone ID system detection and health check. `0`: Disable (default), `1`: Warn if Remote ID not detected but still allow arming, `2`: Only allow arming if Remote ID is present. | +The [COM_ARM_ODID](../advanced_config/parameter_reference.md#COM_ARM_ODID) parameter configures both the arming check and the in-flight failsafe action when the Remote ID system is missing or unhealthy. +For more information see [Remote ID Failsafe](http://localhost:5173/px4_user_guide/en/config/safety#remote-id-failsafe) in _Safety Configuration_. ## Module Broadcast Testing Integrators should test than the remote ID module is broadcasting the correct information, such as UAV location, ID, operator ID and so on. This is most easily done using a 3rd party application on your mobile device: -- [Drone Scanner](https://github.com/dronetag/drone-scanner) (Google Play or Apple App store) +- [Drone Scanner](https://help.dronetag.com/drone-scanner/) (Google Play or Apple App store) - [OpenDroneID OSM](https://play.google.com/store/apps/details?id=org.opendroneid.android_osm&hl=en&gl=US) (Google Play) ## 구현 @@ -174,7 +173,7 @@ The following message can be streamed on request (using [MAV_CMD_SET_MESSAGE_INT - [OPEN_DRONE_ID_BASIC_ID](https://mavlink.io/en/messages/common.html#OPEN_DRONE_ID_BASIC_ID) - UAV identity information (essentially a serial number) - PX4 v1.14 specifies a serial number ([MAV_ODID_ID_TYPE_SERIAL_NUMBER](https://mavlink.io/en/messages/common.html#MAV_ODID_ID_TYPE_SERIAL_NUMBER)) but does not use the required format (ANSI/CTA-2063 format). -PX4 prevents arming based on Remote ID health if parameter [COM_ARM_ODID](../advanced_config/parameter_reference.md#COM_ARM_ODID) is set to `2`. +PX4 can prevent arming and/or trigger an in-flight failsafe based on Remote ID health via the [COM_ARM_ODID](../advanced_config/parameter_reference.md#COM_ARM_ODID) parameter. The UAV will then require `HEARTBEAT` messages from the Remote ID as a precondition for arming the UAV. You can also set the parameter to `1` to warn but still allow arming when Remote ID `HEARTBEAT` messages are not detected. diff --git a/docs/ko/peripherals/serial_configuration.md b/docs/ko/peripherals/serial_configuration.md index 59d800cc76..8ea8258518 100644 --- a/docs/ko/peripherals/serial_configuration.md +++ b/docs/ko/peripherals/serial_configuration.md @@ -109,7 +109,7 @@ The following ports are commonly mapped to specific functions on all boards: This is configured by default as a MAVLink port the onboard profile (for companion computers). The configuration for MAVLink is unique to this port (it doesn't use the `MAV_X_CONFIG` parameters). - - [SYS_USB_AUTO](../advanced_config/parameter_reference.md#SYS_USB_AUTO) sets whether the port is set to no partiular protocol, autodetects the protocol, or sets the comms link to MAVLink. + - [SYS_USB_AUTO](../advanced_config/parameter_reference.md#SYS_USB_AUTO) sets whether the port is set to no particular protocol, autodetects the protocol, or sets the comms link to MAVLink. - [USB_MAV_MODE](../advanced_config/parameter_reference.md#USB_MAV_MODE) sets the MAVLink profile that is used if MAVLink is set or detected. Other ports generally have no assigned functions by default (are disabled). diff --git a/docs/ko/peripherals/vertiq.md b/docs/ko/peripherals/vertiq.md index 67581e2e5a..0d9da7fc22 100644 --- a/docs/ko/peripherals/vertiq.md +++ b/docs/ko/peripherals/vertiq.md @@ -6,7 +6,7 @@ With closed loop velocity control for the fastest response times available, clas ![Vertiq Module Lineup](../../assets/peripherals/esc_vertiq/vertiq_esc_lineup.jpg) -All Vertiq modules support traditional [PWM input, DShot, OneShot, and Multishot communication protocols](https://iqmotion.readthedocs.io/en/latest/communication_protocols/hobby_protocol.html). Vertiq's larger modules also support [DroneCAN control](https://iqmotion.readthedocs.io/en/latest/communication_protocols/dronecan_protocol.html). +All Vertiq modules support traditional [PWM input, DShot, OneShot, and Multishot communication protocols](https://iqmotion.readthedocs.io/en/latest/communication_protocols/timer_based_protocol.html). Vertiq's larger modules also support [DroneCAN control](https://iqmotion.readthedocs.io/en/latest/communication_protocols/dronecan_protocol.html). ## 구매처 @@ -38,6 +38,18 @@ Instructions for integrating the motor/ESC using with DroneCAN can be found in [ These instructions walk you through setting the correct parameters for enabling the flight controller's DroneCAN drivers, setting the correct configuration parameters for communication with Vertiq modules on the DroneCAN bus, ESC configuration, and testing that your flight controller can properly control your modules over DroneCAN. +#### LED Configuration for Vertiq Modules + +:::info +This configuration is only required if you have the optional [Vertiq LED module add-on](https://www.vertiq.co/add-ons). +Standard Vertiq ESC modules do not include LEDs. +::: + +Vertiq LED Add-on modules have two LEDs per ESC (RGB for status, White for anti-collision). +See [DroneCAN Lights](../dronecan/lights.md) for configuration instructions. + +The `light_id` for each LED is calculated as: `esc_index × 3 + BASE_ID`, where `BASE_ID` is 1 for RGB and 2 for White. + ### DShot/PWM Configuration Instructions for integrating the motor/ESC using PWM and DShot can be found in [PWM and DShot Control with a Flight Controller](https://iqmotion.readthedocs.io/en/latest/tutorials/pwm_control_flight_controller.html). diff --git a/docs/ko/power_module/holybro_pm06_pixhawk4mini_power_module.md b/docs/ko/power_module/holybro_pm06_pixhawk4mini_power_module.md index b2094c4e7a..4292ff8c74 100644 --- a/docs/ko/power_module/holybro_pm06_pixhawk4mini_power_module.md +++ b/docs/ko/power_module/holybro_pm06_pixhawk4mini_power_module.md @@ -26,6 +26,8 @@ This power module has integrated power distribution board and provides regulated ## Wiring/Connections -Wiring and connection examples can be found in: [Pixhawk 4 Mini > Power](../assembly/quick_start_pixhawk4_mini.md#power). +![pm06_pin_map](../../assets/hardware/power_module/holybro_pm06/pm06_pin_map.jpg) - +This image shows the wiring and connections for the [Pixhawk 4 Mini](https://docs.px4.io/v1.16/en/assembly/quick_start_pixhawk4_mini#power) (discontinued). + +![Pixhawk 4 - Power Management Board](../../assets/hardware/power_module/holybro_pm06/pixhawk4mini_power_management.png) diff --git a/docs/ko/power_module/index.md b/docs/ko/power_module/index.md index 7fceb5e8ac..cff0c3350c 100644 --- a/docs/ko/power_module/index.md +++ b/docs/ko/power_module/index.md @@ -13,7 +13,7 @@ The PX4 battery/power module configuration (via the ADC interface) is covered in For easiest assembly use a power module or PDB recommended by your FC manufacturer, and sized for your power requirements. The Pixhawk connector standard requires that the VCC line must provide at least 2.5A continuous current and default to 5.3V. -In in practice flight controllers may have different recommendations or preferences, so if you don't (or can't) use a recommended module, check that the module matches your FC's requirements. +In practice flight controllers may have different recommendations or preferences, so if you don't (or can't) use a recommended module, check that the module matches your FC's requirements. ::: This section provides information about a number of power modules and power distribution boards (see FC manufacturer docs for more options): diff --git a/docs/ko/releases/1.12.md b/docs/ko/releases/1.12.md index b16ae562fb..a343a14a1d 100644 --- a/docs/ko/releases/1.12.md +++ b/docs/ko/releases/1.12.md @@ -28,7 +28,7 @@ - **RTL Trigger based on remaining flight range ([PR#16399](https://github.com/PX4/PX4-Autopilot/pull/16399))** - 기체 속도, 풍속 및 목적지 거리와 방향을 고려하여 RTL에서 집까지의 시간을 계산합니다. -- **Pre-emptive geofence breach ([PR#16400](https://github.com/PX4/PX4-Autopilot/pull/16400))** +- **Preemptive geofence breach ([PR#16400](https://github.com/PX4/PX4-Autopilot/pull/16400))** - Triggers a breach if the _predicted_ current trajectory will result in a breach, allowing the vehicle to be re-routed to a safe hold position. - **Airframe Scripts** - 기본값 설정 구문이 변경되었으며 사용자 지정 스크립트를 업데이트하여야 합니다. @@ -128,7 +128,7 @@ ### NuttX -Nuttx was upgraded from [8.2+ to NuttX 10.10.0+](https://github.com/apache/incubator-nuttx/compare/nuttx-8.2..nuttx-10.0.1) (@ [904a602c74dc08a100b5c2bd490807de19e73e10](https://github.com/apache/incubator-nuttx/commit/904a602c74dc08a100b5c2bd490807de19e73e10)) +Nuttx was upgraded from [8.2+ to NuttX 10.10.0+](https://github.com/apache/nuttx/compare/nuttx-8.2..nuttx-10.0.1) (@ [904a602c74dc08a100b5c2bd490807de19e73e10](https://github.com/apache/nuttx/commit/904a602c74dc08a100b5c2bd490807de19e73e10)) - **SDCARD performance:** Results in better performance on H7 Targets - [**BACKPORT**] stm32:SDIO:Use 250 Ms Data path timeout, regardless of Card Clock frequency diff --git a/docs/ko/releases/1.14.md b/docs/ko/releases/1.14.md index b93a593b00..69683c3744 100644 --- a/docs/ko/releases/1.14.md +++ b/docs/ko/releases/1.14.md @@ -51,10 +51,10 @@ The new [Failsafe State Machine Simulation](../config/safety_simulation.md) allo ### New Gazebo -Given [the recent changes](https://discourse.ros.org/t/a-new-era-for-gazebo-cross-post/25012) by the Open Robotics simulation team, we are introducing name changes for our gazebo simulations, mirroring Open Robotics naming scheme, starting with v1.14: +Given [the recent changes](https://discourse.openrobotics.org/t/a-new-era-for-gazebo-cross-post/25012) by the Open Robotics simulation team, we are introducing name changes for our gazebo simulations, mirroring Open Robotics naming scheme, starting with v1.14: -- [Ignition Gazebo](https://docs.px4.io/v1.13/en/simulation/ignition_gazebo.html) to [Gazebo](../sim_gazebo_gz/index.md) -- [Gazebo](https://docs.px4.io/v1.13/en/simulation/gazebo.html) to [Gazebo Classic](../sim_gazebo_classic/index.md). +- [Ignition Gazebo](https://docs.px4.io/v1.13/en/simulation/ignition_gazebo) to [Gazebo](../sim_gazebo_gz/index.md) +- [Gazebo](https://docs.px4.io/v1.13/en/simulation/gazebo) to [Gazebo Classic](../sim_gazebo_classic/index.md). Most importantly this affects the PX4 build target names as well: @@ -63,7 +63,7 @@ Most importantly this affects the PX4 build target names as well: ### Improved ROS 2 Interface via uXRCE-DDS -We updated the ROS 2 interface, replacing [Fast-RTPS](https://docs.px4.io/v1.13/en/middleware/micrortps.html) with [uXRCE-DDS](../ros2/user_guide.md), resulting in an improved experience across the board. +We updated the ROS 2 interface, replacing [Fast-RTPS](https://docs.px4.io/v1.13/en/middleware/micrortps) with [uXRCE-DDS](../ros2/user_guide.md), resulting in an improved experience across the board. The change also avoids the need for `_rtps` build targets, enabling the interface on even more targets by default. ## Upgrade Guide @@ -85,7 +85,7 @@ For users upgrading from previous versions, please take a moment to review the f 3. Fast-RTPS users must port their code to the new uXRCE-DDS interface. Application code should only require minor modifications. These include (minimally): -Modifying topic names to match the new naming pattern, which changed from `fmu//out` to `fmu/out/`, and [Adusting the QoS settings](../ros2/user_guide.md#ros-2-subscriber-qos-settings). +Modifying topic names to match the new naming pattern, which changed from `fmu//out` to `fmu/out/`, and [Adjusting the QoS settings](../ros2/user_guide.md#ros-2-subscriber-qos-settings). For more information see [Fast-RTPS to uXRCE-DDS Migration Guidelines](../middleware/uxrce_dds.md#fast-rtps-to-uxrce-dds-migration-guidelines) @@ -102,7 +102,7 @@ For more information see [Fast-RTPS to uXRCE-DDS Migration Guidelines](../middle - Failsafe state machine rewrite and [web simulation](../config/safety_simulation.md) - Improved preflight failure check reporting (requires QGC [v4.2.0](https://github.com/mavlink/qgroundcontrol/releases/tag/v4.2.0) or later): [PX4-Autopilot#20030](https://github.com/PX4/PX4-Autopilot/pull/20030) and [qgroundcontrol#10362](https://github.com/mavlink/qgroundcontrol/pull/10362) -- [Package delivery in mission](../advanced/package_delivery.md): For package delivery applications, inital support for payload delivery in mission for gripper actuator was added +- [Package delivery in mission](../advanced/package_delivery.md): For package delivery applications, initial support for payload delivery in mission for gripper actuator was added - Manual control setpoint message redefinition: `manual_control_setpoint.x`, `y`, `z`, `w` -> `roll`, `pitch`, `yaw`, `throttle`; `throttle scale [0,1] -> [-1,1]` - [PX4-Autopilot#15949](https://github.com/PX4/PX4-Autopilot/pull/15949) - Default motor PWM configuration - [PX4-Autopilot#21800](https://github.com/PX4/PX4-Autopilot/pull/21800) - Fix PWM/Oneshot calibration - [PX4-Autopilot#21726](https://github.com/PX4/PX4-Autopilot/pull/21726) @@ -135,7 +135,7 @@ For more information see [Fast-RTPS to uXRCE-DDS Migration Guidelines](../middle - [Gazebo-classic] Addition of Omnicopter model: A fully actuated omnidirectional vehicle model has been added to Gazebo SITL - https://github.com/PX4/PX4-SITL_gazebo-classic/pull/866 - [Gazebo-classic] Addition of Advanced liftdrag plugin: Advanced liftdrag plugin that models nonlinear aerodynamics based on AVL - [PX4-SITL_gazebo-classic#901](https://github.com/PX4/PX4-SITL_gazebo-classic/pull/901) - [Gazebo-classic] Addition of Safe landing world: Addition of safe landing world, for testing safe landing - [PX4-SITL_gazebo-classic#93](https://github.com/PX4/PX4-SITL_gazebo-classic/pull/93) -- [Gazebo-classic] Depricated Ubuntu Bionic reated tests: Removed testing due to EOL of Ubuntu Bionic - [PX4-SITL_gazebo-classic#974](https://github.com/PX4/PX4-SITL_gazebo-classic/pull/974) +- [Gazebo-classic] Deprecated Ubuntu Bionic reated tests: Removed testing due to EOL of Ubuntu Bionic - [PX4-SITL_gazebo-classic#974](https://github.com/PX4/PX4-SITL_gazebo-classic/pull/974) - [SIH] Standalone sensor simulations in tree: Ability to simulate sensors in tree that was part of SIH is now a stand alone sensor module. Sensors include magnetometer, GPS, Barometer, Airspeed - [PX4-Autopilot#20137](https://github.com/PX4/PX4-Autopilot/pull/20137), https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/simulation/sensor_airspeed_sim - [SIH] Failure injection for battery simulation - https://github.com/PX4/PX4-Autopilot/commit/ebc1d7544e8146788c9e7cf5e8b64f60199240e4 diff --git a/docs/ko/releases/1.15.md b/docs/ko/releases/1.15.md index cc03b8a837..c5a6fd123a 100644 --- a/docs/ko/releases/1.15.md +++ b/docs/ko/releases/1.15.md @@ -67,7 +67,7 @@ Please continue reading for [upgrade instructions](#upgrade-guide). ### 제어 -- **[Offboard]** [ros2 offboard control](../flight_modes/offboard.md#ros-2-messages) allows for direct motors and servo control ([PX4-Autopilot#22222](https://github.com/PX4/PX4-Autopilot/pull/22222)) +- **[Offboard]** [ros2 offboard control](../flight_modes/offboard.md#ros-2-offboard-control) allows for direct motors and servo control ([PX4-Autopilot#22222](https://github.com/PX4/PX4-Autopilot/pull/22222)) ### Estimation @@ -79,7 +79,7 @@ Please continue reading for [upgrade instructions](#upgrade-guide). - Correct way of describing the quaternion uncertainty using Lie group theory - Use Joseph stabilized covariance update algorithm for better covariance stability and allow use of "consider states" (inactive states with non-zero variance) ([PX4-Autopilot#22770](https://github.com/PX4/PX4-Autopilot/pull/22770)) - Covariance prediction, measurement jacobians, state struct and covariance index auto-generated using SymForce -- Manual position update throught MAVLink (`MAV_CMD_EXTERNAL_POSITION_ESTIMATE`) +- Manual position update through MAVLink (`MAV_CMD_EXTERNAL_POSITION_ESTIMATE`) - Add Auxiliary Global Position (AGP) fusion (for e.g.: external map matching vision algorithm) **Mag:** diff --git a/docs/ko/releases/1.16.md b/docs/ko/releases/1.16.md index 27124c57fb..f72e2cfe70 100644 --- a/docs/ko/releases/1.16.md +++ b/docs/ko/releases/1.16.md @@ -57,7 +57,7 @@ Please continue reading for [upgrade instructions](#upgrade-guide). - [Voltage-based estimation with load compensation](../config/battery.md#voltage-based-estimation-with-load-compensation) now uses a real-time estimate of the internal resistance of the battery to compensate voltage drops under load (with increased current), providing a better capacity estimate than with the raw measured voltage. - Thrust-based load compensation has been removed (along with the `BATn_V_LOAD_DROP` parameters, where `n` is the battery number). -- The [Position (GNSS) loss failsafe](../config/safety.md#position-gnss-loss-failsafe) configurable delay (`COM_POS_FS_DELAY`) has been removed. +- The [Position (GNSS) loss failsafe](../config/safety.md#position-loss-failsafe) configurable delay (`COM_POS_FS_DELAY`) has been removed. The failsafe will now trigger 1 second after position has been lost. ([PX4-Autopilot#24063](https://github.com/PX4/PX4-Autopilot/pull/24063)). - [Log Encryption](../dev_log/log_encryption.md) now generates an encrypted log that contains the public-key-encrypted symmetric key that can be used to decrypt it, instead of putting the key into a separate file. @@ -160,7 +160,7 @@ Please continue reading for [upgrade instructions](#upgrade-guide). - mavlink_ftp: handle relative paths correctly. ([PX4-Autopilot#22980](https://github.com/PX4/PX4-Autopilot/pull/22980)) - Parameter to always start mavlink stream via USB. ([PX4-Autopilot#22234](https://github.com/PX4/PX4-Autopilot/pull/22234)) - Refactor: MAVLink message handling in one function, reference instead of pointer to main instance ([PX4-Autopilo#23219](https://github.com/PX4/PX4-Autopilot/pull/22234)) -- mavlink log handler rewrite for improved effeciency ([PX4-Autopilo#23219](https://github.com/PX4/PX4-Autopilot/pull/22234)) +- mavlink log handler rewrite for improved efficiency ([PX4-Autopilo#23219](https://github.com/PX4/PX4-Autopilot/pull/22234)) ### Multi-Rotor diff --git a/docs/ko/releases/1.17.md b/docs/ko/releases/1.17.md index 4d757780d5..facd3c66f9 100644 --- a/docs/ko/releases/1.17.md +++ b/docs/ko/releases/1.17.md @@ -9,11 +9,11 @@ const { site } = useData();
-

This page is on a release branch, and hence probably out of date. See the latest version.

+

This page is on a release branch, and hence probably out of date. See the latest version.

-This contains changes to PX4 planned for PX4 v1.17 (since the last major release [PX v1.16](../releases/1.16.md)). +This contains changes in PX4 v1.17 (since the last major release [PX v1.16](../releases/1.16.md)). :::warning PX4 v1.17 is in alpha/beta testing. @@ -57,7 +57,7 @@ Please continue reading for [upgrade instructions](#upgrade-guide). --> -- [MC Neural Network Module](../advanced/neural_networkss.md) +- [MC Neural Network Module](../advanced/neural_networks.md) ### Estimation @@ -79,7 +79,7 @@ Please continue reading for [upgrade instructions](#upgrade-guide). - Add synthetic mecanum rover model: [PX4-gazebo-models#113](https://github.com/PX4/PX4-gazebo-models/pull/113) - Update synthetic ackermann rover model: [PX4-gazebo-models#117](https://github.com/PX4/PX4-gazebo-models/pull/117) -- [Simulation-in-Hardware (SIH)](../sim_sih/index.md#compatibility) +- [Simulation-in-Hardware (SIH)](../sim_sih/index.md#supported-vehicle-types) - New simulation: MC Hexacopter X - New simulation: Ackermann Rover diff --git a/docs/ko/releases/index.md b/docs/ko/releases/index.md index b691d2eb48..a08ae487ae 100644 --- a/docs/ko/releases/index.md +++ b/docs/ko/releases/index.md @@ -3,7 +3,7 @@ PX4 릴리스 노트는 각 릴리스의 변경 사항들을 설명합니다. - [main](../releases/main.md) (changes planned for v1.18 or later) -- [v1.17](../releases/1.17.md) (changes planned for v1.17, since v1.16) +- [v1.17](../releases/1.17.md) (changes in v1.17, since v1.16) - [v1.16](../releases/1.16.md) - [v1.15](../releases/1.15.md) - [v1.14](../releases/1.14.md) diff --git a/docs/ko/releases/main.md b/docs/ko/releases/main.md index 8ef3533c8d..a749b67893 100644 --- a/docs/ko/releases/main.md +++ b/docs/ko/releases/main.md @@ -9,7 +9,7 @@ const { site } = useData();
-

This page is on a release branch, and hence probably out of date. See the latest version.

+

This page is on a release branch, and hence probably out of date. See the latest version.

@@ -22,7 +22,8 @@ Update these notes with features that are going to be in `main` (PX4 v1.18 or la ## Read Before Upgrading -- TBD … +- Log rotation is now enabled by default. Previously, a single log file grew for the entire flight and old logs were only deleted at boot once free space fell below a fixed 300 MB floor. The logger now caps each log file at [SDLOG_MAX_SIZE](../advanced_config/parameter_reference.md#SDLOG_MAX_SIZE) (new parameter, default `1024` MB) and keeps a configurable percentage of the disk free via [SDLOG_ROTATE](../advanced_config/parameter_reference.md#SDLOG_ROTATE) (new parameter, default `90`, so at least 10% free). Cleanup runs at log start rather than boot, so logs can still be downloaded via FTP before they are deleted. See [Log Cleanup](../dev_log/logging.md#log-cleanup) for details. +- `SDLOG_DIRS_MAX` behaviour changed: it is now an orthogonal directory-count cap that runs on top of the new space-based cleanup, and the default is `0` (disabled). Previously it enforced a fixed ~300 MB free-space floor even when set to `0`. If you relied on that implicit floor, set [SDLOG_ROTATE](../advanced_config/parameter_reference.md#SDLOG_ROTATE) instead. Please continue reading for [upgrade instructions](#upgrade-guide). @@ -40,16 +41,22 @@ Please continue reading for [upgrade instructions](#upgrade-guide). ### 공통 +- [Remote ID (Open Drone ID) in-flight failsafe](../peripherals/remote_id.md): extended [COM_ARM_ODID](../advanced_config/parameter_reference.md#COM_ARM_ODID) to also trigger a configurable failsafe action (Return, Land, or Terminate) if the Remote ID heartbeat is lost while airborne. Users previously on `COM_ARM_ODID=2` retain the same arming behaviour; set to `3` or higher to enable the in-flight action. ([PX4-Autopilot#27029](https://github.com/PX4/PX4-Autopilot/pull/27029)) - [QGroundControl Bootloader Update](../advanced_config/bootloader_update.md#qgc-bootloader-update-sys-bl-update) via the [SYS_BL_UPDATE](../advanced_config/parameter_reference.md#SYS_BL_UPDATE) parameter has been re-enabled after being broken for a number of releases. ([PX4-Autopilot#25032: build: romf: fix generation of rc.board_bootloader_upgrade](https://github.com/PX4/PX4-Autopilot/pull/25032)). +- [Feature: Allow prioritization of manual control inputs based on their instance number in ascending or descending order](../config/manual_control.md#px4-configuration). ([PX4-Autopilot#25602: Ascending and descending manual control input priorities](https://github.com/PX4/PX4-Autopilot/pull/25602)). ### 제어 - Added new flight mode(s): [Altitude Cruise (MC)](../flight_modes_mc/altitude_cruise.md), Altitude Cruise (FW). For fixed-wing the mode behaves the same as Altitude mode but you can disable the manual control loss failsafe. ([PX4-Autopilot#25435: Add new flight mode: Altitude Cruise](https://github.com/PX4/PX4-Autopilot/pull/25435)). +### 안전 설정 + +- Rotary-wing vehicles now support uncommanded altitude loss detection: if the vehicle descends more than [FD_ALT_LOSS](../advanced_config/parameter_reference.md#FD_ALT_LOSS) meters below its setpoint in altitude-controlled flight, flight termination (and parachute deployment) is triggered. See [Altitude Loss Trigger](../config/safety.md#altitude-loss-trigger). ([PX4-Autopilot#26837](https://github.com/PX4/PX4-Autopilot/pull/26837)) + ### Estimation -- TBD +- Added [EKF2_POS_LOCK](../advanced_config/parameter_reference.md#EKF2_POS_LOCK) to force constant position fusion while landed, useful for vehicles relying on dead-reckoning sensors (airspeed, optical flow) that provide no aiding on the ground. ### 센서 @@ -58,7 +65,7 @@ Please continue reading for [upgrade instructions](#upgrade-guide). ### 시뮬레이션 -- TBD +- SIH: Add option to set wind velocity ([PX4-Autopilot#26467](https://github.com/PX4-Autopilot/pull/26467)) @@ -137,7 +137,7 @@ To install ROS 2 and its dependencies: 2. Some Python dependencies must also be installed (using **`pip`** or **`apt`**): ```sh - pip install --user -U empy==3.3.4 pyros-genmsg setuptools + pip install --user -U empty==3.3.4 pyros-genmsg setuptools ``` ### Setup Micro XRCE-DDS Agent & Client diff --git a/docs/ko/sensor/airspeed.md b/docs/ko/sensor/airspeed.md index 01be3aaff2..86b9a859c7 100644 --- a/docs/ko/sensor/airspeed.md +++ b/docs/ko/sensor/airspeed.md @@ -11,8 +11,8 @@ For fixed-wing flight it is the airspeed that guarantees lift — not ground spe 권장 디지털 속도 센서는 다음과 같습니다. - Based on [Pitot tube](https://en.wikipedia.org/wiki/Pitot_tube) - - I2C MEAS Spec series (e.g. [MS4525DO](https://www.te.com/usa-en/product-CAT-BLPS0002.html), [MS5525](https://www.te.com/usa-en/product-CAT-BLPS0003.html)) - - [mRo I2C Airspeed Sensor JST-GH MS4525DO](https://store.3dr.com/mro-i2c-airspeed-sensor-jst-gh-ms4525do/) (3DR store) + - I2C MEAS Spec series (e.g. [MS4525DO](https://www.te.com/en/product-20003581-00.html), [MS5525](https://www.te.com/usa-en/product-CAT-BLPS0003.html)) + - [mRo I2C Airspeed Sensor JST-GH MS4525DO](https://store.3dr.com/airspeed-sensor-jst-gh-ms4525do/) (3DR store) - [Digital Differential Airspeed Sensor Kit - MS4525DO](https://store-drotek.com/793-digital-differential-airspeed-sensor-kit-.html) (Drotek). - [Holybro Digital Air Speed Sensor - MS4525DO](https://holybro.com/collections/sensors/products/digital-air-speed-sensor-ms4525do) - [Holybro Digital Air Speed Sensor - MS5525DSO](https://holybro.com/collections/sensors/products/digital-air-speed-sensor-ms5525dso) @@ -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. diff --git a/docs/ko/sensor/airspeed_tfslot.md b/docs/ko/sensor/airspeed_tfslot.md index 79fe759421..ef34468786 100644 --- a/docs/ko/sensor/airspeed_tfslot.md +++ b/docs/ko/sensor/airspeed_tfslot.md @@ -5,7 +5,7 @@ ![TFSLOT and TFSLOT WITH TFASPDIMU02 board](../../assets/hardware/sensors/airspeed/tsflot_compose.jpg) [TFSLOT](https://github.com/ThunderFly-aerospace/TFSLOT01) is an airspeed sensor based on venturi effects. -In the basic configuration, the TFSLOT is equipped with the [TFASPDIMU02](https://github.com/ThunderFly-aerospace/TFASPDIMU02) sensor board, which contains a differential pressure sensor ([Sensirion SDP3x series](https://sensirion.com/products/catalog/?filter_series=d1816d53-f5c8-47e3-ab47-818c3fd54259)) and a 9-axis motion tracking sensor ([ICM-20948](https://invensense.tdk.com/products/motion-tracking/9-axis/icm-20948/)). +In the basic configuration, the TFSLOT is equipped with the [TFASPDIMU02](https://github.com/ThunderFly-aerospace/TFASPDIMU02) sensor board, which contains a differential pressure sensor ([Sensirion SDP3x series](https://sensirion.com/products/catalog?filter_series=d1816d53-f5c8-47e3-ab47-818c3fd54259)) and a 9-axis motion tracking sensor ([ICM-20948](https://invensense.tdk.com/products/motion-tracking/9-axis/icm-20948/)). The IMU unit can be used as an external compass. - This design brings several advantages when used on small-scale and slow-flying UAVs. diff --git a/docs/ko/sensor/barometer.md b/docs/ko/sensor/barometer.md index 77195062df..bda05dfcb3 100644 --- a/docs/ko/sensor/barometer.md +++ b/docs/ko/sensor/barometer.md @@ -65,7 +65,7 @@ This calibration is controlled by the [SENS_BAR_AUTOCAL](../advanced_config/para The algorithm monitors GNSS quality, collects altitude differences over a 2-second filtered window, and verifies stability within 4m tolerance. Once stable, it uses binary search to calculate pressure offsets that align baro altitude with GNSS altitude (0.1m precision), then applies the offset to all sensors and saves the parameters. -참고: +Notes: - **EKF Independence**: GNSS-baro calibration operates independently of EKF2 altitude fusion settings. - **Execution Timing**: Calibration runs even when [EKF2_GPS_CTRL](../advanced_config/parameter_reference.md#EKF2_GPS_CTRL) altitude fusion is disabled. diff --git a/docs/ko/sensor/grf_lidar.md b/docs/ko/sensor/grf_lidar.md new file mode 100644 index 0000000000..1403a37277 --- /dev/null +++ b/docs/ko/sensor/grf_lidar.md @@ -0,0 +1,69 @@ +# Lightware GRF250/GRF500 Gimbal Lidar + +LightWare [GRF250](https://lightwarelidar.com/shop/grf-250/) and [GRF500](https://lightwarelidar.com/shop/grf-500/) are small and light Lidar modules with a range of 250m and 500m, respectively. + +![LightWare GRF250 Gimbal Lidar](../../assets/hardware/sensors/lidar_lightware/grf_500.png) + +:::info +The Lidar driver is not included in the default build of PX4. +You will need to [create and use a custom build](#add-the-driver-to-the-px4-build). +::: + +## 구매처 + +Order these modules from: + +- [GRF250](https://lightwarelidar.com/shop/grf-250/) +- [GRF500](https://lightwarelidar.com/shop/grf-500/) + +## 하드웨어 설정 + +The rangefinder can be connected to any unused serial port, such as `TELEM2`. +[Parameter Configuration](#parameter-configuration) explains how to configure the port to use and the other properties of the rangefinder. + +## PX4 Setup + +### Add the Driver to the PX4 Build + +The [lightware_grf_serial](../modules/modules_driver_distance_sensor.md#lightware-grf-serial) driver for this Lidar is not included in PX4 firmware by default. +In order to use these modules you will first need to update the firmware configuration to add the driver, and then build the firmware. + +1. Update the firmware configuration. You can use either of the following options: + - Menuconfig: + 1. Install and open [menuconfig](../hardware/porting_guide_config.md#px4-menuconfig-setup) + 2. In [menuconfig](../hardware/porting_guide_config.md#px4-menuconfig-setup), navigate to **Drivers > Distance sensors** + 3. Select/Enable `lightware_grf_serial` + 4. Save the configuration + + - Manually update `default.px4` to include the configuration key: + 1. Open the `default.px4board` config file that corresponds to the board you want to build for. + For example, to add the driver to `fmu-v6x` boards you would update [/boards/px4/fmu-v6x/default.px4board ](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/fmu-v6x/default.px4board) + 2. Add the following line and save the file: + + ```txt + CONFIG_DRIVERS_DISTANCE_SENSOR_LIGHTWARE_GRF_SERIAL=y + ``` + +2. [Build PX4](../dev_setup/building_px4.md) for your flight controller target and upload the new firmware. + +### Parameter Configuration + +You will need to configure PX4 to indicate the serial port to which the sensor is connected (as per [Serial Port Configuration](../peripherals/serial_configuration.md)) and also the orientation and other properties of the sensor. + +The [parameters to change](../advanced_config/parameters.md) are listed in the table. + +| 매개변수 | 설명 | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------ | +| [SENS_EN_GRF_CFG](../advanced_config/parameter_reference.md#SENS_EN_GRF_CFG) | Set to the serial port the sensor is connected to. | +| [GRF_RATE_CFG](../advanced_config/parameter_reference.md#GRF_RATE_CFG) | Set the update rate. | +| [GRF_SENS_MODEL](../advanced_config/parameter_reference.md#GRF_SENS_MODEL) | Set the sensor model to use. | + +## 시험 + +You can confirm that the sensor is correctly configured by connecting QGroundControl, and observing that [DISTANCE_SENSOR](https://mavlink.io/en/messages/common.html#DISTANCE_SENSOR) is present in the [MAVLink Inspector](https://docs.qgroundcontrol.com/master/en/qgc-user-guide/analyze_view/mavlink_inspector.html). + +Moving the sensor around at various distances from a surface will have the `current_distance` value change. + +## 문제 해결 + +If you are having problems with connecting to the sensor you may need to unassign a the default serial port. [Unassign Default Serial Port](../peripherals/serial_configuration.md) diff --git a/docs/ko/sensor/inertial_navigation_systems.md b/docs/ko/sensor/inertial_navigation_systems.md index 8a2ec11989..5d9b087cf3 100644 --- a/docs/ko/sensor/inertial_navigation_systems.md +++ b/docs/ko/sensor/inertial_navigation_systems.md @@ -49,5 +49,4 @@ Essentially it is an AHRS that also includes position/velocity estimation. ## 추가 정보 -- [What is an Inertial Navigation System?](https://www.vectornav.com/resources/inertial-navigation-articles/what-is-an-ins) (VectorNav) - [Inertial Navigation Primer](https://www.vectornav.com/resources/inertial-navigation-primer) (VectorNav) diff --git a/docs/ko/sensor/inertiallabs.md b/docs/ko/sensor/inertiallabs.md index b748a2fee3..2dee4e3aa2 100644 --- a/docs/ko/sensor/inertiallabs.md +++ b/docs/ko/sensor/inertiallabs.md @@ -21,8 +21,8 @@ The mode is configurable using a parameter. [Get technical support or send requests to sales team](https://inertiallabs.com/inertial-labs-inc/contact-inertial-labs-team/). Recommended sensors: -- [INS-U GNSS/INS](https://inertiallabs.com/ins-u-datasheet): Recommended for fixed-wing systems without hovering, where static heading is not necessary. -- [INS-DU DUAL GNSS/INS](https://inertiallabs.com/ins-du-datasheet): Recommended for multicopter systems where hovering and low dynamics requires the use of static heading. +- [INS-U GNSS/INS](https://inertiallabs.com/wp-content/uploads/2026/01/INS-U_INS-U-OEM_Datasheet_REV2.18_JAN2026.pdf): Recommended for fixed-wing systems without hovering, where static heading is not necessary. +- [INS-DU DUAL GNSS/INS](https://inertiallabs.com/wp-content/uploads/2025/12/INS-DU_INS-DU-OEM_Datasheet_REV1.00_DEC2025.pdf): Recommended for multicopter systems where hovering and low dynamics requires the use of static heading. ## 하드웨어 설정 diff --git a/docs/ko/sensor/lidar_lite.md b/docs/ko/sensor/lidar_lite.md index d3f8683f64..98a8548842 100644 --- a/docs/ko/sensor/lidar_lite.md +++ b/docs/ko/sensor/lidar_lite.md @@ -6,7 +6,7 @@ LIDAR-Lite는 드론, 로봇 또는 무인 차량용 소형 고성능 광학 원 ## 구매처 -- [LIDAR-Lite v3](https://buy.garmin.com/en-AU/AU/p/557294) (5cm - 40m) +- [LIDAR-Lite v3](https://www.garmin.com/en-AU/p/557294/) (5cm - 40m) ## 핀배열 diff --git a/docs/ko/sensor/microstrain.md b/docs/ko/sensor/microstrain.md index 0c5bf0061d..0f14391f52 100644 --- a/docs/ko/sensor/microstrain.md +++ b/docs/ko/sensor/microstrain.md @@ -7,10 +7,10 @@ Widely used across industries like aerospace, robotics, industrial automation, a The driver currently supports the following hardware: -- [`MicroStrain CV7-AR`](https://www.hbkworld.com/en/products/transducers/inertial-sensors/vertical-reference-units--vru-/3dm-cv7-ar): Inertial Measurement Unit (IMU) and Vertical Reference Unit (VRU) -- [`MicroStrain CV7-AHRS`](https://www.hbkworld.com/en/products/transducers/inertial-sensors/attitude-and-heading-reference-systems--ahrs-/3dm-cv7-ahrs): Inertial Measurement Unit (IMU) and Attitude Heading Reference System (AHRS) -- [`MicroStrain CV7-INS`](https://www.hbkworld.com/en/products/transducers/inertial-sensors/inertial-navigation-systems--ins-/3dm-cv7-ins): Inertial Measurement Unit (IMU) and Inertial Navigation System (INS). -- [`MicroStrain CV7-GNSS/INS`](https://www.hbkworld.com/en/products/transducers/inertial-sensors/inertial-navigation-systems--ins-/3dm-cv7-gnss-ins): Inertial Measurement Unit (IMU) and Inertial Navigation System (INS) combined with dual multiband (GNSS) receivers. +- [`MicroStrain CV7-AR`](https://www.hbkworld.com/en/products/transducers/inertial-sensors/vertical-reference/3dm-cv7-ar): Inertial Measurement Unit (IMU) and Vertical Reference Unit (VRU) +- [`MicroStrain CV7-AHRS`](https://www.hbkworld.com/en/products/transducers/inertial-sensors/attitude-and-heading/3dm-cv7-ahrs): Inertial Measurement Unit (IMU) and Attitude Heading Reference System (AHRS) +- [`MicroStrain CV7-INS`](https://www.hbkworld.com/en/products/transducers/inertial-sensors/navigation/3dm-cv7-ins): Inertial Measurement Unit (IMU) and Inertial Navigation System (INS). +- [`MicroStrain CV7-GNSS/INS`](https://www.hbkworld.com/en/products/transducers/inertial-sensors/navigation/3dm-cv7-gnss-ins): Inertial Measurement Unit (IMU) and Inertial Navigation System (INS) combined with dual multiband (GNSS) receivers. PX4 can use these sensors to provide raw IMU data for EKF2 or to replace EKF2 as an external INS. For more information, including user manuals and datasheets, please refer to the sensors product page. @@ -18,7 +18,7 @@ For more information, including user manuals and datasheets, please refer to the ## 구매처 MicroStrain sensors can be purchased through HBK's official [MicroStrain product page](https://www.hbkworld.com/en/products/transducers/inertial-sensors) or through authorized distributors globally. -For large orders, custom requirements, or technical inquiries, reach out directly to [sales](https://www.hbkworld.com/en/contact-us/contact-sales-microstrain) +For large orders, custom requirements, or technical inquiries, reach out directly to [sales](https://www.hbkworld.com/en/contact-us) ## 하드웨어 설정 diff --git a/docs/ko/sensor/optical_flow.md b/docs/ko/sensor/optical_flow.md index 779386fe14..638b5a0a6c 100644 --- a/docs/ko/sensor/optical_flow.md +++ b/docs/ko/sensor/optical_flow.md @@ -34,6 +34,12 @@ The information is written to the corresponding uORB topics: [DistanceSensor](.. | 우측 | - X | | 좌측 | + X | +:::info +The integrated flow values are **angular measurements** (radians) representing rotation of the image about the sensor's body axes using the right-hand convention. +They are _not_ translational displacements along those axes, which is why forward vehicle movement (along X) appears in the Y flow axis, and rightward movement (along Y) appears in the X flow axis. +Specifically, forward movement causes the ground image to rotate about the Y axis (+ Y), while rightward movement causes a negative rotation about the X axis (- X). +::: + 광류 데이터는 다른 속도 데이터 소스와 융합됩니다. The approach used for fusing sensor data and any offsets from the center of the vehicle must be configured in the [estimator](#estimators). @@ -71,7 +77,7 @@ Bitcraze, Tindie, Hex, Thone 및 Alientek의 일부 제품을 포함하여 여 ### 기타 카메라 / 센서 카메라 통합 보드를 사용할 수 있습니다. -For this the [Optical Flow repo](https://github.com/PX4/OpticalFlow) can be used (see also [snap_cam](https://github.com/PX4/snap_cam)). +For this the [Optical Flow repo](https://github.com/PX4/PX4-OpticalFlow) can be used (see also [snap_cam](https://github.com/PX4/snap_cam)). ## 거리 측정기 diff --git a/docs/ko/sensor/px4flow.md b/docs/ko/sensor/px4flow.md index d0d5104758..83edc7f785 100644 --- a/docs/ko/sensor/px4flow.md +++ b/docs/ko/sensor/px4flow.md @@ -5,4 +5,4 @@ PX4 does not support the PX4Flow [optical flow](../sensor/optical_flow.md) sensor from PX4 v1.13 (it doesn't work with current firmware). PX4 may work with older PX4Flow firmware. -Documentation has been removed (if needed, see [Legacy Docs for PX4Flow in v1.13](https://docs.px4.io/v1.13/en/sensor/px4flow.html)). +Documentation has been removed (if needed, see [Legacy Docs for PX4Flow in v1.13](https://docs.px4.io/v1.13/en/sensor/px4flow)). diff --git a/docs/ko/sensor/rangefinders.md b/docs/ko/sensor/rangefinders.md index 067cc0431e..3bfacd53ba 100644 --- a/docs/ko/sensor/rangefinders.md +++ b/docs/ko/sensor/rangefinders.md @@ -93,7 +93,7 @@ It has a sensor range from (5cm - 40m) and can be connected to either PWM or I2C ### MaxBotix I2CXL-MaxSonar-EZ -The MaxBotix [I2CXL-MaxSonar-EZ](https://www.maxbotix.com/product-category/i2cxl-maxsonar-ez-products) range has a number of relatively short-ranged sonar based rangefinders that are suitable for assisted takeoff/landing and collision avoidance. +The MaxBotix [I2CXL-MaxSonar-EZ](https://maxbotix.com/collections/i2cxl-maxsonar-ez-products) range has a number of relatively short-ranged sonar based rangefinders that are suitable for assisted takeoff/landing and collision avoidance. These can be connected using an I2C port. The rangefinders are enabled using the parameter [SENS_EN_MB12XX](../advanced_config/parameter_reference.md#SENS_EN_MB12XX). @@ -163,7 +163,7 @@ Features: - [VL53L1CBV0FY-1](https://www.st.com/resource/en/datasheet/vl53l1.pdf) sensor - Input voltage sensor -- CAN connectors: 2 [UCANPHY Micro (JST-GH 4)](https://raccoonlabdev.github.io/docs/guide/wires/). +- CAN connectors: 2 [UCANPHY Micro (JST-GH 4)](https://docs.raccoonlab.co/guide/wires/). ## Configuration/Setup {#configuration} diff --git a/docs/ko/sensor/sbgecom.md b/docs/ko/sensor/sbgecom.md index c9f0777c00..2cb5ba4cdb 100644 --- a/docs/ko/sensor/sbgecom.md +++ b/docs/ko/sensor/sbgecom.md @@ -2,7 +2,7 @@ [SBG-Systems](https://www.sbg-systems.com/) designs, manufactures, and support an extensive range of state-of-the-art inertial sensors such as Inertial Measurement Units (IMU), Attitude and Heading Reference Systems (AHRS), Inertial Navigation Systems with embedded GNSS (INS/GNSS), and so on. -PX4 supports [all SBG Systems products](https://www.sbg-systems.com/products/) and can use these as an [external INS](../sensor/inertial_navigation_systems.md) (bypassing/replacing the EKF2 estimator), or as a source of raw sensor data provided to the navigation estimator. +PX4 supports [all SBG Systems products](https://www.sbg-systems.com/) and can use these as an [external INS](../sensor/inertial_navigation_systems.md) (bypassing/replacing the EKF2 estimator), or as a source of raw sensor data provided to the navigation estimator. ![Ellipse](../../assets/hardware/sensors/inertial/ellipse-inertial-navigation-system.png) @@ -17,7 +17,7 @@ SBG Systems products provide a range of benefits to PX4 users and can be integra The sbgECom PX4 driver is streamlined to provide a simple plug-and-play architecture, removing engineering obstacles and allowing the acceleration of the design, development, and launch of platforms to keep pace with the rapid rate of innovation. -The driver supports [all SBG Systems products](https://www.sbg-systems.com/products/). +The driver supports [all SBG Systems products](https://www.sbg-systems.com/). In particular the following systems are recommended: - **Pulse:** Recommended for fixed-wing systems without hovering, where static heading is not necessary. @@ -151,5 +151,5 @@ Published topics can be viewed using the `listener` command. ## Hardware Specifications -- [Product Briefs](https://www.sbg-systems.com/products/) +- [Product Briefs](https://www.sbg-systems.com/) - [Datasheets](https://www.sbg-systems.com/contact/#products) diff --git a/docs/ko/sensor/sf45_rotating_lidar.md b/docs/ko/sensor/sf45_rotating_lidar.md index e7583c2d3b..fe1f50fee8 100644 --- a/docs/ko/sensor/sf45_rotating_lidar.md +++ b/docs/ko/sensor/sf45_rotating_lidar.md @@ -12,7 +12,7 @@ You will need to [create and use a custom build](#add-the-driver-to-the-px4-buil ## LightWare Studio Setup -In the [LightWare Studio](https://www.lightwarelidar.com/resources-software) app set following values: +In the [LightWare Studio](https://lightwarelidar.com/resources-software/) app set following values: | 매개변수 | 설명 | | --------- | ------ | diff --git a/docs/ko/sensor/sfxx_lidar.md b/docs/ko/sensor/sfxx_lidar.md index 30daec9f04..b3920cde7d 100644 --- a/docs/ko/sensor/sfxx_lidar.md +++ b/docs/ko/sensor/sfxx_lidar.md @@ -9,14 +9,14 @@ LightWare는 UAV에 장착에 적합한 경량의 범용 레이저 고도계( " 아래의 모델들은 PX4에서 지원되며, I2C 또는 직렬 버스에 연결할 수 있습니다 (아래 표는 각 모델에 사용할 수 있는 버스를 나타냄). -| 모델 | 범위 (m) | 버스 | 설명 | -| ------------------------------------------------------- | ------------------------- | ------------ | ------------------------------------------------------------------------------------------------------------- | -| [SF11/C](https://lightwarelidar.com/shop/sf11-c-100-m/) | 100 | 직렬 또는 I2C 버스 | | -| [LW20/C](https://lightware.co.za/products/lw20-c-100-m) | 100 | I2C 버스 | 감지 및 회피 애플리케이션을 위한 서보가 있는 방수 (IP67) | -| [SF30/D](https://lightwarelidar.com/shop/sf30-d-200-m/) | 200 | I2C 버스 | Waterproofed (IP67) | -| [SF45/B](../sensor/sf45_rotating_lidar.md) | 50 | 직렬 | Rotary Lidar (Used for [Collision Prevention](../computer_vision/collision_prevention.md)) | -| [GRF250](https://lightwarelidar.com/shop/grf-250/) | 250 | I2C | Gimbal Range Finder | -| [GRF500](https://lightwarelidar.com/shop/grf-500/) | 500 | I2C | Gimbal Range Finder | +| 모델 | 범위 (m) | 버스 | 설명 | +| ---------------------------------------------------------- | ------------------------- | ------------ | ------------------------------------------------------------------------------------------------------------- | +| [SF11/C](https://lightwarelidar.com/shop/sf11-c-100-m/) | 100 | 직렬 또는 I2C 버스 | | +| [LW20/C](https://lightwarelidar.com/products/lw20-c-100-m) | 100 | I2C 버스 | 감지 및 회피 애플리케이션을 위한 서보가 있는 방수 (IP67) | +| [SF30/D](https://lightwarelidar.com/shop/sf30-d-200-m/) | 200 | I2C 버스 | Waterproofed (IP67) | +| [SF45/B](../sensor/sf45_rotating_lidar.md) | 50 | 직렬 | Rotary Lidar (Used for [Collision Prevention](../computer_vision/collision_prevention.md)) | +| [GRF250](../sensor/grf_lidar.md) | 250 | 직렬 또는 I2C 버스 | Gimbal Range Finder | +| [GRF500](../sensor/grf_lidar.md) | 500 | 직렬 또는 I2C 버스 | Gimbal Range Finder | :::details Discontinued diff --git a/docs/ko/sensor/teraranger.md b/docs/ko/sensor/teraranger.md index 2350e6af46..6681cdc7a3 100644 --- a/docs/ko/sensor/teraranger.md +++ b/docs/ko/sensor/teraranger.md @@ -1,12 +1,17 @@ -# TeraRanger 거리계 +# TeraRanger Rangefinders (Discontinued) + +:::warning +TeraRanger Evo sensors were discontinued by Terabee in May 2024. +Limited stock may still be available from third-party resellers such as [Tribotix](https://tribotix.com/product/teraranger-evo-60m/). +::: TeraRanger는 적외선 ToF(Time-of-Flight) 기반의 다양한 경량 거리측정 센서입니다. They are typically faster and have greater range than sonar, and smaller and lighter than laser-based systems. PX4는 아래 장치들을 지원합니다. -- [TeraRanger Evo 60m](https://www.terabee.com/shop/lidar-tof-range-finders/teraranger-evo-60m/) (0.5 – 60 m) -- [TeraRanger Evo 600Hz](https://www.terabee.com/shop/lidar-tof-range-finders/teraranger-evo-600hz/) (0.75 - 8 m) +- [TeraRanger Evo 60m](https://tribotix.com/product/teraranger-evo-60m/) (0.5 – 60 m) +- [TeraRanger Evo 600Hz](https://tribotix.com/product/teraranger-evo-600hz/) (0.75 - 8 m) :::info PX4 also supports _TeraRanger One_ (I2C adapter required). diff --git a/docs/ko/sensor/thunderfly_tachometer.md b/docs/ko/sensor/thunderfly_tachometer.md index 412422f979..c9a68b9525 100644 --- a/docs/ko/sensor/thunderfly_tachometer.md +++ b/docs/ko/sensor/thunderfly_tachometer.md @@ -31,7 +31,7 @@ TFRPM01A 전자 장치에는 프로브가 연결 여부를 표시하는 LED가 홀 효과 센서 (자기 적으로 작동)는 먼지, 먼지 및 물이 감지된 로터에 접촉할 수있는 열악한 환경에 이상적입니다. 다양한 홀 효과 센서가 시판중입니다. -For example, a [55100 Miniature Flange Mounting Proximity Sensor](https://m.littelfuse.com/media?resourcetype=datasheets&itemid=6d69d457-770e-46ba-9998-012c5e0aedd7&filename=littelfuse-hall-effect-sensors-55100-datasheet) is a good choice. +For example, a [55100 Miniature Flange Mounting Proximity Sensor](https://www.littelfuse.com/assetdocs/littelfuse-hall-effect-sensors-55100-datasheet?assetguid=6d69d457-770e-46ba-9998-012c5e0aedd7) is a good choice. ![Example of Hall effect probe](../../assets/hardware/sensors/tfrpm/hall_probe.jpg) @@ -90,7 +90,7 @@ pcf8583 status ``` 드라이버가 실행중인 경우 I²C 포트가 실행중인 인스턴스의 다른 기본 매개변수와 함께 인쇄됩니다. -드라이버가 실행 중이 아니면, 위에서 설명한 절차를 사용하여 시작할 수 있습니다. +If the driver is not running it can be started using theprocedure described above. The [listener](../modules/modules_command.md#listener) command allows you to monitor RPM UORB messages from the running driver. diff --git a/docs/ko/sensor/vectornav.md b/docs/ko/sensor/vectornav.md index e38e66dca5..41f983dd72 100644 --- a/docs/ko/sensor/vectornav.md +++ b/docs/ko/sensor/vectornav.md @@ -42,7 +42,7 @@ This can be changed to any rigid rotation using the VectorNav Reference Frame Ro If using a GNSS-enabled product, the GNSS antenna must be mounted rigidly with respect to the inertial sensor and with an unobstructed sky view. If using a dual-GNSS-enabled product (VN-3X0), the secondary antenna must be mounted rigidly with respect to the primary antenna and the inertial sensor with an unobstructed sky view. -For more mounting requirements and recommendations, see the relevant [Quick Start Guide](https://www.vectornav.com/resources/quick-start-guides). +For more mounting requirements and recommendations, see the relevant [Quick Start Guide](https://www.vectornav.com/resources/technical-documentation/quick-start-guides). ## 펌웨어 설정 @@ -82,7 +82,7 @@ IMU data should be published at 800Hz (400Hz if using VN-300). ## VectorNav Configuration -Definitions for all commands and registers referenced in this section can be found in the respective [VectorNav ICD](https://www.vectornav.com/resources/interface-control-documents). +Definitions for all commands and registers referenced in this section can be found in the respective [VectorNav ICD](https://www.vectornav.com/resources/technical-documentation/interface-control-documents). Upon initialization, PX4 configures the VectorNav unit as follows: @@ -137,5 +137,5 @@ Published topics can be viewed using the `listener` command. ## Hardware Specifications -- [Product Briefs](https://www.vectornav.com/resources/product-briefs) -- [Datasheets](https://www.vectornav.com/resources/datasheets) +- [Product Briefs](https://www.vectornav.com/resources/product-information/product-briefs) +- [Datasheets](https://www.vectornav.com/resources/technical-documentation/datasheets) diff --git a/docs/ko/sensor_bus/translator_tfi2cadt.md b/docs/ko/sensor_bus/translator_tfi2cadt.md index 664b3797db..c8341c07d4 100644 --- a/docs/ko/sensor_bus/translator_tfi2cadt.md +++ b/docs/ko/sensor_bus/translator_tfi2cadt.md @@ -13,7 +13,7 @@ The module contains two pairs of connectors, each pair responsible for different :::info [TFI2CADT01](https://github.com/ThunderFly-aerospace/TFI2CADT01) is designed as open-source hardware with GPLv3 license. -It is commercially available from [ThunderFly](https://www.thunderfly.cz/) company or from [Tindie eshop](https://www.tindie.com/products/26353/). +It is commercially available from [ThunderFly](https://www.thunderfly.cz/) company or from [Tindie eshop](https://www.tindie.com/products/thunderfly/tfi2cadt01-pixhawk-i2c-address-translator/). ::: ## Address Translation Method @@ -30,7 +30,7 @@ If you need your own value for address translation, changing the configuration r The tachometer sensor [TFRPM01](../sensor/thunderfly_tachometer.md) can be set to two different addresses using a solder jumper. If the autopilot has three buses, only 6 sensors can be connected and no bus remains free (2 available addresses \* 3 I2C ports). In some multicopters or VTOL solutions, there is a need to measure the RPM of 8 or more elements. -The [TFI2CADT01](https://www.tindie.com/products/26353/) is highly recommended in this case. +The [TFI2CADT01](https://www.tindie.com/products/thunderfly/tfi2cadt01-pixhawk-i2c-address-translator/) is highly recommended in this case. ![Multiple sensors](../../assets/peripherals/i2c_tfi2cadt/tfi2cadt01_multi_tfrpm01.jpg) diff --git a/docs/ko/sim_gazebo_classic/index.md b/docs/ko/sim_gazebo_classic/index.md index 7b95cd2961..ad927b521d 100644 --- a/docs/ko/sim_gazebo_classic/index.md +++ b/docs/ko/sim_gazebo_classic/index.md @@ -347,7 +347,7 @@ The video below shows that the location of the environment is aligned with the w For extended development sessions it might be more convenient to start Gazebo Classic and PX4 separately or even from within an IDE. -In addition to the existing cmake targets that run `sitl_run.sh` with parameters for px4 to load the correct model it creates a launcher targets named `px4_` that is a thin wrapper around original sitl px4 app. +In addition to the existing cmake targets that run `sitl_run.sh` with parameters for PX4 to load the correct model it creates a launcher targets named `px4_` that is a thin wrapper around original sitl PX4 app. This thin wrapper simply embeds app arguments like current working directories and the path to the model file. To start Gazebo Classic and PX4 separately: @@ -368,7 +368,7 @@ To start Gazebo Classic and PX4 separately: - Start the debug session directly from IDE -This approach significantly reduces the debug cycle time because simulator is always running in background and you only re-run the px4 process which is very light. +This approach significantly reduces the debug cycle time because simulator is always running in background and you only re-run the PX4 process which is very light. ## Simulated Survey Camera diff --git a/docs/ko/sim_gazebo_gz/gazebo_models.md b/docs/ko/sim_gazebo_gz/gazebo_models.md index 880a74758e..f594c1cb3e 100644 --- a/docs/ko/sim_gazebo_gz/gazebo_models.md +++ b/docs/ko/sim_gazebo_gz/gazebo_models.md @@ -45,7 +45,7 @@ You can connect a PX4-enabled vehicle to an instance of _gz-server_ using severa You can then drag and drop any PX4 model into your simulation. ::: info - These models are taken from an web-server called [Gazebo Fuel](https://app.gazebosim.org/dashboard), which essentially acts as an online database for all types of models and worlds that can be launched in Gazebo. + These models are taken from an web-server called [Gazebo Fuel](https://app.gazebosim.org/PX4), which essentially acts as an online database for all types of models and worlds that can be launched in Gazebo. ::: diff --git a/docs/ko/sim_gazebo_gz/index.md b/docs/ko/sim_gazebo_gz/index.md index e46d72b927..606b40e082 100644 --- a/docs/ko/sim_gazebo_gz/index.md +++ b/docs/ko/sim_gazebo_gz/index.md @@ -5,7 +5,7 @@ Gazebo was previously known as "Gazebo Ignition" (while _Gazebo Classic_ was pre See the [official blog post](https://www.openrobotics.org/blog/2022/4/6/a-new-era-for-gazebo) for more information. ::: -[Gazebo](https://gazebosim.org/home) is an open source robotics simulator. +[Gazebo](https://gazebosim.org/docs/latest/getstarted/) is an open source robotics simulator. It supersedes the older [Gazebo Classic](../sim_gazebo_classic/index.md) simulator, and is the only supported version of Gazebo for Ubuntu 22.04 and onwards. **Supported Vehicles:** Quadrotor, Plane, VTOL, Rover @@ -303,7 +303,7 @@ where `ARGS` is a list of environment variables including: - `PX4_GZ_FOLLOW_OFFSET_X`, `PX4_GZ_FOLLOW_OFFSET_Y`, `PX4_GZ_FOLLOW_OFFSET_Z`: Set the relative offset of the follow camera to the vehicle. -The PX4 Gazebo worlds and and models databases [can be found on GitHub here](https://github.com/PX4/PX4-gazebo-models). +The PX4 Gazebo worlds and models databases [can be found on GitHub here](https://github.com/PX4/PX4-gazebo-models). :::info `gz_env.sh.in` is compiled and made available in `$PX4_DIR/build/px4_sitl_default/rootfs/gz_env.sh` diff --git a/docs/ko/sim_gazebo_gz/tools_avl_automation.md b/docs/ko/sim_gazebo_gz/tools_avl_automation.md index d25780226b..a3eb392fa2 100644 --- a/docs/ko/sim_gazebo_gz/tools_avl_automation.md +++ b/docs/ko/sim_gazebo_gz/tools_avl_automation.md @@ -121,7 +121,7 @@ From the stability derivatives log file, the following advanced lift drag plugin | CYa | CYa | dCy/da (sideforce slope wrt alpha) | | Cla | Cell | dCl/da (roll moment slope wrt alpha) | | Cma | Cema | dCm/da (pitching moment slope wrt aLpha - before stall) | -| Cna | Cena | dCn/da (yaw moment slope wrt alpha) | +| Can | Cena | dCn/da (yaw moment slope wrt alpha) | | CLb | CLb | dCL/dbeta (lift coefficient slope wrt beta) | | CYb | CYb | dCY/dbeta (side force slope wrt beta) | | Clb | Cell | dCl/dbeta (roll moment slope wrt beta) | diff --git a/docs/ko/sim_gazebo_gz/vehicles.md b/docs/ko/sim_gazebo_gz/vehicles.md index 6c93b94d49..a05193bf5e 100644 --- a/docs/ko/sim_gazebo_gz/vehicles.md +++ b/docs/ko/sim_gazebo_gz/vehicles.md @@ -8,7 +8,7 @@ Supported vehicle types include: mutirotor, VTOL, Plane, Rover. :::warning See [Gazebo Classic Vehicles](../sim_gazebo_classic/vehicles.md) for vehicles that work with the older [Gazebo "Classic" simulation](../sim_gazebo_classic/index.md). -Note that vehicle models are not interchangable between the two versions of the simulator: the vehicles on this page only work with (new) [Gazebo](../sim_gazebo_gz/index.md). +Note that vehicle models are not interchangeable between the two versions of the simulator: the vehicles on this page only work with (new) [Gazebo](../sim_gazebo_gz/index.md). ::: ## 멀티콥터 diff --git a/docs/ko/sim_gazebo_gz/worlds.md b/docs/ko/sim_gazebo_gz/worlds.md index 31e026fabe..2fa1f5b063 100644 --- a/docs/ko/sim_gazebo_gz/worlds.md +++ b/docs/ko/sim_gazebo_gz/worlds.md @@ -104,4 +104,4 @@ The PX4 toolchain will automatically spawn a world that has the same name as the The model specific worlds are: -- [Aruco world](#aruco): Default world with an [ArUco marker](https://docs.opencv.org/4.x/d5/dae/tutorial_aruco_detection.html) that can be used with with [x500_mono_cam_down](../sim_gazebo_gz/vehicles.md#x500-quadrotor-with-monocular-camera-down-facing) for testing [precision landing](../advanced_features/precland.md). +- [Aruco world](#aruco): Default world with an [ArUco marker](https://docs.opencv.org/4.x/d5/dae/tutorial_aruco_detection.html) that can be used with [x500_mono_cam_down](../sim_gazebo_gz/vehicles.md#x500-quadrotor-with-monocular-camera-down-facing) for testing [precision landing](../advanced_features/precland.md). diff --git a/docs/ko/sim_hawkeye/index.md b/docs/ko/sim_hawkeye/index.md new file mode 100644 index 0000000000..15d8d2ed28 --- /dev/null +++ b/docs/ko/sim_hawkeye/index.md @@ -0,0 +1,61 @@ +# Hawkeye Visualizer + +[Hawkeye](https://px4.github.io/Hawkeye/) is a real-time 3D flight _visualizer_ for PX4. + +Hawkeye is the natural pair for [SIH](../sim_sih/index.md) — SIH runs the physics of an aircraft simulation and outputs MAVLink [HIL_STATE_QUATERNION](https://mavlink.io/en/messages/common.html#HIL_STATE_QUATERNION) messages, Hawkeye uses these to show you what's happening. + +Hawkeye has zero runtime dependencies, supports up to 16 vehicles simultaneously, and can replay PX4 ULog (`.ulg`) flight logs with transport controls, markers, and multi-drone correlation analysis. + +## Install + +### macOS (Homebrew) + +```sh +brew tap PX4/px4 +brew install PX4/px4/hawkeye +``` + +### Linux (Debian/Ubuntu) + +Download the `.deb` from the [Hawkeye releases page](https://github.com/PX4/Hawkeye/releases/latest): + +```sh +sudo dpkg -i hawkeye-*.deb +``` + +### Windows and source builds + +For Ubuntu 24.04 or later in WSL2 you can install the packages in the same way: + +```sh +sudo dpkg -i hawkeye-*.deb +``` + +For other versions of Ubuntu (or native Windows builds) you may need to [Build from source](https://px4.github.io/Hawkeye/developer/build) (Hawkeye docs). + +## Usage with SIH + +Start PX4 SIH, then launch Hawkeye in a separate terminal: + +```sh +# Terminal 1 +make px4_sitl sihsim_quadx + +# Terminal 2 +hawkeye +``` + +Hawkeye listens on UDP port 19410 — the same port SIH sends [HIL_STATE_QUATERNION](https://mavlink.io/en/messages/common.html#HIL_STATE_QUATERNION) on — so no configuration is needed. +The vehicle appears in the Hawkeye window as soon as SIH starts streaming. + +For fixed-wing or tailsitter simulation, Hawkeye auto-detects the vehicle type from MAVLink `HEARTBEAT` and loads the matching 3D model. + +## Full documentation + +Complete documentation — including multi-vehicle SITL, ULog replay, HUD modes, camera controls, and correlation analysis — lives at **[px4.github.io/Hawkeye](https://px4.github.io/Hawkeye/)**. + +- [First SITL run](https://px4.github.io/Hawkeye/first-sitl) — the shortest path from install to seeing a vehicle move +- [Multi-Drone Replay](https://px4.github.io/Hawkeye/multi_drone) — compare multiple flights with deconfliction and correlation +- [Live SITL Integration](https://px4.github.io/Hawkeye/sitl) — single-vehicle and multi-instance swarm workflows +- [Command-Line Reference](https://px4.github.io/Hawkeye/cli) — every CLI flag with examples +- [Source code](https://github.com/PX4/Hawkeye) diff --git a/docs/ko/sim_jmavsim/index.md b/docs/ko/sim_jmavsim/index.md index 5e1a543f4c..91153e84d2 100644 --- a/docs/ko/sim_jmavsim/index.md +++ b/docs/ko/sim_jmavsim/index.md @@ -22,37 +22,31 @@ jMAVSim can also be used for HITL Simulation ([as shown here](../simulation/hitl ## 설치 -jMAVSim setup is included in our [standard build instructions](../dev_setup/dev_env.md) for Ubuntu Linux and Windows. -Follow the instructions below to install jMAVSim on macOS. +jMAVSim requires JDK 17 or later. +On Ubuntu and Windows, the [standard development environment setup](../dev_setup/dev_env.md) scripts install all required dependencies including Java. +On macOS, you need to install Java manually as shown below. ### macOS -To setup the environment for [jMAVSim](../sim_jmavsim/index.md) simulation: +jMAVSim requires OpenJDK 17 or later. +Install it via Homebrew: -1. Install a recent version of Java (e.g. Java 15). - You can download [Java 15 (or later) from Oracle](https://www.oracle.com/java/technologies/downloads/?er=221886) or use [Eclipse Temurin](https://adoptium.net): +```sh +brew install openjdk@17 +``` - ```sh - brew install --cask temurin - ``` +Homebrew installs OpenJDK but does not link it into your `PATH`, so you need to set `JAVA_HOME` for jMAVSim to find it. +Add this to your shell profile (e.g. `~/.zshrc`): -2. Install jMAVSim: - - ```sh - brew install px4-sim-jmavsim - ``` - - :::warning - PX4 v1.11 and beyond require at least JDK 15 for jMAVSim simulation. - - For earlier versions, macOS users might see the error `Exception in thread "main" java.lang.UnsupportedClassVersionError:`. - You can find the fix in the [jMAVSim with SITL > Troubleshooting](../sim_jmavsim/index.md#troubleshooting)). - -::: +```sh +export JAVA_HOME=$(/usr/libexec/java_home -v 17) +``` ## Simulation Environment -Software in the Loop Simulation runs the complete system on the host machine and simulates the autopilot. It connects via local network to the simulator. The setup looks like this: +Software in the Loop Simulation runs the complete system on the host machine and simulates the autopilot. +It connects via local network to the simulator. +The setup looks like this: [![Mermaid graph: SITL Simulator](https://mermaid.ink/img/eyJjb2RlIjoiZ3JhcGggTFI7XG4gIFNpbXVsYXRvci0tPk1BVkxpbms7XG4gIE1BVkxpbmstLT5TSVRMOyIsIm1lcm1haWQiOnsidGhlbWUiOiJkZWZhdWx0In0sInVwZGF0ZUVkaXRvciI6ZmFsc2V9)](https://mermaid-js.github.io/mermaid-live-editor/#/edit/eyJjb2RlIjoiZ3JhcGggTFI7XG4gIFNpbXVsYXRvci0tPk1BVkxpbms7XG4gIE1BVkxpbmstLT5TSVRMOyIsIm1lcm1haWQiOnsidGhlbWUiOiJkZWZhdWx0In0sInVwZGF0ZUVkaXRvciI6ZmFsc2V9) @@ -95,7 +89,8 @@ It will also bring up a window showing a 3D view of the [jMAVSim](https://github ## Taking it to the Sky -The system will start printing status information. You will be able to start flying once you have a position lock (shortly after the console displays the message: _EKF commencing GPS fusion_). +The system will start printing status information. +You will be able to start flying once you have a position lock (shortly after the console displays the message: _EKF commencing GPS fusion_). To takeoff enter the following into the console: @@ -220,11 +215,13 @@ To disable lockstep in: ## Extending and Customizing -To extend or customize the simulation interface, edit the files in the **Tools/jMAVSim** folder. The code can be accessed through the[jMAVSim repository](https://github.com/px4/jMAVSim) on Github. +To extend or customize the simulation interface, edit the files in the **Tools/jMAVSim** folder. +The code can be accessed through the[jMAVSim repository](https://github.com/px4/jMAVSim) on Github. :::info The build system enforces the correct submodule to be checked out for all dependencies, including the simulator. -It will not overwrite changes in files in the directory, however, when these changes are committed the submodule needs to be registered in the Firmware repo with the new commit hash. To do so, `git add Tools/jMAVSim` and commit the change. +It will not overwrite changes in files in the directory, however, when these changes are committed the submodule needs to be registered in the Firmware repo with the new commit hash. +To do so, `git add Tools/jMAVSim` and commit the change. This will update the GIT hash of the simulator. ::: @@ -237,6 +234,75 @@ The simulation can be [interfaced to ROS](../simulation/ros_interface.md) the sa - The startup scripts are discussed in [System Startup](../concept/system_startup.md). - The simulated root file system ("`/`" directory) is created inside the build directory here: `build/px4_sitl_default/rootfs`. +## Display-Only Mode + +jMAVSim can run as a display-only renderer for other simulators (like [SIH](../sim_sih/index.md)), with its internal physics disabled. +In this mode, jMAVSim receives vehicle position via MAVLink and only renders the 3D view. + +To use jMAVSim as a display for SIH running in SITL: + +```sh +# Start SIH first +make px4_sitl_sih sihsim_quadx + +# In another terminal, start jMAVSim in display-only mode +./Tools/simulation/jmavsim/jmavsim_run.sh -p 19410 -u -q -o # 19410 is the default SIH display port +``` + +For SIH running on flight controller hardware: + +```sh +./Tools/simulation/jmavsim/jmavsim_run.sh -q -d /dev/ttyACM0 -b 2000000 -o +``` + +Use `-a` for airplane display or `-t` for tailsitter display. + +## Command-Line Reference + +The `jmavsim_run.sh` launch script accepts the following flags: + +| Flag | 설명 | +| ------------- | -------------------------------------------------------------------------------------------- | +| `-b ` | Serial baud rate (default: 921600) | +| `-d ` | Serial device path (e.g., `/dev/ttyACM0`) | +| `-u` | Use UDP connection instead of serial | +| `-i ` | Simulated MAVLink system ID | +| `-p ` | UDP port (default: 14560) | +| `-q` | No interactive console | +| `-s ` | TCP serial port | +| `-r ` | Render rate in Hz | +| `-l` | Enable lockstep | +| `-o` | Display-only mode (disable physics, render only) | +| `-a` | Use airplane model | +| `-t` | Use tailsitter model | +| `HEADLESS=1` | Environment variable: run without GUI window | + +## How jMAVSim Works + +jMAVSim is a Java-based lightweight simulator that communicates with PX4 via MAVLink HIL (Hardware-In-the-Loop) messages. + +In normal mode: + +1. PX4 sends actuator commands via [HIL_ACTUATOR_CONTROLS](https://mavlink.io/en/messages/common.html#HIL_ACTUATOR_CONTROLS). +2. jMAVSim runs its physics engine to compute the vehicle state. +3. jMAVSim sends sensor data back via [HIL_SENSOR](https://mavlink.io/en/messages/common.html#HIL_SENSOR) and [HIL_GPS](https://mavlink.io/en/messages/common.html#HIL_GPS). + +In **display-only mode** (`-o` flag), jMAVSim disables its physics engine and only reads [HIL_STATE_QUATERNION](https://mavlink.io/en/messages/common.html#HIL_STATE_QUATERNION) messages to render the vehicle position. +This allows it to visualize vehicles from other simulators like SIH. + +jMAVSim supports [lockstep synchronization](#lockstep) with PX4 (enabled with `-l` flag), ensuring deterministic simulation results. + +## Keyboard Shortcuts + +Camera modes in the jMAVSim 3D view: + +| Key | Camera Mode | +| -------------------------------- | ------------------------------------------------------- | +| **F** | First person (attached to vehicle) | +| **S** | Stationary (fixed position) | +| **G** | Gimbal (follows vehicle orientation) | +| **(default)** | Third person follow | + ## 문제 해결 ### java.long.NoClassDefFoundError @@ -310,7 +376,7 @@ sudo gedit /etc/java-8-openjdk/accessibility.properties and comment out the line indicated below: ```sh -#assistive_technologies=org.GNOME.Acessibility.AtkWrapper +#assistive_technologies=org.GNOME.Accessibility.AtkWrapper ``` For more info, check [this GitHub issue](https://github.com/PX4/PX4-Autopilot/issues/9557). @@ -327,8 +393,8 @@ Exception in thread "main" java.lang.UnsupportedClassVersionError: me/drton/jmav This error is telling you, you need a more recent version of Java in your environment. Class file version 58 corresponds to jdk14, version 59 to jdk15, version 60 to jdk 16 etc. -To fix it under macOS, we recommend installing OpenJDK through homebrew +To fix it under macOS, install a newer OpenJDK via Homebrew: ```sh -brew install --cask adoptopenjdk16 +brew install openjdk@17 ``` diff --git a/docs/ko/sim_sih/hardware.md b/docs/ko/sim_sih/hardware.md new file mode 100644 index 0000000000..6b6f763499 --- /dev/null +++ b/docs/ko/sim_sih/hardware.md @@ -0,0 +1,183 @@ +# SIH on Flight Controller Hardware + +[SIH](../sim_sih/index.md) can run directly on flight controller hardware with `SYS_AUTOSTART` set to the desired value for the frame. +This replaces real sensors with simulated data while running on the actual autopilot. + +For a comparison of SIH and HITL on hardware, see [Hardware Simulation](../simulation/hardware.md). + +## Starting SIH + +1. Connect the flight controller to QGroundControl via USB. +2. Set `SYS_AUTOSTART` parameter to the desired airframe. +3. Reboot the flight controller. +4. The SIH module starts automatically and provides simulated sensor data. + +:::tip +To ensure there is no leftover parameter from previous setup, it is recommended to reset all the parameters to firmware's default before modifying `SYS_AUTOSTART`. +::: + +The following airframes are supported. + +| SIH Airframe | SYS_AUTOSTART | Status | +| --------------- | ---------------------------------- | ------ | +| Quadrotor X | 1100 | Stable | +| Airplane | 1101 | 실험 | +| Tailsitter Duo | 1102 | 실험 | +| 표준 VTOL | 1103 | 실험 | +| Ackermann Rover | 1104 | 실험 | +| Hexacopter X | 1105 | 실험 | + +Once running, the vehicle can be controlled from QGroundControl or an RC controller. + +## Firmware Builds with SIH + +The SIH module is included in many, but not all, default firmware builds. +This list can change between PX4 releases. +Always verify using the method in [Check if SIH is in Firmware](#check-if-sih-is-in-firmware). + +The table below lists build targets that include SIH at the time of writing: + +| Build Target | 보드 | +| ------------------------------------ | ------------------------------------------- | +| `px4_fmu-v3_default` | Pixhawk 2 (Cube Black) | +| `px4_fmu-v4_default` | Pixhawk 3 Pro | +| `px4_fmu-v4pro_default` | Pixracer | +| `px4_fmu-v5_default` | Pixhawk 4 | +| `px4_fmu-v5x_default` | Pixhawk 5X | +| `px4_fmu-v6c_default` | Pixhawk 6C | +| `px4_fmu-v6c_raptor` | Pixhawk 6C (Raptor) | +| `px4_fmu-v6x_multicopter` | Pixhawk 6X (multicopter) | +| `auterion_fmu-v6s_default` | Auterion FMU-v6S | +| `auterion_fmu-v6x_default` | Auterion FMU-v6X | +| `holybro_durandal-v1_default` | Holybro Durandal | +| `holybro_kakuteh7_default` | Holybro Kakute H7 | +| `holybro_kakuteh7v2_default` | Holybro Kakute H7 V2 | +| `holybro_pix32v5_default` | Holybro Pix32 V5 | +| `cuav_nora_default` | CUAV Nora | +| `cuav_x7pro_default` | CUAV X7 Pro | +| `cuav_x25-evo_default` | CUAV X25 EVO | +| `cuav_x25-super_default` | CUAV X25 Super | +| `cubepilot_cubeyellow_default` | CubePilot Cube Yellow | +| `mro_pixracerpro_default` | MRO PixRacer Pro | +| `mro_x21_default` | MRO X2.1 | +| `mro_ctrl-zero-h7_default` | MRO Ctrl Zero H7 | +| `mro_ctrl-zero-h7-oem_default` | MRO Ctrl Zero H7 OEM | +| `mro_ctrl-zero-f7_default` | MRO Ctrl Zero F7 | +| `mro_ctrl-zero-f7-oem_default` | MRO Ctrl Zero F7 OEM | +| `mro_ctrl-zero-classic_default` | MRO Ctrl Zero Classic | +| `3dr_ctrl-zero-h7-oem-revg_default` | 3DR Ctrl Zero H7 OEM RevG | +| `modalai_fc-v1_default` | ModalAI FC V1 | +| `nxp_fmuk66-v3_default` | NXP FMUK66-V3 | +| `nxp_fmuk66-e_default` | NXP FMUK66-E | +| `radiolink_PIX6_default` | Radiolink PIX6 | +| `siyi_n7_default` | SIYI N7 | +| `sky-drones_smartap-airlink_default` | Sky-Drones SmartAP Airlink | +| `uvify_core_default` | UVify Core | +| `atl_mantis-edu_default` | ATL Mantis EDU | +| `av_x-v1_default` | AV X-V1 | +| `narinfc_h7_default` | NarinFC H7 | +| `thepeach_k1_default` | ThePeach K1 | +| `thepeach_r1_default` | ThePeach R1 | +| `airmind_mindpx-v2_default` | AirMind MindPX V2 | +| `beaglebone_blue_default` | 비글본 블루 | +| `bluerobotics_navigator_default` | BlueRobotics Navigator | +| `emlid_navio2_default` | Emlid Navio2 | +| `px4_raspberrypi_default` | 라즈베리파이 | +| `scumaker_pilotpi_default` | Scumaker PilotPi | + +:::info +Some boards (e.g., `px4_fmu-v6x_default`, `cubepilot_cubeorange_default`) do not include SIH in their default build due to flash memory constraints. +You can add SIH to any board -- see [Check if SIH is in Firmware](#check-if-sih-is-in-firmware). +::: + +## Requirements + +- A flight controller with SIH module included in firmware (see [Firmware Builds with SIH](#firmware-builds-with-sih)). +- USB connection for QGroundControl. +- Optional: jMAVSim for 3D visualization via serial link (see [Visualization](#hardware-visualization)). + +## Check if SIH is in Firmware + +SIH is included in [most default firmware builds](#check-if-sih-is-in-firmware). +To verify, search for `sih` in the parameter list in QGroundControl. If `SIH_*` parameters are available, the module is included. + +To add SIH to a custom build, enable it in the board configuration: + +```txt +CONFIG_MODULES_SIMULATION_SIMULATOR_SIH=y +``` + +## Visualization (Optional) {#hardware-visualization} + +If you need a visual aid to see what the simulated vehicle is doing on hardware: + +### QGroundControl + +Connect the flight controller via USB. QGC shows the vehicle on the map view with attitude, position, and telemetry, the same as a real flight. + +### jMAVSim (3D Display-Only) + +jMAVSim can render a 3D view of the vehicle over a serial connection. No physics are simulated in jMAVSim -- it is display-only. + +```sh +./Tools/simulation/jmavsim/jmavsim_run.sh -q -d /dev/ttyACM0 -b 2000000 -o +``` + +Where `/dev/ttyACM0` is the serial device for the flight controller. +On macOS, this is typically `/dev/tty.usbmodem*`. + +## Controlling Actuators + +:::warning +If you want to control throttle actuators in SIH, make sure to remove propellers for safety. +::: + +In some scenarios, it may be useful to control an actuator while running SIH on hardware. For example, you might want to verify that winches or grippers are functioning correctly by checking the servo responses. + +**To enable actuator control in SIH:** + +1. Configure PWM parameters in the airframe file: + + Ensure your airframe file includes the necessary parameters to map PWM outputs to the correct channels. + + For example, if a servo is connected to MAIN 3 and you want to map it to AUX1 on your RC, use the following command: + + `param set-default PWM_MAIN_FUNC3 407` + + You can find a full list of available values for `PWM_MAIN_FUNCn` [here](../advanced_config/parameter_reference.md#PWM_MAIN_FUNC1). In this case, `407` maps the MAIN 3 output to AUX1 on the RC. + + Alternatively, you can use the [`PWM_AUX_FUNCn`](../advanced_config/parameter_reference.md#PWM_AUX_FUNC1) parameters. + + You may also configure the output as desired: + + - Disarmed PWM: ([`PWM_MAIN_DISn`](../advanced_config/parameter_reference.md#PWM_MAIN_DIS1) / [`PWM_AUX_DIS1`](../advanced_config/parameter_reference.md#PWM_AUX_DIS1)) + - Minimum PWM ([`PWM_MAIN_MINn`](../advanced_config/parameter_reference.md#PWM_MAIN_MIN1) / [`PWM_AUX_MINn`](../advanced_config/parameter_reference.md#PWM_AUX_MIN1)) + - Maximum PWM ([`PWM_MAIN_MAXn`](../advanced_config/parameter_reference.md#PWM_MAIN_MAX1) / [`PWM_AUX_MAXn`](../advanced_config/parameter_reference.md#PWM_AUX_MAX1)) + +2. Manually start the PWM output driver + + For safety, the PWM driver is not started automatically in SIH. To enable it, run the following command in the MAVLink shell: + + ```sh + pwm_out start + ``` + + **And to disable it again:** + + ```sh + pwm_out stop + ``` + +## Adding New Airframes (FC) + +Airframe configuration for SIH on a flight controller differs from SITL in a few ways: + +- Airframe file goes in `ROMFS/px4fmu_common/init.d/airframes` and follows the naming template `${ID}_${model_name}.hil`, where `ID` is the `SYS_AUTOSTART_ID` used to select the airframe, and `model_name` is the airframe model name. +- Add the model name in `ROMFS/px4fmu_common/init.d/airframes/CMakeLists.txt` to generate a corresponding make target. +- Actuators are configured with `HIL_ACT_FUNC*` parameters (not the usual `PWM_MAIN_FUNC*` parameters). + This is to avoid using the real actuator outputs in SIH. + Similarly, the bitfield for inverting individual actuator output ranges is `HIL_ACT_REV`, rather than `PWM_MAIN_REV`. + +For general airframe setup (SIH parameters, EKF2 tuning), see [Adding New Airframes](index.md#adding-new-airframes) on the main SIH page. + +For examples, see the `.hil` airframes in [ROMFS/px4fmu_common/init.d/airframes](https://github.com/PX4/PX4-Autopilot/tree/main/ROMFS/px4fmu_common/init.d/airframes). diff --git a/docs/ko/sim_sih/index.md b/docs/ko/sim_sih/index.md index 413302da84..57ec201a93 100644 --- a/docs/ko/sim_sih/index.md +++ b/docs/ko/sim_sih/index.md @@ -1,288 +1,231 @@ -# Simulation-In-Hardware (SIH) +# SIH Simulation - + -:::warning -This simulator is [community supported and maintained](../simulation/community_supported_simulators.md). -It may or may not work with current versions of PX4 (known to work in PX4 v1.14). +SIH (Simulation-In-Hardware) is a lightweight, headless simulator with zero external dependencies that runs physics directly inside PX4 via uORB messages. +No GUI, no external processes, no rendering overhead — just PX4 running a C++ physics model. +This makes it the fastest way to iterate on flight code. -See [Toolchain Installation](../dev_setup/dev_env.md) for information about the environments and tools supported by the core development team. +:::tip +SIH is also available as a [prebuilt Docker container or .deb package](../simulation/px4_sitl_prebuilt_packages.md), which is useful if you don't need to modify PX4 itself. +See [PX4 Simulation QuickStart](../simulation/px4_simulation_quickstart.md) for a one-line instruction on how this is used. ::: -Simulation-In-Hardware (SIH) is an alternative to [Hardware In The Loop simulation (HITL)](../simulation/hitl.md) for quadrotors, fixed-wing vehicles (airplane), and VTOL tailsitters. - -SIH can be used by new PX4 users to get familiar with PX4 and the different modes and features, and of course to learn to fly a vehicle using an RC controller in simulation, which is not possible using SITL. - ## 개요 -With SIH the whole simulation is running on embedded hardware: the controller, the state estimator, and the simulator. -The Desktop computer is only used to display the virtual vehicle. +SIH runs as a PX4 module that replaces real sensor and actuator hardware with a simulated physics model. +It provides simulated IMU, GPS, barometer, magnetometer, and airspeed sensor data via uORB, and reads actuator outputs to update the vehicle state at each timestep. -![Simulator MAVLink API](../../assets/diagrams/SIH_diagram.png) +The simulation runs in lockstep with PX4, ensuring deterministic and reproducible results. +It also integrates seamlessly with ROS 2 with no additional configuration (see [ROS 2 Integration](#ros-2-integration) below). -### 호환성 +Two modes are supported: -- SIH is compatible with all PX4 supported boards except those based on FMUv2. -- SIH for MC quadrotor is supported from PX4 v1.9. -- SIH for FW (airplane) and VTOL tailsitter are supported from PX4 v1.13. -- SIH as SITL (without hardware) from PX4 v1.14. -- SIH for Standard VTOL from PX4 v1.16. -- SIH for MC Hexacopter X from PX4 v1.17. -- SIH for Ackermann Rover from PX4 v1.17. +- **[SITL](#sih-as-sitl-no-fc):** Runs on your computer with no hardware needed, and headless (without a UI) by default. + _This is the fastest and easiest way to start a simulation on PX4._ -### Benefits +- **[SIH on flight controller hardware](#sih-on-flight-controller-hardware):** Runs the entire simulation on the autopilot (`SYS_HITL=2`). -SIH provides several benefits over HITL: +### Supported Vehicle Types -- It ensures synchronous timing by avoiding the bidirectional connection to the computer. - As a result the user does not need such a powerful desktop computer. -- The whole simulation remains inside the PX4 environment. - Developers who are familiar with PX4 can more easily incorporate their own mathematical model into the simulator. - They can, for instance, modify the aerodynamic model, or noise level of the sensors, or even add a sensor to be simulated. -- The physical parameters representing the vehicle (such as mass, inertia, and maximum thrust force) can easily be modified from the [SIH parameters](../advanced_config/parameter_reference.md#simulation-in-hardware). +The following vehicle types are supported: -## Requirements - -To run the SIH, you will need a: - -- [Flight controller](../flight_controller/index.md), such as a Pixhawk-series board. - - ::: info - From PX4 v1.14 you can run [SIH "as SITL"](#sih-as-sitl-no-fc), in which case a flight controller is not required. - -::: - -- [Manual controller](../getting_started/px4_basic_concepts.md#manual-control): either a [radio control system](../getting_started/rc_transmitter_receiver.md) or a [joystick](../config/joystick.md). - -- QGroundControl for flying the vehicle via GCS. - -- Development computer for visualizing the virtual vehicle (optional). - -## Check if SIH is in Firmware - -The modules required for SIH are built into most PX4 firmware by default. -These include: [`pwm_out_sim`](../modules/modules_driver.md#pwm-out-sim), [`sensor_baro_sim`](../modules/modules_system.md#sensor-baro-sim), [`sensor_gps_sim`](../modules/modules_system.md#sensor-gps-sim) and [`sensor_mag_sim`](../modules/modules_system.md#sensor-mag-sim). - -To check that these are present on your flight controller: - -1. Start QGroundControl. - -2. Open **Analyze Tools > Mavlink Console**. - -3. Enter the following commands in the console: - - ```sh - pwm_out_sim status - ``` - - ```sh - sensor_baro_sim status - ``` - - ```sh - sensor_gps_sim status - ``` - - ```sh - sensor_mag_sim status - ``` - - ::: tip - Note that when using SIH on real hardware you do not need to additionally enable the modules using their corresponding parameters ([SENS_EN_GPSSIM](../advanced_config/parameter_reference.md#SENS_EN_GPSSIM), [SENS_EN_BAROSIM](../advanced_config/parameter_reference.md#SENS_EN_BAROSIM), [SENS_EN_MAGSIM](../advanced_config/parameter_reference.md#SENS_EN_MAGSIM)). - -::: - -4. If a valid status is returned you can start using SIH. - -If any of the returned values above are `nsh: MODULENAME: command not found`, then you don't have the module installed. -In this case you will have to add them to your board configuration and then rebuild and install the firmware. - -### Adding SIH to the Firmware - -Add the following key to the configuration file for your flight controller to include all the required modules (for an example see [boards/px4/fmu-v6x/default.px4board](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/fmu-v6x/default.px4board)). -Then re-build the firmware and flash it to the board. - -```text -CONFIG_MODULES_SIMULATION_SIMULATOR_SIH=y -``` - -:::details -What does this do? - -This installs the dependencies in [simulator_sih/Kconfig](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/simulation/simulator_sih/Kconfig). -It is equivalent to: - -```text -CONFIG_MODULES_SIMULATION_PWM_OUT_SIM=y -CONFIG_MODULES_SIMULATION_SENSOR_BARO_SIM=y -CONFIG_MODULES_SIMULATION_SENSOR_GPS_SIM=y -CONFIG_MODULES_SIMULATION_SENSOR_MAG_SIM=y -``` - -::: - -As an alterative to updating configuration files manually, you can use the following command to launch a GUI configuration tool, and interactively enable the required modules at the path: **modules > Simulation > simulator_sih**. -For example, to update the fmu-v6x configuration you would use: - -```sh -make px4_fmu-v6x boardconfig -``` - -After uploading, check that the required modules are present. - -:::note -To use rover in SIH you must use the [rover build](../config_rover/index.md#flashing-the-rover-build) or add the rover modules to your board configuration. -::: - -## Starting SIH - -To set up/start SIH: - -1. Connect the flight controller to the desktop computer with a USB cable. -2. Open QGroundControl and wait for the flight controller too boot and connect. -3. Open [Vehicle Setup > Airframe](../config/airframe.md) then select the desired frame: - - [SIH Quadcopter X](../airframes/airframe_reference.md#copter_simulation_sih_quadcopter_x) - - **SIH Hexacopter X** (currently only has an airframe for SITL to safe flash so on flight control hardware it has to be manually configured equivalently). - - [SIH plane AERT](../airframes/airframe_reference.md#plane_simulation_sih_plane_aert) - - [SIH Tailsitter Duo](../airframes/airframe_reference.md#vtol_simulation_sih_tailsitter_duo) - - [SIH Standard VTOL QuadPlane](../airframes/airframe_reference.md#vtol_simulation_sih_standard_vtol_quadplane) - - [SIH Ackermann Rover](../airframes/airframe_reference.md#rover_rover_sih_rover_ackermann) - -The autopilot will then reboot. -The `sih` module is started on reboot, and the vehicle should be displayed on the ground control station map. +| Vehicle | Make Target | Status | +| ---------------------------------------------------------------------------------- | ---------------------------------------- | ------ | +| Quadrotor X | `make px4_sitl_sih sihsim_quadx` | Stable | +| Hexarotor X | `make px4_sitl_sih sihsim_hexa` | 실험 | +| Fixed-wing (airplane) | `make px4_sitl_sih sihsim_airplane` | 실험 | +| Tailsitter VTOL | `make px4_sitl_sih sihsim_xvert` | 실험 | +| Standard VTOL (QuadPlane) | `make px4_sitl_sih sihsim_standard_vtol` | 실험 | +| Ackermann Rover | `make px4_sitl_sih sihsim_rover` | 실험 | :::warning -The airplane needs to takeoff in manual mode at full throttle. -Also, if the airplane crashes the state estimator might lose its fix. +Only the quadrotor vehicle type is stable and recommended for development. All other vehicle types (hexarotor, fixed-wing, VTOL, rover) are experimental and may have aerodynamic model or controller interaction issues that produce unrealistic flight behaviour. ::: -## Display/Visualisation (optional) +### How SIH Works -The SIH-simulated vehicle can be displayed using [jMAVSim](../sim_jmavsim/index.md) as a visualiser. +![SIH Overview](../../assets/simulation/sih_overview.svg) + +SIH differs from external simulators: + +- **No MAVLink simulator API:** SIH communicates entirely via uORB (PX4's internal message bus). +- **No external process:** The physics model runs in the same PX4 process. +- **Lockstep by default:** Simulation time is synchronized with PX4 scheduling. + +## SIH as SITL {#sih-as-sitl-no-fc} + +SIH as SITL is the easiest and fastest way to set up a simulator with PX4. +It requires no hardware, and very few extra dependencies. + +### 빠른 시작 + +To build PX4 and run SIH for a quadrotor: + +```sh +make px4_sitl_sih sihsim_quadx +``` + +QGroundControl auto-connects on UDP port 14550 — just open it and you'll see the vehicle. +Note that the simulation is "headless" by default (has no GUI), but you can use an external viewer. + +See [Supported vehicle types](#supported-vehicle-types) for other vehicles. :::tip -SIH does not _need_ a visualiser — you can connect with QGroundControl and fly the vehicle without one. +Use the `px4_sitl_sih` build target! +The `px4_sitl` target will work, but will also build Gazebo libraries. ::: -To display the simulated vehicle: +### Visualization (Optional) {#sitl-visualization} -1. Close _QGroundControl_ (if open). +SIH is intentionally headless by default. +If you need a visual aid to see what the vehicle is doing you can use QGroundControl to track path over ground, and/or [Hawkeye](../sim_hawkeye/index.md) as a 3D viewer. -2. Unplug and replug the flight controller (allow a few seconds for it to boot). +#### QGroundControl -3. Start jMAVSim by calling the script **jmavsim_run.sh** from a terminal: +QGC auto-connects on UDP port 14550. Open QGC while SIH is running and the vehicle appears on the map view with attitude, position, and telemetry. - ```sh - ./Tools/simulation/jmavsim/jmavsim_run.sh -q -d /dev/ttyACM0 -b 2000000 -o - ``` +#### Hawkeye (3D Visualizer) - where the flags are: +[Hawkeye](../sim_hawkeye/index.md) renders a real-time 3D view of the vehicle using MAVLink position data. +No physics are simulated in Hawkeye — it is a visualizer only. - - `-q` to allow the communication to _QGroundControl_ (optional). - - `-d` to start the serial device `/dev/ttyACM0` on Linux. - On macOS this would be `/dev/tty.usbmodem1`. - - `-b` to set the serial baud rate to `2000000`. - - `-o` to start jMAVSim in _display Only_ mode (i.e. the physical engine is turned off and jMAVSim only displays the trajectory given by the SIH in real-time). - - add a flag `-a` to display an aircraft or `-t` to display a tailsitter. - If this flag is not present a quadrotor will be displayed by default. - -4. After few seconds, _QGroundControl_ can be opened again. - -At this point, the system can be armed and flown. -The vehicle can be observed moving in jMAVSim, and on the QGC _Fly_ view. - -## SIH as SITL (no FC) - -SIH can be run as SITL (Software-In-The-Loop) from v1.14. -What this means is that the simulation code is executed on the laptop/computer instead of a flight controller, similar to Gazebo or jMAVSim. -In this case you don't need the flight controller hardware. - -To run SIH as SITL: - -1. Install the [PX4 Development toolchain](../dev_setup/dev_env.md). -2. Run the appropriate make command for each vehicle type (at the root of the PX4-Autopilot repository): - - Quadcopter - - ```sh - make px4_sitl sihsim_quadx - ``` - - - Hexacopter - - ```sh - make px4_sitl sihsim_hex - ``` - - - Fixed-wing (plane) - - ```sh - make px4_sitl sihsim_airplane - ``` - - - XVert VTOL tailsitter - - ```sh - make px4_sitl sihsim_xvert - ``` - - - 표준 VTOL - - ```sh - make px4_sitl sihsim_standard_vtol - ``` - - - Ackermann Rover - - ```sh - make px4_sitl sihsim_rover_ackermann - ``` - -### Change Simulation Speed - -SITL allows the simulation to be run faster than real time. -To run the airplane simulation 10 times faster than real time, run the command: +In a separate terminal, run: ```sh -PX4_SIM_SPEED_FACTOR=10 make px4_sitl sihsim_airplane +hawkeye ``` -To display the vehicle in jMAVSim during SITL mode, enter the following command in another terminal: +Hawkeye connects on UDP port 19410 by default (the same port SIH sends `HIL_STATE_QUATERNION` on). +It then auto-detects the vehicle type from the MAVLink `HEARTBEAT` and loads the matching 3D model. + +The [Hawkeye](../sim_hawkeye/index.md) overview page explains how to install the software. +See the [Hawkeye docs](https://px4.github.io/Hawkeye/) for other features, such as ULog replay, and multi-vehicle visualization. + +### Environment Configuration + +#### Change Simulation Speed + +SIH supports faster-than-realtime simulation via the `PX4_SIM_SPEED_FACTOR` environment variable: ```sh -./Tools/simulation/jmavsim/jmavsim_run.sh -p 19410 -u -q -o +# Run at 10x speed +PX4_SIM_SPEED_FACTOR=10 make px4_sitl_sih sihsim_quadx ``` -- add a flag `-a` to display an aircraft or `-t` to display a tailsitter. - If this flag is not present a quadrotor will be displayed by default. +#### Wind Simulation -### Set Custom Takeoff Location +SIH supports setting a wind velocity with the PX4 parameters [`SIH_WIND_N`](../advanced_config/parameter_reference.md#SIH_WIND_E) and [`SIH_WIND_E`](../advanced_config/parameter_reference.md#SIH_WIND_E) [m/s]. The parameters can also be changed during flight to simulate changing wind. -The takeoff location in SIH on SITL can be set using environment variables. -This will override the default takeoff location. +#### Set Custom Takeoff Location -The variables to set are: `PX4_HOME_LAT`, `PX4_HOME_LON`, and `PX4_HOME_ALT`. - -예: +The default takeoff location can be set using environment variables: ```sh export PX4_HOME_LAT=28.452386 export PX4_HOME_LON=-13.867138 export PX4_HOME_ALT=28.5 -make px4_sitl sihsim_quadx +make px4_sitl_sih sihsim_quadx ``` +### ROS 2 Integration + +SIH works with ROS 2 via the [uXRCE-DDS](../middleware/uxrce_dds.md) client, which auto-starts in SITL mode. +This is the same mechanism used by Gazebo — both simulators expose the same set of uORB topics to ROS 2. +The DDS agent connects on UDP port **8888** by default (configurable via `UXRCE_DDS_PRT` parameter or `PX4_UXRCE_DDS_PORT` environment variable). + +To use SIH with ROS 2: + +1. Start SIH: + + ```sh + make px4_sitl_sih sihsim_quadx + ``` + +2. In a separate terminal, start the Micro XRCE-DDS Agent: + + ```sh + MicroXRCEAgent udp4 -p 8888 + ``` + +See [uXRCE-DDS (PX4-ROS 2/DDS Bridge)](../middleware/uxrce_dds.md) for full setup instructions, including agent installation and ROS 2 workspace configuration. + +### Port Reference + +PX4 SITL opens the following UDP ports (all instance-aware, offset by instance number N). + +| PX4 sends to (remote) | PX4 listens on (local) | Use for | Instance offset | +| ---------------------------------------- | ----------------------------------------- | ------------------------------------------------ | ------------------------------------------------------------ | +| **14550** | 18570 (+N) | QGroundControl, GCS tools | Yes | +| **14540** (+N) | 14580 (+N) | MAVSDK, MAVROS, offboard APIs | Yes (capped at 14549 for 10+ instances) | +| **14030** (+N) | 14280 (+N) | Onboard camera/payload | Yes | +| **13280** (+N) | 13030 (+N) | Gimbal control | Yes | +| **19410** (+N) | 19450 (+N) | Hawkeye visualizer (SIH only) | Yes | +| **8888** | - | uXRCE-DDS / ROS 2 | No (use DDS namespace for multi-instance) | + +QGC auto-connects on port **14550** by default. MAVSDK connects on **14540**. No manual port configuration needed for single-instance use. + +### 다중 차량 시뮬레이션 + +SIH supports multi-vehicle simulation using PX4's instance system. +Each instance gets unique MAVLink ports, a unique system ID, and a separate DDS namespace. + +To launch multiple SIH vehicles, first build: + +```sh +make px4_sitl_sih sihsim_quadx +``` + +Then use the multi-instance launch script: + +```sh +./Tools/simulation/sitl_multiple_run.sh 3 sihsim_quadx px4_sitl_sih +``` + +Or launch instances manually: + +```sh +# Terminal 1 (instance 0) +make px4_sitl_sih sihsim_quadx + +# Terminal 2 (instance 1) +./build/px4_sitl_sih/bin/px4 -i 1 -d ./build/px4_sitl_sih/etc + +# Terminal 3 (instance 2) +./build/px4_sitl_sih/bin/px4 -i 2 -d ./build/px4_sitl_sih/etc +``` + +Each instance allocates ports automatically (all offset by instance number): + +| Instance | MAVLink (18570+N) | MAVLink (14540+N) | DDS (8888) Namespace | +| -------- | ------------------------------------ | ------------------------------------ | --------------------------------------- | +| 0 | 18570 | 14540 | (default) | +| 1 | 18571 | 14541 | px4_1 | +| 2 | 18572 | 14542 | px4_2 | + +See [Port Reference](#port-reference) for the complete list of ports. + +## Running the SIH on Flight Controller Hardware {#sih-on-flight-controller-hardware} + +:::info +The SIH on flight controller is community supported. +::: + +SIH can also run on flight controller hardware, replacing real sensors with simulated data while running on the actual autopilot. +See [SIH on Flight Controller Hardware](hardware.md) for setup instructions. + ## Adding New Airframes [Adding a new airframe](../dev_airframes/adding_a_new_frame.md) for use in SIH simulation is much the same as for other use cases. You still need to configure your vehicle type and [geometry](../config/actuators.md) (`CA_` parameters) and start any other defaults for that specific vehicle. :::warning -Not every vehicle can be simulated with SIH — there are currently [four supported vehicle types](../advanced_config/parameter_reference.md#SIH_VEHICLE_TYPE), each of which has a relatively rigid implementation in [`sih.cpp`](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/simulation/simulator_sih/sih.cpp). +Not every vehicle can be simulated with SIH — there are currently [six supported vehicle types](../advanced_config/parameter_reference.md#SIH_VEHICLE_TYPE) (quadcopter, fixed-wing, tailsitter, standard VTOL, hexacopter, rover), each of which has a relatively rigid implementation in [`sih.cpp`](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/simulation/simulator_sih/sih.cpp). ::: The specific differences for SIH simulation airframes are listed in the sections below. -For all variants of SIH: +### All Variants - Set all the [Simulation In Hardware](../advanced_config/parameter_reference.md#simulation-in-hardware) parameters (prefixed with `SIH_`) in order to configure the physical model of the vehicle. @@ -302,17 +245,13 @@ For all variants of SIH: ::: -- `param set-default EKF2_GPS_DELAY 0` to improve state estimator performance (the assumption of instant GPS measurements would normally be unrealistic, but is accurate for SIH). +- `param set-default SENS_GPS0_DELAY 0` to improve state estimator performance (the assumption of instant GPS measurements would normally be unrealistic, but is accurate for SIH). -For SIH on FC: +### SIH on Flight Controller -- Airframe file goes in `ROMFS/px4fmu_common/init.d/airframes` and follows the naming template `${ID}_${model_name}.hil`, where `ID` is the `SYS_AUTOSTART_ID` used to select the airframe, and `model_name` is the airframe model name. -- Add the model name in `ROMFS/px4fmu_common/init.d/airframes/CMakeLists.txt` to generate a corresponding make target. -- Actuators are configured with `HIL_ACT_FUNC*` parameters (not the usual `PWM_MAIN_FUNC*` parameters). - This is to avoid using the real actuator outputs in SIH. - Similarly, the bitfield for inverting individual actuator output ranges is `HIL_ACT_REV`, rather than `PWM_MAIN_REV`. +See [Adding New Airframes (FC)](../sim_sih/hardware.md#adding-new-airframes-fc) in _SIH on Flight Controller Hardware_. -For SIH as SITL (no FC): +### SIH as SITL - Airframe file goes in `ROMFS/px4fmu_common/init.d-posix/airframes` and follows the naming template `${ID}_sihsim_${model_name}`, where `ID` is the `SYS_AUTOSTART_ID` used to select the airframe, and `model_name` is the airframe model name. - Add the model name in `src/modules/simulation/simulator_sih/CMakeLists.txt` to generate a corresponding make target. @@ -326,68 +265,54 @@ For SIH as SITL (no FC): - `param set-default SENS_EN_MAGSIM 1` - `param set-default SENS_EN_ARSPDSIM 1` (if it is a fixed-wing or VTOL airframe with airspeed sensor) -For specific examples see the `_sihsim_` airframes in [ROMFS/px4fmu_common/init.d-posix/airframes](https://github.com/PX4/PX4-Autopilot/blob/main/ROMFS/px4fmu_common/init.d-posix/airframes/) (SIH as SITL) and [ROMFS/px4fmu_common/init.d/airframes](https://github.com/PX4/PX4-Autopilot/tree/main/ROMFS/px4fmu_common/init.d/airframes) (SIH on FC). - -## Controlling Actuators in SIH - -:::warning -If you want to control throttling actuators in SIH, make sure to remove propellers for safety. -::: - -In some scenarios, it may be useful to control an actuator while running SIH. For example, you might want to verify that winches or grippers are functioning correctly by checking the servo responses. - -To enable actuator control in SIH: - -1. Configure PWM parameters in the airframe file: - -Ensure your airframe file includes the necessary parameters to map PWM outputs to the correct channels. - -For example, if a servo is connected to MAIN 3 and you want to map it to AUX1 on your RC, use the following command: - -`param set-default PWM_MAIN_FUNC3 407` - -You can find a full list of available values for `PWM_MAIN_FUNCn` [here](../advanced_config/parameter_reference.md#PWM_MAIN_FUNC1). In this case, `407` maps the MAIN 3 output to AUX1 on the RC. - -Alternatively, you can use the [`PWM_AUX_FUNCn`](../advanced_config/parameter_reference.md#PWM_AUX_FUNC1) parameters. - -You may also configure the output as desired: - -- Disarmed PWM: ([`PWM_MAIN_DISn`](../advanced_config/parameter_reference.md#PWM_MAIN_DIS1) / [`PWM_AUX_DIS1`](../advanced_config/parameter_reference.md#PWM_AUX_DIS1)) -- Minimum PWM ([`PWM_MAIN_MINn`](../advanced_config/parameter_reference.md#PWM_MAIN_MIN1) / [`PWM_AUX_MINn`](../advanced_config/parameter_reference.md#PWM_AUX_MIN1)) -- Maximum PWM ([`PWM_MAIN_MAXn`](../advanced_config/parameter_reference.md#PWM_MAIN_MAX1) / [`PWM_AUX_MAXn`](../advanced_config/parameter_reference.md#PWM_AUX_MAX1)) - -2. Manually start the PWM output driver - -For safety, the PWM driver is not started automatically in SIH. To enable it, run the following command in the MAVLink shell: - -`pwm_out start` - -And to disable it again: - -`pwm_out stop` +For specific examples see the `_sihsim_` airframes in [ROMFS/px4fmu_common/init.d-posix/airframes](https://github.com/PX4/PX4-Autopilot/tree/main/ROMFS/px4fmu_common/init.d-posix/airframes) (SIH as SITL) and [ROMFS/px4fmu_common/init.d/airframes](https://github.com/PX4/PX4-Autopilot/tree/main/ROMFS/px4fmu_common/init.d/airframes) (SIH on FC). ## Dynamic Models The dynamic models for the various vehicles are: -- Quadcopter: [pdf report](https://github.com/PX4/PX4-Autopilot/raw/main/docs/assets/simulation/SIH_dynamic_model.pdf). -- Hexacopter: Equivalent to the Quadcopter but with a symmetric hexacopter x actuation setup. -- Fixed-wing: Inspired by the PhD thesis: "Dynamics modeling of agile fixed-wing unmanned aerial vehicles." Khan, Waqas, supervised by Nahon, Meyer, McGill University, PhD thesis, 2016. -- Tailsitter: Inspired by the master's thesis: "Modeling and control of a flying wing tailsitter unmanned aerial vehicle." Chiappinelli, Romain, supervised by Nahon, Meyer, McGill University, Masters thesis, 2018. -- Ackermann Rover: Based on lateral vehicle dynamics of the bicycle model adapted from [Sri Anumakonda, Everything you need to know about Self-Driving Cars in <30 minutes](https://srianumakonda.medium.com/everything-you-need-to-know-about-self-driving-in-30-minutes-b38d68bd3427) +- Quadrotor: [pdf](https://github.com/PX4/PX4-Autopilot/raw/main/docs/assets/simulation/SIH_dynamic_model.pdf) +- Fixed-wing: based on Khan (2016), see references below +- Tailsitter: based on Chiappinelli (2018), see references below +- Rover: bicycle model with linear tire model + +**Propeller model with advance ratio** + +Since PX4 v1.17, the propeller model for fixed-wing, tailsitter, and VTOL pusher vehicles is based on the equations from UIUC Propeller Database. + +UIUC_prop_equations + +This model includes the thrust coefficient CT(J) and power coefficient CP(J) as functions of the advance ratio J. +As a result, the maximum thrust force is realistically reduced as the aircraft speed is increased. +The SIH implements the thrust and power coefficients as second-order polynomial fits. + +CT = SIH_F_CT0 + SIH_F_CT1⋅J + SIH_F_CT2⋅J² + +CP = SIH_F_CP0 + SIH_F_CP1⋅J + SIH_F_CP2⋅J² + +If `SIH_F_CT0` and `SIH_F_CP0` are non-zero and positive, the SIH uses the model with advance ratio. +If not, the SIH uses a simple model with maximum thrust force given by `SIH_F_T_MAX` and maximum torque given by `SIH_F_Q_MAX`. + +**References:** + +1. PX4 Development Team, "SIH Dynamic Model," PX4-Autopilot, 2019. [PDF](https://github.com/PX4/PX4-Autopilot/raw/main/docs/assets/simulation/SIH_dynamic_model.pdf) +2. W. Khan, "Dynamics modeling of agile fixed-wing unmanned aerial vehicles," Ph.D. thesis, Dept. of Mechanical Engineering, McGill University, Montreal, 2016. +3. R. Chiappinelli, "Modeling and control of a flying wing tailsitter unmanned aerial vehicle," M.Sc. thesis, Dept. of Mechanical Engineering, McGill University, Montreal, 2018. +4. S. Anumakonda, "Everything you need to know about Self-Driving Cars," 2021. [Link](https://srianumakonda.medium.com/everything-you-need-to-know-about-self-driving-in-30-minutes-b38d68bd3427) +5. J.B. Brandt, R.W. Deters, G.K. Ananda, O.D. Dantsker, and M.S. Selig, UIUC Propeller Database, Vols 1-4, University of Illinois at Urbana-Champaign, Department of Aerospace Engineering, retrieved from https://m-selig.ae.illinois.edu/props/propDB.html. ## 비디오 - +SIH demo with a fixed-wing vehicle @[youtube](https://youtu.be/PzIpSCRD8Jo) +How to parametrize the thrust and power coefficients CT & CP @[youtube](https://www.youtube.com/watch?v=KNSd9ge0sSw) ## Credits SIH was originally developed by Coriolis g Corporation. The airplane model and tailsitter models were added by Altitude R&D inc. -Both are Canadian companies: - Coriolis g developed a new type of Vertical Takeoff and Landing (VTOL) vehicles based on passive coupling systems; -- [Altitude R&D](https://www.altitude-rd.com/) is specialized in dynamics, control, and real-time simulation (today relocated in Zurich). +- [Altitude R&D](https://www.altitude-rd.com/) is specialized in dynamics, control, and real-time simulation (located in Zurich). The simulator is released for free under BSD license. diff --git a/docs/ko/simulation/community_supported_simulators.md b/docs/ko/simulation/community_supported_simulators.md index 3cd3f56150..a3fdd7f8d7 100644 --- a/docs/ko/simulation/community_supported_simulators.md +++ b/docs/ko/simulation/community_supported_simulators.md @@ -12,10 +12,13 @@ See [Toolchain Installation](../dev_setup/dev_env.md) for information about the The tools have variable levels of support from their communities (some are well supported and others are not). Questions about these tools should be raised on the [discussion forums](../contribute/support.md#forums-and-chat) -| 시뮬레이터 | 설명 | -| ---------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| [Simulation-In-Hardware](../sim_sih/index.md) (SIH) |

A simulator implemented in C++ as a PX4 module directly in the Firmware [code](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/simulation/simulator_sih). It can be ran in SITL directly on the computer or as an alternative to HITL offering a hard real-time simulation directly on the hardware autopilot.

Supported Vehicles: Quad, Hexa, Plane, Tailsitter, Standard VTOL, Ackermann Rover

| -| [FlightGear](../sim_flightgear/index.md) |

A simulator that provides physically and visually realistic simulations. In particular it can simulate many weather conditions, including thunderstorms, snow, rain and hail, and can also simulate thermals and different types of atmospheric flows. [Multi-vehicle simulation](../sim_flightgear/multi_vehicle.md) is also supported.

Supported Vehicles: Plane, Autogyro, Rover

| -| [JMAVSim](../sim_jmavsim/index.md) |

A simple multirotor/quad simulator. This was previously part of the PX4 development toolchain but was removed in favour of [Gazebo](../sim_gazebo_gz/index.md).

Supported Vehicles: Quad

| -| [JSBSim](../sim_jsbsim/index.md) |

A simulator that provides advanced flight dynamics models. This can be used to model realistic flight dynamics based on wind tunnel data.

Supported Vehicles: Plane, Quad, Hex

| -| [AirSim](../sim_airsim/index.md) |

A cross platform simulator that provides physically and visually realistic simulations. This simulator is resource intensive, and requires a significantly more powerful computer than the other simulators described here.

Supported Vehicles: Iris (MultiRotor model and a configuration for PX4 QuadRotor in the X configuration).

| +| 시뮬레이터 | 설명 | +| ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| [FlightGear](../sim_flightgear/index.md) |

A simulator that provides physically and visually realistic simulations. In particular it can simulate many weather conditions, including thunderstorms, snow, rain and hail, and can also simulate thermals and different types of atmospheric flows. [Multi-vehicle simulation](../sim_flightgear/multi_vehicle.md) is also supported.

Supported Vehicles: Plane, Autogyro, Rover

| +| [JMAVSim](../sim_jmavsim/index.md) |

A simple multirotor/quad simulator. This was previously part of the PX4 development toolchain but was removed in favour of [Gazebo](../sim_gazebo_gz/index.md).

Supported Vehicles: Quad

| +| [JSBSim](../sim_jsbsim/index.md) |

A simulator that provides advanced flight dynamics models. This can be used to model realistic flight dynamics based on wind tunnel data.

Supported Vehicles: Plane, Quad, Hex

| +| [AirSim](../sim_airsim/index.md) |

A cross platform simulator that provides physically and visually realistic simulations. This simulator is resource intensive, and requires a significantly more powerful computer than the other simulators described here.

Supported Vehicles: Iris (MultiRotor model and a configuration for PX4 QuadRotor in the X configuration).

| + +:::tip +[Gazebo](../sim_gazebo_gz/index.md) and [SIH](../sim_sih/index.md) are the officially supported simulators. See the [Simulation](index.md) page for more information. +::: diff --git a/docs/ko/simulation/failsafes.md b/docs/ko/simulation/failsafes.md index 11e3c16aee..bb26fc42de 100644 --- a/docs/ko/simulation/failsafes.md +++ b/docs/ko/simulation/failsafes.md @@ -46,7 +46,7 @@ To control how fast the battery depletes to the minimal value use the parameter By changing [SIM_BAT_MIN_PCT](../advanced_config/parameter_reference.md#SIM_BAT_MIN_PCT) in flight, you can also test regaining capacity to simulate inaccurate battery state estimation or in-air charging technology. ::: -It is also possible to disable the simulated battery using [SIM_BAT_ENABLE](../advanced_config/parameter_reference.md#SIM_BAT_ENABLE) in order to, for example, provide an external battery simulation via MAVLink. +The simulated battery can be completely disabled by setting [SIM_BAT_DRAIN](../advanced_config/parameter_reference.md#SIM_BAT_DRAIN) to 0. This is useful, for example, if you provide an external battery simulation via MAVLink. ## 센서/시스템 장애 diff --git a/docs/ko/simulation/hardware.md b/docs/ko/simulation/hardware.md new file mode 100644 index 0000000000..ad1229bcfa --- /dev/null +++ b/docs/ko/simulation/hardware.md @@ -0,0 +1,29 @@ +# Hardware Simulation + +PX4 can run simulation directly on a real flight controller, replacing real sensors with simulated data, while otherwise executing the full flight stack on actual autopilot hardware. + +:::info +Simulating PX4 on flight controller hardware exercises more flight stack code than SITL, and tests more of your hardware integration. +It can surface issues with running PX4 that might hidden when running on a desktop OS and hardware, or even a different flight controller board. +::: + +Two simulation approaches are available, controlled by the [SYS_HITL](../advanced_config/parameter_reference.md#SYS_HITL) parameter: + +- **[HITL Simulation](../simulation/hitl.md) (`SYS_HITL=1`):** An external simulator (Gazebo Classic or jMAVSim) runs physics on a companion computer and sends sensor data to the flight controller via MAVLink HIL messages. Requires a USB/UART connection and simulator setup. +- **[SIH on Hardware](../sim_sih/hardware.md) (`SYS_HITL=2`):** A C++ physics model runs directly on the flight controller itself. No external simulator, no companion computer, no MAVLink sensor data. Just set the parameter and reboot. + +## HITL vs SIH {#comparision} + +| | HITL (`SYS_HITL=1`) | SIH (`SYS_HITL=2`) | +| ----------------- | ---------------------------------------------------------------------- | ---------------------------------------------------- | +| Physics model | External simulator (Gazebo Classic, jMAVSim) | Internal C++ module | +| Communication | MAVLink HIL messages | uORB (internal) | +| External process | Required | Not required | +| Setup complexity | Higher | Lower | +| Sensor simulation | Camera, lidar, etc. (via simulator) | IMU, GPS, baro, mag, airspeed only | +| Vehicle types | Quadcopter, Standard VTOL | Quad, Hex, FW, VTOL Tailsitter, Standard VTOL, Rover | + +## When to Use Which + +- Use **SIH** if you want the simplest possible setup. No external dependencies. +- Use **HITL** if you need an external physics engine, 3D visualization from Gazebo Classic, or camera/lidar sensor simulation that SIH does not provide. diff --git a/docs/ko/simulation/hitl.md b/docs/ko/simulation/hitl.md index 286cc56354..fc5ad84b0a 100644 --- a/docs/ko/simulation/hitl.md +++ b/docs/ko/simulation/hitl.md @@ -12,9 +12,9 @@ HITL(Hardware-in-the-Loop)은 일반 PX4 펌웨어가 실제 비행 콘트롤러 PX4 supports HITL for multicopters (using [jMAVSim](../sim_jmavsim/index.md) or [Gazebo Classic](../sim_gazebo_classic/index.md)) and VTOL (using Gazebo Classic). - +For a comparison of HITL and SIH on hardware, see [Hardware Simulation](../simulation/hardware.md). -## HITL 호환 기체 +## HITL-Compatible Airframes {#compatible_airframe} The set of compatible airframes vs simulators is: @@ -23,9 +23,7 @@ The set of compatible airframes vs simulators is: | [HIL Quadcopter X](../airframes/airframe_reference.md#copter_simulation_hil_quadcopter_x) | 1001 | Y | Y | | [HIL Standard VTOL QuadPlane](../airframes/airframe_reference.md#vtol_standard_vtol_hil_standard_vtol_quadplane) | 1002 | Y | | - - -## HITL 시뮬레이션 환경 +## HITL Simulation Environment {#simulation_environment} HITL(Hardware-in-the-Loop) 시뮬레이션을 사용하여, 일반 PX4 펌웨어가 실제 하드웨어에서 실행됩니다. JMAVSim or Gazebo Classic (running on a development computer) are connected to the flight controller hardware via USB/UART. @@ -104,18 +102,18 @@ make px4_fmu-v6x boardconfig 2. Select a [compatible airframe](#compatible_airframe) you want to test. Then click **Apply and Restart** on top-right of the _Airframe Setup_ page. -3. 필요한 경우 RC 또는 조이스틱을 보정합니다. +3. Calibrate your [Manual Controller](../config/manual_control.md) (RC or Joystick), if needed. 4. UDP를 설정합니다. 1. Under the _General_ tab of the settings menu, uncheck all _AutoConnect_ boxes except for **UDP**. ![QGC Auto-connect settings for HITL](../../assets/gcs/qgc_hitl_autoconnect.png) -5. (선택 사항) 조이스틱과 안정장치를 설정합니다. - Set the following [parameters](../advanced_config/parameters.md) in order to use a joystick instead of an RC remote control transmitter: +5. (Optional) Configure your manual controller priority and failsafe: - - [COM_RC_IN_MODE](../advanced_config/parameter_reference.md#COM_RC_IN_MODE) to "Joystick/No RC Checks". 이것은 조이스틱 입력을 허용하고, RC 입력을 비활성화합니다. - - [NAV_RCL_ACT](../advanced_config/parameter_reference.md#NAV_RCL_ACT) to "Disabled". 무선 제어로 HITL을 실행하지 않으면, RC 안전장치가 간섭하지 않습니다. + - [Enable a mode in `COM_RC_IN_MODE` that enables and prioritises the controllers you want to use](../config/manual_control.md#px4-configuration). + The default `RC or MAVLink keep first` should work if you plan to only have a Joystick (no RC). + - You can set [NAV_RCL_ACT](../advanced_config/parameter_reference.md#NAV_RCL_ACT) to disable manual control loss failsafe while flying in a simulation. :::tip The _QGroundControl User Guide_ also has instructions on [Joystick](https://docs.qgroundcontrol.com/master/en/qgc-user-guide/setup_view/joystick.html) and [Virtual Joystick](https://docs.qgroundcontrol.com/master/en/qgc-user-guide/settings_view/virtual_joystick.html) setup. @@ -137,7 +135,7 @@ Make sure _QGroundControl_ is not running! 1. Build PX4 with [Gazebo Classic](../sim_gazebo_classic/index.md) (in order to build the Gazebo Classic plugins). ```sh - cd + cd DONT_RUN=1 make px4_sitl_default gazebo-classic ``` diff --git a/docs/ko/simulation/index.md b/docs/ko/simulation/index.md index aee31288f8..ec44318ee2 100644 --- a/docs/ko/simulation/index.md +++ b/docs/ko/simulation/index.md @@ -3,38 +3,83 @@ 시뮬레이터는 PX4 비행 코드가 시뮬레이션된 가상 "세계"에서 컴퓨터로 모델링된 기체를 제어합니다. You can interact with this vehicle just as you might with a real vehicle, using _QGroundControl_, an offboard API, or a radio controller/gamepad. -:::tip -Simulation is a quick, easy, and most importantly, _safe_ way to test changes to PX4 code before attempting to fly in the real world. -실험할 기체가 없은 경우 PX4로 비행을 시작하는 것도 좋은 방법입니다. -::: - PX4 supports both _Software In the Loop (SITL)_ simulation, where the flight stack runs on computer (either the same computer or another computer on the same network) and _Hardware In the Loop (HITL)_ simulation using a simulation firmware on a real flight controller board. 사용 가능한 시뮬레이터와 설정 방법을 다음 섹션에서 설명합니다. The other sections provide general information about how the simulator works, and are not required to _use_ the simulators. +:::tip +Simulation is a quick, easy, and most importantly, _safe_ way to test changes to PX4 code before attempting to fly in the real world. +실험할 기체가 없은 경우 PX4로 비행을 시작하는 것도 좋은 방법입니다. +::: + ## 지원되는 시뮬레이터 The following simulators are supported by the PX4 core development team. +:::info +Gazebo Classic is being downgraded to [community supported](../simulation/community_supported_simulators.md) and is no longer recommended as the default simulation solution. +Use [Gazebo](../sim_gazebo_gz/index.md) (formerly Gazebo Ignition) for new projects. +If you have an older workflow that does not yet work in newer Gazebo, Gazebo Classic remains available but will not receive core team maintenance going forward. +See [PX4-Autopilot#23602](https://github.com/PX4/PX4-Autopilot/issues/23602) for the deprecation timeline and migration status. +::: + | 시뮬레이터 | 설명 | | ------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [Gazebo](../sim_gazebo_gz/index.md) | Gazebo supersedes [Gazebo Classic](../sim_gazebo_classic/index.md), featuring more advanced rendering, physics and sensor models. It is the only version of Gazebo available from Ubuntu Linux 22.04

A powerful 3D simulation environment that is particularly suitable for testing object-avoidance and computer vision. [다중 차량시뮬레이션](../simulation/multi-vehicle-simulation.md)에도 사용할 수 있으며 일반적으로 차량 제어 자동화를 위한 도구 모음인 [ROS](../simulation/ros_interface.md)와 함께 사용됩니다.

Supported Vehicles: Quad, VTOL (Standard, Tailsitter, Tiltroter), Plane, Rovers | +| [SIH](../sim_sih/index.md) | A lightweight, headless simulator that runs physics directly inside PX4 as a C++ module (no external dependencies). Headless by default for fastest iteration. Supports ROS 2 via uXRCE-DDS. Can also run on flight controller hardware (`SYS_HITL=2`).

**Supported Vehicles:** Quad, Hex, Plane, Tailsitter, Standard VTOL, Rover | | [Gazebo Classic](../sim_gazebo_classic/index.md) | A powerful 3D simulation environment that is particularly suitable for testing object-avoidance and computer vision. It can also be used for [multi-vehicle simulation](../simulation/multi-vehicle-simulation.md) and is commonly used with [ROS](../simulation/ros_interface.md), a collection of tools for automating vehicle control.

**Supported Vehicles:** Quad ([Iris](../airframes/airframe_reference.md#copter_quadrotor_x_generic_quadcopter)), Hex (Typhoon H480), [Generic Standard VTOL (QuadPlane)](../airframes/airframe_reference.md#vtol_standard_vtol_generic_standard_vtol), Tailsitter, Plane, Rover, Submarine | There are also a number of [Community Supported Simulators](../simulation/community_supported_simulators.md). ---- +:::tip +To run PX4 SITL without setting up a build environment, [pre-built packages and containers](px4_sitl_prebuilt_packages.md) are available. +::: -이 항목의 나머지 부분은 시뮬레이션 인프라 작동 방식에 대한 "다소 일반적인" 설명입니다. -It is not required to _use_ the simulators. +### Simulator Comparison + +| 기능 | Gazebo | SIH | +| ------------------------- | ------------------------------------------------- | -------------------------------------------------------------------------------------- | +| **Default Mode** | GUI with 3D rendering | Headless (fastest iteration) | +| **3D Visualization** | Built-in (photorealistic) | Optional: QGC map or jMAVSim display-only | +| **Physics Engine** | External (gz-physics) | Internal (C++ module, uORB) | +| **External Dependencies** | Gazebo packages, rendering libs | None | +| **Vehicle Types** | Quad, VTOL, Plane, Rovers | Quad, Hex, Plane, Tailsitter, Std VTOL, Rover | +| **Multi-vehicle** | Yes (documented) | Yes ([multi-vehicle](../sim_sih/index.md#multi-vehicle-simulation)) | +| **Sensor Simulation** | Camera, LiDAR, depth, IMU, GPS, baro, mag | IMU, GPS, baro, mag, airspeed | +| **Custom Worlds/Models** | Yes (SDF, large model library) | No | +| **ROS 2 Integration** | Yes (uXRCE-DDS) | Yes (uXRCE-DDS) | +| **Extensibility** | Plugins, custom sensors, environments | Modify C++ source, tune SIH\_\* parameters | +| **Community/Ecosystem** | Large Gazebo community, model repos | PX4-internal | +| **Faster-than-Realtime** | Yes | Yes | +| **Runs on FC Hardware** | No | Yes (SYS_HITL=2) | +| **macOS Apple Silicon** | Unstable (known issues) | Works natively | +| **Lockstep** | Yes | Yes | + +:::tip +For a detailed analysis of PX4 simulation user needs, priorities, and pain points, see the [PX4 Simulation Integration Survey Report](https://www.mcguirerobotics.com/px4_sim_research_report/) (K. McGuire, Dronecode Foundation, Dec 2025, 120 respondents). +::: + +### Which Simulator Should I Use? + +- **Full-featured simulation with 3D rendering, custom worlds, camera/lidar sensors, or rich sensor ecosystems:** Use [Gazebo](../sim_gazebo_gz/index.md). Largest ecosystem, custom models and plugins, photorealistic rendering, extensive sensor library, large community. +- **Fast headless iteration, controls research, zero-dependency setup, or macOS:** Use [SIH](../sim_sih/index.md). Runs entirely inside PX4 with no external dependencies, headless by default for maximum speed, physics parameters directly tunable via `SIH_*` params. Supports ROS 2 via uXRCE-DDS. +- **Hardware integration testing without propellers:** Use [SIH on flight controller hardware](../sim_sih/index.md#sih-on-flight-controller-hardware) (`SYS_HITL=2`). + +:::info +SIH is headless by default. For optional 3D visualization, you can use [jMAVSim in display-only mode](../sim_sih/index.md#visualization-optional) or monitor the vehicle in QGroundControl's map view. +::: ## Simulator MAVLink API -All simulators except for Gazebo communicate with PX4 using the Simulator MAVLink API. +Most external simulators communicate with PX4 using the Simulator MAVLink API. 이 API는 시뮬레이션된 세계에서 PX4로 센서 데이터를 제공하고, 시뮬레이션된 차량에 적용될 비행 코드에서 모터 및 액추에이터 값을 반환하는 MAVLink 메시지 세트를 정의합니다. 아래 이미지는 메시지 흐름을 나타냅니다. +:::info +SIH does not use the MAVLink simulator API. It runs physics internally via uORB messages. Gazebo communicates with PX4 via gz_bridge (Gazebo transport), not MAVLink. +::: + ![Simulator MAVLink API](../../assets/simulation/px4_simulator_messages.svg) :::info @@ -67,7 +112,7 @@ A SITL build of PX4 uses [SimulatorMavlink.cpp](https://github.com/PX4/PX4-Autop -PX4 directly uses the [Gazebo API](https://gazebosim.org/docs) to interface with [Gazebo](../sim_gazebo_gz/index.md) and MAVlink is not required. +PX4 directly uses the [Gazebo API](https://gazebosim.org/docs/) to interface with [Gazebo](../sim_gazebo_gz/index.md) and MAVlink is not required. ## 기본 PX4 MAVLink UDP 포트 @@ -96,7 +141,7 @@ See [System Startup](../concept/system_startup.md) to learn more. ## SITL 시뮬레이션 환경 -The diagram below shows a typical SITL simulation environment for any of the supported simulators that use MAVLink (i.e. all of them except Gazebo). +The diagram below shows a typical SITL simulation environment for any of the supported simulators that use MAVLink (i.e. most external simulators, but not Gazebo or SIH). ![PX4 SITL overview](../../assets/simulation/px4_sitl_overview.svg) @@ -153,8 +198,16 @@ make px4_sitl jmavsim # Start PX4 with no simulator (i.e. to use your own "custom" simulator) make px4_sitl none_iris + +# SIH (headless, zero dependencies) +make px4_sitl_sih sihsim_quadx +make px4_sitl_sih sihsim_airplane ``` +:::info +Use `px4_sitl_sih` instead of `px4_sitl` to avoid building Gazebo dependencies. +::: + 시뮬레이션은 환경 변수를 통하여 추가로 설정이 가능합니다. - Any of the [PX4 parameters](../advanced_config/parameter_reference.md) can be overridden via `export PX4_PARAM_{name}={value}`. @@ -165,7 +218,7 @@ For more information see: [Building the Code > PX4 Make Build Targets](../dev_se ### Run Simulation Faster than Realtime {#simulation_speed} -SITL can be run faster or slower than real-time when using Gazebo, Gazebo Classic, or jMAVSim. +SITL can be run faster or slower than real-time when using Gazebo, Gazebo Classic, jMAVSim, or SIH. The speed factor is set using the environment variable `PX4_SIM_SPEED_FACTOR`. @@ -179,6 +232,7 @@ This is what makes it possible to run the simulation at different speeds, and al - Gazebo: [Change Simulation Speed](../sim_gazebo_gz/index.md#change-simulation-speed) - Gazebo Classic: [Change Simulation Speed](../sim_gazebo_classic/index.md#change-simulation-speed) and [Lockstep](../sim_gazebo_classic/index.md#lockstep) - jMAVSim: [Change Simulation Speed](../sim_jmavsim/index.md#change-simulation-speed) and [Lockstep](../sim_jmavsim/index.md#lockstep) +- SIH: Supports `PX4_SIM_SPEED_FACTOR` for faster-than-realtime simulation. ### 시작 스크립트 @@ -213,7 +267,7 @@ For setup information see the _QGroundControl User Guide_: PX4 supports capture of both still images and video from within the [Gazebo Classic](../sim_gazebo_classic/index.md) simulated environment. This can be enabled/set up as described in [Gazebo Glassic > Video Streaming](../sim_gazebo_classic/index.md#video-streaming). -The simulated camera is a gazebo classic plugin that implements the [MAVLink Camera Protocol](https://mavlink.io/en/protocol/camera.html) . +The simulated camera is a gazebo classic plugin that implements the [MAVLink Camera Protocol](https://mavlink.io/en/services/camera.html) . PX4 connects/integrates with this camera in _exactly the same way_ as it would with any other MAVLink camera: 1. [TRIG_INTERFACE](../advanced_config/parameter_reference.md#TRIG_INTERFACE) must be set to `3` to configure the camera trigger driver for use with a MAVLink camera diff --git a/docs/ko/simulation/multi-vehicle-simulation.md b/docs/ko/simulation/multi-vehicle-simulation.md index 7feed42900..496c6a0287 100644 --- a/docs/ko/simulation/multi-vehicle-simulation.md +++ b/docs/ko/simulation/multi-vehicle-simulation.md @@ -6,6 +6,7 @@ PX4는 다음 시뮬레이터를 사용하여 다중 차량 시뮬레이션을 - [Multi-Vehicle Sim with Gazebo Classic](../sim_gazebo_classic/multi_vehicle_simulation.md) (both with and without ROS) - [Multi-Vehicle Sim with FlightGear](../sim_flightgear/multi_vehicle.md) - [Multi-Vehicle Sim with JMAVSim](../sim_jmavsim/multi_vehicle.md) +- [Multi-Vehicle Sim with SIH](../sim_sih/index.md#multi-vehicle-simulation) 시뮬레이터의 선택은 시뮬레이션할 차량, 시뮬레이션 퀄러티, 시뮬레이션 기능, 시뮬레이션 차량 대수에 따라 달라집니다. @@ -18,5 +19,8 @@ PX4는 다음 시뮬레이터를 사용하여 다중 차량 시뮬레이션을 Note, this is the successor of [Gazebo Classic](../sim_gazebo_classic/index.md) (below). - [Gazebo Classic](../sim_gazebo_classic/index.md) is less accurate and less heavy-weight and supports many features and vehicles that aren't available for FlightGear. It can simulate many more vehicles at a time than FlightGear and it allows for different types of vehicles to be simulated at the same time. -- JMAVSim은 쿼드콥터만 지원하는 초경량 시뮬레이터입니다. +- [JMAVSim](../sim_jmavsim/index.md) is a very light-weight simulator that supports only quadcopters. 많은 쿼드콥터의 근사치를 시뮬레이션하는 경우에 권장됩니다. +- [SIH](../sim_sih/index.md) is the lightest-weight option with zero external dependencies. + Since SIH is headless and runs physics internally, it can launch many instances with minimal resource usage. + It supports all 6 vehicle types (quad, hex, plane, tailsitter, standard VTOL, rover). diff --git a/docs/ko/simulation/px4_simulation_quickstart.md b/docs/ko/simulation/px4_simulation_quickstart.md new file mode 100644 index 0000000000..7a314741f4 --- /dev/null +++ b/docs/ko/simulation/px4_simulation_quickstart.md @@ -0,0 +1,25 @@ +# PX4 Simulation QuickStart + +First install [Docker](https://docs.docker.com/get-docker/) (a free tool that runs containers). + +The following command will then run a PX4 quadrotor simulation that you can connect to [QGroundControl](https://qgroundcontrol.com), [MAVSDK](https://mavsdk.mavlink.io/) or [ROS 2](../ros2/user_guide.md) (on Linux, macOS, and Windows): + +```sh +docker run --rm -it -p 14550:14550/udp px4io/px4-sitl:latest +``` + +That's it — open [QGroundControl](https://qgroundcontrol.com) and fly! + +::: tip + +To try [other vehicle types](../sim_sih/#supported-vehicle-types) append the corresponding line below to the command: + +```sh +-e PX4_SIM_MODEL=sihsim_airplane # Plane +-e PX4_SIM_MODEL=sihsim_standard_vtol # Standard VTOL +-e PX4_SIM_MODEL=sihsim_rover # Ackermann rover +``` + +For more information and options see [Container Images](../simulation/px4_sitl_prebuilt_packages.md#container-images) (in _Pre-built SITL Packages_) and [SIH Simulation](../sim_sih/index.md). + +::: diff --git a/docs/ko/simulation/px4_sitl_prebuilt_packages.md b/docs/ko/simulation/px4_sitl_prebuilt_packages.md new file mode 100644 index 0000000000..72cedc79d8 --- /dev/null +++ b/docs/ko/simulation/px4_sitl_prebuilt_packages.md @@ -0,0 +1,297 @@ +# Pre-built SITL Packages + +Pre-built packages let you run [PX4 SITL simulation](index.md) without setting up a build environment. + +This is very useful if you don't need to modify PX4 itself. +For example, if you want to write drone apps using [MAVSDK](https://mavsdk.mavlink.io) or [ROS 2](../ros2/user_guide.md), or you just want to fly with PX4. + +:::tip +See [PX4 Simulation QuickStart](px4_simulation_quickstart.md) for a one-line instruction to run the SIH package in a container. +::: + +## What's Available + +Two simulators are packaged, each available as a `.deb` package (Ubuntu) or a Docker [container](#container-images) (any OS): + +| 시뮬레이터 | Format | Package / Image | Size | +| -------------------------------------------- | -------------------- | ----------------------- | ----------------------- | +| [SIH](../sim_sih/index.md) | .deb | `px4` | ~10 MB | +| | container | `px4io/px4-sitl` | ~100 MB | +| [Gazebo Harmonic](../sim_gazebo_gz/index.md) | .deb | `px4-gazebo` | ~30 MB | +| | container | `px4io/px4-sitl-gazebo` | ~2 GB | + +SIH is a lightweight, headless simulator built into PX4 with no external dependencies. +Gazebo provides full 3D simulation with camera, LiDAR, and custom worlds. +Sizes are approximate and vary between releases. + +For help choosing between simulators, see the [simulator comparison table](index.md#simulator-comparison). + +### Versions and Releases + +Packages and images are versioned to match PX4 tags (e.g. `v1.17.0`, `v1.17.0~beta1`). +`.deb` packages are built for **Ubuntu 22.04 (Jammy)** and **24.04 (Noble)**, on both **amd64** and **arm64**. +Container images support **amd64** and **arm64**. +Stable releases and pre-releases are published on the [PX4 Releases](https://github.com/PX4/PX4-Autopilot/releases) page. + +## .deb Packages (Ubuntu) + +Download the `.deb` file for your Ubuntu version and architecture from the [PX4 Releases](https://github.com/PX4/PX4-Autopilot/releases) page, then install as shown below. +After installation the binary is added to the default Ubuntu system paths, and can be run from anywhere. + +### px4 (SIH) + +No extra repositories are required: + +```bash +sudo apt install ./px4_*.deb +``` + +### px4-gazebo (Gazebo Harmonic) + +The package depends on Gazebo Harmonic runtime libraries from the OSRF repository. +Add the repository first, then install: + +```bash +# Add OSRF Gazebo repository (one-time setup) +sudo curl -fsSL 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" \ + | sudo tee /etc/apt/sources.list.d/gazebo-stable.list > /dev/null +sudo apt update + +# Install (resolves Gazebo dependencies automatically) +sudo apt install ./px4-gazebo_*.deb +``` + +### Uninstalling + +```bash +sudo apt remove px4 # SIH package +sudo apt remove px4-gazebo # Gazebo package +``` + +## Container Images + +Container images are built using the same `.deb` packages described above, packaged into minimal Docker images. +They are published to [Docker Hub](https://hub.docker.com/u/px4io) on every tagged release. +You will need to [install Docker](https://docs.docker.com/get-docker/). + +| 이미지 | 시뮬레이터 | +| ----------------------------- | --------------------------------- | +| `px4io/px4-sitl:` | SIH (headless) | +| `px4io/px4-sitl-gazebo:` | Gazebo Harmonic | + +Tags follow PX4 versions (e.g. `v1.17.0`). + +### 실행 + +```bash +# SIH +docker run --rm -it -p 14550:14550/udp px4io/px4-sitl:latest + +# Gazebo +docker run --rm -it -p 14550:14550/udp px4io/px4-sitl-gazebo:latest +``` + +Pass environment variables with `-e`: + +```bash +docker run --rm -it -p 14550:14550/udp \ + -e PX4_SIM_MODEL=sihsim_airplane \ + px4io/px4-sitl:latest +``` + +The quick-start command above only exposes the QGroundControl port. +To use MAVSDK, uXRCE-DDS (ROS 2), or MAVSim Viewer, expose the additional ports: + +```bash +docker run --rm -it \ + -p 14550:14550/udp \ + -p 14540:14540/udp \ + -p 8888:8888/udp \ + -p 19410:19410/udp \ + px4io/px4-sitl:latest +``` + +| 포트 | Protocol | Used by | +| ----- | -------- | ---------------------------------------------- | +| 14550 | UDP | QGroundControl | +| 14540 | UDP | MAVSDK / offboard API | +| 8888 | UDP | uXRCE-DDS agent (ROS 2) | +| 19410 | UDP | SIH display (MAVSim Viewer) | + +On Linux, you can skip individual port flags and use `--network host` instead: + +```bash +docker run --rm -it --network host px4io/px4-sitl:latest +``` + +## 설정 + +These options apply to both `.deb` packages and containers. +Note that after the first section below we only show how to use them with the deb packages (the pattern for using the options doesn't change). + +### Vehicle Selection + +Set `PX4_SIM_MODEL` to choose a vehicle. + +SIH: + +```bash +# Deb package +PX4_SIM_MODEL=sihsim_airplane px4 + +# Container +docker run --rm -it -p 14550:14550/udp px4io/px4-sitl:latest -e PX4_SIM_MODEL=sihsim_airplane +``` + +Gazebo: + +``` +# Deb package +PX4_SIM_MODEL=gz_x500 px4-gazebo + +# Container +docker run --rm -it -p 14550:14550/udp px4io/px4-sitl-gazebo:latest -e PX4_SIM_MODEL=gz_x500 +``` + +See [SIH Supported Vehicles](../sim_sih/index.md#supported-vehicle-types) and [Gazebo Vehicles](../sim_gazebo_gz/vehicles.md) for the full lists. + +### World Selection (Gazebo only) + +```sh +PX4_GZ_WORLD=baylands PX4_SIM_MODEL=gz_x500 px4-gazebo +``` + +See [Gazebo Worlds](../sim_gazebo_gz/worlds.md) for available worlds. + +### Environment Variables + +| 변수 | 설명 | 기본값 | +| -------------------- | ------------------------------------------------------------------------------------------------------ | ----------------------------- | +| `PX4_SIM_MODEL` | Vehicle model (e.g. `gz_x500`, `sihsim_quadx`) | (required) | +| `PX4_GZ_WORLD` | Gazebo world name, without `.sdf` (e.g. `baylands`) | `default` | +| `HEADLESS` | Set to `1` to disable Gazebo GUI | (unset) | +| `PX4_UXRCE_DDS_PORT` | uXRCE-DDS agent UDP port | `8888` | +| `PX4_UXRCE_DDS_NS` | uXRCE-DDS ROS namespace | (none) | +| `XDG_DATA_HOME` | Base directory for per-instance working data (parameters, dataman) | `$HOME/.local/share` | + +## Multi-Instance + +Multiple simulated vehicles can run simultaneously by passing the `-i` flag with an instance number. +Each instance must be started in a separate terminal (or container). This works with both simulators. + +```sh +# Terminal 1 +PX4_SIM_MODEL=sihsim_quadx px4 -i 0 + +# Terminal 2 +PX4_SIM_MODEL=sihsim_quadx px4 -i 1 +``` + +MAVLink and uXRCE-DDS port numbers are automatically offset by the instance number. + +Each package (`px4` and `px4-gazebo`) is a standalone install. Do not mix instances from the two packages in the same session. + +## MAVLink and QGroundControl + +PX4 opens several MAVLink UDP ports on startup. +[QGroundControl](https://qgroundcontrol.com) auto-connects on UDP port 14550. +You can also connect [MAVSDK](https://mavsdk.mavlink.io) or any MAVLink-compatible tool. + +| Link | Mode | UDP Local Port | UDP Remote Port | Data Rate | +| ----------------------------------------- | ------- | ---------------- | ---------------- | --------- | +| GCS link | Normal | 18570 + instance | 14550 | 4 Mbps | +| API/Offboard link | Onboard | 14580 + instance | 14540 + instance | 4 Mbps | +| Onboard link to camera | Onboard | 14280 + instance | 14030 + instance | 4 kbps | +| Onboard link to gimbal | Gimbal | 13030 + instance | 13280 + instance | 400 kbps | +| SIH display (SIH only) | Custom | 19450 + instance | 19410 + instance | 400 kbps | + +By default, MAVLink only listens on localhost. +Set parameter `MAV_{i}_BROADCAST = 1` to enable network access. + +## ROS 2 Integration + +The `uxrce_dds_client` module starts automatically and connects to a Micro XRCE-DDS Agent over UDP. +Run the agent before starting PX4: + +```sh +MicroXRCEAgent udp4 -p 8888 +``` + +| 설정 | 기본값 | +| ---------- | ----------- | +| Transport | UDP | +| Agent IP | `127.0.0.1` | +| Agent Port | `8888` | + +Environment variables `PX4_UXRCE_DDS_PORT` and `PX4_UXRCE_DDS_NS` override the corresponding PX4 parameters ([UXRCE_DDS_PRT](../advanced_config/parameter_reference.md#UXRCE_DDS_PRT), [UXRCE_DDS_NS_IDX](../advanced_config/parameter_reference.md#UXRCE_DDS_NS_IDX)) at runtime without modifying stored parameters: + +```sh +PX4_UXRCE_DDS_PORT=9999 PX4_UXRCE_DDS_NS=drone1 PX4_SIM_MODEL=sihsim_quadx px4 +``` + +## Daemon Mode + +Start PX4 without an interactive shell (useful for CI pipelines and automated testing): + +```sh +PX4_SIM_MODEL=sihsim_quadx px4 -d +``` + +## Installed File Layout + +### px4 + +```txt +/opt/px4/ + bin/ + px4 # PX4 binary + px4-* # Module symlinks + px4-alias.sh # Shell aliases + etc/ # ROMFS (init scripts, mixers, airframes) + init.d-posix/ + +/usr/bin/px4 -> /opt/px4/bin/px4 +``` + +### px4-gazebo + +```txt +/opt/px4-gazebo/ + bin/ + px4 # PX4 binary + px4-gazebo # Gazebo wrapper (sets GZ_SIM_* env vars) + px4-* # Module symlinks + px4-alias.sh # Shell aliases + etc/ # ROMFS (init scripts, mixers, airframes) + init.d-posix/ + share/gz/ + models/ # Gazebo vehicle models + worlds/ # Gazebo world files + server.config + lib/gz/plugins/ # PX4 Gazebo plugins + +/usr/bin/px4-gazebo -> /opt/px4-gazebo/bin/px4-gazebo +``` + +### Runtime directories (created on first run, per user) + +```sh +$XDG_DATA_HOME/px4/rootfs// # parameters, dataman, eeprom +``` + +## Building .deb Files Locally + +To build `.deb` files locally (e.g. to package a custom PX4 branch): + +```sh +# SIH — produces px4_*.deb +make px4_sitl_sih +cd build/px4_sitl_sih && cpack -G DEB + +# Gazebo — produces px4-gazebo_*.deb +make px4_sitl_default +cd build/px4_sitl_default && cpack -G DEB +``` diff --git a/docs/ko/smart_batteries/index.md b/docs/ko/smart_batteries/index.md index c4199f989a..af525e39ed 100644 --- a/docs/ko/smart_batteries/index.md +++ b/docs/ko/smart_batteries/index.md @@ -1,7 +1,7 @@ # 스마트 배터리 스마트 배터리는 자동조종장치가 "둔감한" 배터리에 대해 추정할 수 있는 것보다 배터리 상태에 대한 더 정확한(그리고 종종 더 자세한) 정보를 제공합니다. -이를 통하여 보다 안정적인 비행 계획 실패 조건 알림이 가능합니다. +This allows for more reliable flight planning notification of failure conditions. 정보에는 남은 충전량, 비우기 시간 (예상), 셀 전압 (최대/최소 정격, 현재 전압 등), 온도, 전류, 오류 정보, 배터리 공급 업체, 화학 물질 등이 포함될 수 있습니다. PX4는 (최소한) 다음과 같은 스마트 배터리를 지원합니다. diff --git a/docs/ko/smart_batteries/rotoye_batmon.md b/docs/ko/smart_batteries/rotoye_batmon.md index b4ba96fd30..1c4cae6737 100644 --- a/docs/ko/smart_batteries/rotoye_batmon.md +++ b/docs/ko/smart_batteries/rotoye_batmon.md @@ -1,6 +1,6 @@ # Rotoye Batmon -[Rotoye Batmon](https://rotoye.com/batmon/) is a kit for adding smart battery functionality to off-the-shelf Lithium-Ion and LiPo batteries. +[Rotoye Batmon](https://shop.rotoye.com/batmon/) is a kit for adding smart battery functionality to off-the-shelf Lithium-Ion and LiPo batteries. 독립형 장치로 또는 공장에서 조립된 스마트 배터리의 일부로 구입할 수 있습니다. ![Rotoye Batmon Board](../../assets/hardware/smart_batteries/rotoye_batmon/smart-battery-rotoye.jpg) @@ -9,7 +9,7 @@ ## 구매처 -[Rotoye Store](https://rotoye.com/batmon/): Batmon kits, custom smart-batteries, and accessories +[Rotoye Store](https://shop.rotoye.com/batmon/): Batmon kits, custom smart-batteries, and accessories ## Wiring/Connections @@ -50,7 +50,3 @@ In _QGroundControl_: batt_smbus start -X -b 1 -a 11 # External bus 1, address 0x0b batt_smbus start -X -b 1 -a 12 # External bus 1, address 0x0c ``` - -## 추가 정보 - -[Quick Start Guide](https://rotoye.com/batmon-tutorial/) (Rotoye) diff --git a/docs/ko/software_update/stm32_bootloader.md b/docs/ko/software_update/stm32_bootloader.md index f366dc337f..7e7d28308a 100644 --- a/docs/ko/software_update/stm32_bootloader.md +++ b/docs/ko/software_update/stm32_bootloader.md @@ -62,7 +62,7 @@ arm-none-eabi-gdb ### J-Link -These instructions are for the [J-Link GDB server](https://www.segger.com/jlink-gdb-server.html). +These instructions are for the [J-Link GDB server](https://www.segger.com/products/debug-probes/j-link/tools/j-link-gdb-server/about-j-link-gdb-server/). #### 준비 사항 diff --git a/docs/ko/telemetry/cuav_p8_radio.md b/docs/ko/telemetry/cuav_p8_radio.md index 9297ef41e6..4e643e064e 100644 --- a/docs/ko/telemetry/cuav_p8_radio.md +++ b/docs/ko/telemetry/cuav_p8_radio.md @@ -19,7 +19,7 @@ It supports multiple modes such as point-to-point, point-to-multipoint, and rela ## 구매처 -- [CUAV store](https://www.cuav.net/en/p8-2/) +- [CUAV store](https://www.cuav.net/en/p8-en/) - [CUAV alibaba](https://www.alibaba.com/product-detail/Free-shipping-CUAV-UAV-P8-Radio_1600324379418.html?spm=a2747.manage.0.0.2dca71d2bY4B0M) ## PX4 설정 @@ -61,6 +61,6 @@ CUAV P8 Radio does not support power supply from the flight controller, it needs ## More information -[P8 manual](http://manual.cuav.net/data-transmission/p8-radio/p8-user-manual-en.pdf) +[P8 manual](https://manual.cuav.net/data-transmission/p8-radio/p8_user_manual_cn.pdf) [CUAV P8 Radio](https://doc.cuav.net/data-transmission/p8-radio/en/) (Official Guide) diff --git a/docs/ko/telemetry/holybro_sik_longrange.md b/docs/ko/telemetry/holybro_sik_longrange.md new file mode 100644 index 0000000000..69aa13c0a3 --- /dev/null +++ b/docs/ko/telemetry/holybro_sik_longrange.md @@ -0,0 +1,100 @@ +# Holybro SiK Telemetry Radio - Long Range + +This Holybro SiK Long Range Telemetry Radio is a small, light, and inexpensive open-source radio platform with an extended range (~20km) compared to the standard model. + +This radio is plug-and-play, ready for all Pixhawk Standard and other similar flight controllers, providing the easiest way to set up a telemetry connection between your controller and a ground station. +It uses open-source firmware that has been specially designed to work well with MAVLink packets and to be integrated with PX4, ArduPilot, Mission Planner and QGroundControl. + +The radios are available in 915 MHz or 433 MHz versions. +Please purchase the model that is appropriate for your country/region. + +![Sik Telemetry Radio - Long Range](../../assets/hardware/telemetry/holybro_sik_longrange/holybro_sik_longrange.jpg) + +## 구매처 + +- [Holybro SiK Telemetry Radio - Long Range](https://holybro.com/collections/telemetry-radios/products/sik-telemetry-radio-1w) + +## 특징 + +- 1W maximum RF output and up to 20km range (compared to 100mW/300m for the short range version). +- Open-source SIK firmware +- Plug-n-play for Pixhawk Standard Flight Controllers +- The Easiest way to connect your controller and Ground Station +- Interchangeable air and ground radio +- 6-position JST-GH connector + +## 사양 + +- 1 W maximum output power (adjustable) -117 dBm receive sensitivity +- RP-SMA connector +- 2-way full-duplex communication through adaptive TDM UART interface +- Transparent serial link +- MAVLink protocol framing +- Frequency Hopping Spread Spectrum (FHSS) Configurable duty cycle +- Error correction corrects up to 25% of bit errors Open-source SIK firmware +- Configurable through Mission Planner & APM Planner +- FT230X USB to BASIC UART IC +- USB Type C connector +- XT30 power connector for 7~28V DC input + +## LEDs Indicators Status + +The radios have four status LEDs. +The USB `RX` and `TX` LEDs indicate the status of reception and transmission of the USB port. +The `RADIO` and `ACT` two LED lights indicate the status of the RF circuit. + +- USB-TX LED (orange): + - Blinking: USB port has data transmission + - Off: USB port has no data transmission +- USB-RX LED (orange): + - Blinking: USB port has data reception + - Off: USB port has no data reception +- Radio LED (Green) + - Blinking: Searching for another radio + - Solid: Link is established with another radio +- ACT LED (Red) + - Flashing: Transmitting data + - Solid: In firmware update mode + +![Holybro SiK LongRange LED Indicators](../../assets/hardware/telemetry/holybro_sik_longrange/holybro_sik_longrange_label.png) + +## Connecting to Flight Controller + +Supply the power (7~28V) to the radio via the XT30 connector. +Use the 6-pin JST-GH connector that comes with the radio to connect the radio to your flight controller's `TELEM1` port. + +Note that `TELEM2` can also be used, but you may need to [configure the telemetry port](../peripherals/mavlink_peripherals.md) on some flight controllers. + +## Connecting to a PC or Ground Station + +First, power the module with a 7~28V DC source. +Then, connect the radio to your Windows PC or Ground Station using a Type-C USB cable. + +The necessary drivers should be installed automatically, and the radio will appear as a new “USB Serial Port” in the Windows Device Manager under Ports (COM & LPT). +The Mission Planner's COM Port selection drop-down should also include the newly added COM port. + +## Packages Include + +### Single Radio + +- 1W Radio modules with antennas (1) +- High-gain omnidirectional antenna (1) +- Male Type-C to male Type-C USB cable (1) +- Male XT30 to female XT30 adapter cable (1) +- Male XT30 to female XT60 adapter cable (1) +- JST-GH-6P to JST-GH-6P cable (1) (for Pixhawk Standard FC) +- Rubber damping grommet (3) + +![Sik Telemetry Radio - LongRange Package1](../../assets/hardware/telemetry/holybro_sik_longrange/holybro_sik_longrange_include1.png) + +### Pair Radios + +- 1W Radio modules with antennas (2) +- High-gain omnidirectional antenna (2) +- Male Type-C to male Type-C USB cable (1) +- Male XT30 to female XT30 adapter cable (1) +- Male XT30 to female XT60 adapter cable (1) +- JST-GH-6P to JST-GH-6P cable (1) (for Pixhawk Standard FC) +- Rubber damping grommet (3) + +![Sik Telemetry Radio - LongRange Package2](../../assets/hardware/telemetry/holybro_sik_longrange/holybro_sik_longrange_include2.png) diff --git a/docs/ko/telemetry/index.md b/docs/ko/telemetry/index.md index c28c6e3bc5..7aea2826de 100644 --- a/docs/ko/telemetry/index.md +++ b/docs/ko/telemetry/index.md @@ -6,6 +6,7 @@ PX4는 다양한 텔레메트리 라디오 타입을 지원합니다: - [SiK Radio](../telemetry/sik_radio.md) based firmware (more generally, any radio with a UART interface should work). - [HolyBro SiK Telemetry Radio](../telemetry/holybro_sik_radio.md) + - [HolyBro SiK Long Range](../telemetry/holybro_sik_longrange.md) - [RFD900 Telemetry Radio](../telemetry/rfd900_telemetry.md) - [ThunderFly TFSIK01 Telemetry Radio](../telemetry/tfsik_telemetry.md) - _HKPilot Telemetry Radio_ (Discontinued) diff --git a/docs/ko/telemetry/jfi_telemetry.md b/docs/ko/telemetry/jfi_telemetry.md index 4f7847e4a8..3742e8dcb2 100644 --- a/docs/ko/telemetry/jfi_telemetry.md +++ b/docs/ko/telemetry/jfi_telemetry.md @@ -94,7 +94,7 @@ If you want to change the baud rate: ### One-to-many (1:N) Setups For one-to-many (1:N) setups a higher baud rate is _highly recommended_ to ensure stable data reception. -All J.Fi devices should be set to the same baud rate (although communication may work even when when devices use different baud rates). +All J.Fi devices should be set to the same baud rate (although communication may work even when devices use different baud rates). This should be changed in both PX4 and the J.Fi modules as explained in the previous section. You will also need to make sure that all vehicles on the MAVLink network are assigned a unique **System ID** ([MAV_SYS_ID](../advanced_config/parameter_reference.md#MAV_SYS_ID)). diff --git a/docs/ko/telemetry/sik_radio.md b/docs/ko/telemetry/sik_radio.md index 7f14c4e313..90e755fe62 100644 --- a/docs/ko/telemetry/sik_radio.md +++ b/docs/ko/telemetry/sik_radio.md @@ -14,6 +14,7 @@ SiK 라디오는 다양한 범위와 폼 팩터를 지원하는 다양한 제조 ## 공급 업체 - [Holybro Telemetry Radio](../telemetry/holybro_sik_radio.md) +- [HolyBro SiK Long Range](../telemetry/holybro_sik_longrange.md) - [RFD900 Telemetry Radio](../telemetry/rfd900_telemetry.md) - [ThunderFly TFSIK01 Telemetry Radio](../telemetry/tfsik_telemetry.md) - _HKPilot Telemetry Radio_ (Discontinued) diff --git a/docs/ko/test_and_ci/integration_testing_mavsdk.md b/docs/ko/test_and_ci/integration_testing_mavsdk.md index 4b0211c9cf..e79003604c 100644 --- a/docs/ko/test_and_ci/integration_testing_mavsdk.md +++ b/docs/ko/test_and_ci/integration_testing_mavsdk.md @@ -7,7 +7,7 @@ PX4 can be tested end to end to using integration tests based on [MAVSDK](https: 아래 지침은 로컬에서 테스트를 설정하고 진행하는 방법을 설명합니다. -:::note +:::info This is the recommended integration test framework for PX4. ::: diff --git a/docs/ko/test_and_ci/integration_testing_ros1_mavros.md b/docs/ko/test_and_ci/integration_testing_ros1_mavros.md index 02882687a5..491e733cad 100644 --- a/docs/ko/test_and_ci/integration_testing_ros1_mavros.md +++ b/docs/ko/test_and_ci/integration_testing_ros1_mavros.md @@ -9,7 +9,7 @@ It should be used only for new test cases that _require_ ROS 1. [MAVSDK Integration Testing](../test_and_ci/integration_testing_mavsdk.md) is preferred when writing new tests. ::: -:::note +:::info All PX4 integration tests are executed automatically by our [Continuous Integration](../test_and_ci/continous_integration.md) system. ::: diff --git a/docs/ko/test_and_ci/test_flights.md b/docs/ko/test_and_ci/test_flights.md index b0c65c3a6d..6a228e7f76 100644 --- a/docs/ko/test_and_ci/test_flights.md +++ b/docs/ko/test_and_ci/test_flights.md @@ -7,7 +7,7 @@ const { site } = useData();
-

This page may be out out of date. See the latest version.

+

This page may be out of date. See the latest version.

@@ -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. +### 멀티콥터 + - [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) diff --git a/docs/ko/test_and_ci/unit_tests.md b/docs/ko/test_and_ci/unit_tests.md index 77a39b777b..247befa9c7 100644 --- a/docs/ko/test_and_ci/unit_tests.md +++ b/docs/ko/test_and_ci/unit_tests.md @@ -141,7 +141,7 @@ It can be run directly in a debugger, however be careful to only run one test pe } ``` - `OPTION` can be `OPT_NOALLTEST`,`OPT_NOJIGTEST` or `0` and is considered if within px4 shell one of the two commands are called: + `OPTION` can be `OPT_NOALLTEST`,`OPT_NOJIGTEST` or `0` and is considered if within PX4 shell one of the two commands are called: ```sh pxh> tests all diff --git a/docs/ko/test_cards/fw_01_manual_modes.md b/docs/ko/test_cards/fw_01_manual_modes.md new file mode 100644 index 0000000000..aad8b7fec2 --- /dev/null +++ b/docs/ko/test_cards/fw_01_manual_modes.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 + +❏ 안정화 상태 + +    ❏ Wings level with stick centered + +    ❏ Pitch/Roll response with correct bank angle limits + +    ❏ Yaw coordination + +    ❏ Throttle response 1:1 + +❏ 고도 + +    ❏ 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 + +❏ 위치 + +    ❏ Vehicle should hold current heading and loiter with stick centered + +    ❏ Altitude should hold current value + +    ❏ Roll input commands heading change + +## 예상 결과 + +- 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 diff --git a/docs/ko/test_cards/fw_02_full_autonomous.md b/docs/ko/test_cards/fw_02_full_autonomous.md new file mode 100644 index 0000000000..5a01c9a958 --- /dev/null +++ b/docs/ko/test_cards/fw_02_full_autonomous.md @@ -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 + +## 예상 결과 + +- 첫 시도시 임무 내용이 올라가야 함 +- 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) diff --git a/docs/ko/test_cards/mc_02_full_autonomous.md b/docs/ko/test_cards/mc_02_full_autonomous.md index 2752d9bb70..6e26b53ec9 100644 --- a/docs/ko/test_cards/mc_02_full_autonomous.md +++ b/docs/ko/test_cards/mc_02_full_autonomous.md @@ -54,7 +54,7 @@ Plan a mission on the ground. Ensure the mission has - 추력을 올릴 때 서서히 이륙한다 - 첫 시도시 임무 내용이 올라가야 함 - 자동 모드 인가시 기체는 자동으로 이륙해야 함 -- Vehicle shoud adjust height to RTL altitude before returning home +- Vehicle should adjust height to RTL altitude before returning home - 지면에 착륙시, 콥터가 지면에서 튀면 안됨 CAS of the first airspeed sensor instance", "max": 2.0, "min": 0.5, "name": "ASPD_SCALE_1", "shortDesc": "Scale of airspeed sensor 1", "type": "Float", "volatile": true}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "Airspeed Validator", "longDesc": "This is the scale IAS --> CAS of the second airspeed sensor instance", "max": 2.0, "min": 0.5, "name": "ASPD_SCALE_2", "shortDesc": "Scale of airspeed sensor 2", "type": "Float", "volatile": true}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "Airspeed Validator", "longDesc": "This is the scale IAS --> CAS of the third airspeed sensor instance", "max": 2.0, "min": 0.5, "name": "ASPD_SCALE_3", "shortDesc": "Scale of airspeed sensor 3", "type": "Float", "volatile": true}, {"category": "Standard", "default": 2, "group": "Airspeed Validator", "name": "ASPD_SCALE_APPLY", "shortDesc": "Controls when to apply the new estimated airspeed scale(s)", "type": "Int32", "values": [{"description": "Do not automatically apply the estimated scale", "value": 0}, {"description": "Apply the estimated scale after disarm", "value": 1}, {"description": "Apply the estimated scale in air", "value": 2}]}, {"category": "Standard", "decimalPlaces": 5, "default": 0.0001, "group": "Airspeed Validator", "longDesc": "Airspeed scale process noise of the internal wind estimator(s) of the airspeed selector.\nWhen unaided, the scale uncertainty (1-sigma, unitless) increases by this amount every second.", "max": 0.1, "min": 0.0, "name": "ASPD_SCALE_NSD", "shortDesc": "Wind estimator true airspeed scale process noise spectral density", "type": "Float", "units": "1/s/sqrt(Hz)"}, {"category": "Standard", "default": 4, "group": "Airspeed Validator", "longDesc": "Sets the number of standard deviations used by the innovation consistency test.", "max": 5, "min": 1, "name": "ASPD_TAS_GATE", "shortDesc": "Gate size for true airspeed fusion", "type": "Int32", "units": "SD"}, {"category": "Standard", "decimalPlaces": 1, "default": 1.4, "group": "Airspeed Validator", "longDesc": "True airspeed measurement noise of the internal wind estimator(s) of the airspeed selector.", "max": 4.0, "min": 0.0, "name": "ASPD_TAS_NOISE", "shortDesc": "Wind estimator true airspeed measurement noise", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 2.0, "group": "Airspeed Validator", "longDesc": "The airspeed alternative derived from groundspeed and heading will be declared valid\nas soon and as long the horizontal wind uncertainty is below this value.", "max": 5.0, "min": 0.01, "name": "ASPD_WERR_THR", "shortDesc": "Horizontal wind uncertainty threshold for valid ground-minus-wind", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.1, "group": "Airspeed Validator", "longDesc": "Wind process noise of the internal wind estimator(s) of the airspeed selector.\nWhen unaided, the wind estimate uncertainty (1-sigma, in m/s) increases by this amount every second.", "max": 1.0, "min": 0.0, "name": "ASPD_WIND_NSD", "shortDesc": "Wind estimator wind process noise spectral density", "type": "Float", "units": "m/s^2/sqrt(Hz)"}, {"category": "Standard", "default": 0, "group": "Attitude Q estimator", "name": "ATT_ACC_COMP", "shortDesc": "Acceleration compensation based on GPS velocity", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 3, "default": 0.05, "group": "Attitude Q estimator", "max": 2.0, "min": 0.0, "name": "ATT_BIAS_MAX", "shortDesc": "Gyro bias limit", "type": "Float", "units": "rad/s"}, {"category": "Standard", "default": 0, "group": "Attitude Q estimator", "longDesc": "Enable standalone quaternion based attitude estimator.", "name": "ATT_EN", "shortDesc": "standalone attitude estimator enable (unsupported)", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 0, "group": "Attitude Q estimator", "longDesc": "Set to 1 to use heading estimate from vision.\nSet to 2 to use heading from motion capture.", "max": 2, "min": 0, "name": "ATT_EXT_HDG_M", "shortDesc": "External heading usage mode (from Motion capture/Vision)", "type": "Int32", "values": [{"description": "None", "value": 0}, {"description": "Vision", "value": 1}, {"description": "Motion Capture", "value": 2}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Attitude Q estimator", "longDesc": "This parameter is not used in normal operation,\nas the declination is looked up based on the\nGPS coordinates of the vehicle.", "name": "ATT_MAG_DECL", "shortDesc": "Magnetic declination, in degrees", "type": "Float", "units": "deg"}, {"category": "Standard", "default": 1, "group": "Attitude Q estimator", "name": "ATT_MAG_DECL_A", "shortDesc": "Automatic GPS based declination compensation", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.2, "group": "Attitude Q estimator", "max": 1.0, "min": 0.0, "name": "ATT_W_ACC", "shortDesc": "Complimentary filter accelerometer weight", "type": "Float"}, {"category": "Standard", "default": 0.1, "group": "Attitude Q estimator", "max": 1.0, "min": 0.0, "name": "ATT_W_EXT_HDG", "shortDesc": "Complimentary filter external heading weight", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.1, "group": "Attitude Q estimator", "max": 1.0, "min": 0.0, "name": "ATT_W_GYRO_BIAS", "shortDesc": "Complimentary filter gyroscope bias weight", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.1, "group": "Attitude Q estimator", "longDesc": "Set to 0 to avoid using the magnetometer.", "max": 1.0, "min": 0.0, "name": "ATT_W_MAG", "shortDesc": "Complimentary filter magnetometer weight", "type": "Float"}, {"category": "Standard", "default": 2, "group": "Autotune", "longDesc": "After the auto-tuning sequence is completed,\na new set of gains is available and can be applied\nimmediately or after landing.", "name": "FW_AT_APPLY", "shortDesc": "Controls when to apply the new gains", "type": "Int32", "values": [{"description": "Do not apply the new gains (logging only)", "value": 0}, {"description": "Apply the new gains after disarm", "value": 1}, {"description": "Apply the new gains in air", "value": 2}]}, {"bitmask": [{"description": "roll", "index": 0}, {"description": "pitch", "index": 1}, {"description": "yaw", "index": 2}], "category": "Standard", "default": 3, "group": "Autotune", "longDesc": "Defines which axes will be tuned during the auto-tuning sequence\nSet bits in the following positions to enable:\n0 : Roll\n1 : Pitch\n2 : Yaw", "max": 7, "min": 1, "name": "FW_AT_AXES", "shortDesc": "Tuning axes selection", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "Autotune", "longDesc": "Defines which RC_MAP_AUXn parameter maps the manual control channel used to enable/disable auto tuning.", "max": 6, "min": 0, "name": "FW_AT_MAN_AUX", "shortDesc": "Enable/disable auto tuning using a manual control AUX input", "type": "Int32", "values": [{"description": "Disable", "value": 0}, {"description": "Aux1", "value": 1}, {"description": "Aux2", "value": 2}, {"description": "Aux3", "value": 3}, {"description": "Aux4", "value": 4}, {"description": "Aux5", "value": 5}, {"description": "Aux6", "value": 6}]}, {"category": "Standard", "decimalPlaces": 1, "default": 1.0, "group": "Autotune", "longDesc": "Can be set lower or higher than the end frequency", "max": 30.0, "min": 0.1, "name": "FW_AT_SYSID_F0", "shortDesc": "Start frequency of the injected signal", "type": "Float", "units": "Hz"}, {"category": "Standard", "decimalPlaces": 1, "default": 10.0, "group": "Autotune", "longDesc": "Can be set lower or higher than the start frequency", "max": 30.0, "min": 0.1, "name": "FW_AT_SYSID_F1", "shortDesc": "End frequency of the injected signal", "type": "Float", "units": "Hz"}, {"category": "Standard", "decimalPlaces": 0, "default": 10.0, "group": "Autotune", "longDesc": "Duration of the input signal sent on each axis during system identification", "max": 120.0, "min": 5.0, "name": "FW_AT_SYSID_TIME", "shortDesc": "Maneuver time for each axis", "type": "Float", "units": "s"}, {"category": "Standard", "default": 1, "group": "Autotune", "longDesc": "Type of signal used during system identification to excite the system.", "name": "FW_AT_SYSID_TYPE", "shortDesc": "Input signal type", "type": "Int32", "values": [{"description": "Step", "value": 0}, {"description": "Linear sine sweep", "value": 1}, {"description": "Logarithmic sine sweep", "value": 2}]}, {"category": "Standard", "default": 1, "group": "Autotune", "longDesc": "After the auto-tuning sequence is completed,\na new set of gains is available and can be applied\nimmediately or after landing.\nWARNING Applying the gains in air is dangerous as there is no\nguarantee that those new gains will be able to stabilize\nthe drone properly.", "name": "MC_AT_APPLY", "shortDesc": "Controls when to apply the new gains", "type": "Int32", "values": [{"description": "Do not apply the new gains (logging only)", "value": 0}, {"description": "Apply the new gains after disarm", "value": 1}, {"description": "WARNING Apply the new gains in air", "value": 2}]}, {"category": "Standard", "default": 0, "group": "Autotune", "name": "MC_AT_EN", "shortDesc": "Multicopter autotune module enable", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.14, "group": "Autotune", "max": 0.5, "min": 0.01, "name": "MC_AT_RISE_TIME", "shortDesc": "Desired angular rate closed-loop rise time", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.7, "group": "Autotune", "max": 6.0, "min": 0.1, "name": "MC_AT_SYSID_AMP", "shortDesc": "Amplitude of the injected signal", "type": "Float"}, {"category": "Standard", "decimalPlaces": 0, "default": -1.0, "group": "Battery Calibration", "increment": 50.0, "longDesc": "Defines the capacity of battery 1 in mAh.", "max": 100000.0, "min": -1.0, "name": "BAT1_CAPACITY", "rebootRequired": true, "shortDesc": "Battery 1 capacity", "type": "Float", "units": "mAh"}, {"category": "Standard", "default": 0, "group": "Battery Calibration", "longDesc": "Defines the number of cells the attached battery consists of.", "name": "BAT1_N_CELLS", "shortDesc": "Number of cells for battery 1", "type": "Int32", "values": [{"description": "Unknown", "value": 0}, {"description": "1S Battery", "value": 1}, {"description": "2S Battery", "value": 2}, {"description": "3S Battery", "value": 3}, {"description": "4S Battery", "value": 4}, {"description": "5S Battery", "value": 5}, {"description": "6S Battery", "value": 6}, {"description": "7S Battery", "value": 7}, {"description": "8S Battery", "value": 8}, {"description": "9S Battery", "value": 9}, {"description": "10S Battery", "value": 10}, {"description": "11S Battery", "value": 11}, {"description": "12S Battery", "value": 12}, {"description": "13S Battery", "value": 13}, {"description": "14S Battery", "value": 14}, {"description": "15S Battery", "value": 15}, {"description": "16S Battery", "value": 16}]}, {"category": "Standard", "decimalPlaces": 4, "default": -1.0, "group": "Battery Calibration", "increment": 0.0005, "longDesc": "If non-negative, then this will be used instead of the online estimated internal resistance.", "max": 0.2, "min": -1.0, "name": "BAT1_R_INTERNAL", "rebootRequired": true, "shortDesc": "Explicitly defines the per cell internal resistance for battery 1", "type": "Float", "units": "Ohm"}, {"category": "Standard", "default": 0, "group": "Battery Calibration", "longDesc": "This parameter controls the source of battery data. The value 'Power Module / Analog'\nmeans that measurements are expected to come from either analog (ADC) inputs\nor an I2C power monitor (e.g. INA226). Analog inputs are voltage and current\nmeasurements read from the board's ADC channels, typically from an onboard\nvoltage divider and current shunt, or an external analog power module.\nI2C power monitors are digital sensors on the I2C bus.\nIf the value is set to 'External' then the system expects to receive MAVLink\nor CAN battery status messages, or the battery data is published by an external driver.\nIf the value is set to 'ESCs', the battery information are taken from the esc_status message.\nThis requires the ESC to provide both voltage as well as current (via ESC telemetry).", "name": "BAT1_SOURCE", "rebootRequired": true, "shortDesc": "Battery 1 monitoring source", "type": "Int32", "values": [{"description": "Disabled", "value": -1}, {"description": "Power Module / Analog", "value": 0}, {"description": "External", "value": 1}, {"description": "ESCs", "value": 2}]}, {"category": "Standard", "decimalPlaces": 2, "default": 4.05, "group": "Battery Calibration", "increment": 0.01, "longDesc": "Defines the voltage where a single cell of the battery is considered full.\nFor a more accurate estimate set this below the nominal voltage of e.g. 4.2V", "name": "BAT1_V_CHARGED", "rebootRequired": true, "shortDesc": "Full cell voltage", "type": "Float", "units": "V"}, {"category": "Standard", "decimalPlaces": 2, "default": 3.6, "group": "Battery Calibration", "increment": 0.01, "longDesc": "Defines the voltage where a single cell of the battery is considered empty.\nThe voltage should be chosen above the steep dropoff at 3.5V. A typical\nlithium battery can only be discharged under high load down to 10% before\nit drops off to a voltage level damaging the cells.", "name": "BAT1_V_EMPTY", "rebootRequired": true, "shortDesc": "Empty cell voltage", "type": "Float", "units": "V"}, {"category": "Standard", "decimalPlaces": 0, "default": -1.0, "group": "Battery Calibration", "increment": 50.0, "longDesc": "Defines the capacity of battery 2 in mAh.", "max": 100000.0, "min": -1.0, "name": "BAT2_CAPACITY", "rebootRequired": true, "shortDesc": "Battery 2 capacity", "type": "Float", "units": "mAh"}, {"category": "Standard", "default": 0, "group": "Battery Calibration", "longDesc": "Defines the number of cells the attached battery consists of.", "name": "BAT2_N_CELLS", "shortDesc": "Number of cells for battery 2", "type": "Int32", "values": [{"description": "Unknown", "value": 0}, {"description": "1S Battery", "value": 1}, {"description": "2S Battery", "value": 2}, {"description": "3S Battery", "value": 3}, {"description": "4S Battery", "value": 4}, {"description": "5S Battery", "value": 5}, {"description": "6S Battery", "value": 6}, {"description": "7S Battery", "value": 7}, {"description": "8S Battery", "value": 8}, {"description": "9S Battery", "value": 9}, {"description": "10S Battery", "value": 10}, {"description": "11S Battery", "value": 11}, {"description": "12S Battery", "value": 12}, {"description": "13S Battery", "value": 13}, {"description": "14S Battery", "value": 14}, {"description": "15S Battery", "value": 15}, {"description": "16S Battery", "value": 16}]}, {"category": "Standard", "decimalPlaces": 4, "default": -1.0, "group": "Battery Calibration", "increment": 0.0005, "longDesc": "If non-negative, then this will be used instead of the online estimated internal resistance.", "max": 0.2, "min": -1.0, "name": "BAT2_R_INTERNAL", "rebootRequired": true, "shortDesc": "Explicitly defines the per cell internal resistance for battery 2", "type": "Float", "units": "Ohm"}, {"category": "Standard", "default": -1, "group": "Battery Calibration", "longDesc": "This parameter controls the source of battery data. The value 'Power Module / Analog'\nmeans that measurements are expected to come from either analog (ADC) inputs\nor an I2C power monitor (e.g. INA226). Analog inputs are voltage and current\nmeasurements read from the board's ADC channels, typically from an onboard\nvoltage divider and current shunt, or an external analog power module.\nI2C power monitors are digital sensors on the I2C bus.\nIf the value is set to 'External' then the system expects to receive MAVLink\nor CAN battery status messages, or the battery data is published by an external driver.\nIf the value is set to 'ESCs', the battery information are taken from the esc_status message.\nThis requires the ESC to provide both voltage as well as current (via ESC telemetry).", "name": "BAT2_SOURCE", "rebootRequired": true, "shortDesc": "Battery 2 monitoring source", "type": "Int32", "values": [{"description": "Disabled", "value": -1}, {"description": "Power Module / Analog", "value": 0}, {"description": "External", "value": 1}, {"description": "ESCs", "value": 2}]}, {"category": "Standard", "decimalPlaces": 2, "default": 4.05, "group": "Battery Calibration", "increment": 0.01, "longDesc": "Defines the voltage where a single cell of the battery is considered full.\nFor a more accurate estimate set this below the nominal voltage of e.g. 4.2V", "name": "BAT2_V_CHARGED", "rebootRequired": true, "shortDesc": "Full cell voltage", "type": "Float", "units": "V"}, {"category": "Standard", "decimalPlaces": 2, "default": 3.6, "group": "Battery Calibration", "increment": 0.01, "longDesc": "Defines the voltage where a single cell of the battery is considered empty.\nThe voltage should be chosen above the steep dropoff at 3.5V. A typical\nlithium battery can only be discharged under high load down to 10% before\nit drops off to a voltage level damaging the cells.", "name": "BAT2_V_EMPTY", "rebootRequired": true, "shortDesc": "Empty cell voltage", "type": "Float", "units": "V"}, {"category": "Standard", "decimalPlaces": 0, "default": -1.0, "group": "Battery Calibration", "increment": 50.0, "longDesc": "Defines the capacity of battery 3 in mAh.", "max": 100000.0, "min": -1.0, "name": "BAT3_CAPACITY", "rebootRequired": true, "shortDesc": "Battery 3 capacity", "type": "Float", "units": "mAh"}, {"category": "Standard", "default": 0, "group": "Battery Calibration", "longDesc": "Defines the number of cells the attached battery consists of.", "name": "BAT3_N_CELLS", "shortDesc": "Number of cells for battery 3", "type": "Int32", "values": [{"description": "Unknown", "value": 0}, {"description": "1S Battery", "value": 1}, {"description": "2S Battery", "value": 2}, {"description": "3S Battery", "value": 3}, {"description": "4S Battery", "value": 4}, {"description": "5S Battery", "value": 5}, {"description": "6S Battery", "value": 6}, {"description": "7S Battery", "value": 7}, {"description": "8S Battery", "value": 8}, {"description": "9S Battery", "value": 9}, {"description": "10S Battery", "value": 10}, {"description": "11S Battery", "value": 11}, {"description": "12S Battery", "value": 12}, {"description": "13S Battery", "value": 13}, {"description": "14S Battery", "value": 14}, {"description": "15S Battery", "value": 15}, {"description": "16S Battery", "value": 16}]}, {"category": "Standard", "decimalPlaces": 4, "default": -1.0, "group": "Battery Calibration", "increment": 0.0005, "longDesc": "If non-negative, then this will be used instead of the online estimated internal resistance.", "max": 0.2, "min": -1.0, "name": "BAT3_R_INTERNAL", "rebootRequired": true, "shortDesc": "Explicitly defines the per cell internal resistance for battery 3", "type": "Float", "units": "Ohm"}, {"category": "Standard", "default": -1, "group": "Battery Calibration", "longDesc": "This parameter controls the source of battery data. The value 'Power Module / Analog'\nmeans that measurements are expected to come from either analog (ADC) inputs\nor an I2C power monitor (e.g. INA226). Analog inputs are voltage and current\nmeasurements read from the board's ADC channels, typically from an onboard\nvoltage divider and current shunt, or an external analog power module.\nI2C power monitors are digital sensors on the I2C bus.\nIf the value is set to 'External' then the system expects to receive MAVLink\nor CAN battery status messages, or the battery data is published by an external driver.\nIf the value is set to 'ESCs', the battery information are taken from the esc_status message.\nThis requires the ESC to provide both voltage as well as current (via ESC telemetry).", "name": "BAT3_SOURCE", "rebootRequired": true, "shortDesc": "Battery 3 monitoring source", "type": "Int32", "values": [{"description": "Disabled", "value": -1}, {"description": "Power Module / Analog", "value": 0}, {"description": "External", "value": 1}, {"description": "ESCs", "value": 2}]}, {"category": "Standard", "decimalPlaces": 2, "default": 4.05, "group": "Battery Calibration", "increment": 0.01, "longDesc": "Defines the voltage where a single cell of the battery is considered full.\nFor a more accurate estimate set this below the nominal voltage of e.g. 4.2V", "name": "BAT3_V_CHARGED", "rebootRequired": true, "shortDesc": "Full cell voltage", "type": "Float", "units": "V"}, {"category": "Standard", "decimalPlaces": 2, "default": 3.6, "group": "Battery Calibration", "increment": 0.01, "longDesc": "Defines the voltage where a single cell of the battery is considered empty.\nThe voltage should be chosen above the steep dropoff at 3.5V. A typical\nlithium battery can only be discharged under high load down to 10% before\nit drops off to a voltage level damaging the cells.", "name": "BAT3_V_EMPTY", "rebootRequired": true, "shortDesc": "Empty cell voltage", "type": "Float", "units": "V"}, {"category": "Standard", "decimalPlaces": 2, "default": 15.0, "group": "Battery Calibration", "increment": 0.1, "longDesc": "This value is used to initialize the in-flight average current estimation,\nwhich in turn is used for estimating remaining flight time and RTL triggering.", "max": 500.0, "min": 0.0, "name": "BAT_AVRG_CURRENT", "shortDesc": "Expected battery current in flight", "type": "Float", "units": "A"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.07, "group": "Battery Calibration", "increment": 0.01, "longDesc": "Sets the threshold when the battery will be reported as critically low.\nThis has to be lower than the low threshold. This threshold commonly\nwill trigger RTL.", "max": 0.5, "min": 0.05, "name": "BAT_CRIT_THR", "shortDesc": "Critical threshold", "type": "Float", "units": "norm"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.05, "group": "Battery Calibration", "increment": 0.01, "longDesc": "Sets the threshold when the battery will be reported as dangerously low.\nThis has to be lower than the critical threshold. This threshold commonly\nwill trigger landing.", "max": 0.5, "min": 0.03, "name": "BAT_EMERGEN_THR", "shortDesc": "Emergency threshold", "type": "Float", "units": "norm"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.15, "group": "Battery Calibration", "increment": 0.01, "longDesc": "Sets the threshold when the battery will be reported as low.\nThis has to be higher than the critical threshold.", "max": 0.5, "min": 0.12, "name": "BAT_LOW_THR", "shortDesc": "Low threshold", "type": "Float", "units": "norm"}, {"category": "Standard", "decimalPlaces": 1, "default": 40.0, "group": "Camera trigger", "longDesc": "This parameter sets the time the trigger needs to pulled high or low.", "max": 3000.0, "min": 0.1, "name": "TRIG_ACT_TIME", "rebootRequired": true, "shortDesc": "Camera trigger activation time", "type": "Float", "units": "ms"}, {"category": "Standard", "decimalPlaces": 1, "default": 25.0, "group": "Camera trigger", "increment": 1.0, "longDesc": "Sets the distance at which to trigger the camera.", "min": 0.0, "name": "TRIG_DISTANCE", "rebootRequired": true, "shortDesc": "Camera trigger distance", "type": "Float", "units": "m"}, {"category": "Standard", "default": 4, "group": "Camera trigger", "longDesc": "Selects the trigger interface", "name": "TRIG_INTERFACE", "rebootRequired": true, "shortDesc": "Camera trigger Interface", "type": "Int32", "values": [{"description": "GPIO", "value": 1}, {"description": "Seagull MAP2 (over PWM)", "value": 2}, {"description": "MAVLink (Camera Protocol v1)", "value": 3}, {"description": "Generic PWM (IR trigger, servo)", "value": 4}]}, {"category": "Standard", "decimalPlaces": 1, "default": 40.0, "group": "Camera trigger", "longDesc": "This parameter sets the time between two consecutive trigger events", "max": 10000.0, "min": 4.0, "name": "TRIG_INTERVAL", "rebootRequired": true, "shortDesc": "Camera trigger interval", "type": "Float", "units": "ms"}, {"category": "Standard", "decimalPlaces": 1, "default": 1.0, "group": "Camera trigger", "longDesc": "This parameter sets the minimum time between two consecutive trigger events\nthe specific camera setup is supporting.", "max": 10000.0, "min": 1.0, "name": "TRIG_MIN_INTERVA", "rebootRequired": true, "shortDesc": "Minimum camera trigger interval", "type": "Float", "units": "ms"}, {"category": "Standard", "default": 0, "group": "Camera trigger", "max": 4, "min": 0, "name": "TRIG_MODE", "rebootRequired": true, "shortDesc": "Camera trigger mode", "type": "Int32", "values": [{"description": "Disable", "value": 0}, {"description": "Time based, on command", "value": 1}, {"description": "Time based, always on", "value": 2}, {"description": "Distance based, always on", "value": 3}, {"description": "Distance based, on command (Survey mode)", "value": 4}]}, {"category": "Standard", "default": 0, "group": "Camera trigger", "longDesc": "This parameter sets the polarity of the trigger (0 = active low, 1 = active high )", "max": 1, "min": 0, "name": "TRIG_POLARITY", "rebootRequired": true, "shortDesc": "Camera trigger polarity", "type": "Int32", "values": [{"description": "Active low", "value": 0}, {"description": "Active high", "value": 1}]}, {"category": "Standard", "default": 1500, "group": "Camera trigger", "max": 2000, "min": 1000, "name": "TRIG_PWM_NEUTRAL", "rebootRequired": true, "shortDesc": "PWM neutral output on trigger pin", "type": "Int32", "units": "us"}, {"category": "Standard", "default": 1900, "group": "Camera trigger", "max": 2000, "min": 1000, "name": "TRIG_PWM_SHOOT", "rebootRequired": true, "shortDesc": "PWM output to trigger shot", "type": "Int32", "units": "us"}, {"category": "Developer", "default": 0, "group": "Circuit Breaker", "longDesc": "Setting this parameter to 782097 will disable the buzzer audio notification.\nSetting this parameter to 782090 will disable the startup tune, while keeping\nall others enabled.", "max": 782097, "min": 0, "name": "CBRK_BUZZER", "rebootRequired": true, "shortDesc": "Circuit breaker for disabling buzzer", "type": "Int32"}, {"category": "Developer", "default": 121212, "group": "Circuit Breaker", "longDesc": "Setting this parameter to 121212 will disable the flight termination action if triggered\nby the FailureDetector logic or if FMU is lost.\nThis circuit breaker does not affect the RC loss, data link loss, geofence,\nand takeoff failure detection safety logic.", "max": 121212, "min": 0, "name": "CBRK_FLIGHTTERM", "rebootRequired": true, "shortDesc": "Circuit breaker for flight termination", "type": "Int32"}, {"category": "Developer", "default": 22027, "group": "Circuit Breaker", "longDesc": "Setting this parameter to 22027 will disable IO safety.\nWARNING: ENABLING THIS CIRCUIT BREAKER IS AT OWN RISK", "max": 22027, "min": 0, "name": "CBRK_IO_SAFETY", "shortDesc": "Circuit breaker for IO safety", "type": "Int32"}, {"category": "Developer", "default": 0, "group": "Circuit Breaker", "longDesc": "Setting this parameter to 894281 will disable the power valid\nchecks in the commander.\nWARNING: ENABLING THIS CIRCUIT BREAKER IS AT OWN RISK", "max": 894281, "min": 0, "name": "CBRK_SUPPLY_CHK", "shortDesc": "Circuit breaker for power supply check", "type": "Int32"}, {"category": "Developer", "default": 197848, "group": "Circuit Breaker", "longDesc": "Setting this parameter to 197848 will disable the USB connected\nchecks in the commander, setting it to 0 keeps them enabled (recommended).\nWe are generally recommending to not fly with the USB link\nconnected and production vehicles should set this parameter to\nzero to prevent users from flying USB powered. However, for R&D purposes\nit has proven over the years to work just fine.", "max": 197848, "min": 0, "name": "CBRK_USB_CHK", "shortDesc": "Circuit breaker for USB link check", "type": "Int32"}, {"category": "Developer", "default": 0, "group": "Circuit Breaker", "longDesc": "Setting this parameter to 159753 will enable arming in fixed-wing\nmode for VTOLs.\nWARNING: ENABLING THIS CIRCUIT BREAKER IS AT OWN RISK", "max": 159753, "min": 0, "name": "CBRK_VTOLARMING", "shortDesc": "Circuit breaker for arming in fixed-wing mode check", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "Commander", "longDesc": "Note: actuator failure needs to be enabled and configured via FD_ACT_*\nparameters.", "max": 3, "min": 0, "name": "COM_ACT_FAIL_ACT", "shortDesc": "Set the actuator failure failsafe mode", "type": "Int32", "values": [{"description": "Warning only", "value": 0}, {"description": "Hold mode", "value": 1}, {"description": "Land mode", "value": 2}, {"description": "Return mode", "value": 3}, {"description": "Terminate", "value": 4}]}, {"category": "Standard", "default": 1, "group": "Commander", "longDesc": "Set 0 to prevent accidental use of the vehicle e.g. for safety or maintenance reasons.", "name": "COM_ARMABLE", "shortDesc": "Flag to allow arming", "type": "Int32", "values": [{"description": "Disallow arming", "value": 0}, {"description": "Allow arming", "value": 1}]}, {"category": "Standard", "default": 10, "group": "Commander", "longDesc": "Used if arm authorization is requested by COM_ARM_AUTH_REQ.", "name": "COM_ARM_AUTH_ID", "shortDesc": "Arm authorizer system id", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "Commander", "longDesc": "Methods:\n- one arm: request authorization and arm when authorization is received\n- two step arm: 1st arm command request an authorization and\n2nd arm command arm the drone if authorized\nUsed if arm authorization is requested by COM_ARM_AUTH_REQ.", "name": "COM_ARM_AUTH_MET", "shortDesc": "Arm authorization method", "type": "Int32", "values": [{"description": "one arm", "value": 0}, {"description": "two step arm", "value": 1}]}, {"category": "Standard", "default": 0, "group": "Commander", "longDesc": "By default off. The default allows to arm the vehicle without a arm authorization.", "name": "COM_ARM_AUTH_REQ", "shortDesc": "Require arm authorization to arm", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 1, "default": 1.0, "group": "Commander", "increment": 0.1, "longDesc": "Timeout for authorizer answer.\nUsed if arm authorization is requested by COM_ARM_AUTH_REQ.", "name": "COM_ARM_AUTH_TO", "shortDesc": "Arm authorization timeout", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": -1.0, "group": "Commander", "increment": 0.01, "longDesc": "Threshold for battery percentage below arming is prohibited.\nA negative value means BAT_CRIT_THR is the threshold.", "max": 0.9, "min": -1.0, "name": "COM_ARM_BAT_MIN", "shortDesc": "Minimum battery level for arming", "type": "Float", "units": "norm"}, {"category": "Standard", "default": 0, "group": "Commander", "longDesc": "If this parameter is set, the system will check ESC's online status and failures.\nThis param is specific for ESCs reporting status. It shall be used only if ESCs support telemetry.", "name": "COM_ARM_CHK_ESCS", "shortDesc": "Enable checks on ESCs that report telemetry", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 1, "group": "Commander", "longDesc": "This check detects if there are hardfault files present on the\nSD card. If so, and the parameter is enabled, arming is prevented.", "name": "COM_ARM_HFLT_CHK", "shortDesc": "Enable FMU SD card hardfault detection check", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.7, "group": "Commander", "increment": 0.05, "max": 1.0, "min": 0.1, "name": "COM_ARM_IMU_ACC", "shortDesc": "Maximum accelerometer inconsistency between IMU units that will allow arming", "type": "Float", "units": "m/s^2"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.25, "group": "Commander", "increment": 0.01, "max": 0.3, "min": 0.02, "name": "COM_ARM_IMU_GYR", "shortDesc": "Maximum rate gyro inconsistency between IMU units that will allow arming", "type": "Float", "units": "rad/s"}, {"category": "Standard", "default": 60, "group": "Commander", "longDesc": "Set -1 to disable the check.", "max": 180, "min": 3, "name": "COM_ARM_MAG_ANG", "shortDesc": "Maximum magnetic field inconsistency between units that will allow arming", "type": "Int32", "units": "deg"}, {"category": "Standard", "default": 2, "group": "Commander", "longDesc": "Check if the estimator detects a strong magnetic\ndisturbance (check enabled by EKF2_MAG_CHECK)", "name": "COM_ARM_MAG_STR", "shortDesc": "Enable mag strength preflight check", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Deny arming", "value": 1}, {"description": "Warning only", "value": 2}]}, {"category": "Standard", "default": 0, "group": "Commander", "longDesc": "The default allows to arm the vehicle without a valid mission.", "name": "COM_ARM_MIS_REQ", "shortDesc": "Require valid mission to arm", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 0, "group": "Commander", "longDesc": "This check detects if the Open Drone ID system is missing.\nDepending on the value of the parameter, the check can be\ndisabled, warn only or deny arming.", "name": "COM_ARM_ODID", "shortDesc": "Enable Drone ID system detection and health check", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Warning only", "value": 1}, {"description": "Enforce Open Drone ID system presence", "value": 2}]}, {"category": "Standard", "default": 1, "group": "Commander", "longDesc": "This check detects if the FMU SD card is missing.\nDepending on the value of the parameter, the check can be\ndisabled, warn only or deny arming.", "name": "COM_ARM_SDCARD", "shortDesc": "Enable FMU SD card detection check", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Warning only", "value": 1}, {"description": "Enforce SD card presence", "value": 2}]}, {"category": "Standard", "default": 0, "group": "Commander", "longDesc": "0: Arming/disarming triggers on switch transition.\n1: Arming/disarming triggers when holding the momentary button down like the stick gesture.", "name": "COM_ARM_SWISBTN", "shortDesc": "Arm switch is a momentary button", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 0, "group": "Commander", "longDesc": "This check detects if a traffic avoidance system (ADSB/FLARM transponder)\nis missing. Depending on the value of the parameter, the check can be\ndisabled, warn only, or deny arming.", "name": "COM_ARM_TRAFF", "shortDesc": "Enable Traffic Avoidance system detection check", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Warning only", "value": 1}, {"description": "Enforce for all modes", "value": 2}, {"description": "Enforce for mission modes only", "value": 3}]}, {"category": "Standard", "default": 1, "group": "Commander", "longDesc": "Configures whether arming is allowed without GNSS, for modes that require a global position\n(specifically, in those modes when a check defined by EKF2_GPS_CHECK fails).\nThe settings deny arming and warn, allow arming and warn, or silently allow arming.", "name": "COM_ARM_WO_GPS", "shortDesc": "Arming without GNSS configuration", "type": "Int32", "values": [{"description": "Deny arming", "value": 0}, {"description": "Allow arming (with warning)", "value": 1}, {"description": "Allow arming (no warning)", "value": 2}]}, {"category": "Standard", "default": 95.0, "group": "Commander", "increment": 1.0, "longDesc": "The check fails if the CPU load is above this threshold for 2s.\nA negative value disables the check.", "max": 100.0, "min": -1.0, "name": "COM_CPU_MAX", "shortDesc": "Maximum allowed CPU load to still arm", "type": "Float", "units": "%"}, {"category": "Standard", "decimalPlaces": 1, "default": 2.0, "group": "Commander", "increment": 0.1, "longDesc": "A non-zero, positive value specifies the time-out period in seconds after which the vehicle will be\nautomatically disarmed in case a landing situation has been detected during this period.\nA zero or negative value means that automatic disarming triggered by landing detection is disabled.", "name": "COM_DISARM_LAND", "shortDesc": "Time-out for auto disarm after landing", "type": "Float", "units": "s"}, {"category": "Standard", "default": 1, "group": "Commander", "longDesc": "0: Disallow disarming when not landed\n1: Allow disarming in multicopter flight in modes where\nthe thrust is directly controlled by thr throttle stick\ne.g. Stabilized, Acro", "name": "COM_DISARM_MAN", "shortDesc": "Allow disarming via switch/stick/button on multicopters in manual thrust modes", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 1, "default": 10.0, "group": "Commander", "increment": 0.1, "longDesc": "A non-zero, positive value specifies the time in seconds, within which the\nvehicle is expected to take off after arming. In case the vehicle didn't takeoff\nwithin the timeout it disarms again.\nA negative value disables autmoatic disarming triggered by a pre-takeoff timeout.", "name": "COM_DISARM_PRFLT", "shortDesc": "Time-out for auto disarm if not taking off", "type": "Float", "units": "s"}, {"bitmask": [{"description": "Mission", "index": 0}, {"description": "Auto modes", "index": 1}, {"description": "Offboard", "index": 2}, {"description": "External Mode", "index": 3}, {"description": "Altitude Cruise", "index": 4}], "category": "Standard", "default": 0, "group": "Commander", "longDesc": "Specify modes in which ground control station connection loss is ignored and no failsafe action is triggered.\nSee also COM_RCL_EXCEPT.", "max": 31, "min": 0, "name": "COM_DLL_EXCEPT", "shortDesc": "Datalink loss exceptions", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 1, "default": 10, "group": "Commander", "increment": 1, "longDesc": "After this amount of seconds without datalink, the GCS connection lost mode triggers", "max": 300, "min": 5, "name": "COM_DL_LOSS_T", "shortDesc": "GCS connection loss time threshold", "type": "Int32", "units": "s"}, {"category": "Standard", "decimalPlaces": 1, "default": 5.0, "group": "Commander", "longDesc": "Before entering failsafe (RTL, Land, Hold), wait COM_FAIL_ACT_T seconds in Hold mode\nfor the user to realize.\nDuring that time the user can switch modes, but cannot take over control via the stick override feature (see COM_RC_OVERRIDE).\nAfterwards the configured failsafe action is triggered and the user may use stick override.\nA zero value disables the delay.", "max": 25.0, "min": 0.0, "name": "COM_FAIL_ACT_T", "shortDesc": "Delay between failsafe condition triggered and failsafe reaction", "type": "Float", "units": "s"}, {"category": "System", "default": 0, "group": "Commander", "longDesc": "This number is incremented automatically after every flight on\ndisarming in order to remember the next flight UUID.\nThe first flight is 0.", "min": 0, "name": "COM_FLIGHT_UUID", "shortDesc": "Next flight UUID", "type": "Int32", "volatile": true}, {"category": "Standard", "default": -1, "group": "Commander", "longDesc": "If the main switch channel is in this range the\nselected flight mode will be applied.", "name": "COM_FLTMODE1", "shortDesc": "Mode slot 1", "type": "Int32", "values": [{"description": "Unassigned", "value": -1}, {"description": "Manual", "value": 0}, {"description": "Altitude", "value": 1}, {"description": "Position", "value": 2}, {"description": "Mission", "value": 3}, {"description": "Hold", "value": 4}, {"description": "Return", "value": 5}, {"description": "Acro", "value": 6}, {"description": "Offboard", "value": 7}, {"description": "Stabilized", "value": 8}, {"description": "Position Slow", "value": 9}, {"description": "Takeoff", "value": 10}, {"description": "Land", "value": 11}, {"description": "Follow Me", "value": 12}, {"description": "Precision Land", "value": 13}, {"description": "Altitude Cruise", "value": 16}, {"description": "External Mode 1", "value": 100}, {"description": "External Mode 2", "value": 101}, {"description": "External Mode 3", "value": 102}, {"description": "External Mode 4", "value": 103}, {"description": "External Mode 5", "value": 104}, {"description": "External Mode 6", "value": 105}, {"description": "External Mode 7", "value": 106}, {"description": "External Mode 8", "value": 107}]}, {"category": "Standard", "default": -1, "group": "Commander", "longDesc": "If the main switch channel is in this range the\nselected flight mode will be applied.", "name": "COM_FLTMODE2", "shortDesc": "Mode slot 2", "type": "Int32", "values": [{"description": "Unassigned", "value": -1}, {"description": "Manual", "value": 0}, {"description": "Altitude", "value": 1}, {"description": "Position", "value": 2}, {"description": "Mission", "value": 3}, {"description": "Hold", "value": 4}, {"description": "Return", "value": 5}, {"description": "Acro", "value": 6}, {"description": "Offboard", "value": 7}, {"description": "Stabilized", "value": 8}, {"description": "Position Slow", "value": 9}, {"description": "Takeoff", "value": 10}, {"description": "Land", "value": 11}, {"description": "Follow Me", "value": 12}, {"description": "Precision Land", "value": 13}, {"description": "Altitude Cruise", "value": 16}, {"description": "External Mode 1", "value": 100}, {"description": "External Mode 2", "value": 101}, {"description": "External Mode 3", "value": 102}, {"description": "External Mode 4", "value": 103}, {"description": "External Mode 5", "value": 104}, {"description": "External Mode 6", "value": 105}, {"description": "External Mode 7", "value": 106}, {"description": "External Mode 8", "value": 107}]}, {"category": "Standard", "default": -1, "group": "Commander", "longDesc": "If the main switch channel is in this range the\nselected flight mode will be applied.", "name": "COM_FLTMODE3", "shortDesc": "Mode slot 3", "type": "Int32", "values": [{"description": "Unassigned", "value": -1}, {"description": "Manual", "value": 0}, {"description": "Altitude", "value": 1}, {"description": "Position", "value": 2}, {"description": "Mission", "value": 3}, {"description": "Hold", "value": 4}, {"description": "Return", "value": 5}, {"description": "Acro", "value": 6}, {"description": "Offboard", "value": 7}, {"description": "Stabilized", "value": 8}, {"description": "Position Slow", "value": 9}, {"description": "Takeoff", "value": 10}, {"description": "Land", "value": 11}, {"description": "Follow Me", "value": 12}, {"description": "Precision Land", "value": 13}, {"description": "Altitude Cruise", "value": 16}, {"description": "External Mode 1", "value": 100}, {"description": "External Mode 2", "value": 101}, {"description": "External Mode 3", "value": 102}, {"description": "External Mode 4", "value": 103}, {"description": "External Mode 5", "value": 104}, {"description": "External Mode 6", "value": 105}, {"description": "External Mode 7", "value": 106}, {"description": "External Mode 8", "value": 107}]}, {"category": "Standard", "default": -1, "group": "Commander", "longDesc": "If the main switch channel is in this range the\nselected flight mode will be applied.", "name": "COM_FLTMODE4", "shortDesc": "Mode slot 4", "type": "Int32", "values": [{"description": "Unassigned", "value": -1}, {"description": "Manual", "value": 0}, {"description": "Altitude", "value": 1}, {"description": "Position", "value": 2}, {"description": "Mission", "value": 3}, {"description": "Hold", "value": 4}, {"description": "Return", "value": 5}, {"description": "Acro", "value": 6}, {"description": "Offboard", "value": 7}, {"description": "Stabilized", "value": 8}, {"description": "Position Slow", "value": 9}, {"description": "Takeoff", "value": 10}, {"description": "Land", "value": 11}, {"description": "Follow Me", "value": 12}, {"description": "Precision Land", "value": 13}, {"description": "Altitude Cruise", "value": 16}, {"description": "External Mode 1", "value": 100}, {"description": "External Mode 2", "value": 101}, {"description": "External Mode 3", "value": 102}, {"description": "External Mode 4", "value": 103}, {"description": "External Mode 5", "value": 104}, {"description": "External Mode 6", "value": 105}, {"description": "External Mode 7", "value": 106}, {"description": "External Mode 8", "value": 107}]}, {"category": "Standard", "default": -1, "group": "Commander", "longDesc": "If the main switch channel is in this range the\nselected flight mode will be applied.", "name": "COM_FLTMODE5", "shortDesc": "Mode slot 5", "type": "Int32", "values": [{"description": "Unassigned", "value": -1}, {"description": "Manual", "value": 0}, {"description": "Altitude", "value": 1}, {"description": "Position", "value": 2}, {"description": "Mission", "value": 3}, {"description": "Hold", "value": 4}, {"description": "Return", "value": 5}, {"description": "Acro", "value": 6}, {"description": "Offboard", "value": 7}, {"description": "Stabilized", "value": 8}, {"description": "Position Slow", "value": 9}, {"description": "Takeoff", "value": 10}, {"description": "Land", "value": 11}, {"description": "Follow Me", "value": 12}, {"description": "Precision Land", "value": 13}, {"description": "Altitude Cruise", "value": 16}, {"description": "External Mode 1", "value": 100}, {"description": "External Mode 2", "value": 101}, {"description": "External Mode 3", "value": 102}, {"description": "External Mode 4", "value": 103}, {"description": "External Mode 5", "value": 104}, {"description": "External Mode 6", "value": 105}, {"description": "External Mode 7", "value": 106}, {"description": "External Mode 8", "value": 107}]}, {"category": "Standard", "default": -1, "group": "Commander", "longDesc": "If the main switch channel is in this range the\nselected flight mode will be applied.", "name": "COM_FLTMODE6", "shortDesc": "Mode slot 6", "type": "Int32", "values": [{"description": "Unassigned", "value": -1}, {"description": "Manual", "value": 0}, {"description": "Altitude", "value": 1}, {"description": "Position", "value": 2}, {"description": "Mission", "value": 3}, {"description": "Hold", "value": 4}, {"description": "Return", "value": 5}, {"description": "Acro", "value": 6}, {"description": "Offboard", "value": 7}, {"description": "Stabilized", "value": 8}, {"description": "Position Slow", "value": 9}, {"description": "Takeoff", "value": 10}, {"description": "Land", "value": 11}, {"description": "Follow Me", "value": 12}, {"description": "Precision Land", "value": 13}, {"description": "Altitude Cruise", "value": 16}, {"description": "External Mode 1", "value": 100}, {"description": "External Mode 2", "value": 101}, {"description": "External Mode 3", "value": 102}, {"description": "External Mode 4", "value": 103}, {"description": "External Mode 5", "value": 104}, {"description": "External Mode 6", "value": 105}, {"description": "External Mode 7", "value": 106}, {"description": "External Mode 8", "value": 107}]}, {"category": "Standard", "default": 0, "group": "Commander", "increment": 1, "longDesc": "Action the system takes when the remaining flight time is below\nthe estimated time it takes to reach the RTL destination.", "name": "COM_FLTT_LOW_ACT", "shortDesc": "Remaining flight time low failsafe", "type": "Int32", "values": [{"description": "None", "value": 0}, {"description": "Warning", "value": 1}, {"description": "Return", "value": 3}]}, {"category": "Standard", "default": 0, "group": "Commander", "longDesc": "Describes the intended use of the vehicle.\nCan be used by ground control software or log post processing.\nThis param does not influence the behavior within the firmware. This means for example the control logic is independent of the setting of this param (but depends on other params).", "name": "COM_FLT_PROFILE", "shortDesc": "User Flight Profile", "type": "Int32", "values": [{"description": "Default", "value": 0}, {"description": "Pro User", "value": 100}, {"description": "Flight Tester", "value": 200}, {"description": "Developer", "value": 300}]}, {"category": "Standard", "default": -1, "group": "Commander", "longDesc": "The vehicle aborts the current operation and returns to launch when\nthe time since takeoff is above this value. It is not possible to resume the\nmission or switch to any auto mode other than RTL or Land. Taking over in any manual\nmode is still possible.\nStarting from 90% of the maximum flight time, a warning message will be sent\nevery 1 minute with the remaining time until automatic RTL.\nSet to -1 to disable.", "min": -1, "name": "COM_FLT_TIME_MAX", "shortDesc": "Maximum allowed flight time", "type": "Int32", "units": "s"}, {"category": "Standard", "default": 0, "group": "Commander", "longDesc": "Force safety when the vehicle disarms", "name": "COM_FORCE_SAFETY", "shortDesc": "Enable force safety", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 120, "group": "Commander", "longDesc": "After this amount of seconds without datalink the data link lost mode triggers", "max": 3600, "min": 60, "name": "COM_HLDL_LOSS_T", "shortDesc": "High Latency Datalink loss time threshold", "type": "Int32", "units": "s"}, {"category": "Standard", "default": 0, "group": "Commander", "longDesc": "After a data link loss: after this number of seconds with a healthy datalink the 'datalink loss'\nflag is set back to false", "max": 60, "min": 0, "name": "COM_HLDL_REG_T", "shortDesc": "High Latency Datalink regain time threshold", "type": "Int32", "units": "s"}, {"category": "Standard", "default": 1, "group": "Commander", "longDesc": "Set home position automatically if possible.\nDuring missions, the latitude/longitude of the home position is locked and will not reset during intermediate landings.\nIt will only update once the mission is complete or landed outside of a mission.\nHowever, the altitude is still being adjusted to correct for GNSS vertical drift in the first 2 minutes after takeoff.", "name": "COM_HOME_EN", "rebootRequired": true, "shortDesc": "Home position enabled", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 0, "group": "Commander", "longDesc": "If set to true, the autopilot is allowed to set its home position after takeoff\nThe true home position is back-computed if a local position is estimate if available.\nIf no local position is available, home is set to the current position.", "name": "COM_HOME_IN_AIR", "shortDesc": "Allows setting the home position after takeoff", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 0, "group": "Commander", "increment": 1, "longDesc": "Action the system takes when an imbalanced propeller is detected by the failure detector.\nSee also FD_IMB_PROP_THR to set the failure threshold.", "name": "COM_IMB_PROP_ACT", "shortDesc": "Imbalanced propeller failsafe mode", "type": "Int32", "values": [{"description": "Disabled", "value": -1}, {"description": "Warning", "value": 0}, {"description": "Return", "value": 1}, {"description": "Land", "value": 2}]}, {"category": "Standard", "default": 5.0, "group": "Commander", "increment": 0.1, "longDesc": "Use RC_MAP_KILL_SW to map a kill switch.", "max": 30.0, "min": 0.0, "name": "COM_KILL_DISARM", "shortDesc": "Timeout value for disarming when kill switch is engaged", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 3, "default": 3.0, "group": "Commander", "longDesc": "A non-zero, positive value specifies the timeframe in seconds within failure detector is allowed to disarm the vehicle\nif attitude exceeds the limits defined in FD_FAIL_P and FD_FAIL_R.\nThe check is not executed for flight modes that do support acrobatic maneuvers, e.g: Acro (MC/FW) and Manual (FW).\nA zero or negative value means that the check is disabled.", "max": 5.0, "min": -1.0, "name": "COM_LKDOWN_TKO", "shortDesc": "Timeout for detecting a failure after takeoff", "type": "Float", "units": "s"}, {"category": "Standard", "default": 0, "group": "Commander", "longDesc": "Action the system takes at critical battery. See also BAT_CRIT_THR and BAT_EMERGEN_THR\nfor definition of battery states.", "name": "COM_LOW_BAT_ACT", "shortDesc": "Battery failsafe mode", "type": "Int32", "values": [{"description": "Warning", "value": 0}, {"description": "Land mode", "value": 2}, {"description": "Return at critical level, land at emergency level", "value": 3}]}, {"category": "System", "default": 0, "group": "Commander", "longDesc": "This parameter is automatically set to identify external modes. It ensures that modes\nget assigned to the same index independent from their startup order,\nwhich is required when mapping an external mode to an RC switch.", "name": "COM_MODE0_HASH", "shortDesc": "External mode identifier 0", "type": "Int32", "volatile": true}, {"category": "System", "default": 0, "group": "Commander", "longDesc": "This parameter is automatically set to identify external modes. It ensures that modes\nget assigned to the same index independent from their startup order,\nwhich is required when mapping an external mode to an RC switch.", "name": "COM_MODE1_HASH", "shortDesc": "External mode identifier 1", "type": "Int32", "volatile": true}, {"category": "System", "default": 0, "group": "Commander", "longDesc": "This parameter is automatically set to identify external modes. It ensures that modes\nget assigned to the same index independent from their startup order,\nwhich is required when mapping an external mode to an RC switch.", "name": "COM_MODE2_HASH", "shortDesc": "External mode identifier 2", "type": "Int32", "volatile": true}, {"category": "System", "default": 0, "group": "Commander", "longDesc": "This parameter is automatically set to identify external modes. It ensures that modes\nget assigned to the same index independent from their startup order,\nwhich is required when mapping an external mode to an RC switch.", "name": "COM_MODE3_HASH", "shortDesc": "External mode identifier 3", "type": "Int32", "volatile": true}, {"category": "System", "default": 0, "group": "Commander", "longDesc": "This parameter is automatically set to identify external modes. It ensures that modes\nget assigned to the same index independent from their startup order,\nwhich is required when mapping an external mode to an RC switch.", "name": "COM_MODE4_HASH", "shortDesc": "External mode identifier 4", "type": "Int32", "volatile": true}, {"category": "System", "default": 0, "group": "Commander", "longDesc": "This parameter is automatically set to identify external modes. It ensures that modes\nget assigned to the same index independent from their startup order,\nwhich is required when mapping an external mode to an RC switch.", "name": "COM_MODE5_HASH", "shortDesc": "External mode identifier 5", "type": "Int32", "volatile": true}, {"category": "System", "default": 0, "group": "Commander", "longDesc": "This parameter is automatically set to identify external modes. It ensures that modes\nget assigned to the same index independent from their startup order,\nwhich is required when mapping an external mode to an RC switch.", "name": "COM_MODE6_HASH", "shortDesc": "External mode identifier 6", "type": "Int32", "volatile": true}, {"category": "System", "default": 0, "group": "Commander", "longDesc": "This parameter is automatically set to identify external modes. It ensures that modes\nget assigned to the same index independent from their startup order,\nwhich is required when mapping an external mode to an RC switch.", "name": "COM_MODE7_HASH", "shortDesc": "External mode identifier 7", "type": "Int32", "volatile": true}, {"category": "Standard", "default": 0, "group": "Commander", "longDesc": "By default disabled for safety reasons", "name": "COM_MODE_ARM_CHK", "shortDesc": "Allow external mode registration while armed", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 1, "group": "Commander", "longDesc": "If set, enables the actuator test interface via MAVLink (ACTUATOR_TEST), that\nallows spinning the motors and moving the servos for testing purposes.", "name": "COM_MOT_TEST_EN", "shortDesc": "Enable Actuator Testing", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 5.0, "group": "Commander", "increment": 0.01, "max": 60.0, "min": 0.0, "name": "COM_OBC_LOSS_T", "shortDesc": "Time-out to wait when onboard computer connection is lost before warning about loss connection", "type": "Float", "units": "s"}, {"category": "Standard", "default": 0, "group": "Commander", "longDesc": "The offboard loss failsafe will only be entered after a timeout,\nset by COM_OF_LOSS_T in seconds.", "name": "COM_OBL_RC_ACT", "shortDesc": "Set offboard loss failsafe mode", "type": "Int32", "values": [{"description": "Position mode", "value": 0}, {"description": "Altitude mode", "value": 1}, {"description": "Stabilized", "value": 2}, {"description": "Return mode", "value": 3}, {"description": "Land mode", "value": 4}, {"description": "Hold mode", "value": 5}, {"description": "Terminate", "value": 6}, {"description": "Disarm", "value": 7}]}, {"category": "Standard", "default": 1.0, "group": "Commander", "increment": 0.01, "longDesc": "See COM_OBL_RC_ACT to configure action.", "max": 60.0, "min": 0.0, "name": "COM_OF_LOSS_T", "shortDesc": "Time-out to wait when offboard connection is lost before triggering offboard lost action", "type": "Float", "units": "s"}, {"category": "Standard", "default": 0, "group": "Commander", "name": "COM_PARACHUTE", "shortDesc": "Expect and require a healthy MAVLink parachute system", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 1, "default": 5.0, "group": "Commander", "longDesc": "This is the horizontal position error (EPH) threshold that will trigger a failsafe.\nIf the previous position error was below this threshold, there is an additional\nfactor of 2.5 applied (threshold for invalidation 2.5 times the one for validation).\nOnly used for multicopters and VTOLs in hover mode.\nIndependent from estimator positioning data timeout threshold (see EKF2_NOAID_TOUT).\nSet to -1 to disable.", "max": 400.0, "min": -1.0, "name": "COM_POS_FS_EPH", "shortDesc": "Horizontal position error threshold for hovering systems", "type": "Float", "units": "m"}, {"category": "Standard", "default": 3, "group": "Commander", "increment": 1, "longDesc": "Action the system takes when the estimated position has an accuracy below the specified threshold.\nSee COM_POS_LOW_EPH to set the failsafe threshold.\nThe failsafe action is only executed if the vehicle is in auto mission or auto loiter mode,\notherwise it is only a warning.", "name": "COM_POS_LOW_ACT", "shortDesc": "Low position accuracy action", "type": "Int32", "values": [{"description": "None", "value": 0}, {"description": "Warning", "value": 1}, {"description": "Hold", "value": 2}, {"description": "Return", "value": 3}, {"description": "Terminate", "value": 4}, {"description": "Land", "value": 5}]}, {"category": "Standard", "default": -1.0, "group": "Commander", "longDesc": "This triggers the action specified in COM_POS_LOW_ACT if the estimated position accuracy is below this threshold.\nLocal position has to be still declared valid, which requires some kind of velocity aiding or large dead-reckoning time (EKF2_NOAID_TOUT),\nand a high failsafe threshold (COM_POS_FS_EPH).\nSet to -1 to disable.", "max": 1000.0, "min": -1.0, "name": "COM_POS_LOW_EPH", "shortDesc": "Low position accuracy failsafe threshold", "type": "Float", "units": "m"}, {"category": "Standard", "default": 1, "group": "Commander", "longDesc": "This configures a check to verify the expected number of 5V rail power supplies are present. By default only one is expected.\nNote: CBRK_SUPPLY_CHK disables all power checks including this one.", "max": 4, "min": 0, "name": "COM_POWER_COUNT", "shortDesc": "Required number of redundant power modules", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "Commander", "longDesc": "Condition to enter the prearmed state, an intermediate state between disarmed and armed\nin which non-throttling actuators are active.", "name": "COM_PREARM_MODE", "shortDesc": "Condition to enter prearmed mode", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Safety button", "value": 1}, {"description": "Always", "value": 2}]}, {"category": "Standard", "default": 0, "group": "Commander", "name": "COM_QC_ACT", "shortDesc": "Set action after a quadchute", "type": "Int32", "values": [{"description": "Warning only", "value": -1}, {"description": "Return mode", "value": 0}, {"description": "Land mode", "value": 1}, {"description": "Hold mode", "value": 2}]}, {"category": "Standard", "default": 95.0, "group": "Commander", "increment": 1.0, "longDesc": "The check fails if the RAM usage is above this threshold.\nA negative value disables the check.", "max": 100.0, "min": -1.0, "name": "COM_RAM_MAX", "shortDesc": "Maximum allowed RAM usage to pass checks", "type": "Float", "units": "%"}, {"bitmask": [{"description": "Mission", "index": 0}, {"description": "Auto modes", "index": 1}, {"description": "Offboard", "index": 2}, {"description": "External Mode", "index": 3}, {"description": "Altitude Cruise", "index": 4}], "category": "Standard", "default": 0, "group": "Commander", "longDesc": "Specify modes in which stick input is ignored and no failsafe action is triggered.\nExternal modes requiring stick input will still failsafe.\nAuto modes are: Hold, Takeoff, Land, RTL, Descend, Follow Target, Precland, Orbit.", "max": 31, "min": 0, "name": "COM_RCL_EXCEPT", "shortDesc": "Manual control loss exceptions", "type": "Int32"}, {"category": "Standard", "default": 3, "group": "Commander", "longDesc": "Selects stick input selection behavior:\neither a traditional remote control receiver (RC) or a MAVLink joystick (MANUAL_CONTROL message)\nPriority sources are immediately switched to whenever they get valid.\n0 RC only. Requires valid RC calibration.\n1 MAVLink only. RC and related checks are disabled.\n2 Switches only if current source becomes invalid.\n3 Locks to the first valid source until reboot.\n4 Ignores all sources.\n5 RC priority, then MAVLink (lower instance before higher)\n6 MAVLink priority (lower instance before higher), then RC\n7 RC priority, then MAVLink (higher instance before lower)\n8 MAVLink priority (higher instance before lower), then RC", "max": 8, "min": 0, "name": "COM_RC_IN_MODE", "shortDesc": "Manual control input source configuration", "type": "Int32", "values": [{"description": "RC only", "value": 0}, {"description": "MAVLink only", "value": 1}, {"description": "RC or MAVLink with fallback", "value": 2}, {"description": "RC or MAVLink keep first", "value": 3}, {"description": "Disable manual control", "value": 4}, {"description": "Prio: RC > MAVL 1 > MAVL 2", "value": 5}, {"description": "Prio: MAVL 1 > MAVL 2 > RC", "value": 6}, {"description": "Prio: RC > MAVL 2 > MAVL 1", "value": 7}, {"description": "Prio: MAVL 2 > MAVL 1 > RC", "value": 8}]}, {"category": "Standard", "decimalPlaces": 1, "default": 0.5, "group": "Commander", "increment": 0.1, "longDesc": "The time in seconds without a new setpoint from RC or Joystick, after which the connection is considered lost.\nThis must be kept short as the vehicle will use the last supplied setpoint until the timeout triggers.\nEnsure the value is not set lower than the update interval of the RC or Joystick.", "max": 35.0, "min": 0.0, "name": "COM_RC_LOSS_T", "shortDesc": "Manual control loss timeout", "type": "Float", "units": "s"}, {"bitmask": [{"description": "Enable override during auto modes (except for in critical battery reaction)", "index": 0}, {"description": "Enable override during offboard mode", "index": 1}], "category": "Standard", "default": 1, "group": "Commander", "longDesc": "When enabled, moving the sticks more than COM_RC_STICK_OV\nimmediately gives control back to the pilot by switching to Position mode and\nif position is unavailable Altitude mode.\nNote: Only has an effect on multicopters, and VTOLs in multicopter mode.", "max": 3, "min": 0, "name": "COM_RC_OVERRIDE", "shortDesc": "Enable manual control stick override", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 0, "default": 30.0, "group": "Commander", "increment": 0.05, "longDesc": "If COM_RC_OVERRIDE is enabled and the joystick input is moved more than this threshold\nthe autopilot the pilot takes over control.", "max": 80.0, "min": 5.0, "name": "COM_RC_STICK_OV", "shortDesc": "Stick override threshold", "type": "Float", "units": "%"}, {"category": "Standard", "decimalPlaces": 1, "default": 1.0, "group": "Commander", "increment": 0.1, "longDesc": "The minimal time from arming the motors until moving the vehicle is possible is COM_SPOOLUP_TIME seconds.\nGoal:\n- Motors and propellers spool up to idle speed before getting commanded to spin faster\n- Timeout for ESCs and smart batteries to successfulyy do failure checks\ne.g. for stuck rotors before the vehicle is off the ground", "max": 30.0, "min": 0.0, "name": "COM_SPOOLUP_TIME", "shortDesc": "Enforced delay between arming and further navigation", "type": "Float", "units": "s"}, {"category": "Standard", "default": 0, "group": "Commander", "longDesc": "The mode transition after TAKEOFF has completed successfully.", "name": "COM_TAKEOFF_ACT", "shortDesc": "Action after TAKEOFF has been accepted", "type": "Int32", "values": [{"description": "Hold", "value": 0}, {"description": "Mission (if valid)", "value": 1}]}, {"category": "Standard", "default": 0, "group": "Commander", "longDesc": "Allows to start the vehicle by throwing it into the air.", "name": "COM_THROW_EN", "shortDesc": "Enable throw-start", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 1, "default": 5.0, "group": "Commander", "increment": 0.1, "longDesc": "When the throw launch is enabled, the drone will only allow motors to spin after this speed\nis exceeded before detecting the freefall. This is a safety feature to ensure the drone does\nnot turn on after accidental drop or a rapid movement before the throw.\nSet to 0 to disable.", "min": 0.0, "name": "COM_THROW_SPEED", "shortDesc": "Minimum speed for the throw start", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 1.0, "group": "Commander", "longDesc": "This is the horizontal velocity error (EVH) threshold that will trigger a failsafe.\nThe default is appropriate for a multicopter. Can be increased for a fixed-wing.\nIf the previous velocity error was below this threshold, there is an additional\nfactor of 2.5 applied (threshold for invalidation 2.5 times the one for validation).", "min": 0.0, "name": "COM_VEL_FS_EVH", "shortDesc": "Horizontal velocity error threshold", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": -1.0, "group": "Commander", "increment": 0.1, "longDesc": "Wind speed threshold above which an automatic failsafe action is triggered.\nFailsafe action can be specified with COM_WIND_MAX_ACT.", "min": -1.0, "name": "COM_WIND_MAX", "shortDesc": "High wind speed failsafe threshold", "type": "Float", "units": "m/s"}, {"category": "Standard", "default": 0, "group": "Commander", "increment": 1, "longDesc": "Action the system takes when a wind speed above the specified threshold is detected.\nSee COM_WIND_MAX to set the failsafe threshold.\nIf enabled, it is not possible to resume the mission or switch to any auto mode other than\nRTL or Land if this threshold is exceeded. Taking over in any manual\nmode is still possible.", "name": "COM_WIND_MAX_ACT", "shortDesc": "High wind failsafe mode", "type": "Int32", "values": [{"description": "None", "value": 0}, {"description": "Warning", "value": 1}, {"description": "Hold", "value": 2}, {"description": "Return", "value": 3}, {"description": "Terminate", "value": 4}, {"description": "Land", "value": 5}]}, {"category": "Standard", "decimalPlaces": 1, "default": -1.0, "group": "Commander", "increment": 0.1, "longDesc": "A warning is triggered if the currently estimated wind speed is above this value.\nWarning is sent periodically (every 1 minute).\nSet to -1 to disable.", "min": -1.0, "name": "COM_WIND_WARN", "shortDesc": "Wind speed warning threshold", "type": "Float", "units": "m/s"}, {"category": "Standard", "default": 0, "group": "Commander", "longDesc": "The GCS connection loss failsafe will only be entered after a timeout,\nset by COM_DL_LOSS_T in seconds. Once the timeout occurs the selected\naction will be executed.", "max": 6, "min": 0, "name": "NAV_DLL_ACT", "shortDesc": "Set GCS connection loss failsafe mode", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Hold mode", "value": 1}, {"description": "Return mode", "value": 2}, {"description": "Land mode", "value": 3}, {"description": "Terminate", "value": 5}, {"description": "Disarm", "value": 6}]}, {"category": "Standard", "default": 2, "group": "Commander", "longDesc": "The manual control loss failsafe will only be entered after a timeout,\nset by COM_RC_LOSS_T in seconds.", "max": 6, "min": 1, "name": "NAV_RCL_ACT", "shortDesc": "Set manual control loss failsafe mode", "type": "Int32", "values": [{"description": "Hold mode", "value": 1}, {"description": "Return mode", "value": 2}, {"description": "Land mode", "value": 3}, {"description": "Terminate", "value": 5}, {"description": "Disarm", "value": 6}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.2, "group": "EKF2", "max": 0.5, "min": 0.0, "name": "EKF2_ABIAS_INIT", "rebootRequired": true, "shortDesc": "1-sigma IMU accelerometer switch-on bias", "type": "Float", "units": "m/s^2"}, {"category": "Standard", "decimalPlaces": 1, "default": 25.0, "group": "EKF2", "longDesc": "If the magnitude of the IMU accelerometer vector exceeds this value, the EKF accel bias state estimation will be inhibited. This reduces the adverse effect of high manoeuvre accelerations and IMU nonlinerity and scale factor errors on the accel bias estimates.", "max": 200.0, "min": 20.0, "name": "EKF2_ABL_ACCLIM", "shortDesc": "Maximum IMU accel magnitude that allows IMU bias learning", "type": "Float", "units": "m/s^2"}, {"category": "Standard", "decimalPlaces": 1, "default": 3.0, "group": "EKF2", "longDesc": "If the magnitude of the IMU angular rate vector exceeds this value, the EKF accel bias state estimation will be inhibited. This reduces the adverse effect of rapid rotation rates and associated errors on the accel bias estimates.", "max": 20.0, "min": 2.0, "name": "EKF2_ABL_GYRLIM", "shortDesc": "Maximum IMU gyro angular rate magnitude that allows IMU bias learning", "type": "Float", "units": "rad/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.4, "group": "EKF2", "longDesc": "The ekf accel bias states will be limited to within a range equivalent to +- of this value.", "max": 0.8, "min": 0.0, "name": "EKF2_ABL_LIM", "shortDesc": "Accelerometer bias learning limit", "type": "Float", "units": "m/s^2"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.5, "group": "EKF2", "longDesc": "The vector magnitude of angular rate and acceleration used to check if learning should be inhibited has a peak hold filter applied to it with an exponential decay. This parameter controls the time constant of the decay.", "max": 1.0, "min": 0.1, "name": "EKF2_ABL_TAU", "shortDesc": "Accel bias learning inhibit time constant", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 6, "default": 0.003, "group": "EKF2", "max": 0.01, "min": 0.0, "name": "EKF2_ACC_B_NOISE", "shortDesc": "Process noise for IMU accelerometer bias prediction", "type": "Float", "units": "m/s^3"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.35, "group": "EKF2", "max": 1.0, "min": 0.01, "name": "EKF2_ACC_NOISE", "shortDesc": "Accelerometer noise for covariance prediction", "type": "Float", "units": "m/s^2"}, {"bitmask": [{"description": "Horizontal position", "index": 0}, {"description": "Vertical position", "index": 1}], "category": "Standard", "default": 0, "group": "EKF2", "longDesc": "Set bits in the following positions to enable: 0 : Horizontal position fusion 1 : Vertical position fusion", "max": 3, "min": 0, "name": "EKF2_AGP0_CTRL", "shortDesc": "Auxiliary global position sensor 0 aiding", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "EKF2", "max": 1000.0, "min": 0.0, "name": "EKF2_AGP0_DELAY", "rebootRequired": true, "shortDesc": "Auxiliary global position sensor 0 delay (to IMU)", "type": "Float", "units": "ms"}, {"category": "Standard", "decimalPlaces": 1, "default": 3.0, "group": "EKF2", "longDesc": "Sets the number of standard deviations used by the innovation consistency test.", "min": 1.0, "name": "EKF2_AGP0_GATE", "shortDesc": "Gate size for auxiliary global position sensor 0 fusion", "type": "Float", "units": "SD"}, {"category": "Standard", "default": 0, "group": "EKF2", "longDesc": "Sensor ID for slot 0. Set to 0 to disable this slot.", "max": 255, "min": 0, "name": "EKF2_AGP0_ID", "shortDesc": "Auxiliary global position sensor 0 ID", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "EKF2", "longDesc": "Automatic: reset on fusion timeout if no other source of position is available Dead-reckoning: reset on fusion timeout if no source of velocity is available", "name": "EKF2_AGP0_MODE", "shortDesc": "Fusion reset mode for sensor 0", "type": "Int32", "values": [{"description": "Automatic", "value": 0}, {"description": "Dead-reckoning", "value": 1}]}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "EKF2", "longDesc": "Used to lower bound or replace the uncertainty included in the message", "min": 0.01, "name": "EKF2_AGP0_NOISE", "shortDesc": "Measurement noise for auxiliary global position sensor 0", "type": "Float", "units": "m"}, {"bitmask": [{"description": "Horizontal position", "index": 0}, {"description": "Vertical position", "index": 1}], "category": "Standard", "default": 0, "group": "EKF2", "longDesc": "Set bits in the following positions to enable: 0 : Horizontal position fusion 1 : Vertical position fusion", "max": 3, "min": 0, "name": "EKF2_AGP1_CTRL", "shortDesc": "Auxiliary global position sensor 1 aiding", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "EKF2", "max": 1000.0, "min": 0.0, "name": "EKF2_AGP1_DELAY", "rebootRequired": true, "shortDesc": "Auxiliary global position sensor 1 delay (to IMU)", "type": "Float", "units": "ms"}, {"category": "Standard", "decimalPlaces": 1, "default": 3.0, "group": "EKF2", "longDesc": "Sets the number of standard deviations used by the innovation consistency test.", "min": 1.0, "name": "EKF2_AGP1_GATE", "shortDesc": "Gate size for auxiliary global position sensor 1 fusion", "type": "Float", "units": "SD"}, {"category": "Standard", "default": 0, "group": "EKF2", "longDesc": "Sensor ID for slot 1. Set to 0 to disable this slot.", "max": 255, "min": 0, "name": "EKF2_AGP1_ID", "shortDesc": "Auxiliary global position sensor 1 ID", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "EKF2", "longDesc": "Automatic: reset on fusion timeout if no other source of position is available Dead-reckoning: reset on fusion timeout if no source of velocity is available", "name": "EKF2_AGP1_MODE", "shortDesc": "Fusion reset mode for sensor 1", "type": "Int32", "values": [{"description": "Automatic", "value": 0}, {"description": "Dead-reckoning", "value": 1}]}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "EKF2", "longDesc": "Used to lower bound or replace the uncertainty included in the message", "min": 0.01, "name": "EKF2_AGP1_NOISE", "shortDesc": "Measurement noise for auxiliary global position sensor 1", "type": "Float", "units": "m"}, {"bitmask": [{"description": "Horizontal position", "index": 0}, {"description": "Vertical position", "index": 1}], "category": "Standard", "default": 0, "group": "EKF2", "longDesc": "Set bits in the following positions to enable: 0 : Horizontal position fusion 1 : Vertical position fusion", "max": 3, "min": 0, "name": "EKF2_AGP2_CTRL", "shortDesc": "Auxiliary global position sensor 2 aiding", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "EKF2", "max": 1000.0, "min": 0.0, "name": "EKF2_AGP2_DELAY", "rebootRequired": true, "shortDesc": "Auxiliary global position sensor 2 delay (to IMU)", "type": "Float", "units": "ms"}, {"category": "Standard", "decimalPlaces": 1, "default": 3.0, "group": "EKF2", "longDesc": "Sets the number of standard deviations used by the innovation consistency test.", "min": 1.0, "name": "EKF2_AGP2_GATE", "shortDesc": "Gate size for auxiliary global position sensor 2 fusion", "type": "Float", "units": "SD"}, {"category": "Standard", "default": 0, "group": "EKF2", "longDesc": "Sensor ID for slot 2. Set to 0 to disable this slot.", "max": 255, "min": 0, "name": "EKF2_AGP2_ID", "shortDesc": "Auxiliary global position sensor 2 ID", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "EKF2", "longDesc": "Automatic: reset on fusion timeout if no other source of position is available Dead-reckoning: reset on fusion timeout if no source of velocity is available", "name": "EKF2_AGP2_MODE", "shortDesc": "Fusion reset mode for sensor 2", "type": "Int32", "values": [{"description": "Automatic", "value": 0}, {"description": "Dead-reckoning", "value": 1}]}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "EKF2", "longDesc": "Used to lower bound or replace the uncertainty included in the message", "min": 0.01, "name": "EKF2_AGP2_NOISE", "shortDesc": "Measurement noise for auxiliary global position sensor 2", "type": "Float", "units": "m"}, {"bitmask": [{"description": "Horizontal position", "index": 0}, {"description": "Vertical position", "index": 1}], "category": "Standard", "default": 0, "group": "EKF2", "longDesc": "Set bits in the following positions to enable: 0 : Horizontal position fusion 1 : Vertical position fusion", "max": 3, "min": 0, "name": "EKF2_AGP3_CTRL", "shortDesc": "Auxiliary global position sensor 3 aiding", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "EKF2", "max": 1000.0, "min": 0.0, "name": "EKF2_AGP3_DELAY", "rebootRequired": true, "shortDesc": "Auxiliary global position sensor 3 delay (to IMU)", "type": "Float", "units": "ms"}, {"category": "Standard", "decimalPlaces": 1, "default": 3.0, "group": "EKF2", "longDesc": "Sets the number of standard deviations used by the innovation consistency test.", "min": 1.0, "name": "EKF2_AGP3_GATE", "shortDesc": "Gate size for auxiliary global position sensor 3 fusion", "type": "Float", "units": "SD"}, {"category": "Standard", "default": 0, "group": "EKF2", "longDesc": "Sensor ID for slot 3. Set to 0 to disable this slot.", "max": 255, "min": 0, "name": "EKF2_AGP3_ID", "shortDesc": "Auxiliary global position sensor 3 ID", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "EKF2", "longDesc": "Automatic: reset on fusion timeout if no other source of position is available Dead-reckoning: reset on fusion timeout if no source of velocity is available", "name": "EKF2_AGP3_MODE", "shortDesc": "Fusion reset mode for sensor 3", "type": "Int32", "values": [{"description": "Automatic", "value": 0}, {"description": "Dead-reckoning", "value": 1}]}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "EKF2", "longDesc": "Used to lower bound or replace the uncertainty included in the message", "min": 0.01, "name": "EKF2_AGP3_NOISE", "shortDesc": "Measurement noise for auxiliary global position sensor 3", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.1, "group": "EKF2", "max": 0.5, "min": 0.0, "name": "EKF2_ANGERR_INIT", "rebootRequired": true, "shortDesc": "1-sigma tilt angle uncertainty after gravity vector alignment", "type": "Float", "units": "rad"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "EKF2", "longDesc": "Airspeed data is fused for wind estimation if above this threshold. Set to 0 to disable airspeed fusion. For reliable wind estimation both sideslip (see EKF2_FUSE_BETA) and airspeed fusion should be enabled. Only applies to fixed-wing vehicles (or VTOLs in fixed-wing mode).", "min": 0.0, "name": "EKF2_ARSP_THR", "shortDesc": "Airspeed fusion threshold", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 20.0, "group": "EKF2", "max": 50.0, "min": 5.0, "name": "EKF2_ASPD_MAX", "shortDesc": "Maximum airspeed used for baro static pressure compensation", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 100.0, "group": "EKF2", "max": 300.0, "min": 0.0, "name": "EKF2_ASP_DELAY", "rebootRequired": true, "shortDesc": "Airspeed measurement delay relative to IMU measurements", "type": "Float", "units": "ms"}, {"category": "Standard", "decimalPlaces": 1, "default": 5.0, "group": "EKF2", "max": 300.0, "min": 0.0, "name": "EKF2_AVEL_DELAY", "rebootRequired": true, "shortDesc": "Auxiliary Velocity Estimate delay relative to IMU measurements", "type": "Float", "units": "ms"}, {"category": "Standard", "default": 1, "group": "EKF2", "longDesc": "If this parameter is enabled then the estimator will make use of the barometric height measurements to estimate its height in addition to other height sources (if activated).", "name": "EKF2_BARO_CTRL", "shortDesc": "Barometric sensor height aiding", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "EKF2", "max": 300.0, "min": 0.0, "name": "EKF2_BARO_DELAY", "rebootRequired": true, "shortDesc": "Barometer measurement delay relative to IMU measurements", "type": "Float", "units": "ms"}, {"category": "Standard", "decimalPlaces": 1, "default": 5.0, "group": "EKF2", "longDesc": "Sets the number of standard deviations used by the innovation consistency test.", "min": 1.0, "name": "EKF2_BARO_GATE", "shortDesc": "Gate size for barometric and GPS height fusion", "type": "Float", "units": "SD"}, {"category": "Standard", "decimalPlaces": 2, "default": 3.5, "group": "EKF2", "max": 15.0, "min": 0.01, "name": "EKF2_BARO_NOISE", "shortDesc": "Measurement noise for barometric altitude", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 1, "default": 100.0, "group": "EKF2", "longDesc": "This parameter controls the prediction of drag produced by bluff body drag along the forward/reverse axis when flying a multi-copter which enables estimation of wind drift when enabled by the EKF2_DRAG_CTRL parameter. The drag produced by this effect scales with speed squared. The predicted drag from the rotors is specified separately by the EKF2_MCOEF parameter. Set this parameter to zero to turn off the bluff body drag model for this axis.", "max": 200.0, "min": 0.0, "name": "EKF2_BCOEF_X", "shortDesc": "X-axis ballistic coefficient used for multi-rotor wind estimation", "type": "Float", "units": "kg/m^2"}, {"category": "Standard", "decimalPlaces": 1, "default": 100.0, "group": "EKF2", "longDesc": "This parameter controls the prediction of drag produced by bluff body drag along the right/left axis when flying a multi-copter, which enables estimation of wind drift when enabled by the EKF2_DRAG_CTRL parameter. The drag produced by this effect scales with speed squared. The predicted drag from the rotors is specified separately by the EKF2_MCOEF parameter. Set this parameter to zero to turn off the bluff body drag model for this axis.", "max": 200.0, "min": 0.0, "name": "EKF2_BCOEF_Y", "shortDesc": "Y-axis ballistic coefficient used for multi-rotor wind estimation", "type": "Float", "units": "kg/m^2"}, {"category": "Standard", "decimalPlaces": 1, "default": 5.0, "group": "EKF2", "longDesc": "Sets the number of standard deviations used by the innovation consistency test.", "min": 1.0, "name": "EKF2_BETA_GATE", "shortDesc": "Gate size for synthetic sideslip fusion", "type": "Float", "units": "SD"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.3, "group": "EKF2", "max": 1.0, "min": 0.1, "name": "EKF2_BETA_NOISE", "shortDesc": "Noise for synthetic sideslip fusion", "type": "Float", "units": "m/s"}, {"bitmask": [{"description": "use geo_lookup declination", "index": 0}, {"description": "save EKF2_MAG_DECL on disarm", "index": 1}], "category": "Standard", "default": 3, "group": "EKF2", "longDesc": "Set bits in the following positions to enable functions. 0 : Set to true to use the declination from the geo_lookup library when the GPS position becomes available, set to false to always use the EKF2_MAG_DECL value. 1 : Set to true to save the EKF2_MAG_DECL parameter to the value returned by the EKF when the vehicle disarms.", "max": 3, "min": 0, "name": "EKF2_DECL_TYPE", "rebootRequired": true, "shortDesc": "Integer bitmask controlling handling of magnetic declination", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 1, "default": 200.0, "group": "EKF2", "longDesc": "Defines the delay between the current time and the delayed-time horizon. This value should be at least as large as the largest EKF2_XXX_DELAY parameter.", "max": 1000.0, "min": 0.0, "name": "EKF2_DELAY_MAX", "rebootRequired": true, "shortDesc": "Maximum delay of all the aiding sensors", "type": "Float", "units": "ms"}, {"category": "Standard", "default": 0, "group": "EKF2", "longDesc": "Activate wind speed estimation using specific-force measurements and a drag model defined by EKF2_BCOEF_[XY] and EKF2_MCOEF. Only use on vehicles that have their thrust aligned with the Z axis and no thrust in the XY plane.", "name": "EKF2_DRAG_CTRL", "shortDesc": "Multirotor wind estimation selection", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 2, "default": 2.5, "group": "EKF2", "longDesc": "Used by the multi-rotor specific drag force model. Increasing this makes the multi-rotor wind estimates adjust more slowly.", "max": 10.0, "min": 0.5, "name": "EKF2_DRAG_NOISE", "shortDesc": "Specific drag force observation noise variance", "type": "Float", "units": "(m/s^2)^2"}, {"category": "Standard", "decimalPlaces": 1, "default": 1.4, "group": "EKF2", "max": 5.0, "min": 0.5, "name": "EKF2_EAS_NOISE", "shortDesc": "Measurement noise for airspeed fusion", "type": "Float", "units": "m/s"}, {"category": "Standard", "default": 1, "group": "EKF2", "name": "EKF2_EN", "shortDesc": "EKF2 enable", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 0, "group": "EKF2", "longDesc": "When enabled, constant position fusion is enabled when the vehicle is landed and armed. This is intended for IC engine warmup (e.g., fuel engines on catapult) to allow mode transitions to auto/takeoff despite vibrations from running engines.", "name": "EKF2_ENGINE_WRM", "shortDesc": "Enable constant position fusion during engine warmup", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.1, "group": "EKF2", "longDesc": "Used to lower bound or replace the uncertainty included in the message", "min": 0.05, "name": "EKF2_EVA_NOISE", "shortDesc": "Measurement noise for vision angle measurements", "type": "Float", "units": "rad"}, {"category": "Standard", "decimalPlaces": 1, "default": 5.0, "group": "EKF2", "longDesc": "Sets the number of standard deviations used by the innovation consistency test.", "min": 1.0, "name": "EKF2_EVP_GATE", "shortDesc": "Gate size for vision position fusion", "type": "Float", "units": "SD"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.1, "group": "EKF2", "longDesc": "Used to lower bound or replace the uncertainty included in the message", "min": 0.01, "name": "EKF2_EVP_NOISE", "shortDesc": "Measurement noise for vision position measurements", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 1, "default": 3.0, "group": "EKF2", "longDesc": "Sets the number of standard deviations used by the innovation consistency test.", "min": 1.0, "name": "EKF2_EVV_GATE", "shortDesc": "Gate size for vision velocity estimate fusion", "type": "Float", "units": "SD"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.1, "group": "EKF2", "longDesc": "Used to lower bound or replace the uncertainty included in the message", "min": 0.01, "name": "EKF2_EVV_NOISE", "shortDesc": "Measurement noise for vision velocity measurements", "type": "Float", "units": "m/s"}, {"bitmask": [{"description": "Horizontal position", "index": 0}, {"description": "Vertical position", "index": 1}, {"description": "3D velocity", "index": 2}, {"description": "Yaw", "index": 3}], "category": "Standard", "default": 0, "group": "EKF2", "longDesc": "Set bits in the following positions to enable: 0 : Horizontal position fusion 1 : Vertical position fusion 2 : 3D velocity fusion 3 : Yaw", "max": 15, "min": 0, "name": "EKF2_EV_CTRL", "shortDesc": "External vision (EV) sensor aiding", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "EKF2", "max": 300.0, "min": 0.0, "name": "EKF2_EV_DELAY", "rebootRequired": true, "shortDesc": "Vision Position Estimator delay relative to IMU measurements", "type": "Float", "units": "ms"}, {"category": "Standard", "default": 0, "group": "EKF2", "longDesc": "If set to 0 (default) the measurement noise is taken from the vision message and the EV noise parameters are used as a lower bound. If set to 1 the observation noise is set from the parameters directly,", "name": "EKF2_EV_NOISE_MD", "shortDesc": "External vision (EV) noise mode", "type": "Int32", "values": [{"description": "EV reported variance (parameter lower bound)", "value": 0}, {"description": "EV noise parameters", "value": 1}]}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "EKF2", "longDesc": "Forward axis with origin relative to vehicle centre of gravity", "name": "EKF2_EV_POS_X", "shortDesc": "X position of VI sensor focal point in body frame", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "EKF2", "longDesc": "Forward axis with origin relative to vehicle centre of gravity", "name": "EKF2_EV_POS_Y", "shortDesc": "Y position of VI sensor focal point in body frame", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "EKF2", "longDesc": "Forward axis with origin relative to vehicle centre of gravity", "name": "EKF2_EV_POS_Z", "shortDesc": "Z position of VI sensor focal point in body frame", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 1, "default": 0, "group": "EKF2", "longDesc": "External vision will only be started and fused if the quality metric is above this threshold. The quality metric is a completely optional field provided by some VIO systems.", "max": 100, "min": 0, "name": "EKF2_EV_QMIN", "shortDesc": "External vision (EV) minimum quality (optional)", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "EKF2", "longDesc": "For reliable wind estimation both sideslip and airspeed fusion (see EKF2_ARSP_THR) should be enabled. Only applies to vehicles in fixed-wing mode or with airspeed fusion active. Note: side slip fusion is currently not supported for tailsitters.", "name": "EKF2_FUSE_BETA", "shortDesc": "Enable synthetic sideslip fusion", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.1, "group": "EKF2", "max": 0.2, "min": 0.0, "name": "EKF2_GBIAS_INIT", "rebootRequired": true, "shortDesc": "1-sigma IMU gyro switch-on bias", "type": "Float", "units": "rad/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 4.0, "group": "EKF2", "longDesc": "Sets the value of deadzone applied to negative baro innovations. Deadzone is enabled when EKF2_GND_EFF_DZ > 0.", "max": 10.0, "min": 0.0, "name": "EKF2_GND_EFF_DZ", "shortDesc": "Baro deadzone range for height fusion", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.5, "group": "EKF2", "longDesc": "Sets the maximum distance to the ground level where negative baro innovations are expected.", "max": 5.0, "min": 0.0, "name": "EKF2_GND_MAX_HGT", "shortDesc": "Height above ground level for ground effect zone", "type": "Float", "units": "m"}, {"bitmask": [{"description": "Sat count (EKF2_REQ_NSATS)", "index": 0}, {"description": "PDOP (EKF2_REQ_PDOP)", "index": 1}, {"description": "EPH (EKF2_REQ_EPH)", "index": 2}, {"description": "EPV (EKF2_REQ_EPV)", "index": 3}, {"description": "Speed accuracy (EKF2_REQ_SACC)", "index": 4}, {"description": "Horizontal position drift (EKF2_REQ_HDRIFT)", "index": 5}, {"description": "Vertical position drift (EKF2_REQ_VDRIFT)", "index": 6}, {"description": "Horizontal speed offset (EKF2_REQ_HDRIFT)", "index": 7}, {"description": "Vertical speed offset (EKF2_REQ_VDRIFT)", "index": 8}, {"description": "Spoofing", "index": 9}, {"description": "GPS fix type (EKF2_REQ_FIX)", "index": 10}, {"description": "Jamming", "index": 11}], "category": "Standard", "default": 2047, "group": "EKF2", "longDesc": "Each threshold value is defined by the parameter indicated next to the check. Drift and offset checks only run when the vehicle is on ground and stationary.", "max": 4095, "min": 0, "name": "EKF2_GPS_CHECK", "shortDesc": "Integer bitmask controlling GPS checks", "type": "Int32"}, {"bitmask": [{"description": "Lon/lat", "index": 0}, {"description": "Altitude", "index": 1}, {"description": "3D velocity", "index": 2}, {"description": "Dual antenna heading", "index": 3}], "category": "Standard", "default": 7, "group": "EKF2", "longDesc": "Set bits in the following positions to enable: 0 : Longitude and latitude fusion 1 : Altitude fusion 2 : 3D velocity fusion 3 : Dual antenna heading fusion", "max": 15, "min": 0, "name": "EKF2_GPS_CTRL", "shortDesc": "GNSS sensor aiding", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 1, "default": 110.0, "group": "EKF2", "longDesc": "GPS measurement delay relative to IMU measurement if PPS time correction is not available/enabled (PPS_CAP_ENABLE).", "max": 300.0, "min": 0.0, "name": "EKF2_GPS_DELAY", "rebootRequired": true, "shortDesc": "GPS measurement delay relative to IMU measurement", "type": "Float", "units": "ms"}, {"category": "Standard", "default": 0, "group": "EKF2", "longDesc": "Automatic: reset on fusion timeout if no other source of position is available. Dead-reckoning: reset on fusion timeout if no source of velocity is available.", "name": "EKF2_GPS_MODE", "shortDesc": "Fusion reset mode", "type": "Int32", "values": [{"description": "Automatic", "value": 0}, {"description": "Dead-reckoning", "value": 1}]}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "EKF2", "longDesc": "Forward (roll) axis with origin relative to vehicle centre of gravity", "name": "EKF2_GPS_POS_X", "shortDesc": "X position of GPS antenna in body frame", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "EKF2", "longDesc": "Right (pitch) axis with origin relative to vehicle centre of gravity", "name": "EKF2_GPS_POS_Y", "shortDesc": "Y position of GPS antenna in body frame", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "EKF2", "longDesc": "Down (yaw) axis with origin relative to vehicle centre of gravity", "name": "EKF2_GPS_POS_Z", "shortDesc": "Z position of GPS antenna in body frame", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 1, "default": 5.0, "group": "EKF2", "longDesc": "Sets the number of standard deviations used by the innovation consistency test.", "min": 1.0, "name": "EKF2_GPS_P_GATE", "shortDesc": "Gate size for GNSS position fusion", "type": "Float", "units": "SD"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.5, "group": "EKF2", "max": 10.0, "min": 0.01, "name": "EKF2_GPS_P_NOISE", "shortDesc": "Measurement noise for GNSS position", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 1, "default": 5.0, "group": "EKF2", "longDesc": "Sets the number of standard deviations used by the innovation consistency test.", "min": 1.0, "name": "EKF2_GPS_V_GATE", "shortDesc": "Gate size for GNSS velocity fusion", "type": "Float", "units": "SD"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.3, "group": "EKF2", "max": 5.0, "min": 0.01, "name": "EKF2_GPS_V_NOISE", "shortDesc": "Measurement noise for GNSS velocity", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "EKF2", "max": 360.0, "min": 0.0, "name": "EKF2_GPS_YAW_OFF", "shortDesc": "Heading/Yaw offset for dual antenna GPS", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "EKF2", "max": 10.0, "min": 0.1, "name": "EKF2_GRAV_NOISE", "shortDesc": "Accelerometer measurement noise for gravity based observations", "type": "Float", "units": "g0"}, {"category": "Standard", "decimalPlaces": 1, "default": 15.0, "group": "EKF2", "longDesc": "If no airspeed measurements are available, the EKF-GSF AHRS calculation will assume this value of true airspeed when compensating for centripetal acceleration during turns. Set to zero to disable centripetal acceleration compensation during fixed wing flight modes.", "max": 100.0, "min": 0.0, "name": "EKF2_GSF_TAS", "shortDesc": "Default value of true airspeed used in EKF-GSF AHRS calculation", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.15, "group": "EKF2", "longDesc": "The ekf gyro bias states will be limited to within a range equivalent to +- of this value.", "max": 0.4, "min": 0.0, "name": "EKF2_GYR_B_LIM", "shortDesc": "Gyro bias learning limit", "type": "Float", "units": "rad/s"}, {"category": "Standard", "decimalPlaces": 6, "default": 0.001, "group": "EKF2", "max": 0.01, "min": 0.0, "name": "EKF2_GYR_B_NOISE", "shortDesc": "Process noise for IMU rate gyro bias prediction", "type": "Float", "units": "rad/s^2"}, {"category": "Standard", "decimalPlaces": 4, "default": 0.015, "group": "EKF2", "max": 0.1, "min": 0.0001, "name": "EKF2_GYR_NOISE", "shortDesc": "Rate gyro noise for covariance prediction", "type": "Float", "units": "rad/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 2.6, "group": "EKF2", "longDesc": "Sets the number of standard deviations used by the innovation consistency test.", "min": 1.0, "name": "EKF2_HDG_GATE", "shortDesc": "Gate size for heading fusion", "type": "Float", "units": "SD"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.3, "group": "EKF2", "max": 1.0, "min": 0.01, "name": "EKF2_HEAD_NOISE", "shortDesc": "Measurement noise for magnetic heading fusion", "type": "Float", "units": "rad"}, {"category": "Standard", "default": 1, "group": "EKF2", "longDesc": "When multiple height sources are enabled at the same time, the height estimate will always converge towards the reference height source selected by this parameter. The range sensor and vision options should only be used when for operation over a flat surface as the local NED origin will move up and down with ground level. If GPS is set as reference but altitude fusion is disabled in EKF2_GPS_CTRL, the GPS altitude is still used to initiaize the bias of the other height sensors.", "name": "EKF2_HGT_REF", "rebootRequired": true, "shortDesc": "Determines the reference source of height data used by the EKF", "type": "Int32", "values": [{"description": "Barometric pressure", "value": 0}, {"description": "GPS", "value": 1}, {"description": "Range sensor", "value": 2}, {"description": "Vision", "value": 3}]}, {"bitmask": [{"description": "Gyro Bias", "index": 0}, {"description": "Accel Bias", "index": 1}, {"description": "Gravity vector fusion", "index": 2}], "category": "Standard", "default": 7, "group": "EKF2", "max": 7, "min": 0, "name": "EKF2_IMU_CTRL", "shortDesc": "IMU control", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "EKF2", "longDesc": "Forward axis with origin relative to vehicle centre of gravity", "name": "EKF2_IMU_POS_X", "shortDesc": "X position of IMU in body frame", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "EKF2", "longDesc": "Forward axis with origin relative to vehicle centre of gravity", "name": "EKF2_IMU_POS_Y", "shortDesc": "Y position of IMU in body frame", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "EKF2", "longDesc": "Forward axis with origin relative to vehicle centre of gravity", "name": "EKF2_IMU_POS_Z", "shortDesc": "Z position of IMU in body frame", "type": "Float", "units": "m"}, {"category": "Standard", "default": 1, "group": "EKF2", "name": "EKF2_LOG_VERBOSE", "shortDesc": "Verbose logging", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.5, "group": "EKF2", "longDesc": "The heading is assumed to be observable when the body acceleration is greater than this parameter when a global position/velocity aiding source is active.", "max": 5.0, "min": 0.0, "name": "EKF2_MAG_ACCLIM", "shortDesc": "Horizontal acceleration threshold used for heading observability check", "type": "Float", "units": "m/s^2"}, {"category": "Standard", "decimalPlaces": 6, "default": 0.0001, "group": "EKF2", "max": 0.1, "min": 0.0, "name": "EKF2_MAG_B_NOISE", "shortDesc": "Process noise for body magnetic field prediction", "type": "Float", "units": "gauss/s"}, {"bitmask": [{"description": "Strength (EKF2_MAG_CHK_STR)", "index": 0}, {"description": "Inclination (EKF2_MAG_CHK_INC)", "index": 1}, {"description": "Wait for WMM", "index": 2}], "category": "Standard", "default": 1, "group": "EKF2", "longDesc": "Bitmask to set which check is used to decide whether the magnetometer data is valid. If GNSS data is received, the magnetic field is compared to a World Magnetic Model (WMM), otherwise an average value is used. This check is useful to reject occasional hard iron disturbance. Set bits to 1 to enable checks. Checks enabled by the following bit positions 0 : Magnetic field strength. Set tolerance using EKF2_MAG_CHK_STR 1 : Magnetic field inclination. Set tolerance using EKF2_MAG_CHK_INC 2 : Wait for GNSS to find the theoretical strength and inclination using the WMM", "max": 7, "min": 0, "name": "EKF2_MAG_CHECK", "shortDesc": "Magnetic field strength test selection", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 1, "default": 20.0, "group": "EKF2", "longDesc": "Maximum allowed deviation from the expected magnetic field inclination to pass the check.", "max": 90.0, "min": 0.0, "name": "EKF2_MAG_CHK_INC", "shortDesc": "Magnetic field inclination check tolerance", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.2, "group": "EKF2", "longDesc": "Maximum allowed deviation from the expected magnetic field strength to pass the check.", "max": 1.0, "min": 0.0, "name": "EKF2_MAG_CHK_STR", "shortDesc": "Magnetic field strength check tolerance", "type": "Float", "units": "gauss"}, {"category": "System", "decimalPlaces": 1, "default": 0.0, "group": "EKF2", "name": "EKF2_MAG_DECL", "shortDesc": "Magnetic declination", "type": "Float", "units": "deg", "volatile": true}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "EKF2", "max": 300.0, "min": 0.0, "name": "EKF2_MAG_DELAY", "rebootRequired": true, "shortDesc": "Magnetometer measurement delay relative to IMU measurements", "type": "Float", "units": "ms"}, {"category": "Standard", "decimalPlaces": 6, "default": 0.001, "group": "EKF2", "max": 0.1, "min": 0.0, "name": "EKF2_MAG_E_NOISE", "shortDesc": "Process noise for earth magnetic field prediction", "type": "Float", "units": "gauss/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 3.0, "group": "EKF2", "longDesc": "Sets the number of standard deviations used by the innovation consistency test.", "min": 1.0, "name": "EKF2_MAG_GATE", "shortDesc": "Gate size for magnetometer XYZ component fusion", "type": "Float", "units": "SD"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.05, "group": "EKF2", "max": 1.0, "min": 0.001, "name": "EKF2_MAG_NOISE", "shortDesc": "Measurement noise for magnetometer 3-axis fusion", "type": "Float", "units": "gauss"}, {"category": "Standard", "default": 0, "group": "EKF2", "longDesc": "Integer controlling the type of magnetometer fusion used - magnetic heading or 3-component vector. The fusion of magnetometer data as a three component vector enables vehicle body fixed hard iron errors to be learned, but requires a stable earth field. If set to 'Automatic' magnetic heading fusion is used when on-ground and 3-axis magnetic field fusion in-flight. If set to 'Magnetic heading' magnetic heading fusion is used at all times. If set to 'None' the magnetometer will not be used under any circumstance. If no external source of yaw is available, it is possible to use post-takeoff horizontal movement combined with GNSS velocity measurements to align the yaw angle. If set to 'Init' the magnetometer is only used to initalize the heading.", "name": "EKF2_MAG_TYPE", "rebootRequired": true, "shortDesc": "Type of magnetometer fusion", "type": "Int32", "values": [{"description": "Automatic", "value": 0}, {"description": "Magnetic heading", "value": 1}, {"description": "None", "value": 5}, {"description": "Init", "value": 6}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.15, "group": "EKF2", "longDesc": "This parameter controls the prediction of drag produced by the propellers when flying a multi-copter, which enables estimation of wind drift when enabled by the EKF2_DRAG_CTRL parameter. The drag produced by this effect scales with speed not speed squared and is produced because some of the air velocity normal to the propeller axis of rotation is lost when passing through the rotor disc. This changes the momentum of the flow which creates a drag reaction force. When comparing un-ducted propellers of the same diameter, the effect is roughly proportional to the area of the propeller blades when viewed side on and changes with propeller selection. Momentum drag is significantly higher for ducted rotors. To account for the drag produced by the body which scales with speed squared, see documentation for the EKF2_BCOEF_X and EKF2_BCOEF_Y parameters. Set this parameter to zero to turn off the momentum drag model for both axis.", "max": 1.0, "min": 0.0, "name": "EKF2_MCOEF", "shortDesc": "Propeller momentum drag coefficient for multi-rotor wind estimation", "type": "Float", "units": "1/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.01, "group": "EKF2", "longDesc": "If the vehicle is on ground, is not moving as determined by the motion test and the range finder is returning invalid or no data, then an assumed range value of EKF2_MIN_RNG will be used by the terrain estimator so that a terrain height estimate is available at the start of flight in situations where the range finder may be inside its minimum measurements distance when on ground.", "min": 0.01, "name": "EKF2_MIN_RNG", "shortDesc": "Expected range finder reading when on ground", "type": "Float", "units": "m"}, {"category": "Standard", "default": 0, "group": "EKF2", "longDesc": "Maximum number of IMUs to use for Multi-EKF. Set 0 to disable. Requires SENS_IMU_MODE 0.", "max": 4, "min": 0, "name": "EKF2_MULTI_IMU", "rebootRequired": true, "shortDesc": "Multi-EKF IMUs", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "EKF2", "longDesc": "Maximum number of magnetometers to use for Multi-EKF. Set 0 to disable. Requires SENS_MAG_MODE 0.", "max": 4, "min": 0, "name": "EKF2_MULTI_MAG", "rebootRequired": true, "shortDesc": "Multi-EKF Magnetometers", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 1, "default": 10.0, "group": "EKF2", "max": 50.0, "min": 0.5, "name": "EKF2_NOAID_NOISE", "shortDesc": "Measurement noise for non-aiding position hold", "type": "Float", "units": "m"}, {"category": "Standard", "default": 5000000, "group": "EKF2", "longDesc": "Maximum lapsed time from last fusion of measurements that constrain velocity drift before the EKF will report the horizontal nav solution as invalid", "max": 10000000, "min": 500000, "name": "EKF2_NOAID_TOUT", "shortDesc": "Maximum inertial dead-reckoning time", "type": "Int32", "units": "us"}, {"category": "Standard", "default": 1, "group": "EKF2", "longDesc": "Enable optical flow fusion.", "name": "EKF2_OF_CTRL", "shortDesc": "Optical flow aiding", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 1, "default": 20.0, "group": "EKF2", "longDesc": "Assumes measurement is timestamped at trailing edge of integration period", "max": 300.0, "min": 0.0, "name": "EKF2_OF_DELAY", "rebootRequired": true, "shortDesc": "Optical flow measurement delay relative to IMU measurements", "type": "Float", "units": "ms"}, {"category": "Standard", "decimalPlaces": 1, "default": 3.0, "group": "EKF2", "longDesc": "Sets the number of standard deviations used by the innovation consistency test.", "min": 1.0, "name": "EKF2_OF_GATE", "shortDesc": "Gate size for optical flow fusion", "type": "Float", "units": "SD"}, {"category": "Standard", "default": 0, "group": "EKF2", "longDesc": "Auto: use gyro from optical flow message if available, internal gyro otherwise. Internal: always use internal gyro", "name": "EKF2_OF_GYR_SRC", "shortDesc": "Optical flow angular rate compensation source", "type": "Int32", "values": [{"description": "Auto", "value": 0}, {"description": "Internal", "value": 1}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.5, "group": "EKF2", "longDesc": "Measurement noise for the optical flow sensor when it's reported quality metric is at the minimum", "min": 0.05, "name": "EKF2_OF_N_MAX", "shortDesc": "Optical flow maximum noise", "type": "Float", "units": "rad/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.15, "group": "EKF2", "longDesc": "Measurement noise for the optical flow sensor when it's reported quality metric is at the maximum", "min": 0.05, "name": "EKF2_OF_N_MIN", "shortDesc": "Optical flow minimum noise", "type": "Float", "units": "rad/s"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "EKF2", "longDesc": "Forward axis with origin relative to vehicle centre of gravity", "name": "EKF2_OF_POS_X", "shortDesc": "X position of optical flow focal point in body frame", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "EKF2", "longDesc": "Forward axis with origin relative to vehicle centre of gravity", "name": "EKF2_OF_POS_Y", "shortDesc": "Y position of optical flow focal point in body frame", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "EKF2", "longDesc": "Forward axis with origin relative to vehicle centre of gravity", "name": "EKF2_OF_POS_Z", "shortDesc": "Z position of optical flow focal point in body frame", "type": "Float", "units": "m"}, {"category": "Standard", "default": 1, "group": "EKF2", "longDesc": "Optical Flow data will only be used in air if the sensor reports a quality metric >= EKF2_OF_QMIN", "max": 255, "min": 0, "name": "EKF2_OF_QMIN", "shortDesc": "In air optical flow minimum quality", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "EKF2", "longDesc": "Optical Flow data will only be used on the ground if the sensor reports a quality metric >= EKF2_OF_QMIN_GND", "max": 255, "min": 0, "name": "EKF2_OF_QMIN_GND", "shortDesc": "On ground optical flow minimum quality", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "EKF2", "longDesc": "This is the ratio of static pressure error to dynamic pressure generated by a negative wind relative velocity along the X body axis. If the baro height estimate rises during backwards flight, then this will be a negative number.", "max": 0.5, "min": -0.5, "name": "EKF2_PCOEF_XN", "shortDesc": "Static pressure position error coefficient for the negative X axis", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "EKF2", "longDesc": "This is the ratio of static pressure error to dynamic pressure generated by a positive wind relative velocity along the X body axis. If the baro height estimate rises during forward flight, then this will be a negative number.", "max": 0.5, "min": -0.5, "name": "EKF2_PCOEF_XP", "shortDesc": "Static pressure position error coefficient for the positive X axis", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "EKF2", "longDesc": "This is the ratio of static pressure error to dynamic pressure generated by a wind relative velocity along the negative Y (LH) body axis. If the baro height estimate rises during sideways flight to the left, then this will be a negative number.", "max": 0.5, "min": -0.5, "name": "EKF2_PCOEF_YN", "shortDesc": "Pressure position error coefficient for the negative Y axis", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "EKF2", "longDesc": "This is the ratio of static pressure error to dynamic pressure generated by a wind relative velocity along the positive Y (RH) body axis. If the baro height estimate rises during sideways flight to the right, then this will be a negative number.", "max": 0.5, "min": -0.5, "name": "EKF2_PCOEF_YP", "shortDesc": "Pressure position error coefficient for the positive Y axis", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "EKF2", "longDesc": "This is the ratio of static pressure error to dynamic pressure generated by a wind relative velocity along the Z body axis.", "max": 0.5, "min": -0.5, "name": "EKF2_PCOEF_Z", "shortDesc": "Static pressure position error coefficient for the Z axis", "type": "Float"}, {"category": "Standard", "default": 10000, "group": "EKF2", "longDesc": "EKF prediction period in microseconds. This should ideally be an integer multiple of the IMU time delta. Actual filter update will be an integer multiple of IMU update.", "max": 20000, "min": 1000, "name": "EKF2_PREDICT_US", "shortDesc": "EKF prediction period", "type": "Int32", "units": "us"}, {"category": "Standard", "decimalPlaces": 1, "default": 3.0, "group": "EKF2", "max": 100.0, "min": 2.0, "name": "EKF2_REQ_EPH", "shortDesc": "Required EPH to use GPS", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 1, "default": 5.0, "group": "EKF2", "max": 100.0, "min": 2.0, "name": "EKF2_REQ_EPV", "shortDesc": "Required EPV to use GPS", "type": "Float", "units": "m"}, {"category": "Standard", "default": 3, "group": "EKF2", "longDesc": "Minimum GPS fix type required for GPS usage.", "name": "EKF2_REQ_FIX", "shortDesc": "Required GPS fix", "type": "Int32", "values": [{"description": "No fix required", "value": 0}, {"description": "2D fix", "value": 2}, {"description": "3D fix", "value": 3}, {"description": "RTCM code differential", "value": 4}, {"description": "RTK float", "value": 5}, {"description": "RTK fixed", "value": 6}, {"description": "Extrapolated", "value": 8}]}, {"category": "Standard", "decimalPlaces": 1, "default": 10.0, "group": "EKF2", "longDesc": "Minimum continuous period without GPS failure required to mark a healthy GPS status. It can be reduced to speed up initialization, but it's recommended to keep this unchanged for a vehicle.", "min": 0.1, "name": "EKF2_REQ_GPS_H", "rebootRequired": true, "shortDesc": "Required GPS health time on startup", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.1, "group": "EKF2", "max": 1.0, "min": 0.1, "name": "EKF2_REQ_HDRIFT", "shortDesc": "Maximum horizontal drift speed to use GPS", "type": "Float", "units": "m/s"}, {"category": "Standard", "default": 6, "group": "EKF2", "max": 12, "min": 4, "name": "EKF2_REQ_NSATS", "shortDesc": "Required satellite count to use GPS", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 1, "default": 2.5, "group": "EKF2", "max": 5.0, "min": 1.5, "name": "EKF2_REQ_PDOP", "shortDesc": "Maximum PDOP to use GPS", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.5, "group": "EKF2", "max": 5.0, "min": 0.5, "name": "EKF2_REQ_SACC", "shortDesc": "Required speed accuracy to use GPS", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.2, "group": "EKF2", "max": 1.5, "min": 0.1, "name": "EKF2_REQ_VDRIFT", "shortDesc": "Maximum vertical drift speed to use GPS", "type": "Float", "units": "m/s"}, {"category": "Standard", "default": 5.0, "group": "EKF2", "longDesc": "If the vehicle absolute altitude exceeds this value then the estimator will not fuse range measurements to estimate its height. This only applies when conditional range aid mode is activated (EKF2_RNG_CTRL = 1).", "max": 10.0, "min": 1.0, "name": "EKF2_RNG_A_HMAX", "shortDesc": "Maximum height above ground allowed for conditional range aid mode", "type": "Float", "units": "m"}, {"category": "Standard", "default": 1.0, "group": "EKF2", "longDesc": "If the vehicle horizontal speed exceeds this value then the estimator will not fuse range measurements to estimate its height. This only applies when conditional range aid mode is activated (EKF2_RNG_CTRL = 1).", "max": 2.0, "min": 0.1, "name": "EKF2_RNG_A_VMAX", "shortDesc": "Maximum horizontal velocity allowed for conditional range aid mode", "type": "Float", "units": "m/s"}, {"category": "Standard", "default": 1, "group": "EKF2", "longDesc": "WARNING: Range finder measurements are less reliable and can experience unexpected errors. For these reasons, if accurate control of height relative to ground is required, it is recommended to use the MPC_ALT_MODE parameter instead, unless baro errors are severe enough to cause problems with landing and takeoff. If this parameter is enabled then the estimator will make use of the range finder measurements to estimate its height in addition to other height sources (if activated). Range sensor aiding can be enabled (i.e.: always use) or set in \"conditional\" mode. Conditional mode: This enables the range finder to be used during low speed (< EKF2_RNG_A_VMAX) and low altitude (< EKF2_RNG_A_HMAX) operation, eg takeoff and landing, where baro interference from rotor wash is excessive and can corrupt EKF state estimates. It is intended to be used where a vertical takeoff and landing is performed, and horizontal flight does not occur until above EKF2_RNG_A_HMAX.", "name": "EKF2_RNG_CTRL", "shortDesc": "Range sensor height aiding", "type": "Int32", "values": [{"description": "Disable range fusion", "value": 0}, {"description": "Enabled (conditional mode)", "value": 1}, {"description": "Enabled", "value": 2}]}, {"category": "Standard", "decimalPlaces": 1, "default": 5.0, "group": "EKF2", "max": 300.0, "min": 0.0, "name": "EKF2_RNG_DELAY", "rebootRequired": true, "shortDesc": "Range finder measurement delay relative to IMU measurements", "type": "Float", "units": "ms"}, {"category": "Standard", "decimalPlaces": 1, "default": 3.0, "group": "EKF2", "longDesc": "Limit for fog detection. If the range finder measures a distance greater than this value, the measurement is considered to not be blocked by fog or rain. If there's a jump from larger than RNG_FOG to smaller than EKF2_RNG_FOG, the measurement may gets rejected. 0 - disabled", "max": 20.0, "min": 0.0, "name": "EKF2_RNG_FOG", "shortDesc": "Maximum distance at which the range finder could detect fog (m)", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 1, "default": 5.0, "group": "EKF2", "longDesc": "Sets the number of standard deviations used by the innovation consistency test.", "min": 1.0, "name": "EKF2_RNG_GATE", "shortDesc": "Gate size for range finder fusion", "type": "Float", "units": "SD"}, {"category": "Standard", "default": 1.0, "group": "EKF2", "longDesc": "To be used, the time derivative of the distance sensor measurements projected on the vertical axis needs to be statistically consistent with the estimated vertical velocity of the drone. Decrease this value to make the filter more robust against range finder faulty data (stuck, reflections, ...). Note: tune the range finder noise parameters (EKF2_RNG_NOISE and EKF2_RNG_SFE) before tuning this gate.", "max": 5.0, "min": 0.1, "name": "EKF2_RNG_K_GATE", "shortDesc": "Gate size used for range finder kinematic consistency check", "type": "Float", "units": "SD"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.1, "group": "EKF2", "min": 0.01, "name": "EKF2_RNG_NOISE", "shortDesc": "Measurement noise for range finder fusion", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "EKF2", "max": 0.75, "min": -0.75, "name": "EKF2_RNG_PITCH", "shortDesc": "Range sensor pitch offset", "type": "Float", "units": "rad"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "EKF2", "longDesc": "Forward axis with origin relative to vehicle centre of gravity", "name": "EKF2_RNG_POS_X", "shortDesc": "X position of range finder origin in body frame", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "EKF2", "longDesc": "Forward axis with origin relative to vehicle centre of gravity", "name": "EKF2_RNG_POS_Y", "shortDesc": "Y position of range finder origin in body frame", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "EKF2", "longDesc": "Forward axis with origin relative to vehicle centre of gravity", "name": "EKF2_RNG_POS_Z", "shortDesc": "Z position of range finder origin in body frame", "type": "Float", "units": "m"}, {"category": "Standard", "default": 1.0, "group": "EKF2", "longDesc": "Minimum duration during which the reported range finder signal quality needs to be non-zero in order to be declared valid (s)", "max": 5.0, "min": 0.1, "name": "EKF2_RNG_QLTY_T", "shortDesc": "Minumum range validity period", "type": "Float", "units": "s"}, {"category": "Standard", "default": 0.05, "group": "EKF2", "longDesc": "Specifies the increase in range finder noise with range.", "max": 0.2, "min": 0.0, "name": "EKF2_RNG_SFE", "shortDesc": "Range finder range dependent noise scaler", "type": "Float", "units": "m/m"}, {"category": "Standard", "default": 0.2, "group": "EKF2", "longDesc": "EKF2 instances have to be better than the selected by at least this amount before their relative score can be reduced.", "name": "EKF2_SEL_ERR_RED", "shortDesc": "Selector error reduce threshold", "type": "Float"}, {"category": "Standard", "default": 1.0, "group": "EKF2", "longDesc": "EKF2 selector acceleration error threshold for comparing accelerometers. Acceleration vector differences larger than this will result in accumulated velocity error.", "name": "EKF2_SEL_IMU_ACC", "shortDesc": "Selector acceleration threshold", "type": "Float", "units": "m/s^2"}, {"category": "Standard", "default": 15.0, "group": "EKF2", "longDesc": "EKF2 selector maximum accumulated angular error threshold for comparing gyros. Accumulated angular error larger than this will result in the sensor being declared faulty.", "name": "EKF2_SEL_IMU_ANG", "shortDesc": "Selector angular threshold", "type": "Float", "units": "deg"}, {"category": "Standard", "default": 7.0, "group": "EKF2", "longDesc": "EKF2 selector angular rate error threshold for comparing gyros. Angular rate vector differences larger than this will result in accumulated angular error.", "name": "EKF2_SEL_IMU_RAT", "shortDesc": "Selector angular rate threshold", "type": "Float", "units": "deg/s"}, {"category": "Standard", "default": 2.0, "group": "EKF2", "longDesc": "EKF2 selector maximum accumulated velocity threshold for comparing accelerometers. Accumulated velocity error larger than this will result in the sensor being declared faulty.", "name": "EKF2_SEL_IMU_VEL", "shortDesc": "Selector angular threshold", "type": "Float", "units": "m/s"}, {"category": "Standard", "default": 0, "group": "EKF2", "longDesc": "Use for vehicles where the measured body Z magnetic field is subject to strong magnetic interference. For magnetic heading fusion the magnetometer Z measurement will be replaced by a synthetic value calculated using the knowledge of the 3D magnetic field vector at the location of the drone. Therefore, this parameter will only have an effect if the global position of the drone is known. For 3D mag fusion the magnetometer Z measurement will simply be ignored instead of fusing the synthetic value.", "name": "EKF2_SYNT_MAG_Z", "shortDesc": "Enable synthetic magnetometer Z component measurement", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 1, "default": 5.0, "group": "EKF2", "longDesc": "Sets the number of standard deviations used by the innovation consistency test.", "min": 1.0, "name": "EKF2_TAS_GATE", "shortDesc": "Gate size for TAS fusion", "type": "Float", "units": "SD"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.25, "group": "EKF2", "longDesc": "Controls how tightly the output track the EKF states", "max": 1.0, "min": 0.1, "name": "EKF2_TAU_POS", "shortDesc": "Output predictor position time constant", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.25, "group": "EKF2", "max": 1.0, "name": "EKF2_TAU_VEL", "shortDesc": "Time constant of the velocity output prediction and smoothing filter", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.5, "group": "EKF2", "min": 0.0, "name": "EKF2_TERR_GRAD", "shortDesc": "Magnitude of terrain gradient", "type": "Float", "units": "m/m"}, {"category": "Standard", "decimalPlaces": 1, "default": 5.0, "group": "EKF2", "min": 0.5, "name": "EKF2_TERR_NOISE", "shortDesc": "Terrain altitude process noise", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 100.0, "group": "EKF2", "max": 299792458.0, "name": "EKF2_VEL_LIM", "shortDesc": "Velocity limit", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.05, "group": "EKF2", "longDesc": "When unaided, the wind estimate uncertainty (1-sigma, in m/s) increases by this amount every second.", "max": 1.0, "min": 0.0, "name": "EKF2_WIND_NSD", "shortDesc": "Process noise spectral density for wind velocity prediction", "type": "Float", "units": "m/s^2/sqrt(Hz)"}, {"category": "Standard", "default": 0, "group": "Events", "longDesc": "Enable/disable event task for RC Loss. When enabled, an alarm tune will be\nplayed via buzzer or ESCs, if supported. The alarm will sound after a disarm,\nif the vehicle was previously armed and only if the vehicle had RC signal at\nsome point. Particularly useful for locating crashed drones without a GPS\nsensor.", "name": "EV_TSK_RC_LOSS", "rebootRequired": true, "shortDesc": "RC Loss Alarm", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 0, "group": "Events", "longDesc": "Enable/disable event task for displaying the vehicle status using arm-mounted\nLEDs. When enabled and if the vehicle supports it, LEDs will flash\nindicating various vehicle status changes. Currently PX4 has not implemented\nany specific status events.\n-", "name": "EV_TSK_STAT_DIS", "rebootRequired": true, "shortDesc": "Status Display", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 1, "default": 30.0, "group": "FW Attitude Control", "increment": 0.5, "longDesc": "Applies to both directions in all manual modes with attitude stabilization but without altitude control", "max": 90.0, "min": 0.0, "name": "FW_MAN_P_MAX", "shortDesc": "Maximum manual pitch angle", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 1, "default": 45.0, "group": "FW Attitude Control", "increment": 0.5, "longDesc": "Applies to both directions in all manual modes with attitude stabilization", "max": 90.0, "min": 0.0, "name": "FW_MAN_R_MAX", "shortDesc": "Maximum manual roll angle", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 1, "default": 30.0, "group": "FW Attitude Control", "increment": 0.5, "longDesc": "This is the maximally added yaw rate setpoint from the yaw stick in any attitude controlled flight mode.\nIt is added to the yaw rate setpoint generated by the controller for turn coordination.", "min": 0.0, "name": "FW_MAN_YR_MAX", "shortDesc": "Maximum manually added yaw rate", "type": "Float", "units": "deg/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "FW Attitude Control", "increment": 0.5, "longDesc": "An airframe specific offset of the pitch setpoint in degrees, the value is\nadded to the pitch setpoint and should correspond to the pitch at\ntypical cruise speed of the airframe.", "max": 90.0, "min": -90.0, "name": "FW_PSP_OFF", "shortDesc": "Pitch setpoint offset (pitch at level flight)", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 1, "default": 60.0, "group": "FW Attitude Control", "increment": 0.5, "max": 180.0, "min": 0.0, "name": "FW_P_RMAX_NEG", "shortDesc": "Maximum negative / down pitch rate setpoint", "type": "Float", "units": "deg/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 60.0, "group": "FW Attitude Control", "increment": 0.5, "max": 180.0, "min": 0.0, "name": "FW_P_RMAX_POS", "shortDesc": "Maximum positive / up pitch rate setpoint", "type": "Float", "units": "deg/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.4, "group": "FW Attitude Control", "increment": 0.05, "longDesc": "This defines the latency between a pitch step input and the achieved setpoint\n(inverse to a P gain). Smaller systems may require smaller values.", "max": 1.0, "min": 0.2, "name": "FW_P_TC", "shortDesc": "Attitude pitch time constant", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 1, "default": 70.0, "group": "FW Attitude Control", "increment": 0.5, "max": 180.0, "min": 0.0, "name": "FW_R_RMAX", "shortDesc": "Maximum roll rate setpoint", "type": "Float", "units": "deg/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.4, "group": "FW Attitude Control", "increment": 0.05, "longDesc": "This defines the latency between a roll step input and the achieved setpoint\n(inverse to a P gain). Smaller systems may require smaller values.", "max": 1.0, "min": 0.2, "name": "FW_R_TC", "shortDesc": "Attitude Roll Time Constant", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.2, "group": "FW Attitude Control", "increment": 0.05, "max": 10.0, "min": 0.0, "name": "FW_WR_FF", "shortDesc": "Wheel steering rate feed forward", "type": "Float", "units": "%/rad/s"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.1, "group": "FW Attitude Control", "increment": 0.005, "longDesc": "This gain defines how much control response will result out of a steady\nstate error. It trims any constant error.", "max": 10.0, "min": 0.0, "name": "FW_WR_I", "shortDesc": "Wheel steering rate integrator gain", "type": "Float", "units": "%/rad"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.4, "group": "FW Attitude Control", "increment": 0.05, "max": 1.0, "min": 0.0, "name": "FW_WR_IMAX", "shortDesc": "Wheel steering rate integrator limit", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.5, "group": "FW Attitude Control", "increment": 0.005, "longDesc": "This defines how much the wheel steering input will be commanded depending on the\ncurrent body angular rate error.", "max": 10.0, "min": 0.0, "name": "FW_WR_P", "shortDesc": "Wheel steering rate proportional gain", "type": "Float", "units": "%/rad/s"}, {"category": "Standard", "default": 0, "group": "FW Attitude Control", "longDesc": "Only enabled during automatic runway takeoff and landing.\nIn all manual modes the wheel is directly controlled with yaw stick.", "name": "FW_W_EN", "shortDesc": "Enable wheel steering controller", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 1, "default": 30.0, "group": "FW Attitude Control", "increment": 0.5, "longDesc": "This limits the maximum wheel steering rate the controller will output (in degrees per\nsecond).", "max": 90.0, "min": 0.0, "name": "FW_W_RMAX", "shortDesc": "Maximum wheel steering rate", "type": "Float", "units": "deg/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 50.0, "group": "FW Attitude Control", "increment": 0.5, "max": 180.0, "min": 0.0, "name": "FW_Y_RMAX", "shortDesc": "Maximum yaw rate setpoint", "type": "Float", "units": "deg/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "FW Auto Landing", "increment": 0.01, "longDesc": "Sets a fraction of full flaps during landing.\nAlso applies to flaperons if enabled in the mixer/allocation.", "max": 1.0, "min": 0.0, "name": "FW_FLAPS_LND_SCL", "shortDesc": "Flaps setting during landing", "type": "Float", "units": "norm"}, {"bitmask": [{"description": "Abort if terrain is not found (only applies to mission landings)", "index": 0}, {"description": "Abort if terrain times out (after a first successful measurement)", "index": 1}], "category": "Standard", "default": 3, "group": "FW Auto Landing", "longDesc": "Terrain estimation:\nbit 0: Abort if terrain is not found\nbit 1: Abort if terrain times out (after a first successful measurement)\nThe last estimate is always used as ground, whether the last valid measurement or the land waypoint, depending on the\nselected abort criteria, until an abort condition is entered. If FW_LND_USETER == 0, these bits are ignored.\nTODO: Extend automatic abort conditions\ne.g. glide slope tracking error (horizontal and vertical)", "max": 3, "min": 0, "name": "FW_LND_ABORT", "shortDesc": "Bit mask to set the automatic landing abort conditions", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 1, "default": -1.0, "group": "FW Auto Landing", "increment": 0.1, "longDesc": "The calibrated airspeed setpoint during landing.\nIf set <= 0, landing airspeed = FW_AIRSPD_MIN by default.", "min": -1.0, "name": "FW_LND_AIRSPD", "shortDesc": "Landing airspeed", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 5.0, "group": "FW Auto Landing", "increment": 0.5, "longDesc": "Typically the desired landing slope angle when landing configuration (flaps, airspeed) is enabled.\nSet this value within the vehicle's performance limits.", "max": 45.0, "min": 1.0, "name": "FW_LND_ANG", "shortDesc": "Maximum landing slope angle", "type": "Float", "units": "deg"}, {"category": "Standard", "default": 0, "group": "FW Auto Landing", "longDesc": "Allows to deploy the landing configuration (flaps, landing airspeed, etc.) already in\nthe loiter-down waypoint before the final approach.\nOtherwise is enabled only in the final approach.", "name": "FW_LND_EARLYCFG", "shortDesc": "Early landing configuration deployment", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 1, "default": 0.5, "group": "FW Auto Landing", "increment": 0.5, "longDesc": "NOTE: max(FW_LND_FLALT, FW_LND_FL_TIME * |z-velocity|) is taken as the flare altitude", "min": 0.0, "name": "FW_LND_FLALT", "shortDesc": "Landing flare altitude (relative to landing altitude)", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 1, "default": 15.0, "group": "FW Auto Landing", "increment": 0.5, "longDesc": "Maximum pitch during landing flare.", "max": 45.0, "min": 0.0, "name": "FW_LND_FL_PMAX", "shortDesc": "Flare, maximum pitch", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 1, "default": 2.5, "group": "FW Auto Landing", "increment": 0.5, "longDesc": "Minimum pitch during landing flare.", "max": 15.0, "min": -5.0, "name": "FW_LND_FL_PMIN", "shortDesc": "Flare, minimum pitch", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.25, "group": "FW Auto Landing", "increment": 0.1, "longDesc": "TECS will attempt to control the aircraft to this sink rate via pitch angle (throttle killed during flare)", "max": 2.0, "min": 0.0, "name": "FW_LND_FL_SINK", "shortDesc": "Landing flare sink rate", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 1.0, "group": "FW Auto Landing", "increment": 0.1, "longDesc": "Multiplied by the descent rate to calculate a dynamic altitude at which\nto trigger the flare.\nNOTE: max(FW_LND_FLALT, FW_LND_FL_TIME * descent rate) is taken as the flare altitude", "max": 5.0, "min": 0.1, "name": "FW_LND_FL_TIME", "shortDesc": "Landing flare time", "type": "Float", "units": "s"}, {"category": "Standard", "default": 2, "group": "FW Auto Landing", "longDesc": "Approach angle nudging: shifts the touchdown point laterally while keeping the approach entrance point constant\nApproach path nudging: shifts the touchdown point laterally along with the entire approach path\nThis is useful for manually adjusting the landing point in real time when map or GNSS errors cause an offset from the\ndesired landing vector. Nudging is done with yaw stick, constrained to FW_LND_TD_OFF (in meters) and the direction is\nrelative to the vehicle heading (stick deflection to the right = land point moves to the right as seen by the vehicle).", "max": 2, "min": 0, "name": "FW_LND_NUDGE", "shortDesc": "Landing touchdown nudging option", "type": "Int32", "values": [{"description": "Disable nudging", "value": 0}, {"description": "Nudge approach angle", "value": 1}, {"description": "Nudge approach path", "value": 2}]}, {"category": "Standard", "decimalPlaces": 1, "default": 3.0, "group": "FW Auto Landing", "increment": 1.0, "max": 10.0, "min": 0.0, "name": "FW_LND_TD_OFF", "shortDesc": "Maximum lateral position offset for the touchdown point", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 1, "default": -1.0, "group": "FW Auto Landing", "increment": 0.1, "longDesc": "This is the time after the start of flaring that we expect the vehicle to touch the runway.\nAt this time, a 0.5s clamp down ramp will engage, constraining the pitch setpoint to RWTO_PSP.\nIf enabled, ensure that RWTO_PSP is configured appropriately for full gear contact on ground roll.\nSet to -1.0 to disable touchdown clamping. E.g. it may not be desirable to clamp on belly landings.\nThe touchdown time will be constrained to be greater than or equal to the flare time (FW_LND_FL_TIME).", "max": 5.0, "min": -1.0, "name": "FW_LND_TD_TIME", "shortDesc": "Landing touchdown time (since flare start)", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 1, "default": 1.0, "group": "FW Auto Landing", "increment": 0.1, "longDesc": "The TECS altitude time constant (FW_T_ALT_TC) is multiplied by this value.", "max": 1.0, "min": 0.2, "name": "FW_LND_THRTC_SC", "shortDesc": "Altitude time constant factor for landing and low-height flight", "type": "Float", "units": ""}, {"category": "Standard", "default": 1, "group": "FW Auto Landing", "longDesc": "This is critical for detecting when to flare, and should be enabled if possible.\nIf enabled and no measurement is found within a given timeout, the landing waypoint altitude will be used OR the landing\nwill be aborted, depending on the criteria set in FW_LND_ABORT.\nIf disabled, FW_LND_ABORT terrain based criteria are ignored.", "max": 2, "min": 0, "name": "FW_LND_USETER", "shortDesc": "Use terrain estimation during landing", "type": "Int32", "values": [{"description": "Disable the terrain estimate", "value": 0}, {"description": "Use the terrain estimate to trigger the flare (only)", "value": 1}, {"description": "Calculate landing glide slope relative to the terrain estimate", "value": 2}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "FW Auto Landing", "increment": 0.01, "max": 1.0, "min": 0.0, "name": "FW_SPOILERS_LND", "shortDesc": "Spoiler landing setting", "type": "Float", "units": "norm"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "FW Auto Takeoff", "increment": 0.01, "longDesc": "Sets a fraction of full flaps during take-off.\nAlso applies to flaperons if enabled in the mixer/allocation.", "max": 1.0, "min": 0.0, "name": "FW_FLAPS_TO_SCL", "shortDesc": "Flaps setting during take-off", "type": "Float", "units": "norm"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.05, "group": "FW Auto Takeoff", "increment": 0.05, "longDesc": "Launch is detected when acceleration in body forward direction is above FW_LAUN_AC_THLD for FW_LAUN_AC_T seconds.", "max": 5.0, "min": 0.0, "name": "FW_LAUN_AC_T", "shortDesc": "Trigger time", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 1, "default": 30.0, "group": "FW Auto Takeoff", "increment": 0.5, "longDesc": "Launch is detected when acceleration in body forward direction is above FW_LAUN_AC_THLD for FW_LAUN_AC_T seconds.", "min": 0.0, "name": "FW_LAUN_AC_THLD", "shortDesc": "Trigger acceleration threshold", "type": "Float", "units": "m/s^2"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "FW Auto Takeoff", "increment": 0.1, "longDesc": "Locks control surfaces during pre-launch (armed) and until this time since launch has passed.\nOnly affects control surfaces that have corresponding flag set, and not active for runway takeoff.\nSet to 0 to disable any surface locking after arming.", "min": 0.0, "name": "FW_LAUN_CS_LK_DY", "shortDesc": "Control surface launch delay", "type": "Float", "units": "s"}, {"category": "Standard", "default": 0, "group": "FW Auto Takeoff", "longDesc": "Enables automatic launch detection based on measured acceleration. Use for hand- or catapult-launched vehicles.\nNot compatible with runway takeoff.", "name": "FW_LAUN_DETCN_ON", "shortDesc": "Fixed-wing launch detection", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "FW Auto Takeoff", "increment": 0.5, "longDesc": "Start the motor(s) this amount of seconds after launch is detected.", "max": 10.0, "min": 0.0, "name": "FW_LAUN_MOT_DEL", "shortDesc": "Motor delay", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 1, "default": -1.0, "group": "FW Auto Takeoff", "increment": 0.1, "longDesc": "The calibrated airspeed setpoint during the takeoff climbout.\nIf set <= 0, FW_AIRSPD_MIN will be set by default.", "min": -1.0, "name": "FW_TKO_AIRSPD", "shortDesc": "Takeoff Airspeed", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 10.0, "group": "FW Auto Takeoff", "increment": 0.5, "max": 80.0, "min": -5.0, "name": "FW_TKO_PITCH_MIN", "shortDesc": "Minimum pitch during takeoff", "type": "Float", "units": "deg"}, {"category": "Standard", "default": 30, "group": "FW General", "longDesc": "The time the system should do open loop loiter and wait for GPS recovery\nbefore it starts descending. Set to 0 to disable. Roll angle is set to FW_GPSF_R.\nDoes only apply for fixed-wing vehicles or VTOLs with NAV_FORCE_VT set to 0.", "min": 0, "name": "FW_GPSF_LT", "shortDesc": "GPS failure loiter time", "type": "Int32", "units": "s"}, {"category": "Standard", "decimalPlaces": 1, "default": 15.0, "group": "FW General", "increment": 0.5, "longDesc": "Roll angle in GPS failure loiter mode.", "max": 60.0, "min": 0.0, "name": "FW_GPSF_R", "shortDesc": "GPS failure fixed roll angle", "type": "Float", "units": "deg"}, {"bitmask": [{"description": "Alternative stick configuration (height rate on throttle stick, airspeed on pitch stick)", "index": 0}, {"description": "Enable airspeed setpoint via sticks in altitude and position flight mode", "index": 1}], "category": "Standard", "default": 2, "group": "FW General", "longDesc": "Applies in manual Position and Altitude flight modes.", "max": 3, "min": 0, "name": "FW_POS_STK_CONF", "shortDesc": "Custom stick configuration", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 1, "default": 30.0, "group": "FW General", "increment": 0.5, "longDesc": "Applies in any altitude controlled flight mode.", "max": 80.0, "min": 0.0, "name": "FW_P_LIM_MAX", "shortDesc": "Maximum pitch angle setpoint", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 1, "default": -30.0, "group": "FW General", "increment": 0.5, "longDesc": "Applies in any altitude controlled flight mode.", "max": 0.0, "min": -60.0, "name": "FW_P_LIM_MIN", "shortDesc": "Minimum pitch angle setpoint", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 1, "default": 50.0, "group": "FW General", "increment": 0.5, "longDesc": "Applies in any altitude controlled flight mode.", "max": 75.0, "min": 35.0, "name": "FW_R_LIM", "shortDesc": "Maximum roll angle setpoint", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "FW General", "increment": 0.01, "longDesc": "This is the minimum throttle while on the ground (\"landed\") in auto modes.", "max": 1.0, "min": 0.0, "name": "FW_THR_IDLE", "shortDesc": "Idle throttle", "type": "Float", "units": "norm"}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "FW General", "increment": 0.01, "longDesc": "Applies in any altitude controlled flight mode.\nShould be set accordingly to achieve FW_T_CLMB_MAX.", "max": 1.0, "min": 0.0, "name": "FW_THR_MAX", "shortDesc": "Throttle limit max", "type": "Float", "units": "norm"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "FW General", "increment": 0.01, "longDesc": "Applies in any altitude controlled flight mode.\nUsually set to 0 but can be increased to prevent the motor from stopping when\ndescending, which can increase achievable descent rates.", "max": 1.0, "min": 0.0, "name": "FW_THR_MIN", "shortDesc": "Throttle limit min", "type": "Float", "units": "norm"}, {"category": "Standard", "decimalPlaces": 2, "default": 3.0, "group": "FW General", "increment": 0.01, "longDesc": "In auto modes: default climb rate output by controller to achieve altitude setpoints.\nIn manual modes: maximum climb rate setpoint.", "min": 0.1, "name": "FW_T_CLMB_R_SP", "shortDesc": "Default target climbrate", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 2.0, "group": "FW General", "increment": 0.01, "longDesc": "In auto modes: default sink rate output by controller to achieve altitude setpoints.\nIn manual modes: maximum sink rate setpoint.", "min": 0.1, "name": "FW_T_SINK_R_SP", "shortDesc": "Default target sinkrate", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 1.0, "group": "FW General", "increment": 1.0, "longDesc": "Adjusts the amount of weighting that the pitch control\napplies to speed vs height errors.\n0 -> control height only\n2 -> control speed only (gliders)", "max": 2.0, "min": 0.0, "name": "FW_T_SPDWEIGHT", "shortDesc": "Speed <--> Altitude weight", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.5, "group": "FW General", "increment": 1.0, "longDesc": "This is used to constrain a minimum altitude below which we keep wings level to avoid wing tip strike. It's safer\nto give a slight margin here (> 0m)", "min": 0.0, "name": "FW_WING_HEIGHT", "shortDesc": "Height (AGL) of the wings when the aircraft is on the ground", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 1, "default": 3.0, "group": "FW General", "increment": 0.1, "longDesc": "This is used for limiting the roll setpoint near the ground. (if multiple wings, take the longest span)", "min": 0.1, "name": "FW_WING_SPAN", "shortDesc": "The aircraft's wing span (length from tip to tip)", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 0, "default": 90.0, "group": "FW Lateral Control", "increment": 1.0, "longDesc": "Maximum change in roll angle setpoint per second.\nApplied in all Auto modes, plus manual Position & Altitude modes.", "min": 0.0, "name": "FW_PN_R_SLEW_MAX", "shortDesc": "Path navigation roll slew rate limit", "type": "Float", "units": "deg/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 5.0, "group": "FW Longitudinal Control", "increment": 0.5, "longDesc": "The controller will increase the commanded airspeed to maintain\nthis minimum groundspeed to the next waypoint.", "max": 40.0, "min": 0.0, "name": "FW_GND_SPD_MIN", "shortDesc": "Minimum groundspeed", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "FW Longitudinal Control", "increment": 0.01, "longDesc": "Maximum slew rate for the commanded throttle", "max": 1.0, "min": 0.0, "name": "FW_THR_SLEW_MAX", "shortDesc": "Throttle max slew rate", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 5.0, "group": "FW Longitudinal Control", "increment": 0.5, "min": 2.0, "name": "FW_T_ALT_TC", "shortDesc": "Altitude error time constant", "type": "Float"}, {"category": "Standard", "decimalPlaces": 0, "default": -1.0, "group": "FW Longitudinal Control", "longDesc": "Minimum altitude error needed to descend with max airspeed and minimal throttle.\nA negative value disables fast descend.", "min": -1.0, "name": "FW_T_F_ALT_ERR", "shortDesc": "Fast descend: minimum altitude error", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.3, "group": "FW Longitudinal Control", "increment": 0.05, "max": 1.0, "min": 0.0, "name": "FW_T_HRATE_FF", "shortDesc": "Height rate feed forward", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.1, "group": "FW Longitudinal Control", "increment": 0.05, "longDesc": "Increase it to trim out speed and height offsets faster,\nwith the downside of possible overshoots and oscillations.", "max": 2.0, "min": 0.0, "name": "FW_T_I_GAIN_PIT", "shortDesc": "Integrator gain pitch", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.1, "group": "FW Longitudinal Control", "increment": 0.1, "max": 2.0, "min": 0.0, "name": "FW_T_PTCH_DAMP", "shortDesc": "Pitch damping gain", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 15.0, "group": "FW Longitudinal Control", "increment": 0.5, "longDesc": "Is used to compensate for the additional drag created by turning.\nIncrease this gain if the aircraft initially loses energy in turns\nand reduce if the aircraft initially gains energy in turns.", "max": 20.0, "min": 0.0, "name": "FW_T_RLL2THR", "shortDesc": "Roll -> Throttle feedforward", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "FW Longitudinal Control", "increment": 0.01, "max": 3.0, "min": 0.5, "name": "FW_T_SEB_R_FF", "shortDesc": "Specific total energy balance rate feedforward gain", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 5.0, "group": "FW Longitudinal Control", "increment": 0.5, "max": 15.0, "min": 1.0, "name": "FW_T_SINK_MAX", "shortDesc": "Maximum descent rate", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.2, "group": "FW Longitudinal Control", "increment": 0.1, "longDesc": "For the airspeed filter in TECS.", "max": 10.0, "min": 0.01, "name": "FW_T_SPD_DEV_STD", "shortDesc": "Airspeed rate measurement standard deviation", "type": "Float", "units": "m/s^2"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.2, "group": "FW Longitudinal Control", "increment": 0.1, "longDesc": "This is defining the noise in the airspeed rate for the constant airspeed rate model\nof the TECS airspeed filter.", "max": 10.0, "min": 0.01, "name": "FW_T_SPD_PRC_STD", "shortDesc": "Process noise standard deviation for the airspeed rate", "type": "Float", "units": "m/s^2"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.07, "group": "FW Longitudinal Control", "increment": 0.1, "longDesc": "For the airspeed filter in TECS.", "max": 10.0, "min": 0.01, "name": "FW_T_SPD_STD", "shortDesc": "Airspeed measurement standard deviation", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.4, "group": "FW Longitudinal Control", "increment": 0.01, "longDesc": "This filter is applied to the specific total energy rate used for throttle damping.", "max": 2.0, "min": 0.0, "name": "FW_T_STE_R_TC", "shortDesc": "Specific total energy rate first order filter time constant", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 5.0, "group": "FW Longitudinal Control", "increment": 0.5, "min": 2.0, "name": "FW_T_TAS_TC", "shortDesc": "True airspeed error time constant", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.05, "group": "FW Longitudinal Control", "increment": 0.01, "longDesc": "This is the damping gain for the throttle demand loop.", "max": 1.0, "min": 0.0, "name": "FW_T_THR_DAMPING", "shortDesc": "Throttle damping factor", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.02, "group": "FW Longitudinal Control", "increment": 0.005, "longDesc": "Increase it to trim out speed and height offsets faster,\nwith the downside of possible overshoots and oscillations.", "max": 1.0, "min": 0.0, "name": "FW_T_THR_INTEG", "shortDesc": "Integrator gain throttle", "type": "Float"}, {"category": "Standard", "decimalPlaces": 0, "default": -1.0, "group": "FW Longitudinal Control", "increment": 1.0, "longDesc": "Height above ground threshold below which tighter altitude\ntracking gets enabled (see FW_LND_THRTC_SC). Below this height, TECS smoothly\n(1 sec / sec) transitions the altitude tracking time constant from FW_T_ALT_TC\nto FW_LND_THRTC_SC*FW_T_ALT_TC.\n-1 to disable.", "min": -1.0, "name": "FW_T_THR_LOW_HGT", "shortDesc": "Low-height threshold for tighter altitude tracking", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 1, "default": 7.0, "group": "FW Longitudinal Control", "increment": 0.5, "longDesc": "This is the maximum vertical acceleration\neither up or down that the controller will use to correct speed\nor height errors.", "max": 10.0, "min": 1.0, "name": "FW_T_VERT_ACC", "shortDesc": "Maximum vertical acceleration", "type": "Float", "units": "m/s^2"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "FW Longitudinal Control", "increment": 0.01, "longDesc": "Multiplying this factor with the current absolute wind estimate gives the airspeed offset\nadded to the minimum airspeed setpoint limit. This helps to make the\nsystem more robust against disturbances (turbulence) in high wind.", "min": 0.0, "name": "FW_WIND_ARSP_SC", "shortDesc": "Wind-based airspeed scaling factor", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.7, "group": "FW NPFG Control", "increment": 0.01, "longDesc": "Damping ratio of NPFG control law.", "max": 1.0, "min": 0.1, "name": "NPFG_DAMPING", "shortDesc": "NPFG damping ratio", "type": "Float"}, {"category": "Standard", "default": 1, "group": "FW NPFG Control", "longDesc": "Avoids limit cycling from a too aggressively tuned period/damping combination.\nIf false, also disables upper bound NPFG_PERIOD_UB.", "name": "NPFG_LB_PERIOD", "shortDesc": "Enable automatic lower bound on the NPFG period", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 1, "default": 10.0, "group": "FW NPFG Control", "increment": 0.1, "longDesc": "Period of NPFG control law.", "max": 100.0, "min": 1.0, "name": "NPFG_PERIOD", "shortDesc": "NPFG period", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 1, "default": 1.5, "group": "FW NPFG Control", "increment": 0.1, "longDesc": "Multiplied by period for conservative minimum period bounding (when period lower\nbounding is enabled). 1.0 bounds at marginal stability.", "max": 10.0, "min": 1.0, "name": "NPFG_PERIOD_SF", "shortDesc": "Period safety factor", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.5, "group": "FW NPFG Control", "increment": 0.05, "longDesc": "Time constant of roll controller command / response, modeled as first order delay.\nUsed to determine lower period bound. Setting zero disables automatic period bounding.", "max": 2.0, "min": 0.0, "name": "NPFG_ROLL_TC", "shortDesc": "Roll time constant", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.32, "group": "FW NPFG Control", "increment": 0.01, "longDesc": "Multiplied by the track error boundary to determine when the aircraft switches\nto the next waypoint and/or path segment. Should be less than 1.", "max": 1.0, "min": 0.1, "name": "NPFG_SW_DST_MLT", "shortDesc": "NPFG switch distance multiplier", "type": "Float"}, {"category": "Standard", "default": 1, "group": "FW NPFG Control", "longDesc": "Adapts period to maintain track keeping in variable winds and path curvature.", "name": "NPFG_UB_PERIOD", "shortDesc": "Enable automatic upper bound on the NPFG period", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "FW Performance", "increment": 0.01, "longDesc": "Factor applied to the minimum and stall airspeed when flaps are fully deployed.", "max": 1.0, "min": 0.5, "name": "FW_AIRSPD_FLP_SC", "shortDesc": "Airspeed scale with full flaps", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 20.0, "group": "FW Performance", "increment": 0.5, "longDesc": "The maximal airspeed (calibrated airspeed) the user is able to command.", "min": 0.5, "name": "FW_AIRSPD_MAX", "shortDesc": "Maximum Airspeed (CAS)", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 10.0, "group": "FW Performance", "increment": 0.5, "longDesc": "The minimal airspeed (calibrated airspeed) the user is able to command.\nFurther, if the airspeed falls below this value, the TECS controller will try to\nincrease airspeed more aggressively.\nHas to be set according to the vehicle's stall speed (which should be set in FW_AIRSPD_STALL),\nwith some margin between the stall speed and minimum airspeed.\nThis value corresponds to the desired minimum speed with the default load factor (level flight, default weight),\nand is automatically adpated to the current load factor (calculated from roll setpoint and WEIGHT_GROSS/WEIGHT_BASE).", "min": 0.5, "name": "FW_AIRSPD_MIN", "shortDesc": "Minimum Airspeed (CAS)", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 7.0, "group": "FW Performance", "increment": 0.5, "longDesc": "The stall airspeed (calibrated airspeed) of the vehicle.\nIt is used for airspeed sensor failure detection and for the control\nsurface scaling airspeed limits.", "min": 0.5, "name": "FW_AIRSPD_STALL", "shortDesc": "Stall Airspeed (CAS)", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 15.0, "group": "FW Performance", "increment": 0.5, "longDesc": "The trim CAS (calibrated airspeed) of the vehicle. If an airspeed controller is active,\nthis is the default airspeed setpoint that the controller will try to achieve.\nThis value corresponds to the trim airspeed with the default load factor (level flight, default weight).", "min": 0.5, "name": "FW_AIRSPD_TRIM", "shortDesc": "Trim (Cruise) Airspeed", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 0, "default": -1.0, "group": "FW Performance", "increment": 1.0, "longDesc": "Altitude in standard atmosphere at which the vehicle in normal configuration (WEIGHT_BASE) is still able to achieve a maximum climb rate of\n0.5m/s at maximum throttle (FW_THR_MAX). Used to compensate for air density in FW_T_CLMB_MAX.\nSet negative to disable.", "min": -1.0, "name": "FW_SERVICE_CEIL", "shortDesc": "Service ceiling", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "FW Performance", "increment": 0.01, "longDesc": "Required throttle (at sea level, standard atmosphere) for level flight at maximum airspeed FW_AIRSPD_MAX\nSet to 0 to disable mapping of airspeed to trim throttle.", "max": 1.0, "min": 0.0, "name": "FW_THR_ASPD_MAX", "shortDesc": "Throttle at max airspeed", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "FW Performance", "increment": 0.01, "longDesc": "Required throttle (at sea level, standard atmosphere) for level flight at minimum airspeed FW_AIRSPD_MIN\nSet to 0 to disable mapping of airspeed to trim throttle below FW_AIRSPD_TRIM.", "max": 1.0, "min": 0.0, "name": "FW_THR_ASPD_MIN", "shortDesc": "Throttle at min airspeed", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.6, "group": "FW Performance", "increment": 0.01, "longDesc": "Required throttle (at sea level, standard atmosphere) for level flight at FW_AIRSPD_TRIM", "max": 1.0, "min": 0.0, "name": "FW_THR_TRIM", "shortDesc": "Trim throttle", "type": "Float", "units": "norm"}, {"category": "Standard", "decimalPlaces": 1, "default": 5.0, "group": "FW Performance", "increment": 0.5, "longDesc": "This is the maximum calibrated climb rate that the aircraft can achieve with\nthe throttle set to FW_THR_MAX and the airspeed set to the\ntrim value. For electric aircraft make sure this number can be\nachieved towards the end of flight when the battery voltage has reduced.", "min": 1.0, "name": "FW_T_CLMB_MAX", "shortDesc": "Maximum climb rate", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 2.0, "group": "FW Performance", "increment": 0.5, "longDesc": "This is the minimum calibrated sink rate of the aircraft with the throttle\nset to THR_MIN and flown at the same airspeed as used\nto measure FW_T_CLMB_MAX.", "min": 1.0, "name": "FW_T_SINK_MIN", "shortDesc": "Minimum descent rate", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": -1.0, "group": "FW Performance", "increment": 0.5, "longDesc": "This is the weight of the vehicle at which it's performance limits were derived. A zero or negative value\ndisables trim throttle and minimum airspeed compensation based on weight.", "name": "WEIGHT_BASE", "shortDesc": "Vehicle base weight", "type": "Float", "units": "kg"}, {"category": "Standard", "decimalPlaces": 1, "default": -1.0, "group": "FW Performance", "increment": 0.1, "longDesc": "This is the actual weight of the vehicle at any time. This value will differ from WEIGHT_BASE in case weight was added\nor removed from the base weight. Examples are the addition of payloads or larger batteries. A zero or negative value\ndisables trim throttle and minimum airspeed compensation based on weight.", "name": "WEIGHT_GROSS", "shortDesc": "Vehicle gross weight", "type": "Float", "units": "kg"}, {"category": "Standard", "default": 90.0, "group": "FW Rate Control", "max": 720.0, "min": 10.0, "name": "FW_ACRO_X_MAX", "shortDesc": "Acro body roll max rate setpoint", "type": "Float", "units": "deg"}, {"category": "Standard", "default": 0, "group": "FW Rate Control", "longDesc": "If this parameter is set to 1, the yaw rate controller is enabled in Fixed-wing Acro mode.\nOtherwise the pilot commands directly the yaw actuator.\nIt is disabled by default because an active yaw rate controller will fight against the\nnatural turn coordination of the plane.", "name": "FW_ACRO_YAW_EN", "shortDesc": "Enable yaw rate controller in Acro", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 90.0, "group": "FW Rate Control", "max": 720.0, "min": 10.0, "name": "FW_ACRO_Y_MAX", "shortDesc": "Acro body pitch max rate setpoint", "type": "Float", "units": "deg"}, {"category": "Standard", "default": 45.0, "group": "FW Rate Control", "max": 720.0, "min": 10.0, "name": "FW_ACRO_Z_MAX", "shortDesc": "Acro body yaw max rate setpoint", "type": "Float", "units": "deg"}, {"category": "Standard", "default": 1, "group": "FW Rate Control", "longDesc": "This enables a logic that automatically adjusts the output of the rate controller to take\ninto account the real torque produced by an aerodynamic control surface given\nthe current deviation from the trim airspeed (FW_AIRSPD_TRIM).\nEnable when using aerodynamic control surfaces (e.g.: plane)\nDisable when using rotor wings (e.g.: autogyro)", "name": "FW_ARSP_SCALE_EN", "shortDesc": "Enable airspeed scaling", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 0, "group": "FW Rate Control", "longDesc": "This compensates for voltage drop of the battery over time by attempting to\nnormalize performance across the operating range of the battery.", "name": "FW_BAT_SCALE_EN", "shortDesc": "Enable throttle scale by battery level", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "FW Rate Control", "increment": 0.01, "longDesc": "This increment is added to TRIM_PITCH when airspeed is FW_AIRSPD_MAX.", "max": 0.5, "min": -0.5, "name": "FW_DTRIM_P_VMAX", "shortDesc": "Pitch trim increment at maximum airspeed", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "FW Rate Control", "increment": 0.01, "longDesc": "This increment is added to TRIM_PITCH when airspeed is FW_AIRSPD_MIN.", "max": 0.5, "min": -0.5, "name": "FW_DTRIM_P_VMIN", "shortDesc": "Pitch trim increment at minimum airspeed", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "FW Rate Control", "increment": 0.01, "longDesc": "This increment is added to TRIM_ROLL when airspeed is FW_AIRSPD_MAX.", "max": 0.5, "min": -0.5, "name": "FW_DTRIM_R_VMAX", "shortDesc": "Roll trim increment at maximum airspeed", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "FW Rate Control", "increment": 0.01, "longDesc": "This increment is added to TRIM_ROLL when airspeed is FW_AIRSPD_MIN.", "max": 0.5, "min": -0.5, "name": "FW_DTRIM_R_VMIN", "shortDesc": "Roll trim increment at minimum airspeed", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "FW Rate Control", "increment": 0.01, "longDesc": "This increment is added to TRIM_YAW when airspeed is FW_AIRSPD_MAX.", "max": 0.5, "min": -0.5, "name": "FW_DTRIM_Y_VMAX", "shortDesc": "Yaw trim increment at maximum airspeed", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "FW Rate Control", "increment": 0.01, "longDesc": "This increment is added to TRIM_YAW when airspeed is FW_AIRSPD_MIN.", "max": 0.5, "min": -0.5, "name": "FW_DTRIM_Y_VMIN", "shortDesc": "Yaw trim increment at minimum airspeed", "type": "Float"}, {"category": "Standard", "default": 1, "group": "FW Rate Control", "name": "FW_GC_EN", "shortDesc": "Enable rate gain compression", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.3, "group": "FW Rate Control", "increment": 0.01, "longDesc": "The range of the compression gain is between this parameter and 1.0", "max": 1.0, "min": 0.0, "name": "FW_GC_GAIN_MIN", "shortDesc": "Compression gain lower limit", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "FW Rate Control", "increment": 0.01, "longDesc": "Scale factor applied to the desired pitch actuator command in full manual mode. This parameter allows\nto adjust the throws of the control surfaces.", "min": 0.0, "name": "FW_MAN_P_SC", "shortDesc": "Manual pitch scale", "type": "Float", "units": "norm"}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "FW Rate Control", "increment": 0.01, "longDesc": "Scale factor applied to the desired roll actuator command in full manual mode. This parameter allows\nto adjust the throws of the control surfaces.", "max": 1.0, "min": 0.0, "name": "FW_MAN_R_SC", "shortDesc": "Manual roll scale", "type": "Float", "units": "norm"}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "FW Rate Control", "increment": 0.01, "longDesc": "Scale factor applied to the desired yaw actuator command in full manual mode. This parameter allows\nto adjust the throws of the control surfaces.", "min": 0.0, "name": "FW_MAN_Y_SC", "shortDesc": "Manual yaw scale", "type": "Float", "units": "norm"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "FW Rate Control", "increment": 0.005, "longDesc": "Pitch rate differential gain.", "max": 10.0, "min": 0.0, "name": "FW_PR_D", "shortDesc": "Pitch rate derivative gain", "type": "Float", "units": "%/rad/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.5, "group": "FW Rate Control", "increment": 0.05, "longDesc": "Direct feed forward from rate setpoint to control surface output", "max": 10.0, "min": 0.0, "name": "FW_PR_FF", "shortDesc": "Pitch rate feed forward", "type": "Float", "units": "%/rad/s"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.1, "group": "FW Rate Control", "increment": 0.005, "max": 10.0, "min": 0.0, "name": "FW_PR_I", "shortDesc": "Pitch rate integrator gain", "type": "Float", "units": "%/rad"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.4, "group": "FW Rate Control", "increment": 0.05, "max": 1.0, "min": 0.0, "name": "FW_PR_IMAX", "shortDesc": "Pitch rate integrator limit", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.08, "group": "FW Rate Control", "increment": 0.005, "max": 10.0, "min": 0.0, "name": "FW_PR_P", "shortDesc": "Pitch rate proportional gain", "type": "Float", "units": "%/rad/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "FW Rate Control", "increment": 0.01, "longDesc": "This gain can be used to counteract the \"adverse yaw\" effect for fixed wings.\nWhen the plane enters a roll it will tend to yaw the nose out of the turn.\nThis gain enables the use of a yaw actuator to counteract this effect.", "min": 0.0, "name": "FW_RLL_TO_YAW_FF", "shortDesc": "Roll control to yaw control feedforward gain", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "FW Rate Control", "increment": 0.005, "max": 10.0, "min": 0.0, "name": "FW_RR_D", "shortDesc": "Roll rate derivative gain", "type": "Float", "units": "%/rad/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.5, "group": "FW Rate Control", "increment": 0.05, "longDesc": "Direct feed forward from rate setpoint to control surface output.", "max": 10.0, "min": 0.0, "name": "FW_RR_FF", "shortDesc": "Roll rate feed forward", "type": "Float", "units": "%/rad/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.1, "group": "FW Rate Control", "increment": 0.01, "max": 10.0, "min": 0.0, "name": "FW_RR_I", "shortDesc": "Roll rate integrator gain", "type": "Float", "units": "%/rad"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.2, "group": "FW Rate Control", "increment": 0.05, "max": 1.0, "min": 0.0, "name": "FW_RR_IMAX", "shortDesc": "Roll integrator limit", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.05, "group": "FW Rate Control", "increment": 0.005, "max": 10.0, "min": 0.0, "name": "FW_RR_P", "shortDesc": "Roll rate proportional gain", "type": "Float", "units": "%/rad/s"}, {"category": "Standard", "default": 0, "group": "FW Rate Control", "longDesc": "Chose source for manual setting of spoilers in manual flight modes.", "name": "FW_SPOILERS_MAN", "shortDesc": "Spoiler input in manual flight", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Flaps channel", "value": 1}, {"description": "Aux1", "value": 2}]}, {"category": "Standard", "default": 1, "group": "FW Rate Control", "longDesc": "If set to 1, the airspeed measurement data, if valid, is used in the following controllers:\n- Rate controller: output scaling\n- Attitude controller: coordinated turn controller\n- Position controller: airspeed setpoint tracking, takeoff logic\n- VTOL: transition logic", "name": "FW_USE_AIRSPD", "shortDesc": "Use airspeed for control", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "FW Rate Control", "increment": 0.005, "max": 10.0, "min": 0.0, "name": "FW_YR_D", "shortDesc": "Yaw rate derivative gain", "type": "Float", "units": "%/rad/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.3, "group": "FW Rate Control", "increment": 0.05, "longDesc": "Direct feed forward from rate setpoint to control surface output", "max": 10.0, "min": 0.0, "name": "FW_YR_FF", "shortDesc": "Yaw rate feed forward", "type": "Float", "units": "%/rad/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.1, "group": "FW Rate Control", "increment": 0.5, "max": 10.0, "min": 0.0, "name": "FW_YR_I", "shortDesc": "Yaw rate integrator gain", "type": "Float", "units": "%/rad"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.2, "group": "FW Rate Control", "increment": 0.05, "max": 1.0, "min": 0.0, "name": "FW_YR_IMAX", "shortDesc": "Yaw rate integrator limit", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.05, "group": "FW Rate Control", "increment": 0.005, "max": 10.0, "min": 0.0, "name": "FW_YR_P", "shortDesc": "Yaw rate proportional gain", "type": "Float", "units": "%/rad/s"}, {"category": "Standard", "default": 0, "group": "Failure Detector", "longDesc": "If enabled, failure detector will verify that for motors, a minimum amount of ESC current per throttle\nlevel is being consumed.\nOtherwise this indicates an motor failure.", "name": "FD_ACT_EN", "rebootRequired": true, "shortDesc": "Enable Actuator Failure check", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 2, "default": 10.0, "group": "Failure Detector", "increment": 1.0, "longDesc": "threshold = FD_ACT_MOT_C2T * thrust + FD_ACT_HIGH_OFF", "max": 30.0, "min": 0.0, "name": "FD_ACT_HIGH_OFF", "shortDesc": "Overcurrent motor failure limit offset", "type": "Float", "units": "A"}, {"category": "Standard", "decimalPlaces": 2, "default": 10.0, "group": "Failure Detector", "increment": 1.0, "longDesc": "threshold = FD_ACT_MOT_C2T * thrust - FD_ACT_LOW_OFF", "max": 30.0, "min": 0.0, "name": "FD_ACT_LOW_OFF", "shortDesc": "Undercurrent motor failure limit offset", "type": "Float", "units": "A"}, {"category": "Standard", "decimalPlaces": 2, "default": 35.0, "group": "Failure Detector", "increment": 1.0, "longDesc": "Determines the slope between expected steady state current and linearized, normalized thrust command.\nE.g. FD_ACT_MOT_C2T A represents the expected steady state current at 100%.\nFD_ACT_LOW_OFF and FD_ACT_HIGH_OFF offset the threshold from that slope.", "max": 50.0, "min": 0.0, "name": "FD_ACT_MOT_C2T", "shortDesc": "Motor Failure Current/Throttle Scale", "type": "Float", "units": "A/%"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.2, "group": "Failure Detector", "increment": 0.01, "longDesc": "Failure detection per motor only triggers above this thrust value.\nSet to 1 to disable the detection.", "max": 1.0, "min": 0.0, "name": "FD_ACT_MOT_THR", "shortDesc": "Motor Failure Thrust Threshold", "type": "Float", "units": "norm"}, {"category": "Standard", "default": 1000, "group": "Failure Detector", "increment": 100, "longDesc": "Motor failure only triggers after current thresholds are exceeded for this time.", "max": 10000, "min": 10, "name": "FD_ACT_MOT_TOUT", "shortDesc": "Motor Failure Hysteresis Time", "type": "Int32", "units": "ms"}, {"category": "Standard", "default": 1, "group": "Failure Detector", "longDesc": "If enabled, failure detector will verify that all the ESCs have successfully armed when the vehicle has transitioned to the armed state.\nTimeout for receiving an acknowledgement from the ESCs is 0.3s, if no feedback is received the failure detector will auto disarm the vehicle.", "name": "FD_ESCS_EN", "shortDesc": "Enable checks on ESCs that report their arming state", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 0, "group": "Failure Detector", "longDesc": "Enabled on either AUX5 or MAIN5 depending on board.\nExternal ATS is required by ASTM F3322-18.", "name": "FD_EXT_ATS_EN", "rebootRequired": true, "shortDesc": "Enable PWM input on for engaging failsafe from an external automatic trigger system (ATS)", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 2, "default": 1900, "group": "Failure Detector", "longDesc": "External ATS is required by ASTM F3322-18.", "name": "FD_EXT_ATS_TRIG", "shortDesc": "The PWM threshold from external automatic trigger system for engaging failsafe", "type": "Int32", "units": "us"}, {"category": "Standard", "default": 60, "group": "Failure Detector", "longDesc": "Maximum pitch angle before FailureDetector triggers the attitude_failure flag.\nThe flag triggers flight termination (if @CBRK_FLIGHTTERM = 0),\nwhich sets outputs to their failsafe values.\nOn takeoff the flag triggers lockdown (irrespective of @CBRK_FLIGHTTERM),\nwhich disarms motors but does not set outputs to failsafe values.\nSetting this parameter to 0 disables the check", "max": 180, "min": 0, "name": "FD_FAIL_P", "shortDesc": "FailureDetector Max Pitch", "type": "Int32", "units": "deg"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.3, "group": "Failure Detector", "longDesc": "Seconds (decimal) that pitch has to exceed FD_FAIL_P before being considered as a failure.", "max": 5.0, "min": 0.02, "name": "FD_FAIL_P_TTRI", "shortDesc": "Pitch failure trigger time", "type": "Float", "units": "s"}, {"category": "Standard", "default": 60, "group": "Failure Detector", "longDesc": "Maximum roll angle before FailureDetector triggers the attitude_failure flag.\nThe flag triggers flight termination (if @CBRK_FLIGHTTERM = 0),\nwhich sets outputs to their failsafe values.\nOn takeoff the flag triggers lockdown (irrespective of @CBRK_FLIGHTTERM),\nwhich disarms motors but does not set outputs to failsafe values.\nSetting this parameter to 0 disables the check", "max": 180, "min": 0, "name": "FD_FAIL_R", "shortDesc": "FailureDetector Max Roll", "type": "Int32", "units": "deg"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.3, "group": "Failure Detector", "longDesc": "Seconds (decimal) that roll has to exceed FD_FAIL_R before being considered as a failure.", "max": 5.0, "min": 0.02, "name": "FD_FAIL_R_TTRI", "shortDesc": "Roll failure trigger time", "type": "Float", "units": "s"}, {"category": "Standard", "default": 30, "group": "Failure Detector", "increment": 1, "longDesc": "Value at which the imbalanced propeller metric (based on horizontal and\nvertical acceleration variance) triggers a failure\nSetting this value to 0 disables the feature.", "max": 1000, "min": 0, "name": "FD_IMB_PROP_THR", "shortDesc": "Imbalanced propeller check threshold", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 1, "default": 1000.0, "group": "Flight Task Orbit", "increment": 0.5, "max": 10000.0, "min": 1.0, "name": "MC_ORBIT_RAD_MAX", "shortDesc": "Maximum radius of orbit", "type": "Float", "units": "m"}, {"category": "Standard", "default": 0, "group": "Flight Task Orbit", "name": "MC_ORBIT_YAW_MOD", "shortDesc": "Yaw behaviour during orbit flight", "type": "Int32", "values": [{"description": "Front to Circle Center", "value": 0}, {"description": "Hold Initial Heading", "value": 1}, {"description": "Uncontrolled", "value": 2}, {"description": "Hold Front Tangent to Circle", "value": 3}, {"description": "Manually (yaw stick) Controlled", "value": 4}]}, {"category": "Standard", "default": 0, "group": "Follow target", "longDesc": "Maintain altitude or track target's altitude. When maintaining the altitude,\nthe drone can crash into terrain when the target moves uphill. When tracking\nthe target's altitude, the follow altitude FLW_TGT_HT should be high enough\nto prevent terrain collisions due to GPS inaccuracies of the target.", "name": "FLW_TGT_ALT_M", "shortDesc": "Altitude control mode", "type": "Int32", "values": [{"description": "2D Tracking: Maintain constant altitude relative to home and track XY position only", "value": 0}, {"description": "2D + Terrain: Maintain constant altitude relative to terrain below and track XY position", "value": 1}, {"description": "3D Tracking: Track target's altitude (be aware that GPS altitude bias usually makes this useless)", "value": 2}]}, {"category": "Standard", "default": 8.0, "group": "Follow target", "longDesc": "The distance in meters to follow the target at", "min": 1.0, "name": "FLW_TGT_DST", "shortDesc": "Distance to follow target from", "type": "Float", "units": "m"}, {"category": "Standard", "default": 180.0, "group": "Follow target", "longDesc": "Angle to follow the target from. 0.0 Equals straight in front of the target's\ncourse (direction of motion) and the angle increases in clockwise direction,\nmeaning Right-side would be 90.0 degrees while Left-side is -90.0 degrees\nNote: When the user force sets the angle out of the min/max range, it will be\nwrapped (e.g. 480 -> 120) in the range to gracefully handle the out of range.", "max": 180.0, "min": -180.0, "name": "FLW_TGT_FA", "shortDesc": "Follow Angle setting in degrees", "type": "Float"}, {"category": "Standard", "default": 8.0, "group": "Follow target", "longDesc": "Following height above the target", "min": 8.0, "name": "FLW_TGT_HT", "shortDesc": "Follow target height", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 1, "default": 5.0, "group": "Follow target", "longDesc": "This is the maximum tangential velocity the drone will circle around the target whenever\nan orbit angle setpoint changes. Higher value means more aggressive follow behavior.", "max": 20.0, "min": 0.0, "name": "FLW_TGT_MAX_VEL", "shortDesc": "Maximum tangential velocity setting for generating the follow orbit trajectory", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.1, "group": "Follow target", "longDesc": "lower values increase the responsiveness to changing position, but also ignore less noise", "max": 1.0, "min": 0.0, "name": "FLW_TGT_RS", "shortDesc": "Responsiveness to target movement in Target Estimator", "type": "Float"}, {"bitmask": [{"description": "GPS (with QZSS)", "index": 0}, {"description": "SBAS", "index": 1}, {"description": "Galileo", "index": 2}, {"description": "BeiDou", "index": 3}, {"description": "GLONASS", "index": 4}, {"description": "NAVIC", "index": 5}], "category": "Standard", "default": 0, "group": "GPS", "longDesc": "This integer bitmask controls the set of GNSS systems used by the receiver. Check your\nreceiver's documentation on how many systems are supported to be used in parallel.\nCurrently this functionality is just implemented for u-blox receivers.\nWhen no bits are set, the receiver's default configuration should be used.\nSet bits true to enable:\n0 : Use GPS (with QZSS)\n1 : Use SBAS (multiple GPS augmentation systems)\n2 : Use Galileo\n3 : Use BeiDou\n4 : Use GLONASS\n5 : Use NAVIC", "max": 63, "min": 0, "name": "GPS_1_GNSS", "rebootRequired": true, "shortDesc": "GNSS Systems for Primary GPS (integer bitmask)", "type": "Int32"}, {"category": "Standard", "default": 1, "group": "GPS", "longDesc": "Select the GPS protocol over serial.\nAuto-detection will probe all protocols, and thus is a bit slower.", "max": 7, "min": 0, "name": "GPS_1_PROTOCOL", "rebootRequired": true, "shortDesc": "Protocol for Main GPS", "type": "Int32", "values": [{"description": "Auto detect", "value": 0}, {"description": "u-blox", "value": 1}, {"description": "MTK", "value": 2}, {"description": "Ashtech / Trimble", "value": 3}, {"description": "Emlid Reach", "value": 4}, {"description": "Femtomes", "value": 5}, {"description": "NMEA (generic)", "value": 6}]}, {"bitmask": [{"description": "GPS (with QZSS)", "index": 0}, {"description": "SBAS", "index": 1}, {"description": "Galileo", "index": 2}, {"description": "BeiDou", "index": 3}, {"description": "GLONASS", "index": 4}, {"description": "NAVIC", "index": 5}], "category": "Standard", "default": 0, "group": "GPS", "longDesc": "This integer bitmask controls the set of GNSS systems used by the receiver. Check your\nreceiver's documentation on how many systems are supported to be used in parallel.\nCurrently this functionality is just implemented for u-blox receivers.\nWhen no bits are set, the receiver's default configuration should be used.\nSet bits true to enable:\n0 : Use GPS (with QZSS)\n1 : Use SBAS (multiple GPS augmentation systems)\n2 : Use Galileo\n3 : Use BeiDou\n4 : Use GLONASS\n5 : Use NAVIC", "max": 63, "min": 0, "name": "GPS_2_GNSS", "rebootRequired": true, "shortDesc": "GNSS Systems for Secondary GPS (integer bitmask)", "type": "Int32"}, {"category": "Standard", "default": 1, "group": "GPS", "longDesc": "Select the GPS protocol over serial.\nAuto-detection will probe all protocols, and thus is a bit slower.", "max": 6, "min": 0, "name": "GPS_2_PROTOCOL", "rebootRequired": true, "shortDesc": "Protocol for Secondary GPS", "type": "Int32", "values": [{"description": "Auto detect", "value": 0}, {"description": "u-blox", "value": 1}, {"description": "MTK", "value": 2}, {"description": "Ashtech / Trimble", "value": 3}, {"description": "Emlid Reach", "value": 4}, {"description": "Femtomes", "value": 5}, {"description": "NMEA (generic)", "value": 6}]}, {"category": "Standard", "default": 0, "group": "GPS", "longDesc": "Some UBX modules have a FLASH that allows to store persistent configuration that will be loaded on start.\nPX4 does override all configuration parameters it needs in RAM, which takes precedence over the values in FLASH.\nHowever, configuration parameters that are not overriden by PX4 can still cause unexpected problems during flight.\nTo avoid these kind of problems a clean config can be reached by wiping the FLASH on boot.\nNote: Currently only supported on UBX.", "name": "GPS_CFG_WIPE", "rebootRequired": true, "shortDesc": "Wipes the flash config of UBX modules", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 0, "group": "GPS", "longDesc": "If this is set to 1, all GPS communication data will be published via uORB,\nand written to the log file as gps_dump message.\nIf this is set to 2, the main GPS is configured to output RTCM data,\nwhich is then logged as gps_dump and can be used for PPK.", "max": 2, "min": 0, "name": "GPS_DUMP_COMM", "shortDesc": "Log GPS communication data", "type": "Int32", "values": [{"description": "Disable", "value": 0}, {"description": "Full communication", "value": 1}, {"description": "RTCM output (PPK)", "value": 2}]}, {"category": "Standard", "default": 0, "group": "GPS", "longDesc": "Enable publication of satellite info (ORB_ID(satellite_info)) if possible.\nNot available on MTK.", "name": "GPS_SAT_INFO", "rebootRequired": true, "shortDesc": "Enable sat info (if available)", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 230400, "group": "GPS", "longDesc": "Select a baudrate for the F9P's UART2 port.\nIn GPS_UBX_MODE 1, 2, and 3, the F9P's UART2 port is configured to send/receive RTCM corrections.\nSet this to 57600 if you want to attach a telemetry radio on UART2.", "min": 0, "name": "GPS_UBX_BAUD2", "rebootRequired": true, "shortDesc": "u-blox F9P UART2 Baudrate", "type": "Int32", "units": "B/s"}, {"bitmask": [{"description": "Enable I2C input protocol UBX", "index": 0}, {"description": "Enable I2C input protocol NMEA", "index": 1}, {"description": "Enable I2C input protocol RTCM3X", "index": 2}, {"description": "Enable I2C output protocol UBX", "index": 3}, {"description": "Enable I2C output protocol NMEA", "index": 4}, {"description": "Enable I2C output protocol RTCM3X", "index": 5}], "category": "Standard", "default": 0, "group": "GPS", "max": 32, "min": 0, "name": "GPS_UBX_CFG_INTF", "rebootRequired": true, "shortDesc": "u-blox protocol configuration for interfaces", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "GPS", "longDesc": "When set to 0 (default), default DGNSS timeout set by u-blox will be used.", "max": 255, "min": 0, "name": "GPS_UBX_DGNSS_TO", "rebootRequired": true, "shortDesc": "u-blox GPS DGNSS timeout", "type": "Int32", "units": "s"}, {"category": "Standard", "default": 7, "group": "GPS", "longDesc": "u-blox receivers support different dynamic platform models to adjust the navigation engine to\nthe expected application environment.", "max": 9, "min": 0, "name": "GPS_UBX_DYNMODEL", "rebootRequired": true, "shortDesc": "u-blox GPS dynamic platform model", "type": "Int32", "values": [{"description": "stationary", "value": 2}, {"description": "automotive", "value": 4}, {"description": "airborne with <1g acceleration", "value": 6}, {"description": "airborne with <2g acceleration", "value": 7}, {"description": "airborne with <4g acceleration", "value": 8}]}, {"category": "Standard", "default": 1, "group": "GPS", "longDesc": "Enables or disables the high sensitivity mode for the u-blox jamming detection\n(CFG-SEC-JAMDET_SENSITIVITY_HI). When enabled, the receiver uses a\nmore sensitive algorithm to detect jamming. Disabling this may reduce false\npositives in electrically noisy environments.", "name": "GPS_UBX_JAM_DET", "rebootRequired": true, "shortDesc": "u-blox GPS jamming detection high sensitivity mode", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 0, "group": "GPS", "longDesc": "When set to 0 (default), default minimum satellite signal level set by u-blox wll be used.", "max": 255, "min": 0, "name": "GPS_UBX_MIN_CNO", "rebootRequired": true, "shortDesc": "u-blox GPS minimum satellite signal level for navigation", "type": "Int32", "units": "dBHz"}, {"category": "Standard", "default": 0, "group": "GPS", "longDesc": "When set to 0 (default), default minimum elevation set by u-blox will be used.", "max": 127, "min": 0, "name": "GPS_UBX_MIN_ELEV", "rebootRequired": true, "shortDesc": "u-blox GPS minimum elevation for a GNSS satellite to be used in navigation", "type": "Int32", "units": "deg"}, {"category": "Standard", "default": 0, "group": "GPS", "longDesc": "Select the u-blox configuration setup. Most setups will use the default, including RTK and\ndual GPS without heading.\nIf rover has RTCM corrections from a static base (or other static correction source) coming in on UART2, then select Mode 5.\nThe Heading mode requires 2 F9P devices to be attached. The main GPS will act as rover and output\nheading information, whereas the secondary will act as moving base.\nModes 1 and 2 require each F9P UART1 to be connected to the Autopilot. In addition, UART2 on the\nF9P units are connected to each other.\nModes 3 and 4 only require UART1 on each F9P connected to the Autopilot or Can Node. UART RX DMA is required.\nRTK is still possible with this setup.\nMode 6 is intended for use with a ground control station (not necessarily an RTK correction base).", "max": 1, "min": 0, "name": "GPS_UBX_MODE", "rebootRequired": true, "shortDesc": "u-blox GPS Mode", "type": "Int32", "values": [{"description": "Default", "value": 0}, {"description": "Heading (Rover With Moving Base UART1 Connected To Autopilot, UART2 Connected To Moving Base)", "value": 1}, {"description": "Moving Base (UART1 Connected To Autopilot, UART2 Connected To Rover)", "value": 2}, {"description": "Heading (Rover With Moving Base UART1 Connected to Autopilot Or Can Node At 921600)", "value": 3}, {"description": "Moving Base (Moving Base UART1 Connected to Autopilot Or Can Node At 921600)", "value": 4}, {"description": "Rover with Static Base on UART2 (similar to Default, except coming in on UART2)", "value": 5}, {"description": "Ground Control Station (UART2 outputs NMEA)", "value": 6}]}, {"category": "Standard", "default": 0, "group": "GPS", "name": "GPS_UBX_PPK", "rebootRequired": true, "shortDesc": "Enable MSM7 message output for PPK workflow", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 0, "group": "GPS", "longDesc": "Configure the output rate of u-blox GPS receivers (protocol v27+).\nWhen set to 0, automatic rate selection is used based on the receiver model.\nDefault rates: M9N=8Hz, F9P L1L2=5Hz, F9P L1L5=5Hz, Others=10Hz.\nNote: Higher rates reduce satellite count (e.g., >8Hz limits to 16 SVs on M9N).\nMax rates vary by model and RTK mode: F9P L1L2=5-7Hz, F9P L1L5=7-8Hz, X20=25Hz.\nHigh rates at 115200 baud may cause dropouts.", "max": 25, "min": 0, "name": "GPS_UBX_RATE", "rebootRequired": true, "shortDesc": "u-blox GPS output rate", "type": "Int32", "units": "Hz"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "GPS", "longDesc": "Heading offset angle for dual antenna GPS setups that support heading estimation.\nSet this to 0 if the antennas are parallel to the forward-facing direction\nof the vehicle and the rover (or Unicore primary) antenna is in front.\nThe offset angle increases clockwise.\nSet this to 90 if the rover (or Unicore primary, or Septentrio Mosaic Aux)\nantenna is placed on the right side of the vehicle and the moving base\nantenna is on the left side.\n(Note: the Unicore primary antenna is the one connected on the right as seen\nfrom the top).", "max": 360.0, "min": 0.0, "name": "GPS_YAW_OFFSET", "rebootRequired": true, "shortDesc": "Heading/Yaw offset for dual antenna GPS", "type": "Float", "units": "deg"}, {"category": "Standard", "default": 2, "group": "Geofence", "longDesc": "Note: Setting this value to 4 enables flight termination,\nwhich will kill the vehicle on violation of the fence.", "max": 5, "min": 0, "name": "GF_ACTION", "shortDesc": "Geofence violation action", "type": "Int32", "values": [{"description": "None", "value": 0}, {"description": "Warning", "value": 1}, {"description": "Hold mode", "value": 2}, {"description": "Return mode", "value": 3}, {"description": "Terminate", "value": 4}, {"description": "Land mode", "value": 5}]}, {"category": "Standard", "default": 0.0, "group": "Geofence", "increment": 1.0, "longDesc": "Maximum horizontal distance in meters the vehicle can be from Home before triggering a geofence action.\nDisabled if 0.", "max": 10000.0, "min": 0.0, "name": "GF_MAX_HOR_DIST", "shortDesc": "Max horizontal distance from Home", "type": "Float", "units": "m"}, {"category": "Standard", "default": 0.0, "group": "Geofence", "increment": 1.0, "longDesc": "Maximum vertical distance in meters the vehicle can be from Home before triggering a geofence action.\nDisabled if 0.", "max": 10000.0, "min": 0.0, "name": "GF_MAX_VER_DIST", "shortDesc": "Max vertical distance from Home", "type": "Float", "units": "m"}, {"category": "Standard", "default": 0, "group": "Geofence", "longDesc": "WARNING: This experimental feature may cause flyaways. Use at your own risk.\nPredict the motion of the vehicle and trigger the breach if it is determined that the current trajectory\nwould result in a breach happening before the vehicle can make evasive maneuvers.\nThe vehicle is then re-routed to a safe hold position (stop for multirotor, loiter for fixed wing).", "name": "GF_PREDICT", "shortDesc": "[EXPERIMENTAL] Use Pre-emptive geofence triggering", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 0, "group": "Geofence", "longDesc": "Select which position source should be used. Selecting GPS instead of global position makes sure that there is\nno dependence on the position estimator\n0 = global position, 1 = GPS", "max": 1, "min": 0, "name": "GF_SOURCE", "shortDesc": "Geofence source", "type": "Int32", "values": [{"description": "GPOS", "value": 0}, {"description": "GPS", "value": 1}]}, {"category": "Standard", "default": 0, "group": "Geometry", "longDesc": "Defines which mixer implementation to use.\nSome are generic, while others are specifically fit to a certain vehicle with a fixed set of actuators.\n'Custom' should only be used if noting else can be used.", "name": "CA_AIRFRAME", "shortDesc": "Airframe selection", "type": "Int32", "values": [{"description": "Multirotor", "value": 0}, {"description": "Fixed-wing", "value": 1}, {"description": "Standard VTOL", "value": 2}, {"description": "Tiltrotor VTOL", "value": 3}, {"description": "Tailsitter VTOL", "value": 4}, {"description": "Rover (Ackermann)", "value": 5}, {"description": "Rover (Differential)", "value": 6}, {"description": "Motors (6DOF)", "value": 7}, {"description": "Multirotor with Tilt", "value": 8}, {"description": "Custom", "value": 9}, {"description": "Helicopter (tail ESC)", "value": 10}, {"description": "Helicopter (tail Servo)", "value": 11}, {"description": "Helicopter (Coaxial)", "value": 12}, {"description": "Rover (Mecanum)", "value": 13}, {"description": "Spacecraft 2D", "value": 14}, {"description": "Spacecraft 3D", "value": 15}]}, {"bitmask": [{"description": "Control Surface 1", "index": 0}, {"description": "Control Surface 2", "index": 1}, {"description": "Control Surface 3", "index": 2}, {"description": "Control Surface 4", "index": 3}, {"description": "Control Surface 5", "index": 4}, {"description": "Control Surface 6", "index": 5}, {"description": "Control Surface 7", "index": 6}, {"description": "Control Surface 8", "index": 7}], "category": "Standard", "default": 0, "group": "Geometry", "longDesc": "If actuator launch lock is enabled, this surface is kept at the disarmed value.", "max": 255, "min": 0, "name": "CA_CS_LAUN_LK", "shortDesc": "Control surface launch lock enabled", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "Geometry", "longDesc": "This is used to specify how to handle motor failures\nreported by failure detector.", "name": "CA_FAILURE_MODE", "shortDesc": "Motor failure handling mode", "type": "Int32", "values": [{"description": "Ignore", "value": 0}, {"description": "Remove first failed motor from effectiveness", "value": 1}]}, {"category": "Standard", "decimalPlaces": 3, "default": -0.05, "group": "Geometry", "increment": 0.1, "longDesc": "Defines the collective pitch at the interval position 0 for a given thrust setpoint.\nUse negative values if the swash plate needs to move down to provide upwards thrust.", "max": 1.0, "min": -1.0, "name": "CA_HELI_PITCH_C0", "shortDesc": "Collective pitch curve at position 0", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0725, "group": "Geometry", "increment": 0.1, "longDesc": "Defines the collective pitch at the interval position 1 for a given thrust setpoint.\nUse negative values if the swash plate needs to move down to provide upwards thrust.", "max": 1.0, "min": -1.0, "name": "CA_HELI_PITCH_C1", "shortDesc": "Collective pitch curve at position 1", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.2, "group": "Geometry", "increment": 0.1, "longDesc": "Defines the collective pitch at the interval position 2 for a given thrust setpoint.\nUse negative values if the swash plate needs to move down to provide upwards thrust.", "max": 1.0, "min": -1.0, "name": "CA_HELI_PITCH_C2", "shortDesc": "Collective pitch curve at position 2", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.325, "group": "Geometry", "increment": 0.1, "longDesc": "Defines the collective pitch at the interval position 3 for a given thrust setpoint.\nUse negative values if the swash plate needs to move down to provide upwards thrust.", "max": 1.0, "min": -1.0, "name": "CA_HELI_PITCH_C3", "shortDesc": "Collective pitch curve at position 3", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.45, "group": "Geometry", "increment": 0.1, "longDesc": "Defines the collective pitch at the interval position 4 for a given thrust setpoint.\nUse negative values if the swash plate needs to move down to provide upwards thrust.", "max": 1.0, "min": -1.0, "name": "CA_HELI_PITCH_C4", "shortDesc": "Collective pitch curve at position 4", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "Same definition as the proportional gain but for integral.", "max": 10.0, "min": 0.0, "name": "CA_HELI_RPM_I", "shortDesc": "Integral gain for rpm control", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "Ratio between rpm error devided by 1000 to how much normalized output gets added to correct for it.\nmotor_command = throttle_curve + CA_HELI_RPM_P * (rpm_setpoint - rpm_measurement) / 1000", "max": 10.0, "min": 0.0, "name": "CA_HELI_RPM_P", "shortDesc": "Proportional gain for rpm control", "type": "Float"}, {"category": "Standard", "decimalPlaces": 0, "default": 1500.0, "group": "Geometry", "increment": 1.0, "longDesc": "Requires rpm feedback for the controller.", "max": 10000.0, "min": 100.0, "name": "CA_HELI_RPM_SP", "shortDesc": "Setpoint for main rotor rpm", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 1.0, "group": "Geometry", "increment": 0.1, "longDesc": "Defines the output throttle at the interval position 0.", "max": 1.0, "min": 0.0, "name": "CA_HELI_THR_C0", "shortDesc": "Throttle curve at position 0", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 1.0, "group": "Geometry", "increment": 0.1, "longDesc": "Defines the output throttle at the interval position 1.", "max": 1.0, "min": 0.0, "name": "CA_HELI_THR_C1", "shortDesc": "Throttle curve at position 1", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 1.0, "group": "Geometry", "increment": 0.1, "longDesc": "Defines the output throttle at the interval position 2.", "max": 1.0, "min": 0.0, "name": "CA_HELI_THR_C2", "shortDesc": "Throttle curve at position 2", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 1.0, "group": "Geometry", "increment": 0.1, "longDesc": "Defines the output throttle at the interval position 3.", "max": 1.0, "min": 0.0, "name": "CA_HELI_THR_C3", "shortDesc": "Throttle curve at position 3", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 1.0, "group": "Geometry", "increment": 0.1, "longDesc": "Defines the output throttle at the interval position 4.", "max": 1.0, "min": 0.0, "name": "CA_HELI_THR_C4", "shortDesc": "Throttle curve at position 4", "type": "Float"}, {"category": "Standard", "default": 0, "group": "Geometry", "longDesc": "Default configuration is for a clockwise turning main rotor and\npositive thrust of the tail rotor is expected to rotate the vehicle clockwise.\nSet this parameter to true if the tail rotor provides thrust in counter-clockwise direction\nwhich is mostly the case when the main rotor turns counter-clockwise.", "name": "CA_HELI_YAW_CCW", "shortDesc": "Main rotor turns counter-clockwise", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "This allows to specify which collective pitch command results in the least amount of rotor drag.\nThis is used to increase the accuracy of the yaw drag torque compensation based on collective pitch\nby aligning the lowest rotor drag with zero compensation.\nFor symmetric profile blades this is the command that results in exactly 0\u00b0 collective blade angle.\nFor lift profile blades this is typically a command resulting in slightly negative collective blade angle.\ntail_output += CA_HELI_YAW_CP_S * abs(collective_pitch - CA_HELI_YAW_CP_O)", "max": 2.0, "min": -2.0, "name": "CA_HELI_YAW_CP_O", "shortDesc": "Offset for yaw compensation based on collective pitch", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "This allows to add a proportional factor of the collective pitch command to the yaw command.\nA negative value is needed when positive thrust of the tail rotor rotates the vehicle opposite to the main rotor turn direction.\ntail_output += CA_HELI_YAW_CP_S * abs(collective_pitch - CA_HELI_YAW_CP_O)", "max": 2.0, "min": -2.0, "name": "CA_HELI_YAW_CP_S", "shortDesc": "Scale for yaw compensation based on collective pitch", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "This allows to add a proportional factor of the throttle command to the yaw command.\nA negative value is needed when positive thrust of the tail rotor rotates the vehicle opposite to the main rotor turn direction.\ntail_output += CA_HELI_YAW_TH_S * throttle", "max": 2.0, "min": -2.0, "name": "CA_HELI_YAW_TH_S", "shortDesc": "Scale for yaw compensation based on throttle", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "Ice shedding prevents ice buildup in VTOL aircraft motors by\nperiodically spinning inactive rotors. When enabled (period\n> 0), every cycle lasts for the defined period and includes\na 2\u2011second spin at 0.01 motor output. If period <= 0, the\nfeature is disabled.", "min": 0.0, "name": "CA_ICE_PERIOD", "shortDesc": "Ice shedding cycle period", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "Used to linearize mechanical output of swashplate servos to avoid axis coupling and binding with 4 servo redundancy.\nThis requires a symmetric setup where the servo horn is exactly centered with a 0 command.\nSetting to zero disables feature.", "max": 75.0, "min": 0.0, "name": "CA_MAX_SVO_THROW", "shortDesc": "Throw angle of swashplate servo at maximum commands for linearization", "type": "Float", "units": "deg"}, {"category": "Standard", "default": 2, "group": "Geometry", "longDesc": "Selects the algorithm and desaturation method.\nIf set to Automatic, the selection is based on the airframe (CA_AIRFRAME).", "name": "CA_METHOD", "shortDesc": "Control allocation method", "type": "Int32", "values": [{"description": "Pseudo-inverse with output clipping", "value": 0}, {"description": "Pseudo-inverse with sequential desaturation technique", "value": 1}, {"description": "Automatic", "value": 2}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.01, "longDesc": "Forces the motor output signal to take at least the configured time (in seconds)\nto traverse its full range (normally [0, 1], or if reversible [-1, 1]).\nZero means that slew rate limiting is disabled.", "max": 10.0, "min": 0.0, "name": "CA_R0_SLEW", "shortDesc": "Motor 0 slew rate limit", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.01, "longDesc": "Forces the motor output signal to take at least the configured time (in seconds)\nto traverse its full range (normally [0, 1], or if reversible [-1, 1]).\nZero means that slew rate limiting is disabled.", "max": 10.0, "min": 0.0, "name": "CA_R10_SLEW", "shortDesc": "Motor 10 slew rate limit", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.01, "longDesc": "Forces the motor output signal to take at least the configured time (in seconds)\nto traverse its full range (normally [0, 1], or if reversible [-1, 1]).\nZero means that slew rate limiting is disabled.", "max": 10.0, "min": 0.0, "name": "CA_R11_SLEW", "shortDesc": "Motor 11 slew rate limit", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.01, "longDesc": "Forces the motor output signal to take at least the configured time (in seconds)\nto traverse its full range (normally [0, 1], or if reversible [-1, 1]).\nZero means that slew rate limiting is disabled.", "max": 10.0, "min": 0.0, "name": "CA_R1_SLEW", "shortDesc": "Motor 1 slew rate limit", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.01, "longDesc": "Forces the motor output signal to take at least the configured time (in seconds)\nto traverse its full range (normally [0, 1], or if reversible [-1, 1]).\nZero means that slew rate limiting is disabled.", "max": 10.0, "min": 0.0, "name": "CA_R2_SLEW", "shortDesc": "Motor 2 slew rate limit", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.01, "longDesc": "Forces the motor output signal to take at least the configured time (in seconds)\nto traverse its full range (normally [0, 1], or if reversible [-1, 1]).\nZero means that slew rate limiting is disabled.", "max": 10.0, "min": 0.0, "name": "CA_R3_SLEW", "shortDesc": "Motor 3 slew rate limit", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.01, "longDesc": "Forces the motor output signal to take at least the configured time (in seconds)\nto traverse its full range (normally [0, 1], or if reversible [-1, 1]).\nZero means that slew rate limiting is disabled.", "max": 10.0, "min": 0.0, "name": "CA_R4_SLEW", "shortDesc": "Motor 4 slew rate limit", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.01, "longDesc": "Forces the motor output signal to take at least the configured time (in seconds)\nto traverse its full range (normally [0, 1], or if reversible [-1, 1]).\nZero means that slew rate limiting is disabled.", "max": 10.0, "min": 0.0, "name": "CA_R5_SLEW", "shortDesc": "Motor 5 slew rate limit", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.01, "longDesc": "Forces the motor output signal to take at least the configured time (in seconds)\nto traverse its full range (normally [0, 1], or if reversible [-1, 1]).\nZero means that slew rate limiting is disabled.", "max": 10.0, "min": 0.0, "name": "CA_R6_SLEW", "shortDesc": "Motor 6 slew rate limit", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.01, "longDesc": "Forces the motor output signal to take at least the configured time (in seconds)\nto traverse its full range (normally [0, 1], or if reversible [-1, 1]).\nZero means that slew rate limiting is disabled.", "max": 10.0, "min": 0.0, "name": "CA_R7_SLEW", "shortDesc": "Motor 7 slew rate limit", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.01, "longDesc": "Forces the motor output signal to take at least the configured time (in seconds)\nto traverse its full range (normally [0, 1], or if reversible [-1, 1]).\nZero means that slew rate limiting is disabled.", "max": 10.0, "min": 0.0, "name": "CA_R8_SLEW", "shortDesc": "Motor 8 slew rate limit", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.01, "longDesc": "Forces the motor output signal to take at least the configured time (in seconds)\nto traverse its full range (normally [0, 1], or if reversible [-1, 1]).\nZero means that slew rate limiting is disabled.", "max": 10.0, "min": 0.0, "name": "CA_R9_SLEW", "shortDesc": "Motor 9 slew rate limit", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).", "max": 100.0, "min": -100.0, "name": "CA_ROTOR0_AX", "shortDesc": "Axis of rotor 0 thrust vector, X body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).", "max": 100.0, "min": -100.0, "name": "CA_ROTOR0_AY", "shortDesc": "Axis of rotor 0 thrust vector, Y body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": -1.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).", "max": 100.0, "min": -100.0, "name": "CA_ROTOR0_AZ", "shortDesc": "Axis of rotor 0 thrust vector, Z body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 6.5, "group": "Geometry", "increment": 1.0, "longDesc": "The thrust coefficient if defined as Thrust = CT * u^2,\nwhere u (with value between actuator minimum and maximum)\nis the output signal sent to the motor controller.", "max": 100.0, "min": 0.0, "name": "CA_ROTOR0_CT", "shortDesc": "Thrust coefficient of rotor 0", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.05, "group": "Geometry", "increment": 0.01, "longDesc": "The moment coefficient if defined as Torque = KM * Thrust.\nUse a positive value for a rotor with CCW rotation.\nUse a negative value for a rotor with CW rotation.", "max": 1.0, "min": -1.0, "name": "CA_ROTOR0_KM", "shortDesc": "Moment coefficient of rotor 0", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR0_PX", "shortDesc": "Position of rotor 0 along X body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR0_PY", "shortDesc": "Position of rotor 0 along Y body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR0_PZ", "shortDesc": "Position of rotor 0 along Z body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "default": 0, "group": "Geometry", "longDesc": "If not set to None, this motor is tilted by the configured tilt servo.", "name": "CA_ROTOR0_TILT", "shortDesc": "Rotor 0 tilt assignment", "type": "Int32", "values": [{"description": "None", "value": 0}, {"description": "Tilt 1", "value": 1}, {"description": "Tilt 2", "value": 2}, {"description": "Tilt 3", "value": 3}, {"description": "Tilt 4", "value": 4}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).", "max": 100.0, "min": -100.0, "name": "CA_ROTOR10_AX", "shortDesc": "Axis of rotor 10 thrust vector, X body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).", "max": 100.0, "min": -100.0, "name": "CA_ROTOR10_AY", "shortDesc": "Axis of rotor 10 thrust vector, Y body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": -1.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).", "max": 100.0, "min": -100.0, "name": "CA_ROTOR10_AZ", "shortDesc": "Axis of rotor 10 thrust vector, Z body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 6.5, "group": "Geometry", "increment": 1.0, "longDesc": "The thrust coefficient if defined as Thrust = CT * u^2,\nwhere u (with value between actuator minimum and maximum)\nis the output signal sent to the motor controller.", "max": 100.0, "min": 0.0, "name": "CA_ROTOR10_CT", "shortDesc": "Thrust coefficient of rotor 10", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.05, "group": "Geometry", "increment": 0.01, "longDesc": "The moment coefficient if defined as Torque = KM * Thrust.\nUse a positive value for a rotor with CCW rotation.\nUse a negative value for a rotor with CW rotation.", "max": 1.0, "min": -1.0, "name": "CA_ROTOR10_KM", "shortDesc": "Moment coefficient of rotor 10", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR10_PX", "shortDesc": "Position of rotor 10 along X body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR10_PY", "shortDesc": "Position of rotor 10 along Y body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR10_PZ", "shortDesc": "Position of rotor 10 along Z body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "default": 0, "group": "Geometry", "longDesc": "If not set to None, this motor is tilted by the configured tilt servo.", "name": "CA_ROTOR10_TILT", "shortDesc": "Rotor 10 tilt assignment", "type": "Int32", "values": [{"description": "None", "value": 0}, {"description": "Tilt 1", "value": 1}, {"description": "Tilt 2", "value": 2}, {"description": "Tilt 3", "value": 3}, {"description": "Tilt 4", "value": 4}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).", "max": 100.0, "min": -100.0, "name": "CA_ROTOR11_AX", "shortDesc": "Axis of rotor 11 thrust vector, X body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).", "max": 100.0, "min": -100.0, "name": "CA_ROTOR11_AY", "shortDesc": "Axis of rotor 11 thrust vector, Y body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": -1.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).", "max": 100.0, "min": -100.0, "name": "CA_ROTOR11_AZ", "shortDesc": "Axis of rotor 11 thrust vector, Z body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 6.5, "group": "Geometry", "increment": 1.0, "longDesc": "The thrust coefficient if defined as Thrust = CT * u^2,\nwhere u (with value between actuator minimum and maximum)\nis the output signal sent to the motor controller.", "max": 100.0, "min": 0.0, "name": "CA_ROTOR11_CT", "shortDesc": "Thrust coefficient of rotor 11", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.05, "group": "Geometry", "increment": 0.01, "longDesc": "The moment coefficient if defined as Torque = KM * Thrust.\nUse a positive value for a rotor with CCW rotation.\nUse a negative value for a rotor with CW rotation.", "max": 1.0, "min": -1.0, "name": "CA_ROTOR11_KM", "shortDesc": "Moment coefficient of rotor 11", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR11_PX", "shortDesc": "Position of rotor 11 along X body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR11_PY", "shortDesc": "Position of rotor 11 along Y body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR11_PZ", "shortDesc": "Position of rotor 11 along Z body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "default": 0, "group": "Geometry", "longDesc": "If not set to None, this motor is tilted by the configured tilt servo.", "name": "CA_ROTOR11_TILT", "shortDesc": "Rotor 11 tilt assignment", "type": "Int32", "values": [{"description": "None", "value": 0}, {"description": "Tilt 1", "value": 1}, {"description": "Tilt 2", "value": 2}, {"description": "Tilt 3", "value": 3}, {"description": "Tilt 4", "value": 4}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).", "max": 100.0, "min": -100.0, "name": "CA_ROTOR1_AX", "shortDesc": "Axis of rotor 1 thrust vector, X body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).", "max": 100.0, "min": -100.0, "name": "CA_ROTOR1_AY", "shortDesc": "Axis of rotor 1 thrust vector, Y body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": -1.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).", "max": 100.0, "min": -100.0, "name": "CA_ROTOR1_AZ", "shortDesc": "Axis of rotor 1 thrust vector, Z body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 6.5, "group": "Geometry", "increment": 1.0, "longDesc": "The thrust coefficient if defined as Thrust = CT * u^2,\nwhere u (with value between actuator minimum and maximum)\nis the output signal sent to the motor controller.", "max": 100.0, "min": 0.0, "name": "CA_ROTOR1_CT", "shortDesc": "Thrust coefficient of rotor 1", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.05, "group": "Geometry", "increment": 0.01, "longDesc": "The moment coefficient if defined as Torque = KM * Thrust.\nUse a positive value for a rotor with CCW rotation.\nUse a negative value for a rotor with CW rotation.", "max": 1.0, "min": -1.0, "name": "CA_ROTOR1_KM", "shortDesc": "Moment coefficient of rotor 1", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR1_PX", "shortDesc": "Position of rotor 1 along X body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR1_PY", "shortDesc": "Position of rotor 1 along Y body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR1_PZ", "shortDesc": "Position of rotor 1 along Z body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "default": 0, "group": "Geometry", "longDesc": "If not set to None, this motor is tilted by the configured tilt servo.", "name": "CA_ROTOR1_TILT", "shortDesc": "Rotor 1 tilt assignment", "type": "Int32", "values": [{"description": "None", "value": 0}, {"description": "Tilt 1", "value": 1}, {"description": "Tilt 2", "value": 2}, {"description": "Tilt 3", "value": 3}, {"description": "Tilt 4", "value": 4}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).", "max": 100.0, "min": -100.0, "name": "CA_ROTOR2_AX", "shortDesc": "Axis of rotor 2 thrust vector, X body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).", "max": 100.0, "min": -100.0, "name": "CA_ROTOR2_AY", "shortDesc": "Axis of rotor 2 thrust vector, Y body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": -1.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).", "max": 100.0, "min": -100.0, "name": "CA_ROTOR2_AZ", "shortDesc": "Axis of rotor 2 thrust vector, Z body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 6.5, "group": "Geometry", "increment": 1.0, "longDesc": "The thrust coefficient if defined as Thrust = CT * u^2,\nwhere u (with value between actuator minimum and maximum)\nis the output signal sent to the motor controller.", "max": 100.0, "min": 0.0, "name": "CA_ROTOR2_CT", "shortDesc": "Thrust coefficient of rotor 2", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.05, "group": "Geometry", "increment": 0.01, "longDesc": "The moment coefficient if defined as Torque = KM * Thrust.\nUse a positive value for a rotor with CCW rotation.\nUse a negative value for a rotor with CW rotation.", "max": 1.0, "min": -1.0, "name": "CA_ROTOR2_KM", "shortDesc": "Moment coefficient of rotor 2", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR2_PX", "shortDesc": "Position of rotor 2 along X body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR2_PY", "shortDesc": "Position of rotor 2 along Y body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR2_PZ", "shortDesc": "Position of rotor 2 along Z body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "default": 0, "group": "Geometry", "longDesc": "If not set to None, this motor is tilted by the configured tilt servo.", "name": "CA_ROTOR2_TILT", "shortDesc": "Rotor 2 tilt assignment", "type": "Int32", "values": [{"description": "None", "value": 0}, {"description": "Tilt 1", "value": 1}, {"description": "Tilt 2", "value": 2}, {"description": "Tilt 3", "value": 3}, {"description": "Tilt 4", "value": 4}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).", "max": 100.0, "min": -100.0, "name": "CA_ROTOR3_AX", "shortDesc": "Axis of rotor 3 thrust vector, X body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).", "max": 100.0, "min": -100.0, "name": "CA_ROTOR3_AY", "shortDesc": "Axis of rotor 3 thrust vector, Y body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": -1.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).", "max": 100.0, "min": -100.0, "name": "CA_ROTOR3_AZ", "shortDesc": "Axis of rotor 3 thrust vector, Z body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 6.5, "group": "Geometry", "increment": 1.0, "longDesc": "The thrust coefficient if defined as Thrust = CT * u^2,\nwhere u (with value between actuator minimum and maximum)\nis the output signal sent to the motor controller.", "max": 100.0, "min": 0.0, "name": "CA_ROTOR3_CT", "shortDesc": "Thrust coefficient of rotor 3", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.05, "group": "Geometry", "increment": 0.01, "longDesc": "The moment coefficient if defined as Torque = KM * Thrust.\nUse a positive value for a rotor with CCW rotation.\nUse a negative value for a rotor with CW rotation.", "max": 1.0, "min": -1.0, "name": "CA_ROTOR3_KM", "shortDesc": "Moment coefficient of rotor 3", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR3_PX", "shortDesc": "Position of rotor 3 along X body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR3_PY", "shortDesc": "Position of rotor 3 along Y body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR3_PZ", "shortDesc": "Position of rotor 3 along Z body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "default": 0, "group": "Geometry", "longDesc": "If not set to None, this motor is tilted by the configured tilt servo.", "name": "CA_ROTOR3_TILT", "shortDesc": "Rotor 3 tilt assignment", "type": "Int32", "values": [{"description": "None", "value": 0}, {"description": "Tilt 1", "value": 1}, {"description": "Tilt 2", "value": 2}, {"description": "Tilt 3", "value": 3}, {"description": "Tilt 4", "value": 4}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).", "max": 100.0, "min": -100.0, "name": "CA_ROTOR4_AX", "shortDesc": "Axis of rotor 4 thrust vector, X body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).", "max": 100.0, "min": -100.0, "name": "CA_ROTOR4_AY", "shortDesc": "Axis of rotor 4 thrust vector, Y body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": -1.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).", "max": 100.0, "min": -100.0, "name": "CA_ROTOR4_AZ", "shortDesc": "Axis of rotor 4 thrust vector, Z body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 6.5, "group": "Geometry", "increment": 1.0, "longDesc": "The thrust coefficient if defined as Thrust = CT * u^2,\nwhere u (with value between actuator minimum and maximum)\nis the output signal sent to the motor controller.", "max": 100.0, "min": 0.0, "name": "CA_ROTOR4_CT", "shortDesc": "Thrust coefficient of rotor 4", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.05, "group": "Geometry", "increment": 0.01, "longDesc": "The moment coefficient if defined as Torque = KM * Thrust.\nUse a positive value for a rotor with CCW rotation.\nUse a negative value for a rotor with CW rotation.", "max": 1.0, "min": -1.0, "name": "CA_ROTOR4_KM", "shortDesc": "Moment coefficient of rotor 4", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR4_PX", "shortDesc": "Position of rotor 4 along X body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR4_PY", "shortDesc": "Position of rotor 4 along Y body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR4_PZ", "shortDesc": "Position of rotor 4 along Z body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "default": 0, "group": "Geometry", "longDesc": "If not set to None, this motor is tilted by the configured tilt servo.", "name": "CA_ROTOR4_TILT", "shortDesc": "Rotor 4 tilt assignment", "type": "Int32", "values": [{"description": "None", "value": 0}, {"description": "Tilt 1", "value": 1}, {"description": "Tilt 2", "value": 2}, {"description": "Tilt 3", "value": 3}, {"description": "Tilt 4", "value": 4}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).", "max": 100.0, "min": -100.0, "name": "CA_ROTOR5_AX", "shortDesc": "Axis of rotor 5 thrust vector, X body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).", "max": 100.0, "min": -100.0, "name": "CA_ROTOR5_AY", "shortDesc": "Axis of rotor 5 thrust vector, Y body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": -1.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).", "max": 100.0, "min": -100.0, "name": "CA_ROTOR5_AZ", "shortDesc": "Axis of rotor 5 thrust vector, Z body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 6.5, "group": "Geometry", "increment": 1.0, "longDesc": "The thrust coefficient if defined as Thrust = CT * u^2,\nwhere u (with value between actuator minimum and maximum)\nis the output signal sent to the motor controller.", "max": 100.0, "min": 0.0, "name": "CA_ROTOR5_CT", "shortDesc": "Thrust coefficient of rotor 5", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.05, "group": "Geometry", "increment": 0.01, "longDesc": "The moment coefficient if defined as Torque = KM * Thrust.\nUse a positive value for a rotor with CCW rotation.\nUse a negative value for a rotor with CW rotation.", "max": 1.0, "min": -1.0, "name": "CA_ROTOR5_KM", "shortDesc": "Moment coefficient of rotor 5", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR5_PX", "shortDesc": "Position of rotor 5 along X body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR5_PY", "shortDesc": "Position of rotor 5 along Y body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR5_PZ", "shortDesc": "Position of rotor 5 along Z body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "default": 0, "group": "Geometry", "longDesc": "If not set to None, this motor is tilted by the configured tilt servo.", "name": "CA_ROTOR5_TILT", "shortDesc": "Rotor 5 tilt assignment", "type": "Int32", "values": [{"description": "None", "value": 0}, {"description": "Tilt 1", "value": 1}, {"description": "Tilt 2", "value": 2}, {"description": "Tilt 3", "value": 3}, {"description": "Tilt 4", "value": 4}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).", "max": 100.0, "min": -100.0, "name": "CA_ROTOR6_AX", "shortDesc": "Axis of rotor 6 thrust vector, X body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).", "max": 100.0, "min": -100.0, "name": "CA_ROTOR6_AY", "shortDesc": "Axis of rotor 6 thrust vector, Y body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": -1.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).", "max": 100.0, "min": -100.0, "name": "CA_ROTOR6_AZ", "shortDesc": "Axis of rotor 6 thrust vector, Z body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 6.5, "group": "Geometry", "increment": 1.0, "longDesc": "The thrust coefficient if defined as Thrust = CT * u^2,\nwhere u (with value between actuator minimum and maximum)\nis the output signal sent to the motor controller.", "max": 100.0, "min": 0.0, "name": "CA_ROTOR6_CT", "shortDesc": "Thrust coefficient of rotor 6", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.05, "group": "Geometry", "increment": 0.01, "longDesc": "The moment coefficient if defined as Torque = KM * Thrust.\nUse a positive value for a rotor with CCW rotation.\nUse a negative value for a rotor with CW rotation.", "max": 1.0, "min": -1.0, "name": "CA_ROTOR6_KM", "shortDesc": "Moment coefficient of rotor 6", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR6_PX", "shortDesc": "Position of rotor 6 along X body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR6_PY", "shortDesc": "Position of rotor 6 along Y body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR6_PZ", "shortDesc": "Position of rotor 6 along Z body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "default": 0, "group": "Geometry", "longDesc": "If not set to None, this motor is tilted by the configured tilt servo.", "name": "CA_ROTOR6_TILT", "shortDesc": "Rotor 6 tilt assignment", "type": "Int32", "values": [{"description": "None", "value": 0}, {"description": "Tilt 1", "value": 1}, {"description": "Tilt 2", "value": 2}, {"description": "Tilt 3", "value": 3}, {"description": "Tilt 4", "value": 4}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).", "max": 100.0, "min": -100.0, "name": "CA_ROTOR7_AX", "shortDesc": "Axis of rotor 7 thrust vector, X body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).", "max": 100.0, "min": -100.0, "name": "CA_ROTOR7_AY", "shortDesc": "Axis of rotor 7 thrust vector, Y body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": -1.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).", "max": 100.0, "min": -100.0, "name": "CA_ROTOR7_AZ", "shortDesc": "Axis of rotor 7 thrust vector, Z body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 6.5, "group": "Geometry", "increment": 1.0, "longDesc": "The thrust coefficient if defined as Thrust = CT * u^2,\nwhere u (with value between actuator minimum and maximum)\nis the output signal sent to the motor controller.", "max": 100.0, "min": 0.0, "name": "CA_ROTOR7_CT", "shortDesc": "Thrust coefficient of rotor 7", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.05, "group": "Geometry", "increment": 0.01, "longDesc": "The moment coefficient if defined as Torque = KM * Thrust.\nUse a positive value for a rotor with CCW rotation.\nUse a negative value for a rotor with CW rotation.", "max": 1.0, "min": -1.0, "name": "CA_ROTOR7_KM", "shortDesc": "Moment coefficient of rotor 7", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR7_PX", "shortDesc": "Position of rotor 7 along X body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR7_PY", "shortDesc": "Position of rotor 7 along Y body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR7_PZ", "shortDesc": "Position of rotor 7 along Z body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "default": 0, "group": "Geometry", "longDesc": "If not set to None, this motor is tilted by the configured tilt servo.", "name": "CA_ROTOR7_TILT", "shortDesc": "Rotor 7 tilt assignment", "type": "Int32", "values": [{"description": "None", "value": 0}, {"description": "Tilt 1", "value": 1}, {"description": "Tilt 2", "value": 2}, {"description": "Tilt 3", "value": 3}, {"description": "Tilt 4", "value": 4}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).", "max": 100.0, "min": -100.0, "name": "CA_ROTOR8_AX", "shortDesc": "Axis of rotor 8 thrust vector, X body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).", "max": 100.0, "min": -100.0, "name": "CA_ROTOR8_AY", "shortDesc": "Axis of rotor 8 thrust vector, Y body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": -1.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).", "max": 100.0, "min": -100.0, "name": "CA_ROTOR8_AZ", "shortDesc": "Axis of rotor 8 thrust vector, Z body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 6.5, "group": "Geometry", "increment": 1.0, "longDesc": "The thrust coefficient if defined as Thrust = CT * u^2,\nwhere u (with value between actuator minimum and maximum)\nis the output signal sent to the motor controller.", "max": 100.0, "min": 0.0, "name": "CA_ROTOR8_CT", "shortDesc": "Thrust coefficient of rotor 8", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.05, "group": "Geometry", "increment": 0.01, "longDesc": "The moment coefficient if defined as Torque = KM * Thrust.\nUse a positive value for a rotor with CCW rotation.\nUse a negative value for a rotor with CW rotation.", "max": 1.0, "min": -1.0, "name": "CA_ROTOR8_KM", "shortDesc": "Moment coefficient of rotor 8", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR8_PX", "shortDesc": "Position of rotor 8 along X body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR8_PY", "shortDesc": "Position of rotor 8 along Y body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR8_PZ", "shortDesc": "Position of rotor 8 along Z body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "default": 0, "group": "Geometry", "longDesc": "If not set to None, this motor is tilted by the configured tilt servo.", "name": "CA_ROTOR8_TILT", "shortDesc": "Rotor 8 tilt assignment", "type": "Int32", "values": [{"description": "None", "value": 0}, {"description": "Tilt 1", "value": 1}, {"description": "Tilt 2", "value": 2}, {"description": "Tilt 3", "value": 3}, {"description": "Tilt 4", "value": 4}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).", "max": 100.0, "min": -100.0, "name": "CA_ROTOR9_AX", "shortDesc": "Axis of rotor 9 thrust vector, X body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).", "max": 100.0, "min": -100.0, "name": "CA_ROTOR9_AY", "shortDesc": "Axis of rotor 9 thrust vector, Y body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": -1.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).", "max": 100.0, "min": -100.0, "name": "CA_ROTOR9_AZ", "shortDesc": "Axis of rotor 9 thrust vector, Z body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 6.5, "group": "Geometry", "increment": 1.0, "longDesc": "The thrust coefficient if defined as Thrust = CT * u^2,\nwhere u (with value between actuator minimum and maximum)\nis the output signal sent to the motor controller.", "max": 100.0, "min": 0.0, "name": "CA_ROTOR9_CT", "shortDesc": "Thrust coefficient of rotor 9", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.05, "group": "Geometry", "increment": 0.01, "longDesc": "The moment coefficient if defined as Torque = KM * Thrust.\nUse a positive value for a rotor with CCW rotation.\nUse a negative value for a rotor with CW rotation.", "max": 1.0, "min": -1.0, "name": "CA_ROTOR9_KM", "shortDesc": "Moment coefficient of rotor 9", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR9_PX", "shortDesc": "Position of rotor 9 along X body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR9_PY", "shortDesc": "Position of rotor 9 along Y body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR9_PZ", "shortDesc": "Position of rotor 9 along Z body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "default": 0, "group": "Geometry", "longDesc": "If not set to None, this motor is tilted by the configured tilt servo.", "name": "CA_ROTOR9_TILT", "shortDesc": "Rotor 9 tilt assignment", "type": "Int32", "values": [{"description": "None", "value": 0}, {"description": "Tilt 1", "value": 1}, {"description": "Tilt 2", "value": 2}, {"description": "Tilt 3", "value": 3}, {"description": "Tilt 4", "value": 4}]}, {"category": "Standard", "default": 0, "group": "Geometry", "name": "CA_ROTOR_COUNT", "shortDesc": "Total number of rotors", "type": "Int32", "values": [{"description": "0", "value": 0}, {"description": "1", "value": 1}, {"description": "2", "value": 2}, {"description": "3", "value": 3}, {"description": "4", "value": 4}, {"description": "5", "value": 5}, {"description": "6", "value": 6}, {"description": "7", "value": 7}, {"description": "8", "value": 8}, {"description": "9", "value": 9}, {"description": "10", "value": 10}, {"description": "11", "value": 11}, {"description": "12", "value": 12}]}, {"bitmask": [{"description": "Motor 1", "index": 0}, {"description": "Motor 2", "index": 1}, {"description": "Motor 3", "index": 2}, {"description": "Motor 4", "index": 3}, {"description": "Motor 5", "index": 4}, {"description": "Motor 6", "index": 5}, {"description": "Motor 7", "index": 6}, {"description": "Motor 8", "index": 7}, {"description": "Motor 9", "index": 8}, {"description": "Motor 10", "index": 9}, {"description": "Motor 11", "index": 10}, {"description": "Motor 12", "index": 11}], "category": "Standard", "default": 0, "group": "Geometry", "longDesc": "Configure motors to be bidirectional/reversible. Note that the output driver needs to support this as well.", "max": 4095, "min": 0, "name": "CA_R_REV", "shortDesc": "Bidirectional/Reversible motors", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 0, "default": 0.0, "group": "Geometry", "increment": 10.0, "longDesc": "The angle is measured clockwise (as seen from top), with 0 pointing forwards (X axis).", "max": 360.0, "min": 0.0, "name": "CA_SP0_ANG0", "shortDesc": "Angle for swash plate servo 0", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 0, "default": 140.0, "group": "Geometry", "increment": 10.0, "longDesc": "The angle is measured clockwise (as seen from top), with 0 pointing forwards (X axis).", "max": 360.0, "min": 0.0, "name": "CA_SP0_ANG1", "shortDesc": "Angle for swash plate servo 1", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 0, "default": 220.0, "group": "Geometry", "increment": 10.0, "longDesc": "The angle is measured clockwise (as seen from top), with 0 pointing forwards (X axis).", "max": 360.0, "min": 0.0, "name": "CA_SP0_ANG2", "shortDesc": "Angle for swash plate servo 2", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 0, "default": 0.0, "group": "Geometry", "increment": 10.0, "longDesc": "The angle is measured clockwise (as seen from top), with 0 pointing forwards (X axis).", "max": 360.0, "min": 0.0, "name": "CA_SP0_ANG3", "shortDesc": "Angle for swash plate servo 3", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 3, "default": 1.0, "group": "Geometry", "increment": 0.1, "longDesc": "This is relative to the other arm lengths.", "max": 10.0, "min": 0.0, "name": "CA_SP0_ARM_L0", "shortDesc": "Arm length for swash plate servo 0", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 1.0, "group": "Geometry", "increment": 0.1, "longDesc": "This is relative to the other arm lengths.", "max": 10.0, "min": 0.0, "name": "CA_SP0_ARM_L1", "shortDesc": "Arm length for swash plate servo 1", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 1.0, "group": "Geometry", "increment": 0.1, "longDesc": "This is relative to the other arm lengths.", "max": 10.0, "min": 0.0, "name": "CA_SP0_ARM_L2", "shortDesc": "Arm length for swash plate servo 2", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 1.0, "group": "Geometry", "increment": 0.1, "longDesc": "This is relative to the other arm lengths.", "max": 10.0, "min": 0.0, "name": "CA_SP0_ARM_L3", "shortDesc": "Arm length for swash plate servo 3", "type": "Float"}, {"category": "Standard", "default": 3, "group": "Geometry", "name": "CA_SP0_COUNT", "shortDesc": "Number of swash plates servos", "type": "Int32", "values": [{"description": "2", "value": 2}, {"description": "3", "value": 3}, {"description": "4", "value": 4}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.05, "longDesc": "Forces the servo output signal to take at least the configured time (in seconds)\nto traverse its full range [-100%, 100%].\nZero means that slew rate limiting is disabled.", "max": 10.0, "min": 0.0, "name": "CA_SV0_SLEW", "shortDesc": "Servo 0 slew rate limit", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.05, "longDesc": "Forces the servo output signal to take at least the configured time (in seconds)\nto traverse its full range [-100%, 100%].\nZero means that slew rate limiting is disabled.", "max": 10.0, "min": 0.0, "name": "CA_SV1_SLEW", "shortDesc": "Servo 1 slew rate limit", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.05, "longDesc": "Forces the servo output signal to take at least the configured time (in seconds)\nto traverse its full range [-100%, 100%].\nZero means that slew rate limiting is disabled.", "max": 10.0, "min": 0.0, "name": "CA_SV2_SLEW", "shortDesc": "Servo 2 slew rate limit", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.05, "longDesc": "Forces the servo output signal to take at least the configured time (in seconds)\nto traverse its full range [-100%, 100%].\nZero means that slew rate limiting is disabled.", "max": 10.0, "min": 0.0, "name": "CA_SV3_SLEW", "shortDesc": "Servo 3 slew rate limit", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.05, "longDesc": "Forces the servo output signal to take at least the configured time (in seconds)\nto traverse its full range [-100%, 100%].\nZero means that slew rate limiting is disabled.", "max": 10.0, "min": 0.0, "name": "CA_SV4_SLEW", "shortDesc": "Servo 4 slew rate limit", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.05, "longDesc": "Forces the servo output signal to take at least the configured time (in seconds)\nto traverse its full range [-100%, 100%].\nZero means that slew rate limiting is disabled.", "max": 10.0, "min": 0.0, "name": "CA_SV5_SLEW", "shortDesc": "Servo 5 slew rate limit", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.05, "longDesc": "Forces the servo output signal to take at least the configured time (in seconds)\nto traverse its full range [-100%, 100%].\nZero means that slew rate limiting is disabled.", "max": 10.0, "min": 0.0, "name": "CA_SV6_SLEW", "shortDesc": "Servo 6 slew rate limit", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.05, "longDesc": "Forces the servo output signal to take at least the configured time (in seconds)\nto traverse its full range [-100%, 100%].\nZero means that slew rate limiting is disabled.", "max": 10.0, "min": 0.0, "name": "CA_SV7_SLEW", "shortDesc": "Servo 7 slew rate limit", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "max": 1.0, "min": -1.0, "name": "CA_SV_CS0_FLAP", "shortDesc": "Control Surface 0 configuration as flap", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "max": 1.0, "min": -1.0, "name": "CA_SV_CS0_SPOIL", "shortDesc": "Control Surface 0 configuration as spoiler", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "longDesc": "Can be used to add an offset to the servo control.\nNOTE: Do not use for PWM servos. Use the PWM CENTER parameters instead (e.g., PWM_MAIN_CENT, PWM_AUX_CENT) instead.\nThis parameter can only be set if all PWM Center parameters are set to default.", "max": 1.0, "min": -1.0, "name": "CA_SV_CS0_TRIM", "shortDesc": "Control Surface 0 trim", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "name": "CA_SV_CS0_TRQ_P", "shortDesc": "Control Surface 0 pitch torque scaling", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "name": "CA_SV_CS0_TRQ_R", "shortDesc": "Control Surface 0 roll torque scaling", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "name": "CA_SV_CS0_TRQ_Y", "shortDesc": "Control Surface 0 yaw torque scaling", "type": "Float"}, {"category": "Standard", "default": 0, "group": "Geometry", "name": "CA_SV_CS0_TYPE", "shortDesc": "Control Surface 0 type", "type": "Int32", "values": [{"description": "(Not set)", "value": 0}, {"description": "Left Aileron", "value": 1}, {"description": "Right Aileron", "value": 2}, {"description": "Elevator", "value": 3}, {"description": "Rudder", "value": 4}, {"description": "Left Elevon", "value": 5}, {"description": "Right Elevon", "value": 6}, {"description": "Left V-Tail", "value": 7}, {"description": "Right V-Tail", "value": 8}, {"description": "Left Flap", "value": 9}, {"description": "Right Flap", "value": 10}, {"description": "Airbrake", "value": 11}, {"description": "Custom", "value": 12}, {"description": "Left A-tail", "value": 13}, {"description": "Right A-tail", "value": 14}, {"description": "Single Channel Aileron", "value": 15}, {"description": "Steering Wheel", "value": 16}, {"description": "Left Spoiler", "value": 17}, {"description": "Right Spoiler", "value": 18}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "max": 1.0, "min": -1.0, "name": "CA_SV_CS1_FLAP", "shortDesc": "Control Surface 1 configuration as flap", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "max": 1.0, "min": -1.0, "name": "CA_SV_CS1_SPOIL", "shortDesc": "Control Surface 1 configuration as spoiler", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "longDesc": "Can be used to add an offset to the servo control.\nNOTE: Do not use for PWM servos. Use the PWM CENTER parameters instead (e.g., PWM_MAIN_CENT, PWM_AUX_CENT) instead.\nThis parameter can only be set if all PWM Center parameters are set to default.", "max": 1.0, "min": -1.0, "name": "CA_SV_CS1_TRIM", "shortDesc": "Control Surface 1 trim", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "name": "CA_SV_CS1_TRQ_P", "shortDesc": "Control Surface 1 pitch torque scaling", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "name": "CA_SV_CS1_TRQ_R", "shortDesc": "Control Surface 1 roll torque scaling", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "name": "CA_SV_CS1_TRQ_Y", "shortDesc": "Control Surface 1 yaw torque scaling", "type": "Float"}, {"category": "Standard", "default": 0, "group": "Geometry", "name": "CA_SV_CS1_TYPE", "shortDesc": "Control Surface 1 type", "type": "Int32", "values": [{"description": "(Not set)", "value": 0}, {"description": "Left Aileron", "value": 1}, {"description": "Right Aileron", "value": 2}, {"description": "Elevator", "value": 3}, {"description": "Rudder", "value": 4}, {"description": "Left Elevon", "value": 5}, {"description": "Right Elevon", "value": 6}, {"description": "Left V-Tail", "value": 7}, {"description": "Right V-Tail", "value": 8}, {"description": "Left Flap", "value": 9}, {"description": "Right Flap", "value": 10}, {"description": "Airbrake", "value": 11}, {"description": "Custom", "value": 12}, {"description": "Left A-tail", "value": 13}, {"description": "Right A-tail", "value": 14}, {"description": "Single Channel Aileron", "value": 15}, {"description": "Steering Wheel", "value": 16}, {"description": "Left Spoiler", "value": 17}, {"description": "Right Spoiler", "value": 18}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "max": 1.0, "min": -1.0, "name": "CA_SV_CS2_FLAP", "shortDesc": "Control Surface 2 configuration as flap", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "max": 1.0, "min": -1.0, "name": "CA_SV_CS2_SPOIL", "shortDesc": "Control Surface 2 configuration as spoiler", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "longDesc": "Can be used to add an offset to the servo control.\nNOTE: Do not use for PWM servos. Use the PWM CENTER parameters instead (e.g., PWM_MAIN_CENT, PWM_AUX_CENT) instead.\nThis parameter can only be set if all PWM Center parameters are set to default.", "max": 1.0, "min": -1.0, "name": "CA_SV_CS2_TRIM", "shortDesc": "Control Surface 2 trim", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "name": "CA_SV_CS2_TRQ_P", "shortDesc": "Control Surface 2 pitch torque scaling", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "name": "CA_SV_CS2_TRQ_R", "shortDesc": "Control Surface 2 roll torque scaling", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "name": "CA_SV_CS2_TRQ_Y", "shortDesc": "Control Surface 2 yaw torque scaling", "type": "Float"}, {"category": "Standard", "default": 0, "group": "Geometry", "name": "CA_SV_CS2_TYPE", "shortDesc": "Control Surface 2 type", "type": "Int32", "values": [{"description": "(Not set)", "value": 0}, {"description": "Left Aileron", "value": 1}, {"description": "Right Aileron", "value": 2}, {"description": "Elevator", "value": 3}, {"description": "Rudder", "value": 4}, {"description": "Left Elevon", "value": 5}, {"description": "Right Elevon", "value": 6}, {"description": "Left V-Tail", "value": 7}, {"description": "Right V-Tail", "value": 8}, {"description": "Left Flap", "value": 9}, {"description": "Right Flap", "value": 10}, {"description": "Airbrake", "value": 11}, {"description": "Custom", "value": 12}, {"description": "Left A-tail", "value": 13}, {"description": "Right A-tail", "value": 14}, {"description": "Single Channel Aileron", "value": 15}, {"description": "Steering Wheel", "value": 16}, {"description": "Left Spoiler", "value": 17}, {"description": "Right Spoiler", "value": 18}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "max": 1.0, "min": -1.0, "name": "CA_SV_CS3_FLAP", "shortDesc": "Control Surface 3 configuration as flap", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "max": 1.0, "min": -1.0, "name": "CA_SV_CS3_SPOIL", "shortDesc": "Control Surface 3 configuration as spoiler", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "longDesc": "Can be used to add an offset to the servo control.\nNOTE: Do not use for PWM servos. Use the PWM CENTER parameters instead (e.g., PWM_MAIN_CENT, PWM_AUX_CENT) instead.\nThis parameter can only be set if all PWM Center parameters are set to default.", "max": 1.0, "min": -1.0, "name": "CA_SV_CS3_TRIM", "shortDesc": "Control Surface 3 trim", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "name": "CA_SV_CS3_TRQ_P", "shortDesc": "Control Surface 3 pitch torque scaling", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "name": "CA_SV_CS3_TRQ_R", "shortDesc": "Control Surface 3 roll torque scaling", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "name": "CA_SV_CS3_TRQ_Y", "shortDesc": "Control Surface 3 yaw torque scaling", "type": "Float"}, {"category": "Standard", "default": 0, "group": "Geometry", "name": "CA_SV_CS3_TYPE", "shortDesc": "Control Surface 3 type", "type": "Int32", "values": [{"description": "(Not set)", "value": 0}, {"description": "Left Aileron", "value": 1}, {"description": "Right Aileron", "value": 2}, {"description": "Elevator", "value": 3}, {"description": "Rudder", "value": 4}, {"description": "Left Elevon", "value": 5}, {"description": "Right Elevon", "value": 6}, {"description": "Left V-Tail", "value": 7}, {"description": "Right V-Tail", "value": 8}, {"description": "Left Flap", "value": 9}, {"description": "Right Flap", "value": 10}, {"description": "Airbrake", "value": 11}, {"description": "Custom", "value": 12}, {"description": "Left A-tail", "value": 13}, {"description": "Right A-tail", "value": 14}, {"description": "Single Channel Aileron", "value": 15}, {"description": "Steering Wheel", "value": 16}, {"description": "Left Spoiler", "value": 17}, {"description": "Right Spoiler", "value": 18}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "max": 1.0, "min": -1.0, "name": "CA_SV_CS4_FLAP", "shortDesc": "Control Surface 4 configuration as flap", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "max": 1.0, "min": -1.0, "name": "CA_SV_CS4_SPOIL", "shortDesc": "Control Surface 4 configuration as spoiler", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "longDesc": "Can be used to add an offset to the servo control.\nNOTE: Do not use for PWM servos. Use the PWM CENTER parameters instead (e.g., PWM_MAIN_CENT, PWM_AUX_CENT) instead.\nThis parameter can only be set if all PWM Center parameters are set to default.", "max": 1.0, "min": -1.0, "name": "CA_SV_CS4_TRIM", "shortDesc": "Control Surface 4 trim", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "name": "CA_SV_CS4_TRQ_P", "shortDesc": "Control Surface 4 pitch torque scaling", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "name": "CA_SV_CS4_TRQ_R", "shortDesc": "Control Surface 4 roll torque scaling", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "name": "CA_SV_CS4_TRQ_Y", "shortDesc": "Control Surface 4 yaw torque scaling", "type": "Float"}, {"category": "Standard", "default": 0, "group": "Geometry", "name": "CA_SV_CS4_TYPE", "shortDesc": "Control Surface 4 type", "type": "Int32", "values": [{"description": "(Not set)", "value": 0}, {"description": "Left Aileron", "value": 1}, {"description": "Right Aileron", "value": 2}, {"description": "Elevator", "value": 3}, {"description": "Rudder", "value": 4}, {"description": "Left Elevon", "value": 5}, {"description": "Right Elevon", "value": 6}, {"description": "Left V-Tail", "value": 7}, {"description": "Right V-Tail", "value": 8}, {"description": "Left Flap", "value": 9}, {"description": "Right Flap", "value": 10}, {"description": "Airbrake", "value": 11}, {"description": "Custom", "value": 12}, {"description": "Left A-tail", "value": 13}, {"description": "Right A-tail", "value": 14}, {"description": "Single Channel Aileron", "value": 15}, {"description": "Steering Wheel", "value": 16}, {"description": "Left Spoiler", "value": 17}, {"description": "Right Spoiler", "value": 18}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "max": 1.0, "min": -1.0, "name": "CA_SV_CS5_FLAP", "shortDesc": "Control Surface 5 configuration as flap", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "max": 1.0, "min": -1.0, "name": "CA_SV_CS5_SPOIL", "shortDesc": "Control Surface 5 configuration as spoiler", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "longDesc": "Can be used to add an offset to the servo control.\nNOTE: Do not use for PWM servos. Use the PWM CENTER parameters instead (e.g., PWM_MAIN_CENT, PWM_AUX_CENT) instead.\nThis parameter can only be set if all PWM Center parameters are set to default.", "max": 1.0, "min": -1.0, "name": "CA_SV_CS5_TRIM", "shortDesc": "Control Surface 5 trim", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "name": "CA_SV_CS5_TRQ_P", "shortDesc": "Control Surface 5 pitch torque scaling", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "name": "CA_SV_CS5_TRQ_R", "shortDesc": "Control Surface 5 roll torque scaling", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "name": "CA_SV_CS5_TRQ_Y", "shortDesc": "Control Surface 5 yaw torque scaling", "type": "Float"}, {"category": "Standard", "default": 0, "group": "Geometry", "name": "CA_SV_CS5_TYPE", "shortDesc": "Control Surface 5 type", "type": "Int32", "values": [{"description": "(Not set)", "value": 0}, {"description": "Left Aileron", "value": 1}, {"description": "Right Aileron", "value": 2}, {"description": "Elevator", "value": 3}, {"description": "Rudder", "value": 4}, {"description": "Left Elevon", "value": 5}, {"description": "Right Elevon", "value": 6}, {"description": "Left V-Tail", "value": 7}, {"description": "Right V-Tail", "value": 8}, {"description": "Left Flap", "value": 9}, {"description": "Right Flap", "value": 10}, {"description": "Airbrake", "value": 11}, {"description": "Custom", "value": 12}, {"description": "Left A-tail", "value": 13}, {"description": "Right A-tail", "value": 14}, {"description": "Single Channel Aileron", "value": 15}, {"description": "Steering Wheel", "value": 16}, {"description": "Left Spoiler", "value": 17}, {"description": "Right Spoiler", "value": 18}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "max": 1.0, "min": -1.0, "name": "CA_SV_CS6_FLAP", "shortDesc": "Control Surface 6 configuration as flap", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "max": 1.0, "min": -1.0, "name": "CA_SV_CS6_SPOIL", "shortDesc": "Control Surface 6 configuration as spoiler", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "longDesc": "Can be used to add an offset to the servo control.\nNOTE: Do not use for PWM servos. Use the PWM CENTER parameters instead (e.g., PWM_MAIN_CENT, PWM_AUX_CENT) instead.\nThis parameter can only be set if all PWM Center parameters are set to default.", "max": 1.0, "min": -1.0, "name": "CA_SV_CS6_TRIM", "shortDesc": "Control Surface 6 trim", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "name": "CA_SV_CS6_TRQ_P", "shortDesc": "Control Surface 6 pitch torque scaling", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "name": "CA_SV_CS6_TRQ_R", "shortDesc": "Control Surface 6 roll torque scaling", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "name": "CA_SV_CS6_TRQ_Y", "shortDesc": "Control Surface 6 yaw torque scaling", "type": "Float"}, {"category": "Standard", "default": 0, "group": "Geometry", "name": "CA_SV_CS6_TYPE", "shortDesc": "Control Surface 6 type", "type": "Int32", "values": [{"description": "(Not set)", "value": 0}, {"description": "Left Aileron", "value": 1}, {"description": "Right Aileron", "value": 2}, {"description": "Elevator", "value": 3}, {"description": "Rudder", "value": 4}, {"description": "Left Elevon", "value": 5}, {"description": "Right Elevon", "value": 6}, {"description": "Left V-Tail", "value": 7}, {"description": "Right V-Tail", "value": 8}, {"description": "Left Flap", "value": 9}, {"description": "Right Flap", "value": 10}, {"description": "Airbrake", "value": 11}, {"description": "Custom", "value": 12}, {"description": "Left A-tail", "value": 13}, {"description": "Right A-tail", "value": 14}, {"description": "Single Channel Aileron", "value": 15}, {"description": "Steering Wheel", "value": 16}, {"description": "Left Spoiler", "value": 17}, {"description": "Right Spoiler", "value": 18}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "max": 1.0, "min": -1.0, "name": "CA_SV_CS7_FLAP", "shortDesc": "Control Surface 7 configuration as flap", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "max": 1.0, "min": -1.0, "name": "CA_SV_CS7_SPOIL", "shortDesc": "Control Surface 7 configuration as spoiler", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "longDesc": "Can be used to add an offset to the servo control.\nNOTE: Do not use for PWM servos. Use the PWM CENTER parameters instead (e.g., PWM_MAIN_CENT, PWM_AUX_CENT) instead.\nThis parameter can only be set if all PWM Center parameters are set to default.", "max": 1.0, "min": -1.0, "name": "CA_SV_CS7_TRIM", "shortDesc": "Control Surface 7 trim", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "name": "CA_SV_CS7_TRQ_P", "shortDesc": "Control Surface 7 pitch torque scaling", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "name": "CA_SV_CS7_TRQ_R", "shortDesc": "Control Surface 7 roll torque scaling", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "name": "CA_SV_CS7_TRQ_Y", "shortDesc": "Control Surface 7 yaw torque scaling", "type": "Float"}, {"category": "Standard", "default": 0, "group": "Geometry", "name": "CA_SV_CS7_TYPE", "shortDesc": "Control Surface 7 type", "type": "Int32", "values": [{"description": "(Not set)", "value": 0}, {"description": "Left Aileron", "value": 1}, {"description": "Right Aileron", "value": 2}, {"description": "Elevator", "value": 3}, {"description": "Rudder", "value": 4}, {"description": "Left Elevon", "value": 5}, {"description": "Right Elevon", "value": 6}, {"description": "Left V-Tail", "value": 7}, {"description": "Right V-Tail", "value": 8}, {"description": "Left Flap", "value": 9}, {"description": "Right Flap", "value": 10}, {"description": "Airbrake", "value": 11}, {"description": "Custom", "value": 12}, {"description": "Left A-tail", "value": 13}, {"description": "Right A-tail", "value": 14}, {"description": "Single Channel Aileron", "value": 15}, {"description": "Steering Wheel", "value": 16}, {"description": "Left Spoiler", "value": 17}, {"description": "Right Spoiler", "value": 18}]}, {"category": "Standard", "default": 0, "group": "Geometry", "name": "CA_SV_CS_COUNT", "shortDesc": "Total number of Control Surfaces", "type": "Int32", "values": [{"description": "0", "value": 0}, {"description": "1", "value": 1}, {"description": "2", "value": 2}, {"description": "3", "value": 3}, {"description": "4", "value": 4}, {"description": "5", "value": 5}, {"description": "6", "value": 6}, {"description": "7", "value": 7}, {"description": "8", "value": 8}]}, {"category": "Standard", "decimalPlaces": 1, "default": 0.5, "group": "Geometry", "max": 5.0, "min": 0.0, "name": "CA_SV_FLAP_SLEW", "shortDesc": "Control Surface slew rate for normalized flaps setpoint", "type": "Float"}, {"category": "Standard", "default": 1, "group": "Geometry", "longDesc": "Define if this servo is used for additional control.", "name": "CA_SV_TL0_CT", "shortDesc": "Tilt 0 is used for control", "type": "Int32", "values": [{"description": "None", "value": 0}, {"description": "Yaw", "value": 1}, {"description": "Pitch", "value": 2}, {"description": "Yaw and Pitch", "value": 3}]}, {"category": "Standard", "decimalPlaces": 0, "default": 90.0, "group": "Geometry", "longDesc": "Defines the tilt angle when the servo is at the maximum.\nAn angle of zero means upwards.", "max": 90.0, "min": -90.0, "name": "CA_SV_TL0_MAXA", "shortDesc": "Tilt Servo 0 Tilt Angle at Maximum", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 0, "default": 0.0, "group": "Geometry", "longDesc": "Defines the tilt angle when the servo is at the minimum.\nAn angle of zero means upwards.", "max": 90.0, "min": -90.0, "name": "CA_SV_TL0_MINA", "shortDesc": "Tilt Servo 0 Tilt Angle at Minimum", "type": "Float", "units": "deg"}, {"category": "Standard", "default": 0, "group": "Geometry", "longDesc": "Defines the direction the servo tilts towards when moving towards the maximum tilt angle.\nFor example if the minimum tilt angle is -90, the maximum 90, and the direction 'Towards Front',\nthe motor axis aligns with the XZ-plane, points towards -X at the minimum and +X at the maximum tilt.", "max": 359, "min": 0, "name": "CA_SV_TL0_TD", "shortDesc": "Tilt Servo 0 Tilt Direction", "type": "Int32", "values": [{"description": "Towards Front", "value": 0}, {"description": "Towards Right", "value": 90}]}, {"category": "Standard", "default": 1, "group": "Geometry", "longDesc": "Define if this servo is used for additional control.", "name": "CA_SV_TL1_CT", "shortDesc": "Tilt 1 is used for control", "type": "Int32", "values": [{"description": "None", "value": 0}, {"description": "Yaw", "value": 1}, {"description": "Pitch", "value": 2}, {"description": "Yaw and Pitch", "value": 3}]}, {"category": "Standard", "decimalPlaces": 0, "default": 90.0, "group": "Geometry", "longDesc": "Defines the tilt angle when the servo is at the maximum.\nAn angle of zero means upwards.", "max": 90.0, "min": -90.0, "name": "CA_SV_TL1_MAXA", "shortDesc": "Tilt Servo 1 Tilt Angle at Maximum", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 0, "default": 0.0, "group": "Geometry", "longDesc": "Defines the tilt angle when the servo is at the minimum.\nAn angle of zero means upwards.", "max": 90.0, "min": -90.0, "name": "CA_SV_TL1_MINA", "shortDesc": "Tilt Servo 1 Tilt Angle at Minimum", "type": "Float", "units": "deg"}, {"category": "Standard", "default": 0, "group": "Geometry", "longDesc": "Defines the direction the servo tilts towards when moving towards the maximum tilt angle.\nFor example if the minimum tilt angle is -90, the maximum 90, and the direction 'Towards Front',\nthe motor axis aligns with the XZ-plane, points towards -X at the minimum and +X at the maximum tilt.", "max": 359, "min": 0, "name": "CA_SV_TL1_TD", "shortDesc": "Tilt Servo 1 Tilt Direction", "type": "Int32", "values": [{"description": "Towards Front", "value": 0}, {"description": "Towards Right", "value": 90}]}, {"category": "Standard", "default": 1, "group": "Geometry", "longDesc": "Define if this servo is used for additional control.", "name": "CA_SV_TL2_CT", "shortDesc": "Tilt 2 is used for control", "type": "Int32", "values": [{"description": "None", "value": 0}, {"description": "Yaw", "value": 1}, {"description": "Pitch", "value": 2}, {"description": "Yaw and Pitch", "value": 3}]}, {"category": "Standard", "decimalPlaces": 0, "default": 90.0, "group": "Geometry", "longDesc": "Defines the tilt angle when the servo is at the maximum.\nAn angle of zero means upwards.", "max": 90.0, "min": -90.0, "name": "CA_SV_TL2_MAXA", "shortDesc": "Tilt Servo 2 Tilt Angle at Maximum", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 0, "default": 0.0, "group": "Geometry", "longDesc": "Defines the tilt angle when the servo is at the minimum.\nAn angle of zero means upwards.", "max": 90.0, "min": -90.0, "name": "CA_SV_TL2_MINA", "shortDesc": "Tilt Servo 2 Tilt Angle at Minimum", "type": "Float", "units": "deg"}, {"category": "Standard", "default": 0, "group": "Geometry", "longDesc": "Defines the direction the servo tilts towards when moving towards the maximum tilt angle.\nFor example if the minimum tilt angle is -90, the maximum 90, and the direction 'Towards Front',\nthe motor axis aligns with the XZ-plane, points towards -X at the minimum and +X at the maximum tilt.", "max": 359, "min": 0, "name": "CA_SV_TL2_TD", "shortDesc": "Tilt Servo 2 Tilt Direction", "type": "Int32", "values": [{"description": "Towards Front", "value": 0}, {"description": "Towards Right", "value": 90}]}, {"category": "Standard", "default": 1, "group": "Geometry", "longDesc": "Define if this servo is used for additional control.", "name": "CA_SV_TL3_CT", "shortDesc": "Tilt 3 is used for control", "type": "Int32", "values": [{"description": "None", "value": 0}, {"description": "Yaw", "value": 1}, {"description": "Pitch", "value": 2}, {"description": "Yaw and Pitch", "value": 3}]}, {"category": "Standard", "decimalPlaces": 0, "default": 90.0, "group": "Geometry", "longDesc": "Defines the tilt angle when the servo is at the maximum.\nAn angle of zero means upwards.", "max": 90.0, "min": -90.0, "name": "CA_SV_TL3_MAXA", "shortDesc": "Tilt Servo 3 Tilt Angle at Maximum", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 0, "default": 0.0, "group": "Geometry", "longDesc": "Defines the tilt angle when the servo is at the minimum.\nAn angle of zero means upwards.", "max": 90.0, "min": -90.0, "name": "CA_SV_TL3_MINA", "shortDesc": "Tilt Servo 3 Tilt Angle at Minimum", "type": "Float", "units": "deg"}, {"category": "Standard", "default": 0, "group": "Geometry", "longDesc": "Defines the direction the servo tilts towards when moving towards the maximum tilt angle.\nFor example if the minimum tilt angle is -90, the maximum 90, and the direction 'Towards Front',\nthe motor axis aligns with the XZ-plane, points towards -X at the minimum and +X at the maximum tilt.", "max": 359, "min": 0, "name": "CA_SV_TL3_TD", "shortDesc": "Tilt Servo 3 Tilt Direction", "type": "Int32", "values": [{"description": "Towards Front", "value": 0}, {"description": "Towards Right", "value": 90}]}, {"category": "Standard", "default": 0, "group": "Geometry", "name": "CA_SV_TL_COUNT", "shortDesc": "Total number of Tilt Servos", "type": "Int32", "values": [{"description": "0", "value": 0}, {"description": "1", "value": 1}, {"description": "2", "value": 2}, {"description": "3", "value": 3}, {"description": "4", "value": 4}]}, {"category": "Standard", "decimalPlaces": 1, "default": 3.0, "group": "Hover Thrust Estimator", "longDesc": "Sets the number of standard deviations used\nby the innovation consistency test.", "max": 10.0, "min": 1.0, "name": "HTE_ACC_GATE", "shortDesc": "Gate size for acceleration fusion", "type": "Float", "units": "SD"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.1, "group": "Hover Thrust Estimator", "longDesc": "Sets the number of standard deviations used\nby the innovation consistency test.", "max": 1.0, "min": 0.0, "name": "HTE_HT_ERR_INIT", "shortDesc": "1-sigma initial hover thrust uncertainty", "type": "Float", "units": "normalized_thrust"}, {"category": "Standard", "decimalPlaces": 4, "default": 0.0036, "group": "Hover Thrust Estimator", "longDesc": "Reduce to make the hover thrust estimate\nmore stable, increase if the real hover thrust\nis expected to change quickly over time.", "max": 1.0, "min": 0.0001, "name": "HTE_HT_NOISE", "shortDesc": "Hover thrust process noise", "type": "Float", "units": "normalized_thrust/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.2, "group": "Hover Thrust Estimator", "longDesc": "Defines the range of the hover thrust estimate around MPC_THR_HOVER.\nA value of 0.2 with MPC_THR_HOVER at 0.5 results in a range of [0.3, 0.7].\nSet to a large value if the vehicle operates in varying physical conditions that\naffect the required hover thrust strongly (e.g. differently sized payloads).", "max": 0.4, "min": 0.01, "name": "HTE_THR_RANGE", "shortDesc": "Max deviation from MPC_THR_HOVER", "type": "Float", "units": "normalized_thrust"}, {"category": "Standard", "decimalPlaces": 1, "default": 10.0, "group": "Hover Thrust Estimator", "longDesc": "Above this speed, the measurement noise is linearly increased\nto reduce the sensitivity of the estimator from biased measurement.\nSet to a low value on vehicles with large lifting surfaces.", "max": 20.0, "min": 1.0, "name": "HTE_VXY_THR", "shortDesc": "Horizontal velocity threshold for sensitivity reduction", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 2.0, "group": "Hover Thrust Estimator", "longDesc": "Above this speed, the measurement noise is linearly increased\nto reduce the sensitivity of the estimator from biased measurement.\nSet to a low value on vehicles affected by air drag when climbing or descending.", "max": 10.0, "min": 1.0, "name": "HTE_VZ_THR", "shortDesc": "Vertical velocity threshold for sensitivity reduction", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 6.0, "group": "Land Detector", "longDesc": "Maximum airspeed allowed in the landed state", "max": 30.0, "min": 2.0, "name": "LNDFW_AIRSPD_MAX", "shortDesc": "Fixed-wing land detector: Max airspeed", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.5, "group": "Land Detector", "longDesc": "Maximum allowed norm of the angular velocity in the landed state.\nOnly used if neither airspeed nor groundspeed can be used for landing detection.", "name": "LNDFW_ROT_MAX", "shortDesc": "Fixed-wing land detector: max rotational speed", "type": "Float", "units": "deg/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 2.0, "group": "Land Detector", "longDesc": "Time the land conditions (speeds and acceleration) have to be satisfied to detect a landing.", "min": 0.1, "name": "LNDFW_TRIG_TIME", "rebootRequired": true, "shortDesc": "Fixed-wing land detection trigger time", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 1, "default": 5.0, "group": "Land Detector", "longDesc": "Maximum horizontal velocity allowed in the landed state.\nA factor of 0.7 is applied in case of airspeed-less flying\n(either because no sensor is present or sensor data got invalid in flight).", "max": 20.0, "min": 0.5, "name": "LNDFW_VEL_XY_MAX", "shortDesc": "Fixed-wing land detector: Max horizontal velocity threshold", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 1.0, "group": "Land Detector", "longDesc": "Maximum vertical velocity allowed in the landed state.", "max": 20.0, "min": 0.1, "name": "LNDFW_VEL_Z_MAX", "shortDesc": "Fixed-wing land detector: Max vertiacal velocity threshold", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 8.0, "group": "Land Detector", "longDesc": "Maximum horizontal (x,y body axes) acceleration allowed in the landed state", "max": 30.0, "min": 2.0, "name": "LNDFW_XYACC_MAX", "shortDesc": "Fixed-wing land detector: Max horizontal acceleration", "type": "Float", "units": "m/s^2"}, {"category": "Standard", "decimalPlaces": 2, "default": 2.0, "group": "Land Detector", "longDesc": "The height above ground below which ground effect creates barometric altitude errors.\nA negative value indicates no ground effect.", "min": -1.0, "name": "LNDMC_ALT_GND", "shortDesc": "Ground effect altitude for multicopters", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 1, "default": 20.0, "group": "Land Detector", "longDesc": "Maximum allowed norm of the angular velocity (roll, pitch) in the landed state.", "name": "LNDMC_ROT_MAX", "shortDesc": "Multicopter max rotational speed", "type": "Float", "units": "deg/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 1.5, "group": "Land Detector", "longDesc": "Maximum horizontal velocity allowed in the landed state", "name": "LNDMC_XY_VEL_MAX", "shortDesc": "Multicopter max horizontal velocity", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.25, "group": "Land Detector", "longDesc": "Vertical velocity threshold to detect landing.\nHas to be set lower than the expected minimal speed for landing,\nwhich is either MPC_LAND_SPEED or MPC_LAND_CRWL.\nThis is enforced by an automatic check.", "min": 0.0, "name": "LNDMC_Z_VEL_MAX", "shortDesc": "Multicopter vertical velocity threshold", "type": "Float", "units": "m/s"}, {"category": "System", "default": 0, "group": "Land Detector", "longDesc": "Total flight time of this autopilot. Higher 32 bits of the value.\nFlight time in microseconds = (LND_FLIGHT_T_HI << 32) | LND_FLIGHT_T_LO.", "min": 0, "name": "LND_FLIGHT_T_HI", "shortDesc": "Total flight time in microseconds", "type": "Int32", "volatile": true}, {"category": "System", "default": 0, "group": "Land Detector", "longDesc": "Total flight time of this autopilot. Lower 32 bits of the value.\nFlight time in microseconds = (LND_FLIGHT_T_HI << 32) | LND_FLIGHT_T_LO.", "min": 0, "name": "LND_FLIGHT_T_LO", "shortDesc": "Total flight time in microseconds", "type": "Int32", "volatile": true}, {"category": "Standard", "decimalPlaces": 2, "default": 10.0, "group": "Landing Target Estimator", "longDesc": "Variance of acceleration measurement used for landing target position prediction.\nHigher values results in tighter following of the measurements and more lenient outlier rejection", "min": 0.01, "name": "LTEST_ACC_UNC", "shortDesc": "Acceleration uncertainty", "type": "Float", "units": "(m/s^2)^2"}, {"category": "Standard", "decimalPlaces": 4, "default": 0.005, "group": "Landing Target Estimator", "longDesc": "Variance of the landing target measurement from the driver.\nHigher values result in less aggressive following of the measurement and a smoother output as well as fewer rejected measurements.", "name": "LTEST_MEAS_UNC", "shortDesc": "Landing target measurement uncertainty", "type": "Float", "units": "tan(rad)^2"}, {"category": "Standard", "default": 0, "group": "Landing Target Estimator", "longDesc": "Configure the mode of the landing target. Depending on the mode, the landing target observations are used differently to aid position estimation.\nMode Moving: The landing target may be moving around while in the field of view of the vehicle. Landing target measurements are not used to aid positioning.\nMode Stationary: The landing target is stationary. Measured velocity w.r.t. the landing target is used to aid velocity estimation.", "max": 1, "min": 0, "name": "LTEST_MODE", "shortDesc": "Landing target mode", "type": "Int32", "values": [{"description": "Moving", "value": 0}, {"description": "Stationary", "value": 1}]}, {"category": "Standard", "decimalPlaces": 3, "default": 0.1, "group": "Landing Target Estimator", "longDesc": "Initial variance of the relative landing target position in x and y direction", "min": 0.001, "name": "LTEST_POS_UNC_IN", "shortDesc": "Initial landing target position uncertainty", "type": "Float", "units": "m^2"}, {"category": "Standard", "decimalPlaces": 3, "default": 1.0, "group": "Landing Target Estimator", "longDesc": "Landing target x measurements are scaled by this factor before being used", "min": 0.01, "name": "LTEST_SCALE_X", "shortDesc": "Scale factor for sensor measurements in sensor x axis", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 1.0, "group": "Landing Target Estimator", "longDesc": "Landing target y measurements are scaled by this factor before being used", "min": 0.01, "name": "LTEST_SCALE_Y", "shortDesc": "Scale factor for sensor measurements in sensor y axis", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Landing Target Estimator", "name": "LTEST_SENS_POS_X", "rebootRequired": true, "shortDesc": "X Position of IRLOCK in body frame (forward)", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Landing Target Estimator", "name": "LTEST_SENS_POS_Y", "rebootRequired": true, "shortDesc": "Y Position of IRLOCK in body frame (right)", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Landing Target Estimator", "name": "LTEST_SENS_POS_Z", "rebootRequired": true, "shortDesc": "Z Position of IRLOCK in body frame (downward)", "type": "Float", "units": "m"}, {"category": "Standard", "default": 2, "group": "Landing Target Estimator", "longDesc": "Default orientation of Yaw 90\u00b0", "max": 40, "min": -1, "name": "LTEST_SENS_ROT", "rebootRequired": true, "shortDesc": "Rotation of IRLOCK sensor relative to airframe", "type": "Int32", "values": [{"description": "No rotation", "value": 0}, {"description": "Yaw 45\u00b0", "value": 1}, {"description": "Yaw 90\u00b0", "value": 2}, {"description": "Yaw 135\u00b0", "value": 3}, {"description": "Yaw 180\u00b0", "value": 4}, {"description": "Yaw 225\u00b0", "value": 5}, {"description": "Yaw 270\u00b0", "value": 6}, {"description": "Yaw 315\u00b0", "value": 7}]}, {"category": "Standard", "decimalPlaces": 3, "default": 0.1, "group": "Landing Target Estimator", "longDesc": "Initial variance of the relative landing target velocity in x and y directions", "min": 0.001, "name": "LTEST_VEL_UNC_IN", "shortDesc": "Initial landing target velocity uncertainty", "type": "Float", "units": "(m/s)^2"}, {"category": "Standard", "decimalPlaces": 4, "default": 0.012, "group": "Local Position Estimator", "longDesc": "Data sheet noise density = 150ug/sqrt(Hz) = 0.0015 m/s^2/sqrt(Hz)\nLarger than data sheet to account for tilt error.", "max": 2.0, "min": 1e-05, "name": "LPE_ACC_XY", "shortDesc": "Accelerometer xy noise density", "type": "Float", "units": "m/s^2/sqrt(Hz)"}, {"category": "Standard", "decimalPlaces": 4, "default": 0.02, "group": "Local Position Estimator", "longDesc": "Data sheet noise density = 150ug/sqrt(Hz) = 0.0015 m/s^2/sqrt(Hz)", "max": 2.0, "min": 1e-05, "name": "LPE_ACC_Z", "shortDesc": "Accelerometer z noise density", "type": "Float", "units": "m/s^2/sqrt(Hz)"}, {"category": "Standard", "decimalPlaces": 2, "default": 3.0, "group": "Local Position Estimator", "max": 100.0, "min": 0.01, "name": "LPE_BAR_Z", "shortDesc": "Barometric presssure altitude z standard deviation", "type": "Float", "units": "m"}, {"category": "Standard", "default": 0, "group": "Local Position Estimator", "name": "LPE_EN", "shortDesc": "Local position estimator enable (unsupported)", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 3, "default": 3.0, "group": "Local Position Estimator", "max": 5.0, "min": 1.0, "name": "LPE_EPH_MAX", "shortDesc": "Max EPH allowed for GPS initialization", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 3, "default": 5.0, "group": "Local Position Estimator", "max": 5.0, "min": 1.0, "name": "LPE_EPV_MAX", "shortDesc": "Max EPV allowed for GPS initialization", "type": "Float", "units": "m"}, {"category": "Standard", "default": 0, "group": "Local Position Estimator", "longDesc": "By initializing the estimator to the LPE_LAT/LON parameters when global information is unavailable", "max": 1, "min": 0, "name": "LPE_FAKE_ORIGIN", "shortDesc": "Enable publishing of a fake global position (e.g for AUTO missions using Optical Flow)", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.001, "group": "Local Position Estimator", "max": 2.0, "min": 0.0, "name": "LPE_FGYRO_HP", "shortDesc": "Flow gyro high pass filter cut off frequency", "type": "Float", "units": "Hz"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Local Position Estimator", "max": 1.0, "min": -1.0, "name": "LPE_FLW_OFF_Z", "shortDesc": "Optical flow z offset from center", "type": "Float", "units": "m"}, {"category": "Standard", "default": 150, "group": "Local Position Estimator", "max": 255, "min": 0, "name": "LPE_FLW_QMIN", "shortDesc": "Optical flow minimum quality threshold", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 3, "default": 7.0, "group": "Local Position Estimator", "max": 10.0, "min": 0.1, "name": "LPE_FLW_R", "shortDesc": "Optical flow rotation (roll/pitch) noise gain", "type": "Float", "units": "m/s/rad"}, {"category": "Standard", "decimalPlaces": 3, "default": 7.0, "group": "Local Position Estimator", "max": 10.0, "min": 0.0, "name": "LPE_FLW_RR", "shortDesc": "Optical flow angular velocity noise gain", "type": "Float", "units": "m/rad"}, {"category": "Standard", "decimalPlaces": 3, "default": 1.3, "group": "Local Position Estimator", "max": 10.0, "min": 0.1, "name": "LPE_FLW_SCALE", "shortDesc": "Optical flow scale", "type": "Float", "units": "m"}, {"bitmask": [{"description": "fuse GPS, requires GPS for alt. init", "index": 0}, {"description": "fuse optical flow", "index": 1}, {"description": "fuse vision position", "index": 2}, {"description": "fuse landing target", "index": 3}, {"description": "fuse land detector", "index": 4}, {"description": "pub agl as lpos down", "index": 5}, {"description": "flow gyro compensation", "index": 6}, {"description": "fuse baro", "index": 7}], "category": "Standard", "default": 145, "group": "Local Position Estimator", "longDesc": "Set bits in the following positions to enable:\n0 : Set to true to fuse GPS data if available, also requires GPS for altitude init\n1 : Set to true to fuse optical flow data if available\n2 : Set to true to fuse vision position\n3 : Set to true to enable landing target\n4 : Set to true to fuse land detector\n5 : Set to true to publish AGL as local position down component\n6 : Set to true to enable flow gyro compensation\n7 : Set to true to enable baro fusion\ndefault (145 - GPS, baro, land detector)", "max": 255, "min": 0, "name": "LPE_FUSION", "shortDesc": "Integer bitmask controlling data fusion", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.29, "group": "Local Position Estimator", "max": 0.4, "min": 0.0, "name": "LPE_GPS_DELAY", "shortDesc": "GPS delay compensaton", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.25, "group": "Local Position Estimator", "longDesc": "EPV used if greater than this value.", "max": 2.0, "min": 0.01, "name": "LPE_GPS_VXY", "shortDesc": "GPS xy velocity standard deviation", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.25, "group": "Local Position Estimator", "max": 2.0, "min": 0.01, "name": "LPE_GPS_VZ", "shortDesc": "GPS z velocity standard deviation", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "Local Position Estimator", "max": 5.0, "min": 0.01, "name": "LPE_GPS_XY", "shortDesc": "Minimum GPS xy standard deviation, uses reported EPH if greater", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 3.0, "group": "Local Position Estimator", "max": 200.0, "min": 0.01, "name": "LPE_GPS_Z", "shortDesc": "Minimum GPS z standard deviation, uses reported EPV if greater", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.05, "group": "Local Position Estimator", "max": 10.0, "min": 0.01, "name": "LPE_LAND_VXY", "shortDesc": "Land detector xy velocity standard deviation", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.03, "group": "Local Position Estimator", "max": 10.0, "min": 0.001, "name": "LPE_LAND_Z", "shortDesc": "Land detector z standard deviation", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 8, "default": 47.397742, "group": "Local Position Estimator", "max": 90.0, "min": -90.0, "name": "LPE_LAT", "shortDesc": "Local origin latitude for nav w/o GPS", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Local Position Estimator", "max": 1.0, "min": -1.0, "name": "LPE_LDR_OFF_Z", "shortDesc": "Lidar z offset from center of vehicle +down", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.03, "group": "Local Position Estimator", "max": 1.0, "min": 0.01, "name": "LPE_LDR_Z", "shortDesc": "Lidar z standard deviation", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 8, "default": 8.545594, "group": "Local Position Estimator", "max": 180.0, "min": -180.0, "name": "LPE_LON", "shortDesc": "Local origin longitude for nav w/o GPS", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0001, "group": "Local Position Estimator", "max": 10.0, "min": 0.0, "name": "LPE_LT_COV", "shortDesc": "Minimum landing target standard covariance, uses reported covariance if greater", "type": "Float", "units": "m^2"}, {"category": "Standard", "decimalPlaces": 8, "default": 0.001, "group": "Local Position Estimator", "max": 1.0, "min": 0.0, "name": "LPE_PN_B", "shortDesc": "Accel bias propagation noise density", "type": "Float", "units": "m/s^3/sqrt(Hz)"}, {"category": "Standard", "decimalPlaces": 8, "default": 0.1, "group": "Local Position Estimator", "longDesc": "Increase to trust measurements more.\nDecrease to trust model more.", "max": 1.0, "min": 0.0, "name": "LPE_PN_P", "shortDesc": "Position propagation noise density", "type": "Float", "units": "m/s/sqrt(Hz)"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.001, "group": "Local Position Estimator", "max": 1.0, "min": 0.0, "name": "LPE_PN_T", "shortDesc": "Terrain random walk noise density, hilly/outdoor (0.1), flat/Indoor (0.001)", "type": "Float", "units": "m/s/sqrt(Hz)"}, {"category": "Standard", "decimalPlaces": 8, "default": 0.1, "group": "Local Position Estimator", "longDesc": "Increase to trust measurements more.\nDecrease to trust model more.", "max": 1.0, "min": 0.0, "name": "LPE_PN_V", "shortDesc": "Velocity propagation noise density", "type": "Float", "units": "m/s^2/sqrt(Hz)"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Local Position Estimator", "max": 1.0, "min": -1.0, "name": "LPE_SNR_OFF_Z", "shortDesc": "Sonar z offset from center of vehicle +down", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.05, "group": "Local Position Estimator", "max": 1.0, "min": 0.01, "name": "LPE_SNR_Z", "shortDesc": "Sonar z standard deviation", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 3, "default": 1.0, "group": "Local Position Estimator", "longDesc": "Used to calculate increased terrain random walk nosie due to movement.", "max": 100.0, "min": 0.0, "name": "LPE_T_MAX_GRADE", "shortDesc": "Terrain maximum percent grade, hilly/outdoor (100 = 45 deg), flat/Indoor (0 = 0 deg)", "type": "Float", "units": "%"}, {"category": "Standard", "decimalPlaces": 4, "default": 0.001, "group": "Local Position Estimator", "max": 1.0, "min": 0.0001, "name": "LPE_VIC_P", "shortDesc": "Vicon position standard deviation", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.1, "group": "Local Position Estimator", "longDesc": "Set to zero to enable automatic compensation from measurement timestamps", "max": 0.1, "min": 0.0, "name": "LPE_VIS_DELAY", "shortDesc": "Vision delay compensation", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.1, "group": "Local Position Estimator", "max": 1.0, "min": 0.01, "name": "LPE_VIS_XY", "shortDesc": "Vision xy standard deviation", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.5, "group": "Local Position Estimator", "max": 100.0, "min": 0.01, "name": "LPE_VIS_Z", "shortDesc": "Vision z standard deviation", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.3, "group": "Local Position Estimator", "max": 1.0, "min": 0.01, "name": "LPE_VXY_PUB", "shortDesc": "Required velocity xy standard deviation to publish position", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 0, "default": 5.0, "group": "Local Position Estimator", "max": 1000.0, "min": 5.0, "name": "LPE_X_LP", "shortDesc": "Cut frequency for state publication", "type": "Float", "units": "Hz"}, {"category": "Standard", "decimalPlaces": 1, "default": 1.0, "group": "Local Position Estimator", "max": 5.0, "min": 0.3, "name": "LPE_Z_PUB", "shortDesc": "Required z standard deviation to publish altitude/ terrain", "type": "Float", "units": "m"}, {"category": "Standard", "default": 1, "group": "MAVLink", "longDesc": "This allows a ground control station to automatically find the drone\non the local network.", "name": "MAV_0_BROADCAST", "shortDesc": "Broadcast heartbeats on local network for MAVLink instance 0", "type": "Int32", "values": [{"description": "Never broadcast", "value": 0}, {"description": "Always broadcast", "value": 1}, {"description": "Only multicast", "value": 2}]}, {"category": "Standard", "default": 2, "group": "MAVLink", "longDesc": "This is used to force flow control on or off for the the mavlink\ninstance. By default it is auto detected. Use when auto detection fails.", "name": "MAV_0_FLOW_CTRL", "rebootRequired": true, "shortDesc": "Enable serial flow control for instance 0", "type": "Int32", "values": [{"description": "Force off", "value": 0}, {"description": "Force on", "value": 1}, {"description": "Auto-detected", "value": 2}]}, {"category": "Standard", "default": 1, "group": "MAVLink", "longDesc": "If enabled, forward incoming MAVLink messages to other MAVLink ports if the\nmessage is either broadcast or the target is not the autopilot.\nThis allows for example a GCS to talk to a camera that is connected to the\nautopilot via MAVLink (on a different link than the GCS).", "name": "MAV_0_FORWARD", "rebootRequired": true, "shortDesc": "Enable MAVLink Message forwarding for instance 0", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 3, "default": 0.015, "group": "MAVLink", "increment": 0.001, "longDesc": "Positive real value that configures the transmission frequency of the\nHIGH_LATENCY2 stream for instance 0, configured in iridium mode.\nThis parameter has no effect if the instance mode is different from iridium.", "max": 50.0, "min": 0.0, "name": "MAV_0_HL_FREQ", "rebootRequired": true, "shortDesc": "Configures the frequency of HIGH_LATENCY2 stream for instance 0", "type": "Float", "units": "Hz"}, {"category": "Standard", "default": 0, "group": "MAVLink", "longDesc": "The MAVLink Mode defines the set of streamed messages (for example the\nvehicle's attitude) and their sending rates.", "name": "MAV_0_MODE", "rebootRequired": true, "shortDesc": "MAVLink Mode for instance 0", "type": "Int32", "values": [{"description": "Normal", "value": 0}, {"description": "Custom", "value": 1}, {"description": "Onboard", "value": 2}, {"description": "OSD", "value": 3}, {"description": "Magic", "value": 4}, {"description": "Config", "value": 5}, {"description": "Minimal", "value": 7}, {"description": "External Vision", "value": 8}, {"description": "Gimbal", "value": 10}, {"description": "Onboard Low Bandwidth", "value": 11}, {"description": "uAvionix", "value": 12}, {"description": "Low Bandwidth", "value": 13}]}, {"category": "Standard", "default": 1, "group": "MAVLink", "longDesc": "If enabled, MAVLink messages will be throttled according to\n`txbuf` field reported by radio_status.\nRequires a radio to send the mavlink message RADIO_STATUS.", "name": "MAV_0_RADIO_CTL", "rebootRequired": true, "shortDesc": "Enable software throttling of mavlink on instance 0", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 1200, "group": "MAVLink", "longDesc": "Configure the maximum sending rate for the MAVLink streams in Bytes/sec.\nIf the configured streams exceed the maximum rate, the sending rate of\neach stream is automatically decreased.\nIf this is set to 0 a value of half of the theoretical maximum bandwidth is used.\nThis corresponds to baudrate/20 Bytes/s (baudrate/10 = maximum data rate on\n8N1-configured links).", "min": 0, "name": "MAV_0_RATE", "rebootRequired": true, "shortDesc": "Maximum MAVLink sending rate for instance 0", "type": "Int32", "units": "B/s"}, {"category": "Standard", "default": 14550, "group": "MAVLink", "longDesc": "If ethernet enabled and selected as configuration for MAVLink instance 0,\nselected remote port will be set and used in MAVLink instance 0.", "name": "MAV_0_REMOTE_PRT", "rebootRequired": true, "shortDesc": "MAVLink Remote Port for instance 0", "type": "Int32"}, {"category": "Standard", "default": 14556, "group": "MAVLink", "longDesc": "If ethernet enabled and selected as configuration for MAVLink instance 0,\nselected udp port will be set and used in MAVLink instance 0.", "name": "MAV_0_UDP_PRT", "rebootRequired": true, "shortDesc": "MAVLink Network Port for instance 0", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "MAVLink", "longDesc": "This allows a ground control station to automatically find the drone\non the local network.", "name": "MAV_1_BROADCAST", "shortDesc": "Broadcast heartbeats on local network for MAVLink instance 1", "type": "Int32", "values": [{"description": "Never broadcast", "value": 0}, {"description": "Always broadcast", "value": 1}, {"description": "Only multicast", "value": 2}]}, {"category": "Standard", "default": 2, "group": "MAVLink", "longDesc": "This is used to force flow control on or off for the the mavlink\ninstance. By default it is auto detected. Use when auto detection fails.", "name": "MAV_1_FLOW_CTRL", "rebootRequired": true, "shortDesc": "Enable serial flow control for instance 1", "type": "Int32", "values": [{"description": "Force off", "value": 0}, {"description": "Force on", "value": 1}, {"description": "Auto-detected", "value": 2}]}, {"category": "Standard", "default": 0, "group": "MAVLink", "longDesc": "If enabled, forward incoming MAVLink messages to other MAVLink ports if the\nmessage is either broadcast or the target is not the autopilot.\nThis allows for example a GCS to talk to a camera that is connected to the\nautopilot via MAVLink (on a different link than the GCS).", "name": "MAV_1_FORWARD", "rebootRequired": true, "shortDesc": "Enable MAVLink Message forwarding for instance 1", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 3, "default": 0.015, "group": "MAVLink", "increment": 0.001, "longDesc": "Positive real value that configures the transmission frequency of the\nHIGH_LATENCY2 stream for instance 1, configured in iridium mode.\nThis parameter has no effect if the instance mode is different from iridium.", "max": 50.0, "min": 0.0, "name": "MAV_1_HL_FREQ", "rebootRequired": true, "shortDesc": "Configures the frequency of HIGH_LATENCY2 stream for instance 1", "type": "Float", "units": "Hz"}, {"category": "Standard", "default": 2, "group": "MAVLink", "longDesc": "The MAVLink Mode defines the set of streamed messages (for example the\nvehicle's attitude) and their sending rates.", "name": "MAV_1_MODE", "rebootRequired": true, "shortDesc": "MAVLink Mode for instance 1", "type": "Int32", "values": [{"description": "Normal", "value": 0}, {"description": "Custom", "value": 1}, {"description": "Onboard", "value": 2}, {"description": "OSD", "value": 3}, {"description": "Magic", "value": 4}, {"description": "Config", "value": 5}, {"description": "Minimal", "value": 7}, {"description": "External Vision", "value": 8}, {"description": "Gimbal", "value": 10}, {"description": "Onboard Low Bandwidth", "value": 11}, {"description": "uAvionix", "value": 12}, {"description": "Low Bandwidth", "value": 13}]}, {"category": "Standard", "default": 1, "group": "MAVLink", "longDesc": "If enabled, MAVLink messages will be throttled according to\n`txbuf` field reported by radio_status.\nRequires a radio to send the mavlink message RADIO_STATUS.", "name": "MAV_1_RADIO_CTL", "rebootRequired": true, "shortDesc": "Enable software throttling of mavlink on instance 1", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 0, "group": "MAVLink", "longDesc": "Configure the maximum sending rate for the MAVLink streams in Bytes/sec.\nIf the configured streams exceed the maximum rate, the sending rate of\neach stream is automatically decreased.\nIf this is set to 0 a value of half of the theoretical maximum bandwidth is used.\nThis corresponds to baudrate/20 Bytes/s (baudrate/10 = maximum data rate on\n8N1-configured links).", "min": 0, "name": "MAV_1_RATE", "rebootRequired": true, "shortDesc": "Maximum MAVLink sending rate for instance 1", "type": "Int32", "units": "B/s"}, {"category": "Standard", "default": 0, "group": "MAVLink", "longDesc": "If ethernet enabled and selected as configuration for MAVLink instance 1,\nselected remote port will be set and used in MAVLink instance 1.", "name": "MAV_1_REMOTE_PRT", "rebootRequired": true, "shortDesc": "MAVLink Remote Port for instance 1", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "MAVLink", "longDesc": "If ethernet enabled and selected as configuration for MAVLink instance 1,\nselected udp port will be set and used in MAVLink instance 1.", "name": "MAV_1_UDP_PRT", "rebootRequired": true, "shortDesc": "MAVLink Network Port for instance 1", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "MAVLink", "longDesc": "This allows a ground control station to automatically find the drone\non the local network.", "name": "MAV_2_BROADCAST", "shortDesc": "Broadcast heartbeats on local network for MAVLink instance 2", "type": "Int32", "values": [{"description": "Never broadcast", "value": 0}, {"description": "Always broadcast", "value": 1}, {"description": "Only multicast", "value": 2}]}, {"category": "Standard", "default": 2, "group": "MAVLink", "longDesc": "This is used to force flow control on or off for the the mavlink\ninstance. By default it is auto detected. Use when auto detection fails.", "name": "MAV_2_FLOW_CTRL", "rebootRequired": true, "shortDesc": "Enable serial flow control for instance 2", "type": "Int32", "values": [{"description": "Force off", "value": 0}, {"description": "Force on", "value": 1}, {"description": "Auto-detected", "value": 2}]}, {"category": "Standard", "default": 0, "group": "MAVLink", "longDesc": "If enabled, forward incoming MAVLink messages to other MAVLink ports if the\nmessage is either broadcast or the target is not the autopilot.\nThis allows for example a GCS to talk to a camera that is connected to the\nautopilot via MAVLink (on a different link than the GCS).", "name": "MAV_2_FORWARD", "rebootRequired": true, "shortDesc": "Enable MAVLink Message forwarding for instance 2", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 3, "default": 0.015, "group": "MAVLink", "increment": 0.001, "longDesc": "Positive real value that configures the transmission frequency of the\nHIGH_LATENCY2 stream for instance 2, configured in iridium mode.\nThis parameter has no effect if the instance mode is different from iridium.", "max": 50.0, "min": 0.0, "name": "MAV_2_HL_FREQ", "rebootRequired": true, "shortDesc": "Configures the frequency of HIGH_LATENCY2 stream for instance 2", "type": "Float", "units": "Hz"}, {"category": "Standard", "default": 0, "group": "MAVLink", "longDesc": "The MAVLink Mode defines the set of streamed messages (for example the\nvehicle's attitude) and their sending rates.", "name": "MAV_2_MODE", "rebootRequired": true, "shortDesc": "MAVLink Mode for instance 2", "type": "Int32", "values": [{"description": "Normal", "value": 0}, {"description": "Custom", "value": 1}, {"description": "Onboard", "value": 2}, {"description": "OSD", "value": 3}, {"description": "Magic", "value": 4}, {"description": "Config", "value": 5}, {"description": "Minimal", "value": 7}, {"description": "External Vision", "value": 8}, {"description": "Gimbal", "value": 10}, {"description": "Onboard Low Bandwidth", "value": 11}, {"description": "uAvionix", "value": 12}, {"description": "Low Bandwidth", "value": 13}]}, {"category": "Standard", "default": 1, "group": "MAVLink", "longDesc": "If enabled, MAVLink messages will be throttled according to\n`txbuf` field reported by radio_status.\nRequires a radio to send the mavlink message RADIO_STATUS.", "name": "MAV_2_RADIO_CTL", "rebootRequired": true, "shortDesc": "Enable software throttling of mavlink on instance 2", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 0, "group": "MAVLink", "longDesc": "Configure the maximum sending rate for the MAVLink streams in Bytes/sec.\nIf the configured streams exceed the maximum rate, the sending rate of\neach stream is automatically decreased.\nIf this is set to 0 a value of half of the theoretical maximum bandwidth is used.\nThis corresponds to baudrate/20 Bytes/s (baudrate/10 = maximum data rate on\n8N1-configured links).", "min": 0, "name": "MAV_2_RATE", "rebootRequired": true, "shortDesc": "Maximum MAVLink sending rate for instance 2", "type": "Int32", "units": "B/s"}, {"category": "Standard", "default": 0, "group": "MAVLink", "longDesc": "If ethernet enabled and selected as configuration for MAVLink instance 2,\nselected remote port will be set and used in MAVLink instance 2.", "name": "MAV_2_REMOTE_PRT", "rebootRequired": true, "shortDesc": "MAVLink Remote Port for instance 2", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "MAVLink", "longDesc": "If ethernet enabled and selected as configuration for MAVLink instance 2,\nselected udp port will be set and used in MAVLink instance 2.", "name": "MAV_2_UDP_PRT", "rebootRequired": true, "shortDesc": "MAVLink Network Port for instance 2", "type": "Int32"}, {"category": "Standard", "default": 1, "group": "MAVLink", "max": 250, "min": 1, "name": "MAV_COMP_ID", "rebootRequired": true, "shortDesc": "MAVLink component ID", "type": "Int32"}, {"category": "Standard", "default": 1, "group": "MAVLink", "longDesc": "If set to 1 incoming external setpoint messages will be directly forwarded\nto the controllers if in offboard control mode", "name": "MAV_FWDEXTSP", "shortDesc": "Forward external setpoint messages", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 1, "group": "MAVLink", "longDesc": "Disabling the parameter hash check functionality will make the mavlink instance\nstream parameters continuously.", "name": "MAV_HASH_CHK_EN", "shortDesc": "Parameter hash check", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 1, "group": "MAVLink", "longDesc": "The mavlink heartbeat message will not be forwarded if this parameter is set to 'disabled'.\nThe main reason for disabling heartbeats to be forwarded is because they confuse dronekit.", "name": "MAV_HB_FORW_EN", "shortDesc": "Heartbeat message forwarding", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 2, "group": "MAVLink", "name": "MAV_PROTO_VER", "shortDesc": "MAVLink protocol version", "type": "Int32", "values": [{"description": "Version 1 with auto-upgrade to v2 if detected", "value": 1}, {"description": "Version 2", "value": 2}]}, {"category": "Standard", "default": 5, "group": "MAVLink", "longDesc": "If the connected radio stops reporting RADIO_STATUS for a certain time,\na warning is triggered and, if MAV_X_RADIO_CTL is enabled, the software-flow\ncontrol is reset.", "max": 250, "min": 1, "name": "MAV_RADIO_TOUT", "shortDesc": "Timeout in seconds for the RADIO_STATUS reports coming in", "type": "Int32", "units": "s"}, {"category": "Standard", "default": 0, "group": "MAVLink", "longDesc": "When non-zero the MAVLink app will attempt to configure the\nSiK radio to this ID and re-set the parameter to 0. If the value\nis negative it will reset the complete radio config to\nfactory defaults. Only applies if this mavlink instance is going through a SiK radio", "max": 240, "min": -1, "name": "MAV_SIK_RADIO_ID", "shortDesc": "MAVLink SiK Radio ID", "type": "Int32"}, {"category": "Standard", "default": 1, "group": "MAVLink", "max": 250, "min": 1, "name": "MAV_SYS_ID", "rebootRequired": true, "shortDesc": "MAVLink system ID", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "MAVLink", "longDesc": "TELEM2 on Skynode only.", "name": "MAV_S_FORWARD", "rebootRequired": true, "shortDesc": "Enable MAVLink forwarding on TELEM2", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 11, "group": "MAVLink", "longDesc": "The MAVLink Mode defines the set of streamed messages (for example the\nvehicle's attitude) and their sending rates.", "name": "MAV_S_MODE", "rebootRequired": true, "shortDesc": "MAVLink Mode for SOM to FMU communication channel", "type": "Int32", "values": [{"description": "Normal", "value": 0}, {"description": "Onboard", "value": 2}, {"description": "Config", "value": 5}, {"description": "Minimal", "value": 7}, {"description": "Onboard Low Bandwidth", "value": 11}, {"description": "Low Bandwidth", "value": 13}]}, {"category": "Standard", "default": 0, "group": "MAVLink", "max": 22, "min": 0, "name": "MAV_TYPE", "shortDesc": "MAVLink airframe type", "type": "Int32", "values": [{"description": "Generic micro air vehicle", "value": 0}, {"description": "Fixed wing aircraft", "value": 1}, {"description": "Quadrotor", "value": 2}, {"description": "Coaxial helicopter", "value": 3}, {"description": "Normal helicopter with tail rotor", "value": 4}, {"description": "Airship, controlled", "value": 7}, {"description": "Free balloon, uncontrolled", "value": 8}, {"description": "Ground rover", "value": 10}, {"description": "Surface vessel, boat, ship", "value": 11}, {"description": "Submarine", "value": 12}, {"description": "Hexarotor", "value": 13}, {"description": "Octorotor", "value": 14}, {"description": "Tricopter", "value": 15}, {"description": "VTOL Two-rotor Tailsitter", "value": 19}, {"description": "VTOL Quad-rotor Tailsitter", "value": 20}, {"description": "VTOL Tiltrotor", "value": 21}, {"description": "VTOL Standard (separate fixed rotors for hover and cruise flight)", "value": 22}, {"description": "VTOL Tailsitter", "value": 23}]}, {"category": "Standard", "default": 0, "group": "MAVLink", "longDesc": "If set to 1 incoming HIL GPS messages are parsed.", "name": "MAV_USEHILGPS", "shortDesc": "Use/Accept HIL GPS message even if not in HIL mode", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 1, "group": "Magnetometer Bias Estimator", "longDesc": "This enables continuous calibration of the magnetometers\nbefore takeoff using gyro data.", "name": "MBE_ENABLE", "rebootRequired": true, "shortDesc": "Enable online mag bias calibration", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 1, "default": 18.0, "group": "Magnetometer Bias Estimator", "increment": 0.1, "longDesc": "Increase to make the estimator more responsive\nDecrease to make the estimator more robust to noise", "max": 100.0, "min": 0.1, "name": "MBE_LEARN_GAIN", "shortDesc": "Mag bias estimator learning gain", "type": "Float"}, {"category": "Standard", "default": 1, "group": "Manual Control", "longDesc": "This determines if moving the left stick to the lower right\narms and to the lower left disarms the vehicle.", "name": "MAN_ARM_GESTURE", "shortDesc": "Enable arm/disarm stick gesture", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.1, "group": "Manual Control", "increment": 0.01, "longDesc": "Range around stick center ignored to prevent\nvehicle drift from stick hardware inaccuracy.\nDoes not apply to any precise constant input like\nthrottle and attitude or rate piloting.", "max": 1.0, "min": 0.0, "name": "MAN_DEADZONE", "shortDesc": "Deadzone for sticks (only specific use cases)", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": -1.0, "group": "Manual Control", "longDesc": "The timeout for holding the left stick to the lower left\nand the right stick to the lower right at the same time until the gesture\nkills the actuators one-way.\nA negative value disables the feature.", "max": 15.0, "min": -1.0, "name": "MAN_KILL_GEST_T", "shortDesc": "Trigger time for kill stick gesture", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "Mission", "longDesc": "Ensure:\ngripper: NAV_CMD_DO_GRIPPER\nhas released before continuing mission.\nwinch: CMD_DO_WINCH\nhas delivered before continuing mission.\ngimbal: CMD_DO_GIMBAL_MANAGER_PITCHYAW\nhas reached the commanded orientation before beginning to take pictures.", "min": 0.0, "name": "MIS_COMMAND_TOUT", "shortDesc": "Timeout to allow the payload to execute the mission command", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 1, "default": 10000.0, "group": "Mission", "increment": 100.0, "longDesc": "There will be a warning message if the current waypoint is more distant than MIS_DIST_1WP from Home.\nHas no effect on mission validity.\nSet a value of zero or less to disable.", "max": 100000.0, "min": -1.0, "name": "MIS_DIST_1WP", "shortDesc": "Maximal horizontal distance from Home to first waypoint", "type": "Float", "units": "m"}, {"category": "Standard", "default": 30, "group": "Mission", "longDesc": "Minimum altitude above landing point that the vehicle will climb to after an aborted landing.\nThen vehicle will loiter in this altitude until further command is received.\nOnly applies to fixed-wing vehicles.", "min": 0, "name": "MIS_LND_ABRT_ALT", "shortDesc": "Landing abort min altitude", "type": "Int32", "units": "m"}, {"category": "Standard", "default": 0, "group": "Mission", "longDesc": "If enabled, yaw commands will be sent to the mount and the vehicle will follow its heading towards the flight direction.\nIf disabled, the vehicle will yaw towards the ROI.", "max": 1, "min": 0, "name": "MIS_MNT_YAW_CTL", "shortDesc": "Enable yaw control of the mount. (Only affects multicopters and ROI mission items)", "type": "Int32", "values": [{"description": "Disable", "value": 0}, {"description": "Enable", "value": 1}]}, {"category": "Standard", "decimalPlaces": 1, "default": 2.5, "group": "Mission", "increment": 0.5, "longDesc": "This is the relative altitude the system will take off to\nif not otherwise specified.", "min": 0.0, "name": "MIS_TAKEOFF_ALT", "shortDesc": "Default take-off altitude", "type": "Float", "units": "m"}, {"category": "Standard", "default": 0, "group": "Mission", "longDesc": "Specifies if a mission has to contain a takeoff and/or mission landing.\nValidity of configured takeoffs/landings is checked independently of the setting here.", "name": "MIS_TKO_LAND_REQ", "shortDesc": "Mission takeoff/landing required", "type": "Int32", "values": [{"description": "No requirements", "value": 0}, {"description": "Require a takeoff", "value": 1}, {"description": "Require a landing", "value": 2}, {"description": "Require a takeoff and a landing", "value": 3}, {"description": "Require both a takeoff and a landing, or neither", "value": 4}, {"description": "Same as previous when landed, in-air require landing only if no valid VTOL approach is present", "value": 5}]}, {"category": "Standard", "decimalPlaces": 1, "default": 12.0, "group": "Mission", "increment": 1.0, "max": 90.0, "min": 0.0, "name": "MIS_YAW_ERR", "shortDesc": "Max yaw error in degrees needed for waypoint heading acceptance", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 1, "default": -1.0, "group": "Mission", "increment": 1.0, "longDesc": "If set > 0 it will ignore the target heading for normal waypoint acceptance. If the\nwaypoint forces the heading the timeout will matter. For example on VTOL forwards transition.\nMainly useful for VTOLs that have less yaw authority and might not reach target\nyaw in wind. Disabled by default.", "max": 20.0, "min": -1.0, "name": "MIS_YAW_TMT", "shortDesc": "Time in seconds we wait on reaching target heading at a waypoint if it is forced", "type": "Float", "units": "s"}, {"category": "Standard", "default": 0, "group": "Mission", "max": 4, "min": 0, "name": "MPC_YAW_MODE", "shortDesc": "Heading behavior in autonomous modes", "type": "Int32", "values": [{"description": "towards waypoint", "value": 0}, {"description": "towards home", "value": 1}, {"description": "away from home", "value": 2}, {"description": "along trajectory", "value": 3}, {"description": "towards waypoint (yaw first)", "value": 4}, {"description": "yaw fixed", "value": 5}]}, {"category": "Standard", "decimalPlaces": 1, "default": 10.0, "group": "Mission", "increment": 0.5, "longDesc": "Default acceptance radius, overridden by acceptance radius of waypoint if set.\nFor fixed wing the npfg switch distance is used for horizontal acceptance.", "max": 200.0, "min": 0.05, "name": "NAV_ACC_RAD", "shortDesc": "Acceptance Radius", "type": "Float", "units": "m"}, {"category": "Standard", "default": 1, "group": "Mission", "name": "NAV_FORCE_VT", "shortDesc": "Force VTOL mode takeoff and land", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 1, "default": 5.0, "group": "Mission", "longDesc": "Altitude acceptance used for the last waypoint before a fixed-wing landing. This is usually smaller\nthan the standard vertical acceptance because close to the ground higher accuracy is required.", "max": 200.0, "min": 0.05, "name": "NAV_FW_ALTL_RAD", "shortDesc": "FW Altitude Acceptance Radius before a landing", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 1, "default": 10.0, "group": "Mission", "increment": 0.5, "longDesc": "Acceptance radius for fixedwing altitude.", "max": 200.0, "min": 0.05, "name": "NAV_FW_ALT_RAD", "shortDesc": "FW Altitude Acceptance Radius", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 1, "default": 80.0, "group": "Mission", "increment": 0.5, "longDesc": "Default value of loiter radius in fixed-wing mode (e.g. for Loiter mode).\nThe direction of the loiter can be set via the sign: A positive value for\nclockwise, negative for counter-clockwise.", "max": 10000.0, "min": -10000.0, "name": "NAV_LOITER_RAD", "shortDesc": "Loiter radius (FW only)", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.8, "group": "Mission", "increment": 0.5, "longDesc": "Acceptance radius for multicopter altitude.", "max": 200.0, "min": 0.05, "name": "NAV_MC_ALT_RAD", "shortDesc": "MC Altitude Acceptance Radius", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 1, "default": -1.0, "group": "Mission", "increment": 1.0, "longDesc": "Minimum height above ground the vehicle is allowed to descend to during Mission and RTL,\nexcluding landing commands.\nRequires a distance sensor to be set up.\nNote: only prevents the vehicle from descending further, but does not force it to climb.\nSet to a negative value to disable.", "min": -1.0, "name": "NAV_MIN_GND_DIST", "shortDesc": "Minimum height above ground during Mission and RTL", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 1, "default": -1.0, "group": "Mission", "increment": 0.5, "longDesc": "This is the minimum altitude above Home the system will always obey in Loiter (Hold) mode if switched into this\nmode without specifying an altitude (e.g. through Loiter switch on RC).\nDoesn't affect Loiters that are part of Missions or that are entered through a reposition setpoint (\"Go to\").\nSet to a negative value to disable.", "min": -1.0, "name": "NAV_MIN_LTR_ALT", "shortDesc": "Minimum Loiter altitude", "type": "Float", "units": "m"}, {"category": "Standard", "default": 1, "group": "Mission", "longDesc": "Enabling this will allow the system to respond\nto transponder data from e.g. ADSB transponders", "name": "NAV_TRAFF_AVOID", "shortDesc": "Set traffic avoidance mode", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Warn only", "value": 1}, {"description": "Return mode", "value": 2}, {"description": "Land mode", "value": 3}, {"description": "Position Hold mode", "value": 4}]}, {"category": "Standard", "default": 500.0, "group": "Mission", "longDesc": "Defines a crosstrack horizontal distance", "min": 500.0, "name": "NAV_TRAFF_A_HOR", "shortDesc": "Set NAV TRAFFIC AVOID horizontal distance", "type": "Float", "units": "m"}, {"category": "Standard", "default": 500.0, "group": "Mission", "max": 500.0, "min": 10.0, "name": "NAV_TRAFF_A_VER", "shortDesc": "Set NAV TRAFFIC AVOID vertical distance", "type": "Float", "units": "m"}, {"category": "Standard", "default": 60, "group": "Mission", "longDesc": "Minimum acceptable time until collsion.\nAssumes constant speed over 3d distance.", "max": 900000000, "min": 1, "name": "NAV_TRAFF_COLL_T", "shortDesc": "Estimated time until collision", "type": "Int32", "units": "s"}, {"category": "Standard", "default": 0, "group": "Mixer Output", "longDesc": "The air-mode enables the mixer to increase the total thrust of the multirotor\nin order to keep attitude and rate control even at low and high throttle.\nThis function should be disabled during tuning as it will help the controller\nto diverge if the closed-loop is unstable (i.e. the vehicle is not tuned yet).\nEnabling air-mode for yaw requires the use of an arming switch.", "name": "MC_AIRMODE", "shortDesc": "Multicopter air-mode", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Roll/Pitch", "value": 1}, {"description": "Roll/Pitch/Yaw", "value": 2}]}, {"category": "Standard", "default": 0, "group": "Mount", "longDesc": "Set to true for servo gimbal, false for passthrough.\nThis is required for a gimbal which is not capable of stabilizing itself\nand relies on the IMU's attitude estimation.", "name": "MNT_DO_STAB", "shortDesc": "Stabilize the mount", "type": "Int32", "values": [{"description": "Disable", "value": 0}, {"description": "Stabilize all axis", "value": 1}, {"description": "Stabilize yaw for absolute/lock mode.", "value": 2}, {"description": "Stabilize pitch for absolute/lock mode.", "value": 3}]}, {"category": "Standard", "decimalPlaces": 1, "default": 90.0, "group": "Mount", "max": 90.0, "min": -90.0, "name": "MNT_LND_P_MAX", "shortDesc": "Pitch maximum when landed", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 1, "default": -90.0, "group": "Mount", "max": 90.0, "min": -90.0, "name": "MNT_LND_P_MIN", "shortDesc": "Pitch minimum when landed", "type": "Float", "units": "deg"}, {"category": "Standard", "default": 0, "group": "Mount", "max": 6, "min": 0, "name": "MNT_MAN_PITCH", "shortDesc": "Auxiliary channel to control pitch (in AUX input or manual mode)", "type": "Int32", "values": [{"description": "Disable", "value": 0}, {"description": "AUX1", "value": 1}, {"description": "AUX2", "value": 2}, {"description": "AUX3", "value": 3}, {"description": "AUX4", "value": 4}, {"description": "AUX5", "value": 5}, {"description": "AUX6", "value": 6}]}, {"category": "Standard", "default": 0, "group": "Mount", "max": 6, "min": 0, "name": "MNT_MAN_ROLL", "shortDesc": "Auxiliary channel to control roll (in AUX input or manual mode)", "type": "Int32", "values": [{"description": "Disable", "value": 0}, {"description": "AUX1", "value": 1}, {"description": "AUX2", "value": 2}, {"description": "AUX3", "value": 3}, {"description": "AUX4", "value": 4}, {"description": "AUX5", "value": 5}, {"description": "AUX6", "value": 6}]}, {"category": "Standard", "default": 0, "group": "Mount", "max": 6, "min": 0, "name": "MNT_MAN_YAW", "shortDesc": "Auxiliary channel to control yaw (in AUX input or manual mode)", "type": "Int32", "values": [{"description": "Disable", "value": 0}, {"description": "AUX1", "value": 1}, {"description": "AUX2", "value": 2}, {"description": "AUX3", "value": 3}, {"description": "AUX4", "value": 4}, {"description": "AUX5", "value": 5}, {"description": "AUX6", "value": 6}]}, {"category": "Standard", "default": 154, "group": "Mount", "longDesc": "If MNT_MODE_OUT is MAVLink protocol v2, mount configure/control commands will be sent with this component ID.", "name": "MNT_MAV_COMPID", "shortDesc": "Mavlink Component ID of the mount", "type": "Int32"}, {"category": "Standard", "default": 1, "group": "Mount", "longDesc": "If MNT_MODE_OUT is MAVLink gimbal protocol v1, mount configure/control commands will be sent with this target ID.", "name": "MNT_MAV_SYSID", "shortDesc": "Mavlink System ID of the mount", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 1, "default": 45.0, "group": "Mount", "longDesc": "Use output driver settings to calibrate (e.g. PWM_CENT/_MIN/_MAX).", "name": "MNT_MAX_PITCH", "shortDesc": "Max positive angle of pitch setpoint (only in MNT_MODE_OUT=AUX)", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 1, "default": -45.0, "group": "Mount", "longDesc": "Use output driver settings to calibrate (e.g. PWM_CENT/_MIN/_MAX).", "name": "MNT_MIN_PITCH", "shortDesc": "Min negative angle of pitch setpoint (only in MNT_MODE_OUT=AUX)", "type": "Float", "units": "deg"}, {"category": "Standard", "default": -1, "group": "Mount", "longDesc": "This is the protocol used between the ground station and the autopilot.\nRecommended is Auto, RC only or MAVLink gimbal protocol v2.\nThe rest will be deprecated.", "max": 4, "min": -1, "name": "MNT_MODE_IN", "rebootRequired": true, "shortDesc": "Mount input mode", "type": "Int32", "values": [{"description": "DISABLED", "value": -1}, {"description": "Auto (RC and MAVLink gimbal protocol v2)", "value": 0}, {"description": "RC", "value": 1}, {"description": "MAVLINK_ROI (protocol v1, to be deprecated)", "value": 2}, {"description": "MAVLINK_DO_MOUNT (protocol v1, to be deprecated)", "value": 3}, {"description": "MAVlink gimbal protocol v2", "value": 4}]}, {"category": "Standard", "default": 0, "group": "Mount", "longDesc": "This is the protocol used between the autopilot and a connected gimbal.\nRecommended is the MAVLink gimbal protocol v2 if the gimbal supports it.", "max": 2, "min": 0, "name": "MNT_MODE_OUT", "rebootRequired": true, "shortDesc": "Mount output mode", "type": "Int32", "values": [{"description": "AUX", "value": 0}, {"description": "MAVLink gimbal protocol v1", "value": 1}, {"description": "MAVLink gimbal protocol v2", "value": 2}]}, {"category": "Standard", "decimalPlaces": 1, "default": 90.0, "group": "Mount", "longDesc": "Use output driver settings to calibrate (e.g. PWM_CENT/_MIN/_MAX). Note that only symmetric angular ranges are supported.", "max": 720.0, "min": 1.0, "name": "MNT_RANGE_ROLL", "shortDesc": "Range of roll channel output (only in MNT_MODE_OUT=AUX)", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 1, "default": 360.0, "group": "Mount", "longDesc": "Use output driver settings to calibrate (e.g. PWM_CENT/_MIN/_MAX). Note that only symmetric angular ranges are supported.", "max": 720.0, "min": 1.0, "name": "MNT_RANGE_YAW", "shortDesc": "Range of yaw channel output (only in MNT_MODE_OUT=AUX)", "type": "Float", "units": "deg"}, {"category": "Standard", "default": 30.0, "group": "Mount", "longDesc": "Full stick input [-1..1] translats to [-pitch rate..pitch rate].", "max": 90.0, "min": 1.0, "name": "MNT_RATE_PITCH", "shortDesc": "Angular pitch rate for manual input in degrees/second", "type": "Float", "units": "deg/s"}, {"category": "Standard", "default": 30.0, "group": "Mount", "longDesc": "Full stick input [-1..1] translats to [-yaw rate..yaw rate].", "max": 90.0, "min": 1.0, "name": "MNT_RATE_YAW", "shortDesc": "Angular yaw rate for manual input in degrees/second", "type": "Float", "units": "deg/s"}, {"category": "Standard", "default": 1, "group": "Mount", "max": 1, "min": 0, "name": "MNT_RC_IN_MODE", "shortDesc": "Input mode for RC gimbal input", "type": "Int32", "values": [{"description": "Angle", "value": 0}, {"description": "Angular rate", "value": 1}]}, {"category": "Standard", "default": 0.3, "group": "Mount", "longDesc": "Use when no angular position feedback is available.\nWith MNT_MODE_OUT set to AUX, the mount operates in open-loop and directly commands the servo output.\nParameters must be tuned for the specific servo to approximate its speed and response.", "min": 0.0, "name": "MNT_TAU", "shortDesc": "Alpha filter time constant defining the convergence rate (in seconds) for open-loop AUX mount control", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Multicopter Acro Mode", "longDesc": "Exponential factor for tuning the input curve shape.\n0 Purely linear input curve\n1 Purely cubic input curve", "max": 1.0, "min": 0.0, "name": "MC_ACRO_EXPO", "shortDesc": "Acro mode roll, pitch expo factor", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Multicopter Acro Mode", "longDesc": "Exponential factor for tuning the input curve shape.\n0 Purely linear input curve\n1 Purely cubic input curve", "max": 1.0, "min": 0.0, "name": "MC_ACRO_EXPO_Y", "shortDesc": "Acro mode yaw expo factor", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 100.0, "group": "Multicopter Acro Mode", "increment": 5.0, "longDesc": "Full stick deflection leads to this rate.", "max": 1800.0, "min": 0.0, "name": "MC_ACRO_P_MAX", "shortDesc": "Acro mode maximum pitch rate", "type": "Float", "units": "deg/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 100.0, "group": "Multicopter Acro Mode", "increment": 5.0, "longDesc": "Full stick deflection leads to this rate.", "max": 1800.0, "min": 0.0, "name": "MC_ACRO_R_MAX", "shortDesc": "Acro mode maximum roll rate", "type": "Float", "units": "deg/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Multicopter Acro Mode", "longDesc": "\"Superexponential\" factor for refining the input curve shape tuned using MC_ACRO_EXPO.\n0 Pure Expo function\n0.7 reasonable shape enhancement for intuitive stick feel\n0.95 very strong bent input curve only near maxima have effect", "max": 0.95, "min": 0.0, "name": "MC_ACRO_SUPEXPO", "shortDesc": "Acro mode roll, pitch super expo factor", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Multicopter Acro Mode", "longDesc": "\"Superexponential\" factor for refining the input curve shape tuned using MC_ACRO_EXPO_Y.\n0 Pure Expo function\n0.7 reasonable shape enhancement for intuitive stick feel\n0.95 very strong bent input curve only near maxima have effect", "max": 0.95, "min": 0.0, "name": "MC_ACRO_SUPEXPOY", "shortDesc": "Acro mode yaw super expo factor", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 100.0, "group": "Multicopter Acro Mode", "increment": 5.0, "longDesc": "Full stick deflection leads to this rate.", "max": 1800.0, "min": 0.0, "name": "MC_ACRO_Y_MAX", "shortDesc": "Acro mode maximum yaw rate", "type": "Float", "units": "deg/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 220.0, "group": "Multicopter Attitude Control", "increment": 5.0, "longDesc": "Limit for pitch rate in manual and auto modes (except acro).\nHas effect for large rotations in autonomous mode, to avoid large control\noutput and mixer saturation.\nThis is not only limited by the vehicle's properties, but also by the maximum\nmeasurement rate of the gyro.", "max": 1800.0, "min": 0.0, "name": "MC_PITCHRATE_MAX", "shortDesc": "Max pitch rate", "type": "Float", "units": "deg/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 4.0, "group": "Multicopter Attitude Control", "increment": 0.1, "longDesc": "Pitch proportional gain, i.e. desired angular speed in rad/s for error 1 rad.", "max": 12.0, "min": 0.0, "name": "MC_PITCH_P", "shortDesc": "Pitch P gain", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 220.0, "group": "Multicopter Attitude Control", "increment": 5.0, "longDesc": "Limit for roll rate in manual and auto modes (except acro).\nHas effect for large rotations in autonomous mode, to avoid large control\noutput and mixer saturation.\nThis is not only limited by the vehicle's properties, but also by the maximum\nmeasurement rate of the gyro.", "max": 1800.0, "min": 0.0, "name": "MC_ROLLRATE_MAX", "shortDesc": "Max roll rate", "type": "Float", "units": "deg/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 4.0, "group": "Multicopter Attitude Control", "increment": 0.1, "longDesc": "Roll proportional gain, i.e. desired angular speed in rad/s for error 1 rad.", "max": 12.0, "min": 0.0, "name": "MC_ROLL_P", "shortDesc": "Roll P gain", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 200.0, "group": "Multicopter Attitude Control", "increment": 5.0, "max": 1800.0, "min": 0.0, "name": "MC_YAWRATE_MAX", "shortDesc": "Max yaw rate", "type": "Float", "units": "deg/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 2.8, "group": "Multicopter Attitude Control", "increment": 0.1, "longDesc": "Yaw proportional gain, i.e. desired angular speed in rad/s for error 1 rad.", "max": 5.0, "min": 0.0, "name": "MC_YAW_P", "shortDesc": "Yaw P gain", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.4, "group": "Multicopter Attitude Control", "increment": 0.1, "longDesc": "A fraction [0,1] deprioritizing yaw compared to roll and pitch in non-linear attitude control.\nDeprioritizing yaw is necessary because multicopters have much less control authority\nin yaw compared to the other axes and it makes sense because yaw is not critical for\nstable hovering or 3D navigation.\nFor yaw control tuning use MC_YAW_P. This ratio has no impact on the yaw gain.", "max": 1.0, "min": 0.0, "name": "MC_YAW_WEIGHT", "shortDesc": "Yaw weight", "type": "Float"}, {"category": "Standard", "decimalPlaces": 0, "default": 20.0, "group": "Multicopter Attitude Control", "increment": 5.0, "longDesc": "Limits the acceleration of the yaw setpoint to avoid large\ncontrol output and mixer saturation.", "max": 360.0, "min": 5.0, "name": "MPC_YAWRAUTO_ACC", "shortDesc": "Maximum yaw acceleration in autonomous modes", "type": "Float", "units": "deg/s^2"}, {"category": "Standard", "decimalPlaces": 0, "default": 60.0, "group": "Multicopter Attitude Control", "increment": 5.0, "longDesc": "Limits the rate of change of the yaw setpoint to avoid large\ncontrol output and mixer saturation.", "max": 360.0, "min": 5.0, "name": "MPC_YAWRAUTO_MAX", "shortDesc": "Maximum yaw rate in autonomous modes", "type": "Float", "units": "deg/s"}, {"category": "Standard", "default": 0.4, "group": "Multicopter Position Control", "longDesc": "Only used in Position mode.", "max": 1.0, "min": 0.0, "name": "CP_DELAY", "shortDesc": "Average delay of the range sensor message plus the tracking delay of the position controller in seconds", "type": "Float", "units": "s"}, {"category": "Standard", "default": -1.0, "group": "Multicopter Position Control", "longDesc": "Only used in Position mode. Collision avoidance is disabled by setting this parameter to a negative value", "max": 15.0, "min": -1.0, "name": "CP_DIST", "shortDesc": "Minimum distance the vehicle should keep to all obstacles", "type": "Float", "units": "m"}, {"category": "Standard", "default": 0, "group": "Multicopter Position Control", "longDesc": "Only used in Position mode.", "name": "CP_GO_NO_DATA", "shortDesc": "Boolean to allow moving into directions where there is no sensor data (outside FOV)", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 30.0, "group": "Multicopter Position Control", "longDesc": "Only used in Position mode.", "max": 90.0, "min": 0.0, "name": "CP_GUIDE_ANG", "shortDesc": "Angle left/right from the commanded setpoint by which the collision prevention algorithm can choose to change the setpoint direction", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Multicopter Position Control", "longDesc": "Setting this parameter to 0 disables the filter", "max": 2.0, "min": 0.0, "name": "MC_MAN_TILT_TAU", "shortDesc": "Manual tilt input filter time constant", "type": "Float", "units": "s"}, {"category": "Standard", "default": 1, "group": "Multicopter Position Control", "longDesc": "Set to decouple tilt from vertical acceleration.\nThis provides smoother flight but slightly worse tracking in position and auto modes.\nUnset if accurate position tracking during dynamic maneuvers is more important than a smooth flight.", "name": "MPC_ACC_DECOUPLE", "shortDesc": "Acceleration to tilt coupling", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 1, "default": 3.0, "group": "Multicopter Position Control", "increment": 1.0, "max": 15.0, "min": 2.0, "name": "MPC_ACC_DOWN_MAX", "shortDesc": "Maximum downwards acceleration in climb rate controlled modes", "type": "Float", "units": "m/s^2"}, {"category": "Standard", "decimalPlaces": 1, "default": 3.0, "group": "Multicopter Position Control", "increment": 1.0, "longDesc": "When piloting manually, this parameter is only used in MPC_POS_MODE Acceleration based.", "max": 15.0, "min": 2.0, "name": "MPC_ACC_HOR", "shortDesc": "Acceleration for autonomous and for manual modes", "type": "Float", "units": "m/s^2"}, {"category": "Standard", "decimalPlaces": 2, "default": 5.0, "group": "Multicopter Position Control", "increment": 1.0, "longDesc": "MPC_POS_MODE\n1 just deceleration\n4 not used, use MPC_ACC_HOR instead", "max": 15.0, "min": 2.0, "name": "MPC_ACC_HOR_MAX", "shortDesc": "Maximum horizontal acceleration", "type": "Float", "units": "m/s^2"}, {"category": "Standard", "decimalPlaces": 1, "default": 4.0, "group": "Multicopter Position Control", "increment": 1.0, "max": 15.0, "min": 2.0, "name": "MPC_ACC_UP_MAX", "shortDesc": "Maximum upwards acceleration in climb rate controlled modes", "type": "Float", "units": "m/s^2"}, {"category": "Standard", "default": 2, "group": "Multicopter Position Control", "longDesc": "Control height\n0: relative earth frame origin which may drift due to sensors\n1: relative to ground (requires distance sensor) which changes with terrain variation.\nIt will revert to relative earth frame if the distance to ground estimate becomes invalid.\n2: relative to ground (requires distance sensor) when stationary\nand relative to earth frame when moving horizontally.\nThe speed threshold is MPC_HOLD_MAX_XY", "max": 2, "min": 0, "name": "MPC_ALT_MODE", "shortDesc": "Altitude reference mode", "type": "Int32", "values": [{"description": "Altitude following", "value": 0}, {"description": "Terrain following", "value": 1}, {"description": "Terrain hold", "value": 2}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.8, "group": "Multicopter Position Control", "longDesc": "Only used with MPC_POS_MODE Direct velocity or MPC_ALT_MODE 2", "max": 3.0, "min": 0.0, "name": "MPC_HOLD_MAX_XY", "shortDesc": "Maximum horizontal velocity for which position hold is enabled (use 0 to disable check)", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.6, "group": "Multicopter Position Control", "longDesc": "Only used with MPC_ALT_MODE 1", "max": 3.0, "min": 0.0, "name": "MPC_HOLD_MAX_Z", "shortDesc": "Maximum vertical velocity for which position hold is enabled (use 0 to disable check)", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 4.0, "group": "Multicopter Position Control", "increment": 1.0, "longDesc": "Limit the maximum jerk of the vehicle (how fast the acceleration can change).\nA lower value leads to smoother vehicle motions but also limited agility.", "max": 80.0, "min": 1.0, "name": "MPC_JERK_AUTO", "shortDesc": "Jerk limit in autonomous modes", "type": "Float", "units": "m/s^3"}, {"category": "Standard", "decimalPlaces": 0, "default": 8.0, "group": "Multicopter Position Control", "increment": 1.0, "longDesc": "Limit the maximum jerk (acceleration change) of the vehicle.\nA lower value leads to smoother motions but limits agility.\nSetting this to the maximum value essentially disables the limit.\nOnly used with MPC_POS_MODE Acceleration based.", "max": 500.0, "min": 0.5, "name": "MPC_JERK_MAX", "shortDesc": "Maximum horizontal and vertical jerk in Position/Altitude mode", "type": "Float", "units": "m/s^3"}, {"category": "Standard", "decimalPlaces": 1, "default": 10.0, "group": "Multicopter Position Control", "longDesc": "Below this altitude descending velocity gets limited to a value\nbetween \"MPC_Z_VEL_MAX_DN\" (or \"MPC_Z_V_AUTO_DN\") and \"MPC_LAND_SPEED\"\nValue needs to be higher than \"MPC_LAND_ALT2\"", "max": 122.0, "min": 0.0, "name": "MPC_LAND_ALT1", "shortDesc": "Altitude for 1. step of slow landing (descend)", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 1, "default": 5.0, "group": "Multicopter Position Control", "longDesc": "Below this altitude descending velocity gets\nlimited to \"MPC_LAND_SPEED\"\nValue needs to be lower than \"MPC_LAND_ALT1\"", "max": 122.0, "min": 0.0, "name": "MPC_LAND_ALT2", "shortDesc": "Altitude for 2. step of slow landing (landing)", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 1, "default": 1.0, "group": "Multicopter Position Control", "longDesc": "If a valid distance sensor measurement to the ground is available,\nlimit descending velocity to \"MPC_LAND_CRWL\" below this altitude.", "max": 122.0, "min": 0.0, "name": "MPC_LAND_ALT3", "shortDesc": "Altitude for 3. step of slow landing", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.3, "group": "Multicopter Position Control", "longDesc": "Used below MPC_LAND_ALT3 if distance sensor data is availabe.", "min": 0.1, "name": "MPC_LAND_CRWL", "shortDesc": "Land crawl descend rate", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 0, "default": -1.0, "group": "Multicopter Position Control", "increment": 1.0, "longDesc": "When nudging is enabled (see MPC_LAND_RC_HELP), this defines the maximum\nallowed horizontal displacement from the original landing point.\n- If inside of the radius, only allow nudging inputs that do not move the vehicle outside of it.\n- If outside of the radius, only allow nudging inputs that move the vehicle back towards it.\nSet it to -1 for infinite radius.", "min": -1.0, "name": "MPC_LAND_RADIUS", "shortDesc": "User assisted landing radius", "type": "Float", "units": "m"}, {"category": "Standard", "default": 0, "group": "Multicopter Position Control", "longDesc": "Using stick input the vehicle can be moved horizontally and yawed.\nThe descend speed is amended:\nstick full up - 0\nstick centered - MPC_LAND_SPEED\nstick full down - 2 * MPC_LAND_SPEED\nManual override during auto modes has to be disabled to use this feature (see COM_RC_OVERRIDE).", "max": 1, "min": 0, "name": "MPC_LAND_RC_HELP", "shortDesc": "Enable nudging based on user input during autonomous land routine", "type": "Int32", "values": [{"description": "Nudging disabled", "value": 0}, {"description": "Nudging enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 1, "default": 0.7, "group": "Multicopter Position Control", "min": 0.6, "name": "MPC_LAND_SPEED", "shortDesc": "Landing descend rate", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.08, "group": "Multicopter Position Control", "increment": 0.01, "longDesc": "The value is mapped to the lowest throttle stick position in Stabilized mode.\nToo low collective thrust leads to loss of roll/pitch/yaw torque control authority.\nAirmode is used to keep torque authority with zero thrust (see MC_AIRMODE).", "max": 1.0, "min": 0.0, "name": "MPC_MANTHR_MIN", "shortDesc": "Minimum collective thrust in Stabilized mode", "type": "Float", "units": "norm"}, {"category": "Standard", "decimalPlaces": 0, "default": 35.0, "group": "Multicopter Position Control", "increment": 1.0, "max": 70.0, "min": 1.0, "name": "MPC_MAN_TILT_MAX", "shortDesc": "Maximal tilt angle in Stabilized, Altitude and Altitude Cruise mode", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 0, "default": 150.0, "group": "Multicopter Position Control", "increment": 10.0, "max": 400.0, "min": 0.0, "name": "MPC_MAN_Y_MAX", "shortDesc": "Max manual yaw rate for Stabilized, Altitude, Position mode", "type": "Float", "units": "deg/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.08, "group": "Multicopter Position Control", "increment": 0.01, "longDesc": "Not used in Stabilized mode\nSetting this parameter to 0 disables the filter", "max": 5.0, "min": 0.0, "name": "MPC_MAN_Y_TAU", "shortDesc": "Manual yaw rate input filter time constant", "type": "Float", "units": "s"}, {"category": "Standard", "default": 4, "group": "Multicopter Position Control", "longDesc": "The supported sub-modes are:\nDirect velocity:\nSticks directly map to velocity setpoints without smoothing.\nAlso applies to vertical direction and Altitude mode.\nUseful for velocity control tuning.\nAcceleration based:\nSticks map to acceleration and there's a virtual brake drag", "name": "MPC_POS_MODE", "shortDesc": "Position/Altitude mode variant", "type": "Int32", "values": [{"description": "Direct velocity", "value": 0}, {"description": "Acceleration based", "value": 4}]}, {"category": "Standard", "default": 0, "group": "Multicopter Position Control", "longDesc": "Defines how the throttle stick is mapped to collective thrust in Stabilized mode.\nRescale to hover thrust estimate:\nStick input is linearly rescaled, such that a centered throttle stick corresponds to the hover thrust estimator's output.\nNo rescale:\nDirectly map the stick 1:1 to the output.\nCan be useful with very low hover thrust which leads to much distortion and the upper half getting sensitive.\nRescale to hover thrust parameter:\nSimilar to rescaling to the hover thrust estimate, but it uses the hover thrust parameter value (see MPC_THR_HOVER) instead of estimated value.\nWith MPC_THR_HOVER 0.5 it's equivalent to No rescale.", "name": "MPC_THR_CURVE", "shortDesc": "Thrust curve mapping in Stabilized Mode", "type": "Int32", "values": [{"description": "Rescale to estimate", "value": 0}, {"description": "No rescale", "value": 1}, {"description": "Rescale to parameter", "value": 2}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.5, "group": "Multicopter Position Control", "increment": 0.01, "longDesc": "Mapped to center throttle stick in Stabilized mode (see MPC_THR_CURVE).\nUsed for initialization of the hover thrust estimator.\nThe estimated hover thrust is used as base for zero vertical acceleration in altitude control.\nThe hover thrust is important for land detection to work correctly.", "max": 0.8, "min": 0.1, "name": "MPC_THR_HOVER", "shortDesc": "Vertical thrust required to hover", "type": "Float", "units": "norm"}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "Multicopter Position Control", "increment": 0.05, "longDesc": "Limit allowed thrust e.g. for indoor test of overpowered vehicle.", "max": 1.0, "min": 0.0, "name": "MPC_THR_MAX", "shortDesc": "Maximum collective thrust in climb rate controlled modes", "type": "Float", "units": "norm"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.12, "group": "Multicopter Position Control", "increment": 0.01, "longDesc": "Too low thrust leads to loss of roll/pitch/yaw torque control authority.\nWith airmode enabled this parameters can be set to 0\nwhile still keeping torque authority (see MC_AIRMODE).", "max": 0.5, "min": 0.05, "name": "MPC_THR_MIN", "shortDesc": "Minimum collective thrust in climb rate controlled modes", "type": "Float", "units": "norm"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.3, "group": "Multicopter Position Control", "increment": 0.01, "longDesc": "Margin that is kept for horizontal control when higher priority vertical thrust is saturated.\nTo avoid completely starving horizontal control with high vertical error.", "max": 0.5, "min": 0.0, "name": "MPC_THR_XY_MARG", "shortDesc": "Horizontal thrust margin", "type": "Float", "units": "norm"}, {"category": "Standard", "decimalPlaces": 0, "default": 45.0, "group": "Multicopter Position Control", "increment": 1.0, "longDesc": "Absolute maximum for all velocity or acceleration controlled modes.\nAny higher value is truncated.", "max": 89.0, "min": 20.0, "name": "MPC_TILTMAX_AIR", "shortDesc": "Maximum tilt angle in air", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 0, "default": 12.0, "group": "Multicopter Position Control", "increment": 1.0, "longDesc": "Tighter tilt limit during takeoff to avoid tip over.", "max": 89.0, "min": 5.0, "name": "MPC_TILTMAX_LND", "shortDesc": "Maximum tilt during inital takeoff ramp", "type": "Float", "units": "deg"}, {"category": "Standard", "default": 3.0, "group": "Multicopter Position Control", "longDesc": "Increasing this value will make climb rate controlled takeoff slower.\nIf it's too slow the drone might scratch the ground and tip over.\nA time constant of 0 disables the ramp", "max": 5.0, "min": 0.0, "name": "MPC_TKO_RAMP_T", "shortDesc": "Smooth takeoff ramp time constant", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 1.5, "group": "Multicopter Position Control", "max": 5.0, "min": 1.0, "name": "MPC_TKO_SPEED", "shortDesc": "Takeoff climb rate", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 5.0, "group": "Multicopter Position Control", "increment": 0.5, "longDesc": "A value of 0 disables the filter.", "max": 50.0, "min": 0.0, "name": "MPC_VELD_LP", "shortDesc": "Velocity derivative low pass cutoff frequency", "type": "Float", "units": "Hz"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "Multicopter Position Control", "increment": 0.5, "longDesc": "A value of 0 disables the filter.", "max": 50.0, "min": 0.0, "name": "MPC_VEL_LP", "shortDesc": "Velocity low pass cutoff frequency", "type": "Float", "units": "Hz"}, {"category": "Standard", "decimalPlaces": 1, "default": 10.0, "group": "Multicopter Position Control", "increment": 1.0, "longDesc": "Must be smaller than MPC_XY_VEL_MAX.\nThe maximum sideways and backward speed can be set differently\nusing MPC_VEL_MAN_SIDE and MPC_VEL_MAN_BACK, respectively.", "max": 20.0, "min": 3.0, "name": "MPC_VEL_MANUAL", "shortDesc": "Maximum horizontal velocity setpoint in Position mode", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": -1.0, "group": "Multicopter Position Control", "increment": 1.0, "longDesc": "If set to a negative value or larger than\nMPC_VEL_MANUAL then MPC_VEL_MANUAL is used.", "max": 20.0, "min": -1.0, "name": "MPC_VEL_MAN_BACK", "shortDesc": "Maximum backward velocity in Position mode", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": -1.0, "group": "Multicopter Position Control", "increment": 1.0, "longDesc": "If set to a negative value or larger than\nMPC_VEL_MANUAL then MPC_VEL_MANUAL is used.", "max": 20.0, "min": -1.0, "name": "MPC_VEL_MAN_SIDE", "shortDesc": "Maximum sideways velocity in Position mode", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 5.0, "group": "Multicopter Position Control", "increment": 0.5, "longDesc": "A value of 0 disables the filter.", "max": 50.0, "min": 0.0, "name": "MPC_VEL_NF_BW", "shortDesc": "Velocity notch filter bandwidth", "type": "Float", "units": "Hz"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "Multicopter Position Control", "increment": 0.5, "longDesc": "The center frequency for the 2nd order notch filter on the velocity.\nA value of 0 disables the filter.", "max": 50.0, "min": 0.0, "name": "MPC_VEL_NF_FRQ", "shortDesc": "Velocity notch filter frequency", "type": "Float", "units": "Hz"}, {"category": "Standard", "decimalPlaces": 0, "default": 5.0, "group": "Multicopter Position Control", "increment": 1.0, "longDesc": "e.g. in Missions, RTL, Goto if the waypoint does not specify differently", "max": 20.0, "min": 3.0, "name": "MPC_XY_CRUISE", "shortDesc": "Default horizontal velocity in autonomous modes", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 2.0, "group": "Multicopter Position Control", "increment": 1.0, "longDesc": "The integration speed of the trajectory setpoint is linearly\nreduced with the horizontal position tracking error. When the\nerror is above this parameter, the integration of the\ntrajectory is stopped to wait for the drone.\nThis value can be adjusted depending on the tracking\ncapabilities of the vehicle.", "max": 10.0, "min": 0.1, "name": "MPC_XY_ERR_MAX", "shortDesc": "Maximum horizontal error allowed by the trajectory generator", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.95, "group": "Multicopter Position Control", "increment": 0.1, "longDesc": "Defined as corrective velocity in m/s per m position error", "max": 2.0, "min": 0.0, "name": "MPC_XY_P", "shortDesc": "Proportional gain for horizontal position error", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.5, "group": "Multicopter Position Control", "increment": 0.1, "max": 1.0, "min": 0.1, "name": "MPC_XY_TRAJ_P", "shortDesc": "Proportional gain for horizontal trajectory position error", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": -10.0, "group": "Multicopter Position Control", "increment": 1.0, "longDesc": "If set to a value greater than zero, other parameters are automatically set (such as\nMPC_XY_VEL_MAX or MPC_VEL_MANUAL).\nIf set to a negative value, the existing individual parameters are used.", "max": 20.0, "min": -20.0, "name": "MPC_XY_VEL_ALL", "shortDesc": "Overall Horizontal Velocity Limit", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.2, "group": "Multicopter Position Control", "increment": 0.02, "longDesc": "Defined as corrective acceleration in m/s^2 per m/s^2 velocity derivative", "max": 2.0, "min": 0.1, "name": "MPC_XY_VEL_D_ACC", "shortDesc": "Differential gain for horizontal velocity error", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.4, "group": "Multicopter Position Control", "increment": 0.02, "longDesc": "Defined as correction acceleration in m/s^2 per m velocity integral\nAllows to eliminate steady state errors in disturbances like wind.", "max": 60.0, "min": 0.0, "name": "MPC_XY_VEL_I_ACC", "shortDesc": "Integral gain for horizontal velocity error", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 12.0, "group": "Multicopter Position Control", "increment": 1.0, "longDesc": "Absolute maximum for all velocity controlled modes.\nAny higher value is truncated.", "max": 20.0, "min": 0.0, "name": "MPC_XY_VEL_MAX", "shortDesc": "Maximum horizontal velocity", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 1.8, "group": "Multicopter Position Control", "increment": 0.1, "longDesc": "Defined as corrective acceleration in m/s^2 per m/s velocity error", "max": 5.0, "min": 1.2, "name": "MPC_XY_VEL_P_ACC", "shortDesc": "Proportional gain for horizontal velocity error", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "Multicopter Position Control", "increment": 0.1, "longDesc": "Defined as corrective velocity in m/s per m position error", "max": 1.5, "min": 0.1, "name": "MPC_Z_P", "shortDesc": "Proportional gain for vertical position error", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": -3.0, "group": "Multicopter Position Control", "increment": 0.5, "longDesc": "If set to a value greater than zero, other parameters are automatically set (such as\nMPC_Z_VEL_MAX_UP or MPC_LAND_SPEED).\nIf set to a negative value, the existing individual parameters are used.", "max": 8.0, "min": -3.0, "name": "MPC_Z_VEL_ALL", "shortDesc": "Overall Vertical Velocity Limit", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Multicopter Position Control", "increment": 0.02, "longDesc": "Defined as corrective acceleration in m/s^2 per m/s^2 velocity derivative", "max": 2.0, "min": 0.0, "name": "MPC_Z_VEL_D_ACC", "shortDesc": "Differential gain for vertical velocity error", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 2.0, "group": "Multicopter Position Control", "increment": 0.1, "longDesc": "Defined as corrective acceleration in m/s^2 per m velocity integral", "max": 3.0, "min": 0.2, "name": "MPC_Z_VEL_I_ACC", "shortDesc": "Integral gain for vertical velocity error", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 1.5, "group": "Multicopter Position Control", "increment": 0.1, "longDesc": "Absolute maximum for all climb rate controlled modes.\nIn manually piloted modes full stick deflection commands this velocity.\nFor default autonomous velocity see MPC_Z_V_AUTO_UP", "max": 4.0, "min": 0.5, "name": "MPC_Z_VEL_MAX_DN", "shortDesc": "Maximum descent velocity", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 3.0, "group": "Multicopter Position Control", "increment": 0.1, "longDesc": "Absolute maximum for all climb rate controlled modes.\nIn manually piloted modes full stick deflection commands this velocity.\nFor default autonomous velocity see MPC_Z_V_AUTO_UP", "max": 8.0, "min": 0.5, "name": "MPC_Z_VEL_MAX_UP", "shortDesc": "Maximum ascent velocity", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 4.0, "group": "Multicopter Position Control", "increment": 0.1, "longDesc": "Defined as corrective acceleration in m/s^2 per m/s velocity error", "max": 15.0, "min": 2.0, "name": "MPC_Z_VEL_P_ACC", "shortDesc": "Proportional gain for vertical velocity error", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 1.5, "group": "Multicopter Position Control", "increment": 0.5, "longDesc": "For manual modes and offboard, see MPC_Z_VEL_MAX_DN", "max": 4.0, "min": 0.5, "name": "MPC_Z_V_AUTO_DN", "shortDesc": "Descent velocity in autonomous modes", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 3.0, "group": "Multicopter Position Control", "increment": 0.5, "longDesc": "For manually controlled modes and offboard see MPC_Z_VEL_MAX_UP", "max": 8.0, "min": 0.5, "name": "MPC_Z_V_AUTO_UP", "shortDesc": "Ascent velocity in autonomous modes", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 2, "default": -0.4, "group": "Multicopter Position Control", "increment": 0.05, "longDesc": "Changes the overall responsiveness of the vehicle.\nThe higher the value, the faster the vehicle will react.\nIf set to a value greater than zero, other parameters are automatically set (such as\nthe acceleration or jerk limits).\nIf set to a negative value, the existing individual parameters are used.", "max": 1.0, "min": -1.0, "name": "SYS_VEHICLE_RESP", "shortDesc": "Responsiveness", "type": "Float"}, {"category": "Standard", "default": 0, "group": "Multicopter Position Control", "name": "WV_EN", "shortDesc": "Enable weathervane", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 1.0, "group": "Multicopter Position Control", "max": 5.0, "min": 0.0, "name": "WV_ROLL_MIN", "shortDesc": "Minimum roll angle setpoint for weathervane controller to demand a yaw-rate", "type": "Float", "units": "deg"}, {"category": "Standard", "default": 90.0, "group": "Multicopter Position Control", "max": 120.0, "min": 0.0, "name": "WV_YRATE_MAX", "shortDesc": "Maximum yawrate the weathervane controller is allowed to demand", "type": "Float", "units": "deg/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 3.0, "group": "Multicopter Position Slow Mode", "increment": 0.1, "longDesc": "This value is used in slow mode if\nno aux channel is mapped and\nno limit is commanded through MAVLink.", "min": 0.1, "name": "MC_SLOW_DEF_HVEL", "shortDesc": "Default horizontal velocity limit", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "Multicopter Position Slow Mode", "increment": 0.1, "longDesc": "This value is used in slow mode if\nno aux channel is mapped and\nno limit is commanded through MAVLink.", "min": 0.1, "name": "MC_SLOW_DEF_VVEL", "shortDesc": "Default vertical velocity limit", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 0, "default": 45.0, "group": "Multicopter Position Slow Mode", "increment": 0.1, "longDesc": "This value is used in slow mode if\nno aux channel is mapped and\nno limit is commanded through MAVLink.", "min": 1.0, "name": "MC_SLOW_DEF_YAWR", "shortDesc": "Default yaw rate limit", "type": "Float", "units": "deg/s"}, {"category": "Standard", "default": 0, "group": "Multicopter Position Slow Mode", "name": "MC_SLOW_MAP_HVEL", "shortDesc": "Manual input mapped to scale horizontal velocity in position slow mode", "type": "Int32", "values": [{"description": "No rescaling", "value": 0}, {"description": "AUX1", "value": 1}, {"description": "AUX2", "value": 2}, {"description": "AUX3", "value": 3}, {"description": "AUX4", "value": 4}, {"description": "AUX5", "value": 5}, {"description": "AUX6", "value": 6}]}, {"category": "Standard", "default": 0, "group": "Multicopter Position Slow Mode", "name": "MC_SLOW_MAP_PTCH", "shortDesc": "RC_MAP_AUX{N} to allow for gimbal pitch rate control in position slow mode", "type": "Int32", "values": [{"description": "No pitch rate input", "value": 0}, {"description": "AUX1", "value": 1}, {"description": "AUX2", "value": 2}, {"description": "AUX3", "value": 3}, {"description": "AUX4", "value": 4}, {"description": "AUX5", "value": 5}, {"description": "AUX6", "value": 6}]}, {"category": "Standard", "default": 0, "group": "Multicopter Position Slow Mode", "name": "MC_SLOW_MAP_VVEL", "shortDesc": "Manual input mapped to scale vertical velocity in position slow mode", "type": "Int32", "values": [{"description": "No rescaling", "value": 0}, {"description": "AUX1", "value": 1}, {"description": "AUX2", "value": 2}, {"description": "AUX3", "value": 3}, {"description": "AUX4", "value": 4}, {"description": "AUX5", "value": 5}, {"description": "AUX6", "value": 6}]}, {"category": "Standard", "default": 0, "group": "Multicopter Position Slow Mode", "name": "MC_SLOW_MAP_YAWR", "shortDesc": "Manual input mapped to scale yaw rate in position slow mode", "type": "Int32", "values": [{"description": "No rescaling", "value": 0}, {"description": "AUX1", "value": 1}, {"description": "AUX2", "value": 2}, {"description": "AUX3", "value": 3}, {"description": "AUX4", "value": 4}, {"description": "AUX5", "value": 5}, {"description": "AUX6", "value": 6}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.3, "group": "Multicopter Position Slow Mode", "increment": 0.1, "longDesc": "The lowest input maps and is clamped to this velocity.", "min": 0.1, "name": "MC_SLOW_MIN_HVEL", "shortDesc": "Horizontal velocity lower limit", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.3, "group": "Multicopter Position Slow Mode", "increment": 0.1, "longDesc": "The lowest input maps and is clamped to this velocity.", "min": 0.1, "name": "MC_SLOW_MIN_VVEL", "shortDesc": "Vertical velocity lower limit", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 0, "default": 3.0, "group": "Multicopter Position Slow Mode", "increment": 0.1, "longDesc": "The lowest input maps and is clamped to this rate.", "min": 1.0, "name": "MC_SLOW_MIN_YAWR", "shortDesc": "Yaw rate lower limit", "type": "Float", "units": "deg/s"}, {"category": "Standard", "default": 0, "group": "Multicopter Rate Control", "longDesc": "This compensates for voltage drop of the battery over time by attempting to\nnormalize performance across the operating range of the battery. The copter\nshould constantly behave as if it was fully charged with reduced max acceleration\nat lower battery percentages. i.e. if hover is at 0.5 throttle at 100% battery,\nit will still be 0.5 at 60% battery.", "name": "MC_BAT_SCALE_EN", "shortDesc": "Battery power level scaler", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 4, "default": 0.003, "group": "Multicopter Rate Control", "increment": 0.0005, "longDesc": "Pitch rate differential gain. Small values help reduce fast oscillations. If value is too big oscillations will appear again.", "min": 0.0, "name": "MC_PITCHRATE_D", "shortDesc": "Pitch rate D gain", "type": "Float"}, {"category": "Standard", "decimalPlaces": 4, "default": 0.0, "group": "Multicopter Rate Control", "longDesc": "Improves tracking performance.", "min": 0.0, "name": "MC_PITCHRATE_FF", "shortDesc": "Pitch rate feedforward", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.2, "group": "Multicopter Rate Control", "increment": 0.01, "longDesc": "Pitch rate integral gain. Can be set to compensate static thrust difference or gravity center offset.", "min": 0.0, "name": "MC_PITCHRATE_I", "shortDesc": "Pitch rate I gain", "type": "Float"}, {"category": "Standard", "decimalPlaces": 4, "default": 1.0, "group": "Multicopter Rate Control", "increment": 0.0005, "longDesc": "Global gain of the controller.\nThis gain scales the P, I and D terms of the controller:\noutput = MC_PITCHRATE_K * (MC_PITCHRATE_P * error\n+ MC_PITCHRATE_I * error_integral\n+ MC_PITCHRATE_D * error_derivative)\nSet MC_PITCHRATE_P=1 to implement a PID in the ideal form.\nSet MC_PITCHRATE_K=1 to implement a PID in the parallel form.", "max": 5.0, "min": 0.01, "name": "MC_PITCHRATE_K", "shortDesc": "Pitch rate controller gain", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.15, "group": "Multicopter Rate Control", "increment": 0.01, "longDesc": "Pitch rate proportional gain, i.e. control output for angular speed error 1 rad/s.", "max": 0.6, "min": 0.01, "name": "MC_PITCHRATE_P", "shortDesc": "Pitch rate P gain", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.3, "group": "Multicopter Rate Control", "increment": 0.01, "longDesc": "Pitch rate integrator limit. Can be set to increase the amount of integrator available to counteract disturbances or reduced to improve settling time after large pitch moment trim changes.", "min": 0.0, "name": "MC_PR_INT_LIM", "shortDesc": "Pitch rate integrator limit", "type": "Float"}, {"category": "Standard", "decimalPlaces": 4, "default": 0.003, "group": "Multicopter Rate Control", "increment": 0.0005, "longDesc": "Roll rate differential gain. Small values help reduce fast oscillations. If value is too big oscillations will appear again.", "max": 0.01, "min": 0.0, "name": "MC_ROLLRATE_D", "shortDesc": "Roll rate D gain", "type": "Float"}, {"category": "Standard", "decimalPlaces": 4, "default": 0.0, "group": "Multicopter Rate Control", "longDesc": "Improves tracking performance.", "min": 0.0, "name": "MC_ROLLRATE_FF", "shortDesc": "Roll rate feedforward", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.2, "group": "Multicopter Rate Control", "increment": 0.01, "longDesc": "Roll rate integral gain. Can be set to compensate static thrust difference or gravity center offset.", "min": 0.0, "name": "MC_ROLLRATE_I", "shortDesc": "Roll rate I gain", "type": "Float"}, {"category": "Standard", "decimalPlaces": 4, "default": 1.0, "group": "Multicopter Rate Control", "increment": 0.0005, "longDesc": "Global gain of the controller.\nThis gain scales the P, I and D terms of the controller:\noutput = MC_ROLLRATE_K * (MC_ROLLRATE_P * error\n+ MC_ROLLRATE_I * error_integral\n+ MC_ROLLRATE_D * error_derivative)\nSet MC_ROLLRATE_P=1 to implement a PID in the ideal form.\nSet MC_ROLLRATE_K=1 to implement a PID in the parallel form.", "max": 5.0, "min": 0.01, "name": "MC_ROLLRATE_K", "shortDesc": "Roll rate controller gain", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.15, "group": "Multicopter Rate Control", "increment": 0.01, "longDesc": "Roll rate proportional gain, i.e. control output for angular speed error 1 rad/s.", "max": 0.5, "min": 0.01, "name": "MC_ROLLRATE_P", "shortDesc": "Roll rate P gain", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.3, "group": "Multicopter Rate Control", "increment": 0.01, "longDesc": "Roll rate integrator limit. Can be set to increase the amount of integrator available to counteract disturbances or reduced to improve settling time after large roll moment trim changes.", "min": 0.0, "name": "MC_RR_INT_LIM", "shortDesc": "Roll rate integrator limit", "type": "Float"}, {"category": "Standard", "decimalPlaces": 4, "default": 0.0, "group": "Multicopter Rate Control", "increment": 0.0005, "longDesc": "Yaw rate differential gain. Small values help reduce fast oscillations. If value is too big oscillations will appear again.", "min": 0.0, "name": "MC_YAWRATE_D", "shortDesc": "Yaw rate D gain", "type": "Float"}, {"category": "Standard", "decimalPlaces": 4, "default": 0.0, "group": "Multicopter Rate Control", "longDesc": "Improves tracking performance.", "min": 0.0, "name": "MC_YAWRATE_FF", "shortDesc": "Yaw rate feedforward", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.1, "group": "Multicopter Rate Control", "increment": 0.01, "longDesc": "Yaw rate integral gain. Can be set to compensate static thrust difference or gravity center offset.", "min": 0.0, "name": "MC_YAWRATE_I", "shortDesc": "Yaw rate I gain", "type": "Float"}, {"category": "Standard", "decimalPlaces": 4, "default": 1.0, "group": "Multicopter Rate Control", "increment": 0.0005, "longDesc": "Global gain of the controller.\nThis gain scales the P, I and D terms of the controller:\noutput = MC_YAWRATE_K * (MC_YAWRATE_P * error\n+ MC_YAWRATE_I * error_integral\n+ MC_YAWRATE_D * error_derivative)\nSet MC_YAWRATE_P=1 to implement a PID in the ideal form.\nSet MC_YAWRATE_K=1 to implement a PID in the parallel form.", "max": 5.0, "min": 0.01, "name": "MC_YAWRATE_K", "shortDesc": "Yaw rate controller gain", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.2, "group": "Multicopter Rate Control", "increment": 0.01, "longDesc": "Yaw rate proportional gain, i.e. control output for angular speed error 1 rad/s.", "max": 0.6, "min": 0.0, "name": "MC_YAWRATE_P", "shortDesc": "Yaw rate P gain", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 2.0, "group": "Multicopter Rate Control", "longDesc": "Reduces vibrations by lowering high frequency torque caused by rotor acceleration.\n0 disables the filter", "max": 10.0, "min": 0.0, "name": "MC_YAW_TQ_CUTOFF", "shortDesc": "Low pass filter cutoff frequency for yaw torque setpoint", "type": "Float", "units": "Hz"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.3, "group": "Multicopter Rate Control", "increment": 0.01, "longDesc": "Yaw rate integrator limit. Can be set to increase the amount of integrator available to counteract disturbances or reduced to improve settling time after large yaw moment trim changes.", "min": 0.0, "name": "MC_YR_INT_LIM", "shortDesc": "Yaw rate integrator limit", "type": "Float"}, {"category": "Standard", "default": 0, "group": "OSD", "longDesc": "Controls the vertical position of the crosshair display.\nResolution is limited by OSD to 15 discrete values. Negative\nvalues will display the crosshairs below the horizon", "max": 8, "min": -8, "name": "OSD_CH_HEIGHT", "shortDesc": "OSD Crosshairs Height", "type": "Int32"}, {"category": "Standard", "default": 500, "group": "OSD", "longDesc": "Amount of time in milliseconds to dwell at the beginning of the display, when scrolling.", "max": 10000, "min": 100, "name": "OSD_DWELL_TIME", "shortDesc": "OSD Dwell Time (ms)", "type": "Int32"}, {"category": "Standard", "default": 3, "group": "OSD", "longDesc": "Minimum security of log level to display on the OSD.", "name": "OSD_LOG_LEVEL", "shortDesc": "OSD Warning Level", "type": "Int32"}, {"category": "Standard", "default": 1, "group": "OSD", "longDesc": "Forward RC stick input to VTX when disarmed", "max": 1, "min": 0, "name": "OSD_RC_STICK", "shortDesc": "OSD RC Stick commands", "type": "Int32"}, {"category": "Standard", "default": 125, "group": "OSD", "longDesc": "Scroll rate in milliseconds for OSD messages longer than available character width.\nThis is lower-bounded by the nominal loop rate of this module.", "max": 1000, "min": 100, "name": "OSD_SCROLL_RATE", "shortDesc": "OSD Scroll Rate (ms)", "type": "Int32"}, {"bitmask": [{"description": "CRAFT_NAME", "index": 0}, {"description": "DISARMED", "index": 1}, {"description": "GPS_LAT", "index": 2}, {"description": "GPS_LON", "index": 3}, {"description": "GPS_SATS", "index": 4}, {"description": "GPS_SPEED", "index": 5}, {"description": "HOME_DIST", "index": 6}, {"description": "HOME_DIR", "index": 7}, {"description": "MAIN_BATT_VOLTAGE", "index": 8}, {"description": "CURRENT_DRAW", "index": 9}, {"description": "MAH_DRAWN", "index": 10}, {"description": "RSSI_VALUE", "index": 11}, {"description": "ALTITUDE", "index": 12}, {"description": "NUMERICAL_VARIO", "index": 13}, {"description": "(unused) FLYMODE", "index": 14}, {"description": "(unused) ESC_TMP", "index": 15}, {"description": "(unused) PITCH_ANGLE", "index": 16}, {"description": "(unused) ROLL_ANGLE", "index": 17}, {"description": "CROSSHAIRS", "index": 18}, {"description": "AVG_CELL_VOLTAGE", "index": 19}, {"description": "(unused) HORIZON_SIDEBARS", "index": 20}, {"description": "POWER", "index": 21}], "category": "Standard", "default": 16383, "group": "OSD", "longDesc": "Configure / toggle support display options.", "max": 4194303, "min": 0, "name": "OSD_SYMBOLS", "shortDesc": "OSD Symbol Selection", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "PWM Outputs", "increment": 0.1, "longDesc": "Parameter used to model the nonlinear relationship between\nmotor control signal (e.g. PWM) and static thrust.\nThe model is: rel_thrust = factor * rel_signal^2 + (1-factor) * rel_signal,\nwhere rel_thrust is the normalized thrust between 0 and 1, and\nrel_signal is the relative motor control signal between 0 and 1.", "max": 1.0, "min": 0.0, "name": "THR_MDL_FAC", "shortDesc": "Thrust to motor control signal model parameter", "type": "Float"}, {"category": "Standard", "default": 1.0, "group": "Payload Deliverer", "longDesc": "Maximum time Gripper will wait while the successful griper actuation isn't recognised.\nIf the gripper has no feedback sensor, it will simply wait for\nthis time before considering gripper actuation successful and publish a\n'VehicleCommandAck' signaling successful gripper action", "min": 0.0, "name": "PD_GRIPPER_TO", "shortDesc": "Timeout for successful gripper actuation acknowledgement", "type": "Float", "units": "s"}, {"category": "Standard", "default": 0, "group": "Payload Deliverer", "max": 0, "min": -1, "name": "PD_GRIPPER_TYPE", "shortDesc": "Type of Gripper (Servo, etc.)", "type": "Int32", "values": [{"description": "Undefined", "value": -1}, {"description": "Servo", "value": 0}]}, {"category": "Standard", "decimalPlaces": 1, "default": 5.0, "group": "Precision Land", "increment": 0.5, "longDesc": "Time after which the landing target is considered lost without any new measurements.", "max": 50.0, "min": 0.0, "name": "PLD_BTOUT", "shortDesc": "Landing Target Timeout", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.1, "group": "Precision Land", "increment": 0.1, "longDesc": "Allow final approach (without horizontal positioning) if losing landing target closer than this to the ground.", "max": 10.0, "min": 0.0, "name": "PLD_FAPPR_ALT", "shortDesc": "Final approach altitude", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.2, "group": "Precision Land", "increment": 0.1, "longDesc": "Start descending if closer above landing target than this.", "max": 10.0, "min": 0.0, "name": "PLD_HACC_RAD", "shortDesc": "Horizontal acceptance radius", "type": "Float", "units": "m"}, {"category": "Standard", "default": 3, "group": "Precision Land", "longDesc": "Maximum number of times to search for the landing target if it is lost during the precision landing.", "max": 100, "min": 0, "name": "PLD_MAX_SRCH", "shortDesc": "Maximum number of search attempts", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 1, "default": 10.0, "group": "Precision Land", "increment": 0.1, "longDesc": "Altitude above home to which to climb when searching for the landing target.", "max": 100.0, "min": 0.0, "name": "PLD_SRCH_ALT", "shortDesc": "Search altitude", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 1, "default": 10.0, "group": "Precision Land", "increment": 0.1, "longDesc": "Time allowed to search for the landing target before falling back to normal landing.", "max": 100.0, "min": 0.0, "name": "PLD_SRCH_TOUT", "shortDesc": "Search timeout", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "Pure Pursuit", "increment": 0.01, "longDesc": "Lower value -> More aggressive controller (beware overshoot/oscillations)", "max": 100.0, "min": 0.1, "name": "PP_LOOKAHD_GAIN", "shortDesc": "Tuning parameter for the pure pursuit controller", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 10.0, "group": "Pure Pursuit", "increment": 0.01, "max": 100.0, "min": 0.1, "name": "PP_LOOKAHD_MAX", "shortDesc": "Maximum lookahead distance for the pure pursuit controller", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "Pure Pursuit", "increment": 0.01, "max": 100.0, "min": 0.1, "name": "PP_LOOKAHD_MIN", "shortDesc": "Minimum lookahead distance for the pure pursuit controller", "type": "Float", "units": "m"}, {"category": "Standard", "default": 2000.0, "group": "Radio Calibration", "longDesc": "Maximum value for this channel.", "max": 2200.0, "min": 1500.0, "name": "RC10_MAX", "shortDesc": "RC channel 10 maximum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1000.0, "group": "Radio Calibration", "longDesc": "Minimum value for this channel.", "max": 1500.0, "min": 800.0, "name": "RC10_MIN", "shortDesc": "RC channel 10 minimum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1.0, "group": "Radio Calibration", "longDesc": "Set to -1 to reverse channel.", "max": 1.0, "min": -1.0, "name": "RC10_REV", "shortDesc": "RC channel 10 reverse", "type": "Float", "values": [{"description": "Reverse", "value": -1.0}, {"description": "Normal", "value": 1.0}]}, {"category": "Standard", "default": 1500.0, "group": "Radio Calibration", "longDesc": "Mid point value", "max": 2200.0, "min": 800.0, "name": "RC10_TRIM", "shortDesc": "RC channel 10 trim", "type": "Float", "units": "us"}, {"category": "Standard", "default": 2000.0, "group": "Radio Calibration", "longDesc": "Maximum value for this channel.", "max": 2200.0, "min": 1500.0, "name": "RC11_MAX", "shortDesc": "RC channel 11 maximum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1000.0, "group": "Radio Calibration", "longDesc": "Minimum value for this channel.", "max": 1500.0, "min": 800.0, "name": "RC11_MIN", "shortDesc": "RC channel 11 minimum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1.0, "group": "Radio Calibration", "longDesc": "Set to -1 to reverse channel.", "max": 1.0, "min": -1.0, "name": "RC11_REV", "shortDesc": "RC channel 11 reverse", "type": "Float", "values": [{"description": "Reverse", "value": -1.0}, {"description": "Normal", "value": 1.0}]}, {"category": "Standard", "default": 1500.0, "group": "Radio Calibration", "longDesc": "Mid point value", "max": 2200.0, "min": 800.0, "name": "RC11_TRIM", "shortDesc": "RC channel 11 trim", "type": "Float", "units": "us"}, {"category": "Standard", "default": 2000.0, "group": "Radio Calibration", "longDesc": "Maximum value for this channel.", "max": 2200.0, "min": 1500.0, "name": "RC12_MAX", "shortDesc": "RC channel 12 maximum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1000.0, "group": "Radio Calibration", "longDesc": "Minimum value for this channel.", "max": 1500.0, "min": 800.0, "name": "RC12_MIN", "shortDesc": "RC channel 12 minimum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1.0, "group": "Radio Calibration", "longDesc": "Set to -1 to reverse channel.", "max": 1.0, "min": -1.0, "name": "RC12_REV", "shortDesc": "RC channel 12 reverse", "type": "Float", "values": [{"description": "Reverse", "value": -1.0}, {"description": "Normal", "value": 1.0}]}, {"category": "Standard", "default": 1500.0, "group": "Radio Calibration", "longDesc": "Mid point value", "max": 2200.0, "min": 800.0, "name": "RC12_TRIM", "shortDesc": "RC channel 12 trim", "type": "Float", "units": "us"}, {"category": "Standard", "default": 2000.0, "group": "Radio Calibration", "longDesc": "Maximum value for this channel.", "max": 2200.0, "min": 1500.0, "name": "RC13_MAX", "shortDesc": "RC channel 13 maximum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1000.0, "group": "Radio Calibration", "longDesc": "Minimum value for this channel.", "max": 1500.0, "min": 800.0, "name": "RC13_MIN", "shortDesc": "RC channel 13 minimum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1.0, "group": "Radio Calibration", "longDesc": "Set to -1 to reverse channel.", "max": 1.0, "min": -1.0, "name": "RC13_REV", "shortDesc": "RC channel 13 reverse", "type": "Float", "values": [{"description": "Reverse", "value": -1.0}, {"description": "Normal", "value": 1.0}]}, {"category": "Standard", "default": 1500.0, "group": "Radio Calibration", "longDesc": "Mid point value", "max": 2200.0, "min": 800.0, "name": "RC13_TRIM", "shortDesc": "RC channel 13 trim", "type": "Float", "units": "us"}, {"category": "Standard", "default": 2000.0, "group": "Radio Calibration", "longDesc": "Maximum value for this channel.", "max": 2200.0, "min": 1500.0, "name": "RC14_MAX", "shortDesc": "RC channel 14 maximum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1000.0, "group": "Radio Calibration", "longDesc": "Minimum value for this channel.", "max": 1500.0, "min": 800.0, "name": "RC14_MIN", "shortDesc": "RC channel 14 minimum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1.0, "group": "Radio Calibration", "longDesc": "Set to -1 to reverse channel.", "max": 1.0, "min": -1.0, "name": "RC14_REV", "shortDesc": "RC channel 14 reverse", "type": "Float", "values": [{"description": "Reverse", "value": -1.0}, {"description": "Normal", "value": 1.0}]}, {"category": "Standard", "default": 1500.0, "group": "Radio Calibration", "longDesc": "Mid point value", "max": 2200.0, "min": 800.0, "name": "RC14_TRIM", "shortDesc": "RC channel 14 trim", "type": "Float", "units": "us"}, {"category": "Standard", "default": 2000.0, "group": "Radio Calibration", "longDesc": "Maximum value for this channel.", "max": 2200.0, "min": 1500.0, "name": "RC15_MAX", "shortDesc": "RC channel 15 maximum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1000.0, "group": "Radio Calibration", "longDesc": "Minimum value for this channel.", "max": 1500.0, "min": 800.0, "name": "RC15_MIN", "shortDesc": "RC channel 15 minimum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1.0, "group": "Radio Calibration", "longDesc": "Set to -1 to reverse channel.", "max": 1.0, "min": -1.0, "name": "RC15_REV", "shortDesc": "RC channel 15 reverse", "type": "Float", "values": [{"description": "Reverse", "value": -1.0}, {"description": "Normal", "value": 1.0}]}, {"category": "Standard", "default": 1500.0, "group": "Radio Calibration", "longDesc": "Mid point value", "max": 2200.0, "min": 800.0, "name": "RC15_TRIM", "shortDesc": "RC channel 15 trim", "type": "Float", "units": "us"}, {"category": "Standard", "default": 2000.0, "group": "Radio Calibration", "longDesc": "Maximum value for this channel.", "max": 2200.0, "min": 1500.0, "name": "RC16_MAX", "shortDesc": "RC channel 16 maximum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1000.0, "group": "Radio Calibration", "longDesc": "Minimum value for this channel.", "max": 1500.0, "min": 800.0, "name": "RC16_MIN", "shortDesc": "RC channel 16 minimum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1.0, "group": "Radio Calibration", "longDesc": "Set to -1 to reverse channel.", "max": 1.0, "min": -1.0, "name": "RC16_REV", "shortDesc": "RC channel 16 reverse", "type": "Float", "values": [{"description": "Reverse", "value": -1.0}, {"description": "Normal", "value": 1.0}]}, {"category": "Standard", "default": 1500.0, "group": "Radio Calibration", "longDesc": "Mid point value", "max": 2200.0, "min": 800.0, "name": "RC16_TRIM", "shortDesc": "RC channel 16 trim", "type": "Float", "units": "us"}, {"category": "Standard", "default": 2000.0, "group": "Radio Calibration", "longDesc": "Maximum value for this channel.", "max": 2200.0, "min": 1500.0, "name": "RC17_MAX", "shortDesc": "RC channel 17 maximum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1000.0, "group": "Radio Calibration", "longDesc": "Minimum value for this channel.", "max": 1500.0, "min": 800.0, "name": "RC17_MIN", "shortDesc": "RC channel 17 minimum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1.0, "group": "Radio Calibration", "longDesc": "Set to -1 to reverse channel.", "max": 1.0, "min": -1.0, "name": "RC17_REV", "shortDesc": "RC channel 17 reverse", "type": "Float", "values": [{"description": "Reverse", "value": -1.0}, {"description": "Normal", "value": 1.0}]}, {"category": "Standard", "default": 1500.0, "group": "Radio Calibration", "longDesc": "Mid point value", "max": 2200.0, "min": 800.0, "name": "RC17_TRIM", "shortDesc": "RC channel 17 trim", "type": "Float", "units": "us"}, {"category": "Standard", "default": 2000.0, "group": "Radio Calibration", "longDesc": "Maximum value for this channel.", "max": 2200.0, "min": 1500.0, "name": "RC18_MAX", "shortDesc": "RC channel 18 maximum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1000.0, "group": "Radio Calibration", "longDesc": "Minimum value for this channel.", "max": 1500.0, "min": 800.0, "name": "RC18_MIN", "shortDesc": "RC channel 18 minimum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1.0, "group": "Radio Calibration", "longDesc": "Set to -1 to reverse channel.", "max": 1.0, "min": -1.0, "name": "RC18_REV", "shortDesc": "RC channel 18 reverse", "type": "Float", "values": [{"description": "Reverse", "value": -1.0}, {"description": "Normal", "value": 1.0}]}, {"category": "Standard", "default": 1500.0, "group": "Radio Calibration", "longDesc": "Mid point value", "max": 2200.0, "min": 800.0, "name": "RC18_TRIM", "shortDesc": "RC channel 18 trim", "type": "Float", "units": "us"}, {"category": "Standard", "default": 2000.0, "group": "Radio Calibration", "longDesc": "Maximum value for RC channel 1", "max": 2200.0, "min": 1500.0, "name": "RC1_MAX", "shortDesc": "RC channel 1 maximum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1000.0, "group": "Radio Calibration", "longDesc": "Minimum value for RC channel 1", "max": 1500.0, "min": 800.0, "name": "RC1_MIN", "shortDesc": "RC channel 1 minimum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1.0, "group": "Radio Calibration", "longDesc": "Set to -1 to reverse channel.", "max": 1.0, "min": -1.0, "name": "RC1_REV", "shortDesc": "RC channel 1 reverse", "type": "Float", "values": [{"description": "Reverse", "value": -1.0}, {"description": "Normal", "value": 1.0}]}, {"category": "Standard", "default": 1500.0, "group": "Radio Calibration", "longDesc": "Mid point value", "max": 2200.0, "min": 800.0, "name": "RC1_TRIM", "shortDesc": "RC channel 1 trim", "type": "Float", "units": "us"}, {"category": "Standard", "default": 2000.0, "group": "Radio Calibration", "longDesc": "Maximum value for this channel.", "max": 2200.0, "min": 1500.0, "name": "RC2_MAX", "shortDesc": "RC channel 2 maximum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1000.0, "group": "Radio Calibration", "longDesc": "Minimum value for this channel.", "max": 1500.0, "min": 800.0, "name": "RC2_MIN", "shortDesc": "RC channel 2 minimum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1.0, "group": "Radio Calibration", "longDesc": "Set to -1 to reverse channel.", "max": 1.0, "min": -1.0, "name": "RC2_REV", "shortDesc": "RC channel 2 reverse", "type": "Float", "values": [{"description": "Reverse", "value": -1.0}, {"description": "Normal", "value": 1.0}]}, {"category": "Standard", "default": 1500.0, "group": "Radio Calibration", "longDesc": "Mid point value", "max": 2200.0, "min": 800.0, "name": "RC2_TRIM", "shortDesc": "RC channel 2 trim", "type": "Float", "units": "us"}, {"category": "Standard", "default": 2000.0, "group": "Radio Calibration", "longDesc": "Maximum value for this channel.", "max": 2200.0, "min": 1500.0, "name": "RC3_MAX", "shortDesc": "RC channel 3 maximum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1000.0, "group": "Radio Calibration", "longDesc": "Minimum value for this channel.", "max": 1500.0, "min": 800.0, "name": "RC3_MIN", "shortDesc": "RC channel 3 minimum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1.0, "group": "Radio Calibration", "longDesc": "Set to -1 to reverse channel.", "max": 1.0, "min": -1.0, "name": "RC3_REV", "shortDesc": "RC channel 3 reverse", "type": "Float", "values": [{"description": "Reverse", "value": -1.0}, {"description": "Normal", "value": 1.0}]}, {"category": "Standard", "default": 1500.0, "group": "Radio Calibration", "longDesc": "Mid point value", "max": 2200.0, "min": 800.0, "name": "RC3_TRIM", "shortDesc": "RC channel 3 trim", "type": "Float", "units": "us"}, {"category": "Standard", "default": 2000.0, "group": "Radio Calibration", "longDesc": "Maximum value for this channel.", "max": 2200.0, "min": 1500.0, "name": "RC4_MAX", "shortDesc": "RC channel 4 maximum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1000.0, "group": "Radio Calibration", "longDesc": "Minimum value for this channel.", "max": 1500.0, "min": 800.0, "name": "RC4_MIN", "shortDesc": "RC channel 4 minimum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1.0, "group": "Radio Calibration", "longDesc": "Set to -1 to reverse channel.", "max": 1.0, "min": -1.0, "name": "RC4_REV", "shortDesc": "RC channel 4 reverse", "type": "Float", "values": [{"description": "Reverse", "value": -1.0}, {"description": "Normal", "value": 1.0}]}, {"category": "Standard", "default": 1500.0, "group": "Radio Calibration", "longDesc": "Mid point value", "max": 2200.0, "min": 800.0, "name": "RC4_TRIM", "shortDesc": "RC channel 4 trim", "type": "Float", "units": "us"}, {"category": "Standard", "default": 2000.0, "group": "Radio Calibration", "longDesc": "Maximum value for this channel.", "max": 2200.0, "min": 1500.0, "name": "RC5_MAX", "shortDesc": "RC channel 5 maximum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1000.0, "group": "Radio Calibration", "longDesc": "Minimum value for this channel.", "max": 1500.0, "min": 800.0, "name": "RC5_MIN", "shortDesc": "RC channel 5 minimum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1.0, "group": "Radio Calibration", "longDesc": "Set to -1 to reverse channel.", "max": 1.0, "min": -1.0, "name": "RC5_REV", "shortDesc": "RC channel 5 reverse", "type": "Float", "values": [{"description": "Reverse", "value": -1.0}, {"description": "Normal", "value": 1.0}]}, {"category": "Standard", "default": 1500.0, "group": "Radio Calibration", "longDesc": "Mid point value", "max": 2200.0, "min": 800.0, "name": "RC5_TRIM", "shortDesc": "RC channel 5 trim", "type": "Float", "units": "us"}, {"category": "Standard", "default": 2000.0, "group": "Radio Calibration", "longDesc": "Maximum value for this channel.", "max": 2200.0, "min": 1500.0, "name": "RC6_MAX", "shortDesc": "RC channel 6 maximum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1000.0, "group": "Radio Calibration", "longDesc": "Minimum value for this channel.", "max": 1500.0, "min": 800.0, "name": "RC6_MIN", "shortDesc": "RC channel 6 minimum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1.0, "group": "Radio Calibration", "longDesc": "Set to -1 to reverse channel.", "max": 1.0, "min": -1.0, "name": "RC6_REV", "shortDesc": "RC channel 6 reverse", "type": "Float", "values": [{"description": "Reverse", "value": -1.0}, {"description": "Normal", "value": 1.0}]}, {"category": "Standard", "default": 1500.0, "group": "Radio Calibration", "longDesc": "Mid point value", "max": 2200.0, "min": 800.0, "name": "RC6_TRIM", "shortDesc": "RC channel 6 trim", "type": "Float", "units": "us"}, {"category": "Standard", "default": 2000.0, "group": "Radio Calibration", "longDesc": "Maximum value for this channel.", "max": 2200.0, "min": 1500.0, "name": "RC7_MAX", "shortDesc": "RC channel 7 maximum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1000.0, "group": "Radio Calibration", "longDesc": "Minimum value for this channel.", "max": 1500.0, "min": 800.0, "name": "RC7_MIN", "shortDesc": "RC channel 7 minimum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1.0, "group": "Radio Calibration", "longDesc": "Set to -1 to reverse channel.", "max": 1.0, "min": -1.0, "name": "RC7_REV", "shortDesc": "RC channel 7 reverse", "type": "Float", "values": [{"description": "Reverse", "value": -1.0}, {"description": "Normal", "value": 1.0}]}, {"category": "Standard", "default": 1500.0, "group": "Radio Calibration", "longDesc": "Mid point value", "max": 2200.0, "min": 800.0, "name": "RC7_TRIM", "shortDesc": "RC channel 7 trim", "type": "Float", "units": "us"}, {"category": "Standard", "default": 2000.0, "group": "Radio Calibration", "longDesc": "Maximum value for this channel.", "max": 2200.0, "min": 1500.0, "name": "RC8_MAX", "shortDesc": "RC channel 8 maximum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1000.0, "group": "Radio Calibration", "longDesc": "Minimum value for this channel.", "max": 1500.0, "min": 800.0, "name": "RC8_MIN", "shortDesc": "RC channel 8 minimum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1.0, "group": "Radio Calibration", "longDesc": "Set to -1 to reverse channel.", "max": 1.0, "min": -1.0, "name": "RC8_REV", "shortDesc": "RC channel 8 reverse", "type": "Float", "values": [{"description": "Reverse", "value": -1.0}, {"description": "Normal", "value": 1.0}]}, {"category": "Standard", "default": 1500.0, "group": "Radio Calibration", "longDesc": "Mid point value", "max": 2200.0, "min": 800.0, "name": "RC8_TRIM", "shortDesc": "RC channel 8 trim", "type": "Float", "units": "us"}, {"category": "Standard", "default": 2000.0, "group": "Radio Calibration", "longDesc": "Maximum value for this channel.", "max": 2200.0, "min": 1500.0, "name": "RC9_MAX", "shortDesc": "RC channel 9 maximum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1000.0, "group": "Radio Calibration", "longDesc": "Minimum value for this channel.", "max": 1500.0, "min": 800.0, "name": "RC9_MIN", "shortDesc": "RC channel 9 minimum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1.0, "group": "Radio Calibration", "longDesc": "Set to -1 to reverse channel.", "max": 1.0, "min": -1.0, "name": "RC9_REV", "shortDesc": "RC channel 9 reverse", "type": "Float", "values": [{"description": "Reverse", "value": -1.0}, {"description": "Normal", "value": 1.0}]}, {"category": "Standard", "default": 1500.0, "group": "Radio Calibration", "longDesc": "Mid point value", "max": 2200.0, "min": 800.0, "name": "RC9_TRIM", "shortDesc": "RC channel 9 trim", "type": "Float", "units": "us"}, {"category": "Standard", "default": 0, "group": "Radio Calibration", "longDesc": "This parameter is used by Ground Station software to save the number\nof channels which were used during RC calibration. It is only meant\nfor ground station use.", "max": 18, "min": 0, "name": "RC_CHAN_CNT", "shortDesc": "RC channel count", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "Radio Calibration", "longDesc": "Use RC_MAP_FAILSAFE to specify which channel is used to indicate RC loss via this threshold.\nBy default this is the throttle channel.\nSet to a PWM value slightly above the PWM value for the channel (e.g. throttle) in a failsafe event,\nbut below the minimum PWM value for the channel during normal operation.\nNote: The default value of 0 disables the feature (it is below the expected range).", "max": 2200, "min": 0, "name": "RC_FAILS_THR", "shortDesc": "Failsafe channel PWM threshold", "type": "Int32", "units": "us"}, {"category": "Standard", "default": 0, "group": "Radio Calibration", "max": 18, "min": 0, "name": "RC_MAP_AUX1", "shortDesc": "AUX1 Passthrough RC channel", "type": "Int32", "values": [{"description": "Unassigned", "value": 0}, {"description": "Channel 1", "value": 1}, {"description": "Channel 2", "value": 2}, {"description": "Channel 3", "value": 3}, {"description": "Channel 4", "value": 4}, {"description": "Channel 5", "value": 5}, {"description": "Channel 6", "value": 6}, {"description": "Channel 7", "value": 7}, {"description": "Channel 8", "value": 8}, {"description": "Channel 9", "value": 9}, {"description": "Channel 10", "value": 10}, {"description": "Channel 11", "value": 11}, {"description": "Channel 12", "value": 12}, {"description": "Channel 13", "value": 13}, {"description": "Channel 14", "value": 14}, {"description": "Channel 15", "value": 15}, {"description": "Channel 16", "value": 16}, {"description": "Channel 17", "value": 17}, {"description": "Channel 18", "value": 18}]}, {"category": "Standard", "default": 0, "group": "Radio Calibration", "max": 18, "min": 0, "name": "RC_MAP_AUX2", "shortDesc": "AUX2 Passthrough RC channel", "type": "Int32", "values": [{"description": "Unassigned", "value": 0}, {"description": "Channel 1", "value": 1}, {"description": "Channel 2", "value": 2}, {"description": "Channel 3", "value": 3}, {"description": "Channel 4", "value": 4}, {"description": "Channel 5", "value": 5}, {"description": "Channel 6", "value": 6}, {"description": "Channel 7", "value": 7}, {"description": "Channel 8", "value": 8}, {"description": "Channel 9", "value": 9}, {"description": "Channel 10", "value": 10}, {"description": "Channel 11", "value": 11}, {"description": "Channel 12", "value": 12}, {"description": "Channel 13", "value": 13}, {"description": "Channel 14", "value": 14}, {"description": "Channel 15", "value": 15}, {"description": "Channel 16", "value": 16}, {"description": "Channel 17", "value": 17}, {"description": "Channel 18", "value": 18}]}, {"category": "Standard", "default": 0, "group": "Radio Calibration", "max": 18, "min": 0, "name": "RC_MAP_AUX3", "shortDesc": "AUX3 Passthrough RC channel", "type": "Int32", "values": [{"description": "Unassigned", "value": 0}, {"description": "Channel 1", "value": 1}, {"description": "Channel 2", "value": 2}, {"description": "Channel 3", "value": 3}, {"description": "Channel 4", "value": 4}, {"description": "Channel 5", "value": 5}, {"description": "Channel 6", "value": 6}, {"description": "Channel 7", "value": 7}, {"description": "Channel 8", "value": 8}, {"description": "Channel 9", "value": 9}, {"description": "Channel 10", "value": 10}, {"description": "Channel 11", "value": 11}, {"description": "Channel 12", "value": 12}, {"description": "Channel 13", "value": 13}, {"description": "Channel 14", "value": 14}, {"description": "Channel 15", "value": 15}, {"description": "Channel 16", "value": 16}, {"description": "Channel 17", "value": 17}, {"description": "Channel 18", "value": 18}]}, {"category": "Standard", "default": 0, "group": "Radio Calibration", "max": 18, "min": 0, "name": "RC_MAP_AUX4", "shortDesc": "AUX4 Passthrough RC channel", "type": "Int32", "values": [{"description": "Unassigned", "value": 0}, {"description": "Channel 1", "value": 1}, {"description": "Channel 2", "value": 2}, {"description": "Channel 3", "value": 3}, {"description": "Channel 4", "value": 4}, {"description": "Channel 5", "value": 5}, {"description": "Channel 6", "value": 6}, {"description": "Channel 7", "value": 7}, {"description": "Channel 8", "value": 8}, {"description": "Channel 9", "value": 9}, {"description": "Channel 10", "value": 10}, {"description": "Channel 11", "value": 11}, {"description": "Channel 12", "value": 12}, {"description": "Channel 13", "value": 13}, {"description": "Channel 14", "value": 14}, {"description": "Channel 15", "value": 15}, {"description": "Channel 16", "value": 16}, {"description": "Channel 17", "value": 17}, {"description": "Channel 18", "value": 18}]}, {"category": "Standard", "default": 0, "group": "Radio Calibration", "max": 18, "min": 0, "name": "RC_MAP_AUX5", "shortDesc": "AUX5 Passthrough RC channel", "type": "Int32", "values": [{"description": "Unassigned", "value": 0}, {"description": "Channel 1", "value": 1}, {"description": "Channel 2", "value": 2}, {"description": "Channel 3", "value": 3}, {"description": "Channel 4", "value": 4}, {"description": "Channel 5", "value": 5}, {"description": "Channel 6", "value": 6}, {"description": "Channel 7", "value": 7}, {"description": "Channel 8", "value": 8}, {"description": "Channel 9", "value": 9}, {"description": "Channel 10", "value": 10}, {"description": "Channel 11", "value": 11}, {"description": "Channel 12", "value": 12}, {"description": "Channel 13", "value": 13}, {"description": "Channel 14", "value": 14}, {"description": "Channel 15", "value": 15}, {"description": "Channel 16", "value": 16}, {"description": "Channel 17", "value": 17}, {"description": "Channel 18", "value": 18}]}, {"category": "Standard", "default": 0, "group": "Radio Calibration", "max": 18, "min": 0, "name": "RC_MAP_AUX6", "shortDesc": "AUX6 Passthrough RC channel", "type": "Int32", "values": [{"description": "Unassigned", "value": 0}, {"description": "Channel 1", "value": 1}, {"description": "Channel 2", "value": 2}, {"description": "Channel 3", "value": 3}, {"description": "Channel 4", "value": 4}, {"description": "Channel 5", "value": 5}, {"description": "Channel 6", "value": 6}, {"description": "Channel 7", "value": 7}, {"description": "Channel 8", "value": 8}, {"description": "Channel 9", "value": 9}, {"description": "Channel 10", "value": 10}, {"description": "Channel 11", "value": 11}, {"description": "Channel 12", "value": 12}, {"description": "Channel 13", "value": 13}, {"description": "Channel 14", "value": 14}, {"description": "Channel 15", "value": 15}, {"description": "Channel 16", "value": 16}, {"description": "Channel 17", "value": 17}, {"description": "Channel 18", "value": 18}]}, {"category": "Standard", "default": 0, "group": "Radio Calibration", "max": 18, "min": 0, "name": "RC_MAP_ENG_MOT", "shortDesc": "RC channel to engage the main motor (for helicopters)", "type": "Int32", "values": [{"description": "Unassigned", "value": 0}, {"description": "Channel 1", "value": 1}, {"description": "Channel 2", "value": 2}, {"description": "Channel 3", "value": 3}, {"description": "Channel 4", "value": 4}, {"description": "Channel 5", "value": 5}, {"description": "Channel 6", "value": 6}, {"description": "Channel 7", "value": 7}, {"description": "Channel 8", "value": 8}, {"description": "Channel 9", "value": 9}, {"description": "Channel 10", "value": 10}, {"description": "Channel 11", "value": 11}, {"description": "Channel 12", "value": 12}, {"description": "Channel 13", "value": 13}, {"description": "Channel 14", "value": 14}, {"description": "Channel 15", "value": 15}, {"description": "Channel 16", "value": 16}, {"description": "Channel 17", "value": 17}, {"description": "Channel 18", "value": 18}]}, {"category": "Standard", "default": 0, "group": "Radio Calibration", "longDesc": "Configures which RC channel is used by the receiver to indicate the signal was lost\n(on receivers that use output a fixed signal value to report lost signal).\nIf set to 0, the channel mapped to throttle is used.\nUse RC_FAILS_THR to set the threshold indicating lost signal. By default it's below\nthe expected range and hence disabled.", "max": 18, "min": 0, "name": "RC_MAP_FAILSAFE", "shortDesc": "Failsafe channel mapping", "type": "Int32", "values": [{"description": "Unassigned", "value": 0}, {"description": "Channel 1", "value": 1}, {"description": "Channel 2", "value": 2}, {"description": "Channel 3", "value": 3}, {"description": "Channel 4", "value": 4}, {"description": "Channel 5", "value": 5}, {"description": "Channel 6", "value": 6}, {"description": "Channel 7", "value": 7}, {"description": "Channel 8", "value": 8}, {"description": "Channel 9", "value": 9}, {"description": "Channel 10", "value": 10}, {"description": "Channel 11", "value": 11}, {"description": "Channel 12", "value": 12}, {"description": "Channel 13", "value": 13}, {"description": "Channel 14", "value": 14}, {"description": "Channel 15", "value": 15}, {"description": "Channel 16", "value": 16}, {"description": "Channel 17", "value": 17}, {"description": "Channel 18", "value": 18}]}, {"category": "Standard", "default": 0, "group": "Radio Calibration", "longDesc": "Can be used for parameter tuning with the RC. This one is further referenced as the 1st parameter channel.\nSet to 0 to deactivate *", "max": 18, "min": 0, "name": "RC_MAP_PARAM1", "shortDesc": "PARAM1 tuning channel", "type": "Int32", "values": [{"description": "Unassigned", "value": 0}, {"description": "Channel 1", "value": 1}, {"description": "Channel 2", "value": 2}, {"description": "Channel 3", "value": 3}, {"description": "Channel 4", "value": 4}, {"description": "Channel 5", "value": 5}, {"description": "Channel 6", "value": 6}, {"description": "Channel 7", "value": 7}, {"description": "Channel 8", "value": 8}, {"description": "Channel 9", "value": 9}, {"description": "Channel 10", "value": 10}, {"description": "Channel 11", "value": 11}, {"description": "Channel 12", "value": 12}, {"description": "Channel 13", "value": 13}, {"description": "Channel 14", "value": 14}, {"description": "Channel 15", "value": 15}, {"description": "Channel 16", "value": 16}, {"description": "Channel 17", "value": 17}, {"description": "Channel 18", "value": 18}]}, {"category": "Standard", "default": 0, "group": "Radio Calibration", "longDesc": "Can be used for parameter tuning with the RC. This one is further referenced as the 2nd parameter channel.\nSet to 0 to deactivate *", "max": 18, "min": 0, "name": "RC_MAP_PARAM2", "shortDesc": "PARAM2 tuning channel", "type": "Int32", "values": [{"description": "Unassigned", "value": 0}, {"description": "Channel 1", "value": 1}, {"description": "Channel 2", "value": 2}, {"description": "Channel 3", "value": 3}, {"description": "Channel 4", "value": 4}, {"description": "Channel 5", "value": 5}, {"description": "Channel 6", "value": 6}, {"description": "Channel 7", "value": 7}, {"description": "Channel 8", "value": 8}, {"description": "Channel 9", "value": 9}, {"description": "Channel 10", "value": 10}, {"description": "Channel 11", "value": 11}, {"description": "Channel 12", "value": 12}, {"description": "Channel 13", "value": 13}, {"description": "Channel 14", "value": 14}, {"description": "Channel 15", "value": 15}, {"description": "Channel 16", "value": 16}, {"description": "Channel 17", "value": 17}, {"description": "Channel 18", "value": 18}]}, {"category": "Standard", "default": 0, "group": "Radio Calibration", "longDesc": "Can be used for parameter tuning with the RC. This one is further referenced as the 3th parameter channel.\nSet to 0 to deactivate *", "max": 18, "min": 0, "name": "RC_MAP_PARAM3", "shortDesc": "PARAM3 tuning channel", "type": "Int32", "values": [{"description": "Unassigned", "value": 0}, {"description": "Channel 1", "value": 1}, {"description": "Channel 2", "value": 2}, {"description": "Channel 3", "value": 3}, {"description": "Channel 4", "value": 4}, {"description": "Channel 5", "value": 5}, {"description": "Channel 6", "value": 6}, {"description": "Channel 7", "value": 7}, {"description": "Channel 8", "value": 8}, {"description": "Channel 9", "value": 9}, {"description": "Channel 10", "value": 10}, {"description": "Channel 11", "value": 11}, {"description": "Channel 12", "value": 12}, {"description": "Channel 13", "value": 13}, {"description": "Channel 14", "value": 14}, {"description": "Channel 15", "value": 15}, {"description": "Channel 16", "value": 16}, {"description": "Channel 17", "value": 17}, {"description": "Channel 18", "value": 18}]}, {"category": "Standard", "default": 0, "group": "Radio Calibration", "longDesc": "The channel index (starting from 1 for channel 1) indicates\nwhich channel should be used for reading pitch inputs from.\nA value of zero indicates the switch is not assigned.", "max": 18, "min": 0, "name": "RC_MAP_PITCH", "shortDesc": "Pitch control channel mapping", "type": "Int32", "values": [{"description": "Unassigned", "value": 0}, {"description": "Channel 1", "value": 1}, {"description": "Channel 2", "value": 2}, {"description": "Channel 3", "value": 3}, {"description": "Channel 4", "value": 4}, {"description": "Channel 5", "value": 5}, {"description": "Channel 6", "value": 6}, {"description": "Channel 7", "value": 7}, {"description": "Channel 8", "value": 8}, {"description": "Channel 9", "value": 9}, {"description": "Channel 10", "value": 10}, {"description": "Channel 11", "value": 11}, {"description": "Channel 12", "value": 12}, {"description": "Channel 13", "value": 13}, {"description": "Channel 14", "value": 14}, {"description": "Channel 15", "value": 15}, {"description": "Channel 16", "value": 16}, {"description": "Channel 17", "value": 17}, {"description": "Channel 18", "value": 18}]}, {"category": "Standard", "default": 0, "group": "Radio Calibration", "longDesc": "The channel index (starting from 1 for channel 1) indicates\nwhich channel should be used for reading roll inputs from.\nA value of zero indicates the switch is not assigned.", "max": 18, "min": 0, "name": "RC_MAP_ROLL", "shortDesc": "Roll control channel mapping", "type": "Int32", "values": [{"description": "Unassigned", "value": 0}, {"description": "Channel 1", "value": 1}, {"description": "Channel 2", "value": 2}, {"description": "Channel 3", "value": 3}, {"description": "Channel 4", "value": 4}, {"description": "Channel 5", "value": 5}, {"description": "Channel 6", "value": 6}, {"description": "Channel 7", "value": 7}, {"description": "Channel 8", "value": 8}, {"description": "Channel 9", "value": 9}, {"description": "Channel 10", "value": 10}, {"description": "Channel 11", "value": 11}, {"description": "Channel 12", "value": 12}, {"description": "Channel 13", "value": 13}, {"description": "Channel 14", "value": 14}, {"description": "Channel 15", "value": 15}, {"description": "Channel 16", "value": 16}, {"description": "Channel 17", "value": 17}, {"description": "Channel 18", "value": 18}]}, {"category": "Standard", "default": 0, "group": "Radio Calibration", "longDesc": "The channel index (starting from 1 for channel 1) indicates\nwhich channel should be used for reading throttle inputs from.\nA value of zero indicates the switch is not assigned.", "max": 18, "min": 0, "name": "RC_MAP_THROTTLE", "shortDesc": "Throttle control channel mapping", "type": "Int32", "values": [{"description": "Unassigned", "value": 0}, {"description": "Channel 1", "value": 1}, {"description": "Channel 2", "value": 2}, {"description": "Channel 3", "value": 3}, {"description": "Channel 4", "value": 4}, {"description": "Channel 5", "value": 5}, {"description": "Channel 6", "value": 6}, {"description": "Channel 7", "value": 7}, {"description": "Channel 8", "value": 8}, {"description": "Channel 9", "value": 9}, {"description": "Channel 10", "value": 10}, {"description": "Channel 11", "value": 11}, {"description": "Channel 12", "value": 12}, {"description": "Channel 13", "value": 13}, {"description": "Channel 14", "value": 14}, {"description": "Channel 15", "value": 15}, {"description": "Channel 16", "value": 16}, {"description": "Channel 17", "value": 17}, {"description": "Channel 18", "value": 18}]}, {"category": "Standard", "default": 0, "group": "Radio Calibration", "longDesc": "The channel index (starting from 1 for channel 1) indicates\nwhich channel should be used for reading yaw inputs from.\nA value of zero indicates the switch is not assigned.", "max": 18, "min": 0, "name": "RC_MAP_YAW", "shortDesc": "Yaw control channel mapping", "type": "Int32", "values": [{"description": "Unassigned", "value": 0}, {"description": "Channel 1", "value": 1}, {"description": "Channel 2", "value": 2}, {"description": "Channel 3", "value": 3}, {"description": "Channel 4", "value": 4}, {"description": "Channel 5", "value": 5}, {"description": "Channel 6", "value": 6}, {"description": "Channel 7", "value": 7}, {"description": "Channel 8", "value": 8}, {"description": "Channel 9", "value": 9}, {"description": "Channel 10", "value": 10}, {"description": "Channel 11", "value": 11}, {"description": "Channel 12", "value": 12}, {"description": "Channel 13", "value": 13}, {"description": "Channel 14", "value": 14}, {"description": "Channel 15", "value": 15}, {"description": "Channel 16", "value": 16}, {"description": "Channel 17", "value": 17}, {"description": "Channel 18", "value": 18}]}, {"category": "Standard", "default": 0, "group": "Radio Calibration", "longDesc": "0: do not read RSSI from input channel\n1-18: read RSSI from specified input channel\nSpecify the range for RSSI input with RC_RSSI_PWM_MIN and RC_RSSI_PWM_MAX parameters.", "max": 18, "min": 0, "name": "RC_RSSI_PWM_CHAN", "shortDesc": "PWM input channel that provides RSSI", "type": "Int32", "values": [{"description": "Unassigned", "value": 0}, {"description": "Channel 1", "value": 1}, {"description": "Channel 2", "value": 2}, {"description": "Channel 3", "value": 3}, {"description": "Channel 4", "value": 4}, {"description": "Channel 5", "value": 5}, {"description": "Channel 6", "value": 6}, {"description": "Channel 7", "value": 7}, {"description": "Channel 8", "value": 8}, {"description": "Channel 9", "value": 9}, {"description": "Channel 10", "value": 10}, {"description": "Channel 11", "value": 11}, {"description": "Channel 12", "value": 12}, {"description": "Channel 13", "value": 13}, {"description": "Channel 14", "value": 14}, {"description": "Channel 15", "value": 15}, {"description": "Channel 16", "value": 16}, {"description": "Channel 17", "value": 17}, {"description": "Channel 18", "value": 18}]}, {"category": "Standard", "default": 2000, "group": "Radio Calibration", "longDesc": "Only used if RC_RSSI_PWM_CHAN > 0", "max": 2000, "min": 0, "name": "RC_RSSI_PWM_MAX", "shortDesc": "Max input value for RSSI reading", "type": "Int32"}, {"category": "Standard", "default": 1000, "group": "Radio Calibration", "longDesc": "Only used if RC_RSSI_PWM_CHAN > 0", "max": 2000, "min": 0, "name": "RC_RSSI_PWM_MIN", "shortDesc": "Min input value for RSSI reading", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Radio Calibration", "increment": 0.01, "longDesc": "The trim value is the actuator control value the system needs\nfor straight and level flight.", "max": 0.5, "min": -0.5, "name": "TRIM_PITCH", "shortDesc": "Pitch trim", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Radio Calibration", "increment": 0.01, "longDesc": "The trim value is the actuator control value the system needs\nfor straight and level flight.", "max": 0.5, "min": -0.5, "name": "TRIM_ROLL", "shortDesc": "Roll trim", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Radio Calibration", "increment": 0.01, "longDesc": "The trim value is the actuator control value the system needs\nfor straight and level flight.", "max": 0.5, "min": -0.5, "name": "TRIM_YAW", "shortDesc": "Yaw trim", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.75, "group": "Radio Switches", "longDesc": "0-1 indicate where in the full channel range the threshold sits\n0 : min\n1 : max\nsign indicates polarity of comparison\npositive : true when channel>th\nnegative : true when channelth\nnegative : true when channelth\nnegative : true when channelth\nnegative : true when channelth\nnegative : true when channelth\nnegative : true when channelth\nnegative : true when channelth\nnegative : true when channelth\nnegative : true when channelth\nnegative : true when channel The rover starts to cut the corner earlier.", "max": 100.0, "min": 1.0, "name": "RA_ACC_RAD_GAIN", "shortDesc": "Tuning parameter for corner cutting", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": -1.0, "group": "Rover Ackermann", "increment": 0.01, "longDesc": "The controller scales the acceptance radius based on the angle between\nthe previous, current and next waypoint.\nHigher value -> smoother trajectory at the cost of how close the rover gets\nto the waypoint (Set to -1 to disable corner cutting).", "max": 100.0, "min": -1.0, "name": "RA_ACC_RAD_MAX", "shortDesc": "Maximum acceptance radius for the waypoints", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Rover Ackermann", "increment": 0.01, "max": 1.5708, "min": 0.0, "name": "RA_MAX_STR_ANG", "shortDesc": "Maximum steering angle", "type": "Float", "units": "rad"}, {"category": "Standard", "decimalPlaces": 2, "default": -1.0, "group": "Rover Ackermann", "increment": 0.01, "longDesc": "Set to -1 to disable.", "max": 1000.0, "min": -1.0, "name": "RA_STR_RATE_LIM", "shortDesc": "Steering rate limit", "type": "Float", "units": "deg/s"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Rover Ackermann", "increment": 0.001, "longDesc": "Distance from the front to the rear axle.", "max": 100.0, "min": 0.0, "name": "RA_WHEEL_BASE", "shortDesc": "Wheel base", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Rover Attitude Control", "increment": 0.01, "max": 100.0, "min": 0.0, "name": "RO_YAW_P", "shortDesc": "Proportional gain for closed loop yaw controller", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.174533, "group": "Rover Differential", "increment": 0.01, "longDesc": "This threshold is used for the state machine to switch from driving to turning based on the\nerror between the desired and actual yaw. It is also used as the threshold whether the rover should come\nto a smooth stop at the next waypoint. This slow down effect is active if the angle between the\nline segments from prevWP-currWP and currWP-nextWP is smaller then 180 - RD_TRANS_DRV_TRN.", "max": 3.14159, "min": 0.001, "name": "RD_TRANS_DRV_TRN", "shortDesc": "Yaw error threshhold to switch from driving to spot turning", "type": "Float", "units": "rad"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0872665, "group": "Rover Differential", "increment": 0.01, "longDesc": "This threshold is used for the state machine to switch from turning to driving based on the\nerror between the desired and actual yaw.", "max": 3.14159, "min": 0.001, "name": "RD_TRANS_TRN_DRV", "shortDesc": "Yaw error threshhold to switch from spot turning to driving", "type": "Float", "units": "rad"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Rover Differential", "increment": 0.001, "longDesc": "Distance from the center of the right wheel to the center of the left wheel.", "max": 100.0, "min": 0.0, "name": "RD_WHEEL_TRACK", "shortDesc": "Wheel track", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 3, "default": 1.0, "group": "Rover Differential", "increment": 0.01, "longDesc": "Assign value <1.0 to decrease stick response for yaw control.", "max": 1.0, "min": 0.1, "name": "RD_YAW_STK_GAIN", "shortDesc": "Yaw stick gain for Manual mode", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.17, "group": "Rover Mecanum", "increment": 0.01, "longDesc": "Threshold for the angle between the active cruise direction and the cruise direction given\nby the stick inputs.\nThis can be understood as a deadzone for the combined stick inputs for forward/backwards\nand lateral speed which defines a course direction.", "max": 3.14, "min": 0.0, "name": "RM_COURSE_CTL_TH", "shortDesc": "Threshold to update course control in manual position mode", "type": "Float", "units": "rad"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Rover Mecanum", "increment": 0.001, "longDesc": "Distance from the center of the right wheel to the center of the left wheel.", "max": 100.0, "min": 0.0, "name": "RM_WHEEL_TRACK", "shortDesc": "Wheel track", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 3, "default": 1.0, "group": "Rover Mecanum", "increment": 0.01, "longDesc": "Assign value <1.0 to decrease stick response for yaw control.", "max": 1.0, "min": 0.1, "name": "RM_YAW_STK_GAIN", "shortDesc": "Yaw stick gain for Manual mode", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": -1.0, "group": "Rover Rate Control", "increment": 0.01, "longDesc": "Used to cap how quickly the magnitude of yaw rate setpoints can increase.\nSet to -1 to disable.", "max": 10000.0, "min": -1.0, "name": "RO_YAW_ACCEL_LIM", "shortDesc": "Yaw acceleration limit", "type": "Float", "units": "deg/s^2"}, {"category": "Standard", "decimalPlaces": 2, "default": -1.0, "group": "Rover Rate Control", "increment": 0.01, "longDesc": "Used to cap how quickly the magnitude of yaw rate setpoints can decrease.\nSet to -1 to disable.", "max": 10000.0, "min": -1.0, "name": "RO_YAW_DECEL_LIM", "shortDesc": "Yaw deceleration limit", "type": "Float", "units": "deg/s^2"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Rover Rate Control", "longDesc": "Exponential factor for tuning the input curve shape.\n0 Purely linear input curve\n1 Purely cubic input curve", "max": 1.0, "min": 0.0, "name": "RO_YAW_EXPO", "shortDesc": "Yaw rate expo factor", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "Rover Rate Control", "increment": 0.01, "longDesc": "Multiplicative correction factor for the feedforward mapping of the yaw rate controller.\nIncrease this value (x > 1) if the measured yaw rate is lower than the setpoint, decrease (0 < x < 1) otherwise.\nNote: Tuning this is particularly useful for skid-steered rovers, or rovers with misaligned wheels/steering axes\nthat cause a lot of friction when turning.", "max": 10000.0, "min": 0.01, "name": "RO_YAW_RATE_CORR", "shortDesc": "Yaw rate correction factor", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Rover Rate Control", "increment": 0.01, "max": 100.0, "min": 0.0, "name": "RO_YAW_RATE_I", "shortDesc": "Integral gain for closed loop yaw rate controller", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Rover Rate Control", "increment": 0.01, "longDesc": "Used to cap yaw rate setpoints and map controller inputs to yaw rate setpoints\nin Acro, Stabilized and Position mode.", "max": 10000.0, "min": 0.0, "name": "RO_YAW_RATE_LIM", "shortDesc": "Yaw rate limit", "type": "Float", "units": "deg/s"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Rover Rate Control", "increment": 0.01, "max": 100.0, "min": 0.0, "name": "RO_YAW_RATE_P", "shortDesc": "Proportional gain for closed loop yaw rate controller", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 3.0, "group": "Rover Rate Control", "increment": 0.01, "longDesc": "The minimum threshold for the yaw rate measurement not to be interpreted as zero.", "max": 100.0, "min": 0.0, "name": "RO_YAW_RATE_TH", "shortDesc": "Yaw rate measurement threshold", "type": "Float", "units": "deg/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.1, "group": "Rover Rate Control", "increment": 0.01, "longDesc": "Percentage of stick input range that will be interpreted as zero around the stick centered value.", "max": 1.0, "min": 0.0, "name": "RO_YAW_STICK_DZ", "shortDesc": "Yaw stick deadzone", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Rover Rate Control", "longDesc": "\"Superexponential\" factor for refining the input curve shape tuned using RO_YAW_EXPO.\n0 Pure Expo function\n0.7 reasonable shape enhancement for intuitive stick feel\n0.95 very strong bent input curve only near maxima have effect", "max": 0.95, "min": 0.0, "name": "RO_YAW_SUPEXPO", "shortDesc": "Yaw rate super expo factor", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": -1.0, "group": "Rover Velocity Control", "increment": 0.01, "longDesc": "Set to -1 to disable.\nFor mecanum rovers this limit is used for longitudinal and lateral acceleration.", "max": 100.0, "min": -1.0, "name": "RO_ACCEL_LIM", "shortDesc": "Acceleration limit", "type": "Float", "units": "m/s^2"}, {"category": "Standard", "decimalPlaces": 2, "default": -1.0, "group": "Rover Velocity Control", "increment": 0.01, "longDesc": "Set to -1 to disable.\nNote that if it is disabled the rover will not slow down when approaching waypoints in auto modes.\nFor mecanum rovers this limit is used for longitudinal and lateral deceleration.", "max": 100.0, "min": -1.0, "name": "RO_DECEL_LIM", "shortDesc": "Deceleration limit", "type": "Float", "units": "m/s^2"}, {"category": "Standard", "decimalPlaces": 2, "default": -1.0, "group": "Rover Velocity Control", "increment": 0.01, "longDesc": "Set to -1 to disable.\nNote that if it is disabled the rover will not slow down when approaching waypoints in auto modes.\nFor mecanum rovers this limit is used for longitudinal and lateral jerk.", "max": 100.0, "min": -1.0, "name": "RO_JERK_LIM", "shortDesc": "Jerk limit", "type": "Float", "units": "m/s^3"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Rover Velocity Control", "increment": 0.01, "longDesc": "Used to linearly map speeds [m/s] to throttle values [-1. 1].", "max": 100.0, "min": 0.0, "name": "RO_MAX_THR_SPEED", "shortDesc": "Speed the rover drives at maximum throttle", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Rover Velocity Control", "increment": 0.001, "max": 100.0, "min": 0.0, "name": "RO_SPEED_I", "shortDesc": "Integral gain for ground speed controller", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": -1.0, "group": "Rover Velocity Control", "increment": 0.01, "longDesc": "Used to cap speed setpoints and map controller inputs to speed setpoints in Position mode.", "max": 100.0, "min": -1.0, "name": "RO_SPEED_LIM", "shortDesc": "Speed limit", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Rover Velocity Control", "increment": 0.01, "max": 100.0, "min": 0.0, "name": "RO_SPEED_P", "shortDesc": "Proportional gain for ground speed controller", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": -1.0, "group": "Rover Velocity Control", "increment": 0.01, "longDesc": "Reduced_speed = RO_MAX_THR_SPEED * (1 - normalized_course_error * RO_SPEED_RED)\nThe normalized course error is the angle between the current course and the bearing setpoint\ninterpolated from [0, 180] -> [0, 1].\nHigher value -> More speed reduction.\nNote: This is also used to calculate the speed at which the vehicle arrives at a waypoint in auto modes.\nSet to -1 to disable bearing error based speed reduction.", "max": 100.0, "min": -1.0, "name": "RO_SPEED_RED", "shortDesc": "Tuning parameter for the speed reduction based on the course error", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.1, "group": "Rover Velocity Control", "increment": 0.01, "longDesc": "Set to -1 to disable.\nThe minimum threshold for the speed measurement not to be interpreted as zero.", "max": 100.0, "min": 0.0, "name": "RO_SPEED_TH", "shortDesc": "Speed measurement threshold", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "Runway Takeoff", "increment": 0.01, "max": 1.0, "min": 0.0, "name": "RWTO_MAX_THR", "shortDesc": "Throttle during runway takeoff", "type": "Float", "units": "norm"}, {"category": "Standard", "default": 1, "group": "Runway Takeoff", "longDesc": "This is useful when map, GNSS, or yaw errors on ground are misaligned with what the operator intends for takeoff course.\nParticularly useful for skinny runways or if the wheel servo is a bit off trim.", "name": "RWTO_NUDGE", "shortDesc": "Enable use of yaw stick for nudging the wheel during runway ground roll", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "Runway Takeoff", "increment": 0.5, "longDesc": "A taildragger with steerable wheel might need to pitch up\na little to keep its wheel on the ground before airspeed\nto takeoff is reached.", "max": 20.0, "min": -10.0, "name": "RWTO_PSP", "shortDesc": "Pitch setpoint during taxi / before takeoff rotation airspeed is reached", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 2, "default": 2.0, "group": "Runway Takeoff", "increment": 0.1, "max": 15.0, "min": 1.0, "name": "RWTO_RAMP_TIME", "shortDesc": "Throttle ramp up time for runway takeoff", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 1, "default": -1.0, "group": "Runway Takeoff", "increment": 0.1, "longDesc": "The calibrated airspeed threshold during the takeoff ground roll when the plane should start rotating (pitching up).\nMust be less than the takeoff airspeed, will otherwise be capped at the takeoff airpeed (see FW_TKO_AIRSPD).\nIf set <= 0.0, defaults to 0.9 * takeoff airspeed (see FW_TKO_AIRSPD)", "min": -1.0, "name": "RWTO_ROT_AIRSPD", "shortDesc": "Takeoff rotation airspeed", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 1.0, "group": "Runway Takeoff", "increment": 0.1, "longDesc": "This is the time desired to linearly ramp in takeoff pitch constraints during the takeoff rotation", "min": 0.1, "name": "RWTO_ROT_TIME", "shortDesc": "Takeoff rotation time", "type": "Float", "units": "s"}, {"category": "Standard", "default": 0, "group": "Runway Takeoff", "name": "RWTO_TKOFF", "shortDesc": "Runway takeoff with landing gear", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"bitmask": [{"description": "SD card logging", "index": 0}, {"description": "Mavlink logging", "index": 1}], "category": "Standard", "default": 3, "group": "SD Logging", "longDesc": "If no logging is set the logger will not be started. Set bits true to enable: 0: SD card logging 1: Mavlink logging", "max": 3, "min": 0, "name": "SDLOG_BACKEND", "rebootRequired": true, "shortDesc": "Logging Backend (integer bitmask)", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "SD Logging", "longDesc": "When enabled, logging will not start from boot if battery power is not detected (e.g. powered via USB on a test bench). This prevents extraneous flight logs from being created during bench testing. Note that this only applies to log-from-boot modes. This has no effect on arm-based modes.", "name": "SDLOG_BOOT_BAT", "shortDesc": "Battery-only Logging", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 0, "group": "SD Logging", "longDesc": "If there are more log directories than this value, the system will delete the oldest directories during startup. In addition, the system will delete old logs if there is not enough free space left. The minimum amount is 300 MB. If this is set to 0, old directories will only be removed if the free space falls below the minimum. Note: this does not apply to mission log files.", "max": 1000, "min": 0, "name": "SDLOG_DIRS_MAX", "rebootRequired": true, "shortDesc": "Maximum number of log directories to keep", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "SD Logging", "longDesc": "If enabled, a small additional \"mission\" log file will be written to the SD card. The log contains just those messages that are useful for tasks like generating flight statistics and geotagging. The different modes can be used to further reduce the logged data (and thus the log file size). For example, choose geotagging mode to only log data required for geotagging. Note that the normal/full log is still created, and contains all the data in the mission log (and more).", "name": "SDLOG_MISSION", "rebootRequired": true, "shortDesc": "Mission Log", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "All mission messages", "value": 1}, {"description": "Geotagging messages", "value": 2}]}, {"category": "Standard", "default": 0, "group": "SD Logging", "longDesc": "Determines when to start and stop logging. By default, logging is started when arming the system, and stopped when disarming. Note: The logging start/end points that can be configured here only apply to SD logging. The mavlink backend is started/stopped independently of these points.", "name": "SDLOG_MODE", "rebootRequired": true, "shortDesc": "Logging Mode", "type": "Int32", "values": [{"description": "when armed until disarm (default)", "value": 0}, {"description": "from boot until disarm", "value": 1}, {"description": "from boot until shutdown", "value": 2}, {"description": "while manual input AUX1 >30%", "value": 3}, {"description": "from 1st armed until shutdown", "value": 4}]}, {"bitmask": [{"description": "Default set (general log analysis)", "index": 0}, {"description": "Estimator replay (EKF2)", "index": 1}, {"description": "Thermal calibration", "index": 2}, {"description": "System identification", "index": 3}, {"description": "High rate", "index": 4}, {"description": "Debug", "index": 5}, {"description": "Sensor comparison", "index": 6}, {"description": "Computer Vision and Avoidance", "index": 7}, {"description": "Raw FIFO high-rate IMU (Gyro)", "index": 8}, {"description": "Raw FIFO high-rate IMU (Accel)", "index": 9}, {"description": "Mavlink tunnel message logging", "index": 10}, {"description": "High rate sensors", "index": 11}], "category": "Standard", "default": 1, "group": "SD Logging", "longDesc": "This integer bitmask controls the set and rates of logged topics. The default allows for general log analysis while keeping the log file size reasonably small. Enabling multiple sets leads to higher bandwidth requirements and larger log files. Set bits true to enable: 0 : Default set (used for general log analysis) 1 : Full rate estimator (EKF2) replay topics 2 : Topics for thermal calibration (high rate raw IMU and Baro sensor data) 3 : Topics for system identification (high rate actuator control and IMU data) 4 : Full rates for analysis of fast maneuvers (RC, attitude, rates and actuators) 5 : Debugging topics (debug_*.msg topics, for custom code) 6 : Topics for sensor comparison (low rate raw IMU, Baro and magnetometer data) 7 : Topics for computer vision and collision prevention 8 : Raw FIFO high-rate IMU (Gyro) 9 : Raw FIFO high-rate IMU (Accel) 10: Logging of mavlink tunnel message (useful for payload communication debugging)", "max": 4095, "min": 0, "name": "SDLOG_PROFILE", "rebootRequired": true, "shortDesc": "Logging topic profile (integer bitmask)", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "SD Logging", "longDesc": "the difference in hours and minutes from Coordinated Universal Time (UTC) for a your place and date. for example, In case of South Korea(UTC+09:00), UTC offset is 540 min (9*60) refer to https://en.wikipedia.org/wiki/List_of_UTC_time_offsets", "max": 1000, "min": -1000, "name": "SDLOG_UTC_OFFSET", "shortDesc": "UTC offset (unit: min)", "type": "Int32", "units": "min"}, {"category": "Standard", "default": 1, "group": "SD Logging", "longDesc": "If set to 1, add an ID to the log, which uniquely identifies the vehicle", "name": "SDLOG_UUID", "shortDesc": "Log UUID", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 60.0, "group": "SITL", "increment": 1.0, "max": 86400.0, "min": 1.0, "name": "SIM_BAT_DRAIN", "shortDesc": "Simulator Battery drain interval", "type": "Float", "units": "s"}, {"category": "Standard", "default": 1, "group": "SITL", "longDesc": "Enable or disable the internal battery simulation. This is useful\nwhen the battery is simulated externally and interfaced with PX4\nthrough MAVLink for example.", "name": "SIM_BAT_ENABLE", "shortDesc": "Simulator Battery enabled", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 50.0, "group": "SITL", "increment": 0.1, "longDesc": "Can be used to alter the battery level during SITL- or HITL-simulation on the fly.\nParticularly useful for testing different low-battery behaviour.", "max": 100.0, "min": 0.0, "name": "SIM_BAT_MIN_PCT", "shortDesc": "Simulator Battery minimal percentage", "type": "Float", "units": "%"}, {"category": "System", "decimalPlaces": 3, "default": 0, "group": "Sensor Calibration", "longDesc": "Device ID of the accelerometer this calibration applies to.", "name": "CAL_ACC0_ID", "shortDesc": "Accelerometer 0 calibration device ID", "type": "Int32"}, {"category": "System", "decimalPlaces": 3, "default": -1, "group": "Sensor Calibration", "name": "CAL_ACC0_PRIO", "shortDesc": "Accelerometer 0 priority", "type": "Int32", "values": [{"description": "Uninitialized", "value": -1}, {"description": "Disabled", "value": 0}, {"description": "Min", "value": 1}, {"description": "Low", "value": 25}, {"description": "Medium (Default)", "value": 50}, {"description": "High", "value": 75}, {"description": "Max", "value": 100}]}, {"category": "System", "default": -1, "group": "Sensor Calibration", "longDesc": "An internal sensor will force a value of -1, so a GCS should only attempt to configure the rotation if the value is greater than or equal to zero.", "max": 40, "min": -1, "name": "CAL_ACC0_ROT", "shortDesc": "Accelerometer 0 rotation relative to airframe", "type": "Int32", "values": [{"description": "Internal", "value": -1}, {"description": "No rotation", "value": 0}, {"description": "Yaw 45\u00b0", "value": 1}, {"description": "Yaw 90\u00b0", "value": 2}, {"description": "Yaw 135\u00b0", "value": 3}, {"description": "Yaw 180\u00b0", "value": 4}, {"description": "Yaw 225\u00b0", "value": 5}, {"description": "Yaw 270\u00b0", "value": 6}, {"description": "Yaw 315\u00b0", "value": 7}, {"description": "Roll 180\u00b0", "value": 8}, {"description": "Roll 180\u00b0, Yaw 45\u00b0", "value": 9}, {"description": "Roll 180\u00b0, Yaw 90\u00b0", "value": 10}, {"description": "Roll 180\u00b0, Yaw 135\u00b0", "value": 11}, {"description": "Pitch 180\u00b0", "value": 12}, {"description": "Roll 180\u00b0, Yaw 225\u00b0", "value": 13}, {"description": "Roll 180\u00b0, Yaw 270\u00b0", "value": 14}, {"description": "Roll 180\u00b0, Yaw 315\u00b0", "value": 15}, {"description": "Roll 90\u00b0", "value": 16}, {"description": "Roll 90\u00b0, Yaw 45\u00b0", "value": 17}, {"description": "Roll 90\u00b0, Yaw 90\u00b0", "value": 18}, {"description": "Roll 90\u00b0, Yaw 135\u00b0", "value": 19}, {"description": "Roll 270\u00b0", "value": 20}, {"description": "Roll 270\u00b0, Yaw 45\u00b0", "value": 21}, {"description": "Roll 270\u00b0, Yaw 90\u00b0", "value": 22}, {"description": "Roll 270\u00b0, Yaw 135\u00b0", "value": 23}, {"description": "Pitch 90\u00b0", "value": 24}, {"description": "Pitch 270\u00b0", "value": 25}, {"description": "Pitch 180\u00b0, Yaw 90\u00b0", "value": 26}, {"description": "Pitch 180\u00b0, Yaw 270\u00b0", "value": 27}, {"description": "Roll 90\u00b0, Pitch 90\u00b0", "value": 28}, {"description": "Roll 180\u00b0, Pitch 90\u00b0", "value": 29}, {"description": "Roll 270\u00b0, Pitch 90\u00b0", "value": 30}, {"description": "Roll 90\u00b0, Pitch 180\u00b0", "value": 31}, {"description": "Roll 270\u00b0, Pitch 180\u00b0", "value": 32}, {"description": "Roll 90\u00b0, Pitch 270\u00b0", "value": 33}, {"description": "Roll 180\u00b0, Pitch 270\u00b0", "value": 34}, {"description": "Roll 270\u00b0, Pitch 270\u00b0", "value": 35}, {"description": "Roll 90\u00b0, Pitch 180\u00b0, Yaw 90\u00b0", "value": 36}, {"description": "Roll 90\u00b0, Yaw 270\u00b0", "value": 37}, {"description": "Roll 90\u00b0, Pitch 68\u00b0, Yaw 293\u00b0", "value": 38}, {"description": "Pitch 315\u00b0", "value": 39}, {"description": "Roll 90\u00b0, Pitch 315\u00b0", "value": 40}]}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_ACC0_XOFF", "shortDesc": "Accelerometer 0 X-axis offset", "type": "Float", "units": "m/s^2", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, "min": 0.1, "name": "CAL_ACC0_XSCALE", "shortDesc": "Accelerometer 0 X-axis scaling factor", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_ACC0_YOFF", "shortDesc": "Accelerometer 0 Y-axis offset", "type": "Float", "units": "m/s^2", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, "min": 0.1, "name": "CAL_ACC0_YSCALE", "shortDesc": "Accelerometer 0 Y-axis scaling factor", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_ACC0_ZOFF", "shortDesc": "Accelerometer 0 Z-axis offset", "type": "Float", "units": "m/s^2", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, "min": 0.1, "name": "CAL_ACC0_ZSCALE", "shortDesc": "Accelerometer 0 Z-axis scaling factor", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0, "group": "Sensor Calibration", "longDesc": "Device ID of the accelerometer this calibration applies to.", "name": "CAL_ACC1_ID", "shortDesc": "Accelerometer 1 calibration device ID", "type": "Int32"}, {"category": "System", "decimalPlaces": 3, "default": -1, "group": "Sensor Calibration", "name": "CAL_ACC1_PRIO", "shortDesc": "Accelerometer 1 priority", "type": "Int32", "values": [{"description": "Uninitialized", "value": -1}, {"description": "Disabled", "value": 0}, {"description": "Min", "value": 1}, {"description": "Low", "value": 25}, {"description": "Medium (Default)", "value": 50}, {"description": "High", "value": 75}, {"description": "Max", "value": 100}]}, {"category": "System", "default": -1, "group": "Sensor Calibration", "longDesc": "An internal sensor will force a value of -1, so a GCS should only attempt to configure the rotation if the value is greater than or equal to zero.", "max": 40, "min": -1, "name": "CAL_ACC1_ROT", "shortDesc": "Accelerometer 1 rotation relative to airframe", "type": "Int32", "values": [{"description": "Internal", "value": -1}, {"description": "No rotation", "value": 0}, {"description": "Yaw 45\u00b0", "value": 1}, {"description": "Yaw 90\u00b0", "value": 2}, {"description": "Yaw 135\u00b0", "value": 3}, {"description": "Yaw 180\u00b0", "value": 4}, {"description": "Yaw 225\u00b0", "value": 5}, {"description": "Yaw 270\u00b0", "value": 6}, {"description": "Yaw 315\u00b0", "value": 7}, {"description": "Roll 180\u00b0", "value": 8}, {"description": "Roll 180\u00b0, Yaw 45\u00b0", "value": 9}, {"description": "Roll 180\u00b0, Yaw 90\u00b0", "value": 10}, {"description": "Roll 180\u00b0, Yaw 135\u00b0", "value": 11}, {"description": "Pitch 180\u00b0", "value": 12}, {"description": "Roll 180\u00b0, Yaw 225\u00b0", "value": 13}, {"description": "Roll 180\u00b0, Yaw 270\u00b0", "value": 14}, {"description": "Roll 180\u00b0, Yaw 315\u00b0", "value": 15}, {"description": "Roll 90\u00b0", "value": 16}, {"description": "Roll 90\u00b0, Yaw 45\u00b0", "value": 17}, {"description": "Roll 90\u00b0, Yaw 90\u00b0", "value": 18}, {"description": "Roll 90\u00b0, Yaw 135\u00b0", "value": 19}, {"description": "Roll 270\u00b0", "value": 20}, {"description": "Roll 270\u00b0, Yaw 45\u00b0", "value": 21}, {"description": "Roll 270\u00b0, Yaw 90\u00b0", "value": 22}, {"description": "Roll 270\u00b0, Yaw 135\u00b0", "value": 23}, {"description": "Pitch 90\u00b0", "value": 24}, {"description": "Pitch 270\u00b0", "value": 25}, {"description": "Pitch 180\u00b0, Yaw 90\u00b0", "value": 26}, {"description": "Pitch 180\u00b0, Yaw 270\u00b0", "value": 27}, {"description": "Roll 90\u00b0, Pitch 90\u00b0", "value": 28}, {"description": "Roll 180\u00b0, Pitch 90\u00b0", "value": 29}, {"description": "Roll 270\u00b0, Pitch 90\u00b0", "value": 30}, {"description": "Roll 90\u00b0, Pitch 180\u00b0", "value": 31}, {"description": "Roll 270\u00b0, Pitch 180\u00b0", "value": 32}, {"description": "Roll 90\u00b0, Pitch 270\u00b0", "value": 33}, {"description": "Roll 180\u00b0, Pitch 270\u00b0", "value": 34}, {"description": "Roll 270\u00b0, Pitch 270\u00b0", "value": 35}, {"description": "Roll 90\u00b0, Pitch 180\u00b0, Yaw 90\u00b0", "value": 36}, {"description": "Roll 90\u00b0, Yaw 270\u00b0", "value": 37}, {"description": "Roll 90\u00b0, Pitch 68\u00b0, Yaw 293\u00b0", "value": 38}, {"description": "Pitch 315\u00b0", "value": 39}, {"description": "Roll 90\u00b0, Pitch 315\u00b0", "value": 40}]}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_ACC1_XOFF", "shortDesc": "Accelerometer 1 X-axis offset", "type": "Float", "units": "m/s^2", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, "min": 0.1, "name": "CAL_ACC1_XSCALE", "shortDesc": "Accelerometer 1 X-axis scaling factor", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_ACC1_YOFF", "shortDesc": "Accelerometer 1 Y-axis offset", "type": "Float", "units": "m/s^2", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, "min": 0.1, "name": "CAL_ACC1_YSCALE", "shortDesc": "Accelerometer 1 Y-axis scaling factor", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_ACC1_ZOFF", "shortDesc": "Accelerometer 1 Z-axis offset", "type": "Float", "units": "m/s^2", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, "min": 0.1, "name": "CAL_ACC1_ZSCALE", "shortDesc": "Accelerometer 1 Z-axis scaling factor", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0, "group": "Sensor Calibration", "longDesc": "Device ID of the accelerometer this calibration applies to.", "name": "CAL_ACC2_ID", "shortDesc": "Accelerometer 2 calibration device ID", "type": "Int32"}, {"category": "System", "decimalPlaces": 3, "default": -1, "group": "Sensor Calibration", "name": "CAL_ACC2_PRIO", "shortDesc": "Accelerometer 2 priority", "type": "Int32", "values": [{"description": "Uninitialized", "value": -1}, {"description": "Disabled", "value": 0}, {"description": "Min", "value": 1}, {"description": "Low", "value": 25}, {"description": "Medium (Default)", "value": 50}, {"description": "High", "value": 75}, {"description": "Max", "value": 100}]}, {"category": "System", "default": -1, "group": "Sensor Calibration", "longDesc": "An internal sensor will force a value of -1, so a GCS should only attempt to configure the rotation if the value is greater than or equal to zero.", "max": 40, "min": -1, "name": "CAL_ACC2_ROT", "shortDesc": "Accelerometer 2 rotation relative to airframe", "type": "Int32", "values": [{"description": "Internal", "value": -1}, {"description": "No rotation", "value": 0}, {"description": "Yaw 45\u00b0", "value": 1}, {"description": "Yaw 90\u00b0", "value": 2}, {"description": "Yaw 135\u00b0", "value": 3}, {"description": "Yaw 180\u00b0", "value": 4}, {"description": "Yaw 225\u00b0", "value": 5}, {"description": "Yaw 270\u00b0", "value": 6}, {"description": "Yaw 315\u00b0", "value": 7}, {"description": "Roll 180\u00b0", "value": 8}, {"description": "Roll 180\u00b0, Yaw 45\u00b0", "value": 9}, {"description": "Roll 180\u00b0, Yaw 90\u00b0", "value": 10}, {"description": "Roll 180\u00b0, Yaw 135\u00b0", "value": 11}, {"description": "Pitch 180\u00b0", "value": 12}, {"description": "Roll 180\u00b0, Yaw 225\u00b0", "value": 13}, {"description": "Roll 180\u00b0, Yaw 270\u00b0", "value": 14}, {"description": "Roll 180\u00b0, Yaw 315\u00b0", "value": 15}, {"description": "Roll 90\u00b0", "value": 16}, {"description": "Roll 90\u00b0, Yaw 45\u00b0", "value": 17}, {"description": "Roll 90\u00b0, Yaw 90\u00b0", "value": 18}, {"description": "Roll 90\u00b0, Yaw 135\u00b0", "value": 19}, {"description": "Roll 270\u00b0", "value": 20}, {"description": "Roll 270\u00b0, Yaw 45\u00b0", "value": 21}, {"description": "Roll 270\u00b0, Yaw 90\u00b0", "value": 22}, {"description": "Roll 270\u00b0, Yaw 135\u00b0", "value": 23}, {"description": "Pitch 90\u00b0", "value": 24}, {"description": "Pitch 270\u00b0", "value": 25}, {"description": "Pitch 180\u00b0, Yaw 90\u00b0", "value": 26}, {"description": "Pitch 180\u00b0, Yaw 270\u00b0", "value": 27}, {"description": "Roll 90\u00b0, Pitch 90\u00b0", "value": 28}, {"description": "Roll 180\u00b0, Pitch 90\u00b0", "value": 29}, {"description": "Roll 270\u00b0, Pitch 90\u00b0", "value": 30}, {"description": "Roll 90\u00b0, Pitch 180\u00b0", "value": 31}, {"description": "Roll 270\u00b0, Pitch 180\u00b0", "value": 32}, {"description": "Roll 90\u00b0, Pitch 270\u00b0", "value": 33}, {"description": "Roll 180\u00b0, Pitch 270\u00b0", "value": 34}, {"description": "Roll 270\u00b0, Pitch 270\u00b0", "value": 35}, {"description": "Roll 90\u00b0, Pitch 180\u00b0, Yaw 90\u00b0", "value": 36}, {"description": "Roll 90\u00b0, Yaw 270\u00b0", "value": 37}, {"description": "Roll 90\u00b0, Pitch 68\u00b0, Yaw 293\u00b0", "value": 38}, {"description": "Pitch 315\u00b0", "value": 39}, {"description": "Roll 90\u00b0, Pitch 315\u00b0", "value": 40}]}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_ACC2_XOFF", "shortDesc": "Accelerometer 2 X-axis offset", "type": "Float", "units": "m/s^2", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, "min": 0.1, "name": "CAL_ACC2_XSCALE", "shortDesc": "Accelerometer 2 X-axis scaling factor", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_ACC2_YOFF", "shortDesc": "Accelerometer 2 Y-axis offset", "type": "Float", "units": "m/s^2", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, "min": 0.1, "name": "CAL_ACC2_YSCALE", "shortDesc": "Accelerometer 2 Y-axis scaling factor", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_ACC2_ZOFF", "shortDesc": "Accelerometer 2 Z-axis offset", "type": "Float", "units": "m/s^2", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, "min": 0.1, "name": "CAL_ACC2_ZSCALE", "shortDesc": "Accelerometer 2 Z-axis scaling factor", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0, "group": "Sensor Calibration", "longDesc": "Device ID of the accelerometer this calibration applies to.", "name": "CAL_ACC3_ID", "shortDesc": "Accelerometer 3 calibration device ID", "type": "Int32"}, {"category": "System", "decimalPlaces": 3, "default": -1, "group": "Sensor Calibration", "name": "CAL_ACC3_PRIO", "shortDesc": "Accelerometer 3 priority", "type": "Int32", "values": [{"description": "Uninitialized", "value": -1}, {"description": "Disabled", "value": 0}, {"description": "Min", "value": 1}, {"description": "Low", "value": 25}, {"description": "Medium (Default)", "value": 50}, {"description": "High", "value": 75}, {"description": "Max", "value": 100}]}, {"category": "System", "default": -1, "group": "Sensor Calibration", "longDesc": "An internal sensor will force a value of -1, so a GCS should only attempt to configure the rotation if the value is greater than or equal to zero.", "max": 40, "min": -1, "name": "CAL_ACC3_ROT", "shortDesc": "Accelerometer 3 rotation relative to airframe", "type": "Int32", "values": [{"description": "Internal", "value": -1}, {"description": "No rotation", "value": 0}, {"description": "Yaw 45\u00b0", "value": 1}, {"description": "Yaw 90\u00b0", "value": 2}, {"description": "Yaw 135\u00b0", "value": 3}, {"description": "Yaw 180\u00b0", "value": 4}, {"description": "Yaw 225\u00b0", "value": 5}, {"description": "Yaw 270\u00b0", "value": 6}, {"description": "Yaw 315\u00b0", "value": 7}, {"description": "Roll 180\u00b0", "value": 8}, {"description": "Roll 180\u00b0, Yaw 45\u00b0", "value": 9}, {"description": "Roll 180\u00b0, Yaw 90\u00b0", "value": 10}, {"description": "Roll 180\u00b0, Yaw 135\u00b0", "value": 11}, {"description": "Pitch 180\u00b0", "value": 12}, {"description": "Roll 180\u00b0, Yaw 225\u00b0", "value": 13}, {"description": "Roll 180\u00b0, Yaw 270\u00b0", "value": 14}, {"description": "Roll 180\u00b0, Yaw 315\u00b0", "value": 15}, {"description": "Roll 90\u00b0", "value": 16}, {"description": "Roll 90\u00b0, Yaw 45\u00b0", "value": 17}, {"description": "Roll 90\u00b0, Yaw 90\u00b0", "value": 18}, {"description": "Roll 90\u00b0, Yaw 135\u00b0", "value": 19}, {"description": "Roll 270\u00b0", "value": 20}, {"description": "Roll 270\u00b0, Yaw 45\u00b0", "value": 21}, {"description": "Roll 270\u00b0, Yaw 90\u00b0", "value": 22}, {"description": "Roll 270\u00b0, Yaw 135\u00b0", "value": 23}, {"description": "Pitch 90\u00b0", "value": 24}, {"description": "Pitch 270\u00b0", "value": 25}, {"description": "Pitch 180\u00b0, Yaw 90\u00b0", "value": 26}, {"description": "Pitch 180\u00b0, Yaw 270\u00b0", "value": 27}, {"description": "Roll 90\u00b0, Pitch 90\u00b0", "value": 28}, {"description": "Roll 180\u00b0, Pitch 90\u00b0", "value": 29}, {"description": "Roll 270\u00b0, Pitch 90\u00b0", "value": 30}, {"description": "Roll 90\u00b0, Pitch 180\u00b0", "value": 31}, {"description": "Roll 270\u00b0, Pitch 180\u00b0", "value": 32}, {"description": "Roll 90\u00b0, Pitch 270\u00b0", "value": 33}, {"description": "Roll 180\u00b0, Pitch 270\u00b0", "value": 34}, {"description": "Roll 270\u00b0, Pitch 270\u00b0", "value": 35}, {"description": "Roll 90\u00b0, Pitch 180\u00b0, Yaw 90\u00b0", "value": 36}, {"description": "Roll 90\u00b0, Yaw 270\u00b0", "value": 37}, {"description": "Roll 90\u00b0, Pitch 68\u00b0, Yaw 293\u00b0", "value": 38}, {"description": "Pitch 315\u00b0", "value": 39}, {"description": "Roll 90\u00b0, Pitch 315\u00b0", "value": 40}]}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_ACC3_XOFF", "shortDesc": "Accelerometer 3 X-axis offset", "type": "Float", "units": "m/s^2", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, "min": 0.1, "name": "CAL_ACC3_XSCALE", "shortDesc": "Accelerometer 3 X-axis scaling factor", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_ACC3_YOFF", "shortDesc": "Accelerometer 3 Y-axis offset", "type": "Float", "units": "m/s^2", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, "min": 0.1, "name": "CAL_ACC3_YSCALE", "shortDesc": "Accelerometer 3 Y-axis scaling factor", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_ACC3_ZOFF", "shortDesc": "Accelerometer 3 Z-axis offset", "type": "Float", "units": "m/s^2", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, "min": 0.1, "name": "CAL_ACC3_ZSCALE", "shortDesc": "Accelerometer 3 Z-axis scaling factor", "type": "Float", "volatile": true}, {"category": "System", "default": 0, "group": "Sensor Calibration", "longDesc": "Device ID of the barometer this calibration applies to.", "name": "CAL_BARO0_ID", "shortDesc": "Barometer 0 calibration device ID", "type": "Int32"}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_BARO0_OFF", "shortDesc": "Barometer 0 offset", "type": "Float", "volatile": true}, {"category": "System", "default": -1, "group": "Sensor Calibration", "name": "CAL_BARO0_PRIO", "shortDesc": "Barometer 0 priority", "type": "Int32", "values": [{"description": "Uninitialized", "value": -1}, {"description": "Disabled", "value": 0}, {"description": "Min", "value": 1}, {"description": "Low", "value": 25}, {"description": "Medium (Default)", "value": 50}, {"description": "High", "value": 75}, {"description": "Max", "value": 100}]}, {"category": "System", "default": 0, "group": "Sensor Calibration", "longDesc": "Device ID of the barometer this calibration applies to.", "name": "CAL_BARO1_ID", "shortDesc": "Barometer 1 calibration device ID", "type": "Int32"}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_BARO1_OFF", "shortDesc": "Barometer 1 offset", "type": "Float", "volatile": true}, {"category": "System", "default": -1, "group": "Sensor Calibration", "name": "CAL_BARO1_PRIO", "shortDesc": "Barometer 1 priority", "type": "Int32", "values": [{"description": "Uninitialized", "value": -1}, {"description": "Disabled", "value": 0}, {"description": "Min", "value": 1}, {"description": "Low", "value": 25}, {"description": "Medium (Default)", "value": 50}, {"description": "High", "value": 75}, {"description": "Max", "value": 100}]}, {"category": "System", "default": 0, "group": "Sensor Calibration", "longDesc": "Device ID of the barometer this calibration applies to.", "name": "CAL_BARO2_ID", "shortDesc": "Barometer 2 calibration device ID", "type": "Int32"}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_BARO2_OFF", "shortDesc": "Barometer 2 offset", "type": "Float", "volatile": true}, {"category": "System", "default": -1, "group": "Sensor Calibration", "name": "CAL_BARO2_PRIO", "shortDesc": "Barometer 2 priority", "type": "Int32", "values": [{"description": "Uninitialized", "value": -1}, {"description": "Disabled", "value": 0}, {"description": "Min", "value": 1}, {"description": "Low", "value": 25}, {"description": "Medium (Default)", "value": 50}, {"description": "High", "value": 75}, {"description": "Max", "value": 100}]}, {"category": "System", "default": 0, "group": "Sensor Calibration", "longDesc": "Device ID of the barometer this calibration applies to.", "name": "CAL_BARO3_ID", "shortDesc": "Barometer 3 calibration device ID", "type": "Int32"}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_BARO3_OFF", "shortDesc": "Barometer 3 offset", "type": "Float", "volatile": true}, {"category": "System", "default": -1, "group": "Sensor Calibration", "name": "CAL_BARO3_PRIO", "shortDesc": "Barometer 3 priority", "type": "Int32", "values": [{"description": "Uninitialized", "value": -1}, {"description": "Disabled", "value": 0}, {"description": "Min", "value": 1}, {"description": "Low", "value": 25}, {"description": "Medium (Default)", "value": 50}, {"description": "High", "value": 75}, {"description": "Max", "value": 100}]}, {"category": "System", "default": 0, "group": "Sensor Calibration", "longDesc": "Device ID of the gyroscope this calibration applies to.", "name": "CAL_GYRO0_ID", "shortDesc": "Gyroscope 0 calibration device ID", "type": "Int32"}, {"category": "System", "default": -1, "group": "Sensor Calibration", "name": "CAL_GYRO0_PRIO", "shortDesc": "Gyroscope 0 priority", "type": "Int32", "values": [{"description": "Uninitialized", "value": -1}, {"description": "Disabled", "value": 0}, {"description": "Min", "value": 1}, {"description": "Low", "value": 25}, {"description": "Medium (Default)", "value": 50}, {"description": "High", "value": 75}, {"description": "Max", "value": 100}]}, {"category": "System", "default": -1, "group": "Sensor Calibration", "longDesc": "An internal sensor will force a value of -1, so a GCS should only attempt to configure the rotation if the value is greater than or equal to zero.", "max": 40, "min": -1, "name": "CAL_GYRO0_ROT", "shortDesc": "Gyroscope 0 rotation relative to airframe", "type": "Int32", "values": [{"description": "Internal", "value": -1}, {"description": "No rotation", "value": 0}, {"description": "Yaw 45\u00b0", "value": 1}, {"description": "Yaw 90\u00b0", "value": 2}, {"description": "Yaw 135\u00b0", "value": 3}, {"description": "Yaw 180\u00b0", "value": 4}, {"description": "Yaw 225\u00b0", "value": 5}, {"description": "Yaw 270\u00b0", "value": 6}, {"description": "Yaw 315\u00b0", "value": 7}, {"description": "Roll 180\u00b0", "value": 8}, {"description": "Roll 180\u00b0, Yaw 45\u00b0", "value": 9}, {"description": "Roll 180\u00b0, Yaw 90\u00b0", "value": 10}, {"description": "Roll 180\u00b0, Yaw 135\u00b0", "value": 11}, {"description": "Pitch 180\u00b0", "value": 12}, {"description": "Roll 180\u00b0, Yaw 225\u00b0", "value": 13}, {"description": "Roll 180\u00b0, Yaw 270\u00b0", "value": 14}, {"description": "Roll 180\u00b0, Yaw 315\u00b0", "value": 15}, {"description": "Roll 90\u00b0", "value": 16}, {"description": "Roll 90\u00b0, Yaw 45\u00b0", "value": 17}, {"description": "Roll 90\u00b0, Yaw 90\u00b0", "value": 18}, {"description": "Roll 90\u00b0, Yaw 135\u00b0", "value": 19}, {"description": "Roll 270\u00b0", "value": 20}, {"description": "Roll 270\u00b0, Yaw 45\u00b0", "value": 21}, {"description": "Roll 270\u00b0, Yaw 90\u00b0", "value": 22}, {"description": "Roll 270\u00b0, Yaw 135\u00b0", "value": 23}, {"description": "Pitch 90\u00b0", "value": 24}, {"description": "Pitch 270\u00b0", "value": 25}, {"description": "Pitch 180\u00b0, Yaw 90\u00b0", "value": 26}, {"description": "Pitch 180\u00b0, Yaw 270\u00b0", "value": 27}, {"description": "Roll 90\u00b0, Pitch 90\u00b0", "value": 28}, {"description": "Roll 180\u00b0, Pitch 90\u00b0", "value": 29}, {"description": "Roll 270\u00b0, Pitch 90\u00b0", "value": 30}, {"description": "Roll 90\u00b0, Pitch 180\u00b0", "value": 31}, {"description": "Roll 270\u00b0, Pitch 180\u00b0", "value": 32}, {"description": "Roll 90\u00b0, Pitch 270\u00b0", "value": 33}, {"description": "Roll 180\u00b0, Pitch 270\u00b0", "value": 34}, {"description": "Roll 270\u00b0, Pitch 270\u00b0", "value": 35}, {"description": "Roll 90\u00b0, Pitch 180\u00b0, Yaw 90\u00b0", "value": 36}, {"description": "Roll 90\u00b0, Yaw 270\u00b0", "value": 37}, {"description": "Roll 90\u00b0, Pitch 68\u00b0, Yaw 293\u00b0", "value": 38}, {"description": "Pitch 315\u00b0", "value": 39}, {"description": "Roll 90\u00b0, Pitch 315\u00b0", "value": 40}]}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_GYRO0_XOFF", "shortDesc": "Gyroscope 0 X-axis offset", "type": "Float", "units": "rad/s", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_GYRO0_YOFF", "shortDesc": "Gyroscope 0 Y-axis offset", "type": "Float", "units": "rad/s", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_GYRO0_ZOFF", "shortDesc": "Gyroscope 0 Z-axis offset", "type": "Float", "units": "rad/s", "volatile": true}, {"category": "System", "default": 0, "group": "Sensor Calibration", "longDesc": "Device ID of the gyroscope this calibration applies to.", "name": "CAL_GYRO1_ID", "shortDesc": "Gyroscope 1 calibration device ID", "type": "Int32"}, {"category": "System", "default": -1, "group": "Sensor Calibration", "name": "CAL_GYRO1_PRIO", "shortDesc": "Gyroscope 1 priority", "type": "Int32", "values": [{"description": "Uninitialized", "value": -1}, {"description": "Disabled", "value": 0}, {"description": "Min", "value": 1}, {"description": "Low", "value": 25}, {"description": "Medium (Default)", "value": 50}, {"description": "High", "value": 75}, {"description": "Max", "value": 100}]}, {"category": "System", "default": -1, "group": "Sensor Calibration", "longDesc": "An internal sensor will force a value of -1, so a GCS should only attempt to configure the rotation if the value is greater than or equal to zero.", "max": 40, "min": -1, "name": "CAL_GYRO1_ROT", "shortDesc": "Gyroscope 1 rotation relative to airframe", "type": "Int32", "values": [{"description": "Internal", "value": -1}, {"description": "No rotation", "value": 0}, {"description": "Yaw 45\u00b0", "value": 1}, {"description": "Yaw 90\u00b0", "value": 2}, {"description": "Yaw 135\u00b0", "value": 3}, {"description": "Yaw 180\u00b0", "value": 4}, {"description": "Yaw 225\u00b0", "value": 5}, {"description": "Yaw 270\u00b0", "value": 6}, {"description": "Yaw 315\u00b0", "value": 7}, {"description": "Roll 180\u00b0", "value": 8}, {"description": "Roll 180\u00b0, Yaw 45\u00b0", "value": 9}, {"description": "Roll 180\u00b0, Yaw 90\u00b0", "value": 10}, {"description": "Roll 180\u00b0, Yaw 135\u00b0", "value": 11}, {"description": "Pitch 180\u00b0", "value": 12}, {"description": "Roll 180\u00b0, Yaw 225\u00b0", "value": 13}, {"description": "Roll 180\u00b0, Yaw 270\u00b0", "value": 14}, {"description": "Roll 180\u00b0, Yaw 315\u00b0", "value": 15}, {"description": "Roll 90\u00b0", "value": 16}, {"description": "Roll 90\u00b0, Yaw 45\u00b0", "value": 17}, {"description": "Roll 90\u00b0, Yaw 90\u00b0", "value": 18}, {"description": "Roll 90\u00b0, Yaw 135\u00b0", "value": 19}, {"description": "Roll 270\u00b0", "value": 20}, {"description": "Roll 270\u00b0, Yaw 45\u00b0", "value": 21}, {"description": "Roll 270\u00b0, Yaw 90\u00b0", "value": 22}, {"description": "Roll 270\u00b0, Yaw 135\u00b0", "value": 23}, {"description": "Pitch 90\u00b0", "value": 24}, {"description": "Pitch 270\u00b0", "value": 25}, {"description": "Pitch 180\u00b0, Yaw 90\u00b0", "value": 26}, {"description": "Pitch 180\u00b0, Yaw 270\u00b0", "value": 27}, {"description": "Roll 90\u00b0, Pitch 90\u00b0", "value": 28}, {"description": "Roll 180\u00b0, Pitch 90\u00b0", "value": 29}, {"description": "Roll 270\u00b0, Pitch 90\u00b0", "value": 30}, {"description": "Roll 90\u00b0, Pitch 180\u00b0", "value": 31}, {"description": "Roll 270\u00b0, Pitch 180\u00b0", "value": 32}, {"description": "Roll 90\u00b0, Pitch 270\u00b0", "value": 33}, {"description": "Roll 180\u00b0, Pitch 270\u00b0", "value": 34}, {"description": "Roll 270\u00b0, Pitch 270\u00b0", "value": 35}, {"description": "Roll 90\u00b0, Pitch 180\u00b0, Yaw 90\u00b0", "value": 36}, {"description": "Roll 90\u00b0, Yaw 270\u00b0", "value": 37}, {"description": "Roll 90\u00b0, Pitch 68\u00b0, Yaw 293\u00b0", "value": 38}, {"description": "Pitch 315\u00b0", "value": 39}, {"description": "Roll 90\u00b0, Pitch 315\u00b0", "value": 40}]}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_GYRO1_XOFF", "shortDesc": "Gyroscope 1 X-axis offset", "type": "Float", "units": "rad/s", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_GYRO1_YOFF", "shortDesc": "Gyroscope 1 Y-axis offset", "type": "Float", "units": "rad/s", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_GYRO1_ZOFF", "shortDesc": "Gyroscope 1 Z-axis offset", "type": "Float", "units": "rad/s", "volatile": true}, {"category": "System", "default": 0, "group": "Sensor Calibration", "longDesc": "Device ID of the gyroscope this calibration applies to.", "name": "CAL_GYRO2_ID", "shortDesc": "Gyroscope 2 calibration device ID", "type": "Int32"}, {"category": "System", "default": -1, "group": "Sensor Calibration", "name": "CAL_GYRO2_PRIO", "shortDesc": "Gyroscope 2 priority", "type": "Int32", "values": [{"description": "Uninitialized", "value": -1}, {"description": "Disabled", "value": 0}, {"description": "Min", "value": 1}, {"description": "Low", "value": 25}, {"description": "Medium (Default)", "value": 50}, {"description": "High", "value": 75}, {"description": "Max", "value": 100}]}, {"category": "System", "default": -1, "group": "Sensor Calibration", "longDesc": "An internal sensor will force a value of -1, so a GCS should only attempt to configure the rotation if the value is greater than or equal to zero.", "max": 40, "min": -1, "name": "CAL_GYRO2_ROT", "shortDesc": "Gyroscope 2 rotation relative to airframe", "type": "Int32", "values": [{"description": "Internal", "value": -1}, {"description": "No rotation", "value": 0}, {"description": "Yaw 45\u00b0", "value": 1}, {"description": "Yaw 90\u00b0", "value": 2}, {"description": "Yaw 135\u00b0", "value": 3}, {"description": "Yaw 180\u00b0", "value": 4}, {"description": "Yaw 225\u00b0", "value": 5}, {"description": "Yaw 270\u00b0", "value": 6}, {"description": "Yaw 315\u00b0", "value": 7}, {"description": "Roll 180\u00b0", "value": 8}, {"description": "Roll 180\u00b0, Yaw 45\u00b0", "value": 9}, {"description": "Roll 180\u00b0, Yaw 90\u00b0", "value": 10}, {"description": "Roll 180\u00b0, Yaw 135\u00b0", "value": 11}, {"description": "Pitch 180\u00b0", "value": 12}, {"description": "Roll 180\u00b0, Yaw 225\u00b0", "value": 13}, {"description": "Roll 180\u00b0, Yaw 270\u00b0", "value": 14}, {"description": "Roll 180\u00b0, Yaw 315\u00b0", "value": 15}, {"description": "Roll 90\u00b0", "value": 16}, {"description": "Roll 90\u00b0, Yaw 45\u00b0", "value": 17}, {"description": "Roll 90\u00b0, Yaw 90\u00b0", "value": 18}, {"description": "Roll 90\u00b0, Yaw 135\u00b0", "value": 19}, {"description": "Roll 270\u00b0", "value": 20}, {"description": "Roll 270\u00b0, Yaw 45\u00b0", "value": 21}, {"description": "Roll 270\u00b0, Yaw 90\u00b0", "value": 22}, {"description": "Roll 270\u00b0, Yaw 135\u00b0", "value": 23}, {"description": "Pitch 90\u00b0", "value": 24}, {"description": "Pitch 270\u00b0", "value": 25}, {"description": "Pitch 180\u00b0, Yaw 90\u00b0", "value": 26}, {"description": "Pitch 180\u00b0, Yaw 270\u00b0", "value": 27}, {"description": "Roll 90\u00b0, Pitch 90\u00b0", "value": 28}, {"description": "Roll 180\u00b0, Pitch 90\u00b0", "value": 29}, {"description": "Roll 270\u00b0, Pitch 90\u00b0", "value": 30}, {"description": "Roll 90\u00b0, Pitch 180\u00b0", "value": 31}, {"description": "Roll 270\u00b0, Pitch 180\u00b0", "value": 32}, {"description": "Roll 90\u00b0, Pitch 270\u00b0", "value": 33}, {"description": "Roll 180\u00b0, Pitch 270\u00b0", "value": 34}, {"description": "Roll 270\u00b0, Pitch 270\u00b0", "value": 35}, {"description": "Roll 90\u00b0, Pitch 180\u00b0, Yaw 90\u00b0", "value": 36}, {"description": "Roll 90\u00b0, Yaw 270\u00b0", "value": 37}, {"description": "Roll 90\u00b0, Pitch 68\u00b0, Yaw 293\u00b0", "value": 38}, {"description": "Pitch 315\u00b0", "value": 39}, {"description": "Roll 90\u00b0, Pitch 315\u00b0", "value": 40}]}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_GYRO2_XOFF", "shortDesc": "Gyroscope 2 X-axis offset", "type": "Float", "units": "rad/s", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_GYRO2_YOFF", "shortDesc": "Gyroscope 2 Y-axis offset", "type": "Float", "units": "rad/s", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_GYRO2_ZOFF", "shortDesc": "Gyroscope 2 Z-axis offset", "type": "Float", "units": "rad/s", "volatile": true}, {"category": "System", "default": 0, "group": "Sensor Calibration", "longDesc": "Device ID of the gyroscope this calibration applies to.", "name": "CAL_GYRO3_ID", "shortDesc": "Gyroscope 3 calibration device ID", "type": "Int32"}, {"category": "System", "default": -1, "group": "Sensor Calibration", "name": "CAL_GYRO3_PRIO", "shortDesc": "Gyroscope 3 priority", "type": "Int32", "values": [{"description": "Uninitialized", "value": -1}, {"description": "Disabled", "value": 0}, {"description": "Min", "value": 1}, {"description": "Low", "value": 25}, {"description": "Medium (Default)", "value": 50}, {"description": "High", "value": 75}, {"description": "Max", "value": 100}]}, {"category": "System", "default": -1, "group": "Sensor Calibration", "longDesc": "An internal sensor will force a value of -1, so a GCS should only attempt to configure the rotation if the value is greater than or equal to zero.", "max": 40, "min": -1, "name": "CAL_GYRO3_ROT", "shortDesc": "Gyroscope 3 rotation relative to airframe", "type": "Int32", "values": [{"description": "Internal", "value": -1}, {"description": "No rotation", "value": 0}, {"description": "Yaw 45\u00b0", "value": 1}, {"description": "Yaw 90\u00b0", "value": 2}, {"description": "Yaw 135\u00b0", "value": 3}, {"description": "Yaw 180\u00b0", "value": 4}, {"description": "Yaw 225\u00b0", "value": 5}, {"description": "Yaw 270\u00b0", "value": 6}, {"description": "Yaw 315\u00b0", "value": 7}, {"description": "Roll 180\u00b0", "value": 8}, {"description": "Roll 180\u00b0, Yaw 45\u00b0", "value": 9}, {"description": "Roll 180\u00b0, Yaw 90\u00b0", "value": 10}, {"description": "Roll 180\u00b0, Yaw 135\u00b0", "value": 11}, {"description": "Pitch 180\u00b0", "value": 12}, {"description": "Roll 180\u00b0, Yaw 225\u00b0", "value": 13}, {"description": "Roll 180\u00b0, Yaw 270\u00b0", "value": 14}, {"description": "Roll 180\u00b0, Yaw 315\u00b0", "value": 15}, {"description": "Roll 90\u00b0", "value": 16}, {"description": "Roll 90\u00b0, Yaw 45\u00b0", "value": 17}, {"description": "Roll 90\u00b0, Yaw 90\u00b0", "value": 18}, {"description": "Roll 90\u00b0, Yaw 135\u00b0", "value": 19}, {"description": "Roll 270\u00b0", "value": 20}, {"description": "Roll 270\u00b0, Yaw 45\u00b0", "value": 21}, {"description": "Roll 270\u00b0, Yaw 90\u00b0", "value": 22}, {"description": "Roll 270\u00b0, Yaw 135\u00b0", "value": 23}, {"description": "Pitch 90\u00b0", "value": 24}, {"description": "Pitch 270\u00b0", "value": 25}, {"description": "Pitch 180\u00b0, Yaw 90\u00b0", "value": 26}, {"description": "Pitch 180\u00b0, Yaw 270\u00b0", "value": 27}, {"description": "Roll 90\u00b0, Pitch 90\u00b0", "value": 28}, {"description": "Roll 180\u00b0, Pitch 90\u00b0", "value": 29}, {"description": "Roll 270\u00b0, Pitch 90\u00b0", "value": 30}, {"description": "Roll 90\u00b0, Pitch 180\u00b0", "value": 31}, {"description": "Roll 270\u00b0, Pitch 180\u00b0", "value": 32}, {"description": "Roll 90\u00b0, Pitch 270\u00b0", "value": 33}, {"description": "Roll 180\u00b0, Pitch 270\u00b0", "value": 34}, {"description": "Roll 270\u00b0, Pitch 270\u00b0", "value": 35}, {"description": "Roll 90\u00b0, Pitch 180\u00b0, Yaw 90\u00b0", "value": 36}, {"description": "Roll 90\u00b0, Yaw 270\u00b0", "value": 37}, {"description": "Roll 90\u00b0, Pitch 68\u00b0, Yaw 293\u00b0", "value": 38}, {"description": "Pitch 315\u00b0", "value": 39}, {"description": "Roll 90\u00b0, Pitch 315\u00b0", "value": 40}]}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_GYRO3_XOFF", "shortDesc": "Gyroscope 3 X-axis offset", "type": "Float", "units": "rad/s", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_GYRO3_YOFF", "shortDesc": "Gyroscope 3 Y-axis offset", "type": "Float", "units": "rad/s", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_GYRO3_ZOFF", "shortDesc": "Gyroscope 3 Z-axis offset", "type": "Float", "units": "rad/s", "volatile": true}, {"category": "System", "default": 0, "group": "Sensor Calibration", "longDesc": "Device ID of the magnetometer this calibration applies to.", "name": "CAL_MAG0_ID", "shortDesc": "Magnetometer 0 calibration device ID", "type": "Int32"}, {"category": "System", "default": 0.0, "group": "Sensor Calibration", "longDesc": "Setting this parameter changes CAL_MAG0_ROT to \"Custom Euler Angle\"", "max": 180.0, "min": -180.0, "name": "CAL_MAG0_PITCH", "shortDesc": "Magnetometer 0 Custom Euler Pitch Angle", "type": "Float", "units": "deg"}, {"category": "System", "default": -1, "group": "Sensor Calibration", "name": "CAL_MAG0_PRIO", "shortDesc": "Magnetometer 0 priority", "type": "Int32", "values": [{"description": "Uninitialized", "value": -1}, {"description": "Disabled", "value": 0}, {"description": "Min", "value": 1}, {"description": "Low", "value": 25}, {"description": "Medium (Default)", "value": 50}, {"description": "High", "value": 75}, {"description": "Max", "value": 100}]}, {"category": "System", "default": 0.0, "group": "Sensor Calibration", "longDesc": "Setting this parameter changes CAL_MAG0_ROT to \"Custom Euler Angle\"", "max": 180.0, "min": -180.0, "name": "CAL_MAG0_ROLL", "shortDesc": "Magnetometer 0 Custom Euler Roll Angle", "type": "Float", "units": "deg"}, {"category": "System", "default": -1, "group": "Sensor Calibration", "longDesc": "An internal sensor will force a value of -1, so a GCS should only attempt to configure the rotation if the value is greater than or equal to zero.\nSet to \"Custom Euler Angle\" to define the rotation using CAL_MAG0_ROLL, CAL_MAG0_PITCH and CAL_MAG0_YAW.", "max": 100, "min": -1, "name": "CAL_MAG0_ROT", "shortDesc": "Magnetometer 0 rotation relative to airframe", "type": "Int32", "values": [{"description": "Internal", "value": -1}, {"description": "No rotation", "value": 0}, {"description": "Yaw 45\u00b0", "value": 1}, {"description": "Yaw 90\u00b0", "value": 2}, {"description": "Yaw 135\u00b0", "value": 3}, {"description": "Yaw 180\u00b0", "value": 4}, {"description": "Yaw 225\u00b0", "value": 5}, {"description": "Yaw 270\u00b0", "value": 6}, {"description": "Yaw 315\u00b0", "value": 7}, {"description": "Roll 180\u00b0", "value": 8}, {"description": "Roll 180\u00b0, Yaw 45\u00b0", "value": 9}, {"description": "Roll 180\u00b0, Yaw 90\u00b0", "value": 10}, {"description": "Roll 180\u00b0, Yaw 135\u00b0", "value": 11}, {"description": "Pitch 180\u00b0", "value": 12}, {"description": "Roll 180\u00b0, Yaw 225\u00b0", "value": 13}, {"description": "Roll 180\u00b0, Yaw 270\u00b0", "value": 14}, {"description": "Roll 180\u00b0, Yaw 315\u00b0", "value": 15}, {"description": "Roll 90\u00b0", "value": 16}, {"description": "Roll 90\u00b0, Yaw 45\u00b0", "value": 17}, {"description": "Roll 90\u00b0, Yaw 90\u00b0", "value": 18}, {"description": "Roll 90\u00b0, Yaw 135\u00b0", "value": 19}, {"description": "Roll 270\u00b0", "value": 20}, {"description": "Roll 270\u00b0, Yaw 45\u00b0", "value": 21}, {"description": "Roll 270\u00b0, Yaw 90\u00b0", "value": 22}, {"description": "Roll 270\u00b0, Yaw 135\u00b0", "value": 23}, {"description": "Pitch 90\u00b0", "value": 24}, {"description": "Pitch 270\u00b0", "value": 25}, {"description": "Pitch 180\u00b0, Yaw 90\u00b0", "value": 26}, {"description": "Pitch 180\u00b0, Yaw 270\u00b0", "value": 27}, {"description": "Roll 90\u00b0, Pitch 90\u00b0", "value": 28}, {"description": "Roll 180\u00b0, Pitch 90\u00b0", "value": 29}, {"description": "Roll 270\u00b0, Pitch 90\u00b0", "value": 30}, {"description": "Roll 90\u00b0, Pitch 180\u00b0", "value": 31}, {"description": "Roll 270\u00b0, Pitch 180\u00b0", "value": 32}, {"description": "Roll 90\u00b0, Pitch 270\u00b0", "value": 33}, {"description": "Roll 180\u00b0, Pitch 270\u00b0", "value": 34}, {"description": "Roll 270\u00b0, Pitch 270\u00b0", "value": 35}, {"description": "Roll 90\u00b0, Pitch 180\u00b0, Yaw 90\u00b0", "value": 36}, {"description": "Roll 90\u00b0, Yaw 270\u00b0", "value": 37}, {"description": "Roll 90\u00b0, Pitch 68\u00b0, Yaw 293\u00b0", "value": 38}, {"description": "Pitch 315\u00b0", "value": 39}, {"description": "Roll 90\u00b0, Pitch 315\u00b0", "value": 40}, {"description": "Custom Euler Angle", "value": 100}]}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "longDesc": "Coefficient describing linear relationship between\nX component of magnetometer in body frame axis\nand either current or throttle depending on value of CAL_MAG_COMP_TYP.\nUnit for throttle-based compensation is [G] and\nfor current-based compensation [G/kA]", "name": "CAL_MAG0_XCOMP", "shortDesc": "Magnetometer 0 X Axis throttle compensation", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG0_XODIAG", "shortDesc": "Magnetometer 0 X-axis off diagonal scale factor", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG0_XOFF", "shortDesc": "Magnetometer 0 X-axis offset", "type": "Float", "units": "gauss", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, "min": 0.1, "name": "CAL_MAG0_XSCALE", "shortDesc": "Magnetometer 0 X-axis scaling factor", "type": "Float", "volatile": true}, {"category": "System", "default": 0.0, "group": "Sensor Calibration", "longDesc": "Setting this parameter changes CAL_MAG0_ROT to \"Custom Euler Angle\"", "max": 180.0, "min": -180.0, "name": "CAL_MAG0_YAW", "shortDesc": "Magnetometer 0 Custom Euler Yaw Angle", "type": "Float", "units": "deg"}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "longDesc": "Coefficient describing linear relationship between\nY component of magnetometer in body frame axis\nand either current or throttle depending on value of CAL_MAG_COMP_TYP.\nUnit for throttle-based compensation is [G] and\nfor current-based compensation [G/kA]", "name": "CAL_MAG0_YCOMP", "shortDesc": "Magnetometer 0 Y Axis throttle compensation", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG0_YODIAG", "shortDesc": "Magnetometer 0 Y-axis off diagonal scale factor", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG0_YOFF", "shortDesc": "Magnetometer 0 Y-axis offset", "type": "Float", "units": "gauss", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, "min": 0.1, "name": "CAL_MAG0_YSCALE", "shortDesc": "Magnetometer 0 Y-axis scaling factor", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "longDesc": "Coefficient describing linear relationship between\nZ component of magnetometer in body frame axis\nand either current or throttle depending on value of CAL_MAG_COMP_TYP.\nUnit for throttle-based compensation is [G] and\nfor current-based compensation [G/kA]", "name": "CAL_MAG0_ZCOMP", "shortDesc": "Magnetometer 0 Z Axis throttle compensation", "type": "Float", "volatile": true}, {"category": "System", "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG0_ZODIAG", "shortDesc": "Magnetometer 0 Z-axis off diagonal scale factor", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG0_ZOFF", "shortDesc": "Magnetometer 0 Z-axis offset", "type": "Float", "units": "gauss", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, "min": 0.1, "name": "CAL_MAG0_ZSCALE", "shortDesc": "Magnetometer 0 Z-axis scaling factor", "type": "Float", "volatile": true}, {"category": "System", "default": 0, "group": "Sensor Calibration", "longDesc": "Device ID of the magnetometer this calibration applies to.", "name": "CAL_MAG1_ID", "shortDesc": "Magnetometer 1 calibration device ID", "type": "Int32"}, {"category": "System", "default": 0.0, "group": "Sensor Calibration", "longDesc": "Setting this parameter changes CAL_MAG1_ROT to \"Custom Euler Angle\"", "max": 180.0, "min": -180.0, "name": "CAL_MAG1_PITCH", "shortDesc": "Magnetometer 1 Custom Euler Pitch Angle", "type": "Float", "units": "deg"}, {"category": "System", "default": -1, "group": "Sensor Calibration", "name": "CAL_MAG1_PRIO", "shortDesc": "Magnetometer 1 priority", "type": "Int32", "values": [{"description": "Uninitialized", "value": -1}, {"description": "Disabled", "value": 0}, {"description": "Min", "value": 1}, {"description": "Low", "value": 25}, {"description": "Medium (Default)", "value": 50}, {"description": "High", "value": 75}, {"description": "Max", "value": 100}]}, {"category": "System", "default": 0.0, "group": "Sensor Calibration", "longDesc": "Setting this parameter changes CAL_MAG1_ROT to \"Custom Euler Angle\"", "max": 180.0, "min": -180.0, "name": "CAL_MAG1_ROLL", "shortDesc": "Magnetometer 1 Custom Euler Roll Angle", "type": "Float", "units": "deg"}, {"category": "System", "default": -1, "group": "Sensor Calibration", "longDesc": "An internal sensor will force a value of -1, so a GCS should only attempt to configure the rotation if the value is greater than or equal to zero.\nSet to \"Custom Euler Angle\" to define the rotation using CAL_MAG1_ROLL, CAL_MAG1_PITCH and CAL_MAG1_YAW.", "max": 100, "min": -1, "name": "CAL_MAG1_ROT", "shortDesc": "Magnetometer 1 rotation relative to airframe", "type": "Int32", "values": [{"description": "Internal", "value": -1}, {"description": "No rotation", "value": 0}, {"description": "Yaw 45\u00b0", "value": 1}, {"description": "Yaw 90\u00b0", "value": 2}, {"description": "Yaw 135\u00b0", "value": 3}, {"description": "Yaw 180\u00b0", "value": 4}, {"description": "Yaw 225\u00b0", "value": 5}, {"description": "Yaw 270\u00b0", "value": 6}, {"description": "Yaw 315\u00b0", "value": 7}, {"description": "Roll 180\u00b0", "value": 8}, {"description": "Roll 180\u00b0, Yaw 45\u00b0", "value": 9}, {"description": "Roll 180\u00b0, Yaw 90\u00b0", "value": 10}, {"description": "Roll 180\u00b0, Yaw 135\u00b0", "value": 11}, {"description": "Pitch 180\u00b0", "value": 12}, {"description": "Roll 180\u00b0, Yaw 225\u00b0", "value": 13}, {"description": "Roll 180\u00b0, Yaw 270\u00b0", "value": 14}, {"description": "Roll 180\u00b0, Yaw 315\u00b0", "value": 15}, {"description": "Roll 90\u00b0", "value": 16}, {"description": "Roll 90\u00b0, Yaw 45\u00b0", "value": 17}, {"description": "Roll 90\u00b0, Yaw 90\u00b0", "value": 18}, {"description": "Roll 90\u00b0, Yaw 135\u00b0", "value": 19}, {"description": "Roll 270\u00b0", "value": 20}, {"description": "Roll 270\u00b0, Yaw 45\u00b0", "value": 21}, {"description": "Roll 270\u00b0, Yaw 90\u00b0", "value": 22}, {"description": "Roll 270\u00b0, Yaw 135\u00b0", "value": 23}, {"description": "Pitch 90\u00b0", "value": 24}, {"description": "Pitch 270\u00b0", "value": 25}, {"description": "Pitch 180\u00b0, Yaw 90\u00b0", "value": 26}, {"description": "Pitch 180\u00b0, Yaw 270\u00b0", "value": 27}, {"description": "Roll 90\u00b0, Pitch 90\u00b0", "value": 28}, {"description": "Roll 180\u00b0, Pitch 90\u00b0", "value": 29}, {"description": "Roll 270\u00b0, Pitch 90\u00b0", "value": 30}, {"description": "Roll 90\u00b0, Pitch 180\u00b0", "value": 31}, {"description": "Roll 270\u00b0, Pitch 180\u00b0", "value": 32}, {"description": "Roll 90\u00b0, Pitch 270\u00b0", "value": 33}, {"description": "Roll 180\u00b0, Pitch 270\u00b0", "value": 34}, {"description": "Roll 270\u00b0, Pitch 270\u00b0", "value": 35}, {"description": "Roll 90\u00b0, Pitch 180\u00b0, Yaw 90\u00b0", "value": 36}, {"description": "Roll 90\u00b0, Yaw 270\u00b0", "value": 37}, {"description": "Roll 90\u00b0, Pitch 68\u00b0, Yaw 293\u00b0", "value": 38}, {"description": "Pitch 315\u00b0", "value": 39}, {"description": "Roll 90\u00b0, Pitch 315\u00b0", "value": 40}, {"description": "Custom Euler Angle", "value": 100}]}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "longDesc": "Coefficient describing linear relationship between\nX component of magnetometer in body frame axis\nand either current or throttle depending on value of CAL_MAG_COMP_TYP.\nUnit for throttle-based compensation is [G] and\nfor current-based compensation [G/kA]", "name": "CAL_MAG1_XCOMP", "shortDesc": "Magnetometer 1 X Axis throttle compensation", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG1_XODIAG", "shortDesc": "Magnetometer 1 X-axis off diagonal scale factor", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG1_XOFF", "shortDesc": "Magnetometer 1 X-axis offset", "type": "Float", "units": "gauss", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, "min": 0.1, "name": "CAL_MAG1_XSCALE", "shortDesc": "Magnetometer 1 X-axis scaling factor", "type": "Float", "volatile": true}, {"category": "System", "default": 0.0, "group": "Sensor Calibration", "longDesc": "Setting this parameter changes CAL_MAG1_ROT to \"Custom Euler Angle\"", "max": 180.0, "min": -180.0, "name": "CAL_MAG1_YAW", "shortDesc": "Magnetometer 1 Custom Euler Yaw Angle", "type": "Float", "units": "deg"}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "longDesc": "Coefficient describing linear relationship between\nY component of magnetometer in body frame axis\nand either current or throttle depending on value of CAL_MAG_COMP_TYP.\nUnit for throttle-based compensation is [G] and\nfor current-based compensation [G/kA]", "name": "CAL_MAG1_YCOMP", "shortDesc": "Magnetometer 1 Y Axis throttle compensation", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG1_YODIAG", "shortDesc": "Magnetometer 1 Y-axis off diagonal scale factor", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG1_YOFF", "shortDesc": "Magnetometer 1 Y-axis offset", "type": "Float", "units": "gauss", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, "min": 0.1, "name": "CAL_MAG1_YSCALE", "shortDesc": "Magnetometer 1 Y-axis scaling factor", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "longDesc": "Coefficient describing linear relationship between\nZ component of magnetometer in body frame axis\nand either current or throttle depending on value of CAL_MAG_COMP_TYP.\nUnit for throttle-based compensation is [G] and\nfor current-based compensation [G/kA]", "name": "CAL_MAG1_ZCOMP", "shortDesc": "Magnetometer 1 Z Axis throttle compensation", "type": "Float", "volatile": true}, {"category": "System", "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG1_ZODIAG", "shortDesc": "Magnetometer 1 Z-axis off diagonal scale factor", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG1_ZOFF", "shortDesc": "Magnetometer 1 Z-axis offset", "type": "Float", "units": "gauss", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, "min": 0.1, "name": "CAL_MAG1_ZSCALE", "shortDesc": "Magnetometer 1 Z-axis scaling factor", "type": "Float", "volatile": true}, {"category": "System", "default": 0, "group": "Sensor Calibration", "longDesc": "Device ID of the magnetometer this calibration applies to.", "name": "CAL_MAG2_ID", "shortDesc": "Magnetometer 2 calibration device ID", "type": "Int32"}, {"category": "System", "default": 0.0, "group": "Sensor Calibration", "longDesc": "Setting this parameter changes CAL_MAG2_ROT to \"Custom Euler Angle\"", "max": 180.0, "min": -180.0, "name": "CAL_MAG2_PITCH", "shortDesc": "Magnetometer 2 Custom Euler Pitch Angle", "type": "Float", "units": "deg"}, {"category": "System", "default": -1, "group": "Sensor Calibration", "name": "CAL_MAG2_PRIO", "shortDesc": "Magnetometer 2 priority", "type": "Int32", "values": [{"description": "Uninitialized", "value": -1}, {"description": "Disabled", "value": 0}, {"description": "Min", "value": 1}, {"description": "Low", "value": 25}, {"description": "Medium (Default)", "value": 50}, {"description": "High", "value": 75}, {"description": "Max", "value": 100}]}, {"category": "System", "default": 0.0, "group": "Sensor Calibration", "longDesc": "Setting this parameter changes CAL_MAG2_ROT to \"Custom Euler Angle\"", "max": 180.0, "min": -180.0, "name": "CAL_MAG2_ROLL", "shortDesc": "Magnetometer 2 Custom Euler Roll Angle", "type": "Float", "units": "deg"}, {"category": "System", "default": -1, "group": "Sensor Calibration", "longDesc": "An internal sensor will force a value of -1, so a GCS should only attempt to configure the rotation if the value is greater than or equal to zero.\nSet to \"Custom Euler Angle\" to define the rotation using CAL_MAG2_ROLL, CAL_MAG2_PITCH and CAL_MAG2_YAW.", "max": 100, "min": -1, "name": "CAL_MAG2_ROT", "shortDesc": "Magnetometer 2 rotation relative to airframe", "type": "Int32", "values": [{"description": "Internal", "value": -1}, {"description": "No rotation", "value": 0}, {"description": "Yaw 45\u00b0", "value": 1}, {"description": "Yaw 90\u00b0", "value": 2}, {"description": "Yaw 135\u00b0", "value": 3}, {"description": "Yaw 180\u00b0", "value": 4}, {"description": "Yaw 225\u00b0", "value": 5}, {"description": "Yaw 270\u00b0", "value": 6}, {"description": "Yaw 315\u00b0", "value": 7}, {"description": "Roll 180\u00b0", "value": 8}, {"description": "Roll 180\u00b0, Yaw 45\u00b0", "value": 9}, {"description": "Roll 180\u00b0, Yaw 90\u00b0", "value": 10}, {"description": "Roll 180\u00b0, Yaw 135\u00b0", "value": 11}, {"description": "Pitch 180\u00b0", "value": 12}, {"description": "Roll 180\u00b0, Yaw 225\u00b0", "value": 13}, {"description": "Roll 180\u00b0, Yaw 270\u00b0", "value": 14}, {"description": "Roll 180\u00b0, Yaw 315\u00b0", "value": 15}, {"description": "Roll 90\u00b0", "value": 16}, {"description": "Roll 90\u00b0, Yaw 45\u00b0", "value": 17}, {"description": "Roll 90\u00b0, Yaw 90\u00b0", "value": 18}, {"description": "Roll 90\u00b0, Yaw 135\u00b0", "value": 19}, {"description": "Roll 270\u00b0", "value": 20}, {"description": "Roll 270\u00b0, Yaw 45\u00b0", "value": 21}, {"description": "Roll 270\u00b0, Yaw 90\u00b0", "value": 22}, {"description": "Roll 270\u00b0, Yaw 135\u00b0", "value": 23}, {"description": "Pitch 90\u00b0", "value": 24}, {"description": "Pitch 270\u00b0", "value": 25}, {"description": "Pitch 180\u00b0, Yaw 90\u00b0", "value": 26}, {"description": "Pitch 180\u00b0, Yaw 270\u00b0", "value": 27}, {"description": "Roll 90\u00b0, Pitch 90\u00b0", "value": 28}, {"description": "Roll 180\u00b0, Pitch 90\u00b0", "value": 29}, {"description": "Roll 270\u00b0, Pitch 90\u00b0", "value": 30}, {"description": "Roll 90\u00b0, Pitch 180\u00b0", "value": 31}, {"description": "Roll 270\u00b0, Pitch 180\u00b0", "value": 32}, {"description": "Roll 90\u00b0, Pitch 270\u00b0", "value": 33}, {"description": "Roll 180\u00b0, Pitch 270\u00b0", "value": 34}, {"description": "Roll 270\u00b0, Pitch 270\u00b0", "value": 35}, {"description": "Roll 90\u00b0, Pitch 180\u00b0, Yaw 90\u00b0", "value": 36}, {"description": "Roll 90\u00b0, Yaw 270\u00b0", "value": 37}, {"description": "Roll 90\u00b0, Pitch 68\u00b0, Yaw 293\u00b0", "value": 38}, {"description": "Pitch 315\u00b0", "value": 39}, {"description": "Roll 90\u00b0, Pitch 315\u00b0", "value": 40}, {"description": "Custom Euler Angle", "value": 100}]}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "longDesc": "Coefficient describing linear relationship between\nX component of magnetometer in body frame axis\nand either current or throttle depending on value of CAL_MAG_COMP_TYP.\nUnit for throttle-based compensation is [G] and\nfor current-based compensation [G/kA]", "name": "CAL_MAG2_XCOMP", "shortDesc": "Magnetometer 2 X Axis throttle compensation", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG2_XODIAG", "shortDesc": "Magnetometer 2 X-axis off diagonal scale factor", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG2_XOFF", "shortDesc": "Magnetometer 2 X-axis offset", "type": "Float", "units": "gauss", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, "min": 0.1, "name": "CAL_MAG2_XSCALE", "shortDesc": "Magnetometer 2 X-axis scaling factor", "type": "Float", "volatile": true}, {"category": "System", "default": 0.0, "group": "Sensor Calibration", "longDesc": "Setting this parameter changes CAL_MAG2_ROT to \"Custom Euler Angle\"", "max": 180.0, "min": -180.0, "name": "CAL_MAG2_YAW", "shortDesc": "Magnetometer 2 Custom Euler Yaw Angle", "type": "Float", "units": "deg"}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "longDesc": "Coefficient describing linear relationship between\nY component of magnetometer in body frame axis\nand either current or throttle depending on value of CAL_MAG_COMP_TYP.\nUnit for throttle-based compensation is [G] and\nfor current-based compensation [G/kA]", "name": "CAL_MAG2_YCOMP", "shortDesc": "Magnetometer 2 Y Axis throttle compensation", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG2_YODIAG", "shortDesc": "Magnetometer 2 Y-axis off diagonal scale factor", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG2_YOFF", "shortDesc": "Magnetometer 2 Y-axis offset", "type": "Float", "units": "gauss", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, "min": 0.1, "name": "CAL_MAG2_YSCALE", "shortDesc": "Magnetometer 2 Y-axis scaling factor", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "longDesc": "Coefficient describing linear relationship between\nZ component of magnetometer in body frame axis\nand either current or throttle depending on value of CAL_MAG_COMP_TYP.\nUnit for throttle-based compensation is [G] and\nfor current-based compensation [G/kA]", "name": "CAL_MAG2_ZCOMP", "shortDesc": "Magnetometer 2 Z Axis throttle compensation", "type": "Float", "volatile": true}, {"category": "System", "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG2_ZODIAG", "shortDesc": "Magnetometer 2 Z-axis off diagonal scale factor", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG2_ZOFF", "shortDesc": "Magnetometer 2 Z-axis offset", "type": "Float", "units": "gauss", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, "min": 0.1, "name": "CAL_MAG2_ZSCALE", "shortDesc": "Magnetometer 2 Z-axis scaling factor", "type": "Float", "volatile": true}, {"category": "System", "default": 0, "group": "Sensor Calibration", "longDesc": "Device ID of the magnetometer this calibration applies to.", "name": "CAL_MAG3_ID", "shortDesc": "Magnetometer 3 calibration device ID", "type": "Int32"}, {"category": "System", "default": 0.0, "group": "Sensor Calibration", "longDesc": "Setting this parameter changes CAL_MAG3_ROT to \"Custom Euler Angle\"", "max": 180.0, "min": -180.0, "name": "CAL_MAG3_PITCH", "shortDesc": "Magnetometer 3 Custom Euler Pitch Angle", "type": "Float", "units": "deg"}, {"category": "System", "default": -1, "group": "Sensor Calibration", "name": "CAL_MAG3_PRIO", "shortDesc": "Magnetometer 3 priority", "type": "Int32", "values": [{"description": "Uninitialized", "value": -1}, {"description": "Disabled", "value": 0}, {"description": "Min", "value": 1}, {"description": "Low", "value": 25}, {"description": "Medium (Default)", "value": 50}, {"description": "High", "value": 75}, {"description": "Max", "value": 100}]}, {"category": "System", "default": 0.0, "group": "Sensor Calibration", "longDesc": "Setting this parameter changes CAL_MAG3_ROT to \"Custom Euler Angle\"", "max": 180.0, "min": -180.0, "name": "CAL_MAG3_ROLL", "shortDesc": "Magnetometer 3 Custom Euler Roll Angle", "type": "Float", "units": "deg"}, {"category": "System", "default": -1, "group": "Sensor Calibration", "longDesc": "An internal sensor will force a value of -1, so a GCS should only attempt to configure the rotation if the value is greater than or equal to zero.\nSet to \"Custom Euler Angle\" to define the rotation using CAL_MAG3_ROLL, CAL_MAG3_PITCH and CAL_MAG3_YAW.", "max": 100, "min": -1, "name": "CAL_MAG3_ROT", "shortDesc": "Magnetometer 3 rotation relative to airframe", "type": "Int32", "values": [{"description": "Internal", "value": -1}, {"description": "No rotation", "value": 0}, {"description": "Yaw 45\u00b0", "value": 1}, {"description": "Yaw 90\u00b0", "value": 2}, {"description": "Yaw 135\u00b0", "value": 3}, {"description": "Yaw 180\u00b0", "value": 4}, {"description": "Yaw 225\u00b0", "value": 5}, {"description": "Yaw 270\u00b0", "value": 6}, {"description": "Yaw 315\u00b0", "value": 7}, {"description": "Roll 180\u00b0", "value": 8}, {"description": "Roll 180\u00b0, Yaw 45\u00b0", "value": 9}, {"description": "Roll 180\u00b0, Yaw 90\u00b0", "value": 10}, {"description": "Roll 180\u00b0, Yaw 135\u00b0", "value": 11}, {"description": "Pitch 180\u00b0", "value": 12}, {"description": "Roll 180\u00b0, Yaw 225\u00b0", "value": 13}, {"description": "Roll 180\u00b0, Yaw 270\u00b0", "value": 14}, {"description": "Roll 180\u00b0, Yaw 315\u00b0", "value": 15}, {"description": "Roll 90\u00b0", "value": 16}, {"description": "Roll 90\u00b0, Yaw 45\u00b0", "value": 17}, {"description": "Roll 90\u00b0, Yaw 90\u00b0", "value": 18}, {"description": "Roll 90\u00b0, Yaw 135\u00b0", "value": 19}, {"description": "Roll 270\u00b0", "value": 20}, {"description": "Roll 270\u00b0, Yaw 45\u00b0", "value": 21}, {"description": "Roll 270\u00b0, Yaw 90\u00b0", "value": 22}, {"description": "Roll 270\u00b0, Yaw 135\u00b0", "value": 23}, {"description": "Pitch 90\u00b0", "value": 24}, {"description": "Pitch 270\u00b0", "value": 25}, {"description": "Pitch 180\u00b0, Yaw 90\u00b0", "value": 26}, {"description": "Pitch 180\u00b0, Yaw 270\u00b0", "value": 27}, {"description": "Roll 90\u00b0, Pitch 90\u00b0", "value": 28}, {"description": "Roll 180\u00b0, Pitch 90\u00b0", "value": 29}, {"description": "Roll 270\u00b0, Pitch 90\u00b0", "value": 30}, {"description": "Roll 90\u00b0, Pitch 180\u00b0", "value": 31}, {"description": "Roll 270\u00b0, Pitch 180\u00b0", "value": 32}, {"description": "Roll 90\u00b0, Pitch 270\u00b0", "value": 33}, {"description": "Roll 180\u00b0, Pitch 270\u00b0", "value": 34}, {"description": "Roll 270\u00b0, Pitch 270\u00b0", "value": 35}, {"description": "Roll 90\u00b0, Pitch 180\u00b0, Yaw 90\u00b0", "value": 36}, {"description": "Roll 90\u00b0, Yaw 270\u00b0", "value": 37}, {"description": "Roll 90\u00b0, Pitch 68\u00b0, Yaw 293\u00b0", "value": 38}, {"description": "Pitch 315\u00b0", "value": 39}, {"description": "Roll 90\u00b0, Pitch 315\u00b0", "value": 40}, {"description": "Custom Euler Angle", "value": 100}]}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "longDesc": "Coefficient describing linear relationship between\nX component of magnetometer in body frame axis\nand either current or throttle depending on value of CAL_MAG_COMP_TYP.\nUnit for throttle-based compensation is [G] and\nfor current-based compensation [G/kA]", "name": "CAL_MAG3_XCOMP", "shortDesc": "Magnetometer 3 X Axis throttle compensation", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG3_XODIAG", "shortDesc": "Magnetometer 3 X-axis off diagonal scale factor", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG3_XOFF", "shortDesc": "Magnetometer 3 X-axis offset", "type": "Float", "units": "gauss", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, "min": 0.1, "name": "CAL_MAG3_XSCALE", "shortDesc": "Magnetometer 3 X-axis scaling factor", "type": "Float", "volatile": true}, {"category": "System", "default": 0.0, "group": "Sensor Calibration", "longDesc": "Setting this parameter changes CAL_MAG3_ROT to \"Custom Euler Angle\"", "max": 180.0, "min": -180.0, "name": "CAL_MAG3_YAW", "shortDesc": "Magnetometer 3 Custom Euler Yaw Angle", "type": "Float", "units": "deg"}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "longDesc": "Coefficient describing linear relationship between\nY component of magnetometer in body frame axis\nand either current or throttle depending on value of CAL_MAG_COMP_TYP.\nUnit for throttle-based compensation is [G] and\nfor current-based compensation [G/kA]", "name": "CAL_MAG3_YCOMP", "shortDesc": "Magnetometer 3 Y Axis throttle compensation", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG3_YODIAG", "shortDesc": "Magnetometer 3 Y-axis off diagonal scale factor", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG3_YOFF", "shortDesc": "Magnetometer 3 Y-axis offset", "type": "Float", "units": "gauss", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, "min": 0.1, "name": "CAL_MAG3_YSCALE", "shortDesc": "Magnetometer 3 Y-axis scaling factor", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "longDesc": "Coefficient describing linear relationship between\nZ component of magnetometer in body frame axis\nand either current or throttle depending on value of CAL_MAG_COMP_TYP.\nUnit for throttle-based compensation is [G] and\nfor current-based compensation [G/kA]", "name": "CAL_MAG3_ZCOMP", "shortDesc": "Magnetometer 3 Z Axis throttle compensation", "type": "Float", "volatile": true}, {"category": "System", "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG3_ZODIAG", "shortDesc": "Magnetometer 3 Z-axis off diagonal scale factor", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG3_ZOFF", "shortDesc": "Magnetometer 3 Z-axis offset", "type": "Float", "units": "gauss", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, "min": 0.1, "name": "CAL_MAG3_ZSCALE", "shortDesc": "Magnetometer 3 Z-axis scaling factor", "type": "Float", "volatile": true}, {"category": "System", "default": 0, "group": "Sensor Calibration", "name": "CAL_MAG_COMP_TYP", "shortDesc": "Type of magnetometer compensation", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Throttle-based compensation", "value": 1}, {"description": "Current-based compensation (battery_status instance 0)", "value": 2}, {"description": "Current-based compensation (battery_status instance 1)", "value": 3}]}, {"category": "Standard", "default": 0.0, "group": "Sensor Calibration", "longDesc": "Pick the appropriate scaling from the datasheet.\nthis number defines the (linear) conversion from voltage\nto Pascal (pa). For the MPXV7002DP this is 1000.\nNOTE: If the sensor always registers zero, try switching\nthe static and dynamic tubes.", "name": "SENS_DPRES_ANSC", "shortDesc": "Differential pressure sensor analog scaling", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Sensor Calibration", "longDesc": "The offset (zero-reading) in Pascal", "name": "SENS_DPRES_OFF", "shortDesc": "Differential pressure sensor offset", "type": "Float", "volatile": true}, {"category": "System", "default": 0, "group": "Sensor Calibration", "longDesc": "Reverse the raw measurements of all differential pressure sensors.\nThis can be enabled if the sensors have static and dynamic ports swapped.", "name": "SENS_DPRES_REV", "shortDesc": "Reverse differential pressure sensor readings", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 2, "default": 100.0, "group": "Sensor Calibration", "increment": 0.1, "longDesc": "This parameter defines the maximum distance from ground at which the optical flow sensor operates reliably.\nThe height setpoint will be limited to be no greater than this value when the navigation system\nis completely reliant on optical flow data and the height above ground estimate is valid.\nThe sensor may be usable above this height, but accuracy will progressively degrade.", "max": 100.0, "min": 1.0, "name": "SENS_FLOW_MAXHGT", "shortDesc": "Maximum height above ground when reliant on optical flow", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 8.0, "group": "Sensor Calibration", "longDesc": "Optical flow data will not fused by the estimators if the magnitude of the flow rate exceeds this value and\ncontrol loops will be instructed to limit ground speed such that the flow rate produced by movement over ground\nis less than 50% of this value.", "min": 1.0, "name": "SENS_FLOW_MAXR", "shortDesc": "Magnitude of maximum angular flow rate reliably measurable by the optical flow sensor", "type": "Float", "units": "rad/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.08, "group": "Sensor Calibration", "increment": 0.1, "longDesc": "This parameter defines the minimum distance from ground at which the optical flow sensor operates reliably.\nThe sensor may be usable below this height, but accuracy will progressively reduce to loss of focus.", "max": 1.0, "min": 0.0, "name": "SENS_FLOW_MINHGT", "shortDesc": "Minimum height above ground when reliant on optical flow", "type": "Float", "units": "m"}, {"category": "Standard", "default": 0, "group": "Sensors", "longDesc": "Model with Pitot\nCAL_AIR_TUBED_MM: Not used, 1.5 mm tubes assumed.\nCAL_AIR_TUBELEN: Length of the tubes connecting the pitot to the sensor.\nModel without Pitot (1.5 mm tubes)\nCAL_AIR_TUBED_MM: Not used, 1.5 mm tubes assumed.\nCAL_AIR_TUBELEN: Length of the tubes connecting the pitot to the sensor.\nTube Pressure Drop\nCAL_AIR_TUBED_MM: Diameter in mm of the pitot and tubes, must have the same diameter.\nCAL_AIR_TUBELEN: Length of the tubes connecting the pitot to the sensor and the static + dynamic port length of the pitot.", "name": "CAL_AIR_CMODEL", "shortDesc": "Airspeed sensor compensation model for the SDP3x", "type": "Int32", "values": [{"description": "Model with Pitot", "value": 0}, {"description": "Model without Pitot (1.5 mm tubes)", "value": 1}, {"description": "Tube Pressure Drop", "value": 2}]}, {"category": "Standard", "default": 1.5, "group": "Sensors", "max": 100.0, "min": 1.5, "name": "CAL_AIR_TUBED_MM", "shortDesc": "Airspeed sensor tube diameter. Only used for the Tube Pressure Drop Compensation", "type": "Float", "units": "mm"}, {"category": "Standard", "default": 0.2, "group": "Sensors", "longDesc": "See the CAL_AIR_CMODEL explanation on how this parameter should be set.", "max": 2.0, "min": 0.01, "name": "CAL_AIR_TUBELEN", "shortDesc": "Airspeed sensor tube length", "type": "Float", "units": "m"}, {"category": "Developer", "default": 63, "group": "Sensors", "longDesc": "Use SENS_MAG_SIDES instead", "name": "CAL_MAG_SIDES", "shortDesc": "For legacy QGC support only", "type": "Int32"}, {"category": "Standard", "default": 30.0, "group": "Sensors", "longDesc": "The cutoff frequency for the 2nd order butterworth filter on the primary accelerometer.\nThis only affects the signal sent to the controllers, not the estimators. 0 disables the filter.", "max": 1000.0, "min": 0.0, "name": "IMU_ACCEL_CUTOFF", "rebootRequired": true, "shortDesc": "Low pass filter cutoff frequency for accel", "type": "Float", "units": "Hz"}, {"category": "Standard", "decimalPlaces": 1, "default": 20.0, "group": "Sensors", "increment": 0.1, "longDesc": "The cutoff frequency for the 2nd order butterworth filter used on\nthe time derivative of the measured angular velocity, also known as\nthe D-term filter in the rate controller. The D-term uses the derivative of\nthe rate and thus is the most susceptible to noise. Therefore, using\na D-term filter allows to increase IMU_GYRO_CUTOFF, which\nleads to reduced control latency and permits to increase the P gains.\nA value of 0 disables the filter.", "max": 1000.0, "min": 0.0, "name": "IMU_DGYRO_CUTOFF", "rebootRequired": true, "shortDesc": "Cutoff frequency for angular acceleration (D-Term filter)", "type": "Float", "units": "Hz"}, {"category": "Standard", "default": 1, "group": "Sensors", "name": "IMU_GYRO_CAL_EN", "rebootRequired": true, "shortDesc": "IMU gyro auto calibration enable", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 1, "default": 40.0, "group": "Sensors", "increment": 0.1, "longDesc": "The cutoff frequency for the 2nd order butterworth filter on the primary gyro.\nThis only affects the angular velocity sent to the controllers, not the estimators.\nIt applies also to the angular acceleration (D-Term filter), see IMU_DGYRO_CUTOFF.\nA value of 0 disables the filter.", "max": 1000.0, "min": 0.0, "name": "IMU_GYRO_CUTOFF", "rebootRequired": true, "shortDesc": "Low pass filter cutoff frequency for gyro", "type": "Float", "units": "Hz"}, {"category": "Standard", "decimalPlaces": 1, "default": 15.0, "group": "Sensors", "increment": 0.1, "longDesc": "Bandwidth per notch filter when using dynamic notch filtering with ESC RPM.", "max": 30.0, "min": 5.0, "name": "IMU_GYRO_DNF_BW", "shortDesc": "IMU gyro ESC notch filter bandwidth", "type": "Float", "units": "Hz"}, {"bitmask": [{"description": "ESC RPM", "index": 0}, {"description": "FFT", "index": 1}], "category": "Standard", "default": 0, "group": "Sensors", "longDesc": "Enable bank of dynamically updating notch filters.\nRequires ESC RPM feedback or onboard FFT (IMU_GYRO_FFT_EN).", "max": 3, "min": 0, "name": "IMU_GYRO_DNF_EN", "shortDesc": "IMU gyro dynamic notch filtering", "type": "Int32"}, {"category": "Standard", "default": 3, "group": "Sensors", "longDesc": "ESC RPM number of harmonics (multiples of RPM) for ESC RPM dynamic notch filtering.", "max": 7, "min": 1, "name": "IMU_GYRO_DNF_HMC", "shortDesc": "IMU gyro dynamic notch filter harmonics", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 1, "default": 25.0, "group": "Sensors", "increment": 0.1, "longDesc": "Minimum notch filter frequency in Hz.", "name": "IMU_GYRO_DNF_MIN", "shortDesc": "IMU gyro dynamic notch filter minimum frequency", "type": "Float", "units": "Hz"}, {"category": "Standard", "default": 0, "group": "Sensors", "name": "IMU_GYRO_FFT_EN", "rebootRequired": true, "shortDesc": "IMU gyro FFT enable", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 512, "group": "Sensors", "name": "IMU_GYRO_FFT_LEN", "rebootRequired": true, "shortDesc": "IMU gyro FFT length", "type": "Int32", "units": "Hz", "values": [{"description": "256", "value": 256}, {"description": "512", "value": 512}, {"description": "1024", "value": 1024}, {"description": "4096", "value": 4096}]}, {"category": "Standard", "default": 150.0, "group": "Sensors", "max": 1000.0, "min": 1.0, "name": "IMU_GYRO_FFT_MAX", "rebootRequired": true, "shortDesc": "IMU gyro FFT maximum frequency", "type": "Float", "units": "Hz"}, {"category": "Standard", "default": 30.0, "group": "Sensors", "max": 1000.0, "min": 1.0, "name": "IMU_GYRO_FFT_MIN", "rebootRequired": true, "shortDesc": "IMU gyro FFT minimum frequency", "type": "Float", "units": "Hz"}, {"category": "Standard", "default": 10.0, "group": "Sensors", "max": 30.0, "min": 1.0, "name": "IMU_GYRO_FFT_SNR", "shortDesc": "IMU gyro FFT SNR", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 20.0, "group": "Sensors", "increment": 0.1, "longDesc": "The frequency width of the stop band for the 2nd order notch filter on the primary gyro.\nSee \"IMU_GYRO_NF0_FRQ\" to activate the filter and to set the notch frequency.\nApplies to both angular velocity and angular acceleration sent to the controllers.", "max": 100.0, "min": 0.0, "name": "IMU_GYRO_NF0_BW", "rebootRequired": true, "shortDesc": "Notch filter bandwidth for gyro", "type": "Float", "units": "Hz"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "Sensors", "increment": 0.1, "longDesc": "The center frequency for the 2nd order notch filter on the primary gyro.\nThis filter can be enabled to avoid feedback amplification of structural resonances at a specific frequency.\nThis only affects the signal sent to the controllers, not the estimators.\nApplies to both angular velocity and angular acceleration sent to the controllers.\nSee \"IMU_GYRO_NF0_BW\" to set the bandwidth of the filter.\nA value of 0 disables the filter.", "max": 1000.0, "min": 0.0, "name": "IMU_GYRO_NF0_FRQ", "rebootRequired": true, "shortDesc": "Notch filter frequency for gyro", "type": "Float", "units": "Hz"}, {"category": "Standard", "decimalPlaces": 1, "default": 20.0, "group": "Sensors", "increment": 0.1, "longDesc": "The frequency width of the stop band for the 2nd order notch filter on the primary gyro.\nSee \"IMU_GYRO_NF1_FRQ\" to activate the filter and to set the notch frequency.\nApplies to both angular velocity and angular acceleration sent to the controllers.", "max": 100.0, "min": 0.0, "name": "IMU_GYRO_NF1_BW", "rebootRequired": true, "shortDesc": "Notch filter 1 bandwidth for gyro", "type": "Float", "units": "Hz"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "Sensors", "increment": 0.1, "longDesc": "The center frequency for the 2nd order notch filter on the primary gyro.\nThis filter can be enabled to avoid feedback amplification of structural resonances at a specific frequency.\nThis only affects the signal sent to the controllers, not the estimators.\nApplies to both angular velocity and angular acceleration sent to the controllers.\nSee \"IMU_GYRO_NF1_BW\" to set the bandwidth of the filter.\nA value of 0 disables the filter.", "max": 1000.0, "min": 0.0, "name": "IMU_GYRO_NF1_FRQ", "rebootRequired": true, "shortDesc": "Notch filter 2 frequency for gyro", "type": "Float", "units": "Hz"}, {"category": "Standard", "default": 400, "group": "Sensors", "longDesc": "The maximum rate the gyro control data (vehicle_angular_velocity) will be\nallowed to publish at. This is the loop rate for the rate controller and outputs.\nNote: sensor data is always read and filtered at the full raw rate (eg commonly 8 kHz) regardless of this setting.", "max": 2000, "min": 100, "name": "IMU_GYRO_RATEMAX", "rebootRequired": true, "shortDesc": "Gyro control data maximum publication rate (inner loop rate)", "type": "Int32", "units": "Hz", "values": [{"description": "100 Hz", "value": 100}, {"description": "250 Hz", "value": 250}, {"description": "400 Hz", "value": 400}, {"description": "800 Hz", "value": 800}, {"description": "1000 Hz", "value": 1000}, {"description": "2000 Hz", "value": 2000}]}, {"category": "Standard", "default": 200, "group": "Sensors", "longDesc": "The rate at which raw IMU data is integrated to produce delta angles and delta velocities.\nRecommended to set this to a multiple of the estimator update period (currently 10 ms for ekf2).", "max": 1000, "min": 100, "name": "IMU_INTEG_RATE", "rebootRequired": true, "shortDesc": "IMU integration rate", "type": "Int32", "units": "Hz", "values": [{"description": "100 Hz", "value": 100}, {"description": "200 Hz", "value": 200}, {"description": "250 Hz", "value": 250}, {"description": "400 Hz", "value": 400}]}, {"category": "Standard", "default": 1013.25, "group": "Sensors", "max": 1500.0, "min": 500.0, "name": "SENS_BARO_QNH", "shortDesc": "QNH for barometer", "type": "Float", "units": "hPa"}, {"category": "Standard", "default": 20.0, "group": "Sensors", "longDesc": "Barometric air data maximum publication rate. This is an upper bound,\nactual barometric data rate is still dependent on the sensor.", "max": 200.0, "min": 1.0, "name": "SENS_BARO_RATE", "shortDesc": "Baro max rate", "type": "Float", "units": "Hz"}, {"category": "System", "default": 1, "group": "Sensors", "longDesc": "Automatically calibrate barometer based on the GNSS height", "name": "SENS_BAR_AUTOCAL", "shortDesc": "Barometer auto calibration", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 0, "group": "Sensors", "longDesc": "This parameter defines the rotation of the FMU board relative to the platform.", "max": 40, "min": -1, "name": "SENS_BOARD_ROT", "rebootRequired": true, "shortDesc": "Board rotation", "type": "Int32", "values": [{"description": "No rotation", "value": 0}, {"description": "Yaw 45\u00b0", "value": 1}, {"description": "Yaw 90\u00b0", "value": 2}, {"description": "Yaw 135\u00b0", "value": 3}, {"description": "Yaw 180\u00b0", "value": 4}, {"description": "Yaw 225\u00b0", "value": 5}, {"description": "Yaw 270\u00b0", "value": 6}, {"description": "Yaw 315\u00b0", "value": 7}, {"description": "Roll 180\u00b0", "value": 8}, {"description": "Roll 180\u00b0, Yaw 45\u00b0", "value": 9}, {"description": "Roll 180\u00b0, Yaw 90\u00b0", "value": 10}, {"description": "Roll 180\u00b0, Yaw 135\u00b0", "value": 11}, {"description": "Pitch 180\u00b0", "value": 12}, {"description": "Roll 180\u00b0, Yaw 225\u00b0", "value": 13}, {"description": "Roll 180\u00b0, Yaw 270\u00b0", "value": 14}, {"description": "Roll 180\u00b0, Yaw 315\u00b0", "value": 15}, {"description": "Roll 90\u00b0", "value": 16}, {"description": "Roll 90\u00b0, Yaw 45\u00b0", "value": 17}, {"description": "Roll 90\u00b0, Yaw 90\u00b0", "value": 18}, {"description": "Roll 90\u00b0, Yaw 135\u00b0", "value": 19}, {"description": "Roll 270\u00b0", "value": 20}, {"description": "Roll 270\u00b0, Yaw 45\u00b0", "value": 21}, {"description": "Roll 270\u00b0, Yaw 90\u00b0", "value": 22}, {"description": "Roll 270\u00b0, Yaw 135\u00b0", "value": 23}, {"description": "Pitch 90\u00b0", "value": 24}, {"description": "Pitch 270\u00b0", "value": 25}, {"description": "Pitch 180\u00b0, Yaw 90\u00b0", "value": 26}, {"description": "Pitch 180\u00b0, Yaw 270\u00b0", "value": 27}, {"description": "Roll 90\u00b0, Pitch 90\u00b0", "value": 28}, {"description": "Roll 180\u00b0, Pitch 90\u00b0", "value": 29}, {"description": "Roll 270\u00b0, Pitch 90\u00b0", "value": 30}, {"description": "Roll 90\u00b0, Pitch 180\u00b0", "value": 31}, {"description": "Roll 270\u00b0, Pitch 180\u00b0", "value": 32}, {"description": "Roll 90\u00b0, Pitch 270\u00b0", "value": 33}, {"description": "Roll 180\u00b0, Pitch 270\u00b0", "value": 34}, {"description": "Roll 270\u00b0, Pitch 270\u00b0", "value": 35}, {"description": "Roll 90\u00b0, Pitch 180\u00b0, Yaw 90\u00b0", "value": 36}, {"description": "Roll 90\u00b0, Yaw 270\u00b0", "value": 37}, {"description": "Roll 90\u00b0, Pitch 68\u00b0, Yaw 293\u00b0", "value": 38}, {"description": "Pitch 315\u00b0", "value": 39}, {"description": "Roll 90\u00b0, Pitch 315\u00b0", "value": 40}]}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "Sensors", "longDesc": "Rotation from flight controller board to vehicle body frame.\nThis parameter gets set during the \"level horizon\" calibration or can be\nset manually.", "max": 45.0, "min": -45.0, "name": "SENS_BOARD_X_OFF", "shortDesc": "Board rotation X (roll) offset", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "Sensors", "longDesc": "Rotation from flight controller board to vehicle body frame.\nThis parameter gets set during the \"level horizon\" calibration or can be\nset manually.", "max": 45.0, "min": -45.0, "name": "SENS_BOARD_Y_OFF", "shortDesc": "Board rotation Y (pitch) offset", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "Sensors", "longDesc": "Rotation from flight controller board to vehicle body frame.\nHas to be set manually (not set by any calibration).", "max": 45.0, "min": -45.0, "name": "SENS_BOARD_Z_OFF", "shortDesc": "Board rotation Z (yaw) offset", "type": "Float", "units": "deg"}, {"category": "Standard", "default": 0, "group": "Sensors", "max": 1, "min": 0, "name": "SENS_EN_AGPSIM", "rebootRequired": true, "shortDesc": "Simulate Aux Global Position (AGP)", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 0, "group": "Sensors", "max": 1, "min": 0, "name": "SENS_EN_ARSPDSIM", "rebootRequired": true, "shortDesc": "Enable simulated airspeed sensor instance", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 0, "group": "Sensors", "max": 1, "min": 0, "name": "SENS_EN_BAROSIM", "rebootRequired": true, "shortDesc": "Enable simulated barometer sensor instance", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 0, "group": "Sensors", "max": 1, "min": 0, "name": "SENS_EN_GPSSIM", "rebootRequired": true, "shortDesc": "Enable simulated GPS sinstance", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 0, "group": "Sensors", "max": 1, "min": 0, "name": "SENS_EN_MAGSIM", "rebootRequired": true, "shortDesc": "Enable simulated magnetometer sensor instance", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "System", "default": -1, "group": "Sensors", "name": "SENS_EN_THERMAL", "shortDesc": "Thermal control of sensor temperature", "type": "Int32", "values": [{"description": "Thermal control unavailable", "value": -1}, {"description": "Thermal control off", "value": 0}, {"description": "Thermal control enabled", "value": 1}]}, {"category": "System", "default": 1, "group": "Sensors", "longDesc": "Probe for optional external I2C devices.", "name": "SENS_EXT_I2C_PRB", "shortDesc": "External I2C probe", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 70.0, "group": "Sensors", "longDesc": "Optical flow data maximum publication rate. This is an upper bound,\nactual optical flow data rate is still dependent on the sensor.", "max": 200.0, "min": 1.0, "name": "SENS_FLOW_RATE", "rebootRequired": true, "shortDesc": "Optical flow max rate", "type": "Float", "units": "Hz"}, {"category": "Standard", "default": 0, "group": "Sensors", "longDesc": "This parameter defines the yaw rotation of the optical flow relative to the vehicle body frame.\nZero rotation is defined as X on flow board pointing towards front of vehicle.", "name": "SENS_FLOW_ROT", "shortDesc": "Optical flow rotation", "type": "Int32", "values": [{"description": "No rotation", "value": 0}, {"description": "Yaw 45\u00b0", "value": 1}, {"description": "Yaw 90\u00b0", "value": 2}, {"description": "Yaw 135\u00b0", "value": 3}, {"description": "Yaw 180\u00b0", "value": 4}, {"description": "Yaw 225\u00b0", "value": 5}, {"description": "Yaw 270\u00b0", "value": 6}, {"description": "Yaw 315\u00b0", "value": 7}]}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "Sensors", "max": 1.5, "min": 0.5, "name": "SENS_FLOW_SCALE", "shortDesc": "Optical flow scale factor", "type": "Float"}, {"bitmask": [{"description": "use speed accuracy", "index": 0}, {"description": "use hpos accuracy", "index": 1}, {"description": "use vpos accuracy", "index": 2}], "category": "Standard", "default": 7, "group": "Sensors", "longDesc": "Set bits in the following positions to set which GPS accuracy metrics will be used to calculate the blending weight. Set to zero to disable and always used first GPS instance.\n0 : Set to true to use speed accuracy\n1 : Set to true to use horizontal position accuracy\n2 : Set to true to use vertical position accuracy", "max": 7, "min": 0, "name": "SENS_GPS_MASK", "shortDesc": "Multi GPS Blending Control Mask", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "Sensors", "longDesc": "When no blending is active, this defines the preferred GPS receiver instance.\nThe GPS selection logic waits until the primary receiver is available to\nsend data to the EKF even if a secondary instance is already available.\nThe secondary instance is then only used if the primary one times out.\nAccepted values:\n-1 : Auto (equal priority for all instances)\n0 : Main serial GPS instance\n1 : Secondary serial GPS instance\n2-127 : UAVCAN module node ID\nThis parameter has no effect if blending is active.", "max": 127, "min": -1, "name": "SENS_GPS_PRIME", "shortDesc": "Multi GPS primary instance", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 1, "default": 10.0, "group": "Sensors", "longDesc": "Sets the longest time constant that will be applied to the calculation of GPS position and height offsets used to correct data from multiple GPS data for steady state position differences.", "max": 100.0, "min": 1.0, "name": "SENS_GPS_TAU", "shortDesc": "Multi GPS Blending Time Constant", "type": "Float", "units": "s"}, {"category": "System", "default": 1, "group": "Sensors", "longDesc": "Automatically initialize IMU (accel/gyro) calibration from bias estimates if available.", "name": "SENS_IMU_AUTOCAL", "shortDesc": "IMU auto calibration", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "System", "default": 1, "group": "Sensors", "longDesc": "Notify the user if the IMU is clipping", "name": "SENS_IMU_CLPNOTI", "shortDesc": "IMU notify clipping", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "System", "default": 1, "group": "Sensors", "name": "SENS_IMU_MODE", "rebootRequired": true, "shortDesc": "Sensors hub IMU mode", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Publish primary IMU selection", "value": 1}]}, {"category": "System", "default": 1, "group": "Sensors", "longDesc": "For systems with an external barometer, this should be set to false to make sure that the external is used.", "name": "SENS_INT_BARO_EN", "rebootRequired": true, "shortDesc": "Enable internal barometers", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "System", "default": 1, "group": "Sensors", "longDesc": "Automatically initialize magnetometer calibration from bias estimate if available.", "name": "SENS_MAG_AUTOCAL", "shortDesc": "Magnetometer auto calibration", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 1, "group": "Sensors", "longDesc": "During calibration attempt to automatically determine the rotation of external magnetometers.", "name": "SENS_MAG_AUTOROT", "shortDesc": "Automatically set external rotations", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "System", "default": 1, "group": "Sensors", "name": "SENS_MAG_MODE", "rebootRequired": true, "shortDesc": "Sensors hub mag mode", "type": "Int32", "values": [{"description": "Publish all magnetometers", "value": 0}, {"description": "Publish primary magnetometer", "value": 1}]}, {"category": "Standard", "default": 15.0, "group": "Sensors", "longDesc": "Magnetometer data maximum publication rate. This is an upper bound,\nactual magnetometer data rate is still dependent on the sensor.", "max": 200.0, "min": 1.0, "name": "SENS_MAG_RATE", "rebootRequired": true, "shortDesc": "Magnetometer max rate", "type": "Float", "units": "Hz"}, {"category": "Standard", "default": 63, "group": "Sensors", "longDesc": "If set to two side calibration, only the offsets are estimated, the scale\ncalibration is left unchanged. Thus an initial six side calibration is\nrecommended.\nBits:\nORIENTATION_TAIL_DOWN = 1\nORIENTATION_NOSE_DOWN = 2\nORIENTATION_LEFT = 4\nORIENTATION_RIGHT = 8\nORIENTATION_UPSIDE_DOWN = 16\nORIENTATION_RIGHTSIDE_UP = 32", "max": 63, "min": 34, "name": "SENS_MAG_SIDES", "shortDesc": "Bitfield selecting mag sides for calibration", "type": "Int32", "values": [{"description": "Two side calibration", "value": 34}, {"description": "Three side calibration", "value": 38}, {"description": "Six side calibration", "value": 63}]}, {"category": "Standard", "default": 0, "group": "Sensors", "max": 1, "min": 0, "name": "SIM_ARSPD_FAIL", "rebootRequired": true, "shortDesc": "Dynamically simulate failure of airspeed sensor instance", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 1, "group": "Septentrio", "longDesc": "By default, the receiver is automatically configured. Sometimes it may be used for multiple purposes.\nIf the offered parameters aren't sufficient, this parameter can be disabled to have full control of the receiver configuration.\nA good way to use this is to enable automatic configuration, let the receiver be configured, and then disable it to make manual adjustments.", "name": "SEP_AUTO_CONFIG", "rebootRequired": true, "shortDesc": "Toggle automatic receiver configuration", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"bitmask": [{"description": "GPS", "index": 0}, {"description": "GLONASS", "index": 1}, {"description": "Galileo", "index": 2}, {"description": "SBAS", "index": 3}, {"description": "BeiDou", "index": 4}], "category": "Standard", "default": 0, "group": "Septentrio", "longDesc": "Choice of which constellations the receiver should use for PVT computation.\nWhen this is 0, the constellation usage isn't changed.", "max": 63, "min": 0, "name": "SEP_CONST_USAGE", "rebootRequired": true, "shortDesc": "Usage of different constellations", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "Septentrio", "longDesc": "Log raw communication between the driver and connected receivers.\nFor example, \"To receiver\" will log all commands and corrections sent by the driver to the receiver.", "max": 3, "min": 0, "name": "SEP_DUMP_COMM", "shortDesc": "Log GPS communication data", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "From receiver", "value": 1}, {"description": "To receiver", "value": 2}, {"description": "Both", "value": 3}]}, {"category": "Standard", "default": 0, "group": "Septentrio", "longDesc": "Setup and expected use of the hardware.\n- Default: Use two receivers as completely separate instances.\n- Moving base: Use two receivers in a rover & moving base setup for heading.", "max": 1, "min": 0, "name": "SEP_HARDW_SETUP", "rebootRequired": true, "shortDesc": "Setup and expected use of the hardware", "type": "Int32", "values": [{"description": "Default", "value": 0}, {"description": "Moving base", "value": 1}]}, {"category": "Standard", "default": 0, "group": "Septentrio", "longDesc": "When the receiver is already set up to log data, this decides whether extra logged data should be added or overwrite existing data.", "name": "SEP_LOG_FORCE", "rebootRequired": true, "shortDesc": "Whether to overwrite or add to existing logging", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 0, "group": "Septentrio", "longDesc": "Select the frequency at which the connected receiver should log data to its internal storage.", "max": 10, "min": 0, "name": "SEP_LOG_HZ", "rebootRequired": true, "shortDesc": "Logging frequency for the receiver", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "0.1 Hz", "value": 1}, {"description": "0.2 Hz", "value": 2}, {"description": "0.5 Hz", "value": 3}, {"description": "1 Hz", "value": 4}, {"description": "2 Hz", "value": 5}, {"description": "5 Hz", "value": 6}, {"description": "10 Hz", "value": 7}, {"description": "20 Hz", "value": 8}, {"description": "25 Hz", "value": 9}, {"description": "50 Hz", "value": 10}]}, {"category": "Standard", "default": 2, "group": "Septentrio", "longDesc": "Select the level of detail that needs to be logged by the receiver.", "max": 3, "min": 0, "name": "SEP_LOG_LEVEL", "rebootRequired": true, "shortDesc": "Logging level for the receiver", "type": "Int32", "values": [{"description": "Lite", "value": 0}, {"description": "Basic", "value": 1}, {"description": "Default", "value": 2}, {"description": "Full", "value": 3}]}, {"category": "Standard", "default": 1, "group": "Septentrio", "longDesc": "The output frequency of the main SBF blocks needed for PVT information.", "max": 3, "min": 0, "name": "SEP_OUTP_HZ", "rebootRequired": true, "shortDesc": "Output frequency of main SBF blocks", "type": "Int32", "values": [{"description": "5 Hz", "value": 0}, {"description": "10 Hz", "value": 1}, {"description": "20 Hz", "value": 2}, {"description": "25 Hz", "value": 3}]}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Septentrio", "longDesc": "Vertical offsets can be compensated for by adjusting the Pitch offset.\nNote that this can be interpreted as the \"roll\" angle in case the antennas are aligned along the perpendicular axis.\nThis occurs in situations where the two antenna ARPs may not be exactly at the same height in the vehicle reference frame.\nSince pitch is defined as the right-handed rotation about the vehicle Y axis,\na situation where the main antenna is mounted lower than the aux antenna (assuming the default antenna setup) will result in a positive pitch.", "max": 90.0, "min": -90.0, "name": "SEP_PITCH_OFFS", "rebootRequired": true, "shortDesc": "Pitch offset for dual antenna GPS", "type": "Float", "units": "deg"}, {"category": "Standard", "default": 0, "group": "Septentrio", "longDesc": "Enable publication of satellite info (ORB_ID(satellite_info)) if possible.", "name": "SEP_SAT_INFO", "rebootRequired": true, "shortDesc": "Enable sat info", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 2, "group": "Septentrio", "longDesc": "The stream the autopilot sets up on the receiver to output the logging data.\nSet this to another value if the default stream is already used for another purpose.", "max": 10, "min": 1, "name": "SEP_STREAM_LOG", "rebootRequired": true, "shortDesc": "Logging stream used during automatic configuration", "type": "Int32"}, {"category": "Standard", "default": 1, "group": "Septentrio", "longDesc": "The stream the autopilot sets up on the receiver to output the main data.\nSet this to another value if the default stream is already used for another purpose.", "max": 10, "min": 1, "name": "SEP_STREAM_MAIN", "rebootRequired": true, "shortDesc": "Main stream used during automatic configuration", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Septentrio", "longDesc": "Heading offset angle for dual antenna GPS setups that support heading estimation.\nSet this to 0 if the antennas are parallel to the forward-facing direction\nof the vehicle and the rover antenna is in front.\nThe offset angle increases clockwise.\nSet this to 90 if the rover antenna is placed on the\nright side of the vehicle and the moving base antenna is on the left side.", "max": 360.0, "min": -360.0, "name": "SEP_YAW_OFFS", "rebootRequired": true, "shortDesc": "Heading/Yaw offset for dual antenna GPS", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 4, "default": 100.0, "group": "Simulation In Hardware", "increment": 0.01, "max": 1000.0, "min": 0.0, "name": "SIH_DISTSNSR_MAX", "shortDesc": "distance sensor maximum range", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 4, "default": 0.0, "group": "Simulation In Hardware", "increment": 0.01, "max": 10.0, "min": 0.0, "name": "SIH_DISTSNSR_MIN", "shortDesc": "distance sensor minimum range", "type": "Float", "units": "m"}, {"category": "Standard", "default": -1.0, "group": "Simulation In Hardware", "longDesc": "Absolute value superior to 10000 will disable distance sensor", "name": "SIH_DISTSNSR_OVR", "shortDesc": "if >= 0 the distance sensor measures will be overridden by this value", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.025, "group": "Simulation In Hardware", "increment": 0.005, "longDesc": "The inertia is a 3 by 3 symmetric matrix.\nIt represents the difficulty of the vehicle to modify its angular rate.", "min": 0.0, "name": "SIH_IXX", "shortDesc": "Vehicle inertia about X axis", "type": "Float", "units": "kg m^2"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Simulation In Hardware", "increment": 0.005, "longDesc": "The inertia is a 3 by 3 symmetric matrix.\nThis value can be set to 0 for a quad symmetric about its center of mass.", "name": "SIH_IXY", "shortDesc": "Vehicle cross term inertia xy", "type": "Float", "units": "kg m^2"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Simulation In Hardware", "increment": 0.005, "longDesc": "The inertia is a 3 by 3 symmetric matrix.\nThis value can be set to 0 for a quad symmetric about its center of mass.", "name": "SIH_IXZ", "shortDesc": "Vehicle cross term inertia xz", "type": "Float", "units": "kg m^2"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.025, "group": "Simulation In Hardware", "increment": 0.005, "longDesc": "The inertia is a 3 by 3 symmetric matrix.\nIt represents the difficulty of the vehicle to modify its angular rate.", "min": 0.0, "name": "SIH_IYY", "shortDesc": "Vehicle inertia about Y axis", "type": "Float", "units": "kg m^2"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Simulation In Hardware", "increment": 0.005, "longDesc": "The inertia is a 3 by 3 symmetric matrix.\nThis value can be set to 0 for a quad symmetric about its center of mass.", "name": "SIH_IYZ", "shortDesc": "Vehicle cross term inertia yz", "type": "Float", "units": "kg m^2"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.03, "group": "Simulation In Hardware", "increment": 0.005, "longDesc": "The inertia is a 3 by 3 symmetric matrix.\nIt represents the difficulty of the vehicle to modify its angular rate.", "min": 0.0, "name": "SIH_IZZ", "shortDesc": "Vehicle inertia about Z axis", "type": "Float", "units": "kg m^2"}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "Simulation In Hardware", "increment": 0.05, "longDesc": "Physical coefficient representing the friction with air particules.\nThe greater this value, the slower the quad will move.\nDrag force function of velocity: D=-KDV*V.\nThe maximum freefall velocity can be computed as V=10*MASS/KDV [m/s]", "min": 0.0, "name": "SIH_KDV", "shortDesc": "First order drag coefficient", "type": "Float", "units": "N/(m/s)"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.025, "group": "Simulation In Hardware", "increment": 0.005, "longDesc": "Physical coefficient representing the friction with air particules during rotations.\nThe greater this value, the slower the quad will rotate.\nAerodynamic moment function of body rate: Ma=-KDW*W_B.\nThis value can be set to 0 if unknown.", "min": 0.0, "name": "SIH_KDW", "shortDesc": "First order angular damper coefficient", "type": "Float", "units": "Nm/(rad/s)"}, {"category": "Standard", "decimalPlaces": 2, "default": 489.4, "group": "Simulation In Hardware", "increment": 0.01, "longDesc": "This value represents the Above Mean Sea Level (AMSL) altitude where the simulation begins.\nIf using FlightGear as a visual animation,\nthis value can be tweaked such that the vehicle lies on the ground at takeoff.\nLAT0, LON0, H0, MU_X, MU_Y, and MU_Z should ideally be consistent among each others\nto represent a physical ground location on Earth.", "max": 8848.0, "min": -420.0, "name": "SIH_LOC_H0", "shortDesc": "Initial AMSL ground altitude", "type": "Float", "units": "m"}, {"category": "Standard", "default": 47.397742, "group": "Simulation In Hardware", "longDesc": "This value represents the North-South location on Earth where the simulation begins.\nLAT0, LON0, H0, MU_X, MU_Y, and MU_Z should ideally be consistent among each others\nto represent a physical ground location on Earth.", "max": 90.0, "min": -90.0, "name": "SIH_LOC_LAT0", "shortDesc": "Initial geodetic latitude", "type": "Float", "units": "deg"}, {"category": "Standard", "default": 8.545594, "group": "Simulation In Hardware", "longDesc": "This value represents the East-West location on Earth where the simulation begins.\nLAT0, LON0, H0, MU_X, MU_Y, and MU_Z should ideally be consistent among each others\nto represent a physical ground location on Earth.", "max": 180.0, "min": -180.0, "name": "SIH_LOC_LON0", "shortDesc": "Initial geodetic longitude", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.2, "group": "Simulation In Hardware", "increment": 0.05, "longDesc": "This is the arm length generating the pitching moment\nThis value can be measured with a ruler.\nThis corresponds to half the distance between the front and rear motors.", "min": 0.0, "name": "SIH_L_PITCH", "shortDesc": "Pitch arm length", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.2, "group": "Simulation In Hardware", "increment": 0.05, "longDesc": "This is the arm length generating the rolling moment\nThis value can be measured with a ruler.\nThis corresponds to half the distance between the left and right motors.", "min": 0.0, "name": "SIH_L_ROLL", "shortDesc": "Roll arm length", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "Simulation In Hardware", "increment": 0.1, "longDesc": "This value can be measured by weighting the quad on a scale.", "min": 0.0, "name": "SIH_MASS", "shortDesc": "Vehicle mass", "type": "Float", "units": "kg"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.1, "group": "Simulation In Hardware", "increment": 0.05, "longDesc": "This is the maximum torque delivered by one propeller\nwhen the motor is running at full speed.\nThis value is usually about few percent of the maximum thrust force.", "min": 0.0, "name": "SIH_Q_MAX", "shortDesc": "Max propeller torque", "type": "Float", "units": "Nm"}, {"category": "Standard", "decimalPlaces": 2, "default": 5.0, "group": "Simulation In Hardware", "increment": 0.5, "longDesc": "This is the maximum force delivered by one propeller\nwhen the motor is running at full speed.\nThis value is usually about 5 times the mass of the quadrotor.", "min": 0.0, "name": "SIH_T_MAX", "shortDesc": "Max propeller thrust force", "type": "Float", "units": "N"}, {"category": "Standard", "default": 0.05, "group": "Simulation In Hardware", "longDesc": "the time taken for the thruster to step from 0 to 100% should be about 4 times tau", "name": "SIH_T_TAU", "shortDesc": "thruster time constant tau", "type": "Float", "units": "s"}, {"category": "Standard", "default": 0, "group": "Simulation In Hardware", "name": "SIH_VEHICLE_TYPE", "rebootRequired": true, "shortDesc": "Vehicle type", "type": "Int32", "values": [{"description": "Quadcopter", "value": 0}, {"description": "Fixed-Wing", "value": 1}, {"description": "Tailsitter", "value": 2}, {"description": "Standard VTOL", "value": 3}, {"description": "Hexacopter", "value": 4}, {"description": "Rover Ackermann", "value": 5}]}, {"bitmask": [{"description": "Stuck", "index": 0}, {"description": "Drift", "index": 1}], "category": "Standard", "default": 0, "group": "Simulator", "longDesc": "Stuck: freeze the measurement to the current location\nDrift: add a linearly growing bias to the sensor data", "max": 3, "min": 0, "name": "SIM_AGP_FAIL", "shortDesc": "AGP failure mode", "type": "Int32"}, {"category": "Standard", "default": 0.0, "group": "Simulator", "name": "SIM_BARO_OFF_P", "shortDesc": "simulated barometer pressure offset", "type": "Float"}, {"category": "Standard", "default": 0.0, "group": "Simulator", "name": "SIM_BARO_OFF_T", "shortDesc": "simulated barometer temperature offset", "type": "Float", "units": "celcius"}, {"category": "Standard", "default": 10, "group": "Simulator", "max": 50, "min": 0, "name": "SIM_GPS_USED", "shortDesc": "simulated GPS number of satellites used", "type": "Int32"}, {"category": "Standard", "default": 0.0, "group": "Simulator", "name": "SIM_MAG_OFFSET_X", "shortDesc": "simulated magnetometer X offset", "type": "Float", "units": "gauss"}, {"category": "Standard", "default": 0.0, "group": "Simulator", "name": "SIM_MAG_OFFSET_Y", "shortDesc": "simulated magnetometer Y offset", "type": "Float", "units": "gauss"}, {"category": "Standard", "default": 0.0, "group": "Simulator", "name": "SIM_MAG_OFFSET_Z", "shortDesc": "simulated magnetometer Z offset", "type": "Float", "units": "gauss"}, {"category": "Standard", "default": 0, "group": "System", "longDesc": "Set to 1 to reset parameters on next system startup (setting defaults).\nPlatform-specific values are used if available.\nRC* parameters are preserved.", "name": "SYS_AUTOCONFIG", "shortDesc": "Automatically configure default values", "type": "Int32", "values": [{"description": "Keep parameters", "value": 0}, {"description": "Reset parameters to airframe defaults", "value": 1}]}, {"category": "Standard", "default": 0, "group": "System", "longDesc": "CHANGING THIS VALUE REQUIRES A RESTART. Defines the auto-start script used to bootstrap the system.", "max": 9999999, "min": 0, "name": "SYS_AUTOSTART", "rebootRequired": true, "shortDesc": "Auto-start script index", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "System", "longDesc": "If enabled, update the bootloader on the next boot.\nWARNING: do not cut the power during an update process, otherwise you will\nhave to recover using some alternative method (e.g. JTAG).\nInstructions:\n- Insert an SD card\n- Enable this parameter\n- Reboot the board (plug the power or send a reboot command)\n- Wait until the board comes back up (or at least 2 minutes)\n- If it does not come back, check the file bootlog.txt on the SD card", "name": "SYS_BL_UPDATE", "rebootRequired": true, "shortDesc": "Bootloader update", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 0, "group": "System", "longDesc": "0 : Set to 0 to do nothing\n1 : Set to 1 to start a calibration at next boot\nThis parameter is reset to zero when the temperature calibration starts.\ndefault (0, no calibration)", "max": 1, "min": 0, "name": "SYS_CAL_ACCEL", "shortDesc": "Enable auto start of accelerometer thermal calibration at the next power up", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "System", "longDesc": "0 : Set to 0 to do nothing\n1 : Set to 1 to start a calibration at next boot\nThis parameter is reset to zero when the temperature calibration starts.\ndefault (0, no calibration)", "max": 1, "min": 0, "name": "SYS_CAL_BARO", "shortDesc": "Enable auto start of barometer thermal calibration at the next power up", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "System", "longDesc": "0 : Set to 0 to do nothing\n1 : Set to 1 to start a calibration at next boot\nThis parameter is reset to zero when the temperature calibration starts.\ndefault (0, no calibration)", "max": 1, "min": 0, "name": "SYS_CAL_GYRO", "shortDesc": "Enable auto start of rate gyro thermal calibration at the next power up", "type": "Int32"}, {"category": "Standard", "default": 24, "group": "System", "longDesc": "A temperature increase greater than this value is required during calibration.\nCalibration will complete for each sensor when the temperature increase above the starting temperature exceeds the value set by SYS_CAL_TDEL.\nIf the temperature rise is insufficient, the calibration will continue indefinitely and the board will need to be repowered to exit.", "min": 10, "name": "SYS_CAL_TDEL", "shortDesc": "Required temperature rise during thermal calibration", "type": "Int32", "units": "celcius"}, {"category": "Standard", "default": 10, "group": "System", "longDesc": "Temperature calibration will not start if the temperature of any sensor is higher than the value set by SYS_CAL_TMAX.", "name": "SYS_CAL_TMAX", "shortDesc": "Maximum starting temperature for thermal calibration", "type": "Int32", "units": "celcius"}, {"category": "Standard", "default": 5, "group": "System", "longDesc": "Temperature calibration for each sensor will ignore data if the temperature is lower than the value set by SYS_CAL_TMIN.", "name": "SYS_CAL_TMIN", "shortDesc": "Minimum starting temperature for thermal calibration", "type": "Int32", "units": "celcius"}, {"category": "Standard", "default": 0, "group": "System", "longDesc": "If the board supports persistent storage (i.e., the KConfig variable DATAMAN_PERSISTENT_STORAGE is set),\nthe 'Default storage' backend uses a file on persistent storage. If not supported, this backend uses\nnon-persistent storage in RAM.", "name": "SYS_DM_BACKEND", "rebootRequired": true, "shortDesc": "Dataman storage backend", "type": "Int32", "values": [{"description": "Dataman disabled", "value": -1}, {"description": "Default storage", "value": 0}, {"description": "RAM storage", "value": 1}]}, {"category": "Standard", "default": 0, "group": "System", "longDesc": "If enabled, future sensor calibrations will be stored to /fs/mtd_caldata.\nNote: this is only supported on boards with a separate calibration storage\n/fs/mtd_caldata.", "name": "SYS_FAC_CAL_MODE", "shortDesc": "Enable factory calibration mode", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "All sensors", "value": 1}, {"description": "All sensors except mag", "value": 2}]}, {"category": "Standard", "default": 0, "group": "System", "longDesc": "If enabled allows MAVLink INJECT_FAILURE commands.\nWARNING: the failures can easily cause crashes and are to be used with caution!", "name": "SYS_FAILURE_EN", "shortDesc": "Enable failure injection", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 1, "group": "System", "longDesc": "Disable this if the board has no barometer, such as some of the Omnibus\nF4 SD variants.\nIf disabled, the preflight checks will not check for the presence of a\nbarometer.", "name": "SYS_HAS_BARO", "rebootRequired": true, "shortDesc": "Control if the vehicle has a barometer", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 1, "group": "System", "longDesc": "Disable this if the system has no GPS.\nIf disabled, the sensors hub will not process sensor_gps,\nand GPS will not be available for the rest of the system.", "name": "SYS_HAS_GPS", "rebootRequired": true, "shortDesc": "Control if the vehicle has a GPS", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 1, "group": "System", "longDesc": "0: System has no magnetometer, preflight checks should pass without one.\n1-N: Require the presence of N magnetometer sensors for check to pass.", "name": "SYS_HAS_MAG", "rebootRequired": true, "shortDesc": "Control if and how many magnetometers are expected", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "System", "longDesc": "Set this to 0 if the board has no airspeed sensor.\nIf set to 0, the preflight checks will not check for the presence of an\nairspeed sensor.", "max": 1, "min": 0, "name": "SYS_HAS_NUM_ASPD", "shortDesc": "Control if the vehicle has an airspeed sensor", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "System", "longDesc": "The preflight check will fail if fewer than this number of distance sensors with valid data is present.\nDisable the check with 0.", "max": 4, "min": 0, "name": "SYS_HAS_NUM_DIST", "shortDesc": "Number of distance sensors to check being available", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "System", "longDesc": "The preflight check will fail if fewer than this number of optical flow sensors with valid data are present.", "max": 1, "min": 0, "name": "SYS_HAS_NUM_OF", "shortDesc": "Number of optical flow sensors required to be available", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "System", "longDesc": "While enabled the system will boot in Hardware-In-The-Loop (HITL)\nor Simulation-In-Hardware (SIH) mode and not enable all sensors and checks.\nWhen disabled the same vehicle can be flown normally.\nSet to 'external HITL', if the system should perform as if it were a real\nvehicle (the only difference to a real system is then only the parameter\nvalue, which can be used for log analysis).", "name": "SYS_HITL", "rebootRequired": true, "shortDesc": "Enable HITL/SIH mode on next boot", "type": "Int32", "values": [{"description": "external HITL", "value": -1}, {"description": "HITL and SIH disabled", "value": 0}, {"description": "HITL enabled", "value": 1}, {"description": "SIH enabled", "value": 2}]}, {"category": "Standard", "default": 1, "group": "System", "longDesc": "This is used internally only: an airframe configuration might set an expected\nparameter version value via PARAM_DEFAULTS_VER. This is checked on bootup\nagainst SYS_PARAM_VER, and if they do not match, parameters are reset and\nreloaded from the airframe configuration.", "min": 0, "name": "SYS_PARAM_VER", "shortDesc": "Parameter version", "type": "Int32"}, {"category": "Standard", "default": 1.0, "group": "System", "longDesc": "Set to 0 to disable, 1 for maximum brightness", "name": "SYS_RGB_MAXBRT", "shortDesc": "RGB Led brightness limit", "type": "Float", "units": "%"}, {"category": "Standard", "default": 1, "group": "System", "name": "SYS_STCK_EN", "shortDesc": "Enable stack checking", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 2, "group": "Testing", "name": "TEST_1", "shortDesc": "TEST_1", "type": "Int32"}, {"category": "Standard", "default": 4, "group": "Testing", "name": "TEST_2", "shortDesc": "TEST_2", "type": "Int32"}, {"category": "Standard", "default": 5.0, "group": "Testing", "name": "TEST_3", "shortDesc": "TEST_3", "type": "Float"}, {"category": "Standard", "default": 0.01, "group": "Testing", "name": "TEST_D", "shortDesc": "TEST_D", "type": "Float"}, {"category": "Standard", "default": 2.0, "group": "Testing", "name": "TEST_DEV", "shortDesc": "TEST_DEV", "type": "Float"}, {"category": "Standard", "default": 10.0, "group": "Testing", "name": "TEST_D_LP", "shortDesc": "TEST_D_LP", "type": "Float"}, {"category": "Standard", "default": 10.0, "group": "Testing", "name": "TEST_HP", "shortDesc": "TEST_HP", "type": "Float"}, {"category": "Standard", "default": 0.1, "group": "Testing", "name": "TEST_I", "shortDesc": "TEST_I", "type": "Float"}, {"category": "Standard", "default": 1.0, "group": "Testing", "name": "TEST_I_MAX", "shortDesc": "TEST_I_MAX", "type": "Float"}, {"category": "Standard", "default": 10.0, "group": "Testing", "name": "TEST_LP", "shortDesc": "TEST_LP", "type": "Float"}, {"category": "Standard", "default": 1.0, "group": "Testing", "name": "TEST_MAX", "shortDesc": "TEST_MAX", "type": "Float"}, {"category": "Standard", "default": 1.0, "group": "Testing", "name": "TEST_MEAN", "shortDesc": "TEST_MEAN", "type": "Float"}, {"category": "Standard", "default": -1.0, "group": "Testing", "name": "TEST_MIN", "shortDesc": "TEST_MIN", "type": "Float"}, {"category": "Standard", "default": 0.2, "group": "Testing", "name": "TEST_P", "shortDesc": "TEST_P", "type": "Float"}, {"category": "Standard", "default": 12345678, "group": "Testing", "name": "TEST_PARAMS", "shortDesc": "TEST_PARAMS", "type": "Int32"}, {"category": "Standard", "default": 16, "group": "Testing", "name": "TEST_RC2_X", "shortDesc": "TEST_RC2_X", "type": "Int32"}, {"category": "Standard", "default": 8, "group": "Testing", "name": "TEST_RC_X", "shortDesc": "TEST_RC_X", "type": "Int32"}, {"category": "Standard", "default": 0.5, "group": "Testing", "name": "TEST_TRIM", "shortDesc": "TEST_TRIM", "type": "Float"}, {"category": "System", "default": 0, "group": "Thermal Compensation", "name": "TC_A0_ID", "shortDesc": "ID of Accelerometer that the calibration is for", "type": "Int32"}, {"category": "System", "default": 100.0, "group": "Thermal Compensation", "name": "TC_A0_TMAX", "shortDesc": "Accelerometer calibration maximum temperature", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A0_TMIN", "shortDesc": "Accelerometer calibration minimum temperature", "type": "Float"}, {"category": "System", "default": 25.0, "group": "Thermal Compensation", "name": "TC_A0_TREF", "shortDesc": "Accelerometer calibration reference temperature", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A0_X0_0", "shortDesc": "Accelerometer offset temperature ^0 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A0_X0_1", "shortDesc": "Accelerometer offset temperature ^0 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A0_X0_2", "shortDesc": "Accelerometer offset temperature ^0 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A0_X1_0", "shortDesc": "Accelerometer offset temperature ^1 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A0_X1_1", "shortDesc": "Accelerometer offset temperature ^1 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A0_X1_2", "shortDesc": "Accelerometer offset temperature ^1 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A0_X2_0", "shortDesc": "Accelerometer offset temperature ^2 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A0_X2_1", "shortDesc": "Accelerometer offset temperature ^2 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A0_X2_2", "shortDesc": "Accelerometer offset temperature ^2 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A0_X3_0", "shortDesc": "Accelerometer offset temperature ^3 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A0_X3_1", "shortDesc": "Accelerometer offset temperature ^3 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A0_X3_2", "shortDesc": "Accelerometer offset temperature ^3 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0, "group": "Thermal Compensation", "name": "TC_A1_ID", "shortDesc": "ID of Accelerometer that the calibration is for", "type": "Int32"}, {"category": "System", "default": 100.0, "group": "Thermal Compensation", "name": "TC_A1_TMAX", "shortDesc": "Accelerometer calibration maximum temperature", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A1_TMIN", "shortDesc": "Accelerometer calibration minimum temperature", "type": "Float"}, {"category": "System", "default": 25.0, "group": "Thermal Compensation", "name": "TC_A1_TREF", "shortDesc": "Accelerometer calibration reference temperature", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A1_X0_0", "shortDesc": "Accelerometer offset temperature ^0 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A1_X0_1", "shortDesc": "Accelerometer offset temperature ^0 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A1_X0_2", "shortDesc": "Accelerometer offset temperature ^0 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A1_X1_0", "shortDesc": "Accelerometer offset temperature ^1 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A1_X1_1", "shortDesc": "Accelerometer offset temperature ^1 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A1_X1_2", "shortDesc": "Accelerometer offset temperature ^1 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A1_X2_0", "shortDesc": "Accelerometer offset temperature ^2 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A1_X2_1", "shortDesc": "Accelerometer offset temperature ^2 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A1_X2_2", "shortDesc": "Accelerometer offset temperature ^2 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A1_X3_0", "shortDesc": "Accelerometer offset temperature ^3 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A1_X3_1", "shortDesc": "Accelerometer offset temperature ^3 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A1_X3_2", "shortDesc": "Accelerometer offset temperature ^3 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0, "group": "Thermal Compensation", "name": "TC_A2_ID", "shortDesc": "ID of Accelerometer that the calibration is for", "type": "Int32"}, {"category": "System", "default": 100.0, "group": "Thermal Compensation", "name": "TC_A2_TMAX", "shortDesc": "Accelerometer calibration maximum temperature", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A2_TMIN", "shortDesc": "Accelerometer calibration minimum temperature", "type": "Float"}, {"category": "System", "default": 25.0, "group": "Thermal Compensation", "name": "TC_A2_TREF", "shortDesc": "Accelerometer calibration reference temperature", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A2_X0_0", "shortDesc": "Accelerometer offset temperature ^0 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A2_X0_1", "shortDesc": "Accelerometer offset temperature ^0 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A2_X0_2", "shortDesc": "Accelerometer offset temperature ^0 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A2_X1_0", "shortDesc": "Accelerometer offset temperature ^1 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A2_X1_1", "shortDesc": "Accelerometer offset temperature ^1 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A2_X1_2", "shortDesc": "Accelerometer offset temperature ^1 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A2_X2_0", "shortDesc": "Accelerometer offset temperature ^2 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A2_X2_1", "shortDesc": "Accelerometer offset temperature ^2 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A2_X2_2", "shortDesc": "Accelerometer offset temperature ^2 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A2_X3_0", "shortDesc": "Accelerometer offset temperature ^3 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A2_X3_1", "shortDesc": "Accelerometer offset temperature ^3 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A2_X3_2", "shortDesc": "Accelerometer offset temperature ^3 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0, "group": "Thermal Compensation", "name": "TC_A3_ID", "shortDesc": "ID of Accelerometer that the calibration is for", "type": "Int32"}, {"category": "System", "default": 100.0, "group": "Thermal Compensation", "name": "TC_A3_TMAX", "shortDesc": "Accelerometer calibration maximum temperature", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A3_TMIN", "shortDesc": "Accelerometer calibration minimum temperature", "type": "Float"}, {"category": "System", "default": 25.0, "group": "Thermal Compensation", "name": "TC_A3_TREF", "shortDesc": "Accelerometer calibration reference temperature", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A3_X0_0", "shortDesc": "Accelerometer offset temperature ^0 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A3_X0_1", "shortDesc": "Accelerometer offset temperature ^0 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A3_X0_2", "shortDesc": "Accelerometer offset temperature ^0 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A3_X1_0", "shortDesc": "Accelerometer offset temperature ^1 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A3_X1_1", "shortDesc": "Accelerometer offset temperature ^1 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A3_X1_2", "shortDesc": "Accelerometer offset temperature ^1 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A3_X2_0", "shortDesc": "Accelerometer offset temperature ^2 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A3_X2_1", "shortDesc": "Accelerometer offset temperature ^2 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A3_X2_2", "shortDesc": "Accelerometer offset temperature ^2 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A3_X3_0", "shortDesc": "Accelerometer offset temperature ^3 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A3_X3_1", "shortDesc": "Accelerometer offset temperature ^3 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A3_X3_2", "shortDesc": "Accelerometer offset temperature ^3 polynomial coefficient - Z axis", "type": "Float"}, {"category": "Standard", "default": 0, "group": "Thermal Compensation", "name": "TC_A_ENABLE", "rebootRequired": true, "shortDesc": "Thermal compensation for accelerometer sensors", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "System", "default": 0, "group": "Thermal Compensation", "name": "TC_B0_ID", "shortDesc": "ID of Barometer that the calibration is for", "type": "Int32"}, {"category": "System", "default": 75.0, "group": "Thermal Compensation", "name": "TC_B0_TMAX", "shortDesc": "Barometer calibration maximum temperature", "type": "Float"}, {"category": "System", "default": 5.0, "group": "Thermal Compensation", "name": "TC_B0_TMIN", "shortDesc": "Barometer calibration minimum temperature", "type": "Float"}, {"category": "System", "default": 40.0, "group": "Thermal Compensation", "name": "TC_B0_TREF", "shortDesc": "Barometer calibration reference temperature", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_B0_X0", "shortDesc": "Barometer offset temperature ^0 polynomial coefficient", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_B0_X1", "shortDesc": "Barometer offset temperature ^1 polynomial coefficients", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_B0_X2", "shortDesc": "Barometer offset temperature ^2 polynomial coefficient", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_B0_X3", "shortDesc": "Barometer offset temperature ^3 polynomial coefficient", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_B0_X4", "shortDesc": "Barometer offset temperature ^4 polynomial coefficient", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_B0_X5", "shortDesc": "Barometer offset temperature ^5 polynomial coefficient", "type": "Float"}, {"category": "System", "default": 0, "group": "Thermal Compensation", "name": "TC_B1_ID", "shortDesc": "ID of Barometer that the calibration is for", "type": "Int32"}, {"category": "System", "default": 75.0, "group": "Thermal Compensation", "name": "TC_B1_TMAX", "shortDesc": "Barometer calibration maximum temperature", "type": "Float"}, {"category": "System", "default": 5.0, "group": "Thermal Compensation", "name": "TC_B1_TMIN", "shortDesc": "Barometer calibration minimum temperature", "type": "Float"}, {"category": "System", "default": 40.0, "group": "Thermal Compensation", "name": "TC_B1_TREF", "shortDesc": "Barometer calibration reference temperature", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_B1_X0", "shortDesc": "Barometer offset temperature ^0 polynomial coefficient", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_B1_X1", "shortDesc": "Barometer offset temperature ^1 polynomial coefficients", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_B1_X2", "shortDesc": "Barometer offset temperature ^2 polynomial coefficient", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_B1_X3", "shortDesc": "Barometer offset temperature ^3 polynomial coefficient", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_B1_X4", "shortDesc": "Barometer offset temperature ^4 polynomial coefficient", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_B1_X5", "shortDesc": "Barometer offset temperature ^5 polynomial coefficient", "type": "Float"}, {"category": "System", "default": 0, "group": "Thermal Compensation", "name": "TC_B2_ID", "shortDesc": "ID of Barometer that the calibration is for", "type": "Int32"}, {"category": "System", "default": 75.0, "group": "Thermal Compensation", "name": "TC_B2_TMAX", "shortDesc": "Barometer calibration maximum temperature", "type": "Float"}, {"category": "System", "default": 5.0, "group": "Thermal Compensation", "name": "TC_B2_TMIN", "shortDesc": "Barometer calibration minimum temperature", "type": "Float"}, {"category": "System", "default": 40.0, "group": "Thermal Compensation", "name": "TC_B2_TREF", "shortDesc": "Barometer calibration reference temperature", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_B2_X0", "shortDesc": "Barometer offset temperature ^0 polynomial coefficient", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_B2_X1", "shortDesc": "Barometer offset temperature ^1 polynomial coefficients", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_B2_X2", "shortDesc": "Barometer offset temperature ^2 polynomial coefficient", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_B2_X3", "shortDesc": "Barometer offset temperature ^3 polynomial coefficient", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_B2_X4", "shortDesc": "Barometer offset temperature ^4 polynomial coefficient", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_B2_X5", "shortDesc": "Barometer offset temperature ^5 polynomial coefficient", "type": "Float"}, {"category": "System", "default": 0, "group": "Thermal Compensation", "name": "TC_B3_ID", "shortDesc": "ID of Barometer that the calibration is for", "type": "Int32"}, {"category": "System", "default": 75.0, "group": "Thermal Compensation", "name": "TC_B3_TMAX", "shortDesc": "Barometer calibration maximum temperature", "type": "Float"}, {"category": "System", "default": 5.0, "group": "Thermal Compensation", "name": "TC_B3_TMIN", "shortDesc": "Barometer calibration minimum temperature", "type": "Float"}, {"category": "System", "default": 40.0, "group": "Thermal Compensation", "name": "TC_B3_TREF", "shortDesc": "Barometer calibration reference temperature", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_B3_X0", "shortDesc": "Barometer offset temperature ^0 polynomial coefficient", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_B3_X1", "shortDesc": "Barometer offset temperature ^1 polynomial coefficients", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_B3_X2", "shortDesc": "Barometer offset temperature ^2 polynomial coefficient", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_B3_X3", "shortDesc": "Barometer offset temperature ^3 polynomial coefficient", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_B3_X4", "shortDesc": "Barometer offset temperature ^4 polynomial coefficient", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_B3_X5", "shortDesc": "Barometer offset temperature ^5 polynomial coefficient", "type": "Float"}, {"category": "Standard", "default": 0, "group": "Thermal Compensation", "name": "TC_B_ENABLE", "rebootRequired": true, "shortDesc": "Thermal compensation for barometric pressure sensors", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "System", "default": 0, "group": "Thermal Compensation", "name": "TC_G0_ID", "shortDesc": "ID of Gyro that the calibration is for", "type": "Int32"}, {"category": "System", "default": 100.0, "group": "Thermal Compensation", "name": "TC_G0_TMAX", "shortDesc": "Gyro calibration maximum temperature", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G0_TMIN", "shortDesc": "Gyro calibration minimum temperature", "type": "Float"}, {"category": "System", "default": 25.0, "group": "Thermal Compensation", "name": "TC_G0_TREF", "shortDesc": "Gyro calibration reference temperature", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G0_X0_0", "shortDesc": "Gyro rate offset temperature ^0 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G0_X0_1", "shortDesc": "Gyro rate offset temperature ^0 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G0_X0_2", "shortDesc": "Gyro rate offset temperature ^0 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G0_X1_0", "shortDesc": "Gyro rate offset temperature ^1 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G0_X1_1", "shortDesc": "Gyro rate offset temperature ^1 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G0_X1_2", "shortDesc": "Gyro rate offset temperature ^1 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G0_X2_0", "shortDesc": "Gyro rate offset temperature ^2 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G0_X2_1", "shortDesc": "Gyro rate offset temperature ^2 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G0_X2_2", "shortDesc": "Gyro rate offset temperature ^2 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G0_X3_0", "shortDesc": "Gyro rate offset temperature ^3 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G0_X3_1", "shortDesc": "Gyro rate offset temperature ^3 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G0_X3_2", "shortDesc": "Gyro rate offset temperature ^3 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0, "group": "Thermal Compensation", "name": "TC_G1_ID", "shortDesc": "ID of Gyro that the calibration is for", "type": "Int32"}, {"category": "System", "default": 100.0, "group": "Thermal Compensation", "name": "TC_G1_TMAX", "shortDesc": "Gyro calibration maximum temperature", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G1_TMIN", "shortDesc": "Gyro calibration minimum temperature", "type": "Float"}, {"category": "System", "default": 25.0, "group": "Thermal Compensation", "name": "TC_G1_TREF", "shortDesc": "Gyro calibration reference temperature", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G1_X0_0", "shortDesc": "Gyro rate offset temperature ^0 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G1_X0_1", "shortDesc": "Gyro rate offset temperature ^0 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G1_X0_2", "shortDesc": "Gyro rate offset temperature ^0 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G1_X1_0", "shortDesc": "Gyro rate offset temperature ^1 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G1_X1_1", "shortDesc": "Gyro rate offset temperature ^1 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G1_X1_2", "shortDesc": "Gyro rate offset temperature ^1 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G1_X2_0", "shortDesc": "Gyro rate offset temperature ^2 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G1_X2_1", "shortDesc": "Gyro rate offset temperature ^2 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G1_X2_2", "shortDesc": "Gyro rate offset temperature ^2 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G1_X3_0", "shortDesc": "Gyro rate offset temperature ^3 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G1_X3_1", "shortDesc": "Gyro rate offset temperature ^3 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G1_X3_2", "shortDesc": "Gyro rate offset temperature ^3 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0, "group": "Thermal Compensation", "name": "TC_G2_ID", "shortDesc": "ID of Gyro that the calibration is for", "type": "Int32"}, {"category": "System", "default": 100.0, "group": "Thermal Compensation", "name": "TC_G2_TMAX", "shortDesc": "Gyro calibration maximum temperature", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G2_TMIN", "shortDesc": "Gyro calibration minimum temperature", "type": "Float"}, {"category": "System", "default": 25.0, "group": "Thermal Compensation", "name": "TC_G2_TREF", "shortDesc": "Gyro calibration reference temperature", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G2_X0_0", "shortDesc": "Gyro rate offset temperature ^0 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G2_X0_1", "shortDesc": "Gyro rate offset temperature ^0 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G2_X0_2", "shortDesc": "Gyro rate offset temperature ^0 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G2_X1_0", "shortDesc": "Gyro rate offset temperature ^1 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G2_X1_1", "shortDesc": "Gyro rate offset temperature ^1 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G2_X1_2", "shortDesc": "Gyro rate offset temperature ^1 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G2_X2_0", "shortDesc": "Gyro rate offset temperature ^2 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G2_X2_1", "shortDesc": "Gyro rate offset temperature ^2 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G2_X2_2", "shortDesc": "Gyro rate offset temperature ^2 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G2_X3_0", "shortDesc": "Gyro rate offset temperature ^3 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G2_X3_1", "shortDesc": "Gyro rate offset temperature ^3 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G2_X3_2", "shortDesc": "Gyro rate offset temperature ^3 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0, "group": "Thermal Compensation", "name": "TC_G3_ID", "shortDesc": "ID of Gyro that the calibration is for", "type": "Int32"}, {"category": "System", "default": 100.0, "group": "Thermal Compensation", "name": "TC_G3_TMAX", "shortDesc": "Gyro calibration maximum temperature", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G3_TMIN", "shortDesc": "Gyro calibration minimum temperature", "type": "Float"}, {"category": "System", "default": 25.0, "group": "Thermal Compensation", "name": "TC_G3_TREF", "shortDesc": "Gyro calibration reference temperature", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G3_X0_0", "shortDesc": "Gyro rate offset temperature ^0 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G3_X0_1", "shortDesc": "Gyro rate offset temperature ^0 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G3_X0_2", "shortDesc": "Gyro rate offset temperature ^0 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G3_X1_0", "shortDesc": "Gyro rate offset temperature ^1 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G3_X1_1", "shortDesc": "Gyro rate offset temperature ^1 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G3_X1_2", "shortDesc": "Gyro rate offset temperature ^1 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G3_X2_0", "shortDesc": "Gyro rate offset temperature ^2 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G3_X2_1", "shortDesc": "Gyro rate offset temperature ^2 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G3_X2_2", "shortDesc": "Gyro rate offset temperature ^2 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G3_X3_0", "shortDesc": "Gyro rate offset temperature ^3 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G3_X3_1", "shortDesc": "Gyro rate offset temperature ^3 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G3_X3_2", "shortDesc": "Gyro rate offset temperature ^3 polynomial coefficient - Z axis", "type": "Float"}, {"category": "Standard", "default": 0, "group": "Thermal Compensation", "name": "TC_G_ENABLE", "rebootRequired": true, "shortDesc": "Thermal compensation for rate gyro sensors", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "System", "default": 0, "group": "Thermal Compensation", "name": "TC_M0_ID", "shortDesc": "ID of Magnetometer that the calibration is for", "type": "Int32"}, {"category": "System", "default": 100.0, "group": "Thermal Compensation", "name": "TC_M0_TMAX", "shortDesc": "Magnetometer calibration maximum temperature", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M0_TMIN", "shortDesc": "Magnetometer calibration minimum temperature", "type": "Float"}, {"category": "System", "default": 25.0, "group": "Thermal Compensation", "name": "TC_M0_TREF", "shortDesc": "Magnetometer calibration reference temperature", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M0_X0_0", "shortDesc": "Magnetometer offset temperature ^0 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M0_X0_1", "shortDesc": "Magnetometer offset temperature ^0 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M0_X0_2", "shortDesc": "Magnetometer offset temperature ^0 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M0_X1_0", "shortDesc": "Magnetometer offset temperature ^1 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M0_X1_1", "shortDesc": "Magnetometer offset temperature ^1 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M0_X1_2", "shortDesc": "Magnetometer offset temperature ^1 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M0_X2_0", "shortDesc": "Magnetometer offset temperature ^2 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M0_X2_1", "shortDesc": "Magnetometer offset temperature ^2 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M0_X2_2", "shortDesc": "Magnetometer offset temperature ^2 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M0_X3_0", "shortDesc": "Magnetometer offset temperature ^3 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M0_X3_1", "shortDesc": "Magnetometer offset temperature ^3 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M0_X3_2", "shortDesc": "Magnetometer offset temperature ^3 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0, "group": "Thermal Compensation", "name": "TC_M1_ID", "shortDesc": "ID of Magnetometer that the calibration is for", "type": "Int32"}, {"category": "System", "default": 100.0, "group": "Thermal Compensation", "name": "TC_M1_TMAX", "shortDesc": "Magnetometer calibration maximum temperature", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M1_TMIN", "shortDesc": "Magnetometer calibration minimum temperature", "type": "Float"}, {"category": "System", "default": 25.0, "group": "Thermal Compensation", "name": "TC_M1_TREF", "shortDesc": "Magnetometer calibration reference temperature", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M1_X0_0", "shortDesc": "Magnetometer offset temperature ^0 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M1_X0_1", "shortDesc": "Magnetometer offset temperature ^0 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M1_X0_2", "shortDesc": "Magnetometer offset temperature ^0 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M1_X1_0", "shortDesc": "Magnetometer offset temperature ^1 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M1_X1_1", "shortDesc": "Magnetometer offset temperature ^1 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M1_X1_2", "shortDesc": "Magnetometer offset temperature ^1 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M1_X2_0", "shortDesc": "Magnetometer offset temperature ^2 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M1_X2_1", "shortDesc": "Magnetometer offset temperature ^2 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M1_X2_2", "shortDesc": "Magnetometer offset temperature ^2 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M1_X3_0", "shortDesc": "Magnetometer offset temperature ^3 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M1_X3_1", "shortDesc": "Magnetometer offset temperature ^3 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M1_X3_2", "shortDesc": "Magnetometer offset temperature ^3 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0, "group": "Thermal Compensation", "name": "TC_M2_ID", "shortDesc": "ID of Magnetometer that the calibration is for", "type": "Int32"}, {"category": "System", "default": 100.0, "group": "Thermal Compensation", "name": "TC_M2_TMAX", "shortDesc": "Magnetometer calibration maximum temperature", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M2_TMIN", "shortDesc": "Magnetometer calibration minimum temperature", "type": "Float"}, {"category": "System", "default": 25.0, "group": "Thermal Compensation", "name": "TC_M2_TREF", "shortDesc": "Magnetometer calibration reference temperature", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M2_X0_0", "shortDesc": "Magnetometer offset temperature ^0 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M2_X0_1", "shortDesc": "Magnetometer offset temperature ^0 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M2_X0_2", "shortDesc": "Magnetometer offset temperature ^0 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M2_X1_0", "shortDesc": "Magnetometer offset temperature ^1 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M2_X1_1", "shortDesc": "Magnetometer offset temperature ^1 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M2_X1_2", "shortDesc": "Magnetometer offset temperature ^1 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M2_X2_0", "shortDesc": "Magnetometer offset temperature ^2 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M2_X2_1", "shortDesc": "Magnetometer offset temperature ^2 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M2_X2_2", "shortDesc": "Magnetometer offset temperature ^2 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M2_X3_0", "shortDesc": "Magnetometer offset temperature ^3 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M2_X3_1", "shortDesc": "Magnetometer offset temperature ^3 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M2_X3_2", "shortDesc": "Magnetometer offset temperature ^3 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0, "group": "Thermal Compensation", "name": "TC_M3_ID", "shortDesc": "ID of Magnetometer that the calibration is for", "type": "Int32"}, {"category": "System", "default": 100.0, "group": "Thermal Compensation", "name": "TC_M3_TMAX", "shortDesc": "Magnetometer calibration maximum temperature", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M3_TMIN", "shortDesc": "Magnetometer calibration minimum temperature", "type": "Float"}, {"category": "System", "default": 25.0, "group": "Thermal Compensation", "name": "TC_M3_TREF", "shortDesc": "Magnetometer calibration reference temperature", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M3_X0_0", "shortDesc": "Magnetometer offset temperature ^0 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M3_X0_1", "shortDesc": "Magnetometer offset temperature ^0 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M3_X0_2", "shortDesc": "Magnetometer offset temperature ^0 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M3_X1_0", "shortDesc": "Magnetometer offset temperature ^1 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M3_X1_1", "shortDesc": "Magnetometer offset temperature ^1 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M3_X1_2", "shortDesc": "Magnetometer offset temperature ^1 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M3_X2_0", "shortDesc": "Magnetometer offset temperature ^2 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M3_X2_1", "shortDesc": "Magnetometer offset temperature ^2 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M3_X2_2", "shortDesc": "Magnetometer offset temperature ^2 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M3_X3_0", "shortDesc": "Magnetometer offset temperature ^3 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M3_X3_1", "shortDesc": "Magnetometer offset temperature ^3 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M3_X3_2", "shortDesc": "Magnetometer offset temperature ^3 polynomial coefficient - Z axis", "type": "Float"}, {"category": "Standard", "default": 0, "group": "Thermal Compensation", "name": "TC_M_ENABLE", "rebootRequired": true, "shortDesc": "Thermal compensation for magnetometer sensors", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 12, "group": "UUV Attitude Control", "max": 16, "min": 0, "name": "UUV_HGT_B_DOWN", "shortDesc": "Height rc-button down", "type": "Int32"}, {"category": "Standard", "default": 11, "group": "UUV Attitude Control", "max": 16, "min": 0, "name": "UUV_HGT_B_UP", "shortDesc": "Height rc-button up", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "UUV Attitude Control", "name": "UUV_HGT_D", "shortDesc": "Height differential gain", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.2, "group": "UUV Attitude Control", "name": "UUV_HGT_I", "shortDesc": "Height integrational gain", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "UUV Attitude Control", "name": "UUV_HGT_I_SPD", "shortDesc": "sum speed of error for integrational gain", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.3, "group": "UUV Attitude Control", "name": "UUV_HGT_MAX_DIFF", "shortDesc": "maximum Height distance controlled by manual input. Diff between actual and desired Height cant be higher than that", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "UUV Attitude Control", "name": "UUV_HGT_P", "shortDesc": "Height proportional gain", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "UUV Attitude Control", "name": "UUV_HGT_STR", "shortDesc": "Height change strength from manual input", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.05, "group": "UUV Attitude Control", "min": 0.0, "name": "UUV_MGM_PITCH", "shortDesc": "Pitch gain for manual inputs in manual control mode", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.05, "group": "UUV Attitude Control", "min": 0.0, "name": "UUV_MGM_ROLL", "shortDesc": "Roll gain for manual inputs in manual control mode", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.1, "group": "UUV Attitude Control", "min": 0.0, "name": "UUV_MGM_THRTL", "shortDesc": "Throttle gain for manual inputs in manual control mode", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.05, "group": "UUV Attitude Control", "min": 0.0, "name": "UUV_MGM_YAW", "shortDesc": "Yaw gain for manual inputs in manual control mode", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 2.0, "group": "UUV Attitude Control", "name": "UUV_PITCH_D", "shortDesc": "Pitch differential gain", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 4.0, "group": "UUV Attitude Control", "name": "UUV_PITCH_P", "shortDesc": "Pitch proportional gain", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 100.0, "group": "UUV Attitude Control", "min": 0.0, "name": "UUV_RGM_PITCH", "shortDesc": "Pitch gain for manual inputs in rate control mode", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 100.0, "group": "UUV Attitude Control", "min": 0.0, "name": "UUV_RGM_ROLL", "shortDesc": "Roll gain for manual inputs in rate control mode", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 10.0, "group": "UUV Attitude Control", "min": 0.0, "name": "UUV_RGM_THRTL", "shortDesc": "Throttle gain for manual inputs in rate control mode", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 100.0, "group": "UUV Attitude Control", "min": 0.0, "name": "UUV_RGM_YAW", "shortDesc": "Yaw gain for manual inputs in rate control mode", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 1.5, "group": "UUV Attitude Control", "name": "UUV_ROLL_D", "shortDesc": "Roll differential gain", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 4.0, "group": "UUV Attitude Control", "name": "UUV_ROLL_P", "shortDesc": "Roll proportional gain", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.5, "group": "UUV Attitude Control", "min": 0.0, "name": "UUV_SGM_PITCH", "shortDesc": "Pitch gain for manual inputs in attitude control mode", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.5, "group": "UUV Attitude Control", "min": 0.0, "name": "UUV_SGM_ROLL", "shortDesc": "Roll gain for manual inputs in attitude control mode", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.1, "group": "UUV Attitude Control", "min": 0.0, "name": "UUV_SGM_THRTL", "shortDesc": "Throttle gain for manual inputs in attitude control mode", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.5, "group": "UUV Attitude Control", "min": 0.0, "name": "UUV_SGM_YAW", "shortDesc": "Yaw gain for manual inputs in attitude control mode", "type": "Float"}, {"category": "Standard", "default": 2.0, "group": "UUV Attitude Control", "name": "UUV_SP_MAX_AGE", "shortDesc": "Maximum time (in seconds) before resetting setpoint", "type": "Float"}, {"category": "Standard", "default": 0, "group": "UUV Attitude Control", "max": 1, "min": 0, "name": "UUV_STICK_MODE", "shortDesc": "Stick mode selector (0=Heave/sway control, roll/pitch leveled; 1=Pitch/roll control)", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.1, "group": "UUV Attitude Control", "max": 1.0, "min": 0.0, "name": "UUV_THRUST_SAT", "shortDesc": "UUV Thrust setpoint Saturation", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.3, "group": "UUV Attitude Control", "max": 1.0, "min": 0.0, "name": "UUV_TORQUE_SAT", "shortDesc": "UUV Torque setpoint Saturation", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 2.0, "group": "UUV Attitude Control", "name": "UUV_YAW_D", "shortDesc": "Yaw differential gain", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 4.0, "group": "UUV Attitude Control", "name": "UUV_YAW_P", "shortDesc": "Yawh proportional gain", "type": "Float"}, {"category": "Standard", "default": 0.2, "group": "UUV Position Control", "name": "UUV_GAIN_X_D", "shortDesc": "Gain of D controller X", "type": "Float"}, {"category": "Standard", "default": 1.0, "group": "UUV Position Control", "name": "UUV_GAIN_X_P", "shortDesc": "Gain of P controller X", "type": "Float"}, {"category": "Standard", "default": 0.2, "group": "UUV Position Control", "name": "UUV_GAIN_Y_D", "shortDesc": "Gain of D controller Y", "type": "Float"}, {"category": "Standard", "default": 1.0, "group": "UUV Position Control", "name": "UUV_GAIN_Y_P", "shortDesc": "Gain of P controller Y", "type": "Float"}, {"category": "Standard", "default": 0.2, "group": "UUV Position Control", "name": "UUV_GAIN_Z_D", "shortDesc": "Gain of D controller Z", "type": "Float"}, {"category": "Standard", "default": 1.0, "group": "UUV Position Control", "name": "UUV_GAIN_Z_P", "shortDesc": "Gain of P controller Z", "type": "Float"}, {"category": "Standard", "default": 0.5, "group": "UUV Position Control", "name": "UUV_PGM_VEL", "shortDesc": "Gain for position control velocity setpoint update", "type": "Float"}, {"category": "Standard", "default": 1, "group": "UUV Position Control", "name": "UUV_POS_MODE", "shortDesc": "Stabilization mode(1) or Position Control(0)", "type": "Int32", "values": [{"description": "Moves position setpoint in world frame", "value": 0}, {"description": "Moves position setpoint in body frame", "value": 1}]}, {"category": "Standard", "default": 0.1, "group": "UUV Position Control", "name": "UUV_POS_STICK_DB", "shortDesc": "Deadband for changing position setpoint", "type": "Float"}, {"category": "Standard", "default": 1, "group": "UUV Position Control", "name": "UUV_STAB_MODE", "shortDesc": "Stabilization mode(1) or Position Control(0)", "type": "Int32", "values": [{"description": "Tracks previous attitude setpoint", "value": 0}, {"description": "Tracks horizontal attitude (allows yaw change)", "value": 1}]}, {"category": "Standard", "default": 2130706433, "group": "UXRCE-DDS Client", "longDesc": "If ethernet is enabled and is the selected configuration for uXRCE-DDS,\nthe selected Agent IP address will be set and used.\nDecimal dot notation is not supported. IP address must be provided\nin int32 format. For example, 192.168.1.2 is mapped to -1062731518;\n127.0.0.1 is mapped to 2130706433.", "name": "UXRCE_DDS_AG_IP", "rebootRequired": true, "shortDesc": "uXRCE-DDS Agent IP address", "type": "Int32"}, {"category": "System", "default": 0, "group": "UXRCE-DDS Client", "longDesc": "uXRCE-DDS domain ID", "name": "UXRCE_DDS_DOM_ID", "rebootRequired": true, "shortDesc": "uXRCE-DDS domain ID", "type": "Int32"}, {"category": "System", "default": 0, "group": "UXRCE-DDS Client", "longDesc": "This is used to enable flow control for the serial uXRCE instance.\nUsed for reliable high bandwidth communication.", "name": "UXRCE_DDS_FLCTRL", "rebootRequired": true, "shortDesc": "Enable serial flow control for UXRCE interface", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "System", "default": 1, "group": "UXRCE-DDS Client", "longDesc": "uXRCE-DDS key, must be different from zero.\nIn a single agent - multi client configuration, each client\nmust have a unique session key.", "name": "UXRCE_DDS_KEY", "rebootRequired": true, "shortDesc": "uXRCE-DDS session key", "type": "Int32"}, {"category": "System", "default": -1, "group": "UXRCE-DDS Client", "longDesc": "Defines an index-based namespace for DDS messages, e.g, uav_0, uav_1, up to uav_9999\nA value less than zero leaves the namespace empty", "max": 9999, "min": -1, "name": "UXRCE_DDS_NS_IDX", "rebootRequired": true, "shortDesc": "Define an index-based message namespace", "type": "Int32"}, {"category": "Standard", "default": 8888, "group": "UXRCE-DDS Client", "longDesc": "If ethernet is enabled and is the selected configuration for uXRCE-DDS,\nthe selected UDP port will be set and used.", "max": 65535, "min": 0, "name": "UXRCE_DDS_PRT", "rebootRequired": true, "shortDesc": "uXRCE-DDS UDP port", "type": "Int32"}, {"category": "System", "default": 0, "group": "UXRCE-DDS Client", "longDesc": "Set the participant configuration on the Agent's system.\n0: Use the default configuration.\n1: Restrict messages to localhost\n(use in combination with ROS_LOCALHOST_ONLY=1).\n2: Use a custom participant with the profile name \"px4_participant\".", "max": 2, "min": 0, "name": "UXRCE_DDS_PTCFG", "rebootRequired": true, "shortDesc": "uXRCE-DDS participant configuration", "type": "Int32", "values": [{"description": "Default", "value": 0}, {"description": "Localhost-only", "value": 1}, {"description": "Custom participant", "value": 2}]}, {"category": "System", "default": -1, "group": "UXRCE-DDS Client", "longDesc": "Specifies after how many seconds without receiving data the DDS connection is reestablished.\nA value less than one disables the RX rate timeout.", "name": "UXRCE_DDS_RX_TO", "rebootRequired": true, "shortDesc": "RX rate timeout configuration", "type": "Int32", "units": "s"}, {"category": "System", "default": 0, "group": "UXRCE-DDS Client", "longDesc": "When enabled along with UXRCE_DDS_SYNCT, uxrce_dds_client will set the system clock using the agents UTC timestamp.", "name": "UXRCE_DDS_SYNCC", "rebootRequired": true, "shortDesc": "Enable uXRCE-DDS system clock synchronization", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "System", "default": 1, "group": "UXRCE-DDS Client", "longDesc": "When enabled, uxrce_dds_client will synchronize the timestamps of the incoming and outgoing messages measuring the offset between the Agent OS time and the PX4 time.", "name": "UXRCE_DDS_SYNCT", "rebootRequired": true, "shortDesc": "Enable uXRCE-DDS timestamp synchronization", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "System", "default": 3, "group": "UXRCE-DDS Client", "longDesc": "Specifies after how many seconds without sending data the DDS connection is reestablished.\nA value less than one disables the TX rate timeout.", "name": "UXRCE_DDS_TX_TO", "rebootRequired": true, "shortDesc": "TX rate timeout configuration", "type": "Int32", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 8.0, "group": "VTOL Attitude Control", "increment": 1.0, "longDesc": "Airspeed at which we can start blending both fw and mc controls. Set to 0 to disable.", "max": 30.0, "min": 0.0, "name": "VT_ARSP_BLEND", "shortDesc": "Transition blending airspeed", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 10.0, "group": "VTOL Attitude Control", "increment": 1.0, "longDesc": "Airspeed at which we can switch to fw mode", "max": 30.0, "min": 0.0, "name": "VT_ARSP_TRANS", "shortDesc": "Transition airspeed", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 1.0, "group": "VTOL Attitude Control", "increment": 0.1, "longDesc": "Time in seconds it takes to tilt form VT_TILT_FW to VT_TILT_MC.", "max": 10.0, "min": 0.1, "name": "VT_BT_TILT_DUR", "shortDesc": "Duration motor tilt up in backtransition", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.1, "group": "VTOL Attitude Control", "increment": 0.05, "max": 0.3, "min": 0.0, "name": "VT_B_DEC_I", "shortDesc": "Backtransition deceleration setpoint to tilt I gain", "type": "Float", "units": "rad s/m"}, {"category": "Standard", "decimalPlaces": 2, "default": 2.0, "group": "VTOL Attitude Control", "increment": 0.1, "longDesc": "Used to calculate back transition distance in an auto mode.\nFor standard vtol and tiltrotors a controller is used to track this value during the transition.", "max": 10.0, "min": 0.5, "name": "VT_B_DEC_MSS", "shortDesc": "Approximate deceleration during back transition", "type": "Float", "units": "m/s^2"}, {"category": "Standard", "decimalPlaces": 2, "default": 10.0, "group": "VTOL Attitude Control", "increment": 1.0, "longDesc": "Transition is also declared over if the groundspeed drops below MPC_XY_CRUISE.", "max": 20.0, "min": 0.1, "name": "VT_B_TRANS_DUR", "shortDesc": "Maximum duration of a back transition", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 1, "default": 3.0, "group": "VTOL Attitude Control", "increment": 0.1, "longDesc": "This sets the duration during which the MC motors ramp up to the commanded thrust during the back transition stage.", "max": 20.0, "min": 0.0, "name": "VT_B_TRANS_RAMP", "shortDesc": "Back transition MC motor ramp up time", "type": "Float", "units": "s"}, {"category": "Standard", "default": 1, "group": "VTOL Attitude Control", "longDesc": "If set to 1 the control surfaces are locked at the disarmed value in multicopter mode.", "name": "VT_ELEV_MC_LOCK", "shortDesc": "Lock control surfaces in hover", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 0, "group": "VTOL Attitude Control", "longDesc": "Prevents downforce from pitching the body down when facing wind.\nUses puller/pusher (standard VTOL), or forward-tilt (tiltrotor VTOL) to accelerate forward instead.\nOnly active if demanded pitch is below VT_PITCH_MIN.\nUse VT_FWD_THRUST_SC to tune it.\nDescend mode is treated as Landing too.\nOnly active (if enabled) in height-rate controlled modes.", "name": "VT_FWD_THRUST_EN", "shortDesc": "Use fixed-wing actuation in hover to accelerate forward", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled (except LANDING)", "value": 1}, {"description": "Enabled if above MPC_LAND_ALT1", "value": 2}, {"description": "Enabled if above MPC_LAND_ALT2", "value": 3}, {"description": "Enabled constantly", "value": 4}, {"description": "Enabled if above MPC_LAND_ALT1 (except LANDING)", "value": 5}, {"description": "Enabled if above MPC_LAND_ALT2 (except LANDING)", "value": 6}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.7, "group": "VTOL Attitude Control", "increment": 0.01, "longDesc": "Scale applied to the demanded pitch (below VT_PITCH_MIN) to get the fixed-wing forward actuation in hover mode.\nEnabled via VT_FWD_THRUST_EN.", "max": 5.0, "min": 0.0, "name": "VT_FWD_THRUST_SC", "shortDesc": "Fixed-wing actuation thrust scale in hover", "type": "Float"}, {"bitmask": [{"description": "Yaw", "index": 0}, {"description": "Roll", "index": 1}, {"description": "Pitch", "index": 2}], "category": "Standard", "default": 0, "group": "VTOL Attitude Control", "longDesc": "Enable differential thrust seperately for roll, pitch, yaw in forward (fixed-wing) mode.\nThe effectiveness of differential thrust around the corresponding axis can be\ntuned by setting VT_FW_DIFTHR_S_R / VT_FW_DIFTHR_S_P / VT_FW_DIFTHR_S_Y.", "max": 7, "min": 0, "name": "VT_FW_DIFTHR_EN", "shortDesc": "Differential thrust in forwards flight", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "VTOL Attitude Control", "increment": 0.1, "longDesc": "Differential thrust in forward flight is enabled via VT_FW_DIFTHR_EN.", "max": 2.0, "min": 0.0, "name": "VT_FW_DIFTHR_S_P", "shortDesc": "Pitch differential thrust factor in forward flight", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "VTOL Attitude Control", "increment": 0.1, "longDesc": "Differential thrust in forward flight is enabled via VT_FW_DIFTHR_EN.", "max": 2.0, "min": 0.0, "name": "VT_FW_DIFTHR_S_R", "shortDesc": "Roll differential thrust factor in forward flight", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.1, "group": "VTOL Attitude Control", "increment": 0.1, "longDesc": "Differential thrust in forward flight is enabled via VT_FW_DIFTHR_EN.", "max": 2.0, "min": 0.0, "name": "VT_FW_DIFTHR_S_Y", "shortDesc": "Yaw differential thrust factor in forward flight", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "VTOL Attitude Control", "increment": 1.0, "longDesc": "Minimum altitude for fixed-wing flight. When the vehicle is in fixed-wing mode\nand the altitude drops below this altitude (relative altitude above local origin),\nit will instantly switch back to MC mode and execute behavior defined in COM_QC_ACT.", "max": 200.0, "min": 0.0, "name": "VT_FW_MIN_ALT", "shortDesc": "Quad-chute altitude", "type": "Float", "units": "m"}, {"category": "Standard", "default": 0, "group": "VTOL Attitude Control", "increment": 1, "longDesc": "Maximum height above the ground (if available, otherwise above\nHome if available, otherwise above the local origin) where triggering a quad-chute is possible.\nAt high altitudes there is a big risk to deplete the battery and therefore crash if quad-chuting there.", "min": 0, "name": "VT_FW_QC_HMAX", "shortDesc": "Quad-chute maximum height", "type": "Int32", "units": "m"}, {"category": "Standard", "default": 0, "group": "VTOL Attitude Control", "longDesc": "Absolute pitch threshold for quad-chute triggering in FW mode.\nAbove this the vehicle will transition back to MC mode and execute behavior defined in COM_QC_ACT.\nSet to 0 do disable this threshold.", "max": 180, "min": 0, "name": "VT_FW_QC_P", "shortDesc": "Quad-chute max pitch threshold", "type": "Int32", "units": "deg"}, {"category": "Standard", "default": 0, "group": "VTOL Attitude Control", "longDesc": "Absolute roll threshold for quad-chute triggering in FW mode.\nAbove this the vehicle will transition back to MC mode and execute behavior defined in COM_QC_ACT.\nSet to 0 do disable this threshold.", "max": 180, "min": 0, "name": "VT_FW_QC_R", "shortDesc": "Quad-chute max roll threshold", "type": "Int32", "units": "deg"}, {"category": "Standard", "decimalPlaces": 2, "default": 5.0, "group": "VTOL Attitude Control", "increment": 1.0, "longDesc": "Time in seconds used for a transition", "max": 20.0, "min": 0.1, "name": "VT_F_TRANS_DUR", "shortDesc": "Duration of a front transition", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 3, "default": 1.0, "group": "VTOL Attitude Control", "increment": 0.01, "max": 1.0, "min": 0.0, "name": "VT_F_TRANS_THR", "shortDesc": "Target throttle value for the transition to fixed-wing flight", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 6.0, "group": "VTOL Attitude Control", "increment": 0.5, "longDesc": "The duration of the front transition when there is no airspeed feedback available.\nWhen airspeed is used, transition timeout is declared if airspeed does not\nreach VT_ARSP_BLEND after this time.", "max": 30.0, "min": 1.0, "name": "VT_F_TR_OL_TM", "shortDesc": "Airspeed-less front transition time (open loop)", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "VTOL Attitude Control", "increment": 0.1, "longDesc": "Overrides VT_PITCH_MIN when the vehicle is in LAND mode (hovering).\nDuring landing it can be beneficial to reduce the pitch angle to reduce the generated lift in head wind.", "max": 45.0, "min": -10.0, "name": "VT_LND_PITCH_MIN", "shortDesc": "Minimum pitch angle during hover landing", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "VTOL Attitude Control", "increment": 0.1, "longDesc": "Any pitch setpoint below this value is translated to a forward force by the fixed-wing forward actuation if\nVT_FWD_TRHUST_EN is set.", "max": 45.0, "min": -10.0, "name": "VT_PITCH_MIN", "shortDesc": "Minimum pitch angle during hover", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.33, "group": "VTOL Attitude Control", "increment": 0.01, "longDesc": "Defines the slew rate of the puller/pusher throttle during transitions.\nZero will deactivate the slew rate limiting and thus produce an instant throttle\nrise to the transition throttle VT_F_TRANS_THR.", "min": 0.0, "name": "VT_PSHER_SLEW", "shortDesc": "Pusher throttle ramp up slew rate", "type": "Float", "units": "1/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "VTOL Attitude Control", "increment": 1.0, "longDesc": "Altitude error threshold for quad-chute triggering during fixed-wing flight.\nThe check is only active if altitude is controlled and the vehicle is below the current altitude reference.\nThe altitude error is relative to the highest altitude the vehicle has achieved since it has flown below the current\naltitude reference.\nSet to 0 do disable.", "max": 200.0, "min": 0.0, "name": "VT_QC_ALT_LOSS", "shortDesc": "Quad-chute uncommanded descent threshold", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 1, "default": 20.0, "group": "VTOL Attitude Control", "increment": 1.0, "longDesc": "Altitude loss threshold for quad-chute triggering during VTOL transition to fixed-wing flight\nin altitude-controlled flight modes.\nActive until 5s after completing transition to fixed-wing.\nIf the current altitude is more than this value below the altitude at the beginning of the\ntransition, it will instantly switch back to MC mode and execute behavior defined in COM_QC_ACT.\nSet to 0 do disable this threshold.", "max": 50.0, "min": 0.0, "name": "VT_QC_T_ALT_LOSS", "shortDesc": "Quad-chute transition altitude loss threshold", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "VTOL Attitude Control", "increment": 0.1, "max": 1.0, "min": -1.0, "name": "VT_SPOILER_MC_LD", "shortDesc": "Spoiler setting while landing (hover)", "type": "Float", "units": "norm"}, {"category": "Standard", "decimalPlaces": 3, "default": 1.0, "group": "VTOL Attitude Control", "increment": 0.01, "max": 1.0, "min": 0.0, "name": "VT_TILT_FW", "shortDesc": "Normalized tilt in FW", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "VTOL Attitude Control", "increment": 0.01, "max": 1.0, "min": 0.0, "name": "VT_TILT_MC", "shortDesc": "Normalized tilt in Hover", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.4, "group": "VTOL Attitude Control", "increment": 0.01, "max": 1.0, "min": 0.0, "name": "VT_TILT_TRANS", "shortDesc": "Normalized tilt in transition to FW", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 2.0, "group": "VTOL Attitude Control", "increment": 0.1, "longDesc": "Minimum time in seconds for front transition.", "max": 20.0, "min": 0.0, "name": "VT_TRANS_MIN_TM", "shortDesc": "Front transition minimum time", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.5, "group": "VTOL Attitude Control", "increment": 0.01, "longDesc": "Time in seconds it takes to tilt form VT_TILT_TRANS to VT_TILT_FW.", "max": 5.0, "min": 0.1, "name": "VT_TRANS_P2_DUR", "shortDesc": "Duration of front transition phase 2", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 15.0, "group": "VTOL Attitude Control", "increment": 1.0, "longDesc": "Time in seconds after which transition will be cancelled.", "max": 30.0, "min": 0.1, "name": "VT_TRANS_TIMEOUT", "shortDesc": "Front transition timeout", "type": "Float", "units": "s"}, {"category": "Standard", "default": 0, "group": "VTOL Attitude Control", "max": 2, "min": 0, "name": "VT_TYPE", "rebootRequired": true, "shortDesc": "VTOL Type (Tailsitter=0, Tiltrotor=1, Standard=2)", "type": "Int32", "values": [{"description": "Tailsitter", "value": 0}, {"description": "Tiltrotor", "value": 1}, {"description": "Standard", "value": 2}]}, {"category": "Standard", "decimalPlaces": 3, "default": 1.0, "group": "VTOL Attitude Control", "increment": 0.01, "longDesc": "The desired gain to convert roll sp into yaw rate sp.", "max": 3.0, "min": 0.0, "name": "WV_GAIN", "shortDesc": "Weather-vane roll angle to yawrate", "type": "Float", "units": "Hz"}, {"category": "Standard", "decimalPlaces": 1, "default": 80.0, "group": "VTOL Takeoff", "increment": 1.0, "longDesc": "Altitude relative to home at which vehicle will loiter after front transition.", "max": 300.0, "min": 20.0, "name": "VTO_LOITER_ALT", "shortDesc": "VTOL Takeoff relative loiter altitude", "type": "Float", "units": "m"}], "translation": {"items": {"parameters": {"list": {"items": {"bitmask": {"list": {"key": "index", "translate": ["description"]}}, "values": {"list": {"key": "value", "translate": ["description"]}}}, "key": "name", "translate": ["shortDesc", "longDesc"], "translate-global": ["category", "group"]}}}}, "version": 1} \ No newline at end of file +{"parameters": [{"category": "Standard", "default": 0, "group": "ADSB", "longDesc": "Sets first 4 characters of a total of 8. Valid characters are A-Z, 0-9, \" \". Example \"PX4 \" -> 1347957792\nFor CALLSIGN shorter than 8 characters use the null terminator at the end '\\0'.\n", "name": "ADSB_CALLSIGN_1", "rebootRequired": true, "shortDesc": "First 4 characters of CALLSIGN", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "ADSB", "longDesc": "Sets second 4 characters of a total of 8. Valid characters are A-Z, 0-9, \" \" only. Example \"TEST\" -> 1413829460\nFor CALLSIGN shorter than 8 characters use the null terminator at the end '\\0'.\n", "name": "ADSB_CALLSIGN_2", "rebootRequired": true, "shortDesc": "Second 4 characters of CALLSIGN", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "ADSB", "longDesc": "Sets the vehicle emergency state\n", "max": 6, "min": 0, "name": "ADSB_EMERGC", "rebootRequired": true, "shortDesc": "ADSB-Out Emergency State", "type": "Int32", "values": [{"description": "NoEmergency", "value": 0}, {"description": "General", "value": 1}, {"description": "Medical", "value": 2}, {"description": "LowFuel", "value": 3}, {"description": "NoCommunications", "value": 4}, {"description": "Interference", "value": 5}, {"description": "Downed", "value": 6}]}, {"category": "Standard", "default": 14, "group": "ADSB", "longDesc": "Configure the emitter type of the vehicle.\n", "max": 19, "min": 0, "name": "ADSB_EMIT_TYPE", "rebootRequired": true, "shortDesc": "ADSB-Out Vehicle Emitter Type", "type": "Int32", "values": [{"description": "Unknown", "value": 0}, {"description": "Light", "value": 1}, {"description": "Small", "value": 2}, {"description": "Large", "value": 3}, {"description": "HighVortex", "value": 4}, {"description": "Heavy", "value": 5}, {"description": "Performance", "value": 6}, {"description": "Rotorcraft", "value": 7}, {"description": "RESERVED", "value": 8}, {"description": "Glider", "value": 9}, {"description": "LightAir", "value": 10}, {"description": "Parachute", "value": 11}, {"description": "UltraLight", "value": 12}, {"description": "RESERVED", "value": 13}, {"description": "UAV", "value": 14}, {"description": "Space", "value": 15}, {"description": "RESERVED", "value": 16}, {"description": "EmergencySurf", "value": 17}, {"description": "ServiceSurf", "value": 18}, {"description": "PointObstacle", "value": 19}]}, {"category": "Standard", "default": 0, "group": "ADSB", "longDesc": "Sets GPS lataral offset encoding\n", "max": 7, "min": 0, "name": "ADSB_GPS_OFF_LAT", "rebootRequired": true, "shortDesc": "ADSB-Out GPS Offset lat", "type": "Int32", "values": [{"description": "NoData", "value": 0}, {"description": "LatLeft2M", "value": 1}, {"description": "LatLeft4M", "value": 2}, {"description": "LatLeft6M", "value": 3}, {"description": "LatRight0M", "value": 4}, {"description": "LatRight2M", "value": 5}, {"description": "LatRight4M", "value": 6}, {"description": "LatRight6M", "value": 7}]}, {"category": "Standard", "default": 0, "group": "ADSB", "longDesc": "Sets GPS longitudinal offset encoding\n", "max": 1, "min": 0, "name": "ADSB_GPS_OFF_LON", "rebootRequired": true, "shortDesc": "ADSB-Out GPS Offset lon", "type": "Int32", "values": [{"description": "NoData", "value": 0}, {"description": "AppliedBySensor", "value": 1}]}, {"category": "Standard", "default": 1194684, "group": "ADSB", "longDesc": "Defines the ICAO ID of the vehicle\n", "max": 16777215, "min": -1, "name": "ADSB_ICAO_ID", "rebootRequired": true, "shortDesc": "ADSB-Out ICAO configuration", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "ADSB", "longDesc": "This vehicle is always tracked. Use 0 to disable.\n", "max": 16777215, "min": 0, "name": "ADSB_ICAO_SPECL", "rebootRequired": true, "shortDesc": "ADSB-In Special ICAO configuration", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "ADSB", "longDesc": "Enable Identification of Position feature\n", "name": "ADSB_IDENT", "rebootRequired": true, "shortDesc": "ADSB-Out Ident Configuration", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 1, "group": "ADSB", "longDesc": "Report the length and width of the vehicle in meters. In most cases, use '1' for the smallest vehicle size.\n", "max": 15, "min": 0, "name": "ADSB_LEN_WIDTH", "rebootRequired": true, "shortDesc": "ADSB-Out Vehicle Size Configuration", "type": "Int32", "values": [{"description": "SizeUnknown", "value": 0}, {"description": "Len15_Wid23", "value": 1}, {"description": "Len25_Wid28", "value": 2}, {"description": "Len25_Wid34", "value": 3}, {"description": "Len35_Wid33", "value": 4}, {"description": "Len35_Wid38", "value": 5}, {"description": "Len45_Wid39", "value": 6}, {"description": "Len45_Wid45", "value": 7}, {"description": "Len55_Wid45", "value": 8}, {"description": "Len55_Wid52", "value": 9}, {"description": "Len65_Wid59", "value": 10}, {"description": "Len65_Wid67", "value": 11}, {"description": "Len75_Wid72", "value": 12}, {"description": "Len75_Wid80", "value": 13}, {"description": "Len85_Wid80", "value": 14}, {"description": "Len85_Wid90", "value": 15}]}, {"category": "Standard", "default": 25, "group": "ADSB", "longDesc": "Change number of targets to track\n", "max": 50, "min": 0, "name": "ADSB_LIST_MAX", "rebootRequired": true, "shortDesc": "ADSB-In Vehicle List Size", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "ADSB", "longDesc": "Informs ADSB vehicles of this vehicle's max speed capability\n", "max": 6, "min": 0, "name": "ADSB_MAX_SPEED", "rebootRequired": true, "shortDesc": "ADSB-Out Vehicle Max Speed", "type": "Int32", "values": [{"description": "UnknownMaxSpeed", "value": 0}, {"description": "75Kts", "value": 1}, {"description": "150Kts", "value": 2}, {"description": "300Kts", "value": 3}, {"description": "600Kts", "value": 4}, {"description": "1200Kts", "value": 5}, {"description": "Over1200Kts", "value": 6}]}, {"category": "Standard", "default": 1200, "group": "ADSB", "longDesc": "This parameter defines the squawk code. Value should be between 0000 and 7777.\n", "max": 7777, "min": 0, "name": "ADSB_SQUAWK", "rebootRequired": true, "shortDesc": "ADSB-Out squawk code configuration", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "Actuator Outputs", "longDesc": "Select what should be output on SIM Channel 1.\n\nThe default failsafe value is set according to the selected function:\n- 'Min' for ConstantMin\n- 'Max' for ConstantMax\n- 'Max' for Parachute\n- ('Max'+'Min')/2 for Servos\n- 'Disarmed' for the rest\n\n", "name": "PWM_MAIN_FUNC1", "shortDesc": "SIM Channel 1 Output Function", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Constant Min", "value": 1}, {"description": "Constant Max", "value": 2}, {"description": "Motor 1", "value": 101}, {"description": "Motor 2", "value": 102}, {"description": "Motor 3", "value": 103}, {"description": "Motor 4", "value": 104}, {"description": "Motor 5", "value": 105}, {"description": "Motor 6", "value": 106}, {"description": "Motor 7", "value": 107}, {"description": "Motor 8", "value": 108}, {"description": "Motor 9", "value": 109}, {"description": "Motor 10", "value": 110}, {"description": "Motor 11", "value": 111}, {"description": "Motor 12", "value": 112}, {"description": "Servo 1", "value": 201}, {"description": "Servo 2", "value": 202}, {"description": "Servo 3", "value": 203}, {"description": "Servo 4", "value": 204}, {"description": "Servo 5", "value": 205}, {"description": "Servo 6", "value": 206}, {"description": "Servo 7", "value": 207}, {"description": "Servo 8", "value": 208}, {"description": "Peripheral via Actuator Set 1", "value": 301}, {"description": "Peripheral via Actuator Set 2", "value": 302}, {"description": "Peripheral via Actuator Set 3", "value": 303}, {"description": "Peripheral via Actuator Set 4", "value": 304}, {"description": "Peripheral via Actuator Set 5", "value": 305}, {"description": "Peripheral via Actuator Set 6", "value": 306}, {"description": "Landing Gear", "value": 400}, {"description": "Parachute", "value": 401}, {"description": "RC Roll", "value": 402}, {"description": "RC Pitch", "value": 403}, {"description": "RC Throttle", "value": 404}, {"description": "RC Yaw", "value": 405}, {"description": "RC Flaps", "value": 406}, {"description": "RC AUX 1", "value": 407}, {"description": "RC AUX 2", "value": 408}, {"description": "RC AUX 3", "value": 409}, {"description": "RC AUX 4", "value": 410}, {"description": "RC AUX 5", "value": 411}, {"description": "RC AUX 6", "value": 412}, {"description": "Gimbal Roll", "value": 420}, {"description": "Gimbal Pitch", "value": 421}, {"description": "Gimbal Yaw", "value": 422}, {"description": "Gripper", "value": 430}, {"description": "Landing Gear Wheel", "value": 440}, {"description": "IC Engine Ignition", "value": 450}, {"description": "IC Engine Throttle", "value": 451}, {"description": "IC Engine Choke", "value": 452}, {"description": "IC Engine Starter", "value": 453}]}, {"category": "Standard", "default": 0, "group": "Actuator Outputs", "longDesc": "Select what should be output on SIM Channel 10.\n\nThe default failsafe value is set according to the selected function:\n- 'Min' for ConstantMin\n- 'Max' for ConstantMax\n- 'Max' for Parachute\n- ('Max'+'Min')/2 for Servos\n- 'Disarmed' for the rest\n\n", "name": "PWM_MAIN_FUNC10", "shortDesc": "SIM Channel 10 Output Function", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Constant Min", "value": 1}, {"description": "Constant Max", "value": 2}, {"description": "Motor 1", "value": 101}, {"description": "Motor 2", "value": 102}, {"description": "Motor 3", "value": 103}, {"description": "Motor 4", "value": 104}, {"description": "Motor 5", "value": 105}, {"description": "Motor 6", "value": 106}, {"description": "Motor 7", "value": 107}, {"description": "Motor 8", "value": 108}, {"description": "Motor 9", "value": 109}, {"description": "Motor 10", "value": 110}, {"description": "Motor 11", "value": 111}, {"description": "Motor 12", "value": 112}, {"description": "Servo 1", "value": 201}, {"description": "Servo 2", "value": 202}, {"description": "Servo 3", "value": 203}, {"description": "Servo 4", "value": 204}, {"description": "Servo 5", "value": 205}, {"description": "Servo 6", "value": 206}, {"description": "Servo 7", "value": 207}, {"description": "Servo 8", "value": 208}, {"description": "Peripheral via Actuator Set 1", "value": 301}, {"description": "Peripheral via Actuator Set 2", "value": 302}, {"description": "Peripheral via Actuator Set 3", "value": 303}, {"description": "Peripheral via Actuator Set 4", "value": 304}, {"description": "Peripheral via Actuator Set 5", "value": 305}, {"description": "Peripheral via Actuator Set 6", "value": 306}, {"description": "Landing Gear", "value": 400}, {"description": "Parachute", "value": 401}, {"description": "RC Roll", "value": 402}, {"description": "RC Pitch", "value": 403}, {"description": "RC Throttle", "value": 404}, {"description": "RC Yaw", "value": 405}, {"description": "RC Flaps", "value": 406}, {"description": "RC AUX 1", "value": 407}, {"description": "RC AUX 2", "value": 408}, {"description": "RC AUX 3", "value": 409}, {"description": "RC AUX 4", "value": 410}, {"description": "RC AUX 5", "value": 411}, {"description": "RC AUX 6", "value": 412}, {"description": "Gimbal Roll", "value": 420}, {"description": "Gimbal Pitch", "value": 421}, {"description": "Gimbal Yaw", "value": 422}, {"description": "Gripper", "value": 430}, {"description": "Landing Gear Wheel", "value": 440}, {"description": "IC Engine Ignition", "value": 450}, {"description": "IC Engine Throttle", "value": 451}, {"description": "IC Engine Choke", "value": 452}, {"description": "IC Engine Starter", "value": 453}]}, {"category": "Standard", "default": 0, "group": "Actuator Outputs", "longDesc": "Select what should be output on SIM Channel 11.\n\nThe default failsafe value is set according to the selected function:\n- 'Min' for ConstantMin\n- 'Max' for ConstantMax\n- 'Max' for Parachute\n- ('Max'+'Min')/2 for Servos\n- 'Disarmed' for the rest\n\n", "name": "PWM_MAIN_FUNC11", "shortDesc": "SIM Channel 11 Output Function", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Constant Min", "value": 1}, {"description": "Constant Max", "value": 2}, {"description": "Motor 1", "value": 101}, {"description": "Motor 2", "value": 102}, {"description": "Motor 3", "value": 103}, {"description": "Motor 4", "value": 104}, {"description": "Motor 5", "value": 105}, {"description": "Motor 6", "value": 106}, {"description": "Motor 7", "value": 107}, {"description": "Motor 8", "value": 108}, {"description": "Motor 9", "value": 109}, {"description": "Motor 10", "value": 110}, {"description": "Motor 11", "value": 111}, {"description": "Motor 12", "value": 112}, {"description": "Servo 1", "value": 201}, {"description": "Servo 2", "value": 202}, {"description": "Servo 3", "value": 203}, {"description": "Servo 4", "value": 204}, {"description": "Servo 5", "value": 205}, {"description": "Servo 6", "value": 206}, {"description": "Servo 7", "value": 207}, {"description": "Servo 8", "value": 208}, {"description": "Peripheral via Actuator Set 1", "value": 301}, {"description": "Peripheral via Actuator Set 2", "value": 302}, {"description": "Peripheral via Actuator Set 3", "value": 303}, {"description": "Peripheral via Actuator Set 4", "value": 304}, {"description": "Peripheral via Actuator Set 5", "value": 305}, {"description": "Peripheral via Actuator Set 6", "value": 306}, {"description": "Landing Gear", "value": 400}, {"description": "Parachute", "value": 401}, {"description": "RC Roll", "value": 402}, {"description": "RC Pitch", "value": 403}, {"description": "RC Throttle", "value": 404}, {"description": "RC Yaw", "value": 405}, {"description": "RC Flaps", "value": 406}, {"description": "RC AUX 1", "value": 407}, {"description": "RC AUX 2", "value": 408}, {"description": "RC AUX 3", "value": 409}, {"description": "RC AUX 4", "value": 410}, {"description": "RC AUX 5", "value": 411}, {"description": "RC AUX 6", "value": 412}, {"description": "Gimbal Roll", "value": 420}, {"description": "Gimbal Pitch", "value": 421}, {"description": "Gimbal Yaw", "value": 422}, {"description": "Gripper", "value": 430}, {"description": "Landing Gear Wheel", "value": 440}, {"description": "IC Engine Ignition", "value": 450}, {"description": "IC Engine Throttle", "value": 451}, {"description": "IC Engine Choke", "value": 452}, {"description": "IC Engine Starter", "value": 453}]}, {"category": "Standard", "default": 0, "group": "Actuator Outputs", "longDesc": "Select what should be output on SIM Channel 12.\n\nThe default failsafe value is set according to the selected function:\n- 'Min' for ConstantMin\n- 'Max' for ConstantMax\n- 'Max' for Parachute\n- ('Max'+'Min')/2 for Servos\n- 'Disarmed' for the rest\n\n", "name": "PWM_MAIN_FUNC12", "shortDesc": "SIM Channel 12 Output Function", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Constant Min", "value": 1}, {"description": "Constant Max", "value": 2}, {"description": "Motor 1", "value": 101}, {"description": "Motor 2", "value": 102}, {"description": "Motor 3", "value": 103}, {"description": "Motor 4", "value": 104}, {"description": "Motor 5", "value": 105}, {"description": "Motor 6", "value": 106}, {"description": "Motor 7", "value": 107}, {"description": "Motor 8", "value": 108}, {"description": "Motor 9", "value": 109}, {"description": "Motor 10", "value": 110}, {"description": "Motor 11", "value": 111}, {"description": "Motor 12", "value": 112}, {"description": "Servo 1", "value": 201}, {"description": "Servo 2", "value": 202}, {"description": "Servo 3", "value": 203}, {"description": "Servo 4", "value": 204}, {"description": "Servo 5", "value": 205}, {"description": "Servo 6", "value": 206}, {"description": "Servo 7", "value": 207}, {"description": "Servo 8", "value": 208}, {"description": "Peripheral via Actuator Set 1", "value": 301}, {"description": "Peripheral via Actuator Set 2", "value": 302}, {"description": "Peripheral via Actuator Set 3", "value": 303}, {"description": "Peripheral via Actuator Set 4", "value": 304}, {"description": "Peripheral via Actuator Set 5", "value": 305}, {"description": "Peripheral via Actuator Set 6", "value": 306}, {"description": "Landing Gear", "value": 400}, {"description": "Parachute", "value": 401}, {"description": "RC Roll", "value": 402}, {"description": "RC Pitch", "value": 403}, {"description": "RC Throttle", "value": 404}, {"description": "RC Yaw", "value": 405}, {"description": "RC Flaps", "value": 406}, {"description": "RC AUX 1", "value": 407}, {"description": "RC AUX 2", "value": 408}, {"description": "RC AUX 3", "value": 409}, {"description": "RC AUX 4", "value": 410}, {"description": "RC AUX 5", "value": 411}, {"description": "RC AUX 6", "value": 412}, {"description": "Gimbal Roll", "value": 420}, {"description": "Gimbal Pitch", "value": 421}, {"description": "Gimbal Yaw", "value": 422}, {"description": "Gripper", "value": 430}, {"description": "Landing Gear Wheel", "value": 440}, {"description": "IC Engine Ignition", "value": 450}, {"description": "IC Engine Throttle", "value": 451}, {"description": "IC Engine Choke", "value": 452}, {"description": "IC Engine Starter", "value": 453}]}, {"category": "Standard", "default": 0, "group": "Actuator Outputs", "longDesc": "Select what should be output on SIM Channel 13.\n\nThe default failsafe value is set according to the selected function:\n- 'Min' for ConstantMin\n- 'Max' for ConstantMax\n- 'Max' for Parachute\n- ('Max'+'Min')/2 for Servos\n- 'Disarmed' for the rest\n\n", "name": "PWM_MAIN_FUNC13", "shortDesc": "SIM Channel 13 Output Function", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Constant Min", "value": 1}, {"description": "Constant Max", "value": 2}, {"description": "Motor 1", "value": 101}, {"description": "Motor 2", "value": 102}, {"description": "Motor 3", "value": 103}, {"description": "Motor 4", "value": 104}, {"description": "Motor 5", "value": 105}, {"description": "Motor 6", "value": 106}, {"description": "Motor 7", "value": 107}, {"description": "Motor 8", "value": 108}, {"description": "Motor 9", "value": 109}, {"description": "Motor 10", "value": 110}, {"description": "Motor 11", "value": 111}, {"description": "Motor 12", "value": 112}, {"description": "Servo 1", "value": 201}, {"description": "Servo 2", "value": 202}, {"description": "Servo 3", "value": 203}, {"description": "Servo 4", "value": 204}, {"description": "Servo 5", "value": 205}, {"description": "Servo 6", "value": 206}, {"description": "Servo 7", "value": 207}, {"description": "Servo 8", "value": 208}, {"description": "Peripheral via Actuator Set 1", "value": 301}, {"description": "Peripheral via Actuator Set 2", "value": 302}, {"description": "Peripheral via Actuator Set 3", "value": 303}, {"description": "Peripheral via Actuator Set 4", "value": 304}, {"description": "Peripheral via Actuator Set 5", "value": 305}, {"description": "Peripheral via Actuator Set 6", "value": 306}, {"description": "Landing Gear", "value": 400}, {"description": "Parachute", "value": 401}, {"description": "RC Roll", "value": 402}, {"description": "RC Pitch", "value": 403}, {"description": "RC Throttle", "value": 404}, {"description": "RC Yaw", "value": 405}, {"description": "RC Flaps", "value": 406}, {"description": "RC AUX 1", "value": 407}, {"description": "RC AUX 2", "value": 408}, {"description": "RC AUX 3", "value": 409}, {"description": "RC AUX 4", "value": 410}, {"description": "RC AUX 5", "value": 411}, {"description": "RC AUX 6", "value": 412}, {"description": "Gimbal Roll", "value": 420}, {"description": "Gimbal Pitch", "value": 421}, {"description": "Gimbal Yaw", "value": 422}, {"description": "Gripper", "value": 430}, {"description": "Landing Gear Wheel", "value": 440}, {"description": "IC Engine Ignition", "value": 450}, {"description": "IC Engine Throttle", "value": 451}, {"description": "IC Engine Choke", "value": 452}, {"description": "IC Engine Starter", "value": 453}]}, {"category": "Standard", "default": 0, "group": "Actuator Outputs", "longDesc": "Select what should be output on SIM Channel 14.\n\nThe default failsafe value is set according to the selected function:\n- 'Min' for ConstantMin\n- 'Max' for ConstantMax\n- 'Max' for Parachute\n- ('Max'+'Min')/2 for Servos\n- 'Disarmed' for the rest\n\n", "name": "PWM_MAIN_FUNC14", "shortDesc": "SIM Channel 14 Output Function", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Constant Min", "value": 1}, {"description": "Constant Max", "value": 2}, {"description": "Motor 1", "value": 101}, {"description": "Motor 2", "value": 102}, {"description": "Motor 3", "value": 103}, {"description": "Motor 4", "value": 104}, {"description": "Motor 5", "value": 105}, {"description": "Motor 6", "value": 106}, {"description": "Motor 7", "value": 107}, {"description": "Motor 8", "value": 108}, {"description": "Motor 9", "value": 109}, {"description": "Motor 10", "value": 110}, {"description": "Motor 11", "value": 111}, {"description": "Motor 12", "value": 112}, {"description": "Servo 1", "value": 201}, {"description": "Servo 2", "value": 202}, {"description": "Servo 3", "value": 203}, {"description": "Servo 4", "value": 204}, {"description": "Servo 5", "value": 205}, {"description": "Servo 6", "value": 206}, {"description": "Servo 7", "value": 207}, {"description": "Servo 8", "value": 208}, {"description": "Peripheral via Actuator Set 1", "value": 301}, {"description": "Peripheral via Actuator Set 2", "value": 302}, {"description": "Peripheral via Actuator Set 3", "value": 303}, {"description": "Peripheral via Actuator Set 4", "value": 304}, {"description": "Peripheral via Actuator Set 5", "value": 305}, {"description": "Peripheral via Actuator Set 6", "value": 306}, {"description": "Landing Gear", "value": 400}, {"description": "Parachute", "value": 401}, {"description": "RC Roll", "value": 402}, {"description": "RC Pitch", "value": 403}, {"description": "RC Throttle", "value": 404}, {"description": "RC Yaw", "value": 405}, {"description": "RC Flaps", "value": 406}, {"description": "RC AUX 1", "value": 407}, {"description": "RC AUX 2", "value": 408}, {"description": "RC AUX 3", "value": 409}, {"description": "RC AUX 4", "value": 410}, {"description": "RC AUX 5", "value": 411}, {"description": "RC AUX 6", "value": 412}, {"description": "Gimbal Roll", "value": 420}, {"description": "Gimbal Pitch", "value": 421}, {"description": "Gimbal Yaw", "value": 422}, {"description": "Gripper", "value": 430}, {"description": "Landing Gear Wheel", "value": 440}, {"description": "IC Engine Ignition", "value": 450}, {"description": "IC Engine Throttle", "value": 451}, {"description": "IC Engine Choke", "value": 452}, {"description": "IC Engine Starter", "value": 453}]}, {"category": "Standard", "default": 0, "group": "Actuator Outputs", "longDesc": "Select what should be output on SIM Channel 15.\n\nThe default failsafe value is set according to the selected function:\n- 'Min' for ConstantMin\n- 'Max' for ConstantMax\n- 'Max' for Parachute\n- ('Max'+'Min')/2 for Servos\n- 'Disarmed' for the rest\n\n", "name": "PWM_MAIN_FUNC15", "shortDesc": "SIM Channel 15 Output Function", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Constant Min", "value": 1}, {"description": "Constant Max", "value": 2}, {"description": "Motor 1", "value": 101}, {"description": "Motor 2", "value": 102}, {"description": "Motor 3", "value": 103}, {"description": "Motor 4", "value": 104}, {"description": "Motor 5", "value": 105}, {"description": "Motor 6", "value": 106}, {"description": "Motor 7", "value": 107}, {"description": "Motor 8", "value": 108}, {"description": "Motor 9", "value": 109}, {"description": "Motor 10", "value": 110}, {"description": "Motor 11", "value": 111}, {"description": "Motor 12", "value": 112}, {"description": "Servo 1", "value": 201}, {"description": "Servo 2", "value": 202}, {"description": "Servo 3", "value": 203}, {"description": "Servo 4", "value": 204}, {"description": "Servo 5", "value": 205}, {"description": "Servo 6", "value": 206}, {"description": "Servo 7", "value": 207}, {"description": "Servo 8", "value": 208}, {"description": "Peripheral via Actuator Set 1", "value": 301}, {"description": "Peripheral via Actuator Set 2", "value": 302}, {"description": "Peripheral via Actuator Set 3", "value": 303}, {"description": "Peripheral via Actuator Set 4", "value": 304}, {"description": "Peripheral via Actuator Set 5", "value": 305}, {"description": "Peripheral via Actuator Set 6", "value": 306}, {"description": "Landing Gear", "value": 400}, {"description": "Parachute", "value": 401}, {"description": "RC Roll", "value": 402}, {"description": "RC Pitch", "value": 403}, {"description": "RC Throttle", "value": 404}, {"description": "RC Yaw", "value": 405}, {"description": "RC Flaps", "value": 406}, {"description": "RC AUX 1", "value": 407}, {"description": "RC AUX 2", "value": 408}, {"description": "RC AUX 3", "value": 409}, {"description": "RC AUX 4", "value": 410}, {"description": "RC AUX 5", "value": 411}, {"description": "RC AUX 6", "value": 412}, {"description": "Gimbal Roll", "value": 420}, {"description": "Gimbal Pitch", "value": 421}, {"description": "Gimbal Yaw", "value": 422}, {"description": "Gripper", "value": 430}, {"description": "Landing Gear Wheel", "value": 440}, {"description": "IC Engine Ignition", "value": 450}, {"description": "IC Engine Throttle", "value": 451}, {"description": "IC Engine Choke", "value": 452}, {"description": "IC Engine Starter", "value": 453}]}, {"category": "Standard", "default": 0, "group": "Actuator Outputs", "longDesc": "Select what should be output on SIM Channel 16.\n\nThe default failsafe value is set according to the selected function:\n- 'Min' for ConstantMin\n- 'Max' for ConstantMax\n- 'Max' for Parachute\n- ('Max'+'Min')/2 for Servos\n- 'Disarmed' for the rest\n\n", "name": "PWM_MAIN_FUNC16", "shortDesc": "SIM Channel 16 Output Function", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Constant Min", "value": 1}, {"description": "Constant Max", "value": 2}, {"description": "Motor 1", "value": 101}, {"description": "Motor 2", "value": 102}, {"description": "Motor 3", "value": 103}, {"description": "Motor 4", "value": 104}, {"description": "Motor 5", "value": 105}, {"description": "Motor 6", "value": 106}, {"description": "Motor 7", "value": 107}, {"description": "Motor 8", "value": 108}, {"description": "Motor 9", "value": 109}, {"description": "Motor 10", "value": 110}, {"description": "Motor 11", "value": 111}, {"description": "Motor 12", "value": 112}, {"description": "Servo 1", "value": 201}, {"description": "Servo 2", "value": 202}, {"description": "Servo 3", "value": 203}, {"description": "Servo 4", "value": 204}, {"description": "Servo 5", "value": 205}, {"description": "Servo 6", "value": 206}, {"description": "Servo 7", "value": 207}, {"description": "Servo 8", "value": 208}, {"description": "Peripheral via Actuator Set 1", "value": 301}, {"description": "Peripheral via Actuator Set 2", "value": 302}, {"description": "Peripheral via Actuator Set 3", "value": 303}, {"description": "Peripheral via Actuator Set 4", "value": 304}, {"description": "Peripheral via Actuator Set 5", "value": 305}, {"description": "Peripheral via Actuator Set 6", "value": 306}, {"description": "Landing Gear", "value": 400}, {"description": "Parachute", "value": 401}, {"description": "RC Roll", "value": 402}, {"description": "RC Pitch", "value": 403}, {"description": "RC Throttle", "value": 404}, {"description": "RC Yaw", "value": 405}, {"description": "RC Flaps", "value": 406}, {"description": "RC AUX 1", "value": 407}, {"description": "RC AUX 2", "value": 408}, {"description": "RC AUX 3", "value": 409}, {"description": "RC AUX 4", "value": 410}, {"description": "RC AUX 5", "value": 411}, {"description": "RC AUX 6", "value": 412}, {"description": "Gimbal Roll", "value": 420}, {"description": "Gimbal Pitch", "value": 421}, {"description": "Gimbal Yaw", "value": 422}, {"description": "Gripper", "value": 430}, {"description": "Landing Gear Wheel", "value": 440}, {"description": "IC Engine Ignition", "value": 450}, {"description": "IC Engine Throttle", "value": 451}, {"description": "IC Engine Choke", "value": 452}, {"description": "IC Engine Starter", "value": 453}]}, {"category": "Standard", "default": 0, "group": "Actuator Outputs", "longDesc": "Select what should be output on SIM Channel 2.\n\nThe default failsafe value is set according to the selected function:\n- 'Min' for ConstantMin\n- 'Max' for ConstantMax\n- 'Max' for Parachute\n- ('Max'+'Min')/2 for Servos\n- 'Disarmed' for the rest\n\n", "name": "PWM_MAIN_FUNC2", "shortDesc": "SIM Channel 2 Output Function", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Constant Min", "value": 1}, {"description": "Constant Max", "value": 2}, {"description": "Motor 1", "value": 101}, {"description": "Motor 2", "value": 102}, {"description": "Motor 3", "value": 103}, {"description": "Motor 4", "value": 104}, {"description": "Motor 5", "value": 105}, {"description": "Motor 6", "value": 106}, {"description": "Motor 7", "value": 107}, {"description": "Motor 8", "value": 108}, {"description": "Motor 9", "value": 109}, {"description": "Motor 10", "value": 110}, {"description": "Motor 11", "value": 111}, {"description": "Motor 12", "value": 112}, {"description": "Servo 1", "value": 201}, {"description": "Servo 2", "value": 202}, {"description": "Servo 3", "value": 203}, {"description": "Servo 4", "value": 204}, {"description": "Servo 5", "value": 205}, {"description": "Servo 6", "value": 206}, {"description": "Servo 7", "value": 207}, {"description": "Servo 8", "value": 208}, {"description": "Peripheral via Actuator Set 1", "value": 301}, {"description": "Peripheral via Actuator Set 2", "value": 302}, {"description": "Peripheral via Actuator Set 3", "value": 303}, {"description": "Peripheral via Actuator Set 4", "value": 304}, {"description": "Peripheral via Actuator Set 5", "value": 305}, {"description": "Peripheral via Actuator Set 6", "value": 306}, {"description": "Landing Gear", "value": 400}, {"description": "Parachute", "value": 401}, {"description": "RC Roll", "value": 402}, {"description": "RC Pitch", "value": 403}, {"description": "RC Throttle", "value": 404}, {"description": "RC Yaw", "value": 405}, {"description": "RC Flaps", "value": 406}, {"description": "RC AUX 1", "value": 407}, {"description": "RC AUX 2", "value": 408}, {"description": "RC AUX 3", "value": 409}, {"description": "RC AUX 4", "value": 410}, {"description": "RC AUX 5", "value": 411}, {"description": "RC AUX 6", "value": 412}, {"description": "Gimbal Roll", "value": 420}, {"description": "Gimbal Pitch", "value": 421}, {"description": "Gimbal Yaw", "value": 422}, {"description": "Gripper", "value": 430}, {"description": "Landing Gear Wheel", "value": 440}, {"description": "IC Engine Ignition", "value": 450}, {"description": "IC Engine Throttle", "value": 451}, {"description": "IC Engine Choke", "value": 452}, {"description": "IC Engine Starter", "value": 453}]}, {"category": "Standard", "default": 0, "group": "Actuator Outputs", "longDesc": "Select what should be output on SIM Channel 3.\n\nThe default failsafe value is set according to the selected function:\n- 'Min' for ConstantMin\n- 'Max' for ConstantMax\n- 'Max' for Parachute\n- ('Max'+'Min')/2 for Servos\n- 'Disarmed' for the rest\n\n", "name": "PWM_MAIN_FUNC3", "shortDesc": "SIM Channel 3 Output Function", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Constant Min", "value": 1}, {"description": "Constant Max", "value": 2}, {"description": "Motor 1", "value": 101}, {"description": "Motor 2", "value": 102}, {"description": "Motor 3", "value": 103}, {"description": "Motor 4", "value": 104}, {"description": "Motor 5", "value": 105}, {"description": "Motor 6", "value": 106}, {"description": "Motor 7", "value": 107}, {"description": "Motor 8", "value": 108}, {"description": "Motor 9", "value": 109}, {"description": "Motor 10", "value": 110}, {"description": "Motor 11", "value": 111}, {"description": "Motor 12", "value": 112}, {"description": "Servo 1", "value": 201}, {"description": "Servo 2", "value": 202}, {"description": "Servo 3", "value": 203}, {"description": "Servo 4", "value": 204}, {"description": "Servo 5", "value": 205}, {"description": "Servo 6", "value": 206}, {"description": "Servo 7", "value": 207}, {"description": "Servo 8", "value": 208}, {"description": "Peripheral via Actuator Set 1", "value": 301}, {"description": "Peripheral via Actuator Set 2", "value": 302}, {"description": "Peripheral via Actuator Set 3", "value": 303}, {"description": "Peripheral via Actuator Set 4", "value": 304}, {"description": "Peripheral via Actuator Set 5", "value": 305}, {"description": "Peripheral via Actuator Set 6", "value": 306}, {"description": "Landing Gear", "value": 400}, {"description": "Parachute", "value": 401}, {"description": "RC Roll", "value": 402}, {"description": "RC Pitch", "value": 403}, {"description": "RC Throttle", "value": 404}, {"description": "RC Yaw", "value": 405}, {"description": "RC Flaps", "value": 406}, {"description": "RC AUX 1", "value": 407}, {"description": "RC AUX 2", "value": 408}, {"description": "RC AUX 3", "value": 409}, {"description": "RC AUX 4", "value": 410}, {"description": "RC AUX 5", "value": 411}, {"description": "RC AUX 6", "value": 412}, {"description": "Gimbal Roll", "value": 420}, {"description": "Gimbal Pitch", "value": 421}, {"description": "Gimbal Yaw", "value": 422}, {"description": "Gripper", "value": 430}, {"description": "Landing Gear Wheel", "value": 440}, {"description": "IC Engine Ignition", "value": 450}, {"description": "IC Engine Throttle", "value": 451}, {"description": "IC Engine Choke", "value": 452}, {"description": "IC Engine Starter", "value": 453}]}, {"category": "Standard", "default": 0, "group": "Actuator Outputs", "longDesc": "Select what should be output on SIM Channel 4.\n\nThe default failsafe value is set according to the selected function:\n- 'Min' for ConstantMin\n- 'Max' for ConstantMax\n- 'Max' for Parachute\n- ('Max'+'Min')/2 for Servos\n- 'Disarmed' for the rest\n\n", "name": "PWM_MAIN_FUNC4", "shortDesc": "SIM Channel 4 Output Function", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Constant Min", "value": 1}, {"description": "Constant Max", "value": 2}, {"description": "Motor 1", "value": 101}, {"description": "Motor 2", "value": 102}, {"description": "Motor 3", "value": 103}, {"description": "Motor 4", "value": 104}, {"description": "Motor 5", "value": 105}, {"description": "Motor 6", "value": 106}, {"description": "Motor 7", "value": 107}, {"description": "Motor 8", "value": 108}, {"description": "Motor 9", "value": 109}, {"description": "Motor 10", "value": 110}, {"description": "Motor 11", "value": 111}, {"description": "Motor 12", "value": 112}, {"description": "Servo 1", "value": 201}, {"description": "Servo 2", "value": 202}, {"description": "Servo 3", "value": 203}, {"description": "Servo 4", "value": 204}, {"description": "Servo 5", "value": 205}, {"description": "Servo 6", "value": 206}, {"description": "Servo 7", "value": 207}, {"description": "Servo 8", "value": 208}, {"description": "Peripheral via Actuator Set 1", "value": 301}, {"description": "Peripheral via Actuator Set 2", "value": 302}, {"description": "Peripheral via Actuator Set 3", "value": 303}, {"description": "Peripheral via Actuator Set 4", "value": 304}, {"description": "Peripheral via Actuator Set 5", "value": 305}, {"description": "Peripheral via Actuator Set 6", "value": 306}, {"description": "Landing Gear", "value": 400}, {"description": "Parachute", "value": 401}, {"description": "RC Roll", "value": 402}, {"description": "RC Pitch", "value": 403}, {"description": "RC Throttle", "value": 404}, {"description": "RC Yaw", "value": 405}, {"description": "RC Flaps", "value": 406}, {"description": "RC AUX 1", "value": 407}, {"description": "RC AUX 2", "value": 408}, {"description": "RC AUX 3", "value": 409}, {"description": "RC AUX 4", "value": 410}, {"description": "RC AUX 5", "value": 411}, {"description": "RC AUX 6", "value": 412}, {"description": "Gimbal Roll", "value": 420}, {"description": "Gimbal Pitch", "value": 421}, {"description": "Gimbal Yaw", "value": 422}, {"description": "Gripper", "value": 430}, {"description": "Landing Gear Wheel", "value": 440}, {"description": "IC Engine Ignition", "value": 450}, {"description": "IC Engine Throttle", "value": 451}, {"description": "IC Engine Choke", "value": 452}, {"description": "IC Engine Starter", "value": 453}]}, {"category": "Standard", "default": 0, "group": "Actuator Outputs", "longDesc": "Select what should be output on SIM Channel 5.\n\nThe default failsafe value is set according to the selected function:\n- 'Min' for ConstantMin\n- 'Max' for ConstantMax\n- 'Max' for Parachute\n- ('Max'+'Min')/2 for Servos\n- 'Disarmed' for the rest\n\n", "name": "PWM_MAIN_FUNC5", "shortDesc": "SIM Channel 5 Output Function", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Constant Min", "value": 1}, {"description": "Constant Max", "value": 2}, {"description": "Motor 1", "value": 101}, {"description": "Motor 2", "value": 102}, {"description": "Motor 3", "value": 103}, {"description": "Motor 4", "value": 104}, {"description": "Motor 5", "value": 105}, {"description": "Motor 6", "value": 106}, {"description": "Motor 7", "value": 107}, {"description": "Motor 8", "value": 108}, {"description": "Motor 9", "value": 109}, {"description": "Motor 10", "value": 110}, {"description": "Motor 11", "value": 111}, {"description": "Motor 12", "value": 112}, {"description": "Servo 1", "value": 201}, {"description": "Servo 2", "value": 202}, {"description": "Servo 3", "value": 203}, {"description": "Servo 4", "value": 204}, {"description": "Servo 5", "value": 205}, {"description": "Servo 6", "value": 206}, {"description": "Servo 7", "value": 207}, {"description": "Servo 8", "value": 208}, {"description": "Peripheral via Actuator Set 1", "value": 301}, {"description": "Peripheral via Actuator Set 2", "value": 302}, {"description": "Peripheral via Actuator Set 3", "value": 303}, {"description": "Peripheral via Actuator Set 4", "value": 304}, {"description": "Peripheral via Actuator Set 5", "value": 305}, {"description": "Peripheral via Actuator Set 6", "value": 306}, {"description": "Landing Gear", "value": 400}, {"description": "Parachute", "value": 401}, {"description": "RC Roll", "value": 402}, {"description": "RC Pitch", "value": 403}, {"description": "RC Throttle", "value": 404}, {"description": "RC Yaw", "value": 405}, {"description": "RC Flaps", "value": 406}, {"description": "RC AUX 1", "value": 407}, {"description": "RC AUX 2", "value": 408}, {"description": "RC AUX 3", "value": 409}, {"description": "RC AUX 4", "value": 410}, {"description": "RC AUX 5", "value": 411}, {"description": "RC AUX 6", "value": 412}, {"description": "Gimbal Roll", "value": 420}, {"description": "Gimbal Pitch", "value": 421}, {"description": "Gimbal Yaw", "value": 422}, {"description": "Gripper", "value": 430}, {"description": "Landing Gear Wheel", "value": 440}, {"description": "IC Engine Ignition", "value": 450}, {"description": "IC Engine Throttle", "value": 451}, {"description": "IC Engine Choke", "value": 452}, {"description": "IC Engine Starter", "value": 453}]}, {"category": "Standard", "default": 0, "group": "Actuator Outputs", "longDesc": "Select what should be output on SIM Channel 6.\n\nThe default failsafe value is set according to the selected function:\n- 'Min' for ConstantMin\n- 'Max' for ConstantMax\n- 'Max' for Parachute\n- ('Max'+'Min')/2 for Servos\n- 'Disarmed' for the rest\n\n", "name": "PWM_MAIN_FUNC6", "shortDesc": "SIM Channel 6 Output Function", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Constant Min", "value": 1}, {"description": "Constant Max", "value": 2}, {"description": "Motor 1", "value": 101}, {"description": "Motor 2", "value": 102}, {"description": "Motor 3", "value": 103}, {"description": "Motor 4", "value": 104}, {"description": "Motor 5", "value": 105}, {"description": "Motor 6", "value": 106}, {"description": "Motor 7", "value": 107}, {"description": "Motor 8", "value": 108}, {"description": "Motor 9", "value": 109}, {"description": "Motor 10", "value": 110}, {"description": "Motor 11", "value": 111}, {"description": "Motor 12", "value": 112}, {"description": "Servo 1", "value": 201}, {"description": "Servo 2", "value": 202}, {"description": "Servo 3", "value": 203}, {"description": "Servo 4", "value": 204}, {"description": "Servo 5", "value": 205}, {"description": "Servo 6", "value": 206}, {"description": "Servo 7", "value": 207}, {"description": "Servo 8", "value": 208}, {"description": "Peripheral via Actuator Set 1", "value": 301}, {"description": "Peripheral via Actuator Set 2", "value": 302}, {"description": "Peripheral via Actuator Set 3", "value": 303}, {"description": "Peripheral via Actuator Set 4", "value": 304}, {"description": "Peripheral via Actuator Set 5", "value": 305}, {"description": "Peripheral via Actuator Set 6", "value": 306}, {"description": "Landing Gear", "value": 400}, {"description": "Parachute", "value": 401}, {"description": "RC Roll", "value": 402}, {"description": "RC Pitch", "value": 403}, {"description": "RC Throttle", "value": 404}, {"description": "RC Yaw", "value": 405}, {"description": "RC Flaps", "value": 406}, {"description": "RC AUX 1", "value": 407}, {"description": "RC AUX 2", "value": 408}, {"description": "RC AUX 3", "value": 409}, {"description": "RC AUX 4", "value": 410}, {"description": "RC AUX 5", "value": 411}, {"description": "RC AUX 6", "value": 412}, {"description": "Gimbal Roll", "value": 420}, {"description": "Gimbal Pitch", "value": 421}, {"description": "Gimbal Yaw", "value": 422}, {"description": "Gripper", "value": 430}, {"description": "Landing Gear Wheel", "value": 440}, {"description": "IC Engine Ignition", "value": 450}, {"description": "IC Engine Throttle", "value": 451}, {"description": "IC Engine Choke", "value": 452}, {"description": "IC Engine Starter", "value": 453}]}, {"category": "Standard", "default": 0, "group": "Actuator Outputs", "longDesc": "Select what should be output on SIM Channel 7.\n\nThe default failsafe value is set according to the selected function:\n- 'Min' for ConstantMin\n- 'Max' for ConstantMax\n- 'Max' for Parachute\n- ('Max'+'Min')/2 for Servos\n- 'Disarmed' for the rest\n\n", "name": "PWM_MAIN_FUNC7", "shortDesc": "SIM Channel 7 Output Function", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Constant Min", "value": 1}, {"description": "Constant Max", "value": 2}, {"description": "Motor 1", "value": 101}, {"description": "Motor 2", "value": 102}, {"description": "Motor 3", "value": 103}, {"description": "Motor 4", "value": 104}, {"description": "Motor 5", "value": 105}, {"description": "Motor 6", "value": 106}, {"description": "Motor 7", "value": 107}, {"description": "Motor 8", "value": 108}, {"description": "Motor 9", "value": 109}, {"description": "Motor 10", "value": 110}, {"description": "Motor 11", "value": 111}, {"description": "Motor 12", "value": 112}, {"description": "Servo 1", "value": 201}, {"description": "Servo 2", "value": 202}, {"description": "Servo 3", "value": 203}, {"description": "Servo 4", "value": 204}, {"description": "Servo 5", "value": 205}, {"description": "Servo 6", "value": 206}, {"description": "Servo 7", "value": 207}, {"description": "Servo 8", "value": 208}, {"description": "Peripheral via Actuator Set 1", "value": 301}, {"description": "Peripheral via Actuator Set 2", "value": 302}, {"description": "Peripheral via Actuator Set 3", "value": 303}, {"description": "Peripheral via Actuator Set 4", "value": 304}, {"description": "Peripheral via Actuator Set 5", "value": 305}, {"description": "Peripheral via Actuator Set 6", "value": 306}, {"description": "Landing Gear", "value": 400}, {"description": "Parachute", "value": 401}, {"description": "RC Roll", "value": 402}, {"description": "RC Pitch", "value": 403}, {"description": "RC Throttle", "value": 404}, {"description": "RC Yaw", "value": 405}, {"description": "RC Flaps", "value": 406}, {"description": "RC AUX 1", "value": 407}, {"description": "RC AUX 2", "value": 408}, {"description": "RC AUX 3", "value": 409}, {"description": "RC AUX 4", "value": 410}, {"description": "RC AUX 5", "value": 411}, {"description": "RC AUX 6", "value": 412}, {"description": "Gimbal Roll", "value": 420}, {"description": "Gimbal Pitch", "value": 421}, {"description": "Gimbal Yaw", "value": 422}, {"description": "Gripper", "value": 430}, {"description": "Landing Gear Wheel", "value": 440}, {"description": "IC Engine Ignition", "value": 450}, {"description": "IC Engine Throttle", "value": 451}, {"description": "IC Engine Choke", "value": 452}, {"description": "IC Engine Starter", "value": 453}]}, {"category": "Standard", "default": 0, "group": "Actuator Outputs", "longDesc": "Select what should be output on SIM Channel 8.\n\nThe default failsafe value is set according to the selected function:\n- 'Min' for ConstantMin\n- 'Max' for ConstantMax\n- 'Max' for Parachute\n- ('Max'+'Min')/2 for Servos\n- 'Disarmed' for the rest\n\n", "name": "PWM_MAIN_FUNC8", "shortDesc": "SIM Channel 8 Output Function", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Constant Min", "value": 1}, {"description": "Constant Max", "value": 2}, {"description": "Motor 1", "value": 101}, {"description": "Motor 2", "value": 102}, {"description": "Motor 3", "value": 103}, {"description": "Motor 4", "value": 104}, {"description": "Motor 5", "value": 105}, {"description": "Motor 6", "value": 106}, {"description": "Motor 7", "value": 107}, {"description": "Motor 8", "value": 108}, {"description": "Motor 9", "value": 109}, {"description": "Motor 10", "value": 110}, {"description": "Motor 11", "value": 111}, {"description": "Motor 12", "value": 112}, {"description": "Servo 1", "value": 201}, {"description": "Servo 2", "value": 202}, {"description": "Servo 3", "value": 203}, {"description": "Servo 4", "value": 204}, {"description": "Servo 5", "value": 205}, {"description": "Servo 6", "value": 206}, {"description": "Servo 7", "value": 207}, {"description": "Servo 8", "value": 208}, {"description": "Peripheral via Actuator Set 1", "value": 301}, {"description": "Peripheral via Actuator Set 2", "value": 302}, {"description": "Peripheral via Actuator Set 3", "value": 303}, {"description": "Peripheral via Actuator Set 4", "value": 304}, {"description": "Peripheral via Actuator Set 5", "value": 305}, {"description": "Peripheral via Actuator Set 6", "value": 306}, {"description": "Landing Gear", "value": 400}, {"description": "Parachute", "value": 401}, {"description": "RC Roll", "value": 402}, {"description": "RC Pitch", "value": 403}, {"description": "RC Throttle", "value": 404}, {"description": "RC Yaw", "value": 405}, {"description": "RC Flaps", "value": 406}, {"description": "RC AUX 1", "value": 407}, {"description": "RC AUX 2", "value": 408}, {"description": "RC AUX 3", "value": 409}, {"description": "RC AUX 4", "value": 410}, {"description": "RC AUX 5", "value": 411}, {"description": "RC AUX 6", "value": 412}, {"description": "Gimbal Roll", "value": 420}, {"description": "Gimbal Pitch", "value": 421}, {"description": "Gimbal Yaw", "value": 422}, {"description": "Gripper", "value": 430}, {"description": "Landing Gear Wheel", "value": 440}, {"description": "IC Engine Ignition", "value": 450}, {"description": "IC Engine Throttle", "value": 451}, {"description": "IC Engine Choke", "value": 452}, {"description": "IC Engine Starter", "value": 453}]}, {"category": "Standard", "default": 0, "group": "Actuator Outputs", "longDesc": "Select what should be output on SIM Channel 9.\n\nThe default failsafe value is set according to the selected function:\n- 'Min' for ConstantMin\n- 'Max' for ConstantMax\n- 'Max' for Parachute\n- ('Max'+'Min')/2 for Servos\n- 'Disarmed' for the rest\n\n", "name": "PWM_MAIN_FUNC9", "shortDesc": "SIM Channel 9 Output Function", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Constant Min", "value": 1}, {"description": "Constant Max", "value": 2}, {"description": "Motor 1", "value": 101}, {"description": "Motor 2", "value": 102}, {"description": "Motor 3", "value": 103}, {"description": "Motor 4", "value": 104}, {"description": "Motor 5", "value": 105}, {"description": "Motor 6", "value": 106}, {"description": "Motor 7", "value": 107}, {"description": "Motor 8", "value": 108}, {"description": "Motor 9", "value": 109}, {"description": "Motor 10", "value": 110}, {"description": "Motor 11", "value": 111}, {"description": "Motor 12", "value": 112}, {"description": "Servo 1", "value": 201}, {"description": "Servo 2", "value": 202}, {"description": "Servo 3", "value": 203}, {"description": "Servo 4", "value": 204}, {"description": "Servo 5", "value": 205}, {"description": "Servo 6", "value": 206}, {"description": "Servo 7", "value": 207}, {"description": "Servo 8", "value": 208}, {"description": "Peripheral via Actuator Set 1", "value": 301}, {"description": "Peripheral via Actuator Set 2", "value": 302}, {"description": "Peripheral via Actuator Set 3", "value": 303}, {"description": "Peripheral via Actuator Set 4", "value": 304}, {"description": "Peripheral via Actuator Set 5", "value": 305}, {"description": "Peripheral via Actuator Set 6", "value": 306}, {"description": "Landing Gear", "value": 400}, {"description": "Parachute", "value": 401}, {"description": "RC Roll", "value": 402}, {"description": "RC Pitch", "value": 403}, {"description": "RC Throttle", "value": 404}, {"description": "RC Yaw", "value": 405}, {"description": "RC Flaps", "value": 406}, {"description": "RC AUX 1", "value": 407}, {"description": "RC AUX 2", "value": 408}, {"description": "RC AUX 3", "value": 409}, {"description": "RC AUX 4", "value": 410}, {"description": "RC AUX 5", "value": 411}, {"description": "RC AUX 6", "value": 412}, {"description": "Gimbal Roll", "value": 420}, {"description": "Gimbal Pitch", "value": 421}, {"description": "Gimbal Yaw", "value": 422}, {"description": "Gripper", "value": 430}, {"description": "Landing Gear Wheel", "value": 440}, {"description": "IC Engine Ignition", "value": 450}, {"description": "IC Engine Throttle", "value": 451}, {"description": "IC Engine Choke", "value": 452}, {"description": "IC Engine Starter", "value": 453}]}, {"bitmask": [{"description": "SIM Channel 1", "index": 0}, {"description": "SIM Channel 2", "index": 1}, {"description": "SIM Channel 3", "index": 2}, {"description": "SIM Channel 4", "index": 3}, {"description": "SIM Channel 5", "index": 4}, {"description": "SIM Channel 6", "index": 5}, {"description": "SIM Channel 7", "index": 6}, {"description": "SIM Channel 8", "index": 7}, {"description": "SIM Channel 9", "index": 8}, {"description": "SIM Channel 10", "index": 9}, {"description": "SIM Channel 11", "index": 10}, {"description": "SIM Channel 12", "index": 11}, {"description": "SIM Channel 13", "index": 12}, {"description": "SIM Channel 14", "index": 13}, {"description": "SIM Channel 15", "index": 14}, {"description": "SIM Channel 16", "index": 15}], "category": "Standard", "default": 0, "group": "Actuator Outputs", "longDesc": "Allows to reverse the output range for each channel.\nNote: this is only useful for servos.\n\n", "max": 65535, "min": 0, "name": "PWM_MAIN_REV", "shortDesc": "Reverse Output Range for SIM", "type": "Int32"}, {"bitmask": [{"description": "Only data missing check (triggers if more than 1s no data)", "index": 0}, {"description": "Data stuck (triggers if data is exactly constant for 2s in FW mode)", "index": 1}, {"description": "Innovation check (see ASPD_FS_INNOV)", "index": 2}, {"description": "Load factor check (triggers if measurement is below stall speed)", "index": 3}, {"description": "First principle check (airspeed change vs. throttle and pitch)", "index": 4}], "category": "Standard", "default": 7, "group": "Airspeed Validator", "longDesc": "Controls which checks are run to check airspeed data for validity. Only applied if ASPD_PRIMARY > 0.\n\nNote: The missing data check (bit 0) is implicitly always enabled when ASPD_DO_CHECKS > 0, even if bit 0 is not explicitly set.\n", "max": 31, "min": 0, "name": "ASPD_DO_CHECKS", "shortDesc": "Enable checks on airspeed sensors", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "Airspeed Validator", "name": "ASPD_FALLBACK", "shortDesc": "Fallback options", "type": "Int32", "values": [{"description": "Fallback only to other airspeed sensors", "value": 0}, {"description": "Fallback to groundspeed-minus-windspeed airspeed estimation", "value": 1}, {"description": "Fallback to thrust based airspeed estimation", "value": 2}]}, {"category": "Standard", "decimalPlaces": 1, "default": 2.0, "group": "Airspeed Validator", "longDesc": "Window for comparing airspeed change to throttle and pitch change.\nTriggers when the airspeed change within this window is negative while throttle increases\nand the vehicle pitches down.\nIs meant to catch degrading airspeed blockages as can happen when flying through icing conditions.\nRelies on FW_THR_TRIM being set accurately.\n", "min": 0.0, "name": "ASPD_FP_T_WINDOW", "shortDesc": "First principle airspeed check time window", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 1, "default": 5.0, "group": "Airspeed Validator", "longDesc": "This specifies the minimum airspeed innovation required to trigger a failsafe. Larger values make the check less sensitive,\nsmaller values make it more sensitive. Large innovations indicate an inconsistency between predicted (groundspeed - windspeeed)\nand measured airspeed.\nThe time required to detect a fault when the threshold is exceeded depends on the size of the exceedance and is controlled by the ASPD_FS_INTEG parameter.\n", "max": 10.0, "min": 0.5, "name": "ASPD_FS_INNOV", "shortDesc": "Airspeed failure innovation threshold", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 10.0, "group": "Airspeed Validator", "longDesc": "This sets the time integral of airspeed innovation exceedance above ASPD_FS_INNOV required to trigger a failsafe.\nLarger values make the check less sensitive, smaller positive values make it more sensitive.\n", "max": 50.0, "min": 0.0, "name": "ASPD_FS_INTEG", "shortDesc": "Airspeed failure innovation integral threshold", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 1, "default": -1.0, "group": "Airspeed Validator", "longDesc": "Delay before switching back to using airspeed sensor if checks indicate sensor is good.\nSet to a negative value to disable the re-enabling in flight.\n", "min": -1.0, "name": "ASPD_FS_T_START", "shortDesc": "Airspeed failsafe start delay", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 1, "default": 1.0, "group": "Airspeed Validator", "longDesc": "Delay before stopping use of airspeed sensor if checks indicate sensor is bad.\n", "min": 0.0, "name": "ASPD_FS_T_STOP", "shortDesc": "Airspeed failsafe stop delay", "type": "Float", "units": "s"}, {"category": "Standard", "default": 1, "group": "Airspeed Validator", "name": "ASPD_PRIMARY", "rebootRequired": true, "shortDesc": "Index or primary airspeed measurement source", "type": "Int32", "values": [{"description": "Groundspeed minus windspeed", "value": 0}, {"description": "First airspeed sensor", "value": 1}, {"description": "Second airspeed sensor", "value": 2}, {"description": "Third airspeed sensor", "value": 3}, {"description": "Thrust based airspeed", "value": 4}]}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "Airspeed Validator", "longDesc": "This is the scale IAS --> CAS of the first airspeed sensor instance\n", "max": 2.0, "min": 0.5, "name": "ASPD_SCALE_1", "shortDesc": "Scale of airspeed sensor 1", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "Airspeed Validator", "longDesc": "This is the scale IAS --> CAS of the second airspeed sensor instance\n", "max": 2.0, "min": 0.5, "name": "ASPD_SCALE_2", "shortDesc": "Scale of airspeed sensor 2", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "Airspeed Validator", "longDesc": "This is the scale IAS --> CAS of the third airspeed sensor instance\n", "max": 2.0, "min": 0.5, "name": "ASPD_SCALE_3", "shortDesc": "Scale of airspeed sensor 3", "type": "Float"}, {"category": "Standard", "default": 2, "group": "Airspeed Validator", "name": "ASPD_SCALE_APPLY", "shortDesc": "Controls when to apply the new estimated airspeed scale(s)", "type": "Int32", "values": [{"description": "Do not automatically apply the estimated scale", "value": 0}, {"description": "Apply the estimated scale after disarm", "value": 1}, {"description": "Apply the estimated scale in air", "value": 2}]}, {"category": "Standard", "decimalPlaces": 1, "default": 1.4, "group": "Airspeed Validator", "longDesc": "True airspeed measurement noise of the internal wind estimator(s) of the airspeed selector.\n", "max": 4.0, "min": 0.0, "name": "ASPD_TAS_NOISE", "shortDesc": "Wind estimator true airspeed measurement noise", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 2.0, "group": "Airspeed Validator", "longDesc": "The airspeed alternative derived from groundspeed and heading will be declared valid\nas soon and as long the horizontal wind uncertainty is below this value.\n", "max": 5.0, "min": 0.01, "name": "ASPD_WERR_THR", "shortDesc": "Horizontal wind uncertainty threshold for valid ground-minus-wind", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.1, "group": "Airspeed Validator", "longDesc": "Wind process noise of the internal wind estimator(s) of the airspeed selector.\nWhen unaided, the wind estimate uncertainty (1-sigma, in m/s) increases by this amount every second.\n", "max": 1.0, "min": 0.0, "name": "ASPD_WIND_NSD", "shortDesc": "Wind estimator wind process noise spectral density", "type": "Float", "units": "m/s^2/sqrt(Hz)"}, {"category": "Standard", "default": 0, "group": "Attitude Q estimator", "name": "ATT_ACC_COMP", "shortDesc": "Acceleration compensation based on GPS velocity", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 3, "default": 0.05, "group": "Attitude Q estimator", "max": 2.0, "min": 0.0, "name": "ATT_BIAS_MAX", "shortDesc": "Gyro bias limit", "type": "Float", "units": "rad/s"}, {"category": "Standard", "default": 0, "group": "Attitude Q estimator", "longDesc": "Enable standalone quaternion based attitude estimator.\n", "name": "ATT_EN", "shortDesc": "standalone attitude estimator enable (unsupported)", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 0, "group": "Attitude Q estimator", "longDesc": "Set to 1 to use heading estimate from vision.\nSet to 2 to use heading from motion capture.\n", "max": 2, "min": 0, "name": "ATT_EXT_HDG_M", "shortDesc": "External heading usage mode (from Motion capture/Vision)", "type": "Int32", "values": [{"description": "None", "value": 0}, {"description": "Vision", "value": 1}, {"description": "Motion Capture", "value": 2}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Attitude Q estimator", "longDesc": "This parameter is not used in normal operation,\nas the declination is looked up based on the\nGPS coordinates of the vehicle.\n", "name": "ATT_MAG_DECL", "shortDesc": "Magnetic declination, in degrees", "type": "Float", "units": "deg"}, {"category": "Standard", "default": 1, "group": "Attitude Q estimator", "name": "ATT_MAG_DECL_A", "shortDesc": "Automatic GPS based declination compensation", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.2, "group": "Attitude Q estimator", "max": 1.0, "min": 0.0, "name": "ATT_W_ACC", "shortDesc": "Complementary filter accelerometer weight", "type": "Float"}, {"category": "Standard", "default": 0.1, "group": "Attitude Q estimator", "max": 1.0, "min": 0.0, "name": "ATT_W_EXT_HDG", "shortDesc": "Complementary filter external heading weight", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.1, "group": "Attitude Q estimator", "max": 1.0, "min": 0.0, "name": "ATT_W_GYRO_BIAS", "shortDesc": "Complementary filter gyroscope bias weight", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.1, "group": "Attitude Q estimator", "longDesc": "Set to 0 to avoid using the magnetometer.\n", "max": 1.0, "min": 0.0, "name": "ATT_W_MAG", "shortDesc": "Complementary filter magnetometer weight", "type": "Float"}, {"category": "Standard", "default": 2, "group": "Autotune", "longDesc": "After the auto-tuning sequence is completed,\na new set of gains is available and can be applied\nimmediately or after landing.\n", "name": "FW_AT_APPLY", "shortDesc": "Controls when to apply the new gains", "type": "Int32", "values": [{"description": "Do not apply the new gains (logging only)", "value": 0}, {"description": "Apply the new gains after disarm", "value": 1}, {"description": "Apply the new gains in air", "value": 2}]}, {"bitmask": [{"description": "roll", "index": 0}, {"description": "pitch", "index": 1}, {"description": "yaw", "index": 2}], "category": "Standard", "default": 3, "group": "Autotune", "longDesc": "Defines which axes will be tuned during the auto-tuning sequence\n\nSet bits in the following positions to enable:\n0 : Roll\n1 : Pitch\n2 : Yaw\n", "max": 7, "min": 1, "name": "FW_AT_AXES", "shortDesc": "Tuning axes selection", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "Autotune", "longDesc": "Defines which RC_MAP_AUXn parameter maps the manual control channel used to enable/disable auto tuning.\n", "max": 6, "min": 0, "name": "FW_AT_MAN_AUX", "shortDesc": "Enable/disable auto tuning using a manual control AUX input", "type": "Int32", "values": [{"description": "Disable", "value": 0}, {"description": "Aux1", "value": 1}, {"description": "Aux2", "value": 2}, {"description": "Aux3", "value": 3}, {"description": "Aux4", "value": 4}, {"description": "Aux5", "value": 5}, {"description": "Aux6", "value": 6}]}, {"category": "Standard", "decimalPlaces": 1, "default": 1.0, "group": "Autotune", "longDesc": "Can be set lower or higher than the end frequency\n", "max": 30.0, "min": 0.1, "name": "FW_AT_SYSID_F0", "shortDesc": "Start frequency of the injected signal", "type": "Float", "units": "Hz"}, {"category": "Standard", "decimalPlaces": 1, "default": 10.0, "group": "Autotune", "longDesc": "Can be set lower or higher than the start frequency\n", "max": 30.0, "min": 0.1, "name": "FW_AT_SYSID_F1", "shortDesc": "End frequency of the injected signal", "type": "Float", "units": "Hz"}, {"category": "Standard", "decimalPlaces": 0, "default": 10.0, "group": "Autotune", "longDesc": "Duration of the input signal sent on each axis during system identification\n", "max": 120.0, "min": 5.0, "name": "FW_AT_SYSID_TIME", "shortDesc": "Maneuver time for each axis", "type": "Float", "units": "s"}, {"category": "Standard", "default": 1, "group": "Autotune", "longDesc": "Type of signal used during system identification to excite the system.\n", "name": "FW_AT_SYSID_TYPE", "shortDesc": "Input signal type", "type": "Int32", "values": [{"description": "Step", "value": 0}, {"description": "Linear sine sweep", "value": 1}, {"description": "Logarithmic sine sweep", "value": 2}]}, {"category": "Standard", "default": 1, "group": "Autotune", "longDesc": "After the auto-tuning sequence is completed,\na new set of gains is available and can be applied\nimmediately or after landing.\n\nWARNING Applying the gains in air is dangerous as there is no\nguarantee that those new gains will be able to stabilize\nthe drone properly.\n", "name": "MC_AT_APPLY", "shortDesc": "Controls when to apply the new gains", "type": "Int32", "values": [{"description": "Do not apply the new gains (logging only)", "value": 0}, {"description": "Apply the new gains after disarm", "value": 1}, {"description": "WARNING Apply the new gains in air", "value": 2}]}, {"category": "Standard", "default": 0, "group": "Autotune", "name": "MC_AT_EN", "shortDesc": "Multicopter autotune module enable", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.14, "group": "Autotune", "max": 0.5, "min": 0.01, "name": "MC_AT_RISE_TIME", "shortDesc": "Desired angular rate closed-loop rise time", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.7, "group": "Autotune", "max": 6.0, "min": 0.1, "name": "MC_AT_SYSID_AMP", "shortDesc": "Amplitude of the injected signal", "type": "Float"}, {"category": "Standard", "decimalPlaces": 0, "default": -1.0, "group": "Battery Calibration", "increment": 50.0, "longDesc": "Defines the capacity of battery 1 in mAh.\n\n", "max": 100000.0, "min": -1.0, "name": "BAT1_CAPACITY", "rebootRequired": true, "shortDesc": "Battery 1 capacity", "type": "Float", "units": "mAh"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Battery Calibration", "longDesc": "This parameter allows to overwrite the current measured during\nidle (unarmed) state with a user-defined constant value (expressed in amperes).\nWhen the system is armed, the measured current is used. This is useful\nbecause on certain ESCs current measurements are inaccurate in case of no load.\nNegative values are ignored and will cause the measured current to be used.\nThe default value of 0 disables the overwrite, in which case the measured value\nis always used.\n\n", "name": "BAT1_I_OVERWRITE", "shortDesc": "Battery 1 idle current overwrite", "type": "Float"}, {"category": "Standard", "default": 0, "group": "Battery Calibration", "longDesc": "Defines the number of cells the attached battery consists of.\n\n", "name": "BAT1_N_CELLS", "shortDesc": "Number of cells for battery 1", "type": "Int32", "values": [{"description": "Unknown", "value": 0}, {"description": "1S Battery", "value": 1}, {"description": "2S Battery", "value": 2}, {"description": "3S Battery", "value": 3}, {"description": "4S Battery", "value": 4}, {"description": "5S Battery", "value": 5}, {"description": "6S Battery", "value": 6}, {"description": "7S Battery", "value": 7}, {"description": "8S Battery", "value": 8}, {"description": "9S Battery", "value": 9}, {"description": "10S Battery", "value": 10}, {"description": "11S Battery", "value": 11}, {"description": "12S Battery", "value": 12}, {"description": "13S Battery", "value": 13}, {"description": "14S Battery", "value": 14}, {"description": "15S Battery", "value": 15}, {"description": "16S Battery", "value": 16}]}, {"category": "Standard", "decimalPlaces": 4, "default": -1.0, "group": "Battery Calibration", "increment": 0.0005, "longDesc": "If non-negative, then this will be used instead of the online estimated internal resistance.\n\n", "max": 0.2, "min": -1.0, "name": "BAT1_R_INTERNAL", "rebootRequired": true, "shortDesc": "Explicitly defines the per cell internal resistance for battery 1", "type": "Float", "units": "Ohm"}, {"category": "Standard", "default": 0, "group": "Battery Calibration", "longDesc": "This parameter controls the source of battery data. The value 'Power Module / Analog'\nmeans that measurements are expected to come from either analog (ADC) inputs\nor an I2C power monitor (e.g. INA226). Analog inputs are voltage and current\nmeasurements read from the board's ADC channels, typically from an onboard\nvoltage divider and current shunt, or an external analog power module.\nI2C power monitors are digital sensors on the I2C bus.\nIf the value is set to 'External' then the system expects to receive MAVLink\nor CAN battery status messages, or the battery data is published by an external driver.\nIf the value is set to 'ESCs', the battery information are taken from the esc_status message.\nThis requires the ESC to provide both voltage as well as current (via ESC telemetry).\n\n", "name": "BAT1_SOURCE", "rebootRequired": true, "shortDesc": "Battery 1 monitoring source", "type": "Int32", "values": [{"description": "Disabled", "value": -1}, {"description": "Power Module / Analog", "value": 0}, {"description": "External", "value": 1}, {"description": "ESCs", "value": 2}]}, {"category": "Standard", "decimalPlaces": 2, "default": 4.05, "group": "Battery Calibration", "increment": 0.01, "longDesc": "Defines the voltage where a single cell of the battery is considered full.\nFor a more accurate estimate set this below the nominal voltage of e.g. 4.2V\n\n", "name": "BAT1_V_CHARGED", "rebootRequired": true, "shortDesc": "Full cell voltage", "type": "Float", "units": "V"}, {"category": "Standard", "decimalPlaces": 2, "default": 3.6, "group": "Battery Calibration", "increment": 0.01, "longDesc": "Defines the voltage where a single cell of the battery is considered empty.\nThe voltage should be chosen above the steep dropoff at 3.5V. A typical\nlithium battery can only be discharged under high load down to 10% before\nit drops off to a voltage level damaging the cells.\n\n", "name": "BAT1_V_EMPTY", "rebootRequired": true, "shortDesc": "Empty cell voltage", "type": "Float", "units": "V"}, {"category": "Standard", "decimalPlaces": 0, "default": -1.0, "group": "Battery Calibration", "increment": 50.0, "longDesc": "Defines the capacity of battery 2 in mAh.\n\n", "max": 100000.0, "min": -1.0, "name": "BAT2_CAPACITY", "rebootRequired": true, "shortDesc": "Battery 2 capacity", "type": "Float", "units": "mAh"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Battery Calibration", "longDesc": "This parameter allows to overwrite the current measured during\nidle (unarmed) state with a user-defined constant value (expressed in amperes).\nWhen the system is armed, the measured current is used. This is useful\nbecause on certain ESCs current measurements are inaccurate in case of no load.\nNegative values are ignored and will cause the measured current to be used.\nThe default value of 0 disables the overwrite, in which case the measured value\nis always used.\n\n", "name": "BAT2_I_OVERWRITE", "shortDesc": "Battery 2 idle current overwrite", "type": "Float"}, {"category": "Standard", "default": 0, "group": "Battery Calibration", "longDesc": "Defines the number of cells the attached battery consists of.\n\n", "name": "BAT2_N_CELLS", "shortDesc": "Number of cells for battery 2", "type": "Int32", "values": [{"description": "Unknown", "value": 0}, {"description": "1S Battery", "value": 1}, {"description": "2S Battery", "value": 2}, {"description": "3S Battery", "value": 3}, {"description": "4S Battery", "value": 4}, {"description": "5S Battery", "value": 5}, {"description": "6S Battery", "value": 6}, {"description": "7S Battery", "value": 7}, {"description": "8S Battery", "value": 8}, {"description": "9S Battery", "value": 9}, {"description": "10S Battery", "value": 10}, {"description": "11S Battery", "value": 11}, {"description": "12S Battery", "value": 12}, {"description": "13S Battery", "value": 13}, {"description": "14S Battery", "value": 14}, {"description": "15S Battery", "value": 15}, {"description": "16S Battery", "value": 16}]}, {"category": "Standard", "decimalPlaces": 4, "default": -1.0, "group": "Battery Calibration", "increment": 0.0005, "longDesc": "If non-negative, then this will be used instead of the online estimated internal resistance.\n\n", "max": 0.2, "min": -1.0, "name": "BAT2_R_INTERNAL", "rebootRequired": true, "shortDesc": "Explicitly defines the per cell internal resistance for battery 2", "type": "Float", "units": "Ohm"}, {"category": "Standard", "default": -1, "group": "Battery Calibration", "longDesc": "This parameter controls the source of battery data. The value 'Power Module / Analog'\nmeans that measurements are expected to come from either analog (ADC) inputs\nor an I2C power monitor (e.g. INA226). Analog inputs are voltage and current\nmeasurements read from the board's ADC channels, typically from an onboard\nvoltage divider and current shunt, or an external analog power module.\nI2C power monitors are digital sensors on the I2C bus.\nIf the value is set to 'External' then the system expects to receive MAVLink\nor CAN battery status messages, or the battery data is published by an external driver.\nIf the value is set to 'ESCs', the battery information are taken from the esc_status message.\nThis requires the ESC to provide both voltage as well as current (via ESC telemetry).\n\n", "name": "BAT2_SOURCE", "rebootRequired": true, "shortDesc": "Battery 2 monitoring source", "type": "Int32", "values": [{"description": "Disabled", "value": -1}, {"description": "Power Module / Analog", "value": 0}, {"description": "External", "value": 1}, {"description": "ESCs", "value": 2}]}, {"category": "Standard", "decimalPlaces": 2, "default": 4.05, "group": "Battery Calibration", "increment": 0.01, "longDesc": "Defines the voltage where a single cell of the battery is considered full.\nFor a more accurate estimate set this below the nominal voltage of e.g. 4.2V\n\n", "name": "BAT2_V_CHARGED", "rebootRequired": true, "shortDesc": "Full cell voltage", "type": "Float", "units": "V"}, {"category": "Standard", "decimalPlaces": 2, "default": 3.6, "group": "Battery Calibration", "increment": 0.01, "longDesc": "Defines the voltage where a single cell of the battery is considered empty.\nThe voltage should be chosen above the steep dropoff at 3.5V. A typical\nlithium battery can only be discharged under high load down to 10% before\nit drops off to a voltage level damaging the cells.\n\n", "name": "BAT2_V_EMPTY", "rebootRequired": true, "shortDesc": "Empty cell voltage", "type": "Float", "units": "V"}, {"category": "Standard", "decimalPlaces": 0, "default": -1.0, "group": "Battery Calibration", "increment": 50.0, "longDesc": "Defines the capacity of battery 3 in mAh.\n\n", "max": 100000.0, "min": -1.0, "name": "BAT3_CAPACITY", "rebootRequired": true, "shortDesc": "Battery 3 capacity", "type": "Float", "units": "mAh"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Battery Calibration", "longDesc": "This parameter allows to overwrite the current measured during\nidle (unarmed) state with a user-defined constant value (expressed in amperes).\nWhen the system is armed, the measured current is used. This is useful\nbecause on certain ESCs current measurements are inaccurate in case of no load.\nNegative values are ignored and will cause the measured current to be used.\nThe default value of 0 disables the overwrite, in which case the measured value\nis always used.\n\n", "name": "BAT3_I_OVERWRITE", "shortDesc": "Battery 3 idle current overwrite", "type": "Float"}, {"category": "Standard", "default": 0, "group": "Battery Calibration", "longDesc": "Defines the number of cells the attached battery consists of.\n\n", "name": "BAT3_N_CELLS", "shortDesc": "Number of cells for battery 3", "type": "Int32", "values": [{"description": "Unknown", "value": 0}, {"description": "1S Battery", "value": 1}, {"description": "2S Battery", "value": 2}, {"description": "3S Battery", "value": 3}, {"description": "4S Battery", "value": 4}, {"description": "5S Battery", "value": 5}, {"description": "6S Battery", "value": 6}, {"description": "7S Battery", "value": 7}, {"description": "8S Battery", "value": 8}, {"description": "9S Battery", "value": 9}, {"description": "10S Battery", "value": 10}, {"description": "11S Battery", "value": 11}, {"description": "12S Battery", "value": 12}, {"description": "13S Battery", "value": 13}, {"description": "14S Battery", "value": 14}, {"description": "15S Battery", "value": 15}, {"description": "16S Battery", "value": 16}]}, {"category": "Standard", "decimalPlaces": 4, "default": -1.0, "group": "Battery Calibration", "increment": 0.0005, "longDesc": "If non-negative, then this will be used instead of the online estimated internal resistance.\n\n", "max": 0.2, "min": -1.0, "name": "BAT3_R_INTERNAL", "rebootRequired": true, "shortDesc": "Explicitly defines the per cell internal resistance for battery 3", "type": "Float", "units": "Ohm"}, {"category": "Standard", "default": -1, "group": "Battery Calibration", "longDesc": "This parameter controls the source of battery data. The value 'Power Module / Analog'\nmeans that measurements are expected to come from either analog (ADC) inputs\nor an I2C power monitor (e.g. INA226). Analog inputs are voltage and current\nmeasurements read from the board's ADC channels, typically from an onboard\nvoltage divider and current shunt, or an external analog power module.\nI2C power monitors are digital sensors on the I2C bus.\nIf the value is set to 'External' then the system expects to receive MAVLink\nor CAN battery status messages, or the battery data is published by an external driver.\nIf the value is set to 'ESCs', the battery information are taken from the esc_status message.\nThis requires the ESC to provide both voltage as well as current (via ESC telemetry).\n\n", "name": "BAT3_SOURCE", "rebootRequired": true, "shortDesc": "Battery 3 monitoring source", "type": "Int32", "values": [{"description": "Disabled", "value": -1}, {"description": "Power Module / Analog", "value": 0}, {"description": "External", "value": 1}, {"description": "ESCs", "value": 2}]}, {"category": "Standard", "decimalPlaces": 2, "default": 4.05, "group": "Battery Calibration", "increment": 0.01, "longDesc": "Defines the voltage where a single cell of the battery is considered full.\nFor a more accurate estimate set this below the nominal voltage of e.g. 4.2V\n\n", "name": "BAT3_V_CHARGED", "rebootRequired": true, "shortDesc": "Full cell voltage", "type": "Float", "units": "V"}, {"category": "Standard", "decimalPlaces": 2, "default": 3.6, "group": "Battery Calibration", "increment": 0.01, "longDesc": "Defines the voltage where a single cell of the battery is considered empty.\nThe voltage should be chosen above the steep dropoff at 3.5V. A typical\nlithium battery can only be discharged under high load down to 10% before\nit drops off to a voltage level damaging the cells.\n\n", "name": "BAT3_V_EMPTY", "rebootRequired": true, "shortDesc": "Empty cell voltage", "type": "Float", "units": "V"}, {"category": "Standard", "decimalPlaces": 2, "default": 15.0, "group": "Battery Calibration", "increment": 0.1, "longDesc": "This value is used to initialize the in-flight average current estimation,\nwhich in turn is used for estimating remaining flight time and RTL triggering.\n\n", "max": 500.0, "min": 0.0, "name": "BAT_AVRG_CURRENT", "shortDesc": "Expected battery current in flight", "type": "Float", "units": "A"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.07, "group": "Battery Calibration", "increment": 0.01, "longDesc": "Sets the threshold when the battery will be reported as critically low.\nThis has to be lower than the low threshold. This threshold commonly\nwill trigger RTL.\n\n", "max": 0.5, "min": 0.05, "name": "BAT_CRIT_THR", "shortDesc": "Critical threshold", "type": "Float", "units": "norm"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.05, "group": "Battery Calibration", "increment": 0.01, "longDesc": "Sets the threshold when the battery will be reported as dangerously low.\nThis has to be lower than the critical threshold. This threshold commonly\nwill trigger landing.\n\n", "max": 0.5, "min": 0.03, "name": "BAT_EMERGEN_THR", "shortDesc": "Emergency threshold", "type": "Float", "units": "norm"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.15, "group": "Battery Calibration", "increment": 0.01, "longDesc": "Sets the threshold when the battery will be reported as low.\nThis has to be higher than the critical threshold.\n\n", "max": 0.5, "min": 0.12, "name": "BAT_LOW_THR", "shortDesc": "Low threshold", "type": "Float", "units": "norm"}, {"category": "Standard", "decimalPlaces": 1, "default": 40.0, "group": "Camera trigger", "longDesc": "This parameter sets the time the trigger needs to pulled high or low.\n", "max": 3000.0, "min": 0.1, "name": "TRIG_ACT_TIME", "rebootRequired": true, "shortDesc": "Camera trigger activation time", "type": "Float", "units": "ms"}, {"category": "Standard", "decimalPlaces": 1, "default": 25.0, "group": "Camera trigger", "increment": 1.0, "longDesc": "Sets the distance at which to trigger the camera.\n", "min": 0.0, "name": "TRIG_DISTANCE", "rebootRequired": true, "shortDesc": "Camera trigger distance", "type": "Float", "units": "m"}, {"category": "Standard", "default": 4, "group": "Camera trigger", "longDesc": "Selects the trigger interface\n", "name": "TRIG_INTERFACE", "rebootRequired": true, "shortDesc": "Camera trigger Interface", "type": "Int32", "values": [{"description": "GPIO", "value": 1}, {"description": "Seagull MAP2 (over PWM)", "value": 2}, {"description": "MAVLink (Camera Protocol v1)", "value": 3}, {"description": "Generic PWM (IR trigger, servo)", "value": 4}]}, {"category": "Standard", "decimalPlaces": 1, "default": 40.0, "group": "Camera trigger", "longDesc": "This parameter sets the time between two consecutive trigger events\n", "max": 10000.0, "min": 4.0, "name": "TRIG_INTERVAL", "rebootRequired": true, "shortDesc": "Camera trigger interval", "type": "Float", "units": "ms"}, {"category": "Standard", "decimalPlaces": 1, "default": 1.0, "group": "Camera trigger", "longDesc": "This parameter sets the minimum time between two consecutive trigger events\nthe specific camera setup is supporting.\n", "max": 10000.0, "min": 1.0, "name": "TRIG_MIN_INTERVA", "rebootRequired": true, "shortDesc": "Minimum camera trigger interval", "type": "Float", "units": "ms"}, {"category": "Standard", "default": 0, "group": "Camera trigger", "max": 4, "min": 0, "name": "TRIG_MODE", "rebootRequired": true, "shortDesc": "Camera trigger mode", "type": "Int32", "values": [{"description": "Disable", "value": 0}, {"description": "Time based, on command", "value": 1}, {"description": "Time based, always on", "value": 2}, {"description": "Distance based, always on", "value": 3}, {"description": "Distance based, on command (Survey mode)", "value": 4}]}, {"category": "Standard", "default": 0, "group": "Camera trigger", "longDesc": "This parameter sets the polarity of the trigger (0 = active low, 1 = active high )\n", "max": 1, "min": 0, "name": "TRIG_POLARITY", "rebootRequired": true, "shortDesc": "Camera trigger polarity", "type": "Int32", "values": [{"description": "Active low", "value": 0}, {"description": "Active high", "value": 1}]}, {"category": "Standard", "default": 1500, "group": "Camera trigger", "max": 2000, "min": 1000, "name": "TRIG_PWM_NEUTRAL", "rebootRequired": true, "shortDesc": "PWM neutral output on trigger pin", "type": "Int32", "units": "us"}, {"category": "Standard", "default": 1900, "group": "Camera trigger", "max": 2000, "min": 1000, "name": "TRIG_PWM_SHOOT", "rebootRequired": true, "shortDesc": "PWM output to trigger shot", "type": "Int32", "units": "us"}, {"category": "Developer", "default": 0, "group": "Circuit Breaker", "longDesc": "Setting this parameter to 782097 will disable the buzzer audio notification.\n\nSetting this parameter to 782090 will disable the startup tune, while keeping\nall others enabled.\n", "max": 782097, "min": 0, "name": "CBRK_BUZZER", "rebootRequired": true, "shortDesc": "Circuit breaker for disabling buzzer", "type": "Int32"}, {"category": "Developer", "default": 121212, "group": "Circuit Breaker", "longDesc": "Setting this parameter to 121212 will disable the flight termination action if triggered\nby the FailureDetector logic or if FMU is lost.\nThis circuit breaker does not affect the RC loss, data link loss, geofence,\nand takeoff failure detection safety logic.\n", "max": 121212, "min": 0, "name": "CBRK_FLIGHTTERM", "rebootRequired": true, "shortDesc": "Circuit breaker for flight termination", "type": "Int32"}, {"category": "Developer", "default": 22027, "group": "Circuit Breaker", "longDesc": "Setting this parameter to 22027 will disable IO safety.\nWARNING: ENABLING THIS CIRCUIT BREAKER IS AT OWN RISK\n", "max": 22027, "min": 0, "name": "CBRK_IO_SAFETY", "shortDesc": "Circuit breaker for IO safety", "type": "Int32"}, {"category": "Developer", "default": 0, "group": "Circuit Breaker", "longDesc": "Setting this parameter to 894281 will disable the power valid\nchecks in the commander.\nWARNING: ENABLING THIS CIRCUIT BREAKER IS AT OWN RISK\n", "max": 894281, "min": 0, "name": "CBRK_SUPPLY_CHK", "shortDesc": "Circuit breaker for power supply check", "type": "Int32"}, {"category": "Developer", "default": 197848, "group": "Circuit Breaker", "longDesc": "Setting this parameter to 197848 will disable the USB connected\nchecks in the commander, setting it to 0 keeps them enabled (recommended).\n\nWe are generally recommending to not fly with the USB link\nconnected and production vehicles should set this parameter to\nzero to prevent users from flying USB powered. However, for R&D purposes\nit has proven over the years to work just fine.\n", "max": 197848, "min": 0, "name": "CBRK_USB_CHK", "shortDesc": "Circuit breaker for USB link check", "type": "Int32"}, {"category": "Developer", "default": 0, "group": "Circuit Breaker", "longDesc": "Setting this parameter to 159753 will enable arming in fixed-wing\nmode for VTOLs.\nWARNING: ENABLING THIS CIRCUIT BREAKER IS AT OWN RISK\n", "max": 159753, "min": 0, "name": "CBRK_VTOLARMING", "shortDesc": "Circuit breaker for arming in fixed-wing mode check", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "Commander", "longDesc": "Note: actuator failure needs to be enabled and configured via FD_ACT_*\nparameters.\n", "max": 4, "min": 0, "name": "COM_ACT_FAIL_ACT", "shortDesc": "Set the actuator failure failsafe mode", "type": "Int32", "values": [{"description": "Warning only", "value": 0}, {"description": "Hold mode", "value": 1}, {"description": "Land mode", "value": 2}, {"description": "Return mode", "value": 3}, {"description": "Terminate", "value": 4}]}, {"category": "Standard", "default": 1, "group": "Commander", "longDesc": "Set 0 to prevent accidental use of the vehicle e.g. for safety or maintenance reasons.\n", "name": "COM_ARMABLE", "shortDesc": "Flag to allow arming", "type": "Int32", "values": [{"description": "Disallow arming", "value": 0}, {"description": "Allow arming", "value": 1}]}, {"category": "Standard", "default": 10, "group": "Commander", "longDesc": "Used if arm authorization is requested by COM_ARM_AUTH_REQ.\n", "name": "COM_ARM_AUTH_ID", "shortDesc": "Arm authorizer system id", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "Commander", "longDesc": "Methods:\n- one arm: request authorization and arm when authorization is received\n- two step arm: 1st arm command request an authorization and\n2nd arm command arm the drone if authorized\n\nUsed if arm authorization is requested by COM_ARM_AUTH_REQ.\n", "name": "COM_ARM_AUTH_MET", "shortDesc": "Arm authorization method", "type": "Int32", "values": [{"description": "one arm", "value": 0}, {"description": "two step arm", "value": 1}]}, {"category": "Standard", "default": 0, "group": "Commander", "longDesc": "By default off. The default allows to arm the vehicle without a arm authorization.\n", "name": "COM_ARM_AUTH_REQ", "shortDesc": "Require arm authorization to arm", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 1, "default": 1.0, "group": "Commander", "increment": 0.1, "longDesc": "Timeout for authorizer answer.\nUsed if arm authorization is requested by COM_ARM_AUTH_REQ.\n", "name": "COM_ARM_AUTH_TO", "shortDesc": "Arm authorization timeout", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": -1.0, "group": "Commander", "increment": 0.01, "longDesc": "Threshold for battery percentage below arming is prohibited.\n\nA negative value means BAT_CRIT_THR is the threshold.\n", "max": 0.9, "min": -1.0, "name": "COM_ARM_BAT_MIN", "shortDesc": "Minimum battery level for arming", "type": "Float", "units": "norm"}, {"category": "Standard", "default": 0, "group": "Commander", "longDesc": "If this parameter is set, the system will check ESC's online status and failures.\nThis param is specific for ESCs reporting status. It shall be used only if ESCs support telemetry.\n", "name": "COM_ARM_CHK_ESCS", "shortDesc": "Enable checks on ESCs that report telemetry", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 1, "group": "Commander", "longDesc": "This check detects if there are hardfault / watchdog files present on the\nSD card. If so, and the parameter is enabled, arming is prevented.\n", "name": "COM_ARM_HFLT_CHK", "shortDesc": "Enable FMU SD card hardfault / watchdog detection check", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.7, "group": "Commander", "increment": 0.05, "longDesc": "Maximum accelerometer inconsistency between IMU units that will allow arming\n", "max": 1.0, "min": 0.1, "name": "COM_ARM_IMU_ACC", "shortDesc": "Max accelerometer inconsistency for arming", "type": "Float", "units": "m/s^2"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.25, "group": "Commander", "increment": 0.01, "longDesc": "Maximum rate gyro inconsistency between IMU units that will allow arming\n", "max": 0.3, "min": 0.02, "name": "COM_ARM_IMU_GYR", "shortDesc": "Max rate gyro inconsistency for arming", "type": "Float", "units": "rad/s"}, {"category": "Standard", "default": 60, "group": "Commander", "longDesc": "Maximum magnetic field inconsistency between units that will allow arming\n\nSet -1 to disable the check.\n", "max": 180, "min": 3, "name": "COM_ARM_MAG_ANG", "shortDesc": "Max magnetic field inconsistency for arming", "type": "Int32", "units": "deg"}, {"category": "Standard", "default": 2, "group": "Commander", "longDesc": "Check if the estimator detects a strong magnetic\ndisturbance (check enabled by EKF2_MAG_CHECK)\n", "name": "COM_ARM_MAG_STR", "shortDesc": "Enable mag strength preflight check", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Deny arming", "value": 1}, {"description": "Warning only", "value": 2}]}, {"category": "Standard", "default": 0, "group": "Commander", "longDesc": "The default allows to arm the vehicle without a valid mission.\n", "name": "COM_ARM_MIS_REQ", "shortDesc": "Require valid mission to arm", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 0, "group": "Commander", "longDesc": "Actions other than warning also prevent arming.\n", "name": "COM_ARM_ODID", "shortDesc": "Open Drone ID system check and in-flight failsafe", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Warning only", "value": 1}, {"description": "Error only", "value": 2}, {"description": "Return", "value": 3}, {"description": "Land", "value": 4}, {"description": "Terminate", "value": 5}]}, {"category": "Standard", "default": 0, "group": "Commander", "longDesc": "When enabled, the vehicle arms automatically once all preflight checks pass after boot.\nThe vehicle will not re-arm after a manual disarm.\nHas no effect if COM_ARMABLE is 0.\n", "name": "COM_ARM_ON_BOOT", "rebootRequired": true, "shortDesc": "Arm automatically on boot", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 0, "group": "Commander", "longDesc": "0: Arming/disarming triggers on switch transition.\n1: Arming/disarming triggers when holding the momentary button down like the stick gesture.\n", "name": "COM_ARM_SWISBTN", "shortDesc": "Arm switch is a momentary button", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 0, "group": "Commander", "longDesc": "This check detects if a traffic avoidance system (ADSB/FLARM transponder)\nis missing. Depending on the value of the parameter, the check can be\ndisabled, warn only, or deny arming.\n", "name": "COM_ARM_TRAFF", "shortDesc": "Enable Traffic Avoidance system detection check", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Warning only", "value": 1}, {"description": "Enforce for all modes", "value": 2}, {"description": "Enforce for mission modes only", "value": 3}]}, {"category": "Standard", "default": 1, "group": "Commander", "longDesc": "Configures whether arming is allowed without GNSS, for modes that require a global position\n(specifically, in those modes when a check defined by EKF2_GPS_CHECK fails).\nThe settings deny arming and warn, allow arming and warn, or silently allow arming.\n", "name": "COM_ARM_WO_GPS", "shortDesc": "Arming without GNSS configuration", "type": "Int32", "values": [{"description": "Deny arming", "value": 0}, {"description": "Allow arming (with warning)", "value": 1}, {"description": "Allow arming (no warning)", "value": 2}]}, {"category": "Standard", "default": 95.0, "group": "Commander", "increment": 1.0, "longDesc": "The check fails if the CPU load is above this threshold for 2s.\n\nA negative value disables the check.\n", "max": 100.0, "min": -1.0, "name": "COM_CPU_MAX", "shortDesc": "Maximum allowed CPU load to still arm", "type": "Float", "units": "%"}, {"category": "Standard", "decimalPlaces": 1, "default": 2.0, "group": "Commander", "increment": 0.1, "longDesc": "A non-zero, positive value specifies the time-out period in seconds after which the vehicle will be\nautomatically disarmed in case a landing situation has been detected during this period.\n\nA zero or negative value means that automatic disarming triggered by landing detection is disabled.\n", "name": "COM_DISARM_LAND", "shortDesc": "Time-out for auto disarm after landing", "type": "Float", "units": "s"}, {"category": "Standard", "default": 1, "group": "Commander", "longDesc": "Allow disarming via switch/stick/button on multicopters in manual thrust modes\n\n0: Disallow disarming when not landed\n1: Allow disarming in multicopter flight in modes where\nthe thrust is directly controlled by thr throttle stick\ne.g. Stabilized, Acro\n", "name": "COM_DISARM_MAN", "shortDesc": "Allow disarming in manual thrust modes", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 1, "default": 10.0, "group": "Commander", "increment": 0.1, "longDesc": "A non-zero, positive value specifies the time in seconds, within which the\nvehicle is expected to take off after arming. In case the vehicle didn't takeoff\nwithin the timeout it disarms again.\n\nA negative value disables autmoatic disarming triggered by a pre-takeoff timeout.\n", "name": "COM_DISARM_PRFLT", "shortDesc": "Time-out for auto disarm if not taking off", "type": "Float", "units": "s"}, {"bitmask": [{"description": "Mission", "index": 0}, {"description": "Auto modes", "index": 1}, {"description": "Offboard", "index": 2}, {"description": "External Mode", "index": 3}, {"description": "Altitude Cruise", "index": 4}], "category": "Standard", "default": 0, "group": "Commander", "longDesc": "Specify modes in which ground control station connection loss is ignored and no failsafe action is triggered.\nSee also COM_RCL_EXCEPT.\n", "max": 31, "min": 0, "name": "COM_DLL_EXCEPT", "shortDesc": "Datalink loss exceptions", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 1, "default": 10, "group": "Commander", "increment": 1, "longDesc": "After this amount of seconds without datalink, the GCS connection lost mode triggers\n", "max": 300, "min": 5, "name": "COM_DL_LOSS_T", "shortDesc": "GCS connection loss time threshold", "type": "Int32", "units": "s"}, {"category": "Standard", "decimalPlaces": 1, "default": 5.0, "group": "Commander", "longDesc": "Before entering failsafe (RTL, Land, Hold), wait COM_FAIL_ACT_T seconds in Hold mode\nfor the user to realize.\nDuring that time the user can switch modes, but cannot take over control via the stick override feature (see COM_RC_OVERRIDE).\nAfterwards the configured failsafe action is triggered and the user may use stick override.\n\nA zero value disables the delay.\n", "max": 25.0, "min": 0.0, "name": "COM_FAIL_ACT_T", "shortDesc": "Delay between failsafe condition triggered and failsafe reaction", "type": "Float", "units": "s"}, {"category": "System", "default": 0, "group": "Commander", "longDesc": "This number is incremented automatically after every flight on\ndisarming in order to remember the next flight UUID.\nThe first flight is 0.\n", "min": 0, "name": "COM_FLIGHT_UUID", "shortDesc": "Next flight UUID", "type": "Int32", "volatile": true}, {"category": "Standard", "default": -1, "group": "Commander", "longDesc": "If the main switch channel is in this range the\nselected flight mode will be applied.\n\n", "name": "COM_FLTMODE1", "shortDesc": "Mode slot 1", "type": "Int32", "values": [{"description": "Unassigned", "value": -1}, {"description": "Manual", "value": 0}, {"description": "Altitude", "value": 1}, {"description": "Position", "value": 2}, {"description": "Mission", "value": 3}, {"description": "Hold", "value": 4}, {"description": "Return", "value": 5}, {"description": "Acro", "value": 6}, {"description": "Offboard", "value": 7}, {"description": "Stabilized", "value": 8}, {"description": "Position Slow", "value": 9}, {"description": "Takeoff", "value": 10}, {"description": "Land", "value": 11}, {"description": "Follow Me", "value": 12}, {"description": "Precision Land", "value": 13}, {"description": "Altitude Cruise", "value": 16}, {"description": "External Mode 1", "value": 100}, {"description": "External Mode 2", "value": 101}, {"description": "External Mode 3", "value": 102}, {"description": "External Mode 4", "value": 103}, {"description": "External Mode 5", "value": 104}, {"description": "External Mode 6", "value": 105}, {"description": "External Mode 7", "value": 106}, {"description": "External Mode 8", "value": 107}]}, {"category": "Standard", "default": -1, "group": "Commander", "longDesc": "If the main switch channel is in this range the\nselected flight mode will be applied.\n\n", "name": "COM_FLTMODE2", "shortDesc": "Mode slot 2", "type": "Int32", "values": [{"description": "Unassigned", "value": -1}, {"description": "Manual", "value": 0}, {"description": "Altitude", "value": 1}, {"description": "Position", "value": 2}, {"description": "Mission", "value": 3}, {"description": "Hold", "value": 4}, {"description": "Return", "value": 5}, {"description": "Acro", "value": 6}, {"description": "Offboard", "value": 7}, {"description": "Stabilized", "value": 8}, {"description": "Position Slow", "value": 9}, {"description": "Takeoff", "value": 10}, {"description": "Land", "value": 11}, {"description": "Follow Me", "value": 12}, {"description": "Precision Land", "value": 13}, {"description": "Altitude Cruise", "value": 16}, {"description": "External Mode 1", "value": 100}, {"description": "External Mode 2", "value": 101}, {"description": "External Mode 3", "value": 102}, {"description": "External Mode 4", "value": 103}, {"description": "External Mode 5", "value": 104}, {"description": "External Mode 6", "value": 105}, {"description": "External Mode 7", "value": 106}, {"description": "External Mode 8", "value": 107}]}, {"category": "Standard", "default": -1, "group": "Commander", "longDesc": "If the main switch channel is in this range the\nselected flight mode will be applied.\n\n", "name": "COM_FLTMODE3", "shortDesc": "Mode slot 3", "type": "Int32", "values": [{"description": "Unassigned", "value": -1}, {"description": "Manual", "value": 0}, {"description": "Altitude", "value": 1}, {"description": "Position", "value": 2}, {"description": "Mission", "value": 3}, {"description": "Hold", "value": 4}, {"description": "Return", "value": 5}, {"description": "Acro", "value": 6}, {"description": "Offboard", "value": 7}, {"description": "Stabilized", "value": 8}, {"description": "Position Slow", "value": 9}, {"description": "Takeoff", "value": 10}, {"description": "Land", "value": 11}, {"description": "Follow Me", "value": 12}, {"description": "Precision Land", "value": 13}, {"description": "Altitude Cruise", "value": 16}, {"description": "External Mode 1", "value": 100}, {"description": "External Mode 2", "value": 101}, {"description": "External Mode 3", "value": 102}, {"description": "External Mode 4", "value": 103}, {"description": "External Mode 5", "value": 104}, {"description": "External Mode 6", "value": 105}, {"description": "External Mode 7", "value": 106}, {"description": "External Mode 8", "value": 107}]}, {"category": "Standard", "default": -1, "group": "Commander", "longDesc": "If the main switch channel is in this range the\nselected flight mode will be applied.\n\n", "name": "COM_FLTMODE4", "shortDesc": "Mode slot 4", "type": "Int32", "values": [{"description": "Unassigned", "value": -1}, {"description": "Manual", "value": 0}, {"description": "Altitude", "value": 1}, {"description": "Position", "value": 2}, {"description": "Mission", "value": 3}, {"description": "Hold", "value": 4}, {"description": "Return", "value": 5}, {"description": "Acro", "value": 6}, {"description": "Offboard", "value": 7}, {"description": "Stabilized", "value": 8}, {"description": "Position Slow", "value": 9}, {"description": "Takeoff", "value": 10}, {"description": "Land", "value": 11}, {"description": "Follow Me", "value": 12}, {"description": "Precision Land", "value": 13}, {"description": "Altitude Cruise", "value": 16}, {"description": "External Mode 1", "value": 100}, {"description": "External Mode 2", "value": 101}, {"description": "External Mode 3", "value": 102}, {"description": "External Mode 4", "value": 103}, {"description": "External Mode 5", "value": 104}, {"description": "External Mode 6", "value": 105}, {"description": "External Mode 7", "value": 106}, {"description": "External Mode 8", "value": 107}]}, {"category": "Standard", "default": -1, "group": "Commander", "longDesc": "If the main switch channel is in this range the\nselected flight mode will be applied.\n\n", "name": "COM_FLTMODE5", "shortDesc": "Mode slot 5", "type": "Int32", "values": [{"description": "Unassigned", "value": -1}, {"description": "Manual", "value": 0}, {"description": "Altitude", "value": 1}, {"description": "Position", "value": 2}, {"description": "Mission", "value": 3}, {"description": "Hold", "value": 4}, {"description": "Return", "value": 5}, {"description": "Acro", "value": 6}, {"description": "Offboard", "value": 7}, {"description": "Stabilized", "value": 8}, {"description": "Position Slow", "value": 9}, {"description": "Takeoff", "value": 10}, {"description": "Land", "value": 11}, {"description": "Follow Me", "value": 12}, {"description": "Precision Land", "value": 13}, {"description": "Altitude Cruise", "value": 16}, {"description": "External Mode 1", "value": 100}, {"description": "External Mode 2", "value": 101}, {"description": "External Mode 3", "value": 102}, {"description": "External Mode 4", "value": 103}, {"description": "External Mode 5", "value": 104}, {"description": "External Mode 6", "value": 105}, {"description": "External Mode 7", "value": 106}, {"description": "External Mode 8", "value": 107}]}, {"category": "Standard", "default": -1, "group": "Commander", "longDesc": "If the main switch channel is in this range the\nselected flight mode will be applied.\n\n", "name": "COM_FLTMODE6", "shortDesc": "Mode slot 6", "type": "Int32", "values": [{"description": "Unassigned", "value": -1}, {"description": "Manual", "value": 0}, {"description": "Altitude", "value": 1}, {"description": "Position", "value": 2}, {"description": "Mission", "value": 3}, {"description": "Hold", "value": 4}, {"description": "Return", "value": 5}, {"description": "Acro", "value": 6}, {"description": "Offboard", "value": 7}, {"description": "Stabilized", "value": 8}, {"description": "Position Slow", "value": 9}, {"description": "Takeoff", "value": 10}, {"description": "Land", "value": 11}, {"description": "Follow Me", "value": 12}, {"description": "Precision Land", "value": 13}, {"description": "Altitude Cruise", "value": 16}, {"description": "External Mode 1", "value": 100}, {"description": "External Mode 2", "value": 101}, {"description": "External Mode 3", "value": 102}, {"description": "External Mode 4", "value": 103}, {"description": "External Mode 5", "value": 104}, {"description": "External Mode 6", "value": 105}, {"description": "External Mode 7", "value": 106}, {"description": "External Mode 8", "value": 107}]}, {"category": "Standard", "default": 0, "group": "Commander", "increment": 1, "longDesc": "Action the system takes when the remaining flight time is below\nthe estimated time it takes to reach the RTL destination.\n", "name": "COM_FLTT_LOW_ACT", "shortDesc": "Remaining flight time low failsafe", "type": "Int32", "values": [{"description": "None", "value": 0}, {"description": "Warning", "value": 1}, {"description": "Return", "value": 3}]}, {"category": "Standard", "default": -1, "group": "Commander", "longDesc": "The vehicle aborts the current operation and returns to launch when\nthe time since takeoff is above this value. It is not possible to resume the\nmission or switch to any auto mode other than RTL or Land. Taking over in any manual\nmode is still possible.\n\nStarting from 90% of the maximum flight time, a warning message will be sent\nevery 1 minute with the remaining time until automatic RTL.\n\nSet to -1 to disable.\n", "min": -1, "name": "COM_FLT_TIME_MAX", "shortDesc": "Maximum allowed flight time", "type": "Int32", "units": "s"}, {"category": "Standard", "default": 0, "group": "Commander", "longDesc": "Force safety when the vehicle disarms\n", "name": "COM_FORCE_SAFETY", "shortDesc": "Enable force safety", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 120, "group": "Commander", "longDesc": "After this amount of seconds without datalink the data link lost mode triggers\n", "max": 3600, "min": 60, "name": "COM_HLDL_LOSS_T", "shortDesc": "High Latency Datalink loss time threshold", "type": "Int32", "units": "s"}, {"category": "Standard", "default": 1, "group": "Commander", "longDesc": "Set home position automatically if possible.\n\nDuring missions, the latitude/longitude of the home position is locked and will not reset during intermediate landings.\nIt will only update once the mission is complete or landed outside of a mission.\nHowever, the altitude is still being adjusted to correct for GNSS vertical drift in the first 2 minutes after takeoff.\n", "name": "COM_HOME_EN", "rebootRequired": true, "shortDesc": "Home position enabled", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 0, "group": "Commander", "longDesc": "If set to true, the autopilot is allowed to set its home position after takeoff\nThe true home position is back-computed if a local position is estimate if available.\nIf no local position is available, home is set to the current position.\n", "name": "COM_HOME_IN_AIR", "shortDesc": "Allows setting the home position after takeoff", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 0, "group": "Commander", "longDesc": "Action the system takes at critical battery. See also BAT_CRIT_THR and BAT_EMERGEN_THR\nfor definition of battery states.\n", "name": "COM_LOW_BAT_ACT", "shortDesc": "Battery failsafe mode", "type": "Int32", "values": [{"description": "Warning", "value": 0}, {"description": "Land mode", "value": 2}, {"description": "Return at critical level, land at emergency level", "value": 3}]}, {"category": "System", "default": 0, "group": "Commander", "longDesc": "This parameter is automatically set to identify external modes. It ensures that modes\nget assigned to the same index independent from their startup order,\nwhich is required when mapping an external mode to an RC switch.\n\n", "name": "COM_MODE0_HASH", "shortDesc": "External mode identifier 0", "type": "Int32", "volatile": true}, {"category": "System", "default": 0, "group": "Commander", "longDesc": "This parameter is automatically set to identify external modes. It ensures that modes\nget assigned to the same index independent from their startup order,\nwhich is required when mapping an external mode to an RC switch.\n\n", "name": "COM_MODE1_HASH", "shortDesc": "External mode identifier 1", "type": "Int32", "volatile": true}, {"category": "System", "default": 0, "group": "Commander", "longDesc": "This parameter is automatically set to identify external modes. It ensures that modes\nget assigned to the same index independent from their startup order,\nwhich is required when mapping an external mode to an RC switch.\n\n", "name": "COM_MODE2_HASH", "shortDesc": "External mode identifier 2", "type": "Int32", "volatile": true}, {"category": "System", "default": 0, "group": "Commander", "longDesc": "This parameter is automatically set to identify external modes. It ensures that modes\nget assigned to the same index independent from their startup order,\nwhich is required when mapping an external mode to an RC switch.\n\n", "name": "COM_MODE3_HASH", "shortDesc": "External mode identifier 3", "type": "Int32", "volatile": true}, {"category": "System", "default": 0, "group": "Commander", "longDesc": "This parameter is automatically set to identify external modes. It ensures that modes\nget assigned to the same index independent from their startup order,\nwhich is required when mapping an external mode to an RC switch.\n\n", "name": "COM_MODE4_HASH", "shortDesc": "External mode identifier 4", "type": "Int32", "volatile": true}, {"category": "System", "default": 0, "group": "Commander", "longDesc": "This parameter is automatically set to identify external modes. It ensures that modes\nget assigned to the same index independent from their startup order,\nwhich is required when mapping an external mode to an RC switch.\n\n", "name": "COM_MODE5_HASH", "shortDesc": "External mode identifier 5", "type": "Int32", "volatile": true}, {"category": "System", "default": 0, "group": "Commander", "longDesc": "This parameter is automatically set to identify external modes. It ensures that modes\nget assigned to the same index independent from their startup order,\nwhich is required when mapping an external mode to an RC switch.\n\n", "name": "COM_MODE6_HASH", "shortDesc": "External mode identifier 6", "type": "Int32", "volatile": true}, {"category": "System", "default": 0, "group": "Commander", "longDesc": "This parameter is automatically set to identify external modes. It ensures that modes\nget assigned to the same index independent from their startup order,\nwhich is required when mapping an external mode to an RC switch.\n\n", "name": "COM_MODE7_HASH", "shortDesc": "External mode identifier 7", "type": "Int32", "volatile": true}, {"category": "Standard", "default": 0, "group": "Commander", "longDesc": "By default disabled for safety reasons\n", "name": "COM_MODE_ARM_CHK", "shortDesc": "Allow external mode registration while armed", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 0, "group": "Commander", "longDesc": "The offboard loss failsafe will only be entered after a timeout,\nset by COM_OF_LOSS_T in seconds.\n", "name": "COM_OBL_RC_ACT", "shortDesc": "Set offboard loss failsafe mode", "type": "Int32", "values": [{"description": "Position mode", "value": 0}, {"description": "Altitude mode", "value": 1}, {"description": "Stabilized", "value": 2}, {"description": "Return mode", "value": 3}, {"description": "Land mode", "value": 4}, {"description": "Hold mode", "value": 5}, {"description": "Terminate", "value": 6}, {"description": "Disarm", "value": 7}]}, {"category": "Standard", "default": 1.0, "group": "Commander", "increment": 0.01, "longDesc": "Time-out to wait when offboard connection is lost before triggering offboard lost action\n\nSee COM_OBL_RC_ACT to configure action.\n", "max": 60.0, "min": 0.0, "name": "COM_OF_LOSS_T", "shortDesc": "Offboard connection loss timeout", "type": "Float", "units": "s"}, {"category": "Standard", "default": 0, "group": "Commander", "name": "COM_PARACHUTE", "shortDesc": "Require MAVLink parachute system to be present and healthy", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 1, "default": 5.0, "group": "Commander", "longDesc": "This is the horizontal position error (EPH) threshold that will trigger a failsafe.\nIf the previous position error was below this threshold, there is an additional\nfactor of 2.5 applied (threshold for invalidation 2.5 times the one for validation).\nOnly used for multicopters and VTOLs in hover mode.\nIndependent from estimator positioning data timeout threshold (see EKF2_NOAID_TOUT).\n\nSet to -1 to disable.\n", "max": 400.0, "min": -1.0, "name": "COM_POS_FS_EPH", "shortDesc": "Horizontal position error threshold for hovering systems", "type": "Float", "units": "m"}, {"category": "Standard", "default": 3, "group": "Commander", "increment": 1, "longDesc": "Action the system takes when the estimated position has an accuracy below the specified threshold.\nSee COM_POS_LOW_EPH to set the failsafe threshold.\nThe failsafe action is only executed if the vehicle is in auto mission or auto loiter mode,\notherwise it is only a warning.\n", "name": "COM_POS_LOW_ACT", "shortDesc": "Low position accuracy action", "type": "Int32", "values": [{"description": "None", "value": 0}, {"description": "Warning", "value": 1}, {"description": "Hold", "value": 2}, {"description": "Return", "value": 3}, {"description": "Terminate", "value": 4}, {"description": "Land", "value": 5}]}, {"category": "Standard", "default": -1.0, "group": "Commander", "longDesc": "This triggers the action specified in COM_POS_LOW_ACT if the estimated position accuracy is below this threshold.\nLocal position has to be still declared valid, which requires some kind of velocity aiding or large dead-reckoning time (EKF2_NOAID_TOUT),\nand a high failsafe threshold (COM_POS_FS_EPH).\n\nSet to -1 to disable.\n", "max": 1000.0, "min": -1.0, "name": "COM_POS_LOW_EPH", "shortDesc": "Low position accuracy failsafe threshold", "type": "Float", "units": "m"}, {"category": "Standard", "default": 1, "group": "Commander", "longDesc": "This configures a check to verify the expected number of 5V rail power supplies are present. By default only one is expected.\nNote: CBRK_SUPPLY_CHK disables all power checks including this one.\n", "max": 4, "min": 0, "name": "COM_POWER_COUNT", "shortDesc": "Required number of redundant power modules", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "Commander", "longDesc": "Condition to enter the prearmed state, an intermediate state between disarmed and armed\nin which non-throttling actuators are active.\n", "name": "COM_PREARM_MODE", "shortDesc": "Condition to enter prearmed mode", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Safety button", "value": 1}, {"description": "Always", "value": 2}]}, {"category": "Standard", "default": 0, "group": "Commander", "name": "COM_QC_ACT", "shortDesc": "Set action after a quadchute", "type": "Int32", "values": [{"description": "Warning only", "value": -1}, {"description": "Return mode", "value": 0}, {"description": "Land mode", "value": 1}, {"description": "Hold mode", "value": 2}]}, {"category": "Standard", "default": 95.0, "group": "Commander", "increment": 1.0, "longDesc": "The check fails if the RAM usage is above this threshold.\n\nA negative value disables the check.\n", "max": 100.0, "min": -1.0, "name": "COM_RAM_MAX", "shortDesc": "Maximum allowed RAM usage to pass checks", "type": "Float", "units": "%"}, {"bitmask": [{"description": "Mission", "index": 0}, {"description": "Auto modes", "index": 1}, {"description": "Offboard", "index": 2}, {"description": "External Mode", "index": 3}, {"description": "Altitude Cruise", "index": 4}], "category": "Standard", "default": 0, "group": "Commander", "longDesc": "Specify modes in which stick input is ignored and no failsafe action is triggered.\nExternal modes requiring stick input will still failsafe.\nAuto modes are: Hold, Takeoff, Land, RTL, Descend, Follow Target, Precland, Orbit.\n", "max": 31, "min": 0, "name": "COM_RCL_EXCEPT", "shortDesc": "Manual control loss exceptions", "type": "Int32"}, {"category": "Standard", "default": 3, "group": "Commander", "longDesc": "Selects stick input selection behavior:\neither a traditional remote control receiver (RC) or a MAVLink joystick (MANUAL_CONTROL message)\n\nPriority sources are immediately switched to whenever they get valid.\n\n0 RC only. Requires valid RC calibration.\n1 MAVLink only. RC and related checks are disabled.\n2 Switches only if current source becomes invalid.\n3 Locks to the first valid source until reboot.\n4 Ignores all sources.\n5 RC priority, then MAVLink (lower instance before higher)\n6 MAVLink priority (lower instance before higher), then RC\n7 RC priority, then MAVLink (higher instance before lower)\n8 MAVLink priority (higher instance before lower), then RC\n", "max": 8, "min": 0, "name": "COM_RC_IN_MODE", "shortDesc": "Manual control input source configuration", "type": "Int32", "values": [{"description": "RC only", "value": 0}, {"description": "MAVLink only", "value": 1}, {"description": "RC or MAVLink with fallback", "value": 2}, {"description": "RC or MAVLink keep first", "value": 3}, {"description": "Disable manual control", "value": 4}, {"description": "Prio: RC > MAVL 1 > MAVL 2", "value": 5}, {"description": "Prio: MAVL 1 > MAVL 2 > RC", "value": 6}, {"description": "Prio: RC > MAVL 2 > MAVL 1", "value": 7}, {"description": "Prio: MAVL 2 > MAVL 1 > RC", "value": 8}]}, {"category": "Standard", "decimalPlaces": 1, "default": 0.5, "group": "Commander", "increment": 0.1, "longDesc": "The time in seconds without a new setpoint from RC or Joystick, after which the connection is considered lost.\nThis must be kept short as the vehicle will use the last supplied setpoint until the timeout triggers.\nEnsure the value is not set lower than the update interval of the RC or Joystick.\n", "max": 35.0, "min": 0.0, "name": "COM_RC_LOSS_T", "shortDesc": "Manual control loss timeout", "type": "Float", "units": "s"}, {"bitmask": [{"description": "Enable override during auto modes (except for in critical battery reaction)", "index": 0}, {"description": "Enable override during offboard mode", "index": 1}], "category": "Standard", "default": 1, "group": "Commander", "longDesc": "When enabled, moving the sticks more than COM_RC_STICK_OV\nimmediately gives control back to the pilot by switching to Position mode and\nif position is unavailable Altitude mode.\nNote: Only has an effect on multicopters, and VTOLs in multicopter mode.\n", "max": 3, "min": 0, "name": "COM_RC_OVERRIDE", "shortDesc": "Enable manual control stick override", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 0, "default": 30.0, "group": "Commander", "increment": 0.05, "longDesc": "If COM_RC_OVERRIDE is enabled and the joystick input is moved more than this threshold\nthe pilot takes over control.\n", "max": 80.0, "min": 5.0, "name": "COM_RC_STICK_OV", "shortDesc": "Stick override threshold", "type": "Float", "units": "%"}, {"category": "Standard", "decimalPlaces": 1, "default": 1.0, "group": "Commander", "increment": 0.1, "longDesc": "The minimal time from arming the motors until moving the vehicle is possible is COM_SPOOLUP_TIME seconds.\nGoal:\n- Motors and propellers spool up to idle speed before getting commanded to spin faster\n- Timeout for ESCs and smart batteries to successfulyy do failure checks\ne.g. for stuck rotors before the vehicle is off the ground\n", "max": 30.0, "min": 0.0, "name": "COM_SPOOLUP_TIME", "shortDesc": "Enforced delay between arming and further navigation", "type": "Float", "units": "s"}, {"category": "Standard", "default": 0, "group": "Commander", "longDesc": "Allows to start the vehicle by throwing it into the air.\n", "name": "COM_THROW_EN", "shortDesc": "Enable throw-start", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 1, "default": 5.0, "group": "Commander", "increment": 0.1, "longDesc": "When the throw launch is enabled, the drone will only allow motors to spin after this speed\nis exceeded before detecting the freefall. This is a safety feature to ensure the drone does\nnot turn on after accidental drop or a rapid movement before the throw.\n\nSet to 0 to disable.\n", "min": 0.0, "name": "COM_THROW_SPEED", "shortDesc": "Minimum speed for the throw start", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 1.0, "group": "Commander", "longDesc": "This is the horizontal velocity error (EVH) threshold that will trigger a failsafe.\nThe default is appropriate for a multicopter. Can be increased for a fixed-wing.\nIf the previous velocity error was below this threshold, there is an additional\nfactor of 2.5 applied (threshold for invalidation 2.5 times the one for validation).\n", "min": 0.0, "name": "COM_VEL_FS_EVH", "shortDesc": "Horizontal velocity error threshold", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": -1.0, "group": "Commander", "increment": 0.1, "longDesc": "Wind speed threshold above which an automatic failsafe action is triggered.\nFailsafe action can be specified with COM_WIND_MAX_ACT.\n", "min": -1.0, "name": "COM_WIND_MAX", "shortDesc": "High wind speed failsafe threshold", "type": "Float", "units": "m/s"}, {"category": "Standard", "default": 0, "group": "Commander", "increment": 1, "longDesc": "Action the system takes when a wind speed above the specified threshold is detected.\nSee COM_WIND_MAX to set the failsafe threshold.\nIf enabled, it is not possible to resume the mission or switch to any auto mode other than\nRTL or Land if this threshold is exceeded. Taking over in any manual\nmode is still possible.\n", "name": "COM_WIND_MAX_ACT", "shortDesc": "High wind failsafe mode", "type": "Int32", "values": [{"description": "None", "value": 0}, {"description": "Warning", "value": 1}, {"description": "Hold", "value": 2}, {"description": "Return", "value": 3}, {"description": "Terminate", "value": 4}, {"description": "Land", "value": 5}]}, {"category": "Standard", "decimalPlaces": 1, "default": -1.0, "group": "Commander", "increment": 0.1, "longDesc": "A warning is triggered if the currently estimated wind speed is above this value.\nWarning is sent periodically (every 1 minute).\n\nSet to -1 to disable.\n", "min": -1.0, "name": "COM_WIND_WARN", "shortDesc": "Wind speed warning threshold", "type": "Float", "units": "m/s"}, {"category": "Standard", "default": 0, "group": "Commander", "longDesc": "The GCS connection loss failsafe will only be entered after a timeout,\nset by COM_DL_LOSS_T in seconds. Once the timeout occurs the selected\naction will be executed.\n", "max": 6, "min": 0, "name": "NAV_DLL_ACT", "shortDesc": "Set GCS connection loss failsafe mode", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Hold mode", "value": 1}, {"description": "Return mode", "value": 2}, {"description": "Land mode", "value": 3}, {"description": "Terminate", "value": 5}, {"description": "Disarm", "value": 6}]}, {"category": "Standard", "default": 2, "group": "Commander", "longDesc": "The manual control loss failsafe will only be entered after a timeout,\nset by COM_RC_LOSS_T in seconds.\n", "max": 6, "min": 1, "name": "NAV_RCL_ACT", "shortDesc": "Set manual control loss failsafe mode", "type": "Int32", "values": [{"description": "Hold mode", "value": 1}, {"description": "Return mode", "value": 2}, {"description": "Land mode", "value": 3}, {"description": "Terminate", "value": 5}, {"description": "Disarm", "value": 6}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.2, "group": "EKF2", "max": 0.5, "min": 0.0, "name": "EKF2_ABIAS_INIT", "rebootRequired": true, "shortDesc": "1-sigma IMU accelerometer switch-on bias", "type": "Float", "units": "m/s^2"}, {"category": "Standard", "decimalPlaces": 1, "default": 25.0, "group": "EKF2", "longDesc": "If the magnitude of the IMU accelerometer vector exceeds this value, the EKF accel bias state estimation will be inhibited. This reduces the adverse effect of high manoeuvre accelerations and IMU nonlinerity and scale factor errors on the accel bias estimates.\n", "max": 200.0, "min": 20.0, "name": "EKF2_ABL_ACCLIM", "shortDesc": "Maximum IMU accel magnitude that allows IMU bias learning", "type": "Float", "units": "m/s^2"}, {"category": "Standard", "decimalPlaces": 1, "default": 3.0, "group": "EKF2", "longDesc": "If the magnitude of the IMU angular rate vector exceeds this value, the EKF accel bias state estimation will be inhibited. This reduces the adverse effect of rapid rotation rates and associated errors on the accel bias estimates.\n", "max": 20.0, "min": 2.0, "name": "EKF2_ABL_GYRLIM", "shortDesc": "Maximum IMU gyro angular rate magnitude that allows IMU bias learning", "type": "Float", "units": "rad/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.4, "group": "EKF2", "longDesc": "The ekf accel bias states will be limited to within a range equivalent to +- of this value.\n", "max": 0.8, "min": 0.0, "name": "EKF2_ABL_LIM", "shortDesc": "Accelerometer bias learning limit", "type": "Float", "units": "m/s^2"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.5, "group": "EKF2", "longDesc": "The vector magnitude of angular rate and acceleration used to check if learning should be inhibited has a peak hold filter applied to it with an exponential decay. This parameter controls the time constant of the decay.\n", "max": 1.0, "min": 0.1, "name": "EKF2_ABL_TAU", "shortDesc": "Accel bias learning inhibit time constant", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 6, "default": 0.003, "group": "EKF2", "max": 0.01, "min": 0.0, "name": "EKF2_ACC_B_NOISE", "shortDesc": "Process noise for IMU accelerometer bias prediction", "type": "Float", "units": "m/s^3"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.35, "group": "EKF2", "max": 1.0, "min": 0.01, "name": "EKF2_ACC_NOISE", "shortDesc": "Accelerometer noise for covariance prediction", "type": "Float", "units": "m/s^2"}, {"bitmask": [{"description": "Horizontal position", "index": 0}, {"description": "Vertical position", "index": 1}], "category": "Standard", "default": 0, "group": "EKF2", "longDesc": "Set bits in the following positions to enable: 0 : Horizontal position fusion 1 : Vertical position fusion\n", "max": 3, "min": 0, "name": "EKF2_AGP0_CTRL", "shortDesc": "Auxiliary global position sensor 0 aiding", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "EKF2", "max": 1000.0, "min": 0.0, "name": "EKF2_AGP0_DELAY", "rebootRequired": true, "shortDesc": "Auxiliary global position sensor 0 delay (to IMU)", "type": "Float", "units": "ms"}, {"category": "Standard", "decimalPlaces": 1, "default": 3.0, "group": "EKF2", "longDesc": "Sets the number of standard deviations used by the innovation consistency test.\n", "min": 1.0, "name": "EKF2_AGP0_GATE", "shortDesc": "Gate size for auxiliary global position sensor 0 fusion", "type": "Float", "units": "SD"}, {"category": "Standard", "default": 0, "group": "EKF2", "longDesc": "Sensor ID for slot 0. Set to 0 to disable this slot.\n", "max": 255, "min": 0, "name": "EKF2_AGP0_ID", "shortDesc": "Auxiliary global position sensor 0 ID", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "EKF2", "longDesc": "Automatic: reset on fusion timeout if no other source of position is available Dead-reckoning: reset on fusion timeout if no source of velocity is available\n", "name": "EKF2_AGP0_MODE", "shortDesc": "Fusion reset mode for sensor 0", "type": "Int32", "values": [{"description": "Automatic", "value": 0}, {"description": "Dead-reckoning", "value": 1}]}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "EKF2", "longDesc": "Used to lower bound or replace the uncertainty included in the message\n", "min": 0.01, "name": "EKF2_AGP0_NOISE", "shortDesc": "Measurement noise for auxiliary global position sensor 0", "type": "Float", "units": "m"}, {"bitmask": [{"description": "Horizontal position", "index": 0}, {"description": "Vertical position", "index": 1}], "category": "Standard", "default": 0, "group": "EKF2", "longDesc": "Set bits in the following positions to enable: 0 : Horizontal position fusion 1 : Vertical position fusion\n", "max": 3, "min": 0, "name": "EKF2_AGP1_CTRL", "shortDesc": "Auxiliary global position sensor 1 aiding", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "EKF2", "max": 1000.0, "min": 0.0, "name": "EKF2_AGP1_DELAY", "rebootRequired": true, "shortDesc": "Auxiliary global position sensor 1 delay (to IMU)", "type": "Float", "units": "ms"}, {"category": "Standard", "decimalPlaces": 1, "default": 3.0, "group": "EKF2", "longDesc": "Sets the number of standard deviations used by the innovation consistency test.\n", "min": 1.0, "name": "EKF2_AGP1_GATE", "shortDesc": "Gate size for auxiliary global position sensor 1 fusion", "type": "Float", "units": "SD"}, {"category": "Standard", "default": 0, "group": "EKF2", "longDesc": "Sensor ID for slot 1. Set to 0 to disable this slot.\n", "max": 255, "min": 0, "name": "EKF2_AGP1_ID", "shortDesc": "Auxiliary global position sensor 1 ID", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "EKF2", "longDesc": "Automatic: reset on fusion timeout if no other source of position is available Dead-reckoning: reset on fusion timeout if no source of velocity is available\n", "name": "EKF2_AGP1_MODE", "shortDesc": "Fusion reset mode for sensor 1", "type": "Int32", "values": [{"description": "Automatic", "value": 0}, {"description": "Dead-reckoning", "value": 1}]}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "EKF2", "longDesc": "Used to lower bound or replace the uncertainty included in the message\n", "min": 0.01, "name": "EKF2_AGP1_NOISE", "shortDesc": "Measurement noise for auxiliary global position sensor 1", "type": "Float", "units": "m"}, {"bitmask": [{"description": "Horizontal position", "index": 0}, {"description": "Vertical position", "index": 1}], "category": "Standard", "default": 0, "group": "EKF2", "longDesc": "Set bits in the following positions to enable: 0 : Horizontal position fusion 1 : Vertical position fusion\n", "max": 3, "min": 0, "name": "EKF2_AGP2_CTRL", "shortDesc": "Auxiliary global position sensor 2 aiding", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "EKF2", "max": 1000.0, "min": 0.0, "name": "EKF2_AGP2_DELAY", "rebootRequired": true, "shortDesc": "Auxiliary global position sensor 2 delay (to IMU)", "type": "Float", "units": "ms"}, {"category": "Standard", "decimalPlaces": 1, "default": 3.0, "group": "EKF2", "longDesc": "Sets the number of standard deviations used by the innovation consistency test.\n", "min": 1.0, "name": "EKF2_AGP2_GATE", "shortDesc": "Gate size for auxiliary global position sensor 2 fusion", "type": "Float", "units": "SD"}, {"category": "Standard", "default": 0, "group": "EKF2", "longDesc": "Sensor ID for slot 2. Set to 0 to disable this slot.\n", "max": 255, "min": 0, "name": "EKF2_AGP2_ID", "shortDesc": "Auxiliary global position sensor 2 ID", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "EKF2", "longDesc": "Automatic: reset on fusion timeout if no other source of position is available Dead-reckoning: reset on fusion timeout if no source of velocity is available\n", "name": "EKF2_AGP2_MODE", "shortDesc": "Fusion reset mode for sensor 2", "type": "Int32", "values": [{"description": "Automatic", "value": 0}, {"description": "Dead-reckoning", "value": 1}]}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "EKF2", "longDesc": "Used to lower bound or replace the uncertainty included in the message\n", "min": 0.01, "name": "EKF2_AGP2_NOISE", "shortDesc": "Measurement noise for auxiliary global position sensor 2", "type": "Float", "units": "m"}, {"bitmask": [{"description": "Horizontal position", "index": 0}, {"description": "Vertical position", "index": 1}], "category": "Standard", "default": 0, "group": "EKF2", "longDesc": "Set bits in the following positions to enable: 0 : Horizontal position fusion 1 : Vertical position fusion\n", "max": 3, "min": 0, "name": "EKF2_AGP3_CTRL", "shortDesc": "Auxiliary global position sensor 3 aiding", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "EKF2", "max": 1000.0, "min": 0.0, "name": "EKF2_AGP3_DELAY", "rebootRequired": true, "shortDesc": "Auxiliary global position sensor 3 delay (to IMU)", "type": "Float", "units": "ms"}, {"category": "Standard", "decimalPlaces": 1, "default": 3.0, "group": "EKF2", "longDesc": "Sets the number of standard deviations used by the innovation consistency test.\n", "min": 1.0, "name": "EKF2_AGP3_GATE", "shortDesc": "Gate size for auxiliary global position sensor 3 fusion", "type": "Float", "units": "SD"}, {"category": "Standard", "default": 0, "group": "EKF2", "longDesc": "Sensor ID for slot 3. Set to 0 to disable this slot.\n", "max": 255, "min": 0, "name": "EKF2_AGP3_ID", "shortDesc": "Auxiliary global position sensor 3 ID", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "EKF2", "longDesc": "Automatic: reset on fusion timeout if no other source of position is available Dead-reckoning: reset on fusion timeout if no source of velocity is available\n", "name": "EKF2_AGP3_MODE", "shortDesc": "Fusion reset mode for sensor 3", "type": "Int32", "values": [{"description": "Automatic", "value": 0}, {"description": "Dead-reckoning", "value": 1}]}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "EKF2", "longDesc": "Used to lower bound or replace the uncertainty included in the message\n", "min": 0.01, "name": "EKF2_AGP3_NOISE", "shortDesc": "Measurement noise for auxiliary global position sensor 3", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.1, "group": "EKF2", "max": 0.5, "min": 0.0, "name": "EKF2_ANGERR_INIT", "rebootRequired": true, "shortDesc": "1-sigma tilt angle uncertainty after gravity vector alignment", "type": "Float", "units": "rad"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "EKF2", "longDesc": "Airspeed data is fused for wind estimation if above this threshold. Set to 0 to disable airspeed fusion. For reliable wind estimation both sideslip (see EKF2_FUSE_BETA) and airspeed fusion should be enabled. Only applies to fixed-wing vehicles (or VTOLs in fixed-wing mode).\n", "min": 0.0, "name": "EKF2_ARSP_THR", "shortDesc": "Airspeed fusion threshold", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 20.0, "group": "EKF2", "max": 50.0, "min": 5.0, "name": "EKF2_ASPD_MAX", "shortDesc": "Maximum airspeed used for baro static pressure compensation", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 100.0, "group": "EKF2", "max": 300.0, "min": 0.0, "name": "EKF2_ASP_DELAY", "rebootRequired": true, "shortDesc": "Airspeed measurement delay relative to IMU measurements", "type": "Float", "units": "ms"}, {"category": "Standard", "decimalPlaces": 1, "default": 5.0, "group": "EKF2", "max": 300.0, "min": 0.0, "name": "EKF2_AVEL_DELAY", "rebootRequired": true, "shortDesc": "Auxiliary Velocity Estimate delay relative to IMU measurements", "type": "Float", "units": "ms"}, {"category": "Standard", "default": 1, "group": "EKF2", "longDesc": "If this parameter is enabled then the estimator will make use of the barometric height measurements to estimate its height in addition to other height sources (if activated).\n", "name": "EKF2_BARO_CTRL", "shortDesc": "Barometric sensor height aiding", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "EKF2", "max": 300.0, "min": 0.0, "name": "EKF2_BARO_DELAY", "rebootRequired": true, "shortDesc": "Barometer measurement delay relative to IMU measurements", "type": "Float", "units": "ms"}, {"category": "Standard", "decimalPlaces": 1, "default": 5.0, "group": "EKF2", "longDesc": "Sets the number of standard deviations used by the innovation consistency test.\n", "min": 1.0, "name": "EKF2_BARO_GATE", "shortDesc": "Gate size for barometric and GPS height fusion", "type": "Float", "units": "SD"}, {"category": "Standard", "decimalPlaces": 2, "default": 3.5, "group": "EKF2", "max": 15.0, "min": 0.01, "name": "EKF2_BARO_NOISE", "shortDesc": "Measurement noise for barometric altitude", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 1, "default": 100.0, "group": "EKF2", "longDesc": "This parameter controls the prediction of drag produced by bluff body drag along the forward/reverse axis when flying a multi-copter which enables estimation of wind drift when enabled by the EKF2_DRAG_CTRL parameter. The drag produced by this effect scales with speed squared. The predicted drag from the rotors is specified separately by the EKF2_MCOEF parameter. Set this parameter to zero to turn off the bluff body drag model for this axis.\n", "max": 200.0, "min": 0.0, "name": "EKF2_BCOEF_X", "shortDesc": "X-axis ballistic coefficient used for multi-rotor wind estimation", "type": "Float", "units": "kg/m^2"}, {"category": "Standard", "decimalPlaces": 1, "default": 100.0, "group": "EKF2", "longDesc": "This parameter controls the prediction of drag produced by bluff body drag along the right/left axis when flying a multi-copter, which enables estimation of wind drift when enabled by the EKF2_DRAG_CTRL parameter. The drag produced by this effect scales with speed squared. The predicted drag from the rotors is specified separately by the EKF2_MCOEF parameter. Set this parameter to zero to turn off the bluff body drag model for this axis.\n", "max": 200.0, "min": 0.0, "name": "EKF2_BCOEF_Y", "shortDesc": "Y-axis ballistic coefficient used for multi-rotor wind estimation", "type": "Float", "units": "kg/m^2"}, {"category": "Standard", "decimalPlaces": 1, "default": 5.0, "group": "EKF2", "longDesc": "Sets the number of standard deviations used by the innovation consistency test.\n", "min": 1.0, "name": "EKF2_BETA_GATE", "shortDesc": "Gate size for synthetic sideslip fusion", "type": "Float", "units": "SD"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.3, "group": "EKF2", "max": 1.0, "min": 0.1, "name": "EKF2_BETA_NOISE", "shortDesc": "Noise for synthetic sideslip fusion", "type": "Float", "units": "m/s"}, {"bitmask": [{"description": "use geo_lookup declination", "index": 0}, {"description": "save EKF2_MAG_DECL on disarm", "index": 1}], "category": "Standard", "default": 3, "group": "EKF2", "longDesc": "Set bits in the following positions to enable functions. 0 : Set to true to use the declination from the geo_lookup library when the GPS position becomes available, set to false to always use the EKF2_MAG_DECL value. 1 : Set to true to save the EKF2_MAG_DECL parameter to the value returned by the EKF when the vehicle disarms.\n", "max": 3, "min": 0, "name": "EKF2_DECL_TYPE", "rebootRequired": true, "shortDesc": "Integer bitmask controlling handling of magnetic declination", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 1, "default": 200.0, "group": "EKF2", "longDesc": "Defines the delay between the current time and the delayed-time horizon. This value should be at least as large as the largest EKF2_XXX_DELAY parameter.\n", "max": 1000.0, "min": 0.0, "name": "EKF2_DELAY_MAX", "rebootRequired": true, "shortDesc": "Maximum delay of all the aiding sensors", "type": "Float", "units": "ms"}, {"category": "Standard", "default": 0, "group": "EKF2", "longDesc": "Activate wind speed estimation using specific-force measurements and a drag model defined by EKF2_BCOEF_[XY] and EKF2_MCOEF. Only use on vehicles that have their thrust aligned with the Z axis and no thrust in the XY plane.\n", "name": "EKF2_DRAG_CTRL", "shortDesc": "Multirotor wind estimation selection", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 2, "default": 2.5, "group": "EKF2", "longDesc": "Used by the multi-rotor specific drag force model. Increasing this makes the multi-rotor wind estimates adjust more slowly.\n", "max": 10.0, "min": 0.5, "name": "EKF2_DRAG_NOISE", "shortDesc": "Specific drag force observation noise variance", "type": "Float", "units": "(m/s^2)^2"}, {"category": "Standard", "decimalPlaces": 1, "default": 1.4, "group": "EKF2", "max": 5.0, "min": 0.5, "name": "EKF2_EAS_NOISE", "shortDesc": "Measurement noise for airspeed fusion", "type": "Float", "units": "m/s"}, {"category": "Standard", "default": 1, "group": "EKF2", "name": "EKF2_EN", "shortDesc": "EKF2 enable", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.1, "group": "EKF2", "longDesc": "Used to lower bound or replace the uncertainty included in the message\n", "min": 0.05, "name": "EKF2_EVA_NOISE", "shortDesc": "Measurement noise for vision angle measurements", "type": "Float", "units": "rad"}, {"category": "Standard", "decimalPlaces": 1, "default": 5.0, "group": "EKF2", "longDesc": "Sets the number of standard deviations used by the innovation consistency test.\n", "min": 1.0, "name": "EKF2_EVP_GATE", "shortDesc": "Gate size for vision position fusion", "type": "Float", "units": "SD"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.1, "group": "EKF2", "longDesc": "Used to lower bound or replace the uncertainty included in the message\n", "min": 0.01, "name": "EKF2_EVP_NOISE", "shortDesc": "Measurement noise for vision position measurements", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 1, "default": 3.0, "group": "EKF2", "longDesc": "Sets the number of standard deviations used by the innovation consistency test.\n", "min": 1.0, "name": "EKF2_EVV_GATE", "shortDesc": "Gate size for vision velocity estimate fusion", "type": "Float", "units": "SD"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.1, "group": "EKF2", "longDesc": "Used to lower bound or replace the uncertainty included in the message\n", "min": 0.01, "name": "EKF2_EVV_NOISE", "shortDesc": "Measurement noise for vision velocity measurements", "type": "Float", "units": "m/s"}, {"bitmask": [{"description": "Horizontal position", "index": 0}, {"description": "Vertical position", "index": 1}, {"description": "3D velocity", "index": 2}, {"description": "Yaw", "index": 3}], "category": "Standard", "default": 0, "group": "EKF2", "longDesc": "Set bits in the following positions to enable: 0 : Horizontal position fusion 1 : Vertical position fusion 2 : 3D velocity fusion 3 : Yaw\n", "max": 15, "min": 0, "name": "EKF2_EV_CTRL", "shortDesc": "External vision (EV) sensor aiding", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "EKF2", "max": 300.0, "min": 0.0, "name": "EKF2_EV_DELAY", "rebootRequired": true, "shortDesc": "Vision Position Estimator delay relative to IMU measurements", "type": "Float", "units": "ms"}, {"category": "Standard", "default": 0, "group": "EKF2", "longDesc": "If set to 0 (default) the measurement noise is taken from the vision message and the EV noise parameters are used as a lower bound. If set to 1 the observation noise is set from the parameters directly,\n", "name": "EKF2_EV_NOISE_MD", "shortDesc": "External vision (EV) noise mode", "type": "Int32", "values": [{"description": "EV reported variance (parameter lower bound)", "value": 0}, {"description": "EV noise parameters", "value": 1}]}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "EKF2", "longDesc": "Forward axis with origin relative to vehicle centre of gravity\n", "name": "EKF2_EV_POS_X", "shortDesc": "X position of VI sensor focal point in body frame", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "EKF2", "longDesc": "Forward axis with origin relative to vehicle centre of gravity\n", "name": "EKF2_EV_POS_Y", "shortDesc": "Y position of VI sensor focal point in body frame", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "EKF2", "longDesc": "Forward axis with origin relative to vehicle centre of gravity\n", "name": "EKF2_EV_POS_Z", "shortDesc": "Z position of VI sensor focal point in body frame", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 1, "default": 0, "group": "EKF2", "longDesc": "External vision will only be started and fused if the quality metric is above this threshold. The quality metric is a completely optional field provided by some VIO systems.\n", "max": 100, "min": 0, "name": "EKF2_EV_QMIN", "shortDesc": "External vision (EV) minimum quality (optional)", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "EKF2", "longDesc": "For reliable wind estimation both sideslip and airspeed fusion (see EKF2_ARSP_THR) should be enabled. Only applies to vehicles in fixed-wing mode or with airspeed fusion active. Note: side slip fusion is currently not supported for tailsitters.\n", "name": "EKF2_FUSE_BETA", "shortDesc": "Enable synthetic sideslip fusion", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.1, "group": "EKF2", "max": 0.2, "min": 0.0, "name": "EKF2_GBIAS_INIT", "rebootRequired": true, "shortDesc": "1-sigma IMU gyro switch-on bias", "type": "Float", "units": "rad/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 4.0, "group": "EKF2", "longDesc": "Sets the value of deadzone applied to negative baro innovations. Deadzone is enabled when EKF2_GND_EFF_DZ > 0.\n", "max": 10.0, "min": 0.0, "name": "EKF2_GND_EFF_DZ", "shortDesc": "Baro deadzone range for height fusion", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.5, "group": "EKF2", "longDesc": "Sets the maximum distance to the ground level where negative baro innovations are expected.\n", "max": 5.0, "min": 0.0, "name": "EKF2_GND_MAX_HGT", "shortDesc": "Height above ground level for ground effect zone", "type": "Float", "units": "m"}, {"bitmask": [{"description": "Sat count (EKF2_REQ_NSATS)", "index": 0}, {"description": "PDOP (EKF2_REQ_PDOP)", "index": 1}, {"description": "EPH (EKF2_REQ_EPH)", "index": 2}, {"description": "EPV (EKF2_REQ_EPV)", "index": 3}, {"description": "Speed accuracy (EKF2_REQ_SACC)", "index": 4}, {"description": "Horizontal position drift (EKF2_REQ_HDRIFT)", "index": 5}, {"description": "Vertical position drift (EKF2_REQ_VDRIFT)", "index": 6}, {"description": "Horizontal speed offset (EKF2_REQ_HDRIFT)", "index": 7}, {"description": "Vertical speed offset (EKF2_REQ_VDRIFT)", "index": 8}, {"description": "Spoofing", "index": 9}, {"description": "GPS fix type (EKF2_REQ_FIX)", "index": 10}, {"description": "Jamming", "index": 11}], "category": "Standard", "default": 2047, "group": "EKF2", "longDesc": "Each threshold value is defined by the parameter indicated next to the check. Drift and offset checks only run when the vehicle is on ground and stationary.\n", "max": 4095, "min": 0, "name": "EKF2_GPS_CHECK", "shortDesc": "Integer bitmask controlling GPS checks", "type": "Int32"}, {"bitmask": [{"description": "Lon/lat", "index": 0}, {"description": "Altitude", "index": 1}, {"description": "3D velocity", "index": 2}, {"description": "Dual antenna heading", "index": 3}], "category": "Standard", "default": 7, "group": "EKF2", "longDesc": "Set bits in the following positions to enable: 0 : Longitude and latitude fusion 1 : Altitude fusion 2 : 3D velocity fusion 3 : Dual antenna heading fusion\n", "max": 15, "min": 0, "name": "EKF2_GPS_CTRL", "shortDesc": "GNSS sensor aiding", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "EKF2", "longDesc": "Automatic: reset on fusion timeout if no other source of position is available. Dead-reckoning: reset on fusion timeout if no source of velocity is available.\n", "name": "EKF2_GPS_MODE", "shortDesc": "Fusion reset mode", "type": "Int32", "values": [{"description": "Automatic", "value": 0}, {"description": "Dead-reckoning", "value": 1}]}, {"category": "Standard", "decimalPlaces": 1, "default": 5.0, "group": "EKF2", "longDesc": "Sets the number of standard deviations used by the innovation consistency test.\n", "min": 1.0, "name": "EKF2_GPS_P_GATE", "shortDesc": "Gate size for GNSS position fusion", "type": "Float", "units": "SD"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.5, "group": "EKF2", "max": 10.0, "min": 0.01, "name": "EKF2_GPS_P_NOISE", "shortDesc": "Measurement noise for GNSS position", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 1, "default": 5.0, "group": "EKF2", "longDesc": "Sets the number of standard deviations used by the innovation consistency test.\n", "min": 1.0, "name": "EKF2_GPS_V_GATE", "shortDesc": "Gate size for GNSS velocity fusion", "type": "Float", "units": "SD"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.3, "group": "EKF2", "max": 5.0, "min": 0.01, "name": "EKF2_GPS_V_NOISE", "shortDesc": "Measurement noise for GNSS velocity", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "EKF2", "max": 360.0, "min": 0.0, "name": "EKF2_GPS_YAW_OFF", "shortDesc": "Heading/Yaw offset for dual antenna GPS", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "EKF2", "max": 10.0, "min": 0.1, "name": "EKF2_GRAV_NOISE", "shortDesc": "Accelerometer measurement noise for gravity based observations", "type": "Float", "units": "g0"}, {"category": "Standard", "decimalPlaces": 1, "default": 15.0, "group": "EKF2", "longDesc": "If no airspeed measurements are available, the EKF-GSF AHRS calculation will assume this value of true airspeed when compensating for centripetal acceleration during turns. Set to zero to disable centripetal acceleration compensation during fixed wing flight modes.\n", "max": 100.0, "min": 0.0, "name": "EKF2_GSF_TAS", "shortDesc": "Default value of true airspeed used in EKF-GSF AHRS calculation", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.15, "group": "EKF2", "longDesc": "The ekf gyro bias states will be limited to within a range equivalent to +- of this value.\n", "max": 0.4, "min": 0.0, "name": "EKF2_GYR_B_LIM", "shortDesc": "Gyro bias learning limit", "type": "Float", "units": "rad/s"}, {"category": "Standard", "decimalPlaces": 6, "default": 0.001, "group": "EKF2", "max": 0.01, "min": 0.0, "name": "EKF2_GYR_B_NOISE", "shortDesc": "Process noise for IMU rate gyro bias prediction", "type": "Float", "units": "rad/s^2"}, {"category": "Standard", "decimalPlaces": 4, "default": 0.015, "group": "EKF2", "max": 0.1, "min": 0.0001, "name": "EKF2_GYR_NOISE", "shortDesc": "Rate gyro noise for covariance prediction", "type": "Float", "units": "rad/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 2.6, "group": "EKF2", "longDesc": "Sets the number of standard deviations used by the innovation consistency test.\n", "min": 1.0, "name": "EKF2_HDG_GATE", "shortDesc": "Gate size for heading fusion", "type": "Float", "units": "SD"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.3, "group": "EKF2", "max": 1.0, "min": 0.01, "name": "EKF2_HEAD_NOISE", "shortDesc": "Measurement noise for magnetic heading fusion", "type": "Float", "units": "rad"}, {"category": "Standard", "default": 1, "group": "EKF2", "longDesc": "When multiple height sources are enabled at the same time, the height estimate will always converge towards the reference height source selected by this parameter. The range sensor and vision options should only be used when for operation over a flat surface as the local NED origin will move up and down with ground level.\nIf GPS is set as reference and EKF2_GPS_CTRL is not 0, the GPS altitude is still used to initiaize the bias of the other height sensors, regardless of the altitude fusion bit in EKF2_GPS_CTRL.\n", "name": "EKF2_HGT_REF", "rebootRequired": true, "shortDesc": "Determines the reference source of height data used by the EKF", "type": "Int32", "values": [{"description": "Barometric pressure", "value": 0}, {"description": "GPS", "value": 1}, {"description": "Range sensor", "value": 2}, {"description": "Vision", "value": 3}]}, {"bitmask": [{"description": "Gyro Bias", "index": 0}, {"description": "Accel Bias", "index": 1}, {"description": "Gravity vector fusion", "index": 2}], "category": "Standard", "default": 7, "group": "EKF2", "max": 7, "min": 0, "name": "EKF2_IMU_CTRL", "shortDesc": "IMU control", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "EKF2", "longDesc": "Forward axis with origin relative to vehicle centre of gravity\n", "name": "EKF2_IMU_POS_X", "shortDesc": "X position of IMU in body frame", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "EKF2", "longDesc": "Forward axis with origin relative to vehicle centre of gravity\n", "name": "EKF2_IMU_POS_Y", "shortDesc": "Y position of IMU in body frame", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "EKF2", "longDesc": "Forward axis with origin relative to vehicle centre of gravity\n", "name": "EKF2_IMU_POS_Z", "shortDesc": "Z position of IMU in body frame", "type": "Float", "units": "m"}, {"category": "Standard", "default": 1, "group": "EKF2", "name": "EKF2_LOG_VERBOSE", "shortDesc": "Verbose logging", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.5, "group": "EKF2", "longDesc": "The heading is assumed to be observable when the body acceleration is greater than this parameter when a global position/velocity aiding source is active.\n", "max": 5.0, "min": 0.0, "name": "EKF2_MAG_ACCLIM", "shortDesc": "Horizontal acceleration threshold used for heading observability check", "type": "Float", "units": "m/s^2"}, {"category": "Standard", "decimalPlaces": 6, "default": 0.0001, "group": "EKF2", "max": 0.1, "min": 0.0, "name": "EKF2_MAG_B_NOISE", "shortDesc": "Process noise for body magnetic field prediction", "type": "Float", "units": "gauss/s"}, {"bitmask": [{"description": "Strength (EKF2_MAG_CHK_STR)", "index": 0}, {"description": "Inclination (EKF2_MAG_CHK_INC)", "index": 1}, {"description": "Wait for WMM", "index": 2}], "category": "Standard", "default": 1, "group": "EKF2", "longDesc": "Bitmask to set which check is used to decide whether the magnetometer data is valid. If GNSS data is received, the magnetic field is compared to a World Magnetic Model (WMM), otherwise an average value is used. This check is useful to reject occasional hard iron disturbance. Set bits to 1 to enable checks. Checks enabled by the following bit positions 0 : Magnetic field strength. Set tolerance using EKF2_MAG_CHK_STR 1 : Magnetic field inclination. Set tolerance using EKF2_MAG_CHK_INC 2 : Wait for GNSS to find the theoretical strength and inclination using the WMM\n", "max": 7, "min": 0, "name": "EKF2_MAG_CHECK", "shortDesc": "Magnetic field strength test selection", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 1, "default": 20.0, "group": "EKF2", "longDesc": "Maximum allowed deviation from the expected magnetic field inclination to pass the check.\n", "max": 90.0, "min": 0.0, "name": "EKF2_MAG_CHK_INC", "shortDesc": "Magnetic field inclination check tolerance", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.2, "group": "EKF2", "longDesc": "Maximum allowed deviation from the expected magnetic field strength to pass the check.\n", "max": 1.0, "min": 0.0, "name": "EKF2_MAG_CHK_STR", "shortDesc": "Magnetic field strength check tolerance", "type": "Float", "units": "gauss"}, {"category": "System", "decimalPlaces": 1, "default": 0.0, "group": "EKF2", "name": "EKF2_MAG_DECL", "shortDesc": "Magnetic declination", "type": "Float", "units": "deg", "volatile": true}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "EKF2", "max": 300.0, "min": 0.0, "name": "EKF2_MAG_DELAY", "rebootRequired": true, "shortDesc": "Magnetometer measurement delay relative to IMU measurements", "type": "Float", "units": "ms"}, {"category": "Standard", "decimalPlaces": 6, "default": 0.001, "group": "EKF2", "max": 0.1, "min": 0.0, "name": "EKF2_MAG_E_NOISE", "shortDesc": "Process noise for earth magnetic field prediction", "type": "Float", "units": "gauss/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 3.0, "group": "EKF2", "longDesc": "Sets the number of standard deviations used by the innovation consistency test.\n", "min": 1.0, "name": "EKF2_MAG_GATE", "shortDesc": "Gate size for magnetometer XYZ component fusion", "type": "Float", "units": "SD"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.05, "group": "EKF2", "max": 1.0, "min": 0.001, "name": "EKF2_MAG_NOISE", "shortDesc": "Measurement noise for magnetometer 3-axis fusion", "type": "Float", "units": "gauss"}, {"category": "Standard", "default": 0, "group": "EKF2", "longDesc": "Integer controlling the type of magnetometer fusion used - magnetic heading or 3-component vector. The fusion of magnetometer data as a three component vector enables vehicle body fixed hard iron errors to be learned, but requires a stable earth field. If set to 'Automatic' magnetic heading fusion is used when on-ground and 3-axis magnetic field fusion in-flight. If set to 'Magnetic heading' magnetic heading fusion is used at all times. If set to 'None' the magnetometer will not be used under any circumstance. If no external source of yaw is available, it is possible to use post-takeoff horizontal movement combined with GNSS velocity measurements to align the yaw angle. If set to 'Init' the magnetometer is only used to initalize the heading.\n", "name": "EKF2_MAG_TYPE", "rebootRequired": true, "shortDesc": "Type of magnetometer fusion", "type": "Int32", "values": [{"description": "Automatic", "value": 0}, {"description": "Magnetic heading", "value": 1}, {"description": "None", "value": 5}, {"description": "Init", "value": 6}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.15, "group": "EKF2", "longDesc": "This parameter controls the prediction of drag produced by the propellers when flying a multi-copter, which enables estimation of wind drift when enabled by the EKF2_DRAG_CTRL parameter. The drag produced by this effect scales with speed not speed squared and is produced because some of the air velocity normal to the propeller axis of rotation is lost when passing through the rotor disc. This changes the momentum of the flow which creates a drag reaction force. When comparing un-ducted propellers of the same diameter, the effect is roughly proportional to the area of the propeller blades when viewed side on and changes with propeller selection. Momentum drag is significantly higher for ducted rotors. To account for the drag produced by the body which scales with speed squared, see documentation for the EKF2_BCOEF_X and EKF2_BCOEF_Y parameters. Set this parameter to zero to turn off the momentum drag model for both axis.\n", "max": 1.0, "min": 0.0, "name": "EKF2_MCOEF", "shortDesc": "Propeller momentum drag coefficient for multi-rotor wind estimation", "type": "Float", "units": "1/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.01, "group": "EKF2", "longDesc": "If the vehicle is on ground, is not moving as determined by the motion test and the range finder is returning invalid or no data, then an assumed range value of EKF2_MIN_RNG will be used by the terrain estimator so that a terrain height estimate is available at the start of flight in situations where the range finder may be inside its minimum measurements distance when on ground.\n", "min": 0.01, "name": "EKF2_MIN_RNG", "shortDesc": "Expected range finder reading when on ground", "type": "Float", "units": "m"}, {"category": "Standard", "default": 0, "group": "EKF2", "longDesc": "Maximum number of IMUs to use for Multi-EKF. Set 0 to disable. Requires SENS_IMU_MODE 0.\n", "max": 4, "min": 0, "name": "EKF2_MULTI_IMU", "rebootRequired": true, "shortDesc": "Multi-EKF IMUs", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "EKF2", "longDesc": "Maximum number of magnetometers to use for Multi-EKF. Set 0 to disable. Requires SENS_MAG_MODE 0.\n", "max": 4, "min": 0, "name": "EKF2_MULTI_MAG", "rebootRequired": true, "shortDesc": "Multi-EKF Magnetometers", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 1, "default": 10.0, "group": "EKF2", "max": 50.0, "min": 0.5, "name": "EKF2_NOAID_NOISE", "shortDesc": "Measurement noise for non-aiding position hold", "type": "Float", "units": "m"}, {"category": "Standard", "default": 5000000, "group": "EKF2", "longDesc": "Maximum lapsed time from last fusion of measurements that constrain velocity drift before the EKF will report the horizontal nav solution as invalid\n", "max": 10000000, "min": 500000, "name": "EKF2_NOAID_TOUT", "shortDesc": "Maximum inertial dead-reckoning time", "type": "Int32", "units": "us"}, {"category": "Standard", "default": 1, "group": "EKF2", "longDesc": "Enable optical flow fusion.\n", "name": "EKF2_OF_CTRL", "shortDesc": "Optical flow aiding", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 1, "default": 20.0, "group": "EKF2", "longDesc": "Assumes measurement is timestamped at trailing edge of integration period\n", "max": 300.0, "min": 0.0, "name": "EKF2_OF_DELAY", "rebootRequired": true, "shortDesc": "Optical flow measurement delay relative to IMU measurements", "type": "Float", "units": "ms"}, {"category": "Standard", "decimalPlaces": 1, "default": 3.0, "group": "EKF2", "longDesc": "Sets the number of standard deviations used by the innovation consistency test.\n", "min": 1.0, "name": "EKF2_OF_GATE", "shortDesc": "Gate size for optical flow fusion", "type": "Float", "units": "SD"}, {"category": "Standard", "default": 0, "group": "EKF2", "longDesc": "Auto: use gyro from optical flow message if available, internal gyro otherwise. Internal: always use internal gyro\n", "name": "EKF2_OF_GYR_SRC", "shortDesc": "Optical flow angular rate compensation source", "type": "Int32", "values": [{"description": "Auto", "value": 0}, {"description": "Internal", "value": 1}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.5, "group": "EKF2", "longDesc": "Measurement noise for the optical flow sensor when it's reported quality metric is at the minimum\n", "min": 0.05, "name": "EKF2_OF_N_MAX", "shortDesc": "Optical flow maximum noise", "type": "Float", "units": "rad/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.15, "group": "EKF2", "longDesc": "Measurement noise for the optical flow sensor when it's reported quality metric is at the maximum\n", "min": 0.05, "name": "EKF2_OF_N_MIN", "shortDesc": "Optical flow minimum noise", "type": "Float", "units": "rad/s"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "EKF2", "longDesc": "Forward axis with origin relative to vehicle centre of gravity\n", "name": "EKF2_OF_POS_X", "shortDesc": "X position of optical flow focal point in body frame", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "EKF2", "longDesc": "Forward axis with origin relative to vehicle centre of gravity\n", "name": "EKF2_OF_POS_Y", "shortDesc": "Y position of optical flow focal point in body frame", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "EKF2", "longDesc": "Forward axis with origin relative to vehicle centre of gravity\n", "name": "EKF2_OF_POS_Z", "shortDesc": "Z position of optical flow focal point in body frame", "type": "Float", "units": "m"}, {"category": "Standard", "default": 1, "group": "EKF2", "longDesc": "Optical Flow data will only be used in air if the sensor reports a quality metric >= EKF2_OF_QMIN\n", "max": 255, "min": 0, "name": "EKF2_OF_QMIN", "shortDesc": "In air optical flow minimum quality", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "EKF2", "longDesc": "Optical Flow data will only be used on the ground if the sensor reports a quality metric >= EKF2_OF_QMIN_GND\n", "max": 255, "min": 0, "name": "EKF2_OF_QMIN_GND", "shortDesc": "On ground optical flow minimum quality", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "EKF2", "longDesc": "This is the ratio of static pressure error to dynamic pressure generated by a negative wind relative velocity along the X body axis. If the baro height estimate rises during backwards flight, then this will be a negative number.\n", "max": 0.5, "min": -0.5, "name": "EKF2_PCOEF_XN", "shortDesc": "Static pressure position error coefficient for the negative X axis", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "EKF2", "longDesc": "This is the ratio of static pressure error to dynamic pressure generated by a positive wind relative velocity along the X body axis. If the baro height estimate rises during forward flight, then this will be a negative number.\n", "max": 0.5, "min": -0.5, "name": "EKF2_PCOEF_XP", "shortDesc": "Static pressure position error coefficient for the positive X axis", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "EKF2", "longDesc": "This is the ratio of static pressure error to dynamic pressure generated by a wind relative velocity along the negative Y (LH) body axis. If the baro height estimate rises during sideways flight to the left, then this will be a negative number.\n", "max": 0.5, "min": -0.5, "name": "EKF2_PCOEF_YN", "shortDesc": "Pressure position error coefficient for the negative Y axis", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "EKF2", "longDesc": "This is the ratio of static pressure error to dynamic pressure generated by a wind relative velocity along the positive Y (RH) body axis. If the baro height estimate rises during sideways flight to the right, then this will be a negative number.\n", "max": 0.5, "min": -0.5, "name": "EKF2_PCOEF_YP", "shortDesc": "Pressure position error coefficient for the positive Y axis", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "EKF2", "longDesc": "This is the ratio of static pressure error to dynamic pressure generated by a wind relative velocity along the Z body axis.\n", "max": 0.5, "min": -0.5, "name": "EKF2_PCOEF_Z", "shortDesc": "Static pressure position error coefficient for the Z axis", "type": "Float"}, {"category": "Standard", "default": 0, "group": "EKF2", "longDesc": "When enabled, constant position fusion is enabled when the vehicle is landeded if position has been initialized but has currently no vel/pos aiding.\n", "name": "EKF2_POS_LOCK", "shortDesc": "Enable constant position fusion while on ground", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 10000, "group": "EKF2", "longDesc": "EKF prediction period in microseconds. This should ideally be an integer multiple of the IMU time delta. Actual filter update will be an integer multiple of IMU update.\n", "max": 20000, "min": 1000, "name": "EKF2_PREDICT_US", "shortDesc": "EKF prediction period", "type": "Int32", "units": "us"}, {"category": "Standard", "decimalPlaces": 1, "default": 3.0, "group": "EKF2", "max": 100.0, "min": 0.1, "name": "EKF2_REQ_EPH", "shortDesc": "Required EPH to use GPS", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 1, "default": 5.0, "group": "EKF2", "max": 100.0, "min": 0.1, "name": "EKF2_REQ_EPV", "shortDesc": "Required EPV to use GPS", "type": "Float", "units": "m"}, {"category": "Standard", "default": 3, "group": "EKF2", "longDesc": "Minimum GPS fix type required for GPS usage.\n", "name": "EKF2_REQ_FIX", "shortDesc": "Required GPS fix", "type": "Int32", "values": [{"description": "No fix required", "value": 0}, {"description": "2D fix", "value": 2}, {"description": "3D fix", "value": 3}, {"description": "RTCM code differential", "value": 4}, {"description": "RTK float", "value": 5}, {"description": "RTK fixed", "value": 6}, {"description": "Extrapolated", "value": 8}]}, {"category": "Standard", "decimalPlaces": 1, "default": 10.0, "group": "EKF2", "longDesc": "Minimum continuous period without GPS failure required to mark a healthy GPS status. It can be reduced to speed up initialization, but it's recommended to keep this unchanged for a vehicle.\n", "min": 0.1, "name": "EKF2_REQ_GPS_H", "rebootRequired": true, "shortDesc": "Required GPS health time on startup", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.1, "group": "EKF2", "max": 1.0, "min": 0.1, "name": "EKF2_REQ_HDRIFT", "shortDesc": "Maximum horizontal drift speed to use GPS", "type": "Float", "units": "m/s"}, {"category": "Standard", "default": 6, "group": "EKF2", "max": 12, "min": 4, "name": "EKF2_REQ_NSATS", "shortDesc": "Required satellite count to use GPS", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 1, "default": 2.5, "group": "EKF2", "max": 5.0, "min": 1.5, "name": "EKF2_REQ_PDOP", "shortDesc": "Maximum PDOP to use GPS", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.5, "group": "EKF2", "max": 5.0, "min": 0.5, "name": "EKF2_REQ_SACC", "shortDesc": "Required speed accuracy to use GPS", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.2, "group": "EKF2", "max": 1.5, "min": 0.1, "name": "EKF2_REQ_VDRIFT", "shortDesc": "Maximum vertical drift speed to use GPS", "type": "Float", "units": "m/s"}, {"category": "Standard", "default": 0, "group": "EKF2", "longDesc": "Enable/disable ranging beacon fusion.\n", "name": "EKF2_RNGBC_CTRL", "shortDesc": "Ranging beacon fusion control", "type": "Int32", "values": [{"description": "Disable ranging beacon fusion", "value": 0}, {"description": "Enable ranging beacon fusion", "value": 1}]}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "EKF2", "max": 1000.0, "min": 0.0, "name": "EKF2_RNGBC_DELAY", "rebootRequired": true, "shortDesc": "Ranging beacon measurement delay relative to IMU measurements", "type": "Float", "units": "ms"}, {"category": "Standard", "decimalPlaces": 1, "default": 5.0, "group": "EKF2", "longDesc": "Sets the number of standard deviations used by the innovation consistency test.\n", "min": 1.0, "name": "EKF2_RNGBC_GATE", "shortDesc": "Gate size for ranging beacon fusion", "type": "Float", "units": "SD"}, {"category": "Standard", "decimalPlaces": 1, "default": 30.0, "group": "EKF2", "longDesc": "Used to lower bound or replace the uncertainty included in the message\n", "max": 500.0, "min": 0.1, "name": "EKF2_RNGBC_NOISE", "shortDesc": "Measurement noise for ranging beacon fusion", "type": "Float", "units": "m"}, {"category": "Standard", "default": 5.0, "group": "EKF2", "longDesc": "If the vehicle absolute altitude exceeds this value then the estimator will not fuse range measurements to estimate its height. This only applies when conditional range aid mode is activated (EKF2_RNG_CTRL = 1).\n", "max": 10.0, "min": 1.0, "name": "EKF2_RNG_A_HMAX", "shortDesc": "Maximum height above ground allowed for conditional range aid mode", "type": "Float", "units": "m"}, {"category": "Standard", "default": 1.0, "group": "EKF2", "longDesc": "If the vehicle horizontal speed exceeds this value then the estimator will not fuse range measurements to estimate its height. This only applies when conditional range aid mode is activated (EKF2_RNG_CTRL = 1).\n", "max": 2.0, "min": 0.1, "name": "EKF2_RNG_A_VMAX", "shortDesc": "Maximum horizontal velocity allowed for conditional range aid mode", "type": "Float", "units": "m/s"}, {"category": "Standard", "default": 1, "group": "EKF2", "longDesc": "WARNING: Range finder measurements are less reliable and can experience unexpected errors. For these reasons, if accurate control of height relative to ground is required, it is recommended to use the MPC_ALT_MODE parameter instead, unless baro errors are severe enough to cause problems with landing and takeoff. If this parameter is enabled then the estimator will make use of the range finder measurements to estimate its height in addition to other height sources (if activated). Range sensor aiding can be enabled (i.e.: always use) or set in \"conditional\" mode. Conditional mode: This enables the range finder to be used during low speed (< EKF2_RNG_A_VMAX) and low altitude (< EKF2_RNG_A_HMAX) operation, eg takeoff and landing, where baro interference from rotor wash is excessive and can corrupt EKF state estimates. It is intended to be used where a vertical takeoff and landing is performed, and horizontal flight does not occur until above EKF2_RNG_A_HMAX.\n", "name": "EKF2_RNG_CTRL", "shortDesc": "Range sensor height aiding", "type": "Int32", "values": [{"description": "Disable range fusion", "value": 0}, {"description": "Enabled (conditional mode)", "value": 1}, {"description": "Enabled", "value": 2}]}, {"category": "Standard", "decimalPlaces": 1, "default": 5.0, "group": "EKF2", "max": 300.0, "min": 0.0, "name": "EKF2_RNG_DELAY", "rebootRequired": true, "shortDesc": "Range finder measurement delay relative to IMU measurements", "type": "Float", "units": "ms"}, {"category": "Standard", "decimalPlaces": 1, "default": 3.0, "group": "EKF2", "longDesc": "Limit for fog detection. If the range finder measures a distance greater than this value, the measurement is considered to not be blocked by fog or rain. If there's a jump from larger than RNG_FOG to smaller than EKF2_RNG_FOG, the measurement may gets rejected. 0 - disabled\n", "max": 20.0, "min": 0.0, "name": "EKF2_RNG_FOG", "shortDesc": "Maximum distance at which the range finder could detect fog (m)", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 1, "default": 5.0, "group": "EKF2", "longDesc": "Sets the number of standard deviations used by the innovation consistency test.\n", "min": 1.0, "name": "EKF2_RNG_GATE", "shortDesc": "Gate size for range finder fusion", "type": "Float", "units": "SD"}, {"category": "Standard", "default": 1.0, "group": "EKF2", "longDesc": "To be used, the time derivative of the distance sensor measurements projected on the vertical axis needs to be statistically consistent with the estimated vertical velocity of the drone. Decrease this value to make the filter more robust against range finder faulty data (stuck, reflections, ...). Note: tune the range finder noise parameters (EKF2_RNG_NOISE and EKF2_RNG_SFE) before tuning this gate.\n", "max": 5.0, "min": 0.1, "name": "EKF2_RNG_K_GATE", "shortDesc": "Gate size used for range finder kinematic consistency check", "type": "Float", "units": "SD"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.1, "group": "EKF2", "min": 0.01, "name": "EKF2_RNG_NOISE", "shortDesc": "Measurement noise for range finder fusion", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "EKF2", "max": 0.75, "min": -0.75, "name": "EKF2_RNG_PITCH", "shortDesc": "Range sensor pitch offset", "type": "Float", "units": "rad"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "EKF2", "longDesc": "Forward axis with origin relative to vehicle centre of gravity\n", "name": "EKF2_RNG_POS_X", "shortDesc": "X position of range finder origin in body frame", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "EKF2", "longDesc": "Forward axis with origin relative to vehicle centre of gravity\n", "name": "EKF2_RNG_POS_Y", "shortDesc": "Y position of range finder origin in body frame", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "EKF2", "longDesc": "Forward axis with origin relative to vehicle centre of gravity\n", "name": "EKF2_RNG_POS_Z", "shortDesc": "Z position of range finder origin in body frame", "type": "Float", "units": "m"}, {"category": "Standard", "default": 1.0, "group": "EKF2", "longDesc": "Minimum duration during which the reported range finder signal quality needs to be non-zero in order to be declared valid (s)\n", "max": 5.0, "min": 0.1, "name": "EKF2_RNG_QLTY_T", "shortDesc": "Minumum range validity period", "type": "Float", "units": "s"}, {"category": "Standard", "default": 0.05, "group": "EKF2", "longDesc": "Specifies the increase in range finder noise with range.\n", "max": 0.2, "min": 0.0, "name": "EKF2_RNG_SFE", "shortDesc": "Range finder range dependent noise scaler", "type": "Float", "units": "m/m"}, {"category": "Standard", "default": 0.2, "group": "EKF2", "longDesc": "EKF2 instances have to be better than the selected by at least this amount before their relative score can be reduced.\n", "name": "EKF2_SEL_ERR_RED", "shortDesc": "Selector error reduce threshold", "type": "Float"}, {"category": "Standard", "default": 1.0, "group": "EKF2", "longDesc": "EKF2 selector acceleration error threshold for comparing accelerometers. Acceleration vector differences larger than this will result in accumulated velocity error.\n", "name": "EKF2_SEL_IMU_ACC", "shortDesc": "Selector acceleration threshold", "type": "Float", "units": "m/s^2"}, {"category": "Standard", "default": 15.0, "group": "EKF2", "longDesc": "EKF2 selector maximum accumulated angular error threshold for comparing gyros. Accumulated angular error larger than this will result in the sensor being declared faulty.\n", "name": "EKF2_SEL_IMU_ANG", "shortDesc": "Selector angular threshold", "type": "Float", "units": "deg"}, {"category": "Standard", "default": 7.0, "group": "EKF2", "longDesc": "EKF2 selector angular rate error threshold for comparing gyros. Angular rate vector differences larger than this will result in accumulated angular error.\n", "name": "EKF2_SEL_IMU_RAT", "shortDesc": "Selector angular rate threshold", "type": "Float", "units": "deg/s"}, {"category": "Standard", "default": 2.0, "group": "EKF2", "longDesc": "EKF2 selector maximum accumulated velocity threshold for comparing accelerometers. Accumulated velocity error larger than this will result in the sensor being declared faulty.\n", "name": "EKF2_SEL_IMU_VEL", "shortDesc": "Selector angular threshold", "type": "Float", "units": "m/s"}, {"bitmask": [{"description": "GNSS 0", "index": 0}, {"description": "GNSS 1", "index": 1}, {"description": "Optical flow", "index": 2}, {"description": "External vision", "index": 3}, {"description": "Aux global position 0", "index": 4}, {"description": "Aux global position 1", "index": 5}, {"description": "Aux global position 2", "index": 6}, {"description": "Aux global position 3", "index": 7}, {"description": "Barometer", "index": 8}, {"description": "Range finder", "index": 9}, {"description": "Magnetometer", "index": 10}, {"description": "Airspeed", "index": 11}, {"description": "Ranging beacon", "index": 12}], "category": "Standard", "default": 8191, "group": "EKF2", "longDesc": "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).\n", "max": 8191, "min": 0, "name": "EKF2_SENS_EN", "shortDesc": "Sensor fusion enable bitmask", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "EKF2", "longDesc": "Use for vehicles where the measured body Z magnetic field is subject to strong magnetic interference. For magnetic heading fusion the magnetometer Z measurement will be replaced by a synthetic value calculated using the knowledge of the 3D magnetic field vector at the location of the drone. Therefore, this parameter will only have an effect if the global position of the drone is known. For 3D mag fusion the magnetometer Z measurement will simply be ignored instead of fusing the synthetic value.\n", "name": "EKF2_SYNT_MAG_Z", "shortDesc": "Enable synthetic magnetometer Z component measurement", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 1, "default": 5.0, "group": "EKF2", "longDesc": "Sets the number of standard deviations used by the innovation consistency test.\n", "min": 1.0, "name": "EKF2_TAS_GATE", "shortDesc": "Gate size for TAS fusion", "type": "Float", "units": "SD"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.25, "group": "EKF2", "longDesc": "Controls how tightly the output track the EKF states\n", "max": 1.0, "min": 0.1, "name": "EKF2_TAU_POS", "shortDesc": "Output predictor position time constant", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.25, "group": "EKF2", "max": 1.0, "name": "EKF2_TAU_VEL", "shortDesc": "Time constant of the velocity output prediction and smoothing filter", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.5, "group": "EKF2", "min": 0.0, "name": "EKF2_TERR_GRAD", "shortDesc": "Magnitude of terrain gradient", "type": "Float", "units": "m/m"}, {"category": "Standard", "decimalPlaces": 1, "default": 5.0, "group": "EKF2", "min": 0.5, "name": "EKF2_TERR_NOISE", "shortDesc": "Terrain altitude process noise", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 100.0, "group": "EKF2", "max": 299792458.0, "name": "EKF2_VEL_LIM", "shortDesc": "Velocity limit", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.05, "group": "EKF2", "longDesc": "When unaided, the wind estimate uncertainty (1-sigma, in m/s) increases by this amount every second.\n", "max": 1.0, "min": 0.0, "name": "EKF2_WIND_NSD", "shortDesc": "Process noise spectral density for wind velocity prediction", "type": "Float", "units": "m/s^2/sqrt(Hz)"}, {"category": "Standard", "default": 0, "group": "Events", "longDesc": "Enable/disable event task for RC Loss. When enabled, an alarm tune will be\nplayed via buzzer or ESCs, if supported. The alarm will sound after a disarm,\nif the vehicle was previously armed and only if the vehicle had RC signal at\nsome point. Particularly useful for locating crashed drones without a GPS\nsensor.\n", "name": "EV_TSK_RC_LOSS", "rebootRequired": true, "shortDesc": "RC Loss Alarm", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 0, "group": "Events", "longDesc": "Enable/disable event task for displaying the vehicle status using arm-mounted\nLEDs. When enabled and if the vehicle supports it, LEDs will flash\nindicating various vehicle status changes. Currently PX4 has not implemented\nany specific status events.\n", "name": "EV_TSK_STAT_DIS", "rebootRequired": true, "shortDesc": "Status Display", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 1, "default": 30.0, "group": "FW Attitude Control", "increment": 0.5, "longDesc": "Applies to both directions in all manual modes with attitude stabilization but without altitude control\n", "max": 90.0, "min": 0.0, "name": "FW_MAN_P_MAX", "shortDesc": "Maximum manual pitch angle", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 1, "default": 45.0, "group": "FW Attitude Control", "increment": 0.5, "longDesc": "Applies to both directions in all manual modes with attitude stabilization\n", "max": 90.0, "min": 0.0, "name": "FW_MAN_R_MAX", "shortDesc": "Maximum manual roll angle", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 1, "default": 30.0, "group": "FW Attitude Control", "increment": 0.5, "longDesc": "This is the maximally added yaw rate setpoint from the yaw stick in any attitude controlled flight mode.\nIt is added to the yaw rate setpoint generated by the controller for turn coordination.\n", "min": 0.0, "name": "FW_MAN_YR_MAX", "shortDesc": "Maximum manually added yaw rate", "type": "Float", "units": "deg/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "FW Attitude Control", "increment": 0.5, "longDesc": "An airframe specific offset of the pitch setpoint in degrees, the value is\nadded to the pitch setpoint and should correspond to the pitch at\ntypical cruise speed of the airframe.\n", "max": 90.0, "min": -90.0, "name": "FW_PSP_OFF", "shortDesc": "Pitch setpoint offset (pitch at level flight)", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 1, "default": 60.0, "group": "FW Attitude Control", "increment": 0.5, "max": 180.0, "min": 0.0, "name": "FW_P_RMAX_NEG", "shortDesc": "Maximum negative / down pitch rate setpoint", "type": "Float", "units": "deg/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 60.0, "group": "FW Attitude Control", "increment": 0.5, "max": 180.0, "min": 0.0, "name": "FW_P_RMAX_POS", "shortDesc": "Maximum positive / up pitch rate setpoint", "type": "Float", "units": "deg/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.4, "group": "FW Attitude Control", "increment": 0.05, "longDesc": "This defines the latency between a pitch step input and the achieved setpoint\n(inverse to a P gain). Smaller systems may require smaller values.\n", "max": 1.0, "min": 0.2, "name": "FW_P_TC", "shortDesc": "Attitude pitch time constant", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 1, "default": 70.0, "group": "FW Attitude Control", "increment": 0.5, "max": 180.0, "min": 0.0, "name": "FW_R_RMAX", "shortDesc": "Maximum roll rate setpoint", "type": "Float", "units": "deg/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.4, "group": "FW Attitude Control", "increment": 0.05, "longDesc": "This defines the latency between a roll step input and the achieved setpoint\n(inverse to a P gain). Smaller systems may require smaller values.\n", "max": 1.0, "min": 0.2, "name": "FW_R_TC", "shortDesc": "Attitude Roll Time Constant", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.2, "group": "FW Attitude Control", "increment": 0.05, "max": 10.0, "min": 0.0, "name": "FW_WR_FF", "shortDesc": "Wheel steering rate feed forward", "type": "Float", "units": "%/rad/s"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.1, "group": "FW Attitude Control", "increment": 0.005, "longDesc": "This gain defines how much control response will result out of a steady\nstate error. It trims any constant error.\n", "max": 10.0, "min": 0.0, "name": "FW_WR_I", "shortDesc": "Wheel steering rate integrator gain", "type": "Float", "units": "%/rad"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.4, "group": "FW Attitude Control", "increment": 0.05, "max": 1.0, "min": 0.0, "name": "FW_WR_IMAX", "shortDesc": "Wheel steering rate integrator limit", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.5, "group": "FW Attitude Control", "increment": 0.005, "longDesc": "This defines how much the wheel steering input will be commanded depending on the\ncurrent body angular rate error.\n", "max": 10.0, "min": 0.0, "name": "FW_WR_P", "shortDesc": "Wheel steering rate proportional gain", "type": "Float", "units": "%/rad/s"}, {"category": "Standard", "default": 0, "group": "FW Attitude Control", "longDesc": "Only enabled during automatic runway takeoff and landing.\nIn all manual modes the wheel is directly controlled with yaw stick.\n", "name": "FW_W_EN", "shortDesc": "Enable wheel steering controller", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 1, "default": 30.0, "group": "FW Attitude Control", "increment": 0.5, "longDesc": "This limits the maximum wheel steering rate the controller will output (in degrees per\nsecond).\n", "max": 90.0, "min": 0.0, "name": "FW_W_RMAX", "shortDesc": "Maximum wheel steering rate", "type": "Float", "units": "deg/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 50.0, "group": "FW Attitude Control", "increment": 0.5, "max": 180.0, "min": 0.0, "name": "FW_Y_RMAX", "shortDesc": "Maximum yaw rate setpoint", "type": "Float", "units": "deg/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "FW Auto Landing", "increment": 0.01, "longDesc": "Sets a fraction of full flaps during landing.\nAlso applies to flaperons if enabled in the mixer/allocation.\n", "max": 1.0, "min": 0.0, "name": "FW_FLAPS_LND_SCL", "shortDesc": "Flaps setting during landing", "type": "Float", "units": "norm"}, {"bitmask": [{"description": "Abort if terrain is not found (only applies to mission landings)", "index": 0}, {"description": "Abort if terrain times out (after a first successful measurement)", "index": 1}], "category": "Standard", "default": 3, "group": "FW Auto Landing", "longDesc": "Terrain estimation:\nbit 0: Abort if terrain is not found\nbit 1: Abort if terrain times out (after a first successful measurement)\n\nThe last estimate is always used as ground, whether the last valid measurement or the land waypoint, depending on the\nselected abort criteria, until an abort condition is entered. If FW_LND_USETER == 0, these bits are ignored.\n\nTODO: Extend automatic abort conditions\ne.g. glide slope tracking error (horizontal and vertical)\n", "max": 3, "min": 0, "name": "FW_LND_ABORT", "shortDesc": "Bit mask to set the automatic landing abort conditions", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 1, "default": -1.0, "group": "FW Auto Landing", "increment": 0.1, "longDesc": "The calibrated airspeed setpoint during landing.\n\nIf set <= 0, landing airspeed = FW_AIRSPD_MIN by default.\n", "min": -1.0, "name": "FW_LND_AIRSPD", "shortDesc": "Landing airspeed", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 5.0, "group": "FW Auto Landing", "increment": 0.5, "longDesc": "Typically the desired landing slope angle when landing configuration (flaps, airspeed) is enabled.\nSet this value within the vehicle's performance limits.\n", "max": 45.0, "min": 1.0, "name": "FW_LND_ANG", "shortDesc": "Maximum landing slope angle", "type": "Float", "units": "deg"}, {"category": "Standard", "default": 0, "group": "FW Auto Landing", "longDesc": "Allows to deploy the landing configuration (flaps, landing airspeed, etc.) already in\nthe loiter-down waypoint before the final approach.\nOtherwise is enabled only in the final approach.\n", "name": "FW_LND_EARLYCFG", "shortDesc": "Early landing configuration deployment", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 1, "default": 0.5, "group": "FW Auto Landing", "increment": 0.5, "longDesc": "NOTE: max(FW_LND_FLALT, FW_LND_FL_TIME * |z-velocity|) is taken as the flare altitude\n", "min": 0.0, "name": "FW_LND_FLALT", "shortDesc": "Landing flare altitude (relative to landing altitude)", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 1, "default": 15.0, "group": "FW Auto Landing", "increment": 0.5, "longDesc": "Maximum pitch during landing flare.\n", "max": 45.0, "min": 0.0, "name": "FW_LND_FL_PMAX", "shortDesc": "Flare, maximum pitch", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 1, "default": 2.5, "group": "FW Auto Landing", "increment": 0.5, "longDesc": "Minimum pitch during landing flare.\n", "max": 15.0, "min": -5.0, "name": "FW_LND_FL_PMIN", "shortDesc": "Flare, minimum pitch", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.25, "group": "FW Auto Landing", "increment": 0.1, "longDesc": "TECS will attempt to control the aircraft to this sink rate via pitch angle (throttle killed during flare)\n", "max": 2.0, "min": 0.0, "name": "FW_LND_FL_SINK", "shortDesc": "Landing flare sink rate", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 1.0, "group": "FW Auto Landing", "increment": 0.1, "longDesc": "Multiplied by the descent rate to calculate a dynamic altitude at which\nto trigger the flare.\n\nNOTE: max(FW_LND_FLALT, FW_LND_FL_TIME * descent rate) is taken as the flare altitude\n", "max": 5.0, "min": 0.1, "name": "FW_LND_FL_TIME", "shortDesc": "Landing flare time", "type": "Float", "units": "s"}, {"category": "Standard", "default": 2, "group": "FW Auto Landing", "longDesc": "Approach angle nudging: shifts the touchdown point laterally while keeping the approach entrance point constant\nApproach path nudging: shifts the touchdown point laterally along with the entire approach path\n\nThis is useful for manually adjusting the landing point in real time when map or GNSS errors cause an offset from the\ndesired landing vector. Nudging is done with yaw stick, constrained to FW_LND_TD_OFF (in meters) and the direction is\nrelative to the vehicle heading (stick deflection to the right = land point moves to the right as seen by the vehicle).\n", "max": 2, "min": 0, "name": "FW_LND_NUDGE", "shortDesc": "Landing touchdown nudging option", "type": "Int32", "values": [{"description": "Disable nudging", "value": 0}, {"description": "Nudge approach angle", "value": 1}, {"description": "Nudge approach path", "value": 2}]}, {"category": "Standard", "decimalPlaces": 1, "default": 3.0, "group": "FW Auto Landing", "increment": 1.0, "max": 10.0, "min": 0.0, "name": "FW_LND_TD_OFF", "shortDesc": "Maximum lateral position offset for the touchdown point", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 1, "default": -1.0, "group": "FW Auto Landing", "increment": 0.1, "longDesc": "This is the time after the start of flaring that we expect the vehicle to touch the runway.\nAt this time, a 0.5s clamp down ramp will engage, constraining the pitch setpoint to RWTO_PSP.\nIf enabled, ensure that RWTO_PSP is configured appropriately for full gear contact on ground roll.\n\nSet to -1.0 to disable touchdown clamping. E.g. it may not be desirable to clamp on belly landings.\n\nThe touchdown time will be constrained to be greater than or equal to the flare time (FW_LND_FL_TIME).\n", "max": 5.0, "min": -1.0, "name": "FW_LND_TD_TIME", "shortDesc": "Landing touchdown time (since flare start)", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 1, "default": 1.0, "group": "FW Auto Landing", "increment": 0.1, "longDesc": "The TECS altitude time constant (FW_T_ALT_TC) is multiplied by this value.\n", "max": 1.0, "min": 0.2, "name": "FW_LND_THRTC_SC", "shortDesc": "Altitude time constant factor for landing and low-height flight", "type": "Float"}, {"category": "Standard", "default": 1, "group": "FW Auto Landing", "longDesc": "This is critical for detecting when to flare, and should be enabled if possible.\n\nIf enabled and no measurement is found within a given timeout, the landing waypoint altitude will be used OR the landing\nwill be aborted, depending on the criteria set in FW_LND_ABORT.\n\nIf disabled, FW_LND_ABORT terrain based criteria are ignored.\n", "max": 2, "min": 0, "name": "FW_LND_USETER", "shortDesc": "Use terrain estimation during landing", "type": "Int32", "values": [{"description": "Disable the terrain estimate", "value": 0}, {"description": "Use the terrain estimate to trigger the flare (only)", "value": 1}, {"description": "Calculate landing glide slope relative to the terrain estimate", "value": 2}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "FW Auto Landing", "increment": 0.01, "max": 1.0, "min": 0.0, "name": "FW_SPOILERS_LND", "shortDesc": "Spoiler landing setting", "type": "Float", "units": "norm"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "FW Auto Takeoff", "increment": 0.01, "longDesc": "Sets a fraction of full flaps during take-off.\nAlso applies to flaperons if enabled in the mixer/allocation.\n", "max": 1.0, "min": 0.0, "name": "FW_FLAPS_TO_SCL", "shortDesc": "Flaps setting during take-off", "type": "Float", "units": "norm"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.05, "group": "FW Auto Takeoff", "increment": 0.05, "longDesc": "Launch is detected when the norm of body acceleration is above FW_LAUN_AC_THLD for FW_LAUN_AC_T seconds.\n", "max": 5.0, "min": 0.0, "name": "FW_LAUN_AC_T", "shortDesc": "Trigger time", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 1, "default": 30.0, "group": "FW Auto Takeoff", "increment": 0.5, "longDesc": "Launch is detected when the norm of body acceleration is above FW_LAUN_AC_THLD for FW_LAUN_AC_T seconds.\n", "min": 0.0, "name": "FW_LAUN_AC_THLD", "shortDesc": "Trigger acceleration threshold", "type": "Float", "units": "m/s^2"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "FW Auto Takeoff", "increment": 0.1, "longDesc": "Locks control surfaces during pre-launch (armed) and until this time since launch has passed.\nOnly affects control surfaces that have corresponding flag set, and not active for runway takeoff.\nSet to 0 to disable any surface locking after arming.\n", "min": 0.0, "name": "FW_LAUN_CS_LK_DY", "shortDesc": "Control surface launch delay", "type": "Float", "units": "s"}, {"category": "Standard", "default": 0, "group": "FW Auto Takeoff", "longDesc": "Enables automatic launch detection based on measured acceleration. Use for hand- or catapult-launched vehicles.\nNot compatible with runway takeoff.\n", "name": "FW_LAUN_DETCN_ON", "shortDesc": "Fixed-wing launch detection", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "FW Auto Takeoff", "increment": 0.5, "longDesc": "Start the motor(s) this amount of seconds after launch is detected.\n", "max": 10.0, "min": 0.0, "name": "FW_LAUN_MOT_DEL", "shortDesc": "Motor delay", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 1, "default": -1.0, "group": "FW Auto Takeoff", "increment": 0.1, "longDesc": "The calibrated airspeed setpoint during the takeoff climbout.\n\nIf set <= 0, FW_AIRSPD_MIN will be set by default.\n", "min": -1.0, "name": "FW_TKO_AIRSPD", "shortDesc": "Takeoff Airspeed", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 10.0, "group": "FW Auto Takeoff", "increment": 0.5, "max": 80.0, "min": -5.0, "name": "FW_TKO_PITCH_MIN", "shortDesc": "Minimum pitch during takeoff", "type": "Float", "units": "deg"}, {"category": "Standard", "default": 30, "group": "FW General", "longDesc": "The time the system should do open loop loiter and wait for GPS recovery\nbefore it starts descending. Set to 0 to disable. Roll angle is set to FW_GPSF_R.\nDoes only apply for fixed-wing vehicles or VTOLs with NAV_FORCE_VT set to 0.\n", "min": 0, "name": "FW_GPSF_LT", "shortDesc": "GPS failure loiter time", "type": "Int32", "units": "s"}, {"category": "Standard", "decimalPlaces": 1, "default": 15.0, "group": "FW General", "increment": 0.5, "longDesc": "Roll angle in GPS failure loiter mode.\n", "max": 60.0, "min": 0.0, "name": "FW_GPSF_R", "shortDesc": "GPS failure fixed roll angle", "type": "Float", "units": "deg"}, {"bitmask": [{"description": "Alternative stick configuration (height rate on throttle stick, airspeed on pitch stick)", "index": 0}, {"description": "Enable airspeed setpoint via sticks in altitude and position flight mode", "index": 1}], "category": "Standard", "default": 2, "group": "FW General", "longDesc": "Applies in manual Position and Altitude flight modes.\n", "max": 3, "min": 0, "name": "FW_POS_STK_CONF", "shortDesc": "Custom stick configuration", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 1, "default": 30.0, "group": "FW General", "increment": 0.5, "longDesc": "Applies in any altitude controlled flight mode.\n", "max": 80.0, "min": 0.0, "name": "FW_P_LIM_MAX", "shortDesc": "Maximum pitch angle setpoint", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 1, "default": -30.0, "group": "FW General", "increment": 0.5, "longDesc": "Applies in any altitude controlled flight mode.\n", "max": 0.0, "min": -60.0, "name": "FW_P_LIM_MIN", "shortDesc": "Minimum pitch angle setpoint", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 1, "default": 50.0, "group": "FW General", "increment": 0.5, "longDesc": "Applies in any altitude controlled flight mode.\n", "max": 75.0, "min": 35.0, "name": "FW_R_LIM", "shortDesc": "Maximum roll angle setpoint", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "FW General", "increment": 0.01, "longDesc": "This is the minimum throttle while on the ground (\"landed\") in auto modes.\n", "max": 1.0, "min": 0.0, "name": "FW_THR_IDLE", "shortDesc": "Idle throttle", "type": "Float", "units": "norm"}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "FW General", "increment": 0.01, "longDesc": "Applies in any altitude controlled flight mode.\nShould be set accordingly to achieve FW_T_CLMB_MAX.\n", "max": 1.0, "min": 0.0, "name": "FW_THR_MAX", "shortDesc": "Throttle limit max", "type": "Float", "units": "norm"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "FW General", "increment": 0.01, "longDesc": "Applies in any altitude controlled flight mode.\nUsually set to 0 but can be increased to prevent the motor from stopping when\ndescending, which can increase achievable descent rates.\n", "max": 1.0, "min": 0.0, "name": "FW_THR_MIN", "shortDesc": "Throttle limit min", "type": "Float", "units": "norm"}, {"category": "Standard", "decimalPlaces": 2, "default": 3.0, "group": "FW General", "increment": 0.01, "longDesc": "In auto modes: default climb rate output by controller to achieve altitude setpoints.\nIn manual modes: maximum climb rate setpoint.\n", "min": 0.1, "name": "FW_T_CLMB_R_SP", "shortDesc": "Default target climbrate", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 2.0, "group": "FW General", "increment": 0.01, "longDesc": "In auto modes: default sink rate output by controller to achieve altitude setpoints.\nIn manual modes: maximum sink rate setpoint.\n", "min": 0.1, "name": "FW_T_SINK_R_SP", "shortDesc": "Default target sinkrate", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 1.0, "group": "FW General", "increment": 1.0, "longDesc": "Adjusts the amount of weighting that the pitch control\napplies to speed vs height errors.\n0 -> control height only\n2 -> control speed only (gliders)\n", "max": 2.0, "min": 0.0, "name": "FW_T_SPDWEIGHT", "shortDesc": "Speed <--> Altitude weight", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.5, "group": "FW General", "increment": 1.0, "longDesc": "This is used to constrain a minimum altitude below which we keep wings level to avoid wing tip strike. It's safer\nto give a slight margin here (> 0m)\n", "min": 0.0, "name": "FW_WING_HEIGHT", "shortDesc": "Height (AGL) of the wings when the aircraft is on the ground", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 1, "default": 3.0, "group": "FW General", "increment": 0.1, "longDesc": "This is used for limiting the roll setpoint near the ground. (if multiple wings, take the longest span)\n", "min": 0.1, "name": "FW_WING_SPAN", "shortDesc": "The aircraft's wing span (length from tip to tip)", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 0, "default": 90.0, "group": "FW Lateral Control", "increment": 1.0, "longDesc": "Maximum change in roll angle setpoint per second.\nApplied in all Auto modes, plus manual Position & Altitude modes.\n", "min": 0.0, "name": "FW_PN_R_SLEW_MAX", "shortDesc": "Path navigation roll slew rate limit", "type": "Float", "units": "deg/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 5.0, "group": "FW Longitudinal Control", "increment": 0.5, "longDesc": "The controller will increase the commanded airspeed to maintain\nthis minimum groundspeed to the next waypoint.\n", "max": 40.0, "min": 0.0, "name": "FW_GND_SPD_MIN", "shortDesc": "Minimum groundspeed", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "FW Longitudinal Control", "increment": 0.01, "longDesc": "Maximum slew rate for the commanded throttle\n", "max": 1.0, "min": 0.0, "name": "FW_THR_SLEW_MAX", "shortDesc": "Throttle max slew rate", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 5.0, "group": "FW Longitudinal Control", "increment": 0.5, "min": 2.0, "name": "FW_T_ALT_TC", "shortDesc": "Altitude error time constant", "type": "Float"}, {"category": "Standard", "decimalPlaces": 0, "default": -1.0, "group": "FW Longitudinal Control", "longDesc": "Minimum altitude error needed to descend with max airspeed and minimal throttle.\nA negative value disables fast descend.\n", "min": -1.0, "name": "FW_T_F_ALT_ERR", "shortDesc": "Fast descend: minimum altitude error", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.5, "group": "FW Longitudinal Control", "increment": 0.05, "max": 1.0, "min": 0.0, "name": "FW_T_HRATE_FF", "shortDesc": "Height rate feed forward", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.1, "group": "FW Longitudinal Control", "increment": 0.05, "longDesc": "Increase it to trim out speed and height offsets faster,\nwith the downside of possible overshoots and oscillations.\n", "max": 2.0, "min": 0.0, "name": "FW_T_I_GAIN_PIT", "shortDesc": "Integrator gain pitch", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.1, "group": "FW Longitudinal Control", "increment": 0.1, "max": 2.0, "min": 0.0, "name": "FW_T_PTCH_DAMP", "shortDesc": "Pitch damping gain", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 15.0, "group": "FW Longitudinal Control", "increment": 0.5, "longDesc": "Is used to compensate for the additional drag created by turning.\nIncrease this gain if the aircraft initially loses energy in turns\nand reduce if the aircraft initially gains energy in turns.\n", "max": 20.0, "min": 0.0, "name": "FW_T_RLL2THR", "shortDesc": "Roll -> Throttle feedforward", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "FW Longitudinal Control", "increment": 0.01, "max": 3.0, "min": 0.5, "name": "FW_T_SEB_R_FF", "shortDesc": "Specific total energy balance rate feedforward gain", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 5.0, "group": "FW Longitudinal Control", "increment": 0.5, "max": 15.0, "min": 1.0, "name": "FW_T_SINK_MAX", "shortDesc": "Maximum descent rate", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.4, "group": "FW Longitudinal Control", "increment": 0.01, "longDesc": "This filter is applied to the specific total energy rate used for throttle damping.\n", "max": 2.0, "min": 0.0, "name": "FW_T_STE_R_TC", "shortDesc": "Specific total energy rate first order filter time constant", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 5.0, "group": "FW Longitudinal Control", "increment": 0.5, "min": 2.0, "name": "FW_T_TAS_TC", "shortDesc": "True airspeed error time constant", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.05, "group": "FW Longitudinal Control", "increment": 0.01, "longDesc": "This is the damping gain for the throttle demand loop.\n", "max": 1.0, "min": 0.0, "name": "FW_T_THR_DAMPING", "shortDesc": "Throttle damping factor", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.02, "group": "FW Longitudinal Control", "increment": 0.005, "longDesc": "Increase it to trim out speed and height offsets faster,\nwith the downside of possible overshoots and oscillations.\n", "max": 1.0, "min": 0.0, "name": "FW_T_THR_INTEG", "shortDesc": "Integrator gain throttle", "type": "Float"}, {"category": "Standard", "decimalPlaces": 0, "default": -1.0, "group": "FW Longitudinal Control", "increment": 1.0, "longDesc": "Height above ground threshold below which tighter altitude\ntracking gets enabled (see FW_LND_THRTC_SC). Below this height, TECS smoothly\n(1 sec / sec) transitions the altitude tracking time constant from FW_T_ALT_TC\nto FW_LND_THRTC_SC*FW_T_ALT_TC.\n\n-1 to disable.\n", "min": -1.0, "name": "FW_T_THR_LOW_HGT", "shortDesc": "Low-height threshold for tighter altitude tracking", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 1, "default": 7.0, "group": "FW Longitudinal Control", "increment": 0.5, "longDesc": "This is the maximum vertical acceleration\neither up or down that the controller will use to correct speed\nor height errors.\n", "max": 10.0, "min": 1.0, "name": "FW_T_VERT_ACC", "shortDesc": "Maximum vertical acceleration", "type": "Float", "units": "m/s^2"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "FW Longitudinal Control", "increment": 0.01, "longDesc": "Multiplying this factor with the current absolute wind estimate gives the airspeed offset\nadded to the minimum airspeed setpoint limit. This helps to make the\nsystem more robust against disturbances (turbulence) in high wind.\n", "min": 0.0, "name": "FW_WIND_ARSP_SC", "shortDesc": "Wind-based airspeed scaling factor", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.7, "group": "FW NPFG Control", "increment": 0.01, "longDesc": "Damping ratio of NPFG control law.\n", "max": 1.0, "min": 0.1, "name": "NPFG_DAMPING", "shortDesc": "NPFG damping ratio", "type": "Float"}, {"category": "Standard", "default": 1, "group": "FW NPFG Control", "longDesc": "Avoids limit cycling from a too aggressively tuned period/damping combination.\nIf false, also disables upper bound NPFG_PERIOD_UB.\n", "name": "NPFG_LB_PERIOD", "shortDesc": "Enable automatic lower bound on the NPFG period", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 1, "default": 10.0, "group": "FW NPFG Control", "increment": 0.1, "longDesc": "Period of NPFG control law.\n", "max": 100.0, "min": 1.0, "name": "NPFG_PERIOD", "shortDesc": "NPFG period", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 1, "default": 1.5, "group": "FW NPFG Control", "increment": 0.1, "longDesc": "Multiplied by period for conservative minimum period bounding (when period lower\nbounding is enabled). 1.0 bounds at marginal stability.\n", "max": 10.0, "min": 1.0, "name": "NPFG_PERIOD_SF", "shortDesc": "Period safety factor", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.5, "group": "FW NPFG Control", "increment": 0.05, "longDesc": "Time constant of roll controller command / response, modeled as first order delay.\nUsed to determine lower period bound. Setting zero disables automatic period bounding.\n", "max": 2.0, "min": 0.0, "name": "NPFG_ROLL_TC", "shortDesc": "Roll time constant", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.32, "group": "FW NPFG Control", "increment": 0.01, "longDesc": "Multiplied by the track error boundary to determine when the aircraft switches\nto the next waypoint and/or path segment. Should be less than 1.\n", "max": 1.0, "min": 0.1, "name": "NPFG_SW_DST_MLT", "shortDesc": "NPFG switch distance multiplier", "type": "Float"}, {"category": "Standard", "default": 1, "group": "FW NPFG Control", "longDesc": "Adapts period to maintain track keeping in variable winds and path curvature.\n", "name": "NPFG_UB_PERIOD", "shortDesc": "Enable automatic upper bound on the NPFG period", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "FW Performance", "increment": 0.01, "longDesc": "Factor applied to the minimum and stall airspeed when flaps are fully deployed.\n", "max": 1.0, "min": 0.5, "name": "FW_AIRSPD_FLP_SC", "shortDesc": "Airspeed scale with full flaps", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 20.0, "group": "FW Performance", "increment": 0.5, "longDesc": "The maximal airspeed (calibrated airspeed) the user is able to command.\n", "min": 0.5, "name": "FW_AIRSPD_MAX", "shortDesc": "Maximum Airspeed (CAS)", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 10.0, "group": "FW Performance", "increment": 0.5, "longDesc": "The minimal airspeed (calibrated airspeed) the user is able to command.\nFurther, if the airspeed falls below this value, the TECS controller will try to\nincrease airspeed more aggressively.\nHas to be set according to the vehicle's stall speed (which should be set in FW_AIRSPD_STALL),\nwith some margin between the stall speed and minimum airspeed.\nThis value corresponds to the desired minimum speed with the default load factor (level flight, default weight),\nand is automatically adpated to the current load factor (calculated from roll setpoint and WEIGHT_GROSS/WEIGHT_BASE).\n", "min": 0.5, "name": "FW_AIRSPD_MIN", "shortDesc": "Minimum Airspeed (CAS)", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 7.0, "group": "FW Performance", "increment": 0.5, "longDesc": "The stall airspeed (calibrated airspeed) of the vehicle.\nIt is used for airspeed sensor failure detection and for the control\nsurface scaling airspeed limits.\n", "min": 0.5, "name": "FW_AIRSPD_STALL", "shortDesc": "Stall Airspeed (CAS)", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 15.0, "group": "FW Performance", "increment": 0.5, "longDesc": "The trim CAS (calibrated airspeed) of the vehicle. If an airspeed controller is active,\nthis is the default airspeed setpoint that the controller will try to achieve.\nThis value corresponds to the trim airspeed with the default load factor (level flight, default weight).\n", "min": 0.5, "name": "FW_AIRSPD_TRIM", "shortDesc": "Trim (Cruise) Airspeed", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 0, "default": -1.0, "group": "FW Performance", "increment": 1.0, "longDesc": "Altitude in standard atmosphere at which the vehicle in normal configuration (WEIGHT_BASE) is still able to achieve a maximum climb rate of\n0.5m/s at maximum throttle (FW_THR_MAX). Used to compensate for air density in FW_T_CLMB_MAX.\nSet negative to disable.\n", "min": -1.0, "name": "FW_SERVICE_CEIL", "shortDesc": "Service ceiling", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "FW Performance", "increment": 0.01, "longDesc": "Required throttle (at sea level, standard atmosphere) for level flight at maximum airspeed FW_AIRSPD_MAX\n\nSet to 0 to disable mapping of airspeed to trim throttle.\n", "max": 1.0, "min": 0.0, "name": "FW_THR_ASPD_MAX", "shortDesc": "Throttle at max airspeed", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "FW Performance", "increment": 0.01, "longDesc": "Required throttle (at sea level, standard atmosphere) for level flight at minimum airspeed FW_AIRSPD_MIN\n\nSet to 0 to disable mapping of airspeed to trim throttle below FW_AIRSPD_TRIM.\n", "max": 1.0, "min": 0.0, "name": "FW_THR_ASPD_MIN", "shortDesc": "Throttle at min airspeed", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.6, "group": "FW Performance", "increment": 0.01, "longDesc": "Required throttle (at sea level, standard atmosphere) for level flight at FW_AIRSPD_TRIM\n", "max": 1.0, "min": 0.0, "name": "FW_THR_TRIM", "shortDesc": "Trim throttle", "type": "Float", "units": "norm"}, {"category": "Standard", "decimalPlaces": 1, "default": 5.0, "group": "FW Performance", "increment": 0.5, "longDesc": "This is the maximum calibrated climb rate that the aircraft can achieve with\nthe throttle set to FW_THR_MAX and the airspeed set to the\ntrim value. For electric aircraft make sure this number can be\nachieved towards the end of flight when the battery voltage has reduced.\n", "min": 1.0, "name": "FW_T_CLMB_MAX", "shortDesc": "Maximum climb rate", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 2.0, "group": "FW Performance", "increment": 0.5, "longDesc": "This is the minimum calibrated sink rate of the aircraft with the throttle\nset to THR_MIN and flown at the same airspeed as used\nto measure FW_T_CLMB_MAX.\n", "min": 1.0, "name": "FW_T_SINK_MIN", "shortDesc": "Minimum descent rate", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": -1.0, "group": "FW Performance", "increment": 0.5, "longDesc": "This is the weight of the vehicle at which it's performance limits were derived. A zero or negative value\ndisables trim throttle and minimum airspeed compensation based on weight.\n", "name": "WEIGHT_BASE", "shortDesc": "Vehicle base weight", "type": "Float", "units": "kg"}, {"category": "Standard", "decimalPlaces": 1, "default": -1.0, "group": "FW Performance", "increment": 0.1, "longDesc": "This is the actual weight of the vehicle at any time. This value will differ from WEIGHT_BASE in case weight was added\nor removed from the base weight. Examples are the addition of payloads or larger batteries. A zero or negative value\ndisables trim throttle and minimum airspeed compensation based on weight.\n", "name": "WEIGHT_GROSS", "shortDesc": "Vehicle gross weight", "type": "Float", "units": "kg"}, {"category": "Standard", "default": 90.0, "group": "FW Rate Control", "max": 720.0, "min": 10.0, "name": "FW_ACRO_X_MAX", "shortDesc": "Acro body roll max rate setpoint", "type": "Float", "units": "deg"}, {"category": "Standard", "default": 0, "group": "FW Rate Control", "longDesc": "If this parameter is set to 1, the yaw rate controller is enabled in Fixed-wing Acro mode.\nOtherwise the pilot commands directly the yaw actuator.\nIt is disabled by default because an active yaw rate controller will fight against the\nnatural turn coordination of the plane.\n", "name": "FW_ACRO_YAW_EN", "shortDesc": "Enable yaw rate controller in Acro", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 90.0, "group": "FW Rate Control", "max": 720.0, "min": 10.0, "name": "FW_ACRO_Y_MAX", "shortDesc": "Acro body pitch max rate setpoint", "type": "Float", "units": "deg"}, {"category": "Standard", "default": 45.0, "group": "FW Rate Control", "max": 720.0, "min": 10.0, "name": "FW_ACRO_Z_MAX", "shortDesc": "Acro body yaw max rate setpoint", "type": "Float", "units": "deg"}, {"category": "Standard", "default": 1, "group": "FW Rate Control", "longDesc": "This enables a logic that automatically adjusts the output of the rate controller to take\ninto account the real torque produced by an aerodynamic control surface given\nthe current deviation from the trim airspeed (FW_AIRSPD_TRIM).\n\nEnable when using aerodynamic control surfaces (e.g.: plane)\nDisable when using rotor wings (e.g.: autogyro)\n", "name": "FW_ARSP_SCALE_EN", "shortDesc": "Enable airspeed scaling", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 0, "group": "FW Rate Control", "longDesc": "This compensates for voltage drop of the battery over time by attempting to\nnormalize performance across the operating range of the battery.\n", "name": "FW_BAT_SCALE_EN", "shortDesc": "Enable throttle scale by battery level", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "FW Rate Control", "increment": 0.01, "longDesc": "This increment is added to TRIM_PITCH when airspeed is FW_AIRSPD_MAX.\n", "max": 0.5, "min": -0.5, "name": "FW_DTRIM_P_VMAX", "shortDesc": "Pitch trim increment at maximum airspeed", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "FW Rate Control", "increment": 0.01, "longDesc": "This increment is added to TRIM_PITCH when airspeed is FW_AIRSPD_MIN.\n", "max": 0.5, "min": -0.5, "name": "FW_DTRIM_P_VMIN", "shortDesc": "Pitch trim increment at minimum airspeed", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "FW Rate Control", "increment": 0.01, "longDesc": "This increment is added to TRIM_ROLL when airspeed is FW_AIRSPD_MAX.\n", "max": 0.5, "min": -0.5, "name": "FW_DTRIM_R_VMAX", "shortDesc": "Roll trim increment at maximum airspeed", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "FW Rate Control", "increment": 0.01, "longDesc": "This increment is added to TRIM_ROLL when airspeed is FW_AIRSPD_MIN.\n", "max": 0.5, "min": -0.5, "name": "FW_DTRIM_R_VMIN", "shortDesc": "Roll trim increment at minimum airspeed", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "FW Rate Control", "increment": 0.01, "longDesc": "This increment is added to TRIM_YAW when airspeed is FW_AIRSPD_MAX.\n", "max": 0.5, "min": -0.5, "name": "FW_DTRIM_Y_VMAX", "shortDesc": "Yaw trim increment at maximum airspeed", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "FW Rate Control", "increment": 0.01, "longDesc": "This increment is added to TRIM_YAW when airspeed is FW_AIRSPD_MIN.\n", "max": 0.5, "min": -0.5, "name": "FW_DTRIM_Y_VMIN", "shortDesc": "Yaw trim increment at minimum airspeed", "type": "Float"}, {"category": "Standard", "default": 0, "group": "FW Rate Control", "longDesc": "Chose source for manual setting of flaps in manual flight modes.\n", "name": "FW_FLAPS_MAN", "shortDesc": "Flap input in manual flight", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Aux1", "value": 1}, {"description": "Aux2", "value": 2}, {"description": "Aux3", "value": 3}, {"description": "Aux4", "value": 4}, {"description": "Aux5", "value": 5}, {"description": "Flaps channel", "value": 6}]}, {"category": "Standard", "default": 1, "group": "FW Rate Control", "name": "FW_GC_EN", "shortDesc": "Enable rate gain compression", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.3, "group": "FW Rate Control", "increment": 0.01, "longDesc": "The range of the compression gain is between this parameter and 1.0\n", "max": 1.0, "min": 0.0, "name": "FW_GC_GAIN_MIN", "shortDesc": "Compression gain lower limit", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "FW Rate Control", "increment": 0.01, "longDesc": "Scale factor applied to the desired pitch actuator command in full manual mode. This parameter allows\nto adjust the throws of the control surfaces.\n", "min": 0.0, "name": "FW_MAN_P_SC", "shortDesc": "Manual pitch scale", "type": "Float", "units": "norm"}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "FW Rate Control", "increment": 0.01, "longDesc": "Scale factor applied to the desired roll actuator command in full manual mode. This parameter allows\nto adjust the throws of the control surfaces.\n", "max": 1.0, "min": 0.0, "name": "FW_MAN_R_SC", "shortDesc": "Manual roll scale", "type": "Float", "units": "norm"}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "FW Rate Control", "increment": 0.01, "longDesc": "Scale factor applied to the desired yaw actuator command in full manual mode. This parameter allows\nto adjust the throws of the control surfaces.\n", "min": 0.0, "name": "FW_MAN_Y_SC", "shortDesc": "Manual yaw scale", "type": "Float", "units": "norm"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "FW Rate Control", "increment": 0.005, "longDesc": "Pitch rate differential gain.\n", "max": 10.0, "min": 0.0, "name": "FW_PR_D", "shortDesc": "Pitch rate derivative gain", "type": "Float", "units": "%/rad/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.5, "group": "FW Rate Control", "increment": 0.05, "longDesc": "Direct feed forward from rate setpoint to control surface output\n", "max": 10.0, "min": 0.0, "name": "FW_PR_FF", "shortDesc": "Pitch rate feed forward", "type": "Float", "units": "%/rad/s"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.1, "group": "FW Rate Control", "increment": 0.005, "max": 10.0, "min": 0.0, "name": "FW_PR_I", "shortDesc": "Pitch rate integrator gain", "type": "Float", "units": "%/rad"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.4, "group": "FW Rate Control", "increment": 0.05, "max": 1.0, "min": 0.0, "name": "FW_PR_IMAX", "shortDesc": "Pitch rate integrator limit", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.08, "group": "FW Rate Control", "increment": 0.005, "max": 10.0, "min": 0.0, "name": "FW_PR_P", "shortDesc": "Pitch rate proportional gain", "type": "Float", "units": "%/rad/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "FW Rate Control", "increment": 0.01, "longDesc": "This gain can be used to counteract the \"adverse yaw\" effect for fixed wings.\nWhen the plane enters a roll it will tend to yaw the nose out of the turn.\nThis gain enables the use of a yaw actuator to counteract this effect.\n", "min": 0.0, "name": "FW_RLL_TO_YAW_FF", "shortDesc": "Roll control to yaw control feedforward gain", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "FW Rate Control", "increment": 0.005, "max": 10.0, "min": 0.0, "name": "FW_RR_D", "shortDesc": "Roll rate derivative gain", "type": "Float", "units": "%/rad/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.5, "group": "FW Rate Control", "increment": 0.05, "longDesc": "Direct feed forward from rate setpoint to control surface output.\n", "max": 10.0, "min": 0.0, "name": "FW_RR_FF", "shortDesc": "Roll rate feed forward", "type": "Float", "units": "%/rad/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.1, "group": "FW Rate Control", "increment": 0.01, "max": 10.0, "min": 0.0, "name": "FW_RR_I", "shortDesc": "Roll rate integrator gain", "type": "Float", "units": "%/rad"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.2, "group": "FW Rate Control", "increment": 0.05, "max": 1.0, "min": 0.0, "name": "FW_RR_IMAX", "shortDesc": "Roll integrator limit", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.05, "group": "FW Rate Control", "increment": 0.005, "max": 10.0, "min": 0.0, "name": "FW_RR_P", "shortDesc": "Roll rate proportional gain", "type": "Float", "units": "%/rad/s"}, {"category": "Standard", "default": 0, "group": "FW Rate Control", "longDesc": "Chose source for manual setting of spoilers in manual flight modes.\n", "name": "FW_SPOILERS_MAN", "shortDesc": "Spoiler input in manual flight", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Flaps channel", "value": 1}, {"description": "Aux1", "value": 2}, {"description": "Aux2", "value": 3}, {"description": "Aux3", "value": 4}, {"description": "Aux4", "value": 5}, {"description": "Aux5", "value": 6}]}, {"category": "Standard", "default": 1, "group": "FW Rate Control", "longDesc": "If set to 1, the airspeed measurement data, if valid, is used in the following controllers:\n- Rate controller: output scaling\n- Attitude controller: coordinated turn controller\n- Position controller: airspeed setpoint tracking, takeoff logic\n- VTOL: transition logic\n", "name": "FW_USE_AIRSPD", "shortDesc": "Use airspeed for control", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "FW Rate Control", "increment": 0.005, "max": 10.0, "min": 0.0, "name": "FW_YR_D", "shortDesc": "Yaw rate derivative gain", "type": "Float", "units": "%/rad/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.3, "group": "FW Rate Control", "increment": 0.05, "longDesc": "Direct feed forward from rate setpoint to control surface output\n", "max": 10.0, "min": 0.0, "name": "FW_YR_FF", "shortDesc": "Yaw rate feed forward", "type": "Float", "units": "%/rad/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.1, "group": "FW Rate Control", "increment": 0.5, "max": 10.0, "min": 0.0, "name": "FW_YR_I", "shortDesc": "Yaw rate integrator gain", "type": "Float", "units": "%/rad"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.2, "group": "FW Rate Control", "increment": 0.05, "max": 1.0, "min": 0.0, "name": "FW_YR_IMAX", "shortDesc": "Yaw rate integrator limit", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.05, "group": "FW Rate Control", "increment": 0.005, "max": 10.0, "min": 0.0, "name": "FW_YR_P", "shortDesc": "Yaw rate proportional gain", "type": "Float", "units": "%/rad/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "Failure Detector", "increment": 0.5, "longDesc": "Maximum altitude loss below the setpoint allowed before the vehicle terminates and deploys the parachute. Set to 0 to disable.\n", "max": 200.0, "min": 0.0, "name": "FD_ALT_LOSS", "shortDesc": "Altitude loss threshold for termination and parachute deployment", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "Failure Detector", "longDesc": "Seconds that the altitude loss threshold must be exceeded before the failure is declared.\n", "max": 5.0, "min": 0.02, "name": "FD_ALT_LOSS_T", "shortDesc": "Altitude loss failure trigger time", "type": "Float", "units": "s"}, {"category": "Standard", "default": 0, "group": "Failure Detector", "longDesc": "Enable PWM input on for engaging failsafe from an external automatic trigger system (ATS)\n\nEnabled on either AUX5 or MAIN5 depending on board.\nExternal ATS is required by ASTM F3322-18.\n", "name": "FD_EXT_ATS_EN", "rebootRequired": true, "shortDesc": "Enable PWM input from external ATS for failsafe", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 2, "default": 1900, "group": "Failure Detector", "longDesc": "The PWM threshold from external automatic trigger system for engaging failsafe\n\nExternal ATS is required by ASTM F3322-18.\n", "name": "FD_EXT_ATS_TRIG", "shortDesc": "External ATS PWM threshold for failsafe", "type": "Int32", "units": "us"}, {"category": "Standard", "default": 60, "group": "Failure Detector", "longDesc": "Maximum pitch angle before FailureDetector triggers the attitude_failure flag.\nThe flag triggers flight termination (if @CBRK_FLIGHTTERM = 0),\nwhich sets outputs to their failsafe values.\nOn takeoff the flag triggers lockdown (irrespective of @CBRK_FLIGHTTERM),\nwhich disarms motors but does not set outputs to failsafe values.\n\nSetting this parameter to 0 disables the check\n", "max": 180, "min": 0, "name": "FD_FAIL_P", "shortDesc": "FailureDetector Max Pitch", "type": "Int32", "units": "deg"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.3, "group": "Failure Detector", "longDesc": "Seconds (decimal) that pitch has to exceed FD_FAIL_P before being considered as a failure.\n", "max": 5.0, "min": 0.02, "name": "FD_FAIL_P_TTRI", "shortDesc": "Pitch failure trigger time", "type": "Float", "units": "s"}, {"category": "Standard", "default": 60, "group": "Failure Detector", "longDesc": "Maximum roll angle before FailureDetector triggers the attitude_failure flag.\nThe flag triggers flight termination (if @CBRK_FLIGHTTERM = 0),\nwhich sets outputs to their failsafe values.\nOn takeoff the flag triggers lockdown (irrespective of @CBRK_FLIGHTTERM),\nwhich disarms motors but does not set outputs to failsafe values.\n\nSetting this parameter to 0 disables the check\n", "max": 180, "min": 0, "name": "FD_FAIL_R", "shortDesc": "FailureDetector Max Roll", "type": "Int32", "units": "deg"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.3, "group": "Failure Detector", "longDesc": "Seconds (decimal) that roll has to exceed FD_FAIL_R before being considered as a failure.\n", "max": 5.0, "min": 0.02, "name": "FD_FAIL_R_TTRI", "shortDesc": "Roll failure trigger time", "type": "Float", "units": "s"}, {"category": "Standard", "default": 30, "group": "Failure Detector", "increment": 1, "longDesc": "Value at which the imbalanced propeller metric (based on horizontal and\nvertical acceleration variance) triggers a failure\n\nSetting this value to 0 disables the feature.\n", "max": 1000, "min": 0, "name": "FD_IMB_PROP_THR", "shortDesc": "Imbalanced propeller check threshold", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 1, "default": 1000.0, "group": "Flight Task Orbit", "increment": 0.5, "max": 10000.0, "min": 1.0, "name": "MC_ORBIT_RAD_MAX", "shortDesc": "Maximum radius of orbit", "type": "Float", "units": "m"}, {"category": "Standard", "default": 0, "group": "Flight Task Orbit", "name": "MC_ORBIT_YAW_MOD", "shortDesc": "Yaw behaviour during orbit flight", "type": "Int32", "values": [{"description": "Front to Circle Center", "value": 0}, {"description": "Hold Initial Heading", "value": 1}, {"description": "Uncontrolled", "value": 2}, {"description": "Hold Front Tangent to Circle", "value": 3}, {"description": "Manually (yaw stick) Controlled", "value": 4}]}, {"category": "Standard", "default": 0, "group": "Follow target", "longDesc": "Maintain altitude or track target's altitude. When maintaining the altitude,\nthe drone can crash into terrain when the target moves uphill. When tracking\nthe target's altitude, the follow altitude FLW_TGT_HT should be high enough\nto prevent terrain collisions due to GPS inaccuracies of the target.\n", "name": "FLW_TGT_ALT_M", "shortDesc": "Altitude control mode", "type": "Int32", "values": [{"description": "2D Tracking: Maintain constant altitude relative to home and track XY position only", "value": 0}, {"description": "2D + Terrain: Maintain constant altitude relative to terrain below and track XY position", "value": 1}, {"description": "3D Tracking: Track target's altitude (be aware that GPS altitude bias usually makes this useless)", "value": 2}]}, {"category": "Standard", "default": 8.0, "group": "Follow target", "longDesc": "The distance in meters to follow the target at\n", "min": 1.0, "name": "FLW_TGT_DST", "shortDesc": "Distance to follow target from", "type": "Float", "units": "m"}, {"category": "Standard", "default": 180.0, "group": "Follow target", "longDesc": "Angle to follow the target from. 0.0 Equals straight in front of the target's\ncourse (direction of motion) and the angle increases in clockwise direction,\nmeaning Right-side would be 90.0 degrees while Left-side is -90.0 degrees\n\nNote: When the user force sets the angle out of the min/max range, it will be\nwrapped (e.g. 480 -> 120) in the range to gracefully handle the out of range.\n", "max": 180.0, "min": -180.0, "name": "FLW_TGT_FA", "shortDesc": "Follow Angle setting in degrees", "type": "Float"}, {"category": "Standard", "default": 8.0, "group": "Follow target", "longDesc": "Following height above the target\n", "min": 8.0, "name": "FLW_TGT_HT", "shortDesc": "Follow target height", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 1, "default": 5.0, "group": "Follow target", "longDesc": "Maximum tangential velocity setting for generating the follow orbit trajectory\n\nThis is the maximum tangential velocity the drone will circle around the target whenever\nan orbit angle setpoint changes. Higher value means more aggressive follow behavior.\n", "max": 20.0, "min": 0.0, "name": "FLW_TGT_MAX_VEL", "shortDesc": "Max tangential velocity for follow orbit trajectory", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.1, "group": "Follow target", "longDesc": "lower values increase the responsiveness to changing position, but also ignore less noise\n", "max": 1.0, "min": 0.0, "name": "FLW_TGT_RS", "shortDesc": "Responsiveness to target movement in Target Estimator", "type": "Float"}, {"bitmask": [{"description": "GPS (with QZSS)", "index": 0}, {"description": "SBAS", "index": 1}, {"description": "Galileo", "index": 2}, {"description": "BeiDou", "index": 3}, {"description": "GLONASS", "index": 4}, {"description": "NAVIC", "index": 5}], "category": "Standard", "default": 0, "group": "GPS", "longDesc": "This integer bitmask controls the set of GNSS systems used by the receiver. Check your\nreceiver's documentation on how many systems are supported to be used in parallel.\n\nCurrently this functionality is just implemented for u-blox receivers.\n\nWhen no bits are set, the receiver's default configuration should be used.\n\nSet bits true to enable:\n0 : Use GPS (with QZSS)\n1 : Use SBAS (multiple GPS augmentation systems)\n2 : Use Galileo\n3 : Use BeiDou\n4 : Use GLONASS\n5 : Use NAVIC\n", "max": 63, "min": 0, "name": "GPS_1_GNSS", "rebootRequired": true, "shortDesc": "GNSS Systems for Primary GPS (integer bitmask)", "type": "Int32"}, {"category": "Standard", "default": 1, "group": "GPS", "longDesc": "Select the GPS protocol over serial.\n\nAuto-detection will probe all protocols, and thus is a bit slower.\n", "max": 7, "min": 0, "name": "GPS_1_PROTOCOL", "rebootRequired": true, "shortDesc": "Protocol for Main GPS", "type": "Int32", "values": [{"description": "Auto detect", "value": 0}, {"description": "u-blox", "value": 1}, {"description": "MTK", "value": 2}, {"description": "Ashtech / Trimble", "value": 3}, {"description": "Emlid Reach", "value": 4}, {"description": "Femtomes", "value": 5}, {"description": "NMEA (generic)", "value": 6}]}, {"bitmask": [{"description": "GPS (with QZSS)", "index": 0}, {"description": "SBAS", "index": 1}, {"description": "Galileo", "index": 2}, {"description": "BeiDou", "index": 3}, {"description": "GLONASS", "index": 4}, {"description": "NAVIC", "index": 5}], "category": "Standard", "default": 0, "group": "GPS", "longDesc": "This integer bitmask controls the set of GNSS systems used by the receiver. Check your\nreceiver's documentation on how many systems are supported to be used in parallel.\n\nCurrently this functionality is just implemented for u-blox receivers.\n\nWhen no bits are set, the receiver's default configuration should be used.\n\nSet bits true to enable:\n0 : Use GPS (with QZSS)\n1 : Use SBAS (multiple GPS augmentation systems)\n2 : Use Galileo\n3 : Use BeiDou\n4 : Use GLONASS\n5 : Use NAVIC\n", "max": 63, "min": 0, "name": "GPS_2_GNSS", "rebootRequired": true, "shortDesc": "GNSS Systems for Secondary GPS (integer bitmask)", "type": "Int32"}, {"category": "Standard", "default": 1, "group": "GPS", "longDesc": "Select the GPS protocol over serial.\n\nAuto-detection will probe all protocols, and thus is a bit slower.\n", "max": 6, "min": 0, "name": "GPS_2_PROTOCOL", "rebootRequired": true, "shortDesc": "Protocol for Secondary GPS", "type": "Int32", "values": [{"description": "Auto detect", "value": 0}, {"description": "u-blox", "value": 1}, {"description": "MTK", "value": 2}, {"description": "Ashtech / Trimble", "value": 3}, {"description": "Emlid Reach", "value": 4}, {"description": "Femtomes", "value": 5}, {"description": "NMEA (generic)", "value": 6}]}, {"category": "Standard", "default": 0, "group": "GPS", "longDesc": "Some UBX modules have a FLASH that allows to store persistent configuration that will be loaded on start.\nPX4 does override all configuration parameters it needs in RAM, which takes precedence over the values in FLASH.\nHowever, configuration parameters that are not overriden by PX4 can still cause unexpected problems during flight.\nTo avoid these kind of problems a clean config can be reached by wiping the FLASH on boot.\n\nNote: Currently only supported on UBX.\n", "name": "GPS_CFG_WIPE", "rebootRequired": true, "shortDesc": "Wipes the flash config of UBX modules", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 0, "group": "GPS", "longDesc": "If this is set to 1, all GPS communication data will be published via uORB,\nand written to the log file as gps_dump message.\n\nIf this is set to 2, the main GPS is configured to output RTCM data,\nwhich is then logged as gps_dump and can be used for PPK.\n", "max": 2, "min": 0, "name": "GPS_DUMP_COMM", "shortDesc": "Log GPS communication data", "type": "Int32", "values": [{"description": "Disable", "value": 0}, {"description": "Full communication", "value": 1}, {"description": "RTCM output (PPK)", "value": 2}]}, {"category": "Standard", "default": 0, "group": "GPS", "longDesc": "Enable publication of satellite info (ORB_ID(satellite_info)) if possible.\nNot available on MTK.\n", "name": "GPS_SAT_INFO", "rebootRequired": true, "shortDesc": "Enable sat info (if available)", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 230400, "group": "GPS", "longDesc": "Select a baudrate for the F9P's UART2 port.\nIn GPS_UBX_MODE 1, 2, and 3, the F9P's UART2 port is configured to send/receive RTCM corrections.\nSet this to 57600 if you want to attach a telemetry radio on UART2.\n", "min": 0, "name": "GPS_UBX_BAUD2", "rebootRequired": true, "shortDesc": "u-blox F9P UART2 Baudrate", "type": "Int32", "units": "B/s"}, {"bitmask": [{"description": "Enable I2C input protocol UBX", "index": 0}, {"description": "Enable I2C input protocol NMEA", "index": 1}, {"description": "Enable I2C input protocol RTCM3X", "index": 2}, {"description": "Enable I2C output protocol UBX", "index": 3}, {"description": "Enable I2C output protocol NMEA", "index": 4}, {"description": "Enable I2C output protocol RTCM3X", "index": 5}], "category": "Standard", "default": 0, "group": "GPS", "max": 32, "min": 0, "name": "GPS_UBX_CFG_INTF", "rebootRequired": true, "shortDesc": "u-blox protocol configuration for interfaces", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "GPS", "longDesc": "When set to 0 (default), default DGNSS timeout set by u-blox will be used.\n", "max": 255, "min": 0, "name": "GPS_UBX_DGNSS_TO", "rebootRequired": true, "shortDesc": "u-blox GPS DGNSS timeout", "type": "Int32", "units": "s"}, {"category": "Standard", "default": 7, "group": "GPS", "longDesc": "u-blox receivers support different dynamic platform models to adjust the navigation engine to\nthe expected application environment.\n", "max": 9, "min": 0, "name": "GPS_UBX_DYNMODEL", "rebootRequired": true, "shortDesc": "u-blox GPS dynamic platform model", "type": "Int32", "values": [{"description": "stationary", "value": 2}, {"description": "automotive", "value": 4}, {"description": "airborne with <1g acceleration", "value": 6}, {"description": "airborne with <2g acceleration", "value": 7}, {"description": "airborne with <4g acceleration", "value": 8}]}, {"category": "Standard", "default": 1, "group": "GPS", "longDesc": "Enables or disables the high sensitivity mode for the u-blox jamming detection\n(CFG-SEC-JAMDET_SENSITIVITY_HI). When enabled, the receiver uses a\nmore sensitive algorithm to detect jamming. Disabling this may reduce false\npositives in electrically noisy environments.\n", "name": "GPS_UBX_JAM_DET", "rebootRequired": true, "shortDesc": "u-blox GPS jamming detection high sensitivity mode", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 0, "group": "GPS", "longDesc": "When set to 0 (default), default minimum satellite signal level set by u-blox wll be used.\n", "max": 255, "min": 0, "name": "GPS_UBX_MIN_CNO", "rebootRequired": true, "shortDesc": "u-blox GPS minimum satellite signal level for navigation", "type": "Int32", "units": "dBHz"}, {"category": "Standard", "default": 0, "group": "GPS", "longDesc": "u-blox GPS minimum elevation for a GNSS satellite to be used in navigation\n\nWhen set to 0 (default), default minimum elevation set by u-blox will be used.\n", "max": 127, "min": 0, "name": "GPS_UBX_MIN_ELEV", "rebootRequired": true, "shortDesc": "u-blox GPS minimum satellite elevation angle", "type": "Int32", "units": "deg"}, {"category": "Standard", "default": 0, "group": "GPS", "longDesc": "Select the u-blox configuration setup. Most setups will use the default, including RTK and\ndual GPS without heading.\n\nIf rover has RTCM corrections from a static base (or other static correction source) coming in on UART2, then select Mode 5.\nThe Heading mode requires 2 F9P devices to be attached. The main GPS will act as rover and output\nheading information, whereas the secondary will act as moving base.\nModes 1 and 2 require each F9P UART1 to be connected to the Autopilot. In addition, UART2 on the\nF9P units are connected to each other.\nModes 3 and 4 only require UART1 on each F9P connected to the Autopilot or Can Node. UART RX DMA is required.\nRTK is still possible with this setup.\nMode 6 is intended for use with a ground control station (not necessarily an RTK correction base).\n", "max": 6, "min": 0, "name": "GPS_UBX_MODE", "rebootRequired": true, "shortDesc": "u-blox GPS Mode", "type": "Int32", "values": [{"description": "Default", "value": 0}, {"description": "Heading (Rover With Moving Base UART1 Connected To Autopilot, UART2 Connected To Moving Base)", "value": 1}, {"description": "Moving Base (UART1 Connected To Autopilot, UART2 Connected To Rover)", "value": 2}, {"description": "Heading (Rover With Moving Base UART1 Connected to Autopilot Or Can Node At 921600)", "value": 3}, {"description": "Moving Base (Moving Base UART1 Connected to Autopilot Or Can Node At 921600)", "value": 4}, {"description": "Rover with Static Base on UART2 (similar to Default, except coming in on UART2)", "value": 5}, {"description": "Ground Control Station (UART2 outputs NMEA)", "value": 6}]}, {"category": "Standard", "default": 0, "group": "GPS", "name": "GPS_UBX_PPK", "rebootRequired": true, "shortDesc": "Enable MSM7 message output for PPK workflow", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 0, "group": "GPS", "longDesc": "Configure the output rate of u-blox GPS receivers (protocol v27+).\nWhen set to 0, automatic rate selection is used based on the receiver model.\nDefault rates: M9N=8Hz, F9P L1L2=5Hz, F9P L1L5=5Hz, Others=10Hz.\n\nNote: Higher rates reduce satellite count (e.g., >8Hz limits to 16 SVs on M9N).\nMax rates vary by model and RTK mode: F9P L1L2=5-7Hz, F9P L1L5=7-8Hz, X20=25Hz.\nHigh rates at 115200 baud may cause dropouts.\n", "max": 25, "min": 0, "name": "GPS_UBX_RATE", "rebootRequired": true, "shortDesc": "u-blox GPS output rate", "type": "Int32", "units": "Hz"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "GPS", "longDesc": "Heading offset angle for dual antenna GPS setups that support heading estimation.\n\nSet this to 0 if the antennas are parallel to the forward-facing direction\nof the vehicle and the rover (or Unicore primary) antenna is in front.\n\nThe offset angle increases clockwise.\n\nSet this to 90 if the rover (or Unicore primary, or Septentrio Mosaic Aux)\nantenna is placed on the right side of the vehicle and the moving base\nantenna is on the left side.\n\n(Note: the Unicore primary antenna is the one connected on the right as seen\nfrom the top).\n", "max": 360.0, "min": 0.0, "name": "GPS_YAW_OFFSET", "rebootRequired": true, "shortDesc": "Heading/Yaw offset for dual antenna GPS", "type": "Float", "units": "deg"}, {"category": "Standard", "default": 2, "group": "Geofence", "longDesc": "Note: Setting this value to 4 enables flight termination,\nwhich will kill the vehicle on violation of the fence.\n", "max": 5, "min": 0, "name": "GF_ACTION", "shortDesc": "Geofence violation action", "type": "Int32", "values": [{"description": "None", "value": 0}, {"description": "Warning", "value": 1}, {"description": "Hold mode", "value": 2}, {"description": "Return mode", "value": 3}, {"description": "Terminate", "value": 4}, {"description": "Land mode", "value": 5}]}, {"category": "Standard", "default": 0.0, "group": "Geofence", "increment": 1.0, "longDesc": "Maximum horizontal distance in meters the vehicle can be from Home before triggering a geofence action.\nDisabled if 0.\n", "max": 10000.0, "min": 0.0, "name": "GF_MAX_HOR_DIST", "shortDesc": "Max horizontal distance from Home", "type": "Float", "units": "m"}, {"category": "Standard", "default": 0.0, "group": "Geofence", "increment": 1.0, "longDesc": "Maximum vertical distance in meters the vehicle can be from Home before triggering a geofence action.\nDisabled if 0.\n", "max": 10000.0, "min": 0.0, "name": "GF_MAX_VER_DIST", "shortDesc": "Max vertical distance from Home", "type": "Float", "units": "m"}, {"category": "Standard", "default": 0, "group": "Geofence", "longDesc": "WARNING: This experimental feature may cause flyaways. Use at your own risk.\n\nPredict the motion of the vehicle and trigger the breach if it is determined that the current trajectory\nwould result in a breach happening before the vehicle can make evasive maneuvers.\nThe vehicle is then re-routed to a safe hold position (stop for multirotor, loiter for fixed wing).\n", "name": "GF_PREDICT", "shortDesc": "[EXPERIMENTAL] Use Pre-emptive geofence triggering", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 0, "group": "Geofence", "longDesc": "Select which position source should be used. Selecting GPS instead of global position makes sure that there is\nno dependence on the position estimator\n0 = global position, 1 = GPS\n", "max": 1, "min": 0, "name": "GF_SOURCE", "shortDesc": "Geofence source", "type": "Int32", "values": [{"description": "GPOS", "value": 0}, {"description": "GPS", "value": 1}]}, {"category": "Standard", "default": 0, "group": "Geometry", "longDesc": "Defines which mixer implementation to use.\nSome are generic, while others are specifically fit to a certain vehicle with a fixed set of actuators.\n\n'Custom' should only be used if noting else can be used.\n\n", "name": "CA_AIRFRAME", "shortDesc": "Airframe selection", "type": "Int32", "values": [{"description": "Multirotor", "value": 0}, {"description": "Fixed-wing", "value": 1}, {"description": "Standard VTOL", "value": 2}, {"description": "Tiltrotor VTOL", "value": 3}, {"description": "Tailsitter VTOL", "value": 4}, {"description": "Rover (Ackermann)", "value": 5}, {"description": "Rover (Differential)", "value": 6}, {"description": "Motors (6DOF)", "value": 7}, {"description": "Multirotor with Tilt", "value": 8}, {"description": "Custom", "value": 9}, {"description": "Helicopter (tail ESC)", "value": 10}, {"description": "Helicopter (tail Servo)", "value": 11}, {"description": "Helicopter (Coaxial)", "value": 12}, {"description": "Rover (Mecanum)", "value": 13}, {"description": "Spacecraft 2D", "value": 14}, {"description": "Spacecraft 3D", "value": 15}]}, {"bitmask": [{"description": "Control Surface 1", "index": 0}, {"description": "Control Surface 2", "index": 1}, {"description": "Control Surface 3", "index": 2}, {"description": "Control Surface 4", "index": 3}, {"description": "Control Surface 5", "index": 4}, {"description": "Control Surface 6", "index": 5}, {"description": "Control Surface 7", "index": 6}, {"description": "Control Surface 8", "index": 7}], "category": "Standard", "default": 0, "group": "Geometry", "longDesc": "If actuator launch lock is enabled, this surface is kept at the disarmed value.\n", "max": 255, "min": 0, "name": "CA_CS_LAUN_LK", "shortDesc": "Control surface launch lock enabled", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "Geometry", "longDesc": "This is used to specify how to handle motor failures\nreported by failure detector.\n\n", "name": "CA_FAILURE_MODE", "shortDesc": "Motor failure handling mode", "type": "Int32", "values": [{"description": "Ignore", "value": 0}, {"description": "Remove first failed motor from effectiveness", "value": 1}]}, {"category": "Standard", "decimalPlaces": 3, "default": -0.05, "group": "Geometry", "increment": 0.1, "longDesc": "Defines the collective pitch at the interval position 0 for a given thrust setpoint.\n\nUse negative values if the swash plate needs to move down to provide upwards thrust.\n\n", "max": 1.0, "min": -1.0, "name": "CA_HELI_PITCH_C0", "shortDesc": "Collective pitch curve at position 0", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0725, "group": "Geometry", "increment": 0.1, "longDesc": "Defines the collective pitch at the interval position 1 for a given thrust setpoint.\n\nUse negative values if the swash plate needs to move down to provide upwards thrust.\n\n", "max": 1.0, "min": -1.0, "name": "CA_HELI_PITCH_C1", "shortDesc": "Collective pitch curve at position 1", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.2, "group": "Geometry", "increment": 0.1, "longDesc": "Defines the collective pitch at the interval position 2 for a given thrust setpoint.\n\nUse negative values if the swash plate needs to move down to provide upwards thrust.\n\n", "max": 1.0, "min": -1.0, "name": "CA_HELI_PITCH_C2", "shortDesc": "Collective pitch curve at position 2", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.325, "group": "Geometry", "increment": 0.1, "longDesc": "Defines the collective pitch at the interval position 3 for a given thrust setpoint.\n\nUse negative values if the swash plate needs to move down to provide upwards thrust.\n\n", "max": 1.0, "min": -1.0, "name": "CA_HELI_PITCH_C3", "shortDesc": "Collective pitch curve at position 3", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.45, "group": "Geometry", "increment": 0.1, "longDesc": "Defines the collective pitch at the interval position 4 for a given thrust setpoint.\n\nUse negative values if the swash plate needs to move down to provide upwards thrust.\n\n", "max": 1.0, "min": -1.0, "name": "CA_HELI_PITCH_C4", "shortDesc": "Collective pitch curve at position 4", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "Same definition as the proportional gain but for integral.\n\n", "max": 10.0, "min": 0.0, "name": "CA_HELI_RPM_I", "shortDesc": "Integral gain for rpm control", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "Ratio between rpm error devided by 1000 to how much normalized output gets added to correct for it.\n\nmotor_command = throttle_curve + CA_HELI_RPM_P * (rpm_setpoint - rpm_measurement) / 1000\n\n", "max": 10.0, "min": 0.0, "name": "CA_HELI_RPM_P", "shortDesc": "Proportional gain for rpm control", "type": "Float"}, {"category": "Standard", "decimalPlaces": 0, "default": 1500.0, "group": "Geometry", "increment": 1.0, "longDesc": "Requires rpm feedback for the controller.\n\n", "max": 10000.0, "min": 100.0, "name": "CA_HELI_RPM_SP", "shortDesc": "Setpoint for main rotor rpm", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 1.0, "group": "Geometry", "increment": 0.1, "longDesc": "Defines the output throttle at the interval position 0.\n\n", "max": 1.0, "min": 0.0, "name": "CA_HELI_THR_C0", "shortDesc": "Throttle curve at position 0", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 1.0, "group": "Geometry", "increment": 0.1, "longDesc": "Defines the output throttle at the interval position 1.\n\n", "max": 1.0, "min": 0.0, "name": "CA_HELI_THR_C1", "shortDesc": "Throttle curve at position 1", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 1.0, "group": "Geometry", "increment": 0.1, "longDesc": "Defines the output throttle at the interval position 2.\n\n", "max": 1.0, "min": 0.0, "name": "CA_HELI_THR_C2", "shortDesc": "Throttle curve at position 2", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 1.0, "group": "Geometry", "increment": 0.1, "longDesc": "Defines the output throttle at the interval position 3.\n\n", "max": 1.0, "min": 0.0, "name": "CA_HELI_THR_C3", "shortDesc": "Throttle curve at position 3", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 1.0, "group": "Geometry", "increment": 0.1, "longDesc": "Defines the output throttle at the interval position 4.\n\n", "max": 1.0, "min": 0.0, "name": "CA_HELI_THR_C4", "shortDesc": "Throttle curve at position 4", "type": "Float"}, {"category": "Standard", "default": 0, "group": "Geometry", "longDesc": "Default configuration is for a clockwise turning main rotor and\npositive thrust of the tail rotor is expected to rotate the vehicle clockwise.\nSet this parameter to true if the tail rotor provides thrust in counter-clockwise direction\nwhich is mostly the case when the main rotor turns counter-clockwise.\n\n", "name": "CA_HELI_YAW_CCW", "shortDesc": "Main rotor turns counter-clockwise", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "This allows to specify which collective pitch command results in the least amount of rotor drag.\nThis is used to increase the accuracy of the yaw drag torque compensation based on collective pitch\nby aligning the lowest rotor drag with zero compensation.\nFor symmetric profile blades this is the command that results in exactly 0\u00b0 collective blade angle.\nFor lift profile blades this is typically a command resulting in slightly negative collective blade angle.\n\ntail_output += CA_HELI_YAW_CP_S * abs(collective_pitch - CA_HELI_YAW_CP_O)\n\n", "max": 2.0, "min": -2.0, "name": "CA_HELI_YAW_CP_O", "shortDesc": "Offset for yaw compensation based on collective pitch", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "This allows to add a proportional factor of the collective pitch command to the yaw command.\nA negative value is needed when positive thrust of the tail rotor rotates the vehicle opposite to the main rotor turn direction.\n\ntail_output += CA_HELI_YAW_CP_S * abs(collective_pitch - CA_HELI_YAW_CP_O)\n\n", "max": 2.0, "min": -2.0, "name": "CA_HELI_YAW_CP_S", "shortDesc": "Scale for yaw compensation based on collective pitch", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "This allows to add a proportional factor of the throttle command to the yaw command.\nA negative value is needed when positive thrust of the tail rotor rotates the vehicle opposite to the main rotor turn direction.\n\ntail_output += CA_HELI_YAW_TH_S * throttle\n\n", "max": 2.0, "min": -2.0, "name": "CA_HELI_YAW_TH_S", "shortDesc": "Scale for yaw compensation based on throttle", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "Ice shedding prevents ice buildup in VTOL aircraft motors by periodically spinning inactive rotors.\nWhen enabled (period > 0), every cycle lasts for the defined period and includes a 2-second spin at 0.01 motor output.\nIf period <= 0, the feature is disabled.\n\n", "min": 0.0, "name": "CA_ICE_PERIOD", "shortDesc": "Ice shedding cycle period", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "Used to linearize mechanical output of swashplate servos to avoid axis coupling and binding with 4 servo redundancy.\nThis requires a symmetric setup where the servo horn is exactly centered with a 0 command.\nSetting to zero disables feature.\n\n", "max": 75.0, "min": 0.0, "name": "CA_MAX_SVO_THROW", "shortDesc": "Throw angle of swashplate servo at maximum commands for linearization", "type": "Float", "units": "deg"}, {"category": "Standard", "default": 2, "group": "Geometry", "longDesc": "Selects the algorithm and desaturation method.\nIf set to Automatic, the selection is based on the airframe (CA_AIRFRAME).\n\n", "name": "CA_METHOD", "shortDesc": "Control allocation method", "type": "Int32", "values": [{"description": "Pseudo-inverse with output clipping", "value": 0}, {"description": "Pseudo-inverse with sequential desaturation technique", "value": 1}, {"description": "Automatic", "value": 2}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.01, "longDesc": "Forces the motor output signal to take at least the configured time (in seconds)\nto traverse its full range (normally [0, 1], or if reversible [-1, 1]).\n\nZero means that slew rate limiting is disabled.\n\n", "max": 10.0, "min": 0.0, "name": "CA_R0_SLEW", "shortDesc": "Motor 0 slew rate limit", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.01, "longDesc": "Forces the motor output signal to take at least the configured time (in seconds)\nto traverse its full range (normally [0, 1], or if reversible [-1, 1]).\n\nZero means that slew rate limiting is disabled.\n\n", "max": 10.0, "min": 0.0, "name": "CA_R10_SLEW", "shortDesc": "Motor 10 slew rate limit", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.01, "longDesc": "Forces the motor output signal to take at least the configured time (in seconds)\nto traverse its full range (normally [0, 1], or if reversible [-1, 1]).\n\nZero means that slew rate limiting is disabled.\n\n", "max": 10.0, "min": 0.0, "name": "CA_R11_SLEW", "shortDesc": "Motor 11 slew rate limit", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.01, "longDesc": "Forces the motor output signal to take at least the configured time (in seconds)\nto traverse its full range (normally [0, 1], or if reversible [-1, 1]).\n\nZero means that slew rate limiting is disabled.\n\n", "max": 10.0, "min": 0.0, "name": "CA_R1_SLEW", "shortDesc": "Motor 1 slew rate limit", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.01, "longDesc": "Forces the motor output signal to take at least the configured time (in seconds)\nto traverse its full range (normally [0, 1], or if reversible [-1, 1]).\n\nZero means that slew rate limiting is disabled.\n\n", "max": 10.0, "min": 0.0, "name": "CA_R2_SLEW", "shortDesc": "Motor 2 slew rate limit", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.01, "longDesc": "Forces the motor output signal to take at least the configured time (in seconds)\nto traverse its full range (normally [0, 1], or if reversible [-1, 1]).\n\nZero means that slew rate limiting is disabled.\n\n", "max": 10.0, "min": 0.0, "name": "CA_R3_SLEW", "shortDesc": "Motor 3 slew rate limit", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.01, "longDesc": "Forces the motor output signal to take at least the configured time (in seconds)\nto traverse its full range (normally [0, 1], or if reversible [-1, 1]).\n\nZero means that slew rate limiting is disabled.\n\n", "max": 10.0, "min": 0.0, "name": "CA_R4_SLEW", "shortDesc": "Motor 4 slew rate limit", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.01, "longDesc": "Forces the motor output signal to take at least the configured time (in seconds)\nto traverse its full range (normally [0, 1], or if reversible [-1, 1]).\n\nZero means that slew rate limiting is disabled.\n\n", "max": 10.0, "min": 0.0, "name": "CA_R5_SLEW", "shortDesc": "Motor 5 slew rate limit", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.01, "longDesc": "Forces the motor output signal to take at least the configured time (in seconds)\nto traverse its full range (normally [0, 1], or if reversible [-1, 1]).\n\nZero means that slew rate limiting is disabled.\n\n", "max": 10.0, "min": 0.0, "name": "CA_R6_SLEW", "shortDesc": "Motor 6 slew rate limit", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.01, "longDesc": "Forces the motor output signal to take at least the configured time (in seconds)\nto traverse its full range (normally [0, 1], or if reversible [-1, 1]).\n\nZero means that slew rate limiting is disabled.\n\n", "max": 10.0, "min": 0.0, "name": "CA_R7_SLEW", "shortDesc": "Motor 7 slew rate limit", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.01, "longDesc": "Forces the motor output signal to take at least the configured time (in seconds)\nto traverse its full range (normally [0, 1], or if reversible [-1, 1]).\n\nZero means that slew rate limiting is disabled.\n\n", "max": 10.0, "min": 0.0, "name": "CA_R8_SLEW", "shortDesc": "Motor 8 slew rate limit", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.01, "longDesc": "Forces the motor output signal to take at least the configured time (in seconds)\nto traverse its full range (normally [0, 1], or if reversible [-1, 1]).\n\nZero means that slew rate limiting is disabled.\n\n", "max": 10.0, "min": 0.0, "name": "CA_R9_SLEW", "shortDesc": "Motor 9 slew rate limit", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).\n", "max": 100.0, "min": -100.0, "name": "CA_ROTOR0_AX", "shortDesc": "Axis of rotor 0 thrust vector, X body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).\n", "max": 100.0, "min": -100.0, "name": "CA_ROTOR0_AY", "shortDesc": "Axis of rotor 0 thrust vector, Y body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": -1.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).\n", "max": 100.0, "min": -100.0, "name": "CA_ROTOR0_AZ", "shortDesc": "Axis of rotor 0 thrust vector, Z body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 6.5, "group": "Geometry", "increment": 1.0, "longDesc": "The thrust coefficient if defined as Thrust = CT * u^2,\nwhere u (with value between actuator minimum and maximum)\nis the output signal sent to the motor controller.\n\n", "max": 100.0, "min": 0.0, "name": "CA_ROTOR0_CT", "shortDesc": "Thrust coefficient of rotor 0", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.05, "group": "Geometry", "increment": 0.01, "longDesc": "The moment coefficient if defined as Torque = KM * Thrust.\n\nUse a positive value for a rotor with CCW rotation.\nUse a negative value for a rotor with CW rotation.\n\n", "max": 1.0, "min": -1.0, "name": "CA_ROTOR0_KM", "shortDesc": "Moment coefficient of rotor 0", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR0_PX", "shortDesc": "Position of rotor 0 along X body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR0_PY", "shortDesc": "Position of rotor 0 along Y body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR0_PZ", "shortDesc": "Position of rotor 0 along Z body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "default": 0, "group": "Geometry", "longDesc": "If not set to None, this motor is tilted by the configured tilt servo.\n", "name": "CA_ROTOR0_TILT", "shortDesc": "Rotor 0 tilt assignment", "type": "Int32", "values": [{"description": "None", "value": 0}, {"description": "Tilt 1", "value": 1}, {"description": "Tilt 2", "value": 2}, {"description": "Tilt 3", "value": 3}, {"description": "Tilt 4", "value": 4}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).\n", "max": 100.0, "min": -100.0, "name": "CA_ROTOR10_AX", "shortDesc": "Axis of rotor 10 thrust vector, X body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).\n", "max": 100.0, "min": -100.0, "name": "CA_ROTOR10_AY", "shortDesc": "Axis of rotor 10 thrust vector, Y body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": -1.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).\n", "max": 100.0, "min": -100.0, "name": "CA_ROTOR10_AZ", "shortDesc": "Axis of rotor 10 thrust vector, Z body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 6.5, "group": "Geometry", "increment": 1.0, "longDesc": "The thrust coefficient if defined as Thrust = CT * u^2,\nwhere u (with value between actuator minimum and maximum)\nis the output signal sent to the motor controller.\n\n", "max": 100.0, "min": 0.0, "name": "CA_ROTOR10_CT", "shortDesc": "Thrust coefficient of rotor 10", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.05, "group": "Geometry", "increment": 0.01, "longDesc": "The moment coefficient if defined as Torque = KM * Thrust.\n\nUse a positive value for a rotor with CCW rotation.\nUse a negative value for a rotor with CW rotation.\n\n", "max": 1.0, "min": -1.0, "name": "CA_ROTOR10_KM", "shortDesc": "Moment coefficient of rotor 10", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR10_PX", "shortDesc": "Position of rotor 10 along X body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR10_PY", "shortDesc": "Position of rotor 10 along Y body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR10_PZ", "shortDesc": "Position of rotor 10 along Z body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "default": 0, "group": "Geometry", "longDesc": "If not set to None, this motor is tilted by the configured tilt servo.\n", "name": "CA_ROTOR10_TILT", "shortDesc": "Rotor 10 tilt assignment", "type": "Int32", "values": [{"description": "None", "value": 0}, {"description": "Tilt 1", "value": 1}, {"description": "Tilt 2", "value": 2}, {"description": "Tilt 3", "value": 3}, {"description": "Tilt 4", "value": 4}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).\n", "max": 100.0, "min": -100.0, "name": "CA_ROTOR11_AX", "shortDesc": "Axis of rotor 11 thrust vector, X body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).\n", "max": 100.0, "min": -100.0, "name": "CA_ROTOR11_AY", "shortDesc": "Axis of rotor 11 thrust vector, Y body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": -1.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).\n", "max": 100.0, "min": -100.0, "name": "CA_ROTOR11_AZ", "shortDesc": "Axis of rotor 11 thrust vector, Z body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 6.5, "group": "Geometry", "increment": 1.0, "longDesc": "The thrust coefficient if defined as Thrust = CT * u^2,\nwhere u (with value between actuator minimum and maximum)\nis the output signal sent to the motor controller.\n\n", "max": 100.0, "min": 0.0, "name": "CA_ROTOR11_CT", "shortDesc": "Thrust coefficient of rotor 11", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.05, "group": "Geometry", "increment": 0.01, "longDesc": "The moment coefficient if defined as Torque = KM * Thrust.\n\nUse a positive value for a rotor with CCW rotation.\nUse a negative value for a rotor with CW rotation.\n\n", "max": 1.0, "min": -1.0, "name": "CA_ROTOR11_KM", "shortDesc": "Moment coefficient of rotor 11", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR11_PX", "shortDesc": "Position of rotor 11 along X body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR11_PY", "shortDesc": "Position of rotor 11 along Y body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR11_PZ", "shortDesc": "Position of rotor 11 along Z body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "default": 0, "group": "Geometry", "longDesc": "If not set to None, this motor is tilted by the configured tilt servo.\n", "name": "CA_ROTOR11_TILT", "shortDesc": "Rotor 11 tilt assignment", "type": "Int32", "values": [{"description": "None", "value": 0}, {"description": "Tilt 1", "value": 1}, {"description": "Tilt 2", "value": 2}, {"description": "Tilt 3", "value": 3}, {"description": "Tilt 4", "value": 4}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).\n", "max": 100.0, "min": -100.0, "name": "CA_ROTOR1_AX", "shortDesc": "Axis of rotor 1 thrust vector, X body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).\n", "max": 100.0, "min": -100.0, "name": "CA_ROTOR1_AY", "shortDesc": "Axis of rotor 1 thrust vector, Y body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": -1.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).\n", "max": 100.0, "min": -100.0, "name": "CA_ROTOR1_AZ", "shortDesc": "Axis of rotor 1 thrust vector, Z body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 6.5, "group": "Geometry", "increment": 1.0, "longDesc": "The thrust coefficient if defined as Thrust = CT * u^2,\nwhere u (with value between actuator minimum and maximum)\nis the output signal sent to the motor controller.\n\n", "max": 100.0, "min": 0.0, "name": "CA_ROTOR1_CT", "shortDesc": "Thrust coefficient of rotor 1", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.05, "group": "Geometry", "increment": 0.01, "longDesc": "The moment coefficient if defined as Torque = KM * Thrust.\n\nUse a positive value for a rotor with CCW rotation.\nUse a negative value for a rotor with CW rotation.\n\n", "max": 1.0, "min": -1.0, "name": "CA_ROTOR1_KM", "shortDesc": "Moment coefficient of rotor 1", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR1_PX", "shortDesc": "Position of rotor 1 along X body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR1_PY", "shortDesc": "Position of rotor 1 along Y body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR1_PZ", "shortDesc": "Position of rotor 1 along Z body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "default": 0, "group": "Geometry", "longDesc": "If not set to None, this motor is tilted by the configured tilt servo.\n", "name": "CA_ROTOR1_TILT", "shortDesc": "Rotor 1 tilt assignment", "type": "Int32", "values": [{"description": "None", "value": 0}, {"description": "Tilt 1", "value": 1}, {"description": "Tilt 2", "value": 2}, {"description": "Tilt 3", "value": 3}, {"description": "Tilt 4", "value": 4}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).\n", "max": 100.0, "min": -100.0, "name": "CA_ROTOR2_AX", "shortDesc": "Axis of rotor 2 thrust vector, X body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).\n", "max": 100.0, "min": -100.0, "name": "CA_ROTOR2_AY", "shortDesc": "Axis of rotor 2 thrust vector, Y body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": -1.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).\n", "max": 100.0, "min": -100.0, "name": "CA_ROTOR2_AZ", "shortDesc": "Axis of rotor 2 thrust vector, Z body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 6.5, "group": "Geometry", "increment": 1.0, "longDesc": "The thrust coefficient if defined as Thrust = CT * u^2,\nwhere u (with value between actuator minimum and maximum)\nis the output signal sent to the motor controller.\n\n", "max": 100.0, "min": 0.0, "name": "CA_ROTOR2_CT", "shortDesc": "Thrust coefficient of rotor 2", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.05, "group": "Geometry", "increment": 0.01, "longDesc": "The moment coefficient if defined as Torque = KM * Thrust.\n\nUse a positive value for a rotor with CCW rotation.\nUse a negative value for a rotor with CW rotation.\n\n", "max": 1.0, "min": -1.0, "name": "CA_ROTOR2_KM", "shortDesc": "Moment coefficient of rotor 2", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR2_PX", "shortDesc": "Position of rotor 2 along X body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR2_PY", "shortDesc": "Position of rotor 2 along Y body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR2_PZ", "shortDesc": "Position of rotor 2 along Z body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "default": 0, "group": "Geometry", "longDesc": "If not set to None, this motor is tilted by the configured tilt servo.\n", "name": "CA_ROTOR2_TILT", "shortDesc": "Rotor 2 tilt assignment", "type": "Int32", "values": [{"description": "None", "value": 0}, {"description": "Tilt 1", "value": 1}, {"description": "Tilt 2", "value": 2}, {"description": "Tilt 3", "value": 3}, {"description": "Tilt 4", "value": 4}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).\n", "max": 100.0, "min": -100.0, "name": "CA_ROTOR3_AX", "shortDesc": "Axis of rotor 3 thrust vector, X body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).\n", "max": 100.0, "min": -100.0, "name": "CA_ROTOR3_AY", "shortDesc": "Axis of rotor 3 thrust vector, Y body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": -1.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).\n", "max": 100.0, "min": -100.0, "name": "CA_ROTOR3_AZ", "shortDesc": "Axis of rotor 3 thrust vector, Z body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 6.5, "group": "Geometry", "increment": 1.0, "longDesc": "The thrust coefficient if defined as Thrust = CT * u^2,\nwhere u (with value between actuator minimum and maximum)\nis the output signal sent to the motor controller.\n\n", "max": 100.0, "min": 0.0, "name": "CA_ROTOR3_CT", "shortDesc": "Thrust coefficient of rotor 3", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.05, "group": "Geometry", "increment": 0.01, "longDesc": "The moment coefficient if defined as Torque = KM * Thrust.\n\nUse a positive value for a rotor with CCW rotation.\nUse a negative value for a rotor with CW rotation.\n\n", "max": 1.0, "min": -1.0, "name": "CA_ROTOR3_KM", "shortDesc": "Moment coefficient of rotor 3", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR3_PX", "shortDesc": "Position of rotor 3 along X body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR3_PY", "shortDesc": "Position of rotor 3 along Y body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR3_PZ", "shortDesc": "Position of rotor 3 along Z body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "default": 0, "group": "Geometry", "longDesc": "If not set to None, this motor is tilted by the configured tilt servo.\n", "name": "CA_ROTOR3_TILT", "shortDesc": "Rotor 3 tilt assignment", "type": "Int32", "values": [{"description": "None", "value": 0}, {"description": "Tilt 1", "value": 1}, {"description": "Tilt 2", "value": 2}, {"description": "Tilt 3", "value": 3}, {"description": "Tilt 4", "value": 4}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).\n", "max": 100.0, "min": -100.0, "name": "CA_ROTOR4_AX", "shortDesc": "Axis of rotor 4 thrust vector, X body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).\n", "max": 100.0, "min": -100.0, "name": "CA_ROTOR4_AY", "shortDesc": "Axis of rotor 4 thrust vector, Y body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": -1.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).\n", "max": 100.0, "min": -100.0, "name": "CA_ROTOR4_AZ", "shortDesc": "Axis of rotor 4 thrust vector, Z body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 6.5, "group": "Geometry", "increment": 1.0, "longDesc": "The thrust coefficient if defined as Thrust = CT * u^2,\nwhere u (with value between actuator minimum and maximum)\nis the output signal sent to the motor controller.\n\n", "max": 100.0, "min": 0.0, "name": "CA_ROTOR4_CT", "shortDesc": "Thrust coefficient of rotor 4", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.05, "group": "Geometry", "increment": 0.01, "longDesc": "The moment coefficient if defined as Torque = KM * Thrust.\n\nUse a positive value for a rotor with CCW rotation.\nUse a negative value for a rotor with CW rotation.\n\n", "max": 1.0, "min": -1.0, "name": "CA_ROTOR4_KM", "shortDesc": "Moment coefficient of rotor 4", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR4_PX", "shortDesc": "Position of rotor 4 along X body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR4_PY", "shortDesc": "Position of rotor 4 along Y body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR4_PZ", "shortDesc": "Position of rotor 4 along Z body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "default": 0, "group": "Geometry", "longDesc": "If not set to None, this motor is tilted by the configured tilt servo.\n", "name": "CA_ROTOR4_TILT", "shortDesc": "Rotor 4 tilt assignment", "type": "Int32", "values": [{"description": "None", "value": 0}, {"description": "Tilt 1", "value": 1}, {"description": "Tilt 2", "value": 2}, {"description": "Tilt 3", "value": 3}, {"description": "Tilt 4", "value": 4}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).\n", "max": 100.0, "min": -100.0, "name": "CA_ROTOR5_AX", "shortDesc": "Axis of rotor 5 thrust vector, X body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).\n", "max": 100.0, "min": -100.0, "name": "CA_ROTOR5_AY", "shortDesc": "Axis of rotor 5 thrust vector, Y body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": -1.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).\n", "max": 100.0, "min": -100.0, "name": "CA_ROTOR5_AZ", "shortDesc": "Axis of rotor 5 thrust vector, Z body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 6.5, "group": "Geometry", "increment": 1.0, "longDesc": "The thrust coefficient if defined as Thrust = CT * u^2,\nwhere u (with value between actuator minimum and maximum)\nis the output signal sent to the motor controller.\n\n", "max": 100.0, "min": 0.0, "name": "CA_ROTOR5_CT", "shortDesc": "Thrust coefficient of rotor 5", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.05, "group": "Geometry", "increment": 0.01, "longDesc": "The moment coefficient if defined as Torque = KM * Thrust.\n\nUse a positive value for a rotor with CCW rotation.\nUse a negative value for a rotor with CW rotation.\n\n", "max": 1.0, "min": -1.0, "name": "CA_ROTOR5_KM", "shortDesc": "Moment coefficient of rotor 5", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR5_PX", "shortDesc": "Position of rotor 5 along X body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR5_PY", "shortDesc": "Position of rotor 5 along Y body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR5_PZ", "shortDesc": "Position of rotor 5 along Z body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "default": 0, "group": "Geometry", "longDesc": "If not set to None, this motor is tilted by the configured tilt servo.\n", "name": "CA_ROTOR5_TILT", "shortDesc": "Rotor 5 tilt assignment", "type": "Int32", "values": [{"description": "None", "value": 0}, {"description": "Tilt 1", "value": 1}, {"description": "Tilt 2", "value": 2}, {"description": "Tilt 3", "value": 3}, {"description": "Tilt 4", "value": 4}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).\n", "max": 100.0, "min": -100.0, "name": "CA_ROTOR6_AX", "shortDesc": "Axis of rotor 6 thrust vector, X body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).\n", "max": 100.0, "min": -100.0, "name": "CA_ROTOR6_AY", "shortDesc": "Axis of rotor 6 thrust vector, Y body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": -1.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).\n", "max": 100.0, "min": -100.0, "name": "CA_ROTOR6_AZ", "shortDesc": "Axis of rotor 6 thrust vector, Z body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 6.5, "group": "Geometry", "increment": 1.0, "longDesc": "The thrust coefficient if defined as Thrust = CT * u^2,\nwhere u (with value between actuator minimum and maximum)\nis the output signal sent to the motor controller.\n\n", "max": 100.0, "min": 0.0, "name": "CA_ROTOR6_CT", "shortDesc": "Thrust coefficient of rotor 6", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.05, "group": "Geometry", "increment": 0.01, "longDesc": "The moment coefficient if defined as Torque = KM * Thrust.\n\nUse a positive value for a rotor with CCW rotation.\nUse a negative value for a rotor with CW rotation.\n\n", "max": 1.0, "min": -1.0, "name": "CA_ROTOR6_KM", "shortDesc": "Moment coefficient of rotor 6", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR6_PX", "shortDesc": "Position of rotor 6 along X body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR6_PY", "shortDesc": "Position of rotor 6 along Y body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR6_PZ", "shortDesc": "Position of rotor 6 along Z body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "default": 0, "group": "Geometry", "longDesc": "If not set to None, this motor is tilted by the configured tilt servo.\n", "name": "CA_ROTOR6_TILT", "shortDesc": "Rotor 6 tilt assignment", "type": "Int32", "values": [{"description": "None", "value": 0}, {"description": "Tilt 1", "value": 1}, {"description": "Tilt 2", "value": 2}, {"description": "Tilt 3", "value": 3}, {"description": "Tilt 4", "value": 4}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).\n", "max": 100.0, "min": -100.0, "name": "CA_ROTOR7_AX", "shortDesc": "Axis of rotor 7 thrust vector, X body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).\n", "max": 100.0, "min": -100.0, "name": "CA_ROTOR7_AY", "shortDesc": "Axis of rotor 7 thrust vector, Y body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": -1.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).\n", "max": 100.0, "min": -100.0, "name": "CA_ROTOR7_AZ", "shortDesc": "Axis of rotor 7 thrust vector, Z body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 6.5, "group": "Geometry", "increment": 1.0, "longDesc": "The thrust coefficient if defined as Thrust = CT * u^2,\nwhere u (with value between actuator minimum and maximum)\nis the output signal sent to the motor controller.\n\n", "max": 100.0, "min": 0.0, "name": "CA_ROTOR7_CT", "shortDesc": "Thrust coefficient of rotor 7", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.05, "group": "Geometry", "increment": 0.01, "longDesc": "The moment coefficient if defined as Torque = KM * Thrust.\n\nUse a positive value for a rotor with CCW rotation.\nUse a negative value for a rotor with CW rotation.\n\n", "max": 1.0, "min": -1.0, "name": "CA_ROTOR7_KM", "shortDesc": "Moment coefficient of rotor 7", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR7_PX", "shortDesc": "Position of rotor 7 along X body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR7_PY", "shortDesc": "Position of rotor 7 along Y body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR7_PZ", "shortDesc": "Position of rotor 7 along Z body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "default": 0, "group": "Geometry", "longDesc": "If not set to None, this motor is tilted by the configured tilt servo.\n", "name": "CA_ROTOR7_TILT", "shortDesc": "Rotor 7 tilt assignment", "type": "Int32", "values": [{"description": "None", "value": 0}, {"description": "Tilt 1", "value": 1}, {"description": "Tilt 2", "value": 2}, {"description": "Tilt 3", "value": 3}, {"description": "Tilt 4", "value": 4}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).\n", "max": 100.0, "min": -100.0, "name": "CA_ROTOR8_AX", "shortDesc": "Axis of rotor 8 thrust vector, X body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).\n", "max": 100.0, "min": -100.0, "name": "CA_ROTOR8_AY", "shortDesc": "Axis of rotor 8 thrust vector, Y body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": -1.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).\n", "max": 100.0, "min": -100.0, "name": "CA_ROTOR8_AZ", "shortDesc": "Axis of rotor 8 thrust vector, Z body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 6.5, "group": "Geometry", "increment": 1.0, "longDesc": "The thrust coefficient if defined as Thrust = CT * u^2,\nwhere u (with value between actuator minimum and maximum)\nis the output signal sent to the motor controller.\n\n", "max": 100.0, "min": 0.0, "name": "CA_ROTOR8_CT", "shortDesc": "Thrust coefficient of rotor 8", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.05, "group": "Geometry", "increment": 0.01, "longDesc": "The moment coefficient if defined as Torque = KM * Thrust.\n\nUse a positive value for a rotor with CCW rotation.\nUse a negative value for a rotor with CW rotation.\n\n", "max": 1.0, "min": -1.0, "name": "CA_ROTOR8_KM", "shortDesc": "Moment coefficient of rotor 8", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR8_PX", "shortDesc": "Position of rotor 8 along X body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR8_PY", "shortDesc": "Position of rotor 8 along Y body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR8_PZ", "shortDesc": "Position of rotor 8 along Z body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "default": 0, "group": "Geometry", "longDesc": "If not set to None, this motor is tilted by the configured tilt servo.\n", "name": "CA_ROTOR8_TILT", "shortDesc": "Rotor 8 tilt assignment", "type": "Int32", "values": [{"description": "None", "value": 0}, {"description": "Tilt 1", "value": 1}, {"description": "Tilt 2", "value": 2}, {"description": "Tilt 3", "value": 3}, {"description": "Tilt 4", "value": 4}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).\n", "max": 100.0, "min": -100.0, "name": "CA_ROTOR9_AX", "shortDesc": "Axis of rotor 9 thrust vector, X body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).\n", "max": 100.0, "min": -100.0, "name": "CA_ROTOR9_AY", "shortDesc": "Axis of rotor 9 thrust vector, Y body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": -1.0, "group": "Geometry", "increment": 0.1, "longDesc": "Only the direction is considered (the vector is normalized).\n", "max": 100.0, "min": -100.0, "name": "CA_ROTOR9_AZ", "shortDesc": "Axis of rotor 9 thrust vector, Z body axis component", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 6.5, "group": "Geometry", "increment": 1.0, "longDesc": "The thrust coefficient if defined as Thrust = CT * u^2,\nwhere u (with value between actuator minimum and maximum)\nis the output signal sent to the motor controller.\n\n", "max": 100.0, "min": 0.0, "name": "CA_ROTOR9_CT", "shortDesc": "Thrust coefficient of rotor 9", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.05, "group": "Geometry", "increment": 0.01, "longDesc": "The moment coefficient if defined as Torque = KM * Thrust.\n\nUse a positive value for a rotor with CCW rotation.\nUse a negative value for a rotor with CW rotation.\n\n", "max": 1.0, "min": -1.0, "name": "CA_ROTOR9_KM", "shortDesc": "Moment coefficient of rotor 9", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR9_PX", "shortDesc": "Position of rotor 9 along X body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR9_PY", "shortDesc": "Position of rotor 9 along Y body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.1, "max": 100.0, "min": -100.0, "name": "CA_ROTOR9_PZ", "shortDesc": "Position of rotor 9 along Z body axis relative to center of gravity", "type": "Float", "units": "m"}, {"category": "Standard", "default": 0, "group": "Geometry", "longDesc": "If not set to None, this motor is tilted by the configured tilt servo.\n", "name": "CA_ROTOR9_TILT", "shortDesc": "Rotor 9 tilt assignment", "type": "Int32", "values": [{"description": "None", "value": 0}, {"description": "Tilt 1", "value": 1}, {"description": "Tilt 2", "value": 2}, {"description": "Tilt 3", "value": 3}, {"description": "Tilt 4", "value": 4}]}, {"category": "Standard", "default": 0, "group": "Geometry", "name": "CA_ROTOR_COUNT", "shortDesc": "Total number of rotors", "type": "Int32", "values": [{"description": "0", "value": 0}, {"description": "1", "value": 1}, {"description": "2", "value": 2}, {"description": "3", "value": 3}, {"description": "4", "value": 4}, {"description": "5", "value": 5}, {"description": "6", "value": 6}, {"description": "7", "value": 7}, {"description": "8", "value": 8}, {"description": "9", "value": 9}, {"description": "10", "value": 10}, {"description": "11", "value": 11}, {"description": "12", "value": 12}]}, {"bitmask": [{"description": "Motor 1", "index": 0}, {"description": "Motor 2", "index": 1}, {"description": "Motor 3", "index": 2}, {"description": "Motor 4", "index": 3}, {"description": "Motor 5", "index": 4}, {"description": "Motor 6", "index": 5}, {"description": "Motor 7", "index": 6}, {"description": "Motor 8", "index": 7}, {"description": "Motor 9", "index": 8}, {"description": "Motor 10", "index": 9}, {"description": "Motor 11", "index": 10}, {"description": "Motor 12", "index": 11}], "category": "Standard", "default": 0, "group": "Geometry", "longDesc": "Configure motors to be bidirectional/reversible. Note that the output driver needs to support this as well.\n\n", "max": 4095, "min": 0, "name": "CA_R_REV", "shortDesc": "Bidirectional/Reversible motors", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 0, "default": 0.0, "group": "Geometry", "increment": 10.0, "longDesc": "The angle is measured clockwise (as seen from top), with 0 pointing forwards (X axis).\n\n", "max": 360.0, "min": 0.0, "name": "CA_SP0_ANG0", "shortDesc": "Angle for swash plate servo 0", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 0, "default": 140.0, "group": "Geometry", "increment": 10.0, "longDesc": "The angle is measured clockwise (as seen from top), with 0 pointing forwards (X axis).\n\n", "max": 360.0, "min": 0.0, "name": "CA_SP0_ANG1", "shortDesc": "Angle for swash plate servo 1", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 0, "default": 220.0, "group": "Geometry", "increment": 10.0, "longDesc": "The angle is measured clockwise (as seen from top), with 0 pointing forwards (X axis).\n\n", "max": 360.0, "min": 0.0, "name": "CA_SP0_ANG2", "shortDesc": "Angle for swash plate servo 2", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 0, "default": 0.0, "group": "Geometry", "increment": 10.0, "longDesc": "The angle is measured clockwise (as seen from top), with 0 pointing forwards (X axis).\n\n", "max": 360.0, "min": 0.0, "name": "CA_SP0_ANG3", "shortDesc": "Angle for swash plate servo 3", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 3, "default": 1.0, "group": "Geometry", "increment": 0.1, "longDesc": "This is relative to the other arm lengths.\n\n", "max": 10.0, "min": 0.0, "name": "CA_SP0_ARM_L0", "shortDesc": "Arm length for swash plate servo 0", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 1.0, "group": "Geometry", "increment": 0.1, "longDesc": "This is relative to the other arm lengths.\n\n", "max": 10.0, "min": 0.0, "name": "CA_SP0_ARM_L1", "shortDesc": "Arm length for swash plate servo 1", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 1.0, "group": "Geometry", "increment": 0.1, "longDesc": "This is relative to the other arm lengths.\n\n", "max": 10.0, "min": 0.0, "name": "CA_SP0_ARM_L2", "shortDesc": "Arm length for swash plate servo 2", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 1.0, "group": "Geometry", "increment": 0.1, "longDesc": "This is relative to the other arm lengths.\n\n", "max": 10.0, "min": 0.0, "name": "CA_SP0_ARM_L3", "shortDesc": "Arm length for swash plate servo 3", "type": "Float"}, {"category": "Standard", "default": 3, "group": "Geometry", "name": "CA_SP0_COUNT", "shortDesc": "Number of swash plates servos", "type": "Int32", "values": [{"description": "2", "value": 2}, {"description": "3", "value": 3}, {"description": "4", "value": 4}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.05, "longDesc": "Forces the servo output signal to take at least the configured time (in seconds)\nto traverse its full range [-100%, 100%].\n\nZero means that slew rate limiting is disabled.\n\n", "max": 10.0, "min": 0.0, "name": "CA_SV0_SLEW", "shortDesc": "Servo 0 slew rate limit", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.05, "longDesc": "Forces the servo output signal to take at least the configured time (in seconds)\nto traverse its full range [-100%, 100%].\n\nZero means that slew rate limiting is disabled.\n\n", "max": 10.0, "min": 0.0, "name": "CA_SV1_SLEW", "shortDesc": "Servo 1 slew rate limit", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.05, "longDesc": "Forces the servo output signal to take at least the configured time (in seconds)\nto traverse its full range [-100%, 100%].\n\nZero means that slew rate limiting is disabled.\n\n", "max": 10.0, "min": 0.0, "name": "CA_SV2_SLEW", "shortDesc": "Servo 2 slew rate limit", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.05, "longDesc": "Forces the servo output signal to take at least the configured time (in seconds)\nto traverse its full range [-100%, 100%].\n\nZero means that slew rate limiting is disabled.\n\n", "max": 10.0, "min": 0.0, "name": "CA_SV3_SLEW", "shortDesc": "Servo 3 slew rate limit", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.05, "longDesc": "Forces the servo output signal to take at least the configured time (in seconds)\nto traverse its full range [-100%, 100%].\n\nZero means that slew rate limiting is disabled.\n\n", "max": 10.0, "min": 0.0, "name": "CA_SV4_SLEW", "shortDesc": "Servo 4 slew rate limit", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.05, "longDesc": "Forces the servo output signal to take at least the configured time (in seconds)\nto traverse its full range [-100%, 100%].\n\nZero means that slew rate limiting is disabled.\n\n", "max": 10.0, "min": 0.0, "name": "CA_SV5_SLEW", "shortDesc": "Servo 5 slew rate limit", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.05, "longDesc": "Forces the servo output signal to take at least the configured time (in seconds)\nto traverse its full range [-100%, 100%].\n\nZero means that slew rate limiting is disabled.\n\n", "max": 10.0, "min": 0.0, "name": "CA_SV6_SLEW", "shortDesc": "Servo 6 slew rate limit", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "increment": 0.05, "longDesc": "Forces the servo output signal to take at least the configured time (in seconds)\nto traverse its full range [-100%, 100%].\n\nZero means that slew rate limiting is disabled.\n\n", "max": 10.0, "min": 0.0, "name": "CA_SV7_SLEW", "shortDesc": "Servo 7 slew rate limit", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "max": 1.0, "min": -1.0, "name": "CA_SV_CS0_FLAP", "shortDesc": "Control Surface 0 configuration as flap", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "max": 1.0, "min": -1.0, "name": "CA_SV_CS0_SPOIL", "shortDesc": "Control Surface 0 configuration as spoiler", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "longDesc": "Can be used to add an offset to the servo control.\n\nNOTE: Do not use for PWM servos. Use the PWM CENTER parameters instead (e.g., PWM_MAIN_CENT, PWM_AUX_CENT) instead.\nThis parameter can only be set if all PWM Center parameters are set to default.\n\n", "max": 1.0, "min": -1.0, "name": "CA_SV_CS0_TRIM", "shortDesc": "Control Surface 0 trim", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "name": "CA_SV_CS0_TRQ_P", "shortDesc": "Control Surface 0 pitch torque scaling", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "name": "CA_SV_CS0_TRQ_R", "shortDesc": "Control Surface 0 roll torque scaling", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "name": "CA_SV_CS0_TRQ_Y", "shortDesc": "Control Surface 0 yaw torque scaling", "type": "Float"}, {"category": "Standard", "default": 0, "group": "Geometry", "name": "CA_SV_CS0_TYPE", "shortDesc": "Control Surface 0 type", "type": "Int32", "values": [{"description": "(Not set)", "value": 0}, {"description": "Left Aileron", "value": 1}, {"description": "Right Aileron", "value": 2}, {"description": "Elevator", "value": 3}, {"description": "Rudder", "value": 4}, {"description": "Left Elevon", "value": 5}, {"description": "Right Elevon", "value": 6}, {"description": "Left V-Tail", "value": 7}, {"description": "Right V-Tail", "value": 8}, {"description": "Left Flap", "value": 9}, {"description": "Right Flap", "value": 10}, {"description": "Airbrake", "value": 11}, {"description": "Custom", "value": 12}, {"description": "Left A-tail", "value": 13}, {"description": "Right A-tail", "value": 14}, {"description": "Single Channel Aileron", "value": 15}, {"description": "Steering Wheel", "value": 16}, {"description": "Left Spoiler", "value": 17}, {"description": "Right Spoiler", "value": 18}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "max": 1.0, "min": -1.0, "name": "CA_SV_CS1_FLAP", "shortDesc": "Control Surface 1 configuration as flap", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "max": 1.0, "min": -1.0, "name": "CA_SV_CS1_SPOIL", "shortDesc": "Control Surface 1 configuration as spoiler", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "longDesc": "Can be used to add an offset to the servo control.\n\nNOTE: Do not use for PWM servos. Use the PWM CENTER parameters instead (e.g., PWM_MAIN_CENT, PWM_AUX_CENT) instead.\nThis parameter can only be set if all PWM Center parameters are set to default.\n\n", "max": 1.0, "min": -1.0, "name": "CA_SV_CS1_TRIM", "shortDesc": "Control Surface 1 trim", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "name": "CA_SV_CS1_TRQ_P", "shortDesc": "Control Surface 1 pitch torque scaling", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "name": "CA_SV_CS1_TRQ_R", "shortDesc": "Control Surface 1 roll torque scaling", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "name": "CA_SV_CS1_TRQ_Y", "shortDesc": "Control Surface 1 yaw torque scaling", "type": "Float"}, {"category": "Standard", "default": 0, "group": "Geometry", "name": "CA_SV_CS1_TYPE", "shortDesc": "Control Surface 1 type", "type": "Int32", "values": [{"description": "(Not set)", "value": 0}, {"description": "Left Aileron", "value": 1}, {"description": "Right Aileron", "value": 2}, {"description": "Elevator", "value": 3}, {"description": "Rudder", "value": 4}, {"description": "Left Elevon", "value": 5}, {"description": "Right Elevon", "value": 6}, {"description": "Left V-Tail", "value": 7}, {"description": "Right V-Tail", "value": 8}, {"description": "Left Flap", "value": 9}, {"description": "Right Flap", "value": 10}, {"description": "Airbrake", "value": 11}, {"description": "Custom", "value": 12}, {"description": "Left A-tail", "value": 13}, {"description": "Right A-tail", "value": 14}, {"description": "Single Channel Aileron", "value": 15}, {"description": "Steering Wheel", "value": 16}, {"description": "Left Spoiler", "value": 17}, {"description": "Right Spoiler", "value": 18}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "max": 1.0, "min": -1.0, "name": "CA_SV_CS2_FLAP", "shortDesc": "Control Surface 2 configuration as flap", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "max": 1.0, "min": -1.0, "name": "CA_SV_CS2_SPOIL", "shortDesc": "Control Surface 2 configuration as spoiler", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "longDesc": "Can be used to add an offset to the servo control.\n\nNOTE: Do not use for PWM servos. Use the PWM CENTER parameters instead (e.g., PWM_MAIN_CENT, PWM_AUX_CENT) instead.\nThis parameter can only be set if all PWM Center parameters are set to default.\n\n", "max": 1.0, "min": -1.0, "name": "CA_SV_CS2_TRIM", "shortDesc": "Control Surface 2 trim", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "name": "CA_SV_CS2_TRQ_P", "shortDesc": "Control Surface 2 pitch torque scaling", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "name": "CA_SV_CS2_TRQ_R", "shortDesc": "Control Surface 2 roll torque scaling", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "name": "CA_SV_CS2_TRQ_Y", "shortDesc": "Control Surface 2 yaw torque scaling", "type": "Float"}, {"category": "Standard", "default": 0, "group": "Geometry", "name": "CA_SV_CS2_TYPE", "shortDesc": "Control Surface 2 type", "type": "Int32", "values": [{"description": "(Not set)", "value": 0}, {"description": "Left Aileron", "value": 1}, {"description": "Right Aileron", "value": 2}, {"description": "Elevator", "value": 3}, {"description": "Rudder", "value": 4}, {"description": "Left Elevon", "value": 5}, {"description": "Right Elevon", "value": 6}, {"description": "Left V-Tail", "value": 7}, {"description": "Right V-Tail", "value": 8}, {"description": "Left Flap", "value": 9}, {"description": "Right Flap", "value": 10}, {"description": "Airbrake", "value": 11}, {"description": "Custom", "value": 12}, {"description": "Left A-tail", "value": 13}, {"description": "Right A-tail", "value": 14}, {"description": "Single Channel Aileron", "value": 15}, {"description": "Steering Wheel", "value": 16}, {"description": "Left Spoiler", "value": 17}, {"description": "Right Spoiler", "value": 18}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "max": 1.0, "min": -1.0, "name": "CA_SV_CS3_FLAP", "shortDesc": "Control Surface 3 configuration as flap", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "max": 1.0, "min": -1.0, "name": "CA_SV_CS3_SPOIL", "shortDesc": "Control Surface 3 configuration as spoiler", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "longDesc": "Can be used to add an offset to the servo control.\n\nNOTE: Do not use for PWM servos. Use the PWM CENTER parameters instead (e.g., PWM_MAIN_CENT, PWM_AUX_CENT) instead.\nThis parameter can only be set if all PWM Center parameters are set to default.\n\n", "max": 1.0, "min": -1.0, "name": "CA_SV_CS3_TRIM", "shortDesc": "Control Surface 3 trim", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "name": "CA_SV_CS3_TRQ_P", "shortDesc": "Control Surface 3 pitch torque scaling", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "name": "CA_SV_CS3_TRQ_R", "shortDesc": "Control Surface 3 roll torque scaling", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "name": "CA_SV_CS3_TRQ_Y", "shortDesc": "Control Surface 3 yaw torque scaling", "type": "Float"}, {"category": "Standard", "default": 0, "group": "Geometry", "name": "CA_SV_CS3_TYPE", "shortDesc": "Control Surface 3 type", "type": "Int32", "values": [{"description": "(Not set)", "value": 0}, {"description": "Left Aileron", "value": 1}, {"description": "Right Aileron", "value": 2}, {"description": "Elevator", "value": 3}, {"description": "Rudder", "value": 4}, {"description": "Left Elevon", "value": 5}, {"description": "Right Elevon", "value": 6}, {"description": "Left V-Tail", "value": 7}, {"description": "Right V-Tail", "value": 8}, {"description": "Left Flap", "value": 9}, {"description": "Right Flap", "value": 10}, {"description": "Airbrake", "value": 11}, {"description": "Custom", "value": 12}, {"description": "Left A-tail", "value": 13}, {"description": "Right A-tail", "value": 14}, {"description": "Single Channel Aileron", "value": 15}, {"description": "Steering Wheel", "value": 16}, {"description": "Left Spoiler", "value": 17}, {"description": "Right Spoiler", "value": 18}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "max": 1.0, "min": -1.0, "name": "CA_SV_CS4_FLAP", "shortDesc": "Control Surface 4 configuration as flap", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "max": 1.0, "min": -1.0, "name": "CA_SV_CS4_SPOIL", "shortDesc": "Control Surface 4 configuration as spoiler", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "longDesc": "Can be used to add an offset to the servo control.\n\nNOTE: Do not use for PWM servos. Use the PWM CENTER parameters instead (e.g., PWM_MAIN_CENT, PWM_AUX_CENT) instead.\nThis parameter can only be set if all PWM Center parameters are set to default.\n\n", "max": 1.0, "min": -1.0, "name": "CA_SV_CS4_TRIM", "shortDesc": "Control Surface 4 trim", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "name": "CA_SV_CS4_TRQ_P", "shortDesc": "Control Surface 4 pitch torque scaling", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "name": "CA_SV_CS4_TRQ_R", "shortDesc": "Control Surface 4 roll torque scaling", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "name": "CA_SV_CS4_TRQ_Y", "shortDesc": "Control Surface 4 yaw torque scaling", "type": "Float"}, {"category": "Standard", "default": 0, "group": "Geometry", "name": "CA_SV_CS4_TYPE", "shortDesc": "Control Surface 4 type", "type": "Int32", "values": [{"description": "(Not set)", "value": 0}, {"description": "Left Aileron", "value": 1}, {"description": "Right Aileron", "value": 2}, {"description": "Elevator", "value": 3}, {"description": "Rudder", "value": 4}, {"description": "Left Elevon", "value": 5}, {"description": "Right Elevon", "value": 6}, {"description": "Left V-Tail", "value": 7}, {"description": "Right V-Tail", "value": 8}, {"description": "Left Flap", "value": 9}, {"description": "Right Flap", "value": 10}, {"description": "Airbrake", "value": 11}, {"description": "Custom", "value": 12}, {"description": "Left A-tail", "value": 13}, {"description": "Right A-tail", "value": 14}, {"description": "Single Channel Aileron", "value": 15}, {"description": "Steering Wheel", "value": 16}, {"description": "Left Spoiler", "value": 17}, {"description": "Right Spoiler", "value": 18}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "max": 1.0, "min": -1.0, "name": "CA_SV_CS5_FLAP", "shortDesc": "Control Surface 5 configuration as flap", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "max": 1.0, "min": -1.0, "name": "CA_SV_CS5_SPOIL", "shortDesc": "Control Surface 5 configuration as spoiler", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "longDesc": "Can be used to add an offset to the servo control.\n\nNOTE: Do not use for PWM servos. Use the PWM CENTER parameters instead (e.g., PWM_MAIN_CENT, PWM_AUX_CENT) instead.\nThis parameter can only be set if all PWM Center parameters are set to default.\n\n", "max": 1.0, "min": -1.0, "name": "CA_SV_CS5_TRIM", "shortDesc": "Control Surface 5 trim", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "name": "CA_SV_CS5_TRQ_P", "shortDesc": "Control Surface 5 pitch torque scaling", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "name": "CA_SV_CS5_TRQ_R", "shortDesc": "Control Surface 5 roll torque scaling", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "name": "CA_SV_CS5_TRQ_Y", "shortDesc": "Control Surface 5 yaw torque scaling", "type": "Float"}, {"category": "Standard", "default": 0, "group": "Geometry", "name": "CA_SV_CS5_TYPE", "shortDesc": "Control Surface 5 type", "type": "Int32", "values": [{"description": "(Not set)", "value": 0}, {"description": "Left Aileron", "value": 1}, {"description": "Right Aileron", "value": 2}, {"description": "Elevator", "value": 3}, {"description": "Rudder", "value": 4}, {"description": "Left Elevon", "value": 5}, {"description": "Right Elevon", "value": 6}, {"description": "Left V-Tail", "value": 7}, {"description": "Right V-Tail", "value": 8}, {"description": "Left Flap", "value": 9}, {"description": "Right Flap", "value": 10}, {"description": "Airbrake", "value": 11}, {"description": "Custom", "value": 12}, {"description": "Left A-tail", "value": 13}, {"description": "Right A-tail", "value": 14}, {"description": "Single Channel Aileron", "value": 15}, {"description": "Steering Wheel", "value": 16}, {"description": "Left Spoiler", "value": 17}, {"description": "Right Spoiler", "value": 18}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "max": 1.0, "min": -1.0, "name": "CA_SV_CS6_FLAP", "shortDesc": "Control Surface 6 configuration as flap", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "max": 1.0, "min": -1.0, "name": "CA_SV_CS6_SPOIL", "shortDesc": "Control Surface 6 configuration as spoiler", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "longDesc": "Can be used to add an offset to the servo control.\n\nNOTE: Do not use for PWM servos. Use the PWM CENTER parameters instead (e.g., PWM_MAIN_CENT, PWM_AUX_CENT) instead.\nThis parameter can only be set if all PWM Center parameters are set to default.\n\n", "max": 1.0, "min": -1.0, "name": "CA_SV_CS6_TRIM", "shortDesc": "Control Surface 6 trim", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "name": "CA_SV_CS6_TRQ_P", "shortDesc": "Control Surface 6 pitch torque scaling", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "name": "CA_SV_CS6_TRQ_R", "shortDesc": "Control Surface 6 roll torque scaling", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "name": "CA_SV_CS6_TRQ_Y", "shortDesc": "Control Surface 6 yaw torque scaling", "type": "Float"}, {"category": "Standard", "default": 0, "group": "Geometry", "name": "CA_SV_CS6_TYPE", "shortDesc": "Control Surface 6 type", "type": "Int32", "values": [{"description": "(Not set)", "value": 0}, {"description": "Left Aileron", "value": 1}, {"description": "Right Aileron", "value": 2}, {"description": "Elevator", "value": 3}, {"description": "Rudder", "value": 4}, {"description": "Left Elevon", "value": 5}, {"description": "Right Elevon", "value": 6}, {"description": "Left V-Tail", "value": 7}, {"description": "Right V-Tail", "value": 8}, {"description": "Left Flap", "value": 9}, {"description": "Right Flap", "value": 10}, {"description": "Airbrake", "value": 11}, {"description": "Custom", "value": 12}, {"description": "Left A-tail", "value": 13}, {"description": "Right A-tail", "value": 14}, {"description": "Single Channel Aileron", "value": 15}, {"description": "Steering Wheel", "value": 16}, {"description": "Left Spoiler", "value": 17}, {"description": "Right Spoiler", "value": 18}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "max": 1.0, "min": -1.0, "name": "CA_SV_CS7_FLAP", "shortDesc": "Control Surface 7 configuration as flap", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "max": 1.0, "min": -1.0, "name": "CA_SV_CS7_SPOIL", "shortDesc": "Control Surface 7 configuration as spoiler", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "longDesc": "Can be used to add an offset to the servo control.\n\nNOTE: Do not use for PWM servos. Use the PWM CENTER parameters instead (e.g., PWM_MAIN_CENT, PWM_AUX_CENT) instead.\nThis parameter can only be set if all PWM Center parameters are set to default.\n\n", "max": 1.0, "min": -1.0, "name": "CA_SV_CS7_TRIM", "shortDesc": "Control Surface 7 trim", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "name": "CA_SV_CS7_TRQ_P", "shortDesc": "Control Surface 7 pitch torque scaling", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "name": "CA_SV_CS7_TRQ_R", "shortDesc": "Control Surface 7 roll torque scaling", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Geometry", "name": "CA_SV_CS7_TRQ_Y", "shortDesc": "Control Surface 7 yaw torque scaling", "type": "Float"}, {"category": "Standard", "default": 0, "group": "Geometry", "name": "CA_SV_CS7_TYPE", "shortDesc": "Control Surface 7 type", "type": "Int32", "values": [{"description": "(Not set)", "value": 0}, {"description": "Left Aileron", "value": 1}, {"description": "Right Aileron", "value": 2}, {"description": "Elevator", "value": 3}, {"description": "Rudder", "value": 4}, {"description": "Left Elevon", "value": 5}, {"description": "Right Elevon", "value": 6}, {"description": "Left V-Tail", "value": 7}, {"description": "Right V-Tail", "value": 8}, {"description": "Left Flap", "value": 9}, {"description": "Right Flap", "value": 10}, {"description": "Airbrake", "value": 11}, {"description": "Custom", "value": 12}, {"description": "Left A-tail", "value": 13}, {"description": "Right A-tail", "value": 14}, {"description": "Single Channel Aileron", "value": 15}, {"description": "Steering Wheel", "value": 16}, {"description": "Left Spoiler", "value": 17}, {"description": "Right Spoiler", "value": 18}]}, {"category": "Standard", "default": 0, "group": "Geometry", "name": "CA_SV_CS_COUNT", "shortDesc": "Total number of Control Surfaces", "type": "Int32", "values": [{"description": "0", "value": 0}, {"description": "1", "value": 1}, {"description": "2", "value": 2}, {"description": "3", "value": 3}, {"description": "4", "value": 4}, {"description": "5", "value": 5}, {"description": "6", "value": 6}, {"description": "7", "value": 7}, {"description": "8", "value": 8}]}, {"category": "Standard", "decimalPlaces": 1, "default": 0.5, "group": "Geometry", "max": 5.0, "min": 0.0, "name": "CA_SV_FLAP_SLEW", "shortDesc": "Control Surface slew rate for normalized flaps setpoint", "type": "Float"}, {"category": "Standard", "default": 1, "group": "Geometry", "longDesc": "Define if this servo is used for additional control.\n", "name": "CA_SV_TL0_CT", "shortDesc": "Tilt 0 is used for control", "type": "Int32", "values": [{"description": "None", "value": 0}, {"description": "Yaw", "value": 1}, {"description": "Pitch", "value": 2}, {"description": "Yaw and Pitch", "value": 3}]}, {"category": "Standard", "decimalPlaces": 0, "default": 90.0, "group": "Geometry", "longDesc": "Defines the tilt angle when the servo is at the maximum.\nAn angle of zero means upwards.\n\n", "max": 90.0, "min": -90.0, "name": "CA_SV_TL0_MAXA", "shortDesc": "Tilt Servo 0 Tilt Angle at Maximum", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 0, "default": 0.0, "group": "Geometry", "longDesc": "Defines the tilt angle when the servo is at the minimum.\nAn angle of zero means upwards.\n\n", "max": 90.0, "min": -90.0, "name": "CA_SV_TL0_MINA", "shortDesc": "Tilt Servo 0 Tilt Angle at Minimum", "type": "Float", "units": "deg"}, {"category": "Standard", "default": 0, "group": "Geometry", "longDesc": "Defines the direction the servo tilts towards when moving towards the maximum tilt angle.\nFor example if the minimum tilt angle is -90, the maximum 90, and the direction 'Towards Front',\nthe motor axis aligns with the XZ-plane, points towards -X at the minimum and +X at the maximum tilt.\n\n", "max": 359, "min": 0, "name": "CA_SV_TL0_TD", "shortDesc": "Tilt Servo 0 Tilt Direction", "type": "Int32", "values": [{"description": "Towards Front", "value": 0}, {"description": "Towards Right", "value": 90}]}, {"category": "Standard", "default": 1, "group": "Geometry", "longDesc": "Define if this servo is used for additional control.\n", "name": "CA_SV_TL1_CT", "shortDesc": "Tilt 1 is used for control", "type": "Int32", "values": [{"description": "None", "value": 0}, {"description": "Yaw", "value": 1}, {"description": "Pitch", "value": 2}, {"description": "Yaw and Pitch", "value": 3}]}, {"category": "Standard", "decimalPlaces": 0, "default": 90.0, "group": "Geometry", "longDesc": "Defines the tilt angle when the servo is at the maximum.\nAn angle of zero means upwards.\n\n", "max": 90.0, "min": -90.0, "name": "CA_SV_TL1_MAXA", "shortDesc": "Tilt Servo 1 Tilt Angle at Maximum", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 0, "default": 0.0, "group": "Geometry", "longDesc": "Defines the tilt angle when the servo is at the minimum.\nAn angle of zero means upwards.\n\n", "max": 90.0, "min": -90.0, "name": "CA_SV_TL1_MINA", "shortDesc": "Tilt Servo 1 Tilt Angle at Minimum", "type": "Float", "units": "deg"}, {"category": "Standard", "default": 0, "group": "Geometry", "longDesc": "Defines the direction the servo tilts towards when moving towards the maximum tilt angle.\nFor example if the minimum tilt angle is -90, the maximum 90, and the direction 'Towards Front',\nthe motor axis aligns with the XZ-plane, points towards -X at the minimum and +X at the maximum tilt.\n\n", "max": 359, "min": 0, "name": "CA_SV_TL1_TD", "shortDesc": "Tilt Servo 1 Tilt Direction", "type": "Int32", "values": [{"description": "Towards Front", "value": 0}, {"description": "Towards Right", "value": 90}]}, {"category": "Standard", "default": 1, "group": "Geometry", "longDesc": "Define if this servo is used for additional control.\n", "name": "CA_SV_TL2_CT", "shortDesc": "Tilt 2 is used for control", "type": "Int32", "values": [{"description": "None", "value": 0}, {"description": "Yaw", "value": 1}, {"description": "Pitch", "value": 2}, {"description": "Yaw and Pitch", "value": 3}]}, {"category": "Standard", "decimalPlaces": 0, "default": 90.0, "group": "Geometry", "longDesc": "Defines the tilt angle when the servo is at the maximum.\nAn angle of zero means upwards.\n\n", "max": 90.0, "min": -90.0, "name": "CA_SV_TL2_MAXA", "shortDesc": "Tilt Servo 2 Tilt Angle at Maximum", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 0, "default": 0.0, "group": "Geometry", "longDesc": "Defines the tilt angle when the servo is at the minimum.\nAn angle of zero means upwards.\n\n", "max": 90.0, "min": -90.0, "name": "CA_SV_TL2_MINA", "shortDesc": "Tilt Servo 2 Tilt Angle at Minimum", "type": "Float", "units": "deg"}, {"category": "Standard", "default": 0, "group": "Geometry", "longDesc": "Defines the direction the servo tilts towards when moving towards the maximum tilt angle.\nFor example if the minimum tilt angle is -90, the maximum 90, and the direction 'Towards Front',\nthe motor axis aligns with the XZ-plane, points towards -X at the minimum and +X at the maximum tilt.\n\n", "max": 359, "min": 0, "name": "CA_SV_TL2_TD", "shortDesc": "Tilt Servo 2 Tilt Direction", "type": "Int32", "values": [{"description": "Towards Front", "value": 0}, {"description": "Towards Right", "value": 90}]}, {"category": "Standard", "default": 1, "group": "Geometry", "longDesc": "Define if this servo is used for additional control.\n", "name": "CA_SV_TL3_CT", "shortDesc": "Tilt 3 is used for control", "type": "Int32", "values": [{"description": "None", "value": 0}, {"description": "Yaw", "value": 1}, {"description": "Pitch", "value": 2}, {"description": "Yaw and Pitch", "value": 3}]}, {"category": "Standard", "decimalPlaces": 0, "default": 90.0, "group": "Geometry", "longDesc": "Defines the tilt angle when the servo is at the maximum.\nAn angle of zero means upwards.\n\n", "max": 90.0, "min": -90.0, "name": "CA_SV_TL3_MAXA", "shortDesc": "Tilt Servo 3 Tilt Angle at Maximum", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 0, "default": 0.0, "group": "Geometry", "longDesc": "Defines the tilt angle when the servo is at the minimum.\nAn angle of zero means upwards.\n\n", "max": 90.0, "min": -90.0, "name": "CA_SV_TL3_MINA", "shortDesc": "Tilt Servo 3 Tilt Angle at Minimum", "type": "Float", "units": "deg"}, {"category": "Standard", "default": 0, "group": "Geometry", "longDesc": "Defines the direction the servo tilts towards when moving towards the maximum tilt angle.\nFor example if the minimum tilt angle is -90, the maximum 90, and the direction 'Towards Front',\nthe motor axis aligns with the XZ-plane, points towards -X at the minimum and +X at the maximum tilt.\n\n", "max": 359, "min": 0, "name": "CA_SV_TL3_TD", "shortDesc": "Tilt Servo 3 Tilt Direction", "type": "Int32", "values": [{"description": "Towards Front", "value": 0}, {"description": "Towards Right", "value": 90}]}, {"category": "Standard", "default": 0, "group": "Geometry", "name": "CA_SV_TL_COUNT", "shortDesc": "Total number of Tilt Servos", "type": "Int32", "values": [{"description": "0", "value": 0}, {"description": "1", "value": 1}, {"description": "2", "value": 2}, {"description": "3", "value": 3}, {"description": "4", "value": 4}]}, {"category": "Standard", "decimalPlaces": 1, "default": 3.0, "group": "Hover Thrust Estimator", "longDesc": "Sets the number of standard deviations used\nby the innovation consistency test.\n", "max": 10.0, "min": 1.0, "name": "HTE_ACC_GATE", "shortDesc": "Gate size for acceleration fusion", "type": "Float", "units": "SD"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.1, "group": "Hover Thrust Estimator", "longDesc": "Sets the number of standard deviations used\nby the innovation consistency test.\n", "max": 1.0, "min": 0.0, "name": "HTE_HT_ERR_INIT", "shortDesc": "1-sigma initial hover thrust uncertainty", "type": "Float", "units": "normalized_thrust"}, {"category": "Standard", "decimalPlaces": 4, "default": 0.0036, "group": "Hover Thrust Estimator", "longDesc": "Reduce to make the hover thrust estimate\nmore stable, increase if the real hover thrust\nis expected to change quickly over time.\n", "max": 1.0, "min": 0.0001, "name": "HTE_HT_NOISE", "shortDesc": "Hover thrust process noise", "type": "Float", "units": "normalized_thrust/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.2, "group": "Hover Thrust Estimator", "longDesc": "Defines the range of the hover thrust estimate around MPC_THR_HOVER.\nA value of 0.2 with MPC_THR_HOVER at 0.5 results in a range of [0.3, 0.7].\n\nSet to a large value if the vehicle operates in varying physical conditions that\naffect the required hover thrust strongly (e.g. differently sized payloads).\n", "max": 0.4, "min": 0.01, "name": "HTE_THR_RANGE", "shortDesc": "Max deviation from MPC_THR_HOVER", "type": "Float", "units": "normalized_thrust"}, {"category": "Standard", "decimalPlaces": 1, "default": 10.0, "group": "Hover Thrust Estimator", "longDesc": "Above this speed, the measurement noise is linearly increased\nto reduce the sensitivity of the estimator from biased measurement.\n\nSet to a low value on vehicles with large lifting surfaces.\n", "max": 20.0, "min": 1.0, "name": "HTE_VXY_THR", "shortDesc": "Horizontal velocity threshold for sensitivity reduction", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 2.0, "group": "Hover Thrust Estimator", "longDesc": "Above this speed, the measurement noise is linearly increased\nto reduce the sensitivity of the estimator from biased measurement.\n\nSet to a low value on vehicles affected by air drag when climbing or descending.\n", "max": 10.0, "min": 1.0, "name": "HTE_VZ_THR", "shortDesc": "Vertical velocity threshold for sensitivity reduction", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 6.0, "group": "Land Detector", "longDesc": "Maximum airspeed allowed in the landed state\n", "max": 30.0, "min": 2.0, "name": "LNDFW_AIRSPD_MAX", "shortDesc": "Fixed-wing land detector: Max airspeed", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.5, "group": "Land Detector", "longDesc": "Maximum allowed norm of the angular velocity in the landed state.\nOnly used if neither airspeed nor groundspeed can be used for landing detection.\n", "name": "LNDFW_ROT_MAX", "shortDesc": "Fixed-wing land detector: max rotational speed", "type": "Float", "units": "deg/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 2.0, "group": "Land Detector", "longDesc": "Time the land conditions (speeds and acceleration) have to be satisfied to detect a landing.\n", "min": 0.1, "name": "LNDFW_TRIG_TIME", "rebootRequired": true, "shortDesc": "Fixed-wing land detection trigger time", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 1, "default": 5.0, "group": "Land Detector", "longDesc": "Maximum horizontal velocity allowed in the landed state.\nA factor of 0.7 is applied in case of airspeed-less flying\n(either because no sensor is present or sensor data got invalid in flight).\n", "max": 20.0, "min": 0.5, "name": "LNDFW_VEL_XY_MAX", "shortDesc": "Fixed-wing land detector: Max horizontal velocity threshold", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 1.0, "group": "Land Detector", "longDesc": "Maximum vertical velocity allowed in the landed state.\n", "max": 20.0, "min": 0.1, "name": "LNDFW_VEL_Z_MAX", "shortDesc": "Fixed-wing land detector: Max vertiacal velocity threshold", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 8.0, "group": "Land Detector", "longDesc": "Maximum horizontal (x,y body axes) acceleration allowed in the landed state\n", "max": 30.0, "min": 2.0, "name": "LNDFW_XYACC_MAX", "shortDesc": "Fixed-wing land detector: Max horizontal acceleration", "type": "Float", "units": "m/s^2"}, {"category": "Standard", "decimalPlaces": 2, "default": 2.0, "group": "Land Detector", "longDesc": "The height above ground below which ground effect creates barometric altitude errors.\nA negative value indicates no ground effect.\n", "min": -1.0, "name": "LNDMC_ALT_GND", "shortDesc": "Ground effect altitude for multicopters", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 1, "default": 20.0, "group": "Land Detector", "longDesc": "Maximum allowed norm of the angular velocity (roll, pitch) in the landed state.\n", "name": "LNDMC_ROT_MAX", "shortDesc": "Multicopter max rotational speed", "type": "Float", "units": "deg/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 1.5, "group": "Land Detector", "longDesc": "Maximum horizontal velocity allowed in the landed state\n", "name": "LNDMC_XY_VEL_MAX", "shortDesc": "Multicopter max horizontal velocity", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.25, "group": "Land Detector", "longDesc": "Vertical velocity threshold to detect landing.\nHas to be set lower than the expected minimal speed for landing,\nwhich is either MPC_LAND_SPEED or MPC_LAND_CRWL.\nThis is enforced by an automatic check.\n", "min": 0.0, "name": "LNDMC_Z_VEL_MAX", "shortDesc": "Multicopter vertical velocity threshold", "type": "Float", "units": "m/s"}, {"category": "System", "default": 0, "group": "Land Detector", "longDesc": "Total flight time of this autopilot. Higher 32 bits of the value.\nFlight time in microseconds = (LND_FLIGHT_T_HI << 32) | LND_FLIGHT_T_LO.\n", "min": 0, "name": "LND_FLIGHT_T_HI", "shortDesc": "Total flight time in microseconds", "type": "Int32", "volatile": true}, {"category": "System", "default": 0, "group": "Land Detector", "longDesc": "Total flight time of this autopilot. Lower 32 bits of the value.\nFlight time in microseconds = (LND_FLIGHT_T_HI << 32) | LND_FLIGHT_T_LO.\n", "min": 0, "name": "LND_FLIGHT_T_LO", "shortDesc": "Total flight time in microseconds", "type": "Int32", "volatile": true}, {"category": "Standard", "decimalPlaces": 2, "default": 10.0, "group": "Landing Target Estimator", "longDesc": "Variance of acceleration measurement used for landing target position prediction.\nHigher values results in tighter following of the measurements and more lenient outlier rejection\n", "min": 0.01, "name": "LTEST_ACC_UNC", "shortDesc": "Acceleration uncertainty", "type": "Float", "units": "(m/s^2)^2"}, {"category": "Standard", "decimalPlaces": 4, "default": 0.005, "group": "Landing Target Estimator", "longDesc": "Variance of the landing target measurement from the driver.\nHigher values result in less aggressive following of the measurement and a smoother output as well as fewer rejected measurements.\n", "name": "LTEST_MEAS_UNC", "shortDesc": "Landing target measurement uncertainty", "type": "Float", "units": "tan(rad)^2"}, {"category": "Standard", "default": 0, "group": "Landing Target Estimator", "longDesc": "Configure the mode of the landing target. Depending on the mode, the landing target observations are used differently to aid position estimation.\n\nMode Moving: The landing target may be moving around while in the field of view of the vehicle. Landing target measurements are not used to aid positioning.\nMode Stationary: The landing target is stationary. Measured velocity w.r.t. the landing target is used to aid velocity estimation.\n", "max": 1, "min": 0, "name": "LTEST_MODE", "shortDesc": "Landing target mode", "type": "Int32", "values": [{"description": "Moving", "value": 0}, {"description": "Stationary", "value": 1}]}, {"category": "Standard", "decimalPlaces": 3, "default": 0.1, "group": "Landing Target Estimator", "longDesc": "Initial variance of the relative landing target position in x and y direction\n", "min": 0.001, "name": "LTEST_POS_UNC_IN", "shortDesc": "Initial landing target position uncertainty", "type": "Float", "units": "m^2"}, {"category": "Standard", "decimalPlaces": 3, "default": 1.0, "group": "Landing Target Estimator", "longDesc": "Landing target x measurements are scaled by this factor before being used\n", "min": 0.01, "name": "LTEST_SCALE_X", "shortDesc": "Scale factor for sensor measurements in sensor x axis", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 1.0, "group": "Landing Target Estimator", "longDesc": "Landing target y measurements are scaled by this factor before being used\n", "min": 0.01, "name": "LTEST_SCALE_Y", "shortDesc": "Scale factor for sensor measurements in sensor y axis", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Landing Target Estimator", "name": "LTEST_SENS_POS_X", "rebootRequired": true, "shortDesc": "X Position of IRLOCK in body frame (forward)", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Landing Target Estimator", "name": "LTEST_SENS_POS_Y", "rebootRequired": true, "shortDesc": "Y Position of IRLOCK in body frame (right)", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Landing Target Estimator", "name": "LTEST_SENS_POS_Z", "rebootRequired": true, "shortDesc": "Z Position of IRLOCK in body frame (downward)", "type": "Float", "units": "m"}, {"category": "Standard", "default": 2, "group": "Landing Target Estimator", "longDesc": "Default orientation of Yaw 90\u00b0\n", "max": 40, "min": -1, "name": "LTEST_SENS_ROT", "rebootRequired": true, "shortDesc": "Rotation of IRLOCK sensor relative to airframe", "type": "Int32", "values": [{"description": "No rotation", "value": 0}, {"description": "Yaw 45\u00b0", "value": 1}, {"description": "Yaw 90\u00b0", "value": 2}, {"description": "Yaw 135\u00b0", "value": 3}, {"description": "Yaw 180\u00b0", "value": 4}, {"description": "Yaw 225\u00b0", "value": 5}, {"description": "Yaw 270\u00b0", "value": 6}, {"description": "Yaw 315\u00b0", "value": 7}]}, {"category": "Standard", "decimalPlaces": 3, "default": 0.1, "group": "Landing Target Estimator", "longDesc": "Initial variance of the relative landing target velocity in x and y directions\n", "min": 0.001, "name": "LTEST_VEL_UNC_IN", "shortDesc": "Initial landing target velocity uncertainty", "type": "Float", "units": "(m/s)^2"}, {"category": "Standard", "decimalPlaces": 4, "default": 0.012, "group": "Local Position Estimator", "longDesc": "Data sheet noise density = 150ug/sqrt(Hz) = 0.0015 m/s^2/sqrt(Hz)\n\nLarger than data sheet to account for tilt error.\n", "max": 2.0, "min": 1e-05, "name": "LPE_ACC_XY", "shortDesc": "Accelerometer xy noise density", "type": "Float", "units": "m/s^2/sqrt(Hz)"}, {"category": "Standard", "decimalPlaces": 4, "default": 0.02, "group": "Local Position Estimator", "longDesc": "Data sheet noise density = 150ug/sqrt(Hz) = 0.0015 m/s^2/sqrt(Hz)\n", "max": 2.0, "min": 1e-05, "name": "LPE_ACC_Z", "shortDesc": "Accelerometer z noise density", "type": "Float", "units": "m/s^2/sqrt(Hz)"}, {"category": "Standard", "decimalPlaces": 2, "default": 3.0, "group": "Local Position Estimator", "max": 100.0, "min": 0.01, "name": "LPE_BAR_Z", "shortDesc": "Barometric pressure altitude z standard deviation", "type": "Float", "units": "m"}, {"category": "Standard", "default": 0, "group": "Local Position Estimator", "name": "LPE_EN", "shortDesc": "Local position estimator enable (unsupported)", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 3, "default": 3.0, "group": "Local Position Estimator", "max": 5.0, "min": 1.0, "name": "LPE_EPH_MAX", "shortDesc": "Max EPH allowed for GPS initialization", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 3, "default": 5.0, "group": "Local Position Estimator", "max": 5.0, "min": 1.0, "name": "LPE_EPV_MAX", "shortDesc": "Max EPV allowed for GPS initialization", "type": "Float", "units": "m"}, {"category": "Standard", "default": 0, "group": "Local Position Estimator", "longDesc": "Enable publishing of a fake global position (e.g for AUTO missions using Optical Flow)\n\nBy initializing the estimator to the LPE_LAT/LON parameters when global information is unavailable\n", "max": 1, "min": 0, "name": "LPE_FAKE_ORIGIN", "shortDesc": "Enable fake global position for optical flow", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.001, "group": "Local Position Estimator", "max": 2.0, "min": 0.0, "name": "LPE_FGYRO_HP", "shortDesc": "Flow gyro high pass filter cut off frequency", "type": "Float", "units": "Hz"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Local Position Estimator", "max": 1.0, "min": -1.0, "name": "LPE_FLW_OFF_Z", "shortDesc": "Optical flow z offset from center", "type": "Float", "units": "m"}, {"category": "Standard", "default": 150, "group": "Local Position Estimator", "max": 255, "min": 0, "name": "LPE_FLW_QMIN", "shortDesc": "Optical flow minimum quality threshold", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 3, "default": 7.0, "group": "Local Position Estimator", "max": 10.0, "min": 0.1, "name": "LPE_FLW_R", "shortDesc": "Optical flow rotation (roll/pitch) noise gain", "type": "Float", "units": "m/s/rad"}, {"category": "Standard", "decimalPlaces": 3, "default": 7.0, "group": "Local Position Estimator", "max": 10.0, "min": 0.0, "name": "LPE_FLW_RR", "shortDesc": "Optical flow angular velocity noise gain", "type": "Float", "units": "m/rad"}, {"category": "Standard", "decimalPlaces": 3, "default": 1.3, "group": "Local Position Estimator", "max": 10.0, "min": 0.1, "name": "LPE_FLW_SCALE", "shortDesc": "Optical flow scale", "type": "Float", "units": "m"}, {"bitmask": [{"description": "fuse GPS, requires GPS for alt. init", "index": 0}, {"description": "fuse optical flow", "index": 1}, {"description": "fuse vision position", "index": 2}, {"description": "fuse landing target", "index": 3}, {"description": "fuse land detector", "index": 4}, {"description": "pub agl as lpos down", "index": 5}, {"description": "flow gyro compensation", "index": 6}, {"description": "fuse baro", "index": 7}], "category": "Standard", "default": 145, "group": "Local Position Estimator", "longDesc": "Set bits in the following positions to enable:\n0 : Set to true to fuse GPS data if available, also requires GPS for altitude init\n1 : Set to true to fuse optical flow data if available\n2 : Set to true to fuse vision position\n3 : Set to true to enable landing target\n4 : Set to true to fuse land detector\n5 : Set to true to publish AGL as local position down component\n6 : Set to true to enable flow gyro compensation\n7 : Set to true to enable baro fusion\n\ndefault (145 - GPS, baro, land detector)\n", "max": 255, "min": 0, "name": "LPE_FUSION", "shortDesc": "Integer bitmask controlling data fusion", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.29, "group": "Local Position Estimator", "max": 0.4, "min": 0.0, "name": "LPE_GPS_DELAY", "shortDesc": "GPS delay compensation", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.25, "group": "Local Position Estimator", "longDesc": "EPV used if greater than this value.\n", "max": 2.0, "min": 0.01, "name": "LPE_GPS_VXY", "shortDesc": "GPS xy velocity standard deviation", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.25, "group": "Local Position Estimator", "max": 2.0, "min": 0.01, "name": "LPE_GPS_VZ", "shortDesc": "GPS z velocity standard deviation", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "Local Position Estimator", "max": 5.0, "min": 0.01, "name": "LPE_GPS_XY", "shortDesc": "Minimum GPS xy standard deviation, uses reported EPH if greater", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 3.0, "group": "Local Position Estimator", "max": 200.0, "min": 0.01, "name": "LPE_GPS_Z", "shortDesc": "Minimum GPS z standard deviation, uses reported EPV if greater", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.05, "group": "Local Position Estimator", "max": 10.0, "min": 0.01, "name": "LPE_LAND_VXY", "shortDesc": "Land detector xy velocity standard deviation", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.03, "group": "Local Position Estimator", "max": 10.0, "min": 0.001, "name": "LPE_LAND_Z", "shortDesc": "Land detector z standard deviation", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 8, "default": 47.397742, "group": "Local Position Estimator", "max": 90.0, "min": -90.0, "name": "LPE_LAT", "shortDesc": "Local origin latitude for nav w/o GPS", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Local Position Estimator", "max": 1.0, "min": -1.0, "name": "LPE_LDR_OFF_Z", "shortDesc": "Lidar z offset from center of vehicle +down", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.03, "group": "Local Position Estimator", "max": 1.0, "min": 0.01, "name": "LPE_LDR_Z", "shortDesc": "Lidar z standard deviation", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 8, "default": 8.545594, "group": "Local Position Estimator", "max": 180.0, "min": -180.0, "name": "LPE_LON", "shortDesc": "Local origin longitude for nav w/o GPS", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0001, "group": "Local Position Estimator", "longDesc": "Minimum landing target standard covariance, uses reported covariance if greater\n", "max": 10.0, "min": 0.0, "name": "LPE_LT_COV", "shortDesc": "Minimum landing target standard covariance", "type": "Float", "units": "m^2"}, {"category": "Standard", "decimalPlaces": 8, "default": 0.001, "group": "Local Position Estimator", "max": 1.0, "min": 0.0, "name": "LPE_PN_B", "shortDesc": "Accel bias propagation noise density", "type": "Float", "units": "m/s^3/sqrt(Hz)"}, {"category": "Standard", "decimalPlaces": 8, "default": 0.1, "group": "Local Position Estimator", "longDesc": "Increase to trust measurements more.\nDecrease to trust model more.\n", "max": 1.0, "min": 0.0, "name": "LPE_PN_P", "shortDesc": "Position propagation noise density", "type": "Float", "units": "m/s/sqrt(Hz)"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.001, "group": "Local Position Estimator", "longDesc": "Terrain random walk noise density, hilly/outdoor (0.1), flat/Indoor (0.001)\n", "max": 1.0, "min": 0.0, "name": "LPE_PN_T", "shortDesc": "Terrain random walk noise density", "type": "Float", "units": "m/s/sqrt(Hz)"}, {"category": "Standard", "decimalPlaces": 8, "default": 0.1, "group": "Local Position Estimator", "longDesc": "Increase to trust measurements more.\nDecrease to trust model more.\n", "max": 1.0, "min": 0.0, "name": "LPE_PN_V", "shortDesc": "Velocity propagation noise density", "type": "Float", "units": "m/s^2/sqrt(Hz)"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Local Position Estimator", "max": 1.0, "min": -1.0, "name": "LPE_SNR_OFF_Z", "shortDesc": "Sonar z offset from center of vehicle +down", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.05, "group": "Local Position Estimator", "max": 1.0, "min": 0.01, "name": "LPE_SNR_Z", "shortDesc": "Sonar z standard deviation", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 3, "default": 1.0, "group": "Local Position Estimator", "longDesc": "Terrain maximum percent grade, hilly/outdoor (100 = 45 deg), flat/Indoor (0 = 0 deg)\n\nUsed to calculate increased terrain random walk noise due to movement.\n", "max": 100.0, "min": 0.0, "name": "LPE_T_MAX_GRADE", "shortDesc": "Terrain maximum percent grade", "type": "Float", "units": "%"}, {"category": "Standard", "decimalPlaces": 4, "default": 0.001, "group": "Local Position Estimator", "max": 1.0, "min": 0.0001, "name": "LPE_VIC_P", "shortDesc": "Vicon position standard deviation", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.1, "group": "Local Position Estimator", "longDesc": "Set to zero to enable automatic compensation from measurement timestamps\n", "max": 0.1, "min": 0.0, "name": "LPE_VIS_DELAY", "shortDesc": "Vision delay compensation", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.1, "group": "Local Position Estimator", "max": 1.0, "min": 0.01, "name": "LPE_VIS_XY", "shortDesc": "Vision xy standard deviation", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.5, "group": "Local Position Estimator", "max": 100.0, "min": 0.01, "name": "LPE_VIS_Z", "shortDesc": "Vision z standard deviation", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.3, "group": "Local Position Estimator", "max": 1.0, "min": 0.01, "name": "LPE_VXY_PUB", "shortDesc": "Required velocity xy standard deviation to publish position", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 0, "default": 5.0, "group": "Local Position Estimator", "max": 1000.0, "min": 5.0, "name": "LPE_X_LP", "shortDesc": "Cut frequency for state publication", "type": "Float", "units": "Hz"}, {"category": "Standard", "decimalPlaces": 1, "default": 1.0, "group": "Local Position Estimator", "max": 5.0, "min": 0.3, "name": "LPE_Z_PUB", "shortDesc": "Required z standard deviation to publish altitude/ terrain", "type": "Float", "units": "m"}, {"category": "Standard", "default": 1, "group": "MAVLink", "longDesc": "This allows a ground control station to automatically find the drone\non the local network.\n\n", "name": "MAV_0_BROADCAST", "shortDesc": "Broadcast heartbeats on local network for MAVLink instance 0", "type": "Int32", "values": [{"description": "Never broadcast", "value": 0}, {"description": "Always broadcast", "value": 1}, {"description": "Only multicast", "value": 2}]}, {"category": "Standard", "default": 2, "group": "MAVLink", "longDesc": "This is used to force flow control on or off for the the mavlink\ninstance. By default it is auto detected. Use when auto detection fails.\n\n", "name": "MAV_0_FLOW_CTRL", "rebootRequired": true, "shortDesc": "Enable serial flow control for instance 0", "type": "Int32", "values": [{"description": "Force off", "value": 0}, {"description": "Force on", "value": 1}, {"description": "Auto-detected", "value": 2}]}, {"category": "Standard", "default": 1, "group": "MAVLink", "longDesc": "If enabled, forward incoming MAVLink messages to other MAVLink ports if the\nmessage is either broadcast or the target is not the autopilot.\n\nThis allows for example a GCS to talk to a camera that is connected to the\nautopilot via MAVLink (on a different link than the GCS).\n\n", "name": "MAV_0_FORWARD", "rebootRequired": true, "shortDesc": "Enable MAVLink Message forwarding for instance 0", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 3, "default": 0.015, "group": "MAVLink", "increment": 0.001, "longDesc": "Positive real value that configures the transmission frequency of the\nHIGH_LATENCY2 stream for instance 0, configured in iridium mode.\nThis parameter has no effect if the instance mode is different from iridium.\n\n", "max": 50.0, "min": 0.0, "name": "MAV_0_HL_FREQ", "rebootRequired": true, "shortDesc": "Configures the frequency of HIGH_LATENCY2 stream for instance 0", "type": "Float", "units": "Hz"}, {"category": "Standard", "default": 0, "group": "MAVLink", "longDesc": "The MAVLink Mode defines the set of streamed messages (for example the\nvehicle's attitude) and their sending rates.\n\n", "name": "MAV_0_MODE", "rebootRequired": true, "shortDesc": "MAVLink Mode for instance 0", "type": "Int32", "values": [{"description": "Normal", "value": 0}, {"description": "Custom", "value": 1}, {"description": "Onboard", "value": 2}, {"description": "OSD", "value": 3}, {"description": "Magic", "value": 4}, {"description": "Config", "value": 5}, {"description": "Minimal", "value": 7}, {"description": "External Vision", "value": 8}, {"description": "Gimbal", "value": 10}, {"description": "Onboard Low Bandwidth", "value": 11}, {"description": "uAvionix", "value": 12}, {"description": "Low Bandwidth", "value": 13}]}, {"category": "Standard", "default": 1, "group": "MAVLink", "longDesc": "If enabled, MAVLink messages will be throttled according to\n`txbuf` field reported by radio_status.\n\nRequires a radio to send the mavlink message RADIO_STATUS.\n\n", "name": "MAV_0_RADIO_CTL", "rebootRequired": true, "shortDesc": "Enable software throttling of mavlink on instance 0", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 1200, "group": "MAVLink", "longDesc": "Configure the maximum sending rate for the MAVLink streams in Bytes/sec.\nIf the configured streams exceed the maximum rate, the sending rate of\neach stream is automatically decreased.\n\nIf this is set to 0 a value of half of the theoretical maximum bandwidth is used.\nThis corresponds to baudrate/20 Bytes/s (baudrate/10 = maximum data rate on\n8N1-configured links).\n\n", "min": 0, "name": "MAV_0_RATE", "rebootRequired": true, "shortDesc": "Maximum MAVLink sending rate for instance 0", "type": "Int32", "units": "B/s"}, {"category": "Standard", "default": 14550, "group": "MAVLink", "longDesc": "If ethernet enabled and selected as configuration for MAVLink instance 0,\nselected remote port will be set and used in MAVLink instance 0.\n\n", "name": "MAV_0_REMOTE_PRT", "rebootRequired": true, "shortDesc": "MAVLink Remote Port for instance 0", "type": "Int32"}, {"category": "Standard", "default": 14556, "group": "MAVLink", "longDesc": "If ethernet enabled and selected as configuration for MAVLink instance 0,\nselected udp port will be set and used in MAVLink instance 0.\n\n", "name": "MAV_0_UDP_PRT", "rebootRequired": true, "shortDesc": "MAVLink Network Port for instance 0", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "MAVLink", "longDesc": "This allows a ground control station to automatically find the drone\non the local network.\n\n", "name": "MAV_1_BROADCAST", "shortDesc": "Broadcast heartbeats on local network for MAVLink instance 1", "type": "Int32", "values": [{"description": "Never broadcast", "value": 0}, {"description": "Always broadcast", "value": 1}, {"description": "Only multicast", "value": 2}]}, {"category": "Standard", "default": 2, "group": "MAVLink", "longDesc": "This is used to force flow control on or off for the the mavlink\ninstance. By default it is auto detected. Use when auto detection fails.\n\n", "name": "MAV_1_FLOW_CTRL", "rebootRequired": true, "shortDesc": "Enable serial flow control for instance 1", "type": "Int32", "values": [{"description": "Force off", "value": 0}, {"description": "Force on", "value": 1}, {"description": "Auto-detected", "value": 2}]}, {"category": "Standard", "default": 0, "group": "MAVLink", "longDesc": "If enabled, forward incoming MAVLink messages to other MAVLink ports if the\nmessage is either broadcast or the target is not the autopilot.\n\nThis allows for example a GCS to talk to a camera that is connected to the\nautopilot via MAVLink (on a different link than the GCS).\n\n", "name": "MAV_1_FORWARD", "rebootRequired": true, "shortDesc": "Enable MAVLink Message forwarding for instance 1", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 3, "default": 0.015, "group": "MAVLink", "increment": 0.001, "longDesc": "Positive real value that configures the transmission frequency of the\nHIGH_LATENCY2 stream for instance 1, configured in iridium mode.\nThis parameter has no effect if the instance mode is different from iridium.\n\n", "max": 50.0, "min": 0.0, "name": "MAV_1_HL_FREQ", "rebootRequired": true, "shortDesc": "Configures the frequency of HIGH_LATENCY2 stream for instance 1", "type": "Float", "units": "Hz"}, {"category": "Standard", "default": 2, "group": "MAVLink", "longDesc": "The MAVLink Mode defines the set of streamed messages (for example the\nvehicle's attitude) and their sending rates.\n\n", "name": "MAV_1_MODE", "rebootRequired": true, "shortDesc": "MAVLink Mode for instance 1", "type": "Int32", "values": [{"description": "Normal", "value": 0}, {"description": "Custom", "value": 1}, {"description": "Onboard", "value": 2}, {"description": "OSD", "value": 3}, {"description": "Magic", "value": 4}, {"description": "Config", "value": 5}, {"description": "Minimal", "value": 7}, {"description": "External Vision", "value": 8}, {"description": "Gimbal", "value": 10}, {"description": "Onboard Low Bandwidth", "value": 11}, {"description": "uAvionix", "value": 12}, {"description": "Low Bandwidth", "value": 13}]}, {"category": "Standard", "default": 1, "group": "MAVLink", "longDesc": "If enabled, MAVLink messages will be throttled according to\n`txbuf` field reported by radio_status.\n\nRequires a radio to send the mavlink message RADIO_STATUS.\n\n", "name": "MAV_1_RADIO_CTL", "rebootRequired": true, "shortDesc": "Enable software throttling of mavlink on instance 1", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 0, "group": "MAVLink", "longDesc": "Configure the maximum sending rate for the MAVLink streams in Bytes/sec.\nIf the configured streams exceed the maximum rate, the sending rate of\neach stream is automatically decreased.\n\nIf this is set to 0 a value of half of the theoretical maximum bandwidth is used.\nThis corresponds to baudrate/20 Bytes/s (baudrate/10 = maximum data rate on\n8N1-configured links).\n\n", "min": 0, "name": "MAV_1_RATE", "rebootRequired": true, "shortDesc": "Maximum MAVLink sending rate for instance 1", "type": "Int32", "units": "B/s"}, {"category": "Standard", "default": 0, "group": "MAVLink", "longDesc": "If ethernet enabled and selected as configuration for MAVLink instance 1,\nselected remote port will be set and used in MAVLink instance 1.\n\n", "name": "MAV_1_REMOTE_PRT", "rebootRequired": true, "shortDesc": "MAVLink Remote Port for instance 1", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "MAVLink", "longDesc": "If ethernet enabled and selected as configuration for MAVLink instance 1,\nselected udp port will be set and used in MAVLink instance 1.\n\n", "name": "MAV_1_UDP_PRT", "rebootRequired": true, "shortDesc": "MAVLink Network Port for instance 1", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "MAVLink", "longDesc": "This allows a ground control station to automatically find the drone\non the local network.\n\n", "name": "MAV_2_BROADCAST", "shortDesc": "Broadcast heartbeats on local network for MAVLink instance 2", "type": "Int32", "values": [{"description": "Never broadcast", "value": 0}, {"description": "Always broadcast", "value": 1}, {"description": "Only multicast", "value": 2}]}, {"category": "Standard", "default": 2, "group": "MAVLink", "longDesc": "This is used to force flow control on or off for the the mavlink\ninstance. By default it is auto detected. Use when auto detection fails.\n\n", "name": "MAV_2_FLOW_CTRL", "rebootRequired": true, "shortDesc": "Enable serial flow control for instance 2", "type": "Int32", "values": [{"description": "Force off", "value": 0}, {"description": "Force on", "value": 1}, {"description": "Auto-detected", "value": 2}]}, {"category": "Standard", "default": 0, "group": "MAVLink", "longDesc": "If enabled, forward incoming MAVLink messages to other MAVLink ports if the\nmessage is either broadcast or the target is not the autopilot.\n\nThis allows for example a GCS to talk to a camera that is connected to the\nautopilot via MAVLink (on a different link than the GCS).\n\n", "name": "MAV_2_FORWARD", "rebootRequired": true, "shortDesc": "Enable MAVLink Message forwarding for instance 2", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 3, "default": 0.015, "group": "MAVLink", "increment": 0.001, "longDesc": "Positive real value that configures the transmission frequency of the\nHIGH_LATENCY2 stream for instance 2, configured in iridium mode.\nThis parameter has no effect if the instance mode is different from iridium.\n\n", "max": 50.0, "min": 0.0, "name": "MAV_2_HL_FREQ", "rebootRequired": true, "shortDesc": "Configures the frequency of HIGH_LATENCY2 stream for instance 2", "type": "Float", "units": "Hz"}, {"category": "Standard", "default": 0, "group": "MAVLink", "longDesc": "The MAVLink Mode defines the set of streamed messages (for example the\nvehicle's attitude) and their sending rates.\n\n", "name": "MAV_2_MODE", "rebootRequired": true, "shortDesc": "MAVLink Mode for instance 2", "type": "Int32", "values": [{"description": "Normal", "value": 0}, {"description": "Custom", "value": 1}, {"description": "Onboard", "value": 2}, {"description": "OSD", "value": 3}, {"description": "Magic", "value": 4}, {"description": "Config", "value": 5}, {"description": "Minimal", "value": 7}, {"description": "External Vision", "value": 8}, {"description": "Gimbal", "value": 10}, {"description": "Onboard Low Bandwidth", "value": 11}, {"description": "uAvionix", "value": 12}, {"description": "Low Bandwidth", "value": 13}]}, {"category": "Standard", "default": 1, "group": "MAVLink", "longDesc": "If enabled, MAVLink messages will be throttled according to\n`txbuf` field reported by radio_status.\n\nRequires a radio to send the mavlink message RADIO_STATUS.\n\n", "name": "MAV_2_RADIO_CTL", "rebootRequired": true, "shortDesc": "Enable software throttling of mavlink on instance 2", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 0, "group": "MAVLink", "longDesc": "Configure the maximum sending rate for the MAVLink streams in Bytes/sec.\nIf the configured streams exceed the maximum rate, the sending rate of\neach stream is automatically decreased.\n\nIf this is set to 0 a value of half of the theoretical maximum bandwidth is used.\nThis corresponds to baudrate/20 Bytes/s (baudrate/10 = maximum data rate on\n8N1-configured links).\n\n", "min": 0, "name": "MAV_2_RATE", "rebootRequired": true, "shortDesc": "Maximum MAVLink sending rate for instance 2", "type": "Int32", "units": "B/s"}, {"category": "Standard", "default": 0, "group": "MAVLink", "longDesc": "If ethernet enabled and selected as configuration for MAVLink instance 2,\nselected remote port will be set and used in MAVLink instance 2.\n\n", "name": "MAV_2_REMOTE_PRT", "rebootRequired": true, "shortDesc": "MAVLink Remote Port for instance 2", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "MAVLink", "longDesc": "If ethernet enabled and selected as configuration for MAVLink instance 2,\nselected udp port will be set and used in MAVLink instance 2.\n\n", "name": "MAV_2_UDP_PRT", "rebootRequired": true, "shortDesc": "MAVLink Network Port for instance 2", "type": "Int32"}, {"category": "Standard", "default": 1, "group": "MAVLink", "max": 250, "min": 1, "name": "MAV_COMP_ID", "rebootRequired": true, "shortDesc": "MAVLink component ID", "type": "Int32"}, {"category": "Standard", "default": 1, "group": "MAVLink", "longDesc": "If set to 1 incoming external setpoint messages will be directly forwarded\nto the controllers if in offboard control mode\n", "name": "MAV_FWDEXTSP", "shortDesc": "Forward external setpoint messages", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 1, "group": "MAVLink", "longDesc": "Disabling the parameter hash check functionality will make the mavlink instance\nstream parameters continuously.\n", "name": "MAV_HASH_CHK_EN", "shortDesc": "Parameter hash check", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 1, "group": "MAVLink", "longDesc": "The mavlink heartbeat message will not be forwarded if this parameter is set to 'disabled'.\nThe main reason for disabling heartbeats to be forwarded is because they confuse dronekit.\n", "name": "MAV_HB_FORW_EN", "shortDesc": "Heartbeat message forwarding", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 2, "group": "MAVLink", "name": "MAV_PROTO_VER", "shortDesc": "MAVLink protocol version", "type": "Int32", "values": [{"description": "Version 1 with auto-upgrade to v2 if detected", "value": 1}, {"description": "Version 2", "value": 2}]}, {"category": "Standard", "default": 5, "group": "MAVLink", "longDesc": "If the connected radio stops reporting RADIO_STATUS for a certain time,\na warning is triggered and, if MAV_X_RADIO_CTL is enabled, the software-flow\ncontrol is reset.\n", "max": 250, "min": 1, "name": "MAV_RADIO_TOUT", "shortDesc": "Timeout in seconds for the RADIO_STATUS reports coming in", "type": "Int32", "units": "s"}, {"category": "Standard", "default": 0, "group": "MAVLink", "longDesc": "When non-zero the MAVLink app will attempt to configure the\nSiK radio to this ID and re-set the parameter to 0. If the value\nis negative it will reset the complete radio config to\nfactory defaults. Only applies if this mavlink instance is going through a SiK radio\n", "max": 240, "min": -1, "name": "MAV_SIK_RADIO_ID", "shortDesc": "MAVLink SiK Radio ID", "type": "Int32"}, {"category": "Standard", "default": 1, "group": "MAVLink", "max": 250, "min": 1, "name": "MAV_SYS_ID", "rebootRequired": true, "shortDesc": "MAVLink system ID", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "MAVLink", "longDesc": "TELEM2 on Skynode only.\n\n", "name": "MAV_S_FORWARD", "rebootRequired": true, "shortDesc": "Enable MAVLink forwarding on TELEM2", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 11, "group": "MAVLink", "longDesc": "The MAVLink Mode defines the set of streamed messages (for example the\nvehicle's attitude) and their sending rates.\n\n", "name": "MAV_S_MODE", "rebootRequired": true, "shortDesc": "MAVLink Mode for SOM to FMU communication channel", "type": "Int32", "values": [{"description": "Normal", "value": 0}, {"description": "Onboard", "value": 2}, {"description": "Config", "value": 5}, {"description": "Minimal", "value": 7}, {"description": "Onboard Low Bandwidth", "value": 11}, {"description": "Low Bandwidth", "value": 13}]}, {"category": "Standard", "default": 0, "group": "MAVLink", "max": 23, "min": 0, "name": "MAV_TYPE", "shortDesc": "MAVLink airframe type", "type": "Int32", "values": [{"description": "Generic micro air vehicle", "value": 0}, {"description": "Fixed wing aircraft", "value": 1}, {"description": "Quadrotor", "value": 2}, {"description": "Coaxial helicopter", "value": 3}, {"description": "Normal helicopter with tail rotor", "value": 4}, {"description": "Airship, controlled", "value": 7}, {"description": "Free balloon, uncontrolled", "value": 8}, {"description": "Ground rover", "value": 10}, {"description": "Surface vessel, boat, ship", "value": 11}, {"description": "Submarine", "value": 12}, {"description": "Hexarotor", "value": 13}, {"description": "Octorotor", "value": 14}, {"description": "Tricopter", "value": 15}, {"description": "VTOL Two-rotor Tailsitter", "value": 19}, {"description": "VTOL Quad-rotor Tailsitter", "value": 20}, {"description": "VTOL Tiltrotor", "value": 21}, {"description": "VTOL Standard (separate fixed rotors for hover and cruise flight)", "value": 22}, {"description": "VTOL Tailsitter", "value": 23}]}, {"category": "Standard", "default": 0, "group": "MAVLink", "longDesc": "If set to 1 incoming HIL GPS messages are parsed.\n", "name": "MAV_USEHILGPS", "shortDesc": "Use/Accept HIL GPS message even if not in HIL mode", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 1, "group": "Magnetometer Bias Estimator", "longDesc": "This enables continuous calibration of the magnetometers\nbefore takeoff using gyro data.\n", "name": "MBE_ENABLE", "rebootRequired": true, "shortDesc": "Enable online mag bias calibration", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 1, "default": 18.0, "group": "Magnetometer Bias Estimator", "increment": 0.1, "longDesc": "Increase to make the estimator more responsive\nDecrease to make the estimator more robust to noise\n", "max": 100.0, "min": 0.1, "name": "MBE_LEARN_GAIN", "shortDesc": "Mag bias estimator learning gain", "type": "Float"}, {"category": "Standard", "default": 1, "group": "Manual Control", "longDesc": "This determines if moving the left stick to the lower right\narms and to the lower left disarms the vehicle.\n", "name": "MAN_ARM_GESTURE", "shortDesc": "Enable arm/disarm stick gesture", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.1, "group": "Manual Control", "increment": 0.01, "longDesc": "Range around stick center ignored to prevent\nvehicle drift from stick hardware inaccuracy.\n\nDoes not apply to any precise constant input like\nthrottle and attitude or rate piloting.\n", "max": 1.0, "min": 0.0, "name": "MAN_DEADZONE", "shortDesc": "Deadzone for sticks (only specific use cases)", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": -1.0, "group": "Manual Control", "longDesc": "The timeout for holding the left stick to the lower left\nand the right stick to the lower right at the same time until the gesture\nkills the actuators one-way.\n\nA negative value disables the feature.\n", "max": 15.0, "min": -1.0, "name": "MAN_KILL_GEST_T", "shortDesc": "Trigger time for kill stick gesture", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "Mission", "longDesc": "Ensure:\ngripper: NAV_CMD_DO_GRIPPER\nhas released before continuing mission.\nwinch: CMD_DO_WINCH\nhas delivered before continuing mission.\ngimbal: CMD_DO_GIMBAL_MANAGER_PITCHYAW\nhas reached the commanded orientation before beginning to take pictures.\n", "min": 0.0, "name": "MIS_COMMAND_TOUT", "shortDesc": "Timeout to allow the payload to execute the mission command", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 1, "default": 10000.0, "group": "Mission", "increment": 100.0, "longDesc": "There will be a warning message if the current waypoint is more distant than MIS_DIST_1WP from Home.\nHas no effect on mission validity.\nSet a value of zero or less to disable.\n", "max": 100000.0, "min": -1.0, "name": "MIS_DIST_1WP", "shortDesc": "Maximal horizontal distance from Home to first waypoint", "type": "Float", "units": "m"}, {"category": "Standard", "default": 30, "group": "Mission", "longDesc": "Minimum altitude above landing point that the vehicle will climb to after an aborted landing.\nThen vehicle will loiter in this altitude until further command is received.\nOnly applies to fixed-wing vehicles.\n", "min": 0, "name": "MIS_LND_ABRT_ALT", "shortDesc": "Landing abort min altitude", "type": "Int32", "units": "m"}, {"category": "Standard", "default": 0, "group": "Mission", "longDesc": "Enable yaw control of the mount. (Only affects multicopters and ROI mission items)\n\nIf enabled, yaw commands will be sent to the mount and the vehicle will follow its heading towards the flight direction.\nIf disabled, the vehicle will yaw towards the ROI.\n", "max": 1, "min": 0, "name": "MIS_MNT_YAW_CTL", "shortDesc": "Enable gimbal yaw control in missions", "type": "Int32", "values": [{"description": "Disable", "value": 0}, {"description": "Enable", "value": 1}]}, {"category": "Standard", "decimalPlaces": 1, "default": 2.5, "group": "Mission", "increment": 0.5, "longDesc": "This is the relative altitude the system will take off to\nif not otherwise specified.\n", "min": 0.0, "name": "MIS_TAKEOFF_ALT", "shortDesc": "Default take-off altitude", "type": "Float", "units": "m"}, {"category": "Standard", "default": 0, "group": "Mission", "longDesc": "Specifies if a mission has to contain a takeoff and/or mission landing.\nValidity of configured takeoffs/landings is checked independently of the setting here.\n", "name": "MIS_TKO_LAND_REQ", "shortDesc": "Mission takeoff/landing required", "type": "Int32", "values": [{"description": "No requirements", "value": 0}, {"description": "Require a takeoff", "value": 1}, {"description": "Require a landing", "value": 2}, {"description": "Require a takeoff and a landing", "value": 3}, {"description": "Require both a takeoff and a landing, or neither", "value": 4}, {"description": "Same as previous when landed, in-air require landing only if no valid VTOL approach is present", "value": 5}]}, {"category": "Standard", "decimalPlaces": 1, "default": 12.0, "group": "Mission", "increment": 1.0, "max": 90.0, "min": 0.0, "name": "MIS_YAW_ERR", "shortDesc": "Max yaw error in degrees needed for waypoint heading acceptance", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 1, "default": -1.0, "group": "Mission", "increment": 1.0, "longDesc": "Time in seconds we wait on reaching target heading at a waypoint if it is forced\n\nIf set > 0 it will ignore the target heading for normal waypoint acceptance. If the\nwaypoint forces the heading the timeout will matter. For example on VTOL forwards transition.\nMainly useful for VTOLs that have less yaw authority and might not reach target\nyaw in wind. Disabled by default.\n", "max": 20.0, "min": -1.0, "name": "MIS_YAW_TMT", "shortDesc": "Waypoint heading timeout", "type": "Float", "units": "s"}, {"category": "Standard", "default": 0, "group": "Mission", "max": 5, "min": 0, "name": "MPC_YAW_MODE", "shortDesc": "Heading behavior in autonomous modes", "type": "Int32", "values": [{"description": "towards waypoint", "value": 0}, {"description": "towards home", "value": 1}, {"description": "away from home", "value": 2}, {"description": "along trajectory", "value": 3}, {"description": "towards waypoint (yaw first)", "value": 4}, {"description": "yaw fixed", "value": 5}]}, {"category": "Standard", "decimalPlaces": 1, "default": 10.0, "group": "Mission", "increment": 0.5, "longDesc": "Default acceptance radius, overridden by acceptance radius of waypoint if set.\nFor fixed wing the npfg switch distance is used for horizontal acceptance.\n", "max": 200.0, "min": 0.05, "name": "NAV_ACC_RAD", "shortDesc": "Acceptance Radius", "type": "Float", "units": "m"}, {"category": "Standard", "default": 1, "group": "Mission", "name": "NAV_FORCE_VT", "shortDesc": "Force VTOL mode takeoff and land", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 1, "default": 5.0, "group": "Mission", "longDesc": "Altitude acceptance used for the last waypoint before a fixed-wing landing. This is usually smaller\nthan the standard vertical acceptance because close to the ground higher accuracy is required.\n", "max": 200.0, "min": 0.05, "name": "NAV_FW_ALTL_RAD", "shortDesc": "FW Altitude Acceptance Radius before a landing", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 1, "default": 10.0, "group": "Mission", "increment": 0.5, "longDesc": "Acceptance radius for fixedwing altitude.\n", "max": 200.0, "min": 0.05, "name": "NAV_FW_ALT_RAD", "shortDesc": "FW Altitude Acceptance Radius", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 1, "default": 80.0, "group": "Mission", "increment": 0.5, "longDesc": "Default value of loiter radius in fixed-wing mode (e.g. for Loiter mode).\n\nThe direction of the loiter can be set via the sign: A positive value for\nclockwise, negative for counter-clockwise.\n", "max": 10000.0, "min": -10000.0, "name": "NAV_LOITER_RAD", "shortDesc": "Loiter radius (FW only)", "type": "Float", "units": "m"}, {"category": "Standard", "default": 0, "group": "Mission", "longDesc": "When the data link is lost and this setting is enabled,\nthe vehicle will loiter at the position where the last GCS\nheartbeat was received rather than at its current position.\nOnly applies to Hold mode during failsafe actions.\n", "name": "NAV_LTR_LAST_DL", "shortDesc": "Loiter at last GCS heartbeat position on data link loss", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 1, "default": 0.8, "group": "Mission", "increment": 0.5, "longDesc": "Acceptance radius for multicopter altitude.\n", "max": 200.0, "min": 0.05, "name": "NAV_MC_ALT_RAD", "shortDesc": "MC Altitude Acceptance Radius", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 1, "default": -1.0, "group": "Mission", "increment": 1.0, "longDesc": "Minimum height above ground the vehicle is allowed to descend to during Mission and RTL,\nexcluding landing commands.\nRequires a distance sensor to be set up.\nNote: only prevents the vehicle from descending further, but does not force it to climb.\n\nSet to a negative value to disable.\n", "min": -1.0, "name": "NAV_MIN_GND_DIST", "shortDesc": "Minimum height above ground during Mission and RTL", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 1, "default": -1.0, "group": "Mission", "increment": 0.5, "longDesc": "This is the minimum altitude above Home the system will always obey in Loiter (Hold) mode if switched into this\nmode without specifying an altitude (e.g. through Loiter switch on RC).\nDoesn't affect Loiters that are part of Missions or that are entered through a reposition setpoint (\"Go to\").\nSet to a negative value to disable.\n", "min": -1.0, "name": "NAV_MIN_LTR_ALT", "shortDesc": "Minimum Loiter altitude", "type": "Float", "units": "m"}, {"category": "Standard", "default": 1, "group": "Mission", "longDesc": "Enabling this will allow the system to respond\nto transponder data from e.g. ADSB transponders\n", "name": "NAV_TRAFF_AVOID", "shortDesc": "Set traffic avoidance mode", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Warn only", "value": 1}, {"description": "Return mode", "value": 2}, {"description": "Land mode", "value": 3}, {"description": "Position Hold mode", "value": 4}]}, {"category": "Standard", "default": 500.0, "group": "Mission", "longDesc": "Defines a crosstrack horizontal distance\n", "min": 500.0, "name": "NAV_TRAFF_A_HOR", "shortDesc": "Set NAV TRAFFIC AVOID horizontal distance", "type": "Float", "units": "m"}, {"category": "Standard", "default": 500.0, "group": "Mission", "max": 500.0, "min": 10.0, "name": "NAV_TRAFF_A_VER", "shortDesc": "Set NAV TRAFFIC AVOID vertical distance", "type": "Float", "units": "m"}, {"category": "Standard", "default": 60, "group": "Mission", "longDesc": "Minimum acceptable time until collsion.\nAssumes constant speed over 3d distance.\n", "max": 900000000, "min": 1, "name": "NAV_TRAFF_COLL_T", "shortDesc": "Estimated time until collision", "type": "Int32", "units": "s"}, {"category": "Standard", "default": 0, "group": "Mixer Output", "longDesc": "The air-mode enables the mixer to increase the total thrust of the multirotor\nin order to keep attitude and rate control even at low and high throttle.\n\nThis function should be disabled during tuning as it will help the controller\nto diverge if the closed-loop is unstable (i.e. the vehicle is not tuned yet).\n\nEnabling air-mode for yaw requires the use of an arming switch.\n", "name": "MC_AIRMODE", "shortDesc": "Multicopter air-mode", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Roll/Pitch", "value": 1}, {"description": "Roll/Pitch/Yaw", "value": 2}]}, {"category": "Standard", "default": 0, "group": "Motor Failure", "longDesc": "If enabled, the HealthAndArmingChecks will verify that for motors, a minimum amount of ESC current per throttle\nlevel is being consumed.\nOtherwise this indicates an motor failure.\nThis check only works for ESCs that report current consumption.\n", "name": "FD_ACT_EN", "shortDesc": "Enable Actuator Failure check", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 2, "default": 35.0, "group": "Motor Failure", "increment": 1.0, "longDesc": "Determines the slope between expected steady state current and linearized, normalized thrust command.\nE.g. FD_ACT_MOT_C2T A represents the expected steady state current at 100%.\nFD_ACT_LOW_OFF and FD_ACT_HIGH_OFF offset the threshold from that slope.\n", "max": 50.0, "min": 0.0, "name": "MOTFAIL_C2T", "shortDesc": "Motor Failure Current/Throttle Scale", "type": "Float", "units": "A/%"}, {"category": "Standard", "decimalPlaces": 2, "default": 10.0, "group": "Motor Failure", "increment": 1.0, "longDesc": "threshold = FD_ACT_MOT_C2T * thrust + FD_ACT_HIGH_OFF\n", "max": 30.0, "min": 0.0, "name": "MOTFAIL_HIGH_OFF", "shortDesc": "Overcurrent motor failure limit offset", "type": "Float", "units": "A"}, {"category": "Standard", "decimalPlaces": 2, "default": 10.0, "group": "Motor Failure", "increment": 1.0, "longDesc": "threshold = FD_ACT_MOT_C2T * thrust - FD_ACT_LOW_OFF\n", "max": 30.0, "min": 0.0, "name": "MOTFAIL_LOW_OFF", "shortDesc": "Undercurrent motor failure limit offset", "type": "Float", "units": "A"}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "Motor Failure", "increment": 1.0, "longDesc": "Motor failure only triggers after current thresholds are exceeded for this time.\n", "max": 10.0, "min": 0.01, "name": "MOTFAIL_TIME", "shortDesc": "Motor Failure Hysteresis Time", "type": "Float", "units": "s"}, {"category": "Standard", "default": 0, "group": "Mount", "longDesc": "Set to true for servo gimbal, false for passthrough.\nThis is required for a gimbal which is not capable of stabilizing itself\nand relies on the IMU's attitude estimation.\n", "name": "MNT_DO_STAB", "shortDesc": "Stabilize the mount", "type": "Int32", "values": [{"description": "Disable", "value": 0}, {"description": "Stabilize all axis", "value": 1}, {"description": "Stabilize yaw for absolute/lock mode.", "value": 2}, {"description": "Stabilize pitch for absolute/lock mode.", "value": 3}]}, {"category": "Standard", "decimalPlaces": 1, "default": 90.0, "group": "Mount", "max": 90.0, "min": -90.0, "name": "MNT_LND_P_MAX", "shortDesc": "Pitch maximum when landed", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 1, "default": -90.0, "group": "Mount", "max": 90.0, "min": -90.0, "name": "MNT_LND_P_MIN", "shortDesc": "Pitch minimum when landed", "type": "Float", "units": "deg"}, {"category": "Standard", "default": 0, "group": "Mount", "max": 6, "min": 0, "name": "MNT_MAN_PITCH", "shortDesc": "Auxiliary channel to control pitch (in AUX input or manual mode)", "type": "Int32", "values": [{"description": "Disable", "value": 0}, {"description": "AUX1", "value": 1}, {"description": "AUX2", "value": 2}, {"description": "AUX3", "value": 3}, {"description": "AUX4", "value": 4}, {"description": "AUX5", "value": 5}, {"description": "AUX6", "value": 6}]}, {"category": "Standard", "default": 0, "group": "Mount", "max": 6, "min": 0, "name": "MNT_MAN_ROLL", "shortDesc": "Auxiliary channel to control roll (in AUX input or manual mode)", "type": "Int32", "values": [{"description": "Disable", "value": 0}, {"description": "AUX1", "value": 1}, {"description": "AUX2", "value": 2}, {"description": "AUX3", "value": 3}, {"description": "AUX4", "value": 4}, {"description": "AUX5", "value": 5}, {"description": "AUX6", "value": 6}]}, {"category": "Standard", "default": 0, "group": "Mount", "max": 6, "min": 0, "name": "MNT_MAN_YAW", "shortDesc": "Auxiliary channel to control yaw (in AUX input or manual mode)", "type": "Int32", "values": [{"description": "Disable", "value": 0}, {"description": "AUX1", "value": 1}, {"description": "AUX2", "value": 2}, {"description": "AUX3", "value": 3}, {"description": "AUX4", "value": 4}, {"description": "AUX5", "value": 5}, {"description": "AUX6", "value": 6}]}, {"category": "Standard", "default": 154, "group": "Mount", "longDesc": "If MNT_MODE_OUT is MAVLink protocol v2, mount configure/control commands will be sent with this component ID.\n", "name": "MNT_MAV_COMPID", "shortDesc": "Mavlink Component ID of the mount", "type": "Int32"}, {"category": "Standard", "default": 1, "group": "Mount", "longDesc": "If MNT_MODE_OUT is MAVLink gimbal protocol v1, mount configure/control commands will be sent with this target ID.\n", "name": "MNT_MAV_SYSID", "shortDesc": "Mavlink System ID of the mount", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 1, "default": 45.0, "group": "Mount", "longDesc": "Use output driver settings to calibrate (e.g. PWM_CENT/_MIN/_MAX).\n", "name": "MNT_MAX_PITCH", "shortDesc": "Max positive angle of pitch setpoint (only in MNT_MODE_OUT=AUX)", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 1, "default": -45.0, "group": "Mount", "longDesc": "Use output driver settings to calibrate (e.g. PWM_CENT/_MIN/_MAX).\n", "name": "MNT_MIN_PITCH", "shortDesc": "Min negative angle of pitch setpoint (only in MNT_MODE_OUT=AUX)", "type": "Float", "units": "deg"}, {"category": "Standard", "default": -1, "group": "Mount", "longDesc": "This is the protocol used between the ground station and the autopilot.\n\nRecommended is Auto, RC only or MAVLink gimbal protocol v2.\nThe rest will be deprecated.\n", "max": 4, "min": -1, "name": "MNT_MODE_IN", "rebootRequired": true, "shortDesc": "Mount input mode", "type": "Int32", "values": [{"description": "DISABLED", "value": -1}, {"description": "Auto (RC and MAVLink gimbal protocol v2)", "value": 0}, {"description": "RC", "value": 1}, {"description": "MAVLINK_ROI (protocol v1, to be deprecated)", "value": 2}, {"description": "MAVLINK_DO_MOUNT (protocol v1, to be deprecated)", "value": 3}, {"description": "MAVlink gimbal protocol v2", "value": 4}]}, {"category": "Standard", "default": 0, "group": "Mount", "longDesc": "This is the protocol used between the autopilot and a connected gimbal.\n\nRecommended is the MAVLink gimbal protocol v2 if the gimbal supports it.\n", "max": 2, "min": 0, "name": "MNT_MODE_OUT", "rebootRequired": true, "shortDesc": "Mount output mode", "type": "Int32", "values": [{"description": "AUX", "value": 0}, {"description": "MAVLink gimbal protocol v1", "value": 1}, {"description": "MAVLink gimbal protocol v2", "value": 2}]}, {"category": "Standard", "decimalPlaces": 1, "default": 90.0, "group": "Mount", "longDesc": "Use output driver settings to calibrate (e.g. PWM_CENT/_MIN/_MAX). Note that only symmetric angular ranges are supported.\n", "max": 720.0, "min": 1.0, "name": "MNT_RANGE_ROLL", "shortDesc": "Range of roll channel output (only in MNT_MODE_OUT=AUX)", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 1, "default": 360.0, "group": "Mount", "longDesc": "Use output driver settings to calibrate (e.g. PWM_CENT/_MIN/_MAX). Note that only symmetric angular ranges are supported.\n", "max": 720.0, "min": 1.0, "name": "MNT_RANGE_YAW", "shortDesc": "Range of yaw channel output (only in MNT_MODE_OUT=AUX)", "type": "Float", "units": "deg"}, {"category": "Standard", "default": 30.0, "group": "Mount", "longDesc": "Full stick input [-1..1] translats to [-pitch rate..pitch rate].\n", "max": 90.0, "min": 1.0, "name": "MNT_RATE_PITCH", "shortDesc": "Angular pitch rate for manual input in degrees/second", "type": "Float", "units": "deg/s"}, {"category": "Standard", "default": 30.0, "group": "Mount", "longDesc": "Full stick input [-1..1] translats to [-yaw rate..yaw rate].\n", "max": 90.0, "min": 1.0, "name": "MNT_RATE_YAW", "shortDesc": "Angular yaw rate for manual input in degrees/second", "type": "Float", "units": "deg/s"}, {"category": "Standard", "default": 1, "group": "Mount", "max": 1, "min": 0, "name": "MNT_RC_IN_MODE", "shortDesc": "Input mode for RC gimbal input", "type": "Int32", "values": [{"description": "Angle", "value": 0}, {"description": "Angular rate", "value": 1}]}, {"category": "Standard", "default": 0.3, "group": "Mount", "longDesc": "Alpha filter time constant defining the convergence rate (in seconds) for open-loop AUX mount control\n\nUse when no angular position feedback is available.\nWith MNT_MODE_OUT set to AUX, the mount operates in open-loop and directly commands the servo output.\nParameters must be tuned for the specific servo to approximate its speed and response.\n", "min": 0.0, "name": "MNT_TAU", "shortDesc": "Time constant for open-loop AUX gimbal control", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Multicopter Acro Mode", "longDesc": "Exponential factor for tuning the input curve shape.\n\n0 Purely linear input curve\n1 Purely cubic input curve\n", "max": 1.0, "min": 0.0, "name": "MC_ACRO_EXPO", "shortDesc": "Acro mode roll, pitch expo factor", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Multicopter Acro Mode", "longDesc": "Exponential factor for tuning the input curve shape.\n\n0 Purely linear input curve\n1 Purely cubic input curve\n", "max": 1.0, "min": 0.0, "name": "MC_ACRO_EXPO_Y", "shortDesc": "Acro mode yaw expo factor", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 100.0, "group": "Multicopter Acro Mode", "increment": 5.0, "longDesc": "Full stick deflection leads to this rate.\n", "max": 1800.0, "min": 0.0, "name": "MC_ACRO_P_MAX", "shortDesc": "Acro mode maximum pitch rate", "type": "Float", "units": "deg/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 100.0, "group": "Multicopter Acro Mode", "increment": 5.0, "longDesc": "Full stick deflection leads to this rate.\n", "max": 1800.0, "min": 0.0, "name": "MC_ACRO_R_MAX", "shortDesc": "Acro mode maximum roll rate", "type": "Float", "units": "deg/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Multicopter Acro Mode", "longDesc": "\"Superexponential\" factor for refining the input curve shape tuned using MC_ACRO_EXPO.\n\n0 Pure Expo function\n0.7 reasonable shape enhancement for intuitive stick feel\n0.95 very strong bent input curve only near maxima have effect\n", "max": 0.95, "min": 0.0, "name": "MC_ACRO_SUPEXPO", "shortDesc": "Acro mode roll, pitch super expo factor", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Multicopter Acro Mode", "longDesc": "\"Superexponential\" factor for refining the input curve shape tuned using MC_ACRO_EXPO_Y.\n\n0 Pure Expo function\n0.7 reasonable shape enhancement for intuitive stick feel\n0.95 very strong bent input curve only near maxima have effect\n", "max": 0.95, "min": 0.0, "name": "MC_ACRO_SUPEXPOY", "shortDesc": "Acro mode yaw super expo factor", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 100.0, "group": "Multicopter Acro Mode", "increment": 5.0, "longDesc": "Full stick deflection leads to this rate.\n", "max": 1800.0, "min": 0.0, "name": "MC_ACRO_Y_MAX", "shortDesc": "Acro mode maximum yaw rate", "type": "Float", "units": "deg/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 220.0, "group": "Multicopter Attitude Control", "increment": 5.0, "longDesc": "Limit for pitch rate in manual and auto modes (except acro).\nHas effect for large rotations in autonomous mode, to avoid large control\noutput and mixer saturation.\n\nThis is not only limited by the vehicle's properties, but also by the maximum\nmeasurement rate of the gyro.\n", "max": 1800.0, "min": 0.0, "name": "MC_PITCHRATE_MAX", "shortDesc": "Max pitch rate", "type": "Float", "units": "deg/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 4.0, "group": "Multicopter Attitude Control", "increment": 0.1, "longDesc": "Pitch proportional gain, i.e. desired angular speed in rad/s for error 1 rad.\n", "max": 12.0, "min": 0.0, "name": "MC_PITCH_P", "shortDesc": "Pitch P gain", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 220.0, "group": "Multicopter Attitude Control", "increment": 5.0, "longDesc": "Limit for roll rate in manual and auto modes (except acro).\nHas effect for large rotations in autonomous mode, to avoid large control\noutput and mixer saturation.\n\nThis is not only limited by the vehicle's properties, but also by the maximum\nmeasurement rate of the gyro.\n", "max": 1800.0, "min": 0.0, "name": "MC_ROLLRATE_MAX", "shortDesc": "Max roll rate", "type": "Float", "units": "deg/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 4.0, "group": "Multicopter Attitude Control", "increment": 0.1, "longDesc": "Roll proportional gain, i.e. desired angular speed in rad/s for error 1 rad.\n", "max": 12.0, "min": 0.0, "name": "MC_ROLL_P", "shortDesc": "Roll P gain", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 200.0, "group": "Multicopter Attitude Control", "increment": 5.0, "max": 1800.0, "min": 0.0, "name": "MC_YAWRATE_MAX", "shortDesc": "Max yaw rate", "type": "Float", "units": "deg/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 2.8, "group": "Multicopter Attitude Control", "increment": 0.1, "longDesc": "Yaw proportional gain, i.e. desired angular speed in rad/s for error 1 rad.\n", "max": 5.0, "min": 0.0, "name": "MC_YAW_P", "shortDesc": "Yaw P gain", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.4, "group": "Multicopter Attitude Control", "increment": 0.1, "longDesc": "A fraction [0,1] deprioritizing yaw compared to roll and pitch in non-linear attitude control.\nDeprioritizing yaw is necessary because multicopters have much less control authority\nin yaw compared to the other axes and it makes sense because yaw is not critical for\nstable hovering or 3D navigation.\n\nFor yaw control tuning use MC_YAW_P. This ratio has no impact on the yaw gain.\n", "max": 1.0, "min": 0.0, "name": "MC_YAW_WEIGHT", "shortDesc": "Yaw weight", "type": "Float"}, {"category": "Standard", "decimalPlaces": 0, "default": 20.0, "group": "Multicopter Attitude Control", "increment": 5.0, "longDesc": "Limits the acceleration of the yaw setpoint to avoid large\ncontrol output and mixer saturation.\n", "max": 360.0, "min": 5.0, "name": "MPC_YAWRAUTO_ACC", "shortDesc": "Maximum yaw acceleration in autonomous modes", "type": "Float", "units": "deg/s^2"}, {"category": "Standard", "decimalPlaces": 0, "default": 60.0, "group": "Multicopter Attitude Control", "increment": 5.0, "longDesc": "Limits the rate of change of the yaw setpoint to avoid large\ncontrol output and mixer saturation.\n", "max": 360.0, "min": 5.0, "name": "MPC_YAWRAUTO_MAX", "shortDesc": "Maximum yaw rate in autonomous modes", "type": "Float", "units": "deg/s"}, {"category": "Standard", "default": 0.4, "group": "Multicopter Position Control", "longDesc": "Average delay of the range sensor message plus the tracking delay of the position controller in seconds\n\nOnly used in Position mode.\n", "max": 1.0, "min": 0.0, "name": "CP_DELAY", "shortDesc": "Range sensor and position controller average delay", "type": "Float", "units": "s"}, {"category": "Standard", "default": -1.0, "group": "Multicopter Position Control", "longDesc": "Only used in Position mode. Collision avoidance is disabled by setting this parameter to a negative value\n", "max": 15.0, "min": -1.0, "name": "CP_DIST", "shortDesc": "Minimum distance the vehicle should keep to all obstacles", "type": "Float", "units": "m"}, {"category": "Standard", "default": 0, "group": "Multicopter Position Control", "longDesc": "Boolean to allow moving into directions where there is no sensor data (outside FOV)\n\nOnly used in Position mode.\n", "name": "CP_GO_NO_DATA", "shortDesc": "Allow moving into directions without sensor data", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 30.0, "group": "Multicopter Position Control", "longDesc": "Angle left/right from the commanded setpoint by which the collision prevention algorithm can choose to change the setpoint direction\n\nOnly used in Position mode.\n", "max": 90.0, "min": 0.0, "name": "CP_GUIDE_ANG", "shortDesc": "Collision prevention guidance angle", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Multicopter Position Control", "longDesc": "Setting this parameter to 0 disables the filter\n", "max": 2.0, "min": 0.0, "name": "MC_MAN_TILT_TAU", "shortDesc": "Manual tilt input filter time constant", "type": "Float", "units": "s"}, {"category": "Standard", "default": 1, "group": "Multicopter Position Control", "longDesc": "Set to decouple tilt from vertical acceleration.\nThis provides smoother flight but slightly worse tracking in position and auto modes.\nUnset if accurate position tracking during dynamic maneuvers is more important than a smooth flight.\n", "name": "MPC_ACC_DECOUPLE", "shortDesc": "Acceleration to tilt coupling", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 1, "default": 3.0, "group": "Multicopter Position Control", "increment": 1.0, "max": 15.0, "min": 2.0, "name": "MPC_ACC_DOWN_MAX", "shortDesc": "Maximum downwards acceleration in climb rate controlled modes", "type": "Float", "units": "m/s^2"}, {"category": "Standard", "decimalPlaces": 1, "default": 3.0, "group": "Multicopter Position Control", "increment": 1.0, "longDesc": "When piloting manually, this parameter is only used in MPC_POS_MODE Acceleration based.\n", "max": 15.0, "min": 2.0, "name": "MPC_ACC_HOR", "shortDesc": "Acceleration for autonomous and for manual modes", "type": "Float", "units": "m/s^2"}, {"category": "Standard", "decimalPlaces": 2, "default": 5.0, "group": "Multicopter Position Control", "increment": 1.0, "longDesc": "MPC_POS_MODE\n1 just deceleration\n4 not used, use MPC_ACC_HOR instead\n", "max": 15.0, "min": 2.0, "name": "MPC_ACC_HOR_MAX", "shortDesc": "Maximum horizontal acceleration", "type": "Float", "units": "m/s^2"}, {"category": "Standard", "decimalPlaces": 1, "default": 4.0, "group": "Multicopter Position Control", "increment": 1.0, "max": 15.0, "min": 2.0, "name": "MPC_ACC_UP_MAX", "shortDesc": "Maximum upwards acceleration in climb rate controlled modes", "type": "Float", "units": "m/s^2"}, {"category": "Standard", "default": 2, "group": "Multicopter Position Control", "longDesc": "Control height\n0: relative earth frame origin which may drift due to sensors\n1: relative to ground (requires distance sensor) which changes with terrain variation.\nIt will revert to relative earth frame if the distance to ground estimate becomes invalid.\n2: relative to ground (requires distance sensor) when stationary\nand relative to earth frame when moving horizontally.\nThe speed threshold is MPC_HOLD_MAX_XY\n", "max": 2, "min": 0, "name": "MPC_ALT_MODE", "shortDesc": "Altitude reference mode", "type": "Int32", "values": [{"description": "Altitude following", "value": 0}, {"description": "Terrain following", "value": 1}, {"description": "Terrain hold", "value": 2}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.8, "group": "Multicopter Position Control", "longDesc": "Maximum horizontal velocity for which position hold is enabled (use 0 to disable check)\n\nOnly used with MPC_POS_MODE Direct velocity or MPC_ALT_MODE 2\n", "max": 3.0, "min": 0.0, "name": "MPC_HOLD_MAX_XY", "shortDesc": "Max horizontal velocity for position hold", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.6, "group": "Multicopter Position Control", "longDesc": "Maximum vertical velocity for which position hold is enabled (use 0 to disable check)\n\nOnly used with MPC_ALT_MODE 1\n", "max": 3.0, "min": 0.0, "name": "MPC_HOLD_MAX_Z", "shortDesc": "Max vertical velocity for position hold", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 4.0, "group": "Multicopter Position Control", "increment": 1.0, "longDesc": "Limit the maximum jerk of the vehicle (how fast the acceleration can change).\nA lower value leads to smoother vehicle motions but also limited agility.\n", "max": 80.0, "min": 1.0, "name": "MPC_JERK_AUTO", "shortDesc": "Jerk limit in autonomous modes", "type": "Float", "units": "m/s^3"}, {"category": "Standard", "decimalPlaces": 0, "default": 8.0, "group": "Multicopter Position Control", "increment": 1.0, "longDesc": "Limit the maximum jerk (acceleration change) of the vehicle.\nA lower value leads to smoother motions but limits agility.\n\nSetting this to the maximum value essentially disables the limit.\n\nOnly used with MPC_POS_MODE Acceleration based.\n", "max": 500.0, "min": 0.5, "name": "MPC_JERK_MAX", "shortDesc": "Maximum horizontal and vertical jerk in Position/Altitude mode", "type": "Float", "units": "m/s^3"}, {"category": "Standard", "decimalPlaces": 1, "default": 10.0, "group": "Multicopter Position Control", "longDesc": "Below this altitude descending velocity gets limited to a value\nbetween \"MPC_Z_VEL_MAX_DN\" (or \"MPC_Z_V_AUTO_DN\") and \"MPC_LAND_SPEED\"\nValue needs to be higher than \"MPC_LAND_ALT2\"\n", "max": 122.0, "min": 0.0, "name": "MPC_LAND_ALT1", "shortDesc": "Altitude for 1. step of slow landing (descend)", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 1, "default": 5.0, "group": "Multicopter Position Control", "longDesc": "Below this altitude descending velocity gets\nlimited to \"MPC_LAND_SPEED\"\nValue needs to be lower than \"MPC_LAND_ALT1\"\n", "max": 122.0, "min": 0.0, "name": "MPC_LAND_ALT2", "shortDesc": "Altitude for 2. step of slow landing (landing)", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 1, "default": 1.0, "group": "Multicopter Position Control", "longDesc": "If a valid distance sensor measurement to the ground is available,\nlimit descending velocity to \"MPC_LAND_CRWL\" below this altitude.\n", "max": 122.0, "min": 0.0, "name": "MPC_LAND_ALT3", "shortDesc": "Altitude for 3. step of slow landing", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.3, "group": "Multicopter Position Control", "longDesc": "Used below MPC_LAND_ALT3 if distance sensor data is availabe.\n", "min": 0.1, "name": "MPC_LAND_CRWL", "shortDesc": "Land crawl descend rate", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 0, "default": -1.0, "group": "Multicopter Position Control", "increment": 1.0, "longDesc": "When nudging is enabled (see MPC_LAND_RC_HELP), this defines the maximum\nallowed horizontal displacement from the original landing point.\n- If inside of the radius, only allow nudging inputs that do not move the vehicle outside of it.\n- If outside of the radius, only allow nudging inputs that move the vehicle back towards it.\n\nSet it to -1 for infinite radius.\n", "min": -1.0, "name": "MPC_LAND_RADIUS", "shortDesc": "User assisted landing radius", "type": "Float", "units": "m"}, {"category": "Standard", "default": 0, "group": "Multicopter Position Control", "longDesc": "Using stick input the vehicle can be moved horizontally and yawed.\nThe descend speed is amended:\nstick full up - 0\nstick centered - MPC_LAND_SPEED\nstick full down - 2 * MPC_LAND_SPEED\n\nManual override during auto modes has to be disabled to use this feature (see COM_RC_OVERRIDE).\n", "max": 1, "min": 0, "name": "MPC_LAND_RC_HELP", "shortDesc": "Enable nudging based on user input during autonomous land routine", "type": "Int32", "values": [{"description": "Nudging disabled", "value": 0}, {"description": "Nudging enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 1, "default": 0.7, "group": "Multicopter Position Control", "min": 0.6, "name": "MPC_LAND_SPEED", "shortDesc": "Landing descend rate", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.08, "group": "Multicopter Position Control", "increment": 0.01, "longDesc": "The value is mapped to the lowest throttle stick position in Stabilized mode.\n\nToo low collective thrust leads to loss of roll/pitch/yaw torque control authority.\nAirmode is used to keep torque authority with zero thrust (see MC_AIRMODE).\n", "max": 1.0, "min": 0.0, "name": "MPC_MANTHR_MIN", "shortDesc": "Minimum collective thrust in Stabilized mode", "type": "Float", "units": "norm"}, {"category": "Standard", "decimalPlaces": 0, "default": 35.0, "group": "Multicopter Position Control", "increment": 1.0, "max": 70.0, "min": 1.0, "name": "MPC_MAN_TILT_MAX", "shortDesc": "Maximal tilt angle in Stabilized, Altitude and Altitude Cruise mode", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 0, "default": 150.0, "group": "Multicopter Position Control", "increment": 10.0, "max": 400.0, "min": 0.0, "name": "MPC_MAN_Y_MAX", "shortDesc": "Max manual yaw rate for Stabilized, Altitude, Position mode", "type": "Float", "units": "deg/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.08, "group": "Multicopter Position Control", "increment": 0.01, "longDesc": "Not used in Stabilized mode\nSetting this parameter to 0 disables the filter\n", "max": 5.0, "min": 0.0, "name": "MPC_MAN_Y_TAU", "shortDesc": "Manual yaw rate input filter time constant", "type": "Float", "units": "s"}, {"category": "Standard", "default": 4, "group": "Multicopter Position Control", "longDesc": "The supported sub-modes are:\nDirect velocity:\nSticks directly map to velocity setpoints without smoothing.\nAlso applies to vertical direction and Altitude mode.\nUseful for velocity control tuning.\nAcceleration based:\nSticks map to acceleration and there's a virtual brake drag\n", "name": "MPC_POS_MODE", "shortDesc": "Position/Altitude mode variant", "type": "Int32", "values": [{"description": "Direct velocity", "value": 0}, {"description": "Acceleration based", "value": 4}]}, {"category": "Standard", "default": 0, "group": "Multicopter Position Control", "longDesc": "Defines how the throttle stick is mapped to collective thrust in Stabilized mode.\n\nRescale to hover thrust estimate:\nStick input is linearly rescaled, such that a centered throttle stick corresponds to the hover thrust estimator's output.\n\nNo rescale:\nDirectly map the stick 1:1 to the output.\nCan be useful with very low hover thrust which leads to much distortion and the upper half getting sensitive.\n\nRescale to hover thrust parameter:\nSimilar to rescaling to the hover thrust estimate, but it uses the hover thrust parameter value (see MPC_THR_HOVER) instead of estimated value.\nWith MPC_THR_HOVER 0.5 it's equivalent to No rescale.\n", "name": "MPC_THR_CURVE", "shortDesc": "Thrust curve mapping in Stabilized Mode", "type": "Int32", "values": [{"description": "Rescale to estimate", "value": 0}, {"description": "No rescale", "value": 1}, {"description": "Rescale to parameter", "value": 2}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.5, "group": "Multicopter Position Control", "increment": 0.01, "longDesc": "Mapped to center throttle stick in Stabilized mode (see MPC_THR_CURVE).\nUsed for initialization of the hover thrust estimator.\nThe estimated hover thrust is used as base for zero vertical acceleration in altitude control.\nThe hover thrust is important for land detection to work correctly.\n", "max": 0.8, "min": 0.1, "name": "MPC_THR_HOVER", "shortDesc": "Vertical thrust required to hover", "type": "Float", "units": "norm"}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "Multicopter Position Control", "increment": 0.05, "longDesc": "Limit allowed thrust e.g. for indoor test of overpowered vehicle.\n", "max": 1.0, "min": 0.0, "name": "MPC_THR_MAX", "shortDesc": "Maximum collective thrust in climb rate controlled modes", "type": "Float", "units": "norm"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.12, "group": "Multicopter Position Control", "increment": 0.01, "longDesc": "Too low thrust leads to loss of roll/pitch/yaw torque control authority.\nWith airmode enabled this parameters can be set to 0\nwhile still keeping torque authority (see MC_AIRMODE).\n", "max": 0.5, "min": 0.05, "name": "MPC_THR_MIN", "shortDesc": "Minimum collective thrust in climb rate controlled modes", "type": "Float", "units": "norm"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.3, "group": "Multicopter Position Control", "increment": 0.01, "longDesc": "Margin that is kept for horizontal control when higher priority vertical thrust is saturated.\nTo avoid completely starving horizontal control with high vertical error.\n", "max": 0.5, "min": 0.0, "name": "MPC_THR_XY_MARG", "shortDesc": "Horizontal thrust margin", "type": "Float", "units": "norm"}, {"category": "Standard", "decimalPlaces": 0, "default": 45.0, "group": "Multicopter Position Control", "increment": 1.0, "longDesc": "Absolute maximum for all velocity or acceleration controlled modes.\nAny higher value is truncated.\n", "max": 89.0, "min": 20.0, "name": "MPC_TILTMAX_AIR", "shortDesc": "Maximum tilt angle in air", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 0, "default": 12.0, "group": "Multicopter Position Control", "increment": 1.0, "longDesc": "Tighter tilt limit during takeoff to avoid tip over.\n", "max": 89.0, "min": 5.0, "name": "MPC_TILTMAX_LND", "shortDesc": "Maximum tilt during inital takeoff ramp", "type": "Float", "units": "deg"}, {"category": "Standard", "default": 3.0, "group": "Multicopter Position Control", "longDesc": "Increasing this value will make climb rate controlled takeoff slower.\nIf it's too slow the drone might scratch the ground and tip over.\nA time constant of 0 disables the ramp\n", "max": 5.0, "min": 0.0, "name": "MPC_TKO_RAMP_T", "shortDesc": "Smooth takeoff ramp time constant", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 1.5, "group": "Multicopter Position Control", "max": 5.0, "min": 1.0, "name": "MPC_TKO_SPEED", "shortDesc": "Takeoff climb rate", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 5.0, "group": "Multicopter Position Control", "increment": 0.5, "longDesc": "A value of 0 disables the filter.\n", "max": 50.0, "min": 0.0, "name": "MPC_VELD_LP", "shortDesc": "Velocity derivative low pass cutoff frequency", "type": "Float", "units": "Hz"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "Multicopter Position Control", "increment": 0.5, "longDesc": "A value of 0 disables the filter.\n", "max": 50.0, "min": 0.0, "name": "MPC_VEL_LP", "shortDesc": "Velocity low pass cutoff frequency", "type": "Float", "units": "Hz"}, {"category": "Standard", "decimalPlaces": 1, "default": 10.0, "group": "Multicopter Position Control", "increment": 1.0, "longDesc": "Must be smaller than MPC_XY_VEL_MAX.\n\nThe maximum sideways and backward speed can be set differently\nusing MPC_VEL_MAN_SIDE and MPC_VEL_MAN_BACK, respectively.\n", "max": 20.0, "min": 3.0, "name": "MPC_VEL_MANUAL", "shortDesc": "Maximum horizontal velocity setpoint in Position mode", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": -1.0, "group": "Multicopter Position Control", "increment": 1.0, "longDesc": "If set to a negative value or larger than\nMPC_VEL_MANUAL then MPC_VEL_MANUAL is used.\n", "max": 20.0, "min": -1.0, "name": "MPC_VEL_MAN_BACK", "shortDesc": "Maximum backward velocity in Position mode", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": -1.0, "group": "Multicopter Position Control", "increment": 1.0, "longDesc": "If set to a negative value or larger than\nMPC_VEL_MANUAL then MPC_VEL_MANUAL is used.\n", "max": 20.0, "min": -1.0, "name": "MPC_VEL_MAN_SIDE", "shortDesc": "Maximum sideways velocity in Position mode", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 5.0, "group": "Multicopter Position Control", "increment": 0.5, "longDesc": "A value of 0 disables the filter.\n", "max": 50.0, "min": 0.0, "name": "MPC_VEL_NF_BW", "shortDesc": "Velocity notch filter bandwidth", "type": "Float", "units": "Hz"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "Multicopter Position Control", "increment": 0.5, "longDesc": "The center frequency for the 2nd order notch filter on the velocity.\nA value of 0 disables the filter.\n", "max": 50.0, "min": 0.0, "name": "MPC_VEL_NF_FRQ", "shortDesc": "Velocity notch filter frequency", "type": "Float", "units": "Hz"}, {"category": "Standard", "decimalPlaces": 0, "default": 5.0, "group": "Multicopter Position Control", "increment": 1.0, "longDesc": "e.g. in Missions, RTL, Goto if the waypoint does not specify differently\n", "max": 20.0, "min": 3.0, "name": "MPC_XY_CRUISE", "shortDesc": "Default horizontal velocity in autonomous modes", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 2.0, "group": "Multicopter Position Control", "increment": 1.0, "longDesc": "The integration speed of the trajectory setpoint is linearly\nreduced with the horizontal position tracking error. When the\nerror is above this parameter, the integration of the\ntrajectory is stopped to wait for the drone.\n\nThis value can be adjusted depending on the tracking\ncapabilities of the vehicle.\n", "max": 10.0, "min": 0.1, "name": "MPC_XY_ERR_MAX", "shortDesc": "Maximum horizontal error allowed by the trajectory generator", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.95, "group": "Multicopter Position Control", "increment": 0.1, "longDesc": "Defined as corrective velocity in m/s per m position error\n", "max": 2.0, "min": 0.0, "name": "MPC_XY_P", "shortDesc": "Proportional gain for horizontal position error", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.5, "group": "Multicopter Position Control", "increment": 0.1, "max": 1.0, "min": 0.1, "name": "MPC_XY_TRAJ_P", "shortDesc": "Proportional gain for horizontal trajectory position error", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": -10.0, "group": "Multicopter Position Control", "increment": 1.0, "longDesc": "If set to a value greater than zero, other parameters are automatically set (such as\nMPC_XY_VEL_MAX or MPC_VEL_MANUAL).\nIf set to a negative value, the existing individual parameters are used.\n", "max": 20.0, "min": -20.0, "name": "MPC_XY_VEL_ALL", "shortDesc": "Overall Horizontal Velocity Limit", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.2, "group": "Multicopter Position Control", "increment": 0.02, "longDesc": "Defined as corrective acceleration in m/s^2 per m/s^2 velocity derivative\n", "max": 2.0, "min": 0.1, "name": "MPC_XY_VEL_D_ACC", "shortDesc": "Differential gain for horizontal velocity error", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.4, "group": "Multicopter Position Control", "increment": 0.02, "longDesc": "Defined as correction acceleration in m/s^2 per m velocity integral\nAllows to eliminate steady state errors in disturbances like wind.\n", "max": 60.0, "min": 0.0, "name": "MPC_XY_VEL_I_ACC", "shortDesc": "Integral gain for horizontal velocity error", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 12.0, "group": "Multicopter Position Control", "increment": 1.0, "longDesc": "Absolute maximum for all velocity controlled modes.\nAny higher value is truncated.\n", "max": 20.0, "min": 0.0, "name": "MPC_XY_VEL_MAX", "shortDesc": "Maximum horizontal velocity", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 1.8, "group": "Multicopter Position Control", "increment": 0.1, "longDesc": "Defined as corrective acceleration in m/s^2 per m/s velocity error\n", "max": 5.0, "min": 1.2, "name": "MPC_XY_VEL_P_ACC", "shortDesc": "Proportional gain for horizontal velocity error", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "Multicopter Position Control", "increment": 0.1, "longDesc": "Defined as corrective velocity in m/s per m position error\n", "max": 1.5, "min": 0.1, "name": "MPC_Z_P", "shortDesc": "Proportional gain for vertical position error", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": -3.0, "group": "Multicopter Position Control", "increment": 0.5, "longDesc": "If set to a value greater than zero, other parameters are automatically set (such as\nMPC_Z_VEL_MAX_UP or MPC_LAND_SPEED).\nIf set to a negative value, the existing individual parameters are used.\n", "max": 8.0, "min": -3.0, "name": "MPC_Z_VEL_ALL", "shortDesc": "Overall Vertical Velocity Limit", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Multicopter Position Control", "increment": 0.02, "longDesc": "Defined as corrective acceleration in m/s^2 per m/s^2 velocity derivative\n", "max": 2.0, "min": 0.0, "name": "MPC_Z_VEL_D_ACC", "shortDesc": "Differential gain for vertical velocity error", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 2.0, "group": "Multicopter Position Control", "increment": 0.1, "longDesc": "Defined as corrective acceleration in m/s^2 per m velocity integral\n", "max": 3.0, "min": 0.2, "name": "MPC_Z_VEL_I_ACC", "shortDesc": "Integral gain for vertical velocity error", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 1.5, "group": "Multicopter Position Control", "increment": 0.1, "longDesc": "Absolute maximum for all climb rate controlled modes.\nIn manually piloted modes full stick deflection commands this velocity.\n\nFor default autonomous velocity see MPC_Z_V_AUTO_UP\n", "max": 4.0, "min": 0.5, "name": "MPC_Z_VEL_MAX_DN", "shortDesc": "Maximum descent velocity", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 3.0, "group": "Multicopter Position Control", "increment": 0.1, "longDesc": "Absolute maximum for all climb rate controlled modes.\nIn manually piloted modes full stick deflection commands this velocity.\n\nFor default autonomous velocity see MPC_Z_V_AUTO_UP\n", "max": 8.0, "min": 0.5, "name": "MPC_Z_VEL_MAX_UP", "shortDesc": "Maximum ascent velocity", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 4.0, "group": "Multicopter Position Control", "increment": 0.1, "longDesc": "Defined as corrective acceleration in m/s^2 per m/s velocity error\n", "max": 15.0, "min": 2.0, "name": "MPC_Z_VEL_P_ACC", "shortDesc": "Proportional gain for vertical velocity error", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 1.5, "group": "Multicopter Position Control", "increment": 0.5, "longDesc": "For manual modes and offboard, see MPC_Z_VEL_MAX_DN\n", "max": 4.0, "min": 0.5, "name": "MPC_Z_V_AUTO_DN", "shortDesc": "Descent velocity in autonomous modes", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 3.0, "group": "Multicopter Position Control", "increment": 0.5, "longDesc": "For manually controlled modes and offboard see MPC_Z_VEL_MAX_UP\n", "max": 8.0, "min": 0.5, "name": "MPC_Z_V_AUTO_UP", "shortDesc": "Ascent velocity in autonomous modes", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 2, "default": -0.4, "group": "Multicopter Position Control", "increment": 0.05, "longDesc": "Changes the overall responsiveness of the vehicle.\nThe higher the value, the faster the vehicle will react.\n\nIf set to a value greater than zero, other parameters are automatically set (such as\nthe acceleration or jerk limits).\nIf set to a negative value, the existing individual parameters are used.\n", "max": 1.0, "min": -1.0, "name": "SYS_VEHICLE_RESP", "shortDesc": "Responsiveness", "type": "Float"}, {"category": "Standard", "default": 0, "group": "Multicopter Position Control", "name": "WV_EN", "shortDesc": "Enable weathervane", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 1.0, "group": "Multicopter Position Control", "longDesc": "Minimum roll angle setpoint for weathervane controller to demand a yaw-rate\n", "max": 5.0, "min": 0.0, "name": "WV_ROLL_MIN", "shortDesc": "Minimum roll angle for weathervane yaw-rate demand", "type": "Float", "units": "deg"}, {"category": "Standard", "default": 90.0, "group": "Multicopter Position Control", "max": 120.0, "min": 0.0, "name": "WV_YRATE_MAX", "shortDesc": "Maximum yawrate the weathervane controller is allowed to demand", "type": "Float", "units": "deg/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 3.0, "group": "Multicopter Position Slow Mode", "increment": 0.1, "longDesc": "This value is used in slow mode if\nno aux channel is mapped and\nno limit is commanded through MAVLink.\n", "min": 0.1, "name": "MC_SLOW_DEF_HVEL", "shortDesc": "Default horizontal velocity limit", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "Multicopter Position Slow Mode", "increment": 0.1, "longDesc": "This value is used in slow mode if\nno aux channel is mapped and\nno limit is commanded through MAVLink.\n", "min": 0.1, "name": "MC_SLOW_DEF_VVEL", "shortDesc": "Default vertical velocity limit", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 0, "default": 45.0, "group": "Multicopter Position Slow Mode", "increment": 0.1, "longDesc": "This value is used in slow mode if\nno aux channel is mapped and\nno limit is commanded through MAVLink.\n", "min": 1.0, "name": "MC_SLOW_DEF_YAWR", "shortDesc": "Default yaw rate limit", "type": "Float", "units": "deg/s"}, {"category": "Standard", "default": 0, "group": "Multicopter Position Slow Mode", "name": "MC_SLOW_MAP_HVEL", "shortDesc": "Manual input mapped to scale horizontal velocity in position slow mode", "type": "Int32", "values": [{"description": "No rescaling", "value": 0}, {"description": "AUX1", "value": 1}, {"description": "AUX2", "value": 2}, {"description": "AUX3", "value": 3}, {"description": "AUX4", "value": 4}, {"description": "AUX5", "value": 5}, {"description": "AUX6", "value": 6}]}, {"category": "Standard", "default": 0, "group": "Multicopter Position Slow Mode", "longDesc": "RC_MAP_AUX{N} to allow for gimbal pitch rate control in position slow mode\n", "name": "MC_SLOW_MAP_PTCH", "shortDesc": "Gimbal pitch rate control input in position slow mode", "type": "Int32", "values": [{"description": "No pitch rate input", "value": 0}, {"description": "AUX1", "value": 1}, {"description": "AUX2", "value": 2}, {"description": "AUX3", "value": 3}, {"description": "AUX4", "value": 4}, {"description": "AUX5", "value": 5}, {"description": "AUX6", "value": 6}]}, {"category": "Standard", "default": 0, "group": "Multicopter Position Slow Mode", "name": "MC_SLOW_MAP_VVEL", "shortDesc": "Manual input mapped to scale vertical velocity in position slow mode", "type": "Int32", "values": [{"description": "No rescaling", "value": 0}, {"description": "AUX1", "value": 1}, {"description": "AUX2", "value": 2}, {"description": "AUX3", "value": 3}, {"description": "AUX4", "value": 4}, {"description": "AUX5", "value": 5}, {"description": "AUX6", "value": 6}]}, {"category": "Standard", "default": 0, "group": "Multicopter Position Slow Mode", "name": "MC_SLOW_MAP_YAWR", "shortDesc": "Manual input mapped to scale yaw rate in position slow mode", "type": "Int32", "values": [{"description": "No rescaling", "value": 0}, {"description": "AUX1", "value": 1}, {"description": "AUX2", "value": 2}, {"description": "AUX3", "value": 3}, {"description": "AUX4", "value": 4}, {"description": "AUX5", "value": 5}, {"description": "AUX6", "value": 6}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.3, "group": "Multicopter Position Slow Mode", "increment": 0.1, "longDesc": "The lowest input maps and is clamped to this velocity.\n", "min": 0.1, "name": "MC_SLOW_MIN_HVEL", "shortDesc": "Horizontal velocity lower limit", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.3, "group": "Multicopter Position Slow Mode", "increment": 0.1, "longDesc": "The lowest input maps and is clamped to this velocity.\n", "min": 0.1, "name": "MC_SLOW_MIN_VVEL", "shortDesc": "Vertical velocity lower limit", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 0, "default": 3.0, "group": "Multicopter Position Slow Mode", "increment": 0.1, "longDesc": "The lowest input maps and is clamped to this rate.\n", "min": 1.0, "name": "MC_SLOW_MIN_YAWR", "shortDesc": "Yaw rate lower limit", "type": "Float", "units": "deg/s"}, {"category": "Standard", "default": 0, "group": "Multicopter Rate Control", "longDesc": "This compensates for voltage drop of the battery over time by attempting to\nnormalize performance across the operating range of the battery. The copter\nshould constantly behave as if it was fully charged with reduced max acceleration\nat lower battery percentages. i.e. if hover is at 0.5 throttle at 100% battery,\nit will still be 0.5 at 60% battery.\n", "name": "MC_BAT_SCALE_EN", "shortDesc": "Battery power level scaler", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 4, "default": 0.003, "group": "Multicopter Rate Control", "increment": 0.0005, "longDesc": "Pitch rate differential gain. Small values help reduce fast oscillations. If value is too big oscillations will appear again.\n", "min": 0.0, "name": "MC_PITCHRATE_D", "shortDesc": "Pitch rate D gain", "type": "Float"}, {"category": "Standard", "decimalPlaces": 4, "default": 0.0, "group": "Multicopter Rate Control", "longDesc": "Improves tracking performance.\n", "min": 0.0, "name": "MC_PITCHRATE_FF", "shortDesc": "Pitch rate feedforward", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.2, "group": "Multicopter Rate Control", "increment": 0.01, "longDesc": "Pitch rate integral gain. Can be set to compensate static thrust difference or gravity center offset.\n", "min": 0.0, "name": "MC_PITCHRATE_I", "shortDesc": "Pitch rate I gain", "type": "Float"}, {"category": "Standard", "decimalPlaces": 4, "default": 1.0, "group": "Multicopter Rate Control", "increment": 0.0005, "longDesc": "Global gain of the controller.\n\nThis gain scales the P, I and D terms of the controller:\n```\noutput = MC_PITCHRATE_K * (MC_PITCHRATE_P * error\n+ MC_PITCHRATE_I * error_integral\n+ MC_PITCHRATE_D * error_derivative)\n```\nSet MC_PITCHRATE_P=1 to implement a PID in the ideal form.\nSet MC_PITCHRATE_K=1 to implement a PID in the parallel form.\n", "max": 5.0, "min": 0.01, "name": "MC_PITCHRATE_K", "shortDesc": "Pitch rate controller gain", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.15, "group": "Multicopter Rate Control", "increment": 0.01, "longDesc": "Pitch rate proportional gain, i.e. control output for angular speed error 1 rad/s.\n", "max": 0.6, "min": 0.01, "name": "MC_PITCHRATE_P", "shortDesc": "Pitch rate P gain", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.3, "group": "Multicopter Rate Control", "increment": 0.01, "longDesc": "Pitch rate integrator limit. Can be set to increase the amount of integrator available to counteract disturbances or reduced to improve settling time after large pitch moment trim changes.\n", "min": 0.0, "name": "MC_PR_INT_LIM", "shortDesc": "Pitch rate integrator limit", "type": "Float"}, {"category": "Standard", "decimalPlaces": 4, "default": 0.003, "group": "Multicopter Rate Control", "increment": 0.0005, "longDesc": "Roll rate differential gain. Small values help reduce fast oscillations. If value is too big oscillations will appear again.\n", "max": 0.01, "min": 0.0, "name": "MC_ROLLRATE_D", "shortDesc": "Roll rate D gain", "type": "Float"}, {"category": "Standard", "decimalPlaces": 4, "default": 0.0, "group": "Multicopter Rate Control", "longDesc": "Improves tracking performance.\n", "min": 0.0, "name": "MC_ROLLRATE_FF", "shortDesc": "Roll rate feedforward", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.2, "group": "Multicopter Rate Control", "increment": 0.01, "longDesc": "Roll rate integral gain. Can be set to compensate static thrust difference or gravity center offset.\n", "min": 0.0, "name": "MC_ROLLRATE_I", "shortDesc": "Roll rate I gain", "type": "Float"}, {"category": "Standard", "decimalPlaces": 4, "default": 1.0, "group": "Multicopter Rate Control", "increment": 0.0005, "longDesc": "Global gain of the controller.\n\nThis gain scales the P, I and D terms of the controller:\n```\noutput = MC_ROLLRATE_K * (MC_ROLLRATE_P * error\n+ MC_ROLLRATE_I * error_integral\n+ MC_ROLLRATE_D * error_derivative)\n```\nSet MC_ROLLRATE_P=1 to implement a PID in the ideal form.\nSet MC_ROLLRATE_K=1 to implement a PID in the parallel form.\n", "max": 5.0, "min": 0.01, "name": "MC_ROLLRATE_K", "shortDesc": "Roll rate controller gain", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.15, "group": "Multicopter Rate Control", "increment": 0.01, "longDesc": "Roll rate proportional gain, i.e. control output for angular speed error 1 rad/s.\n", "max": 0.5, "min": 0.01, "name": "MC_ROLLRATE_P", "shortDesc": "Roll rate P gain", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.3, "group": "Multicopter Rate Control", "increment": 0.01, "longDesc": "Roll rate integrator limit. Can be set to increase the amount of integrator available to counteract disturbances or reduced to improve settling time after large roll moment trim changes.\n", "min": 0.0, "name": "MC_RR_INT_LIM", "shortDesc": "Roll rate integrator limit", "type": "Float"}, {"category": "Standard", "decimalPlaces": 4, "default": 0.0, "group": "Multicopter Rate Control", "increment": 0.0005, "longDesc": "Yaw rate differential gain. Small values help reduce fast oscillations. If value is too big oscillations will appear again.\n", "min": 0.0, "name": "MC_YAWRATE_D", "shortDesc": "Yaw rate D gain", "type": "Float"}, {"category": "Standard", "decimalPlaces": 4, "default": 0.0, "group": "Multicopter Rate Control", "longDesc": "Improves tracking performance.\n", "min": 0.0, "name": "MC_YAWRATE_FF", "shortDesc": "Yaw rate feedforward", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.1, "group": "Multicopter Rate Control", "increment": 0.01, "longDesc": "Yaw rate integral gain. Can be set to compensate static thrust difference or gravity center offset.\n", "min": 0.0, "name": "MC_YAWRATE_I", "shortDesc": "Yaw rate I gain", "type": "Float"}, {"category": "Standard", "decimalPlaces": 4, "default": 1.0, "group": "Multicopter Rate Control", "increment": 0.0005, "longDesc": "Global gain of the controller.\n\nThis gain scales the P, I and D terms of the controller:\n```\noutput = MC_YAWRATE_K * (MC_YAWRATE_P * error\n+ MC_YAWRATE_I * error_integral\n+ MC_YAWRATE_D * error_derivative)\n```\nSet MC_YAWRATE_P=1 to implement a PID in the ideal form.\nSet MC_YAWRATE_K=1 to implement a PID in the parallel form.\n", "max": 5.0, "min": 0.01, "name": "MC_YAWRATE_K", "shortDesc": "Yaw rate controller gain", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.2, "group": "Multicopter Rate Control", "increment": 0.01, "longDesc": "Yaw rate proportional gain, i.e. control output for angular speed error 1 rad/s.\n", "max": 0.6, "min": 0.0, "name": "MC_YAWRATE_P", "shortDesc": "Yaw rate P gain", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 2.0, "group": "Multicopter Rate Control", "longDesc": "Reduces vibrations by lowering high frequency torque caused by rotor acceleration.\n0 disables the filter\n", "max": 10.0, "min": 0.0, "name": "MC_YAW_TQ_CUTOFF", "shortDesc": "Low pass filter cutoff frequency for yaw torque setpoint", "type": "Float", "units": "Hz"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.3, "group": "Multicopter Rate Control", "increment": 0.01, "longDesc": "Yaw rate integrator limit. Can be set to increase the amount of integrator available to counteract disturbances or reduced to improve settling time after large yaw moment trim changes.\n", "min": 0.0, "name": "MC_YR_INT_LIM", "shortDesc": "Yaw rate integrator limit", "type": "Float"}, {"category": "Standard", "default": 0, "group": "OSD", "longDesc": "Controls the vertical position of the crosshair display.\nResolution is limited by OSD to 15 discrete values. Negative\nvalues will display the crosshairs below the horizon\n\n", "max": 8, "min": -8, "name": "OSD_CH_HEIGHT", "shortDesc": "OSD Crosshairs Height", "type": "Int32"}, {"category": "Standard", "default": 500, "group": "OSD", "longDesc": "Amount of time in milliseconds to dwell at the beginning of the display, when scrolling.\n\n", "max": 10000, "min": 100, "name": "OSD_DWELL_TIME", "shortDesc": "OSD Dwell Time (ms)", "type": "Int32"}, {"category": "Standard", "default": 3, "group": "OSD", "longDesc": "Minimum security of log level to display on the OSD.\n\n", "name": "OSD_LOG_LEVEL", "shortDesc": "OSD Warning Level", "type": "Int32"}, {"category": "Standard", "default": 1, "group": "OSD", "longDesc": "Forward RC stick input to VTX when disarmed\n\n", "max": 1, "min": 0, "name": "OSD_RC_STICK", "shortDesc": "OSD RC Stick commands", "type": "Int32"}, {"category": "Standard", "default": 125, "group": "OSD", "longDesc": "Scroll rate in milliseconds for OSD messages longer than available character width.\nThis is lower-bounded by the nominal loop rate of this module.\n\n", "max": 1000, "min": 100, "name": "OSD_SCROLL_RATE", "shortDesc": "OSD Scroll Rate (ms)", "type": "Int32"}, {"bitmask": [{"description": "CRAFT_NAME", "index": 0}, {"description": "DISARMED", "index": 1}, {"description": "GPS_LAT", "index": 2}, {"description": "GPS_LON", "index": 3}, {"description": "GPS_SATS", "index": 4}, {"description": "GPS_SPEED", "index": 5}, {"description": "HOME_DIST", "index": 6}, {"description": "HOME_DIR", "index": 7}, {"description": "MAIN_BATT_VOLTAGE", "index": 8}, {"description": "CURRENT_DRAW", "index": 9}, {"description": "MAH_DRAWN", "index": 10}, {"description": "RSSI_VALUE", "index": 11}, {"description": "ALTITUDE", "index": 12}, {"description": "NUMERICAL_VARIO", "index": 13}, {"description": "(unused) FLYMODE", "index": 14}, {"description": "(unused) ESC_TMP", "index": 15}, {"description": "(unused) PITCH_ANGLE", "index": 16}, {"description": "(unused) ROLL_ANGLE", "index": 17}, {"description": "CROSSHAIRS", "index": 18}, {"description": "AVG_CELL_VOLTAGE", "index": 19}, {"description": "(unused) HORIZON_SIDEBARS", "index": 20}, {"description": "POWER", "index": 21}], "category": "Standard", "default": 16383, "group": "OSD", "longDesc": "Configure / toggle support display options.\n\n", "max": 4194303, "min": 0, "name": "OSD_SYMBOLS", "shortDesc": "OSD Symbol Selection", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "PWM Outputs", "increment": 0.1, "longDesc": "Parameter used to model the nonlinear relationship between\nmotor control signal (e.g. PWM) and static thrust.\n\nThe model is:\n\n```\nrel_thrust = factor * rel_signal^2 + (1-factor) * rel_signal\n```\n, where rel_thrust is the normalized thrust between 0 and 1, and\nrel_signal is the relative motor control signal between 0 and 1.\n", "max": 1.0, "min": 0.0, "name": "THR_MDL_FAC", "shortDesc": "Thrust to motor control signal model parameter", "type": "Float"}, {"category": "Standard", "default": 1.0, "group": "Payload Deliverer", "longDesc": "Maximum time Gripper will wait while the successful griper actuation isn't recognised.\nIf the gripper has no feedback sensor, it will simply wait for\nthis time before considering gripper actuation successful and publish a\n'VehicleCommandAck' signaling successful gripper action\n\n", "min": 0.0, "name": "PD_GRIPPER_TO", "shortDesc": "Timeout for successful gripper actuation acknowledgement", "type": "Float", "units": "s"}, {"category": "Standard", "default": 0, "group": "Payload Deliverer", "max": 0, "min": -1, "name": "PD_GRIPPER_TYPE", "shortDesc": "Type of Gripper (Servo, etc.)", "type": "Int32", "values": [{"description": "Undefined", "value": -1}, {"description": "Servo", "value": 0}]}, {"category": "Standard", "decimalPlaces": 1, "default": 5.0, "group": "Precision Land", "increment": 0.5, "longDesc": "Time after which the landing target is considered lost without any new measurements.\n", "max": 50.0, "min": 0.0, "name": "PLD_BTOUT", "shortDesc": "Landing Target Timeout", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.1, "group": "Precision Land", "increment": 0.1, "longDesc": "Allow final approach (without horizontal positioning) if losing landing target closer than this to the ground.\n", "max": 10.0, "min": 0.0, "name": "PLD_FAPPR_ALT", "shortDesc": "Final approach altitude", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.2, "group": "Precision Land", "increment": 0.1, "longDesc": "Start descending if closer above landing target than this.\n", "max": 10.0, "min": 0.0, "name": "PLD_HACC_RAD", "shortDesc": "Horizontal acceptance radius", "type": "Float", "units": "m"}, {"category": "Standard", "default": 3, "group": "Precision Land", "longDesc": "Maximum number of times to search for the landing target if it is lost during the precision landing.\n", "max": 100, "min": 0, "name": "PLD_MAX_SRCH", "shortDesc": "Maximum number of search attempts", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 1, "default": 10.0, "group": "Precision Land", "increment": 0.1, "longDesc": "Altitude above home to which to climb when searching for the landing target.\n", "max": 100.0, "min": 0.0, "name": "PLD_SRCH_ALT", "shortDesc": "Search altitude", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 1, "default": 10.0, "group": "Precision Land", "increment": 0.1, "longDesc": "Time allowed to search for the landing target before falling back to normal landing.\n", "max": 100.0, "min": 0.0, "name": "PLD_SRCH_TOUT", "shortDesc": "Search timeout", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "Pure Pursuit", "increment": 0.01, "longDesc": "Lower value -> More aggressive controller (beware overshoot/oscillations)\n", "max": 100.0, "min": 0.1, "name": "PP_LOOKAHD_GAIN", "shortDesc": "Tuning parameter for the pure pursuit controller", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 10.0, "group": "Pure Pursuit", "increment": 0.01, "max": 100.0, "min": 0.1, "name": "PP_LOOKAHD_MAX", "shortDesc": "Maximum lookahead distance for the pure pursuit controller", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "Pure Pursuit", "increment": 0.01, "max": 100.0, "min": 0.1, "name": "PP_LOOKAHD_MIN", "shortDesc": "Minimum lookahead distance for the pure pursuit controller", "type": "Float", "units": "m"}, {"category": "Standard", "default": 2000.0, "group": "Radio Calibration", "longDesc": "Maximum value for this channel.\n", "max": 2200.0, "min": 1500.0, "name": "RC10_MAX", "shortDesc": "RC channel 10 maximum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1000.0, "group": "Radio Calibration", "longDesc": "Minimum value for this channel.\n", "max": 1500.0, "min": 800.0, "name": "RC10_MIN", "shortDesc": "RC channel 10 minimum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1, "group": "Radio Calibration", "longDesc": "Set to -1 to reverse channel.\n", "max": 1, "min": -1, "name": "RC10_REV", "shortDesc": "RC channel 10 reverse", "type": "Int32"}, {"category": "Standard", "default": 1500.0, "group": "Radio Calibration", "longDesc": "Mid point value\n", "max": 2200.0, "min": 800.0, "name": "RC10_TRIM", "shortDesc": "RC channel 10 trim", "type": "Float", "units": "us"}, {"category": "Standard", "default": 2000.0, "group": "Radio Calibration", "longDesc": "Maximum value for this channel.\n", "max": 2200.0, "min": 1500.0, "name": "RC11_MAX", "shortDesc": "RC channel 11 maximum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1000.0, "group": "Radio Calibration", "longDesc": "Minimum value for this channel.\n", "max": 1500.0, "min": 800.0, "name": "RC11_MIN", "shortDesc": "RC channel 11 minimum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1, "group": "Radio Calibration", "longDesc": "Set to -1 to reverse channel.\n", "max": 1, "min": -1, "name": "RC11_REV", "shortDesc": "RC channel 11 reverse", "type": "Int32"}, {"category": "Standard", "default": 1500.0, "group": "Radio Calibration", "longDesc": "Mid point value\n", "max": 2200.0, "min": 800.0, "name": "RC11_TRIM", "shortDesc": "RC channel 11 trim", "type": "Float", "units": "us"}, {"category": "Standard", "default": 2000.0, "group": "Radio Calibration", "longDesc": "Maximum value for this channel.\n", "max": 2200.0, "min": 1500.0, "name": "RC12_MAX", "shortDesc": "RC channel 12 maximum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1000.0, "group": "Radio Calibration", "longDesc": "Minimum value for this channel.\n", "max": 1500.0, "min": 800.0, "name": "RC12_MIN", "shortDesc": "RC channel 12 minimum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1, "group": "Radio Calibration", "longDesc": "Set to -1 to reverse channel.\n", "max": 1, "min": -1, "name": "RC12_REV", "shortDesc": "RC channel 12 reverse", "type": "Int32"}, {"category": "Standard", "default": 1500.0, "group": "Radio Calibration", "longDesc": "Mid point value\n", "max": 2200.0, "min": 800.0, "name": "RC12_TRIM", "shortDesc": "RC channel 12 trim", "type": "Float", "units": "us"}, {"category": "Standard", "default": 2000.0, "group": "Radio Calibration", "longDesc": "Maximum value for this channel.\n", "max": 2200.0, "min": 1500.0, "name": "RC13_MAX", "shortDesc": "RC channel 13 maximum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1000.0, "group": "Radio Calibration", "longDesc": "Minimum value for this channel.\n", "max": 1500.0, "min": 800.0, "name": "RC13_MIN", "shortDesc": "RC channel 13 minimum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1, "group": "Radio Calibration", "longDesc": "Set to -1 to reverse channel.\n", "max": 1, "min": -1, "name": "RC13_REV", "shortDesc": "RC channel 13 reverse", "type": "Int32"}, {"category": "Standard", "default": 1500.0, "group": "Radio Calibration", "longDesc": "Mid point value\n", "max": 2200.0, "min": 800.0, "name": "RC13_TRIM", "shortDesc": "RC channel 13 trim", "type": "Float", "units": "us"}, {"category": "Standard", "default": 2000.0, "group": "Radio Calibration", "longDesc": "Maximum value for this channel.\n", "max": 2200.0, "min": 1500.0, "name": "RC14_MAX", "shortDesc": "RC channel 14 maximum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1000.0, "group": "Radio Calibration", "longDesc": "Minimum value for this channel.\n", "max": 1500.0, "min": 800.0, "name": "RC14_MIN", "shortDesc": "RC channel 14 minimum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1, "group": "Radio Calibration", "longDesc": "Set to -1 to reverse channel.\n", "max": 1, "min": -1, "name": "RC14_REV", "shortDesc": "RC channel 14 reverse", "type": "Int32"}, {"category": "Standard", "default": 1500.0, "group": "Radio Calibration", "longDesc": "Mid point value\n", "max": 2200.0, "min": 800.0, "name": "RC14_TRIM", "shortDesc": "RC channel 14 trim", "type": "Float", "units": "us"}, {"category": "Standard", "default": 2000.0, "group": "Radio Calibration", "longDesc": "Maximum value for this channel.\n", "max": 2200.0, "min": 1500.0, "name": "RC15_MAX", "shortDesc": "RC channel 15 maximum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1000.0, "group": "Radio Calibration", "longDesc": "Minimum value for this channel.\n", "max": 1500.0, "min": 800.0, "name": "RC15_MIN", "shortDesc": "RC channel 15 minimum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1, "group": "Radio Calibration", "longDesc": "Set to -1 to reverse channel.\n", "max": 1, "min": -1, "name": "RC15_REV", "shortDesc": "RC channel 15 reverse", "type": "Int32"}, {"category": "Standard", "default": 1500.0, "group": "Radio Calibration", "longDesc": "Mid point value\n", "max": 2200.0, "min": 800.0, "name": "RC15_TRIM", "shortDesc": "RC channel 15 trim", "type": "Float", "units": "us"}, {"category": "Standard", "default": 2000.0, "group": "Radio Calibration", "longDesc": "Maximum value for this channel.\n", "max": 2200.0, "min": 1500.0, "name": "RC16_MAX", "shortDesc": "RC channel 16 maximum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1000.0, "group": "Radio Calibration", "longDesc": "Minimum value for this channel.\n", "max": 1500.0, "min": 800.0, "name": "RC16_MIN", "shortDesc": "RC channel 16 minimum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1, "group": "Radio Calibration", "longDesc": "Set to -1 to reverse channel.\n", "max": 1, "min": -1, "name": "RC16_REV", "shortDesc": "RC channel 16 reverse", "type": "Int32"}, {"category": "Standard", "default": 1500.0, "group": "Radio Calibration", "longDesc": "Mid point value\n", "max": 2200.0, "min": 800.0, "name": "RC16_TRIM", "shortDesc": "RC channel 16 trim", "type": "Float", "units": "us"}, {"category": "Standard", "default": 2000.0, "group": "Radio Calibration", "longDesc": "Maximum value for this channel.\n", "max": 2200.0, "min": 1500.0, "name": "RC17_MAX", "shortDesc": "RC channel 17 maximum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1000.0, "group": "Radio Calibration", "longDesc": "Minimum value for this channel.\n", "max": 1500.0, "min": 800.0, "name": "RC17_MIN", "shortDesc": "RC channel 17 minimum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1, "group": "Radio Calibration", "longDesc": "Set to -1 to reverse channel.\n", "max": 1, "min": -1, "name": "RC17_REV", "shortDesc": "RC channel 17 reverse", "type": "Int32"}, {"category": "Standard", "default": 1500.0, "group": "Radio Calibration", "longDesc": "Mid point value\n", "max": 2200.0, "min": 800.0, "name": "RC17_TRIM", "shortDesc": "RC channel 17 trim", "type": "Float", "units": "us"}, {"category": "Standard", "default": 2000.0, "group": "Radio Calibration", "longDesc": "Maximum value for this channel.\n", "max": 2200.0, "min": 1500.0, "name": "RC18_MAX", "shortDesc": "RC channel 18 maximum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1000.0, "group": "Radio Calibration", "longDesc": "Minimum value for this channel.\n", "max": 1500.0, "min": 800.0, "name": "RC18_MIN", "shortDesc": "RC channel 18 minimum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1, "group": "Radio Calibration", "longDesc": "Set to -1 to reverse channel.\n", "max": 1, "min": -1, "name": "RC18_REV", "shortDesc": "RC channel 18 reverse", "type": "Int32"}, {"category": "Standard", "default": 1500.0, "group": "Radio Calibration", "longDesc": "Mid point value\n", "max": 2200.0, "min": 800.0, "name": "RC18_TRIM", "shortDesc": "RC channel 18 trim", "type": "Float", "units": "us"}, {"category": "Standard", "default": 2000.0, "group": "Radio Calibration", "longDesc": "Maximum value for RC channel 1\n", "max": 2200.0, "min": 1500.0, "name": "RC1_MAX", "shortDesc": "RC channel 1 maximum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1000.0, "group": "Radio Calibration", "longDesc": "Minimum value for RC channel 1\n", "max": 1500.0, "min": 800.0, "name": "RC1_MIN", "shortDesc": "RC channel 1 minimum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1, "group": "Radio Calibration", "longDesc": "Set to -1 to reverse channel.\n", "max": 1, "min": -1, "name": "RC1_REV", "shortDesc": "RC channel 1 reverse", "type": "Int32"}, {"category": "Standard", "default": 1500.0, "group": "Radio Calibration", "longDesc": "Mid point value\n", "max": 2200.0, "min": 800.0, "name": "RC1_TRIM", "shortDesc": "RC channel 1 trim", "type": "Float", "units": "us"}, {"category": "Standard", "default": 2000.0, "group": "Radio Calibration", "longDesc": "Maximum value for this channel.\n", "max": 2200.0, "min": 1500.0, "name": "RC2_MAX", "shortDesc": "RC channel 2 maximum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1000.0, "group": "Radio Calibration", "longDesc": "Minimum value for this channel.\n", "max": 1500.0, "min": 800.0, "name": "RC2_MIN", "shortDesc": "RC channel 2 minimum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1, "group": "Radio Calibration", "longDesc": "Set to -1 to reverse channel.\n", "max": 1, "min": -1, "name": "RC2_REV", "shortDesc": "RC channel 2 reverse", "type": "Int32"}, {"category": "Standard", "default": 1500.0, "group": "Radio Calibration", "longDesc": "Mid point value\n", "max": 2200.0, "min": 800.0, "name": "RC2_TRIM", "shortDesc": "RC channel 2 trim", "type": "Float", "units": "us"}, {"category": "Standard", "default": 2000.0, "group": "Radio Calibration", "longDesc": "Maximum value for this channel.\n", "max": 2200.0, "min": 1500.0, "name": "RC3_MAX", "shortDesc": "RC channel 3 maximum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1000.0, "group": "Radio Calibration", "longDesc": "Minimum value for this channel.\n", "max": 1500.0, "min": 800.0, "name": "RC3_MIN", "shortDesc": "RC channel 3 minimum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1, "group": "Radio Calibration", "longDesc": "Set to -1 to reverse channel.\n", "max": 1, "min": -1, "name": "RC3_REV", "shortDesc": "RC channel 3 reverse", "type": "Int32"}, {"category": "Standard", "default": 1500.0, "group": "Radio Calibration", "longDesc": "Mid point value\n", "max": 2200.0, "min": 800.0, "name": "RC3_TRIM", "shortDesc": "RC channel 3 trim", "type": "Float", "units": "us"}, {"category": "Standard", "default": 2000.0, "group": "Radio Calibration", "longDesc": "Maximum value for this channel.\n", "max": 2200.0, "min": 1500.0, "name": "RC4_MAX", "shortDesc": "RC channel 4 maximum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1000.0, "group": "Radio Calibration", "longDesc": "Minimum value for this channel.\n", "max": 1500.0, "min": 800.0, "name": "RC4_MIN", "shortDesc": "RC channel 4 minimum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1, "group": "Radio Calibration", "longDesc": "Set to -1 to reverse channel.\n", "max": 1, "min": -1, "name": "RC4_REV", "shortDesc": "RC channel 4 reverse", "type": "Int32"}, {"category": "Standard", "default": 1500.0, "group": "Radio Calibration", "longDesc": "Mid point value\n", "max": 2200.0, "min": 800.0, "name": "RC4_TRIM", "shortDesc": "RC channel 4 trim", "type": "Float", "units": "us"}, {"category": "Standard", "default": 2000.0, "group": "Radio Calibration", "longDesc": "Maximum value for this channel.\n", "max": 2200.0, "min": 1500.0, "name": "RC5_MAX", "shortDesc": "RC channel 5 maximum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1000.0, "group": "Radio Calibration", "longDesc": "Minimum value for this channel.\n", "max": 1500.0, "min": 800.0, "name": "RC5_MIN", "shortDesc": "RC channel 5 minimum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1, "group": "Radio Calibration", "longDesc": "Set to -1 to reverse channel.\n", "max": 1, "min": -1, "name": "RC5_REV", "shortDesc": "RC channel 5 reverse", "type": "Int32"}, {"category": "Standard", "default": 1500.0, "group": "Radio Calibration", "longDesc": "Mid point value\n", "max": 2200.0, "min": 800.0, "name": "RC5_TRIM", "shortDesc": "RC channel 5 trim", "type": "Float", "units": "us"}, {"category": "Standard", "default": 2000.0, "group": "Radio Calibration", "longDesc": "Maximum value for this channel.\n", "max": 2200.0, "min": 1500.0, "name": "RC6_MAX", "shortDesc": "RC channel 6 maximum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1000.0, "group": "Radio Calibration", "longDesc": "Minimum value for this channel.\n", "max": 1500.0, "min": 800.0, "name": "RC6_MIN", "shortDesc": "RC channel 6 minimum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1, "group": "Radio Calibration", "longDesc": "Set to -1 to reverse channel.\n", "max": 1, "min": -1, "name": "RC6_REV", "shortDesc": "RC channel 6 reverse", "type": "Int32"}, {"category": "Standard", "default": 1500.0, "group": "Radio Calibration", "longDesc": "Mid point value\n", "max": 2200.0, "min": 800.0, "name": "RC6_TRIM", "shortDesc": "RC channel 6 trim", "type": "Float", "units": "us"}, {"category": "Standard", "default": 2000.0, "group": "Radio Calibration", "longDesc": "Maximum value for this channel.\n", "max": 2200.0, "min": 1500.0, "name": "RC7_MAX", "shortDesc": "RC channel 7 maximum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1000.0, "group": "Radio Calibration", "longDesc": "Minimum value for this channel.\n", "max": 1500.0, "min": 800.0, "name": "RC7_MIN", "shortDesc": "RC channel 7 minimum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1, "group": "Radio Calibration", "longDesc": "Set to -1 to reverse channel.\n", "max": 1, "min": -1, "name": "RC7_REV", "shortDesc": "RC channel 7 reverse", "type": "Int32"}, {"category": "Standard", "default": 1500.0, "group": "Radio Calibration", "longDesc": "Mid point value\n", "max": 2200.0, "min": 800.0, "name": "RC7_TRIM", "shortDesc": "RC channel 7 trim", "type": "Float", "units": "us"}, {"category": "Standard", "default": 2000.0, "group": "Radio Calibration", "longDesc": "Maximum value for this channel.\n", "max": 2200.0, "min": 1500.0, "name": "RC8_MAX", "shortDesc": "RC channel 8 maximum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1000.0, "group": "Radio Calibration", "longDesc": "Minimum value for this channel.\n", "max": 1500.0, "min": 800.0, "name": "RC8_MIN", "shortDesc": "RC channel 8 minimum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1, "group": "Radio Calibration", "longDesc": "Set to -1 to reverse channel.\n", "max": 1, "min": -1, "name": "RC8_REV", "shortDesc": "RC channel 8 reverse", "type": "Int32"}, {"category": "Standard", "default": 1500.0, "group": "Radio Calibration", "longDesc": "Mid point value\n", "max": 2200.0, "min": 800.0, "name": "RC8_TRIM", "shortDesc": "RC channel 8 trim", "type": "Float", "units": "us"}, {"category": "Standard", "default": 2000.0, "group": "Radio Calibration", "longDesc": "Maximum value for this channel.\n", "max": 2200.0, "min": 1500.0, "name": "RC9_MAX", "shortDesc": "RC channel 9 maximum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1000.0, "group": "Radio Calibration", "longDesc": "Minimum value for this channel.\n", "max": 1500.0, "min": 800.0, "name": "RC9_MIN", "shortDesc": "RC channel 9 minimum", "type": "Float", "units": "us"}, {"category": "Standard", "default": 1, "group": "Radio Calibration", "longDesc": "Set to -1 to reverse channel.\n", "max": 1, "min": -1, "name": "RC9_REV", "shortDesc": "RC channel 9 reverse", "type": "Int32"}, {"category": "Standard", "default": 1500.0, "group": "Radio Calibration", "longDesc": "Mid point value\n", "max": 2200.0, "min": 800.0, "name": "RC9_TRIM", "shortDesc": "RC channel 9 trim", "type": "Float", "units": "us"}, {"category": "Standard", "default": 0, "group": "Radio Calibration", "longDesc": "This parameter is used by Ground Station software to save the number\nof channels which were used during RC calibration. It is only meant\nfor ground station use.\n", "max": 18, "min": 0, "name": "RC_CHAN_CNT", "shortDesc": "RC channel count", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "Radio Calibration", "longDesc": "Use RC_MAP_FAILSAFE to specify which channel is used to indicate RC loss via this threshold.\nBy default this is the throttle channel.\n\nSet to a PWM value slightly above the PWM value for the channel (e.g. throttle) in a failsafe event,\nbut below the minimum PWM value for the channel during normal operation.\n\nNote: The default value of 0 disables the feature (it is below the expected range).\n", "max": 2200, "min": 0, "name": "RC_FAILS_THR", "shortDesc": "Failsafe channel PWM threshold", "type": "Int32", "units": "us"}, {"category": "Standard", "default": 0, "group": "Radio Calibration", "max": 18, "min": 0, "name": "RC_MAP_AUX1", "shortDesc": "AUX1 Passthrough RC channel", "type": "Int32", "values": [{"description": "Unassigned", "value": 0}, {"description": "Channel 1", "value": 1}, {"description": "Channel 2", "value": 2}, {"description": "Channel 3", "value": 3}, {"description": "Channel 4", "value": 4}, {"description": "Channel 5", "value": 5}, {"description": "Channel 6", "value": 6}, {"description": "Channel 7", "value": 7}, {"description": "Channel 8", "value": 8}, {"description": "Channel 9", "value": 9}, {"description": "Channel 10", "value": 10}, {"description": "Channel 11", "value": 11}, {"description": "Channel 12", "value": 12}, {"description": "Channel 13", "value": 13}, {"description": "Channel 14", "value": 14}, {"description": "Channel 15", "value": 15}, {"description": "Channel 16", "value": 16}, {"description": "Channel 17", "value": 17}, {"description": "Channel 18", "value": 18}]}, {"category": "Standard", "default": 0, "group": "Radio Calibration", "max": 18, "min": 0, "name": "RC_MAP_AUX2", "shortDesc": "AUX2 Passthrough RC channel", "type": "Int32", "values": [{"description": "Unassigned", "value": 0}, {"description": "Channel 1", "value": 1}, {"description": "Channel 2", "value": 2}, {"description": "Channel 3", "value": 3}, {"description": "Channel 4", "value": 4}, {"description": "Channel 5", "value": 5}, {"description": "Channel 6", "value": 6}, {"description": "Channel 7", "value": 7}, {"description": "Channel 8", "value": 8}, {"description": "Channel 9", "value": 9}, {"description": "Channel 10", "value": 10}, {"description": "Channel 11", "value": 11}, {"description": "Channel 12", "value": 12}, {"description": "Channel 13", "value": 13}, {"description": "Channel 14", "value": 14}, {"description": "Channel 15", "value": 15}, {"description": "Channel 16", "value": 16}, {"description": "Channel 17", "value": 17}, {"description": "Channel 18", "value": 18}]}, {"category": "Standard", "default": 0, "group": "Radio Calibration", "max": 18, "min": 0, "name": "RC_MAP_AUX3", "shortDesc": "AUX3 Passthrough RC channel", "type": "Int32", "values": [{"description": "Unassigned", "value": 0}, {"description": "Channel 1", "value": 1}, {"description": "Channel 2", "value": 2}, {"description": "Channel 3", "value": 3}, {"description": "Channel 4", "value": 4}, {"description": "Channel 5", "value": 5}, {"description": "Channel 6", "value": 6}, {"description": "Channel 7", "value": 7}, {"description": "Channel 8", "value": 8}, {"description": "Channel 9", "value": 9}, {"description": "Channel 10", "value": 10}, {"description": "Channel 11", "value": 11}, {"description": "Channel 12", "value": 12}, {"description": "Channel 13", "value": 13}, {"description": "Channel 14", "value": 14}, {"description": "Channel 15", "value": 15}, {"description": "Channel 16", "value": 16}, {"description": "Channel 17", "value": 17}, {"description": "Channel 18", "value": 18}]}, {"category": "Standard", "default": 0, "group": "Radio Calibration", "max": 18, "min": 0, "name": "RC_MAP_AUX4", "shortDesc": "AUX4 Passthrough RC channel", "type": "Int32", "values": [{"description": "Unassigned", "value": 0}, {"description": "Channel 1", "value": 1}, {"description": "Channel 2", "value": 2}, {"description": "Channel 3", "value": 3}, {"description": "Channel 4", "value": 4}, {"description": "Channel 5", "value": 5}, {"description": "Channel 6", "value": 6}, {"description": "Channel 7", "value": 7}, {"description": "Channel 8", "value": 8}, {"description": "Channel 9", "value": 9}, {"description": "Channel 10", "value": 10}, {"description": "Channel 11", "value": 11}, {"description": "Channel 12", "value": 12}, {"description": "Channel 13", "value": 13}, {"description": "Channel 14", "value": 14}, {"description": "Channel 15", "value": 15}, {"description": "Channel 16", "value": 16}, {"description": "Channel 17", "value": 17}, {"description": "Channel 18", "value": 18}]}, {"category": "Standard", "default": 0, "group": "Radio Calibration", "max": 18, "min": 0, "name": "RC_MAP_AUX5", "shortDesc": "AUX5 Passthrough RC channel", "type": "Int32", "values": [{"description": "Unassigned", "value": 0}, {"description": "Channel 1", "value": 1}, {"description": "Channel 2", "value": 2}, {"description": "Channel 3", "value": 3}, {"description": "Channel 4", "value": 4}, {"description": "Channel 5", "value": 5}, {"description": "Channel 6", "value": 6}, {"description": "Channel 7", "value": 7}, {"description": "Channel 8", "value": 8}, {"description": "Channel 9", "value": 9}, {"description": "Channel 10", "value": 10}, {"description": "Channel 11", "value": 11}, {"description": "Channel 12", "value": 12}, {"description": "Channel 13", "value": 13}, {"description": "Channel 14", "value": 14}, {"description": "Channel 15", "value": 15}, {"description": "Channel 16", "value": 16}, {"description": "Channel 17", "value": 17}, {"description": "Channel 18", "value": 18}]}, {"category": "Standard", "default": 0, "group": "Radio Calibration", "max": 18, "min": 0, "name": "RC_MAP_AUX6", "shortDesc": "AUX6 Passthrough RC channel", "type": "Int32", "values": [{"description": "Unassigned", "value": 0}, {"description": "Channel 1", "value": 1}, {"description": "Channel 2", "value": 2}, {"description": "Channel 3", "value": 3}, {"description": "Channel 4", "value": 4}, {"description": "Channel 5", "value": 5}, {"description": "Channel 6", "value": 6}, {"description": "Channel 7", "value": 7}, {"description": "Channel 8", "value": 8}, {"description": "Channel 9", "value": 9}, {"description": "Channel 10", "value": 10}, {"description": "Channel 11", "value": 11}, {"description": "Channel 12", "value": 12}, {"description": "Channel 13", "value": 13}, {"description": "Channel 14", "value": 14}, {"description": "Channel 15", "value": 15}, {"description": "Channel 16", "value": 16}, {"description": "Channel 17", "value": 17}, {"description": "Channel 18", "value": 18}]}, {"category": "Standard", "default": 0, "group": "Radio Calibration", "max": 18, "min": 0, "name": "RC_MAP_ENG_MOT", "shortDesc": "RC channel to engage the main motor (for helicopters)", "type": "Int32", "values": [{"description": "Unassigned", "value": 0}, {"description": "Channel 1", "value": 1}, {"description": "Channel 2", "value": 2}, {"description": "Channel 3", "value": 3}, {"description": "Channel 4", "value": 4}, {"description": "Channel 5", "value": 5}, {"description": "Channel 6", "value": 6}, {"description": "Channel 7", "value": 7}, {"description": "Channel 8", "value": 8}, {"description": "Channel 9", "value": 9}, {"description": "Channel 10", "value": 10}, {"description": "Channel 11", "value": 11}, {"description": "Channel 12", "value": 12}, {"description": "Channel 13", "value": 13}, {"description": "Channel 14", "value": 14}, {"description": "Channel 15", "value": 15}, {"description": "Channel 16", "value": 16}, {"description": "Channel 17", "value": 17}, {"description": "Channel 18", "value": 18}]}, {"category": "Standard", "default": 0, "group": "Radio Calibration", "longDesc": "Configures which RC channel is used by the receiver to indicate the signal was lost\n(on receivers that use output a fixed signal value to report lost signal).\nIf set to 0, the channel mapped to throttle is used.\n\nUse RC_FAILS_THR to set the threshold indicating lost signal. By default it's below\nthe expected range and hence disabled.\n", "max": 18, "min": 0, "name": "RC_MAP_FAILSAFE", "shortDesc": "Failsafe channel mapping", "type": "Int32", "values": [{"description": "Unassigned", "value": 0}, {"description": "Channel 1", "value": 1}, {"description": "Channel 2", "value": 2}, {"description": "Channel 3", "value": 3}, {"description": "Channel 4", "value": 4}, {"description": "Channel 5", "value": 5}, {"description": "Channel 6", "value": 6}, {"description": "Channel 7", "value": 7}, {"description": "Channel 8", "value": 8}, {"description": "Channel 9", "value": 9}, {"description": "Channel 10", "value": 10}, {"description": "Channel 11", "value": 11}, {"description": "Channel 12", "value": 12}, {"description": "Channel 13", "value": 13}, {"description": "Channel 14", "value": 14}, {"description": "Channel 15", "value": 15}, {"description": "Channel 16", "value": 16}, {"description": "Channel 17", "value": 17}, {"description": "Channel 18", "value": 18}]}, {"category": "Standard", "default": 0, "group": "Radio Calibration", "longDesc": "Can be used for parameter tuning with the RC. This one is further referenced as the 1st parameter channel.\nSet to 0 to deactivate *\n", "max": 18, "min": 0, "name": "RC_MAP_PARAM1", "shortDesc": "PARAM1 tuning channel", "type": "Int32", "values": [{"description": "Unassigned", "value": 0}, {"description": "Channel 1", "value": 1}, {"description": "Channel 2", "value": 2}, {"description": "Channel 3", "value": 3}, {"description": "Channel 4", "value": 4}, {"description": "Channel 5", "value": 5}, {"description": "Channel 6", "value": 6}, {"description": "Channel 7", "value": 7}, {"description": "Channel 8", "value": 8}, {"description": "Channel 9", "value": 9}, {"description": "Channel 10", "value": 10}, {"description": "Channel 11", "value": 11}, {"description": "Channel 12", "value": 12}, {"description": "Channel 13", "value": 13}, {"description": "Channel 14", "value": 14}, {"description": "Channel 15", "value": 15}, {"description": "Channel 16", "value": 16}, {"description": "Channel 17", "value": 17}, {"description": "Channel 18", "value": 18}]}, {"category": "Standard", "default": 0, "group": "Radio Calibration", "longDesc": "Can be used for parameter tuning with the RC. This one is further referenced as the 2nd parameter channel.\nSet to 0 to deactivate *\n", "max": 18, "min": 0, "name": "RC_MAP_PARAM2", "shortDesc": "PARAM2 tuning channel", "type": "Int32", "values": [{"description": "Unassigned", "value": 0}, {"description": "Channel 1", "value": 1}, {"description": "Channel 2", "value": 2}, {"description": "Channel 3", "value": 3}, {"description": "Channel 4", "value": 4}, {"description": "Channel 5", "value": 5}, {"description": "Channel 6", "value": 6}, {"description": "Channel 7", "value": 7}, {"description": "Channel 8", "value": 8}, {"description": "Channel 9", "value": 9}, {"description": "Channel 10", "value": 10}, {"description": "Channel 11", "value": 11}, {"description": "Channel 12", "value": 12}, {"description": "Channel 13", "value": 13}, {"description": "Channel 14", "value": 14}, {"description": "Channel 15", "value": 15}, {"description": "Channel 16", "value": 16}, {"description": "Channel 17", "value": 17}, {"description": "Channel 18", "value": 18}]}, {"category": "Standard", "default": 0, "group": "Radio Calibration", "longDesc": "Can be used for parameter tuning with the RC. This one is further referenced as the 3th parameter channel.\nSet to 0 to deactivate *\n", "max": 18, "min": 0, "name": "RC_MAP_PARAM3", "shortDesc": "PARAM3 tuning channel", "type": "Int32", "values": [{"description": "Unassigned", "value": 0}, {"description": "Channel 1", "value": 1}, {"description": "Channel 2", "value": 2}, {"description": "Channel 3", "value": 3}, {"description": "Channel 4", "value": 4}, {"description": "Channel 5", "value": 5}, {"description": "Channel 6", "value": 6}, {"description": "Channel 7", "value": 7}, {"description": "Channel 8", "value": 8}, {"description": "Channel 9", "value": 9}, {"description": "Channel 10", "value": 10}, {"description": "Channel 11", "value": 11}, {"description": "Channel 12", "value": 12}, {"description": "Channel 13", "value": 13}, {"description": "Channel 14", "value": 14}, {"description": "Channel 15", "value": 15}, {"description": "Channel 16", "value": 16}, {"description": "Channel 17", "value": 17}, {"description": "Channel 18", "value": 18}]}, {"category": "Standard", "default": 0, "group": "Radio Calibration", "longDesc": "The channel index (starting from 1 for channel 1) indicates\nwhich channel should be used for reading pitch inputs from.\nA value of zero indicates the switch is not assigned.\n", "max": 18, "min": 0, "name": "RC_MAP_PITCH", "shortDesc": "Pitch control channel mapping", "type": "Int32", "values": [{"description": "Unassigned", "value": 0}, {"description": "Channel 1", "value": 1}, {"description": "Channel 2", "value": 2}, {"description": "Channel 3", "value": 3}, {"description": "Channel 4", "value": 4}, {"description": "Channel 5", "value": 5}, {"description": "Channel 6", "value": 6}, {"description": "Channel 7", "value": 7}, {"description": "Channel 8", "value": 8}, {"description": "Channel 9", "value": 9}, {"description": "Channel 10", "value": 10}, {"description": "Channel 11", "value": 11}, {"description": "Channel 12", "value": 12}, {"description": "Channel 13", "value": 13}, {"description": "Channel 14", "value": 14}, {"description": "Channel 15", "value": 15}, {"description": "Channel 16", "value": 16}, {"description": "Channel 17", "value": 17}, {"description": "Channel 18", "value": 18}]}, {"category": "Standard", "default": 0, "group": "Radio Calibration", "longDesc": "The channel index (starting from 1 for channel 1) indicates\nwhich channel should be used for reading roll inputs from.\nA value of zero indicates the switch is not assigned.\n", "max": 18, "min": 0, "name": "RC_MAP_ROLL", "shortDesc": "Roll control channel mapping", "type": "Int32", "values": [{"description": "Unassigned", "value": 0}, {"description": "Channel 1", "value": 1}, {"description": "Channel 2", "value": 2}, {"description": "Channel 3", "value": 3}, {"description": "Channel 4", "value": 4}, {"description": "Channel 5", "value": 5}, {"description": "Channel 6", "value": 6}, {"description": "Channel 7", "value": 7}, {"description": "Channel 8", "value": 8}, {"description": "Channel 9", "value": 9}, {"description": "Channel 10", "value": 10}, {"description": "Channel 11", "value": 11}, {"description": "Channel 12", "value": 12}, {"description": "Channel 13", "value": 13}, {"description": "Channel 14", "value": 14}, {"description": "Channel 15", "value": 15}, {"description": "Channel 16", "value": 16}, {"description": "Channel 17", "value": 17}, {"description": "Channel 18", "value": 18}]}, {"category": "Standard", "default": 0, "group": "Radio Calibration", "longDesc": "The channel index (starting from 1 for channel 1) indicates\nwhich channel should be used for reading throttle inputs from.\nA value of zero indicates the switch is not assigned.\n", "max": 18, "min": 0, "name": "RC_MAP_THROTTLE", "shortDesc": "Throttle control channel mapping", "type": "Int32", "values": [{"description": "Unassigned", "value": 0}, {"description": "Channel 1", "value": 1}, {"description": "Channel 2", "value": 2}, {"description": "Channel 3", "value": 3}, {"description": "Channel 4", "value": 4}, {"description": "Channel 5", "value": 5}, {"description": "Channel 6", "value": 6}, {"description": "Channel 7", "value": 7}, {"description": "Channel 8", "value": 8}, {"description": "Channel 9", "value": 9}, {"description": "Channel 10", "value": 10}, {"description": "Channel 11", "value": 11}, {"description": "Channel 12", "value": 12}, {"description": "Channel 13", "value": 13}, {"description": "Channel 14", "value": 14}, {"description": "Channel 15", "value": 15}, {"description": "Channel 16", "value": 16}, {"description": "Channel 17", "value": 17}, {"description": "Channel 18", "value": 18}]}, {"category": "Standard", "default": 0, "group": "Radio Calibration", "longDesc": "The channel index (starting from 1 for channel 1) indicates\nwhich channel should be used for reading yaw inputs from.\nA value of zero indicates the switch is not assigned.\n", "max": 18, "min": 0, "name": "RC_MAP_YAW", "shortDesc": "Yaw control channel mapping", "type": "Int32", "values": [{"description": "Unassigned", "value": 0}, {"description": "Channel 1", "value": 1}, {"description": "Channel 2", "value": 2}, {"description": "Channel 3", "value": 3}, {"description": "Channel 4", "value": 4}, {"description": "Channel 5", "value": 5}, {"description": "Channel 6", "value": 6}, {"description": "Channel 7", "value": 7}, {"description": "Channel 8", "value": 8}, {"description": "Channel 9", "value": 9}, {"description": "Channel 10", "value": 10}, {"description": "Channel 11", "value": 11}, {"description": "Channel 12", "value": 12}, {"description": "Channel 13", "value": 13}, {"description": "Channel 14", "value": 14}, {"description": "Channel 15", "value": 15}, {"description": "Channel 16", "value": 16}, {"description": "Channel 17", "value": 17}, {"description": "Channel 18", "value": 18}]}, {"category": "Standard", "default": 0, "group": "Radio Calibration", "longDesc": "0: do not read RSSI from input channel\n1-18: read RSSI from specified input channel\n\nSpecify the range for RSSI input with RC_RSSI_PWM_MIN and RC_RSSI_PWM_MAX parameters.\n", "max": 18, "min": 0, "name": "RC_RSSI_PWM_CHAN", "shortDesc": "PWM input channel that provides RSSI", "type": "Int32", "values": [{"description": "Unassigned", "value": 0}, {"description": "Channel 1", "value": 1}, {"description": "Channel 2", "value": 2}, {"description": "Channel 3", "value": 3}, {"description": "Channel 4", "value": 4}, {"description": "Channel 5", "value": 5}, {"description": "Channel 6", "value": 6}, {"description": "Channel 7", "value": 7}, {"description": "Channel 8", "value": 8}, {"description": "Channel 9", "value": 9}, {"description": "Channel 10", "value": 10}, {"description": "Channel 11", "value": 11}, {"description": "Channel 12", "value": 12}, {"description": "Channel 13", "value": 13}, {"description": "Channel 14", "value": 14}, {"description": "Channel 15", "value": 15}, {"description": "Channel 16", "value": 16}, {"description": "Channel 17", "value": 17}, {"description": "Channel 18", "value": 18}]}, {"category": "Standard", "default": 2000, "group": "Radio Calibration", "longDesc": "Only used if RC_RSSI_PWM_CHAN > 0\n", "max": 2000, "min": 0, "name": "RC_RSSI_PWM_MAX", "shortDesc": "Max input value for RSSI reading", "type": "Int32"}, {"category": "Standard", "default": 1000, "group": "Radio Calibration", "longDesc": "Only used if RC_RSSI_PWM_CHAN > 0\n", "max": 2000, "min": 0, "name": "RC_RSSI_PWM_MIN", "shortDesc": "Min input value for RSSI reading", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Radio Calibration", "increment": 0.01, "longDesc": "The trim value is the actuator control value the system needs\nfor straight and level flight.\n", "max": 0.5, "min": -0.5, "name": "TRIM_PITCH", "shortDesc": "Pitch trim", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Radio Calibration", "increment": 0.01, "longDesc": "The trim value is the actuator control value the system needs\nfor straight and level flight.\n", "max": 0.5, "min": -0.5, "name": "TRIM_ROLL", "shortDesc": "Roll trim", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Radio Calibration", "increment": 0.01, "longDesc": "The trim value is the actuator control value the system needs\nfor straight and level flight.\n", "max": 0.5, "min": -0.5, "name": "TRIM_YAW", "shortDesc": "Yaw trim", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.75, "group": "Radio Switches", "longDesc": "0-1 indicate where in the full channel range the threshold sits\n0 : min\n1 : max\nsign indicates polarity of comparison\npositive : true when channel>th\nnegative : true when channelth\nnegative : true when channelth\nnegative : true when channelth\nnegative : true when channelth\nnegative : true when channelth\nnegative : true when channelth\nnegative : true when channelth\nnegative : true when channelth\nnegative : true when channelth\nnegative : true when channel The rover starts to cut the corner earlier.\n\n", "max": 100.0, "min": 1.0, "name": "RA_ACC_RAD_GAIN", "shortDesc": "Tuning parameter for corner cutting", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": -1.0, "group": "Rover Ackermann", "increment": 0.01, "longDesc": "The controller scales the acceptance radius based on the angle between\nthe previous, current and next waypoint.\nHigher value -> smoother trajectory at the cost of how close the rover gets\nto the waypoint (Set to -1 to disable corner cutting).\n\n", "max": 100.0, "min": -1.0, "name": "RA_ACC_RAD_MAX", "shortDesc": "Maximum acceptance radius for the waypoints", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Rover Ackermann", "increment": 0.01, "max": 1.5708, "min": 0.0, "name": "RA_MAX_STR_ANG", "shortDesc": "Maximum steering angle", "type": "Float", "units": "rad"}, {"category": "Standard", "decimalPlaces": 2, "default": -1.0, "group": "Rover Ackermann", "increment": 0.01, "longDesc": "Set to -1 to disable.\n", "max": 1000.0, "min": -1.0, "name": "RA_STR_RATE_LIM", "shortDesc": "Steering rate limit", "type": "Float", "units": "deg/s"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Rover Ackermann", "increment": 0.001, "longDesc": "Distance from the front to the rear axle.\n", "max": 100.0, "min": 0.0, "name": "RA_WHEEL_BASE", "shortDesc": "Wheel base", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Rover Attitude Control", "increment": 0.01, "max": 100.0, "min": 0.0, "name": "RO_YAW_P", "shortDesc": "Proportional gain for closed loop yaw controller", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.174533, "group": "Rover Differential", "increment": 0.01, "longDesc": "This threshold is used for the state machine to switch from driving to turning based on the\nerror between the desired and actual yaw. It is also used as the threshold whether the rover should come\nto a smooth stop at the next waypoint. This slow down effect is active if the angle between the\nline segments from prevWP-currWP and currWP-nextWP is smaller then 180 - RD_TRANS_DRV_TRN.\n\n", "max": 3.14159, "min": 0.001, "name": "RD_TRANS_DRV_TRN", "shortDesc": "Yaw error threshhold to switch from driving to spot turning", "type": "Float", "units": "rad"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0872665, "group": "Rover Differential", "increment": 0.01, "longDesc": "This threshold is used for the state machine to switch from turning to driving based on the\nerror between the desired and actual yaw.\n\n", "max": 3.14159, "min": 0.001, "name": "RD_TRANS_TRN_DRV", "shortDesc": "Yaw error threshhold to switch from spot turning to driving", "type": "Float", "units": "rad"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Rover Differential", "increment": 0.001, "longDesc": "Distance from the center of the right wheel to the center of the left wheel.\n", "max": 100.0, "min": 0.0, "name": "RD_WHEEL_TRACK", "shortDesc": "Wheel track", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 3, "default": 1.0, "group": "Rover Differential", "increment": 0.01, "longDesc": "Assign value <1.0 to decrease stick response for yaw control.\n", "max": 1.0, "min": 0.1, "name": "RD_YAW_STK_GAIN", "shortDesc": "Yaw stick gain for Manual mode", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.17, "group": "Rover Mecanum", "increment": 0.01, "longDesc": "Threshold for the angle between the active cruise direction and the cruise direction given\nby the stick inputs.\nThis can be understood as a deadzone for the combined stick inputs for forward/backwards\nand lateral speed which defines a course direction.\n\n", "max": 3.14, "min": 0.0, "name": "RM_COURSE_CTL_TH", "shortDesc": "Threshold to update course control in manual position mode", "type": "Float", "units": "rad"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Rover Mecanum", "increment": 0.001, "longDesc": "Distance from the center of the right wheel to the center of the left wheel.\n", "max": 100.0, "min": 0.0, "name": "RM_WHEEL_TRACK", "shortDesc": "Wheel track", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 3, "default": 1.0, "group": "Rover Mecanum", "increment": 0.01, "longDesc": "Assign value <1.0 to decrease stick response for yaw control.\n", "max": 1.0, "min": 0.1, "name": "RM_YAW_STK_GAIN", "shortDesc": "Yaw stick gain for Manual mode", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": -1.0, "group": "Rover Rate Control", "increment": 0.01, "longDesc": "Used to cap how quickly the magnitude of yaw rate setpoints can increase.\nSet to -1 to disable.\n", "max": 10000.0, "min": -1.0, "name": "RO_YAW_ACCEL_LIM", "shortDesc": "Yaw acceleration limit", "type": "Float", "units": "deg/s^2"}, {"category": "Standard", "decimalPlaces": 2, "default": -1.0, "group": "Rover Rate Control", "increment": 0.01, "longDesc": "Used to cap how quickly the magnitude of yaw rate setpoints can decrease.\nSet to -1 to disable.\n", "max": 10000.0, "min": -1.0, "name": "RO_YAW_DECEL_LIM", "shortDesc": "Yaw deceleration limit", "type": "Float", "units": "deg/s^2"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Rover Rate Control", "longDesc": "Exponential factor for tuning the input curve shape.\n\n0 Purely linear input curve\n1 Purely cubic input curve\n", "max": 1.0, "min": 0.0, "name": "RO_YAW_EXPO", "shortDesc": "Yaw rate expo factor", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "Rover Rate Control", "increment": 0.01, "longDesc": "Multiplicative correction factor for the feedforward mapping of the yaw rate controller.\nIncrease this value (x > 1) if the measured yaw rate is lower than the setpoint, decrease (0 < x < 1) otherwise.\nNote: Tuning this is particularly useful for skid-steered rovers, or rovers with misaligned wheels/steering axes\nthat cause a lot of friction when turning.\n", "max": 10000.0, "min": 0.01, "name": "RO_YAW_RATE_CORR", "shortDesc": "Yaw rate correction factor", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Rover Rate Control", "increment": 0.01, "max": 100.0, "min": 0.0, "name": "RO_YAW_RATE_I", "shortDesc": "Integral gain for closed loop yaw rate controller", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Rover Rate Control", "increment": 0.01, "longDesc": "Used to cap yaw rate setpoints and map controller inputs to yaw rate setpoints\nin Acro, Stabilized and Position mode.\n", "max": 10000.0, "min": 0.0, "name": "RO_YAW_RATE_LIM", "shortDesc": "Yaw rate limit", "type": "Float", "units": "deg/s"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Rover Rate Control", "increment": 0.01, "max": 100.0, "min": 0.0, "name": "RO_YAW_RATE_P", "shortDesc": "Proportional gain for closed loop yaw rate controller", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 3.0, "group": "Rover Rate Control", "increment": 0.01, "longDesc": "The minimum threshold for the yaw rate measurement not to be interpreted as zero.\n", "max": 100.0, "min": 0.0, "name": "RO_YAW_RATE_TH", "shortDesc": "Yaw rate measurement threshold", "type": "Float", "units": "deg/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.1, "group": "Rover Rate Control", "increment": 0.01, "longDesc": "Percentage of stick input range that will be interpreted as zero around the stick centered value.\n", "max": 1.0, "min": 0.0, "name": "RO_YAW_STICK_DZ", "shortDesc": "Yaw stick deadzone", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Rover Rate Control", "longDesc": "\"Superexponential\" factor for refining the input curve shape tuned using RO_YAW_EXPO.\n\n0 Pure Expo function\n0.7 reasonable shape enhancement for intuitive stick feel\n0.95 very strong bent input curve only near maxima have effect\n", "max": 0.95, "min": 0.0, "name": "RO_YAW_SUPEXPO", "shortDesc": "Yaw rate super expo factor", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": -1.0, "group": "Rover Velocity Control", "increment": 0.01, "longDesc": "Set to -1 to disable.\nFor mecanum rovers this limit is used for longitudinal and lateral acceleration.\n", "max": 100.0, "min": -1.0, "name": "RO_ACCEL_LIM", "shortDesc": "Acceleration limit", "type": "Float", "units": "m/s^2"}, {"category": "Standard", "decimalPlaces": 2, "default": -1.0, "group": "Rover Velocity Control", "increment": 0.01, "longDesc": "Set to -1 to disable.\nNote that if it is disabled the rover will not slow down when approaching waypoints in auto modes.\nFor mecanum rovers this limit is used for longitudinal and lateral deceleration.\n", "max": 100.0, "min": -1.0, "name": "RO_DECEL_LIM", "shortDesc": "Deceleration limit", "type": "Float", "units": "m/s^2"}, {"category": "Standard", "decimalPlaces": 2, "default": -1.0, "group": "Rover Velocity Control", "increment": 0.01, "longDesc": "Set to -1 to disable.\nNote that if it is disabled the rover will not slow down when approaching waypoints in auto modes.\nFor mecanum rovers this limit is used for longitudinal and lateral jerk.\n", "max": 100.0, "min": -1.0, "name": "RO_JERK_LIM", "shortDesc": "Jerk limit", "type": "Float", "units": "m/s^3"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Rover Velocity Control", "increment": 0.01, "longDesc": "Used to linearly map speeds [m/s] to throttle values [-1. 1].\n", "max": 100.0, "min": 0.0, "name": "RO_MAX_THR_SPEED", "shortDesc": "Speed the rover drives at maximum throttle", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Rover Velocity Control", "increment": 0.001, "max": 100.0, "min": 0.0, "name": "RO_SPEED_I", "shortDesc": "Integral gain for ground speed controller", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": -1.0, "group": "Rover Velocity Control", "increment": 0.01, "longDesc": "Used to cap speed setpoints and map controller inputs to speed setpoints in Position mode.\n", "max": 100.0, "min": -1.0, "name": "RO_SPEED_LIM", "shortDesc": "Speed limit", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Rover Velocity Control", "increment": 0.01, "max": 100.0, "min": 0.0, "name": "RO_SPEED_P", "shortDesc": "Proportional gain for ground speed controller", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": -1.0, "group": "Rover Velocity Control", "increment": 0.01, "longDesc": "```\nReduced_speed = RO_MAX_THR_SPEED * (1 - normalized_course_error * RO_SPEED_RED)\n```\nThe normalized course error is the angle between the current course and the bearing setpoint\ninterpolated from [0, 180] -> [0, 1].\nHigher value -> More speed reduction.\nNote: This is also used to calculate the speed at which the vehicle arrives at a waypoint in auto modes.\nSet to -1 to disable bearing error based speed reduction.\n", "max": 100.0, "min": -1.0, "name": "RO_SPEED_RED", "shortDesc": "Tuning parameter for the speed reduction based on the course error", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.1, "group": "Rover Velocity Control", "increment": 0.01, "longDesc": "Set to -1 to disable.\nThe minimum threshold for the speed measurement not to be interpreted as zero.\n", "max": 100.0, "min": 0.0, "name": "RO_SPEED_TH", "shortDesc": "Speed measurement threshold", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "Runway Takeoff", "increment": 0.01, "max": 1.0, "min": 0.0, "name": "RWTO_MAX_THR", "shortDesc": "Throttle during runway takeoff", "type": "Float", "units": "norm"}, {"category": "Standard", "default": 1, "group": "Runway Takeoff", "longDesc": "Enable use of yaw stick for nudging the wheel during runway ground roll\n\nThis is useful when map, GNSS, or yaw errors on ground are misaligned with what the operator intends for takeoff course.\nParticularly useful for skinny runways or if the wheel servo is a bit off trim.\n", "name": "RWTO_NUDGE", "shortDesc": "Enable yaw stick nudging during runway ground roll", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "Runway Takeoff", "increment": 0.5, "longDesc": "Pitch setpoint during taxi / before takeoff rotation airspeed is reached\n\nA taildragger with steerable wheel might need to pitch up\na little to keep its wheel on the ground before airspeed\nto takeoff is reached.\n", "max": 20.0, "min": -10.0, "name": "RWTO_PSP", "shortDesc": "Pitch setpoint during taxi / before rotation", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 2, "default": 2.0, "group": "Runway Takeoff", "increment": 0.1, "max": 15.0, "min": 1.0, "name": "RWTO_RAMP_TIME", "shortDesc": "Throttle ramp up time for runway takeoff", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 1, "default": -1.0, "group": "Runway Takeoff", "increment": 0.1, "longDesc": "The calibrated airspeed threshold during the takeoff ground roll when the plane should start rotating (pitching up).\nMust be less than the takeoff airspeed, will otherwise be capped at the takeoff airspeed (see FW_TKO_AIRSPD).\n\nIf set <= 0.0, defaults to 0.9 * takeoff airspeed (see FW_TKO_AIRSPD)\n", "min": -1.0, "name": "RWTO_ROT_AIRSPD", "shortDesc": "Takeoff rotation airspeed", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 1.0, "group": "Runway Takeoff", "increment": 0.1, "longDesc": "This is the time desired to linearly ramp in takeoff pitch constraints during the takeoff rotation\n", "min": 0.1, "name": "RWTO_ROT_TIME", "shortDesc": "Takeoff rotation time", "type": "Float", "units": "s"}, {"category": "Standard", "default": 0, "group": "Runway Takeoff", "name": "RWTO_TKOFF", "shortDesc": "Runway takeoff with landing gear", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"bitmask": [{"description": "SD card logging", "index": 0}, {"description": "Mavlink logging", "index": 1}], "category": "Standard", "default": 3, "group": "SD Logging", "longDesc": "If no logging is set the logger will not be started. Set bits true to enable: 0: SD card logging 1: Mavlink logging\n", "max": 3, "min": 0, "name": "SDLOG_BACKEND", "rebootRequired": true, "shortDesc": "Logging Backend (integer bitmask)", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "SD Logging", "longDesc": "When enabled, logging will not start from boot if battery power is not detected (e.g. powered via USB on a test bench). This prevents extraneous flight logs from being created during bench testing. Note that this only applies to log-from-boot modes. This has no effect on arm-based modes.\n", "name": "SDLOG_BOOT_BAT", "shortDesc": "Battery-only Logging", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 0, "group": "SD Logging", "longDesc": "If greater than 0, the oldest log directories are deleted at log start to keep the total directory count at or below this value. This cleanup is orthogonal to the free-space cleanup driven by SDLOG_ROTATE and SDLOG_MAX_SIZE, and is useful for capping log usage by count independent of available disk size (e.g. in SITL). A value of 0 disables this count-based cleanup.\n", "max": 1000, "min": 0, "name": "SDLOG_DIRS_MAX", "rebootRequired": true, "shortDesc": "Maximum number of log directories to keep", "type": "Int32"}, {"category": "Standard", "default": 1024, "group": "SD Logging", "longDesc": "Maximum size of a single log file in mebibytes (1 MiB = 1024 * 1024 bytes). When reached, the log file is closed and a new one is started. This value is also added to the cleanup threshold (see SDLOG_ROTATE) to reserve headroom for the next log file. A value of 0 disables both file rotation and the cleanup reservation. Must stay below the FAT32 file size limit of 4 GiB.\n", "max": 4095, "min": 0, "name": "SDLOG_MAX_SIZE", "rebootRequired": true, "shortDesc": "Maximum log file size", "type": "Int32", "units": "MiB"}, {"category": "Standard", "default": 0, "group": "SD Logging", "longDesc": "If enabled, a small additional \"mission\" log file will be written to the SD card. The log contains just those messages that are useful for tasks like generating flight statistics and geotagging. The different modes can be used to further reduce the logged data (and thus the log file size). For example, choose geotagging mode to only log data required for geotagging. Note that the normal/full log is still created, and contains all the data in the mission log (and more).\n", "name": "SDLOG_MISSION", "rebootRequired": true, "shortDesc": "Mission Log", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "All mission messages", "value": 1}, {"description": "Geotagging messages", "value": 2}]}, {"category": "Standard", "default": 0, "group": "SD Logging", "longDesc": "Determines when to start and stop logging. By default, logging is started when arming the system, and stopped when disarming. Note: The logging start/end points that can be configured here only apply to SD logging. The mavlink backend is started/stopped independently of these points.\n", "name": "SDLOG_MODE", "rebootRequired": true, "shortDesc": "Logging Mode", "type": "Int32", "values": [{"description": "when armed until disarm (default)", "value": 0}, {"description": "from boot until disarm", "value": 1}, {"description": "from boot until shutdown", "value": 2}, {"description": "while manual input AUX1 >30%", "value": 3}, {"description": "from 1st armed until shutdown", "value": 4}]}, {"bitmask": [{"description": "Default set (general log analysis)", "index": 0}, {"description": "Estimator replay (EKF2)", "index": 1}, {"description": "Thermal calibration", "index": 2}, {"description": "System identification", "index": 3}, {"description": "High rate", "index": 4}, {"description": "Debug", "index": 5}, {"description": "Sensor comparison", "index": 6}, {"description": "Computer Vision and Avoidance", "index": 7}, {"description": "Raw FIFO high-rate IMU (Gyro)", "index": 8}, {"description": "Raw FIFO high-rate IMU (Accel)", "index": 9}, {"description": "Mavlink tunnel message logging", "index": 10}, {"description": "High rate sensors", "index": 11}], "category": "Standard", "default": 1, "group": "SD Logging", "longDesc": "This integer bitmask controls the set and rates of logged topics. The default allows for general log analysis while keeping the log file size reasonably small. Enabling multiple sets leads to higher bandwidth requirements and larger log files. Set bits true to enable: 0 : Default set (used for general log analysis) 1 : Full rate estimator (EKF2) replay topics 2 : Topics for thermal calibration (high rate raw IMU and Baro sensor data) 3 : Topics for system identification (high rate actuator control and IMU data) 4 : Full rates for analysis of fast maneuvers (RC, attitude, rates and actuators) 5 : Debugging topics (debug_*.msg topics, for custom code) 6 : Topics for sensor comparison (low rate raw IMU, Baro and magnetometer data) 7 : Topics for computer vision and collision prevention 8 : Raw FIFO high-rate IMU (Gyro) 9 : Raw FIFO high-rate IMU (Accel) 10: Logging of mavlink tunnel message (useful for payload communication debugging)\n", "max": 4095, "min": 0, "name": "SDLOG_PROFILE", "rebootRequired": true, "shortDesc": "Logging topic profile (integer bitmask)", "type": "Int32"}, {"category": "Standard", "default": 90, "group": "SD Logging", "longDesc": "Maximum percentage of disk space that logs may occupy during operation, including while writing a new log file. For example, a value of 90 means at least 10% of disk is always kept free, even while writing. A value of 100 lets logs fill the disk completely. A value of 0 disables space-based cleanup entirely. At log start, oldest logs are deleted as needed to maintain this guarantee, accounting for the next file write of up to SDLOG_MAX_SIZE. Cleanup always happens at log start (not boot) so logs can be downloaded via FTP before deletion.\n", "max": 100, "min": 0, "name": "SDLOG_ROTATE", "rebootRequired": true, "shortDesc": "Maximum disk usage percentage", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "SD Logging", "longDesc": "the difference in hours and minutes from Coordinated Universal Time (UTC) for a your place and date. for example, In case of South Korea(UTC+09:00), UTC offset is 540 min (9*60) refer to https://en.wikipedia.org/wiki/List_of_UTC_time_offsets\n", "max": 1000, "min": -1000, "name": "SDLOG_UTC_OFFSET", "shortDesc": "UTC offset (unit: min)", "type": "Int32", "units": "min"}, {"category": "Standard", "default": 1, "group": "SD Logging", "longDesc": "If set to 1, add an ID to the log, which uniquely identifies the vehicle\n", "name": "SDLOG_UUID", "shortDesc": "Log UUID", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 60.0, "group": "SITL", "increment": 1.0, "longDesc": "Time in seconds for the simulated battery to drain from 100% to 0% while armed. Set to 0 to disable the battery simulator entirely (useful when battery state is provided externally, e.g. via MAVLink).\n", "min": 0.0, "name": "SIM_BAT_DRAIN", "shortDesc": "Simulated battery full-discharge time", "type": "Float", "units": "s"}, {"category": "Standard", "default": 50.0, "group": "SITL", "increment": 0.1, "longDesc": "Can be used to alter the battery level during SITL- or HITL-simulation on the fly.\nParticularly useful for testing different low-battery behaviour.\n", "max": 100.0, "min": 0.0, "name": "SIM_BAT_MIN_PCT", "shortDesc": "Simulator Battery minimal percentage", "type": "Float", "units": "%"}, {"category": "System", "decimalPlaces": 3, "default": 0, "group": "Sensor Calibration", "longDesc": "Device ID of the accelerometer this calibration applies to.\n", "name": "CAL_ACC0_ID", "shortDesc": "Accelerometer 0 calibration device ID", "type": "Int32"}, {"category": "System", "decimalPlaces": 3, "default": -1, "group": "Sensor Calibration", "name": "CAL_ACC0_PRIO", "shortDesc": "Accelerometer 0 priority", "type": "Int32", "values": [{"description": "Uninitialized", "value": -1}, {"description": "Disabled", "value": 0}, {"description": "Min", "value": 1}, {"description": "Low", "value": 25}, {"description": "Medium (Default)", "value": 50}, {"description": "High", "value": 75}, {"description": "Max", "value": 100}]}, {"category": "System", "default": -1, "group": "Sensor Calibration", "longDesc": "An internal sensor will force a value of -1, so a GCS should only attempt to configure the rotation if the value is greater than or equal to zero.\n\n", "max": 40, "min": -1, "name": "CAL_ACC0_ROT", "shortDesc": "Accelerometer 0 rotation relative to airframe", "type": "Int32", "values": [{"description": "Internal", "value": -1}, {"description": "No rotation", "value": 0}, {"description": "Yaw 45\u00b0", "value": 1}, {"description": "Yaw 90\u00b0", "value": 2}, {"description": "Yaw 135\u00b0", "value": 3}, {"description": "Yaw 180\u00b0", "value": 4}, {"description": "Yaw 225\u00b0", "value": 5}, {"description": "Yaw 270\u00b0", "value": 6}, {"description": "Yaw 315\u00b0", "value": 7}, {"description": "Roll 180\u00b0", "value": 8}, {"description": "Roll 180\u00b0, Yaw 45\u00b0", "value": 9}, {"description": "Roll 180\u00b0, Yaw 90\u00b0", "value": 10}, {"description": "Roll 180\u00b0, Yaw 135\u00b0", "value": 11}, {"description": "Pitch 180\u00b0", "value": 12}, {"description": "Roll 180\u00b0, Yaw 225\u00b0", "value": 13}, {"description": "Roll 180\u00b0, Yaw 270\u00b0", "value": 14}, {"description": "Roll 180\u00b0, Yaw 315\u00b0", "value": 15}, {"description": "Roll 90\u00b0", "value": 16}, {"description": "Roll 90\u00b0, Yaw 45\u00b0", "value": 17}, {"description": "Roll 90\u00b0, Yaw 90\u00b0", "value": 18}, {"description": "Roll 90\u00b0, Yaw 135\u00b0", "value": 19}, {"description": "Roll 270\u00b0", "value": 20}, {"description": "Roll 270\u00b0, Yaw 45\u00b0", "value": 21}, {"description": "Roll 270\u00b0, Yaw 90\u00b0", "value": 22}, {"description": "Roll 270\u00b0, Yaw 135\u00b0", "value": 23}, {"description": "Pitch 90\u00b0", "value": 24}, {"description": "Pitch 270\u00b0", "value": 25}, {"description": "Pitch 180\u00b0, Yaw 90\u00b0", "value": 26}, {"description": "Pitch 180\u00b0, Yaw 270\u00b0", "value": 27}, {"description": "Roll 90\u00b0, Pitch 90\u00b0", "value": 28}, {"description": "Roll 180\u00b0, Pitch 90\u00b0", "value": 29}, {"description": "Roll 270\u00b0, Pitch 90\u00b0", "value": 30}, {"description": "Roll 90\u00b0, Pitch 180\u00b0", "value": 31}, {"description": "Roll 270\u00b0, Pitch 180\u00b0", "value": 32}, {"description": "Roll 90\u00b0, Pitch 270\u00b0", "value": 33}, {"description": "Roll 180\u00b0, Pitch 270\u00b0", "value": 34}, {"description": "Roll 270\u00b0, Pitch 270\u00b0", "value": 35}, {"description": "Roll 90\u00b0, Pitch 180\u00b0, Yaw 90\u00b0", "value": 36}, {"description": "Roll 90\u00b0, Yaw 270\u00b0", "value": 37}, {"description": "Roll 90\u00b0, Pitch 68\u00b0, Yaw 293\u00b0", "value": 38}, {"description": "Pitch 315\u00b0", "value": 39}, {"description": "Roll 90\u00b0, Pitch 315\u00b0", "value": 40}]}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_ACC0_XOFF", "shortDesc": "Accelerometer 0 X-axis offset", "type": "Float", "units": "m/s^2", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, "min": 0.1, "name": "CAL_ACC0_XSCALE", "shortDesc": "Accelerometer 0 X-axis scaling factor", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_ACC0_YOFF", "shortDesc": "Accelerometer 0 Y-axis offset", "type": "Float", "units": "m/s^2", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, "min": 0.1, "name": "CAL_ACC0_YSCALE", "shortDesc": "Accelerometer 0 Y-axis scaling factor", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_ACC0_ZOFF", "shortDesc": "Accelerometer 0 Z-axis offset", "type": "Float", "units": "m/s^2", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, "min": 0.1, "name": "CAL_ACC0_ZSCALE", "shortDesc": "Accelerometer 0 Z-axis scaling factor", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0, "group": "Sensor Calibration", "longDesc": "Device ID of the accelerometer this calibration applies to.\n", "name": "CAL_ACC1_ID", "shortDesc": "Accelerometer 1 calibration device ID", "type": "Int32"}, {"category": "System", "decimalPlaces": 3, "default": -1, "group": "Sensor Calibration", "name": "CAL_ACC1_PRIO", "shortDesc": "Accelerometer 1 priority", "type": "Int32", "values": [{"description": "Uninitialized", "value": -1}, {"description": "Disabled", "value": 0}, {"description": "Min", "value": 1}, {"description": "Low", "value": 25}, {"description": "Medium (Default)", "value": 50}, {"description": "High", "value": 75}, {"description": "Max", "value": 100}]}, {"category": "System", "default": -1, "group": "Sensor Calibration", "longDesc": "An internal sensor will force a value of -1, so a GCS should only attempt to configure the rotation if the value is greater than or equal to zero.\n\n", "max": 40, "min": -1, "name": "CAL_ACC1_ROT", "shortDesc": "Accelerometer 1 rotation relative to airframe", "type": "Int32", "values": [{"description": "Internal", "value": -1}, {"description": "No rotation", "value": 0}, {"description": "Yaw 45\u00b0", "value": 1}, {"description": "Yaw 90\u00b0", "value": 2}, {"description": "Yaw 135\u00b0", "value": 3}, {"description": "Yaw 180\u00b0", "value": 4}, {"description": "Yaw 225\u00b0", "value": 5}, {"description": "Yaw 270\u00b0", "value": 6}, {"description": "Yaw 315\u00b0", "value": 7}, {"description": "Roll 180\u00b0", "value": 8}, {"description": "Roll 180\u00b0, Yaw 45\u00b0", "value": 9}, {"description": "Roll 180\u00b0, Yaw 90\u00b0", "value": 10}, {"description": "Roll 180\u00b0, Yaw 135\u00b0", "value": 11}, {"description": "Pitch 180\u00b0", "value": 12}, {"description": "Roll 180\u00b0, Yaw 225\u00b0", "value": 13}, {"description": "Roll 180\u00b0, Yaw 270\u00b0", "value": 14}, {"description": "Roll 180\u00b0, Yaw 315\u00b0", "value": 15}, {"description": "Roll 90\u00b0", "value": 16}, {"description": "Roll 90\u00b0, Yaw 45\u00b0", "value": 17}, {"description": "Roll 90\u00b0, Yaw 90\u00b0", "value": 18}, {"description": "Roll 90\u00b0, Yaw 135\u00b0", "value": 19}, {"description": "Roll 270\u00b0", "value": 20}, {"description": "Roll 270\u00b0, Yaw 45\u00b0", "value": 21}, {"description": "Roll 270\u00b0, Yaw 90\u00b0", "value": 22}, {"description": "Roll 270\u00b0, Yaw 135\u00b0", "value": 23}, {"description": "Pitch 90\u00b0", "value": 24}, {"description": "Pitch 270\u00b0", "value": 25}, {"description": "Pitch 180\u00b0, Yaw 90\u00b0", "value": 26}, {"description": "Pitch 180\u00b0, Yaw 270\u00b0", "value": 27}, {"description": "Roll 90\u00b0, Pitch 90\u00b0", "value": 28}, {"description": "Roll 180\u00b0, Pitch 90\u00b0", "value": 29}, {"description": "Roll 270\u00b0, Pitch 90\u00b0", "value": 30}, {"description": "Roll 90\u00b0, Pitch 180\u00b0", "value": 31}, {"description": "Roll 270\u00b0, Pitch 180\u00b0", "value": 32}, {"description": "Roll 90\u00b0, Pitch 270\u00b0", "value": 33}, {"description": "Roll 180\u00b0, Pitch 270\u00b0", "value": 34}, {"description": "Roll 270\u00b0, Pitch 270\u00b0", "value": 35}, {"description": "Roll 90\u00b0, Pitch 180\u00b0, Yaw 90\u00b0", "value": 36}, {"description": "Roll 90\u00b0, Yaw 270\u00b0", "value": 37}, {"description": "Roll 90\u00b0, Pitch 68\u00b0, Yaw 293\u00b0", "value": 38}, {"description": "Pitch 315\u00b0", "value": 39}, {"description": "Roll 90\u00b0, Pitch 315\u00b0", "value": 40}]}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_ACC1_XOFF", "shortDesc": "Accelerometer 1 X-axis offset", "type": "Float", "units": "m/s^2", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, "min": 0.1, "name": "CAL_ACC1_XSCALE", "shortDesc": "Accelerometer 1 X-axis scaling factor", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_ACC1_YOFF", "shortDesc": "Accelerometer 1 Y-axis offset", "type": "Float", "units": "m/s^2", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, "min": 0.1, "name": "CAL_ACC1_YSCALE", "shortDesc": "Accelerometer 1 Y-axis scaling factor", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_ACC1_ZOFF", "shortDesc": "Accelerometer 1 Z-axis offset", "type": "Float", "units": "m/s^2", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, "min": 0.1, "name": "CAL_ACC1_ZSCALE", "shortDesc": "Accelerometer 1 Z-axis scaling factor", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0, "group": "Sensor Calibration", "longDesc": "Device ID of the accelerometer this calibration applies to.\n", "name": "CAL_ACC2_ID", "shortDesc": "Accelerometer 2 calibration device ID", "type": "Int32"}, {"category": "System", "decimalPlaces": 3, "default": -1, "group": "Sensor Calibration", "name": "CAL_ACC2_PRIO", "shortDesc": "Accelerometer 2 priority", "type": "Int32", "values": [{"description": "Uninitialized", "value": -1}, {"description": "Disabled", "value": 0}, {"description": "Min", "value": 1}, {"description": "Low", "value": 25}, {"description": "Medium (Default)", "value": 50}, {"description": "High", "value": 75}, {"description": "Max", "value": 100}]}, {"category": "System", "default": -1, "group": "Sensor Calibration", "longDesc": "An internal sensor will force a value of -1, so a GCS should only attempt to configure the rotation if the value is greater than or equal to zero.\n\n", "max": 40, "min": -1, "name": "CAL_ACC2_ROT", "shortDesc": "Accelerometer 2 rotation relative to airframe", "type": "Int32", "values": [{"description": "Internal", "value": -1}, {"description": "No rotation", "value": 0}, {"description": "Yaw 45\u00b0", "value": 1}, {"description": "Yaw 90\u00b0", "value": 2}, {"description": "Yaw 135\u00b0", "value": 3}, {"description": "Yaw 180\u00b0", "value": 4}, {"description": "Yaw 225\u00b0", "value": 5}, {"description": "Yaw 270\u00b0", "value": 6}, {"description": "Yaw 315\u00b0", "value": 7}, {"description": "Roll 180\u00b0", "value": 8}, {"description": "Roll 180\u00b0, Yaw 45\u00b0", "value": 9}, {"description": "Roll 180\u00b0, Yaw 90\u00b0", "value": 10}, {"description": "Roll 180\u00b0, Yaw 135\u00b0", "value": 11}, {"description": "Pitch 180\u00b0", "value": 12}, {"description": "Roll 180\u00b0, Yaw 225\u00b0", "value": 13}, {"description": "Roll 180\u00b0, Yaw 270\u00b0", "value": 14}, {"description": "Roll 180\u00b0, Yaw 315\u00b0", "value": 15}, {"description": "Roll 90\u00b0", "value": 16}, {"description": "Roll 90\u00b0, Yaw 45\u00b0", "value": 17}, {"description": "Roll 90\u00b0, Yaw 90\u00b0", "value": 18}, {"description": "Roll 90\u00b0, Yaw 135\u00b0", "value": 19}, {"description": "Roll 270\u00b0", "value": 20}, {"description": "Roll 270\u00b0, Yaw 45\u00b0", "value": 21}, {"description": "Roll 270\u00b0, Yaw 90\u00b0", "value": 22}, {"description": "Roll 270\u00b0, Yaw 135\u00b0", "value": 23}, {"description": "Pitch 90\u00b0", "value": 24}, {"description": "Pitch 270\u00b0", "value": 25}, {"description": "Pitch 180\u00b0, Yaw 90\u00b0", "value": 26}, {"description": "Pitch 180\u00b0, Yaw 270\u00b0", "value": 27}, {"description": "Roll 90\u00b0, Pitch 90\u00b0", "value": 28}, {"description": "Roll 180\u00b0, Pitch 90\u00b0", "value": 29}, {"description": "Roll 270\u00b0, Pitch 90\u00b0", "value": 30}, {"description": "Roll 90\u00b0, Pitch 180\u00b0", "value": 31}, {"description": "Roll 270\u00b0, Pitch 180\u00b0", "value": 32}, {"description": "Roll 90\u00b0, Pitch 270\u00b0", "value": 33}, {"description": "Roll 180\u00b0, Pitch 270\u00b0", "value": 34}, {"description": "Roll 270\u00b0, Pitch 270\u00b0", "value": 35}, {"description": "Roll 90\u00b0, Pitch 180\u00b0, Yaw 90\u00b0", "value": 36}, {"description": "Roll 90\u00b0, Yaw 270\u00b0", "value": 37}, {"description": "Roll 90\u00b0, Pitch 68\u00b0, Yaw 293\u00b0", "value": 38}, {"description": "Pitch 315\u00b0", "value": 39}, {"description": "Roll 90\u00b0, Pitch 315\u00b0", "value": 40}]}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_ACC2_XOFF", "shortDesc": "Accelerometer 2 X-axis offset", "type": "Float", "units": "m/s^2", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, "min": 0.1, "name": "CAL_ACC2_XSCALE", "shortDesc": "Accelerometer 2 X-axis scaling factor", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_ACC2_YOFF", "shortDesc": "Accelerometer 2 Y-axis offset", "type": "Float", "units": "m/s^2", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, "min": 0.1, "name": "CAL_ACC2_YSCALE", "shortDesc": "Accelerometer 2 Y-axis scaling factor", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_ACC2_ZOFF", "shortDesc": "Accelerometer 2 Z-axis offset", "type": "Float", "units": "m/s^2", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, "min": 0.1, "name": "CAL_ACC2_ZSCALE", "shortDesc": "Accelerometer 2 Z-axis scaling factor", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0, "group": "Sensor Calibration", "longDesc": "Device ID of the accelerometer this calibration applies to.\n", "name": "CAL_ACC3_ID", "shortDesc": "Accelerometer 3 calibration device ID", "type": "Int32"}, {"category": "System", "decimalPlaces": 3, "default": -1, "group": "Sensor Calibration", "name": "CAL_ACC3_PRIO", "shortDesc": "Accelerometer 3 priority", "type": "Int32", "values": [{"description": "Uninitialized", "value": -1}, {"description": "Disabled", "value": 0}, {"description": "Min", "value": 1}, {"description": "Low", "value": 25}, {"description": "Medium (Default)", "value": 50}, {"description": "High", "value": 75}, {"description": "Max", "value": 100}]}, {"category": "System", "default": -1, "group": "Sensor Calibration", "longDesc": "An internal sensor will force a value of -1, so a GCS should only attempt to configure the rotation if the value is greater than or equal to zero.\n\n", "max": 40, "min": -1, "name": "CAL_ACC3_ROT", "shortDesc": "Accelerometer 3 rotation relative to airframe", "type": "Int32", "values": [{"description": "Internal", "value": -1}, {"description": "No rotation", "value": 0}, {"description": "Yaw 45\u00b0", "value": 1}, {"description": "Yaw 90\u00b0", "value": 2}, {"description": "Yaw 135\u00b0", "value": 3}, {"description": "Yaw 180\u00b0", "value": 4}, {"description": "Yaw 225\u00b0", "value": 5}, {"description": "Yaw 270\u00b0", "value": 6}, {"description": "Yaw 315\u00b0", "value": 7}, {"description": "Roll 180\u00b0", "value": 8}, {"description": "Roll 180\u00b0, Yaw 45\u00b0", "value": 9}, {"description": "Roll 180\u00b0, Yaw 90\u00b0", "value": 10}, {"description": "Roll 180\u00b0, Yaw 135\u00b0", "value": 11}, {"description": "Pitch 180\u00b0", "value": 12}, {"description": "Roll 180\u00b0, Yaw 225\u00b0", "value": 13}, {"description": "Roll 180\u00b0, Yaw 270\u00b0", "value": 14}, {"description": "Roll 180\u00b0, Yaw 315\u00b0", "value": 15}, {"description": "Roll 90\u00b0", "value": 16}, {"description": "Roll 90\u00b0, Yaw 45\u00b0", "value": 17}, {"description": "Roll 90\u00b0, Yaw 90\u00b0", "value": 18}, {"description": "Roll 90\u00b0, Yaw 135\u00b0", "value": 19}, {"description": "Roll 270\u00b0", "value": 20}, {"description": "Roll 270\u00b0, Yaw 45\u00b0", "value": 21}, {"description": "Roll 270\u00b0, Yaw 90\u00b0", "value": 22}, {"description": "Roll 270\u00b0, Yaw 135\u00b0", "value": 23}, {"description": "Pitch 90\u00b0", "value": 24}, {"description": "Pitch 270\u00b0", "value": 25}, {"description": "Pitch 180\u00b0, Yaw 90\u00b0", "value": 26}, {"description": "Pitch 180\u00b0, Yaw 270\u00b0", "value": 27}, {"description": "Roll 90\u00b0, Pitch 90\u00b0", "value": 28}, {"description": "Roll 180\u00b0, Pitch 90\u00b0", "value": 29}, {"description": "Roll 270\u00b0, Pitch 90\u00b0", "value": 30}, {"description": "Roll 90\u00b0, Pitch 180\u00b0", "value": 31}, {"description": "Roll 270\u00b0, Pitch 180\u00b0", "value": 32}, {"description": "Roll 90\u00b0, Pitch 270\u00b0", "value": 33}, {"description": "Roll 180\u00b0, Pitch 270\u00b0", "value": 34}, {"description": "Roll 270\u00b0, Pitch 270\u00b0", "value": 35}, {"description": "Roll 90\u00b0, Pitch 180\u00b0, Yaw 90\u00b0", "value": 36}, {"description": "Roll 90\u00b0, Yaw 270\u00b0", "value": 37}, {"description": "Roll 90\u00b0, Pitch 68\u00b0, Yaw 293\u00b0", "value": 38}, {"description": "Pitch 315\u00b0", "value": 39}, {"description": "Roll 90\u00b0, Pitch 315\u00b0", "value": 40}]}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_ACC3_XOFF", "shortDesc": "Accelerometer 3 X-axis offset", "type": "Float", "units": "m/s^2", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, "min": 0.1, "name": "CAL_ACC3_XSCALE", "shortDesc": "Accelerometer 3 X-axis scaling factor", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_ACC3_YOFF", "shortDesc": "Accelerometer 3 Y-axis offset", "type": "Float", "units": "m/s^2", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, "min": 0.1, "name": "CAL_ACC3_YSCALE", "shortDesc": "Accelerometer 3 Y-axis scaling factor", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_ACC3_ZOFF", "shortDesc": "Accelerometer 3 Z-axis offset", "type": "Float", "units": "m/s^2", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, "min": 0.1, "name": "CAL_ACC3_ZSCALE", "shortDesc": "Accelerometer 3 Z-axis scaling factor", "type": "Float", "volatile": true}, {"category": "System", "default": 0, "group": "Sensor Calibration", "longDesc": "Device ID of the barometer this calibration applies to.\n", "name": "CAL_BARO0_ID", "shortDesc": "Barometer 0 calibration device ID", "type": "Int32"}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_BARO0_OFF", "shortDesc": "Barometer 0 offset", "type": "Float", "volatile": true}, {"category": "System", "default": -1, "group": "Sensor Calibration", "name": "CAL_BARO0_PRIO", "shortDesc": "Barometer 0 priority", "type": "Int32", "values": [{"description": "Uninitialized", "value": -1}, {"description": "Disabled", "value": 0}, {"description": "Min", "value": 1}, {"description": "Low", "value": 25}, {"description": "Medium (Default)", "value": 50}, {"description": "High", "value": 75}, {"description": "Max", "value": 100}]}, {"category": "System", "default": 0, "group": "Sensor Calibration", "longDesc": "Device ID of the barometer this calibration applies to.\n", "name": "CAL_BARO1_ID", "shortDesc": "Barometer 1 calibration device ID", "type": "Int32"}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_BARO1_OFF", "shortDesc": "Barometer 1 offset", "type": "Float", "volatile": true}, {"category": "System", "default": -1, "group": "Sensor Calibration", "name": "CAL_BARO1_PRIO", "shortDesc": "Barometer 1 priority", "type": "Int32", "values": [{"description": "Uninitialized", "value": -1}, {"description": "Disabled", "value": 0}, {"description": "Min", "value": 1}, {"description": "Low", "value": 25}, {"description": "Medium (Default)", "value": 50}, {"description": "High", "value": 75}, {"description": "Max", "value": 100}]}, {"category": "System", "default": 0, "group": "Sensor Calibration", "longDesc": "Device ID of the barometer this calibration applies to.\n", "name": "CAL_BARO2_ID", "shortDesc": "Barometer 2 calibration device ID", "type": "Int32"}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_BARO2_OFF", "shortDesc": "Barometer 2 offset", "type": "Float", "volatile": true}, {"category": "System", "default": -1, "group": "Sensor Calibration", "name": "CAL_BARO2_PRIO", "shortDesc": "Barometer 2 priority", "type": "Int32", "values": [{"description": "Uninitialized", "value": -1}, {"description": "Disabled", "value": 0}, {"description": "Min", "value": 1}, {"description": "Low", "value": 25}, {"description": "Medium (Default)", "value": 50}, {"description": "High", "value": 75}, {"description": "Max", "value": 100}]}, {"category": "System", "default": 0, "group": "Sensor Calibration", "longDesc": "Device ID of the barometer this calibration applies to.\n", "name": "CAL_BARO3_ID", "shortDesc": "Barometer 3 calibration device ID", "type": "Int32"}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_BARO3_OFF", "shortDesc": "Barometer 3 offset", "type": "Float", "volatile": true}, {"category": "System", "default": -1, "group": "Sensor Calibration", "name": "CAL_BARO3_PRIO", "shortDesc": "Barometer 3 priority", "type": "Int32", "values": [{"description": "Uninitialized", "value": -1}, {"description": "Disabled", "value": 0}, {"description": "Min", "value": 1}, {"description": "Low", "value": 25}, {"description": "Medium (Default)", "value": 50}, {"description": "High", "value": 75}, {"description": "Max", "value": 100}]}, {"category": "System", "default": 0, "group": "Sensor Calibration", "longDesc": "Device ID of the gyroscope this calibration applies to.\n", "name": "CAL_GYRO0_ID", "shortDesc": "Gyroscope 0 calibration device ID", "type": "Int32"}, {"category": "System", "default": -1, "group": "Sensor Calibration", "name": "CAL_GYRO0_PRIO", "shortDesc": "Gyroscope 0 priority", "type": "Int32", "values": [{"description": "Uninitialized", "value": -1}, {"description": "Disabled", "value": 0}, {"description": "Min", "value": 1}, {"description": "Low", "value": 25}, {"description": "Medium (Default)", "value": 50}, {"description": "High", "value": 75}, {"description": "Max", "value": 100}]}, {"category": "System", "default": -1, "group": "Sensor Calibration", "longDesc": "An internal sensor will force a value of -1, so a GCS should only attempt to configure the rotation if the value is greater than or equal to zero.\n\n", "max": 40, "min": -1, "name": "CAL_GYRO0_ROT", "shortDesc": "Gyroscope 0 rotation relative to airframe", "type": "Int32", "values": [{"description": "Internal", "value": -1}, {"description": "No rotation", "value": 0}, {"description": "Yaw 45\u00b0", "value": 1}, {"description": "Yaw 90\u00b0", "value": 2}, {"description": "Yaw 135\u00b0", "value": 3}, {"description": "Yaw 180\u00b0", "value": 4}, {"description": "Yaw 225\u00b0", "value": 5}, {"description": "Yaw 270\u00b0", "value": 6}, {"description": "Yaw 315\u00b0", "value": 7}, {"description": "Roll 180\u00b0", "value": 8}, {"description": "Roll 180\u00b0, Yaw 45\u00b0", "value": 9}, {"description": "Roll 180\u00b0, Yaw 90\u00b0", "value": 10}, {"description": "Roll 180\u00b0, Yaw 135\u00b0", "value": 11}, {"description": "Pitch 180\u00b0", "value": 12}, {"description": "Roll 180\u00b0, Yaw 225\u00b0", "value": 13}, {"description": "Roll 180\u00b0, Yaw 270\u00b0", "value": 14}, {"description": "Roll 180\u00b0, Yaw 315\u00b0", "value": 15}, {"description": "Roll 90\u00b0", "value": 16}, {"description": "Roll 90\u00b0, Yaw 45\u00b0", "value": 17}, {"description": "Roll 90\u00b0, Yaw 90\u00b0", "value": 18}, {"description": "Roll 90\u00b0, Yaw 135\u00b0", "value": 19}, {"description": "Roll 270\u00b0", "value": 20}, {"description": "Roll 270\u00b0, Yaw 45\u00b0", "value": 21}, {"description": "Roll 270\u00b0, Yaw 90\u00b0", "value": 22}, {"description": "Roll 270\u00b0, Yaw 135\u00b0", "value": 23}, {"description": "Pitch 90\u00b0", "value": 24}, {"description": "Pitch 270\u00b0", "value": 25}, {"description": "Pitch 180\u00b0, Yaw 90\u00b0", "value": 26}, {"description": "Pitch 180\u00b0, Yaw 270\u00b0", "value": 27}, {"description": "Roll 90\u00b0, Pitch 90\u00b0", "value": 28}, {"description": "Roll 180\u00b0, Pitch 90\u00b0", "value": 29}, {"description": "Roll 270\u00b0, Pitch 90\u00b0", "value": 30}, {"description": "Roll 90\u00b0, Pitch 180\u00b0", "value": 31}, {"description": "Roll 270\u00b0, Pitch 180\u00b0", "value": 32}, {"description": "Roll 90\u00b0, Pitch 270\u00b0", "value": 33}, {"description": "Roll 180\u00b0, Pitch 270\u00b0", "value": 34}, {"description": "Roll 270\u00b0, Pitch 270\u00b0", "value": 35}, {"description": "Roll 90\u00b0, Pitch 180\u00b0, Yaw 90\u00b0", "value": 36}, {"description": "Roll 90\u00b0, Yaw 270\u00b0", "value": 37}, {"description": "Roll 90\u00b0, Pitch 68\u00b0, Yaw 293\u00b0", "value": 38}, {"description": "Pitch 315\u00b0", "value": 39}, {"description": "Roll 90\u00b0, Pitch 315\u00b0", "value": 40}]}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_GYRO0_XOFF", "shortDesc": "Gyroscope 0 X-axis offset", "type": "Float", "units": "rad/s", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_GYRO0_YOFF", "shortDesc": "Gyroscope 0 Y-axis offset", "type": "Float", "units": "rad/s", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_GYRO0_ZOFF", "shortDesc": "Gyroscope 0 Z-axis offset", "type": "Float", "units": "rad/s", "volatile": true}, {"category": "System", "default": 0, "group": "Sensor Calibration", "longDesc": "Device ID of the gyroscope this calibration applies to.\n", "name": "CAL_GYRO1_ID", "shortDesc": "Gyroscope 1 calibration device ID", "type": "Int32"}, {"category": "System", "default": -1, "group": "Sensor Calibration", "name": "CAL_GYRO1_PRIO", "shortDesc": "Gyroscope 1 priority", "type": "Int32", "values": [{"description": "Uninitialized", "value": -1}, {"description": "Disabled", "value": 0}, {"description": "Min", "value": 1}, {"description": "Low", "value": 25}, {"description": "Medium (Default)", "value": 50}, {"description": "High", "value": 75}, {"description": "Max", "value": 100}]}, {"category": "System", "default": -1, "group": "Sensor Calibration", "longDesc": "An internal sensor will force a value of -1, so a GCS should only attempt to configure the rotation if the value is greater than or equal to zero.\n\n", "max": 40, "min": -1, "name": "CAL_GYRO1_ROT", "shortDesc": "Gyroscope 1 rotation relative to airframe", "type": "Int32", "values": [{"description": "Internal", "value": -1}, {"description": "No rotation", "value": 0}, {"description": "Yaw 45\u00b0", "value": 1}, {"description": "Yaw 90\u00b0", "value": 2}, {"description": "Yaw 135\u00b0", "value": 3}, {"description": "Yaw 180\u00b0", "value": 4}, {"description": "Yaw 225\u00b0", "value": 5}, {"description": "Yaw 270\u00b0", "value": 6}, {"description": "Yaw 315\u00b0", "value": 7}, {"description": "Roll 180\u00b0", "value": 8}, {"description": "Roll 180\u00b0, Yaw 45\u00b0", "value": 9}, {"description": "Roll 180\u00b0, Yaw 90\u00b0", "value": 10}, {"description": "Roll 180\u00b0, Yaw 135\u00b0", "value": 11}, {"description": "Pitch 180\u00b0", "value": 12}, {"description": "Roll 180\u00b0, Yaw 225\u00b0", "value": 13}, {"description": "Roll 180\u00b0, Yaw 270\u00b0", "value": 14}, {"description": "Roll 180\u00b0, Yaw 315\u00b0", "value": 15}, {"description": "Roll 90\u00b0", "value": 16}, {"description": "Roll 90\u00b0, Yaw 45\u00b0", "value": 17}, {"description": "Roll 90\u00b0, Yaw 90\u00b0", "value": 18}, {"description": "Roll 90\u00b0, Yaw 135\u00b0", "value": 19}, {"description": "Roll 270\u00b0", "value": 20}, {"description": "Roll 270\u00b0, Yaw 45\u00b0", "value": 21}, {"description": "Roll 270\u00b0, Yaw 90\u00b0", "value": 22}, {"description": "Roll 270\u00b0, Yaw 135\u00b0", "value": 23}, {"description": "Pitch 90\u00b0", "value": 24}, {"description": "Pitch 270\u00b0", "value": 25}, {"description": "Pitch 180\u00b0, Yaw 90\u00b0", "value": 26}, {"description": "Pitch 180\u00b0, Yaw 270\u00b0", "value": 27}, {"description": "Roll 90\u00b0, Pitch 90\u00b0", "value": 28}, {"description": "Roll 180\u00b0, Pitch 90\u00b0", "value": 29}, {"description": "Roll 270\u00b0, Pitch 90\u00b0", "value": 30}, {"description": "Roll 90\u00b0, Pitch 180\u00b0", "value": 31}, {"description": "Roll 270\u00b0, Pitch 180\u00b0", "value": 32}, {"description": "Roll 90\u00b0, Pitch 270\u00b0", "value": 33}, {"description": "Roll 180\u00b0, Pitch 270\u00b0", "value": 34}, {"description": "Roll 270\u00b0, Pitch 270\u00b0", "value": 35}, {"description": "Roll 90\u00b0, Pitch 180\u00b0, Yaw 90\u00b0", "value": 36}, {"description": "Roll 90\u00b0, Yaw 270\u00b0", "value": 37}, {"description": "Roll 90\u00b0, Pitch 68\u00b0, Yaw 293\u00b0", "value": 38}, {"description": "Pitch 315\u00b0", "value": 39}, {"description": "Roll 90\u00b0, Pitch 315\u00b0", "value": 40}]}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_GYRO1_XOFF", "shortDesc": "Gyroscope 1 X-axis offset", "type": "Float", "units": "rad/s", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_GYRO1_YOFF", "shortDesc": "Gyroscope 1 Y-axis offset", "type": "Float", "units": "rad/s", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_GYRO1_ZOFF", "shortDesc": "Gyroscope 1 Z-axis offset", "type": "Float", "units": "rad/s", "volatile": true}, {"category": "System", "default": 0, "group": "Sensor Calibration", "longDesc": "Device ID of the gyroscope this calibration applies to.\n", "name": "CAL_GYRO2_ID", "shortDesc": "Gyroscope 2 calibration device ID", "type": "Int32"}, {"category": "System", "default": -1, "group": "Sensor Calibration", "name": "CAL_GYRO2_PRIO", "shortDesc": "Gyroscope 2 priority", "type": "Int32", "values": [{"description": "Uninitialized", "value": -1}, {"description": "Disabled", "value": 0}, {"description": "Min", "value": 1}, {"description": "Low", "value": 25}, {"description": "Medium (Default)", "value": 50}, {"description": "High", "value": 75}, {"description": "Max", "value": 100}]}, {"category": "System", "default": -1, "group": "Sensor Calibration", "longDesc": "An internal sensor will force a value of -1, so a GCS should only attempt to configure the rotation if the value is greater than or equal to zero.\n\n", "max": 40, "min": -1, "name": "CAL_GYRO2_ROT", "shortDesc": "Gyroscope 2 rotation relative to airframe", "type": "Int32", "values": [{"description": "Internal", "value": -1}, {"description": "No rotation", "value": 0}, {"description": "Yaw 45\u00b0", "value": 1}, {"description": "Yaw 90\u00b0", "value": 2}, {"description": "Yaw 135\u00b0", "value": 3}, {"description": "Yaw 180\u00b0", "value": 4}, {"description": "Yaw 225\u00b0", "value": 5}, {"description": "Yaw 270\u00b0", "value": 6}, {"description": "Yaw 315\u00b0", "value": 7}, {"description": "Roll 180\u00b0", "value": 8}, {"description": "Roll 180\u00b0, Yaw 45\u00b0", "value": 9}, {"description": "Roll 180\u00b0, Yaw 90\u00b0", "value": 10}, {"description": "Roll 180\u00b0, Yaw 135\u00b0", "value": 11}, {"description": "Pitch 180\u00b0", "value": 12}, {"description": "Roll 180\u00b0, Yaw 225\u00b0", "value": 13}, {"description": "Roll 180\u00b0, Yaw 270\u00b0", "value": 14}, {"description": "Roll 180\u00b0, Yaw 315\u00b0", "value": 15}, {"description": "Roll 90\u00b0", "value": 16}, {"description": "Roll 90\u00b0, Yaw 45\u00b0", "value": 17}, {"description": "Roll 90\u00b0, Yaw 90\u00b0", "value": 18}, {"description": "Roll 90\u00b0, Yaw 135\u00b0", "value": 19}, {"description": "Roll 270\u00b0", "value": 20}, {"description": "Roll 270\u00b0, Yaw 45\u00b0", "value": 21}, {"description": "Roll 270\u00b0, Yaw 90\u00b0", "value": 22}, {"description": "Roll 270\u00b0, Yaw 135\u00b0", "value": 23}, {"description": "Pitch 90\u00b0", "value": 24}, {"description": "Pitch 270\u00b0", "value": 25}, {"description": "Pitch 180\u00b0, Yaw 90\u00b0", "value": 26}, {"description": "Pitch 180\u00b0, Yaw 270\u00b0", "value": 27}, {"description": "Roll 90\u00b0, Pitch 90\u00b0", "value": 28}, {"description": "Roll 180\u00b0, Pitch 90\u00b0", "value": 29}, {"description": "Roll 270\u00b0, Pitch 90\u00b0", "value": 30}, {"description": "Roll 90\u00b0, Pitch 180\u00b0", "value": 31}, {"description": "Roll 270\u00b0, Pitch 180\u00b0", "value": 32}, {"description": "Roll 90\u00b0, Pitch 270\u00b0", "value": 33}, {"description": "Roll 180\u00b0, Pitch 270\u00b0", "value": 34}, {"description": "Roll 270\u00b0, Pitch 270\u00b0", "value": 35}, {"description": "Roll 90\u00b0, Pitch 180\u00b0, Yaw 90\u00b0", "value": 36}, {"description": "Roll 90\u00b0, Yaw 270\u00b0", "value": 37}, {"description": "Roll 90\u00b0, Pitch 68\u00b0, Yaw 293\u00b0", "value": 38}, {"description": "Pitch 315\u00b0", "value": 39}, {"description": "Roll 90\u00b0, Pitch 315\u00b0", "value": 40}]}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_GYRO2_XOFF", "shortDesc": "Gyroscope 2 X-axis offset", "type": "Float", "units": "rad/s", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_GYRO2_YOFF", "shortDesc": "Gyroscope 2 Y-axis offset", "type": "Float", "units": "rad/s", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_GYRO2_ZOFF", "shortDesc": "Gyroscope 2 Z-axis offset", "type": "Float", "units": "rad/s", "volatile": true}, {"category": "System", "default": 0, "group": "Sensor Calibration", "longDesc": "Device ID of the gyroscope this calibration applies to.\n", "name": "CAL_GYRO3_ID", "shortDesc": "Gyroscope 3 calibration device ID", "type": "Int32"}, {"category": "System", "default": -1, "group": "Sensor Calibration", "name": "CAL_GYRO3_PRIO", "shortDesc": "Gyroscope 3 priority", "type": "Int32", "values": [{"description": "Uninitialized", "value": -1}, {"description": "Disabled", "value": 0}, {"description": "Min", "value": 1}, {"description": "Low", "value": 25}, {"description": "Medium (Default)", "value": 50}, {"description": "High", "value": 75}, {"description": "Max", "value": 100}]}, {"category": "System", "default": -1, "group": "Sensor Calibration", "longDesc": "An internal sensor will force a value of -1, so a GCS should only attempt to configure the rotation if the value is greater than or equal to zero.\n\n", "max": 40, "min": -1, "name": "CAL_GYRO3_ROT", "shortDesc": "Gyroscope 3 rotation relative to airframe", "type": "Int32", "values": [{"description": "Internal", "value": -1}, {"description": "No rotation", "value": 0}, {"description": "Yaw 45\u00b0", "value": 1}, {"description": "Yaw 90\u00b0", "value": 2}, {"description": "Yaw 135\u00b0", "value": 3}, {"description": "Yaw 180\u00b0", "value": 4}, {"description": "Yaw 225\u00b0", "value": 5}, {"description": "Yaw 270\u00b0", "value": 6}, {"description": "Yaw 315\u00b0", "value": 7}, {"description": "Roll 180\u00b0", "value": 8}, {"description": "Roll 180\u00b0, Yaw 45\u00b0", "value": 9}, {"description": "Roll 180\u00b0, Yaw 90\u00b0", "value": 10}, {"description": "Roll 180\u00b0, Yaw 135\u00b0", "value": 11}, {"description": "Pitch 180\u00b0", "value": 12}, {"description": "Roll 180\u00b0, Yaw 225\u00b0", "value": 13}, {"description": "Roll 180\u00b0, Yaw 270\u00b0", "value": 14}, {"description": "Roll 180\u00b0, Yaw 315\u00b0", "value": 15}, {"description": "Roll 90\u00b0", "value": 16}, {"description": "Roll 90\u00b0, Yaw 45\u00b0", "value": 17}, {"description": "Roll 90\u00b0, Yaw 90\u00b0", "value": 18}, {"description": "Roll 90\u00b0, Yaw 135\u00b0", "value": 19}, {"description": "Roll 270\u00b0", "value": 20}, {"description": "Roll 270\u00b0, Yaw 45\u00b0", "value": 21}, {"description": "Roll 270\u00b0, Yaw 90\u00b0", "value": 22}, {"description": "Roll 270\u00b0, Yaw 135\u00b0", "value": 23}, {"description": "Pitch 90\u00b0", "value": 24}, {"description": "Pitch 270\u00b0", "value": 25}, {"description": "Pitch 180\u00b0, Yaw 90\u00b0", "value": 26}, {"description": "Pitch 180\u00b0, Yaw 270\u00b0", "value": 27}, {"description": "Roll 90\u00b0, Pitch 90\u00b0", "value": 28}, {"description": "Roll 180\u00b0, Pitch 90\u00b0", "value": 29}, {"description": "Roll 270\u00b0, Pitch 90\u00b0", "value": 30}, {"description": "Roll 90\u00b0, Pitch 180\u00b0", "value": 31}, {"description": "Roll 270\u00b0, Pitch 180\u00b0", "value": 32}, {"description": "Roll 90\u00b0, Pitch 270\u00b0", "value": 33}, {"description": "Roll 180\u00b0, Pitch 270\u00b0", "value": 34}, {"description": "Roll 270\u00b0, Pitch 270\u00b0", "value": 35}, {"description": "Roll 90\u00b0, Pitch 180\u00b0, Yaw 90\u00b0", "value": 36}, {"description": "Roll 90\u00b0, Yaw 270\u00b0", "value": 37}, {"description": "Roll 90\u00b0, Pitch 68\u00b0, Yaw 293\u00b0", "value": 38}, {"description": "Pitch 315\u00b0", "value": 39}, {"description": "Roll 90\u00b0, Pitch 315\u00b0", "value": 40}]}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_GYRO3_XOFF", "shortDesc": "Gyroscope 3 X-axis offset", "type": "Float", "units": "rad/s", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_GYRO3_YOFF", "shortDesc": "Gyroscope 3 Y-axis offset", "type": "Float", "units": "rad/s", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_GYRO3_ZOFF", "shortDesc": "Gyroscope 3 Z-axis offset", "type": "Float", "units": "rad/s", "volatile": true}, {"category": "System", "default": 0, "group": "Sensor Calibration", "longDesc": "Device ID of the magnetometer this calibration applies to.\n", "name": "CAL_MAG0_ID", "shortDesc": "Magnetometer 0 calibration device ID", "type": "Int32"}, {"category": "System", "default": 0.0, "group": "Sensor Calibration", "longDesc": "Setting this parameter changes CAL_MAG0_ROT to \"Custom Euler Angle\"\n", "max": 180.0, "min": -180.0, "name": "CAL_MAG0_PITCH", "shortDesc": "Magnetometer 0 Custom Euler Pitch Angle", "type": "Float", "units": "deg"}, {"category": "System", "default": -1, "group": "Sensor Calibration", "name": "CAL_MAG0_PRIO", "shortDesc": "Magnetometer 0 priority", "type": "Int32", "values": [{"description": "Uninitialized", "value": -1}, {"description": "Disabled", "value": 0}, {"description": "Min", "value": 1}, {"description": "Low", "value": 25}, {"description": "Medium (Default)", "value": 50}, {"description": "High", "value": 75}, {"description": "Max", "value": 100}]}, {"category": "System", "default": 0.0, "group": "Sensor Calibration", "longDesc": "Setting this parameter changes CAL_MAG0_ROT to \"Custom Euler Angle\"\n", "max": 180.0, "min": -180.0, "name": "CAL_MAG0_ROLL", "shortDesc": "Magnetometer 0 Custom Euler Roll Angle", "type": "Float", "units": "deg"}, {"category": "System", "default": -1, "group": "Sensor Calibration", "longDesc": "An internal sensor will force a value of -1, so a GCS should only attempt to configure the rotation if the value is greater than or equal to zero.\nSet to \"Custom Euler Angle\" to define the rotation using CAL_MAG0_ROLL, CAL_MAG0_PITCH and CAL_MAG0_YAW.\n\n", "max": 100, "min": -1, "name": "CAL_MAG0_ROT", "shortDesc": "Magnetometer 0 rotation relative to airframe", "type": "Int32", "values": [{"description": "Internal", "value": -1}, {"description": "No rotation", "value": 0}, {"description": "Yaw 45\u00b0", "value": 1}, {"description": "Yaw 90\u00b0", "value": 2}, {"description": "Yaw 135\u00b0", "value": 3}, {"description": "Yaw 180\u00b0", "value": 4}, {"description": "Yaw 225\u00b0", "value": 5}, {"description": "Yaw 270\u00b0", "value": 6}, {"description": "Yaw 315\u00b0", "value": 7}, {"description": "Roll 180\u00b0", "value": 8}, {"description": "Roll 180\u00b0, Yaw 45\u00b0", "value": 9}, {"description": "Roll 180\u00b0, Yaw 90\u00b0", "value": 10}, {"description": "Roll 180\u00b0, Yaw 135\u00b0", "value": 11}, {"description": "Pitch 180\u00b0", "value": 12}, {"description": "Roll 180\u00b0, Yaw 225\u00b0", "value": 13}, {"description": "Roll 180\u00b0, Yaw 270\u00b0", "value": 14}, {"description": "Roll 180\u00b0, Yaw 315\u00b0", "value": 15}, {"description": "Roll 90\u00b0", "value": 16}, {"description": "Roll 90\u00b0, Yaw 45\u00b0", "value": 17}, {"description": "Roll 90\u00b0, Yaw 90\u00b0", "value": 18}, {"description": "Roll 90\u00b0, Yaw 135\u00b0", "value": 19}, {"description": "Roll 270\u00b0", "value": 20}, {"description": "Roll 270\u00b0, Yaw 45\u00b0", "value": 21}, {"description": "Roll 270\u00b0, Yaw 90\u00b0", "value": 22}, {"description": "Roll 270\u00b0, Yaw 135\u00b0", "value": 23}, {"description": "Pitch 90\u00b0", "value": 24}, {"description": "Pitch 270\u00b0", "value": 25}, {"description": "Pitch 180\u00b0, Yaw 90\u00b0", "value": 26}, {"description": "Pitch 180\u00b0, Yaw 270\u00b0", "value": 27}, {"description": "Roll 90\u00b0, Pitch 90\u00b0", "value": 28}, {"description": "Roll 180\u00b0, Pitch 90\u00b0", "value": 29}, {"description": "Roll 270\u00b0, Pitch 90\u00b0", "value": 30}, {"description": "Roll 90\u00b0, Pitch 180\u00b0", "value": 31}, {"description": "Roll 270\u00b0, Pitch 180\u00b0", "value": 32}, {"description": "Roll 90\u00b0, Pitch 270\u00b0", "value": 33}, {"description": "Roll 180\u00b0, Pitch 270\u00b0", "value": 34}, {"description": "Roll 270\u00b0, Pitch 270\u00b0", "value": 35}, {"description": "Roll 90\u00b0, Pitch 180\u00b0, Yaw 90\u00b0", "value": 36}, {"description": "Roll 90\u00b0, Yaw 270\u00b0", "value": 37}, {"description": "Roll 90\u00b0, Pitch 68\u00b0, Yaw 293\u00b0", "value": 38}, {"description": "Pitch 315\u00b0", "value": 39}, {"description": "Roll 90\u00b0, Pitch 315\u00b0", "value": 40}, {"description": "Custom Euler Angle", "value": 100}]}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "longDesc": "Coefficient describing linear relationship between\nX component of magnetometer in body frame axis\nand either current or throttle depending on value of CAL_MAG_COMP_TYP.\nUnit for throttle-based compensation is [G] and\nfor current-based compensation [G/kA]\n\n", "name": "CAL_MAG0_XCOMP", "shortDesc": "Magnetometer 0 X Axis throttle compensation", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG0_XODIAG", "shortDesc": "Magnetometer 0 X-axis off diagonal scale factor", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG0_XOFF", "shortDesc": "Magnetometer 0 X-axis offset", "type": "Float", "units": "gauss", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, "min": 0.1, "name": "CAL_MAG0_XSCALE", "shortDesc": "Magnetometer 0 X-axis scaling factor", "type": "Float", "volatile": true}, {"category": "System", "default": 0.0, "group": "Sensor Calibration", "longDesc": "Setting this parameter changes CAL_MAG0_ROT to \"Custom Euler Angle\"\n", "max": 180.0, "min": -180.0, "name": "CAL_MAG0_YAW", "shortDesc": "Magnetometer 0 Custom Euler Yaw Angle", "type": "Float", "units": "deg"}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "longDesc": "Coefficient describing linear relationship between\nY component of magnetometer in body frame axis\nand either current or throttle depending on value of CAL_MAG_COMP_TYP.\nUnit for throttle-based compensation is [G] and\nfor current-based compensation [G/kA]\n\n", "name": "CAL_MAG0_YCOMP", "shortDesc": "Magnetometer 0 Y Axis throttle compensation", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG0_YODIAG", "shortDesc": "Magnetometer 0 Y-axis off diagonal scale factor", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG0_YOFF", "shortDesc": "Magnetometer 0 Y-axis offset", "type": "Float", "units": "gauss", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, "min": 0.1, "name": "CAL_MAG0_YSCALE", "shortDesc": "Magnetometer 0 Y-axis scaling factor", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "longDesc": "Coefficient describing linear relationship between\nZ component of magnetometer in body frame axis\nand either current or throttle depending on value of CAL_MAG_COMP_TYP.\nUnit for throttle-based compensation is [G] and\nfor current-based compensation [G/kA]\n\n", "name": "CAL_MAG0_ZCOMP", "shortDesc": "Magnetometer 0 Z Axis throttle compensation", "type": "Float", "volatile": true}, {"category": "System", "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG0_ZODIAG", "shortDesc": "Magnetometer 0 Z-axis off diagonal scale factor", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG0_ZOFF", "shortDesc": "Magnetometer 0 Z-axis offset", "type": "Float", "units": "gauss", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, "min": 0.1, "name": "CAL_MAG0_ZSCALE", "shortDesc": "Magnetometer 0 Z-axis scaling factor", "type": "Float", "volatile": true}, {"category": "System", "default": 0, "group": "Sensor Calibration", "longDesc": "Device ID of the magnetometer this calibration applies to.\n", "name": "CAL_MAG1_ID", "shortDesc": "Magnetometer 1 calibration device ID", "type": "Int32"}, {"category": "System", "default": 0.0, "group": "Sensor Calibration", "longDesc": "Setting this parameter changes CAL_MAG1_ROT to \"Custom Euler Angle\"\n", "max": 180.0, "min": -180.0, "name": "CAL_MAG1_PITCH", "shortDesc": "Magnetometer 1 Custom Euler Pitch Angle", "type": "Float", "units": "deg"}, {"category": "System", "default": -1, "group": "Sensor Calibration", "name": "CAL_MAG1_PRIO", "shortDesc": "Magnetometer 1 priority", "type": "Int32", "values": [{"description": "Uninitialized", "value": -1}, {"description": "Disabled", "value": 0}, {"description": "Min", "value": 1}, {"description": "Low", "value": 25}, {"description": "Medium (Default)", "value": 50}, {"description": "High", "value": 75}, {"description": "Max", "value": 100}]}, {"category": "System", "default": 0.0, "group": "Sensor Calibration", "longDesc": "Setting this parameter changes CAL_MAG1_ROT to \"Custom Euler Angle\"\n", "max": 180.0, "min": -180.0, "name": "CAL_MAG1_ROLL", "shortDesc": "Magnetometer 1 Custom Euler Roll Angle", "type": "Float", "units": "deg"}, {"category": "System", "default": -1, "group": "Sensor Calibration", "longDesc": "An internal sensor will force a value of -1, so a GCS should only attempt to configure the rotation if the value is greater than or equal to zero.\nSet to \"Custom Euler Angle\" to define the rotation using CAL_MAG1_ROLL, CAL_MAG1_PITCH and CAL_MAG1_YAW.\n\n", "max": 100, "min": -1, "name": "CAL_MAG1_ROT", "shortDesc": "Magnetometer 1 rotation relative to airframe", "type": "Int32", "values": [{"description": "Internal", "value": -1}, {"description": "No rotation", "value": 0}, {"description": "Yaw 45\u00b0", "value": 1}, {"description": "Yaw 90\u00b0", "value": 2}, {"description": "Yaw 135\u00b0", "value": 3}, {"description": "Yaw 180\u00b0", "value": 4}, {"description": "Yaw 225\u00b0", "value": 5}, {"description": "Yaw 270\u00b0", "value": 6}, {"description": "Yaw 315\u00b0", "value": 7}, {"description": "Roll 180\u00b0", "value": 8}, {"description": "Roll 180\u00b0, Yaw 45\u00b0", "value": 9}, {"description": "Roll 180\u00b0, Yaw 90\u00b0", "value": 10}, {"description": "Roll 180\u00b0, Yaw 135\u00b0", "value": 11}, {"description": "Pitch 180\u00b0", "value": 12}, {"description": "Roll 180\u00b0, Yaw 225\u00b0", "value": 13}, {"description": "Roll 180\u00b0, Yaw 270\u00b0", "value": 14}, {"description": "Roll 180\u00b0, Yaw 315\u00b0", "value": 15}, {"description": "Roll 90\u00b0", "value": 16}, {"description": "Roll 90\u00b0, Yaw 45\u00b0", "value": 17}, {"description": "Roll 90\u00b0, Yaw 90\u00b0", "value": 18}, {"description": "Roll 90\u00b0, Yaw 135\u00b0", "value": 19}, {"description": "Roll 270\u00b0", "value": 20}, {"description": "Roll 270\u00b0, Yaw 45\u00b0", "value": 21}, {"description": "Roll 270\u00b0, Yaw 90\u00b0", "value": 22}, {"description": "Roll 270\u00b0, Yaw 135\u00b0", "value": 23}, {"description": "Pitch 90\u00b0", "value": 24}, {"description": "Pitch 270\u00b0", "value": 25}, {"description": "Pitch 180\u00b0, Yaw 90\u00b0", "value": 26}, {"description": "Pitch 180\u00b0, Yaw 270\u00b0", "value": 27}, {"description": "Roll 90\u00b0, Pitch 90\u00b0", "value": 28}, {"description": "Roll 180\u00b0, Pitch 90\u00b0", "value": 29}, {"description": "Roll 270\u00b0, Pitch 90\u00b0", "value": 30}, {"description": "Roll 90\u00b0, Pitch 180\u00b0", "value": 31}, {"description": "Roll 270\u00b0, Pitch 180\u00b0", "value": 32}, {"description": "Roll 90\u00b0, Pitch 270\u00b0", "value": 33}, {"description": "Roll 180\u00b0, Pitch 270\u00b0", "value": 34}, {"description": "Roll 270\u00b0, Pitch 270\u00b0", "value": 35}, {"description": "Roll 90\u00b0, Pitch 180\u00b0, Yaw 90\u00b0", "value": 36}, {"description": "Roll 90\u00b0, Yaw 270\u00b0", "value": 37}, {"description": "Roll 90\u00b0, Pitch 68\u00b0, Yaw 293\u00b0", "value": 38}, {"description": "Pitch 315\u00b0", "value": 39}, {"description": "Roll 90\u00b0, Pitch 315\u00b0", "value": 40}, {"description": "Custom Euler Angle", "value": 100}]}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "longDesc": "Coefficient describing linear relationship between\nX component of magnetometer in body frame axis\nand either current or throttle depending on value of CAL_MAG_COMP_TYP.\nUnit for throttle-based compensation is [G] and\nfor current-based compensation [G/kA]\n\n", "name": "CAL_MAG1_XCOMP", "shortDesc": "Magnetometer 1 X Axis throttle compensation", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG1_XODIAG", "shortDesc": "Magnetometer 1 X-axis off diagonal scale factor", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG1_XOFF", "shortDesc": "Magnetometer 1 X-axis offset", "type": "Float", "units": "gauss", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, "min": 0.1, "name": "CAL_MAG1_XSCALE", "shortDesc": "Magnetometer 1 X-axis scaling factor", "type": "Float", "volatile": true}, {"category": "System", "default": 0.0, "group": "Sensor Calibration", "longDesc": "Setting this parameter changes CAL_MAG1_ROT to \"Custom Euler Angle\"\n", "max": 180.0, "min": -180.0, "name": "CAL_MAG1_YAW", "shortDesc": "Magnetometer 1 Custom Euler Yaw Angle", "type": "Float", "units": "deg"}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "longDesc": "Coefficient describing linear relationship between\nY component of magnetometer in body frame axis\nand either current or throttle depending on value of CAL_MAG_COMP_TYP.\nUnit for throttle-based compensation is [G] and\nfor current-based compensation [G/kA]\n\n", "name": "CAL_MAG1_YCOMP", "shortDesc": "Magnetometer 1 Y Axis throttle compensation", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG1_YODIAG", "shortDesc": "Magnetometer 1 Y-axis off diagonal scale factor", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG1_YOFF", "shortDesc": "Magnetometer 1 Y-axis offset", "type": "Float", "units": "gauss", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, "min": 0.1, "name": "CAL_MAG1_YSCALE", "shortDesc": "Magnetometer 1 Y-axis scaling factor", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "longDesc": "Coefficient describing linear relationship between\nZ component of magnetometer in body frame axis\nand either current or throttle depending on value of CAL_MAG_COMP_TYP.\nUnit for throttle-based compensation is [G] and\nfor current-based compensation [G/kA]\n\n", "name": "CAL_MAG1_ZCOMP", "shortDesc": "Magnetometer 1 Z Axis throttle compensation", "type": "Float", "volatile": true}, {"category": "System", "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG1_ZODIAG", "shortDesc": "Magnetometer 1 Z-axis off diagonal scale factor", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG1_ZOFF", "shortDesc": "Magnetometer 1 Z-axis offset", "type": "Float", "units": "gauss", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, "min": 0.1, "name": "CAL_MAG1_ZSCALE", "shortDesc": "Magnetometer 1 Z-axis scaling factor", "type": "Float", "volatile": true}, {"category": "System", "default": 0, "group": "Sensor Calibration", "longDesc": "Device ID of the magnetometer this calibration applies to.\n", "name": "CAL_MAG2_ID", "shortDesc": "Magnetometer 2 calibration device ID", "type": "Int32"}, {"category": "System", "default": 0.0, "group": "Sensor Calibration", "longDesc": "Setting this parameter changes CAL_MAG2_ROT to \"Custom Euler Angle\"\n", "max": 180.0, "min": -180.0, "name": "CAL_MAG2_PITCH", "shortDesc": "Magnetometer 2 Custom Euler Pitch Angle", "type": "Float", "units": "deg"}, {"category": "System", "default": -1, "group": "Sensor Calibration", "name": "CAL_MAG2_PRIO", "shortDesc": "Magnetometer 2 priority", "type": "Int32", "values": [{"description": "Uninitialized", "value": -1}, {"description": "Disabled", "value": 0}, {"description": "Min", "value": 1}, {"description": "Low", "value": 25}, {"description": "Medium (Default)", "value": 50}, {"description": "High", "value": 75}, {"description": "Max", "value": 100}]}, {"category": "System", "default": 0.0, "group": "Sensor Calibration", "longDesc": "Setting this parameter changes CAL_MAG2_ROT to \"Custom Euler Angle\"\n", "max": 180.0, "min": -180.0, "name": "CAL_MAG2_ROLL", "shortDesc": "Magnetometer 2 Custom Euler Roll Angle", "type": "Float", "units": "deg"}, {"category": "System", "default": -1, "group": "Sensor Calibration", "longDesc": "An internal sensor will force a value of -1, so a GCS should only attempt to configure the rotation if the value is greater than or equal to zero.\nSet to \"Custom Euler Angle\" to define the rotation using CAL_MAG2_ROLL, CAL_MAG2_PITCH and CAL_MAG2_YAW.\n\n", "max": 100, "min": -1, "name": "CAL_MAG2_ROT", "shortDesc": "Magnetometer 2 rotation relative to airframe", "type": "Int32", "values": [{"description": "Internal", "value": -1}, {"description": "No rotation", "value": 0}, {"description": "Yaw 45\u00b0", "value": 1}, {"description": "Yaw 90\u00b0", "value": 2}, {"description": "Yaw 135\u00b0", "value": 3}, {"description": "Yaw 180\u00b0", "value": 4}, {"description": "Yaw 225\u00b0", "value": 5}, {"description": "Yaw 270\u00b0", "value": 6}, {"description": "Yaw 315\u00b0", "value": 7}, {"description": "Roll 180\u00b0", "value": 8}, {"description": "Roll 180\u00b0, Yaw 45\u00b0", "value": 9}, {"description": "Roll 180\u00b0, Yaw 90\u00b0", "value": 10}, {"description": "Roll 180\u00b0, Yaw 135\u00b0", "value": 11}, {"description": "Pitch 180\u00b0", "value": 12}, {"description": "Roll 180\u00b0, Yaw 225\u00b0", "value": 13}, {"description": "Roll 180\u00b0, Yaw 270\u00b0", "value": 14}, {"description": "Roll 180\u00b0, Yaw 315\u00b0", "value": 15}, {"description": "Roll 90\u00b0", "value": 16}, {"description": "Roll 90\u00b0, Yaw 45\u00b0", "value": 17}, {"description": "Roll 90\u00b0, Yaw 90\u00b0", "value": 18}, {"description": "Roll 90\u00b0, Yaw 135\u00b0", "value": 19}, {"description": "Roll 270\u00b0", "value": 20}, {"description": "Roll 270\u00b0, Yaw 45\u00b0", "value": 21}, {"description": "Roll 270\u00b0, Yaw 90\u00b0", "value": 22}, {"description": "Roll 270\u00b0, Yaw 135\u00b0", "value": 23}, {"description": "Pitch 90\u00b0", "value": 24}, {"description": "Pitch 270\u00b0", "value": 25}, {"description": "Pitch 180\u00b0, Yaw 90\u00b0", "value": 26}, {"description": "Pitch 180\u00b0, Yaw 270\u00b0", "value": 27}, {"description": "Roll 90\u00b0, Pitch 90\u00b0", "value": 28}, {"description": "Roll 180\u00b0, Pitch 90\u00b0", "value": 29}, {"description": "Roll 270\u00b0, Pitch 90\u00b0", "value": 30}, {"description": "Roll 90\u00b0, Pitch 180\u00b0", "value": 31}, {"description": "Roll 270\u00b0, Pitch 180\u00b0", "value": 32}, {"description": "Roll 90\u00b0, Pitch 270\u00b0", "value": 33}, {"description": "Roll 180\u00b0, Pitch 270\u00b0", "value": 34}, {"description": "Roll 270\u00b0, Pitch 270\u00b0", "value": 35}, {"description": "Roll 90\u00b0, Pitch 180\u00b0, Yaw 90\u00b0", "value": 36}, {"description": "Roll 90\u00b0, Yaw 270\u00b0", "value": 37}, {"description": "Roll 90\u00b0, Pitch 68\u00b0, Yaw 293\u00b0", "value": 38}, {"description": "Pitch 315\u00b0", "value": 39}, {"description": "Roll 90\u00b0, Pitch 315\u00b0", "value": 40}, {"description": "Custom Euler Angle", "value": 100}]}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "longDesc": "Coefficient describing linear relationship between\nX component of magnetometer in body frame axis\nand either current or throttle depending on value of CAL_MAG_COMP_TYP.\nUnit for throttle-based compensation is [G] and\nfor current-based compensation [G/kA]\n\n", "name": "CAL_MAG2_XCOMP", "shortDesc": "Magnetometer 2 X Axis throttle compensation", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG2_XODIAG", "shortDesc": "Magnetometer 2 X-axis off diagonal scale factor", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG2_XOFF", "shortDesc": "Magnetometer 2 X-axis offset", "type": "Float", "units": "gauss", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, "min": 0.1, "name": "CAL_MAG2_XSCALE", "shortDesc": "Magnetometer 2 X-axis scaling factor", "type": "Float", "volatile": true}, {"category": "System", "default": 0.0, "group": "Sensor Calibration", "longDesc": "Setting this parameter changes CAL_MAG2_ROT to \"Custom Euler Angle\"\n", "max": 180.0, "min": -180.0, "name": "CAL_MAG2_YAW", "shortDesc": "Magnetometer 2 Custom Euler Yaw Angle", "type": "Float", "units": "deg"}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "longDesc": "Coefficient describing linear relationship between\nY component of magnetometer in body frame axis\nand either current or throttle depending on value of CAL_MAG_COMP_TYP.\nUnit for throttle-based compensation is [G] and\nfor current-based compensation [G/kA]\n\n", "name": "CAL_MAG2_YCOMP", "shortDesc": "Magnetometer 2 Y Axis throttle compensation", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG2_YODIAG", "shortDesc": "Magnetometer 2 Y-axis off diagonal scale factor", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG2_YOFF", "shortDesc": "Magnetometer 2 Y-axis offset", "type": "Float", "units": "gauss", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, "min": 0.1, "name": "CAL_MAG2_YSCALE", "shortDesc": "Magnetometer 2 Y-axis scaling factor", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "longDesc": "Coefficient describing linear relationship between\nZ component of magnetometer in body frame axis\nand either current or throttle depending on value of CAL_MAG_COMP_TYP.\nUnit for throttle-based compensation is [G] and\nfor current-based compensation [G/kA]\n\n", "name": "CAL_MAG2_ZCOMP", "shortDesc": "Magnetometer 2 Z Axis throttle compensation", "type": "Float", "volatile": true}, {"category": "System", "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG2_ZODIAG", "shortDesc": "Magnetometer 2 Z-axis off diagonal scale factor", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG2_ZOFF", "shortDesc": "Magnetometer 2 Z-axis offset", "type": "Float", "units": "gauss", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, "min": 0.1, "name": "CAL_MAG2_ZSCALE", "shortDesc": "Magnetometer 2 Z-axis scaling factor", "type": "Float", "volatile": true}, {"category": "System", "default": 0, "group": "Sensor Calibration", "longDesc": "Device ID of the magnetometer this calibration applies to.\n", "name": "CAL_MAG3_ID", "shortDesc": "Magnetometer 3 calibration device ID", "type": "Int32"}, {"category": "System", "default": 0.0, "group": "Sensor Calibration", "longDesc": "Setting this parameter changes CAL_MAG3_ROT to \"Custom Euler Angle\"\n", "max": 180.0, "min": -180.0, "name": "CAL_MAG3_PITCH", "shortDesc": "Magnetometer 3 Custom Euler Pitch Angle", "type": "Float", "units": "deg"}, {"category": "System", "default": -1, "group": "Sensor Calibration", "name": "CAL_MAG3_PRIO", "shortDesc": "Magnetometer 3 priority", "type": "Int32", "values": [{"description": "Uninitialized", "value": -1}, {"description": "Disabled", "value": 0}, {"description": "Min", "value": 1}, {"description": "Low", "value": 25}, {"description": "Medium (Default)", "value": 50}, {"description": "High", "value": 75}, {"description": "Max", "value": 100}]}, {"category": "System", "default": 0.0, "group": "Sensor Calibration", "longDesc": "Setting this parameter changes CAL_MAG3_ROT to \"Custom Euler Angle\"\n", "max": 180.0, "min": -180.0, "name": "CAL_MAG3_ROLL", "shortDesc": "Magnetometer 3 Custom Euler Roll Angle", "type": "Float", "units": "deg"}, {"category": "System", "default": -1, "group": "Sensor Calibration", "longDesc": "An internal sensor will force a value of -1, so a GCS should only attempt to configure the rotation if the value is greater than or equal to zero.\nSet to \"Custom Euler Angle\" to define the rotation using CAL_MAG3_ROLL, CAL_MAG3_PITCH and CAL_MAG3_YAW.\n\n", "max": 100, "min": -1, "name": "CAL_MAG3_ROT", "shortDesc": "Magnetometer 3 rotation relative to airframe", "type": "Int32", "values": [{"description": "Internal", "value": -1}, {"description": "No rotation", "value": 0}, {"description": "Yaw 45\u00b0", "value": 1}, {"description": "Yaw 90\u00b0", "value": 2}, {"description": "Yaw 135\u00b0", "value": 3}, {"description": "Yaw 180\u00b0", "value": 4}, {"description": "Yaw 225\u00b0", "value": 5}, {"description": "Yaw 270\u00b0", "value": 6}, {"description": "Yaw 315\u00b0", "value": 7}, {"description": "Roll 180\u00b0", "value": 8}, {"description": "Roll 180\u00b0, Yaw 45\u00b0", "value": 9}, {"description": "Roll 180\u00b0, Yaw 90\u00b0", "value": 10}, {"description": "Roll 180\u00b0, Yaw 135\u00b0", "value": 11}, {"description": "Pitch 180\u00b0", "value": 12}, {"description": "Roll 180\u00b0, Yaw 225\u00b0", "value": 13}, {"description": "Roll 180\u00b0, Yaw 270\u00b0", "value": 14}, {"description": "Roll 180\u00b0, Yaw 315\u00b0", "value": 15}, {"description": "Roll 90\u00b0", "value": 16}, {"description": "Roll 90\u00b0, Yaw 45\u00b0", "value": 17}, {"description": "Roll 90\u00b0, Yaw 90\u00b0", "value": 18}, {"description": "Roll 90\u00b0, Yaw 135\u00b0", "value": 19}, {"description": "Roll 270\u00b0", "value": 20}, {"description": "Roll 270\u00b0, Yaw 45\u00b0", "value": 21}, {"description": "Roll 270\u00b0, Yaw 90\u00b0", "value": 22}, {"description": "Roll 270\u00b0, Yaw 135\u00b0", "value": 23}, {"description": "Pitch 90\u00b0", "value": 24}, {"description": "Pitch 270\u00b0", "value": 25}, {"description": "Pitch 180\u00b0, Yaw 90\u00b0", "value": 26}, {"description": "Pitch 180\u00b0, Yaw 270\u00b0", "value": 27}, {"description": "Roll 90\u00b0, Pitch 90\u00b0", "value": 28}, {"description": "Roll 180\u00b0, Pitch 90\u00b0", "value": 29}, {"description": "Roll 270\u00b0, Pitch 90\u00b0", "value": 30}, {"description": "Roll 90\u00b0, Pitch 180\u00b0", "value": 31}, {"description": "Roll 270\u00b0, Pitch 180\u00b0", "value": 32}, {"description": "Roll 90\u00b0, Pitch 270\u00b0", "value": 33}, {"description": "Roll 180\u00b0, Pitch 270\u00b0", "value": 34}, {"description": "Roll 270\u00b0, Pitch 270\u00b0", "value": 35}, {"description": "Roll 90\u00b0, Pitch 180\u00b0, Yaw 90\u00b0", "value": 36}, {"description": "Roll 90\u00b0, Yaw 270\u00b0", "value": 37}, {"description": "Roll 90\u00b0, Pitch 68\u00b0, Yaw 293\u00b0", "value": 38}, {"description": "Pitch 315\u00b0", "value": 39}, {"description": "Roll 90\u00b0, Pitch 315\u00b0", "value": 40}, {"description": "Custom Euler Angle", "value": 100}]}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "longDesc": "Coefficient describing linear relationship between\nX component of magnetometer in body frame axis\nand either current or throttle depending on value of CAL_MAG_COMP_TYP.\nUnit for throttle-based compensation is [G] and\nfor current-based compensation [G/kA]\n\n", "name": "CAL_MAG3_XCOMP", "shortDesc": "Magnetometer 3 X Axis throttle compensation", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG3_XODIAG", "shortDesc": "Magnetometer 3 X-axis off diagonal scale factor", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG3_XOFF", "shortDesc": "Magnetometer 3 X-axis offset", "type": "Float", "units": "gauss", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, "min": 0.1, "name": "CAL_MAG3_XSCALE", "shortDesc": "Magnetometer 3 X-axis scaling factor", "type": "Float", "volatile": true}, {"category": "System", "default": 0.0, "group": "Sensor Calibration", "longDesc": "Setting this parameter changes CAL_MAG3_ROT to \"Custom Euler Angle\"\n", "max": 180.0, "min": -180.0, "name": "CAL_MAG3_YAW", "shortDesc": "Magnetometer 3 Custom Euler Yaw Angle", "type": "Float", "units": "deg"}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "longDesc": "Coefficient describing linear relationship between\nY component of magnetometer in body frame axis\nand either current or throttle depending on value of CAL_MAG_COMP_TYP.\nUnit for throttle-based compensation is [G] and\nfor current-based compensation [G/kA]\n\n", "name": "CAL_MAG3_YCOMP", "shortDesc": "Magnetometer 3 Y Axis throttle compensation", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG3_YODIAG", "shortDesc": "Magnetometer 3 Y-axis off diagonal scale factor", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG3_YOFF", "shortDesc": "Magnetometer 3 Y-axis offset", "type": "Float", "units": "gauss", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, "min": 0.1, "name": "CAL_MAG3_YSCALE", "shortDesc": "Magnetometer 3 Y-axis scaling factor", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "longDesc": "Coefficient describing linear relationship between\nZ component of magnetometer in body frame axis\nand either current or throttle depending on value of CAL_MAG_COMP_TYP.\nUnit for throttle-based compensation is [G] and\nfor current-based compensation [G/kA]\n\n", "name": "CAL_MAG3_ZCOMP", "shortDesc": "Magnetometer 3 Z Axis throttle compensation", "type": "Float", "volatile": true}, {"category": "System", "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG3_ZODIAG", "shortDesc": "Magnetometer 3 Z-axis off diagonal scale factor", "type": "Float", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 0.0, "group": "Sensor Calibration", "name": "CAL_MAG3_ZOFF", "shortDesc": "Magnetometer 3 Z-axis offset", "type": "Float", "units": "gauss", "volatile": true}, {"category": "System", "decimalPlaces": 3, "default": 1.0, "group": "Sensor Calibration", "max": 3.0, "min": 0.1, "name": "CAL_MAG3_ZSCALE", "shortDesc": "Magnetometer 3 Z-axis scaling factor", "type": "Float", "volatile": true}, {"category": "System", "default": 0, "group": "Sensor Calibration", "name": "CAL_MAG_COMP_TYP", "shortDesc": "Type of magnetometer compensation", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Throttle-based compensation", "value": 1}, {"description": "Current-based compensation (battery_status instance 0)", "value": 2}, {"description": "Current-based compensation (battery_status instance 1)", "value": 3}]}, {"category": "Standard", "default": 0.0, "group": "Sensor Calibration", "longDesc": "Pick the appropriate scaling from the datasheet.\nthis number defines the (linear) conversion from voltage\nto Pascal (pa). For the MPXV7002DP this is 1000.\n\nNOTE: If the sensor always registers zero, try switching\nthe static and dynamic tubes.\n", "name": "SENS_DPRES_ANSC", "shortDesc": "Differential pressure sensor analog scaling", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Sensor Calibration", "longDesc": "The offset (zero-reading) in Pascal\n", "name": "SENS_DPRES_OFF", "shortDesc": "Differential pressure sensor offset", "type": "Float", "volatile": true}, {"category": "System", "default": 0, "group": "Sensor Calibration", "longDesc": "Reverse the raw measurements of all differential pressure sensors.\nThis can be enabled if the sensors have static and dynamic ports swapped.\n", "name": "SENS_DPRES_REV", "shortDesc": "Reverse differential pressure sensor readings", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 2, "default": 100.0, "group": "Sensor Calibration", "increment": 0.1, "longDesc": "This parameter defines the maximum distance from ground at which the optical flow sensor operates reliably.\nThe height setpoint will be limited to be no greater than this value when the navigation system\nis completely reliant on optical flow data and the height above ground estimate is valid.\nThe sensor may be usable above this height, but accuracy will progressively degrade.\n", "max": 100.0, "min": 1.0, "name": "SENS_FLOW_MAXHGT", "shortDesc": "Maximum height above ground when reliant on optical flow", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 8.0, "group": "Sensor Calibration", "longDesc": "Magnitude of maximum angular flow rate reliably measurable by the optical flow sensor\n\nOptical flow data will not fused by the estimators if the magnitude of the flow rate exceeds this value and\ncontrol loops will be instructed to limit ground speed such that the flow rate produced by movement over ground\nis less than 50% of this value.\n", "min": 1.0, "name": "SENS_FLOW_MAXR", "shortDesc": "Max angular flow rate measurable by sensor", "type": "Float", "units": "rad/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.08, "group": "Sensor Calibration", "increment": 0.1, "longDesc": "This parameter defines the minimum distance from ground at which the optical flow sensor operates reliably.\nThe sensor may be usable below this height, but accuracy will progressively reduce to loss of focus.\n", "max": 1.0, "min": 0.0, "name": "SENS_FLOW_MINHGT", "shortDesc": "Minimum height above ground when reliant on optical flow", "type": "Float", "units": "m"}, {"category": "Standard", "default": 0, "group": "Sensors", "longDesc": "Model with Pitot\nCAL_AIR_TUBED_MM: Not used, 1.5 mm tubes assumed.\nCAL_AIR_TUBELEN: Length of the tubes connecting the pitot to the sensor.\nModel without Pitot (1.5 mm tubes)\nCAL_AIR_TUBED_MM: Not used, 1.5 mm tubes assumed.\nCAL_AIR_TUBELEN: Length of the tubes connecting the pitot to the sensor.\nTube Pressure Drop\nCAL_AIR_TUBED_MM: Diameter in mm of the pitot and tubes, must have the same diameter.\nCAL_AIR_TUBELEN: Length of the tubes connecting the pitot to the sensor and the static + dynamic port length of the pitot.\n", "name": "CAL_AIR_CMODEL", "shortDesc": "Airspeed sensor compensation model for the SDP3x", "type": "Int32", "values": [{"description": "Model with Pitot", "value": 0}, {"description": "Model without Pitot (1.5 mm tubes)", "value": 1}, {"description": "Tube Pressure Drop", "value": 2}]}, {"category": "Standard", "default": 1.5, "group": "Sensors", "longDesc": "Airspeed sensor tube diameter. Only used for the Tube Pressure Drop Compensation\n", "max": 100.0, "min": 1.5, "name": "CAL_AIR_TUBED_MM", "shortDesc": "Airspeed sensor tube diameter", "type": "Float", "units": "mm"}, {"category": "Standard", "default": 0.2, "group": "Sensors", "longDesc": "See the CAL_AIR_CMODEL explanation on how this parameter should be set.\n", "max": 2.0, "min": 0.01, "name": "CAL_AIR_TUBELEN", "shortDesc": "Airspeed sensor tube length", "type": "Float", "units": "m"}, {"category": "Developer", "default": 63, "group": "Sensors", "longDesc": "Use SENS_MAG_SIDES instead\n", "name": "CAL_MAG_SIDES", "shortDesc": "For legacy QGC support only", "type": "Int32"}, {"category": "Standard", "default": 30.0, "group": "Sensors", "longDesc": "The cutoff frequency for the 2nd order butterworth filter on the primary accelerometer.\nThis only affects the signal sent to the controllers, not the estimators. 0 disables the filter.\n", "max": 1000.0, "min": 0.0, "name": "IMU_ACCEL_CUTOFF", "rebootRequired": true, "shortDesc": "Low pass filter cutoff frequency for accel", "type": "Float", "units": "Hz"}, {"category": "Standard", "decimalPlaces": 1, "default": 20.0, "group": "Sensors", "increment": 0.1, "longDesc": "The cutoff frequency for the 2nd order butterworth filter used on\nthe time derivative of the measured angular velocity, also known as\nthe D-term filter in the rate controller. The D-term uses the derivative of\nthe rate and thus is the most susceptible to noise. Therefore, using\na D-term filter allows to increase IMU_GYRO_CUTOFF, which\nleads to reduced control latency and permits to increase the P gains.\n\nA value of 0 disables the filter.\n", "max": 1000.0, "min": 0.0, "name": "IMU_DGYRO_CUTOFF", "rebootRequired": true, "shortDesc": "Cutoff frequency for angular acceleration (D-Term filter)", "type": "Float", "units": "Hz"}, {"category": "Standard", "default": 1, "group": "Sensors", "name": "IMU_GYRO_CAL_EN", "rebootRequired": true, "shortDesc": "IMU gyro auto calibration enable", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 1, "default": 40.0, "group": "Sensors", "increment": 0.1, "longDesc": "The cutoff frequency for the 2nd order butterworth filter on the primary gyro.\nThis only affects the angular velocity sent to the controllers, not the estimators.\nIt applies also to the angular acceleration (D-Term filter), see IMU_DGYRO_CUTOFF.\n\nA value of 0 disables the filter.\n", "max": 1000.0, "min": 0.0, "name": "IMU_GYRO_CUTOFF", "rebootRequired": true, "shortDesc": "Low pass filter cutoff frequency for gyro", "type": "Float", "units": "Hz"}, {"category": "Standard", "decimalPlaces": 1, "default": 15.0, "group": "Sensors", "increment": 0.1, "longDesc": "Bandwidth per notch filter when using dynamic notch filtering with ESC RPM.\n", "max": 30.0, "min": 5.0, "name": "IMU_GYRO_DNF_BW", "shortDesc": "IMU gyro ESC notch filter bandwidth", "type": "Float", "units": "Hz"}, {"bitmask": [{"description": "ESC RPM", "index": 0}, {"description": "FFT", "index": 1}], "category": "Standard", "default": 0, "group": "Sensors", "longDesc": "Enable bank of dynamically updating notch filters.\nRequires ESC RPM feedback or onboard FFT (IMU_GYRO_FFT_EN).\n", "max": 3, "min": 0, "name": "IMU_GYRO_DNF_EN", "shortDesc": "IMU gyro dynamic notch filtering", "type": "Int32"}, {"category": "Standard", "default": 3, "group": "Sensors", "longDesc": "ESC RPM number of harmonics (multiples of RPM) for ESC RPM dynamic notch filtering.\n", "max": 7, "min": 1, "name": "IMU_GYRO_DNF_HMC", "shortDesc": "IMU gyro dynamic notch filter harmonics", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 1, "default": 25.0, "group": "Sensors", "increment": 0.1, "longDesc": "Minimum notch filter frequency in Hz.\n", "name": "IMU_GYRO_DNF_MIN", "shortDesc": "IMU gyro dynamic notch filter minimum frequency", "type": "Float", "units": "Hz"}, {"category": "Standard", "default": 0, "group": "Sensors", "name": "IMU_GYRO_FFT_EN", "rebootRequired": true, "shortDesc": "IMU gyro FFT enable", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 512, "group": "Sensors", "name": "IMU_GYRO_FFT_LEN", "rebootRequired": true, "shortDesc": "IMU gyro FFT length", "type": "Int32", "units": "Hz", "values": [{"description": "256", "value": 256}, {"description": "512", "value": 512}, {"description": "1024", "value": 1024}, {"description": "4096", "value": 4096}]}, {"category": "Standard", "default": 150.0, "group": "Sensors", "max": 1000.0, "min": 1.0, "name": "IMU_GYRO_FFT_MAX", "rebootRequired": true, "shortDesc": "IMU gyro FFT maximum frequency", "type": "Float", "units": "Hz"}, {"category": "Standard", "default": 30.0, "group": "Sensors", "max": 1000.0, "min": 1.0, "name": "IMU_GYRO_FFT_MIN", "rebootRequired": true, "shortDesc": "IMU gyro FFT minimum frequency", "type": "Float", "units": "Hz"}, {"category": "Standard", "default": 10.0, "group": "Sensors", "max": 30.0, "min": 1.0, "name": "IMU_GYRO_FFT_SNR", "shortDesc": "IMU gyro FFT SNR", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 20.0, "group": "Sensors", "increment": 0.1, "longDesc": "The frequency width of the stop band for the 2nd order notch filter on the primary gyro.\nSee \"IMU_GYRO_NF0_FRQ\" to activate the filter and to set the notch frequency.\nApplies to both angular velocity and angular acceleration sent to the controllers.\n", "max": 100.0, "min": 0.0, "name": "IMU_GYRO_NF0_BW", "rebootRequired": true, "shortDesc": "Notch filter bandwidth for gyro", "type": "Float", "units": "Hz"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "Sensors", "increment": 0.1, "longDesc": "The center frequency for the 2nd order notch filter on the primary gyro.\nThis filter can be enabled to avoid feedback amplification of structural resonances at a specific frequency.\nThis only affects the signal sent to the controllers, not the estimators.\nApplies to both angular velocity and angular acceleration sent to the controllers.\nSee \"IMU_GYRO_NF0_BW\" to set the bandwidth of the filter.\n\nA value of 0 disables the filter.\n", "max": 1000.0, "min": 0.0, "name": "IMU_GYRO_NF0_FRQ", "rebootRequired": true, "shortDesc": "Notch filter frequency for gyro", "type": "Float", "units": "Hz"}, {"category": "Standard", "decimalPlaces": 1, "default": 20.0, "group": "Sensors", "increment": 0.1, "longDesc": "The frequency width of the stop band for the 2nd order notch filter on the primary gyro.\nSee \"IMU_GYRO_NF1_FRQ\" to activate the filter and to set the notch frequency.\nApplies to both angular velocity and angular acceleration sent to the controllers.\n", "max": 100.0, "min": 0.0, "name": "IMU_GYRO_NF1_BW", "rebootRequired": true, "shortDesc": "Notch filter 1 bandwidth for gyro", "type": "Float", "units": "Hz"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "Sensors", "increment": 0.1, "longDesc": "The center frequency for the 2nd order notch filter on the primary gyro.\nThis filter can be enabled to avoid feedback amplification of structural resonances at a specific frequency.\nThis only affects the signal sent to the controllers, not the estimators.\nApplies to both angular velocity and angular acceleration sent to the controllers.\nSee \"IMU_GYRO_NF1_BW\" to set the bandwidth of the filter.\n\nA value of 0 disables the filter.\n", "max": 1000.0, "min": 0.0, "name": "IMU_GYRO_NF1_FRQ", "rebootRequired": true, "shortDesc": "Notch filter 2 frequency for gyro", "type": "Float", "units": "Hz"}, {"category": "Standard", "default": 400, "group": "Sensors", "longDesc": "The maximum rate the gyro control data (vehicle_angular_velocity) will be\nallowed to publish at. This is the loop rate for the rate controller and outputs.\n\nNote: sensor data is always read and filtered at the full raw rate (eg commonly 8 kHz) regardless of this setting.\n", "max": 2000, "min": 100, "name": "IMU_GYRO_RATEMAX", "rebootRequired": true, "shortDesc": "Gyro control data maximum publication rate (inner loop rate)", "type": "Int32", "units": "Hz", "values": [{"description": "100 Hz", "value": 100}, {"description": "250 Hz", "value": 250}, {"description": "400 Hz", "value": 400}, {"description": "800 Hz", "value": 800}, {"description": "1000 Hz", "value": 1000}, {"description": "2000 Hz", "value": 2000}]}, {"category": "Standard", "default": 200, "group": "Sensors", "longDesc": "The rate at which raw IMU data is integrated to produce delta angles and delta velocities.\nRecommended to set this to a multiple of the estimator update period (currently 10 ms for ekf2).\n", "max": 1000, "min": 100, "name": "IMU_INTEG_RATE", "rebootRequired": true, "shortDesc": "IMU integration rate", "type": "Int32", "units": "Hz", "values": [{"description": "100 Hz", "value": 100}, {"description": "200 Hz", "value": 200}, {"description": "250 Hz", "value": 250}, {"description": "400 Hz", "value": 400}]}, {"category": "Standard", "default": 1013.25, "group": "Sensors", "max": 1500.0, "min": 500.0, "name": "SENS_BARO_QNH", "shortDesc": "QNH for barometer", "type": "Float", "units": "hPa"}, {"category": "Standard", "default": 20.0, "group": "Sensors", "longDesc": "Barometric air data maximum publication rate. This is an upper bound,\nactual barometric data rate is still dependent on the sensor.\n", "max": 200.0, "min": 1.0, "name": "SENS_BARO_RATE", "shortDesc": "Baro max rate", "type": "Float", "units": "Hz"}, {"category": "System", "default": 1, "group": "Sensors", "longDesc": "Automatically calibrate barometer based on the GNSS height\n", "name": "SENS_BAR_AUTOCAL", "shortDesc": "Barometer auto calibration", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 0, "group": "Sensors", "longDesc": "This parameter defines the rotation of the FMU board relative to the platform.\n", "max": 40, "min": -1, "name": "SENS_BOARD_ROT", "rebootRequired": true, "shortDesc": "Board rotation", "type": "Int32", "values": [{"description": "No rotation", "value": 0}, {"description": "Yaw 45\u00b0", "value": 1}, {"description": "Yaw 90\u00b0", "value": 2}, {"description": "Yaw 135\u00b0", "value": 3}, {"description": "Yaw 180\u00b0", "value": 4}, {"description": "Yaw 225\u00b0", "value": 5}, {"description": "Yaw 270\u00b0", "value": 6}, {"description": "Yaw 315\u00b0", "value": 7}, {"description": "Roll 180\u00b0", "value": 8}, {"description": "Roll 180\u00b0, Yaw 45\u00b0", "value": 9}, {"description": "Roll 180\u00b0, Yaw 90\u00b0", "value": 10}, {"description": "Roll 180\u00b0, Yaw 135\u00b0", "value": 11}, {"description": "Pitch 180\u00b0", "value": 12}, {"description": "Roll 180\u00b0, Yaw 225\u00b0", "value": 13}, {"description": "Roll 180\u00b0, Yaw 270\u00b0", "value": 14}, {"description": "Roll 180\u00b0, Yaw 315\u00b0", "value": 15}, {"description": "Roll 90\u00b0", "value": 16}, {"description": "Roll 90\u00b0, Yaw 45\u00b0", "value": 17}, {"description": "Roll 90\u00b0, Yaw 90\u00b0", "value": 18}, {"description": "Roll 90\u00b0, Yaw 135\u00b0", "value": 19}, {"description": "Roll 270\u00b0", "value": 20}, {"description": "Roll 270\u00b0, Yaw 45\u00b0", "value": 21}, {"description": "Roll 270\u00b0, Yaw 90\u00b0", "value": 22}, {"description": "Roll 270\u00b0, Yaw 135\u00b0", "value": 23}, {"description": "Pitch 90\u00b0", "value": 24}, {"description": "Pitch 270\u00b0", "value": 25}, {"description": "Pitch 180\u00b0, Yaw 90\u00b0", "value": 26}, {"description": "Pitch 180\u00b0, Yaw 270\u00b0", "value": 27}, {"description": "Roll 90\u00b0, Pitch 90\u00b0", "value": 28}, {"description": "Roll 180\u00b0, Pitch 90\u00b0", "value": 29}, {"description": "Roll 270\u00b0, Pitch 90\u00b0", "value": 30}, {"description": "Roll 90\u00b0, Pitch 180\u00b0", "value": 31}, {"description": "Roll 270\u00b0, Pitch 180\u00b0", "value": 32}, {"description": "Roll 90\u00b0, Pitch 270\u00b0", "value": 33}, {"description": "Roll 180\u00b0, Pitch 270\u00b0", "value": 34}, {"description": "Roll 270\u00b0, Pitch 270\u00b0", "value": 35}, {"description": "Roll 90\u00b0, Pitch 180\u00b0, Yaw 90\u00b0", "value": 36}, {"description": "Roll 90\u00b0, Yaw 270\u00b0", "value": 37}, {"description": "Roll 90\u00b0, Pitch 68\u00b0, Yaw 293\u00b0", "value": 38}, {"description": "Pitch 315\u00b0", "value": 39}, {"description": "Roll 90\u00b0, Pitch 315\u00b0", "value": 40}]}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "Sensors", "longDesc": "Rotation from flight controller board to vehicle body frame.\nThis parameter gets set during the \"level horizon\" calibration or can be\nset manually.\n", "max": 45.0, "min": -45.0, "name": "SENS_BOARD_X_OFF", "shortDesc": "Board rotation X (roll) offset", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "Sensors", "longDesc": "Rotation from flight controller board to vehicle body frame.\nThis parameter gets set during the \"level horizon\" calibration or can be\nset manually.\n", "max": 45.0, "min": -45.0, "name": "SENS_BOARD_Y_OFF", "shortDesc": "Board rotation Y (pitch) offset", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "Sensors", "longDesc": "Rotation from flight controller board to vehicle body frame.\nHas to be set manually (not set by any calibration).\n", "max": 45.0, "min": -45.0, "name": "SENS_BOARD_Z_OFF", "shortDesc": "Board rotation Z (yaw) offset", "type": "Float", "units": "deg"}, {"category": "Standard", "default": 0, "group": "Sensors", "max": 1, "min": 0, "name": "SENS_EN_AGPSIM", "rebootRequired": true, "shortDesc": "Simulate Aux Global Position (AGP)", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 0, "group": "Sensors", "max": 1, "min": 0, "name": "SENS_EN_ARSPDSIM", "rebootRequired": true, "shortDesc": "Enable simulated airspeed sensor instance", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 0, "group": "Sensors", "max": 1, "min": 0, "name": "SENS_EN_BAROSIM", "rebootRequired": true, "shortDesc": "Enable simulated barometer sensor instance", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 0, "group": "Sensors", "max": 1, "min": 0, "name": "SENS_EN_GPSSIM", "rebootRequired": true, "shortDesc": "Enable simulated GPS sinstance", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 0, "group": "Sensors", "max": 1, "min": 0, "name": "SENS_EN_MAGSIM", "rebootRequired": true, "shortDesc": "Enable simulated magnetometer sensor instance", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "System", "default": -1, "group": "Sensors", "name": "SENS_EN_THERMAL", "shortDesc": "Thermal control of sensor temperature", "type": "Int32", "values": [{"description": "Thermal control unavailable", "value": -1}, {"description": "Thermal control off", "value": 0}, {"description": "Thermal control enabled", "value": 1}]}, {"category": "System", "default": 1, "group": "Sensors", "longDesc": "Probe for optional external I2C devices.\n", "name": "SENS_EXT_I2C_PRB", "shortDesc": "External I2C probe", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 70.0, "group": "Sensors", "longDesc": "Optical flow data maximum publication rate. This is an upper bound,\nactual optical flow data rate is still dependent on the sensor.\n", "max": 200.0, "min": 1.0, "name": "SENS_FLOW_RATE", "rebootRequired": true, "shortDesc": "Optical flow max rate", "type": "Float", "units": "Hz"}, {"category": "Standard", "default": 0, "group": "Sensors", "longDesc": "This parameter defines the yaw rotation of the optical flow relative to the vehicle body frame.\nZero rotation is defined as X on flow board pointing towards front of vehicle.\n", "name": "SENS_FLOW_ROT", "shortDesc": "Optical flow rotation", "type": "Int32", "values": [{"description": "No rotation", "value": 0}, {"description": "Yaw 45\u00b0", "value": 1}, {"description": "Yaw 90\u00b0", "value": 2}, {"description": "Yaw 135\u00b0", "value": 3}, {"description": "Yaw 180\u00b0", "value": 4}, {"description": "Yaw 225\u00b0", "value": 5}, {"description": "Yaw 270\u00b0", "value": 6}, {"description": "Yaw 315\u00b0", "value": 7}]}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "Sensors", "max": 1.5, "min": 0.5, "name": "SENS_FLOW_SCALE", "shortDesc": "Optical flow scale factor", "type": "Float"}, {"category": "Standard", "default": 110, "group": "Sensors", "longDesc": "GPS measurement delay relative to IMU measurements.\nMatched to physical GPS receiver via SENS_GPS0_ID.\nOnly applied when the GPS driver does not provide its own\ntimestamp_sample correction.\n\n", "max": 300, "min": 0, "name": "SENS_GPS0_DELAY", "shortDesc": "GPS 0 measurement delay", "type": "Int32", "units": "ms"}, {"category": "System", "default": 0, "group": "Sensors", "longDesc": "Device ID of the GPS receiver for antenna offset slot 0.\nSet to 0 to disable this slot. When all slots are 0, offsets are\nmatched by uORB instance index (only reliable for serial GPS).\n\n", "name": "SENS_GPS0_ID", "shortDesc": "GPS 0 device ID", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Sensors", "longDesc": "Forward axis relative to vehicle centre of gravity.\nMatched to physical GPS receiver via SENS_GPS0_ID.\n\n", "name": "SENS_GPS0_OFFX", "shortDesc": "GPS 0 antenna X position", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Sensors", "longDesc": "Right axis relative to vehicle centre of gravity.\nMatched to physical GPS receiver via SENS_GPS0_ID.\n\n", "name": "SENS_GPS0_OFFY", "shortDesc": "GPS 0 antenna Y position", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Sensors", "longDesc": "Down axis relative to vehicle centre of gravity.\nMatched to physical GPS receiver via SENS_GPS0_ID.\n\n", "name": "SENS_GPS0_OFFZ", "shortDesc": "GPS 0 antenna Z position", "type": "Float", "units": "m"}, {"category": "Standard", "default": 110, "group": "Sensors", "longDesc": "GPS measurement delay relative to IMU measurements.\nMatched to physical GPS receiver via SENS_GPS1_ID.\nOnly applied when the GPS driver does not provide its own\ntimestamp_sample correction.\n\n", "max": 300, "min": 0, "name": "SENS_GPS1_DELAY", "shortDesc": "GPS 1 measurement delay", "type": "Int32", "units": "ms"}, {"category": "System", "default": 0, "group": "Sensors", "longDesc": "Device ID of the GPS receiver for antenna offset slot 1.\nSet to 0 to disable this slot. When all slots are 0, offsets are\nmatched by uORB instance index (only reliable for serial GPS).\n\n", "name": "SENS_GPS1_ID", "shortDesc": "GPS 1 device ID", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Sensors", "longDesc": "Forward axis relative to vehicle centre of gravity.\nMatched to physical GPS receiver via SENS_GPS1_ID.\n\n", "name": "SENS_GPS1_OFFX", "shortDesc": "GPS 1 antenna X position", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Sensors", "longDesc": "Right axis relative to vehicle centre of gravity.\nMatched to physical GPS receiver via SENS_GPS1_ID.\n\n", "name": "SENS_GPS1_OFFY", "shortDesc": "GPS 1 antenna Y position", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Sensors", "longDesc": "Down axis relative to vehicle centre of gravity.\nMatched to physical GPS receiver via SENS_GPS1_ID.\n\n", "name": "SENS_GPS1_OFFZ", "shortDesc": "GPS 1 antenna Z position", "type": "Float", "units": "m"}, {"bitmask": [{"description": "use speed accuracy", "index": 0}, {"description": "use hpos accuracy", "index": 1}, {"description": "use vpos accuracy", "index": 2}], "category": "Standard", "default": 7, "group": "Sensors", "longDesc": "Set bits in the following positions to set which GPS accuracy metrics will\nbe used to calculate the blending weight. Set to zero to disable and always\nused first GPS instance.\n\n", "max": 7, "min": 0, "name": "SENS_GPS_MASK", "shortDesc": "Multi GPS Blending Control Mask", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "Sensors", "longDesc": "When no blending is active, this defines the preferred GPS receiver instance.\nThe GPS selection logic waits until the primary receiver is available to\nsend data to the EKF even if a secondary instance is already available.\nThe secondary instance is then only used if the primary one times out.\n\nTo select a DroneCAN GPS, set this to the node ID.\n\nThis parameter has no effect if blending is active.\n\n", "max": 127, "min": -1, "name": "SENS_GPS_PRIME", "shortDesc": "Multi GPS primary instance", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 1, "default": 10.0, "group": "Sensors", "longDesc": "Sets the longest time constant that will be applied to the calculation of GPS\nposition and height offsets used to correct data from multiple GPS data for\nsteady state position differences.\n\n", "max": 100.0, "min": 1.0, "name": "SENS_GPS_TAU", "shortDesc": "Multi GPS Blending Time Constant", "type": "Float", "units": "s"}, {"category": "System", "default": 1, "group": "Sensors", "longDesc": "Automatically initialize IMU (accel/gyro) calibration from bias estimates if available.\n", "name": "SENS_IMU_AUTOCAL", "shortDesc": "IMU auto calibration", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "System", "default": 1, "group": "Sensors", "longDesc": "Notify the user if the IMU is clipping\n", "name": "SENS_IMU_CLPNOTI", "shortDesc": "IMU notify clipping", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "System", "default": 1, "group": "Sensors", "name": "SENS_IMU_MODE", "rebootRequired": true, "shortDesc": "Sensors hub IMU mode", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Publish primary IMU selection", "value": 1}]}, {"category": "System", "default": 1, "group": "Sensors", "longDesc": "For systems with an external barometer, this should be set to false to make sure that the external is used.\n", "name": "SENS_INT_BARO_EN", "rebootRequired": true, "shortDesc": "Enable internal barometers", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "System", "default": 1, "group": "Sensors", "longDesc": "Automatically initialize magnetometer calibration from bias estimate if available.\n", "name": "SENS_MAG_AUTOCAL", "shortDesc": "Magnetometer auto calibration", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 1, "group": "Sensors", "longDesc": "During calibration attempt to automatically determine the rotation of external magnetometers.\n", "name": "SENS_MAG_AUTOROT", "shortDesc": "Automatically set external rotations", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "System", "default": 1, "group": "Sensors", "name": "SENS_MAG_MODE", "rebootRequired": true, "shortDesc": "Sensors hub mag mode", "type": "Int32", "values": [{"description": "Publish all magnetometers", "value": 0}, {"description": "Publish primary magnetometer", "value": 1}]}, {"category": "Standard", "default": 15.0, "group": "Sensors", "longDesc": "Magnetometer data maximum publication rate. This is an upper bound,\nactual magnetometer data rate is still dependent on the sensor.\n", "max": 200.0, "min": 1.0, "name": "SENS_MAG_RATE", "rebootRequired": true, "shortDesc": "Magnetometer max rate", "type": "Float", "units": "Hz"}, {"category": "Standard", "default": 63, "group": "Sensors", "longDesc": "If set to two side calibration, only the offsets are estimated, the scale\ncalibration is left unchanged. Thus an initial six side calibration is\nrecommended.\n\nBits:\nORIENTATION_TAIL_DOWN = 1\nORIENTATION_NOSE_DOWN = 2\nORIENTATION_LEFT = 4\nORIENTATION_RIGHT = 8\nORIENTATION_UPSIDE_DOWN = 16\nORIENTATION_RIGHTSIDE_UP = 32\n", "max": 63, "min": 34, "name": "SENS_MAG_SIDES", "shortDesc": "Bitfield selecting mag sides for calibration", "type": "Int32", "values": [{"description": "Two side calibration", "value": 34}, {"description": "Three side calibration", "value": 38}, {"description": "Six side calibration", "value": 63}]}, {"category": "Standard", "default": 1, "group": "Septentrio", "longDesc": "By default, the receiver is automatically configured. Sometimes it may be used for multiple purposes.\nIf the offered parameters aren't sufficient, this parameter can be disabled to have full control of the receiver configuration.\nA good way to use this is to enable automatic configuration, let the receiver be configured, and then disable it to make manual adjustments.\n\n", "name": "SEP_AUTO_CONFIG", "rebootRequired": true, "shortDesc": "Toggle automatic receiver configuration", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"bitmask": [{"description": "GPS", "index": 0}, {"description": "GLONASS", "index": 1}, {"description": "Galileo", "index": 2}, {"description": "SBAS", "index": 3}, {"description": "BeiDou", "index": 4}], "category": "Standard", "default": 0, "group": "Septentrio", "longDesc": "Choice of which constellations the receiver should use for PVT computation.\n\nWhen this is 0, the constellation usage isn't changed.\n\n", "max": 63, "min": 0, "name": "SEP_CONST_USAGE", "rebootRequired": true, "shortDesc": "Usage of different constellations", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "Septentrio", "longDesc": "Log raw communication between the driver and connected receivers.\nFor example, \"To receiver\" will log all commands and corrections sent by the driver to the receiver.\n\n", "max": 3, "min": 0, "name": "SEP_DUMP_COMM", "shortDesc": "Log GPS communication data", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "From receiver", "value": 1}, {"description": "To receiver", "value": 2}, {"description": "Both", "value": 3}]}, {"category": "Standard", "default": 0, "group": "Septentrio", "longDesc": "Setup and expected use of the hardware.\n\n- Default: Use two receivers as completely separate instances.\n- Moving base: Use two receivers in a rover & moving base setup for heading.\n\n", "max": 1, "min": 0, "name": "SEP_HARDW_SETUP", "rebootRequired": true, "shortDesc": "Setup and expected use of the hardware", "type": "Int32", "values": [{"description": "Default", "value": 0}, {"description": "Moving base", "value": 1}]}, {"category": "Standard", "default": 0, "group": "Septentrio", "longDesc": "When the receiver is already set up to log data, this decides whether extra logged data should be added or overwrite existing data.\n\n", "name": "SEP_LOG_FORCE", "rebootRequired": true, "shortDesc": "Whether to overwrite or add to existing logging", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 0, "group": "Septentrio", "longDesc": "Select the frequency at which the connected receiver should log data to its internal storage.\n\n", "max": 10, "min": 0, "name": "SEP_LOG_HZ", "rebootRequired": true, "shortDesc": "Logging frequency for the receiver", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "0.1 Hz", "value": 1}, {"description": "0.2 Hz", "value": 2}, {"description": "0.5 Hz", "value": 3}, {"description": "1 Hz", "value": 4}, {"description": "2 Hz", "value": 5}, {"description": "5 Hz", "value": 6}, {"description": "10 Hz", "value": 7}, {"description": "20 Hz", "value": 8}, {"description": "25 Hz", "value": 9}, {"description": "50 Hz", "value": 10}]}, {"category": "Standard", "default": 2, "group": "Septentrio", "longDesc": "Select the level of detail that needs to be logged by the receiver.\n\n", "max": 3, "min": 0, "name": "SEP_LOG_LEVEL", "rebootRequired": true, "shortDesc": "Logging level for the receiver", "type": "Int32", "values": [{"description": "Lite", "value": 0}, {"description": "Basic", "value": 1}, {"description": "Default", "value": 2}, {"description": "Full", "value": 3}]}, {"category": "Standard", "default": 1, "group": "Septentrio", "longDesc": "The output frequency of the main SBF blocks needed for PVT information.\n\n", "max": 3, "min": 0, "name": "SEP_OUTP_HZ", "rebootRequired": true, "shortDesc": "Output frequency of main SBF blocks", "type": "Int32", "values": [{"description": "5 Hz", "value": 0}, {"description": "10 Hz", "value": 1}, {"description": "20 Hz", "value": 2}, {"description": "25 Hz", "value": 3}]}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Septentrio", "longDesc": "Vertical offsets can be compensated for by adjusting the Pitch offset.\n\nNote that this can be interpreted as the \"roll\" angle in case the antennas are aligned along the perpendicular axis.\nThis occurs in situations where the two antenna ARPs may not be exactly at the same height in the vehicle reference frame.\nSince pitch is defined as the right-handed rotation about the vehicle Y axis,\na situation where the main antenna is mounted lower than the aux antenna (assuming the default antenna setup) will result in a positive pitch.\n\n", "max": 90.0, "min": -90.0, "name": "SEP_PITCH_OFFS", "rebootRequired": true, "shortDesc": "Pitch offset for dual antenna GPS", "type": "Float", "units": "deg"}, {"category": "Standard", "default": 0, "group": "Septentrio", "longDesc": "Enable publication of satellite info (ORB_ID(satellite_info)) if possible.\n\n", "name": "SEP_SAT_INFO", "rebootRequired": true, "shortDesc": "Enable sat info", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 2, "group": "Septentrio", "longDesc": "The stream the autopilot sets up on the receiver to output the logging data.\n\nSet this to another value if the default stream is already used for another purpose.\n\n", "max": 10, "min": 1, "name": "SEP_STREAM_LOG", "rebootRequired": true, "shortDesc": "Logging stream used during automatic configuration", "type": "Int32"}, {"category": "Standard", "default": 1, "group": "Septentrio", "longDesc": "The stream the autopilot sets up on the receiver to output the main data.\n\nSet this to another value if the default stream is already used for another purpose.\n\n", "max": 10, "min": 1, "name": "SEP_STREAM_MAIN", "rebootRequired": true, "shortDesc": "Main stream used during automatic configuration", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Septentrio", "longDesc": "Heading offset angle for dual antenna GPS setups that support heading estimation.\n\nSet this to 0 if the antennas are parallel to the forward-facing direction\nof the vehicle and the rover antenna is in front.\n\nThe offset angle increases clockwise.\n\nSet this to 90 if the rover antenna is placed on the\nright side of the vehicle and the moving base antenna is on the left side.\n\n", "max": 360.0, "min": -360.0, "name": "SEP_YAW_OFFS", "rebootRequired": true, "shortDesc": "Heading/Yaw offset for dual antenna GPS", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 4, "default": 100.0, "group": "Simulation In Hardware", "increment": 0.01, "max": 1000.0, "min": 0.0, "name": "SIH_DISTSNSR_MAX", "shortDesc": "distance sensor maximum range", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 4, "default": 0.0, "group": "Simulation In Hardware", "increment": 0.01, "max": 10.0, "min": 0.0, "name": "SIH_DISTSNSR_MIN", "shortDesc": "distance sensor minimum range", "type": "Float", "units": "m"}, {"category": "Standard", "default": -1.0, "group": "Simulation In Hardware", "longDesc": "Absolute value superior to 10000 will disable distance sensor\n", "name": "SIH_DISTSNSR_OVR", "shortDesc": "if >= 0 the distance sensor measures will be overridden by this value", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Simulation In Hardware", "min": 0.0, "name": "SIH_F_CP0", "shortDesc": "Forward thruster static power coefficient", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Simulation In Hardware", "longDesc": "CP(J) = CP0 + CP1*J + CP2*J^2\n", "name": "SIH_F_CP1", "shortDesc": "Forward thruster power coefficient 1", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Simulation In Hardware", "longDesc": "CP(J) = CP0 + CP1*J + CP2*J^2\n", "max": 0.0, "name": "SIH_F_CP2", "shortDesc": "Forward thruster power coefficient 2", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Simulation In Hardware", "min": 0.0, "name": "SIH_F_CT0", "shortDesc": "Forward thruster static thrust coefficient", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Simulation In Hardware", "longDesc": "CT(J) = CT0 + CT1*J + CT2*J^2\n", "name": "SIH_F_CT1", "shortDesc": "Forward thruster thrust coefficient 1", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Simulation In Hardware", "longDesc": "CT(J) = CT0 + CT1*J + CT2*J^2\n", "max": 0.0, "name": "SIH_F_CT2", "shortDesc": "Forward thruster thrust coefficient 2", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.1, "group": "Simulation In Hardware", "min": 0.1, "name": "SIH_F_DIA_INCH", "shortDesc": "Forward thruster propeller diameter in inches", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0165, "group": "Simulation In Hardware", "longDesc": "This is used for the Fixed-Wing, Tailsitter, or pusher of the Standard VTOL\nif SIH_F_CP0 <= 0.\nIf SIH_F_CP0 > 0, propeller model with advance ratio J is used\nand this parameter value is overridden at simulation startup.\n", "min": 0.0, "name": "SIH_F_Q_MAX", "shortDesc": "Forward thruster max torque (Nm)", "type": "Float", "units": "Nm"}, {"category": "Standard", "decimalPlaces": 1, "default": 6000.0, "group": "Simulation In Hardware", "min": 0.1, "name": "SIH_F_RPM_MAX", "shortDesc": "Forward thruster max RPM", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 2.0, "group": "Simulation In Hardware", "longDesc": "This is used for the Fixed-Wing, Tailsitter, or pusher of the Standard VTOL\nif SIH_F_CT0 <= 0.\nIf SIH_F_CT0 > 0, propeller model with advance ratio J is used\nand this parameter value is overridden at simulation startup.\n", "min": 0.0, "name": "SIH_F_T_MAX", "shortDesc": "Forward thruster max thrust (N)", "type": "Float", "units": "N"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.025, "group": "Simulation In Hardware", "increment": 0.005, "longDesc": "The inertia is a 3 by 3 symmetric matrix.\nIt represents the difficulty of the vehicle to modify its angular rate.\n", "min": 0.0, "name": "SIH_IXX", "shortDesc": "Vehicle inertia about X axis", "type": "Float", "units": "kg m^2"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Simulation In Hardware", "increment": 0.005, "longDesc": "The inertia is a 3 by 3 symmetric matrix.\nThis value can be set to 0 for a quad symmetric about its center of mass.\n", "name": "SIH_IXY", "shortDesc": "Vehicle cross term inertia xy", "type": "Float", "units": "kg m^2"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Simulation In Hardware", "increment": 0.005, "longDesc": "The inertia is a 3 by 3 symmetric matrix.\nThis value can be set to 0 for a quad symmetric about its center of mass.\n", "name": "SIH_IXZ", "shortDesc": "Vehicle cross term inertia xz", "type": "Float", "units": "kg m^2"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.025, "group": "Simulation In Hardware", "increment": 0.005, "longDesc": "The inertia is a 3 by 3 symmetric matrix.\nIt represents the difficulty of the vehicle to modify its angular rate.\n", "min": 0.0, "name": "SIH_IYY", "shortDesc": "Vehicle inertia about Y axis", "type": "Float", "units": "kg m^2"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "Simulation In Hardware", "increment": 0.005, "longDesc": "The inertia is a 3 by 3 symmetric matrix.\nThis value can be set to 0 for a quad symmetric about its center of mass.\n", "name": "SIH_IYZ", "shortDesc": "Vehicle cross term inertia yz", "type": "Float", "units": "kg m^2"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.03, "group": "Simulation In Hardware", "increment": 0.005, "longDesc": "The inertia is a 3 by 3 symmetric matrix.\nIt represents the difficulty of the vehicle to modify its angular rate.\n", "min": 0.0, "name": "SIH_IZZ", "shortDesc": "Vehicle inertia about Z axis", "type": "Float", "units": "kg m^2"}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "Simulation In Hardware", "increment": 0.05, "longDesc": "Physical coefficient representing the friction with air particules.\nThe greater this value, the slower the quad will move.\n\nDrag force function of velocity: D=-KDV*V.\nThe maximum freefall velocity can be computed as V=10*MASS/KDV [m/s]\n", "min": 0.0, "name": "SIH_KDV", "shortDesc": "First order drag coefficient", "type": "Float", "units": "N/(m/s)"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.025, "group": "Simulation In Hardware", "increment": 0.005, "longDesc": "Physical coefficient representing the friction with air particules during rotations.\nThe greater this value, the slower the quad will rotate.\n\nAerodynamic moment function of body rate: Ma=-KDW*W_B.\nThis value can be set to 0 if unknown.\n", "min": 0.0, "name": "SIH_KDW", "shortDesc": "First order angular damper coefficient", "type": "Float", "units": "Nm/(rad/s)"}, {"category": "Standard", "decimalPlaces": 2, "default": 489.4, "group": "Simulation In Hardware", "increment": 0.01, "longDesc": "This value represents the Above Mean Sea Level (AMSL) altitude where the simulation begins.\n\nIf using FlightGear as a visual animation,\nthis value can be tweaked such that the vehicle lies on the ground at takeoff.\n\nLAT0, LON0, H0, MU_X, MU_Y, and MU_Z should ideally be consistent among each others\nto represent a physical ground location on Earth.\n", "max": 8848.0, "min": -420.0, "name": "SIH_LOC_H0", "shortDesc": "Initial AMSL ground altitude", "type": "Float", "units": "m"}, {"category": "Standard", "default": 47.397742, "group": "Simulation In Hardware", "longDesc": "This value represents the North-South location on Earth where the simulation begins.\n\nLAT0, LON0, H0, MU_X, MU_Y, and MU_Z should ideally be consistent among each others\nto represent a physical ground location on Earth.\n", "max": 90.0, "min": -90.0, "name": "SIH_LOC_LAT0", "shortDesc": "Initial geodetic latitude", "type": "Float", "units": "deg"}, {"category": "Standard", "default": 8.545594, "group": "Simulation In Hardware", "longDesc": "This value represents the East-West location on Earth where the simulation begins.\n\nLAT0, LON0, H0, MU_X, MU_Y, and MU_Z should ideally be consistent among each others\nto represent a physical ground location on Earth.\n", "max": 180.0, "min": -180.0, "name": "SIH_LOC_LON0", "shortDesc": "Initial geodetic longitude", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.2, "group": "Simulation In Hardware", "increment": 0.05, "longDesc": "This is the arm length generating the pitching moment\n\nThis value can be measured with a ruler.\nThis corresponds to half the distance between the front and rear motors.\n", "min": 0.0, "name": "SIH_L_PITCH", "shortDesc": "Pitch arm length", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.2, "group": "Simulation In Hardware", "increment": 0.05, "longDesc": "This is the arm length generating the rolling moment\n\nThis value can be measured with a ruler.\nThis corresponds to half the distance between the left and right motors.\n", "min": 0.0, "name": "SIH_L_ROLL", "shortDesc": "Roll arm length", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "Simulation In Hardware", "increment": 0.1, "longDesc": "This value can be measured by weighting the quad on a scale.\n", "min": 0.0, "name": "SIH_MASS", "shortDesc": "Vehicle mass", "type": "Float", "units": "kg"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.1, "group": "Simulation In Hardware", "increment": 0.05, "longDesc": "This is the maximum torque delivered by one propeller\nwhen the motor is running at full speed.\n\nThis value is usually about few percent of the maximum thrust force.\n\nRefer to SIH_F_Q_MAX for the propeller torque for FW, Tailsitter, and VTOL pusher.\n", "min": 0.0, "name": "SIH_Q_MAX", "shortDesc": "Max multicopter propeller torque", "type": "Float", "units": "Nm"}, {"category": "Standard", "decimalPlaces": 1, "default": 30.0, "group": "Simulation In Hardware", "longDesc": "Gaussian noise added to simulated ranging beacon measurements. Set to 0 to disable noise.\n", "max": 100.0, "min": 0.0, "name": "SIH_RNGBC_NOISE", "shortDesc": "Ranging beacon measurement noise standard deviation", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 2, "default": 5.0, "group": "Simulation In Hardware", "increment": 0.5, "longDesc": "This is the maximum force delivered by one propeller\nwhen the motor is running at full speed.\n\nThis value is usually about 5 times the mass of the quadrotor.\n\nRefer to SIH_F_T_MAX for the thrust for FW, Tailsitter, and VTOL pusher.\n", "min": 0.0, "name": "SIH_T_MAX", "shortDesc": "Max multicopter propeller thrust force", "type": "Float", "units": "N"}, {"category": "Standard", "default": 0.05, "group": "Simulation In Hardware", "longDesc": "the time taken for the thruster to step from 0 to 100% should be about 4 times tau\n", "name": "SIH_T_TAU", "shortDesc": "thruster time constant tau", "type": "Float", "units": "s"}, {"category": "Standard", "default": 0, "group": "Simulation In Hardware", "name": "SIH_VEHICLE_TYPE", "rebootRequired": true, "shortDesc": "Vehicle type", "type": "Int32", "values": [{"description": "Quadcopter", "value": 0}, {"description": "Fixed-Wing", "value": 1}, {"description": "Tailsitter", "value": 2}, {"description": "Standard VTOL", "value": 3}, {"description": "Hexacopter", "value": 4}, {"description": "Rover Ackermann", "value": 5}]}, {"category": "Standard", "default": 0.0, "group": "Simulation In Hardware", "name": "SIH_WIND_E", "shortDesc": "Wind velocity from east direction", "type": "Float", "units": "m/s"}, {"category": "Standard", "default": 0.0, "group": "Simulation In Hardware", "name": "SIH_WIND_N", "shortDesc": "Wind velocity from north direction", "type": "Float", "units": "m/s"}, {"bitmask": [{"description": "Stuck", "index": 0}, {"description": "Drift", "index": 1}], "category": "Standard", "default": 0, "group": "Simulator", "longDesc": "Stuck: freeze the measurement to the current location\nDrift: add a linearly growing bias to the sensor data\n", "max": 3, "min": 0, "name": "SIM_AGP_FAIL", "shortDesc": "AGP failure mode", "type": "Int32"}, {"category": "Standard", "default": 0.0, "group": "Simulator", "name": "SIM_BARO_OFF_P", "shortDesc": "simulated barometer pressure offset", "type": "Float"}, {"category": "Standard", "default": 0.0, "group": "Simulator", "name": "SIM_BARO_OFF_T", "shortDesc": "simulated barometer temperature offset", "type": "Float", "units": "celcius"}, {"category": "Standard", "default": 10, "group": "Simulator", "max": 50, "min": 0, "name": "SIM_GPS_USED", "shortDesc": "simulated GPS number of satellites used", "type": "Int32"}, {"category": "Standard", "default": 0.0, "group": "Simulator", "name": "SIM_MAG_OFFSET_X", "shortDesc": "simulated magnetometer X offset", "type": "Float", "units": "gauss"}, {"category": "Standard", "default": 0.0, "group": "Simulator", "name": "SIM_MAG_OFFSET_Y", "shortDesc": "simulated magnetometer Y offset", "type": "Float", "units": "gauss"}, {"category": "Standard", "default": 0.0, "group": "Simulator", "name": "SIM_MAG_OFFSET_Z", "shortDesc": "simulated magnetometer Z offset", "type": "Float", "units": "gauss"}, {"category": "Standard", "default": 0, "group": "System", "longDesc": "Set to 1 to reset parameters on next system startup (setting defaults).\nPlatform-specific values are used if available.\nRC* parameters are preserved.\n", "name": "SYS_AUTOCONFIG", "shortDesc": "Automatically configure default values", "type": "Int32", "values": [{"description": "Keep parameters", "value": 0}, {"description": "Reset parameters to airframe defaults", "value": 1}]}, {"category": "Standard", "default": 0, "group": "System", "longDesc": "CHANGING THIS VALUE REQUIRES A RESTART. Defines the auto-start script used to bootstrap the system.\n", "max": 9999999, "min": 0, "name": "SYS_AUTOSTART", "rebootRequired": true, "shortDesc": "Auto-start script index", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "System", "longDesc": "If enabled, update the bootloader on the next boot.\n\nWARNING: do not cut the power during an update process, otherwise you will\nhave to recover using some alternative method (e.g. JTAG).\n\nInstructions:\n- Insert an SD card\n- Enable this parameter\n- Reboot the board (plug the power or send a reboot command)\n- Wait until the board comes back up (or at least 2 minutes)\n- If it does not come back, check the file bootlog.txt on the SD card\n", "name": "SYS_BL_UPDATE", "rebootRequired": true, "shortDesc": "Bootloader update", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 0, "group": "System", "longDesc": "Enable auto start of accelerometer thermal calibration at the next power up\n\n0 : Set to 0 to do nothing\n1 : Set to 1 to start a calibration at next boot\nThis parameter is reset to zero when the temperature calibration starts.\n\ndefault (0, no calibration)\n", "max": 1, "min": 0, "name": "SYS_CAL_ACCEL", "shortDesc": "Auto start accel thermal calibration on next boot", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "System", "longDesc": "Enable auto start of barometer thermal calibration at the next power up\n\n0 : Set to 0 to do nothing\n1 : Set to 1 to start a calibration at next boot\nThis parameter is reset to zero when the temperature calibration starts.\n\ndefault (0, no calibration)\n", "max": 1, "min": 0, "name": "SYS_CAL_BARO", "shortDesc": "Auto start baro thermal calibration on next boot", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "System", "longDesc": "Enable auto start of rate gyro thermal calibration at the next power up\n\n0 : Set to 0 to do nothing\n1 : Set to 1 to start a calibration at next boot\nThis parameter is reset to zero when the temperature calibration starts.\n\ndefault (0, no calibration)\n", "max": 1, "min": 0, "name": "SYS_CAL_GYRO", "shortDesc": "Auto start gyro thermal calibration on next boot", "type": "Int32"}, {"category": "Standard", "default": 24, "group": "System", "longDesc": "A temperature increase greater than this value is required during calibration.\nCalibration will complete for each sensor when the temperature increase above the starting temperature exceeds the value set by SYS_CAL_TDEL.\nIf the temperature rise is insufficient, the calibration will continue indefinitely and the board will need to be repowered to exit.\n", "min": 10, "name": "SYS_CAL_TDEL", "shortDesc": "Required temperature rise during thermal calibration", "type": "Int32", "units": "celcius"}, {"category": "Standard", "default": 10, "group": "System", "longDesc": "Temperature calibration will not start if the temperature of any sensor is higher than the value set by SYS_CAL_TMAX.\n", "name": "SYS_CAL_TMAX", "shortDesc": "Maximum starting temperature for thermal calibration", "type": "Int32", "units": "celcius"}, {"category": "Standard", "default": 5, "group": "System", "longDesc": "Temperature calibration for each sensor will ignore data if the temperature is lower than the value set by SYS_CAL_TMIN.\n", "name": "SYS_CAL_TMIN", "shortDesc": "Minimum starting temperature for thermal calibration", "type": "Int32", "units": "celcius"}, {"category": "Standard", "default": 0, "group": "System", "longDesc": "If the board supports persistent storage (i.e., the KConfig variable DATAMAN_PERSISTENT_STORAGE is set),\nthe 'Default storage' backend uses a file on persistent storage. If not supported, this backend uses\nnon-persistent storage in RAM.\n", "name": "SYS_DM_BACKEND", "rebootRequired": true, "shortDesc": "Dataman storage backend", "type": "Int32", "values": [{"description": "Dataman disabled", "value": -1}, {"description": "Default storage", "value": 0}, {"description": "RAM storage", "value": 1}]}, {"category": "Standard", "default": 0, "group": "System", "longDesc": "If enabled, future sensor calibrations will be stored to /fs/mtd_caldata.\n\nNote: this is only supported on boards with a separate calibration storage\n/fs/mtd_caldata.\n", "name": "SYS_FAC_CAL_MODE", "shortDesc": "Enable factory calibration mode", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "All sensors", "value": 1}, {"description": "All sensors except mag", "value": 2}]}, {"category": "Standard", "default": 0, "group": "System", "longDesc": "If enabled allows MAVLink INJECT_FAILURE commands.\n\nWARNING: the failures can easily cause crashes and are to be used with caution!\n", "name": "SYS_FAILURE_EN", "shortDesc": "Enable failure injection", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 1, "group": "System", "longDesc": "Disable this if the board has no barometer, such as some of the Omnibus\nF4 SD variants.\nIf disabled, the preflight checks will not check for the presence of a\nbarometer.\n", "name": "SYS_HAS_BARO", "rebootRequired": true, "shortDesc": "Control if the vehicle has a barometer", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 1, "group": "System", "longDesc": "Disable this if the system has no GPS.\nIf disabled, the sensors hub will not process sensor_gps,\nand GPS will not be available for the rest of the system.\n", "name": "SYS_HAS_GPS", "rebootRequired": true, "shortDesc": "Control if the vehicle has a GPS", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 1, "group": "System", "longDesc": "0: System has no magnetometer, preflight checks should pass without one.\n1-N: Require the presence of N magnetometer sensors for check to pass.\n", "name": "SYS_HAS_MAG", "rebootRequired": true, "shortDesc": "Control if and how many magnetometers are expected", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "System", "longDesc": "Set this to 0 if the board has no airspeed sensor.\nIf set to 0, the preflight checks will not check for the presence of an\nairspeed sensor.\n", "max": 1, "min": 0, "name": "SYS_HAS_NUM_ASPD", "shortDesc": "Control if the vehicle has an airspeed sensor", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "System", "longDesc": "The preflight check will fail if fewer than this number of distance sensors with valid data is present.\n\nDisable the check with 0.\n", "max": 4, "min": 0, "name": "SYS_HAS_NUM_DIST", "shortDesc": "Number of distance sensors to check being available", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "System", "longDesc": "The preflight check will fail if fewer than this number of optical flow sensors with valid data are present.\n", "max": 1, "min": 0, "name": "SYS_HAS_NUM_OF", "shortDesc": "Number of optical flow sensors required to be available", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "System", "longDesc": "While enabled the system will boot in Hardware-In-The-Loop (HITL)\nor Simulation-In-Hardware (SIH) mode and not enable all sensors and checks.\nWhen disabled the same vehicle can be flown normally.\n\nSet to 'external HITL', if the system should perform as if it were a real\nvehicle (the only difference to a real system is then only the parameter\nvalue, which can be used for log analysis).\n", "name": "SYS_HITL", "rebootRequired": true, "shortDesc": "Enable HITL/SIH mode on next boot", "type": "Int32", "values": [{"description": "external HITL", "value": -1}, {"description": "HITL and SIH disabled", "value": 0}, {"description": "HITL enabled", "value": 1}, {"description": "SIH enabled", "value": 2}]}, {"category": "Standard", "default": 1, "group": "System", "longDesc": "This is used internally only: an airframe configuration might set an expected\nparameter version value via PARAM_DEFAULTS_VER. This is checked on bootup\nagainst SYS_PARAM_VER, and if they do not match, parameters are reset and\nreloaded from the airframe configuration.\n", "min": 0, "name": "SYS_PARAM_VER", "shortDesc": "Parameter version", "type": "Int32"}, {"category": "Standard", "default": 1.0, "group": "System", "longDesc": "Set to 0 to disable, 1 for maximum brightness\n", "name": "SYS_RGB_MAXBRT", "shortDesc": "RGB Led brightness limit", "type": "Float", "units": "%"}, {"category": "Standard", "default": 1, "group": "System", "name": "SYS_STCK_EN", "shortDesc": "Enable stack checking", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 2, "group": "Testing", "name": "TEST_1", "shortDesc": "TEST_1", "type": "Int32"}, {"category": "Standard", "default": 4, "group": "Testing", "name": "TEST_2", "shortDesc": "TEST_2", "type": "Int32"}, {"category": "Standard", "default": 5.0, "group": "Testing", "name": "TEST_3", "shortDesc": "TEST_3", "type": "Float"}, {"category": "Standard", "default": 0.01, "group": "Testing", "name": "TEST_D", "shortDesc": "TEST_D", "type": "Float"}, {"category": "Standard", "default": 2.0, "group": "Testing", "name": "TEST_DEV", "shortDesc": "TEST_DEV", "type": "Float"}, {"category": "Standard", "default": 10.0, "group": "Testing", "name": "TEST_D_LP", "shortDesc": "TEST_D_LP", "type": "Float"}, {"category": "Standard", "default": 10.0, "group": "Testing", "name": "TEST_HP", "shortDesc": "TEST_HP", "type": "Float"}, {"category": "Standard", "default": 0.1, "group": "Testing", "name": "TEST_I", "shortDesc": "TEST_I", "type": "Float"}, {"category": "Standard", "default": 1.0, "group": "Testing", "name": "TEST_I_MAX", "shortDesc": "TEST_I_MAX", "type": "Float"}, {"category": "Standard", "default": 10.0, "group": "Testing", "name": "TEST_LP", "shortDesc": "TEST_LP", "type": "Float"}, {"category": "Standard", "default": 1.0, "group": "Testing", "name": "TEST_MAX", "shortDesc": "TEST_MAX", "type": "Float"}, {"category": "Standard", "default": 1.0, "group": "Testing", "name": "TEST_MEAN", "shortDesc": "TEST_MEAN", "type": "Float"}, {"category": "Standard", "default": -1.0, "group": "Testing", "name": "TEST_MIN", "shortDesc": "TEST_MIN", "type": "Float"}, {"category": "Standard", "default": 0.2, "group": "Testing", "name": "TEST_P", "shortDesc": "TEST_P", "type": "Float"}, {"category": "Standard", "default": 12345678, "group": "Testing", "name": "TEST_PARAMS", "shortDesc": "TEST_PARAMS", "type": "Int32"}, {"category": "Standard", "default": 16, "group": "Testing", "name": "TEST_RC2_X", "shortDesc": "TEST_RC2_X", "type": "Int32"}, {"category": "Standard", "default": 8, "group": "Testing", "name": "TEST_RC_X", "shortDesc": "TEST_RC_X", "type": "Int32"}, {"category": "Standard", "default": 0.5, "group": "Testing", "name": "TEST_TRIM", "shortDesc": "TEST_TRIM", "type": "Float"}, {"category": "System", "default": 0, "group": "Thermal Compensation", "name": "TC_A0_ID", "shortDesc": "ID of Accelerometer that the calibration is for", "type": "Int32"}, {"category": "System", "default": 100.0, "group": "Thermal Compensation", "name": "TC_A0_TMAX", "shortDesc": "Accelerometer calibration maximum temperature", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A0_TMIN", "shortDesc": "Accelerometer calibration minimum temperature", "type": "Float"}, {"category": "System", "default": 25.0, "group": "Thermal Compensation", "name": "TC_A0_TREF", "shortDesc": "Accelerometer calibration reference temperature", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A0_X0_0", "shortDesc": "Accelerometer offset temperature ^0 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A0_X0_1", "shortDesc": "Accelerometer offset temperature ^0 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A0_X0_2", "shortDesc": "Accelerometer offset temperature ^0 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A0_X1_0", "shortDesc": "Accelerometer offset temperature ^1 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A0_X1_1", "shortDesc": "Accelerometer offset temperature ^1 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A0_X1_2", "shortDesc": "Accelerometer offset temperature ^1 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A0_X2_0", "shortDesc": "Accelerometer offset temperature ^2 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A0_X2_1", "shortDesc": "Accelerometer offset temperature ^2 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A0_X2_2", "shortDesc": "Accelerometer offset temperature ^2 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A0_X3_0", "shortDesc": "Accelerometer offset temperature ^3 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A0_X3_1", "shortDesc": "Accelerometer offset temperature ^3 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A0_X3_2", "shortDesc": "Accelerometer offset temperature ^3 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0, "group": "Thermal Compensation", "name": "TC_A1_ID", "shortDesc": "ID of Accelerometer that the calibration is for", "type": "Int32"}, {"category": "System", "default": 100.0, "group": "Thermal Compensation", "name": "TC_A1_TMAX", "shortDesc": "Accelerometer calibration maximum temperature", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A1_TMIN", "shortDesc": "Accelerometer calibration minimum temperature", "type": "Float"}, {"category": "System", "default": 25.0, "group": "Thermal Compensation", "name": "TC_A1_TREF", "shortDesc": "Accelerometer calibration reference temperature", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A1_X0_0", "shortDesc": "Accelerometer offset temperature ^0 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A1_X0_1", "shortDesc": "Accelerometer offset temperature ^0 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A1_X0_2", "shortDesc": "Accelerometer offset temperature ^0 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A1_X1_0", "shortDesc": "Accelerometer offset temperature ^1 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A1_X1_1", "shortDesc": "Accelerometer offset temperature ^1 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A1_X1_2", "shortDesc": "Accelerometer offset temperature ^1 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A1_X2_0", "shortDesc": "Accelerometer offset temperature ^2 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A1_X2_1", "shortDesc": "Accelerometer offset temperature ^2 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A1_X2_2", "shortDesc": "Accelerometer offset temperature ^2 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A1_X3_0", "shortDesc": "Accelerometer offset temperature ^3 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A1_X3_1", "shortDesc": "Accelerometer offset temperature ^3 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A1_X3_2", "shortDesc": "Accelerometer offset temperature ^3 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0, "group": "Thermal Compensation", "name": "TC_A2_ID", "shortDesc": "ID of Accelerometer that the calibration is for", "type": "Int32"}, {"category": "System", "default": 100.0, "group": "Thermal Compensation", "name": "TC_A2_TMAX", "shortDesc": "Accelerometer calibration maximum temperature", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A2_TMIN", "shortDesc": "Accelerometer calibration minimum temperature", "type": "Float"}, {"category": "System", "default": 25.0, "group": "Thermal Compensation", "name": "TC_A2_TREF", "shortDesc": "Accelerometer calibration reference temperature", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A2_X0_0", "shortDesc": "Accelerometer offset temperature ^0 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A2_X0_1", "shortDesc": "Accelerometer offset temperature ^0 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A2_X0_2", "shortDesc": "Accelerometer offset temperature ^0 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A2_X1_0", "shortDesc": "Accelerometer offset temperature ^1 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A2_X1_1", "shortDesc": "Accelerometer offset temperature ^1 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A2_X1_2", "shortDesc": "Accelerometer offset temperature ^1 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A2_X2_0", "shortDesc": "Accelerometer offset temperature ^2 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A2_X2_1", "shortDesc": "Accelerometer offset temperature ^2 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A2_X2_2", "shortDesc": "Accelerometer offset temperature ^2 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A2_X3_0", "shortDesc": "Accelerometer offset temperature ^3 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A2_X3_1", "shortDesc": "Accelerometer offset temperature ^3 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A2_X3_2", "shortDesc": "Accelerometer offset temperature ^3 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0, "group": "Thermal Compensation", "name": "TC_A3_ID", "shortDesc": "ID of Accelerometer that the calibration is for", "type": "Int32"}, {"category": "System", "default": 100.0, "group": "Thermal Compensation", "name": "TC_A3_TMAX", "shortDesc": "Accelerometer calibration maximum temperature", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A3_TMIN", "shortDesc": "Accelerometer calibration minimum temperature", "type": "Float"}, {"category": "System", "default": 25.0, "group": "Thermal Compensation", "name": "TC_A3_TREF", "shortDesc": "Accelerometer calibration reference temperature", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A3_X0_0", "shortDesc": "Accelerometer offset temperature ^0 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A3_X0_1", "shortDesc": "Accelerometer offset temperature ^0 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A3_X0_2", "shortDesc": "Accelerometer offset temperature ^0 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A3_X1_0", "shortDesc": "Accelerometer offset temperature ^1 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A3_X1_1", "shortDesc": "Accelerometer offset temperature ^1 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A3_X1_2", "shortDesc": "Accelerometer offset temperature ^1 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A3_X2_0", "shortDesc": "Accelerometer offset temperature ^2 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A3_X2_1", "shortDesc": "Accelerometer offset temperature ^2 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A3_X2_2", "shortDesc": "Accelerometer offset temperature ^2 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A3_X3_0", "shortDesc": "Accelerometer offset temperature ^3 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A3_X3_1", "shortDesc": "Accelerometer offset temperature ^3 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_A3_X3_2", "shortDesc": "Accelerometer offset temperature ^3 polynomial coefficient - Z axis", "type": "Float"}, {"category": "Standard", "default": 0, "group": "Thermal Compensation", "name": "TC_A_ENABLE", "rebootRequired": true, "shortDesc": "Thermal compensation for accelerometer sensors", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "System", "default": 0, "group": "Thermal Compensation", "name": "TC_B0_ID", "shortDesc": "ID of Barometer that the calibration is for", "type": "Int32"}, {"category": "System", "default": 75.0, "group": "Thermal Compensation", "name": "TC_B0_TMAX", "shortDesc": "Barometer calibration maximum temperature", "type": "Float"}, {"category": "System", "default": 5.0, "group": "Thermal Compensation", "name": "TC_B0_TMIN", "shortDesc": "Barometer calibration minimum temperature", "type": "Float"}, {"category": "System", "default": 40.0, "group": "Thermal Compensation", "name": "TC_B0_TREF", "shortDesc": "Barometer calibration reference temperature", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_B0_X0", "shortDesc": "Barometer offset temperature ^0 polynomial coefficient", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_B0_X1", "shortDesc": "Barometer offset temperature ^1 polynomial coefficients", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_B0_X2", "shortDesc": "Barometer offset temperature ^2 polynomial coefficient", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_B0_X3", "shortDesc": "Barometer offset temperature ^3 polynomial coefficient", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_B0_X4", "shortDesc": "Barometer offset temperature ^4 polynomial coefficient", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_B0_X5", "shortDesc": "Barometer offset temperature ^5 polynomial coefficient", "type": "Float"}, {"category": "System", "default": 0, "group": "Thermal Compensation", "name": "TC_B1_ID", "shortDesc": "ID of Barometer that the calibration is for", "type": "Int32"}, {"category": "System", "default": 75.0, "group": "Thermal Compensation", "name": "TC_B1_TMAX", "shortDesc": "Barometer calibration maximum temperature", "type": "Float"}, {"category": "System", "default": 5.0, "group": "Thermal Compensation", "name": "TC_B1_TMIN", "shortDesc": "Barometer calibration minimum temperature", "type": "Float"}, {"category": "System", "default": 40.0, "group": "Thermal Compensation", "name": "TC_B1_TREF", "shortDesc": "Barometer calibration reference temperature", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_B1_X0", "shortDesc": "Barometer offset temperature ^0 polynomial coefficient", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_B1_X1", "shortDesc": "Barometer offset temperature ^1 polynomial coefficients", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_B1_X2", "shortDesc": "Barometer offset temperature ^2 polynomial coefficient", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_B1_X3", "shortDesc": "Barometer offset temperature ^3 polynomial coefficient", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_B1_X4", "shortDesc": "Barometer offset temperature ^4 polynomial coefficient", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_B1_X5", "shortDesc": "Barometer offset temperature ^5 polynomial coefficient", "type": "Float"}, {"category": "System", "default": 0, "group": "Thermal Compensation", "name": "TC_B2_ID", "shortDesc": "ID of Barometer that the calibration is for", "type": "Int32"}, {"category": "System", "default": 75.0, "group": "Thermal Compensation", "name": "TC_B2_TMAX", "shortDesc": "Barometer calibration maximum temperature", "type": "Float"}, {"category": "System", "default": 5.0, "group": "Thermal Compensation", "name": "TC_B2_TMIN", "shortDesc": "Barometer calibration minimum temperature", "type": "Float"}, {"category": "System", "default": 40.0, "group": "Thermal Compensation", "name": "TC_B2_TREF", "shortDesc": "Barometer calibration reference temperature", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_B2_X0", "shortDesc": "Barometer offset temperature ^0 polynomial coefficient", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_B2_X1", "shortDesc": "Barometer offset temperature ^1 polynomial coefficients", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_B2_X2", "shortDesc": "Barometer offset temperature ^2 polynomial coefficient", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_B2_X3", "shortDesc": "Barometer offset temperature ^3 polynomial coefficient", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_B2_X4", "shortDesc": "Barometer offset temperature ^4 polynomial coefficient", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_B2_X5", "shortDesc": "Barometer offset temperature ^5 polynomial coefficient", "type": "Float"}, {"category": "System", "default": 0, "group": "Thermal Compensation", "name": "TC_B3_ID", "shortDesc": "ID of Barometer that the calibration is for", "type": "Int32"}, {"category": "System", "default": 75.0, "group": "Thermal Compensation", "name": "TC_B3_TMAX", "shortDesc": "Barometer calibration maximum temperature", "type": "Float"}, {"category": "System", "default": 5.0, "group": "Thermal Compensation", "name": "TC_B3_TMIN", "shortDesc": "Barometer calibration minimum temperature", "type": "Float"}, {"category": "System", "default": 40.0, "group": "Thermal Compensation", "name": "TC_B3_TREF", "shortDesc": "Barometer calibration reference temperature", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_B3_X0", "shortDesc": "Barometer offset temperature ^0 polynomial coefficient", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_B3_X1", "shortDesc": "Barometer offset temperature ^1 polynomial coefficients", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_B3_X2", "shortDesc": "Barometer offset temperature ^2 polynomial coefficient", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_B3_X3", "shortDesc": "Barometer offset temperature ^3 polynomial coefficient", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_B3_X4", "shortDesc": "Barometer offset temperature ^4 polynomial coefficient", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_B3_X5", "shortDesc": "Barometer offset temperature ^5 polynomial coefficient", "type": "Float"}, {"category": "Standard", "default": 0, "group": "Thermal Compensation", "name": "TC_B_ENABLE", "rebootRequired": true, "shortDesc": "Thermal compensation for barometric pressure sensors", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "System", "default": 0, "group": "Thermal Compensation", "name": "TC_G0_ID", "shortDesc": "ID of Gyro that the calibration is for", "type": "Int32"}, {"category": "System", "default": 100.0, "group": "Thermal Compensation", "name": "TC_G0_TMAX", "shortDesc": "Gyro calibration maximum temperature", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G0_TMIN", "shortDesc": "Gyro calibration minimum temperature", "type": "Float"}, {"category": "System", "default": 25.0, "group": "Thermal Compensation", "name": "TC_G0_TREF", "shortDesc": "Gyro calibration reference temperature", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G0_X0_0", "shortDesc": "Gyro rate offset temperature ^0 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G0_X0_1", "shortDesc": "Gyro rate offset temperature ^0 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G0_X0_2", "shortDesc": "Gyro rate offset temperature ^0 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G0_X1_0", "shortDesc": "Gyro rate offset temperature ^1 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G0_X1_1", "shortDesc": "Gyro rate offset temperature ^1 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G0_X1_2", "shortDesc": "Gyro rate offset temperature ^1 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G0_X2_0", "shortDesc": "Gyro rate offset temperature ^2 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G0_X2_1", "shortDesc": "Gyro rate offset temperature ^2 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G0_X2_2", "shortDesc": "Gyro rate offset temperature ^2 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G0_X3_0", "shortDesc": "Gyro rate offset temperature ^3 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G0_X3_1", "shortDesc": "Gyro rate offset temperature ^3 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G0_X3_2", "shortDesc": "Gyro rate offset temperature ^3 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0, "group": "Thermal Compensation", "name": "TC_G1_ID", "shortDesc": "ID of Gyro that the calibration is for", "type": "Int32"}, {"category": "System", "default": 100.0, "group": "Thermal Compensation", "name": "TC_G1_TMAX", "shortDesc": "Gyro calibration maximum temperature", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G1_TMIN", "shortDesc": "Gyro calibration minimum temperature", "type": "Float"}, {"category": "System", "default": 25.0, "group": "Thermal Compensation", "name": "TC_G1_TREF", "shortDesc": "Gyro calibration reference temperature", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G1_X0_0", "shortDesc": "Gyro rate offset temperature ^0 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G1_X0_1", "shortDesc": "Gyro rate offset temperature ^0 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G1_X0_2", "shortDesc": "Gyro rate offset temperature ^0 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G1_X1_0", "shortDesc": "Gyro rate offset temperature ^1 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G1_X1_1", "shortDesc": "Gyro rate offset temperature ^1 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G1_X1_2", "shortDesc": "Gyro rate offset temperature ^1 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G1_X2_0", "shortDesc": "Gyro rate offset temperature ^2 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G1_X2_1", "shortDesc": "Gyro rate offset temperature ^2 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G1_X2_2", "shortDesc": "Gyro rate offset temperature ^2 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G1_X3_0", "shortDesc": "Gyro rate offset temperature ^3 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G1_X3_1", "shortDesc": "Gyro rate offset temperature ^3 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G1_X3_2", "shortDesc": "Gyro rate offset temperature ^3 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0, "group": "Thermal Compensation", "name": "TC_G2_ID", "shortDesc": "ID of Gyro that the calibration is for", "type": "Int32"}, {"category": "System", "default": 100.0, "group": "Thermal Compensation", "name": "TC_G2_TMAX", "shortDesc": "Gyro calibration maximum temperature", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G2_TMIN", "shortDesc": "Gyro calibration minimum temperature", "type": "Float"}, {"category": "System", "default": 25.0, "group": "Thermal Compensation", "name": "TC_G2_TREF", "shortDesc": "Gyro calibration reference temperature", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G2_X0_0", "shortDesc": "Gyro rate offset temperature ^0 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G2_X0_1", "shortDesc": "Gyro rate offset temperature ^0 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G2_X0_2", "shortDesc": "Gyro rate offset temperature ^0 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G2_X1_0", "shortDesc": "Gyro rate offset temperature ^1 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G2_X1_1", "shortDesc": "Gyro rate offset temperature ^1 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G2_X1_2", "shortDesc": "Gyro rate offset temperature ^1 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G2_X2_0", "shortDesc": "Gyro rate offset temperature ^2 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G2_X2_1", "shortDesc": "Gyro rate offset temperature ^2 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G2_X2_2", "shortDesc": "Gyro rate offset temperature ^2 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G2_X3_0", "shortDesc": "Gyro rate offset temperature ^3 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G2_X3_1", "shortDesc": "Gyro rate offset temperature ^3 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G2_X3_2", "shortDesc": "Gyro rate offset temperature ^3 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0, "group": "Thermal Compensation", "name": "TC_G3_ID", "shortDesc": "ID of Gyro that the calibration is for", "type": "Int32"}, {"category": "System", "default": 100.0, "group": "Thermal Compensation", "name": "TC_G3_TMAX", "shortDesc": "Gyro calibration maximum temperature", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G3_TMIN", "shortDesc": "Gyro calibration minimum temperature", "type": "Float"}, {"category": "System", "default": 25.0, "group": "Thermal Compensation", "name": "TC_G3_TREF", "shortDesc": "Gyro calibration reference temperature", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G3_X0_0", "shortDesc": "Gyro rate offset temperature ^0 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G3_X0_1", "shortDesc": "Gyro rate offset temperature ^0 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G3_X0_2", "shortDesc": "Gyro rate offset temperature ^0 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G3_X1_0", "shortDesc": "Gyro rate offset temperature ^1 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G3_X1_1", "shortDesc": "Gyro rate offset temperature ^1 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G3_X1_2", "shortDesc": "Gyro rate offset temperature ^1 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G3_X2_0", "shortDesc": "Gyro rate offset temperature ^2 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G3_X2_1", "shortDesc": "Gyro rate offset temperature ^2 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G3_X2_2", "shortDesc": "Gyro rate offset temperature ^2 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G3_X3_0", "shortDesc": "Gyro rate offset temperature ^3 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G3_X3_1", "shortDesc": "Gyro rate offset temperature ^3 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_G3_X3_2", "shortDesc": "Gyro rate offset temperature ^3 polynomial coefficient - Z axis", "type": "Float"}, {"category": "Standard", "default": 0, "group": "Thermal Compensation", "name": "TC_G_ENABLE", "rebootRequired": true, "shortDesc": "Thermal compensation for rate gyro sensors", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "System", "default": 0, "group": "Thermal Compensation", "name": "TC_M0_ID", "shortDesc": "ID of Magnetometer that the calibration is for", "type": "Int32"}, {"category": "System", "default": 100.0, "group": "Thermal Compensation", "name": "TC_M0_TMAX", "shortDesc": "Magnetometer calibration maximum temperature", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M0_TMIN", "shortDesc": "Magnetometer calibration minimum temperature", "type": "Float"}, {"category": "System", "default": 25.0, "group": "Thermal Compensation", "name": "TC_M0_TREF", "shortDesc": "Magnetometer calibration reference temperature", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M0_X0_0", "shortDesc": "Magnetometer offset temperature ^0 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M0_X0_1", "shortDesc": "Magnetometer offset temperature ^0 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M0_X0_2", "shortDesc": "Magnetometer offset temperature ^0 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M0_X1_0", "shortDesc": "Magnetometer offset temperature ^1 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M0_X1_1", "shortDesc": "Magnetometer offset temperature ^1 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M0_X1_2", "shortDesc": "Magnetometer offset temperature ^1 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M0_X2_0", "shortDesc": "Magnetometer offset temperature ^2 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M0_X2_1", "shortDesc": "Magnetometer offset temperature ^2 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M0_X2_2", "shortDesc": "Magnetometer offset temperature ^2 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M0_X3_0", "shortDesc": "Magnetometer offset temperature ^3 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M0_X3_1", "shortDesc": "Magnetometer offset temperature ^3 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M0_X3_2", "shortDesc": "Magnetometer offset temperature ^3 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0, "group": "Thermal Compensation", "name": "TC_M1_ID", "shortDesc": "ID of Magnetometer that the calibration is for", "type": "Int32"}, {"category": "System", "default": 100.0, "group": "Thermal Compensation", "name": "TC_M1_TMAX", "shortDesc": "Magnetometer calibration maximum temperature", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M1_TMIN", "shortDesc": "Magnetometer calibration minimum temperature", "type": "Float"}, {"category": "System", "default": 25.0, "group": "Thermal Compensation", "name": "TC_M1_TREF", "shortDesc": "Magnetometer calibration reference temperature", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M1_X0_0", "shortDesc": "Magnetometer offset temperature ^0 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M1_X0_1", "shortDesc": "Magnetometer offset temperature ^0 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M1_X0_2", "shortDesc": "Magnetometer offset temperature ^0 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M1_X1_0", "shortDesc": "Magnetometer offset temperature ^1 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M1_X1_1", "shortDesc": "Magnetometer offset temperature ^1 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M1_X1_2", "shortDesc": "Magnetometer offset temperature ^1 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M1_X2_0", "shortDesc": "Magnetometer offset temperature ^2 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M1_X2_1", "shortDesc": "Magnetometer offset temperature ^2 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M1_X2_2", "shortDesc": "Magnetometer offset temperature ^2 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M1_X3_0", "shortDesc": "Magnetometer offset temperature ^3 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M1_X3_1", "shortDesc": "Magnetometer offset temperature ^3 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M1_X3_2", "shortDesc": "Magnetometer offset temperature ^3 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0, "group": "Thermal Compensation", "name": "TC_M2_ID", "shortDesc": "ID of Magnetometer that the calibration is for", "type": "Int32"}, {"category": "System", "default": 100.0, "group": "Thermal Compensation", "name": "TC_M2_TMAX", "shortDesc": "Magnetometer calibration maximum temperature", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M2_TMIN", "shortDesc": "Magnetometer calibration minimum temperature", "type": "Float"}, {"category": "System", "default": 25.0, "group": "Thermal Compensation", "name": "TC_M2_TREF", "shortDesc": "Magnetometer calibration reference temperature", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M2_X0_0", "shortDesc": "Magnetometer offset temperature ^0 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M2_X0_1", "shortDesc": "Magnetometer offset temperature ^0 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M2_X0_2", "shortDesc": "Magnetometer offset temperature ^0 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M2_X1_0", "shortDesc": "Magnetometer offset temperature ^1 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M2_X1_1", "shortDesc": "Magnetometer offset temperature ^1 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M2_X1_2", "shortDesc": "Magnetometer offset temperature ^1 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M2_X2_0", "shortDesc": "Magnetometer offset temperature ^2 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M2_X2_1", "shortDesc": "Magnetometer offset temperature ^2 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M2_X2_2", "shortDesc": "Magnetometer offset temperature ^2 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M2_X3_0", "shortDesc": "Magnetometer offset temperature ^3 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M2_X3_1", "shortDesc": "Magnetometer offset temperature ^3 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M2_X3_2", "shortDesc": "Magnetometer offset temperature ^3 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0, "group": "Thermal Compensation", "name": "TC_M3_ID", "shortDesc": "ID of Magnetometer that the calibration is for", "type": "Int32"}, {"category": "System", "default": 100.0, "group": "Thermal Compensation", "name": "TC_M3_TMAX", "shortDesc": "Magnetometer calibration maximum temperature", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M3_TMIN", "shortDesc": "Magnetometer calibration minimum temperature", "type": "Float"}, {"category": "System", "default": 25.0, "group": "Thermal Compensation", "name": "TC_M3_TREF", "shortDesc": "Magnetometer calibration reference temperature", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M3_X0_0", "shortDesc": "Magnetometer offset temperature ^0 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M3_X0_1", "shortDesc": "Magnetometer offset temperature ^0 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M3_X0_2", "shortDesc": "Magnetometer offset temperature ^0 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M3_X1_0", "shortDesc": "Magnetometer offset temperature ^1 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M3_X1_1", "shortDesc": "Magnetometer offset temperature ^1 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M3_X1_2", "shortDesc": "Magnetometer offset temperature ^1 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M3_X2_0", "shortDesc": "Magnetometer offset temperature ^2 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M3_X2_1", "shortDesc": "Magnetometer offset temperature ^2 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M3_X2_2", "shortDesc": "Magnetometer offset temperature ^2 polynomial coefficient - Z axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M3_X3_0", "shortDesc": "Magnetometer offset temperature ^3 polynomial coefficient - X axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M3_X3_1", "shortDesc": "Magnetometer offset temperature ^3 polynomial coefficient - Y axis", "type": "Float"}, {"category": "System", "default": 0.0, "group": "Thermal Compensation", "name": "TC_M3_X3_2", "shortDesc": "Magnetometer offset temperature ^3 polynomial coefficient - Z axis", "type": "Float"}, {"category": "Standard", "default": 0, "group": "Thermal Compensation", "name": "TC_M_ENABLE", "rebootRequired": true, "shortDesc": "Thermal compensation for magnetometer sensors", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 12, "group": "UUV Attitude Control", "max": 16, "min": 0, "name": "UUV_HGT_B_DOWN", "shortDesc": "Height rc-button down", "type": "Int32"}, {"category": "Standard", "default": 11, "group": "UUV Attitude Control", "max": 16, "min": 0, "name": "UUV_HGT_B_UP", "shortDesc": "Height rc-button up", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "UUV Attitude Control", "name": "UUV_HGT_D", "shortDesc": "Height differential gain", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.2, "group": "UUV Attitude Control", "name": "UUV_HGT_I", "shortDesc": "Height integrational gain", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "UUV Attitude Control", "name": "UUV_HGT_I_SPD", "shortDesc": "sum speed of error for integrational gain", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.3, "group": "UUV Attitude Control", "longDesc": "maximum Height distance controlled by manual input. Diff between actual and desired Height cannot be higher than that\n", "name": "UUV_HGT_MAX_DIFF", "shortDesc": "Max height error from manual input", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "UUV Attitude Control", "name": "UUV_HGT_P", "shortDesc": "Height proportional gain", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "UUV Attitude Control", "name": "UUV_HGT_STR", "shortDesc": "Height change strength from manual input", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.05, "group": "UUV Attitude Control", "min": 0.0, "name": "UUV_MGM_PITCH", "shortDesc": "Pitch gain for manual inputs in manual control mode", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.05, "group": "UUV Attitude Control", "min": 0.0, "name": "UUV_MGM_ROLL", "shortDesc": "Roll gain for manual inputs in manual control mode", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.1, "group": "UUV Attitude Control", "min": 0.0, "name": "UUV_MGM_THRTL", "shortDesc": "Throttle gain for manual inputs in manual control mode", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.05, "group": "UUV Attitude Control", "min": 0.0, "name": "UUV_MGM_YAW", "shortDesc": "Yaw gain for manual inputs in manual control mode", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 2.0, "group": "UUV Attitude Control", "name": "UUV_PITCH_D", "shortDesc": "Pitch differential gain", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 4.0, "group": "UUV Attitude Control", "name": "UUV_PITCH_P", "shortDesc": "Pitch proportional gain", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 100.0, "group": "UUV Attitude Control", "min": 0.0, "name": "UUV_RGM_PITCH", "shortDesc": "Pitch gain for manual inputs in rate control mode", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 100.0, "group": "UUV Attitude Control", "min": 0.0, "name": "UUV_RGM_ROLL", "shortDesc": "Roll gain for manual inputs in rate control mode", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 10.0, "group": "UUV Attitude Control", "min": 0.0, "name": "UUV_RGM_THRTL", "shortDesc": "Throttle gain for manual inputs in rate control mode", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 100.0, "group": "UUV Attitude Control", "min": 0.0, "name": "UUV_RGM_YAW", "shortDesc": "Yaw gain for manual inputs in rate control mode", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 1.5, "group": "UUV Attitude Control", "name": "UUV_ROLL_D", "shortDesc": "Roll differential gain", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 4.0, "group": "UUV Attitude Control", "name": "UUV_ROLL_P", "shortDesc": "Roll proportional gain", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.5, "group": "UUV Attitude Control", "min": 0.0, "name": "UUV_SGM_PITCH", "shortDesc": "Pitch gain for manual inputs in attitude control mode", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.5, "group": "UUV Attitude Control", "min": 0.0, "name": "UUV_SGM_ROLL", "shortDesc": "Roll gain for manual inputs in attitude control mode", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.1, "group": "UUV Attitude Control", "min": 0.0, "name": "UUV_SGM_THRTL", "shortDesc": "Throttle gain for manual inputs in attitude control mode", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.5, "group": "UUV Attitude Control", "min": 0.0, "name": "UUV_SGM_YAW", "shortDesc": "Yaw gain for manual inputs in attitude control mode", "type": "Float"}, {"category": "Standard", "default": 2.0, "group": "UUV Attitude Control", "name": "UUV_SP_MAX_AGE", "shortDesc": "Maximum time (in seconds) before resetting setpoint", "type": "Float"}, {"category": "Standard", "default": 0, "group": "UUV Attitude Control", "longDesc": "Stick mode selector (0=Heave/sway control, roll/pitch leveled; 1=Pitch/roll control)\n", "max": 1, "min": 0, "name": "UUV_STICK_MODE", "shortDesc": "UUV stick input mode", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.1, "group": "UUV Attitude Control", "max": 1.0, "min": 0.0, "name": "UUV_THRUST_SAT", "shortDesc": "UUV Thrust setpoint Saturation", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.3, "group": "UUV Attitude Control", "max": 1.0, "min": 0.0, "name": "UUV_TORQUE_SAT", "shortDesc": "UUV Torque setpoint Saturation", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 2.0, "group": "UUV Attitude Control", "name": "UUV_YAW_D", "shortDesc": "Yaw differential gain", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 4.0, "group": "UUV Attitude Control", "name": "UUV_YAW_P", "shortDesc": "Yawh proportional gain", "type": "Float"}, {"category": "Standard", "default": 0.2, "group": "UUV Position Control", "name": "UUV_GAIN_X_D", "shortDesc": "Gain of D controller X", "type": "Float"}, {"category": "Standard", "default": 1.0, "group": "UUV Position Control", "name": "UUV_GAIN_X_P", "shortDesc": "Gain of P controller X", "type": "Float"}, {"category": "Standard", "default": 0.2, "group": "UUV Position Control", "name": "UUV_GAIN_Y_D", "shortDesc": "Gain of D controller Y", "type": "Float"}, {"category": "Standard", "default": 1.0, "group": "UUV Position Control", "name": "UUV_GAIN_Y_P", "shortDesc": "Gain of P controller Y", "type": "Float"}, {"category": "Standard", "default": 0.2, "group": "UUV Position Control", "name": "UUV_GAIN_Z_D", "shortDesc": "Gain of D controller Z", "type": "Float"}, {"category": "Standard", "default": 1.0, "group": "UUV Position Control", "name": "UUV_GAIN_Z_P", "shortDesc": "Gain of P controller Z", "type": "Float"}, {"category": "Standard", "default": 0.5, "group": "UUV Position Control", "name": "UUV_PGM_VEL", "shortDesc": "Gain for position control velocity setpoint update", "type": "Float"}, {"category": "Standard", "default": 1, "group": "UUV Position Control", "name": "UUV_POS_MODE", "shortDesc": "Stabilization mode(1) or Position Control(0)", "type": "Int32", "values": [{"description": "Moves position setpoint in world frame", "value": 0}, {"description": "Moves position setpoint in body frame", "value": 1}]}, {"category": "Standard", "default": 0.1, "group": "UUV Position Control", "name": "UUV_POS_STICK_DB", "shortDesc": "Deadband for changing position setpoint", "type": "Float"}, {"category": "Standard", "default": 1, "group": "UUV Position Control", "name": "UUV_STAB_MODE", "shortDesc": "Stabilization mode(1) or Position Control(0)", "type": "Int32", "values": [{"description": "Tracks previous attitude setpoint", "value": 0}, {"description": "Tracks horizontal attitude (allows yaw change)", "value": 1}]}, {"category": "Standard", "default": 2130706433, "group": "UXRCE-DDS Client", "longDesc": "If ethernet is enabled and is the selected configuration for uXRCE-DDS,\nthe selected Agent IP address will be set and used.\nDecimal dot notation is not supported. IP address must be provided\nin int32 format. For example, 192.168.1.2 is mapped to -1062731518;\n127.0.0.1 is mapped to 2130706433.\n\n", "name": "UXRCE_DDS_AG_IP", "rebootRequired": true, "shortDesc": "uXRCE-DDS Agent IP address", "type": "Int32"}, {"category": "System", "default": 0, "group": "UXRCE-DDS Client", "longDesc": "uXRCE-DDS domain ID\n", "name": "UXRCE_DDS_DOM_ID", "rebootRequired": true, "shortDesc": "uXRCE-DDS domain ID", "type": "Int32"}, {"category": "System", "default": 0, "group": "UXRCE-DDS Client", "longDesc": "This is used to enable flow control for the serial uXRCE instance.\nUsed for reliable high bandwidth communication.\n\n", "name": "UXRCE_DDS_FLCTRL", "rebootRequired": true, "shortDesc": "Enable serial flow control for UXRCE interface", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "System", "default": 1, "group": "UXRCE-DDS Client", "longDesc": "uXRCE-DDS key, must be different from zero.\nIn a single agent - multi client configuration, each client\nmust have a unique session key.\n\n", "name": "UXRCE_DDS_KEY", "rebootRequired": true, "shortDesc": "uXRCE-DDS session key", "type": "Int32"}, {"category": "System", "default": -1, "group": "UXRCE-DDS Client", "longDesc": "Defines an index-based namespace for DDS messages, e.g, uav_0, uav_1, up to uav_9999\nA value less than zero leaves the namespace empty\n\n", "max": 9999, "min": -1, "name": "UXRCE_DDS_NS_IDX", "rebootRequired": true, "shortDesc": "Define an index-based message namespace", "type": "Int32"}, {"category": "Standard", "default": 8888, "group": "UXRCE-DDS Client", "longDesc": "If ethernet is enabled and is the selected configuration for uXRCE-DDS,\nthe selected UDP port will be set and used.\n\n", "max": 65535, "min": 0, "name": "UXRCE_DDS_PRT", "rebootRequired": true, "shortDesc": "uXRCE-DDS UDP port", "type": "Int32"}, {"category": "System", "default": 0, "group": "UXRCE-DDS Client", "longDesc": "Set the participant configuration on the Agent's system.\n0: Use the default configuration.\n1: Restrict messages to localhost\n(use in combination with ROS_LOCALHOST_ONLY=1).\n2: Use a custom participant with the profile name \"px4_participant\".\n\n", "max": 2, "min": 0, "name": "UXRCE_DDS_PTCFG", "rebootRequired": true, "shortDesc": "uXRCE-DDS participant configuration", "type": "Int32", "values": [{"description": "Default", "value": 0}, {"description": "Localhost-only", "value": 1}, {"description": "Custom participant", "value": 2}]}, {"category": "System", "default": -1, "group": "UXRCE-DDS Client", "longDesc": "Specifies after how many seconds without receiving data the DDS connection is reestablished.\nA value less than one disables the RX rate timeout.\n\n", "name": "UXRCE_DDS_RX_TO", "rebootRequired": true, "shortDesc": "RX rate timeout configuration", "type": "Int32", "units": "s"}, {"category": "System", "default": 0, "group": "UXRCE-DDS Client", "longDesc": "When enabled along with UXRCE_DDS_SYNCT, uxrce_dds_client will set the system clock using the agents UTC timestamp.\n", "name": "UXRCE_DDS_SYNCC", "rebootRequired": true, "shortDesc": "Enable uXRCE-DDS system clock synchronization", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "System", "default": 1, "group": "UXRCE-DDS Client", "longDesc": "When enabled, uxrce_dds_client will synchronize the timestamps of the incoming and outgoing messages measuring the offset between the Agent OS time and the PX4 time.\n", "name": "UXRCE_DDS_SYNCT", "rebootRequired": true, "shortDesc": "Enable uXRCE-DDS timestamp synchronization", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "System", "default": 3, "group": "UXRCE-DDS Client", "longDesc": "Specifies after how many seconds without sending data the DDS connection is reestablished.\nA value less than one disables the TX rate timeout.\n\n", "name": "UXRCE_DDS_TX_TO", "rebootRequired": true, "shortDesc": "TX rate timeout configuration", "type": "Int32", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 8.0, "group": "VTOL Attitude Control", "increment": 1.0, "longDesc": "Airspeed at which we can start blending both fw and mc controls. Set to 0 to disable.\n", "max": 30.0, "min": 0.0, "name": "VT_ARSP_BLEND", "shortDesc": "Transition blending airspeed", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 10.0, "group": "VTOL Attitude Control", "increment": 1.0, "longDesc": "Airspeed at which we can switch to fw mode\n", "max": 30.0, "min": 0.0, "name": "VT_ARSP_TRANS", "shortDesc": "Transition airspeed", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 1.0, "group": "VTOL Attitude Control", "increment": 0.1, "longDesc": "Time in seconds it takes to tilt form VT_TILT_FW to VT_TILT_MC.\n", "max": 10.0, "min": 0.1, "name": "VT_BT_TILT_DUR", "shortDesc": "Duration motor tilt up in backtransition", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.1, "group": "VTOL Attitude Control", "increment": 0.05, "max": 0.3, "min": 0.0, "name": "VT_B_DEC_I", "shortDesc": "Backtransition deceleration setpoint to tilt I gain", "type": "Float", "units": "rad s/m"}, {"category": "Standard", "decimalPlaces": 2, "default": 2.0, "group": "VTOL Attitude Control", "increment": 0.1, "longDesc": "Used to calculate back transition distance in an auto mode.\nFor standard vtol and tiltrotors a controller is used to track this value during the transition.\n", "max": 10.0, "min": 0.5, "name": "VT_B_DEC_MSS", "shortDesc": "Approximate deceleration during back transition", "type": "Float", "units": "m/s^2"}, {"category": "Standard", "decimalPlaces": 2, "default": 10.0, "group": "VTOL Attitude Control", "increment": 1.0, "longDesc": "Transition is also declared over if the groundspeed drops below MPC_XY_CRUISE.\n", "max": 20.0, "min": 0.1, "name": "VT_B_TRANS_DUR", "shortDesc": "Maximum duration of a back transition", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 1, "default": 3.0, "group": "VTOL Attitude Control", "increment": 0.1, "longDesc": "This sets the duration during which the MC motors ramp up to the commanded thrust during the back transition stage.\n", "max": 20.0, "min": 0.0, "name": "VT_B_TRANS_RAMP", "shortDesc": "Back transition MC motor ramp up time", "type": "Float", "units": "s"}, {"category": "Standard", "default": 1, "group": "VTOL Attitude Control", "longDesc": "If set to 1 the control surfaces are locked at the disarmed value in multicopter mode.\n", "name": "VT_ELEV_MC_LOCK", "shortDesc": "Lock control surfaces in hover", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 0, "group": "VTOL Attitude Control", "longDesc": "Prevents downforce from pitching the body down when facing wind.\nUses puller/pusher (standard VTOL), or forward-tilt (tiltrotor VTOL) to accelerate forward instead.\nOnly active if demanded pitch is below VT_PITCH_MIN.\nUse VT_FWD_THRUST_SC to tune it.\nDescend mode is treated as Landing too.\n\nOnly active (if enabled) in height-rate controlled modes.\n", "name": "VT_FWD_THRUST_EN", "shortDesc": "Use fixed-wing actuation in hover to accelerate forward", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled (except LANDING)", "value": 1}, {"description": "Enabled if above MPC_LAND_ALT1", "value": 2}, {"description": "Enabled if above MPC_LAND_ALT2", "value": 3}, {"description": "Enabled constantly", "value": 4}, {"description": "Enabled if above MPC_LAND_ALT1 (except LANDING)", "value": 5}, {"description": "Enabled if above MPC_LAND_ALT2 (except LANDING)", "value": 6}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.7, "group": "VTOL Attitude Control", "increment": 0.01, "longDesc": "Scale applied to the demanded pitch (below VT_PITCH_MIN) to get the fixed-wing forward actuation in hover mode.\nEnabled via VT_FWD_THRUST_EN.\n", "max": 5.0, "min": 0.0, "name": "VT_FWD_THRUST_SC", "shortDesc": "Fixed-wing actuation thrust scale in hover", "type": "Float"}, {"bitmask": [{"description": "Yaw", "index": 0}, {"description": "Roll", "index": 1}, {"description": "Pitch", "index": 2}], "category": "Standard", "default": 0, "group": "VTOL Attitude Control", "longDesc": "Enable differential thrust separately for roll, pitch, yaw in forward (fixed-wing) mode.\nThe effectiveness of differential thrust around the corresponding axis can be\ntuned by setting VT_FW_DIFTHR_S_R / VT_FW_DIFTHR_S_P / VT_FW_DIFTHR_S_Y.\n", "max": 7, "min": 0, "name": "VT_FW_DIFTHR_EN", "shortDesc": "Differential thrust in forwards flight", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "VTOL Attitude Control", "increment": 0.1, "longDesc": "Differential thrust in forward flight is enabled via VT_FW_DIFTHR_EN.\n", "max": 2.0, "min": 0.0, "name": "VT_FW_DIFTHR_S_P", "shortDesc": "Pitch differential thrust factor in forward flight", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "VTOL Attitude Control", "increment": 0.1, "longDesc": "Differential thrust in forward flight is enabled via VT_FW_DIFTHR_EN.\n", "max": 2.0, "min": 0.0, "name": "VT_FW_DIFTHR_S_R", "shortDesc": "Roll differential thrust factor in forward flight", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.1, "group": "VTOL Attitude Control", "increment": 0.1, "longDesc": "Differential thrust in forward flight is enabled via VT_FW_DIFTHR_EN.\n", "max": 2.0, "min": 0.0, "name": "VT_FW_DIFTHR_S_Y", "shortDesc": "Yaw differential thrust factor in forward flight", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "VTOL Attitude Control", "increment": 1.0, "longDesc": "Minimum altitude for fixed-wing flight. When the vehicle is in fixed-wing mode\nand the altitude drops below this altitude (relative altitude above local origin),\nit will instantly switch back to MC mode and execute behavior defined in COM_QC_ACT.\n", "max": 200.0, "min": 0.0, "name": "VT_FW_MIN_ALT", "shortDesc": "Quad-chute altitude", "type": "Float", "units": "m"}, {"category": "Standard", "default": 0, "group": "VTOL Attitude Control", "increment": 1, "longDesc": "Maximum height above the ground (if available, otherwise above\nHome if available, otherwise above the local origin) where triggering a quad-chute is possible.\nAt high altitudes there is a big risk to deplete the battery and therefore crash if quad-chuting there.\n", "min": 0, "name": "VT_FW_QC_HMAX", "shortDesc": "Quad-chute maximum height", "type": "Int32", "units": "m"}, {"category": "Standard", "default": 0, "group": "VTOL Attitude Control", "longDesc": "Absolute pitch threshold for quad-chute triggering in FW mode.\nAbove this the vehicle will transition back to MC mode and execute behavior defined in COM_QC_ACT.\nSet to 0 do disable this threshold.\n", "max": 180, "min": 0, "name": "VT_FW_QC_P", "shortDesc": "Quad-chute max pitch threshold", "type": "Int32", "units": "deg"}, {"category": "Standard", "default": 0, "group": "VTOL Attitude Control", "longDesc": "Absolute roll threshold for quad-chute triggering in FW mode.\nAbove this the vehicle will transition back to MC mode and execute behavior defined in COM_QC_ACT.\nSet to 0 do disable this threshold.\n", "max": 180, "min": 0, "name": "VT_FW_QC_R", "shortDesc": "Quad-chute max roll threshold", "type": "Int32", "units": "deg"}, {"category": "Standard", "decimalPlaces": 2, "default": 5.0, "group": "VTOL Attitude Control", "increment": 1.0, "longDesc": "Time in seconds used for a transition\n", "max": 20.0, "min": 0.1, "name": "VT_F_TRANS_DUR", "shortDesc": "Duration of a front transition", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 3, "default": 1.0, "group": "VTOL Attitude Control", "increment": 0.01, "max": 1.0, "min": 0.0, "name": "VT_F_TRANS_THR", "shortDesc": "Target throttle value for the transition to fixed-wing flight", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 6.0, "group": "VTOL Attitude Control", "increment": 0.5, "longDesc": "The duration of the front transition when there is no airspeed feedback available.\nWhen airspeed is used, transition timeout is declared if airspeed does not\nreach VT_ARSP_BLEND after this time.\n", "max": 30.0, "min": 1.0, "name": "VT_F_TR_OL_TM", "shortDesc": "Airspeed-less front transition time (open loop)", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "VTOL Attitude Control", "increment": 0.1, "longDesc": "Overrides VT_PITCH_MIN when the vehicle is in LAND mode (hovering).\nDuring landing it can be beneficial to reduce the pitch angle to reduce the generated lift in head wind.\n", "max": 45.0, "min": -10.0, "name": "VT_LND_PITCH_MIN", "shortDesc": "Minimum pitch angle during hover landing", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "VTOL Attitude Control", "increment": 0.1, "longDesc": "Any pitch setpoint below this value is translated to a forward force by the fixed-wing forward actuation if\nVT_FWD_TRHUST_EN is set.\n", "max": 45.0, "min": -10.0, "name": "VT_PITCH_MIN", "shortDesc": "Minimum pitch angle during hover", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.33, "group": "VTOL Attitude Control", "increment": 0.01, "longDesc": "Defines the slew rate of the puller/pusher throttle during transitions.\nZero will deactivate the slew rate limiting and thus produce an instant throttle\nrise to the transition throttle VT_F_TRANS_THR.\n", "min": 0.0, "name": "VT_PSHER_SLEW", "shortDesc": "Pusher throttle ramp up slew rate", "type": "Float", "units": "1/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "VTOL Attitude Control", "increment": 1.0, "longDesc": "Altitude error threshold for quad-chute triggering during fixed-wing flight.\nThe check is only active if altitude is controlled and the vehicle is below the current altitude reference.\nThe altitude error is relative to the highest altitude the vehicle has achieved since it has flown below the current\naltitude reference.\n\nSet to 0 do disable.\n", "max": 200.0, "min": 0.0, "name": "VT_QC_ALT_LOSS", "shortDesc": "Quad-chute uncommanded descent threshold", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 1, "default": 20.0, "group": "VTOL Attitude Control", "increment": 1.0, "longDesc": "Altitude loss threshold for quad-chute triggering during VTOL transition to fixed-wing flight\nin altitude-controlled flight modes.\nActive until 5s after completing transition to fixed-wing.\nIf the current altitude is more than this value below the altitude at the beginning of the\ntransition, it will instantly switch back to MC mode and execute behavior defined in COM_QC_ACT.\n\nSet to 0 do disable this threshold.\n", "max": 50.0, "min": 0.0, "name": "VT_QC_T_ALT_LOSS", "shortDesc": "Quad-chute transition altitude loss threshold", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "VTOL Attitude Control", "increment": 0.1, "max": 1.0, "min": -1.0, "name": "VT_SPOILER_MC_LD", "shortDesc": "Spoiler setting while landing (hover)", "type": "Float", "units": "norm"}, {"category": "Standard", "decimalPlaces": 3, "default": 1.0, "group": "VTOL Attitude Control", "increment": 0.01, "max": 1.0, "min": 0.0, "name": "VT_TILT_FW", "shortDesc": "Normalized tilt in FW", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "VTOL Attitude Control", "increment": 0.01, "max": 1.0, "min": 0.0, "name": "VT_TILT_MC", "shortDesc": "Normalized tilt in Hover", "type": "Float"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.4, "group": "VTOL Attitude Control", "increment": 0.01, "max": 1.0, "min": 0.0, "name": "VT_TILT_TRANS", "shortDesc": "Normalized tilt in transition to FW", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 2.0, "group": "VTOL Attitude Control", "increment": 0.1, "longDesc": "Minimum time in seconds for front transition.\n", "max": 20.0, "min": 0.0, "name": "VT_TRANS_MIN_TM", "shortDesc": "Front transition minimum time", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.5, "group": "VTOL Attitude Control", "increment": 0.01, "longDesc": "Time in seconds it takes to tilt form VT_TILT_TRANS to VT_TILT_FW.\n", "max": 5.0, "min": 0.1, "name": "VT_TRANS_P2_DUR", "shortDesc": "Duration of front transition phase 2", "type": "Float", "units": "s"}, {"category": "Standard", "decimalPlaces": 2, "default": 15.0, "group": "VTOL Attitude Control", "increment": 1.0, "longDesc": "Time in seconds after which transition will be cancelled.\n", "max": 30.0, "min": 0.1, "name": "VT_TRANS_TIMEOUT", "shortDesc": "Front transition timeout", "type": "Float", "units": "s"}, {"category": "Standard", "default": 0, "group": "VTOL Attitude Control", "max": 2, "min": 0, "name": "VT_TYPE", "rebootRequired": true, "shortDesc": "VTOL Type (Tailsitter=0, Tiltrotor=1, Standard=2)", "type": "Int32", "values": [{"description": "Tailsitter", "value": 0}, {"description": "Tiltrotor", "value": 1}, {"description": "Standard", "value": 2}]}, {"category": "Standard", "decimalPlaces": 3, "default": 1.0, "group": "VTOL Attitude Control", "increment": 0.01, "longDesc": "The desired gain to convert roll sp into yaw rate sp.\n", "max": 3.0, "min": 0.0, "name": "WV_GAIN", "shortDesc": "Weather-vane roll angle to yawrate", "type": "Float", "units": "Hz"}, {"category": "Standard", "decimalPlaces": 1, "default": 80.0, "group": "VTOL Takeoff", "increment": 1.0, "longDesc": "Altitude relative to home at which vehicle will loiter after front transition.\n", "max": 300.0, "min": 20.0, "name": "VTO_LOITER_ALT", "shortDesc": "VTOL Takeoff relative loiter altitude", "type": "Float", "units": "m"}], "translation": {"items": {"parameters": {"list": {"items": {"bitmask": {"list": {"key": "index", "translate": ["description"]}}, "values": {"list": {"key": "value", "translate": ["description"]}}}, "key": "name", "translate": ["shortDesc", "longDesc"], "translate-global": ["category", "group"]}}}}, "version": 1} \ No newline at end of file diff --git a/docs/uk/SUMMARY.md b/docs/uk/SUMMARY.md index f5b17caa3d..1ab34b0048 100644 --- a/docs/uk/SUMMARY.md +++ b/docs/uk/SUMMARY.md @@ -1,6 +1,8 @@ - [Введення](index.md) - [Основні поняття](getting_started/px4_basic_concepts.md) +- [Try PX4 (Simulation)](simulation/px4_simulation_quickstart.md) + - [Мультикоптери](frames_multicopter/index.md) - [Функції](features_mc/index.md) - [Режим польоту](flight_modes_mc/index.md) @@ -153,15 +155,11 @@ - [Wiring Quickstart](assembly/quick_start_pixhawk5x.md) - [Holybro Pixhawk 4 (FMUv5)](flight_controller/pixhawk4.md) - [Wiring Quickstart](assembly/quick_start_pixhawk4.md) - - [Holybro Pixhawk 4 Mini (FMUv5) - Припинено](flight_controller/pixhawk4_mini.md) - - [Wiring Quickstart](assembly/quick_start_pixhawk4_mini.md) - - [Drotek Pixhawk 3 Pro (FMUv4pro) - Припинено](flight_controller/pixhawk3_pro.md) - [mRo Pixracer (FMUv4)](flight_controller/pixracer.md) - [Wiring Quickstart](assembly/quick_start_pixracer.md) - [Hex Cube Black (FMUv3)](flight_controller/pixhawk-2.md) - [mRo Pixhawk (FMUv3)](flight_controller/mro_pixhawk.md) - [Швидке підключення mRo (3DR) Pixhawk](assembly/quick_start_pixhawk.md) - - [Holybro Pixhawk Mini (FMUv3) - Припинено](flight_controller/pixhawk_mini.md) - [Автопілоти, що підтримуються виробником](flight_controller/autopilot_manufacturer_supported.md) - [Accton Godwit GA1](flight_controller/accton-godwit_ga1.md) - [AirMind MindPX](flight_controller/mindpx.md) @@ -169,12 +167,15 @@ - [ARK Electronics ARKV6X](flight_controller/ark_v6x.md) - [ARK FPV Flight Controller](flight_controller/ark_fpv.md) - [ARK Pi6X Flow Flight Controller](flight_controller/ark_pi6x.md) + - [CORVON 743v1](flight_controller/corvon_743v1.md) - [CUAV Nora](flight_controller/cuav_nora.md) - [CUAV V5+ (FMUv5)](flight_controller/cuav_v5_plus.md) - [Wiring Quickstart](assembly/quick_start_cuav_v5_plus.md) - [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) - [CubePilot Cube Yellow (CubePilot)](flight_controller/cubepilot_cube_yellow.md) @@ -205,22 +206,6 @@ - [PilotPi з Raspberry Pi OS](flight_controller/raspberry_pi_pilotpi_rpios.md) - [PilotPi з Ubuntu Server](flight_controller/raspberry_pi_pilotpi_ubuntu_server.md) - [Зняті з виробництва автопілоти/транспортні засоби](flight_controller/autopilot_discontinued.md) - - [Drotek Dropix (FMUv2)](flight_controller/dropix.md) - - [Omnibus F4 SD](flight_controller/omnibus_f4_sd.md) - - [Bitcraze Crazyflie 2.0 ](complete_vehicles_mc/crazyflie2.md) - - [Aerotenna OcPoC-Zynq Mini](flight_controller/ocpoc_zynq.md) - - [CUAV X7](flight_controller/cuav_x7.md) - - [CUAV v5](flight_controller/cuav_v5.md) - - [CUAV Pixhack v3 (FMUv3)](flight_controller/pixhack_v3.md) - - [Holybro Kakute F7](flight_controller/kakutef7.md) - - [Holybro Pixfalcon](flight_controller/pixfalcon.md) - - [Holybro pix32 (FMUv2)](flight_controller/holybro_pix32.md) - - [ModalAI Flight Core v1](flight_controller/modalai_fc_v1.md) - - [ModalAI VOXL Flight](flight_controller/modalai_voxl_flight.md) - - [mRo X2.1 (FMUv2)](flight_controller/mro_x2.1.md) - - [mRo AUAV-X2](flight_controller/auav_x2.md) - - [NXP RDDRONE-FMUK66 FMU](flight_controller/nxp_rddrone_fmuk66.md) - - [3DR Pixhawk 1](flight_controller/pixhawk.md) - [Pixhawk Autopilot Bus (PAB) & Carriers](flight_controller/pixhawk_autopilot_bus.md) - [ARK Electronics Pixhawk Autopilot Bus Carrier](flight_controller/ark_pab.md) - [Кріплення польотного контролера](assembly/mount_and_orient_controller.md) @@ -258,6 +243,7 @@ - [Lidar-Lite](sensor/lidar_lite.md) - [Lightware Lidars (SF/LW/GRF)](sensor/sfxx_lidar.md) - [Lightware SF45 Rotary Lidar](sensor/sf45_rotating_lidar.md) + - [Lightware GRF250/GRF500 Gimbal Lidar](sensor/grf_lidar.md) - [TeraRanger](sensor/teraranger.md) - [✘ Lanbao PSK-CM8JL65-CC5](sensor/cm8jl65_ir_distance_sensor.md) - [Avionics Anonymous Laser Altimeter UAVCAN Interface (CAN)](dronecan/avanon_laser_interface.md) @@ -332,11 +318,11 @@ - [VESC Project ESCs](peripherals/vesc.md) - [Zubax Telega ESCs](dronecan/zubax_telega.md) - - [Радіокерування (RC)](getting_started/rc_transmitter_receiver.md) - - [Налаштування радіо](config/radio.md) - - [Режими польоту](config/flight_mode.md) - - - [Джойстики](config/joystick.md) + - [Manual Control](config/manual_control.md) + - [Радіокерування (RC)](getting_started/rc_transmitter_receiver.md) + - [Налаштування радіо](config/radio.md) + - [Режими польоту](config/flight_mode.md) + - [Джойстики](config/joystick.md) - [Посилання даних](data_links/index.md) - [MAVLink Telemetry (OSD/GCS)](peripherals/mavlink_peripherals.md) @@ -346,6 +332,7 @@ - [Телеметричне радіо RFD900 (SiK)](telemetry/rfd900_telemetry.md) - [ThunderFly TFSIK01 Telemetry Radio](telemetry/tfsik_telemetry.md) - [HolyBro (SIK) Телеметричне радіо](telemetry/holybro_sik_radio.md) + - [HolyBro SiK Long Range Telemetry Radio](telemetry/holybro_sik_longrange.md) - [Телеметрія Wi-Fi](telemetry/telemetry_wifi.md) - [Модуль WiFi ESP8266](telemetry/esp8266_wifi_module.md) - [Модуль WiFi ESP32](telemetry/esp32_wifi_module.md) @@ -399,6 +386,7 @@ - [Периферія](peripherals/index.md) - [ADSB/FLARM/UTM (уникнення трафіку)](peripherals/adsb_flarm.md) + - [On-Screen Display (OSD)](peripherals/osd.md) - [Парашут](peripherals/parachute.md) - [Remote ID](peripherals/remote_id.md) @@ -412,6 +400,7 @@ - [Прошивка PX4 DroneCAN](dronecan/px4_cannode_fw.md) - [ARK CANnode](dronecan/ark_cannode.md) - [RaccoonLab CAN Nodes](dronecan/raccoonlab_nodes.md) + - [DroneCAN Lights](dronecan/lights.md) - [Підключення дротів](assembly/cable_wiring.md) @@ -439,6 +428,7 @@ - [Розширені налаштування](advanced_config/index.md) - [Using PX4's Navigation Filter (EKF2)](advanced_config/tuning_the_ecl_ekf.md) + - [GNSS-Denied & Degraded Flight](advanced_config/gnss_degraded_or_denied_flight.md) - [Finding/Updating Parameters](advanced_config/parameters.md) - [Full Parameter Reference](advanced_config/parameter_reference.md) @@ -502,17 +492,21 @@ - [Plugins](sim_gazebo_gz/plugins.md) - [Gazebo Models Repository](sim_gazebo_gz/gazebo_models.md) - [Багатотранспортний Sim](sim_gazebo_gz/multi_vehicle_simulation.md) + - [SIH Simulation](sim_sih/index.md) + - [Hawkeye Visualizer](sim_hawkeye/index.md) - [Симуляція Gazebo Classic](sim_gazebo_classic/index.md) - [Vehicles](sim_gazebo_classic/vehicles.md) - [Worlds](sim_gazebo_classic/worlds.md) - [Багатотранспортний Sim](sim_gazebo_classic/multi_vehicle_simulation.md) - [Симуляція запобігання відмовам](simulation/failsafes.md) + - [Pre-built Packages](simulation/px4_sitl_prebuilt_packages.md) - [Апаратне забезпечення](hardware/index.md) - [Дизайн контролера польоту](hardware/reference_design.md) - [Manufacturer’s Board Support Guide](hardware/board_support_guide.md) - [Flight Controller Porting Guide](hardware/porting_guide.md) - [PX4 Конфігурація плати (kconfig)](hardware/porting_guide_config.md) - [Посібник з портування NuttX](hardware/porting_guide_nuttx.md) + - [Board Firmware Packaging (.deb)](hardware/board_packaging.md) - [Serial Port Mapping](hardware/serial_port_mapping.md) - [Airframes](dev_airframes/index.md) - [Adding a New Airframe](dev_airframes/adding_a_new_frame.md) @@ -547,6 +541,8 @@ - [LongitudinalControlConfiguration](msg_docs/LongitudinalControlConfiguration.md) - [ManualControlSetpoint](msg_docs/ManualControlSetpoint.md) - [ModeCompleted](msg_docs/ModeCompleted.md) + - [RaptorInput](msg_docs/RaptorInput.md) + - [RaptorStatus](msg_docs/RaptorStatus.md) - [RegisterExtComponentReply](msg_docs/RegisterExtComponentReply.md) - [RegisterExtComponentRequest](msg_docs/RegisterExtComponentRequest.md) - [TrajectorySetpoint](msg_docs/TrajectorySetpoint.md) @@ -575,6 +571,7 @@ - [Airspeed](msg_docs/Airspeed.md) - [AirspeedWind](msg_docs/AirspeedWind.md) - [AutotuneAttitudeControlStatus](msg_docs/AutotuneAttitudeControlStatus.md) + - [AuxGlobalPosition](msg_docs/AuxGlobalPosition.md) - [BatteryInfo](msg_docs/BatteryInfo.md) - [ButtonEvent](msg_docs/ButtonEvent.md) - [CameraCapture](msg_docs/CameraCapture.md) @@ -597,6 +594,8 @@ - [DistanceSensorModeChangeRequest](msg_docs/DistanceSensorModeChangeRequest.md) - [DronecanNodeStatus](msg_docs/DronecanNodeStatus.md) - [Ekf2Timestamps](msg_docs/Ekf2Timestamps.md) + - [EscEepromRead](msg_docs/EscEepromRead.md) + - [EscEepromWrite](msg_docs/EscEepromWrite.md) - [EscReport](msg_docs/EscReport.md) - [EscStatus](msg_docs/EscStatus.md) - [EstimatorAidSource1d](msg_docs/EstimatorAidSource1d.md) @@ -605,6 +604,7 @@ - [EstimatorBias](msg_docs/EstimatorBias.md) - [EstimatorBias3d](msg_docs/EstimatorBias3d.md) - [EstimatorEventFlags](msg_docs/EstimatorEventFlags.md) + - [EstimatorFusionControl](msg_docs/EstimatorFusionControl.md) - [EstimatorGpsStatus](msg_docs/EstimatorGpsStatus.md) - [EstimatorInnovations](msg_docs/EstimatorInnovations.md) - [EstimatorSelectorStatus](msg_docs/EstimatorSelectorStatus.md) @@ -703,6 +703,7 @@ - [QshellReq](msg_docs/QshellReq.md) - [QshellRetval](msg_docs/QshellRetval.md) - [RadioStatus](msg_docs/RadioStatus.md) + - [RangingBeacon](msg_docs/RangingBeacon.md) - [RateCtrlStatus](msg_docs/RateCtrlStatus.md) - [RcChannels](msg_docs/RcChannels.md) - [RcParameterMap](msg_docs/RcParameterMap.md) @@ -768,6 +769,7 @@ - [VehicleThrustSetpoint](msg_docs/VehicleThrustSetpoint.md) - [VehicleTorqueSetpoint](msg_docs/VehicleTorqueSetpoint.md) - [VelocityLimits](msg_docs/VelocityLimits.md) + - [Vtx](msg_docs/Vtx.md) - [WheelEncoders](msg_docs/WheelEncoders.md) - [Wind](msg_docs/Wind.md) - [YawEstimatorStatus](msg_docs/YawEstimatorStatus.md) @@ -780,14 +782,23 @@ - [HomePositionV0](msg_docs/HomePositionV0.md) - [RegisterExtComponentReplyV0](msg_docs/RegisterExtComponentReplyV0.md) - [RegisterExtComponentRequestV0](msg_docs/RegisterExtComponentRequestV0.md) + - [RegisterExtComponentRequestV1](msg_docs/RegisterExtComponentRequestV1.md) - [VehicleAttitudeSetpointV0](msg_docs/VehicleAttitudeSetpointV0.md) + - [VehicleCommandAckV0](msg_docs/VehicleCommandAckV0.md) + - [VehicleGlobalPositionV0](msg_docs/VehicleGlobalPositionV0.md) - [VehicleLocalPositionV0](msg_docs/VehicleLocalPositionV0.md) - [VehicleStatusV0](msg_docs/VehicleStatusV0.md) + - [VehicleStatusV1](msg_docs/VehicleStatusV1.md) + - [VehicleStatusV2](msg_docs/VehicleStatusV2.md) + - [VehicleStatusV3](msg_docs/VehicleStatusV3.md) - [MAVLink Messaging](mavlink/index.md) - [Adding Messages](mavlink/adding_messages.md) - [Streaming Messages](mavlink/streaming_messages.md) + - [MAVLink Profiles](mavlink/mavlink_profiles.md) - [Receiving Messages](mavlink/receiving_messages.md) - [Custom MAVLink Messages](mavlink/custom_messages.md) + - [Message Signing](mavlink/message_signing.md) + - [Security Hardening](mavlink/security_hardening.md) - [Protocols/Microservices](mavlink/protocols.md) - [Standard Modes Protocol](mavlink/standard_modes.md) - [uXRCE-DDS (PX4-ROS 2/DDS Bridge)](middleware/uxrce_dds.md) @@ -874,21 +885,26 @@ - [Multi-Vehicle Sim with JMAVSim](sim_jmavsim/multi_vehicle.md) - [JSBSim Simulation](sim_jsbsim/index.md) - [AirSim Simulation](sim_airsim/index.md) - - [HITL Simulation](simulation/hitl.md) - - [Simulation-In-Hardware](sim_sih/index.md) + - [Hardware Simulation](simulation/hardware.md) + - [HITL Simulation](simulation/hitl.md) + - [SIH on Hardware](sim_sih/hardware.md) - [Multi-vehicle simulation](simulation/multi-vehicle-simulation.md) - [Тестування платформи та CI](test_and_ci/index.md) - [Польотні тести](test_and_ci/test_flights.md) - - [Тест MC_01 - Ручні режими](test_cards/mc_01_manual_modes.md) - - [Тест MC_02 - Повна автономність](test_cards/mc_02_full_autonomous.md) - - [Тест MC_03 - поєднання автоматичного і ручного керування](test_cards/mc_03_auto_manual_mix.md) - - [Тест MC_04 - Тестування відмовостійкості](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) + - [Тест MC_01 - Ручні режими](test_cards/mc_01_manual_modes.md) + - [Тест MC_02 - Повна автономність](test_cards/mc_02_full_autonomous.md) + - [Тест MC_03 - поєднання автоматичного і ручного керування](test_cards/mc_03_auto_manual_mix.md) + - [Тест MC_04 - Тестування відмовостійкості](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) - [Модульні Тести](test_and_ci/unit_tests.md) - [Fuzz Tests](test_and_ci/fuzz_tests.md) - [Безперервна інтеграція](test_and_ci/continous_integration.md) @@ -931,6 +947,7 @@ - [Translation](contribute/translation.md) - [Термінологія/Нотація](contribute/notation.md) - [Ліцензії](contribute/licenses.md) + - [SBOM](contribute/sbom.md) - [Релізи](releases/index.md) - [Release Process](releases/release_process.md) diff --git a/docs/uk/_sidebar.md b/docs/uk/_sidebar.md index 19a3cb9440..e293e9c107 100644 --- a/docs/uk/_sidebar.md +++ b/docs/uk/_sidebar.md @@ -36,7 +36,7 @@ - [Static Pressure Buildup](/advanced_config/static_pressure_buildup.md) - [Flying (Basics)](/flying/basic_flying_mc.md) - [Complete Vehicles](/complete_vehicles_mc/index.md) - - [ModalAI Starling (PX4 Dev Kit)](/complete_vehicles_mc/modalai_starling.md) + - [ModalAI Starling](/complete_vehicles_mc/modalai_starling.md) - [PX4 Vision Kit](/complete_vehicles_mc/px4_vision_kit.md) - [MindRacer BNF & RTF](/complete_vehicles_mc/mindracer_BNF_RTF.md) - [MindRacer 210](/complete_vehicles_mc/mindracer210.md) @@ -94,6 +94,7 @@ - [Настройка Зворотнього Переходу](/config_vtol/vtol_back_transition_tuning.md) - [ВЗІП Датчик польоту](/config_vtol/vtol_without_airspeed_sensor.md) - [VTOL Weather Vane](/config_vtol/vtol_weathervane.md) + - [VTOL Ice Shedding](/config_vtol/vtol_ice_shedding.md) - [Режим польоту](/flight_modes_vtol/index.md) - [Mission Mode (VTOL)](/flight_modes_vtol/mission.md) - [Return Mode (VTOL)](/flight_modes_vtol/return.md) @@ -129,6 +130,7 @@ - [Значення світлодіодів](/getting_started/led_meanings.md) - [Значення звуків та мелодій](/getting_started/tunes.md) - [QGroundControl Flight-Readiness Status](/flying/pre_flight_checks.md) + - [Asset Tracking](/debug/asset_tracking.md) - [Вибір обладнання & Налаштування](/hardware/drone_parts.md) - [Flight Controllers (Autopilots)](/flight_controller/index.md) @@ -152,15 +154,11 @@ - [Wiring Quickstart](/assembly/quick_start_pixhawk5x.md) - [Holybro Pixhawk 4 (FMUv5)](/flight_controller/pixhawk4.md) - [Wiring Quickstart](/assembly/quick_start_pixhawk4.md) - - [Holybro Pixhawk 4 Mini (FMUv5) - Припинено](/flight_controller/pixhawk4_mini.md) - - [Wiring Quickstart](/assembly/quick_start_pixhawk4_mini.md) - - [Drotek Pixhawk 3 Pro (FMUv4pro) - Припинено](/flight_controller/pixhawk3_pro.md) - [mRo Pixracer (FMUv4)](/flight_controller/pixracer.md) - [Wiring Quickstart](/assembly/quick_start_pixracer.md) - [Hex Cube Black (FMUv3)](/flight_controller/pixhawk-2.md) - [mRo Pixhawk (FMUv3)](/flight_controller/mro_pixhawk.md) - [Швидке підключення mRo (3DR) Pixhawk](/assembly/quick_start_pixhawk.md) - - [Holybro Pixhawk Mini (FMUv3) - Припинено](/flight_controller/pixhawk_mini.md) - [Автопілоти, що підтримуються виробником](/flight_controller/autopilot_manufacturer_supported.md) - [Accton Godwit GA1](/flight_controller/accton-godwit_ga1.md) - [AirMind MindPX](/flight_controller/mindpx.md) @@ -174,10 +172,12 @@ - [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 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) - [CubePilot Cube Yellow (CubePilot)](/flight_controller/cubepilot_cube_yellow.md) - [Швидке підключення Cube](/assembly/quick_start_cube.md) + - [Gear Up AirBrainH743](/flight_controller/gearup_airbrainh743.md) - [Holybro Kakute H7v2](/flight_controller/kakuteh7v2.md) - [Holybro Kakute H7mini](/flight_controller/kakuteh7mini.md) - [Holybro Kakute H7](/flight_controller/kakuteh7.md) @@ -195,6 +195,7 @@ - [SVehicle E2](/flight_controller/svehicle_e2.md) - [ThePeach FCC-K1](/flight_controller/thepeach_k1.md) - [ThePeach FCC-R1](/flight_controller/thepeach_r1.md) + - [AP-H743-R1](/flight_controller/x-mav_ap-h743r1.md) - [Калібрування рівня горизонту](/flight_controller/autopilot_experimental.md) - [BeagleBone Blue](/flight_controller/beaglebone_blue.md) - [Raspberry Pi 2/3 Navio2](/flight_controller/raspberry_pi_navio2.md) @@ -202,22 +203,6 @@ - [PilotPi з Raspberry Pi OS](/flight_controller/raspberry_pi_pilotpi_rpios.md) - [PilotPi з Ubuntu Server](/flight_controller/raspberry_pi_pilotpi_ubuntu_server.md) - [Зняті з виробництва автопілоти/транспортні засоби](/flight_controller/autopilot_discontinued.md) - - [Drotek Dropix (FMUv2)](/flight_controller/dropix.md) - - [Omnibus F4 SD](/flight_controller/omnibus_f4_sd.md) - - [Bitcraze Crazyflie 2.0 ](/complete_vehicles_mc/crazyflie2.md) - - [Aerotenna OcPoC-Zynq Mini](/flight_controller/ocpoc_zynq.md) - - [CUAV X7](/flight_controller/cuav_x7.md) - - [CUAV v5](/flight_controller/cuav_v5.md) - - [CUAV Pixhack v3 (FMUv3)](/flight_controller/pixhack_v3.md) - - [Holybro Kakute F7](/flight_controller/kakutef7.md) - - [Holybro Pixfalcon](/flight_controller/pixfalcon.md) - - [Holybro pix32 (FMUv2)](/flight_controller/holybro_pix32.md) - - [ModalAI Flight Core v1](/flight_controller/modalai_fc_v1.md) - - [ModalAI VOXL Flight](/flight_controller/modalai_voxl_flight.md) - - [mRo X2.1 (FMUv2)](/flight_controller/mro_x2.1.md) - - [mRo AUAV-X2](/flight_controller/auav_x2.md) - - [NXP RDDRONE-FMUK66 FMU](/flight_controller/nxp_rddrone_fmuk66.md) - - [3DR Pixhawk 1](/flight_controller/pixhawk.md) - [Pixhawk Autopilot Bus (PAB) & Carriers](/flight_controller/pixhawk_autopilot_bus.md) - [ARK Electronics Pixhawk Autopilot Bus Carrier](/flight_controller/ark_pab.md) - [Кріплення польотного контролера](/assembly/mount_and_orient_controller.md) @@ -247,18 +232,23 @@ - [ВЗІП Датчик польоту](/sensor/airspeed_tfslot.md) - [Барометри](/sensor/barometer.md) - [Датчики відстані \(далекодобива\)](/sensor/rangefinders.md) - - [Lightware Lidars (SF/LW)](/sensor/sfxx_lidar.md) - - [Lightware SF45 Rotary Lidar](/sensor/sf45_rotating_lidar.md) - [Стандартний радарний висотомір Ainstein US-D1](/sensor/ulanding_radar.md) - - [LeddarOne Lidar](/sensor/leddar_one.md) + - [ARK DIST SR (CAN/UART)](/dronecan/ark_dist.md) + - [ARK DIST MR (CAN/UART)](/dronecan/ark_dist_mr.md) - [Benewake TFmini Lidar](/sensor/tfmini.md) + - [LeddarOne Lidar](/sensor/leddar_one.md) - [Lidar-Lite](/sensor/lidar_lite.md) + - [Lightware Lidars (SF/LW/GRF)](/sensor/sfxx_lidar.md) + - [Lightware SF45 Rotary Lidar](/sensor/sf45_rotating_lidar.md) + - [Lightware GRF250/GRF500 Gimbal Lidar](/sensor/grf_lidar.md) - [TeraRanger](/sensor/teraranger.md) - [✘ Lanbao PSK-CM8JL65-CC5](/sensor/cm8jl65_ir_distance_sensor.md) - [Avionics Anonymous Laser Altimeter UAVCAN Interface (CAN)](/dronecan/avanon_laser_interface.md) - [GNSS (GPS)](/gps_compass/index.md) - [ARK GPS (CAN)](/dronecan/ark_gps.md) + - [ARK DAN GPS](/gps_compass/ark_dan_gps.md) - [ARK SAM GPS](/gps_compass/ark_sam_gps.md) + - [ARK SAM GPS MINI](/gps_compass/ark_sam_gps_mini.md) - [ARK TESEO GPS](/dronecan/ark_teseo_gps.md) - [CUAV NEO 3 GPS](/gps_compass/gps_cuav_neo_3.md) - [CUAV NEO 3 Pro GPS (CAN)](/gps_compass/gps_cuav_neo_3pro.md) @@ -269,7 +259,11 @@ - [Holybro M8N & M9N GPS](/gps_compass/gps_holybro_m8n_m9n.md) - [Sky-Drones SmartAP GPS](/gps_compass/gps_smartap.md) - [RTK GNSS](/gps_compass/rtk_gps.md) + - [ARK G5 RTK GPS](/dronecan/ark_g5_rtk_gps.md) + - [ARK G5 RTK HEADING GPS](/dronecan/ark_g5_rtk_heading_gps.md) - [ARK RTK GPS (CAN)](/dronecan/ark_rtk_gps.md) + - [ARK RTK GPS L1 L5 (CAN)](/dronecan/ark_rtk_gps_l1_l2.md) + - [ARK X20 RTK GPS (CAN)](/dronecan/ark_x20_rtk_gps.md) - [ARK MOSAIC-X5 RTK GPS (CAN)](/dronecan/ark_mosaic__rtk_gps.md) - [RTK GPS Heading with Dual u-blox F9P](/gps_compass/u-blox_f9p_heading.md) - [CUAV C-RTK](/gps_compass/rtk_gps_cuav_c-rtk.md) @@ -309,21 +303,23 @@ - [Розподіл приводу](/config/actuators.md) - [Калібрування ESC (плати контролю двигунів)](/advanced_config/esc_calibration.md) - [ESCs & Двигуни](/peripherals/esc_motors.md) + - [ESC Protocols](/esc/esc_protocols.md) - [PWM ESCs та сервоприводи](/peripherals/pwm_escs_and_servo.md) - [DShot ESCs](/peripherals/dshot.md) - [OneShot ESCs та сервоприводи](/peripherals/oneshot.md) - [DroneCAN ESCs](/dronecan/escs.md) - - [Zubax Telega](/dronecan/zubax_telega.md) - - [Прошивка PX4 Sapog ESC](/dronecan/sapog.md) - - [Holybro Kotleta](/dronecan/holybro_kotleta.md) - - [Vertiq](/peripherals/vertiq.md) - - [VESC](/peripherals/vesc.md) + - [PX4 Sapog ESC Firmware](/dronecan/sapog.md) + - [ARK 4IN1 ESC](/esc/ark_4in1_esc.md) + - [Holybro Kotleta](/dronecan/holybro_kotleta.md) + - [Vertiq Motor/ESC Modules](/peripherals/vertiq.md) + - [VESC Project ESCs](/peripherals/vesc.md) + - [Zubax Telega ESCs](/dronecan/zubax_telega.md) - - [Радіокерування (RC)](/getting_started/rc_transmitter_receiver.md) - - [Налаштування радіо](/config/radio.md) - - [Режими польоту](/config/flight_mode.md) - - - [Джойстики](/config/joystick.md) + - [Manual Control](/config/manual_control.md) + - [Радіокерування (RC)](/getting_started/rc_transmitter_receiver.md) + - [Налаштування радіо](/config/radio.md) + - [Режими польоту](/config/flight_mode.md) + - [Джойстики](/config/joystick.md) - [Посилання даних](/data_links/index.md) - [MAVLink Telemetry (OSD/GCS)](/peripherals/mavlink_peripherals.md) @@ -350,17 +346,20 @@ - [Супутниковий зв'язок (Iridium/RockBlock)](/advanced_features/satcom_roadblock.md) + - [Analog Video Transmitters](/vtx/index.md) + - [Енергетичні системи](/power_systems/index.md) - [Налаштування оцінки батареї](/config/battery.md) - [Battery Chemistry Overview](/power_systems/battery_chemistry.md) - [Силові модулі/PDB](/power_module/index.md) + - [ARK PAB Power Module](/power_module/ark_pab_power_module.md) + - [ARK 12S PAB Power Module](/power_module/ark_12s_pab_power_module.md) + - [ARK 12S Payload Power Module](/power_module/ark_12s_payload_power_module.md) - [CUAV HV pm](/power_module/cuav_hv_pm.md) - [CUAV CAN PMU](/dronecan/cuav_can_pmu.md) - [Holybro PM02](/power_module/holybro_pm02.md) - [Holybro PM07](/power_module/holybro_pm07_pixhawk4_power_module.md) - [Holybro PM06 V2](/power_module/holybro_pm06_pixhawk4mini_power_module.md) - - [ARK PAB Power Module](/power_module/ark_pab_power_module.md) - - [ARK 12S PAB Power Module](/power_module/ark_12s_pab_power_module.md) - [Holybro PM02D (цифровий)](/power_module/holybro_pm02d.md) - [Holybro PM03D (цифровий)](/power_module/holybro_pm03d.md) - [Силовий модуль Pomegranate Systems](/dronecan/pomegranate_systems_pm.md) @@ -396,6 +395,7 @@ - [Прошивка PX4 DroneCAN](/dronecan/px4_cannode_fw.md) - [ARK CANnode](/dronecan/ark_cannode.md) - [RaccoonLab CAN Nodes](/dronecan/raccoonlab_nodes.md) + - [DroneCAN Lights](/dronecan/lights.md) - [Підключення дротів](/assembly/cable_wiring.md) @@ -423,6 +423,7 @@ - [Розширені налаштування](/advanced_config/index.md) - [Using PX4's Navigation Filter (EKF2)](/advanced_config/tuning_the_ecl_ekf.md) + - [GNSS-Denied & Degraded Flight](/advanced_config/gnss_degraded_or_denied_flight.md) - [Finding/Updating Parameters](/advanced_config/parameters.md) - [Full Parameter Reference](/advanced_config/parameter_reference.md) @@ -512,6 +513,7 @@ - [PPS Time Synchronization](/advanced/pps_time_sync.md) - [Проміжне програмне забезпечення](/middleware/index.md) - [Повідомлення uORB](/middleware/uorb.md) + - [uORB Docs Standard](/uorb/uorb_documentation.md) - [Граф uORB](/middleware/uorb_graph.md) - [Опис повідомлень uORB](/msg_docs/index.md) - [Versioned](/msg_docs/versioned_messages.md) @@ -530,6 +532,8 @@ - [LongitudinalControlConfiguration](/msg_docs/LongitudinalControlConfiguration.md) - [ManualControlSetpoint](/msg_docs/ManualControlSetpoint.md) - [ModeCompleted](/msg_docs/ModeCompleted.md) + - [RaptorInput](/msg_docs/RaptorInput.md) + - [RaptorStatus](/msg_docs/RaptorStatus.md) - [RegisterExtComponentReply](/msg_docs/RegisterExtComponentReply.md) - [RegisterExtComponentRequest](/msg_docs/RegisterExtComponentRequest.md) - [TrajectorySetpoint](/msg_docs/TrajectorySetpoint.md) @@ -558,6 +562,7 @@ - [Airspeed](/msg_docs/Airspeed.md) - [AirspeedWind](/msg_docs/AirspeedWind.md) - [AutotuneAttitudeControlStatus](/msg_docs/AutotuneAttitudeControlStatus.md) + - [AuxGlobalPosition](/msg_docs/AuxGlobalPosition.md) - [BatteryInfo](/msg_docs/BatteryInfo.md) - [ButtonEvent](/msg_docs/ButtonEvent.md) - [CameraCapture](/msg_docs/CameraCapture.md) @@ -574,6 +579,7 @@ - [DebugKeyValue](/msg_docs/DebugKeyValue.md) - [DebugValue](/msg_docs/DebugValue.md) - [DebugVect](/msg_docs/DebugVect.md) + - [DeviceInformation](/msg_docs/DeviceInformation.md) - [DifferentialPressure](/msg_docs/DifferentialPressure.md) - [DistanceSensor](/msg_docs/DistanceSensor.md) - [DistanceSensorModeChangeRequest](/msg_docs/DistanceSensorModeChangeRequest.md) @@ -606,6 +612,7 @@ - [FollowTargetEstimator](/msg_docs/FollowTargetEstimator.md) - [FollowTargetStatus](/msg_docs/FollowTargetStatus.md) - [FuelTankStatus](/msg_docs/FuelTankStatus.md) + - [GainCompression](/msg_docs/GainCompression.md) - [GeneratorStatus](/msg_docs/GeneratorStatus.md) - [GeofenceResult](/msg_docs/GeofenceResult.md) - [GeofenceStatus](/msg_docs/GeofenceStatus.md) @@ -749,6 +756,7 @@ - [VehicleThrustSetpoint](/msg_docs/VehicleThrustSetpoint.md) - [VehicleTorqueSetpoint](/msg_docs/VehicleTorqueSetpoint.md) - [VelocityLimits](/msg_docs/VelocityLimits.md) + - [Vtx](/msg_docs/Vtx.md) - [WheelEncoders](/msg_docs/WheelEncoders.md) - [Wind](/msg_docs/Wind.md) - [YawEstimatorStatus](/msg_docs/YawEstimatorStatus.md) @@ -756,11 +764,17 @@ - [ArmingCheckReplyV0](/msg_docs/ArmingCheckReplyV0.md) - [ArmingCheckRequestV0](/msg_docs/ArmingCheckRequestV0.md) - [BatteryStatusV0](/msg_docs/BatteryStatusV0.md) + - [ConfigOverridesV0](/msg_docs/ConfigOverridesV0.md) - [EventV0](/msg_docs/EventV0.md) - [HomePositionV0](/msg_docs/HomePositionV0.md) + - [RegisterExtComponentReplyV0](/msg_docs/RegisterExtComponentReplyV0.md) + - [RegisterExtComponentRequestV0](/msg_docs/RegisterExtComponentRequestV0.md) - [VehicleAttitudeSetpointV0](/msg_docs/VehicleAttitudeSetpointV0.md) + - [VehicleCommandAckV0](/msg_docs/VehicleCommandAckV0.md) + - [VehicleGlobalPositionV0](/msg_docs/VehicleGlobalPositionV0.md) - [VehicleLocalPositionV0](/msg_docs/VehicleLocalPositionV0.md) - [VehicleStatusV0](/msg_docs/VehicleStatusV0.md) + - [VehicleStatusV1](/msg_docs/VehicleStatusV1.md) - [MAVLink Messaging](/mavlink/index.md) - [Adding Messages](/mavlink/adding_messages.md) - [Streaming Messages](/mavlink/streaming_messages.md) @@ -825,9 +839,11 @@ - [Інтеграція камери/Архітектура](/camera/camera_architecture.md) - [Комп'ютерний зір](/advanced/computer_vision.md) - [Захоплення руху (VICON, Optitrack, NOKOV)](/tutorials/motion-capture.md) - - [Neural Networks](/advanced/neural_networks.md) - - [Neural Network Module Utilities](/advanced/nn_module_utilities.md) - - [TensorFlow Lite Micro (TFLM)](/advanced/tflm.md) + - [Neural Networks](/neural_networks/index.md) + - [MC NN Control Module (Generic)](/neural_networks/mc_neural_network_control.md) + - [Neural Network Module Utilities](/neural_networks/nn_module_utilities.md) + - [TensorFlow Lite Micro (TFLM)](/neural_networks/tflm.md) + - [RAPTOR Adaptive RL NN Module](/neural_networks/raptor.md) - [Встановлюється драйвер для Intel RealSense R200](/advanced/realsense_intel_driver.md) - [Перемикання оцінювачів стану](/advanced/switching_state_estimators.md) - [Out-of-Tree модулі](/advanced/out_of_tree_modules.md) @@ -909,7 +925,9 @@ - [Ліцензії](/contribute/licenses.md) - [Релізи](/releases/index.md) + - [Release Process](/releases/release_process.md) - [main (alpha)](/releases/main.md) + - [1.17 (alpha)](/releases/1.17.md) - [1.16 (stable)](/releases/1.16.md) - [1.15](/releases/1.15.md) - [1.14](/releases/1.14.md) diff --git a/docs/uk/advanced/computer_vision.md b/docs/uk/advanced/computer_vision.md index 2199356038..acccce1661 100644 --- a/docs/uk/advanced/computer_vision.md +++ b/docs/uk/advanced/computer_vision.md @@ -65,7 +65,7 @@ MoCap is commonly used to navigate a vehicle in situations where GPS is absent ( Консенсусом [здається](https://discuss.px4.io/t/vio-vs-optical-flow/34680): -- Оптичний потік, спрямований вниз, надає вам планарну швидкість, яка коригується на кутову швидкість за допомогою гіроскопа. +- Downward facing optical flow gives you a planar velocity that's corrected for angular velocity with the gyro. - Вимагає точної відстані до землі і передбачає планарну поверхню.Враховуючи ці умови, це може бути настільки ж точним / надійним, як VIO (для польотів у приміщенні) - Має більшу надійність, оскільки має менше станів, ніж VIO. - Значно дешевший і легший у налаштуванні оскільки для цього потрібен лише датчик оптичного потоку, дальномір та налаштування кількох параметрів (які можна підключити до керуючого пристрою польоту). diff --git a/docs/uk/advanced/gimbal_control.md b/docs/uk/advanced/gimbal_control.md index 68ca5a651f..e84370ba74 100644 --- a/docs/uk/advanced/gimbal_control.md +++ b/docs/uk/advanced/gimbal_control.md @@ -20,7 +20,7 @@ PX4 приймає вхідний сигнал і маршрутизує/пер Після вибору режиму введення перезавантажте транспортний засіб, щоб запустити драйвер кріплення. Ви повинні встановити `MNT_MODE_IN` одним із наступних: `RC (1)`, `Протокол гімбала MAVLink v2 (4)` або `Авто (0)` (інші варіанти застарілі). -Якщо ви виберете `Авто (0)`, гімбал автоматично вибере вхід RC або MAVLink відповідно до останнього введення. +If you select `Auto (0)`, the gimbal will automatically select either RC or MAVLink input based on the latest input. Зверніть увагу, що для автоматичного перемикання з MAVLink на RC потрібен великий рух ручкою! Вихід налаштовується за допомогою параметра [MNT_MODE_OUT](../advanced_config/parameter_reference.md#MNT_MODE_OUT). diff --git a/docs/uk/advanced/nn_module_utilities.md b/docs/uk/advanced/nn_module_utilities.md deleted file mode 100644 index 4461655f37..0000000000 --- a/docs/uk/advanced/nn_module_utilities.md +++ /dev/null @@ -1,86 +0,0 @@ -# Neural Network Module: System Integration - -The neural control module ([mc_nn_control](../modules/modules_controller.md#mc-nn-control)) implements an end-to-end controller utilizing neural networks. - -The parts of the module directly concerned with generating the code for the trained neural network and integrating it into the module are covered in [TensorFlow Lite Micro (TFLM)](../advanced/tflm.md). -This page covers the changes that were made to integrate the module into PX4, both within the module, and in larger system configuration. - -:::tip -This topic should help you to shape the module to your own needs. - -You will need some familiarity with PX4 development. -For more information see the developer [Getting Started](../dev_setup/getting_started.md). -::: - -## Автозавантаження - -A line to autostart the [mc_nn_control](../modules/modules_controller.md#mc-nn-control) module has been added in the [`ROMFS/px4fmu_common/init.d/rc.mc_apps`](https://github.com/PX4/PX4-Autopilot/blob/main/ROMFS/px4fmu_common/init.d/rc.mc_apps) startup script. - -It checks whether the module is included by looking for the parameter [MC_NN_EN](../advanced_config/parameter_reference.md#MC_NN_EN). -If this is set to `1` (the default value), the module will be started when booting PX4. -Similarly you could create other parameters in the [`mc_nn_control_params.c`](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mc_nn_control/mc_nn_control_params.c) file for other startup script checks. - -## Custom Flight Mode - -The module creates its own flight mode "Neural Control" which lets you choose it from the flight mode menu in QGC and bind it to a switch on you RC controller. -This is done by using the [ROS 2 Interface Library](../ros2/px4_ros2_interface_lib.md) internally. -This involves several steps and is visualized here: - -:::info -The module does not actually use ROS 2, it just uses the API exposed through uORB topics. -::: - -:::info -In some QGC versions the flight mode does not show up, so make sure to update to the newest version. -This only works for some flight controllers, so you might have to use an RC controller to switch to the correct external flight mode. -::: - -![neural_mode_registration](../../assets/advanced/neural_mode_registration.png) - -1. Publish a [RegisterExtComponentRequest](../msg_docs/RegisterExtComponentRequest.md). - This specifies what you want to create, you can read more about this in the [Control Interface](../ros2/px4_ros2_control_interface.md). - In this case we register an arming check and a mode. -2. Wait for a [RegisterExtComponentReply](../msg_docs/RegisterExtComponentReply.md). - This will give feedback on wether the mode registration was successful, and what the mode and arming check id is for the new mode. -3. [Optional] With the mode id, publish a [VehicleControlMode](../msg_docs/VehicleControlMode.md) message on the `config_control_setpoints` topic. - Here you can configure what other modules run in parallel. - The example controller replaces everything, so it turns off allocation. - If you want to replace other parts you can enable or disable the modules accordingly. -4. [Optional] With the mode id, publish a [ConfigOverrides](../msg_docs/ConfigOverrides.md) on the `config_overrides_request` topic. - (This is not done in the example module) This will let you defer failsafes or stop it from automatically disarming. -5. When the mode has been registered a [ArmingCheckRequest](../msg_docs/ArmingCheckRequest.md) will be sent, asking if your mode has everything it needs to run. - This message must be answered with a [ArmingCheckReply](../msg_docs/ArmingCheckReply.md) so the mode is not flagged as unresponsive. - In this response it is possible to set what requirements the mode needs to run, like local position. - If any of these requirements are set the commander will stop you from switching to the mode if they are not fulfilled. - It is also important to set health_component_index and num_events to 0 to not get a segmentation fault. - Unless you have a health component or events. -6. Listen to the [VehicleStatus](../msg_docs/VehicleStatus.md) topic. - If the nav_state equals the assigned `mode_id`, then the Neural Controller is activated. -7. When active the module will run the controller and publish to [ActuatorMotors](../msg_docs/ActuatorMotors.md). - If you want to replace a different part of the controller, you should find the appropriate topic to publish to. - -To see how the requests are handled you can check out [src/modules/commander/ModeManagement.cpp](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/commander/ModeManagement.cpp). - -## Логування - -To add module-specific logging a new topic has been added to [uORB](../middleware/uorb.md) called [NeuralControl](../msg_docs/NeuralControl.md). -The message definition is also added in `msg/CMakeLists.txt`, and to [`src/modules/logger/logged_topics.cpp`](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/logger/logged_topics.cpp) under the debug category. -For these messages to be saved in your logs you need to include `debug` in the [SDLOG_PROFILE](../advanced_config/parameter_reference.md#SDLOG_PROFILE) parameter. - -## Timing - -The module has two includes for measuring the inference times. -The first one is a driver that works on the actual flight controller units, but a second one, `chrono`, is loaded for SITL testing. -Which timing library is included and used is based on wether PX4 is built with NUTTX or not. - -## Changing the setpoint - -The module uses the [TrajectorySetpoint](../msg_docs/TrajectorySetpoint.md) message’s position fields to define its target. -To follow a trajectory, you can send updated setpoints. -For an example of how to do this in a PX4 module, see the [mc_nn_testing](https://github.com/SindreMHegre/PX4-Autopilot-public/tree/main/src/modules/mc_nn_testing) module in this fork. -Note that this is not included in upstream PX4. -To use it, copy the module folder from the linked repository into your workspace, and enable it by adding the following line to your `.px4board` file: - -```sh -CONFIG_MODULES_MC_NN_TESTING=y -``` diff --git a/docs/uk/advanced/pps_time_sync.md b/docs/uk/advanced/pps_time_sync.md index 67456cc75d..8ebe70f643 100644 --- a/docs/uk/advanced/pps_time_sync.md +++ b/docs/uk/advanced/pps_time_sync.md @@ -57,6 +57,17 @@ param set PWM_MAIN_FUNC10 2064 param set PPS_CAP_ENABLE 1 ``` +#### Multi-GPS Setups + +If you have multiple GPS receivers, set `PPS_CAP_GPS_ID` to the device ID of the GPS receiver that emits the PPS signal. +When set to `0` (default), the driver uses the first available GPS instance. + +You can find the device ID by running: + +```sh +listener sensor_gps +``` + ### Підключення The wiring configuration depends on your specific flight controller. @@ -80,7 +91,7 @@ For FMUv6S, you need to route the PPS signal separately: For ARK FMUv6X on the Jetson carrier board: -1. Connect your GNSS module using either the 10-pin or 6-pin GPS connector: [ARK PAB GPS1 Interface](../flight_controller/ark_pab#gps1) +1. Connect your GNSS module using either the 10-pin or 6-pin GPS connector: [ARK PAB GPS1 Interface](../flight_controller/ark_pab.md#gps1) 2. Connect the PPS signal to the **FMU_CAP** pin: [ARK PAB ADIO Interface](../flight_controller/ark_pab.md#adio) ## Перевірка @@ -131,5 +142,5 @@ See also: The PPS signal provides much higher temporal precision than the transmitted time data, which has latency and jitter from serial communication. :::warning -If the PPS driver does not sending any data for 5 seconds (despite having `PPS_CAP_ENABLE` set to 1), the `EKF2_GPS_DELAY` will be used instead for estimating the latency. +If the PPS driver does not send any data for 5 seconds (despite having `PPS_CAP_ENABLE` set to 1), the corresponding `SENS_GPS*_DELAY` parameter will be used instead for estimating the latency. ::: diff --git a/docs/uk/advanced/px4_metadata.md b/docs/uk/advanced/px4_metadata.md index 25bb667d02..0ca3b0b12f 100644 --- a/docs/uk/advanced/px4_metadata.md +++ b/docs/uk/advanced/px4_metadata.md @@ -45,7 +45,7 @@ PX4 використовує та генерує дані, які мають в Бінарні файли для контролерів польоту з обмеженим обсягом пам'яті не зберігають метадані параметрів у бінарному файлі, а натомість посилаються на ті самі дані, що зберігаються на `px4-travis.s3.amazonaws.com`. Це стосується, наприклад, [Omnibus F4 SD](../flight_controller/omnibus_f4_sd.md). -Метадані завантажуються через [github CI](https://github.com/PX4/PX4-Autopilot/blob/main/.github/workflows/metadata.yml) для всіх цілей збірки (таким чином, вони будуть доступні лише після того, як параметри будуть об'єднані в main). +The metadata is uploaded via the [build_all_targets](https://github.com/PX4/PX4-Autopilot/blob/main/.github/workflows/build_all_targets.yml) GitHub CI workflow for all build targets (and hence will only be available once parameters have been merged into main). :::info You can identify memory constrained boards because they specify `CONFIG_BOARD_CONSTRAINED_FLASH=y` in their [px4board definition file](https://github.com/PX4/PX4-Autopilot/blob/main/boards/omnibus/f4sd/default.px4board). @@ -60,6 +60,7 @@ JSON-файли метаданих для CI-збірок `main` також ко Це інтегрується з Crowdin для отримання перекладів, які зберігаються у теці [translated](https://github.com/PX4/PX4-Metadata-Translations/tree/main/translated) як xz-стиснуті файли перекладу для кожної мови. На них посилаються метадані компонентів безпілотника, і вони завантажуються за необхідності. Для отримання додаткової інформації див. [PX4-Metadata-Translations](https://github.com/PX4/PX4-Metadata-Translations/) та [Протокол метаданих компонентів > Переклад](https://mavlink.io/en/services/component_information.html#translation). +This is orchestrated by the [docs-orchestrator](https://github.com/PX4/PX4-Autopilot/blob/main/.github/workflows/docs-orchestrator.yml) GitHub CI workflow, which also regenerates auto-generated documentation such as parameter reference, airframe reference, and uORB message docs. :::info Файл параметрів XML з головної гілки проєкту PX4 копіюється до дерева джерел QGC за допомогою безперервної інтеграції (CI). Цей файл використовується як резервний варіант у випадках, коли метадані недоступні через протокол метаданих компонентів (цей підхід передує появі протоколу метаданих компонентів). diff --git a/docs/uk/advanced/tflm.md b/docs/uk/advanced/tflm.md deleted file mode 100644 index cf9f71323f..0000000000 --- a/docs/uk/advanced/tflm.md +++ /dev/null @@ -1,77 +0,0 @@ -# TensorFlow Lite Micro (TFLM) - -The PX4 [Multicopter Neural Network](../advanced/neural_networks.md) module ([mc_nn_control](../modules/modules_controller.md#mc-nn-control)) integrates a neural network that uses the [TensorFlow Lite Micro (TFLM)](https://github.com/tensorflow/tflite-micro) inference library. - -This is a mature inference library intended for use on embedded devices, and is hence a suitable choice for PX4. - -This guide explains how the TFLM library is integrated into the [mc_nn_control](../modules/modules_controller.md#mc-nn-control) module, and the changes you would have to make to use it for your own neural network. - -:::tip -For more information, see the [TFLM guide](https://ai.google.dev/edge/litert/microcontrollers/get_started). -::: - -## TLMF NN Formats - -TFLM uses networks in its own [tflite format](https://ai.google.dev/edge/litert/models/convert). -However, since many microcontrollers do not have native filesystem support, a tflite file can be converted to a C++ source and header file. - -This is what is done in `mc_nn_control`. -The tflight neural network is represented in code by the files [`control_net.cpp`](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mc_nn_control/control_net.cpp) and [`control_net.hpp`](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mc_nn_control/control_net.hpp). - -### Getting a Network in tflite Format - -There are many online resource for generating networks in the `.tflite` format. - -For this example we trained the network in the open source [Aerial Gym Simulator](https://ntnu-arl.github.io/aerial_gym_simulator/). -Aerial Gym includes a guide, and supports RL both for control and vision-based navigation tasks. - -The project includes conversion code for `PyTorch -> TFLM` in the [resources/conversion](https://github.com/ntnu-arl/aerial_gym_simulator/tree/main/resources/conversion) folder. - -### Updating `mc_nn_control` with your own NN - -You can convert a `.tflite` network into a `.cc` file in the ubuntu terminal with this command: - -```sh -xxd -i converted_model.tflite > model_data.cc -``` - -You will then have to modify the `control_net.hpp` and `control_net.cpp` to include the data from `model_data.cc`: - -- Take the size of the network in the bottom of the `.cc` file and replace the size in `control_net.hpp`. -- Take the data in the model array in the `cc` file, and replace the ones in `control_net.cpp`. - -You are now ready to run your own network. - -## Code Explanation - -This section explains the code used to integrate the NN in `control_net.cpp`. - -### Operations and Resolver - -Firstly we need to create the resolver and load the needed operators to run inference on the NN. -This is done in the top of `mc_nn_control.cpp`. -The number in `MicroMutableOpResolver<3>` represents how many operations you need to run the inference. - -A full list of the operators can be found in the [micro_mutable_op_resolver.h](https://github.com/tensorflow/tflite-micro/blob/main/tensorflow/lite/micro/micro_mutable_op_resolver.h) file. -There are quite a few supported operators, but you will not find the most advanced ones. -In the control example the network is fully connected so we use `AddFullyConnected()`. -Then the activation function is ReLU, and we `AddAdd()` for the bias on each neuron. - -### Interpreter - -In the `InitializeNetwork()` we start by setting up the model that we loaded from the source and header file. -Next is to set up the interpreter, this code is taken from the TFLM documentation and is thoroughly explained there. -The end state is that the `_control_interpreter` is set up to later run inference with the `Invoke()` member function. -The `_input_tensor` is also defined, it is fetched from `_control_interpreter->input(0)`. - -### Вхідні дані - -The `_input_tensor` is filled in the `PopulateInputTensor()` function. -`_input_tensor` works by accessing the `->data.f` member array and fill in the required inputs for your network. -The inputs used in the control network is covered in [Neural Networks](../advanced/neural_networks.md). - -### Виводи - -For the outputs the approach is fairly similar to the inputs. -After setting the correct inputs, calling the `Invoke()` function the outputs can be found by getting `_control_interpreter->output(0)`. -And from the output tensor you get the `->data.f` array. diff --git a/docs/uk/advanced_config/bootloader_update.md b/docs/uk/advanced_config/bootloader_update.md index faed8e2e0e..a343e85212 100644 --- a/docs/uk/advanced_config/bootloader_update.md +++ b/docs/uk/advanced_config/bootloader_update.md @@ -169,7 +169,7 @@ PX4 boards up to FMUv5X (before STM32H7) used the [PX4 bootloader](https://githu ## Оновлення завантажувача FMUv2 Якщо _QGroundControl_ встановлює ціль FMUv2 (див. консоль під час встановлення), і у вас є новіша плата, вам може знадобитися оновити завантажувальник, щоб мати доступ до всієї пам'яті на вашому контролері польоту. -This example explains how you can use [QGC Bootloader Update](qgc-bootloader-update-sys-bl-update) to update the bootloader. +This example explains how you can use [QGC Bootloader Update](#qgc-bootloader-update-sys-bl-update) to update the bootloader. :::info Ранні контролери польоту FMUv2 [Pixhawk-series](../flight_controller/pixhawk_series.md#fmu_versions) мали [апаратну проблему](../flight_controller/silicon_errata.md#fmuv2-pixhawk-silicon-errata), яка обмежувала їх використання 1 Мб флеш-пам’яті. diff --git a/docs/uk/advanced_config/bootloader_update_v6xrt.md b/docs/uk/advanced_config/bootloader_update_v6xrt.md index 499e6ad695..d653551cb0 100644 --- a/docs/uk/advanced_config/bootloader_update_v6xrt.md +++ b/docs/uk/advanced_config/bootloader_update_v6xrt.md @@ -1,6 +1,6 @@ # Оновлення завантажувача Pixhawk V6X-RT через USB -У цій темі пояснюється флеш-завантажувач [Pixhawk FMUv6X-RT](../flight_controller/pixhawk6x-rt.md) через USB _без необхідності перевірки налагодження_. +This topic explains how to flash [Pixhawk FMUv6X-RT](../flight_controller/pixhawk6x-rt.md) bootloader via USB _without needing a debug probe_. ## Загальний огляд @@ -33,7 +33,7 @@ arm-none-eabi-objcopy -O ihex build/px4_fmu-v6xrt_bootloader/px4_fmu-v6xrt_bootl ## Прошивання завантажувальної програми через USB. -Pixhawk V6X-RT постачається з вбудованим завантажувачем, розміщеним у ПЗУ. +The Pixhawk V6X-RT comes with a built-in bootloader located on the ROM. Щоб прошити новий завантажувач через USB, потрібно завантажити [NXP MCUXpresso Secure Provisioning](https://www.nxp.com/design/design-center/software/development-software/mcuxpresso-software-and- tools-/mcuxpresso-secure-provisioning-tool:MCUXPRESSO-SECURE-PROVIZIONING). Інструмент доступний для Windows, Linux і macOS. @@ -80,7 +80,7 @@ Pixhawk V6X-RT постачається з вбудованим завантаж ![Flash bootloader through Secure provisioning - Step 7](../../assets/advanced_config/bootloader_6xrt/bootloader_update_v6xrt_step7.png) -4. Коли конфігурація цільової пам'яті успішна, ви можете натиснути кнопку **Стерти все** +4. When the Target Memory configuration is successful you can press the **Erase All** button ![Flash bootloader through Secure provisioning - Step 8](../../assets/advanced_config/bootloader_6xrt/bootloader_update_v6xrt_step8.png) diff --git a/docs/uk/advanced_config/ethernet_setup.md b/docs/uk/advanced_config/ethernet_setup.md index 5366b53e2f..3e431543c4 100644 --- a/docs/uk/advanced_config/ethernet_setup.md +++ b/docs/uk/advanced_config/ethernet_setup.md @@ -27,6 +27,8 @@ PX4 supports Ethernet connectivity on [Pixhawk 5X-standard](https://github.com/p - [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) diff --git a/docs/uk/advanced_config/gnss_degraded_or_denied_flight.md b/docs/uk/advanced_config/gnss_degraded_or_denied_flight.md new file mode 100644 index 0000000000..c462c68524 --- /dev/null +++ b/docs/uk/advanced_config/gnss_degraded_or_denied_flight.md @@ -0,0 +1,78 @@ +# GNSS-Degraded & Denied Flight ("Dead-Reckoning" Mode) + + + +:::warning +Експериментальні налаштування +This is a new feature with limited real-world testing. +It is intended for GNSS dropout scenarios (not pure GNSS-denied from takeoff), and requires that alternative velocity/position sensors are available. + +Please [share your related test logs](../getting_started/flight_reporting.md#sharing-the-log-files-for-review-by-px4-developers) to help us verify and harden it. +::: + +PX4 is default-configured for outdoor flight with a reliable GNSS signal, but it can also be set up in "dead-reckoning mode" to more gracefully handle environments where GNSS is intermittently degraded or denied during flight. + +This section describes the differences between automatic and dead-reckoning modes, the circumstances in which each should be used, and how dead-reckoning is configured. + +## Загальний огляд + +PX4's EKF2 navigation has two modes for handling when GNSS data is determined to be unreliable: + +- **Automatic mode** (the default): Used for flying outdoors in environments where a GNSS signal is expected to be largely reliable. +- **Dead-reckoning mode**: Recommended when you want to fly missions or other position controlled modes when there is intermittent GNSS loss, such as when flying under a bridge, from outdoors into an indoor setting, or when there is GNSS jamming (it is not suitable for pure-indoor use, as a GNSS signal is required before arming). + +:::info +Dead-reckoning mode helps for both Fixed-Wing and Multicopter vehicles. +MC vehicles benefit more because they can hover when transitioning between sensor regimes. +FW needs continuous accurate velocity/position during the entire mission arc, making sensor transitions trickier. +::: + +## Mode Comparison + +The following sections provide more detail about each of the modes and when they should be used. + +### Automatic Mode + +In Automatic mode the EKF2 resets if GNSS is lost and no other sources of position are available. +This can result in a [position loss failsafe](../config/safety.md#position-loss-failsafe) and may trigger a shift into a mode that does not require global position, including stopping missions. + +This is desirable if the GNSS signal is likely to be recovered quickly and there are no mechanisms to estimate position when GNSS is unavailable. + +Use Automatic (default) when: + +- Flying in open sky with reliable GNSS throughout the mission. +- You want the EKF to reset to GNSS when it becomes available again. +- Operating in environments where GNSS is either good or completely unavailable (binary state). + +### Dead-Reckoning Mode + +In dead-reckoning mode, EKF2 stops fusing GNSS data when it becomes unreliable and prevents EKF2 resets — provided there are other sources of position or velocity data that can be fused. +This ensures that the vehicle can continue flying missions and other position controlled modes when GNSS is lost. + +When GNSS is recovered it will be fused with other measurements when tests indicate it can be trusted. +This may cause jerky movements in position controlled modes if the estimate has drifted. +This mode relies on having additional position or velocity sensors and must also have a reliable GNSS signal at boot. + +Use Dead-Reckoning when: + +- **Transitioning between GNSS and non-GNSS environments** (flying into buildings, under bridges, through tree cover). +- You have **redundant sensors** (optical flow, VIO, rangefinder, quality baro) that can maintain position estimation. +- Flying **missions that cross GPS-denied areas** where you want continuous operation rather than failsafe. +- **Urban environments** or other areas with intermittent GNSS quality. +- You want to **avoid EKF resets and jumps** when GNSS recovers (smoother transitions). + +## Налаштування + +To use dead-reckoning mode, the vehicle must have an alternative source of position or velocity information, such as an [Optical Flow](../sensor/optical_flow.md) sensor or [VIO](../computer_vision/visual_inertial_odometry.md) setup. + +To enable the mode: + +1. Set [EKF2_GPS_MODE](../advanced_config/parameter_reference.md#EKF2_GPS_MODE) to `1`. +2. Ensure that GNSS arming checks are enabled (a reliable GNSS signal is required before arming): + - [COM_ARM_WO_GPS](../advanced_config/parameter_reference.md#COM_ARM_WO_GPS) - set to `0` + - [EKF2_GPS_CHECK](../advanced_config/parameter_reference.md#EKF2_GPS_CHECK) - set to default. + +## Дивіться також + +- [GNSS Fault Detection](../advanced_config/tuning_the_ecl_ekf.md#gnss-fault-detection) in _Using PX4's Navigation Filter (EKF2)_ +- [Fuse, Reset, or Reject? Handling Various Data-sources in EKF2](https://www.youtube.com/watch?v=CMGQJNPiTJg) - _PX4 Developer Summit 2025_, Marco Hauswirth, Auterion AG diff --git a/docs/uk/advanced_config/index.md b/docs/uk/advanced_config/index.md index 6d1347fa9f..e64d6ed775 100644 --- a/docs/uk/advanced_config/index.md +++ b/docs/uk/advanced_config/index.md @@ -10,6 +10,7 @@ This topic lists configuration topics that are not particularly vehicle specific ## Feature configuration - [Using PX4's Navigation Filter (EKF2)](../advanced_config/tuning_the_ecl_ekf.md) +- [GNSS-Denied and Degraded Flight](../advanced_config/gnss_degraded_or_denied_flight.md) - [Конфігурація завершення польоту](../advanced_config/flight_termination.md) - [Конфігурація датчика землі](../advanced_config/land_detector.md) - [Prearm/Arm/Disarm Configuration](../advanced_config/prearm_arm_disarm.md) diff --git a/docs/uk/advanced_config/land_detector.md b/docs/uk/advanced_config/land_detector.md index 0d9b41ba63..5bbc33899f 100644 --- a/docs/uk/advanced_config/land_detector.md +++ b/docs/uk/advanced_config/land_detector.md @@ -39,7 +39,7 @@ Якщо умова не може бути досягнута через відсутність сенсорів, то умова, за замовчуванням, є істинною. Наприклад, у режимі [Acro](../flight_modes_mc/acro.md), коли жоден сенсор, крім гіроскопа, не активний, виявлення базується лише на виводі потужності і часі. -Для переходу до наступного стану кожна умова повинна бути виконана протягом однієї третини загального налаштованого часу спрацювання детектора посадки [LNDMC_TRIG_TIME](../advanced_config/parameter_reference.md#LNDMC_TRIG_TIME). +In order to proceed to the next state, each condition has to be true for 300ms. Якщо транспортний засіб обладнаний датчиком відстані, але відстань до землі в даний момент не вимірюється (зазвичай через те, що вона занадто велика), час спрацювання збільшується втричі. Якщо одна умова не виконується, виявник посадки негайно виходить з поточного стану. diff --git a/docs/uk/advanced_config/prearm_arm_disarm.md b/docs/uk/advanced_config/prearm_arm_disarm.md index 56f2f5ab9e..39c851588c 100644 --- a/docs/uk/advanced_config/prearm_arm_disarm.md +++ b/docs/uk/advanced_config/prearm_arm_disarm.md @@ -93,6 +93,28 @@ The button should be held down for one second to arm (when disarmed) or disarm ( | [COM_DISARM_LAND](../advanced_config/parameter_reference.md#COM_DISARM_LAND) | Час очікування для автоматичного відбрасування після приземлення. За замовчуванням: 2с (значення -1, щоб вимкнути). | | [COM_DISARM_PRFLT](../advanced_config/parameter_reference.md#COM_DISARM_PRFLT) | Час очікування для автоматичного відбрасування, якщо занадто повільно підйом. За замовчуванням: 10с (<=0, щоб вимкнути). | +## Auto-Arming on Boot + +The vehicle can be configured to arm automatically on boot once all preflight checks pass, +using the `COM_ARM_ON_BOOT` parameter. For safety, PX4 enforces a minimum 5-second delay after boot before attempting to arm. + +Once armed this way, the vehicle will not re-arm automatically after a manual disarm. + +:::info +The parameter value is read once at boot. +Changing it while the system is running has no effect until the next reboot. +::: + +:::warning +Use with caution. +A vehicle that arms automatically can spin up motors and actuators without any operator gesture. +Ensure the vehicle is in a safe state before powering on. +::: + +| Параметр | Опис | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | +| [COM_ARM_ON_BOOT](../advanced_config/parameter_reference.md#COM_ARM_ON_BOOT) | Arm automatically once preflight checks pass after boot. Default: `0` (Disabled). | + ## Pre-Arm Checks To reduce accidents, vehicles are only allowed to arm certain conditions are met (some of which are configurable). diff --git a/docs/uk/advanced_config/tuning_the_ecl_ekf.md b/docs/uk/advanced_config/tuning_the_ecl_ekf.md index 0755469343..ee190dbe8e 100644 --- a/docs/uk/advanced_config/tuning_the_ecl_ekf.md +++ b/docs/uk/advanced_config/tuning_the_ecl_ekf.md @@ -357,6 +357,10 @@ The mode is set using the [EKF2_GPS_MODE](../advanced_config/parameter_reference EKF2 may reset if no other sources of position or velocity are available. If GNSS altitude OR horizontal position data drifts, the system disables fusion of both measurements simultaneously (even if one would still pass validation) and avoids performing resets. +:::tip +See also [Fault Detection](https://youtu.be/CMGQJNPiTJg?si=sFtdf4AQbcOH8-u8) in "Fuse, Reset, or Reject? Handling Various Data-sources in EKF2" _PX4 Developer Summit 2025_, Marco Hauswirth, Auterion AG +::: + ##### Detection Logic Horizontal Position: @@ -398,6 +402,16 @@ With Valid GNSS Data: - **Alternative Sources**: Dead-reckoning mode provides enhanced protection by requiring absence of alternative navigation sources before allowing resets. - **Boot Vulnerability**: Initial faulty GNSS data cannot be detected automatically; requires operator intervention and manual position correction. +#### Ground Position Lock + +When a vehicle equipped with dead-reckoning sensors (e.g. airspeed for fixed-wing, or optical flow) is sitting on the ground before takeoff, those sensors provide little to no aiding — airspeed and optical flow measurements are unreliable at rest. In this case, the EKF relies on _constant position fusion_ (fusing a synthetic position measurement at the last known position) to prevent the estimate from drifting. However, this is only active when the vehicle is detected as stationary, so handling the vehicle or starting the engine can interrupt it. + +To counter this, [EKF2_POS_LOCK](../advanced_config/parameter_reference.md#EKF2_POS_LOCK) can be enabled to force constant position fusion to run while landed and the global horizontal position has already been initialized. + +:::note +`EKF2_POS_LOCK` has no effect in flight. +::: + ### Далекомір [Range finder](../sensor/rangefinders.md) distance to ground is used by a single state filter to estimate the vertical position of the terrain relative to the height datum. @@ -587,7 +601,7 @@ The **.ulog** format data can be parsed in python by using the [PX4 pyulog libra - Attitude output data is found in the [VehicleAttitude](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/VehicleAttitude.msg) message. - Local position output data is found in the [VehicleLocalPosition](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/VehicleLocalPosition.msg) message. - Global \(WGS-84\) output data is found in the [VehicleGlobalPosition](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/VehicleGlobalPosition.msg) message. -- Вихідні дані про швидкість вітру містяться в повідомленні [Wind.msg](https://github.com/PX4/PX4-Autopilot/blob/main/msg/Wind.msg). +- Wind velocity output data is found in the [AirspeedWind.msg](https://github.com/PX4/PX4-Autopilot/blob/main/msg/AirspeedWind.msg) message. ### Стани @@ -889,3 +903,4 @@ The rise in [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg ## Подальша інформація - [Огляд оцінки стану PX4](https://youtu.be/HkYRJJoyBwQ), _Саміт розробників PX4 2019_, д-р Пол Райзборо: Огляд оцінювача та основні зміни з 2018/19, а також очікувані покращення до 2019/ 20. +- [Fuse, Reset, or Reject? Handling Various Data-sources in EKF2](https://www.youtube.com/watch?v=CMGQJNPiTJg) - _PX4 Developer Summit 2025_, Marco Hauswirth, Auterion AG diff --git a/docs/uk/advanced_features/satcom_roadblock.md b/docs/uk/advanced_features/satcom_roadblock.md index 91702bb349..9fda66902d 100644 --- a/docs/uk/advanced_features/satcom_roadblock.md +++ b/docs/uk/advanced_features/satcom_roadblock.md @@ -9,7 +9,7 @@ Для посилання на супутникове зв'язку потрібні наступні компоненти: -- A [RockBlock 9603 Iridium Satellite Modem](https://www.iridium.com/products/ground-control-rockblock-9603/) module connected to a Pixhawk flashed with the PX4 Autopilot. +- A [RockBlock 9603 Iridium Satellite Modem](https://www.iridium.com/products/rockblock-9603) module connected to a Pixhawk flashed with the PX4 Autopilot. - Сервер повторного повідомлення працює Ubuntu Linux. - Автономний комп'ютер запущено _QGroundControl_ на Ubuntu Linux @@ -58,13 +58,13 @@ To [switch between the two antennas modes](https://docs.groundcontrol.com/iot/ro 2. Змінити швидкість передачі: - ``` + ```sh AT+IPR=9 ``` 3. Знову підключіться до моделі з параметрами 115200/8-N-1 і збережіть конфігурацію за допомогою: - ``` + ```sh AT&W0 ``` @@ -78,7 +78,7 @@ To [switch between the two antennas modes](https://docs.groundcontrol.com/iot/ro :::info Якщо параметр конфігурації недоступний у _QGroundControl_, можливо, вам знадобиться [додати драйвер до мікропрограми](../peripherals/serial_configuration.md#parameter_not_in_firmware): -``` +```txt drivers/telemetry/iridiumsbd ``` diff --git a/docs/uk/airframes/airframe_reference.md b/docs/uk/airframes/airframe_reference.md index c54f02eac1..84f6e64533 100644 --- a/docs/uk/airframes/airframe_reference.md +++ b/docs/uk/airframes/airframe_reference.md @@ -402,7 +402,7 @@ div.frame_variant td, div.frame_variant th { Підтримувач: Lorenz Meier <lorenz@px4.io>

SYS_AUTOSTART = 4050

- HolyBro QAV250 + HolyBro QAV250 Супроводжувач: Beat Kueng <beat-kueng@gmx.net>

SYS_AUTOSTART = 4050

@@ -457,6 +457,10 @@ div.frame_variant td, div.frame_variant th { Квадрокоптер SIH X Підтримувач: Romain Chiappinelli <romain.chiap@gmail.com>

SYS_AUTOSTART = 1100

+ + SIH Hexacopter X + Підтримувач: Romain Chiappinelli <romain.chiap@gmail.com>

SYS_AUTOSTART = 1105

+ @@ -604,7 +608,7 @@ div.frame_variant td, div.frame_variant th { Підтримувач: John Doe <john@example.com>

SYS_AUTOSTART = 50000

- Aion Robotics R1 UGV + Aion Robotics R1 UGV Підтримувач: John Doe <john@example.com>

SYS_AUTOSTART = 50001

diff --git a/docs/uk/assembly/_assembly.md b/docs/uk/assembly/_assembly.md index 163acaf4f7..d043bcb501 100644 --- a/docs/uk/assembly/_assembly.md +++ b/docs/uk/assembly/_assembly.md @@ -338,7 +338,7 @@ Any outputs on either PWM output bus can be connected to any actuators, motor, o Note that the PWM outputs are often labeled `AUX` or `MAIN`. Use the `AUX` bus if both are present, and `MAIN` otherwise. - [DShot ESC](../peripherals/dshot.md) (recommended) can only be used on the FMU PWM outputs. -- Motor outputs should be grouped together as much as possible rather than spread randomly across both the FMU and IO busses. +- Motor outputs should be grouped together as much as possible rather than spread randomly across both the FMU and IO buses. This is because if you assign some function to an output, such as DShot ESC, you can't then assign adjacent unused pins for anything other than a DShot ESC. ### Сервоприводи @@ -364,7 +364,7 @@ If you don't use servos that all accept the same voltage, you'll need to separat Other peripherals, such as high-power radios, cameras, and so on have their own power requirements. These will usually be supplied off a separate BEC. -The wiring and configuration of optional/less common components is covered within the [Hardware Hardware Selection & Setup](../hardware/drone_parts.md) topics for individual peripherals. +The wiring and configuration of optional/less common components is covered within the [Hardware Selection & Setup](../hardware/drone_parts.md) topics for individual peripherals. ## Build Tutorials @@ -410,11 +410,11 @@ 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) - [Holybro Pixhawk 4 Wiring Quickstart](../assembly/quick_start_pixhawk4.md) -- [Holybro Pixhawk 4 Mini (Discontinued) Wiring Quickstart](../assembly/quick_start_pixhawk4_mini.md) - [Holybro Durandal Wiring Quickstart](../assembly/quick_start_durandal.md) - [Holybro Pix32 v5 Wiring Quickstart](../assembly/quick_start_holybro_pix32_v5.md) - [Cube Wiring Quickstart](../assembly/quick_start_cube.md) (All cube variants) diff --git a/docs/uk/assembly/mount_gps_compass.md b/docs/uk/assembly/mount_gps_compass.md index 71fdb3a731..3243b95fe8 100644 --- a/docs/uk/assembly/mount_gps_compass.md +++ b/docs/uk/assembly/mount_gps_compass.md @@ -20,7 +20,7 @@ For more information see [Setting the Compass Orientation](../config/flight_cont ## Положення -In order to compensate for the relative motion between the receiver and the CoG, you should [configure](../advanced_config/parameters.md) the following parameters to set the offsets: [EKF2_GPS_POS_X](../advanced_config/parameter_reference.md#EKF2_GPS_POS_X), [EKF2_GPS_POS_Y](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Y) and [EKF2_GPS_POS_Z](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Z). +In order to compensate for the relative motion between the receiver and the CoG, you should [configure](../advanced_config/parameters.md) the following parameters to set the offsets: [SENS_GPS0_OFFX](../advanced_config/parameter_reference.md#SENS_GPS0_OFFX), [SENS_GPS0_OFFY](../advanced_config/parameter_reference.md#SENS_GPS0_OFFY) and [SENS_GPS0_OFFZ](../advanced_config/parameter_reference.md#SENS_GPS0_OFFZ). Це важливо, оскільки кадр тіла, що оцінюється EKF, буде збігатися з місцезнаходженням модуля GNSS та вважатиме його розміщеним на CoG(ЦМ). Якщо модуль GNSS значно відокремлений від CoG(ЦМ), то обертання навколо CoG(ЦМ) буде інтерпретовано як зміна висоти, що у деяких режимах польоту (наприклад, режим позиції) може призвести до непотрібних корекцій. diff --git a/docs/uk/assembly/quick_start_cuav_v5_nano.md b/docs/uk/assembly/quick_start_cuav_v5_nano.md index 5183da4694..456a513184 100644 --- a/docs/uk/assembly/quick_start_cuav_v5_nano.md +++ b/docs/uk/assembly/quick_start_cuav_v5_nano.md @@ -33,7 +33,7 @@ This quick start guide shows how to power the [CUAV V5 nano](../flight_controlle | DSM/SBUS/RSSI | Включає інтерфейси введення сигналів DSM, SBUS, RSSI, інтерфейс DSM може бути підключений до приймача DSM-супутника, інтерфейс SBUS - до приймача дистанційного керування SBUS, RSSI - для модуля зворотного повернення сили сигналу. | :::info -For more interface information, please read [V5 nano Manual](http://manual.cuav.net/V5-nano.pdf). +For more interface information, please read [V5 nano Manual](https://manual.cuav.net/V5-nano.pdf). ::: ![quickstart](../../assets/flight_controller/cuav_v5_nano/connection/v5_nano_quickstart_03.png) @@ -128,6 +128,6 @@ Motors/servos are connected to the MAIN ports in the order specified for your ve - [Airframe buildlog using CUAV v5 nano on a DJI FlameWheel450](../frames_multicopter/dji_f450_cuav_5nano.md) - [CUAV V5 nano](../flight_controller/cuav_v5_nano.md) -- [V5 nano manual](http://manual.cuav.net/V5-nano.pdf) (CUAV) +- [V5 nano manual](https://manual.cuav.net/V5-nano.pdf) (CUAV) - [FMUv5 reference design pinout](https://docs.google.com/spreadsheets/d/1-n0__BYDedQrc_2NHqBenG1DNepAgnHpSGglke-QQwY/edit#gid=912976165) (CUAV) - [CUAV Github](https://github.com/cuav) (CUAV) diff --git a/docs/uk/assembly/quick_start_cuav_v5_plus.md b/docs/uk/assembly/quick_start_cuav_v5_plus.md index 248d5e1a8d..e4a0c31fa7 100644 --- a/docs/uk/assembly/quick_start_cuav_v5_plus.md +++ b/docs/uk/assembly/quick_start_cuav_v5_plus.md @@ -33,7 +33,7 @@ This quick start guide shows how to power the [CUAV V5+](../flight_controller/cu | DSM/SBUS/RSSI | Включає інтерфейси введення сигналів DSM, SBUS, RSSI, інтерфейс DSM може бути підключений до приймача DSM-супутника, інтерфейс SBUS - до приймача дистанційного керування SBUS, RSSI - для модуля зворотного повернення сили сигналу. | :::info -For more interface information, please read [V5+ Manual](http://manual.cuav.net/V5-Plus.pdf). +For more interface information, please read [V5+ Manual](https://manual.cuav.net/V5-Plus.pdf). ::: ![V5+ AutoPilot](../../assets/flight_controller/cuav_v5_plus/connection/v5+_quickstart_02.png) @@ -122,12 +122,12 @@ Motors/servos are connected to the MAIN and AUX ports in the order specified for ## Схема розташування виводів -Download **V5+** pinouts from [here](http://manual.cuav.net/V5-Plus.pdf). +See [CUAV V5+ Manual](https://manual.cuav.net/V5-Plus.pdf). ## Подальша інформація - [Airframe build-log using CUAV v5+ on a DJI FlameWheel450](../frames_multicopter/dji_f450_cuav_5plus.md) -- [CUAV V5+ Manual](http://manual.cuav.net/V5-Plus.pdf) (CUAV) +- [CUAV V5+ Manual](https://manual.cuav.net/V5-Plus.pdf) (CUAV) - [CUAV V5+ docs](https://doc.cuav.net/controller/v5-autopilot/en/v5+.html) (CUAV) - [FMUv5 reference design pinout](https://docs.google.com/spreadsheets/d/1-n0__BYDedQrc_2NHqBenG1DNepAgnHpSGglke-QQwY/edit#gid=912976165) (CUAV) - [CUAV Github](https://github.com/cuav) (CUAV) diff --git a/docs/uk/assembly/quick_start_cuav_x25_evo.md b/docs/uk/assembly/quick_start_cuav_x25_evo.md new file mode 100644 index 0000000000..067cf58255 --- /dev/null +++ b/docs/uk/assembly/quick_start_cuav_x25_evo.md @@ -0,0 +1,153 @@ +# CUAV X25 EVO Wiring Quick Start + +:::warning +PX4 не розробляє цей (або будь-який інший) автопілот. +Contact the [manufacturer](https://store.cuav.net/) for hardware support or compliance issues. +::: + +This quick start guide shows how to power the [X25 EVO](../flight_controller/cuav_x25-evo.md) flight controller and connect its most important peripherals. + +:::info +The following flight controller models are applicable to this quick start guide. +[CUAV X25 SUPER](../flight_controller/cuav_x25-super.md) +::: + +## Огляд схеми підключення + +На зображенні нижче показано, як під'єднати найважливіші датчики та периферійні пристрої (за винятком виходів мотора та сервоприводів). +Ми розглянемо кожну з них докладно в наступних розділах. + +![wiring](../../assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_01.jpg) + +| Інтерфейс | **Function** | +| :----------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| POWER C1/C2 | Connect the PMU2 Lite to this port; this port is used for connecting the DroneCAN power module | +| M1 ~ M16 | PWM signal output ports, usable for controlling motors or servos; support 3.3V/5V PWM configuration | +| RC IN | Connect remote controller receivers with one-way protocols (e.g., SBUS/DSM/PPM). Note: ELRS/CRSF receivers should be connected to any serial port, not RC IN | +| RSSI | For connecting signal strength feedback modules | +| GPS&SAFETY | Connect Neo-series GPS or C-RTK-series RTK; this port includes interfaces for GPS, safety switch, and buzzer | +| GPS2 | Usable for connecting additional GPS/RTK modules | +| DEBUG (DSU) | For FMU chip debugging and reading debug device information; with ArduPilot firmware, it can be configured for other serial port functions | +| ADC3V3 | For analog level signal detection; the maximum detectable level signal is 3.3V | +| ADC6V6 | For analog level signal detection; the maximum detectable level signal is 6.6V (PX4 is not supported.) | +| TF CARD | Insert an SD card here to enable log storage functionality | +| ETH | Ethernet port, usable for connecting Ethernet devices such as companion computers | +| I2C1/2/3 | Connect external I2C devices (e.g., external compasses) for communication between the controller and I2C devices | +| TELEM1/TELEM2 | Connect telemetry modules (for data transmission) to enable MAVLINK data interaction | +| CAN1/2 | For communication between the controller and DroneCAN devices (e.g., connecting NEO4 SE GPS) | +| TYPE C | USB port of the controller, usable for connecting to the ground station, flashing firmware, and other operations | +| SPI6 | SPI port for external expansion; generally not used | + +## Передній бампер + +:::info +Якщо контролер не може бути змонтований у рекомендованому/стандартному положенні (наприклад, через обмеження місця), вам потрібно буде налаштувати програмне забезпечення автопілота з орієнтацією, яку ви фактично використовували: [Орієнтація контролера польоту](../config/flight_controller_orientation.md). +::: + +![front](../../assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_02.jpg) + +## GPS + компас + зумер + захисний вимикач + світлодіод + +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. + +Якщо вам потрібно використовувати допоміжний GPS, підключіться до порту **GPS2**. + +The GPS/compass should be [mounted on the frame](../assembly/mount_gps_compass.md) as far away from other electronics as possible (separating the compass from other electronics will reduce interference), with the direction markings towards the front of the vehicle (the arrow on the NEO GPS should match the arrow on the flight controller). + +![GPS](../../assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_03.jpg) + +:::info +Вбудований безпечний вимикач в GPS-модулі увімкнений _за замовчуванням_ (коли включений, PX4 не дозволить вам готувати до польоту). +To disable the safety, press and hold the safety switch for 1 second. +Ви можете натиснути безпечний вимикач знову, щоб увімкнути безпеку та відключити транспортний засіб (це може бути корисно, якщо, з якихось причин, ви не можете вимкнути транспортний засіб за допомогою вашого пульта дистанційного керування або наземної станції). +::: + +## Радіоуправління + +Для того щоб керувати транспортним засобом _вручну_, потрібна система радіоуправління (RC) (PX4 не потребує системи радіоуправління для автономних режимів польоту). + +Вам потрібно [вибрати сумісний передавач/приймач](../getting_started/rc_transmitter_receiver.md) і _зв'язати_ їх таким чином, щоб вони взаємодіяли (ознайомтеся з інструкціями, що додаються до вашого конкретного передавача/приймача). + +Connection methods vary by remote controller and receiver type: + +### Android Remote Controllers + +Take the H16 as an example: + +![H16 control](../../assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_04.jpg) + +Connect **TELEM1/TELEM2** to the UART0 port of the H16 remote controller, and link the H16’s SBUS pin to the **RC IN** port. + +### SBUS/DSM/PPM Protocol Receivers + +![SBUS/DSM/PPM control](../../assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_05.jpg) + +Use wires to connect the receiver to the **RC IN** port at the rear of the controller. + +### ELRS/CRSF Receivers + +![ELRS/CRSF control](../../assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_06.jpg) + +Connect the [ELRS/CRSF](../telemetry/crsf_telemetry.md) receiver to any UART serial port of the X25 EVO (e.g., **TELEM2**). + +## Power + +The X25 EVO comes standard with the PMU2 Lite power module, which supports 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). + +![Power](../../assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_07.png) + +## Телеметрійна (радіо) система + +[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. + +Ви також можете придбати телеметричні радіо з [магазину CUAV](https://store.cuav.net/uav-telemetry-module/). + +![Telemetry system](../../assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_04.jpg) + +## SD-карта + +Картки SD настійно рекомендується, оскільки вони потрібні для [запису та аналізу даних польоту](../getting_started/flight_reporting.md), для виконання завдань та використання апаратного засобу UAVCAN bus. +An SD card is already installed on X25 EVO when it leaves the factory. + +:::tip +Для отримання додаткової інформації див. [Основні концепції > SD-карти (знімна пам'ять)](../getting_started/px4_basic_concepts.md#sd-cards-removable-memory). +::: + +## Мотори/Сервоприводи + +Motors/servos are connected to the **M1~M16** ports in the order specified for your vehicle in the [Airframe Reference](../airframes/airframe_reference.md). + +![Motors](../../assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_08.jpg) + +## Джерело живлення для сервоприводу + +The X25 EVO does not supply power to servos. If you need to power servos: + +1. Connect a BEC to the positive and negative terminals of any column among **M1 ~ M16** (the positive and negative terminals of **M1 ~ M16** are interconnected). +2. Then connect the servos to the same column. + +![servo power supply](../../assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_09.jpg) + +:::info +Напруга шини живлення повинна бути відповідною для використаного сервоприводу! +::: + +## Інші периферійні пристрої + +Підключення та конфігурація додаткових/менш поширених компонентів описано в темах для окремих [периферійних пристроїв](../peripherals/index.md). + +## Налаштування + +Загальну інформацію про конфігурацію описано в: [Конфігурація автопілота](../config/index.md). + +QuadPlane-specific configuration is covered here: [QuadPlane VTOL Configuration](../config_vtol/vtol_quad_configuration.md) + +## Подальша інформація + +- [Документація CUAV](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) diff --git a/docs/uk/assembly/quick_start_cube.md b/docs/uk/assembly/quick_start_cube.md index 8ef4be835c..c71eb95185 100644 --- a/docs/uk/assembly/quick_start_cube.md +++ b/docs/uk/assembly/quick_start_cube.md @@ -18,7 +18,7 @@ Further/updated information may be available in the [Cube User Manual](https://d ## Аксесуари -Cube comes with most (or all) of the accessories you will need when [purchased](../flight_controller/pixhawk-2.md#stores). +Cube comes with most (or all) of the accessories you will need when [purchased](../flight_controller/pixhawk-2.md#store). ![Cube Accessories](../../assets/flight_controller/cube/cube_accessories.jpg) diff --git a/docs/uk/assembly/quick_start_pixhawk4_mini.md b/docs/uk/assembly/quick_start_pixhawk4_mini.md deleted file mode 100644 index 52acc06e67..0000000000 --- a/docs/uk/assembly/quick_start_pixhawk4_mini.md +++ /dev/null @@ -1,161 +0,0 @@ -# _Pixhawk 4 Mini_ Wiring Quick Start - -:::warning -PX4 не розробляє цей (або будь-який інший) автопілот. -Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. -::: - -This quick start guide shows how to power the [_Pixhawk® 4 Mini_](../flight_controller/pixhawk4_mini.md) flight controller and connect its most important peripherals. - -![Pixhawk4 mini](../../assets/flight_controller/pixhawk4mini/pixhawk4mini_iso_1.png) - -## Огляд схеми підключення - -На зображенні нижче показано, куди підключити найважливіші датчики та периферійні пристрої (за винятком моторів та сервоприводів). - -![Pixhawk 4 Mini Wiring Overview](../../assets/flight_controller/pixhawk4mini/pixhawk4mini_wiring_overview.png) - -:::tip -More information about available ports can be found here: [_Pixhawk 4 Mini_ > Interfaces](../flight_controller/pixhawk4_mini.md#interfaces). -::: - -## Монтаж та орієнтація контролера - -_Pixhawk 4 Mini_ should be mounted on your frame using vibration-damping foam pads (included in the kit). -Вона повинна розташовуватися якомога ближче до центру тяжіння вашого апарату верхньою стороною вгору зі стрілкою, що вказує в напрямку передньої частини апарату. - -![Pixhawk 4 Mini Orientation](../../assets/flight_controller/pixhawk4mini/pixhawk4mini_orientation.png) - -:::info -Якщо контролер не може бути змонтований у рекомендованому/стандартному положенні (наприклад, через обмеження місця), вам потрібно буде налаштувати програмне забезпечення автопілота з орієнтацією, яку ви фактично використовували: [Орієнтація контролера польоту](../config/flight_controller_orientation.md). -::: - -## GPS + компас + зумер + захисний вимикач + світлодіод - -Attach the provided GPS with integrated compass, safety switch, buzzer, and LED to the **GPS MODULE** port. The GPS/Compass should be [mounted on the frame](../assembly/mount_gps_compass.md) as far away from other electronics as possible, with the direction marker towards the front of the vehicle (separating the compass from other electronics will reduce interference). - -![Connect compass/GPS to Pixhawk 4](../../assets/flight_controller/pixhawk4mini/pixhawk4mini_gps.png) - -:::info -Вбудований безпечний вимикач в GPS-модулі увімкнений _за замовчуванням_ (коли включений, PX4 не дозволить вам готувати до польоту). -Щоб вимкнути безпеку, натисніть і утримуйте безпечний вимикач протягом 1 секунди. -Ви можете натиснути безпечний вимикач знову, щоб увімкнути безпеку та відключити транспортний засіб (це може бути корисно, якщо, з якихось причин, ви не можете вимкнути транспортний засіб за допомогою вашого пульта дистанційного керування або наземної станції). -::: - -## Power - -Плата управління живленням (PMB) виконує функції блоку живлення та розподільчої плати живлення. -In addition to providing regulated power to _Pixhawk 4 Mini_ and the ESCs, it sends information to the autopilot about the battery’s voltage and current draw. - -Connect the output of the PMB that comes with the kit to the **POWER** port of the _Pixhawk 4 Mini_ using a 6-wire cable. -Підключення PMB, включаючи живлення та сигнальні з'єднання з ESC та сервоприводами, пояснені на зображенні нижче. - -![Pixhawk 4 - Power Management Board](../../assets/flight_controller/pixhawk4mini/pixhawk4mini_power_management.png) - -:::info -The image above only shows the connection of a single ESC and a single servo. -Підключіть інші ESC та сервоприводи аналогічно. -::: - -| Pin(s) або роз'єм | Функція | -| ------------------------------------ | -------------------------------------------------------------------------- | -| B+ | Підключіться до ESC B+, щоб живити ESC | -| GND | Підключіться до землі ESC | -| PWR | JST-GH 6-pin Connector, 5V 3A output
connect to _Pixhawk 4 Mini_ POWER | -| BAT | Живлення, підключіть до акумулятора LiPo 2~12s | - -The pinout of the _Pixhawk 4 Mini_ **POWER** port is shown below. -The `CURRENT` signal should carry an analog voltage from 0-3.3V for 0-120A as default. -The `VOLTAGE` signal should carry an analog voltage from 0-3.3V for 0-60V as default. -Лінії VCC повинні пропонувати принаймні 3A безперервного струму і за замовчуванням повинні мати напругу 5,1 В. Нижчий напруга 5V все ще прийнятний, але не рекомендується. - -| Pin | Сигнал | Вольтаж | -| --------------------------- | ------- | --------------------- | -| 1(red) | VCC | +5V | -| 2(black) | VCC | +5V | -| 3(black) | CURRENT | +3.3V | -| 4(black) | VOLTAGE | +3.3V | -| 5(black) | GND | GND | -| 6(black) | GND | GND | - -:::info -If using a plane or rover, the 8 pin power (+) rail of **MAIN OUT** will need to be separately powered in order to drive servos for rudders, elevons, etc. -Щоб це зробити, живильну рейку потрібно підключити до ESC з BEC, автономного BEC на 5V або 2S LiPo акумулятора. -Будьте обережні з напругою сервопривода, який ви збираєтеся використовувати тут. -::: - - - -:::info -Using the Power Module that comes with the kit you will need to configure the _Number of Cells_ in the [Power Settings](https://docs.qgroundcontrol.com/master/en/qgc-user-guide/setup_view/power.html) but you won't need to calibrate the _voltage divider_. -You will have to update the _voltage divider_ if you are using any other power module (e.g. the one from the Pixracer). -::: - -## Радіоуправління - -Для того щоб керувати транспортним засобом _вручну_, потрібна система радіоуправління (RC) (PX4 не потребує системи радіоуправління для автономних режимів польоту). - -Вам потрібно [вибрати сумісний передавач/приймач](../getting_started/rc_transmitter_receiver.md) і _зв'язати_ їх таким чином, щоб вони взаємодіяли (ознайомтеся з інструкціями, що додаються до вашого конкретного передавача/приймача). - -The instructions below show how to connect the different types of receivers to _Pixhawk 4 Mini_: - -- Spektrum/DSM or S.BUS receivers connect to the **DSM/SBUS RC** input. - - ![Pixhawk 4 Mini - Radio port for Spektrum receivers](../../assets/flight_controller/pixhawk4mini/pixhawk4mini_rc_dsmsbus.png) - -- PPM receivers connect to the **PPM RC** input port. - - ![Pixhawk 4 Mini - Radio port for PPM receivers](../../assets/flight_controller/pixhawk4mini/pixhawk4mini_rc_ppm.png) - -- PPM and PWM receivers that have an _individual wire for each channel_ must connect to the **PPM RC** port _via a PPM encoder_ [like this one](https://www.getfpv.com/radios/radio-accessories/holybro-ppm-encoder-module.html) (PPM-Sum receivers use a single signal wire for all channels). - -Для отримання додаткової інформації про вибір радіосистеми, сумісність приймача та зв'язок вашої передавача/приймача, див. статтю: [Пульт керування передавачів & приймачів](../getting_started/rc_transmitter_receiver.md). - -## Телеметрійне радіо (Опціонально) - -Телеметричні радіостанції можуть використовуватися для зв'язку та управління транспортним засобом у польоті з наземної станції (наприклад, ви можете направляти БПЛА до певної позиції або завантажувати нове завдання). - -The vehicle-based radio should be connected to the **TELEM1** port as shown below (if connected to this port, no further configuration is required). -Інша радіостанція підключається до вашого комп'ютера або мобільного пристрою наземної станції (зазвичай за допомогою USB). - -![Pixhawk 4 Mini Telemetry](../../assets/flight_controller/pixhawk4mini/pixhawk4mini_telemetry.png) - -## microSD-карта (Опціонально) - -SD cards are highly recommended as they are needed to [log and analyse flight details](../getting_started/flight_reporting.md), to run missions, and to use UAVCAN-bus hardware. -Insert the card (included in the kit) into _Pixhawk 4 Mini_ as shown below. - -![Pixhawk 4 Mini SD Card](../../assets/flight_controller/pixhawk4mini/pixhawk4mini_sdcard.png) - -:::tip -Для отримання додаткової інформації див. [Основні концепції > SD-карти (знімна пам'ять)](../getting_started/px4_basic_concepts.md#sd-cards-removable-memory). -::: - -## Двигуни - -Motors/servos are connected to the **MAIN OUT** ports in the order specified for your vehicle in the [Airframe Reference](../airframes/airframe_reference.md). See [_Pixhawk 4 Mini_ > Supported Platforms](../flight_controller/pixhawk4_mini.md#supported-platforms) for more information. - -:::info -Цей довідник містить зіставлення портів виводу до моторів/сервоприводів для всіх підтримуваних повітряних та наземних шасі (якщо ваше шасі не вказане в довіднику, то використовуйте "загальний" планер відповідного типу). -::: - -:::warning -Відображення не є однорідним для всіх конструкцій (наприклад, ви не можете покладатися на те, що ручка газу буде на тому ж вихідному порту для всіх повітряних конструкцій). -Переконайтеся, що ви використовуєте правильне зіставлення для вашого апарату. -::: - -## Інші периферійні пристрої - -Підключення та конфігурація додаткових/менш поширених компонентів описано в темах для окремих [периферійних пристроїв](../peripherals/index.md). - -## Налаштування - -Загальну інформацію про конфігурацію описано в: [Конфігурація автопілота](../config/index.md). - -Конкретні конфігурації QuadPlane тут: [QuadPlane VTOL налаштування](../config_vtol/vtol_quad_configuration.md) - - - -## Подальша інформація - -- [_Pixhawk 4 Mini_](../flight_controller/pixhawk4_mini.md) diff --git a/docs/uk/assembly/quick_start_pixhawk5x.md b/docs/uk/assembly/quick_start_pixhawk5x.md index 6eb54d132c..95e12f5bfc 100644 --- a/docs/uk/assembly/quick_start_pixhawk5x.md +++ b/docs/uk/assembly/quick_start_pixhawk5x.md @@ -52,7 +52,7 @@ The GPS/Compass should be [mounted on the frame](../assembly/mount_gps_compass.m ## Power Connect the output of the _PM02D Power Module_ (PM board) that comes with the Standard Set to one of the **POWER** port of _Pixhawk 5X_ using the 6-wire cable. -The PM02D and Power ports on the Pixhawk 5X uses the 6 circuit [2.00mm Pitch CLIK-Mate Wire-to-Board PCB Receptacle](https://www.molex.com/en-us/products/part-detail/5024430670) & [Housing](https://www.molex.com/molex/products/part-detail/crimp_housings/5024390600). +The PM02D and Power ports on the Pixhawk 5X uses the 6 circuit [2.00mm Pitch CLIK-Mate Wire-to-Board PCB Receptacle](https://www.molex.com/en-us/products/part-detail/5024430670) & [Housing](https://www.molex.com/en-us/products/part-detail/5024390600). The PM02D Power Module supports **2~6S** battery, the board input should be connected to your LiPo battery. Note that the PM board does not supply power to the + and - pins of **FMU PWM OUT** and **I/O PWM OUT**. diff --git a/docs/uk/assembly/quick_start_pixhawk6x.md b/docs/uk/assembly/quick_start_pixhawk6x.md index c1d5bcf6bd..b1fc6aeb1d 100644 --- a/docs/uk/assembly/quick_start_pixhawk6x.md +++ b/docs/uk/assembly/quick_start_pixhawk6x.md @@ -65,7 +65,7 @@ The GPS/Compass should be [mounted on the frame](../assembly/mount_gps_compass.m ## Power Connect the output of the _PM02D Power Module_ (PM board) that comes with the Standard Set to one of the **POWER** port of _Pixhawk 6X_ using the 6-wire cable. -The PM02D and Power ports on the Pixhawk 6X uses the 6 circuit [2.00mm Pitch CLIK-Mate Wire-to-Board PCB Receptacle](https://www.molex.com/en-us/products/part-detail/5024430670) & [Housing](https://www.molex.com/molex/products/part-detail/crimp_housings/5024390600). +The PM02D and Power ports on the Pixhawk 6X uses the 6 circuit [2.00mm Pitch CLIK-Mate Wire-to-Board PCB Receptacle](https://www.molex.com/en-us/products/part-detail/5024430670) & [Housing](https://www.molex.com/en-us/products/part-detail/5024390600). The PM02D Power Module supports **2~6S** battery, the board input should be connected to your LiPo battery. Note that the PM board does not supply power to the + and - pins of **FMU PWM OUT** and **I/O PWM OUT**. diff --git a/docs/uk/assembly/quick_start_pixracer.md b/docs/uk/assembly/quick_start_pixracer.md index 2de74ed8f6..7e364f3f36 100644 --- a/docs/uk/assembly/quick_start_pixracer.md +++ b/docs/uk/assembly/quick_start_pixracer.md @@ -52,7 +52,7 @@ This quick start guide shows how to power the [Pixracer](../flight_controller/pi Pixracer has inbuilt WiFi, but also supports telemetry via external Wi-Fi or radio telemetry modules connected to the `TELEM1` or `TELEM2` ports. Це показано на схемі підключення нижче. -![Pixracer external telemtry options](../../assets/flight_controller/pixracer/pixracer_top_telemetry.jpg) +![Pixracer external telemetry options](../../assets/flight_controller/pixracer/pixracer_top_telemetry.jpg) :::info The `TELEM2` port must be configured as a second MAVLink instance using the [MAV_2_CONFIG](../advanced_config/parameter_reference.md#MAV_2_CONFIG) parameter. diff --git a/docs/uk/camera/camera_architecture.md b/docs/uk/camera/camera_architecture.md index d9b243372e..4defdeba1d 100644 --- a/docs/uk/camera/camera_architecture.md +++ b/docs/uk/camera/camera_architecture.md @@ -36,7 +36,7 @@ PX4 повинен бути налаштований для маршрутиза Ця робота виконується трьома компонентами PX4: [`camera_trigger` driver](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/camera_trigger), [`camera_capture` driver](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/camera_capture), модуль `camera-feedback` (../modules/modules_system.md#camera-feedback). `camera_trigger` підписується на тему [VehicleCommand](../msg_docs/VehicleCommand.md) та відстежує оновлення в [команди, які він підтримує](../camera/fc_connected_camera.md#mavlink-command-interface). -Ці оновлення відбуваються, коли отримано команду через MAVLink або коли [елемент камери досягнутий у місії](#camera-commands-in-missions). +These updates occur when either a command is received via MAVLink or when a [camera item is reached in a mission](#camera-commands-in-missions). Команди увімкнення та вимкнення спрацьовують, а також налаштовують спрацьовування за часовими та відстаневими інтервалами. Водій відстежує ці інтервали, і коли це потрібно, спрацьовують виходи. diff --git a/docs/uk/camera/camera_intel_realsense_t265_vio.md b/docs/uk/camera/camera_intel_realsense_t265_vio.md index 9dd630a198..ee97fbcc9c 100644 --- a/docs/uk/camera/camera_intel_realsense_t265_vio.md +++ b/docs/uk/camera/camera_intel_realsense_t265_vio.md @@ -18,17 +18,22 @@ No longer available. На загальному рівні: -- Для отримання необроблених даних з камери слід використовувати [обгортку `realsense-ros`](https://github.com/IntelRealSense/realsense-ros), надану компанією Intel. +- The [`realsense-ros` wrapper](https://github.com/realsenseai/realsense-ros) provided by Intel should be used to extract the raw data from the camera. + - Камеру слід встановити об'єктивами спрямованими вниз (за замовчуванням). Не забудьте вказати орієнтацію камери, опублікувавши статичне перетворення між `base_link` та `camera_pose_frame` у файлі запуску ROS, наприклад: + ```xml ``` + Це - статичне перетворення, що пов'язує систему відліку камери `camera_pose_frame` у ROS з системою відліку дрона `base_link` у MAVROS. + - перші три `args` вказують _перетворення_ x,y,z у метрах від центру контролера польоту до камери. Наприклад, якщо камера знаходиться на відстані 10 см від контролера і на висоті 4 см, перші три числа будуть: [0.1, 0, 0.04,...] - наступні три `args` вказують обертання в радіанах (рискання, тангаж, крен). Тому `[... 0, 1.5708, 0]` означає нахил вниз на 90° (обернений до землі). Обернений вперед буде [... 0 0 0]. + - Камера чутлива до високочастотних вібрацій! Вона повинна бути змонтована з м'яким кріпленням, наприклад з піною для віброізоляції. diff --git a/docs/uk/camera/fc_connected_camera.md b/docs/uk/camera/fc_connected_camera.md index 648c29a108..660266d966 100644 --- a/docs/uk/camera/fc_connected_camera.md +++ b/docs/uk/camera/fc_connected_camera.md @@ -79,7 +79,7 @@ PX4 підтримує наступні команди MAVLink для камер ## Налаштування спрацьовування -Камери можна підключати до FC для виклику за допомогою різних інтерфейсів, таких як PWM та GPIO, вказавши відповідний [задній інтерфейс тригера](#trigger-interface-backends). +Cameras can be connected to the FC for triggering using different interfaces, such as PWM, and GPIO, by specifying the appropriate [trigger interface backend](#trigger-interface-backends). Ви також можете вказати камеру [режим тригера](#trigger-mode). Цю конфігурацію найлегше виконати з розділу _QGroundControl_ [Налаштування рухомого засобу > Камера](https://docs.qgroundcontrol.com/master/en/qgc-user-guide/setup_view/camera.html#px4-camera-setup). @@ -308,7 +308,7 @@ end ### Крок 4 Вам доведеться змінити свій драйвер, щоб дотримуватися схеми послідовності вище. -Для камер [IDS Imaging UEye](https://github.com/ProjectArtemis/ueye_cam) та для камер, що відповідають стандарту [IEEE1394 compliant](https://github.com/andre-nguyen/camera1394), доступні публічні посилання на референтні реалізації. +Public reference implementations for [IDS Imaging UEye](https://github.com/anqixu/ueye_cam) cameras and for [IEEE1394 compliant](https://github.com/andre-nguyen/camera1394) cameras are available. ## Дивіться також diff --git a/docs/uk/camera/mavlink_v1_camera.md b/docs/uk/camera/mavlink_v1_camera.md index 1321fc29ca..3431845464 100644 --- a/docs/uk/camera/mavlink_v1_camera.md +++ b/docs/uk/camera/mavlink_v1_camera.md @@ -1,4 +1,4 @@ -# Прості камери MAVLink (Протокол камери v1) +# Simple MAVLink Cameras (Camera Protocol v1) Ця тема пояснює, як використовувати PX4 з MAVLink [камерою](../camera/index.md), що реалізує [Протокол Камери v1 (Простий Протокол Тригера)](https://mavlink.io/en/services/camera_v1.html) з PX4 та Наземною Станцією. @@ -18,7 +18,7 @@ PX4 підтримує цей набір команд для спрацьовування камер з вбудованою підтримкою протоколу (як описано в цій темі), а також для [камер, підключених до виходів контролера польоту](../camera/fc_connected_camera.md). Наземні станції та SDK MAVLink, як правило, надсилають команди камери автопілоту, який потім передає їх на підключений канал MAVLink типу `onboard`. -PX4 також повторно відправляє будь-які елементи місії камери, з якими він зустрічається у місії як команди камери: команди, які не приймаються, реєструються. +PX4 also re-emits any camera mission items it encounters in a mission as camera commands: commands that aren't accepted are logged. У всіх випадках команди надсилаються з системним ідентифікатором автопілота та ідентифікатором компоненту 0 (тобто адресовані всім компонентам, включаючи камери). PX4 також буде випускати [CAMERA_TRIGGER](https://mavlink.io/en/messages/common.html#CAMERA_TRIGGER) кожного разу, коли спрацьовує захоплення зображення (сама камера також може випускати це повідомлення при спрацьовуванні). diff --git a/docs/uk/can/index.md b/docs/uk/can/index.md index 14ebfa20ff..15172383c3 100644 --- a/docs/uk/can/index.md +++ b/docs/uk/can/index.md @@ -38,7 +38,7 @@ Devices within a network are connected in a _daisy-chain_ in any order (this dif :::warning Don't connect each CAN peripheral to a separate CAN port! -Unlike UARTs, CAN peripherals are designed to be daisy chained, with additional ports such as `CAN2` used for [redundancy](redundancy). +Unlike UARTs, CAN peripherals are designed to be daisy chained, with additional ports such as `CAN2` used for [redundancy](#redundancy). ::: На обох кінцях ланцюга між двома лініями передачі даних слід під’єднати термінальний резистор 120 Ом. @@ -84,7 +84,7 @@ You only _need_ one CAN port to support an arbitrary number of CAN devices using Don't connect each CAN peripheral to a separate CAN port! ::: -Generally you'll daisy all CAN peripherals off a single port, and if there is more than one CAN port, use the second one for [redundancy](redundancy). +Generally you'll daisy all CAN peripherals off a single port, and if there is more than one CAN port, use the second one for [redundancy](#redundancy). If three are three ports, you might use the remaining network for devices that support another CAN protocol. The documentation for your flight controller should indicate which ports are supported/enabled. diff --git a/docs/uk/companion_computer/companion_computer_peripherals.md b/docs/uk/companion_computer/companion_computer_peripherals.md index a8223c1e6a..af8ce87b55 100644 --- a/docs/uk/companion_computer/companion_computer_peripherals.md +++ b/docs/uk/companion_computer/companion_computer_peripherals.md @@ -54,8 +54,8 @@ Cameras are used image and video capture, and more generally to provide data for Серед популярних стереокамер: -- [Intel® RealSense™ Depth Camera D435](https://realsenseai.com/stereo-depth-cameras/stereo-depth-camera-d435/) -- [Intel® RealSense™ Depth Camera D415](https://realsenseai.com/stereo-depth-cameras/stereo-depth-camera-d415/) +- [Intel® RealSense™ Depth Camera D435](https://www.realsenseai.com/products/stereo-depth-camera-d435/) +- [Intel® RealSense™ Depth Camera D415](https://www.realsenseai.com/products/stereo-depth-camera-d415/) - [DUO MLX](https://duo3d.com/product/duo-minilx-lv1) ### VIO Камера/Сенсори diff --git a/docs/uk/companion_computer/holybro_pixhawk_jetson_baseboard.md b/docs/uk/companion_computer/holybro_pixhawk_jetson_baseboard.md index 97aa227df0..a4c3677b31 100644 --- a/docs/uk/companion_computer/holybro_pixhawk_jetson_baseboard.md +++ b/docs/uk/companion_computer/holybro_pixhawk_jetson_baseboard.md @@ -786,7 +786,7 @@ sudo apt install build-essential cmake git genromfs kconfig-frontends libncurses ## Building/Flashing the Pixhawk The recommended way to update PX4 is on the Pixhawk part of the board is to use your development computer. -You can either install install prebuilt binaries with QGroundControl, or first build and then upload custom firmware. +You can either install prebuilt binaries with QGroundControl, or first build and then upload custom firmware. Alternatively, you can build and deploy PX4 firmware to the Pixhawk part from the Jetson. diff --git a/docs/uk/companion_computer/holybro_pixhawk_rpi_cm4_baseboard.md b/docs/uk/companion_computer/holybro_pixhawk_rpi_cm4_baseboard.md index f62faa1333..1901da5442 100644 --- a/docs/uk/companion_computer/holybro_pixhawk_rpi_cm4_baseboard.md +++ b/docs/uk/companion_computer/holybro_pixhawk_rpi_cm4_baseboard.md @@ -99,7 +99,7 @@ RPi CM4 та контролер польоту повинні бути живл Цей розділ пояснює, як встановити вашу улюблену дистрибутив Linux, таку як "Raspberry Pi OS 64bit", на RPi EMCC. -Примітки: +Notes: - Якщо ви використовуєте PX4, вам потрібно використовувати версію PX4 1.13.1 або новішу, щоб PX4 впізнав цю базову плату. - Вентилятор не показує, чи живиться/працює RPi CM4. diff --git a/docs/uk/companion_computer/index.md b/docs/uk/companion_computer/index.md index 3ad3f93548..505840d88e 100644 --- a/docs/uk/companion_computer/index.md +++ b/docs/uk/companion_computer/index.md @@ -33,7 +33,7 @@ The boards support the [Pixhawk Autopilot Bus (PAB)](../flight_controller/pixhaw ## Параметри супутнього комп'ютера -PX4 можна використовувати з комп'ютерами, які можна налаштувати для зв’язку через MAVLink або microROS/uXRCE-DDS через послідовний порт (або порт Ethernet, якщо є). +PX4 can be used with computers that can be configured to communicate via MAVLink or microROS/uXRCE-DDS over a serial port (or Ethernet port, if present). Невеликий набір можливих альтернатив наведено нижче. Більші приклади високої потужності: diff --git a/docs/uk/companion_computer/pixhawk_rpi.md b/docs/uk/companion_computer/pixhawk_rpi.md index 2d33d41b8f..5821b470f6 100644 --- a/docs/uk/companion_computer/pixhawk_rpi.md +++ b/docs/uk/companion_computer/pixhawk_rpi.md @@ -1,6 +1,6 @@ # Супутник Raspberry Pi з Pixhawk -This topic describes how to setup a Raspberry Pi ("RPi") companion companion running [ROS 2](../ros2/user_guide.md) on Linux Ubuntu OS, connecting to a [Pixhawk](../flight_controller/autopilot_pixhawk_standard.md) flight controller using a serial connection between the Pixhawk `TELEM2` port and the RPi's TX/RX pins. +This topic describes how to setup a Raspberry Pi ("RPi") companion running [ROS 2](../ros2/user_guide.md) on Linux Ubuntu OS, connecting to a [Pixhawk](../flight_controller/autopilot_pixhawk_standard.md) flight controller using a serial connection between the Pixhawk `TELEM2` port and the RPi's TX/RX pins. Ці інструкції мають бути легко розширювані для інших конфігурацій контролерів RPi та польотів. diff --git a/docs/uk/companion_computer/video_streaming.md b/docs/uk/companion_computer/video_streaming.md index 09e9cb25a9..800390d0b3 100644 --- a/docs/uk/companion_computer/video_streaming.md +++ b/docs/uk/companion_computer/video_streaming.md @@ -20,7 +20,7 @@ For a Ubuntu companion, a minimal set might be: sudo apt install gstreamer1.0-plugins-bad gstreamer1.0-libav gstreamer1.0-gl -y ``` -For the full set you can mirror the QGC dependencies installed by [/tools/setup/install-dependencies-debian.sh](https://github.com/mavlink/qgroundcontrol/blob/master/tools/setup/install-dependencies-debian.sh). +For the full set you can mirror the QGC dependencies installed by [/tools/setup/install_dependencies.py](https://github.com/mavlink/qgroundcontrol/blob/master/tools/setup/install_dependencies.py). At time of writing this is: ```sh diff --git a/docs/uk/complete_vehicles_mc/crazyflie2.md b/docs/uk/complete_vehicles_mc/crazyflie2.md index 369edb5a70..920c814ee3 100644 --- a/docs/uk/complete_vehicles_mc/crazyflie2.md +++ b/docs/uk/complete_vehicles_mc/crazyflie2.md @@ -1,319 +1,7 @@ -# Crazyflie 2.0 (Припинено) + - + diff --git a/docs/uk/complete_vehicles_mc/holybro_kopis2.md b/docs/uk/complete_vehicles_mc/holybro_kopis2.md index 477d20ac9d..b70e7a5c8c 100644 --- a/docs/uk/complete_vehicles_mc/holybro_kopis2.md +++ b/docs/uk/complete_vehicles_mc/holybro_kopis2.md @@ -29,7 +29,7 @@ _Kopis 2_ можна придбати від кількох виробників _Kopis 2_ поставляється із заздалегідь встановленим Betaflight. Перед завантаженням прошивки PX4 вам спочатку потрібно встановити завантажувач PX4. -Інструкції по встановленню завантажувача можна знайти в темі [Kakute F7](../flight_controller/kakutef7.md#bootloader) (це плата польотного контролера на _Kopis 2_). +Download the [kakutef7_bl.hex](https://raw.githubusercontent.com/PX4/PX4-Autopilot/release/1.17/docs/assets/flight_controller/kakutef7/kakutef7_bl_0b3fbe2da0.hex?download=true) bootloader binary and read [PX4 Bootloader Flashing onto Betaflight Systems](../advanced_config/bootloader_update_from_betaflight.md) for flashing instructions. :::tip Ви завжди можете [перевстановити Betaflight](../advanced_config/bootloader_update_from_betaflight.md#reinstall-betaflight) пізніше, якщо захочете! diff --git a/docs/uk/complete_vehicles_mc/px4_vision_kit.md b/docs/uk/complete_vehicles_mc/px4_vision_kit.md index 45f56e1c9d..10996e7fbe 100644 --- a/docs/uk/complete_vehicles_mc/px4_vision_kit.md +++ b/docs/uk/complete_vehicles_mc/px4_vision_kit.md @@ -70,7 +70,7 @@ For PX4 Vision v1 with ECN below 010/carrier board below RC04, the _UP Core_ sho ![PV4 Vision v1.5](../../assets/hardware/px4_vision_devkit/px4_vision_v1.5_whats_inside.jpg) -Про те, що знаходиться всередині PX4 Vision V1, можна дізнатися тут [PX4 v1.13 Docs here] (https://docs.px4.io/v1.13/en/complete_vehicles/px4_vision_kit.html#what-is-inside). +What's inside the PX4 Vision V1 can be found here in the [PX4 v1.13 Docs here](https://docs.px4.io/v1.13/en/complete_vehicles/px4_vision_kit#what-is-inside). PX4 Vision DevKit містить наступні компоненти: @@ -403,7 +403,7 @@ You can modify PX4 itself, and [install it as custom firmware](../config/firmwar ## Інші Ресурси Розробника - [_UP Core_ Wiki](https://github.com/up-board/up-community/wiki/Ubuntu) - _Up Core_ супутниковий комп'ютер технічна інформація -- [Occipital Developer Forum](https://structure.io/developers/) - _Structure Core_ camera information +- [Occipital Developer Forum](https://structure.io/structure-sdk/) - _Structure Core_ camera information - [Огляд Pixhawk 4](../flight_controller/pixhawk4.md) - [Огляд Pixhawk 6C](../flight_controller/pixhawk6c.md) diff --git a/docs/uk/complete_vehicles_rover/aion_r1.md b/docs/uk/complete_vehicles_rover/aion_r1.md index 1eac40e8fe..c2bae5e5d3 100644 --- a/docs/uk/complete_vehicles_rover/aion_r1.md +++ b/docs/uk/complete_vehicles_rover/aion_r1.md @@ -33,7 +33,7 @@ The documentation and driver information here should also make it easier to work Якщо використовуєте стандартний Pixhawk, ви можете підключити RoboClaw до автопілота без плати адаптера. ::: -RoboClaw повинен бути підключений до відповідного послідовного (UART) порту на контролері польоту, такого як `GPS2` або `TELEM1`. +The RoboClaw should be connected to a suitable serial (UART) port on the flight controller, such as `GPS2` or `TELEM1`. Інші з'єднання RoboClaw детально описані в розділі [Посібник користувача RoboClaw](https://downloads.basicmicro.com/docs/roboclaw_user_manual.pdf) "Проводка пакетної послідовної передачі даних" та показані нижче (ця настройка була перевірена на сумісність). ![Послідовне підключення енкодерів](../../assets/airframes/rover/aion_r1/wiring_r1.jpg) diff --git a/docs/uk/computer_vision/collision_prevention.md b/docs/uk/computer_vision/collision_prevention.md index 74201e0f07..9edaf818ac 100644 --- a/docs/uk/computer_vision/collision_prevention.md +++ b/docs/uk/computer_vision/collision_prevention.md @@ -143,7 +143,7 @@ If you wish to move freely into directions without sensor coverage, this can be ### Acceleration Constraining -For this we split out the acceleration setpoint into two components, one parallel to the closest distance to the obstacle and one normal to it. Then we scale each of these components according the the figure below. +For this we split out the acceleration setpoint into two components, one parallel to the closest distance to the obstacle and one normal to it. Then we scale each of these components according to the figure below. ![Scalefactor](../../assets/computer_vision/collision_prevention/scalefactor.png) diff --git a/docs/uk/computer_vision/path_planning_interface.md b/docs/uk/computer_vision/path_planning_interface.md index 0c28a5ecd0..c8a4438dd9 100644 --- a/docs/uk/computer_vision/path_planning_interface.md +++ b/docs/uk/computer_vision/path_planning_interface.md @@ -18,4 +18,4 @@ This interface allows PX4 to stream a proposed path to a companion computer, and This enables features such obstacle avoidance in missions and safer landing to be provided by a planner on a companion computer. This actual code is still present in code at time of writing (PX4 v1.15). -Information about the API and associated features can be found in the [PX4 v1.14 docs](https://docs.px4.io/v1.14/en/computer_vision/path_planning_interface.html). +Information about the API and associated features can be found in the [PX4 v1.14 docs](https://docs.px4.io/v1.14/en/computer_vision/path_planning_interface). diff --git a/docs/uk/computer_vision/visual_inertial_odometry.md b/docs/uk/computer_vision/visual_inertial_odometry.md index d2c2dfb0c5..3eefeaaf73 100644 --- a/docs/uk/computer_vision/visual_inertial_odometry.md +++ b/docs/uk/computer_vision/visual_inertial_odometry.md @@ -100,8 +100,8 @@ For more detailed/additional information, see: [Using PX4's Navigation Filter (E ## Check/Verify VIO Estimate {#verify_estimate} -:::info -Параметр [MAV_ODOM_LP](../advanced_config/parameter_reference.md#MAV_ODOM_LP), згаданий нижче, був вилучений у PX4 v1.14. +:::warning +The `MAV_ODOM_LP` parameter mentioned below was removed in PX4 v1.14. Цей розділ потрібно оновити. ::: diff --git a/docs/uk/concept/control_allocation.md b/docs/uk/concept/control_allocation.md index 9bb27c3631..6ecf270d90 100644 --- a/docs/uk/concept/control_allocation.md +++ b/docs/uk/concept/control_allocation.md @@ -2,7 +2,7 @@ :::info Розподіл керування замінює застарілий підхід змішування, який використовувався в PX4 v1.13 або раніше. -Документацію по PX4 v1.13 дивіться в: [Змішування та приводи](https://docs.px4.io/v1.13/en/concept/mixing.html), [Файли геометрії](https://docs.px4.io/v1.13/en/concept/geometry_files.html) та [Додавання налаштувань нового планера](https://docs.px4.io/v1.13/en/dev_airframes/adding_a_new_frame.html). +For PX4 v1.13 documentation see: [Mixing & Actuators](https://docs.px4.io/v1.13/en/concept/mixing), [Geometry Files](https://docs.px4.io/v1.13/en/concept/geometry_files) and [Adding a New Airframe Configuration](https://docs.px4.io/v1.13/en/dev_airframes/adding_a_new_frame). ::: PX4 приймає бажані команди моменту та тяги від основних контролерів і перекладає їх у команди приводів, які керують двигунами чи сервоприводами. @@ -31,7 +31,7 @@ PX4 відокремлює цю логіку перекладу, що назив ![Pipeline Overview](../../assets/concepts/control_allocation_pipeline.png) -Примітки: +Notes: - Регулятор швидкості видає задані значення моменту та тяги - модуль `control_allocator`: diff --git a/docs/uk/concept/events_interface.md b/docs/uk/concept/events_interface.md index f4dbd2871b..d82d95854b 100644 --- a/docs/uk/concept/events_interface.md +++ b/docs/uk/concept/events_interface.md @@ -94,7 +94,7 @@ events::send(events::ID("event_name"), ``` - Above we specify a separate external and internal log level, which are the levels displayed to GCS users and in the log file, respectively: `{events::Log::Error, events::LogInternal::Info}`. - For the majority of cases you can pass a single log level, and this will be used for both exernal and internal cases. + For the majority of cases you can pass a single log level, and this will be used for both external and internal cases. There are cases it makes sense to have two different log levels. For example an RTL failsafe action: the user should see it as Warning/Error, whereas in the log, it is an expected system response, so it can be set to `Info`. diff --git a/docs/uk/concept/flight_tasks.md b/docs/uk/concept/flight_tasks.md index 88586a9388..1a225c4b1b 100644 --- a/docs/uk/concept/flight_tasks.md +++ b/docs/uk/concept/flight_tasks.md @@ -115,7 +115,7 @@ _Польотні завдання_ використовуються у [Реж ::: tip The task added above will be built on all boards, including those with constrained flash such as Pixhawk FMUv2. - If your task is not indended for use on boards with constrained flash it should instead be added to the conditional block shown below (as shown). + If your task is not intended for use on boards with constrained flash it should instead be added to the conditional block shown below (as shown). ```cmake ... diff --git a/docs/uk/concept/system_startup.md b/docs/uk/concept/system_startup.md index f94b70aa7c..a1862716ed 100644 --- a/docs/uk/concept/system_startup.md +++ b/docs/uk/concept/system_startup.md @@ -21,7 +21,7 @@ On POSIX, the system shell is used as script interpreter (e.g. /bin/sh, being sy - Модулі PX4 повинні виглядати для системи як окремі виконувані файли. Це робиться за допомогою символьних посилань. For each module a symbolic link `px4- -> px4` is created in the `bin` directory of the build folder. - При виконанні двійкового файлу перевіряється його шлях (`argv[0]`) і якщо це модуль (починається з `px4-`) він відправляє команду на основний екземпляр px4 (див. нижче). + When executed, the binary path is checked (`argv[0]`), and if it is a module (starts with `px4-`), it sends the command to the main PX4 instance (see below). :::tip The `px4-` prefix is used to avoid conflicts with system commands (e.g. `shutdown`), and it also allows for simple tab completion by typing `px4-`. @@ -32,7 +32,7 @@ On POSIX, the system shell is used as script interpreter (e.g. /bin/sh, being sy For that the `bin` directory with the symbolic links is added to the `PATH` variable right before executing the startup scripts. - Оболонка запускає кожен модуль як новий (клієнтський) процес. - Кожен клієнтський процес повинен спілкуватися з головним екземпляром px4 (сервером), де справжні модулі працюють як потоки. + Each client process needs to communicate with the main instance of PX4 (the server), where the actual modules are running as threads. This is done through a [UNIX socket](https://man7.org/linux/man-pages/man7/unix.7.html). Сервер прослуховує сокет, до якого клієнти можуть під'єднатися та надіслати команду. Сервер відправляє вихідні дані та код повернення назад до клієнта. @@ -40,7 +40,7 @@ On POSIX, the system shell is used as script interpreter (e.g. /bin/sh, being sy - The startup scripts call the module directly, e.g. `commander start`, rather than using the `px4-` prefix. This works via aliases: for each module an alias in the form of `alias =px4-` is created in the file `bin/px4-alias.sh`. -- Скрипт `rcS` виконується з основного екземпляра Px4. +- The `rcS` script is executed from the main PX4 instance. Він не запускає жодних модулів, але спочатку оновлює змінну `PATH`, а потім просто запускає оболонку з файлом `rcS` як аргумент. - Крім того, декілька екземплярів серверу можуть бути запущені для симуляції кількох засобів. diff --git a/docs/uk/config/_autotune.md b/docs/uk/config/_autotune.md index dca0cf93c2..32cb059b99 100644 --- a/docs/uk/config/_autotune.md +++ b/docs/uk/config/_autotune.md @@ -126,7 +126,7 @@ Additional notes:
- The instructions above tune the vehicle in [Altitude mode](../flight_modes_mc/altitude.md). - You can instead takeoff in [Takeoff mode](../flight_modes_mc/takeoff.md) and tune in [Position mode](../flight_modes_mc/position.md) if the vehicle is is _known_ to be stable in these modes. + You can instead takeoff in [Takeoff mode](../flight_modes_mc/takeoff.md) and tune in [Position mode](../flight_modes_mc/position.md) if the vehicle is _known_ to be stable in these modes.
@@ -243,7 +243,7 @@ To map a switch: 2. Set [RC_MAP_AUX1](../advanced_config/parameter_reference.md#RC_MAP_AUX1) to match the RC channel for your switch (you can use any of `RC_MAP_AUX1` to `RC_MAP_AUX6`). 3. Set [FW_AT_MAN_AUX](../advanced_config/parameter_reference.md#FW_AT_MAN_AUX) to the selected channel (i.e. `1: Aux 1` if you mapped `RC_MAP_AUX1`). -The auto tuner will be disabled when the switch is below `0.5` (on the manual control setpoint range of of `[-1, 1]`) and enabled when the switch channel is above `0.5`. +The auto tuner will be disabled when the switch is below `0.5` (on the manual control setpoint range of `[-1, 1]`) and enabled when the switch channel is above `0.5`. If using an RC AUX switch to enable autotuning, make sure to [select the tuning axes](#select-tuning-axis) before flight. diff --git a/docs/uk/config/actuators.md b/docs/uk/config/actuators.md index 14f62d4ae3..4485378f86 100644 --- a/docs/uk/config/actuators.md +++ b/docs/uk/config/actuators.md @@ -176,7 +176,7 @@ Select the **Advanced** checkbox in the top right corner of the view to display #### Конфігурація масштабу закрилка та спойлера -"Керування флапами" та "керування спойлерами" - це аеродинамічні конфігурації, які можуть керуватися вручну пілотом (наприклад, за допомогою RC) або встановлюватися автоматично контролером. +"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. Наприклад, пілот або система посадки можуть ввести "керування спойлерами", щоб зменшити швидкість повітря перед посадкою. 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 @@ The `flap scale` and `spoiler scale` settings in the actuator UI inform the allo Це відхилення елеватора, яке додається для компенсації моментів по тангажу, створених дією поверхні флапів та спойлерів. У цьому випадку елеватор буде відхилений на 0,3 вгору при повному розгортанні флапів для компенсації моменту, спрямованого вниз, який викликано дією флапів. +#### 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](../payloads/generic_actuator_control.md#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 @@ -675,7 +689,6 @@ First set the _frame rate_ for the servos used in each group of outputs. - Якщо використовується кнопка безпеки, її потрібно натиснути перед тим, як буде дозволено проводити випробування приводу. - Вимикач вимкнення все ще може бути використаний для негайного зупинення двигунів. - Сервоприводи фактично не рухаються, поки не буде змінено відповідний слайдер. -- The parameter [COM_MOT_TEST_EN](../advanced_config/parameter_reference.md#COM_MOT_TEST_EN) can be used to completely disable actuator testing. - On the shell, [actuator_test](../modules/modules_command.md#actuator-test) can be used as well for actuator testing. - VTOLs will automatically turn off motors pointing upwards during **fixed-wing flight**: - Стандартний VTOL: Двигуни, визначені як багатокоптерні двигуни, будуть вимкнені diff --git a/docs/uk/config/compass.md b/docs/uk/config/compass.md index f17ff9b258..99045a0146 100644 --- a/docs/uk/config/compass.md +++ b/docs/uk/config/compass.md @@ -86,7 +86,7 @@ Once you've calibrated the vehicle in all the positions _QGroundControl_ will di 2-3 коливань на кут близько 30 градусів у кожному напрямку зазвичай достатньо. 2. Зачекайте, поки оцінка заголовку стабілізується, і перевірте, що компас вказує в правильному напрямку (це може зайняти кілька секунд). -Примітки: +Notes: - Немає можливості початку/зупинки для цього типу калібрування (алгоритм працює безперервно, коли транспортний засіб роззброєний). - Калібрування негайно застосовується до даних (перезавантаження не потрібно), але зберігається в параметрах калібрування лише після відброшення транспортного засобу (калібрування втрачається, якщо між калібруванням і вимкненням не виконана послідовність увімкнення/вимкнення). @@ -109,7 +109,7 @@ This calibration process leverages external knowledge of vehicle's orientation a commander calibrate mag quick ``` -Примітки: +Notes: - This method is specifically designed for vehicles where full rotation is impractical or impossible. If full rotation is possible, use the [complete calibration](#complete-calibration) instead. diff --git a/docs/uk/config/joystick.md b/docs/uk/config/joystick.md index b5fb0a3940..eccd55abb9 100644 --- a/docs/uk/config/joystick.md +++ b/docs/uk/config/joystick.md @@ -23,8 +23,7 @@ Information about how to set up a joystick is covered in: [QGroundControl > Joys Підсумовуючи: - Open _QGroundControl_ -- Set the parameter [COM_RC_IN_MODE=1](../advanced_config/parameter_reference.md#COM_RC_IN_MODE) - `Joystick` - - See [Parameters](https://docs.qgroundcontrol.com/master/en/qgc-user-guide/setup_view/parameters.html) for information about setting parameters - - Setting the parameter to `2` or `3` also enables Joystick under some circumstances. +- [Enable a `COM_RC_IN_MODE` mode that allows Joystick](../config/manual_control.md#px4-configuration). + The default `RC or MAVLink keep first` should work if you plan to only have a Joystick connected. - Підключіть джойстик - Configure the connected joystick in: **Vehicle Setup > Joystick**. diff --git a/docs/uk/config/manual_control.md b/docs/uk/config/manual_control.md new file mode 100644 index 0000000000..fbcca20c50 --- /dev/null +++ b/docs/uk/config/manual_control.md @@ -0,0 +1,58 @@ +# Ручне керування + +Pilots can control a vehicle manually using either a [Radio Control (RC) System](../getting_started/rc_transmitter_receiver.md) or a [Joystick/Gamepad](../config/joystick.md) controller connected via QGroundControl. +PX4 also supports using RC and/or multiple Joysticks, with fallback from one type to the other. + +![Taranis X9D Transmitter](../../assets/hardware/transmitters/frsky_taranis_x9d_transmitter.jpg) Photo of MicroNav, a ground controller with integrated joysticks + +## Загальний огляд + +_Joystick_ setups use QGroundControl to encode the control information from a "standard" computer gaming joystick into [MAVLink messages](https://mavlink.io/en/services/manual_control.html) that are sent to the vehicle over the (shared) telemetry radio channel. +They are often used in integrated GCS/manual control systems because it is cheaper and easier to integrate a joystick than a separate radio system. + +Joysticks are suitable for most applications provided your telemetry channel has a high enough bandwidth/low latency. +They are perfect for flying the PX4 simulator, because you can plug them directly into your ground control computer and start flying. + +_RC systems_ use a dedicated ground-based radio transmitter and vehicle-based receiver for sending control information. +They offer lower latency than Joysticks, and are very highly recommended when first tuning/testing a new frame design, when flying racers/acrobatically, and in other cases where low latency is important. +They can also be useful as a robust backup link for safety. +Note RC systems usually require significantly more configuration and calibration, much of which may be brand or model-specific. + +:::info +PX4 does not _require_ a manual control system for autonomous flight modes. +::: + +## Конфігурація PX4 + +:::tip +This section explains how to configure PX4 to use and prioritise various manual control sources (other configuration is covered in the guides for each type of manual control). +::: + +If you only have one manual control system, either RC or Joystick, then by default no manual control selection is required. +In this case PX4 locks to the first valid manual control source it detects and uses that source until the vehicle is rebooted. + +If you have multiple control sources, such as an RC system and/or one or more Joysticks, then you can use the [COM_RC_IN_MODE](../advanced_config/parameter_reference.md#COM_RC_IN_MODE) parameter to determine which source is active, specifying selection priorities and fallback behavior ([parameters can be set](../advanced_config/parameters.md#finding-a-parameter) using QGC): + +- `0`: RC only. +- `1`: MAVLink only. +- `2`: RC or MAVLink with fallback (switches if current source becomes invalid). +- `3`: RC or MAVLink keep first (locks to the first valid source until reboot). +- `4`: Disable manual control (ignores all sources). +- `5`: RC priority, then MAVLink (lower instance before higher) — `RC > MAVLink 1 > MAVLink 2` +- `6`: MAVLink priority (lower instance before higher), then RC — `MAVLink 1 > MAVLink 2 > RC` +- `7`: RC priority, then MAVLink (higher instance before lower) — `RC > MAVLink 2 > MAVLink 1` +- `8`: MAVLink priority (higher instance before lower), then RC — `MAVLink 2 > MAVLink 1 > RC` + +The [MAVLink instance](../peripherals/mavlink_peripherals.md#mavlink-instances) refers to an instance assigned to a serial port, such as [MAV_0_CONFIG](../advanced_config/parameter_reference.md#MAV_0_CONFIG). + +Notes: + +- RC checks are run for any option that uses RC (so not for `MAVLink only` or `Disable manual control`). +- When using priority sources, sources are evaluated as soon as they become valid and may trigger an immediate switch (if higher priority than the currently active source). +- A [Manual Control Loss Failsafe](../config/safety.md#manual-control-loss-failsafe) is triggered when none of the manual control inputs allowed by the `COM_RC_IN_MODE` mode are available for a time that is greater than the RC Loss Timeout. + As long as there is a fallback input source available, the failsafe is not triggered. + +## Дивіться також + +- [Radio Control (RC)](../getting_started/rc_transmitter_receiver.md) +- [Joysticks](../config/joystick.md) diff --git a/docs/uk/config/radio.md b/docs/uk/config/radio.md index 135877a0b7..26379873d4 100644 --- a/docs/uk/config/radio.md +++ b/docs/uk/config/radio.md @@ -1,10 +1,12 @@ # Налаштування радіомодулів (RC) -The _Radio Setup_ screen is used to configure the mapping of your RC controller's main attitude control sticks (roll, pitch, yaw, throttle) to channels, and to calibrate the minimum, maximum, trim and reverse settings for all other transmitter controls/RC channels. +The _Radio Setup_ screen is used to configure the mapping of your [RC controller's](../getting_started/rc_transmitter_receiver.md) main attitude control sticks (roll, pitch, yaw, throttle) to channels, and to calibrate the minimum, maximum, trim and reverse settings for all other transmitter controls/RC channels. :::info -A [Joystick](../config/joystick.md) can be used instead of RC for manual control. -The [COM_RC_IN_MODE](../advanced_config/parameter_reference.md#COM_RC_IN_MODE) parameter [can be set](../advanced_config/parameters.md) to define what kind of manual controller(s) are enabled. +A [Joystick](../config/joystick.md) can also be used for [Manual Control](../config/manual_control.md). + +By default PX4 will latch the first valid controller it discovers and use it until the vehicle reboots. +If you have multiple controllers and you want to define their priority see [Manual Control > PX4 Configuration](../config/manual_control.md#px4-configuration). ::: ## Прив'язка приймача diff --git a/docs/uk/config/safety.md b/docs/uk/config/safety.md index a3535d8675..ae916a54d6 100644 --- a/docs/uk/config/safety.md +++ b/docs/uk/config/safety.md @@ -109,19 +109,17 @@ There are several other "battery related" failsafe mechanisms that may be config ## Manual Control Loss Failsafe -The manual control loss failsafe may be triggered if the connection to the [RC transmitter](../getting_started/rc_transmitter_receiver.md) or [joystick](../config/joystick.md) is lost, and there is no fallback. -If using an [RC transmitter](../getting_started/rc_transmitter_receiver.md) this is triggered if the RC [transmitter link is lost](../getting_started/rc_transmitter_receiver.md#set-signal-loss-behaviour). -If using [joysticks](../config/joystick.md) connected over a MAVLink data link, this is triggered if the joysticks are disconnected or the data link is lost. - -:::info -PX4 and the receiver may also need to be configured in order to _detect RC loss_: [Radio Setup > RC Loss Detection](../config/radio.md#rc-loss-detection). -::: +A [Manual Control Loss Failsafe](../config/safety.md#manual-control-loss-failsafe) is triggered after a [manual control loss timeout](#COM_RC_LOSS_T) in which none of the configured [Manual Controllers](../config/manual_control.md) are available. ![Safety - RC Loss (QGC)](../../assets/qgc/setup/safety/safety_rc_loss.png) The QGCroundControl Safety UI allows you to set the [failsafe action](#failsafe-actions) and [manual control loss timeout](#COM_RC_LOSS_T). Users that want to disable this failsafe in specific modes can do so using the parameter [COM_RCL_EXCEPT](#COM_RCL_EXCEPT). +:::info +PX4 and the receiver may also need to be configured in order to _detect RC loss_: [Radio Setup > RC Loss Detection](../config/radio.md#rc-loss-detection). +::: + Нижче наведено додаткові (і базові) налаштування параметрів. | Параметр | Налаштування | Опис | @@ -179,17 +177,22 @@ Due to the inherent danger of this, this function is disabled using [CBRK_FLIGHT | Preemptive geofence triggering | [GF_PREDICT](../advanced_config/parameter_reference.md#GF_PREDICT) | (Експериментальний) Спрацьовувати геозону, якщо поточний рух транспортного засобу передбачає спрацьовування порушення (замість пізнього спрацьовування після порушення). | | Circuit breaker for flight termination | [CBRK_FLIGHTTERM](../advanced_config/parameter_reference.md#CBRK_FLIGHTTERM) | Увімкнення/вимкнення дії припинення польоту (за замовчуванням вимкнено). | -## Position (GNSS) Loss Failsafe +## Position Estimation Failsafes + +This section describes failsafes related to the quality of the vehicle's position estimate. + +### Position Loss Failsafe The _Position Loss Failsafe_ is triggered if the quality of the PX4 position estimate falls below acceptable levels (this might be caused by GPS loss) while in a mode that requires an acceptable position estimate. -The sections below cover first the trigger and then the failsafe action taken by the controller. ### Position Loss Failsafe Trigger -There are basically two mechanisms in PX4 to trigger position failsafes: +The position loss failsafe triggers if the position estimate becomes _invalid_. There are two mechanisms in PX4 to invalidate the position estimate: -- A timeout since the last sensor data was fused that provides direct speed or horizontal position measurements. Sensors that fall into that category are: GNSS, optical flow, airspeed, VIO, auxiliary global position. -- The estimated horizontal position accuracy exceeds a certain threshold. This check is only done on hovering systems (rotary wing vehicles or VTOLs in hover phase). +- A timeout since the last sensor data was fused that provides direct speed or horizontal position measurements. + - Sensors that fall into that category are: GNSS, optical flow, airspeed, VIO, auxiliary global position. +- The estimated horizontal position inaccuracy exceeds the threshold [COM_POS_LOW_EPH](../advanced_config/parameter_reference.md#COM_POS_LOW_EPH) + - This check is only done on hovering systems (rotary-wing vehicles or VTOLs in hover phase). For fixed-wing vehicles, refer to the [Position Accuracy Low](#position-accuracy-low-failsafe) section. The relevant parameters shown below. @@ -205,14 +208,24 @@ Multicopters will switch to [Altitude mode](../flight_modes_mc/altitude.md) if a Fixed-wing planes, and VTOLs not configured to land in hover ([NAV_FORCE_VT](../advanced_config/parameter_reference.md#NAV_FORCE_VT)), have a parameter ([FW_GPSF_LT](../advanced_config/parameter_reference.md#FW_GPSF_LT)) that defines how long they will loiter (circle with a constant roll angle ([FW_GPSF_R](../advanced_config/parameter_reference.md#FW_GPSF_R)) at the current altitude) after losing position before attempting to land. If VTOLs have are configured to switch to hover for landing ([NAV_FORCE_VT](../advanced_config/parameter_reference.md#NAV_FORCE_VT)) then they will first transition and then descend. -Відповідні параметри для всіх транспортних засобів наведено нижче. +Відповідними параметрами є: -Параметри, які впливають лише на повітряні судна з фіксованим крилом: +| Параметр | Опис | +| ----------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [FW_GPSF_LT](../advanced_config/parameter_reference.md#FW_GPSF_LT) | Fixed-wing only: Loiter time (waiting at current altitude for position estimation recovery before starting to descend). Установіть значення 0 для відключення. | +| [FW_GPSF_R](../advanced_config/parameter_reference.md#FW_GPSF_R) | Фіксований кут крену/кочення під час кілочення. | +| [NAV_FORCE_VT](../advanced_config/parameter_reference.md#NAV_FORCE_VT) | If true, force VTOL takeoff and landing, even in `Descend` failsafe. | -| Параметр | Опис | -| ----------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [FW_GPSF_LT](../advanced_config/parameter_reference.md#FW_GPSF_LT) | Час простою (очікування відновлення GPS перед посадкою або припиненням польоту). Установіть значення 0 для відключення. | -| [FW_GPSF_R](../advanced_config/parameter_reference.md#FW_GPSF_R) | Фіксований кут крену/кочення під час кілочення. | +### Position Accuracy Low Failsafe + +In Fixed-wing, the position estimate is never strictly invalidated as long as we have a horizontal aiding source, such as an airspeed sensor. In that case, a separate failsafe can be configured that triggers if the position estimate inacuraccy exceeds the threshold [COM_POS_LOW_EPH](../advanced_config/parameter_reference.md#COM_POS_LOW_EPH). The failsafe action is taken if the vehicle is in mission or hold mode, otherwise it is only a warning. Відповідними параметрами є: + +| Параметр | Опис | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | +| [COM_POS_LOW_EPH](../advanced_config/parameter_reference.md#COM_POS_LOW_EPH) | Position inaccuracy threshold above which COM_POS_LOW_ACT is taken. | +| [COM_POS_LOW_ACT](../advanced_config/parameter_reference.md#COM_POS_LOW_ACT) | Failsafe action taken when position inaccuracy is above configured threshold. | + +Note that if there is no horizontal aiding source anymore, the position estimate is invalidated after `EKF2_NOAID_TOUT`, and the standard position loss failsafe applies. ## Аварійний режим втрати управління з пульта @@ -236,6 +249,18 @@ The Traffic Avoidance Failsafe allows PX4 to respond to transponder data (e.g. f | ---------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | | [NAV_TRAFF_AVOID](../advanced_config/parameter_reference.md#NAV_TRAFF_AVOID) | Встановіть дію аварійного режиму: Вимкнено, Попередження, Режим повернення, Режим посадки. | +## Remote ID Failsafe + + + +The Remote ID failsafe is triggered when the [Remote ID (Open Drone ID)](../peripherals/remote_id.md) module is not detected or reports as unhealthy while the vehicle is armed. + +The failsafe action and arming behaviour are both configured by the `COM_ARM_ODID` parameter: + +| Параметр | Опис | +| ----------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [COM_ARM_ODID](../advanced_config/parameter_reference.md#COM_ARM_ODID) | Remote ID arming check and in-flight failsafe. `0`: Disabled (default), `1`: Warning only, `2`: Error only (prevents arming), `3`: Return, `4`: Land, `5`: Terminate.

On failsafe:
- `Error`, `Return`, `Land` and `Terminate` prevent arming.
- `Return`, `Land` and `Terminate` start the associated action/mode when airborne. | + ## Запобіжник Quad-chute Аварійний режим для випадку, коли БЛА типу VTOL більше не може летіти у режимі фіксованого крила, наприклад, через відмову тягового мотора, датчика швидкості повітря або керованої поверхні. @@ -259,7 +284,7 @@ The quad-chute can also be triggered by sending a MAVLINK [MAV_CMD_DO_VTOL_TRANS ## High Wind Failsafe -The high wind failsafe can trigger a warning and/or other mode change when the wind speed exceeds the warning and maximum wind-speed threshhold values. +The high wind failsafe can trigger a warning and/or other mode change when the wind speed exceeds the warning and maximum wind-speed threshold values. The relevant parameters are listed in the table below. | Параметр | Опис | @@ -283,6 +308,19 @@ Note that this check is _always enabled on takeoff_, irrespective of the `CBRK_F The failure detector is active in all vehicle types and modes, except for those where the vehicle is _expected_ to do flips (i.e. [Acro mode (MC)](../flight_modes_mc/acro.md), [Acro mode (FW)](../flight_modes_fw/acro.md), and [Manual (FW)](../flight_modes_fw/manual.md)). +### Altitude Loss Trigger {#altitude-loss-trigger} + + + +The failure detector can be configured to trigger if a rotary-wing vehicle loses too much altitude below its commanded setpoint while in an altitude-controlled flight mode (such as [Position mode](../flight_modes_mc/position.md) or [Altitude mode](../flight_modes_mc/altitude.md)). + +If the vehicle descends more than [FD_ALT_LOSS](#FD_ALT_LOSS) meters below the setpoint, [flight termination](../advanced_config/flight_termination.md) is triggered, which may deploy a [parachute](../peripherals/parachute.md). + +| Параметр | Опис | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [FD_ALT_LOSS](../advanced_config/parameter_reference.md#FD_ALT_LOSS) | Altitude loss threshold (m). Flight termination is triggered when the vehicle drops this far below the setpoint. Установіть значення 0 для відключення. | +| [FD_ALT_LOSS_T](../advanced_config/parameter_reference.md#FD_ALT_LOSS_T) | Time (s) the vehicle must remain below the threshold before flight termination is triggered. | + ### Тригер висоти Детектор відмов може бути налаштований на спрацьовування, якщо стан автомобіля перевищує попередньо визначені значення крена та кочення протягом певного часу. @@ -299,23 +337,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} +``` -| Параметр | Опис | -| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [FD_ACT_EN](../advanced_config/parameter_reference.md#FD_ACT_EN) | Enable/disable the motor failure trigger completely. | -| [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. | -| [FD_ACT_MOT_C2T](../advanced_config/parameter_reference.md#FD_ACT_MOT_C2T) | Scale between normalized [0,1] motor command and expected minimally reported currrent when the rotor is healthy. | -| [FD_ACT_MOT_TOUT](../advanced_config/parameter_reference.md#FD_ACT_MOT_TOUT) | Time in miliseconds for which the under current detection condition needs to stay true. | -| [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. | +| Параметр | Опис | +| ----------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [FD_ACT_EN](../advanced_config/parameter_reference.md#FD_ACT_EN) | Enable/disable the motor failure trigger completely. | +| [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/%). | +| [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. | +| [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. | +| [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. | +| [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) @@ -349,11 +388,7 @@ Remote control switches can be configured (as part of _QGroundControl_ [Flight M A kill switch immediately stops all motor outputs — if flying, the vehicle will start to fall! -[By default](#COM_KILL_DISARM) the motors will restart if the switch is reverted within 5 seconds, after which the vehicle will automatically disarm, and you will need to arm it again in order to start the motors. - -| Параметр | Опис | -| -------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | -| [COM_KILL_DISARM](../advanced_config/parameter_reference.md#COM_KILL_DISARM) | Timeout value for disarming after kill switch is engaged. Default: `5` seconds. | +The motors will restart if the switch is reverted within 5 seconds, after which the vehicle will automatically disarm, and you will need to arm it again in order to start the motors. :::info There is also a [Kill Gesture](#kill-gesture), which cannot be reverted. @@ -395,7 +430,7 @@ A return switch can be used to immediately engage [Return mode](../flight_modes/ A kill gesture immediately stops all motor outputs — if flying, the vehicle will start to fall! -The action cannot be reverted without a reboot (this differs from a [Kill Switch](#kill-switch), where the operation can be reverted within the time period defined by [COM_KILL_DISARM](#COM_KILL_DISARM)). +The action cannot be reverted without a reboot (this differs from a [Kill Switch](#kill-switch), where the operation can be reverted within 5 seconds). | Параметр | Опис | | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -421,15 +456,15 @@ The [relevant parameters](../advanced_config/parameters.md) are shown below: These parameters can be used to set conditions that prevent arming. -| Параметр | Опис | -| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [COM_ARMABLE](../advanced_config/parameter_reference.md#COM_ARMABLE) | Enable arming (at all). `0`: Disabled, `1`: Enabled (default). | -| [COM_ARM_BAT_MIN](../advanced_config/parameter_reference.md#COM_ARM_BAT_MIN) | Minimum battery level for arming. `0`: Disabled (default). Values: `0`-`0.9`, | -| [COM_ARM_WO_GPS](../advanced_config/parameter_reference.md#COM_ARM_WO_GPS) | Enable arming without GPS. `0`: Disabled, `1`: Enabled (default). | -| [COM_ARM_MIS_REQ](../advanced_config/parameter_reference.md#COM_ARM_MIS_REQ) | Require valid mission to arm. `0`: Disabled (default), `1`: Enabled . | -| [COM_ARM_SDCARD](../advanced_config/parameter_reference.md#COM_ARM_SDCARD) | Require SD card to arm. `0`: Disabled (default), `1`: Warning, `2`: Enabled. | -| [COM_ARM_AUTH_REQ](../advanced_config/parameter_reference.md#COM_ARM_AUTH_REQ) | Requires arm authorisation from an external (MAVLink) system. Flag to allow arming (at all). `1`: Enabled, `0`: Disabled (default). Associated configuration parameters are prefixed with `COM_ARM_AUTH_`. | -| [COM_ARM_ODID](../advanced_config/parameter_reference.md#COM_ARM_ODID) | Require healthy Remote ID system to arm. `0`: Disabled (default), `1`: Warning, `2`: Enabled. | +| Параметр | Опис | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [COM_ARMABLE](../advanced_config/parameter_reference.md#COM_ARMABLE) | Enable arming (at all). `0`: Disabled, `1`: Enabled (default). | +| [COM_ARM_BAT_MIN](../advanced_config/parameter_reference.md#COM_ARM_BAT_MIN) | Minimum battery level for arming. `0`: Disabled (default). Values: `0`-`0.9`, | +| [COM_ARM_WO_GPS](../advanced_config/parameter_reference.md#COM_ARM_WO_GPS) | Enable arming without GPS. `0`: Disabled, `1`: Enabled (default). | +| [COM_ARM_MIS_REQ](../advanced_config/parameter_reference.md#COM_ARM_MIS_REQ) | Require valid mission to arm. `0`: Disabled (default), `1`: Enabled . | +| [COM_ARM_SDCARD](../advanced_config/parameter_reference.md#COM_ARM_SDCARD) | Require SD card to arm. `0`: Disabled (default), `1`: Warning, `2`: Enabled. | +| [COM_ARM_AUTH_REQ](../advanced_config/parameter_reference.md#COM_ARM_AUTH_REQ) | Requires arm authorisation from an external (MAVLink) system. Flag to allow arming (at all). `1`: Enabled, `0`: Disabled (default). Associated configuration parameters are prefixed with `COM_ARM_AUTH_`. | +| [COM_ARM_ODID](../advanced_config/parameter_reference.md#COM_ARM_ODID) | Remote ID arming check and in-flight failsafe. `0`: Disabled (default), `1`: Warning only, `2`: Error only, `3`: Return, `4`: Land, `5`: Terminate. See [Remote ID Failsafe](#remote-id-failsafe). | In addition there are a number of parameters that configure system and sensor limits that make prevent arming if exceeded: [COM_CPU_MAX](../advanced_config/parameter_reference.md#COM_CPU_MAX), [COM_ARM_IMU_ACC](../advanced_config/parameter_reference.md#COM_ARM_IMU_ACC), [COM_ARM_IMU_GYR](../advanced_config/parameter_reference.md#COM_ARM_IMU_GYR), [COM_ARM_MAG_ANG](../advanced_config/parameter_reference.md#COM_ARM_MAG_ANG), [COM_ARM_MAG_STR](../advanced_config/parameter_reference.md#COM_ARM_MAG_STR). diff --git a/docs/uk/config_mc/filter_tuning.md b/docs/uk/config_mc/filter_tuning.md index 46d9e8bc99..c1c961cf4e 100644 --- a/docs/uk/config_mc/filter_tuning.md +++ b/docs/uk/config_mc/filter_tuning.md @@ -72,17 +72,17 @@ The ESC RPM feedback is used to track the rotor blade pass frequency and its har ESC RPM feedback requires ESCs capable of providing RPM feedback such as [DShot](../peripherals/dshot.md) with telemetry connected, a bidirectional DShot set up ([work in progress](https://github.com/PX4/PX4-Autopilot/pull/23863)), or [UAVCAN/DroneCAN ESCs](../dronecan/escs.md). Before enabling, make sure that the ESC RPM is correct. -You might have to adjust the [pole count of the motors](../advanced_config/parameter_reference.md#MOT_POLE_COUNT). +You might have to adjust the per-motor pole count (`DSHOT_MOT_POL1`–`DSHOT_MOT_POL12`). The following parameters should be set to enable and configure dynamic notch filters: -| Параметр | Опис | -| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | -| [IMU_GYRO_DNF_EN](../advanced_config/parameter_reference.md#IMU_GYRO_DNF_EN) | Enable IMU gyro dynamic notch filtering. `0`: ESC RPM, `1`: Onboard FFT. | -| [IMU_GYRO_FFT_EN](../advanced_config/parameter_reference.md#IMU_GYRO_FFT_EN) | Enable onboard FFT (required if `IMU_GYRO_DNF_EN` is set to `1`). | -| [IMU_GYRO_DNF_MIN](../advanced_config/parameter_reference.md#IMU_GYRO_DNF_MIN) | Minimum dynamic notch frequency in Hz. | -| [IMU_GYRO_DNF_BW](../advanced_config/parameter_reference.md#IMU_GYRO_DNF_BW) | Bandwidth for each notch filter in Hz. | -| [IMU_GYRO_DNF_HMC](../advanced_config/parameter_reference.md#IMU_GYRO_NF0_BW) | Number of harmonics to filter. | +| Параметр | Опис | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | +| [IMU_GYRO_DNF_EN](../advanced_config/parameter_reference.md#IMU_GYRO_DNF_EN) | Enable IMU gyro dynamic notch filtering. `0`: ESC RPM, `1`: Onboard FFT. | +| [IMU_GYRO_FFT_EN](../advanced_config/parameter_reference.md#IMU_GYRO_FFT_EN) | Enable onboard FFT (required if `IMU_GYRO_DNF_EN` is set to `1`). | +| [IMU_GYRO_DNF_MIN](../advanced_config/parameter_reference.md#IMU_GYRO_DNF_MIN) | Minimum dynamic notch frequency in Hz. | +| [IMU_GYRO_DNF_BW](../advanced_config/parameter_reference.md#IMU_GYRO_DNF_BW) | Bandwidth for each notch filter in Hz. | +| [IMU_GYRO_DNF_HMC](../advanced_config/parameter_reference.md#IMU_GYRO_NF0_BW) | Number of harmonics to filter. | ### Low-pass Filter diff --git a/docs/uk/config_mc/pid_tuning_guide_multicopter_basic.md b/docs/uk/config_mc/pid_tuning_guide_multicopter_basic.md index 7cb155a70a..3ef23172aa 100644 --- a/docs/uk/config_mc/pid_tuning_guide_multicopter_basic.md +++ b/docs/uk/config_mc/pid_tuning_guide_multicopter_basic.md @@ -13,7 +13,7 @@ Tuning is recommended for all new vehicle setups to get the _very best_ performa ## Введення -PX4 uses **P**roportional, **I**ntegral, **D**erivative (PID) controllers (these are the most widespread control technique). +PX4 uses **P**roportional, **I**integral, **D**erivative (PID) controllers (these are the most widespread control technique). The _QGroundControl_ **PID Tuning** setup provides real-time plots of the vehicle setpoint and response curves. The goal of tuning is to set the P/I/D values such that the _Response_ curve matches the _Setpoint_ curve as closely as possible (i.e. a fast response without overshoots). diff --git a/docs/uk/config_rover/attitude_tuning.md b/docs/uk/config_rover/attitude_tuning.md index 66fcae656a..8e3fd36af0 100644 --- a/docs/uk/config_rover/attitude_tuning.md +++ b/docs/uk/config_rover/attitude_tuning.md @@ -16,7 +16,7 @@ Configure the following [parameters](../advanced_config/parameters.md) in QGroun Put the rover into stabilized mode and move the left stick of your controller up to drive forwards. Disarm the rover and from the flight log plot the `measured_yaw` and the `adjusted_yaw_setpoint` from the [RoverAttitudeStatus](../msg_docs/RoverAttitudeStatus.md) message over each other. Increase/Decrease the parameter until you are satisfied with the setpoint tracking. - If you observe a steady state error in the yaw setpoint increase the the integrator of the rate controller: [RO_YAW_RATE_I](../advanced_config/parameter_reference.md#RO_YAW_RATE_I) . + If you observe a steady state error in the yaw setpoint increase the integrator of the rate controller: [RO_YAW_RATE_I](../advanced_config/parameter_reference.md#RO_YAW_RATE_I) . ::: @@ -30,7 +30,7 @@ The attitude controller uses the following structure: ![Rover Attitude Controller](../../assets/config/rover/rover_attitude_controller.png) -The rate and attitude controllers are cascaded, therefor we only require one integrator in the structure to eliminate steady state errors. +The rate and attitude controllers are cascaded, therefore we only require one integrator in the structure to eliminate steady state errors. We placed the integrator in the rate controller since it can run without the attitude controller but not the other way around. ## Огляд параметрів diff --git a/docs/uk/config_rover/basic_setup.md b/docs/uk/config_rover/basic_setup.md index b01b5ebb0f..432e6abdbd 100644 --- a/docs/uk/config_rover/basic_setup.md +++ b/docs/uk/config_rover/basic_setup.md @@ -138,7 +138,7 @@ In [Manual mode](../flight_modes_rover/manual.md#manual-mode) we can additionall - Differential Rover: $r=$ [RD_YAW_STK_GAIN](#RD_YAW_STK_GAIN), which enables adjusting the slope of the input mapping. This leads to a normalized steering input $\hat{\delta} = \delta \cdot r \in$ [-[RD_YAW_STK_GAIN](#RD_YAW_STK_GAIN), [RD_YAW_STK_GAIN](#RD_YAW_STK_GAIN)]. - Mecanum Rover: $r=$ [RM_YAW_STK_GAIN](#RM_YAW_STK_GAIN), which enables adjusting the slope of the input mapping. This leads to a normalized steering input $\hat{\delta} = \delta \cdot r \in$ [-[RM_YAW_STK_GAIN](#RM_YAW_STK_GAIN), [RM_YAW_STK_GAIN](#RM_YAW_STK_GAIN)]. -This scaling is useful to limit the normalized steering setpoint, if it is too aggresive for your rover in manual mode. +This scaling is useful to limit the normalized steering setpoint, if it is too aggressive for your rover in manual mode. You can experiment with the relationships graphically using the [PX4 SuperExpo Rover calculator](https://www.desmos.com/calculator/gwm8lrlanx). diff --git a/docs/uk/config_rover/index.md b/docs/uk/config_rover/index.md index c49dc517e8..ef21a2e3b4 100644 --- a/docs/uk/config_rover/index.md +++ b/docs/uk/config_rover/index.md @@ -39,7 +39,7 @@ make px4_fmu-v6x_rover Note that configuration targets are constructed with the format "VENDOR_MODEL_VARIANT". -The built firmware can be installed as custom firmware, as shown above in in [Flashing the Rover Build](#flashing-the-rover-build). +The built firmware can be installed as custom firmware, as shown above in [Flashing the Rover Build](#flashing-the-rover-build). :::info You can also enable the modules in default builds by adding these lines to your [board configuration](../hardware/porting_guide_config.md) (e.g. for fmu-v6x you might add them to [`main/boards/px4/fmu-v6x/default.px4board`](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/fmu-v6x/default.px4board)): diff --git a/docs/uk/config_rover/rate_tuning.md b/docs/uk/config_rover/rate_tuning.md index 456a48f7dc..191c29cb95 100644 --- a/docs/uk/config_rover/rate_tuning.md +++ b/docs/uk/config_rover/rate_tuning.md @@ -11,7 +11,7 @@ Configure the following [parameters](../advanced_config/parameters.md) in QGroun 1. [RO_YAW_RATE_LIM](#RO_YAW_RATE_LIM): Maximum yaw rate you want to allow for your rover. :::tip - Limiting the yaw rate is necessary if the rover is prone rolling over, loosing traction at high speeds or if passenger comfort is important. + Limiting the yaw rate is necessary if the rover is prone rolling over, losing traction at high speeds or if passenger comfort is important. Small rovers especially can be prone to rolling over when steering aggressively at high speeds. If this is the case: diff --git a/docs/uk/config_rover/velocity_tuning.md b/docs/uk/config_rover/velocity_tuning.md index b7800b1822..96dc3a64b3 100644 --- a/docs/uk/config_rover/velocity_tuning.md +++ b/docs/uk/config_rover/velocity_tuning.md @@ -60,7 +60,7 @@ To tune the velocity controller configure the following [parameters](../advanced ## Manual Position Mode Parameters -These steps are only necessary if you are tuning/want to unlock the manual [Position mode](../flight_modes_rover/manual.md#position-mode). Othwerwise, you can continue with [position tuning](position_tuning.md) where these same parameters will also be configured. +These steps are only necessary if you are tuning/want to unlock the manual [Position mode](../flight_modes_rover/manual.md#position-mode). Otherwise, you can continue with [position tuning](position_tuning.md) where these same parameters will also be configured. 1. [PP_LOOKAHD_GAIN](#PP_LOOKAHD_GAIN): When driving in a straight line (right stick centered) position mode leverages the same path following algorithm used in [auto modes](../flight_modes_rover/auto.md) called [pure pursuit](position_tuning.md#pure-pursuit-guidance-logic-info-only) to achieve the best possible straight line driving behaviour. This parameter determines how aggressive the controller will steer towards the path. @@ -109,7 +109,7 @@ The speed controller uses the following structure: The feed forward mapping is done by interpolating the speed setpoint from [-[RO_MAX_THR_SPEED](../advanced_config/parameter_reference.md#RO_MAX_THR_SPEED), [RO_MAX_THR_SPEED](../advanced_config/parameter_reference.md#RO_MAX_THR_SPEED)] to [-1, 1]. -For ackermann and differential rovers the bearing is aligned with the vehicle yaw. Therefor the bearing is simply sent as a yaw setpoint to the [yaw controller](attitude_tuning.md#attitude-controller-structure-info-only) and the speed setpoint is always defined in body x direction. +For ackermann and differential rovers the bearing is aligned with the vehicle yaw. Therefore the bearing is simply sent as a yaw setpoint to the [yaw controller](attitude_tuning.md#attitude-controller-structure-info-only) and the speed setpoint is always defined in body x direction. For mecanum vehicles, the bearing and yaw are decoupled. The direction is controlled by splitting the velocity vector into one speed component in body x direction and one in body y direction. Both these setpoint are then sent to their own closed loop speed controllers. diff --git a/docs/uk/config_vtol/vtol_ice_shedding.md b/docs/uk/config_vtol/vtol_ice_shedding.md index de94fb7e37..ed3f1d00fa 100644 --- a/docs/uk/config_vtol/vtol_ice_shedding.md +++ b/docs/uk/config_vtol/vtol_ice_shedding.md @@ -6,7 +6,7 @@ Ice shedding is a feature that periodically spins unused motors in fixed-wing flight, to break off any ice that is starting to build up in the motors while it is still feasible to do so. -It is configured by the paramter `CA_ICE_PERIOD`. When it is 0, the feature is +It is configured by the parameter `CA_ICE_PERIOD`. When it is 0, the feature is disabled, when it is above 0, it sets the duration of the ice shedding cycle in seconds. In each cycle, the rotors are spun for two seconds at a motor output of 0.01. diff --git a/docs/uk/config_vtol/vtol_quad_configuration.md b/docs/uk/config_vtol/vtol_quad_configuration.md index 0c8dc8c47a..e247c2f823 100644 --- a/docs/uk/config_vtol/vtol_quad_configuration.md +++ b/docs/uk/config_vtol/vtol_quad_configuration.md @@ -96,7 +96,7 @@ It should be set to a value which ensures that the vehicle reaches a high enough [VT_TRANS_TIMEOUT](../advanced_config/parameter_reference.md#VT_TRANS_TIMEOUT) This specifies the upper limit for the duration of the front transition. If the vehicle has not reached the transition airspeed after this time, then the transition will be aborted and a [Quadchute](../config/safety.md#quad-chute-failsafe) event will be triggered. -:::note +::: info Additionally, if an airspeed sensor is present, the transition will also be aborted if the airspeed has not reached [VT_ARSP_BLEND](../advanced_config/parameter_reference.md#VT_ARSP_BLEND) after the openloop transition time [VT_F_TR_OL_TM](../advanced_config/parameter_reference.md#VT_F_TR_OL_TM) has elapsed. This checks is used to avoid a scenario where the vehicle gains excessive speed when the airspeed sensor is faulty. ::: diff --git a/docs/uk/contribute/code.md b/docs/uk/contribute/code.md index 36fa4646e4..4082a9d938 100644 --- a/docs/uk/contribute/code.md +++ b/docs/uk/contribute/code.md @@ -151,36 +151,35 @@ else { ## Коміти та повідомлення комітів -Використовуйте описові повідомлення з кількома абзацами для всіх нетривіальних змін. -Добре структуруйте їх, щоб вони мали сенс у підсумку в один рядок, але також надавали повну деталізацію. +PX4 uses [conventional commits](https://www.conventionalcommits.org/) for all commit messages and PR titles. -```plain -Component: Explain the change in one sentence. Fixes #1234 +### Format -Prepend the software component to the start of the summary -line, either by the module name or a description of it. -(e.g. "mc_att_ctrl" or "multicopter attitude controller"). - -If the issue number is appended as , Github -will automatically close the issue when the commit is -merged to the master branch. - -The body of the message can contain several paragraphs. -Describe in detail what you changed. Link issues and flight -logs either related to this fix or to the testing results -of this commit. - -Describe the change and why you changed it, avoid to -paraphrase the code change (Good: "Adds an additional -safety check for vehicles with low quality GPS reception". -Bad: "Add gps_reception_check() function"). - -Reported-by: Name +``` +type(scope): short description of the change ``` -**Use **`git commit -s`** to sign off on all of your commits.** This will add `signed-off-by:` with your name and email as the last line. +Where **type** is the category of change (`feat`, `fix`, `docs`, `refactor`, `perf`, `test`, `build`, `ci`, `style`, `chore`, `revert`) and **scope** is the module or area affected (e.g. `ekf2`, `mavlink`, `navigator`). See the full [types and scopes tables](https://github.com/PX4/PX4-Autopilot/blob/main/CONTRIBUTING.md#commit-message-convention) in CONTRIBUTING.md. -This commit guide is based on best practices for the Linux Kernel and other [projects maintained](https://github.com/torvalds/subsurface-for-dirk/blob/a48494d2fbed58c751e9b7e8fbff88582f9b2d02/README#L88-L115) by Linus Torvalds. +Append `!` before the colon to mark a breaking change: `feat(ekf2)!: remove deprecated API`. + +### Приклади + +``` +feat(ekf2): add height fusion timeout. Fixes #1234 + +The previous implementation did not handle the case where +height fusion data stops arriving mid-flight. This adds a +configurable timeout that falls back to barometric height. + +Tested in SITL with simulated sensor dropout. + +Signed-off-by: Your Name +``` + +The body of the message can contain several paragraphs. Describe in detail what you changed and why. Link related issues and flight logs. Describe the change and why you made it, rather than paraphrasing the code change. + +**Use `git commit -s` to sign off on all of your commits.** This adds `Signed-off-by:` with your name and email as the last line. ## Запити на злиття diff --git a/docs/uk/contribute/dev_call.md b/docs/uk/contribute/dev_call.md index 4f1172adab..962e993f3a 100644 --- a/docs/uk/contribute/dev_call.md +++ b/docs/uk/contribute/dev_call.md @@ -7,7 +7,7 @@ const { site } = useData();
-

Ця сторінка може бути застарілою. Подивіться останню версію.

+

This page may be out of date. See the latest version.

@@ -15,8 +15,8 @@ const { site } = useData(); ## Хто повинен відвідувати ці дзвінки? -- Основні розробники проєкту PX4 -- Розробники компонентів +- Code Owners +- Reviewers - Test team lead - Учасники Dronecode - Члени спільноти (ви!) @@ -36,4 +36,4 @@ We publish a forum post per meeting a week before the call on [PX4 Discuss - wee ## Розклад - TIME: Wednesday 17h00 CET ([subscribe to calendar](https://dronecode.org/calendar/)) -- **Join the call**: [https://discord.gg/BDYmr6FA6Q](https://discord.gg/BDYmr6FA6Q) +- **Join the call**: [https://discord.com/invite/BDYmr6FA6Q](https://discord.com/invite/BDYmr6FA6Q) diff --git a/docs/uk/contribute/docs.md b/docs/uk/contribute/docs.md index e4bd6005ec..00579b84d8 100644 --- a/docs/uk/contribute/docs.md +++ b/docs/uk/contribute/docs.md @@ -55,7 +55,7 @@ If you already have a clone of the [PX4-Autopilot](https://github.com/PX4/PX4-Au Щоб отримати джерела бібліотеки(ів) на свій локальний комп'ютер, вам потрібно використовувати інструментарій git. Нижче наведено інструкції, як отримати git і використовувати його на своєму локальному комп'ютері. -1. Download git for your computer from [https://git-scm.com/downloads](https://git-scm.com/downloads) +1. Download git for your computer from [https://git-scm.com/downloads/](https://git-scm.com/downloads/) 2. [Sign up](https://github.com/signup) for Github if you haven't already @@ -83,10 +83,10 @@ If you already have a clone of the [PX4-Autopilot](https://github.com/PX4/PX4-Au 6. Add a _remote_ called "upstream" to point to the "official" PX4 version of the library: ```sh - git remote add upstream https://github.com/PX4/PX4-Autopilot.git + git remote add upstream https://github.com/PX4/PX4-Autopilot ``` - :::tip + ::: tip A "remote" is a handle to a particular repository. The remote named _origin_ is created by default when you clone the repository, and points to _your fork_ of the guide. Above you create a new remote _upstream_ that points to the PX4 project version of the documents. @@ -166,7 +166,9 @@ Within the repository you created above: yarn install ``` -4. Попередній перегляд і обслуговування бібліотеки: +4. (Optional) [Build the docs for PX4 metadata](#building-px4-docs-metadata) if your source contains changes to parameter or module docs that you want to check. + +5. Попередній перегляд і обслуговування бібліотеки: ```sh yarn docs:dev @@ -176,7 +178,7 @@ Within the repository you created above: This will be something like: `http://localhost:5173/px4_user_guide/`. - Stop serving using **CTRL+C** in the terminal prompt. -5. Open previewed pages in your local editor: +6. Open previewed pages in your local editor: First specify a local text editor file using the `EDITOR` environment variable, before calling `yarn start` to preview the library. For example, you can enable VSCode as your default editor by entering: @@ -195,7 +197,7 @@ Within the repository you created above: The **Open in your editor** link at the bottom of each page will then open the current page in the editor (this replaces the _Open in GitHub_ link). -6. Побудуйте бібліотеку за допомогою: +7. Побудуйте бібліотеку за допомогою: ```sh # Ubuntu @@ -210,6 +212,32 @@ Use `yarn start` to preview changes _as you make them_ (documents are updated an Before submitting a PR you should also build it using `yarn docs:build`, as this can highlight issues that are not visible when using `yarn start`. ::: +#### Building PX4 docs metadata + +PX4 Metadata is not automatically updated in the local docs tree when you make changes to source. +This can result in broken links showing up during testing if you link to new parameters, modules, airframes, or other content that is generated from source. + +You can generate the metadata and copy it into the tree on _Ubuntu_ (only) using the convenient yarn command: + +```sh +# Ubuntu +yarn build_docs_metadata_ubuntu +``` + +:::info +The generated metadata docs should not be included in PRs as they will complicate reveiwing (metadata is automatically generated when a PR merges in main). +It is not a problem if you do add such metadata, as it will be swamped on merge. +::: + +#### Check for broken links + +You can use the following command to check for broken links in the whole document: + +```sh +# Ubuntu +yarn linkcheck +``` + ### Структура Вихідного Коду The guide uses the [Vitepress](https://vitepress.dev/) toolchain. @@ -241,7 +269,7 @@ The guide uses the [Vitepress](https://vitepress.dev/) toolchain. - Images must be stored in a sub folder of `/assets`. Це на два рівні нижче від папок з вмістом, тому якщо ви додаєте зображення, ви посилаєтеся на нього так: - ```plain + ```txt ![Image Description](../../assets/path_to_file/filename.jpg) ``` diff --git a/docs/uk/contribute/git_examples.md b/docs/uk/contribute/git_examples.md index 37d211b180..b93cb60034 100644 --- a/docs/uk/contribute/git_examples.md +++ b/docs/uk/contribute/git_examples.md @@ -22,7 +22,7 @@ ```sh cd PX4-Autopilot git submodule update --init --recursive - git remote add upstream https://github.com/PX4/PX4-Autopilot.git + git remote add upstream https://github.com/PX4/PX4-Autopilot ``` - You should have now two remote repositories: One repository is called `upstream` that points to PX4/PX4-Autopilot, and one repository `origin` that points to your forked copy of the PX4 repository. @@ -54,12 +54,12 @@ - ```sh - git commit -m "" + git commit -s -m "feat(ekf2): add height fusion timeout" ``` - For a good commit message, please refer to the [Source Code Management](../contribute/code.md#commits-and-commit-messages) section. + Use [conventional commits](https://www.conventionalcommits.org/) format: `type(scope): description`. For details on types and scopes, see the [Source Code Management](../contribute/code.md#commits-and-commit-messages) section. -- Some time might have passed and the [upstream main](https://github.com/PX4/PX4-Autopilot.git) has changed. +- Some time might have passed and the [upstream main](https://github.com/PX4/PX4-Autopilot) has changed. PX4 prefers a linear commit history and uses [git rebase](https://git-scm.com/book/en/v2/Git-Branching-Rebasing). Щоб включити найновіші зміни з початкової версії до локальної гілки, перейдіть до головної гілки @@ -139,7 +139,7 @@ To get the source code for a _specific older release_ (tag): 1. Clone the PX4-Autopilot repo and navigate into _PX4-Autopilot_ directory: ```sh - git clone https://github.com/PX4/PX4-Autopilot.git + git clone https://github.com/PX4/PX4-Autopilot cd PX4-Autopilot ``` @@ -179,7 +179,7 @@ The are [listed here](https://github.com/PX4/PX4-Autopilot/branches/all?query=re - Clone the PX4-Autopilot repo and navigate into _PX4-Autopilot_ directory: ```sh - git clone https://github.com/PX4/PX4-Autopilot.git + git clone https://github.com/PX4/PX4-Autopilot cd PX4-Autopilot ``` diff --git a/docs/uk/contribute/index.md b/docs/uk/contribute/index.md index 7bb9c46ec8..cd8aeb6cbe 100644 --- a/docs/uk/contribute/index.md +++ b/docs/uk/contribute/index.md @@ -7,7 +7,7 @@ const { site } = useData();
-

Ця сторінка може бути застарілою. Переглянути останню версію.

+

This page may be out of date. Переглянути останню версію.

@@ -20,7 +20,7 @@ We pledge to adhere to the [PX4 code of conduct](https://github.com/PX4/PX4-Auto Цей розділ містить інформацію про те, як ви можете зустрітися зі спільнотою та зробити внесок до PX4: - [Dev Call](../contribute/dev_call.md) - Discuss architecture, pull requests, impacting issues with the dev team -- [Maintainers](./maintainers.md) - Maintainers of PX4 Subsystems and Ecosystem +- [Maintainers](./maintainers.md) - Maintainer roles, types, and how to become one - [Support](../contribute/support.md) - Get help and raise issues - [Source Code Management](../contribute/code.md) - Work with PX4 code - [Documentation](../contribute/docs.md) - Improve the docs diff --git a/docs/uk/contribute/maintainers.md b/docs/uk/contribute/maintainers.md index 08bec90c7e..e1244c3b31 100644 --- a/docs/uk/contribute/maintainers.md +++ b/docs/uk/contribute/maintainers.md @@ -1,57 +1,86 @@ # Maintainer Role -Dronecode maintainers have technical leadership and responsibility for specific areas of PX4, and for other ecosystem components such as MAVLink, MAVSDK, QGroundControl, and others. +Dronecode maintainers provide technical leadership for PX4 and for other ecosystem components such as MAVLink, MAVSDK, QGroundControl, and others. Some maintainers take responsibility for specific areas of the project, while others help across the project more broadly. The maintainer role is defined by the community with help and supervision from the [Dronecode Foundation](https://dronecode.org/). -To find the most up-to-date maintainers list, visit [PX4-Autopilot README](https://github.com/PX4/PX4-Autopilot#maintenance-team). +To find the most up-to-date maintainers list, see [`MAINTAINERS.md`](https://github.com/PX4/PX4-Autopilot/blob/main/MAINTAINERS.md) in the PX4-Autopilot repository. + +## Maintainer Types + +PX4 recognizes two types of maintainers. Both are full members of the maintainer team, have write access via the [`Dev Team`](https://github.com/orgs/PX4/teams/dev-team) GitHub team, and participate in maintainer decisions. + +- **Code Owners** are responsible for a specific category of the project (for example, State Estimation, Multirotor, or CI). They have final say on changes to their area, are the primary reviewers for that code, and help shape its roadmap. This is the role described in detail below. +- **Reviewers** help maintain PX4 across the project without ownership of a specific category. They review, triage, and contribute wherever their interests and time allow. Reviewers have the same access and voting rights as Code Owners, but no on-call responsibility for any specific area of the codebase. + +The Reviewer role is a good fit for contributors who want to help steward the project without committing to a specific component up front. A Reviewer may later become a Code Owner for a category by mutual agreement with the existing Code Owners of that category and sign-off from the maintainer team. ## Recruitment Process If you would like to join the PX4 maintainers team or if you want to nominate someone else follow the steps below: 1. Read the [role description](#dronecode-maintainer-role-description), and make sure you understand the responsibilities of the role. -2. To nominate yourself, reach out to one of the maintainers (see the complete list in the [PX4-Autopilot README](https://github.com/PX4/PX4-Autopilot#maintenance-team)), and seek their sponsorship. -3. Express your interest in becoming a maintainer, and specify which area you would like to maintain. +2. To nominate yourself, reach out to one of the maintainers (see the complete list in [`MAINTAINERS.md`](https://github.com/PX4/PX4-Autopilot/blob/main/MAINTAINERS.md)), and seek their sponsorship. +3. Express your interest in becoming a maintainer, and specify whether you are applying as a **Code Owner** (for a specific category) or as a **Reviewer** (helping across the project without a fixed category). 4. The sponsoring maintainer needs to bring this up for discussion in one of the [weekly developer calls](dev_call.md). The maintainer team will vote on the call to determine whether to accept you as a maintainer. +A Reviewer may later transition to a Code Owner role for a specific category. This requires agreement from the existing Code Owners of that category and sign-off from the maintainer team, following the same discussion and vote on the weekly developer call. + +### Adding a new maintainer + +Once the maintainer team has agreed to add a new maintainer, the change is landed via a pull request to [`MAINTAINERS.md`](https://github.com/PX4/PX4-Autopilot/blob/main/MAINTAINERS.md). The process is intentionally simple: + +1. A current maintainer opens a PR adding the new maintainer to the appropriate table (**Code Owners** with a category, or **Reviewers**). +2. The PR must be approved by at least one other current maintainer. +3. If the new maintainer is being added as a Code Owner or sub-owner of a specific component, the existing Code Owner of that component must be among the approvers. + +Once the PR is merged, the new maintainer proceeds through the [Onboarding Process](#onboarding-process) below. + ## Onboarding Process Once accepted every maintainers will go through the following process: 1. **Discord** server admin will grant you the `dev team` role, which gives you: 1. Basic admin privileges on discord. - 2. Access to the `#maintainers` channel. + 2. Access to the private `#maintainers` channel for internal maintainer discussion. 2. You will be given access to the GitHub team: "[`Dev Team`](https://github.com/orgs/PX4/teams/dev-team)" which grants you: 1. Permission to merge the PR of any of PX4 workspace repositories after it's approved 2. Permission to trigger GitHub actions when a new contributor opens a PR. 3. Permission to edit Issue/PR contents. 3. **Add your info to official PX4 channels**: - 1. Include your information on the PX4 [README](https://github.com/PX4/PX4-Autopilot/blob/main/README.md) next to the rest of the team - 2. Listed on the [Maintainers section](https://px4.io/community/maintainers/) of the PX4 website. - 3. Add your information to the internal Dronecode database of maintainers to keep you in sync. - 4. Community introduction to the new maintainer in the form of a forum post, which is promoted through ever growing official channels + 1. Add your information to the internal Dronecode database of maintainers to keep you in sync. + 2. Community introduction to the new maintainer in the form of a forum post, which is promoted through ever growing official channels ## Dronecode Maintainer Role Description +The responsibilities and qualifications below describe the **Code Owner** role in detail. **Reviewers** share the same spirit of technical stewardship, community guidance, and participation in maintainer meetings, without being tied to a specific category. Reviewers are expected to review and triage across the project where their expertise and interest apply. + ### Опис Maintainers lead/manage the development of a **specific category (referred to as category below)** of any Open Source Projects hosted within the Dronecode Foundation, such as the PX4 Autopilot. -### Responsibilities +### Responsibilities (Code Owner) 1. Take charge of overseeing the development in their category. 2. Provide guidance/advice on community members in their category. 3. Review relevant pull requests and issues from the community on GitHub. 4. Coordinate with the maintainer group. -5. Keep regular attendance on [weekly meetings ](dev_call.md). +5. Keep regular attendance on [weekly meetings](dev_call.md). 6. Help create and maintain a roadmap for the project your represent. 7. Uphold the [Code of Conduct](https://github.com/Dronecode/foundation/blob/main/CODE-OF-CONDUCT.md) of our community. +### Responsibilities (Reviewer) + +1. Review relevant pull requests and issues across the project where your expertise applies. +2. Help triage issues and guide community contributors. +3. Coordinate with the maintainer group. +4. Keep regular attendance on [weekly meetings](dev_call.md). +5. Uphold the [Code of Conduct](https://github.com/Dronecode/foundation/blob/main/CODE-OF-CONDUCT.md) of our community. + ### Qualifications 1. Proven track record of valuable contributions. -2. Domain expertise in the category field. +2. Domain expertise in the category field (for Code Owners) or broad working knowledge of the project (for Reviewers). 3. Good overview of the project you are applying to. 4. You need to manage approval from your employer when relevant. diff --git a/docs/uk/contribute/sbom.md b/docs/uk/contribute/sbom.md new file mode 100644 index 0000000000..4c1887d9c0 --- /dev/null +++ b/docs/uk/contribute/sbom.md @@ -0,0 +1,226 @@ +# Software Bill of Materials (SBOM) + +PX4 generates a [Software Bill of Materials](https://ntia.gov/SBOM) for every firmware build in [SPDX 2.3](https://spdx.github.io/spdx-spec/v2.3/) JSON format. + +## Why SBOM? + +- **Regulatory compliance**: The EU Cyber Resilience Act (CRA) requires SBOMs for products with digital elements (reporting obligations begin in September 2026). +- **Supply chain transparency**: SBOMs enumerate every component compiled into firmware, enabling users and integrators to audit dependencies. +- **NTIA minimum elements**: Each SBOM satisfies all seven [NTIA required fields](https://www.ntia.gov/report/2021/minimum-elements-software-bill-materials-sbom): supplier, component name, version, unique identifier, dependency relationship, author, and timestamp. + +## Format + +PX4 uses SPDX 2.3 JSON. +SPDX is the Linux Foundation's own standard (ISO/IEC 5962), aligning with PX4's position as a Dronecode/LF project. +Zephyr RTOS also uses SPDX. + +Each SBOM contains: + +- **Primary package**: The PX4 firmware for a specific board target, marked with `primaryPackagePurpose: FIRMWARE`. +- **Git submodules**: All third-party libraries included via git submodules (~33 packages), with SPDX license identifiers and commit hashes. +- **Python build dependencies**: Packages from `Tools/setup/requirements.txt` marked as `BUILD_DEPENDENCY_OF` the firmware. +- **Board-specific modules**: Internal PX4 modules compiled for the target board. +- **Compiler**: The C compiler used for the build. + +Typical SBOM size: 70-100 packages, ~500 lines, ~20 KB JSON. + +## Generation + +SBOMs are generated automatically as part of every CMake build. +The output file is: + +```txt +build//.sbom.spdx.json +``` + +Наприклад: + +```txt +build/px4_fmu-v6x_default/px4_fmu-v6x_default.sbom.spdx.json +``` + +The generator script is `Tools/ci/generate_sbom.py`. +It requires PyYAML (`pyyaml`) for loading license overrides. + +### CMake Integration + +The `sbom` CMake target is included in the default `ALL` target. +The relevant CMake module is `cmake/sbom.cmake`. + +### Disabling SBOM Generation + +Set the environment variable before building. +This is checked at CMake configure time, so a clean build or reconfigure is required: + +```sh +PX4_SBOM_DISABLE=1 make px4_fmu-v6x_default +``` + +If the build directory already exists, force a reconfigure: + +```sh +PX4_SBOM_DISABLE=1 cmake -B build/px4_fmu-v6x_default . +``` + +### Manual Generation + +You can also run the generator directly: + +```sh +python3 Tools/ci/generate_sbom.py \ + --source-dir . \ + --board px4_fmu-v6x_default \ + --modules-file build/px4_fmu-v6x_default/config_module_list.txt \ + --compiler arm-none-eabi-gcc \ + --output build/px4_fmu-v6x_default/px4_fmu-v6x_default.sbom.spdx.json +``` + +## Artifacts + +SBOMs are available in: + +| Location | Path | +| --------------- | ---------------------------------------- | +| Build directory | `build//.sbom.spdx.json` | +| GitHub Releases | Alongside `.px4` firmware files | +| S3 | Same directory as firmware artifacts | + +## Validation + +Validate an SBOM against the SPDX JSON schema: + +```sh +python3 -c " +import json +doc = json.load(open('build/px4_sitl_default/px4_sitl_default.sbom.spdx.json')) +assert doc['spdxVersion'] == 'SPDX-2.3' +assert doc['dataLicense'] == 'CC0-1.0' +assert len(doc['packages']) > 0 +print(f'Valid: {len(doc[\"packages\"])} packages') +" +``` + +For full schema validation, use the [SPDX online validator](https://tools.spdx.org/app/validate/) or the `spdx-tools` CLI. + +## License Detection + +Submodule licenses are identified through a combination of auto-detection and manual overrides. + +### Auto-Detection + +The generator reads the first 100 lines of each submodule's LICENSE or COPYING file +and matches keywords against known patterns. +Copyleft licenses (GPL, LGPL, AGPL) are checked before permissive ones +to prevent false positives. + +Supported patterns include: + +| SPDX Identifier | Matched Keywords | +| ----------------------------- | ------------------------------------------------------------------ | +| GPL-3.0-only | "GNU GENERAL PUBLIC LICENSE", "Version 3" | +| GPL-2.0-only | "GNU GENERAL PUBLIC LICENSE", "Version 2" | +| LGPL-3.0-only | "GNU LESSER GENERAL PUBLIC LICENSE", "Version 3" | +| LGPL-2.1-only | "GNU Lesser General Public License", "Version 2.1" | +| AGPL-3.0-only | "GNU AFFERO GENERAL PUBLIC LICENSE", "Version 3" | +| Apache-2.0 | "Apache License", "Version 2.0" | +| MIT | "Permission is hereby granted" | +| BSD-3-Clause | "Redistribution and use", "Neither the name" | +| BSD-2-Clause | "Redistribution and use", "THIS SOFTWARE IS PROVIDED" | +| ISC | "Permission to use, copy, modify, and/or distribute" | +| EPL-2.0 | "Eclipse Public License", "2.0" | +| Unlicense | "The Unlicense", "unlicense.org" | + +If no pattern matches, the license is set to `NOASSERTION`. + +### Override File + +When auto-detection fails or returns the wrong result, +add an entry to `Tools/ci/license-overrides.yaml`: + +```yaml +overrides: + src/lib/crypto/libtomcrypt: + license: "Unlicense" + comment: "Public domain dedication. Functionally equivalent to Unlicense." +``` + +Each entry maps a submodule path to its correct SPDX license identifier. +The optional `comment` field is emitted as `licenseComments` in the SBOM, +providing context for auditors reviewing complex licensing situations +(dual licenses, composite LICENSE files, public domain dedications). + +### Copyleft Guardrail + +The `--verify-licenses` command flags submodules with copyleft licenses +(GPL, LGPL, AGPL) in a dedicated warning section. +This is informational only and does not cause a failure. +It helps maintainers track copyleft obligations when adding new submodules. + +### Platform Filtering + +Submodules under `platforms/nuttx/` are excluded from POSIX and QURT SBOMs. +The `--platform` argument (set automatically by CMake via `${PX4_PLATFORM}`) +controls which platform-specific submodules are included. +This ensures SITL builds do not list NuttX RTOS packages. + +### Перевірка + +Run the verify command to check detection for all submodules: + +```sh +python3 Tools/ci/generate_sbom.py --verify-licenses --source-dir . +``` + +This prints each submodule with its detected license, any override, and the final value. +It exits non-zero if any checked-out submodule resolves to `NOASSERTION` without an override. +Copyleft warnings are printed after the main table. + +### Adding a New Submodule + +1. Add the submodule normally. +2. Run `--verify-licenses` to confirm the license is detected. +3. If detection fails, add an override to `Tools/ci/license-overrides.yaml`. +4. If the license is not in the SPDX list, use `LicenseRef-`. + +### EU CRA Compliance + +The EU Cyber Resilience Act requires SBOMs for products with digital elements. +The goal is zero `NOASSERTION` licenses in shipped firmware SBOMs. +Every submodule should have either a detected or overridden license. +The `--verify-licenses` check enforces this in CI. + +## What's in an SBOM + +This section is for integrators, compliance teams, and anyone reviewing SBOM artifacts. + +### Where to Find SBOMs + +| Location | Path | +| --------------- | ---------------------------------------- | +| Build directory | `build//.sbom.spdx.json` | +| GitHub Releases | Alongside `.px4` firmware files | +| S3 | Same directory as firmware artifacts | + +### Reading the JSON + +Each SBOM is a single JSON document following SPDX 2.3. +Key fields: + +- **`packages`**: Array of all components. Each has `name`, `versionInfo`, `licenseConcluded`, and `SPDXID`. +- **`relationships`**: How packages relate. `CONTAINS` means a submodule is compiled into firmware. `BUILD_DEPENDENCY_OF` means a tool used only during build. +- **`licenseConcluded`**: The SPDX license identifier determined for that package. +- **`licenseComments`**: Free-text explanation for complex cases (dual licenses, composite files, public domain). +- **`externalRefs`**: Package URLs (purls) linking to GitHub repos or PyPI. + +### Understanding NOASSERTION + +`NOASSERTION` means no license could be determined. +For submodules, this happens when: + +- The submodule is not checked out (common in CI shallow clones). +- No LICENSE/COPYING file exists. +- The LICENSE file does not match any known pattern and no override is configured. + +For shipped firmware, `NOASSERTION` should be resolved by adding an override. +For build-only dependencies (Python packages), `NOASSERTION` is acceptable +since these are not compiled into the firmware binary. diff --git a/docs/uk/contribute/support.md b/docs/uk/contribute/support.md index d8a626542b..b03a2fbbda 100644 --- a/docs/uk/contribute/support.md +++ b/docs/uk/contribute/support.md @@ -7,7 +7,7 @@ const { site } = useData();
-

Ця сторінка може бути застарілою. Переглянути останню версію.

+

This page may be out of date. See the latest version.

@@ -18,7 +18,7 @@ const { site } = useData(); Основна команда розробників і спільнота активні на наступних каналах: - [PX4 Discuss Forum](https://discuss.px4.io/) - Post here first! -- [PX4 Discord](https://discord.gg/dronecode) - Post here if you don't get a response in discuss within a few days (include a link to your forum topic). +- [PX4 Discord](https://discord.com/invite/dronecode) - Post here if you don't get a response in discuss within a few days (include a link to your forum topic). :::tip The Discuss Forum is much preferred because it is indexed by search engines and serves as a common knowledge base. diff --git a/docs/uk/debug/asset_tracking.md b/docs/uk/debug/asset_tracking.md index 6ed230b97c..c7f30c1c52 100644 --- a/docs/uk/debug/asset_tracking.md +++ b/docs/uk/debug/asset_tracking.md @@ -1,6 +1,6 @@ # Asset Tracking - + PX4 can track and log detailed information about external hardware devices connected to the flight controller. This enables unique identification of vehicle parts throughout their operational lifetime using device IDs, serial numbers, and version information. diff --git a/docs/uk/debug/debug_values.md b/docs/uk/debug/debug_values.md index 1c7ce22691..6a5b9c66ac 100644 --- a/docs/uk/debug/debug_values.md +++ b/docs/uk/debug/debug_values.md @@ -22,7 +22,7 @@ This tutorial shows how to send the MAVLink message `NAMED_VALUE_FLOAT` using th Код для цього посібника доступний тут: - [Debug Tutorial Code](https://github.com/PX4/PX4-Autopilot/blob/main/src/examples/px4_mavlink_debug/px4_mavlink_debug.cpp) -- [Enable the tutorial app](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/fmu-v5/default.px4board) by ensuring the MAVLink debug app (**CONFIG_EXAMPLES_PX4_MAVLINK_DEBUG**) is in the config of your board and set set to 'y'. +- [Enable the tutorial app](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/fmu-v5/default.px4board) by ensuring the MAVLink debug app (**CONFIG_EXAMPLES_PX4_MAVLINK_DEBUG**) is in the config of your board and set to 'y'. Все необхідне для налаштування відлагодження публікації - це цей фрагмент коду. Спочатку додайте файл заголовка: diff --git a/docs/uk/debug/eclipse_jlink.md b/docs/uk/debug/eclipse_jlink.md index 060d2732a3..473f3808a9 100644 --- a/docs/uk/debug/eclipse_jlink.md +++ b/docs/uk/debug/eclipse_jlink.md @@ -122,7 +122,7 @@ Task-aware debugging (also known as [thread-aware debugging](https://www.segger. 2. Compile the **jlink-nuttx.so** library in the terminal by running the following command in the terminal: `make jlink-nuttx` -3. Змініть Eclipse, щоб використовувати цю бібліотеку. +3. Modify Eclipse to use this library. In the _J-Link GDB Server Setup_ configuration, update **Other options** to include `-rtos /home//Tools/jlink-nuttx.so`, as shown in the image below. ![Eclipse: GDB Segger Debug config RTOS aware: debugger tab](../../assets/debug/eclipse_settings_debug_config_gdb_segger_task_aware.png) diff --git a/docs/uk/debug/gdb_debugging.md b/docs/uk/debug/gdb_debugging.md index cf234ec69f..277f7e1f8e 100644 --- a/docs/uk/debug/gdb_debugging.md +++ b/docs/uk/debug/gdb_debugging.md @@ -25,7 +25,7 @@ Developer <=> GDB <=> GDB Server <=> Debug Probe <=> SWD <=> PX4 Autopilot. - [SEGGER J-Link](probe_jlink.md): commercial probe, no built-in serial console, requires adapter. - [Black Magic Probe](probe_bmp.md): integrated GDB server and serial console, requires adapter. -- [STLink](probe_stlink): best value, integrated serial console, adapter must be soldered. +- [STLink](probe_stlink.md): best value, integrated serial console, adapter must be soldered. Рекомендуємо використовувати J-Link з адаптером налагодження Pixhawk або STLinkv3-MINIE зі спеціально спаяним кабелем. diff --git a/docs/uk/debug/plotting_realtime_uorb_data.md b/docs/uk/debug/plotting_realtime_uorb_data.md index e005e186d8..bbb482a6c7 100644 --- a/docs/uk/debug/plotting_realtime_uorb_data.md +++ b/docs/uk/debug/plotting_realtime_uorb_data.md @@ -72,7 +72,7 @@ cd ~/PX4-Autopilot make px4_sitl gz_x500 ``` -Open another terminal and start the `MicroXRCEAgent` to connect to the the simulator: +Open another terminal and start the `MicroXRCEAgent` to connect to the simulator: ```sh MicroXRCEAgent udp4 -p 8888; exec bash diff --git a/docs/uk/debug/probe_mculink.md b/docs/uk/debug/probe_mculink.md index 8a63994793..85af4e0ca4 100644 --- a/docs/uk/debug/probe_mculink.md +++ b/docs/uk/debug/probe_mculink.md @@ -1,6 +1,6 @@ # MCU-Link адаптер для налагодження -[MCU-Link Debug Probe](https://www.nxp.com/design/design-center/software/development-software/mcuxpresso-software-and-tools-/mcu-link-debug-probe:MCU-LINK) - це дешевий, швидкий і дуже потужний засіб відлагодження, який може використовуватися як самостійний засіб відлагодження та комунікатор консолі під час роботи з платами Pixhawk. +The [MCU-Link Debug Probe](https://www.nxp.com/design/design-center/software/development-software/mcuxpresso-software-and-tools-/mcu-link-debug-probe:MCU-LINK) is a cheap, fast and highly capable debug probe that can serve as a stand-alone debug and console communicator when working with Pixhawk boards. Основні функції: diff --git a/docs/uk/debug/simulation_debugging.md b/docs/uk/debug/simulation_debugging.md index 8a36dabdff..ded4021219 100644 --- a/docs/uk/debug/simulation_debugging.md +++ b/docs/uk/debug/simulation_debugging.md @@ -106,7 +106,7 @@ You can also start your simulation, and _then_ attach `gdb`: ``` As the script runs, note the **SITL COMMAND:** output text located right above the large "PX4" text. - Він перерахує місце розташування вашого файлу px4 bin для подальшого використання. + It will list the location of your PX4 bin file for later use. ```sh SITL COMMAND: "" ""/etc diff --git a/docs/uk/debug/swd_debug.md b/docs/uk/debug/swd_debug.md index 2138fb8326..6c434e5f23 100644 --- a/docs/uk/debug/swd_debug.md +++ b/docs/uk/debug/swd_debug.md @@ -1,11 +1,11 @@ # Порт для налагодження SWD -PX4 runs on ARM Cortex-M microcontrollers, which contain dedicated hardware for interactive debugging via the [_Serial Wire Debug (SWD)_][swd] interface and non-invasive profiling and high-bandwidth tracing via the [_Serial Wire Ouput (SWO)_][itm] and [_TRACE_ pins][etm]. +PX4 runs on ARM Cortex-M microcontrollers, which contain dedicated hardware for interactive debugging via the [_Serial Wire Debug (SWD)_][swd] interface and non-invasive profiling and high-bandwidth tracing via the [_Serial Wire Output (SWO)_][itm] and [_TRACE_ pins][etm]. Інтерфейс відладки SWD дозволяє прямий, низькорівневий, апаратний доступ до процесора мікроконтролера та периферійних пристроїв, тому він не залежить від будь-якого програмного забезпечення на пристрої. Отже, його можна використовувати для налагодження завантажувальних програм та операційних систем, таких як NuttX. -## Налагодження сигналів +## Debug Signals {#debug-signals} Чотири сигнали необхідні для відлагодження (в жирному шрифті), а решту лише рекомендується. @@ -27,11 +27,9 @@ SWO-пін може випромінювати дані профілювання Піни TRACE потребують спеціалізованих засобів відлагодження для роботи з високою пропускною здатністю та наступним декодуванням потоку даних. Зазвичай вони недоступні і зазвичай використовуються лише для відлагодження дуже конкретних питань з часом. - +## Autopilot Debug Ports {#debug-ports} -## Порти налагодження автопілота - -Flight controllers commonly provide a single debug port that exposes both the [SWD Interface](#debug-signals) and [System Console](system_console). +Flight controllers commonly provide a single debug port that exposes both the [SWD Interface](#debug-signals) and [System Console](system_console.md). The [Pixhawk Connector Standards](#pixhawk-standard-debug-ports) formalize the port that must be used in each FMU version. However there are still many boards that use different pinouts or connectors, so we recommend you check the [documentation for your autopilot](../flight_controller/index.md) to confirm port location and pinout. @@ -40,23 +38,35 @@ However there are still many boards that use different pinouts or connectors, so -| Автопілот | Відладочний порт | -| :----------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Holybro Pixhawk 6X-RT (FMUv6X-RT) | [Pixhawk Debug Full](#pixhawk-debug-full) | -| Holybro Pixhawk 6X (FMUv6x) | [Pixhawk Debug Full](#pixhawk-debug-full) | -| Holybro Pixhawk 5X (FMUv5x) | [Pixhawk Debug Full](#pixhawk-debug-full) | -| [Holybro Durandal](../flight_controller/durandal.md#debug-port) | [Pixhawk Debug Mini](#pixhawk-debug-mini) | -| [Holybro Kakute F7](../flight_controller/kakutef7.md#debug-port) | Паяльні майданчики | -| [Holybro Pixhawk 4 Mini](../flight_controller/pixhawk4_mini.md#debug-port) (FMUv5) | [Pixhawk Debug Mini](#pixhawk-debug-mini) | -| [Holybro Pixhawk 4](../flight_controller/pixhawk4.md#debug_port) (FMUv5) | [Pixhawk Debug Mini](#pixhawk-debug-mini) | -| [Drotek Pixhawk 3 Pro](../flight_controller/pixhawk3_pro.md#debug-port) (FMU-v4pro) | [Pixhawk Debug Mini](#pixhawk-debug-mini) | -| [CUAV V5+](../flight_controller/cuav_v5_plus.md#debug-port) | 6-pin JST GH
Digikey: [BM06B-GHS-TBT(LF)(SN)(N)][bm06b-ghs-tbt(lf)(sn)(n)] (vertical mount), [SM06B-GHS-TBT(LF)(SN)(N)][sm06b-ghs-tbt(lf)(sn)(n)] (side mount) | -| [CUAV V5nano](../flight_controller/cuav_v5_nano.md#debug_port) | 6-pin JST GH
Digikey: [BM06B-GHS-TBT(LF)(SN)(N)][bm06b-ghs-tbt(lf)(sn)(n)] (vertical mount), [SM06B-GHS-TBT(LF)(SN)(N)][sm06b-ghs-tbt(lf)(sn)(n)] (side mount) | -| [3DR Pixhawk](../flight_controller/pixhawk.md#swd-port) | ARM 10-pin JTAG Connector (also used for FMUv2 boards including: _mRo Pixhawk_, _HobbyKing HKPilot32_). | +| Автопілот | Відладочний порт | +| :------------------------------------------------------------------------------------------------------ | :----------------------------------------------------------------------- | +| [Holybro Pixhawk 6X-RT](../flight_controller/pixhawk6x-rt.md#debug_port) (FMUv6X-RT) | [Pixhawk Debug Full](#pixhawk-debug-full) | +| [Holybro Pixhawk 6X](../flight_controller/pixhawk6x.md#debug_port) (FMUv6x) | [Pixhawk Debug Full](#pixhawk-debug-full) | +| [Holybro Pixhawk 5X](../flight_controller/pixhawk5x.md#debug_port) (FMUv5x) | [Pixhawk Debug Full](#pixhawk-debug-full) | +| [Holybro Durandal](../flight_controller/durandal.md#debug-port) | [Pixhawk Debug Mini](#pixhawk-debug-mini) | +| [Holybro Pixhawk 4](../flight_controller/pixhawk4.md#debug_port) (FMUv5) | [Pixhawk Debug Mini](#pixhawk-debug-mini) | +| [Holybro Pixhawk 6X Pro](../flight_controller/pixhawk6x_pro.md#debug-port) | [Pixhawk Debug Full](#pixhawk-debug-full) | +| [Holybro Pixhawk 6C](../flight_controller/pixhawk6c.md#debug_port) | [Pixhawk Debug Full](#pixhawk-debug-full) | +| [Holybro Pixhawk 6C Mini](../flight_controller/pixhawk6c_mini.md#debug_port) | [Pixhawk Debug Mini](#pixhawk-debug-mini) | +| [Holybro Pix32 v6](../flight_controller/holybro_pix32_v6.md#debug_port) | [Pixhawk Debug Full](#pixhawk-debug-full) | +| [Holybro Pix32 v5](../flight_controller/holybro_pix32_v5.md#debug-port) | [Pixhawk Debug Mini](#pixhawk-debug-mini) | +| [Holybro Kakute H7](../flight_controller/kakuteh7.md#debug-port) | SWD pads and system console | +| [Holybro Kakute H7 mini](../flight_controller/kakuteh7mini.md#debug-port) | SWD pads and system console | +| [Holybro Kakute H7 V2](../flight_controller/kakuteh7v2.md#debug-port) | SWD pads and system console | +| [CUAV V5+](../flight_controller/cuav_v5_plus.md#debug-port) | Custom port but comes with adaptor cable | +| [CUAV V5nano](../flight_controller/cuav_v5_nano.md#debug_port) | Custom port but comes with adaptor cable | +| [CUAV Pixhawk V6X](../flight_controller/cuav_pixhawk_v6x.md#debug_port) | [Pixhawk Debug Full](#pixhawk-debug-full) | +| [CUAV X25-SUPER](../flight_controller/cuav_x25-super.md#debug_port) | [Pixhawk Debug Mini] | +| [CUAV X25-EVO](../flight_controller/cuav_x25-evo.md#debug_port) | [Pixhawk Debug Mini] | +| [CUAV Nora](../flight_controller/cuav_nora.md#debug-port) | Custom port but comes with adaptor cable. | +| [ARK Pixhawk Autopilot Bus Carrier](../flight_controller/ark_pab.md#debug-port) | [Pixhawk Debug Full](#pixhawk-debug-full) | +| [NXP MR-VMU-RT1176](../flight_controller/nxp_mr_vmu_rt1176.md#debug_port) | [Pixhawk Debug Full](#pixhawk-debug-full) | +| [mRo Pixracer](../flight_controller/pixracer.md#debug-port) | [Pixhawk Debug Mini](#pixhawk-debug-mini) | +| [S-Vehicle E2](../flight_controller/svehicle_e2.md#debug-port) | [Pixhawk Debug Mini] | +| [AP-H743-R1](../flight_controller/x-mav_ap-h743r1.md#debug-port) | 4-pin JST GH (SWD only) | +| [mRo Control Zero F7](../flight_controller/mro_control_zero_f7.md#debug_port) | | - - -## Стандарт роз'ємів Pixhawk Debug Портів +## Pixhawk Connector Standard Debug Ports {#pixhawk-standard-debug-ports} Проект Pixhawk визначив стандартну схему виводів та тип роз'єму для різних випусків Pixhawk FMU: @@ -64,16 +74,16 @@ However there are still many boards that use different pinouts or connectors, so Check your [specific board](#port-information) to confirm the port used. ::: -| Версія FMU | Версія Pixhawk | Відладочний порт | -| :--------- | :-------------------------------------------------------------- | :---------------------------------------- | -| FMUv2 | [Pixhawk / Pixhawk 1](../flight_controller/pixhawk.md#swd-port) | 10 pin ARM Debug | -| FMUv3 | Pixhawk 2 | 6 pin SUR Debug | -| FMUv4 | Pixhawk 3 | [Pixhawk Debug Mini](#pixhawk-debug-mini) | -| FMUv5 | Pixhawk 4 FMUv5 | [Pixhawk Debug Mini](#pixhawk-debug-mini) | -| FMUv5X | Pixhawk 5X | [Pixhawk Debug Full](#pixhawk-debug-full) | -| FMUv6 | Pixhawk 6 | [Pixhawk Debug Full](#pixhawk-debug-full) | -| FMUv6X | Pixhawk 6X | [Pixhawk Debug Full](#pixhawk-debug-full) | -| FMUv6X-RT | Pixhawk 6X-RT | [Pixhawk Debug Full](#pixhawk-debug-full) | +| Версія FMU | Версія Pixhawk | Відладочний порт | +| :--------- | :------------------ | :---------------------------------------- | +| FMUv2 | Pixhawk / Pixhawk 1 | 10 pin ARM Debug | +| FMUv3 | Pixhawk 2 | 6 pin SUR Debug | +| FMUv4 | Pixhawk 3 | [Pixhawk Debug Mini](#pixhawk-debug-mini) | +| FMUv5 | Pixhawk 4 FMUv5 | [Pixhawk Debug Mini](#pixhawk-debug-mini) | +| FMUv5X | Pixhawk 5X | [Pixhawk Debug Full](#pixhawk-debug-full) | +| FMUv6 | Pixhawk 6 | [Pixhawk Debug Full](#pixhawk-debug-full) | +| FMUv6X | Pixhawk 6X | [Pixhawk Debug Full](#pixhawk-debug-full) | +| FMUv6X-RT | Pixhawk 6X-RT | [Pixhawk Debug Full](#pixhawk-debug-full) | :::info There FMU and Pixhawk versions are (only) consistent after FMUv5X. @@ -81,7 +91,7 @@ There FMU and Pixhawk versions are (only) consistent after FMUv5X. ### Pixhawk Debug Mini -The [Pixhawk Connector Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-009%20Pixhawk%20Connector%20Standard.pdf) defines the _Pixhawk Debug Mini_, a _6-Pin SH Debug Port_ that provides access to both SWD pins and the [System Console](system_console). +The [Pixhawk Connector Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-009%20Pixhawk%20Connector%20Standard.pdf) defines the _Pixhawk Debug Mini_, a _6-Pin SH Debug Port_ that provides access to both SWD pins and the [System Console](system_console.md). Це використовується в FMUv4 та FMUv5. @@ -112,7 +122,7 @@ You can connect to the debug port using a [cable like this one](https://www.digi ### Порти відладки Pixhawk Full -The [Pixhawk Connector Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-009%20Pixhawk%20Connector%20Standard.pdf) defines _Pixhawk Debug Full_, a _10-Pin SH Debug Port_ that provides access to both SWD pins and the [System Console](system_console). +The [Pixhawk Connector Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-009%20Pixhawk%20Connector%20Standard.pdf) defines _Pixhawk Debug Full_, a _10-Pin SH Debug Port_ that provides access to both SWD pins and the [System Console](system_console.md). This essentially moves the solder pads from beside the [Pixhawk Debug Mini](#pixhawk-debug-mini) into the connector, and also adds an SWO pin. Цей порт вказаний для використання в FMUv5x, FMUv6, FMUv6x. @@ -142,18 +152,16 @@ You can connect to the debug port using a [cable like this one](https://www.digi ![10-pin JST SH Cable](../../assets/debug/cable_10pin_jst_sh.jpg) - +## Debug Probes for PX4 Hardware {#debug-probes} -## Зонди налагодження для апаратного забезпечення PX4 - -Flight controllers commonly provide a [single debug port](#autopilot-debug-ports) that exposes both the [SWD Interface](#debug-signals) and [System Console](system_console). +Flight controllers commonly provide a [single debug port](#autopilot-debug-ports) that exposes both the [SWD Interface](#debug-signals) and [System Console](system_console.md). Є кілька зондів відлагодження, які були перевірені та підтримуються для підключення до одного або обох цих інтерфейсів: - [SEGGER J-Link](../debug/probe_jlink.md): commercial probe, no built-in serial console, requires adapter. - [Black Magic Probe](../debug/probe_bmp.md): integrated GDB server and serial console, requires adapter. -- [STLink](../debug/probe_stlink): best value, integrated serial console, adapter must be soldered. -- [MCU-Link](../debug/probe_mculink): best value, integrated serial console, requires adapter. +- [STLink](../debug/probe_stlink.md): best value, integrated serial console, adapter must be soldered. +- [MCU-Link](../debug/probe_mculink.md): best value, integrated serial console, requires adapter. Адаптер для підключення до роз'єму відладки може поставлятися разом із вашим контролером польоту або відлагоджувальним зондом. Інші варіанти наведено нижче. @@ -191,7 +199,7 @@ Some SWD [debug probes](#debug-probes) come with adapters/cables for connecting ### Адаптери, специфічні для плати -Some manufacturers provide cables to make it easy to connect the SWD interface and [System Console](../debug/system_console). +Some manufacturers provide cables to make it easy to connect the SWD interface and [System Console](../debug/system_console.md). - [CUAV V5nano](../flight_controller/cuav_v5_nano.md#debug_port) and [CUAV V5+](../flight_controller/cuav_v5_plus.md#debug-port) include this debug cable: @@ -205,7 +213,7 @@ Some manufacturers provide cables to make it easy to connect the SWD interface a - Підключіть контакт VREF, якщо його підтримує засіб відлагодження. - Підключіть залишкові контакти, якщо вони є. -See the [STLinkv3-MINIE](probe_stlink) for a guide on how to solder a custom cable. +See the [STLinkv3-MINIE](probe_stlink.md) for a guide on how to solder a custom cable. :::tip Where possible, we highly recommend that you create or obtain an adapter board rather than custom cables for connecting to SWD/JTAG debuggers and computers. @@ -217,5 +225,3 @@ Where possible, we highly recommend that you create or obtain an adapter board r [swd]: https://developer.arm.com/documentation/ihi0031/a/The-Serial-Wire-Debug-Port--SW-DP- [itm]: https://developer.arm.com/documentation/ddi0403/d/Appendices/Debug-ITM-and-DWT-Packet-Protocol?lang=en [etm]: https://developer.arm.com/documentation/ihi0064/latest/ -[bm06b-ghs-tbt(lf)(sn)(n)]: https://www.digikey.com/en/products/detail/jst-sales-america-inc/BM06B-GHS-TBT/807804 -[sm06b-ghs-tbt(lf)(sn)(n)]: https://www.digikey.com/en/products/detail/jst-sales-america-inc/SM06B-GHS-TB/807790 diff --git a/docs/uk/debug/system_console.md b/docs/uk/debug/system_console.md index 0bd0b62024..75df93273f 100644 --- a/docs/uk/debug/system_console.md +++ b/docs/uk/debug/system_console.md @@ -23,16 +23,10 @@ Developers targeting a number of different boards may wish to use a [debug adapt ### Проводка, специфічна для плати -The System Console UART pinouts/debug ports are typically documented in [autopilot overview pages](../flight_controller/index.md) (some are linked below): +The System Console UART pinouts/debug ports are typically documented in the affected [autopilot overview pages](../flight_controller/index.md). +For example, see [mRo Pixhawk](../flight_controller/mro_pixhawk.md#console-port) and [Pixracer](../flight_controller/pixracer.md#debug-port). -- [3DR Pixhawk v1 Flight Controller](../flight_controller/pixhawk.md#console-port) (also applies to - [mRo Pixhawk](../flight_controller/mro_pixhawk.md#debug-ports), [Holybro pix32](../flight_controller/holybro_pix32.md#debug-port)) -- [Pixhawk 3](../flight_controller/pixhawk3_pro.md#debug-port) -- [Pixracer](../flight_controller/pixracer.md#debug-port) - - - -### Порти відладки Pixhawk +### Pixhawk Debug Port {#pixhawk_debug_port} Pixhawk flight controllers usually come with a [Pixhawk Connector Standard Debug Port](../debug/swd_debug.md#pixhawk-connector-standard-debug-ports) which will be either the 10 pin [Pixhawk Debug Full](../debug/swd_debug.md#pixhawk-debug-full) or 6 pin [Pixhawk Debug Mini](../debug/swd_debug.md#pixhawk-debug-mini) port. diff --git a/docs/uk/dev_airframes/adding_a_new_frame.md b/docs/uk/dev_airframes/adding_a_new_frame.md index 2fe074a490..a1e6a924ef 100644 --- a/docs/uk/dev_airframes/adding_a_new_frame.md +++ b/docs/uk/dev_airframes/adding_a_new_frame.md @@ -124,118 +124,79 @@ param set-default CA_ROTOR3_PY 0.15 param set-default CA_ROTOR3_KM -0.05 ``` -### Приклад – Повний транспортний засіб Babyshark VTOL +### Example - HolyBro QAV250 Complete Vehicle -Нижче наведено більш складний файл конфігурації для повного транспортного засобу. -This is the configuration for the Baby Shark [Standard VTOL](../frames_vtol/standardvtol.md) ([original file here](https://github.com/PX4/PX4-Autopilot/blob/main/ROMFS/px4fmu_common/init.d/airframes/13014_vtol_babyshark)). +A more complete configuration file for a real vehicle is provided below. +This is the configuration for the [HolyBro QAV250](../frames_multicopter/holybro_qav250_pixhawk4_mini.md) quadrotor ([original file here](https://github.com/PX4/PX4-Autopilot/blob/main/ROMFS/px4fmu_common/init.d/airframes/4052_holybro_qav250)). -The shebang and documentation sections are similar to those for the generic frame, but here we also document what `outputs` are mapped to each motor and actuator. -Зверніть увагу, що ці результати є лише документацією; фактичне відображення виконується за допомогою параметрів. +The shebang and documentation sections are similar to those for the generic frame. +Here we also add a `@url` link to the vehicle documentation, a `@maintainer`, and additional board exclusions. ```sh #!/bin/sh # -# @name BabyShark VTOL +# @name HolyBro QAV250 # -# @type Standard VTOL -# @class VTOL +# @url https://docs.px4.io/main/en/frames_multicopter/holybro_qav250_pixhawk4_mini # -# @maintainer Silvan Fuhrer +# @type Quadrotor x +# @class Copter # -# @output Motor1 motor 1 -# @output Motor2 motor 2 -# @output Motor3 motor 3 -# @output Motor4 motor 4 -# @output Motor5 Pusher motor -# @output Servo1 Ailerons -# @output Servo2 A-tail left -# @output Servo3 A-tail right +# @maintainer Beat Kueng # # @board px4_fmu-v2 exclude # @board bitcraze_crazyflie exclude -# @board holybro_kakutef7 exclude +# @board px4_fmu-v6x exclude +# @board ark_fmu-v6x exclude # ``` -Як і для загальної конструкції, ми додаємо типові значення VTOL за замовчуванням. +Next, we source the multicopter defaults. ```sh -. ${R}etc/init.d/rc.vtol_defaults +. ${R}etc/init.d/rc.mc_defaults ``` Then we define configuration parameters and [tuning gains](#tuning-gains): ```sh -param set-default MAV_TYPE 22 +# The set does not include a battery, but most people will probably use 4S +param set-default BAT1_N_CELLS 4 -param set-default BAT1_N_CELLS 6 +param set-default IMU_GYRO_CUTOFF 120 +param set-default IMU_DGYRO_CUTOFF 45 -param set-default FW_AIRSPD_MAX 30 -param set-default FW_AIRSPD_MIN 19 -param set-default FW_AIRSPD_TRIM 23 -param set-default FW_PN_R_SLEW_MAX 40 -param set-default FW_PSP_OFF 3 -param set-default FW_P_LIM_MAX 18 -param set-default FW_P_LIM_MIN -25 -param set-default FW_RLL_TO_YAW_FF 0.1 -param set-default FW_RR_P 0.08 -param set-default FW_R_LIM 45 -param set-default FW_R_RMAX 50 -param set-default FW_THR_TRIM 0.65 -param set-default FW_THR_MIN 0.3 -param set-default FW_THR_SLEW_MAX 0.6 -param set-default FW_T_HRATE_FF 0 -param set-default FW_T_SINK_MAX 15 -param set-default FW_T_SINK_MIN 3 -param set-default FW_YR_P 0.15 - -param set-default IMU_DGYRO_CUTOFF 15 -param set-default MC_PITCHRATE_MAX 60 -param set-default MC_ROLLRATE_MAX 60 -param set-default MC_YAWRATE_I 0.15 -param set-default MC_YAWRATE_MAX 40 -param set-default MC_YAWRATE_P 0.3 - -param set-default MPC_ACC_DOWN_MAX 2 -param set-default MPC_ACC_HOR_MAX 2 -param set-default MPC_ACC_UP_MAX 3 param set-default MC_AIRMODE 1 -param set-default MPC_JERK_AUTO 4 -param set-default MPC_LAND_SPEED 1 -param set-default MPC_MAN_TILT_MAX 25 -param set-default MPC_MAN_Y_MAX 40 -param set-default COM_SPOOLUP_TIME 1.5 -param set-default MPC_THR_HOVER 0.45 -param set-default MPC_TILTMAX_AIR 25 -param set-default MPC_TKO_RAMP_T 1.8 -param set-default MPC_TKO_SPEED 1 -param set-default MPC_VEL_MANUAL 3 -param set-default MPC_XY_CRUISE 3 -param set-default MPC_XY_VEL_MAX 3.5 -param set-default MPC_YAWRAUTO_MAX 40 -param set-default MPC_Z_VEL_MAX_UP 2 +param set-default MC_PITCHRATE_D 0.0012 +param set-default MC_PITCHRATE_I 0.35 +param set-default MC_PITCHRATE_MAX 1200 +param set-default MC_PITCHRATE_P 0.082 +param set-default MC_PITCH_P 8 +param set-default MC_ROLLRATE_D 0.0012 +param set-default MC_ROLLRATE_I 0.3 +param set-default MC_ROLLRATE_MAX 1200 +param set-default MC_ROLLRATE_P 0.076 +param set-default MC_ROLL_P 8 +param set-default MC_YAWRATE_I 0.3 +param set-default MC_YAWRATE_MAX 600 +param set-default MC_YAWRATE_P 0.25 +param set-default MC_YAW_P 4 -param set-default NAV_ACC_RAD 3 +param set-default MPC_MANTHR_MIN 0 +param set-default MPC_MAN_TILT_MAX 60 +param set-default MPC_THR_CURVE 1 +param set-default MPC_THR_HOVER 0.25 +param set-default MPC_THR_MIN 0.05 +param set-default MPC_Z_VEL_I_ACC 1.7 -param set-default SENS_BOARD_ROT 4 - -param set-default VT_ARSP_BLEND 10 -param set-default VT_ARSP_TRANS 21 -param set-default VT_B_DEC_MSS 1.5 -param set-default VT_B_TRANS_DUR 12 -param set-default VT_ELEV_MC_LOCK 0 -param set-default VT_FWD_THRUST_SC 1.2 -param set-default VT_F_TR_OL_TM 8 -param set-default VT_PSHER_SLEW 0.5 -param set-default VT_TRANS_MIN_TM 4 -param set-default VT_TYPE 2 +param set-default THR_MDL_FAC 0.3 ``` -Нарешті, файл визначає параметри розподілу керування для геометрії та параметри, які встановлюють відповідність виходів різним двигунам та сервоприводам. +Last of all, the file defines the control allocation parameters for the geometry and the parameters that set which outputs map to different motors. ```sh -param set-default CA_AIRFRAME 2 -param set-default CA_ROTOR_COUNT 5 +# Square quadrotor X PX4 numbering +param set-default CA_ROTOR_COUNT 4 param set-default CA_ROTOR0_PX 1 param set-default CA_ROTOR0_PY 1 param set-default CA_ROTOR1_PX -1 @@ -246,34 +207,11 @@ param set-default CA_ROTOR2_KM -0.05 param set-default CA_ROTOR3_PX -1 param set-default CA_ROTOR3_PY 1 param set-default CA_ROTOR3_KM -0.05 -param set-default CA_ROTOR4_AX 1.0 -param set-default CA_ROTOR4_AZ 0.0 -param set-default CA_SV_CS_COUNT 3 -param set-default CA_SV_CS0_TYPE 15 -param set-default CA_SV_CS0_TRQ_R 1.0 -param set-default CA_SV_CS1_TRQ_P 0.5000 -param set-default CA_SV_CS1_TRQ_R 0.0000 -param set-default CA_SV_CS1_TRQ_Y -0.5000 -param set-default CA_SV_CS1_TYPE 13 -param set-default CA_SV_CS2_TRQ_P 0.5000 -param set-default CA_SV_CS2_TRQ_Y 0.5000 -param set-default CA_SV_CS2_TYPE 14 - -param set-default PWM_MAIN_FUNC1 201 -param set-default PWM_MAIN_FUNC2 202 -param set-default PWM_MAIN_FUNC3 105 -param set-default PWM_MAIN_FUNC4 203 -param set-default PWM_MAIN_FUNC5 101 -param set-default PWM_MAIN_FUNC6 102 -param set-default PWM_MAIN_FUNC7 103 -param set-default PWM_MAIN_FUNC8 104 - -param set-default PWM_MAIN_TIM0 50 -param set-default PWM_MAIN_DIS1 1500 -param set-default PWM_MAIN_DIS2 1500 -param set-default PWM_MAIN_DIS3 1000 -param set-default PWM_MAIN_DIS4 1500 +param set-default PWM_MAIN_FUNC1 101 +param set-default PWM_MAIN_FUNC2 102 +param set-default PWM_MAIN_FUNC3 103 +param set-default PWM_MAIN_FUNC4 104 ``` ## Додавання нової групи планера diff --git a/docs/uk/dev_log/log_encryption.md b/docs/uk/dev_log/log_encryption.md index 82b519a857..d2f189a9e3 100644 --- a/docs/uk/dev_log/log_encryption.md +++ b/docs/uk/dev_log/log_encryption.md @@ -15,7 +15,7 @@ To use it you will need to build firmware with this feature enabled and then upl Log encryption was has been improved in PX4 v1.16 to generate a single encrypted log file that contains both encrypted log data, and an encrypted symmetric key that you can use to decrypt it (provided you can decrypt the symmetric key). In earlier versions the encrypted symmetric key was stored in a separate file. -For more information see the [Log Encryption (PX4 v1.15)](https://docs.px4.io/v1.15/en/dev_log/log_encryption.html). +For more information see the [Log Encryption (PX4 v1.15)](https://docs.px4.io/v1.15/en/dev_log/log_encryption). ::: ## How ULog Encryption Works @@ -142,7 +142,7 @@ Note that the value is generated fresh for each log, and any value specified in You can use choose different locations for your keys as long as they aren't used by anything else. ::: -The key in `CONFIG_PUBLIC_KEY1` is the public key used to wrap the symmetric key in the the beginning of `.ulge` file (by default: see [SDLOG_EXCH_KEY](../advanced_config/parameter_reference.md#SDLOG_EXCH_KEY)). +The key in `CONFIG_PUBLIC_KEY1` is the public key used to wrap the symmetric key in the beginning of `.ulge` file (by default: see [SDLOG_EXCH_KEY](../advanced_config/parameter_reference.md#SDLOG_EXCH_KEY)). You can use the `rsa2048.pub` key for testing, or replace it with the path to your own public key in the file (see [Generate RSA Public & Private Keys](#generate-rsa-public-private-keys)). Build the firmware like this: @@ -342,7 +342,7 @@ PX4-Autopilot/ │ │ ├── public_key.pub # Public key in hex format ``` -Примітки: +Notes: - The script will not overwrite any existing keys in the folders. It will generate a new public key if the folder only includes a private key. diff --git a/docs/uk/dev_log/logging.md b/docs/uk/dev_log/logging.md index 7b5da1b821..e61894e343 100644 --- a/docs/uk/dev_log/logging.md +++ b/docs/uk/dev_log/logging.md @@ -83,6 +83,31 @@ sensor_mag 200 1 There are several scripts to analyze and convert logging files in the [pyulog](https://github.com/PX4/pyulog) repository. +## Log Cleanup + +PX4 automatically manages log storage by rotating log files during writing and cleaning up old logs when starting a new log. +Rotation is **on by default**: when the current file reaches [SDLOG_MAX_SIZE](../advanced_config/parameter_reference.md#SDLOG_MAX_SIZE), the logger closes it and opens a new one, and old `.ulg` files are deleted (oldest first) to keep free space above the threshold set by [SDLOG_ROTATE](../advanced_config/parameter_reference.md#SDLOG_ROTATE). + +Three parameters control how much space logs may use: + +- [SDLOG_ROTATE](../advanced_config/parameter_reference.md#SDLOG_ROTATE) is the maximum disk usage percentage (default 90). + Cleanup prior to logging (see below) ensures at least `(100 - SDLOG_ROTATE)%` of the disk stays free at all times, **even while writing a new log file**. + Setting it to `0` disables space-based cleanup entirely; setting it to `100` lets logs fill the disk completely. +- [SDLOG_MAX_SIZE](../advanced_config/parameter_reference.md#SDLOG_MAX_SIZE) is the maximum size of a single log file in MB + (default 1024). It also reserves headroom so that a full new file always fits after cleanup. +- [SDLOG_DIRS_MAX](../advanced_config/parameter_reference.md#SDLOG_DIRS_MAX) optionally caps the number of log directories kept (default 0, disabled). + This runs on top of the space-based cleanup and is mainly useful for capping log usage by count independent of available disk size (e.g. in SITL, where it defaults to `7`). + +At log start, the cleanup threshold is `((100 - SDLOG_ROTATE)% of disk) + SDLOG_MAX_SIZE`. +The oldest logs are deleted until the free space meets this threshold. +For example, on an 8 GB card with defaults, cleanup keeps at least `820 + 1024 = ~1.8 GB` free at log start, +so ~6 GB is usable for logs and disk usage never exceeds 90% during writing. +Small flash targets override `SDLOG_MAX_SIZE` to a smaller value to keep more logs within the available space. + +PX4 stores logs in directories named with one of two formats, depending on whether the system has valid time: date directories (such as `2024-01-15` or `2024-01-16`) when it does, and session directories (`sess001`) when it doesn't. +The cleanup algorithm prioritises deleting logs from whichever format is not currently in use. +This ensures that stale logs from a different time mode are cleaned up before current logs. + ## Обмеження розміру файлу Максимальний розмір файлу залежить від файлової системи та ОС. diff --git a/docs/uk/dev_setup/building_px4.md b/docs/uk/dev_setup/building_px4.md index d52cd81c07..76f219b6e4 100644 --- a/docs/uk/dev_setup/building_px4.md +++ b/docs/uk/dev_setup/building_px4.md @@ -136,13 +136,13 @@ The following list shows the build commands for the [Pixhawk standard](../flight - [mRo Pixhawk (FMUv3)](../flight_controller/mro_pixhawk.md): `make px4_fmu-v3_default` (supports 2MB Flash) -- [Holybro pix32 (FMUv2)](../flight_controller/holybro_pix32.md): `make px4_fmu-v2_default` +- [Holybro pix32 (FMUv2)](../flight_controller/autopilot_discontinued.md): `make px4_fmu-v2_default` - Discontinued -- [Pixfalcon (FMUv2)](../flight_controller/pixfalcon.md): `make px4_fmu-v2_default` +- [Pixfalcon (FMUv2)](../flight_controller/autopilot_discontinued.md): `make px4_fmu-v2_default` - Discontinued -- [Dropix (FMUv2)](../flight_controller/dropix.md): `make px4_fmu-v2_default` +- [Dropix (FMUv2)](../flight_controller/autopilot_discontinued.md): `make px4_fmu-v2_default` - Discontinued -- [Pixhawk 1 (FMUv2)](../flight_controller/pixhawk.md): `make px4_fmu-v2_default` +- [Pixhawk 1 (FMUv2)](../flight_controller/autopilot_discontinued.md): `make px4_fmu-v2_default` - Discontinued :::warning You **must** use a supported version of GCC to build this board (e.g. the `gcc-arm-none-eabi` package from the current Ubuntu LTS, which is the same toolchain used by CI) or remove modules from the build. @@ -282,7 +282,7 @@ make [VENDOR_][MODEL][_VARIANT] [VIEWER_MODEL_DEBUGGER_WORLD] - **VENDOR:** The manufacturer of the board: `px4`, `aerotenna`, `airmind`, `atlflight`, `auav`, `beaglebone`, `intel`, `nxp`, etc. The vendor name for Pixhawk series boards is `px4`. - **MODEL:** The _board model_ "model": `sitl`, `fmu-v2`, `fmu-v3`, `fmu-v4`, `fmu-v5`, `navio2`, etc. -- **VARIANT:** Indicates particular configurations: e.g. `bootloader`, `cyphal`, which contain components that are not present in the `default` configuration. +- **VARIANT:** Indicates particular configurations: e.g. `bootloader`, `cyphal`, `sih`, which add or remove components to/from the `default` configuration. Most commonly this is `default`, and may be omitted. :::tip diff --git a/docs/uk/dev_setup/dev_env.md b/docs/uk/dev_setup/dev_env.md index d351b169d8..338a266211 100644 --- a/docs/uk/dev_setup/dev_env.md +++ b/docs/uk/dev_setup/dev_env.md @@ -1,5 +1,10 @@ # Налаштування середовища розробника (Інструментарію) +:::tip +You only need a toolchain if you want to **modify and build** PX4 from source. +If you just want to run PX4 simulation without changing the code, use a pre-built [Docker container or .deb package](../simulation/px4_sitl_prebuilt_packages.md) instead. +::: + The _supported platforms_ for PX4 development are: - [Ubuntu Linux (24.04/22.04)](../dev_setup/dev_env_linux_ubuntu.md) diff --git a/docs/uk/dev_setup/dev_env_linux_arch.md b/docs/uk/dev_setup/dev_env_linux_arch.md index 4f8fb10602..dfcaf0a1ae 100644 --- a/docs/uk/dev_setup/dev_env_linux_arch.md +++ b/docs/uk/dev_setup/dev_env_linux_arch.md @@ -1,7 +1,7 @@ # Середовище розробки Arch Linux :::warning -This development environment is [community supported and maintained](../advanced/community_supported_dev_env). +This development environment is [community supported and maintained](../advanced/community_supported_dev_env.md). Це може працювати або не працювати з поточними версіями PX4. Дивіться [Встановлення інструментарію](../dev_setup/dev_env.md) для інформації про середовища та інструменти, що підтримуються основною командою розробників. diff --git a/docs/uk/dev_setup/dev_env_mac.md b/docs/uk/dev_setup/dev_env_mac.md index 214f44b7f3..a2e60b1822 100644 --- a/docs/uk/dev_setup/dev_env_mac.md +++ b/docs/uk/dev_setup/dev_env_mac.md @@ -1,116 +1,135 @@ # macOS Development Environment -Наступні інструкції для встановлення середовища розробки PX4 для macOS. +The following instructions set up a PX4 development environment on macOS. Це середовище може бути використане для збірки PX4 для: - Pixhawk та іншого апаратного забезпечення на основі NuttX -- [Gazebo Classic Simulation](../sim_gazebo_classic/index.md) +- [Gazebo Simulation](../sim_gazebo_gz/index.md) (Gazebo Harmonic) + +It works on both Intel and Apple Silicon Macs. :::tip This setup is supported by the PX4 dev team. -To build other targets you will need to use a [different OS](../dev_setup/dev_env.md#supported-targets) (or an [unsupported development environment](../advanced/community_supported_dev_env.md)). +To build for [other targets](../dev_setup/dev_env.md#supported-targets) you will need to use a [different OS](../dev_setup/dev_env.md#supported-targets) or an [unsupported development environment](../advanced/community_supported_dev_env.md). ::: -## Відеоінструкція +## Development Environment Setup - +### Вимоги -## Базове налаштування - -"Базове" налаштування macOS встановлює інструменти, необхідні для збірки прошивки та включає загальні інструменти, які будуть потрібні для встановлення/використання симуляторів. - -### Налаштування середовища - -:::details -Apple Silicon MacBook users! -If you have an Apple M1, M2 etc. MacBook, make sure to run the terminal as x86 by setting up an x86 terminal: - -1. Locate the Terminal application within the Utilities folder (**Finder > Go menu > Utilities**) -2. Select _Terminal.app_ and right-click on it, then choose **Duplicate**. -3. Rename the duplicated Terminal app, e.g. to _x86 Terminal_ -4. Now select the renamed _x86 Terminal_ app and right-click and choose \*_Get Info_ -5. Check the box for **Open using Rosetta**, then close the window -6. Run the _x86 Terminal_ as usual, which will fully support the current PX4 toolchain - -::: - -Спочатку налаштуйте середовище - -1. Enable more open files by appending the following line to the `~/.zshenv` file (creating it if necessary): +1. **Install Xcode Command Line Tools** — provides `git`, `make`, and the Apple `clang` compiler: ```sh - echo ulimit -S -n 2048 >> ~/.zshenv + xcode-select --install + ``` + +2. **Install Homebrew** by following the [installation instructions](https://brew.sh). + +3. **Increase the open-file limit.** The PX4 build opens many files simultaneously and the macOS default limit (256) is too low — you may see `"LD: too many open files"` errors without this. + + Add the following line to your shell startup file so it applies to every new terminal session. + macOS defaults to **zsh** since Catalina, so add it to `~/.zshrc` (use `~/.bashrc` if you use bash): + + ```sh + echo "ulimit -S -n 2048" >> ~/.zshrc + ``` + + Then **open a new terminal** (or run `source ~/.zshrc`) for the change to take effect. + +4. **Ensure Python 3 is available.** Some PX4 build scripts require `python3` and `pip3` to be in your `PATH`. The Xcode Command Line Tools include Python 3 by default. + + ::: tip + If you need to install or manage a different Python version, we recommend [pyenv](https://github.com/pyenv/pyenv), which lets you set global and per-directory Python versions. + +::: + +### Install Development Tools + +1. **Download PX4 Source Code:** + + ```sh + git clone https://github.com/PX4/PX4-Autopilot.git + cd PX4-Autopilot + git submodule update --init --recursive --force + ``` + +2. **Install development environment libraries** from the [macos.sh](https://github.com/PX4/PX4-Autopilot/blob/main/Tools/setup/macos.sh) helper script: + + ```sh + ./Tools/setup/macos.sh --sim-tools ``` ::: info - If you don't do this, the build toolchain may report the error: `"LD: too many open files"` + The setup script creates a Python virtual environment at `.venv` in the repo root and installs all Python dependencies into it. This keeps PX4's Python requirements isolated from your system Python and avoids conflicts with Homebrew's externally-managed Python. + + Activate it before building: + + ```sh + source .venv/bin/activate + ``` + + You'll need to re-run this command in each new terminal session. To activate it automatically when you `cd` into the repo, consider a tool like [direnv](https://direnv.net/) or add the activation to your `~/.zshrc`. ::: -2. Enforce Python 3 by appending the following lines to `~/.zshenv` + This installs: - ```sh - # Point pip3 to macOS system python 3 pip - alias pip3=/usr/bin/pip3 - ``` - -### Загальні інструменти - -Для налаштування середовища з можливістю збірки для обладнання Pixhawk/NuttX (і встановлення загальних інструментів для використання симуляторів): - -1. Install Homebrew by following these [installation instructions](https://brew.sh). - -2. Виконайте ці команди в командній оболонці для встановлення загальних інструментів: - - ```sh - brew tap PX4/px4 - brew install px4-dev - ``` - -3. Встановіть необхідні пакети Python: - - ```sh - # install required packages using pip3 - python3 -m pip install --user pyserial empty toml numpy pandas jinja2 pyyaml pyros-genmsg packaging kconfiglib future jsonschema - # if this fails with a permissions error, your Python install is in a system path - use this command instead: - sudo -H python3 -m pip install --user pyserial empty toml numpy pandas jinja2 pyyaml pyros-genmsg packaging kconfiglib future jsonschema - ``` - -## Симуляція Gazebo Classic - -To setup the environment for [Gazebo Classic](../sim_gazebo_classic/index.md) simulation: - -1. Виконайте наступні команди в командній оболонці: - - ```sh - brew unlink tbb - sed -i.bak '/disable! date:/s/^/ /; /disable! date:/s/./#/3' $(brew --prefix)/Library/Taps/homebrew/homebrew-core/Formula/tbb@2020.rb - brew install tbb@2020 - brew link tbb@2020 - ``` + - **Toolchain packages** from the `osx-cross/arm` and `PX4/px4` Homebrew taps — ARM cross-compiler (`arm-gcc-bin@13`), `cmake`, `ninja`, `ccache`, `fastdds`, `genromfs`, `kconfig-frontends`, and other build tools + - **Python packages** from `requirements.txt` + - **`px4-sim`** (via `--sim-tools`) — Gazebo Harmonic simulation (`gz-harmonic`) and related tools ::: info - September 2021: The commands above are a workaround to this bug: [PX4-Autopilot#17644](https://github.com/PX4/PX4-Autopilot/issues/17644). - Вони можуть бути видалені після того, як вона буде виправлена (разом з цією нотаткою). + Omit `--sim-tools` if you only need to build for NuttX hardware and don't need simulation. + + Use `--reinstall` to force reinstallation of all Homebrew formulas (useful if something is broken). ::: -2. Для встановлення симуляції SITL з Gazebo Classic: +### Gazebo Simulation - ```sh - brew install --cask temurin - brew install --cask xquartz - brew install px4-sim-gazebo - ``` +The `--sim-tools` flag installs the `px4-sim` Homebrew formula, which pulls in Gazebo Harmonic. -3. Run the macOS setup script: `PX4-Autopilot/Tools/setup/macos.sh` - The easiest way to do this is to clone the PX4 source, and then run the script from the directory, as shown: +If you skipped `--sim-tools` during initial setup and want to add simulation later: - ```sh - git clone https://github.com/PX4/PX4-Autopilot.git --recursive - cd PX4-Autopilot/Tools/setup - sh macos.sh - ``` +```sh +brew tap PX4/px4 +brew install px4-sim +``` + +:::info +Gazebo requires **XQuartz** for display on macOS. +If you don't already have it installed: + +```sh +brew install --cask xquartz +``` + +You may need to log out and back in after installing XQuartz. +::: + +### Verify Installation + +After installation, verify the key tools are available: + +```sh +# NuttX cross-compiler (from arm-gcc-bin@13) +arm-none-eabi-gcc --version + +# Build tools +cmake --version +ninja --version + +# Gazebo (if --sim-tools was used) +gz sim --versions +``` + +Quick smoke test — build and run a simulation target: + +```sh +make px4_sitl gz_x500 +``` + +If everything is set up correctly, this will build PX4 SITL and launch a Gazebo simulation with the x500 quadcopter. ## Наступні кроки @@ -120,7 +139,7 @@ To setup the environment for [Gazebo Classic](../sim_gazebo_classic/index.md) si - Install the [QGroundControl Daily Build](../dev_setup/qgc_daily_build.md) - :::tip + ::: tip The _daily build_ includes development tools that are hidden in release builds. Вона також може надати доступ до нових функцій PX4, які ще не підтримуються в релізних збірках. diff --git a/docs/uk/dev_setup/dev_env_windows_vm.md b/docs/uk/dev_setup/dev_env_windows_vm.md index 93d09b3593..1682a56832 100644 --- a/docs/uk/dev_setup/dev_env_windows_vm.md +++ b/docs/uk/dev_setup/dev_env_windows_vm.md @@ -29,14 +29,14 @@ Allocate as many CPU cores and memory resources to the VM as possible. Ефективність VMWare прийнятна для основного застосування (збірки прошивки) але не для запуску ROS чи Gazebo Classic. -1. Download [VMWare Player Freeware](https://www.vmware.com/products/workstation-player/workstation-player-evaluation.html) +1. Download [VMWare Workstation Pro](https://www.vmware.com/products/desktop-hypervisor/workstation-and-fusion) (the free player has been discontinued) 2. Установіть його на вашу Windows систему 3. Download the desired version of [Ubuntu Desktop ISO Image](https://ubuntu.com/download/desktop). (see [Linux Instructions Page](../dev_setup/dev_env_linux.md) for recommended Ubuntu version). -4. Open _VMWare Player_. +4. Open _Workstation Pro_. 5. Enable 3D acceleration in the VM's settings: **VM > Settings > Hardware > Display > Accelerate 3D graphics** diff --git a/docs/uk/dev_setup/getting_started.md b/docs/uk/dev_setup/getting_started.md index 19670e169b..9aed659d0b 100644 --- a/docs/uk/dev_setup/getting_started.md +++ b/docs/uk/dev_setup/getting_started.md @@ -2,6 +2,7 @@ Цей розділ містить теми про те, як почати PX4 розробку: +- [PX4 Simulation QuickStart](../simulation/px4_simulation_quickstart.md) — Try PX4 in simulation without a build environment! - [Initial Setup](../dev_setup/config_initial.md) - [Toolchain Installation](../dev_setup/dev_env.md) - [Building the Code](../dev_setup/building_px4.md) diff --git a/docs/uk/dev_setup/qtcreator.md b/docs/uk/dev_setup/qtcreator.md index b1d2b9fc43..f24825fe80 100644 --- a/docs/uk/dev_setup/qtcreator.md +++ b/docs/uk/dev_setup/qtcreator.md @@ -8,7 +8,7 @@ Qt Creator has been replaced by [VSCode](../dev_setup/vscode.md) as the official Дивіться [Встановлення інструментарію](../dev_setup/dev_env.md) для інформації про середовища та інструменти, що підтримуються основною командою розробників. ::: -[Qt Creator](https://www.qt.io/download-open-source) is a popular cross-platform open-source IDE that can be used to compile and debug PX4. +[Qt Creator](https://www.qt.io/development/download-open-source) is a popular cross-platform open-source IDE that can be used to compile and debug PX4. ## Функціональні можливості Qt Creator diff --git a/docs/uk/dronecan/ark_cannode.md b/docs/uk/dronecan/ark_cannode.md index 69cc232ce6..c480330104 100644 --- a/docs/uk/dronecan/ark_cannode.md +++ b/docs/uk/dronecan/ark_cannode.md @@ -28,7 +28,7 @@ - Роз'єм стандарту SPI для Pixhawk - 7-контактний JST-GH - Коннектор PWM - - 10-контактний JST-SH + - 10 Pin JST - 8 PWM виводів - Відповідно до схеми підключення штирьових роз'ємів Pixhawk 4 PWM - Роз'єм для налагодження стандарту Pixhawk @@ -77,7 +77,7 @@ DroneCAN configuration in PX4 is explained in more detail in [DroneCAN > Enablin Вам потрібно буде увімкнути підписника, відповідного для кожного з сенсорів, які підключені до ARK CANnode. -This is done using the the parameters named like `UAVCAN_SUB_*` in the parameter reference (such as [UAVCAN_SUB_ASPD](../advanced_config/parameter_reference.md#UAVCAN_SUB_ASPD), [UAVCAN_SUB_BARO](../advanced_config/parameter_reference.md#UAVCAN_SUB_BARO) etc.). +This is done using the parameters named like `UAVCAN_SUB_*` in the parameter reference (such as [UAVCAN_SUB_ASPD](../advanced_config/parameter_reference.md#UAVCAN_SUB_ASPD), [UAVCAN_SUB_BARO](../advanced_config/parameter_reference.md#UAVCAN_SUB_BARO) etc.). ## Конфігурування CANNode Ark diff --git a/docs/uk/dronecan/ark_g5_rtk_gps.md b/docs/uk/dronecan/ark_g5_rtk_gps.md index 60bd410a64..5eba7e8cdc 100644 --- a/docs/uk/dronecan/ark_g5_rtk_gps.md +++ b/docs/uk/dronecan/ark_g5_rtk_gps.md @@ -97,7 +97,7 @@ There is also CAN built-in bus termination via [CANNODE_TERM](../advanced_config You need to set necessary [DroneCAN](index.md) parameters and define offsets if the sensor is not centred within the vehicle: - Enable [UAVCAN_SUB_GPS](../advanced_config/parameter_reference.md#UAVCAN_SUB_GPS), [UAVCAN_SUB_MAG](../advanced_config/parameter_reference.md#UAVCAN_SUB_MAG), and [UAVCAN_SUB_BARO](../advanced_config/parameter_reference.md#UAVCAN_SUB_BARO). -- The parameters [EKF2_GPS_POS_X](../advanced_config/parameter_reference.md#EKF2_GPS_POS_X), [EKF2_GPS_POS_Y](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Y) and [EKF2_GPS_POS_Z](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Z) can be set to account for the offset of the ARK G5 RTK GPS from the vehicle's centre of gravity. +- The parameters [SENS_GPS0_OFFX](../advanced_config/parameter_reference.md#SENS_GPS0_OFFX), [SENS_GPS0_OFFY](../advanced_config/parameter_reference.md#SENS_GPS0_OFFY) and [SENS_GPS0_OFFZ](../advanced_config/parameter_reference.md#SENS_GPS0_OFFZ) can be set to account for the offset of the ARK G5 RTK GPS from the vehicle's centre of gravity. ## Значення LED індикаторів diff --git a/docs/uk/dronecan/ark_g5_rtk_heading_gps.md b/docs/uk/dronecan/ark_g5_rtk_heading_gps.md index 80e1d471e6..899a3ecd82 100644 --- a/docs/uk/dronecan/ark_g5_rtk_heading_gps.md +++ b/docs/uk/dronecan/ark_g5_rtk_heading_gps.md @@ -99,11 +99,11 @@ You need to set necessary [DroneCAN](index.md) parameters and define offsets if - Enable GPS yaw fusion by setting bit 3 of [EKF2_GPS_CTRL](../advanced_config/parameter_reference.md#EKF2_GPS_CTRL) to true. - Enable GPS blending to ensure the heading is always published by setting [SENS_GPS_MASK](../advanced_config/parameter_reference.md#SENS_GPS_MASK) to 7 (all three bits checked). - Enable [UAVCAN_SUB_GPS](../advanced_config/parameter_reference.md#UAVCAN_SUB_GPS), [UAVCAN_SUB_MAG](../advanced_config/parameter_reference.md#UAVCAN_SUB_MAG), and [UAVCAN_SUB_BARO](../advanced_config/parameter_reference.md#UAVCAN_SUB_BARO). -- The parameters [EKF2_GPS_POS_X](../advanced_config/parameter_reference.md#EKF2_GPS_POS_X), [EKF2_GPS_POS_Y](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Y) and [EKF2_GPS_POS_Z](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Z) can be set to account for the offset of the ARK G5 RTK HEADING GPS from the vehicle's centre of gravity. +- The parameters [SENS_GPS0_OFFX](../advanced_config/parameter_reference.md#SENS_GPS0_OFFX), [SENS_GPS0_OFFY](../advanced_config/parameter_reference.md#SENS_GPS0_OFFY) and [SENS_GPS0_OFFZ](../advanced_config/parameter_reference.md#SENS_GPS0_OFFZ) can be set to account for the offset of the ARK G5 RTK HEADING GPS from the vehicle's centre of gravity. ### Parameter references -This GPS is using ARK's private driver, the prameters below only exist on the firmware we ship the GPS with. You can set these params either in QGC or using the DroneCAN GUI Tool. +This GPS is using ARK's private driver, the parameters below only exist on the firmware we ship the GPS with. You can set these params either in QGC or using the DroneCAN GUI Tool. #### SEP_OFFS_YAW (float) diff --git a/docs/uk/dronecan/ark_gps.md b/docs/uk/dronecan/ark_gps.md index 3283dd252b..18b814a2e3 100644 --- a/docs/uk/dronecan/ark_gps.md +++ b/docs/uk/dronecan/ark_gps.md @@ -91,7 +91,7 @@ DroneCAN configuration in PX4 is explained in more detail in [DroneCAN > Enablin - Enable GPS yaw fusion by setting bit 3 of [EKF2_GPS_CTRL](../advanced_config/parameter_reference.md#EKF2_GPS_CTRL) to true. - Enable [UAVCAN_SUB_GPS](../advanced_config/parameter_reference.md#UAVCAN_SUB_GPS), [UAVCAN_SUB_MAG](../advanced_config/parameter_reference.md#UAVCAN_SUB_MAG), and [UAVCAN_SUB_BARO](../advanced_config/parameter_reference.md#UAVCAN_SUB_BARO). -- The parameters [EKF2_GPS_POS_X](../advanced_config/parameter_reference.md#EKF2_GPS_POS_X), [EKF2_GPS_POS_Y](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Y) and [EKF2_GPS_POS_Z](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Z) can be set to account for the offset of the ARK GPS from the vehicles centre of gravity. +- The parameters [SENS_GPS0_OFFX](../advanced_config/parameter_reference.md#SENS_GPS0_OFFX), [SENS_GPS0_OFFY](../advanced_config/parameter_reference.md#SENS_GPS0_OFFY) and [SENS_GPS0_OFFZ](../advanced_config/parameter_reference.md#SENS_GPS0_OFFZ) can be set to account for the offset of the ARK GPS from the vehicles centre of gravity. ### ARK GPS Configuration diff --git a/docs/uk/dronecan/ark_rtk_gps.md b/docs/uk/dronecan/ark_rtk_gps.md index 7eb7c9b050..1385f628a8 100644 --- a/docs/uk/dronecan/ark_rtk_gps.md +++ b/docs/uk/dronecan/ark_rtk_gps.md @@ -84,8 +84,9 @@ You need to set necessary [DroneCAN](index.md) parameters and define offsets if - Enable GPS yaw fusion by setting bit 3 of [EKF2_GPS_CTRL](../advanced_config/parameter_reference.md#EKF2_GPS_CTRL) to true. - Enable GPS blending to ensure the heading is always published by setting [SENS_GPS_MASK](../advanced_config/parameter_reference.md#SENS_GPS_MASK) to 7 (all three bits checked). +- If using [Moving Baseline & GPS Heading](#setting-up-moving-baseline-gps-heading), set [SENS_GPS_PRIME](../advanced_config/parameter_reference.md#SENS_GPS_PRIME) to the CAN node ID of the _Moving Base_ module. The moving base is preferred because the rover receiver in a moving baseline configuration can experience degraded navigation rate and increased data latency when corrections are intermittent. - Enable [UAVCAN_SUB_GPS](../advanced_config/parameter_reference.md#UAVCAN_SUB_GPS), [UAVCAN_SUB_MAG](../advanced_config/parameter_reference.md#UAVCAN_SUB_MAG), and [UAVCAN_SUB_BARO](../advanced_config/parameter_reference.md#UAVCAN_SUB_BARO). -- The parameters [EKF2_GPS_POS_X](../advanced_config/parameter_reference.md#EKF2_GPS_POS_X), [EKF2_GPS_POS_Y](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Y) and [EKF2_GPS_POS_Z](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Z) can be set to account for the offset of the ARK RTK GPS from the vehicles centre of gravity. +- The parameters [SENS_GPS0_OFFX](../advanced_config/parameter_reference.md#SENS_GPS0_OFFX), [SENS_GPS0_OFFY](../advanced_config/parameter_reference.md#SENS_GPS0_OFFY) and [SENS_GPS0_OFFZ](../advanced_config/parameter_reference.md#SENS_GPS0_OFFZ) can be set to account for the offset of the ARK RTK GPS from the vehicles centre of gravity. ### ARK RTK GPS Configuration @@ -137,6 +138,7 @@ For more information see [Rover and Fixed Base](../dronecan/index.md#rover-and-f - On the _Moving Base_, set the following: - [GPS_UBX_MODE](../advanced_config/parameter_reference.md#GPS_UBX_MODE) to `4`. - [CANNODE_PUB_MBD](../advanced_config/parameter_reference.md#CANNODE_PUB_MBD) to `1`. +- On the _Flight Controller_, set [SENS_GPS_PRIME](../advanced_config/parameter_reference.md#SENS_GPS_PRIME) to the CAN node ID of the _Moving Base_ (see [PX4 Configuration](#px4-configuration)). Налаштування через UART: @@ -155,6 +157,7 @@ For more information see [Rover and Fixed Base](../dronecan/index.md#rover-and-f - [GPS_YAW_OFFSET](../advanced_config/parameter_reference.md#GPS_YAW_OFFSET) to `0` if your _Rover_ is in front of your _Moving Base_, `90` if _Rover_ is right of _Moving Base_, `180` if _Rover_ is behind _Moving Base_, or `270` if _Rover_ is left of _Moving Base_. - On the _Moving Base_, set the following: - [GPS_UBX_MODE](../advanced_config/parameter_reference.md#GPS_UBX_MODE) to `2`. +- On the _Flight Controller_, set [SENS_GPS_PRIME](../advanced_config/parameter_reference.md#SENS_GPS_PRIME) to the CAN node ID of the _Moving Base_ (see [PX4 Configuration](#px4-configuration)). For more information see [Rover and Moving Base](../dronecan/index.md#rover-and-moving-base) in the DroneCAN guide. diff --git a/docs/uk/dronecan/ark_rtk_gps_l1_l2.md b/docs/uk/dronecan/ark_rtk_gps_l1_l2.md index 5d01c4f326..123fceff5c 100644 --- a/docs/uk/dronecan/ark_rtk_gps_l1_l2.md +++ b/docs/uk/dronecan/ark_rtk_gps_l1_l2.md @@ -85,7 +85,7 @@ You need to set necessary [DroneCAN](index.md) parameters and define offsets if - Enable GPS yaw fusion by setting bit 3 of [EKF2_GPS_CTRL](../advanced_config/parameter_reference.md#EKF2_GPS_CTRL) to true. - Enable GPS blending to ensure the heading is always published by setting [SENS_GPS_MASK](../advanced_config/parameter_reference.md#SENS_GPS_MASK) to 7 (all three bits checked). - Enable [UAVCAN_SUB_GPS](../advanced_config/parameter_reference.md#UAVCAN_SUB_GPS), [UAVCAN_SUB_MAG](../advanced_config/parameter_reference.md#UAVCAN_SUB_MAG), and [UAVCAN_SUB_BARO](../advanced_config/parameter_reference.md#UAVCAN_SUB_BARO). -- The parameters [EKF2_GPS_POS_X](../advanced_config/parameter_reference.md#EKF2_GPS_POS_X), [EKF2_GPS_POS_Y](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Y) and [EKF2_GPS_POS_Z](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Z) can be set to account for the offset of the ARK RTK GPS L1 L5 from the vehicles centre of gravity. +- The parameters [SENS_GPS0_OFFX](../advanced_config/parameter_reference.md#SENS_GPS0_OFFX), [SENS_GPS0_OFFY](../advanced_config/parameter_reference.md#SENS_GPS0_OFFY) and [SENS_GPS0_OFFZ](../advanced_config/parameter_reference.md#SENS_GPS0_OFFZ) can be set to account for the offset of the ARK RTK GPS L1 L5 from the vehicles centre of gravity. ### ARK RTK GPS L1 L5 Configuration diff --git a/docs/uk/dronecan/ark_x20_rtk_gps.md b/docs/uk/dronecan/ark_x20_rtk_gps.md index d4d6bf1654..171ea3c317 100644 --- a/docs/uk/dronecan/ark_x20_rtk_gps.md +++ b/docs/uk/dronecan/ark_x20_rtk_gps.md @@ -88,7 +88,7 @@ You need to set necessary [DroneCAN](index.md) parameters and define offsets if - Enable GPS yaw fusion by setting bit 3 of [EKF2_GPS_CTRL](../advanced_config/parameter_reference.md#EKF2_GPS_CTRL) to true. - Enable GPS blending to ensure the heading is always published by setting [SENS_GPS_MASK](../advanced_config/parameter_reference.md#SENS_GPS_MASK) to 7 (all three bits checked). - Enable [UAVCAN_SUB_GPS](../advanced_config/parameter_reference.md#UAVCAN_SUB_GPS), [UAVCAN_SUB_MAG](../advanced_config/parameter_reference.md#UAVCAN_SUB_MAG), and [UAVCAN_SUB_BARO](../advanced_config/parameter_reference.md#UAVCAN_SUB_BARO). -- The parameters [EKF2_GPS_POS_X](../advanced_config/parameter_reference.md#EKF2_GPS_POS_X), [EKF2_GPS_POS_Y](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Y) and [EKF2_GPS_POS_Z](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Z) can be set to account for the offset of the ARK X20 RTK GPS from the vehicles centre of gravity. +- The parameters [SENS_GPS0_OFFX](../advanced_config/parameter_reference.md#SENS_GPS0_OFFX), [SENS_GPS0_OFFY](../advanced_config/parameter_reference.md#SENS_GPS0_OFFY) and [SENS_GPS0_OFFZ](../advanced_config/parameter_reference.md#SENS_GPS0_OFFZ) can be set to account for the offset of the ARK X20 RTK GPS from the vehicles centre of gravity. ### ARK X20 RTK GPS Configuration diff --git a/docs/uk/dronecan/escs.md b/docs/uk/dronecan/escs.md index 9b1d1b748b..d645e95423 100644 --- a/docs/uk/dronecan/escs.md +++ b/docs/uk/dronecan/escs.md @@ -5,7 +5,7 @@ PX4 supports DroneCAN compliant ESCs. ## Supported ESC :::info -[Supported ESCs](../peripherals/esc_motors#supported-esc) in _ESCs & Motors_ may include additional devices that are not listed below. +[Supported ESCs](../peripherals/esc_motors.md#supported-esc) in _ESCs & Motors_ may include additional devices that are not listed below. ::: The following articles have specific hardware/firmware information: diff --git a/docs/uk/dronecan/holybro_h_rtk_zed_f9p_gps.md b/docs/uk/dronecan/holybro_h_rtk_zed_f9p_gps.md index 168238617a..0d9a0715f6 100644 --- a/docs/uk/dronecan/holybro_h_rtk_zed_f9p_gps.md +++ b/docs/uk/dronecan/holybro_h_rtk_zed_f9p_gps.md @@ -86,7 +86,7 @@ DroneCAN configuration in PX4 is explained in more detail in [DroneCAN > Enablin ### Конфігурація позиції датчика -- For the the single Rover the module should be mounted with the included mast. +- For the single Rover the module should be mounted with the included mast. - For the Dual ZED-F9P setup (moving baseline), the DroneCAN modules should be placed at least 30cm apart on the airframe and elevated on a mast also. See the following [mast](https://holybro.com/products/30-antenna-mount?_pos=20&_sid=67b49d76b&_ss=r). - F9P module arrow(s) should be pointing forward with respect to the autopilot orientation. diff --git a/docs/uk/dronecan/holybro_m8n_gps.md b/docs/uk/dronecan/holybro_m8n_gps.md index 19e6bdac22..e2e3ec5551 100644 --- a/docs/uk/dronecan/holybro_m8n_gps.md +++ b/docs/uk/dronecan/holybro_m8n_gps.md @@ -94,4 +94,4 @@ DroneCAN configuration in PX4 is explained in more detail in [DroneCAN > Enablin - Enable GPS yaw fusion by setting bit 3 of [EKF2_GPS_CTRL](../advanced_config/parameter_reference.md#EKF2_GPS_CTRL) to true. - Enable [UAVCAN_SUB_GPS](../advanced_config/parameter_reference.md#UAVCAN_SUB_GPS), [UAVCAN_SUB_MAG](../advanced_config/parameter_reference.md#UAVCAN_SUB_MAG), and [UAVCAN_SUB_BARO](../advanced_config/parameter_reference.md#UAVCAN_SUB_BARO). - Set [CANNODE_TERM](../advanced_config/parameter_reference.md#CANNODE_TERM) to `1` if this is that last node on the CAN bus. -- The parameters [EKF2_GPS_POS_X](../advanced_config/parameter_reference.md#EKF2_GPS_POS_X), [EKF2_GPS_POS_Y](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Y) and [EKF2_GPS_POS_Z](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Z) can be set to account for the offset of the ARK GPS from the vehicles centre of gravity. +- The parameters [SENS_GPS0_OFFX](../advanced_config/parameter_reference.md#SENS_GPS0_OFFX), [SENS_GPS0_OFFY](../advanced_config/parameter_reference.md#SENS_GPS0_OFFY) and [SENS_GPS0_OFFZ](../advanced_config/parameter_reference.md#SENS_GPS0_OFFZ) can be set to account for the offset of the ARK GPS from the vehicles centre of gravity. diff --git a/docs/uk/dronecan/index.md b/docs/uk/dronecan/index.md index 14d8abc6c1..8333583664 100644 --- a/docs/uk/dronecan/index.md +++ b/docs/uk/dronecan/index.md @@ -158,7 +158,7 @@ DroneCAN peripherals connected to PX4 can also be [configured using parameters v By convention, parameters named with the prefix [CANNODE\_](../advanced_config/parameter_reference.md#CANNODE_BITRATE) have prefined meaning, and may be documented in the parameter reference. `CANNODE_` parameters prefixed with `CANNODE_PUB_` and `CANNODE_SUB_` enable the peripheral to publish or subscribe the associated DroneCAN message. These allow DroneCAN peripherals to be configured to only subscribe and publish messages that they actually need (in the same way that PX4 uses the corresponding `UAVCAN_PUB_`/`UAVCAN_SUB_` parameters). -Note that a peripheral might might not use `CANNODE_` parameters, in which case it may have to publish/subscribe to particular messages whether or not they are needed. +Note that a peripheral might not use `CANNODE_` parameters, in which case it may have to publish/subscribe to particular messages whether or not they are needed. Наступні розділи надають додаткові відомості про параметри периферійних пристроїв PX4 та DroneCAN, які використовуються для увімкнення певних функцій. @@ -194,7 +194,7 @@ GPS CANNODE parameter ([set using QGC](#qgc-cannode-parameter-configuration)): Інші параметри PX4: -- If the GPS is not positioned at the vehicle centre of gravity you can account for the offset using [EKF2_GPS_POS_X](../advanced_config/parameter_reference.md#EKF2_GPS_POS_X), [EKF2_GPS_POS_Y](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Y) and [EKF2_GPS_POS_Z](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Z). +- If the GPS is not positioned at the vehicle centre of gravity you can account for the offset using [SENS_GPS0_OFFX](../advanced_config/parameter_reference.md#SENS_GPS0_OFFX), [SENS_GPS0_OFFY](../advanced_config/parameter_reference.md#SENS_GPS0_OFFY) and [SENS_GPS0_OFFZ](../advanced_config/parameter_reference.md#SENS_GPS0_OFFZ). - If the GPS module provides yaw information, you can enable GPS yaw fusion by setting bit 3 of [EKF2_GPS_CTRL](../advanced_config/parameter_reference.md#EKF2_GPS_CTRL) to true. #### RTK-GPS @@ -287,6 +287,14 @@ If the rangefinder is connected via DroneCAN (whether inbuilt or separate), you Select the specific CAN interface(s) used for ESC data output using the [UAVCAN_ESC_IFACE](../advanced_config/parameter_reference.md#UAVCAN_ESC_IFACE) parameter (all that all interfaces are selected by default). Note that DroneCAN ESCs should be on their own dedicated CAN interface(s) because ESC messages can saturate the bus and starve other nodes of bandwidth. +### Lights + +PX4 can control external LEDs on a connected DroneCAN peripheral using the standard DroneCAN [LightsCommand](https://dronecan.github.io/Specification/7._List_of_standard_data_types/#lightscommand) message. +Up to 2 lights acan be controlled. +Each light can independently show [system status colours](../getting_started/led_meanings.md#ui-led), a fixed colour (commonly used for indicating aircraft orientation), or switch between both depending on arm state. + +See [DroneCAN Lights](lights.md) for full configuration details. + ## Налаштування параметрів CANNODE QGC QGroundControl може переглядати та змінювати параметри, що належать до пристроїв CAN, підключених до автопілота, за умови, що пристрої підключені до автопілота до запуску QGC. diff --git a/docs/uk/dronecan/lights.md b/docs/uk/dronecan/lights.md new file mode 100644 index 0000000000..ea80fcb2bb --- /dev/null +++ b/docs/uk/dronecan/lights.md @@ -0,0 +1,61 @@ +# DroneCAN Lights + +PX4 can control external LEDs on a connected DroneCAN peripheral using the standard DroneCAN [LightsCommand](https://dronecan.github.io/Specification/7._List_of_standard_data_types/#lightscommand) message. + +Up to 2 lights are supported. +These can show [system status colours](../getting_started/led_meanings.md#ui-led), a fixed colour (used for indicating aircraft orientation), or switch between both depending on arm state. + +## Пристрої, що підтримуються + +Any DroneCAN peripheral implementing the standard `LightsCommand` message type should work. + +The following have been tested: + +- **Vertiq ESC LED add-ons**: Each ESC exposes two light IDs — one RGB (for status) and one white. + The `light_id` for each is calculated as `esc_index × 3 + BASE_ID`, where `BASE_ID` is 1 for RGB and 2 for white. + See [Vertiq](../peripherals/vertiq.md) for other ESC setup details. + +## Конфігурація PX4 + +1. Set up DroneCAN as described in [DroneCAN](index.md) (`UAVCAN_ENABLE` ≥ 2). +2. Set [UAVCAN_LGT_NUM](../advanced_config/parameter_reference.md#UAVCAN_LGT_NUM) to the number of lights (1 or 2). + Then reboot and reopen the ground station so that parameters for the new instances become visible. +3. Set the `light_id` and [light functions](#light_functions) of each light: + - [UAVCAN_LGT_ID0](../advanced_config/parameter_reference.md#UAVCAN_LGT_ID0) / [UAVCAN_LGT_ID1](../advanced_config/parameter_reference.md#UAVCAN_LGT_ID1): Set to a `light_id` value (as defined by the specific product). + - [UAVCAN_LGT_FN0](../advanced_config/parameter_reference.md#UAVCAN_LGT_FN0) / [UAVCAN_LGT_FN1](../advanced_config/parameter_reference.md#UAVCAN_LGT_FN1): Choose the desired [light function](#light_functions). +4. Set [UAVCAN_LGT_MODE](#UAVCAN_LGT_MODE) to control when fixed "orientation" colours activate. +5. Reboot for changes to take effect. + +### Light Functions {#light_functions} + +The functions of enabled lights are configured using [UAVCAN_LGT_FN0](../advanced_config/parameter_reference.md#UAVCAN_LGT_FN0) and [UAVCAN_LGT_FN1](../advanced_config/parameter_reference.md#UAVCAN_LGT_FN1), respectively. +Each function is represented by a value that defines two behaviours: one when the activation mode is **inactive** and one when it is **active**. + +| Значення | Назва | When mode inactive | When mode active | +| -------- | ------------- | -------------------- | -------------------- | +| 0 | Status/Status | System status colour | System status colour | +| 1 | Off/White | Off | White | +| 2 | Off/Red | Off | Red | +| 3 | Off/Green | Off | Зелений | +| 4 | Status/White | System status colour | White | +| 5 | Status/Red | System status colour | Red | +| 6 | Status/Green | System status colour | Зелений | +| 7 | Status/Off | System status colour | Off | + +Notes: + +- The [system status colours](../getting_started/led_meanings.md#ui-led) is the same LED pattern used by the flight controller's onboard status LED (e.g. red when disarmed, green when armed and ready). +- A fixed colour, commonly used to indicate aircraft orientation. For example it is a common convention to have a red light on the port side, green on starboard, or white to the rear. + These colours do not change with flight controller state. +- For _hybrid_ functions, such as `Status/Red`, the light shows the Status colour while the activation mode is inactive, then switches to the "fixed" light colour once the mode becomes active. + +### Activation Mode (`UAVCAN_LGT_MODE`) {#UAVCAN_LGT_MODE} + +The activation mode parameter ([UAVCAN_LGT_MODE](#UAVCAN_LGT_MODE)) controls when each light switches from its _inactive_ to its _active_ behaviour (configured with the [Light function](#light_functions)): + +| Значення | Значення | +| -------- | --------------------------------------------------------------------------- | +| 0 | Always inactive (lights always show the inactive column) | +| 1 | Active when armed (default) | +| 2 | Active when prearmed or armed | +| 3 | Always active (lights always show the active column) | diff --git a/docs/uk/esc/ark_4in1_esc.md b/docs/uk/esc/ark_4in1_esc.md index 859c121dd5..72567e9d03 100644 --- a/docs/uk/esc/ark_4in1_esc.md +++ b/docs/uk/esc/ark_4in1_esc.md @@ -58,6 +58,18 @@ The ESC comes in variants without connectors that you can solder in place, and a - Open source AM32 firmware - [DIU Blue Framework Listed](https://www.diu.mil/blue-uas/framework) +## Конфігурація PX4 + +The ARK 4IN1 ESC supports DShot 300/600, Bidirectional DShot, and PWM input protocols. + +- **Bidirectional DShot**: Select BDShot300 or BDShot600 in the [Actuator Configuration](../config/actuators.md) to enable eRPM telemetry. +- **[Extended DShot Telemetry (EDT)](https://github.com/bird-sanctuary/extended-dshot-telemetry)**: AM32 firmware supports EDT, which provides temperature, voltage, and current through the BDShot signal. Enable with `DSHOT_BIDIR_EDT=1`. +- **AM32 EEPROM Settings**: Set `DSHOT_ESC_TYPE=1` to enable reading and writing ESC firmware settings via a ground station. + +See [DShot ESCs](../peripherals/dshot.md) for full setup details. + ## Дивіться також - [ARK 4IN1 ESC CONS](https://docs.arkelectron.com/electronic-speed-controller/ark-4in1-esc) (ARK Docs) +- [DShot and Bidirectional DShot](https://brushlesswhoop.com/dshot-and-bidirectional-dshot/) (brushlesswhoop.com - General DShot reference) +- [Extended DShot Telemetry (EDT) Specification](https://github.com/bird-sanctuary/extended-dshot-telemetry) (bird-sanctuary) diff --git a/docs/uk/flight_controller/accton-godwit_ga1.md b/docs/uk/flight_controller/accton-godwit_ga1.md index 5b014c8452..eb564dac95 100644 --- a/docs/uk/flight_controller/accton-godwit_ga1.md +++ b/docs/uk/flight_controller/accton-godwit_ga1.md @@ -5,7 +5,7 @@ PX4 не розробляє цей (або будь-який інший) авт Contact the [manufacturer](https://cubepilot.org/#/home) for hardware support or compliance issues. ::: -The G-A1 is a state-of-the-art flight controller developed derived from the [Pixhawk Autopilot v6X Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-012%20Pixhawk%20Autopilot%20v6X%20Standard.pdf). +The G-A1 is a state-of-the-art flight controller derived from the [Pixhawk Autopilot v6X Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-012%20Pixhawk%20Autopilot%20v6X%20Standard.pdf). It includes an STM32H753 double-precision floating-point FMU processor and an STM32F103 IO coprocessor, multiple IMUs with 6-axis inertial sensors, two pressure/temperature sensors, and a geomagnetic sensor. It also has independent buses and power supplies, and is designed for safety and rich expansion capabilities. @@ -65,7 +65,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo - 92.2 (L) x 51.2 (W) x 28.3 (H) mm - 77.6g (carrier board with IMU) -## Де купити +## Where to Buy {#store} - [Accton-IoT Godwit](https://www.accton-iot.com/godwit/) - [sales@accton-iot.com](sales@accton-iot.com) @@ -115,7 +115,7 @@ PPM receivers should be connected to the PPM interface. And other RC systems can ## GPS/компас -The Godwit G-A1 has a built-in compass +The Godwit G-A1 has a built-in compass. Due to potential interference, the autopilot is usually used with an external I2C compass as part of a GPS/Compass combination. ![G-A1 GPS](../../assets/flight_controller/accton-godwit/ga1/gps.png "G-A1 GPS") diff --git a/docs/uk/flight_controller/airlink.md b/docs/uk/flight_controller/airlink.md index a971101ed2..501d08e9a9 100644 --- a/docs/uk/flight_controller/airlink.md +++ b/docs/uk/flight_controller/airlink.md @@ -26,7 +26,7 @@ AIRLink має два комп'ютери та інтегрований LTE-мо ## Характеристики - **Sensors** - - 3x акселерометри, 3x гіроскопи, 3x магнітометри, 3x датчики тиску + - 3x Accelerometers, 3x Gyroscopes, 3x Magnetometers, 3x Pressure sensors - ГНСС, далекоміри, лідари, оптичний потік, камери - 3x-кратне резервування IMU - Гасіння вібрації @@ -59,7 +59,7 @@ AIRLink має два комп'ютери та інтегрований LTE-мо - Ethernet 10/100/1000 Native Gigabit - WiFi 802.11a/b/g/n/ac, Bluetooth - USB 3.0 Type C - - 2х Video: 4-смугова MIPI CSI (FPV-камера) та 4-смугова MIPI CSI з входом HMDI (камера корисного навантаження) + - 2x Video: 4-Lane MIPI CSI (FPV Camera) and 4-Lane MIPI CSI with HDMI Input (Payload Camera) - **LTE/5G Connectivity Module** - Пропускна здатність до 600 Мбіт/с @@ -71,7 +71,7 @@ AIRLink має два комп'ютери та інтегрований LTE-мо - Антена, 4x4 MIMO - Bands: Worldwide -## Де купити +## Where to Buy {#store} Купуйте в оригінальному магазині Sky-Drones (доставка по всьому світу з обробкою замовлення за 1-2 дні): @@ -92,8 +92,7 @@ AIRLink Enterprise прибуває з усім необхідним для на - 1x FPV камера з CSI кабелем - 1x WiFi антена з роз'ємом MMCX - 2x/4x LTE/5G антена з роз'ємом MMCX -- 1x кабель HDMI на міні HDMI - 1x набір кабелів (7 кабелів для всіх роз'ємів) +- 1x HDMI to mini HDMI cable, 1x set of cables (7 cables for all connectors) [AIRLink Telemetry](https://sky-drones.com/sets/airlink-telemetry-set.html) based on the Microhard LAN/IP-based RF micromodule is available as an add-on and is fully compatible with AIRLink. @@ -332,7 +331,7 @@ RC-вхід конфігурується на виводі SBUS і підклю ## Виводи -AIRLink має 16 ШІМ-виходів. Основні виходи 1-8 і підключені до IO MCU. Виходи AUX 1-8 підключено до FMU. +AIRLink has 16 PWM outputs. Основні виходи 1-8 і підключені до IO MCU. Виходи AUX 1-8 підключено до FMU. | Output | Таймер | Канал | | ------ | -------- | --------- | @@ -356,7 +355,7 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make sky-drones_smartap-airlink ``` diff --git a/docs/uk/flight_controller/ark_fpv.md b/docs/uk/flight_controller/ark_fpv.md index 666cf03b81..74193a722c 100644 --- a/docs/uk/flight_controller/ark_fpv.md +++ b/docs/uk/flight_controller/ark_fpv.md @@ -13,7 +13,7 @@ The USA-built ARK FPV flight controller is based on the [ARKV6X](https://arkelec This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). ::: -## Де купити +## Where To Buy {#store} Order from [Ark Electronics](https://arkelectron.com/product/arkv6x/) (US) @@ -76,7 +76,7 @@ See the documentation [Ark Electronics GitBook](https://arkelectron.gitbook.io/a ## Додаткова інформація -- Weight: 7.5 g g with MicroSD card +- Weight: 7.5 g with MicroSD card - Dimensions: 3.6 x 3.6 x 0.8 cm - USA Built - NDAA compliant - Heater: 1W for warming sensors in extreme cold diff --git a/docs/uk/flight_controller/ark_pab.md b/docs/uk/flight_controller/ark_pab.md index 6f8ec3b480..c9e984735f 100644 --- a/docs/uk/flight_controller/ark_pab.md +++ b/docs/uk/flight_controller/ark_pab.md @@ -11,7 +11,7 @@ The PAB form factor enables the ARK PAB Carrier to be used with any [PAB-compati ![ARKPAB Main Photo](../../assets/flight_controller/arkpab/ark_pab_main.jpg) -### Де купити +### Where To Buy {#store} Order From [Ark Electronics](https://arkelectron.com/product/ark-pixhawk-autopilot-bus-carrier/) (US) @@ -39,7 +39,7 @@ Order From [Ark Electronics](https://arkelectron.com/product/ark-pixhawk-autopil - 6-контактний JST-GH - Подвійні CAN порти - 4-контактний JST-GH -- Потрійні телеметричні порти з контролем потоку +- Triple Telemetry Ports with Flow Control - 6-контактний JST-GH - Вісім ШІМ-виходів - 10-контактний JST-GH diff --git a/docs/uk/flight_controller/ark_pi6x.md b/docs/uk/flight_controller/ark_pi6x.md index 308d78028f..c4795a2b35 100644 --- a/docs/uk/flight_controller/ark_pi6x.md +++ b/docs/uk/flight_controller/ark_pi6x.md @@ -1,10 +1,19 @@ # ARK Pi6X Flow +:::warning +PX4 не розробляє цей (або будь-який інший) автопілот. +Contact the [manufacturer](https://arkelectron.com/contact-us/) for hardware support or compliance issues. +::: + The [ARK Pi6X Flow](https://arkelectron.gitbook.io/ark-documentation/flight-controllers/ark-pi6x-flow) integrates a Raspberry Pi Compute Module 4 (CM4) Carrier, [ARKV6X Flight Controller](../flight_controller/ark_v6x.md), [ARK Flow sensors](../dronecan/ark_flow.md) , [ARK PAB Power Module](../power_module/ark_pab_power_module.md), and a 4-in-1 ESC, all mounted onto one compact board. ![ARK Pi6X Flow Flight Controller](../../assets/flight_controller/ark_pi6x_flow/ark_pi6xflow.jpg) -## Де купити +:::info +This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). +::: + +## Where to Buy {#store} Замовте цей модуль з: diff --git a/docs/uk/flight_controller/ark_v6x.md b/docs/uk/flight_controller/ark_v6x.md index d419de31fe..def83e76f8 100644 --- a/docs/uk/flight_controller/ark_v6x.md +++ b/docs/uk/flight_controller/ark_v6x.md @@ -5,7 +5,7 @@ PX4 не розробляє цей (або будь-який інший) авт Contact the [manufacturer](https://arkelectron.com/contact-us/) for hardware support or compliance issues. ::: -The USA-built [ARKV6X](\(https://arkelectron.gitbook.io/ark-documentation/flight-controllers/arkv6x\)) flight controller is based on the [FMUV6X and Pixhawk Autopilot Bus open source standards](https://github.com/pixhawk/Pixhawk-Standards). +The USA-built [ARKV6X](https://arkelectron.gitbook.io/ark-documentation/flight-controllers/arkv6x) flight controller is based on the [FMUV6X and Pixhawk Autopilot Bus open source standards](https://github.com/pixhawk/Pixhawk-Standards). Завдяки потрійній синхронізації IMU можливе узагальнення даних, голосування та фільтрація. The Pixhawk Autopilot Bus (PAB) form factor enables the ARKV6X to be used on any [PAB-compatible carrier board](../flight_controller/pixhawk_autopilot_bus.md), such as the [ARK Pixhawk Autopilot Bus Carrier](../flight_controller/ark_pab.md). @@ -16,7 +16,7 @@ The Pixhawk Autopilot Bus (PAB) form factor enables the ARKV6X to be used on any This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). ::: -## Де купити +## Where To Buy {#store} Order From [Ark Electronics](https://arkelectron.com/product/arkv6x/) (US) diff --git a/docs/uk/flight_controller/arkpab.md b/docs/uk/flight_controller/arkpab.md index dee03c10b2..e99ee9b8b6 100644 --- a/docs/uk/flight_controller/arkpab.md +++ b/docs/uk/flight_controller/arkpab.md @@ -1 +1,2 @@ + diff --git a/docs/uk/flight_controller/arkv6x.md b/docs/uk/flight_controller/arkv6x.md index f117e5345f..f3812b11af 100644 --- a/docs/uk/flight_controller/arkv6x.md +++ b/docs/uk/flight_controller/arkv6x.md @@ -1 +1,2 @@ + diff --git a/docs/uk/flight_controller/auav_x2.md b/docs/uk/flight_controller/auav_x2.md index f78d257f6e..89f35a4ec1 100644 --- a/docs/uk/flight_controller/auav_x2.md +++ b/docs/uk/flight_controller/auav_x2.md @@ -1,92 +1,8 @@ -# Автопілот AUAV-X2 (припинено) + - + diff --git a/docs/uk/flight_controller/autopilot_discontinued.md b/docs/uk/flight_controller/autopilot_discontinued.md index d41c68b30a..c9bd88c6f0 100644 --- a/docs/uk/flight_controller/autopilot_discontinued.md +++ b/docs/uk/flight_controller/autopilot_discontinued.md @@ -6,26 +6,29 @@ They are listed because you may be using them in an existing drone, and because ## Автопілоти -- [Drotek DroPix](../flight_controller/dropix.md) (FMUv2) -- [Omnibus F4 SD](../flight_controller/omnibus_f4_sd.md) -- [CUAV X7](../flight_controller/cuav_x7.md) -- [CUAV v5](../flight_controller/cuav_v5.md) (Pixhawk FMUv5) -- [CUAV Pixhack v3](../flight_controller/pixhack_v3.md) (FMUv3) -- [Aerotenna OcPoC-Zynq Mini](../flight_controller/ocpoc_zynq.md) -- [Holybro Pixhawk 4 Mini](../flight_controller/pixhawk4_mini.md) (FMUv5) -- [Holybro Kakute F7](../flight_controller/kakutef7.md) -- [Holybro Pixhawk Mini](../flight_controller/pixhawk_mini.md) (FMUv3) -- [Holybro Pixfalcon](../flight_controller/pixfalcon.md) (Pixhawk FMUv2) -- [Holybro Pix32](../flight_controller/holybro_pix32.md) (FMUv2) -- [ModalAI VOXL Flight](../flight_controller/modalai_voxl_flight.md) -- [ModalAI Flight Core v1](../flight_controller/modalai_fc_v1.md) -- [mRobotics-X2.1](../flight_controller/mro_x2.1.md) (FMUv2) -- [mRo AUAV-X2](../flight_controller/auav_x2.md) (Pixhawk FMUv2) -- [NXP FMUK66](../flight_controller/nxp_rddrone_fmuk66.md) (Discontinued) -- [3DR Pixhawk 1](../flight_controller/pixhawk.md) (Pixhawk FMUv2) +- _Drotek DroPix_ (FMUv2) — last published in [PX4 v1.13](https://docs.px4.io/v1.13/en/flight_controller/dropix) +- _Drotek Pixhawk 3 Pro_ (FMUv4pro) — last published in [PX4 v1.15](https://docs.px4.io/v1.15/en/flight_controller/pixhawk3_pro) +- _Omnibus F4 SD_ — last published in [PX4 v1.15](https://docs.px4.io/v1.15/en/flight_controller/omnibus_f4_sd) +- _CUAV X7_ — last published in [PX4 v1.16](https://docs.px4.io/v1.16/en/flight_controller/cuav_x7) +- _CUAV v5_ (Pixhawk FMUv5) — last published in [PX4 v1.16](https://docs.px4.io/v1.16/en/flight_controller/cuav_v5) +- _CUAV Pixhack v3_ (FMUv3) — last published in [PX4 v1.15](https://docs.px4.io/v1.15/en/flight_controller/pixhack_v3) +- _Aerotenna OcPoC-Zynq Mini_ — last published in [PX4v1.11](https://docs.px4.io/v1.11/en/flight_controller/ocpoc_zynq#aerotenna-ocpoc-zynq-mini-flight-controller) +- _Holybro Pixhawk 4 Mini_ (FMUv5) -— last published in [PX4 v1.16](https://docs.px4.io/v1.16/en/flight_controller/pixhawk4_mini) +- _Holybro Kakute F7_ — Marked as discontinued in PX4 v1.15. + Last published in [PX4 v1.17](https://docs.px4.io/v1.17/en/flight_controller/kakutef7). +- _Holybro Pixhawk Mini_ (FMUv3) — last published in [PX4 v1.16](https://docs.px4.io/v1.16/en/flight_controller/pixhawk_mini) +- _Holybro Pixfalcon_ (Pixhawk FMUv2) — last published in [PX4 v1.16](https://docs.px4.io/v1.16/en/flight_controller/pixfalcon) +- _Holybro Pix32_ (FMUv2) — last published in [PX4 v1.16](https://docs.px4.io/v1.16/en/flight_controller/holybro_pix32) +- _ModalAI VOXL Flight_ — last published in [PX4 v1.16](https://docs.px4.io/v1.16/en/flight_controller/modalai_voxl_flight) +- _ModalAI Flight Core v1_ — last published in [PX4 v1.11](https://docs.px4.io/v1.11/en/flight_controller/modalai_fc_v1) +- _mRobotics-X2.1_ (FMUv2) — last published in [PX4 v1.16](https://docs.px4.io/v1.16/en/flight_controller/mro_x2.1) +- _mRo AUAV-X2_ (Pixhawk FMUv2) — last published in [PX4 v1.15](https://docs.px4.io/v1.15/en/flight_controller/auav_x2) +- _NXP RDDRONE-FMUK66 FMU_ — last published in [PX4 v1.15 docs](https://docs.px4.io/v1.15/en/flight_controller/nxp_rddrone_fmuk66) +- _3DR Pixhawk 1_ (Pixhawk FMUv2) — last published in [PX4 v1.15](https://docs.px4.io/v1.15/en/flight_controller/pixhawk) ## Укомплектовані транспортні засоби -- [BetaFPV Beta75X 2S Brushless Whoop](https://docs.px4.io/v1.14/en/complete_vehicles/betafpv_beta75x.html#betafpv-beta75x-2s-brushless-whoop) (circa PX4 v1.14) -- [Intel® Aero RTF Drone](https://docs.px4.io/v1.12/en/complete_vehicles/intel_aero.html) (circa PX4 v1.12) -- [Qualcomm Snapdragon Flight](https://docs.px4.io/v1.11/en/flight_controller/snapdragon_flight.html) (circa PX4 v1.11) +- _Bitcraze Crazyflie 2.0_ — last published in [PX4 v1.15](https://docs.px4.io/v1.15/en/complete_vehicles_mc/crazyflie2) +- _BetaFPV Beta75X 2S Brushless Whoop_ — last published in [PX4 v1.14](https://docs.px4.io/v1.14/en/complete_vehicles/betafpv_beta75x#betafpv-beta75x-2s-brushless-whoop) +- _Intel® Aero RTF Drone_ — last published in [PX4 v1.12](https://docs.px4.io/v1.12/en/complete_vehicles/intel_aero) +- _Qualcomm Snapdragon Flight_ — last published in [PX4 v1.11](https://docs.px4.io/v1.11/en/flight_controller/snapdragon_flight) diff --git a/docs/uk/flight_controller/autopilot_manufacturer_supported.md b/docs/uk/flight_controller/autopilot_manufacturer_supported.md index 39713343d9..e61718d652 100644 --- a/docs/uk/flight_controller/autopilot_manufacturer_supported.md +++ b/docs/uk/flight_controller/autopilot_manufacturer_supported.md @@ -18,10 +18,12 @@ This category includes boards that are not fully compliant with the pixhawk stan - [ARK Electronics ARKV6X](../flight_controller/ark_v6x.md) (and [ARK Electronics Pixhawk Autopilot Bus Carrier](../flight_controller/ark_pab.md)) - [ARK FPV Flight Controller](../flight_controller/ark_fpv.md) - [ARK Pi6X Flow Flight Controller](../flight_controller/ark_pi6x.md) -- [CUAV Nora](../flight_controller/cuav_nora.md)(CUAV X7 variant) +- [CORVON 743v1](../flight_controller/corvon_743v1.md) +- [CUAV Nora](../flight_controller/cuav_nora.md) (CUAV X7 variant) - [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) - [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) diff --git a/docs/uk/flight_controller/beaglebone_blue.md b/docs/uk/flight_controller/beaglebone_blue.md index ea08e0c827..f5664083dd 100644 --- a/docs/uk/flight_controller/beaglebone_blue.md +++ b/docs/uk/flight_controller/beaglebone_blue.md @@ -4,10 +4,10 @@ :::warning PX4 не розробляє цей (або будь-який інший) автопілот. -Contact the [manufacturer](https://beagleboard.org/blue) for hardware support or compliance issues. +Contact the [manufacturer](https://www.beagleboard.org/boards/beaglebone-blue) for hardware support or compliance issues. ::: -[BeagleBone Blue](https://beagleboard.org/blue) is an all-in-one Linux-based computer. +[BeagleBone Blue](https://www.beagleboard.org/boards/beaglebone-blue) is an all-in-one Linux-based computer. Хоча ця компактна і недорога плата оптимізована для робототехніки, вона має всі необхідні датчики і периферійні пристрої, необхідні для керування польотом. This topic shows how to set up the board to run PX4 with [librobotcontrol](https://github.com/beagleboard/librobotcontrol) robotics package. @@ -17,7 +17,7 @@ This topic shows how to set up the board to run PX4 with [librobotcontrol](https _BeagleBone Blue_ images can be found here: -- [Latest stable OS image](https://beagleboard.org/latest-images). +- [Latest stable OS image](https://www.beagleboard.org/distros). - [Test OS images](https://rcn-ee.net/rootfs/bb.org/testing/) (updated frequently). Information about flashing OS images can be found on [this page](https://github.com/beagleboard/beaglebone-blue/wiki/Flashing-firmware). @@ -79,7 +79,7 @@ echo "PermitRootLogin yes" >> /etc/ssh/sshd_config && systemctl restart sshd For _rsync_ over SSH with key authentication, follow the steps here (on the development machine): 1. Створіть ключ SSH, якщо ви раніше цього не робили: - ``` + ```sh ssh-keygen -t rsa ``` @@ -89,13 +89,13 @@ echo "PermitRootLogin yes" >> /etc/ssh/sshd_config && systemctl restart sshd 2. Define the BeagleBone Blue board as `beaglebone` in **/etc/hosts** and copy the public SSH key to the board for password-less SSH access: - ``` + ```sh ssh-copy-id debian@beaglebone ``` 3. Крім того, ви можете використовувати IP-адресу beaglebone безпосередньо: - ``` + ```sh ssh-copy-id debian@ ``` @@ -116,7 +116,7 @@ echo "PermitRootLogin yes" >> /etc/ssh/sshd_config && systemctl restart sshd The ARM Cross Compiler for _BeagleBone Blue_ can be found at [Linaro Toolchain Binaries site](https://www.linaro.org/downloads/#gnu_and_llvm). - :::tip + ::: tip GCC in the toolchain should be compatible with kernel in _BeagleBone Blue_. General rule of thumb is to choose a toolchain where version of GCC is not higher than version of GCC which comes with the OS image on _BeagleBone Blue_. @@ -131,7 +131,7 @@ echo "PermitRootLogin yes" >> /etc/ssh/sshd_config && systemctl restart sshd tar -xf gcc-linaro-13.0.0-2022.06-x86_64_arm-linux-gnueabihf.tar.xz ``` - :::tip + ::: tip The GCC version of the toolchain should be compatible with kernel in _BeagleBone Blue_. ::: @@ -151,7 +151,7 @@ echo "PermitRootLogin yes" >> /etc/ssh/sshd_config && systemctl restart sshd 3. Налаштуйте інші залежності, завантаживши вихідний код PX4, а потім виконайте сценарії налаштування: - ```` + ````sh git clone https://github.com/PX4/PX4-Autopilot.git --recursive ols ``` @@ -170,7 +170,7 @@ echo "PermitRootLogin yes" >> /etc/ssh/sshd_config && systemctl restart sshd Компіляція та завантаження -``` +```sh make beaglebone_blue_default upload ``` @@ -189,9 +189,7 @@ sudo ./bin/px4 -s px4.config Currently _librobotcontrol_ requires root access. ::: - - -## Нативні збірки (необов'язково) +## Native Builds (optional) {#native_builds} Ви також можете нативно створювати збірки PX4 безпосередньо на BeagleBone Blue. @@ -216,7 +214,7 @@ Currently _librobotcontrol_ requires root access. ## Зміни в конфігурації -Усі зміни можна вносити безпосередньо в файл налаштувань px4.config на beaglebone. +All changes can be made in the px4.config file directly on beaglebone. Наприклад, ви можете змінити WIFI на wlan. :::info @@ -295,8 +293,6 @@ UARTs на BeagleBone Blue можуть працювати лише з неін 1. Підключіть ESC двигуна 1, 2, 3 та 4 до каналу 1, 2, 3 та 4 вихідних сигналів сервоприводів на BeagleBone Blue відповідно. Якщо ваш роз'єм ESC містить вихідний контакт живлення, вийміть його і не підключайте його до вихідного контакту живлення каналу сервоприводу на BeagleBone Blue. - 2. Connect the above mentioned converted SBUS signal to the dsm2 port if you have the matching connector for dsm2, otherwise connect it to any other available UART port and change the corresponding port in **/home/debian/px4/px4.config** accordingly. - 3. Підключіть сигнали модуля GPS до порту GPS на платі BeagleBone Blue. Зверніть увагу, що сигнальні контакти порту GPS на BeagleBone Blue підтримують лише 3,3 В, тому обирайте свій GPS-модуль відповідно. diff --git a/docs/uk/flight_controller/corvon_743v1.md b/docs/uk/flight_controller/corvon_743v1.md new file mode 100644 index 0000000000..455589c0c2 --- /dev/null +++ b/docs/uk/flight_controller/corvon_743v1.md @@ -0,0 +1,112 @@ +# CORVON 743v1 + + + +:::warning +PX4 не розробляє цей (або будь-який інший) автопілот. Contact the manufacturer for hardware support or compliance issues. +::: + +The _CORVON 743v1_ is a flight controller designed by Feikong Technology Co., Ltd under the CORVON brand. +It features a powerful STM32H743 processor, dual high-performance IMUs (BMI088/BMI270), and an extensive array of interfaces. + +With its highly integrated 36x36mm footprint and 9g weight, and specialized interfaces like a direct plug-and-play DJI O3 Air Unit connector, this flight controller is optimized for space-constrained FPV builds and agile multirotors that require top-tier processing power and sensor redundancy. + +The board uses [Pixhawk Autopilot Standard Connections](https://docs.px4.io/main/en/flight_controller/autopilot_pixhawk_standard.html). + + + +:::info +This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). +::: + +## Основні характеристики + +- **MCU:** STM32H743VIT6 MCU (32 Bit Arm® Cortex®-M7, 480MHz, 2MB Flash, 1MB RAM) +- **IMU:** Bosch BMI088, BMI270 (Dual IMU redundancy) +- **Barometer:** DPS310 +- **Magnetometer:** IST8310 +- **OSD:** Onboard AT7456E +- **Interfaces:** + - 7x UARTs + - 1x CAN (UAVCAN) + - 1x I2C + - Dedicated RC Input (UART6) + - 10x PWM outputs (DShot & Bi-Directional DShot supported) + - Dedicated DJI O3 Air Unit connector +- **Power:** + - 9V 3A BEC + - 5V 3A BEC + - ADC for battery voltage (up to 6S) and current monitoring + +## Де купити + +Order from [CORVON](https://corvon.tech). + +## Physical / Mechanical + +- **Mounting:** 30.5 x 30.5mm, Φ4mm +- **Dimensions:** 36 x 36 x 8 mm +- **Weight:** 9g + +## Характеристики + +### Processors & Sensors + +- **FMU Processor:** STM32H743 + - 32 Bit Arm® Cortex®-M7, 480MHz + - 2MB Flash, 1MB RAM +- **On-board Sensors:** + - Accel/Gyro: Bosch BMI088, BMI270 + - Barometer: DPS310 + - Compass: IST8310 + +### Power Configuration + +The board has an internal voltage sensor and connections on the ESC connector for an external current sensor. + +- The voltage sensor handles up to 6S LiPo batteries. +- Two onboard BECs provide robust peripheral power (9V 3A and 5V 3A). + +## Connectors & Pinouts + +The following image shows the port connection details, including RC, UARTs, CAN, I2C, SWD Debug, and VTX connections. + + + +### Standard Serial Port Mapping + +| UART | PX4 Target Config | Default Usage | +| ------ | ----------------- | ------------- | +| USART1 | TELEM1 | MAVLink | +| UART4 | TELEM2 | MAVLink | +| USART2 | GPS1 | GPS | +| USART3 | TELEM3 | | +| UART8 | URT6 | | +| USART6 | RC | RC-вхід | +| UART7 | TELEM4 | ESC Telemetry | + +### Відладочний порт + +The board features a **4-pin SWD Debug** interface located on the right side of the board. This includes `SWCLK`, `SWDIO`, `3V3`, and `GND` for full hardware debugging. While a dedicated UART isn't strictly reserved for the NSH console by default, the full-speed USB connection provides MAVLink Console access out of the box. + +### RC-вхід + +RC Input is mapped to **UART6** via the explicit `SBUS/CRSF` connector block. + +- It fully supports PX4's standard `RC_INPUT` module protocols. +- The connector exposes both `RX6` and `TX6`, which makes it fully capable of bidirectional receiver protocols such as TBS Crossfire (CRSF), ELRS, and FPort, as well as traditional single-wire standards like SBUS (which operates inverted on RX6). + +## Building/Loading Firmware + +:::tip +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 from source: + +```sh +make corvon_743v1_default +``` + +Initial firmware flashing can be done over USB via QGroundControl. The bootloader status aligns with standard generic PX4 LED indications (Red = Bootloader/Error, Blue = Active/Activity, Green = Powered). diff --git a/docs/uk/flight_controller/cuav_nora.md b/docs/uk/flight_controller/cuav_nora.md index c30f7f1e32..722715c49c 100644 --- a/docs/uk/flight_controller/cuav_nora.md +++ b/docs/uk/flight_controller/cuav_nora.md @@ -5,7 +5,7 @@ PX4 не розробляє цей (або будь-який інший) авт Contact the [manufacturer](https://www.cuav.net) for hardware support or compliance issues. ::: -The [Nora](https://doc.cuav.net/flight-controller/x7/en/nora.html)® flight controller is a high-performance autopilot. +The [Nora](https://doc.cuav.net/controller/x7/en/nora-plus.html)® flight controller is a high-performance autopilot. Це ідеальний вибір для промислових дронів і великомасштабних важких дронів. В основному постачається комерційним виробникам. @@ -31,7 +31,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo - Високопродуктивний процесор :::tip -The manufacturer [CUAV Docs](https://doc.cuav.net/flight-controller/x7/en/nora.html) are the canonical reference for Nora. +The manufacturer [CUAV Docs](https://doc.cuav.net/controller/x7/en/nora-plus.html) are the canonical reference for Nora. Вони повинні використовуватися за перевагою, оскільки вони містять найбільш повну та актуальну інформацію. ::: @@ -76,14 +76,14 @@ When it runs PX4 firmware, only 8 PWM outputs work. Решта 6 ШІМ-портів все ще адаптуються (тому на момент написання статті вони не сумісні з VOLT). ::: -## Де купити +## Where to Buy {#store} - [CUAV Store](https://store.cuav.net)<\br> - [CUAV Aliexpress](https://www.aliexpress.com/item/4001042501927.html?gps-id=8041884&scm=1007.14677.110221.0&scm_id=1007.14677.110221.0&scm-url=1007.14677.110221.0&pvid=3dc0a3ba-fa82-43d2-b0b3-6280e4329cef&spm=a2g0o.store_home.promoteRecommendProducts_7913969.58) ## З'єднання (Проводка) -[CUAV nora Wiring Quickstart](https://doc.cuav.net/flight-controller/x7/en/quick-start/quick-start-nora.html) +[CUAV nora Wiring Quickstart](https://doc.cuav.net/controller/x7/en/quick-start/quick-start-nora.html) ## Розмір та роз'єми @@ -120,7 +120,7 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make cuav_nora_default ``` @@ -171,6 +171,6 @@ The complete set of supported configurations can be seen in the [Airframes Refer ## Подальша інформація -- [Quick start](https://doc.cuav.net/flight-controller/x7/en/quick-start/quick-start-nora.html) +- [Quick start](https://doc.cuav.net/controller/x7/en/quick-start/quick-start-nora.html) - [CUAV docs](https://doc.cuav.net/) - [nora schematic](https://github.com/cuav/hardware/tree/master/X7_Autopilot) diff --git a/docs/uk/flight_controller/cuav_pixhawk_v6x.md b/docs/uk/flight_controller/cuav_pixhawk_v6x.md index aed38cb87f..2109c252d6 100644 --- a/docs/uk/flight_controller/cuav_pixhawk_v6x.md +++ b/docs/uk/flight_controller/cuav_pixhawk_v6x.md @@ -61,7 +61,7 @@ Pixhawk® V6X ідеально підходить для корпоративн - 16 PWM виводів сервоприводів - 1 Виділений R/C вхід для Spektrum / DSM та S.Bus з аналоговим / PWM RSSI входом - 3 TELEM-порти (з повним контролем потоку) -- 1 UART4(Seial та I2C) +- 1 UART4(Serial and I2C) - 2 порти GPS - 1 повноцінний порт GPS плюс порт перемикача безпеки (GPS1) - 1 базовий GPS-порт (з I2C, GPS2) @@ -104,7 +104,7 @@ Pixhawk® V6X ідеально підходить для корпоративн ![Pixhawk V6X](../../assets/flight_controller/cuav_pixhawk_v6x/core.png) -## Де купити +## Where to Buy {#store} Order from [CUAV](https://store.cuav.net/). @@ -116,7 +116,7 @@ The [Pixhawk V6X Wiring Quick Start](../assembly/quick_start_cuav_pixhawk_v6x.md ![Pixhawk V6x Pinout](../../assets/flight_controller/cuav_pixhawk_v6x/pixhawk_v6x_pinouts.png) -Примітки: +Notes: - The [camera capture pin](../camera/fc_connected_camera.md#camera-capture-configuration) (`PI0`) is pin 2 on the AD&IO port, marked above as `FMU_CAP1`. @@ -173,13 +173,11 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make px4_fmu-v6x_default ``` - - -## Відладочний порт +## Debug Port {#debug_port} The [PX4 System Console](../debug/system_console.md) and [SWD interface](../debug/swd_debug.md) run on the **FMU Debug** port. diff --git a/docs/uk/flight_controller/cuav_v5.md b/docs/uk/flight_controller/cuav_v5.md index e6e58bd1d6..ed3719fbc0 100644 --- a/docs/uk/flight_controller/cuav_v5.md +++ b/docs/uk/flight_controller/cuav_v5.md @@ -1,149 +1,7 @@ -# CUAV v5 (Знято з виробництва) + - + - -## Периферійні пристрої - -- [Цифровий датчик швидкості польоту](https://item.taobao.com/item.htm?spm=a1z10.3-c-s.w4002-16371268452.37.6d9f48afsFgGZI\&id=9512463037) -- [Телеметричні радіо модулі](https://cuav.taobao.com/category-158480951.htm?spm=2013.1.w5002-16371268426.4.410b7a821qYbBq\&search=y\&catName=%CA%FD%B4%AB%B5%E7%CC%A8) -- [Rangefinders/Distance sensors](../sensor/rangefinders.md) - -## Підтримувані платформи / Конструкції - -Будь-який мультикоптер / літак / наземна платформа / човен, який може керуватися звичайними RC сервоприводами або сервоприводами Futaba S-Bus. -The complete set of supported configurations can be seen in the [Airframes Reference](../airframes/airframe_reference.md). - -## Подальша інформація - -- [FMUv5 reference design pinout](https://docs.google.com/spreadsheets/d/1-n0__BYDedQrc_2NHqBenG1DNepAgnHpSGglke-QQwY/edit#gid=912976165). -- [CUAV Github](https://github.com/cuav) +DOC REMOVED: 202603 +--> diff --git a/docs/uk/flight_controller/cuav_v5_nano.md b/docs/uk/flight_controller/cuav_v5_nano.md index 441092a68c..457b084eb0 100644 --- a/docs/uk/flight_controller/cuav_v5_nano.md +++ b/docs/uk/flight_controller/cuav_v5_nano.md @@ -60,7 +60,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo - Інші характеристики: - Робоча температура: -20 ~ 85°С (виміряне значення) -## Де купити +## Where to Buy {#store} [CUAV Store](https://store.cuav.net/shop/v5-nano/) @@ -91,13 +91,11 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make px4_fmu-v5_default ``` - - -## Відладочний порт +## Debug Port {#debug_port} The [PX4 System Console](../debug/system_console.md) and [SWD interface](../debug/swd_debug.md) operate on the **FMU Debug** port (`DSU7`). Плата не має інтерфейсу відладки вводу/виводу. diff --git a/docs/uk/flight_controller/cuav_v5_plus.md b/docs/uk/flight_controller/cuav_v5_plus.md index d710b6ae36..208278d370 100644 --- a/docs/uk/flight_controller/cuav_v5_plus.md +++ b/docs/uk/flight_controller/cuav_v5_plus.md @@ -63,7 +63,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo - Інші характеристики: - Робоча температура: -20 ~ 80°c (виміряне значення) -## Де купити +## Where to Buy {#store} [CUAV Aliexpress](https://www.aliexpress.com/item/32890380056.html?spm=a2g0o.detail.1000060.1.7a7233e7mLTlVl&gps-id=pcDetailBottomMoreThisSeller&scm=1007.13339.90158.0&scm_id=1007.13339.90158.0&scm-url=1007.13339.90158.0&pvid=d899bfab-a7ca-46e1-adf2-72ad1d649822) (International users) @@ -119,7 +119,7 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make px4_fmu-v5_default ``` @@ -210,7 +210,7 @@ The UAVCAN [NEO V2 PRO GNSS receiver](https://doc.cuav.net/gps/neo-series-gnss/e `DSU7` FMU Debug Pin 1 is 5 volts - not the 3.3 volts of the CPU. -Some JTAG use this voltage to set the IO levels when communicating to the target. +Some JTAG adapters use this voltage to set the IO levels when communicating to the target. For direct connection to _Segger Jlink_ we recommended you use the 3.3 Volts of DSM/SBUS/RSSI pin 4 as Pin 1 on the debug connector (`Vtref`). diff --git a/docs/uk/flight_controller/cuav_x25-evo.md b/docs/uk/flight_controller/cuav_x25-evo.md index 5b1a2efd3b..d73404dc56 100644 --- a/docs/uk/flight_controller/cuav_x25-evo.md +++ b/docs/uk/flight_controller/cuav_x25-evo.md @@ -9,7 +9,7 @@ The _X25-EVO_ is an advanced autopilot manufactured by CUAV®. The autopilot is recommended for commercial system integration but is also suitable for academic research and any other applications. -![X25-EVO AutoPilot - hero image](../../assets/flight_controller/cuav_x25-evo/X25-EVO.jpg) +![X25-EVO AutoPilot - hero image](../../assets/flight_controller/cuav_x25-evo/x25_evo.jpg) The X25-EVO brings you ultimate performance, stability, and reliability in every aspect. @@ -19,12 +19,17 @@ These flight controllers are [manufacturer supported](../flight_controller/autop ### Функції -- 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 - Магнітометр: 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 ### Інтерфейси - 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,19 +88,24 @@ These flight controllers are [manufacturer supported](../flight_controller/autop ### Механічні дані -- Not provided. +- Вага + - Flight Controller Module: 110g +- Operating & storage temperature: -20 ~ 85°C +- Dimensions: -## Purchase Channels + ![CUAV X25 EVO](../../assets/flight_controller/cuav_x25-evo/x25_evo_size.png) + +## Purchase Channels {#store} Order from [CUAV](https://store.cuav.net/). ## Зборка/інсталяція -- Not provided. +The [X25 EVO Wiring Quick Start](../assembly/quick_start_cuav_x25_evo.md) provides instructions on how to assemble required/important peripherals including GPS, Power Module etc. -## Pin Definitions +## Схема розташування виводів -- Not provided. +![CUAV X25 EVO Pinout](../../assets/flight_controller/cuav_x25-evo/x25_evo_pinouts.jpg) ## Налаштування послідовного порту @@ -106,12 +116,34 @@ Order from [CUAV](https://store.cuav.net/). | USART3 | /dev/ttyS2 | 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. + ## Номінальна напруга -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. @@ -135,13 +167,11 @@ It is pre-built and installed automatically by _QGroundControl_ when the appropr To [build PX4](../dev_setup/building_px4.md) for this target, execute: -``` +```sh make cuav_x25-evo_default ``` - - -## Відладочний порт +## Debug Port {#debug_port} The [PX4 System Console](../debug/system_console.md) and [SWD Interface](../debug/swd_debug.md) operate on the **FMU Debug** port. @@ -156,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). ## Подальша інформація diff --git a/docs/uk/flight_controller/cuav_x25-super.md b/docs/uk/flight_controller/cuav_x25-super.md new file mode 100644 index 0000000000..dbbf043186 --- /dev/null +++ b/docs/uk/flight_controller/cuav_x25-super.md @@ -0,0 +1,178 @@ +# CUAV X25-SUPER + + + +:::warning +PX4 не розробляє цей (або будь-який інший) автопілот. +Contact the [manufacturer](https://store.cuav.net/) for hardware support or compliance issues. +::: + +The _X25-SUPER_ is an advanced autopilot manufactured by CUAV®. + +The autopilot is recommended for commercial system integration but is also suitable for academic research and any other applications. + +![X25-SUPER AutoPilot - hero image](../../assets/flight_controller/cuav_x25-super/x25-super.png) + +The X25-SUPER brings you ultimate performance, stability, and reliability in every aspect. + +:::info +These flight controllers are [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). +::: + +### Функції + +- 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. +- PWM servo output voltage switchable between 3.3V or 5V. +- Modular design for DIY carrier boards. + +### Processors & Sensors + +- Main Processor: STM32H743XI + - 32-bit Arm® Cortex®-M7, 480MHz, 2MB Flash, 1MB RAM +- Onboard Sensors: + - Accel/Gyro: SCH16T + - Accel/Gyro: IIM42652 + - Accel/Gyro: IIM42653 + - Магнітометр: RM3100 + - Barometer: BMP581 + - Barometer: ICP-20100 + +### Електричні дані + +- Rated Voltage: + - Input Voltage: 10~18V + - Вхід USB Power: 4.75~5.25V + - 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 + - Other Ports Output Current limiter: 1.5A + +### Інтерфейси + +- 16x PWM Servo Outputs +- 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 +- 2x GPS Ports + - 1x Full GPS plus Safety Switch Port (GPS1) + - 1x Basic GPS Port (with I2C, GPS2) +- 1x USB Port (TYPE-C) +- 1x Ethernet Port + - Transformerless application + - 100Mbps +- 3x I2C Bus Ports +- 1x SPI Bus + - 1x Chip Select Line + - 1x Data Ready Line + - 1x SPI Reset Line +- 5x CAN Ports for CAN Peripherals + - 3x CAN1 Bus Multiplexed Ports + - 2x CAN2 Bus Multiplexed Ports +- 2x Power Input Ports + - DroneCAN/UAVCAN Power Input +- 2x AD Ports + - Analog Input (3.3V) + - Analog Input (6.6V - not supported by PX4) +- 1x Dedicated Debug Port + - FMU Debug + +### Механічні дані + +- Dimensions: + + ![CUAV X25-SUPER](../../assets/flight_controller/cuav_x25-super/x25-super_size.png) + +## Purchase Channels {#store} + +Order from [CUAV](https://store.cuav.net/). + +## Зборка/інсталяція + +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. + +## Схема розташування виводів + +![CUAV X25-SUPER Pinout_01](../../assets/flight_controller/cuav_x25-super/x25-super_pinouts_01.png) +![CUAV X25-SUPER Pinout_02](../../assets/flight_controller/cuav_x25-super/x25-super_pinouts_02.png) + +## Налаштування послідовного порту + +| UART | Пристрій | Порт | +| ------ | ---------- | ------------- | +| USART1 | /dev/ttyS0 | GPS1 | +| USART2 | /dev/ttyS1 | GPS2 | +| USART3 | /dev/ttyS2 | Debug Console | +| UART4 | /dev/ttyS3 | UART4 | +| UART5 | /dev/ttyS4 | TELEM2 | +| USART6 | /dev/ttyS5 | RC IN | +| UART7 | /dev/ttyS6 | TELEM1 | + +## RC-вхід + +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`. + +- **POWER C1** and **POWER C2** are DroneCAN/UAVCAN battery interfaces. + +**Normal Operation Maximum Ratings** + +Under these conditions, all power sources will be used to power the system in the following order: + +1. **POWER C1** and **POWER C2** Inputs (10V to 18V) +2. USB Input (4.75V to 5.25V) + +**Voltage monitoring** + +Digital DroneCAN/UAVCAN battery monitoring is enabled by default. + +## Збірка прошивки + +:::tip +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 +``` + +## Debug Port {#debug_port} + +The [PX4 System Console](../debug/system_console.md) and [SWD Interface](../debug/swd_debug.md) operate on the **FMU Debug** port. + +| Pin | Сигнал | Вольтаж | +| -------------------------- | --------------------------------- | --------------------- | +| 1 (red) | 5V+ | +5V | +| 2 (blk) | DEBUG TX (OUT) | +3.3V | +| 3 (blk) | DEBUG RX (IN) | +3.3V | +| 4 (blk) | FMU_SWDIO | +3.3V | +| 5 (blk) | FMU_SWCLK | +3.3V | +| 6 (blk) | GND | GND | + +## Підтримувані платформи / Конструкції + +Будь-який мультикоптер / літак / наземна платформа / човен, який може керуватися звичайними RC сервоприводами або сервоприводами Futaba S-Bus. +The complete set of supported configurations can be seen in the [Airframes Reference](../airframes/airframe_reference.md). + +## Подальша інформація + +- [CUAV Docs](https://doc.cuav.net/) diff --git a/docs/uk/flight_controller/cuav_x7.md b/docs/uk/flight_controller/cuav_x7.md index 570e9e5b09..8eb0b07db3 100644 --- a/docs/uk/flight_controller/cuav_x7.md +++ b/docs/uk/flight_controller/cuav_x7.md @@ -1,186 +1,7 @@ + + + - -:::warning -This flight controller has been [discontinued](../flight_controller/autopilot_experimental.md) and is no longer commercially available. -It has been superseded by the [CUAV X7+](https://doc.cuav.net/controller/x7/en/). -::: - -:::warning -PX4 не розробляє цей (або будь-який інший) автопілот. -Contact the [manufacturer](https://www.cuav.net) for hardware support or compliance issues. -::: - -The [X7](https://doc.cuav.net/controller/x7/en/)® flight controller is a high-performance autopilot. -Це ідеальний вибір для промислових дронів і великомасштабних важких дронів. -В основному постачається комерційним виробникам. - -![CUAV x7](../../assets/flight_controller/cuav_x7/x7.jpg) - -Контролер польоту використовує модульний дизайн і може бути поєднаний з різними базовими платами. -Ви можете розробити спеціалізовану плату-носій для вашого БПЛА, щоб покращити інтеграцію комерційних систем, зменшити кількість проводів, підвищити надійність системи та підвищити конкурентоспроможність вашого БПЛА (наприклад, інтегруючи датчики швидкості повітря, телеметрію або навіть супутниковий комп'ютер на платі-носії). -CUAV також надає вам на вибір різноманітні несучі плати. - -:::info -This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). -::: - -## Функції - -- Внутрішнє поглинання ударів -- Модульна конструкція, може бути саморобною несучою платою -- Підтримка USB_HS, швидше завантаження журналів (PX4 ще не підтримується) -- Підтримка більшої кількості виходів DShot -- Підтримка нагріву IMU, покращення роботи датчика -- Виділений порт для акумулятора CAN -- 3 комплекти датчиків IMU -- Автомобільний компас RM3100 -- Високопродуктивний процесор - -:::tip -The manufacturer [CUAV Docs](https://doc.cuav.net/flight-controller/x7/en/) are the canonical reference for the X7. -Вони повинні використовуватися за перевагою, оскільки вони містять найбільш повну та актуальну інформацію. -::: - -## Короткий опис - -- Головний FMU процесор: STM32H743 - -- Бортові сенсори: - - Акселерометр/Гіроскоп: ICM-20689 - - Прискорювач/гіроскоп: ICM-20649 - - Акселерометр/Гіроскоп: BMI088 - - Магнітометр: RM3100 - - Барометр: MS5611\*2 - -- Інтерфейси: - - 14 ШІМ-виходів (12 підтримує Dshot) - - Підтримка декількох входів RC (SBU / CPPM / DSM) - - Аналоговий / PWM вхід RSSI - - 2 GPS порти (GPS і UART4 порти) - - 4 шини i2c (два виділені порти i2c) - - 2 порти CAN шини - - 2 порти живлення (Power A - загальний інтерфейс адаптера, Power C - інтерфейс акумулятора DroneCAN) - - 2 входи АЦП - - 1 USB порт - -- Система живлення: - - Живлення: 4.3~5.4В - - Вхід USB: 4.75~5.25В - - Вхід сервоприводу: 0~36V - -- Вага та розміри: - - Вага: 101 g - -- Інші характеристики: - - Робоча температура: -20 ~ 80°c (виміряне значення) - - Три імуси - - Підтримка компенсації температури - - Внутрішнє поглинання ударів - -:::info -When it runs PX4 firmware, only 8 pwm works, the remaining 6 pwm are still being adapted, so it is not compatible with VOLT now. -::: - -## Де купити - -[CUAV Store](https://store.cuav.net) - -[CUAV aliexpress](https://www.aliexpress.com/item/4001042683738.html?spm=a2g0o.detail.1000060.2.1ebb2a9d3WDryi&gps-id=pcDetailBottomMoreThisSeller&scm=1007.13339.169870.0&scm_id=1007.13339.169870.0&scm-url=1007.13339.169870.0&pvid=f0df2481-1c0a-44eb-92a4-9c11c6cb3d06&_t=gps-id:pcDetailBottomMoreThisSeller,scm-url:1007.13339.169870.0,pvid:f0df2481-1c0a-44eb-92a4-9c11c6cb3d06,tpp_buckets:668%230%23131923%2320_668%23808%234094%23518_668%23888%233325%2319_668%234328%2319934%23630_668%232846%238115%23807_668%232717%237566%23827_668%231000022185%231000066058%230_668%233468%2315607%2376) - -## З'єднання (Проводка) - -[CUAV X7 Wiring Quickstart](https://doc.cuav.net/controller/x7/en/quick-start/quick-start-x7-plus.html) - -## Розмір та роз'єми - -![CUAV x7](../../assets/flight_controller/cuav_x7/x7-size.jpg) - -![X7 pinouts](../../assets/flight_controller/cuav_x7/x7-pinouts.jpg) - -:::warning -The `RCIN` port is limited to powering the RC receiver and cannot be connected to any power/load. -::: - -## Номінальна напруга - -The _X7 AutoPilot_ can be triple-redundant on the power supply if three power sources are supplied. -The power rails are: **POWERA**, **POWERC** and **USB**. - -:::info -The output power rails **PWM OUT** (0V to 36V) do not power the flight controller board (and are not powered by it). -You must supply power to one of **POWERA**, **POWERC** or **USB** or the board will be unpowered. -::: - -**Normal Operation Maximum Ratings** - -За таких умов всі джерела живлення будуть використовуватися в цьому порядку для живлення системи: - -1. **POWERA** and **POWERC** inputs (4.3V to 5.4V) -2. **USB** input (4.75V to 5.25V) - -## Збірка прошивки - -:::tip -Most users will not need to build this firmware! -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: - -``` -make cuav_x7pro_default -``` - -## Захист від перенапруги - -The _X7_ has over-current protection on the 5 Volt Peripheral and 5 Volt high power, which limits the current to 2.5A. -The _X7_ has short circuit protection. - -:::warning -Up to 2.5 A can be delivered to the connectors listed as pin 1 (although these are only rated at 1 A). -::: - -## Відладочний порт - -The system's serial console and SWD interface operate on the **DSU7** port. -Просто підключіть кабель FTDI до роз'єму DSU7 (у списку продуктів є кабель CUAV FTDI). - -![Debug port (DSU7)](../../assets/flight_controller/cuav_v5_plus/debug_port_dsu7.jpg) - -The [PX4 System Console](../debug/system_console.md) and [SWD interface](../debug/swd_debug.md) operate on the **FMU Debug** port (`DSU7`). - -The debug port (`DSU7`) uses a [JST BM06B](https://www.digikey.com.au/en/products/detail/jst-sales-america-inc/BM06B-GHS-TBT-LF-SN-N/807850) connector and has the following pinout: - -| Pin | Сигнал | Вольтаж | -| -------------------------- | --------------------------------- | --------------------- | -| 1 (red) | 5V+ | +5V | -| 2 (blk) | DEBUG TX (OUT) | +3.3V | -| 3 (blk) | DEBUG RX (IN) | +3.3V | -| 4 (blk) | FMU_SWDIO | +3.3V | -| 5 (blk) | FMU_SWCLK | +3.3V | -| 6 (blk) | GND | GND | - -CUAV provides a dedicated debugging cable, which can be connected to the `DSU7` port. -This splits out an FTDI cable for connecting the [PX4 System Console](../debug/system_console.md) to a computer USB port, and SWD pins used for SWD/JTAG debugging. -The provided debug cable does not connect to the SWD port `Vref` pin (1). - -![CUAV Debug cable](../../assets/flight_controller/cuav_v5_plus/cuav_v5_debug_cable.jpg) - -:::warning -The SWD Vref pin (1) uses 5V as Vref but the CPU is run at 3.3V! - -Деякі JTAG-адаптери (SEGGER J-Link) використовують напругу Vref для встановлення напруги на лініях SWD. -For direct connection to _Segger Jlink_ we recommended you use the 3.3 Volts from pin 4 of the connector marked `DSM`/`SBUS`/`RSSI` to provide `Vtref` to the JTAG (i.e. providing 3.3V and _NOT_ 5V). -::: - -## Підтримувані платформи / Конструкції - -Any multicopter / plane / 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). - -## Подальша інформація - -- [CUAV docs](https://doc.cuav.net/) -- [x7 schematic](https://github.com/cuav/hardware/tree/master/X7_Autopilot) +DOC REMOVED: 202603 +--> diff --git a/docs/uk/flight_controller/cubepilot_cube_orange.md b/docs/uk/flight_controller/cubepilot_cube_orange.md index c57b5ceda3..c540779960 100644 --- a/docs/uk/flight_controller/cubepilot_cube_orange.md +++ b/docs/uk/flight_controller/cubepilot_cube_orange.md @@ -10,7 +10,7 @@ The [Cube Orange](https://www.cubepilot.com/#/cube/features) flight controller i ![Cube Orange](../../assets/flight_controller/cube/orange/cube_orange_hero.jpg) Контролер призначений для використання зі специфічною для домену несучою платою, щоб зменшити кількість дротів, підвищити надійність і спростити збірку. -Наприклад, несуча плата для комерційного інспекційного апарату може містити з'єднання для комп'ютера-компаньйона, тоді як несуча плата для пілота може містити ESC для рами транспортного засобу. +For example, a carrier board for a commercial inspection vehicle might include connections for a companion computer, while a carrier board for a racer could include ESCs for the frame of the vehicle. Несуча плата ADS-B включає налаштований приймач ADSB-In на 1090 МГц від uAvionix. Це забезпечує позиціонування і розташування комерційних пілотованих літаків в межах досяжності Cube. @@ -22,6 +22,10 @@ Cube має віброізоляцію на двох IMU, з третім фік The manufacturer [Cube User Guide](https://docs.cubepilot.org/user-guides/autopilot/the-cube) contains detailed information, including an overview of the [Differences between Cube Colours](https://docs.cubepilot.org/user-guides/autopilot/the-cube/introduction/specifications). ::: +:::info +This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). +::: + ## Основні характеристики - 32bit STM32H753VI (32bit [ARM Cortex M7](https://en.wikipedia.org/wiki/ARM_Cortex-M#Cortex-M7), 400 MHz, Flash 2MB, RAM 1MB). @@ -36,9 +40,7 @@ The manufacturer [Cube User Guide](https://docs.cubepilot.org/user-guides/autopi - Потужний багатотональний п'єзозвуковий індикатор - Карта microSD для високошвидкісної фіксації даних протягом тривалого періоду часу - - -## Де купити +## Where to Buy {#store} - [Reseller list](https://www.cubepilot.com/#/reseller/list) @@ -232,7 +234,7 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target, open up the terminal and enter: -``` +```sh make cubepilot_cubeorange ``` diff --git a/docs/uk/flight_controller/cubepilot_cube_orangeplus.md b/docs/uk/flight_controller/cubepilot_cube_orangeplus.md index 1b155e1a2f..4e14b1bf9b 100644 --- a/docs/uk/flight_controller/cubepilot_cube_orangeplus.md +++ b/docs/uk/flight_controller/cubepilot_cube_orangeplus.md @@ -6,12 +6,12 @@ Contact the [manufacturer](https://cubepilot.org/#/home) for hardware support or ::: The [Cube Orange+](https://www.cubepilot.com/#/cube/features) flight controller is a flexible autopilot intended primarily for manufacturers of commercial systems. -Cube Orange+ схожий з Cube Orange, але має потужніший двоядерний процесор (STM32H757 та деякі інші сенсори. +Cube Orange+ is similar to Cube Orange, but has a more powerful dual-core processor (STM32H757), and some different sensor parts. ![Cube Orange](../../assets/flight_controller/cube/orangeplus/cubepilot_cube_orangeplus_standard_set.jpg) Контролер призначений для використання зі специфічною для домену несучою платою, щоб зменшити кількість дротів, підвищити надійність і спростити збірку. -Наприклад, несуча плата для комерційного інспекційного апарату може містити з'єднання для комп'ютера-компаньйона, тоді як несуча плата для пілота може містити ESC для рами транспортного засобу. +For example, a carrier board for a commercial inspection vehicle might include connections for a companion computer, while a carrier board for a racer could include ESCs for the frame of the vehicle. Несуча плата ADS-B включає налаштований приймач ADSB-In на 1090 МГц від uAvionix. Це забезпечує позиціонування і розташування комерційних пілотованих літаків в межах досяжності Cube. @@ -23,6 +23,10 @@ Cube має віброізоляцію на двох IMU, з третім фік The manufacturer [Cube User Guide](https://docs.cubepilot.org/user-guides/autopilot/the-cube) contains detailed information, including an overview of the [Differences between Cube Colours](https://docs.cubepilot.org/user-guides/autopilot/the-cube/introduction/specifications). ::: +:::info +This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). +::: + ## Основні характеристики - 32bit STM32H757ZI (32bit [ARM Cortex M7](https://en.wikipedia.org/wiki/ARM_Cortex-M#Cortex-M7), 400 MHz, Flash 2MB, RAM 1MB). @@ -37,9 +41,7 @@ The manufacturer [Cube User Guide](https://docs.cubepilot.org/user-guides/autopi - Потужний багатотональний п'єзозвуковий індикатор - Карта microSD для високошвидкісної фіксації даних протягом тривалого періоду часу - - -## Де купити +## Where to Buy {#store} - [Reseller list](https://www.cubepilot.com/#/reseller/list) @@ -232,7 +234,7 @@ The firmware for Orange+ will be present in releases from PX4 v1.14. To [build PX4](../dev_setup/building_px4.md) for this target, open up the terminal and enter: -``` +```sh make cubepilot_cubeorangeplus ``` diff --git a/docs/uk/flight_controller/cubepilot_cube_yellow.md b/docs/uk/flight_controller/cubepilot_cube_yellow.md index 70e36a2a7e..e7701dd42c 100644 --- a/docs/uk/flight_controller/cubepilot_cube_yellow.md +++ b/docs/uk/flight_controller/cubepilot_cube_yellow.md @@ -10,7 +10,7 @@ Contact the [manufacturer](https://cubepilot.org/#/home) for hardware support or ![Cube Yellow](../../assets/flight_controller/cube/yellow/cube_yellow_hero.jpg) Контролер призначений для використання зі специфічною для домену несучою платою, щоб зменшити кількість дротів, підвищити надійність і спростити збірку. -Наприклад, несуча плата для комерційного інспекційного апарату може містити з'єднання для комп'ютера-компаньйона, тоді як несуча плата для пілота може містити ESC для рами транспортного засобу. +For example, a carrier board for a commercial inspection vehicle might include connections for a companion computer, while a carrier board for a racer could include ESCs for the frame of the vehicle. Cube має віброізоляцію на двох IMU, з третім фіксованим IMU в якості еталонного/резервного. @@ -18,6 +18,10 @@ Cube має віброізоляцію на двох IMU, з третім фік The manufacturer [Cube User Guide](https://docs.cubepilot.org/user-guides/autopilot/the-cube) contains detailed information, including an overview of the [Differences between Cube Colours](https://docs.cubepilot.org/user-guides/autopilot/the-cube/introduction/specifications). ::: +:::info +This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). +::: + ## Основні характеристики - 32bit STM32F777VI (32bit [ARM Cortex M7](https://en.wikipedia.org/wiki/ARM_Cortex-M#Cortex-M7), 400 MHz, Flash 2MB, RAM 512 KB). @@ -32,9 +36,7 @@ The manufacturer [Cube User Guide](https://docs.cubepilot.org/user-guides/autopi - Потужний багатотональний п'єзозвуковий індикатор - Карта microSD для високошвидкісної фіксації даних протягом тривалого періоду часу - - -## Де купити +## Where to Buy {#store} - [Reseller list](https://www.cubepilot.com/#/reseller/list) @@ -47,7 +49,7 @@ The manufacturer [Cube User Guide](https://docs.cubepilot.org/user-guides/autopi - **Processor:** - STM32F777VI (32bit [ARM Cortex M7](https://en.wikipedia.org/wiki/ARM_Cortex-M#Cortex-M7)) - 400 МГц - - 512 KB MB RAM + - 512 KB RAM - 2 MB Flash - **Failsafe co-processor:** - STM32F100 (32bit _ARM Cortex-M3_) @@ -130,7 +132,7 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make cubepilot_cubeyellow ``` diff --git a/docs/uk/flight_controller/dropix.md b/docs/uk/flight_controller/dropix.md deleted file mode 100644 index bf91420ab1..0000000000 --- a/docs/uk/flight_controller/dropix.md +++ /dev/null @@ -1,7 +0,0 @@ -# DroPix Польотний контролер (Призупинено) - - - -The Drotek® _DroPix autopilot_ is no longer available on the Drotek website, and is assumed to be discontinued. - -See [PX4 v1.13 Documentation > DroPix Flight Controller](https://docs.px4.io/v1.13/en/flight_controller/dropix.html) for documentation. diff --git a/docs/uk/flight_controller/durandal.md b/docs/uk/flight_controller/durandal.md index 0ed9d55d4d..71c5a70a09 100644 --- a/docs/uk/flight_controller/durandal.md +++ b/docs/uk/flight_controller/durandal.md @@ -19,7 +19,7 @@ _Durandal_® is the latest update to the successful family of Holy - Внутрішня система ізоляції вібрації. - На платі є два високопродуктивних, малошумних ІМП (інерціальних вимірювачів кутової швидкості), призначених для вимогливих застосувань стабілізації. -A summary of the key features, [assembly](../assembly/quick_start_durandal.md), and [purchase](#purchase) links can be found below. +A summary of the key features, [assembly](../assembly/quick_start_durandal.md), and [purchase](#store) links can be found below. :::info This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). @@ -86,9 +86,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo For more information see: [Durandal Technical Data Sheet](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Durandal_technical_data_sheet_90f8875d-8035-4632-a936-a0d178062077.pdf). - - -## Де купити +## Where to Buy {#store} Order from [Holybro](https://holybro.com/products/durandal). @@ -162,7 +160,7 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make holybro_durandal-v1_default ``` diff --git a/docs/uk/flight_controller/gearup_airbrainh743.md b/docs/uk/flight_controller/gearup_airbrainh743.md index deb6f6feb6..01c136e08e 100644 --- a/docs/uk/flight_controller/gearup_airbrainh743.md +++ b/docs/uk/flight_controller/gearup_airbrainh743.md @@ -74,7 +74,7 @@ Download the [gearup_airbrainh743_bootloader.bin](https://github.com/PX4/PX4-Aut To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make gearup_airbrainh743_default ``` @@ -84,13 +84,25 @@ Firmware can be installed in any of the normal ways: - Збудуйте та завантажте джерело: - ``` + ```sh make gearup_airbrainh743_default upload ``` - [Load the firmware](../config/firmware.md) using _QGroundControl_. Ви можете використовувати або готове вбудоване програмне забезпечення, або власне користувацьке програмне забезпечення. +### Flash Storage Troubleshooting + +The AirBrainH743 uses a 128MB NAND flash (W25N) with a littlefs filesystem for [logging](../dev_log/logging.md). +If the flash filesystem becomes corrupted, you can reformat it using the [System Console](../debug/system_console.md): + +```sh +mklittlefs /dev/mtd0 /fs/flash +``` + +This will erase all data on the flash and create a fresh littlefs filesystem. +The filesystem is immediately available after the command completes. + ### Системна консоль UART1 (ttyS0) is configured for use as the [System Console](../debug/system_console.md). diff --git a/docs/uk/flight_controller/holybro_pix32.md b/docs/uk/flight_controller/holybro_pix32.md index 9a1c7791b5..7ef63fc2af 100644 --- a/docs/uk/flight_controller/holybro_pix32.md +++ b/docs/uk/flight_controller/holybro_pix32.md @@ -1,106 +1,8 @@ -# Контролер польоту Holybro pix32 (знято з виробництва) + - + +--> diff --git a/docs/uk/flight_controller/holybro_pix32_v5.md b/docs/uk/flight_controller/holybro_pix32_v5.md index a6f7ff909c..ff3b5db2cf 100644 --- a/docs/uk/flight_controller/holybro_pix32_v5.md +++ b/docs/uk/flight_controller/holybro_pix32_v5.md @@ -71,7 +71,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo Additional information can be found in the [Pix32 V5 Technical Data Sheet](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_PIX32-V5_technical_data_sheet_v1.1.pdf). -## Де купити +## Where to Buy {#store} Order from [Holybro website](https://holybro.com/products/pix32-v5). @@ -125,7 +125,7 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh зробіть holybro_durandal-v1_default ``` diff --git a/docs/uk/flight_controller/holybro_pix32_v6.md b/docs/uk/flight_controller/holybro_pix32_v6.md index 1e6791c930..d5fd9855a4 100644 --- a/docs/uk/flight_controller/holybro_pix32_v6.md +++ b/docs/uk/flight_controller/holybro_pix32_v6.md @@ -12,7 +12,7 @@ _Pix32 v6_® is the latest update to the pix32 v5 flight controlle @@ -93,7 +93,7 @@ Pix32 v6’s H7 MCU містить ядро Arm® Cortex®-M7 до 480 MHz, ма - Інші характеристики: - Operating & storage temperature: -40 ~ 85°c -## Де купити +## Where to Buy {#store} Order from [Holybro](https://holybro.com/products/pix32-v6). @@ -156,13 +156,11 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make px4_fmu-v6c_default ``` - - -## Відладочний порт +## Debug Port {#debug_port} The [PX4 System Console](../debug/system_console.md) and [SWD interface](../debug/swd_debug.md) run on the **FMU Debug** port. diff --git a/docs/uk/flight_controller/kakutef7.md b/docs/uk/flight_controller/kakutef7.md index 297334c9ca..72e2f77c50 100644 --- a/docs/uk/flight_controller/kakutef7.md +++ b/docs/uk/flight_controller/kakutef7.md @@ -1,142 +1,7 @@ -# Holybro Kakute F7 (Знято з виробництва) + - + - -## Відладочний порт - -### Системна консоль - -UART3 RX and TX are configured for use as the [System Console](../debug/system_console.md). - -### SWD - -The [SWD interface](../debug/swd_debug.md) (JTAG) pins are: - -- `SWCLK`: Test Point 2 (Pin 72 on the CPU) -- `SWDIO`: Test Point 3 (Pin 76 on CPU) -- `GND`: As marked on board -- `VDD_3V3`: As marked on board - -Ці показані нижче. - -![SWD Pins on Kakute F7 - CLK SWO](../../assets/flight_controller/kakutef7/debug_swd_port.jpg) ![SWD Pins on Kakute F7: GND and VDD_3V3](../../assets/flight_controller/kakutef7/debug_swd_port_gnd_vcc3_3.jpg) +DOC REMOVED: 202603 +--> diff --git a/docs/uk/flight_controller/kakuteh7-wing.md b/docs/uk/flight_controller/kakuteh7-wing.md index bea7e564f5..5919b0a50e 100644 --- a/docs/uk/flight_controller/kakuteh7-wing.md +++ b/docs/uk/flight_controller/kakuteh7-wing.md @@ -13,7 +13,7 @@ The [Holybro Kakute H743 Wing](https://holybro.com/products/kakute-h743-wing) is This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). ::: -## Де купити +## Where to Buy {#store} Плату можна придбати в одному з наступних магазинів (наприклад): @@ -43,7 +43,7 @@ Download the [holybro_kakuteh7-wing.hex](https://github.com/PX4/PX4-Autopilot/ra To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make holybro_kakuteh7-wing_default ``` @@ -58,7 +58,7 @@ KakuteH7-wing is supported in PX4 v1.16 or newer. - Збудуйте та завантажте джерело: - ``` + ```sh make holybro_kakuteh7-wing_default upload ``` diff --git a/docs/uk/flight_controller/kakuteh7.md b/docs/uk/flight_controller/kakuteh7.md index e9b2811f25..ffc8b461ae 100644 --- a/docs/uk/flight_controller/kakuteh7.md +++ b/docs/uk/flight_controller/kakuteh7.md @@ -36,7 +36,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo - Розміри: 35 x 35мм - Вага: 8г -## Де купити +## Where to Buy {#store} Плату можна придбати в одному з наступних магазинів (наприклад): @@ -102,7 +102,7 @@ make holybro_kakuteh7_default Ви можете використовувати або готове вбудоване програмне забезпечення, або власне користувацьке програмне забезпечення. :::info -Якщо ви завантажуєте готове програмне забезпечення через QGroundcontrol, вам необхідно використовувати щоденну версію QGC або версію QGC новішу за 4.1.7. +If you are loading the pre-built firmware via QGroundControl, you must use QGC Daily or QGC version newer than 4.1.7. ::: ## Конфігурація PX4 diff --git a/docs/uk/flight_controller/kakuteh7mini.md b/docs/uk/flight_controller/kakuteh7mini.md index d336df822f..d777c8b31b 100644 --- a/docs/uk/flight_controller/kakuteh7mini.md +++ b/docs/uk/flight_controller/kakuteh7mini.md @@ -40,7 +40,7 @@ PX4 runs on the H7 mini v1.3 and later. - Розміри: 30x31x6мм - Вага: 5.5г -## Де купити +## Where to Buy {#store} Плату можна придбати в одному з наступних магазинів (наприклад): @@ -86,14 +86,14 @@ Download the [holybro_kakuteh7mini_bootloader.hex](https://github.com/PX4/PX4-Au To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make holybro_kakuteh7mini_default ``` ## Встановлення прошивки PX4 :::info -Якщо ви завантажуєте готове програмне забезпечення через QGroundcontrol, вам необхідно використовувати щоденну версію QGC або версію QGC новішу за 4.1.7. +If you are loading the pre-built firmware via QGroundControl, you must use QGC Daily or QGC version newer than 4.1.7. До випуску вам потрібно буде вручну зібрати та встановити прошивку. ::: @@ -101,7 +101,7 @@ make holybro_kakuteh7mini_default - Збудуйте та завантажте джерело: - ``` + ```sh make holybro_kakuteh7mini_default upload ``` diff --git a/docs/uk/flight_controller/kakuteh7v2.md b/docs/uk/flight_controller/kakuteh7v2.md index a1b3eb6246..a828c1984e 100644 --- a/docs/uk/flight_controller/kakuteh7v2.md +++ b/docs/uk/flight_controller/kakuteh7v2.md @@ -36,7 +36,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo - Розміри: 35 x 35мм - Вага: 8г -## Де купити +## Where to Buy {#store} Плату можна придбати в одному з наступних магазинів (наприклад): @@ -83,14 +83,14 @@ Download the [holybro_kakuteh7v2_bootloader.hex](https://github.com/PX4/PX4-Auto To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make holybro_kakuteh7v2_default ``` ## Встановлення прошивки PX4 :::info -KakuteH7v2 is supported with PX4 master & PX4 v1.14 or newer. Якщо ви завантажуєте готове програмне забезпечення через QGroundcontrol, вам необхідно використовувати щоденну версію QGC або версію QGC новішу за 4.1.7. +KakuteH7v2 is supported with PX4 master & PX4 v1.14 or newer. If you are loading the pre-built firmware via QGroundControl, you must use QGC Daily or QGC version newer than 4.1.7. До випуску вам потрібно буде вручну зібрати та встановити прошивку. ::: @@ -98,7 +98,7 @@ KakuteH7v2 is supported with PX4 master & PX4 v1.14 or newer. Якщо ви за - Збудуйте та завантажте джерело: - ``` + ```sh make holybro_kakuteh7v2_default upload ``` diff --git a/docs/uk/flight_controller/micoair743-lite.md b/docs/uk/flight_controller/micoair743-lite.md index d98d3a1d30..66f4399f55 100644 --- a/docs/uk/flight_controller/micoair743-lite.md +++ b/docs/uk/flight_controller/micoair743-lite.md @@ -12,7 +12,7 @@ MicoAir743-Lite is an ultra-high performance H743 flight controller with an unbe ![MicoAir743-Lite Front View](../../assets/flight_controller/micoair743_lite/front_view.png) Equipped with a high-performance H7 processor, the MicoAir743-Lite features a compact form factor with SH1.0 connectors (which are more suitable than Pixhawk-standard GH1.25 for this board size). -When paired with with Bluetooth telemetry, the board can be debugged with a phone or PC. +When paired with Bluetooth telemetry, the board can be debugged with a phone or PC. :::info This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). @@ -67,7 +67,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo ![MicoAir743-Lite Size](../../assets/flight_controller/micoair743_lite/size.png) -## Де купити +## Where to Buy {#store} Order from [MicoAir Tech Store](https://store.micoair.com/product/micoair743-lite/). @@ -85,12 +85,12 @@ Pinouts definition can be found in the [MicoAir743-Lite_pinout.xlsx](https://raw | UART4 | /dev/ttyS3 | TELEM2 | | UART5 | /dev/ttyS4 | TELEM3 | | USART6 | /dev/ttyS5 | RC | -| UART7 | /dev/ttyS6 | URT6 | +| UART7 | /dev/ttyS6 | UART6 | | UART8 | /dev/ttyS7 | TELEM4 | ## Interfaces Diagram -:::note +:::info All the connectors used on the board are SH1.0 ::: diff --git a/docs/uk/flight_controller/mindpx.md b/docs/uk/flight_controller/mindpx.md index 962f71b45f..b35d9ce37f 100644 --- a/docs/uk/flight_controller/mindpx.md +++ b/docs/uk/flight_controller/mindpx.md @@ -19,7 +19,7 @@ These flight controllers are [manufacturer supported](../flight_controller/autop The main hardware documentation is [here](http://mindpx.net/assets/accessories/Specification9.18_3_pdf.pdf). ::: -MindPX - це нова система автопілотів, що створена з Pixhawk®, переглянута в схематиці та структурі, і вони були ще більше розширені новими можливостями, щоб безпілотний пристрій був "розумнішим" та простшим у користуванні. +MindPX is a new generation autopilot system branched from Pixhawk®, has been revised in schematic and structure, and has been further enhanced with new features to make unmanned vehicle more smart and more friendly to use. MindPX збільшує загальну кількість каналів виведення PWM до 16 (8 основних виводів + 8 допоміжних виводів). Це означає, що MindPX може підтримувати більш складні конфігурації VTOL і кращий контроль. @@ -86,7 +86,7 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make airmind_mindpx-v2_default ``` @@ -96,7 +96,7 @@ MindPX має USB-TO-UART Bridge IC на платі. Кабель micro-USB до USB type A використовується для підключення. Підключіть micro-USB кінець до порту 'OBC' MindPX та USB type A кінець до комп'ютера-компаньйона. -Максимальна швидкість BAUD така ж, як у родини px4, яка становить до 921600. +And the max BAUD rate is the same as for the PX4 family, which is up to 921600. ## Посібник користувача @@ -104,7 +104,7 @@ MindPX має USB-TO-UART Bridge IC на платі. The user guide is [here](http://mindpx.net/assets/accessories/UserGuide9.18_2_pdf.pdf). ::: -## Де купити +## Where to Buy {#store} MindRacer is available at [AirMind Store](https://airmind.mindpx.net/catalog). Ви також можете знайти MindRacer на Amazon® або на eBay®. diff --git a/docs/uk/flight_controller/mindracer.md b/docs/uk/flight_controller/mindracer.md index 59ccc8e7ec..9d6b79bca5 100644 --- a/docs/uk/flight_controller/mindracer.md +++ b/docs/uk/flight_controller/mindracer.md @@ -66,7 +66,7 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make airmind_mindpx-v2_default ``` @@ -79,7 +79,7 @@ MindRacer має приєднану до себе плату Adapt IO. MindRacer має вбудований конвертер UART-to-USB. Для підключення комп'ютера-компаньйона встановіть MindRacer на плату інтерфейсу та підключіть супутній комп'ютер до USB-порту на платі інтерфейсу. -Максимальна швидкість BAUD така ж, як у родини px4, яка становить до 921600. +And the max BAUD rate is the same as for the PX4 family, which is up to 921600. ### Посібник користувача @@ -87,7 +87,7 @@ MindRacer має вбудований конвертер UART-to-USB. The user guide is [here](http://mindpx.net/assets/accessories/mindracer_user_guide_v1.2.pdf) ::: -## Де купити +## Where to Buy {#store} MindRacer is available at [AirMind Store](https://airmind.mindpx.net/catalog). Ви також можете знайти MindRacer на Amazon® або на eBay®. diff --git a/docs/uk/flight_controller/modalai_fc_v1.md b/docs/uk/flight_controller/modalai_fc_v1.md index ce55434ba3..c7729f854a 100644 --- a/docs/uk/flight_controller/modalai_fc_v1.md +++ b/docs/uk/flight_controller/modalai_fc_v1.md @@ -1,146 +1,7 @@ -# ModalAI Flight Core v1 + - + - -[stm32f765ii]: https://www.st.com/en/microcontrollers-microprocessors/stm32f765ii.html -[bmp388]: https://www.adafruit.com/product/3966 -[icm-20602]: https://invensense.tdk.com/products/motion-tracking/6-axis/icm-20602/ -[bmi088]: https://www.bosch-sensortec.com/products/motion-sensors/imus/bmi088/ -[px4]: https://github.com/PX4/PX4-Autopilot/tree/main/boards/modalai/fc-v1 -[a71ch]: https://www.nxp.com/products/security-and-authentication/authentication/plug-and-trust-the-fast-easy-way-to-deploy-secure-iot-connections:A71CH - -## Розміри - -![FlightCoreV1Dimensions](../../assets/flight_controller/modalai/fc_v1/dimensions.png) - -## Сумісність прошивки PX4 - -_Flight Core v1_ is fully compatible with the official PX4 Firmware from PX4 v1.11. - -ModalAI maintains a [branched PX4 version](https://github.com/modalai/px4-firmware/tree/modalai-1.11) for PX4 v1.11. -Це включає підтримку UART ESC та поліпшення в VIO та VOA, які планується включити в основний код. - -More information about the firmware can be found [here](https://docs.modalai.com/flight-core-firmware/). - -## QGroundControl Підтримка - -Ця плата підтримується QGroundControl 4.0 та пізнішими версіями. - -## Доступність - -- No longer available - -## Швидкий Старт - -### Орієнтація - -The diagram below shows the recommended orientation, which corresponds to `ROTATION_NONE` starting with PX4 v1.11. - -![FlightCoreV1Orientation](../../assets/flight_controller/modalai/fc_v1/orientation.png) - -### З’єднання - -Detailed information about the pinouts can be found [here](https://docs.modalai.com/flight-core-datasheet-connectors). - -![FlightCoreV1Top](../../assets/flight_controller/modalai/fc_v1/top.png) - -| З’єднання | Опис | -| --------- | ------------------------------------------------------------------------------- | -| J1 | Роз'єм інтерфейсу зв'язку VOXL (TELEM2) | -| J2 | Програмний та відлагоджувальний роз'єм | -| J3 | USB конектор | -| J4 | UART2, UART ESC (TELEM3) | -| J5 | Конектор телеметрії (TELEM1) | -| J6 | Введенням VOXL-Power Management / розширення | -| J7 | Роз'єм виводу з 8 каналами PWM | -| J8 | Конектор шини CAN | -| J9 | PPM RC In | -| J10 | External GPS & Magnetometer Connector | -| J12 | Вхід RC, Spektrum/SBus/UART конектор | -| J13 | I2C Дисплей (роз'єм запасного датчика) / Вхід кнопки безпеки | - -![FlightCoreV1Bottom](../../assets/flight_controller/modalai/fc_v1/bottom.png) - -### Посібник користувача - -The full user guide is available [here](https://docs.modalai.com/flight-core-manual/). - -### Як зібрати - -To [build PX4](../dev_setup/building_px4.md) for this target: - -``` -make modalai_fc-v1 -``` - -## Налаштування послідовного порту - -| UART | Пристрій | Порт | -| ------ | ---------- | ---------------------------------------------------- | -| USART1 | /dev/ttyS0 | GPS1 (J10) | -| USART2 | /dev/ttyS1 | TELEM3 (J4) | -| USART3 | /dev/ttyS2 | Консоль відлагодження (J2) | -| UART4 | /dev/ttyS3 | Розширення UART (J6) | -| UART5 | /dev/ttyS4 | TELEM2, Основні зв'язки VOXL (J1) | -| USART6 | /dev/ttyS5 | RC (J12) | -| UART7 | /dev/ttyS6 | TELEM1 (J5) | -| UART8 | /dev/ttyS7 | N/A | - - - -## Підтримка - -Please visit the [ModalAI Forum](https://forum.modalai.com/category/10/flight-core) for more information. +DOC REMOVED: 202603 +--> diff --git a/docs/uk/flight_controller/modalai_voxl_2.md b/docs/uk/flight_controller/modalai_voxl_2.md index 0e4743b0d9..133ee9c8d9 100644 --- a/docs/uk/flight_controller/modalai_voxl_2.md +++ b/docs/uk/flight_controller/modalai_voxl_2.md @@ -5,7 +5,7 @@ PX4 не розробляє цей (або будь-який інший) авт Contact the [manufacturer](https://forum.modalai.com/) for hardware support or compliance issues. ::: -The ModalAI [VOXL 2](https://modalai.com/voxl-2) ([Datasheet](https://docs.modalai.com/voxl2-datasheets/)) is ModalAI’s next-gen autonomous computing platform built around the Qualcomm QRB5165 processor. VOXL 2 має 8 ядер, вбудований PX4, сім одночасних камер, бортовий ШІ до 15+ TOPS та підтримку 5G зв'язку. З вагою 16 грамів, VOXL 2 - це майбутнє повністю автономних та підключених дронів! +The ModalAI [VOXL 2](https://www.modalai.com/products/voxl-2) ([Datasheet](https://docs.modalai.com/voxl2-datasheets/)) is ModalAI's next-gen autonomous computing platform built around the Qualcomm QRB5165 processor. VOXL 2 має 8 ядер, вбудований PX4, сім одночасних камер, бортовий ШІ до 15+ TOPS та підтримку 5G зв'язку. З вагою 16 грамів, VOXL 2 - це майбутнє повністю автономних та підключених дронів! ![VOXL-2](../../assets/flight_controller/modalai/voxl_2/voxl-2-hero.jpg) @@ -62,7 +62,7 @@ ModalAI is actively maintaining a [branched PX4 version](https://github.com/moda As VOXL 2 runs Ubuntu, the production releases of PX4 for VOXL 2 are distributed through [apt package management](https://docs.modalai.com/configure-pkg-manager/) and the [VOXL SDK](https://docs.modalai.com/voxl-sdk/). -More information about the firmware can be found [here](https://docs.modalai.com/voxl2-px4-developer-guide/). +More information about the firmware can be found [here](https://docs.modalai.com/voxl-px4/). ### основна гілка @@ -70,7 +70,7 @@ PX4 mainline supports VOXL 2 (board documentation [here](https://github.com/PX4/ ## QGroundControl Підтримка -Ця плата підтримується QGroundControl 4.0 та пізнішими версіями. +This board is supported in QGroundControl 4.0 and later. ## Доступність @@ -78,17 +78,16 @@ PX4 mainline supports VOXL 2 (board documentation [here](https://github.com/PX4/ - [Starling 2 MAX](https://www.modalai.com/products/starling-2-max) - [Sentinel Development Drone powered by VOXL 2](https://www.modalai.com/pages/sentinel) - [Demo Video](https://www.youtube.com/watch?v=hMhQgWPLGXo) -- [VOXL 2 Flight Deck, ready to mount, tune and fly](https://www.modalai.com/collections/ready-to-mount/products/voxl-2-flight-deck) - [VOXL 2 Development Kits](https://www.modalai.com/products/voxl-2) - [Demo Video](https://www.youtube.com/watch?v=aVHBWbwp488) ## Швидкий Старт -Quickstarts from the vendor are located [here](https://docs.modalai.com/voxl2-quickstarts/). +Quickstarts from the vendor are located [here](https://docs.modalai.com/voxl-2-hardware-quickstart/). ### VOXL SDK -VOXL SDK (Software Development Kit) consists of the open source [voxl-px4](https://docs.modalai.com/voxl-px4/), [core libraries](https://docs.modalai.com/core-libs/), [services](https://docs.modalai.com/mpa-services/), [tools](https://docs.modalai.com/inspect-tools/), [utilities](https://docs.modalai.com/sdk-utilities/), and [build environments](https://docs.modalai.com/build-environments/) that ModalAI provide to accelerate the use and development of VOXL compute boards and accessories. +VOXL SDK (Software Development Kit) consists of the open source [voxl-px4](https://docs.modalai.com/voxl-px4/), [core libraries](https://docs.modalai.com/core-libs/), [services](https://docs.modalai.com/mpa-services/), [tools](https://docs.modalai.com/inspect-tools/), and [build environments](https://docs.modalai.com/build-environments/) that ModalAI provide to accelerate the use and development of VOXL compute boards and accessories. VOXL SDK працює на VOXL, VOXL 2 та RB5 Flight! @@ -123,11 +122,11 @@ The PX4 user guide for VOXL 2 is available [here](https://docs.modalai.com/voxl- ### Інструкція розробника -The PX4 developer guide for VOXL 2 is available [here](https://docs.modalai.com/voxl-px4-developer-guide/). +The PX4 developer guide for VOXL 2 is available [here](https://docs.modalai.com/voxl-px4/). ### Як зібрати -See the [VOXL PX4 Build Guide](https://docs.modalai.com/voxl2-px4-build-guide/) on how to build. +See the [VOXL PX4 Build Guide](https://docs.modalai.com/voxl-px4-dev-build-guide/) on how to build. ## Підтримка diff --git a/docs/uk/flight_controller/modalai_voxl_flight.md b/docs/uk/flight_controller/modalai_voxl_flight.md index a864148b16..7f5ee9210d 100644 --- a/docs/uk/flight_controller/modalai_voxl_flight.md +++ b/docs/uk/flight_controller/modalai_voxl_flight.md @@ -1,202 +1,7 @@ -# ModalAI VOXL Flight + - + - -[stm32f765ii]: https://www.st.com/en/microcontrollers-microprocessors/stm32f765ii.html -[px4]: https://github.com/PX4/PX4-Autopilot/tree/main/boards/modalai/fc-v1 -[icm-20602]: https://invensense.tdk.com/products/motion-tracking/6-axis/icm-20602/ -[bmi088]: https://www.bosch-sensortec.com/products/motion-sensors/imus/bmi088/ -[bmp388]: https://www.adafruit.com/product/3966 -[a71ch]: https://www.nxp.com/products/security-and-authentication/authentication/plug-and-trust-the-fast-easy-way-to-deploy-secure-iot-connections:A71CH - -:::info -More detailed hardware documentation can be found [here](https://docs.modalai.com/voxl-flight-datasheet/). -::: - -## Розміри - -![FlightCoreV1Dimensions](../../assets/flight_controller/modalai/voxl_flight/voxl-flight-dimensions.jpg) - -[3D STEP File](https://storage.googleapis.com/modalai_public/modal_drawings/M0019_VOXL-Flight.zip) - -## Сумісність прошивки PX4 - -_VOXL Flight_ is fully compatible with the official PX4 Firmware from PX4 v1.11. - -ModalAI maintains a [branched PX4 version](https://github.com/modalai/px4-firmware/tree/modalai-1.11) for PX4 v1.11. -Це включає підтримку UART ESC та поліпшення в VIO та VOA, які планується включити в основний код. - -More information about the firmware can be found [here](https://docs.modalai.com/flight-core-firmware/). - -## QGroundControl Підтримка - -Ця плата підтримується QGroundControl 4.0 та пізнішими версіями. - -## Доступність - -No longer available. - -## Швидкий Старт - -A quickstart from the vendor is located [here](https://docs.modalai.com/voxl-flight-quickstart/). - -### voxl-vision-px4 - -The VOXL Flight runs [voxl-vision-px4](https://gitlab.com/voxl-public/modal-pipe-architecture/voxl-vision-px4) on the companion computer portion of the hardware serving as a sort of MAVLink proxy. -For details, the source code is available [here](https://gitlab.com/voxl-public/modal-pipe-architecture/voxl-vision-px4) - -### З’єднання - -Detailed information about the pinouts can be found [here](https://docs.modalai.com/voxl-flight-datasheet-connectors/). - -#### Верх - -![VOXLFlightTop](../../assets/flight_controller/modalai/voxl_flight/voxl-flight-top.jpg) - -_Note: 1000 Series connectors accessible from the STM32/PX4_ - -| З’єднання | Опис | Використовується | -| --------- | ---------------------------------------------------------------------- | ---------------------------------------------------- | -| J2 | Датчик зображення 4k (CSI0) високої якості | Snapdragon - Linux | -| J3 | Стерео Датчик Зображення (CSI1) | Snapdragon - Linux | -| J6 | Конектор вентилятора охолодження | Snapdragon - Linux | -| J7 | BLSP6 (GPIO) та BLSP9 (UART) | Snapdragon - Linux | -| J13 | Expansion B2B | Snapdragon - Linux | -| J14 | Підключення вбудованої антени GNSS | Snapdragon - Linux | -| J1001 | Програмний та відлагоджувальний/UART3 | STM32 - PX4 | -| J1002 | UART ESC, UART2/TELEM3 | STM32 - PX4 | -| J1003 | PPM RC In | STM32 - PX4 | -| J1004 | Вхід RC, Spektrum/SBus/UART6 | STM32 - PX4 | -| J1006 | Роз'єм USB 2.0 (PX4/QGroundControl) | STM32 - PX4 | -| J1007 | 8-Канальний вихід PWM/DShot | STM32 - PX4 | -| J1008 | CAN шина | STM32 - PX4 | -| J1009 | I2C3, UART4 | STM32 - PX4 | -| J1010 | Телеметрія (TELEM1) | STM32 - PX4 | -| J1011 | I2C2, кнопка безпеки | STM32 - PX4 | -| J1012 | External GPS & Mag, UART1, I2C1 | STM32 - PX4 | -| J1013 | Вхід живлення, I2C3 | STM32 - PX4 (живить весь систему) | - -#### Низ - -![VOXLFlightBottom](../../assets/flight_controller/modalai/voxl_flight/voxl-flight-bottom.jpg) - -_Note: 1000 Series connectors accessible from the STM32/PX4_ - -| З’єднання | Опис | Використовується | -| -------------- | -------------------------------------------------------------------------- | --------------------------- | -| J4 | Датчик відстеження / оптичного потоку зображення (CSI2) | Snapdragon - Linux | -| J8 | USB 3.0 OTG | Snapdragon - Linux, **adb** | -| J10 | BLSP7 UART та I2C off-board | Snapdragon - Linux | -| J11 | BLSP12 UART та I2C off-board | Snapdragon - Linux | -| VOXL microSD | | Snapdragon - Linux | -| PX4 microSD | 32Gb Max | STM32 - PX4 | -| Wi-Fi Antennas | У комплекті | Snapdragon - Linux | - -### Посібник користувача - -The full user guide is available [here](https://docs.modalai.com/voxl-flight-quickstart). - -### Як зібрати - -To [build PX4](../dev_setup/building_px4.md) for this target: - -``` -make modalai_fc-v1 -``` - -## Налаштування послідовного порту - -_Note: mappings shown are for the PX4 controlled interfaces only_ - -| UART | Пристрій | Порт | -| ------ | ---------- | ------------------------------------------- | -| USART1 | /dev/ttyS0 | GPS1 (J1012) | -| USART2 | /dev/ttyS1 | TELEM3 (J1002) | -| USART3 | /dev/ttyS2 | Консоль відладки (J1001) | -| UART4 | /dev/ttyS3 | Розширення UART (J6) | -| UART5 | /dev/ttyS4 | UART між PX4 та Комп'ютером-компаньйоном | -| USART6 | /dev/ttyS5 | RC (J1004) | -| UART7 | /dev/ttyS6 | TELEM1 (J1010) | -| UART8 | /dev/ttyS7 | N/A | - - - -## Підтримка - -Please visit the [ModalAI Forum](https://forum.modalai.com/category/8/voxl-flight) for more information. +DOC REMOVED: 202603 +--> diff --git a/docs/uk/flight_controller/mro_control_zero_f7.md b/docs/uk/flight_controller/mro_control_zero_f7.md index 1a52fdd1de..a40e387e62 100644 --- a/docs/uk/flight_controller/mro_control_zero_f7.md +++ b/docs/uk/flight_controller/mro_control_zero_f7.md @@ -30,7 +30,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo - [Bosch BMI088](https://www.bosch-sensortec.com/products/motion-sensors/imus/bmi088/) 3-axis accelerometer/gyroscope (internally vibration dampened) - [Invensense ICM-20602](https://invensense.tdk.com/products/motion-tracking/6-axis/icm-20602/) 3-axis accelerometer/gyroscope - [Invensense ICM-20948](https://invensense.tdk.com/products/motion-tracking/9-axis/icm-20948/) 3-axis accelerometer/gyroscope/magnetometer - - [Infineon DPS310 barometer](https://www.infineon.com/assets/row/public/documents/24/49/infineon-dps310-datasheet-en.pdf) - [Discontinued](https://www.infineon.com/part/DPS310) (So smooth and NO more light sensitivity) + - Infineon DPS310 barometer - [Discontinued](https://www.infineon.com/products/sensor/pressure-sensors/pressure-sensors-for-iot) (So smooth and NO more light sensitivity) - Інтерфейси: - 6x UART (загальна кількість послідовних портів), 3x з HW керуванням потоком, 1x FRSky Telemetry (типи D або Х), 1x Консоль та 1x GPS+I2C @@ -56,7 +56,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo - Система живлення: - 3x Низькозатратний лінійний регулятор напруги Ultra Low Noise LDO -## Де купити +## Where to Buy {#store} - [mRo Control Zero](https://store.mrobotics.io/mRo-Control-Zero-F7-p/mro-ctrl-zero-f7.htm) @@ -69,22 +69,22 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make mro_ctrl-zero-f7 ``` -## Відладочні порти +## Debug Ports {#debug_port} ### Порт Консолі The [PX4 System Console](../debug/system_console.md) runs on `USART7` using the pins listed below. This is a standard serial pinout, designed to connect to a [3.3V FTDI](https://www.digikey.com/en/products/detail/TTL-232R-3V3/768-1015-ND/1836393) cable (5V tolerant). -\| mRo control zero f7 | | FTDI | -\| ------------------- | ----------- | ---- | ---------------- | -\| 17 | USART7 Tx | 5 | FTDI RX (yellow) | -\| 19 | USART7 Rx | 4 | FTDI TX (orange) | -\| 6 | USART21 GND | 1 | FTDI GND (black) | +| mRo control zero f7 | | FTDI | | +| ------------------- | ----------- | ---- | ----------------------------------- | +| 17 | USART7 Tx | 5 | FTDI RX (yellow) | +| 19 | USART7 Rx | 4 | FTDI TX (orange) | +| 6 | USART21 GND | 1 | FTDI GND (black) | ### SWD Port diff --git a/docs/uk/flight_controller/mro_pixhawk.md b/docs/uk/flight_controller/mro_pixhawk.md index b1fb6e397d..e4424c9d53 100644 --- a/docs/uk/flight_controller/mro_pixhawk.md +++ b/docs/uk/flight_controller/mro_pixhawk.md @@ -72,17 +72,178 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make px4_fmu-v3_default ``` ## Відладочні порти -See [3DR Pixhawk 1 > Debug Ports](../flight_controller/pixhawk.md#debug-ports) +### Порт Консолі + +The [PX4 System Console](../debug/system_console.md) runs on the port labeled [SERIAL4/5](#serial-4-5-port). + +:::tip +A convenient way to connect to the console is to use a [Zubax BugFace BF1](https://github.com/Zubax/bugface_bf1), as it comes with connectors that can be used with several different Pixhawk devices. +Simply connect the 6-pos DF13 1:1 cable on the [Zubax BugFace BF1](https://github.com/Zubax/bugface_bf1) to the Pixhawk `SERIAL4/5` port. + +![Zubax BugFace BF1](../../assets/flight_controller/mro/dronecode_probe.jpg) +::: + +The pinout is standard serial pinout, designed to connect to a [3.3V FTDI](https://www.digikey.com/en/products/detail/TTL-232R-3V3/768-1015-ND/1836393) cable (5V tolerant). + +| 3DR Pixhawk 1 | | FTDI | | +| ------------- | ---------------------------- | ---- | ----------------------------------- | +| 1 | +5V (red) | | N/C | +| 2 | S4 Tx | | N/C | +| 3 | S4 Rx | | N/C | +| 4 | S5 Tx | 5 | FTDI RX (yellow) | +| 5 | S5 Rx | 4 | FTDI TX (orange) | +| 6 | GND | 1 | FTDI GND (black) | + +The wiring for an FTDI cable to a 6-pos DF13 1:1 connector is shown in the figure below. + +![Console Connector](../../assets/flight_controller/mro/console_connector.jpg) + +The complete wiring is shown below. + +![Console Debug](../../assets/flight_controller/mro/console_debug.jpg) + +:::info +For information on how to _use_ the console see: [System Console](../debug/system_console.md). +::: + +### SWD Port + +The [SWD](../debug/swd_debug.md) (JTAG) ports are hidden under the cover (which must be removed for hardware debugging). +There are separate ports for FMU and IO, as highlighted below. + +![Pixhawk SWD](../../assets/flight_controller/mro/pixhawk_swd.jpg) + +The ports are ARM 10-pin JTAG connectors, which you will probably have to solder. +The pinout for the ports is shown below (the square markers in the corners above indicates pin 1). + +![ARM 10-Pin connector pinout](../../assets/flight_controller/mro/arm_10pin_jtag_connector_pinout.jpg) + +:::info +All Pixhawk FMUv2 boards have a similar SWD port. +::: ## Схема розташування виводів -See [3DR Pixhawk 1 > Pinouts](../flight_controller/pixhawk.md#pinouts) +#### TELEM1, TELEM2 порти + +| Pin | Сигнал | Вольтаж | +| -------------------------- | ---------------------------- | --------------------- | +| 1 (red) | VCC | +5V | +| 2 (blk) | TX (OUT) | +3.3V | +| 3 (blk) | RX (IN) | +3.3V | +| 4 (blk) | CTS (IN) | +3.3V | +| 5 (blk) | RTS (OUT) | +3.3V | +| 6 (blk) | GND | GND | + +#### Порт GPS + +| Pin | Сигнал | Вольтаж | +| -------------------------- | --------------------------- | --------------------- | +| 1 (red) | VCC | +5V | +| 2 (blk) | TX (OUT) | +3.3V | +| 3 (blk) | RX (IN) | +3.3V | +| 4 (blk) | CAN2 TX | +3.3V | +| 5 (blk) | CAN2 RX | +3.3V | +| 6 (blk) | GND | GND | + +#### SERIAL 4/5 port + +Due to space constraints two ports are on one connector. + +| Pin | Сигнал | Вольтаж | +| -------------------------- | -------------------------- | --------------------- | +| 1 (red) | VCC | +5V | +| 2 (blk) | TX (#4) | +3.3V | +| 3 (blk) | RX (#4) | +3.3V | +| 4 (blk) | TX (#5) | +3.3V | +| 5 (blk) | RX (#5) | +3.3V | +| 6 (blk) | GND | GND | + +#### ADC 6.6V + +| Pin | Сигнал | Вольтаж | +| -------------------------- | ------ | --------------------------- | +| 1 (red) | VCC | +5V | +| 2 (blk) | ADC IN | up to +6.6V | +| 3 (blk) | GND | GND | + +#### ADC 3.3V + +| Pin | Сигнал | Вольтаж | +| -------------------------- | ------ | ------------------------ | +| 1 (red) | VCC | +5V | +| 2 (blk) | ADC IN | до +3.3V | +| 3 (blk) | GND | GND | +| 4 (blk) | ADC IN | до +3.3V | +| 5 (blk) | GND | GND | + +#### I2C + +| Pin | Сигнал | Вольтаж | +| -------------------------- | ------ | ------------------------------------------------- | +| 1 (red) | VCC | +5V | +| 2 (blk) | SCL | +3.3 (pullups) | +| 3 (blk) | SDA | +3.3 (pullups) | +| 4 (blk) | GND | GND | + +#### CAN + +| Pin | Сигнал | Вольтаж | +| -------------------------- | -------------------------- | ------- | +| 1 (red) | VCC | +5V | +| 2 (blk) | CAN_H | +12V | +| 3 (blk) | CAN_L | +12V | +| 4 (blk) | GND | GND | + +#### SPI + +| Pin | Сигнал | Вольтаж | +| -------------------------- | ------------------------------------------------------ | -------------------- | +| 1 (red) | VCC | +5V | +| 2 (blk) | SPI_EXT_SCK | +3.3 | +| 3 (blk) | SPI_EXT_MISO | +3.3 | +| 4 (blk) | SPI_EXT_MOSI | +3.3 | +| 5 (blk) | !SPI_EXT_NSS | +3.3 | +| 6 (blk) | !GPIO_EXT | +3.3 | +| 7 (blk) | GND | GND | + +#### POWER + +| Pin | Сигнал | Вольтаж | +| -------------------------- | ------- | --------------------- | +| 1 (red) | VCC | +5V | +| 2 (blk) | VCC | +5V | +| 3 (blk) | CURRENT | +3.3V | +| 4 (blk) | VOLTAGE | +3.3V | +| 5 (blk) | GND | GND | +| 6 (blk) | GND | GND | + +#### SWITCH + +| Pin | Сигнал | Вольтаж | +| -------------------------- | -------------------------------------------------------- | --------------------- | +| 1 (red) | VCC | +3.3V | +| 2 (blk) | !IO_LED_SAFETY | GND | +| 3 (blk) | SAFETY | GND | + +## Налаштування послідовного порту + +| UART | Пристрій | Порт | +| ------ | ---------- | --------------------------------------------- | +| UART1 | /dev/ttyS0 | IO debug | +| USART2 | /dev/ttyS1 | TELEM1 (керування потоком) | +| USART3 | /dev/ttyS2 | TELEM2 (керування потоком) | +| UART4 | | | +| UART7 | CONSOLE | | +| UART8 | SERIAL4 | | + + ## Налаштування послідовного порту diff --git a/docs/uk/flight_controller/mro_x2.1.md b/docs/uk/flight_controller/mro_x2.1.md index 98a172a2f8..1be40508d7 100644 --- a/docs/uk/flight_controller/mro_x2.1.md +++ b/docs/uk/flight_controller/mro_x2.1.md @@ -1,119 +1,10 @@ + + + +Doc removed 202603 + text="Discontinued" 202507 / PX4v1.16 -:::warning -This flight controller has been [discontinued](../flight_controller/autopilot_experimental.md) and is no longer commercially available. -::: - -:::warning -PX4 не розробляє цей (або будь-який інший) автопілот. -Contact the [manufacturer](https://store.mrobotics.io/) for hardware support or compliance issues. -::: - -The [mRo-X2.1 autopilot](http://www.mRobotics.io/) is based on the [Pixhawk®-project](https://pixhawk.org/) **FMUv2** open hardware design. -It runs PX4 on the [NuttX](https://nuttx.apache.org/) OS. - -![mRo X2.1](../../assets/flight_controller/mro/mro_x2.1.jpg) - -:::info -This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). -::: - -## Короткий опис - -- Main System-on-Chip: [STM32F427](https://www.st.com/en/microcontrollers-microprocessors/stm32f427-437.html) - - CPU: STM32F427VIT6 ARM® мікроконтроллер - Revision 3 - - ІО: мікроконтролер STM32F100C8T6 ARM® -- Датчики: - - Invensense® MPU9250 9DOF - - Invensense ICM-20602 6DOF - - MEAS MS5611 барометр -- Розміри/Вага - - Size: 36mm x 50mm - (Can be ordered with vertical, horizontal or no headers installed) - - Точки кріплення: 30,5 мм х 30,5 мм діаметр 3,2 мм - - Вага: 10.9g - -Діаграма нижче надає порівняльний аналіз з Pixhawk 1. -mRo має практично ідентичне апаратне забезпечення й підключення, але має значно менший слід. -Основні відмінності - це оновлені датчики та Rev 3 FMU. - -![Mro Pixhawk 1 vs X2.1 comparison](../../assets/flight_controller/mro/px1_x21.jpg) - -## Підключення - -- 2.54 мм заголовки: -- GPS (UART4) з I2C -- CAN шина -- Вхід RC -- PPM вхід -- Вхідний спектр -- RSSI вхід -- вхід SBUS -- sBus вихід -- Вхід живлення -- Вихід зумера -- Вихід світлодіода -- 8 x Виводи сервоприводів -- 6 x Aux outputs -- Позабортовий конектор microUSB -- Kill Pin output _(Currently not supported by firmware)_ -- AirSpeed Sensor -- USART2 (Telem 1) -- USART3 (Telem 2) -- UART7 (Console) -- UART8 (OSD) - -## Проблема PX4 BootLoader - -За замовчуванням mRo X2.1 може бути попередньо налаштований на ArduPilot®, а не на PX4. Це можна побачити під час оновлення прошивки, коли плата визнається як FMUv2 замість X2.1. - -In this case you must update the BootLoader using [BL_Update_X21.zip](https://github.com/PX4/PX4-Autopilot/raw/main/docs/assets/hardware/BL_Update_X21.zip). -Якщо це виправлення не буде зроблено, ваша пеленга буде відображена неправильно і надмірний інерціальний модуль не буде виявлено. - -Основні кроки: - -1. Download and extract [BL_Update_X21.zip](https://github.com/PX4/PX4-Autopilot/raw/main/docs/assets/hardware/BL_Update_X21.zip). -2. Find the folder _BL_Update_X21_. This contains a **bin** file and a subfolder named **/etc** containing an **rc.txt** file -3. Скопіюйте ці файли на кореневий каталог вашої micro SD-карти та вставте її в mRO x2.1 -4. Увімкніть mRO x2.1. Зачекайте, доки він завантажиться, а потім перезавантажте 1 раз. - -## Доступність - -This product can be ordered at the [mRobotics® Store](https://store.mrobotics.io/mRo-X2-1-Rev-2-p/m10021a.htm). - -## Посібник з підключення - -![mRo_X2.1_Wiring](../../assets/flight_controller/mro/mro_x21_wiring.png) - -## Збірка прошивки - -:::tip -Most users will not need to build this firmware! -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: - -``` -make mro_x21_default -``` - -## Креслення - -The board is documented on the mRo hardware repo: [x21_V2_schematic.pdf](https://github.com/mRoboticsIO/Hardware/blob/master/X2.1/Docs/x21_V2_schematic.pdf). - -## Налаштування послідовного порту - -| UART | Пристрій | Порт | -| ------ | ---------- | --------------- | -| USART1 | /dev/ttyS0 | IO debug | -| USART2 | /dev/ttyS1 | SERIAL1 | -| USART3 | /dev/ttyS2 | TELEM2 | -| UART4 | /dev/ttyS3 | GPS/I2C | -| USART6 | /dev/ttyS4 | PX4IO | -| UART7 | /dev/ttyS5 | SERIAL5 CONSOLE | -| UART8 | /dev/ttyS6 | SERIAL4 | - - +Note: Got ports using https://github.com/PX4/PX4-user_guide/pull/672#issuecomment-598198434 +--> diff --git a/docs/uk/flight_controller/nxp_mr_vmu_rt1176.md b/docs/uk/flight_controller/nxp_mr_vmu_rt1176.md index cfbc86d19f..29c87c4790 100644 --- a/docs/uk/flight_controller/nxp_mr_vmu_rt1176.md +++ b/docs/uk/flight_controller/nxp_mr_vmu_rt1176.md @@ -147,7 +147,7 @@ Similar variants will be available from our licensees. - Інші характеристики: - Operating & storage temperature: -40 ~ 85°c -## Де купити +## Where to Buy {#store} Order from [NXP](https://www.nxp.com). @@ -174,7 +174,7 @@ _MR-VMU-RT1176_ connectors (following [Pixhawk Connector Standard](https://githu [NXP MR-VMU-RT1176 Baseboard Pinout](https://nxp.gitbook.io/vmu-rt1176/pin-out) (nxp.gitbook.io) -Примітки: +Notes: - The [camera capture pin](../camera/fc_connected_camera.md#camera-capture-configuration) (`PI0`) is pin 2 on the AD&IO port, marked above as `FMU_CAP1`. diff --git a/docs/uk/flight_controller/nxp_rddrone_fmuk66.md b/docs/uk/flight_controller/nxp_rddrone_fmuk66.md index eaf9224256..b57415577c 100644 --- a/docs/uk/flight_controller/nxp_rddrone_fmuk66.md +++ b/docs/uk/flight_controller/nxp_rddrone_fmuk66.md @@ -1,131 +1,7 @@ + + + - -## Де купити - -**RDDRONE-FMUK66** reference design kit may be purchased direct from NXP or from any of NXP's authorised worldwide network of [electronics distributors](https://www.nxp.com/support/sample-and-buy/distributor-network:DISTRIBUTORS). - -- [Purchase Link](https://www.nxp.com/design/design-center/development-boards-and-designs/px4-robotic-drone-vehicle-flight-management-unit-vmu-fmu-rddrone-fmuk66:RDDRONE-FMUK66#buy) (www.nxp.com) -- Телеметричні радіопередавачі придбаються окремо в залежності від частотного діапазону: - - [HGD-TELEM433](https://www.nxp.com/part/HGD-TELEM433) - - [HGD-TELEM915](https://www.nxp.com/part/HGD-TELEM915) - -:::info -_RDDRONE-FMUK66_ FMU is also included in the complete HoverGames drone kit: [KIT-HGDRONEK66](https://www.nxp.com/design/design-center/development-boards-and-designs/nxp-hovergames-drone-kit-including-flight-controller-and-peripherals:KIT-HGDRONEK66#buy) -::: - - - -## Зборка/інсталяція - -https://nxp.gitbook.io/hovergames - -## Збірка прошивки - -:::tip -Most users will not need to build this firmware! -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: - -``` -make nxp_fmuk66-v3_default -``` - -## Відладочний порт - -The [PX4 System Console](../debug/system_console.md) and the [SWD interface](../debug/swd_debug.md) run on the [DCD-LZ FMU Debug](https://nxp.gitbook.io/hovergames/rddrone-fmuk66/connectors/debug-interface-dcd-lz) port. - -NXP's DCD-LZ is a 7 pin JST-GH connector and adds the nRST/MCU_RESET pin to the [Pixhawk 6-Pin standard debug port](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-009%20Pixhawk%20Connector%20Standard.pdf). - -Адаптер DCD-LZ дозволяє використовувати стандартний інтерфейс JTAG/SWD з 10 контактами (тобто за допомогою Segger Jlink) та стандартний кабель типу FTDI USB-TTL-3V3 з 5 контактами. - - - -## Підтримувані платформи / Конструкції - -Будь-який мультикоптер / літак / наземна платформа / човен, який може керуватися звичайними RC сервоприводами або сервоприводами Futaba S-Bus. -The complete set of supported configurations can be seen in the [Airframes Reference](../airframes/airframe_reference.md). - -![HoverGames Drone Kit](../../assets/flight_controller/nxp_rddrone_fmuk66/hovergames_drone_14042019_xl001.jpg) - -:::tip -The NXP [HoverGames Drone Kit](https://www.nxp.com/kit-hgdronek66) (shown above) is a complete drone development kit that includes everything needed to build a quadcopter. -Вам потрібно лише поставити акумулятор LiPo 3S/4S. -::: - -## Подальша інформація - -- [HoverGames online documentation](https://nxp.gitbook.io/hovergames) PX4 user and programming guide, specific assembly, construction, debugging, programming instructions. - -- 3DModels supporting HoverGames and RDDRONE-FMUK66 can be found on _Thingiverse_ at these search links: [fmuk66](https://www.thingiverse.com/search?q=fmuk66&type=things&sort=relevant), [hovergames](https://www.thingiverse.com/search?q=hovergames&type=things&sort=relevant). - -![HoverGamesDronelogo](../../assets/flight_controller/nxp_rddrone_fmuk66/hovergames_colored_small.png) diff --git a/docs/uk/flight_controller/ocpoc_zynq.md b/docs/uk/flight_controller/ocpoc_zynq.md index be04d84463..807468b20f 100644 --- a/docs/uk/flight_controller/ocpoc_zynq.md +++ b/docs/uk/flight_controller/ocpoc_zynq.md @@ -1,12 +1,7 @@ -# Aerotena OcPoC-Zynq Mini Польотний контролер (припинено) + - - -:::warning -This flight controller has been [discontinued](../flight_controller/autopilot_experimental.md) and is no longer commercially available. - -PX4 v1.11 - це останній реліз, який має (експериментальну) підтримку для цієї платформи. -See the [PX4v1.11 docs](http://docs.px4.io/v1.11/en/flight_controller/ocpoc_zynq.html#aerotenna-ocpoc-zynq-mini-flight-controller) for more information. -::: - -![ocpoc-zynq-mini](../../assets/hardware/hardware-ocpoc-zynq-mini.jpg) + diff --git a/docs/uk/flight_controller/omnibus_f4_sd.md b/docs/uk/flight_controller/omnibus_f4_sd.md index eb3551eddc..b7d37a2db2 100644 --- a/docs/uk/flight_controller/omnibus_f4_sd.md +++ b/docs/uk/flight_controller/omnibus_f4_sd.md @@ -1,266 +1,7 @@ -# Omnibus F4 SD + -:::warning -This flight controller has been [discontinued](../flight_controller/autopilot_experimental.md) and is no longer commercially available. -::: + - -## RC Телеметрія - -The Omnibus supports telemetry to the RC Transmitter using [FrSky Telemetry](../peripherals/frsky_telemetry.md) or [CRSF Crossfire Telemetry](#crsf_telemetry). - - - -### Телеметрія CRSF (TBS Crossfire Telemetry) - -[TBS CRSF Telemetry](../telemetry/crsf_telemetry.md) may be used to send telemetry data from the flight controller (the vehicle's attitude, battery, flight mode and GPS data) to an RC transmitter such as a Taranis. - -Benefits over [FrSky telemetry](../peripherals/frsky_telemetry.md) include: - -- Лише один UART потрібен для RC та телеметрії. -- Протокол CRSF оптимізований для низької затримки. -- 150 Гц частота оновлення RC. -- Сигнали неінвертовані, тому не потрібна (зовнішня) логіка інвертора. - -:::info -If you use CRSF Telemetry you will need to build custom PX4 firmware. -На відміну від цього, телеметрія FrSky може використовувати завчасно побудоване програмне забезпечення. -::: - -For Omnibus we recommend the [TBS Crossfire Nano RX](https://www.team-blacksheep.com/products/prod:crossfire_nano_rx), since it is specifically designed for small Quads. - -On the handheld controller (e.g. Taranis) you will also need a [Transmitter Module](https://www.team-blacksheep.com/shop/cat:tbs-crossfire-radio-transmitter#product_listing). -Це можна підключити ззаду до пульта радіо керування. - -:::info -The referenced links above contains the documentation for the TX/RX modules. -::: - -#### Установка - -Підключіть контакти Nano RX та Omnibus, як показано: - -| Omnibus UART1 | Nano RX | -| ------------- | ------- | -| TX | Ch2 | -| RX | Ch1 | - -Наступне оновіть модулі TX/RX для використання протоколу CRSF та налаштуйте телеметрію. -Instructions for this are provided in the [TBS Crossfire Manual](https://www.team-blacksheep.com/media/files/tbs-crossfire-manual.pdf) (search for 'Setting up radio for CRSF'). - -#### Налаштування CRSF PX4 - -Вам потрібно буде створити власну прошивку, щоб використовувати CRSF. -For more information see [CRSF Telemetry](../telemetry/crsf_telemetry.md#px4-configuration). - - - -## PX4 Bootloader Update {#bootloader} - -The board comes pre-installed with [Betaflight](https://github.com/betaflight/betaflight/wiki). -Before PX4 firmware can be installed, the _PX4 bootloader_ must be flashed. -Download the [omnibusf4sd_bl.hex](https://github.com/PX4/PX4-Autopilot/raw/main/docs/assets/flight_controller/omnibus_f4_sd/omnibusf4sd_bl_d52b70cb39.hex) bootloader binary and read [this page](../advanced_config/bootloader_update_from_betaflight.md) for flashing instructions. - -## Збірка прошивки - -To [build PX4](../dev_setup/building_px4.md) for this target: - -``` -make omnibus_f4sd_default -``` - -## Встановлення прошивки PX4 - -Ви можете використовувати або готове вбудоване програмне забезпечення, або власне користувацьке програмне забезпечення. - -:::warning -If you use [CRSF Telemetry](../telemetry/crsf_telemetry.md#px4-configuration) in your radio system, as describe above, then you must use custom firmware. -::: - -Прошивку можна встановити будь-якими звичайними способами: - -- Збудуйте та завантажте джерело - - ``` - make omnibus_f4sd_default upload - ``` - -- [Load the firmware](../config/firmware.md) using _QGroundControl_. - -## Налаштування - -In addition to the [basic configuration](../config/index.md), the following parameters are important: - -| Параметр | Налаштування | -| ---------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [SYS_HAS_MAG](../advanced_config/parameter_reference.md#SYS_HAS_MAG) | Це має бути вимкнено, оскільки у платі немає внутрішнього магніту. Ви можете активувати це, якщо приєднаєте зовнішній магніт. | -| [SYS_HAS_BARO](../advanced_config/parameter_reference.md#SYS_HAS_BARO) | Вимкніть це, якщо ваша плата не має барометра. | - -## Додаткова інформація - -[This page](https://blog.unmanned.tech/omnibus-f4-flight-controller-guide/) provides a good overview with pinouts and setup instructions. +DOC REMOVED: 202603 +--> diff --git a/docs/uk/flight_controller/pixfalcon.md b/docs/uk/flight_controller/pixfalcon.md index 595a628be9..ad95ab4c86 100644 --- a/docs/uk/flight_controller/pixfalcon.md +++ b/docs/uk/flight_controller/pixfalcon.md @@ -1,75 +1,5 @@ -# Контролер польоту Pixfalcon (знятий з виробництва) + - - -:::warning -This flight controller has been [discontinued](../flight_controller/autopilot_experimental.md) and is no longer commercially available. -::: - -:::warning -PX4 не розробляє цей (або будь-який інший) автопілот. -Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. -::: - -The Pixfalcon autopilot (designed by [Holybro®](https://holybro.com/)) is binary-compatible (FMUv2) derivative of the [Pixhawk 1](../flight_controller/pixhawk.md) design that has been optimized for space-constrained applications such as FPV racers. Він має менше входів-виходів, що дозволяє зменшити розмір. - -![Pixfalcon hero image](../../assets/hardware/hardware-pixfalcon.png) - -## Короткий опис - -- Main System-on-Chip: [STM32F427](https://www.st.com/en/microcontrollers-microprocessors/stm32f427-437.html) - - CPU: 180 MHz ARM® Cortex® M4 з одинарною точністю FPU - - RAM: 256 KB SRAM (L1) -- Failsafe System-on-Chip: STM32F100 - - CPU: 24 MHz ARM Cortex M3 - - RAM: 8 KB SRAM -- GPS: u-blox® M8 (в комплекті) - -### Підключення - -- 1x I2C -- 2x UART (один для телеметрії / OSD, без контролю потоку) -- 8x ШІМ з ручним управлінням -- S.BUS / PPM вхід - -## Наявність: - -No longer available. - -Опціональне обладнання: - -- Optical flow: PX4 Flow unit from manufacturer [Holybro](https://holybro.com/products/px4flow) -- Digital Airspeed sensor from manufacturer [Holybro](https://holybro.com/products/digital-air-speed-sensor-ms4525do) -- Екранний дисплей з вбудованою телеметрією: - - Micro HKPilot Telemetry Radio Module with On Screen Display (OSD) unit - 433MHz. (Discontinued) -- Pure Telemetry опції: - - [SIK Radios](../telemetry/sik_radio.md) - -## Збірка прошивки - -:::tip -Most users will not need to build this firmware! -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: - -``` -make px4_fmu-v3_default -``` - -## Відладочний порт - -This board does not have a debug port (i.e it does not have a port for accessing the [System Console](../debug/system_console.md) or the [SWD interface](../debug/swd_debug.md) (JTAG). - -Розробники повинні будуть припаяти дроти до підключених площин для SWD, а також до STM32F4 (IC) TX і RX, щоб отримати консоль. - -## Налаштування послідовного порту - -| UART | Пристрій | Порт | -| ------ | ---------- | ----------------------------------------------- | -| UART1 | /dev/ttyS0 | IO Debug | -| USART2 | /dev/ttyS1 | TELEM1 (без контролю потоку) | -| UART4 | /dev/ttyS2 | GPS | - - + diff --git a/docs/uk/flight_controller/pixhack_v3.md b/docs/uk/flight_controller/pixhack_v3.md index ed8f165d7b..d7907a18c3 100644 --- a/docs/uk/flight_controller/pixhack_v3.md +++ b/docs/uk/flight_controller/pixhack_v3.md @@ -1,88 +1,8 @@ + + + - -## Налаштування послідовного порту - -| UART | Пристрій | Порт | -| ------ | ---------- | --------------------------------------------- | -| UART1 | /dev/ttyS0 | IO debug | -| USART2 | /dev/ttyS1 | TELEM1 (керування потоком) | -| USART3 | /dev/ttyS2 | TELEM2 (керування потоком) | -| UART4 | | | -| UART7 | | CONSOLE | -| UART8 | | SERIAL4 | +--> diff --git a/docs/uk/flight_controller/pixhawk-2.md b/docs/uk/flight_controller/pixhawk-2.md index 7b6015091a..6927526fe5 100644 --- a/docs/uk/flight_controller/pixhawk-2.md +++ b/docs/uk/flight_controller/pixhawk-2.md @@ -46,9 +46,7 @@ This autopilot is [supported](../flight_controller/autopilot_pixhawk_standard.md - Потужний багатотональний п'єзозвуковий індикатор - Карта microSD для високошвидкісної фіксації даних протягом тривалого періоду часу - - -## Де купити +## Where to Buy {#store} [Cube Black](https://www.cubepilot.com/#/reseller/list) (Reseller list) @@ -154,7 +152,7 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make px4_fmu-v3_default ``` diff --git a/docs/uk/flight_controller/pixhawk.md b/docs/uk/flight_controller/pixhawk.md index 57244bb4e5..c8bd92ee33 100644 --- a/docs/uk/flight_controller/pixhawk.md +++ b/docs/uk/flight_controller/pixhawk.md @@ -1,337 +1,6 @@ -# 3DR Pixhawk 1 Flight Controller (знято з виробництва) + -:::warning -This flight controller has been [discontinued](../flight_controller/autopilot_experimental.md) and is no longer commercially available. -You can use the [mRo Pixhawk](../flight_controller/mro_pixhawk.md) as a drop-in replacement. -::: - -:::warning -PX4 не розробляє цей (або будь-який інший) автопілот. -Звертайтесь до виробника з питань щодо підтримки або відповідності. -::: - -The _3DR Pixhawk® 1_ autopilot is a popular general purpose flight controller based on the [Pixhawk-project](https://pixhawk.org/) **FMUv2** open hardware design (it combines the functionality of the PX4FMU + PX4IO). -It runs PX4 on the [NuttX](https://nuttx.apache.org/) OS. - -![Pixhawk Image](../../assets/hardware/hardware-pixhawk.png) - -Assembly/setup instructions for use with PX4 are provided here: [Pixhawk Wiring Quickstart](../assembly/quick_start_pixhawk.md) - -## Основні характеристики - -- Main System-on-Chip: [STM32F427](https://www.st.com/en/microcontrollers-microprocessors/stm32f427-437.html) - - CPU: 180 MHz ARM® Cortex® M4 з одинарною точністю FPU - - RAM: 256 KB SRAM (L1) -- Failsafe System-on-Chip: STM32F100 - - CPU: 24 MHz ARM Cortex M3 - - RAM: 8 KB SRAM -- Wifi: ESP8266 зовнішній -- GPS: u-blox® 7/8 (Hobbyking®) / u-blox 6 (3D Robotics) -- Optical flow: [PX4 Flow unit](../sensor/px4flow.md) -- Резервні входи живлення та автоматичне перемикання на резервне джерело -- Зовнішній запобіжний вимикач -- Головний візуальний індикатор - багатоколірний світлодіод -- Потужний багатотональний п'єзозвуковий індикатор -- Карта microSD для високошвидкісної фіксації даних протягом тривалого періоду часу - -Підключення - -- 1x I2C -- 1x CAN (2x опційно) -- 1x ADC -- 4x UART (2x з контролем потоку) -- 1x Консоль -- 8x ШІМ з ручним управлінням -- 6x PWM / GPIO / PWM вхід -- S.BUS / PPM / Spektrum вхід -- S.BUS вивід - -# Де купити - -Ця плата, що оригінально вироблялася компанією 3DR®, була стандартною платформою мікроконтролера для PX4®. While the board is no longer manufactured by 3DR, you can use the [mRo Pixhawk](../flight_controller/mro_pixhawk.md) as a drop-in replacement. - -Замовте mRo Pixhawk з: - -- [Bare Bones](https://store.mrobotics.io/Genuine-PixHawk-1-Barebones-p/mro-pixhawk1-bb-mr.htm) - Just the board (useful as a 3DR Pixhawk replacement) -- [mRo Pixhawk 2.4.6 Essential Kit](https://store.mrobotics.io/Genuine-PixHawk-Flight-Controller-p/mro-pixhawk1-minkit-mr.htm) - includes everything except for telemetry radios -- [mRo Pixhawk 2.4.6 Cool Kit! (Limited edition)](https://store.mrobotics.io/product-p/mro-pixhawk1-fullkit-mr.htm) - includes everything you need including telemetry radios - -## Характеристики - -### Процесор - -- 32bit STM32F427 [Cortex-M4F](https://en.wikipedia.org/wiki/ARM_Cortex-M#Cortex-M4) core with FPU -- 168 MHz -- 256 KB RAM -- 2 MB Flash -- 32 bit STM32F103 відмовостійкий копроцесор - -### Датчики - -- ST Micro L3GD20H 16 bit гіроскоп -- ST Micro LSM303D 14 bit акселерометр / магнітометр -- Invensense MPU 6000 3-вісний акселерометр/гіроскоп -- MEAS MS5611 барометр - -### Інтерфейси - -- 5x UART (послідовні порти), один високої потужності, 2x з контролем потоку ГВП -- 2x CAN (один з внутрішнім 3.3В трансивером, один на конекторі розширювача) -- Spektrum DSM / DSM2 / DSM-X® Satellite сумісний вхід -- Futaba S.BUS® сумісний вхід і вивід -- Вхід сигналу PPM sum -- Вхід RSSI (ШІМ або напруга) -- I2C -- SPI -- 3.3 та 6.6V ADC входи -- Внутрішній порт microUSB і розширення зовнішнього порту microUSB - - - -### Система живлення та захист - -- Ідеальний діодний контролер з автоматичним перемиканням на резервне живлення -- Сервопривід високої потужності (max. 10В) і сильного струму (10A+) -- Усі периферійні виводи захищені від перевантаження по струму, усі входи захищені від електростатичного розряду - -## Номінальна напруга - -Pixhawk може мати потрійну резервність у джерелі живлення, якщо подаються три джерела живлення. Три шини: вхід модуля живлення, вхід сервоприводу, вхід USB. - -### Максимальна напруга нормальної роботи - -За таких умов всі джерела живлення будуть використовуватися в цьому порядку для живлення системи - -- Вхід модуля живлення (4.8В до 5.4В) -- Servo rail input (4.8V to 5.4V) **UP TO 10V FOR MANUAL OVERRIDE, BUT AUTOPILOT PART WILL BE UNPOWERED ABOVE 5.7V IF POWER MODULE INPUT IS NOT PRESENT** -- Вхід живлення USB (4.8В до 5.4В) - -### Абсолютна максимальна напруга - -За таких умов система не буде витрачати жодної потужності (не буде працювати), але залишиться неушкодженою. - -- Вхід модуля живлення (4.1В до 5.7В, 0В до 20В неушкоджений) -- Вхід сервоприводу (4.1В до 5.7В, 0В до 20В) -- Вхід живлення USB (4.1В до 5.7В, 0В до 6В) - -## Креслення - -[FMUv2 + IOv2 schematic](https://raw.githubusercontent.com/PX4/Hardware/master/FMUv2/PX4FMUv2.4.5.pdf) -- Schematic and layout - -:::info -As a CC-BY-SA 3.0 licensed Open Hardware design, all schematics and design files are [available](https://github.com/pixhawk/Hardware). -::: - -## З'єднання - -Порти Pixhawk показані нижче. -Вони використовують роз’єми Hirose DF13 (передують роз’ємам JST-GH, визначеним у стандарті роз’ємів Pixhawk). - -:::warning -Many 3DR Pixhawk clones use Molex picoblade connectors instead of DF13 connectors. -Вони мають прямокутні штифти замість квадратних, і їх не можна вважати сумісними. -::: - -![Pixhawk Connectors](../../assets/flight_controller/pixhawk1/pixhawk_connectors.png) - -:::tip -The `RC IN` port is for RC receivers only and provides sufficient power for that purpose. -**NEVER** connect any servos, power supplies or batteries to it or to the receiver connected to it. -::: - -## Схема розташування виводів - -#### TELEM1, TELEM2 порти - -| Pin | Сигнал | Вольтаж | -| -------------------------- | ---------------------------- | --------------------- | -| 1 (red) | VCC | +5V | -| 2 (blk) | TX (OUT) | +3.3V | -| 3 (blk) | RX (IN) | +3.3V | -| 4 (blk) | CTS (IN) | +3.3V | -| 5 (blk) | RTS (OUT) | +3.3V | -| 6 (blk) | GND | GND | - -#### Порт GPS - -| Pin | Сигнал | Вольтаж | -| -------------------------- | --------------------------- | --------------------- | -| 1 (red) | VCC | +5V | -| 2 (blk) | TX (OUT) | +3.3V | -| 3 (blk) | RX (IN) | +3.3V | -| 4 (blk) | CAN2 TX | +3.3V | -| 5 (blk) | CAN2 RX | +3.3V | -| 6 (blk) | GND | GND | - -#### SERIAL 4/5 port - -У зв'язку з обмеженням простору два порти знаходяться на одному роз'ємі. - -| Pin | Сигнал | Вольтаж | -| -------------------------- | -------------------------- | --------------------- | -| 1 (red) | VCC | +5V | -| 2 (blk) | TX (#4) | +3.3V | -| 3 (blk) | RX (#4) | +3.3V | -| 4 (blk) | TX (#5) | +3.3V | -| 5 (blk) | RX (#5) | +3.3V | -| 6 (blk) | GND | GND | - -#### ADC 6.6V - -| Pin | Сигнал | Вольтаж | -| -------------------------- | ------ | --------------------------- | -| 1 (red) | VCC | +5V | -| 2 (blk) | ADC IN | up to +6.6V | -| 3 (blk) | GND | GND | - -#### ADC 3.3V - -| Pin | Сигнал | Вольтаж | -| -------------------------- | ------ | ------------------------ | -| 1 (red) | VCC | +5V | -| 2 (blk) | ADC IN | до +3.3V | -| 3 (blk) | GND | GND | -| 4 (blk) | ADC IN | до +3.3V | -| 5 (blk) | GND | GND | - -#### I2C - -| Pin | Сигнал | Вольтаж | -| -------------------------- | ------ | ------------------------------------------------- | -| 1 (red) | VCC | +5V | -| 2 (blk) | SCL | +3.3 (pullups) | -| 3 (blk) | SDA | +3.3 (pullups) | -| 4 (blk) | GND | GND | - -#### CAN - -| Pin | Сигнал | Вольтаж | -| -------------------------- | -------------------------- | ------- | -| 1 (red) | VCC | +5V | -| 2 (blk) | CAN_H | +12V | -| 3 (blk) | CAN_L | +12V | -| 4 (blk) | GND | GND | - -#### SPI - -| Pin | Сигнал | Вольтаж | -| -------------------------- | ------------------------------------------------------ | -------------------- | -| 1 (red) | VCC | +5V | -| 2 (blk) | SPI_EXT_SCK | +3.3 | -| 3 (blk) | SPI_EXT_MISO | +3.3 | -| 4 (blk) | SPI_EXT_MOSI | +3.3 | -| 5 (blk) | !SPI_EXT_NSS | +3.3 | -| 6 (blk) | !GPIO_EXT | +3.3 | -| 7 (blk) | GND | GND | - -#### POWER - -| Pin | Сигнал | Вольтаж | -| -------------------------- | ------- | --------------------- | -| 1 (red) | VCC | +5V | -| 2 (blk) | VCC | +5V | -| 3 (blk) | CURRENT | +3.3V | -| 4 (blk) | VOLTAGE | +3.3V | -| 5 (blk) | GND | GND | -| 6 (blk) | GND | GND | - -#### SWITCH - -| Pin | Сигнал | Вольтаж | -| -------------------------- | -------------------------------------------------------- | --------------------- | -| 1 (red) | VCC | +3.3V | -| 2 (blk) | !IO_LED_SAFETY | GND | -| 3 (blk) | SAFETY | GND | - -## Налаштування послідовного порту - -| UART | Пристрій | Порт | -| ------ | ---------- | --------------------------------------------- | -| UART1 | /dev/ttyS0 | IO debug | -| USART2 | /dev/ttyS1 | TELEM1 (керування потоком) | -| USART3 | /dev/ttyS2 | TELEM2 (керування потоком) | -| UART4 | | | -| UART7 | CONSOLE | | -| UART8 | SERIAL4 | | - - - -## Відладочні порти - -### Порт Консолі - -The [PX4 System Console](../debug/system_console.md) runs on the port labeled [SERIAL4/5](#serial-4-5-port). - -:::tip -A convenient way to connect to the console is to use a [Zubax BugFace BF1](https://github.com/Zubax/bugface_bf1), as it comes with connectors that can be used with several different Pixhawk devices. -Simply connect the 6-pos DF13 1:1 cable on the [Zubax BugFace BF1](https://github.com/Zubax/bugface_bf1) to the Pixhawk `SERIAL4/5` port. - -![Zubax BugFace BF1](../../assets/flight_controller/pixhawk1/dronecode_probe.jpg) -::: - -The pinout is standard serial pinout, designed to connect to a [3.3V FTDI](https://www.digikey.com/en/products/detail/TTL-232R-3V3/768-1015-ND/1836393) cable (5V tolerant). - -\| 3DR Pixhawk 1 | | FTDI | -\| ------------- | --------- | ---- | ---------------- | -\| 1 | +5V (red) | | N/C | -\| 2 | S4 Tx | | N/C | -\| 3 | S4 Rx | | N/C | -\| 4 | S5 Tx | 5 | FTDI RX (yellow) | -\| 5 | S5 Rx | 4 | FTDI TX (orange) | -\| 6 | GND | 1 | FTDI GND (black) | - -Підключення кабелю FTDI до 6-контактного роз’єму DF13 1:1 показано на малюнку нижче. - -![Console Connector](../../assets/flight_controller/pixhawk1/console_connector.jpg) - -Повна проводка показана нижче. - -![Console Debug](../../assets/flight_controller/pixhawk1/console_debug.jpg) - -:::info -For information on how to _use_ the console see: [System Console](../debug/system_console.md). -::: - -### SWD Port - -The [SWD](../debug/swd_debug.md) (JTAG) ports are hidden under the cover (which must be removed for hardware debugging). -Є окремі порти для FMU та IO, як показано нижче. - -![Pixhawk SWD](../../assets/flight_controller/pixhawk1/pixhawk_swd.jpg) - -Порти являють собою 10-контактні роз’єми JTAG ARM, які вам, ймовірно, доведеться паяти. -Схема контактів для портів показана нижче (квадратні маркери в кутах вище вказують на контакт 1). - -![ARM 10-Pin connector pinout](../../assets/flight_controller/pixhawk1/arm_10pin_jtag_connector_pinout.jpg) - -:::info -All Pixhawk FMUv2 boards have a similar SWD port. -::: - -## Збірка прошивки - -:::tip -Most users will not need to build this firmware! -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: - -``` -make px4_fmu-v3_default -``` - -## Частини / Корпуси - -- **ARM MINI JTAG (J6)**: 1.27 mm 10pos header (SHROUDED), for Black Magic Probe: FCI 20021521-00010D4LF ([Digi-Key](https://www.digikey.com/en/products/detail/20021521-00010T1LF/609-4054-ND/2414951),) or Samtec FTSH-105-01-F-DV-K (untested) or Harwin M50-3600542 ([Digikey](https://www.digikey.com/en/products/detail/harwin-inc/M50-3600542/2264370)) - - JTAG Adapter Option #1: [BlackMagic Probe](https://1bitsquared.com/products/black-magic-probe). Зверніть увагу, що може поставлятися без кабелів (перевірте у виробника). - If so, you will need the **Samtec FFSD-05-D-06.00-01-N** cable ([Samtec sample service](https://www.samtec.com/products/ffsd-05-d-06.00-01-n) or [Digi-Key Link: SAM8218-ND](https://www.digikey.com/en/products/detail/samtec-inc/ffsd-05-d-06-00-01-n/1106577)) or [Tag Connect Ribbon](https://www.tag-connect.com/product/10-pin-cortex-ribbon-cable-4-length-with-50-mil-connectors) and a Mini-USB cable. - - JTAG Adapter Option #2: [Digi-Key Link: ST-LINK/V2](https://www.digikey.com/product-detail/en/stmicroelectronics/ST-LINK-V2/497-10484-ND) / [ST USER MANUAL](https://www.st.com/resource/en/user_manual/dm00026748.pdf), needs an ARM Mini JTAG to 20pos adapter: [Digi-Key Link: 726-1193-ND](https://www.digikey.com/en/products/detail/texas-instruments/MDL-ADA2/1986451) - - JTAG Adapter Option #3: [Olimex ARM-TINY](https://www.olimex.com/wiki/ARM-USB-TINY) or any other OpenOCD-compatible ARM Cortex JTAG adapter, needs an ARM Mini JTAG to 20pos adapter: [Digi-Key Link: 726-1193-ND](https://www.digikey.com/en/products/detail/texas-instruments/MDL-ADA2/1986451) -- **USARTs**: Hirose DF13 6 pos ([Digi-Key Link: DF13A-6P-1.25H(20)](https://www.digikey.com/products/en?keywords=H3371-ND)) - - Mates: Hirose DF13 6 pos housing ([Digi-Key Link: Hirose DF13-6S-1.25C](https://www.digikey.com/products/en?keywords=H2182-ND)) -- **I2C and CAN**: Hirose DF13 4 pos ([Digi-Key Link: DF13A-4P-1.25H(20)](https://www.digikey.com/en/products/detail/hirose-electric-co-ltd/DF13A-4P-1-25H-20/530666) - discontinued) - -## Підтримувані платформи / Конструкції - -Будь-який мультикоптер / літак / наземна платформа / човен, який може керуватися звичайними RC сервоприводами або сервоприводами Futaba S-Bus. + diff --git a/docs/uk/flight_controller/pixhawk3_pro.md b/docs/uk/flight_controller/pixhawk3_pro.md index 80ae86363f..deaacad9ac 100644 --- a/docs/uk/flight_controller/pixhawk3_pro.md +++ b/docs/uk/flight_controller/pixhawk3_pro.md @@ -1,87 +1,7 @@ -# Pixhawk 3 Pro (Знято з виробництва) + -:::warning -PX4 не розробляє цей (або будь-який інший) автопілот. -Contact the [manufacturer](https://store-drotek.com/) for hardware support or compliance issues. -::: + +DOC REMOVED: 202603 +--> diff --git a/docs/uk/flight_controller/pixhawk4.md b/docs/uk/flight_controller/pixhawk4.md index 497d049ffa..e286aba5f5 100644 --- a/docs/uk/flight_controller/pixhawk4.md +++ b/docs/uk/flight_controller/pixhawk4.md @@ -51,7 +51,7 @@ This autopilot is [supported](../flight_controller/autopilot_pixhawk_standard.md Additional information can be found in the [Pixhawk 4 Technical Data Sheet](https://github.com/PX4/PX4-Autopilot/blob/main/docs/assets/flight_controller/pixhawk4/pixhawk4_technical_data_sheet.pdf). -## Де купити +## Where to Buy {#store} Order from [Holybro](https://holybro.com/products/pixhawk-4). @@ -126,13 +126,11 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make px4_fmu-v5_default ``` - - -## Відладочний порт +## Debug Port {#debug_port} The [PX4 System Console](../debug/system_console.md) and [SWD interface](../debug/swd_debug.md) run on the **FMU Debug** port, while the I/O console and SWD interface can be accessed via **I/O Debug** port. In order to access these ports, the user must remove the _Pixhawk 4_ casing. diff --git a/docs/uk/flight_controller/pixhawk4_mini.md b/docs/uk/flight_controller/pixhawk4_mini.md index 9eabf47d28..d5ccdebf6a 100644 --- a/docs/uk/flight_controller/pixhawk4_mini.md +++ b/docs/uk/flight_controller/pixhawk4_mini.md @@ -1,160 +1,7 @@ -# Holybro Pixhawk 4 Mini (Знято з виробництва) + - + diff --git a/docs/uk/flight_controller/pixhawk5x.md b/docs/uk/flight_controller/pixhawk5x.md index 273fd9629f..89434122bd 100644 --- a/docs/uk/flight_controller/pixhawk5x.md +++ b/docs/uk/flight_controller/pixhawk5x.md @@ -113,7 +113,7 @@ Pixhawk® 5X ідеально підходить для розробників - Інші характеристики: - Operating & storage temperature: -40 ~ 85°c -## Де купити +## Where to Buy {#store} Замовляйте на [Holybro](https://holybro.com/products/pixhawk-5x). @@ -131,10 +131,10 @@ Pixhawk® 5X ідеально підходить для розробників :::info Connector pin assignments are left to right (i.e. Pin 1 - це найлівіший контакт). -:::info +::: - The [camera capture pin](../camera/fc_connected_camera.md#camera-capture-configuration) (`PI0`) is pin 2 on the AD&IO port, marked above as `FMU_CAP1`. -- Схему контактів _Pixhawk 5X_ можна завантажити у форматі PDF [тут](https://github.com/PX4/PX4-user_guide/blob/main/assets/flight_controller/pixhawk5x/pixhawk5x_pinout.pdf) або [тут](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_Pixhawk5X_Pinout.pdf). +- _Pixhawk 5X_ pinouts can be downloaded in PDF from [here](https://github.com/PX4/PX4-user_guide/blob/main/assets/flight_controller/pixhawk5x/pixhawk5x_pinout.pdf) or [here](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_Pixhawk5X_Pinout.pdf). ## Налаштування послідовного порту @@ -177,8 +177,8 @@ The **POWER1** & **POWER2** ports on the Pixhawk 5X uses the 6 circuit [2.00mm P Цифровий моніторинг батареї I2C увімкнено за замовчуванням (див. [Швидкий старт > Живлення](../assembly/quick_start_pixhawk5x.md#power)). -::: info -Аналоговий моніторинг батареї через ADC не підтримується на цій конкретній платі, але може підтримуватися в варіантах цього політного контролера з іншою базовою платою. +:::info +Analog battery monitoring via an ADC is not supported on this particular board, but may be supported in variations of this flight controller with a different baseboard. ::: ## Збірка прошивки @@ -190,13 +190,11 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make px4_fmu-v5x_default ``` - - -## Відладочний порт +## Debug Port {#debug_port} The [PX4 System Console](../debug/system_console.md) and [SWD interface](../debug/swd_debug.md) run on the **FMU Debug** port. diff --git a/docs/uk/flight_controller/pixhawk6c.md b/docs/uk/flight_controller/pixhawk6c.md index c541e4f2b0..8cf062a7a0 100644 --- a/docs/uk/flight_controller/pixhawk6c.md +++ b/docs/uk/flight_controller/pixhawk6c.md @@ -96,7 +96,7 @@ Pixhawk® 6C ідеально підходить для розробників - Інші характеристики: - Operating & storage temperature: -40 ~ 85°c -## Де купити +## Where to Buy {#store} Order from [Holybro](https://holybro.com/products/pixhawk-6c). @@ -162,13 +162,11 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make px4_fmu-v6c_default ``` - - -## Відладочний порт +## Debug Port {#debug_port} The [PX4 System Console](../debug/system_console.md) and [SWD interface](../debug/swd_debug.md) run on the **FMU Debug** port. diff --git a/docs/uk/flight_controller/pixhawk6c_mini.md b/docs/uk/flight_controller/pixhawk6c_mini.md index ab986123ac..b15d65cefd 100644 --- a/docs/uk/flight_controller/pixhawk6c_mini.md +++ b/docs/uk/flight_controller/pixhawk6c_mini.md @@ -58,7 +58,7 @@ The Pixhawk® 6C Mini is perfect for developers at corporate research labs, star - Вхід USB Power: 4.75~5.25V - Вхід Servo Rail: 0\~36V - Номінальний струм: - - \`TELEM1\`\` обмежувач максимального вихідного струму: 1A + - `TELEM1` Max output current limiter: 1A - Комбінований обмежувач вихідного струму всіх інших портів: 1A ### **Mechanical data** @@ -94,14 +94,14 @@ The Pixhawk® 6C Mini is perfect for developers at corporate research labs, star - Інші характеристики: - Operating & storage temperature: -40 ~ 85°c -## Де купити +## Where to Buy {#store} Order from [Holybro](https://holybro.com/products/pixhawk-6c-mini). ## Зборка/інсталяція -Порт Pixhawk 4 Mini дуже схожий з портом Pixhawk 6C Mini. -Please refer to the [Pixhawk 4 Mini Wiring Quick Start](../assembly/quick_start_pixhawk4_mini.md) as it provides instructions on how to assemble required/important peripherals including GPS, Power Module etc. +The Pixhawk 6C Mini's ports are very similar to the Pixhawk 4 Mini's ports. +Please refer to the [Pixhawk 4 Mini Wiring Quick Start](https://docs.px4.io/v1.16/en/assembly/quick_start_pixhawk4_mini) (Discontinued) as it provides instructions on how to assemble required/important peripherals including GPS, Power Module etc. ## Схема розташування виводів @@ -165,13 +165,11 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make px4_fmu-v6c_default ``` - - -## Відладочний порт +## Debug Port {#debug_port} The [PX4 System Console](../debug/system_console.md) and [SWD interface](../debug/swd_debug.md) run on the **FMU Debug** port. @@ -208,7 +206,7 @@ The complete set of supported configurations can be seen in the [Airframes Refer ## Дивіться також - [Holybro Docs](https://docs.holybro.com/) (Holybro) -- [Pixhawk 4 Mini Wiring Quick Start](../assembly/quick_start_pixhawk4_mini.md) (and [Pixhawk 6C Wiring QuickStart](../assembly/quick_start_pixhawk6c.md)) +- [Pixhawk 6C Wiring QuickStart](../assembly/quick_start_pixhawk6c.md) - [PM02 Power Module](../power_module/holybro_pm02.md) - [PM06 Power Module](../power_module/holybro_pm06_pixhawk4mini_power_module.md) - [PM07 Power Module](../power_module/holybro_pm07_pixhawk4_power_module.md) diff --git a/docs/uk/flight_controller/pixhawk6x-rt.md b/docs/uk/flight_controller/pixhawk6x-rt.md index c3854f5daf..7c496e6609 100644 --- a/docs/uk/flight_controller/pixhawk6x-rt.md +++ b/docs/uk/flight_controller/pixhawk6x-rt.md @@ -130,9 +130,9 @@ Pixhawk®️sco6X-RT ідеально підходить для розробни - Інші характеристики: - Operating & storage temperature: -40 ~ 85°c -## Де купити +## Where to Buy {#store} -Order from [Holybro](https://holybro.com/products/fmuv6x-rt-developer-edition). +Order from [Holybro](https://holybro.com/products/pixhawk-6x-rt). ## Зборка/інсталяція @@ -149,7 +149,7 @@ The [Pixhawk 6X Wiring Quick Start](../assembly/quick_start_pixhawk6x.md) provid - [Holybro Pixhawk Baseboard Pinout](https://docs.holybro.com/autopilot/pixhawk-6x/pixhawk-baseboard-pinout) - [Holybro Pixhawk Mini-Baseboard Pinout](https://docs.holybro.com/autopilot/pixhawk-6x/pixhawk-mini-baseboard-pinout) -Примітки: +Notes: - The [camera capture pin](../camera/fc_connected_camera.md#camera-capture-configuration) (`PI0`) is pin 2 on the AD&IO port, marked above as `FMU_CAP1`. @@ -207,13 +207,11 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make px4_fmu-v6xrt_default ``` - - -## Відладочний порт +## Debug Port {#debug_port} The [PX4 System Console](../debug/system_console.md) and [SWD interface](../debug/swd_debug.md) run on the **FMU Debug** port. diff --git a/docs/uk/flight_controller/pixhawk6x.md b/docs/uk/flight_controller/pixhawk6x.md index 048cc981bc..b3852e60f9 100644 --- a/docs/uk/flight_controller/pixhawk6x.md +++ b/docs/uk/flight_controller/pixhawk6x.md @@ -160,7 +160,7 @@ The Pixhawk®​ 6X is perfect for developers at corporate research labs, startu - Інші характеристики: - Operating & storage temperature: -40 ~ 85°c -## Де купити +## Where to Buy {#store} Order from [Holybro](https://holybro.com/products/pixhawk-6x). @@ -180,7 +180,7 @@ Sample Wiring Diagram - [Holybro Pixhawk Jetson Baseboard](https://docs.holybro.com/autopilot/pixhawk-baseboards/pixhawk-jetson-baseboard) - [Holybro Pixhawk RPi CM4 Baseboard](https://docs.holybro.com/autopilot/pixhawk-baseboards/pixhawk-rpi-cm4-baseboard) -Примітки: +Notes: - The [camera capture pin](../camera/fc_connected_camera.md#camera-capture-configuration) (`PI0`) is pin 2 on the AD&IO port, marked above as `FMU_CAP1`. @@ -215,7 +215,7 @@ The **POWER1** & **POWER2** ports on the Pixhawk 6X uses the 6 circuit [2.00mm P **Absolute Maximum Ratings** -Under these conditions, the system will not draw any power (will not be operational) but will remain intact. +Under these conditions, the system will not draw any power (will not be operational), but will remain intact. 1. **POWER1** and **POWER2** inputs (operational range 4.1V to 5.7V, 0V to 10V undamaged) 2. **USB** input (operational range 4.1V to 5.7V, 0V to 6V undamaged) @@ -238,13 +238,11 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make px4_fmu-v6x_default ``` - - -## Відладочний порт +## Debug Port {#debug_port} The [PX4 System Console](../debug/system_console.md) and [SWD interface](../debug/swd_debug.md) run on the **FMU Debug** port. diff --git a/docs/uk/flight_controller/pixhawk6x_pro.md b/docs/uk/flight_controller/pixhawk6x_pro.md index 3dada1d987..9999c76b2a 100644 --- a/docs/uk/flight_controller/pixhawk6x_pro.md +++ b/docs/uk/flight_controller/pixhawk6x_pro.md @@ -115,7 +115,7 @@ Processors & Sensors ::: -## Де купити +## Where to Buy {#store} Order from [Holybro](https://holybro.com/products/pixhawk-6x-pro). @@ -140,7 +140,7 @@ The [Pixhawk 6X Wiring Quick Start](../assembly/quick_start_pixhawk6x.md) provid - [Holybro Pixhawk Jetson Baseboard](https://docs.holybro.com/autopilot/pixhawk-baseboards/pixhawk-jetson-baseboard) - [Holybro Pixhawk RPi CM4 Baseboard](https://docs.holybro.com/autopilot/pixhawk-baseboards/pixhawk-rpi-cm4-baseboard) -Примітки: +Notes: - The [camera capture pin](../camera/fc_connected_camera.md#camera-capture-configuration) (`PI0`) is pin 2 on the AD&IO port, marked above as `FMU_CAP1`. @@ -199,7 +199,7 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make px4_fmu-v6x_default ``` diff --git a/docs/uk/flight_controller/pixhawk_mini.md b/docs/uk/flight_controller/pixhawk_mini.md index b31daf1374..5cef4b678c 100644 --- a/docs/uk/flight_controller/pixhawk_mini.md +++ b/docs/uk/flight_controller/pixhawk_mini.md @@ -1,327 +1,7 @@ -# Holybro Pixhawk Mini (Припинено) + -:::warning -PX4 не розробляє цей (або будь-який інший) автопілот. -Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. -::: + diff --git a/docs/uk/flight_controller/pixhawk_series.md b/docs/uk/flight_controller/pixhawk_series.md index 81cece0209..cb9bc1b9bd 100644 --- a/docs/uk/flight_controller/pixhawk_series.md +++ b/docs/uk/flight_controller/pixhawk_series.md @@ -71,7 +71,7 @@ PX4 _developers_ need to know the FMU version of their board, as this is require На дуже високому рівні, основні відмінності полягають у наступному: -- **FMUv2:** Single board with STM32427VI processor ([Pixhawk 1 (Discontinued)](../flight_controller/pixhawk.md), [pix32](../flight_controller/holybro_pix32.md), [Pixfalcon](../flight_controller/pixfalcon.md), [Drotek DroPix](../flight_controller/dropix.md)) +- **FMUv2:** Single board with STM32427VI processor (Pixhawk 1 (discontinued), Holybro pix32 (discontinued), Pixfalcon (discontinued), Drotek DroPix (discontinued)) - **FMUv3:** Identical to FMUv2, but usable flash doubled to 2MB ([Hex Cube Black](../flight_controller/pixhawk-2.md),[CUAV Pixhack v3](../flight_controller/pixhack_v3.md),[mRo Pixhawk](../flight_controller/mro_pixhawk.md), [Pixhawk Mini (Discontinued)](../flight_controller/pixhawk_mini.md)) - **FMUv4:** Increased RAM. Швидший процесор. Більше послідовних портів. No IO processor ([Pixracer](../flight_controller/pixracer.md)) - **FMUv4-PRO:** Slightly increased RAM. Більше послідовних портів. IO processor ([Pixhawk 3 Pro](../flight_controller/pixhawk3_pro.md)) diff --git a/docs/uk/flight_controller/pixracer.md b/docs/uk/flight_controller/pixracer.md index 5f1a57cc2e..b28669039b 100644 --- a/docs/uk/flight_controller/pixracer.md +++ b/docs/uk/flight_controller/pixracer.md @@ -30,7 +30,7 @@ This autopilot is [supported](../flight_controller/autopilot_pixhawk_standard.md - OneShot PWM (налаштовується) - Опціонально: запобіжний перемикач та базер -## Де купити +## Where to Buy {#store} Pixracer Pro is available from the [store.3dr.com](https://store.3dr.com/pixracer-pro/). @@ -217,7 +217,7 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make px4_fmu-v4_default ``` diff --git a/docs/uk/flight_controller/raccoonlab_fmu6x.md b/docs/uk/flight_controller/raccoonlab_fmu6x.md index 1e4da7f796..09e454e897 100644 --- a/docs/uk/flight_controller/raccoonlab_fmu6x.md +++ b/docs/uk/flight_controller/raccoonlab_fmu6x.md @@ -130,7 +130,7 @@ The manufacturer [RaccoonLab Docs](https://docs.raccoonlab.co/guide/autopilot/RC Вони повинні використовуватися за перевагою, оскільки вони містять найбільш повну та актуальну інформацію. ::: -## Де купити +## Where to Buy {#store} [RaccoonLab Store](https://raccoonlab.co/store) diff --git a/docs/uk/flight_controller/radiolink_pix6.md b/docs/uk/flight_controller/radiolink_pix6.md index b7475d5202..ff18aaeeb5 100644 --- a/docs/uk/flight_controller/radiolink_pix6.md +++ b/docs/uk/flight_controller/radiolink_pix6.md @@ -27,7 +27,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo - 32KB FRAM - FM25V02A - AT7456E OSD - Датчики - - Bosh BMI088 IMU (accel, gyro) + - Bosch BMI088 IMU (accel, gyro) - InvenSense ICM-42688 IMU (accel, gyro) - SPA06 barometer - IST8310 magnetometer @@ -48,7 +48,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo - Weight 80g - Size 94mm x 51.5mm x 14.5mm -## Де купити +## Where to Buy {#store} [Radiolink Amazon](https://www.radiolink.com.cn/pix6_where_to_buy)(International users) @@ -278,7 +278,7 @@ In addition to the [basic configuration](../config/index.md), the following para ### Powering the PIX6 The PIX6 has 2 dedicated power monitor ports, each with a 6 pin connector. -One is the Analog power monitor (`POWER1`), and the others is the I2C power monitor (`POWER2`). +One is the Analog power monitor (`POWER1`), and the other is the I2C power monitor (`POWER2`). The power module that comes with the flight controller with a wide voltage input range of 2-12S (7.4-50.4V), a maximum detection current of 90A (single ESC maximum detection current is 22.5A), a BEC output voltage of 5.3±0.2V, and a BEC output current of 2A. diff --git a/docs/uk/flight_controller/raspberry_pi_pilotpi.md b/docs/uk/flight_controller/raspberry_pi_pilotpi.md index ec6a4479cb..cb6262b937 100644 --- a/docs/uk/flight_controller/raspberry_pi_pilotpi.md +++ b/docs/uk/flight_controller/raspberry_pi_pilotpi.md @@ -175,7 +175,7 @@ ADC 3 & 4 will have VCC driven by: Системний rc script перевірить його значення і вирішить, чи повинен PX4 запускатися разом із завантаженням системи чи ні. - On: автоматичний запуск PX4 -- Off: не запускати PX4 +- Off: don't start PX4 ## Швидкий старт для розробника diff --git a/docs/uk/flight_controller/raspberry_pi_pilotpi_rpios.md b/docs/uk/flight_controller/raspberry_pi_pilotpi_rpios.md index 109efdea70..57a560dfaf 100644 --- a/docs/uk/flight_controller/raspberry_pi_pilotpi_rpios.md +++ b/docs/uk/flight_controller/raspberry_pi_pilotpi_rpios.md @@ -125,7 +125,7 @@ Don't forget to turn off the switch when it is not needed. #### CSI камера :::info -Enable CSI camera will stop anything works on I2C-0. +Enabling CSI camera will stop anything that works on I2C-0. ::: ```sh diff --git a/docs/uk/flight_controller/raspberry_pi_pilotpi_ubuntu_server.md b/docs/uk/flight_controller/raspberry_pi_pilotpi_ubuntu_server.md index d2ced1cad2..3133ffe54d 100644 --- a/docs/uk/flight_controller/raspberry_pi_pilotpi_ubuntu_server.md +++ b/docs/uk/flight_controller/raspberry_pi_pilotpi_ubuntu_server.md @@ -16,13 +16,13 @@ Ubuntu Server on RPi 4B consumes a lot of current and generates a lot of heat. - [Ubuntu Server 18.04.5 for RPi2](https://cdimage.ubuntu.com/releases/18.04.5/release/ubuntu-18.04.5-preinstalled-server-armhf+raspi2.img.xz) - [Ubuntu Server 18.04.5 for RPi3](https://cdimage.ubuntu.com/releases/18.04.5/release/ubuntu-18.04.5-preinstalled-server-armhf+raspi3.img.xz) - [Ubuntu Server 18.04.5 for RPi4](https://cdimage.ubuntu.com/releases/18.04.5/release/ubuntu-18.04.5-preinstalled-server-armhf+raspi4.img.xz) -- [Ubuntu Server 20.04.1 for RPi 2/3/4](https://cdimage.ubuntu.com/releases/20.04.1/release/ubuntu-20.04.2-preinstalled-server-arm64+raspi.img.xz) +- [Ubuntu Server 20.04.1 for RPi 2/3/4](https://old-releases.ubuntu.com/releases/focal/ubuntu-20.04.2-preinstalled-server-arm64+raspi.img.xz) #### arm64 - [Ubuntu Server 18.04.5 for RPi3](https://cdimage.ubuntu.com/releases/18.04.5/release/ubuntu-18.04.5-preinstalled-server-arm64+raspi3.img.xz) - [Ubuntu Server 18.04.5 for RPi4](https://cdimage.ubuntu.com/releases/18.04.5/release/ubuntu-18.04.5-preinstalled-server-arm64+raspi4.img.xz) -- [Ubuntu Server 20.04.1 for RPi 3/4](https://cdimage.ubuntu.com/releases/20.04.1/release/ubuntu-20.04.2-preinstalled-server-arm64+raspi.img.xz) +- [Ubuntu Server 20.04.1 for RPi 3/4](https://old-releases.ubuntu.com/releases/focal/ubuntu-20.04.2-preinstalled-server-arm64+raspi.img.xz) #### Найновіша ОС @@ -206,7 +206,7 @@ Don't forget to turn off the switch when it is not needed! #### CSI камера :::warning -Enable CSI camera will stop anything works on I2C-0. +Enabling CSI camera will stop anything that works on I2C-0. ::: ```sh diff --git a/docs/uk/flight_controller/spracingh7extreme.md b/docs/uk/flight_controller/spracingh7extreme.md index 55e5486186..4e8d0614e3 100644 --- a/docs/uk/flight_controller/spracingh7extreme.md +++ b/docs/uk/flight_controller/spracingh7extreme.md @@ -72,7 +72,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo - 36x36 мм із зразком кріплення 30.5\*30.5, отвори M4. - Втулки з м’яким кріпленням від M4 до M3 постачаються. -## Де купити +## Where to Buy {#store} The SPRacingH7EXTREME is available from the [Seriously Pro shop](https://shop.seriouslypro.com/sp-racing-h7-extreme). diff --git a/docs/uk/flight_controller/svehicle_e2.md b/docs/uk/flight_controller/svehicle_e2.md index 5d3a4aa9a1..63d96c77e7 100644 --- a/docs/uk/flight_controller/svehicle_e2.md +++ b/docs/uk/flight_controller/svehicle_e2.md @@ -58,7 +58,7 @@ These flight controllers are [manufacturer supported](../flight_controller/autop - 1x Dedicated Debug Port - FMU Debug -## Purchase Channels +## Purchase Channels {#store} Order from [S-Vehicle](https://svehicle.cn/). diff --git a/docs/uk/flight_controller/thepeach_k1.md b/docs/uk/flight_controller/thepeach_k1.md index b0bcc3b63f..6b517c497f 100644 --- a/docs/uk/flight_controller/thepeach_k1.md +++ b/docs/uk/flight_controller/thepeach_k1.md @@ -11,6 +11,10 @@ It is based on the **Pixhawk-project FMUv3** open hardware design and runs **PX4 ![ThePeach FCC-K1](../../assets/flight_controller/thepeach_k1/main.png) +:::info +This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). +::: + ## Характеристики - Основний процесор: STM32F427VIT6 diff --git a/docs/uk/flight_controller/thepeach_r1.md b/docs/uk/flight_controller/thepeach_r1.md index acb00be57e..22011b146c 100644 --- a/docs/uk/flight_controller/thepeach_r1.md +++ b/docs/uk/flight_controller/thepeach_r1.md @@ -11,6 +11,10 @@ It is based on the **Pixhawk-project FMUv3** open hardware design and runs **PX4 ![ThePeach_R1](../../assets/flight_controller/thepeach_r1/main.png) +:::info +This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). +::: + ## Характеристики - Основний процесор: STM32F427VIT6 diff --git a/docs/uk/flight_controller/x-mav_ap-h743r1.md b/docs/uk/flight_controller/x-mav_ap-h743r1.md index 03f01f3ffd..1e22be6d49 100644 --- a/docs/uk/flight_controller/x-mav_ap-h743r1.md +++ b/docs/uk/flight_controller/x-mav_ap-h743r1.md @@ -26,7 +26,7 @@ These flight controllers are [manufacturer supported](../flight_controller/autop - Сенсори на платі - Accel/Gyro: ICM-42688-P\*2(Version1), BMI270\*2(Version2) - Mag: QMC5883P - - Barometer: DPS310(Version1),SPL06(Version2) + - Barometer: SPL06 ### Інтерфейси @@ -45,7 +45,7 @@ These flight controllers are [manufacturer supported](../flight_controller/autop - FMU Debug - IO Debug -## Purchase Channels +## Purchase Channels {#store} Order from [X-MAV](https://www.x-mav.cn/). @@ -91,7 +91,7 @@ The 7 FMU PWM outputs are in 3 groups: - A1 - A4 are in one group. - A5, A6 are in a 2nd group. -- A7 is in a 3nd group. +- A7 is in a 3rd group. Channels within the same group need to use the same output rate. If any channel in a group uses DShot then all channels in the group need to use DShot. @@ -131,7 +131,7 @@ make x-mav_ap-h743r1_default 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). -## Відладочний порт +## Debug Port {#debug_port} ### SWD diff --git a/docs/uk/flight_modes/offboard.md b/docs/uk/flight_modes/offboard.md index 066a1a846f..0eba3da715 100644 --- a/docs/uk/flight_modes/offboard.md +++ b/docs/uk/flight_modes/offboard.md @@ -2,17 +2,29 @@ +:::: warning + +Offboard control with ROS 2 requires _significant care_ to ensure that it is used safely. +Please read [ROS 2 Offboard Control](#ros-2-offboard-control) carefully to fully understand the risks involved when using it. +A good understanding of [PX4 controller diagrams](../flight_stack/controller_diagrams.md) is advised. + +:::tip +[PX4 ROS 2 Interface Library](../ros2/px4_ros2_interface_lib.md) provides a safer alternative. +::: + +:::: + Апарат зберігає данні про положення, швидкість, прискорення, орієнтацію, значення сили тяги, відповідно заданим значенням, наданим деяким джерелом, зовнішнім по відношенню до польотного контролера, наприклад комп’ютером. The setpoints may be provided using MAVLink (or a MAVLink API such as [MAVSDK](https://mavsdk.mavlink.io/)) or by [ROS 2](../ros2/index.md). PX4 requires that the external controller provides a continuous 2Hz "proof of life" signal, by streaming any of the supported MAVLink setpoint messages or the ROS 2 [OffboardControlMode](../msg_docs/OffboardControlMode.md) message. -PX4 вмикає функції в оф-борді лише після отримання сигналу протягом більш ніж секунди, і відновлює керування якщо зупиняється сигнал. +PX4 enables switching to offboard control mode only after receiving the signal for more than a second, and will failsafe (controlled by [COM_OBL_RC_ACT](../advanced_config/parameter_reference.md#COM_OBL_RC_ACT)) if the signal stops. ::: info -- Для цього режиму потрібна інформація про позицію або орієнтацію за допомогою вказівника, наприклад, від GPS, оптичного потоку, візуально-інерційної одометрії, MoCap та ін. -- RC control is disabled except to change modes (you can also fly without any manual controller at all by setting the parameter [COM_RC_IN_MODE](../advanced_config/parameter_reference.md#COM_RC_IN_MODE) to 4: Stick input disabled). -- The vehicle must be already be receiving a stream of MAVLink setpoint messages or ROS 2 [OffboardControlMode](../msg_docs/OffboardControlMode.md) messages before arming in offboard mode or switching to offboard mode when flying. +- This mode requires position or pose/attitude information - e.g. GPS, optical flow, visual-inertial odometry, mocap, etc. depending on the type of offboard setpoints that the external controller sends. +- Manual control is disabled except to change modes (you can also fly without any manual controller at all by setting the parameter [COM_RC_IN_MODE](../advanced_config/parameter_reference.md#COM_RC_IN_MODE) to `4: Disable manual control`). +- The vehicle must already be receiving a stream of MAVLink setpoint messages or ROS 2 [OffboardControlMode](../msg_docs/OffboardControlMode.md) messages before arming in offboard mode or switching to offboard mode when flying. - The vehicle will exit offboard mode if MAVLink setpoint messages or `OffboardControlMode` are not received at a rate of > 2Hz. - Не всі значення координат та параметрів, дозволені MAVLink підтримуються для усіх повідомлень та транспортних засобів. Read the sections below _carefully_ to ensure only supported values are used. @@ -38,13 +50,37 @@ In order to hold position in this case the vehicle must receive a stream of `Off Операції, як-от зліт, посадка, повернення на місце запуску, можуть найкраще бути виконаними з використанням відповідних режимів. Операції такі як завантаження, місії можуть бути виконані в будь-якому режимі. -## Повідомлення ROS 2 +## ROS 2 Offboard Control + +This section describes how to perform offboard control through one of the direct ROS 2 interfaces: UXRCE-DDS or Zenoh. + +When using direct ROS 2 offboard control, PX4 setpoint messages generated by external controllers are injected into the [PX4 control pipeline](../flight_stack/controller_diagrams.md). +Because messages from internal and external controllers are indistinguishable within PX4, precise synchronization is required in order to avoid the controllers writing conflicting messages to the same topic. + +In Offboard mode (only), an external system can use [`OffboardControlMode`](#the-offboardcontrolmode-px4-message) to specify which setpoint topics PX4 should publish/not publish, allowing them to be written safely by an external controller. + +::: warning + +PX4 has no means of filtering and distinguishing ROS 2 messages from internal messages, in any mode. +In order to interwork safely, the external controller must: + +- Publish PX4 setpoint messages **ONLY** in Offboard mode. +- Specify which setpoints it will write using the `OffboardControlMode` topic. +- Stream the `OffboardControlMode` topic as a keep-alive signal. +- Stream the setpoints it wants: unlike with MAVLink, PX4 won't trigger a failsafe if setpoints aren't sent regularly. + +If external setpoints are sent in any other flight mode, or they overwrite topics that have not been disabled by PX4 when in offboard mode, collisions are likely. +This will result in unexpected, and possibly catastrophic, behaviour. + +::: + +### The `OffboardControlMode` PX4 message Наступні повідомлення ROS 2 та їх конкретні поля та значення полів допускаються для вказаних кадрів. In addition to providing heartbeat functionality, `OffboardControlMode` has two other main purposes: -1. Controls the level of the [PX4 control architecture](../flight_stack/controller_diagrams.md) at which offboard setpoints must be injected, and disables the bypassed controllers. -2. Визначає, які допустимі оцінки (положення або швидкості) необхідні, а також які повідомлення відповідно до заданих значень мають бути використані. +1. Controls which internal PX4 control modules of the [PX4 control architecture](../flight_stack/controller_diagrams.md) shall remain active and which ones shall be disabled when the vehicle is in Offboard Mode. +2. Determines which valid estimates (position, velocity, etc.) are required. The `OffboardControlMode` message is defined as shown. @@ -69,33 +105,48 @@ For rovers see the [rover section](#rover). The fields are ordered in terms of priority such that `position` takes precedence over `velocity` and later fields, `velocity` takes precedence over `acceleration`, and so on. Перше поле, яке має ненульове значення (зверху вниз), визначає, яка допустима оцінка необхідна для використання режиму безпілотного керування, а також повідомлення заданих значень, які можуть бути використані. -For example, if the `acceleration` field is the first non-zero value, then PX4 requires a valid `velocity estimate`, and the setpoint must be specified using the `TrajectorySetpoint` message. +For example, if the `acceleration` field is the first non-zero value, then PX4 requires a valid `attitude estimate`, and the setpoint must be specified using the `TrajectorySetpoint` message. | бажана кількість контролю | поле положення | поле швидкості | поле прискорення | поле орієнтації | поле кутової швидкості тіла | поле тяги та крутного момент | поле прямого приводу | необхідна оцінка | необхідне повідомлення | | ----------------------------------------------- | -------------- | -------------- | ---------------- | --------------- | --------------------------- | ---------------------------- | -------------------- | ---------------- | ------------------------------------------------------------------------------------------------------------------------------- | | положення (NED) | ✓ | - | - | - | - | - | - | положення | [TrajectorySetpoint](../msg_docs/TrajectorySetpoint.md) | | швидкість (NED) | ✗ | ✓ | - | - | - | - | - | швидкість | [TrajectorySetpoint](../msg_docs/TrajectorySetpoint.md) | -| прискорення (NED) | ✗ | ✗ | ✓ | - | - | - | - | швидкість | [TrajectorySetpoint](../msg_docs/TrajectorySetpoint.md) | -| орієнтація (FRD) | ✗ | ✗ | ✗ | ✓ | - | - | - | нічого | [VehicleAttitudeSetpoint](../msg_docs/VehicleAttitudeSetpoint.md) | -| кутова швидкість (FRD) | ✗ | ✗ | ✗ | ✗ | ✓ | - | - | нічого | [VehicleRatesSetpoint](../msg_docs/VehicleRatesSetpoint.md) | +| прискорення (NED) | ✗ | ✗ | ✓ | - | - | - | - | attitude | [TrajectorySetpoint](../msg_docs/TrajectorySetpoint.md) | +| орієнтація (FRD) | ✗ | ✗ | ✗ | ✓ | - | - | - | attitude | [VehicleAttitudeSetpoint](../msg_docs/VehicleAttitudeSetpoint.md) | +| кутова швидкість (FRD) | ✗ | ✗ | ✗ | ✗ | ✓ | - | - | angular velocity | [VehicleRatesSetpoint](../msg_docs/VehicleRatesSetpoint.md) | | тяга та крутний момент (FRD) | ✗ | ✗ | ✗ | ✗ | ✗ | ✓ | - | нічого | [VehicleThrustSetpoint](../msg_docs/VehicleThrustSetpoint.md) and [VehicleTorqueSetpoint](../msg_docs/VehicleTorqueSetpoint.md) | | двигуни та серво | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✓ | нічого | [ActuatorMotors](../msg_docs/ActuatorMotors.md) and [ActuatorServos](../msg_docs/ActuatorServos.md) | -where ✓ means that the bit is set, ✘ means that the bit is not set and `-` means that the bit is value is irrelevant. +where ✓ means that the bit is set, ✘ means that the bit is not set and `-` means that the bit value is irrelevant. :::info Before using offboard mode with ROS 2, please spend a few minutes understanding the different [frame conventions](../ros2/user_guide.md#ros-2-px4-frame-conventions) that PX4 and ROS 2 use. ::: -### Коптер +In the following, the different setpoint messages for the main supported airframes are explained. +For fixed-wing offboard control, please refer to the [PX4 ROS 2 Interface Library](../ros2/px4_ros2_interface_lib.md). + +### Мультикоптери - [px4_msgs::msg::TrajectorySetpoint](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/TrajectorySetpoint.msg) + - Підтримуються наступні вхідні комбінації: - Position setpoint (`position` different from `NaN`). Non-`NaN` values of velocity and acceleration are used as feedforward terms for the inner loop controllers. - - Velocity setpoint (`velocity` different from `NaN` and `position` set to `NaN`). Non-`NaN` values acceleration are used as feedforward terms for the inner loop controllers. + - Velocity setpoint (`velocity` different from `NaN` and `position` set to `NaN`). Non-`NaN` values of acceleration are used as feedforward terms for the inner loop controllers. - Acceleration setpoint (`acceleration` different from `NaN` and `position` and `velocity` set to `NaN`) - - All values are interpreted in NED (Nord, East, Down) coordinate system and the units are `[m]`, `[m/s]` and `[m/s^2]` for position, velocity and acceleration, respectively. + - All values are interpreted in NED (North, East, Down) coordinate system and the units are `[m]`, `[m/s]` and `[m/s^2]` for position, velocity and acceleration, respectively. + + ::: warning + + Position, velocity and acceleration control for multicopters are all handled by the `mc_pos_control` module. + This module is enabled if any of `position`, `velocity` and `acceleration` fields are set to true. + However, only the content of the `TrajectorySetpoint` messages determines which of the three controllers shall run. + + This means that even if `OffboardControlMode` messages carry the intention of velocity control (only `velocity` field is set) but non-`NaN` position values are sent in the `TrajectorySetpoint` messages, then PX4 will keep running the position controller. + + +::: - [px4_msgs::msg::VehicleAttitudeSetpoint](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/VehicleAttitudeSetpoint.msg) - Підтримується наступна комбінація введення: @@ -194,13 +245,11 @@ Ackermann rovers do not support the yaw setpoint. - [px4_msgs::msg::ActuatorMotors](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/ActuatorMotors.msg) + [px4_msgs::msg::ActuatorServos](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/ActuatorServos.msg) - Ви безпосередньо керуєте вихідними сигналами моторів та/або сервоприводів. - - Currently works at lower level than then `control_allocator` module. - Do not publish these messages when not in offboard mode. - All the values normalized in `[-1, 1]`. For outputs that do not support negative values, negative entries map to `NaN`. - `NaN` maps to disarmed. -## Повідомлення MAVLink +## MAVLink Offboard Control Наступні повідомлення MAVLink та їх конкретні поля та значення полів дозволені для вказаних кадрів літального апарату. diff --git a/docs/uk/flight_modes/return.md b/docs/uk/flight_modes/return.md index 3ca6c45f0a..5e112e952d 100644 --- a/docs/uk/flight_modes/return.md +++ b/docs/uk/flight_modes/return.md @@ -110,11 +110,13 @@ The behaviour is fairly complex because it depends on the flight mode, and wheth Mission _with_ landing pattern: -- **Mission mode:** Mission is continued in "fast-forward mode" (jumps, delay and any other non-position commands ignored, loiter and other position waypoints converted to simple waypoints) and then lands. +- **Mission mode:** + - Mission is continued in "fast-forward mode" and then lands. + - DO_JUMP commands, delays and other non-position mission items are ignored, and loiter and other position waypoints are converted to simple waypoints. - **Auto mode other than mission mode:** - Ascend to a safe [minimum return altitude](#minimum-return-altitude) above any expected obstacles. - Летіть безпосередньо до найближчої точки маршруту (для FW - не посадкової точки) і знижуйтеся до висоти точки маршруту. - - Продовжуйте місію в режимі швидкої відтворення з цієї точки маршруту. + - Continue mission in fast forward mode from that waypoint, using the same traversal rules as above. - **Manual modes:** - Ascend to a safe [minimum return altitude](#minimum-return-altitude) above any expected obstacles. - Прямий польот до позиції послідовності посадки та спуск до висоти позначеної точки @@ -124,7 +126,7 @@ Mission _without_ landing pattern defined: - **Mission mode:** - Місія виконується "швидко назад" (у зворотному напрямку) починаючи з попередньої точки маршруту - - Переходи, затримки та будь-які інші команди, що не стосуються позиції, ігноруються. Точки залишку та інші позиційні точки перетворюються на прості точки маршруту. + - DO_JUMP commands, delays and other non-position mission items are ignored, and loiter and other position waypoints are converted to simple waypoints. - Транспортні засоби VTOL переходять у режим FW (за потреби) перед тим, як летіти місію задом наперед. - On reaching waypoint 1, the vehicle ascends to the [minimum return altitude](#minimum-return-altitude) and flies to the home position (where it [lands or waits](#loiter-landing-at-destination)). - **Auto mode other than mission mode:** @@ -136,6 +138,11 @@ Mission _without_ landing pattern defined: Якщо місія змінюється під час режиму повернення, тоді поведінка повторно оцінюється на основі нової місії за тими ж правилами, що й вище (наприклад, якщо нова місія не має послідовності приземлення, а ви в місії, місія змінюється). +:::info +For `RTL_TYPE=4`, PX4 currently chooses between continuing to a mission landing and reversing toward home by comparing raw mission item indices. +This is only an approximation of the flown path length, because the number if mission items is not indicative of the distance remaining and non-position items are also counted. +::: + ### Тип повернення додому/точка збору (RTL_TYPE=3) У цьому типі повернення транспортний засіб: @@ -205,15 +212,15 @@ For this reason fixed-wing vehicles are configured to use [Mission landing/reall The RTL parameters are listed in [Parameter Reference > Return Mode](../advanced_config/parameter_reference.md#return-mode) (and summarised below). -| Параметр | Опис | -| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [RTL_TYPE](../advanced_config/parameter_reference.md#RTL_TYPE) | Return mechanism (path and destination).
`0`: Return to a rally point or home (whichever is closest) via direct path.
`1`: Return to a rally point or the mission landing pattern start point (whichever is closest), via direct path. Якщо не визначено ні місійної посадки, ні точок ралі, повертайтеся додому через прямий шлях. If the destination is a mission landing pattern, follow the pattern to land.
`2`: Use mission path fast-forward to landing if a landing pattern is defined, otherwise fast-reverse to home. Ігноруємо точки ралі. Fly direct to home if no mission plan is defined.
`3`: Return via direct path to closest destination: home, start of mission landing pattern or safe point. Якщо пунктом призначення є схема приземлення, дотримуйтеся цієї схеми, щоб приземлитися. | -| [RTL_RETURN_ALT](../advanced_config/parameter_reference.md#RTL_RETURN_ALT) | Повернути висоту в метрах (за замовчуванням: 60м), коли [RTL_CONE_ANG](../advanced_config/parameter_reference.md#RTL_CONE_ANG) дорівнює 0. Якщо вже вище цієї величини, транспортний засіб повернеться на поточну висоту. | -| [RTL_DESCEND_ALT](../advanced_config/parameter_reference.md#RTL_DESCEND_ALT) | Мінімальна висота повернення і висота, на якій повітряне судно сповільнює або зупиняє своє початкове зниження з вищої висоти повернення (за замовчуванням: 30 м) | -| [RTL_LAND_DELAY](../advanced_config/parameter_reference.md#RTL_LAND_DELAY) | Time to wait at `RTL_DESCEND_ALT` before landing (default: 0.5s) -by default this period is short so that the vehicle will simply slow and then land immediately. Якщо встановлено значення -1, система буде кружляти на висоті `RTL_DESCEND_ALT` замість посадки. Затримка надається для того, щоб ви могли налаштувати час для розгортання шасі для посадки (автоматично спрацьовує). | -| [RTL_MIN_DIST](../advanced_config/parameter_reference.md#RTL_MIN_DIST) | Мінімальна горизонтальна відстань від домашньої позиції, щоб викликати підйом на висоту повернення, вказану "конусом". If the vehicle is horizontally closer than this distance to home, it will return at its current altitude or `RTL_DESCEND_ALT` (whichever is higher) instead of first ascending to RTL_RETURN_ALT. | -| [RTL_CONE_ANG](../advanced_config/parameter_reference.md#RTL_CONE_ANG) | Половина кута конуса, який визначає висоту повернення транспортного засобу RTL. Значення (у градусах): 0, 25, 45, 65, 80, 90. Зауважте, що 0 означає "без конуса" (завжди повертається на висоту `RTL_RETURN_ALT` або вище), тоді як 90 показує, що транспортний засіб повинен повертатися на поточну висоту або `RTL_DESCEND_ALT` (яка вище). | -| [COM_RC_OVERRIDE](../advanced_config/parameter_reference.md#COM_RC_OVERRIDE) | Контролює, чи рух палиць на багтрековому літальному апараті (або VTOL у режимі MC) викликає зміну режиму на [Режим позиціонування](../flight_modes_mc/position.md) (крім випадку, коли транспортний засіб вирішує критичне аварійне вимкнення батареї). Це можна окремо увімкнути для автоматичних режимів та для режиму поза бортом, і в автоматичних режимах воно включено за замовчуванням. | -| [COM_RC_STICK_OV](../advanced_config/parameter_reference.md#COM_RC_STICK_OV) | Кількість рухів стиків, яка викликає перехід у [режим Положення](../flight_modes_mc/position.md) (якщо [COM_RC_OVERRIDE](#COM_RC_OVERRIDE) увімкнено). | -| [RTL_LOITER_RAD](../advanced_config/parameter_reference.md#RTL_LOITER_RAD) | [Тільки фіксоване крило] Радіус круга обертання (у значенні [RTL_LAND_DELAY](#RTL_LAND_DELAY)). | -| [MIS_TKO_LAND_REQ](../advanced_config/parameter_reference.md#MIS_TKO_LAND_REQ) | Вказує, чи _необхідний_ місійний маршрут посадки або зльоту. Зазвичай літаки з фіксованим крилом встановлюють це для вимоги до посадкового маршруту, але VTOL - ні. | +| Параметр | Опис | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [RTL_TYPE](../advanced_config/parameter_reference.md#RTL_TYPE) | Return mechanism (path and destination).
`0`: Return to a rally point or home (whichever is closest) via direct path.
`1`: Return to a rally point or the mission landing pattern start point (whichever is closest), via direct path. Якщо не визначено ні місійної посадки, ні точок ралі, повертайтеся додому через прямий шлях. If the destination is a mission landing pattern, follow the pattern to land.
`2`: Use the mission path to landing while skipping DO_JUMP and other non-position mission items if a landing pattern is defined, otherwise fast-reverse to home with the same traversal rules. Ігноруємо точки ралі. Fly direct to home if no mission plan is defined.
`3`: Return via direct path to closest destination: home, start of mission landing pattern or safe point. Якщо пунктом призначення є схема приземлення, дотримуйтеся цієї схеми, щоб приземлитися. | +| [RTL_RETURN_ALT](../advanced_config/parameter_reference.md#RTL_RETURN_ALT) | Повернути висоту в метрах (за замовчуванням: 60м), коли [RTL_CONE_ANG](../advanced_config/parameter_reference.md#RTL_CONE_ANG) дорівнює 0. Якщо вже вище цієї величини, транспортний засіб повернеться на поточну висоту. | +| [RTL_DESCEND_ALT](../advanced_config/parameter_reference.md#RTL_DESCEND_ALT) | Мінімальна висота повернення і висота, на якій повітряне судно сповільнює або зупиняє своє початкове зниження з вищої висоти повернення (за замовчуванням: 30 м) | +| [RTL_LAND_DELAY](../advanced_config/parameter_reference.md#RTL_LAND_DELAY) | Time to wait at `RTL_DESCEND_ALT` before landing (default: 0.5s) -by default this period is short so that the vehicle will simply slow and then land immediately. Якщо встановлено значення -1, система буде кружляти на висоті `RTL_DESCEND_ALT` замість посадки. Затримка надається для того, щоб ви могли налаштувати час для розгортання шасі для посадки (автоматично спрацьовує). | +| [RTL_MIN_DIST](../advanced_config/parameter_reference.md#RTL_MIN_DIST) | Мінімальна горизонтальна відстань від домашньої позиції, щоб викликати підйом на висоту повернення, вказану "конусом". If the vehicle is horizontally closer than this distance to home, it will return at its current altitude or `RTL_DESCEND_ALT` (whichever is higher) instead of first ascending to RTL_RETURN_ALT. | +| [RTL_CONE_ANG](../advanced_config/parameter_reference.md#RTL_CONE_ANG) | Половина кута конуса, який визначає висоту повернення транспортного засобу RTL. Значення (у градусах): 0, 25, 45, 65, 80, 90. Зауважте, що 0 означає "без конуса" (завжди повертається на висоту `RTL_RETURN_ALT` або вище), тоді як 90 показує, що транспортний засіб повинен повертатися на поточну висоту або `RTL_DESCEND_ALT` (яка вище). | +| [COM_RC_OVERRIDE](../advanced_config/parameter_reference.md#COM_RC_OVERRIDE) | Контролює, чи рух палиць на багтрековому літальному апараті (або VTOL у режимі MC) викликає зміну режиму на [Режим позиціонування](../flight_modes_mc/position.md) (крім випадку, коли транспортний засіб вирішує критичне аварійне вимкнення батареї). Це можна окремо увімкнути для автоматичних режимів та для режиму поза бортом, і в автоматичних режимах воно включено за замовчуванням. | +| [COM_RC_STICK_OV](../advanced_config/parameter_reference.md#COM_RC_STICK_OV) | Кількість рухів стиків, яка викликає перехід у [режим Положення](../flight_modes_mc/position.md) (якщо [COM_RC_OVERRIDE](#COM_RC_OVERRIDE) увімкнено). | +| [RTL_LOITER_RAD](../advanced_config/parameter_reference.md#RTL_LOITER_RAD) | [Тільки фіксоване крило] Радіус круга обертання (у значенні [RTL_LAND_DELAY](#RTL_LAND_DELAY)). | +| [MIS_TKO_LAND_REQ](../advanced_config/parameter_reference.md#MIS_TKO_LAND_REQ) | Вказує, чи _необхідний_ місійний маршрут посадки або зльоту. Зазвичай літаки з фіксованим крилом встановлюють це для вимоги до посадкового маршруту, але VTOL - ні. | diff --git a/docs/uk/flight_modes_fw/mission.md b/docs/uk/flight_modes_fw/mission.md index a45e78c840..c476949d5f 100644 --- a/docs/uk/flight_modes_fw/mission.md +++ b/docs/uk/flight_modes_fw/mission.md @@ -61,7 +61,7 @@ _Режим місії_ змушує транспортний засіб вик Якщо транспортний засіб не захоплював зображення, коли він був призупинений, під час відновлення він рухатиметься зі своєї _поточної позиції_ до тієї ж точки шляху, до якої він спочатку рухався. Якщо транспортний засіб захоплював зображення (має елементи спуску камери), він замість цього рухатиметься зі своєї поточної позиції до останньої точки шляху, якою він проїхав (перед зупинкою), а потім пройде свій шлях з тією самою швидкістю та з такою самою поведінкою спуску камери. Це забезпечує, що планований шлях зафіксований під час місій з опитування/камери. -Місію можна завантажити, коли транспортний засіб зупинений, у такому випадку поточний активний елемент місії встановлюється на 1. +A mission can be uploaded while the vehicle is paused, in which case the current active mission item is set to 1. :::info Коли місію призупинено під час спрацювання камери на транспортному засобі, PX4 встановлює поточний активний пункт місії на попередню точку маршруту, так що при відновленні місії транспортний засіб буде повторювати свій останній етап місії. @@ -100,8 +100,8 @@ _QGroundControl_ надає додаткову підтримку обробки Для додаткової інформації дивіться: -- [Видалити місію після посадки транспортного засобу](https://docs.qgroundcontrol.com/master/en/qgc-user-guide/releases/stable_v3.2_long.html#remove-mission-after-vehicle-lands) -- [Відновити місію після режиму Повернення](https://docs.qgroundcontrol.com/master/en/qgc-user-guide/releases/stable_v3.2_long.html#resume-mission) +- [Remove mission after vehicle lands](https://docs.qgroundcontrol.com/Stable_V4.3/en/qgc-user-guide/releases/stable_v3.2_long.html#remove-mission-after-vehicle-lands) +- [Resume mission after Return mode](https://docs.qgroundcontrol.com/Stable_V4.3/en/qgc-user-guide/releases/stable_v3.2_long.html#resume-mission) ## Параметри місії @@ -215,7 +215,7 @@ PX4 очікує пряму лінію від попередньої точки ![acc-rad](../../assets/flying/acceptance_radius_mission.png) Транспортні засоби переходять на наступну точку шляху, як тільки вони увійшли в радіус прийняття. -Це визначається "відстанню L1", яка обчислюється з двох параметрів: [NPFG_DAMPING](../advanced_config/parameter_reference.md#NPFG_DAMPING) та [NPFG_PERIOD](../advanced_config/parameter_reference.md#NPFG_PERIOD), та поточною швидкістю на землі. +This is defined by the "L1 distance", which is computed from two parameters: [NPFG_DAMPING](../advanced_config/parameter_reference.md#NPFG_DAMPING) and [NPFG_PERIOD](../advanced_config/parameter_reference.md#NPFG_PERIOD), and the current ground speed. За замовчуванням, це приблизно 70 метрів. Рівняння: @@ -317,7 +317,7 @@ A fixed-wing mission requires a `Takeoff` mission item to takeoff; if however th Переривання посадки призводить до вибору курсу вище для формування орбіти над цільовою точкою на землі. Максимальна висота поточної висоти літака та [MIS_LND_ABRT_ALT](#MIS_LND_ABRT_ALT) встановлюється як висота витягу абортного орбіту відносно (вище) пункту посадки. -Конфігурація посадки (наприклад, закрилки, спойлери, швидкість повітряного судна під час посадки) відключена під час спинення, і повітряне судно летить в умовах круїзу. +Landing configuration (e.g. flaps, spoilers, landing airspeed) is disabled during abort and the aircraft flies in cruise conditions. Команда відміни вимкнена під час спалаху для безпеки. Оператори все ще можуть вручну припинити посадку, переключившись на будь-який ручний режим, такий як [Режим стабілізації](../flight_modes_fw/stabilized.md)), але варто зазначити, що це ризиковано! @@ -357,7 +357,7 @@ A fixed-wing mission requires a `Takeoff` mission item to takeoff; if however th :::info Відштовхування (Nudging) не повинно використовуватися для доповнення поганого налаштування контролю позиції. -Якщо транспортний засіб постійно показує погану роботу слідування по визначеній траєкторії, будь ласка, зверніться до [керівництва з настройки керування фіксованим крилом](../flight_modes_fw/position.md) за інструкціями. +If the vehicle is regularly showing poor tracking performance on a defined path, please refer to the [fixed-wing control tuning guide](../flight_modes_fw/position.md) for instruction. ::: | Параметр | Опис | @@ -368,7 +368,7 @@ A fixed-wing mission requires a `Takeoff` mission item to takeoff; if however th ### Обмеження безпеки на низькій висоті -У режимі посадки використовується датчик відстані для визначення близькості до землі, а геометрія підфрейму використовується для розрахунку обмежень кочення для запобігання удару крилом. +In landing mode, the distance sensor is used to determine proximity to the ground, and the airframe's geometry is used to calculate roll constraints to prevent wing strike. ![Посадка літака з фіксованим криломТоркання(../../assets/flying/wing_geometry.png) diff --git a/docs/uk/flight_modes_fw/takeoff.md b/docs/uk/flight_modes_fw/takeoff.md index 9edfa564da..f2b7354659 100644 --- a/docs/uk/flight_modes_fw/takeoff.md +++ b/docs/uk/flight_modes_fw/takeoff.md @@ -14,7 +14,7 @@ Vehicles are [hand or catapult launched](#catapult-hand-launch) by default, but - Flying vehicles will failsafe if they lose the altitude estimate. - Disarmed vehicles can switch to mode without valid altitude estimate but can't arm. - Перемикачі радіокерування можна використовувати для зміни режимів польоту. -- Рух стіка радіокерування ігнорується при зліті за допомогою катапульти, але може бути використана для легкого перекочування транспортного засобу при зльоті зі злітної смуги. +- RC stick movement is ignored in catapult takeoff but can be used to nudge the vehicle in runway takeoff. - The [Failure Detector](../config/safety.md#failure-detector) will automatically stop the engines if there is a problem on takeoff. @@ -85,6 +85,7 @@ The vehicle always respects normal FW max/min throttle settings during takeoff ( In _catapult/hand-launch mode_ the vehicle waits to detect launch (based on acceleration trigger). On launch it enables the motor(s) and climbs with the maximum climb rate [FW_T_CLMB_MAX](#FW_T_CLMB_MAX) while keeping the pitch setpoint above [FW_TKO_PITCH_MIN](#FW_TKO_PITCH_MIN). Once it reaches [MIS_TAKEOFF_ALT](#MIS_TAKEOFF_ALT) it will automatically switch to [Hold mode](../flight_modes_fw/hold.md) and loiter. +It is possible to delay the activation of the motors and control surfaces separately, see parameters [FW_LAUN_MOT_DEL](#FW_LAUN_MOT_DEL), [FW_LAUN_CS_LK_DY](#FW_LAUN_CS_LK_DY) and [CA_CS_LAUN_LK](#CA_CS_LAUN_LK). The later is also exposed in the actuator configuration page under the advanced view. Всі рухи стіку радіоуправління ігноруються під час повного взлітного процесу. @@ -99,16 +100,18 @@ Once it reaches [MIS_TAKEOFF_ALT](#MIS_TAKEOFF_ALT) it will automatically switch The _launch detector_ is affected by the following parameters: -| Параметр | Опис | -| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | -| [FW_LAUN_DETCN_ON](../advanced_config/parameter_reference.md#FW_LAUN_DETCN_ON) | Увімкнути автоматичне визначення запуску. Якщо вимкнені двигуни обертаються при підготовці до польоту | -| [FW_LAUN_AC_THLD](../advanced_config/parameter_reference.md#FW_LAUN_AC_THLD) | Поріг прискорення (прискорення в напрямку руху тіла повинно бути вище цієї величини) | -| [FW_LAUN_AC_T](../advanced_config/parameter_reference.md#FW_LAUN_AC_T) | Час спрацьовування (прискорення повинно бути вище порогу на цю кількість секунд) | -| [FW_LAUN_MOT_DEL](../advanced_config/parameter_reference.md#FW_LAUN_MOT_DEL) | Затримка від виявлення запуску до відкручування мотору | +| Параметр | Опис | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | +| [FW_LAUN_DETCN_ON](../advanced_config/parameter_reference.md#FW_LAUN_DETCN_ON) | Увімкнути автоматичне визначення запуску. Якщо вимкнені двигуни обертаються при підготовці до польоту | +| [FW_LAUN_AC_THLD](../advanced_config/parameter_reference.md#FW_LAUN_AC_THLD) | Acceleration threshold (norm of acceleration must be above this value) | +| [FW_LAUN_AC_T](../advanced_config/parameter_reference.md#FW_LAUN_AC_T) | Час спрацьовування (прискорення повинно бути вище порогу на цю кількість секунд) | +| [FW_LAUN_MOT_DEL](../advanced_config/parameter_reference.md#FW_LAUN_MOT_DEL) | Затримка від виявлення запуску до відкручування мотору | +| [FW_LAUN_CS_LK_DY](../advanced_config/parameter_reference.md#FW_LAUN_CS_LK_DY) | Delay from launch detection to unlocking the control surfaces | +| [CA_CS_LAUN_LK](../advanced_config/parameter_reference.md#CA_CS_LAUN_LK) | Bitmask to select which control surfaces are to be locked during launch | ## Runway Takeoff {#runway_launch} -Зліт зі злітної смуги можна використовувати тільки для транспортних засобів з посадковим шасі та керованим колесом. +Runway takeoffs can be used by vehicles with landing gear and steerable wheel (only). You will first need to enable the wheel controller using the parameter [FW_W_EN](#FW_W_EN). Транспортний засіб повинен бути в центрі та вирівняний по злітній смузі, коли починається зльот. diff --git a/docs/uk/flight_modes_mc/follow_me.md b/docs/uk/flight_modes_mc/follow_me.md index 3eef36e4f3..5b30d2c8ce 100644 --- a/docs/uk/flight_modes_mc/follow_me.md +++ b/docs/uk/flight_modes_mc/follow_me.md @@ -31,7 +31,7 @@ The vehicle will automatically yaw to face and follow the target from a specifie Користувачі можуть налаштувати кут слідування, висоту та відстань за допомогою пульта дистанційного керування, як показано вище: - _Follow Height_ is controlled with the `up-down` input ("Throttle"). - Центруйте палицю, щоб тримати відстеження цілі на постійній висоті. Підніміть або опустіть палицю, щоб налаштувати висоту. + Center the stick to keep follow the target at a constant height. Підніміть або опустіть палицю, щоб налаштувати висоту. - _Follow Distance_ is controlled with the `forward-back` input ("Pitch"). Тиснення палиці вперед збільшує відстань слідування, витягування назад зменшує відстань. - _Follow Angle_ is controlled with the `left-right` input ("Roll"). @@ -117,7 +117,7 @@ The altitude control mode determine whether the vehicle altitude is relative to - `2D + Terrain` makes the drone follow at a fixed height relative to the terrain underneath it, using information from a distance sensor. - If the vehicle does not have a distance sensor following will be identical to `2D tracking`. - Датчики відстані не завжди точні, і транспортні засоби можуть бути "скачущими" під час польоту в цьому режимі. - - Зверніть увагу, що висота вимірюється відносно землі під транспортним засобом, а не цільового об'єкта. + - Note that height is relative to the ground underneath the vehicle, not the follow target. Дрон може не слідувати за змінами висоти цілі! - `3D tracking` mode makes the drone follow at a height relative to the follow target, as supplied by its GPS sensor. diff --git a/docs/uk/flight_modes_mc/mission.md b/docs/uk/flight_modes_mc/mission.md index d603c354df..f5a36d1419 100644 --- a/docs/uk/flight_modes_mc/mission.md +++ b/docs/uk/flight_modes_mc/mission.md @@ -64,7 +64,7 @@ They may also be created by a MAVLink API such as [MAVSDK](../robotics/mavsdk.md Якщо транспортний засіб не захоплював зображення, коли він був призупинений, під час відновлення він рухатиметься зі своєї _поточної позиції_ до тієї ж точки шляху, до якої він спочатку рухався. Якщо транспортний засіб захоплював зображення (має елементи спуску камери), він замість цього рухатиметься зі своєї поточної позиції до останньої точки шляху, якою він проїхав (перед зупинкою), а потім пройде свій шлях з тією самою швидкістю та з такою самою поведінкою спуску камери. Це забезпечує, що планований шлях зафіксований під час місій з опитування/камери. -Місію можна завантажити, коли транспортний засіб зупинений, у такому випадку поточний активний елемент місії встановлюється на 1. +A mission can be uploaded while the vehicle is paused, in which case the current active mission item is set to 1. :::info Коли місію призупинено під час спрацювання камери на транспортному засобі, PX4 встановлює поточний активний пункт місії на попередню точку маршруту, так що при відновленні місії транспортний засіб буде повторювати свій останній етап місії. @@ -100,8 +100,8 @@ _QGroundControl_ надає додаткову підтримку обробки Для додаткової інформації дивіться: -- [Видалити місію після посадки транспортного засобу](https://docs.qgroundcontrol.com/master/en/qgc-user-guide/releases/stable_v3.2_long.html#remove-mission-after-vehicle-lands) -- [Відновити місію після режиму Повернення](https://docs.qgroundcontrol.com/master/en/qgc-user-guide/releases/stable_v3.2_long.html#resume-mission) +- [Remove mission after vehicle lands](https://docs.qgroundcontrol.com/Stable_V4.3/en/qgc-user-guide/releases/stable_v3.2_long.html#remove-mission-after-vehicle-lands) +- [Resume mission after Return mode](https://docs.qgroundcontrol.com/Stable_V4.3/en/qgc-user-guide/releases/stable_v3.2_long.html#resume-mission) ## Параметри місії diff --git a/docs/uk/flight_modes_mc/position.md b/docs/uk/flight_modes_mc/position.md index 51abfe20f2..4c28fa2a24 100644 --- a/docs/uk/flight_modes_mc/position.md +++ b/docs/uk/flight_modes_mc/position.md @@ -78,7 +78,7 @@ All the parameters in the [Multicopter Position Control](../advanced_config/para ### Втрата позиції / безпека Режим позиціонування залежить від наявності прийнятної оцінки позиції. -If the estimate falls below acceptable levels, for example due to GPS loss, this may trigger a [Position (GPS) Loss Failsafe](../config/safety.md#position-gnss-loss-failsafe). +If the estimate falls below acceptable levels, for example due to GPS loss, this may trigger a [Position (GPS) Loss Failsafe](../config/safety.md#position-loss-failsafe). Залежно від конфігурації, наявності пульта дистанційного керування та наявності достатньої оцінки висоти, PX4 може переключитися в режим висоти, ручний режим, режим посадки або завершити роботу. ## Дивіться також diff --git a/docs/uk/flight_modes_mc/return.md b/docs/uk/flight_modes_mc/return.md index 4072d59290..67a77cd729 100644 --- a/docs/uk/flight_modes_mc/return.md +++ b/docs/uk/flight_modes_mc/return.md @@ -48,7 +48,7 @@ Multicopter підтримує [інші типи повернення PX4](../f ![Режим повернення конуса](../../assets/flying/rtl_cone.jpg) -Конус впливає на мінімальну висоту повернення, якщо режим повернення активується всередині циліндра, що визначений максимальним радіусом конуса та `RTL_RETURN_ALT`: за межами цього циліндра використовується `RTL_RETURN_ALT`. +The cone affects the minimum return altitude if return mode is triggered within the cylinder defined by the maximum cone radius and `RTL_RETURN_ALT`: outside this cylinder `RTL_RETURN_ALT` is used. У межах коду мінімальна висота повернення - це перетин позиції транспортного засобу з конусом, або `RTL_DESCEND_ALT` (яка буде вище). Іншими словами, транспортний засіб завжди повинен підніматися принаймні до значення `RTL_DESCEND_ALT`, якщо воно нижче цього значення. diff --git a/docs/uk/flight_modes_mc/throw_launch.md b/docs/uk/flight_modes_mc/throw_launch.md index 33477986ec..c69ec8407e 100644 --- a/docs/uk/flight_modes_mc/throw_launch.md +++ b/docs/uk/flight_modes_mc/throw_launch.md @@ -22,7 +22,7 @@ When throw launch is enabled, the vehicle is initially armed in a "lockdown" sta Транспортний засіб виявляє, що його викинули на підставі досягнення певної швидкості (5 м/с), а потім запускає двигуни на вершині кидка (як тільки він визначає, що почав падати). Вам потрібно кинути транспортний засіб настільки високо, щоб він міг стабілізувати свою висоту добре до того, як впаде десь близько до людей або перешкод. -Примітки: +Notes: - Режим за замовчуванням вимкнено, і його необхідно активувати, використовуючи [параметр](#parameters), перш ніж озброювати. - Коли ввімкнено, ви не можете злітати з землі, використовуючи звичайні режими. diff --git a/docs/uk/flight_modes_rover/auto.md b/docs/uk/flight_modes_rover/auto.md index f1a79014ed..4a88acbd6a 100644 --- a/docs/uk/flight_modes_rover/auto.md +++ b/docs/uk/flight_modes_rover/auto.md @@ -13,14 +13,14 @@ The mission is typically created and uploaded with a Ground Control Station (GCS The following commands can be used in missions at time of writing (PX4 v1.16): -| QGC mission item | Команда | Опис | -| ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------- | -| Mission start | [MAV_CMD_MISSION_START](MAV_CMD_MISSION_START) | Starts the mission. | -| Waypoint | [MAV_CMD_NAV_WAYPOINT](MAV_CMD_NAV_WAYPOINT) | Navigate to waypoint. | -| Return to launch | [MAV\_CMD\_NAV\_RETURN\_TO\_LAUNCH][MAV_CMD_NAV_RETURN_TO_LAUNCH] | Return to the launch location. | -| Change speed | [MAV\_CMD\_DO\_CHANGE\_SPEED][MAV_CMD_DO_CHANGE_SPEED] | Change the speed setpoint | -| Set launch location | [MAV_CMD_DO_SET_HOME](MAV_CMD_DO_SET_HOME) | Changes launch location to specified coordinates. | -| Jump to item (all) | [MAV\_CMD\_DO\_JUMP][MAV_CMD_DO_JUMP] (and other jump commands) | Jump to specified mission item. | +| QGC mission item | Команда | Опис | +| ------------------------------------- | ----------------------------------------------------------------- | ----------------------------------------------------------------- | +| Mission start | [MAV\_CMD\_MISSION\_START][MAV_CMD_MISSION_START] | Starts the mission. | +| Waypoint | [MAV\_CMD\_NAV\_WAYPOINT][MAV_CMD_NAV_WAYPOINT] | Navigate to waypoint. | +| Return to launch | [MAV\_CMD\_NAV\_RETURN\_TO\_LAUNCH][MAV_CMD_NAV_RETURN_TO_LAUNCH] | Return to the launch location. | +| Change speed | [MAV\_CMD\_DO\_CHANGE\_SPEED][MAV_CMD_DO_CHANGE_SPEED] | Change the speed setpoint | +| Set launch location | [MAV\_CMD\_DO\_SET\_HOME][MAV_CMD_DO_SET_HOME] | Changes launch location to specified coordinates. | +| Jump to item (all) | [MAV\_CMD\_DO\_JUMP][MAV_CMD_DO_JUMP] (and other jump commands) | Jump to specified mission item. | [MAV_CMD_MISSION_START]: https://mavlink.io/en/messages/common.html#MAV_CMD_MISSION_START [MAV_CMD_NAV_WAYPOINT]: https://mavlink.io/en/messages/common.html#MAV_CMD_NAV_WAYPOINT diff --git a/docs/uk/flight_modes_vtol/mission.md b/docs/uk/flight_modes_vtol/mission.md index 30821c2d6f..622da4c03e 100644 --- a/docs/uk/flight_modes_vtol/mission.md +++ b/docs/uk/flight_modes_vtol/mission.md @@ -11,7 +11,7 @@ VTOL-транспортні засоби дотримуються поведін - [Режим Місії (MC)](../flight_modes_mc/mission.md) - [Режим Місії (FW)](../flight_modes_fw/mission.md) -У наступних розділах описується поведінка режиму місії, яка є специфічною для VTOL. +The following sections outline mission mode behaviour that is VTOL specific. ## Команди місій diff --git a/docs/uk/flight_stack/controller_diagrams.md b/docs/uk/flight_stack/controller_diagrams.md index c124360410..e1cf1ab811 100644 --- a/docs/uk/flight_stack/controller_diagrams.md +++ b/docs/uk/flight_stack/controller_diagrams.md @@ -110,7 +110,7 @@ Make sure to tune the attitude controller before attempting to tune TECS. Збільшення дросельної заслінки збільшить швидкість повітря, але також збільшиться висота через збільшення підйомної сили. Таким чином, ми маємо два входи (кут нахилу та дросель), які обидва впливають на два виходи (швидкість повітря та висоту), що ускладнює проблему керування. -TECS пропонує рішення, представляючи проблему в термінах енергій, а не початкових заданих значень. +TECS offers a solution by representing the problem in terms of energies rather than the original setpoints. Повна енергія літака — це сума кінетичної та потенціальної енергії. Тяга (через керування дроселем) збільшує загальний стан енергії літака. Даний загальний енергетичний стан може бути досягнутий довільними комбінаціями потенціальної та кінетичної енергій. Іншими словами, польот на великій висоті, але з низькою швидкістю, може бути еквівалентним польоту на низькій висоті, але з більшою швидкістю повітря з точки зору загальної енергії. Ми називаємо це балансом конкретної енергії і обчислюємо його за поточною висотою та встановленим значенням швидкості повітря. Баланс конкретної енергії контролюється за допомогою кута тангажу літака. @@ -164,6 +164,42 @@ $$\dot{B} = \gamma - \frac{\dot{V_T}}{g}$$ ## Контролер положення фіксованого крила +### Setpoint modificaiton + +Most fixed-wing aircraft cannot generate a sustained yaw rate using the rudder alone. As a result, the yaw component of the quaternion attitude error should be removed before computing the control action. + +This is achieved by premultiplying the setpoint quaternion with a rotation about the global down axis. The additional rotation cancels the yaw component of the attitude error while preserving the roll and pitch components. + +The yaw offset is + +$$ +\psi =-2\frac{\hat{q}_0 q_3 - \hat{q}_1 q_2 + \hat{q}_2 q_1 -\hat{q}_3 q_0} +{\hat{q}_0 q_0 - \hat{q}_1 q_1 - \hat{q}_2 q_2 + \hat{q}_3 q_3} +$$ + +The quaternion representing the yaw offset is + +$$ +ℚ_{\text{yaw}} = +\operatorname{normalize} +\left( +\begin{bmatrix} +1 \ +0 \ +0 \ +\frac{\psi}{2} +\end{bmatrix} +\right) +$$ + +The corrected setpoint quaternion is then obtained by applying the rotation + +$$ +ℚ_{\text{sp, corrected}} = ℚ_{\text{yaw}} \otimes ℚ_{sp} +$$ + +### Quaternion based attitude controller + ![FW Attitude Controller Diagram](../../assets/diagrams/px4_fw_attitude_controller_diagram.png) -### Tailsitter +### Tailsitter {#tailsitter_video} [UAV Works VALAQ Patrol Tailsitter](https://www.valaqpatrol.com/valaq_patrol_technical_data/) @@ -136,7 +137,7 @@ VTOL Control & Airspeed Fault Detection (PX4 Developer Summit 2019) -### Tiltrotor +### Tiltrotor {#tiltrotor_video} [Convergence Tiltrotor](../frames_vtol/vtol_tiltrotor_eflite_convergence_pixfalcon.md) diff --git a/docs/uk/frames_vtol/tailsitter.md b/docs/uk/frames_vtol/tailsitter.md index 35f01e782f..9518661446 100644 --- a/docs/uk/frames_vtol/tailsitter.md +++ b/docs/uk/frames_vtol/tailsitter.md @@ -89,35 +89,36 @@ This section contains videos that are specific to Tailsitter VTOL (videos that a ## Галерея -
-
- -
- wingtraone -
-
-
- -
- -
-
-
- -
- -
-
-
- -
- -
-
- -
+:::: tabs + +:::tab WingtraOne +[WingtraOne](https://wingtra.com/mapping-drone-fast-accurate-surveying/) + +![Wingtra: WingtraOne VTOL Duo Tailsitter](../../assets/airframes/vtol/wingtraone/hero.jpg) +::: + +:::tab Skypull +[Skypull](https://www.skypull.technology/) + +![Skypull SP-1 VTOL QuadTailsitter](../../assets/airframes/vtol/skypull/skypull_sp1.jpg) +::: + +:::tab TBS Caipiroshka +[TBS Caipiroshka](../frames_vtol/vtol_tailsitter_caipiroshka_pixracer.md) + +![TBS Caipiroshka](../../assets/airframes/vtol/caipiroshka/caipiroshka.jpg) +::: + +:::tab Woshark +[Woshark](http://uav-cas.ac.cn/WOSHARK/) + +![Woshark](../../assets/airframes/vtol/xdwgood_ax1800/hero.jpg) +::: + +:::tab VALAQ Patrol Tailsitter +[UAV Works VALAQ Patrol Tailsitter](https://www.valaqpatrol.com/valaq_patrol_technical_data/) + +!["UAV Works VALAQ Patrol Tailsitte](../../assets/airframes/vtol/uav_works_valaq_patrol/hero.jpg) +::: + +:::: diff --git a/docs/uk/frames_vtol/vtol_quadplane_falcon_vertigo_hybrid_rtf_dropix.md b/docs/uk/frames_vtol/vtol_quadplane_falcon_vertigo_hybrid_rtf_dropix.md index e21f612731..2625419851 100644 --- a/docs/uk/frames_vtol/vtol_quadplane_falcon_vertigo_hybrid_rtf_dropix.md +++ b/docs/uk/frames_vtol/vtol_quadplane_falcon_vertigo_hybrid_rtf_dropix.md @@ -3,6 +3,7 @@ :::warning Discontinued The Falcon Venturi FPV Wing frame on which this vehicle is based is no longer available. +The Dropix FC used by this vehicle is discontinued. ::: The _Falcon Vertigo Hybrid VTOL_ is a quadplane VTOL aircraft that has been designed to work with PX4 and the Dropix (Pixhawk compatible) flight controller. Він може нести невелику камеру GoPro. @@ -13,7 +14,7 @@ The _Falcon Vertigo Hybrid VTOL_ is a quadplane VTOL aircraft that has been desi Основна Інформація: - **Frame:** Falcon Vertigo Hybrid VTOL -- **Flight controller:** Dropix +- **Flight controller:** Dropix (Discontineud) - **Wing span:** 1.3m ![Falcon Vertigo Hybrid VTOL RTF](../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_complete.jpg) @@ -36,7 +37,7 @@ The _Falcon Vertigo Hybrid VTOL_ is a quadplane VTOL aircraft that has been desi - Система потужності двигуна-штовхача - Вуглецеві труби та кріплення - Кронштейни для мотора G10 -- 1 x [3700mah 4S 30C Lipo battery](https://www.overlander.co.uk/batteries/lipo-batteries/power-packs/3700mah-4s-14-8v-25c-lipo-battery-overlander-sport.html) +- 1 x [3700mah 4S 30C Lipo battery](https://wheelspinmodels.co.uk/i/3700mah-4s-14.8v-25c-lipo-battery-overlander-262221/) - Плата розподілу живлення Dropix та кабель Набір не постачається з радіоприймачем або (опціональними) модулями телеметрії. @@ -115,105 +116,101 @@ The _Falcon Vertigo Hybrid VTOL_ is a quadplane VTOL aircraft that has been desi -:::info -General information about connecting Dropix can be found in [Dropix Flight Controller](../flight_controller/dropix.md). -::: +#### Connect the ESC power connector and pass the signals cables to the flight controller -#### Підключіть роз'єм живлення ESC та прокладіть кабелі сигналів до контролера польоту - -1. Підключіть ЕСС до модуля живлення за допомогою роз'єму XT60 +1. Connect the ESC to the power module using the XT60 connector -2. Передайте кабелі сигналів до контролера польоту +2. Pass the signals cables through to the flight controller -#### Підключення двигуна +#### Motor Wiring Motor and servo wiring is nearly entirely up to you, but should match the [Generic Standard VTOL](../airframes/airframe_reference.md#vtol_standard_vtol_generic_standard_vtol) configuration, as shown in the airframe reference. The geometry and output assignment can be configured in the [Actuators Configuration](../config/actuators.md#actuator-outputs) -Наприклад, ви можете з’єднати його так, як у цьому прикладі (орієнтація як у "сидячи в літаку"): +For example, you might wire it up like this example (orientation as if "sitting in the plane"): -| Порт | Підключення | -| ------ | -------------------------- | -| MAIN 1 | Передній правий мотор, CCW | -| MAIN 2 | Задній лівий мотор, CCW | -| MAIN 3 | Передній лівий мотор, CW | -| MAIN 4 | Задній правий мотор, CW | -| AUX 1 | Лівий елерон | -| AUX 2 | Правий елерон | -| AUX 3 | Elevator | -| AUX 4 | Rudder | -| AUX 5 | Тяга | +| Порт | Підключення | +| ------ | ---------------------- | +| MAIN 1 | Front right motor, CCW | +| MAIN 2 | Back left motor, CCW | +| MAIN 3 | Front left motor, CW | +| MAIN 4 | Back right motor, CW | +| AUX 1 | Left aileron | +| AUX 2 | Right aileron | +| AUX 3 | Elevator | +| AUX 4 | Rudder | +| AUX 5 | Throttle | -#### Підключення контролера польоту: Мотори, Сервомеханізми, Приймач RC, датчик струму +#### Flight Controller Connections: Motors, Servos, RC receiver, current sensor -Нижче показане зображення задньої плати керування польотом dropix, підкреслюючи вихідні контакти для підключення кабелів квадрокоптерних моторів, кабелів сигналу елерону, мотору, дросельного мотору, а також контактів поточного сенсора та введення радіоприймача (RC IN). +The image below shows back of the dropix flight controller, highlighting the outputs pins to connect quad motors cables, aileron signal cables, throttle motor, and the current sensor and receiver (RC IN) input pins. -1. Підключіть сигнальні кабелі квадро моторів. +1. Connect quad motors signal cables. -2. Підключіть кабелі елеронів та мотора керування ручкою газу в допоміжні виходи. +2. Connect the aileron cables and throttle motor in the auxiliary outputs. -3. Підключіть кабель сигналу двигуна дроселя від ESC до відповідного допоміжного порту контролера польоту. Підключіть ESC до регулятора газу. +3. Connect the throttle motor signal cable from the ESC to the appropriate flight controller auxiliary port. Connect the ESC to the throttle motor. -4. Підключіть приймач (RC IN). +4. Connect the receiver (RC IN). -#### Підключення контролера польоту: телеметрія, датчик швидкості повітря, GPS, сигналізація та перемикач безпеки +#### Flight Controller Connections: Telemetry, Airspeed Sensor, GPS, Buzzer and Safety Switch -Датчикові входи, телеметрія, сигналізація та безпечний вимикач розташовані з переднього боку керування польотом, як показано на схемі підключення нижче. +The sensor inputs, telemetry, buzzer and safety switch are located in the front of the flight controller, as shown in the connection diagram below. Dropix connectors front -1. Підключіть телеметрію, датчик швидкості, GPS, гудок та безпечний перемикач, як показано. +1. Connect the telemetry, airspeed sensor, GPS, buzzer and safety switch as shown. -#### Контролер польоту: Підключіть модуль живлення та зовнішній USB +#### Flight Controller: Connect power module and external USB -Входи для порту USB, модуля живлення та зовнішнього USB розташовані на правому боці контролера польоту. +The inputs for the USB port, power module and external USB are located on the right side of the flight controller. -1. Підключіть живлення та USB, як показано +1. Connect power and USB as shown :::tip The external USB is optional. -Він повинен бути використано, якщо доступ до порту USB ускладнений після закріплення контролера польоту. +It should be used if access to the USB port is difficult once the flight controller is mounted. ::: -#### Встановіть пітотрубку (датчик швидкості) +#### Install the pitot tube (airspeed sensor) -Труба пітота встановлена спереду літака й підключена до датчика швидкості через трубу. +The pitot tube is installed on the front of the plane and connected to the airspeed sensor via a tube. :::warning -It is important that nothing obstructs airflow to the Pitot tube. Це критично для фіксованих крил та для переходу від квадрокоптера до літака. +It is important that nothing obstructs airflow to the Pitot tube. This is critical for fixed-wing flight and for transitioning from quad to plane. ::: -1. Встановіть трубку Піто у передній частині літака +1. Install the Pitot tube in the front of the plane -2. Зафіксуйте з'єднуючі трубки та переконайтеся, що вони не зігнуті / пом'яті. +2. Secure the connecting tubing and ensure that it is not bent/kinked. -3. Підключіть трубки до датчика швидкості. +3. Connect the tubes to the airspeed sensor. -#### Встановлення/підключення приймача та модуля телеметрії +#### Install/connect receiver and telemetry module -1. Вставте приймач та телеметричний модуль на зовнішню сторону рами транспортного засобу. +1. Paste the receiver and telemetry module to the outside of the vehicle frame. @@ -225,27 +222,27 @@ It is important that nothing obstructs airflow to the Pitot tube. Це крит -#### Модуль GPS/Компас +#### GPS/Compass module -Модуль GPS/Компас вже встановлено на крило в типовому положенні. Вам не потрібно робити щось додаткове для цього! +The GPS/Compass module is already mounted on the wing, in the default orientation. You don't need to have to do anything extra for this! -#### Монтаж та орієнтація політного контролера +#### Mount and orient the flight controller -1. Встановіть орієнтацію вашого політ контролеру на 270 градусів. +1. Set your flight controller orientation to 270 degrees. -2. Закріпіть контролер на місці за допомогою піни для поглинання вібрації. +2. Secure the controller in place using vibration damping foam. -### Крок 4: Перевірка остаточної збірки +### Step 4: Final Assembly Checks -Останнім етапом збирання є перевірка стійкості дрона та правильності налаштування двигунів. +The final assembly step is to check the vehicle is stable and that the motors have been set up correctly. -1. Перевірте, що двигуни обертаються у правильних напрямках (як у діаграмі QuadX нижче). +1. Check that the motors turn in the correct directions (as in the QuadX diagram below). @@ -254,12 +251,12 @@ It is important that nothing obstructs airflow to the Pitot tube. Це крит ::: -2. Перевірте, чи транспортний засіб збалансований навколо очікуваного центру мас - - Утримуйте транспортний засіб пальцями у центрі ваги та переконайтеся, що транспортний засіб залишається стабільним. +2. Check the vehicle is balanced around the expected centre of gravity + - Hold the vehicle with your fingers at the center of gravity and check that the vehicle remains stable. ![Level Centre of Gravity](../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_57_level_centre_of_gravity.jpg) - - Якщо транспортний засіб нахиляється вперед або назад, перемістіть двигуни, щоб утримати рівновагу. + - If the vehicle leans forward or backwards, move the motors to balance it. ![Level Motors](../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_55_level_motors.jpg) @@ -267,7 +264,7 @@ It is important that nothing obstructs airflow to the Pitot tube. Це крит Perform the normal [Basic Configuration](../config/index.md). -Примітки: +Notes: 1. For [Airframe](../config/airframe.md) select the vehicle group/type as _Standard VTOL_ and the specific vehicle as [Generic Standard VTOL](../airframes/airframe_reference.md#vtol_standard_vtol_generic_standard_vtol) as shown below. @@ -277,9 +274,9 @@ Perform the normal [Basic Configuration](../config/index.md). 3. Configure the outputs and geometry following the instructions in [Actuators Configuration](../config/actuators.md) -4. За замовчуванням параметри часто достатні для стабільного польоту. For more detailed tuning information see [Standard VTOL Wiring and Configuration](../config_vtol/vtol_quad_configuration.md). +4. The default parameters are often sufficient for stable flight. For more detailed tuning information see [Standard VTOL Wiring and Configuration](../config_vtol/vtol_quad_configuration.md). -Після завершення калібрування, VTOL готовий до польоту. +After you finish calibration the VTOL is ready to fly. ## Відео diff --git a/docs/uk/frames_vtol/vtol_quadplane_foxtech_loong_2160.md b/docs/uk/frames_vtol/vtol_quadplane_foxtech_loong_2160.md index 8bd9b58c2d..340e9b9d9f 100644 --- a/docs/uk/frames_vtol/vtol_quadplane_foxtech_loong_2160.md +++ b/docs/uk/frames_vtol/vtol_quadplane_foxtech_loong_2160.md @@ -43,14 +43,14 @@ Foxtech Loong 2160 VTOL - це легкий у монтажі майже гот - [Модуль живлення Holybro PM08D (альтернатива Auterion PM)](https://holybro.com/collections/power-modules-pdbs/products/pm08d-digital-power-module-14s-200a) - [GPS F9P (включено в Skynode оціночний. комплект)](../gps_compass/rtk_gps_holybro_h-rtk-f9p.md) - [GPS M9N (дешевша альтернатива F9P)](../gps_compass/rtk_gps_holybro_h-rtk-m8p.md) -- [Датчик швидкості (включено в Skynode eval. kit)](https://www.dualrc.com/parts/airspeed-sensor-sdp33) — рекомендований для покращення безпеки та продуктивності +- [Датчик швидкості (включено в Skynode eval. kit)](https://www.dualrc.com/parts/p/airspeed-sensor-sdp33) — recommended for improved safety and performance - [Airspeed sensor (cheaper alternative)](https://holybro.com/products/digital-air-speed-sensor-ms4525do) - [Lidar Lightware lw20-c (включено в Skynode eval. kit)](../sensor/sfxx_lidar.md) (Необов'язково) - [Інфрачервоний сенсор вимірювання відстані Seeed Studio PSK-CM8JL65-CC5 (дешевший аналог)](https://www.seeedstudio.com/PSK-CM8JL65-CC5-Infrared-Distance-Measuring-Sensor-p-4028.html) (Опціонально) - [Радіо (RC) система](../getting_started/rc_transmitter_receiver.md) на ваш вибір -- [Наземна станція та радіо зв'язок](https://holybro.com/collections/rc-radio-transmitter-receiver/products/skydroid-h12?variant=42940989931709) +- [Groundstation and Radio link](https://holybro.com/products/skydroid-h12) - [Розширення кабеля USB-C](https://www.digitec.ch/en/s1/product/powerguard-usb-c-usb-c-025-m-usb-cables-22529949?dbq=1&gclid=Cj0KCQjw2cWgBhDYARIsALggUhrh-z-7DSU0wKfLBVa8filkXLQaxUpi7pC0ffQyRzLng8Ph01h2R1gaAp0mEALw_wcB&gclsrc=aw.ds) -- [Розгалужувач I2C](https://www.3dxr.co.uk/autopilots-c2/the-cube-aka-pixhawk-2-1-c9/cube-cables-accessories-sensors-c15/cubepilot-i2c-can-splitter-jst-gh-4pin-p2840) +- [I2C Splitter](https://www.3dxr.co.uk/autopilots-c2/the-cube-aka-pixhawk-2-1-c9/cube-cables-accessories-sensors-c15/cubepilot-i2c-can-splitter-jst-gh-4pin-hx4-06152-p2840) - [3D-Printed mounts](https://github.com/PX4/PX4-Autopilot/raw/main/docs/assets/airframes/vtol/foxtech_loong_2160/loong-3d-prints.zip) - 1x Базова плита - 1x Stack-fixture @@ -305,7 +305,7 @@ Next we load a [parameter file](https://github.com/PX4/PX4-Autopilot/raw/main/do - Якщо [Lidar Lightware lw20-c (включено в Skynode eval. kit)](../sensor/sfxx_lidar.md) використовується, потрібно встановити [SENS_EN_SF1XX](../advanced_config/parameter_reference.md#SENS_EN_SF1XX) на 6 (SF/LW/20c). - Впевніться, що обраний правильний датчик швидкості. - Якщо ви використовуєте рекомендований [датчик швидкості SDP33](https://www.dualrc.com/parts/airspeed-sensor-sdp33), зміни не будуть потрібні, оскільки [SENS_EN_SDP3X](../advanced_config/parameter_reference.md#SENS_EN_SDP3X) увімкнено (встановлено на `1`) в файлі параметрів. + If you use the recommended [SDP33 airspeed sensor](https://www.dualrc.com/parts/p/airspeed-sensor-sdp33) no changes will be needed as [SENS_EN_SDP3X](../advanced_config/parameter_reference.md#SENS_EN_SDP3X) is enabled (set to `1`) in the parameter file. ### Калібрування сенсорів diff --git a/docs/uk/frames_vtol/vtol_quadplane_fun_cub_vtol_pixhawk.md b/docs/uk/frames_vtol/vtol_quadplane_fun_cub_vtol_pixhawk.md index db236d6729..fffea76615 100644 --- a/docs/uk/frames_vtol/vtol_quadplane_fun_cub_vtol_pixhawk.md +++ b/docs/uk/frames_vtol/vtol_quadplane_fun_cub_vtol_pixhawk.md @@ -42,7 +42,7 @@ QuadPlane VTOL Fun Cub є стандартним повітряним судно Motor and servo wiring is nearly entirely up to you, but should match the [Generic Standard VTOL](../airframes/airframe_reference.md#vtol_standard_vtol_generic_standard_vtol) configuration, as shown in the airframe reference. The geometry and output assignment can be configured in the [Actuators Configuration](../config/actuators.md#actuator-outputs) -Наприклад, ви можете з’єднати його так, як у цьому прикладі (орієнтація як у "сидячи в літаку"): +For example, you might wire it up like this example (orientation as if "sitting in the plane"): | Порт | Підключення | | ------ | ---------------------------------------------- | @@ -51,10 +51,10 @@ The geometry and output assignment can be configured in the [Actuators Configura | MAIN 3 | Передній лівий мотор (CW) | | MAIN 4 | Правий задній мотор (CW) | | AUX 1 | Лівий елерон TODO | -| AUX 2 | Правий елерон | +| AUX 2 | Right aileron | | AUX 3 | Elevator | | AUX 4 | Rudder | -| AUX 5 | Тяга | +| AUX 5 | Throttle | For further instructions on wiring and configurations please see: [Standard VTOL Wiring and Configuration](../config_vtol/vtol_quad_configuration.md). @@ -67,9 +67,9 @@ For further instructions on wiring and configurations please see: 2. Configure the outputs and geometry following the instructions in [Actuators Configuration](../config/actuators.md) -3. За замовчуванням параметри часто достатні для стабільного польоту. For more detailed tuning information see [Standard VTOL Wiring and Configuration](../config_vtol/vtol_quad_configuration.md). +3. The default parameters are often sufficient for stable flight. For more detailed tuning information see [Standard VTOL Wiring and Configuration](../config_vtol/vtol_quad_configuration.md). -Після завершення калібрування, VTOL готовий до польоту. +After you finish calibration the VTOL is ready to fly. ## Відео diff --git a/docs/uk/frames_vtol/vtol_quadplane_volantex_ranger_ex_pixhawk.md b/docs/uk/frames_vtol/vtol_quadplane_volantex_ranger_ex_pixhawk.md index c9bdd7ed94..4e7d125854 100644 --- a/docs/uk/frames_vtol/vtol_quadplane_volantex_ranger_ex_pixhawk.md +++ b/docs/uk/frames_vtol/vtol_quadplane_volantex_ranger_ex_pixhawk.md @@ -90,17 +90,17 @@ Please note that the conversion in this build log is performed on a wing that sh Виходи Pixhawk повинні бути підключені таким чином (орієнтація, як бачиться як "сидячи в літаку"). -| Порт | Підключення | -| ------ | -------------------------- | -| MAIN 1 | Передній правий мотор, CCW | -| MAIN 2 | Задній лівий мотор, CCW | -| MAIN 3 | Передній лівий мотор, CW | -| MAIN 4 | Задній правий мотор, CW | -| AUX 1 | Лівий елерон | -| AUX 2 | Правий елерон | -| AUX 3 | Elevator | -| AUX 4 | Rudder | -| AUX 5 | Тяга | +| Порт | Підключення | +| ------ | ---------------------- | +| MAIN 1 | Front right motor, CCW | +| MAIN 2 | Back left motor, CCW | +| MAIN 3 | Front left motor, CW | +| MAIN 4 | Back right motor, CW | +| AUX 1 | Left aileron | +| AUX 2 | Right aileron | +| AUX 3 | Elevator | +| AUX 4 | Rudder | +| AUX 5 | Throttle | :::info The servo direction can be reversed using the PWM_REV parameters in the PWM_OUTPUT group of QGroundControl (cogwheel tab, last item in the left menu) diff --git a/docs/uk/frames_vtol/vtol_tailsitter_caipiroshka_pixracer.md b/docs/uk/frames_vtol/vtol_tailsitter_caipiroshka_pixracer.md index e163ed34aa..f2104d27eb 100644 --- a/docs/uk/frames_vtol/vtol_tailsitter_caipiroshka_pixracer.md +++ b/docs/uk/frames_vtol/vtol_tailsitter_caipiroshka_pixracer.md @@ -4,7 +4,7 @@ The Caipiroshka VTOL is a slightly modified _TBS Caipirinha_. :::info The _TBS Caipirinha_ has been superseded and is no longer available. -These instructions _should_ work with the updated vehicle: [TBS Caipirinha 2](https://team-blacksheep.com/products/prod:tbs_caipi2_pnp). +These instructions _should_ work with the updated vehicle: [TBS Caipirinha 2](https://www.team-blacksheep.com/products/prod:tbs_caipi2_pnp). Кілька інших компонентів також було оновлено в списку деталей. ::: @@ -12,7 +12,7 @@ These instructions _should_ work with the updated vehicle: [TBS Caipirinha 2](ht ## Список деталей -- TBS Caipirinha Wing (no longer available - try [TBS Caipirinha 2](https://team-blacksheep.com/products/prod:tbs_caipi2_pnp)) +- TBS Caipirinha Wing (no longer available - try [TBS Caipirinha 2](https://www.team-blacksheep.com/products/prod:tbs_caipi2_pnp)) - Left and right 3D-printed motor mount (design files) - CW 8045 propeller ([Eflight store](https://www.banggood.com/GEMFAN-Carbon-Nylon-8045-CWCCW-Propeller-For-Quadcopters-1-Pair-p-950874.html)) - CCW 8045 propeller ([Eflight store](https://www.banggood.com/GEMFAN-Carbon-Nylon-8045-CWCCW-Propeller-For-Quadcopters-1-Pair-p-950874.html)) @@ -24,7 +24,7 @@ These instructions _should_ work with the updated vehicle: [TBS Caipirinha 2](ht - [GetFPV](https://www.getfpv.com/lumenier-30a-blheli-s-esc-opto-2-4s.html) - BEC (3А, 5-5.3В) (потрібно лише у випадку, якщо використовуєте ESC, які не можуть діяти як джерело живлення 5В для вихідної рейки) - 3S 2200 mA LiPo акумулятор - - Team Orion 3S 11.1V 50 C ([Hobbyshop store](https://www.hobbyshop.ch/modellbau-elektronik/akku/team-orion-lipo-2200-3s-11-1v-50c-xt60-ori60163.html)) + - Team Orion 3S 11.1V 50 C ([Hobbyshop store](https://www.hobbyshop.ch/team-orion-lipo-2200-3s-11-1v-50c-xt60-ori60163.html)) - [Pixracer autopilot board + power module](../flight_controller/pixracer.md) - [Digital airspeed sensor](https://hobbyking.com/en_us/hkpilot-32-digital-air-speed-sensor-and-pitot-tube-set.html) diff --git a/docs/uk/frames_vtol/vtol_tiltrotor_omp_hobby_zmo_fpv.md b/docs/uk/frames_vtol/vtol_tiltrotor_omp_hobby_zmo_fpv.md index 3ceb129558..df184db371 100644 --- a/docs/uk/frames_vtol/vtol_tiltrotor_omp_hobby_zmo_fpv.md +++ b/docs/uk/frames_vtol/vtol_tiltrotor_omp_hobby_zmo_fpv.md @@ -25,9 +25,9 @@ This build guide shows add a flight controller system (using [Auterion Skynode e ## Де купити -- [OMP-Hobby](https://www.omphobby.com/OMPHOBBY-ZMO-VTOL-FPV-Aircraft-With-DJI-Goggles-And-Remote-Controller-p3069854.html) - [GetFPV](https://www.getfpv.com/omphobby-zmo-z3-vtol-fpv-1200mm-arf-plane-kit-no-fpv-system.html) - [FoxtechFPV](https://www.foxtechfpv.com/zmo-pro-fpv-vtol.html) +- [RMRC](https://www.readymaderc.com/products/details/omp-hobby-zmo-vtol-fpv-airplane-rtf-goggles-radio) ## Політний контролер @@ -43,7 +43,7 @@ This build guide shows add a flight controller system (using [Auterion Skynode e - [GPS F9P (включено в Skynode оціночний. комплект)](../gps_compass/rtk_gps_holybro_h-rtk-f9p.md) - [GPS M9N (дешевша альтернатива F9P)](../gps_compass/rtk_gps_holybro_h-rtk-m8p.md) -- [Датчик швидкості (включено в Skynode eval. kit)](https://www.dualrc.com/parts/airspeed-sensor-sdp33) — рекомендований для покращення безпеки та продуктивності +- [Датчик швидкості (включено в Skynode eval. kit)](https://www.dualrc.com/parts/p/airspeed-sensor-sdp33) — recommended for improved safety and performance - [Airspeed sensor (cheaper alternative)](https://holybro.com/products/digital-air-speed-sensor-ms4525do) - [Lidar Lightware lw20-c (включено в Skynode eval. kit)](../sensor/sfxx_lidar.md) (Необов'язково) - [Інфрачервоний сенсор вимірювання відстані Seeed Studio PSK-CM8JL65-CC5 (дешевший аналог)](https://www.seeedstudio.com/PSK-CM8JL65-CC5-Infrared-Distance-Measuring-Sensor-p-4028.html) (Опціонально) @@ -79,7 +79,7 @@ This build guide shows add a flight controller system (using [Auterion Skynode e ### Підготовка Вийміть оригінальний контролер польоту, ESC регулятор швидкості та кабелі з'єднання крила. -Також зніміть пропелери. +Also remove the propellers. Це допоможе вам з управлінням транспортного засобу і зменшить ризик отримання травми внаслідок ненавмисного запуску двигуна. ZMO FPV в його початковому стані. @@ -101,7 +101,7 @@ ZMO FPV в його початковому стані. 4. Укоротіть дроти заднього двигуна та припаяйте їх на місце, як показано на малюнку. -5. Припаяйте сигнальні та GND-дроти до входу PWM ESC регулятора швидкості. +5. Solder signal and GND wires to the PWM input to the ESC. ![ESC 01](../../assets/airframes/vtol/omp_hobby_zmo_fpv/esc-01.jpg) @@ -293,7 +293,7 @@ Next we load a [parameter file](https://github.com/PX4/PX4-Autopilot/raw/main/do The airspeed sensor can be enabled in the [Parameters](../advanced_config/parameters.md#finding-updating-parameters) tab. -- If the [recommended airspeed sensor (SDP33)](https://www.dualrc.com/parts/airspeed-sensor-sdp33) is used, `SENS_EN_SDP3X` needs to be enabled. +- If the [recommended airspeed sensor (SDP33)](https://www.dualrc.com/parts/p/airspeed-sensor-sdp33) is used, `SENS_EN_SDP3X` needs to be enabled. - Якщо [Lidar Lightware lw20-c (включено в Skynode eval. kit)](../sensor/sfxx_lidar.md) is used, `SENS_EN_SF1XX` needs to be set to 6 (SF/LW/20c). ### Калібрування сенсорів diff --git a/docs/uk/getting_started/flight_reporting.md b/docs/uk/getting_started/flight_reporting.md index 32845f9826..73ddb7935e 100644 --- a/docs/uk/getting_started/flight_reporting.md +++ b/docs/uk/getting_started/flight_reporting.md @@ -38,7 +38,7 @@ For more information see [Settings > MAVLink Settings > MAVLink 2 Logging (PX4 o ## Надання доступу до файлів журналів розробникам PX4 -The [Flight Review](https://logs.px4.io/) log file link can be shared for discussion in the [support forums](../contribute/support.md#forums-and-chat) or a [Github issue](../index.md#reporting-bugs-issues). +The [Flight Review](https://logs.px4.io/) log file link can be shared for discussion in the [support forums](../contribute/support.md#forums-and-chat) or a [Github issue](../contribute/support.md#issue-bug-reporting). ## Конфігурація журналу diff --git a/docs/uk/getting_started/rc_transmitter_receiver.md b/docs/uk/getting_started/rc_transmitter_receiver.md index b5d03c3bf3..c27bbd52c5 100644 --- a/docs/uk/getting_started/rc_transmitter_receiver.md +++ b/docs/uk/getting_started/rc_transmitter_receiver.md @@ -3,13 +3,15 @@ A Radio Control (RC) system can be used to _manually_ control your vehicle from a handheld RC controller. У цьому розділі наведено огляд того, як працює RC система, як вибрати відповідну радіосистему для вашого засобу, і як під'єднати її до політного контролера. -:::tip -PX4 can also be manually controlled using a [Joystick](../config/joystick.md) or gamepad-like controller: this is different to an RC system! -The [COM_RC_IN_MODE](../advanced_config/parameter_reference.md#COM_RC_IN_MODE) parameter [can be set](../advanced_config/parameters.md) to choose whether RC (default), Joystick, both, or neither, are enabled. +:::info +PX4 does not require a manual control system for autonomous flight modes. ::: -:::info -PX4 does not require a remote control system for autonomous flight modes. +:::tip +PX4 can also be [manually controlled](../config/manual_control.md) using a [Joystick](../config/joystick.md) or gamepad-like controller. + +By default PX4 will latch the first valid controller it discovers and use it until the vehicle reboots. +If you have multiple controllers and you want to define their priority see [Manual Control > PX4 Configuration](../config/manual_control.md#px4-configuration). ::: ## Як працюють системи радіо керування? diff --git a/docs/uk/gps_compass/gps_cuav_neo_3.md b/docs/uk/gps_compass/gps_cuav_neo_3.md index 42d4fc49a9..4030bdaac1 100644 --- a/docs/uk/gps_compass/gps_cuav_neo_3.md +++ b/docs/uk/gps_compass/gps_cuav_neo_3.md @@ -47,7 +47,7 @@ ## Де купити -- [CUAV](https://cuav.en.alibaba.com/product/1600217379204-820872629/CUAV_NEO_3_M9N_GPS_Module_for_Pixhawk_Compass_gps_tracker_navigation_gps.html?spm=a2700.shop_oth.74.1.636e28725EvVHb) +- [CUAV](https://www.alibaba.com/product-detail/CUAV_NEO_3_M9N_GPS_Module_for_Pixhawk_Compass_gps_tracker_navigation_gps_1600217379204.html) ## Підключення та з'єднання diff --git a/docs/uk/gps_compass/gps_cuav_neo_3pro.md b/docs/uk/gps_compass/gps_cuav_neo_3pro.md index ea31a40885..463aca05c0 100644 --- a/docs/uk/gps_compass/gps_cuav_neo_3pro.md +++ b/docs/uk/gps_compass/gps_cuav_neo_3pro.md @@ -41,7 +41,7 @@ NEO 3Pro - це приймач GPS DroneCan, вироблений CUAV. ## Де купити -- [CUAV](https://cuav.en.alibaba.com/product/1600165544920-820872629/Free_shipping_CUAV_Neo_3_pro_drone_UAVCAN_GNSS_processor_STM32F412_autopilot_ublox_M9N_positioning_RM3100_compass_uav_gps_module.html?spm=a2700.shop_oth.74.2.636e28725EvVHb) +- [CUAV](https://www.alibaba.com/product-detail/Free_shipping_CUAV_Neo_3_pro_drone_UAVCAN_GNSS_processor_STM32F412_autopilot_ublox_M9N_positioning_RM3100_compass_uav_gps_module_1600165544920.html) ## Підключення та з'єднання diff --git a/docs/uk/gps_compass/index.md b/docs/uk/gps_compass/index.md index 722af9a4e5..9d3a4e0b72 100644 --- a/docs/uk/gps_compass/index.md +++ b/docs/uk/gps_compass/index.md @@ -64,7 +64,7 @@ PX4 повинен працювати з будь-яким пристроєм, [Hb Micro M8N]: https://holybro.com/products/micro-m8n-gps [CubePilot Here2]: ../gps_compass/gps_hex_here2.md -Примітки: +Notes: - ✓ or a specific part number indicate that a features is supported, while ✘ or empty show that the feature is not supported. "?" означає "невідомо". @@ -187,9 +187,9 @@ Some of GNSS terms that are useful for interpreting the data include: - `DOP`: Dilution of position (dimensionless). This is a measure of the geometric quality of satellite positions and their effect on the precision of the GPS receiver's calculations. - `EPH`: Standard deviation of horizontal position error (metres). - This represents the the uncertainty in the GPS fix latitude and longitude. + This represents the uncertainty in the GPS fix latitude and longitude. - `EPV`: Standard deviation of vertical position error (metres). - This represents the the uncertainty in the GPS fix altitude. + This represents the uncertainty in the GPS fix altitude. ### DOP vs EPH/EPV diff --git a/docs/uk/gps_compass/magnetometer.md b/docs/uk/gps_compass/magnetometer.md index 42d0d72b4e..e79d1766b0 100644 --- a/docs/uk/gps_compass/magnetometer.md +++ b/docs/uk/gps_compass/magnetometer.md @@ -22,7 +22,7 @@ It should not be used otherwise, and is automatically disabled after [calibratio ### Частини компасу PX4 можна використовувати з багатьма деталями магнітометрів, включаючи: Bosch BMM 150 MEMS (через шину I2C), HMC5883 / HMC5983 (I2C або SPI), IST8310 (I2C), LIS3MDL (I2C або SPI), RM3100 та інші. -Інші підтримувані частини магнітометра та їхні шини можна дізнатися з драйверів, перелічених у [Посилання на модулі: Магнітометр (драйвер)](../modules/modules_driver_magnetometer.md). +Other supported magnetometer parts and their buses can be inferred from the drivers listed in [Modules Reference: Magnetometer (Driver)](../modules/modules_driver_magnetometer.md). Ці деталі входять до складу автономних модулів компаса, комбінованих модулів компаса/ГНСС, а також до складу багатьох контролерів польоту, @@ -55,7 +55,7 @@ PX4 можна використовувати з багатьма деталям Internal compasses are not recommended for real use as a heading source, because the performance is almost always very poor. -This is particularly true on on small vehicles where the flight controller has to be mounted close to motor/ESC power lines and other sources of electromagnetic interference. +This is particularly true on small vehicles where the flight controller has to be mounted close to motor/ESC power lines and other sources of electromagnetic interference. While they may be better on larger vehicles (e.g. VTOL), where it is possible to reduce electromagnetic interference by mounting the flight controller a long way from power supply lines, an external compass will almost always be better. :::tip diff --git a/docs/uk/gps_compass/rtk_gps.md b/docs/uk/gps_compass/rtk_gps.md index 3cd95c567b..2ab335f0c9 100644 --- a/docs/uk/gps_compass/rtk_gps.md +++ b/docs/uk/gps_compass/rtk_gps.md @@ -14,7 +14,7 @@ Some RTK GNSS setups can provide yaw/heading information, as an alternative to t ## Пристрої, що підтримуються -PX4 supports the [u-blox M8P](https://www.u-blox.com/en/product/neo-m8p), [u-blox F9P](https://www.u-blox.com/en/product/zed-f9p-module) and the [Trimble MB-Two](https://oemgnss.trimble.com/en/products/receiver-modules/mb-two) GPS, and products that incorporate them. +PX4 supports the [u-blox M8P](https://www.u-blox.com/en/product/neo-m8p-series), [u-blox F9P](https://www.u-blox.com/en/product/zed-f9p-module) and the [Trimble MB-Two](https://oemgnss.trimble.com/en/products/receiver-modules/mb-two) GPS, and products that incorporate them. Список сумісних пристроїв RTK нижче, які очікуються для роботи з PX4 (він виключає припинені пристрої). Таблиця вказує пристрої, які також виводять курсову відмітку, а також можуть надавати курсову відмітку, коли використовуються дві одиниці на транспортному засобі. @@ -57,7 +57,7 @@ PX4 supports the [u-blox M8P](https://www.u-blox.com/en/product/neo-m8p), [u-blo | [Septentrio AsteRx-m3 Pro](../gps_compass/septentrio_asterx-rib.md) | AsteRx | ✓ | | [Septentrio Dual Antenna] | ✓ | | [Septentrio mosaic-go](../gps_compass/septentrio_mosaic-go.md) | mosaic X5 / mosaic H | ✓ | | [Septentrio Dual Antenna] | ✓ | | [SIRIUS RTK GNSS ROVER (F9P)](https://store-drotek.com/911-sirius-rtk-gnss-rover-f9p.html) | F9P | ✓ | | [Dual F9P] | | -| [SparkFun GPS-RTK2 Board - ZED-F9P](https://www.sparkfun.com/products/15136) | F9P | ✓ | | [Dual F9P] | | +| [SparkFun GPS-RTK2 Board - ZED-F9P](https://www.sparkfun.com/sparkfun-gps-rtk2-board-zed-f9p-qwiic-gps-15136.html) | F9P | ✓ | | [Dual F9P] | | | [Trimble MB-Two](../gps_compass/rtk_gps_trimble_mb_two.md) | F9P | ✓ | | ✓ | | @@ -74,7 +74,7 @@ PX4 supports the [u-blox M8P](https://www.u-blox.com/en/product/neo-m8p), [u-blo [mosaic-G5 P3H]: https://www.septentrio.com/en/products/gnss-receivers/gnss-receiver-modules/mosaic-G5-P3H [D10P]: https://docs.datagnss.com/gnss/gnss_module/D10P_RTK -Примітки: +Notes: - ✓ or a specific part number indicate that a features is supported, while ✘ or empty show that the feature is not supported. "?" означає "невідомо". diff --git a/docs/uk/gps_compass/rtk_gps_cuav_c-rtk-9ps.md b/docs/uk/gps_compass/rtk_gps_cuav_c-rtk-9ps.md index 96e0635bc6..61927a6d0e 100644 --- a/docs/uk/gps_compass/rtk_gps_cuav_c-rtk-9ps.md +++ b/docs/uk/gps_compass/rtk_gps_cuav_c-rtk-9ps.md @@ -1,6 +1,6 @@ # CUAV C-RTK 9Ps -The CUAV [C-RTK 9Ps](https://www.cuav.net/en/c_rtk_9ps/) is a multi-satellite, multi-band, centimeter-level, RTK GNSS system. +The CUAV [C-RTK 9Ps](https://www.cuav.net/en/c-rtk-9ps-en/) is a multi-satellite, multi-band, centimeter-level, RTK GNSS system. Модуль одночасно приймає сигнали супутників GPS, ГЛОНАСС, Galileo та Beidou, що забезпечує швидке позиціонування та вищу точність. It also supports [RTK GPS Heading](../gps_compass/u-blox_f9p_heading.md) using dual modules. @@ -12,7 +12,7 @@ It also supports [RTK GPS Heading](../gps_compass/u-blox_f9p_heading.md) using d ## Де купити -[cuav Store](https://store.cuav.net/shop/c-rtk-9ps/) +[cuav Store](https://store.cuav.net/?route=product%2Fproduct&path=61&product_id=187) ## Специфікація diff --git a/docs/uk/gps_compass/rtk_gps_cuav_c-rtk.md b/docs/uk/gps_compass/rtk_gps_cuav_c-rtk.md index 8930fb6cca..0f75a9d2e8 100644 --- a/docs/uk/gps_compass/rtk_gps_cuav_c-rtk.md +++ b/docs/uk/gps_compass/rtk_gps_cuav_c-rtk.md @@ -1,6 +1,6 @@ # CUAV C-RTK -The [CUAV C-RTK GPS receiver](https://www.cuav.net/en/c_rtk_9ps/) is an [RTK GPS module](../gps_compass/rtk_gps.md) for the mass market. +The [CUAV C-RTK GPS receiver](https://www.cuav.net/en/c-rtk-9ps-en/) is an [RTK GPS module](../gps_compass/rtk_gps.md) for the mass market. Повна система RTK складається щонайменше з двох модулів C-RTK (один для базової станції, а інший для літака). Використовуючи RTK, PX4 може визначати своє місцезнаходження з точністю до сантиметра, що набагато точніше, ніж може забезпечити звичайний GPS. @@ -8,7 +8,7 @@ The [CUAV C-RTK GPS receiver](https://www.cuav.net/en/c_rtk_9ps/) is an [RTK GPS ## Де купити - [cuav taobao](https://item.taobao.com/item.htm?id=565380634341&spm=2014.21600712.0.0) -- [cuav aliexpress](https://www.aliexpress.com/store/product/CUAV-NEW-Flight-Controller-GPS-C-RTK-differential-positioning-navigation-module-GPS-for-PIX4-Pixhawk-pixhack/3257035_32853894248.html?spm=2114.12010608.0.0.75592fadQKPPEn) +- [cuav aliexpress](https://www.aliexpress.com/item/32853894248.html?spm=2114.12010608.0.0.75592fadQKPPEn) ## Налаштування @@ -16,7 +16,7 @@ RTK setup and use on PX4 via _QGroundControl_ is largely plug and play \(see [RT ## Підключення та з'єднання -C-RTK GPS comes with a cable that terminates in a 6-pin connector and 4-pin connector that are compatible with [Pixhack v3](https://doc.cuav.net/flight-controller/pixhack/en/quick-start-pixhack-v3x.html#gps--compass). +C-RTK GPS comes with a cable that terminates in a 6-pin connector and 4-pin connector that are compatible with [Pixhack v3](../flight_controller/pixhack_v3.md). 6-контактний роз'єм забезпечує інтерфейс для RTK GPS і повинен бути підключений до GPS-порту польотного контролера. 4-контактний роз'єм - це GPS-інтерфейс m8n (стандартний), який призначений для (додаткового) використання в якості другого GPS. diff --git a/docs/uk/gps_compass/rtk_gps_cuav_c-rtk2.md b/docs/uk/gps_compass/rtk_gps_cuav_c-rtk2.md index 9fcf84c922..0973f8706a 100644 --- a/docs/uk/gps_compass/rtk_gps_cuav_c-rtk2.md +++ b/docs/uk/gps_compass/rtk_gps_cuav_c-rtk2.md @@ -1,6 +1,6 @@ # CUAV C-RTK2 GNSS Module (RTK/PPK) -The [CUAV C-RTK2 receiver](https://www.cuav.net/en/c_rtk_9ps/) is a high-performance PPK/RTK positioning module created by CUAV for professional applications such as drone aerial surveying and mapping. +The [CUAV C-RTK2 receiver](https://www.cuav.net/en/c-rtk-9ps-en/) is a high-performance PPK/RTK positioning module created by CUAV for professional applications such as drone aerial surveying and mapping. It has a high-precision IMU and positioning module, and can reduce the number of required [control points](https://www.youtube.com/watch?v=3k7v5aXyuKQ) by more than to 80%. На додаток до зйомки/картографування, він підходить для багатьох інших випадків використання, включаючи: захист сільськогосподарських рослин та рої дронів. @@ -10,7 +10,7 @@ It has a high-precision IMU and positioning module, and can reduce the number of - Потужний процесор H7 - Високоточний IMU промислового класу -- Підтримка RTK та одночасне збереження необроблених даних RAW (PPK) +- Support RTK and save raw data (PPK) at the same time - Багатосупутникові та багаточастотні приймачі - Протокол UAVCAN/Dronecan - Підтримка гарячого взуття та спуску спусковик @@ -18,7 +18,7 @@ It has a high-precision IMU and positioning module, and can reduce the number of ## Де купити -- [CUAV Store](https://store.cuav.net/shop/c-rtk-2/) +- [CUAV Store](https://store.cuav.net/?route=product%2Fproduct&product_id=159) - [CUAV aliexpress](https://pt.aliexpress.com/item/1005003754165772.html?spm=a2g0o.store_pc_groupList.8148356.13.2f893550i0NE4o) # Короткий опис diff --git a/docs/uk/gps_compass/rtk_gps_datagnss_nano_hrtk.md b/docs/uk/gps_compass/rtk_gps_datagnss_nano_hrtk.md index cf4c1c5d24..d9c28c3417 100644 --- a/docs/uk/gps_compass/rtk_gps_datagnss_nano_hrtk.md +++ b/docs/uk/gps_compass/rtk_gps_datagnss_nano_hrtk.md @@ -90,7 +90,7 @@ Note that for the base we recommend the [NANO RTK Receiver](https://www.datagnss ![DATAGNSS NANO RTK Receiver with case](../../assets/hardware/gps/datagnss_gem1305/nano_rtk_with_case.png) -See to [How to setup Base station](https://wiki.datagnss.com/index.php/GEM1305-autopilot#Base_station_setup) for information on how to configure the module for use as a base station (not including step 6 and later, for which you would QGroundControl instead of Mission Planner). +See to [How to setup Base station](https://docs.datagnss.com/#Base_station_setup) for information on how to configure the module for use as a base station (not including step 6 and later, for which you would QGroundControl instead of Mission Planner). ### Rover Setup (PX4) @@ -111,13 +111,12 @@ GPS and RTK configuration on PX4 via _QGroundControl_ is plug and play (see [RTK ## Resources -- [NANO RTK Receiver 2D drawing file](https://wiki.datagnss.com/images/3/31/EVK-DG-1206_V.2.0.pdf) - [NANO HRTK Receiver Wiki](https://docs.datagnss.com/gnss/rtk_receiver/NANO/nano-helix-rtk/) (DATAGNSS WiKi) - [HED-10L Heading RTK Receiver](https://docs.datagnss.com/gnss/rtk_receiver/HED-10L/) ## Докладніше -- [NANO RTK Receiver](https://docs.datagnss.com/gnss/rtk_receiver/NANO/nano-rtk-receiver) +- [NANO RTK Receiver](https://docs.datagnss.com/gnss/rtk_receiver/NANO/nano-rtk-receiver/) - [HELIX Antenna for RTK](https://www.datagnss.com/collections/rtk-antenna/products/smart-helix-antenna) - [RTK Antenna AGR6302G](https://www.datagnss.com/collections/rtk-antenna/products/antenna-agr6302g) - [AT400 RTK Antenna](https://www.datagnss.com/collections/rtk-antenna/products/at400-multi-band-antenna-for-rtk) diff --git a/docs/uk/gps_compass/rtk_gps_drotek_xl.md b/docs/uk/gps_compass/rtk_gps_drotek_xl.md index 36b774b426..11d3d190eb 100644 --- a/docs/uk/gps_compass/rtk_gps_drotek_xl.md +++ b/docs/uk/gps_compass/rtk_gps_drotek_xl.md @@ -2,7 +2,7 @@ :::info This module appears to have been discontinued, and is no longer on the Drotek site (September 2023). -The last documentation was in [PX4 v1.13 here](https://docs.px4.io/v1.13/en/gps_compass/rtk_gps_drotek_xl.html) +The last documentation was in [PX4 v1.13 here](https://docs.px4.io/v1.13/en/gps_compass/rtk_gps_drotek_xl) ::: diff --git a/docs/uk/gps_compass/rtk_gps_gem1305.md b/docs/uk/gps_compass/rtk_gps_gem1305.md index 92c6c3aea5..b0bbe06ebf 100644 --- a/docs/uk/gps_compass/rtk_gps_gem1305.md +++ b/docs/uk/gps_compass/rtk_gps_gem1305.md @@ -77,7 +77,7 @@ The 1.25mm pitch 6P connector (from left: PIN1 to PIN6) supports UART for GNSS a ## Налаштування програмного забезпечення RTK requires a base RTK module attached to the ground station, and a rover RTK module on the vehicle. -The data from the base needs to be transmitted to the drone via telemetry radio and inputed into the RTK receiver on the rover. +The data from the base needs to be transmitted to the drone via telemetry radio and inputted into the RTK receiver on the rover. ![RTK setup overview](../../assets/hardware/gps/datagnss_gem1305/setup_overview.png) @@ -93,7 +93,7 @@ Note that for the base we recommend the [NANO RTK Receiver](https://www.datagnss DATAGNSS NANO RTK Receiver -See to [How to setup Base station](https://wiki.datagnss.com/index.php/GEM1305-autopilot#Base_station_setup) for information on how to configure the module for use as a base station (not including step 6 and later, for which you would QGroundControl instead of Mission Planner). +See to [How to setup Base station](https://docs.datagnss.com/#Base_station_setup) for information on how to configure the module for use as a base station (not including step 6 and later, for which you would QGroundControl instead of Mission Planner). ### Rover Setup (PX4) @@ -115,14 +115,13 @@ GPS and RTK configuration on PX4 via _QGroundControl_ is plug and play (see [RTK ## Resources -- [NANO RTK Receiver 2D drawing file](https://wiki.datagnss.com/images/3/31/EVK-DG-1206_V.2.0.pdf) - [GEM1305 Wiki](https://docs.datagnss.com/gnss/rtk_receiver/GEM1305/) (DATAGNSS WiKi) - [HED-10L Heading RTK Receiver](https://docs.datagnss.com/gnss/rtk_receiver/HED-10L/) - [NANO HRTK Receiver](https://docs.datagnss.com/gnss/rtk_receiver/NANO/nano-helix-rtk/) ## Докладніше -- [NANO RTK Receiver](https://www.datagnss.com/collections/evk/products/tau951m-1312-tiny-evk) +- [NANO RTK Receiver](https://www.datagnss.com/products/nano-rtk-receiver) - [HELIX Antenna for RTK](https://www.datagnss.com/collections/rtk-antenna/products/smart-helix-antenna) - [RTK Antenna AGR6302G](https://www.datagnss.com/collections/rtk-antenna/products/antenna-agr6302g) - [AT400 RTK Antenna](https://www.datagnss.com/collections/rtk-antenna/products/at400-multi-band-antenna-for-rtk) diff --git a/docs/uk/gps_compass/rtk_gps_hex_hereplus.md b/docs/uk/gps_compass/rtk_gps_hex_hereplus.md index c6cca64024..35c531a7ba 100644 --- a/docs/uk/gps_compass/rtk_gps_hex_hereplus.md +++ b/docs/uk/gps_compass/rtk_gps_hex_hereplus.md @@ -5,7 +5,7 @@ :::info This GPS is no longer available for purchase but is still compatible with PX4. -Usage documentation can be found in [PX4v1.11 docs](https://docs.px4.io/v1.11/en/gps_compass/rtk_gps_hex_hereplus.html) +Usage documentation can be found in [PX4v1.11 docs](https://docs.px4.io/v1.11/en/gps_compass/rtk_gps_hex_hereplus) ::: The **Here+ RTK GPS receiver** is a small, light and energy efficient [RTK GPS module](../gps_compass/rtk_gps.md), based on the u-blox M8P. Використовуючи RTK, PX4 може визначати своє місцезнаходження з точністю до сантиметра, що набагато точніше, ніж може забезпечити звичайний GPS. diff --git a/docs/uk/gps_compass/rtk_gps_holybro_h-rtk-f9p.md b/docs/uk/gps_compass/rtk_gps_holybro_h-rtk-f9p.md index 43793d98dd..a91ccc1630 100644 --- a/docs/uk/gps_compass/rtk_gps_holybro_h-rtk-f9p.md +++ b/docs/uk/gps_compass/rtk_gps_holybro_h-rtk-f9p.md @@ -19,7 +19,7 @@ Using RTK allows PX4 to get its position with centimetre-level accuracy, which i ## Де купити - [H-RTK F9P (Holybro Website)](https://holybro.com/products/h-rtk-f9p-gnss-series) -- [H-RTK Accessories (Holybro Website)](https://holybro.com/collections/h-rtk-gps) +- [H-RTK Accessories (Holybro Website)](https://holybro.com/collections/gps) ## Налаштування @@ -50,6 +50,6 @@ The cables/connectors may need to be modified in order to connect to other fligh ## Аксесуари до GPS -[H-RTK Mount (Holybro Website)](https://holybro.com/products/vertical-mount-for-h-rtk-helical) +[H-RTK Mount (Holybro Website)](https://holybro.com/collections/gps-accessories/products/vertical-mount-for-h-rtk-helical) ![h-rtk](../../assets/hardware/gps/rtk_holybro_h-rtk_mount_3.png) diff --git a/docs/uk/gps_compass/rtk_gps_holybro_h-rtk-m8p.md b/docs/uk/gps_compass/rtk_gps_holybro_h-rtk-m8p.md index 3e5d7b133e..79b138ad63 100644 --- a/docs/uk/gps_compass/rtk_gps_holybro_h-rtk-m8p.md +++ b/docs/uk/gps_compass/rtk_gps_holybro_h-rtk-m8p.md @@ -2,9 +2,10 @@ :::warning This GNSS has been discontinued, and is no longer commercially available. +Replaced by [Holybro H-RTK F9P GNSS](../gps_compass/rtk_gps_holybro_h-rtk-f9p.md). ::: -The [Holybro H-RTK M8P GNSS](https://holybro.com/collections/standard-h-rtk-series/products/h-rtk-m8p-gnss-series) is an [RTK GNSS module](../gps_compass/rtk_gps.md) series for the mass market. +The _Holybro H-RTK M8P GNSS_ is an [RTK GNSS module](../gps_compass/rtk_gps.md) series for the mass market. This family is similar to the [H-RTK M9P](../gps_compass/rtk_gps_holybro_h-rtk-f9p.md) series but uses the smaller, lighter, and less expensive M8P u-blox RTK GNSS module (which still provides far superior position resolution than previous generations\_. Є три моделі Holybro H-RTK M8P на вибір, кожна з різним дизайном антени, щоб задовольнити різні потреби. @@ -16,7 +17,7 @@ Refer to the [Specification and Model Comparison section](#specification-and-mod ## Де купити -- [H-RTK M8P (GPS RTK Mounts)](https://holybro.com/products/vertical-mount-for-h-rtk-helical) +- Припинено. ## Налаштування @@ -30,9 +31,7 @@ All H-RTK GNSS models come with a GH 10-pin connector/cable that is compatible w The cables/connectors may need to be modified in order to connect to other flight controller boards (see [pin map](#pin_map)below). ::: - - -## Карта виводів +## Pin Map {#pin_map} ![h-rtk_rover_pinmap](../../assets/hardware/gps/rtk_holybro_h-rtk-m8p_pinmap.jpg) diff --git a/docs/uk/gps_compass/rtk_gps_holybro_unicore_um982.md b/docs/uk/gps_compass/rtk_gps_holybro_unicore_um982.md index c5e24df2a4..479b9d277e 100644 --- a/docs/uk/gps_compass/rtk_gps_holybro_unicore_um982.md +++ b/docs/uk/gps_compass/rtk_gps_holybro_unicore_um982.md @@ -1,10 +1,10 @@ # Holybro H-RTK Unicore UM982 GPS -The [Holybro H-RTK Unicore UM982 GPS](https://holybro.com/products/h-rtk-um982) is an multi-band high-precision [RTK GNSS System](../gps_compass/rtk_gps.md) launched by Holybro. +The [Holybro H-RTK Unicore UM982 GPS](https://holybro.com/products/h-rtk-unicore-um982) is an multi-band high-precision [RTK GNSS System](../gps_compass/rtk_gps.md) launched by Holybro. ![HB-pmw3901-1](../../assets/hardware/gps/holybro-unicore-um982/holybro-unicore-um982-1.jpg) -This module is based on the [Unicore UM982 Chip](https://en.unicorecomm.com/products/detail/24), which supports RTK positioning and dual-antenna heading calculation. +This module is based on the [Unicore UM982 Chip](https://en.unicore.com/products/dual-antenna-gnss-um982/), which supports RTK positioning and dual-antenna heading calculation. Це означає, що він може генерувати рухому базову лінію визначення курсу/рискання для автопілотів з одним GPS-модулем і двома антенами - магнітометр не потрібен. Unlike when using a module such as the U-blox F9P, where you would need [two U-blox F9P modules to compute a heading angle](../gps_compass/u-blox_f9p_heading.md), with the Unicore UM982 GPS, you only need one GPS module! @@ -20,7 +20,7 @@ Additional technical information can be found at [Holybro Technical Documentatio ## Де купити -- [Holybro Website](https://holybro.com/products/h-rtk-um982) +- [Holybro Website](https://holybro.com/products/h-rtk-unicore-um982) ## Підключення diff --git a/docs/uk/gps_compass/rtk_gps_locosys_r2.md b/docs/uk/gps_compass/rtk_gps_locosys_r2.md index 9eabfb72af..0db339c34f 100644 --- a/docs/uk/gps_compass/rtk_gps_locosys_r2.md +++ b/docs/uk/gps_compass/rtk_gps_locosys_r2.md @@ -23,7 +23,7 @@ The [LOCOSYS Hawk R2](https://www.locosystech.com/en/product/hawk-r2.html) is a - Безкоштовне прогнозування гібридних ефемерид для швидшого холодного старту - Стандартна частота оновлення 5 Гц, до 10 Гц (підтримка SBAS лише 5 Гц) - Вбудований суперконденсатор для резервування системних даних для швидкого отримання супутникових даних -- Вбудована функція компасу 3-х вимірів +- Built-in 3 axis compass function - Три світлодіодного індикатора для живлення, PPS та передачі даних ![LOCOSYS Hawk R2](../../assets/hardware/gps/locosys_hawk_a1/locosys_hawk_a1_gps.png) diff --git a/docs/uk/gps_compass/septentrio.md b/docs/uk/gps_compass/septentrio.md index b358383bd3..cc63cc211d 100644 --- a/docs/uk/gps_compass/septentrio.md +++ b/docs/uk/gps_compass/septentrio.md @@ -10,7 +10,7 @@ Certain receivers are recommended for autopilot applications because of their ph Dual-antenna, ultra-low-power GNSS rover receiver with support for heading. -- [AsteRx-m3 Pro+](https://www.septentrio.com/en/products/gps/gnss-boards/asterx-m3-pro-plus) +- [AsteRx-m3 Pro+](https://www.septentrio.com/en/products/gnss-receivers/gnss-boards/asterx-m3-pro-plus) Dual-antenna, ultra-low-power versatile GNSS rover and base receiver with support for heading. @@ -19,7 +19,7 @@ Certain receivers are recommended for autopilot applications because of their ph Single-antenna evaluation kit with support for L5 frequency band, based on the mosaic-X5 GNSS receiver module. -- [mosaic-go heading](https://www.septentrio.com/en/products/gps/gnss-receiver-modules/mosaic-h-evaluation-kit) +- [mosaic-go heading](https://www.septentrio.com/en/products/gnss-receivers/gnss-receiver-modules/mosaic-h-evaluation-kit) Dual-antenna evaluation kit with support for heading, based on the mosaic-H GNSS receiver module. diff --git a/docs/uk/gps_compass/septentrio_mosaic-go.md b/docs/uk/gps_compass/septentrio_mosaic-go.md index 431cefff97..e6188d64be 100644 --- a/docs/uk/gps_compass/septentrio_mosaic-go.md +++ b/docs/uk/gps_compass/septentrio_mosaic-go.md @@ -2,8 +2,8 @@ The Septentrio mosaic-go receivers are evaluation kits for their mosaic-X5 and mosaic-H receiver modules. Because of their small size and low weight, they are ideal for autopilot applications. -The available variants are the [mosaic-go](https://www.septentrio.com/en/products/gps/gnss-receiver-modules/mosaic-go-evaluation-kit) -and [mosaic-go heading](https://www.septentrio.com/en/products/gps/gnss-receiver-modules/mosaic-h-evaluation-kit). +The available variants are the [mosaic-go](https://www.septentrio.com/en/products/gnss-receivers/gnss-receiver-modules/mosaic-go-evaluation-kit) +and [mosaic-go heading](https://www.septentrio.com/en/products/gnss-receivers/gnss-receiver-modules/mosaic-h-evaluation-kit). ![Mosaic go Highly Accurate GNSS Receiver Module](../../assets/hardware/gps/septentrio_sbf/mosaic-go.png) @@ -108,7 +108,7 @@ Make sure the JST cable is wired correctly since this is not a standard cable: These can be compensated for with the heading parameters provided by the Septentrio driver in PX4. :::info -For optimal heading results, the two antennas should be seperated by at least 30cm / 11.8 in (ideally 50cm / 19.7in or more). +For optimal heading results, the two antennas should be separated by at least 30cm / 11.8 in (ideally 50cm / 19.7in or more). For additional configuration of the dual antenna setup, please refer to our [Knowledge Base](https://support.septentrio.com/l/858493/2022-04-19/xgrqd) or the [hardware manual](https://web.septentrio.com/l/858493/2022-04-19/xgrql). ::: diff --git a/docs/uk/gps_compass/u-blox_f9p_heading.md b/docs/uk/gps_compass/u-blox_f9p_heading.md index 2c679bb912..f8b59d906c 100644 --- a/docs/uk/gps_compass/u-blox_f9p_heading.md +++ b/docs/uk/gps_compass/u-blox_f9p_heading.md @@ -10,7 +10,7 @@ The two GPS devices in this scenario are referred to as the _Moving Base_ and _R Підтримуються наступні пристрої: - [ARK RTK GPS](https://arkelectron.com/product/ark-rtk-gps/) (arkelectron.com) -- [SparkFun GPS-RTK2 Board - ZED-F9P](https://www.sparkfun.com/products/15136) (www.sparkfun.com) +- [SparkFun GPS-RTK2 Board - ZED-F9P](https://www.sparkfun.com/sparkfun-gps-rtk2-board-zed-f9p-qwiic-gps-15136.html) (www.sparkfun.com) - [SIRIUS RTK GNSS ROVER (F9P)](https://store-drotek.com/911-sirius-rtk-gnss-rover-f9p.html) (store-drotek.com) - [mRo u-blox ZED-F9 RTK L1/L2 GPS](https://store.mrobotics.io/product-p/m10020d.htm) (store.mrobotics.io) - [Holybro H-RTK F9P Helical or Base](https://holybro.com/products/h-rtk-f9p-gnss-series) (Holybro Store) diff --git a/docs/uk/hardware/board_packaging.md b/docs/uk/hardware/board_packaging.md new file mode 100644 index 0000000000..2ec864f0e7 --- /dev/null +++ b/docs/uk/hardware/board_packaging.md @@ -0,0 +1,298 @@ +# Board Firmware Packaging + +PX4 supports building distributable firmware packages for Linux-based (POSIX) boards. +While NuttX boards produce `.px4` firmware files that are flashed via QGroundControl, POSIX boards can produce `.deb` (Debian) packages that are installed using standard Linux package management tools (`dpkg`, `apt`). + +This page covers how manufacturers can add `.deb` packaging to their boards, with examples for both single-processor and multi-processor architectures. + +## Загальний огляд + +The packaging framework uses [CMake CPack](https://cmake.org/cmake/help/latest/module/CPack.html) with the DEB generator. +It is built on two extension points in the PX4 build system: + +- **`boards///cmake/package.cmake`**: CPack variable overrides (package name, version, dependencies, architecture, maintainer info). Loaded during CMake configure. +- **`boards///cmake/install.cmake`**: `install()` rules that define what goes into the package (binaries, scripts, config files, service files). Loaded from `platforms/posix/CMakeLists.txt` where build targets are available. + +When a board provides these files, CI automatically discovers and builds the `_deb` target alongside the normal firmware build. + +## Build Command + +For any board with packaging support: + +```sh +make __deb +``` + +Наприклад: + +```sh +make modalai_voxl2_deb +``` + +This builds the `_default` configuration (and any companion builds for multi-processor boards), then runs `cpack -G DEB` in the build directory. +The resulting `.deb` file is placed in `build/__default/`. + +## Adding Packaging to a Board + +### File Structure + +``` +boards/// + cmake/ + package.cmake # CPack configuration (required) + install.cmake # Install rules (required) + debian/ + postinst # Post-install script (optional) + prerm # Pre-remove script (optional) + .service # Systemd unit file (optional) +``` + +### Step 1: CPack Configuration (package.cmake) + +This file sets CPack variables that control the `.deb` metadata. +It is included from `cmake/package.cmake` after the base CPack defaults are configured. + +```cmake +# boards///cmake/package.cmake + +# Derive Debian-compatible version from git tag +# v1.17.0-alpha1-42-gabcdef -> 1.17.0~alpha1.42.gabcdef +# v1.17.0 -> 1.17.0 +string(REGEX REPLACE "^v" "" _deb_ver "${PX4_GIT_TAG}") +string(REGEX REPLACE "-" "~" _deb_ver "${_deb_ver}") +string(REGEX REPLACE "~([0-9]+)~" ".\\1." _deb_ver "${_deb_ver}") + +# Target architecture (use the target arch, not the build host) +set(CPACK_DEBIAN_ARCHITECTURE "arm64") + +# Package identity +set(CPACK_DEBIAN_PACKAGE_NAME "my-px4-board") +set(CPACK_DEBIAN_FILE_NAME "my-px4-board_${_deb_ver}_arm64.deb") + +# Install prefix +set(CPACK_PACKAGING_INSTALL_PREFIX "/usr") +set(CPACK_INSTALL_PREFIX "/usr") +set(CPACK_SET_DESTDIR true) + +# Package metadata +set(CPACK_DEBIAN_PACKAGE_DESCRIPTION "PX4 Autopilot for My Board") +set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Vendor ") +set(CPACK_DEBIAN_PACKAGE_DEPENDS "some-dependency (>= 1.0)") +set(CPACK_DEBIAN_PACKAGE_CONFLICTS "") +set(CPACK_DEBIAN_PACKAGE_REPLACES "") + +# Disable shlibdeps for cross-compiled boards +set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS OFF) + +# Include post-install and pre-remove scripts (optional) +set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA + "${PX4_BOARD_DIR}/debian/postinst;${PX4_BOARD_DIR}/debian/prerm") +``` + +**Key variables:** + +| Змінні | Ціль | +| -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `CPACK_DEBIAN_ARCHITECTURE` | Target architecture. Set explicitly for cross-compiled boards since `dpkg --print-architecture` reports the build host, not the target. | +| `CPACK_DEBIAN_PACKAGE_NAME` | Package name as it appears in `dpkg -l`. | +| `CPACK_DEBIAN_FILE_NAME` | Output `.deb` filename. | +| `CPACK_DEBIAN_PACKAGE_DEPENDS` | Runtime dependencies (comma-separated, Debian format). | +| `CPACK_DEBIAN_PACKAGE_SHLIBDEPS` | Set to `OFF` for cross-compiled boards where `dpkg-shlibdeps` cannot inspect target binaries. | + +### Step 2: Install Rules (install.cmake) + +This file defines what files are packaged in the `.deb`. +It is included from `platforms/posix/CMakeLists.txt` where the `px4` build target is available. + +All paths are relative to `CPACK_PACKAGING_INSTALL_PREFIX` (typically `/usr`). Use `../` to install outside the prefix (e.g., `../etc/` installs to `/etc/`). + +**Minimal example (single-processor board):** + +```cmake +# boards///cmake/install.cmake + +# PX4 binary +install(TARGETS px4 RUNTIME DESTINATION bin) + +# Module alias script (generated during build) +install(PROGRAMS ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/px4-alias.sh DESTINATION bin) + +# Startup scripts +install(PROGRAMS + ${PX4_BOARD_DIR}/target/my-px4-start + DESTINATION bin +) + +# Configuration files +install(FILES + ${PX4_BOARD_DIR}/target/my-config.conf + DESTINATION ../etc/my-board +) + +# Systemd service +install(FILES ${PX4_BOARD_DIR}/debian/my-px4.service + DESTINATION ../etc/systemd/system +) + +# Component metadata +install(FILES + ${PX4_BINARY_DIR}/actuators.json.xz + ${PX4_BINARY_DIR}/parameters.json.xz + DESTINATION ../data/px4/etc/extras + OPTIONAL +) +install(FILES ${PX4_BINARY_DIR}/events/all_events.json.xz + DESTINATION ../data/px4/etc/extras + OPTIONAL +) +``` + +### Step 3: Debian Scripts (optional) + +#### postinst + +Runs after the package is installed. Common tasks: + +- Create `px4-*` module symlinks from `px4-alias.sh` +- Set up required directories with correct ownership +- Run `systemctl daemon-reload` to pick up the service file +- Board-specific setup (e.g., DSP signature generation) + +```bash +#!/usr/bin/env bash +set -e + +# Create px4-* symlinks +if [ -f /usr/bin/px4-alias.sh ]; then + grep "^alias " /usr/bin/px4-alias.sh | \ + sed "s/alias \(px4-[a-zA-Z0-9_]*\)=.*/\1/" | while read cmd; do + ln -sf px4 "/usr/bin/${cmd}" + done +fi + +# Create data directories +mkdir -p /data/px4/param +mkdir -p /data/px4/etc/extras + +# Reload systemd +if command -v systemctl > /dev/null 2>&1; then + systemctl daemon-reload +fi +``` + +#### prerm + +Runs before the package is removed: + +```bash +#!/usr/bin/env bash +set -e + +# Stop the service +if command -v systemctl > /dev/null 2>&1; then + systemctl stop my-px4 2>/dev/null || true +fi + +# Remove px4-* symlinks +for f in /usr/bin/px4-*; do + if [ -L "$f" ] && [ "$(readlink "$f")" = "px4" ]; then + rm -f "$f" + fi +done +``` + +Both scripts must be executable (`chmod +x`). + +## Multi-Processor Boards + +Some boards run PX4 across multiple processors, for example the ModalAI VOXL2 which has a POSIX apps processor (ARM) and a Hexagon DSP (SLPI). +These produce two separate CMake builds, but the `.deb` must contain artifacts from both. + +### How It Works + +1. The `_default` build (POSIX/apps processor) owns the `.deb`. +2. The Makefile `%_deb` target builds `_default`, which chains any companion builds as CMake prerequisites. +3. The `install.cmake` pulls companion build artifacts via absolute path to the sibling build directory. +4. CPack runs in the `_default` build tree and produces a single `.deb`. + +### Companion Build Artifacts + +In `install.cmake`, reference the companion build output by absolute path: + +```cmake +# DSP firmware blob from companion SLPI build +set(SLPI_BUILD_DIR "${PX4_SOURCE_DIR}/build/_-slpi_default") + +install(FILES ${SLPI_BUILD_DIR}/platforms/qurt/libpx4.so + DESTINATION lib/rfsa/adsp + OPTIONAL +) +``` + +The `OPTIONAL` keyword allows the `.deb` to build even when the companion build hasn't run (useful for development/testing of just the apps-processor side). + +### VOXL2 Reference + +The VOXL2 board is a complete working example of multi-processor packaging: + +``` +boards/modalai/voxl2/ + cmake/ + package.cmake # CPack config: voxl-px4, arm64, deps, shlibdeps off + install.cmake # px4 binary, SLPI libpx4.so, scripts, configs, metadata + debian/ + postinst # Symlinks, DSP signature, directory setup + prerm # Stop service, remove symlinks + voxl-px4.service # Systemd unit (after sscrpcd, restart on-failure) + target/ + voxl-px4 # Main startup wrapper + voxl-px4-start # PX4 module startup script +``` + +The resulting `.deb` installs: + +| Path | Contents | +| -------------------------------------- | ------------------------------------------------- | +| `/usr/bin/px4` | Apps processor PX4 binary | +| `/usr/bin/px4-alias.sh` | Module alias script | +| `/usr/bin/voxl-px4` | Startup wrapper | +| `/usr/bin/voxl-px4-start` | Module startup script | +| `/usr/lib/rfsa/adsp/libpx4.so` | DSP firmware (from SLPI build) | +| `/etc/modalai/*.config` | Board configuration files | +| `/etc/systemd/system/voxl-px4.service` | Systemd service | +| `/data/px4/etc/extras/*.json.xz` | Component metadata | + +## CI Integration + +### Automatic Discovery + +The CI system (`Tools/ci/generate_board_targets_json.py`) automatically discovers boards with `cmake/package.cmake` and adds a `__deb` target to the board's existing CI group. +No manual CI configuration is needed. + +### Artifact Collection + +The `Tools/ci/package_build_artifacts.sh` script collects `.deb` files alongside `.px4` and `.elf` artifacts. +On tagged releases, `.deb` files are uploaded to both S3 and GitHub Releases. + +## Version Format + +The `.deb` version is derived from `PX4_GIT_TAG` using Debian-compatible formatting: + +| Git Tag | Debian Version | Примітки | +| --------------------------- | -------------------------- | --------------------------------------------------------- | +| `v1.17.0` | `1.17.0` | Stable release | +| `v1.17.0-beta1` | `1.17.0~beta1` | Pre-release (`~` sorts before release) | +| `v1.17.0-alpha1-42-gabcdef` | `1.17.0~alpha1.42.gabcdef` | Development build | + +The `~` prefix in Debian versioning ensures pre-releases sort lower than the final release: `1.17.0~beta1 < 1.17.0`. + +## Checklist for New Boards + +1. Create `boards///cmake/package.cmake` with CPack variables +2. Create `boards///cmake/install.cmake` with install rules +3. (Optional) Create `boards///debian/postinst` and `prerm` +4. (Optional) Create `boards///debian/.service` +5. Test locally: `make __deb` +6. Verify: `dpkg-deb --info build/__default/_*.deb` +7. Verify: `dpkg-deb --contents build/__default/_*.deb` +8. CI picks it up automatically on the next push diff --git a/docs/uk/hardware/board_support_guide.md b/docs/uk/hardware/board_support_guide.md index 9d1f1854db..1fe32f511c 100644 --- a/docs/uk/hardware/board_support_guide.md +++ b/docs/uk/hardware/board_support_guide.md @@ -57,7 +57,7 @@ PX4 загалом підтримує лише плати, які є комер ### VER and REV ID (Hardware Revision and Version Sensing) {#ver_rev_id} У FMUv5 та пізніше є електричний механізм виявлення. -Цей сенсорний зв'язок разом з необов'язковими даними конфігурації буде використовуватися для визначення конфігурації апаратного забезпечення щодо обов'язкової конфігурації пристрою та живлення. Manufacturers must obtain the VER and REV ID from PX4 board maintainers by issuing a PR to ammend the [DS-018 Pixhawk standard](https://github.com/pixhawk/Pixhawk-Standards) for board versions and revisions. +Цей сенсорний зв'язок разом з необов'язковими даними конфігурації буде використовуватися для визначення конфігурації апаратного забезпечення щодо обов'язкової конфігурації пристрою та живлення. Manufacturers must obtain the VER and REV ID from PX4 board maintainers by issuing a PR to amend the [DS-018 Pixhawk standard](https://github.com/pixhawk/Pixhawk-Standards) for board versions and revisions. Оскільки ці борди на 100% відповідають стандарту Pixhawk, значення, призначені для VER та REV ID, є значеннями за замовчуванням для цієї версії FMU. @@ -97,7 +97,7 @@ _New_ experimental boards are allocated [VER and REV IDs](#ver_rev_id) based on Ця категорія включає всі плати, які не підтримуються проектом PX4 або виробником, і що виходять за межі "експериментальної" підтримки. - Плата на папері в певній мірі сумісна з чимось, що ми вже підтримуємо, і для того, щоб підняти її до рівня "експериментального", потрібно буде мінімальних зусиль, проте або команда розробників, або виробник наразі цим не займаються -- Manufacturer/Owner of hardware violates our [Code of Conduct](https://discuss.px4.io/t/code-of-conduct/13655) +- Manufacturer/Owner of hardware violates our [Code of Conduct](https://discuss.px4.io/t/px4-community-code-of-conduct/13655) - Закритий вихідний код, де будь-які необхідні інструменти/бібліотеки/драйвери тощо, необхідні для підтримки плати, вважаються несумісними через ліцензійні обмеження - Плата не відповідає мінімальним вимогам, визначеним у Загальних вимогах diff --git a/docs/uk/hardware/drone_parts.md b/docs/uk/hardware/drone_parts.md index 42a6209123..31cefb55fb 100644 --- a/docs/uk/hardware/drone_parts.md +++ b/docs/uk/hardware/drone_parts.md @@ -1,4 +1,4 @@ -# Hardware Hardware Selection & Setup +# Hardware Selection & Setup У цьому розділі міститься інформація про повністю готові транспортні засоби PX4 і компоненти, які ви можете використовувати для створення власних дронів: diff --git a/docs/uk/hardware/porting_guide_config.md b/docs/uk/hardware/porting_guide_config.md index 8017800f6c..83575ce280 100644 --- a/docs/uk/hardware/porting_guide_config.md +++ b/docs/uk/hardware/porting_guide_config.md @@ -70,3 +70,19 @@ If _kconfiglib_ is not installed, you can do so using the command: `pip3 install ### Інтерфейс командного рядка menuconfig ![menuconfig command line interface](../../assets/hardware/kconfig-guiconfig.png) + +## Fortified Toolchain Compatibility + +Some toolchains define `_FORTIFY_SOURCE` by default. Those toolchains generally require some optimization, which means PX4 configurations that use `-O0` may fail. + +PX4 keeps the default debug optimization unchanged unless you explicitly opt in. To switch `PX4_DEBUG_OPT_LEVEL` from `-O0` to `-Og`, enable: + +- `Toolchain > Fortified toolchain support` + +This is the Kconfig symbol: + +```sh +CONFIG_BOARD_SUPPORT_FORTIFIED_TOOLCHAIN=y +``` + +You can set it either in `boardconfig`/`boardguiconfig` or directly in your board's `*.px4board` file. diff --git a/docs/uk/index.md b/docs/uk/index.md index 729767f521..da920b8e18 100644 --- a/docs/uk/index.md +++ b/docs/uk/index.md @@ -5,7 +5,7 @@ const { site } = useData(); # Посібник користувача автопілота PX4 -[![Releases](https://img.shields.io/badge/release-main-blue.svg)](https://github.com/PX4/PX4-Autopilot/releases) [![Discuss](https://img.shields.io/badge/discuss-px4-ff69b4.svg)](https://discuss.px4.io//) [![Discord](https://discordapp.com/api/guilds/1022170275984457759/widget.png?style=shield)](https://discord.gg/dronecode) +[![Releases](https://img.shields.io/badge/release-main-blue.svg)](https://github.com/PX4/PX4-Autopilot/releases) [![Discuss](https://img.shields.io/badge/discuss-px4-ff69b4.svg)](https://discuss.px4.io//) [![Discord](https://discordapp.com/api/guilds/1022170275984457759/widget.png?style=shield)](https://discord.com/invite/dronecode) PX4 is an open-source autopilot for drones and autonomous vehicles. It runs on multirotors, fixed-wing, VTOL, helicopters, rovers, and more. This guide covers everything from assembly and configuration to flight operations and development. @@ -21,11 +21,13 @@ Documented changes since the stable release are captured in the evolving [releas
+## Try PX4 + +No hardware needed. Run PX4 in simulation with a single command using [Docker or a .deb package](simulation/px4_simulation_quickstart.md). Connect [QGroundControl](https://qgroundcontrol.com), [MAVSDK](https://mavsdk.mavlink.io/), or [ROS 2](ros2/index.md) and start flying immediately. + ## For Developers -:::tip -Building on PX4 or extending the platform? Start here: [Development Guide](development/development.md). Set up your [dev environment](dev_setup/config_initial.md), [build from source](dev_setup/building_px4.md), run [SITL simulation](simulation/index.md), or integrate via [ROS 2](ros2/index.md) and [MAVSDK](https://mavsdk.mavlink.io/). -::: +Want to modify PX4 or build from source? Start with the [Development Guide](development/development.md): set up your [dev environment](dev_setup/dev_env.md), [build the code](dev_setup/building_px4.md), and run [SITL simulation](simulation/index.md). ## Початок роботи @@ -49,7 +51,7 @@ Read [Operations](config/operations.md) to understand safety features and failsa ## Підтримка -Get help on the [discussion forums](https://discuss.px4.io/) or [Discord](https://discord.gg/dronecode). See the [Support](contribute/support.md) page for diagnosing problems, reporting bugs, and joining the [weekly dev call](contribute/dev_call.md). +Get help on the [discussion forums](https://discuss.px4.io/) or [Discord](https://discord.com/invite/dronecode). See the [Support](contribute/support.md) page for diagnosing problems, reporting bugs, and joining the [weekly dev call](contribute/dev_call.md). ## Долучитись до проєкту @@ -93,9 +95,9 @@ The calendar default timezone is Central European Time (CET). ## Управління -The PX4 Autopilot project is hosted by the [Dronecode Foundation](https://www.dronecode.org/), a [Linux Foundation](https://www.linuxfoundation.org/) Collaborative Project. Dronecode holds all PX4 trademarks and serves as the project's legal guardian, ensuring vendor-neutral stewardship. No single company owns the name or controls the roadmap. The source code is licensed under the [BSD 3-Clause](https://opensource.org/license/BSD-3-Clause) license, so you are free to use, modify, and distribute it in your own projects. +The PX4 Autopilot project is hosted by the [Dronecode Foundation](https://dronecode.org/), a [Linux Foundation](https://www.linuxfoundation.org/) Collaborative Project. Dronecode holds all PX4 trademarks and serves as the project's legal guardian, ensuring vendor-neutral stewardship. No single company owns the name or controls the roadmap. The source code is licensed under the [BSD 3-Clause](https://opensource.org/license/BSD-3-Clause) license, so you are free to use, modify, and distribute it in your own projects. -Dronecode Logo Linux Foundation Logo +Dronecode Logo Linux Foundation Logo
 
diff --git a/docs/uk/mavlink/adding_messages.md b/docs/uk/mavlink/adding_messages.md index 3ba5dac36b..22a2927ed3 100644 --- a/docs/uk/mavlink/adding_messages.md +++ b/docs/uk/mavlink/adding_messages.md @@ -39,7 +39,7 @@ Once the message headers for your definitions are generated in the PX4 build, yo The first step in debugging is to confirm that any messages you've created are being sent/received as you expect. -You should should first use the `uorb top []` command to verify in real-time that your message is published and the rate (see [uORB Messaging](../middleware/uorb.md#uorb-top-command)). +You should first use the `uorb top []` command to verify in real-time that your message is published and the rate (see [uORB Messaging](../middleware/uorb.md#uorb-top-command)). This approach can also be used to test incoming messages that publish a uORB topic (for other messages you might use `printf` in your code and test in SITL). Існує кілька підходів для перегляду трафіку MAVLink: @@ -82,16 +82,16 @@ mavlink stream -u 14556 -s CA_TRAJECTORY -r 300 ### Оновлення QGroundControl -You will need to [Build QGroundControl](https://docs.qgroundcontrol.com/master/en/qgc-dev-guide/getting_started/index.html) including a pre-built C library that contains your custom messages. +You will need to [Build QGroundControl](https://docs.qgroundcontrol.com/master/en/qgc-dev-guide/getting_started/index.html) with your custom messages included. -QGC uses a pre-built C library that must be located at [/qgroundcontrol/libs/mavlink/include/mavlink](https://github.com/mavlink/qgroundcontrol/tree/master/libs/mavlink/include/mavlink) in the QGC source. +QGC fetches MAVLink via CMake using settings defined in [`cmake/CustomOptions.cmake`](https://github.com/mavlink/qgroundcontrol/blob/master/cmake/CustomOptions.cmake). +The key variables are `QGC_MAVLINK_GIT_REPO` (the MAVLink repository to fetch), `QGC_MAVLINK_GIT_TAG` (a specific commit or tag), and `QGC_MAVLINK_DIALECT` (the dialect, default: `all`). +To use a custom MAVLink repository or dialect, override these in a `CustomOverrides.cmake` file in the QGC source root. -By default this is pre-included as a submodule from but you can [generate your own MAVLink Libraries](https://mavlink.io/en/getting_started/generate_libraries.html). +QGC uses the **all** dialect by default, which includes **common.xml**. +You can include your messages in either file, or [generate your own MAVLink Libraries](https://mavlink.io/en/getting_started/generate_libraries.html). -QGC uses the **all.xml** dialect by default, which includes **common.xml**. -You can include your messages in either file. - -Note that if you use your own _custom dialect_ then it should include **ArduPilotMega.xml** (or it will miss all the existing messages), and you will need to change the dialect used by setting it in [`MAVLINK_CONF`](https://github.com/mavlink/qgroundcontrol/blob/master/QGCExternalLibs.pri#L52) when running _qmake_. +Note that if you use your own _custom dialect_ then it should include **all.xml** (or it may miss all the existing messages), and you will need to set `QGC_MAVLINK_DIALECT` accordingly in `CustomOverrides.cmake`. ### Оновлення MAVSDK diff --git a/docs/uk/mavlink/index.md b/docs/uk/mavlink/index.md index 3da14afef9..e7829e263a 100644 --- a/docs/uk/mavlink/index.md +++ b/docs/uk/mavlink/index.md @@ -9,10 +9,16 @@ It also links instructions for how you can add PX4 support for: - [Adding Standard Messages](../mavlink/adding_messages.md) - [Streaming MAVLink messages](../mavlink/streaming_messages.md) +- [Configuring/Using MAVLink Profiles](../mavlink/mavlink_profiles.md) - [Handling incoming MAVLink messages (and writing to a uORB topic)](../mavlink/receiving_messages.md) - [Custom MAVLink Messages](../mavlink/custom_messages.md) +- [Message Signing](../mavlink/message_signing.md) - [Protocols/Microservices](../mavlink/protocols.md) +:::warning +MAVLink messages are unauthenticated by default. Without [message signing](../mavlink/message_signing.md) enabled, any device that can send MAVLink messages to the vehicle can execute commands including shell access, file operations, and flight termination. Production deployments must enable signing and follow the [Security Hardening](../mavlink/security_hardening.md) guide. +::: + :::info We do not yet cover _command_ handling and sending, or how to implement your own microservices. ::: @@ -77,7 +83,7 @@ You will need to work with the [MAVLink team](https://mavlink.io/en/contributing ::: PX4 includes the [mavlink/mavlink](https://github.com/mavlink/mavlink) repo as a submodule under [/src/modules/mavlink](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/mavlink). -This contains XML definition files in [/mavlink/messages/1.0/](https://github.com/mavlink/mavlink/blob/master/message_definitions/v1.0/). +This contains XML definition files in [/mavlink/messages/1.0/](https://github.com/mavlink/mavlink/tree/master/message_definitions/v1.0). Інструментарій збірки генерує заголовні файли MAVLink 2 C під час збірки. The XML file for which headers files are generated may be defined in the [PX4 kconfig board configuration](../hardware/porting_guide_config.md#px4-board-configuration-kconfig) on a per-board basis, using the variable `CONFIG_MAVLINK_DIALECT`: diff --git a/docs/uk/mavlink/mavlink_profiles.md b/docs/uk/mavlink/mavlink_profiles.md new file mode 100644 index 0000000000..c3ae6c8019 --- /dev/null +++ b/docs/uk/mavlink/mavlink_profiles.md @@ -0,0 +1,67 @@ +# MAVLink Profiles + +A MAVLink _profile_ (also called a _mode_) defines a set of messages that can be streamed by default on a MAVLink channel and their rates. + +This section lists the profiles, and explains how they can be used and extended. + +## Available Profiles + +The available profiles (in source-code declaration order) are: + +- _Normal_ (`MAVLINK_MODE_NORMAL`): Set of messages for a GCS. +- _Onboard_ (`MAVLINK_MODE_ONBOARD`): Set of messages for a companion computer on a fast link (such as Ethernet). +- _Gimbal_ (`MAVLINK_MODE_GIMBAL`): Messages for a gimbal. Note this also enables message forwarding. +- _External Vision_ (`MAVLINK_MODE_EXTVISION`): Messages for offboard vision systems. +- _External Vision Minimal_ (`MAVLINK_MODE_EXTVISIONMIN`): Messages for offboard vision systems on slower links. +- _OSD_ (`MAVLINK_MODE_OSD`): Set of messages for an [On-Screen Display (OSD)](../peripherals/osd.md#mavlink-osd) system. +- _Magic_ (`MAVLINK_MODE_MAGIC`): No messages streamed by default. Used when configuring streaming dynamically via MAVLink. +- _Custom_ (`MAVLINK_MODE_CUSTOM`): Same as `MAVLINK_MODE_MAGIC`. +- _Config_ (`MAVLINK_MODE_CONFIG`): Set of messages for configuration interface, sent at higher rates. This is used, for example, to send the `MAVLINK_MODE_NORMAL` message set via USB to a GCS. +- _Iridium_ (`MAVLINK_MODE_IRIDIUM`): Streams `HIGH_LATENCY2` message to an iridium satellite phone. +- _Minimal_ (`MAVLINK_MODE_MINIMAL`): Minimal set of messages for use with a GCS on a poor telemetry link. +- _Onboard Low Bandwidth_ (`MAVLINK_MODE_ONBOARD_LOW_BANDWIDTH`): Set of messages to be streamed to a companion computer for re-routing to a reduced-traffic link, such as a GCS. +- _Low Bandwidth_ (`MAVLINK_MODE_LOW_BANDWIDTH`): Reduced message set for low bandwidth links. +- _uAvionix_ (`MAVLINK_MODE_UAVIONIX`): Messages for a uAvionix ADS-B beacon. +- _Distance Sensor_ (`MAVLINK_MODE_DISTANCE_SENSOR`): Streams distance sensor data at unlimited rate. + +:::tip +The profile defines the _default_ messages and rates. +A connected MAVLink system can still request the streams/rates it wants using [MAV_CMD_SET_MESSAGE_INTERVAL](https://mavlink.io/en/messages/common.html#MAV_CMD_SET_MESSAGE_INTERVAL). +::: + +To find the exact messages in each profile, search for `configure_streams_to_default` (or the above profile names) in [mavlink_main.cpp](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/mavlink_main.cpp). + +## Assigning Profiles to Ports + +[MAVLink Peripherals](../peripherals/mavlink_peripherals.md) explains how to set up a port for communicating over MAVLink. +This uses the concept of an abstract [MAVLink instance](../peripherals/mavlink_peripherals.md#mavlink-instances) which is then assigned to a serial port. + +The profile associated with a particular MAVLink instance is set using the associated `MAV_X_MODE` parameter: + +- [MAV_0_MODE](../advanced_config/parameter_reference.md#MAV_0_MODE) +- [MAV_1_MODE](../advanced_config/parameter_reference.md#MAV_1_MODE) +- [MAV_2_MODE](../advanced_config/parameter_reference.md#MAV_2_MODE) + +There are also dedicated profile parameters for ports that are not configured via MAVLink instances: + +- [USB_MAV_MODE](../advanced_config/parameter_reference.md#USB_MAV_MODE): Profile for the USB port (used when MAVLink is set or detected on USB). +- [MAV_S_MODE](../advanced_config/parameter_reference.md#MAV_S_MODE): Profile for the internal SOM (System on Module) to FMU communication channel, used on boards where the FMU and companion computer are co-located on the same module. + +Note that not all profiles can necessarily be set on these ports. + +## Adding Messages to a Profile + +You can add messages to a profile in appropriate `case` switch in the [Mavlink::configure_streams_to_default(const char \*configure_single_stream)](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/mavlink_main.cpp#L1430) method (see [mavlink_main.cpp](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/mavlink_main.cpp)). + +If you're testing with a GCS over USB you might add the message to the `MAVLINK_MODE_CONFIG` case using the `configure_stream_local()` method. +For example, to stream `BATTERY_STATUS_DEMO` at 5 Hz: + +```cpp + case MAVLINK_MODE_CONFIG: // USB + // Note: streams requiring low latency come first + ... + configure_stream_local("BATTERY_STATUS_DEMO", 5.0f); + ... +``` + +See [Streaming MAVLink Messages](streaming_messages.md) for a more detailed example. diff --git a/docs/uk/mavlink/message_signing.md b/docs/uk/mavlink/message_signing.md new file mode 100644 index 0000000000..68e8f69e4a --- /dev/null +++ b/docs/uk/mavlink/message_signing.md @@ -0,0 +1,184 @@ +# MAVLink Message Signing + +[MAVLink 2 message signing](https://mavlink.io/en/guide/message_signing.html) allows PX4 to cryptographically verify that incoming MAVLink messages originate from a trusted source (authentication). + +:::info +This mechanism does not _encrypt_ the message payload. +::: + +## Загальний огляд + +When signing is enabled, PX4 appends a 13-byte [signature](https://mavlink.io/en/guide/message_signing.html#signature) to every outgoing MAVLink 2 message. + +Incoming messages are checked against the shared secret key, and unsigned or incorrectly signed messages are rejected (with [exceptions for safety-critical messages](#unsigned-message-allowlist)). + +The signing implementation is built into the MAVLink module and is always available, with no special build flags required. +The key is stored in an SD card: + +- **No key on SD card**: + Signing is disabled. + All messages are sent unsigned and all incoming messages are accepted. +- **Valid key on SD card**: + Signing is active on **all links** (including USB). + Outgoing messages are signed. + Incoming messages must be signed (with [exceptions](#unsigned-message-allowlist)). + +## Enable/Disable Signing + +Signing is controlled using the standard MAVLink [SETUP_SIGNING](https://mavlink.io/en/messages/common.html#SETUP_SIGNING) message (as per the [MAVLink signing specification](https://mavlink.io/en/guide/message_signing.html)): + +- To **enable** signing, send a `SETUP_SIGNING` message with a valid key on any link when no key is currently provisioned (see [Key Provisioning](#key-provisioning)). +- To **disable** signing via MAVLink, send a `SETUP_SIGNING` message with an all-zero key and timestamp. + This message **must be signed with the current active key**. + An unsigned blank-key message is rejected. +- To **change** the signing key, send a `SETUP_SIGNING` message with the new key on any link. + When signing is already active, the message must be signed with the current key. + +:::warning +Signing key changes (enable, disable, or rotate) are **rejected while the vehicle is armed**. +The vehicle must be disarmed before signing configuration can be changed. +::: + +:::tip +If the signing key is lost, you can still disable signing if you have physical access to the vehicle. +Either delete the key file (`/mavlink/mavlink-signing-key.bin`) from the SD card and reboot, or remove the SD card entirely. +::: + +## Key Provisioning + +The signing key is set by sending the MAVLink [SETUP_SIGNING](https://mavlink.io/en/messages/common.html#SETUP_SIGNING) message (ID 256) to PX4. +This message contains: + +- A 32-byte secret key +- A 64-bit initial timestamp + +PX4 accepts `SETUP_SIGNING` on **any link** (USB, telemetry radio, network, and so on). + +When signing is **not active** (no key provisioned), the first `SETUP_SIGNING` with a valid key enables signing. +When signing is **already active**, key changes (including disabling) require that the `SETUP_SIGNING` message is signed with the current key. + +Note that `SETUP_SIGNING` is rejected while the vehicle is armed (disarm before provisioning or changing keys). +As per the MAVLink specification, `SETUP_SIGNING` is never forwarded to other links. + +## Key Storage + +The secret key and timestamp are stored on the SD card at: + +```txt +/mavlink/mavlink-signing-key.bin +``` + +The file is a 40-byte binary file: + +| Offset | Розмір | Content | +| ------ | -------- | -------------------------------------------------------- | +| 0 | 32 bytes | Secret key | +| 32 | 8 bytes | Timestamp (`uint64_t`, little-endian) | + +The file is created with mode `0600` (owner read/write only), and the containing `/mavlink/` directory is created with mode `0700` (owner only). + +On startup, PX4 reads the key from this file. +If the file exists and contains a non-zero key or timestamp, signing is activated automatically. + +:::info +The timestamp in the file is set when `SETUP_SIGNING` is received. +A graceful shutdown also writes the current timestamp back, but in practice most vehicles are powered off by pulling the battery, so the on-disk timestamp will typically remain at the value from the last key provisioning. +::: + +:::info +Storage of the key on the SD card means that signing can be disabled by removing the card. +Note that this requires physical access to the vehicle. +::: + +## How It Works + +### Initialization + +1. The MAVLink module calls `MavlinkSignControl::start()` during startup. +2. The `/mavlink/` directory is created if it doesn't exist. +3. The `mavlink-signing-key.bin` file is opened if it exists. +4. If a valid key is found (non-zero key or timestamp), signing is activated: the signing struct is wired into the MAVLink library and outgoing messages are signed. +5. If no valid key is found, the signing struct is left disconnected, and the MAVLink library operates with zero signing overhead. + +### Outgoing Messages + +When signing is active (valid key present), the `MAVLINK_SIGNING_FLAG_SIGN_OUTGOING` flag is set, which causes the MAVLink library to automatically append a [SHA-256 based signature](https://mavlink.io/en/guide/message_signing.html#signature) to every outgoing MAVLink 2 message. + +When no key is present, signing is completely bypassed with no CPU or bandwidth overhead. + +### Incoming Messages + +For each incoming message, the MAVLink library checks whether a valid signature is present. +If the message is unsigned or has an invalid signature, the library calls the `accept_unsigned` callback, which decides whether to accept or reject the message based on: + +1. **Signing not active**: If no key has been loaded, all messages are accepted. +2. **Allowlisted message**: Certain [safety-critical messages](#unsigned-message-allowlist) are always accepted. + +## Unsigned Message Allowlist + +The following messages are **always** accepted unsigned, regardless of the signing state. +These are safety-critical messages that may originate from systems that don't support signing: + +| Повідомлення | ID | Reason | +| -------------------------------------------------------------------------------------------- | --- | -------------------------------------------------------- | +| [HEARTBEAT](https://mavlink.io/en/messages/common.html#HEARTBEAT) | 0 | System discovery and liveness detection | +| [RADIO_STATUS](https://mavlink.io/en/messages/common.html#RADIO_STATUS) | 109 | Radio link status from SiK radios and other radio modems | +| [ADSB_VEHICLE](https://mavlink.io/en/messages/common.html#ADSB_VEHICLE) | 246 | ADS-B traffic information for collision avoidance | +| [COLLISION](https://mavlink.io/en/messages/common.html#COLLISION) | 247 | Collision threat warnings | + +## Security Considerations + +### Signing is enforced on all links + +When signing is active, **all links require signed messages**. +This means: + +- An attacker cannot send unsigned commands on any link. +- Changing or disabling the key requires sending a `SETUP_SIGNING` message **signed with the current key**. +- Signing can be disabled via MAVLink by sending a signed `SETUP_SIGNING` with an all-zero key. + +### Armed guard + +`SETUP_SIGNING` is rejected while the vehicle is armed. +This prevents the signing configuration from being changed during flight, whether by accident or by an attacker who has obtained the key. + +### Lost key recovery + +If the signing key is lost on the GCS side and no device has the current key: + +- **Remove the SD card** and delete `/mavlink/mavlink-signing-key.bin`, then reboot. +- **Reflash via SWD/JTAG** if the SD card is not accessible. + +:::warning +There is no software-only recovery path for a lost key. +This is intentional: any MAVLink-based recovery mechanism would also be available to an attacker. +Physical access to the SD card or debug port is required. +::: + +### Other considerations + +- **Initial key provisioning**: When no key is provisioned, `SETUP_SIGNING` is accepted unsigned on any link. + Once a key is active, subsequent changes require a signed message. + Provision the initial key over a trusted connection, such as USB. +- **Key not exposed via parameters**: The secret key is stored in a separate file on the SD card, not as a MAVLink parameter, so it cannot be read back through the parameter protocol. +- **SD card access**: Anyone with physical access to the SD card can read or modify the `mavlink-signing-key.bin` file, or remove the card entirely to disable signing. + Ensure physical security of the vehicle if signing is used as a security control. +- **Replay protection**: The MAVLink signing protocol includes a timestamp that prevents replay attacks. + The on-disk timestamp is updated when a new key is provisioned via `SETUP_SIGNING`. + A graceful shutdown also persists the current timestamp, but since most vehicles are powered off by pulling the battery, the on-disk timestamp will typically remain at the value from the last key provisioning on reboot. +- **No encryption**: Message signing provides **authentication and integrity only**. + Messages are still sent in plaintext. + An eavesdropper can read all message contents (telemetry, commands, parameters, missions) but cannot forge or modify them without the key. +- **Allowlisted messages bypass signing**: A small set of [safety-critical messages](#unsigned-message-allowlist) are always accepted unsigned. + An attacker can spoof these specific messages (e.g. fake `ADSB_VEHICLE` traffic) even when signing is active. + +### What signing does NOT protect against + +| Attack | Why | +| ----------------------------------------------------- | ------------------------------------------------------- | +| Eavesdropping | Messages are not encrypted | +| SD card extraction | Key file is readable by anyone with physical access | +| Spoofed `HEARTBEAT`/`RADIO_STATUS`/`ADSB`/`COLLISION` | These are allowlisted unsigned | +| Lost key without SD card access | Requires SWD reflash | +| Key rotation | No automatic mechanism; manual re-provisioning required | +| In-flight key changes | `SETUP_SIGNING` rejected while armed | diff --git a/docs/uk/mavlink/protocols.md b/docs/uk/mavlink/protocols.md index d7808a61f1..44274f1394 100644 --- a/docs/uk/mavlink/protocols.md +++ b/docs/uk/mavlink/protocols.md @@ -30,6 +30,7 @@ These services are known to be supported in some form: - [Landing Target Protocol](https://mavlink.io/en/services/landing_target.html) - [Manual Control (Joystick) Protocol](https://mavlink.io/en/services/manual_control.html) - [MAVLink Id Assignment (sysid, compid)](https://mavlink.io/en/services/mavlink_id_assignment.html) +- [Message Signing](../mavlink/message_signing.md) ([MAVLink spec](https://mavlink.io/en/guide/message_signing.html)) - [Mission Protocol](https://mavlink.io/en/services/mission.html) - [Offboard Control Protocol](https://mavlink.io/en/services/offboard_control.html) - [Remote ID](../peripherals/remote_id.md) ([Open Drone ID Protocol](https://mavlink.io/en/services/opendroneid.html)) diff --git a/docs/uk/mavlink/security_hardening.md b/docs/uk/mavlink/security_hardening.md new file mode 100644 index 0000000000..306eaef9b8 --- /dev/null +++ b/docs/uk/mavlink/security_hardening.md @@ -0,0 +1,104 @@ +# MAVLink Security Hardening for Production Deployments + + + +MAVLink is an open communication protocol designed for lightweight, low-latency communication between drones and ground stations. +By default, all MAVLink messages are unauthenticated. +This is intentional for development and testing, but **production deployments must enable [message signing](message_signing.md)** to prevent unauthorized access. + +:::warning +Without message signing enabled, any device that can send MAVLink messages to the vehicle (via radio, network, or serial) can execute any command, including shell access, file operations, parameter changes, mission uploads, arming, and flight termination. +::: + +## What Is at Risk + +When MAVLink signing is not enabled, an attacker within communication range can: + +| Capability | MAVLink mechanism | +| ------------------------------------------- | ------------------------------------------------ | +| Execute shell commands | `SERIAL_CONTROL` with `SERIAL_CONTROL_DEV_SHELL` | +| Read, write, or delete files | MAVLink FTP protocol | +| Change any flight parameter | `PARAM_SET` / `PARAM_EXT_SET` | +| Upload or overwrite missions | Mission protocol | +| Arm or disarm motors | `MAV_CMD_COMPONENT_ARM_DISARM` | +| Terminate flight (crash) | `MAV_CMD_DO_FLIGHTTERMINATION` | +| Trigger emergency landing | Spoofed `BATTERY_STATUS` | +| Reboot the vehicle | `MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN` | + +All of these are standard MAVLink capabilities used by ground control stations. +Without signing, there is no distinction between a legitimate GCS and an unauthorized sender. + +## Hardening Checklist + +### 1. Enable Message Signing + +Message signing provides cryptographic authentication for all MAVLink communication. +See [Message Signing](message_signing.md) for full details. + +Steps: + +1. Connect to the vehicle over a **trusted link** (USB or other secure connection). +2. Provision a 32-byte secret key using the [SETUP_SIGNING](https://mavlink.io/en/messages/common.html#SETUP_SIGNING) message. This works on any link, but use a trusted one for initial provisioning. +3. Provision the same key on all ground control stations and companion computers that need to communicate with the vehicle. +4. Verify that unsigned messages from unknown sources are rejected. + +:::info +Once a key is provisioned, signing is enforced automatically on **all links** (including USB). +Changing or disabling the key requires a signed `SETUP_SIGNING` message. +Signing changes are rejected while the vehicle is armed. +Signing can also be disabled by physically removing the key file from the SD card. +::: + +### 2. Secure Physical Access + +- **SD card**: The signing key is stored at `/mavlink/mavlink-signing-key.bin`. + Anyone with physical access to the SD card can read, modify, or remove the key file. +- **USB ports**: USB follows the same signing rules as all other links. + When signing is active, USB requires signed messages. +- **Debug ports (SWD/JTAG)**: If exposed, [Debug Ports](../debug/swd_debug.md) allow full firmware reflash and bypass all software security. + Not all vehicles expose debug connectors. + +:::warning +Signing protects all MAVLink links. +The primary physical attack surface is the SD card (key file extraction or deletion). +If your threat model includes physical access, secure the SD card slot and debug ports. +::: + +### 3. Secure Network Links + +- Do not expose MAVLink UDP/TCP ports to untrusted networks or the internet. +- Place MAVLink communication links behind firewalls or VPNs. +- Segment MAVLink networks from business or public networks. +- When using companion computers, audit which network interfaces MAVLink is bound to. + +### 4. Understand the Limitations + +- **No encryption**: + Message signing provides authentication and integrity, but messages are sent in plaintext. + An eavesdropper can read telemetry and commands but cannot forge them. +- **Allowlisted messages**: + A small set of [safety-critical messages](message_signing.md#unsigned-message-allowlist) (`HEARTBEAT`, `RADIO_STATUS`, `ADSB_VEHICLE`, `COLLISION`) are always accepted unsigned on all links. + An attacker could spoof these specific messages. +- **Key management**: + There is no automatic key rotation. + Keys must be reprovisioned manually via a signed `SETUP_SIGNING` message. +- **Lost key recovery**: + If the signing key is lost on all GCS devices, the only recovery is physical: remove the SD card and delete the key file, or reflash via SWD/JTAG. + There is no software-only recovery path. + See [Message Signing: Lost Key Recovery](message_signing.md#lost-key-recovery) for details. + +## Integrator Responsibility + +PX4 is open-source flight controller firmware used by manufacturers and system integrators to build commercial and custom drone platforms. + +Securing the communication links for a specific deployment is the responsibility of the system integrator. +Це включає: + +- Choosing appropriate radio hardware and link security +- Enabling and managing MAVLink message signing +- Restricting network access to MAVLink interfaces +- Applying firmware updates that address security issues +- Evaluating whether the default configuration meets the security requirements of the target application + +PX4 provides the tools for securing MAVLink communication. +Integrators must enable and configure them for their deployment context. diff --git a/docs/uk/mavlink/streaming_messages.md b/docs/uk/mavlink/streaming_messages.md index d1491e3e0a..e1d94cc8df 100644 --- a/docs/uk/mavlink/streaming_messages.md +++ b/docs/uk/mavlink/streaming_messages.md @@ -4,7 +4,7 @@ ## Загальний огляд -[MAVLink messages](../middleware/mavlink.md) are streamed using a streaming class, derived from `MavlinkStream`, that has been added to the PX4 stream list. +[MAVLink messages](../middleware/mavlink.md) are streamed using a streaming class, derived from `MavlinkStream`, that has been added to the [PX4 stream list](#add-the-new-class-to-the-streaming-list). Клас має фреймворкові методи, які ви реалізуєте, щоб PX4 міг отримати потрібну йому інформацію зі згенерованого визначення повідомлення MAVLink. It also has a `send()` method that is called each time the message needs to be sent — you override this to copy information from a uORB subscription to the MAVLink message object that is to be sent. @@ -190,15 +190,17 @@ Most streaming classes are very similar (see examples in [/src/modules/mavlink/s ::: -Next we include our new class in [mavlink_messages.cpp](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/mavlink_messages.cpp#L2193). -Додайте рядок нижче до частини файлу, де включені всі інші потоки: +### Add the new class to the streaming list + +Next we add our new class to the streaming list. + +First open [mavlink_messages.cpp](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/mavlink_messages.cpp#L2193) and add the line below to the part of the file where all the other streams are included: ```cpp #include "streams/BATTERY_STATUS_DEMO.hpp" ``` -Finally append the stream class to the `streams_list` at the bottom of -[mavlink_messages.cpp](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/mavlink_messages.cpp) +Then append the stream class to the `streams_list` at the bottom of [mavlink_messages.cpp](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/mavlink_messages.cpp) ```C StreamListItem *streams_list[] = { @@ -215,25 +217,12 @@ StreamListItem *streams_list[] = { ## Трансляція за замовчуванням -The easiest way to stream your messages by default (as part of a build) is to add them to [mavlink_main.cpp](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/mavlink_main.cpp) in the appropriate message group. +The easiest way to stream your messages by default (as part of a build) is to add them to appropriate [MAVLink Profile](../mavlink/mavlink_profiles.md), such as `MAVLINK_MODE_NORMAL` if you're streaming to a GCS over WiFI, or `MAVLINK_MODE_OSD` for an OSD device. -Якщо ви виконаєте пошук у файлі, то знайдете групи повідомлень, визначені в інструкції switch: +This is covered in [Adding Messages to a Profile](..//mavlink/mavlink_profiles.md#adding-messages-to-a-profile), but in summary you first open [mavlink_main.cpp](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/mavlink_main.cpp), search for the method `Mavlink::configure_streams_to_default`, and then find the profile that you wish to update. -- `MAVLINK_MODE_NORMAL`: Streamed to a GCS. -- `MAVLINK_MODE_ONBOARD`: Streamed to a companion computer on a fast link, such as Ethernet -- `MAVLINK_MODE_ONBOARD_LOW_BANDWIDTH`: Streamed to a companion computer for re-routing to a reduced-traffic link, such as a GCS. -- `MAVLINK_MODE_GIMBAL`: Streamed to a gimbal -- `MAVLINK_MODE_EXTVISION`: Streamed to an external vision system -- `MAVLINK_MODE_EXTVISIONMIN`: Streamed to an external vision system on a slower link -- `MAVLINK_MODE_OSD`: Streamed to an OSD, such as an FPV headset. -- `MAVLINK_MODE_CUSTOM`: Stream nothing by default. Використовується при налаштуванні потокового передавання за допомогою MAVLink. -- `MAVLINK_MODE_MAGIC`: Same as `MAVLINK_MODE_CUSTOM` -- `MAVLINK_MODE_CONFIG`: Streaming over USB with higher rates than `MAVLINK_MODE_NORMAL`. -- `MAVLINK_MODE_MINIMAL`: Stream a minimal set of messages. Зазвичай використовується для поганого зв'язку телеметрії. -- `MAVLINK_MODE_IRIDIUM`: Streamed to an iridium satellite phone - -Normally you'll be testing on a GCS, so you could just add the message to the `MAVLINK_MODE_NORMAL` case using the `configure_stream_local()` method. -Наприклад, для трансляції CA_TRAJECTORY з частотою 5 Гц: +If you're just testing on a GCS, you could add the message to the `MAVLINK_MODE_NORMAL` case using the `configure_stream_local()` method. +For example, to stream `BATTERY_STATUS_DEMO` at 5 Hz: ```cpp case MAVLINK_MODE_CONFIG: // USB diff --git a/docs/uk/middleware/dds_topics.md b/docs/uk/middleware/dds_topics.md index 174dc6c859..b0b02cb9af 100644 --- a/docs/uk/middleware/dds_topics.md +++ b/docs/uk/middleware/dds_topics.md @@ -70,7 +70,6 @@ This document shows a markdown-rendered version of [dds_topics.yaml](https://git | /fmu/in/vehicle_torque_setpoint | [px4_msgs::msg::VehicleTorqueSetpoint](../msg_docs/VehicleTorqueSetpoint.md) | | /fmu/in/actuator_motors | [px4_msgs::msg::ActuatorMotors](../msg_docs/ActuatorMotors.md) | | /fmu/in/actuator_servos | [px4_msgs::msg::ActuatorServos](../msg_docs/ActuatorServos.md) | -| /fmu/in/aux_global_position | [px4_msgs::msg::VehicleGlobalPosition](../msg_docs/VehicleGlobalPosition.md) | | /fmu/in/fixed_wing_longitudinal_setpoint | [px4_msgs::msg::FixedWingLongitudinalSetpoint](../msg_docs/FixedWingLongitudinalSetpoint.md) | | /fmu/in/fixed_wing_lateral_setpoint | [px4_msgs::msg::FixedWingLateralSetpoint](../msg_docs/FixedWingLateralSetpoint.md) | | /fmu/in/longitudinal_control_configuration | [px4_msgs::msg::LongitudinalControlConfiguration](../msg_docs/LongitudinalControlConfiguration.md) | @@ -85,7 +84,9 @@ This document shows a markdown-rendered version of [dds_topics.yaml](https://git ## Subscriptions Multi -None +| Topic | Тип | Route Field | Max Instances | +| --------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- | ------------- | +| /fmu/in/aux_global_position | [px4_msgs::msg::AuxGlobalPosition](../msg_docs/AuxGlobalPosition.md) | `id` | 4 | ## Not Exported @@ -95,200 +96,210 @@ They are not build into the module, and hence are neither published or subscribe :::details See messages -- [GpioIn](../msg_docs/GpioIn.md) -- [SystemPower](../msg_docs/SystemPower.md) -- [LandingTargetInnovations](../msg_docs/LandingTargetInnovations.md) -- [VehicleOpticalFlow](../msg_docs/VehicleOpticalFlow.md) -- [LandingTargetPose](../msg_docs/LandingTargetPose.md) -- [EstimatorGpsStatus](../msg_docs/EstimatorGpsStatus.md) -- [EstimatorBias](../msg_docs/EstimatorBias.md) -- [ParameterSetValueResponse](../msg_docs/ParameterSetValueResponse.md) -- [LogMessage](../msg_docs/LogMessage.md) -- [PowerMonitor](../msg_docs/PowerMonitor.md) -- [VehicleConstraints](../msg_docs/VehicleConstraints.md) -- [SensorAirflow](../msg_docs/SensorAirflow.md) -- [ArmingCheckRequestV0](../msg_docs/ArmingCheckRequestV0.md) -- [ActuatorArmed](../msg_docs/ActuatorArmed.md) -- [HoverThrustEstimate](../msg_docs/HoverThrustEstimate.md) -- [LaunchDetectionStatus](../msg_docs/LaunchDetectionStatus.md) -- [DifferentialPressure](../msg_docs/DifferentialPressure.md) -- [MagnetometerBiasEstimate](../msg_docs/MagnetometerBiasEstimate.md) -- [PwmInput](../msg_docs/PwmInput.md) -- [OrbTestMedium](../msg_docs/OrbTestMedium.md) -- [QshellReq](../msg_docs/QshellReq.md) -- [GeofenceStatus](../msg_docs/GeofenceStatus.md) -- [RcChannels](../msg_docs/RcChannels.md) -- [Cpuload](../msg_docs/Cpuload.md) -- [DebugArray](../msg_docs/DebugArray.md) -- [FlightPhaseEstimation](../msg_docs/FlightPhaseEstimation.md) -- [Mission](../msg_docs/Mission.md) -- [Airspeed](../msg_docs/Airspeed.md) -- [LedControl](../msg_docs/LedControl.md) -- [HealthReport](../msg_docs/HealthReport.md) -- [FixedWingLateralGuidanceStatus](../msg_docs/FixedWingLateralGuidanceStatus.md) -- [FigureEightStatus](../msg_docs/FigureEightStatus.md) -- [EstimatorInnovations](../msg_docs/EstimatorInnovations.md) -- [VehicleImuStatus](../msg_docs/VehicleImuStatus.md) -- [VehicleLocalPositionSetpoint](../msg_docs/VehicleLocalPositionSetpoint.md) -- [InputRc](../msg_docs/InputRc.md) -- [UavcanParameterRequest](../msg_docs/UavcanParameterRequest.md) -- [FixedWingRunwayControl](../msg_docs/FixedWingRunwayControl.md) -- [SensorCorrection](../msg_docs/SensorCorrection.md) -- [ControlAllocatorStatus](../msg_docs/ControlAllocatorStatus.md) -- [AirspeedValidatedV0](../msg_docs/AirspeedValidatedV0.md) -- [CanInterfaceStatus](../msg_docs/CanInterfaceStatus.md) -- [SensorSelection](../msg_docs/SensorSelection.md) -- [DeviceInformation](../msg_docs/DeviceInformation.md) -- [CameraTrigger](../msg_docs/CameraTrigger.md) -- [SensorAccel](../msg_docs/SensorAccel.md) -- [ActuatorServosTrim](../msg_docs/ActuatorServosTrim.md) -- [SensorsStatusImu](../msg_docs/SensorsStatusImu.md) -- [EstimatorBias3d](../msg_docs/EstimatorBias3d.md) -- [GimbalManagerStatus](../msg_docs/GimbalManagerStatus.md) -- [BatteryStatusV0](../msg_docs/BatteryStatusV0.md) -- [OpenDroneIdSelfId](../msg_docs/OpenDroneIdSelfId.md) -- [VehicleImu](../msg_docs/VehicleImu.md) -- [MissionResult](../msg_docs/MissionResult.md) -- [SensorAccelFifo](../msg_docs/SensorAccelFifo.md) -- [DistanceSensorModeChangeRequest](../msg_docs/DistanceSensorModeChangeRequest.md) -- [SensorPreflightMag](../msg_docs/SensorPreflightMag.md) -- [OrbTest](../msg_docs/OrbTest.md) -- [PositionControllerLandingStatus](../msg_docs/PositionControllerLandingStatus.md) -- [FuelTankStatus](../msg_docs/FuelTankStatus.md) -- [OpenDroneIdSystem](../msg_docs/OpenDroneIdSystem.md) -- [OrbitStatus](../msg_docs/OrbitStatus.md) -- [Px4ioStatus](../msg_docs/Px4ioStatus.md) -- [RtlStatus](../msg_docs/RtlStatus.md) -- [ButtonEvent](../msg_docs/ButtonEvent.md) -- [VehicleLocalPositionV0](../msg_docs/VehicleLocalPositionV0.md) -- [DebugValue](../msg_docs/DebugValue.md) -- [ParameterSetUsedRequest](../msg_docs/ParameterSetUsedRequest.md) -- [RoverSpeedStatus](../msg_docs/RoverSpeedStatus.md) -- [SensorHygrometer](../msg_docs/SensorHygrometer.md) -- [OpenDroneIdOperatorId](../msg_docs/OpenDroneIdOperatorId.md) -- [InternalCombustionEngineStatus](../msg_docs/InternalCombustionEngineStatus.md) -- [GpioOut](../msg_docs/GpioOut.md) -- [ActuatorTest](../msg_docs/ActuatorTest.md) -- [SensorBaro](../msg_docs/SensorBaro.md) -- [PositionControllerStatus](../msg_docs/PositionControllerStatus.md) -- [PurePursuitStatus](../msg_docs/PurePursuitStatus.md) -- [RoverRateStatus](../msg_docs/RoverRateStatus.md) -- [TecsStatus](../msg_docs/TecsStatus.md) -- [PpsCapture](../msg_docs/PpsCapture.md) -- [RaptorStatus](../msg_docs/RaptorStatus.md) -- [EventV0](../msg_docs/EventV0.md) -- [GpioRequest](../msg_docs/GpioRequest.md) -- [FollowTargetEstimator](../msg_docs/FollowTargetEstimator.md) -- [MagWorkerData](../msg_docs/MagWorkerData.md) -- [FollowTarget](../msg_docs/FollowTarget.md) -- [EstimatorAidSource1d](../msg_docs/EstimatorAidSource1d.md) -- [GimbalDeviceSetAttitude](../msg_docs/GimbalDeviceSetAttitude.md) -- [SensorGnssRelative](../msg_docs/SensorGnssRelative.md) -- [ActionRequest](../msg_docs/ActionRequest.md) -- [NavigatorMissionItem](../msg_docs/NavigatorMissionItem.md) -- [GpsInjectData](../msg_docs/GpsInjectData.md) -- [VehicleStatusV0](../msg_docs/VehicleStatusV0.md) -- [DronecanNodeStatus](../msg_docs/DronecanNodeStatus.md) -- [UlogStream](../msg_docs/UlogStream.md) -- [DebugKeyValue](../msg_docs/DebugKeyValue.md) -- [NavigatorStatus](../msg_docs/NavigatorStatus.md) -- [MountOrientation](../msg_docs/MountOrientation.md) -- [RcParameterMap](../msg_docs/RcParameterMap.md) -- [AdcReport](../msg_docs/AdcReport.md) -- [EstimatorSensorBias](../msg_docs/EstimatorSensorBias.md) -- [InternalCombustionEngineControl](../msg_docs/InternalCombustionEngineControl.md) -- [MavlinkLog](../msg_docs/MavlinkLog.md) -- [VehicleMagnetometer](../msg_docs/VehicleMagnetometer.md) -- [GpioConfig](../msg_docs/GpioConfig.md) -- [GainCompression](../msg_docs/GainCompression.md) -- [DebugVect](../msg_docs/DebugVect.md) -- [ArmingCheckReplyV0](../msg_docs/ArmingCheckReplyV0.md) -- [VehicleAttitudeSetpointV0](../msg_docs/VehicleAttitudeSetpointV0.md) -- [FollowTargetStatus](../msg_docs/FollowTargetStatus.md) -- [RtlTimeEstimate](../msg_docs/RtlTimeEstimate.md) -- [RoverAttitudeStatus](../msg_docs/RoverAttitudeStatus.md) -- [SensorUwb](../msg_docs/SensorUwb.md) -- [YawEstimatorStatus](../msg_docs/YawEstimatorStatus.md) -- [VelocityLimits](../msg_docs/VelocityLimits.md) -- [TrajectorySetpoint6dof](../msg_docs/TrajectorySetpoint6dof.md) -- [OpenDroneIdArmStatus](../msg_docs/OpenDroneIdArmStatus.md) -- [EscStatus](../msg_docs/EscStatus.md) -- [GimbalManagerInformation](../msg_docs/GimbalManagerInformation.md) -- [HeaterStatus](../msg_docs/HeaterStatus.md) -- [EstimatorSelectorStatus](../msg_docs/EstimatorSelectorStatus.md) -- [GeofenceResult](../msg_docs/GeofenceResult.md) -- [PowerButtonState](../msg_docs/PowerButtonState.md) -- [Rpm](../msg_docs/Rpm.md) -- [WheelEncoders](../msg_docs/WheelEncoders.md) -- [LoggerStatus](../msg_docs/LoggerStatus.md) -- [CellularStatus](../msg_docs/CellularStatus.md) -- [TuneControl](../msg_docs/TuneControl.md) -- [ConfigOverridesV0](../msg_docs/ConfigOverridesV0.md) -- [GimbalManagerSetAttitude](../msg_docs/GimbalManagerSetAttitude.md) -- [OrbTestLarge](../msg_docs/OrbTestLarge.md) -- [BatteryInfo](../msg_docs/BatteryInfo.md) -- [CameraStatus](../msg_docs/CameraStatus.md) -- [QshellRetval](../msg_docs/QshellRetval.md) -- [SensorMag](../msg_docs/SensorMag.md) -- [RateCtrlStatus](../msg_docs/RateCtrlStatus.md) -- [TaskStackInfo](../msg_docs/TaskStackInfo.md) -- [EstimatorAidSource2d](../msg_docs/EstimatorAidSource2d.md) -- [AirspeedWind](../msg_docs/AirspeedWind.md) -- [AutotuneAttitudeControlStatus](../msg_docs/AutotuneAttitudeControlStatus.md) -- [GimbalDeviceInformation](../msg_docs/GimbalDeviceInformation.md) -- [GpsDump](../msg_docs/GpsDump.md) -- [SensorTemp](../msg_docs/SensorTemp.md) -- [ParameterResetRequest](../msg_docs/ParameterResetRequest.md) -- [TiltrotorExtraControls](../msg_docs/TiltrotorExtraControls.md) -- [SensorsStatus](../msg_docs/SensorsStatus.md) -- [EstimatorStatus](../msg_docs/EstimatorStatus.md) -- [FailureDetectorStatus](../msg_docs/FailureDetectorStatus.md) -- [VehicleAirData](../msg_docs/VehicleAirData.md) -- [ActuatorControlsStatus](../msg_docs/ActuatorControlsStatus.md) -- [TakeoffStatus](../msg_docs/TakeoffStatus.md) -- [GeneratorStatus](../msg_docs/GeneratorStatus.md) -- [SensorGyroFifo](../msg_docs/SensorGyroFifo.md) -- [VehicleAngularVelocity](../msg_docs/VehicleAngularVelocity.md) -- [LandingGearWheel](../msg_docs/LandingGearWheel.md) -- [ParameterSetValueRequest](../msg_docs/ParameterSetValueRequest.md) -- [RegisterExtComponentReplyV0](../msg_docs/RegisterExtComponentReplyV0.md) -- [RaptorInput](../msg_docs/RaptorInput.md) -- [SensorGyro](../msg_docs/SensorGyro.md) -- [ParameterUpdate](../msg_docs/ParameterUpdate.md) -- [NormalizedUnsignedSetpoint](../msg_docs/NormalizedUnsignedSetpoint.md) -- [PositionSetpoint](../msg_docs/PositionSetpoint.md) -- [EstimatorStates](../msg_docs/EstimatorStates.md) -- [ActuatorOutputs](../msg_docs/ActuatorOutputs.md) -- [ManualControlSwitches](../msg_docs/ManualControlSwitches.md) -- [UavcanParameterValue](../msg_docs/UavcanParameterValue.md) -- [VehicleAngularAccelerationSetpoint](../msg_docs/VehicleAngularAccelerationSetpoint.md) -- [EstimatorEventFlags](../msg_docs/EstimatorEventFlags.md) -- [SensorGnssStatus](../msg_docs/SensorGnssStatus.md) -- [GimbalManagerSetManualControl](../msg_docs/GimbalManagerSetManualControl.md) -- [HomePositionV0](../msg_docs/HomePositionV0.md) -- [FixedWingLateralStatus](../msg_docs/FixedWingLateralStatus.md) -- [SatelliteInfo](../msg_docs/SatelliteInfo.md) - [IrlockReport](../msg_docs/IrlockReport.md) -- [Ping](../msg_docs/Ping.md) -- [CameraCapture](../msg_docs/CameraCapture.md) -- [Vtx](../msg_docs/Vtx.md) -- [Ekf2Timestamps](../msg_docs/Ekf2Timestamps.md) -- [RegisterExtComponentRequestV0](../msg_docs/RegisterExtComponentRequestV0.md) -- [EscReport](../msg_docs/EscReport.md) -- [Gripper](../msg_docs/Gripper.md) -- [UlogStreamAck](../msg_docs/UlogStreamAck.md) -- [SensorGyroFft](../msg_docs/SensorGyroFft.md) -- [VehicleRoi](../msg_docs/VehicleRoi.md) -- [VehicleAcceleration](../msg_docs/VehicleAcceleration.md) -- [NeuralControl](../msg_docs/NeuralControl.md) -- [DatamanResponse](../msg_docs/DatamanResponse.md) -- [GimbalControls](../msg_docs/GimbalControls.md) -- [MavlinkTunnel](../msg_docs/MavlinkTunnel.md) -- [EstimatorAidSource3d](../msg_docs/EstimatorAidSource3d.md) -- [DatamanRequest](../msg_docs/DatamanRequest.md) +- [FailureDetectorStatus](../msg_docs/FailureDetectorStatus.md) +- [MissionResult](../msg_docs/MissionResult.md) +- [SensorSelection](../msg_docs/SensorSelection.md) - [Event](../msg_docs/Event.md) -- [RadioStatus](../msg_docs/RadioStatus.md) +- [MountOrientation](../msg_docs/MountOrientation.md) +- [NeuralControl](../msg_docs/NeuralControl.md) +- [VehicleAttitudeSetpointV0](../msg_docs/VehicleAttitudeSetpointV0.md) +- [DifferentialPressure](../msg_docs/DifferentialPressure.md) +- [EstimatorGpsStatus](../msg_docs/EstimatorGpsStatus.md) +- [LedControl](../msg_docs/LedControl.md) +- [RtlStatus](../msg_docs/RtlStatus.md) +- [Rpm](../msg_docs/Rpm.md) +- [QshellReq](../msg_docs/QshellReq.md) +- [ArmingCheckReplyV0](../msg_docs/ArmingCheckReplyV0.md) +- [OrbTest](../msg_docs/OrbTest.md) +- [VehicleImuStatus](../msg_docs/VehicleImuStatus.md) +- [OrbitStatus](../msg_docs/OrbitStatus.md) +- [BatteryInfo](../msg_docs/BatteryInfo.md) +- [RegisterExtComponentReplyV0](../msg_docs/RegisterExtComponentReplyV0.md) +- [HeaterStatus](../msg_docs/HeaterStatus.md) +- [VehicleAngularVelocity](../msg_docs/VehicleAngularVelocity.md) +- [DeviceInformation](../msg_docs/DeviceInformation.md) +- [VehicleLocalPositionV0](../msg_docs/VehicleLocalPositionV0.md) +- [PowerButtonState](../msg_docs/PowerButtonState.md) +- [SensorAirflow](../msg_docs/SensorAirflow.md) +- [TrajectorySetpoint6dof](../msg_docs/TrajectorySetpoint6dof.md) +- [VehicleStatusV0](../msg_docs/VehicleStatusV0.md) +- [HealthReport](../msg_docs/HealthReport.md) +- [FollowTargetEstimator](../msg_docs/FollowTargetEstimator.md) +- [InternalCombustionEngineControl](../msg_docs/InternalCombustionEngineControl.md) +- [AirspeedWind](../msg_docs/AirspeedWind.md) +- [SensorGnssRelative](../msg_docs/SensorGnssRelative.md) +- [VehicleImu](../msg_docs/VehicleImu.md) +- [VehicleStatusV3](../msg_docs/VehicleStatusV3.md) +- [NormalizedUnsignedSetpoint](../msg_docs/NormalizedUnsignedSetpoint.md) +- [EstimatorSelectorStatus](../msg_docs/EstimatorSelectorStatus.md) +- [ActuatorTest](../msg_docs/ActuatorTest.md) +- [CanInterfaceStatus](../msg_docs/CanInterfaceStatus.md) - [VehicleOpticalFlowVel](../msg_docs/VehicleOpticalFlowVel.md) +- [VehicleStatusV1](../msg_docs/VehicleStatusV1.md) +- [SensorGnssStatus](../msg_docs/SensorGnssStatus.md) +- [PwmInput](../msg_docs/PwmInput.md) +- [RcParameterMap](../msg_docs/RcParameterMap.md) +- [VehicleConstraints](../msg_docs/VehicleConstraints.md) +- [SystemPower](../msg_docs/SystemPower.md) +- [Ekf2Timestamps](../msg_docs/Ekf2Timestamps.md) +- [InternalCombustionEngineStatus](../msg_docs/InternalCombustionEngineStatus.md) +- [UavcanParameterValue](../msg_docs/UavcanParameterValue.md) +- [EstimatorEventFlags](../msg_docs/EstimatorEventFlags.md) +- [DebugVect](../msg_docs/DebugVect.md) +- [FollowTarget](../msg_docs/FollowTarget.md) +- [TiltrotorExtraControls](../msg_docs/TiltrotorExtraControls.md) +- [TuneControl](../msg_docs/TuneControl.md) +- [PositionSetpoint](../msg_docs/PositionSetpoint.md) +- [ParameterSetUsedRequest](../msg_docs/ParameterSetUsedRequest.md) +- [SensorAccelFifo](../msg_docs/SensorAccelFifo.md) +- [EventV0](../msg_docs/EventV0.md) +- [AutotuneAttitudeControlStatus](../msg_docs/AutotuneAttitudeControlStatus.md) +- [SensorTemp](../msg_docs/SensorTemp.md) +- [OpenDroneIdSelfId](../msg_docs/OpenDroneIdSelfId.md) +- [FollowTargetStatus](../msg_docs/FollowTargetStatus.md) +- [VehicleGlobalPositionV0](../msg_docs/VehicleGlobalPositionV0.md) +- [LandingGearWheel](../msg_docs/LandingGearWheel.md) +- [SensorsStatus](../msg_docs/SensorsStatus.md) +- [HomePositionV0](../msg_docs/HomePositionV0.md) +- [ParameterUpdate](../msg_docs/ParameterUpdate.md) +- [EstimatorInnovations](../msg_docs/EstimatorInnovations.md) +- [ButtonEvent](../msg_docs/ButtonEvent.md) +- [RaptorInput](../msg_docs/RaptorInput.md) +- [VehicleOpticalFlow](../msg_docs/VehicleOpticalFlow.md) +- [GpioConfig](../msg_docs/GpioConfig.md) +- [SensorMag](../msg_docs/SensorMag.md) +- [LogMessage](../msg_docs/LogMessage.md) +- [GeofenceResult](../msg_docs/GeofenceResult.md) +- [LoggerStatus](../msg_docs/LoggerStatus.md) +- [RcChannels](../msg_docs/RcChannels.md) +- [MagWorkerData](../msg_docs/MagWorkerData.md) - [IridiumsbdStatus](../msg_docs/IridiumsbdStatus.md) +- [SensorGyroFifo](../msg_docs/SensorGyroFifo.md) +- [GeofenceStatus](../msg_docs/GeofenceStatus.md) +- [UlogStreamAck](../msg_docs/UlogStreamAck.md) +- [Airspeed](../msg_docs/Airspeed.md) +- [ActuatorArmed](../msg_docs/ActuatorArmed.md) +- [ParameterSetValueResponse](../msg_docs/ParameterSetValueResponse.md) +- [SensorPreflightMag](../msg_docs/SensorPreflightMag.md) +- [GimbalManagerStatus](../msg_docs/GimbalManagerStatus.md) +- [GimbalDeviceSetAttitude](../msg_docs/GimbalDeviceSetAttitude.md) +- [GimbalManagerInformation](../msg_docs/GimbalManagerInformation.md) +- [EstimatorBias](../msg_docs/EstimatorBias.md) +- [TecsStatus](../msg_docs/TecsStatus.md) +- [GimbalControls](../msg_docs/GimbalControls.md) +- [Mission](../msg_docs/Mission.md) +- [GainCompression](../msg_docs/GainCompression.md) +- [ConfigOverridesV0](../msg_docs/ConfigOverridesV0.md) +- [Ping](../msg_docs/Ping.md) +- [ActuatorControlsStatus](../msg_docs/ActuatorControlsStatus.md) +- [CellularStatus](../msg_docs/CellularStatus.md) +- [DronecanNodeStatus](../msg_docs/DronecanNodeStatus.md) +- [EscEepromWrite](../msg_docs/EscEepromWrite.md) +- [MagnetometerBiasEstimate](../msg_docs/MagnetometerBiasEstimate.md) +- [FixedWingLateralGuidanceStatus](../msg_docs/FixedWingLateralGuidanceStatus.md) +- [OrbTestMedium](../msg_docs/OrbTestMedium.md) +- [PositionControllerStatus](../msg_docs/PositionControllerStatus.md) +- [EscReport](../msg_docs/EscReport.md) +- [SensorGyro](../msg_docs/SensorGyro.md) +- [DatamanRequest](../msg_docs/DatamanRequest.md) +- [FixedWingLateralStatus](../msg_docs/FixedWingLateralStatus.md) +- [GeneratorStatus](../msg_docs/GeneratorStatus.md) +- [SensorAccel](../msg_docs/SensorAccel.md) +- [RangingBeacon](../msg_docs/RangingBeacon.md) +- [RegisterExtComponentRequestV1](../msg_docs/RegisterExtComponentRequestV1.md) +- [GpsDump](../msg_docs/GpsDump.md) +- [GimbalManagerSetManualControl](../msg_docs/GimbalManagerSetManualControl.md) +- [Vtx](../msg_docs/Vtx.md) +- [VehicleStatusV2](../msg_docs/VehicleStatusV2.md) +- [InputRc](../msg_docs/InputRc.md) +- [DebugKeyValue](../msg_docs/DebugKeyValue.md) +- [VehicleMagnetometer](../msg_docs/VehicleMagnetometer.md) +- [OpenDroneIdSystem](../msg_docs/OpenDroneIdSystem.md) +- [RoverAttitudeStatus](../msg_docs/RoverAttitudeStatus.md) +- [GpsInjectData](../msg_docs/GpsInjectData.md) +- [TaskStackInfo](../msg_docs/TaskStackInfo.md) +- [FixedWingRunwayControl](../msg_docs/FixedWingRunwayControl.md) +- [SensorsStatusImu](../msg_docs/SensorsStatusImu.md) +- [VehicleAirData](../msg_docs/VehicleAirData.md) +- [PpsCapture](../msg_docs/PpsCapture.md) +- [CameraStatus](../msg_docs/CameraStatus.md) +- [SensorGyroFft](../msg_docs/SensorGyroFft.md) +- [ParameterResetRequest](../msg_docs/ParameterResetRequest.md) +- [EstimatorBias3d](../msg_docs/EstimatorBias3d.md) +- [PowerMonitor](../msg_docs/PowerMonitor.md) +- [GimbalManagerSetAttitude](../msg_docs/GimbalManagerSetAttitude.md) +- [EstimatorStates](../msg_docs/EstimatorStates.md) +- [FlightPhaseEstimation](../msg_docs/FlightPhaseEstimation.md) +- [SensorUwb](../msg_docs/SensorUwb.md) +- [EscStatus](../msg_docs/EscStatus.md) +- [RegisterExtComponentRequestV0](../msg_docs/RegisterExtComponentRequestV0.md) +- [TakeoffStatus](../msg_docs/TakeoffStatus.md) +- [EstimatorAidSource1d](../msg_docs/EstimatorAidSource1d.md) +- [UavcanParameterRequest](../msg_docs/UavcanParameterRequest.md) +- [EstimatorSensorBias](../msg_docs/EstimatorSensorBias.md) +- [SatelliteInfo](../msg_docs/SatelliteInfo.md) +- [MavlinkLog](../msg_docs/MavlinkLog.md) +- [VehicleCommandAckV0](../msg_docs/VehicleCommandAckV0.md) +- [VehicleAcceleration](../msg_docs/VehicleAcceleration.md) +- [BatteryStatusV0](../msg_docs/BatteryStatusV0.md) +- [CameraTrigger](../msg_docs/CameraTrigger.md) +- [ActuatorOutputs](../msg_docs/ActuatorOutputs.md) +- [EstimatorAidSource2d](../msg_docs/EstimatorAidSource2d.md) +- [EstimatorFusionControl](../msg_docs/EstimatorFusionControl.md) +- [ActionRequest](../msg_docs/ActionRequest.md) +- [DebugArray](../msg_docs/DebugArray.md) +- [AirspeedValidatedV0](../msg_docs/AirspeedValidatedV0.md) +- [RtlTimeEstimate](../msg_docs/RtlTimeEstimate.md) +- [DebugValue](../msg_docs/DebugValue.md) +- [NavigatorMissionItem](../msg_docs/NavigatorMissionItem.md) +- [ArmingCheckRequestV0](../msg_docs/ArmingCheckRequestV0.md) +- [DistanceSensorModeChangeRequest](../msg_docs/DistanceSensorModeChangeRequest.md) +- [FuelTankStatus](../msg_docs/FuelTankStatus.md) +- [PurePursuitStatus](../msg_docs/PurePursuitStatus.md) +- [EscEepromRead](../msg_docs/EscEepromRead.md) +- [UlogStream](../msg_docs/UlogStream.md) +- [VehicleAngularAccelerationSetpoint](../msg_docs/VehicleAngularAccelerationSetpoint.md) +- [CameraCapture](../msg_docs/CameraCapture.md) +- [NavigatorStatus](../msg_docs/NavigatorStatus.md) +- [RoverRateStatus](../msg_docs/RoverRateStatus.md) +- [DatamanResponse](../msg_docs/DatamanResponse.md) +- [PositionControllerLandingStatus](../msg_docs/PositionControllerLandingStatus.md) +- [WheelEncoders](../msg_docs/WheelEncoders.md) +- [FigureEightStatus](../msg_docs/FigureEightStatus.md) +- [GpioOut](../msg_docs/GpioOut.md) +- [RateCtrlStatus](../msg_docs/RateCtrlStatus.md) +- [SensorHygrometer](../msg_docs/SensorHygrometer.md) +- [RaptorStatus](../msg_docs/RaptorStatus.md) +- [Px4ioStatus](../msg_docs/Px4ioStatus.md) +- [VehicleLocalPositionSetpoint](../msg_docs/VehicleLocalPositionSetpoint.md) +- [RadioStatus](../msg_docs/RadioStatus.md) +- [SensorBaro](../msg_docs/SensorBaro.md) +- [YawEstimatorStatus](../msg_docs/YawEstimatorStatus.md) +- [SensorCorrection](../msg_docs/SensorCorrection.md) +- [Gripper](../msg_docs/Gripper.md) +- [LandingTargetPose](../msg_docs/LandingTargetPose.md) +- [EstimatorStatus](../msg_docs/EstimatorStatus.md) +- [GpioRequest](../msg_docs/GpioRequest.md) +- [QshellRetval](../msg_docs/QshellRetval.md) +- [OrbTestLarge](../msg_docs/OrbTestLarge.md) +- [ActuatorServosTrim](../msg_docs/ActuatorServosTrim.md) +- [VehicleRoi](../msg_docs/VehicleRoi.md) +- [GpioIn](../msg_docs/GpioIn.md) +- [HoverThrustEstimate](../msg_docs/HoverThrustEstimate.md) +- [RoverSpeedStatus](../msg_docs/RoverSpeedStatus.md) +- [LaunchDetectionStatus](../msg_docs/LaunchDetectionStatus.md) +- [ParameterSetValueRequest](../msg_docs/ParameterSetValueRequest.md) +- [OpenDroneIdOperatorId](../msg_docs/OpenDroneIdOperatorId.md) +- [Cpuload](../msg_docs/Cpuload.md) +- [ControlAllocatorStatus](../msg_docs/ControlAllocatorStatus.md) +- [OpenDroneIdArmStatus](../msg_docs/OpenDroneIdArmStatus.md) +- [LandingTargetInnovations](../msg_docs/LandingTargetInnovations.md) +- [EstimatorAidSource3d](../msg_docs/EstimatorAidSource3d.md) +- [VelocityLimits](../msg_docs/VelocityLimits.md) +- [AdcReport](../msg_docs/AdcReport.md) +- [GimbalDeviceInformation](../msg_docs/GimbalDeviceInformation.md) +- [MavlinkTunnel](../msg_docs/MavlinkTunnel.md) +- [ManualControlSwitches](../msg_docs/ManualControlSwitches.md) ::: diff --git a/docs/uk/middleware/micrortps.md b/docs/uk/middleware/micrortps.md index 0b58c00792..80d0efbab7 100644 --- a/docs/uk/middleware/micrortps.md +++ b/docs/uk/middleware/micrortps.md @@ -3,4 +3,4 @@ [uXRCE-DDS (PX4-ROS 2/DDS Bridge)](../middleware/uxrce_dds.md) has replaced the _Fast-RTPS Bridge_. -If you're working in PX4 v1.13 or earlier see: [Fast-RTPS Bridge](https://docs.px4.io/v1.13/en/middleware/micrortps.html#rtps-dds-interface-px4-fast-rtps-dds-bridge) +If you're working in PX4 v1.13 or earlier see: [Fast-RTPS Bridge](https://docs.px4.io/v1.13/en/middleware/micrortps#rtps-dds-interface-px4-fast-rtps-dds-bridge) diff --git a/docs/uk/middleware/uorb.md b/docs/uk/middleware/uorb.md index 4e3300ce5f..520e8f7952 100644 --- a/docs/uk/middleware/uorb.md +++ b/docs/uk/middleware/uorb.md @@ -145,8 +145,8 @@ Versioned messages include an additional field `uint32 MESSAGE_VERSION = x`, whe Versioned and non-versioned messages are separated in the file system: - Non-versioned topic message files and [server service](../ros2/user_guide.md#px4-ros-2-service-servers) message files remain in the [`msg/`](https://github.com/PX4/PX4-Autopilot/tree/main/msg) and [`srv/`](https://github.com/PX4/PX4-Autopilot/tree/main/srv) directories, respectively. -- The current (highest) version of message files are located in the `versioned` subfolders ([`msg/versioned`](https://github.com/PX4/PX4-Autopilot/tree/main/msg/versioned) and [`srv/versioned`](https://github.com/PX4/PX4-Autopilot/tree/main/srv/versioned)). -- Older versions of messages are stored in nested `msg/px4_msgs_old/` subfolders ([`msg/px4_msgs_old/msg/`](https://github.com/PX4/PX4-Autopilot/tree/main/msg/px4_msgs_old/msg) and [`msg/px4_msgs_old/srv/`](https://github.com/PX4/PX4-Autopilot/tree/main/msg/px4_msgs_old/srv)). +- The current (highest) version of message files are located in the `versioned` subfolders ([`msg/versioned`](https://github.com/PX4/PX4-Autopilot/tree/main/msg/versioned) and [`srv/versioned`](https://github.com/PX4/PX4-Autopilot/tree/main/msg/versioned)). +- Older versions of messages are stored in nested `msg/px4_msgs_old/` subfolders ([`msg/px4_msgs_old/msg/`](https://github.com/PX4/PX4-Autopilot/tree/main/msg/px4_msgs_old/msg) and [`msg/px4_msgs_old/srv/`](https://github.com/PX4/PX4-Autopilot/tree/main/msg/px4_msgs_old)). The files are also renamed with a suffix to indicate their version number. :::tip @@ -163,7 +163,7 @@ For the full list of versioned and non-versioned messages see: [uORB Message Ref For more on PX4 and ROS 2 communication, see [PX4-ROS 2 Bridge](../ros/ros2_comm.md). :::info -ROS 2 plans to natively support message versioning in the future, but this is not implememented yet. +ROS 2 plans to natively support message versioning in the future, but this is not implemented yet. See the related ROS Enhancement Proposal ([REP 2011](https://github.com/ros-infrastructure/rep/pull/358)). See also this [Foxglove post](https://foxglove.dev/blog/sending-ros2-message-types-over-the-wire) on message hashing and type fetching. ::: diff --git a/docs/uk/middleware/uxrce_dds.md b/docs/uk/middleware/uxrce_dds.md index bc384fb82d..a175385cf6 100644 --- a/docs/uk/middleware/uxrce_dds.md +++ b/docs/uk/middleware/uxrce_dds.md @@ -3,7 +3,7 @@ :::info -uXRCE-DDS replaces the [Fast-RTPS Bridge](https://docs.px4.io/v1.13/en/middleware/micrortps.html#rtps-dds-interface-px4-fast-rtps-dds-bridge) used in PX4 v1.13. +uXRCE-DDS replaces the [Fast-RTPS Bridge](https://docs.px4.io/v1.13/en/middleware/micrortps#rtps-dds-interface-px4-fast-rtps-dds-bridge) used in PX4 v1.13. If you were using the Fast-RTPS Bridge, please follow the [migration guidelines](#fast-rtps-to-uxrce-dds-migration-guidelines). ::: @@ -32,9 +32,14 @@ The [eProsima micro XRCE-DDS _agent_](https://github.com/eProsima/Micro-XRCE-DDS Код, який хоче підписатися/публікувати до PX4, залежить від коду на стороні клієнта; йому потрібні визначення повідомлень uORB, які збігаються з тими, що були використані для створення клієнта PX4 uXRCE-DDS, щоб він міг інтерпретувати повідомлення. +- For _versioned_ PX4 messages, the [PX4 ROS 2 Message Transition Node](../ros2/px4_ros2_msg_translation_node.md) handles compatibility automatically. + This node acts as an agent-side translator, allowing your code to interact with PX4 without requiring strict, manual message synchronization. +- For unversioned messages, code that needs to publish to PX4 maintains a direct dependency on client-side definitions. + In these cases, you must ensure your local uORB message definitions exactly match those used to create the PX4 uXRCE-DDS client, so that the messages can be correctly interpreted. + ## Генерація коду -The PX4 [uxrce_dds_client](../modules/modules_system.md#uxrce-dds-client) is generated at build time and included in PX4 firmare by default. +The PX4 [uxrce_dds_client](../modules/modules_system.md#uxrce-dds-client) is generated at build time and included in PX4 firmware by default. Агент не залежить від клієнтського коду. Він може бути побудований окремо або в робочому просторі ROS 2, або встановлений як snap пакет в Ubuntu. @@ -335,7 +340,7 @@ The configuration can be done using the [UXRCE-DDS parameters](../advanced_confi - [UXRCE_DDS_NS_IDX](../advanced_config/parameter_reference.md#UXRCE_DDS_NS_IDX) : Index-based namespace definition. Setting this parameter to any value other than `-1` creates a namespace with the prefix `uav_` and the specified value, e.g. `uav_0`, `uav_1`, etc. See [namespace](#customizing-the-namespace) for methods to define richer or arbitrary namespaces. - - [`UXRCE_DDS_FLCTRL`](../advanced_config/parameter_reference.md#UXRCE_DDS_FLCTRL) : Serial port hardware flow control enable. + - [`UXRCE_DDS_FLCTRL`](../advanced_config/parameter_reference.md#UXRCE_DDS_FLCTRL) : Serial port hardware flow control enable. To use hardware flow control, a custom MicroXRCE Agent needs to be adopted. Please refer to [this PR](https://github.com/eProsima/Micro-XRCE-DDS-Agent/pull/407) for the required changes, cherry-pick them on top of the [agent version](#build-run-within-ros-2-workspace) you need to use and then run the agent with the additional `--flow-control` option. :::info @@ -397,11 +402,14 @@ Note that all the messages from PX4 source code are present in the repository, b - If you're using a main or release version of PX4 you can get the message definitions by cloning the interface package [PX4/px4_msgs](https://github.com/PX4/px4_msgs) into your workspace. - Якщо ви створюєте або змінюєте повідомлення uORB, вам потрібно вручну оновити повідомлення у вашому робочому просторі з вихідного дерева PX4. Generally this means that you would update [dds_topics.yaml](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/uxrce_dds_client/dds_topics.yaml), clone the interface package, and then manually synchronize it by copying the new/modified message definitions from [PX4-Autopilot/msg](https://github.com/PX4/PX4-Autopilot/tree/main/msg) to its `msg` folders. - Assuming that PX4-Autopilot is in your home directory `~`, while `px4_msgs` is in `~/px4_ros_com/src/`, then the command might be: + Assuming that PX4-Autopilot is in your home directory `~`, while `px4_msgs` is in `~/ros2_px4_ws/src/`, then the command might be: ```sh - rm ~/px4_ros_com/src/px4_msgs/msg/*.msg - cp ~/PX4-Autopilot/msg/*.msg ~/px4_ros_com/src/px4_msgs/msg/ + rm ~/ros2_px4_ws/src/px4_msgs/msg/*.msg + rm ~/ros2_px4_ws/src/px4_msgs/srv/*.srv + cp ~/PX4-Autopilot/msg/*.msg ~/ros2_px4_ws/src/px4_msgs/msg/ + cp ~/PX4-Autopilot/msg/versioned/*.msg ~/ros2_px4_ws/src/px4_msgs/msg/ + cp ~/PX4-Autopilot/srv/*.msg ~/ros2_px4_ws/src/px4_msgs/srv/ ``` ::: info @@ -535,10 +543,10 @@ subscriptions: subscriptions_multi: - - topic: /fmu/in/vehicle_optical_flow_vel - type: px4_msgs::msg::VehicleOpticalFlowVel - - ... + - topic: /fmu/in/aux_global_position + type: px4_msgs::msg::AuxGlobalPosition + route_field: id # OPTIONAL: field used to demux into instances + max_instances: 4 # Required when route_field is set ``` @@ -555,31 +563,42 @@ Each (`topic`,`type`) pairs defines: 4. The message type (`VehicleOdometry`, `VehicleStatus`, `OffboardControlMode`, etc.) and the ROS 2 package (`px4_msgs`) that is expected to provide the message definition. 5. **(Optional)**: An additional `rate_limit` field (only for publication entries), which specifies the maximum rate (Hz) at which messages will be published on this topic by PX4 to ROS 2. If left unspecified, the maximum publication rate limit is set to 100 Hz. -6. **(Optional)**: An additional `instance` field (only for publication entries), which lets you select which instance of a [multi-instance topic](./uorb.md#multi-instance) you want to be published to ROS 2. +6. **(Optional)**: An additional `instance` field (only for publication entries), which lets you select which instance of a [multi-instance topic](./uorb.md#multi-instance) you want to be published to ROS 2. If provided, this option changes the ROS 2 topic name of the advertised uORB topic appending the instance number: `fmu/out/[uorb topic name][instance]` (plus eventual namespace and message version). In the example above the final topic name would be `/fmu/out/vehicle_imu1`. -`subscriptions` and `subscriptions_multi` allow us to choose the uORB topic instance that ROS 2 topics are routed to: either a shared instance that may also be getting updates from internal PX4 uORB publishers, or a separate instance that is reserved for ROS2 publications, respectively. +`subscriptions` and `subscriptions_multi` allow us to choose the uORB topic instance that ROS 2 topics are routed to: either a shared instance that may also be getting updates from internal PX4 uORB publishers, or a separate instance that is reserved for ROS 2 publications, respectively. Without this mechanism all ROS 2 messages would be routed to the _same_ uORB topic instance (because ROS 2 does not have the concept of [multiple topic instances](../middleware/uorb.md#multi-instance)), and it would not be possible for PX4 subscribers to differentiate between streams from ROS 2 or PX4 publishers. Add a topic to the `subscriptions` section to: -- Create a unidirectional route going from the ROS2 topic to the _default_ instance (instance 0) of the associated uORB topic. - For example, it creates a ROS2 subscriber of `/fmu/in/vehicle_odometry` and a uORB publisher of `vehicle_odometry`. -- If other (internal) PX4 modules are already publishing on the same uORB topic instance as the ROS2 publisher, the instance's subscribers will receive all streams of messages. - The uORB subscriber will not be able to determine if an incoming message was published by PX4 or by ROS2. -- This is the desired behavior when the ROS2 publisher is expected to be the sole publisher on the topic instance (for example, replacing an internal publisher to the topic during offboard control), or when the source of multiple publishing streams does not matter. +- Create a unidirectional route going from the ROS 2 topic to the _default_ instance (instance 0) of the associated uORB topic. + For example, it creates a ROS 2 subscriber of `/fmu/in/vehicle_odometry` and a uORB publisher of `vehicle_odometry`. +- If other (internal) PX4 modules are already publishing on the same uORB topic instance as the ROS 2 publisher, the instance's subscribers will receive all streams of messages. + The uORB subscriber will not be able to determine if an incoming message was published by PX4 or by ROS 2. +- This is the desired behavior when the ROS 2 publisher is expected to be the sole publisher on the topic instance (for example, replacing an internal publisher to the topic during offboard control), or when the source of multiple publishing streams does not matter. Add a topic to the `subscriptions_multi` section to: -- Create a unidirectional route going from the ROS2 topic to a _new_ instance of the associated uORB topic. - For example, if `vehicle_odometry` has already `2` instances, it creates a ROS2 subscriber of `/fmu/in/vehicle_odometry` and a uORB publisher on instance `3` of `vehicle_odometry`. +- Create a unidirectional route going from the ROS 2 topic to a _new_ instance of the associated uORB topic. + For example, if `vehicle_odometry` has already `2` instances, it creates a ROS 2 subscriber of `/fmu/in/vehicle_odometry` and a uORB publisher on instance `3` of `vehicle_odometry`. - This ensures that no other internal PX4 module will publish on the same instance used by uXRCE-DDS. The subscribers will be able to subscribe to the desired instance and distinguish between publishers. -- Note, however, that this guarantees separation between PX4 and ROS2 publishers, not among multiple ROS2 publishers. - In that scenario, their messages will still be routed to the same instance. +- Without `route_field`, this guarantees separation between PX4 and ROS 2 publishers, but not among multiple ROS 2 publishers. In that scenario, their messages will still be routed to the same instance. - This is the desired behavior, for example, when you want PX4 to log the readings of two equal sensors; they will both publish on the same topic, but one will use instance 0 and the other will use instance 1. + Optionally, add `route_field` and `max_instances` to demultiplex a single ROS 2 topic into multiple uORB instances based on a message field value: + +- Each unique value of `route_field` is dynamically assigned to a separate uORB instance on first arrival, up to `max_instances`. + For example, a single `/fmu/in/aux_global_position` ROS 2 topic can be demultiplexed to up to 4 separate uORB instances of `aux_global_position`, with each unique `id` value mapped to its own instance. +- This allows multiple ROS 2 publishers to share a single DDS topic while PX4 subscribers can distinguish between them by subscribing to different uORB instances. +- `route_field` must be a field present in the message definition. `max_instances` is required when `route_field` is set and limits how many distinct sources can be demultiplexed simultaneously. + +:::warning +The `subscriptions_multi` feature with `route_field` is currently only implemented in the uXRCE-DDS client. +The Zenoh bridge module does not yet support demux routing — topics listed under `subscriptions_multi` in `dds_topics.yaml` will be ignored by the Zenoh bridge. +::: + You can arbitrarily change the configuration. For example, you could use different default namespaces or use a custom package to store the message definitions. @@ -597,7 +616,7 @@ For a list of services, details and examples see the [service documentation](../ ## Fast-RTPS to uXRCE-DDS Migration Guidelines These guidelines explain how to migrate from using PX4 v1.13 [Fast-RTPS](../middleware/micrortps.md) middleware to PX4 v1.14 `uXRCE-DDS` middleware. -These are useful if you have [ROS 2 applications written for PX4 v1.13](https://docs.px4.io/v1.13/en/ros/ros2_comm.html), or you have used Fast-RTPS to interface your applications to PX4 [directly](https://docs.px4.io/v1.13/en/middleware/micrortps.html#agent-in-an-offboard-fast-dds-interface-ros-independent). +These are useful if you have [ROS 2 applications written for PX4 v1.13](https://docs.px4.io/v1.13/en/ros/ros2_comm), or you have used Fast-RTPS to interface your applications to PX4 [directly](https://docs.px4.io/v1.13/en/middleware/micrortps#agent-in-an-offboard-fast-dds-interface-ros-independent). :::info This section contains migration-specific information. @@ -606,7 +625,7 @@ You should also read the rest of this page to properly understand uXRCE-DDS. #### Dependencies do not need to be removed -uXRCE-DDS does not need the dependencies that were required for Fast-RTPS, such as those installed by following the topic [Fast DDS Installation](https://docs.px4.io/v1.13/en/dev_setup/fast-dds-installation.html). +uXRCE-DDS does not need the dependencies that were required for Fast-RTPS, such as those installed by following the topic [Fast DDS Installation](https://docs.px4.io/v1.13/en/dev_setup/fast-dds-installation). You can keep them if you want, without affecting your uXRCE-DDS applications. If you do choose to remove the dependencies, take care not to remove anything that is used by applications (for example, Java). @@ -659,7 +678,7 @@ There are many ways to install it on your PC / companion computer - for more inf #### Application-Specific Changes -If you where not using ROS 2 alongside the agent ([Fast DDS Interface ROS-Independent](https://docs.px4.io/v1.13/en/middleware/micrortps.html#agent-in-an-offboard-fast-dds-interface-ros-independent)), then you need to migrate to [eProsima Fast DDS](https://fast-dds.docs.eprosima.com/en/latest/index.html). +If you where not using ROS 2 alongside the agent ([Fast DDS Interface ROS-Independent](https://docs.px4.io/v1.13/en/middleware/micrortps#agent-in-an-offboard-fast-dds-interface-ros-independent)), then you need to migrate to [eProsima Fast DDS](https://fast-dds.docs.eprosima.com/en/latest/index.html). ROS 2 applications still need to compile alongside the PX4 messages, which you do by adding the [px4_msgs](https://github.com/PX4/px4_msgs) package to your workspace. You can remove the [px4_ros_com](https://github.com/PX4/px4_ros_com) package as it is no longer needed, other than for example code. diff --git a/docs/uk/middleware/zenoh.md b/docs/uk/middleware/zenoh.md index 800d0b5fae..61c2f10512 100644 --- a/docs/uk/middleware/zenoh.md +++ b/docs/uk/middleware/zenoh.md @@ -1,6 +1,6 @@ # Zenoh (PX4 ROS 2 rmw_zenoh) - + :::warning Експериментальні налаштування @@ -49,6 +49,11 @@ ros2 run rmw_zenoh_cpp rmw_zenohd For more information about the Zenoh Router see the [rmw_zenoh](https://github.com/ros2/rmw_zenoh?tab=readme-ov-file#start-the-zenoh-router) documentation. +:::note +From ROS 2 Jazzy onward, `rmw_zenoh` topic key expressions include the message type hash (RIHS01, as defined in REP-2016). This prevents interoperability with ROS 2 Humble and earlier. +For more information about key expressions, refer to the [rmw_zenoh design documentation](https://github.com/ros2/rmw_zenoh/blob/jazzy/docs/design.md#topic-and-service-name-mapping-to-zenoh-key-expressions). +::: + ## PX4 Zenoh-Pico Node Setup ### PX4 Firmware @@ -79,6 +84,12 @@ You can check if Zenoh is present at runtime by using QGroundControl to [find th If present, the module is installed. ::: +:::warning +Interoperability with ROS 2 Humble and earlier requires setting `CONFIG_ZENOH_KEY_TYPE_HASH=n` to disable the +inclusion of the message type hash (RIHS01, as defined in REP-2016) in the Zenoh key expression. +Note that this will break compatibility with ROS 2 Jazzy and later. +::: + ### Enable Zenoh on PX4 Startup Set the [ZENOH_ENABLE](../advanced_config/parameter_reference.md#ZENOH_ENABLE) parameter to `1` to enable Zenoh on PX4 startup. @@ -94,7 +105,7 @@ If you're using a different IP for the Zenoh daemon, run the following command ( zenoh config net client tcp/10.41.10.1:7447#iface=eth0 ``` -Note that for the simulation target with Zeroh (`px4_sitl_zenoh`) you won't need to make any changes because the default IP address of the Zenoh daemon is set to `localhost`. +Note that for the simulation target with Zenoh (`px4_sitl_zenoh`) you won't need to make any changes because the default IP address of the Zenoh daemon is set to `localhost`. :::warning Any changes to the network configuration require a PX4 system reboot to take effect. @@ -199,3 +210,7 @@ Subscription count: 0 The [PX4 ROS 2 Interface Library](../ros2/px4_ros2_interface_lib.md) works out of the box with Zenoh as a transport backend. This means you can publish and subscribe to PX4 topics over Zenoh without changing your ROS 2 nodes or dealing with DDS configuration. For setup details and supported message types, refer to the [PX4 ROS 2 Interface Library](../ros2/px4_ros2_interface_lib.md). + +:::info +The PX4 ROS 2 Interface Library is not compatible with ROS 2 Humble and earlier, as it requires the message type hash (RIHS01, as defined in REP-2016) to be included in the Zenoh key expression. +::: diff --git a/docs/uk/modules/hello_sky.md b/docs/uk/modules/hello_sky.md index 6f87812019..517a76f175 100644 --- a/docs/uk/modules/hello_sky.md +++ b/docs/uk/modules/hello_sky.md @@ -12,13 +12,15 @@ These are covered in [Application/Module Template](../modules/module_template.md Вам знадобиться наступне: -- [PX4 SITL Simulator](../simulation/index.md) _or_ a [PX4-compatible flight controller](../flight_controller/index.md). +- [Gazebo Simulator](../sim_gazebo_gz/index.md) (or another [PX4 SITL Simulator](../simulation/index.md)) _or_ a [PX4-compatible flight controller](../flight_controller/index.md). - [PX4 Development Toolchain](../dev_setup/dev_env.md) for the desired target. - [Download the PX4 Source Code](../dev_setup/building_px4.md#download-the-px4-source-code) from Github The source code [PX4-Autopilot/src/examples/px4_simple_app](https://github.com/PX4/PX4-Autopilot/tree/main/src/examples/px4_simple_app) directory contains a completed version of this tutorial that you can review if you get stuck. -- Rename (or delete) the **px4_simple_app** directory. +:::tip +Rename (or delete) the **px4_simple_app** directory. +::: ## Мінімальна програма @@ -34,7 +36,7 @@ This consists of a single _C_ file and a _cmake_ definition (which tells the too ```c /**************************************************************************** * - * Copyright (c) 2012-2022 PX4 Development Team. All rights reserved. + * Copyright (c) 2012-2026 PX4 Development Team. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -67,7 +69,7 @@ This consists of a single _C_ file and a _cmake_ definition (which tells the too ``` - Скопіюйте наступний код під заголовком за замовчуванням. - Це повинно бути присутнім у всіх розміщених файлах! + Similar code should be present in all contributed files! ```c /** @@ -150,6 +152,9 @@ This consists of a single _C_ file and a _cmake_ definition (which tells the too ) ``` + Note that in your own modules you'd use the current copyright year! + We're using `2015` here to match the example. + The `px4_add_module()` method builds a static library from a module description. - The `MODULE` block is the Firmware-unique name of the module (by convention the module name is prefixed by parent directories back to `src`). @@ -170,7 +175,7 @@ This consists of a single _C_ file and a _cmake_ definition (which tells the too 4. Create and open a new _Kconfig_ definition file named **Kconfig** and define your symbol for naming (see [Kconfig naming convention](../hardware/porting_guide_config.md#px4-kconfig-symbol-naming-convention)). Скопіюйте текст нижче: - ```text + ```txt menuconfig EXAMPLES_PX4_SIMPLE_APP bool "px4_simple_app" default n @@ -185,27 +190,34 @@ This consists of a single _C_ file and a _cmake_ definition (which tells the too Applications are added to the build/firmware in the appropriate board-level _px4board_ file for your target: - PX4 SITL (Simulator): [PX4-Autopilot/boards/px4/sitl/default.px4board](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/sitl/default.px4board) -- Pixhawk v1/2: [PX4-Autopilot/boards/px4/fmu-v2/default.px4board](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/fmu-v2/default.px4board) -- Pixracer (px4/fmu-v4): [PX4-Autopilot/boards/px4/fmu-v4/default.px4board](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/fmu-v4/default.px4board) +- Pixhawk 6X (px4/fmu-v6x): [PX4-Autopilot/boards/px4/fmu-v6x/default.px4board](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/fmu-v6x/default.px4board) - _px4board_ files for other boards can be found in [PX4-Autopilot/boards/](https://github.com/PX4/PX4-Autopilot/tree/main/boards) -To enable the compilation of the application into the firmware add the corresponding Kconfig key `CONFIG_EXAMPLES_PX4_SIMPLE_APP=y` in the _px4board_ file or run [boardconfig](../hardware/porting_guide_config.md#px4-menuconfig-setup) `make px4_fmu-v4_default boardconfig`: +To enable the compilation of the application into the firmware add the corresponding Kconfig key `CONFIG_EXAMPLES_PX4_SIMPLE_APP=y` in the _px4board_ file or run [boardconfig](../hardware/porting_guide_config.md#px4-menuconfig-setup). +For example, to edit the board config for FMUv6x you would do: + +```sh +make fmu-v6x_default boardconfig ``` + +And then enable the app in the _boardconfig_ UI as shown: + +```txt examples ---> [x] PX4 Simple app ---- ``` :::info -The line will already be present for most files, because the examples are included in firmware by default. +Examples are opt-in and not included in firmware by default (although they are in SITL). +You must explicitly enable them as shown above. ::: Побудуйте приклад, використовуючи команду для конкретної плати: -- jMAVSim Simulator: `make px4_sitl_default jmavsim` -- Pixhawk v1/2: `make px4_fmu-v2_default` (or just `make px4_fmu-v2`) -- Pixhawk v3: `make px4_fmu-v4_default` -- Other boards: [Building the Code](../dev_setup/building_px4.md#building-for-nuttx) +- Gazebo Simulator: `make px4_sitl gz_x500` +- Pixhawk 6X: `make px4_fmu-v6x_default` +- Other boards: [Building the Code](../dev_setup/building_px4.md) ## Тестовий додаток (апаратне забезпечення) @@ -213,8 +225,7 @@ The line will already be present for most files, because the examples are includ Увімкніть завантажувач, а потім скиньте плату: -- Pixhawk v1/2: `make px4_fmu-v2_default upload` -- Pixhawk v3: `make px4_fmu-v4_default upload` +- Pixhawk 6X: `make px4_fmu-v6x_default upload` Перед скиданням дошки повинно бути надруковано певну кількість компілювальних повідомлень та в кінці: @@ -299,14 +310,14 @@ The benefits of the PX4 hardware abstraction comes into play here! Немає потреби взаємодіяти з драйверами сенсорів та оновлювати додаток, якщо плата або сенсори оновлені. ::: -Individual message channels between applications are called [topics](../middleware/uorb.md). For this tutorial, we are interested in the [SensorCombined](https://github.com/PX4/PX4-Autopilot/blob/main/msg/SensorCombined.msg) topic, which holds the synchronized sensor data of the complete system. +Individual message channels between applications are called [topics](../middleware/uorb.md). For this tutorial, we are interested in the [VehicleAcceleration](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/VehicleAcceleration.msg) topic, which holds the filtered vehicle acceleration data. Підписка на тему проста: ```cpp -#include +#include .. -int sensor_sub_fd = orb_subscribe(ORB_ID(sensor_combined)); +int sensor_sub_fd = orb_subscribe(ORB_ID(vehicle_acceleration)); ``` The `sensor_sub_fd` is a topic handle and can be used to very efficiently perform a blocking wait for new data. @@ -317,9 +328,9 @@ Adding `poll()` to the subscription looks like (_pseudocode, look for the full i ```cpp #include -#include +#include .. -int sensor_sub_fd = orb_subscribe(ORB_ID(sensor_combined)); +int sensor_sub_fd = orb_subscribe(ORB_ID(vehicle_acceleration)); /* one could wait for multiple topics with this technique, just using one here */ px4_pollfd_struct_t fds[] = { @@ -327,26 +338,26 @@ px4_pollfd_struct_t fds[] = { }; while (true) { - /* wait for sensor update of 1 file descriptor for 1000 ms (1 second) */ - int poll_ret = px4_poll(fds, 1, 1000); - .. - if (fds[0].revents & POLLIN) { - /* obtained data for the first file descriptor */ - struct sensor_combined_s raw; - /* copy sensors raw data into local buffer */ - orb_copy(ORB_ID(sensor_combined), sensor_sub_fd, &raw); - PX4_INFO("Accelerometer:\t%8.4f\t%8.4f\t%8.4f", - (double)raw.accelerometer_m_s2[0], - (double)raw.accelerometer_m_s2[1], - (double)raw.accelerometer_m_s2[2]); - } +/* wait for sensor update of 1 file descriptor for 1000 ms (1 second) */ +int poll_ret = px4_poll(fds, 1, 1000); +.. +if (fds[0].revents & POLLIN) { + /* obtained data for the first file descriptor */ + struct vehicle_acceleration_s accel; + /* copy sensors raw data into local buffer */ + orb_copy(ORB_ID(vehicle_acceleration), sensor_sub_fd, &accel); + PX4_INFO("Accelerometer:\t%8.4f\t%8.4f\t%8.4f", + (double)accel.xyz[0], + (double)accel.xyz[1], + (double)accel.xyz[2]); +} } ``` Знову скомпілюйте додаток, введіть: ```sh -make +make px4_sitl_default ``` ### Тестування підписки на uORB @@ -405,7 +416,7 @@ The [complete example code](https://github.com/PX4/PX4-Autopilot/blob/main/src/e ```c /**************************************************************************** * - * Copyright (c) 2012-2019 PX4 Development Team. All rights reserved. + * Copyright (c) 2012-2026 PX4 Development Team. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -454,7 +465,7 @@ The [complete example code](https://github.com/PX4/PX4-Autopilot/blob/main/src/e #include #include -#include +#include #include __EXPORT int px4_simple_app_main(int argc, char *argv[]); @@ -463,8 +474,8 @@ int px4_simple_app_main(int argc, char *argv[]) { PX4_INFO("Hello Sky!"); - /* subscribe to sensor_combined topic */ - int sensor_sub_fd = orb_subscribe(ORB_ID(sensor_combined)); + /* subscribe to vehicle_acceleration topic */ + int sensor_sub_fd = orb_subscribe(ORB_ID(vehicle_acceleration)); /* limit the update rate to 5 Hz */ orb_set_interval(sensor_sub_fd, 200); @@ -505,20 +516,20 @@ int px4_simple_app_main(int argc, char *argv[]) if (fds[0].revents & POLLIN) { /* obtained data for the first file descriptor */ - struct sensor_combined_s raw; + struct vehicle_acceleration_s accel; /* copy sensors raw data into local buffer */ - orb_copy(ORB_ID(sensor_combined), sensor_sub_fd, &raw); + orb_copy(ORB_ID(vehicle_acceleration), sensor_sub_fd, &accel); PX4_INFO("Accelerometer:\t%8.4f\t%8.4f\t%8.4f", - (double)raw.accelerometer_m_s2[0], - (double)raw.accelerometer_m_s2[1], - (double)raw.accelerometer_m_s2[2]); + (double)accel.xyz[0], + (double)accel.xyz[1], + (double)accel.xyz[2]); /* set att and publish this information for other apps the following does not have any meaning, it's just an example */ - att.q[0] = raw.accelerometer_m_s2[0]; - att.q[1] = raw.accelerometer_m_s2[1]; - att.q[2] = raw.accelerometer_m_s2[2]; + att.q[0] = accel.xyz[0]; + att.q[1] = accel.xyz[1]; + att.q[2] = accel.xyz[2]; orb_publish(ORB_ID(vehicle_attitude), att_pub, &att); } @@ -530,7 +541,6 @@ int px4_simple_app_main(int argc, char *argv[]) } PX4_INFO("exiting"); - return 0; } ``` diff --git a/docs/uk/modules/module_template.md b/docs/uk/modules/module_template.md index 4ac3e4031e..263e7a0c31 100644 --- a/docs/uk/modules/module_template.md +++ b/docs/uk/modules/module_template.md @@ -22,7 +22,8 @@ PX4-Autopilot contains a template for writing a new application (module) that ru Підсумовуючи: 1. Specify the dependency on the work queue library in the cmake definition file ([CMakeLists.txt](https://github.com/PX4/PX4-Autopilot/blob/main/src/examples/work_item/CMakeLists.txt)): - ``` + + ```txt ... DEPENDS px4_work_queue @@ -48,9 +49,11 @@ PX4-Autopilot contains a template for writing a new application (module) that ru 4. Implement the `ScheduledWorkItem::Run()` method to perform "work". -5. Implement the `task_spawn` method, specifying that the task is a work queue (using the `task_id_is_work_queue` id. +5. Implement the `task_spawn` method, specifying that the task is a work queue (using the `task_id_is_work_queue` id). -6. Schedule the work queue task using one of the scheduling methods (in the example we use `ScheduleOnInterval` from within the `init` method). +6. Schedule the work queue task using one of the scheduling methods. + In the example, `init()` calls `registerCallback()` on a uORB subscription so that `Run()` is triggered whenever a new `sensor_accel` message is published. + `ScheduleOnInterval` is an alternative for fixed-rate scheduling. ## Задачі @@ -66,6 +69,6 @@ PX4/PX4-Autopilot contains a template for writing a new application (module) tha [startup script](../concept/system_startup.md). - Парсинг аргументів командного рядка. - Documentation: the `PRINT_MODULE_*` methods serve two purposes (the API is - documented [in the source code](https://github.com/PX4/PX4-Autopilot/blob/v1.8.0/src/platforms/px4_module.h#L381)): + documented [in the source code](https://github.com/PX4/PX4-Autopilot/blob/v1.17/platforms/common/include/px4_platform_common/module.h)): - They are used to print the command-line usage when entering `module help` on the console. - They are automatically extracted via script to generate the [Modules & Commands Reference](../modules/modules_main.md) page. diff --git a/docs/uk/modules/modules_command.md b/docs/uk/modules/modules_command.md index f7e8f84f0b..c88618eb85 100644 --- a/docs/uk/modules/modules_command.md +++ b/docs/uk/modules/modules_command.md @@ -342,6 +342,19 @@ mft_cfg [arguments...] , id == revision for ) ``` +## mklittlefs + +Source: [systemcmds/mklittlefs](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/mklittlefs) + +Format a device with the littlefs filesystem. + +### Usage {#mklittlefs_usage} + +``` +mklittlefs [arguments...] + Device and mount point (e.g. /dev/mtd0 /fs/flash) +``` + ## mtd Source: [systemcmds/mtd](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/mtd) diff --git a/docs/uk/modules/modules_driver.md b/docs/uk/modules/modules_driver.md index 7ac0fd1012..12b1e7c265 100644 --- a/docs/uk/modules/modules_driver.md +++ b/docs/uk/modules/modules_driver.md @@ -191,28 +191,13 @@ Source: [drivers/dshot](https://github.com/PX4/PX4-Autopilot/tree/main/src/drive ### Опис -This is the DShot output driver. It is similar to the fmu driver, and can be used as drop-in replacement +This is the DShot output driver. It can be used as drop-in replacement to use DShot as ESC communication protocol instead of PWM. -On startup, the module tries to occupy all available pins for DShot output. -It skips all pins already in use (e.g. by a camera trigger module). - It supports: - DShot150, DShot300, DShot600 - telemetry via separate UART and publishing as esc_status message -- sending DShot commands via CLI - -### Приклади - -Permanently reverse motor 1: - -``` -dshot reverse -m 1 -dshot save -m 1 -``` - -After saving, the reversed direction will be regarded as the normal one. So to reverse again repeat the same commands. ### Usage {#dshot_usage} @@ -226,36 +211,6 @@ dshot [arguments...] values: [-x] Swap RX/TX pins - reverse Reverse motor direction - [-m ] Motor index (1-based, default=all) - - normal Normal motor direction - [-m ] Motor index (1-based, default=all) - - save Save current settings - [-m ] Motor index (1-based, default=all) - - 3d_on Enable 3D mode - [-m ] Motor index (1-based, default=all) - - 3d_off Disable 3D mode - [-m ] Motor index (1-based, default=all) - - beep1 Send Beep pattern 1 - [-m ] Motor index (1-based, default=all) - - beep2 Send Beep pattern 2 - [-m ] Motor index (1-based, default=all) - - beep3 Send Beep pattern 3 - [-m ] Motor index (1-based, default=all) - - beep4 Send Beep pattern 4 - [-m ] Motor index (1-based, default=all) - - beep5 Send Beep pattern 5 - [-m ] Motor index (1-based, default=all) - stop status print status info @@ -363,7 +318,7 @@ Source: [modules/gimbal](https://github.com/PX4/PX4-Autopilot/tree/main/src/modu Mount/gimbal Gimbal control driver. It maps several different input methods (eg. RC or MAVLink) to a configured output (eg. AUX channels or MAVLink). -Documentation how to use it is on the [gimbal_control](https://docs.px4.io/main/en/advanced/gimbal_control.html) page. +Documentation how to use it is on the [gimbal_control](../advanced/gimbal_control.md) page. ### Приклади @@ -926,7 +881,7 @@ that can be accepted by most ESCs and servos. It is typically started with: ``` -pca9685_pwm_out start -a 0x40 -b 1 +pca9685_pwm_out start -X -a 0x40 -b 1 ``` ### Usage {#pca9685_pwm_out_usage} @@ -1109,7 +1064,7 @@ px4io [arguments...] ## rgbled -Source: [drivers/lights/rgbled](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/lights/rgbled) +Source: [drivers/lights/rgbled_ncp5623c](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/lights/rgbled_ncp5623c) ### Usage {#rgbled_usage} @@ -1124,7 +1079,9 @@ rgbled [arguments...] [-f ] bus frequency in kHz [-q] quiet startup (no message if no device found) [-a ] I2C address - default: 85 + default: 57 + [-o ] RGB PWM Assignment + default: 123 stop diff --git a/docs/uk/modules/modules_driver_distance_sensor.md b/docs/uk/modules/modules_driver_distance_sensor.md index 4ed7caf5f7..a1952bc9c5 100644 --- a/docs/uk/modules/modules_driver_distance_sensor.md +++ b/docs/uk/modules/modules_driver_distance_sensor.md @@ -98,13 +98,56 @@ leddar_one [arguments...] stop Stop driver ``` +## lightware_grf_serial + +Source: [drivers/distance_sensor/lightware_grf_serial](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/distance_sensor/lightware_grf_serial) + +### Опис + +Serial bus driver for the Lightware GRF Laser rangefinder. + +### Налаштування + +https://docs.px4.io/main/en/sensor/grf_lidar + +### Параметри + +https://docs.px4.io/main/en/advanced_config/parameter_reference#GRF_SENS_MODEL +https://docs.px4.io/main/en/advanced_config/parameter_reference#GRF_RATE_CFG +https://docs.px4.io/main/en/advanced_config/parameter_reference#SENS_EN_GRF_CFG + +### Приклади + +Attempt to start driver on a specified serial device. + +``` +lightware_grf_serial start -d /dev/ttyS1 +``` + +Stop driver + +``` +lightware_grf_serial stop +``` + +### Usage {#lightware_grf_serial_usage} + +``` +lightware_grf_serial [arguments...] + Commands: + start Start driver + -d Serial device + + stop Stop driver +``` + ## lightware_laser_i2c Source: [drivers/distance_sensor/lightware_laser_i2c](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/distance_sensor/lightware_laser_i2c) ### Опис -I2C bus driver for Lightware SFxx series LIDAR rangefinders: SF10/a, SF10/b, SF10/c, SF11/c, SF/LW20, SF30/d. +I2C bus driver for Lightware LIDAR rangefinders: SF10/a, SF10/b, SF10/c, SF11/c, SF/LW20, SF/LW30/d, GRF250, GRF500. Setup/usage information: https://docs.px4.io/main/en/sensor/sfxx_lidar.html @@ -122,8 +165,6 @@ lightware_laser_i2c [arguments...] [-q] quiet startup (no message if no device found) [-a ] I2C address default: 102 - [-R ] Sensor rotation - downward facing by default - default: 25 stop diff --git a/docs/uk/modules/modules_driver_imu.md b/docs/uk/modules/modules_driver_imu.md index ed5da8d8ea..cd1d6dfa0b 100644 --- a/docs/uk/modules/modules_driver_imu.md +++ b/docs/uk/modules/modules_driver_imu.md @@ -130,6 +130,32 @@ adis16507 [arguments...] status print status info ``` +## adis16607 + +Source: [drivers/imu/analog_devices/adis16607](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/analog_devices/adis16607) + +### Usage {#adis16607_usage} + +``` +adis16607 [arguments...] + Commands: + start + [-s] Internal SPI bus(es) + [-S] External SPI bus(es) + [-b ] board-specific bus (default=all) (external SPI: n-th bus + (default=1)) + [-c ] chip-select pin (for internal SPI) or index (for external SPI) + [-m ] SPI mode + [-f ] bus frequency in kHz + [-q] quiet startup (no message if no device found) + [-R ] Rotation + default: 0 + + stop + + status print status info +``` + ## bmi055 Source: [drivers/imu/bosch/bmi055](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/bosch/bmi055) @@ -764,6 +790,32 @@ lsm303d [arguments...] status print status info ``` +## lsm6dsv + +Source: [drivers/imu/st/lsm6dsv](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/st/lsm6dsv) + +### Usage {#lsm6dsv_usage} + +``` +lsm6dsv [arguments...] + Commands: + start + [-s] Internal SPI bus(es) + [-S] External SPI bus(es) + [-b ] board-specific bus (default=all) (external SPI: n-th bus + (default=1)) + [-c ] chip-select pin (for internal SPI) or index (for external SPI) + [-m ] SPI mode + [-f ] bus frequency in kHz + [-q] quiet startup (no message if no device found) + [-R ] Rotation + default: 0 + + stop + + status print status info +``` + ## lsm9ds1 Source: [drivers/imu/st/lsm9ds1](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/st/lsm9ds1) diff --git a/docs/uk/modules/modules_driver_ins.md b/docs/uk/modules/modules_driver_ins.md index 0385004203..958b0f48d4 100644 --- a/docs/uk/modules/modules_driver_ins.md +++ b/docs/uk/modules/modules_driver_ins.md @@ -9,7 +9,7 @@ Source: [drivers/ins/microstrain](https://github.com/PX4/PX4-Autopilot/tree/main MicroStrain by HBK Inertial Sensor Driver. Currently supports the following sensors: --[CV7-AR](https://www.hbkworld.com/en/products/transducers/inertial-sensors/vertical-reference-units--vru-/3dm-cv7-ar) -[CV7-AHRS](https://www.hbkworld.com/en/products/transducers/inertial-sensors/attitude-and-heading-reference-systems--ahrs-/3dm-cv7-ahrs) -[CV7-INS](https://www.hbkworld.com/en/products/transducers/inertial-sensors/inertial-navigation-systems--ins-/3dm-cv7-ins) -[CV7-GNSS/INS](https://www.hbkworld.com/en/products/transducers/inertial-sensors/inertial-navigation-systems--ins-/3dm-cv7-gnss-ins) +-[CV7-AR](https://www.hbkworld.com/en/products/transducers/inertial-sensors/vertical-reference-units--vru-/3dm-cv7-ar) -[CV7-AHRS](https://www.hbkworld.com/en/products/transducers/inertial-sensors/attitude-and-heading-reference-systems--ahrs-/3dm-cv7-ahrs) -[CV7-INS](https://www.hbkworld.com/en/products/transducers/inertial-sensors/navigation/3dm-cv7-ins) -[CV7-GNSS/INS](https://www.hbkworld.com/en/products/transducers/inertial-sensors/navigation/3dm-cv7-gnss-ins) This driver is not included in the firmware by default. Include the module in firmware by setting the diff --git a/docs/uk/modules/modules_estimator.md b/docs/uk/modules/modules_estimator.md index af7d898ee6..619a52a5c3 100644 --- a/docs/uk/modules/modules_estimator.md +++ b/docs/uk/modules/modules_estimator.md @@ -52,7 +52,7 @@ Source: [modules/ekf2](https://github.com/PX4/PX4-Autopilot/tree/main/src/module Оцінювач відношення та позиції за допомогою розширеного фільтра Калмана. Використовується для багатороторних і фіксованих крил. -The documentation can be found on the [ECL/EKF Overview & Tuning](https://docs.px4.io/main/en/advanced_config/tuning_the_ecl_ekf.html) page. +The documentation can be found on the [ECL/EKF Overview & Tuning](../advanced_config/tuning_the_ecl_ekf.md) page. ekf2 can be started in replay mode (`-r`): in this mode, it does not access the system time, but only uses the timestamps from the sensor topics. diff --git a/docs/uk/modules/modules_system.md b/docs/uk/modules/modules_system.md index ef5cd50c40..ea604ac422 100644 --- a/docs/uk/modules/modules_system.md +++ b/docs/uk/modules/modules_system.md @@ -321,7 +321,7 @@ Source: [drivers/heater](https://github.com/PX4/PX4-Autopilot/tree/main/src/driv ### Опис -Background process running periodically on the LP work queue to regulate IMU temperature at a setpoint. +Background process running periodically on the INS{i} queue to regulate IMU temperature at a setpoint. This task can be started at boot from the startup scripts by setting SENS_EN_THERMAL or via CLI. @@ -732,7 +732,7 @@ The module is typically used together with uORB publisher rules, to specify whic The replay module will just publish all messages that are found in the log. It also applies the parameters from the log. -The replay procedure is documented on the [System-wide Replay](https://docs.px4.io/main/en/debug/system_wide_replay.html) +The replay procedure is documented on the [System-wide Replay](../debug/system_wide_replay.md) page. ### Usage {#replay_usage} @@ -921,6 +921,30 @@ system_power_simulation [arguments...] status print status info ``` +## task_watchdog + +Source: [modules/task_watchdog](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/task_watchdog) + +### Опис + +Detects when a higher-priority task starves the system by running too long. +When starvation is detected, dumps the offending task's registers and stack, +and saves a cpuload snapshot. + +### Usage {#task_watchdog_usage} + +``` +task_watchdog [arguments...] + Commands: + start + + trigger Manually trigger the watchdog + + stop + + status print status info +``` + ## tattu_can Source: [drivers/tattu_can](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/tattu_can) diff --git a/docs/uk/msg_docs/ActionRequest.md b/docs/uk/msg_docs/ActionRequest.md index 71b4bfde29..077a3e2f07 100644 --- a/docs/uk/msg_docs/ActionRequest.md +++ b/docs/uk/msg_docs/ActionRequest.md @@ -25,26 +25,26 @@ Request are published by `manual_control` and subscribed by the `commander` and ### ACTION {#ACTION} -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | -------- | ---------------------------------------------------------------------------------------- | -| ACTION_DISARM | `uint8` | 0 | Disarm vehicle | -| ACTION_ARM | `uint8` | 1 | Arm vehicle | -| ACTION_TOGGLE_ARMING | `uint8` | 2 | Toggle arming | -| ACTION_UNKILL | `uint8` | 3 | Revert a kill action | -| ACTION_KILL | `uint8` | 4 | Kill vehicle (instantly stop the motors) | -| ACTION_SWITCH_MODE | `uint8` | 5 | Switch mode. The target mode is set in the `mode` field. | -| ACTION_VTOL_TRANSITION_TO_MULTICOPTER | `uint8` | 6 | Transition to hover flight | -| ACTION_VTOL_TRANSITION_TO_FIXEDWING | `uint8` | 7 | Transition to fast forward flight | -| ACTION_TERMINATION | `uint8` | 8 | Irreversibly output failsafe values on all outputs, trigger parachute | +| Назва | Тип | Значення | Опис | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | -------- | ---------------------------------------------------------------------------------------- | +| ACTION_DISARM | `uint8` | 0 | Disarm vehicle | +| ACTION_ARM | `uint8` | 1 | Arm vehicle | +| ACTION_TOGGLE_ARMING | `uint8` | 2 | Toggle arming | +| ACTION_UNKILL | `uint8` | 3 | Revert a kill action | +| ACTION_KILL | `uint8` | 4 | Kill vehicle (instantly stop the motors) | +| ACTION_SWITCH_MODE | `uint8` | 5 | Switch mode. The target mode is set in the `mode` field. | +| ACTION_VTOL_TRANSITION_TO_MULTICOPTER | `uint8` | 6 | Transition to hover flight | +| ACTION_VTOL_TRANSITION_TO_FIXEDWING | `uint8` | 7 | Transition to fast forward flight | +| ACTION_TERMINATION | `uint8` | 8 | Irreversibly output failsafe values on all outputs, trigger parachute | ### SOURCE {#SOURCE} -| Назва | Тип | Значення | Опис | -| ---------------------------------------------------------------------------------------------------------------------- | ------- | -------- | --------------------------------------------------------------- | -| SOURCE_STICK_GESTURE | `uint8` | 0 | Triggered by holding the sticks in a certain position | -| SOURCE_RC_SWITCH | `uint8` | 1 | Triggered by an RC switch moving into a certain position | -| SOURCE_RC_BUTTON | `uint8` | 2 | Triggered by a momentary button on the RC being pressed or held | -| SOURCE_RC_MODE_SLOT | `uint8` | 3 | Mode change through the RC mode selection mechanism | +| Назва | Тип | Значення | Опис | +| -------------------------------------------------------------------------------------------------------------------- | ------- | -------- | --------------------------------------------------------------- | +| SOURCE_STICK_GESTURE | `uint8` | 0 | Triggered by holding the sticks in a certain position | +| SOURCE_RC_SWITCH | `uint8` | 1 | Triggered by an RC switch moving into a certain position | +| SOURCE_RC_BUTTON | `uint8` | 2 | Triggered by a momentary button on the RC being pressed or held | +| SOURCE_RC_MODE_SLOT | `uint8` | 3 | Mode change through the RC mode selection mechanism | ## Source Message @@ -60,26 +60,26 @@ Click here to see original file # It allows mapping triggers from various external interfaces like RC channels or MAVLink to cause an action. # Request are published by `manual_control` and subscribed by the `commander` and `vtol_att_control` modules. -uint64 timestamp # [us] Time since system start +uint64 timestamp # [us] Time since system start -uint8 action # [@enum ACTION] Requested action -uint8 ACTION_DISARM = 0 # Disarm vehicle -uint8 ACTION_ARM = 1 # Arm vehicle -uint8 ACTION_TOGGLE_ARMING = 2 # Toggle arming -uint8 ACTION_UNKILL = 3 # Revert a kill action -uint8 ACTION_KILL = 4 # Kill vehicle (instantly stop the motors) -uint8 ACTION_SWITCH_MODE = 5 # Switch mode. The target mode is set in the `mode` field. -uint8 ACTION_VTOL_TRANSITION_TO_MULTICOPTER = 6 # Transition to hover flight -uint8 ACTION_VTOL_TRANSITION_TO_FIXEDWING = 7 # Transition to fast forward flight -uint8 ACTION_TERMINATION = 8 # Irreversibly output failsafe values on all outputs, trigger parachute +uint8 action # [@enum ACTION] Requested action +uint8 ACTION_DISARM = 0 # Disarm vehicle +uint8 ACTION_ARM = 1 # Arm vehicle +uint8 ACTION_TOGGLE_ARMING = 2 # Toggle arming +uint8 ACTION_UNKILL = 3 # Revert a kill action +uint8 ACTION_KILL = 4 # Kill vehicle (instantly stop the motors) +uint8 ACTION_SWITCH_MODE = 5 # Switch mode. The target mode is set in the `mode` field. +uint8 ACTION_VTOL_TRANSITION_TO_MULTICOPTER = 6 # Transition to hover flight +uint8 ACTION_VTOL_TRANSITION_TO_FIXEDWING = 7 # Transition to fast forward flight +uint8 ACTION_TERMINATION = 8 # Irreversibly output failsafe values on all outputs, trigger parachute -uint8 source # [@enum SOURCE] Request trigger type, such as a switch, button or gesture -uint8 SOURCE_STICK_GESTURE = 0 # Triggered by holding the sticks in a certain position -uint8 SOURCE_RC_SWITCH = 1 # Triggered by an RC switch moving into a certain position -uint8 SOURCE_RC_BUTTON = 2 # Triggered by a momentary button on the RC being pressed or held -uint8 SOURCE_RC_MODE_SLOT = 3 # Mode change through the RC mode selection mechanism +uint8 source # [@enum SOURCE] Request trigger type, such as a switch, button or gesture +uint8 SOURCE_STICK_GESTURE = 0 # Triggered by holding the sticks in a certain position +uint8 SOURCE_RC_SWITCH = 1 # Triggered by an RC switch moving into a certain position +uint8 SOURCE_RC_BUTTON = 2 # Triggered by a momentary button on the RC being pressed or held +uint8 SOURCE_RC_MODE_SLOT = 3 # Mode change through the RC mode selection mechanism -uint8 mode # Requested mode. Only applies when `action` is `ACTION_SWITCH_MODE`. Values for this field are defined by the `vehicle_status_s::NAVIGATION_STATE_*` enumeration. +uint8 mode # Requested mode. Only applies when `action` is `ACTION_SWITCH_MODE`. Values for this field are defined by the `vehicle_status_s::NAVIGATION_STATE_*` enumeration. ``` ::: diff --git a/docs/uk/msg_docs/ActuatorMotors.md b/docs/uk/msg_docs/ActuatorMotors.md index bb061ef8ae..bf5bc2f7fc 100644 --- a/docs/uk/msg_docs/ActuatorMotors.md +++ b/docs/uk/msg_docs/ActuatorMotors.md @@ -18,15 +18,15 @@ Published by the vehicle's allocation and consumed by the ESC protocol drivers e | timestamp | `uint64` | us | | Time since system start | | timestamp_sample | `uint64` | us | | Sampling timestamp of the data this control response is based on | | reversible_flags | `uint16` | | | Bitset indicating which motors are configured to be reversible | -| control | `float32[12]` | | [-1 : 1] | Normalized thrust. where 1 means maximum positive thrust, -1 maximum negative (if not supported by the output, <0 maps to NaN). NaN maps to disarmed (stop the motors) | +| control | `float32[12]` | | [-1 : 1] | Normalized thrust. Where 1 means maximum positive thrust, -1 maximum negative (if not supported by the output, <0 maps to NaN). NaN maps to disarmed (stop the motors) | ## Constants -| Назва | Тип | Значення | Опис | -| ----------------------------------------------------------------------------------------------------------- | -------- | -------- | ---- | -| MESSAGE_VERSION | `uint32` | 0 | | -| ACTUATOR_FUNCTION_MOTOR1 | `uint8` | 101 | | -| NUM_CONTROLS | `uint8` | 12 | | +| Назва | Тип | Значення | Опис | +| --------------------------------------------------------------------------------------------------------- | -------- | -------- | -------------------------------------------------------------------------------------- | +| MESSAGE_VERSION | `uint32` | 0 | | +| ACTUATOR_FUNCTION_MOTOR1 | `uint8` | 101 | output_functions.yaml Motor.start | +| NUM_CONTROLS | `uint8` | 12 | output_functions.yaml Motor.count | ## Source Message @@ -43,15 +43,15 @@ Click here to see original file uint32 MESSAGE_VERSION = 0 -uint64 timestamp # [us] Time since system start -uint64 timestamp_sample # [us] Sampling timestamp of the data this control response is based on +uint64 timestamp # [us] Time since system start +uint64 timestamp_sample # [us] Sampling timestamp of the data this control response is based on -uint16 reversible_flags # [-] Bitset indicating which motors are configured to be reversible +uint16 reversible_flags # [-] Bitset indicating which motors are configured to be reversible -uint8 ACTUATOR_FUNCTION_MOTOR1 = 101 # +uint8 ACTUATOR_FUNCTION_MOTOR1 = 101 # output_functions.yaml Motor.start -uint8 NUM_CONTROLS = 12 # -float32[12] control # [@range -1, 1] Normalized thrust. where 1 means maximum positive thrust, -1 maximum negative (if not supported by the output, <0 maps to NaN). NaN maps to disarmed (stop the motors) +uint8 NUM_CONTROLS = 12 # output_functions.yaml Motor.count +float32[12] control # [@range -1, 1] Normalized thrust. Where 1 means maximum positive thrust, -1 maximum negative (if not supported by the output, <0 maps to NaN). NaN maps to disarmed (stop the motors) ``` ::: diff --git a/docs/uk/msg_docs/ActuatorOutputs.md b/docs/uk/msg_docs/ActuatorOutputs.md index 68446e67ba..feb106b70a 100644 --- a/docs/uk/msg_docs/ActuatorOutputs.md +++ b/docs/uk/msg_docs/ActuatorOutputs.md @@ -16,10 +16,10 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------------------------------------------------------------------- | ------- | -------- | ------------------- | -| NUM_ACTUATOR_OUTPUTS | `uint8` | 16 | | -| NUM_ACTUATOR_OUTPUT_GROUPS | `uint8` | 4 | for sanity checking | +| Назва | Тип | Значення | Опис | +| ---------------------------------------------------------------------------------------------------------------------------------- | ------- | -------- | ------------------- | +| NUM_ACTUATOR_OUTPUTS | `uint8` | 16 | | +| NUM_ACTUATOR_OUTPUT_GROUPS | `uint8` | 4 | for sanity checking | ## Source Message diff --git a/docs/uk/msg_docs/ActuatorServos.md b/docs/uk/msg_docs/ActuatorServos.md index dcd37b31bb..32f9ea9eca 100644 --- a/docs/uk/msg_docs/ActuatorServos.md +++ b/docs/uk/msg_docs/ActuatorServos.md @@ -21,10 +21,10 @@ Published by the vehicle's allocation and consumed by the actuator output driver ## Constants -| Назва | Тип | Значення | Опис | -| -------------------------------------------------------------------- | -------- | -------- | ---- | -| MESSAGE_VERSION | `uint32` | 0 | | -| NUM_CONTROLS | `uint8` | 8 | | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------ | -------- | -------- | ---- | +| MESSAGE_VERSION | `uint32` | 0 | | +| NUM_CONTROLS | `uint8` | 8 | | ## Source Message @@ -41,11 +41,11 @@ Click here to see original file uint32 MESSAGE_VERSION = 0 -uint64 timestamp # [us] Time since system start -uint64 timestamp_sample # [us] Sampling timestamp of the data this control response is based on +uint64 timestamp # [us] Time since system start +uint64 timestamp_sample # [us] Sampling timestamp of the data this control response is based on -uint8 NUM_CONTROLS = 8 # -float32[8] control # [-] [@range -1, 1] Normalized output. 1 means maximum positive position. -1 maximum negative position (if not supported by the output, <0 maps to NaN). NaN maps to disarmed. +uint8 NUM_CONTROLS = 8 +float32[8] control # [-] [@range -1, 1] Normalized output. 1 means maximum positive position. -1 maximum negative position (if not supported by the output, <0 maps to NaN). NaN maps to disarmed. ``` ::: diff --git a/docs/uk/msg_docs/ActuatorServosTrim.md b/docs/uk/msg_docs/ActuatorServosTrim.md index eaa760e4a7..bac3fddfc0 100644 --- a/docs/uk/msg_docs/ActuatorServosTrim.md +++ b/docs/uk/msg_docs/ActuatorServosTrim.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Servo trims, added as offset to servo outputs. -**TOPICS:** actuator_servostrim +**TOPICS:** actuator_servos_trim ## Fields @@ -17,9 +17,9 @@ Servo trims, added as offset to servo outputs. ## Constants -| Назва | Тип | Значення | Опис | -| -------------------------------------------------------------- | ------- | -------- | ---- | -| NUM_CONTROLS | `uint8` | 8 | | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------ | ------- | -------- | ---- | +| NUM_CONTROLS | `uint8` | 8 | | ## Source Message diff --git a/docs/uk/msg_docs/ActuatorTest.md b/docs/uk/msg_docs/ActuatorTest.md index c07d77a528..d6d667c985 100644 --- a/docs/uk/msg_docs/ActuatorTest.md +++ b/docs/uk/msg_docs/ActuatorTest.md @@ -18,15 +18,15 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------------------------------------- | ------- | -------- | -------------------------------------------------------------------------------------------------------------------- | -| ACTION_RELEASE_CONTROL | `uint8` | 0 | exit test mode for the given function | -| ACTION_DO_CONTROL | `uint8` | 1 | enable actuator test mode | -| FUNCTION_MOTOR1 | `uint8` | 101 | | -| MAX_NUM_MOTORS | `uint8` | 12 | | -| FUNCTION_SERVO1 | `uint8` | 201 | | -| MAX_NUM_SERVOS | `uint8` | 8 | | -| ORB_QUEUE_LENGTH | `uint8` | 16 | > = MAX_NUM_MOTORS to support code in esc_calibration | +| Назва | Тип | Значення | Опис | +| ----------------------------------------------------------------------------------------------------- | ------- | -------- | -------------------------------------------------------------------------------------------------------------------- | +| ACTION_RELEASE_CONTROL | `uint8` | 0 | exit test mode for the given function | +| ACTION_DO_CONTROL | `uint8` | 1 | enable actuator test mode | +| FUNCTION_MOTOR1 | `uint8` | 101 | | +| MAX_NUM_MOTORS | `uint8` | 12 | | +| FUNCTION_SERVO1 | `uint8` | 201 | | +| MAX_NUM_SERVOS | `uint8` | 8 | | +| ORB_QUEUE_LENGTH | `uint8` | 16 | > = MAX_NUM_MOTORS to support code in esc_calibration | ## Source Message diff --git a/docs/uk/msg_docs/AirspeedValidated.md b/docs/uk/msg_docs/AirspeedValidated.md index 306128407a..405c978bdc 100644 --- a/docs/uk/msg_docs/AirspeedValidated.md +++ b/docs/uk/msg_docs/AirspeedValidated.md @@ -30,20 +30,20 @@ Used by controllers, estimators and for airspeed reporting to operator. ### SOURCE {#SOURCE} -| Назва | Тип | Значення | Опис | -| -------------------------------------------------------------------------------------------------------------------------------- | ------ | -------- | ----------------------- | -| SOURCE_DISABLED | `int8` | -1 | Disabled | -| SOURCE_GROUND_MINUS_WIND | `int8` | 0 | Ground speed minus wind | -| SOURCE_SENSOR_1 | `int8` | 1 | Sensor 1 | -| SOURCE_SENSOR_2 | `int8` | 2 | Sensor 2 | -| SOURCE_SENSOR_3 | `int8` | 3 | Sensor 3 | -| SOURCE_SYNTHETIC | `int8` | 4 | Synthetic airspeed | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------------------------------------------------------------------ | ------ | -------- | ----------------------- | +| SOURCE_DISABLED | `int8` | -1 | Disabled | +| SOURCE_GROUND_MINUS_WIND | `int8` | 0 | Ground speed minus wind | +| SOURCE_SENSOR_1 | `int8` | 1 | Sensor 1 | +| SOURCE_SENSOR_2 | `int8` | 2 | Sensor 2 | +| SOURCE_SENSOR_3 | `int8` | 3 | Sensor 3 | +| SOURCE_SYNTHETIC | `int8` | 4 | Synthetic airspeed | ## Constants -| Назва | Тип | Значення | Опис | -| -------------------------------------------------------------------- | -------- | -------- | ---- | -| MESSAGE_VERSION | `uint32` | 1 | | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------ | -------- | -------- | ---- | +| MESSAGE_VERSION | `uint32` | 1 | | ## Source Message @@ -58,28 +58,27 @@ Click here to see original file # Provides information about airspeed (indicated, true, calibrated) and the source of the data. # Used by controllers, estimators and for airspeed reporting to operator. - uint32 MESSAGE_VERSION = 1 -uint64 timestamp # [us] Time since system start +uint64 timestamp # [us] Time since system start -float32 indicated_airspeed_m_s # [m/s] [@invalid NaN] Indicated airspeed (IAS) -float32 calibrated_airspeed_m_s # [m/s] [@invalid NaN] Calibrated airspeed (CAS) -float32 true_airspeed_m_s # [m/s] [@invalid NaN] True airspeed (TAS) +float32 indicated_airspeed_m_s # [m/s] [@invalid NaN] Indicated airspeed (IAS) +float32 calibrated_airspeed_m_s # [m/s] [@invalid NaN] Calibrated airspeed (CAS) +float32 true_airspeed_m_s # [m/s] [@invalid NaN] True airspeed (TAS) -int8 airspeed_source # [@enum SOURCE] Source of currently published airspeed values -int8 SOURCE_DISABLED = -1 # Disabled -int8 SOURCE_GROUND_MINUS_WIND = 0 # Ground speed minus wind -int8 SOURCE_SENSOR_1 = 1 # Sensor 1 -int8 SOURCE_SENSOR_2 = 2 # Sensor 2 -int8 SOURCE_SENSOR_3 = 3 # Sensor 3 -int8 SOURCE_SYNTHETIC = 4 # Synthetic airspeed +int8 airspeed_source # [@enum SOURCE] Source of currently published airspeed values +int8 SOURCE_DISABLED = -1 # Disabled +int8 SOURCE_GROUND_MINUS_WIND = 0 # Ground speed minus wind +int8 SOURCE_SENSOR_1 = 1 # Sensor 1 +int8 SOURCE_SENSOR_2 = 2 # Sensor 2 +int8 SOURCE_SENSOR_3 = 3 # Sensor 3 +int8 SOURCE_SYNTHETIC = 4 # Synthetic airspeed -float32 calibrated_ground_minus_wind_m_s # [m/s] [@invalid NaN] CAS calculated from groundspeed - windspeed, where windspeed is estimated based on a zero-sideslip assumption -float32 calibraded_airspeed_synth_m_s # [m/s] [@invalid NaN] Synthetic airspeed -float32 airspeed_derivative_filtered # [m/s^2] Filtered indicated airspeed derivative -float32 throttle_filtered # [-] Filtered fixed-wing throttle -float32 pitch_filtered # [rad] Filtered pitch +float32 calibrated_ground_minus_wind_m_s # [m/s] [@invalid NaN] CAS calculated from groundspeed - windspeed, where windspeed is estimated based on a zero-sideslip assumption +float32 calibraded_airspeed_synth_m_s # [m/s] [@invalid NaN] Synthetic airspeed +float32 airspeed_derivative_filtered # [m/s^2] Filtered indicated airspeed derivative +float32 throttle_filtered # [-] Filtered fixed-wing throttle +float32 pitch_filtered # [rad] Filtered pitch ``` ::: diff --git a/docs/uk/msg_docs/AirspeedValidatedV0.md b/docs/uk/msg_docs/AirspeedValidatedV0.md index 6fdd9f47d1..76b8129af7 100644 --- a/docs/uk/msg_docs/AirspeedValidatedV0.md +++ b/docs/uk/msg_docs/AirspeedValidatedV0.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # AirspeedValidatedV0 (UORB message) -**TOPICS:** airspeed_validatedv0 +**TOPICS:** airspeed_validated_v0 ## Fields @@ -24,9 +24,9 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| -------------------------------------------------------------------- | -------- | -------- | ---- | -| MESSAGE_VERSION | `uint32` | 0 | | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------ | -------- | -------- | ---- | +| MESSAGE_VERSION | `uint32` | 0 | | ## Source Message diff --git a/docs/uk/msg_docs/AirspeedWind.md b/docs/uk/msg_docs/AirspeedWind.md index e3a90ba5ee..e425dcba7d 100644 --- a/docs/uk/msg_docs/AirspeedWind.md +++ b/docs/uk/msg_docs/AirspeedWind.md @@ -35,12 +35,12 @@ subscribed to by any other modules. ## Constants -| Назва | Тип | Значення | Опис | -| ---------------------------------------------------------------------------------------------------------------------- | ------- | -------- | ----------------------------------------------------------------------------------------------------- | -| SOURCE_AS_BETA_ONLY | `uint8` | 0 | Wind estimate only based on synthetic sideslip fusion | -| SOURCE_AS_SENSOR_1 | `uint8` | 1 | Combined synthetic sideslip and airspeed fusion (data from first airspeed sensor) | -| SOURCE_AS_SENSOR_2 | `uint8` | 2 | Combined synthetic sideslip and airspeed fusion (data from second airspeed sensor) | -| SOURCE_AS_SENSOR_3 | `uint8` | 3 | Combined synthetic sideslip and airspeed fusion (data from third airspeed sensor) | +| Назва | Тип | Значення | Опис | +| -------------------------------------------------------------------------------------------------------------------- | ------- | -------- | ----------------------------------------------------------------------------------------------------- | +| SOURCE_AS_BETA_ONLY | `uint8` | 0 | Wind estimate only based on synthetic sideslip fusion | +| SOURCE_AS_SENSOR_1 | `uint8` | 1 | Combined synthetic sideslip and airspeed fusion (data from first airspeed sensor) | +| SOURCE_AS_SENSOR_2 | `uint8` | 2 | Combined synthetic sideslip and airspeed fusion (data from second airspeed sensor) | +| SOURCE_AS_SENSOR_3 | `uint8` | 3 | Combined synthetic sideslip and airspeed fusion (data from third airspeed sensor) | ## Source Message diff --git a/docs/uk/msg_docs/ArmingCheckReply.md b/docs/uk/msg_docs/ArmingCheckReply.md index 732d88cb1c..4f56cab405 100644 --- a/docs/uk/msg_docs/ArmingCheckReply.md +++ b/docs/uk/msg_docs/ArmingCheckReply.md @@ -13,7 +13,7 @@ The request is sent regularly to all registered ROS modes, even while armed, so Note that the external component is identified by its registration_id, which is allocated to the component during registration (arming_check_id in RegisterExtComponentReply). The message is not used by internal/FMU components, as their mode requirements are known at compile time. -**TOPICS:** arming_checkreply +**TOPICS:** arming_check_reply ## Fields @@ -45,16 +45,16 @@ The message is not used by internal/FMU components, as their mode requirements a ### HEALTH_COMPONENT_INDEX {#HEALTH_COMPONENT_INDEX} -| Назва | Тип | Значення | Опис | -| -------------------------------------------------------------------------------------------------------------------------------------- | ------- | -------- | --------------------------------------------------------- | -| HEALTH_COMPONENT_INDEX_NONE | `uint8` | 0 | Index of health component for which this response applies | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------------------------------------------------------------------------ | ------- | -------- | --------------------------------------------------------- | +| HEALTH_COMPONENT_INDEX_NONE | `uint8` | 0 | Index of health component for which this response applies | ## Constants -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------------------------- | -------- | -------- | ---- | -| MESSAGE_VERSION | `uint32` | 1 | | -| ORB_QUEUE_LENGTH | `uint8` | 4 | | +| Назва | Тип | Значення | Опис | +| ----------------------------------------------------------------------------------------- | -------- | -------- | ---- | +| MESSAGE_VERSION | `uint32` | 1 | | +| ORB_QUEUE_LENGTH | `uint8` | 4 | | ## Source Message @@ -73,40 +73,40 @@ Click here to see original file # Note that the external component is identified by its registration_id, which is allocated to the component during registration (arming_check_id in RegisterExtComponentReply). # The message is not used by internal/FMU components, as their mode requirements are known at compile time. -uint32 MESSAGE_VERSION = 1 +uint32 MESSAGE_VERSION = 1 uint64 timestamp # [us] Time since system start. -uint8 request_id # [-] Id of ArmingCheckRequest for which this is a response -uint8 registration_id # [-] Id of external component emitting this response +uint8 request_id # [-] Id of ArmingCheckRequest for which this is a response +uint8 registration_id # [-] Id of external component emitting this response -uint8 HEALTH_COMPONENT_INDEX_NONE = 0 # Index of health component for which this response applies +uint8 HEALTH_COMPONENT_INDEX_NONE = 0 # Index of health component for which this response applies -uint8 health_component_index # [@enum HEALTH_COMPONENT_INDEX] -bool health_component_is_present # Unused. Intended for use with health events interface (health_component_t in events.json) -bool health_component_warning # Unused. Intended for use with health events interface (health_component_t in events.json) -bool health_component_error # Unused. Intended for use with health events interface (health_component_t in events.json) +uint8 health_component_index # [@enum HEALTH_COMPONENT_INDEX] +bool health_component_is_present # Unused. Intended for use with health events interface (health_component_t in events.json) +bool health_component_warning # Unused. Intended for use with health events interface (health_component_t in events.json) +bool health_component_error # Unused. Intended for use with health events interface (health_component_t in events.json) -bool can_arm_and_run # True if the component can arm. For navigation mode components, true if the component can arm in the mode or switch to the mode when already armed +bool can_arm_and_run # True if the component can arm. For navigation mode components, true if the component can arm in the mode or switch to the mode when already armed -uint8 num_events # Number of queued failure messages (Event) in the events field +uint8 num_events # Number of queued failure messages (Event) in the events field -Event[5] events # Arming failure reasons (Queue of events to report to GCS) +Event[5] events # Arming failure reasons (Queue of events to report to GCS) # Mode requirements -bool mode_req_angular_velocity # Requires angular velocity estimate (e.g. from gyroscope) -bool mode_req_attitude # Requires an attitude estimate -bool mode_req_local_alt # Requires a local altitude estimate -bool mode_req_local_position # Requires a local position estimate -bool mode_req_local_position_relaxed # Requires a more relaxed global position estimate -bool mode_req_global_position # Requires a global position estimate -bool mode_req_global_position_relaxed # Requires a relaxed global position estimate -bool mode_req_mission # Requires an uploaded mission -bool mode_req_home_position # Requires a home position (such as RTL/Return mode) -bool mode_req_prevent_arming # Prevent arming (such as in Land mode) -bool mode_req_manual_control # Requires a manual controller +bool mode_req_angular_velocity # Requires angular velocity estimate (e.g. from gyroscope) +bool mode_req_attitude # Requires an attitude estimate +bool mode_req_local_alt # Requires a local altitude estimate +bool mode_req_local_position # Requires a local position estimate +bool mode_req_local_position_relaxed # Requires a more relaxed global position estimate +bool mode_req_global_position # Requires a global position estimate +bool mode_req_global_position_relaxed # Requires a relaxed global position estimate +bool mode_req_mission # Requires an uploaded mission +bool mode_req_home_position # Requires a home position (such as RTL/Return mode) +bool mode_req_prevent_arming # Prevent arming (such as in Land mode) +bool mode_req_manual_control # Requires a manual controller -uint8 ORB_QUEUE_LENGTH = 4 +uint8 ORB_QUEUE_LENGTH = 4 ``` ::: diff --git a/docs/uk/msg_docs/ArmingCheckReplyV0.md b/docs/uk/msg_docs/ArmingCheckReplyV0.md index 80ddfcd015..9233eac589 100644 --- a/docs/uk/msg_docs/ArmingCheckReplyV0.md +++ b/docs/uk/msg_docs/ArmingCheckReplyV0.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # ArmingCheckReplyV0 (UORB message) -**TOPICS:** arming_checkreplyv0 +**TOPICS:** arming_check_reply_v0 ## Fields @@ -33,11 +33,11 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| -------------------------------------------------------------------------------------------------------------------------------------- | -------- | -------- | ---- | -| MESSAGE_VERSION | `uint32` | 0 | | -| HEALTH_COMPONENT_INDEX_NONE | `uint8` | 0 | | -| ORB_QUEUE_LENGTH | `uint8` | 4 | | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------------------------------------------------------------------------ | -------- | -------- | ---- | +| MESSAGE_VERSION | `uint32` | 0 | | +| HEALTH_COMPONENT_INDEX_NONE | `uint8` | 0 | | +| ORB_QUEUE_LENGTH | `uint8` | 4 | | ## Source Message diff --git a/docs/uk/msg_docs/ArmingCheckRequest.md b/docs/uk/msg_docs/ArmingCheckRequest.md index bf878f600f..bdf54eccd5 100644 --- a/docs/uk/msg_docs/ArmingCheckRequest.md +++ b/docs/uk/msg_docs/ArmingCheckRequest.md @@ -13,7 +13,7 @@ The request is sent regularly, even while armed, so that the FMU always knows th The reply will include the published request_id, allowing correlation of all arming check information for a particular request. The reply will also include the registration_id for each external component, provided to it during the registration process (RegisterExtComponentReply). -**TOPICS:** arming_checkrequest +**TOPICS:** arming_check_request ## Fields @@ -25,9 +25,9 @@ The reply will also include the registration_id for each external component, pro ## Constants -| Назва | Тип | Значення | Опис | -| -------------------------------------------------------------------- | -------- | -------- | ---- | -| MESSAGE_VERSION | `uint32` | 1 | | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------ | -------- | -------- | ---- | +| MESSAGE_VERSION | `uint32` | 1 | | ## Source Message @@ -48,9 +48,9 @@ Click here to see original file uint32 MESSAGE_VERSION = 1 -uint64 timestamp # [us] Time since system start +uint64 timestamp # [us] Time since system start -uint8 request_id # [-] Id of this request. Allows correlation with associated ArmingCheckReply messages. +uint8 request_id # [-] Id of this request. Allows correlation with associated ArmingCheckReply messages. uint32 valid_registrations_mask # [-] Bitmask of valid registration ID's (the bit is also cleared if flagged as unresponsive) ``` diff --git a/docs/uk/msg_docs/ArmingCheckRequestV0.md b/docs/uk/msg_docs/ArmingCheckRequestV0.md index 6e5b4e3aaa..058550cc30 100644 --- a/docs/uk/msg_docs/ArmingCheckRequestV0.md +++ b/docs/uk/msg_docs/ArmingCheckRequestV0.md @@ -13,7 +13,7 @@ The request is sent regularly, even while armed, so that the FMU always knows th The reply will include the published request_id, allowing correlation of all arming check information for a particular request. The reply will also include the registration_id for each external component, provided to it during the registration process (RegisterExtComponentReply). -**TOPICS:** arming_checkrequestv0 +**TOPICS:** arming_check_request_v0 ## Fields @@ -24,9 +24,9 @@ The reply will also include the registration_id for each external component, pro ## Constants -| Назва | Тип | Значення | Опис | -| -------------------------------------------------------------------- | -------- | -------- | ---- | -| MESSAGE_VERSION | `uint32` | 0 | | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------ | -------- | -------- | ---- | +| MESSAGE_VERSION | `uint32` | 0 | | ## Source Message diff --git a/docs/uk/msg_docs/AutotuneAttitudeControlStatus.md b/docs/uk/msg_docs/AutotuneAttitudeControlStatus.md index 0d2bfa03a8..2cec1fca89 100644 --- a/docs/uk/msg_docs/AutotuneAttitudeControlStatus.md +++ b/docs/uk/msg_docs/AutotuneAttitudeControlStatus.md @@ -11,7 +11,7 @@ and is subscribed to by the respective attitude controllers to command rate setp The rate_sp field is consumed by the controllers, while the remaining fields (model coefficients, gains, filters, and autotune state) are used for logging and debugging. -**TOPICS:** autotune_attitudecontrol_status +**TOPICS:** autotune_attitude_control_status ## Fields @@ -37,25 +37,25 @@ The rate_sp field is consumed by the controllers, while the remaining fields (mo ### STATE {#STATE} -| Назва | Тип | Значення | Опис | -| ---------------------------------------------------------------------------------------------------------------------------------------------- | ------- | -------- | ------------------------------------------------------------------------------------------- | -| STATE_IDLE | `uint8` | 0 | Idle (not running) | -| STATE_INIT | `uint8` | 1 | Initialize filters and setup | -| STATE_ROLL_AMPLITUDE_DETECTION | `uint8` | 2 | FW only: determine required excitation amplitude (roll) | -| STATE_ROLL | `uint8` | 3 | Roll-axis excitation and model identification | -| STATE_ROLL_PAUSE | `uint8` | 4 | Pause to return to level flight | -| STATE_PITCH_AMPLITUDE_DETECTION | `uint8` | 5 | FW only: determine required excitation amplitude (pitch) | -| STATE_PITCH | `uint8` | 6 | Pitch-axis excitation and model identification | -| STATE_PITCH_PAUSE | `uint8` | 7 | Pause to return to level flight | -| STATE_YAW_AMPLITUDE_DETECTION | `uint8` | 8 | FW only: determine required excitation amplitude (yaw) | -| STATE_YAW | `uint8` | 9 | Yaw-axis excitation and model identification | -| STATE_YAW_PAUSE | `uint8` | 10 | Pause to return to level flight | -| STATE_VERIFICATION | `uint8` | 11 | Verify model and candidate gains | -| STATE_APPLY | `uint8` | 12 | Apply gains | -| STATE_TEST | `uint8` | 13 | Test gains in closed-loop | -| STATE_COMPLETE | `uint8` | 14 | Tuning completed successfully | -| STATE_FAIL | `uint8` | 15 | Tuning failed (model invalid or controller unstable) | -| STATE_WAIT_FOR_DISARM | `uint8` | 16 | Waiting for disarm before finalizing | +| Назва | Тип | Значення | Опис | +| -------------------------------------------------------------------------------------------------------------------------------------------- | ------- | -------- | ------------------------------------------------------------------------------------------- | +| STATE_IDLE | `uint8` | 0 | Idle (not running) | +| STATE_INIT | `uint8` | 1 | Initialize filters and setup | +| STATE_ROLL_AMPLITUDE_DETECTION | `uint8` | 2 | FW only: determine required excitation amplitude (roll) | +| STATE_ROLL | `uint8` | 3 | Roll-axis excitation and model identification | +| STATE_ROLL_PAUSE | `uint8` | 4 | Pause to return to level flight | +| STATE_PITCH_AMPLITUDE_DETECTION | `uint8` | 5 | FW only: determine required excitation amplitude (pitch) | +| STATE_PITCH | `uint8` | 6 | Pitch-axis excitation and model identification | +| STATE_PITCH_PAUSE | `uint8` | 7 | Pause to return to level flight | +| STATE_YAW_AMPLITUDE_DETECTION | `uint8` | 8 | FW only: determine required excitation amplitude (yaw) | +| STATE_YAW | `uint8` | 9 | Yaw-axis excitation and model identification | +| STATE_YAW_PAUSE | `uint8` | 10 | Pause to return to level flight | +| STATE_VERIFICATION | `uint8` | 11 | Verify model and candidate gains | +| STATE_APPLY | `uint8` | 12 | Apply gains | +| STATE_TEST | `uint8` | 13 | Test gains in closed-loop | +| STATE_COMPLETE | `uint8` | 14 | Tuning completed successfully | +| STATE_FAIL | `uint8` | 15 | Tuning failed (model invalid or controller unstable) | +| STATE_WAIT_FOR_DISARM | `uint8` | 16 | Waiting for disarm before finalizing | ## Source Message diff --git a/docs/uk/msg_docs/AuxGlobalPosition.md b/docs/uk/msg_docs/AuxGlobalPosition.md new file mode 100644 index 0000000000..cc7e5c8a4d --- /dev/null +++ b/docs/uk/msg_docs/AuxGlobalPosition.md @@ -0,0 +1,90 @@ +--- +pageClass: is-wide-page +--- + +# AuxGlobalPosition (UORB message) + +Auxiliary global position. + +This message provides global position data from an external source such as +pseudolites, visual navigation, or other positioning system. + +**TOPICS:** aux_global_position + +## Fields + +| Назва | Тип | Unit [Frame] | Range/Enum | Опис | +| ------------------------------------------------------------------------------------ | --------- | ---------------------------------------------------------------- | ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| timestamp | `uint64` | us | | Time since system start | +| timestamp_sample | `uint64` | us | | Timestamp of the raw data | +| id | `uint8` | | | Unique identifier for the AGP source | +| source | `uint8` | | [SOURCE](#SOURCE) | Source type of the position data (based on mavlink::GLOBAL_POSITION_SRC) | +| lat | `float64` | deg | | Latitude in WGS84 | +| lon | `float64` | deg | | Longitude in WGS84 | +| alt | `float32` | m | | Altitude above mean sea level (AMSL) (Invalid: NaN) | +| eph | `float32` | m | | Std dev of horizontal position, lower bounded by NOISE param (Invalid: NaN) | +| epv | `float32` | m | | Std dev of vertical position, lower bounded by NOISE param (Invalid: NaN) | +| lat_lon_reset_counter | `uint8` | | | Counter for reset events on horizontal position coordinates | + +## Enums + +### SOURCE {#SOURCE} + +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------------ | ------- | -------- | -------------- | +| SOURCE_UNKNOWN | `uint8` | 0 | Unknown source | +| SOURCE_GNSS | `uint8` | 1 | GNSS | +| SOURCE_VISION | `uint8` | 2 | Vision | +| SOURCE_PSEUDOLITES | `uint8` | 3 | Pseudolites | +| SOURCE_TERRAIN | `uint8` | 4 | Terrain | +| SOURCE_MAGNETIC | `uint8` | 5 | Magnetic | +| SOURCE_ESTIMATOR | `uint8` | 6 | Оцінювач | + +## Constants + +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------ | -------- | -------- | ---- | +| MESSAGE_VERSION | `uint32` | 1 | | + +## Source Message + +[Source file (GitHub)](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/AuxGlobalPosition.msg) + +:::details +Click here to see original file + +```c +# Auxiliary global position +# +# This message provides global position data from an external source such as +# pseudolites, visual navigation, or other positioning system. + +uint32 MESSAGE_VERSION = 1 + +uint64 timestamp # [us] Time since system start +uint64 timestamp_sample # [us] Timestamp of the raw data + +uint8 id # [-] Unique identifier for the AGP source +uint8 source # [@enum SOURCE] Source type of the position data (based on mavlink::GLOBAL_POSITION_SRC) +uint8 SOURCE_UNKNOWN = 0 # Unknown source +uint8 SOURCE_GNSS = 1 # GNSS +uint8 SOURCE_VISION = 2 # Vision +uint8 SOURCE_PSEUDOLITES = 3 # Pseudolites +uint8 SOURCE_TERRAIN = 4 # Terrain +uint8 SOURCE_MAGNETIC = 5 # Magnetic +uint8 SOURCE_ESTIMATOR = 6 # Estimator + +# lat, lon: required for horizontal position fusion, alt: required for vertical position fusion +float64 lat # [deg] Latitude in WGS84 +float64 lon # [deg] Longitude in WGS84 +float32 alt # [m] [@invalid NaN] Altitude above mean sea level (AMSL) + +float32 eph # [m] [@invalid NaN] Std dev of horizontal position, lower bounded by NOISE param +float32 epv # [m] [@invalid NaN] Std dev of vertical position, lower bounded by NOISE param + +uint8 lat_lon_reset_counter # [-] Counter for reset events on horizontal position coordinates + +# TOPICS aux_global_position +``` + +::: diff --git a/docs/uk/msg_docs/BatteryStatus.md b/docs/uk/msg_docs/BatteryStatus.md index 348bccb768..8c6462553c 100644 --- a/docs/uk/msg_docs/BatteryStatus.md +++ b/docs/uk/msg_docs/BatteryStatus.md @@ -25,7 +25,7 @@ Battery instance information is also logged and streamed in MAVLink telemetry. | remaining | `float32` | | [0 : 1] | Remaining capacity (Invalid: -1) | | scale | `float32` | | [1 : -] | Scaling factor to compensate for lower actuation power caused by voltage sag (Invalid: -1) | | time_remaining_s | `float32` | s | | Predicted time remaining until battery is empty under previous averaged load (Invalid: NaN) | -| temperature | `float32` | °C | | Temperature of the battery (Invalid: NaN) | +| temperature | `float32` | degC | | Temperature of the battery (Invalid: NaN) | | cell_count | `uint8` | | | Number of cells (Invalid: 0) | | source | `uint8` | | [SOURCE](#SOURCE) | Battery source | | priority | `uint8` | | | Zero based priority is the connection on the Power Controller V1..Vn AKA BrickN-1 | @@ -59,52 +59,52 @@ Battery instance information is also logged and streamed in MAVLink telemetry. ### SOURCE {#SOURCE} -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------------------------------- | ------- | -------- | ----------------------------------------------------------------- | -| SOURCE_POWER_MODULE | `uint8` | 0 | Power module (analog ADC or I2C power monitor) | -| SOURCE_EXTERNAL | `uint8` | 1 | External (MAVLink, CAN, or external driver) | -| SOURCE_ESCS | `uint8` | 2 | ESCs (via ESC telemetry) | +| Назва | Тип | Значення | Опис | +| ----------------------------------------------------------------------------------------------- | ------- | -------- | ----------------------------------------------------------------- | +| SOURCE_POWER_MODULE | `uint8` | 0 | Power module (analog ADC or I2C power monitor) | +| SOURCE_EXTERNAL | `uint8` | 1 | External (MAVLink, CAN, or external driver) | +| SOURCE_ESCS | `uint8` | 2 | ESCs (via ESC telemetry) | ### WARNING {#WARNING} -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------ | ------- | -------- | -------------------------------------------- | -| WARNING_NONE | `uint8` | 0 | No battery low voltage warning active | -| WARNING_LOW | `uint8` | 1 | Low voltage warning | -| WARNING_CRITICAL | `uint8` | 2 | Critical voltage, return / abort immediately | -| WARNING_EMERGENCY | `uint8` | 3 | Immediate landing required | -| WARNING_FAILED | `uint8` | 4 | Battery has failed completely | +| Назва | Тип | Значення | Опис | +| ---------------------------------------------------------------------- | ------- | -------- | -------------------------------------------- | +| WARNING_NONE | `uint8` | 0 | No battery low voltage warning active | +| WARNING_LOW | `uint8` | 1 | Low voltage warning | +| WARNING_CRITICAL | `uint8` | 2 | Critical voltage, return / abort immediately | +| WARNING_EMERGENCY | `uint8` | 3 | Immediate landing required | +| WARNING_FAILED | `uint8` | 4 | Battery has failed completely | ### STATE {#STATE} -| Назва | Тип | Значення | Опис | -| -------------------------------------------------------------------- | ------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| STATE_UNHEALTHY | `uint8` | 6 | Battery is diagnosed to be defective or an error occurred, usage is discouraged / prohibited. Possible causes (faults) are listed in faults field | -| STATE_CHARGING | `uint8` | 7 | Battery is charging | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------ | ------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| STATE_UNHEALTHY | `uint8` | 6 | Battery is diagnosed to be defective or an error occurred, usage is discouraged / prohibited. Possible causes (faults) are listed in faults field | +| STATE_CHARGING | `uint8` | 7 | Battery is charging | ### FAULT {#FAULT} -| Назва | Тип | Значення | Опис | -| ---------------------------------------------------------------------------------------------------------------------- | ------- | -------- | --------------------------------------------------------------------------------------------------------------------------------- | -| FAULT_DEEP_DISCHARGE | `uint8` | 0 | Battery has deep discharged | -| FAULT_SPIKES | `uint8` | 1 | Voltage spikes | -| FAULT_CELL_FAIL | `uint8` | 2 | One or more cells have failed | -| FAULT_OVER_CURRENT | `uint8` | 3 | Over-current | -| FAULT_OVER_TEMPERATURE | `uint8` | 4 | Over-temperature | -| FAULT_UNDER_TEMPERATURE | `uint8` | 5 | Under-temperature fault | -| FAULT_INCOMPATIBLE_VOLTAGE | `uint8` | 6 | Vehicle voltage is not compatible with this battery (batteries on same power rail should have similar voltage) | -| FAULT_INCOMPATIBLE_FIRMWARE | `uint8` | 7 | Battery firmware is not compatible with current autopilot firmware | -| FAULT_INCOMPATIBLE_MODEL | `uint8` | 8 | Battery model is not supported by the system | -| FAULT_HARDWARE_FAILURE | `uint8` | 9 | Hardware problem | -| FAULT_FAILED_TO_ARM | `uint8` | 10 | Battery had a problem while arming | -| FAULT_COUNT | `uint8` | 11 | Counter. Keep this as last element | +| Назва | Тип | Значення | Опис | +| -------------------------------------------------------------------------------------------------------------------- | ------- | -------- | --------------------------------------------------------------------------------------------------------------------------------- | +| FAULT_DEEP_DISCHARGE | `uint8` | 0 | Battery has deep discharged | +| FAULT_SPIKES | `uint8` | 1 | Voltage spikes | +| FAULT_CELL_FAIL | `uint8` | 2 | One or more cells have failed | +| FAULT_OVER_CURRENT | `uint8` | 3 | Over-current | +| FAULT_OVER_TEMPERATURE | `uint8` | 4 | Over-temperature | +| FAULT_UNDER_TEMPERATURE | `uint8` | 5 | Under-temperature fault | +| FAULT_INCOMPATIBLE_VOLTAGE | `uint8` | 6 | Vehicle voltage is not compatible with this battery (batteries on same power rail should have similar voltage) | +| FAULT_INCOMPATIBLE_FIRMWARE | `uint8` | 7 | Battery firmware is not compatible with current autopilot firmware | +| FAULT_INCOMPATIBLE_MODEL | `uint8` | 8 | Battery model is not supported by the system | +| FAULT_HARDWARE_FAILURE | `uint8` | 9 | Hardware problem | +| FAULT_FAILED_TO_ARM | `uint8` | 10 | Battery had a problem while arming | +| FAULT_COUNT | `uint8` | 11 | Counter. Keep this as last element | ## Constants -| Назва | Тип | Значення | Опис | -| -------------------------------------------------------------------- | -------- | -------- | ---- | -| MESSAGE_VERSION | `uint32` | 1 | | -| MAX_INSTANCES | `uint8` | 3 | | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------ | -------- | -------- | ---- | +| MESSAGE_VERSION | `uint32` | 1 | | +| MAX_INSTANCES | `uint8` | 3 | | ## Source Message @@ -123,76 +123,75 @@ Click here to see original file uint32 MESSAGE_VERSION = 1 uint8 MAX_INSTANCES = 3 -uint64 timestamp # [us] Time since system start +uint64 timestamp # [us] Time since system start -bool connected # Whether or not a battery is connected. For power modules this is based on a voltage threshold. -float32 voltage_v # [V] [@invalid 0] Battery voltage -float32 current_a # [A] [@invalid -1] Battery current -float32 current_average_a # [A] [@invalid -1] Battery current average (for FW average in level flight) -float32 discharged_mah # [mAh] [@invalid -1] Discharged amount -float32 remaining # [@range 0,1] [@invalid -1] Remaining capacity -float32 scale # [-] [@range 1,] [@invalid -1] Scaling factor to compensate for lower actuation power caused by voltage sag -float32 time_remaining_s # [s] [@invalid NaN] Predicted time remaining until battery is empty under previous averaged load -float32 temperature # [°C] [@invalid NaN] Temperature of the battery -uint8 cell_count # [-] [@invalid 0] Number of cells +bool connected # Whether or not a battery is connected. For power modules this is based on a voltage threshold. +float32 voltage_v # [V] [@invalid 0] Battery voltage +float32 current_a # [A] [@invalid -1] Battery current +float32 current_average_a # [A] [@invalid -1] Battery current average (for FW average in level flight) +float32 discharged_mah # [mAh] [@invalid -1] Discharged amount +float32 remaining # [@range 0,1] [@invalid -1] Remaining capacity +float32 scale # [-] [@range 1,] [@invalid -1] Scaling factor to compensate for lower actuation power caused by voltage sag +float32 time_remaining_s # [s] [@invalid NaN] Predicted time remaining until battery is empty under previous averaged load +float32 temperature # [degC] [@invalid NaN] Temperature of the battery +uint8 cell_count # [-] [@invalid 0] Number of cells +uint8 source # [@enum SOURCE] Battery source +uint8 SOURCE_POWER_MODULE = 0 # Power module (analog ADC or I2C power monitor) +uint8 SOURCE_EXTERNAL = 1 # External (MAVLink, CAN, or external driver) +uint8 SOURCE_ESCS = 2 # ESCs (via ESC telemetry) -uint8 source # [@enum SOURCE] Battery source -uint8 SOURCE_POWER_MODULE = 0 # Power module (analog ADC or I2C power monitor) -uint8 SOURCE_EXTERNAL = 1 # External (MAVLink, CAN, or external driver) -uint8 SOURCE_ESCS = 2 # ESCs (via ESC telemetry) +uint8 priority # [-] Zero based priority is the connection on the Power Controller V1..Vn AKA BrickN-1 +uint16 capacity # [mAh] Capacity of the battery when fully charged +uint16 cycle_count # [-] Number of discharge cycles the battery has experienced +uint16 average_time_to_empty # [minutes] Predicted remaining battery capacity based on the average rate of discharge +uint16 manufacture_date # [-] Manufacture date, part of serial number of the battery pack. Formatted as: Day + Month×32 + (Year–1980)×512 +uint16 state_of_health # [%] [@range 0, 100] State of health. FullChargeCapacity/DesignCapacity +uint16 max_error # [%] [@range 1, 100] Max error, expected margin of error in the state-of-charge calculation +uint8 id # [-] ID number of a battery. Should be unique and consistent for the lifetime of a vehicle. 1-indexed +uint16 interface_error # [-] Interface error counter -uint8 priority # [-] Zero based priority is the connection on the Power Controller V1..Vn AKA BrickN-1 -uint16 capacity # [mAh] Capacity of the battery when fully charged -uint16 cycle_count # [-] Number of discharge cycles the battery has experienced -uint16 average_time_to_empty # [minutes] Predicted remaining battery capacity based on the average rate of discharge -uint16 manufacture_date # [-] Manufacture date, part of serial number of the battery pack. Formatted as: Day + Month×32 + (Year–1980)×512 -uint16 state_of_health # [%] [@range 0, 100] State of health. FullChargeCapacity/DesignCapacity -uint16 max_error # [%] [@range 1, 100] Max error, expected margin of error in the state-of-charge calculation -uint8 id # [-] ID number of a battery. Should be unique and consistent for the lifetime of a vehicle. 1-indexed -uint16 interface_error # [-] Interface error counter +float32[14] voltage_cell_v # [V] [@invalid 0] Battery individual cell voltages +float32 max_cell_voltage_delta # [V] Max difference between individual cell voltages -float32[14] voltage_cell_v # [V] [@invalid 0] Battery individual cell voltages -float32 max_cell_voltage_delta # [V] Max difference between individual cell voltages +bool is_powering_off # Power off event imminent indication, false if unknown +bool is_required # Set if the battery is explicitly required before arming -bool is_powering_off # Power off event imminent indication, false if unknown -bool is_required # Set if the battery is explicitly required before arming +uint8 warning # [@enum WARNING STATE] Current battery warning +uint8 WARNING_NONE = 0 # No battery low voltage warning active +uint8 WARNING_LOW = 1 # Low voltage warning +uint8 WARNING_CRITICAL = 2 # Critical voltage, return / abort immediately +uint8 WARNING_EMERGENCY = 3 # Immediate landing required +uint8 WARNING_FAILED = 4 # Battery has failed completely +uint8 STATE_UNHEALTHY = 6 # Battery is diagnosed to be defective or an error occurred, usage is discouraged / prohibited. Possible causes (faults) are listed in faults field +uint8 STATE_CHARGING = 7 # Battery is charging -uint8 warning # [@enum WARNING STATE] Current battery warning -uint8 WARNING_NONE = 0 # No battery low voltage warning active -uint8 WARNING_LOW = 1 # Low voltage warning -uint8 WARNING_CRITICAL = 2 # Critical voltage, return / abort immediately -uint8 WARNING_EMERGENCY = 3 # Immediate landing required -uint8 WARNING_FAILED = 4 # Battery has failed completely -uint8 STATE_UNHEALTHY = 6 # Battery is diagnosed to be defective or an error occurred, usage is discouraged / prohibited. Possible causes (faults) are listed in faults field -uint8 STATE_CHARGING = 7 # Battery is charging +uint16 faults # [@enum FAULT] Smart battery supply status/fault flags (bitmask) for health indication +uint8 FAULT_DEEP_DISCHARGE = 0 # Battery has deep discharged +uint8 FAULT_SPIKES = 1 # Voltage spikes +uint8 FAULT_CELL_FAIL= 2 # One or more cells have failed +uint8 FAULT_OVER_CURRENT = 3 # Over-current +uint8 FAULT_OVER_TEMPERATURE = 4 # Over-temperature +uint8 FAULT_UNDER_TEMPERATURE = 5 # Under-temperature fault +uint8 FAULT_INCOMPATIBLE_VOLTAGE = 6 # Vehicle voltage is not compatible with this battery (batteries on same power rail should have similar voltage) +uint8 FAULT_INCOMPATIBLE_FIRMWARE = 7 # Battery firmware is not compatible with current autopilot firmware +uint8 FAULT_INCOMPATIBLE_MODEL = 8 # Battery model is not supported by the system +uint8 FAULT_HARDWARE_FAILURE = 9 # Hardware problem +uint8 FAULT_FAILED_TO_ARM = 10 # Battery had a problem while arming +uint8 FAULT_COUNT = 11 # Counter. Keep this as last element -uint16 faults # [@enum FAULT] Smart battery supply status/fault flags (bitmask) for health indication -uint8 FAULT_DEEP_DISCHARGE = 0 # Battery has deep discharged -uint8 FAULT_SPIKES = 1 # Voltage spikes -uint8 FAULT_CELL_FAIL= 2 # One or more cells have failed -uint8 FAULT_OVER_CURRENT = 3 # Over-current -uint8 FAULT_OVER_TEMPERATURE = 4 # Over-temperature -uint8 FAULT_UNDER_TEMPERATURE = 5 # Under-temperature fault -uint8 FAULT_INCOMPATIBLE_VOLTAGE = 6 # Vehicle voltage is not compatible with this battery (batteries on same power rail should have similar voltage) -uint8 FAULT_INCOMPATIBLE_FIRMWARE = 7 # Battery firmware is not compatible with current autopilot firmware -uint8 FAULT_INCOMPATIBLE_MODEL = 8 # Battery model is not supported by the system -uint8 FAULT_HARDWARE_FAILURE = 9 # Hardware problem -uint8 FAULT_FAILED_TO_ARM = 10 # Battery had a problem while arming -uint8 FAULT_COUNT = 11 # Counter. Keep this as last element +float32 full_charge_capacity_wh # [Wh] Compensated battery capacity +float32 remaining_capacity_wh # [Wh] Compensated battery capacity remaining +uint16 over_discharge_count # [-] Number of battery overdischarge +float32 nominal_voltage # [V] Nominal voltage of the battery pack -float32 full_charge_capacity_wh # [Wh] Compensated battery capacity -float32 remaining_capacity_wh # [Wh] Compensated battery capacity remaining -uint16 over_discharge_count # [-] Number of battery overdischarge -float32 nominal_voltage # [V] Nominal voltage of the battery pack - -float32 internal_resistance_estimate # [Ohm] Internal resistance per cell estimate -float32 ocv_estimate # [V] Open circuit voltage estimate -float32 ocv_estimate_filtered # [V] Filtered open circuit voltage estimate -float32 volt_based_soc_estimate # [-] [@range 0, 1] Normalized volt based state of charge estimate -float32 voltage_prediction # [V] Predicted voltage -float32 prediction_error # [V] Prediction error -float32 estimation_covariance_norm # [-] Norm of the covariance matrix +float32 internal_resistance_estimate # [Ohm] Internal resistance per cell estimate +float32 ocv_estimate # [V] Open circuit voltage estimate +float32 ocv_estimate_filtered # [V] Filtered open circuit voltage estimate +float32 volt_based_soc_estimate # [-] [@range 0, 1] Normalized volt based state of charge estimate +float32 voltage_prediction # [V] Predicted voltage +float32 prediction_error # [V] Prediction error +float32 estimation_covariance_norm # [-] Norm of the covariance matrix ``` ::: diff --git a/docs/uk/msg_docs/BatteryStatusV0.md b/docs/uk/msg_docs/BatteryStatusV0.md index 699eedd680..2abd411342 100644 --- a/docs/uk/msg_docs/BatteryStatusV0.md +++ b/docs/uk/msg_docs/BatteryStatusV0.md @@ -10,7 +10,7 @@ Battery status information for up to 4 battery instances. These are populated from power module and smart battery device drivers, and one battery updated from MAVLink. Battery instance information is also logged and streamed in MAVLink telemetry. -**TOPICS:** battery_statusv0 +**TOPICS:** battery_status_v0 ## Fields @@ -60,52 +60,52 @@ Battery instance information is also logged and streamed in MAVLink telemetry. ### SOURCE {#SOURCE} -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------------------------------- | ------- | -------- | ----------------------------------------------------------------- | -| SOURCE_POWER_MODULE | `uint8` | 0 | Power module (analog ADC or I2C power monitor) | -| SOURCE_EXTERNAL | `uint8` | 1 | External (MAVLink, CAN, or external driver) | -| SOURCE_ESCS | `uint8` | 2 | ESCs (via ESC telemetry) | +| Назва | Тип | Значення | Опис | +| ----------------------------------------------------------------------------------------------- | ------- | -------- | ----------------------------------------------------------------- | +| SOURCE_POWER_MODULE | `uint8` | 0 | Power module (analog ADC or I2C power monitor) | +| SOURCE_EXTERNAL | `uint8` | 1 | External (MAVLink, CAN, or external driver) | +| SOURCE_ESCS | `uint8` | 2 | ESCs (via ESC telemetry) | ### WARNING {#WARNING} -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------ | ------- | -------- | -------------------------------------------- | -| WARNING_NONE | `uint8` | 0 | No battery low voltage warning active | -| WARNING_LOW | `uint8` | 1 | Low voltage warning | -| WARNING_CRITICAL | `uint8` | 2 | Critical voltage, return / abort immediately | -| WARNING_EMERGENCY | `uint8` | 3 | Immediate landing required | -| WARNING_FAILED | `uint8` | 4 | Battery has failed completely | +| Назва | Тип | Значення | Опис | +| ---------------------------------------------------------------------- | ------- | -------- | -------------------------------------------- | +| WARNING_NONE | `uint8` | 0 | No battery low voltage warning active | +| WARNING_LOW | `uint8` | 1 | Low voltage warning | +| WARNING_CRITICAL | `uint8` | 2 | Critical voltage, return / abort immediately | +| WARNING_EMERGENCY | `uint8` | 3 | Immediate landing required | +| WARNING_FAILED | `uint8` | 4 | Battery has failed completely | ### STATE {#STATE} -| Назва | Тип | Значення | Опис | -| -------------------------------------------------------------------- | ------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| STATE_UNHEALTHY | `uint8` | 6 | Battery is diagnosed to be defective or an error occurred, usage is discouraged / prohibited. Possible causes (faults) are listed in faults field | -| STATE_CHARGING | `uint8` | 7 | Battery is charging | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------ | ------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| STATE_UNHEALTHY | `uint8` | 6 | Battery is diagnosed to be defective or an error occurred, usage is discouraged / prohibited. Possible causes (faults) are listed in faults field | +| STATE_CHARGING | `uint8` | 7 | Battery is charging | ### FAULT {#FAULT} -| Назва | Тип | Значення | Опис | -| ---------------------------------------------------------------------------------------------------------------------- | ------- | -------- | --------------------------------------------------------------------------------------------------------------------------------- | -| FAULT_DEEP_DISCHARGE | `uint8` | 0 | Battery has deep discharged | -| FAULT_SPIKES | `uint8` | 1 | Voltage spikes | -| FAULT_CELL_FAIL | `uint8` | 2 | One or more cells have failed | -| FAULT_OVER_CURRENT | `uint8` | 3 | Over-current | -| FAULT_OVER_TEMPERATURE | `uint8` | 4 | Over-temperature | -| FAULT_UNDER_TEMPERATURE | `uint8` | 5 | Under-temperature fault | -| FAULT_INCOMPATIBLE_VOLTAGE | `uint8` | 6 | Vehicle voltage is not compatible with this battery (batteries on same power rail should have similar voltage) | -| FAULT_INCOMPATIBLE_FIRMWARE | `uint8` | 7 | Battery firmware is not compatible with current autopilot firmware | -| FAULT_INCOMPATIBLE_MODEL | `uint8` | 8 | Battery model is not supported by the system | -| FAULT_HARDWARE_FAILURE | `uint8` | 9 | Hardware problem | -| FAULT_FAILED_TO_ARM | `uint8` | 10 | Battery had a problem while arming | -| FAULT_COUNT | `uint8` | 11 | Counter. Keep this as last element | +| Назва | Тип | Значення | Опис | +| -------------------------------------------------------------------------------------------------------------------- | ------- | -------- | --------------------------------------------------------------------------------------------------------------------------------- | +| FAULT_DEEP_DISCHARGE | `uint8` | 0 | Battery has deep discharged | +| FAULT_SPIKES | `uint8` | 1 | Voltage spikes | +| FAULT_CELL_FAIL | `uint8` | 2 | One or more cells have failed | +| FAULT_OVER_CURRENT | `uint8` | 3 | Over-current | +| FAULT_OVER_TEMPERATURE | `uint8` | 4 | Over-temperature | +| FAULT_UNDER_TEMPERATURE | `uint8` | 5 | Under-temperature fault | +| FAULT_INCOMPATIBLE_VOLTAGE | `uint8` | 6 | Vehicle voltage is not compatible with this battery (batteries on same power rail should have similar voltage) | +| FAULT_INCOMPATIBLE_FIRMWARE | `uint8` | 7 | Battery firmware is not compatible with current autopilot firmware | +| FAULT_INCOMPATIBLE_MODEL | `uint8` | 8 | Battery model is not supported by the system | +| FAULT_HARDWARE_FAILURE | `uint8` | 9 | Hardware problem | +| FAULT_FAILED_TO_ARM | `uint8` | 10 | Battery had a problem while arming | +| FAULT_COUNT | `uint8` | 11 | Counter. Keep this as last element | ## Constants -| Назва | Тип | Значення | Опис | -| -------------------------------------------------------------------- | -------- | -------- | ---- | -| MESSAGE_VERSION | `uint32` | 0 | | -| MAX_INSTANCES | `uint8` | 4 | | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------ | -------- | -------- | ---- | +| MESSAGE_VERSION | `uint32` | 0 | | +| MAX_INSTANCES | `uint8` | 4 | | ## Source Message diff --git a/docs/uk/msg_docs/ButtonEvent.md b/docs/uk/msg_docs/ButtonEvent.md index 782bf6b33a..cb8f817e0d 100644 --- a/docs/uk/msg_docs/ButtonEvent.md +++ b/docs/uk/msg_docs/ButtonEvent.md @@ -15,9 +15,9 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------------------------- | ------- | -------- | ---- | -| ORB_QUEUE_LENGTH | `uint8` | 2 | | +| Назва | Тип | Значення | Опис | +| ----------------------------------------------------------------------------------------- | ------- | -------- | ---- | +| ORB_QUEUE_LENGTH | `uint8` | 2 | | ## Source Message diff --git a/docs/uk/msg_docs/CameraTrigger.md b/docs/uk/msg_docs/CameraTrigger.md index 19d9bd4342..d12ab9bc1b 100644 --- a/docs/uk/msg_docs/CameraTrigger.md +++ b/docs/uk/msg_docs/CameraTrigger.md @@ -17,9 +17,9 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------------------------- | -------- | -------- | ---- | -| ORB_QUEUE_LENGTH | `uint32` | 2 | | +| Назва | Тип | Значення | Опис | +| ----------------------------------------------------------------------------------------- | -------- | -------- | ---- | +| ORB_QUEUE_LENGTH | `uint32` | 2 | | ## Source Message diff --git a/docs/uk/msg_docs/CanInterfaceStatus.md b/docs/uk/msg_docs/CanInterfaceStatus.md index 907269e25b..f9deefbe31 100644 --- a/docs/uk/msg_docs/CanInterfaceStatus.md +++ b/docs/uk/msg_docs/CanInterfaceStatus.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # CanInterfaceStatus (повідомлення UORB) -**TOPICS:** can_interfacestatus +**TOPICS:** can_interface_status ## Fields diff --git a/docs/uk/msg_docs/CellularStatus.md b/docs/uk/msg_docs/CellularStatus.md index ecaac52960..a4abb6239b 100644 --- a/docs/uk/msg_docs/CellularStatus.md +++ b/docs/uk/msg_docs/CellularStatus.md @@ -27,40 +27,40 @@ This is currently used only for logging cell status from MAVLink. ### STATUS_FLAG {#STATUS_FLAG} -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------------------------------------------- | -------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| STATUS_FLAG_UNKNOWN | `uint16` | 1 | State unknown or not reportable | -| STATUS_FLAG_FAILED | `uint16` | 2 | Modem is unusable | -| STATUS_FLAG_INITIALIZING | `uint16` | 4 | Modem is being initialized | -| STATUS_FLAG_LOCKED | `uint16` | 8 | Modem is locked | -| STATUS_FLAG_DISABLED | `uint16` | 16 | Modem is not enabled and is powered down | -| STATUS_FLAG_DISABLING | `uint16` | 32 | Modem is currently transitioning to the STATUS_FLAG_DISABLED state | -| STATUS_FLAG_ENABLING | `uint16` | 64 | Modem is currently transitioning to the STATUS_FLAG_ENABLED state | -| STATUS_FLAG_ENABLED | `uint16` | 128 | Modem is enabled and powered on but not registered with a network provider and not available for data connections | -| STATUS_FLAG_SEARCHING | `uint16` | 256 | Modem is searching for a network provider to register | -| STATUS_FLAG_REGISTERED | `uint16` | 512 | Modem is registered with a network provider, and data connections and messaging may be available for use | -| STATUS_FLAG_DISCONNECTING | `uint16` | 1024 | Modem is disconnecting and deactivating the last active packet data bearer. This state will not be entered if more than one packet data bearer is active and one of the active bearers is deactivated | -| STATUS_FLAG_CONNECTING | `uint16` | 2048 | Modem is activating and connecting the first packet data bearer. Subsequent bearer activations when another bearer is already active do not cause this state to be entered | -| STATUS_FLAG_CONNECTED | `uint16` | 4096 | One or more packet data bearers is active and connected | +| Назва | Тип | Значення | Опис | +| ----------------------------------------------------------------------------------------------------------- | -------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| STATUS_FLAG_UNKNOWN | `uint16` | 1 | State unknown or not reportable | +| STATUS_FLAG_FAILED | `uint16` | 2 | Modem is unusable | +| STATUS_FLAG_INITIALIZING | `uint16` | 4 | Modem is being initialized | +| STATUS_FLAG_LOCKED | `uint16` | 8 | Modem is locked | +| STATUS_FLAG_DISABLED | `uint16` | 16 | Modem is not enabled and is powered down | +| STATUS_FLAG_DISABLING | `uint16` | 32 | Modem is currently transitioning to the STATUS_FLAG_DISABLED state | +| STATUS_FLAG_ENABLING | `uint16` | 64 | Modem is currently transitioning to the STATUS_FLAG_ENABLED state | +| STATUS_FLAG_ENABLED | `uint16` | 128 | Modem is enabled and powered on but not registered with a network provider and not available for data connections | +| STATUS_FLAG_SEARCHING | `uint16` | 256 | Modem is searching for a network provider to register | +| STATUS_FLAG_REGISTERED | `uint16` | 512 | Modem is registered with a network provider, and data connections and messaging may be available for use | +| STATUS_FLAG_DISCONNECTING | `uint16` | 1024 | Modem is disconnecting and deactivating the last active packet data bearer. This state will not be entered if more than one packet data bearer is active and one of the active bearers is deactivated | +| STATUS_FLAG_CONNECTING | `uint16` | 2048 | Modem is activating and connecting the first packet data bearer. Subsequent bearer activations when another bearer is already active do not cause this state to be entered | +| STATUS_FLAG_CONNECTED | `uint16` | 4096 | One or more packet data bearers is active and connected | ### FAILURE_REASON {#FAILURE_REASON} -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------------------------------------------------------------------ | ------- | -------- | ----------------------------------------------- | -| FAILURE_REASON_NONE | `uint8` | 0 | No error | -| FAILURE_REASON_UNKNOWN | `uint8` | 1 | Error state is unknown | -| FAILURE_REASON_SIM_MISSING | `uint8` | 2 | SIM is required for the modem but missing | -| FAILURE_REASON_SIM_ERROR | `uint8` | 3 | SIM is available, but not usable for connection | +| Назва | Тип | Значення | Опис | +| ---------------------------------------------------------------------------------------------------------------------------------- | ------- | -------- | ----------------------------------------------- | +| FAILURE_REASON_NONE | `uint8` | 0 | No error | +| FAILURE_REASON_UNKNOWN | `uint8` | 1 | Error state is unknown | +| FAILURE_REASON_SIM_MISSING | `uint8` | 2 | SIM is required for the modem but missing | +| FAILURE_REASON_SIM_ERROR | `uint8` | 3 | SIM is available, but not usable for connection | ### CELLULAR_NETWORK_RADIO_TYPE {#CELLULAR_NETWORK_RADIO_TYPE} -| Назва | Тип | Значення | Опис | -| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | -------- | ----- | -| CELLULAR_NETWORK_RADIO_TYPE_NONE | `uint8` | 0 | None | -| CELLULAR_NETWORK_RADIO_TYPE_GSM | `uint8` | 1 | GSM | -| CELLULAR_NETWORK_RADIO_TYPE_CDMA | `uint8` | 2 | CDMA | -| CELLULAR_NETWORK_RADIO_TYPE_WCDMA | `uint8` | 3 | WCDMA | -| CELLULAR_NETWORK_RADIO_TYPE_LTE | `uint8` | 4 | LTE | +| Назва | Тип | Значення | Опис | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | -------- | ----- | +| CELLULAR_NETWORK_RADIO_TYPE_NONE | `uint8` | 0 | None | +| CELLULAR_NETWORK_RADIO_TYPE_GSM | `uint8` | 1 | GSM | +| CELLULAR_NETWORK_RADIO_TYPE_CDMA | `uint8` | 2 | CDMA | +| CELLULAR_NETWORK_RADIO_TYPE_WCDMA | `uint8` | 3 | WCDMA | +| CELLULAR_NETWORK_RADIO_TYPE_LTE | `uint8` | 4 | LTE | ## Source Message diff --git a/docs/uk/msg_docs/ConfigOverrides.md b/docs/uk/msg_docs/ConfigOverrides.md index 6af879b8d1..5a13d8e61d 100644 --- a/docs/uk/msg_docs/ConfigOverrides.md +++ b/docs/uk/msg_docs/ConfigOverrides.md @@ -22,12 +22,12 @@ Configurable overrides by (external) modes or mode executors. ## Constants -| Назва | Тип | Значення | Опис | -| ---------------------------------------------------------------------------------------------------------------------------------- | -------- | -------- | ---- | -| MESSAGE_VERSION | `uint32` | 1 | | -| SOURCE_TYPE_MODE | `int8` | 0 | | -| SOURCE_TYPE_MODE_EXECUTOR | `int8` | 1 | | -| ORB_QUEUE_LENGTH | `uint8` | 4 | | +| Назва | Тип | Значення | Опис | +| -------------------------------------------------------------------------------------------------------------------------------- | -------- | -------- | ---- | +| MESSAGE_VERSION | `uint32` | 1 | | +| SOURCE_TYPE_MODE | `int8` | 0 | | +| SOURCE_TYPE_MODE_EXECUTOR | `int8` | 1 | | +| ORB_QUEUE_LENGTH | `uint8` | 4 | | ## Source Message diff --git a/docs/uk/msg_docs/ConfigOverridesV0.md b/docs/uk/msg_docs/ConfigOverridesV0.md index 20358bc0eb..9274780467 100644 --- a/docs/uk/msg_docs/ConfigOverridesV0.md +++ b/docs/uk/msg_docs/ConfigOverridesV0.md @@ -21,12 +21,12 @@ Configurable overrides by (external) modes or mode executors. ## Constants -| Назва | Тип | Значення | Опис | -| ---------------------------------------------------------------------------------------------------------------------------------- | -------- | -------- | ---- | -| MESSAGE_VERSION | `uint32` | 0 | | -| SOURCE_TYPE_MODE | `int8` | 0 | | -| SOURCE_TYPE_MODE_EXECUTOR | `int8` | 1 | | -| ORB_QUEUE_LENGTH | `uint8` | 4 | | +| Назва | Тип | Значення | Опис | +| -------------------------------------------------------------------------------------------------------------------------------- | -------- | -------- | ---- | +| MESSAGE_VERSION | `uint32` | 0 | | +| SOURCE_TYPE_MODE | `int8` | 0 | | +| SOURCE_TYPE_MODE_EXECUTOR | `int8` | 1 | | +| ORB_QUEUE_LENGTH | `uint8` | 4 | | ## Source Message diff --git a/docs/uk/msg_docs/ControlAllocatorStatus.md b/docs/uk/msg_docs/ControlAllocatorStatus.md index c8fa45e6a0..44a068d26a 100644 --- a/docs/uk/msg_docs/ControlAllocatorStatus.md +++ b/docs/uk/msg_docs/ControlAllocatorStatus.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # ControlAllocatorStatus (повідомлення UORB) -**TOPICS:** control_allocatorstatus +**TOPICS:** control_allocator_status ## Fields @@ -21,13 +21,13 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------------------------------------------------------------------------ | ------ | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | -| ACTUATOR_SATURATION_OK | `int8` | 0 | The actuator is not saturated | -| ACTUATOR_SATURATION_UPPER_DYN | `int8` | 1 | The actuator is saturated (with a value <= the desired value) because it cannot increase its value faster | -| ACTUATOR_SATURATION_UPPER | `int8` | 2 | The actuator is saturated (with a value <= the desired value) because it has reached its maximum value | -| ACTUATOR_SATURATION_LOWER_DYN | `int8` | -1 | The actuator is saturated (with a value >= the desired value) because it cannot decrease its value faster | -| ACTUATOR_SATURATION_LOWER | `int8` | -2 | The actuator is saturated (with a value >= the desired value) because it has reached its minimum value | +| Назва | Тип | Значення | Опис | +| ---------------------------------------------------------------------------------------------------------------------------------------- | ------ | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | +| ACTUATOR_SATURATION_OK | `int8` | 0 | The actuator is not saturated | +| ACTUATOR_SATURATION_UPPER_DYN | `int8` | 1 | The actuator is saturated (with a value <= the desired value) because it cannot increase its value faster | +| ACTUATOR_SATURATION_UPPER | `int8` | 2 | The actuator is saturated (with a value <= the desired value) because it has reached its maximum value | +| ACTUATOR_SATURATION_LOWER_DYN | `int8` | -1 | The actuator is saturated (with a value >= the desired value) because it cannot decrease its value faster | +| ACTUATOR_SATURATION_LOWER | `int8` | -2 | The actuator is saturated (with a value >= the desired value) because it has reached its minimum value | ## Source Message diff --git a/docs/uk/msg_docs/DatamanResponse.md b/docs/uk/msg_docs/DatamanResponse.md index f4d49f334c..3f983efae3 100644 --- a/docs/uk/msg_docs/DatamanResponse.md +++ b/docs/uk/msg_docs/DatamanResponse.md @@ -20,14 +20,14 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| -------------------------------------------------------------------------------------------------------------------------------------- | ------- | -------- | ---- | -| STATUS_SUCCESS | `uint8` | 0 | | -| STATUS_FAILURE_ID_ERR | `uint8` | 1 | | -| STATUS_FAILURE_NO_DATA | `uint8` | 2 | | -| STATUS_FAILURE_READ_FAILED | `uint8` | 3 | | -| STATUS_FAILURE_WRITE_FAILED | `uint8` | 4 | | -| STATUS_FAILURE_CLEAR_FAILED | `uint8` | 5 | | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------------------------------------------------------------------------ | ------- | -------- | ---- | +| STATUS_SUCCESS | `uint8` | 0 | | +| STATUS_FAILURE_ID_ERR | `uint8` | 1 | | +| STATUS_FAILURE_NO_DATA | `uint8` | 2 | | +| STATUS_FAILURE_READ_FAILED | `uint8` | 3 | | +| STATUS_FAILURE_WRITE_FAILED | `uint8` | 4 | | +| STATUS_FAILURE_CLEAR_FAILED | `uint8` | 5 | | ## Source Message diff --git a/docs/uk/msg_docs/DebugArray.md b/docs/uk/msg_docs/DebugArray.md index a2cd924b89..503136b10b 100644 --- a/docs/uk/msg_docs/DebugArray.md +++ b/docs/uk/msg_docs/DebugArray.md @@ -17,9 +17,9 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| ---------------------------------------------------------- | ------- | -------- | ---- | -| ARRAY_SIZE | `uint8` | 58 | | +| Назва | Тип | Значення | Опис | +| -------------------------------------------------------- | ------- | -------- | ---- | +| ARRAY_SIZE | `uint8` | 58 | | ## Source Message diff --git a/docs/uk/msg_docs/DebugKeyValue.md b/docs/uk/msg_docs/DebugKeyValue.md index d99cfd3494..c79acead58 100644 --- a/docs/uk/msg_docs/DebugKeyValue.md +++ b/docs/uk/msg_docs/DebugKeyValue.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # DebugKeyValue (повідомлення UORB) -**TOPICS:** debug_keyvalue +**TOPICS:** debug_key_value ## Fields diff --git a/docs/uk/msg_docs/DeviceInformation.md b/docs/uk/msg_docs/DeviceInformation.md index c3638f9196..8728432313 100644 --- a/docs/uk/msg_docs/DeviceInformation.md +++ b/docs/uk/msg_docs/DeviceInformation.md @@ -17,8 +17,7 @@ as well as tracking of the used firmware versions on the devices. | ------------------------------------- | ---------- | ---------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | | timestamp | `uint64` | | | time since system start (microseconds) | | device_type | `uint8` | | [DEVICE_TYPE](#DEVICE_TYPE) | Type of the device. Matches MAVLink DEVICE_TYPE enum | -| vendor_name | `char[32]` | | | Name of the device vendor | -| model_name | `char[32]` | | | Name of the device model | +| name | `char[80]` | | | Name of device e.g. DroneCAN node name | | `uint32` | | | Unique device ID for the sensor. Does not change between power cycles. (Invalid: 0 if not available) | | | firmware_version | `char[24]` | | | Firmware version. (Invalid: empty if not available) | | hardware_version | `char[24]` | | | Hardware version. (Invalid: empty if not available) | @@ -28,24 +27,24 @@ as well as tracking of the used firmware versions on the devices. ### DEVICE_TYPE {#DEVICE_TYPE} -| Назва | Тип | Значення | Опис | -| -------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | -------- | ---------------------- | -| DEVICE_TYPE_GENERIC | `uint8` | 0 | Generic/unknown sensor | -| DEVICE_TYPE_AIRSPEED | `uint8` | 1 | Датчик швидкості | -| DEVICE_TYPE_ESC | `uint8` | 2 | ESC | -| DEVICE_TYPE_SERVO | `uint8` | 3 | Servo | -| DEVICE_TYPE_GPS | `uint8` | 4 | GPS | -| DEVICE_TYPE_MAGNETOMETER | `uint8` | 5 | Магнітометр | -| DEVICE_TYPE_PARACHUTE | `uint8` | 6 | Парашут | -| DEVICE_TYPE_RANGEFINDER | `uint8` | 7 | Rangefinder | -| DEVICE_TYPE_WINCH | `uint8` | 8 | Winch | -| DEVICE_TYPE_BAROMETER | `uint8` | 9 | Барометр | -| DEVICE_TYPE_OPTICAL_FLOW | `uint8` | 10 | Optical flow | -| DEVICE_TYPE_ACCELEROMETER | `uint8` | 11 | Accelerometer | -| DEVICE_TYPE_GYROSCOPE | `uint8` | 12 | Gyroscope | -| DEVICE_TYPE_DIFFERENTIAL_PRESSURE | `uint8` | 13 | Differential pressure | -| DEVICE_TYPE_BATTERY | `uint8` | 14 | Battery | -| DEVICE_TYPE_HYGROMETER | `uint8` | 15 | Hygrometer | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------------------------------------------------------------------------------------ | ------- | -------- | ---------------------- | +| DEVICE_TYPE_GENERIC | `uint8` | 0 | Generic/unknown sensor | +| DEVICE_TYPE_AIRSPEED | `uint8` | 1 | Датчик швидкості | +| DEVICE_TYPE_ESC | `uint8` | 2 | ESC | +| DEVICE_TYPE_SERVO | `uint8` | 3 | Servo | +| DEVICE_TYPE_GPS | `uint8` | 4 | GPS | +| DEVICE_TYPE_MAGNETOMETER | `uint8` | 5 | Магнітометр | +| DEVICE_TYPE_PARACHUTE | `uint8` | 6 | Парашут | +| DEVICE_TYPE_RANGEFINDER | `uint8` | 7 | Rangefinder | +| DEVICE_TYPE_WINCH | `uint8` | 8 | Winch | +| DEVICE_TYPE_BAROMETER | `uint8` | 9 | Барометр | +| DEVICE_TYPE_OPTICAL_FLOW | `uint8` | 10 | Optical flow | +| DEVICE_TYPE_ACCELEROMETER | `uint8` | 11 | Accelerometer | +| DEVICE_TYPE_GYROSCOPE | `uint8` | 12 | Gyroscope | +| DEVICE_TYPE_DIFFERENTIAL_PRESSURE | `uint8` | 13 | Differential pressure | +| DEVICE_TYPE_BATTERY | `uint8` | 14 | Battery | +| DEVICE_TYPE_HYGROMETER | `uint8` | 15 | Hygrometer | ## Source Message @@ -63,7 +62,6 @@ Click here to see original file uint64 timestamp # time since system start (microseconds) uint8 device_type # [@enum DEVICE_TYPE] Type of the device. Matches MAVLink DEVICE_TYPE enum - uint8 DEVICE_TYPE_GENERIC = 0 # Generic/unknown sensor uint8 DEVICE_TYPE_AIRSPEED = 1 # Airspeed sensor uint8 DEVICE_TYPE_ESC = 2 # ESC @@ -81,8 +79,7 @@ uint8 DEVICE_TYPE_DIFFERENTIAL_PRESSURE = 13 # Differential pressure uint8 DEVICE_TYPE_BATTERY = 14 # Battery uint8 DEVICE_TYPE_HYGROMETER = 15 # Hygrometer -char[32] vendor_name # Name of the device vendor -char[32] model_name # Name of the device model +char[80] name # Name of device e.g. DroneCAN node name uint32 device_id # [-] [@invalid 0 if not available] Unique device ID for the sensor. Does not change between power cycles. char[24] firmware_version # [-] [@invalid empty if not available] Firmware version. diff --git a/docs/uk/msg_docs/DistanceSensor.md b/docs/uk/msg_docs/DistanceSensor.md index d0e173a9bc..318b12ab99 100644 --- a/docs/uk/msg_docs/DistanceSensor.md +++ b/docs/uk/msg_docs/DistanceSensor.md @@ -28,30 +28,30 @@ DISTANCE_SENSOR message data. ## Constants -| Назва | Тип | Значення | Опис | -| -------------------------------------------------------------------------------------------------------------------------------------------- | ------- | -------- | ----------------------------------------------------------------------------------------------------------------- | -| MAV_DISTANCE_SENSOR_LASER | `uint8` | 0 | | -| MAV_DISTANCE_SENSOR_ULTRASOUND | `uint8` | 1 | | -| MAV_DISTANCE_SENSOR_INFRARED | `uint8` | 2 | | -| MAV_DISTANCE_SENSOR_RADAR | `uint8` | 3 | | -| ROTATION_YAW_0 | `uint8` | 0 | MAV_SENSOR_ROTATION_NONE | -| ROTATION_YAW_45 | `uint8` | 1 | MAV_SENSOR_ROTATION_YAW_45 | -| ROTATION_YAW_90 | `uint8` | 2 | MAV_SENSOR_ROTATION_YAW_90 | -| ROTATION_YAW_135 | `uint8` | 3 | MAV_SENSOR_ROTATION_YAW_135 | -| ROTATION_YAW_180 | `uint8` | 4 | MAV_SENSOR_ROTATION_YAW_180 | -| ROTATION_YAW_225 | `uint8` | 5 | MAV_SENSOR_ROTATION_YAW_225 | -| ROTATION_YAW_270 | `uint8` | 6 | MAV_SENSOR_ROTATION_YAW_270 | -| ROTATION_YAW_315 | `uint8` | 7 | MAV_SENSOR_ROTATION_YAW_315 | -| ROTATION_FORWARD_FACING | `uint8` | 0 | MAV_SENSOR_ROTATION_NONE | -| ROTATION_RIGHT_FACING | `uint8` | 2 | MAV_SENSOR_ROTATION_YAW_90 | -| ROTATION_BACKWARD_FACING | `uint8` | 4 | MAV_SENSOR_ROTATION_YAW_180 | -| ROTATION_LEFT_FACING | `uint8` | 6 | MAV_SENSOR_ROTATION_YAW_270 | -| ROTATION_UPWARD_FACING | `uint8` | 24 | MAV_SENSOR_ROTATION_PITCH_90 | -| ROTATION_DOWNWARD_FACING | `uint8` | 25 | MAV_SENSOR_ROTATION_PITCH_270 | -| ROTATION_CUSTOM | `uint8` | 100 | MAV_SENSOR_ROTATION_CUSTOM | -| MODE_UNKNOWN | `uint8` | 0 | | -| MODE_ENABLED | `uint8` | 1 | | -| MODE_DISABLED | `uint8` | 2 | | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------------------------------------------------------------------------------ | ------- | -------- | ----------------------------------------------------------------------------------------------------------------- | +| MAV_DISTANCE_SENSOR_LASER | `uint8` | 0 | | +| MAV_DISTANCE_SENSOR_ULTRASOUND | `uint8` | 1 | | +| MAV_DISTANCE_SENSOR_INFRARED | `uint8` | 2 | | +| MAV_DISTANCE_SENSOR_RADAR | `uint8` | 3 | | +| ROTATION_YAW_0 | `uint8` | 0 | MAV_SENSOR_ROTATION_NONE | +| ROTATION_YAW_45 | `uint8` | 1 | MAV_SENSOR_ROTATION_YAW_45 | +| ROTATION_YAW_90 | `uint8` | 2 | MAV_SENSOR_ROTATION_YAW_90 | +| ROTATION_YAW_135 | `uint8` | 3 | MAV_SENSOR_ROTATION_YAW_135 | +| ROTATION_YAW_180 | `uint8` | 4 | MAV_SENSOR_ROTATION_YAW_180 | +| ROTATION_YAW_225 | `uint8` | 5 | MAV_SENSOR_ROTATION_YAW_225 | +| ROTATION_YAW_270 | `uint8` | 6 | MAV_SENSOR_ROTATION_YAW_270 | +| ROTATION_YAW_315 | `uint8` | 7 | MAV_SENSOR_ROTATION_YAW_315 | +| ROTATION_FORWARD_FACING | `uint8` | 0 | MAV_SENSOR_ROTATION_NONE | +| ROTATION_RIGHT_FACING | `uint8` | 2 | MAV_SENSOR_ROTATION_YAW_90 | +| ROTATION_BACKWARD_FACING | `uint8` | 4 | MAV_SENSOR_ROTATION_YAW_180 | +| ROTATION_LEFT_FACING | `uint8` | 6 | MAV_SENSOR_ROTATION_YAW_270 | +| ROTATION_UPWARD_FACING | `uint8` | 24 | MAV_SENSOR_ROTATION_PITCH_90 | +| ROTATION_DOWNWARD_FACING | `uint8` | 25 | MAV_SENSOR_ROTATION_PITCH_270 | +| ROTATION_CUSTOM | `uint8` | 100 | MAV_SENSOR_ROTATION_CUSTOM | +| MODE_UNKNOWN | `uint8` | 0 | | +| MODE_ENABLED | `uint8` | 1 | | +| MODE_DISABLED | `uint8` | 2 | | ## Source Message diff --git a/docs/uk/msg_docs/DistanceSensorModeChangeRequest.md b/docs/uk/msg_docs/DistanceSensorModeChangeRequest.md index a54d1d5f68..1ac9ba3b7a 100644 --- a/docs/uk/msg_docs/DistanceSensorModeChangeRequest.md +++ b/docs/uk/msg_docs/DistanceSensorModeChangeRequest.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # DistanceSensorModeChangeRequest (UORB message) -**TOPICS:** distance_sensormode_changerequest +**TOPICS:** distance_sensor_mode_change_request ## Fields @@ -15,10 +15,10 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------ | ------- | -------- | ---- | -| REQUEST_OFF | `uint8` | 0 | | -| REQUEST_ON | `uint8` | 1 | | +| Назва | Тип | Значення | Опис | +| ---------------------------------------------------------- | ------- | -------- | ---- | +| REQUEST_OFF | `uint8` | 0 | | +| REQUEST_ON | `uint8` | 1 | | ## Source Message diff --git a/docs/uk/msg_docs/DronecanNodeStatus.md b/docs/uk/msg_docs/DronecanNodeStatus.md index 042c340f70..59ac90abd2 100644 --- a/docs/uk/msg_docs/DronecanNodeStatus.md +++ b/docs/uk/msg_docs/DronecanNodeStatus.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # DronecanNodeStatus (UORB message) -**TOPICS:** dronecan_nodestatus +**TOPICS:** dronecan_node_status ## Fields @@ -20,17 +20,17 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| --------------------------------------------------------------------------------------------------- | ------- | -------- | ----------------------------------------------------------------------------------------------- | -| HEALTH_OK | `uint8` | 0 | The node is functioning properly. | -| HEALTH_WARNING | `uint8` | 1 | A critical parameter went out of range or the node encountered a minor failure. | -| HEALTH_ERROR | `uint8` | 2 | The node encountered a major failure. | -| HEALTH_CRITICAL | `uint8` | 3 | The node suffered a fatal malfunction. | -| MODE_OPERATIONAL | `uint8` | 0 | Normal operating mode. | -| MODE_INITIALIZATION | `uint8` | 1 | Initialization is in progress; this mode is entered immediately after startup. | -| MODE_MAINTENANCE | `uint8` | 2 | Наприклад, calibration, the bootloader is running, etc. | -| MODE_SOFTWARE_UPDATE | `uint8` | 3 | New software/firmware is being loaded. | -| MODE_OFFLINE | `uint8` | 7 | The node is no longer available. | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------------------------------------- | ------- | -------- | ----------------------------------------------------------------------------------------------- | +| HEALTH_OK | `uint8` | 0 | The node is functioning properly. | +| HEALTH_WARNING | `uint8` | 1 | A critical parameter went out of range or the node encountered a minor failure. | +| HEALTH_ERROR | `uint8` | 2 | The node encountered a major failure. | +| HEALTH_CRITICAL | `uint8` | 3 | The node suffered a fatal malfunction. | +| MODE_OPERATIONAL | `uint8` | 0 | Normal operating mode. | +| MODE_INITIALIZATION | `uint8` | 1 | Initialization is in progress; this mode is entered immediately after startup. | +| MODE_MAINTENANCE | `uint8` | 2 | Наприклад, calibration, the bootloader is running, etc. | +| MODE_SOFTWARE_UPDATE | `uint8` | 3 | New software/firmware is being loaded. | +| MODE_OFFLINE | `uint8` | 7 | The node is no longer available. | ## Source Message diff --git a/docs/uk/msg_docs/Ekf2Timestamps.md b/docs/uk/msg_docs/Ekf2Timestamps.md index bc85f54628..2002941ad2 100644 --- a/docs/uk/msg_docs/Ekf2Timestamps.md +++ b/docs/uk/msg_docs/Ekf2Timestamps.md @@ -23,9 +23,9 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| --------------------------------------------------------------------------------------------------------------- | ------- | -------- | ------------------------------------------------------------- | -| RELATIVE_TIMESTAMP_INVALID | `int16` | 32767 | (0x7fff) If one of the relative timestamps | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------------------------------------------------- | ------- | -------- | ------------------------------------------------------------- | +| RELATIVE_TIMESTAMP_INVALID | `int16` | 32767 | (0x7fff) If one of the relative timestamps | ## Source Message diff --git a/docs/uk/msg_docs/EscEepromRead.md b/docs/uk/msg_docs/EscEepromRead.md new file mode 100644 index 0000000000..7e53e03217 --- /dev/null +++ b/docs/uk/msg_docs/EscEepromRead.md @@ -0,0 +1,42 @@ +--- +pageClass: is-wide-page +--- + +# EscEepromRead (UORB message) + +**TOPICS:** esc_eeprom_read + +## Fields + +| Назва | Тип | Unit [Frame] | Range/Enum | Опис | +| --------- | ----------- | ---------------------------------------------------------------- | ---------- | -------------------------------------------------------------------------------------------- | +| timestamp | `uint64` | us | | Time since system start | +| firmware | `uint8` | | | ESC firmware type (see ESC_FIRMWARE enum in MAVLink) | +| index | `uint8` | | | Index of the ESC (0 = ESC1, 1 = ESC2, etc.) | +| length | `uint16` | | | Length of valid data | +| data | `uint8[48]` | | | Raw ESC EEPROM data | + +## Constants + +| Назва | Тип | Значення | Опис | +| ----------------------------------------------------------------------------------------- | ------- | -------- | -------------------------------- | +| ORB_QUEUE_LENGTH | `uint8` | 8 | To support 8 queued up responses | + +## Source Message + +[Source file (GitHub)](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EscEepromRead.msg) + +:::details +Click here to see original file + +```c +uint64 timestamp # [us] Time since system start +uint8 firmware # [-] ESC firmware type (see ESC_FIRMWARE enum in MAVLink) +uint8 index # [-] Index of the ESC (0 = ESC1, 1 = ESC2, etc.) +uint16 length # [-] Length of valid data +uint8[48] data # [-] Raw ESC EEPROM data + +uint8 ORB_QUEUE_LENGTH = 8 # To support 8 queued up responses +``` + +::: diff --git a/docs/uk/msg_docs/EscEepromWrite.md b/docs/uk/msg_docs/EscEepromWrite.md new file mode 100644 index 0000000000..ae74662268 --- /dev/null +++ b/docs/uk/msg_docs/EscEepromWrite.md @@ -0,0 +1,44 @@ +--- +pageClass: is-wide-page +--- + +# EscEepromWrite (UORB message) + +**TOPICS:** esc_eeprom_write + +## Fields + +| Назва | Тип | Unit [Frame] | Range/Enum | Опис | +| ------------------------------- | ----------- | ---------------------------------------------------------------- | ---------- | ----------------------------------------------------------------------------------------------------- | +| timestamp | `uint64` | us | | Time since system start | +| firmware | `uint8` | | | ESC firmware type (see ESC_FIRMWARE enum in MAVLink) | +| index | `uint8` | | | Index of the ESC (0 = ESC1, 1 = ESC2, etc, 255 = All) | +| length | `uint16` | | | Length of valid data | +| data | `uint8[48]` | | | Raw ESC EEPROM data | +| write_mask | `uint32[2]` | | | Bitmask indicating which bytes in the data array should be written (max 48 values) | + +## Constants + +| Назва | Тип | Значення | Опис | +| ----------------------------------------------------------------------------------------- | ------- | -------- | ------------------------------- | +| ORB_QUEUE_LENGTH | `uint8` | 8 | To support 8 queued up requests | + +## Source Message + +[Source file (GitHub)](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EscEepromWrite.msg) + +:::details +Click here to see original file + +```c +uint64 timestamp # [us] Time since system start +uint8 firmware # [-] ESC firmware type (see ESC_FIRMWARE enum in MAVLink) +uint8 index # [-] Index of the ESC (0 = ESC1, 1 = ESC2, etc, 255 = All) +uint16 length # [-] Length of valid data +uint8[48] data # [-] Raw ESC EEPROM data +uint32[2] write_mask # [-] Bitmask indicating which bytes in the data array should be written (max 48 values) + +uint8 ORB_QUEUE_LENGTH = 8 # To support 8 queued up requests +``` + +::: diff --git a/docs/uk/msg_docs/EscReport.md b/docs/uk/msg_docs/EscReport.md index 89f7de7fdf..5ee09e6f92 100644 --- a/docs/uk/msg_docs/EscReport.md +++ b/docs/uk/msg_docs/EscReport.md @@ -8,48 +8,44 @@ pageClass: is-wide-page ## Fields -| Назва | Тип | Unit [Frame] | Range/Enum | Опис | -| -------------------------------------- | --------- | ---------------------------------------------------------------- | ---------- | -------------------------------------------------------------------------------------------------------------------- | -| timestamp | `uint64` | | | time since system start (microseconds) | -| esc_errorcount | `uint32` | | | Number of reported errors by ESC - if supported | -| esc_rpm | `int32` | | | Motor RPM, negative for reverse rotation [RPM] - if supported | -| esc_voltage | `float32` | | | Voltage measured from current ESC [V] - if supported | -| esc_current | `float32` | | | Current measured from current ESC [A] - if supported | -| esc_temperature | `float32` | | | Temperature measured from current ESC [degC] - if supported | -| esc_address | `uint8` | | | Address of current ESC (in most cases 1-8 / must be set by driver) | -| esc_cmdcount | `uint8` | | | Counter of number of commands | -| esc_state | `uint8` | | | State of ESC - depend on Vendor | -| actuator_function | `uint8` | | | actuator output function (one of Motor1...MotorN) | -| failures | `uint16` | | | Bitmask to indicate the internal ESC faults | -| esc_power | `int8` | | | Applied power 0-100 in % (negative values reserved) | +| Назва | Тип | Unit [Frame] | Range/Enum | Опис | +| -------------------------------------- | --------- | ---------------------------------------------------------------- | ----------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | +| timestamp | `uint64` | us | | Time since system start | +| esc_errorcount | `uint32` | | | Number of reported errors by ESC - if supported | +| esc_rpm | `int32` | rpm | | Motor RPM, negative for reverse rotation - if supported | +| esc_voltage | `float32` | V | | Voltage measured from current ESC - if supported | +| esc_current | `float32` | A | | Current measured from current ESC - if supported | +| esc_temperature | `float32` | degC | | Temperature measured from current ESC - if supported | +| motor_temperature | `int16` | degC | | Temperature measured from current motor - if supported | +| esc_state | `uint8` | | | State of ESC - depend on Vendor | +| actuator_function | `uint8` | | | Actuator output function (one of Motor1...MotorN) | +| failures | `uint16` | | [FAILURE](#FAILURE) | Bitmask to indicate the internal ESC faults | +| esc_power | `int8` | % | [0 : 100] | Applied power (negative values reserved) | + +## Enums + +### FAILURE {#FAILURE} + +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------------------------------------------------------------------------------ | ------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| FAILURE_OVER_CURRENT | `uint8` | 0 | (1 << 0) | +| FAILURE_OVER_VOLTAGE | `uint8` | 1 | (1 << 1) | +| FAILURE_MOTOR_OVER_TEMPERATURE | `uint8` | 2 | (1 << 2) | +| FAILURE_OVER_RPM | `uint8` | 3 | (1 << 3) | +| FAILURE_INCONSISTENT_CMD | `uint8` | 4 | (1 << 4) Set if ESC received an inconsistent command (i.e out of boundaries) | +| FAILURE_MOTOR_STUCK | `uint8` | 5 | (1 << 5) | +| FAILURE_GENERIC | `uint8` | 6 | (1 << 6) | +| FAILURE_MOTOR_WARN_TEMPERATURE | `uint8` | 7 | (1 << 7) | +| FAILURE_WARN_ESC_TEMPERATURE | `uint8` | 8 | (1 << 8) | +| FAILURE_OVER_ESC_TEMPERATURE | `uint8` | 9 | (1 << 9) | ## Constants -| Назва | Тип | Значення | Опис | -| -------------------------------------------------------------------------------------------------------------------------------------------- | ------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| ACTUATOR_FUNCTION_MOTOR1 | `uint8` | 101 | | -| ACTUATOR_FUNCTION_MOTOR2 | `uint8` | 102 | | -| ACTUATOR_FUNCTION_MOTOR3 | `uint8` | 103 | | -| ACTUATOR_FUNCTION_MOTOR4 | `uint8` | 104 | | -| ACTUATOR_FUNCTION_MOTOR5 | `uint8` | 105 | | -| ACTUATOR_FUNCTION_MOTOR6 | `uint8` | 106 | | -| ACTUATOR_FUNCTION_MOTOR7 | `uint8` | 107 | | -| ACTUATOR_FUNCTION_MOTOR8 | `uint8` | 108 | | -| ACTUATOR_FUNCTION_MOTOR9 | `uint8` | 109 | | -| ACTUATOR_FUNCTION_MOTOR10 | `uint8` | 110 | | -| ACTUATOR_FUNCTION_MOTOR11 | `uint8` | 111 | | -| ACTUATOR_FUNCTION_MOTOR12 | `uint8` | 112 | | -| FAILURE_OVER_CURRENT | `uint8` | 0 | (1 << 0) | -| FAILURE_OVER_VOLTAGE | `uint8` | 1 | (1 << 1) | -| FAILURE_MOTOR_OVER_TEMPERATURE | `uint8` | 2 | (1 << 2) | -| FAILURE_OVER_RPM | `uint8` | 3 | (1 << 3) | -| FAILURE_INCONSISTENT_CMD | `uint8` | 4 | (1 << 4) Set if ESC received an inconsistent command (i.e out of boundaries) | -| FAILURE_MOTOR_STUCK | `uint8` | 5 | (1 << 5) | -| FAILURE_GENERIC | `uint8` | 6 | (1 << 6) | -| FAILURE_MOTOR_WARN_TEMPERATURE | `uint8` | 7 | (1 << 7) | -| FAILURE_WARN_ESC_TEMPERATURE | `uint8` | 8 | (1 << 8) | -| FAILURE_OVER_ESC_TEMPERATURE | `uint8` | 9 | (1 << 9) | -| ESC_FAILURE_COUNT | `uint8` | 10 | Counter - keep it as last element! | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------------------------------------------------------------------------ | ------- | -------- | ------------------------------------------------------------------------------------------------------------------------ | +| ACTUATOR_FUNCTION_MOTOR1 | `uint8` | 101 | | +| ACTUATOR_FUNCTION_MOTOR_MAX | `uint8` | 112 | output_functions.yaml Motor.start + Motor.count - 1 | +| ESC_FAILURE_COUNT | `uint8` | 10 | Counter - keep it as last element! | ## Source Message @@ -59,46 +55,36 @@ pageClass: is-wide-page Click here to see original file ```c -uint64 timestamp # time since system start (microseconds) -uint32 esc_errorcount # Number of reported errors by ESC - if supported -int32 esc_rpm # Motor RPM, negative for reverse rotation [RPM] - if supported -float32 esc_voltage # Voltage measured from current ESC [V] - if supported -float32 esc_current # Current measured from current ESC [A] - if supported -float32 esc_temperature # Temperature measured from current ESC [degC] - if supported -uint8 esc_address # Address of current ESC (in most cases 1-8 / must be set by driver) -uint8 esc_cmdcount # Counter of number of commands +uint64 timestamp # [us] Time since system start -uint8 esc_state # State of ESC - depend on Vendor +uint32 esc_errorcount # [-] Number of reported errors by ESC - if supported +int32 esc_rpm # [rpm] Motor RPM, negative for reverse rotation - if supported +float32 esc_voltage # [V] Voltage measured from current ESC - if supported +float32 esc_current # [A] Current measured from current ESC - if supported +float32 esc_temperature # [degC] Temperature measured from current ESC - if supported +int16 motor_temperature # [degC] Temperature measured from current motor - if supported -uint8 actuator_function # actuator output function (one of Motor1...MotorN) +uint8 esc_state # [-] State of ESC - depend on Vendor + +uint8 actuator_function # [-] Actuator output function (one of Motor1...MotorN) uint8 ACTUATOR_FUNCTION_MOTOR1 = 101 -uint8 ACTUATOR_FUNCTION_MOTOR2 = 102 -uint8 ACTUATOR_FUNCTION_MOTOR3 = 103 -uint8 ACTUATOR_FUNCTION_MOTOR4 = 104 -uint8 ACTUATOR_FUNCTION_MOTOR5 = 105 -uint8 ACTUATOR_FUNCTION_MOTOR6 = 106 -uint8 ACTUATOR_FUNCTION_MOTOR7 = 107 -uint8 ACTUATOR_FUNCTION_MOTOR8 = 108 -uint8 ACTUATOR_FUNCTION_MOTOR9 = 109 -uint8 ACTUATOR_FUNCTION_MOTOR10 = 110 -uint8 ACTUATOR_FUNCTION_MOTOR11 = 111 -uint8 ACTUATOR_FUNCTION_MOTOR12 = 112 +uint8 ACTUATOR_FUNCTION_MOTOR_MAX = 112 # output_functions.yaml Motor.start + Motor.count - 1 -uint16 failures # Bitmask to indicate the internal ESC faults -int8 esc_power # Applied power 0-100 in % (negative values reserved) +uint16 failures # [@enum FAILURE] Bitmask to indicate the internal ESC faults +int8 esc_power # [%] [@range 0,100] Applied power (negative values reserved) -uint8 FAILURE_OVER_CURRENT = 0 # (1 << 0) -uint8 FAILURE_OVER_VOLTAGE = 1 # (1 << 1) -uint8 FAILURE_MOTOR_OVER_TEMPERATURE = 2 # (1 << 2) -uint8 FAILURE_OVER_RPM = 3 # (1 << 3) -uint8 FAILURE_INCONSISTENT_CMD = 4 # (1 << 4) Set if ESC received an inconsistent command (i.e out of boundaries) -uint8 FAILURE_MOTOR_STUCK = 5 # (1 << 5) -uint8 FAILURE_GENERIC = 6 # (1 << 6) -uint8 FAILURE_MOTOR_WARN_TEMPERATURE = 7 # (1 << 7) -uint8 FAILURE_WARN_ESC_TEMPERATURE = 8 # (1 << 8) -uint8 FAILURE_OVER_ESC_TEMPERATURE = 9 # (1 << 9) -uint8 ESC_FAILURE_COUNT = 10 # Counter - keep it as last element! +uint8 FAILURE_OVER_CURRENT = 0 # (1 << 0) +uint8 FAILURE_OVER_VOLTAGE = 1 # (1 << 1) +uint8 FAILURE_MOTOR_OVER_TEMPERATURE = 2 # (1 << 2) +uint8 FAILURE_OVER_RPM = 3 # (1 << 3) +uint8 FAILURE_INCONSISTENT_CMD = 4 # (1 << 4) Set if ESC received an inconsistent command (i.e out of boundaries) +uint8 FAILURE_MOTOR_STUCK = 5 # (1 << 5) +uint8 FAILURE_GENERIC = 6 # (1 << 6) +uint8 FAILURE_MOTOR_WARN_TEMPERATURE = 7 # (1 << 7) +uint8 FAILURE_WARN_ESC_TEMPERATURE = 8 # (1 << 8) +uint8 FAILURE_OVER_ESC_TEMPERATURE = 9 # (1 << 9) +uint8 ESC_FAILURE_COUNT = 10 # Counter - keep it as last element! ``` ::: diff --git a/docs/uk/msg_docs/EscStatus.md b/docs/uk/msg_docs/EscStatus.md index 96f426faef..ed9e724a2b 100644 --- a/docs/uk/msg_docs/EscStatus.md +++ b/docs/uk/msg_docs/EscStatus.md @@ -8,27 +8,34 @@ pageClass: is-wide-page ## Fields -| Назва | Тип | Unit [Frame] | Range/Enum | Опис | -| ---------------------------------------------------------- | -------------- | ---------------------------------------------------------------- | ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| timestamp | `uint64` | | | time since system start (microseconds) | -| counter | `uint16` | | | incremented by the writing thread everytime new data is stored | -| esc_count | `uint8` | | | number of connected ESCs | -| esc_connectiontype | `uint8` | | | how ESCs connected to the system | -| esc_online_flags | `uint8` | | | Bitmask indicating which ESC is online/offline | -| esc_armed_flags | `uint8` | | | Bitmask indicating which ESC is armed. For ESC's where the arming state is not known (returned by the ESC), the arming bits should always be set. | -| esc | `EscReport[8]` | | | | +| Назва | Тип | Unit [Frame] | Range/Enum | Опис | +| ---------------------------------------------------------- | --------------- | ---------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | +| timestamp | `uint64` | us | | Time since system start | +| counter | `uint16` | | | Incremented by the writing thread everytime new data is stored | +| esc_count | `uint8` | | | Number of connected ESCs | +| esc_connectiontype | `uint8` | | [ESC_CONNECTION_TYPE](#ESC_CONNECTION_TYPE) | How ESCs connected to the system | +| esc_online_flags | `uint16` | | | Bitmask indicating which ESC is online/offline (in motor order) | +| esc_armed_flags | `uint16` | | | Bitmask indicating which ESC is armed (in motor order) | +| esc | `EscReport[12]` | | | | + +## Enums + +### ESC_CONNECTION_TYPE {#ESC_CONNECTION_TYPE} + +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------------------------------------------------------------------------ | ------- | -------- | ------------------------ | +| ESC_CONNECTION_TYPE_PPM | `uint8` | 0 | Traditional PPM ESC | +| ESC_CONNECTION_TYPE_SERIAL | `uint8` | 1 | Serial Bus connected ESC | +| ESC_CONNECTION_TYPE_ONESHOT | `uint8` | 2 | One Shot PPM | +| ESC_CONNECTION_TYPE_I2C | `uint8` | 3 | I2C | +| ESC_CONNECTION_TYPE_CAN | `uint8` | 4 | CAN-Bus | +| ESC_CONNECTION_TYPE_DSHOT | `uint8` | 5 | DShot | ## Constants -| Назва | Тип | Значення | Опис | -| -------------------------------------------------------------------------------------------------------------------------------------- | ------- | -------- | ---------------------------------------------------------------------------------------------------- | -| CONNECTED_ESC_MAX | `uint8` | 8 | The number of ESCs supported. Current (Q2/2013) we support 8 ESCs | -| ESC_CONNECTION_TYPE_PPM | `uint8` | 0 | Traditional PPM ESC | -| ESC_CONNECTION_TYPE_SERIAL | `uint8` | 1 | Serial Bus connected ESC | -| ESC_CONNECTION_TYPE_ONESHOT | `uint8` | 2 | One Shot PPM | -| ESC_CONNECTION_TYPE_I2C | `uint8` | 3 | I2C | -| ESC_CONNECTION_TYPE_CAN | `uint8` | 4 | CAN-Bus | -| ESC_CONNECTION_TYPE_DSHOT | `uint8` | 5 | DShot | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------------------------------- | ------- | -------- | ---------------------------------------------------------------- | +| CONNECTED_ESC_MAX | `uint8` | 12 | The number of ESCs supported (Motor1-Motor12) | ## Source Message @@ -38,34 +45,38 @@ pageClass: is-wide-page Click here to see original file ```c -uint64 timestamp # time since system start (microseconds) -uint8 CONNECTED_ESC_MAX = 8 # The number of ESCs supported. Current (Q2/2013) we support 8 ESCs +uint64 timestamp # [us] Time since system start +uint8 CONNECTED_ESC_MAX = 12 # The number of ESCs supported (Motor1-Motor12) -uint8 ESC_CONNECTION_TYPE_PPM = 0 # Traditional PPM ESC -uint8 ESC_CONNECTION_TYPE_SERIAL = 1 # Serial Bus connected ESC -uint8 ESC_CONNECTION_TYPE_ONESHOT = 2 # One Shot PPM -uint8 ESC_CONNECTION_TYPE_I2C = 3 # I2C -uint8 ESC_CONNECTION_TYPE_CAN = 4 # CAN-Bus -uint8 ESC_CONNECTION_TYPE_DSHOT = 5 # DShot +uint8 ESC_CONNECTION_TYPE_PPM = 0 # Traditional PPM ESC +uint8 ESC_CONNECTION_TYPE_SERIAL = 1 # Serial Bus connected ESC +uint8 ESC_CONNECTION_TYPE_ONESHOT = 2 # One Shot PPM +uint8 ESC_CONNECTION_TYPE_I2C = 3 # I2C +uint8 ESC_CONNECTION_TYPE_CAN = 4 # CAN-Bus +uint8 ESC_CONNECTION_TYPE_DSHOT = 5 # DShot -uint16 counter # incremented by the writing thread everytime new data is stored +uint16 counter # [-] Incremented by the writing thread everytime new data is stored -uint8 esc_count # number of connected ESCs -uint8 esc_connectiontype # how ESCs connected to the system +uint8 esc_count # [-] Number of connected ESCs +uint8 esc_connectiontype # [@enum ESC_CONNECTION_TYPE] How ESCs connected to the system -uint8 esc_online_flags # Bitmask indicating which ESC is online/offline -# esc_online_flags bit 0 : Set to 1 if ESC0 is online -# esc_online_flags bit 1 : Set to 1 if ESC1 is online -# esc_online_flags bit 2 : Set to 1 if ESC2 is online -# esc_online_flags bit 3 : Set to 1 if ESC3 is online -# esc_online_flags bit 4 : Set to 1 if ESC4 is online -# esc_online_flags bit 5 : Set to 1 if ESC5 is online -# esc_online_flags bit 6 : Set to 1 if ESC6 is online -# esc_online_flags bit 7 : Set to 1 if ESC7 is online +uint16 esc_online_flags # Bitmask indicating which ESC is online/offline (in motor order) +# esc_online_flags bit 0 : Set to 1 if Motor1 is online +# esc_online_flags bit 1 : Set to 1 if Motor2 is online +# esc_online_flags bit 2 : Set to 1 if Motor3 is online +# esc_online_flags bit 3 : Set to 1 if Motor4 is online +# esc_online_flags bit 4 : Set to 1 if Motor5 is online +# esc_online_flags bit 5 : Set to 1 if Motor6 is online +# esc_online_flags bit 6 : Set to 1 if Motor7 is online +# esc_online_flags bit 7 : Set to 1 if Motor8 is online +# esc_online_flags bit 8 : Set to 1 if Motor9 is online +# esc_online_flags bit 9 : Set to 1 if Motor10 is online +# esc_online_flags bit 10: Set to 1 if Motor11 is online +# esc_online_flags bit 11: Set to 1 if Motor12 is online -uint8 esc_armed_flags # Bitmask indicating which ESC is armed. For ESC's where the arming state is not known (returned by the ESC), the arming bits should always be set. +uint16 esc_armed_flags # [-] Bitmask indicating which ESC is armed (in motor order) -EscReport[8] esc +EscReport[12] esc ``` ::: diff --git a/docs/uk/msg_docs/EstimatorAidSource1d.md b/docs/uk/msg_docs/EstimatorAidSource1d.md index 809de10fec..87999a262f 100644 --- a/docs/uk/msg_docs/EstimatorAidSource1d.md +++ b/docs/uk/msg_docs/EstimatorAidSource1d.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # EstimatorAidSource1d (повідомлення UORB) -**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 diff --git a/docs/uk/msg_docs/EstimatorEventFlags.md b/docs/uk/msg_docs/EstimatorEventFlags.md index 1f2669d4ff..889265b204 100644 --- a/docs/uk/msg_docs/EstimatorEventFlags.md +++ b/docs/uk/msg_docs/EstimatorEventFlags.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # EstimatorEventFlags (повідомлення UORB) -**TOPICS:** estimator_eventflags +**TOPICS:** estimator_event_flags ## Fields diff --git a/docs/uk/msg_docs/EstimatorFusionControl.md b/docs/uk/msg_docs/EstimatorFusionControl.md new file mode 100644 index 0000000000..b413a30c58 --- /dev/null +++ b/docs/uk/msg_docs/EstimatorFusionControl.md @@ -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 +``` + +::: diff --git a/docs/uk/msg_docs/EstimatorGpsStatus.md b/docs/uk/msg_docs/EstimatorGpsStatus.md index 8a9ae0e57f..b68473fbcd 100644 --- a/docs/uk/msg_docs/EstimatorGpsStatus.md +++ b/docs/uk/msg_docs/EstimatorGpsStatus.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # EstimatorGpsStatus (повідомлення UORB) -**TOPICS:** estimator_gpsstatus +**TOPICS:** estimator_gps_status ## Fields diff --git a/docs/uk/msg_docs/EstimatorSelectorStatus.md b/docs/uk/msg_docs/EstimatorSelectorStatus.md index 0fb11005fd..050615149d 100644 --- a/docs/uk/msg_docs/EstimatorSelectorStatus.md +++ b/docs/uk/msg_docs/EstimatorSelectorStatus.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # EstimatorSelectorStatus (повідомлення UORB) -**TOPICS:** estimator_selectorstatus +**TOPICS:** estimator_selector_status ## Fields diff --git a/docs/uk/msg_docs/EstimatorSensorBias.md b/docs/uk/msg_docs/EstimatorSensorBias.md index d881564e12..13816d7086 100644 --- a/docs/uk/msg_docs/EstimatorSensorBias.md +++ b/docs/uk/msg_docs/EstimatorSensorBias.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Показання датчиків та похибки в процесі роботи в одиницях СІ. Sensor readings are compensated for static offsets,. scale errors, in-run bias and thermal drift (if thermal compensation is enabled and available). -**TOPICS:** estimator_sensorbias +**TOPICS:** estimator_sensor_bias ## Fields diff --git a/docs/uk/msg_docs/EstimatorStatus.md b/docs/uk/msg_docs/EstimatorStatus.md index 64c57e7f53..22058756d9 100644 --- a/docs/uk/msg_docs/EstimatorStatus.md +++ b/docs/uk/msg_docs/EstimatorStatus.md @@ -51,52 +51,52 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | -------- | ------------------------------------------------------------------------------------------------- | -| GPS_CHECK_FAIL_GPS_FIX | `uint8` | 0 | 0 : insufficient fix type (no 3D solution) | -| GPS_CHECK_FAIL_MIN_SAT_COUNT | `uint8` | 1 | 1 : minimum required sat count fail | -| GPS_CHECK_FAIL_MAX_PDOP | `uint8` | 2 | 2 : maximum allowed PDOP fail | -| GPS_CHECK_FAIL_MAX_HORZ_ERR | `uint8` | 3 | 3 : maximum allowed horizontal position error fail | -| GPS_CHECK_FAIL_MAX_VERT_ERR | `uint8` | 4 | 4 : maximum allowed vertical position error fail | -| GPS_CHECK_FAIL_MAX_SPD_ERR | `uint8` | 5 | 5 : maximum allowed speed error fail | -| GPS_CHECK_FAIL_MAX_HORZ_DRIFT | `uint8` | 6 | 6 : maximum allowed horizontal position drift fail - requires stationary vehicle | -| GPS_CHECK_FAIL_MAX_VERT_DRIFT | `uint8` | 7 | 7 : maximum allowed vertical position drift fail - requires stationary vehicle | -| GPS_CHECK_FAIL_MAX_HORZ_SPD_ERR | `uint8` | 8 | 8 : maximum allowed horizontal speed fail - requires stationary vehicle | -| GPS_CHECK_FAIL_MAX_VERT_SPD_ERR | `uint8` | 9 | 9 : maximum allowed vertical velocity discrepancy fail | -| GPS_CHECK_FAIL_SPOOFED | `uint8` | 10 | 10 : GPS signal is spoofed | -| GPS_CHECK_FAIL_JAMMED | `uint8` | 11 | 11 : GPS signal is jammed | -| CS_TILT_ALIGN | `uint8` | 0 | 0 - true if the filter tilt alignment is complete | -| CS_YAW_ALIGN | `uint8` | 1 | 1 - true if the filter yaw alignment is complete | -| CS_GNSS_POS | `uint8` | 2 | 2 - true if GNSS position measurements are being fused | -| CS_OPT_FLOW | `uint8` | 3 | 3 - true if optical flow measurements are being fused | -| CS_MAG_HDG | `uint8` | 4 | 4 - true if a simple magnetic yaw heading is being fused | -| CS_MAG_3D | `uint8` | 5 | 5 - true if 3-axis magnetometer measurement are being fused | -| CS_MAG_DEC | `uint8` | 6 | 6 - true if synthetic magnetic declination measurements are being fused | -| CS_IN_AIR | `uint8` | 7 | 7 - true when thought to be airborne | -| CS_WIND | `uint8` | 8 | 8 - true when wind velocity is being estimated | -| CS_BARO_HGT | `uint8` | 9 | 9 - true when baro data is being fused | -| CS_RNG_HGT | `uint8` | 10 | 10 - true when range finder data is being fused for height aiding | -| CS_GPS_HGT | `uint8` | 11 | 11 - true when GPS altitude is being fused | -| CS_EV_POS | `uint8` | 12 | 12 - true when local position data from external vision is being fused | -| CS_EV_YAW | `uint8` | 13 | 13 - true when yaw data from external vision measurements is being fused | -| CS_EV_HGT | `uint8` | 14 | 14 - true when height data from external vision measurements is being fused | -| CS_BETA | `uint8` | 15 | 15 - true when synthetic sideslip measurements are being fused | -| CS_MAG_FIELD | `uint8` | 16 | 16 - true when only the magnetic field states are updated by the magnetometer | -| CS_FIXED_WING | `uint8` | 17 | 17 - true when thought to be operating as a fixed wing vehicle with constrained sideslip | -| CS_MAG_FAULT | `uint8` | 18 | 18 - true when the magnetometer has been declared faulty and is no longer being used | -| CS_ASPD | `uint8` | 19 | 19 - true when airspeed measurements are being fused | -| CS_GND_EFFECT | `uint8` | 20 | 20 - true when when protection from ground effect induced static pressure rise is active | -| CS_RNG_STUCK | `uint8` | 21 | 21 - true when a stuck range finder sensor has been detected | -| CS_GPS_YAW | `uint8` | 22 | 22 - true when yaw (not ground course) data from a GPS receiver is being fused | -| CS_MAG_ALIGNED | `uint8` | 23 | 23 - true when the in-flight mag field alignment has been completed | -| CS_EV_VEL | `uint8` | 24 | 24 - true when local frame velocity data fusion from external vision measurements is intended | -| CS_SYNTHETIC_MAG_Z | `uint8` | 25 | 25 - true when we are using a synthesized measurement for the magnetometer Z component | -| CS_VEHICLE_AT_REST | `uint8` | 26 | 26 - true when the vehicle is at rest | -| CS_GPS_YAW_FAULT | `uint8` | 27 | 27 - true when the GNSS heading has been declared faulty and is no longer being used | -| CS_RNG_FAULT | `uint8` | 28 | 28 - true when the range finder has been declared faulty and is no longer being used | -| CS_GNSS_VEL | `uint8` | 44 | 44 - true if GNSS velocity measurement fusion is intended | -| CS_GNSS_FAULT | `uint8` | 45 | 45 - true if GNSS measurements have been declared faulty and are no longer used | -| CS_YAW_MANUAL | `uint8` | 46 | 46 - true if yaw has been set manually | +| Назва | Тип | Значення | Опис | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | -------- | ------------------------------------------------------------------------------------------------- | +| GPS_CHECK_FAIL_GPS_FIX | `uint8` | 0 | 0 : insufficient fix type (no 3D solution) | +| GPS_CHECK_FAIL_MIN_SAT_COUNT | `uint8` | 1 | 1 : minimum required sat count fail | +| GPS_CHECK_FAIL_MAX_PDOP | `uint8` | 2 | 2 : maximum allowed PDOP fail | +| GPS_CHECK_FAIL_MAX_HORZ_ERR | `uint8` | 3 | 3 : maximum allowed horizontal position error fail | +| GPS_CHECK_FAIL_MAX_VERT_ERR | `uint8` | 4 | 4 : maximum allowed vertical position error fail | +| GPS_CHECK_FAIL_MAX_SPD_ERR | `uint8` | 5 | 5 : maximum allowed speed error fail | +| GPS_CHECK_FAIL_MAX_HORZ_DRIFT | `uint8` | 6 | 6 : maximum allowed horizontal position drift fail - requires stationary vehicle | +| GPS_CHECK_FAIL_MAX_VERT_DRIFT | `uint8` | 7 | 7 : maximum allowed vertical position drift fail - requires stationary vehicle | +| GPS_CHECK_FAIL_MAX_HORZ_SPD_ERR | `uint8` | 8 | 8 : maximum allowed horizontal speed fail - requires stationary vehicle | +| GPS_CHECK_FAIL_MAX_VERT_SPD_ERR | `uint8` | 9 | 9 : maximum allowed vertical velocity discrepancy fail | +| GPS_CHECK_FAIL_SPOOFED | `uint8` | 10 | 10 : GPS signal is spoofed | +| GPS_CHECK_FAIL_JAMMED | `uint8` | 11 | 11 : GPS signal is jammed | +| CS_TILT_ALIGN | `uint8` | 0 | 0 - true if the filter tilt alignment is complete | +| CS_YAW_ALIGN | `uint8` | 1 | 1 - true if the filter yaw alignment is complete | +| CS_GNSS_POS | `uint8` | 2 | 2 - true if GNSS position measurements are being fused | +| CS_OPT_FLOW | `uint8` | 3 | 3 - true if optical flow measurements are being fused | +| CS_MAG_HDG | `uint8` | 4 | 4 - true if a simple magnetic yaw heading is being fused | +| CS_MAG_3D | `uint8` | 5 | 5 - true if 3-axis magnetometer measurement are being fused | +| CS_MAG_DEC | `uint8` | 6 | 6 - true if synthetic magnetic declination measurements are being fused | +| CS_IN_AIR | `uint8` | 7 | 7 - true when thought to be airborne | +| CS_WIND | `uint8` | 8 | 8 - true when wind velocity is being estimated | +| CS_BARO_HGT | `uint8` | 9 | 9 - true when baro data is being fused | +| CS_RNG_HGT | `uint8` | 10 | 10 - true when range finder data is being fused for height aiding | +| CS_GPS_HGT | `uint8` | 11 | 11 - true when GPS altitude is being fused | +| CS_EV_POS | `uint8` | 12 | 12 - true when local position data from external vision is being fused | +| CS_EV_YAW | `uint8` | 13 | 13 - true when yaw data from external vision measurements is being fused | +| CS_EV_HGT | `uint8` | 14 | 14 - true when height data from external vision measurements is being fused | +| CS_BETA | `uint8` | 15 | 15 - true when synthetic sideslip measurements are being fused | +| CS_MAG_FIELD | `uint8` | 16 | 16 - true when only the magnetic field states are updated by the magnetometer | +| CS_FIXED_WING | `uint8` | 17 | 17 - true when thought to be operating as a fixed wing vehicle with constrained sideslip | +| CS_MAG_FAULT | `uint8` | 18 | 18 - true when the magnetometer has been declared faulty and is no longer being used | +| CS_ASPD | `uint8` | 19 | 19 - true when airspeed measurements are being fused | +| CS_GND_EFFECT | `uint8` | 20 | 20 - true when when protection from ground effect induced static pressure rise is active | +| CS_RNG_STUCK | `uint8` | 21 | 21 - true when a stuck range finder sensor has been detected | +| CS_GPS_YAW | `uint8` | 22 | 22 - true when yaw (not ground course) data from a GPS receiver is being fused | +| CS_MAG_ALIGNED | `uint8` | 23 | 23 - true when the in-flight mag field alignment has been completed | +| CS_EV_VEL | `uint8` | 24 | 24 - true when local frame velocity data fusion from external vision measurements is intended | +| CS_SYNTHETIC_MAG_Z | `uint8` | 25 | 25 - true when we are using a synthesized measurement for the magnetometer Z component | +| CS_VEHICLE_AT_REST | `uint8` | 26 | 26 - true when the vehicle is at rest | +| CS_GPS_YAW_FAULT | `uint8` | 27 | 27 - true when the GNSS heading has been declared faulty and is no longer being used | +| CS_RNG_FAULT | `uint8` | 28 | 28 - true when the range finder has been declared faulty and is no longer being used | +| CS_GNSS_VEL | `uint8` | 44 | 44 - true if GNSS velocity measurement fusion is intended | +| CS_GNSS_FAULT | `uint8` | 45 | 45 - true if GNSS measurements have been declared faulty and are no longer used | +| CS_YAW_MANUAL | `uint8` | 46 | 46 - true if yaw has been set manually | ## Source Message diff --git a/docs/uk/msg_docs/EstimatorStatusFlags.md b/docs/uk/msg_docs/EstimatorStatusFlags.md index 29d6a2cd0e..3a52606275 100644 --- a/docs/uk/msg_docs/EstimatorStatusFlags.md +++ b/docs/uk/msg_docs/EstimatorStatusFlags.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # EstimatorStatusFlags (повідомлення UORB) -**TOPICS:** estimator_statusflags +**TOPICS:** estimator_status_flags ## Fields @@ -61,6 +61,8 @@ pageClass: is-wide-page | cs_gnss_fault | `bool` | | | 45 - true if GNSS true if GNSS measurements (lat, lon, vel) have been declared faulty | | cs_yaw_manual | `bool` | | | 46 - true if yaw has been set manually | | cs_gnss_hgt_fault | `bool` | | | 47 - true if GNSS true if GNSS measurements (alt) have been declared faulty | +| cs_in_transition | `bool` | | | 48 - true if the vehicle is in vtol transition | +| cs_heading_observable | `bool` | | | 49 - true when heading is observable | | fault_status_changes | `uint32` | | | number of filter fault status (fs) changes | | fs_bad_mag_x | `bool` | | | 0 - true if the fusion of the magnetometer X-axis has encountered a numerical error | | fs_bad_mag_y | `bool` | | | 1 - true if the fusion of the magnetometer Y-axis has encountered a numerical error | @@ -136,6 +138,8 @@ bool cs_gnss_vel # 44 - true if GNSS velocity measurement fusion bool cs_gnss_fault # 45 - true if GNSS true if GNSS measurements (lat, lon, vel) have been declared faulty bool cs_yaw_manual # 46 - true if yaw has been set manually bool cs_gnss_hgt_fault # 47 - true if GNSS true if GNSS measurements (alt) have been declared faulty +bool cs_in_transition # 48 - true if the vehicle is in vtol transition +bool cs_heading_observable # 49 - true when heading is observable # fault status uint32 fault_status_changes # number of filter fault status (fs) changes diff --git a/docs/uk/msg_docs/Event.md b/docs/uk/msg_docs/Event.md index 5be6cbba4a..137d27ec40 100644 --- a/docs/uk/msg_docs/Event.md +++ b/docs/uk/msg_docs/Event.md @@ -20,10 +20,10 @@ Events interface. ## Constants -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------------------------- | -------- | -------- | ---- | -| MESSAGE_VERSION | `uint32` | 1 | | -| ORB_QUEUE_LENGTH | `uint8` | 16 | | +| Назва | Тип | Значення | Опис | +| ----------------------------------------------------------------------------------------- | -------- | -------- | ---- | +| MESSAGE_VERSION | `uint32` | 1 | | +| ORB_QUEUE_LENGTH | `uint8` | 16 | | ## Source Message diff --git a/docs/uk/msg_docs/EventV0.md b/docs/uk/msg_docs/EventV0.md index 4bf5f84e9c..430ed5404d 100644 --- a/docs/uk/msg_docs/EventV0.md +++ b/docs/uk/msg_docs/EventV0.md @@ -6,7 +6,7 @@ pageClass: is-wide-page this message is required here in the msg_old folder because other msg are depending on it. Events interface. -**TOPICS:** eventv0 +**TOPICS:** event_v0 ## Fields @@ -20,10 +20,10 @@ this message is required here in the msg_old folder because other msg are depend ## Constants -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------------------------- | -------- | -------- | ---- | -| MESSAGE_VERSION | `uint32` | 0 | | -| ORB_QUEUE_LENGTH | `uint8` | 16 | | +| Назва | Тип | Значення | Опис | +| ----------------------------------------------------------------------------------------- | -------- | -------- | ---- | +| MESSAGE_VERSION | `uint32` | 0 | | +| ORB_QUEUE_LENGTH | `uint8` | 16 | | ## Source Message diff --git a/docs/uk/msg_docs/FailsafeFlags.md b/docs/uk/msg_docs/FailsafeFlags.md index de1c3eb243..d53372e6a9 100644 --- a/docs/uk/msg_docs/FailsafeFlags.md +++ b/docs/uk/msg_docs/FailsafeFlags.md @@ -46,6 +46,11 @@ The flag comments are used as label for the failsafe state machine simulation | battery_warning | `uint8` | | | Battery warning level (see BatteryStatus.msg) | | battery_low_remaining_time | `bool` | | | Low battery based on remaining flight time | | battery_unhealthy | `bool` | | | Battery unhealthy | +| fd_critical_failure | `bool` | | | Critical failure (attitude limit exceeded, or external ATS) | +| fd_esc_arming_failure | `bool` | | | ESC failed to arm | +| fd_imbalanced_prop | `bool` | | | Imbalanced propeller detected | +| fd_motor_failure | `bool` | | | Motor failure | +| fd_alt_loss | `bool` | | | Uncommanded altitude loss (rotary-wing, altitude-controlled flight) | | geofence_breached | `bool` | | | Geofence breached (one or multiple) | | mission_failure | `bool` | | | Mission failure | | vtol_fixed_wing_system_failure | `bool` | | | vehicle in fixed-wing system failure failsafe mode (after quad-chute) | @@ -53,10 +58,8 @@ The flag comments are used as label for the failsafe state machine simulation | flight_time_limit_exceeded | `bool` | | | Maximum flight time exceeded | | position_accuracy_low | `bool` | | | Position estimate has dropped below threshold, but is currently still declared valid | | navigator_failure | `bool` | | | Navigator failed to execute a mode | -| fd_critical_failure | `bool` | | | Critical failure (attitude/altitude limit exceeded, or external ATS) | -| fd_esc_arming_failure | `bool` | | | ESC failed to arm | -| fd_imbalanced_prop | `bool` | | | Imbalanced propeller detected | -| fd_motor_failure | `bool` | | | Motor failure | +| parachute_unhealthy | `bool` | | | Parachute system missing or unhealthy | +| remote_id_unhealthy | `bool` | | | Remote ID (Open Drone ID) system missing or unhealthy | ## Source Message @@ -112,6 +115,13 @@ uint8 battery_warning # Battery warning level (see BatteryStatus bool battery_low_remaining_time # Low battery based on remaining flight time bool battery_unhealthy # Battery unhealthy +# Failure detector +bool fd_critical_failure # Critical failure (attitude limit exceeded, or external ATS) +bool fd_esc_arming_failure # ESC failed to arm +bool fd_imbalanced_prop # Imbalanced propeller detected +bool fd_motor_failure # Motor failure +bool fd_alt_loss # Uncommanded altitude loss (rotary-wing, altitude-controlled flight) + # Other bool geofence_breached # Geofence breached (one or multiple) bool mission_failure # Mission failure @@ -120,12 +130,8 @@ bool wind_limit_exceeded # Wind limit exceeded bool flight_time_limit_exceeded # Maximum flight time exceeded bool position_accuracy_low # Position estimate has dropped below threshold, but is currently still declared valid bool navigator_failure # Navigator failed to execute a mode - -# Failure detector -bool fd_critical_failure # Critical failure (attitude/altitude limit exceeded, or external ATS) -bool fd_esc_arming_failure # ESC failed to arm -bool fd_imbalanced_prop # Imbalanced propeller detected -bool fd_motor_failure # Motor failure +bool parachute_unhealthy # Parachute system missing or unhealthy +bool remote_id_unhealthy # Remote ID (Open Drone ID) system missing or unhealthy ``` ::: diff --git a/docs/uk/msg_docs/FailureDetectorStatus.md b/docs/uk/msg_docs/FailureDetectorStatus.md index 176312bd59..eea24c48fa 100644 --- a/docs/uk/msg_docs/FailureDetectorStatus.md +++ b/docs/uk/msg_docs/FailureDetectorStatus.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # FailureDetectorStatus (повідомлення UORB) -**TOPICS:** failure_detectorstatus +**TOPICS:** failure_detector_status ## Fields diff --git a/docs/uk/msg_docs/FigureEightStatus.md b/docs/uk/msg_docs/FigureEightStatus.md index 9ac9b200f7..421dafaea8 100644 --- a/docs/uk/msg_docs/FigureEightStatus.md +++ b/docs/uk/msg_docs/FigureEightStatus.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # FigureEightStatus (повідомлення UORB) -**TOPICS:** figure_eightstatus +**TOPICS:** figure_eight_status ## Fields diff --git a/docs/uk/msg_docs/FixedWingLateralGuidanceStatus.md b/docs/uk/msg_docs/FixedWingLateralGuidanceStatus.md index 1cef22460f..816eada352 100644 --- a/docs/uk/msg_docs/FixedWingLateralGuidanceStatus.md +++ b/docs/uk/msg_docs/FixedWingLateralGuidanceStatus.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Fixed Wing Lateral Guidance Status message. Published by fw_pos_control module to report the resultant lateral setpoints and NPFG debug outputs. -**TOPICS:** fixed_winglateral_guidancestatus +**TOPICS:** fixed_wing_lateral_guidance_status ## Fields diff --git a/docs/uk/msg_docs/FixedWingLateralSetpoint.md b/docs/uk/msg_docs/FixedWingLateralSetpoint.md index b4c3f069dd..150025c21f 100644 --- a/docs/uk/msg_docs/FixedWingLateralSetpoint.md +++ b/docs/uk/msg_docs/FixedWingLateralSetpoint.md @@ -4,24 +4,27 @@ pageClass: is-wide-page # FixedWingLateralSetpoint (UORB message) -Fixed Wing Lateral Setpoint message. Used by the fw_lateral_longitudinal_control module. At least one of course, airspeed_direction, or lateral_acceleration must be finite. +Fixed Wing Lateral Setpoint message. -**TOPICS:** fixed_winglateral_setpoint +Used by the fw_lateral_longitudinal_control module +At least one of course, airspeed_direction, or lateral_acceleration must be finite. + +**TOPICS:** fixed_wing_lateral_setpoint ## Fields | Назва | Тип | Unit [Frame] | Range/Enum | Опис | | ----------------------------------------- | --------- | ---------------------------------------------------------------- | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| timestamp | `uint64` | | | time since system start (microseconds) | +| timestamp | `uint64` | us | | Time since system start | | course | `float32` | rad | [-pi : pi] | Desired direction of travel over ground w.r.t (true) North. NAN if not controlled directly. | | airspeed_direction | `float32` | rad | [-pi : pi] | Desired horizontal angle of airspeed vector w.r.t. (true) North. Same as vehicle heading if in the absence of sideslip. NAN if not controlled directly, takes precedence over course if finite. | -| lateral_acceleration | `float32` | FRD | | Lateral acceleration setpoint. NAN if not controlled directly, used as feedforward if either course setpoint or airspeed_direction is finite. | +| lateral_acceleration | `float32` | m/s^2 [FRD] | | Lateral acceleration setpoint. NAN if not controlled directly, used as feedforward if either course setpoint or airspeed_direction is finite. | ## Constants -| Назва | Тип | Значення | Опис | -| -------------------------------------------------------------------- | -------- | -------- | ---- | -| MESSAGE_VERSION | `uint32` | 0 | | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------ | -------- | -------- | ---- | +| MESSAGE_VERSION | `uint32` | 0 | | ## Source Message @@ -32,16 +35,17 @@ Click here to see original file ```c # Fixed Wing Lateral Setpoint message +# # Used by the fw_lateral_longitudinal_control module # At least one of course, airspeed_direction, or lateral_acceleration must be finite. uint32 MESSAGE_VERSION = 0 -uint64 timestamp # time since system start (microseconds) +uint64 timestamp # [us] Time since system start -float32 course # [rad] [@range -pi, pi] Desired direction of travel over ground w.r.t (true) North. NAN if not controlled directly. -float32 airspeed_direction # [rad] [@range -pi, pi] Desired horizontal angle of airspeed vector w.r.t. (true) North. Same as vehicle heading if in the absence of sideslip. NAN if not controlled directly, takes precedence over course if finite. -float32 lateral_acceleration # [m/s^2] [FRD] Lateral acceleration setpoint. NAN if not controlled directly, used as feedforward if either course setpoint or airspeed_direction is finite. +float32 course # [rad] [@range -pi, pi] Desired direction of travel over ground w.r.t (true) North. NAN if not controlled directly. +float32 airspeed_direction # [rad] [@range -pi, pi] Desired horizontal angle of airspeed vector w.r.t. (true) North. Same as vehicle heading if in the absence of sideslip. NAN if not controlled directly, takes precedence over course if finite. +float32 lateral_acceleration # [m/s^2] [@frame FRD] Lateral acceleration setpoint. NAN if not controlled directly, used as feedforward if either course setpoint or airspeed_direction is finite. ``` ::: diff --git a/docs/uk/msg_docs/FixedWingLateralStatus.md b/docs/uk/msg_docs/FixedWingLateralStatus.md index 694d0b58f3..fd63176a7b 100644 --- a/docs/uk/msg_docs/FixedWingLateralStatus.md +++ b/docs/uk/msg_docs/FixedWingLateralStatus.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Fixed Wing Lateral Status message. Published by the fw_lateral_longitudinal_control module to report the resultant lateral setpoint. -**TOPICS:** fixed_winglateral_status +**TOPICS:** fixed_wing_lateral_status ## Fields diff --git a/docs/uk/msg_docs/FixedWingLongitudinalSetpoint.md b/docs/uk/msg_docs/FixedWingLongitudinalSetpoint.md index 6f9514b496..4d34a51eed 100644 --- a/docs/uk/msg_docs/FixedWingLongitudinalSetpoint.md +++ b/docs/uk/msg_docs/FixedWingLongitudinalSetpoint.md @@ -4,26 +4,30 @@ pageClass: is-wide-page # FixedWingLongitudinalSetpoint (UORB message) -Fixed Wing Longitudinal Setpoint message. Used by the fw_lateral_longitudinal_control module. If pitch_direct and throttle_direct are not both finite, then the controller relies on altitude/height_rate and equivalent_airspeed to control vertical motion. If both altitude and height_rate are NAN, the controller maintains the current altitude. +Fixed Wing Longitudinal Setpoint message. -**TOPICS:** fixed_winglongitudinal_setpoint +Used by the fw_lateral_longitudinal_control module +If pitch_direct and throttle_direct are not both finite, then the controller relies on altitude/height_rate and equivalent_airspeed to control vertical motion. +If both altitude and height_rate are NAN, the controller maintains the current altitude. + +**TOPICS:** fixed_wing_longitudinal_setpoint ## Fields | Назва | Тип | Unit [Frame] | Range/Enum | Опис | | ---------------------------------------- | --------- | ---------------------------------------------------------------- | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------- | -| timestamp | `uint64` | | | time since system start (microseconds) | +| timestamp | `uint64` | us | | Time since system start | | altitude | `float32` | m | | Altitude setpoint AMSL, not controlled directly if NAN or if height_rate is finite | -| height_rate | `float32` | ENU | | Scalar height rate setpoint. NAN if not controlled directly | +| height_rate | `float32` | m/s [ENU] | | Scalar height rate setpoint. NAN if not controlled directly | | equivalent_airspeed | `float32` | m/s | [0 : inf] | Scalar equivalent airspeed setpoint. NAN if system default should be used | -| pitch_direct | `float32` | FRD | [-pi : pi] | NAN if not controlled, overrides total energy controller | +| pitch_direct | `float32` | rad [FRD] | [-pi : pi] | NAN if not controlled, overrides total energy controller | | throttle_direct | `float32` | norm | [0 : 1] | NAN if not controlled, overrides total energy controller | ## Constants -| Назва | Тип | Значення | Опис | -| -------------------------------------------------------------------- | -------- | -------- | ---- | -| MESSAGE_VERSION | `uint32` | 0 | | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------ | -------- | -------- | ---- | +| MESSAGE_VERSION | `uint32` | 0 | | ## Source Message @@ -34,19 +38,20 @@ Click here to see original file ```c # Fixed Wing Longitudinal Setpoint message +# # Used by the fw_lateral_longitudinal_control module # If pitch_direct and throttle_direct are not both finite, then the controller relies on altitude/height_rate and equivalent_airspeed to control vertical motion. # If both altitude and height_rate are NAN, the controller maintains the current altitude. uint32 MESSAGE_VERSION = 0 -uint64 timestamp # time since system start (microseconds) +uint64 timestamp # [us] Time since system start -float32 altitude # [m] Altitude setpoint AMSL, not controlled directly if NAN or if height_rate is finite -float32 height_rate # [m/s] [ENU] Scalar height rate setpoint. NAN if not controlled directly -float32 equivalent_airspeed # [m/s] [@range 0, inf] Scalar equivalent airspeed setpoint. NAN if system default should be used -float32 pitch_direct # [rad] [@range -pi, pi] [FRD] NAN if not controlled, overrides total energy controller -float32 throttle_direct # [norm] [@range 0,1] NAN if not controlled, overrides total energy controller +float32 altitude # [m] Altitude setpoint AMSL, not controlled directly if NAN or if height_rate is finite +float32 height_rate # [m/s] [@frame ENU] Scalar height rate setpoint. NAN if not controlled directly +float32 equivalent_airspeed # [m/s] [@range 0, inf] Scalar equivalent airspeed setpoint. NAN if system default should be used +float32 pitch_direct # [rad] [@range -pi, pi] [@frame FRD] NAN if not controlled, overrides total energy controller +float32 throttle_direct # [norm] [@range 0,1] NAN if not controlled, overrides total energy controller ``` ::: diff --git a/docs/uk/msg_docs/FixedWingRunwayControl.md b/docs/uk/msg_docs/FixedWingRunwayControl.md index 3843f72858..d0ae616f4c 100644 --- a/docs/uk/msg_docs/FixedWingRunwayControl.md +++ b/docs/uk/msg_docs/FixedWingRunwayControl.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Auxiliary control fields for fixed-wing runway takeoff/landing. -**TOPICS:** fixed_wingrunway_control +**TOPICS:** fixed_wing_runway_control ## Fields @@ -19,12 +19,12 @@ Auxiliary control fields for fixed-wing runway takeoff/landing. ## Constants -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------------------------------------------------------------ | ------- | -------- | -------------------------------------------------------------------------------- | -| STATE_THROTTLE_RAMP | `uint8` | 0 | ramping up throttle | -| STATE_CLAMPED_TO_RUNWAY | `uint8` | 1 | clamped to runway, controlling yaw directly (wheel or rudder) | -| STATE_CLIMBOUT | `uint8` | 2 | climbout to safe height before navigation | -| STATE_FLYING | `uint8` | 3 | navigate freely | +| Назва | Тип | Значення | Опис | +| ---------------------------------------------------------------------------------------------------------------------------- | ------- | -------- | -------------------------------------------------------------------------------- | +| STATE_THROTTLE_RAMP | `uint8` | 0 | ramping up throttle | +| STATE_CLAMPED_TO_RUNWAY | `uint8` | 1 | clamped to runway, controlling yaw directly (wheel or rudder) | +| STATE_CLIMBOUT | `uint8` | 2 | climbout to safe height before navigation | +| STATE_FLYING | `uint8` | 3 | navigate freely | ## Source Message diff --git a/docs/uk/msg_docs/FlightPhaseEstimation.md b/docs/uk/msg_docs/FlightPhaseEstimation.md index 2a898f54b9..f0d97a6c06 100644 --- a/docs/uk/msg_docs/FlightPhaseEstimation.md +++ b/docs/uk/msg_docs/FlightPhaseEstimation.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # FlightPhaseEstimation (повідомлення UORB) -**TOPICS:** flight_phaseestimation +**TOPICS:** flight_phase_estimation ## Fields @@ -15,12 +15,12 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| --------------------------------------------------------------------------------------------------- | ------- | -------- | ------------------------------- | -| FLIGHT_PHASE_UNKNOWN | `uint8` | 0 | vehicle flight phase is unknown | -| FLIGHT_PHASE_LEVEL | `uint8` | 1 | Vehicle is in level flight | -| FLIGHT_PHASE_DESCEND | `uint8` | 2 | vehicle is in descend | -| FLIGHT_PHASE_CLIMB | `uint8` | 3 | vehicle is climbing | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------------------------------------- | ------- | -------- | ------------------------------- | +| FLIGHT_PHASE_UNKNOWN | `uint8` | 0 | vehicle flight phase is unknown | +| FLIGHT_PHASE_LEVEL | `uint8` | 1 | Vehicle is in level flight | +| FLIGHT_PHASE_DESCEND | `uint8` | 2 | vehicle is in descend | +| FLIGHT_PHASE_CLIMB | `uint8` | 3 | vehicle is climbing | ## Source Message diff --git a/docs/uk/msg_docs/FollowTargetEstimator.md b/docs/uk/msg_docs/FollowTargetEstimator.md index df4a781847..220880b739 100644 --- a/docs/uk/msg_docs/FollowTargetEstimator.md +++ b/docs/uk/msg_docs/FollowTargetEstimator.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # FollowTargetEstimator (UORB message) -**TOPICS:** follow_targetestimator +**TOPICS:** follow_target_estimator ## Fields diff --git a/docs/uk/msg_docs/FollowTargetStatus.md b/docs/uk/msg_docs/FollowTargetStatus.md index d2820f5c90..4bcb73a290 100644 --- a/docs/uk/msg_docs/FollowTargetStatus.md +++ b/docs/uk/msg_docs/FollowTargetStatus.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # FollowTargetStatus (повідомлення UORB) -**TOPICS:** follow_targetstatus +**TOPICS:** follow_target_status ## Fields diff --git a/docs/uk/msg_docs/FuelTankStatus.md b/docs/uk/msg_docs/FuelTankStatus.md index 3908246f79..fced3efcf0 100644 --- a/docs/uk/msg_docs/FuelTankStatus.md +++ b/docs/uk/msg_docs/FuelTankStatus.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # FuelTankStatus (UORB message) -**TOPICS:** fuel_tankstatus +**TOPICS:** fuel_tank_status ## Fields @@ -22,11 +22,11 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| -------------------------------------------------------------------------------------------------------------------------- | ------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| MAV_FUEL_TYPE_UNKNOWN | `uint8` | 0 | fuel type not specified. Fuel levels are normalized (i.e., maximum is 1, and other levels are relative to 1). | -| MAV_FUEL_TYPE_LIQUID | `uint8` | 1 | represents generic liquid fuels, such as gasoline or diesel. Fuel levels are measured in millilitres (ml), and flow rates in millilitres per second (ml/s). | -| MAV_FUEL_TYPE_GAS | `uint8` | 2 | represents a gas fuel, such as hydrogen, methane, or propane. Fuel levels are in kilo-Pascal (kPa), and flow rates are in milliliters per second (ml/s). | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------------------------------------------------------------ | ------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| MAV_FUEL_TYPE_UNKNOWN | `uint8` | 0 | fuel type not specified. Fuel levels are normalized (i.e., maximum is 1, and other levels are relative to 1). | +| MAV_FUEL_TYPE_LIQUID | `uint8` | 1 | represents generic liquid fuels, such as gasoline or diesel. Fuel levels are measured in millilitres (ml), and flow rates in millilitres per second (ml/s). | +| MAV_FUEL_TYPE_GAS | `uint8` | 2 | represents a gas fuel, such as hydrogen, methane, or propane. Fuel levels are in kilo-Pascal (kPa), and flow rates are in milliliters per second (ml/s). | ## Source Message diff --git a/docs/uk/msg_docs/GeneratorStatus.md b/docs/uk/msg_docs/GeneratorStatus.md index 3a0562b865..b80362f319 100644 --- a/docs/uk/msg_docs/GeneratorStatus.md +++ b/docs/uk/msg_docs/GeneratorStatus.md @@ -25,31 +25,31 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| STATUS_FLAG_OFF | `uint64` | 1 | Generator is off. | -| STATUS_FLAG_READY | `uint64` | 2 | Generator is ready to start generating power. | -| STATUS_FLAG_GENERATING | `uint64` | 4 | Generator is generating power. | -| STATUS_FLAG_CHARGING | `uint64` | 8 | Generator is charging the batteries (generating enough power to charge and provide the load). | -| STATUS_FLAG_REDUCED_POWER | `uint64` | 16 | Generator is operating at a reduced maximum power. | -| STATUS_FLAG_MAXPOWER | `uint64` | 32 | Generator is providing the maximum output. | -| STATUS_FLAG_OVERTEMP_WARNING | `uint64` | 64 | Generator is near the maximum operating temperature, cooling is insufficient. | -| STATUS_FLAG_OVERTEMP_FAULT | `uint64` | 128 | Generator hit the maximum operating temperature and shutdown. | -| STATUS_FLAG_ELECTRONICS_OVERTEMP_WARNING | `uint64` | 256 | Power electronics are near the maximum operating temperature, cooling is insufficient. | -| STATUS_FLAG_ELECTRONICS_OVERTEMP_FAULT | `uint64` | 512 | Power electronics hit the maximum operating temperature and shutdown. | -| STATUS_FLAG_ELECTRONICS_FAULT | `uint64` | 1024 | Power electronics experienced a fault and shutdown. | -| STATUS_FLAG_POWERSOURCE_FAULT | `uint64` | 2048 | The power source supplying the generator failed e.g. mechanical generator stopped, tether is no longer providing power, solar cell is in shade, hydrogen reaction no longer happening. | -| STATUS_FLAG_COMMUNICATION_WARNING | `uint64` | 4096 | Generator controller having communication problems. | -| STATUS_FLAG_COOLING_WARNING | `uint64` | 8192 | Power electronic or generator cooling system error. | -| STATUS_FLAG_POWER_RAIL_FAULT | `uint64` | 16384 | Generator controller power rail experienced a fault. | -| STATUS_FLAG_OVERCURRENT_FAULT | `uint64` | 32768 | Generator controller exceeded the overcurrent threshold and shutdown to prevent damage. | -| STATUS_FLAG_BATTERY_OVERCHARGE_CURRENT_FAULT | `uint64` | 65536 | Generator controller detected a high current going into the batteries and shutdown to prevent battery damage. | -| STATUS_FLAG_OVERVOLTAGE_FAULT | `uint64` | 131072 | Generator controller exceeded it's overvoltage threshold and shutdown to prevent it exceeding the voltage rating. | -| STATUS_FLAG_BATTERY_UNDERVOLT_FAULT | `uint64` | 262144 | Batteries are under voltage (generator will not start). | -| STATUS_FLAG_START_INHIBITED | `uint64` | 524288 | Generator start is inhibited by e.g. a safety switch. | -| STATUS_FLAG_MAINTENANCE_REQUIRED | `uint64` | 1048576 | Generator requires maintenance. | -| STATUS_FLAG_WARMING_UP | `uint64` | 2097152 | Generator is not ready to generate yet. | -| STATUS_FLAG_IDLE | `uint64` | 4194304 | Generator is idle. | +| Назва | Тип | Значення | Опис | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| STATUS_FLAG_OFF | `uint64` | 1 | Generator is off. | +| STATUS_FLAG_READY | `uint64` | 2 | Generator is ready to start generating power. | +| STATUS_FLAG_GENERATING | `uint64` | 4 | Generator is generating power. | +| STATUS_FLAG_CHARGING | `uint64` | 8 | Generator is charging the batteries (generating enough power to charge and provide the load). | +| STATUS_FLAG_REDUCED_POWER | `uint64` | 16 | Generator is operating at a reduced maximum power. | +| STATUS_FLAG_MAXPOWER | `uint64` | 32 | Generator is providing the maximum output. | +| STATUS_FLAG_OVERTEMP_WARNING | `uint64` | 64 | Generator is near the maximum operating temperature, cooling is insufficient. | +| STATUS_FLAG_OVERTEMP_FAULT | `uint64` | 128 | Generator hit the maximum operating temperature and shutdown. | +| STATUS_FLAG_ELECTRONICS_OVERTEMP_WARNING | `uint64` | 256 | Power electronics are near the maximum operating temperature, cooling is insufficient. | +| STATUS_FLAG_ELECTRONICS_OVERTEMP_FAULT | `uint64` | 512 | Power electronics hit the maximum operating temperature and shutdown. | +| STATUS_FLAG_ELECTRONICS_FAULT | `uint64` | 1024 | Power electronics experienced a fault and shutdown. | +| STATUS_FLAG_POWERSOURCE_FAULT | `uint64` | 2048 | The power source supplying the generator failed e.g. mechanical generator stopped, tether is no longer providing power, solar cell is in shade, hydrogen reaction no longer happening. | +| STATUS_FLAG_COMMUNICATION_WARNING | `uint64` | 4096 | Generator controller having communication problems. | +| STATUS_FLAG_COOLING_WARNING | `uint64` | 8192 | Power electronic or generator cooling system error. | +| STATUS_FLAG_POWER_RAIL_FAULT | `uint64` | 16384 | Generator controller power rail experienced a fault. | +| STATUS_FLAG_OVERCURRENT_FAULT | `uint64` | 32768 | Generator controller exceeded the overcurrent threshold and shutdown to prevent damage. | +| STATUS_FLAG_BATTERY_OVERCHARGE_CURRENT_FAULT | `uint64` | 65536 | Generator controller detected a high current going into the batteries and shutdown to prevent battery damage. | +| STATUS_FLAG_OVERVOLTAGE_FAULT | `uint64` | 131072 | Generator controller exceeded it's overvoltage threshold and shutdown to prevent it exceeding the voltage rating. | +| STATUS_FLAG_BATTERY_UNDERVOLT_FAULT | `uint64` | 262144 | Batteries are under voltage (generator will not start). | +| STATUS_FLAG_START_INHIBITED | `uint64` | 524288 | Generator start is inhibited by e.g. a safety switch. | +| STATUS_FLAG_MAINTENANCE_REQUIRED | `uint64` | 1048576 | Generator requires maintenance. | +| STATUS_FLAG_WARMING_UP | `uint64` | 2097152 | Generator is not ready to generate yet. | +| STATUS_FLAG_IDLE | `uint64` | 4194304 | Generator is idle. | ## Source Message diff --git a/docs/uk/msg_docs/GeofenceResult.md b/docs/uk/msg_docs/GeofenceResult.md index 8c27e83dee..bcc6c18106 100644 --- a/docs/uk/msg_docs/GeofenceResult.md +++ b/docs/uk/msg_docs/GeofenceResult.md @@ -18,14 +18,14 @@ pageClass: is-wide-page ## Constants -\| Name | Type | Value | Description | -\| ------------------------------------------------------- | ------- | ----- | ------------------------------- | ------ | -\| GF_ACTION_NONE | `uint8` | 0 | no action on geofence violation | -\| GF_ACTION_WARN | `uint8` | 1 | critical mavlink message | -\| GF_ACTION_LOITER | `uint8` | 2 | switch to AUTO | LOITER | -\| GF_ACTION_RTL | `uint8` | 3 | switch to AUTO | RTL | -\| GF_ACTION_TERMINATE | `uint8` | 4 | flight termination | -\| GF_ACTION_LAND | `uint8` | 5 | switch to AUTO | LAND | +\| Name | Type | Value | Description | +\| ----------------------------------------------------- | ------- | ----- | ------------------------------- | ------ | +\| GF_ACTION_NONE | `uint8` | 0 | no action on geofence violation | +\| GF_ACTION_WARN | `uint8` | 1 | critical mavlink message | +\| GF_ACTION_LOITER | `uint8` | 2 | switch to AUTO | LOITER | +\| GF_ACTION_RTL | `uint8` | 3 | switch to AUTO | RTL | +\| GF_ACTION_TERMINATE | `uint8` | 4 | flight termination | +\| GF_ACTION_LAND | `uint8` | 5 | switch to AUTO | LAND | ## Source Message diff --git a/docs/uk/msg_docs/GeofenceStatus.md b/docs/uk/msg_docs/GeofenceStatus.md index 8d28fc8ee5..28f229fb7d 100644 --- a/docs/uk/msg_docs/GeofenceStatus.md +++ b/docs/uk/msg_docs/GeofenceStatus.md @@ -16,10 +16,10 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| --------------------------------------------------------------------------------------------- | ------- | -------- | ---- | -| GF_STATUS_LOADING | `uint8` | 0 | | -| GF_STATUS_READY | `uint8` | 1 | | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------------------------------- | ------- | -------- | ---- | +| GF_STATUS_LOADING | `uint8` | 0 | | +| GF_STATUS_READY | `uint8` | 1 | | ## Source Message diff --git a/docs/uk/msg_docs/GimbalControls.md b/docs/uk/msg_docs/GimbalControls.md index 693d3a3c83..a133967608 100644 --- a/docs/uk/msg_docs/GimbalControls.md +++ b/docs/uk/msg_docs/GimbalControls.md @@ -16,11 +16,11 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------ | ------- | -------- | ---- | -| INDEX_ROLL | `uint8` | 0 | | -| INDEX_PITCH | `uint8` | 1 | | -| INDEX_YAW | `uint8` | 2 | | +| Назва | Тип | Значення | Опис | +| ---------------------------------------------------------- | ------- | -------- | ---- | +| INDEX_ROLL | `uint8` | 0 | | +| INDEX_PITCH | `uint8` | 1 | | +| INDEX_YAW | `uint8` | 2 | | ## Source Message diff --git a/docs/uk/msg_docs/GimbalDeviceAttitudeStatus.md b/docs/uk/msg_docs/GimbalDeviceAttitudeStatus.md index 796fbf9b25..9b4ae4ee3a 100644 --- a/docs/uk/msg_docs/GimbalDeviceAttitudeStatus.md +++ b/docs/uk/msg_docs/GimbalDeviceAttitudeStatus.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # GimbalDeviceAttitudeStatus (повідомлення UORB) -**TOPICS:** gimbal_deviceattitude_status +**TOPICS:** gimbal_device_attitude_status ## Fields @@ -26,15 +26,15 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -------- | ---- | -| DEVICE_FLAGS_RETRACT | `uint16` | 1 | | -| DEVICE_FLAGS_NEUTRAL | `uint16` | 2 | | -| DEVICE_FLAGS_ROLL_LOCK | `uint16` | 4 | | -| DEVICE_FLAGS_PITCH_LOCK | `uint16` | 8 | | -| DEVICE_FLAGS_YAW_LOCK | `uint16` | 16 | | -| DEVICE_FLAGS_YAW_IN_VEHICLE_FRAME | `uint16` | 32 | | -| DEVICE_FLAGS_YAW_IN_EARTH_FRAME | `uint16` | 64 | | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------- | -------- | ---- | +| DEVICE_FLAGS_RETRACT | `uint16` | 1 | | +| DEVICE_FLAGS_NEUTRAL | `uint16` | 2 | | +| DEVICE_FLAGS_ROLL_LOCK | `uint16` | 4 | | +| DEVICE_FLAGS_PITCH_LOCK | `uint16` | 8 | | +| DEVICE_FLAGS_YAW_LOCK | `uint16` | 16 | | +| DEVICE_FLAGS_YAW_IN_VEHICLE_FRAME | `uint16` | 32 | | +| DEVICE_FLAGS_YAW_IN_EARTH_FRAME | `uint16` | 64 | | ## Source Message diff --git a/docs/uk/msg_docs/GimbalDeviceInformation.md b/docs/uk/msg_docs/GimbalDeviceInformation.md index 4617e7a707..1161d195ab 100644 --- a/docs/uk/msg_docs/GimbalDeviceInformation.md +++ b/docs/uk/msg_docs/GimbalDeviceInformation.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # GimbalDeviceInformation (повідомлення UORB) -**TOPICS:** gimbal_deviceinformation +**TOPICS:** gimbal_device_information ## Fields @@ -29,20 +29,20 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -------- | ---- | -| GIMBAL_DEVICE_CAP_FLAGS_HAS_RETRACT | `uint32` | 1 | | -| GIMBAL_DEVICE_CAP_FLAGS_HAS_NEUTRAL | `uint32` | 2 | | -| GIMBAL_DEVICE_CAP_FLAGS_HAS_ROLL_AXIS | `uint32` | 4 | | -| GIMBAL_DEVICE_CAP_FLAGS_HAS_ROLL_FOLLOW | `uint32` | 8 | | -| GIMBAL_DEVICE_CAP_FLAGS_HAS_ROLL_LOCK | `uint32` | 16 | | -| GIMBAL_DEVICE_CAP_FLAGS_HAS_PITCH_AXIS | `uint32` | 32 | | -| GIMBAL_DEVICE_CAP_FLAGS_HAS_PITCH_FOLLOW | `uint32` | 64 | | -| GIMBAL_DEVICE_CAP_FLAGS_HAS_PITCH_LOCK | `uint32` | 128 | | -| GIMBAL_DEVICE_CAP_FLAGS_HAS_YAW_AXIS | `uint32` | 256 | | -| GIMBAL_DEVICE_CAP_FLAGS_HAS_YAW_FOLLOW | `uint32` | 512 | | -| GIMBAL_DEVICE_CAP_FLAGS_HAS_YAW_LOCK | `uint32` | 1024 | | -| GIMBAL_DEVICE_CAP_FLAGS_SUPPORTS_INFINITE_YAW | `uint32` | 2048 | | +| Назва | Тип | Значення | Опис | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -------- | ---- | +| GIMBAL_DEVICE_CAP_FLAGS_HAS_RETRACT | `uint32` | 1 | | +| GIMBAL_DEVICE_CAP_FLAGS_HAS_NEUTRAL | `uint32` | 2 | | +| GIMBAL_DEVICE_CAP_FLAGS_HAS_ROLL_AXIS | `uint32` | 4 | | +| GIMBAL_DEVICE_CAP_FLAGS_HAS_ROLL_FOLLOW | `uint32` | 8 | | +| GIMBAL_DEVICE_CAP_FLAGS_HAS_ROLL_LOCK | `uint32` | 16 | | +| GIMBAL_DEVICE_CAP_FLAGS_HAS_PITCH_AXIS | `uint32` | 32 | | +| GIMBAL_DEVICE_CAP_FLAGS_HAS_PITCH_FOLLOW | `uint32` | 64 | | +| GIMBAL_DEVICE_CAP_FLAGS_HAS_PITCH_LOCK | `uint32` | 128 | | +| GIMBAL_DEVICE_CAP_FLAGS_HAS_YAW_AXIS | `uint32` | 256 | | +| GIMBAL_DEVICE_CAP_FLAGS_HAS_YAW_FOLLOW | `uint32` | 512 | | +| GIMBAL_DEVICE_CAP_FLAGS_HAS_YAW_LOCK | `uint32` | 1024 | | +| GIMBAL_DEVICE_CAP_FLAGS_SUPPORTS_INFINITE_YAW | `uint32` | 2048 | | ## Source Message diff --git a/docs/uk/msg_docs/GimbalDeviceSetAttitude.md b/docs/uk/msg_docs/GimbalDeviceSetAttitude.md index fc8535333c..38c55185eb 100644 --- a/docs/uk/msg_docs/GimbalDeviceSetAttitude.md +++ b/docs/uk/msg_docs/GimbalDeviceSetAttitude.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # GimbalDeviceSetAttitude (повідомлення UORB) -**TOPICS:** gimbal_deviceset_attitude +**TOPICS:** gimbal_device_set_attitude ## Fields @@ -21,13 +21,13 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -------- | ---- | -| GIMBAL_DEVICE_FLAGS_RETRACT | `uint32` | 1 | | -| GIMBAL_DEVICE_FLAGS_NEUTRAL | `uint32` | 2 | | -| GIMBAL_DEVICE_FLAGS_ROLL_LOCK | `uint32` | 4 | | -| GIMBAL_DEVICE_FLAGS_PITCH_LOCK | `uint32` | 8 | | -| GIMBAL_DEVICE_FLAGS_YAW_LOCK | `uint32` | 16 | | +| Назва | Тип | Значення | Опис | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -------- | ---- | +| GIMBAL_DEVICE_FLAGS_RETRACT | `uint32` | 1 | | +| GIMBAL_DEVICE_FLAGS_NEUTRAL | `uint32` | 2 | | +| GIMBAL_DEVICE_FLAGS_ROLL_LOCK | `uint32` | 4 | | +| GIMBAL_DEVICE_FLAGS_PITCH_LOCK | `uint32` | 8 | | +| GIMBAL_DEVICE_FLAGS_YAW_LOCK | `uint32` | 16 | | ## Source Message diff --git a/docs/uk/msg_docs/GimbalManagerInformation.md b/docs/uk/msg_docs/GimbalManagerInformation.md index 1c6a0686f5..6d0eb39f03 100644 --- a/docs/uk/msg_docs/GimbalManagerInformation.md +++ b/docs/uk/msg_docs/GimbalManagerInformation.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # GimbalManagerInformation (повідомлення UORB) -**TOPICS:** gimbal_managerinformation +**TOPICS:** gimbal_manager_information ## Fields @@ -22,22 +22,22 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------- | -------- | ---- | -| GIMBAL_MANAGER_CAP_FLAGS_HAS_RETRACT | `uint32` | 1 | | -| GIMBAL_MANAGER_CAP_FLAGS_HAS_NEUTRAL | `uint32` | 2 | | -| GIMBAL_MANAGER_CAP_FLAGS_HAS_ROLL_AXIS | `uint32` | 4 | | -| GIMBAL_MANAGER_CAP_FLAGS_HAS_ROLL_FOLLOW | `uint32` | 8 | | -| GIMBAL_MANAGER_CAP_FLAGS_HAS_ROLL_LOCK | `uint32` | 16 | | -| GIMBAL_MANAGER_CAP_FLAGS_HAS_PITCH_AXIS | `uint32` | 32 | | -| GIMBAL_MANAGER_CAP_FLAGS_HAS_PITCH_FOLLOW | `uint32` | 64 | | -| GIMBAL_MANAGER_CAP_FLAGS_HAS_PITCH_LOCK | `uint32` | 128 | | -| GIMBAL_MANAGER_CAP_FLAGS_HAS_YAW_AXIS | `uint32` | 256 | | -| GIMBAL_MANAGER_CAP_FLAGS_HAS_YAW_FOLLOW | `uint32` | 512 | | -| GIMBAL_MANAGER_CAP_FLAGS_HAS_YAW_LOCK | `uint32` | 1024 | | -| GIMBAL_MANAGER_CAP_FLAGS_SUPPORTS_INFINITE_YAW | `uint32` | 2048 | | -| GIMBAL_MANAGER_CAP_FLAGS_CAN_POINT_LOCATION_LOCAL | `uint32` | 65536 | | -| GIMBAL_MANAGER_CAP_FLAGS_CAN_POINT_LOCATION_GLOBAL | `uint32` | 131072 | | +| Назва | Тип | Значення | Опис | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -------- | ---- | +| GIMBAL_MANAGER_CAP_FLAGS_HAS_RETRACT | `uint32` | 1 | | +| GIMBAL_MANAGER_CAP_FLAGS_HAS_NEUTRAL | `uint32` | 2 | | +| GIMBAL_MANAGER_CAP_FLAGS_HAS_ROLL_AXIS | `uint32` | 4 | | +| GIMBAL_MANAGER_CAP_FLAGS_HAS_ROLL_FOLLOW | `uint32` | 8 | | +| GIMBAL_MANAGER_CAP_FLAGS_HAS_ROLL_LOCK | `uint32` | 16 | | +| GIMBAL_MANAGER_CAP_FLAGS_HAS_PITCH_AXIS | `uint32` | 32 | | +| GIMBAL_MANAGER_CAP_FLAGS_HAS_PITCH_FOLLOW | `uint32` | 64 | | +| GIMBAL_MANAGER_CAP_FLAGS_HAS_PITCH_LOCK | `uint32` | 128 | | +| GIMBAL_MANAGER_CAP_FLAGS_HAS_YAW_AXIS | `uint32` | 256 | | +| GIMBAL_MANAGER_CAP_FLAGS_HAS_YAW_FOLLOW | `uint32` | 512 | | +| GIMBAL_MANAGER_CAP_FLAGS_HAS_YAW_LOCK | `uint32` | 1024 | | +| GIMBAL_MANAGER_CAP_FLAGS_SUPPORTS_INFINITE_YAW | `uint32` | 2048 | | +| GIMBAL_MANAGER_CAP_FLAGS_CAN_POINT_LOCATION_LOCAL | `uint32` | 65536 | | +| GIMBAL_MANAGER_CAP_FLAGS_CAN_POINT_LOCATION_GLOBAL | `uint32` | 131072 | | ## Source Message diff --git a/docs/uk/msg_docs/GimbalManagerSetAttitude.md b/docs/uk/msg_docs/GimbalManagerSetAttitude.md index 1c36cefefd..77f830e5cd 100644 --- a/docs/uk/msg_docs/GimbalManagerSetAttitude.md +++ b/docs/uk/msg_docs/GimbalManagerSetAttitude.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # GimbalManagerSetAttitude (повідомлення UORB) -**TOPICS:** gimbal_managerset_attitude +**TOPICS:** gimbal_manager_set_attitude ## Fields @@ -24,14 +24,14 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -------- | ---- | -| GIMBAL_MANAGER_FLAGS_RETRACT | `uint32` | 1 | | -| GIMBAL_MANAGER_FLAGS_NEUTRAL | `uint32` | 2 | | -| GIMBAL_MANAGER_FLAGS_ROLL_LOCK | `uint32` | 4 | | -| GIMBAL_MANAGER_FLAGS_PITCH_LOCK | `uint32` | 8 | | -| GIMBAL_MANAGER_FLAGS_YAW_LOCK | `uint32` | 16 | | -| ORB_QUEUE_LENGTH | `uint8` | 2 | | +| Назва | Тип | Значення | Опис | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -------- | ---- | +| GIMBAL_MANAGER_FLAGS_RETRACT | `uint32` | 1 | | +| GIMBAL_MANAGER_FLAGS_NEUTRAL | `uint32` | 2 | | +| GIMBAL_MANAGER_FLAGS_ROLL_LOCK | `uint32` | 4 | | +| GIMBAL_MANAGER_FLAGS_PITCH_LOCK | `uint32` | 8 | | +| GIMBAL_MANAGER_FLAGS_YAW_LOCK | `uint32` | 16 | | +| ORB_QUEUE_LENGTH | `uint8` | 2 | | ## Source Message diff --git a/docs/uk/msg_docs/GimbalManagerSetManualControl.md b/docs/uk/msg_docs/GimbalManagerSetManualControl.md index 837c6f4e80..8891a55ada 100644 --- a/docs/uk/msg_docs/GimbalManagerSetManualControl.md +++ b/docs/uk/msg_docs/GimbalManagerSetManualControl.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # GimbalManagerSetManualControl (повідомлення UORB) -**TOPICS:** gimbal_managerset_manualcontrol +**TOPICS:** gimbal_manager_set_manual_control ## Fields @@ -24,13 +24,13 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -------- | ---- | -| GIMBAL_MANAGER_FLAGS_RETRACT | `uint32` | 1 | | -| GIMBAL_MANAGER_FLAGS_NEUTRAL | `uint32` | 2 | | -| GIMBAL_MANAGER_FLAGS_ROLL_LOCK | `uint32` | 4 | | -| GIMBAL_MANAGER_FLAGS_PITCH_LOCK | `uint32` | 8 | | -| GIMBAL_MANAGER_FLAGS_YAW_LOCK | `uint32` | 16 | | +| Назва | Тип | Значення | Опис | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -------- | ---- | +| GIMBAL_MANAGER_FLAGS_RETRACT | `uint32` | 1 | | +| GIMBAL_MANAGER_FLAGS_NEUTRAL | `uint32` | 2 | | +| GIMBAL_MANAGER_FLAGS_ROLL_LOCK | `uint32` | 4 | | +| GIMBAL_MANAGER_FLAGS_PITCH_LOCK | `uint32` | 8 | | +| GIMBAL_MANAGER_FLAGS_YAW_LOCK | `uint32` | 16 | | ## Source Message diff --git a/docs/uk/msg_docs/GimbalManagerStatus.md b/docs/uk/msg_docs/GimbalManagerStatus.md index f7f47c8bfe..b75bafaaa5 100644 --- a/docs/uk/msg_docs/GimbalManagerStatus.md +++ b/docs/uk/msg_docs/GimbalManagerStatus.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # GimbalManagerStatus (UORB message) -**TOPICS:** gimbal_managerstatus +**TOPICS:** gimbal_manager_status ## Fields diff --git a/docs/uk/msg_docs/GotoSetpoint.md b/docs/uk/msg_docs/GotoSetpoint.md index 1478a1a028..5521f03b1e 100644 --- a/docs/uk/msg_docs/GotoSetpoint.md +++ b/docs/uk/msg_docs/GotoSetpoint.md @@ -4,7 +4,13 @@ pageClass: is-wide-page # GotoSetpoint (повідомлення UORB) -Position and (optional) heading setpoints with corresponding speed constraints. Setpoints are intended as inputs to position and heading smoothers, respectively. Setpoints do not need to be kinematically consistent. Optional heading setpoints may be specified as controlled by the respective flag. Unset optional setpoints are not controlled. Unset optional constraints default to vehicle specifications. +Position and (optional) heading setpoints with corresponding speed constraints. + +Setpoints are intended as inputs to position and heading smoothers, respectively. +Setpoints do not need to be kinematically consistent. +Optional heading setpoints may be specified as controlled by the respective flag. +Unset optional setpoints are not controlled. +Unset optional constraints default to vehicle specifications. **TOPICS:** goto_setpoint @@ -12,22 +18,22 @@ Position and (optional) heading setpoints with corresponding speed constraints. | Назва | Тип | Unit [Frame] | Range/Enum | Опис | | ----------------------------------------------------------------------------------------------------------------- | ------------ | ---------------------------------------------------------------- | ---------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| timestamp | `uint64` | | | time since system start (microseconds) | -| положення | `float32[3]` | m | | NED local world frame | +| timestamp | `uint64` | us | | Time since system start | +| положення | `float32[3]` | m [NED] | | NED local world frame | | flag_control_heading | `bool` | | | true if heading is to be controlled | | heading | `float32` | | | (optional) [rad] [-pi,pi] from North | | flag_set_max_horizontal_speed | `bool` | | | true if setting a non-default horizontal speed limit | -| max_horizontal_speed | `float32` | | | (optional) [m/s] maximum speed (absolute) in the NE-plane | +| max_horizontal_speed | `float32` | m/s | | (optional) Maximum speed (absolute) in the NE-plane | | flag_set_max_vertical_speed | `bool` | | | true if setting a non-default vertical speed limit | -| max_vertical_speed | `float32` | | | (optional) [m/s] maximum speed (absolute) in the D-axis | +| max_vertical_speed | `float32` | m/s | | (optional) Maximum speed (absolute) in the D-axis | | flag_set_max_heading_rate | `bool` | | | true if setting a non-default heading rate limit | -| max_heading_rate | `float32` | | | (optional) [rad/s] maximum heading rate (absolute) | +| max_heading_rate | `float32` | rad/s | | (optional) Maximum heading rate (absolute) | ## Constants -| Назва | Тип | Значення | Опис | -| -------------------------------------------------------------------- | -------- | -------- | ---- | -| MESSAGE_VERSION | `uint32` | 0 | | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------ | -------- | -------- | ---- | +| MESSAGE_VERSION | `uint32` | 0 | | ## Source Message @@ -38,31 +44,32 @@ Click here to see original file ```c # Position and (optional) heading setpoints with corresponding speed constraints -# Setpoints are intended as inputs to position and heading smoothers, respectively -# Setpoints do not need to be kinematically consistent -# Optional heading setpoints may be specified as controlled by the respective flag -# Unset optional setpoints are not controlled -# Unset optional constraints default to vehicle specifications +# +# Setpoints are intended as inputs to position and heading smoothers, respectively. +# Setpoints do not need to be kinematically consistent. +# Optional heading setpoints may be specified as controlled by the respective flag. +# Unset optional setpoints are not controlled. +# Unset optional constraints default to vehicle specifications. uint32 MESSAGE_VERSION = 0 -uint64 timestamp # time since system start (microseconds) +uint64 timestamp # [us] Time since system start # setpoints -float32[3] position # [m] NED local world frame +float32[3] position # [m] [@frame NED] NED local world frame bool flag_control_heading # true if heading is to be controlled float32 heading # (optional) [rad] [-pi,pi] from North # constraints bool flag_set_max_horizontal_speed # true if setting a non-default horizontal speed limit -float32 max_horizontal_speed # (optional) [m/s] maximum speed (absolute) in the NE-plane +float32 max_horizontal_speed # [m/s] (optional) Maximum speed (absolute) in the NE-plane bool flag_set_max_vertical_speed # true if setting a non-default vertical speed limit -float32 max_vertical_speed # (optional) [m/s] maximum speed (absolute) in the D-axis +float32 max_vertical_speed # [m/s] (optional) Maximum speed (absolute) in the D-axis bool flag_set_max_heading_rate # true if setting a non-default heading rate limit -float32 max_heading_rate # (optional) [rad/s] maximum heading rate (absolute) +float32 max_heading_rate # [rad/s] (optional) Maximum heading rate (absolute) ``` ::: diff --git a/docs/uk/msg_docs/GpioConfig.md b/docs/uk/msg_docs/GpioConfig.md index 5b72d81018..df2d001e5a 100644 --- a/docs/uk/msg_docs/GpioConfig.md +++ b/docs/uk/msg_docs/GpioConfig.md @@ -20,19 +20,19 @@ GPIO configuration. ## Constants -| Назва | Тип | Значення | Опис | -| ---------------------------------------------------------------------------------------------------------- | -------- | -------- | ------ | -| INPUT | `uint32` | 0 | 0x0000 | -| OUTPUT | `uint32` | 1 | 0x0001 | -| PULLUP | `uint32` | 16 | 0x0010 | -| PULLDOWN | `uint32` | 32 | 0x0020 | -| OPENDRAIN | `uint32` | 256 | 0x0100 | -| INPUT_FLOATING | `uint32` | 0 | 0x0000 | -| INPUT_PULLUP | `uint32` | 16 | 0x0010 | -| INPUT_PULLDOWN | `uint32` | 32 | 0x0020 | -| OUTPUT_PUSHPULL | `uint32` | 0 | 0x0000 | -| OUTPUT_OPENDRAIN | `uint32` | 256 | 0x0100 | -| OUTPUT_OPENDRAIN_PULLUP | `uint32` | 272 | 0x0110 | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------------------------------------------- | -------- | -------- | ------ | +| INPUT | `uint32` | 0 | 0x0000 | +| OUTPUT | `uint32` | 1 | 0x0001 | +| PULLUP | `uint32` | 16 | 0x0010 | +| PULLDOWN | `uint32` | 32 | 0x0020 | +| OPENDRAIN | `uint32` | 256 | 0x0100 | +| INPUT_FLOATING | `uint32` | 0 | 0x0000 | +| INPUT_PULLUP | `uint32` | 16 | 0x0010 | +| INPUT_PULLDOWN | `uint32` | 32 | 0x0020 | +| OUTPUT_PUSHPULL | `uint32` | 0 | 0x0000 | +| OUTPUT_OPENDRAIN | `uint32` | 256 | 0x0100 | +| OUTPUT_OPENDRAIN_PULLUP | `uint32` | 272 | 0x0110 | ## Source Message diff --git a/docs/uk/msg_docs/GpioIn.md b/docs/uk/msg_docs/GpioIn.md index 5668bf5547..6b3aee789c 100644 --- a/docs/uk/msg_docs/GpioIn.md +++ b/docs/uk/msg_docs/GpioIn.md @@ -18,9 +18,9 @@ GPIO mask and state. ## Constants -| Назва | Тип | Значення | Опис | -| ---------------------------------------------------------------- | ------- | -------- | ---- | -| MAX_INSTANCES | `uint8` | 8 | | +| Назва | Тип | Значення | Опис | +| -------------------------------------------------------------- | ------- | -------- | ---- | +| MAX_INSTANCES | `uint8` | 8 | | ## Source Message diff --git a/docs/uk/msg_docs/GpsDump.md b/docs/uk/msg_docs/GpsDump.md index b06ba27ad0..419ccbdadd 100644 --- a/docs/uk/msg_docs/GpsDump.md +++ b/docs/uk/msg_docs/GpsDump.md @@ -20,11 +20,11 @@ This message is used to dump the raw gps communication to the log. ## Constants -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------------------------- | ------- | -------- | ---- | -| INSTANCE_MAIN | `uint8` | 0 | | -| INSTANCE_SECONDARY | `uint8` | 1 | | -| ORB_QUEUE_LENGTH | `uint8` | 16 | | +| Назва | Тип | Значення | Опис | +| ----------------------------------------------------------------------------------------- | ------- | -------- | ---- | +| INSTANCE_MAIN | `uint8` | 0 | | +| INSTANCE_SECONDARY | `uint8` | 1 | | +| ORB_QUEUE_LENGTH | `uint8` | 16 | | ## Source Message diff --git a/docs/uk/msg_docs/GpsInjectData.md b/docs/uk/msg_docs/GpsInjectData.md index 74ae8e5d73..cba0a60a61 100644 --- a/docs/uk/msg_docs/GpsInjectData.md +++ b/docs/uk/msg_docs/GpsInjectData.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # GpsInjectData (повідомлення UORB) -**TOPICS:** gps_injectdata +**TOPICS:** gps_inject_data ## Fields @@ -18,10 +18,10 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------------------------- | ------- | -------- | ---- | -| ORB_QUEUE_LENGTH | `uint8` | 8 | | -| MAX_INSTANCES | `uint8` | 2 | | +| Назва | Тип | Значення | Опис | +| ----------------------------------------------------------------------------------------- | ------- | -------- | ---- | +| ORB_QUEUE_LENGTH | `uint8` | 8 | | +| MAX_INSTANCES | `uint8` | 2 | | ## Source Message diff --git a/docs/uk/msg_docs/Gripper.md b/docs/uk/msg_docs/Gripper.md index 7b9ff1d2cd..4a8bbcd089 100644 --- a/docs/uk/msg_docs/Gripper.md +++ b/docs/uk/msg_docs/Gripper.md @@ -17,10 +17,10 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| -------------------------------------------------------------------- | ------ | -------- | ---- | -| COMMAND_GRAB | `int8` | 0 | | -| COMMAND_RELEASE | `int8` | 1 | | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------ | ------ | -------- | ---- | +| COMMAND_GRAB | `int8` | 0 | | +| COMMAND_RELEASE | `int8` | 1 | | ## Source Message diff --git a/docs/uk/msg_docs/HeaterStatus.md b/docs/uk/msg_docs/HeaterStatus.md index 6fa6d20326..4549571607 100644 --- a/docs/uk/msg_docs/HeaterStatus.md +++ b/docs/uk/msg_docs/HeaterStatus.md @@ -25,10 +25,10 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| ---------------------------------------------------------- | ------- | -------- | ---- | -| MODE_GPIO | `uint8` | 1 | | -| MODE_PX4IO | `uint8` | 2 | | +| Назва | Тип | Значення | Опис | +| -------------------------------------------------------- | ------- | -------- | ---- | +| MODE_GPIO | `uint8` | 1 | | +| MODE_PX4IO | `uint8` | 2 | | ## Source Message diff --git a/docs/uk/msg_docs/HomePosition.md b/docs/uk/msg_docs/HomePosition.md index 855140c375..6d9c9c66fc 100644 --- a/docs/uk/msg_docs/HomePosition.md +++ b/docs/uk/msg_docs/HomePosition.md @@ -30,9 +30,9 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| -------------------------------------------------------------------- | -------- | -------- | ---- | -| MESSAGE_VERSION | `uint32` | 1 | | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------ | -------- | -------- | ---- | +| MESSAGE_VERSION | `uint32` | 1 | | ## Source Message diff --git a/docs/uk/msg_docs/HomePositionV0.md b/docs/uk/msg_docs/HomePositionV0.md index 296e57679b..adb22847a5 100644 --- a/docs/uk/msg_docs/HomePositionV0.md +++ b/docs/uk/msg_docs/HomePositionV0.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Домашнє GPS положення в координатах WGS84. -**TOPICS:** home_positionv0 +**TOPICS:** home_position_v0 ## Fields @@ -28,9 +28,9 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| -------------------------------------------------------------------- | -------- | -------- | ---- | -| MESSAGE_VERSION | `uint32` | 0 | | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------ | -------- | -------- | ---- | +| MESSAGE_VERSION | `uint32` | 0 | | ## Source Message diff --git a/docs/uk/msg_docs/HoverThrustEstimate.md b/docs/uk/msg_docs/HoverThrustEstimate.md index 0659284f2a..d72f9d1ccb 100644 --- a/docs/uk/msg_docs/HoverThrustEstimate.md +++ b/docs/uk/msg_docs/HoverThrustEstimate.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # HoverThrustEstimate (повідомлення UORB) -**TOPICS:** hover_thrustestimate +**TOPICS:** hover_thrust_estimate ## Fields diff --git a/docs/uk/msg_docs/InputRc.md b/docs/uk/msg_docs/InputRc.md index 2a17aae0ca..c187f86eab 100644 --- a/docs/uk/msg_docs/InputRc.md +++ b/docs/uk/msg_docs/InputRc.md @@ -28,26 +28,26 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | -------- | -------------------------------------------------------------------------------------------------------------------------------- | -| RC_INPUT_SOURCE_UNKNOWN | `uint8` | 0 | | -| RC_INPUT_SOURCE_PX4FMU_PPM | `uint8` | 1 | | -| RC_INPUT_SOURCE_PX4IO_PPM | `uint8` | 2 | | -| RC_INPUT_SOURCE_PX4IO_SPEKTRUM | `uint8` | 3 | | -| RC_INPUT_SOURCE_PX4IO_SBUS | `uint8` | 4 | | -| RC_INPUT_SOURCE_PX4IO_ST24 | `uint8` | 5 | | -| RC_INPUT_SOURCE_MAVLINK | `uint8` | 6 | | -| RC_INPUT_SOURCE_QURT | `uint8` | 7 | | -| RC_INPUT_SOURCE_PX4FMU_SPEKTRUM | `uint8` | 8 | | -| RC_INPUT_SOURCE_PX4FMU_SBUS | `uint8` | 9 | | -| RC_INPUT_SOURCE_PX4FMU_ST24 | `uint8` | 10 | | -| RC_INPUT_SOURCE_PX4FMU_SUMD | `uint8` | 11 | | -| RC_INPUT_SOURCE_PX4FMU_DSM | `uint8` | 12 | | -| RC_INPUT_SOURCE_PX4IO_SUMD | `uint8` | 13 | | -| RC_INPUT_SOURCE_PX4FMU_CRSF | `uint8` | 14 | | -| RC_INPUT_SOURCE_PX4FMU_GHST | `uint8` | 15 | | -| RC_INPUT_MAX_CHANNELS | `uint8` | 18 | Maximum number of R/C input channels in the system. S.Bus has up to 18 channels. | -| RSSI_MAX | `int8` | 100 | | +| Назва | Тип | Значення | Опис | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | -------- | -------------------------------------------------------------------------------------------------------------------------------- | +| RC_INPUT_SOURCE_UNKNOWN | `uint8` | 0 | | +| RC_INPUT_SOURCE_PX4FMU_PPM | `uint8` | 1 | | +| RC_INPUT_SOURCE_PX4IO_PPM | `uint8` | 2 | | +| RC_INPUT_SOURCE_PX4IO_SPEKTRUM | `uint8` | 3 | | +| RC_INPUT_SOURCE_PX4IO_SBUS | `uint8` | 4 | | +| RC_INPUT_SOURCE_PX4IO_ST24 | `uint8` | 5 | | +| RC_INPUT_SOURCE_MAVLINK | `uint8` | 6 | | +| RC_INPUT_SOURCE_QURT | `uint8` | 7 | | +| RC_INPUT_SOURCE_PX4FMU_SPEKTRUM | `uint8` | 8 | | +| RC_INPUT_SOURCE_PX4FMU_SBUS | `uint8` | 9 | | +| RC_INPUT_SOURCE_PX4FMU_ST24 | `uint8` | 10 | | +| RC_INPUT_SOURCE_PX4FMU_SUMD | `uint8` | 11 | | +| RC_INPUT_SOURCE_PX4FMU_DSM | `uint8` | 12 | | +| RC_INPUT_SOURCE_PX4IO_SUMD | `uint8` | 13 | | +| RC_INPUT_SOURCE_PX4FMU_CRSF | `uint8` | 14 | | +| RC_INPUT_SOURCE_PX4FMU_GHST | `uint8` | 15 | | +| RC_INPUT_MAX_CHANNELS | `uint8` | 18 | Maximum number of R/C input channels in the system. S.Bus has up to 18 channels. | +| RSSI_MAX | `int8` | 100 | | ## Source Message diff --git a/docs/uk/msg_docs/InternalCombustionEngineControl.md b/docs/uk/msg_docs/InternalCombustionEngineControl.md index baa5b42ef9..c41be0444c 100644 --- a/docs/uk/msg_docs/InternalCombustionEngineControl.md +++ b/docs/uk/msg_docs/InternalCombustionEngineControl.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # InternalCombustionEngineControl (UORB message) -**TOPICS:** internal_combustionengine_control +**TOPICS:** internal_combustion_engine_control ## Fields diff --git a/docs/uk/msg_docs/InternalCombustionEngineStatus.md b/docs/uk/msg_docs/InternalCombustionEngineStatus.md index 7301386016..0387faa670 100644 --- a/docs/uk/msg_docs/InternalCombustionEngineStatus.md +++ b/docs/uk/msg_docs/InternalCombustionEngineStatus.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # InternalCombustionEngineStatus (повідомлення UORB) -**TOPICS:** internal_combustionengine_status +**TOPICS:** internal_combustion_engine_status ## Fields @@ -36,36 +36,36 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -------- | -------------------------------------------------------------------------------------- | -| STATE_STOPPED | `uint8` | 0 | The engine is not running. This is the default state. | -| STATE_STARTING | `uint8` | 1 | The engine is starting. This is a transient state. | -| STATE_RUNNING | `uint8` | 2 | The engine is running normally. | -| STATE_FAULT | `uint8` | 3 | The engine can no longer function. | -| FLAG_GENERAL_ERROR | `uint32` | 1 | General error. | -| FLAG_CRANKSHAFT_SENSOR_ERROR_SUPPORTED | `uint32` | 2 | Error of the crankshaft sensor. This flag is optional. | -| FLAG_CRANKSHAFT_SENSOR_ERROR | `uint32` | 4 | | -| FLAG_TEMPERATURE_SUPPORTED | `uint32` | 8 | Temperature levels. These flags are optional | -| FLAG_TEMPERATURE_BELOW_NOMINAL | `uint32` | 16 | Under-temperature warning | -| FLAG_TEMPERATURE_ABOVE_NOMINAL | `uint32` | 32 | Over-temperature warning | -| FLAG_TEMPERATURE_OVERHEATING | `uint32` | 64 | Critical overheating | -| FLAG_TEMPERATURE_EGT_ABOVE_NOMINAL | `uint32` | 128 | Exhaust gas over-temperature warning | -| FLAG_FUEL_PRESSURE_SUPPORTED | `uint32` | 256 | Fuel pressure. These flags are optional | -| FLAG_FUEL_PRESSURE_BELOW_NOMINAL | `uint32` | 512 | Under-pressure warning | -| FLAG_FUEL_PRESSURE_ABOVE_NOMINAL | `uint32` | 1024 | Over-pressure warning | -| FLAG_DETONATION_SUPPORTED | `uint32` | 2048 | Detonation warning. This flag is optional. | -| FLAG_DETONATION_OBSERVED | `uint32` | 4096 | Detonation condition observed warning | -| FLAG_MISFIRE_SUPPORTED | `uint32` | 8192 | Misfire warning. This flag is optional. | -| FLAG_MISFIRE_OBSERVED | `uint32` | 16384 | Misfire condition observed warning | -| FLAG_OIL_PRESSURE_SUPPORTED | `uint32` | 32768 | Oil pressure. These flags are optional | -| FLAG_OIL_PRESSURE_BELOW_NOMINAL | `uint32` | 65536 | Under-pressure warning | -| FLAG_OIL_PRESSURE_ABOVE_NOMINAL | `uint32` | 131072 | Over-pressure warning | -| FLAG_DEBRIS_SUPPORTED | `uint32` | 262144 | Debris warning. This flag is optional | -| FLAG_DEBRIS_DETECTED | `uint32` | 524288 | Detection of debris warning | -| SPARK_PLUG_SINGLE | `uint8` | 0 | | -| SPARK_PLUG_FIRST_ACTIVE | `uint8` | 1 | | -| SPARK_PLUG_SECOND_ACTIVE | `uint8` | 2 | | -| SPARK_PLUG_BOTH_ACTIVE | `uint8` | 3 | | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -------- | -------------------------------------------------------------------------------------- | +| STATE_STOPPED | `uint8` | 0 | The engine is not running. This is the default state. | +| STATE_STARTING | `uint8` | 1 | The engine is starting. This is a transient state. | +| STATE_RUNNING | `uint8` | 2 | The engine is running normally. | +| STATE_FAULT | `uint8` | 3 | The engine can no longer function. | +| FLAG_GENERAL_ERROR | `uint32` | 1 | General error. | +| FLAG_CRANKSHAFT_SENSOR_ERROR_SUPPORTED | `uint32` | 2 | Error of the crankshaft sensor. This flag is optional. | +| FLAG_CRANKSHAFT_SENSOR_ERROR | `uint32` | 4 | | +| FLAG_TEMPERATURE_SUPPORTED | `uint32` | 8 | Temperature levels. These flags are optional | +| FLAG_TEMPERATURE_BELOW_NOMINAL | `uint32` | 16 | Under-temperature warning | +| FLAG_TEMPERATURE_ABOVE_NOMINAL | `uint32` | 32 | Over-temperature warning | +| FLAG_TEMPERATURE_OVERHEATING | `uint32` | 64 | Critical overheating | +| FLAG_TEMPERATURE_EGT_ABOVE_NOMINAL | `uint32` | 128 | Exhaust gas over-temperature warning | +| FLAG_FUEL_PRESSURE_SUPPORTED | `uint32` | 256 | Fuel pressure. These flags are optional | +| FLAG_FUEL_PRESSURE_BELOW_NOMINAL | `uint32` | 512 | Under-pressure warning | +| FLAG_FUEL_PRESSURE_ABOVE_NOMINAL | `uint32` | 1024 | Over-pressure warning | +| FLAG_DETONATION_SUPPORTED | `uint32` | 2048 | Detonation warning. This flag is optional. | +| FLAG_DETONATION_OBSERVED | `uint32` | 4096 | Detonation condition observed warning | +| FLAG_MISFIRE_SUPPORTED | `uint32` | 8192 | Misfire warning. This flag is optional. | +| FLAG_MISFIRE_OBSERVED | `uint32` | 16384 | Misfire condition observed warning | +| FLAG_OIL_PRESSURE_SUPPORTED | `uint32` | 32768 | Oil pressure. These flags are optional | +| FLAG_OIL_PRESSURE_BELOW_NOMINAL | `uint32` | 65536 | Under-pressure warning | +| FLAG_OIL_PRESSURE_ABOVE_NOMINAL | `uint32` | 131072 | Over-pressure warning | +| FLAG_DEBRIS_SUPPORTED | `uint32` | 262144 | Debris warning. This flag is optional | +| FLAG_DEBRIS_DETECTED | `uint32` | 524288 | Detection of debris warning | +| SPARK_PLUG_SINGLE | `uint8` | 0 | | +| SPARK_PLUG_FIRST_ACTIVE | `uint8` | 1 | | +| SPARK_PLUG_SECOND_ACTIVE | `uint8` | 2 | | +| SPARK_PLUG_BOTH_ACTIVE | `uint8` | 3 | | ## Source Message diff --git a/docs/uk/msg_docs/LandingGear.md b/docs/uk/msg_docs/LandingGear.md index f0c15eed06..11180579c0 100644 --- a/docs/uk/msg_docs/LandingGear.md +++ b/docs/uk/msg_docs/LandingGear.md @@ -15,11 +15,11 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| -------------------------------------------------------- | ------ | -------- | ---------------------- | -| GEAR_UP | `int8` | 1 | landing gear up | -| GEAR_DOWN | `int8` | -1 | landing gear down | -| GEAR_KEEP | `int8` | 0 | keep the current state | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------ | ------ | -------- | ---------------------- | +| GEAR_UP | `int8` | 1 | landing gear up | +| GEAR_DOWN | `int8` | -1 | landing gear down | +| GEAR_KEEP | `int8` | 0 | keep the current state | ## Source Message diff --git a/docs/uk/msg_docs/LandingGearWheel.md b/docs/uk/msg_docs/LandingGearWheel.md index 26e1624ab1..e30a8e8845 100644 --- a/docs/uk/msg_docs/LandingGearWheel.md +++ b/docs/uk/msg_docs/LandingGearWheel.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # LandingGearWheel (повідомлення UORB) -**TOPICS:** landing_gearwheel +**TOPICS:** landing_gear_wheel ## Fields diff --git a/docs/uk/msg_docs/LandingTargetInnovations.md b/docs/uk/msg_docs/LandingTargetInnovations.md index ce64d93f7f..c7a02a8335 100644 --- a/docs/uk/msg_docs/LandingTargetInnovations.md +++ b/docs/uk/msg_docs/LandingTargetInnovations.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # LandingTargetInnovations (повідомлення UORB) -**TOPICS:** landing_targetinnovations +**TOPICS:** landing_target_innovations ## Fields diff --git a/docs/uk/msg_docs/LandingTargetPose.md b/docs/uk/msg_docs/LandingTargetPose.md index a139207aee..547cbd1857 100644 --- a/docs/uk/msg_docs/LandingTargetPose.md +++ b/docs/uk/msg_docs/LandingTargetPose.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Relative position of precision land target in navigation (body fixed, north aligned, NED) and inertial (world fixed, north aligned, NED) frames. -**TOPICS:** landing_targetpose +**TOPICS:** landing_target_pose ## Fields diff --git a/docs/uk/msg_docs/LateralControlConfiguration.md b/docs/uk/msg_docs/LateralControlConfiguration.md index 34f132856e..d02c38a8a6 100644 --- a/docs/uk/msg_docs/LateralControlConfiguration.md +++ b/docs/uk/msg_docs/LateralControlConfiguration.md @@ -4,22 +4,24 @@ pageClass: is-wide-page # LateralControlConfiguration (UORB message) -Fixed Wing Lateral Control Configuration message. Used by the fw_lateral_longitudinal_control module to constrain FixedWingLateralSetpoint messages. +Fixed Wing Lateral Control Configuration message. -**TOPICS:** lateral_controlconfiguration +Used by the fw_lateral_longitudinal_control module to constrain FixedWingLateralSetpoint messages. + +**TOPICS:** lateral_control_configuration ## Fields | Назва | Тип | Unit [Frame] | Range/Enum | Опис | | ----------------------------------------------------------- | --------- | ---------------------------------------------------------------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------- | -| timestamp | `uint64` | | | time since system start (microseconds) | -| lateral_accel_max | `float32` | m/s^2 | | currently maps to a maximum roll angle, accel_max = tan(roll_max) \* GRAVITY | +| timestamp | `uint64` | us | | Time since system start | +| lateral_accel_max | `float32` | m/s^2 | | Currently maps to a maximum roll angle, accel_max = tan(roll_max) \* GRAVITY | ## Constants -| Назва | Тип | Значення | Опис | -| -------------------------------------------------------------------- | -------- | -------- | ---- | -| MESSAGE_VERSION | `uint32` | 0 | | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------ | -------- | -------- | ---- | +| MESSAGE_VERSION | `uint32` | 0 | | ## Source Message @@ -30,13 +32,14 @@ Click here to see original file ```c # Fixed Wing Lateral Control Configuration message +# # Used by the fw_lateral_longitudinal_control module to constrain FixedWingLateralSetpoint messages. uint32 MESSAGE_VERSION = 0 -uint64 timestamp # time since system start (microseconds) +uint64 timestamp # [us] Time since system start -float32 lateral_accel_max # [m/s^2] currently maps to a maximum roll angle, accel_max = tan(roll_max) * GRAVITY +float32 lateral_accel_max # [m/s^2] Currently maps to a maximum roll angle, accel_max = tan(roll_max) * GRAVITY ``` ::: diff --git a/docs/uk/msg_docs/LaunchDetectionStatus.md b/docs/uk/msg_docs/LaunchDetectionStatus.md index b19d12d773..a5c73e80ad 100644 --- a/docs/uk/msg_docs/LaunchDetectionStatus.md +++ b/docs/uk/msg_docs/LaunchDetectionStatus.md @@ -6,22 +6,23 @@ pageClass: is-wide-page Status of the launch detection state machine (fixed-wing only). -**TOPICS:** launch_detectionstatus +**TOPICS:** launch_detection_status ## Fields -| Назва | Тип | Unit [Frame] | Range/Enum | Опис | -| ---------------------------------------------------------------- | -------- | ---------------------------------------------------------------- | ---------- | --------------------------------------------------------- | -| timestamp | `uint64` | | | time since system start (microseconds) | -| launch_detection_state | `uint8` | | | | +| Назва | Тип | Unit [Frame] | Range/Enum | Опис | +| ------------------------------------------------------------------------------------------------ | -------- | ---------------------------------------------------------------- | ---------- | -------------------------------------------------------------------------------------------------------------------------------- | +| timestamp | `uint64` | | | time since system start (microseconds) | +| launch_detection_state | `uint8` | | | | +| selected_control_surface_disarmed | `bool` | | | flag indicating whether selected actuators should kept disarmed (have to be configured in control allocation) | ## Constants -| Назва | Тип | Значення | Опис | -| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| STATE_WAITING_FOR_LAUNCH | `uint8` | 0 | waiting for launch | -| STATE_LAUNCH_DETECTED_DISABLED_MOTOR | `uint8` | 1 | launch detected, but keep motor(s) disabled (e.g. because it can't spin freely while on catapult) | -| STATE_FLYING | `uint8` | 2 | launch detected, use normal takeoff/flying configuration | +| Назва | Тип | Значення | Опис | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| STATE_WAITING_FOR_LAUNCH | `uint8` | 0 | waiting for launch | +| STATE_LAUNCH_DETECTED_DISABLED_MOTOR | `uint8` | 1 | launch detected, but keep motor(s) disabled (e.g. because it can't spin freely while on catapult) | +| STATE_FLYING | `uint8` | 2 | launch detected, use normal takeoff/flying configuration | ## Source Message @@ -40,6 +41,8 @@ uint8 STATE_LAUNCH_DETECTED_DISABLED_MOTOR = 1 # launch detected, but keep moto uint8 STATE_FLYING = 2 # launch detected, use normal takeoff/flying configuration uint8 launch_detection_state + +bool selected_control_surface_disarmed # [-] flag indicating whether selected actuators should kept disarmed (have to be configured in control allocation) ``` ::: diff --git a/docs/uk/msg_docs/LedControl.md b/docs/uk/msg_docs/LedControl.md index de36da51ab..93af6135f5 100644 --- a/docs/uk/msg_docs/LedControl.md +++ b/docs/uk/msg_docs/LedControl.md @@ -21,27 +21,27 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| --------------------------------------------------------------------------------------------- | ------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | -| COLOR_OFF | `uint8` | 0 | this is only used in the drivers | -| COLOR_RED | `uint8` | 1 | | -| COLOR_GREEN | `uint8` | 2 | | -| COLOR_BLUE | `uint8` | 3 | | -| COLOR_YELLOW | `uint8` | 4 | | -| COLOR_PURPLE | `uint8` | 5 | | -| COLOR_AMBER | `uint8` | 6 | | -| COLOR_CYAN | `uint8` | 7 | | -| COLOR_WHITE | `uint8` | 8 | | -| MODE_OFF | `uint8` | 0 | turn LED off | -| MODE_ON | `uint8` | 1 | turn LED on | -| MODE_DISABLED | `uint8` | 2 | disable this priority (switch to lower priority setting) | -| MODE_BLINK_SLOW | `uint8` | 3 | | -| MODE_BLINK_NORMAL | `uint8` | 4 | | -| MODE_BLINK_FAST | `uint8` | 5 | | -| MODE_BREATHE | `uint8` | 6 | continuously increase & decrease brightness (solid color if driver does not support it) | -| MODE_FLASH | `uint8` | 7 | two fast blinks (on/off) with timing as in MODE_BLINK_FAST and then off for a while | -| MAX_PRIORITY | `uint8` | 2 | maximum priority (minimum is 0) | -| ORB_QUEUE_LENGTH | `uint8` | 8 | needs to match BOARD_MAX_LEDS | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------------------------------- | ------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | +| COLOR_OFF | `uint8` | 0 | this is only used in the drivers | +| COLOR_RED | `uint8` | 1 | | +| COLOR_GREEN | `uint8` | 2 | | +| COLOR_BLUE | `uint8` | 3 | | +| COLOR_YELLOW | `uint8` | 4 | | +| COLOR_PURPLE | `uint8` | 5 | | +| COLOR_AMBER | `uint8` | 6 | | +| COLOR_CYAN | `uint8` | 7 | | +| COLOR_WHITE | `uint8` | 8 | | +| MODE_OFF | `uint8` | 0 | turn LED off | +| MODE_ON | `uint8` | 1 | turn LED on | +| MODE_DISABLED | `uint8` | 2 | disable this priority (switch to lower priority setting) | +| MODE_BLINK_SLOW | `uint8` | 3 | | +| MODE_BLINK_NORMAL | `uint8` | 4 | | +| MODE_BLINK_FAST | `uint8` | 5 | | +| MODE_BREATHE | `uint8` | 6 | continuously increase & decrease brightness (solid color if driver does not support it) | +| MODE_FLASH | `uint8` | 7 | two fast blinks (on/off) with timing as in MODE_BLINK_FAST and then off for a while | +| MAX_PRIORITY | `uint8` | 2 | maximum priority (minimum is 0) | +| ORB_QUEUE_LENGTH | `uint8` | 8 | needs to match BOARD_MAX_LEDS | ## Source Message diff --git a/docs/uk/msg_docs/LogMessage.md b/docs/uk/msg_docs/LogMessage.md index 4b24ffa4be..0870cf6e4d 100644 --- a/docs/uk/msg_docs/LogMessage.md +++ b/docs/uk/msg_docs/LogMessage.md @@ -18,9 +18,9 @@ A logging message, output with PX4_WARN, PX4_ERR, PX4_INFO. ## Constants -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------------------------- | ------- | -------- | ---- | -| ORB_QUEUE_LENGTH | `uint8` | 4 | | +| Назва | Тип | Значення | Опис | +| ----------------------------------------------------------------------------------------- | ------- | -------- | ---- | +| ORB_QUEUE_LENGTH | `uint8` | 4 | | ## Source Message diff --git a/docs/uk/msg_docs/LoggerStatus.md b/docs/uk/msg_docs/LoggerStatus.md index 7267934916..0cbcf11138 100644 --- a/docs/uk/msg_docs/LoggerStatus.md +++ b/docs/uk/msg_docs/LoggerStatus.md @@ -24,13 +24,13 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------------------------------- | ------- | -------- | -------------------------------------------------------------------------------------------- | -| LOGGER_TYPE_FULL | `uint8` | 0 | Normal, full size log | -| LOGGER_TYPE_MISSION | `uint8` | 1 | reduced mission log (e.g. for geotagging) | -| BACKEND_FILE | `uint8` | 1 | | -| BACKEND_MAVLINK | `uint8` | 2 | | -| BACKEND_ALL | `uint8` | 3 | | +| Назва | Тип | Значення | Опис | +| ----------------------------------------------------------------------------------------------- | ------- | -------- | -------------------------------------------------------------------------------------------- | +| LOGGER_TYPE_FULL | `uint8` | 0 | Normal, full size log | +| LOGGER_TYPE_MISSION | `uint8` | 1 | reduced mission log (e.g. for geotagging) | +| BACKEND_FILE | `uint8` | 1 | | +| BACKEND_MAVLINK | `uint8` | 2 | | +| BACKEND_ALL | `uint8` | 3 | | ## Source Message diff --git a/docs/uk/msg_docs/LongitudinalControlConfiguration.md b/docs/uk/msg_docs/LongitudinalControlConfiguration.md index 56a4a1f3a4..b94efb64dc 100644 --- a/docs/uk/msg_docs/LongitudinalControlConfiguration.md +++ b/docs/uk/msg_docs/LongitudinalControlConfiguration.md @@ -4,30 +4,33 @@ pageClass: is-wide-page # LongitudinalControlConfiguration (UORB message) -Fixed Wing Longitudinal Control Configuration message. Used by the fw_lateral_longitudinal_control module and TECS to constrain FixedWingLongitudinalSetpoint messages. and configure the resultant setpoints. +Fixed Wing Longitudinal Control Configuration message. -**TOPICS:** longitudinal_controlconfiguration +Used by the fw_lateral_longitudinal_control module and TECS to constrain FixedWingLongitudinalSetpoint messages +and configure the resultant setpoints. + +**TOPICS:** longitudinal_control_configuration ## Fields | Назва | Тип | Unit [Frame] | Range/Enum | Опис | | ------------------------------------------------------------------------------------------- | --------- | ---------------------------------------------------------------- | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| timestamp | `uint64` | | | time since system start (microseconds) | -| pitch_min | `float32` | rad | [-pi : pi] | defaults to FW_P_LIM_MIN if NAN. | -| pitch_max | `float32` | rad | [-pi : pi] | defaults to FW_P_LIM_MAX if NAN. | -| throttle_min | `float32` | norm | [0 : 1] | deaults to FW_THR_MIN if NAN. | -| throttle_max | `float32` | norm | [0 : 1] | defaults to FW_THR_MAX if NAN. | -| climb_rate_target | `float32` | m/s | | target climbrate to change altitude. Defaults to FW_T_CLIMB_MAX if NAN. Not used if height_rate is directly set in FixedWingLongitudinalSetpoint. | -| sink_rate_target | `float32` | m/s | | target sinkrate to change altitude. Defaults to FW_T_SINK_MAX if NAN. Not used if height_rate is directly set in FixedWingLongitudinalSetpoint. | -| speed_weight | `float32` | | [0 : 2] | , 0=pitch controls altitude only, 2=pitch controls airspeed only | -| enforce_low_height_condition | `bool` | boolean | | if true, the altitude controller is configured with an alternative timeconstant for tighter altitude tracking | -| disable_underspeed_protection | `bool` | boolean | | if true, underspeed handling is disabled in the altitude controller | +| timestamp | `uint64` | us | | Time since system start | +| pitch_min | `float32` | rad | [-pi : pi] | Defaults to FW_P_LIM_MIN if NAN. | +| pitch_max | `float32` | rad | [-pi : pi] | Defaults to FW_P_LIM_MAX if NAN. | +| throttle_min | `float32` | norm | [0 : 1] | Defaults to FW_THR_MIN if NAN. | +| throttle_max | `float32` | norm | [0 : 1] | Defaults to FW_THR_MAX if NAN. | +| climb_rate_target | `float32` | m/s | | Target climbrate to change altitude. Defaults to FW_T_CLIMB_MAX if NAN. Not used if height_rate is directly set in FixedWingLongitudinalSetpoint. | +| sink_rate_target | `float32` | m/s | | Target sinkrate to change altitude. Defaults to FW_T_SINK_MAX if NAN. Not used if height_rate is directly set in FixedWingLongitudinalSetpoint. | +| speed_weight | `float32` | | [0 : 2] | 0=pitch controls altitude only, 2=pitch controls airspeed only | +| enforce_low_height_condition | `bool` | | | If true, the altitude controller is configured with an alternative timeconstant for tighter altitude tracking | +| disable_underspeed_protection | `bool` | | | If true, underspeed handling is disabled in the altitude controller | ## Constants -| Назва | Тип | Значення | Опис | -| -------------------------------------------------------------------- | -------- | -------- | ---- | -| MESSAGE_VERSION | `uint32` | 0 | | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------ | -------- | -------- | ---- | +| MESSAGE_VERSION | `uint32` | 0 | | ## Source Message @@ -38,22 +41,23 @@ Click here to see original file ```c # Fixed Wing Longitudinal Control Configuration message +# # Used by the fw_lateral_longitudinal_control module and TECS to constrain FixedWingLongitudinalSetpoint messages # and configure the resultant setpoints. uint32 MESSAGE_VERSION = 0 -uint64 timestamp # time since system start (microseconds) +uint64 timestamp # [us] Time since system start -float32 pitch_min # [rad][@range -pi, pi] defaults to FW_P_LIM_MIN if NAN. -float32 pitch_max # [rad][@range -pi, pi] defaults to FW_P_LIM_MAX if NAN. -float32 throttle_min # [norm] [@range 0,1] deaults to FW_THR_MIN if NAN. -float32 throttle_max # [norm] [@range 0,1] defaults to FW_THR_MAX if NAN. -float32 climb_rate_target # [m/s] target climbrate to change altitude. Defaults to FW_T_CLIMB_MAX if NAN. Not used if height_rate is directly set in FixedWingLongitudinalSetpoint. -float32 sink_rate_target # [m/s] target sinkrate to change altitude. Defaults to FW_T_SINK_MAX if NAN. Not used if height_rate is directly set in FixedWingLongitudinalSetpoint. -float32 speed_weight # [@range 0,2], 0=pitch controls altitude only, 2=pitch controls airspeed only -bool enforce_low_height_condition # [boolean] if true, the altitude controller is configured with an alternative timeconstant for tighter altitude tracking -bool disable_underspeed_protection # [boolean] if true, underspeed handling is disabled in the altitude controller +float32 pitch_min # [rad] [@range -pi, pi] Defaults to FW_P_LIM_MIN if NAN. +float32 pitch_max # [rad] [@range -pi, pi] Defaults to FW_P_LIM_MAX if NAN. +float32 throttle_min # [norm] [@range 0,1] Defaults to FW_THR_MIN if NAN. +float32 throttle_max # [norm] [@range 0,1] Defaults to FW_THR_MAX if NAN. +float32 climb_rate_target # [m/s] Target climbrate to change altitude. Defaults to FW_T_CLIMB_MAX if NAN. Not used if height_rate is directly set in FixedWingLongitudinalSetpoint. +float32 sink_rate_target # [m/s] Target sinkrate to change altitude. Defaults to FW_T_SINK_MAX if NAN. Not used if height_rate is directly set in FixedWingLongitudinalSetpoint. +float32 speed_weight # [-] [@range 0,2] 0=pitch controls altitude only, 2=pitch controls airspeed only +bool enforce_low_height_condition # If true, the altitude controller is configured with an alternative timeconstant for tighter altitude tracking +bool disable_underspeed_protection # If true, underspeed handling is disabled in the altitude controller ``` ::: diff --git a/docs/uk/msg_docs/MagWorkerData.md b/docs/uk/msg_docs/MagWorkerData.md index acd9753f80..f97b55d4e4 100644 --- a/docs/uk/msg_docs/MagWorkerData.md +++ b/docs/uk/msg_docs/MagWorkerData.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # MagWorkerData (UORB message) -**TOPICS:** mag_workerdata +**TOPICS:** mag_worker_data ## Fields @@ -23,9 +23,9 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------ | ------- | -------- | ---- | -| MAX_MAGS | `uint8` | 4 | | +| Назва | Тип | Значення | Опис | +| ---------------------------------------------------- | ------- | -------- | ---- | +| MAX_MAGS | `uint8` | 4 | | ## Source Message diff --git a/docs/uk/msg_docs/MagnetometerBiasEstimate.md b/docs/uk/msg_docs/MagnetometerBiasEstimate.md index c31b62b822..6962a6479b 100644 --- a/docs/uk/msg_docs/MagnetometerBiasEstimate.md +++ b/docs/uk/msg_docs/MagnetometerBiasEstimate.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # MagnetometerBiasEstimate (UORB message) -**TOPICS:** magnetometer_biasestimate +**TOPICS:** magnetometer_bias_estimate ## Fields diff --git a/docs/uk/msg_docs/ManualControlSetpoint.md b/docs/uk/msg_docs/ManualControlSetpoint.md index 4097d7f05a..f46dd21c4a 100644 --- a/docs/uk/msg_docs/ManualControlSetpoint.md +++ b/docs/uk/msg_docs/ManualControlSetpoint.md @@ -30,17 +30,17 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------------------------- | -------- | -------- | ---------------------------------------------------------------- | -| MESSAGE_VERSION | `uint32` | 0 | | -| SOURCE_UNKNOWN | `uint8` | 0 | | -| SOURCE_RC | `uint8` | 1 | radio control (input_rc) | -| SOURCE_MAVLINK_0 | `uint8` | 2 | mavlink instance 0 | -| SOURCE_MAVLINK_1 | `uint8` | 3 | mavlink instance 1 | -| SOURCE_MAVLINK_2 | `uint8` | 4 | mavlink instance 2 | -| SOURCE_MAVLINK_3 | `uint8` | 5 | mavlink instance 3 | -| SOURCE_MAVLINK_4 | `uint8` | 6 | mavlink instance 4 | -| SOURCE_MAVLINK_5 | `uint8` | 7 | mavlink instance 5 | +| Назва | Тип | Значення | Опис | +| ----------------------------------------------------------------------------------------- | -------- | -------- | ---------------------------------------------------------------- | +| MESSAGE_VERSION | `uint32` | 0 | | +| SOURCE_UNKNOWN | `uint8` | 0 | | +| SOURCE_RC | `uint8` | 1 | radio control (input_rc) | +| SOURCE_MAVLINK_0 | `uint8` | 2 | mavlink instance 0 | +| SOURCE_MAVLINK_1 | `uint8` | 3 | mavlink instance 1 | +| SOURCE_MAVLINK_2 | `uint8` | 4 | mavlink instance 2 | +| SOURCE_MAVLINK_3 | `uint8` | 5 | mavlink instance 3 | +| SOURCE_MAVLINK_4 | `uint8` | 6 | mavlink instance 4 | +| SOURCE_MAVLINK_5 | `uint8` | 7 | mavlink instance 5 | ## Source Message diff --git a/docs/uk/msg_docs/ManualControlSwitches.md b/docs/uk/msg_docs/ManualControlSwitches.md index 67b16ae32b..b25def95e4 100644 --- a/docs/uk/msg_docs/ManualControlSwitches.md +++ b/docs/uk/msg_docs/ManualControlSwitches.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # ManualControlSwitches (UORB message) -**TOPICS:** manual_controlswitches +**TOPICS:** manual_control_switches ## Fields @@ -29,20 +29,20 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| --------------------------------------------------------------------------------------------- | ------- | -------- | ---------------------------------------------------- | -| SWITCH_POS_NONE | `uint8` | 0 | switch is not mapped | -| SWITCH_POS_ON | `uint8` | 1 | switch activated (value = 1) | -| SWITCH_POS_MIDDLE | `uint8` | 2 | middle position (value = 0) | -| SWITCH_POS_OFF | `uint8` | 3 | switch not activated (value = -1) | -| MODE_SLOT_NONE | `uint8` | 0 | no mode slot assigned | -| MODE_SLOT_1 | `uint8` | 1 | mode slot 1 selected | -| MODE_SLOT_2 | `uint8` | 2 | mode slot 2 selected | -| MODE_SLOT_3 | `uint8` | 3 | mode slot 3 selected | -| MODE_SLOT_4 | `uint8` | 4 | mode slot 4 selected | -| MODE_SLOT_5 | `uint8` | 5 | mode slot 5 selected | -| MODE_SLOT_6 | `uint8` | 6 | mode slot 6 selected | -| MODE_SLOT_NUM | `uint8` | 6 | number of slots | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------------------------------- | ------- | -------- | ---------------------------------------------------- | +| SWITCH_POS_NONE | `uint8` | 0 | switch is not mapped | +| SWITCH_POS_ON | `uint8` | 1 | switch activated (value = 1) | +| SWITCH_POS_MIDDLE | `uint8` | 2 | middle position (value = 0) | +| SWITCH_POS_OFF | `uint8` | 3 | switch not activated (value = -1) | +| MODE_SLOT_NONE | `uint8` | 0 | no mode slot assigned | +| MODE_SLOT_1 | `uint8` | 1 | mode slot 1 selected | +| MODE_SLOT_2 | `uint8` | 2 | mode slot 2 selected | +| MODE_SLOT_3 | `uint8` | 3 | mode slot 3 selected | +| MODE_SLOT_4 | `uint8` | 4 | mode slot 4 selected | +| MODE_SLOT_5 | `uint8` | 5 | mode slot 5 selected | +| MODE_SLOT_6 | `uint8` | 6 | mode slot 6 selected | +| MODE_SLOT_NUM | `uint8` | 6 | number of slots | ## Source Message diff --git a/docs/uk/msg_docs/MavlinkLog.md b/docs/uk/msg_docs/MavlinkLog.md index fcd74d3766..da1c7ef458 100644 --- a/docs/uk/msg_docs/MavlinkLog.md +++ b/docs/uk/msg_docs/MavlinkLog.md @@ -16,9 +16,9 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------------------------- | ------- | -------- | ---- | -| ORB_QUEUE_LENGTH | `uint8` | 8 | | +| Назва | Тип | Значення | Опис | +| ----------------------------------------------------------------------------------------- | ------- | -------- | ---- | +| ORB_QUEUE_LENGTH | `uint8` | 8 | | ## Source Message diff --git a/docs/uk/msg_docs/MavlinkTunnel.md b/docs/uk/msg_docs/MavlinkTunnel.md index 46bd317a62..346feb7abb 100644 --- a/docs/uk/msg_docs/MavlinkTunnel.md +++ b/docs/uk/msg_docs/MavlinkTunnel.md @@ -21,19 +21,19 @@ MAV_TUNNEL_PAYLOAD_TYPE enum. ## Constants -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------- | -------- | ---------------------------------------- | -| MAV_TUNNEL_PAYLOAD_TYPE_UNKNOWN | `uint8` | 0 | Encoding of payload unknown | -| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED0 | `uint8` | 200 | Registered for STorM32 gimbal controller | -| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED1 | `uint8` | 201 | Registered for STorM32 gimbal controller | -| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED2 | `uint8` | 202 | Registered for STorM32 gimbal controller | -| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED3 | `uint8` | 203 | Registered for STorM32 gimbal controller | -| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED4 | `uint8` | 204 | Registered for STorM32 gimbal controller | -| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED5 | `uint8` | 205 | Registered for STorM32 gimbal controller | -| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED6 | `uint8` | 206 | Registered for STorM32 gimbal controller | -| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED7 | `uint8` | 207 | Registered for STorM32 gimbal controller | -| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED8 | `uint8` | 208 | Registered for STorM32 gimbal controller | -| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED9 | `uint8` | 209 | Registered for STorM32 gimbal controller | +| Назва | Тип | Значення | Опис | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | -------- | ---------------------------------------- | +| MAV_TUNNEL_PAYLOAD_TYPE_UNKNOWN | `uint8` | 0 | Encoding of payload unknown | +| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED0 | `uint8` | 200 | Registered for STorM32 gimbal controller | +| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED1 | `uint8` | 201 | Registered for STorM32 gimbal controller | +| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED2 | `uint8` | 202 | Registered for STorM32 gimbal controller | +| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED3 | `uint8` | 203 | Registered for STorM32 gimbal controller | +| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED4 | `uint8` | 204 | Registered for STorM32 gimbal controller | +| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED5 | `uint8` | 205 | Registered for STorM32 gimbal controller | +| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED6 | `uint8` | 206 | Registered for STorM32 gimbal controller | +| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED7 | `uint8` | 207 | Registered for STorM32 gimbal controller | +| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED8 | `uint8` | 208 | Registered for STorM32 gimbal controller | +| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED9 | `uint8` | 209 | Registered for STorM32 gimbal controller | ## Source Message diff --git a/docs/uk/msg_docs/MessageFormatRequest.md b/docs/uk/msg_docs/MessageFormatRequest.md index 3441e06d5f..8d2a57208b 100644 --- a/docs/uk/msg_docs/MessageFormatRequest.md +++ b/docs/uk/msg_docs/MessageFormatRequest.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # MessageFormatRequest (UORB message) -**TOPICS:** message_formatrequest +**TOPICS:** message_format_request ## Fields @@ -16,9 +16,9 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| --------------------------------------------------------------------------------------------------------- | -------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | -| LATEST_PROTOCOL_VERSION | `uint16` | 1 | Current version of this protocol. Increase this whenever the MessageFormatRequest or MessageFormatResponse changes. | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------------------------------------------- | -------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | +| LATEST_PROTOCOL_VERSION | `uint16` | 1 | Current version of this protocol. Increase this whenever the MessageFormatRequest or MessageFormatResponse changes. | ## Source Message diff --git a/docs/uk/msg_docs/MessageFormatResponse.md b/docs/uk/msg_docs/MessageFormatResponse.md index 4a92cbb530..74cff8625f 100644 --- a/docs/uk/msg_docs/MessageFormatResponse.md +++ b/docs/uk/msg_docs/MessageFormatResponse.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # MessageFormatResponse (UORB message) -**TOPICS:** message_formatresponse +**TOPICS:** message_format_response ## Fields diff --git a/docs/uk/msg_docs/ModeCompleted.md b/docs/uk/msg_docs/ModeCompleted.md index a0fbade04a..7e1b79cc71 100644 --- a/docs/uk/msg_docs/ModeCompleted.md +++ b/docs/uk/msg_docs/ModeCompleted.md @@ -18,11 +18,11 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| --------------------------------------------------------------------------------------------------- | -------- | -------- | ---------------------------------------------- | -| MESSAGE_VERSION | `uint32` | 0 | | -| RESULT_SUCCESS | `uint8` | 0 | | -| RESULT_FAILURE_OTHER | `uint8` | 100 | Mode failed (generic error) | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------------------------------------- | -------- | -------- | ---------------------------------------------- | +| MESSAGE_VERSION | `uint32` | 0 | | +| RESULT_SUCCESS | `uint8` | 0 | | +| RESULT_FAILURE_OTHER | `uint8` | 100 | Mode failed (generic error) | ## Source Message diff --git a/docs/uk/msg_docs/NavigatorMissionItem.md b/docs/uk/msg_docs/NavigatorMissionItem.md index f4514dd297..0478e298bc 100644 --- a/docs/uk/msg_docs/NavigatorMissionItem.md +++ b/docs/uk/msg_docs/NavigatorMissionItem.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # NavigatorMissionItem (UORB message) -**TOPICS:** navigator_missionitem +**TOPICS:** navigator_mission_item ## Fields diff --git a/docs/uk/msg_docs/NavigatorStatus.md b/docs/uk/msg_docs/NavigatorStatus.md index 3e0086ba8f..75525ee798 100644 --- a/docs/uk/msg_docs/NavigatorStatus.md +++ b/docs/uk/msg_docs/NavigatorStatus.md @@ -18,10 +18,10 @@ Current status of a Navigator mode. Можливі значення nav_state в ## Constants -| Назва | Тип | Значення | Опис | -| -------------------------------------------------------------- | ------- | -------- | --------------------------------------------------- | -| FAILURE_NONE | `uint8` | 0 | | -| FAILURE_HAGL | `uint8` | 1 | Target altitude exceeds maximum height above ground | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------ | ------- | -------- | --------------------------------------------------- | +| FAILURE_NONE | `uint8` | 0 | | +| FAILURE_HAGL | `uint8` | 1 | Target altitude exceeds maximum height above ground | ## Source Message diff --git a/docs/uk/msg_docs/ObstacleDistance.md b/docs/uk/msg_docs/ObstacleDistance.md index de752880f8..e11f4c58de 100644 --- a/docs/uk/msg_docs/ObstacleDistance.md +++ b/docs/uk/msg_docs/ObstacleDistance.md @@ -23,15 +23,15 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| -------------------------------------------------------------------------------------------------------------------------------------------- | ------- | -------- | ---- | -| MAV_FRAME_GLOBAL | `uint8` | 0 | | -| MAV_FRAME_LOCAL_NED | `uint8` | 1 | | -| MAV_FRAME_BODY_FRD | `uint8` | 12 | | -| MAV_DISTANCE_SENSOR_LASER | `uint8` | 0 | | -| MAV_DISTANCE_SENSOR_ULTRASOUND | `uint8` | 1 | | -| MAV_DISTANCE_SENSOR_INFRARED | `uint8` | 2 | | -| MAV_DISTANCE_SENSOR_RADAR | `uint8` | 3 | | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------------------------------------------------------------------------------ | ------- | -------- | ---- | +| MAV_FRAME_GLOBAL | `uint8` | 0 | | +| MAV_FRAME_LOCAL_NED | `uint8` | 1 | | +| MAV_FRAME_BODY_FRD | `uint8` | 12 | | +| MAV_DISTANCE_SENSOR_LASER | `uint8` | 0 | | +| MAV_DISTANCE_SENSOR_ULTRASOUND | `uint8` | 1 | | +| MAV_DISTANCE_SENSOR_INFRARED | `uint8` | 2 | | +| MAV_DISTANCE_SENSOR_RADAR | `uint8` | 3 | | ## Source Message diff --git a/docs/uk/msg_docs/OffboardControlMode.md b/docs/uk/msg_docs/OffboardControlMode.md index 577e60c071..79a3118fef 100644 --- a/docs/uk/msg_docs/OffboardControlMode.md +++ b/docs/uk/msg_docs/OffboardControlMode.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Off-board control mode. -**TOPICS:** offboard_controlmode +**TOPICS:** offboard_control_mode ## Fields diff --git a/docs/uk/msg_docs/OnboardComputerStatus.md b/docs/uk/msg_docs/OnboardComputerStatus.md index a432555f4e..b271a50d45 100644 --- a/docs/uk/msg_docs/OnboardComputerStatus.md +++ b/docs/uk/msg_docs/OnboardComputerStatus.md @@ -6,7 +6,7 @@ pageClass: is-wide-page ONBOARD_COMPUTER_STATUS message data. -**TOPICS:** onboard_computerstatus +**TOPICS:** onboard_computer_status ## Fields diff --git a/docs/uk/msg_docs/OpenDroneIdArmStatus.md b/docs/uk/msg_docs/OpenDroneIdArmStatus.md index 1d85568e59..9bafd98898 100644 --- a/docs/uk/msg_docs/OpenDroneIdArmStatus.md +++ b/docs/uk/msg_docs/OpenDroneIdArmStatus.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # OpenDroneIdArmStatus (UORB message) -**TOPICS:** open_droneid_armstatus +**TOPICS:** open_drone_id_arm_status ## Fields diff --git a/docs/uk/msg_docs/OpenDroneIdOperatorId.md b/docs/uk/msg_docs/OpenDroneIdOperatorId.md index 1b5b11ac79..8c7d140048 100644 --- a/docs/uk/msg_docs/OpenDroneIdOperatorId.md +++ b/docs/uk/msg_docs/OpenDroneIdOperatorId.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # OpenDroneIdOperatorId (UORB message) -**TOPICS:** open_droneid_operatorid +**TOPICS:** open_drone_id_operator_id ## Fields diff --git a/docs/uk/msg_docs/OpenDroneIdSelfId.md b/docs/uk/msg_docs/OpenDroneIdSelfId.md index cb2f0cae80..66169b2cf5 100644 --- a/docs/uk/msg_docs/OpenDroneIdSelfId.md +++ b/docs/uk/msg_docs/OpenDroneIdSelfId.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # OpenDroneIdSelfId (UORB message) -**TOPICS:** open_droneid_selfid +**TOPICS:** open_drone_id_self_id ## Fields diff --git a/docs/uk/msg_docs/OpenDroneIdSystem.md b/docs/uk/msg_docs/OpenDroneIdSystem.md index c899b8b4e5..e750d9fcdb 100644 --- a/docs/uk/msg_docs/OpenDroneIdSystem.md +++ b/docs/uk/msg_docs/OpenDroneIdSystem.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # OpenDroneIdSystem (UORB message) -**TOPICS:** open_droneid_system +**TOPICS:** open_drone_id_system ## Fields diff --git a/docs/uk/msg_docs/OrbTestLarge.md b/docs/uk/msg_docs/OrbTestLarge.md index fc87d53530..ad335b4624 100644 --- a/docs/uk/msg_docs/OrbTestLarge.md +++ b/docs/uk/msg_docs/OrbTestLarge.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # OrbTestLarge (повідомлення UORB) -**TOPICS:** orb_testlarge +**TOPICS:** orb_test_large ## Fields diff --git a/docs/uk/msg_docs/OrbTestMedium.md b/docs/uk/msg_docs/OrbTestMedium.md index abc66d468e..30fe74931f 100644 --- a/docs/uk/msg_docs/OrbTestMedium.md +++ b/docs/uk/msg_docs/OrbTestMedium.md @@ -16,9 +16,9 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------------------------- | ------- | -------- | ---- | -| ORB_QUEUE_LENGTH | `uint8` | 16 | | +| Назва | Тип | Значення | Опис | +| ----------------------------------------------------------------------------------------- | ------- | -------- | ---- | +| ORB_QUEUE_LENGTH | `uint8` | 16 | | ## Source Message diff --git a/docs/uk/msg_docs/OrbitStatus.md b/docs/uk/msg_docs/OrbitStatus.md index 1965efea4e..eeb6d28db0 100644 --- a/docs/uk/msg_docs/OrbitStatus.md +++ b/docs/uk/msg_docs/OrbitStatus.md @@ -22,14 +22,14 @@ ORBIT_YAW_BEHAVIOUR. ## Constants -| Назва | Тип | Значення | Опис | -| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | -------- | ---- | -| ORBIT_YAW_BEHAVIOUR_HOLD_FRONT_TO_CIRCLE_CENTER | `uint8` | 0 | | -| ORBIT_YAW_BEHAVIOUR_HOLD_INITIAL_HEADING | `uint8` | 1 | | -| ORBIT_YAW_BEHAVIOUR_UNCONTROLLED | `uint8` | 2 | | -| ORBIT_YAW_BEHAVIOUR_HOLD_FRONT_TANGENT_TO_CIRCLE | `uint8` | 3 | | -| ORBIT_YAW_BEHAVIOUR_RC_CONTROLLED | `uint8` | 4 | | -| ORBIT_YAW_BEHAVIOUR_UNCHANGED | `uint8` | 5 | | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------- | -------- | ---- | +| ORBIT_YAW_BEHAVIOUR_HOLD_FRONT_TO_CIRCLE_CENTER | `uint8` | 0 | | +| ORBIT_YAW_BEHAVIOUR_HOLD_INITIAL_HEADING | `uint8` | 1 | | +| ORBIT_YAW_BEHAVIOUR_UNCONTROLLED | `uint8` | 2 | | +| ORBIT_YAW_BEHAVIOUR_HOLD_FRONT_TANGENT_TO_CIRCLE | `uint8` | 3 | | +| ORBIT_YAW_BEHAVIOUR_RC_CONTROLLED | `uint8` | 4 | | +| ORBIT_YAW_BEHAVIOUR_UNCHANGED | `uint8` | 5 | | ## Source Message diff --git a/docs/uk/msg_docs/ParameterResetRequest.md b/docs/uk/msg_docs/ParameterResetRequest.md index a8561069aa..d1aea3f4b7 100644 --- a/docs/uk/msg_docs/ParameterResetRequest.md +++ b/docs/uk/msg_docs/ParameterResetRequest.md @@ -6,7 +6,7 @@ pageClass: is-wide-page ParameterResetRequest : Used by the primary to reset one or all parameter value(s) on the remote. -**TOPICS:** parameter_resetrequest +**TOPICS:** parameter_reset_request ## Fields @@ -18,9 +18,9 @@ ParameterResetRequest : Used by the primary to reset one or all parameter value( ## Constants -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------------------------- | ------- | -------- | ---- | -| ORB_QUEUE_LENGTH | `uint8` | 4 | | +| Назва | Тип | Значення | Опис | +| ----------------------------------------------------------------------------------------- | ------- | -------- | ---- | +| ORB_QUEUE_LENGTH | `uint8` | 4 | | ## Source Message diff --git a/docs/uk/msg_docs/ParameterSetUsedRequest.md b/docs/uk/msg_docs/ParameterSetUsedRequest.md index cab7fd68c2..fd26f6e4e9 100644 --- a/docs/uk/msg_docs/ParameterSetUsedRequest.md +++ b/docs/uk/msg_docs/ParameterSetUsedRequest.md @@ -6,7 +6,7 @@ pageClass: is-wide-page ParameterSetUsedRequest : Used by a remote to update the used flag for a parameter on the primary. -**TOPICS:** parameter_setused_request +**TOPICS:** parameter_set_used_request ## Fields @@ -17,9 +17,9 @@ ParameterSetUsedRequest : Used by a remote to update the used flag for a paramet ## Constants -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------------------------- | ------- | -------- | ---- | -| ORB_QUEUE_LENGTH | `uint8` | 64 | | +| Назва | Тип | Значення | Опис | +| ----------------------------------------------------------------------------------------- | ------- | -------- | ---- | +| ORB_QUEUE_LENGTH | `uint8` | 64 | | ## Source Message diff --git a/docs/uk/msg_docs/ParameterSetValueRequest.md b/docs/uk/msg_docs/ParameterSetValueRequest.md index 71365d6507..69540d404c 100644 --- a/docs/uk/msg_docs/ParameterSetValueRequest.md +++ b/docs/uk/msg_docs/ParameterSetValueRequest.md @@ -19,9 +19,9 @@ ParameterSetValueRequest : Used by a remote or primary to update the value for a ## Constants -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------------------------- | ------- | -------- | ---- | -| ORB_QUEUE_LENGTH | `uint8` | 32 | | +| Назва | Тип | Значення | Опис | +| ----------------------------------------------------------------------------------------- | ------- | -------- | ---- | +| ORB_QUEUE_LENGTH | `uint8` | 32 | | ## Source Message diff --git a/docs/uk/msg_docs/ParameterSetValueResponse.md b/docs/uk/msg_docs/ParameterSetValueResponse.md index 3f09e4ea8c..77010b5479 100644 --- a/docs/uk/msg_docs/ParameterSetValueResponse.md +++ b/docs/uk/msg_docs/ParameterSetValueResponse.md @@ -18,9 +18,9 @@ ParameterSetValueResponse : Response to a set value request by either primary or ## Constants -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------------------------- | ------- | -------- | ---- | -| ORB_QUEUE_LENGTH | `uint8` | 4 | | +| Назва | Тип | Значення | Опис | +| ----------------------------------------------------------------------------------------- | ------- | -------- | ---- | +| ORB_QUEUE_LENGTH | `uint8` | 4 | | ## Source Message diff --git a/docs/uk/msg_docs/PositionControllerLandingStatus.md b/docs/uk/msg_docs/PositionControllerLandingStatus.md index 0be7fbf0eb..d1e70e3918 100644 --- a/docs/uk/msg_docs/PositionControllerLandingStatus.md +++ b/docs/uk/msg_docs/PositionControllerLandingStatus.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # PositionControllerLandingStatus (UORB message) -**TOPICS:** position_controllerlanding_status +**TOPICS:** position_controller_landing_status ## Fields @@ -17,13 +17,13 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| --------------------------------------------------------------------------------------------------------- | ------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------ | -| NOT_ABORTED | `uint8` | 0 | | -| ABORTED_BY_OPERATOR | `uint8` | 1 | | -| TERRAIN_NOT_FOUND | `uint8` | 2 | FW_LND_ABORT (1 << 0) | -| TERRAIN_TIMEOUT | `uint8` | 3 | FW_LND_ABORT (1 << 1) | -| UNKNOWN_ABORT_CRITERION | `uint8` | 4 | | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------------------------------------------- | ------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------ | +| NOT_ABORTED | `uint8` | 0 | | +| ABORTED_BY_OPERATOR | `uint8` | 1 | | +| TERRAIN_NOT_FOUND | `uint8` | 2 | FW_LND_ABORT (1 << 0) | +| TERRAIN_TIMEOUT | `uint8` | 3 | FW_LND_ABORT (1 << 1) | +| UNKNOWN_ABORT_CRITERION | `uint8` | 4 | | ## Source Message diff --git a/docs/uk/msg_docs/PositionControllerStatus.md b/docs/uk/msg_docs/PositionControllerStatus.md index 78bab1a3c6..cdde8f53c6 100644 --- a/docs/uk/msg_docs/PositionControllerStatus.md +++ b/docs/uk/msg_docs/PositionControllerStatus.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # PositionControllerStatus (UORB message) -**TOPICS:** position_controllerstatus +**TOPICS:** position_controller_status ## Fields diff --git a/docs/uk/msg_docs/PositionSetpoint.md b/docs/uk/msg_docs/PositionSetpoint.md index c6b3cb23bb..af318bf176 100644 --- a/docs/uk/msg_docs/PositionSetpoint.md +++ b/docs/uk/msg_docs/PositionSetpoint.md @@ -35,16 +35,16 @@ this file is only used in the position_setpoint triple as a dependency. ## Constants -| Назва | Тип | Значення | Опис | -| --------------------------------------------------------------------------------------------------------- | ------- | -------- | --------------------------------------------------------------------------- | -| SETPOINT_TYPE_POSITION | `uint8` | 0 | position setpoint | -| SETPOINT_TYPE_VELOCITY | `uint8` | 1 | velocity setpoint | -| SETPOINT_TYPE_LOITER | `uint8` | 2 | loiter setpoint | -| SETPOINT_TYPE_TAKEOFF | `uint8` | 3 | takeoff setpoint | -| SETPOINT_TYPE_LAND | `uint8` | 4 | land setpoint, altitude must be ignored, descend until landing | -| SETPOINT_TYPE_IDLE | `uint8` | 5 | do nothing, switch off motors or keep at idle speed (MC) | -| LOITER_TYPE_ORBIT | `uint8` | 0 | Circular pattern | -| LOITER_TYPE_FIGUREEIGHT | `uint8` | 1 | Pattern resembling an 8 | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------------------------------------------- | ------- | -------- | --------------------------------------------------------------------------- | +| SETPOINT_TYPE_POSITION | `uint8` | 0 | position setpoint | +| SETPOINT_TYPE_VELOCITY | `uint8` | 1 | velocity setpoint | +| SETPOINT_TYPE_LOITER | `uint8` | 2 | loiter setpoint | +| SETPOINT_TYPE_TAKEOFF | `uint8` | 3 | takeoff setpoint | +| SETPOINT_TYPE_LAND | `uint8` | 4 | land setpoint, altitude must be ignored, descend until landing | +| SETPOINT_TYPE_IDLE | `uint8` | 5 | do nothing, switch off motors or keep at idle speed (MC) | +| LOITER_TYPE_ORBIT | `uint8` | 0 | Circular pattern | +| LOITER_TYPE_FIGUREEIGHT | `uint8` | 1 | Pattern resembling an 8 | ## Source Message diff --git a/docs/uk/msg_docs/PositionSetpointTriplet.md b/docs/uk/msg_docs/PositionSetpointTriplet.md index c8fcead679..c8482d7fe6 100644 --- a/docs/uk/msg_docs/PositionSetpointTriplet.md +++ b/docs/uk/msg_docs/PositionSetpointTriplet.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Глобальний набір точки встановлення у форматі координат WGS84. Ось наступні три способи вказівань (або просто наступні два або один). -**TOPICS:** position_setpointtriplet +**TOPICS:** position_setpoint_triplet ## Fields diff --git a/docs/uk/msg_docs/PowerButtonState.md b/docs/uk/msg_docs/PowerButtonState.md index 42f9ee30dc..49d8fc30c8 100644 --- a/docs/uk/msg_docs/PowerButtonState.md +++ b/docs/uk/msg_docs/PowerButtonState.md @@ -6,7 +6,7 @@ pageClass: is-wide-page power button state notification message. -**TOPICS:** power_buttonstate +**TOPICS:** power_button_state ## Fields @@ -17,12 +17,12 @@ power button state notification message. ## Constants -| Назва | Тип | Значення | Опис | -| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | -------- | ------------------------------------------------------------------------------------------ | -| PWR_BUTTON_STATE_IDEL | `uint8` | 0 | Button went up without meeting shutdown button down time (delete event) | -| PWR_BUTTON_STATE_DOWN | `uint8` | 1 | Button went Down | -| PWR_BUTTON_STATE_UP | `uint8` | 2 | Button went Up | -| PWR_BUTTON_STATE_REQUEST_SHUTDOWN | `uint8` | 3 | Button went Up after meeting shutdown button down time | +| Назва | Тип | Значення | Опис | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | -------- | ------------------------------------------------------------------------------------------ | +| PWR_BUTTON_STATE_IDEL | `uint8` | 0 | Button went up without meeting shutdown button down time (delete event) | +| PWR_BUTTON_STATE_DOWN | `uint8` | 1 | Button went Down | +| PWR_BUTTON_STATE_UP | `uint8` | 2 | Button went Up | +| PWR_BUTTON_STATE_REQUEST_SHUTDOWN | `uint8` | 3 | Button went Up after meeting shutdown button down time | ## Source Message diff --git a/docs/uk/msg_docs/PurePursuitStatus.md b/docs/uk/msg_docs/PurePursuitStatus.md index 9d4a1fb10f..c803722e9b 100644 --- a/docs/uk/msg_docs/PurePursuitStatus.md +++ b/docs/uk/msg_docs/PurePursuitStatus.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Pure pursuit status. -**TOPICS:** pure_pursuitstatus +**TOPICS:** pure_pursuit_status ## Fields diff --git a/docs/uk/msg_docs/QshellReq.md b/docs/uk/msg_docs/QshellReq.md index b755c7e26c..30c1adcc55 100644 --- a/docs/uk/msg_docs/QshellReq.md +++ b/docs/uk/msg_docs/QshellReq.md @@ -17,9 +17,9 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| ---------------------------------------------------------- | -------- | -------- | ---- | -| MAX_STRLEN | `uint32` | 100 | | +| Назва | Тип | Значення | Опис | +| -------------------------------------------------------- | -------- | -------- | ---- | +| MAX_STRLEN | `uint32` | 100 | | ## Source Message diff --git a/docs/uk/msg_docs/RangingBeacon.md b/docs/uk/msg_docs/RangingBeacon.md new file mode 100644 index 0000000000..6f563470d6 --- /dev/null +++ b/docs/uk/msg_docs/RangingBeacon.md @@ -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} + +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------------------------- | ------- | -------- | ------------------------------------------------------- | +| ALT_TYPE_WGS84 | `uint8` | 0 | Altitude above WGS84 ellipsoid | +| 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 +``` + +::: diff --git a/docs/uk/msg_docs/RaptorInput.md b/docs/uk/msg_docs/RaptorInput.md index 61b245273c..9156c2716b 100644 --- a/docs/uk/msg_docs/RaptorInput.md +++ b/docs/uk/msg_docs/RaptorInput.md @@ -23,10 +23,10 @@ Raptor Input. ## Constants -| Назва | Тип | Значення | Опис | -| -------------------------------------------------------------------- | -------- | -------- | ---------------------------------------------------------------- | -| MESSAGE_VERSION | `uint32` | 0 | | -| ACTION_DIM | `uint8` | 4 | Policy output dimensionality (for quadrotors) | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------ | -------- | -------- | ---------------------------------------------------------------- | +| MESSAGE_VERSION | `uint32` | 0 | | +| ACTION_DIM | `uint8` | 4 | Policy output dimensionality (for quadrotors) | ## Source Message diff --git a/docs/uk/msg_docs/RaptorStatus.md b/docs/uk/msg_docs/RaptorStatus.md index 1571ee94b6..3cff868bc9 100644 --- a/docs/uk/msg_docs/RaptorStatus.md +++ b/docs/uk/msg_docs/RaptorStatus.md @@ -39,16 +39,16 @@ Raptor Status. ## Constants -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| MESSAGE_VERSION | `uint32` | 0 | | -| EXIT_REASON_NONE | `uint8` | 0 | No exit reason => Raptor control step was executed (actuator_motors should have been published) | -| EXIT_REASON_NO_ANGULAR_VELOCITY_UPDATE | `uint8` | 1 | We synchronize the control onto the input observation with the highest update frequency, which is vehicle_angular_velocity. If there was no update, we do not need to execute the policy again | -| EXIT_REASON_NOT_ALL_OBSERVATIONS_SET | `uint8` | 2 | We can not execute the policy if not all observations are available | -| EXIT_REASON_ANGULAR_VELOCITY_STALE | `uint8` | 3 | If OBSERVATION_TIMEOUT_ANGULAR_VELOCITY is exceeded, we treat the vehicle_angular_velocity as stale and can not run the policy | -| EXIT_REASON_LOCAL_POSITION_STALE | `uint8` | 4 | If OBSERVATION_TIMEOUT_LOCAL_POSITION is exceeded, we treat the vehicle_local_position as stale and can not run the policy | -| EXIT_REASON_ATTITUDE_STALE | `uint8` | 5 | If OBSERVATION_TIMEOUT_ATTITUDE is exceeded, we treat the vehicle_attitude as stale and can not run the policy | -| EXIT_REASON_EXECUTOR_STATUS_SOURCE_NOT_CONTROL | `uint8` | 6 | The executor that runs the policy can run in oversampling mode, where it decides if the policy should be ran based on the timestamp and not based on fixed synchronization onto the vehicle_angular_velocity. In this case the executor can decide to skip running the policy if the interval is too small, in which case this flag is set. | +| Назва | Тип | Значення | Опис | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| MESSAGE_VERSION | `uint32` | 0 | | +| EXIT_REASON_NONE | `uint8` | 0 | No exit reason => Raptor control step was executed (actuator_motors should have been published) | +| EXIT_REASON_NO_ANGULAR_VELOCITY_UPDATE | `uint8` | 1 | We synchronize the control onto the input observation with the highest update frequency, which is vehicle_angular_velocity. If there was no update, we do not need to execute the policy again | +| EXIT_REASON_NOT_ALL_OBSERVATIONS_SET | `uint8` | 2 | We can not execute the policy if not all observations are available | +| EXIT_REASON_ANGULAR_VELOCITY_STALE | `uint8` | 3 | If OBSERVATION_TIMEOUT_ANGULAR_VELOCITY is exceeded, we treat the vehicle_angular_velocity as stale and can not run the policy | +| EXIT_REASON_LOCAL_POSITION_STALE | `uint8` | 4 | If OBSERVATION_TIMEOUT_LOCAL_POSITION is exceeded, we treat the vehicle_local_position as stale and can not run the policy | +| EXIT_REASON_ATTITUDE_STALE | `uint8` | 5 | If OBSERVATION_TIMEOUT_ATTITUDE is exceeded, we treat the vehicle_attitude as stale and can not run the policy | +| EXIT_REASON_EXECUTOR_STATUS_SOURCE_NOT_CONTROL | `uint8` | 6 | The executor that runs the policy can run in oversampling mode, where it decides if the policy should be ran based on the timestamp and not based on fixed synchronization onto the vehicle_angular_velocity. In this case the executor can decide to skip running the policy if the interval is too small, in which case this flag is set. | ## Source Message diff --git a/docs/uk/msg_docs/RateCtrlStatus.md b/docs/uk/msg_docs/RateCtrlStatus.md index 7a18bafbe2..b952edc1aa 100644 --- a/docs/uk/msg_docs/RateCtrlStatus.md +++ b/docs/uk/msg_docs/RateCtrlStatus.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # RateCtrlStatus (UORB message) -**TOPICS:** rate_ctrlstatus +**TOPICS:** rate_ctrl_status ## Fields diff --git a/docs/uk/msg_docs/RcChannels.md b/docs/uk/msg_docs/RcChannels.md index c67d76b026..270bd8452d 100644 --- a/docs/uk/msg_docs/RcChannels.md +++ b/docs/uk/msg_docs/RcChannels.md @@ -21,39 +21,39 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------------------------------------------------------------------ | ------- | -------- | ---- | -| FUNCTION_THROTTLE | `uint8` | 0 | | -| FUNCTION_ROLL | `uint8` | 1 | | -| FUNCTION_PITCH | `uint8` | 2 | | -| FUNCTION_YAW | `uint8` | 3 | | -| FUNCTION_RETURN | `uint8` | 4 | | -| FUNCTION_LOITER | `uint8` | 5 | | -| FUNCTION_OFFBOARD | `uint8` | 6 | | -| FUNCTION_FLAPS | `uint8` | 7 | | -| FUNCTION_AUX_1 | `uint8` | 8 | | -| FUNCTION_AUX_2 | `uint8` | 9 | | -| FUNCTION_AUX_3 | `uint8` | 10 | | -| FUNCTION_AUX_4 | `uint8` | 11 | | -| FUNCTION_AUX_5 | `uint8` | 12 | | -| FUNCTION_AUX_6 | `uint8` | 13 | | -| FUNCTION_PARAM_1 | `uint8` | 14 | | -| FUNCTION_PARAM_2 | `uint8` | 15 | | -| FUNCTION_PARAM_3_5 | `uint8` | 16 | | -| FUNCTION_KILLSWITCH | `uint8` | 17 | | -| FUNCTION_TRANSITION | `uint8` | 18 | | -| FUNCTION_GEAR | `uint8` | 19 | | -| FUNCTION_ARMSWITCH | `uint8` | 20 | | -| FUNCTION_FLTBTN_SLOT_1 | `uint8` | 21 | | -| FUNCTION_FLTBTN_SLOT_2 | `uint8` | 22 | | -| FUNCTION_FLTBTN_SLOT_3 | `uint8` | 23 | | -| FUNCTION_FLTBTN_SLOT_4 | `uint8` | 24 | | -| FUNCTION_FLTBTN_SLOT_5 | `uint8` | 25 | | -| FUNCTION_FLTBTN_SLOT_6 | `uint8` | 26 | | -| FUNCTION_ENGAGE_MAIN_MOTOR | `uint8` | 27 | | -| FUNCTION_PAYLOAD_POWER | `uint8` | 28 | | -| FUNCTION_TERMINATION | `uint8` | 29 | | -| FUNCTION_FLTBTN_SLOT_COUNT | `uint8` | 6 | | +| Назва | Тип | Значення | Опис | +| ---------------------------------------------------------------------------------------------------------------------------------- | ------- | -------- | ---- | +| FUNCTION_THROTTLE | `uint8` | 0 | | +| FUNCTION_ROLL | `uint8` | 1 | | +| FUNCTION_PITCH | `uint8` | 2 | | +| FUNCTION_YAW | `uint8` | 3 | | +| FUNCTION_RETURN | `uint8` | 4 | | +| FUNCTION_LOITER | `uint8` | 5 | | +| FUNCTION_OFFBOARD | `uint8` | 6 | | +| FUNCTION_FLAPS | `uint8` | 7 | | +| FUNCTION_AUX_1 | `uint8` | 8 | | +| FUNCTION_AUX_2 | `uint8` | 9 | | +| FUNCTION_AUX_3 | `uint8` | 10 | | +| FUNCTION_AUX_4 | `uint8` | 11 | | +| FUNCTION_AUX_5 | `uint8` | 12 | | +| FUNCTION_AUX_6 | `uint8` | 13 | | +| FUNCTION_PARAM_1 | `uint8` | 14 | | +| FUNCTION_PARAM_2 | `uint8` | 15 | | +| FUNCTION_PARAM_3_5 | `uint8` | 16 | | +| FUNCTION_KILLSWITCH | `uint8` | 17 | | +| FUNCTION_TRANSITION | `uint8` | 18 | | +| FUNCTION_GEAR | `uint8` | 19 | | +| FUNCTION_ARMSWITCH | `uint8` | 20 | | +| FUNCTION_FLTBTN_SLOT_1 | `uint8` | 21 | | +| FUNCTION_FLTBTN_SLOT_2 | `uint8` | 22 | | +| FUNCTION_FLTBTN_SLOT_3 | `uint8` | 23 | | +| FUNCTION_FLTBTN_SLOT_4 | `uint8` | 24 | | +| FUNCTION_FLTBTN_SLOT_5 | `uint8` | 25 | | +| FUNCTION_FLTBTN_SLOT_6 | `uint8` | 26 | | +| FUNCTION_ENGAGE_MAIN_MOTOR | `uint8` | 27 | | +| FUNCTION_PAYLOAD_POWER | `uint8` | 28 | | +| FUNCTION_TERMINATION | `uint8` | 29 | | +| FUNCTION_FLTBTN_SLOT_COUNT | `uint8` | 6 | | ## Source Message diff --git a/docs/uk/msg_docs/RcParameterMap.md b/docs/uk/msg_docs/RcParameterMap.md index f8221f20c4..8978eeb8cb 100644 --- a/docs/uk/msg_docs/RcParameterMap.md +++ b/docs/uk/msg_docs/RcParameterMap.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # RcParameterMap (UORB message) -**TOPICS:** rc_parametermap +**TOPICS:** rc_parameter_map ## Fields @@ -21,10 +21,10 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| -------------------------------------------------------------------------------------------------------------------- | ------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| RC_PARAM_MAP_NCHAN | `uint8` | 3 | This limit is also hardcoded in the enum RC_CHANNELS_FUNCTION in rc_channels.h | -| PARAM_ID_LEN | `uint8` | 16 | corresponds to MAVLINK_MSG_PARAM_VALUE_FIELD_PARAM_ID_LEN | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------------------------------------------------------ | ------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| RC_PARAM_MAP_NCHAN | `uint8` | 3 | This limit is also hardcoded in the enum RC_CHANNELS_FUNCTION in rc_channels.h | +| PARAM_ID_LEN | `uint8` | 16 | corresponds to MAVLINK_MSG_PARAM_VALUE_FIELD_PARAM_ID_LEN | ## Source Message diff --git a/docs/uk/msg_docs/RegisterExtComponentReply.md b/docs/uk/msg_docs/RegisterExtComponentReply.md index 8637164989..3863499e03 100644 --- a/docs/uk/msg_docs/RegisterExtComponentReply.md +++ b/docs/uk/msg_docs/RegisterExtComponentReply.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # RegisterExtComponentReply (UORB message) -**TOPICS:** register_extcomponent_reply +**TOPICS:** register_ext_component_reply ## Fields @@ -22,10 +22,10 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------------------------- | -------- | -------- | ---- | -| MESSAGE_VERSION | `uint32` | 1 | | -| ORB_QUEUE_LENGTH | `uint8` | 2 | | +| Назва | Тип | Значення | Опис | +| ----------------------------------------------------------------------------------------- | -------- | -------- | ---- | +| MESSAGE_VERSION | `uint32` | 1 | | +| ORB_QUEUE_LENGTH | `uint8` | 2 | | ## Source Message diff --git a/docs/uk/msg_docs/RegisterExtComponentReplyV0.md b/docs/uk/msg_docs/RegisterExtComponentReplyV0.md index 702ea517d2..7c2af9fe7e 100644 --- a/docs/uk/msg_docs/RegisterExtComponentReplyV0.md +++ b/docs/uk/msg_docs/RegisterExtComponentReplyV0.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # RegisterExtComponentReplyV0 (UORB message) -**TOPICS:** register_extcomponent_replyv0 +**TOPICS:** register_ext_component_reply_v0 ## Fields @@ -21,10 +21,10 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------------------------- | -------- | -------- | ---- | -| MESSAGE_VERSION | `uint32` | 0 | | -| ORB_QUEUE_LENGTH | `uint8` | 2 | | +| Назва | Тип | Значення | Опис | +| ----------------------------------------------------------------------------------------- | -------- | -------- | ---- | +| MESSAGE_VERSION | `uint32` | 0 | | +| ORB_QUEUE_LENGTH | `uint8` | 2 | | ## Source Message diff --git a/docs/uk/msg_docs/RegisterExtComponentRequest.md b/docs/uk/msg_docs/RegisterExtComponentRequest.md index 95e2c41846..e201cc8826 100644 --- a/docs/uk/msg_docs/RegisterExtComponentRequest.md +++ b/docs/uk/msg_docs/RegisterExtComponentRequest.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Request to register an external component. -**TOPICS:** register_extcomponent_request +**TOPICS:** register_ext_component_request ## Fields @@ -23,14 +23,15 @@ Request to register an external component. | replace_internal_mode | `uint8` | | | vehicle_status::NAVIGATION_STATE_\* | | activate_mode_immediately | `bool` | | | switch to the registered mode (can only be set in combination with an executor) | | not_user_selectable | `bool` | | | mode cannot be selected by the user | +| request_offboard_setpoints | `bool` | | | set to true if the registered mode wants to receive offboard trajectory setpoints via MAVLink | ## Constants -| Назва | Тип | Значення | Опис | -| ----------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| MESSAGE_VERSION | `uint32` | 1 | | -| LATEST_PX4_ROS2_API_VERSION | `uint16` | 1 | API version compatibility. Increase this on a breaking semantic change. Changes to any message field are detected separately and do not require an API version change. | -| ORB_QUEUE_LENGTH | `uint8` | 2 | | +| Назва | Тип | Значення | Опис | +| --------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| MESSAGE_VERSION | `uint32` | 2 | | +| LATEST_PX4_ROS2_API_VERSION | `uint16` | 1 | API version compatibility. Increase this on a breaking semantic change. Changes to any message field are detected separately and do not require an API version change. | +| ORB_QUEUE_LENGTH | `uint8` | 2 | | ## Source Message @@ -42,7 +43,7 @@ Click here to see original file ```c # Request to register an external component -uint32 MESSAGE_VERSION = 1 +uint32 MESSAGE_VERSION = 2 uint64 timestamp # time since system start (microseconds) @@ -62,6 +63,7 @@ bool enable_replace_internal_mode # set to true if an internal mode should be r uint8 replace_internal_mode # vehicle_status::NAVIGATION_STATE_* bool activate_mode_immediately # switch to the registered mode (can only be set in combination with an executor) bool not_user_selectable # mode cannot be selected by the user +bool request_offboard_setpoints # set to true if the registered mode wants to receive offboard trajectory setpoints via MAVLink uint8 ORB_QUEUE_LENGTH = 2 ``` diff --git a/docs/uk/msg_docs/RegisterExtComponentRequestV0.md b/docs/uk/msg_docs/RegisterExtComponentRequestV0.md index a7968cc80d..09c8671ac2 100644 --- a/docs/uk/msg_docs/RegisterExtComponentRequestV0.md +++ b/docs/uk/msg_docs/RegisterExtComponentRequestV0.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Request to register an external component. -**TOPICS:** register_extcomponent_requestv0 +**TOPICS:** register_ext_component_request_v0 ## Fields @@ -25,11 +25,11 @@ Request to register an external component. ## Constants -| Назва | Тип | Значення | Опис | -| ----------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| MESSAGE_VERSION | `uint32` | 0 | | -| LATEST_PX4_ROS2_API_VERSION | `uint16` | 1 | API version compatibility. Increase this on a breaking semantic change. Changes to any message field are detected separately and do not require an API version change. | -| ORB_QUEUE_LENGTH | `uint8` | 2 | | +| Назва | Тип | Значення | Опис | +| --------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| MESSAGE_VERSION | `uint32` | 0 | | +| LATEST_PX4_ROS2_API_VERSION | `uint16` | 1 | API version compatibility. Increase this on a breaking semantic change. Changes to any message field are detected separately and do not require an API version change. | +| ORB_QUEUE_LENGTH | `uint8` | 2 | | ## Source Message diff --git a/docs/uk/msg_docs/RegisterExtComponentRequestV1.md b/docs/uk/msg_docs/RegisterExtComponentRequestV1.md new file mode 100644 index 0000000000..c5efb4ea21 --- /dev/null +++ b/docs/uk/msg_docs/RegisterExtComponentRequestV1.md @@ -0,0 +1,69 @@ +--- +pageClass: is-wide-page +--- + +# RegisterExtComponentRequestV1 (UORB message) + +Request to register an external component. + +**TOPICS:** register_ext_component_request_v1 + +## Fields + +| Назва | Тип | Unit [Frame] | Range/Enum | Опис | +| ------------------------------------------------------------------------------------------- | ---------- | ---------------------------------------------------------------- | ---------- | -------------------------------------------------------------------------------------------------------------------------- | +| timestamp | `uint64` | | | time since system start (microseconds) | +| request_id | `uint64` | | | ID, set this to a random value | +| name | `char[25]` | | | either the requested mode name, or component name | +| px4_ros2_api_version | `uint16` | | | Set to LATEST_PX4_ROS2_API_VERSION | +| register_arming_check | `bool` | | | | +| register_mode | `bool` | | | registering a mode also requires arming_check to be set | +| register_mode_executor | `bool` | | | registering an executor also requires a mode to be registered (which is the owned mode by the executor) | +| enable_replace_internal_mode | `bool` | | | set to true if an internal mode should be replaced | +| replace_internal_mode | `uint8` | | | vehicle_status::NAVIGATION_STATE_\* | +| activate_mode_immediately | `bool` | | | switch to the registered mode (can only be set in combination with an executor) | +| not_user_selectable | `bool` | | | mode cannot be selected by the user | + +## Constants + +| Назва | Тип | Значення | Опис | +| --------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| MESSAGE_VERSION | `uint32` | 1 | | +| LATEST_PX4_ROS2_API_VERSION | `uint16` | 1 | API version compatibility. Increase this on a breaking semantic change. Changes to any message field are detected separately and do not require an API version change. | +| ORB_QUEUE_LENGTH | `uint8` | 2 | | + +## Source Message + +[Source file (GitHub)](https://github.com/PX4/PX4-Autopilot/blob/main/msg/px4_msgs_old/msg/RegisterExtComponentRequestV1.msg) + +:::details +Click here to see original file + +```c +# Request to register an external component + +uint32 MESSAGE_VERSION = 1 + +uint64 timestamp # time since system start (microseconds) + +uint64 request_id # ID, set this to a random value +char[25] name # either the requested mode name, or component name + +uint16 LATEST_PX4_ROS2_API_VERSION = 1 # API version compatibility. Increase this on a breaking semantic change. Changes to any message field are detected separately and do not require an API version change. + +uint16 px4_ros2_api_version # Set to LATEST_PX4_ROS2_API_VERSION + +# Components to be registered +bool register_arming_check +bool register_mode # registering a mode also requires arming_check to be set +bool register_mode_executor # registering an executor also requires a mode to be registered (which is the owned mode by the executor) + +bool enable_replace_internal_mode # set to true if an internal mode should be replaced +uint8 replace_internal_mode # vehicle_status::NAVIGATION_STATE_* +bool activate_mode_immediately # switch to the registered mode (can only be set in combination with an executor) +bool not_user_selectable # mode cannot be selected by the user + +uint8 ORB_QUEUE_LENGTH = 2 +``` + +::: diff --git a/docs/uk/msg_docs/RoverAttitudeSetpoint.md b/docs/uk/msg_docs/RoverAttitudeSetpoint.md index ed0dd961e4..3b4d0676f5 100644 --- a/docs/uk/msg_docs/RoverAttitudeSetpoint.md +++ b/docs/uk/msg_docs/RoverAttitudeSetpoint.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Rover Attitude Setpoint. -**TOPICS:** rover_attitudesetpoint +**TOPICS:** rover_attitude_setpoint ## Fields diff --git a/docs/uk/msg_docs/RoverAttitudeStatus.md b/docs/uk/msg_docs/RoverAttitudeStatus.md index 189f32e279..499bc02edb 100644 --- a/docs/uk/msg_docs/RoverAttitudeStatus.md +++ b/docs/uk/msg_docs/RoverAttitudeStatus.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Rover Attitude Status. -**TOPICS:** rover_attitudestatus +**TOPICS:** rover_attitude_status ## Fields diff --git a/docs/uk/msg_docs/RoverPositionSetpoint.md b/docs/uk/msg_docs/RoverPositionSetpoint.md index 82f726026d..ff03dd395f 100644 --- a/docs/uk/msg_docs/RoverPositionSetpoint.md +++ b/docs/uk/msg_docs/RoverPositionSetpoint.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Rover Position Setpoint. -**TOPICS:** rover_positionsetpoint +**TOPICS:** rover_position_setpoint ## Fields diff --git a/docs/uk/msg_docs/RoverRateSetpoint.md b/docs/uk/msg_docs/RoverRateSetpoint.md index 2db7c145fb..87d1035870 100644 --- a/docs/uk/msg_docs/RoverRateSetpoint.md +++ b/docs/uk/msg_docs/RoverRateSetpoint.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Rover Rate setpoint. -**TOPICS:** rover_ratesetpoint +**TOPICS:** rover_rate_setpoint ## Fields diff --git a/docs/uk/msg_docs/RoverRateStatus.md b/docs/uk/msg_docs/RoverRateStatus.md index b5f35b0d9e..115ca78608 100644 --- a/docs/uk/msg_docs/RoverRateStatus.md +++ b/docs/uk/msg_docs/RoverRateStatus.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Rover Rate Status. -**TOPICS:** rover_ratestatus +**TOPICS:** rover_rate_status ## Fields diff --git a/docs/uk/msg_docs/RoverSpeedSetpoint.md b/docs/uk/msg_docs/RoverSpeedSetpoint.md index 82f033e7bf..6927a5fc53 100644 --- a/docs/uk/msg_docs/RoverSpeedSetpoint.md +++ b/docs/uk/msg_docs/RoverSpeedSetpoint.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Rover Speed Setpoint. -**TOPICS:** rover_speedsetpoint +**TOPICS:** rover_speed_setpoint ## Fields diff --git a/docs/uk/msg_docs/RoverSpeedStatus.md b/docs/uk/msg_docs/RoverSpeedStatus.md index 6184ecd469..019e3a8fc3 100644 --- a/docs/uk/msg_docs/RoverSpeedStatus.md +++ b/docs/uk/msg_docs/RoverSpeedStatus.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Rover Velocity Status. -**TOPICS:** rover_speedstatus +**TOPICS:** rover_speed_status ## Fields diff --git a/docs/uk/msg_docs/RoverSteeringSetpoint.md b/docs/uk/msg_docs/RoverSteeringSetpoint.md index bd9207cb3d..7fdd9107b1 100644 --- a/docs/uk/msg_docs/RoverSteeringSetpoint.md +++ b/docs/uk/msg_docs/RoverSteeringSetpoint.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Rover Steering setpoint. -**TOPICS:** rover_steeringsetpoint +**TOPICS:** rover_steering_setpoint ## Fields diff --git a/docs/uk/msg_docs/RoverThrottleSetpoint.md b/docs/uk/msg_docs/RoverThrottleSetpoint.md index 66ac614829..98b6ec4ec0 100644 --- a/docs/uk/msg_docs/RoverThrottleSetpoint.md +++ b/docs/uk/msg_docs/RoverThrottleSetpoint.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Rover Throttle setpoint. -**TOPICS:** rover_throttlesetpoint +**TOPICS:** rover_throttle_setpoint ## Fields diff --git a/docs/uk/msg_docs/RtlStatus.md b/docs/uk/msg_docs/RtlStatus.md index ac671fb244..08a2a622dd 100644 --- a/docs/uk/msg_docs/RtlStatus.md +++ b/docs/uk/msg_docs/RtlStatus.md @@ -8,24 +8,24 @@ pageClass: is-wide-page ## Fields -| Назва | Тип | Unit [Frame] | Range/Enum | Опис | -| --------------------------------------------------------------- | -------- | ---------------------------------------------------------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| timestamp | `uint64` | | | time since system start (microseconds) | -| safe_points_id | `uint32` | | | unique ID of active set of safe_point_items | -| is_evaluation_pending | `bool` | | | flag if the RTL point needs reevaluation (e.g. new safe points available, but need loading). | -| has_vtol_approach | `bool` | | | flag if approaches are defined for current RTL_TYPE parameter setting | -| rtl_type | `uint8` | | | Type of RTL chosen | -| safe_point_index | `uint8` | | | index of the chosen safe point, if in RTL_STATUS_TYPE_DIRECT_SAFE_POINT mode | +| Назва | Тип | Unit [Frame] | Range/Enum | Опис | +| --------------------------------------------------------------- | -------- | ---------------------------------------------------------------- | ---------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| timestamp | `uint64` | | | time since system start (microseconds) | +| safe_points_id | `uint32` | | | unique ID of active set of safe_point_items | +| is_evaluation_pending | `bool` | | | flag if the RTL point needs reevaluation (e.g. new safe points available, but need loading). | +| has_vtol_approach | `bool` | | | flag if approaches are defined for current RTL_TYPE parameter setting | +| rtl_type | `uint8` | | | Type of RTL chosen | +| safe_point_index | `uint8` | | | index of the chosen safe point, UINT8_MAX if no rally point was chosen | ## Constants -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| RTL_STATUS_TYPE_NONE | `uint8` | 0 | pending if evaluation can't pe performed currently e.g. when it is still loading the safe points | -| RTL_STATUS_TYPE_DIRECT_SAFE_POINT | `uint8` | 1 | chosen to directly go to a safe point or home position | -| RTL_STATUS_TYPE_DIRECT_MISSION_LAND | `uint8` | 2 | going straight to the beginning of the mission landing | -| RTL_STATUS_TYPE_FOLLOW_MISSION | `uint8` | 3 | Following the mission from start index to mission landing. Start index is current WP if in Mission mode, and closest WP otherwise. | -| RTL_STATUS_TYPE_FOLLOW_MISSION_REVERSE | `uint8` | 4 | Following the mission in reverse from start index to the beginning of the mission. Start index is previous WP if in Mission mode, and closest WP otherwise. | +| Назва | Тип | Значення | Опис | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| RTL_STATUS_TYPE_NONE | `uint8` | 0 | pending if evaluation can't pe performed currently e.g. when it is still loading the safe points | +| RTL_STATUS_TYPE_DIRECT_SAFE_POINT | `uint8` | 1 | chosen to directly go to a safe point or home position | +| RTL_STATUS_TYPE_DIRECT_MISSION_LAND | `uint8` | 2 | going straight to the beginning of the mission landing | +| RTL_STATUS_TYPE_FOLLOW_MISSION | `uint8` | 3 | Following the mission from start index to mission landing. Start index is current WP if in Mission mode, and closest WP otherwise. | +| RTL_STATUS_TYPE_FOLLOW_MISSION_REVERSE | `uint8` | 4 | Following the mission in reverse from start index to the beginning of the mission. Start index is previous WP if in Mission mode, and closest WP otherwise. | ## Source Message @@ -43,7 +43,7 @@ bool is_evaluation_pending # flag if the RTL point needs reevaluation (e. bool has_vtol_approach # flag if approaches are defined for current RTL_TYPE parameter setting uint8 rtl_type # Type of RTL chosen -uint8 safe_point_index # index of the chosen safe point, if in RTL_STATUS_TYPE_DIRECT_SAFE_POINT mode +uint8 safe_point_index # index of the chosen safe point, UINT8_MAX if no rally point was chosen uint8 RTL_STATUS_TYPE_NONE=0 # pending if evaluation can't pe performed currently e.g. when it is still loading the safe points uint8 RTL_STATUS_TYPE_DIRECT_SAFE_POINT=1 # chosen to directly go to a safe point or home position diff --git a/docs/uk/msg_docs/RtlTimeEstimate.md b/docs/uk/msg_docs/RtlTimeEstimate.md index e70839b593..8f825b892c 100644 --- a/docs/uk/msg_docs/RtlTimeEstimate.md +++ b/docs/uk/msg_docs/RtlTimeEstimate.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # RtlTimeEstimate (UORB message) -**TOPICS:** rtl_timeestimate +**TOPICS:** rtl_time_estimate ## Fields diff --git a/docs/uk/msg_docs/SatelliteInfo.md b/docs/uk/msg_docs/SatelliteInfo.md index 01262913a4..f62a55be04 100644 --- a/docs/uk/msg_docs/SatelliteInfo.md +++ b/docs/uk/msg_docs/SatelliteInfo.md @@ -21,9 +21,9 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------------------------------------------------------------ | ------- | -------- | ---- | -| SAT_INFO_MAX_SATELLITES | `uint8` | 40 | | +| Назва | Тип | Значення | Опис | +| ---------------------------------------------------------------------------------------------------------------------------- | ------- | -------- | ---- | +| SAT_INFO_MAX_SATELLITES | `uint8` | 40 | | ## Source Message diff --git a/docs/uk/msg_docs/SensorAccel.md b/docs/uk/msg_docs/SensorAccel.md index 895fee5d7d..2ab0cf9964 100644 --- a/docs/uk/msg_docs/SensorAccel.md +++ b/docs/uk/msg_docs/SensorAccel.md @@ -23,9 +23,9 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------------------------- | ------- | -------- | ---- | -| ORB_QUEUE_LENGTH | `uint8` | 8 | | +| Назва | Тип | Значення | Опис | +| ----------------------------------------------------------------------------------------- | ------- | -------- | ---- | +| ORB_QUEUE_LENGTH | `uint8` | 8 | | ## Source Message diff --git a/docs/uk/msg_docs/SensorAccelFifo.md b/docs/uk/msg_docs/SensorAccelFifo.md index f9ed2f4296..c420dbe7d5 100644 --- a/docs/uk/msg_docs/SensorAccelFifo.md +++ b/docs/uk/msg_docs/SensorAccelFifo.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # SensorAccelFifo (UORB message) -**TOPICS:** sensor_accelfifo +**TOPICS:** sensor_accel_fifo ## Fields diff --git a/docs/uk/msg_docs/SensorBaro.md b/docs/uk/msg_docs/SensorBaro.md index f666fd9eee..613f2d5f4c 100644 --- a/docs/uk/msg_docs/SensorBaro.md +++ b/docs/uk/msg_docs/SensorBaro.md @@ -24,9 +24,9 @@ The information is published in the `SCALED_PRESSURE_n` MAVLink messages (along ## Constants -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------------------------- | ------- | -------- | ---- | -| ORB_QUEUE_LENGTH | `uint8` | 4 | | +| Назва | Тип | Значення | Опис | +| ----------------------------------------------------------------------------------------- | ------- | -------- | ---- | +| ORB_QUEUE_LENGTH | `uint8` | 4 | | ## Source Message diff --git a/docs/uk/msg_docs/SensorCombined.md b/docs/uk/msg_docs/SensorCombined.md index 90145da660..d044dfaf50 100644 --- a/docs/uk/msg_docs/SensorCombined.md +++ b/docs/uk/msg_docs/SensorCombined.md @@ -25,12 +25,12 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| --------------------------------------------------------------------------------------------------------------- | ------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------- | -| RELATIVE_TIMESTAMP_INVALID | `int32` | 2147483647 | (0x7fffffff) If one of the relative timestamps is set to this value, it means the associated sensor values are invalid | -| CLIPPING_X | `uint8` | 1 | | -| CLIPPING_Y | `uint8` | 2 | | -| CLIPPING_Z | `uint8` | 4 | | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------------------------------------------------- | ------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------- | +| RELATIVE_TIMESTAMP_INVALID | `int32` | 2147483647 | (0x7fffffff) If one of the relative timestamps is set to this value, it means the associated sensor values are invalid | +| CLIPPING_X | `uint8` | 1 | | +| CLIPPING_Y | `uint8` | 2 | | +| CLIPPING_Z | `uint8` | 4 | | ## Source Message diff --git a/docs/uk/msg_docs/SensorGnssRelative.md b/docs/uk/msg_docs/SensorGnssRelative.md index 4e5ed52e70..a459d0098e 100644 --- a/docs/uk/msg_docs/SensorGnssRelative.md +++ b/docs/uk/msg_docs/SensorGnssRelative.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Інформація про відносне позиціонування GNSS в рамці NED. NED кадр визначається як локальна топологічна система на задній станції. -**TOPICS:** sensor_gnssrelative +**TOPICS:** sensor_gnss_relative ## Fields diff --git a/docs/uk/msg_docs/SensorGnssStatus.md b/docs/uk/msg_docs/SensorGnssStatus.md index d2acc1278e..f4cbac9a04 100644 --- a/docs/uk/msg_docs/SensorGnssStatus.md +++ b/docs/uk/msg_docs/SensorGnssStatus.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Gnss quality indicators. -**TOPICS:** sensor_gnssstatus +**TOPICS:** sensor_gnss_status ## Fields diff --git a/docs/uk/msg_docs/SensorGps.md b/docs/uk/msg_docs/SensorGps.md index c01d04fba7..3ec35115b2 100644 --- a/docs/uk/msg_docs/SensorGps.md +++ b/docs/uk/msg_docs/SensorGps.md @@ -10,81 +10,84 @@ pageClass: is-wide-page ## Fields -| Назва | Тип | Unit [Frame] | Range/Enum | Опис | -| ----------------------------------------------------------------------------- | --------- | ---------------------------------------------------------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| timestamp | `uint64` | | | time since system start (microseconds) | -| timestamp_sample | `uint64` | | | | -| device_id | `uint32` | | | unique device ID for the sensor that does not change between power cycles | -| latitude_deg | `float64` | | | Latitude in degrees, allows centimeter level RTK precision | -| longitude_deg | `float64` | | | Longitude in degrees, allows centimeter level RTK precision | -| altitude_msl_m | `float64` | | | Altitude above MSL, meters | -| altitude_ellipsoid_m | `float64` | | | Altitude above Ellipsoid, meters | -| s_variance_m_s | `float32` | | | GPS speed accuracy estimate, (metres/sec) | -| c_variance_rad | `float32` | | | GPS course accuracy estimate, (radians) | -| fix_type | `uint8` | | | Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. | -| eph | `float32` | | | GPS horizontal position accuracy (metres) | -| epv | `float32` | | | GPS vertical position accuracy (metres) | -| hdop | `float32` | | | Horizontal dilution of precision | -| vdop | `float32` | | | Vertical dilution of precision | -| noise_per_ms | `int32` | | | GPS noise per millisecond | -| automatic_gain_control | `uint16` | | | Automatic gain control monitor | -| jamming_state | `uint8` | | | indicates whether jamming has been detected or suspected by the receivers. O: Unknown, 1: OK, 2: Mitigated, 3: Detected | -| jamming_indicator | `int32` | | | indicates jamming is occurring | -| spoofing_state | `uint8` | | | indicates whether spoofing has been detected or suspected by the receivers. O: Unknown, 1: OK, 2: Mitigated, 3: Detected | -| authentication_state | `uint8` | | | GPS signal authentication state | -| vel_m_s | `float32` | | | GPS ground speed, (metres/sec) | -| vel_n_m_s | `float32` | | | GPS North velocity, (metres/sec) | -| vel_e_m_s | `float32` | | | GPS East velocity, (metres/sec) | -| vel_d_m_s | `float32` | | | GPS Down velocity, (metres/sec) | -| cog_rad | `float32` | | | Course over ground (NOT heading, but direction of movement), -PI..PI, (radians) | -| vel_ned_valid | `bool` | | | True if NED velocity is valid | -| timestamp_time_relative | `int32` | | | timestamp + timestamp_time_relative = Time of the UTC timestamp since system start, (microseconds) | -| time_utc_usec | `uint64` | | | Timestamp (microseconds, UTC), this is the timestamp which comes from the gps module. It might be unavailable right after cold start, indicated by a value of 0 | -| satellites_used | `uint8` | | | Number of satellites used | -| system_error | `uint32` | | | General errors with the connected GPS receiver | -| heading | `float32` | | | heading angle of XYZ body frame rel to NED. Set to NaN if not available and updated (used for dual antenna GPS), (rad, [-PI, PI]) | -| heading_offset | `float32` | | | heading offset of dual antenna array in body frame. Set to NaN if not applicable. (rad, [-PI, PI]) | -| heading_accuracy | `float32` | | | heading accuracy (rad, [0, 2PI]) | -| rtcm_injection_rate | `float32` | | | RTCM message injection rate Hz | -| selected_rtcm_instance | `uint8` | | | uorb instance that is being used for RTCM corrections | -| rtcm_crc_failed | `bool` | | | RTCM message CRC failure detected | -| rtcm_msg_used | `uint8` | | | Indicates if the RTCM message was used successfully by the receiver | +| Назва | Тип | Unit [Frame] | Range/Enum | Опис | +| ----------------------------------------------------------------------------- | --------- | ---------------------------------------------------------------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| timestamp | `uint64` | | | time since system start (microseconds) | +| timestamp_sample | `uint64` | | | | +| device_id | `uint32` | | | unique device ID for the sensor that does not change between power cycles | +| latitude_deg | `float64` | | | Latitude in degrees, allows centimeter level RTK precision | +| longitude_deg | `float64` | | | Longitude in degrees, allows centimeter level RTK precision | +| altitude_msl_m | `float64` | | | Altitude above MSL, meters | +| altitude_ellipsoid_m | `float64` | | | Altitude above Ellipsoid, meters | +| s_variance_m_s | `float32` | | | GPS speed accuracy estimate, (metres/sec) | +| c_variance_rad | `float32` | | | GPS course accuracy estimate, (radians) | +| fix_type | `uint8` | | | Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. | +| eph | `float32` | | | GPS horizontal position accuracy (metres) | +| epv | `float32` | | | GPS vertical position accuracy (metres) | +| hdop | `float32` | | | Horizontal dilution of precision | +| vdop | `float32` | | | Vertical dilution of precision | +| noise_per_ms | `int32` | | | GPS noise per millisecond | +| automatic_gain_control | `uint16` | | | Automatic gain control monitor | +| jamming_state | `uint8` | | | indicates whether jamming has been detected or suspected by the receivers. O: Unknown, 1: OK, 2: Mitigated, 3: Detected | +| jamming_indicator | `int32` | | | indicates jamming is occurring | +| spoofing_state | `uint8` | | | indicates whether spoofing has been detected or suspected by the receivers. O: Unknown, 1: OK, 2: Mitigated, 3: Detected | +| authentication_state | `uint8` | | | GPS signal authentication state | +| vel_m_s | `float32` | | | GPS ground speed, (metres/sec) | +| vel_n_m_s | `float32` | | | GPS North velocity, (metres/sec) | +| vel_e_m_s | `float32` | | | GPS East velocity, (metres/sec) | +| vel_d_m_s | `float32` | | | GPS Down velocity, (metres/sec) | +| cog_rad | `float32` | | | Course over ground (NOT heading, but direction of movement), -PI..PI, (radians) | +| vel_ned_valid | `bool` | | | True if NED velocity is valid | +| timestamp_time_relative | `int32` | | | timestamp + timestamp_time_relative = Time of the UTC timestamp since system start, (microseconds) | +| time_utc_usec | `uint64` | | | Timestamp (microseconds, UTC), this is the timestamp which comes from the gps module. It might be unavailable right after cold start, indicated by a value of 0 | +| satellites_used | `uint8` | | | Number of satellites used | +| system_error | `uint32` | | | General errors with the connected GPS receiver | +| heading | `float32` | | | heading angle of XYZ body frame rel to NED. Set to NaN if not available and updated (used for dual antenna GPS), (rad, [-PI, PI]) | +| heading_offset | `float32` | | | heading offset of dual antenna array in body frame. Set to NaN if not applicable. (rad, [-PI, PI]) | +| heading_accuracy | `float32` | | | heading accuracy (rad, [0, 2PI]) | +| rtcm_injection_rate | `float32` | | | RTCM message injection rate Hz | +| selected_rtcm_instance | `uint8` | | | uorb instance that is being used for RTCM corrections | +| rtcm_crc_failed | `bool` | | | RTCM message CRC failure detected | +| rtcm_msg_used | `uint8` | | | Indicates if the RTCM message was used successfully by the receiver | +| antenna_offset_x | `float32` | m [body frame FRD] | | X Position of GNSS antenna | +| antenna_offset_y | `float32` | m [body frame FRD] | | Y Position of GNSS antenna | +| antenna_offset_z | `float32` | m [body frame FRD] | | Z Position of GNSS antenna | ## Constants -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -------- | ---------------------------------------------------------- | -| FIX_TYPE_NONE | `uint8` | 1 | Value 0 is also valid to represent no fix. | -| FIX_TYPE_2D | `uint8` | 2 | | -| FIX_TYPE_3D | `uint8` | 3 | | -| FIX_TYPE_RTCM_CODE_DIFFERENTIAL | `uint8` | 4 | | -| FIX_TYPE_RTK_FLOAT | `uint8` | 5 | | -| FIX_TYPE_RTK_FIXED | `uint8` | 6 | | -| FIX_TYPE_EXTRAPOLATED | `uint8` | 8 | | -| JAMMING_STATE_UNKNOWN | `uint8` | 0 | default | -| JAMMING_STATE_OK | `uint8` | 1 | | -| JAMMING_STATE_MITIGATED | `uint8` | 2 | | -| JAMMING_STATE_DETECTED | `uint8` | 3 | | -| SPOOFING_STATE_UNKNOWN | `uint8` | 0 | default | -| SPOOFING_STATE_OK | `uint8` | 1 | | -| SPOOFING_STATE_MITIGATED | `uint8` | 2 | | -| SPOOFING_STATE_DETECTED | `uint8` | 3 | | -| AUTHENTICATION_STATE_UNKNOWN | `uint8` | 0 | default | -| AUTHENTICATION_STATE_INITIALIZING | `uint8` | 1 | | -| AUTHENTICATION_STATE_ERROR | `uint8` | 2 | | -| AUTHENTICATION_STATE_OK | `uint8` | 3 | | -| AUTHENTICATION_STATE_DISABLED | `uint8` | 4 | | -| SYSTEM_ERROR_OK | `uint32` | 0 | default | -| SYSTEM_ERROR_INCOMING_CORRECTIONS | `uint32` | 1 | | -| SYSTEM_ERROR_CONFIGURATION | `uint32` | 2 | | -| SYSTEM_ERROR_SOFTWARE | `uint32` | 4 | | -| SYSTEM_ERROR_ANTENNA | `uint32` | 8 | | -| SYSTEM_ERROR_EVENT_CONGESTION | `uint32` | 16 | | -| SYSTEM_ERROR_CPU_OVERLOAD | `uint32` | 32 | | -| SYSTEM_ERROR_OUTPUT_CONGESTION | `uint32` | 64 | | -| RTCM_MSG_USED_UNKNOWN | `uint8` | 0 | | -| RTCM_MSG_USED_NOT_USED | `uint8` | 1 | | -| RTCM_MSG_USED_USED | `uint8` | 2 | | +| Назва | Тип | Значення | Опис | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -------- | ---------------------------------------------------------- | +| FIX_TYPE_NONE | `uint8` | 1 | Value 0 is also valid to represent no fix. | +| FIX_TYPE_2D | `uint8` | 2 | | +| FIX_TYPE_3D | `uint8` | 3 | | +| FIX_TYPE_RTCM_CODE_DIFFERENTIAL | `uint8` | 4 | | +| FIX_TYPE_RTK_FLOAT | `uint8` | 5 | | +| FIX_TYPE_RTK_FIXED | `uint8` | 6 | | +| FIX_TYPE_EXTRAPOLATED | `uint8` | 8 | | +| JAMMING_STATE_UNKNOWN | `uint8` | 0 | default | +| JAMMING_STATE_OK | `uint8` | 1 | | +| JAMMING_STATE_MITIGATED | `uint8` | 2 | | +| JAMMING_STATE_DETECTED | `uint8` | 3 | | +| SPOOFING_STATE_UNKNOWN | `uint8` | 0 | default | +| SPOOFING_STATE_OK | `uint8` | 1 | | +| SPOOFING_STATE_MITIGATED | `uint8` | 2 | | +| SPOOFING_STATE_DETECTED | `uint8` | 3 | | +| AUTHENTICATION_STATE_UNKNOWN | `uint8` | 0 | default | +| AUTHENTICATION_STATE_INITIALIZING | `uint8` | 1 | | +| AUTHENTICATION_STATE_ERROR | `uint8` | 2 | | +| AUTHENTICATION_STATE_OK | `uint8` | 3 | | +| AUTHENTICATION_STATE_DISABLED | `uint8` | 4 | | +| SYSTEM_ERROR_OK | `uint32` | 0 | default | +| SYSTEM_ERROR_INCOMING_CORRECTIONS | `uint32` | 1 | | +| SYSTEM_ERROR_CONFIGURATION | `uint32` | 2 | | +| SYSTEM_ERROR_SOFTWARE | `uint32` | 4 | | +| SYSTEM_ERROR_ANTENNA | `uint32` | 8 | | +| SYSTEM_ERROR_EVENT_CONGESTION | `uint32` | 16 | | +| SYSTEM_ERROR_CPU_OVERLOAD | `uint32` | 32 | | +| SYSTEM_ERROR_OUTPUT_CONGESTION | `uint32` | 64 | | +| RTCM_MSG_USED_UNKNOWN | `uint8` | 0 | | +| RTCM_MSG_USED_NOT_USED | `uint8` | 1 | | +| RTCM_MSG_USED_USED | `uint8` | 2 | | ## Source Message @@ -183,6 +186,10 @@ uint8 RTCM_MSG_USED_NOT_USED = 1 uint8 RTCM_MSG_USED_USED = 2 uint8 rtcm_msg_used # Indicates if the RTCM message was used successfully by the receiver +float32 antenna_offset_x # [m] [@frame body frame FRD] X Position of GNSS antenna +float32 antenna_offset_y # [m] [@frame body frame FRD] Y Position of GNSS antenna +float32 antenna_offset_z # [m] [@frame body frame FRD] Z Position of GNSS antenna + # TOPICS sensor_gps vehicle_gps_position ``` diff --git a/docs/uk/msg_docs/SensorGyro.md b/docs/uk/msg_docs/SensorGyro.md index 673216cd7c..c8a7aa29ff 100644 --- a/docs/uk/msg_docs/SensorGyro.md +++ b/docs/uk/msg_docs/SensorGyro.md @@ -23,9 +23,9 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------------------------- | ------- | -------- | ---- | -| ORB_QUEUE_LENGTH | `uint8` | 8 | | +| Назва | Тип | Значення | Опис | +| ----------------------------------------------------------------------------------------- | ------- | -------- | ---- | +| ORB_QUEUE_LENGTH | `uint8` | 8 | | ## Source Message diff --git a/docs/uk/msg_docs/SensorGyroFft.md b/docs/uk/msg_docs/SensorGyroFft.md index 58a1c0d701..d407024df1 100644 --- a/docs/uk/msg_docs/SensorGyroFft.md +++ b/docs/uk/msg_docs/SensorGyroFft.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # SensorGyroFft (UORB message) -**TOPICS:** sensor_gyrofft +**TOPICS:** sensor_gyro_fft ## Fields diff --git a/docs/uk/msg_docs/SensorGyroFifo.md b/docs/uk/msg_docs/SensorGyroFifo.md index a0cde80bb2..981577a76c 100644 --- a/docs/uk/msg_docs/SensorGyroFifo.md +++ b/docs/uk/msg_docs/SensorGyroFifo.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # SensorGyroFifo (UORB message) -**TOPICS:** sensor_gyrofifo +**TOPICS:** sensor_gyro_fifo ## Fields @@ -22,9 +22,9 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------------------------- | ------- | -------- | ---- | -| ORB_QUEUE_LENGTH | `uint8` | 4 | | +| Назва | Тип | Значення | Опис | +| ----------------------------------------------------------------------------------------- | ------- | -------- | ---- | +| ORB_QUEUE_LENGTH | `uint8` | 4 | | ## Source Message diff --git a/docs/uk/msg_docs/SensorMag.md b/docs/uk/msg_docs/SensorMag.md index 171c0d9990..18eb238d0b 100644 --- a/docs/uk/msg_docs/SensorMag.md +++ b/docs/uk/msg_docs/SensorMag.md @@ -21,9 +21,9 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------------------------- | ------- | -------- | ---- | -| ORB_QUEUE_LENGTH | `uint8` | 4 | | +| Назва | Тип | Значення | Опис | +| ----------------------------------------------------------------------------------------- | ------- | -------- | ---- | +| ORB_QUEUE_LENGTH | `uint8` | 4 | | ## Source Message diff --git a/docs/uk/msg_docs/SensorOpticalFlow.md b/docs/uk/msg_docs/SensorOpticalFlow.md index 0a8968bb7b..d9acccbeb0 100644 --- a/docs/uk/msg_docs/SensorOpticalFlow.md +++ b/docs/uk/msg_docs/SensorOpticalFlow.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # SensorOpticalFlow (повідомлення UORB) -**TOPICS:** sensor_opticalflow +**TOPICS:** sensor_optical_flow ## Fields @@ -28,12 +28,12 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------------------------------- | ------- | -------- | ---- | -| MODE_UNKNOWN | `uint8` | 0 | | -| MODE_BRIGHT | `uint8` | 1 | | -| MODE_LOWLIGHT | `uint8` | 2 | | -| MODE_SUPER_LOWLIGHT | `uint8` | 3 | | +| Назва | Тип | Значення | Опис | +| ----------------------------------------------------------------------------------------------- | ------- | -------- | ---- | +| MODE_UNKNOWN | `uint8` | 0 | | +| MODE_BRIGHT | `uint8` | 1 | | +| MODE_LOWLIGHT | `uint8` | 2 | | +| MODE_SUPER_LOWLIGHT | `uint8` | 3 | | ## Source Message diff --git a/docs/uk/msg_docs/SensorPreflightMag.md b/docs/uk/msg_docs/SensorPreflightMag.md index 931d5f18af..f4b1de646b 100644 --- a/docs/uk/msg_docs/SensorPreflightMag.md +++ b/docs/uk/msg_docs/SensorPreflightMag.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Метрики перевірки сенсорів перед польотом. The topic will not be updated when the vehicle is armed. -**TOPICS:** sensor_preflightmag +**TOPICS:** sensor_preflight_mag ## Fields diff --git a/docs/uk/msg_docs/SensorsStatus.md b/docs/uk/msg_docs/SensorsStatus.md index 853a81decd..16703b8b07 100644 --- a/docs/uk/msg_docs/SensorsStatus.md +++ b/docs/uk/msg_docs/SensorsStatus.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # SensorsStatus (повідомлення UORB) -Метрики перевірки датчика. Це значення буде нульовим для датчика, який є первинним або незаповненим. +Метрики перевірки датчика. This will be zero for a sensor that's primary or unpopulated. **TOPICS:** sensors_status_baro sensors_status_mag diff --git a/docs/uk/msg_docs/SensorsStatusImu.md b/docs/uk/msg_docs/SensorsStatusImu.md index d9fd0b090c..d4d8beb01d 100644 --- a/docs/uk/msg_docs/SensorsStatusImu.md +++ b/docs/uk/msg_docs/SensorsStatusImu.md @@ -4,9 +4,9 @@ pageClass: is-wide-page # SensorsStatusImu (повідомлення UORB) -Метрики перевірки датчика. Це значення буде нульовим для датчика, який є первинним або незаповненим. +Метрики перевірки датчика. This will be zero for a sensor that's primary or unpopulated. -**TOPICS:** sensors_statusimu +**TOPICS:** sensors_status_imu ## Fields diff --git a/docs/uk/msg_docs/SystemPower.md b/docs/uk/msg_docs/SystemPower.md index 665b2546c8..48dcbd8e69 100644 --- a/docs/uk/msg_docs/SystemPower.md +++ b/docs/uk/msg_docs/SystemPower.md @@ -27,16 +27,16 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------------------------------- | ------- | -------- | ---- | -| BRICK1_VALID_SHIFTS | `uint8` | 0 | | -| BRICK1_VALID_MASK | `uint8` | 1 | | -| BRICK2_VALID_SHIFTS | `uint8` | 1 | | -| BRICK2_VALID_MASK | `uint8` | 2 | | -| BRICK3_VALID_SHIFTS | `uint8` | 2 | | -| BRICK3_VALID_MASK | `uint8` | 4 | | -| BRICK4_VALID_SHIFTS | `uint8` | 3 | | -| BRICK4_VALID_MASK | `uint8` | 8 | | +| Назва | Тип | Значення | Опис | +| ----------------------------------------------------------------------------------------------- | ------- | -------- | ---- | +| BRICK1_VALID_SHIFTS | `uint8` | 0 | | +| BRICK1_VALID_MASK | `uint8` | 1 | | +| BRICK2_VALID_SHIFTS | `uint8` | 1 | | +| BRICK2_VALID_MASK | `uint8` | 2 | | +| BRICK3_VALID_SHIFTS | `uint8` | 2 | | +| BRICK3_VALID_MASK | `uint8` | 4 | | +| BRICK4_VALID_SHIFTS | `uint8` | 3 | | +| BRICK4_VALID_MASK | `uint8` | 8 | | ## Source Message diff --git a/docs/uk/msg_docs/TakeoffStatus.md b/docs/uk/msg_docs/TakeoffStatus.md index ecdc3d1b91..f7e1fbe997 100644 --- a/docs/uk/msg_docs/TakeoffStatus.md +++ b/docs/uk/msg_docs/TakeoffStatus.md @@ -18,14 +18,14 @@ Status of the takeoff state machine currently just available for multicopters. ## Constants -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | -------- | ---- | -| TAKEOFF_STATE_UNINITIALIZED | `uint8` | 0 | | -| TAKEOFF_STATE_DISARMED | `uint8` | 1 | | -| TAKEOFF_STATE_SPOOLUP | `uint8` | 2 | | -| TAKEOFF_STATE_READY_FOR_TAKEOFF | `uint8` | 3 | | -| TAKEOFF_STATE_RAMPUP | `uint8` | 4 | | -| TAKEOFF_STATE_FLIGHT | `uint8` | 5 | | +| Назва | Тип | Значення | Опис | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | -------- | ---- | +| TAKEOFF_STATE_UNINITIALIZED | `uint8` | 0 | | +| TAKEOFF_STATE_DISARMED | `uint8` | 1 | | +| TAKEOFF_STATE_SPOOLUP | `uint8` | 2 | | +| TAKEOFF_STATE_READY_FOR_TAKEOFF | `uint8` | 3 | | +| TAKEOFF_STATE_RAMPUP | `uint8` | 4 | | +| TAKEOFF_STATE_FLIGHT | `uint8` | 5 | | ## Source Message diff --git a/docs/uk/msg_docs/TaskStackInfo.md b/docs/uk/msg_docs/TaskStackInfo.md index d42a5796a4..2189c2181d 100644 --- a/docs/uk/msg_docs/TaskStackInfo.md +++ b/docs/uk/msg_docs/TaskStackInfo.md @@ -6,7 +6,7 @@ pageClass: is-wide-page stack information for a single running process. -**TOPICS:** task_stackinfo +**TOPICS:** task_stack_info ## Fields @@ -18,9 +18,9 @@ stack information for a single running process. ## Constants -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------------------------- | ------- | -------- | ---- | -| ORB_QUEUE_LENGTH | `uint8` | 2 | | +| Назва | Тип | Значення | Опис | +| ----------------------------------------------------------------------------------------- | ------- | -------- | ---- | +| ORB_QUEUE_LENGTH | `uint8` | 2 | | ## Source Message diff --git a/docs/uk/msg_docs/TelemetryStatus.md b/docs/uk/msg_docs/TelemetryStatus.md index 5d1aa59ca3..8aeb7813e9 100644 --- a/docs/uk/msg_docs/TelemetryStatus.md +++ b/docs/uk/msg_docs/TelemetryStatus.md @@ -36,6 +36,7 @@ pageClass: is-wide-page | heartbeat_type_onboard_controller | `bool` | | | MAV_TYPE_ONBOARD_CONTROLLER | | heartbeat_type_gimbal | `bool` | | | MAV_TYPE_GIMBAL | | heartbeat_type_adsb | `bool` | | | MAV_TYPE_ADSB | +| heartbeat_type_flarm | `bool` | | | MAV_TYPE_FLARM | | heartbeat_type_camera | `bool` | | | MAV_TYPE_CAMERA | | heartbeat_type_parachute | `bool` | | | MAV_TYPE_PARACHUTE | | heartbeat_type_open_drone_id | `bool` | | | MAV_TYPE_ODID | @@ -51,14 +52,14 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| ---------------------------------------------------------------------------------------------------------------------------------- | -------- | -------- | ------------------------------------------------------------------ | -| LINK_TYPE_GENERIC | `uint8` | 0 | | -| LINK_TYPE_UBIQUITY_BULLET | `uint8` | 1 | | -| LINK_TYPE_WIRE | `uint8` | 2 | | -| LINK_TYPE_USB | `uint8` | 3 | | -| LINK_TYPE_IRIDIUM | `uint8` | 4 | | -| HEARTBEAT_TIMEOUT_US | `uint64` | 2500000 | Heartbeat timeout (tolerate missing 1 + jitter) | +| Назва | Тип | Значення | Опис | +| -------------------------------------------------------------------------------------------------------------------------------- | -------- | -------- | ------------------------------------------------------------------ | +| LINK_TYPE_GENERIC | `uint8` | 0 | | +| LINK_TYPE_UBIQUITY_BULLET | `uint8` | 1 | | +| LINK_TYPE_WIRE | `uint8` | 2 | | +| LINK_TYPE_USB | `uint8` | 3 | | +| LINK_TYPE_IRIDIUM | `uint8` | 4 | | +| HEARTBEAT_TIMEOUT_US | `uint64` | 2500000 | Heartbeat timeout (tolerate missing 1 + jitter) | ## Source Message @@ -113,6 +114,7 @@ bool heartbeat_type_gcs # MAV_TYPE_GCS bool heartbeat_type_onboard_controller # MAV_TYPE_ONBOARD_CONTROLLER bool heartbeat_type_gimbal # MAV_TYPE_GIMBAL bool heartbeat_type_adsb # MAV_TYPE_ADSB +bool heartbeat_type_flarm # MAV_TYPE_FLARM bool heartbeat_type_camera # MAV_TYPE_CAMERA bool heartbeat_type_parachute # MAV_TYPE_PARACHUTE bool heartbeat_type_open_drone_id # MAV_TYPE_ODID diff --git a/docs/uk/msg_docs/TiltrotorExtraControls.md b/docs/uk/msg_docs/TiltrotorExtraControls.md index ee72fdae11..6f8fb44c7d 100644 --- a/docs/uk/msg_docs/TiltrotorExtraControls.md +++ b/docs/uk/msg_docs/TiltrotorExtraControls.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # TiltrotorExtraControls (UORB message) -**TOPICS:** tiltrotor_extracontrols +**TOPICS:** tiltrotor_extra_controls ## Fields diff --git a/docs/uk/msg_docs/TimesyncStatus.md b/docs/uk/msg_docs/TimesyncStatus.md index 61c38e61e9..72691c5dc8 100644 --- a/docs/uk/msg_docs/TimesyncStatus.md +++ b/docs/uk/msg_docs/TimesyncStatus.md @@ -19,11 +19,11 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| --------------------------------------------------------------------------------------------------------- | ------- | -------- | ---- | -| SOURCE_PROTOCOL_UNKNOWN | `uint8` | 0 | | -| SOURCE_PROTOCOL_MAVLINK | `uint8` | 1 | | -| SOURCE_PROTOCOL_DDS | `uint8` | 2 | | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------------------------------------------- | ------- | -------- | ---- | +| SOURCE_PROTOCOL_UNKNOWN | `uint8` | 0 | | +| SOURCE_PROTOCOL_MAVLINK | `uint8` | 1 | | +| SOURCE_PROTOCOL_DDS | `uint8` | 2 | | ## Source Message diff --git a/docs/uk/msg_docs/TrajectorySetpoint.md b/docs/uk/msg_docs/TrajectorySetpoint.md index 91e3d1380e..276876882b 100644 --- a/docs/uk/msg_docs/TrajectorySetpoint.md +++ b/docs/uk/msg_docs/TrajectorySetpoint.md @@ -22,9 +22,9 @@ Trajectory setpoint in NED frame. Input to PID position controller. Потріб ## Constants -| Назва | Тип | Значення | Опис | -| -------------------------------------------------------------------- | -------- | -------- | ---- | -| MESSAGE_VERSION | `uint32` | 0 | | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------ | -------- | -------- | ---- | +| MESSAGE_VERSION | `uint32` | 0 | | ## Source Message diff --git a/docs/uk/msg_docs/TransponderReport.md b/docs/uk/msg_docs/TransponderReport.md index da15f55a06..69f57c5218 100644 --- a/docs/uk/msg_docs/TransponderReport.md +++ b/docs/uk/msg_docs/TransponderReport.md @@ -28,37 +28,37 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------- | -------- | ---- | -| PX4_ADSB_FLAGS_VALID_COORDS | `uint16` | 1 | | -| PX4_ADSB_FLAGS_VALID_ALTITUDE | `uint16` | 2 | | -| PX4_ADSB_FLAGS_VALID_HEADING | `uint16` | 4 | | -| PX4_ADSB_FLAGS_VALID_VELOCITY | `uint16` | 8 | | -| PX4_ADSB_FLAGS_VALID_CALLSIGN | `uint16` | 16 | | -| PX4_ADSB_FLAGS_VALID_SQUAWK | `uint16` | 32 | | -| PX4_ADSB_FLAGS_RETRANSLATE | `uint16` | 256 | | -| ADSB_EMITTER_TYPE_NO_INFO | `uint16` | 0 | | -| ADSB_EMITTER_TYPE_LIGHT | `uint16` | 1 | | -| ADSB_EMITTER_TYPE_SMALL | `uint16` | 2 | | -| ADSB_EMITTER_TYPE_LARGE | `uint16` | 3 | | -| ADSB_EMITTER_TYPE_HIGH_VORTEX_LARGE | `uint16` | 4 | | -| ADSB_EMITTER_TYPE_HEAVY | `uint16` | 5 | | -| ADSB_EMITTER_TYPE_HIGHLY_MANUV | `uint16` | 6 | | -| ADSB_EMITTER_TYPE_ROTOCRAFT | `uint16` | 7 | | -| ADSB_EMITTER_TYPE_UNASSIGNED | `uint16` | 8 | | -| ADSB_EMITTER_TYPE_GLIDER | `uint16` | 9 | | -| ADSB_EMITTER_TYPE_LIGHTER_AIR | `uint16` | 10 | | -| ADSB_EMITTER_TYPE_PARACHUTE | `uint16` | 11 | | -| ADSB_EMITTER_TYPE_ULTRA_LIGHT | `uint16` | 12 | | -| ADSB_EMITTER_TYPE_UNASSIGNED2 | `uint16` | 13 | | -| ADSB_EMITTER_TYPE_UAV | `uint16` | 14 | | -| ADSB_EMITTER_TYPE_SPACE | `uint16` | 15 | | -| ADSB_EMITTER_TYPE_UNASSGINED3 | `uint16` | 16 | | -| ADSB_EMITTER_TYPE_EMERGENCY_SURFACE | `uint16` | 17 | | -| ADSB_EMITTER_TYPE_SERVICE_SURFACE | `uint16` | 18 | | -| ADSB_EMITTER_TYPE_POINT_OBSTACLE | `uint16` | 19 | | -| ADSB_EMITTER_TYPE_ENUM_END | `uint16` | 20 | | -| ORB_QUEUE_LENGTH | `uint8` | 16 | | +| Назва | Тип | Значення | Опис | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -------- | ---- | +| PX4_ADSB_FLAGS_VALID_COORDS | `uint16` | 1 | | +| PX4_ADSB_FLAGS_VALID_ALTITUDE | `uint16` | 2 | | +| PX4_ADSB_FLAGS_VALID_HEADING | `uint16` | 4 | | +| PX4_ADSB_FLAGS_VALID_VELOCITY | `uint16` | 8 | | +| PX4_ADSB_FLAGS_VALID_CALLSIGN | `uint16` | 16 | | +| PX4_ADSB_FLAGS_VALID_SQUAWK | `uint16` | 32 | | +| PX4_ADSB_FLAGS_RETRANSLATE | `uint16` | 256 | | +| ADSB_EMITTER_TYPE_NO_INFO | `uint16` | 0 | | +| ADSB_EMITTER_TYPE_LIGHT | `uint16` | 1 | | +| ADSB_EMITTER_TYPE_SMALL | `uint16` | 2 | | +| ADSB_EMITTER_TYPE_LARGE | `uint16` | 3 | | +| ADSB_EMITTER_TYPE_HIGH_VORTEX_LARGE | `uint16` | 4 | | +| ADSB_EMITTER_TYPE_HEAVY | `uint16` | 5 | | +| ADSB_EMITTER_TYPE_HIGHLY_MANUV | `uint16` | 6 | | +| ADSB_EMITTER_TYPE_ROTOCRAFT | `uint16` | 7 | | +| ADSB_EMITTER_TYPE_UNASSIGNED | `uint16` | 8 | | +| ADSB_EMITTER_TYPE_GLIDER | `uint16` | 9 | | +| ADSB_EMITTER_TYPE_LIGHTER_AIR | `uint16` | 10 | | +| ADSB_EMITTER_TYPE_PARACHUTE | `uint16` | 11 | | +| ADSB_EMITTER_TYPE_ULTRA_LIGHT | `uint16` | 12 | | +| ADSB_EMITTER_TYPE_UNASSIGNED2 | `uint16` | 13 | | +| ADSB_EMITTER_TYPE_UAV | `uint16` | 14 | | +| ADSB_EMITTER_TYPE_SPACE | `uint16` | 15 | | +| ADSB_EMITTER_TYPE_UNASSGINED3 | `uint16` | 16 | | +| ADSB_EMITTER_TYPE_EMERGENCY_SURFACE | `uint16` | 17 | | +| ADSB_EMITTER_TYPE_SERVICE_SURFACE | `uint16` | 18 | | +| ADSB_EMITTER_TYPE_POINT_OBSTACLE | `uint16` | 19 | | +| ADSB_EMITTER_TYPE_ENUM_END | `uint16` | 20 | | +| ORB_QUEUE_LENGTH | `uint8` | 16 | | ## Source Message diff --git a/docs/uk/msg_docs/TuneControl.md b/docs/uk/msg_docs/TuneControl.md index a52b2dab06..c9bb6fb193 100644 --- a/docs/uk/msg_docs/TuneControl.md +++ b/docs/uk/msg_docs/TuneControl.md @@ -22,33 +22,33 @@ This message is used to control the tunes, when the tune_id is set to CUSTOM. th ## Constants -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | -------- | ---- | -| TUNE_ID_STOP | `uint8` | 0 | | -| TUNE_ID_STARTUP | `uint8` | 1 | | -| TUNE_ID_ERROR | `uint8` | 2 | | -| TUNE_ID_NOTIFY_POSITIVE | `uint8` | 3 | | -| TUNE_ID_NOTIFY_NEUTRAL | `uint8` | 4 | | -| TUNE_ID_NOTIFY_NEGATIVE | `uint8` | 5 | | -| TUNE_ID_ARMING_WARNING | `uint8` | 6 | | -| TUNE_ID_BATTERY_WARNING_SLOW | `uint8` | 7 | | -| TUNE_ID_BATTERY_WARNING_FAST | `uint8` | 8 | | -| TUNE_ID_GPS_WARNING | `uint8` | 9 | | -| TUNE_ID_ARMING_FAILURE | `uint8` | 10 | | -| TUNE_ID_PARACHUTE_RELEASE | `uint8` | 11 | | -| TUNE_ID_SINGLE_BEEP | `uint8` | 12 | | -| TUNE_ID_HOME_SET | `uint8` | 13 | | -| TUNE_ID_SD_INIT | `uint8` | 14 | | -| TUNE_ID_SD_ERROR | `uint8` | 15 | | -| TUNE_ID_PROG_PX4IO | `uint8` | 16 | | -| TUNE_ID_PROG_PX4IO_OK | `uint8` | 17 | | -| TUNE_ID_PROG_PX4IO_ERR | `uint8` | 18 | | -| TUNE_ID_POWER_OFF | `uint8` | 19 | | -| NUMBER_OF_TUNES | `uint8` | 20 | | -| VOLUME_LEVEL_MIN | `uint8` | 0 | | -| VOLUME_LEVEL_DEFAULT | `uint8` | 20 | | -| VOLUME_LEVEL_MAX | `uint8` | 100 | | -| ORB_QUEUE_LENGTH | `uint8` | 4 | | +| Назва | Тип | Значення | Опис | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | -------- | ---- | +| TUNE_ID_STOP | `uint8` | 0 | | +| TUNE_ID_STARTUP | `uint8` | 1 | | +| TUNE_ID_ERROR | `uint8` | 2 | | +| TUNE_ID_NOTIFY_POSITIVE | `uint8` | 3 | | +| TUNE_ID_NOTIFY_NEUTRAL | `uint8` | 4 | | +| TUNE_ID_NOTIFY_NEGATIVE | `uint8` | 5 | | +| TUNE_ID_ARMING_WARNING | `uint8` | 6 | | +| TUNE_ID_BATTERY_WARNING_SLOW | `uint8` | 7 | | +| TUNE_ID_BATTERY_WARNING_FAST | `uint8` | 8 | | +| TUNE_ID_GPS_WARNING | `uint8` | 9 | | +| TUNE_ID_ARMING_FAILURE | `uint8` | 10 | | +| TUNE_ID_PARACHUTE_RELEASE | `uint8` | 11 | | +| TUNE_ID_SINGLE_BEEP | `uint8` | 12 | | +| TUNE_ID_HOME_SET | `uint8` | 13 | | +| TUNE_ID_SD_INIT | `uint8` | 14 | | +| TUNE_ID_SD_ERROR | `uint8` | 15 | | +| TUNE_ID_PROG_PX4IO | `uint8` | 16 | | +| TUNE_ID_PROG_PX4IO_OK | `uint8` | 17 | | +| TUNE_ID_PROG_PX4IO_ERR | `uint8` | 18 | | +| TUNE_ID_POWER_OFF | `uint8` | 19 | | +| NUMBER_OF_TUNES | `uint8` | 20 | | +| VOLUME_LEVEL_MIN | `uint8` | 0 | | +| VOLUME_LEVEL_DEFAULT | `uint8` | 20 | | +| VOLUME_LEVEL_MAX | `uint8` | 100 | | +| ORB_QUEUE_LENGTH | `uint8` | 4 | | ## Source Message diff --git a/docs/uk/msg_docs/UavcanParameterRequest.md b/docs/uk/msg_docs/UavcanParameterRequest.md index f068ce116a..513e8d2eab 100644 --- a/docs/uk/msg_docs/UavcanParameterRequest.md +++ b/docs/uk/msg_docs/UavcanParameterRequest.md @@ -6,7 +6,7 @@ pageClass: is-wide-page UAVCAN-MAVLink parameter bridge request type. -**TOPICS:** uavcan_parameterrequest +**TOPICS:** uavcan_parameter_request ## Fields @@ -23,16 +23,16 @@ UAVCAN-MAVLink parameter bridge request type. ## Constants -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------ | -| MESSAGE_TYPE_PARAM_REQUEST_READ | `uint8` | 20 | MAVLINK_MSG_ID_PARAM_REQUEST_READ | -| MESSAGE_TYPE_PARAM_REQUEST_LIST | `uint8` | 21 | MAVLINK_MSG_ID_PARAM_REQUEST_LIST | -| MESSAGE_TYPE_PARAM_SET | `uint8` | 23 | MAVLINK_MSG_ID_PARAM_SET | -| NODE_ID_ALL | `uint8` | 0 | MAV_COMP_ID_ALL | -| PARAM_TYPE_UINT8 | `uint8` | 1 | MAV_PARAM_TYPE_UINT8 | -| PARAM_TYPE_INT64 | `uint8` | 8 | MAV_PARAM_TYPE_INT64 | -| PARAM_TYPE_REAL32 | `uint8` | 9 | MAV_PARAM_TYPE_REAL32 | -| ORB_QUEUE_LENGTH | `uint8` | 4 | | +| Назва | Тип | Значення | Опис | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------ | +| MESSAGE_TYPE_PARAM_REQUEST_READ | `uint8` | 20 | MAVLINK_MSG_ID_PARAM_REQUEST_READ | +| MESSAGE_TYPE_PARAM_REQUEST_LIST | `uint8` | 21 | MAVLINK_MSG_ID_PARAM_REQUEST_LIST | +| MESSAGE_TYPE_PARAM_SET | `uint8` | 23 | MAVLINK_MSG_ID_PARAM_SET | +| NODE_ID_ALL | `uint8` | 0 | MAV_COMP_ID_ALL | +| PARAM_TYPE_UINT8 | `uint8` | 1 | MAV_PARAM_TYPE_UINT8 | +| PARAM_TYPE_INT64 | `uint8` | 8 | MAV_PARAM_TYPE_INT64 | +| PARAM_TYPE_REAL32 | `uint8` | 9 | MAV_PARAM_TYPE_REAL32 | +| ORB_QUEUE_LENGTH | `uint8` | 4 | | ## Source Message diff --git a/docs/uk/msg_docs/UavcanParameterValue.md b/docs/uk/msg_docs/UavcanParameterValue.md index 4e77fab3d8..73bacccf3f 100644 --- a/docs/uk/msg_docs/UavcanParameterValue.md +++ b/docs/uk/msg_docs/UavcanParameterValue.md @@ -6,7 +6,7 @@ pageClass: is-wide-page UAVCAN-MAVLink parameter bridge response type. -**TOPICS:** uavcan_parametervalue +**TOPICS:** uavcan_parameter_value ## Fields diff --git a/docs/uk/msg_docs/UlogStream.md b/docs/uk/msg_docs/UlogStream.md index 08e9606c69..25dadb8bdc 100644 --- a/docs/uk/msg_docs/UlogStream.md +++ b/docs/uk/msg_docs/UlogStream.md @@ -21,10 +21,10 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------------------------- | ------- | -------- | ------------------------------------------------------------------------------------ | -| FLAGS_NEED_ACK | `uint8` | 1 | if set, this message requires to be acked. | -| ORB_QUEUE_LENGTH | `uint8` | 16 | TODO: we might be able to reduce this if mavlink polled on the topic | +| Назва | Тип | Значення | Опис | +| ----------------------------------------------------------------------------------------- | ------- | -------- | ------------------------------------------------------------------------------------ | +| FLAGS_NEED_ACK | `uint8` | 1 | if set, this message requires to be acked. | +| ORB_QUEUE_LENGTH | `uint8` | 16 | TODO: we might be able to reduce this if mavlink polled on the topic | ## Source Message diff --git a/docs/uk/msg_docs/UlogStreamAck.md b/docs/uk/msg_docs/UlogStreamAck.md index e01165ef0a..7359f78a69 100644 --- a/docs/uk/msg_docs/UlogStreamAck.md +++ b/docs/uk/msg_docs/UlogStreamAck.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Ack a previously sent ulog_stream message that had. the NEED_ACK flag set. -**TOPICS:** ulog_streamack +**TOPICS:** ulog_stream_ack ## Fields @@ -17,10 +17,10 @@ Ack a previously sent ulog_stream message that had. the NEED_ACK flag set. ## Constants -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------------------- | ------- | -------- | ------------------------------------------------------------------------------------------------------------------------ | -| ACK_TIMEOUT | `int32` | 50 | timeout waiting for an ack until we retry to send the message [ms] | -| ACK_MAX_TRIES | `int32` | 50 | maximum amount of tries to (re-)send a message, each time waiting ACK_TIMEOUT ms | +| Назва | Тип | Значення | Опис | +| ----------------------------------------------------------------------------------- | ------- | -------- | ------------------------------------------------------------------------------------------------------------------------ | +| ACK_TIMEOUT | `int32` | 50 | timeout waiting for an ack until we retry to send the message [ms] | +| ACK_MAX_TRIES | `int32` | 50 | maximum amount of tries to (re-)send a message, each time waiting ACK_TIMEOUT ms | ## Source Message diff --git a/docs/uk/msg_docs/UnregisterExtComponent.md b/docs/uk/msg_docs/UnregisterExtComponent.md index 12a87efab3..3e90ce448e 100644 --- a/docs/uk/msg_docs/UnregisterExtComponent.md +++ b/docs/uk/msg_docs/UnregisterExtComponent.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # UnregisterExtComponent (UORB message) -**TOPICS:** unregister_extcomponent +**TOPICS:** unregister_ext_component ## Fields @@ -18,9 +18,9 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| -------------------------------------------------------------------- | -------- | -------- | ---- | -| MESSAGE_VERSION | `uint32` | 0 | | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------ | -------- | -------- | ---- | +| MESSAGE_VERSION | `uint32` | 0 | | ## Source Message diff --git a/docs/uk/msg_docs/VehicleAirData.md b/docs/uk/msg_docs/VehicleAirData.md index 97b6e35b7d..35614ebce3 100644 --- a/docs/uk/msg_docs/VehicleAirData.md +++ b/docs/uk/msg_docs/VehicleAirData.md @@ -9,7 +9,7 @@ Vehicle air data. Data from the currently selected barometer (plus ambient temperature from the source specified in temperature_source). Includes calculated data such as barometric altitude and air density. -**TOPICS:** vehicle_airdata +**TOPICS:** vehicle_air_data ## Fields diff --git a/docs/uk/msg_docs/VehicleAngularAccelerationSetpoint.md b/docs/uk/msg_docs/VehicleAngularAccelerationSetpoint.md index 12fd5dc934..94df7a0b8f 100644 --- a/docs/uk/msg_docs/VehicleAngularAccelerationSetpoint.md +++ b/docs/uk/msg_docs/VehicleAngularAccelerationSetpoint.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # VehicleAngularAccelerationSetpoint (Повідомлення UORB) -**TOPICS:** vehicle_angularacceleration_setpoint +**TOPICS:** vehicle_angular_acceleration_setpoint ## Fields diff --git a/docs/uk/msg_docs/VehicleAngularVelocity.md b/docs/uk/msg_docs/VehicleAngularVelocity.md index edc0b66901..db027b7668 100644 --- a/docs/uk/msg_docs/VehicleAngularVelocity.md +++ b/docs/uk/msg_docs/VehicleAngularVelocity.md @@ -17,9 +17,9 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| -------------------------------------------------------------------- | -------- | -------- | ---- | -| MESSAGE_VERSION | `uint32` | 0 | | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------ | -------- | -------- | ---- | +| MESSAGE_VERSION | `uint32` | 0 | | ## Source Message diff --git a/docs/uk/msg_docs/VehicleAttitude.md b/docs/uk/msg_docs/VehicleAttitude.md index 7d6fb0df77..4dfe58a81c 100644 --- a/docs/uk/msg_docs/VehicleAttitude.md +++ b/docs/uk/msg_docs/VehicleAttitude.md @@ -20,9 +20,9 @@ This is similar to the mavlink message ATTITUDE_QUATERNION, but for onboard use. ## Constants -| Назва | Тип | Значення | Опис | -| -------------------------------------------------------------------- | -------- | -------- | ---- | -| MESSAGE_VERSION | `uint32` | 0 | | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------ | -------- | -------- | ---- | +| MESSAGE_VERSION | `uint32` | 0 | | ## Source Message diff --git a/docs/uk/msg_docs/VehicleAttitudeSetpoint.md b/docs/uk/msg_docs/VehicleAttitudeSetpoint.md index b1481f6d51..5db60e3d47 100644 --- a/docs/uk/msg_docs/VehicleAttitudeSetpoint.md +++ b/docs/uk/msg_docs/VehicleAttitudeSetpoint.md @@ -17,9 +17,9 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| -------------------------------------------------------------------- | -------- | -------- | ---- | -| MESSAGE_VERSION | `uint32` | 1 | | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------ | -------- | -------- | ---- | +| MESSAGE_VERSION | `uint32` | 1 | | ## Source Message diff --git a/docs/uk/msg_docs/VehicleAttitudeSetpointV0.md b/docs/uk/msg_docs/VehicleAttitudeSetpointV0.md index 1918696cf4..98ef4303cd 100644 --- a/docs/uk/msg_docs/VehicleAttitudeSetpointV0.md +++ b/docs/uk/msg_docs/VehicleAttitudeSetpointV0.md @@ -19,9 +19,9 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| -------------------------------------------------------------------- | -------- | -------- | ---- | -| MESSAGE_VERSION | `uint32` | 0 | | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------ | -------- | -------- | ---- | +| MESSAGE_VERSION | `uint32` | 0 | | ## Source Message diff --git a/docs/uk/msg_docs/VehicleCommand.md b/docs/uk/msg_docs/VehicleCommand.md index 81832aaf10..8555269f36 100644 --- a/docs/uk/msg_docs/VehicleCommand.md +++ b/docs/uk/msg_docs/VehicleCommand.md @@ -1052,6 +1052,20 @@ Actuator configuration command. | 6 | | | ? | | 7 | | | ? | +### VEHICLE_CMD_ESC_REQUEST_EEPROM (312) + +Request EEPROM data from an ESC. + +| Param | Units | Range/Enum | Опис | +| ----- | ----- | ---------- | ------------- | +| 1 | | | ESC Index | +| 2 | | | Firmware Type | +| 3 | | | Unused | +| 4 | | | Unused | +| 5 | | | Unused | +| 6 | | | ? | +| 7 | | | ? | + ### VEHICLE_CMD_COMPONENT_ARM_DISARM (400) Arms / Disarms a component. @@ -1444,6 +1458,20 @@ None | 6 | | | ? | | 7 | | | ? | +### VEHICLE_CMD_ESTIMATOR_SENSOR_ENABLE (43006) + +Enable/disable estimator sensor fusion. + +| Param | Units | 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). @@ -1490,34 +1518,34 @@ Change mode by specifying nav_state directly. ### ORBIT_YAW_BEHAVIOUR {#ORBIT_YAW_BEHAVIOUR} -| Назва | Тип | Значення | Опис | -| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | -------- | ---- | -| ORBIT_YAW_BEHAVIOUR_HOLD_FRONT_TO_CIRCLE_CENTER | `uint8` | 0 | | -| ORBIT_YAW_BEHAVIOUR_HOLD_INITIAL_HEADING | `uint8` | 1 | | -| ORBIT_YAW_BEHAVIOUR_UNCONTROLLED | `uint8` | 2 | | -| ORBIT_YAW_BEHAVIOUR_HOLD_FRONT_TANGENT_TO_CIRCLE | `uint8` | 3 | | -| ORBIT_YAW_BEHAVIOUR_RC_CONTROLLED | `uint8` | 4 | | -| ORBIT_YAW_BEHAVIOUR_UNCHANGED | `uint8` | 5 | | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------- | -------- | ---- | +| ORBIT_YAW_BEHAVIOUR_HOLD_FRONT_TO_CIRCLE_CENTER | `uint8` | 0 | | +| ORBIT_YAW_BEHAVIOUR_HOLD_INITIAL_HEADING | `uint8` | 1 | | +| ORBIT_YAW_BEHAVIOUR_UNCONTROLLED | `uint8` | 2 | | +| ORBIT_YAW_BEHAVIOUR_HOLD_FRONT_TANGENT_TO_CIRCLE | `uint8` | 3 | | +| ORBIT_YAW_BEHAVIOUR_RC_CONTROLLED | `uint8` | 4 | | +| ORBIT_YAW_BEHAVIOUR_UNCHANGED | `uint8` | 5 | | ### VEHICLE_ROI {#VEHICLE_ROI} -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------------------------------------------------------ | ------- | -------- | -------------------------------------------- | -| VEHICLE_ROI_NONE | `uint8` | 0 | No region of interest. | -| VEHICLE_ROI_WPNEXT | `uint8` | 1 | Point toward next MISSION. | -| VEHICLE_ROI_WPINDEX | `uint8` | 2 | Point toward given MISSION. | -| VEHICLE_ROI_LOCATION | `uint8` | 3 | Point toward fixed location. | -| VEHICLE_ROI_TARGET | `uint8` | 4 | Point toward target. | -| VEHICLE_ROI_ENUM_END | `uint8` | 5 | | +| Назва | Тип | Значення | Опис | +| ---------------------------------------------------------------------------------------------------------------------- | ------- | -------- | -------------------------------------------- | +| VEHICLE_ROI_NONE | `uint8` | 0 | No region of interest. | +| VEHICLE_ROI_WPNEXT | `uint8` | 1 | Point toward next MISSION. | +| VEHICLE_ROI_WPINDEX | `uint8` | 2 | Point toward given MISSION. | +| VEHICLE_ROI_LOCATION | `uint8` | 3 | Point toward fixed location. | +| VEHICLE_ROI_TARGET | `uint8` | 4 | Point toward target. | +| VEHICLE_ROI_ENUM_END | `uint8` | 5 | | ### SPEED_TYPE {#SPEED_TYPE} -| Назва | Тип | Значення | Опис | -| -------------------------------------------------------------------------------------------------------------------------------- | ------- | -------- | ---- | -| SPEED_TYPE_AIRSPEED | `uint8` | 0 | | -| SPEED_TYPE_GROUNDSPEED | `uint8` | 1 | | -| SPEED_TYPE_CLIMB_SPEED | `uint8` | 2 | | -| SPEED_TYPE_DESCEND_SPEED | `uint8` | 3 | | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------------------------------------------------------------------ | ------- | -------- | ---- | +| SPEED_TYPE_AIRSPEED | `uint8` | 0 | | +| SPEED_TYPE_GROUNDSPEED | `uint8` | 1 | | +| SPEED_TYPE_CLIMB_SPEED | `uint8` | 2 | | +| SPEED_TYPE_DESCEND_SPEED | `uint8` | 3 | | ### MAV_MOUNT_MODE {#MAV_MOUNT_MODE} @@ -1526,50 +1554,65 @@ Change mode by specifying nav_state directly. ## Constants -| Назва | Тип | Значення | Опис | -| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| MESSAGE_VERSION | `uint32` | 0 | | -| PREFLIGHT_CALIBRATION_TEMPERATURE_CALIBRATION | `uint16` | 3 | Param value for VEHICLE_CMD_PREFLIGHT_CALIBRATION to start temperature calibration. | -| VEHICLE_MOUNT_MODE_RETRACT | `uint8` | 0 | Load and keep safe position (Roll,Pitch,Yaw) from permanent memory and stop stabilization. | -| VEHICLE_MOUNT_MODE_NEUTRAL | `uint8` | 1 | Load and keep neutral position (Roll,Pitch,Yaw) from permanent memory. | -| VEHICLE_MOUNT_MODE_MAVLINK_TARGETING | `uint8` | 2 | Load neutral position and start MAVLink Roll,Pitch,Yaw control with stabilization. | -| VEHICLE_MOUNT_MODE_RC_TARGETING | `uint8` | 3 | Load neutral position and start RC Roll,Pitch,Yaw control with stabilization. | -| VEHICLE_MOUNT_MODE_GPS_POINT | `uint8` | 4 | Load neutral position and start to point to Lat,Lon,Alt. | -| VEHICLE_MOUNT_MODE_ENUM_END | `uint8` | 5 | | -| PARACHUTE_ACTION_DISABLE | `uint8` | 0 | | -| PARACHUTE_ACTION_ENABLE | `uint8` | 1 | | -| PARACHUTE_ACTION_RELEASE | `uint8` | 2 | | -| FAILURE_UNIT_SENSOR_GYRO | `uint8` | 0 | | -| FAILURE_UNIT_SENSOR_ACCEL | `uint8` | 1 | | -| FAILURE_UNIT_SENSOR_MAG | `uint8` | 2 | | -| FAILURE_UNIT_SENSOR_BARO | `uint8` | 3 | | -| FAILURE_UNIT_SENSOR_GPS | `uint8` | 4 | | -| FAILURE_UNIT_SENSOR_OPTICAL_FLOW | `uint8` | 5 | | -| FAILURE_UNIT_SENSOR_VIO | `uint8` | 6 | | -| FAILURE_UNIT_SENSOR_DISTANCE_SENSOR | `uint8` | 7 | | -| FAILURE_UNIT_SENSOR_AIRSPEED | `uint8` | 8 | | -| FAILURE_UNIT_SYSTEM_BATTERY | `uint8` | 100 | | -| FAILURE_UNIT_SYSTEM_MOTOR | `uint8` | 101 | | -| FAILURE_UNIT_SYSTEM_SERVO | `uint8` | 102 | | -| FAILURE_UNIT_SYSTEM_AVOIDANCE | `uint8` | 103 | | -| FAILURE_UNIT_SYSTEM_RC_SIGNAL | `uint8` | 104 | | -| FAILURE_UNIT_SYSTEM_MAVLINK_SIGNAL | `uint8` | 105 | | -| FAILURE_TYPE_OK | `uint8` | 0 | | -| FAILURE_TYPE_OFF | `uint8` | 1 | | -| FAILURE_TYPE_STUCK | `uint8` | 2 | | -| FAILURE_TYPE_GARBAGE | `uint8` | 3 | | -| FAILURE_TYPE_WRONG | `uint8` | 4 | | -| FAILURE_TYPE_SLOW | `uint8` | 5 | | -| FAILURE_TYPE_DELAYED | `uint8` | 6 | | -| FAILURE_TYPE_INTERMITTENT | `uint8` | 7 | | -| ARMING_ACTION_DISARM | `int8` | 0 | | -| ARMING_ACTION_ARM | `int8` | 1 | | -| GRIPPER_ACTION_RELEASE | `uint8` | 0 | | -| GRIPPER_ACTION_GRAB | `uint8` | 1 | | -| SAFETY_OFF | `uint8` | 0 | | -| SAFETY_ON | `uint8` | 1 | | -| ORB_QUEUE_LENGTH | `uint8` | 8 | | -| COMPONENT_MODE_EXECUTOR_START | `uint16` | 1000 | | +| Назва | Тип | Значення | Опис | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| MESSAGE_VERSION | `uint32` | 0 | | +| PREFLIGHT_CALIBRATION_TEMPERATURE_CALIBRATION | `uint16` | 3 | Param value for VEHICLE_CMD_PREFLIGHT_CALIBRATION to start temperature calibration. | +| FUSION_SOURCE_GPS | `uint8` | 0 | GNSS (EKF2_GPS{i}\_CTRL, use instance param) | +| FUSION_SOURCE_OF | `uint8` | 1 | Optical Flow (EKF2_OF_CTRL) | +| FUSION_SOURCE_EV | `uint8` | 2 | External Vision (EKF2_EV_CTRL) | +| FUSION_SOURCE_AGP | `uint8` | 3 | Auxiliary Global Position (EKF2_AGP{i}\_CTRL, use instance param) | +| FUSION_SOURCE_BARO | `uint8` | 4 | Barometer (EKF2_BARO_CTRL) | +| FUSION_SOURCE_RNG | `uint8` | 5 | Range Finder (EKF2_RNG_CTRL) | +| FUSION_SOURCE_MAG | `uint8` | 6 | Magnetometer (EKF2_MAG_TYPE) | +| FUSION_SOURCE_ASPD | `uint8` | 7 | Airspeed (EKF2_ARSP_THR) | +| FUSION_SOURCE_RNGBCN | `uint8` | 8 | Ranging Beacon | +| VEHICLE_MOUNT_MODE_RETRACT | `uint8` | 0 | Load and keep safe position (Roll,Pitch,Yaw) from permanent memory and stop stabilization. | +| VEHICLE_MOUNT_MODE_NEUTRAL | `uint8` | 1 | Load and keep neutral position (Roll,Pitch,Yaw) from permanent memory. | +| VEHICLE_MOUNT_MODE_MAVLINK_TARGETING | `uint8` | 2 | Load neutral position and start MAVLink Roll,Pitch,Yaw control with stabilization. | +| VEHICLE_MOUNT_MODE_RC_TARGETING | `uint8` | 3 | Load neutral position and start RC Roll,Pitch,Yaw control with stabilization. | +| VEHICLE_MOUNT_MODE_GPS_POINT | `uint8` | 4 | Load neutral position and start to point to Lat,Lon,Alt. | +| VEHICLE_MOUNT_MODE_ENUM_END | `uint8` | 5 | | +| ACTUATOR_CONFIGURATION_NONE | `uint8` | 0 | Do nothing. | +| ACTUATOR_CONFIGURATION_BEEP | `uint8` | 1 | Command the actuator to beep now. | +| ACTUATOR_CONFIGURATION_3D_MODE_ON | `uint8` | 2 | Permanently set the actuator (ESC) to 3D mode (reversible thrust). | +| ACTUATOR_CONFIGURATION_3D_MODE_OFF | `uint8` | 3 | Permanently set the actuator (ESC) to non 3D mode (non-reversible thrust). | +| ACTUATOR_CONFIGURATION_SPIN_DIRECTION1 | `uint8` | 4 | Permanently set the actuator (ESC) to spin direction 1 (which can be clockwise or counter-clockwise). | +| ACTUATOR_CONFIGURATION_SPIN_DIRECTION2 | `uint8` | 5 | Permanently set the actuator (ESC) to spin direction 2 (opposite of direction 1). | +| PARACHUTE_ACTION_DISABLE | `uint8` | 0 | | +| PARACHUTE_ACTION_ENABLE | `uint8` | 1 | | +| PARACHUTE_ACTION_RELEASE | `uint8` | 2 | | +| FAILURE_UNIT_SENSOR_GYRO | `uint8` | 0 | | +| FAILURE_UNIT_SENSOR_ACCEL | `uint8` | 1 | | +| FAILURE_UNIT_SENSOR_MAG | `uint8` | 2 | | +| FAILURE_UNIT_SENSOR_BARO | `uint8` | 3 | | +| FAILURE_UNIT_SENSOR_GPS | `uint8` | 4 | | +| FAILURE_UNIT_SENSOR_OPTICAL_FLOW | `uint8` | 5 | | +| FAILURE_UNIT_SENSOR_VIO | `uint8` | 6 | | +| FAILURE_UNIT_SENSOR_DISTANCE_SENSOR | `uint8` | 7 | | +| FAILURE_UNIT_SENSOR_AIRSPEED | `uint8` | 8 | | +| FAILURE_UNIT_SYSTEM_BATTERY | `uint8` | 100 | | +| FAILURE_UNIT_SYSTEM_MOTOR | `uint8` | 101 | | +| FAILURE_UNIT_SYSTEM_SERVO | `uint8` | 102 | | +| FAILURE_UNIT_SYSTEM_AVOIDANCE | `uint8` | 103 | | +| FAILURE_UNIT_SYSTEM_RC_SIGNAL | `uint8` | 104 | | +| FAILURE_UNIT_SYSTEM_MAVLINK_SIGNAL | `uint8` | 105 | | +| FAILURE_TYPE_OK | `uint8` | 0 | | +| FAILURE_TYPE_OFF | `uint8` | 1 | | +| FAILURE_TYPE_STUCK | `uint8` | 2 | | +| FAILURE_TYPE_GARBAGE | `uint8` | 3 | | +| FAILURE_TYPE_WRONG | `uint8` | 4 | | +| FAILURE_TYPE_SLOW | `uint8` | 5 | | +| FAILURE_TYPE_DELAYED | `uint8` | 6 | | +| FAILURE_TYPE_INTERMITTENT | `uint8` | 7 | | +| ARMING_ACTION_DISARM | `int8` | 0 | | +| ARMING_ACTION_ARM | `int8` | 1 | | +| GRIPPER_ACTION_RELEASE | `uint8` | 0 | | +| GRIPPER_ACTION_GRAB | `uint8` | 1 | | +| SAFETY_OFF | `uint8` | 0 | | +| SAFETY_ON | `uint8` | 1 | | +| ORB_QUEUE_LENGTH | `uint8` | 8 | | +| COMPONENT_MODE_EXECUTOR_START | `uint16` | 1000 | | ## Source Message @@ -1661,6 +1704,7 @@ uint16 VEHICLE_CMD_GIMBAL_DEVICE_INFORMATION = 283 # Command to ask information uint16 VEHICLE_CMD_MISSION_START = 300 # Start running a mission. |first_item: the first mission item to run|last_item: the last mission item to run (after this item is run, the mission ends)| uint16 VEHICLE_CMD_ACTUATOR_TEST = 310 # Actuator testing command. |[@range -1,1] value|[s] timeout|Unused|Unused|output function| uint16 VEHICLE_CMD_CONFIGURE_ACTUATOR = 311 # Actuator configuration command. |configuration|Unused|Unused|Unused|output function| +uint16 VEHICLE_CMD_ESC_REQUEST_EEPROM = 312 # Request EEPROM data from an ESC. |ESC Index|Firmware Type|Unused|Unused|Unused| uint16 VEHICLE_CMD_COMPONENT_ARM_DISARM = 400 # Arms / Disarms a component. |1 to arm, 0 to disarm. uint16 VEHICLE_CMD_RUN_PREARM_CHECKS = 401 # Instructs a target system to run pre-arm checks. uint16 VEHICLE_CMD_INJECT_FAILURE = 420 # Inject artificial failure for testing purposes. @@ -1690,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). @@ -1710,6 +1765,13 @@ uint8 VEHICLE_ROI_LOCATION = 3 # Point toward fixed location. uint8 VEHICLE_ROI_TARGET = 4 # Point toward target. uint8 VEHICLE_ROI_ENUM_END = 5 +uint8 ACTUATOR_CONFIGURATION_NONE = 0 # Do nothing. +uint8 ACTUATOR_CONFIGURATION_BEEP = 1 # Command the actuator to beep now. +uint8 ACTUATOR_CONFIGURATION_3D_MODE_ON = 2 # Permanently set the actuator (ESC) to 3D mode (reversible thrust). +uint8 ACTUATOR_CONFIGURATION_3D_MODE_OFF = 3 # Permanently set the actuator (ESC) to non 3D mode (non-reversible thrust). +uint8 ACTUATOR_CONFIGURATION_SPIN_DIRECTION1 = 4 # Permanently set the actuator (ESC) to spin direction 1 (which can be clockwise or counter-clockwise). +uint8 ACTUATOR_CONFIGURATION_SPIN_DIRECTION2 = 5 # Permanently set the actuator (ESC) to spin direction 2 (opposite of direction 1). + uint8 PARACHUTE_ACTION_DISABLE = 0 uint8 PARACHUTE_ACTION_ENABLE = 1 uint8 PARACHUTE_ACTION_RELEASE = 2 diff --git a/docs/uk/msg_docs/VehicleCommandAck.md b/docs/uk/msg_docs/VehicleCommandAck.md index 871e43fa1f..c5bcc8c4cd 100644 --- a/docs/uk/msg_docs/VehicleCommandAck.md +++ b/docs/uk/msg_docs/VehicleCommandAck.md @@ -4,42 +4,55 @@ pageClass: is-wide-page # VehicleCommandAck (повідомлення UORB) -Повідомлення uORB підтвердження команди автомобіля. Used for acknowledging the vehicle command being received. Follows the MAVLink COMMAND_ACK message definition. +Vehicle Command Acknowledgement uORB message. -**TOPICS:** vehicle_commandack +Used for acknowledging the vehicle command being received. +Follows the MAVLink COMMAND_ACK message definition + +**TOPICS:** vehicle_command_ack ## Fields -| Назва | Тип | Unit [Frame] | Range/Enum | Опис | -| ------------------------------------- | -------- | ---------------------------------------------------------------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| timestamp | `uint64` | | | time since system start (microseconds) | -| command | `uint32` | | | Command that is being acknowledged | -| result | `uint8` | | | Command result | -| result_param1 | `uint8` | | | Also used as progress[%], it can be set with the reason why the command was denied, or the progress percentage when result is MAV_RESULT_IN_PROGRESS | -| result_param2 | `int32` | | | Additional parameter of the result, example: which parameter of MAV_CMD_NAV_WAYPOINT caused it to be denied. | -| target_system | `uint8` | | | | -| target_component | `uint16` | | | Target component / mode executor | -| from_external | `bool` | | | Indicates if the command came from an external source | +| Назва | Тип | Unit [Frame] | Range/Enum | Опис | +| ------------------------------------- | -------- | ------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| timestamp | `uint64` | us | | time since system start | +| command | `uint32` | | | Command that is being acknowledged | +| result | `uint8` | | [VEHICLE_CMD_RESULT](#VEHICLE_CMD_RESULT) | Command result | +| result_param1 | `uint8` | | | Can be set with the reason why the command was denied, or the progress percentage when result is MAV_RESULT_IN_PROGRESS (%) | +| result_param2 | `int32` | enum ARM_AUTH_DENIED_REASON | | Additional parameter of the result, example: which parameter of MAV_CMD_NAV_WAYPOINT caused it to be denied, or what ARM_AUTH_DENIED_REASON | +| target_system | `uint8` | | | Target system | +| target_component | `uint16` | | | Target component / mode executor | +| from_external | `bool` | | | Indicates if the command came from an external source | + +## Enums + +### VEHICLE_CMD_RESULT {#VEHICLE_CMD_RESULT} + +| Назва | Тип | Значення | Опис | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | -------- | ------------------------------------------------------------------------- | +| VEHICLE_CMD_RESULT_ACCEPTED | `uint8` | 0 | Command ACCEPTED and EXECUTED | +| VEHICLE_CMD_RESULT_TEMPORARILY_REJECTED | `uint8` | 1 | Command TEMPORARY REJECTED/DENIED | +| VEHICLE_CMD_RESULT_DENIED | `uint8` | 2 | Command PERMANENTLY DENIED | +| VEHICLE_CMD_RESULT_UNSUPPORTED | `uint8` | 3 | Command UNKNOWN/UNSUPPORTED | +| VEHICLE_CMD_RESULT_FAILED | `uint8` | 4 | Command executed, but failed | +| VEHICLE_CMD_RESULT_IN_PROGRESS | `uint8` | 5 | Command being executed | +| VEHICLE_CMD_RESULT_CANCELLED | `uint8` | 6 | Command Canceled | +| VEHICLE_CMD_RESULT_COMMAND_LONG_ONLY | `uint8` | 7 | Command is only accepted when sent as a COMMAND_LONG | +| VEHICLE_CMD_RESULT_COMMAND_INT_ONLY | `uint8` | 8 | Command is only accepted when sent as a COMMAND_INT | +| VEHICLE_CMD_RESULT_UNSUPPORTED_MAV_FRAME | `uint8` | 9 | Command does not support specified frame | ## Constants -| Назва | Тип | Значення | Опис | -| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -------- | --------------------------------- | -| MESSAGE_VERSION | `uint32` | 0 | | -| VEHICLE_CMD_RESULT_ACCEPTED | `uint8` | 0 | Command ACCEPTED and EXECUTED | -| VEHICLE_CMD_RESULT_TEMPORARILY_REJECTED | `uint8` | 1 | Command TEMPORARY REJECTED/DENIED | -| VEHICLE_CMD_RESULT_DENIED | `uint8` | 2 | Command PERMANENTLY DENIED | -| VEHICLE_CMD_RESULT_UNSUPPORTED | `uint8` | 3 | Command UNKNOWN/UNSUPPORTED | -| VEHICLE_CMD_RESULT_FAILED | `uint8` | 4 | Command executed, but failed | -| VEHICLE_CMD_RESULT_IN_PROGRESS | `uint8` | 5 | Command being executed | -| VEHICLE_CMD_RESULT_CANCELLED | `uint8` | 6 | Command Canceled | -| ARM_AUTH_DENIED_REASON_GENERIC | `uint16` | 0 | | -| ARM_AUTH_DENIED_REASON_NONE | `uint16` | 1 | | -| ARM_AUTH_DENIED_REASON_INVALID_WAYPOINT | `uint16` | 2 | | -| ARM_AUTH_DENIED_REASON_TIMEOUT | `uint16` | 3 | | -| ARM_AUTH_DENIED_REASON_AIRSPACE_IN_USE | `uint16` | 4 | | -| ARM_AUTH_DENIED_REASON_BAD_WEATHER | `uint16` | 5 | | -| ORB_QUEUE_LENGTH | `uint8` | 8 | | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -------- | ---- | +| MESSAGE_VERSION | `uint32` | 1 | | +| ORB_QUEUE_LENGTH | `uint8` | 8 | | +| ARM_AUTH_DENIED_REASON_GENERIC | `uint16` | 0 | | +| ARM_AUTH_DENIED_REASON_NONE | `uint16` | 1 | | +| ARM_AUTH_DENIED_REASON_INVALID_WAYPOINT | `uint16` | 2 | | +| ARM_AUTH_DENIED_REASON_TIMEOUT | `uint16` | 3 | | +| ARM_AUTH_DENIED_REASON_AIRSPACE_IN_USE | `uint16` | 4 | | +| ARM_AUTH_DENIED_REASON_BAD_WEATHER | `uint16` | 5 | | ## Source Message @@ -49,23 +62,35 @@ pageClass: is-wide-page Click here to see original file ```c -# Vehicle Command Ackonwledgement uORB message. +# Vehicle Command Acknowledgement uORB message. +# # Used for acknowledging the vehicle command being received. # Follows the MAVLink COMMAND_ACK message definition -uint32 MESSAGE_VERSION = 0 +uint32 MESSAGE_VERSION = 1 -uint64 timestamp # time since system start (microseconds) +uint64 timestamp # [us] time since system start -# Result cases. This follows the MAVLink MAV_RESULT enum definition -uint8 VEHICLE_CMD_RESULT_ACCEPTED = 0 # Command ACCEPTED and EXECUTED | -uint8 VEHICLE_CMD_RESULT_TEMPORARILY_REJECTED = 1 # Command TEMPORARY REJECTED/DENIED | -uint8 VEHICLE_CMD_RESULT_DENIED = 2 # Command PERMANENTLY DENIED | -uint8 VEHICLE_CMD_RESULT_UNSUPPORTED = 3 # Command UNKNOWN/UNSUPPORTED | -uint8 VEHICLE_CMD_RESULT_FAILED = 4 # Command executed, but failed | -uint8 VEHICLE_CMD_RESULT_IN_PROGRESS = 5 # Command being executed | -uint8 VEHICLE_CMD_RESULT_CANCELLED = 6 # Command Canceled +uint8 ORB_QUEUE_LENGTH = 8 +uint32 command # [-] Command that is being acknowledged + +uint8 result # [@enum VEHICLE_CMD_RESULT] Command result +# VEHICLE_CMD_RESULT Result cases. Follows the MAVLink MAV_RESULT enum definition +uint8 VEHICLE_CMD_RESULT_ACCEPTED = 0 # Command ACCEPTED and EXECUTED +uint8 VEHICLE_CMD_RESULT_TEMPORARILY_REJECTED = 1 # Command TEMPORARY REJECTED/DENIED +uint8 VEHICLE_CMD_RESULT_DENIED = 2 # Command PERMANENTLY DENIED +uint8 VEHICLE_CMD_RESULT_UNSUPPORTED = 3 # Command UNKNOWN/UNSUPPORTED +uint8 VEHICLE_CMD_RESULT_FAILED = 4 # Command executed, but failed +uint8 VEHICLE_CMD_RESULT_IN_PROGRESS = 5 # Command being executed +uint8 VEHICLE_CMD_RESULT_CANCELLED = 6 # Command Canceled +uint8 VEHICLE_CMD_RESULT_COMMAND_LONG_ONLY = 7 # Command is only accepted when sent as a COMMAND_LONG +uint8 VEHICLE_CMD_RESULT_COMMAND_INT_ONLY = 8 # Command is only accepted when sent as a COMMAND_INT +uint8 VEHICLE_CMD_RESULT_UNSUPPORTED_MAV_FRAME = 9 # Command does not support specified frame + +uint8 result_param1 # [-] Can be set with the reason why the command was denied, or the progress percentage when result is MAV_RESULT_IN_PROGRESS (%) + +int32 result_param2 # [enum ARM_AUTH_DENIED_REASON] Additional parameter of the result, example: which parameter of MAV_CMD_NAV_WAYPOINT caused it to be denied, or what ARM_AUTH_DENIED_REASON # Arming denied specific cases uint16 ARM_AUTH_DENIED_REASON_GENERIC = 0 uint16 ARM_AUTH_DENIED_REASON_NONE = 1 @@ -74,16 +99,10 @@ uint16 ARM_AUTH_DENIED_REASON_TIMEOUT = 3 uint16 ARM_AUTH_DENIED_REASON_AIRSPACE_IN_USE = 4 uint16 ARM_AUTH_DENIED_REASON_BAD_WEATHER = 5 -uint8 ORB_QUEUE_LENGTH = 8 +uint8 target_system # [-] Target system +uint16 target_component # Target component / mode executor -uint32 command # Command that is being acknowledged -uint8 result # Command result -uint8 result_param1 # Also used as progress[%], it can be set with the reason why the command was denied, or the progress percentage when result is MAV_RESULT_IN_PROGRESS -int32 result_param2 # Additional parameter of the result, example: which parameter of MAV_CMD_NAV_WAYPOINT caused it to be denied. -uint8 target_system -uint16 target_component # Target component / mode executor - -bool from_external # Indicates if the command came from an external source +bool from_external # Indicates if the command came from an external source ``` ::: diff --git a/docs/uk/msg_docs/VehicleCommandAckV0.md b/docs/uk/msg_docs/VehicleCommandAckV0.md new file mode 100644 index 0000000000..9c31766d0f --- /dev/null +++ b/docs/uk/msg_docs/VehicleCommandAckV0.md @@ -0,0 +1,89 @@ +--- +pageClass: is-wide-page +--- + +# VehicleCommandAckV0 (UORB message) + +Vehicle Command Ackonwledgement uORB message. Used for acknowledging the vehicle command being received. Follows the MAVLink COMMAND_ACK message definition. + +**TOPICS:** vehicle_command_ack_v0 + +## Fields + +| Назва | Тип | Unit [Frame] | Range/Enum | Опис | +| ------------------------------------- | -------- | ---------------------------------------------------------------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| timestamp | `uint64` | | | time since system start (microseconds) | +| command | `uint32` | | | Command that is being acknowledged | +| result | `uint8` | | | Command result | +| result_param1 | `uint8` | | | Also used as progress[%], it can be set with the reason why the command was denied, or the progress percentage when result is MAV_RESULT_IN_PROGRESS | +| result_param2 | `int32` | | | Additional parameter of the result, example: which parameter of MAV_CMD_NAV_WAYPOINT caused it to be denied. | +| target_system | `uint8` | | | | +| target_component | `uint16` | | | Target component / mode executor | +| from_external | `bool` | | | Indicates if the command came from an external source | + +## Constants + +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -------- | --------------------------------- | +| MESSAGE_VERSION | `uint32` | 0 | | +| VEHICLE_CMD_RESULT_ACCEPTED | `uint8` | 0 | Command ACCEPTED and EXECUTED | +| VEHICLE_CMD_RESULT_TEMPORARILY_REJECTED | `uint8` | 1 | Command TEMPORARY REJECTED/DENIED | +| VEHICLE_CMD_RESULT_DENIED | `uint8` | 2 | Command PERMANENTLY DENIED | +| VEHICLE_CMD_RESULT_UNSUPPORTED | `uint8` | 3 | Command UNKNOWN/UNSUPPORTED | +| VEHICLE_CMD_RESULT_FAILED | `uint8` | 4 | Command executed, but failed | +| VEHICLE_CMD_RESULT_IN_PROGRESS | `uint8` | 5 | Command being executed | +| VEHICLE_CMD_RESULT_CANCELLED | `uint8` | 6 | Command Canceled | +| ARM_AUTH_DENIED_REASON_GENERIC | `uint16` | 0 | | +| ARM_AUTH_DENIED_REASON_NONE | `uint16` | 1 | | +| ARM_AUTH_DENIED_REASON_INVALID_WAYPOINT | `uint16` | 2 | | +| ARM_AUTH_DENIED_REASON_TIMEOUT | `uint16` | 3 | | +| ARM_AUTH_DENIED_REASON_AIRSPACE_IN_USE | `uint16` | 4 | | +| ARM_AUTH_DENIED_REASON_BAD_WEATHER | `uint16` | 5 | | +| ORB_QUEUE_LENGTH | `uint8` | 8 | | + +## Source Message + +[Source file (GitHub)](https://github.com/PX4/PX4-Autopilot/blob/main/msg/px4_msgs_old/msg/VehicleCommandAckV0.msg) + +:::details +Click here to see original file + +```c +# Vehicle Command Ackonwledgement uORB message. +# Used for acknowledging the vehicle command being received. +# Follows the MAVLink COMMAND_ACK message definition + +uint32 MESSAGE_VERSION = 0 + +uint64 timestamp # time since system start (microseconds) + +# Result cases. This follows the MAVLink MAV_RESULT enum definition +uint8 VEHICLE_CMD_RESULT_ACCEPTED = 0 # Command ACCEPTED and EXECUTED | +uint8 VEHICLE_CMD_RESULT_TEMPORARILY_REJECTED = 1 # Command TEMPORARY REJECTED/DENIED | +uint8 VEHICLE_CMD_RESULT_DENIED = 2 # Command PERMANENTLY DENIED | +uint8 VEHICLE_CMD_RESULT_UNSUPPORTED = 3 # Command UNKNOWN/UNSUPPORTED | +uint8 VEHICLE_CMD_RESULT_FAILED = 4 # Command executed, but failed | +uint8 VEHICLE_CMD_RESULT_IN_PROGRESS = 5 # Command being executed | +uint8 VEHICLE_CMD_RESULT_CANCELLED = 6 # Command Canceled + +# Arming denied specific cases +uint16 ARM_AUTH_DENIED_REASON_GENERIC = 0 +uint16 ARM_AUTH_DENIED_REASON_NONE = 1 +uint16 ARM_AUTH_DENIED_REASON_INVALID_WAYPOINT = 2 +uint16 ARM_AUTH_DENIED_REASON_TIMEOUT = 3 +uint16 ARM_AUTH_DENIED_REASON_AIRSPACE_IN_USE = 4 +uint16 ARM_AUTH_DENIED_REASON_BAD_WEATHER = 5 + +uint8 ORB_QUEUE_LENGTH = 8 + +uint32 command # Command that is being acknowledged +uint8 result # Command result +uint8 result_param1 # Also used as progress[%], it can be set with the reason why the command was denied, or the progress percentage when result is MAV_RESULT_IN_PROGRESS +int32 result_param2 # Additional parameter of the result, example: which parameter of MAV_CMD_NAV_WAYPOINT caused it to be denied. +uint8 target_system +uint16 target_component # Target component / mode executor + +bool from_external # Indicates if the command came from an external source +``` + +::: diff --git a/docs/uk/msg_docs/VehicleControlMode.md b/docs/uk/msg_docs/VehicleControlMode.md index c0a28c1c59..1821f46f01 100644 --- a/docs/uk/msg_docs/VehicleControlMode.md +++ b/docs/uk/msg_docs/VehicleControlMode.md @@ -29,9 +29,9 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| -------------------------------------------------------------------- | -------- | -------- | ---- | -| MESSAGE_VERSION | `uint32` | 0 | | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------ | -------- | -------- | ---- | +| MESSAGE_VERSION | `uint32` | 0 | | ## Source Message diff --git a/docs/uk/msg_docs/VehicleGlobalPosition.md b/docs/uk/msg_docs/VehicleGlobalPosition.md index 81349e8c6c..4e9593bc6b 100644 --- a/docs/uk/msg_docs/VehicleGlobalPosition.md +++ b/docs/uk/msg_docs/VehicleGlobalPosition.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Об'єднана глобальна позиція в WGS84. This struct contains global position estimation. It is not the raw GPS. measurement (@see vehicle_gps_position). This topic is usually published by the position. estimator, which will take more sources of information into account than just GPS,. e.g. control inputs of the vehicle in a Kalman-filter implementation. -**TOPICS:** vehicle_global_position vehicle_global_position_groundtruth external_ins_global_position estimator_global_position aux_global_position +**TOPICS:** vehicle_global_position vehicle_global_position_groundtruth external_ins_global_position estimator_global_position ## Fields @@ -33,9 +33,9 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| -------------------------------------------------------------------- | -------- | -------- | ---- | -| MESSAGE_VERSION | `uint32` | 0 | | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------ | -------- | -------- | ---- | +| MESSAGE_VERSION | `uint32` | 0 | | ## Source Message @@ -81,7 +81,6 @@ bool dead_reckoning # True if this position is estimated through dead-reckoning # TOPICS vehicle_global_position vehicle_global_position_groundtruth external_ins_global_position # TOPICS estimator_global_position -# TOPICS aux_global_position ``` ::: diff --git a/docs/uk/msg_docs/VehicleGlobalPositionV0.md b/docs/uk/msg_docs/VehicleGlobalPositionV0.md new file mode 100644 index 0000000000..5b7bc51385 --- /dev/null +++ b/docs/uk/msg_docs/VehicleGlobalPositionV0.md @@ -0,0 +1,86 @@ +--- +pageClass: is-wide-page +--- + +# VehicleGlobalPositionV0 (UORB message) + +Об'єднана глобальна позиція в WGS84. This struct contains global position estimation. It is not the raw GPS. measurement (@see vehicle_gps_position). This topic is usually published by the position. estimator, which will take more sources of information into account than just GPS,. e.g. control inputs of the vehicle in a Kalman-filter implementation. + +**TOPICS:** vehicle_global_position vehicle_global_position_groundtruth external_ins_global_position estimator_global_position + +## Fields + +| Назва | Тип | Unit [Frame] | Range/Enum | Опис | +| ------------------------------------------------------------------------------------ | --------- | ---------------------------------------------------------------- | ---------- | ---------------------------------------------------------------------------- | +| timestamp | `uint64` | | | time since system start (microseconds) | +| timestamp_sample | `uint64` | | | the timestamp of the raw data (microseconds) | +| lat | `float64` | | | Latitude, (degrees) | +| lon | `float64` | | | Longitude, (degrees) | +| alt | `float32` | | | Altitude AMSL, (meters) | +| alt_ellipsoid | `float32` | | | Altitude above ellipsoid, (meters) | +| lat_lon_valid | `bool` | | | | +| alt_valid | `bool` | | | | +| delta_alt | `float32` | | | Reset delta for altitude | +| delta_terrain | `float32` | | | Reset delta for terrain | +| lat_lon_reset_counter | `uint8` | | | Counter for reset events on horizontal position coordinates | +| alt_reset_counter | `uint8` | | | Counter for reset events on altitude | +| terrain_reset_counter | `uint8` | | | Counter for reset events on terrain | +| eph | `float32` | | | Standard deviation of horizontal position error, (metres) | +| epv | `float32` | | | Standard deviation of vertical position error, (metres) | +| terrain_alt | `float32` | | | Terrain altitude WGS84, (metres) | +| terrain_alt_valid | `bool` | | | Terrain altitude estimate is valid | +| dead_reckoning | `bool` | | | True if this position is estimated through dead-reckoning | + +## Constants + +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------ | -------- | -------- | ---- | +| MESSAGE_VERSION | `uint32` | 0 | | + +## Source Message + +[Source file (GitHub)](https://github.com/PX4/PX4-Autopilot/blob/main/msg/px4_msgs_old/msg/VehicleGlobalPositionV0.msg) + +:::details +Click here to see original file + +```c +# Fused global position in WGS84. +# This struct contains global position estimation. It is not the raw GPS +# measurement (@see vehicle_gps_position). This topic is usually published by the position +# estimator, which will take more sources of information into account than just GPS, +# e.g. control inputs of the vehicle in a Kalman-filter implementation. +# + +uint32 MESSAGE_VERSION = 0 + +uint64 timestamp # time since system start (microseconds) +uint64 timestamp_sample # the timestamp of the raw data (microseconds) + +float64 lat # Latitude, (degrees) +float64 lon # Longitude, (degrees) +float32 alt # Altitude AMSL, (meters) +float32 alt_ellipsoid # Altitude above ellipsoid, (meters) + +bool lat_lon_valid +bool alt_valid + +float32 delta_alt # Reset delta for altitude +float32 delta_terrain # Reset delta for terrain +uint8 lat_lon_reset_counter # Counter for reset events on horizontal position coordinates +uint8 alt_reset_counter # Counter for reset events on altitude +uint8 terrain_reset_counter # Counter for reset events on terrain + +float32 eph # Standard deviation of horizontal position error, (metres) +float32 epv # Standard deviation of vertical position error, (metres) + +float32 terrain_alt # Terrain altitude WGS84, (metres) +bool terrain_alt_valid # Terrain altitude estimate is valid + +bool dead_reckoning # True if this position is estimated through dead-reckoning + +# TOPICS vehicle_global_position vehicle_global_position_groundtruth external_ins_global_position +# TOPICS estimator_global_position +``` + +::: diff --git a/docs/uk/msg_docs/VehicleImu.md b/docs/uk/msg_docs/VehicleImu.md index d18db63ada..58426f92e6 100644 --- a/docs/uk/msg_docs/VehicleImu.md +++ b/docs/uk/msg_docs/VehicleImu.md @@ -27,11 +27,11 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| ---------------------------------------------------------- | ------- | -------- | ---- | -| CLIPPING_X | `uint8` | 1 | | -| CLIPPING_Y | `uint8` | 2 | | -| CLIPPING_Z | `uint8` | 4 | | +| Назва | Тип | Значення | Опис | +| -------------------------------------------------------- | ------- | -------- | ---- | +| CLIPPING_X | `uint8` | 1 | | +| CLIPPING_Y | `uint8` | 2 | | +| CLIPPING_Z | `uint8` | 4 | | ## Source Message diff --git a/docs/uk/msg_docs/VehicleImuStatus.md b/docs/uk/msg_docs/VehicleImuStatus.md index 9e53a2a312..9393287a3c 100644 --- a/docs/uk/msg_docs/VehicleImuStatus.md +++ b/docs/uk/msg_docs/VehicleImuStatus.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # VehicleImuStatus (повідомлення UORB) -**TOPICS:** vehicle_imustatus +**TOPICS:** vehicle_imu_status ## Fields diff --git a/docs/uk/msg_docs/VehicleLandDetected.md b/docs/uk/msg_docs/VehicleLandDetected.md index 56f92f660d..418b19cba9 100644 --- a/docs/uk/msg_docs/VehicleLandDetected.md +++ b/docs/uk/msg_docs/VehicleLandDetected.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # VehicleLandDetected (повідомлення UORB) -**TOPICS:** vehicle_landdetected +**TOPICS:** vehicle_land_detected ## Fields @@ -26,9 +26,9 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| -------------------------------------------------------------------- | -------- | -------- | ---- | -| MESSAGE_VERSION | `uint32` | 0 | | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------ | -------- | -------- | ---- | +| MESSAGE_VERSION | `uint32` | 0 | | ## Source Message diff --git a/docs/uk/msg_docs/VehicleLocalPosition.md b/docs/uk/msg_docs/VehicleLocalPosition.md index 2d387eba15..d3395dffb2 100644 --- a/docs/uk/msg_docs/VehicleLocalPosition.md +++ b/docs/uk/msg_docs/VehicleLocalPosition.md @@ -68,12 +68,12 @@ Fused local position in NED. The coordinate system origin is the vehicle positio ## Constants -| Назва | Тип | Значення | Опис | -| -------------------------------------------------------------------------------------------------------------------------------- | -------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| MESSAGE_VERSION | `uint32` | 1 | | -| DIST_BOTTOM_SENSOR_NONE | `uint8` | 0 | | -| DIST_BOTTOM_SENSOR_RANGE | `uint8` | 1 | (1 << 0) a range sensor is used to estimate dist_bottom field | -| DIST_BOTTOM_SENSOR_FLOW | `uint8` | 2 | (1 << 1) a flow sensor is used to estimate dist_bottom field (mostly fixed-wing use case) | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------------------------------------------------------------------ | -------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| MESSAGE_VERSION | `uint32` | 1 | | +| DIST_BOTTOM_SENSOR_NONE | `uint8` | 0 | | +| DIST_BOTTOM_SENSOR_RANGE | `uint8` | 1 | (1 << 0) a range sensor is used to estimate dist_bottom field | +| DIST_BOTTOM_SENSOR_FLOW | `uint8` | 2 | (1 << 1) a flow sensor is used to estimate dist_bottom field (mostly fixed-wing use case) | ## Source Message diff --git a/docs/uk/msg_docs/VehicleLocalPositionSetpoint.md b/docs/uk/msg_docs/VehicleLocalPositionSetpoint.md index 6bc878001a..a3cd039857 100644 --- a/docs/uk/msg_docs/VehicleLocalPositionSetpoint.md +++ b/docs/uk/msg_docs/VehicleLocalPositionSetpoint.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Local position setpoint in NED frame. Telemetry of PID position controller to monitor tracking. NaN means the state was not controlled. -**TOPICS:** vehicle_localposition_setpoint +**TOPICS:** vehicle_local_position_setpoint ## Fields diff --git a/docs/uk/msg_docs/VehicleLocalPositionV0.md b/docs/uk/msg_docs/VehicleLocalPositionV0.md index 0085af22c9..bcc377356d 100644 --- a/docs/uk/msg_docs/VehicleLocalPositionV0.md +++ b/docs/uk/msg_docs/VehicleLocalPositionV0.md @@ -67,12 +67,12 @@ Fused local position in NED. The coordinate system origin is the vehicle positio ## Constants -| Назва | Тип | Значення | Опис | -| -------------------------------------------------------------------------------------------------------------------------------- | -------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| MESSAGE_VERSION | `uint32` | 0 | | -| DIST_BOTTOM_SENSOR_NONE | `uint8` | 0 | | -| DIST_BOTTOM_SENSOR_RANGE | `uint8` | 1 | (1 << 0) a range sensor is used to estimate dist_bottom field | -| DIST_BOTTOM_SENSOR_FLOW | `uint8` | 2 | (1 << 1) a flow sensor is used to estimate dist_bottom field (mostly fixed-wing use case) | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------------------------------------------------------------------ | -------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| MESSAGE_VERSION | `uint32` | 0 | | +| DIST_BOTTOM_SENSOR_NONE | `uint8` | 0 | | +| DIST_BOTTOM_SENSOR_RANGE | `uint8` | 1 | (1 << 0) a range sensor is used to estimate dist_bottom field | +| DIST_BOTTOM_SENSOR_FLOW | `uint8` | 2 | (1 << 1) a flow sensor is used to estimate dist_bottom field (mostly fixed-wing use case) | ## Source Message diff --git a/docs/uk/msg_docs/VehicleOdometry.md b/docs/uk/msg_docs/VehicleOdometry.md index 83cace64f0..3b1cec6482 100644 --- a/docs/uk/msg_docs/VehicleOdometry.md +++ b/docs/uk/msg_docs/VehicleOdometry.md @@ -32,26 +32,26 @@ Fits ROS REP 147 for aerial vehicles ### POSE_FRAME {#POSE_FRAME} -| Назва | Тип | Значення | Опис | -| ----------------------------------------------------------------------------------------------- | ------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| POSE_FRAME_UNKNOWN | `uint8` | 0 | Unknown frame | -| POSE_FRAME_NED | `uint8` | 1 | North-East-Down (NED) navigation frame. Aligned with True North. | -| POSE_FRAME_FRD | `uint8` | 2 | Forward-Right-Down (FRD) frame. Constant arbitrary heading offset from True North. Z is down. | +| Назва | Тип | Значення | Опис | +| --------------------------------------------------------------------------------------------- | ------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| POSE_FRAME_UNKNOWN | `uint8` | 0 | Unknown frame | +| POSE_FRAME_NED | `uint8` | 1 | North-East-Down (NED) navigation frame. Aligned with True North. | +| POSE_FRAME_FRD | `uint8` | 2 | Forward-Right-Down (FRD) frame. Constant arbitrary heading offset from True North. Z is down. | ### VELOCITY_FRAME {#VELOCITY_FRAME} -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------------------------------------------------------------ | ------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | -| VELOCITY_FRAME_UNKNOWN | `uint8` | 0 | Unknown frame | -| VELOCITY_FRAME_NED | `uint8` | 1 | NED navigation frame at current position. | -| VELOCITY_FRAME_FRD | `uint8` | 2 | FRD navigation frame at current position. Constant arbitrary heading offset from True North. Z is down. | -| VELOCITY_FRAME_BODY_FRD | `uint8` | 3 | FRD body-fixed frame | +| Назва | Тип | Значення | Опис | +| ---------------------------------------------------------------------------------------------------------------------------- | ------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | +| VELOCITY_FRAME_UNKNOWN | `uint8` | 0 | Unknown frame | +| VELOCITY_FRAME_NED | `uint8` | 1 | NED navigation frame at current position. | +| VELOCITY_FRAME_FRD | `uint8` | 2 | FRD navigation frame at current position. Constant arbitrary heading offset from True North. Z is down. | +| VELOCITY_FRAME_BODY_FRD | `uint8` | 3 | FRD body-fixed frame | ## Constants -| Назва | Тип | Значення | Опис | -| -------------------------------------------------------------------- | -------- | -------- | ---- | -| MESSAGE_VERSION | `uint32` | 0 | | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------ | -------- | -------- | ---- | +| MESSAGE_VERSION | `uint32` | 0 | | ## Source Message diff --git a/docs/uk/msg_docs/VehicleOpticalFlow.md b/docs/uk/msg_docs/VehicleOpticalFlow.md index b3662a263f..0b3d931378 100644 --- a/docs/uk/msg_docs/VehicleOpticalFlow.md +++ b/docs/uk/msg_docs/VehicleOpticalFlow.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Оптичний потік в кадрі тіла XYZ в одиницях SI. -**TOPICS:** vehicle_opticalflow +**TOPICS:** vehicle_optical_flow ## Fields diff --git a/docs/uk/msg_docs/VehicleRatesSetpoint.md b/docs/uk/msg_docs/VehicleRatesSetpoint.md index be37193266..66ac32c7b2 100644 --- a/docs/uk/msg_docs/VehicleRatesSetpoint.md +++ b/docs/uk/msg_docs/VehicleRatesSetpoint.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # VehicleRatesSetpoint (повідомлення UORB) -**TOPICS:** vehicle_ratessetpoint +**TOPICS:** vehicle_rates_setpoint ## Fields @@ -19,9 +19,9 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| -------------------------------------------------------------------- | -------- | -------- | ---- | -| MESSAGE_VERSION | `uint32` | 0 | | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------ | -------- | -------- | ---- | +| MESSAGE_VERSION | `uint32` | 0 | | ## Source Message diff --git a/docs/uk/msg_docs/VehicleRoi.md b/docs/uk/msg_docs/VehicleRoi.md index 1d01fa88f2..7f78801914 100644 --- a/docs/uk/msg_docs/VehicleRoi.md +++ b/docs/uk/msg_docs/VehicleRoi.md @@ -23,14 +23,14 @@ Vehicle Region Of Interest (ROI). ## Constants -| Назва | Тип | Значення | Опис | -| ----------------------------------------------------------------------------------- | ------- | -------- | ---------------------------------------------- | -| ROI_NONE | `uint8` | 0 | No region of interest | -| ROI_WPNEXT | `uint8` | 1 | Point toward next MISSION with optional offset | -| ROI_WPINDEX | `uint8` | 2 | Point toward given MISSION | -| ROI_LOCATION | `uint8` | 3 | Point toward fixed location | -| ROI_TARGET | `uint8` | 4 | Point toward target | -| ROI_ENUM_END | `uint8` | 5 | | +| Назва | Тип | Значення | Опис | +| --------------------------------------------------------------------------------- | ------- | -------- | ---------------------------------------------- | +| ROI_NONE | `uint8` | 0 | No region of interest | +| ROI_WPNEXT | `uint8` | 1 | Point toward next MISSION with optional offset | +| ROI_WPINDEX | `uint8` | 2 | Point toward given MISSION | +| ROI_LOCATION | `uint8` | 3 | Point toward fixed location | +| ROI_TARGET | `uint8` | 4 | Point toward target | +| ROI_ENUM_END | `uint8` | 5 | | ## Source Message diff --git a/docs/uk/msg_docs/VehicleStatus.md b/docs/uk/msg_docs/VehicleStatus.md index e37a7cefb9..1b17eb11c5 100644 --- a/docs/uk/msg_docs/VehicleStatus.md +++ b/docs/uk/msg_docs/VehicleStatus.md @@ -22,9 +22,10 @@ Encodes the system state of the vehicle published by commander. | nav_state_user_intention | `uint8` | | | Mode that the user selected (might be different from nav_state in a failsafe situation) | | nav_state | `uint8` | | | Currently active mode | | executor_in_charge | `uint8` | | | Current mode executor in charge (0=Autopilot) | +| nav_state_display | `uint8` | | | User-visible nav state sent via MAVLink (executor state if active, otherwise nav_state) | +| accepts_offboard_setpoints | `bool` | | | True if the current mode accepts offboard trajectory setpoints via MAVLink | | valid_nav_states_mask | `uint32` | | | Bitmask for all valid nav_state values | | can_set_nav_states_mask | `uint32` | | | Bitmask for all modes that a user can select | -| failure_detector_status | `uint16` | | | | | hil_state | `uint8` | | | | | vehicle_type | `uint8` | | | | | failsafe | `bool` | | | true if system is in failsafe state (e.g.:RTL, Hover, Terminate, ...) | @@ -48,77 +49,69 @@ Encodes the system state of the vehicle published by commander. | open_drone_id_system_healthy | `bool` | | | | | parachute_system_present | `bool` | | | | | parachute_system_healthy | `bool` | | | | +| traffic_avoidance_system_present | `bool` | | | | | rc_calibration_in_progress | `bool` | | | | | calibration_enabled | `bool` | | | | | pre_flight_checks_pass | `bool` | | | true if all checks necessary to arm pass | ## Constants -| Назва | Тип | Значення | Опис | -| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -------- | ----------------------------------------------------------------------------- | -| MESSAGE_VERSION | `uint32` | 1 | | -| ARMING_STATE_DISARMED | `uint8` | 1 | | -| ARMING_STATE_ARMED | `uint8` | 2 | | -| ARM_DISARM_REASON_STICK_GESTURE | `uint8` | 1 | | -| ARM_DISARM_REASON_RC_SWITCH | `uint8` | 2 | | -| ARM_DISARM_REASON_COMMAND_INTERNAL | `uint8` | 3 | | -| ARM_DISARM_REASON_COMMAND_EXTERNAL | `uint8` | 4 | | -| ARM_DISARM_REASON_MISSION_START | `uint8` | 5 | | -| ARM_DISARM_REASON_LANDING | `uint8` | 6 | | -| ARM_DISARM_REASON_PREFLIGHT_INACTION | `uint8` | 7 | | -| ARM_DISARM_REASON_KILL_SWITCH | `uint8` | 8 | | -| ARM_DISARM_REASON_RC_BUTTON | `uint8` | 13 | | -| ARM_DISARM_REASON_FAILSAFE | `uint8` | 14 | | -| NAVIGATION_STATE_MANUAL | `uint8` | 0 | Manual mode | -| NAVIGATION_STATE_ALTCTL | `uint8` | 1 | Altitude control mode | -| NAVIGATION_STATE_POSCTL | `uint8` | 2 | Position control mode | -| NAVIGATION_STATE_AUTO_MISSION | `uint8` | 3 | Auto mission mode | -| NAVIGATION_STATE_AUTO_LOITER | `uint8` | 4 | Auto loiter mode | -| NAVIGATION_STATE_AUTO_RTL | `uint8` | 5 | Auto return to launch mode | -| NAVIGATION_STATE_POSITION_SLOW | `uint8` | 6 | | -| NAVIGATION_STATE_FREE5 | `uint8` | 7 | | -| NAVIGATION_STATE_ALTITUDE_CRUISE | `uint8` | 8 | Altitude with Cruise mode | -| NAVIGATION_STATE_FREE3 | `uint8` | 9 | | -| NAVIGATION_STATE_ACRO | `uint8` | 10 | Acro mode | -| NAVIGATION_STATE_FREE2 | `uint8` | 11 | | -| NAVIGATION_STATE_DESCEND | `uint8` | 12 | Descend mode (no position control) | -| NAVIGATION_STATE_TERMINATION | `uint8` | 13 | Termination mode | -| NAVIGATION_STATE_OFFBOARD | `uint8` | 14 | | -| NAVIGATION_STATE_STAB | `uint8` | 15 | Stabilized mode | -| NAVIGATION_STATE_FREE1 | `uint8` | 16 | | -| NAVIGATION_STATE_AUTO_TAKEOFF | `uint8` | 17 | Takeoff | -| NAVIGATION_STATE_AUTO_LAND | `uint8` | 18 | Land | -| NAVIGATION_STATE_AUTO_FOLLOW_TARGET | `uint8` | 19 | Auto Follow | -| NAVIGATION_STATE_AUTO_PRECLAND | `uint8` | 20 | Precision land with landing target | -| NAVIGATION_STATE_ORBIT | `uint8` | 21 | Orbit in a circle | -| NAVIGATION_STATE_AUTO_VTOL_TAKEOFF | `uint8` | 22 | Takeoff, transition, establish loiter | -| NAVIGATION_STATE_EXTERNAL1 | `uint8` | 23 | | -| NAVIGATION_STATE_EXTERNAL2 | `uint8` | 24 | | -| NAVIGATION_STATE_EXTERNAL3 | `uint8` | 25 | | -| NAVIGATION_STATE_EXTERNAL4 | `uint8` | 26 | | -| NAVIGATION_STATE_EXTERNAL5 | `uint8` | 27 | | -| NAVIGATION_STATE_EXTERNAL6 | `uint8` | 28 | | -| NAVIGATION_STATE_EXTERNAL7 | `uint8` | 29 | | -| NAVIGATION_STATE_EXTERNAL8 | `uint8` | 30 | | -| NAVIGATION_STATE_MAX | `uint8` | 31 | | -| FAILURE_NONE | `uint16` | 0 | | -| FAILURE_ROLL | `uint16` | 1 | (1 << 0) | -| FAILURE_PITCH | `uint16` | 2 | (1 << 1) | -| FAILURE_ALT | `uint16` | 4 | (1 << 2) | -| FAILURE_EXT | `uint16` | 8 | (1 << 3) | -| FAILURE_ARM_ESC | `uint16` | 16 | (1 << 4) | -| FAILURE_BATTERY | `uint16` | 32 | (1 << 5) | -| FAILURE_IMBALANCED_PROP | `uint16` | 64 | (1 << 6) | -| FAILURE_MOTOR | `uint16` | 128 | (1 << 7) | -| HIL_STATE_OFF | `uint8` | 0 | | -| HIL_STATE_ON | `uint8` | 1 | | -| VEHICLE_TYPE_UNSPECIFIED | `uint8` | 0 | | -| VEHICLE_TYPE_ROTARY_WING | `uint8` | 1 | | -| VEHICLE_TYPE_FIXED_WING | `uint8` | 2 | | -| VEHICLE_TYPE_ROVER | `uint8` | 3 | | -| FAILSAFE_DEFER_STATE_DISABLED | `uint8` | 0 | | -| FAILSAFE_DEFER_STATE_ENABLED | `uint8` | 1 | | -| FAILSAFE_DEFER_STATE_WOULD_FAILSAFE | `uint8` | 2 | Failsafes deferred, but would trigger a failsafe | +| Назва | Тип | Значення | Опис | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -------- | ----------------------------------------------------- | +| MESSAGE_VERSION | `uint32` | 4 | | +| ARMING_STATE_DISARMED | `uint8` | 1 | | +| ARMING_STATE_ARMED | `uint8` | 2 | | +| ARM_DISARM_REASON_STICK_GESTURE | `uint8` | 1 | | +| ARM_DISARM_REASON_RC_SWITCH | `uint8` | 2 | | +| ARM_DISARM_REASON_COMMAND_INTERNAL | `uint8` | 3 | | +| ARM_DISARM_REASON_COMMAND_EXTERNAL | `uint8` | 4 | | +| ARM_DISARM_REASON_MISSION_START | `uint8` | 5 | | +| ARM_DISARM_REASON_LANDING | `uint8` | 6 | | +| ARM_DISARM_REASON_PREFLIGHT_INACTION | `uint8` | 7 | | +| ARM_DISARM_REASON_KILL_SWITCH | `uint8` | 8 | | +| ARM_DISARM_REASON_RC_BUTTON | `uint8` | 13 | | +| ARM_DISARM_REASON_FAILSAFE | `uint8` | 14 | | +| NAVIGATION_STATE_MANUAL | `uint8` | 0 | Manual mode | +| NAVIGATION_STATE_ALTCTL | `uint8` | 1 | Altitude control mode | +| NAVIGATION_STATE_POSCTL | `uint8` | 2 | Position control mode | +| NAVIGATION_STATE_AUTO_MISSION | `uint8` | 3 | Auto mission mode | +| NAVIGATION_STATE_AUTO_LOITER | `uint8` | 4 | Auto loiter mode | +| NAVIGATION_STATE_AUTO_RTL | `uint8` | 5 | Auto return to launch mode | +| NAVIGATION_STATE_POSITION_SLOW | `uint8` | 6 | | +| NAVIGATION_STATE_FREE5 | `uint8` | 7 | | +| NAVIGATION_STATE_ALTITUDE_CRUISE | `uint8` | 8 | Altitude with Cruise mode | +| NAVIGATION_STATE_FREE3 | `uint8` | 9 | | +| NAVIGATION_STATE_ACRO | `uint8` | 10 | Acro mode | +| NAVIGATION_STATE_FREE2 | `uint8` | 11 | | +| NAVIGATION_STATE_DESCEND | `uint8` | 12 | Descend mode (no position control) | +| NAVIGATION_STATE_TERMINATION | `uint8` | 13 | Termination mode | +| NAVIGATION_STATE_OFFBOARD | `uint8` | 14 | | +| NAVIGATION_STATE_STAB | `uint8` | 15 | Stabilized mode | +| NAVIGATION_STATE_FREE1 | `uint8` | 16 | | +| NAVIGATION_STATE_AUTO_TAKEOFF | `uint8` | 17 | Takeoff | +| NAVIGATION_STATE_AUTO_LAND | `uint8` | 18 | Land | +| NAVIGATION_STATE_AUTO_FOLLOW_TARGET | `uint8` | 19 | Auto Follow | +| NAVIGATION_STATE_AUTO_PRECLAND | `uint8` | 20 | Precision land with landing target | +| NAVIGATION_STATE_ORBIT | `uint8` | 21 | Orbit in a circle | +| NAVIGATION_STATE_AUTO_VTOL_TAKEOFF | `uint8` | 22 | Takeoff, transition, establish loiter | +| NAVIGATION_STATE_EXTERNAL1 | `uint8` | 23 | | +| NAVIGATION_STATE_EXTERNAL2 | `uint8` | 24 | | +| NAVIGATION_STATE_EXTERNAL3 | `uint8` | 25 | | +| NAVIGATION_STATE_EXTERNAL4 | `uint8` | 26 | | +| NAVIGATION_STATE_EXTERNAL5 | `uint8` | 27 | | +| NAVIGATION_STATE_EXTERNAL6 | `uint8` | 28 | | +| NAVIGATION_STATE_EXTERNAL7 | `uint8` | 29 | | +| NAVIGATION_STATE_EXTERNAL8 | `uint8` | 30 | | +| NAVIGATION_STATE_MAX | `uint8` | 31 | | +| HIL_STATE_OFF | `uint8` | 0 | | +| HIL_STATE_ON | `uint8` | 1 | | +| VEHICLE_TYPE_UNSPECIFIED | `uint8` | 0 | | +| VEHICLE_TYPE_ROTARY_WING | `uint8` | 1 | | +| VEHICLE_TYPE_FIXED_WING | `uint8` | 2 | | +| VEHICLE_TYPE_ROVER | `uint8` | 3 | | +| FAILSAFE_DEFER_STATE_DISABLED | `uint8` | 0 | | +| FAILSAFE_DEFER_STATE_ENABLED | `uint8` | 1 | | +| FAILSAFE_DEFER_STATE_WOULD_FAILSAFE | `uint8` | 2 | Failsafes deferred, but would trigger a failsafe | ## Source Message @@ -130,7 +123,7 @@ Click here to see original file ```c # Encodes the system state of the vehicle published by commander -uint32 MESSAGE_VERSION = 1 +uint32 MESSAGE_VERSION = 4 uint64 timestamp # time since system start (microseconds) @@ -193,22 +186,13 @@ uint8 NAVIGATION_STATE_EXTERNAL8 = 30 uint8 NAVIGATION_STATE_MAX = 31 uint8 executor_in_charge # Current mode executor in charge (0=Autopilot) +uint8 nav_state_display # User-visible nav state sent via MAVLink (executor state if active, otherwise nav_state) + +bool accepts_offboard_setpoints # True if the current mode accepts offboard trajectory setpoints via MAVLink uint32 valid_nav_states_mask # Bitmask for all valid nav_state values uint32 can_set_nav_states_mask # Bitmask for all modes that a user can select -# Bitmask of detected failures -uint16 failure_detector_status -uint16 FAILURE_NONE = 0 -uint16 FAILURE_ROLL = 1 # (1 << 0) -uint16 FAILURE_PITCH = 2 # (1 << 1) -uint16 FAILURE_ALT = 4 # (1 << 2) -uint16 FAILURE_EXT = 8 # (1 << 3) -uint16 FAILURE_ARM_ESC = 16 # (1 << 4) -uint16 FAILURE_BATTERY = 32 # (1 << 5) -uint16 FAILURE_IMBALANCED_PROP = 64 # (1 << 6) -uint16 FAILURE_MOTOR = 128 # (1 << 7) - uint8 hil_state uint8 HIL_STATE_OFF = 0 uint8 HIL_STATE_ON = 1 @@ -256,6 +240,8 @@ bool open_drone_id_system_healthy bool parachute_system_present bool parachute_system_healthy +bool traffic_avoidance_system_present + bool rc_calibration_in_progress bool calibration_enabled diff --git a/docs/uk/msg_docs/VehicleStatusV0.md b/docs/uk/msg_docs/VehicleStatusV0.md index e155e098f5..a5f5caae0c 100644 --- a/docs/uk/msg_docs/VehicleStatusV0.md +++ b/docs/uk/msg_docs/VehicleStatusV0.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Encodes the system state of the vehicle published by commander. -**TOPICS:** vehicle_statusv0 +**TOPICS:** vehicle_status_v0 ## Fields @@ -56,76 +56,76 @@ Encodes the system state of the vehicle published by commander. ## Constants -| Назва | Тип | Значення | Опис | -| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -------- | ----------------------------------------------------------------------------- | -| MESSAGE_VERSION | `uint32` | 0 | | -| ARMING_STATE_DISARMED | `uint8` | 1 | | -| ARMING_STATE_ARMED | `uint8` | 2 | | -| ARM_DISARM_REASON_TRANSITION_TO_STANDBY | `uint8` | 0 | | -| ARM_DISARM_REASON_STICK_GESTURE | `uint8` | 1 | | -| ARM_DISARM_REASON_RC_SWITCH | `uint8` | 2 | | -| ARM_DISARM_REASON_COMMAND_INTERNAL | `uint8` | 3 | | -| ARM_DISARM_REASON_COMMAND_EXTERNAL | `uint8` | 4 | | -| ARM_DISARM_REASON_MISSION_START | `uint8` | 5 | | -| ARM_DISARM_REASON_SAFETY_BUTTON | `uint8` | 6 | | -| ARM_DISARM_REASON_AUTO_DISARM_LAND | `uint8` | 7 | | -| ARM_DISARM_REASON_AUTO_DISARM_PREFLIGHT | `uint8` | 8 | | -| ARM_DISARM_REASON_KILL_SWITCH | `uint8` | 9 | | -| ARM_DISARM_REASON_LOCKDOWN | `uint8` | 10 | | -| ARM_DISARM_REASON_FAILURE_DETECTOR | `uint8` | 11 | | -| ARM_DISARM_REASON_SHUTDOWN | `uint8` | 12 | | -| ARM_DISARM_REASON_UNIT_TEST | `uint8` | 13 | | -| NAVIGATION_STATE_MANUAL | `uint8` | 0 | Manual mode | -| NAVIGATION_STATE_ALTCTL | `uint8` | 1 | Altitude control mode | -| NAVIGATION_STATE_POSCTL | `uint8` | 2 | Position control mode | -| NAVIGATION_STATE_AUTO_MISSION | `uint8` | 3 | Auto mission mode | -| NAVIGATION_STATE_AUTO_LOITER | `uint8` | 4 | Auto loiter mode | -| NAVIGATION_STATE_AUTO_RTL | `uint8` | 5 | Auto return to launch mode | -| NAVIGATION_STATE_POSITION_SLOW | `uint8` | 6 | | -| NAVIGATION_STATE_FREE5 | `uint8` | 7 | | -| NAVIGATION_STATE_FREE4 | `uint8` | 8 | | -| NAVIGATION_STATE_FREE3 | `uint8` | 9 | | -| NAVIGATION_STATE_ACRO | `uint8` | 10 | Acro mode | -| NAVIGATION_STATE_FREE2 | `uint8` | 11 | | -| NAVIGATION_STATE_DESCEND | `uint8` | 12 | Descend mode (no position control) | -| NAVIGATION_STATE_TERMINATION | `uint8` | 13 | Termination mode | -| NAVIGATION_STATE_OFFBOARD | `uint8` | 14 | | -| NAVIGATION_STATE_STAB | `uint8` | 15 | Stabilized mode | -| NAVIGATION_STATE_FREE1 | `uint8` | 16 | | -| NAVIGATION_STATE_AUTO_TAKEOFF | `uint8` | 17 | Takeoff | -| NAVIGATION_STATE_AUTO_LAND | `uint8` | 18 | Land | -| NAVIGATION_STATE_AUTO_FOLLOW_TARGET | `uint8` | 19 | Auto Follow | -| NAVIGATION_STATE_AUTO_PRECLAND | `uint8` | 20 | Precision land with landing target | -| NAVIGATION_STATE_ORBIT | `uint8` | 21 | Orbit in a circle | -| NAVIGATION_STATE_AUTO_VTOL_TAKEOFF | `uint8` | 22 | Takeoff, transition, establish loiter | -| NAVIGATION_STATE_EXTERNAL1 | `uint8` | 23 | | -| NAVIGATION_STATE_EXTERNAL2 | `uint8` | 24 | | -| NAVIGATION_STATE_EXTERNAL3 | `uint8` | 25 | | -| NAVIGATION_STATE_EXTERNAL4 | `uint8` | 26 | | -| NAVIGATION_STATE_EXTERNAL5 | `uint8` | 27 | | -| NAVIGATION_STATE_EXTERNAL6 | `uint8` | 28 | | -| NAVIGATION_STATE_EXTERNAL7 | `uint8` | 29 | | -| NAVIGATION_STATE_EXTERNAL8 | `uint8` | 30 | | -| NAVIGATION_STATE_MAX | `uint8` | 31 | | -| FAILURE_NONE | `uint16` | 0 | | -| FAILURE_ROLL | `uint16` | 1 | (1 << 0) | -| FAILURE_PITCH | `uint16` | 2 | (1 << 1) | -| FAILURE_ALT | `uint16` | 4 | (1 << 2) | -| FAILURE_EXT | `uint16` | 8 | (1 << 3) | -| FAILURE_ARM_ESC | `uint16` | 16 | (1 << 4) | -| FAILURE_BATTERY | `uint16` | 32 | (1 << 5) | -| FAILURE_IMBALANCED_PROP | `uint16` | 64 | (1 << 6) | -| FAILURE_MOTOR | `uint16` | 128 | (1 << 7) | -| HIL_STATE_OFF | `uint8` | 0 | | -| HIL_STATE_ON | `uint8` | 1 | | -| VEHICLE_TYPE_UNKNOWN | `uint8` | 0 | | -| VEHICLE_TYPE_ROTARY_WING | `uint8` | 1 | | -| VEHICLE_TYPE_FIXED_WING | `uint8` | 2 | | -| VEHICLE_TYPE_ROVER | `uint8` | 3 | | -| VEHICLE_TYPE_AIRSHIP | `uint8` | 4 | | -| FAILSAFE_DEFER_STATE_DISABLED | `uint8` | 0 | | -| FAILSAFE_DEFER_STATE_ENABLED | `uint8` | 1 | | -| FAILSAFE_DEFER_STATE_WOULD_FAILSAFE | `uint8` | 2 | Failsafes deferred, but would trigger a failsafe | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------- | -------- | ----------------------------------------------------------------------------- | +| MESSAGE_VERSION | `uint32` | 0 | | +| ARMING_STATE_DISARMED | `uint8` | 1 | | +| ARMING_STATE_ARMED | `uint8` | 2 | | +| ARM_DISARM_REASON_TRANSITION_TO_STANDBY | `uint8` | 0 | | +| ARM_DISARM_REASON_STICK_GESTURE | `uint8` | 1 | | +| ARM_DISARM_REASON_RC_SWITCH | `uint8` | 2 | | +| ARM_DISARM_REASON_COMMAND_INTERNAL | `uint8` | 3 | | +| ARM_DISARM_REASON_COMMAND_EXTERNAL | `uint8` | 4 | | +| ARM_DISARM_REASON_MISSION_START | `uint8` | 5 | | +| ARM_DISARM_REASON_SAFETY_BUTTON | `uint8` | 6 | | +| ARM_DISARM_REASON_AUTO_DISARM_LAND | `uint8` | 7 | | +| ARM_DISARM_REASON_AUTO_DISARM_PREFLIGHT | `uint8` | 8 | | +| ARM_DISARM_REASON_KILL_SWITCH | `uint8` | 9 | | +| ARM_DISARM_REASON_LOCKDOWN | `uint8` | 10 | | +| ARM_DISARM_REASON_FAILURE_DETECTOR | `uint8` | 11 | | +| ARM_DISARM_REASON_SHUTDOWN | `uint8` | 12 | | +| ARM_DISARM_REASON_UNIT_TEST | `uint8` | 13 | | +| NAVIGATION_STATE_MANUAL | `uint8` | 0 | Manual mode | +| NAVIGATION_STATE_ALTCTL | `uint8` | 1 | Altitude control mode | +| NAVIGATION_STATE_POSCTL | `uint8` | 2 | Position control mode | +| NAVIGATION_STATE_AUTO_MISSION | `uint8` | 3 | Auto mission mode | +| NAVIGATION_STATE_AUTO_LOITER | `uint8` | 4 | Auto loiter mode | +| NAVIGATION_STATE_AUTO_RTL | `uint8` | 5 | Auto return to launch mode | +| NAVIGATION_STATE_POSITION_SLOW | `uint8` | 6 | | +| NAVIGATION_STATE_FREE5 | `uint8` | 7 | | +| NAVIGATION_STATE_FREE4 | `uint8` | 8 | | +| NAVIGATION_STATE_FREE3 | `uint8` | 9 | | +| NAVIGATION_STATE_ACRO | `uint8` | 10 | Acro mode | +| NAVIGATION_STATE_FREE2 | `uint8` | 11 | | +| NAVIGATION_STATE_DESCEND | `uint8` | 12 | Descend mode (no position control) | +| NAVIGATION_STATE_TERMINATION | `uint8` | 13 | Termination mode | +| NAVIGATION_STATE_OFFBOARD | `uint8` | 14 | | +| NAVIGATION_STATE_STAB | `uint8` | 15 | Stabilized mode | +| NAVIGATION_STATE_FREE1 | `uint8` | 16 | | +| NAVIGATION_STATE_AUTO_TAKEOFF | `uint8` | 17 | Takeoff | +| NAVIGATION_STATE_AUTO_LAND | `uint8` | 18 | Land | +| NAVIGATION_STATE_AUTO_FOLLOW_TARGET | `uint8` | 19 | Auto Follow | +| NAVIGATION_STATE_AUTO_PRECLAND | `uint8` | 20 | Precision land with landing target | +| NAVIGATION_STATE_ORBIT | `uint8` | 21 | Orbit in a circle | +| NAVIGATION_STATE_AUTO_VTOL_TAKEOFF | `uint8` | 22 | Takeoff, transition, establish loiter | +| NAVIGATION_STATE_EXTERNAL1 | `uint8` | 23 | | +| NAVIGATION_STATE_EXTERNAL2 | `uint8` | 24 | | +| NAVIGATION_STATE_EXTERNAL3 | `uint8` | 25 | | +| NAVIGATION_STATE_EXTERNAL4 | `uint8` | 26 | | +| NAVIGATION_STATE_EXTERNAL5 | `uint8` | 27 | | +| NAVIGATION_STATE_EXTERNAL6 | `uint8` | 28 | | +| NAVIGATION_STATE_EXTERNAL7 | `uint8` | 29 | | +| NAVIGATION_STATE_EXTERNAL8 | `uint8` | 30 | | +| NAVIGATION_STATE_MAX | `uint8` | 31 | | +| FAILURE_NONE | `uint16` | 0 | | +| FAILURE_ROLL | `uint16` | 1 | (1 << 0) | +| FAILURE_PITCH | `uint16` | 2 | (1 << 1) | +| FAILURE_ALT | `uint16` | 4 | (1 << 2) | +| FAILURE_EXT | `uint16` | 8 | (1 << 3) | +| FAILURE_ARM_ESC | `uint16` | 16 | (1 << 4) | +| FAILURE_BATTERY | `uint16` | 32 | (1 << 5) | +| FAILURE_IMBALANCED_PROP | `uint16` | 64 | (1 << 6) | +| FAILURE_MOTOR | `uint16` | 128 | (1 << 7) | +| HIL_STATE_OFF | `uint8` | 0 | | +| HIL_STATE_ON | `uint8` | 1 | | +| VEHICLE_TYPE_UNKNOWN | `uint8` | 0 | | +| VEHICLE_TYPE_ROTARY_WING | `uint8` | 1 | | +| VEHICLE_TYPE_FIXED_WING | `uint8` | 2 | | +| VEHICLE_TYPE_ROVER | `uint8` | 3 | | +| VEHICLE_TYPE_AIRSHIP | `uint8` | 4 | | +| FAILSAFE_DEFER_STATE_DISABLED | `uint8` | 0 | | +| FAILSAFE_DEFER_STATE_ENABLED | `uint8` | 1 | | +| FAILSAFE_DEFER_STATE_WOULD_FAILSAFE | `uint8` | 2 | Failsafes deferred, but would trigger a failsafe | ## Source Message diff --git a/docs/uk/msg_docs/VehicleStatusV1.md b/docs/uk/msg_docs/VehicleStatusV1.md new file mode 100644 index 0000000000..394657e460 --- /dev/null +++ b/docs/uk/msg_docs/VehicleStatusV1.md @@ -0,0 +1,287 @@ +--- +pageClass: is-wide-page +--- + +# VehicleStatusV1 (UORB message) + +Encodes the system state of the vehicle published by commander. + +**TOPICS:** vehicle_status_v1 + +## Fields + +| Назва | Тип | Unit [Frame] | Range/Enum | Опис | +| ---------------------------------------------------------------------------------------------------------------- | -------- | ---------------------------------------------------------------- | --------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| timestamp | `uint64` | us | | Time since system start | +| armed_time | `uint64` | us | | Arming timestamp | +| takeoff_time | `uint64` | us | | Takeoff timestamp | +| arming_state | `uint8` | | | | +| latest_arming_reason | `uint8` | | | | +| latest_disarming_reason | `uint8` | | | | +| nav_state_timestamp | `uint64` | | | Time when current nav_state activated | +| nav_state_user_intention | `uint8` | | | Mode that the user selected (might be different from nav_state in a failsafe situation) | +| nav_state | `uint8` | | [NAVIGATION_STATE](#NAVIGATION_STATE) | Currently active mode | +| executor_in_charge | `uint8` | | | Current mode executor in charge (0=Autopilot) | +| valid_nav_states_mask | `uint32` | | | Bitmask for all valid nav_state values | +| can_set_nav_states_mask | `uint32` | | | Bitmask for all modes that a user can select | +| failure_detector_status | `uint16` | | [FAILURE](#FAILURE) | | +| hil_state | `uint8` | enum HIL_STATE | | | +| vehicle_type | `uint8` | | [VEHICLE_TYPE](#VEHICLE_TYPE) | | +| failsafe | `bool` | | | true if system is in failsafe state (e.g.:RTL, Hover, Terminate, ...) | +| failsafe_and_user_took_over | `bool` | | | true if system is in failsafe state but the user took over control | +| failsafe_defer_state | `uint8` | | [FAILSAFE_DEFER_STATE](#FAILSAFE_DEFER_STATE) | | +| gcs_connection_lost | `bool` | | | datalink to GCS lost | +| gcs_connection_lost_counter | `uint8` | | | counts unique GCS connection lost events | +| high_latency_data_link_lost | `bool` | | | Set to true if the high latency data link (eg. RockBlock Iridium 9603 telemetry module) is lost | +| is_vtol | `bool` | | | True if the system is VTOL capable | +| is_vtol_tailsitter | `bool` | | | True if the system performs a 90° pitch down rotation during transition from MC to FW | +| in_transition_mode | `bool` | | | True if VTOL is doing a transition | +| in_transition_to_fw | `bool` | | | True if VTOL is doing a transition from MC to FW | +| system_type | `uint8` | | | system type, contains mavlink MAV_TYPE | +| system_id | `uint8` | | | system id, contains MAVLink's system ID field | +| component_id | `uint8` | | | subsystem / component id, contains MAVLink's component ID field | +| safety_button_available | `bool` | | | Set to true if a safety button is connected | +| safety_off | `bool` | | | Set to true if safety is off | +| power_input_valid | `bool` | | | Set if input power is valid | +| usb_connected | `bool` | | | Set to true (never cleared) once telemetry received from usb link | +| open_drone_id_system_present | `bool` | | | | +| open_drone_id_system_healthy | `bool` | | | | +| parachute_system_present | `bool` | | | | +| parachute_system_healthy | `bool` | | | | +| rc_calibration_in_progress | `bool` | | | | +| calibration_enabled | `bool` | | | | +| pre_flight_checks_pass | `bool` | | | true if all checks necessary to arm pass | + +## Enums + +### NAVIGATION_STATE {#NAVIGATION_STATE} + +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | -------- | ----------------------------------------------------- | +| NAVIGATION_STATE_MANUAL | `uint8` | 0 | Manual mode | +| NAVIGATION_STATE_ALTCTL | `uint8` | 1 | Altitude control mode | +| NAVIGATION_STATE_POSCTL | `uint8` | 2 | Position control mode | +| NAVIGATION_STATE_AUTO_MISSION | `uint8` | 3 | Auto mission mode | +| NAVIGATION_STATE_AUTO_LOITER | `uint8` | 4 | Auto loiter mode | +| NAVIGATION_STATE_AUTO_RTL | `uint8` | 5 | Auto return to launch mode | +| NAVIGATION_STATE_POSITION_SLOW | `uint8` | 6 | | +| NAVIGATION_STATE_FREE5 | `uint8` | 7 | | +| NAVIGATION_STATE_ALTITUDE_CRUISE | `uint8` | 8 | Altitude with Cruise mode | +| NAVIGATION_STATE_FREE3 | `uint8` | 9 | | +| NAVIGATION_STATE_ACRO | `uint8` | 10 | Acro mode | +| NAVIGATION_STATE_FREE2 | `uint8` | 11 | | +| NAVIGATION_STATE_DESCEND | `uint8` | 12 | Descend mode (no position control) | +| NAVIGATION_STATE_TERMINATION | `uint8` | 13 | Termination mode | +| NAVIGATION_STATE_OFFBOARD | `uint8` | 14 | | +| NAVIGATION_STATE_STAB | `uint8` | 15 | Stabilized mode | +| NAVIGATION_STATE_FREE1 | `uint8` | 16 | | +| NAVIGATION_STATE_AUTO_TAKEOFF | `uint8` | 17 | Takeoff | +| NAVIGATION_STATE_AUTO_LAND | `uint8` | 18 | Land | +| NAVIGATION_STATE_AUTO_FOLLOW_TARGET | `uint8` | 19 | Auto Follow | +| NAVIGATION_STATE_AUTO_PRECLAND | `uint8` | 20 | Precision land with landing target | +| NAVIGATION_STATE_ORBIT | `uint8` | 21 | Orbit in a circle | +| NAVIGATION_STATE_AUTO_VTOL_TAKEOFF | `uint8` | 22 | Takeoff, transition, establish loiter | +| NAVIGATION_STATE_EXTERNAL1 | `uint8` | 23 | | +| NAVIGATION_STATE_EXTERNAL2 | `uint8` | 24 | | +| NAVIGATION_STATE_EXTERNAL3 | `uint8` | 25 | | +| NAVIGATION_STATE_EXTERNAL4 | `uint8` | 26 | | +| NAVIGATION_STATE_EXTERNAL5 | `uint8` | 27 | | +| NAVIGATION_STATE_EXTERNAL6 | `uint8` | 28 | | +| NAVIGATION_STATE_EXTERNAL7 | `uint8` | 29 | | +| NAVIGATION_STATE_EXTERNAL8 | `uint8` | 30 | | +| NAVIGATION_STATE_MAX | `uint8` | 31 | | + +### FAILURE {#FAILURE} + +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------------------------------------------- | -------- | -------- | ----------------------------------------------------------------------------- | +| FAILURE_NONE | `uint16` | 0 | | +| FAILURE_ROLL | `uint16` | 1 | (1 << 0) | +| FAILURE_PITCH | `uint16` | 2 | (1 << 1) | +| FAILURE_ALT | `uint16` | 4 | (1 << 2) | +| FAILURE_EXT | `uint16` | 8 | (1 << 3) | +| FAILURE_ARM_ESC | `uint16` | 16 | (1 << 4) | +| FAILURE_BATTERY | `uint16` | 32 | (1 << 5) | +| FAILURE_IMBALANCED_PROP | `uint16` | 64 | (1 << 6) | +| FAILURE_MOTOR | `uint16` | 128 | (1 << 7) | + +### VEHICLE_TYPE {#VEHICLE_TYPE} + +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------------------------------------------------------------------ | ------- | -------- | ---- | +| VEHICLE_TYPE_UNSPECIFIED | `uint8` | 0 | | +| VEHICLE_TYPE_ROTARY_WING | `uint8` | 1 | | +| VEHICLE_TYPE_FIXED_WING | `uint8` | 2 | | +| VEHICLE_TYPE_ROVER | `uint8` | 3 | | + +### FAILSAFE_DEFER_STATE {#FAILSAFE_DEFER_STATE} + +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | -------- | ------------------------------------------------ | +| FAILSAFE_DEFER_STATE_DISABLED | `uint8` | 0 | | +| FAILSAFE_DEFER_STATE_ENABLED | `uint8` | 1 | | +| FAILSAFE_DEFER_STATE_WOULD_FAILSAFE | `uint8` | 2 | Failsafes deferred, but would trigger a failsafe | + +## Constants + +| Назва | Тип | Значення | Опис | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -------- | ---- | +| MESSAGE_VERSION | `uint32` | 1 | | +| ARMING_STATE_DISARMED | `uint8` | 1 | | +| ARMING_STATE_ARMED | `uint8` | 2 | | +| ARM_DISARM_REASON_STICK_GESTURE | `uint8` | 1 | | +| ARM_DISARM_REASON_RC_SWITCH | `uint8` | 2 | | +| ARM_DISARM_REASON_COMMAND_INTERNAL | `uint8` | 3 | | +| ARM_DISARM_REASON_COMMAND_EXTERNAL | `uint8` | 4 | | +| ARM_DISARM_REASON_MISSION_START | `uint8` | 5 | | +| ARM_DISARM_REASON_LANDING | `uint8` | 6 | | +| ARM_DISARM_REASON_PREFLIGHT_INACTION | `uint8` | 7 | | +| ARM_DISARM_REASON_KILL_SWITCH | `uint8` | 8 | | +| ARM_DISARM_REASON_RC_BUTTON | `uint8` | 13 | | +| ARM_DISARM_REASON_FAILSAFE | `uint8` | 14 | | +| HIL_STATE_OFF | `uint8` | 0 | | +| HIL_STATE_ON | `uint8` | 1 | | + +## Source Message + +[Source file (GitHub)](https://github.com/PX4/PX4-Autopilot/blob/main/msg/px4_msgs_old/msg/VehicleStatusV1.msg) + +:::details +Click here to see original file + +```c +# Encodes the system state of the vehicle published by commander + +uint32 MESSAGE_VERSION = 1 + +uint64 timestamp # [us] Time since system start + +uint64 armed_time # [us] Arming timestamp +uint64 takeoff_time # [us] Takeoff timestamp + +uint8 arming_state +uint8 ARMING_STATE_DISARMED = 1 +uint8 ARMING_STATE_ARMED = 2 + +uint8 latest_arming_reason +uint8 latest_disarming_reason +uint8 ARM_DISARM_REASON_STICK_GESTURE = 1 +uint8 ARM_DISARM_REASON_RC_SWITCH = 2 +uint8 ARM_DISARM_REASON_COMMAND_INTERNAL = 3 +uint8 ARM_DISARM_REASON_COMMAND_EXTERNAL = 4 +uint8 ARM_DISARM_REASON_MISSION_START = 5 +uint8 ARM_DISARM_REASON_LANDING = 6 +uint8 ARM_DISARM_REASON_PREFLIGHT_INACTION = 7 +uint8 ARM_DISARM_REASON_KILL_SWITCH = 8 +uint8 ARM_DISARM_REASON_RC_BUTTON = 13 +uint8 ARM_DISARM_REASON_FAILSAFE = 14 + +uint64 nav_state_timestamp # Time when current nav_state activated + +uint8 nav_state_user_intention # Mode that the user selected (might be different from nav_state in a failsafe situation) + +uint8 nav_state # [@enum NAVIGATION_STATE] Currently active mode +uint8 NAVIGATION_STATE_MANUAL = 0 # Manual mode +uint8 NAVIGATION_STATE_ALTCTL = 1 # Altitude control mode +uint8 NAVIGATION_STATE_POSCTL = 2 # Position control mode +uint8 NAVIGATION_STATE_AUTO_MISSION = 3 # Auto mission mode +uint8 NAVIGATION_STATE_AUTO_LOITER = 4 # Auto loiter mode +uint8 NAVIGATION_STATE_AUTO_RTL = 5 # Auto return to launch mode +uint8 NAVIGATION_STATE_POSITION_SLOW = 6 +uint8 NAVIGATION_STATE_FREE5 = 7 +uint8 NAVIGATION_STATE_ALTITUDE_CRUISE = 8 # Altitude with Cruise mode +uint8 NAVIGATION_STATE_FREE3 = 9 +uint8 NAVIGATION_STATE_ACRO = 10 # Acro mode +uint8 NAVIGATION_STATE_FREE2 = 11 +uint8 NAVIGATION_STATE_DESCEND = 12 # Descend mode (no position control) +uint8 NAVIGATION_STATE_TERMINATION = 13 # Termination mode +uint8 NAVIGATION_STATE_OFFBOARD = 14 +uint8 NAVIGATION_STATE_STAB = 15 # Stabilized mode +uint8 NAVIGATION_STATE_FREE1 = 16 +uint8 NAVIGATION_STATE_AUTO_TAKEOFF = 17 # Takeoff +uint8 NAVIGATION_STATE_AUTO_LAND = 18 # Land +uint8 NAVIGATION_STATE_AUTO_FOLLOW_TARGET = 19 # Auto Follow +uint8 NAVIGATION_STATE_AUTO_PRECLAND = 20 # Precision land with landing target +uint8 NAVIGATION_STATE_ORBIT = 21 # Orbit in a circle +uint8 NAVIGATION_STATE_AUTO_VTOL_TAKEOFF = 22 # Takeoff, transition, establish loiter +uint8 NAVIGATION_STATE_EXTERNAL1 = 23 +uint8 NAVIGATION_STATE_EXTERNAL2 = 24 +uint8 NAVIGATION_STATE_EXTERNAL3 = 25 +uint8 NAVIGATION_STATE_EXTERNAL4 = 26 +uint8 NAVIGATION_STATE_EXTERNAL5 = 27 +uint8 NAVIGATION_STATE_EXTERNAL6 = 28 +uint8 NAVIGATION_STATE_EXTERNAL7 = 29 +uint8 NAVIGATION_STATE_EXTERNAL8 = 30 +uint8 NAVIGATION_STATE_MAX = 31 + +uint8 executor_in_charge # [-] Current mode executor in charge (0=Autopilot) + +uint32 valid_nav_states_mask # [-] Bitmask for all valid nav_state values +uint32 can_set_nav_states_mask # [-] Bitmask for all modes that a user can select + +# Bitmask of detected failures +uint16 failure_detector_status # [@enum FAILURE] +uint16 FAILURE_NONE = 0 +uint16 FAILURE_ROLL = 1 # (1 << 0) +uint16 FAILURE_PITCH = 2 # (1 << 1) +uint16 FAILURE_ALT = 4 # (1 << 2) +uint16 FAILURE_EXT = 8 # (1 << 3) +uint16 FAILURE_ARM_ESC = 16 # (1 << 4) +uint16 FAILURE_BATTERY = 32 # (1 << 5) +uint16 FAILURE_IMBALANCED_PROP = 64 # (1 << 6) +uint16 FAILURE_MOTOR = 128 # (1 << 7) + +uint8 hil_state # [enum HIL_STATE] +uint8 HIL_STATE_OFF = 0 +uint8 HIL_STATE_ON = 1 + +# Current vehicle locomotion method. A vehicle can have different methods (e.g. VTOL transitions from RW to FW method) +uint8 vehicle_type # [@enum VEHICLE_TYPE] +uint8 VEHICLE_TYPE_UNSPECIFIED = 0 +uint8 VEHICLE_TYPE_ROTARY_WING = 1 +uint8 VEHICLE_TYPE_FIXED_WING = 2 +uint8 VEHICLE_TYPE_ROVER = 3 + +uint8 FAILSAFE_DEFER_STATE_DISABLED = 0 +uint8 FAILSAFE_DEFER_STATE_ENABLED = 1 +uint8 FAILSAFE_DEFER_STATE_WOULD_FAILSAFE = 2 # Failsafes deferred, but would trigger a failsafe + +bool failsafe # true if system is in failsafe state (e.g.:RTL, Hover, Terminate, ...) +bool failsafe_and_user_took_over # true if system is in failsafe state but the user took over control +uint8 failsafe_defer_state # [@enum FAILSAFE_DEFER_STATE] + +# Link loss +bool gcs_connection_lost # datalink to GCS lost +uint8 gcs_connection_lost_counter # counts unique GCS connection lost events +bool high_latency_data_link_lost # Set to true if the high latency data link (eg. RockBlock Iridium 9603 telemetry module) is lost + +# VTOL flags +bool is_vtol # True if the system is VTOL capable +bool is_vtol_tailsitter # True if the system performs a 90° pitch down rotation during transition from MC to FW +bool in_transition_mode # True if VTOL is doing a transition +bool in_transition_to_fw # True if VTOL is doing a transition from MC to FW + +# MAVLink identification +uint8 system_type # system type, contains mavlink MAV_TYPE +uint8 system_id # system id, contains MAVLink's system ID field +uint8 component_id # subsystem / component id, contains MAVLink's component ID field + +bool safety_button_available # Set to true if a safety button is connected +bool safety_off # Set to true if safety is off + +bool power_input_valid # Set if input power is valid +bool usb_connected # Set to true (never cleared) once telemetry received from usb link + +bool open_drone_id_system_present +bool open_drone_id_system_healthy + +bool parachute_system_present +bool parachute_system_healthy + +bool rc_calibration_in_progress +bool calibration_enabled + +bool pre_flight_checks_pass # true if all checks necessary to arm pass +``` + +::: diff --git a/docs/uk/msg_docs/VehicleStatusV2.md b/docs/uk/msg_docs/VehicleStatusV2.md new file mode 100644 index 0000000000..09f0d8d785 --- /dev/null +++ b/docs/uk/msg_docs/VehicleStatusV2.md @@ -0,0 +1,270 @@ +--- +pageClass: is-wide-page +--- + +# VehicleStatusV2 (UORB message) + +Encodes the system state of the vehicle published by commander. + +**TOPICS:** vehicle_status_v2 + +## Fields + +| Назва | Тип | Unit [Frame] | Range/Enum | Опис | +| ---------------------------------------------------------------------------------------------------------------- | -------- | ---------------------------------------------------------------- | ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| timestamp | `uint64` | | | time since system start (microseconds) | +| armed_time | `uint64` | | | Arming timestamp (microseconds) | +| takeoff_time | `uint64` | | | Takeoff timestamp (microseconds) | +| arming_state | `uint8` | | | | +| latest_arming_reason | `uint8` | | | | +| latest_disarming_reason | `uint8` | | | | +| nav_state_timestamp | `uint64` | | | time when current nav_state activated | +| nav_state_user_intention | `uint8` | | | Mode that the user selected (might be different from nav_state in a failsafe situation) | +| nav_state | `uint8` | | | Currently active mode | +| executor_in_charge | `uint8` | | | Current mode executor in charge (0=Autopilot) | +| nav_state_display | `uint8` | | | User-visible nav state sent via MAVLink (executor state if active, otherwise nav_state) | +| valid_nav_states_mask | `uint32` | | | Bitmask for all valid nav_state values | +| can_set_nav_states_mask | `uint32` | | | Bitmask for all modes that a user can select | +| failure_detector_status | `uint16` | | | | +| hil_state | `uint8` | | | | +| vehicle_type | `uint8` | | | | +| failsafe | `bool` | | | true if system is in failsafe state (e.g.:RTL, Hover, Terminate, ...) | +| failsafe_and_user_took_over | `bool` | | | true if system is in failsafe state but the user took over control | +| failsafe_defer_state | `uint8` | | | one of FAILSAFE_DEFER_STATE_\* | +| gcs_connection_lost | `bool` | | | datalink to GCS lost | +| gcs_connection_lost_counter | `uint8` | | | counts unique GCS connection lost events | +| high_latency_data_link_lost | `bool` | | | Set to true if the high latency data link (eg. RockBlock Iridium 9603 telemetry module) is lost | +| is_vtol | `bool` | | | True if the system is VTOL capable | +| is_vtol_tailsitter | `bool` | | | True if the system performs a 90° pitch down rotation during transition from MC to FW | +| in_transition_mode | `bool` | | | True if VTOL is doing a transition | +| in_transition_to_fw | `bool` | | | True if VTOL is doing a transition from MC to FW | +| system_type | `uint8` | | | system type, contains mavlink MAV_TYPE | +| system_id | `uint8` | | | system id, contains MAVLink's system ID field | +| component_id | `uint8` | | | subsystem / component id, contains MAVLink's component ID field | +| safety_button_available | `bool` | | | Set to true if a safety button is connected | +| safety_off | `bool` | | | Set to true if safety is off | +| power_input_valid | `bool` | | | set if input power is valid | +| usb_connected | `bool` | | | set to true (never cleared) once telemetry received from usb link | +| open_drone_id_system_present | `bool` | | | | +| open_drone_id_system_healthy | `bool` | | | | +| parachute_system_present | `bool` | | | | +| parachute_system_healthy | `bool` | | | | +| traffic_avoidance_system_present | `bool` | | | | +| rc_calibration_in_progress | `bool` | | | | +| calibration_enabled | `bool` | | | | +| pre_flight_checks_pass | `bool` | | | true if all checks necessary to arm pass | + +## Constants + +| Назва | Тип | Значення | Опис | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -------- | ----------------------------------------------------------------------------- | +| MESSAGE_VERSION | `uint32` | 2 | | +| ARMING_STATE_DISARMED | `uint8` | 1 | | +| ARMING_STATE_ARMED | `uint8` | 2 | | +| ARM_DISARM_REASON_STICK_GESTURE | `uint8` | 1 | | +| ARM_DISARM_REASON_RC_SWITCH | `uint8` | 2 | | +| ARM_DISARM_REASON_COMMAND_INTERNAL | `uint8` | 3 | | +| ARM_DISARM_REASON_COMMAND_EXTERNAL | `uint8` | 4 | | +| ARM_DISARM_REASON_MISSION_START | `uint8` | 5 | | +| ARM_DISARM_REASON_LANDING | `uint8` | 6 | | +| ARM_DISARM_REASON_PREFLIGHT_INACTION | `uint8` | 7 | | +| ARM_DISARM_REASON_KILL_SWITCH | `uint8` | 8 | | +| ARM_DISARM_REASON_RC_BUTTON | `uint8` | 13 | | +| ARM_DISARM_REASON_FAILSAFE | `uint8` | 14 | | +| NAVIGATION_STATE_MANUAL | `uint8` | 0 | Manual mode | +| NAVIGATION_STATE_ALTCTL | `uint8` | 1 | Altitude control mode | +| NAVIGATION_STATE_POSCTL | `uint8` | 2 | Position control mode | +| NAVIGATION_STATE_AUTO_MISSION | `uint8` | 3 | Auto mission mode | +| NAVIGATION_STATE_AUTO_LOITER | `uint8` | 4 | Auto loiter mode | +| NAVIGATION_STATE_AUTO_RTL | `uint8` | 5 | Auto return to launch mode | +| NAVIGATION_STATE_POSITION_SLOW | `uint8` | 6 | | +| NAVIGATION_STATE_FREE5 | `uint8` | 7 | | +| NAVIGATION_STATE_ALTITUDE_CRUISE | `uint8` | 8 | Altitude with Cruise mode | +| NAVIGATION_STATE_FREE3 | `uint8` | 9 | | +| NAVIGATION_STATE_ACRO | `uint8` | 10 | Acro mode | +| NAVIGATION_STATE_FREE2 | `uint8` | 11 | | +| NAVIGATION_STATE_DESCEND | `uint8` | 12 | Descend mode (no position control) | +| NAVIGATION_STATE_TERMINATION | `uint8` | 13 | Termination mode | +| NAVIGATION_STATE_OFFBOARD | `uint8` | 14 | | +| NAVIGATION_STATE_STAB | `uint8` | 15 | Stabilized mode | +| NAVIGATION_STATE_FREE1 | `uint8` | 16 | | +| NAVIGATION_STATE_AUTO_TAKEOFF | `uint8` | 17 | Takeoff | +| NAVIGATION_STATE_AUTO_LAND | `uint8` | 18 | Land | +| NAVIGATION_STATE_AUTO_FOLLOW_TARGET | `uint8` | 19 | Auto Follow | +| NAVIGATION_STATE_AUTO_PRECLAND | `uint8` | 20 | Precision land with landing target | +| NAVIGATION_STATE_ORBIT | `uint8` | 21 | Orbit in a circle | +| NAVIGATION_STATE_AUTO_VTOL_TAKEOFF | `uint8` | 22 | Takeoff, transition, establish loiter | +| NAVIGATION_STATE_EXTERNAL1 | `uint8` | 23 | | +| NAVIGATION_STATE_EXTERNAL2 | `uint8` | 24 | | +| NAVIGATION_STATE_EXTERNAL3 | `uint8` | 25 | | +| NAVIGATION_STATE_EXTERNAL4 | `uint8` | 26 | | +| NAVIGATION_STATE_EXTERNAL5 | `uint8` | 27 | | +| NAVIGATION_STATE_EXTERNAL6 | `uint8` | 28 | | +| NAVIGATION_STATE_EXTERNAL7 | `uint8` | 29 | | +| NAVIGATION_STATE_EXTERNAL8 | `uint8` | 30 | | +| NAVIGATION_STATE_MAX | `uint8` | 31 | | +| FAILURE_NONE | `uint16` | 0 | | +| FAILURE_ROLL | `uint16` | 1 | (1 << 0) | +| FAILURE_PITCH | `uint16` | 2 | (1 << 1) | +| FAILURE_ALT | `uint16` | 4 | (1 << 2) | +| FAILURE_EXT | `uint16` | 8 | (1 << 3) | +| FAILURE_ARM_ESC | `uint16` | 16 | (1 << 4) | +| FAILURE_BATTERY | `uint16` | 32 | (1 << 5) | +| FAILURE_IMBALANCED_PROP | `uint16` | 64 | (1 << 6) | +| FAILURE_MOTOR | `uint16` | 128 | (1 << 7) | +| HIL_STATE_OFF | `uint8` | 0 | | +| HIL_STATE_ON | `uint8` | 1 | | +| VEHICLE_TYPE_UNSPECIFIED | `uint8` | 0 | | +| VEHICLE_TYPE_ROTARY_WING | `uint8` | 1 | | +| VEHICLE_TYPE_FIXED_WING | `uint8` | 2 | | +| VEHICLE_TYPE_ROVER | `uint8` | 3 | | +| FAILSAFE_DEFER_STATE_DISABLED | `uint8` | 0 | | +| FAILSAFE_DEFER_STATE_ENABLED | `uint8` | 1 | | +| FAILSAFE_DEFER_STATE_WOULD_FAILSAFE | `uint8` | 2 | Failsafes deferred, but would trigger a failsafe | + +## Source Message + +[Source file (GitHub)](https://github.com/PX4/PX4-Autopilot/blob/main/msg/px4_msgs_old/msg/VehicleStatusV2.msg) + +:::details +Click here to see original file + +```c +# Encodes the system state of the vehicle published by commander + +uint32 MESSAGE_VERSION = 2 + +uint64 timestamp # time since system start (microseconds) + +uint64 armed_time # Arming timestamp (microseconds) +uint64 takeoff_time # Takeoff timestamp (microseconds) + +uint8 arming_state +uint8 ARMING_STATE_DISARMED = 1 +uint8 ARMING_STATE_ARMED = 2 + +uint8 latest_arming_reason +uint8 latest_disarming_reason +uint8 ARM_DISARM_REASON_STICK_GESTURE = 1 +uint8 ARM_DISARM_REASON_RC_SWITCH = 2 +uint8 ARM_DISARM_REASON_COMMAND_INTERNAL = 3 +uint8 ARM_DISARM_REASON_COMMAND_EXTERNAL = 4 +uint8 ARM_DISARM_REASON_MISSION_START = 5 +uint8 ARM_DISARM_REASON_LANDING = 6 +uint8 ARM_DISARM_REASON_PREFLIGHT_INACTION = 7 +uint8 ARM_DISARM_REASON_KILL_SWITCH = 8 +uint8 ARM_DISARM_REASON_RC_BUTTON = 13 +uint8 ARM_DISARM_REASON_FAILSAFE = 14 + +uint64 nav_state_timestamp # time when current nav_state activated + +uint8 nav_state_user_intention # Mode that the user selected (might be different from nav_state in a failsafe situation) + +uint8 nav_state # Currently active mode +uint8 NAVIGATION_STATE_MANUAL = 0 # Manual mode +uint8 NAVIGATION_STATE_ALTCTL = 1 # Altitude control mode +uint8 NAVIGATION_STATE_POSCTL = 2 # Position control mode +uint8 NAVIGATION_STATE_AUTO_MISSION = 3 # Auto mission mode +uint8 NAVIGATION_STATE_AUTO_LOITER = 4 # Auto loiter mode +uint8 NAVIGATION_STATE_AUTO_RTL = 5 # Auto return to launch mode +uint8 NAVIGATION_STATE_POSITION_SLOW = 6 +uint8 NAVIGATION_STATE_FREE5 = 7 +uint8 NAVIGATION_STATE_ALTITUDE_CRUISE = 8 # Altitude with Cruise mode +uint8 NAVIGATION_STATE_FREE3 = 9 +uint8 NAVIGATION_STATE_ACRO = 10 # Acro mode +uint8 NAVIGATION_STATE_FREE2 = 11 +uint8 NAVIGATION_STATE_DESCEND = 12 # Descend mode (no position control) +uint8 NAVIGATION_STATE_TERMINATION = 13 # Termination mode +uint8 NAVIGATION_STATE_OFFBOARD = 14 +uint8 NAVIGATION_STATE_STAB = 15 # Stabilized mode +uint8 NAVIGATION_STATE_FREE1 = 16 +uint8 NAVIGATION_STATE_AUTO_TAKEOFF = 17 # Takeoff +uint8 NAVIGATION_STATE_AUTO_LAND = 18 # Land +uint8 NAVIGATION_STATE_AUTO_FOLLOW_TARGET = 19 # Auto Follow +uint8 NAVIGATION_STATE_AUTO_PRECLAND = 20 # Precision land with landing target +uint8 NAVIGATION_STATE_ORBIT = 21 # Orbit in a circle +uint8 NAVIGATION_STATE_AUTO_VTOL_TAKEOFF = 22 # Takeoff, transition, establish loiter +uint8 NAVIGATION_STATE_EXTERNAL1 = 23 +uint8 NAVIGATION_STATE_EXTERNAL2 = 24 +uint8 NAVIGATION_STATE_EXTERNAL3 = 25 +uint8 NAVIGATION_STATE_EXTERNAL4 = 26 +uint8 NAVIGATION_STATE_EXTERNAL5 = 27 +uint8 NAVIGATION_STATE_EXTERNAL6 = 28 +uint8 NAVIGATION_STATE_EXTERNAL7 = 29 +uint8 NAVIGATION_STATE_EXTERNAL8 = 30 +uint8 NAVIGATION_STATE_MAX = 31 + +uint8 executor_in_charge # Current mode executor in charge (0=Autopilot) +uint8 nav_state_display # User-visible nav state sent via MAVLink (executor state if active, otherwise nav_state) + +uint32 valid_nav_states_mask # Bitmask for all valid nav_state values +uint32 can_set_nav_states_mask # Bitmask for all modes that a user can select + +# Bitmask of detected failures +uint16 failure_detector_status +uint16 FAILURE_NONE = 0 +uint16 FAILURE_ROLL = 1 # (1 << 0) +uint16 FAILURE_PITCH = 2 # (1 << 1) +uint16 FAILURE_ALT = 4 # (1 << 2) +uint16 FAILURE_EXT = 8 # (1 << 3) +uint16 FAILURE_ARM_ESC = 16 # (1 << 4) +uint16 FAILURE_BATTERY = 32 # (1 << 5) +uint16 FAILURE_IMBALANCED_PROP = 64 # (1 << 6) +uint16 FAILURE_MOTOR = 128 # (1 << 7) + +uint8 hil_state +uint8 HIL_STATE_OFF = 0 +uint8 HIL_STATE_ON = 1 + +# Current vehicle locomotion method. A vehicle can have different methods (e.g. VTOL transitions from RW to FW method) +uint8 vehicle_type +uint8 VEHICLE_TYPE_UNSPECIFIED = 0 +uint8 VEHICLE_TYPE_ROTARY_WING = 1 +uint8 VEHICLE_TYPE_FIXED_WING = 2 +uint8 VEHICLE_TYPE_ROVER = 3 + +uint8 FAILSAFE_DEFER_STATE_DISABLED = 0 +uint8 FAILSAFE_DEFER_STATE_ENABLED = 1 +uint8 FAILSAFE_DEFER_STATE_WOULD_FAILSAFE = 2 # Failsafes deferred, but would trigger a failsafe + +bool failsafe # true if system is in failsafe state (e.g.:RTL, Hover, Terminate, ...) +bool failsafe_and_user_took_over # true if system is in failsafe state but the user took over control +uint8 failsafe_defer_state # one of FAILSAFE_DEFER_STATE_* + +# Link loss +bool gcs_connection_lost # datalink to GCS lost +uint8 gcs_connection_lost_counter # counts unique GCS connection lost events +bool high_latency_data_link_lost # Set to true if the high latency data link (eg. RockBlock Iridium 9603 telemetry module) is lost + +# VTOL flags +bool is_vtol # True if the system is VTOL capable +bool is_vtol_tailsitter # True if the system performs a 90° pitch down rotation during transition from MC to FW +bool in_transition_mode # True if VTOL is doing a transition +bool in_transition_to_fw # True if VTOL is doing a transition from MC to FW + +# MAVLink identification +uint8 system_type # system type, contains mavlink MAV_TYPE +uint8 system_id # system id, contains MAVLink's system ID field +uint8 component_id # subsystem / component id, contains MAVLink's component ID field + +bool safety_button_available # Set to true if a safety button is connected +bool safety_off # Set to true if safety is off + +bool power_input_valid # set if input power is valid +bool usb_connected # set to true (never cleared) once telemetry received from usb link + +bool open_drone_id_system_present +bool open_drone_id_system_healthy + +bool parachute_system_present +bool parachute_system_healthy + +bool traffic_avoidance_system_present + +bool rc_calibration_in_progress +bool calibration_enabled + +bool pre_flight_checks_pass # true if all checks necessary to arm pass +``` + +::: diff --git a/docs/uk/msg_docs/VehicleStatusV3.md b/docs/uk/msg_docs/VehicleStatusV3.md new file mode 100644 index 0000000000..28c9a554b7 --- /dev/null +++ b/docs/uk/msg_docs/VehicleStatusV3.md @@ -0,0 +1,248 @@ +--- +pageClass: is-wide-page +--- + +# VehicleStatusV3 (UORB message) + +Encodes the system state of the vehicle published by commander. + +**TOPICS:** vehicle_status_v3 + +## Fields + +| Назва | Тип | Unit [Frame] | Range/Enum | Опис | +| ---------------------------------------------------------------------------------------------------------------- | -------- | ---------------------------------------------------------------- | ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| timestamp | `uint64` | | | time since system start (microseconds) | +| armed_time | `uint64` | | | Arming timestamp (microseconds) | +| takeoff_time | `uint64` | | | Takeoff timestamp (microseconds) | +| arming_state | `uint8` | | | | +| latest_arming_reason | `uint8` | | | | +| latest_disarming_reason | `uint8` | | | | +| nav_state_timestamp | `uint64` | | | time when current nav_state activated | +| nav_state_user_intention | `uint8` | | | Mode that the user selected (might be different from nav_state in a failsafe situation) | +| nav_state | `uint8` | | | Currently active mode | +| executor_in_charge | `uint8` | | | Current mode executor in charge (0=Autopilot) | +| nav_state_display | `uint8` | | | User-visible nav state sent via MAVLink (executor state if active, otherwise nav_state) | +| valid_nav_states_mask | `uint32` | | | Bitmask for all valid nav_state values | +| can_set_nav_states_mask | `uint32` | | | Bitmask for all modes that a user can select | +| hil_state | `uint8` | | | | +| vehicle_type | `uint8` | | | | +| failsafe | `bool` | | | true if system is in failsafe state (e.g.:RTL, Hover, Terminate, ...) | +| failsafe_and_user_took_over | `bool` | | | true if system is in failsafe state but the user took over control | +| failsafe_defer_state | `uint8` | | | one of FAILSAFE_DEFER_STATE_\* | +| gcs_connection_lost | `bool` | | | datalink to GCS lost | +| gcs_connection_lost_counter | `uint8` | | | counts unique GCS connection lost events | +| high_latency_data_link_lost | `bool` | | | Set to true if the high latency data link (eg. RockBlock Iridium 9603 telemetry module) is lost | +| is_vtol | `bool` | | | True if the system is VTOL capable | +| is_vtol_tailsitter | `bool` | | | True if the system performs a 90° pitch down rotation during transition from MC to FW | +| in_transition_mode | `bool` | | | True if VTOL is doing a transition | +| in_transition_to_fw | `bool` | | | True if VTOL is doing a transition from MC to FW | +| system_type | `uint8` | | | system type, contains mavlink MAV_TYPE | +| system_id | `uint8` | | | system id, contains MAVLink's system ID field | +| component_id | `uint8` | | | subsystem / component id, contains MAVLink's component ID field | +| safety_button_available | `bool` | | | Set to true if a safety button is connected | +| safety_off | `bool` | | | Set to true if safety is off | +| power_input_valid | `bool` | | | set if input power is valid | +| usb_connected | `bool` | | | set to true (never cleared) once telemetry received from usb link | +| open_drone_id_system_present | `bool` | | | | +| open_drone_id_system_healthy | `bool` | | | | +| parachute_system_present | `bool` | | | | +| parachute_system_healthy | `bool` | | | | +| traffic_avoidance_system_present | `bool` | | | | +| rc_calibration_in_progress | `bool` | | | | +| calibration_enabled | `bool` | | | | +| pre_flight_checks_pass | `bool` | | | true if all checks necessary to arm pass | + +## Constants + +| Назва | Тип | Значення | Опис | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -------- | ----------------------------------------------------- | +| MESSAGE_VERSION | `uint32` | 3 | | +| ARMING_STATE_DISARMED | `uint8` | 1 | | +| ARMING_STATE_ARMED | `uint8` | 2 | | +| ARM_DISARM_REASON_STICK_GESTURE | `uint8` | 1 | | +| ARM_DISARM_REASON_RC_SWITCH | `uint8` | 2 | | +| ARM_DISARM_REASON_COMMAND_INTERNAL | `uint8` | 3 | | +| ARM_DISARM_REASON_COMMAND_EXTERNAL | `uint8` | 4 | | +| ARM_DISARM_REASON_MISSION_START | `uint8` | 5 | | +| ARM_DISARM_REASON_LANDING | `uint8` | 6 | | +| ARM_DISARM_REASON_PREFLIGHT_INACTION | `uint8` | 7 | | +| ARM_DISARM_REASON_KILL_SWITCH | `uint8` | 8 | | +| ARM_DISARM_REASON_RC_BUTTON | `uint8` | 13 | | +| ARM_DISARM_REASON_FAILSAFE | `uint8` | 14 | | +| NAVIGATION_STATE_MANUAL | `uint8` | 0 | Manual mode | +| NAVIGATION_STATE_ALTCTL | `uint8` | 1 | Altitude control mode | +| NAVIGATION_STATE_POSCTL | `uint8` | 2 | Position control mode | +| NAVIGATION_STATE_AUTO_MISSION | `uint8` | 3 | Auto mission mode | +| NAVIGATION_STATE_AUTO_LOITER | `uint8` | 4 | Auto loiter mode | +| NAVIGATION_STATE_AUTO_RTL | `uint8` | 5 | Auto return to launch mode | +| NAVIGATION_STATE_POSITION_SLOW | `uint8` | 6 | | +| NAVIGATION_STATE_FREE5 | `uint8` | 7 | | +| NAVIGATION_STATE_ALTITUDE_CRUISE | `uint8` | 8 | Altitude with Cruise mode | +| NAVIGATION_STATE_FREE3 | `uint8` | 9 | | +| NAVIGATION_STATE_ACRO | `uint8` | 10 | Acro mode | +| NAVIGATION_STATE_FREE2 | `uint8` | 11 | | +| NAVIGATION_STATE_DESCEND | `uint8` | 12 | Descend mode (no position control) | +| NAVIGATION_STATE_TERMINATION | `uint8` | 13 | Termination mode | +| NAVIGATION_STATE_OFFBOARD | `uint8` | 14 | | +| NAVIGATION_STATE_STAB | `uint8` | 15 | Stabilized mode | +| NAVIGATION_STATE_FREE1 | `uint8` | 16 | | +| NAVIGATION_STATE_AUTO_TAKEOFF | `uint8` | 17 | Takeoff | +| NAVIGATION_STATE_AUTO_LAND | `uint8` | 18 | Land | +| NAVIGATION_STATE_AUTO_FOLLOW_TARGET | `uint8` | 19 | Auto Follow | +| NAVIGATION_STATE_AUTO_PRECLAND | `uint8` | 20 | Precision land with landing target | +| NAVIGATION_STATE_ORBIT | `uint8` | 21 | Orbit in a circle | +| NAVIGATION_STATE_AUTO_VTOL_TAKEOFF | `uint8` | 22 | Takeoff, transition, establish loiter | +| NAVIGATION_STATE_EXTERNAL1 | `uint8` | 23 | | +| NAVIGATION_STATE_EXTERNAL2 | `uint8` | 24 | | +| NAVIGATION_STATE_EXTERNAL3 | `uint8` | 25 | | +| NAVIGATION_STATE_EXTERNAL4 | `uint8` | 26 | | +| NAVIGATION_STATE_EXTERNAL5 | `uint8` | 27 | | +| NAVIGATION_STATE_EXTERNAL6 | `uint8` | 28 | | +| NAVIGATION_STATE_EXTERNAL7 | `uint8` | 29 | | +| NAVIGATION_STATE_EXTERNAL8 | `uint8` | 30 | | +| NAVIGATION_STATE_MAX | `uint8` | 31 | | +| HIL_STATE_OFF | `uint8` | 0 | | +| HIL_STATE_ON | `uint8` | 1 | | +| VEHICLE_TYPE_UNSPECIFIED | `uint8` | 0 | | +| VEHICLE_TYPE_ROTARY_WING | `uint8` | 1 | | +| VEHICLE_TYPE_FIXED_WING | `uint8` | 2 | | +| VEHICLE_TYPE_ROVER | `uint8` | 3 | | +| FAILSAFE_DEFER_STATE_DISABLED | `uint8` | 0 | | +| FAILSAFE_DEFER_STATE_ENABLED | `uint8` | 1 | | +| FAILSAFE_DEFER_STATE_WOULD_FAILSAFE | `uint8` | 2 | Failsafes deferred, but would trigger a failsafe | + +## Source Message + +[Source file (GitHub)](https://github.com/PX4/PX4-Autopilot/blob/main/msg/px4_msgs_old/msg/VehicleStatusV3.msg) + +:::details +Click here to see original file + +```c +# Encodes the system state of the vehicle published by commander + +uint32 MESSAGE_VERSION = 3 + +uint64 timestamp # time since system start (microseconds) + +uint64 armed_time # Arming timestamp (microseconds) +uint64 takeoff_time # Takeoff timestamp (microseconds) + +uint8 arming_state +uint8 ARMING_STATE_DISARMED = 1 +uint8 ARMING_STATE_ARMED = 2 + +uint8 latest_arming_reason +uint8 latest_disarming_reason +uint8 ARM_DISARM_REASON_STICK_GESTURE = 1 +uint8 ARM_DISARM_REASON_RC_SWITCH = 2 +uint8 ARM_DISARM_REASON_COMMAND_INTERNAL = 3 +uint8 ARM_DISARM_REASON_COMMAND_EXTERNAL = 4 +uint8 ARM_DISARM_REASON_MISSION_START = 5 +uint8 ARM_DISARM_REASON_LANDING = 6 +uint8 ARM_DISARM_REASON_PREFLIGHT_INACTION = 7 +uint8 ARM_DISARM_REASON_KILL_SWITCH = 8 +uint8 ARM_DISARM_REASON_RC_BUTTON = 13 +uint8 ARM_DISARM_REASON_FAILSAFE = 14 + +uint64 nav_state_timestamp # time when current nav_state activated + +uint8 nav_state_user_intention # Mode that the user selected (might be different from nav_state in a failsafe situation) + +uint8 nav_state # Currently active mode +uint8 NAVIGATION_STATE_MANUAL = 0 # Manual mode +uint8 NAVIGATION_STATE_ALTCTL = 1 # Altitude control mode +uint8 NAVIGATION_STATE_POSCTL = 2 # Position control mode +uint8 NAVIGATION_STATE_AUTO_MISSION = 3 # Auto mission mode +uint8 NAVIGATION_STATE_AUTO_LOITER = 4 # Auto loiter mode +uint8 NAVIGATION_STATE_AUTO_RTL = 5 # Auto return to launch mode +uint8 NAVIGATION_STATE_POSITION_SLOW = 6 +uint8 NAVIGATION_STATE_FREE5 = 7 +uint8 NAVIGATION_STATE_ALTITUDE_CRUISE = 8 # Altitude with Cruise mode +uint8 NAVIGATION_STATE_FREE3 = 9 +uint8 NAVIGATION_STATE_ACRO = 10 # Acro mode +uint8 NAVIGATION_STATE_FREE2 = 11 +uint8 NAVIGATION_STATE_DESCEND = 12 # Descend mode (no position control) +uint8 NAVIGATION_STATE_TERMINATION = 13 # Termination mode +uint8 NAVIGATION_STATE_OFFBOARD = 14 +uint8 NAVIGATION_STATE_STAB = 15 # Stabilized mode +uint8 NAVIGATION_STATE_FREE1 = 16 +uint8 NAVIGATION_STATE_AUTO_TAKEOFF = 17 # Takeoff +uint8 NAVIGATION_STATE_AUTO_LAND = 18 # Land +uint8 NAVIGATION_STATE_AUTO_FOLLOW_TARGET = 19 # Auto Follow +uint8 NAVIGATION_STATE_AUTO_PRECLAND = 20 # Precision land with landing target +uint8 NAVIGATION_STATE_ORBIT = 21 # Orbit in a circle +uint8 NAVIGATION_STATE_AUTO_VTOL_TAKEOFF = 22 # Takeoff, transition, establish loiter +uint8 NAVIGATION_STATE_EXTERNAL1 = 23 +uint8 NAVIGATION_STATE_EXTERNAL2 = 24 +uint8 NAVIGATION_STATE_EXTERNAL3 = 25 +uint8 NAVIGATION_STATE_EXTERNAL4 = 26 +uint8 NAVIGATION_STATE_EXTERNAL5 = 27 +uint8 NAVIGATION_STATE_EXTERNAL6 = 28 +uint8 NAVIGATION_STATE_EXTERNAL7 = 29 +uint8 NAVIGATION_STATE_EXTERNAL8 = 30 +uint8 NAVIGATION_STATE_MAX = 31 + +uint8 executor_in_charge # Current mode executor in charge (0=Autopilot) +uint8 nav_state_display # User-visible nav state sent via MAVLink (executor state if active, otherwise nav_state) + +uint32 valid_nav_states_mask # Bitmask for all valid nav_state values +uint32 can_set_nav_states_mask # Bitmask for all modes that a user can select + +uint8 hil_state +uint8 HIL_STATE_OFF = 0 +uint8 HIL_STATE_ON = 1 + +# Current vehicle locomotion method. A vehicle can have different methods (e.g. VTOL transitions from RW to FW method) +uint8 vehicle_type +uint8 VEHICLE_TYPE_UNSPECIFIED = 0 +uint8 VEHICLE_TYPE_ROTARY_WING = 1 +uint8 VEHICLE_TYPE_FIXED_WING = 2 +uint8 VEHICLE_TYPE_ROVER = 3 + +uint8 FAILSAFE_DEFER_STATE_DISABLED = 0 +uint8 FAILSAFE_DEFER_STATE_ENABLED = 1 +uint8 FAILSAFE_DEFER_STATE_WOULD_FAILSAFE = 2 # Failsafes deferred, but would trigger a failsafe + +bool failsafe # true if system is in failsafe state (e.g.:RTL, Hover, Terminate, ...) +bool failsafe_and_user_took_over # true if system is in failsafe state but the user took over control +uint8 failsafe_defer_state # one of FAILSAFE_DEFER_STATE_* + +# Link loss +bool gcs_connection_lost # datalink to GCS lost +uint8 gcs_connection_lost_counter # counts unique GCS connection lost events +bool high_latency_data_link_lost # Set to true if the high latency data link (eg. RockBlock Iridium 9603 telemetry module) is lost + +# VTOL flags +bool is_vtol # True if the system is VTOL capable +bool is_vtol_tailsitter # True if the system performs a 90° pitch down rotation during transition from MC to FW +bool in_transition_mode # True if VTOL is doing a transition +bool in_transition_to_fw # True if VTOL is doing a transition from MC to FW + +# MAVLink identification +uint8 system_type # system type, contains mavlink MAV_TYPE +uint8 system_id # system id, contains MAVLink's system ID field +uint8 component_id # subsystem / component id, contains MAVLink's component ID field + +bool safety_button_available # Set to true if a safety button is connected +bool safety_off # Set to true if safety is off + +bool power_input_valid # set if input power is valid +bool usb_connected # set to true (never cleared) once telemetry received from usb link + +bool open_drone_id_system_present +bool open_drone_id_system_healthy + +bool parachute_system_present +bool parachute_system_healthy + +bool traffic_avoidance_system_present + +bool rc_calibration_in_progress +bool calibration_enabled + +bool pre_flight_checks_pass # true if all checks necessary to arm pass +``` + +::: diff --git a/docs/uk/msg_docs/VtolVehicleStatus.md b/docs/uk/msg_docs/VtolVehicleStatus.md index ced3fee553..bf469cc0b5 100644 --- a/docs/uk/msg_docs/VtolVehicleStatus.md +++ b/docs/uk/msg_docs/VtolVehicleStatus.md @@ -6,7 +6,7 @@ pageClass: is-wide-page VEHICLE_VTOL_STATE, should match 1:1 MAVLinks's MAV_VTOL_STATE. -**TOPICS:** vtol_vehiclestatus +**TOPICS:** vtol_vehicle_status ## Fields @@ -18,14 +18,14 @@ VEHICLE_VTOL_STATE, should match 1:1 MAVLinks's MAV_VTOL_STATE. ## Constants -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------- | -------- | ---- | -| MESSAGE_VERSION | `uint32` | 0 | | -| VEHICLE_VTOL_STATE_UNDEFINED | `uint8` | 0 | | -| VEHICLE_VTOL_STATE_TRANSITION_TO_FW | `uint8` | 1 | | -| VEHICLE_VTOL_STATE_TRANSITION_TO_MC | `uint8` | 2 | | -| VEHICLE_VTOL_STATE_MC | `uint8` | 3 | | -| VEHICLE_VTOL_STATE_FW | `uint8` | 4 | | +| Назва | Тип | Значення | Опис | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -------- | ---- | +| MESSAGE_VERSION | `uint32` | 0 | | +| VEHICLE_VTOL_STATE_UNDEFINED | `uint8` | 0 | | +| VEHICLE_VTOL_STATE_TRANSITION_TO_FW | `uint8` | 1 | | +| VEHICLE_VTOL_STATE_TRANSITION_TO_MC | `uint8` | 2 | | +| VEHICLE_VTOL_STATE_MC | `uint8` | 3 | | +| VEHICLE_VTOL_STATE_FW | `uint8` | 4 | | ## Source Message diff --git a/docs/uk/msg_docs/Vtx.md b/docs/uk/msg_docs/Vtx.md index 2668dd7a27..64c45c39a4 100644 --- a/docs/uk/msg_docs/Vtx.md +++ b/docs/uk/msg_docs/Vtx.md @@ -24,20 +24,20 @@ pageClass: is-wide-page ## Constants -| Назва | Тип | Значення | Опис | -| ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | -------- | ----------------------------------------- | -| BAND_NAME_LENGTH | `uint8` | 12 | | -| POWER_LABEL_LENGTH | `uint8` | 4 | | -| PROTOCOL_NONE | `uint8` | 0 | No protocol is detected, usually an error | -| PROTOCOL_SMART_AUDIO_V1 | `uint8` | 10 | | -| PROTOCOL_SMART_AUDIO_V2 | `uint8` | 20 | | -| PROTOCOL_SMART_AUDIO_V2_1 | `uint8` | 21 | | -| PROTOCOL_TRAMP | `uint8` | 100 | | -| DEVICE_UNKNOWN | `uint8` | 0 | | -| DEVICE_PEAK_THOR_T67 | `uint8` | 20 | | -| DEVICE_RUSH_MAX_SOLO | `uint8` | 40 | | -| MODE_NORMAL | `uint8` | 0 | | -| MODE_PIT | `uint8` | 1 | | +| Назва | Тип | Значення | Опис | +| ----------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | -------- | ----------------------------------------- | +| BAND_NAME_LENGTH | `uint8` | 12 | | +| POWER_LABEL_LENGTH | `uint8` | 4 | | +| PROTOCOL_NONE | `uint8` | 0 | No protocol is detected, usually an error | +| PROTOCOL_SMART_AUDIO_V1 | `uint8` | 10 | | +| PROTOCOL_SMART_AUDIO_V2 | `uint8` | 20 | | +| PROTOCOL_SMART_AUDIO_V2_1 | `uint8` | 21 | | +| PROTOCOL_TRAMP | `uint8` | 100 | | +| DEVICE_UNKNOWN | `uint8` | 0 | | +| DEVICE_PEAK_THOR_T67 | `uint8` | 20 | | +| DEVICE_RUSH_MAX_SOLO | `uint8` | 40 | | +| MODE_NORMAL | `uint8` | 0 | | +| MODE_PIT | `uint8` | 1 | | ## Source Message diff --git a/docs/uk/msg_docs/Wind.md b/docs/uk/msg_docs/Wind.md index d2d542be9b..c90274aa9f 100644 --- a/docs/uk/msg_docs/Wind.md +++ b/docs/uk/msg_docs/Wind.md @@ -28,9 +28,9 @@ Published by the navigation filter (EKF2) for use by other flight modules and li ## Constants -| Назва | Тип | Значення | Опис | -| -------------------------------------------------------------------- | -------- | -------- | ---- | -| MESSAGE_VERSION | `uint32` | 0 | | +| Назва | Тип | Значення | Опис | +| ------------------------------------------------------------------ | -------- | -------- | ---- | +| MESSAGE_VERSION | `uint32` | 0 | | ## Source Message diff --git a/docs/uk/msg_docs/YawEstimatorStatus.md b/docs/uk/msg_docs/YawEstimatorStatus.md index f45e7c22b4..110ccae163 100644 --- a/docs/uk/msg_docs/YawEstimatorStatus.md +++ b/docs/uk/msg_docs/YawEstimatorStatus.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # YawEstimatorStatus (повідомлення UORB) -**TOPICS:** yaw_estimatorstatus +**TOPICS:** yaw_estimator_status ## Fields diff --git a/docs/uk/msg_docs/index.md b/docs/uk/msg_docs/index.md index 6ffa67c21e..896e86e24e 100644 --- a/docs/uk/msg_docs/index.md +++ b/docs/uk/msg_docs/index.md @@ -18,15 +18,16 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m - [AirspeedValidated](AirspeedValidated.md) — Validated airspeed. - [ArmingCheckReply](ArmingCheckReply.md) — Arming check reply. - [ArmingCheckRequest](ArmingCheckRequest.md) — Arming check request. +- [AuxGlobalPosition](AuxGlobalPosition.md) — Auxiliary global position. - [BatteryStatus](BatteryStatus.md) — Battery status. - [ConfigOverrides](ConfigOverrides.md) — Configurable overrides by (external) modes or mode executors. - [Event](Event.md) — Events interface. -- [FixedWingLateralSetpoint](FixedWingLateralSetpoint.md) — Fixed Wing Lateral Setpoint message. Used by the fw_lateral_longitudinal_control module. At least one of course, airspeed_direction, or lateral_acceleration must be finite. -- [FixedWingLongitudinalSetpoint](FixedWingLongitudinalSetpoint.md) — Fixed Wing Longitudinal Setpoint message. Used by the fw_lateral_longitudinal_control module. If pitch_direct and throttle_direct are not both finite, then the controller relies on altitude/height_rate and equivalent_airspeed to control vertical motion. If both altitude and height_rate are NAN, the controller maintains the current altitude. -- [GotoSetpoint](GotoSetpoint.md) — Position and (optional) heading setpoints with corresponding speed constraints. Setpoints are intended as inputs to position and heading smoothers, respectively. Setpoints do not need to be kinematically consistent. Optional heading setpoints may be specified as controlled by the respective flag. Unset optional setpoints are not controlled. Unset optional constraints default to vehicle specifications. +- [FixedWingLateralSetpoint](FixedWingLateralSetpoint.md) — Fixed Wing Lateral Setpoint message. +- [FixedWingLongitudinalSetpoint](FixedWingLongitudinalSetpoint.md) — Fixed Wing Longitudinal Setpoint message. +- [GotoSetpoint](GotoSetpoint.md) — Position and (optional) heading setpoints with corresponding speed constraints. - [HomePosition](HomePosition.md) — GPS home position in WGS84 coordinates. -- [LateralControlConfiguration](LateralControlConfiguration.md) — Fixed Wing Lateral Control Configuration message. Used by the fw_lateral_longitudinal_control module to constrain FixedWingLateralSetpoint messages. -- [LongitudinalControlConfiguration](LongitudinalControlConfiguration.md) — Fixed Wing Longitudinal Control Configuration message. Used by the fw_lateral_longitudinal_control module and TECS to constrain FixedWingLongitudinalSetpoint messages. and configure the resultant setpoints. +- [LateralControlConfiguration](LateralControlConfiguration.md) — Fixed Wing Lateral Control Configuration message. +- [LongitudinalControlConfiguration](LongitudinalControlConfiguration.md) — Fixed Wing Longitudinal Control Configuration message. - [ManualControlSetpoint](ManualControlSetpoint.md) - [ModeCompleted](ModeCompleted.md) — Mode completion result, published by an active mode. Можливі значення nav_state визначені в повідомленні VehicleStatus. Note that this is not always published (e.g. when a user switches modes or on. failsafe activation). - [RaptorInput](RaptorInput.md) — Raptor Input. @@ -39,7 +40,7 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m - [VehicleAttitude](VehicleAttitude.md) — This is similar to the mavlink message ATTITUDE_QUATERNION, but for onboard use. The quaternion uses the Hamilton convention, and the order is q(w, x, y, z). - [VehicleAttitudeSetpoint](VehicleAttitudeSetpoint.md) - [VehicleCommand](VehicleCommand.md) — Vehicle Command uORB message. Використовується для управління місією / дією / тощо. Follows the MAVLink COMMAND_INT / COMMAND_LONG definition. -- [VehicleCommandAck](VehicleCommandAck.md) — Vehicle Command Ackonwledgement uORB message. Used for acknowledging the vehicle command being received. Follows the MAVLink COMMAND_ACK message definition. +- [VehicleCommandAck](VehicleCommandAck.md) — Vehicle Command Acknowledgement uORB message. - [VehicleControlMode](VehicleControlMode.md) - [VehicleGlobalPosition](VehicleGlobalPosition.md) — Fused global position in WGS84. This struct contains global position estimation. It is not the raw GPS. measurement (@see vehicle_gps_position). This topic is usually published by the position. estimator, which will take more sources of information into account than just GPS,. e.g. control inputs of the vehicle in a Kalman-filter implementation. - [VehicleLandDetected](VehicleLandDetected.md) @@ -84,6 +85,8 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m - [DistanceSensorModeChangeRequest](DistanceSensorModeChangeRequest.md) - [DronecanNodeStatus](DronecanNodeStatus.md) - [Ekf2Timestamps](Ekf2Timestamps.md) — this message contains the (relative) timestamps of the sensor inputs used by EKF2. Це може бути використано для відтворення. +- [EscEepromRead](EscEepromRead.md) +- [EscEepromWrite](EscEepromWrite.md) - [EscReport](EscReport.md) - [EscStatus](EscStatus.md) - [EstimatorAidSource1d](EstimatorAidSource1d.md) @@ -92,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) @@ -189,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) @@ -224,8 +229,8 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m - [SensorSelection](SensorSelection.md) — Sensor ID's for the voted sensors output on the sensor_combined topic. Will be updated on startup of the sensor module and when sensor selection changes. - [SensorTemp](SensorTemp.md) - [SensorUwb](SensorUwb.md) — UWB distance contains the distance information measured by an ultra-wideband positioning system,. such as Pozyx or NXP Rddrone. -- [SensorsStatus](SensorsStatus.md) — Sensor check metrics. Це значення буде нульовим для датчика, який є первинним або незаповненим. -- [SensorsStatusImu](SensorsStatusImu.md) — Sensor check metrics. Це значення буде нульовим для датчика, який є первинним або незаповненим. +- [SensorsStatus](SensorsStatus.md) — Sensor check metrics. This will be zero for a sensor that's primary or unpopulated. +- [SensorsStatusImu](SensorsStatusImu.md) — Sensor check metrics. This will be zero for a sensor that's primary or unpopulated. - [SystemPower](SystemPower.md) - [TakeoffStatus](TakeoffStatus.md) — Status of the takeoff state machine currently just available for multicopters. - [TaskStackInfo](TaskStackInfo.md) — stack information for a single running process. @@ -266,6 +271,12 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m - [HomePositionV0](HomePositionV0.md) — GPS home position in WGS84 coordinates. - [RegisterExtComponentReplyV0](RegisterExtComponentReplyV0.md) - [RegisterExtComponentRequestV0](RegisterExtComponentRequestV0.md) — Request to register an external component. +- [RegisterExtComponentRequestV1](RegisterExtComponentRequestV1.md) — Request to register an external component. - [VehicleAttitudeSetpointV0](VehicleAttitudeSetpointV0.md) +- [VehicleCommandAckV0](VehicleCommandAckV0.md) — Vehicle Command Ackonwledgement uORB message. Used for acknowledging the vehicle command being received. Follows the MAVLink COMMAND_ACK message definition. +- [VehicleGlobalPositionV0](VehicleGlobalPositionV0.md) — Fused global position in WGS84. This struct contains global position estimation. It is not the raw GPS. measurement (@see vehicle_gps_position). This topic is usually published by the position. estimator, which will take more sources of information into account than just GPS,. e.g. control inputs of the vehicle in a Kalman-filter implementation. - [VehicleLocalPositionV0](VehicleLocalPositionV0.md) — Fused local position in NED. The coordinate system origin is the vehicle position at the time when the EKF2-module was started. - [VehicleStatusV0](VehicleStatusV0.md) — Encodes the system state of the vehicle published by commander. +- [VehicleStatusV1](VehicleStatusV1.md) — Encodes the system state of the vehicle published by commander. +- [VehicleStatusV2](VehicleStatusV2.md) — Encodes the system state of the vehicle published by commander. +- [VehicleStatusV3](VehicleStatusV3.md) — Encodes the system state of the vehicle published by commander. diff --git a/docs/uk/neural_networks/mc_neural_network_control.md b/docs/uk/neural_networks/mc_neural_network_control.md index 53339f5ee3..a6f0d712df 100644 --- a/docs/uk/neural_networks/mc_neural_network_control.md +++ b/docs/uk/neural_networks/mc_neural_network_control.md @@ -17,7 +17,7 @@ Note that after training the network you will need to update and rebuild PX4. TLFM is a mature inference library intended for use on embedded devices. It has support for several architectures, so there is a high likelihood that you can build it for the board you want to use. -If not, there are other possible NN frameworks, such as [Eigen](https://eigen.tuxfamily.org/index.php?title=Main_Page) and [Executorch](https://pytorch.org/executorch-overview). +If not, there are other possible NN frameworks, such as [Eigen](https://eigen.tuxfamily.org/index.php?title=Main_Page) and [Executorch](https://docs.pytorch.org/executorch/stable/intro-overview.html). This document explains how you can include the module in your PX4 build, and provides a broad overview of how it works. The other documents in the section provide more information about the integration, allowing you to replace the NN with a version trained on different data, or even to replace the TLFM library altogether. diff --git a/docs/uk/neural_networks/nn_module_utilities.md b/docs/uk/neural_networks/nn_module_utilities.md index c41a520cf6..a6888fa50b 100644 --- a/docs/uk/neural_networks/nn_module_utilities.md +++ b/docs/uk/neural_networks/nn_module_utilities.md @@ -41,7 +41,7 @@ This only works for some flight controllers, so you might have to use an RC cont This specifies what you want to create, you can read more about this in the [Control Interface](../ros2/px4_ros2_control_interface.md). In this case we register an arming check and a mode. 2. Wait for a [RegisterExtComponentReply](../msg_docs/RegisterExtComponentReply.md). - This will give feedback on wether the mode registration was successful, and what the mode and arming check id is for the new mode. + This will give feedback on whether the mode registration was successful, and what the mode and arming check id is for the new mode. 3. [Optional] With the mode id, publish a [VehicleControlMode](../msg_docs/VehicleControlMode.md) message on the `config_control_setpoints` topic. Here you can configure what other modules run in parallel. The example controller replaces everything, so it turns off allocation. @@ -71,7 +71,7 @@ For these messages to be saved in your logs you need to include `debug` in the [ The module has two includes for measuring the inference times. The first one is a driver that works on the actual flight controller units, but a second one, `chrono`, is loaded for SITL testing. -Which timing library is included and used is based on wether PX4 is built with NUTTX or not. +Which timing library is included and used is based on whether PX4 is built with NUTTX or not. ## Changing the setpoint diff --git a/docs/uk/neural_networks/raptor.md b/docs/uk/neural_networks/raptor.md index 5568790267..86990b4776 100644 --- a/docs/uk/neural_networks/raptor.md +++ b/docs/uk/neural_networks/raptor.md @@ -1,6 +1,6 @@ # RAPTOR: A Neural Network Module for Adaptive Quadrotor Control - + :::warning This is an experimental module. diff --git a/docs/uk/payloads/generic_actuator_control.md b/docs/uk/payloads/generic_actuator_control.md index 4d1f9c6e66..c01437a02b 100644 --- a/docs/uk/payloads/generic_actuator_control.md +++ b/docs/uk/payloads/generic_actuator_control.md @@ -68,7 +68,7 @@ ## MAVSDK (приклад скрипту) -Наступний [MAVSDK](https://mavsdk.mavlink.io/main/en/index.html) [приклад коду](https://github.com/mavlink/MAVSDK/blob/main/examples/set_actuator/set_actuator.cpp) показує, як ініціювати випуск корисного навантаження за допомогою методу [`set_actuator()`](https://mavsdk.mavlink.io/main/en/cpp/api_reference/classmavsdk_1_1_action.html#classmavsdk_1_1_action_1ad30beac27f05c62dcf6a3d0928b86e4c) плагіну MAVSDK Action. +The following [MAVSDK](https://mavsdk.mavlink.io/main/en/index.html) [example code](https://github.com/mavlink/MAVSDK/blob/main/cpp/examples/set_actuator/set_actuator.cpp) shows how to trigger payload release using the MAVSDK Action plugin's [`set_actuator()`](https://mavsdk.mavlink.io/main/en/cpp/api_reference/classmavsdk_1_1_action.html#classmavsdk_1_1_action_1ad30beac27f05c62dcf6a3d0928b86e4c) method. Значення індексів в `set_actuator()` зіставляються з виводами корисного навантаження MAVLink, визначених для вашого планера. diff --git a/docs/uk/peripherals/adsb_flarm.md b/docs/uk/peripherals/adsb_flarm.md index 5a6c9d8c01..aa473407ba 100644 --- a/docs/uk/peripherals/adsb_flarm.md +++ b/docs/uk/peripherals/adsb_flarm.md @@ -1,6 +1,6 @@ # Приймачі ADS-B/FLARM/UTM: Уникнення повітряного трафіку -PX4 supports simple air traffic avoidance in [missions](../flying/missions.md) using [ADS-B](https://en.wikipedia.org/wiki/Automatic_dependent_surveillance_%E2%80%93_broadcast), [FLARM](https://en.wikipedia.org/wiki/FLARM), or [UTM](https://www.faa.gov/uas/research_development/traffic_management) transponders that use the standard MAVLink interfaces. +PX4 supports simple air traffic avoidance in [missions](../flying/missions.md) using [ADS-B](https://en.wikipedia.org/wiki/Automatic_dependent_surveillance_%E2%80%93_broadcast), [FLARM](https://en.wikipedia.org/wiki/FLARM), or [UTM](https://www.faa.gov/uas/advanced_operations/traffic_management) transponders that use the standard MAVLink interfaces. If a potential collision is detected, PX4 can _warn_, immediately [land](../flight_modes_mc/land.md), or [return](../flight_modes_mc/return.md) (depending on the value of [NAV_TRAFF_AVOID](#NAV_TRAFF_AVOID)). @@ -53,7 +53,7 @@ The TX and RX on the flight controller must be connected to the RX and TX on the ### Конфігурація порту -The recievers are configured in the same way as any other [MAVLink Peripheral](../peripherals/mavlink_peripherals.md). +The receivers are configured in the same way as any other [MAVLink Peripheral](../peripherals/mavlink_peripherals.md). The only _specific_ setup is that the port baud rate must be set to 57600 and the a low-bandwidth profile (`MAV_X_MODE`). Assuming you have connected the device to the TELEM2 port, [set the parameters](../advanced_config/parameters.md) as shown: @@ -74,10 +74,27 @@ You will now find a new parameter called [SER_TEL2_BAUD](../advanced_config/para | Параметр | Опис | | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [NAV_TRAFF_AVOID](../advanced_config/parameter_reference.md#NAV_TRAFF_AVOID) | Увімкніть режим уникнення трафіку, вказавши відповідь уникнення. 0: Вимкнути, 1: Лише попередження, 2: Режим повернення, 3: Режим посадки. | -| [NAV_TRAFF_A_HOR](../advanced_config/parameter_reference.md#NAV_TRAFF_A_HOR) | Горизонтальний радіус циліндра навколо транспортного засобу, який визначає його повітряний простір (тобто повітряний простір на земельній площині). | +| [NAV_TRAFF_A_HOR](../advanced_config/parameter_reference.md#NAV_TRAFF_A_HOR) | Horizontal radius of cylinder around the vehicle that defines its airspace (i.e. the airspace in the ground plane). | | [NAV_TRAFF_A_VER](../advanced_config/parameter_reference.md#NAV_TRAFF_A_VER) | Vertical height above and below vehicle of the cylinder that defines its airspace (also see [NAV_TRAFF_A_HOR](#NAV_TRAFF_A_HOR)). | | [NAV_TRAFF_COLL_T](../advanced_config/parameter_reference.md#NAV_TRAFF_COLL_T) | Поріг часу зіткнення. Уникнення буде викликати якщо передбачуваний час, поки зіткнення не знизиться нижче цієї вартості (орієнтовний час ґрунтується на відносній швидкості руху та UAV). | +### Arming Check + +PX4 can be configured to check for the presence of a traffic avoidance system (ADSB or FLARM transponder) before arming. +This ensures that a traffic avoidance system is connected and functioning before flight. + +The check is configured using the [COM_ARM_TRAFF](../advanced_config/parameter_reference.md#COM_ARM_TRAFF) parameter: + +| Значення | Опис | +| -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 0 | Disabled (default). No check is performed. | +| 1 | Warning only. A warning is issued if no traffic avoidance system is detected, but arming is allowed. | +| 2 | Enforce for all modes. Arming is denied if no traffic avoidance system is detected, regardless of flight mode. | +| 3 | Enforce for mission modes only. Arming is denied if no traffic avoidance system is detected and a mission mode is planned. | + +When a traffic avoidance system is detected, the system tracks its presence with a 3-second timeout. +If the system is lost or regained, corresponding events are logged ("Traffic avoidance system lost" / "Traffic avoidance system regained"). + ## Імплементація ### ADSB/FLARM @@ -131,7 +148,7 @@ By default `run_fake_traffic()` publishes a number of traffic messages (it calls :::details Information about the test methods -The relevent methods are defined in [AdsbConflict.cpp](https://github.com/PX4/PX4-Autopilot/blob/main/src/lib/adsb/AdsbConflict.cpp#L342C1-L342C1). +The relevant methods are defined in [AdsbConflict.cpp](https://github.com/PX4/PX4-Autopilot/blob/main/src/lib/adsb/AdsbConflict.cpp#L342C1-L342C1). #### `run_fake_traffic()` method diff --git a/docs/uk/peripherals/dshot.md b/docs/uk/peripherals/dshot.md index 711bfca89d..7977d38ace 100644 --- a/docs/uk/peripherals/dshot.md +++ b/docs/uk/peripherals/dshot.md @@ -13,7 +13,7 @@ DShot is an alternative ESC protocol that has several advantages over [PWM](../p ## Supported ESC -[ESCs & Motors > Supported ESCs](../peripherals/esc_motors#supported-esc) has a list of supported ESC (check "Protocols" column for DShot ESC). +[ESCs & Motors > Supported ESCs](../peripherals/esc_motors.md#supported-esc) has a list of supported ESC (check "Protocols" column for DShot ESC). ## Wiring/Connections {#wiring} @@ -47,74 +47,12 @@ DShot comes with different speed options: _DShot150_, _DShot300_, and _DShot600_ РЕГБ повинні ініціалізуватися, а мотори повинні обертатися в правильних напрямках. - If the motors do not spin in the correct direction (for the [selected airframe](../airframes/airframe_reference.md)) you can reverse them in the UI using the **Set Spin Direction** option (this option appears after you select DShot and assign motors). - You can also reverse motors by sending an [ESC Command](#commands). ## ESC Commands {#commands} Commands can be sent to the ESC via the [MAVLink shell](../debug/mavlink_shell.md). See [here](../modules/modules_driver.md#dshot) for a full reference of the supported commands. -Найважливіші з них: - -- Make a motor connected to to FMU output pin 1 beep (helps with identifying motors) - - ```sh - dshot beep1 -m 1 - ``` - -- Retrieve ESC information (requires telemetry, see below): - - ```sh - nsh> dshot esc_info -m 2 - INFO [dshot] ESC Type: #TEKKO32_4in1# - INFO [dshot] MCU Serial Number: xxxxxx-xxxxxx-xxxxxx-xxxxxx - INFO [dshot] Firmware version: 32.60 - INFO [dshot] Rotation Direction: normal - INFO [dshot] 3D Mode: off - INFO [dshot] Low voltage Limit: off - INFO [dshot] Current Limit: off - INFO [dshot] LED 0: unsupported - INFO [dshot] LED 1: unsupported - INFO [dshot] LED 2: unsupported - INFO [dshot] LED 3: unsupported - ``` - -- Permanently set the spin direction of a motor connected to FMU output pin 1 (while motors are _not_ spinning): - - - Set spin direction to `reversed`: - - ```sh - dshot reverse -m 1 - dshot save -m 1 - ``` - - Retrieving ESC information will then show: - - ```sh - Rotation Direction: reversed - ``` - - - Set spin direction to `normal`: - - ```sh - dshot normal -m 1 - dshot save -m 1 - ``` - - Retrieving ESC information will then show: - - ```sh - Rotation Direction: normal - ``` - - :::info - - - The commands will have no effect if the motors are spinning, or if the ESC is already set to the corresponding direction. - - The ESC will revert to its last saved direction (normal or reversed) on reboot if `save` is not called after changing the direction. - - -::: - ## ESC Telemetry Some ESCs are capable of sending telemetry back to the flight controller through a UART RX port. @@ -133,61 +71,76 @@ The provided telemetry includes: 1. Об'єднайте всі дроти телеметрії з усіх ESC разом, а потім підключіть їх до одного з контактів RX на не використаному порту послідовного зв'язку контролера польоту. 2. Enable telemetry on that serial port using [DSHOT_TEL_CFG](../advanced_config/parameter_reference.md#DSHOT_TEL_CFG). -Після перезавантаження ви можете перевірити, чи працює телеметрія (переконайтеся, що акумулятор підключений), використовуючи: - -```sh -dshot esc_info -m 1 -``` - :::tip -You may have to configure [MOT_POLE_COUNT](../advanced_config/parameter_reference.md#MOT_POLE_COUNT) to get the correct RPM values. +You may have to configure the per-motor pole count parameters ([`DSHOT_MOT_POL1`–`DSHOT_MOT_POL12`](../advanced_config/parameter_reference.md#DSHOT_MOT_POL1)) to get correct RPM values. +The default value for these is 14 poles, which is typical for 5-inch prop motors. ::: :::tip -Not all DSHOT-capable ESCs support `[esc_info]`(e.g. APD 80F3x), even when telemetry is supported and enabled. -Отримана помилка: - -```sh -ERROR [dshot] No data received. If telemetry is setup correctly, try again. -``` - -Перевірте документацію виробника для підтвердження/подробиць. +[Extended DShot Telemetry (EDT)](#extended-dshot-telemetry-edt) can provide temperature, voltage, and current through the BDShot signal — no serial telemetry wire needed. ::: ## Bidirectional DShot (Telemetry) -Bidirectional DShot is a protocol that can provide telemetry including: high rate ESC RPM data, voltage, current, and temperature with a single wire. +Bidirectional DShot (BDShot) enables the ESC to send eRPM telemetry back to the flight controller on the same signal wire used for throttle commands — no additional telemetry wire is needed for RPM data. +High-rate eRPM data significantly improves the performance of [Dynamic Notch Filters](../config_mc/filter_tuning.md#dynamic-notch-filters) and enables more precise vehicle tuning. -The PX4 implementation currently enables only ESC RPM (eRPM) data collection from each ESC at high frequencies. -This telemetry significantly improves the performance of [Dynamic Notch Filters](../config_mc/filter_tuning.md#dynamic-notch-filters) and enables more precise vehicle tuning. +With [Extended DShot Telemetry (EDT)](#extended-dshot-telemetry-edt) enabled, BDShot can also provide temperature, voltage, and current data. + +### Підтримка обладнання + +BDShot requires a flight controller with DMA-capable timers. +Any FMU output on a supported timer can be used for BDShot — multiple timers are supported through sequential burst/capture. + +Supported processors: + +- **STM32H7**: All FMU outputs on DMA-capable timers +- **i.MXRT** (V6X-RT & Tropic): All FMU outputs :::info -The [ESC Telemetry](#esc-telemetry) described above is currently still necessary if you want voltage, current, or temperature information. -It's setup and use is independent of bidirectional DShot. -::: - -### Налаштування програмного забезпечення - The ESC must be connected to FMU outputs only. -These will be labeled `MAIN` on flight controllers that only have one PWM bus, and `AUX` on controllers that have both `MAIN` and `AUX` ports (i.e. FCs that have an IO board). - -:::warning -**Limited hardware support** -This feature is only supported on flight controllers with the following processors: - -- STM32H7: First four FMU outputs - - Must be connected to the first 4 FMU outputs, and these outputs must also be mapped to the same timer. - - [KakuteH7](../flight_controller/kakuteh7v2.md) is not supported because the outputs are not mapped to the same timer. -- [i.MXRT](../flight_controller/nxp_mr_vmu_rt1176.md) (V6X-RT & Tropic): 8 FMU outputs. - -No other boards are supported. +These are labeled `MAIN` on controllers with a single PWM bus, and `AUX` on controllers with both `MAIN` and `AUX` ports (i.e. those with an IO board). ::: -### Configuration {#bidirectional-dshot-configuration} +### PX4 Configuration {#bidirectional-dshot-configuration} -To enable bidirectional DShot, set the [DSHOT_BIDIR_EN](../advanced_config/parameter_reference.md#DSHOT_BIDIR_EN) parameter. +BDShot is enabled **per-timer** in the [Actuator Configuration](../config/actuators.md) UI. +Select **BDShot150**, **BDShot300**, or **BDShot600** as the output protocol instead of the corresponding DShot speed. +There is no separate enable parameter — choosing a BDShot protocol activates bidirectional telemetry on that timer's outputs. -The system calculates actual motor RPM from the received eRPM data using the [MOT_POLE_COUNT](../advanced_config/parameter_reference.md#MOT_POLE_COUNT) parameter. -This parameter must be set correctly for accurate RPM reporting. +The system calculates actual motor RPM from eRPM data using per-motor pole count parameters: `DSHOT_MOT_POL1` through `DSHOT_MOT_POL12` (one per motor output). +The default is 14 poles, which is typical for 5-inch prop motors. +If you are using AM32 ESCs, the motor pole count must also be set in the AM32 firmware configuration (e.g. via the AM32 configurator tool) to match. + +### Extended DShot Telemetry (EDT) + +EDT extends BDShot by interleaving temperature, voltage, and current data into the eRPM telemetry frames. +This allows ESC health monitoring through the same signal wire, without requiring a separate serial telemetry connection. + +To enable EDT: + +1. Configure BDShot on the desired outputs (see above). +2. Set `DSHOT_BIDIR_EDT` to `1` and reboot. + +The ESC firmware must support EDT (e.g. [AM32](https://github.com/am32-firmware/AM32)). + +When both serial telemetry and BDShot/EDT are enabled, the driver merges data from both sources. + +## AM32 ESC Settings (EEPROM) + +PX4 can read and write AM32 ESC firmware settings (EEPROM) via a ground station, enabling remote ESC configuration without connecting directly to each ESC. + +### Вимоги + +- ESCs running [AM32 firmware](https://github.com/am32-firmware/AM32) with serial telemetry connected ([DSHOT_TEL_CFG](../advanced_config/parameter_reference.md#DSHOT_TEL_CFG)) +- `DSHOT_ESC_TYPE` set to `1` (AM32) +- Ground station with ESC EEPROM support (QGroundControl feature in development) +- MAVLink development dialect enabled on the flight controller + +### How It Works + +PX4 automatically reads the full EEPROM from each ESC on boot. +The ground station can then display individual settings and allow the user to modify them. +Changes are written back to the ESC one byte at a time using the DShot programming protocol. diff --git a/docs/uk/peripherals/esc_motors.md b/docs/uk/peripherals/esc_motors.md index 6fb60c6709..29b2063a8b 100644 --- a/docs/uk/peripherals/esc_motors.md +++ b/docs/uk/peripherals/esc_motors.md @@ -11,7 +11,7 @@ The following list is non-exhaustive. | ESC Device | Протоколи | Firmwares | Примітки | | ------------------------------ | ------------------------------------ | ------------------------ | ----------------------------------------------------- | -| [ARK 4IN1 ESC] | [Dshot], [PWM] | [AM32] | Has versions with/without connnectors | +| [ARK 4IN1 ESC] | [Dshot], [PWM] | [AM32] | Has versions with/without connectors | | [Holybro Kotleta 20] | [DroneCAN], [PWM] | [PX4 Sapog ESC Firmware] | | | [Vertiq Motor & ESC modules] | [Dshot], [OneShot], Multishot, [PWM] | Vertiq firmware | Larger modules support DroneCAN, ESC and Motor in one | | [RaccoonLab CAN PWM ESC nodes] | [DroneCAN], Cyphal | | Cyphal and DroneCAN notes for PWM ESC | diff --git a/docs/uk/peripherals/frsky_telemetry.md b/docs/uk/peripherals/frsky_telemetry.md index ddd8432ec4..1b68706062 100644 --- a/docs/uk/peripherals/frsky_telemetry.md +++ b/docs/uk/peripherals/frsky_telemetry.md @@ -166,7 +166,7 @@ D-Port receivers transmit the following messages (from [here](https://github.com ## FrSky телеметрія Receivers -Pixhawk/PX4 підтримує D (старий) та S (новий) телеметрію FrSky. Таблиця нижче всі FrSky приймачі, які підтримують телеметрію через D/S.PORT (теоретично всі вони повинні працювати). +Pixhawk/PX4 підтримує D (старий) та S (новий) телеметрію FrSky. The table below lists all FrSky receivers that support telemetry via a D/S.PORT (in theory all of these should work). :::tip Note that the X series receivers listed below are recommended (e.g. XSR, X8R). Серії R та G не були протестовані / перевірені тестовою командою, але повинні працювати. @@ -213,8 +213,8 @@ You will need connectors that are appropriate for your autopilot (e.g. _JST-GH c Pixracer включає електроніку для перетворення сигналів S.PORT і UART, але для інших плат вам знадобиться адаптер UART на S.PORT. Ці можна отримати з: -- [FrSky FUL-1](https://www.frsky-rc.com/product/ful-1/): [unmannedtech.co.uk](https://www.unmannedtechshop.co.uk/frsky-transmitter-receiver-upgrade-adapter-ful-1/) -- SPC: [getfpv.com](https://www.getfpv.com/frsky-smart-port-converter-cable.html), [unmannedtechshop.co.uk](https://www.unmannedtechshop.co.uk/frsky-smart-port-converter-spc/) +- [FrSky FUL-1](https://www.frsky-rc.com/product/ful-1/): [unmannedtech.co.uk](https://www.unmannedtechshop.co.uk/products/frsky-transmitter-receiver-upgrade-adapter-ful-1) +- SPC: [getfpv.com](https://www.getfpv.com/frsky-smart-port-converter-cable.html), [unmannedtechshop.co.uk](https://www.unmannedtechshop.co.uk/products/frsky-smart-port-converter-spc) Додаткова інформація про з'єднання для різних плат подається нижче. diff --git a/docs/uk/peripherals/index.md b/docs/uk/peripherals/index.md index 64c35db180..bf40e85684 100644 --- a/docs/uk/peripherals/index.md +++ b/docs/uk/peripherals/index.md @@ -2,8 +2,9 @@ This section contains topics about peripheral hardware that can be connected to a flight controller (not including [cameras and other payloads](../payloads/index.md)). -The peripherals are not _required_ for flight, but may support it by providing improved safety, or allowing the vehicle to meet regulartory requirements: +The peripherals are not _required_ for flight, but may support it by providing improved safety, or allowing the vehicle to meet regulatory requirements: - [ADSB/FLARM/UTM (Traffic Avoidance)](../peripherals/adsb_flarm.md) +- [On-Screen Display (OSD)](../peripherals/osd.md) - [Parachute](../peripherals/parachute.md) - [Remote ID](../peripherals/remote_id.md) diff --git a/docs/uk/peripherals/mavlink_peripherals.md b/docs/uk/peripherals/mavlink_peripherals.md index 51e9011165..a6a8a69de1 100644 --- a/docs/uk/peripherals/mavlink_peripherals.md +++ b/docs/uk/peripherals/mavlink_peripherals.md @@ -1,6 +1,6 @@ # MAVLink Peripherals (GCS/OSD/Gimbal/Camera/Companion) -Ground Control Stations (GCS), On-Screen Displays (OSD), MAVLink Cameras & Gimbals, Remote IDs, Companion Computers, ADS-B receivers, and other MAVLink peripherals interact with PX4 using separate MAVLink streams, sent via different serial ports. +Ground Control Stations (GCS), [MAVLink On-Screen Displays (OSD)](../peripherals/osd.md#mavlink-osd), MAVLink [Cameras](../camera/mavlink_v2_camera.md) and [Gimbals](../advanced/gimbal_control.md), [Remote IDs](../peripherals/remote_id.md), Companion Computers, [ADS-B receivers](../peripherals/adsb_flarm.md), and other MAVLink peripherals interact with PX4 using separate MAVLink streams, sent via different serial ports. In order to configure that a particular serial port is used for MAVLink traffic with a particular peripheral, we use [Serial Port Configuration](../peripherals/serial_configuration.md), assigning one of the abstract "MAVLink instance" configuration parameters to the desired port. Потім ми встановлюємо інші властивості каналу MAVLink, використовуючи параметри, пов'язані з обраним екземпляром MAVLink, щоб вони відповідали вимогам нашого конкретного периферійного пристрою. @@ -26,38 +26,12 @@ MAVLink instances are an abstract concept for a particular MAVLink configuration - [MAV_X_CONFIG](../advanced_config/parameter_reference.md#MAV_0_CONFIG) - Set the serial port (UART) for this instance "X", where X is 0, 1, 2. It can be any unused port, e.g.: `TELEM2`, `TELEM3`, `GPS2` etc. For more information see [Serial Port Configuration](../peripherals/serial_configuration.md). - -- [MAV_X_MODE](../advanced_config/parameter_reference.md#MAV_0_MODE) - Specify the telemetry mode/target (the set of messages to stream for the current instance and their rate). - Значення за замовчуванням: - - - _Normal_: Standard set of messages for a GCS. - - _Custom_ or _Magic_: Nothing (in the default PX4 implementation). - Режими можуть бути використані для тестування при розробці нового режиму. - - _Onboard_: Standard set of messages for a companion computer. - - _OSD_: Standard set of messages for an OSD system. - - _Config_: Standard set of messages and rate configuration for a fast link (e.g. USB). - - _Minimal_: Minimal set of messages for use with a GCS connected on a high latency link. - - _External Vision_: Messages for offboard vision systems. - - _Gimbal_: Messages for a gimbal. Note this also enables [message forwarding](#MAV_X_FORWARD) - - _Onboard Low Bandwidth_: Standard set of messages for a companion computer connected on a lower speed link. - - _uAvionix_: Messages for a uAvionix ADS-B beacon. - - ::: info - If you need to find the specific set of message for each mode search for `MAVLINK_MODE_` in [/src/modules/mavlink/mavlink_main.cpp](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/mavlink_main.cpp). - -::: - - :::tip - The mode defines the _default_ messages and rates. - A connected MAVLink system can still request the streams/rates that it wants using [MAV_CMD_SET_MESSAGE_INTERVAL](https://mavlink.io/en/messages/common.html#MAV_CMD_SET_MESSAGE_INTERVAL). - -::: - +- [MAV_X_MODE](../advanced_config/parameter_reference.md#MAV_0_MODE) - Specify the [MAVLink profile](../mavlink/mavlink_profiles.md) for the instance, such as _Normal_ or _OSD_. + Profiles define a particular set of streamed messages and their rates — you should choose a profile that is appropriate for your channel and the peripheral. - [MAV_X_RATE](../advanced_config/parameter_reference.md#MAV_0_MODE) - Set the maximum _data rate_ for this instance (bytes/second). - Це комбінована ставка для всіх потоків окремого повідомлення (ставки для окремих повідомлень зменшуються, якщо загальна ставка перевищує це значення). - За замовчуванням налаштування, як правило, буде прийнятним, але може бути зменшено, якщо телеметричний зв'язок стає насиченим і занадто багато повідомлень втрачається. - Значення 0 встановлює швидкість передачі даних вдвічі менше теоретичного значення. - - [MAV_X_FORWARD](../advanced_config/parameter_reference.md#MAV_0_FORWARD) - Enable forwarding of MAVLink packets received by the current instance onto other interfaces. Це може бути використано, наприклад, для передачі повідомлень між GCS та супутнім комп'ютером, щоб GCS міг спілкуватися з камерою, підключеною до супутнього комп'ютера, яка підтримує MAVLink. @@ -121,6 +95,7 @@ Links to setup instructions for specific MAVLink components: ## Дивіться також +- [MAVLink Profiles](../mavlink/mavlink_profiles.md) - [Serial Port Configuration](../peripherals/serial_configuration.md) - [PX4 Ethernet Setup > PX4 MAVLink Serial Port Configuration](../advanced_config/ethernet_setup.md#px4-mavlink-serial-port-configuration) - [Serial Port Mapping](../hardware/serial_port_mapping.md) diff --git a/docs/uk/peripherals/osd.md b/docs/uk/peripherals/osd.md new file mode 100644 index 0000000000..79afd41877 --- /dev/null +++ b/docs/uk/peripherals/osd.md @@ -0,0 +1,103 @@ +# On-Screen Display (OSD) + +An **On-Screen Display (OSD)** overlays flight telemetry — battery, altitude, GPS, RSSI, attitude, etc. — onto a pilot's video feed. +OSDs are commonly used in FPV and long-range flying so the pilot can see live flight data without looking away from the video. + +PX4 supports three distinct OSD mechanisms, each targeting a different class of video system: + +| Mechanism | Use case | Transport | Runs on FC? | +| --------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------- | -------------------------------------------------------------- | +| [MSP OSD](#msp-osd) | Digital FPV air units and video goggles that speak Betaflight MSP (e.g. DJI O3/O4, Walksnail, HDZero, Caddx Vista) | Serial, MSPv1 | Yes — [`msp_osd`](../modules/modules_driver.md#msp-osd) driver | +| [ATXXXX Analog OSD](#atxxxx-analog-osd) | Legacy analog video with an on-board MAX7456/ATXXXX overlay chip (e.g. OmnibusF4SD) | SPI to on-board chip | Yes — [`atxxxx`](../modules/modules_driver.md#atxxxx) driver | +| [MAVLink OSD](#mavlink-osd) | MAVLink-aware ground stations and displays that render their own OSD from telemetry (e.g. Yaapu on EdgeTX/OpenTX, Skydroid, mLRS HUDs) | Serial, MAVLink | No — streams MAVLink; the display renders the OSD | + +Which one you use is determined by your video hardware, not by PX4 preference. +If you're unsure, start with your video system's documentation and match the OSD mechanism it expects. + +## MSP OSD + +**MSP (MultiWii Serial Protocol) OSD** is the mechanism used by digital FPV systems (DJI, Walksnail, HDZero) and by many digital goggles/air units to render telemetry over the pilot's video feed. +PX4 implements the subset of MSP used for OSD telemetry, matching what Betaflight and INAV send. + +The [`msp_osd`](../modules/modules_driver.md#msp-osd) driver converts uORB topics (battery, GPS, attitude, etc.) to MSP packets and sends them out a serial port at 115200 baud. + +### Supported displays + +PX4 currently sends a subset of MSP messages. +Reliably-working display items include: + +- Craft name and flight mode / arming state +- Battery voltage, current draw, mAh consumed, average cell voltage +- GPS latitude, longitude, satellite count, ground speed +- Home distance and direction +- Altitude (from GNSS / baro) +- RSSI +- Crosshairs toggle + +Some items in [`OSD_SYMBOLS`](../advanced_config/parameter_reference.md#OSD_SYMBOLS) are reserved but not yet implemented — see the parameter's `(unused)` bit labels. +For feature-completeness work, see the tracking issues on GitHub. + +### Налаштування обладнання + +1. Connect the digital air unit's MSP / telemetry input to a free UART on the flight controller (TX → RX, RX → TX, GND → GND). +2. Power the air unit from its own BEC or a VTX power pad — most air units expect 5 V or battery voltage, not autopilot 5 V. +3. Note which PX4 serial device the UART maps to on your board (e.g. `TELEM2` → `/dev/ttyS2`). + See [Serial Port Mapping](../hardware/serial_port_mapping.md). + +### Firmware requirements + +The `msp_osd` driver is included in the default build for most modern Pixhawk and FPV-oriented boards (e.g. `px4_fmu-v5x`, `px4_fmu-v6x`, `ark_fpv`, `cuav_7-nano`, `micoair_h743*`). +If your board does not include it by default, enable it via [board config](../hardware/porting_guide_config.md#px4-menuconfig-setup): + +```sh +make _default boardconfig +# drivers → OSD → msp_osd +``` + +Then rebuild and flash. + +### PX4 configuration + +1. Assign the selected serial port to MSP OSD with [`MSP_OSD_CONFIG`](../advanced_config/parameter_reference.md#MSP_OSD_CONFIG). +2. Set the matching `SER__BAUD` to `115200`. +3. Reboot. +4. Tune the display via the [`OSD_*` parameters](../advanced_config/parameter_reference.md#osd): + - [`OSD_SYMBOLS`](../advanced_config/parameter_reference.md#OSD_SYMBOLS) — bitmask selecting which items appear. + - [`OSD_CH_HEIGHT`](../advanced_config/parameter_reference.md#OSD_CH_HEIGHT) — vertical position of the crosshairs. + - [`OSD_LOG_LEVEL`](../advanced_config/parameter_reference.md#OSD_LOG_LEVEL) — minimum severity for on-screen warnings. + - [`OSD_SCROLL_RATE`](../advanced_config/parameter_reference.md#OSD_SCROLL_RATE) / [`OSD_DWELL_TIME`](../advanced_config/parameter_reference.md#OSD_DWELL_TIME) — scrolling of long messages. + - [`OSD_RC_STICK`](../advanced_config/parameter_reference.md#OSD_RC_STICK) — forward RC sticks to the VTX when disarmed, so you can navigate the VTX menu. + +### Worked examples + +- [Reptile Dragon 2 > msp_osd Module](../frames_plane/reptile_dragon_2.md#msp-osd-module) — end-to-end wiring and configuration for a Caddx Vista build. +- [Turbo Timber Evolution](../frames_plane/turbo_timber_evolution.md) — references the same setup pattern. + +## MAVLink OSD + +Some OSDs render their own overlay directly from the MAVLink telemetry stream — the flight controller simply streams MAVLink at a rate the display can parse. +PX4 exposes this via a dedicated MAVLink stream profile. + +To use a MAVLink OSD: + +1. Choose an unused MAVLink instance ([`MAV_X_CONFIG`](../peripherals/mavlink_peripherals.md#default_ports)) and assign it to the serial port connected to the display. +2. Configure the mode of the selected MAVLink instance with [`MAV_X_MODE`](./mavlink_peripherals.md#MAV_X_MODE) by setting it to **`OSD`**. + The `OSD` mode uses a built-in rate table tuned for low-bandwidth OSD consumption. +3. Set the matching `SER__BAUD` to the baud rate the display expects. + +The stream content is fixed (defined in `src/modules/mavlink/mavlink_main.cpp`) and cannot be customised from parameters. +See [MAVLink Peripherals (GCS/OSD/Gimbal/Camera/Companion)](./mavlink_peripherals.md) for the full MAVLink-side configuration. + +## ATXXXX Analog OSD + +The [`atxxxx`](../modules/modules_driver.md#atxxxx) driver targets boards with an on-board MAX7456 / ATXXXX chip that overlays characters onto an analog video stream (PAL or NTSC). +This was common on older F4-class FCs such as OmnibusF4SD and is largely superseded by digital systems. + +No external wiring is required on boards that include the chip; to enable it, set [`OSD_ATXXXX_CFG`](../advanced_config/parameter_reference.md#OSD_ATXXXX_CFG) to `1` (NTSC) or `2` (PAL) and reboot. + +## Дивись також + +- [Parameter Reference > OSD](../advanced_config/parameter_reference.md#osd) — all OSD parameters. +- [MAVLink Peripherals (GCS/OSD/Gimbal/Camera/Companion)](./mavlink_peripherals.md) — MAVLink serial configuration. +- [Serial Port Configuration](./serial_configuration.md) — assigning modules to UARTs. +- [`msp_osd` module reference](../modules/modules_driver.md#msp-osd) — CLI usage and source. diff --git a/docs/uk/peripherals/parachute.md b/docs/uk/peripherals/parachute.md index d050529c5d..5980d90bda 100644 --- a/docs/uk/peripherals/parachute.md +++ b/docs/uk/peripherals/parachute.md @@ -44,6 +44,7 @@ For more information see [Flight Termination Configuration](../advanced_config/f - Set [Safety](../config/safety.md) action to _Flight termination_ for checks where you want the parachute to trigger. - Set [Failure Detector](../config/safety.md#failure-detector) pitch angles, roll angles and time triggers for crash/flip detection, and disable the failure/IMU timeout circuit breaker (i.e. set [CBRK_FLIGHTTERM=0](../advanced_config/parameter_reference.md#CBRK_FLIGHTTERM)). +- Set [FD_ALT_LOSS](../advanced_config/parameter_reference.md#FD_ALT_LOSS) to enable flight termination if a rotary-wing vehicle loses too much altitude below its setpoint (see [Altitude Loss Trigger](../config/safety.md#altitude-loss-trigger)). :::info You can also configure an [external Automatic Trigger System (ATS)](../config/safety.md#external-automatic-trigger-system-ats) for failure detection. diff --git a/docs/uk/peripherals/pwm_escs_and_servo.md b/docs/uk/peripherals/pwm_escs_and_servo.md index ce55fbb288..40215a80d3 100644 --- a/docs/uk/peripherals/pwm_escs_and_servo.md +++ b/docs/uk/peripherals/pwm_escs_and_servo.md @@ -66,7 +66,7 @@ On an opto-isolated ESC **without** BEC, the +5V line might need to be connected PWM motors and servos are configured using the [Actuator Configuration](../config/actuators.md) screen in QGroundControl. -After assigning outputs and basic calibration, you may then wish to peform an [ESC Calibration](../advanced_config/esc_calibration.md). +After assigning outputs and basic calibration, you may then wish to perform an [ESC Calibration](../advanced_config/esc_calibration.md). Additional PX4 PWM configuration parameters can be found here: [PWM Outputs](../advanced_config/parameter_reference.md#pwm-outputs). diff --git a/docs/uk/peripherals/remote_id.md b/docs/uk/peripherals/remote_id.md index 162dd32d26..af4be60315 100644 --- a/docs/uk/peripherals/remote_id.md +++ b/docs/uk/peripherals/remote_id.md @@ -144,20 +144,19 @@ The [CAN Remote ID Not Working](../peripherals/remote_id.md#can-remote-id-not-wo Немає потреби явно увімкнювати Віддалений ідентифікатор (підтримувані повідомлення про Віддалений ідентифікатор транслюються за замовчуванням або повинні бути запитані в поточній реалізації, навіть якщо жоден віддалений ідентифікатор не підключений). -### Запобігання Зброєнню на підставі Віддаленого Ідентифікатора +### Remote ID Failsafe and Arming Check -To only allow arming when a Remote ID is ready, [set](../advanced_config/parameters.md#conditional-parameters) the parameter [COM_ARM_ODID](#COM_ARM_ODID) to `2` (it is disabled by default). + -| Параметр | Опис | -| ----------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [COM_ARM_ODID](../advanced_config/parameter_reference.md#COM_ARM_ODID) | Увімкніть систему виявлення та перевірки стану ідентифікатора дрона. `0`: Disable (default), `1`: Warn if Remote ID not detected but still allow arming, `2`: Only allow arming if Remote ID is present. | +The [COM_ARM_ODID](../advanced_config/parameter_reference.md#COM_ARM_ODID) parameter configures both the arming check and the in-flight failsafe action when the Remote ID system is missing or unhealthy. +For more information see [Remote ID Failsafe](http://localhost:5173/px4_user_guide/en/config/safety#remote-id-failsafe) in _Safety Configuration_. ## Тестування мовлення модуля Інтегратори повинні перевірити, що модуль віддаленого ідентифікатора транслює правильну інформацію, таку як місцезнаходження БПЛА, ідентифікатор, ідентифікатор оператора та інше. Це найлегше зробити за допомогою стороннього додатку на вашому мобільному пристрої: -- [Drone Scanner](https://github.com/dronetag/drone-scanner) (Google Play or Apple App store) +- [Drone Scanner](https://help.dronetag.com/drone-scanner/) (Google Play or Apple App store) - [OpenDroneID OSM](https://play.google.com/store/apps/details?id=org.opendroneid.android_osm&hl=en&gl=US) (Google Play) ## Імплементація @@ -174,7 +173,7 @@ The following message can be streamed on request (using [MAV_CMD_SET_MESSAGE_INT - [OPEN_DRONE_ID_BASIC_ID](https://mavlink.io/en/messages/common.html#OPEN_DRONE_ID_BASIC_ID) - UAV identity information (essentially a serial number) - PX4 v1.14 specifies a serial number ([MAV_ODID_ID_TYPE_SERIAL_NUMBER](https://mavlink.io/en/messages/common.html#MAV_ODID_ID_TYPE_SERIAL_NUMBER)) but does not use the required format (ANSI/CTA-2063 format). -PX4 prevents arming based on Remote ID health if parameter [COM_ARM_ODID](../advanced_config/parameter_reference.md#COM_ARM_ODID) is set to `2`. +PX4 can prevent arming and/or trigger an in-flight failsafe based on Remote ID health via the [COM_ARM_ODID](../advanced_config/parameter_reference.md#COM_ARM_ODID) parameter. The UAV will then require `HEARTBEAT` messages from the Remote ID as a precondition for arming the UAV. You can also set the parameter to `1` to warn but still allow arming when Remote ID `HEARTBEAT` messages are not detected. diff --git a/docs/uk/peripherals/serial_configuration.md b/docs/uk/peripherals/serial_configuration.md index 87c5bf2c1c..a3de0cf328 100644 --- a/docs/uk/peripherals/serial_configuration.md +++ b/docs/uk/peripherals/serial_configuration.md @@ -109,7 +109,7 @@ These port mappings can be disabled by setting the associated configuration para This is configured by default as a MAVLink port the onboard profile (for companion computers). The configuration for MAVLink is unique to this port (it doesn't use the `MAV_X_CONFIG` parameters). - - [SYS_USB_AUTO](../advanced_config/parameter_reference.md#SYS_USB_AUTO) sets whether the port is set to no partiular protocol, autodetects the protocol, or sets the comms link to MAVLink. + - [SYS_USB_AUTO](../advanced_config/parameter_reference.md#SYS_USB_AUTO) sets whether the port is set to no particular protocol, autodetects the protocol, or sets the comms link to MAVLink. - [USB_MAV_MODE](../advanced_config/parameter_reference.md#USB_MAV_MODE) sets the MAVLink profile that is used if MAVLink is set or detected. Інші порти, як правило, за замовчуванням не мають призначених функцій (вимкнені). diff --git a/docs/uk/peripherals/vertiq.md b/docs/uk/peripherals/vertiq.md index 7321ccd086..c86ff89ffb 100644 --- a/docs/uk/peripherals/vertiq.md +++ b/docs/uk/peripherals/vertiq.md @@ -6,7 +6,7 @@ Vertiq виготовляє високоефективні пропульсив ![Vertiq Module Lineup](../../assets/peripherals/esc_vertiq/vertiq_esc_lineup.jpg) -All Vertiq modules support traditional [PWM input, DShot, OneShot, and Multishot communication protocols](https://iqmotion.readthedocs.io/en/latest/communication_protocols/hobby_protocol.html). Vertiq's larger modules also support [DroneCAN control](https://iqmotion.readthedocs.io/en/latest/communication_protocols/dronecan_protocol.html). +All Vertiq modules support traditional [PWM input, DShot, OneShot, and Multishot communication protocols](https://iqmotion.readthedocs.io/en/latest/communication_protocols/timer_based_protocol.html). Vertiq's larger modules also support [DroneCAN control](https://iqmotion.readthedocs.io/en/latest/communication_protocols/dronecan_protocol.html). ## Де купити @@ -38,6 +38,18 @@ Instructions for integrating the motor/ESC using with DroneCAN can be found in [ Ці інструкції допоможуть вам налаштувати правильні параметри для активації драйверів DroneCAN контролера польоту, встановити правильні конфігураційні параметри для зв'язку з модулями Vertiq на шині DroneCAN, налаштування ESC та перевірку того, що ваш контролер польоту може належним чином керувати вашими модулями по протоколу DroneCAN. +#### LED Configuration for Vertiq Modules + +:::info +This configuration is only required if you have the optional [Vertiq LED module add-on](https://www.vertiq.co/add-ons). +Standard Vertiq ESC modules do not include LEDs. +::: + +Vertiq LED Add-on modules have two LEDs per ESC (RGB for status, White for anti-collision). +See [DroneCAN Lights](../dronecan/lights.md) for configuration instructions. + +The `light_id` for each LED is calculated as: `esc_index × 3 + BASE_ID`, where `BASE_ID` is 1 for RGB and 2 for White. + ### Конфігурація DShot/PWM Instructions for integrating the motor/ESC using PWM and DShot can be found in [PWM and DShot Control with a Flight Controller](https://iqmotion.readthedocs.io/en/latest/tutorials/pwm_control_flight_controller.html). diff --git a/docs/uk/power_module/holybro_pm06_pixhawk4mini_power_module.md b/docs/uk/power_module/holybro_pm06_pixhawk4mini_power_module.md index fe450ab525..8ac72c2c2f 100644 --- a/docs/uk/power_module/holybro_pm06_pixhawk4mini_power_module.md +++ b/docs/uk/power_module/holybro_pm06_pixhawk4mini_power_module.md @@ -26,6 +26,8 @@ ## Проведення/Підключення -Wiring and connection examples can be found in: [Pixhawk 4 Mini > Power](../assembly/quick_start_pixhawk4_mini.md#power). +![pm06_pin_map](../../assets/hardware/power_module/holybro_pm06/pm06_pin_map.jpg) - +This image shows the wiring and connections for the [Pixhawk 4 Mini](https://docs.px4.io/v1.16/en/assembly/quick_start_pixhawk4_mini#power) (discontinued). + +![Pixhawk 4 - Power Management Board](../../assets/hardware/power_module/holybro_pm06/pixhawk4mini_power_management.png) diff --git a/docs/uk/power_module/index.md b/docs/uk/power_module/index.md index b79d5e4d60..c2c8e0a73b 100644 --- a/docs/uk/power_module/index.md +++ b/docs/uk/power_module/index.md @@ -13,7 +13,7 @@ The PX4 battery/power module configuration (via the ADC interface) is covered in For easiest assembly use a power module or PDB recommended by your FC manufacturer, and sized for your power requirements. The Pixhawk connector standard requires that the VCC line must provide at least 2.5A continuous current and default to 5.3V. -In in practice flight controllers may have different recommendations or preferences, so if you don't (or can't) use a recommended module, check that the module matches your FC's requirements. +In practice flight controllers may have different recommendations or preferences, so if you don't (or can't) use a recommended module, check that the module matches your FC's requirements. ::: This section provides information about a number of power modules and power distribution boards (see FC manufacturer docs for more options): diff --git a/docs/uk/releases/1.12.md b/docs/uk/releases/1.12.md index c2791aa3fe..30b877eb98 100644 --- a/docs/uk/releases/1.12.md +++ b/docs/uk/releases/1.12.md @@ -28,7 +28,7 @@ - **RTL Trigger based on remaining flight range ([PR#16399](https://github.com/PX4/PX4-Autopilot/pull/16399))** - Обчислює час до дому, у режимі RTL, враховуючи швидкість руху автомобіля, швидкість вітру та відстань/напрямок до пункту призначення -- **Pre-emptive geofence breach ([PR#16400](https://github.com/PX4/PX4-Autopilot/pull/16400))** +- **Preemptive geofence breach ([PR#16400](https://github.com/PX4/PX4-Autopilot/pull/16400))** - Triggers a breach if the _predicted_ current trajectory will result in a breach, allowing the vehicle to be re-routed to a safe hold position. - **Airframe Scripts** - Синтаксис для встановлення значень за замовчуванням було змінено, і власні сценарії потребують оновлення @@ -128,7 +128,7 @@ ### NuttX -Nuttx was upgraded from [8.2+ to NuttX 10.10.0+](https://github.com/apache/incubator-nuttx/compare/nuttx-8.2..nuttx-10.0.1) (@ [904a602c74dc08a100b5c2bd490807de19e73e10](https://github.com/apache/incubator-nuttx/commit/904a602c74dc08a100b5c2bd490807de19e73e10)) +Nuttx was upgraded from [8.2+ to NuttX 10.10.0+](https://github.com/apache/nuttx/compare/nuttx-8.2..nuttx-10.0.1) (@ [904a602c74dc08a100b5c2bd490807de19e73e10](https://github.com/apache/nuttx/commit/904a602c74dc08a100b5c2bd490807de19e73e10)) - **SDCARD performance:** Results in better performance on H7 Targets - [**BACKPORT**] stm32:SDIO:Use 250 Ms Data path timeout, regardless of Card Clock frequency diff --git a/docs/uk/releases/1.14.md b/docs/uk/releases/1.14.md index 0118ab0be6..6fedc0cdce 100644 --- a/docs/uk/releases/1.14.md +++ b/docs/uk/releases/1.14.md @@ -51,10 +51,10 @@ The new [Failsafe State Machine Simulation](../config/safety_simulation.md) allo ### Новий Gazebo -Given [the recent changes](https://discourse.ros.org/t/a-new-era-for-gazebo-cross-post/25012) by the Open Robotics simulation team, we are introducing name changes for our gazebo simulations, mirroring Open Robotics naming scheme, starting with v1.14: +Given [the recent changes](https://discourse.openrobotics.org/t/a-new-era-for-gazebo-cross-post/25012) by the Open Robotics simulation team, we are introducing name changes for our gazebo simulations, mirroring Open Robotics naming scheme, starting with v1.14: -- [Ignition Gazebo](https://docs.px4.io/v1.13/en/simulation/ignition_gazebo.html) to [Gazebo](../sim_gazebo_gz/index.md) -- [Gazebo](https://docs.px4.io/v1.13/en/simulation/gazebo.html) to [Gazebo Classic](../sim_gazebo_classic/index.md). +- [Ignition Gazebo](https://docs.px4.io/v1.13/en/simulation/ignition_gazebo) to [Gazebo](../sim_gazebo_gz/index.md) +- [Gazebo](https://docs.px4.io/v1.13/en/simulation/gazebo) to [Gazebo Classic](../sim_gazebo_classic/index.md). Most importantly this affects the PX4 build target names as well: @@ -63,7 +63,7 @@ Most importantly this affects the PX4 build target names as well: ### Покращений інтерфейс ROS 2 за допомогою uXRCE-DDS -We updated the ROS 2 interface, replacing [Fast-RTPS](https://docs.px4.io/v1.13/en/middleware/micrortps.html) with [uXRCE-DDS](../ros2/user_guide.md), resulting in an improved experience across the board. +We updated the ROS 2 interface, replacing [Fast-RTPS](https://docs.px4.io/v1.13/en/middleware/micrortps) with [uXRCE-DDS](../ros2/user_guide.md), resulting in an improved experience across the board. The change also avoids the need for `_rtps` build targets, enabling the interface on even more targets by default. ## Інструкції для оновлення @@ -85,7 +85,7 @@ For users upgrading from previous versions, please take a moment to review the f 3. Користувачам Fast-RTPS потрібно перенести свій код на новий інтерфейс uXRCE-DDS. Код програми повинен вимагати лише незначних модифікацій. Це включає (мінімально): -Modifying topic names to match the new naming pattern, which changed from `fmu//out` to `fmu/out/`, and [Adusting the QoS settings](../ros2/user_guide.md#ros-2-subscriber-qos-settings). +Modifying topic names to match the new naming pattern, which changed from `fmu//out` to `fmu/out/`, and [Adjusting the QoS settings](../ros2/user_guide.md#ros-2-subscriber-qos-settings). For more information see [Fast-RTPS to uXRCE-DDS Migration Guidelines](../middleware/uxrce_dds.md#fast-rtps-to-uxrce-dds-migration-guidelines) @@ -102,7 +102,7 @@ For more information see [Fast-RTPS to uXRCE-DDS Migration Guidelines](../middle - Failsafe state machine rewrite and [web simulation](../config/safety_simulation.md) - Improved preflight failure check reporting (requires QGC [v4.2.0](https://github.com/mavlink/qgroundcontrol/releases/tag/v4.2.0) or later): [PX4-Autopilot#20030](https://github.com/PX4/PX4-Autopilot/pull/20030) and [qgroundcontrol#10362](https://github.com/mavlink/qgroundcontrol/pull/10362) -- [Package delivery in mission](../advanced/package_delivery.md): For package delivery applications, inital support for payload delivery in mission for gripper actuator was added +- [Package delivery in mission](../advanced/package_delivery.md): For package delivery applications, initial support for payload delivery in mission for gripper actuator was added - Manual control setpoint message redefinition: `manual_control_setpoint.x`, `y`, `z`, `w` -> `roll`, `pitch`, `yaw`, `throttle`; `throttle scale [0,1] -> [-1,1]` - [PX4-Autopilot#15949](https://github.com/PX4/PX4-Autopilot/pull/15949) - Default motor PWM configuration - [PX4-Autopilot#21800](https://github.com/PX4/PX4-Autopilot/pull/21800) - Fix PWM/Oneshot calibration - [PX4-Autopilot#21726](https://github.com/PX4/PX4-Autopilot/pull/21726) @@ -135,7 +135,7 @@ For more information see [Fast-RTPS to uXRCE-DDS Migration Guidelines](../middle - [Gazebo-classic] Додавання моделі Омнікоптера: До Gazebo SITL була додана повністю актована модель омнідирекціонального транспортного засобу - https://github.com/PX4/PX4-SITL_gazebo-classic/pull/866 - [Gazebo-classic] Addition of Advanced liftdrag plugin: Advanced liftdrag plugin that models nonlinear aerodynamics based on AVL - [PX4-SITL_gazebo-classic#901](https://github.com/PX4/PX4-SITL_gazebo-classic/pull/901) - [Gazebo-classic] Addition of Safe landing world: Addition of safe landing world, for testing safe landing - [PX4-SITL_gazebo-classic#93](https://github.com/PX4/PX4-SITL_gazebo-classic/pull/93) -- [Gazebo-classic] Depricated Ubuntu Bionic reated tests: Removed testing due to EOL of Ubuntu Bionic - [PX4-SITL_gazebo-classic#974](https://github.com/PX4/PX4-SITL_gazebo-classic/pull/974) +- [Gazebo-classic] Deprecated Ubuntu Bionic reated tests: Removed testing due to EOL of Ubuntu Bionic - [PX4-SITL_gazebo-classic#974](https://github.com/PX4/PX4-SITL_gazebo-classic/pull/974) - [SIH] Самостійні симуляції датчиків у дереві: Здатність симулювати датчики у дереві, яке було частиною SIH, тепер є самостійним модулем датчика. Sensors include magnetometer, GPS, Barometer, Airspeed - [PX4-Autopilot#20137](https://github.com/PX4/PX4-Autopilot/pull/20137), https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/simulation/sensor_airspeed_sim - [SIH] Впровадження відмов для імітації акумулятора - https://github.com/PX4/PX4-Autopilot/commit/ebc1d7544e8146788c9e7cf5e8b64f60199240e4 diff --git a/docs/uk/releases/1.15.md b/docs/uk/releases/1.15.md index d974126659..ac6a8dddcc 100644 --- a/docs/uk/releases/1.15.md +++ b/docs/uk/releases/1.15.md @@ -67,7 +67,7 @@ Please continue reading for [upgrade instructions](#upgrade-guide). ### Управління -- **[Offboard]** [ros2 offboard control](../flight_modes/offboard.md#ros-2-messages) allows for direct motors and servo control ([PX4-Autopilot#22222](https://github.com/PX4/PX4-Autopilot/pull/22222)) +- **[Offboard]** [ros2 offboard control](../flight_modes/offboard.md#ros-2-offboard-control) allows for direct motors and servo control ([PX4-Autopilot#22222](https://github.com/PX4/PX4-Autopilot/pull/22222)) ### Оцінки @@ -79,7 +79,7 @@ Please continue reading for [upgrade instructions](#upgrade-guide). - Correct way of describing the quaternion uncertainty using Lie group theory - Use Joseph stabilized covariance update algorithm for better covariance stability and allow use of "consider states" (inactive states with non-zero variance) ([PX4-Autopilot#22770](https://github.com/PX4/PX4-Autopilot/pull/22770)) - Covariance prediction, measurement jacobians, state struct and covariance index auto-generated using SymForce -- Manual position update throught MAVLink (`MAV_CMD_EXTERNAL_POSITION_ESTIMATE`) +- Manual position update through MAVLink (`MAV_CMD_EXTERNAL_POSITION_ESTIMATE`) - Add Auxiliary Global Position (AGP) fusion (for e.g.: external map matching vision algorithm) **Mag:** diff --git a/docs/uk/releases/1.16.md b/docs/uk/releases/1.16.md index a60af13c90..c0b9b84434 100644 --- a/docs/uk/releases/1.16.md +++ b/docs/uk/releases/1.16.md @@ -57,7 +57,7 @@ Please continue reading for [upgrade instructions](#upgrade-guide). - [Voltage-based estimation with load compensation](../config/battery.md#voltage-based-estimation-with-load-compensation) now uses a real-time estimate of the internal resistance of the battery to compensate voltage drops under load (with increased current), providing a better capacity estimate than with the raw measured voltage. - Thrust-based load compensation has been removed (along with the `BATn_V_LOAD_DROP` parameters, where `n` is the battery number). -- The [Position (GNSS) loss failsafe](../config/safety.md#position-gnss-loss-failsafe) configurable delay (`COM_POS_FS_DELAY`) has been removed. +- The [Position (GNSS) loss failsafe](../config/safety.md#position-loss-failsafe) configurable delay (`COM_POS_FS_DELAY`) has been removed. The failsafe will now trigger 1 second after position has been lost. ([PX4-Autopilot#24063](https://github.com/PX4/PX4-Autopilot/pull/24063)). - [Log Encryption](../dev_log/log_encryption.md) now generates an encrypted log that contains the public-key-encrypted symmetric key that can be used to decrypt it, instead of putting the key into a separate file. @@ -160,7 +160,7 @@ Please continue reading for [upgrade instructions](#upgrade-guide). - mavlink_ftp: handle relative paths correctly. ([PX4-Autopilot#22980](https://github.com/PX4/PX4-Autopilot/pull/22980)) - Parameter to always start mavlink stream via USB. ([PX4-Autopilot#22234](https://github.com/PX4/PX4-Autopilot/pull/22234)) - Refactor: MAVLink message handling in one function, reference instead of pointer to main instance ([PX4-Autopilo#23219](https://github.com/PX4/PX4-Autopilot/pull/22234)) -- mavlink log handler rewrite for improved effeciency ([PX4-Autopilo#23219](https://github.com/PX4/PX4-Autopilot/pull/22234)) +- mavlink log handler rewrite for improved efficiency ([PX4-Autopilo#23219](https://github.com/PX4/PX4-Autopilot/pull/22234)) ### Мульти-Ротор diff --git a/docs/uk/releases/1.17.md b/docs/uk/releases/1.17.md index 5b388e69e0..ed9a92d6a1 100644 --- a/docs/uk/releases/1.17.md +++ b/docs/uk/releases/1.17.md @@ -9,11 +9,11 @@ const { site } = useData();
-

This page is on a release branch, and hence probably out of date. See the latest version.

+

This page is on a release branch, and hence probably out of date. See the latest version.

-This contains changes to PX4 planned for PX4 v1.17 (since the last major release [PX v1.16](../releases/1.16.md)). +This contains changes in PX4 v1.17 (since the last major release [PX v1.16](../releases/1.16.md)). :::warning PX4 v1.17 is in alpha/beta testing. @@ -57,7 +57,7 @@ Please continue reading for [upgrade instructions](#upgrade-guide). --> -- [MC Neural Network Module](../advanced/neural_networkss.md) +- [MC Neural Network Module](../advanced/neural_networks.md) ### Оцінки @@ -79,7 +79,7 @@ Please continue reading for [upgrade instructions](#upgrade-guide). - Add synthetic mecanum rover model: [PX4-gazebo-models#113](https://github.com/PX4/PX4-gazebo-models/pull/113) - Update synthetic ackermann rover model: [PX4-gazebo-models#117](https://github.com/PX4/PX4-gazebo-models/pull/117) -- [Simulation-in-Hardware (SIH)](../sim_sih/index.md#compatibility) +- [Simulation-in-Hardware (SIH)](../sim_sih/index.md#supported-vehicle-types) - New simulation: MC Hexacopter X - New simulation: Ackermann Rover diff --git a/docs/uk/releases/index.md b/docs/uk/releases/index.md index c88cbfe0e1..7326bf48b2 100644 --- a/docs/uk/releases/index.md +++ b/docs/uk/releases/index.md @@ -3,7 +3,7 @@ Перелік PX4 реліз, вони містять список змін, що відбулися в кожному релізі, пояснення включених функцій, виправлень, застарілих та оновлень. - [main](../releases/main.md) (changes planned for v1.18 or later) -- [v1.17](../releases/1.17.md) (changes planned for v1.17, since v1.16) +- [v1.17](../releases/1.17.md) (changes in v1.17, since v1.16) - [v1.16](../releases/1.16.md) - [v1.15](../releases/1.15.md) - [v1.14](../releases/1.14.md) diff --git a/docs/uk/releases/main.md b/docs/uk/releases/main.md index 835589598a..4fea246023 100644 --- a/docs/uk/releases/main.md +++ b/docs/uk/releases/main.md @@ -9,7 +9,7 @@ const { site } = useData();
-

This page is on a release branch, and hence probably out of date. See the latest version.

+

This page is on a release branch, and hence probably out of date. See the latest version.

@@ -22,7 +22,8 @@ Update these notes with features that are going to be in `main` (PX4 v1.18 or la ## Прочитайте перед оновленням -- TBD … +- Log rotation is now enabled by default. Previously, a single log file grew for the entire flight and old logs were only deleted at boot once free space fell below a fixed 300 MB floor. The logger now caps each log file at [SDLOG_MAX_SIZE](../advanced_config/parameter_reference.md#SDLOG_MAX_SIZE) (new parameter, default `1024` MB) and keeps a configurable percentage of the disk free via [SDLOG_ROTATE](../advanced_config/parameter_reference.md#SDLOG_ROTATE) (new parameter, default `90`, so at least 10% free). Cleanup runs at log start rather than boot, so logs can still be downloaded via FTP before they are deleted. See [Log Cleanup](../dev_log/logging.md#log-cleanup) for details. +- `SDLOG_DIRS_MAX` behaviour changed: it is now an orthogonal directory-count cap that runs on top of the new space-based cleanup, and the default is `0` (disabled). Previously it enforced a fixed ~300 MB free-space floor even when set to `0`. If you relied on that implicit floor, set [SDLOG_ROTATE](../advanced_config/parameter_reference.md#SDLOG_ROTATE) instead. Please continue reading for [upgrade instructions](#upgrade-guide). @@ -40,16 +41,22 @@ Please continue reading for [upgrade instructions](#upgrade-guide). ### Загальні +- [Remote ID (Open Drone ID) in-flight failsafe](../peripherals/remote_id.md): extended [COM_ARM_ODID](../advanced_config/parameter_reference.md#COM_ARM_ODID) to also trigger a configurable failsafe action (Return, Land, or Terminate) if the Remote ID heartbeat is lost while airborne. Users previously on `COM_ARM_ODID=2` retain the same arming behaviour; set to `3` or higher to enable the in-flight action. ([PX4-Autopilot#27029](https://github.com/PX4/PX4-Autopilot/pull/27029)) - [QGroundControl Bootloader Update](../advanced_config/bootloader_update.md#qgc-bootloader-update-sys-bl-update) via the [SYS_BL_UPDATE](../advanced_config/parameter_reference.md#SYS_BL_UPDATE) parameter has been re-enabled after being broken for a number of releases. ([PX4-Autopilot#25032: build: romf: fix generation of rc.board_bootloader_upgrade](https://github.com/PX4/PX4-Autopilot/pull/25032)). +- [Feature: Allow prioritization of manual control inputs based on their instance number in ascending or descending order](../config/manual_control.md#px4-configuration). ([PX4-Autopilot#25602: Ascending and descending manual control input priorities](https://github.com/PX4/PX4-Autopilot/pull/25602)). ### Управління - Added new flight mode(s): [Altitude Cruise (MC)](../flight_modes_mc/altitude_cruise.md), Altitude Cruise (FW). For fixed-wing the mode behaves the same as Altitude mode but you can disable the manual control loss failsafe. ([PX4-Autopilot#25435: Add new flight mode: Altitude Cruise](https://github.com/PX4/PX4-Autopilot/pull/25435)). +### Безпека + +- Rotary-wing vehicles now support uncommanded altitude loss detection: if the vehicle descends more than [FD_ALT_LOSS](../advanced_config/parameter_reference.md#FD_ALT_LOSS) meters below its setpoint in altitude-controlled flight, flight termination (and parachute deployment) is triggered. See [Altitude Loss Trigger](../config/safety.md#altitude-loss-trigger). ([PX4-Autopilot#26837](https://github.com/PX4/PX4-Autopilot/pull/26837)) + ### Оцінки -- Уточнюється +- Added [EKF2_POS_LOCK](../advanced_config/parameter_reference.md#EKF2_POS_LOCK) to force constant position fusion while landed, useful for vehicles relying on dead-reckoning sensors (airspeed, optical flow) that provide no aiding on the ground. ### Датчики @@ -58,7 +65,7 @@ Please continue reading for [upgrade instructions](#upgrade-guide). ### Симуляція -- Уточнюється +- SIH: Add option to set wind velocity ([PX4-Autopilot#26467](https://github.com/PX4-Autopilot/pull/26467)) @@ -137,7 +137,7 @@ To install ROS 2 and its dependencies: 2. Some Python dependencies must also be installed (using **`pip`** or **`apt`**): ```sh - pip install --user -U empy==3.3.4 pyros-genmsg setuptools + pip install --user -U empty==3.3.4 pyros-genmsg setuptools ``` ### Setup Micro XRCE-DDS Agent & Client diff --git a/docs/uk/sensor/airspeed.md b/docs/uk/sensor/airspeed.md index 35847149c3..a6997c76c4 100644 --- a/docs/uk/sensor/airspeed.md +++ b/docs/uk/sensor/airspeed.md @@ -11,8 +11,8 @@ Airspeed sensors are _highly recommended_ for fixed-wing and VTOL frames. Рекомендовані цифрові сенсори швидкості в повітрі включають: - Based on [Pitot tube](https://en.wikipedia.org/wiki/Pitot_tube) - - I2C MEAS Spec series (e.g. [MS4525DO](https://www.te.com/usa-en/product-CAT-BLPS0002.html), [MS5525](https://www.te.com/usa-en/product-CAT-BLPS0003.html)) - - [mRo I2C Airspeed Sensor JST-GH MS4525DO](https://store.3dr.com/mro-i2c-airspeed-sensor-jst-gh-ms4525do/) (3DR store) + - I2C MEAS Spec series (e.g. [MS4525DO](https://www.te.com/en/product-20003581-00.html), [MS5525](https://www.te.com/usa-en/product-CAT-BLPS0003.html)) + - [mRo I2C Airspeed Sensor JST-GH MS4525DO](https://store.3dr.com/airspeed-sensor-jst-gh-ms4525do/) (3DR store) - [Digital Differential Airspeed Sensor Kit - MS4525DO](https://store-drotek.com/793-digital-differential-airspeed-sensor-kit-.html) (Drotek). - [Holybro Digital Air Speed Sensor - MS4525DO](https://holybro.com/collections/sensors/products/digital-air-speed-sensor-ms4525do) - [Holybro Digital Air Speed Sensor - MS5525DSO](https://holybro.com/collections/sensors/products/digital-air-speed-sensor-ms5525dso) @@ -23,6 +23,7 @@ Airspeed sensors are _highly recommended_ for fixed-wing and VTOL frames. - [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. diff --git a/docs/uk/sensor/airspeed_tfslot.md b/docs/uk/sensor/airspeed_tfslot.md index f97c594f13..a0531471d3 100644 --- a/docs/uk/sensor/airspeed_tfslot.md +++ b/docs/uk/sensor/airspeed_tfslot.md @@ -5,7 +5,7 @@ ![TFSLOT and TFSLOT WITH TFASPDIMU02 board](../../assets/hardware/sensors/airspeed/tsflot_compose.jpg) [TFSLOT](https://github.com/ThunderFly-aerospace/TFSLOT01) is an airspeed sensor based on venturi effects. -In the basic configuration, the TFSLOT is equipped with the [TFASPDIMU02](https://github.com/ThunderFly-aerospace/TFASPDIMU02) sensor board, which contains a differential pressure sensor ([Sensirion SDP3x series](https://sensirion.com/products/catalog/?filter_series=d1816d53-f5c8-47e3-ab47-818c3fd54259)) and a 9-axis motion tracking sensor ([ICM-20948](https://invensense.tdk.com/products/motion-tracking/9-axis/icm-20948/)). +In the basic configuration, the TFSLOT is equipped with the [TFASPDIMU02](https://github.com/ThunderFly-aerospace/TFASPDIMU02) sensor board, which contains a differential pressure sensor ([Sensirion SDP3x series](https://sensirion.com/products/catalog?filter_series=d1816d53-f5c8-47e3-ab47-818c3fd54259)) and a 9-axis motion tracking sensor ([ICM-20948](https://invensense.tdk.com/products/motion-tracking/9-axis/icm-20948/)). Одиницю IMU можна використовувати як зовнішній компас. - Цей дизайн має кілька переваг при використанні на невеликих і повільних безпілотних літальних апаратах. diff --git a/docs/uk/sensor/barometer.md b/docs/uk/sensor/barometer.md index 93f7563901..b397f48ec0 100644 --- a/docs/uk/sensor/barometer.md +++ b/docs/uk/sensor/barometer.md @@ -65,7 +65,7 @@ This calibration is controlled by the [SENS_BAR_AUTOCAL](../advanced_config/para The algorithm monitors GNSS quality, collects altitude differences over a 2-second filtered window, and verifies stability within 4m tolerance. Once stable, it uses binary search to calculate pressure offsets that align baro altitude with GNSS altitude (0.1m precision), then applies the offset to all sensors and saves the parameters. -Примітки: +Notes: - **EKF Independence**: GNSS-baro calibration operates independently of EKF2 altitude fusion settings. - **Execution Timing**: Calibration runs even when [EKF2_GPS_CTRL](../advanced_config/parameter_reference.md#EKF2_GPS_CTRL) altitude fusion is disabled. diff --git a/docs/uk/sensor/grf_lidar.md b/docs/uk/sensor/grf_lidar.md new file mode 100644 index 0000000000..e83fed6a1b --- /dev/null +++ b/docs/uk/sensor/grf_lidar.md @@ -0,0 +1,69 @@ +# Lightware GRF250/GRF500 Gimbal Lidar + +LightWare [GRF250](https://lightwarelidar.com/shop/grf-250/) and [GRF500](https://lightwarelidar.com/shop/grf-500/) are small and light Lidar modules with a range of 250m and 500m, respectively. + +![LightWare GRF250 Gimbal Lidar](../../assets/hardware/sensors/lidar_lightware/grf_500.png) + +:::info +The Lidar driver is not included in the default build of PX4. +You will need to [create and use a custom build](#add-the-driver-to-the-px4-build). +::: + +## Де купити + +Order these modules from: + +- [GRF250](https://lightwarelidar.com/shop/grf-250/) +- [GRF500](https://lightwarelidar.com/shop/grf-500/) + +## Налаштування програмного забезпечення + +The rangefinder can be connected to any unused serial port, such as `TELEM2`. +[Parameter Configuration](#parameter-configuration) explains how to configure the port to use and the other properties of the rangefinder. + +## Налаштування PX4 + +### Add the Driver to the PX4 Build + +The [lightware_grf_serial](../modules/modules_driver_distance_sensor.md#lightware-grf-serial) driver for this Lidar is not included in PX4 firmware by default. +In order to use these modules you will first need to update the firmware configuration to add the driver, and then build the firmware. + +1. Update the firmware configuration. You can use either of the following options: + - Menuconfig: + 1. Install and open [menuconfig](../hardware/porting_guide_config.md#px4-menuconfig-setup) + 2. In [menuconfig](../hardware/porting_guide_config.md#px4-menuconfig-setup), navigate to **Drivers > Distance sensors** + 3. Select/Enable `lightware_grf_serial` + 4. Save the configuration + + - Manually update `default.px4` to include the configuration key: + 1. Open the `default.px4board` config file that corresponds to the board you want to build for. + For example, to add the driver to `fmu-v6x` boards you would update [/boards/px4/fmu-v6x/default.px4board ](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/fmu-v6x/default.px4board) + 2. Add the following line and save the file: + + ```txt + CONFIG_DRIVERS_DISTANCE_SENSOR_LIGHTWARE_GRF_SERIAL=y + ``` + +2. [Build PX4](../dev_setup/building_px4.md) for your flight controller target and upload the new firmware. + +### Налаштування параметрів + +You will need to configure PX4 to indicate the serial port to which the sensor is connected (as per [Serial Port Configuration](../peripherals/serial_configuration.md)) and also the orientation and other properties of the sensor. + +The [parameters to change](../advanced_config/parameters.md) are listed in the table. + +| Параметр | Опис | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------ | +| [SENS_EN_GRF_CFG](../advanced_config/parameter_reference.md#SENS_EN_GRF_CFG) | Set to the serial port the sensor is connected to. | +| [GRF_RATE_CFG](../advanced_config/parameter_reference.md#GRF_RATE_CFG) | Set the update rate. | +| [GRF_SENS_MODEL](../advanced_config/parameter_reference.md#GRF_SENS_MODEL) | Set the sensor model to use. | + +## Тестування + +You can confirm that the sensor is correctly configured by connecting QGroundControl, and observing that [DISTANCE_SENSOR](https://mavlink.io/en/messages/common.html#DISTANCE_SENSOR) is present in the [MAVLink Inspector](https://docs.qgroundcontrol.com/master/en/qgc-user-guide/analyze_view/mavlink_inspector.html). + +Moving the sensor around at various distances from a surface will have the `current_distance` value change. + +## Усунення проблем + +If you are having problems with connecting to the sensor you may need to unassign a the default serial port. [Unassign Default Serial Port](../peripherals/serial_configuration.md) diff --git a/docs/uk/sensor/inertial_navigation_systems.md b/docs/uk/sensor/inertial_navigation_systems.md index 6dd786584c..5732d3734a 100644 --- a/docs/uk/sensor/inertial_navigation_systems.md +++ b/docs/uk/sensor/inertial_navigation_systems.md @@ -49,5 +49,4 @@ INS є навігаційним пристроєм, який використо ## Подальша інформація -- [Що таке інерційна навігаційна система?](https://www.vectornav.com/resources/inertial-navigation-articles/what-is-an-ins) (VectorNav) - [Посібник з інерціальної навігації](https://www.vectornav.com/resources/inertial-navigation-primer) (VectorNav) diff --git a/docs/uk/sensor/inertiallabs.md b/docs/uk/sensor/inertiallabs.md index e7e3c6e4b3..2847434065 100644 --- a/docs/uk/sensor/inertiallabs.md +++ b/docs/uk/sensor/inertiallabs.md @@ -21,8 +21,8 @@ The mode is configurable using a parameter. [Get technical support or send requests to sales team](https://inertiallabs.com/inertial-labs-inc/contact-inertial-labs-team/). Recommended sensors: -- [INS-U GNSS/INS](https://inertiallabs.com/ins-u-datasheet): Recommended for fixed-wing systems without hovering, where static heading is not necessary. -- [INS-DU DUAL GNSS/INS](https://inertiallabs.com/ins-du-datasheet): Recommended for multicopter systems where hovering and low dynamics requires the use of static heading. +- [INS-U GNSS/INS](https://inertiallabs.com/wp-content/uploads/2026/01/INS-U_INS-U-OEM_Datasheet_REV2.18_JAN2026.pdf): Recommended for fixed-wing systems without hovering, where static heading is not necessary. +- [INS-DU DUAL GNSS/INS](https://inertiallabs.com/wp-content/uploads/2025/12/INS-DU_INS-DU-OEM_Datasheet_REV1.00_DEC2025.pdf): Recommended for multicopter systems where hovering and low dynamics requires the use of static heading. ## Налаштування програмного забезпечення diff --git a/docs/uk/sensor/lidar_lite.md b/docs/uk/sensor/lidar_lite.md index dbbfeeff08..85a1f009c0 100644 --- a/docs/uk/sensor/lidar_lite.md +++ b/docs/uk/sensor/lidar_lite.md @@ -6,7 +6,7 @@ LIDAR-Lite це компактний, високопродуктивний оп ## Де купити -- [LIDAR-Lite v3](https://buy.garmin.com/en-AU/AU/p/557294) (5cm - 40m) +- [LIDAR-Lite v3](https://www.garmin.com/en-AU/p/557294/) (5cm - 40m) ## Схема розташування виводів diff --git a/docs/uk/sensor/microstrain.md b/docs/uk/sensor/microstrain.md index 7503f30629..57292c45a9 100644 --- a/docs/uk/sensor/microstrain.md +++ b/docs/uk/sensor/microstrain.md @@ -7,10 +7,10 @@ Widely used across industries like aerospace, robotics, industrial automation, a The driver currently supports the following hardware: -- [`MicroStrain CV7-AR`](https://www.hbkworld.com/en/products/transducers/inertial-sensors/vertical-reference-units--vru-/3dm-cv7-ar): Inertial Measurement Unit (IMU) and Vertical Reference Unit (VRU) -- [`MicroStrain CV7-AHRS`](https://www.hbkworld.com/en/products/transducers/inertial-sensors/attitude-and-heading-reference-systems--ahrs-/3dm-cv7-ahrs): Inertial Measurement Unit (IMU) and Attitude Heading Reference System (AHRS) -- [`MicroStrain CV7-INS`](https://www.hbkworld.com/en/products/transducers/inertial-sensors/inertial-navigation-systems--ins-/3dm-cv7-ins): Inertial Measurement Unit (IMU) and Inertial Navigation System (INS). -- [`MicroStrain CV7-GNSS/INS`](https://www.hbkworld.com/en/products/transducers/inertial-sensors/inertial-navigation-systems--ins-/3dm-cv7-gnss-ins): Inertial Measurement Unit (IMU) and Inertial Navigation System (INS) combined with dual multiband (GNSS) receivers. +- [`MicroStrain CV7-AR`](https://www.hbkworld.com/en/products/transducers/inertial-sensors/vertical-reference/3dm-cv7-ar): Inertial Measurement Unit (IMU) and Vertical Reference Unit (VRU) +- [`MicroStrain CV7-AHRS`](https://www.hbkworld.com/en/products/transducers/inertial-sensors/attitude-and-heading/3dm-cv7-ahrs): Inertial Measurement Unit (IMU) and Attitude Heading Reference System (AHRS) +- [`MicroStrain CV7-INS`](https://www.hbkworld.com/en/products/transducers/inertial-sensors/navigation/3dm-cv7-ins): Inertial Measurement Unit (IMU) and Inertial Navigation System (INS). +- [`MicroStrain CV7-GNSS/INS`](https://www.hbkworld.com/en/products/transducers/inertial-sensors/navigation/3dm-cv7-gnss-ins): Inertial Measurement Unit (IMU) and Inertial Navigation System (INS) combined with dual multiband (GNSS) receivers. PX4 can use these sensors to provide raw IMU data for EKF2 or to replace EKF2 as an external INS. For more information, including user manuals and datasheets, please refer to the sensors product page. @@ -18,7 +18,7 @@ For more information, including user manuals and datasheets, please refer to the ## Де купити MicroStrain sensors can be purchased through HBK's official [MicroStrain product page](https://www.hbkworld.com/en/products/transducers/inertial-sensors) or through authorized distributors globally. -For large orders, custom requirements, or technical inquiries, reach out directly to [sales](https://www.hbkworld.com/en/contact-us/contact-sales-microstrain) +For large orders, custom requirements, or technical inquiries, reach out directly to [sales](https://www.hbkworld.com/en/contact-us) ## Налаштування програмного забезпечення diff --git a/docs/uk/sensor/optical_flow.md b/docs/uk/sensor/optical_flow.md index 8f301d4ad7..a1abffdc1c 100644 --- a/docs/uk/sensor/optical_flow.md +++ b/docs/uk/sensor/optical_flow.md @@ -34,6 +34,12 @@ The information is written to the corresponding uORB topics: [DistanceSensor](.. | Справа | - X | | Зліва | + X | +:::info +The integrated flow values are **angular measurements** (radians) representing rotation of the image about the sensor's body axes using the right-hand convention. +They are _not_ translational displacements along those axes, which is why forward vehicle movement (along X) appears in the Y flow axis, and rightward movement (along Y) appears in the X flow axis. +Specifically, forward movement causes the ground image to rotate about the Y axis (+ Y), while rightward movement causes a negative rotation about the X axis (- X). +::: + Дані сенсора від пристрою оптичного потоку об'єднуються з іншими джерелами даних швидкості. The approach used for fusing sensor data and any offsets from the center of the vehicle must be configured in the [estimator](#estimators). @@ -71,7 +77,7 @@ An all-in-one design that simplifies installation, with an onboard infrared LED ### Інші Камери/Сенсори Також можна використовувати дошку/квадрокоптер, яка має вбудовану камеру. -For this the [Optical Flow repo](https://github.com/PX4/OpticalFlow) can be used (see also [snap_cam](https://github.com/PX4/snap_cam)). +For this the [Optical Flow repo](https://github.com/PX4/PX4-OpticalFlow) can be used (see also [snap_cam](https://github.com/PX4/snap_cam)). ## Далекомір diff --git a/docs/uk/sensor/px4flow.md b/docs/uk/sensor/px4flow.md index 419d38bbec..b9159f35f5 100644 --- a/docs/uk/sensor/px4flow.md +++ b/docs/uk/sensor/px4flow.md @@ -5,4 +5,4 @@ PX4 does not support the PX4Flow [optical flow](../sensor/optical_flow.md) sensor from PX4 v1.13 (it doesn't work with current firmware). PX4 може працювати зі старішою прошивкою PX4Flow. -Documentation has been removed (if needed, see [Legacy Docs for PX4Flow in v1.13](https://docs.px4.io/v1.13/en/sensor/px4flow.html)). +Documentation has been removed (if needed, see [Legacy Docs for PX4Flow in v1.13](https://docs.px4.io/v1.13/en/sensor/px4flow)). diff --git a/docs/uk/sensor/rangefinders.md b/docs/uk/sensor/rangefinders.md index e5280bf30a..b1b3450d32 100644 --- a/docs/uk/sensor/rangefinders.md +++ b/docs/uk/sensor/rangefinders.md @@ -93,7 +93,7 @@ It comes with a JST GHR 4 pin connector that is compatible with the I2C port on ### MaxBotix I2CXL-MaxSonar-EZ -The MaxBotix [I2CXL-MaxSonar-EZ](https://www.maxbotix.com/product-category/i2cxl-maxsonar-ez-products) range has a number of relatively short-ranged sonar based rangefinders that are suitable for assisted takeoff/landing and collision avoidance. +The MaxBotix [I2CXL-MaxSonar-EZ](https://maxbotix.com/collections/i2cxl-maxsonar-ez-products) range has a number of relatively short-ranged sonar based rangefinders that are suitable for assisted takeoff/landing and collision avoidance. Ці можуть бути підключені за допомогою порту I2C. The rangefinders are enabled using the parameter [SENS_EN_MB12XX](../advanced_config/parameter_reference.md#SENS_EN_MB12XX). @@ -163,7 +163,7 @@ Features: - [VL53L1CBV0FY-1](https://www.st.com/resource/en/datasheet/vl53l1.pdf) sensor - Input voltage sensor -- CAN connectors: 2 [UCANPHY Micro (JST-GH 4)](https://raccoonlabdev.github.io/docs/guide/wires/). +- CAN connectors: 2 [UCANPHY Micro (JST-GH 4)](https://docs.raccoonlab.co/guide/wires/). ## Configuration/Setup {#configuration} diff --git a/docs/uk/sensor/sbgecom.md b/docs/uk/sensor/sbgecom.md index 4e65d0243c..bc9be0427f 100644 --- a/docs/uk/sensor/sbgecom.md +++ b/docs/uk/sensor/sbgecom.md @@ -2,7 +2,7 @@ [SBG-Systems](https://www.sbg-systems.com/) designs, manufactures, and support an extensive range of state-of-the-art inertial sensors such as Inertial Measurement Units (IMU), Attitude and Heading Reference Systems (AHRS), Inertial Navigation Systems with embedded GNSS (INS/GNSS), and so on. -PX4 supports [all SBG Systems products](https://www.sbg-systems.com/products/) and can use these as an [external INS](../sensor/inertial_navigation_systems.md) (bypassing/replacing the EKF2 estimator), or as a source of raw sensor data provided to the navigation estimator. +PX4 supports [all SBG Systems products](https://www.sbg-systems.com/) and can use these as an [external INS](../sensor/inertial_navigation_systems.md) (bypassing/replacing the EKF2 estimator), or as a source of raw sensor data provided to the navigation estimator. ![Ellipse](../../assets/hardware/sensors/inertial/ellipse-inertial-navigation-system.png) @@ -17,7 +17,7 @@ SBG Systems products provide a range of benefits to PX4 users and can be integra The sbgECom PX4 driver is streamlined to provide a simple plug-and-play architecture, removing engineering obstacles and allowing the acceleration of the design, development, and launch of platforms to keep pace with the rapid rate of innovation. -The driver supports [all SBG Systems products](https://www.sbg-systems.com/products/). +The driver supports [all SBG Systems products](https://www.sbg-systems.com/). Зокрема, рекомендуємо наступні системи: - **Pulse:** Recommended for fixed-wing systems without hovering, where static heading is not necessary. @@ -151,5 +151,5 @@ and, if configured as an INS, publishes: ## Характеристики обладнання -- [Product Briefs](https://www.sbg-systems.com/products/) +- [Product Briefs](https://www.sbg-systems.com/) - [Datasheets](https://www.sbg-systems.com/contact/#products) diff --git a/docs/uk/sensor/sf45_rotating_lidar.md b/docs/uk/sensor/sf45_rotating_lidar.md index a4137666d4..d52fda64b2 100644 --- a/docs/uk/sensor/sf45_rotating_lidar.md +++ b/docs/uk/sensor/sf45_rotating_lidar.md @@ -12,7 +12,7 @@ You will need to [create and use a custom build](#add-the-driver-to-the-px4-buil ## LightWare Studio Setup -In the [LightWare Studio](https://www.lightwarelidar.com/resources-software) app set following values: +In the [LightWare Studio](https://lightwarelidar.com/resources-software/) app set following values: | Параметр | Опис | | --------- | ------ | diff --git a/docs/uk/sensor/sfxx_lidar.md b/docs/uk/sensor/sfxx_lidar.md index 98becf2484..9f7428d015 100644 --- a/docs/uk/sensor/sfxx_lidar.md +++ b/docs/uk/sensor/sfxx_lidar.md @@ -9,14 +9,14 @@ LightWare розробляє широкий спектр легких, зага Наступні моделі підтримуються PX4 та можуть бути підключені до шини I2C або Serial (таблиці нижче показують, яку шину можна використовувати для кожної моделі). -| Модель | Range (m) | Шина | Опис | -| ------------------------------------------------------- | ---------------------------- | -------------------- | ------------------------------------------------------------------------------------------------------------- | -| [SF11/C](https://lightwarelidar.com/shop/sf11-c-100-m/) | 100 | Серійна або I2C шина | | -| [LW20/C](https://lightware.co.za/products/lw20-c-100-m) | 100 | Шина I2C | Водонепроникний (IP67) з сервоприводом для додатків з детекцією та уникненням перешкод | -| [SF30/D](https://lightwarelidar.com/shop/sf30-d-200-m/) | 200 | Шина I2C | Waterproofed (IP67) | -| [SF45/B](../sensor/sf45_rotating_lidar.md) | 50 | Серія | Rotary Lidar (Used for [Collision Prevention](../computer_vision/collision_prevention.md)) | -| [GRF250](https://lightwarelidar.com/shop/grf-250/) | 250 | I2C | Gimbal Range Finder | -| [GRF500](https://lightwarelidar.com/shop/grf-500/) | 500 | I2C | Gimbal Range Finder | +| Модель | Range (m) | Шина | Опис | +| ---------------------------------------------------------- | ---------------------------- | -------------------- | ------------------------------------------------------------------------------------------------------------- | +| [SF11/C](https://lightwarelidar.com/shop/sf11-c-100-m/) | 100 | Серійна або I2C шина | | +| [LW20/C](https://lightwarelidar.com/products/lw20-c-100-m) | 100 | Шина I2C | Водонепроникний (IP67) з сервоприводом для додатків з детекцією та уникненням перешкод | +| [SF30/D](https://lightwarelidar.com/shop/sf30-d-200-m/) | 200 | Шина I2C | Waterproofed (IP67) | +| [SF45/B](../sensor/sf45_rotating_lidar.md) | 50 | Серія | Rotary Lidar (Used for [Collision Prevention](../computer_vision/collision_prevention.md)) | +| [GRF250](../sensor/grf_lidar.md) | 250 | Серійна або I2C шина | Gimbal Range Finder | +| [GRF500](../sensor/grf_lidar.md) | 500 | Серійна або I2C шина | Gimbal Range Finder | :::details Discontinued diff --git a/docs/uk/sensor/teraranger.md b/docs/uk/sensor/teraranger.md index daf0723f8b..3ba1216056 100644 --- a/docs/uk/sensor/teraranger.md +++ b/docs/uk/sensor/teraranger.md @@ -1,12 +1,17 @@ -# Дальніміри TeraRanger +# TeraRanger Rangefinders (Discontinued) + +:::warning +TeraRanger Evo sensors were discontinued by Terabee in May 2024. +Limited stock may still be available from third-party resellers such as [Tribotix](https://tribotix.com/product/teraranger-evo-60m/). +::: TeraRanger надає ряд легких сенсорів вимірювання відстані на основі інфрачервоної технології часу польоту (ToF). Вони зазвичай швидші і мають більший діапазон, ніж ехолокатори, і менші та легші, ніж системи на основі лазера. PX4 підтримує: -- [TeraRanger Evo 60m](https://www.terabee.com/shop/lidar-tof-range-finders/teraranger-evo-60m/) (0.5 – 60 m) -- [TeraRanger Evo 600Hz](https://www.terabee.com/shop/lidar-tof-range-finders/teraranger-evo-600hz/) (0.75 - 8 m) +- [TeraRanger Evo 60m](https://tribotix.com/product/teraranger-evo-60m/) (0.5 – 60 m) +- [TeraRanger Evo 600Hz](https://tribotix.com/product/teraranger-evo-600hz/) (0.75 - 8 m) :::info PX4 also supports _TeraRanger One_ (I2C adapter required). diff --git a/docs/uk/sensor/thunderfly_tachometer.md b/docs/uk/sensor/thunderfly_tachometer.md index 5fe8e25ee3..609505db1d 100644 --- a/docs/uk/sensor/thunderfly_tachometer.md +++ b/docs/uk/sensor/thunderfly_tachometer.md @@ -31,7 +31,7 @@ The TFRPM01 sensor is open-source hardware commercially available from [ThunderF Датчики Холла (магнітно-оперовані) ідеально підходять для жорстких умов, де бруд, пил і вода можуть контактувати з відчуваним ротором. Багато різних датчиків ефекту Холла є комерційно доступними. -For example, a [55100 Miniature Flange Mounting Proximity Sensor](https://m.littelfuse.com/media?resourcetype=datasheets&itemid=6d69d457-770e-46ba-9998-012c5e0aedd7&filename=littelfuse-hall-effect-sensors-55100-datasheet) is a good choice. +For example, a [55100 Miniature Flange Mounting Proximity Sensor](https://www.littelfuse.com/assetdocs/littelfuse-hall-effect-sensors-55100-datasheet?assetguid=6d69d457-770e-46ba-9998-012c5e0aedd7) is a good choice. ![Example of Hall effect probe](../../assets/hardware/sensors/tfrpm/hall_probe.jpg) @@ -90,7 +90,7 @@ pcf8583 status ``` Якщо драйвер працює, порт I²C буде надруковано разом з іншими основними параметрами запущеного екземпляру. -Якщо драйвер не працює, його можна запустити за допомогою процедури, описаної вище. +If the driver is not running it can be started using theprocedure described above. The [listener](../modules/modules_command.md#listener) command allows you to monitor RPM UORB messages from the running driver. diff --git a/docs/uk/sensor/vectornav.md b/docs/uk/sensor/vectornav.md index c5544fdd56..0751e65574 100644 --- a/docs/uk/sensor/vectornav.md +++ b/docs/uk/sensor/vectornav.md @@ -42,7 +42,7 @@ PX4 може використовувати це як [зовнішній INS] ( Якщо використовується продукт з підтримкою GNSS, антена GNSS повинна бути жорстко монтуватися щодо інерційного датчика та мати необмежений вид на небо. Якщо використовується продукт з підтримкою двоканальної ГНСС (VN-3X0), друга антена повинна бути жорстко змонтована щодо первинної антени та інерціального датчика з неперешкодженим видом на небо. -Для отримання додаткових вимог і рекомендацій щодо монтажу, див. відповідний [Керівний початок роботи](https://www.vectornav.com/resources/quick-start-guides). +For more mounting requirements and recommendations, see the relevant [Quick Start Guide](https://www.vectornav.com/resources/technical-documentation/quick-start-guides). ## Конфігурація прошивки @@ -82,7 +82,7 @@ PX4 може використовувати це як [зовнішній INS] ( ## Конфігурація VectorNav -Визначення для всіх команд та реєстрів, на які посилаються в цьому розділі, можна знайти в відповідному [VectorNav ICD](https://www.vectornav.com/resources/interface-control-documents). +Definitions for all commands and registers referenced in this section can be found in the respective [VectorNav ICD](https://www.vectornav.com/resources/technical-documentation/interface-control-documents). Під час ініціалізації PX4 налаштовує пристрій VectorNav наступним чином: @@ -137,5 +137,5 @@ PX4 може використовувати це як [зовнішній INS] ( ## Характеристики обладнання -- [Короткі описи продуктів](https://www.vectornav.com/resources/product-briefs) -- [Документи з даними](https://www.vectornav.com/resources/datasheets) +- [Product Briefs](https://www.vectornav.com/resources/product-information/product-briefs) +- [Datasheets](https://www.vectornav.com/resources/technical-documentation/datasheets) diff --git a/docs/uk/sensor_bus/translator_tfi2cadt.md b/docs/uk/sensor_bus/translator_tfi2cadt.md index 596035c247..63e97dda33 100644 --- a/docs/uk/sensor_bus/translator_tfi2cadt.md +++ b/docs/uk/sensor_bus/translator_tfi2cadt.md @@ -13,7 +13,7 @@ The module has an input and an output side and a sensor is connected to the mast :::info [TFI2CADT01](https://github.com/ThunderFly-aerospace/TFI2CADT01) is designed as open-source hardware with GPLv3 license. -It is commercially available from [ThunderFly](https://www.thunderfly.cz/) company or from [Tindie eshop](https://www.tindie.com/products/26353/). +It is commercially available from [ThunderFly](https://www.thunderfly.cz/) company or from [Tindie eshop](https://www.tindie.com/products/thunderfly/tfi2cadt01-pixhawk-i2c-address-translator/). ::: ## Метод перетворення адрес @@ -30,7 +30,7 @@ TFI2CADT01 виконує операцію XOR на викликаній адр The tachometer sensor [TFRPM01](../sensor/thunderfly_tachometer.md) can be set to two different addresses using a solder jumper. If the autopilot has three buses, only 6 sensors can be connected and no bus remains free (2 available addresses \* 3 I2C ports). У деяких мультикоптерах або рішеннях VTOL є необхідність вимірювати оберти хвилину RPM 8 або більше елементів. -The [TFI2CADT01](https://www.tindie.com/products/26353/) is highly recommended in this case. +The [TFI2CADT01](https://www.tindie.com/products/thunderfly/tfi2cadt01-pixhawk-i2c-address-translator/) is highly recommended in this case. ![Multiple sensors](../../assets/peripherals/i2c_tfi2cadt/tfi2cadt01_multi_tfrpm01.jpg) diff --git a/docs/uk/sim_gazebo_classic/index.md b/docs/uk/sim_gazebo_classic/index.md index d4a131c6ae..4a081864c3 100644 --- a/docs/uk/sim_gazebo_classic/index.md +++ b/docs/uk/sim_gazebo_classic/index.md @@ -347,7 +347,7 @@ The video below shows that the location of the environment is aligned with the w For extended development sessions it might be more convenient to start Gazebo Classic and PX4 separately or even from within an IDE. -In addition to the existing cmake targets that run `sitl_run.sh` with parameters for px4 to load the correct model it creates a launcher targets named `px4_` that is a thin wrapper around original sitl px4 app. +In addition to the existing cmake targets that run `sitl_run.sh` with parameters for PX4 to load the correct model it creates a launcher targets named `px4_` that is a thin wrapper around original sitl PX4 app. This thin wrapper simply embeds app arguments like current working directories and the path to the model file. To start Gazebo Classic and PX4 separately: @@ -368,7 +368,7 @@ To start Gazebo Classic and PX4 separately: - Start the debug session directly from IDE -This approach significantly reduces the debug cycle time because simulator is always running in background and you only re-run the px4 process which is very light. +This approach significantly reduces the debug cycle time because simulator is always running in background and you only re-run the PX4 process which is very light. ## Simulated Survey Camera diff --git a/docs/uk/sim_gazebo_gz/gazebo_models.md b/docs/uk/sim_gazebo_gz/gazebo_models.md index 0bbaa35775..d4dc771188 100644 --- a/docs/uk/sim_gazebo_gz/gazebo_models.md +++ b/docs/uk/sim_gazebo_gz/gazebo_models.md @@ -44,8 +44,8 @@ python simulation-gazebo --overwrite Там введіть "resource spawner" та у "Fuel resources" додайте власника "px4". Ви можете перетягнути будь-яку PX4 модель у вашу симуляцію. - :::info - Ці моделі взяті з вебсервера, який називається [Gazebo Fuel](https://app.gazebosim.org/dashboard), що по суті діє як онлайн база всіх світів та типів моделей, які можуть бути запущені у Gazebo. + ::: info + These models are taken from an web-server called [Gazebo Fuel](https://app.gazebosim.org/PX4), which essentially acts as an online database for all types of models and worlds that can be launched in Gazebo. ::: diff --git a/docs/uk/sim_gazebo_gz/index.md b/docs/uk/sim_gazebo_gz/index.md index e2f0cd5637..71486775ac 100644 --- a/docs/uk/sim_gazebo_gz/index.md +++ b/docs/uk/sim_gazebo_gz/index.md @@ -5,7 +5,7 @@ Gazebo was previously known as "Gazebo Ignition" (while _Gazebo Classic_ was pre See the [official blog post](https://www.openrobotics.org/blog/2022/4/6/a-new-era-for-gazebo) for more information. ::: -[Gazebo](https://gazebosim.org/home) is an open source robotics simulator. +[Gazebo](https://gazebosim.org/docs/latest/getstarted/) is an open source robotics simulator. It supersedes the older [Gazebo Classic](../sim_gazebo_classic/index.md) simulator, and is the only supported version of Gazebo for Ubuntu 22.04 and onwards. **Supported Vehicles:** Quadrotor, Plane, VTOL, Rover @@ -303,7 +303,7 @@ where `ARGS` is a list of environment variables including: - `PX4_GZ_FOLLOW_OFFSET_X`, `PX4_GZ_FOLLOW_OFFSET_Y`, `PX4_GZ_FOLLOW_OFFSET_Z`: Set the relative offset of the follow camera to the vehicle. -The PX4 Gazebo worlds and and models databases [can be found on GitHub here](https://github.com/PX4/PX4-gazebo-models). +The PX4 Gazebo worlds and models databases [can be found on GitHub here](https://github.com/PX4/PX4-gazebo-models). :::info `gz_env.sh.in` is compiled and made available in `$PX4_DIR/build/px4_sitl_default/rootfs/gz_env.sh` diff --git a/docs/uk/sim_gazebo_gz/tools_avl_automation.md b/docs/uk/sim_gazebo_gz/tools_avl_automation.md index 80e32b4bb8..9d68a55902 100644 --- a/docs/uk/sim_gazebo_gz/tools_avl_automation.md +++ b/docs/uk/sim_gazebo_gz/tools_avl_automation.md @@ -121,7 +121,7 @@ The parameters have not been verified by an expert, so you should check them in | CYa | CYa | dCy/da (нахил бічної сили відносно кута атаки) | | Cla | Cell | dCl/da (нахил моменту крену відносно кута атаки) | | Cma | Cema | dCm/da (нахил моменту тангажу відносно кута атаки - до звалювання) | -| Cna | Cena | dCn/da (нахил моменту рискання відносно кута атаки) | +| Can | Cena | dCn/da (нахил моменту рискання відносно кута атаки) | | CLb | CLb | dCL/dbeta (нахил коефіцієнту сили підйому відносно кута ковзання) | | CYb | CYb | dCY/dbeta (нахил бічної сили відносно кута ковзання) | | Clb | Cell | dCl/dbeta (нахил моменту крену відносно кута ковзання) | diff --git a/docs/uk/sim_gazebo_gz/vehicles.md b/docs/uk/sim_gazebo_gz/vehicles.md index 1660045bed..513903b423 100644 --- a/docs/uk/sim_gazebo_gz/vehicles.md +++ b/docs/uk/sim_gazebo_gz/vehicles.md @@ -8,7 +8,7 @@ Supported vehicle types include: mutirotor, VTOL, Plane, Rover. :::warning See [Gazebo Classic Vehicles](../sim_gazebo_classic/vehicles.md) for vehicles that work with the older [Gazebo "Classic" simulation](../sim_gazebo_classic/index.md). -Note that vehicle models are not interchangable between the two versions of the simulator: the vehicles on this page only work with (new) [Gazebo](../sim_gazebo_gz/index.md). +Note that vehicle models are not interchangeable between the two versions of the simulator: the vehicles on this page only work with (new) [Gazebo](../sim_gazebo_gz/index.md). ::: ## Мультикоптер diff --git a/docs/uk/sim_gazebo_gz/worlds.md b/docs/uk/sim_gazebo_gz/worlds.md index c9d3636fb6..db74f136b0 100644 --- a/docs/uk/sim_gazebo_gz/worlds.md +++ b/docs/uk/sim_gazebo_gz/worlds.md @@ -104,4 +104,4 @@ The PX4 toolchain will automatically spawn a world that has the same name as the Світи певних моделей: -- [Aruco world](#aruco): Default world with an [ArUco marker](https://docs.opencv.org/4.x/d5/dae/tutorial_aruco_detection.html) that can be used with with [x500_mono_cam_down](../sim_gazebo_gz/vehicles.md#x500-quadrotor-with-monocular-camera-down-facing) for testing [precision landing](../advanced_features/precland.md). +- [Aruco world](#aruco): Default world with an [ArUco marker](https://docs.opencv.org/4.x/d5/dae/tutorial_aruco_detection.html) that can be used with [x500_mono_cam_down](../sim_gazebo_gz/vehicles.md#x500-quadrotor-with-monocular-camera-down-facing) for testing [precision landing](../advanced_features/precland.md). diff --git a/docs/uk/sim_hawkeye/index.md b/docs/uk/sim_hawkeye/index.md new file mode 100644 index 0000000000..85309d62e4 --- /dev/null +++ b/docs/uk/sim_hawkeye/index.md @@ -0,0 +1,61 @@ +# Hawkeye Visualizer + +[Hawkeye](https://px4.github.io/Hawkeye/) is a real-time 3D flight _visualizer_ for PX4. + +Hawkeye is the natural pair for [SIH](../sim_sih/index.md) — SIH runs the physics of an aircraft simulation and outputs MAVLink [HIL_STATE_QUATERNION](https://mavlink.io/en/messages/common.html#HIL_STATE_QUATERNION) messages, Hawkeye uses these to show you what's happening. + +Hawkeye has zero runtime dependencies, supports up to 16 vehicles simultaneously, and can replay PX4 ULog (`.ulg`) flight logs with transport controls, markers, and multi-drone correlation analysis. + +## Встановлення + +### macOS (Homebrew) + +```sh +brew tap PX4/px4 +brew install PX4/px4/hawkeye +``` + +### Linux (Debian/Ubuntu) + +Download the `.deb` from the [Hawkeye releases page](https://github.com/PX4/Hawkeye/releases/latest): + +```sh +sudo dpkg -i hawkeye-*.deb +``` + +### Windows and source builds + +For Ubuntu 24.04 or later in WSL2 you can install the packages in the same way: + +```sh +sudo dpkg -i hawkeye-*.deb +``` + +For other versions of Ubuntu (or native Windows builds) you may need to [Build from source](https://px4.github.io/Hawkeye/developer/build) (Hawkeye docs). + +## Usage with SIH + +Start PX4 SIH, then launch Hawkeye in a separate terminal: + +```sh +# Terminal 1 +make px4_sitl sihsim_quadx + +# Terminal 2 +hawkeye +``` + +Hawkeye listens on UDP port 19410 — the same port SIH sends [HIL_STATE_QUATERNION](https://mavlink.io/en/messages/common.html#HIL_STATE_QUATERNION) on — so no configuration is needed. +The vehicle appears in the Hawkeye window as soon as SIH starts streaming. + +For fixed-wing or tailsitter simulation, Hawkeye auto-detects the vehicle type from MAVLink `HEARTBEAT` and loads the matching 3D model. + +## Full documentation + +Complete documentation — including multi-vehicle SITL, ULog replay, HUD modes, camera controls, and correlation analysis — lives at **[px4.github.io/Hawkeye](https://px4.github.io/Hawkeye/)**. + +- [First SITL run](https://px4.github.io/Hawkeye/first-sitl) — the shortest path from install to seeing a vehicle move +- [Multi-Drone Replay](https://px4.github.io/Hawkeye/multi_drone) — compare multiple flights with deconfliction and correlation +- [Live SITL Integration](https://px4.github.io/Hawkeye/sitl) — single-vehicle and multi-instance swarm workflows +- [Command-Line Reference](https://px4.github.io/Hawkeye/cli) — every CLI flag with examples +- [Source code](https://github.com/PX4/Hawkeye) diff --git a/docs/uk/sim_jmavsim/index.md b/docs/uk/sim_jmavsim/index.md index 2b92535f04..e4c3836739 100644 --- a/docs/uk/sim_jmavsim/index.md +++ b/docs/uk/sim_jmavsim/index.md @@ -22,37 +22,31 @@ jMAVSim can also be used for HITL Simulation ([as shown here](../simulation/hitl ## Встановлення -jMAVSim setup is included in our [standard build instructions](../dev_setup/dev_env.md) for Ubuntu Linux and Windows. -Follow the instructions below to install jMAVSim on macOS. +jMAVSim requires JDK 17 or later. +On Ubuntu and Windows, the [standard development environment setup](../dev_setup/dev_env.md) scripts install all required dependencies including Java. +On macOS, you need to install Java manually as shown below. ### macOS -To setup the environment for [jMAVSim](../sim_jmavsim/index.md) simulation: +jMAVSim requires OpenJDK 17 or later. +Install it via Homebrew: -1. Install a recent version of Java (e.g. Java 15). - You can download [Java 15 (or later) from Oracle](https://www.oracle.com/java/technologies/downloads/?er=221886) or use [Eclipse Temurin](https://adoptium.net): +```sh +brew install openjdk@17 +``` - ```sh - brew install --cask temurin - ``` +Homebrew installs OpenJDK but does not link it into your `PATH`, so you need to set `JAVA_HOME` for jMAVSim to find it. +Add this to your shell profile (e.g. `~/.zshrc`): -2. Install jMAVSim: - - ```sh - brew install px4-sim-jmavsim - ``` - - :::warning - PX4 v1.11 and beyond require at least JDK 15 for jMAVSim simulation. - - For earlier versions, macOS users might see the error `Exception in thread "main" java.lang.UnsupportedClassVersionError:`. - You can find the fix in the [jMAVSim with SITL > Troubleshooting](../sim_jmavsim/index.md#troubleshooting)). - -::: +```sh +export JAVA_HOME=$(/usr/libexec/java_home -v 17) +``` ## Середовище симуляції -Симуляція програмного забезпечення в петлі виконує повну систему на комп'ютері та моделює автопілот. Він підключається через локальну мережу до симулятора. Вигляд налаштування виглядає наступним чином: +Симуляція програмного забезпечення в петлі виконує повну систему на комп'ютері та моделює автопілот. +Він підключається через локальну мережу до симулятора. +Вигляд налаштування виглядає наступним чином: [![Mermaid graph: SITL Simulator](https://mermaid.ink/img/eyJjb2RlIjoiZ3JhcGggTFI7XG4gIFNpbXVsYXRvci0tPk1BVkxpbms7XG4gIE1BVkxpbmstLT5TSVRMOyIsIm1lcm1haWQiOnsidGhlbWUiOiJkZWZhdWx0In0sInVwZGF0ZUVkaXRvciI6ZmFsc2V9)](https://mermaid-js.github.io/mermaid-live-editor/#/edit/eyJjb2RlIjoiZ3JhcGggTFI7XG4gIFNpbXVsYXRvci0tPk1BVkxpbms7XG4gIE1BVkxpbmstLT5TSVRMOyIsIm1lcm1haWQiOnsidGhlbWUiOiJkZWZhdWx0In0sInVwZGF0ZUVkaXRvciI6ZmFsc2V9) @@ -95,7 +89,8 @@ It will also bring up a window showing a 3D view of the [jMAVSim](https://github ## Підйом у небо -Система почне друкувати інформацію про статус. You will be able to start flying once you have a position lock (shortly after the console displays the message: _EKF commencing GPS fusion_). +Система почне друкувати інформацію про статус. +You will be able to start flying once you have a position lock (shortly after the console displays the message: _EKF commencing GPS fusion_). Щоб злітіти, введіть наступне у консоль: @@ -220,11 +215,13 @@ To disable lockstep in: ## Розширення та персоналізація -To extend or customize the simulation interface, edit the files in the **Tools/jMAVSim** folder. The code can be accessed through the[jMAVSim repository](https://github.com/px4/jMAVSim) on Github. +To extend or customize the simulation interface, edit the files in the **Tools/jMAVSim** folder. +The code can be accessed through the[jMAVSim repository](https://github.com/px4/jMAVSim) on Github. :::info The build system enforces the correct submodule to be checked out for all dependencies, including the simulator. -Це не перезапише зміни в файлах у каталозі, проте, коли ці зміни будуть зафіксовані, підмодуль повинен бути зареєстрований у репозиторії Firmware з новим хешем коміту. To do so, `git add Tools/jMAVSim` and commit the change. +Це не перезапише зміни в файлах у каталозі, проте, коли ці зміни будуть зафіксовані, підмодуль повинен бути зареєстрований у репозиторії Firmware з новим хешем коміту. +To do so, `git add Tools/jMAVSim` and commit the change. Це оновить хеш GIT симулятора. ::: @@ -237,6 +234,75 @@ The simulation can be [interfaced to ROS](../simulation/ros_interface.md) the sa - The startup scripts are discussed in [System Startup](../concept/system_startup.md). - The simulated root file system ("`/`" directory) is created inside the build directory here: `build/px4_sitl_default/rootfs`. +## Display-Only Mode + +jMAVSim can run as a display-only renderer for other simulators (like [SIH](../sim_sih/index.md)), with its internal physics disabled. +In this mode, jMAVSim receives vehicle position via MAVLink and only renders the 3D view. + +To use jMAVSim as a display for SIH running in SITL: + +```sh +# Start SIH first +make px4_sitl_sih sihsim_quadx + +# In another terminal, start jMAVSim in display-only mode +./Tools/simulation/jmavsim/jmavsim_run.sh -p 19410 -u -q -o # 19410 is the default SIH display port +``` + +For SIH running on flight controller hardware: + +```sh +./Tools/simulation/jmavsim/jmavsim_run.sh -q -d /dev/ttyACM0 -b 2000000 -o +``` + +Use `-a` for airplane display or `-t` for tailsitter display. + +## Command-Line Reference + +The `jmavsim_run.sh` launch script accepts the following flags: + +| Flag | Опис | +| ------------- | -------------------------------------------------------------------------------------------- | +| `-b ` | Serial baud rate (default: 921600) | +| `-d ` | Serial device path (e.g., `/dev/ttyACM0`) | +| `-u` | Use UDP connection instead of serial | +| `-i ` | Simulated MAVLink system ID | +| `-p ` | UDP port (default: 14560) | +| `-q` | No interactive console | +| `-s ` | TCP serial port | +| `-r ` | Render rate in Hz | +| `-l` | Enable lockstep | +| `-o` | Display-only mode (disable physics, render only) | +| `-a` | Use airplane model | +| `-t` | Use tailsitter model | +| `HEADLESS=1` | Environment variable: run without GUI window | + +## How jMAVSim Works + +jMAVSim is a Java-based lightweight simulator that communicates with PX4 via MAVLink HIL (Hardware-In-the-Loop) messages. + +In normal mode: + +1. PX4 sends actuator commands via [HIL_ACTUATOR_CONTROLS](https://mavlink.io/en/messages/common.html#HIL_ACTUATOR_CONTROLS). +2. jMAVSim runs its physics engine to compute the vehicle state. +3. jMAVSim sends sensor data back via [HIL_SENSOR](https://mavlink.io/en/messages/common.html#HIL_SENSOR) and [HIL_GPS](https://mavlink.io/en/messages/common.html#HIL_GPS). + +In **display-only mode** (`-o` flag), jMAVSim disables its physics engine and only reads [HIL_STATE_QUATERNION](https://mavlink.io/en/messages/common.html#HIL_STATE_QUATERNION) messages to render the vehicle position. +This allows it to visualize vehicles from other simulators like SIH. + +jMAVSim supports [lockstep synchronization](#lockstep) with PX4 (enabled with `-l` flag), ensuring deterministic simulation results. + +## Keyboard Shortcuts + +Camera modes in the jMAVSim 3D view: + +| Key | Camera Mode | +| -------------------------------- | ------------------------------------------------------- | +| **F** | First person (attached to vehicle) | +| **S** | Stationary (fixed position) | +| **G** | Gimbal (follows vehicle orientation) | +| **(default)** | Third person follow | + ## Усунення проблем ### java.long.NoClassDefFoundError @@ -310,7 +376,7 @@ sudo gedit /etc/java-8-openjdk/accessibility.properties та закоментуйте рядок, вказаний нижче: ```sh -#assistive_technologies=org.GNOME.Acessibility.AtkWrapper +#assistive_technologies=org.GNOME.Accessibility.AtkWrapper ``` For more info, check [this GitHub issue](https://github.com/PX4/PX4-Autopilot/issues/9557). @@ -327,8 +393,8 @@ Exception in thread "main" java.lang.UnsupportedClassVersionError: me/drton/jmav Ця помилка говорить вам, вам потрібна більш свіжа версія Java у вашому середовищі. Версія файлу класу 58 відповідає jdk14, версія 59 - jdk15, версія 60 - jdk 16 тощо. -Щоб виправити це під macOS, ми рекомендуємо встановити OpenJDK через homebrew +To fix it under macOS, install a newer OpenJDK via Homebrew: ```sh -brew install --cask adoptopenjdk16 +brew install openjdk@17 ``` diff --git a/docs/uk/sim_sih/hardware.md b/docs/uk/sim_sih/hardware.md new file mode 100644 index 0000000000..aba607b1e3 --- /dev/null +++ b/docs/uk/sim_sih/hardware.md @@ -0,0 +1,183 @@ +# SIH on Flight Controller Hardware + +[SIH](../sim_sih/index.md) can run directly on flight controller hardware with `SYS_AUTOSTART` set to the desired value for the frame. +This replaces real sensors with simulated data while running on the actual autopilot. + +For a comparison of SIH and HITL on hardware, see [Hardware Simulation](../simulation/hardware.md). + +## Starting SIH + +1. Connect the flight controller to QGroundControl via USB. +2. Set `SYS_AUTOSTART` parameter to the desired airframe. +3. Reboot the flight controller. +4. The SIH module starts automatically and provides simulated sensor data. + +:::tip +To ensure there is no leftover parameter from previous setup, it is recommended to reset all the parameters to firmware's default before modifying `SYS_AUTOSTART`. +::: + +The following airframes are supported. + +| SIH Airframe | SYS_AUTOSTART | Status | +| --------------- | ---------------------------------- | ----------------------------- | +| Quadrotor X | 1100 | Stable | +| Airplane | 1101 | Експериментальні налаштування | +| Tailsitter Duo | 1102 | Експериментальні налаштування | +| Standard VTOL | 1103 | Експериментальні налаштування | +| Ackermann Rover | 1104 | Експериментальні налаштування | +| Hexacopter X | 1105 | Експериментальні налаштування | + +Once running, the vehicle can be controlled from QGroundControl or an RC controller. + +## Firmware Builds with SIH + +The SIH module is included in many, but not all, default firmware builds. +This list can change between PX4 releases. +Always verify using the method in [Check if SIH is in Firmware](#check-if-sih-is-in-firmware). + +The table below lists build targets that include SIH at the time of writing: + +| Build Target | Материнська плата | +| ------------------------------------ | ------------------------------------------- | +| `px4_fmu-v3_default` | Pixhawk 2 (Cube Black) | +| `px4_fmu-v4_default` | Pixhawk 3 Pro | +| `px4_fmu-v4pro_default` | Pixracer | +| `px4_fmu-v5_default` | Pixhawk 4 | +| `px4_fmu-v5x_default` | Pixhawk 5X | +| `px4_fmu-v6c_default` | Pixhawk 6C | +| `px4_fmu-v6c_raptor` | Pixhawk 6C (Raptor) | +| `px4_fmu-v6x_multicopter` | Pixhawk 6X (multicopter) | +| `auterion_fmu-v6s_default` | Auterion FMU-v6S | +| `auterion_fmu-v6x_default` | Auterion FMU-v6X | +| `holybro_durandal-v1_default` | Holybro Durandal | +| `holybro_kakuteh7_default` | Holybro Kakute H7 | +| `holybro_kakuteh7v2_default` | Holybro Kakute H7 V2 | +| `holybro_pix32v5_default` | Holybro Pix32 V5 | +| `cuav_nora_default` | CUAV Nora | +| `cuav_x7pro_default` | CUAV X7 Pro | +| `cuav_x25-evo_default` | CUAV X25 EVO | +| `cuav_x25-super_default` | CUAV X25 Super | +| `cubepilot_cubeyellow_default` | CubePilot Cube Yellow | +| `mro_pixracerpro_default` | MRO PixRacer Pro | +| `mro_x21_default` | MRO X2.1 | +| `mro_ctrl-zero-h7_default` | MRO Ctrl Zero H7 | +| `mro_ctrl-zero-h7-oem_default` | MRO Ctrl Zero H7 OEM | +| `mro_ctrl-zero-f7_default` | MRO Ctrl Zero F7 | +| `mro_ctrl-zero-f7-oem_default` | MRO Ctrl Zero F7 OEM | +| `mro_ctrl-zero-classic_default` | MRO Ctrl Zero Classic | +| `3dr_ctrl-zero-h7-oem-revg_default` | 3DR Ctrl Zero H7 OEM RevG | +| `modalai_fc-v1_default` | ModalAI FC V1 | +| `nxp_fmuk66-v3_default` | NXP FMUK66-V3 | +| `nxp_fmuk66-e_default` | NXP FMUK66-E | +| `radiolink_PIX6_default` | Radiolink PIX6 | +| `siyi_n7_default` | SIYI N7 | +| `sky-drones_smartap-airlink_default` | Sky-Drones SmartAP Airlink | +| `uvify_core_default` | UVify Core | +| `atl_mantis-edu_default` | ATL Mantis EDU | +| `av_x-v1_default` | AV X-V1 | +| `narinfc_h7_default` | NarinFC H7 | +| `thepeach_k1_default` | ThePeach K1 | +| `thepeach_r1_default` | ThePeach R1 | +| `airmind_mindpx-v2_default` | AirMind MindPX V2 | +| `beaglebone_blue_default` | BeagleBone Blue | +| `bluerobotics_navigator_default` | BlueRobotics Navigator | +| `emlid_navio2_default` | Emlid Navio2 | +| `px4_raspberrypi_default` | Raspberry Pi | +| `scumaker_pilotpi_default` | Scumaker PilotPi | + +:::info +Some boards (e.g., `px4_fmu-v6x_default`, `cubepilot_cubeorange_default`) do not include SIH in their default build due to flash memory constraints. +You can add SIH to any board -- see [Check if SIH is in Firmware](#check-if-sih-is-in-firmware). +::: + +## Вимоги + +- A flight controller with SIH module included in firmware (see [Firmware Builds with SIH](#firmware-builds-with-sih)). +- USB connection for QGroundControl. +- Optional: jMAVSim for 3D visualization via serial link (see [Visualization](#hardware-visualization)). + +## Check if SIH is in Firmware + +SIH is included in [most default firmware builds](#check-if-sih-is-in-firmware). +To verify, search for `sih` in the parameter list in QGroundControl. If `SIH_*` parameters are available, the module is included. + +To add SIH to a custom build, enable it in the board configuration: + +```txt +CONFIG_MODULES_SIMULATION_SIMULATOR_SIH=y +``` + +## Visualization (Optional) {#hardware-visualization} + +If you need a visual aid to see what the simulated vehicle is doing on hardware: + +### QGroundControl + +Connect the flight controller via USB. QGC shows the vehicle on the map view with attitude, position, and telemetry, the same as a real flight. + +### jMAVSim (3D Display-Only) + +jMAVSim can render a 3D view of the vehicle over a serial connection. No physics are simulated in jMAVSim -- it is display-only. + +```sh +./Tools/simulation/jmavsim/jmavsim_run.sh -q -d /dev/ttyACM0 -b 2000000 -o +``` + +Where `/dev/ttyACM0` is the serial device for the flight controller. +On macOS, this is typically `/dev/tty.usbmodem*`. + +## Controlling Actuators + +:::warning +If you want to control throttle actuators in SIH, make sure to remove propellers for safety. +::: + +In some scenarios, it may be useful to control an actuator while running SIH on hardware. For example, you might want to verify that winches or grippers are functioning correctly by checking the servo responses. + +**To enable actuator control in SIH:** + +1. Configure PWM parameters in the airframe file: + + Ensure your airframe file includes the necessary parameters to map PWM outputs to the correct channels. + + For example, if a servo is connected to MAIN 3 and you want to map it to AUX1 on your RC, use the following command: + + `param set-default PWM_MAIN_FUNC3 407` + + You can find a full list of available values for `PWM_MAIN_FUNCn` [here](../advanced_config/parameter_reference.md#PWM_MAIN_FUNC1). In this case, `407` maps the MAIN 3 output to AUX1 on the RC. + + Alternatively, you can use the [`PWM_AUX_FUNCn`](../advanced_config/parameter_reference.md#PWM_AUX_FUNC1) parameters. + + You may also configure the output as desired: + + - Disarmed PWM: ([`PWM_MAIN_DISn`](../advanced_config/parameter_reference.md#PWM_MAIN_DIS1) / [`PWM_AUX_DIS1`](../advanced_config/parameter_reference.md#PWM_AUX_DIS1)) + - Minimum PWM ([`PWM_MAIN_MINn`](../advanced_config/parameter_reference.md#PWM_MAIN_MIN1) / [`PWM_AUX_MINn`](../advanced_config/parameter_reference.md#PWM_AUX_MIN1)) + - Maximum PWM ([`PWM_MAIN_MAXn`](../advanced_config/parameter_reference.md#PWM_MAIN_MAX1) / [`PWM_AUX_MAXn`](../advanced_config/parameter_reference.md#PWM_AUX_MAX1)) + +2. Manually start the PWM output driver + + For safety, the PWM driver is not started automatically in SIH. To enable it, run the following command in the MAVLink shell: + + ```sh + pwm_out start + ``` + + **And to disable it again:** + + ```sh + pwm_out stop + ``` + +## Adding New Airframes (FC) + +Airframe configuration for SIH on a flight controller differs from SITL in a few ways: + +- Airframe file goes in `ROMFS/px4fmu_common/init.d/airframes` and follows the naming template `${ID}_${model_name}.hil`, where `ID` is the `SYS_AUTOSTART_ID` used to select the airframe, and `model_name` is the airframe model name. +- Add the model name in `ROMFS/px4fmu_common/init.d/airframes/CMakeLists.txt` to generate a corresponding make target. +- Actuators are configured with `HIL_ACT_FUNC*` parameters (not the usual `PWM_MAIN_FUNC*` parameters). + This is to avoid using the real actuator outputs in SIH. + Similarly, the bitfield for inverting individual actuator output ranges is `HIL_ACT_REV`, rather than `PWM_MAIN_REV`. + +For general airframe setup (SIH parameters, EKF2 tuning), see [Adding New Airframes](index.md#adding-new-airframes) on the main SIH page. + +For examples, see the `.hil` airframes in [ROMFS/px4fmu_common/init.d/airframes](https://github.com/PX4/PX4-Autopilot/tree/main/ROMFS/px4fmu_common/init.d/airframes). diff --git a/docs/uk/sim_sih/index.md b/docs/uk/sim_sih/index.md index e94df82509..90d982fd29 100644 --- a/docs/uk/sim_sih/index.md +++ b/docs/uk/sim_sih/index.md @@ -1,288 +1,231 @@ -# Моделювання в апаратному забезпеченні (SIH) +# SIH Simulation - + -:::warning -This simulator is [community supported and maintained](../simulation/community_supported_simulators.md). -It may or may not work with current versions of PX4 (known to work in PX4 v1.14). +SIH (Simulation-In-Hardware) is a lightweight, headless simulator with zero external dependencies that runs physics directly inside PX4 via uORB messages. +No GUI, no external processes, no rendering overhead — just PX4 running a C++ physics model. +This makes it the fastest way to iterate on flight code. -Дивіться [Встановлення інструментарію](../dev_setup/dev_env.md) для інформації про середовища та інструменти, що підтримуються основною командою розробників. +:::tip +SIH is also available as a [prebuilt Docker container or .deb package](../simulation/px4_sitl_prebuilt_packages.md), which is useful if you don't need to modify PX4 itself. +See [PX4 Simulation QuickStart](../simulation/px4_simulation_quickstart.md) for a one-line instruction on how this is used. ::: -Simulation-In-Hardware (SIH) is an alternative to [Hardware In The Loop simulation (HITL)](../simulation/hitl.md) for quadrotors, fixed-wing vehicles (airplane), and VTOL tailsitters. - -SIH can be used by new PX4 users to get familiar with PX4 and the different modes and features, and of course to learn to fly a vehicle using an RC controller in simulation, which is not possible using SITL. - ## Загальний огляд -With SIH the whole simulation is running on embedded hardware: the controller, the state estimator, and the simulator. -The Desktop computer is only used to display the virtual vehicle. +SIH runs as a PX4 module that replaces real sensor and actuator hardware with a simulated physics model. +It provides simulated IMU, GPS, barometer, magnetometer, and airspeed sensor data via uORB, and reads actuator outputs to update the vehicle state at each timestep. -![Simulator MAVLink API](../../assets/diagrams/SIH_diagram.png) +The simulation runs in lockstep with PX4, ensuring deterministic and reproducible results. +It also integrates seamlessly with ROS 2 with no additional configuration (see [ROS 2 Integration](#ros-2-integration) below). -### Сумісність +Two modes are supported: -- SIH is compatible with all PX4 supported boards except those based on FMUv2. -- SIH for MC quadrotor is supported from PX4 v1.9. -- SIH for FW (airplane) and VTOL tailsitter are supported from PX4 v1.13. -- SIH як SITL (без апаратного забезпечення) з версії PX4 v1.14. -- SIH for Standard VTOL from PX4 v1.16. -- SIH for MC Hexacopter X from PX4 v1.17. -- SIH for Ackermann Rover from PX4 v1.17. +- **[SITL](#sih-as-sitl-no-fc):** Runs on your computer with no hardware needed, and headless (without a UI) by default. + _This is the fastest and easiest way to start a simulation on PX4._ -### Переваги +- **[SIH on flight controller hardware](#sih-on-flight-controller-hardware):** Runs the entire simulation on the autopilot (`SYS_HITL=2`). -SIH provides several benefits over HITL: +### Supported Vehicle Types -- Він забезпечує синхронізований час, уникаючи двостороннього з'єднання з комп'ютером. - В результаті користувачеві не потрібен такий потужний настільний комп'ютер. -- Усе моделювання залишається в середовищі PX4. - Розробники, які знайомі з PX4, можуть легше включити свою власну математичну модель в симулятор. - Вони, наприклад, можуть змінити аеродинамічну модель або рівень шуму датчиків, або навіть додати датчик для симуляції. -- The physical parameters representing the vehicle (such as mass, inertia, and maximum thrust force) can easily be modified from the [SIH parameters](../advanced_config/parameter_reference.md#simulation-in-hardware). +The following vehicle types are supported: -## Вимоги - -To run the SIH, you will need a: - -- [Flight controller](../flight_controller/index.md), such as a Pixhawk-series board. - - ::: info - From PX4 v1.14 you can run [SIH "as SITL"](#sih-as-sitl-no-fc), in which case a flight controller is not required. - -::: - -- [Manual controller](../getting_started/px4_basic_concepts.md#manual-control): either a [radio control system](../getting_started/rc_transmitter_receiver.md) or a [joystick](../config/joystick.md). - -- QGroundControl for flying the vehicle via GCS. - -- Development computer for visualizing the virtual vehicle (optional). - -## Check if SIH is in Firmware - -The modules required for SIH are built into most PX4 firmware by default. -These include: [`pwm_out_sim`](../modules/modules_driver.md#pwm-out-sim), [`sensor_baro_sim`](../modules/modules_system.md#sensor-baro-sim), [`sensor_gps_sim`](../modules/modules_system.md#sensor-gps-sim) and [`sensor_mag_sim`](../modules/modules_system.md#sensor-mag-sim). - -To check that these are present on your flight controller: - -1. Запустіть QGroundControl. - -2. Open **Analyze Tools > Mavlink Console**. - -3. Enter the following commands in the console: - - ```sh - pwm_out_sim status - ``` - - ```sh - sensor_baro_sim status - ``` - - ```sh - sensor_gps_sim status - ``` - - ```sh - sensor_mag_sim status - ``` - - ::: tip - Note that when using SIH on real hardware you do not need to additionally enable the modules using their corresponding parameters ([SENS_EN_GPSSIM](../advanced_config/parameter_reference.md#SENS_EN_GPSSIM), [SENS_EN_BAROSIM](../advanced_config/parameter_reference.md#SENS_EN_BAROSIM), [SENS_EN_MAGSIM](../advanced_config/parameter_reference.md#SENS_EN_MAGSIM)). - -::: - -4. If a valid status is returned you can start using SIH. - -If any of the returned values above are `nsh: MODULENAME: command not found`, then you don't have the module installed. -In this case you will have to add them to your board configuration and then rebuild and install the firmware. - -### Adding SIH to the Firmware - -Add the following key to the configuration file for your flight controller to include all the required modules (for an example see [boards/px4/fmu-v6x/default.px4board](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/fmu-v6x/default.px4board)). -Then re-build the firmware and flash it to the board. - -```text -CONFIG_MODULES_SIMULATION_SIMULATOR_SIH=y -``` - -:::details -What does this do? - -This installs the dependencies in [simulator_sih/Kconfig](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/simulation/simulator_sih/Kconfig). -It is equivalent to: - -```text -CONFIG_MODULES_SIMULATION_PWM_OUT_SIM=y -CONFIG_MODULES_SIMULATION_SENSOR_BARO_SIM=y -CONFIG_MODULES_SIMULATION_SENSOR_GPS_SIM=y -CONFIG_MODULES_SIMULATION_SENSOR_MAG_SIM=y -``` - -::: - -As an alterative to updating configuration files manually, you can use the following command to launch a GUI configuration tool, and interactively enable the required modules at the path: **modules > Simulation > simulator_sih**. -For example, to update the fmu-v6x configuration you would use: - -```sh -make px4_fmu-v6x boardconfig -``` - -After uploading, check that the required modules are present. - -:::note -To use rover in SIH you must use the [rover build](../config_rover/index.md#flashing-the-rover-build) or add the rover modules to your board configuration. -::: - -## Starting SIH - -To set up/start SIH: - -1. Connect the flight controller to the desktop computer with a USB cable. -2. Відкрийте QGroundControl і зачекайте, поки контролер польоту також завантажиться та підключиться. -3. Open [Vehicle Setup > Airframe](../config/airframe.md) then select the desired frame: - - [SIH Quadcopter X](../airframes/airframe_reference.md#copter_simulation_sih_quadcopter_x) - - **SIH Hexacopter X** (currently only has an airframe for SITL to safe flash so on flight control hardware it has to be manually configured equivalently). - - [SIH plane AERT](../airframes/airframe_reference.md#plane_simulation_sih_plane_aert) - - [SIH Tailsitter Duo](../airframes/airframe_reference.md#vtol_simulation_sih_tailsitter_duo) - - [SIH Standard VTOL QuadPlane](../airframes/airframe_reference.md#vtol_simulation_sih_standard_vtol_quadplane) - - [SIH Ackermann Rover](../airframes/airframe_reference.md#rover_rover_sih_rover_ackermann) - -Потім автопілот перезавантажиться. -The `sih` module is started on reboot, and the vehicle should be displayed on the ground control station map. +| Транспортний засіб | Make Target | Status | +| ---------------------------------------------------------------------------------- | ---------------------------------------- | ----------------------------- | +| Quadrotor X | `make px4_sitl_sih sihsim_quadx` | Stable | +| Hexarotor X | `make px4_sitl_sih sihsim_hexa` | Експериментальні налаштування | +| Fixed-wing (airplane) | `make px4_sitl_sih sihsim_airplane` | Експериментальні налаштування | +| Tailsitter VTOL | `make px4_sitl_sih sihsim_xvert` | Експериментальні налаштування | +| Standard VTOL (QuadPlane) | `make px4_sitl_sih sihsim_standard_vtol` | Експериментальні налаштування | +| Ackermann Rover | `make px4_sitl_sih sihsim_rover` | Експериментальні налаштування | :::warning -The airplane needs to takeoff in manual mode at full throttle. -Крім того, якщо літак розбився, оцінювач стану може втратити своє виправлення. +Only the quadrotor vehicle type is stable and recommended for development. All other vehicle types (hexarotor, fixed-wing, VTOL, rover) are experimental and may have aerodynamic model or controller interaction issues that produce unrealistic flight behaviour. ::: -## Display/Visualisation (optional) +### How SIH Works -The SIH-simulated vehicle can be displayed using [jMAVSim](../sim_jmavsim/index.md) as a visualiser. +![SIH Overview](../../assets/simulation/sih_overview.svg) + +SIH differs from external simulators: + +- **No MAVLink simulator API:** SIH communicates entirely via uORB (PX4's internal message bus). +- **No external process:** The physics model runs in the same PX4 process. +- **Lockstep by default:** Simulation time is synchronized with PX4 scheduling. + +## SIH as SITL {#sih-as-sitl-no-fc} + +SIH as SITL is the easiest and fastest way to set up a simulator with PX4. +It requires no hardware, and very few extra dependencies. + +### Швидкий Старт + +To build PX4 and run SIH for a quadrotor: + +```sh +make px4_sitl_sih sihsim_quadx +``` + +QGroundControl auto-connects on UDP port 14550 — just open it and you'll see the vehicle. +Note that the simulation is "headless" by default (has no GUI), but you can use an external viewer. + +See [Supported vehicle types](#supported-vehicle-types) for other vehicles. :::tip -SIH does not _need_ a visualiser — you can connect with QGroundControl and fly the vehicle without one. +Use the `px4_sitl_sih` build target! +The `px4_sitl` target will work, but will also build Gazebo libraries. ::: -Для відображення симульованого транспортного засобу: +### Visualization (Optional) {#sitl-visualization} -1. Close _QGroundControl_ (if open). +SIH is intentionally headless by default. +If you need a visual aid to see what the vehicle is doing you can use QGroundControl to track path over ground, and/or [Hawkeye](../sim_hawkeye/index.md) as a 3D viewer. -2. Відключіть і знову підключіть контролер польоту (дайте декілька секунд на його завантаження). +#### QGroundControl -3. Start jMAVSim by calling the script **jmavsim_run.sh** from a terminal: +QGC auto-connects on UDP port 14550. Open QGC while SIH is running and the vehicle appears on the map view with attitude, position, and telemetry. - ```sh - ./Tools/simulation/jmavsim/jmavsim_run.sh -q -d /dev/ttyACM0 -b 2000000 -o - ``` +#### Hawkeye (3D Visualizer) - де прапорці такі: +[Hawkeye](../sim_hawkeye/index.md) renders a real-time 3D view of the vehicle using MAVLink position data. +No physics are simulated in Hawkeye — it is a visualizer only. - - `-q` to allow the communication to _QGroundControl_ (optional). - - `-d` to start the serial device `/dev/ttyACM0` on Linux. - On macOS this would be `/dev/tty.usbmodem1`. - - `-b` to set the serial baud rate to `2000000`. - - `-o` to start jMAVSim in _display Only_ mode (i.e. the physical engine is turned off and jMAVSim only displays the trajectory given by the SIH in real-time). - - add a flag `-a` to display an aircraft or `-t` to display a tailsitter. - Якщо цей прапорець не вказаний, за замовчуванням відображатиметься квадрокоптер. - -4. After few seconds, _QGroundControl_ can be opened again. - -На цьому етапі систему можна запустити та вивести в польот. -The vehicle can be observed moving in jMAVSim, and on the QGC _Fly_ view. - -## SIH as SITL (no FC) - -SIH можна запустити як SITL (Software-In-The-Loop) з версії 1.14. -What this means is that the simulation code is executed on the laptop/computer instead of a flight controller, similar to Gazebo or jMAVSim. -In this case you don't need the flight controller hardware. - -Для запуску SIH як SITL: - -1. Install the [PX4 Development toolchain](../dev_setup/dev_env.md). -2. Виконайте відповідну команду make для кожного типу транспортного засобу (в корені репозиторію PX4-Autopilot): - - Quadcopter - - ```sh - make px4_sitl sihsim_quadx - ``` - - - Hexacopter - - ```sh - make px4_sitl sihsim_hex - ``` - - - Fixed-wing (plane) - - ```sh - make px4_sitl sihsim_airplane - ``` - - - XVert VTOL tailsitter - - ```sh - make px4_sitl sihsim_xvert - ``` - - - Standard VTOL - - ```sh - make px4_sitl sihsim_standard_vtol - ``` - - - Ackermann Rover - - ```sh - make px4_sitl sihsim_rover_ackermann - ``` - -### Зміна швидкості симуляції - -SITL дозволяє виконувати симуляцію швидше, ніж у реальному часі. -To run the airplane simulation 10 times faster than real time, run the command: +In a separate terminal, run: ```sh -PX4_SIM_SPEED_FACTOR=10 make px4_sitl sihsim_airplane +hawkeye ``` -To display the vehicle in jMAVSim during SITL mode, enter the following command in another terminal: +Hawkeye connects on UDP port 19410 by default (the same port SIH sends `HIL_STATE_QUATERNION` on). +It then auto-detects the vehicle type from the MAVLink `HEARTBEAT` and loads the matching 3D model. + +The [Hawkeye](../sim_hawkeye/index.md) overview page explains how to install the software. +See the [Hawkeye docs](https://px4.github.io/Hawkeye/) for other features, such as ULog replay, and multi-vehicle visualization. + +### Environment Configuration + +#### Зміна швидкості симуляції + +SIH supports faster-than-realtime simulation via the `PX4_SIM_SPEED_FACTOR` environment variable: ```sh -./Tools/simulation/jmavsim/jmavsim_run.sh -p 19410 -u -q -o +# Run at 10x speed +PX4_SIM_SPEED_FACTOR=10 make px4_sitl_sih sihsim_quadx ``` -- add a flag `-a` to display an aircraft or `-t` to display a tailsitter. - Якщо цей прапорець не вказаний, за замовчуванням відображатиметься квадрокоптер. +#### Wind Simulation -### Встановлення власного місця зльоту +SIH supports setting a wind velocity with the PX4 parameters [`SIH_WIND_N`](../advanced_config/parameter_reference.md#SIH_WIND_E) and [`SIH_WIND_E`](../advanced_config/parameter_reference.md#SIH_WIND_E) [m/s]. The parameters can also be changed during flight to simulate changing wind. -The takeoff location in SIH on SITL can be set using environment variables. -This will override the default takeoff location. +#### Встановлення власного місця зльоту -The variables to set are: `PX4_HOME_LAT`, `PX4_HOME_LON`, and `PX4_HOME_ALT`. - -Наприклад: +The default takeoff location can be set using environment variables: ```sh export PX4_HOME_LAT=28.452386 export PX4_HOME_LON=-13.867138 export PX4_HOME_ALT=28.5 -make px4_sitl sihsim_quadx +make px4_sitl_sih sihsim_quadx ``` +### ROS 2 Integration + +SIH works with ROS 2 via the [uXRCE-DDS](../middleware/uxrce_dds.md) client, which auto-starts in SITL mode. +This is the same mechanism used by Gazebo — both simulators expose the same set of uORB topics to ROS 2. +The DDS agent connects on UDP port **8888** by default (configurable via `UXRCE_DDS_PRT` parameter or `PX4_UXRCE_DDS_PORT` environment variable). + +To use SIH with ROS 2: + +1. Start SIH: + + ```sh + make px4_sitl_sih sihsim_quadx + ``` + +2. In a separate terminal, start the Micro XRCE-DDS Agent: + + ```sh + MicroXRCEAgent udp4 -p 8888 + ``` + +See [uXRCE-DDS (PX4-ROS 2/DDS Bridge)](../middleware/uxrce_dds.md) for full setup instructions, including agent installation and ROS 2 workspace configuration. + +### Port Reference + +PX4 SITL opens the following UDP ports (all instance-aware, offset by instance number N). + +| PX4 sends to (remote) | PX4 listens on (local) | Use for | Instance offset | +| ---------------------------------------- | ----------------------------------------- | ------------------------------------------------ | ------------------------------------------------------------ | +| **14550** | 18570 (+N) | QGroundControl, GCS tools | Так | +| **14540** (+N) | 14580 (+N) | MAVSDK, MAVROS, offboard APIs | Yes (capped at 14549 for 10+ instances) | +| **14030** (+N) | 14280 (+N) | Onboard camera/payload | Так | +| **13280** (+N) | 13030 (+N) | Gimbal control | Так | +| **19410** (+N) | 19450 (+N) | Hawkeye visualizer (SIH only) | Так | +| **8888** | - | uXRCE-DDS / ROS 2 | No (use DDS namespace for multi-instance) | + +QGC auto-connects on port **14550** by default. MAVSDK connects on **14540**. No manual port configuration needed for single-instance use. + +### Симуляція кількох рухомих засобів + +SIH supports multi-vehicle simulation using PX4's instance system. +Each instance gets unique MAVLink ports, a unique system ID, and a separate DDS namespace. + +To launch multiple SIH vehicles, first build: + +```sh +make px4_sitl_sih sihsim_quadx +``` + +Then use the multi-instance launch script: + +```sh +./Tools/simulation/sitl_multiple_run.sh 3 sihsim_quadx px4_sitl_sih +``` + +Or launch instances manually: + +```sh +# Terminal 1 (instance 0) +make px4_sitl_sih sihsim_quadx + +# Terminal 2 (instance 1) +./build/px4_sitl_sih/bin/px4 -i 1 -d ./build/px4_sitl_sih/etc + +# Terminal 3 (instance 2) +./build/px4_sitl_sih/bin/px4 -i 2 -d ./build/px4_sitl_sih/etc +``` + +Each instance allocates ports automatically (all offset by instance number): + +| Instance | MAVLink (18570+N) | MAVLink (14540+N) | DDS (8888) Namespace | +| -------- | ------------------------------------ | ------------------------------------ | --------------------------------------- | +| 0 | 18570 | 14540 | (default) | +| 1 | 18571 | 14541 | px4_1 | +| 2 | 18572 | 14542 | px4_2 | + +See [Port Reference](#port-reference) for the complete list of ports. + +## Running the SIH on Flight Controller Hardware {#sih-on-flight-controller-hardware} + +:::info +The SIH on flight controller is community supported. +::: + +SIH can also run on flight controller hardware, replacing real sensors with simulated data while running on the actual autopilot. +See [SIH on Flight Controller Hardware](hardware.md) for setup instructions. + ## Adding New Airframes [Adding a new airframe](../dev_airframes/adding_a_new_frame.md) for use in SIH simulation is much the same as for other use cases. You still need to configure your vehicle type and [geometry](../config/actuators.md) (`CA_` parameters) and start any other defaults for that specific vehicle. :::warning -Not every vehicle can be simulated with SIH — there are currently [four supported vehicle types](../advanced_config/parameter_reference.md#SIH_VEHICLE_TYPE), each of which has a relatively rigid implementation in [`sih.cpp`](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/simulation/simulator_sih/sih.cpp). +Not every vehicle can be simulated with SIH — there are currently [six supported vehicle types](../advanced_config/parameter_reference.md#SIH_VEHICLE_TYPE) (quadcopter, fixed-wing, tailsitter, standard VTOL, hexacopter, rover), each of which has a relatively rigid implementation in [`sih.cpp`](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/simulation/simulator_sih/sih.cpp). ::: The specific differences for SIH simulation airframes are listed in the sections below. -For all variants of SIH: +### All Variants - Set all the [Simulation In Hardware](../advanced_config/parameter_reference.md#simulation-in-hardware) parameters (prefixed with `SIH_`) in order to configure the physical model of the vehicle. @@ -302,17 +245,13 @@ For all variants of SIH: ::: -- `param set-default EKF2_GPS_DELAY 0` to improve state estimator performance (the assumption of instant GPS measurements would normally be unrealistic, but is accurate for SIH). +- `param set-default SENS_GPS0_DELAY 0` to improve state estimator performance (the assumption of instant GPS measurements would normally be unrealistic, but is accurate for SIH). -For SIH on FC: +### SIH on Flight Controller -- Airframe file goes in `ROMFS/px4fmu_common/init.d/airframes` and follows the naming template `${ID}_${model_name}.hil`, where `ID` is the `SYS_AUTOSTART_ID` used to select the airframe, and `model_name` is the airframe model name. -- Add the model name in `ROMFS/px4fmu_common/init.d/airframes/CMakeLists.txt` to generate a corresponding make target. -- Actuators are configured with `HIL_ACT_FUNC*` parameters (not the usual `PWM_MAIN_FUNC*` parameters). - This is to avoid using the real actuator outputs in SIH. - Similarly, the bitfield for inverting individual actuator output ranges is `HIL_ACT_REV`, rather than `PWM_MAIN_REV`. +See [Adding New Airframes (FC)](../sim_sih/hardware.md#adding-new-airframes-fc) in _SIH on Flight Controller Hardware_. -For SIH as SITL (no FC): +### SIH as SITL - Airframe file goes in `ROMFS/px4fmu_common/init.d-posix/airframes` and follows the naming template `${ID}_sihsim_${model_name}`, where `ID` is the `SYS_AUTOSTART_ID` used to select the airframe, and `model_name` is the airframe model name. - Add the model name in `src/modules/simulation/simulator_sih/CMakeLists.txt` to generate a corresponding make target. @@ -326,68 +265,54 @@ For SIH as SITL (no FC): - `param set-default SENS_EN_MAGSIM 1` - `param set-default SENS_EN_ARSPDSIM 1` (if it is a fixed-wing or VTOL airframe with airspeed sensor) -For specific examples see the `_sihsim_` airframes in [ROMFS/px4fmu_common/init.d-posix/airframes](https://github.com/PX4/PX4-Autopilot/blob/main/ROMFS/px4fmu_common/init.d-posix/airframes/) (SIH as SITL) and [ROMFS/px4fmu_common/init.d/airframes](https://github.com/PX4/PX4-Autopilot/tree/main/ROMFS/px4fmu_common/init.d/airframes) (SIH on FC). - -## Controlling Actuators in SIH - -:::warning -If you want to control throttling actuators in SIH, make sure to remove propellers for safety. -::: - -In some scenarios, it may be useful to control an actuator while running SIH. For example, you might want to verify that winches or grippers are functioning correctly by checking the servo responses. - -To enable actuator control in SIH: - -1. Configure PWM parameters in the airframe file: - -Ensure your airframe file includes the necessary parameters to map PWM outputs to the correct channels. - -For example, if a servo is connected to MAIN 3 and you want to map it to AUX1 on your RC, use the following command: - -`param set-default PWM_MAIN_FUNC3 407` - -You can find a full list of available values for `PWM_MAIN_FUNCn` [here](../advanced_config/parameter_reference.md#PWM_MAIN_FUNC1). In this case, `407` maps the MAIN 3 output to AUX1 on the RC. - -Alternatively, you can use the [`PWM_AUX_FUNCn`](../advanced_config/parameter_reference.md#PWM_AUX_FUNC1) parameters. - -You may also configure the output as desired: - -- Disarmed PWM: ([`PWM_MAIN_DISn`](../advanced_config/parameter_reference.md#PWM_MAIN_DIS1) / [`PWM_AUX_DIS1`](../advanced_config/parameter_reference.md#PWM_AUX_DIS1)) -- Minimum PWM ([`PWM_MAIN_MINn`](../advanced_config/parameter_reference.md#PWM_MAIN_MIN1) / [`PWM_AUX_MINn`](../advanced_config/parameter_reference.md#PWM_AUX_MIN1)) -- Maximum PWM ([`PWM_MAIN_MAXn`](../advanced_config/parameter_reference.md#PWM_MAIN_MAX1) / [`PWM_AUX_MAXn`](../advanced_config/parameter_reference.md#PWM_AUX_MAX1)) - -2. Manually start the PWM output driver - -For safety, the PWM driver is not started automatically in SIH. To enable it, run the following command in the MAVLink shell: - -`pwm_out start` - -And to disable it again: - -`pwm_out stop` +For specific examples see the `_sihsim_` airframes in [ROMFS/px4fmu_common/init.d-posix/airframes](https://github.com/PX4/PX4-Autopilot/tree/main/ROMFS/px4fmu_common/init.d-posix/airframes) (SIH as SITL) and [ROMFS/px4fmu_common/init.d/airframes](https://github.com/PX4/PX4-Autopilot/tree/main/ROMFS/px4fmu_common/init.d/airframes) (SIH on FC). ## Dynamic Models Динамічні моделі для різних транспортних засобів: -- Quadcopter: [pdf report](https://github.com/PX4/PX4-Autopilot/raw/main/docs/assets/simulation/SIH_dynamic_model.pdf). -- Hexacopter: Equivalent to the Quadcopter but with a symmetric hexacopter x actuation setup. -- Fixed-wing: Inspired by the PhD thesis: "Dynamics modeling of agile fixed-wing unmanned aerial vehicles." Khan, Waqas, supervised by Nahon, Meyer, McGill University, PhD thesis, 2016. -- Tailsitter: Inspired by the master's thesis: "Modeling and control of a flying wing tailsitter unmanned aerial vehicle." Chiappinelli, Romain, supervised by Nahon, Meyer, McGill University, Masters thesis, 2018. -- Ackermann Rover: Based on lateral vehicle dynamics of the bicycle model adapted from [Sri Anumakonda, Everything you need to know about Self-Driving Cars in <30 minutes](https://srianumakonda.medium.com/everything-you-need-to-know-about-self-driving-in-30-minutes-b38d68bd3427) +- Quadrotor: [pdf](https://github.com/PX4/PX4-Autopilot/raw/main/docs/assets/simulation/SIH_dynamic_model.pdf) +- Fixed-wing: based on Khan (2016), see references below +- Tailsitter: based on Chiappinelli (2018), see references below +- Rover: bicycle model with linear tire model + +**Propeller model with advance ratio** + +Since PX4 v1.17, the propeller model for fixed-wing, tailsitter, and VTOL pusher vehicles is based on the equations from UIUC Propeller Database. + +UIUC_prop_equations + +This model includes the thrust coefficient CT(J) and power coefficient CP(J) as functions of the advance ratio J. +As a result, the maximum thrust force is realistically reduced as the aircraft speed is increased. +The SIH implements the thrust and power coefficients as second-order polynomial fits. + +CT = SIH_F_CT0 + SIH_F_CT1⋅J + SIH_F_CT2⋅J² + +CP = SIH_F_CP0 + SIH_F_CP1⋅J + SIH_F_CP2⋅J² + +If `SIH_F_CT0` and `SIH_F_CP0` are non-zero and positive, the SIH uses the model with advance ratio. +If not, the SIH uses a simple model with maximum thrust force given by `SIH_F_T_MAX` and maximum torque given by `SIH_F_Q_MAX`. + +**References:** + +1. PX4 Development Team, "SIH Dynamic Model," PX4-Autopilot, 2019. [PDF](https://github.com/PX4/PX4-Autopilot/raw/main/docs/assets/simulation/SIH_dynamic_model.pdf) +2. W. Khan, "Dynamics modeling of agile fixed-wing unmanned aerial vehicles," Ph.D. thesis, Dept. of Mechanical Engineering, McGill University, Montreal, 2016. +3. R. Chiappinelli, "Modeling and control of a flying wing tailsitter unmanned aerial vehicle," M.Sc. thesis, Dept. of Mechanical Engineering, McGill University, Montreal, 2018. +4. S. Anumakonda, "Everything you need to know about Self-Driving Cars," 2021. [Link](https://srianumakonda.medium.com/everything-you-need-to-know-about-self-driving-in-30-minutes-b38d68bd3427) +5. J.B. Brandt, R.W. Deters, G.K. Ananda, O.D. Dantsker, and M.S. Selig, UIUC Propeller Database, Vols 1-4, University of Illinois at Urbana-Champaign, Department of Aerospace Engineering, retrieved from https://m-selig.ae.illinois.edu/props/propDB.html. ## Відео - +SIH demo with a fixed-wing vehicle @[youtube](https://youtu.be/PzIpSCRD8Jo) +How to parametrize the thrust and power coefficients CT & CP @[youtube](https://www.youtube.com/watch?v=KNSd9ge0sSw) ## Автори SIH спочатку був розроблений компанією Coriolis g Corporation. The airplane model and tailsitter models were added by Altitude R&D inc. -Обидві ці компанії знаходяться в Канаді: - Coriolis g developed a new type of Vertical Takeoff and Landing (VTOL) vehicles based on passive coupling systems; -- [Altitude R&D](https://www.altitude-rd.com/) is specialized in dynamics, control, and real-time simulation (today relocated in Zurich). +- [Altitude R&D](https://www.altitude-rd.com/) is specialized in dynamics, control, and real-time simulation (located in Zurich). Симулятор випущений безкоштовно під ліцензією BSD. diff --git a/docs/uk/simulation/community_supported_simulators.md b/docs/uk/simulation/community_supported_simulators.md index 26261eeb93..4f5765b5a5 100644 --- a/docs/uk/simulation/community_supported_simulators.md +++ b/docs/uk/simulation/community_supported_simulators.md @@ -12,10 +12,13 @@ These simulators are not maintained, tested, or supported, by the core developme Інструменти мають різний рівень підтримки своїми спільнотами (деякі добре підтримують, інші - ні). Питання про ці інструменти повинні порушуватися на [форумах для обговорення](../contribute/support.md#forums-and-chat) -| Симулятор | Опис | -| ----------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| [Simulation-In-Hardware](../sim_sih/README.md) (SIH) |

A simulator implemented in C++ as a PX4 module directly in the Firmware [code](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/simulation/simulator_sih). It can be ran in SITL directly on the computer or as an alternative to HITL offering a hard real-time simulation directly on the hardware autopilot.

Supported Vehicles: Quad, Hexa, Plane, Tailsitter, Standard VTOL, Ackermann Rover

| -| [FlightGear](../sim_flightgear/README.md) |

Симулятор який надає фізично та візуально реалістичні симуляції. Зокрема він може моделювати багато погодних умов, включаючи грози, сніг, дощ та град, а також може симулювати температурні режими та різні типи атмосферних течій. [Симуляція кількох засобів](../sim_flightgear/multi_vehicle.md) також підтримується.

Рухомі засоби, що підтримуються: Літак, Автожир, Ровер

| -| [JMAVSim](../sim_jmavsim/index.md) |

A simple multirotor/quad simulator. This was previously part of the PX4 development toolchain but was removed in favour of [Gazebo](../sim_gazebo_gz/index.md).

Supported Vehicles: Quad

| -| [JSBSim](../sim_jsbsim/README.md) |

Симулятор, який надає моделі просунутої динаміки польоту. Він може використовуватися для моделювання реалістичної динаміки польоту, заснованої на даних з аеродинамічної труби.

Рухомі засоби, що підтримуються: Літак, Квадрокоптер, Гексакоптер

| -| [AirSim](../sim_airsim/README.md) |

Міжплатформовий симулятор який надає фізично та візуально реалістичні симуляції. This simulator is resource intensive, and requires a significantly more powerful computer than the other simulators described here.

Supported Vehicles: Iris (MultiRotor model and a configuration for PX4 QuadRotor in the X configuration).

| +| Симулятор | Опис | +| ----------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [FlightGear](../sim_flightgear/README.md) |

Симулятор який надає фізично та візуально реалістичні симуляції. Зокрема він може моделювати багато погодних умов, включаючи грози, сніг, дощ та град, а також може симулювати температурні режими та різні типи атмосферних течій. [Симуляція кількох засобів](../sim_flightgear/multi_vehicle.md) також підтримується.

Рухомі засоби, що підтримуються: Літак, Автожир, Ровер

| +| [JMAVSim](../sim_jmavsim/index.md) |

A simple multirotor/quad simulator. This was previously part of the PX4 development toolchain but was removed in favour of [Gazebo](../sim_gazebo_gz/index.md).

Supported Vehicles: Quad

| +| [JSBSim](../sim_jsbsim/README.md) |

Симулятор, який надає моделі просунутої динаміки польоту. Він може використовуватися для моделювання реалістичної динаміки польоту, заснованої на даних з аеродинамічної труби.

Рухомі засоби, що підтримуються: Літак, Квадрокоптер, Гексакоптер

| +| [AirSim](../sim_airsim/README.md) |

Міжплатформовий симулятор який надає фізично та візуально реалістичні симуляції. This simulator is resource intensive, and requires a significantly more powerful computer than the other simulators described here.

Supported Vehicles: Iris (MultiRotor model and a configuration for PX4 QuadRotor in the X configuration).

| + +:::tip +[Gazebo](../sim_gazebo_gz/index.md) and [SIH](../sim_sih/index.md) are the officially supported simulators. See the [Simulation](index.md) page for more information. +::: diff --git a/docs/uk/simulation/failsafes.md b/docs/uk/simulation/failsafes.md index de08702d68..4fa5de35cb 100644 --- a/docs/uk/simulation/failsafes.md +++ b/docs/uk/simulation/failsafes.md @@ -47,7 +47,7 @@ To control how fast the battery depletes to the minimal value use the parameter By changing [SIM_BAT_MIN_PCT](../advanced_config/parameter_reference.md#SIM_BAT_MIN_PCT) in flight, you can also test regaining capacity to simulate inaccurate battery state estimation or in-air charging technology. ::: -It is also possible to disable the simulated battery using [SIM_BAT_ENABLE](../advanced_config/parameter_reference.md#SIM_BAT_ENABLE) in order to, for example, provide an external battery simulation via MAVLink. +The simulated battery can be completely disabled by setting [SIM_BAT_DRAIN](../advanced_config/parameter_reference.md#SIM_BAT_DRAIN) to 0. This is useful, for example, if you provide an external battery simulation via MAVLink. ## Помилка датчику/системи diff --git a/docs/uk/simulation/hardware.md b/docs/uk/simulation/hardware.md new file mode 100644 index 0000000000..7006b0164a --- /dev/null +++ b/docs/uk/simulation/hardware.md @@ -0,0 +1,29 @@ +# Hardware Simulation + +PX4 can run simulation directly on a real flight controller, replacing real sensors with simulated data, while otherwise executing the full flight stack on actual autopilot hardware. + +:::info +Simulating PX4 on flight controller hardware exercises more flight stack code than SITL, and tests more of your hardware integration. +It can surface issues with running PX4 that might hidden when running on a desktop OS and hardware, or even a different flight controller board. +::: + +Two simulation approaches are available, controlled by the [SYS_HITL](../advanced_config/parameter_reference.md#SYS_HITL) parameter: + +- **[HITL Simulation](../simulation/hitl.md) (`SYS_HITL=1`):** An external simulator (Gazebo Classic or jMAVSim) runs physics on a companion computer and sends sensor data to the flight controller via MAVLink HIL messages. Requires a USB/UART connection and simulator setup. +- **[SIH on Hardware](../sim_sih/hardware.md) (`SYS_HITL=2`):** A C++ physics model runs directly on the flight controller itself. No external simulator, no companion computer, no MAVLink sensor data. Just set the parameter and reboot. + +## HITL vs SIH {#comparision} + +| | HITL (`SYS_HITL=1`) | SIH (`SYS_HITL=2`) | +| ----------------- | ---------------------------------------------------------------------- | ---------------------------------------------------- | +| Physics model | External simulator (Gazebo Classic, jMAVSim) | Internal C++ module | +| Communication | MAVLink HIL messages | uORB (internal) | +| External process | Вимоги | Not required | +| Setup complexity | Higher | Lower | +| Sensor simulation | Camera, lidar, etc. (via simulator) | IMU, GPS, baro, mag, airspeed only | +| Vehicle types | Quadcopter, Standard VTOL | Quad, Hex, FW, VTOL Tailsitter, Standard VTOL, Rover | + +## When to Use Which + +- Use **SIH** if you want the simplest possible setup. No external dependencies. +- Use **HITL** if you need an external physics engine, 3D visualization from Gazebo Classic, or camera/lidar sensor simulation that SIH does not provide. diff --git a/docs/uk/simulation/hitl.md b/docs/uk/simulation/hitl.md index ab003d2c37..9fd7180d6f 100644 --- a/docs/uk/simulation/hitl.md +++ b/docs/uk/simulation/hitl.md @@ -12,9 +12,9 @@ HITL is [community supported and maintained](../simulation/community_supported_s PX4 supports HITL for multicopters (using [jMAVSim](../sim_jmavsim/index.md) or [Gazebo Classic](../sim_gazebo_classic/index.md)) and VTOL (using Gazebo Classic). - +For a comparison of HITL and SIH on hardware, see [Hardware Simulation](../simulation/hardware.md). -## Планери сумісні з HITL +## HITL-Compatible Airframes {#compatible_airframe} The set of compatible airframes vs simulators is: @@ -23,9 +23,7 @@ The set of compatible airframes vs simulators is: | [HIL Quadcopter X](../airframes/airframe_reference.md#copter_simulation_hil_quadcopter_x) | 1001 | Y | Y | | [HIL Standard VTOL QuadPlane](../airframes/airframe_reference.md#vtol_standard_vtol_hil_standard_vtol_quadplane) | 1002 | Y | | - - -## Середовище симуляції HITL +## HITL Simulation Environment {#simulation_environment} У симуляції з апаратним забезпеченням у контурі (HITL) звичайна прошивка PX4 виконується на реальному обладнані. JMAVSim або Gazebo Classic (які працюють на комп'ютері розробки) підключені до пристрою польотного контролера через USB/UART. @@ -104,18 +102,18 @@ make px4_fmu-v6x boardconfig 2. Select a [compatible airframe](#compatible_airframe) you want to test. Then click **Apply and Restart** on top-right of the _Airframe Setup_ page. -3. При необхідності відкалібруйте пульт РК або джойстик. +3. Calibrate your [Manual Controller](../config/manual_control.md) (RC or Joystick), if needed. 4. Налаштування UDP 1. Under the _General_ tab of the settings menu, uncheck all _AutoConnect_ boxes except for **UDP**. ![QGC Auto-connect settings for HITL](../../assets/gcs/qgc_hitl_autoconnect.png) -5. (Необов'язково) Налаштуйте джойстик та запобіжник відмови. - Set the following [parameters](../advanced_config/parameters.md) in order to use a joystick instead of an RC remote control transmitter: +5. (Optional) Configure your manual controller priority and failsafe: - - [COM_RC_IN_MODE](../advanced_config/parameter_reference.md#COM_RC_IN_MODE) to "Joystick/No RC Checks". Це дозволить керування джойстиком та відключить перевірки пульту РК. - - [NAV_RCL_ACT](../advanced_config/parameter_reference.md#NAV_RCL_ACT) to "Disabled". Це гарантує, що ніякі дії запобігання відмові не будуть перешкоджати коли не виконується HITL з радіо керуванням. + - [Enable a mode in `COM_RC_IN_MODE` that enables and prioritises the controllers you want to use](../config/manual_control.md#px4-configuration). + The default `RC or MAVLink keep first` should work if you plan to only have a Joystick (no RC). + - You can set [NAV_RCL_ACT](../advanced_config/parameter_reference.md#NAV_RCL_ACT) to disable manual control loss failsafe while flying in a simulation. :::tip The _QGroundControl User Guide_ also has instructions on [Joystick](https://docs.qgroundcontrol.com/master/en/qgc-user-guide/setup_view/joystick.html) and [Virtual Joystick](https://docs.qgroundcontrol.com/master/en/qgc-user-guide/settings_view/virtual_joystick.html) setup. @@ -137,7 +135,7 @@ Make sure _QGroundControl_ is not running! 1. Build PX4 with [Gazebo Classic](../sim_gazebo_classic/index.md) (in order to build the Gazebo Classic plugins). ```sh - cd + cd DONT_RUN=1 make px4_sitl_default gazebo-classic ``` diff --git a/docs/uk/simulation/index.md b/docs/uk/simulation/index.md index 2f0e51f38f..c6ad9dfc40 100644 --- a/docs/uk/simulation/index.md +++ b/docs/uk/simulation/index.md @@ -3,38 +3,83 @@ Симулятори дозволяють польотному коду PX4 керувати комп'ютерно змодельованим апаратом у змодельованому "світі". You can interact with this vehicle just as you might with a real vehicle, using _QGroundControl_, an offboard API, or a radio controller/gamepad. -:::tip -Simulation is a quick, easy, and most importantly, _safe_ way to test changes to PX4 code before attempting to fly in the real world. -Це також хороший спосіб почати літати з PX4, якщо у вас ще немає апарату для експериментів. -::: - PX4 supports both _Software In the Loop (SITL)_ simulation, where the flight stack runs on computer (either the same computer or another computer on the same network) and _Hardware In the Loop (HITL)_ simulation using a simulation firmware on a real flight controller board. Інформація про доступні тренажери та способи їх налаштування наведена в наступному розділі. The other sections provide general information about how the simulator works, and are not required to _use_ the simulators. +:::tip +Simulation is a quick, easy, and most importantly, _safe_ way to test changes to PX4 code before attempting to fly in the real world. +Це також хороший спосіб почати літати з PX4, якщо у вас ще немає апарату для експериментів. +::: + ## Підтримувані симулятори Наступні симулятори підтримуються основною командою розробників PX4. +:::info +Gazebo Classic is being downgraded to [community supported](../simulation/community_supported_simulators.md) and is no longer recommended as the default simulation solution. +Use [Gazebo](../sim_gazebo_gz/index.md) (formerly Gazebo Ignition) for new projects. +If you have an older workflow that does not yet work in newer Gazebo, Gazebo Classic remains available but will not receive core team maintenance going forward. +See [PX4-Autopilot#23602](https://github.com/PX4/PX4-Autopilot/issues/23602) for the deprecation timeline and migration status. +::: + | Симулятор | Опис | | ------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [Gazebo](../sim_gazebo_gz/index.md) | Gazebo supersedes [Gazebo Classic](../sim_gazebo_classic/index.md), featuring more advanced rendering, physics and sensor models. It is the only version of Gazebo available from Ubuntu Linux 22.04

A powerful 3D simulation environment that is particularly suitable for testing object-avoidance and computer vision. Він також може бути використаний для [multi-vehicle simulation](../simulation/multi-vehicle-simulation.md) і зазвичай використовується з [ROS](../simulation/ros_interface.md), набором інструментів для автоматизації керування апаратами.

Supported Vehicles: Quad, VTOL (Standard, Tailsitter, Tiltroter), Plane, Rovers | +| [SIH](../sim_sih/index.md) | A lightweight, headless simulator that runs physics directly inside PX4 as a C++ module (no external dependencies). Headless by default for fastest iteration. Supports ROS 2 via uXRCE-DDS. Can also run on flight controller hardware (`SYS_HITL=2`).

**Supported Vehicles:** Quad, Hex, Plane, Tailsitter, Standard VTOL, Rover | | [Gazebo Classic](../sim_gazebo_classic/index.md) | A powerful 3D simulation environment that is particularly suitable for testing object-avoidance and computer vision. It can also be used for [multi-vehicle simulation](../simulation/multi-vehicle-simulation.md) and is commonly used with [ROS](../simulation/ros_interface.md), a collection of tools for automating vehicle control.

**Supported Vehicles:** Quad ([Iris](../airframes/airframe_reference.md#copter_quadrotor_x_generic_quadcopter)), Hex (Typhoon H480), [Generic Standard VTOL (QuadPlane)](../airframes/airframe_reference.md#vtol_standard_vtol_generic_standard_vtol), Tailsitter, Plane, Rover, Submarine | There are also a number of [Community Supported Simulators](../simulation/community_supported_simulators.md). ---- +:::tip +To run PX4 SITL without setting up a build environment, [pre-built packages and containers](px4_sitl_prebuilt_packages.md) are available. +::: -Решта цієї теми - це "дещо загальний" опис того, як працює інфраструктура симуляції. -It is not required to _use_ the simulators. +### Simulator Comparison + +| Характеристика | Gazebo | SIH | +| ------------------------- | ------------------------------------------------- | -------------------------------------------------------------------------------------- | +| **Default Mode** | GUI with 3D rendering | Headless (fastest iteration) | +| **3D Visualization** | Built-in (photorealistic) | Optional: QGC map or jMAVSim display-only | +| **Physics Engine** | External (gz-physics) | Internal (C++ module, uORB) | +| **External Dependencies** | Gazebo packages, rendering libs | None | +| **Vehicle Types** | Quad, VTOL, Plane, Rovers | Quad, Hex, Plane, Tailsitter, Std VTOL, Rover | +| **Multi-vehicle** | Yes (documented) | Yes ([multi-vehicle](../sim_sih/index.md#multi-vehicle-simulation)) | +| **Sensor Simulation** | Camera, LiDAR, depth, IMU, GPS, baro, mag | IMU, GPS, baro, mag, airspeed | +| **Custom Worlds/Models** | Yes (SDF, large model library) | Ні | +| **ROS 2 Integration** | Yes (uXRCE-DDS) | Yes (uXRCE-DDS) | +| **Extensibility** | Plugins, custom sensors, environments | Modify C++ source, tune SIH\_\* parameters | +| **Community/Ecosystem** | Large Gazebo community, model repos | PX4-internal | +| **Faster-than-Realtime** | Так | Так | +| **Runs on FC Hardware** | Ні | Yes (SYS_HITL=2) | +| **macOS Apple Silicon** | Unstable (known issues) | Works natively | +| **Lockstep** | Так | Так | + +:::tip +For a detailed analysis of PX4 simulation user needs, priorities, and pain points, see the [PX4 Simulation Integration Survey Report](https://www.mcguirerobotics.com/px4_sim_research_report/) (K. McGuire, Dronecode Foundation, Dec 2025, 120 respondents). +::: + +### Which Simulator Should I Use? + +- **Full-featured simulation with 3D rendering, custom worlds, camera/lidar sensors, or rich sensor ecosystems:** Use [Gazebo](../sim_gazebo_gz/index.md). Largest ecosystem, custom models and plugins, photorealistic rendering, extensive sensor library, large community. +- **Fast headless iteration, controls research, zero-dependency setup, or macOS:** Use [SIH](../sim_sih/index.md). Runs entirely inside PX4 with no external dependencies, headless by default for maximum speed, physics parameters directly tunable via `SIH_*` params. Supports ROS 2 via uXRCE-DDS. +- **Hardware integration testing without propellers:** Use [SIH on flight controller hardware](../sim_sih/index.md#sih-on-flight-controller-hardware) (`SYS_HITL=2`). + +:::info +SIH is headless by default. For optional 3D visualization, you can use [jMAVSim in display-only mode](../sim_sih/index.md#visualization-optional) or monitor the vehicle in QGroundControl's map view. +::: ## Симулятор MAVLink API -Всі симулятори, крім Gazebo, взаємодіють з PX4 за допомогою API симулятора MAVLink. +Most external simulators communicate with PX4 using the Simulator MAVLink API. Цей API визначає набір повідомлень MAVLink, які передають дані датчиків з модельованого світу в PX4 і повертають значення двигуна і приводу з польотного коду, які будуть застосовані до модельованого апарату. На зображенні нижче показано потік повідомлень. +:::info +SIH does not use the MAVLink simulator API. It runs physics internally via uORB messages. Gazebo communicates with PX4 via gz_bridge (Gazebo transport), not MAVLink. +::: + ![Simulator MAVLink API](../../assets/simulation/px4_simulator_messages.svg) :::info @@ -67,7 +112,7 @@ A SITL build of PX4 uses [SimulatorMavlink.cpp](https://github.com/PX4/PX4-Autop -PX4 directly uses the [Gazebo API](https://gazebosim.org/docs) to interface with [Gazebo](../sim_gazebo_gz/index.md) and MAVlink is not required. +PX4 directly uses the [Gazebo API](https://gazebosim.org/docs/) to interface with [Gazebo](../sim_gazebo_gz/index.md) and MAVlink is not required. ## Порти UDP PX4 MAVLink за замовчуванням @@ -96,7 +141,7 @@ See [System Startup](../concept/system_startup.md) to learn more. ## Середовище симуляції SITL -На схемі нижче показано типове середовище симуляції SITL для будь-якого з підтримуваних тренажерів, що використовують MAVLink (тобто всіх, окрім Gazebo). +The diagram below shows a typical SITL simulation environment for any of the supported simulators that use MAVLink (i.e. most external simulators, but not Gazebo or SIH). ![PX4 SITL overview](../../assets/simulation/px4_sitl_overview.svg) @@ -153,8 +198,16 @@ make px4_sitl jmavsim # Start PX4 with no simulator (i.e. to use your own "custom" simulator) make px4_sitl none_iris + +# SIH (headless, zero dependencies) +make px4_sitl_sih sihsim_quadx +make px4_sitl_sih sihsim_airplane ``` +:::info +Use `px4_sitl_sih` instead of `px4_sitl` to avoid building Gazebo dependencies. +::: + Симуляцію можна додатково налаштувати за допомогою змінних середовища: - Any of the [PX4 parameters](../advanced_config/parameter_reference.md) can be overridden via `export PX4_PARAM_{name}={value}`. @@ -165,7 +218,7 @@ For more information see: [Building the Code > PX4 Make Build Targets](../dev_se ### Run Simulation Faster than Realtime {#simulation_speed} -SITL can be run faster or slower than real-time when using Gazebo, Gazebo Classic, or jMAVSim. +SITL can be run faster or slower than real-time when using Gazebo, Gazebo Classic, jMAVSim, or SIH. The speed factor is set using the environment variable `PX4_SIM_SPEED_FACTOR`. @@ -179,6 +232,7 @@ This is what makes it possible to run the simulation at different speeds, and al - Gazebo: [Change Simulation Speed](../sim_gazebo_gz/index.md#change-simulation-speed) - Gazebo Classic: [Change Simulation Speed](../sim_gazebo_classic/index.md#change-simulation-speed) and [Lockstep](../sim_gazebo_classic/index.md#lockstep) - jMAVSim: [Change Simulation Speed](../sim_jmavsim/index.md#change-simulation-speed) and [Lockstep](../sim_jmavsim/index.md#lockstep) +- SIH: Supports `PX4_SIM_SPEED_FACTOR` for faster-than-realtime simulation. ### Сценарії запуску @@ -213,7 +267,7 @@ For setup information see the _QGroundControl User Guide_: PX4 supports capture of both still images and video from within the [Gazebo Classic](../sim_gazebo_classic/index.md) simulated environment. This can be enabled/set up as described in [Gazebo Glassic > Video Streaming](../sim_gazebo_classic/index.md#video-streaming). -The simulated camera is a gazebo classic plugin that implements the [MAVLink Camera Protocol](https://mavlink.io/en/protocol/camera.html) . +The simulated camera is a gazebo classic plugin that implements the [MAVLink Camera Protocol](https://mavlink.io/en/services/camera.html) . PX4 connects/integrates with this camera in _exactly the same way_ as it would with any other MAVLink camera: 1. [TRIG_INTERFACE](../advanced_config/parameter_reference.md#TRIG_INTERFACE) must be set to `3` to configure the camera trigger driver for use with a MAVLink camera diff --git a/docs/uk/simulation/multi-vehicle-simulation.md b/docs/uk/simulation/multi-vehicle-simulation.md index ff3675a427..300a88ef77 100644 --- a/docs/uk/simulation/multi-vehicle-simulation.md +++ b/docs/uk/simulation/multi-vehicle-simulation.md @@ -6,6 +6,7 @@ PX4 підтримує симуляцію кількох рухомих засо - [Multi-Vehicle Sim with Gazebo Classic](../sim_gazebo_classic/multi_vehicle_simulation.md) (both with and without ROS) - [Multi-Vehicle Sim with FlightGear](../sim_flightgear/multi_vehicle.md) - [Multi-Vehicle Sim with JMAVSim](../sim_jmavsim/multi_vehicle.md) +- [Multi-Vehicle Sim with SIH](../sim_sih/index.md#multi-vehicle-simulation) Вибір симулятора залежить від рухомого засобу що моделюється, наскільки "якісна" потрібна симуляція (і для яких функцій), і скільки засобів потрібно симулювати одночасно. @@ -18,5 +19,8 @@ PX4 підтримує симуляцію кількох рухомих засо Note, this is the successor of [Gazebo Classic](../sim_gazebo_classic/index.md) (below). - [Gazebo Classic](../sim_gazebo_classic/index.md) is less accurate and less heavy-weight and supports many features and vehicles that aren't available for FlightGear. Він може симулювати набагато більше засобів за раз, ніж FlightGear, та дозволяє симулювати різні їх типи водночас. -- JMAVSim - це дуже легкий симулятор, який підтримує лише квадрокоптери. +- [JMAVSim](../sim_jmavsim/index.md) is a very light-weight simulator that supports only quadcopters. Рекомендується у випадку, якщо вам необхідно підтримувати багато квадрокоптерів та симуляція може бути приблизна. +- [SIH](../sim_sih/index.md) is the lightest-weight option with zero external dependencies. + Since SIH is headless and runs physics internally, it can launch many instances with minimal resource usage. + It supports all 6 vehicle types (quad, hex, plane, tailsitter, standard VTOL, rover). diff --git a/docs/uk/simulation/px4_simulation_quickstart.md b/docs/uk/simulation/px4_simulation_quickstart.md new file mode 100644 index 0000000000..7a314741f4 --- /dev/null +++ b/docs/uk/simulation/px4_simulation_quickstart.md @@ -0,0 +1,25 @@ +# PX4 Simulation QuickStart + +First install [Docker](https://docs.docker.com/get-docker/) (a free tool that runs containers). + +The following command will then run a PX4 quadrotor simulation that you can connect to [QGroundControl](https://qgroundcontrol.com), [MAVSDK](https://mavsdk.mavlink.io/) or [ROS 2](../ros2/user_guide.md) (on Linux, macOS, and Windows): + +```sh +docker run --rm -it -p 14550:14550/udp px4io/px4-sitl:latest +``` + +That's it — open [QGroundControl](https://qgroundcontrol.com) and fly! + +::: tip + +To try [other vehicle types](../sim_sih/#supported-vehicle-types) append the corresponding line below to the command: + +```sh +-e PX4_SIM_MODEL=sihsim_airplane # Plane +-e PX4_SIM_MODEL=sihsim_standard_vtol # Standard VTOL +-e PX4_SIM_MODEL=sihsim_rover # Ackermann rover +``` + +For more information and options see [Container Images](../simulation/px4_sitl_prebuilt_packages.md#container-images) (in _Pre-built SITL Packages_) and [SIH Simulation](../sim_sih/index.md). + +::: diff --git a/docs/uk/simulation/px4_sitl_prebuilt_packages.md b/docs/uk/simulation/px4_sitl_prebuilt_packages.md new file mode 100644 index 0000000000..688f080521 --- /dev/null +++ b/docs/uk/simulation/px4_sitl_prebuilt_packages.md @@ -0,0 +1,297 @@ +# Pre-built SITL Packages + +Pre-built packages let you run [PX4 SITL simulation](index.md) without setting up a build environment. + +This is very useful if you don't need to modify PX4 itself. +For example, if you want to write drone apps using [MAVSDK](https://mavsdk.mavlink.io) or [ROS 2](../ros2/user_guide.md), or you just want to fly with PX4. + +:::tip +See [PX4 Simulation QuickStart](px4_simulation_quickstart.md) for a one-line instruction to run the SIH package in a container. +::: + +## What's Available + +Two simulators are packaged, each available as a `.deb` package (Ubuntu) or a Docker [container](#container-images) (any OS): + +| Симулятор | Format | Package / Image | Розмір | +| -------------------------------------------- | -------------------- | ----------------------- | ----------------------- | +| [SIH](../sim_sih/index.md) | .deb | `px4` | ~10 MB | +| | container | `px4io/px4-sitl` | ~100 MB | +| [Gazebo Harmonic](../sim_gazebo_gz/index.md) | .deb | `px4-gazebo` | ~30 MB | +| | container | `px4io/px4-sitl-gazebo` | ~2 GB | + +SIH is a lightweight, headless simulator built into PX4 with no external dependencies. +Gazebo provides full 3D simulation with camera, LiDAR, and custom worlds. +Sizes are approximate and vary between releases. + +For help choosing between simulators, see the [simulator comparison table](index.md#simulator-comparison). + +### Versions and Releases + +Packages and images are versioned to match PX4 tags (e.g. `v1.17.0`, `v1.17.0~beta1`). +`.deb` packages are built for **Ubuntu 22.04 (Jammy)** and **24.04 (Noble)**, on both **amd64** and **arm64**. +Container images support **amd64** and **arm64**. +Stable releases and pre-releases are published on the [PX4 Releases](https://github.com/PX4/PX4-Autopilot/releases) page. + +## .deb Packages (Ubuntu) + +Download the `.deb` file for your Ubuntu version and architecture from the [PX4 Releases](https://github.com/PX4/PX4-Autopilot/releases) page, then install as shown below. +After installation the binary is added to the default Ubuntu system paths, and can be run from anywhere. + +### px4 (SIH) + +No extra repositories are required: + +```bash +sudo apt install ./px4_*.deb +``` + +### px4-gazebo (Gazebo Harmonic) + +The package depends on Gazebo Harmonic runtime libraries from the OSRF repository. +Add the repository first, then install: + +```bash +# Add OSRF Gazebo repository (one-time setup) +sudo curl -fsSL 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" \ + | sudo tee /etc/apt/sources.list.d/gazebo-stable.list > /dev/null +sudo apt update + +# Install (resolves Gazebo dependencies automatically) +sudo apt install ./px4-gazebo_*.deb +``` + +### Uninstalling + +```bash +sudo apt remove px4 # SIH package +sudo apt remove px4-gazebo # Gazebo package +``` + +## Container Images + +Container images are built using the same `.deb` packages described above, packaged into minimal Docker images. +They are published to [Docker Hub](https://hub.docker.com/u/px4io) on every tagged release. +You will need to [install Docker](https://docs.docker.com/get-docker/). + +| Зображення | Симулятор | +| ----------------------------- | --------------------------------- | +| `px4io/px4-sitl:` | SIH (headless) | +| `px4io/px4-sitl-gazebo:` | Gazebo Harmonic | + +Tags follow PX4 versions (e.g. `v1.17.0`). + +### Запуск + +```bash +# SIH +docker run --rm -it -p 14550:14550/udp px4io/px4-sitl:latest + +# Gazebo +docker run --rm -it -p 14550:14550/udp px4io/px4-sitl-gazebo:latest +``` + +Pass environment variables with `-e`: + +```bash +docker run --rm -it -p 14550:14550/udp \ + -e PX4_SIM_MODEL=sihsim_airplane \ + px4io/px4-sitl:latest +``` + +The quick-start command above only exposes the QGroundControl port. +To use MAVSDK, uXRCE-DDS (ROS 2), or MAVSim Viewer, expose the additional ports: + +```bash +docker run --rm -it \ + -p 14550:14550/udp \ + -p 14540:14540/udp \ + -p 8888:8888/udp \ + -p 19410:19410/udp \ + px4io/px4-sitl:latest +``` + +| Порт | Протокол | Used by | +| ----- | -------- | ---------------------------------------------- | +| 14550 | UDP | QGroundControl | +| 14540 | UDP | MAVSDK / offboard API | +| 8888 | UDP | uXRCE-DDS agent (ROS 2) | +| 19410 | UDP | SIH display (MAVSim Viewer) | + +On Linux, you can skip individual port flags and use `--network host` instead: + +```bash +docker run --rm -it --network host px4io/px4-sitl:latest +``` + +## Налаштування + +These options apply to both `.deb` packages and containers. +Note that after the first section below we only show how to use them with the deb packages (the pattern for using the options doesn't change). + +### Vehicle Selection + +Set `PX4_SIM_MODEL` to choose a vehicle. + +SIH: + +```bash +# Deb package +PX4_SIM_MODEL=sihsim_airplane px4 + +# Container +docker run --rm -it -p 14550:14550/udp px4io/px4-sitl:latest -e PX4_SIM_MODEL=sihsim_airplane +``` + +Gazebo: + +``` +# Deb package +PX4_SIM_MODEL=gz_x500 px4-gazebo + +# Container +docker run --rm -it -p 14550:14550/udp px4io/px4-sitl-gazebo:latest -e PX4_SIM_MODEL=gz_x500 +``` + +See [SIH Supported Vehicles](../sim_sih/index.md#supported-vehicle-types) and [Gazebo Vehicles](../sim_gazebo_gz/vehicles.md) for the full lists. + +### World Selection (Gazebo only) + +```sh +PX4_GZ_WORLD=baylands PX4_SIM_MODEL=gz_x500 px4-gazebo +``` + +See [Gazebo Worlds](../sim_gazebo_gz/worlds.md) for available worlds. + +### Environment Variables + +| Змінні | Опис | Default | +| -------------------- | ------------------------------------------------------------------------------------------------------ | ----------------------------- | +| `PX4_SIM_MODEL` | Vehicle model (e.g. `gz_x500`, `sihsim_quadx`) | (required) | +| `PX4_GZ_WORLD` | Gazebo world name, without `.sdf` (e.g. `baylands`) | `default` | +| `HEADLESS` | Set to `1` to disable Gazebo GUI | (unset) | +| `PX4_UXRCE_DDS_PORT` | uXRCE-DDS agent UDP port | `8888` | +| `PX4_UXRCE_DDS_NS` | uXRCE-DDS ROS namespace | (none) | +| `XDG_DATA_HOME` | Base directory for per-instance working data (parameters, dataman) | `$HOME/.local/share` | + +## Multi-Instance + +Multiple simulated vehicles can run simultaneously by passing the `-i` flag with an instance number. +Each instance must be started in a separate terminal (or container). This works with both simulators. + +```sh +# Terminal 1 +PX4_SIM_MODEL=sihsim_quadx px4 -i 0 + +# Terminal 2 +PX4_SIM_MODEL=sihsim_quadx px4 -i 1 +``` + +MAVLink and uXRCE-DDS port numbers are automatically offset by the instance number. + +Each package (`px4` and `px4-gazebo`) is a standalone install. Do not mix instances from the two packages in the same session. + +## MAVLink and QGroundControl + +PX4 opens several MAVLink UDP ports on startup. +[QGroundControl](https://qgroundcontrol.com) auto-connects on UDP port 14550. +You can also connect [MAVSDK](https://mavsdk.mavlink.io) or any MAVLink-compatible tool. + +| Link | Режим | UDP Local Port | UDP Remote Port | Data Rate | +| ----------------------------------------- | ------- | ---------------- | ---------------- | --------- | +| GCS link | Normal | 18570 + instance | 14550 | 4 Mbps | +| API/Offboard link | Onboard | 14580 + instance | 14540 + instance | 4 Mbps | +| Onboard link to camera | Onboard | 14280 + instance | 14030 + instance | 4 kbps | +| Onboard link to gimbal | Gimbal | 13030 + instance | 13280 + instance | 400 kbps | +| SIH display (SIH only) | Custom | 19450 + instance | 19410 + instance | 400 kbps | + +By default, MAVLink only listens on localhost. +Set parameter `MAV_{i}_BROADCAST = 1` to enable network access. + +## ROS 2 Integration + +The `uxrce_dds_client` module starts automatically and connects to a Micro XRCE-DDS Agent over UDP. +Run the agent before starting PX4: + +```sh +MicroXRCEAgent udp4 -p 8888 +``` + +| Налаштування | Default | +| ------------ | ----------- | +| Transport | UDP | +| Agent IP | `127.0.0.1` | +| Agent Port | `8888` | + +Environment variables `PX4_UXRCE_DDS_PORT` and `PX4_UXRCE_DDS_NS` override the corresponding PX4 parameters ([UXRCE_DDS_PRT](../advanced_config/parameter_reference.md#UXRCE_DDS_PRT), [UXRCE_DDS_NS_IDX](../advanced_config/parameter_reference.md#UXRCE_DDS_NS_IDX)) at runtime without modifying stored parameters: + +```sh +PX4_UXRCE_DDS_PORT=9999 PX4_UXRCE_DDS_NS=drone1 PX4_SIM_MODEL=sihsim_quadx px4 +``` + +## Daemon Mode + +Start PX4 without an interactive shell (useful for CI pipelines and automated testing): + +```sh +PX4_SIM_MODEL=sihsim_quadx px4 -d +``` + +## Installed File Layout + +### px4 + +```txt +/opt/px4/ + bin/ + px4 # PX4 binary + px4-* # Module symlinks + px4-alias.sh # Shell aliases + etc/ # ROMFS (init scripts, mixers, airframes) + init.d-posix/ + +/usr/bin/px4 -> /opt/px4/bin/px4 +``` + +### px4-gazebo + +```txt +/opt/px4-gazebo/ + bin/ + px4 # PX4 binary + px4-gazebo # Gazebo wrapper (sets GZ_SIM_* env vars) + px4-* # Module symlinks + px4-alias.sh # Shell aliases + etc/ # ROMFS (init scripts, mixers, airframes) + init.d-posix/ + share/gz/ + models/ # Gazebo vehicle models + worlds/ # Gazebo world files + server.config + lib/gz/plugins/ # PX4 Gazebo plugins + +/usr/bin/px4-gazebo -> /opt/px4-gazebo/bin/px4-gazebo +``` + +### Runtime directories (created on first run, per user) + +```sh +$XDG_DATA_HOME/px4/rootfs// # parameters, dataman, eeprom +``` + +## Building .deb Files Locally + +To build `.deb` files locally (e.g. to package a custom PX4 branch): + +```sh +# SIH — produces px4_*.deb +make px4_sitl_sih +cd build/px4_sitl_sih && cpack -G DEB + +# Gazebo — produces px4-gazebo_*.deb +make px4_sitl_default +cd build/px4_sitl_default && cpack -G DEB +``` diff --git a/docs/uk/smart_batteries/index.md b/docs/uk/smart_batteries/index.md index 4cda07347c..71c6e6295a 100644 --- a/docs/uk/smart_batteries/index.md +++ b/docs/uk/smart_batteries/index.md @@ -1,7 +1,7 @@ # Розумні акумулятори Розумні батареї надають більш точну (і часто більш детальну) інформацію про стан батареї, ніж автопілот може оцінити для «тупих» батарей. -Це дозволяє забезпечити більш надійне сповіщення про умови випадкового відмовлення при плануванні польоту. +This allows for more reliable flight planning notification of failure conditions. Інформація може включати деякі з наступного: залишковий заряд, час до розряду (оцінений), напругу на елементах (оцінена максимальна/мінімальна, поточна напруга тощо), температуру, струми, інформацію про несправності, виробника батареї, хімічний склад тощо. PX4 підтримує (принаймні) наступні розумні батарейки: diff --git a/docs/uk/smart_batteries/rotoye_batmon.md b/docs/uk/smart_batteries/rotoye_batmon.md index 43f79d30c7..4b907a03de 100644 --- a/docs/uk/smart_batteries/rotoye_batmon.md +++ b/docs/uk/smart_batteries/rotoye_batmon.md @@ -1,6 +1,6 @@ # Rotoye Batmon -[Rotoye Batmon](https://rotoye.com/batmon/) is a kit for adding smart battery functionality to off-the-shelf Lithium-Ion and LiPo batteries. +[Rotoye Batmon](https://shop.rotoye.com/batmon/) is a kit for adding smart battery functionality to off-the-shelf Lithium-Ion and LiPo batteries. Його можна придбати як самостійний пристрій або як частину заводсько зібраної розумної батареї. ![Rotoye Batmon Board](../../assets/hardware/smart_batteries/rotoye_batmon/smart-battery-rotoye.jpg) @@ -9,7 +9,7 @@ ## Де купити -[Rotoye Store](https://rotoye.com/batmon/): Batmon kits, custom smart-batteries, and accessories +[Rotoye Store](https://shop.rotoye.com/batmon/): Batmon kits, custom smart-batteries, and accessories ## Проведення/Підключення @@ -50,7 +50,3 @@ In _QGroundControl_: batt_smbus start -X -b 1 -a 11 # External bus 1, address 0x0b batt_smbus start -X -b 1 -a 12 # External bus 1, address 0x0c ``` - -## Подальша інформація - -[Quick Start Guide](https://rotoye.com/batmon-tutorial/) (Rotoye) diff --git a/docs/uk/software_update/stm32_bootloader.md b/docs/uk/software_update/stm32_bootloader.md index 8dc025f0d0..3e22534a0c 100644 --- a/docs/uk/software_update/stm32_bootloader.md +++ b/docs/uk/software_update/stm32_bootloader.md @@ -62,7 +62,7 @@ arm-none-eabi-gdb ### -These instructions are for the [J-Link GDB server](https://www.segger.com/jlink-gdb-server.html). +These instructions are for the [J-Link GDB server](https://www.segger.com/products/debug-probes/j-link/tools/j-link-gdb-server/about-j-link-gdb-server/). #### Вимоги diff --git a/docs/uk/telemetry/cuav_p8_radio.md b/docs/uk/telemetry/cuav_p8_radio.md index ec273c3399..814191477b 100644 --- a/docs/uk/telemetry/cuav_p8_radio.md +++ b/docs/uk/telemetry/cuav_p8_radio.md @@ -19,7 +19,7 @@ CUAV P8 Radio is a long range (>60km) and high data rate (375 Kbps) remote data ## Де купити -- [CUAV store](https://www.cuav.net/en/p8-2/) +- [CUAV store](https://www.cuav.net/en/p8-en/) - [CUAV alibaba](https://www.alibaba.com/product-detail/Free-shipping-CUAV-UAV-P8-Radio_1600324379418.html?spm=a2747.manage.0.0.2dca71d2bY4B0M) ## Конфігурація PX4 @@ -61,6 +61,6 @@ CUAV P8 Radio does not support power supply from the flight controller, it needs ## Докладніше -[P8 manual](http://manual.cuav.net/data-transmission/p8-radio/p8-user-manual-en.pdf) +[P8 manual](https://manual.cuav.net/data-transmission/p8-radio/p8_user_manual_cn.pdf) [CUAV P8 Radio](https://doc.cuav.net/data-transmission/p8-radio/en/) (Official Guide) diff --git a/docs/uk/telemetry/holybro_sik_longrange.md b/docs/uk/telemetry/holybro_sik_longrange.md new file mode 100644 index 0000000000..3c53dd3b70 --- /dev/null +++ b/docs/uk/telemetry/holybro_sik_longrange.md @@ -0,0 +1,100 @@ +# Holybro SiK Telemetry Radio - Long Range + +This Holybro SiK Long Range Telemetry Radio is a small, light, and inexpensive open-source radio platform with an extended range (~20km) compared to the standard model. + +This radio is plug-and-play, ready for all Pixhawk Standard and other similar flight controllers, providing the easiest way to set up a telemetry connection between your controller and a ground station. +It uses open-source firmware that has been specially designed to work well with MAVLink packets and to be integrated with PX4, ArduPilot, Mission Planner and QGroundControl. + +The radios are available in 915 MHz or 433 MHz versions. +Please purchase the model that is appropriate for your country/region. + +![Sik Telemetry Radio - Long Range](../../assets/hardware/telemetry/holybro_sik_longrange/holybro_sik_longrange.jpg) + +## Де купити + +- [Holybro SiK Telemetry Radio - Long Range](https://holybro.com/collections/telemetry-radios/products/sik-telemetry-radio-1w) + +## Функції + +- 1W maximum RF output and up to 20km range (compared to 100mW/300m for the short range version). +- Open-source SIK firmware +- Plug-n-play for Pixhawk Standard Flight Controllers +- The Easiest way to connect your controller and Ground Station +- Можливість взаємозамінності радіо на повітрі та на землі +- 6-позиційний роз'єм JST-GH + +## Специфікація + +- 1 W maximum output power (adjustable) -117 dBm receive sensitivity +- РП-SMA роз'єм +- Двосторонній повний дуплексний зв'язок через адаптивний інтерфейс TDM UART +- Прозоре послідовне посилання +- Формування протоколу MAVLink +- Частотно-перестроювана розподілена спектральна модуляція (FHSS) Налаштований цикл роботи +- Корекція помилок виправляє до 25% помилок бітів Відкрите програмне забезпечення SIK +- Configurable through Mission Planner & APM Planner +- FT230X USB на BASIC UART IC +- USB Type C connector +- XT30 power connector for 7~28V DC input + +## Стан індикатора світлодіодів + +The radios have four status LEDs. +The USB `RX` and `TX` LEDs indicate the status of reception and transmission of the USB port. +The `RADIO` and `ACT` two LED lights indicate the status of the RF circuit. + +- USB-TX LED (orange): + - Blinking: USB port has data transmission + - Off: USB port has no data transmission +- USB-RX LED (orange): + - Blinking: USB port has data reception + - Off: USB port has no data reception +- Radio LED (Green) + - Blinking: Searching for another radio + - Solid: Link is established with another radio +- ACT LED (Red) + - Flashing: Transmitting data + - Solid: In firmware update mode + +![Holybro SiK LongRange LED Indicators](../../assets/hardware/telemetry/holybro_sik_longrange/holybro_sik_longrange_label.png) + +## Підключення до Політного Контролера + +Supply the power (7~28V) to the radio via the XT30 connector. +Use the 6-pin JST-GH connector that comes with the radio to connect the radio to your flight controller's `TELEM1` port. + +Note that `TELEM2` can also be used, but you may need to [configure the telemetry port](../peripherals/mavlink_peripherals.md) on some flight controllers. + +## Підключення до ПК або Наземної станції + +First, power the module with a 7~28V DC source. +Then, connect the radio to your Windows PC or Ground Station using a Type-C USB cable. + +The necessary drivers should be installed automatically, and the radio will appear as a new “USB Serial Port” in the Windows Device Manager under Ports (COM & LPT). +The Mission Planner's COM Port selection drop-down should also include the newly added COM port. + +## Packages Include + +### Single Radio + +- 1W Radio modules with antennas (1) +- High-gain omnidirectional antenna (1) +- Male Type-C to male Type-C USB cable (1) +- Male XT30 to female XT30 adapter cable (1) +- Male XT30 to female XT60 adapter cable (1) +- JST-GH-6P to JST-GH-6P cable (1) (for Pixhawk Standard FC) +- Rubber damping grommet (3) + +![Sik Telemetry Radio - LongRange Package1](../../assets/hardware/telemetry/holybro_sik_longrange/holybro_sik_longrange_include1.png) + +### Pair Radios + +- 1W Radio modules with antennas (2) +- High-gain omnidirectional antenna (2) +- Male Type-C to male Type-C USB cable (1) +- Male XT30 to female XT30 adapter cable (1) +- Male XT30 to female XT60 adapter cable (1) +- JST-GH-6P to JST-GH-6P cable (1) (for Pixhawk Standard FC) +- Rubber damping grommet (3) + +![Sik Telemetry Radio - LongRange Package2](../../assets/hardware/telemetry/holybro_sik_longrange/holybro_sik_longrange_include2.png) diff --git a/docs/uk/telemetry/index.md b/docs/uk/telemetry/index.md index bddd986c2a..b5e85c595c 100644 --- a/docs/uk/telemetry/index.md +++ b/docs/uk/telemetry/index.md @@ -6,6 +6,7 @@ PX4 підтримує ряд типів телеметрійних радіоз - [SiK Radio](../telemetry/sik_radio.md) based firmware (more generally, any radio with a UART interface should work). - [HolyBro SiK Telemetry Radio](../telemetry/holybro_sik_radio.md) + - [HolyBro SiK Long Range](../telemetry/holybro_sik_longrange.md) - [RFD900 Telemetry Radio](../telemetry/rfd900_telemetry.md) - [ThunderFly TFSIK01 Telemetry Radio](../telemetry/tfsik_telemetry.md) - _HKPilot Телеметрійне радіо_ (Припинено) diff --git a/docs/uk/telemetry/jfi_telemetry.md b/docs/uk/telemetry/jfi_telemetry.md index d6ec2f083c..b64098de16 100644 --- a/docs/uk/telemetry/jfi_telemetry.md +++ b/docs/uk/telemetry/jfi_telemetry.md @@ -94,7 +94,7 @@ If you want to change the baud rate: ### One-to-many (1:N) Setups For one-to-many (1:N) setups a higher baud rate is _highly recommended_ to ensure stable data reception. -All J.Fi devices should be set to the same baud rate (although communication may work even when when devices use different baud rates). +All J.Fi devices should be set to the same baud rate (although communication may work even when devices use different baud rates). This should be changed in both PX4 and the J.Fi modules as explained in the previous section. You will also need to make sure that all vehicles on the MAVLink network are assigned a unique **System ID** ([MAV_SYS_ID](../advanced_config/parameter_reference.md#MAV_SYS_ID)). diff --git a/docs/uk/telemetry/sik_radio.md b/docs/uk/telemetry/sik_radio.md index 28e98df35d..f41a0b5eac 100644 --- a/docs/uk/telemetry/sik_radio.md +++ b/docs/uk/telemetry/sik_radio.md @@ -14,6 +14,7 @@ SiK Radios often come with appropriate connectors/cables allowing them to be dir ## Постачальники - [Holybro Telemetry Radio](../telemetry/holybro_sik_radio.md) +- [HolyBro SiK Long Range](../telemetry/holybro_sik_longrange.md) - [RFD900 Telemetry Radio](../telemetry/rfd900_telemetry.md) - [ThunderFly TFSIK01 Telemetry Radio](../telemetry/tfsik_telemetry.md) - _HKPilot Телеметрійне радіо_ (Припинено) diff --git a/docs/uk/test_and_ci/integration_testing_mavsdk.md b/docs/uk/test_and_ci/integration_testing_mavsdk.md index d08ff03367..a8937a36cb 100644 --- a/docs/uk/test_and_ci/integration_testing_mavsdk.md +++ b/docs/uk/test_and_ci/integration_testing_mavsdk.md @@ -7,7 +7,7 @@ PX4 can be tested end to end to using integration tests based on [MAVSDK](https: Інструкції нижче пояснюють, як налаштувати та запустити тести локально. -:::note +:::info This is the recommended integration test framework for PX4. ::: diff --git a/docs/uk/test_and_ci/integration_testing_ros1_mavros.md b/docs/uk/test_and_ci/integration_testing_ros1_mavros.md index 4ca05494ec..8235b8d5d0 100644 --- a/docs/uk/test_and_ci/integration_testing_ros1_mavros.md +++ b/docs/uk/test_and_ci/integration_testing_ros1_mavros.md @@ -9,7 +9,7 @@ It should be used only for new test cases that _require_ ROS 1. [MAVSDK Integration Testing](../test_and_ci/integration_testing_mavsdk.md) is preferred when writing new tests. ::: -:::note +:::info All PX4 integration tests are executed automatically by our [Continuous Integration](../test_and_ci/continous_integration.md) system. ::: diff --git a/docs/uk/test_and_ci/test_flights.md b/docs/uk/test_and_ci/test_flights.md index 103549e361..b2d8b55ad6 100644 --- a/docs/uk/test_and_ci/test_flights.md +++ b/docs/uk/test_and_ci/test_flights.md @@ -7,7 +7,7 @@ const { site } = useData();
-

Ця сторінка може бути застарілою. Переглянути останню версію.

+

This page may be out of date. See the latest version.

@@ -22,6 +22,8 @@ When submitting [Pull Requests](../contribute/code.md#pull-requests) for new fun Ці тестові картки визначають "стандартні" польотні тести. Їх виконує тестова команда в рамках тестування випуску та для більш значних змін у системі. +### Мультикоптер + - [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 @@ When submitting [Pull Requests](../contribute/code.md#pull-requests) for new fun - [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) diff --git a/docs/uk/test_and_ci/unit_tests.md b/docs/uk/test_and_ci/unit_tests.md index f72444d986..ba17be0263 100644 --- a/docs/uk/test_and_ci/unit_tests.md +++ b/docs/uk/test_and_ci/unit_tests.md @@ -141,7 +141,7 @@ It can be run directly in a debugger, however be careful to only run one test pe } ``` - `OPTION` can be `OPT_NOALLTEST`,`OPT_NOJIGTEST` or `0` and is considered if within px4 shell one of the two commands are called: + `OPTION` can be `OPT_NOALLTEST`,`OPT_NOJIGTEST` or `0` and is considered if within PX4 shell one of the two commands are called: ```sh pxh> tests all diff --git a/docs/uk/test_cards/fw_01_manual_modes.md b/docs/uk/test_cards/fw_01_manual_modes.md new file mode 100644 index 0000000000..9cfb7a2a38 --- /dev/null +++ b/docs/uk/test_cards/fw_01_manual_modes.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 + +❏ Стабілізований + +    ❏ Wings level with stick centered + +    ❏ Pitch/Roll response with correct bank angle limits + +    ❏ Yaw coordination + +    ❏ Throttle response 1:1 + +❏ Висота + +    ❏ 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 + +❏ Положення + +    ❏ Vehicle should hold current heading and loiter with stick centered + +    ❏ Altitude should hold current value + +    ❏ Roll input commands heading change + +## Очікувані результати + +- 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 diff --git a/docs/uk/test_cards/fw_02_full_autonomous.md b/docs/uk/test_cards/fw_02_full_autonomous.md new file mode 100644 index 0000000000..4c36986fb8 --- /dev/null +++ b/docs/uk/test_cards/fw_02_full_autonomous.md @@ -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 + +## Очікувані результати + +- Місія має бути завантажена при першій спробі +- 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) diff --git a/docs/uk/test_cards/mc_02_full_autonomous.md b/docs/uk/test_cards/mc_02_full_autonomous.md index 3653f83193..3685ab02d7 100644 --- a/docs/uk/test_cards/mc_02_full_autonomous.md +++ b/docs/uk/test_cards/mc_02_full_autonomous.md @@ -54,7 +54,7 @@ Plan a mission on the ground. Ensure the mission has - Зліт повинен бути плавним, коли газ піднято - Місія має бути завантажена при першій спробі - Дрон повинен автоматично злетіти після ввімкнення автоматичного режиму -- Vehicle shoud adjust height to RTL altitude before returning home +- Vehicle should adjust height to RTL altitude before returning home - Після посадки, коптер не повинен підскакувати на землі -- [Introduction](/index.md) +- [概述](/index.md) - [基本概念](/getting_started/px4_basic_concepts.md) - [多旋翼](/frames_multicopter/index.md) - - [Features](/features_mc/index.md) + - [特征](/features_mc/index.md) - [飞行模式](/flight_modes_mc/index.md) - [位置模式(多旋翼)](/flight_modes_mc/position.md) - - [Position Slow Mode (MC)](/flight_modes_mc/position_slow.md) + - [低速的位置模式(多旋翼)](/flight_modes_mc/position_slow.md) - [高度模式(多旋翼)](/flight_modes_mc/altitude.md) - - [Altitude Cruise Mode (MC)](/flight_modes_mc/altitude_cruise.md) - - [Stabilized Mode (MC)](/flight_modes_mc/manual_stabilized.md) + - [定高模式(多旋翼)](/flight_modes_mc/altitude_cruise.md) + - [姿态稳定模式/新手模式(多旋翼)](/flight_modes_mc/manual_stabilized.md) - [特技模式(多旋翼)](/flight_modes_mc/acro.md) - [环绕模式(多旋翼)](/flight_modes_mc/orbit.md) - - [Takeoff Mode (MC)](/flight_modes_mc/takeoff.md) - - [Land Mode (MC)](/flight_modes_mc/land.md) - - [Hold Mode (MC)](/flight_modes_mc/hold.md) - - [Follow Me Mode (MC)](/flight_modes_mc/follow_me.md) - - [Mission Mode (MC)](/flight_modes_mc/mission.md) - - [Return Mode (MC)](/flight_modes_mc/return.md) - - [Offboard Mode (MC)](/flight_modes_mc/offboard.md) - - [Collision Prevention](/computer_vision/collision_prevention.md) + - [自动起飞模式(多旋翼)](/flight_modes_mc/takeoff.md) + - [自动降落模式(多旋翼)](/flight_modes_mc/land.md) + - [定点模式(多旋翼)](/flight_modes_mc/hold.md) + - [跟随模式(多旋翼)](/flight_modes_mc/follow_me.md) + - [自主任务模式 (多旋翼)](/flight_modes_mc/mission.md) + - [返航模式(多旋翼)](/flight_modes_mc/return.md) + - [外部控制模式(多旋翼)](/flight_modes_mc/offboard.md) + - [碰撞预防](/computer_vision/collision_prevention.md) - [地形跟随/保持](/flying/terrain_following_holding.md) - - [Terrain Following/Holding](/flying/terrain_following_holding.md) - - [Throw Launch](/flight_modes_mc/throw_launch.md) + - [地形跟随/保持](/flying/terrain_following_holding.md) + - [抛飞启动](/flight_modes_mc/throw_launch.md) - [Assembly](/assembly/assembly_mc.md) - - [Configuration/Tuning](/config_mc/index.md) - - [Auto-tune](/config/autotune_mc.md) - - [Filter/Control Latency Tuning](/config_mc/filter_tuning.md) - - [PID Tuning (Manual/Basic)](/config_mc/pid_tuning_guide_multicopter_basic.md) - - [PID Tuning Guide (Manual/Advanced)](/config_mc/pid_tuning_guide_multicopter.md) - - [Setpoint Tuning (Trajectory Generator)](/config_mc/mc_trajectory_tuning.md) - - [Jerk-limited Type Trajectory](/config_mc/mc_jerk_limited_type_trajectory.md) - - [Racer Setup](/config_mc/racer_setup.md) + - [配置/调参](/config_mc/index.md) + - [自动调优](/config/autotune_mc.md) + - [滤波/控制延迟调整](/config_mc/filter_tuning.md) + - [PID配置(手动/基本)](/config_mc/pid_tuning_guide_multicopter_basic.md) + - [PID配置引导(手动/基本)](/config_mc/pid_tuning_guide_multicopter.md) + - [定点配置 (轨迹生成)](/config_mc/mc_trajectory_tuning.md) + - [限速型轨迹](/config_mc/mc_jerk_limited_type_trajectory.md) + - [竞速设置](/config_mc/racer_setup.md) - [着陆探测器配置](/advanced_config/land_detector.md) - [静态压力生成](/advanced_config/static_pressure_buildup.md) - - [Flying (Basics)](/flying/basic_flying_mc.md) + - [飞行(基本)](/flying/basic_flying_mc.md) - [整机](/complete_vehicles_mc/index.md) - - [ModalAI Starling (PX4 Dev Kit)](/complete_vehicles_mc/modalai_starling.md) + - [多场景AI无人机——ModalAI Starling](/complete_vehicles_mc/modalai_starling.md) - [PX4 视觉套件](/complete_vehicles_mc/px4_vision_kit.md) - [MindRacer BNF & RTF](/complete_vehicles_mc/mindracer_BNF_RTF.md) - [MindRacer 210](/complete_vehicles_mc/mindracer210.md) @@ -50,18 +50,18 @@ - [X500 (Pixhawk 4)](/frames_multicopter/holybro_x500_pixhawk4.md) - [S500 V2 (Pixhawk 4)](/frames_multicopter/holybro_s500_v2_pixhawk4.md) - [Lumenier QAV-R 5" Racer (Pixracer)](/frames_multicopter/qav_r_5_kiss_esc_racer.md) - - [QAV250 (Pixhawk4 Mini) - Discontinued](/frames_multicopter/holybro_qav250_pixhawk4_mini.md) + - [QAV250 (Pixhawk4 Mini) - 停产](/frames_multicopter/holybro_qav250_pixhawk4_mini.md) - [DIY Builds](/frames_multicopter/diy_builds.md) - [Omnicopter](/frames_multicopter/omnicopter.md) - [DJI F450 (CUAV v5+)](/frames_multicopter/dji_f450_cuav_5plus.md) - [DJI F450 (CUAV v5 nano)](/frames_multicopter/dji_f450_cuav_5nano.md) -- [Planes (Fixed-Wing)](/frames_plane/index.md) - - [Features](/features_fw/index.md) +- [飞机(固定翼)](/frames_plane/index.md) + - [特性](/features_fw/index.md) - [Gain compression](/features_fw/gain_compression.md) - [Assembly](/assembly/assembly_fw.md) - - [Config/Tuning](/config_fw/index.md) - - [Auto-tune](/config/autotune_fw.md) + - [配置/调参](/config_fw/index.md) + - [自动调优](/config/autotune_fw.md) - [Rate/Attitude Controller Tuning Guide](/config_fw/pid_tuning_guide_fixedwing.md) - [Altitude/Position Controller Tuning Guide](/config_fw/position_tuning_guide_fixedwing.md) - [Airspeed Scale Estimate Handling](/config_fw/airspeed_scale_handling.md) @@ -94,6 +94,7 @@ - [VTOL后转换调参](/config_vtol/vtol_back_transition_tuning.md) - [没有空速传感器的VTOL ](/config_vtol/vtol_without_airspeed_sensor.md) - [垂直起降风向仪](/config_vtol/vtol_weathervane.md) + - [VTOL Ice Shedding](/config_vtol/vtol_ice_shedding.md) - [飞行模式](/flight_modes_vtol/index.md) - [Mission Mode (VTOL)](/flight_modes_vtol/mission.md) - [Return Mode (VTOL)](/flight_modes_vtol/return.md) @@ -129,6 +130,7 @@ - [LED灯含义](/getting_started/led_meanings.md) - [声调/声音含义](/getting_started/tunes.md) - [QGroundControl Flight-Readiness Status](/flying/pre_flight_checks.md) + - [Asset Tracking](/debug/asset_tracking.md) - [Hardware Selection & Setup](/hardware/drone_parts.md) - [飞行控制器(Autopilots)](/flight_controller/index.md) @@ -152,15 +154,11 @@ - [Wiring Quickstart](/assembly/quick_start_pixhawk5x.md) - [Holybro Pixhawk 4 (FMUv5)](/flight_controller/pixhawk4.md) - [Wiring Quickstart](/assembly/quick_start_pixhawk4.md) - - [Holybro Pixhawk 4 Mini (FMUv5) - Discontinued](/flight_controller/pixhawk4_mini.md) - - [Wiring Quickstart](/assembly/quick_start_pixhawk4_mini.md) - - [Drotek Pixhawk 3 Pro (FMUv4pro) - Discontinued](/flight_controller/pixhawk3_pro.md) - [mRo Pixracer (FMUv4)](/flight_controller/pixracer.md) - [Wiring Quickstart](/assembly/quick_start_pixracer.md) - [Hex Cube Black (FMUv3)](/flight_controller/pixhawk-2.md) - [mRo Pixhawk (FMUv3)](/flight_controller/mro_pixhawk.md) - [mRo (3DR) Pixhawk Wiring Quickstart](/assembly/quick_start_pixhawk.md) - - [Holybro Pixhawk Mini (FMUv3) - Discontinued](/flight_controller/pixhawk_mini.md) - [Manufacturer-Supported Autopilots](/flight_controller/autopilot_manufacturer_supported.md) - [Accton Godwit GA1](/flight_controller/accton-godwit_ga1.md) - [AirMind MindPX](/flight_controller/mindpx.md) @@ -174,10 +172,12 @@ - [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 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) - [CubePilot Cube Yellow (CubePilot)](/flight_controller/cubepilot_cube_yellow.md) - [Cube Wiring Quickstart](/assembly/quick_start_cube.md) + - [Gear Up AirBrainH743](/flight_controller/gearup_airbrainh743.md) - [Holybro Kakute H7v2](/flight_controller/kakuteh7v2.md) - [Holybro Kakute H7mini](/flight_controller/kakuteh7mini.md) - [Holybro Kakute H7](/flight_controller/kakuteh7.md) @@ -195,6 +195,7 @@ - [SVehicle E2](/flight_controller/svehicle_e2.md) - [ThePeach FCC-K1](/flight_controller/thepeach_k1.md) - [ThePeach FCC-R1](/flight_controller/thepeach_r1.md) + - [AP-H743-R1](/flight_controller/x-mav_ap-h743r1.md) - [Experimental Autopilots](/flight_controller/autopilot_experimental.md) - [BeagleBone Blue](/flight_controller/beaglebone_blue.md) - [Raspberry Pi 2/3 Navio2](/flight_controller/raspberry_pi_navio2.md) @@ -202,22 +203,6 @@ - [PilotPi with Raspberry Pi OS](/flight_controller/raspberry_pi_pilotpi_rpios.md) - [PilotPi with Ubuntu Server](/flight_controller/raspberry_pi_pilotpi_ubuntu_server.md) - [Discontinued Autopilots/Vehicles](/flight_controller/autopilot_discontinued.md) - - [Drotek Dropix (FMUv2)](/flight_controller/dropix.md) - - [Omnibus F4 SD](/flight_controller/omnibus_f4_sd.md) - - [Bitcraze Crazyflie 2.0 ](/complete_vehicles_mc/crazyflie2.md) - - [Aerotenna OcPoC-Zynq Mini](/flight_controller/ocpoc_zynq.md) - - [CUAV X7](/flight_controller/cuav_x7.md) - - [CUAV v5](/flight_controller/cuav_v5.md) - - [CUAV Pixhack v3 (FMUv3)](/flight_controller/pixhack_v3.md) - - [Holybro Kakute F7](/flight_controller/kakutef7.md) - - [Holybro Pixfalcon](/flight_controller/pixfalcon.md) - - [Holybro pix32 (FMUv2)](/flight_controller/holybro_pix32.md) - - [ModalAI Flight Core v1](/flight_controller/modalai_fc_v1.md) - - [ModalAI VOXL Flight](/flight_controller/modalai_voxl_flight.md) - - [mRo X2.1 (FMUv2)](/flight_controller/mro_x2.1.md) - - [mRo AUAV-X2](/flight_controller/auav_x2.md) - - [NXP RDDRONE-FMUK66 FMU](/flight_controller/nxp_rddrone_fmuk66.md) - - [3DR Pixhawk 1](/flight_controller/pixhawk.md) - [Pixhawk Autopilot Bus (PAB) & Carriers](/flight_controller/pixhawk_autopilot_bus.md) - [ARK Electronics Pixhawk Autopilot Bus Carrier](/flight_controller/ark_pab.md) - [Mounting the Flight Controller](/assembly/mount_and_orient_controller.md) @@ -247,18 +232,23 @@ - [TFSlot Airspeed Sensor](/sensor/airspeed_tfslot.md) - [Barometers](/sensor/barometer.md) - [距离传感器 \(测距仪\)](/sensor/rangefinders.md) - - [Lightware Lidars (SF/LW)](/sensor/sfxx_lidar.md) - - [Lightware SF45 Rotary Lidar](/sensor/sf45_rotating_lidar.md) - [Ainstein US-D1 标准雷达高度计](/sensor/ulanding_radar.md) - - [LeddarOne 激光雷达](/sensor/leddar_one.md) + - [ARK DIST SR (CAN/UART)](/dronecan/ark_dist.md) + - [ARK DIST MR (CAN/UART)](/dronecan/ark_dist_mr.md) - [北醒 TFmini 激光雷达](/sensor/tfmini.md) + - [LeddarOne 激光雷达](/sensor/leddar_one.md) - [Lidar-Lite](/sensor/lidar_lite.md) + - [Lightware Lidars (SF/LW/GRF)](/sensor/sfxx_lidar.md) + - [Lightware SF45 Rotary Lidar](/sensor/sf45_rotating_lidar.md) + - [Lightware GRF250/GRF500 Gimbal Lidar](/sensor/grf_lidar.md) - [TeraRanger](/sensor/teraranger.md) - [✘ Lanbao PSK-CM8JL65-CC5](/sensor/cm8jl65_ir_distance_sensor.md) - [Avionics Anonymous Laser Altimeter UAVCAN Interface (CAN)](/dronecan/avanon_laser_interface.md) - [GNSS (GPS)](/gps_compass/index.md) - [ARK GPS (CAN)](/dronecan/ark_gps.md) + - [ARK DAN GPS](/gps_compass/ark_dan_gps.md) - [ARK SAM GPS](/gps_compass/ark_sam_gps.md) + - [ARK SAM GPS MINI](/gps_compass/ark_sam_gps_mini.md) - [ARK TESEO GPS](/dronecan/ark_teseo_gps.md) - [CUAV NEO 3 GPS](/gps_compass/gps_cuav_neo_3.md) - [CUAV NEO 3 Pro GPS (CAN)](/gps_compass/gps_cuav_neo_3pro.md) @@ -269,7 +259,11 @@ - [Holybro M8N & M9N GPS](/gps_compass/gps_holybro_m8n_m9n.md) - [Sky-Drones SmartAP GPS](/gps_compass/gps_smartap.md) - [RTK GNSS](/gps_compass/rtk_gps.md) + - [ARK G5 RTK GPS](/dronecan/ark_g5_rtk_gps.md) + - [ARK G5 RTK HEADING GPS](/dronecan/ark_g5_rtk_heading_gps.md) - [ARK RTK GPS (CAN)](/dronecan/ark_rtk_gps.md) + - [ARK RTK GPS L1 L5 (CAN)](/dronecan/ark_rtk_gps_l1_l2.md) + - [ARK X20 RTK GPS (CAN)](/dronecan/ark_x20_rtk_gps.md) - [ARK MOSAIC-X5 RTK GPS (CAN)](/dronecan/ark_mosaic__rtk_gps.md) - [RTK GPS Heading with Dual u-blox F9P](/gps_compass/u-blox_f9p_heading.md) - [CUAV C-RTK](/gps_compass/rtk_gps_cuav_c-rtk.md) @@ -309,21 +303,23 @@ - [ADSB/FLARM (空中防撞)](/config/actuators.md) - [电调(ESC)校准](/advanced_config/esc_calibration.md) - [电调 & 电机](/peripherals/esc_motors.md) + - [ESC Protocols](/esc/esc_protocols.md) - [PWM 电调和伺服系统](/peripherals/pwm_escs_and_servo.md) - [DShot 电调](/peripherals/dshot.md) - [OneShot 电调和伺服系统](/peripherals/oneshot.md) - [DroneCAN ESCs](/dronecan/escs.md) - - [Zubax Telega](/dronecan/zubax_telega.md) - [PX4 Sapog ESC Firmware](/dronecan/sapog.md) - - [Holybro Kotleta](/dronecan/holybro_kotleta.md) - - [Vertiq](/peripherals/vertiq.md) - - [VESC](/peripherals/vesc.md) + - [ARK 4IN1 ESC](/esc/ark_4in1_esc.md) + - [Holybro Kotleta](/dronecan/holybro_kotleta.md) + - [Vertiq Motor/ESC Modules](/peripherals/vertiq.md) + - [VESC Project ESCs](/peripherals/vesc.md) + - [Zubax Telega ESCs](/dronecan/zubax_telega.md) - - [Radio Control (RC)](/getting_started/rc_transmitter_receiver.md) - - [无线电系统设置](/config/radio.md) - - [飞行模式](/config/flight_mode.md) - - - [Joysticks](/config/joystick.md) + - [Manual Control](/config/manual_control.md) + - [Radio Control (RC)](/getting_started/rc_transmitter_receiver.md) + - [无线电系统设置](/config/radio.md) + - [飞行模式](/config/flight_mode.md) + - [Joysticks](/config/joystick.md) - [Data Links](/data_links/index.md) - [MAVLink 回传(OSD/GCS)](/peripherals/mavlink_peripherals.md) @@ -350,17 +346,20 @@ - [Satellite Comms (Iridium/RockBlock)](/advanced_features/satcom_roadblock.md) + - [Analog Video Transmitters](/vtx/index.md) + - [Power Systems](/power_systems/index.md) - [Battery Estimation Tuning](/config/battery.md) - [Battery Chemistry Overview](/power_systems/battery_chemistry.md) - [Power Modules/PDB](/power_module/index.md) + - [ARK PAB Power Module](/power_module/ark_pab_power_module.md) + - [ARK 12S PAB Power Module](/power_module/ark_12s_pab_power_module.md) + - [ARK 12S Payload Power Module](/power_module/ark_12s_payload_power_module.md) - [雷迅 HV pm](/power_module/cuav_hv_pm.md) - [雷迅 CAN PMU](/dronecan/cuav_can_pmu.md) - [Holybro PM02](/power_module/holybro_pm02.md) - [Holybro PM07](/power_module/holybro_pm07_pixhawk4_power_module.md) - [Holybro PM06 V2](/power_module/holybro_pm06_pixhawk4mini_power_module.md) - - [ARK PAB Power Module](/power_module/ark_pab_power_module.md) - - [ARK 12S PAB Power Module](/power_module/ark_12s_pab_power_module.md) - [Holybro PM02D (digital)](/power_module/holybro_pm02d.md) - [Holybro PM03D (digital)](/power_module/holybro_pm03d.md) - [Pomegranate Systems Power Module](/dronecan/pomegranate_systems_pm.md) @@ -396,6 +395,7 @@ - [PX4 DroneCAN Firmware](/dronecan/px4_cannode_fw.md) - [ARK CANnode](/dronecan/ark_cannode.md) - [RaccoonLab CAN Nodes](/dronecan/raccoonlab_nodes.md) + - [DroneCAN Lights](/dronecan/lights.md) - [Cable Wiring](/assembly/cable_wiring.md) @@ -423,6 +423,7 @@ - [高级配置](/advanced_config/index.md) - [Using PX4's Navigation Filter (EKF2)](/advanced_config/tuning_the_ecl_ekf.md) + - [GNSS-Denied & Degraded Flight](/advanced_config/gnss_degraded_or_denied_flight.md) - [查找/更新参数](/advanced_config/parameters.md) - [Full Parameter Reference](/advanced_config/parameter_reference.md) @@ -512,6 +513,7 @@ - [PPS Time Synchronization](/advanced/pps_time_sync.md) - [中间件](/middleware/index.md) - [uORB 通讯](/middleware/uorb.md) + - [uORB Docs Standard](/uorb/uorb_documentation.md) - [uORB 图](/middleware/uorb_graph.md) - [uORB 消息参考](/msg_docs/index.md) - [Versioned](/msg_docs/versioned_messages.md) @@ -530,6 +532,8 @@ - [LongitudinalControlConfiguration](/msg_docs/LongitudinalControlConfiguration.md) - [ManualControlSetpoint](/msg_docs/ManualControlSetpoint.md) - [ModeCompleted](/msg_docs/ModeCompleted.md) + - [RaptorInput](/msg_docs/RaptorInput.md) + - [RaptorStatus](/msg_docs/RaptorStatus.md) - [RegisterExtComponentReply](/msg_docs/RegisterExtComponentReply.md) - [RegisterExtComponentRequest](/msg_docs/RegisterExtComponentRequest.md) - [TrajectorySetpoint](/msg_docs/TrajectorySetpoint.md) @@ -558,6 +562,7 @@ - [Airspeed](/msg_docs/Airspeed.md) - [AirspeedWind](/msg_docs/AirspeedWind.md) - [AutotuneAttitudeControlStatus](/msg_docs/AutotuneAttitudeControlStatus.md) + - [AuxGlobalPosition](/msg_docs/AuxGlobalPosition.md) - [BatteryInfo](/msg_docs/BatteryInfo.md) - [ButtonEvent](/msg_docs/ButtonEvent.md) - [CameraCapture](/msg_docs/CameraCapture.md) @@ -574,6 +579,7 @@ - [DebugKeyValue](/msg_docs/DebugKeyValue.md) - [DebugValue](/msg_docs/DebugValue.md) - [DebugVect](/msg_docs/DebugVect.md) + - [DeviceInformation](/msg_docs/DeviceInformation.md) - [DifferentialPressure](/msg_docs/DifferentialPressure.md) - [DistanceSensor](/msg_docs/DistanceSensor.md) - [DistanceSensorModeChangeRequest](/msg_docs/DistanceSensorModeChangeRequest.md) @@ -606,6 +612,7 @@ - [FollowTargetEstimator](/msg_docs/FollowTargetEstimator.md) - [FollowTargetStatus](/msg_docs/FollowTargetStatus.md) - [FuelTankStatus](/msg_docs/FuelTankStatus.md) + - [GainCompression](/msg_docs/GainCompression.md) - [GeneratorStatus](/msg_docs/GeneratorStatus.md) - [GeofenceResult](/msg_docs/GeofenceResult.md) - [GeofenceStatus](/msg_docs/GeofenceStatus.md) @@ -749,6 +756,7 @@ - [VehicleThrustSetpoint](/msg_docs/VehicleThrustSetpoint.md) - [VehicleTorqueSetpoint](/msg_docs/VehicleTorqueSetpoint.md) - [VelocityLimits](/msg_docs/VelocityLimits.md) + - [Vtx](/msg_docs/Vtx.md) - [WheelEncoders](/msg_docs/WheelEncoders.md) - [Wind](/msg_docs/Wind.md) - [YawEstimatorStatus](/msg_docs/YawEstimatorStatus.md) @@ -756,11 +764,17 @@ - [ArmingCheckReplyV0](/msg_docs/ArmingCheckReplyV0.md) - [ArmingCheckRequestV0](/msg_docs/ArmingCheckRequestV0.md) - [BatteryStatusV0](/msg_docs/BatteryStatusV0.md) + - [ConfigOverridesV0](/msg_docs/ConfigOverridesV0.md) - [EventV0](/msg_docs/EventV0.md) - [HomePositionV0](/msg_docs/HomePositionV0.md) + - [RegisterExtComponentReplyV0](/msg_docs/RegisterExtComponentReplyV0.md) + - [RegisterExtComponentRequestV0](/msg_docs/RegisterExtComponentRequestV0.md) - [VehicleAttitudeSetpointV0](/msg_docs/VehicleAttitudeSetpointV0.md) + - [VehicleCommandAckV0](/msg_docs/VehicleCommandAckV0.md) + - [VehicleGlobalPositionV0](/msg_docs/VehicleGlobalPositionV0.md) - [VehicleLocalPositionV0](/msg_docs/VehicleLocalPositionV0.md) - [VehicleStatusV0](/msg_docs/VehicleStatusV0.md) + - [VehicleStatusV1](/msg_docs/VehicleStatusV1.md) - [MAVLink Messaging](/mavlink/index.md) - [Adding Messages](/mavlink/adding_messages.md) - [Streaming Messages](/mavlink/streaming_messages.md) @@ -825,9 +839,11 @@ - [Camera Integration/Architecture](/camera/camera_architecture.md) - [机器视觉](/advanced/computer_vision.md) - [Motion Capture (VICON, Optitrack, NOKOV)](/tutorials/motion-capture.md) - - [Neural Networks](/advanced/neural_networks.md) - - [Neural Network Module Utilities](/advanced/nn_module_utilities.md) - - [TensorFlow Lite Micro (TFLM)](/advanced/tflm.md) + - [Neural Networks](/neural_networks/index.md) + - [MC NN Control Module (Generic)](/neural_networks/mc_neural_network_control.md) + - [Neural Network Module Utilities](/neural_networks/nn_module_utilities.md) + - [TensorFlow Lite Micro (TFLM)](/neural_networks/tflm.md) + - [RAPTOR Adaptive RL NN Module](/neural_networks/raptor.md) - [安装英特尔 RealSense R200 的驱动程序](/advanced/realsense_intel_driver.md) - [切换状态估计器](/advanced/switching_state_estimators.md) - [外部模块](/advanced/out_of_tree_modules.md) @@ -909,7 +925,9 @@ - [许可证](/contribute/licenses.md) - [版本发布](/releases/index.md) + - [Release Process](/releases/release_process.md) - [main (alpha)](/releases/main.md) + - [1.17 (alpha)](/releases/1.17.md) - [1.16 (stable)](/releases/1.16.md) - [1.15](/releases/1.15.md) - [1.14](/releases/1.14.md) diff --git a/docs/zh/advanced/community_supported_dev_env.md b/docs/zh/advanced/community_supported_dev_env.md index 99bd13ba5c..3f89fe0589 100644 --- a/docs/zh/advanced/community_supported_dev_env.md +++ b/docs/zh/advanced/community_supported_dev_env.md @@ -1,6 +1,6 @@ # 社区支持的开发者工具 -本节包含 _社区支持的_ 开发搭建、集成开发环境、模拟器和其他工具的信息。 +本章节包含社区支持的开发环境搭建,IDE,模拟器和其他工具。 :::warning 这些设置没有核心开发团队的维护、测试或支持 @@ -15,9 +15,9 @@ - 开发平台/设置 - [CentOS Linux](../dev_setup/dev_env_linux_centos.md) - [Arch Linux](../dev_setup/dev_env_linux_arch.md) - - [Windows VM Toolchain](../dev_setup/dev_env_windows_vm.md) — 在 Windows 虚拟机中运行的 Ubuntu 。 - - [Windows Cygwin Toolchain](../dev_setup/dev_env_windows_cygwin.md) — 仅适用于 PX4 v1.12 的 Windows 设置 + - [Windows VM 工具链](../dev_setup/dev_env_windows_vm.md) — 在 Windows 虚拟机中安装 Ubuntu。 + - [Windows Cygwin 工具链](../dev_setup/dev_env_windows_cygwin.md) — 仅适用于 PX4 v1.12 的 Windows 设置 - [Windows Cygwin 工具链维护](../dev_setup/dev_env_windows_cygwin_packager_setup.md) - 集成开发环境 - [Qt Creator IDE](../dev_setup/qtcreator.md) -- [仿真模拟器](../simulation/community_supported_simulators.md) — [Simulation-In-Hardware](../sim_sih/index.md), [FlightGear](../sim_flightgear/index.md), [JSBSim](../sim_jsbsim/index.md), [AirSim](../sim_airsim/index.md), [HITL](../simulation/hitl.md) +- [模拟器](../simulation/community_supported_simulators.md) — [Simulation-In-Hardware](../sim_sih/index.md), [FlightGear](../sim_flightgear/index.md), [JSBSim](../sim_jsbsim/index.md), [AirSim](../sim_airsim/index.md), [HITL](../simulation/hitl.md) diff --git a/docs/zh/advanced/computer_vision.md b/docs/zh/advanced/computer_vision.md index 1add3d976a..d559016780 100644 --- a/docs/zh/advanced/computer_vision.md +++ b/docs/zh/advanced/computer_vision.md @@ -67,7 +67,7 @@ The consensus [appears to be](https://discuss.px4.io/t/vio-vs-optical-flow/34680 Optical flow: -- 向下光学流使得你能够通过陀螺仪的角速度来校正角平面速度。 +- Downward facing optical flow gives you a planar velocity that's corrected for angular velocity with the gyro. - 需要准确的地面距离并假定地面为平面。 在这种情况下,它可能与VIO一样准确可靠(例如室内飞行) - 它比VIO更健壮,因为它的状态较少。 diff --git a/docs/zh/advanced/gimbal_control.md b/docs/zh/advanced/gimbal_control.md index 234dfcd2ff..74c406679d 100644 --- a/docs/zh/advanced/gimbal_control.md +++ b/docs/zh/advanced/gimbal_control.md @@ -20,7 +20,7 @@ By default this is set to `Disabled (-1)` and the driver does not run. 在选择输入模式后,请重新启动飞行器以启动挂载驱动程序。 You should set `MNT_MODE_IN` to one of: `RC (1)`, `MAVlink gimbal protocol v2 (4)` or `Auto (0)` (the other options are deprecated). -If you select `Auto (0)`, the gimbal will automatically select either RC or or MAVLink input based on the latest input. +If you select `Auto (0)`, the gimbal will automatically select either RC or MAVLink input based on the latest input. 请注意,从 MAVLink 到 RC 的自动切换需要一个大幅度地杆量操作! The output is set using the [MNT_MODE_OUT](../advanced_config/parameter_reference.md#MNT_MODE_OUT) parameter. diff --git a/docs/zh/advanced/nn_module_utilities.md b/docs/zh/advanced/nn_module_utilities.md deleted file mode 100644 index 96ce063546..0000000000 --- a/docs/zh/advanced/nn_module_utilities.md +++ /dev/null @@ -1,86 +0,0 @@ -# Neural Network Module: System Integration - -The neural control module ([mc_nn_control](../modules/modules_controller.md#mc-nn-control)) implements an end-to-end controller utilizing neural networks. - -The parts of the module directly concerned with generating the code for the trained neural network and integrating it into the module are covered in [TensorFlow Lite Micro (TFLM)](../advanced/tflm.md). -This page covers the changes that were made to integrate the module into PX4, both within the module, and in larger system configuration. - -:::tip -This topic should help you to shape the module to your own needs. - -You will need some familiarity with PX4 development. -For more information see the developer [Getting Started](../dev_setup/getting_started.md). -::: - -## Autostart - -A line to autostart the [mc_nn_control](../modules/modules_controller.md#mc-nn-control) module has been added in the [`ROMFS/px4fmu_common/init.d/rc.mc_apps`](https://github.com/PX4/PX4-Autopilot/blob/main/ROMFS/px4fmu_common/init.d/rc.mc_apps) startup script. - -It checks whether the module is included by looking for the parameter [MC_NN_EN](../advanced_config/parameter_reference.md#MC_NN_EN). -If this is set to `1` (the default value), the module will be started when booting PX4. -Similarly you could create other parameters in the [`mc_nn_control_params.c`](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mc_nn_control/mc_nn_control_params.c) file for other startup script checks. - -## Custom Flight Mode - -The module creates its own flight mode "Neural Control" which lets you choose it from the flight mode menu in QGC and bind it to a switch on you RC controller. -This is done by using the [ROS 2 Interface Library](../ros2/px4_ros2_interface_lib.md) internally. -This involves several steps and is visualized here: - -:::info -The module does not actually use ROS 2, it just uses the API exposed through uORB topics. -::: - -:::info -In some QGC versions the flight mode does not show up, so make sure to update to the newest version. -This only works for some flight controllers, so you might have to use an RC controller to switch to the correct external flight mode. -::: - -![neural_mode_registration](../../assets/advanced/neural_mode_registration.png) - -1. Publish a [RegisterExtComponentRequest](../msg_docs/RegisterExtComponentRequest.md). - This specifies what you want to create, you can read more about this in the [Control Interface](../ros2/px4_ros2_control_interface.md). - In this case we register an arming check and a mode. -2. Wait for a [RegisterExtComponentReply](../msg_docs/RegisterExtComponentReply.md). - This will give feedback on wether the mode registration was successful, and what the mode and arming check id is for the new mode. -3. [Optional] With the mode id, publish a [VehicleControlMode](../msg_docs/VehicleControlMode.md) message on the `config_control_setpoints` topic. - Here you can configure what other modules run in parallel. - The example controller replaces everything, so it turns off allocation. - If you want to replace other parts you can enable or disable the modules accordingly. -4. [Optional] With the mode id, publish a [ConfigOverrides](../msg_docs/ConfigOverrides.md) on the `config_overrides_request` topic. - (This is not done in the example module) This will let you defer failsafes or stop it from automatically disarming. -5. When the mode has been registered a [ArmingCheckRequest](../msg_docs/ArmingCheckRequest.md) will be sent, asking if your mode has everything it needs to run. - This message must be answered with a [ArmingCheckReply](../msg_docs/ArmingCheckReply.md) so the mode is not flagged as unresponsive. - In this response it is possible to set what requirements the mode needs to run, like local position. - If any of these requirements are set the commander will stop you from switching to the mode if they are not fulfilled. - It is also important to set health_component_index and num_events to 0 to not get a segmentation fault. - Unless you have a health component or events. -6. Listen to the [VehicleStatus](../msg_docs/VehicleStatus.md) topic. - If the nav_state equals the assigned `mode_id`, then the Neural Controller is activated. -7. When active the module will run the controller and publish to [ActuatorMotors](../msg_docs/ActuatorMotors.md). - If you want to replace a different part of the controller, you should find the appropriate topic to publish to. - -To see how the requests are handled you can check out [src/modules/commander/ModeManagement.cpp](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/commander/ModeManagement.cpp). - -## 日志 - -To add module-specific logging a new topic has been added to [uORB](../middleware/uorb.md) called [NeuralControl](../msg_docs/NeuralControl.md). -The message definition is also added in `msg/CMakeLists.txt`, and to [`src/modules/logger/logged_topics.cpp`](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/logger/logged_topics.cpp) under the debug category. -For these messages to be saved in your logs you need to include `debug` in the [SDLOG_PROFILE](../advanced_config/parameter_reference.md#SDLOG_PROFILE) parameter. - -## Timing - -The module has two includes for measuring the inference times. -The first one is a driver that works on the actual flight controller units, but a second one, `chrono`, is loaded for SITL testing. -Which timing library is included and used is based on wether PX4 is built with NUTTX or not. - -## Changing the setpoint - -The module uses the [TrajectorySetpoint](../msg_docs/TrajectorySetpoint.md) message’s position fields to define its target. -To follow a trajectory, you can send updated setpoints. -For an example of how to do this in a PX4 module, see the [mc_nn_testing](https://github.com/SindreMHegre/PX4-Autopilot-public/tree/main/src/modules/mc_nn_testing) module in this fork. -Note that this is not included in upstream PX4. -To use it, copy the module folder from the linked repository into your workspace, and enable it by adding the following line to your `.px4board` file: - -```sh -CONFIG_MODULES_MC_NN_TESTING=y -``` diff --git a/docs/zh/advanced/pps_time_sync.md b/docs/zh/advanced/pps_time_sync.md index 6679279b60..76733f88b3 100644 --- a/docs/zh/advanced/pps_time_sync.md +++ b/docs/zh/advanced/pps_time_sync.md @@ -57,6 +57,17 @@ param set PWM_MAIN_FUNC10 2064 param set PPS_CAP_ENABLE 1 ``` +#### Multi-GPS Setups + +If you have multiple GPS receivers, set `PPS_CAP_GPS_ID` to the device ID of the GPS receiver that emits the PPS signal. +When set to `0` (default), the driver uses the first available GPS instance. + +You can find the device ID by running: + +```sh +listener sensor_gps +``` + ### 布线 The wiring configuration depends on your specific flight controller. @@ -80,7 +91,7 @@ For FMUv6S, you need to route the PPS signal separately: For ARK FMUv6X on the Jetson carrier board: -1. Connect your GNSS module using either the 10-pin or 6-pin GPS connector: [ARK PAB GPS1 Interface](../flight_controller/ark_pab#gps1) +1. Connect your GNSS module using either the 10-pin or 6-pin GPS connector: [ARK PAB GPS1 Interface](../flight_controller/ark_pab.md#gps1) 2. Connect the PPS signal to the **FMU_CAP** pin: [ARK PAB ADIO Interface](../flight_controller/ark_pab.md#adio) ## 验证 @@ -131,5 +142,5 @@ See also: The PPS signal provides much higher temporal precision than the transmitted time data, which has latency and jitter from serial communication. :::warning -If the PPS driver does not sending any data for 5 seconds (despite having `PPS_CAP_ENABLE` set to 1), the `EKF2_GPS_DELAY` will be used instead for estimating the latency. +If the PPS driver does not send any data for 5 seconds (despite having `PPS_CAP_ENABLE` set to 1), the corresponding `SENS_GPS*_DELAY` parameter will be used instead for estimating the latency. ::: diff --git a/docs/zh/advanced/px4_metadata.md b/docs/zh/advanced/px4_metadata.md index ee77ca81f6..8e5c39512e 100644 --- a/docs/zh/advanced/px4_metadata.md +++ b/docs/zh/advanced/px4_metadata.md @@ -45,7 +45,7 @@ PX4 元数据是在 PX4 源代码及其相关数据中定义的。 内存受限的飞控二进制文件不会在二进制文件中存储参数元数据,而是引用存储在`px4-travis.s3.amazonaws.com`上的相同数据。 例如,这适用于[Umnibus F4 SD](../flight_controller/omnibus_f4_sd.md)。 -元数据是通过 [github CI](https://github.com/PX4/PX4-Autopilot/blob/main/.github/workflows/metadata.yml) 上传的,用于所有构建目标(因此只有在参数被合并到主体后才能使用)。 +The metadata is uploaded via the [build_all_targets](https://github.com/PX4/PX4-Autopilot/blob/main/.github/workflows/build_all_targets.yml) GitHub CI workflow for all build targets (and hence will only be available once parameters have been merged into main). :::info 你可以识别出内存受限的开发板,因为它们在[px4board定义文件](https://github.com/PX4/PX4-Autopilot/blob/main/boards/omnibus/f4sd/default.px4board) 中指定了`CONFIG_BOARD_CONSTRAINED_FLASH=y` 。 @@ -60,6 +60,7 @@ PX4 元数据是在 PX4 源代码及其相关数据中定义的。 这与Crowdin集成,用于获取翻译,这些翻译存储在 [translated](https://github.com/PX4/PX4-Metadata-Translations/tree/main/translated) 文件夹中,每种语言都有 xz 压缩的翻译文件。 这些是由载具的组件元数据引用的,并在需要时下载。 有关更多信息,请参阅 [PX4-Metadata-Translations](https://github.com/PX4/PX4-Metadata-Translations/) 和 [Component Metadata Protocol > Translation](https://mavlink.io/en/services/component_information.html#translation)。 +This is orchestrated by the [docs-orchestrator](https://github.com/PX4/PX4-Autopilot/blob/main/.github/workflows/docs-orchestrator.yml) GitHub CI workflow, which also regenerates auto-generated documentation such as parameter reference, airframe reference, and uORB message docs. :::info 主分支的参数 XML 文件通过 CI 复制到 QGC 源代码树中,并在没有通过组件元数据协议获取到元数据的情况下用作后备方案 (该方法早于组件元数据协议)。 diff --git a/docs/zh/advanced/tflm.md b/docs/zh/advanced/tflm.md deleted file mode 100644 index 8d856c3bd5..0000000000 --- a/docs/zh/advanced/tflm.md +++ /dev/null @@ -1,77 +0,0 @@ -# TensorFlow Lite Micro (TFLM) - -The PX4 [Multicopter Neural Network](../advanced/neural_networks.md) module ([mc_nn_control](../modules/modules_controller.md#mc-nn-control)) integrates a neural network that uses the [TensorFlow Lite Micro (TFLM)](https://github.com/tensorflow/tflite-micro) inference library. - -This is a mature inference library intended for use on embedded devices, and is hence a suitable choice for PX4. - -This guide explains how the TFLM library is integrated into the [mc_nn_control](../modules/modules_controller.md#mc-nn-control) module, and the changes you would have to make to use it for your own neural network. - -:::tip -For more information, see the [TFLM guide](https://ai.google.dev/edge/litert/microcontrollers/get_started). -::: - -## TLMF NN Formats - -TFLM uses networks in its own [tflite format](https://ai.google.dev/edge/litert/models/convert). -However, since many microcontrollers do not have native filesystem support, a tflite file can be converted to a C++ source and header file. - -This is what is done in `mc_nn_control`. -The tflight neural network is represented in code by the files [`control_net.cpp`](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mc_nn_control/control_net.cpp) and [`control_net.hpp`](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mc_nn_control/control_net.hpp). - -### Getting a Network in tflite Format - -There are many online resource for generating networks in the `.tflite` format. - -For this example we trained the network in the open source [Aerial Gym Simulator](https://ntnu-arl.github.io/aerial_gym_simulator/). -Aerial Gym includes a guide, and supports RL both for control and vision-based navigation tasks. - -The project includes conversion code for `PyTorch -> TFLM` in the [resources/conversion](https://github.com/ntnu-arl/aerial_gym_simulator/tree/main/resources/conversion) folder. - -### Updating `mc_nn_control` with your own NN - -You can convert a `.tflite` network into a `.cc` file in the ubuntu terminal with this command: - -```sh -xxd -i converted_model.tflite > model_data.cc -``` - -You will then have to modify the `control_net.hpp` and `control_net.cpp` to include the data from `model_data.cc`: - -- Take the size of the network in the bottom of the `.cc` file and replace the size in `control_net.hpp`. -- Take the data in the model array in the `cc` file, and replace the ones in `control_net.cpp`. - -You are now ready to run your own network. - -## Code Explanation - -This section explains the code used to integrate the NN in `control_net.cpp`. - -### Operations and Resolver - -Firstly we need to create the resolver and load the needed operators to run inference on the NN. -This is done in the top of `mc_nn_control.cpp`. -The number in `MicroMutableOpResolver<3>` represents how many operations you need to run the inference. - -A full list of the operators can be found in the [micro_mutable_op_resolver.h](https://github.com/tensorflow/tflite-micro/blob/main/tensorflow/lite/micro/micro_mutable_op_resolver.h) file. -There are quite a few supported operators, but you will not find the most advanced ones. -In the control example the network is fully connected so we use `AddFullyConnected()`. -Then the activation function is ReLU, and we `AddAdd()` for the bias on each neuron. - -### Interpreter - -In the `InitializeNetwork()` we start by setting up the model that we loaded from the source and header file. -Next is to set up the interpreter, this code is taken from the TFLM documentation and is thoroughly explained there. -The end state is that the `_control_interpreter` is set up to later run inference with the `Invoke()` member function. -The `_input_tensor` is also defined, it is fetched from `_control_interpreter->input(0)`. - -### 输入 - -The `_input_tensor` is filled in the `PopulateInputTensor()` function. -`_input_tensor` works by accessing the `->data.f` member array and fill in the required inputs for your network. -The inputs used in the control network is covered in [Neural Networks](../advanced/neural_networks.md). - -### Outputs - -For the outputs the approach is fairly similar to the inputs. -After setting the correct inputs, calling the `Invoke()` function the outputs can be found by getting `_control_interpreter->output(0)`. -And from the output tensor you get the `->data.f` array. diff --git a/docs/zh/advanced_config/bootloader_update.md b/docs/zh/advanced_config/bootloader_update.md index 70cb5689af..3f8c674f90 100644 --- a/docs/zh/advanced_config/bootloader_update.md +++ b/docs/zh/advanced_config/bootloader_update.md @@ -169,7 +169,7 @@ After the bootloader has updated you can [Load PX4 Firmware](../config/firmware. ## FMUv2 引导加载器更新 If _QGroundControl_ installs the FMUv2 target (see console during installation), and you have a newer board, you may need to update the bootloader in order to access all the memory on your flight controller. -This example explains how you can use [QGC Bootloader Update](qgc-bootloader-update-sys-bl-update) to update the bootloader. +This example explains how you can use [QGC Bootloader Update](#qgc-bootloader-update-sys-bl-update) to update the bootloader. :::info Early FMUv2 [Pixhawk-series](../flight_controller/pixhawk_series.md#fmu_versions) flight controllers had a [hardware issue](../flight_controller/silicon_errata.md#fmuv2-pixhawk-silicon-errata) that restricted them to using 1MB of flash memory. diff --git a/docs/zh/advanced_config/bootloader_update_v6xrt.md b/docs/zh/advanced_config/bootloader_update_v6xrt.md index 3a1afb5cb7..a351215b86 100644 --- a/docs/zh/advanced_config/bootloader_update_v6xrt.md +++ b/docs/zh/advanced_config/bootloader_update_v6xrt.md @@ -1,6 +1,6 @@ # Bootloader Update Pixhawk V6X-RT via USB -This topic explains explains to flash [Pixhawk FMUv6X-RT](../flight_controller/pixhawk6x-rt.md) bootloader via USB _without needing a debug probe_. +This topic explains how to flash [Pixhawk FMUv6X-RT](../flight_controller/pixhawk6x-rt.md) bootloader via USB _without needing a debug probe_. ## 综述 @@ -33,7 +33,7 @@ arm-none-eabi-objcopy -O ihex build/px4_fmu-v6xrt_bootloader/px4_fmu-v6xrt_bootl ## Flashing the bootloader through USB -The Pixhawk V6X-RT comes with a build-in bootloader located on the ROM. +The Pixhawk V6X-RT comes with a built-in bootloader located on the ROM. To flash a new bootloader through USB you've got to download the [NXP MCUXpresso Secure Provisioning tool](https://www.nxp.com/design/design-center/software/development-software/mcuxpresso-software-and-tools-/mcuxpresso-secure-provisioning-tool:MCUXPRESSO-SECURE-PROVISIONING). The tool is available for Windows, Linux and macOS. @@ -80,7 +80,7 @@ The tool is available for Windows, Linux and macOS. ![Flash bootloader through Secure provisioning - Step 7](../../assets/advanced_config/bootloader_6xrt/bootloader_update_v6xrt_step7.png) -4. When the Target Memory configuration is succesful you can press the the **Erase All** button +4. When the Target Memory configuration is successful you can press the **Erase All** button ![Flash bootloader through Secure provisioning - Step 8](../../assets/advanced_config/bootloader_6xrt/bootloader_update_v6xrt_step8.png) diff --git a/docs/zh/advanced_config/ethernet_setup.md b/docs/zh/advanced_config/ethernet_setup.md index db82bdd8be..63f32a722e 100644 --- a/docs/zh/advanced_config/ethernet_setup.md +++ b/docs/zh/advanced_config/ethernet_setup.md @@ -27,6 +27,8 @@ PX4 supports Ethernet connectivity on [Pixhawk 5X-standard](https://github.com/p - [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) diff --git a/docs/zh/advanced_config/gnss_degraded_or_denied_flight.md b/docs/zh/advanced_config/gnss_degraded_or_denied_flight.md new file mode 100644 index 0000000000..79a5297d32 --- /dev/null +++ b/docs/zh/advanced_config/gnss_degraded_or_denied_flight.md @@ -0,0 +1,78 @@ +# GNSS-Degraded & Denied Flight ("Dead-Reckoning" Mode) + + + +:::warning +Experimental +This is a new feature with limited real-world testing. +It is intended for GNSS dropout scenarios (not pure GNSS-denied from takeoff), and requires that alternative velocity/position sensors are available. + +Please [share your related test logs](../getting_started/flight_reporting.md#sharing-the-log-files-for-review-by-px4-developers) to help us verify and harden it. +::: + +PX4 is default-configured for outdoor flight with a reliable GNSS signal, but it can also be set up in "dead-reckoning mode" to more gracefully handle environments where GNSS is intermittently degraded or denied during flight. + +This section describes the differences between automatic and dead-reckoning modes, the circumstances in which each should be used, and how dead-reckoning is configured. + +## 综述 + +PX4's EKF2 navigation has two modes for handling when GNSS data is determined to be unreliable: + +- **Automatic mode** (the default): Used for flying outdoors in environments where a GNSS signal is expected to be largely reliable. +- **Dead-reckoning mode**: Recommended when you want to fly missions or other position controlled modes when there is intermittent GNSS loss, such as when flying under a bridge, from outdoors into an indoor setting, or when there is GNSS jamming (it is not suitable for pure-indoor use, as a GNSS signal is required before arming). + +:::info +Dead-reckoning mode helps for both Fixed-Wing and Multicopter vehicles. +MC vehicles benefit more because they can hover when transitioning between sensor regimes. +FW needs continuous accurate velocity/position during the entire mission arc, making sensor transitions trickier. +::: + +## Mode Comparison + +The following sections provide more detail about each of the modes and when they should be used. + +### Automatic Mode + +In Automatic mode the EKF2 resets if GNSS is lost and no other sources of position are available. +This can result in a [position loss failsafe](../config/safety.md#position-loss-failsafe) and may trigger a shift into a mode that does not require global position, including stopping missions. + +This is desirable if the GNSS signal is likely to be recovered quickly and there are no mechanisms to estimate position when GNSS is unavailable. + +Use Automatic (default) when: + +- Flying in open sky with reliable GNSS throughout the mission. +- You want the EKF to reset to GNSS when it becomes available again. +- Operating in environments where GNSS is either good or completely unavailable (binary state). + +### Dead-Reckoning Mode + +In dead-reckoning mode, EKF2 stops fusing GNSS data when it becomes unreliable and prevents EKF2 resets — provided there are other sources of position or velocity data that can be fused. +This ensures that the vehicle can continue flying missions and other position controlled modes when GNSS is lost. + +When GNSS is recovered it will be fused with other measurements when tests indicate it can be trusted. +This may cause jerky movements in position controlled modes if the estimate has drifted. +This mode relies on having additional position or velocity sensors and must also have a reliable GNSS signal at boot. + +Use Dead-Reckoning when: + +- **Transitioning between GNSS and non-GNSS environments** (flying into buildings, under bridges, through tree cover). +- You have **redundant sensors** (optical flow, VIO, rangefinder, quality baro) that can maintain position estimation. +- Flying **missions that cross GPS-denied areas** where you want continuous operation rather than failsafe. +- **Urban environments** or other areas with intermittent GNSS quality. +- You want to **avoid EKF resets and jumps** when GNSS recovers (smoother transitions). + +## 配置 + +To use dead-reckoning mode, the vehicle must have an alternative source of position or velocity information, such as an [Optical Flow](../sensor/optical_flow.md) sensor or [VIO](../computer_vision/visual_inertial_odometry.md) setup. + +To enable the mode: + +1. Set [EKF2_GPS_MODE](../advanced_config/parameter_reference.md#EKF2_GPS_MODE) to `1`. +2. Ensure that GNSS arming checks are enabled (a reliable GNSS signal is required before arming): + - [COM_ARM_WO_GPS](../advanced_config/parameter_reference.md#COM_ARM_WO_GPS) - set to `0` + - [EKF2_GPS_CHECK](../advanced_config/parameter_reference.md#EKF2_GPS_CHECK) - set to default. + +## 另见 + +- [GNSS Fault Detection](../advanced_config/tuning_the_ecl_ekf.md#gnss-fault-detection) in _Using PX4's Navigation Filter (EKF2)_ +- [Fuse, Reset, or Reject? EKF2中处理多种数据源](https://www.youtube.com/watch?v=CMGQJNPiTJg) - _PX4开发者峰会2025_,Marco Hauswirth,Auterion AG diff --git a/docs/zh/advanced_config/index.md b/docs/zh/advanced_config/index.md index f498841274..e65286c485 100644 --- a/docs/zh/advanced_config/index.md +++ b/docs/zh/advanced_config/index.md @@ -10,6 +10,7 @@ ## 功能配置 - [使用 PX4 的导航滤波器 (EKF2)](../advanced_config/tuning_the_ecl_ekf.md) +- [GNSS-Denied and Degraded Flight](../advanced_config/gnss_degraded_or_denied_flight.md) - [飞行终止配置](../advanced_config/flight_termination.md) - [着陆探测器配置](../advanced_config/land_detector.md) - [解锁前/解锁/加锁 配置](../advanced_config/prearm_arm_disarm.md) diff --git a/docs/zh/advanced_config/land_detector.md b/docs/zh/advanced_config/land_detector.md index c83f62124b..1191cc3940 100644 --- a/docs/zh/advanced_config/land_detector.md +++ b/docs/zh/advanced_config/land_detector.md @@ -40,7 +40,7 @@ Information about how the parameters affect landing can be found below in [Land 如果由于缺少传感器而无法达到条件,则默认情况下认为该条件为真。 For instance, in [Acro mode](../flight_modes_mc/acro.md) and no sensor is active except for the gyro sensor, then the detection solely relies on thrust output and time. -In order to proceed to the next state, each condition has to be true for a third of the configured total land detector trigger time [LNDMC_TRIG_TIME](../advanced_config/parameter_reference.md#LNDMC_TRIG_TIME). +In order to proceed to the next state, each condition has to be true for 300ms. If the vehicle is equipped with a distance sensor, but the distance to ground is currently not measurable (usually because it is too large), the trigger time is increased by a factor of 3. 如果一个条件失败,则陆地探测器立即退出当前状态。 diff --git a/docs/zh/advanced_config/prearm_arm_disarm.md b/docs/zh/advanced_config/prearm_arm_disarm.md index 9be6a3347b..b4c9f9ad3c 100644 --- a/docs/zh/advanced_config/prearm_arm_disarm.md +++ b/docs/zh/advanced_config/prearm_arm_disarm.md @@ -94,6 +94,28 @@ The feature is configured using the following timeouts. | [COM_DISARM_LAND](../advanced_config/parameter_reference.md#COM_DISARM_LAND) | 降落后自动锁定超时时间. Default: 2s (-1 to disable). | | [COM_DISARM_PRFLT](../advanced_config/parameter_reference.md#COM_DISARM_PRFLT) | Time-out for auto disarm if too slow to takeoff. Default: 10s (<=0 to disable). | +## Auto-Arming on Boot + +The vehicle can be configured to arm automatically on boot once all preflight checks pass, +using the `COM_ARM_ON_BOOT` parameter. For safety, PX4 enforces a minimum 5-second delay after boot before attempting to arm. + +Once armed this way, the vehicle will not re-arm automatically after a manual disarm. + +:::info +The parameter value is read once at boot. +Changing it while the system is running has no effect until the next reboot. +::: + +:::warning +Use with caution. +A vehicle that arms automatically can spin up motors and actuators without any operator gesture. +Ensure the vehicle is in a safe state before powering on. +::: + +| 参数 | 描述 | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | +| [COM_ARM_ON_BOOT](../advanced_config/parameter_reference.md#COM_ARM_ON_BOOT) | Arm automatically once preflight checks pass after boot. Default: `0` (Disabled). | + ## Pre-Arm Checks To reduce accidents, vehicles are only allowed to arm certain conditions are met (some of which are configurable). diff --git a/docs/zh/advanced_config/tuning_the_ecl_ekf.md b/docs/zh/advanced_config/tuning_the_ecl_ekf.md index bd1dd5481d..d4274ea2a1 100644 --- a/docs/zh/advanced_config/tuning_the_ecl_ekf.md +++ b/docs/zh/advanced_config/tuning_the_ecl_ekf.md @@ -328,7 +328,7 @@ GSF 应用于各个 3 状态 EKF 输出的权重位于 `weight` 字段中。 最小值在 [EKF2_REQ_\*](../advanced_config/parameter_reference.md#EKF2_REQ_EPH) 参数中定义,并且可以使用 [EKF2_GPS_CHECK](../advanced_config/parameter_reference.md#EKF2_GPS_CHECK) 参数启用/禁用每个检查。 -下表显示了直接报告或从 GNSS 数据计算出的不同指标,以及 ECL 使用数据所需的最小值。 +下表列出了直接从 GNSS 数据中报告或计算的不同指标,以及 ECL 使用这些数据所需满足的最低要求值。 此外,_平均值 (Average Value)_ 列显示了可能从标准 GNSS 模块(例如 u-blox M8 系列)合理获得的典型值 - 即被认为良好/可接受的值。 | 指标 (Metric) | 最低要求 | 平均值 (Average Value) | 单位 (Units) | 备注 | @@ -339,7 +339,7 @@ GSF 应用于各个 3 状态 EKF 输出的权重位于 `weight` 字段中。 | sacc | < 0.5 ([EKF2_REQ_EPH](../advanced_config/parameter_reference.md#EKF2_REQ_SACC)) | 0.2 | 米/秒 | 水平速度误差的标准偏差 | | 定位类型 (fix type) | ≥ 3 | 4 | - | 0-1: 无定位, 2: 2D 定位, 3: 3D 定位, 4: RTCM 码差分, 5: 实时动态 (RTK) 浮点解, 6: 实时动态 (RTK) 固定解, 8: 外推值 | | 位置精度衰減因子(PDOP) | < 2.5 ([EKF2_REQ_EPH](../advanced_config/parameter_reference.md#EKF2_REQ_PDOP)) | 1.0 | - | 位置精度衰减 | -| hpos 漂移率 | < 0.1 ([EKF2_REQ_EPH](../advanced_config/parameter_reference.md#EKF2_REQ_HDRIFT)) | 0.01 | 米/秒 | 静止时基于 GNSS 位置计算的漂移率 | +| hpos 漂移率 | < 0.1 ([EKF2_REQ_EPH](../advanced_config/parameter_reference.md#EKF2_REQ_HDRIFT)) | 0.01 | 米/秒 | 静止时基于 GNSS 位置计算的漂移率。 | | vpos 漂移率 | < 0.2 ([EKF2_REQ_EPH](../advanced_config/parameter_reference.md#EKF2_REQ_VDRIFT)) | 0.02 | 米/秒 | 静止时基于 GNSS 高度计算的漂移率。 | | hspd | < 0.1 ([EKF2_REQ_EPH](../advanced_config/parameter_reference.md#EKF2_REQ_HDRIFT)) | 0.01 | 米/秒 | 报告的 GNSS 水平速度的滤波幅值。 | | 报告的 GNSS 垂直速度的滤波幅值。 | < 0.2 ([EKF2_REQ_EPH](../advanced_config/parameter_reference.md#EKF2_REQ_VDRIFT)) | 0.02 | 米/秒 | 所报告的全球导航卫星系统垂直速度的滤波量级。 | @@ -362,6 +362,10 @@ PX4 的 GNSS 故障检测使用基于测量验证的选择性融合控制来防 如果没有其他位置或速度源可用,EKF2 可能会重置。 如果 GNSS 高度或水平位置数据漂移,系统将同时禁用这两个测量值的融合(即使其中一个仍能通过验证),并避免执行重置。 +:::tip +See also [Fault Detection](https://youtu.be/CMGQJNPiTJg?si=sFtdf4AQbcOH8-u8) in "Fuse, Reset, or Reject? 处理EKF2中的各种数据来源"_PX4 开发者峰会2025_, Marco Hauswirth, Auterion AG +::: + ##### 检测逻辑 水平位置: @@ -403,6 +407,16 @@ PX4 的 GNSS 故障检测使用基于测量验证的选择性融合控制来防 - **替代来源**: 航位推算模式通过在允许重置之前要求没有替代导航源,提供了增强的保护。 - **启动漏洞**: 初始错误 GNSS 数据无法自动检测;需要操作员干预和手动位置校正。 +#### Ground Position Lock + +When a vehicle equipped with dead-reckoning sensors (e.g. airspeed for fixed-wing, or optical flow) is sitting on the ground before takeoff, those sensors provide little to no aiding — airspeed and optical flow measurements are unreliable at rest. In this case, the EKF relies on _constant position fusion_ (fusing a synthetic position measurement at the last known position) to prevent the estimate from drifting. However, this is only active when the vehicle is detected as stationary, so handling the vehicle or starting the engine can interrupt it. + +To counter this, [EKF2_POS_LOCK](../advanced_config/parameter_reference.md#EKF2_POS_LOCK) can be enabled to force constant position fusion to run while landed and the global horizontal position has already been initialized. + +:::note +`EKF2_POS_LOCK` has no effect in flight. +::: + ### 测距仪 [测距仪](../sensor/rangefinders.md) 对地距离由单状态滤波器使用,用于估计地形相对于高度基准的垂直位置。 @@ -456,7 +470,7 @@ PX4 允许您持续融合测距仪作为高度源(在任何飞行模式/载具 如果检查失败,测距仪数据将被拒绝,高度将根据加速度计和其他选定的高度源(GNSS、气压计、视觉,如果启用且可用)进行估计。 如果距离传感器是活动的高度数据源,在数据不一致持续 5 秒后,估计器会重置高度状态以匹配当前的距离传感器数据。 如果一个或多个其他高度源处于活动状态,则测距仪被声明为故障,估计器继续使用其他传感器估计其高度。 - 测量值也可能再次变得一致,例如,如果载具下降,或者如果估计的高度漂移以匹配测量的测距仪高度。 + 测量结果也可能再次保持一致,例如当载具下降时,或者当估计高度漂移至与测距仪测得的高度相匹配时。 ::: @@ -571,8 +585,8 @@ EKF2 默认启用(有关更多信息,请参阅 [切换状态估计器](../ad - ecl EKF 检测并报告传感器数据中统计上的显著不一致,协助诊断传感器错误。 - 对于固定翼操作,ecl EKF 在有或没有空速传感器的情况下均可估计风速,并且能够在飞行中 GPS 丢失时结合空速测量和侧滑假设来使用估计的风速,以延长可用的航位推算时间。 - ecl EKF 估计三轴加速度计零偏,这提高了尾座式飞机和其他在飞行阶段之间经历大姿态变化的载具的精度。 -- 联邦结构(组合姿态和位置/速度估计)意味着姿态估计受益于所有传感器测量。 - 如果调参正确,这应该提供改善态度估计的潜力。 +- 联合架构(结合姿态与位置/速度估计)意味着姿态估计能够利用所有传感器的测量数据。 + 若调参得当,这应能提升姿态估算的精度。 ## 如何检查 EKF 性能? @@ -594,7 +608,7 @@ EKF 输出、状态和状态数据发布到许多 uORB 主题,这些主题在 - 姿态输出数据位于 [VehicleAttitude](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/VehicleAttitude.msg) 消息中。 - 局部位置输出数据位于 [VehicleLocalPosition](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/VehicleLocalPosition.msg) 消息中。 - 全局 (WGS-84) 输出数据位于 [VehicleGlobalPosition](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/VehicleGlobalPosition.msg) 消息中。 -- 风速输出数据位于 [Wind.msg](https://github.com/PX4/PX4-Autopilot/blob/main/msg/Wind.msg) 消息中。 +- 风速输出数据位于 [AirspeedWind.msg](https://github.com/PX4/PX4-Autopilot/blob/main/msg/AirspeedWind.msg)消息中。 ### 状态 @@ -610,7 +624,7 @@ states\[24\] 的索引映射如下: - \[19 ... 21\] 机体磁场 XYZ \(gauss\) - \[22 ... 23\] 风速 NE \(m/s\) -### 状态方差 +### 状态变量 参考 [EstimatorStates](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStates.msg) 中的 covariances\[24\]。 covariances\[24\] 的索引映射如下: @@ -630,7 +644,7 @@ covariances\[24\] 的索引映射如下: 这些消息字段名称/类型相同(但单位不同)。 :::info -这些消息具有相同字段,是因为它们来自同一字段定义。 +这些消息具有相同的字段,因为它们是从相同的字段定义生成的。 `# TOPICS` 行(见 [文件末尾](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorInnovations.msg))列出了要生成的消息名: ``` @@ -730,12 +744,12 @@ EKF 在开始 GPS 辅助前会执行一系列 GPS 质量检查。 这些检查由 [EKF2_GPS_CHECK](../advanced_config/parameter_reference.md#EKF2_GPS_CHECK) 和 `EKF2_REQ_*` 参数控制。 这些检查的通过/失败状态记录在 [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg) 的 `gps_check_fail_flags` 字段中。 当所有所需的 GPS 检查通过后,此整数将为零。 -如果 EKF 未开始 GPS 对齐,请将该整数与 [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg) 中 `gps_check_fail_flags` 的位掩码定义进行对比。 +如果 EKF 未启动 GPS 对齐,请将该整数与 [EstimatorStatus](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorStatus.msg) 中 `gps_check_fail_flags` 的位掩码定义进行对比。 ### EKF 数值误差 EKF 对其所有计算使用单精度浮点运算,并使用一阶近似来推导协方差预测和更新方程,以降低处理要求。 -这意味着,当重新调整 EKF 时,可能遇到协方差矩阵运算条件恶劣,足以导致状态估计中的发散或显著错误的情况。 +这意味着,当重新调整 EKF 时,可能遇到协方差矩阵运算条件恶化到足以导致发散或状态估计出现重大误差的情况。 为防止这种情况,每个协方差和状态更新步骤都包含以下错误检测和更正步骤: @@ -763,7 +777,7 @@ EKF 对其所有计算使用单精度浮点运算,并使用一阶近似来推 如果谐振频率与电动机或螺旋桨叶片通过频率一致,则隔离安装件会使振动更严重。 -可通过以下参数调整提高 EKF 对振动引起的高度发散的鲁棒性: +通过调整以下参数,可增强 EKF 对振动诱发高度发散的抗扰性: - 将主高度传感器的创新门限加倍。 若使用气压高度,可调 [EKF2_BARO_GATE](../advanced_config/parameter_reference.md#EKF2_BARO_GATE)。 @@ -896,3 +910,4 @@ GPS 数据丢失会表现为速度与位置创新测试比值“贴平(flat-lini ## 更多信息 - [PX4 State Estimation Overview](https://youtu.be/HkYRJJoyBwQ),_PX4 Developer Summit 2019_,Dr. Paul Riseborough:估计器概览、2018/19 的主要变化,以及 2019/20 期间的预期改进。 +- [Fuse, Reset, or Reject? EKF2中处理多种数据源](https://www.youtube.com/watch?v=CMGQJNPiTJg) - _PX4开发者峰会2025_,Marco Hauswirth,Auterion AG diff --git a/docs/zh/advanced_features/index.md b/docs/zh/advanced_features/index.md index 997d8340b8..758f825ee8 100644 --- a/docs/zh/advanced_features/index.md +++ b/docs/zh/advanced_features/index.md @@ -2,11 +2,11 @@ 本节包含了部分关于 PX4 自驾仪的高级功能: -- [Air Traffic Avoidance: ADS-B/FLARM/UTM](../peripherals/adsb_flarm.md) -- [Computer Vision](../computer_vision/index.md) - - [Collision Prevention](../computer_vision/collision_prevention.md) - - [Motion Capture (MoCap)](../computer_vision/motion_capture.md) - - [Visual Inertial Odometry (VIO)](../computer_vision/visual_inertial_odometry.md) -- [Iridium/RockBlock Satellite Communication System](../advanced_features/satcom_roadblock.md) -- [Precision Landing](../advanced_features/precland.md) +- [空中交通防撞: ADS-B/FLARM/UTM](../peripherals/adsb_flarm.md) +- [机器视觉](../computer_vision/index.md) + - [碰撞预防](../computer_vision/collision_prevention.md) + - [运动捕捉(MoCap)](../computer_vision/motion_capture.md) + - [视觉惯性里程计 (VIO)] (../computer_vision/visual_inertial_odometry.md) +- [铱星 / RockBlock 卫星通信系统](../advanced_features/satcom_roadblock.md) +- [精准着陆](../advanced_features/precland.md) - [RTK GNSS (GPS)](../gps_compass/rtk_gps.md) diff --git a/docs/zh/advanced_features/satcom_roadblock.md b/docs/zh/advanced_features/satcom_roadblock.md index 47afa7adcf..c0b8e4a9d0 100644 --- a/docs/zh/advanced_features/satcom_roadblock.md +++ b/docs/zh/advanced_features/satcom_roadblock.md @@ -9,7 +9,7 @@ 卫星通信链接需要以下组成部件: -- A [RockBlock 9603 Iridium Satellite Modem](https://www.iridium.com/products/ground-control-rockblock-9603/) module connected to a Pixhawk flashed with the PX4 Autopilot. +- A [RockBlock 9603 Iridium Satellite Modem](https://www.iridium.com/products/rockblock-9603) module connected to a Pixhawk flashed with the PX4 Autopilot. - 运行 Ubuntu 系统的消息中继服务器。 - A ground station computer running _QGroundControl_ on Ubuntu Linux @@ -58,13 +58,13 @@ The default baud rate of the module is 19200. However, the PX4 _iridiumsbd_ driv 2. Change the baud rate: - ``` + ```sh AT+IPR=9 ``` 3. Reconnect to the model now with a 115200/8-N-1 setting and save the configuration using: - ``` + ```sh AT&W0 ``` @@ -78,7 +78,7 @@ There is no need to set the baud rate for the port, as this is configured by the :::info If the configuration parameter is not available in _QGroundControl_ then you may need to [add the driver to the firmware](../peripherals/serial_configuration.md#parameter_not_in_firmware): -``` +```txt drivers/telemetry/iridiumsbd ``` diff --git a/docs/zh/airframes/airframe_reference.md b/docs/zh/airframes/airframe_reference.md index 940ae6a4be..7fe06168e0 100644 --- a/docs/zh/airframes/airframe_reference.md +++ b/docs/zh/airframes/airframe_reference.md @@ -402,7 +402,7 @@ div.frame_variant td, div.frame_variant th { Maintainer: Lorenz Meier <lorenz@px4.io>

SYS_AUTOSTART = 4050

- HolyBro QAV250 + HolyBro QAV250 Maintainer: Beat Kueng <beat-kueng@gmx.net>

SYS_AUTOSTART = 4052

@@ -457,6 +457,10 @@ div.frame_variant td, div.frame_variant th { SIH Quadcopter X Maintainer: Romain Chiappinelli <romain.chiap@gmail.com>

SYS_AUTOSTART = 1100

+ + SIH Hexacopter X + Maintainer: Romain Chiappinelli <romain.chiap@gmail.com>

SYS_AUTOSTART = 1105

+ @@ -604,7 +608,7 @@ div.frame_variant td, div.frame_variant th { Maintainer: John Doe <john@example.com>

SYS_AUTOSTART = 50000

- Aion Robotics R1 UGV + Aion Robotics R1 UGV Maintainer: John Doe <john@example.com>

SYS_AUTOSTART = 50001

diff --git a/docs/zh/assembly/_assembly.md b/docs/zh/assembly/_assembly.md index fed4f8f7ed..fd0092555d 100644 --- a/docs/zh/assembly/_assembly.md +++ b/docs/zh/assembly/_assembly.md @@ -338,7 +338,7 @@ Any outputs on either PWM output bus can be connected to any actuators, motor, o Note that the PWM outputs are often labeled `AUX` or `MAIN`. Use the `AUX` bus if both are present, and `MAIN` otherwise. - [DShot ESC](../peripherals/dshot.md) (recommended) can only be used on the FMU PWM outputs. -- Motor outputs should be grouped together as much as possible rather than spread randomly across both the FMU and IO busses. +- Motor outputs should be grouped together as much as possible rather than spread randomly across both the FMU and IO buses. This is because if you assign some function to an output, such as DShot ESC, you can't then assign adjacent unused pins for anything other than a DShot ESC. ### Servos @@ -364,7 +364,7 @@ If you don't use servos that all accept the same voltage, you'll need to separat Other peripherals, such as high-power radios, cameras, and so on have their own power requirements. These will usually be supplied off a separate BEC. -The wiring and configuration of optional/less common components is covered within the [Hardware Hardware Selection & Setup](../hardware/drone_parts.md) topics for individual peripherals. +The wiring and configuration of optional/less common components is covered within the [Hardware Selection & Setup](../hardware/drone_parts.md) topics for individual peripherals. ## Build Tutorials @@ -410,11 +410,11 @@ 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) - [Holybro Pixhawk 4 Wiring Quickstart](../assembly/quick_start_pixhawk4.md) -- [Holybro Pixhawk 4 Mini (Discontinued) Wiring Quickstart](../assembly/quick_start_pixhawk4_mini.md) - [Holybro Durandal Wiring Quickstart](../assembly/quick_start_durandal.md) - [Holybro Pix32 v5 Wiring Quickstart](../assembly/quick_start_holybro_pix32_v5.md) - [Cube Wiring Quickstart](../assembly/quick_start_cube.md) (All cube variants) diff --git a/docs/zh/assembly/mount_gps_compass.md b/docs/zh/assembly/mount_gps_compass.md index 778158cef9..e75a349a80 100644 --- a/docs/zh/assembly/mount_gps_compass.md +++ b/docs/zh/assembly/mount_gps_compass.md @@ -20,7 +20,7 @@ For more information see [Setting the Compass Orientation](../config/flight_cont ## 安装位置 -In order to compensate for the relative motion between the receiver and the CoG, you should [configure](../advanced_config/parameters.md) the following parameters to set the offsets: [EKF2_GPS_POS_X](../advanced_config/parameter_reference.md#EKF2_GPS_POS_X), [EKF2_GPS_POS_Y](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Y) and [EKF2_GPS_POS_Z](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Z). +In order to compensate for the relative motion between the receiver and the CoG, you should [configure](../advanced_config/parameters.md) the following parameters to set the offsets: [SENS_GPS0_OFFX](../advanced_config/parameter_reference.md#SENS_GPS0_OFFX), [SENS_GPS0_OFFY](../advanced_config/parameter_reference.md#SENS_GPS0_OFFY) and [SENS_GPS0_OFFZ](../advanced_config/parameter_reference.md#SENS_GPS0_OFFZ). This is important because the body frame estimated by the EKF will converge on the location of the GNSS module and assume it to be at the CoG. If the GNSS module is significantly offset from the CoG, then rotation around the COG will be interpreted as an altitude change, which in some flight modes (such as position mode) will result in unnecessary corrections. diff --git a/docs/zh/assembly/quick_start_cuav_v5_nano.md b/docs/zh/assembly/quick_start_cuav_v5_nano.md index a1b1f7b0ce..cda33020ff 100644 --- a/docs/zh/assembly/quick_start_cuav_v5_nano.md +++ b/docs/zh/assembly/quick_start_cuav_v5_nano.md @@ -33,7 +33,7 @@ This quick start guide shows how to power the [CUAV V5 nano](../flight_controlle | DSM/SBUS/RSSI | 包含DSM、SBUS、RSSI信号输入接口;DSM接口可以连接DSM卫星接收机,SBUS接口可以连接SBUS总线的遥控器接收机,RSSI连接RSSI信号强度回传模块。 | :::info -For more interface information, please read [V5 nano Manual](http://manual.cuav.net/V5-nano.pdf). +For more interface information, please read [V5 nano Manual](https://manual.cuav.net/V5-nano.pdf). ::: ![quickstart](../../assets/flight_controller/cuav_v5_nano/connection/v5_nano_quickstart_03.png) @@ -128,6 +128,6 @@ Motors/servos are connected to the MAIN ports in the order specified for your ve - [Airframe buildlog using CUAV v5 nano on a DJI FlameWheel450](../frames_multicopter/dji_f450_cuav_5nano.md) - [CUAV V5 nano](../flight_controller/cuav_v5_nano.md) -- [V5 nano manual](http://manual.cuav.net/V5-nano.pdf) (CUAV) +- [V5 nano manual](https://manual.cuav.net/V5-nano.pdf) (CUAV) - [FMUv5 reference design pinout](https://docs.google.com/spreadsheets/d/1-n0__BYDedQrc_2NHqBenG1DNepAgnHpSGglke-QQwY/edit#gid=912976165) (CUAV) - [CUAV Github](https://github.com/cuav) (CUAV) diff --git a/docs/zh/assembly/quick_start_cuav_v5_plus.md b/docs/zh/assembly/quick_start_cuav_v5_plus.md index cbc78581de..2875d27731 100644 --- a/docs/zh/assembly/quick_start_cuav_v5_plus.md +++ b/docs/zh/assembly/quick_start_cuav_v5_plus.md @@ -33,7 +33,7 @@ This quick start guide shows how to power the [CUAV V5+](../flight_controller/cu | DSM/SBUS/RSSI | 包含DSM、SBUS、RSSI信号输入接口;DSM接口可以连接DSM卫星接收机,SBUS接口可以连接SBUS总线的遥控器接收机,RSSI连接RSSI信号强度回传模块。 | :::info -For more interface information, please read [V5+ Manual](http://manual.cuav.net/V5-Plus.pdf). +For more interface information, please read [V5+ Manual](https://manual.cuav.net/V5-Plus.pdf). ::: ![V5+ AutoPilot](../../assets/flight_controller/cuav_v5_plus/connection/v5+_quickstart_02.png) @@ -122,12 +122,12 @@ Motors/servos are connected to the MAIN and AUX ports in the order specified for ## 针脚定义 -Download **V5+** pinouts from [here](http://manual.cuav.net/V5-Plus.pdf). +See [CUAV V5+ Manual](https://manual.cuav.net/V5-Plus.pdf). ## 更多信息 - [Airframe build-log using CUAV v5+ on a DJI FlameWheel450](../frames_multicopter/dji_f450_cuav_5plus.md) -- [CUAV V5+ Manual](http://manual.cuav.net/V5-Plus.pdf) (CUAV) +- [CUAV V5+ Manual](https://manual.cuav.net/V5-Plus.pdf) (CUAV) - [CUAV V5+ docs](https://doc.cuav.net/controller/v5-autopilot/en/v5+.html) (CUAV) - [FMUv5 reference design pinout](https://docs.google.com/spreadsheets/d/1-n0__BYDedQrc_2NHqBenG1DNepAgnHpSGglke-QQwY/edit#gid=912976165) (CUAV) - [CUAV Github](https://github.com/cuav) (CUAV) diff --git a/docs/zh/assembly/quick_start_cuav_x25_evo.md b/docs/zh/assembly/quick_start_cuav_x25_evo.md new file mode 100644 index 0000000000..93cdc7e55f --- /dev/null +++ b/docs/zh/assembly/quick_start_cuav_x25_evo.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](../../assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_01.jpg) + +| Interface | **Function** | +| :----------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| POWER C1/C2 | Connect the PMU2 Lite to this port; this port is used for connecting the DroneCAN power module | +| M1 ~ M16 | PWM signal output ports, usable for controlling motors or servos; support 3.3V/5V PWM configuration | +| RC IN | Connect remote controller receivers with one-way protocols (e.g., SBUS/DSM/PPM). Note: ELRS/CRSF receivers should be connected to any serial port, not RC IN | +| RSSI | For connecting signal strength feedback modules | +| GPS&SAFETY | Connect Neo-series GPS or C-RTK-series RTK; this port includes interfaces for GPS, safety switch, and buzzer | +| GPS2 | Usable for connecting additional GPS/RTK modules | +| DEBUG (DSU) | For FMU chip debugging and reading debug device information; with ArduPilot firmware, it can be configured for other serial port functions | +| ADC3V3 | For analog level signal detection; the maximum detectable level signal is 3.3V | +| ADC6V6 | For analog level signal detection; the maximum detectable level signal is 6.6V (PX4 is not supported.) | +| TF CARD | Insert an SD card here to enable log storage functionality | +| ETH | Ethernet port, usable for connecting Ethernet devices such as companion computers | +| I2C1/2/3 | Connect external I2C devices (e.g., external compasses) for communication between the controller and I2C devices | +| TELEM1/TELEM2 | Connect telemetry modules (for data transmission) to enable MAVLINK data interaction | +| CAN1/2 | For communication between the controller and DroneCAN devices (e.g., connecting NEO4 SE GPS) | +| TYPE C | USB port of the controller, usable for connecting to the ground station, flashing firmware, and other operations | +| SPI6 | SPI port for external expansion; generally not used | + +## Vehicle Front + +:::info +If the controller cannot be mounted in the recommended/default orientation (e.g. due to space constraints) you will need to configure the autopilot software with the orientation that you actually used: [Flight Controller Orientation](../config/flight_controller_orientation.md). +::: + +![front](../../assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_02.jpg) + +## GPS + 指南针 + 蜂鸣器 + 安全开关 + LED + +We recommend using a CAN GPS/RTK (such as [Neo 4SE](https://store.cuav.net/shop/cuav-neo-4-se-gps-module/)); simply connect it to the **CAN 1** or **CAN 2** port. + +You can also use a standard GPS/RTK module(such as [NEO3 GPS](https://store.cuav.net/shop/neo-3/) (10-pin connector)) by connecting it to the **GPS&SAFETY** port. +Most commonly used GPS modules today integrate GPS, compass, safety switch, buzzer, and LED status light. + +If you need to use assisted GPS, connect to the **GPS2** port. + +The GPS/compass should be [mounted on the frame](../assembly/mount_gps_compass.md) as far away from other electronics as possible (separating the compass from other electronics will reduce interference), with the direction markings towards the front of the vehicle (the arrow on the NEO GPS should match the arrow on the flight controller). + +![GPS](../../assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_03.jpg) + +:::info +The GPS module's integrated safety switch is enabled _by default_ (when enabled, PX4 will not let you arm the vehicle). +To disable the safety, press and hold the safety switch for 1 second. +You can press the safety switch again to enable safety and disarm the vehicle (this can be useful if, for whatever reason, you are unable to disarm the vehicle from your remote control or ground station). +::: + +## 遥控器 + +A remote control (RC) radio system is required if you want to _manually_ control your vehicle (PX4 does not require a radio system for autonomous flight modes). + +You will need to [select a compatible transmitter/receiver](../getting_started/rc_transmitter_receiver.md) and then _bind_ them so that they communicate (read the instructions that come with your specific transmitter/receiver). + +Connection methods vary by remote controller and receiver type: + +### Android Remote Controllers + +Take the H16 as an example: + +![H16 control](../../assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_04.jpg) + +Connect **TELEM1/TELEM2** to the UART0 port of the H16 remote controller, and link the H16’s SBUS pin to the **RC IN** port. + +### SBUS/DSM/PPM Protocol Receivers + +![SBUS/DSM/PPM control](../../assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_05.jpg) + +Use wires to connect the receiver to the **RC IN** port at the rear of the controller. + +### ELRS/CRSF Receivers + +![ELRS/CRSF control](../../assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_06.jpg) + +Connect the [ELRS/CRSF](../telemetry/crsf_telemetry.md) receiver to any UART serial port of the X25 EVO (e.g., **TELEM2**). + +## 电源 + +The X25 EVO comes standard with the PMU2 Lite power module, which supports 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). + +![Power](../../assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_07.png) + +## Telemetry (Radio) System + +[Telemetry system](../telemetry/index.md) allows you to communicate with the unmanned system via ground station software, enabling you to monitor and control the 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/). + +![Telemetry system](../../assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_04.jpg) + +## SD Card + +SD cards are highly recommended as they are required for [recording and analyzing flight details](../getting_started/flight_reporting.md), running tasks and using UAVCAN bus hardware. +An SD card is already installed on X25 EVO when it leaves the factory. + +:::tip +For more information see [Basic Concepts > SD Cards (Removable Memory)](../getting_started/px4_basic_concepts.md#sd-cards-removable-memory). +::: + +## Motors/Servo + +Motors/servos are connected to the **M1~M16** ports in the order specified for your vehicle in the [Airframe Reference](../airframes/airframe_reference.md). + +![Motors](../../assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_08.jpg) + +## Servo Power Supply + +The X25 EVO does not supply power to servos. If you need to power servos: + +1. Connect a BEC to the positive and negative terminals of any column among **M1 ~ M16** (the positive and negative terminals of **M1 ~ M16** are interconnected). +2. Then connect the servos to the same column. + +![servo power supply](../../assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_09.jpg) + +:::info +The power rail voltage must be appropriate for the servo being used! +::: + +## 其它外设 + +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) diff --git a/docs/zh/assembly/quick_start_cube.md b/docs/zh/assembly/quick_start_cube.md index 48e78ecec3..f1f360e84b 100644 --- a/docs/zh/assembly/quick_start_cube.md +++ b/docs/zh/assembly/quick_start_cube.md @@ -18,7 +18,7 @@ Further/updated information may be available in the [Cube User Manual](https://d ## 配件 -Cube comes with most (or all) of the accessories you will need when [purchased](../flight_controller/pixhawk-2.md#stores). +Cube comes with most (or all) of the accessories you will need when [purchased](../flight_controller/pixhawk-2.md#store). ![Cube Accessories](../../assets/flight_controller/cube/cube_accessories.jpg) diff --git a/docs/zh/assembly/quick_start_pixhawk4_mini.md b/docs/zh/assembly/quick_start_pixhawk4_mini.md deleted file mode 100644 index 70ae4691f8..0000000000 --- a/docs/zh/assembly/quick_start_pixhawk4_mini.md +++ /dev/null @@ -1,161 +0,0 @@ -# _Pixhawk 4 Mini_ Wiring Quick Start - -:::warning -PX4 does not manufacture this (or any) autopilot. -Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues. -::: - -This quick start guide shows how to power the [_Pixhawk® 4 Mini_](../flight_controller/pixhawk4_mini.md) flight controller and connect its most important peripherals. - -![Pixhawk4 mini](../../assets/flight_controller/pixhawk4mini/pixhawk4mini_iso_1.png) - -## 接线图概述 - -The image below shows where to connect the most important sensors and peripherals (except for motors and servos). - -![Pixhawk 4 Mini Wiring Overview](../../assets/flight_controller/pixhawk4mini/pixhawk4mini_wiring_overview.png) - -:::tip -More information about available ports can be found here: [_Pixhawk 4 Mini_ > Interfaces](../flight_controller/pixhawk4_mini.md#interfaces). -::: - -## 飞控的安装和方向 - -_Pixhawk 4 Mini_ should be mounted on your frame using vibration-damping foam pads (included in the kit). -It should be positioned as close to your vehicle’s center of gravity as possible, oriented top-side up with the arrow pointing towards the front of the vehicle. - -![Pixhawk 4 Mini Orientation](../../assets/flight_controller/pixhawk4mini/pixhawk4mini_orientation.png) - -:::info -If the controller cannot be mounted in the recommended/default orientation (e.g. due to space constraints) you will need to configure the autopilot software with the orientation that you actually used: [Flight Controller Orientation](../config/flight_controller_orientation.md). -::: - -## GPS + 指南针 + 蜂鸣器 + 安全开关 + LED - -Attach the provided GPS with integrated compass, safety switch, buzzer, and LED to the **GPS MODULE** port. The GPS/Compass should be [mounted on the frame](../assembly/mount_gps_compass.md) as far away from other electronics as possible, with the direction marker towards the front of the vehicle (separating the compass from other electronics will reduce interference). - -![Connect compass/GPS to Pixhawk 4](../../assets/flight_controller/pixhawk4mini/pixhawk4mini_gps.png) - -:::info -The GPS module's integrated safety switch is enabled _by default_ (when enabled, PX4 will not let you arm the vehicle). -To disable the safety press and hold the safety switch for 1 second. -You can press the safety switch again to enable safety and disarm the vehicle (this can be useful if, for whatever reason, you are unable to disarm the vehicle from your remote control or ground station). -::: - -## 电源 - -The Power Management Board (PMB) serves the purpose of a power module as well as a power distribution board. -In addition to providing regulated power to _Pixhawk 4 Mini_ and the ESCs, it sends information to the autopilot about the battery’s voltage and current draw. - -Connect the output of the PMB that comes with the kit to the **POWER** port of the _Pixhawk 4 Mini_ using a 6-wire cable. -The connections of the PMB, including power supply and signal connections to the ESCs and servos, are explained in the image below. - -![Pixhawk 4 - Power Management Board](../../assets/flight_controller/pixhawk4mini/pixhawk4mini_power_management.png) - -:::info -The image above only shows the connection of a single ESC and a single servo. -Connect the remaining ESCs and servos similarly. -::: - -| Pin(s) 或连接器 | 功能 | -| ------------------------------ | -------------------------------------------------------------------------- | -| B+ | 连接到 ESC电调B+以为 ESC电调供电 | -| GND | 连接到 ESC电调负极 | -| PWR | JST-GH 6-pin Connector, 5V 3A output
connect to _Pixhawk 4 Mini_ POWER | -| BAT | 电源输入,连接到2~12S的LiPo电池 | - -The pinout of the _Pixhawk 4 Mini_ **POWER** port is shown below. -The `CURRENT` signal should carry an analog voltage from 0-3.3V for 0-120A as default. -The `VOLTAGE` signal should carry an analog voltage from 0-3.3V for 0-60V as default. -The VCC lines have to offer at least 3A continuous and should default to 5.1V. A lower voltage of 5V is still acceptable, but discouraged. - -| 针脚 | 信号 | 电压 | -| ---- | --- | --------------------- | -| 1(红) | VCC | +5V | -| 2(黑) | VCC | +5V | -| 3(黑) | 电流 | +3.3V | -| 4(黑) | 电压 | +3.3V | -| 5(黑) | GND | GND | -| 6(黑) | GND | GND | - -:::info -If using a plane or rover, the 8 pin power (+) rail of **MAIN OUT** will need to be separately powered in order to drive servos for rudders, elevons, etc. -To do this, the power rail needs to be connected to a BEC equipped ESC, a standalone 5V BEC, or a 2S LiPo battery. -Be careful with the voltage of servo you are going to use here. -::: - - - -:::info -Using the Power Module that comes with the kit you will need to configure the _Number of Cells_ in the [Power Settings](https://docs.qgroundcontrol.com/master/en/qgc-user-guide/setup_view/power.html) but you won't need to calibrate the _voltage divider_. -You will have to update the _voltage divider_ if you are using any other power module (e.g. the one from the Pixracer). -::: - -## 遥控器 - -A remote control (RC) radio system is required if you want to _manually_ control your vehicle (PX4 does not require a radio system for autonomous flight modes). - -You will need to [select a compatible transmitter/receiver](../getting_started/rc_transmitter_receiver.md) and then _bind_ them so that they communicate (read the instructions that come with your specific transmitter/receiver). - -The instructions below show how to connect the different types of receivers to _Pixhawk 4 Mini_: - -- Spektrum/DSM or S.BUS receivers connect to the **DSM/SBUS RC** input. - - ![Pixhawk 4 Mini - Radio port for Spektrum receivers](../../assets/flight_controller/pixhawk4mini/pixhawk4mini_rc_dsmsbus.png) - -- PPM receivers connect to the **PPM RC** input port. - - ![Pixhawk 4 Mini - Radio port for PPM receivers](../../assets/flight_controller/pixhawk4mini/pixhawk4mini_rc_ppm.png) - -- PPM and PWM receivers that have an _individual wire for each channel_ must connect to the **PPM RC** port _via a PPM encoder_ [like this one](https://www.getfpv.com/radios/radio-accessories/holybro-ppm-encoder-module.html) (PPM-Sum receivers use a single signal wire for all channels). - -For more information about selecting a radio system, receiver compatibility, and binding your transmitter/receiver pair, see: [Remote Control Transmitters & Receivers](../getting_started/rc_transmitter_receiver.md). - -## Telemetry Radio (Optional) - -Telemetry radios may be used to communicate and control a vehicle in flight from a ground station (for example, you can direct the UAV to a particular position, or upload a new mission). - -The vehicle-based radio should be connected to the **TELEM1** port as shown below (if connected to this port, no further configuration is required). -The other radio is connected to your ground station computer or mobile device (usually by USB). - -![Pixhawk 4 Mini Telemetry](../../assets/flight_controller/pixhawk4mini/pixhawk4mini_telemetry.png) - -## SD卡(可选) - -SD cards are highly recommended as they are needed to [log and analyse flight details](../getting_started/flight_reporting.md), to run missions, and to use UAVCAN-bus hardware. -Insert the card (included in the kit) into _Pixhawk 4 Mini_ as shown below. - -![Pixhawk 4 Mini SD Card](../../assets/flight_controller/pixhawk4mini/pixhawk4mini_sdcard.png) - -:::tip -For more information see [Basic Concepts > SD Cards (Removable Memory)](../getting_started/px4_basic_concepts.md#sd-cards-removable-memory). -::: - -## 电机 - -Motors/servos are connected to the **MAIN OUT** ports in the order specified for your vehicle in the [Airframe Reference](../airframes/airframe_reference.md). See [_Pixhawk 4 Mini_ > Supported Platforms](../flight_controller/pixhawk4_mini.md#supported-platforms) for more information. - -:::info -This reference lists the output port to motor/servo mapping for all supported air and ground frames (if your frame is not listed in the reference then use a "generic" airframe of the correct type). -::: - -:::warning -The mapping is not consistent across frames (e.g. you can't rely on the throttle being on the same output for all plane frames). -Make sure to use the correct mapping for your vehicle. -::: - -## 其它外设 - -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) - - - -## 更多信息 - -- [_Pixhawk 4 Mini_](../flight_controller/pixhawk4_mini.md) diff --git a/docs/zh/assembly/quick_start_pixhawk5x.md b/docs/zh/assembly/quick_start_pixhawk5x.md index 7a2bcd3501..b6d9b1f7c5 100644 --- a/docs/zh/assembly/quick_start_pixhawk5x.md +++ b/docs/zh/assembly/quick_start_pixhawk5x.md @@ -52,7 +52,7 @@ You can press the safety switch again to enable safety and disarm the vehicle (t ## 电源 Connect the output of the _PM02D Power Module_ (PM board) that comes with the Standard Set to one of the **POWER** port of _Pixhawk 5X_ using the 6-wire cable. -The PM02D and Power ports on the Pixhawk 5X uses the 6 circuit [2.00mm Pitch CLIK-Mate Wire-to-Board PCB Receptacle](https://www.molex.com/en-us/products/part-detail/5024430670) & [Housing](https://www.molex.com/molex/products/part-detail/crimp_housings/5024390600). +The PM02D and Power ports on the Pixhawk 5X uses the 6 circuit [2.00mm Pitch CLIK-Mate Wire-to-Board PCB Receptacle](https://www.molex.com/en-us/products/part-detail/5024430670) & [Housing](https://www.molex.com/en-us/products/part-detail/5024390600). The PM02D Power Module supports **2~6S** battery, the board input should be connected to your LiPo battery. Note that the PM board does not supply power to the + and - pins of **FMU PWM OUT** and **I/O PWM OUT**. diff --git a/docs/zh/assembly/quick_start_pixhawk6x.md b/docs/zh/assembly/quick_start_pixhawk6x.md index cfa0767476..61ae772ebf 100644 --- a/docs/zh/assembly/quick_start_pixhawk6x.md +++ b/docs/zh/assembly/quick_start_pixhawk6x.md @@ -65,7 +65,7 @@ You can press the safety switch again to enable safety and disarm the vehicle (t ## 电源 Connect the output of the _PM02D Power Module_ (PM board) that comes with the Standard Set to one of the **POWER** port of _Pixhawk 6X_ using the 6-wire cable. -The PM02D and Power ports on the Pixhawk 6X uses the 6 circuit [2.00mm Pitch CLIK-Mate Wire-to-Board PCB Receptacle](https://www.molex.com/en-us/products/part-detail/5024430670) & [Housing](https://www.molex.com/molex/products/part-detail/crimp_housings/5024390600). +The PM02D and Power ports on the Pixhawk 6X uses the 6 circuit [2.00mm Pitch CLIK-Mate Wire-to-Board PCB Receptacle](https://www.molex.com/en-us/products/part-detail/5024430670) & [Housing](https://www.molex.com/en-us/products/part-detail/5024390600). The PM02D Power Module supports **2~6S** battery, the board input should be connected to your LiPo battery. Note that the PM board does not supply power to the + and - pins of **FMU PWM OUT** and **I/O PWM OUT**. diff --git a/docs/zh/assembly/quick_start_pixracer.md b/docs/zh/assembly/quick_start_pixracer.md index 2c4e99a4f5..a81841a472 100644 --- a/docs/zh/assembly/quick_start_pixracer.md +++ b/docs/zh/assembly/quick_start_pixracer.md @@ -52,7 +52,7 @@ The instructions below show how to connect the different types of receivers: Pixracer has inbuilt WiFi, but also supports telemetry via external Wi-Fi or radio telemetry modules connected to the `TELEM1` or `TELEM2` ports. This is shown in the wiring diagram below. -![Pixracer external telemtry options](../../assets/flight_controller/pixracer/pixracer_top_telemetry.jpg) +![Pixracer external telemetry options](../../assets/flight_controller/pixracer/pixracer_top_telemetry.jpg) :::info The `TELEM2` port must be configured as a second MAVLink instance using the [MAV_2_CONFIG](../advanced_config/parameter_reference.md#MAV_2_CONFIG) parameter. diff --git a/docs/zh/camera/camera_architecture.md b/docs/zh/camera/camera_architecture.md index 89b9ea5a54..4cccaf7b59 100644 --- a/docs/zh/camera/camera_architecture.md +++ b/docs/zh/camera/camera_architecture.md @@ -8,10 +8,10 @@ See [Camera](../camera/index.md) for information about _using_ cameras. ## 综述 -PX4 integrates with three types of cameras: +PX4 集成了三种类型的相机: -- [MAVLink cameras](../camera/mavlink_v2_camera.md) that support the [Camera Protocol v2](https://mavlink.io/en/services/camera.html) (**RECOMMENDED**). -- [Simple MAVLink cameras](../camera/mavlink_v1_camera.md) that support the older [Camera Protocol v1](https://mavlink.io/en/services/camera.html). +- [MAVLink 相机](../camera/mavlink_v2_camera.md) 支持 [Camera Protocol v2](https://mavlink.io/en/services/camera.html) (**推荐**)。 +- [简单的 MAVLink 摄像头](../camera/mavlink_v1_camera.md) 支持旧的 [Camera Protocol v1](https://mavlink.io/en/services/camera.html)。 - [Cameras attached to flight controller outputs](../camera/fc_connected_camera.md), which are controlled using the [Camera Protocol v1](https://mavlink.io/en/services/camera.html). All of these cameras need to respond to MAVLink commands received over MAVLink or found in missions (the specific protocol depends on the camera). @@ -36,7 +36,7 @@ The `camera_trigger`, `camera_capture` and `camera_feedback` modules are not use This work is handled by three PX4 components: [`camera_trigger` driver](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/camera_trigger), [`camera_capture` driver](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/camera_capture), [`camera-feedback` module](../modules/modules_system.md#camera-feedback). `camera_trigger` subscribes to the [VehicleCommand](../msg_docs/VehicleCommand.md) topic and monitors for updates to its [supported commands](../camera/fc_connected_camera.md#mavlink-command-interface). -Thes updates occur when either a command is received via MAVLink or when a [camera item is reached in a mission](#camera-commands-in-missions). +These updates occur when either a command is received via MAVLink or when a [camera item is reached in a mission](#camera-commands-in-missions). The commands enable and disable triggering, and configure triggering at time and distance intervals. The driver tracks these intervals, and when needed triggers the outputs. diff --git a/docs/zh/camera/camera_intel_realsense_t265_vio.md b/docs/zh/camera/camera_intel_realsense_t265_vio.md index f881bef91c..91e26192e4 100644 --- a/docs/zh/camera/camera_intel_realsense_t265_vio.md +++ b/docs/zh/camera/camera_intel_realsense_t265_vio.md @@ -18,17 +18,22 @@ No longer available. At a high level: -- The [`realsense-ros` wrapper](https://github.com/IntelRealSense/realsense-ros) provided by Intel should be used to extract the raw data from the camera. +- The [`realsense-ros` wrapper](https://github.com/realsenseai/realsense-ros) provided by Intel should be used to extract the raw data from the camera. + - The camera should be mounted with lenses facing down (default). Be sure to specify the camera orientation by publishing the static transform between the `base_link` and `camera_pose_frame` in a ROS launch file, for example: + ```xml ``` + This is a static transform that links the camera ROS frame `camera_pose_frame` to the MAVROS drone frame `base_link`. + - the first three `args` specify _translation_ x,y,z in metres from the center of the flight controller to the camera. For example, if the camera is 10cm in front of the controller and 4cm up, the first three numbers would be : [0.1, 0, 0.04,...] - the next three `args` specify rotation in radians (yaw, pitch, roll). So `[... 0, 1.5708, 0]` means pitch down by 90° (facing the ground). Facing straight forward would be [... 0 0 0]. + - The camera is sensitive to high-frequency vibrations! It should be soft-mounted with, for example, vibration isolation foam. diff --git a/docs/zh/camera/fc_connected_camera.md b/docs/zh/camera/fc_connected_camera.md index fdae04a272..691dc85e09 100644 --- a/docs/zh/camera/fc_connected_camera.md +++ b/docs/zh/camera/fc_connected_camera.md @@ -1,4 +1,4 @@ -# Cameras Connected to Flight Controller Outputs +# 连接飞控输出的相机 This topic explains how to use PX4 with a [camera](../camera/index.md) that is attached to flight controller outputs. @@ -79,7 +79,7 @@ The shutter integration setting (`param2`) is only obeyed with a GPIO backend. ## Trigger Configuration -Cameras can be connected to the FC for triggering using different intefaces, such as PWM, and GPIO, by specifying the appropriate [trigger interface backend](#trigger-interface-backends). +Cameras can be connected to the FC for triggering using different interfaces, such as PWM, and GPIO, by specifying the appropriate [trigger interface backend](#trigger-interface-backends). You can also indicate the camera [trigger mode](#trigger-modes). This configuration can most easily be done from the _QGroundControl_ [Vehicle Setup > Camera](https://docs.qgroundcontrol.com/master/en/qgc-user-guide/setup_view/camera.html#px4-camera-setup) section. @@ -308,7 +308,7 @@ Wire up your cameras to your AUX port by connecting the ground and signal pins t ### Step 4 You will have to modify your driver to follow the sequence diagram above. -Public reference implementations for [IDS Imaging UEye](https://github.com/ProjectArtemis/ueye_cam) cameras and for [IEEE1394 compliant](https://github.com/andre-nguyen/camera1394) cameras are available. +Public reference implementations for [IDS Imaging UEye](https://github.com/anqixu/ueye_cam) cameras and for [IEEE1394 compliant](https://github.com/andre-nguyen/camera1394) cameras are available. ## 另见 diff --git a/docs/zh/camera/index.md b/docs/zh/camera/index.md index 6367fb82c0..eebbdabcef 100644 --- a/docs/zh/camera/index.md +++ b/docs/zh/camera/index.md @@ -1,14 +1,14 @@ -# Cameras +# 相机 相机对许多[有效载荷使用](../payloads/use_cases.md)很重要,包括绘图和勘测、监视、搜索和救援、作物健康和虫害检测等等。 它们通常安装在一个 [云台](../advanced/gimbal_control.md)上,它能够提供相机稳定性、点跟踪和独立运动。 ## 相机类型 -PX4 integrates with three types of cameras: +PX4 集成了三种类型的相机: -- [MAVLink cameras](../camera/mavlink_v2_camera.md) that support the [Camera Protocol v2](https://mavlink.io/en/services/camera.html) (**RECOMMENDED**). -- [Simple MAVLink cameras](../camera/mavlink_v1_camera.md) that support the older [Camera Protocol v1](https://mavlink.io/en/services/camera.html). +- [MAVLink 相机](../camera/mavlink_v2_camera.md) 支持 [Camera Protocol v2](https://mavlink.io/en/services/camera.html) (**推荐**)。 +- [简单的 MAVLink 摄像头](../camera/mavlink_v1_camera.md) 支持旧的 [Camera Protocol v1](https://mavlink.io/en/services/camera.html)。 - [Cameras attached to flight controller outputs](../camera/fc_connected_camera.md), which are controlled using the [Camera Protocol v1](https://mavlink.io/en/services/camera.html). 推荐[MAVLink 摄像头](../camera/mavlink_v2_camera.md),因为它们使用简单一致的命令/消息集提供了最广泛的相机功能访问。 diff --git a/docs/zh/camera/mavlink_v1_camera.md b/docs/zh/camera/mavlink_v1_camera.md index 2c1289fa32..984953f13f 100644 --- a/docs/zh/camera/mavlink_v1_camera.md +++ b/docs/zh/camera/mavlink_v1_camera.md @@ -1,4 +1,4 @@ -# 简单的 MAVLink 摄像头(Camera Protcol v1) +# Simple MAVLink Cameras (Camera Protocol v1) 本节说明了如何使用 PX4 的 MAVLink [相机](../camera/index.md), 实现了 [Camera Protocol v1 (简单触发协议)](https://mavlink.io/en/services/camera_v1.html) 的 PX4 和地面站。 @@ -18,7 +18,7 @@ PX4 支持此命令集以触发通过原生支持协议的相机 (如本节所述),以及连接到飞控输出的相机。 地面站和 MAVLink SDK 通常将相机命令发送给自动驾驶仪,然后转发给连接的类型为 '板载' 的 MAVLink 通道。 -PX4 还会将其在任务中遇到的任何相机任务项重新发出为相机命令:未被接受的命令将被记录。 +PX4 also re-emits any camera mission items it encounters in a mission as camera commands: commands that aren't accepted are logged. 在所有情况下,命令都是使用自动驾驶仪的系统 ID 和组件 ID 为 0(即发送给所有组件,包括摄像头)。 每次触发图像捕获时 PX4 也会发出一个 [CAMERA_TRIGGER](https://mavlink.io/en/messages/common.html#CAMERA_TRIGGER) (相机本身也可能在触发时发出此消息)。 diff --git a/docs/zh/can/index.md b/docs/zh/can/index.md index 452f0aba97..2fa541ca9e 100644 --- a/docs/zh/can/index.md +++ b/docs/zh/can/index.md @@ -38,7 +38,7 @@ Devices within a network are connected in a _daisy-chain_ in any order (this dif :::warning Don't connect each CAN peripheral to a separate CAN port! -Unlike UARTs, CAN peripherals are designed to be daisy chained, with additional ports such as `CAN2` used for [redundancy](redundancy). +Unlike UARTs, CAN peripherals are designed to be daisy chained, with additional ports such as `CAN2` used for [redundancy](#redundancy). ::: 在链的任一端,应该在两个数据线之间连接一个 120Ω 的终端电阻。 @@ -84,7 +84,7 @@ You only _need_ one CAN port to support an arbitrary number of CAN devices using Don't connect each CAN peripheral to a separate CAN port! ::: -Generally you'll daisy all CAN peripherals off a single port, and if there is more than one CAN port, use the second one for [redundancy](redundancy). +Generally you'll daisy all CAN peripherals off a single port, and if there is more than one CAN port, use the second one for [redundancy](#redundancy). If three are three ports, you might use the remaining network for devices that support another CAN protocol. The documentation for your flight controller should indicate which ports are supported/enabled. diff --git a/docs/zh/companion_computer/companion_computer_peripherals.md b/docs/zh/companion_computer/companion_computer_peripherals.md index f7f27f2328..db6c6e9225 100644 --- a/docs/zh/companion_computer/companion_computer_peripherals.md +++ b/docs/zh/companion_computer/companion_computer_peripherals.md @@ -43,7 +43,7 @@ Options include: - [SparkFun Logic Level Converter - Bi-Directional](https://www.sparkfun.com/sparkfun-logic-level-converter-bi-directional.html) - [4-channel I2C-safe Bi-directional Logic Level Converter - BSS138](https://www.adafruit.com/product/757) -## Cameras +## 相机 Cameras are used image and video capture, and more generally to provide data for [computer vision](../computer_vision/index.md) applications (in this case the "cameras" may only provide processed data, not raw images). @@ -54,8 +54,8 @@ They are in no way guaranteed to be plug and play with your companion computer. Popular stereo cameras include: -- [Intel® RealSense™ Depth Camera D435](https://realsenseai.com/stereo-depth-cameras/stereo-depth-camera-d435/) -- [Intel® RealSense™ Depth Camera D415](https://realsenseai.com/stereo-depth-cameras/stereo-depth-camera-d415/) +- [Intel® RealSense™ Depth Camera D435](https://www.realsenseai.com/products/stereo-depth-camera-d435/) +- [Intel® RealSense™ Depth Camera D415](https://www.realsenseai.com/products/stereo-depth-camera-d415/) - [DUO MLX](https://duo3d.com/product/duo-minilx-lv1) ### VIO Cameras/Sensors diff --git a/docs/zh/companion_computer/holybro_pixhawk_jetson_baseboard.md b/docs/zh/companion_computer/holybro_pixhawk_jetson_baseboard.md index e49a32a97a..5996a6796f 100644 --- a/docs/zh/companion_computer/holybro_pixhawk_jetson_baseboard.md +++ b/docs/zh/companion_computer/holybro_pixhawk_jetson_baseboard.md @@ -786,7 +786,7 @@ sudo apt install build-essential cmake git genromfs kconfig-frontends libncurses ## Building/Flashing the Pixhawk The recommended way to update PX4 is on the Pixhawk part of the board is to use your development computer. -You can either install install prebuilt binaries with QGroundControl, or first build and then upload custom firmware. +You can either install prebuilt binaries with QGroundControl, or first build and then upload custom firmware. Alternatively, you can build and deploy PX4 firmware to the Pixhawk part from the Jetson. diff --git a/docs/zh/companion_computer/holybro_pixhawk_rpi_cm4_baseboard.md b/docs/zh/companion_computer/holybro_pixhawk_rpi_cm4_baseboard.md index e3b90f22b0..240301f8b6 100644 --- a/docs/zh/companion_computer/holybro_pixhawk_rpi_cm4_baseboard.md +++ b/docs/zh/companion_computer/holybro_pixhawk_rpi_cm4_baseboard.md @@ -99,7 +99,7 @@ The image below shows the wiring in greater detail. This section explains how you install your preferred Linux distro, such as "Raspberry Pi OS 64bit" onto the RPi EMCC. -备注: +Notes: - If you are using PX4, you will need to use PX4 version 1.13.1 or newer for PX4 to recognize this baseboard. - The fan does not indicate if the RPi CM4 is powered/running or not. diff --git a/docs/zh/companion_computer/index.md b/docs/zh/companion_computer/index.md index 97525770d5..2db8d6dbde 100644 --- a/docs/zh/companion_computer/index.md +++ b/docs/zh/companion_computer/index.md @@ -33,7 +33,7 @@ The boards support the [Pixhawk Autopilot Bus (PAB)](../flight_controller/pixhaw ## 机载计算机选项 -PX4 可以与计算机一起使用,可以配置为通过基于串口(或以太网端口) 的 MAVLink 或 microROS/uXRCE-DDS 进行通信。 +PX4 can be used with computers that can be configured to communicate via MAVLink or microROS/uXRCE-DDS over a serial port (or Ethernet port, if present). 以下列出了一小部分可能的替代方案。 高性能计算机: diff --git a/docs/zh/companion_computer/pixhawk_rpi.md b/docs/zh/companion_computer/pixhawk_rpi.md index cefb5a2bcc..cf14500bc3 100644 --- a/docs/zh/companion_computer/pixhawk_rpi.md +++ b/docs/zh/companion_computer/pixhawk_rpi.md @@ -1,6 +1,6 @@ # Raspberry Pi Companion with Pixhawk -This topic describes how to setup a Raspberry Pi ("RPi") companion companion running [ROS 2](../ros2/user_guide.md) on Linux Ubuntu OS, connecting to a [Pixhawk](../flight_controller/autopilot_pixhawk_standard.md) flight controller using a serial connection between the Pixhawk `TELEM2` port and the RPi's TX/RX pins. +This topic describes how to setup a Raspberry Pi ("RPi") companion running [ROS 2](../ros2/user_guide.md) on Linux Ubuntu OS, connecting to a [Pixhawk](../flight_controller/autopilot_pixhawk_standard.md) flight controller using a serial connection between the Pixhawk `TELEM2` port and the RPi's TX/RX pins. These instructions should be readily extensible to other RPi and flight controller configurations. diff --git a/docs/zh/companion_computer/video_streaming.md b/docs/zh/companion_computer/video_streaming.md index 126d738887..d459694612 100644 --- a/docs/zh/companion_computer/video_streaming.md +++ b/docs/zh/companion_computer/video_streaming.md @@ -20,7 +20,7 @@ For a Ubuntu companion, a minimal set might be: sudo apt install gstreamer1.0-plugins-bad gstreamer1.0-libav gstreamer1.0-gl -y ``` -For the full set you can mirror the QGC dependencies installed by [/tools/setup/install-dependencies-debian.sh](https://github.com/mavlink/qgroundcontrol/blob/master/tools/setup/install-dependencies-debian.sh). +For the full set you can mirror the QGC dependencies installed by [/tools/setup/install_dependencies.py](https://github.com/mavlink/qgroundcontrol/blob/master/tools/setup/install_dependencies.py). At time of writing this is: ```sh diff --git a/docs/zh/complete_vehicles/index.md b/docs/zh/complete_vehicles/index.md index 5ec36bf09e..d1a5e9b42a 100644 --- a/docs/zh/complete_vehicles/index.md +++ b/docs/zh/complete_vehicles/index.md @@ -1,8 +1,8 @@ # 整机 -For frame-type specific information about fully-assembled vehicles that can run PX4 see: +如需查看支持 PX4 的成品整机、各机架专属适配说明,详见: -- Multicopters: [Complete Vehicles (MC)](../complete_vehicles_mc/index.md) (also see [Kits (MC)](../frames_multicopter/kits.md), [DIY Builds](../frames_multicopter/diy_builds.md)) -- VTOL: [Complete Vehicles (VTOL)](../complete_vehicles_vtol/index.md) -- Fixed-wing: [Complete Vehicles (Fixed-Wing)](../complete_vehicles_fw/index.md) (also see [DIY Builds](../frames_plane/diy_builds.md)) +- 多旋翼: [Complete Vehicles (MC)](../complete_vehicles_mc/index.md) (也可以看 [Kits (MC)](../frames_multicopter/kits.md),[DIY Builds](../frames_multicopter/diy_builds.md)) +- 垂起:[整机 (VTOL)](../complete_vehicles_vtol/index.md) +- 固定翼:[整机 (Fixed-Wing)](../complete_vehicles_fw/index.md) (也可以看 [DIY Builds](../frames_plane/diy_builds.md)) - Autogyro: [Autogyros (experimental) > Complete Frames with PX4 Preinstalled](../frames_autogyro/index.md#complete-frames-with-px4-preinstalled) diff --git a/docs/zh/complete_vehicles_mc/crazyflie2.md b/docs/zh/complete_vehicles_mc/crazyflie2.md index 67534784c5..920c814ee3 100644 --- a/docs/zh/complete_vehicles_mc/crazyflie2.md +++ b/docs/zh/complete_vehicles_mc/crazyflie2.md @@ -1,319 +1,7 @@ + + + diff --git a/docs/zh/complete_vehicles_mc/holybro_kopis2.md b/docs/zh/complete_vehicles_mc/holybro_kopis2.md index 3399ca375a..ba3d925927 100644 --- a/docs/zh/complete_vehicles_mc/holybro_kopis2.md +++ b/docs/zh/complete_vehicles_mc/holybro_kopis2.md @@ -29,7 +29,7 @@ In addition you will need: The _Kopis 2_ comes preinstalled with Betaflight. Before loading PX4 firmware you must first install the PX4 bootloader. -Instructions for installing the bootloader can be found in the [Kakute F7](../flight_controller/kakutef7.md#bootloader) topic (this is the flight controller board on the _Kopis 2_). +Download the [kakutef7_bl.hex](https://raw.githubusercontent.com/PX4/PX4-Autopilot/release/1.17/docs/assets/flight_controller/kakutef7/kakutef7_bl_0b3fbe2da0.hex?download=true) bootloader binary and read [PX4 Bootloader Flashing onto Betaflight Systems](../advanced_config/bootloader_update_from_betaflight.md) for flashing instructions. :::tip You can always [reinstall Betaflight](../advanced_config/bootloader_update_from_betaflight.md#reinstall-betaflight) later if you want! diff --git a/docs/zh/complete_vehicles_mc/px4_vision_kit.md b/docs/zh/complete_vehicles_mc/px4_vision_kit.md index 422ed34af2..efe87fcb15 100644 --- a/docs/zh/complete_vehicles_mc/px4_vision_kit.md +++ b/docs/zh/complete_vehicles_mc/px4_vision_kit.md @@ -70,7 +70,7 @@ Difference between the PX4 Vision V1 and V1.5 can be found [here](https://docs.h ![PV4 Vision v1.5](../../assets/hardware/px4_vision_devkit/px4_vision_v1.5_whats_inside.jpg) -What's inside the PX4 Vision V1 can be found here in the [PX4 v1.13 Docs here](https://docs.px4.io/v1.13/en/complete_vehicles/px4_vision_kit.html#what-is-inside). +What's inside the PX4 Vision V1 can be found here in the [PX4 v1.13 Docs here](https://docs.px4.io/v1.13/en/complete_vehicles/px4_vision_kit#what-is-inside). The PX4 Vision DevKit contains following components: @@ -403,7 +403,7 @@ The carrier board pinouts and other information are in the [downloads section](h ## Other Development Resources - [_UP Core_ Wiki](https://github.com/up-board/up-community/wiki/Ubuntu) - _Up Core_ companion computer technical information -- [Occipital Developer Forum](https://structure.io/developers/) - _Structure Core_ camera information +- [Occipital Developer Forum](https://structure.io/structure-sdk/) - _Structure Core_ camera information - [Pixhawk 4 Overview](../flight_controller/pixhawk4.md) - [Pixhawk 6C Overview](../flight_controller/pixhawk6c.md) diff --git a/docs/zh/complete_vehicles_rover/aion_r1.md b/docs/zh/complete_vehicles_rover/aion_r1.md index e6bc0298cb..fedbd98460 100644 --- a/docs/zh/complete_vehicles_rover/aion_r1.md +++ b/docs/zh/complete_vehicles_rover/aion_r1.md @@ -33,7 +33,7 @@ For this build this includes an [Auterion Skynode](../companion_computer/auterio If using a standard Pixhawk you could connect the RoboClaw to the Autopilot without an Adapter Board. ::: -The RoboClaw should be connected to a suitable suitable serial (UART) port on the flight controller, such as `GPS2` or `TELEM1`. +The RoboClaw should be connected to a suitable serial (UART) port on the flight controller, such as `GPS2` or `TELEM1`. Other RoboClaw wiring is detailed in the [RoboClaw User Manual](https://downloads.basicmicro.com/docs/roboclaw_user_manual.pdf) 'Packet Serial Wiring' section and shown below (this setup has been validated for compatibility). ![Serial Wiring Encoders](../../assets/airframes/rover/aion_r1/wiring_r1.jpg) diff --git a/docs/zh/computer_vision/collision_prevention.md b/docs/zh/computer_vision/collision_prevention.md index df2266205d..2d68314c8e 100644 --- a/docs/zh/computer_vision/collision_prevention.md +++ b/docs/zh/computer_vision/collision_prevention.md @@ -143,7 +143,7 @@ If you wish to move freely into directions without sensor coverage, this can be ### Acceleration Constraining -For this we split out the acceleration setpoint into two components, one parallel to the closest distance to the obstacle and one normal to it. Then we scale each of these components according the the figure below. +For this we split out the acceleration setpoint into two components, one parallel to the closest distance to the obstacle and one normal to it. Then we scale each of these components according to the figure below. ![Scalefactor](../../assets/computer_vision/collision_prevention/scalefactor.png) diff --git a/docs/zh/computer_vision/path_planning_interface.md b/docs/zh/computer_vision/path_planning_interface.md index cae7400715..3e6fb9688d 100644 --- a/docs/zh/computer_vision/path_planning_interface.md +++ b/docs/zh/computer_vision/path_planning_interface.md @@ -18,4 +18,4 @@ This interface allows PX4 to stream a proposed path to a companion computer, and This enables features such obstacle avoidance in missions and safer landing to be provided by a planner on a companion computer. This actual code is still present in code at time of writing (PX4 v1.15). -Information about the API and associated features can be found in the [PX4 v1.14 docs](https://docs.px4.io/v1.14/en/computer_vision/path_planning_interface.html). +Information about the API and associated features can be found in the [PX4 v1.14 docs](https://docs.px4.io/v1.14/en/computer_vision/path_planning_interface). diff --git a/docs/zh/computer_vision/visual_inertial_odometry.md b/docs/zh/computer_vision/visual_inertial_odometry.md index 0c91c383be..953b42938d 100644 --- a/docs/zh/computer_vision/visual_inertial_odometry.md +++ b/docs/zh/computer_vision/visual_inertial_odometry.md @@ -101,8 +101,8 @@ A plot of external data vs. onboard estimate (as above) can be generated using [ ## Check/Verify VIO Estimate {#verify_estimate} -:::info -The [MAV_ODOM_LP](../advanced_config/parameter_reference.md#MAV_ODOM_LP) parameter mentioned below was removed in PX4 v1.14. +:::warning +The `MAV_ODOM_LP` parameter mentioned below was removed in PX4 v1.14. This section needs to be updated. ::: diff --git a/docs/zh/concept/control_allocation.md b/docs/zh/concept/control_allocation.md index 78d019360c..cce86609b7 100644 --- a/docs/zh/concept/control_allocation.md +++ b/docs/zh/concept/control_allocation.md @@ -2,7 +2,7 @@ :::info Control allocation replaces the legacy mixing approach used in PX4 v1.13 and earlier. -For PX4 v1.13 documentation see: [Mixing & Actuators](https://docs.px4.io/v1.13/en/concept/mixing.html), [Geometry Files](https://docs.px4.io/v1.13/en/concept/geometry_files.html) and [Adding a New Airframe Configuration](https://docs.px4.io/v1.13/en/dev_airframes/adding_a_new_frame.html). +For PX4 v1.13 documentation see: [Mixing & Actuators](https://docs.px4.io/v1.13/en/concept/mixing), [Geometry Files](https://docs.px4.io/v1.13/en/concept/geometry_files) and [Adding a New Airframe Configuration](https://docs.px4.io/v1.13/en/dev_airframes/adding_a_new_frame). ::: PX4从核心控制器获取所需的扭矩和推力指令,并将它们转换为控制电机或作动器的驱动指令。 @@ -31,7 +31,7 @@ PX4将这个转换逻辑区分开,这个逻辑被称为从姿态/角速率控 ![Pipeline Overview](../../assets/concepts/control_allocation_pipeline.png) -备注: +Notes: - 角速率控制器输出力矩和推力设定值 - the `control_allocator` module: diff --git a/docs/zh/concept/events_interface.md b/docs/zh/concept/events_interface.md index a26315c082..0bcfbe32b2 100644 --- a/docs/zh/concept/events_interface.md +++ b/docs/zh/concept/events_interface.md @@ -94,7 +94,7 @@ Explanations and requirements: ``` - Above we specify a separate external and internal log level, which are the levels displayed to GCS users and in the log file, respectively: `{events::Log::Error, events::LogInternal::Info}`. - For the majority of cases you can pass a single log level, and this will be used for both exernal and internal cases. + For the majority of cases you can pass a single log level, and this will be used for both external and internal cases. There are cases it makes sense to have two different log levels. For example an RTL failsafe action: the user should see it as Warning/Error, whereas in the log, it is an expected system response, so it can be set to `Info`. diff --git a/docs/zh/concept/flight_tasks.md b/docs/zh/concept/flight_tasks.md index a2b0d71994..47831b3b77 100644 --- a/docs/zh/concept/flight_tasks.md +++ b/docs/zh/concept/flight_tasks.md @@ -116,7 +116,7 @@ The instructions below might be used to create a task named _MyTask_: ::: tip The task added above will be built on all boards, including those with constrained flash such as Pixhawk FMUv2. - If your task is not indended for use on boards with constrained flash it should instead be added to the conditional block shown below (as shown). + If your task is not intended for use on boards with constrained flash it should instead be added to the conditional block shown below (as shown). ```cmake ... diff --git a/docs/zh/concept/system_startup.md b/docs/zh/concept/system_startup.md index 28456ce738..bf982a2ae5 100644 --- a/docs/zh/concept/system_startup.md +++ b/docs/zh/concept/system_startup.md @@ -21,7 +21,7 @@ On POSIX, the system shell is used as script interpreter (e.g. /bin/sh, being sy - PX4 的各个模块需要看起来像系统的单个可执行文件。 这一点可以通过创建符号链接做到。 For each module a symbolic link `px4- -> px4` is created in the `bin` directory of the build folder. - When executed, the binary path is checked (`argv[0]`), and if it is a module (starts with `px4-`), it sends the command to the main px4 instance (see below). + When executed, the binary path is checked (`argv[0]`), and if it is a module (starts with `px4-`), it sends the command to the main PX4 instance (see below). :::tip The `px4-` prefix is used to avoid conflicts with system commands (e.g. `shutdown`), and it also allows for simple tab completion by typing `px4-`. @@ -32,7 +32,7 @@ On POSIX, the system shell is used as script interpreter (e.g. /bin/sh, being sy For that the `bin` directory with the symbolic links is added to the `PATH` variable right before executing the startup scripts. - Shell 将每个模块作为一个新的 (客户端) 进程进行启动, - 每个客户端进程都需要与 PX4 主实例(服务器)进行通讯,实际的模块以线程的形式运行。 + Each client process needs to communicate with the main instance of PX4 (the server), where the actual modules are running as threads. This is done through a [UNIX socket](https://man7.org/linux/man-pages/man7/unix.7.html). 服务器侦听一个 socket,然后客户端将连接该 socket 并通过它发送指令。 服务器收到客户端的指令后将指令运行的输出结果及返回代码重新发送给客户端。 @@ -40,7 +40,7 @@ On POSIX, the system shell is used as script interpreter (e.g. /bin/sh, being sy - The startup scripts call the module directly, e.g. `commander start`, rather than using the `px4-` prefix. This works via aliases: for each module an alias in the form of `alias =px4-` is created in the file `bin/px4-alias.sh`. -- The `rcS` script is executed from the main px4 instance. +- The `rcS` script is executed from the main PX4 instance. It does not start any modules, but first updates the `PATH` variable and then simply runs a shell with the `rcS` file as argument. - 除此之外,在进行多飞行器仿真时还可以启动多个服务器实例。 diff --git a/docs/zh/config/_autotune.md b/docs/zh/config/_autotune.md index 8af3df65be..ec191a5c56 100644 --- a/docs/zh/config/_autotune.md +++ b/docs/zh/config/_autotune.md @@ -126,7 +126,7 @@ Additional notes:
- The instructions above tune the vehicle in [Altitude mode](../flight_modes_mc/altitude.md). - You can instead takeoff in [Takeoff mode](../flight_modes_mc/takeoff.md) and tune in [Position mode](../flight_modes_mc/position.md) if the vehicle is is _known_ to be stable in these modes. + You can instead takeoff in [Takeoff mode](../flight_modes_mc/takeoff.md) and tune in [Position mode](../flight_modes_mc/position.md) if the vehicle is _known_ to be stable in these modes.
@@ -243,7 +243,7 @@ To map a switch: 2. Set [RC_MAP_AUX1](../advanced_config/parameter_reference.md#RC_MAP_AUX1) to match the RC channel for your switch (you can use any of `RC_MAP_AUX1` to `RC_MAP_AUX6`). 3. Set [FW_AT_MAN_AUX](../advanced_config/parameter_reference.md#FW_AT_MAN_AUX) to the selected channel (i.e. `1: Aux 1` if you mapped `RC_MAP_AUX1`). -The auto tuner will be disabled when the switch is below `0.5` (on the manual control setpoint range of of `[-1, 1]`) and enabled when the switch channel is above `0.5`. +The auto tuner will be disabled when the switch is below `0.5` (on the manual control setpoint range of `[-1, 1]`) and enabled when the switch channel is above `0.5`. If using an RC AUX switch to enable autotuning, make sure to [select the tuning axes](#select-tuning-axis) before flight. diff --git a/docs/zh/config/actuators.md b/docs/zh/config/actuators.md index 716d974043..d1f11a27a2 100644 --- a/docs/zh/config/actuators.md +++ b/docs/zh/config/actuators.md @@ -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](../payloads/generic_actuator_control.md#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 @@ -675,7 +689,6 @@ For each of the tilt servos: - If a safety button is used, it must be pressed before actuator testing is allowed. - The kill-switch can still be used to stop motors immediately. - Servos do not actually move until the corresponding slider is changed. -- The parameter [COM_MOT_TEST_EN](../advanced_config/parameter_reference.md#COM_MOT_TEST_EN) can be used to completely disable actuator testing. - On the shell, [actuator_test](../modules/modules_command.md#actuator-test) can be used as well for actuator testing. - VTOLs will automatically turn off motors pointing upwards during **fixed-wing flight**: - Standard VTOL : Motors defined as multicopter motors will be turned off diff --git a/docs/zh/config/compass.md b/docs/zh/config/compass.md index e121662f01..2135055aa1 100644 --- a/docs/zh/config/compass.md +++ b/docs/zh/config/compass.md @@ -86,7 +86,7 @@ This calibration is similar to the well-known figure-8 compass calibration done 2-3 oscillations of ~30 degrees in every direction is usually sufficient. 2. Wait for the heading estimate to stabilize and verify that the compass rose is pointing to the correct direction (this can take a couple of seconds). -备注: +Notes: - There is no start/stop for this type of calibration (the algorithm runs continuously when the vehicle is disarmed). - The calibration is immediately applied to the data (no reboot is required) but is saved to the calibration parameters after disarming the vehicle only (the calibration is lost if no arming/disarming sequence is performed between calibration and shutdown). @@ -109,7 +109,7 @@ This calibration process leverages external knowledge of vehicle's orientation a commander calibrate mag quick ``` -备注: +Notes: - This method is specifically designed for vehicles where full rotation is impractical or impossible. If full rotation is possible, use the [complete calibration](#complete-calibration) instead. diff --git a/docs/zh/config/joystick.md b/docs/zh/config/joystick.md index c92513ecf9..38e4306ba3 100644 --- a/docs/zh/config/joystick.md +++ b/docs/zh/config/joystick.md @@ -23,8 +23,7 @@ Information about how to set up a joystick is covered in: [QGroundControl > Joys 总结: - Open _QGroundControl_ -- Set the parameter [COM_RC_IN_MODE=1](../advanced_config/parameter_reference.md#COM_RC_IN_MODE) - `Joystick` - - See [Parameters](https://docs.qgroundcontrol.com/master/en/qgc-user-guide/setup_view/parameters.html) for information about setting parameters - - Setting the parameter to `2` or `3` also enables Joystick under some circumstances. +- [Enable a `COM_RC_IN_MODE` mode that allows Joystick](../config/manual_control.md#px4-configuration). + The default `RC or MAVLink keep first` should work if you plan to only have a Joystick connected. - Connect the joystick - Configure the connected joystick in: **Vehicle Setup > Joystick**. diff --git a/docs/zh/config/manual_control.md b/docs/zh/config/manual_control.md new file mode 100644 index 0000000000..1033434b9b --- /dev/null +++ b/docs/zh/config/manual_control.md @@ -0,0 +1,58 @@ +# Manual Control + +Pilots can control a vehicle manually using either a [Radio Control (RC) System](../getting_started/rc_transmitter_receiver.md) or a [Joystick/Gamepad](../config/joystick.md) controller connected via QGroundControl. +PX4 also supports using RC and/or multiple Joysticks, with fallback from one type to the other. + +![Taranis X9D Transmitter](../../assets/hardware/transmitters/frsky_taranis_x9d_transmitter.jpg) Photo of MicroNav, a ground controller with integrated joysticks + +## 综述 + +_Joystick_ setups use QGroundControl to encode the control information from a "standard" computer gaming joystick into [MAVLink messages](https://mavlink.io/en/services/manual_control.html) that are sent to the vehicle over the (shared) telemetry radio channel. +They are often used in integrated GCS/manual control systems because it is cheaper and easier to integrate a joystick than a separate radio system. + +Joysticks are suitable for most applications provided your telemetry channel has a high enough bandwidth/low latency. +They are perfect for flying the PX4 simulator, because you can plug them directly into your ground control computer and start flying. + +_RC systems_ use a dedicated ground-based radio transmitter and vehicle-based receiver for sending control information. +They offer lower latency than Joysticks, and are very highly recommended when first tuning/testing a new frame design, when flying racers/acrobatically, and in other cases where low latency is important. +They can also be useful as a robust backup link for safety. +Note RC systems usually require significantly more configuration and calibration, much of which may be brand or model-specific. + +:::info +PX4 does not _require_ a manual control system for autonomous flight modes. +::: + +## PX4 配置 + +:::tip +This section explains how to configure PX4 to use and prioritise various manual control sources (other configuration is covered in the guides for each type of manual control). +::: + +If you only have one manual control system, either RC or Joystick, then by default no manual control selection is required. +In this case PX4 locks to the first valid manual control source it detects and uses that source until the vehicle is rebooted. + +If you have multiple control sources, such as an RC system and/or one or more Joysticks, then you can use the [COM_RC_IN_MODE](../advanced_config/parameter_reference.md#COM_RC_IN_MODE) parameter to determine which source is active, specifying selection priorities and fallback behavior ([parameters can be set](../advanced_config/parameters.md#finding-a-parameter) using QGC): + +- `0`: RC only. +- `1`: MAVLink only. +- `2`: RC or MAVLink with fallback (switches if current source becomes invalid). +- `3`: RC or MAVLink keep first (locks to the first valid source until reboot). +- `4`: Disable manual control (ignores all sources). +- `5`: RC priority, then MAVLink (lower instance before higher) — `RC > MAVLink 1 > MAVLink 2` +- `6`: MAVLink priority (lower instance before higher), then RC — `MAVLink 1 > MAVLink 2 > RC` +- `7`: RC priority, then MAVLink (higher instance before lower) — `RC > MAVLink 2 > MAVLink 1` +- `8`: MAVLink priority (higher instance before lower), then RC — `MAVLink 2 > MAVLink 1 > RC` + +The [MAVLink instance](../peripherals/mavlink_peripherals.md#mavlink-instances) refers to an instance assigned to a serial port, such as [MAV_0_CONFIG](../advanced_config/parameter_reference.md#MAV_0_CONFIG). + +Notes: + +- RC checks are run for any option that uses RC (so not for `MAVLink only` or `Disable manual control`). +- When using priority sources, sources are evaluated as soon as they become valid and may trigger an immediate switch (if higher priority than the currently active source). +- A [Manual Control Loss Failsafe](../config/safety.md#manual-control-loss-failsafe) is triggered when none of the manual control inputs allowed by the `COM_RC_IN_MODE` mode are available for a time that is greater than the RC Loss Timeout. + As long as there is a fallback input source available, the failsafe is not triggered. + +## 另见 + +- [Radio Control (RC)](../getting_started/rc_transmitter_receiver.md) +- [Joysticks](../config/joystick.md) diff --git a/docs/zh/config/radio.md b/docs/zh/config/radio.md index 3983453e0b..404246b8ae 100644 --- a/docs/zh/config/radio.md +++ b/docs/zh/config/radio.md @@ -1,10 +1,12 @@ # 无线电控制(遥控)设置 -The _Radio Setup_ screen is used to configure the mapping of your RC controller's main attitude control sticks (roll, pitch, yaw, throttle) to channels, and to calibrate the minimum, maximum, trim and reverse settings for all other transmitter controls/RC channels. +The _Radio Setup_ screen is used to configure the mapping of your [RC controller's](../getting_started/rc_transmitter_receiver.md) main attitude control sticks (roll, pitch, yaw, throttle) to channels, and to calibrate the minimum, maximum, trim and reverse settings for all other transmitter controls/RC channels. :::info -A [Joystick](../config/joystick.md) can be used instead of RC for manual control. -The [COM_RC_IN_MODE](../advanced_config/parameter_reference.md#COM_RC_IN_MODE) parameter [can be set](../advanced_config/parameters.md) to define what kind of manual controller(s) are enabled. +A [Joystick](../config/joystick.md) can also be used for [Manual Control](../config/manual_control.md). + +By default PX4 will latch the first valid controller it discovers and use it until the vehicle reboots. +If you have multiple controllers and you want to define their priority see [Manual Control > PX4 Configuration](../config/manual_control.md#px4-configuration). ::: ## 绑定接收机 diff --git a/docs/zh/config/safety.md b/docs/zh/config/safety.md index 433eb1d99f..e0e7e9a77e 100644 --- a/docs/zh/config/safety.md +++ b/docs/zh/config/safety.md @@ -111,19 +111,17 @@ The settings and underlying parameters are shown below. ## Manual Control Loss Failsafe -The manual control loss failsafe may be triggered if the connection to the [RC transmitter](../getting_started/rc_transmitter_receiver.md) or [joystick](../config/joystick.md) is lost, and there is no fallback. -If using an [RC transmitter](../getting_started/rc_transmitter_receiver.md) this is triggered if the RC [transmitter link is lost](../getting_started/rc_transmitter_receiver.md#set-signal-loss-behaviour). -If using [joysticks](../config/joystick.md) connected over a MAVLink data link, this is triggered if the joysticks are disconnected or the data link is lost. - -:::info -PX4 and the receiver may also need to be configured in order to _detect RC loss_: [Radio Setup > RC Loss Detection](../config/radio.md#rc-loss-detection). -::: +A [Manual Control Loss Failsafe](../config/safety.md#manual-control-loss-failsafe) is triggered after a [manual control loss timeout](#COM_RC_LOSS_T) in which none of the configured [Manual Controllers](../config/manual_control.md) are available. ![Safety - RC Loss (QGC)](../../assets/qgc/setup/safety/safety_rc_loss.png) The QGCroundControl Safety UI allows you to set the [failsafe action](#failsafe-actions) and [manual control loss timeout](#COM_RC_LOSS_T). Users that want to disable this failsafe in specific modes can do so using the parameter [COM_RCL_EXCEPT](#COM_RCL_EXCEPT). +:::info +PX4 and the receiver may also need to be configured in order to _detect RC loss_: [Radio Setup > RC Loss Detection](../config/radio.md#rc-loss-detection). +::: + Additional (and underlying) parameter settings are shown below. | 参数 | 设置 | 描述 | @@ -181,17 +179,22 @@ The following settings also apply, but are not displayed in the QGC UI. | Preemptive geofence triggering | [GF_PREDICT](../advanced_config/parameter_reference.md#GF_PREDICT) | (Experimental) Trigger geofence if current motion of the vehicle is predicted to trigger the breach (rather than late triggering after the breach). | | Circuit breaker for flight termination | [CBRK_FLIGHTTERM](../advanced_config/parameter_reference.md#CBRK_FLIGHTTERM) | 启用/禁用飞行终止操作(默认禁用)。 | -## Position (GNSS) Loss Failsafe +## Position Estimation Failsafes + +This section describes failsafes related to the quality of the vehicle's position estimate. + +### Position Loss Failsafe The _Position Loss Failsafe_ is triggered if the quality of the PX4 position estimate falls below acceptable levels (this might be caused by GPS loss) while in a mode that requires an acceptable position estimate. -The sections below cover first the trigger and then the failsafe action taken by the controller. ### Position Loss Failsafe Trigger -There are basically two mechanisms in PX4 to trigger position failsafes: +The position loss failsafe triggers if the position estimate becomes _invalid_. There are two mechanisms in PX4 to invalidate the position estimate: -- A timeout since the last sensor data was fused that provides direct speed or horizontal position measurements. Sensors that fall into that category are: GNSS, optical flow, airspeed, VIO, auxiliary global position. -- The estimated horizontal position accuracy exceeds a certain threshold. This check is only done on hovering systems (rotary wing vehicles or VTOLs in hover phase). +- A timeout since the last sensor data was fused that provides direct speed or horizontal position measurements. + - Sensors that fall into that category are: GNSS, optical flow, airspeed, VIO, auxiliary global position. +- The estimated horizontal position inaccuracy exceeds the threshold [COM_POS_LOW_EPH](../advanced_config/parameter_reference.md#COM_POS_LOW_EPH) + - This check is only done on hovering systems (rotary-wing vehicles or VTOLs in hover phase). For fixed-wing vehicles, refer to the [Position Accuracy Low](#position-accuracy-low-failsafe) section. The relevant parameters shown below. @@ -207,14 +210,24 @@ Multicopters will switch to [Altitude mode](../flight_modes_mc/altitude.md) if a Fixed-wing planes, and VTOLs not configured to land in hover ([NAV_FORCE_VT](../advanced_config/parameter_reference.md#NAV_FORCE_VT)), have a parameter ([FW_GPSF_LT](../advanced_config/parameter_reference.md#FW_GPSF_LT)) that defines how long they will loiter (circle with a constant roll angle ([FW_GPSF_R](../advanced_config/parameter_reference.md#FW_GPSF_R)) at the current altitude) after losing position before attempting to land. If VTOLs have are configured to switch to hover for landing ([NAV_FORCE_VT](../advanced_config/parameter_reference.md#NAV_FORCE_VT)) then they will first transition and then descend. -The relevant parameters for all vehicles shown below. +The relevant parameters are: -Parameters that only affect Fixed-wing vehicles: +| 参数 | 描述 | +| ----------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [FW_GPSF_LT](../advanced_config/parameter_reference.md#FW_GPSF_LT) | Fixed-wing only: Loiter time (waiting at current altitude for position estimation recovery before starting to descend). 设置为 0 以禁用。 | +| [FW_GPSF_R](../advanced_config/parameter_reference.md#FW_GPSF_R) | 以一定的横滚/侧倾角盘旋。 | +| [NAV_FORCE_VT](../advanced_config/parameter_reference.md#NAV_FORCE_VT) | If true, force VTOL takeoff and landing, even in `Descend` failsafe. | -| 参数 | 描述 | -| ----------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | -| [FW_GPSF_LT](../advanced_config/parameter_reference.md#FW_GPSF_LT) | Loiter time (waiting for GPS recovery before it goes into land or flight termination). 设置为 0 以禁用。 | -| [FW_GPSF_R](../advanced_config/parameter_reference.md#FW_GPSF_R) | 以一定的横滚/侧倾角盘旋。 | +### Position Accuracy Low Failsafe + +In Fixed-wing, the position estimate is never strictly invalidated as long as we have a horizontal aiding source, such as an airspeed sensor. In that case, a separate failsafe can be configured that triggers if the position estimate inacuraccy exceeds the threshold [COM_POS_LOW_EPH](../advanced_config/parameter_reference.md#COM_POS_LOW_EPH). The failsafe action is taken if the vehicle is in mission or hold mode, otherwise it is only a warning. The relevant parameters are: + +| 参数 | 描述 | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | +| [COM_POS_LOW_EPH](../advanced_config/parameter_reference.md#COM_POS_LOW_EPH) | Position inaccuracy threshold above which COM_POS_LOW_ACT is taken. | +| [COM_POS_LOW_ACT](../advanced_config/parameter_reference.md#COM_POS_LOW_ACT) | Failsafe action taken when position inaccuracy is above configured threshold. | + +Note that if there is no horizontal aiding source anymore, the position estimate is invalidated after `EKF2_NOAID_TOUT`, and the standard position loss failsafe applies. ## Offboard 中断故障保护 @@ -238,6 +251,18 @@ The relevant parameters are shown below: | ---------------------------------------------------------------------------------------------------------------------- | ------------------------- | | [NAV_TRAFF_AVOID](../advanced_config/parameter_reference.md#NAV_TRAFF_AVOID) | 设置故障保护动作:禁用、警告、返航模式、降落模式。 | +## Remote ID Failsafe + + + +The Remote ID failsafe is triggered when the [Remote ID (Open Drone ID)](../peripherals/remote_id.md) module is not detected or reports as unhealthy while the vehicle is armed. + +The failsafe action and arming behaviour are both configured by the `COM_ARM_ODID` parameter: + +| 参数 | 描述 | +| ----------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [COM_ARM_ODID](../advanced_config/parameter_reference.md#COM_ARM_ODID) | Remote ID arming check and in-flight failsafe. `0`: Disabled (default), `1`: Warning only, `2`: Error only (prevents arming), `3`: Return, `4`: Land, `5`: Terminate.

On failsafe:
- `Error`, `Return`, `Land` and `Terminate` prevent arming.
- `Return`, `Land` and `Terminate` start the associated action/mode when airborne. | + ## Quad-chute Failsafe Failsafe for when a VTOL vehicle can no longer fly in fixed-wing mode, perhaps due to the failure of a pusher motor, airspeed sensor, or control surface. @@ -261,7 +286,7 @@ The parameters that control when the quad-chute will trigger are listed in the t ## High Wind Failsafe -The high wind failsafe can trigger a warning and/or other mode change when the wind speed exceeds the warning and maximum wind-speed threshhold values. +The high wind failsafe can trigger a warning and/or other mode change when the wind speed exceeds the warning and maximum wind-speed threshold values. The relevant parameters are listed in the table below. | 参数 | 描述 | @@ -285,6 +310,19 @@ Note that this check is _always enabled on takeoff_, irrespective of the `CBRK_F The failure detector is active in all vehicle types and modes, except for those where the vehicle is _expected_ to do flips (i.e. [Acro mode (MC)](../flight_modes_mc/acro.md), [Acro mode (FW)](../flight_modes_fw/acro.md), and [Manual (FW)](../flight_modes_fw/manual.md)). +### Altitude Loss Trigger {#altitude-loss-trigger} + + + +The failure detector can be configured to trigger if a rotary-wing vehicle loses too much altitude below its commanded setpoint while in an altitude-controlled flight mode (such as [Position mode](../flight_modes_mc/position.md) or [Altitude mode](../flight_modes_mc/altitude.md)). + +If the vehicle descends more than [FD_ALT_LOSS](#FD_ALT_LOSS) meters below the setpoint, [flight termination](../advanced_config/flight_termination.md) is triggered, which may deploy a [parachute](../peripherals/parachute.md). + +| 参数 | 描述 | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| [FD_ALT_LOSS](../advanced_config/parameter_reference.md#FD_ALT_LOSS) | Altitude loss threshold (m). Flight termination is triggered when the vehicle drops this far below the setpoint. 设置为 0 以禁用。 | +| [FD_ALT_LOSS_T](../advanced_config/parameter_reference.md#FD_ALT_LOSS_T) | Time (s) the vehicle must remain below the threshold before flight termination is triggered. | + ### 姿态触发器 The failure detector can be configured to trigger if the vehicle attitude exceeds predefined pitch and roll values for longer than a specified time. @@ -301,23 +339,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} +``` -| 参数 | 描述 | -| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [FD_ACT_EN](../advanced_config/parameter_reference.md#FD_ACT_EN) | Enable/disable the motor failure trigger completely. | -| [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. | -| [FD_ACT_MOT_C2T](../advanced_config/parameter_reference.md#FD_ACT_MOT_C2T) | Scale between normalized [0,1] motor command and expected minimally reported currrent when the rotor is healthy. | -| [FD_ACT_MOT_TOUT](../advanced_config/parameter_reference.md#FD_ACT_MOT_TOUT) | Time in miliseconds for which the under current detection condition needs to stay true. | -| [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. | +| 参数 | 描述 | +| ----------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [FD_ACT_EN](../advanced_config/parameter_reference.md#FD_ACT_EN) | Enable/disable the motor failure trigger completely. | +| [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/%). | +| [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. | +| [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. | +| [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. | +| [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) @@ -351,11 +390,7 @@ This section lists the available emergency switches. A kill switch immediately stops all motor outputs — if flying, the vehicle will start to fall! -[By default](#COM_KILL_DISARM) the motors will restart if the switch is reverted within 5 seconds, after which the vehicle will automatically disarm, and you will need to arm it again in order to start the motors. - -| 参数 | 描述 | -| -------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | -| [COM_KILL_DISARM](../advanced_config/parameter_reference.md#COM_KILL_DISARM) | Timeout value for disarming after kill switch is engaged. Default: `5` seconds. | +The motors will restart if the switch is reverted within 5 seconds, after which the vehicle will automatically disarm, and you will need to arm it again in order to start the motors. :::info There is also a [Kill Gesture](#kill-gesture), which cannot be reverted. @@ -397,7 +432,7 @@ A return switch can be used to immediately engage [Return mode](../flight_modes/ A kill gesture immediately stops all motor outputs — if flying, the vehicle will start to fall! -The action cannot be reverted without a reboot (this differs from a [Kill Switch](#kill-switch), where the operation can be reverted within the time period defined by [COM_KILL_DISARM](#COM_KILL_DISARM)). +The action cannot be reverted without a reboot (this differs from a [Kill Switch](#kill-switch), where the operation can be reverted within 5 seconds). | 参数 | 描述 | | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -423,15 +458,15 @@ The [relevant parameters](../advanced_config/parameters.md) are shown below: These parameters can be used to set conditions that prevent arming. -| 参数 | 描述 | -| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [COM_ARMABLE](../advanced_config/parameter_reference.md#COM_ARMABLE) | Enable arming (at all). `0`: Disabled, `1`: Enabled (default). | -| [COM_ARM_BAT_MIN](../advanced_config/parameter_reference.md#COM_ARM_BAT_MIN) | Minimum battery level for arming. `0`: Disabled (default). Values: `0`-`0.9`, | -| [COM_ARM_WO_GPS](../advanced_config/parameter_reference.md#COM_ARM_WO_GPS) | Enable arming without GPS. `0`: Disabled, `1`: Enabled (default). | -| [COM_ARM_MIS_REQ](../advanced_config/parameter_reference.md#COM_ARM_MIS_REQ) | Require valid mission to arm. `0`: Disabled (default), `1`: Enabled . | -| [COM_ARM_SDCARD](../advanced_config/parameter_reference.md#COM_ARM_SDCARD) | Require SD card to arm. `0`: Disabled (default), `1`: Warning, `2`: Enabled. | -| [COM_ARM_AUTH_REQ](../advanced_config/parameter_reference.md#COM_ARM_AUTH_REQ) | Requires arm authorisation from an external (MAVLink) system. Flag to allow arming (at all). `1`: Enabled, `0`: Disabled (default). Associated configuration parameters are prefixed with `COM_ARM_AUTH_`. | -| [COM_ARM_ODID](../advanced_config/parameter_reference.md#COM_ARM_ODID) | Require healthy Remote ID system to arm. `0`: Disabled (default), `1`: Warning, `2`: Enabled. | +| 参数 | 描述 | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [COM_ARMABLE](../advanced_config/parameter_reference.md#COM_ARMABLE) | Enable arming (at all). `0`: Disabled, `1`: Enabled (default). | +| [COM_ARM_BAT_MIN](../advanced_config/parameter_reference.md#COM_ARM_BAT_MIN) | Minimum battery level for arming. `0`: Disabled (default). Values: `0`-`0.9`, | +| [COM_ARM_WO_GPS](../advanced_config/parameter_reference.md#COM_ARM_WO_GPS) | Enable arming without GPS. `0`: Disabled, `1`: Enabled (default). | +| [COM_ARM_MIS_REQ](../advanced_config/parameter_reference.md#COM_ARM_MIS_REQ) | Require valid mission to arm. `0`: Disabled (default), `1`: Enabled . | +| [COM_ARM_SDCARD](../advanced_config/parameter_reference.md#COM_ARM_SDCARD) | Require SD card to arm. `0`: Disabled (default), `1`: Warning, `2`: Enabled. | +| [COM_ARM_AUTH_REQ](../advanced_config/parameter_reference.md#COM_ARM_AUTH_REQ) | Requires arm authorisation from an external (MAVLink) system. Flag to allow arming (at all). `1`: Enabled, `0`: Disabled (default). Associated configuration parameters are prefixed with `COM_ARM_AUTH_`. | +| [COM_ARM_ODID](../advanced_config/parameter_reference.md#COM_ARM_ODID) | Remote ID arming check and in-flight failsafe. `0`: Disabled (default), `1`: Warning only, `2`: Error only, `3`: Return, `4`: Land, `5`: Terminate. See [Remote ID Failsafe](#remote-id-failsafe). | In addition there are a number of parameters that configure system and sensor limits that make prevent arming if exceeded: [COM_CPU_MAX](../advanced_config/parameter_reference.md#COM_CPU_MAX), [COM_ARM_IMU_ACC](../advanced_config/parameter_reference.md#COM_ARM_IMU_ACC), [COM_ARM_IMU_GYR](../advanced_config/parameter_reference.md#COM_ARM_IMU_GYR), [COM_ARM_MAG_ANG](../advanced_config/parameter_reference.md#COM_ARM_MAG_ANG), [COM_ARM_MAG_STR](../advanced_config/parameter_reference.md#COM_ARM_MAG_STR). diff --git a/docs/zh/config_mc/filter_tuning.md b/docs/zh/config_mc/filter_tuning.md index 0b9796bb23..498eda4e47 100644 --- a/docs/zh/config_mc/filter_tuning.md +++ b/docs/zh/config_mc/filter_tuning.md @@ -72,17 +72,17 @@ The ESC RPM feedback is used to track the rotor blade pass frequency and its har ESC RPM feedback requires ESCs capable of providing RPM feedback such as [DShot](../peripherals/dshot.md) with telemetry connected, a bidirectional DShot set up ([work in progress](https://github.com/PX4/PX4-Autopilot/pull/23863)), or [UAVCAN/DroneCAN ESCs](../dronecan/escs.md). Before enabling, make sure that the ESC RPM is correct. -You might have to adjust the [pole count of the motors](../advanced_config/parameter_reference.md#MOT_POLE_COUNT). +You might have to adjust the per-motor pole count (`DSHOT_MOT_POL1`–`DSHOT_MOT_POL12`). The following parameters should be set to enable and configure dynamic notch filters: -| 参数 | 描述 | -| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | -| [IMU_GYRO_DNF_EN](../advanced_config/parameter_reference.md#IMU_GYRO_DNF_EN) | Enable IMU gyro dynamic notch filtering. `0`: ESC RPM, `1`: Onboard FFT. | -| [IMU_GYRO_FFT_EN](../advanced_config/parameter_reference.md#IMU_GYRO_FFT_EN) | Enable onboard FFT (required if `IMU_GYRO_DNF_EN` is set to `1`). | -| [IMU_GYRO_DNF_MIN](../advanced_config/parameter_reference.md#IMU_GYRO_DNF_MIN) | Minimum dynamic notch frequency in Hz. | -| [IMU_GYRO_DNF_BW](../advanced_config/parameter_reference.md#IMU_GYRO_DNF_BW) | Bandwidth for each notch filter in Hz. | -| [IMU_GYRO_DNF_HMC](../advanced_config/parameter_reference.md#IMU_GYRO_NF0_BW) | Number of harmonics to filter. | +| 参数 | 描述 | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | +| [IMU_GYRO_DNF_EN](../advanced_config/parameter_reference.md#IMU_GYRO_DNF_EN) | Enable IMU gyro dynamic notch filtering. `0`: ESC RPM, `1`: Onboard FFT. | +| [IMU_GYRO_FFT_EN](../advanced_config/parameter_reference.md#IMU_GYRO_FFT_EN) | Enable onboard FFT (required if `IMU_GYRO_DNF_EN` is set to `1`). | +| [IMU_GYRO_DNF_MIN](../advanced_config/parameter_reference.md#IMU_GYRO_DNF_MIN) | Minimum dynamic notch frequency in Hz. | +| [IMU_GYRO_DNF_BW](../advanced_config/parameter_reference.md#IMU_GYRO_DNF_BW) | Bandwidth for each notch filter in Hz. | +| [IMU_GYRO_DNF_HMC](../advanced_config/parameter_reference.md#IMU_GYRO_NF0_BW) | Number of harmonics to filter. | ### Low-pass Filter diff --git a/docs/zh/config_mc/pid_tuning_guide_multicopter.md b/docs/zh/config_mc/pid_tuning_guide_multicopter.md index 2a061a75dc..c4a0b7a251 100644 --- a/docs/zh/config_mc/pid_tuning_guide_multicopter.md +++ b/docs/zh/config_mc/pid_tuning_guide_multicopter.md @@ -65,7 +65,7 @@ The derivative term (**D**) is on the feedback path in order to avoid an effect 有关详细信息,请参阅︰ - [Not all PID controllers are the same](https://www.controleng.com/not-all-pid-controllers-are-the-same/) (www.controleng.com) -- [PID controller > Standard versus parallel (ideal) PID form](https://en.wikipedia.org/wiki/PID_controller#Standard_versus_parallel_\(ideal\)_form) (Wikipedia) +- [PID controller > Standard versus parallel (ideal) PID form](https://en.wikipedia.org/wiki/PID_controller#Standard_versus_parallel_(ideal)_form) (Wikipedia) ::: diff --git a/docs/zh/config_mc/pid_tuning_guide_multicopter_basic.md b/docs/zh/config_mc/pid_tuning_guide_multicopter_basic.md index 456c34a6b0..e82f96516c 100644 --- a/docs/zh/config_mc/pid_tuning_guide_multicopter_basic.md +++ b/docs/zh/config_mc/pid_tuning_guide_multicopter_basic.md @@ -13,7 +13,7 @@ For example, different ESCs or motors change the optimal tuning gains. ## 简介 -PX4 uses **P**roportional, **I**ntegral, **D**erivative (PID) controllers (these are the most widespread control technique). +PX4 uses **P**roportional, **I**integral, **D**erivative (PID) controllers (these are the most widespread control technique). The _QGroundControl_ **PID Tuning** setup provides real-time plots of the vehicle setpoint and response curves. The goal of tuning is to set the P/I/D values such that the _Response_ curve matches the _Setpoint_ curve as closely as possible (i.e. a fast response without overshoots). diff --git a/docs/zh/config_rover/attitude_tuning.md b/docs/zh/config_rover/attitude_tuning.md index eed4399823..7d73d2d5cf 100644 --- a/docs/zh/config_rover/attitude_tuning.md +++ b/docs/zh/config_rover/attitude_tuning.md @@ -16,7 +16,7 @@ Configure the following [parameters](../advanced_config/parameters.md) in QGroun Put the rover into stabilized mode and move the left stick of your controller up to drive forwards. Disarm the rover and from the flight log plot the `measured_yaw` and the `adjusted_yaw_setpoint` from the [RoverAttitudeStatus](../msg_docs/RoverAttitudeStatus.md) message over each other. Increase/Decrease the parameter until you are satisfied with the setpoint tracking. - If you observe a steady state error in the yaw setpoint increase the the integrator of the rate controller: [RO_YAW_RATE_I](../advanced_config/parameter_reference.md#RO_YAW_RATE_I) . + If you observe a steady state error in the yaw setpoint increase the integrator of the rate controller: [RO_YAW_RATE_I](../advanced_config/parameter_reference.md#RO_YAW_RATE_I) . ::: @@ -30,7 +30,7 @@ The attitude controller uses the following structure: ![Rover Attitude Controller](../../assets/config/rover/rover_attitude_controller.png) -The rate and attitude controllers are cascaded, therefor we only require one integrator in the structure to eliminate steady state errors. +The rate and attitude controllers are cascaded, therefore we only require one integrator in the structure to eliminate steady state errors. We placed the integrator in the rate controller since it can run without the attitude controller but not the other way around. ## Parameter Overview diff --git a/docs/zh/config_rover/basic_setup.md b/docs/zh/config_rover/basic_setup.md index 02a05b138a..810b031025 100644 --- a/docs/zh/config_rover/basic_setup.md +++ b/docs/zh/config_rover/basic_setup.md @@ -138,7 +138,7 @@ In [Manual mode](../flight_modes_rover/manual.md#manual-mode) we can additionall - Differential Rover: $r=$ [RD_YAW_STK_GAIN](#RD_YAW_STK_GAIN), which enables adjusting the slope of the input mapping. This leads to a normalized steering input $\hat{\delta} = \delta \cdot r \in$ [-[RD_YAW_STK_GAIN](#RD_YAW_STK_GAIN), [RD_YAW_STK_GAIN](#RD_YAW_STK_GAIN)]. - Mecanum Rover: $r=$ [RM_YAW_STK_GAIN](#RM_YAW_STK_GAIN), which enables adjusting the slope of the input mapping. This leads to a normalized steering input $\hat{\delta} = \delta \cdot r \in$ [-[RM_YAW_STK_GAIN](#RM_YAW_STK_GAIN), [RM_YAW_STK_GAIN](#RM_YAW_STK_GAIN)]. -This scaling is useful to limit the normalized steering setpoint, if it is too aggresive for your rover in manual mode. +This scaling is useful to limit the normalized steering setpoint, if it is too aggressive for your rover in manual mode. You can experiment with the relationships graphically using the [PX4 SuperExpo Rover calculator](https://www.desmos.com/calculator/gwm8lrlanx). diff --git a/docs/zh/config_rover/index.md b/docs/zh/config_rover/index.md index b6b955f786..62b4d17b4e 100644 --- a/docs/zh/config_rover/index.md +++ b/docs/zh/config_rover/index.md @@ -39,7 +39,7 @@ make px4_fmu-v6x_rover Note that configuration targets are constructed with the format "VENDOR_MODEL_VARIANT". -The built firmware can be installed as custom firmware, as shown above in in [Flashing the Rover Build](#flashing-the-rover-build). +The built firmware can be installed as custom firmware, as shown above in [Flashing the Rover Build](#flashing-the-rover-build). :::info You can also enable the modules in default builds by adding these lines to your [board configuration](../hardware/porting_guide_config.md) (e.g. for fmu-v6x you might add them to [`main/boards/px4/fmu-v6x/default.px4board`](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/fmu-v6x/default.px4board)): diff --git a/docs/zh/config_rover/rate_tuning.md b/docs/zh/config_rover/rate_tuning.md index 6544ffec8a..93449e0020 100644 --- a/docs/zh/config_rover/rate_tuning.md +++ b/docs/zh/config_rover/rate_tuning.md @@ -11,7 +11,7 @@ Configure the following [parameters](../advanced_config/parameters.md) in QGroun 1. [RO_YAW_RATE_LIM](#RO_YAW_RATE_LIM): Maximum yaw rate you want to allow for your rover. :::tip - Limiting the yaw rate is necessary if the rover is prone rolling over, loosing traction at high speeds or if passenger comfort is important. + Limiting the yaw rate is necessary if the rover is prone rolling over, losing traction at high speeds or if passenger comfort is important. Small rovers especially can be prone to rolling over when steering aggressively at high speeds. If this is the case: diff --git a/docs/zh/config_rover/velocity_tuning.md b/docs/zh/config_rover/velocity_tuning.md index 5796839ca3..d17f8b1004 100644 --- a/docs/zh/config_rover/velocity_tuning.md +++ b/docs/zh/config_rover/velocity_tuning.md @@ -60,7 +60,7 @@ To tune the velocity controller configure the following [parameters](../advanced ## Manual Position Mode Parameters -These steps are only necessary if you are tuning/want to unlock the manual [Position mode](../flight_modes_rover/manual.md#position-mode). Othwerwise, you can continue with [position tuning](position_tuning.md) where these same parameters will also be configured. +These steps are only necessary if you are tuning/want to unlock the manual [Position mode](../flight_modes_rover/manual.md#position-mode). Otherwise, you can continue with [position tuning](position_tuning.md) where these same parameters will also be configured. 1. [PP_LOOKAHD_GAIN](#PP_LOOKAHD_GAIN): When driving in a straight line (right stick centered) position mode leverages the same path following algorithm used in [auto modes](../flight_modes_rover/auto.md) called [pure pursuit](position_tuning.md#pure-pursuit-guidance-logic-info-only) to achieve the best possible straight line driving behaviour. This parameter determines how aggressive the controller will steer towards the path. @@ -109,7 +109,7 @@ The speed controller uses the following structure: The feed forward mapping is done by interpolating the speed setpoint from [-[RO_MAX_THR_SPEED](../advanced_config/parameter_reference.md#RO_MAX_THR_SPEED), [RO_MAX_THR_SPEED](../advanced_config/parameter_reference.md#RO_MAX_THR_SPEED)] to [-1, 1]. -For ackermann and differential rovers the bearing is aligned with the vehicle yaw. Therefor the bearing is simply sent as a yaw setpoint to the [yaw controller](attitude_tuning.md#attitude-controller-structure-info-only) and the speed setpoint is always defined in body x direction. +For ackermann and differential rovers the bearing is aligned with the vehicle yaw. Therefore the bearing is simply sent as a yaw setpoint to the [yaw controller](attitude_tuning.md#attitude-controller-structure-info-only) and the speed setpoint is always defined in body x direction. For mecanum vehicles, the bearing and yaw are decoupled. The direction is controlled by splitting the velocity vector into one speed component in body x direction and one in body y direction. Both these setpoint are then sent to their own closed loop speed controllers. diff --git a/docs/zh/config_vtol/vtol_ice_shedding.md b/docs/zh/config_vtol/vtol_ice_shedding.md index 6884211c7b..eda4a770f5 100644 --- a/docs/zh/config_vtol/vtol_ice_shedding.md +++ b/docs/zh/config_vtol/vtol_ice_shedding.md @@ -6,7 +6,7 @@ Ice shedding is a feature that periodically spins unused motors in fixed-wing flight, to break off any ice that is starting to build up in the motors while it is still feasible to do so. -It is configured by the paramter `CA_ICE_PERIOD`. When it is 0, the feature is +It is configured by the parameter `CA_ICE_PERIOD`. When it is 0, the feature is disabled, when it is above 0, it sets the duration of the ice shedding cycle in seconds. In each cycle, the rotors are spun for two seconds at a motor output of 0.01. diff --git a/docs/zh/config_vtol/vtol_quad_configuration.md b/docs/zh/config_vtol/vtol_quad_configuration.md index ecb9ce0df1..fd765a7dc7 100644 --- a/docs/zh/config_vtol/vtol_quad_configuration.md +++ b/docs/zh/config_vtol/vtol_quad_configuration.md @@ -95,7 +95,7 @@ It should be set to a value which ensures that the vehicle reaches a high enough [VT_TRANS_TIMEOUT](../advanced_config/parameter_reference.md#VT_TRANS_TIMEOUT) This specifies the upper limit for the duration of the front transition. If the vehicle has not reached the transition airspeed after this time, then the transition will be aborted and a [Quadchute](../config/safety.md#quad-chute-failsafe) event will be triggered. -:::note +::: info Additionally, if an airspeed sensor is present, the transition will also be aborted if the airspeed has not reached [VT_ARSP_BLEND](../advanced_config/parameter_reference.md#VT_ARSP_BLEND) after the openloop transition time [VT_F_TR_OL_TM](../advanced_config/parameter_reference.md#VT_F_TR_OL_TM) has elapsed. This checks is used to avoid a scenario where the vehicle gains excessive speed when the airspeed sensor is faulty. ::: diff --git a/docs/zh/contribute/code.md b/docs/zh/contribute/code.md index 793a629099..b3e8c253ac 100644 --- a/docs/zh/contribute/code.md +++ b/docs/zh/contribute/code.md @@ -151,36 +151,35 @@ else { ## Commits and Commit Messages -Use descriptive, multi-paragraph commit messages for all non-trivial changes. -Structure them well so they make sense in the one-line summary but also provide full detail. +PX4 uses [conventional commits](https://www.conventionalcommits.org/) for all commit messages and PR titles. -```plain -Component: Explain the change in one sentence. Fixes #1234 +### Format -Prepend the software component to the start of the summary -line, either by the module name or a description of it. -(e.g. "mc_att_ctrl" or "multicopter attitude controller"). - -If the issue number is appended as , Github -will automatically close the issue when the commit is -merged to the master branch. - -The body of the message can contain several paragraphs. -Describe in detail what you changed. Link issues and flight -logs either related to this fix or to the testing results -of this commit. - -Describe the change and why you changed it, avoid to -paraphrase the code change (Good: "Adds an additional -safety check for vehicles with low quality GPS reception". -Bad: "Add gps_reception_check() function"). - -Reported-by: Name +``` +type(scope): short description of the change ``` -**Use **`git commit -s`** to sign off on all of your commits.** This will add `signed-off-by:` with your name and email as the last line. +Where **type** is the category of change (`feat`, `fix`, `docs`, `refactor`, `perf`, `test`, `build`, `ci`, `style`, `chore`, `revert`) and **scope** is the module or area affected (e.g. `ekf2`, `mavlink`, `navigator`). See the full [types and scopes tables](https://github.com/PX4/PX4-Autopilot/blob/main/CONTRIBUTING.md#commit-message-convention) in CONTRIBUTING.md. -This commit guide is based on best practices for the Linux Kernel and other [projects maintained](https://github.com/torvalds/subsurface-for-dirk/blob/a48494d2fbed58c751e9b7e8fbff88582f9b2d02/README#L88-L115) by Linus Torvalds. +Append `!` before the colon to mark a breaking change: `feat(ekf2)!: remove deprecated API`. + +### 示例 + +``` +feat(ekf2): add height fusion timeout. Fixes #1234 + +The previous implementation did not handle the case where +height fusion data stops arriving mid-flight. This adds a +configurable timeout that falls back to barometric height. + +Tested in SITL with simulated sensor dropout. + +Signed-off-by: Your Name +``` + +The body of the message can contain several paragraphs. Describe in detail what you changed and why. Link related issues and flight logs. Describe the change and why you made it, rather than paraphrasing the code change. + +**Use `git commit -s` to sign off on all of your commits.** This adds `Signed-off-by:` with your name and email as the last line. ## Pull Requests diff --git a/docs/zh/contribute/dev_call.md b/docs/zh/contribute/dev_call.md index 3ca4e383d4..327da2784b 100644 --- a/docs/zh/contribute/dev_call.md +++ b/docs/zh/contribute/dev_call.md @@ -7,7 +7,7 @@ const { site } = useData();
-

This page may be out out of date. See the latest version.

+

This page may be out of date. See the latest version.

@@ -15,8 +15,8 @@ The PX4 dev team and community come together to discuss any topic of interest to ## Who should attend? -- 核心项目维护者 -- 组件维护者 +- Code Owners +- Reviewers - 测试团队负责人 - 无人机编码成员 - Community members (you!) @@ -36,4 +36,4 @@ Please add your topics for discussion to the agenda before the meeting begins, b ## 日程 - TIME: Wednesday 17h00 CET ([subscribe to calendar](https://dronecode.org/calendar/)) -- **Join the call**: [https://discord.gg/BDYmr6FA6Q](https://discord.gg/BDYmr6FA6Q) +- **Join the call**: [https://discord.com/invite/BDYmr6FA6Q](https://discord.com/invite/BDYmr6FA6Q) diff --git a/docs/zh/contribute/docs.md b/docs/zh/contribute/docs.md index 91805dff44..8bab79386a 100644 --- a/docs/zh/contribute/docs.md +++ b/docs/zh/contribute/docs.md @@ -55,7 +55,7 @@ If you already have a clone of the [PX4-Autopilot](https://github.com/PX4/PX4-Au 指南使用 旧版Gitbook 工具链 The instructions below explain how to get git and use it on your local computer. -1. Download git for your computer from [https://git-scm.com/downloads](https://git-scm.com/downloads) +1. Download git for your computer from [https://git-scm.com/downloads/](https://git-scm.com/downloads/) 2. [Sign up](https://github.com/signup) for Github if you haven't already @@ -83,10 +83,10 @@ The instructions below explain how to get git and use it on your local computer. 6. Add a _remote_ called "upstream" to point to the "official" PX4 version of the library: ```sh - git remote add upstream https://github.com/PX4/PX4-Autopilot.git + git remote add upstream https://github.com/PX4/PX4-Autopilot ``` - :::tip + ::: tip A "remote" is a handle to a particular repository. The remote named _origin_ is created by default when you clone the repository, and points to _your fork_ of the guide. Above you create a new remote _upstream_ that points to the PX4 project version of the documents. @@ -166,7 +166,9 @@ Within the repository you created above: yarn install ``` -4. Preview and serve the library: +4. (Optional) [Build the docs for PX4 metadata](#building-px4-docs-metadata) if your source contains changes to parameter or module docs that you want to check. + +5. Preview and serve the library: ```sh yarn start @@ -176,7 +178,7 @@ Within the repository you created above: This will be something like: `http://localhost:5173/px4_user_guide/`. - Stop serving using **CTRL+C** in the terminal prompt. -5. Open previewed pages in your local editor: +6. Open previewed pages in your local editor: First specify a local text editor file using the `EDITOR` environment variable, before calling `yarn start` to preview the library. For example, you can enable VSCode as your default editor by entering: @@ -195,7 +197,7 @@ Within the repository you created above: The **Open in your editor** link at the bottom of each page will then open the current page in the editor (this replaces the _Open in GitHub_ link). -6. You can build the library as it would be done for deployment: +7. You can build the library as it would be done for deployment: ```sh # Ubuntu @@ -210,6 +212,32 @@ Use `yarn start` to preview changes _as you make them_ (documents are updated an Before submitting a PR you should also build it using `yarn docs:build`, as this can highlight issues that are not visible when using `yarn start`. ::: +#### Building PX4 docs metadata + +PX4 Metadata is not automatically updated in the local docs tree when you make changes to source. +This can result in broken links showing up during testing if you link to new parameters, modules, airframes, or other content that is generated from source. + +You can generate the metadata and copy it into the tree on _Ubuntu_ (only) using the convenient yarn command: + +```sh +# Ubuntu +yarn build_docs_metadata_ubuntu +``` + +:::info +The generated metadata docs should not be included in PRs as they will complicate reveiwing (metadata is automatically generated when a PR merges in main). +It is not a problem if you do add such metadata, as it will be swamped on merge. +::: + +#### Check for broken links + +You can use the following command to check for broken links in the whole document: + +```sh +# Ubuntu +yarn linkcheck +``` + ### Source Code Structure The guide uses the [Vitepress](https://vitepress.dev/) toolchain. @@ -241,7 +269,7 @@ In overview: - Images must be stored in a sub folder of `/assets`. This is two folders down from content folders, so if you add an image you will reference it like: - ```plain + ```txt ![Image Description](../../assets/path_to_file/filename.jpg) ``` diff --git a/docs/zh/contribute/git_examples.md b/docs/zh/contribute/git_examples.md index 328d3e11c1..c0e13539fa 100644 --- a/docs/zh/contribute/git_examples.md +++ b/docs/zh/contribute/git_examples.md @@ -22,7 +22,7 @@ Adding a feature to PX4 follows a defined workflow. In order to share your contr ```sh cd PX4-Autopilot git submodule update --init --recursive - git remote add upstream https://github.com/PX4/PX4-Autopilot.git + git remote add upstream https://github.com/PX4/PX4-Autopilot ``` - You should have now two remote repositories: One repository is called `upstream` that points to PX4/PX4-Autopilot, and one repository `origin` that points to your forked copy of the PX4 repository. @@ -54,12 +54,12 @@ Adding a feature to PX4 follows a defined workflow. In order to share your contr - 提交添加的文件, 并顺便记录一条有意义的消息, 解释您的更改 ```sh - git commit -m "" + git commit -s -m "feat(ekf2): add height fusion timeout" ``` - For a good commit message, please refer to the [Source Code Management](../contribute/code.md#commits-and-commit-messages) section. + Use [conventional commits](https://www.conventionalcommits.org/) format: `type(scope): description`. For details on types and scopes, see the [Source Code Management](../contribute/code.md#commits-and-commit-messages) section. -- Some time might have passed and the [upstream main](https://github.com/PX4/PX4-Autopilot.git) has changed. +- Some time might have passed and the [upstream main](https://github.com/PX4/PX4-Autopilot) has changed. PX4 prefers a linear commit history and uses [git rebase](https://git-scm.com/book/en/v2/Git-Branching-Rebasing). To include the newest changes from upstream in your local branch, switch to your main branch @@ -139,7 +139,7 @@ To get the source code for a _specific older release_ (tag): 1. Clone the PX4-Autopilot repo and navigate into _PX4-Autopilot_ directory: ```sh - git clone https://github.com/PX4/PX4-Autopilot.git + git clone https://github.com/PX4/PX4-Autopilot cd PX4-Autopilot ``` @@ -179,7 +179,7 @@ To get a release branch: - Clone the PX4-Autopilot repo and navigate into _PX4-Autopilot_ directory: ```sh - git clone https://github.com/PX4/PX4-Autopilot.git + git clone https://github.com/PX4/PX4-Autopilot cd PX4-Autopilot ``` diff --git a/docs/zh/contribute/index.md b/docs/zh/contribute/index.md index adf08e6a79..95acab11fe 100644 --- a/docs/zh/contribute/index.md +++ b/docs/zh/contribute/index.md @@ -7,7 +7,7 @@ const { site } = useData();
-

This page may be out out of date. See the latest version.

+

This page may be out of date. See the latest version.

@@ -20,7 +20,7 @@ We pledge to adhere to the [PX4 code of conduct](https://github.com/PX4/PX4-Auto This section contains information about how you can meet with the community and contribute to PX4: - [Dev Call](../contribute/dev_call.md) - Discuss architecture, pull requests, impacting issues with the dev team -- [Maintainers](./maintainers.md) - Maintainers of PX4 Subsystems and Ecosystem +- [Maintainers](./maintainers.md) - Maintainer roles, types, and how to become one - [Support](../contribute/support.md) - Get help and raise issues - [Source Code Management](../contribute/code.md) - Work with PX4 code - [Documentation](../contribute/docs.md) - Improve the docs diff --git a/docs/zh/contribute/maintainers.md b/docs/zh/contribute/maintainers.md index 1ead3d2489..e9f42bd01e 100644 --- a/docs/zh/contribute/maintainers.md +++ b/docs/zh/contribute/maintainers.md @@ -1,57 +1,86 @@ # Maintainer Role -Dronecode maintainers have technical leadership and responsibility for specific areas of PX4, and for other ecosystem components such as MAVLink, MAVSDK, QGroundControl, and others. +Dronecode maintainers provide technical leadership for PX4 and for other ecosystem components such as MAVLink, MAVSDK, QGroundControl, and others. Some maintainers take responsibility for specific areas of the project, while others help across the project more broadly. The maintainer role is defined by the community with help and supervision from the [Dronecode Foundation](https://dronecode.org/). -To find the most up-to-date maintainers list, visit [PX4-Autopilot README](https://github.com/PX4/PX4-Autopilot#maintenance-team). +To find the most up-to-date maintainers list, see [`MAINTAINERS.md`](https://github.com/PX4/PX4-Autopilot/blob/main/MAINTAINERS.md) in the PX4-Autopilot repository. + +## Maintainer Types + +PX4 recognizes two types of maintainers. Both are full members of the maintainer team, have write access via the [`Dev Team`](https://github.com/orgs/PX4/teams/dev-team) GitHub team, and participate in maintainer decisions. + +- **Code Owners** are responsible for a specific category of the project (for example, State Estimation, Multirotor, or CI). They have final say on changes to their area, are the primary reviewers for that code, and help shape its roadmap. This is the role described in detail below. +- **Reviewers** help maintain PX4 across the project without ownership of a specific category. They review, triage, and contribute wherever their interests and time allow. Reviewers have the same access and voting rights as Code Owners, but no on-call responsibility for any specific area of the codebase. + +The Reviewer role is a good fit for contributors who want to help steward the project without committing to a specific component up front. A Reviewer may later become a Code Owner for a category by mutual agreement with the existing Code Owners of that category and sign-off from the maintainer team. ## Recruitment Process If you would like to join the PX4 maintainers team or if you want to nominate someone else follow the steps below: 1. Read the [role description](#dronecode-maintainer-role-description), and make sure you understand the responsibilities of the role. -2. To nominate yourself, reach out to one of the maintainers (see the complete list in the [PX4-Autopilot README](https://github.com/PX4/PX4-Autopilot#maintenance-team)), and seek their sponsorship. -3. Express your interest in becoming a maintainer, and specify which area you would like to maintain. +2. To nominate yourself, reach out to one of the maintainers (see the complete list in [`MAINTAINERS.md`](https://github.com/PX4/PX4-Autopilot/blob/main/MAINTAINERS.md)), and seek their sponsorship. +3. Express your interest in becoming a maintainer, and specify whether you are applying as a **Code Owner** (for a specific category) or as a **Reviewer** (helping across the project without a fixed category). 4. The sponsoring maintainer needs to bring this up for discussion in one of the [weekly developer calls](dev_call.md). The maintainer team will vote on the call to determine whether to accept you as a maintainer. +A Reviewer may later transition to a Code Owner role for a specific category. This requires agreement from the existing Code Owners of that category and sign-off from the maintainer team, following the same discussion and vote on the weekly developer call. + +### Adding a new maintainer + +Once the maintainer team has agreed to add a new maintainer, the change is landed via a pull request to [`MAINTAINERS.md`](https://github.com/PX4/PX4-Autopilot/blob/main/MAINTAINERS.md). The process is intentionally simple: + +1. A current maintainer opens a PR adding the new maintainer to the appropriate table (**Code Owners** with a category, or **Reviewers**). +2. The PR must be approved by at least one other current maintainer. +3. If the new maintainer is being added as a Code Owner or sub-owner of a specific component, the existing Code Owner of that component must be among the approvers. + +Once the PR is merged, the new maintainer proceeds through the [Onboarding Process](#onboarding-process) below. + ## Onboarding Process Once accepted every maintainers will go through the following process: 1. **Discord** server admin will grant you the `dev team` role, which gives you: 1. Basic admin privileges on discord. - 2. Access to the `#maintainers` channel. + 2. Access to the private `#maintainers` channel for internal maintainer discussion. 2. You will be given access to the GitHub team: "[`Dev Team`](https://github.com/orgs/PX4/teams/dev-team)" which grants you: 1. Permission to merge the PR of any of PX4 workspace repositories after it's approved 2. Permission to trigger GitHub actions when a new contributor opens a PR. 3. Permission to edit Issue/PR contents. 3. **Add your info to official PX4 channels**: - 1. Include your information on the PX4 [README](https://github.com/PX4/PX4-Autopilot/blob/main/README.md) next to the rest of the team - 2. Listed on the [Maintainers section](https://px4.io/community/maintainers/) of the PX4 website. - 3. Add your information to the internal Dronecode database of maintainers to keep you in sync. - 4. Community introduction to the new maintainer in the form of a forum post, which is promoted through ever growing official channels + 1. Add your information to the internal Dronecode database of maintainers to keep you in sync. + 2. Community introduction to the new maintainer in the form of a forum post, which is promoted through ever growing official channels ## Dronecode Maintainer Role Description +The responsibilities and qualifications below describe the **Code Owner** role in detail. **Reviewers** share the same spirit of technical stewardship, community guidance, and participation in maintainer meetings, without being tied to a specific category. Reviewers are expected to review and triage across the project where their expertise and interest apply. + ### 概要 Maintainers lead/manage the development of a **specific category (referred to as category below)** of any Open Source Projects hosted within the Dronecode Foundation, such as the PX4 Autopilot. -### Responsibilities +### Responsibilities (Code Owner) 1. Take charge of overseeing the development in their category. 2. Provide guidance/advice on community members in their category. 3. Review relevant pull requests and issues from the community on GitHub. 4. Coordinate with the maintainer group. -5. Keep regular attendance on [weekly meetings ](dev_call.md). +5. Keep regular attendance on [weekly meetings](dev_call.md). 6. Help create and maintain a roadmap for the project your represent. 7. Uphold the [Code of Conduct](https://github.com/Dronecode/foundation/blob/main/CODE-OF-CONDUCT.md) of our community. +### Responsibilities (Reviewer) + +1. Review relevant pull requests and issues across the project where your expertise applies. +2. Help triage issues and guide community contributors. +3. Coordinate with the maintainer group. +4. Keep regular attendance on [weekly meetings](dev_call.md). +5. Uphold the [Code of Conduct](https://github.com/Dronecode/foundation/blob/main/CODE-OF-CONDUCT.md) of our community. + ### Qualifications 1. Proven track record of valuable contributions. -2. Domain expertise in the category field. +2. Domain expertise in the category field (for Code Owners) or broad working knowledge of the project (for Reviewers). 3. Good overview of the project you are applying to. 4. You need to manage approval from your employer when relevant. diff --git a/docs/zh/contribute/sbom.md b/docs/zh/contribute/sbom.md new file mode 100644 index 0000000000..398da2d3d5 --- /dev/null +++ b/docs/zh/contribute/sbom.md @@ -0,0 +1,226 @@ +# Software Bill of Materials (SBOM) + +PX4 generates a [Software Bill of Materials](https://ntia.gov/SBOM) for every firmware build in [SPDX 2.3](https://spdx.github.io/spdx-spec/v2.3/) JSON format. + +## Why SBOM? + +- **Regulatory compliance**: The EU Cyber Resilience Act (CRA) requires SBOMs for products with digital elements (reporting obligations begin in September 2026). +- **Supply chain transparency**: SBOMs enumerate every component compiled into firmware, enabling users and integrators to audit dependencies. +- **NTIA minimum elements**: Each SBOM satisfies all seven [NTIA required fields](https://www.ntia.gov/report/2021/minimum-elements-software-bill-materials-sbom): supplier, component name, version, unique identifier, dependency relationship, author, and timestamp. + +## Format + +PX4 uses SPDX 2.3 JSON. +SPDX is the Linux Foundation's own standard (ISO/IEC 5962), aligning with PX4's position as a Dronecode/LF project. +Zephyr RTOS also uses SPDX. + +Each SBOM contains: + +- **Primary package**: The PX4 firmware for a specific board target, marked with `primaryPackagePurpose: FIRMWARE`. +- **Git submodules**: All third-party libraries included via git submodules (~33 packages), with SPDX license identifiers and commit hashes. +- **Python build dependencies**: Packages from `Tools/setup/requirements.txt` marked as `BUILD_DEPENDENCY_OF` the firmware. +- **Board-specific modules**: Internal PX4 modules compiled for the target board. +- **Compiler**: The C compiler used for the build. + +Typical SBOM size: 70-100 packages, ~500 lines, ~20 KB JSON. + +## Generation + +SBOMs are generated automatically as part of every CMake build. +The output file is: + +```txt +build//.sbom.spdx.json +``` + +例如: + +```txt +build/px4_fmu-v6x_default/px4_fmu-v6x_default.sbom.spdx.json +``` + +The generator script is `Tools/ci/generate_sbom.py`. +It requires PyYAML (`pyyaml`) for loading license overrides. + +### CMake Integration + +The `sbom` CMake target is included in the default `ALL` target. +The relevant CMake module is `cmake/sbom.cmake`. + +### Disabling SBOM Generation + +Set the environment variable before building. +This is checked at CMake configure time, so a clean build or reconfigure is required: + +```sh +PX4_SBOM_DISABLE=1 make px4_fmu-v6x_default +``` + +If the build directory already exists, force a reconfigure: + +```sh +PX4_SBOM_DISABLE=1 cmake -B build/px4_fmu-v6x_default . +``` + +### Manual Generation + +You can also run the generator directly: + +```sh +python3 Tools/ci/generate_sbom.py \ + --source-dir . \ + --board px4_fmu-v6x_default \ + --modules-file build/px4_fmu-v6x_default/config_module_list.txt \ + --compiler arm-none-eabi-gcc \ + --output build/px4_fmu-v6x_default/px4_fmu-v6x_default.sbom.spdx.json +``` + +## Artifacts + +SBOMs are available in: + +| Location | Path | +| --------------- | ---------------------------------------- | +| Build directory | `build//.sbom.spdx.json` | +| GitHub Releases | Alongside `.px4` firmware files | +| S3 | Same directory as firmware artifacts | + +## Validation + +Validate an SBOM against the SPDX JSON schema: + +```sh +python3 -c " +import json +doc = json.load(open('build/px4_sitl_default/px4_sitl_default.sbom.spdx.json')) +assert doc['spdxVersion'] == 'SPDX-2.3' +assert doc['dataLicense'] == 'CC0-1.0' +assert len(doc['packages']) > 0 +print(f'Valid: {len(doc[\"packages\"])} packages') +" +``` + +For full schema validation, use the [SPDX online validator](https://tools.spdx.org/app/validate/) or the `spdx-tools` CLI. + +## License Detection + +Submodule licenses are identified through a combination of auto-detection and manual overrides. + +### Auto-Detection + +The generator reads the first 100 lines of each submodule's LICENSE or COPYING file +and matches keywords against known patterns. +Copyleft licenses (GPL, LGPL, AGPL) are checked before permissive ones +to prevent false positives. + +Supported patterns include: + +| SPDX Identifier | Matched Keywords | +| ----------------------------- | ------------------------------------------------------------------ | +| GPL-3.0-only | "GNU GENERAL PUBLIC LICENSE", "Version 3" | +| GPL-2.0-only | "GNU GENERAL PUBLIC LICENSE", "Version 2" | +| LGPL-3.0-only | "GNU LESSER GENERAL PUBLIC LICENSE", "Version 3" | +| LGPL-2.1-only | "GNU Lesser General Public License", "Version 2.1" | +| AGPL-3.0-only | "GNU AFFERO GENERAL PUBLIC LICENSE", "Version 3" | +| Apache-2.0 | "Apache License", "Version 2.0" | +| MIT | "Permission is hereby granted" | +| BSD-3-Clause | "Redistribution and use", "Neither the name" | +| BSD-2-Clause | "Redistribution and use", "THIS SOFTWARE IS PROVIDED" | +| ISC | "Permission to use, copy, modify, and/or distribute" | +| EPL-2.0 | "Eclipse Public License", "2.0" | +| Unlicense | "The Unlicense", "unlicense.org" | + +If no pattern matches, the license is set to `NOASSERTION`. + +### Override File + +When auto-detection fails or returns the wrong result, +add an entry to `Tools/ci/license-overrides.yaml`: + +```yaml +overrides: + src/lib/crypto/libtomcrypt: + license: "Unlicense" + comment: "Public domain dedication. Functionally equivalent to Unlicense." +``` + +Each entry maps a submodule path to its correct SPDX license identifier. +The optional `comment` field is emitted as `licenseComments` in the SBOM, +providing context for auditors reviewing complex licensing situations +(dual licenses, composite LICENSE files, public domain dedications). + +### Copyleft Guardrail + +The `--verify-licenses` command flags submodules with copyleft licenses +(GPL, LGPL, AGPL) in a dedicated warning section. +This is informational only and does not cause a failure. +It helps maintainers track copyleft obligations when adding new submodules. + +### Platform Filtering + +Submodules under `platforms/nuttx/` are excluded from POSIX and QURT SBOMs. +The `--platform` argument (set automatically by CMake via `${PX4_PLATFORM}`) +controls which platform-specific submodules are included. +This ensures SITL builds do not list NuttX RTOS packages. + +### 验证 + +Run the verify command to check detection for all submodules: + +```sh +python3 Tools/ci/generate_sbom.py --verify-licenses --source-dir . +``` + +This prints each submodule with its detected license, any override, and the final value. +It exits non-zero if any checked-out submodule resolves to `NOASSERTION` without an override. +Copyleft warnings are printed after the main table. + +### Adding a New Submodule + +1. Add the submodule normally. +2. Run `--verify-licenses` to confirm the license is detected. +3. If detection fails, add an override to `Tools/ci/license-overrides.yaml`. +4. If the license is not in the SPDX list, use `LicenseRef-`. + +### EU CRA Compliance + +The EU Cyber Resilience Act requires SBOMs for products with digital elements. +The goal is zero `NOASSERTION` licenses in shipped firmware SBOMs. +Every submodule should have either a detected or overridden license. +The `--verify-licenses` check enforces this in CI. + +## What's in an SBOM + +This section is for integrators, compliance teams, and anyone reviewing SBOM artifacts. + +### Where to Find SBOMs + +| Location | Path | +| --------------- | ---------------------------------------- | +| Build directory | `build//.sbom.spdx.json` | +| GitHub Releases | Alongside `.px4` firmware files | +| S3 | Same directory as firmware artifacts | + +### Reading the JSON + +Each SBOM is a single JSON document following SPDX 2.3. +Key fields: + +- **`packages`**: Array of all components. Each has `name`, `versionInfo`, `licenseConcluded`, and `SPDXID`. +- **`relationships`**: How packages relate. `CONTAINS` means a submodule is compiled into firmware. `BUILD_DEPENDENCY_OF` means a tool used only during build. +- **`licenseConcluded`**: The SPDX license identifier determined for that package. +- **`licenseComments`**: Free-text explanation for complex cases (dual licenses, composite files, public domain). +- **`externalRefs`**: Package URLs (purls) linking to GitHub repos or PyPI. + +### Understanding NOASSERTION + +`NOASSERTION` means no license could be determined. +For submodules, this happens when: + +- The submodule is not checked out (common in CI shallow clones). +- No LICENSE/COPYING file exists. +- The LICENSE file does not match any known pattern and no override is configured. + +For shipped firmware, `NOASSERTION` should be resolved by adding an override. +For build-only dependencies (Python packages), `NOASSERTION` is acceptable +since these are not compiled into the firmware binary. diff --git a/docs/zh/contribute/support.md b/docs/zh/contribute/support.md index 640a978881..d7287af2d3 100644 --- a/docs/zh/contribute/support.md +++ b/docs/zh/contribute/support.md @@ -7,7 +7,7 @@ const { site } = useData();
-

This page may be out out of date. See the latest version.

+

This page may be out of date. See the latest version.

@@ -18,7 +18,7 @@ This section shows how you can get help from the core dev team and the wider com The core development team and community are active on the following channels: - [PX4 Discuss Forum](https://discuss.px4.io/) - Post here first! -- [PX4 Discord](https://discord.gg/dronecode) - Post here if you don't get a response in discuss within a few days (include a link to your forum topic). +- [PX4 Discord](https://discord.com/invite/dronecode) - Post here if you don't get a response in discuss within a few days (include a link to your forum topic). :::tip The Discuss Forum is much preferred because it is indexed by search engines and serves as a common knowledge base. diff --git a/docs/zh/debug/asset_tracking.md b/docs/zh/debug/asset_tracking.md index c4bcdda67a..c49672ab95 100644 --- a/docs/zh/debug/asset_tracking.md +++ b/docs/zh/debug/asset_tracking.md @@ -1,6 +1,6 @@ # Asset Tracking - + PX4 can track and log detailed information about external hardware devices connected to the flight controller. This enables unique identification of vehicle parts throughout their operational lifetime using device IDs, serial numbers, and version information. diff --git a/docs/zh/debug/debug_values.md b/docs/zh/debug/debug_values.md index bb64e447d1..05692ef0c7 100644 --- a/docs/zh/debug/debug_values.md +++ b/docs/zh/debug/debug_values.md @@ -22,7 +22,7 @@ This tutorial shows how to send the MAVLink message `NAMED_VALUE_FLOAT` using th 本教程的代码可在此处找到: - [Debug Tutorial Code](https://github.com/PX4/PX4-Autopilot/blob/main/src/examples/px4_mavlink_debug/px4_mavlink_debug.cpp) -- [Enable the tutorial app](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/fmu-v5/default.px4board) by ensuring the MAVLink debug app (**CONFIG_EXAMPLES_PX4_MAVLINK_DEBUG**) is in the config of your board and set set to 'y'. +- [Enable the tutorial app](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/fmu-v5/default.px4board) by ensuring the MAVLink debug app (**CONFIG_EXAMPLES_PX4_MAVLINK_DEBUG**) is in the config of your board and set to 'y'. 设置调试发布所需的只是此代码段。 首先添加头文件: diff --git a/docs/zh/debug/eclipse_jlink.md b/docs/zh/debug/eclipse_jlink.md index e23e23833d..8030ac8ba8 100644 --- a/docs/zh/debug/eclipse_jlink.md +++ b/docs/zh/debug/eclipse_jlink.md @@ -122,7 +122,7 @@ To enable this feature for use in Eclipse: 2. Compile the **jlink-nuttx.so** library in the terminal by running the following command in the terminal: `make jlink-nuttx` -3. Modify Eclipse to use this libary. +3. Modify Eclipse to use this library. In the _J-Link GDB Server Setup_ configuration, update **Other options** to include `-rtos /home//Tools/jlink-nuttx.so`, as shown in the image below. ![Eclipse: GDB Segger Debug config RTOS aware: debugger tab](../../assets/debug/eclipse_settings_debug_config_gdb_segger_task_aware.png) diff --git a/docs/zh/debug/gdb_debugging.md b/docs/zh/debug/gdb_debugging.md index e43a4a5d46..123565abba 100644 --- a/docs/zh/debug/gdb_debugging.md +++ b/docs/zh/debug/gdb_debugging.md @@ -25,7 +25,7 @@ See the debug probe documentation for details on how to setup your debug connect - [SEGGER J-Link](probe_jlink.md): commercial probe, no built-in serial console, requires adapter. - [Black Magic Probe](probe_bmp.md): integrated GDB server and serial console, requires adapter. -- [STLink](probe_stlink): best value, integrated serial console, adapter must be soldered. +- [STLink](probe_stlink.md): best value, integrated serial console, adapter must be soldered. We recommend using the J-Link with the Pixhawk Debug Adapter or the STLinkv3-MINIE with a soldered custom cable. diff --git a/docs/zh/debug/plotting_realtime_uorb_data.md b/docs/zh/debug/plotting_realtime_uorb_data.md index f0e80c4b74..ee97c69e52 100644 --- a/docs/zh/debug/plotting_realtime_uorb_data.md +++ b/docs/zh/debug/plotting_realtime_uorb_data.md @@ -72,7 +72,7 @@ cd ~/PX4-Autopilot make px4_sitl gz_x500 ``` -Open another terminal and start the `MicroXRCEAgent` to connect to the the simulator: +Open another terminal and start the `MicroXRCEAgent` to connect to the simulator: ```sh MicroXRCEAgent udp4 -p 8888; exec bash diff --git a/docs/zh/debug/probe_mculink.md b/docs/zh/debug/probe_mculink.md index 574ab78773..acfe13995a 100644 --- a/docs/zh/debug/probe_mculink.md +++ b/docs/zh/debug/probe_mculink.md @@ -1,6 +1,6 @@ # MCU-Link Debug Probe -The [MCU-Link Debug Probe](https://www.nxp.com/design/design-center/software/development-software/mcuxpresso-software-and-tools-/mcu-link-debug-probe:MCU-LINK) is a cheap, fast and highly capable debug probe that can serve as a stand-alone debug and console communicator whn working with Pixhawk boards. +The [MCU-Link Debug Probe](https://www.nxp.com/design/design-center/software/development-software/mcuxpresso-software-and-tools-/mcu-link-debug-probe:MCU-LINK) is a cheap, fast and highly capable debug probe that can serve as a stand-alone debug and console communicator when working with Pixhawk boards. 主要特性: diff --git a/docs/zh/debug/simulation_debugging.md b/docs/zh/debug/simulation_debugging.md index c9ea4de40c..f99ac6c37f 100644 --- a/docs/zh/debug/simulation_debugging.md +++ b/docs/zh/debug/simulation_debugging.md @@ -107,7 +107,7 @@ You can also start your simulation, and _then_ attach `gdb`: ``` As the script runs, note the **SITL COMMAND:** output text located right above the large "PX4" text. - It will list the location of your px4 bin file for later use. + It will list the location of your PX4 bin file for later use. ```sh SITL COMMAND: "" ""/etc diff --git a/docs/zh/debug/swd_debug.md b/docs/zh/debug/swd_debug.md index 5ee9797221..1c11f7e3fd 100644 --- a/docs/zh/debug/swd_debug.md +++ b/docs/zh/debug/swd_debug.md @@ -1,11 +1,11 @@ # SWD Debug Port -PX4 runs on ARM Cortex-M microcontrollers, which contain dedicated hardware for interactive debugging via the [_Serial Wire Debug (SWD)_][swd] interface and non-invasive profiling and high-bandwidth tracing via the [_Serial Wire Ouput (SWO)_][itm] and [_TRACE_ pins][etm]. +PX4 runs on ARM Cortex-M microcontrollers, which contain dedicated hardware for interactive debugging via the [_Serial Wire Debug (SWD)_][swd] interface and non-invasive profiling and high-bandwidth tracing via the [_Serial Wire Output (SWO)_][itm] and [_TRACE_ pins][etm]. The SWD debug interface allows direct, low-level, hardware access to the microcontroller's processor and peripherals, so it does not depend on any software on the device. Therefore it can be used to debug bootloaders and operating systems such as NuttX. -## Debug Signals +## Debug Signals {#debug-signals} Four signals are required for debugging (in bold) while the rest is recommended. @@ -27,11 +27,9 @@ The SWO pin can emit low-overhead, real-time profiling data with nanosecond time The TRACE pins require specialized debug probes to deal with the high bandwidth and subsequent datastream decoding. They are usually not accessible and are typically only used to debug very specific timing issues. - +## Autopilot Debug Ports {#debug-ports} -## Autopilot Debug Ports - -Flight controllers commonly provide a single debug port that exposes both the [SWD Interface](#debug-signals) and [System Console](system_console). +Flight controllers commonly provide a single debug port that exposes both the [SWD Interface](#debug-signals) and [System Console](system_console.md). The [Pixhawk Connector Standards](#pixhawk-standard-debug-ports) formalize the port that must be used in each FMU version. However there are still many boards that use different pinouts or connectors, so we recommend you check the [documentation for your autopilot](../flight_controller/index.md) to confirm port location and pinout. @@ -40,23 +38,35 @@ The debug port location and pinouts for a subset of autopilots are linked below: -| 飞控 | 调试接口 | -| :----------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Holybro Pixhawk 6X-RT (FMUv6X-RT) | [Pixhawk Debug Full](#pixhawk-debug-full) | -| Holybro Pixhawk 6X (FMUv6x) | [Pixhawk Debug Full](#pixhawk-debug-full) | -| Holybro Pixhawk 5X (FMUv5x) | [Pixhawk Debug Full](#pixhawk-debug-full) | -| [Holybro Durandal](../flight_controller/durandal.md#debug-port) | [Pixhawk Debug Mini](#pixhawk-debug-mini) | -| [Holybro Kakute F7](../flight_controller/kakutef7.md#debug-port) | Solder pads | -| [Holybro Pixhawk 4 Mini](../flight_controller/pixhawk4_mini.md#debug-port) (FMUv5) | [Pixhawk Debug Mini](#pixhawk-debug-mini) | -| [Holybro Pixhawk 4](../flight_controller/pixhawk4.md#debug_port) (FMUv5) | [Pixhawk Debug Mini](#pixhawk-debug-mini) | -| [Drotek Pixhawk 3 Pro](../flight_controller/pixhawk3_pro.md#debug-port) (FMU-v4pro) | [Pixhawk Debug Mini](#pixhawk-debug-mini) | -| [CUAV V5+](../flight_controller/cuav_v5_plus.md#debug-port) | 6-pin JST GH
Digikey: [BM06B-GHS-TBT(LF)(SN)(N)][bm06b-ghs-tbt(lf)(sn)(n)] (vertical mount), [SM06B-GHS-TBT(LF)(SN)(N)][sm06b-ghs-tbt(lf)(sn)(n)] (side mount) | -| [CUAV V5nano](../flight_controller/cuav_v5_nano.md#debug_port) | 6-pin JST GH
Digikey: [BM06B-GHS-TBT(LF)(SN)(N)][bm06b-ghs-tbt(lf)(sn)(n)] (vertical mount), [SM06B-GHS-TBT(LF)(SN)(N)][sm06b-ghs-tbt(lf)(sn)(n)] (side mount) | -| [3DR Pixhawk](../flight_controller/pixhawk.md#swd-port) | ARM 10-pin JTAG Connector (also used for FMUv2 boards including: _mRo Pixhawk_, _HobbyKing HKPilot32_). | +| 飞控 | 调试接口 | +| :------------------------------------------------------------------------------------------------------ | :----------------------------------------------------------------------- | +| [Holybro Pixhawk 6X-RT](../flight_controller/pixhawk6x-rt.md#debug_port) (FMUv6X-RT) | [Pixhawk Debug Full](#pixhawk-debug-full) | +| [Holybro Pixhawk 6X](../flight_controller/pixhawk6x.md#debug_port) (FMUv6x) | [Pixhawk Debug Full](#pixhawk-debug-full) | +| [Holybro Pixhawk 5X](../flight_controller/pixhawk5x.md#debug_port) (FMUv5x) | [Pixhawk Debug Full](#pixhawk-debug-full) | +| [Holybro Durandal](../flight_controller/durandal.md#debug-port) | [Pixhawk Debug Mini](#pixhawk-debug-mini) | +| [Holybro Pixhawk 4](../flight_controller/pixhawk4.md#debug_port) (FMUv5) | [Pixhawk Debug Mini](#pixhawk-debug-mini) | +| [Holybro Pixhawk 6X Pro](../flight_controller/pixhawk6x_pro.md#debug-port) | [Pixhawk Debug Full](#pixhawk-debug-full) | +| [Holybro Pixhawk 6C](../flight_controller/pixhawk6c.md#debug_port) | [Pixhawk Debug Full](#pixhawk-debug-full) | +| [Holybro Pixhawk 6C Mini](../flight_controller/pixhawk6c_mini.md#debug_port) | [Pixhawk Debug Mini](#pixhawk-debug-mini) | +| [Holybro Pix32 v6](../flight_controller/holybro_pix32_v6.md#debug_port) | [Pixhawk Debug Full](#pixhawk-debug-full) | +| [Holybro Pix32 v5](../flight_controller/holybro_pix32_v5.md#debug-port) | [Pixhawk Debug Mini](#pixhawk-debug-mini) | +| [Holybro Kakute H7](../flight_controller/kakuteh7.md#debug-port) | SWD pads and system console | +| [Holybro Kakute H7 mini](../flight_controller/kakuteh7mini.md#debug-port) | SWD pads and system console | +| [Holybro Kakute H7 V2](../flight_controller/kakuteh7v2.md#debug-port) | SWD pads and system console | +| [CUAV V5+](../flight_controller/cuav_v5_plus.md#debug-port) | Custom port but comes with adaptor cable | +| [CUAV V5nano](../flight_controller/cuav_v5_nano.md#debug_port) | Custom port but comes with adaptor cable | +| [CUAV Pixhawk V6X](../flight_controller/cuav_pixhawk_v6x.md#debug_port) | [Pixhawk Debug Full](#pixhawk-debug-full) | +| [CUAV X25-SUPER](../flight_controller/cuav_x25-super.md#debug_port) | [Pixhawk Debug Mini] | +| [CUAV X25-EVO](../flight_controller/cuav_x25-evo.md#debug_port) | [Pixhawk Debug Mini] | +| [CUAV Nora](../flight_controller/cuav_nora.md#debug-port) | Custom port but comes with adaptor cable. | +| [ARK Pixhawk Autopilot Bus Carrier](../flight_controller/ark_pab.md#debug-port) | [Pixhawk Debug Full](#pixhawk-debug-full) | +| [NXP MR-VMU-RT1176](../flight_controller/nxp_mr_vmu_rt1176.md#debug_port) | [Pixhawk Debug Full](#pixhawk-debug-full) | +| [mRo Pixracer](../flight_controller/pixracer.md#debug-port) | [Pixhawk Debug Mini](#pixhawk-debug-mini) | +| [S-Vehicle E2](../flight_controller/svehicle_e2.md#debug-port) | [Pixhawk Debug Mini] | +| [AP-H743-R1](../flight_controller/x-mav_ap-h743r1.md#debug-port) | 4-pin JST GH (SWD only) | +| [mRo Control Zero F7](../flight_controller/mro_control_zero_f7.md#debug_port) | | - - -## Pixhawk Connector Standard Debug Ports +## Pixhawk Connector Standard Debug Ports {#pixhawk-standard-debug-ports} The Pixhawk project has defines a standard pinout and connector type for different Pixhawk FMU releases: @@ -64,16 +74,16 @@ The Pixhawk project has defines a standard pinout and connector type for differe Check your [specific board](#port-information) to confirm the port used. ::: -| FMU Version | Pixhawk Version | 调试接口 | -| :---------- | :-------------------------------------------------------------- | :---------------------------------------- | -| FMUv2 | [Pixhawk / Pixhawk 1](../flight_controller/pixhawk.md#swd-port) | 10 pin ARM Debug | -| FMUv3 | Pixhawk 2 | 6 pin SUR Debug | -| FMUv4 | Pixhawk 1/2 | [Pixhawk Debug Mini](#pixhawk-debug-mini) | -| FMUv5 | Pixhawk 4 FMUv5 | [Pixhawk Debug Mini](#pixhawk-debug-mini) | -| FMUv5X | Pixhawk 5X | [Pixhawk Debug Full](#pixhawk-debug-full) | -| FMUv6 | Pixhawk 6 | [Pixhawk Debug Full](#pixhawk-debug-full) | -| FMUv6X | Pixhawk 6X | [Pixhawk Debug Full](#pixhawk-debug-full) | -| FMUv6X-RT | Pixhawk 6X-RT | [Pixhawk Debug Full](#pixhawk-debug-full) | +| FMU Version | Pixhawk Version | 调试接口 | +| :---------- | :------------------ | :---------------------------------------- | +| FMUv2 | Pixhawk / Pixhawk 1 | 10 pin ARM Debug | +| FMUv3 | Pixhawk 2 | 6 pin SUR Debug | +| FMUv4 | Pixhawk 1/2 | [Pixhawk Debug Mini](#pixhawk-debug-mini) | +| FMUv5 | Pixhawk 4 FMUv5 | [Pixhawk Debug Mini](#pixhawk-debug-mini) | +| FMUv5X | Pixhawk 5X | [Pixhawk Debug Full](#pixhawk-debug-full) | +| FMUv6 | Pixhawk 6 | [Pixhawk Debug Full](#pixhawk-debug-full) | +| FMUv6X | Pixhawk 6X | [Pixhawk Debug Full](#pixhawk-debug-full) | +| FMUv6X-RT | Pixhawk 6X-RT | [Pixhawk Debug Full](#pixhawk-debug-full) | :::info There FMU and Pixhawk versions are (only) consistent after FMUv5X. @@ -81,7 +91,7 @@ There FMU and Pixhawk versions are (only) consistent after FMUv5X. ### Pixhawk Debug Mini -The [Pixhawk Connector Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-009%20Pixhawk%20Connector%20Standard.pdf) defines the _Pixhawk Debug Mini_, a _6-Pin SH Debug Port_ that provides access to both SWD pins and the [System Console](system_console). +The [Pixhawk Connector Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-009%20Pixhawk%20Connector%20Standard.pdf) defines the _Pixhawk Debug Mini_, a _6-Pin SH Debug Port_ that provides access to both SWD pins and the [System Console](system_console.md). This is used in FMUv4 and FMUv5. @@ -112,7 +122,7 @@ You can connect to the debug port using a [cable like this one](https://www.digi ### Pixhawk Debug Full -The [Pixhawk Connector Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-009%20Pixhawk%20Connector%20Standard.pdf) defines _Pixhawk Debug Full_, a _10-Pin SH Debug Port_ that provides access to both SWD pins and the [System Console](system_console). +The [Pixhawk Connector Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-009%20Pixhawk%20Connector%20Standard.pdf) defines _Pixhawk Debug Full_, a _10-Pin SH Debug Port_ that provides access to both SWD pins and the [System Console](system_console.md). This essentially moves the solder pads from beside the [Pixhawk Debug Mini](#pixhawk-debug-mini) into the connector, and also adds an SWO pin. 该端口指定用于FMUv5x, FMUv6, FMUv6x。 @@ -142,18 +152,16 @@ You can connect to the debug port using a [cable like this one](https://www.digi ![10-pin JST SH Cable](../../assets/debug/cable_10pin_jst_sh.jpg) - +## Debug Probes for PX4 Hardware {#debug-probes} -## Debug Probes for PX4 Hardware - -Flight controllers commonly provide a [single debug port](#autopilot-debug-ports) that exposes both the [SWD Interface](#debug-signals) and [System Console](system_console). +Flight controllers commonly provide a [single debug port](#autopilot-debug-ports) that exposes both the [SWD Interface](#debug-signals) and [System Console](system_console.md). There are several debug probes that are tested and supported for connecting to one or both of these interfaces: - [SEGGER J-Link](../debug/probe_jlink.md): commercial probe, no built-in serial console, requires adapter. - [Black Magic Probe](../debug/probe_bmp.md): integrated GDB server and serial console, requires adapter. -- [STLink](../debug/probe_stlink): best value, integrated serial console, adapter must be soldered. -- [MCU-Link](../debug/probe_mculink): best value, integrated serial console, requires adapter. +- [STLink](../debug/probe_stlink.md): best value, integrated serial console, adapter must be soldered. +- [MCU-Link](../debug/probe_mculink.md): best value, integrated serial console, requires adapter. An adapter to connect to the debug port may come with your flight controller or debug probe. Other options are given below. @@ -191,7 +199,7 @@ Probes that are known to come with connectors are listed below: ### Board-specific Adapters -Some manufacturers provide cables to make it easy to connect the SWD interface and [System Console](../debug/system_console). +Some manufacturers provide cables to make it easy to connect the SWD interface and [System Console](../debug/system_console.md). - [CUAV V5nano](../flight_controller/cuav_v5_nano.md#debug_port) and [CUAV V5+](../flight_controller/cuav_v5_plus.md#debug-port) include this debug cable: @@ -205,7 +213,7 @@ You can also create custom cables for connecting to different boards or probes: - Connect the VREF pin, if supported by the debug probe. - Connect the remaining pins, if present. -See the [STLinkv3-MINIE](probe_stlink) for a guide on how to solder a custom cable. +See the [STLinkv3-MINIE](probe_stlink.md) for a guide on how to solder a custom cable. :::tip Where possible, we highly recommend that you create or obtain an adapter board rather than custom cables for connecting to SWD/JTAG debuggers and computers. @@ -217,5 +225,3 @@ This reduces the risk or poor wiring contributing to debugging problems, and has [swd]: https://developer.arm.com/documentation/ihi0031/a/The-Serial-Wire-Debug-Port--SW-DP- [itm]: https://developer.arm.com/documentation/ddi0403/d/Appendices/Debug-ITM-and-DWT-Packet-Protocol?lang=en [etm]: https://developer.arm.com/documentation/ihi0064/latest/ -[bm06b-ghs-tbt(lf)(sn)(n)]: https://www.digikey.com/en/products/detail/jst-sales-america-inc/BM06B-GHS-TBT/807804 -[sm06b-ghs-tbt(lf)(sn)(n)]: https://www.digikey.com/en/products/detail/jst-sales-america-inc/SM06B-GHS-TB/807790 diff --git a/docs/zh/debug/system_console.md b/docs/zh/debug/system_console.md index 07fe365304..e4f074d30b 100644 --- a/docs/zh/debug/system_console.md +++ b/docs/zh/debug/system_console.md @@ -23,16 +23,10 @@ Connect the 6-pos JST SH 1:1 cable to the Dronecode probe or connect the individ ### Connecting via Dronecode Probe -The System Console UART pinouts/debug ports are typically documented in [autopilot overview pages](../flight_controller/index.md) (some are linked below): +The System Console UART pinouts/debug ports are typically documented in the affected [autopilot overview pages](../flight_controller/index.md). +For example, see [mRo Pixhawk](../flight_controller/mro_pixhawk.md#console-port) and [Pixracer](../flight_controller/pixracer.md#debug-port). -- [3DR Pixhawk v1 Flight Controller](../flight_controller/pixhawk.md#console-port) (also applies to - [mRo Pixhawk](../flight_controller/mro_pixhawk.md#debug-ports), [Holybro pix32](../flight_controller/holybro_pix32.md#debug-port)) -- [Pixhawk 3](../flight_controller/pixhawk3_pro.md#debug-port) -- [Pixracer](../flight_controller/pixracer.md#debug-port) - - - -### Connecting via FTDI 3.3V Cable +### Pixhawk Debug Port {#pixhawk_debug_port} Pixhawk flight controllers usually come with a [Pixhawk Connector Standard Debug Port](../debug/swd_debug.md#pixhawk-connector-standard-debug-ports) which will be either the 10 pin [Pixhawk Debug Full](../debug/swd_debug.md#pixhawk-debug-full) or 6 pin [Pixhawk Debug Mini](../debug/swd_debug.md#pixhawk-debug-mini) port. diff --git a/docs/zh/dev_airframes/adding_a_new_frame.md b/docs/zh/dev_airframes/adding_a_new_frame.md index 407c541df7..5ccdc2b38f 100644 --- a/docs/zh/dev_airframes/adding_a_new_frame.md +++ b/docs/zh/dev_airframes/adding_a_new_frame.md @@ -124,118 +124,79 @@ param set-default CA_ROTOR3_PY 0.15 param set-default CA_ROTOR3_KM -0.05 ``` -### Example - Babyshark VTOL Complete Vehicle +### Example - HolyBro QAV250 Complete Vehicle -A more complicated configuration file for a complete vehicle is provided below. -This is the configuration for the Baby Shark [Standard VTOL](../frames_vtol/standardvtol.md) ([original file here](https://github.com/PX4/PX4-Autopilot/blob/main/ROMFS/px4fmu_common/init.d/airframes/13014_vtol_babyshark)). +A more complete configuration file for a real vehicle is provided below. +This is the configuration for the [HolyBro QAV250](../frames_multicopter/holybro_qav250_pixhawk4_mini.md) quadrotor ([original file here](https://github.com/PX4/PX4-Autopilot/blob/main/ROMFS/px4fmu_common/init.d/airframes/4052_holybro_qav250)). -The shebang and documentation sections are similar to those for the generic frame, but here we also document what `outputs` are mapped to each motor and actuator. -Note that these outputs are documentation only; the actual mapping is done using parameters. +The shebang and documentation sections are similar to those for the generic frame. +Here we also add a `@url` link to the vehicle documentation, a `@maintainer`, and additional board exclusions. ```sh #!/bin/sh # -# @name BabyShark VTOL +# @name HolyBro QAV250 # -# @type Standard VTOL -# @class VTOL +# @url https://docs.px4.io/main/en/frames_multicopter/holybro_qav250_pixhawk4_mini # -# @maintainer Silvan Fuhrer +# @type Quadrotor x +# @class Copter # -# @output Motor1 motor 1 -# @output Motor2 motor 2 -# @output Motor3 motor 3 -# @output Motor4 motor 4 -# @output Motor5 Pusher motor -# @output Servo1 Ailerons -# @output Servo2 A-tail left -# @output Servo3 A-tail right +# @maintainer Beat Kueng # # @board px4_fmu-v2 exclude # @board bitcraze_crazyflie exclude -# @board holybro_kakutef7 exclude +# @board px4_fmu-v6x exclude +# @board ark_fmu-v6x exclude # ``` -As for the generic frame, we then include the generic VTOL defaults. +Next, we source the multicopter defaults. ```sh -. ${R}etc/init.d/rc.vtol_defaults +. ${R}etc/init.d/rc.mc_defaults ``` Then we define configuration parameters and [tuning gains](#tuning-gains): ```sh -param set-default MAV_TYPE 22 +# The set does not include a battery, but most people will probably use 4S +param set-default BAT1_N_CELLS 4 -param set-default BAT1_N_CELLS 6 +param set-default IMU_GYRO_CUTOFF 120 +param set-default IMU_DGYRO_CUTOFF 45 -param set-default FW_AIRSPD_MAX 30 -param set-default FW_AIRSPD_MIN 19 -param set-default FW_AIRSPD_TRIM 23 -param set-default FW_PN_R_SLEW_MAX 40 -param set-default FW_PSP_OFF 3 -param set-default FW_P_LIM_MAX 18 -param set-default FW_P_LIM_MIN -25 -param set-default FW_RLL_TO_YAW_FF 0.1 -param set-default FW_RR_P 0.08 -param set-default FW_R_LIM 45 -param set-default FW_R_RMAX 50 -param set-default FW_THR_TRIM 0.65 -param set-default FW_THR_MIN 0.3 -param set-default FW_THR_SLEW_MAX 0.6 -param set-default FW_T_HRATE_FF 0 -param set-default FW_T_SINK_MAX 15 -param set-default FW_T_SINK_MIN 3 -param set-default FW_YR_P 0.15 - -param set-default IMU_DGYRO_CUTOFF 15 -param set-default MC_PITCHRATE_MAX 60 -param set-default MC_ROLLRATE_MAX 60 -param set-default MC_YAWRATE_I 0.15 -param set-default MC_YAWRATE_MAX 40 -param set-default MC_YAWRATE_P 0.3 - -param set-default MPC_ACC_DOWN_MAX 2 -param set-default MPC_ACC_HOR_MAX 2 -param set-default MPC_ACC_UP_MAX 3 param set-default MC_AIRMODE 1 -param set-default MPC_JERK_AUTO 4 -param set-default MPC_LAND_SPEED 1 -param set-default MPC_MAN_TILT_MAX 25 -param set-default MPC_MAN_Y_MAX 40 -param set-default COM_SPOOLUP_TIME 1.5 -param set-default MPC_THR_HOVER 0.45 -param set-default MPC_TILTMAX_AIR 25 -param set-default MPC_TKO_RAMP_T 1.8 -param set-default MPC_TKO_SPEED 1 -param set-default MPC_VEL_MANUAL 3 -param set-default MPC_XY_CRUISE 3 -param set-default MPC_XY_VEL_MAX 3.5 -param set-default MPC_YAWRAUTO_MAX 40 -param set-default MPC_Z_VEL_MAX_UP 2 +param set-default MC_PITCHRATE_D 0.0012 +param set-default MC_PITCHRATE_I 0.35 +param set-default MC_PITCHRATE_MAX 1200 +param set-default MC_PITCHRATE_P 0.082 +param set-default MC_PITCH_P 8 +param set-default MC_ROLLRATE_D 0.0012 +param set-default MC_ROLLRATE_I 0.3 +param set-default MC_ROLLRATE_MAX 1200 +param set-default MC_ROLLRATE_P 0.076 +param set-default MC_ROLL_P 8 +param set-default MC_YAWRATE_I 0.3 +param set-default MC_YAWRATE_MAX 600 +param set-default MC_YAWRATE_P 0.25 +param set-default MC_YAW_P 4 -param set-default NAV_ACC_RAD 3 +param set-default MPC_MANTHR_MIN 0 +param set-default MPC_MAN_TILT_MAX 60 +param set-default MPC_THR_CURVE 1 +param set-default MPC_THR_HOVER 0.25 +param set-default MPC_THR_MIN 0.05 +param set-default MPC_Z_VEL_I_ACC 1.7 -param set-default SENS_BOARD_ROT 4 - -param set-default VT_ARSP_BLEND 10 -param set-default VT_ARSP_TRANS 21 -param set-default VT_B_DEC_MSS 1.5 -param set-default VT_B_TRANS_DUR 12 -param set-default VT_ELEV_MC_LOCK 0 -param set-default VT_FWD_THRUST_SC 1.2 -param set-default VT_F_TR_OL_TM 8 -param set-default VT_PSHER_SLEW 0.5 -param set-default VT_TRANS_MIN_TM 4 -param set-default VT_TYPE 2 +param set-default THR_MDL_FAC 0.3 ``` -Last of all, the file defines the control allocation parameters for the geometry and the parameters that set which outputs map to different motors and servos. +Last of all, the file defines the control allocation parameters for the geometry and the parameters that set which outputs map to different motors. ```sh -param set-default CA_AIRFRAME 2 -param set-default CA_ROTOR_COUNT 5 +# Square quadrotor X PX4 numbering +param set-default CA_ROTOR_COUNT 4 param set-default CA_ROTOR0_PX 1 param set-default CA_ROTOR0_PY 1 param set-default CA_ROTOR1_PX -1 @@ -246,34 +207,11 @@ param set-default CA_ROTOR2_KM -0.05 param set-default CA_ROTOR3_PX -1 param set-default CA_ROTOR3_PY 1 param set-default CA_ROTOR3_KM -0.05 -param set-default CA_ROTOR4_AX 1.0 -param set-default CA_ROTOR4_AZ 0.0 -param set-default CA_SV_CS_COUNT 3 -param set-default CA_SV_CS0_TYPE 15 -param set-default CA_SV_CS0_TRQ_R 1.0 -param set-default CA_SV_CS1_TRQ_P 0.5000 -param set-default CA_SV_CS1_TRQ_R 0.0000 -param set-default CA_SV_CS1_TRQ_Y -0.5000 -param set-default CA_SV_CS1_TYPE 13 -param set-default CA_SV_CS2_TRQ_P 0.5000 -param set-default CA_SV_CS2_TRQ_Y 0.5000 -param set-default CA_SV_CS2_TYPE 14 - -param set-default PWM_MAIN_FUNC1 201 -param set-default PWM_MAIN_FUNC2 202 -param set-default PWM_MAIN_FUNC3 105 -param set-default PWM_MAIN_FUNC4 203 -param set-default PWM_MAIN_FUNC5 101 -param set-default PWM_MAIN_FUNC6 102 -param set-default PWM_MAIN_FUNC7 103 -param set-default PWM_MAIN_FUNC8 104 - -param set-default PWM_MAIN_TIM0 50 -param set-default PWM_MAIN_DIS1 1500 -param set-default PWM_MAIN_DIS2 1500 -param set-default PWM_MAIN_DIS3 1000 -param set-default PWM_MAIN_DIS4 1500 +param set-default PWM_MAIN_FUNC1 101 +param set-default PWM_MAIN_FUNC2 102 +param set-default PWM_MAIN_FUNC3 103 +param set-default PWM_MAIN_FUNC4 104 ``` ## 增加一个新的机型组(Airframe Group) diff --git a/docs/zh/dev_log/log_encryption.md b/docs/zh/dev_log/log_encryption.md index bc4380f471..15dbb87434 100644 --- a/docs/zh/dev_log/log_encryption.md +++ b/docs/zh/dev_log/log_encryption.md @@ -15,7 +15,7 @@ To use it you will need to build firmware with this feature enabled and then upl Log encryption was has been improved in PX4 v1.16 to generate a single encrypted log file that contains both encrypted log data, and an encrypted symmetric key that you can use to decrypt it (provided you can decrypt the symmetric key). In earlier versions the encrypted symmetric key was stored in a separate file. -For more information see the [Log Encryption (PX4 v1.15)](https://docs.px4.io/v1.15/en/dev_log/log_encryption.html). +For more information see the [Log Encryption (PX4 v1.15)](https://docs.px4.io/v1.15/en/dev_log/log_encryption). ::: ## How ULog Encryption Works @@ -142,7 +142,7 @@ Note that the value is generated fresh for each log, and any value specified in You can use choose different locations for your keys as long as they aren't used by anything else. ::: -The key in `CONFIG_PUBLIC_KEY1` is the public key used to wrap the symmetric key in the the beginning of `.ulge` file (by default: see [SDLOG_EXCH_KEY](../advanced_config/parameter_reference.md#SDLOG_EXCH_KEY)). +The key in `CONFIG_PUBLIC_KEY1` is the public key used to wrap the symmetric key in the beginning of `.ulge` file (by default: see [SDLOG_EXCH_KEY](../advanced_config/parameter_reference.md#SDLOG_EXCH_KEY)). You can use the `rsa2048.pub` key for testing, or replace it with the path to your own public key in the file (see [Generate RSA Public & Private Keys](#generate-rsa-public-private-keys)). Build the firmware like this: @@ -342,7 +342,7 @@ PX4-Autopilot/ │ │ ├── public_key.pub # Public key in hex format ``` -备注: +Notes: - The script will not overwrite any existing keys in the folders. It will generate a new public key if the folder only includes a private key. diff --git a/docs/zh/dev_log/logging.md b/docs/zh/dev_log/logging.md index 36bb608f46..a40a521be3 100644 --- a/docs/zh/dev_log/logging.md +++ b/docs/zh/dev_log/logging.md @@ -83,6 +83,31 @@ This configuration will log sensor_accel 0 at full rate, sensor_accel 1 at 10Hz, There are several scripts to analyze and convert logging files in the [pyulog](https://github.com/PX4/pyulog) repository. +## Log Cleanup + +PX4 automatically manages log storage by rotating log files during writing and cleaning up old logs when starting a new log. +Rotation is **on by default**: when the current file reaches [SDLOG_MAX_SIZE](../advanced_config/parameter_reference.md#SDLOG_MAX_SIZE), the logger closes it and opens a new one, and old `.ulg` files are deleted (oldest first) to keep free space above the threshold set by [SDLOG_ROTATE](../advanced_config/parameter_reference.md#SDLOG_ROTATE). + +Three parameters control how much space logs may use: + +- [SDLOG_ROTATE](../advanced_config/parameter_reference.md#SDLOG_ROTATE) is the maximum disk usage percentage (default 90). + Cleanup prior to logging (see below) ensures at least `(100 - SDLOG_ROTATE)%` of the disk stays free at all times, **even while writing a new log file**. + Setting it to `0` disables space-based cleanup entirely; setting it to `100` lets logs fill the disk completely. +- [SDLOG_MAX_SIZE](../advanced_config/parameter_reference.md#SDLOG_MAX_SIZE) is the maximum size of a single log file in MB + (default 1024). It also reserves headroom so that a full new file always fits after cleanup. +- [SDLOG_DIRS_MAX](../advanced_config/parameter_reference.md#SDLOG_DIRS_MAX) optionally caps the number of log directories kept (default 0, disabled). + This runs on top of the space-based cleanup and is mainly useful for capping log usage by count independent of available disk size (e.g. in SITL, where it defaults to `7`). + +At log start, the cleanup threshold is `((100 - SDLOG_ROTATE)% of disk) + SDLOG_MAX_SIZE`. +The oldest logs are deleted until the free space meets this threshold. +For example, on an 8 GB card with defaults, cleanup keeps at least `820 + 1024 = ~1.8 GB` free at log start, +so ~6 GB is usable for logs and disk usage never exceeds 90% during writing. +Small flash targets override `SDLOG_MAX_SIZE` to a smaller value to keep more logs within the available space. + +PX4 stores logs in directories named with one of two formats, depending on whether the system has valid time: date directories (such as `2024-01-15` or `2024-01-16`) when it does, and session directories (`sess001`) when it doesn't. +The cleanup algorithm prioritises deleting logs from whichever format is not currently in use. +This ensures that stale logs from a different time mode are cleaned up before current logs. + ## File size limitations The maximum file size depends on the file system and OS. diff --git a/docs/zh/dev_setup/building_px4.md b/docs/zh/dev_setup/building_px4.md index 9ca4157ec9..0ce26278a3 100644 --- a/docs/zh/dev_setup/building_px4.md +++ b/docs/zh/dev_setup/building_px4.md @@ -136,13 +136,13 @@ From the PX4-Autopilot directory: - [mRo Pixhawk (FMUv3)](../flight_controller/mro_pixhawk.md): `make px4_fmu-v3_default` (支持 2MB Flash) -- [Holybro pix32 (FMUv2)](../flight_controller/holybro_pix32.md): `make px4_fmu-v2_default` +- [Holybro pix32 (FMUv2)](../flight_controller/autopilot_discontinued.md): `make px4_fmu-v2_default` - Discontinued -- [Pixfalcon (FMUv2)](../flight_controller/pixfalcon.md): `make px4_fmu-v2_default` +- [Pixfalcon (FMUv2)](../flight_controller/autopilot_discontinued.md): `make px4_fmu-v2_default` - Discontinued -- [Dropix (FMUv2)](../flight_controller/dropix.md): `make px4_fmu-v2_default` +- [Dropix (FMUv2)](../flight_controller/autopilot_discontinued.md): `make px4_fmu-v2_default` - Discontinued -- [Pixhawk 1 (FMUv2)](../flight_controller/pixhawk.md): `make px4_fmu-v2_default` +- [Pixhawk 1 (FMUv2)](../flight_controller/autopilot_discontinued.md): `make px4_fmu-v2_default` - Discontinued :::warning You **must** use a supported version of GCC to build this board (e.g. the `gcc-arm-none-eabi` package from the current Ubuntu LTS, which is the same toolchain used by CI) or remove modules from the build. @@ -282,7 +282,7 @@ make [VENDOR_][MODEL][_VARIANT] [VIEWER_MODEL_DEBUGGER_WORLD] - \*\*VENDOR:\*\*主板制造商:`px4`、`aerotenna`、`airmind`、`atlflight`、`auav`、`beaglebone`、`intel`、`nxp` 等。 Pixhawk 系列主板的供应商名称为 `px4`。 - \*\*MODEL:\*\*飞控板型号 “model”:`sitl`、`fmu-v2`、`fmu-v3`、`fmu-v4`、`fmu-v5`、`navio2` 等。 -- **VARIANT:** 指示特定的配置:例如`bootloader`, `cyphal`, 其中包含不存在于“默认”配置中的组件。 +- **VARIANT:** Indicates particular configurations: e.g. `bootloader`, `cyphal`, `sih`, which add or remove components to/from the `default` configuration. 最常见的情况是 `default`, 并且可能被省略。 :::tip diff --git a/docs/zh/dev_setup/dev_env.md b/docs/zh/dev_setup/dev_env.md index b614154333..566a78554d 100644 --- a/docs/zh/dev_setup/dev_env.md +++ b/docs/zh/dev_setup/dev_env.md @@ -1,5 +1,10 @@ # 安装文件和代码 +:::tip +You only need a toolchain if you want to **modify and build** PX4 from source. +If you just want to run PX4 simulation without changing the code, use a pre-built [Docker container or .deb package](../simulation/px4_sitl_prebuilt_packages.md) instead. +::: + The _supported platforms_ for PX4 development are: - [Ubuntu Linux (24.04/22.04)](../dev_setup/dev_env_linux_ubuntu.md) diff --git a/docs/zh/dev_setup/dev_env_linux_arch.md b/docs/zh/dev_setup/dev_env_linux_arch.md index 741c7ac0b0..acf060dc5a 100644 --- a/docs/zh/dev_setup/dev_env_linux_arch.md +++ b/docs/zh/dev_setup/dev_env_linux_arch.md @@ -1,7 +1,7 @@ # ArchLinux 上的开发环境 :::warning -This development environment is [community supported and maintained](../advanced/community_supported_dev_env). +This development environment is [community supported and maintained](../advanced/community_supported_dev_env.md). It may or may not work with current versions of PX4. See [Toolchain Installation](../dev_setup/dev_env.md) for information about the environments and tools supported by the core development team. diff --git a/docs/zh/dev_setup/dev_env_mac.md b/docs/zh/dev_setup/dev_env_mac.md index 4c52a89da8..671d9a6ff6 100644 --- a/docs/zh/dev_setup/dev_env_mac.md +++ b/docs/zh/dev_setup/dev_env_mac.md @@ -1,116 +1,135 @@ # macOS Development Environment -MacOS 是受支持的 PX4 开发平台。 +The following instructions set up a PX4 development environment on macOS. 根据本文的指示构建的开发环境可以用编译: - 基于 NuttX 的硬件 (Pixhawk等) -- [Gazebo Classic Simulation](../sim_gazebo_classic/index.md) +- [Gazebo Simulation](../sim_gazebo_gz/index.md) (Gazebo Harmonic) + +It works on both Intel and Apple Silicon Macs. :::tip This setup is supported by the PX4 dev team. -To build other targets you will need to use a [different OS](../dev_setup/dev_env.md#supported-targets) (or an [unsupported development environment](../advanced/community_supported_dev_env.md)). +To build for [other targets](../dev_setup/dev_env.md#supported-targets) you will need to use a [different OS](../dev_setup/dev_env.md#supported-targets) or an [unsupported development environment](../advanced/community_supported_dev_env.md). ::: -## 一键安装脚本 +## Development Environment Setup - +### 系统必备组件 -## Base Setup - -The "base" macOS setup installs the tools needed for building firmware, and includes the common tools that will be needed for installing/using the simulators. - -### Environment Setup - -:::details -Apple Silicon MacBook users! -If you have an Apple M1, M2 etc. MacBook, make sure to run the terminal as x86 by setting up an x86 terminal: - -1. Locate the Terminal application within the Utilities folder (**Finder > Go menu > Utilities**) -2. Select _Terminal.app_ and right-click on it, then choose **Duplicate**. -3. Rename the duplicated Terminal app, e.g. to _x86 Terminal_ -4. Now select the renamed _x86 Terminal_ app and right-click and choose \*_Get Info_ -5. Check the box for **Open using Rosetta**, then close the window -6. Run the _x86 Terminal_ as usual, which will fully support the current PX4 toolchain - -::: - -First set up the environment - -1. Enable more open files by appending the following line to the `~/.zshenv` file (creating it if necessary): +1. **Install Xcode Command Line Tools** — provides `git`, `make`, and the Apple `clang` compiler: ```sh - echo ulimit -S -n 2048 >> ~/.zshenv + xcode-select --install + ``` + +2. **Install Homebrew** by following the [installation instructions](https://brew.sh). + +3. **Increase the open-file limit.** The PX4 build opens many files simultaneously and the macOS default limit (256) is too low — you may see `"LD: too many open files"` errors without this. + + Add the following line to your shell startup file so it applies to every new terminal session. + macOS defaults to **zsh** since Catalina, so add it to `~/.zshrc` (use `~/.bashrc` if you use bash): + + ```sh + echo "ulimit -S -n 2048" >> ~/.zshrc + ``` + + Then **open a new terminal** (or run `source ~/.zshrc`) for the change to take effect. + +4. **Ensure Python 3 is available.** Some PX4 build scripts require `python3` and `pip3` to be in your `PATH`. The Xcode Command Line Tools include Python 3 by default. + + ::: tip + If you need to install or manage a different Python version, we recommend [pyenv](https://github.com/pyenv/pyenv), which lets you set global and per-directory Python versions. + +::: + +### Install Development Tools + +1. **Download PX4 Source Code:** + + ```sh + git clone https://github.com/PX4/PX4-Autopilot.git + cd PX4-Autopilot + git submodule update --init --recursive --force + ``` + +2. **Install development environment libraries** from the [macos.sh](https://github.com/PX4/PX4-Autopilot/blob/main/Tools/setup/macos.sh) helper script: + + ```sh + ./Tools/setup/macos.sh --sim-tools ``` ::: info - If you don't do this, the build toolchain may report the error: `"LD: too many open files"` + The setup script creates a Python virtual environment at `.venv` in the repo root and installs all Python dependencies into it. This keeps PX4's Python requirements isolated from your system Python and avoids conflicts with Homebrew's externally-managed Python. + + Activate it before building: + + ```sh + source .venv/bin/activate + ``` + + You'll need to re-run this command in each new terminal session. To activate it automatically when you `cd` into the repo, consider a tool like [direnv](https://direnv.net/) or add the activation to your `~/.zshrc`. ::: -2. Enforce Python 3 by appending the following lines to `~/.zshenv` + This installs: - ```sh - # Point pip3 to macOS system python 3 pip - alias pip3=/usr/bin/pip3 - ``` - -### Common Tools - -To setup the environment to be able to build for Pixhawk/NuttX hardware (and install the common tools for using simulators): - -1. Install Homebrew by following these [installation instructions](https://brew.sh). - -2. Run these commands in your shell to install the common tools: - - ```sh - brew tap PX4/px4 - brew install px4-dev - ``` - -3. Install the required Python packages: - - ```sh - # install required packages using pip3 - python3 -m pip install --user pyserial empty toml numpy pandas jinja2 pyyaml pyros-genmsg packaging kconfiglib future jsonschema - # if this fails with a permissions error, your Python install is in a system path - use this command instead: - sudo -H python3 -m pip install --user pyserial empty toml numpy pandas jinja2 pyyaml pyros-genmsg packaging kconfiglib future jsonschema - ``` - -## Gazebo Classic 模拟 - -To setup the environment for [Gazebo Classic](../sim_gazebo_classic/index.md) simulation: - -1. Run the following commands in your shell: - - ```sh - brew unlink tbb - sed -i.bak '/disable! date:/s/^/ /; /disable! date:/s/./#/3' $(brew --prefix)/Library/Taps/homebrew/homebrew-core/Formula/tbb@2020.rb - brew install tbb@2020 - brew link tbb@2020 - ``` + - **Toolchain packages** from the `osx-cross/arm` and `PX4/px4` Homebrew taps — ARM cross-compiler (`arm-gcc-bin@13`), `cmake`, `ninja`, `ccache`, `fastdds`, `genromfs`, `kconfig-frontends`, and other build tools + - **Python packages** from `requirements.txt` + - **`px4-sim`** (via `--sim-tools`) — Gazebo Harmonic simulation (`gz-harmonic`) and related tools ::: info - September 2021: The commands above are a workaround to this bug: [PX4-Autopilot#17644](https://github.com/PX4/PX4-Autopilot/issues/17644). - They can be removed once it is fixed (along with this note). + Omit `--sim-tools` if you only need to build for NuttX hardware and don't need simulation. + + Use `--reinstall` to force reinstallation of all Homebrew formulas (useful if something is broken). ::: -2. To install SITL simulation with Gazebo Classic: +### Gazebo Simulation - ```sh - brew install --cask temurin - brew install --cask xquartz - brew install px4-sim-gazebo - ``` +The `--sim-tools` flag installs the `px4-sim` Homebrew formula, which pulls in Gazebo Harmonic. -3. Run the macOS setup script: `PX4-Autopilot/Tools/setup/macos.sh` - The easiest way to do this is to clone the PX4 source, and then run the script from the directory, as shown: +If you skipped `--sim-tools` during initial setup and want to add simulation later: - ```sh - git clone https://github.com/PX4/PX4-Autopilot.git --recursive - cd PX4-Autopilot/Tools/setup - sh macos.sh - ``` +```sh +brew tap PX4/px4 +brew install px4-sim +``` + +:::info +Gazebo requires **XQuartz** for display on macOS. +If you don't already have it installed: + +```sh +brew install --cask xquartz +``` + +You may need to log out and back in after installing XQuartz. +::: + +### Verify Installation + +After installation, verify the key tools are available: + +```sh +# NuttX cross-compiler (from arm-gcc-bin@13) +arm-none-eabi-gcc --version + +# Build tools +cmake --version +ninja --version + +# Gazebo (if --sim-tools was used) +gz sim --versions +``` + +Quick smoke test — build and run a simulation target: + +```sh +make px4_sitl gz_x500 +``` + +If everything is set up correctly, this will build PX4 SITL and launch a Gazebo simulation with the x500 quadcopter. ## Gazebo dependencies @@ -120,7 +139,7 @@ Once you have finished setting up the command-line toolchain: - Install the [QGroundControl Daily Build](../dev_setup/qgc_daily_build.md) - :::tip + ::: tip The _daily build_ includes development tools that are hidden in release builds. It may also provide access to new PX4 features that are not yet supported in release builds. diff --git a/docs/zh/dev_setup/dev_env_windows_vm.md b/docs/zh/dev_setup/dev_env_windows_vm.md index 8bfc9a4148..c119809bae 100644 --- a/docs/zh/dev_setup/dev_env_windows_vm.md +++ b/docs/zh/dev_setup/dev_env_windows_vm.md @@ -29,14 +29,14 @@ There is also an incomplete section for VirtualBox at the end (we'd welcome expa VMWare performance is acceptable for basic usage (building Firmware) but not for running ROS or Gazebo Classic. -1. Download [VMWare Player Freeware](https://www.vmware.com/products/workstation-player/workstation-player-evaluation.html) +1. Download [VMWare Workstation Pro](https://www.vmware.com/products/desktop-hypervisor/workstation-and-fusion) (the free player has been discontinued) 2. 将其安装在 Windows 系统上。 3. Download the desired version of [Ubuntu Desktop ISO Image](https://ubuntu.com/download/desktop). (see [Linux Instructions Page](../dev_setup/dev_env_linux.md) for recommended Ubuntu version). -4. Open _VMWare Player_. +4. Open _Workstation Pro_. 5. Enable 3D acceleration in the VM's settings: **VM > Settings > Hardware > Display > Accelerate 3D graphics** diff --git a/docs/zh/dev_setup/getting_started.md b/docs/zh/dev_setup/getting_started.md index 35df3c433d..8a030b6a85 100644 --- a/docs/zh/dev_setup/getting_started.md +++ b/docs/zh/dev_setup/getting_started.md @@ -2,6 +2,7 @@ 本节包含有关开始 PX4 开发的主题: +- [PX4 Simulation QuickStart](../simulation/px4_simulation_quickstart.md) — Try PX4 in simulation without a build environment! - [Initial Setup](../dev_setup/config_initial.md) - [Toolchain Installation](../dev_setup/dev_env.md) - [Building the Code](../dev_setup/building_px4.md) diff --git a/docs/zh/dev_setup/qtcreator.md b/docs/zh/dev_setup/qtcreator.md index 18476342f2..d6285e7124 100644 --- a/docs/zh/dev_setup/qtcreator.md +++ b/docs/zh/dev_setup/qtcreator.md @@ -8,7 +8,7 @@ Qt Creator has been replaced by [VSCode](../dev_setup/vscode.md) as the official See [Toolchain Installation](../dev_setup/dev_env.md) for information about the environments and tools supported by the core development team. ::: -[Qt Creator](https://www.qt.io/download-open-source) is a popular cross-platform open-source IDE that can be used to compile and debug PX4. +[Qt Creator](https://www.qt.io/development/download-open-source) is a popular cross-platform open-source IDE that can be used to compile and debug PX4. ## Qt Creator Functionality diff --git a/docs/zh/dronecan/ark_cannode.md b/docs/zh/dronecan/ark_cannode.md index d7b0724f8e..6127ea797c 100644 --- a/docs/zh/dronecan/ark_cannode.md +++ b/docs/zh/dronecan/ark_cannode.md @@ -28,7 +28,7 @@ Order this module from: - Pixhawk Standard SPI Connector - 7 Pin JST GH - PWM Connector - - 10 Pin JST JST + - 10 Pin JST - 8 PWM Outputs - Matches Pixhawk 4 PWM Connector Pinout - Pixhawk Standard Debug Connector @@ -77,7 +77,7 @@ DroneCAN configuration in PX4 is explained in more detail in [DroneCAN > Enablin You will need to enable the subscriber appropriate for each of the sensors that are connected to the ARK CANnode. -This is done using the the parameters named like `UAVCAN_SUB_*` in the parameter reference (such as [UAVCAN_SUB_ASPD](../advanced_config/parameter_reference.md#UAVCAN_SUB_ASPD), [UAVCAN_SUB_BARO](../advanced_config/parameter_reference.md#UAVCAN_SUB_BARO) etc.). +This is done using the parameters named like `UAVCAN_SUB_*` in the parameter reference (such as [UAVCAN_SUB_ASPD](../advanced_config/parameter_reference.md#UAVCAN_SUB_ASPD), [UAVCAN_SUB_BARO](../advanced_config/parameter_reference.md#UAVCAN_SUB_BARO) etc.). ## Ark CANNode Configuration diff --git a/docs/zh/dronecan/ark_g5_rtk_gps.md b/docs/zh/dronecan/ark_g5_rtk_gps.md index 67c3145a0f..325683e0b2 100644 --- a/docs/zh/dronecan/ark_g5_rtk_gps.md +++ b/docs/zh/dronecan/ark_g5_rtk_gps.md @@ -97,7 +97,7 @@ There is also CAN built-in bus termination via [CANNODE_TERM](../advanced_config You need to set necessary [DroneCAN](index.md) parameters and define offsets if the sensor is not centred within the vehicle: - Enable [UAVCAN_SUB_GPS](../advanced_config/parameter_reference.md#UAVCAN_SUB_GPS), [UAVCAN_SUB_MAG](../advanced_config/parameter_reference.md#UAVCAN_SUB_MAG), and [UAVCAN_SUB_BARO](../advanced_config/parameter_reference.md#UAVCAN_SUB_BARO). -- The parameters [EKF2_GPS_POS_X](../advanced_config/parameter_reference.md#EKF2_GPS_POS_X), [EKF2_GPS_POS_Y](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Y) and [EKF2_GPS_POS_Z](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Z) can be set to account for the offset of the ARK G5 RTK GPS from the vehicle's centre of gravity. +- The parameters [SENS_GPS0_OFFX](../advanced_config/parameter_reference.md#SENS_GPS0_OFFX), [SENS_GPS0_OFFY](../advanced_config/parameter_reference.md#SENS_GPS0_OFFY) and [SENS_GPS0_OFFZ](../advanced_config/parameter_reference.md#SENS_GPS0_OFFZ) can be set to account for the offset of the ARK G5 RTK GPS from the vehicle's centre of gravity. ## LED含义 diff --git a/docs/zh/dronecan/ark_g5_rtk_heading_gps.md b/docs/zh/dronecan/ark_g5_rtk_heading_gps.md index c8ffb4367e..9f6f03e5d2 100644 --- a/docs/zh/dronecan/ark_g5_rtk_heading_gps.md +++ b/docs/zh/dronecan/ark_g5_rtk_heading_gps.md @@ -99,11 +99,11 @@ You need to set necessary [DroneCAN](index.md) parameters and define offsets if - Enable GPS yaw fusion by setting bit 3 of [EKF2_GPS_CTRL](../advanced_config/parameter_reference.md#EKF2_GPS_CTRL) to true. - Enable GPS blending to ensure the heading is always published by setting [SENS_GPS_MASK](../advanced_config/parameter_reference.md#SENS_GPS_MASK) to 7 (all three bits checked). - Enable [UAVCAN_SUB_GPS](../advanced_config/parameter_reference.md#UAVCAN_SUB_GPS), [UAVCAN_SUB_MAG](../advanced_config/parameter_reference.md#UAVCAN_SUB_MAG), and [UAVCAN_SUB_BARO](../advanced_config/parameter_reference.md#UAVCAN_SUB_BARO). -- The parameters [EKF2_GPS_POS_X](../advanced_config/parameter_reference.md#EKF2_GPS_POS_X), [EKF2_GPS_POS_Y](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Y) and [EKF2_GPS_POS_Z](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Z) can be set to account for the offset of the ARK G5 RTK HEADING GPS from the vehicle's centre of gravity. +- The parameters [SENS_GPS0_OFFX](../advanced_config/parameter_reference.md#SENS_GPS0_OFFX), [SENS_GPS0_OFFY](../advanced_config/parameter_reference.md#SENS_GPS0_OFFY) and [SENS_GPS0_OFFZ](../advanced_config/parameter_reference.md#SENS_GPS0_OFFZ) can be set to account for the offset of the ARK G5 RTK HEADING GPS from the vehicle's centre of gravity. ### Parameter references -This GPS is using ARK's private driver, the prameters below only exist on the firmware we ship the GPS with. You can set these params either in QGC or using the DroneCAN GUI Tool. +This GPS is using ARK's private driver, the parameters below only exist on the firmware we ship the GPS with. You can set these params either in QGC or using the DroneCAN GUI Tool. #### SEP_OFFS_YAW (float) diff --git a/docs/zh/dronecan/ark_gps.md b/docs/zh/dronecan/ark_gps.md index f7284e0bae..2eb9cb566f 100644 --- a/docs/zh/dronecan/ark_gps.md +++ b/docs/zh/dronecan/ark_gps.md @@ -91,7 +91,7 @@ If the sensor is not centred within the vehicle you will also need to define sen - Enable GPS yaw fusion by setting bit 3 of [EKF2_GPS_CTRL](../advanced_config/parameter_reference.md#EKF2_GPS_CTRL) to true. - Enable [UAVCAN_SUB_GPS](../advanced_config/parameter_reference.md#UAVCAN_SUB_GPS), [UAVCAN_SUB_MAG](../advanced_config/parameter_reference.md#UAVCAN_SUB_MAG), and [UAVCAN_SUB_BARO](../advanced_config/parameter_reference.md#UAVCAN_SUB_BARO). -- The parameters [EKF2_GPS_POS_X](../advanced_config/parameter_reference.md#EKF2_GPS_POS_X), [EKF2_GPS_POS_Y](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Y) and [EKF2_GPS_POS_Z](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Z) can be set to account for the offset of the ARK GPS from the vehicles centre of gravity. +- The parameters [SENS_GPS0_OFFX](../advanced_config/parameter_reference.md#SENS_GPS0_OFFX), [SENS_GPS0_OFFY](../advanced_config/parameter_reference.md#SENS_GPS0_OFFY) and [SENS_GPS0_OFFZ](../advanced_config/parameter_reference.md#SENS_GPS0_OFFZ) can be set to account for the offset of the ARK GPS from the vehicles centre of gravity. ### ARK GPS Configuration diff --git a/docs/zh/dronecan/ark_rtk_gps.md b/docs/zh/dronecan/ark_rtk_gps.md index 595daaf686..67b13e58a1 100644 --- a/docs/zh/dronecan/ark_rtk_gps.md +++ b/docs/zh/dronecan/ark_rtk_gps.md @@ -84,8 +84,9 @@ You need to set necessary [DroneCAN](index.md) parameters and define offsets if - Enable GPS yaw fusion by setting bit 3 of [EKF2_GPS_CTRL](../advanced_config/parameter_reference.md#EKF2_GPS_CTRL) to true. - Enable GPS blending to ensure the heading is always published by setting [SENS_GPS_MASK](../advanced_config/parameter_reference.md#SENS_GPS_MASK) to 7 (all three bits checked). +- If using [Moving Baseline & GPS Heading](#setting-up-moving-baseline-gps-heading), set [SENS_GPS_PRIME](../advanced_config/parameter_reference.md#SENS_GPS_PRIME) to the CAN node ID of the _Moving Base_ module. The moving base is preferred because the rover receiver in a moving baseline configuration can experience degraded navigation rate and increased data latency when corrections are intermittent. - Enable [UAVCAN_SUB_GPS](../advanced_config/parameter_reference.md#UAVCAN_SUB_GPS), [UAVCAN_SUB_MAG](../advanced_config/parameter_reference.md#UAVCAN_SUB_MAG), and [UAVCAN_SUB_BARO](../advanced_config/parameter_reference.md#UAVCAN_SUB_BARO). -- The parameters [EKF2_GPS_POS_X](../advanced_config/parameter_reference.md#EKF2_GPS_POS_X), [EKF2_GPS_POS_Y](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Y) and [EKF2_GPS_POS_Z](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Z) can be set to account for the offset of the ARK RTK GPS from the vehicles centre of gravity. +- The parameters [SENS_GPS0_OFFX](../advanced_config/parameter_reference.md#SENS_GPS0_OFFX), [SENS_GPS0_OFFY](../advanced_config/parameter_reference.md#SENS_GPS0_OFFY) and [SENS_GPS0_OFFZ](../advanced_config/parameter_reference.md#SENS_GPS0_OFFZ) can be set to account for the offset of the ARK RTK GPS from the vehicles centre of gravity. ### ARK RTK GPS Configuration @@ -137,6 +138,7 @@ Setup via CAN: - On the _Moving Base_, set the following: - [GPS_UBX_MODE](../advanced_config/parameter_reference.md#GPS_UBX_MODE) to `4`. - [CANNODE_PUB_MBD](../advanced_config/parameter_reference.md#CANNODE_PUB_MBD) to `1`. +- On the _Flight Controller_, set [SENS_GPS_PRIME](../advanced_config/parameter_reference.md#SENS_GPS_PRIME) to the CAN node ID of the _Moving Base_ (see [PX4 Configuration](#px4-configuration)). Setup via UART: @@ -155,6 +157,7 @@ Setup via UART: - [GPS_YAW_OFFSET](../advanced_config/parameter_reference.md#GPS_YAW_OFFSET) to `0` if your _Rover_ is in front of your _Moving Base_, `90` if _Rover_ is right of _Moving Base_, `180` if _Rover_ is behind _Moving Base_, or `270` if _Rover_ is left of _Moving Base_. - On the _Moving Base_, set the following: - [GPS_UBX_MODE](../advanced_config/parameter_reference.md#GPS_UBX_MODE) to `2`. +- On the _Flight Controller_, set [SENS_GPS_PRIME](../advanced_config/parameter_reference.md#SENS_GPS_PRIME) to the CAN node ID of the _Moving Base_ (see [PX4 Configuration](#px4-configuration)). For more information see [Rover and Moving Base](../dronecan/index.md#rover-and-moving-base) in the DroneCAN guide. diff --git a/docs/zh/dronecan/ark_rtk_gps_l1_l2.md b/docs/zh/dronecan/ark_rtk_gps_l1_l2.md index 4260b6e3e0..6a2d0b07ef 100644 --- a/docs/zh/dronecan/ark_rtk_gps_l1_l2.md +++ b/docs/zh/dronecan/ark_rtk_gps_l1_l2.md @@ -85,7 +85,7 @@ You need to set necessary [DroneCAN](index.md) parameters and define offsets if - Enable GPS yaw fusion by setting bit 3 of [EKF2_GPS_CTRL](../advanced_config/parameter_reference.md#EKF2_GPS_CTRL) to true. - Enable GPS blending to ensure the heading is always published by setting [SENS_GPS_MASK](../advanced_config/parameter_reference.md#SENS_GPS_MASK) to 7 (all three bits checked). - Enable [UAVCAN_SUB_GPS](../advanced_config/parameter_reference.md#UAVCAN_SUB_GPS), [UAVCAN_SUB_MAG](../advanced_config/parameter_reference.md#UAVCAN_SUB_MAG), and [UAVCAN_SUB_BARO](../advanced_config/parameter_reference.md#UAVCAN_SUB_BARO). -- The parameters [EKF2_GPS_POS_X](../advanced_config/parameter_reference.md#EKF2_GPS_POS_X), [EKF2_GPS_POS_Y](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Y) and [EKF2_GPS_POS_Z](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Z) can be set to account for the offset of the ARK RTK GPS L1 L5 from the vehicles centre of gravity. +- The parameters [SENS_GPS0_OFFX](../advanced_config/parameter_reference.md#SENS_GPS0_OFFX), [SENS_GPS0_OFFY](../advanced_config/parameter_reference.md#SENS_GPS0_OFFY) and [SENS_GPS0_OFFZ](../advanced_config/parameter_reference.md#SENS_GPS0_OFFZ) can be set to account for the offset of the ARK RTK GPS L1 L5 from the vehicles centre of gravity. ### ARK RTK GPS L1 L5 Configuration diff --git a/docs/zh/dronecan/ark_x20_rtk_gps.md b/docs/zh/dronecan/ark_x20_rtk_gps.md index 1feb0bfb33..d7a52b80dc 100644 --- a/docs/zh/dronecan/ark_x20_rtk_gps.md +++ b/docs/zh/dronecan/ark_x20_rtk_gps.md @@ -88,7 +88,7 @@ You need to set necessary [DroneCAN](index.md) parameters and define offsets if - Enable GPS yaw fusion by setting bit 3 of [EKF2_GPS_CTRL](../advanced_config/parameter_reference.md#EKF2_GPS_CTRL) to true. - Enable GPS blending to ensure the heading is always published by setting [SENS_GPS_MASK](../advanced_config/parameter_reference.md#SENS_GPS_MASK) to 7 (all three bits checked). - Enable [UAVCAN_SUB_GPS](../advanced_config/parameter_reference.md#UAVCAN_SUB_GPS), [UAVCAN_SUB_MAG](../advanced_config/parameter_reference.md#UAVCAN_SUB_MAG), and [UAVCAN_SUB_BARO](../advanced_config/parameter_reference.md#UAVCAN_SUB_BARO). -- The parameters [EKF2_GPS_POS_X](../advanced_config/parameter_reference.md#EKF2_GPS_POS_X), [EKF2_GPS_POS_Y](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Y) and [EKF2_GPS_POS_Z](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Z) can be set to account for the offset of the ARK X20 RTK GPS from the vehicles centre of gravity. +- The parameters [SENS_GPS0_OFFX](../advanced_config/parameter_reference.md#SENS_GPS0_OFFX), [SENS_GPS0_OFFY](../advanced_config/parameter_reference.md#SENS_GPS0_OFFY) and [SENS_GPS0_OFFZ](../advanced_config/parameter_reference.md#SENS_GPS0_OFFZ) can be set to account for the offset of the ARK X20 RTK GPS from the vehicles centre of gravity. ### ARK X20 RTK GPS Configuration diff --git a/docs/zh/dronecan/escs.md b/docs/zh/dronecan/escs.md index 5d40bc879c..4833b407cb 100644 --- a/docs/zh/dronecan/escs.md +++ b/docs/zh/dronecan/escs.md @@ -5,7 +5,7 @@ PX4 supports DroneCAN compliant ESCs. ## Supported ESC :::info -[Supported ESCs](../peripherals/esc_motors#supported-esc) in _ESCs & Motors_ may include additional devices that are not listed below. +[Supported ESCs](../peripherals/esc_motors.md#supported-esc) in _ESCs & Motors_ may include additional devices that are not listed below. ::: The following articles have specific hardware/firmware information: diff --git a/docs/zh/dronecan/holybro_h_rtk_zed_f9p_gps.md b/docs/zh/dronecan/holybro_h_rtk_zed_f9p_gps.md index 56d4061e5a..bd949f4e94 100644 --- a/docs/zh/dronecan/holybro_h_rtk_zed_f9p_gps.md +++ b/docs/zh/dronecan/holybro_h_rtk_zed_f9p_gps.md @@ -86,7 +86,7 @@ DroneCAN configuration in PX4 is explained in more detail in [DroneCAN > Enablin ### Sensor Position Configuration -- For the the single Rover the module should be mounted with the included mast. +- For the single Rover the module should be mounted with the included mast. - For the Dual ZED-F9P setup (moving baseline), the DroneCAN modules should be placed at least 30cm apart on the airframe and elevated on a mast also. See the following [mast](https://holybro.com/products/30-antenna-mount?_pos=20&_sid=67b49d76b&_ss=r). - F9P module arrow(s) should be pointing forward with respect to the autopilot orientation. diff --git a/docs/zh/dronecan/holybro_m8n_gps.md b/docs/zh/dronecan/holybro_m8n_gps.md index 21faba299b..e446ab3d76 100644 --- a/docs/zh/dronecan/holybro_m8n_gps.md +++ b/docs/zh/dronecan/holybro_m8n_gps.md @@ -94,4 +94,4 @@ If the sensor is not centred within the vehicle you will also need to define sen - Enable GPS yaw fusion by setting bit 3 of [EKF2_GPS_CTRL](../advanced_config/parameter_reference.md#EKF2_GPS_CTRL) to true. - Enable [UAVCAN_SUB_GPS](../advanced_config/parameter_reference.md#UAVCAN_SUB_GPS), [UAVCAN_SUB_MAG](../advanced_config/parameter_reference.md#UAVCAN_SUB_MAG), and [UAVCAN_SUB_BARO](../advanced_config/parameter_reference.md#UAVCAN_SUB_BARO). - Set [CANNODE_TERM](../advanced_config/parameter_reference.md#CANNODE_TERM) to `1` if this is that last node on the CAN bus. -- The parameters [EKF2_GPS_POS_X](../advanced_config/parameter_reference.md#EKF2_GPS_POS_X), [EKF2_GPS_POS_Y](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Y) and [EKF2_GPS_POS_Z](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Z) can be set to account for the offset of the ARK GPS from the vehicles centre of gravity. +- The parameters [SENS_GPS0_OFFX](../advanced_config/parameter_reference.md#SENS_GPS0_OFFX), [SENS_GPS0_OFFY](../advanced_config/parameter_reference.md#SENS_GPS0_OFFY) and [SENS_GPS0_OFFZ](../advanced_config/parameter_reference.md#SENS_GPS0_OFFZ) can be set to account for the offset of the ARK GPS from the vehicles centre of gravity. diff --git a/docs/zh/dronecan/index.md b/docs/zh/dronecan/index.md index 24cccd66d5..4b0b48d3c3 100644 --- a/docs/zh/dronecan/index.md +++ b/docs/zh/dronecan/index.md @@ -158,7 +158,7 @@ DroneCAN peripherals connected to PX4 can also be [configured using parameters v By convention, parameters named with the prefix [CANNODE\_](../advanced_config/parameter_reference.md#CANNODE_BITRATE) have prefined meaning, and may be documented in the parameter reference. `CANNODE_` parameters prefixed with `CANNODE_PUB_` and `CANNODE_SUB_` enable the peripheral to publish or subscribe the associated DroneCAN message. These allow DroneCAN peripherals to be configured to only subscribe and publish messages that they actually need (in the same way that PX4 uses the corresponding `UAVCAN_PUB_`/`UAVCAN_SUB_` parameters). -Note that a peripheral might might not use `CANNODE_` parameters, in which case it may have to publish/subscribe to particular messages whether or not they are needed. +Note that a peripheral might not use `CANNODE_` parameters, in which case it may have to publish/subscribe to particular messages whether or not they are needed. The following sections provide additional detail on the PX4 and DroneCAN peripheral parameters used to enable particular features. @@ -194,7 +194,7 @@ GPS CANNODE parameter ([set using QGC](#qgc-cannode-parameter-configuration)): Other PX4 Parameters: -- If the GPS is not positioned at the vehicle centre of gravity you can account for the offset using [EKF2_GPS_POS_X](../advanced_config/parameter_reference.md#EKF2_GPS_POS_X), [EKF2_GPS_POS_Y](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Y) and [EKF2_GPS_POS_Z](../advanced_config/parameter_reference.md#EKF2_GPS_POS_Z). +- If the GPS is not positioned at the vehicle centre of gravity you can account for the offset using [SENS_GPS0_OFFX](../advanced_config/parameter_reference.md#SENS_GPS0_OFFX), [SENS_GPS0_OFFY](../advanced_config/parameter_reference.md#SENS_GPS0_OFFY) and [SENS_GPS0_OFFZ](../advanced_config/parameter_reference.md#SENS_GPS0_OFFZ). - If the GPS module provides yaw information, you can enable GPS yaw fusion by setting bit 3 of [EKF2_GPS_CTRL](../advanced_config/parameter_reference.md#EKF2_GPS_CTRL) to true. #### RTK GPS @@ -287,6 +287,14 @@ PX4 DroneCAN parameters: Select the specific CAN interface(s) used for ESC data output using the [UAVCAN_ESC_IFACE](../advanced_config/parameter_reference.md#UAVCAN_ESC_IFACE) parameter (all that all interfaces are selected by default). Note that DroneCAN ESCs should be on their own dedicated CAN interface(s) because ESC messages can saturate the bus and starve other nodes of bandwidth. +### Lights + +PX4 can control external LEDs on a connected DroneCAN peripheral using the standard DroneCAN [LightsCommand](https://dronecan.github.io/Specification/7._List_of_standard_data_types/#lightscommand) message. +Up to 2 lights acan be controlled. +Each light can independently show [system status colours](../getting_started/led_meanings.md#ui-led), a fixed colour (commonly used for indicating aircraft orientation), or switch between both depending on arm state. + +See [DroneCAN Lights](lights.md) for full configuration details. + ## QGC CANNODE Parameter Configuration QGroundControl can inspect and modify parameters belonging to CAN devices attached to the flight controller, provided the device are connected to the flight controller before QGC is started. diff --git a/docs/zh/dronecan/lights.md b/docs/zh/dronecan/lights.md new file mode 100644 index 0000000000..8cd2350398 --- /dev/null +++ b/docs/zh/dronecan/lights.md @@ -0,0 +1,61 @@ +# DroneCAN Lights + +PX4 can control external LEDs on a connected DroneCAN peripheral using the standard DroneCAN [LightsCommand](https://dronecan.github.io/Specification/7._List_of_standard_data_types/#lightscommand) message. + +Up to 2 lights are supported. +These can show [system status colours](../getting_started/led_meanings.md#ui-led), a fixed colour (used for indicating aircraft orientation), or switch between both depending on arm state. + +## 支持的 RTK 设备 + +Any DroneCAN peripheral implementing the standard `LightsCommand` message type should work. + +The following have been tested: + +- **Vertiq ESC LED add-ons**: Each ESC exposes two light IDs — one RGB (for status) and one white. + The `light_id` for each is calculated as `esc_index × 3 + BASE_ID`, where `BASE_ID` is 1 for RGB and 2 for white. + See [Vertiq](../peripherals/vertiq.md) for other ESC setup details. + +## PX4 配置 + +1. Set up DroneCAN as described in [DroneCAN](index.md) (`UAVCAN_ENABLE` ≥ 2). +2. Set [UAVCAN_LGT_NUM](../advanced_config/parameter_reference.md#UAVCAN_LGT_NUM) to the number of lights (1 or 2). + Then reboot and reopen the ground station so that parameters for the new instances become visible. +3. Set the `light_id` and [light functions](#light_functions) of each light: + - [UAVCAN_LGT_ID0](../advanced_config/parameter_reference.md#UAVCAN_LGT_ID0) / [UAVCAN_LGT_ID1](../advanced_config/parameter_reference.md#UAVCAN_LGT_ID1): Set to a `light_id` value (as defined by the specific product). + - [UAVCAN_LGT_FN0](../advanced_config/parameter_reference.md#UAVCAN_LGT_FN0) / [UAVCAN_LGT_FN1](../advanced_config/parameter_reference.md#UAVCAN_LGT_FN1): Choose the desired [light function](#light_functions). +4. Set [UAVCAN_LGT_MODE](#UAVCAN_LGT_MODE) to control when fixed "orientation" colours activate. +5. Reboot for changes to take effect. + +### Light Functions {#light_functions} + +The functions of enabled lights are configured using [UAVCAN_LGT_FN0](../advanced_config/parameter_reference.md#UAVCAN_LGT_FN0) and [UAVCAN_LGT_FN1](../advanced_config/parameter_reference.md#UAVCAN_LGT_FN1), respectively. +Each function is represented by a value that defines two behaviours: one when the activation mode is **inactive** and one when it is **active**. + +| 值 | 参数名 | When mode inactive | When mode active | +| - | ------------- | -------------------- | -------------------- | +| 0 | Status/Status | System status colour | System status colour | +| 1 | Off/White | Off | White | +| 2 | Off/Red | Off | Red | +| 3 | Off/Green | Off | 绿色 | +| 4 | Status/White | System status colour | White | +| 5 | Status/Red | System status colour | Red | +| 6 | Status/Green | System status colour | 绿色 | +| 7 | Status/Off | System status colour | Off | + +Notes: + +- The [system status colours](../getting_started/led_meanings.md#ui-led) is the same LED pattern used by the flight controller's onboard status LED (e.g. red when disarmed, green when armed and ready). +- A fixed colour, commonly used to indicate aircraft orientation. For example it is a common convention to have a red light on the port side, green on starboard, or white to the rear. + These colours do not change with flight controller state. +- For _hybrid_ functions, such as `Status/Red`, the light shows the Status colour while the activation mode is inactive, then switches to the "fixed" light colour once the mode becomes active. + +### Activation Mode (`UAVCAN_LGT_MODE`) {#UAVCAN_LGT_MODE} + +The activation mode parameter ([UAVCAN_LGT_MODE](#UAVCAN_LGT_MODE)) controls when each light switches from its _inactive_ to its _active_ behaviour (configured with the [Light function](#light_functions)): + +| 值 | 含义 | +| - | --------------------------------------------------------------------------- | +| 0 | Always inactive (lights always show the inactive column) | +| 1 | Active when armed (default) | +| 2 | Active when prearmed or armed | +| 3 | Always active (lights always show the active column) | diff --git a/docs/zh/esc/ark_4in1_esc.md b/docs/zh/esc/ark_4in1_esc.md index 1706c00a24..2f3f5d1695 100644 --- a/docs/zh/esc/ark_4in1_esc.md +++ b/docs/zh/esc/ark_4in1_esc.md @@ -58,6 +58,18 @@ Other - Open source AM32 firmware - [DIU Blue Framework Listed](https://www.diu.mil/blue-uas/framework) +## PX4 配置 + +The ARK 4IN1 ESC supports DShot 300/600, Bidirectional DShot, and PWM input protocols. + +- **Bidirectional DShot**: Select BDShot300 or BDShot600 in the [Actuator Configuration](../config/actuators.md) to enable eRPM telemetry. +- **[Extended DShot Telemetry (EDT)](https://github.com/bird-sanctuary/extended-dshot-telemetry)**: AM32 firmware supports EDT, which provides temperature, voltage, and current through the BDShot signal. Enable with `DSHOT_BIDIR_EDT=1`. +- **AM32 EEPROM Settings**: Set `DSHOT_ESC_TYPE=1` to enable reading and writing ESC firmware settings via a ground station. + +See [DShot ESCs](../peripherals/dshot.md) for full setup details. + ## 另见 - [ARK 4IN1 ESC CONS](https://docs.arkelectron.com/electronic-speed-controller/ark-4in1-esc) (ARK Docs) +- [DShot and Bidirectional DShot](https://brushlesswhoop.com/dshot-and-bidirectional-dshot/) (brushlesswhoop.com - General DShot reference) +- [Extended DShot Telemetry (EDT) Specification](https://github.com/bird-sanctuary/extended-dshot-telemetry) (bird-sanctuary) diff --git a/docs/zh/features_mc/index.md b/docs/zh/features_mc/index.md index 78e8970eb8..d64a5f41d1 100644 --- a/docs/zh/features_mc/index.md +++ b/docs/zh/features_mc/index.md @@ -3,7 +3,7 @@ This section lists features that are specific to (or customised for) multicopters: - [Flight Modes](../flight_modes_mc/index.md) -- [Collision Prevention](../computer_vision/collision_prevention.md) -- [Precision Landing](../advanced_features/precland.md) +- [碰撞预防](../computer_vision/collision_prevention.md) +- [精准着陆](../advanced_features/precland.md) - [Terrain Following/Holding](../flying/terrain_following_holding.md) - [Throw Launch](../flight_modes_mc/throw_launch.md) diff --git a/docs/zh/flight_controller/accton-godwit_ga1.md b/docs/zh/flight_controller/accton-godwit_ga1.md index 20e78c102b..eaec9d1707 100644 --- a/docs/zh/flight_controller/accton-godwit_ga1.md +++ b/docs/zh/flight_controller/accton-godwit_ga1.md @@ -5,7 +5,7 @@ PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://cubepilot.org/#/home) for hardware support or compliance issues. ::: -The G-A1 is a state-of-the-art flight controller developed derived from the [Pixhawk Autopilot v6X Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-012%20Pixhawk%20Autopilot%20v6X%20Standard.pdf). +The G-A1 is a state-of-the-art flight controller derived from the [Pixhawk Autopilot v6X Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-012%20Pixhawk%20Autopilot%20v6X%20Standard.pdf). It includes an STM32H753 double-precision floating-point FMU processor and an STM32F103 IO coprocessor, multiple IMUs with 6-axis inertial sensors, two pressure/temperature sensors, and a geomagnetic sensor. It also has independent buses and power supplies, and is designed for safety and rich expansion capabilities. @@ -65,7 +65,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo - 92.2 (L) x 51.2 (W) x 28.3 (H) mm - 77.6g (carrier board with IMU) -## 购买渠道 +## Where to Buy {#store} - [Accton-IoT Godwit](https://www.accton-iot.com/godwit/) - [sales@accton-iot.com](sales@accton-iot.com) @@ -115,7 +115,7 @@ PPM receivers should be connected to the PPM interface. And other RC systems can ## GPS/Compass -The Godwit G-A1 has a built-in compass +The Godwit G-A1 has a built-in compass. Due to potential interference, the autopilot is usually used with an external I2C compass as part of a GPS/Compass combination. ![G-A1 GPS](../../assets/flight_controller/accton-godwit/ga1/gps.png "G-A1 GPS") diff --git a/docs/zh/flight_controller/airlink.md b/docs/zh/flight_controller/airlink.md index 862c2baf8e..d8945d0d10 100644 --- a/docs/zh/flight_controller/airlink.md +++ b/docs/zh/flight_controller/airlink.md @@ -26,7 +26,7 @@ AIRLink has two computers and integrated LTE Module: ## 产品规格 - **Sensors** - - 3x Accelerometers, 3x Gyroscopes, 3x Magnetometers, 3x Pressure sensorss + - 3x Accelerometers, 3x Gyroscopes, 3x Magnetometers, 3x Pressure sensors - GNSS, Rangefinders, Lidars, Optical Flow, Cameras - 3x-redundant IMU - Vibration dampening @@ -59,7 +59,7 @@ AIRLink has two computers and integrated LTE Module: - Ethernet 10/100/1000 Native Gigabit - WiFi 802.11a/b/g/n/ac, Bluetooth - USB 3.0 Type C - - 2x Video: 4-Lane MIPI CSI (FPV Camera) and 4-Lane MIPI CSI with HMDI Input (Payload Camera) + - 2x Video: 4-Lane MIPI CSI (FPV Camera) and 4-Lane MIPI CSI with HDMI Input (Payload Camera) - **LTE/5G Connectivity Module** - Up to 600 Mbps bandwidth @@ -71,7 +71,7 @@ AIRLink has two computers and integrated LTE Module: - Antenna, 4x4 MIMO - Bands: Worldwide -## 购买渠道 +## Where to Buy {#store} Purchase from the original Sky-Drones Store (worldwide shipping with 1-2 days order processing time): @@ -92,7 +92,7 @@ The standard set contains: - 1x FPV camera with CSI cable - 1x WiFi antenna with MMCX connector - 2x/4x LTE/5G antenna with MMCX connector -- 1x HDMI to mini HDMI cable1x set of cables (7 cables for all connectors) +- 1x HDMI to mini HDMI cable, 1x set of cables (7 cables for all connectors) [AIRLink Telemetry](https://sky-drones.com/sets/airlink-telemetry-set.html) based on the Microhard LAN/IP-based RF micromodule is available as an add-on and is fully compatible with AIRLink. @@ -331,7 +331,7 @@ For PPM receivers please use RC Connector PPM pin located on the left side of th ## Outputs -AIRLink has 16 PWM ouputs. Main outputs 1-8 and connected to IO MCU. AUX outputs 1-8 are connected to FMU. +AIRLink has 16 PWM outputs. Main outputs 1-8 and connected to IO MCU. AUX outputs 1-8 are connected to FMU. | 输出 | Timer | Channel | | ----- | -------- | --------- | @@ -355,7 +355,7 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make sky-drones_smartap-airlink ``` diff --git a/docs/zh/flight_controller/ark_fpv.md b/docs/zh/flight_controller/ark_fpv.md index 0b2d4a33b7..d0053cca28 100644 --- a/docs/zh/flight_controller/ark_fpv.md +++ b/docs/zh/flight_controller/ark_fpv.md @@ -13,7 +13,7 @@ The USA-built ARK FPV flight controller is based on the [ARKV6X](https://arkelec This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). ::: -## Where To Buy +## Where To Buy {#store} Order from [Ark Electronics](https://arkelectron.com/product/arkv6x/) (US) @@ -76,7 +76,7 @@ See the documentation [Ark Electronics GitBook](https://arkelectron.gitbook.io/a ## 附加信息 -- Weight: 7.5 g g with MicroSD card +- Weight: 7.5 g with MicroSD card - Dimensions: 3.6 x 3.6 x 0.8 cm - USA Built - NDAA compliant - Heater: 1W for warming sensors in extreme cold diff --git a/docs/zh/flight_controller/ark_pab.md b/docs/zh/flight_controller/ark_pab.md index da170835ec..a2132de027 100644 --- a/docs/zh/flight_controller/ark_pab.md +++ b/docs/zh/flight_controller/ark_pab.md @@ -11,7 +11,7 @@ The PAB form factor enables the ARK PAB Carrier to be used with any [PAB-compati ![ARKPAB Main Photo](../../assets/flight_controller/arkpab/ark_pab_main.jpg) -### Where To Buy +### Where To Buy {#store} Order From [Ark Electronics](https://arkelectron.com/product/ark-pixhawk-autopilot-bus-carrier/) (US) @@ -39,7 +39,7 @@ Order From [Ark Electronics](https://arkelectron.com/product/ark-pixhawk-autopil - 6 Pin JST-GH - Dual CAN Ports - 4 Pin JST-GH -- Triple Telemetry Ports with Flow - Control +- Triple Telemetry Ports with Flow Control - 6 Pin JST-GH - Eight PWM Outputs - 10 Pin JST-GH diff --git a/docs/zh/flight_controller/ark_pi6x.md b/docs/zh/flight_controller/ark_pi6x.md index a8073e2658..becf04023e 100644 --- a/docs/zh/flight_controller/ark_pi6x.md +++ b/docs/zh/flight_controller/ark_pi6x.md @@ -1,10 +1,19 @@ # ARK Pi6X Flow +:::warning +PX4 does not manufacture this (or any) autopilot. +Contact the [manufacturer](https://arkelectron.com/contact-us/) for hardware support or compliance issues. +::: + The [ARK Pi6X Flow](https://arkelectron.gitbook.io/ark-documentation/flight-controllers/ark-pi6x-flow) integrates a Raspberry Pi Compute Module 4 (CM4) Carrier, [ARKV6X Flight Controller](../flight_controller/ark_v6x.md), [ARK Flow sensors](../dronecan/ark_flow.md) , [ARK PAB Power Module](../power_module/ark_pab_power_module.md), and a 4-in-1 ESC, all mounted onto one compact board. ![ARK Pi6X Flow Flight Controller](../../assets/flight_controller/ark_pi6x_flow/ark_pi6xflow.jpg) -## 购买渠道 +:::info +This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). +::: + +## Where to Buy {#store} Order this module from: diff --git a/docs/zh/flight_controller/ark_v6x.md b/docs/zh/flight_controller/ark_v6x.md index ffa3f4e172..42b9f1805e 100644 --- a/docs/zh/flight_controller/ark_v6x.md +++ b/docs/zh/flight_controller/ark_v6x.md @@ -5,7 +5,7 @@ PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://arkelectron.com/contact-us/) for hardware support or compliance issues. ::: -The USA-built [ARKV6X](\(https://arkelectron.gitbook.io/ark-documentation/flight-controllers/arkv6x\)) flight controller is based on the [FMUV6X and Pixhawk Autopilot Bus open source standards](https://github.com/pixhawk/Pixhawk-Standards). +The USA-built [ARKV6X](https://arkelectron.gitbook.io/ark-documentation/flight-controllers/arkv6x) flight controller is based on the [FMUV6X and Pixhawk Autopilot Bus open source standards](https://github.com/pixhawk/Pixhawk-Standards). With triple synced IMUs, data averaging, voting, and filtering is possible. The Pixhawk Autopilot Bus (PAB) form factor enables the ARKV6X to be used on any [PAB-compatible carrier board](../flight_controller/pixhawk_autopilot_bus.md), such as the [ARK Pixhawk Autopilot Bus Carrier](../flight_controller/ark_pab.md). @@ -16,7 +16,7 @@ The Pixhawk Autopilot Bus (PAB) form factor enables the ARKV6X to be used on any This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). ::: -## Where To Buy +## Where To Buy {#store} Order From [Ark Electronics](https://arkelectron.com/product/arkv6x/) (US) diff --git a/docs/zh/flight_controller/arkpab.md b/docs/zh/flight_controller/arkpab.md index dee03c10b2..e99ee9b8b6 100644 --- a/docs/zh/flight_controller/arkpab.md +++ b/docs/zh/flight_controller/arkpab.md @@ -1 +1,2 @@ + diff --git a/docs/zh/flight_controller/arkv6x.md b/docs/zh/flight_controller/arkv6x.md index f117e5345f..f3812b11af 100644 --- a/docs/zh/flight_controller/arkv6x.md +++ b/docs/zh/flight_controller/arkv6x.md @@ -1 +1,2 @@ + diff --git a/docs/zh/flight_controller/auav_x2.md b/docs/zh/flight_controller/auav_x2.md index 1e458c1d25..89f35a4ec1 100644 --- a/docs/zh/flight_controller/auav_x2.md +++ b/docs/zh/flight_controller/auav_x2.md @@ -1,92 +1,8 @@ -# AUAV-X2 自动驾驶仪 (停产) + - + diff --git a/docs/zh/flight_controller/autopilot_discontinued.md b/docs/zh/flight_controller/autopilot_discontinued.md index 18d11d1f96..cde3346757 100644 --- a/docs/zh/flight_controller/autopilot_discontinued.md +++ b/docs/zh/flight_controller/autopilot_discontinued.md @@ -6,26 +6,29 @@ They are listed because you may be using them in an existing drone, and because ## Autopilots -- [Drotek DroPix](../flight_controller/dropix.md) (FMUv2) -- [Omnibus F4 SD](../flight_controller/omnibus_f4_sd.md) -- [CUAV X7](../flight_controller/cuav_x7.md) -- [CUAV v5](../flight_controller/cuav_v5.md) (Pixhawk FMUv5) -- [CUAV Pixhack v3](../flight_controller/pixhack_v3.md) (FMUv3) -- [Aerotenna OcPoC-Zynq Mini](../flight_controller/ocpoc_zynq.md) -- [Holybro Pixhawk 4 Mini](../flight_controller/pixhawk4_mini.md) (FMUv5) -- [Holybro Kakute F7](../flight_controller/kakutef7.md) -- [Holybro Pixhawk Mini](../flight_controller/pixhawk_mini.md) (FMUv3) -- [Holybro Pixfalcon](../flight_controller/pixfalcon.md) (Pixhawk FMUv2) -- [Holybro Pix32](../flight_controller/holybro_pix32.md) (FMUv2) -- [ModalAI VOXL Flight](../flight_controller/modalai_voxl_flight.md) -- [ModalAI Flight Core v1](../flight_controller/modalai_fc_v1.md) -- [mRobotics-X2.1](../flight_controller/mro_x2.1.md) (FMUv2) -- [mRo AUAV-X2](../flight_controller/auav_x2.md) (Pixhawk FMUv2) -- [NXP FMUK66](../flight_controller/nxp_rddrone_fmuk66.md) (Discontinued) -- [3DR Pixhawk 1](../flight_controller/pixhawk.md) (Pixhawk FMUv2) +- _Drotek DroPix_ (FMUv2) — last published in [PX4 v1.13](https://docs.px4.io/v1.13/en/flight_controller/dropix) +- _Drotek Pixhawk 3 Pro_ (FMUv4pro) — last published in [PX4 v1.15](https://docs.px4.io/v1.15/en/flight_controller/pixhawk3_pro) +- _Omnibus F4 SD_ — last published in [PX4 v1.15](https://docs.px4.io/v1.15/en/flight_controller/omnibus_f4_sd) +- _CUAV X7_ — last published in [PX4 v1.16](https://docs.px4.io/v1.16/en/flight_controller/cuav_x7) +- _CUAV v5_ (Pixhawk FMUv5) — last published in [PX4 v1.16](https://docs.px4.io/v1.16/en/flight_controller/cuav_v5) +- _CUAV Pixhack v3_ (FMUv3) — last published in [PX4 v1.15](https://docs.px4.io/v1.15/en/flight_controller/pixhack_v3) +- _Aerotenna OcPoC-Zynq Mini_ — last published in [PX4v1.11](https://docs.px4.io/v1.11/en/flight_controller/ocpoc_zynq#aerotenna-ocpoc-zynq-mini-flight-controller) +- _Holybro Pixhawk 4 Mini_ (FMUv5) -— last published in [PX4 v1.16](https://docs.px4.io/v1.16/en/flight_controller/pixhawk4_mini) +- _Holybro Kakute F7_ — Marked as discontinued in PX4 v1.15. + Last published in [PX4 v1.17](https://docs.px4.io/v1.17/en/flight_controller/kakutef7). +- _Holybro Pixhawk Mini_ (FMUv3) — last published in [PX4 v1.16](https://docs.px4.io/v1.16/en/flight_controller/pixhawk_mini) +- _Holybro Pixfalcon_ (Pixhawk FMUv2) — last published in [PX4 v1.16](https://docs.px4.io/v1.16/en/flight_controller/pixfalcon) +- _Holybro Pix32_ (FMUv2) — last published in [PX4 v1.16](https://docs.px4.io/v1.16/en/flight_controller/holybro_pix32) +- _ModalAI VOXL Flight_ — last published in [PX4 v1.16](https://docs.px4.io/v1.16/en/flight_controller/modalai_voxl_flight) +- _ModalAI Flight Core v1_ — last published in [PX4 v1.11](https://docs.px4.io/v1.11/en/flight_controller/modalai_fc_v1) +- _mRobotics-X2.1_ (FMUv2) — last published in [PX4 v1.16](https://docs.px4.io/v1.16/en/flight_controller/mro_x2.1) +- _mRo AUAV-X2_ (Pixhawk FMUv2) — last published in [PX4 v1.15](https://docs.px4.io/v1.15/en/flight_controller/auav_x2) +- _NXP RDDRONE-FMUK66 FMU_ — last published in [PX4 v1.15 docs](https://docs.px4.io/v1.15/en/flight_controller/nxp_rddrone_fmuk66) +- _3DR Pixhawk 1_ (Pixhawk FMUv2) — last published in [PX4 v1.15](https://docs.px4.io/v1.15/en/flight_controller/pixhawk) ## 整机 -- [BetaFPV Beta75X 2S Brushless Whoop](https://docs.px4.io/v1.14/en/complete_vehicles/betafpv_beta75x.html#betafpv-beta75x-2s-brushless-whoop) (circa PX4 v1.14) -- [Intel® Aero RTF Drone](https://docs.px4.io/v1.12/en/complete_vehicles/intel_aero.html) (circa PX4 v1.12) -- [Qualcomm Snapdragon Flight](https://docs.px4.io/v1.11/en/flight_controller/snapdragon_flight.html) (circa PX4 v1.11) +- _Bitcraze Crazyflie 2.0_ — last published in [PX4 v1.15](https://docs.px4.io/v1.15/en/complete_vehicles_mc/crazyflie2) +- _BetaFPV Beta75X 2S Brushless Whoop_ — last published in [PX4 v1.14](https://docs.px4.io/v1.14/en/complete_vehicles/betafpv_beta75x#betafpv-beta75x-2s-brushless-whoop) +- _Intel® Aero RTF Drone_ — last published in [PX4 v1.12](https://docs.px4.io/v1.12/en/complete_vehicles/intel_aero) +- _Qualcomm Snapdragon Flight_ — last published in [PX4 v1.11](https://docs.px4.io/v1.11/en/flight_controller/snapdragon_flight) diff --git a/docs/zh/flight_controller/autopilot_manufacturer_supported.md b/docs/zh/flight_controller/autopilot_manufacturer_supported.md index 1468aa5b55..cf0e3aa8e8 100644 --- a/docs/zh/flight_controller/autopilot_manufacturer_supported.md +++ b/docs/zh/flight_controller/autopilot_manufacturer_supported.md @@ -18,10 +18,12 @@ The boards in this category are: - [ARK Electronics ARKV6X](../flight_controller/ark_v6x.md) (and [ARK Electronics Pixhawk Autopilot Bus Carrier](../flight_controller/ark_pab.md)) - [ARK FPV Flight Controller](../flight_controller/ark_fpv.md) - [ARK Pi6X Flow Flight Controller](../flight_controller/ark_pi6x.md) -- [CUAV Nora](../flight_controller/cuav_nora.md)(CUAV X7 variant) +- [CORVON 743v1](../flight_controller/corvon_743v1.md) +- [CUAV Nora](../flight_controller/cuav_nora.md) (CUAV X7 variant) - [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) - [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) diff --git a/docs/zh/flight_controller/beaglebone_blue.md b/docs/zh/flight_controller/beaglebone_blue.md index ec3ab9ee27..34f419c894 100644 --- a/docs/zh/flight_controller/beaglebone_blue.md +++ b/docs/zh/flight_controller/beaglebone_blue.md @@ -4,10 +4,10 @@ :::warning PX4 does not manufacture this (or any) autopilot. -Contact the [manufacturer](https://beagleboard.org/blue) for hardware support or compliance issues. +Contact the [manufacturer](https://www.beagleboard.org/boards/beaglebone-blue) for hardware support or compliance issues. ::: -[BeagleBone Blue](https://beagleboard.org/blue) is an all-in-one Linux-based computer. +[BeagleBone Blue](https://www.beagleboard.org/boards/beaglebone-blue) is an all-in-one Linux-based computer. Although it is optimized for robotics, this compact and inexpensive board has all necessary sensors and peripherals needed by a flight controller. This topic shows how to set up the board to run PX4 with [librobotcontrol](https://github.com/beagleboard/librobotcontrol) robotics package. @@ -17,11 +17,11 @@ This topic shows how to set up the board to run PX4 with [librobotcontrol](https _BeagleBone Blue_ images can be found here: -- [Latest stable OS image](https://beagleboard.org/latest-images). +- [Latest stable OS image](https://www.beagleboard.org/distros). - [Test OS images](https://rcn-ee.net/rootfs/bb.org/testing/) (updated frequently). Information about flashing OS images can be found on [this page](https://github.com/beagleboard/beaglebone-blue/wiki/Flashing-firmware). -Other useful information can be found in the [FAQ](https://github.com/beagleboard/beaglebone-blue/wiki/Frequently-Asked-Questions-\(FAQ\)). +Other useful information can be found in the [FAQ](https://github.com/beagleboard/beaglebone-blue/wiki/Frequently-Asked-Questions-(FAQ)). :::tip Optionally you can update to a realtime kernel, and if you do, re-check if _librobotcontrol_ works properly with the realtime kernel. @@ -79,7 +79,7 @@ echo "PermitRootLogin yes" >> /etc/ssh/sshd_config && systemctl restart sshd For _rsync_ over SSH with key authentication, follow the steps here (on the development machine): 1. Generate an SSH key if you have not previously done so: - ``` + ```sh ssh-keygen -t rsa ``` @@ -89,13 +89,13 @@ echo "PermitRootLogin yes" >> /etc/ssh/sshd_config && systemctl restart sshd 2. Define the BeagleBone Blue board as `beaglebone` in **/etc/hosts** and copy the public SSH key to the board for password-less SSH access: - ``` + ```sh ssh-copy-id debian@beaglebone ``` 3. Alternatively you can use the beaglebone's IP directly: - ``` + ```sh ssh-copy-id debian@ ``` @@ -116,7 +116,7 @@ echo "PermitRootLogin yes" >> /etc/ssh/sshd_config && systemctl restart sshd The ARM Cross Compiler for _BeagleBone Blue_ can be found at [Linaro Toolchain Binaries site](https://www.linaro.org/downloads/#gnu_and_llvm). - :::tip + ::: tip GCC in the toolchain should be compatible with kernel in _BeagleBone Blue_. General rule of thumb is to choose a toolchain where version of GCC is not higher than version of GCC which comes with the OS image on _BeagleBone Blue_. @@ -131,7 +131,7 @@ echo "PermitRootLogin yes" >> /etc/ssh/sshd_config && systemctl restart sshd tar -xf gcc-linaro-13.0.0-2022.06-x86_64_arm-linux-gnueabihf.tar.xz ``` - :::tip + ::: tip The GCC version of the toolchain should be compatible with kernel in _BeagleBone Blue_. ::: @@ -151,7 +151,7 @@ echo "PermitRootLogin yes" >> /etc/ssh/sshd_config && systemctl restart sshd 3. Setup other dependencies by downloading the PX4 source code and then running the setup scripts: - ```` + ````sh git clone https://github.com/PX4/PX4-Autopilot.git --recursive ols ``` @@ -170,7 +170,7 @@ echo "PermitRootLogin yes" >> /etc/ssh/sshd_config && systemctl restart sshd Compile and Upload -``` +```sh make beaglebone_blue_default upload ``` @@ -189,9 +189,7 @@ sudo ./bin/px4 -s px4.config Currently _librobotcontrol_ requires root access. ::: - - -## 本机构建(可选) +## Native Builds (optional) {#native_builds} You can also natively build PX4 builds directly on the BeagleBone Blue. @@ -216,7 +214,7 @@ Run the following commands on the BeagleBone Blue (i.e. via SSH): ## Changes in config -All changes can be made in de px4.config file directly on beaglebone. +All changes can be made in the px4.config file directly on beaglebone. For example, you can change the WIFI to wlan. :::info @@ -295,8 +293,6 @@ For a quadcopter with GPS and an SBUS receiver, here are typical connections: 1. 将电机 1,2,3 和 4 的电调连接到伺服输出的通道 1,2,3和4 分别在 BeagleBone Blue 上。 如果您的电调连接器包含电源输出引脚,将其移除,不要将其连接到伺服通道的电源输出引脚在 BeagleBone Blue 上。 - 2. Connect the above mentioned converted SBUS signal to the dsm2 port if you have the matching connector for dsm2, otherwise connect it to any other available UART port and change the corresponding port in **/home/debian/px4/px4.config** accordingly. - 3. 将 GPS 模块的信号连接到 BeagleBone Blue 上的 GPS 端口。 Note that the signal pins of the GPS port on the BeagleBone Blue are only 3.3V tolerant, so choose your GPS module accordingly. diff --git a/docs/zh/flight_controller/corvon_743v1.md b/docs/zh/flight_controller/corvon_743v1.md new file mode 100644 index 0000000000..cc543ddbed --- /dev/null +++ b/docs/zh/flight_controller/corvon_743v1.md @@ -0,0 +1,112 @@ +# CORVON 743v1 + + + +:::warning +PX4 does not manufacture this (or any) autopilot. Contact the manufacturer for hardware support or compliance issues. +::: + +The _CORVON 743v1_ is a flight controller designed by Feikong Technology Co., Ltd under the CORVON brand. +It features a powerful STM32H743 processor, dual high-performance IMUs (BMI088/BMI270), and an extensive array of interfaces. + +With its highly integrated 36x36mm footprint and 9g weight, and specialized interfaces like a direct plug-and-play DJI O3 Air Unit connector, this flight controller is optimized for space-constrained FPV builds and agile multirotors that require top-tier processing power and sensor redundancy. + +The board uses [Pixhawk Autopilot Standard Connections](https://docs.px4.io/main/en/flight_controller/autopilot_pixhawk_standard.html). + + + +:::info +This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). +::: + +## 主要特性 + +- **MCU:** STM32H743VIT6 MCU (32 Bit Arm® Cortex®-M7, 480MHz, 2MB Flash, 1MB RAM) +- **IMU:** Bosch BMI088, BMI270 (Dual IMU redundancy) +- **Barometer:** DPS310 +- **Magnetometer:** IST8310 +- **OSD:** Onboard AT7456E +- **Interfaces:** + - 7x UARTs + - 1x CAN (UAVCAN) + - 1x I2C + - Dedicated RC Input (UART6) + - 10x PWM outputs (DShot & Bi-Directional DShot supported) + - Dedicated DJI O3 Air Unit connector +- **Power:** + - 9V 3A BEC + - 5V 3A BEC + - ADC for battery voltage (up to 6S) and current monitoring + +## 购买渠道 + +Order from [CORVON](https://corvon.tech). + +## Physical / Mechanical + +- **Mounting:** 30.5 x 30.5mm, Φ4mm +- **Dimensions:** 36 x 36 x 8 mm +- **Weight:** 9g + +## 产品规格 + +### Processors & Sensors + +- **FMU Processor:** STM32H743 + - 32 Bit Arm® Cortex®-M7, 480MHz + - 2MB Flash, 1MB RAM +- **On-board Sensors:** + - Accel/Gyro: Bosch BMI088, BMI270 + - Barometer: DPS310 + - Compass: IST8310 + +### Power Configuration + +The board has an internal voltage sensor and connections on the ESC connector for an external current sensor. + +- The voltage sensor handles up to 6S LiPo batteries. +- Two onboard BECs provide robust peripheral power (9V 3A and 5V 3A). + +## Connectors & Pinouts + +The following image shows the port connection details, including RC, UARTs, CAN, I2C, SWD Debug, and VTX connections. + + + +### Standard Serial Port Mapping + +| UART | PX4 Target Config | Default Usage | +| ------ | ----------------- | ------------- | +| USART1 | TELEM1 | MAVLink | +| UART4 | TELEM2 | MAVLink | +| USART2 | GPS1 | GPS | +| USART3 | TELEM3 | | +| UART8 | URT6 | | +| USART6 | RC | RC Input | +| UART7 | TELEM4 | ESC Telemetry | + +### 调试接口 + +The board features a **4-pin SWD Debug** interface located on the right side of the board. This includes `SWCLK`, `SWDIO`, `3V3`, and `GND` for full hardware debugging. While a dedicated UART isn't strictly reserved for the NSH console by default, the full-speed USB connection provides MAVLink Console access out of the box. + +### RC Input + +RC Input is mapped to **UART6** via the explicit `SBUS/CRSF` connector block. + +- It fully supports PX4's standard `RC_INPUT` module protocols. +- The connector exposes both `RX6` and `TX6`, which makes it fully capable of bidirectional receiver protocols such as TBS Crossfire (CRSF), ELRS, and FPort, as well as traditional single-wire standards like SBUS (which operates inverted on RX6). + +## Building/Loading Firmware + +:::tip +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 from source: + +```sh +make corvon_743v1_default +``` + +Initial firmware flashing can be done over USB via QGroundControl. The bootloader status aligns with standard generic PX4 LED indications (Red = Bootloader/Error, Blue = Active/Activity, Green = Powered). diff --git a/docs/zh/flight_controller/cuav_nora.md b/docs/zh/flight_controller/cuav_nora.md index 6f818a780e..278f0a987b 100644 --- a/docs/zh/flight_controller/cuav_nora.md +++ b/docs/zh/flight_controller/cuav_nora.md @@ -5,7 +5,7 @@ PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://www.cuav.net) for hardware support or compliance issues. ::: -The [Nora](https://doc.cuav.net/flight-controller/x7/en/nora.html)® flight controller is a high-performance autopilot. +The [Nora](https://doc.cuav.net/controller/x7/en/nora-plus.html)® flight controller is a high-performance autopilot. It is an ideal choice for industrial drones and large-scale heavy-duty drones. It is mainly supplied to commercial manufacturers. @@ -31,7 +31,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo - High performance processor :::tip -The manufacturer [CUAV Docs](https://doc.cuav.net/flight-controller/x7/en/nora.html) are the canonical reference for Nora. +The manufacturer [CUAV Docs](https://doc.cuav.net/controller/x7/en/nora-plus.html) are the canonical reference for Nora. They should be used by preference as they contain the most complete and up to date information. ::: @@ -76,14 +76,14 @@ When it runs PX4 firmware, only 8 PWM outputs work. The remaining 6 PWM ports are still being adapted (so it is not compatible with VOLT at time of writing). ::: -## 购买渠道 +## Where to Buy {#store} - [CUAV Store](https://store.cuav.net)<\br> - [CUAV Aliexpress](https://www.aliexpress.com/item/4001042501927.html?gps-id=8041884&scm=1007.14677.110221.0&scm_id=1007.14677.110221.0&scm-url=1007.14677.110221.0&pvid=3dc0a3ba-fa82-43d2-b0b3-6280e4329cef&spm=a2g0o.store_home.promoteRecommendProducts_7913969.58) ## Connections (Wiring) -[CUAV nora Wiring Quickstart](https://doc.cuav.net/flight-controller/x7/en/quick-start/quick-start-nora.html) +[CUAV nora Wiring Quickstart](https://doc.cuav.net/controller/x7/en/quick-start/quick-start-nora.html) ## Size and Pinouts @@ -120,7 +120,7 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make cuav_nora_default ``` @@ -171,6 +171,6 @@ The complete set of supported configurations can be seen in the [Airframes Refer ## 更多信息 -- [Quick start](https://doc.cuav.net/flight-controller/x7/en/quick-start/quick-start-nora.html) +- [Quick start](https://doc.cuav.net/controller/x7/en/quick-start/quick-start-nora.html) - [CUAV docs](https://doc.cuav.net/) - [nora schematic](https://github.com/cuav/hardware/tree/master/X7_Autopilot) diff --git a/docs/zh/flight_controller/cuav_pixhawk_v6x.md b/docs/zh/flight_controller/cuav_pixhawk_v6x.md index ab6bf390fa..fd6fda8716 100644 --- a/docs/zh/flight_controller/cuav_pixhawk_v6x.md +++ b/docs/zh/flight_controller/cuav_pixhawk_v6x.md @@ -61,7 +61,7 @@ The Pixhawk® V6X is ideal for corporate research labs, academic research and co - 16- PWM servo outputs - 1 Dedicated R/C input for Spektrum / DSM and S.Bus with analog / PWM RSSI input - 3 TELEM Ports(with full flow control) -- 1 UART4(Seial and I2C) +- 1 UART4(Serial and I2C) - 2 GPS ports - 1 full GPS plus Safety Switch Port(GPS1) - 1 basic GPS port(with I2C,GPS2) @@ -104,7 +104,7 @@ The Pixhawk® V6X is ideal for corporate research labs, academic research and co ![Pixhawk V6X](../../assets/flight_controller/cuav_pixhawk_v6x/core.png) -## 购买渠道 +## Where to Buy {#store} Order from [CUAV](https://store.cuav.net/). @@ -116,7 +116,7 @@ The [Pixhawk V6X Wiring Quick Start](../assembly/quick_start_cuav_pixhawk_v6x.md ![Pixhawk V6x Pinout](../../assets/flight_controller/cuav_pixhawk_v6x/pixhawk_v6x_pinouts.png) -备注: +Notes: - The [camera capture pin](../camera/fc_connected_camera.md#camera-capture-configuration) (`PI0`) is pin 2 on the AD&IO port, marked above as `FMU_CAP1`. @@ -173,13 +173,11 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make px4_fmu-v6x_default ``` - - -## 调试接口 +## Debug Port {#debug_port} The [PX4 System Console](../debug/system_console.md) and [SWD interface](../debug/swd_debug.md) run on the **FMU Debug** port. diff --git a/docs/zh/flight_controller/cuav_v5.md b/docs/zh/flight_controller/cuav_v5.md index ff0e71024c..ed3719fbc0 100644 --- a/docs/zh/flight_controller/cuav_v5.md +++ b/docs/zh/flight_controller/cuav_v5.md @@ -1,149 +1,7 @@ + + + - -:::warning -This flight controller has been [discontinued](../flight_controller/autopilot_experimental.md) and is no longer commercially available. -::: - -:::warning -PX4 does not manufacture this (or any) autopilot. -Contact the [manufacturer](https://store.cuav.net/) for hardware support or compliance issues. -::: - -_CUAV v5_® (previously "Pixhack v5") is an advanced autopilot designed and made by CUAV®. -The board is based on the [Pixhawk-project](https://pixhawk.org/) **FMUv5** open hardware design. -It runs PX4 on the [NuttX](https://nuttx.apache.org/) OS, and is fully compatible with PX4 firmware. -It is intended primarily for academic and commercial developers. - -![CUAV v5](../../assets/flight_controller/cuav_v5/pixhack_v5.jpg) - -## 总览 - -- 主处理器:STM32F765 - - 32 位 Arm® Cortex®-M7,216MHz,2MB 储存,512KB RAM - -- IO 处理器:STM32F100 - - 32 位 Arm® Cortex®-M3,24MHz,8KB SRAM - -- 内置传感器: - - 加速度计/陀螺仪:ICM-20689 - - 加速度计/陀螺仪:BMI055 - - 磁力计:IST8310 - - 气压计:MS5611 - -- 接口: - - 14路PWM输出 (6路来自FMU, 8路来自 IO) - - FMU上有3个专用PWM/Capture输入 - - CPPM专用的RC输入 - - Dedicated R/C input for PPM and S.Bus - - 电平/PWM RSSI输入 - - S.BUS伺服输出 - - 5个通用串行口 - - 4路I2C总线 - - 4路SPI总线 - - 2 CANBuses with serial ESC - - 2个电池电流/电压模拟输入口 - -- 电源系统 - - 输入电压:4.3~5.4V - - USB输入电压: 4.75~5.25V - - 伺服导轨输入电压:0~36V - -- 重量和尺寸: - - 重量:99g - - 尺寸:44_84_12mm - -- 其它特性: - - 工作温度:-20 ~ 80°C (实测值) - -## 购买渠道 - -Order from [CUAV](https://cuav.taobao.com/index.htm?spm=2013.1.w5002-16371268426.2.411f26d9E18eAz). - -## 接口定义 - -![CUAV v5](../../assets/flight_controller/cuav_v5/pixhack_v5_connector.jpg) - -:::warning -The RCIN interface is limited to powering the rc receiver and cannot be connected to any power/load. -::: - -## 额定电压 - -_CUAV v5_ can be triple-redundant on the power supply if three power sources are supplied. The three power rails are: **POWER1**, **POWER2** and **USB**. - -:::info -The output power rails **FMU PWM OUT** and **I/O PWM OUT** (0V to 36V) do not power the flight controller board (and are not powered by it). -You must supply power to one of **POWER1**, **POWER2** or **USB** or the board will be unpowered. -::: - -**Normal Operation Maximum Ratings** - -Under these conditions all power sources will be used in this order to power the system: - -1. **POWER1** and **POWER2** inputs (4.3V to 5.4V) -2. **USB** input (4.75V to 5.25V) - -## 编译固件 - -:::tip -Most users will not need to build this firmware! -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: - -``` -make px4_fmu-v5_default -``` - -## 调试接口 - -The [PX4 System Console](../debug/system_console.md) and [SWD interface](../debug/swd_debug.md) operate on the **FMU Debug** port. -Simply connect the FTDI cable to the Debug & F7 SWD connector. -To access the I/O Debug port, the user must remove the CUAV v5 shell. -Both ports have standard serial pins and can be connected to a standard FTDI cable (3.3V, but 5V tolerant). - -The pinout is as shown. - -![CUAV v5 debug](../../assets/flight_controller/cuav_v5/pixhack_v5_debug.jpg) - -| 引脚 | CUAV v5 debug | -| -- | ----------------------------- | -| 1 | GND | -| 2 | FMU-swclk | -| 3 | FMU-SWDIO | -| 4 | UART7_RX | -| 5 | UART7_TX | -| 6 | VCC | - -## 串口映射 - -| UART | 设备 | Port | -| ------ | ---------- | ---------------------------------------------------------- | -| UART1 | /dev/ttyS0 | GPS | -| USART2 | /dev/ttyS1 | TELEM1 (流控) | -| USART3 | /dev/ttyS2 | TELEM2 (流控) | -| UART4 | /dev/ttyS3 | TELEM4 | -| USART6 | /dev/ttyS4 | TX is RC input from SBUS_RC connector | -| UART7 | /dev/ttyS5 | 调试控制台 | -| UART8 | /dev/ttyS6 | PX4IO | - - - -## 外部设备 - -- [Digital Airspeed Sensor](https://item.taobao.com/item.htm?spm=a1z10.3-c-s.w4002-16371268452.37.6d9f48afsFgGZI&id=9512463037) -- [Telemetry Radio Modules](https://cuav.taobao.com/category-158480951.htm?spm=2013.1.w5002-16371268426.4.410b7a821qYbBq&search=y&catName=%CA%FD%B4%AB%B5%E7%CC%A8) -- [Rangefinders/Distance sensors](../sensor/rangefinders.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). - -## 更多信息 - -- [FMUv5 reference design pinout](https://docs.google.com/spreadsheets/d/1-n0__BYDedQrc_2NHqBenG1DNepAgnHpSGglke-QQwY/edit#gid=912976165). -- [CUAV Github](https://github.com/cuav) +DOC REMOVED: 202603 +--> diff --git a/docs/zh/flight_controller/cuav_v5_nano.md b/docs/zh/flight_controller/cuav_v5_nano.md index 61e70fd514..b38ae0487a 100644 --- a/docs/zh/flight_controller/cuav_v5_nano.md +++ b/docs/zh/flight_controller/cuav_v5_nano.md @@ -60,7 +60,7 @@ Main FMU Processor: STM32F765◦32 Bit Arm® Cortex®-M7, 216MHz, 2MB memory, 51 - 其它特性: - 工作温度:-20 ~ 85°C (实测值) -## 购买渠道 +## Where to Buy {#store} [CUAV Store](https://store.cuav.net/shop/v5-nano/) @@ -91,13 +91,11 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make px4_fmu-v5_default ``` - - -## 调试接口 +## Debug Port {#debug_port} The [PX4 System Console](../debug/system_console.md) and [SWD interface](../debug/swd_debug.md) operate on the **FMU Debug** port (`DSU7`). The board does not have an I/O debug interface. diff --git a/docs/zh/flight_controller/cuav_v5_plus.md b/docs/zh/flight_controller/cuav_v5_plus.md index 1825d829f8..aa7a975d16 100644 --- a/docs/zh/flight_controller/cuav_v5_plus.md +++ b/docs/zh/flight_controller/cuav_v5_plus.md @@ -63,7 +63,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo - 其它特性: - Operating temperature: -20 ~ 80°c(Measured value) -## 购买渠道 +## Where to Buy {#store} [CUAV Aliexpress](https://www.aliexpress.com/item/32890380056.html?spm=a2g0o.detail.1000060.1.7a7233e7mLTlVl&gps-id=pcDetailBottomMoreThisSeller&scm=1007.13339.90158.0&scm_id=1007.13339.90158.0&scm-url=1007.13339.90158.0&pvid=d899bfab-a7ca-46e1-adf2-72ad1d649822) (International users) @@ -119,7 +119,7 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make px4_fmu-v5_default ``` @@ -210,7 +210,7 @@ The UAVCAN [NEO V2 PRO GNSS receiver](https://doc.cuav.net/gps/neo-series-gnss/e `DSU7` FMU Debug Pin 1 is 5 volts - not the 3.3 volts of the CPU. -Some JTAG use this voltage to set the IO levels when communicating to the target. +Some JTAG adapters use this voltage to set the IO levels when communicating to the target. For direct connection to _Segger Jlink_ we recommended you use the 3.3 Volts of DSM/SBUS/RSSI pin 4 as Pin 1 on the debug connector (`Vtref`). diff --git a/docs/zh/flight_controller/cuav_x25-evo.md b/docs/zh/flight_controller/cuav_x25-evo.md index 4741da8858..e7f678b64b 100644 --- a/docs/zh/flight_controller/cuav_x25-evo.md +++ b/docs/zh/flight_controller/cuav_x25-evo.md @@ -9,7 +9,7 @@ The _X25-EVO_ is an advanced autopilot manufactured by CUAV®. The autopilot is recommended for commercial system integration but is also suitable for academic research and any other applications. -![X25-EVO AutoPilot - hero image](../../assets/flight_controller/cuav_x25-evo/X25-EVO.jpg) +![X25-EVO AutoPilot - hero image](../../assets/flight_controller/cuav_x25-evo/x25_evo.jpg) The X25-EVO brings you ultimate performance, stability, and reliability in every aspect. @@ -19,12 +19,17 @@ These flight controllers are [manufacturer supported](../flight_controller/autop ### 特性 -- 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 ### 接口 - 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,19 +88,24 @@ These flight controllers are [manufacturer supported](../flight_controller/autop ### Mechanical Data -- Not provided. +- 重量 + - Flight Controller Module: 110g +- Operating & storage temperature: -20 ~ 85°C +- Dimensions: -## Purchase Channels + ![CUAV X25 EVO](../../assets/flight_controller/cuav_x25-evo/x25_evo_size.png) + +## Purchase Channels {#store} Order from [CUAV](https://store.cuav.net/). ## 组装 / 设置 -- Not provided. +The [X25 EVO Wiring Quick Start](../assembly/quick_start_cuav_x25_evo.md) provides instructions on how to assemble required/important peripherals including GPS, Power Module etc. -## Pin Definitions +## 针脚定义 -- Not provided. +![CUAV X25 EVO Pinout](../../assets/flight_controller/cuav_x25-evo/x25_evo_pinouts.jpg) ## 串口映射 @@ -106,12 +116,34 @@ Order from [CUAV](https://store.cuav.net/). | USART3 | /dev/ttyS2 | 调试控制台 | | UART4 | /dev/ttyS3 | UART4 | | UART5 | /dev/ttyS4 | TELEM2 | -| USART6 | /dev/ttyS5 | RC | +| USART6 | /dev/ttyS5 | RC IN | | UART7 | /dev/ttyS6 | TELEM1 | +## PWM Outputs {#pwm_outputs} + +This flight controller supports up to 16 FMU PWM outputs (MAIN). + +Outputs: + +- Outputs 1-8 support [DShot](../peripherals/dshot.md). +- Outputs 9-16 do not support DShot. +- Outputs 1-7 support [Bidirectional DShot](../peripherals/dshot.md#bidirectional-dshot-telemetry). +- Output 8 supports Bidirectional DShot output only (no eRPM capture). + +The 16 outputs are in 5 groups: + +- Outputs 1-4 in group1 (Timer5) +- Outputs 5-8 in group2 (Timer4) +- Outputs 9-11 in group3 (Timer1) +- Outputs 12-14 in group4 (Timer8) +- Outputs 15-16 in group5 (Timer12) + +All outputs within the same group must use the same output protocol and rate. + ## 额定电压 -The _X25-EVO_ achieves triple redundancy on power supplies if three power sources are provided. The three power rails are POWERC1, POWERC2, and USB. +The _X25-EVO_ achieves triple redundancy on power supplies if three power sources are provided. +The three power rails are `POWERC1`, `POWERC2`, and `USB`. - **POWER C1** and **POWER C2** are DroneCAN/UAVCAN battery interfaces. @@ -135,13 +167,11 @@ It is pre-built and installed automatically by _QGroundControl_ when the appropr To [build PX4](../dev_setup/building_px4.md) for this target, execute: -``` +```sh make cuav_x25-evo_default ``` - - -## 调试接口 +## Debug Port {#debug_port} The [PX4 System Console](../debug/system_console.md) and [SWD Interface](../debug/swd_debug.md) operate on the **FMU Debug** port. @@ -156,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). +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). ## 更多信息 diff --git a/docs/zh/flight_controller/cuav_x25-super.md b/docs/zh/flight_controller/cuav_x25-super.md new file mode 100644 index 0000000000..500e0a7562 --- /dev/null +++ b/docs/zh/flight_controller/cuav_x25-super.md @@ -0,0 +1,178 @@ +# CUAV X25-SUPER + + + +:::warning +PX4 does not manufacture this (or any) autopilot. +Contact the [manufacturer](https://store.cuav.net/) for hardware support or compliance issues. +::: + +The _X25-SUPER_ is an advanced autopilot manufactured by CUAV®. + +The autopilot is recommended for commercial system integration but is also suitable for academic research and any other applications. + +![X25-SUPER AutoPilot - hero image](../../assets/flight_controller/cuav_x25-super/x25-super.png) + +The X25-SUPER brings you ultimate performance, stability, and reliability in every aspect. + +:::info +These flight controllers are [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). +::: + +### 特性 + +- 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. +- PWM servo output voltage switchable between 3.3V or 5V. +- Modular design for DIY carrier boards. + +### Processors & Sensors + +- Main Processor: STM32H743XI + - 32-bit Arm® Cortex®-M7, 480MHz, 2MB Flash, 1MB RAM +- Onboard Sensors: + - Accel/Gyro: SCH16T + - Accel/Gyro: IIM42652 + - Accel/Gyro: IIM42653 + - Magnetometer: RM3100 + - Barometer: BMP581 + - Barometer: ICP-20100 + +### Electrical Data + +- Rated Voltage: + - Input Voltage: 10~18V + - USB 电源输入:4.75~5.25V + - 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 + - Other Ports Output Current limiter: 1.5A + +### 接口 + +- 16x PWM Servo Outputs +- 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 +- 2x GPS Ports + - 1x Full GPS plus Safety Switch Port (GPS1) + - 1x Basic GPS Port (with I2C, GPS2) +- 1x USB Port (TYPE-C) +- 1x Ethernet Port + - Transformerless application + - 100Mbps +- 3x I2C Bus Ports +- 1x SPI Bus + - 1x Chip Select Line + - 1x Data Ready Line + - 1x SPI Reset Line +- 5x CAN Ports for CAN Peripherals + - 3x CAN1 Bus Multiplexed Ports + - 2x CAN2 Bus Multiplexed Ports +- 2x Power Input Ports + - DroneCAN/UAVCAN Power Input +- 2x AD Ports + - Analog Input (3.3V) + - Analog Input (6.6V - not supported by PX4) +- 1x Dedicated Debug Port + - FMU Debug + +### Mechanical Data + +- Dimensions: + + ![CUAV X25-SUPER](../../assets/flight_controller/cuav_x25-super/x25-super_size.png) + +## Purchase Channels {#store} + +Order from [CUAV](https://store.cuav.net/). + +## 组装 / 设置 + +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. + +## 针脚定义 + +![CUAV X25-SUPER Pinout_01](../../assets/flight_controller/cuav_x25-super/x25-super_pinouts_01.png) +![CUAV X25-SUPER Pinout_02](../../assets/flight_controller/cuav_x25-super/x25-super_pinouts_02.png) + +## 串口映射 + +| UART | 设备 | Port | +| ------ | ---------- | ------ | +| USART1 | /dev/ttyS0 | GPS1 | +| USART2 | /dev/ttyS1 | GPS2 | +| USART3 | /dev/ttyS2 | 调试控制台 | +| UART4 | /dev/ttyS3 | UART4 | +| UART5 | /dev/ttyS4 | TELEM2 | +| USART6 | /dev/ttyS5 | RC IN | +| UART7 | /dev/ttyS6 | TELEM1 | + +## RC Input + +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`. + +- **POWER C1** and **POWER C2** are DroneCAN/UAVCAN battery interfaces. + +**Normal Operation Maximum Ratings** + +Under these conditions, all power sources will be used to power the system in the following order: + +1. **POWER C1** and **POWER C2** Inputs (10V to 18V) +2. USB Input (4.75V to 5.25V) + +**Voltage monitoring** + +Digital DroneCAN/UAVCAN battery monitoring is enabled by default. + +## 编译固件 + +:::tip +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 +``` + +## Debug Port {#debug_port} + +The [PX4 System Console](../debug/system_console.md) and [SWD Interface](../debug/swd_debug.md) operate on the **FMU Debug** port. + +| 针脚 | 信号 | 电压 | +| ---- | --------------------------------- | --------------------- | +| 1(红) | 5V+ | +5V | +| 2 | DEBUG TX (OUT) | +3.3V | +| 3 | DEBUG RX (IN) | +3.3V | +| 4(黑) | FMU_SWDIO | +3.3V | +| 6 | FMU_SWCLK | +3.3V | +| 6 | GND | GND | + +## 支持的平台/机身 + +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). + +## 更多信息 + +- [CUAV Docs](https://doc.cuav.net/) diff --git a/docs/zh/flight_controller/cuav_x7.md b/docs/zh/flight_controller/cuav_x7.md index 40055f4806..8eb0b07db3 100644 --- a/docs/zh/flight_controller/cuav_x7.md +++ b/docs/zh/flight_controller/cuav_x7.md @@ -1,186 +1,7 @@ + + + - -:::warning -This flight controller has been [discontinued](../flight_controller/autopilot_experimental.md) and is no longer commercially available. -It has been superseded by the [CUAV X7+](https://doc.cuav.net/controller/x7/en/). -::: - -:::warning -PX4 does not manufacture this (or any) autopilot. -Contact the [manufacturer](https://www.cuav.net) for hardware support or compliance issues. -::: - -The [X7](https://doc.cuav.net/controller/x7/en/)® flight controller is a high-performance autopilot. -It is an ideal choice for industrial drones and large-scale heavy-duty drones. -It is mainly supplied to commercial manufacturers. - -![CUAV x7](../../assets/flight_controller/cuav_x7/x7.jpg) - -The flight controller adopts a modular design and can be matched with different base plates. -You can design a dedicated carrier board for your UAV to improve the integration of commercial systems, reduce wiring, improve system reliability, and enhance your UAV competitiveness (for example, integrating airspeed sensors, telemetry or even a companion computer, in the carrier board). -CUAV has also provided a variety of carrier boards for you to choose from. - -:::info -This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). -::: - -## 特性 - -- Internal shock absorption -- Modular design, can be DIY carrier board -- Support USB_HS, download logs faster (PX4 not yet supported) -- Support more DShot output -- Support IMU heating, make the sensor work better -- Dedicated CAN battery port -- 3 sets of IMU sensors -- Car-grade RM3100 compass -- High performance processor - -:::tip -The manufacturer [CUAV Docs](https://doc.cuav.net/flight-controller/x7/en/) are the canonical reference for the X7. -They should be used by preference as they contain the most complete and up to date information. -::: - -## 总览 - -- Main FMU Processor: STM32H743 - -- 内置传感器: - - 加速度计/陀螺仪:ICM-20689 - - 加速度计/陀螺仪:ICM-20649 - - Accelerometer/Gyroscope: BMI088 - - Magnetometer: RM3100 - - Barometer: MS5611\*2 - -- 接口: - - 14 PWM outputs (12 supports Dshot) - - Support multiple RC inputs (SBUs / CPPM / DSM) - - Analogue / PWM RSSI input - - 2 GPS ports(GPS and UART4 ports) - - 4 i2c buses(Two i2c dedicated ports) - - 2 CAN bus ports - - 2 Power ports(Power A is common adc interface, Power C is DroneCAN battery interface) - - 2 ADC input - - 1 USB ports - -- 电源系统 - - 输入电压:4.3~5.4V - - USB输入电压: 4.75~5.25V - - 伺服导轨输入电压:0~36V - -- 重量和尺寸: - - Weight: 101 g - -- 其它特性: - - Operating temperature: -20 ~ 80°c(Measured value) - - Three imus - - Supports temperature compensation - - Internal shock absorption - -:::info -When it runs PX4 firmware, only 8 pwm works, the remaining 6 pwm are still being adapted, so it is not compatible with VOLT now. -::: - -## 购买渠道 - -[CUAV Store](https://store.cuav.net) - -[CUAV aliexpress](https://www.aliexpress.com/item/4001042683738.html?spm=a2g0o.detail.1000060.2.1ebb2a9d3WDryi&gps-id=pcDetailBottomMoreThisSeller&scm=1007.13339.169870.0&scm_id=1007.13339.169870.0&scm-url=1007.13339.169870.0&pvid=f0df2481-1c0a-44eb-92a4-9c11c6cb3d06&_t=gps-id:pcDetailBottomMoreThisSeller,scm-url:1007.13339.169870.0,pvid:f0df2481-1c0a-44eb-92a4-9c11c6cb3d06,tpp_buckets:668%230%23131923%2320_668%23808%234094%23518_668%23888%233325%2319_668%234328%2319934%23630_668%232846%238115%23807_668%232717%237566%23827_668%231000022185%231000066058%230_668%233468%2315607%2376) - -## Connections (Wiring) - -[CUAV X7 Wiring Quickstart](https://doc.cuav.net/controller/x7/en/quick-start/quick-start-x7-plus.html) - -## Size and Pinouts - -![CUAV x7](../../assets/flight_controller/cuav_x7/x7-size.jpg) - -![X7 pinouts](../../assets/flight_controller/cuav_x7/x7-pinouts.jpg) - -:::warning -The `RCIN` port is limited to powering the RC receiver and cannot be connected to any power/load. -::: - -## 额定电压 - -The _X7 AutoPilot_ can be triple-redundant on the power supply if three power sources are supplied. -The power rails are: **POWERA**, **POWERC** and **USB**. - -:::info -The output power rails **PWM OUT** (0V to 36V) do not power the flight controller board (and are not powered by it). -You must supply power to one of **POWERA**, **POWERC** or **USB** or the board will be unpowered. -::: - -**Normal Operation Maximum Ratings** - -Under these conditions all power sources will be used in this order to power the system: - -1. **POWERA** and **POWERC** inputs (4.3V to 5.4V) -2. **USB** input (4.75V to 5.25V) - -## 编译固件 - -:::tip -Most users will not need to build this firmware! -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: - -``` -make cuav_x7pro_default -``` - -## Over Current Protection - -The _X7_ has over-current protection on the 5 Volt Peripheral and 5 Volt high power, which limits the current to 2.5A. -The _X7_ has short circuit protection. - -:::warning -Up to 2.5 A can be delivered to the connectors listed as pin 1 (although these are only rated at 1 A). -::: - -## 调试接口 - -The system's serial console and SWD interface operate on the **DSU7** port. -Simply connect the FTDI cable to the DSU7 connector (the product list contains the CUAV FTDI cable). - -![Debug port (DSU7)](../../assets/flight_controller/cuav_v5_plus/debug_port_dsu7.jpg) - -The [PX4 System Console](../debug/system_console.md) and [SWD interface](../debug/swd_debug.md) operate on the **FMU Debug** port (`DSU7`). - -The debug port (`DSU7`) uses a [JST BM06B](https://www.digikey.com.au/en/products/detail/jst-sales-america-inc/BM06B-GHS-TBT-LF-SN-N/807850) connector and has the following pinout: - -| 针脚 | 信号 | 电压 | -| ---- | --------------------------------- | --------------------- | -| 1(红) | 5V+ | +5V | -| 2 | DEBUG TX (OUT) | +3.3V | -| 3 | DEBUG RX (IN) | +3.3V | -| 4(黑) | FMU_SWDIO | +3.3V | -| 6 | FMU_SWCLK | +3.3V | -| 6 | GND | GND | - -CUAV provides a dedicated debugging cable, which can be connected to the `DSU7` port. -This splits out an FTDI cable for connecting the [PX4 System Console](../debug/system_console.md) to a computer USB port, and SWD pins used for SWD/JTAG debugging. -The provided debug cable does not connect to the SWD port `Vref` pin (1). - -![CUAV Debug cable](../../assets/flight_controller/cuav_v5_plus/cuav_v5_debug_cable.jpg) - -:::warning -The SWD Vref pin (1) uses 5V as Vref but the CPU is run at 3.3V! - -Some JTAG adapters (SEGGER J-Link) will use the Vref voltage to set the voltage on the SWD lines. -For direct connection to _Segger Jlink_ we recommended you use the 3.3 Volts from pin 4 of the connector marked `DSM`/`SBUS`/`RSSI` to provide `Vtref` to the JTAG (i.e. providing 3.3V and _NOT_ 5V). -::: - -## 支持的平台/机身 - -Any multicopter / plane / 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). - -## 更多信息 - -- [CUAV docs](https://doc.cuav.net/) -- [x7 schematic](https://github.com/cuav/hardware/tree/master/X7_Autopilot) +DOC REMOVED: 202603 +--> diff --git a/docs/zh/flight_controller/cubepilot_cube_orange.md b/docs/zh/flight_controller/cubepilot_cube_orange.md index 7e57746a70..bb189d0707 100644 --- a/docs/zh/flight_controller/cubepilot_cube_orange.md +++ b/docs/zh/flight_controller/cubepilot_cube_orange.md @@ -10,7 +10,7 @@ The [Cube Orange](https://www.cubepilot.com/#/cube/features) flight controller i ![Cube Orange](../../assets/flight_controller/cube/orange/cube_orange_hero.jpg) The controller is designed to be used with a domain-specific carrier board in order to reduce the wiring, improve reliability, and ease of assembly. -For example, a carrier board for a commercial inspection vehicle might include connections for a companion computer, while a carrier board for a racer could includes ESCs for the frame of the vehicle. +For example, a carrier board for a commercial inspection vehicle might include connections for a companion computer, while a carrier board for a racer could include ESCs for the frame of the vehicle. The ADS-B carrier board includes a customized 1090MHz ADSB-In receiver from uAvionix. This provides attitude and location of commercial manned aircraft within the range of Cube. @@ -22,6 +22,10 @@ Cube includes vibration isolation on two of the IMU's, with a third fixed IMU as The manufacturer [Cube User Guide](https://docs.cubepilot.org/user-guides/autopilot/the-cube) contains detailed information, including an overview of the [Differences between Cube Colours](https://docs.cubepilot.org/user-guides/autopilot/the-cube/introduction/specifications). ::: +:::info +This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). +::: + ## 主要特性 - 32bit STM32H753VI (32bit [ARM Cortex M7](https://en.wikipedia.org/wiki/ARM_Cortex-M#Cortex-M7), 400 MHz, Flash 2MB, RAM 1MB). @@ -36,9 +40,7 @@ The manufacturer [Cube User Guide](https://docs.cubepilot.org/user-guides/autopi - High-power, multi-tone piezo audio indicator - microSD card for high-rate logging over extended periods of time - - -## 购买渠道 +## Where to Buy {#store} - [Reseller list](https://www.cubepilot.com/#/reseller/list) @@ -232,7 +234,7 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target, open up the terminal and enter: -``` +```sh make cubepilot_cubeorange ``` diff --git a/docs/zh/flight_controller/cubepilot_cube_orangeplus.md b/docs/zh/flight_controller/cubepilot_cube_orangeplus.md index 41af5783d1..6bbd6a925c 100644 --- a/docs/zh/flight_controller/cubepilot_cube_orangeplus.md +++ b/docs/zh/flight_controller/cubepilot_cube_orangeplus.md @@ -6,12 +6,12 @@ Contact the [manufacturer](https://cubepilot.org/#/home) for hardware support or ::: The [Cube Orange+](https://www.cubepilot.com/#/cube/features) flight controller is a flexible autopilot intended primarily for manufacturers of commercial systems. -Cube Orange+ is similar to Cube Orange, but has a more powerful dual-core processor (STM32H757, and some different sensors parts. +Cube Orange+ is similar to Cube Orange, but has a more powerful dual-core processor (STM32H757), and some different sensor parts. ![Cube Orange](../../assets/flight_controller/cube/orangeplus/cubepilot_cube_orangeplus_standard_set.jpg) The controller is designed to be used with a domain-specific carrier board in order to reduce the wiring, improve reliability, and ease of assembly. -For example, a carrier board for a commercial inspection vehicle might include connections for a companion computer, while a carrier board for a racer could includes ESCs for the frame of the vehicle. +For example, a carrier board for a commercial inspection vehicle might include connections for a companion computer, while a carrier board for a racer could include ESCs for the frame of the vehicle. The ADS-B carrier board includes a customized 1090MHz ADSB-In receiver from uAvionix. This provides attitude and location of commercial manned aircraft within the range of Cube. @@ -23,6 +23,10 @@ Cube includes vibration isolation on two of the IMU's, with a third fixed IMU as The manufacturer [Cube User Guide](https://docs.cubepilot.org/user-guides/autopilot/the-cube) contains detailed information, including an overview of the [Differences between Cube Colours](https://docs.cubepilot.org/user-guides/autopilot/the-cube/introduction/specifications). ::: +:::info +This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). +::: + ## 主要特性 - 32bit STM32H757ZI (32bit [ARM Cortex M7](https://en.wikipedia.org/wiki/ARM_Cortex-M#Cortex-M7), 400 MHz, Flash 2MB, RAM 1MB). @@ -37,9 +41,7 @@ The manufacturer [Cube User Guide](https://docs.cubepilot.org/user-guides/autopi - High-power, multi-tone piezo audio indicator - microSD card for high-rate logging over extended periods of time - - -## 购买渠道 +## Where to Buy {#store} - [Reseller list](https://www.cubepilot.com/#/reseller/list) @@ -232,7 +234,7 @@ The firmware for Orange+ will be present in releases from PX4 v1.14. To [build PX4](../dev_setup/building_px4.md) for this target, open up the terminal and enter: -``` +```sh make cubepilot_cubeorangeplus ``` diff --git a/docs/zh/flight_controller/cubepilot_cube_yellow.md b/docs/zh/flight_controller/cubepilot_cube_yellow.md index d7bcc3f4e5..6834682398 100644 --- a/docs/zh/flight_controller/cubepilot_cube_yellow.md +++ b/docs/zh/flight_controller/cubepilot_cube_yellow.md @@ -10,7 +10,7 @@ The Cube Yellow flight controller is a flexible autopilot intended primarily for ![Cube Yellow](../../assets/flight_controller/cube/yellow/cube_yellow_hero.jpg) The controller is designed to be used with a domain-specific carrier board in order to reduce the wiring, improve reliability, and ease of assembly. -For example, a carrier board for a commercial inspection vehicle might include connections for a companion computer, while a carrier board for a racer could includes ESCs for the frame of the vehicle. +For example, a carrier board for a commercial inspection vehicle might include connections for a companion computer, while a carrier board for a racer could include ESCs for the frame of the vehicle. Cube includes vibration isolation on two of the IMU's, with a third fixed IMU as a reference / backup. @@ -18,6 +18,10 @@ Cube includes vibration isolation on two of the IMU's, with a third fixed IMU as The manufacturer [Cube User Guide](https://docs.cubepilot.org/user-guides/autopilot/the-cube) contains detailed information, including an overview of the [Differences between Cube Colours](https://docs.cubepilot.org/user-guides/autopilot/the-cube/introduction/specifications). ::: +:::info +This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). +::: + ## 主要特性 - 32bit STM32F777VI (32bit [ARM Cortex M7](https://en.wikipedia.org/wiki/ARM_Cortex-M#Cortex-M7), 400 MHz, Flash 2MB, RAM 512 KB). @@ -32,9 +36,7 @@ The manufacturer [Cube User Guide](https://docs.cubepilot.org/user-guides/autopi - High-power, multi-tone piezo audio indicator - microSD card for high-rate logging over extended periods of time - - -## 购买渠道 +## Where to Buy {#store} - [Reseller list](https://www.cubepilot.com/#/reseller/list) @@ -47,7 +49,7 @@ The manufacturer [Cube User Guide](https://docs.cubepilot.org/user-guides/autopi - **Processor:** - STM32F777VI (32bit [ARM Cortex M7](https://en.wikipedia.org/wiki/ARM_Cortex-M#Cortex-M7)) - 400 MHz - - 512 KB MB RAM + - 512 KB RAM - 2 MB Flash - **Failsafe co-processor:** - STM32F100 (32bit _ARM Cortex-M3_) @@ -130,7 +132,7 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make cubepilot_cubeyellow ``` diff --git a/docs/zh/flight_controller/dropix.md b/docs/zh/flight_controller/dropix.md deleted file mode 100644 index e400005541..0000000000 --- a/docs/zh/flight_controller/dropix.md +++ /dev/null @@ -1,7 +0,0 @@ -# DroPix Flight Controller (Discontinued) - - - -The Drotek® _DroPix autopilot_ is no longer available on the Drotek website, and is assumed to be discontinued. - -See [PX4 v1.13 Documentation > DroPix Flight Controller](https://docs.px4.io/v1.13/en/flight_controller/dropix.html) for documentation. diff --git a/docs/zh/flight_controller/durandal.md b/docs/zh/flight_controller/durandal.md index 0024c79fa5..ee15552e66 100644 --- a/docs/zh/flight_controller/durandal.md +++ b/docs/zh/flight_controller/durandal.md @@ -19,7 +19,7 @@ At high level, some of the key features are: - Internal vibration isolation system. - Dual high-performance, low-noise IMUs on board are designed for demanding stabilization applications. -A summary of the key features, [assembly](../assembly/quick_start_durandal.md), and [purchase](#purchase) links can be found below. +A summary of the key features, [assembly](../assembly/quick_start_durandal.md), and [purchase](#store) links can be found below. :::info This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). @@ -86,9 +86,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo For more information see: [Durandal Technical Data Sheet](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Durandal_technical_data_sheet_90f8875d-8035-4632-a936-a0d178062077.pdf). - - -## 购买渠道 +## Where to Buy {#store} Order from [Holybro](https://holybro.com/products/durandal). @@ -162,7 +160,7 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make holybro_durandal-v1_default ``` diff --git a/docs/zh/flight_controller/gearup_airbrainh743.md b/docs/zh/flight_controller/gearup_airbrainh743.md index 381ce520c5..6c966cda55 100644 --- a/docs/zh/flight_controller/gearup_airbrainh743.md +++ b/docs/zh/flight_controller/gearup_airbrainh743.md @@ -74,7 +74,7 @@ Download the [gearup_airbrainh743_bootloader.bin](https://github.com/PX4/PX4-Aut To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make gearup_airbrainh743_default ``` @@ -84,13 +84,25 @@ Firmware can be installed in any of the normal ways: - Build and upload the source: - ``` + ```sh make gearup_airbrainh743_default upload ``` - [Load the firmware](../config/firmware.md) using _QGroundControl_. You can use either pre-built firmware or your own custom firmware. +### Flash Storage Troubleshooting + +The AirBrainH743 uses a 128MB NAND flash (W25N) with a littlefs filesystem for [logging](../dev_log/logging.md). +If the flash filesystem becomes corrupted, you can reformat it using the [System Console](../debug/system_console.md): + +```sh +mklittlefs /dev/mtd0 /fs/flash +``` + +This will erase all data on the flash and create a fresh littlefs filesystem. +The filesystem is immediately available after the command completes. + ### 系统控制台 UART1 (ttyS0) is configured for use as the [System Console](../debug/system_console.md). diff --git a/docs/zh/flight_controller/holybro_pix32.md b/docs/zh/flight_controller/holybro_pix32.md index 2f5e598943..7ef63fc2af 100644 --- a/docs/zh/flight_controller/holybro_pix32.md +++ b/docs/zh/flight_controller/holybro_pix32.md @@ -1,106 +1,8 @@ + + + +--> diff --git a/docs/zh/flight_controller/holybro_pix32_v5.md b/docs/zh/flight_controller/holybro_pix32_v5.md index 6b7488d40e..f88bbf37f8 100644 --- a/docs/zh/flight_controller/holybro_pix32_v5.md +++ b/docs/zh/flight_controller/holybro_pix32_v5.md @@ -71,7 +71,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo Additional information can be found in the [Pix32 V5 Technical Data Sheet](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_PIX32-V5_technical_data_sheet_v1.1.pdf). -## 购买渠道 +## Where to Buy {#store} Order from [Holybro website](https://holybro.com/products/pix32-v5). @@ -125,7 +125,7 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make holybro_pix32v5_default ``` diff --git a/docs/zh/flight_controller/holybro_pix32_v6.md b/docs/zh/flight_controller/holybro_pix32_v6.md index 81cae7c034..663675c86a 100644 --- a/docs/zh/flight_controller/holybro_pix32_v6.md +++ b/docs/zh/flight_controller/holybro_pix32_v6.md @@ -12,7 +12,7 @@ It is equipped with a high performance H7 Processor, and comes with IMU redundan @@ -93,7 +93,7 @@ This flight controller is perfect for people that is looking for a affordable an - 其它特性: - Operating & storage temperature: -40 ~ 85°c -## 购买渠道 +## Where to Buy {#store} Order from [Holybro](https://holybro.com/products/pix32-v6). @@ -156,13 +156,11 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make px4_fmu-v6c_default ``` - - -## 调试接口 +## Debug Port {#debug_port} The [PX4 System Console](../debug/system_console.md) and [SWD interface](../debug/swd_debug.md) run on the **FMU Debug** port. diff --git a/docs/zh/flight_controller/kakutef7.md b/docs/zh/flight_controller/kakutef7.md index 85877b99b1..72e2f77c50 100644 --- a/docs/zh/flight_controller/kakutef7.md +++ b/docs/zh/flight_controller/kakutef7.md @@ -1,142 +1,7 @@ + + + - -## 调试接口 - -### 系统控制台 - -UART3 RX and TX are configured for use as the [System Console](../debug/system_console.md). - -### SWD - -The [SWD interface](../debug/swd_debug.md) (JTAG) pins are: - -- `SWCLK`: Test Point 2 (Pin 72 on the CPU) -- `SWDIO`: Test Point 3 (Pin 76 on CPU) -- `GND`: As marked on board -- `VDD_3V3`: As marked on board - -These are shown below. - -![SWD Pins on Kakute F7 - CLK SWO](../../assets/flight_controller/kakutef7/debug_swd_port.jpg) ![SWD Pins on Kakute F7: GND and VDD_3V3](../../assets/flight_controller/kakutef7/debug_swd_port_gnd_vcc3_3.jpg) +DOC REMOVED: 202603 +--> diff --git a/docs/zh/flight_controller/kakuteh7-wing.md b/docs/zh/flight_controller/kakuteh7-wing.md index e426a8aabe..f18e87fe73 100644 --- a/docs/zh/flight_controller/kakuteh7-wing.md +++ b/docs/zh/flight_controller/kakuteh7-wing.md @@ -13,7 +13,7 @@ The [Holybro Kakute H743 Wing](https://holybro.com/products/kakute-h743-wing) is This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). ::: -## 购买渠道 +## Where to Buy {#store} The board can be bought from one of the following shops (for example): @@ -43,7 +43,7 @@ Download the [holybro_kakuteh7-wing.hex](https://github.com/PX4/PX4-Autopilot/ra To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make holybro_kakuteh7-wing_default ``` @@ -58,7 +58,7 @@ Firmware can be manually installed in any of the normal ways: - Build and upload the source: - ``` + ```sh make holybro_kakuteh7-wing_default upload ``` diff --git a/docs/zh/flight_controller/kakuteh7.md b/docs/zh/flight_controller/kakuteh7.md index 333fe8d674..5c7a888c9b 100644 --- a/docs/zh/flight_controller/kakuteh7.md +++ b/docs/zh/flight_controller/kakuteh7.md @@ -36,7 +36,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo - Dimensions: 35x35mm - Weight: 8g -## 购买渠道 +## Where to Buy {#store} The board can be bought from one of the following shops (for example): @@ -102,7 +102,7 @@ The firmware can be installed in any of the normal ways: You can use either pre-built firmware or your own custom firmware. :::info -If you are loading the pre-built firmware via QGroundcontrol, you must use QGC Daily or QGC version newer than 4.1.7. +If you are loading the pre-built firmware via QGroundControl, you must use QGC Daily or QGC version newer than 4.1.7. ::: ## PX4 配置 diff --git a/docs/zh/flight_controller/kakuteh7mini.md b/docs/zh/flight_controller/kakuteh7mini.md index dbb3c96192..981cd7274c 100644 --- a/docs/zh/flight_controller/kakuteh7mini.md +++ b/docs/zh/flight_controller/kakuteh7mini.md @@ -40,7 +40,7 @@ PX4 runs on the H7 mini v1.3 and later. - Dimensions: 30x31x6mm - Weight: 5.5g -## 购买渠道 +## Where to Buy {#store} The board can be bought from one of the following shops (for example): @@ -86,14 +86,14 @@ Download the [holybro_kakuteh7mini_bootloader.hex](https://github.com/PX4/PX4-Au To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make holybro_kakuteh7mini_default ``` ## Installing PX4 Firmware :::info -If you are loading the pre-built firmware via QGroundcontrol, you must use QGC Daily or QGC version newer than 4.1.7. +If you are loading the pre-built firmware via QGroundControl, you must use QGC Daily or QGC version newer than 4.1.7. Prior to that release you will need to manually build and install the firmware. ::: @@ -101,7 +101,7 @@ Firmware can be manually installed in any of the normal ways: - Build and upload the source: - ``` + ```sh make holybro_kakuteh7mini_default upload ``` diff --git a/docs/zh/flight_controller/kakuteh7v2.md b/docs/zh/flight_controller/kakuteh7v2.md index 60a591e8db..0cfd287540 100644 --- a/docs/zh/flight_controller/kakuteh7v2.md +++ b/docs/zh/flight_controller/kakuteh7v2.md @@ -36,7 +36,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo - Dimensions: 35x35mm - Weight: 8g -## 购买渠道 +## Where to Buy {#store} The board can be bought from one of the following shops (for example): @@ -83,14 +83,14 @@ Download the [holybro_kakuteh7v2_bootloader.hex](https://github.com/PX4/PX4-Auto To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make holybro_kakuteh7v2_default ``` ## Installing PX4 Firmware :::info -KakuteH7v2 is supported with PX4 master & PX4 v1.14 or newer. If you are loading the pre-built firmware via QGroundcontrol, you must use QGC Daily or QGC version newer than 4.1.7. +KakuteH7v2 is supported with PX4 master & PX4 v1.14 or newer. If you are loading the pre-built firmware via QGroundControl, you must use QGC Daily or QGC version newer than 4.1.7. Prior to that release you will need to manually build and install the firmware. ::: @@ -98,7 +98,7 @@ Firmware can be manually installed in any of the normal ways: - Build and upload the source: - ``` + ```sh make holybro_kakuteh7v2_default upload ``` diff --git a/docs/zh/flight_controller/micoair743-lite.md b/docs/zh/flight_controller/micoair743-lite.md index 43eea95fdb..6e5eb18429 100644 --- a/docs/zh/flight_controller/micoair743-lite.md +++ b/docs/zh/flight_controller/micoair743-lite.md @@ -12,7 +12,7 @@ MicoAir743-Lite is an ultra-high performance H743 flight controller with an unbe ![MicoAir743-Lite Front View](../../assets/flight_controller/micoair743_lite/front_view.png) Equipped with a high-performance H7 processor, the MicoAir743-Lite features a compact form factor with SH1.0 connectors (which are more suitable than Pixhawk-standard GH1.25 for this board size). -When paired with with Bluetooth telemetry, the board can be debugged with a phone or PC. +When paired with Bluetooth telemetry, the board can be debugged with a phone or PC. :::info This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). @@ -67,7 +67,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo ![MicoAir743-Lite Size](../../assets/flight_controller/micoair743_lite/size.png) -## 购买渠道 +## Where to Buy {#store} Order from [MicoAir Tech Store](https://store.micoair.com/product/micoair743-lite/). @@ -85,12 +85,12 @@ Pinouts definition can be found in the [MicoAir743-Lite_pinout.xlsx](https://raw | UART4 | /dev/ttyS3 | TELEM2 | | UART5 | /dev/ttyS4 | TELEM3 | | USART6 | /dev/ttyS5 | RC | -| UART7 | /dev/ttyS6 | URT6 | +| UART7 | /dev/ttyS6 | UART6 | | UART8 | /dev/ttyS7 | TELEM4 | ## Interfaces Diagram -:::note +:::info All the connectors used on the board are SH1.0 ::: diff --git a/docs/zh/flight_controller/mindpx.md b/docs/zh/flight_controller/mindpx.md index 51ad77c014..bca0294d73 100644 --- a/docs/zh/flight_controller/mindpx.md +++ b/docs/zh/flight_controller/mindpx.md @@ -19,7 +19,7 @@ These flight controllers are [manufacturer supported](../flight_controller/autop The main hardware documentation is [here](http://mindpx.net/assets/accessories/Specification9.18_3_pdf.pdf). ::: -MindPX is a new generation autopilot system branched from Pixhawk®, been revised in schematic and structure, and been further enhanced with new features to make un-manned vehicle more smart and more friendly to use. +MindPX is a new generation autopilot system branched from Pixhawk®, has been revised in schematic and structure, and has been further enhanced with new features to make unmanned vehicle more smart and more friendly to use. MindPX increases total PWM output channels to 16 (8 main outputs + 8 aux outputs). This means that MindPX can support more complicated VTOL configurations and more fine control. @@ -86,7 +86,7 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make airmind_mindpx-v2_default ``` @@ -96,7 +96,7 @@ MindPX has a USB-TO-UART Bridge IC on the board. A micro-USB to USB type A cable is used for the connection. Connect micro-USB end to the 'OBC' port of MindPX and USB type A end to companion computer. -And the max BAUD rate is the same with px4 family, which is up to 921600. +And the max BAUD rate is the same as for the PX4 family, which is up to 921600. ## User Guide @@ -104,7 +104,7 @@ And the max BAUD rate is the same with px4 family, which is up to 921600. The user guide is [here](http://mindpx.net/assets/accessories/UserGuide9.18_2_pdf.pdf). ::: -## 购买渠道 +## Where to Buy {#store} MindRacer is available at [AirMind Store](https://airmind.mindpx.net/catalog). You can also find MindRacer at Amazon® or eBay®. diff --git a/docs/zh/flight_controller/mindracer.md b/docs/zh/flight_controller/mindracer.md index a520ffd967..3e74acae92 100644 --- a/docs/zh/flight_controller/mindracer.md +++ b/docs/zh/flight_controller/mindracer.md @@ -66,7 +66,7 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make airmind_mindpx-v2_default ``` @@ -79,7 +79,7 @@ MindRacer has an attached Adapt IO board. MindRacer has a built-in UART-to-USB converter. To connect a companion computer, stack MindRacer on an interface board, and connect the companion computer to the USB port on the interface board. -And the max BAUD rate is the same with px4 family, which is up to 921600. +And the max BAUD rate is the same as for the PX4 family, which is up to 921600. ### User Guide @@ -87,7 +87,7 @@ And the max BAUD rate is the same with px4 family, which is up to 921600. The user guide is [here](http://mindpx.net/assets/accessories/mindracer_user_guide_v1.2.pdf) ::: -## 购买渠道 +## Where to Buy {#store} MindRacer is available at [AirMind Store](https://airmind.mindpx.net/catalog). You can also find MindRacer at Amazon® or eBay®. diff --git a/docs/zh/flight_controller/modalai_fc_v1.md b/docs/zh/flight_controller/modalai_fc_v1.md index 1e9562b83d..c7729f854a 100644 --- a/docs/zh/flight_controller/modalai_fc_v1.md +++ b/docs/zh/flight_controller/modalai_fc_v1.md @@ -1,146 +1,7 @@ -# ModalAI Flight Core v1 + - + - -[stm32f765ii]: https://www.st.com/en/microcontrollers-microprocessors/stm32f765ii.html -[bmp388]: https://www.adafruit.com/product/3966 -[icm-20602]: https://invensense.tdk.com/products/motion-tracking/6-axis/icm-20602/ -[bmi088]: https://www.bosch-sensortec.com/products/motion-sensors/imus/bmi088/ -[px4]: https://github.com/PX4/PX4-Autopilot/tree/main/boards/modalai/fc-v1 -[a71ch]: https://www.nxp.com/products/security-and-authentication/authentication/plug-and-trust-the-fast-easy-way-to-deploy-secure-iot-connections:A71CH - -## 尺寸 - -![FlightCoreV1Dimensions](../../assets/flight_controller/modalai/fc_v1/dimensions.png) - -## PX4 Firmware Compatibility - -_Flight Core v1_ is fully compatible with the official PX4 Firmware from PX4 v1.11. - -ModalAI maintains a [branched PX4 version](https://github.com/modalai/px4-firmware/tree/modalai-1.11) for PX4 v1.11. -This includes UART ESC support and improvements in VIO and VOA that are planned to be upstreamed. - -More information about the firmware can be found [here](https://docs.modalai.com/flight-core-firmware/). - -## QGroundControl支持 - -This board supported in QGroundControl 4.0 and later. - -## 访问链接 - -- No longer available - -## Quick Start - -### 安装方向 - -The diagram below shows the recommended orientation, which corresponds to `ROTATION_NONE` starting with PX4 v1.11. - -![FlightCoreV1Orientation](../../assets/flight_controller/modalai/fc_v1/orientation.png) - -### 连接器 - -Detailed information about the pinouts can be found [here](https://docs.modalai.com/flight-core-datasheet-connectors). - -![FlightCoreV1Top](../../assets/flight_controller/modalai/fc_v1/top.png) - -| Connector | 概要 | -| --------- | ----------------------------------------------------------------------------- | -| J1 | VOXL Communications Interface Connector (TELEM2) | -| J2 | Programming and Debug Connector | -| J3 | USB Connector | -| J4 | UART2, UART ESC (TELEM3) | -| J5 | Telemetry Connector (TELEM1) | -| J6 | VOXL-Power Management Input / Expansion | -| J7 | 8-Channel PWM Output Connector | -| J8 | CAN Bus Connector | -| J9 | PPM RC In | -| J10 | External GPS & Magnetometer Connector | -| J12 | RC input, Spektrum/SBus/UART Connector | -| J13 | I2C Display (Spare Sensor Connector) / Safety Button Input | - -![FlightCoreV1Bottom](../../assets/flight_controller/modalai/fc_v1/bottom.png) - -### User Guide - -The full user guide is available [here](https://docs.modalai.com/flight-core-manual/). - -### How to Build - -To [build PX4](../dev_setup/building_px4.md) for this target: - -``` -make modalai_fc-v1 -``` - -## 串口映射 - -| UART | 设备 | Port | -| ------ | ---------- | ----------------------------------------------------------- | -| USART1 | /dev/ttyS0 | GPS1 (J10) | -| USART2 | /dev/ttyS1 | TELEM3 (J4) | -| USART3 | /dev/ttyS2 | Debug Console (J2) | -| UART4 | /dev/ttyS3 | Expansion UART (J6) | -| UART5 | /dev/ttyS4 | TELEM2, Primary VOXL Communications (J1) | -| USART6 | /dev/ttyS5 | RC (J12) | -| UART7 | /dev/ttyS6 | TELEM1 (J5) | -| UART8 | /dev/ttyS7 | N/A | - - - -## 技术支持 - -Please visit the [ModalAI Forum](https://forum.modalai.com/category/10/flight-core) for more information. +DOC REMOVED: 202603 +--> diff --git a/docs/zh/flight_controller/modalai_voxl_2.md b/docs/zh/flight_controller/modalai_voxl_2.md index f1c64f0607..c9b9c75833 100644 --- a/docs/zh/flight_controller/modalai_voxl_2.md +++ b/docs/zh/flight_controller/modalai_voxl_2.md @@ -5,7 +5,7 @@ PX4 does not manufacture this (or any) autopilot. Contact the [manufacturer](https://forum.modalai.com/) for hardware support or compliance issues. ::: -The ModalAI [VOXL 2](https://modalai.com/voxl-2) ([Datasheet](https://docs.modalai.com/voxl2-datasheets/)) is ModalAI’s next-gen autonomous computing platform built around the Qualcomm QRB5165 processor. VOXL 2 boasts 8 cores, integrated PX4, seven camera concurrency, advanced onboard AI up to 15+ TOPS, and 5G connectivity. At 16 grams, VOXL 2 is the future of fully autonomous and connected drones! +The ModalAI [VOXL 2](https://www.modalai.com/products/voxl-2) ([Datasheet](https://docs.modalai.com/voxl2-datasheets/)) is ModalAI's next-gen autonomous computing platform built around the Qualcomm QRB5165 processor. VOXL 2 boasts 8 cores, integrated PX4, seven camera concurrency, advanced onboard AI up to 15+ TOPS, and 5G connectivity. At 16 grams, VOXL 2 is the future of fully autonomous and connected drones! ![VOXL-2](../../assets/flight_controller/modalai/voxl_2/voxl-2-hero.jpg) @@ -62,7 +62,7 @@ ModalAI is actively maintaining a [branched PX4 version](https://github.com/moda As VOXL 2 runs Ubuntu, the production releases of PX4 for VOXL 2 are distributed through [apt package management](https://docs.modalai.com/configure-pkg-manager/) and the [VOXL SDK](https://docs.modalai.com/voxl-sdk/). -More information about the firmware can be found [here](https://docs.modalai.com/voxl2-px4-developer-guide/). +More information about the firmware can be found [here](https://docs.modalai.com/voxl-px4/). ### main branch @@ -70,7 +70,7 @@ PX4 mainline supports VOXL 2 (board documentation [here](https://github.com/PX4/ ## QGroundControl支持 -This board supported in QGroundControl 4.0 and later. +This board is supported in QGroundControl 4.0 and later. ## 访问链接 @@ -78,17 +78,16 @@ This board supported in QGroundControl 4.0 and later. - [Starling 2 MAX](https://www.modalai.com/products/starling-2-max) - [Sentinel Development Drone powered by VOXL 2](https://www.modalai.com/pages/sentinel) - [Demo Video](https://www.youtube.com/watch?v=hMhQgWPLGXo) -- [VOXL 2 Flight Deck, ready to mount, tune and fly](https://www.modalai.com/collections/ready-to-mount/products/voxl-2-flight-deck) - [VOXL 2 Development Kits](https://www.modalai.com/products/voxl-2) - [Demo Video](https://www.youtube.com/watch?v=aVHBWbwp488) ## Quick Start -Quickstarts from the vendor are located [here](https://docs.modalai.com/voxl2-quickstarts/). +Quickstarts from the vendor are located [here](https://docs.modalai.com/voxl-2-hardware-quickstart/). ### VOXL SDK -VOXL SDK (Software Development Kit) consists of the open source [voxl-px4](https://docs.modalai.com/voxl-px4/), [core libraries](https://docs.modalai.com/core-libs/), [services](https://docs.modalai.com/mpa-services/), [tools](https://docs.modalai.com/inspect-tools/), [utilities](https://docs.modalai.com/sdk-utilities/), and [build environments](https://docs.modalai.com/build-environments/) that ModalAI provide to accelerate the use and development of VOXL compute boards and accessories. +VOXL SDK (Software Development Kit) consists of the open source [voxl-px4](https://docs.modalai.com/voxl-px4/), [core libraries](https://docs.modalai.com/core-libs/), [services](https://docs.modalai.com/mpa-services/), [tools](https://docs.modalai.com/inspect-tools/), and [build environments](https://docs.modalai.com/build-environments/) that ModalAI provide to accelerate the use and development of VOXL compute boards and accessories. VOXL SDK runs on VOXL, VOXL 2 and RB5 Flight! @@ -123,11 +122,11 @@ The PX4 user guide for VOXL 2 is available [here](https://docs.modalai.com/voxl- ### Developer Guide -The PX4 developer guide for VOXL 2 is available [here](https://docs.modalai.com/voxl-px4-developer-guide/). +The PX4 developer guide for VOXL 2 is available [here](https://docs.modalai.com/voxl-px4/). ### How to Build -See the [VOXL PX4 Build Guide](https://docs.modalai.com/voxl2-px4-build-guide/) on how to build. +See the [VOXL PX4 Build Guide](https://docs.modalai.com/voxl-px4-dev-build-guide/) on how to build. ## 技术支持 diff --git a/docs/zh/flight_controller/modalai_voxl_flight.md b/docs/zh/flight_controller/modalai_voxl_flight.md index 352fd22892..7f5ee9210d 100644 --- a/docs/zh/flight_controller/modalai_voxl_flight.md +++ b/docs/zh/flight_controller/modalai_voxl_flight.md @@ -1,202 +1,7 @@ -# ModalAI VOXL Flight + - + - -[stm32f765ii]: https://www.st.com/en/microcontrollers-microprocessors/stm32f765ii.html -[px4]: https://github.com/PX4/PX4-Autopilot/tree/main/boards/modalai/fc-v1 -[icm-20602]: https://invensense.tdk.com/products/motion-tracking/6-axis/icm-20602/ -[bmi088]: https://www.bosch-sensortec.com/products/motion-sensors/imus/bmi088/ -[bmp388]: https://www.adafruit.com/product/3966 -[a71ch]: https://www.nxp.com/products/security-and-authentication/authentication/plug-and-trust-the-fast-easy-way-to-deploy-secure-iot-connections:A71CH - -:::info -More detailed hardware documentation can be found [here](https://docs.modalai.com/voxl-flight-datasheet/). -::: - -## 尺寸 - -![FlightCoreV1Dimensions](../../assets/flight_controller/modalai/voxl_flight/voxl-flight-dimensions.jpg) - -[3D STEP File](https://storage.googleapis.com/modalai_public/modal_drawings/M0019_VOXL-Flight.zip) - -## PX4 Firmware Compatibility - -_VOXL Flight_ is fully compatible with the official PX4 Firmware from PX4 v1.11. - -ModalAI maintains a [branched PX4 version](https://github.com/modalai/px4-firmware/tree/modalai-1.11) for PX4 v1.11. -This includes UART ESC support and improvements in VIO and VOA that are planned to be upstreamed. - -More information about the firmware can be found [here](https://docs.modalai.com/flight-core-firmware/). - -## QGroundControl支持 - -This board supported in QGroundControl 4.0 and later. - -## 访问链接 - -No longer available. - -## Quick Start - -A quickstart from the vendor is located [here](https://docs.modalai.com/voxl-flight-quickstart/). - -### voxl-vision-px4 - -The VOXL Flight runs [voxl-vision-px4](https://gitlab.com/voxl-public/modal-pipe-architecture/voxl-vision-px4) on the companion computer portion of the hardware serving as a sort of MAVLink proxy. -For details, the source code is available [here](https://gitlab.com/voxl-public/modal-pipe-architecture/voxl-vision-px4) - -### 连接器 - -Detailed information about the pinouts can be found [here](https://docs.modalai.com/voxl-flight-datasheet-connectors/). - -#### Top - -![VOXLFlightTop](../../assets/flight_controller/modalai/voxl_flight/voxl-flight-top.jpg) - -_Note: 1000 Series connectors accessible from the STM32/PX4_ - -| Connector | 概要 | Used By | -| --------- | ------------------------------------------------------------------------- | ---------------------------------------------------- | -| J2 | Hires 4k Image Sensor (CSI0) | Snapdragon - Linux | -| J3 | Stereo Image Sensor (CSI1) | Snapdragon - Linux | -| J6 | Cooling Fan Connector | Snapdragon - Linux | -| J7 | BLSP6 (GPIO) and BLSP9 (UART) | Snapdragon - Linux | -| J13 | Expansion B2B | Snapdragon - Linux | -| J14 | Integrated GNSS Antenna Connection | Snapdragon - Linux | -| J1001 | Programming and Debug/UART3 | STM32 - PX4 | -| J1002 | UART ESC, UART2/TELEM3 | STM32 - PX4 | -| J1003 | PPM RC In | STM32 - PX4 | -| J1004 | RC Input, Spektrum/SBus/UART6 | STM32 - PX4 | -| J1006 | USB 2.0 Connector (PX4/QGroundControl) | STM32 - PX4 | -| J1007 | 8-Channel PWM/DShot Output | STM32 - PX4 | -| J1008 | CAN Bus | STM32 - PX4 | -| J1009 | I2C3, UART4 | STM32 - PX4 | -| J1010 | Telemetry (TELEM1) | STM32 - PX4 | -| J1011 | I2C2, Safety Button Input | STM32 - PX4 | -| J1012 | External GPS & Mag, UART1, I2C1 | STM32 - PX4 | -| J1013 | Power Input, I2C3 | STM32 - PX4 (powers whole system) | - -#### Bottom - -![VOXLFlightBottom](../../assets/flight_controller/modalai/voxl_flight/voxl-flight-bottom.jpg) - -_Note: 1000 Series connectors accessible from the STM32/PX4_ - -| Connector | 概要 | Used By | -| -------------- | ---------------------------------------------------------- | --------------------------- | -| J4 | Tracking/Optic Flow Image Sensor (CSI2) | Snapdragon - Linux | -| J8 | USB 3.0 OTG | Snapdragon - Linux, **adb** | -| J10 | BLSP7 UART and I2C off-board | Snapdragon - Linux | -| J11 | BLSP12 UART and I2C off-board | Snapdragon - Linux | -| VOXL microSD | | Snapdragon - Linux | -| PX4 microSD | 32Gb Max | STM32 - PX4 | -| Wi-Fi Antennas | Included | Snapdragon - Linux | - -### User Guide - -The full user guide is available [here](https://docs.modalai.com/voxl-flight-quickstart). - -### How to Build - -To [build PX4](../dev_setup/building_px4.md) for this target: - -``` -make modalai_fc-v1 -``` - -## 串口映射 - -_Note: mappings shown are for the PX4 controlled interfaces only_ - -| UART | 设备 | Port | -| ------ | ---------- | ---------------------------------------- | -| USART1 | /dev/ttyS0 | GPS1 (J1012) | -| USART2 | /dev/ttyS1 | TELEM3 (J1002) | -| USART3 | /dev/ttyS2 | Debug Console (J1001) | -| UART4 | /dev/ttyS3 | Expansion UART (J6) | -| UART5 | /dev/ttyS4 | UART between PX4 and Companion Computer | -| USART6 | /dev/ttyS5 | RC (J1004) | -| UART7 | /dev/ttyS6 | TELEM1 (J1010) | -| UART8 | /dev/ttyS7 | N/A | - - - -## 技术支持 - -Please visit the [ModalAI Forum](https://forum.modalai.com/category/8/voxl-flight) for more information. +DOC REMOVED: 202603 +--> diff --git a/docs/zh/flight_controller/mro_control_zero_f7.md b/docs/zh/flight_controller/mro_control_zero_f7.md index 0e2c41e68c..e89161130f 100644 --- a/docs/zh/flight_controller/mro_control_zero_f7.md +++ b/docs/zh/flight_controller/mro_control_zero_f7.md @@ -30,7 +30,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo - [Bosch BMI088](https://www.bosch-sensortec.com/products/motion-sensors/imus/bmi088/) 3-axis accelerometer/gyroscope (internally vibration dampened) - [Invensense ICM-20602](https://invensense.tdk.com/products/motion-tracking/6-axis/icm-20602/) 3-axis accelerometer/gyroscope - [Invensense ICM-20948](https://invensense.tdk.com/products/motion-tracking/9-axis/icm-20948/) 3-axis accelerometer/gyroscope/magnetometer - - [Infineon DPS310 barometer](https://www.infineon.com/assets/row/public/documents/24/49/infineon-dps310-datasheet-en.pdf) - [Discontinued](https://www.infineon.com/part/DPS310) (So smooth and NO more light sensitivity) + - Infineon DPS310 barometer - [Discontinued](https://www.infineon.com/products/sensor/pressure-sensors/pressure-sensors-for-iot) (So smooth and NO more light sensitivity) - 接口: - 6x UART (serial ports total), 3x with HW flow control, 1x FRSky Telemetry (D or X types), 1x Console and 1x GPS+I2C @@ -56,7 +56,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo - 电源系统 - 3x Ultra low noise LDO voltage regulator -## 购买渠道 +## Where to Buy {#store} - [mRo Control Zero](https://store.mrobotics.io/mRo-Control-Zero-F7-p/mro-ctrl-zero-f7.htm) @@ -69,22 +69,22 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make mro_ctrl-zero-f7 ``` -## Debug Ports +## Debug Ports {#debug_port} ### Console Port The [PX4 System Console](../debug/system_console.md) runs on `USART7` using the pins listed below. This is a standard serial pinout, designed to connect to a [3.3V FTDI](https://www.digikey.com/en/products/detail/TTL-232R-3V3/768-1015-ND/1836393) cable (5V tolerant). -\| mRo control zero f7 | | FTDI | -\| ------------------- | ----------- | ---- | ---------------- | -\| 17 | USART7 Tx | 5 | FTDI RX (yellow) | -\| 19 | USART7 Rx | 4 | FTDI TX (orange) | -\| 6 | USART21 GND | 1 | FTDI GND (black) | +| mRo control zero f7 | | FTDI | | +| ------------------- | ----------- | ---- | -------------------------------- | +| 17 | USART7 Tx | 5 | FTDI RX (黄色) | +| 19 | USART7 Rx | 4 | FTDI TX (橙色) | +| 6 | USART21 GND | 1 | FTDI GND (黑色) | ### SWD Port diff --git a/docs/zh/flight_controller/mro_pixhawk.md b/docs/zh/flight_controller/mro_pixhawk.md index 0cc954f889..b1f203a9ae 100644 --- a/docs/zh/flight_controller/mro_pixhawk.md +++ b/docs/zh/flight_controller/mro_pixhawk.md @@ -72,17 +72,178 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make px4_fmu-v3_default ``` ## Debug Ports -See [3DR Pixhawk 1 > Debug Ports](../flight_controller/pixhawk.md#debug-ports) +### Console Port + +The [PX4 System Console](../debug/system_console.md) runs on the port labeled [SERIAL4/5](#serial-4-5-port). + +:::tip +A convenient way to connect to the console is to use a [Zubax BugFace BF1](https://github.com/Zubax/bugface_bf1), as it comes with connectors that can be used with several different Pixhawk devices. +Simply connect the 6-pos DF13 1:1 cable on the [Zubax BugFace BF1](https://github.com/Zubax/bugface_bf1) to the Pixhawk `SERIAL4/5` port. + +![Zubax BugFace BF1](../../assets/flight_controller/mro/dronecode_probe.jpg) +::: + +The pinout is standard serial pinout, designed to connect to a [3.3V FTDI](https://www.digikey.com/en/products/detail/TTL-232R-3V3/768-1015-ND/1836393) cable (5V tolerant). + +| 3DR Pixhawk 1 | | FTDI | | +| ------------- | ---------------------------- | ---- | -------------------------------- | +| 1 | + 5v (红色) | | N/C | +| 2 | S4 Tx | | N/C | +| 3 | S4 Rx | | N/C | +| 4 | S5 Tx | 5 | FTDI RX (黄色) | +| 5 | S5 Rx | 4 | FTDI TX (橙色) | +| 6 | GND | 1 | FTDI GND (黑色) | + +The wiring for an FTDI cable to a 6-pos DF13 1:1 connector is shown in the figure below. + +![Console Connector](../../assets/flight_controller/mro/console_connector.jpg) + +The complete wiring is shown below. + +![Console Debug](../../assets/flight_controller/mro/console_debug.jpg) + +:::info +For information on how to _use_ the console see: [System Console](../debug/system_console.md). +::: + +### SWD Port + +The [SWD](../debug/swd_debug.md) (JTAG) ports are hidden under the cover (which must be removed for hardware debugging). +There are separate ports for FMU and IO, as highlighted below. + +![Pixhawk SWD](../../assets/flight_controller/mro/pixhawk_swd.jpg) + +The ports are ARM 10-pin JTAG connectors, which you will probably have to solder. +The pinout for the ports is shown below (the square markers in the corners above indicates pin 1). + +![ARM 10-Pin connector pinout](../../assets/flight_controller/mro/arm_10pin_jtag_connector_pinout.jpg) + +:::info +All Pixhawk FMUv2 boards have a similar SWD port. +::: ## 针脚定义 -See [3DR Pixhawk 1 > Pinouts](../flight_controller/pixhawk.md#pinouts) +#### TELEM1,TELEM2 接口 + +| 针脚 | 信号 | 电压 | +| ---- | ---------------------------- | --------------------- | +| 1(红) | VCC | +5V | +| 2 | TX (OUT) | +3.3V | +| 3 | RX (IN) | +3.3V | +| 4(黑) | CTS (IN) | +3.3V | +| 6 | RTS (OUT) | +3.3V | +| 6 | GND | GND | + +#### GPS 接口 + +| 针脚 | 信号 | 电压 | +| ---- | --------------------------- | --------------------- | +| 1(红) | VCC | +5V | +| 2 | TX (OUT) | +3.3V | +| 3 | RX (IN) | +3.3V | +| 4(黑) | CAN2 TX | +3.3V | +| 6 | CAN2 RX | +3.3V | +| 6 | GND | GND | + +#### SERIAL 4/5 port + +Due to space constraints two ports are on one connector. + +| 针脚 | 信号 | 电压 | +| ---- | -------------------------- | --------------------- | +| 1(红) | VCC | +5V | +| 2 | TX (#4) | +3.3V | +| 3 | RX (#4) | +3.3V | +| 4(黑) | TX (#5) | +3.3V | +| 6 | RX (#5) | +3.3V | +| 6 | GND | GND | + +#### ADC 6.6V + +| 针脚 | 信号 | 电压 | +| ---- | ------ | --------------------------- | +| 1(红) | VCC | +5V | +| 2 | ADC IN | up to +6.6V | +| 3 | GND | GND | + +#### ADC 3.3V + +| 针脚 | 信号 | 电压 | +| ---- | ------ | --------------------------- | +| 1(红) | VCC | +5V | +| 2 | ADC IN | up to +3.3V | +| 3 | GND | GND | +| 4(黑) | ADC IN | up to +3.3V | +| 6 | GND | GND | + +#### I2C + +| 针脚 | 信号 | 电压 | +| ---- | --- | ------------------------------------------------- | +| 1(红) | VCC | +5V | +| 2 | SCL | +3.3 (pullups) | +| 3 | SDA | +3.3 (pullups) | +| 4(黑) | GND | GND | + +#### CAN + +| 针脚 | 信号 | 电压 | +| ---- | -------------------------- | ---- | +| 1(红) | VCC | +5V | +| 2 | CAN_H | +12V | +| 3 | CAN_L | +12V | +| 4(黑) | GND | GND | + +#### SPI + +| 针脚 | 信号 | 电压 | +| ---- | ------------------------------------------------------ | -------------------- | +| 1(红) | VCC | +5V | +| 2 | SPI_EXT_SCK | +3.3 | +| 3 | SPI_EXT_MISO | +3.3 | +| 4(黑) | SPI_EXT_MOSI | +3.3 | +| 6 | !SPI_EXT_NSS | +3.3 | +| 6 | !GPIO_EXT | +3.3 | +| 7 | GND | GND | + +#### POWER + +| 针脚 | 信号 | 电压 | +| ---- | --- | --------------------- | +| 1(红) | VCC | +5V | +| 2 | VCC | +5V | +| 3 | 电流 | +3.3V | +| 4(黑) | 电压 | +3.3V | +| 6 | GND | GND | +| 6 | GND | GND | + +#### SWITCH + +| 针脚 | 信号 | 电压 | +| ---- | -------------------------------------------------------- | --------------------- | +| 1(红) | VCC | +3.3V | +| 2 | !IO_LED_SAFETY | GND | +| 3 | SAFETY | GND | + +## 串口映射 + +| UART | 设备 | Port | +| ------ | ---------- | ------------------------------ | +| UART1 | /dev/ttyS0 | IO debug | +| USART2 | /dev/ttyS1 | TELEM1 (流控) | +| USART3 | /dev/ttyS2 | TELEM2 (流控) | +| UART4 | | | +| UART7 | CONSOLE | | +| UART8 | SERIAL4 | | + + ## 串口映射 diff --git a/docs/zh/flight_controller/mro_x2.1.md b/docs/zh/flight_controller/mro_x2.1.md index d54c36cd5e..1be40508d7 100644 --- a/docs/zh/flight_controller/mro_x2.1.md +++ b/docs/zh/flight_controller/mro_x2.1.md @@ -1,122 +1,10 @@ + + + +Doc removed 202603 + text="Discontinued" 202507 / PX4v1.16 -:::warning -This flight controller has been [discontinued](../flight_controller/autopilot_experimental.md) and is no longer commercially available. -::: - -:::warning -PX4 does not manufacture this (or any) autopilot. -Contact the [manufacturer](https://store.mrobotics.io/) for hardware support or compliance issues. -::: - -The [mRo-X2.1 autopilot](http://www.mRobotics.io/) is based on the [Pixhawk®-project](https://pixhawk.org/) **FMUv2** open hardware design. -It runs PX4 on the [NuttX](https://nuttx.apache.org/) OS. - -![mRo X2.1](../../assets/flight_controller/mro/mro_x2.1.jpg) - -:::info -This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). -::: - -## 总览 - -- Main System-on-Chip: [STM32F427](https://www.st.com/en/microcontrollers-microprocessors/stm32f427-437.html) - - CPU: STM32F427VIT6 ARM® microcontroller - Revision 3 - - IO: STM32F100C8T6 ARM® microcontroller -- 传感器: - - Invensense® MPU9250 9DOF - - Invensense ICM-20602 6DOF - - MEAS MS5611 气压计 -- 尺寸/重量 - - Size: 36mm x 50mm - (Can be ordered with vertical, horizontal or no headers installed) - - 安装点:30.5mm x 30.5mm 直径 3.2mm - - 重量: 10.9g - -The diagram below provides a side-by-side comparison with a Pixhawk 1. -The mRo features almost identical hardware and connectivity but -has a much smaller footprint. -Major differences are updated sensors and Rev 3 FMU. - -![Mro Pixhawk 1 vs X2.1 comparison](../../assets/flight_controller/mro/px1_x21.jpg) - -## 连接 - -- 2.54 毫米头: -- GPS (UART4) with I2C -- CAN Bus -- 遥控输入 -- PPM 输入 -- Spektrum 输入 -- RSSI 输入 -- sBus 输入 -- sBus 输出 -- 电源输入 -- 蜂鸣器输出 -- LED 输出 -- 8路伺服输出 -- 6路辅助输出 -- Offboard microUSB connector -- Kill Pin output _(Currently not supported by firmware)_ -- AirSpeed Sensor -- USART2 (Telem 1) -- USART3 (Telem 2) -- UART7 (Console) -- UART8 (OSD) - -## PX4 BootLoader Issue - -By default a mRo X2.1 might come preconfigured for ArduPilot® rather than PX4. This -can be seen during firmware update when the board is recognized as FMUv2 instead of X2.1. - -In this case you must update the BootLoader using [BL_Update_X21.zip](https://github.com/PX4/PX4-Autopilot/raw/main/docs/assets/hardware/BL_Update_X21.zip). -If this correction is not carried out your compass direction will be wrong and the -secondary IMU will not be detected. - -The update steps are: - -1. Download and extract [BL_Update_X21.zip](https://github.com/PX4/PX4-Autopilot/raw/main/docs/assets/hardware/BL_Update_X21.zip). -2. Find the folder _BL_Update_X21_. This contains a **bin** file and a subfolder named **/etc** containing an **rc.txt** file -3. Copy these files to your micro SD card's root directory and insert it into the mRO x2.1 -4. Power on the mRO x2.1 Wait for it to boot and then reboot 1 time. - -## 访问链接 - -This product can be ordered at the [mRobotics® Store](https://store.mrobotics.io/mRo-X2-1-Rev-2-p/m10021a.htm). - -## 接线指南 - -![mRo_X2.1_Wiring](../../assets/flight_controller/mro/mro_x21_wiring.png) - -## 编译固件 - -:::tip -Most users will not need to build this firmware! -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: - -``` -make mro_x21_default -``` - -## 原理图 - -The board is documented on the mRo hardware repo: [x21_V2_schematic.pdf](https://github.com/mRoboticsIO/Hardware/blob/master/X2.1/Docs/x21_V2_schematic.pdf). - -## 串口映射 - -| UART | 设备 | Port | -| ------ | ---------- | --------------- | -| USART1 | /dev/ttyS0 | IO debug | -| USART2 | /dev/ttyS1 | SERIAL1 | -| USART3 | /dev/ttyS2 | TELEM2 | -| UART4 | /dev/ttyS3 | GPS/I2C | -| USART6 | /dev/ttyS4 | PX4IO | -| UART7 | /dev/ttyS5 | SERIAL5 CONSOLE | -| UART8 | /dev/ttyS6 | SERIAL4 | - - +Note: Got ports using https://github.com/PX4/PX4-user_guide/pull/672#issuecomment-598198434 +--> diff --git a/docs/zh/flight_controller/nxp_mr_vmu_rt1176.md b/docs/zh/flight_controller/nxp_mr_vmu_rt1176.md index 06436027d7..60e121c49d 100644 --- a/docs/zh/flight_controller/nxp_mr_vmu_rt1176.md +++ b/docs/zh/flight_controller/nxp_mr_vmu_rt1176.md @@ -147,7 +147,7 @@ Similar variants will be available from our licensees. - 其它特性: - Operating & storage temperature: -40 ~ 85°c -## 购买渠道 +## Where to Buy {#store} Order from [NXP](https://www.nxp.com). @@ -174,7 +174,7 @@ _MR-VMU-RT1176_ connectors (following [Pixhawk Connector Standard](https://githu [NXP MR-VMU-RT1176 Baseboard Pinout](https://nxp.gitbook.io/vmu-rt1176/pin-out) (nxp.gitbook.io) -备注: +Notes: - The [camera capture pin](../camera/fc_connected_camera.md#camera-capture-configuration) (`PI0`) is pin 2 on the AD&IO port, marked above as `FMU_CAP1`. diff --git a/docs/zh/flight_controller/nxp_rddrone_fmuk66.md b/docs/zh/flight_controller/nxp_rddrone_fmuk66.md index 3e6eecaef6..b57415577c 100644 --- a/docs/zh/flight_controller/nxp_rddrone_fmuk66.md +++ b/docs/zh/flight_controller/nxp_rddrone_fmuk66.md @@ -1,131 +1,7 @@ + + + - -## 购买渠道 - -**RDDRONE-FMUK66** reference design kit may be purchased direct from NXP or from any of NXP's authorised worldwide network of [electronics distributors](https://www.nxp.com/support/sample-and-buy/distributor-network:DISTRIBUTORS). - -- [Purchase Link](https://www.nxp.com/design/design-center/development-boards-and-designs/px4-robotic-drone-vehicle-flight-management-unit-vmu-fmu-rddrone-fmuk66:RDDRONE-FMUK66#buy) (www.nxp.com) -- Telemetry radios are purchased separately depending on frequency band: - - [HGD-TELEM433](https://www.nxp.com/part/HGD-TELEM433) - - [HGD-TELEM915](https://www.nxp.com/part/HGD-TELEM915) - -:::info -_RDDRONE-FMUK66_ FMU is also included in the complete HoverGames drone kit: [KIT-HGDRONEK66](https://www.nxp.com/design/design-center/development-boards-and-designs/nxp-hovergames-drone-kit-including-flight-controller-and-peripherals:KIT-HGDRONEK66#buy) -::: - - - -## 组装 / 设置 - -https://nxp.gitbook.io/hovergames - -## 编译固件 - -:::tip -Most users will not need to build this firmware! -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: - -``` -make nxp_fmuk66-v3_default -``` - -## 调试接口 - -The [PX4 System Console](../debug/system_console.md) and the [SWD interface](../debug/swd_debug.md) run on the [DCD-LZ FMU Debug](https://nxp.gitbook.io/hovergames/rddrone-fmuk66/connectors/debug-interface-dcd-lz) port. - -NXP's DCD-LZ is a 7 pin JST-GH connector and adds the nRST/MCU_RESET pin to the [Pixhawk 6-Pin standard debug port](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-009%20Pixhawk%20Connector%20Standard.pdf). - -The DCD-LZ breakout adapter permits the use of a standard 10 pin JTAG/SWD interface (i.e. using the Segger Jlink) and a standard 5 pin FTDI USB-TTL-3V3 type cable. - - - -## 支持的平台/机身 - -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). - -![HoverGames Drone Kit](../../assets/flight_controller/nxp_rddrone_fmuk66/hovergames_drone_14042019_xl001.jpg) - -:::tip -The NXP [HoverGames Drone Kit](https://www.nxp.com/kit-hgdronek66) (shown above) is a complete drone development kit that includes everything needed to build a quadcopter. -You only need to supply the 3S/4S LiPo battery. -::: - -## 更多信息 - -- [HoverGames online documentation](https://nxp.gitbook.io/hovergames) PX4 user and programming guide, specific assembly, construction, debugging, programming instructions. - -- 3DModels supporting HoverGames and RDDRONE-FMUK66 can be found on _Thingiverse_ at these search links: [fmuk66](https://www.thingiverse.com/search?q=fmuk66&type=things&sort=relevant), [hovergames](https://www.thingiverse.com/search?q=hovergames&type=things&sort=relevant). - -![HoverGamesDronelogo](../../assets/flight_controller/nxp_rddrone_fmuk66/hovergames_colored_small.png) diff --git a/docs/zh/flight_controller/ocpoc_zynq.md b/docs/zh/flight_controller/ocpoc_zynq.md index 76641665fc..807468b20f 100644 --- a/docs/zh/flight_controller/ocpoc_zynq.md +++ b/docs/zh/flight_controller/ocpoc_zynq.md @@ -1,12 +1,7 @@ + + + diff --git a/docs/zh/flight_controller/omnibus_f4_sd.md b/docs/zh/flight_controller/omnibus_f4_sd.md index ca2f22a264..b7d37a2db2 100644 --- a/docs/zh/flight_controller/omnibus_f4_sd.md +++ b/docs/zh/flight_controller/omnibus_f4_sd.md @@ -1,266 +1,7 @@ -# Omnibus F4 SD + -:::warning -This flight controller has been [discontinued](../flight_controller/autopilot_experimental.md) and is no longer commercially available. -::: + - -## RC Telemetry - -The Omnibus supports telemetry to the RC Transmitter using [FrSky Telemetry](../peripherals/frsky_telemetry.md) or [CRSF Crossfire Telemetry](#crsf_telemetry). - - - -### CRSF Crossfire Telemetry - -[TBS CRSF Telemetry](../telemetry/crsf_telemetry.md) may be used to send telemetry data from the flight controller (the vehicle's attitude, battery, flight mode and GPS data) to an RC transmitter such as a Taranis. - -Benefits over [FrSky telemetry](../peripherals/frsky_telemetry.md) include: - -- Only a single UART is needed for RC and telemetry. -- The CRSF protocol is optimized for low latency. -- 150 Hz RC update rate. -- The signals are uninverted and thus no (external) inverter logic is required. - -:::info -If you use CRSF Telemetry you will need to build custom PX4 firmware. -By contrast, FrSky telemetry can use prebuilt firmware. -::: - -For Omnibus we recommend the [TBS Crossfire Nano RX](https://www.team-blacksheep.com/products/prod:crossfire_nano_rx), since it is specifically designed for small Quads. - -On the handheld controller (e.g. Taranis) you will also need a [Transmitter Module](https://www.team-blacksheep.com/shop/cat:tbs-crossfire-radio-transmitter#product_listing). -This can be plugged into the back of the RC controller. - -:::info -The referenced links above contains the documentation for the TX/RX modules. -::: - -#### 设置 - -Connect the Nano RX and Omnibus pins as shown: - -| Omnibus UART1 | Nano RX | -| ------------- | ------- | -| TX | Ch2 | -| RX | Ch1 | - -Next update the TX/RX modules to use the CRSF protocol and set up telemetry. -Instructions for this are provided in the [TBS Crossfire Manual](https://www.team-blacksheep.com/media/files/tbs-crossfire-manual.pdf) (search for 'Setting up radio for CRSF'). - -#### PX4 CRSF Configuration - -You will need to build custom firmware to use CRSF. -For more information see [CRSF Telemetry](../telemetry/crsf_telemetry.md#px4-configuration). - - - -## PX4 Bootloader Update {#bootloader} - -The board comes pre-installed with [Betaflight](https://github.com/betaflight/betaflight/wiki). -Before PX4 firmware can be installed, the _PX4 bootloader_ must be flashed. -Download the [omnibusf4sd_bl.hex](https://github.com/PX4/PX4-Autopilot/raw/main/docs/assets/flight_controller/omnibus_f4_sd/omnibusf4sd_bl_d52b70cb39.hex) bootloader binary and read [this page](../advanced_config/bootloader_update_from_betaflight.md) for flashing instructions. - -## 编译固件 - -To [build PX4](../dev_setup/building_px4.md) for this target: - -``` -make omnibus_f4sd_default -``` - -## Installing PX4 Firmware - -You can use either pre-built firmware or your own custom firmware. - -:::warning -If you use [CRSF Telemetry](../telemetry/crsf_telemetry.md#px4-configuration) in your radio system, as describe above, then you must use custom firmware. -::: - -The firmware can be installed in any of the normal ways: - -- Build and upload the source - - ``` - make omnibus_f4sd_default upload - ``` - -- [Load the firmware](../config/firmware.md) using _QGroundControl_. - -## 配置 - -In addition to the [basic configuration](../config/index.md), the following parameters are important: - -| 参数 | 设置 | -| ---------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [SYS_HAS_MAG](../advanced_config/parameter_reference.md#SYS_HAS_MAG) | This should be disabled since the board does not have an internal mag. You can enable it if you attach an external mag. | -| [SYS_HAS_BARO](../advanced_config/parameter_reference.md#SYS_HAS_BARO) | Disable this if your board does not have a barometer. | - -## Further Info - -[This page](https://blog.unmanned.tech/omnibus-f4-flight-controller-guide/) provides a good overview with pinouts and setup instructions. +DOC REMOVED: 202603 +--> diff --git a/docs/zh/flight_controller/pixfalcon.md b/docs/zh/flight_controller/pixfalcon.md index df1b22c5d8..ad95ab4c86 100644 --- a/docs/zh/flight_controller/pixfalcon.md +++ b/docs/zh/flight_controller/pixfalcon.md @@ -1,75 +1,5 @@ + + + + text="Discontinued" px4_current="v1.15" year="2024". This change in 202603 --> diff --git a/docs/zh/flight_controller/pixhack_v3.md b/docs/zh/flight_controller/pixhack_v3.md index ac3566c88b..d7907a18c3 100644 --- a/docs/zh/flight_controller/pixhack_v3.md +++ b/docs/zh/flight_controller/pixhack_v3.md @@ -1,88 +1,8 @@ + + + - -## 串口映射 - -| UART | 设备 | Port | -| ------ | ---------- | ------------------------------ | -| UART1 | /dev/ttyS0 | IO debug | -| USART2 | /dev/ttyS1 | TELEM1 (流控) | -| USART3 | /dev/ttyS2 | TELEM2 (流控) | -| UART4 | | | -| UART7 | | CONSOLE | -| UART8 | | SERIAL4 | +--> diff --git a/docs/zh/flight_controller/pixhawk-2.md b/docs/zh/flight_controller/pixhawk-2.md index 51dd87718f..e93255f6a9 100644 --- a/docs/zh/flight_controller/pixhawk-2.md +++ b/docs/zh/flight_controller/pixhawk-2.md @@ -47,9 +47,7 @@ This autopilot is [supported](../flight_controller/autopilot_pixhawk_standard.md - High-power, multi-tone piezo audio indicator - microSD card for high-rate logging over extended periods of time - - -## 购买渠道 +## Where to Buy {#store} [Cube Black](https://www.cubepilot.com/#/reseller/list) (Reseller list) @@ -155,7 +153,7 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make px4_fmu-v3_default ``` diff --git a/docs/zh/flight_controller/pixhawk.md b/docs/zh/flight_controller/pixhawk.md index 4cdae9634f..c8bd92ee33 100644 --- a/docs/zh/flight_controller/pixhawk.md +++ b/docs/zh/flight_controller/pixhawk.md @@ -1,337 +1,6 @@ + + + - -## Debug Ports - -### Console Port - -The [PX4 System Console](../debug/system_console.md) runs on the port labeled [SERIAL4/5](#serial-4-5-port). - -:::tip -A convenient way to connect to the console is to use a [Zubax BugFace BF1](https://github.com/Zubax/bugface_bf1), as it comes with connectors that can be used with several different Pixhawk devices. -Simply connect the 6-pos DF13 1:1 cable on the [Zubax BugFace BF1](https://github.com/Zubax/bugface_bf1) to the Pixhawk `SERIAL4/5` port. - -![Zubax BugFace BF1](../../assets/flight_controller/pixhawk1/dronecode_probe.jpg) -::: - -The pinout is standard serial pinout, designed to connect to a [3.3V FTDI](https://www.digikey.com/en/products/detail/TTL-232R-3V3/768-1015-ND/1836393) cable (5V tolerant). - -\| 3DR Pixhawk 1 | | FTDI | -\| ------------- | --------- | ---- | ---------------- | -\| 1 | +5V (red) | | N/C | -\| 2 | S4 Tx | | N/C | -\| 3 | S4 Rx | | N/C | -\| 4 | S5 Tx | 5 | FTDI RX (yellow) | -\| 5 | S5 Rx | 4 | FTDI TX (orange) | -\| 6 | GND | 1 | FTDI GND (black) | - -The wiring for an FTDI cable to a 6-pos DF13 1:1 connector is shown in the figure below. - -![Console Connector](../../assets/flight_controller/pixhawk1/console_connector.jpg) - -The complete wiring is shown below. - -![Console Debug](../../assets/flight_controller/pixhawk1/console_debug.jpg) - -:::info -For information on how to _use_ the console see: [System Console](../debug/system_console.md). -::: - -### SWD Port - -The [SWD](../debug/swd_debug.md) (JTAG) ports are hidden under the cover (which must be removed for hardware debugging). -There are separate ports for FMU and IO, as highlighted below. - -![Pixhawk SWD](../../assets/flight_controller/pixhawk1/pixhawk_swd.jpg) - -The ports are ARM 10-pin JTAG connectors, which you will probably have to solder. -The pinout for the ports is shown below (the square markers in the corners above indicates pin 1). - -![ARM 10-Pin connector pinout](../../assets/flight_controller/pixhawk1/arm_10pin_jtag_connector_pinout.jpg) - -:::info -All Pixhawk FMUv2 boards have a similar SWD port. -::: - -## 编译固件 - -:::tip -Most users will not need to build this firmware! -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: - -``` -make px4_fmu-v2_default -``` - -## Parts / Housings - -- **ARM MINI JTAG (J6)**: 1.27 mm 10pos header (SHROUDED), for Black Magic Probe: FCI 20021521-00010D4LF ([Digi-Key](https://www.digikey.com/en/products/detail/20021521-00010T1LF/609-4054-ND/2414951),) or Samtec FTSH-105-01-F-DV-K (untested) or Harwin M50-3600542 ([Digikey](https://www.digikey.com/en/products/detail/harwin-inc/M50-3600542/2264370)) - - JTAG Adapter Option #1: [BlackMagic Probe](https://1bitsquared.com/products/black-magic-probe). Note, may come without cables (check with manufacturer). - If so, you will need the **Samtec FFSD-05-D-06.00-01-N** cable ([Samtec sample service](https://www.samtec.com/products/ffsd-05-d-06.00-01-n) or [Digi-Key Link: SAM8218-ND](https://www.digikey.com/en/products/detail/samtec-inc/ffsd-05-d-06-00-01-n/1106577)) or [Tag Connect Ribbon](https://www.tag-connect.com/product/10-pin-cortex-ribbon-cable-4-length-with-50-mil-connectors) and a Mini-USB cable. - - JTAG Adapter Option #2: [Digi-Key Link: ST-LINK/V2](https://www.digikey.com/product-detail/en/stmicroelectronics/ST-LINK-V2/497-10484-ND) / [ST USER MANUAL](https://www.st.com/resource/en/user_manual/dm00026748.pdf), needs an ARM Mini JTAG to 20pos adapter: [Digi-Key Link: 726-1193-ND](https://www.digikey.com/en/products/detail/texas-instruments/MDL-ADA2/1986451) - - JTAG Adapter Option #3: [Olimex ARM-TINY](https://www.olimex.com/wiki/ARM-USB-TINY) or any other OpenOCD-compatible ARM Cortex JTAG adapter, needs an ARM Mini JTAG to 20pos adapter: [Digi-Key Link: 726-1193-ND](https://www.digikey.com/en/products/detail/texas-instruments/MDL-ADA2/1986451) -- **USARTs**: Hirose DF13 6 pos ([Digi-Key Link: DF13A-6P-1.25H(20)](https://www.digikey.com/products/en?keywords=H3371-ND)) - - Mates: Hirose DF13 6 pos housing ([Digi-Key Link: Hirose DF13-6S-1.25C](https://www.digikey.com/products/en?keywords=H2182-ND)) -- **I2C and CAN**: Hirose DF13 4 pos ([Digi-Key Link: DF13A-4P-1.25H(20)](https://www.digikey.com/en/products/detail/hirose-electric-co-ltd/DF13A-4P-1-25H-20/530666) - discontinued) - -## 支持的平台/机身 - -Any multicopter / airplane / rover or boat that can be controlled with normal RC servos or Futaba S-Bus servos. +Doc removed 202604 +--> diff --git a/docs/zh/flight_controller/pixhawk3_pro.md b/docs/zh/flight_controller/pixhawk3_pro.md index 7947f34a9f..deaacad9ac 100644 --- a/docs/zh/flight_controller/pixhawk3_pro.md +++ b/docs/zh/flight_controller/pixhawk3_pro.md @@ -1,87 +1,7 @@ + + + +DOC REMOVED: 202603 +--> diff --git a/docs/zh/flight_controller/pixhawk4.md b/docs/zh/flight_controller/pixhawk4.md index c23bbc082b..e8b03020de 100644 --- a/docs/zh/flight_controller/pixhawk4.md +++ b/docs/zh/flight_controller/pixhawk4.md @@ -51,7 +51,7 @@ This autopilot is [supported](../flight_controller/autopilot_pixhawk_standard.md Additional information can be found in the [Pixhawk 4 Technical Data Sheet](https://github.com/PX4/PX4-Autopilot/blob/main/docs/assets/flight_controller/pixhawk4/pixhawk4_technical_data_sheet.pdf). -## 购买渠道 +## Where to Buy {#store} Order from [Holybro](https://holybro.com/products/pixhawk-4). @@ -126,13 +126,11 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make px4_fmu-v5_default ``` - - -## 调试接口 +## Debug Port {#debug_port} The [PX4 System Console](../debug/system_console.md) and [SWD interface](../debug/swd_debug.md) run on the **FMU Debug** port, while the I/O console and SWD interface can be accessed via **I/O Debug** port. In order to access these ports, the user must remove the _Pixhawk 4_ casing. diff --git a/docs/zh/flight_controller/pixhawk4_mini.md b/docs/zh/flight_controller/pixhawk4_mini.md index 1a73ddc3c2..d5ccdebf6a 100644 --- a/docs/zh/flight_controller/pixhawk4_mini.md +++ b/docs/zh/flight_controller/pixhawk4_mini.md @@ -1,160 +1,7 @@ + + + diff --git a/docs/zh/flight_controller/pixhawk5x.md b/docs/zh/flight_controller/pixhawk5x.md index f78e8ef9e4..62c850f201 100644 --- a/docs/zh/flight_controller/pixhawk5x.md +++ b/docs/zh/flight_controller/pixhawk5x.md @@ -113,7 +113,7 @@ The Pixhawk® 5X is perfect for developers at corporate research labs, startups, - 其它特性: - Operating & storage temperature: -40 ~ 85°c -## 购买渠道 +## Where to Buy {#store} Order from [Holybro](https://holybro.com/products/pixhawk-5x). @@ -131,10 +131,10 @@ The [Pixhawk 5X Wiring Quick Start](../assembly/quick_start_pixhawk5x.md) provid :::info Connector pin assignments are left to right (i.e. Pin 1 is the left-most pin). -::: infos: +::: - The [camera capture pin](../camera/fc_connected_camera.md#camera-capture-configuration) (`PI0`) is pin 2 on the AD&IO port, marked above as `FMU_CAP1`. -- _Pixhawk 5X_ pinouts can be downloaded in PDF from from [here](https://github.com/PX4/PX4-user_guide/blob/main/assets/flight_controller/pixhawk5x/pixhawk5x_pinout.pdf) or [here](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_Pixhawk5X_Pinout.pdf). +- _Pixhawk 5X_ pinouts can be downloaded in PDF from [here](https://github.com/PX4/PX4-user_guide/blob/main/assets/flight_controller/pixhawk5x/pixhawk5x_pinout.pdf) or [here](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_Pixhawk5X_Pinout.pdf). ## 串口映射 @@ -177,7 +177,7 @@ Under these conditions the system will not draw any power (will not be operation Digital I2C battery monitoring is enabled by default (see [Quickstart > Power](../assembly/quick_start_pixhawk5x.md#power)). -::: info +:::info Analog battery monitoring via an ADC is not supported on this particular board, but may be supported in variations of this flight controller with a different baseboard. ::: @@ -190,13 +190,11 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make px4_fmu-v5x_default ``` - - -## 调试接口 +## Debug Port {#debug_port} The [PX4 System Console](../debug/system_console.md) and [SWD interface](../debug/swd_debug.md) run on the **FMU Debug** port. diff --git a/docs/zh/flight_controller/pixhawk6c.md b/docs/zh/flight_controller/pixhawk6c.md index 9b2eaa5c76..751544620f 100644 --- a/docs/zh/flight_controller/pixhawk6c.md +++ b/docs/zh/flight_controller/pixhawk6c.md @@ -96,7 +96,7 @@ The Pixhawk® 6C is perfect for developers at corporate research labs, startups, - 其它特性: - Operating & storage temperature: -40 ~ 85°c -## 购买渠道 +## Where to Buy {#store} Order from [Holybro](https://holybro.com/products/pixhawk-6c). @@ -162,13 +162,11 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make px4_fmu-v6c_default ``` - - -## 调试接口 +## Debug Port {#debug_port} The [PX4 System Console](../debug/system_console.md) and [SWD interface](../debug/swd_debug.md) run on the **FMU Debug** port. diff --git a/docs/zh/flight_controller/pixhawk6c_mini.md b/docs/zh/flight_controller/pixhawk6c_mini.md index 5c5069b5ee..c51b6baba9 100644 --- a/docs/zh/flight_controller/pixhawk6c_mini.md +++ b/docs/zh/flight_controller/pixhawk6c_mini.md @@ -58,7 +58,7 @@ The Pixhawk® 6C Mini is perfect for developers at corporate research labs, star - USB Power Input: 4.75\~5.25V - Servo Rail Input: 0\~36V - Current Ratings: - - \`TELEM1\`\` Max output current limiter: 1A + - `TELEM1` Max output current limiter: 1A - All other port combined output current limiter: 1A ### **Mechanical data** @@ -94,14 +94,14 @@ The Pixhawk® 6C Mini is perfect for developers at corporate research labs, star - 其它特性: - Operating & storage temperature: -40 ~ 85°c -## 购买渠道 +## Where to Buy {#store} Order from [Holybro](https://holybro.com/products/pixhawk-6c-mini). ## 组装 / 设置 -The Pixhawk 4 Mini's port is very similar to the Pixhawk 6C Mini's port. -Please refer to the [Pixhawk 4 Mini Wiring Quick Start](../assembly/quick_start_pixhawk4_mini.md) as it provides instructions on how to assemble required/important peripherals including GPS, Power Module etc. +The Pixhawk 6C Mini's ports are very similar to the Pixhawk 4 Mini's ports. +Please refer to the [Pixhawk 4 Mini Wiring Quick Start](https://docs.px4.io/v1.16/en/assembly/quick_start_pixhawk4_mini) (Discontinued) as it provides instructions on how to assemble required/important peripherals including GPS, Power Module etc. ## 针脚定义 @@ -165,13 +165,11 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make px4_fmu-v6c_default ``` - - -## 调试接口 +## Debug Port {#debug_port} The [PX4 System Console](../debug/system_console.md) and [SWD interface](../debug/swd_debug.md) run on the **FMU Debug** port. @@ -208,7 +206,7 @@ The complete set of supported configurations can be seen in the [Airframes Refer ## 另见 - [Holybro Docs](https://docs.holybro.com/) (Holybro) -- [Pixhawk 4 Mini Wiring Quick Start](../assembly/quick_start_pixhawk4_mini.md) (and [Pixhawk 6C Wiring QuickStart](../assembly/quick_start_pixhawk6c.md)) +- [Pixhawk 6C Wiring QuickStart](../assembly/quick_start_pixhawk6c.md) - [PM02 Power Module](../power_module/holybro_pm02.md) - [PM06 Power Module](../power_module/holybro_pm06_pixhawk4mini_power_module.md) - [PM07 Power Module](../power_module/holybro_pm07_pixhawk4_power_module.md) diff --git a/docs/zh/flight_controller/pixhawk6x-rt.md b/docs/zh/flight_controller/pixhawk6x-rt.md index cddcc6d4c6..13171fd8b6 100644 --- a/docs/zh/flight_controller/pixhawk6x-rt.md +++ b/docs/zh/flight_controller/pixhawk6x-rt.md @@ -130,9 +130,9 @@ The Pixhawk®​ 6X-RT is perfect for developers at corporate research labs, sta - 其它特性: - Operating & storage temperature: -40 ~ 85°c -## 购买渠道 +## Where to Buy {#store} -Order from [Holybro](https://holybro.com/products/fmuv6x-rt-developer-edition). +Order from [Holybro](https://holybro.com/products/pixhawk-6x-rt). ## 组装 / 设置 @@ -149,7 +149,7 @@ Sample Wiring Diagram - [Holybro Pixhawk Baseboard Pinout](https://docs.holybro.com/autopilot/pixhawk-6x/pixhawk-baseboard-pinout) - [Holybro Pixhawk Mini-Baseboard Pinout](https://docs.holybro.com/autopilot/pixhawk-6x/pixhawk-mini-baseboard-pinout) -备注: +Notes: - The [camera capture pin](../camera/fc_connected_camera.md#camera-capture-configuration) (`PI0`) is pin 2 on the AD&IO port, marked above as `FMU_CAP1`. @@ -207,13 +207,11 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make px4_fmu-v6xrt_default ``` - - -## 调试接口 +## Debug Port {#debug_port} The [PX4 System Console](../debug/system_console.md) and [SWD interface](../debug/swd_debug.md) run on the **FMU Debug** port. diff --git a/docs/zh/flight_controller/pixhawk6x.md b/docs/zh/flight_controller/pixhawk6x.md index 81d456b8f4..e1948b6e28 100644 --- a/docs/zh/flight_controller/pixhawk6x.md +++ b/docs/zh/flight_controller/pixhawk6x.md @@ -160,7 +160,7 @@ The Pixhawk®​ 6X is perfect for developers at corporate research labs, startu - 其它特性: - Operating & storage temperature: -40 ~ 85°c -## 购买渠道 +## Where to Buy {#store} Order from [Holybro](https://holybro.com/products/pixhawk-6x). @@ -180,7 +180,7 @@ Sample Wiring Diagram - [Holybro Pixhawk Jetson Baseboard](https://docs.holybro.com/autopilot/pixhawk-baseboards/pixhawk-jetson-baseboard) - [Holybro Pixhawk RPi CM4 Baseboard](https://docs.holybro.com/autopilot/pixhawk-baseboards/pixhawk-rpi-cm4-baseboard) -备注: +Notes: - The [camera capture pin](../camera/fc_connected_camera.md#camera-capture-configuration) (`PI0`) is pin 2 on the AD&IO port, marked above as `FMU_CAP1`. @@ -215,7 +215,7 @@ Under these conditions, all power sources will be used in this order to power th **Absolute Maximum Ratings** -Under these conditions, the system will not draw any power (will not be operational) but will remain intact. +Under these conditions, the system will not draw any power (will not be operational), but will remain intact. 1. **POWER1** and **POWER2** inputs (operational range 4.1V to 5.7V, 0V to 10V undamaged) 2. **USB** input (operational range 4.1V to 5.7V, 0V to 6V undamaged) @@ -238,13 +238,11 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make px4_fmu-v6x_default ``` - - -## 调试接口 +## Debug Port {#debug_port} The [PX4 System Console](../debug/system_console.md) and [SWD interface](../debug/swd_debug.md) run on the **FMU Debug** port. diff --git a/docs/zh/flight_controller/pixhawk6x_pro.md b/docs/zh/flight_controller/pixhawk6x_pro.md index 6d5a0fcdbb..0171a1000e 100644 --- a/docs/zh/flight_controller/pixhawk6x_pro.md +++ b/docs/zh/flight_controller/pixhawk6x_pro.md @@ -115,7 +115,7 @@ Mechanical data ::: -## 购买渠道 +## Where to Buy {#store} Order from [Holybro](https://holybro.com/products/pixhawk-6x-pro). @@ -140,7 +140,7 @@ The [Pixhawk 6X Wiring Quick Start](../assembly/quick_start_pixhawk6x.md) provid - [Holybro Pixhawk Jetson Baseboard](https://docs.holybro.com/autopilot/pixhawk-baseboards/pixhawk-jetson-baseboard) - [Holybro Pixhawk RPi CM4 Baseboard](https://docs.holybro.com/autopilot/pixhawk-baseboards/pixhawk-rpi-cm4-baseboard) -备注: +Notes: - The [camera capture pin](../camera/fc_connected_camera.md#camera-capture-configuration) (`PI0`) is pin 2 on the AD&IO port, marked above as `FMU_CAP1`. @@ -199,7 +199,7 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make px4_fmu-v6x_default ``` diff --git a/docs/zh/flight_controller/pixhawk_mini.md b/docs/zh/flight_controller/pixhawk_mini.md index 48049ee725..5cef4b678c 100644 --- a/docs/zh/flight_controller/pixhawk_mini.md +++ b/docs/zh/flight_controller/pixhawk_mini.md @@ -1,327 +1,7 @@ + + + diff --git a/docs/zh/flight_controller/pixhawk_series.md b/docs/zh/flight_controller/pixhawk_series.md index 20b01255b5..c2967e8d6e 100644 --- a/docs/zh/flight_controller/pixhawk_series.md +++ b/docs/zh/flight_controller/pixhawk_series.md @@ -71,7 +71,7 @@ PX4 _developers_ need to know the FMU version of their board, as this is require At very high level, the main differences are: -- **FMUv2:** Single board with STM32427VI processor ([Pixhawk 1 (Discontinued)](../flight_controller/pixhawk.md), [pix32](../flight_controller/holybro_pix32.md), [Pixfalcon](../flight_controller/pixfalcon.md), [Drotek DroPix](../flight_controller/dropix.md)) +- **FMUv2:** Single board with STM32427VI processor (Pixhawk 1 (discontinued), Holybro pix32 (discontinued), Pixfalcon (discontinued), Drotek DroPix (discontinued)) - **FMUv3:** Identical to FMUv2, but usable flash doubled to 2MB ([Hex Cube Black](../flight_controller/pixhawk-2.md),[CUAV Pixhack v3](../flight_controller/pixhack_v3.md),[mRo Pixhawk](../flight_controller/mro_pixhawk.md), [Pixhawk Mini (Discontinued)](../flight_controller/pixhawk_mini.md)) - **FMUv4:** Increased RAM. Faster CPU. More serial ports. No IO processor ([Pixracer](../flight_controller/pixracer.md)) - **FMUv4-PRO:** Slightly increased RAM. More serial ports. IO processor ([Pixhawk 3 Pro](../flight_controller/pixhawk3_pro.md)) diff --git a/docs/zh/flight_controller/pixracer.md b/docs/zh/flight_controller/pixracer.md index cc508f2839..ad783e1596 100644 --- a/docs/zh/flight_controller/pixracer.md +++ b/docs/zh/flight_controller/pixracer.md @@ -30,7 +30,7 @@ This autopilot is [supported](../flight_controller/autopilot_pixhawk_standard.md - OneShot PWM out (configurable) - Optional: Safety switch and buzzer -## 购买渠道 +## Where to Buy {#store} Pixracer Pro is available from the [store.3dr.com](https://store.3dr.com/pixracer-pro/). @@ -217,7 +217,7 @@ It is pre-built and automatically installed by _QGroundControl_ when appropriate To [build PX4](../dev_setup/building_px4.md) for this target: -``` +```sh make px4_fmu-v4_default ``` diff --git a/docs/zh/flight_controller/raccoonlab_fmu6x.md b/docs/zh/flight_controller/raccoonlab_fmu6x.md index 656331f732..dbb226bcea 100644 --- a/docs/zh/flight_controller/raccoonlab_fmu6x.md +++ b/docs/zh/flight_controller/raccoonlab_fmu6x.md @@ -130,7 +130,7 @@ The manufacturer [RaccoonLab Docs](https://docs.raccoonlab.co/guide/autopilot/RC They should be used by preference as they contain the most complete and up to date information. ::: -## 购买渠道 +## Where to Buy {#store} [RaccoonLab Store](https://raccoonlab.co/store) diff --git a/docs/zh/flight_controller/radiolink_pix6.md b/docs/zh/flight_controller/radiolink_pix6.md index 73c70f12cf..d67f7be212 100644 --- a/docs/zh/flight_controller/radiolink_pix6.md +++ b/docs/zh/flight_controller/radiolink_pix6.md @@ -27,7 +27,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo - 32KB FRAM - FM25V02A - AT7456E OSD - 传感器 - - Bosh BMI088 IMU (accel, gyro) + - Bosch BMI088 IMU (accel, gyro) - InvenSense ICM-42688 IMU (accel, gyro) - SPA06 barometer - IST8310 magnetometer @@ -48,7 +48,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo - Weight 80g - Size 94mm x 51.5mm x 14.5mm -## 购买渠道 +## Where to Buy {#store} [Radiolink Amazon](https://www.radiolink.com.cn/pix6_where_to_buy)(International users) @@ -278,7 +278,7 @@ In addition to the [basic configuration](../config/index.md), the following para ### Powering the PIX6 The PIX6 has 2 dedicated power monitor ports, each with a 6 pin connector. -One is the Analog power monitor (`POWER1`), and the others is the I2C power monitor (`POWER2`). +One is the Analog power monitor (`POWER1`), and the other is the I2C power monitor (`POWER2`). The power module that comes with the flight controller with a wide voltage input range of 2-12S (7.4-50.4V), a maximum detection current of 90A (single ESC maximum detection current is 22.5A), a BEC output voltage of 5.3±0.2V, and a BEC output current of 2A. diff --git a/docs/zh/flight_controller/raspberry_pi_pilotpi.md b/docs/zh/flight_controller/raspberry_pi_pilotpi.md index 664b4ea1ca..b3fc5e0efe 100644 --- a/docs/zh/flight_controller/raspberry_pi_pilotpi.md +++ b/docs/zh/flight_controller/raspberry_pi_pilotpi.md @@ -175,7 +175,7 @@ This switch is connected to Pin22(BCM25). System rc script will check its value and decide whether PX4 should start alongside with system booting or not. - 开启:开机自启 PX4 -- 关闭:不启动 PX4 +- Off: don't start PX4 ## 开发者快速指南 diff --git a/docs/zh/flight_controller/raspberry_pi_pilotpi_rpios.md b/docs/zh/flight_controller/raspberry_pi_pilotpi_rpios.md index 36c1c4ca39..02e283d719 100644 --- a/docs/zh/flight_controller/raspberry_pi_pilotpi_rpios.md +++ b/docs/zh/flight_controller/raspberry_pi_pilotpi_rpios.md @@ -125,7 +125,7 @@ Don't forget to turn off the switch when it is not needed. #### CSI 相机 :::info -Enable CSI camera will stop anything works on I2C-0. +Enabling CSI camera will stop anything that works on I2C-0. ::: ```sh diff --git a/docs/zh/flight_controller/raspberry_pi_pilotpi_ubuntu_server.md b/docs/zh/flight_controller/raspberry_pi_pilotpi_ubuntu_server.md index d4aef6f78e..eba4b7ff39 100644 --- a/docs/zh/flight_controller/raspberry_pi_pilotpi_ubuntu_server.md +++ b/docs/zh/flight_controller/raspberry_pi_pilotpi_ubuntu_server.md @@ -16,13 +16,13 @@ Design for better heat dissipation and high power consumption when using this ha - [Ubuntu Server 18.04.5 for RPi2](https://cdimage.ubuntu.com/releases/18.04.5/release/ubuntu-18.04.5-preinstalled-server-armhf+raspi2.img.xz) - [Ubuntu Server 18.04.5 for RPi3](https://cdimage.ubuntu.com/releases/18.04.5/release/ubuntu-18.04.5-preinstalled-server-armhf+raspi3.img.xz) - [Ubuntu Server 18.04.5 for RPi4](https://cdimage.ubuntu.com/releases/18.04.5/release/ubuntu-18.04.5-preinstalled-server-armhf+raspi4.img.xz) -- [Ubuntu Server 20.04.1 for RPi 2/3/4](https://cdimage.ubuntu.com/releases/20.04.1/release/ubuntu-20.04.2-preinstalled-server-arm64+raspi.img.xz) +- [Ubuntu Server 20.04.1 for RPi 2/3/4](https://old-releases.ubuntu.com/releases/focal/ubuntu-20.04.2-preinstalled-server-arm64+raspi.img.xz) #### arm64 - [Ubuntu Server 18.04.5 for RPi3](https://cdimage.ubuntu.com/releases/18.04.5/release/ubuntu-18.04.5-preinstalled-server-arm64+raspi3.img.xz) - [Ubuntu Server 18.04.5 for RPi4](https://cdimage.ubuntu.com/releases/18.04.5/release/ubuntu-18.04.5-preinstalled-server-arm64+raspi4.img.xz) -- [Ubuntu Server 20.04.1 for RPi 3/4](https://cdimage.ubuntu.com/releases/20.04.1/release/ubuntu-20.04.2-preinstalled-server-arm64+raspi.img.xz) +- [Ubuntu Server 20.04.1 for RPi 3/4](https://old-releases.ubuntu.com/releases/focal/ubuntu-20.04.2-preinstalled-server-arm64+raspi.img.xz) #### 最新操作系统 @@ -206,7 +206,7 @@ Don't forget to turn off the switch when it is not needed! #### CSI 相机 :::warning -Enable CSI camera will stop anything works on I2C-0. +Enabling CSI camera will stop anything that works on I2C-0. ::: ```sh diff --git a/docs/zh/flight_controller/spracingh7extreme.md b/docs/zh/flight_controller/spracingh7extreme.md index 2d572609c0..76e230bda8 100644 --- a/docs/zh/flight_controller/spracingh7extreme.md +++ b/docs/zh/flight_controller/spracingh7extreme.md @@ -72,7 +72,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo - 36x36mm with 30.5\*30.5 mouting pattern, M4 holes. - Soft-mount M4 to M3 grommets supplied. -## 购买渠道 +## Where to Buy {#store} The SPRacingH7EXTREME is available from the [Seriously Pro shop](https://shop.seriouslypro.com/sp-racing-h7-extreme). diff --git a/docs/zh/flight_controller/svehicle_e2.md b/docs/zh/flight_controller/svehicle_e2.md index 13baec27c3..0398482330 100644 --- a/docs/zh/flight_controller/svehicle_e2.md +++ b/docs/zh/flight_controller/svehicle_e2.md @@ -58,7 +58,7 @@ These flight controllers are [manufacturer supported](../flight_controller/autop - 1x Dedicated Debug Port - FMU Debug -## Purchase Channels +## Purchase Channels {#store} Order from [S-Vehicle](https://svehicle.cn/). diff --git a/docs/zh/flight_controller/thepeach_k1.md b/docs/zh/flight_controller/thepeach_k1.md index aefdcb3033..15bacdfd10 100644 --- a/docs/zh/flight_controller/thepeach_k1.md +++ b/docs/zh/flight_controller/thepeach_k1.md @@ -11,6 +11,10 @@ It is based on the **Pixhawk-project FMUv3** open hardware design and runs **PX4 ![ThePeach FCC-K1](../../assets/flight_controller/thepeach_k1/main.png) +:::info +This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). +::: + ## 产品规格 - Main Processor: STM32F427VIT6 diff --git a/docs/zh/flight_controller/thepeach_r1.md b/docs/zh/flight_controller/thepeach_r1.md index 39bbc2f635..a1c45867f8 100644 --- a/docs/zh/flight_controller/thepeach_r1.md +++ b/docs/zh/flight_controller/thepeach_r1.md @@ -11,6 +11,10 @@ It is based on the **Pixhawk-project FMUv3** open hardware design and runs **PX4 ![ThePeach_R1](../../assets/flight_controller/thepeach_r1/main.png) +:::info +This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md). +::: + ## 产品规格 - Main Processor: STM32F427VIT6 diff --git a/docs/zh/flight_controller/x-mav_ap-h743r1.md b/docs/zh/flight_controller/x-mav_ap-h743r1.md index 9370f785d3..0a5ad122f0 100644 --- a/docs/zh/flight_controller/x-mav_ap-h743r1.md +++ b/docs/zh/flight_controller/x-mav_ap-h743r1.md @@ -26,7 +26,7 @@ These flight controllers are [manufacturer supported](../flight_controller/autop - On-board sensors - Accel/Gyro: ICM-42688-P\*2(Version1), BMI270\*2(Version2) - Mag: QMC5883P - - Barometer: DPS310(Version1),SPL06(Version2) + - Barometer: SPL06 ### 接口 @@ -45,7 +45,7 @@ These flight controllers are [manufacturer supported](../flight_controller/autop - FMU Debug - IO Debug -## Purchase Channels +## Purchase Channels {#store} Order from [X-MAV](https://www.x-mav.cn/). @@ -91,7 +91,7 @@ The 7 FMU PWM outputs are in 3 groups: - A1 - A4 are in one group. - A5, A6 are in a 2nd group. -- A7 is in a 3nd group. +- A7 is in a 3rd group. Channels within the same group need to use the same output rate. If any channel in a group uses DShot then all channels in the group need to use DShot. @@ -131,7 +131,7 @@ make x-mav_ap-h743r1_default 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). -## 调试接口 +## Debug Port {#debug_port} ### SWD diff --git a/docs/zh/flight_modes/offboard.md b/docs/zh/flight_modes/offboard.md index 3a501cff3e..abc4a6f165 100644 --- a/docs/zh/flight_modes/offboard.md +++ b/docs/zh/flight_modes/offboard.md @@ -2,17 +2,29 @@ +:::: warning + +Offboard control with ROS 2 requires _significant care_ to ensure that it is used safely. +Please read [ROS 2 Offboard Control](#ros-2-offboard-control) carefully to fully understand the risks involved when using it. +A good understanding of [PX4 controller diagrams](../flight_stack/controller_diagrams.md) is advised. + +:::tip +[PX4 ROS 2 Interface Library](../ros2/px4_ros2_interface_lib.md) provides a safer alternative. +::: + +:::: + 飞行器根据飞行控制栈外部(如机载计算机)提供的设定值控制位置、速度、加速度、姿态以及推力/力矩。 The setpoints may be provided using MAVLink (or a MAVLink API such as [MAVSDK](https://mavsdk.mavlink.io/)) or by [ROS 2](../ros2/index.md). PX4 requires that the external controller provides a continuous 2Hz "proof of life" signal, by streaming any of the supported MAVLink setpoint messages or the ROS 2 [OffboardControlMode](../msg_docs/OffboardControlMode.md) message. -PX4只有在收到该种信号超过1秒后才有效,如果该种信号停止飞行控制栈将重新获得控制权(脱离Offboard模式)。 +PX4 enables switching to offboard control mode only after receiving the signal for more than a second, and will failsafe (controlled by [COM_OBL_RC_ACT](../advanced_config/parameter_reference.md#COM_OBL_RC_ACT)) if the signal stops. ::: info -- 此模式需要位置或位/姿信息 - 例如 GPS、光流、视觉惯性里程计、mocap 等。 -- RC control is disabled except to change modes (you can also fly without any manual controller at all by setting the parameter [COM_RC_IN_MODE](../advanced_config/parameter_reference.md#COM_RC_IN_MODE) to 4: Stick input disabled). -- The vehicle must be already be receiving a stream of MAVLink setpoint messages or ROS 2 [OffboardControlMode](../msg_docs/OffboardControlMode.md) messages before arming in offboard mode or switching to offboard mode when flying. +- This mode requires position or pose/attitude information - e.g. GPS, optical flow, visual-inertial odometry, mocap, etc. depending on the type of offboard setpoints that the external controller sends. +- Manual control is disabled except to change modes (you can also fly without any manual controller at all by setting the parameter [COM_RC_IN_MODE](../advanced_config/parameter_reference.md#COM_RC_IN_MODE) to `4: Disable manual control`). +- The vehicle must already be receiving a stream of MAVLink setpoint messages or ROS 2 [OffboardControlMode](../msg_docs/OffboardControlMode.md) messages before arming in offboard mode or switching to offboard mode when flying. - The vehicle will exit offboard mode if MAVLink setpoint messages or `OffboardControlMode` are not received at a rate of > 2Hz. - 并非所有 MAVLink 支持的坐标系和字段值都被设定值消息和飞行器支持。 Read the sections below _carefully_ to ensure only supported values are used. @@ -38,13 +50,37 @@ In order to hold position in this case the vehicle must receive a stream of `Off 其他操作如起飞、降落、返航,最好使用适当的模式来处理。 像上传、下载任务这样的操作可以在任何模式下执行。 -## ROS 2 消息 +## ROS 2 Offboard Control + +This section describes how to perform offboard control through one of the direct ROS 2 interfaces: UXRCE-DDS or Zenoh. + +When using direct ROS 2 offboard control, PX4 setpoint messages generated by external controllers are injected into the [PX4 control pipeline](../flight_stack/controller_diagrams.md). +Because messages from internal and external controllers are indistinguishable within PX4, precise synchronization is required in order to avoid the controllers writing conflicting messages to the same topic. + +In Offboard mode (only), an external system can use [`OffboardControlMode`](#the-offboardcontrolmode-px4-message) to specify which setpoint topics PX4 should publish/not publish, allowing them to be written safely by an external controller. + +::: warning + +PX4 has no means of filtering and distinguishing ROS 2 messages from internal messages, in any mode. +In order to interwork safely, the external controller must: + +- Publish PX4 setpoint messages **ONLY** in Offboard mode. +- Specify which setpoints it will write using the `OffboardControlMode` topic. +- Stream the `OffboardControlMode` topic as a keep-alive signal. +- Stream the setpoints it wants: unlike with MAVLink, PX4 won't trigger a failsafe if setpoints aren't sent regularly. + +If external setpoints are sent in any other flight mode, or they overwrite topics that have not been disabled by PX4 when in offboard mode, collisions are likely. +This will result in unexpected, and possibly catastrophic, behaviour. + +::: + +### The `OffboardControlMode` PX4 message 以下 ROS 2 消息及其特定字段和字段值在特定的框架下是允许的。 In addition to providing heartbeat functionality, `OffboardControlMode` has two other main purposes: -1. Controls the level of the [PX4 control architecture](../flight_stack/controller_diagrams.md) at which offboard setpoints must be injected, and disables the bypassed controllers. -2. 确定需要哪种有效估计(位置或速度),以及应该使用哪种设定值消息。 +1. Controls which internal PX4 control modules of the [PX4 control architecture](../flight_stack/controller_diagrams.md) shall remain active and which ones shall be disabled when the vehicle is in Offboard Mode. +2. Determines which valid estimates (position, velocity, etc.) are required. The `OffboardControlMode` message is defined as shown. @@ -69,33 +105,48 @@ For rovers see the [rover section](#rover). The fields are ordered in terms of priority such that `position` takes precedence over `velocity` and later fields, `velocity` takes precedence over `acceleration`, and so on. 第一个非零字段(从上到下) 定义了Offboard模式所需的有效估计以及可用的设定值消息。 -For example, if the `acceleration` field is the first non-zero value, then PX4 requires a valid `velocity estimate`, and the setpoint must be specified using the `TrajectorySetpoint` message. +For example, if the `acceleration` field is the first non-zero value, then PX4 requires a valid `attitude estimate`, and the setpoint must be specified using the `TrajectorySetpoint` message. -| 期望控制对象 | 位置 | 速度 | 加速度 | 姿态 | 姿态角速率 | 执行器字段 | 直接给电机 | 所需状态估计 | 所需消息 | -| ------------------------------ | --------------------------- | --------------------------- | --------------------------- | --------------------------- | --------------------------- | --------------------------- | --------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------- | -| 位置 (NED) | ✓ | - | - | - | - | - | - | 位置 | [TrajectorySetpoint](../msg_docs/TrajectorySetpoint.md) | -| 速度 (NED) | ✗ | ✓ | - | - | - | - | - | 速度 | [TrajectorySetpoint](../msg_docs/TrajectorySetpoint.md) | -| 加速度(NED) | ✗ | ✗ | ✓ | - | - | - | - | 速度 | [TrajectorySetpoint](../msg_docs/TrajectorySetpoint.md) | -| 姿态(FRD) | ✗ | ✗ | ✗ | ✓ | - | - | - | 无 | [VehicleAttitudeSetpoint](../msg_docs/VehicleAttitudeSetpoint.md) | -| 体轴角速率 (FRD) | ✗ | ✗ | ✗ | ✗ | ✓ | - | - | 无 | [VehicleRatesSetpoint](../msg_docs/VehicleRatesSetpoint.md) | -| 推力和力矩(FRD) | ✗ | ✗ | ✗ | ✗ | ✗ | ✓ | - | 无 | [VehicleThrustSetpoint](../msg_docs/VehicleThrustSetpoint.md) and [VehicleTorqueSetpoint](../msg_docs/VehicleTorqueSetpoint.md) | -| 直接给电机和舵机 | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✓ | 无 | [ActuatorMotors](../msg_docs/ActuatorMotors.md) and [ActuatorServos](../msg_docs/ActuatorServos.md) | +| 期望控制对象 | 位置 | 速度 | 加速度 | 姿态 | 姿态角速率 | 执行器字段 | 直接给电机 | 所需状态估计 | 所需消息 | +| ------------------------------ | --------------------------- | --------------------------- | --------------------------- | --------------------------- | --------------------------- | --------------------------- | --------------------------- | ---------------- | ------------------------------------------------------------------------------------------------------------------------------- | +| 位置 (NED) | ✓ | - | - | - | - | - | - | 位置 | [TrajectorySetpoint](../msg_docs/TrajectorySetpoint.md) | +| 速度 (NED) | ✗ | ✓ | - | - | - | - | - | 速度 | [TrajectorySetpoint](../msg_docs/TrajectorySetpoint.md) | +| 加速度(NED) | ✗ | ✗ | ✓ | - | - | - | - | attitude | [TrajectorySetpoint](../msg_docs/TrajectorySetpoint.md) | +| 姿态(FRD) | ✗ | ✗ | ✗ | ✓ | - | - | - | attitude | [VehicleAttitudeSetpoint](../msg_docs/VehicleAttitudeSetpoint.md) | +| 体轴角速率 (FRD) | ✗ | ✗ | ✗ | ✗ | ✓ | - | - | angular velocity | [VehicleRatesSetpoint](../msg_docs/VehicleRatesSetpoint.md) | +| 推力和力矩(FRD) | ✗ | ✗ | ✗ | ✗ | ✗ | ✓ | - | 无 | [VehicleThrustSetpoint](../msg_docs/VehicleThrustSetpoint.md) and [VehicleTorqueSetpoint](../msg_docs/VehicleTorqueSetpoint.md) | +| 直接给电机和舵机 | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✓ | 无 | [ActuatorMotors](../msg_docs/ActuatorMotors.md) and [ActuatorServos](../msg_docs/ActuatorServos.md) | -where ✓ means that the bit is set, ✘ means that the bit is not set and `-` means that the bit is value is irrelevant. +where ✓ means that the bit is set, ✘ means that the bit is not set and `-` means that the bit value is irrelevant. :::info Before using offboard mode with ROS 2, please spend a few minutes understanding the different [frame conventions](../ros2/user_guide.md#ros-2-px4-frame-conventions) that PX4 and ROS 2 use. ::: -### 旋翼机 +In the following, the different setpoint messages for the main supported airframes are explained. +For fixed-wing offboard control, please refer to the [PX4 ROS 2 Interface Library](../ros2/px4_ros2_interface_lib.md). + +### 多旋翼 - [px4_msgs::msg::TrajectorySetpoint](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/TrajectorySetpoint.msg) + - 支持以下输入组合: - Position setpoint (`position` different from `NaN`). Non-`NaN` values of velocity and acceleration are used as feedforward terms for the inner loop controllers. - - Velocity setpoint (`velocity` different from `NaN` and `position` set to `NaN`). Non-`NaN` values acceleration are used as feedforward terms for the inner loop controllers. + - Velocity setpoint (`velocity` different from `NaN` and `position` set to `NaN`). Non-`NaN` values of acceleration are used as feedforward terms for the inner loop controllers. - Acceleration setpoint (`acceleration` different from `NaN` and `position` and `velocity` set to `NaN`) - - All values are interpreted in NED (Nord, East, Down) coordinate system and the units are `[m]`, `[m/s]` and `[m/s^2]` for position, velocity and acceleration, respectively. + - All values are interpreted in NED (North, East, Down) coordinate system and the units are `[m]`, `[m/s]` and `[m/s^2]` for position, velocity and acceleration, respectively. + + ::: warning + + Position, velocity and acceleration control for multicopters are all handled by the `mc_pos_control` module. + This module is enabled if any of `position`, `velocity` and `acceleration` fields are set to true. + However, only the content of the `TrajectorySetpoint` messages determines which of the three controllers shall run. + + This means that even if `OffboardControlMode` messages carry the intention of velocity control (only `velocity` field is set) but non-`NaN` position values are sent in the `TrajectorySetpoint` messages, then PX4 will keep running the position controller. + + +::: - [px4_msgs::msg::VehicleAttitudeSetpoint](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/VehicleAttitudeSetpoint.msg) - 支持以下输入组合: @@ -194,13 +245,11 @@ Ackermann rovers do not support the yaw setpoint. - [px4_msgs::msg::ActuatorMotors](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/ActuatorMotors.msg) + [px4_msgs::msg::ActuatorServos](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/ActuatorServos.msg) - 直接控制电机输出和/或伺服系统(舵机)输出。 - - Currently works at lower level than then `control_allocator` module. - Do not publish these messages when not in offboard mode. - All the values normalized in `[-1, 1]`. For outputs that do not support negative values, negative entries map to `NaN`. - `NaN` maps to disarmed. -## MAVLink 消息 +## MAVLink Offboard Control 下面的 MAVLink 消息及其特定字段和字段值在特定的帧下是允许的。 diff --git a/docs/zh/flight_modes/return.md b/docs/zh/flight_modes/return.md index 088a3fd646..1876e06975 100644 --- a/docs/zh/flight_modes/return.md +++ b/docs/zh/flight_modes/return.md @@ -110,11 +110,13 @@ The behaviour is fairly complex because it depends on the flight mode, and wheth Mission _with_ landing pattern: -- **Mission mode:** Mission is continued in "fast-forward mode" (jumps, delay and any other non-position commands ignored, loiter and other position waypoints converted to simple waypoints) and then lands. +- **Mission mode:** + - Mission is continued in "fast-forward mode" and then lands. + - DO_JUMP commands, delays and other non-position mission items are ignored, and loiter and other position waypoints are converted to simple waypoints. - **Auto mode other than mission mode:** - Ascend to a safe [minimum return altitude](#minimum-return-altitude) above any expected obstacles. - 直接飞到最近的航点(对固定翼而言,不是着陆航点),然后降落到航点高度。 - - 从该航点以快速模式继续执行任务。 + - Continue mission in fast forward mode from that waypoint, using the same traversal rules as above. - **Manual modes:** - Ascend to a safe [minimum return altitude](#minimum-return-altitude) above any expected obstacles. - 直接飞到降落序列位置并下降到航点高度。 @@ -124,7 +126,7 @@ Mission _without_ landing pattern defined: - **Mission mode:** - 从上一个航点开始以“快退”(反向)飞行的任务 - - 跳,延迟和其他任何非定位命令都会被忽略,悬停和其他位置航点将转换为简单航点。 + - DO_JUMP commands, delays and other non-position mission items are ignored, and loiter and other position waypoints are converted to simple waypoints. - VTOL 无人机在反向飞行任务之前切换到固定翼模式(如果需要)。 - On reaching waypoint 1, the vehicle ascends to the [minimum return altitude](#minimum-return-altitude) and flies to the home position (where it [lands or waits](#loiter-landing-at-destination)). - **Auto mode other than mission mode:** @@ -136,6 +138,11 @@ Mission _without_ landing pattern defined: 如果任务在返航模式期间发生更改,则将按照与上述相同的规则根据新任务重新评估行为(例如,如果新任务没有降落顺序并且你在一个任务中,则任务将被逆转)。 +:::info +For `RTL_TYPE=4`, PX4 currently chooses between continuing to a mission landing and reversing toward home by comparing raw mission item indices. +This is only an approximation of the flown path length, because the number if mission items is not indicative of the distance remaining and non-position items are also counted. +::: + ### 最近的安全目的地返回类型(RTL_TYPE=3) 无人机在该返航类型中: @@ -205,15 +212,15 @@ For this reason fixed-wing vehicles are configured to use [Mission landing/reall The RTL parameters are listed in [Parameter Reference > Return Mode](../advanced_config/parameter_reference.md#return-mode) (and summarised below). -| 参数 | 描述 | -| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [RTL_TYPE](../advanced_config/parameter_reference.md#RTL_TYPE) | Return mechanism (path and destination).
`0`: Return to a rally point or home (whichever is closest) via direct path.
`1`: Return to a rally point or the mission landing pattern start point (whichever is closest), via direct path. 如果未定义任务着陆点或集结点,通过直接路径返回起始位置。 If the destination is a mission landing pattern, follow the pattern to land.
`2`: Use mission path fast-forward to landing if a landing pattern is defined, otherwise fast-reverse to home. 忽略集结点。 Fly direct to home if no mission plan is defined.
`3`: Return via direct path to closest destination: home, start of mission landing pattern or safe point. 如果目的地是飞行任务着陆模式,则按照该模式降落。 | -| [RTL_RETURN_ALT](../advanced_config/parameter_reference.md#RTL_RETURN_ALT) | Return altitude in meters (default: 60m) when [RTL_CONE_ANG](../advanced_config/parameter_reference.md#RTL_CONE_ANG) is 0. 如果已经超过这个值, 飞机将返回当前的高度。 | -| [RTL_DESCEND_ALT](../advanced_config/parameter_reference.md#RTL_DESCEND_ALT) | 最小返航高度和无人机从较高的返航高度到减速或者停止的初始下降高度(默认: 30米)。 | -| [RTL_LAND_DELAY](../advanced_config/parameter_reference.md#RTL_LAND_DELAY) | Time to wait at `RTL_DESCEND_ALT` before landing (default: 0.5s) -by default this period is short so that the vehicle will simply slow and then land immediately. If set to -1 the system will loiter at `RTL_DESCEND_ALT` rather than landing. 延迟能够使你为起落架的展开部署配置时间(自动触发)。 | -| [RTL_MIN_DIST](../advanced_config/parameter_reference.md#RTL_MIN_DIST) | 能够触发无人机上升到返航高度,距离起始位置的最小水平距离由那个"锥形"指定。 If the vehicle is horizontally closer than this distance to home, it will return at its current altitude or `RTL_DESCEND_ALT` (whichever is higher) instead of first ascending to RTL_RETURN_ALT. | -| [RTL_CONE_ANG](../advanced_config/parameter_reference.md#RTL_CONE_ANG) | 圆锥半角决定无人机的 RTL 返航高度。 数值(度数):0、25、45、65、80、90。 Note that 0 is "no cone" (always return at `RTL_RETURN_ALT` or higher), while 90 indicates that the vehicle must return at the current altitude or `RTL_DESCEND_ALT` (whichever is higher). | -| [COM_RC_OVERRIDE](../advanced_config/parameter_reference.md#COM_RC_OVERRIDE) | Controls whether stick movement on a multicopter (or VTOL in MC mode) causes a mode change to [Position mode](../flight_modes_mc/position.md) (except when vehicle is handling a critical battery failsafe). 可以分别为自动模式和 offboard 模式启用此功能,默认情况下在自动模式下启用此功能。 | -| [COM_RC_STICK_OV](../advanced_config/parameter_reference.md#COM_RC_STICK_OV) | The amount of stick movement that causes a transition to [Position mode](../flight_modes_mc/position.md) (if [COM_RC_OVERRIDE](#COM_RC_OVERRIDE) is enabled). | -| [RTL_LOITER_RAD](../advanced_config/parameter_reference.md#RTL_LOITER_RAD) | [Fixed-wing Only] The radius of the loiter circle (at [RTL_LAND_DELAY](#RTL_LAND_DELAY)). | -| [MIS_TKO_LAND_REQ](../advanced_config/parameter_reference.md#MIS_TKO_LAND_REQ) | Specify whether a mission landing or takeoff pattern is _required_. Generally fixed-wing vehicles set this to require a landing pattern but VTOL do not. | +| 参数 | 描述 | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [RTL_TYPE](../advanced_config/parameter_reference.md#RTL_TYPE) | Return mechanism (path and destination).
`0`: Return to a rally point or home (whichever is closest) via direct path.
`1`: Return to a rally point or the mission landing pattern start point (whichever is closest), via direct path. 如果未定义任务着陆点或集结点,通过直接路径返回起始位置。 If the destination is a mission landing pattern, follow the pattern to land.
`2`: Use the mission path to landing while skipping DO_JUMP and other non-position mission items if a landing pattern is defined, otherwise fast-reverse to home with the same traversal rules. 忽略集结点。 Fly direct to home if no mission plan is defined.
`3`: Return via direct path to closest destination: home, start of mission landing pattern or safe point. 如果目的地是飞行任务着陆模式,则按照该模式降落。 | +| [RTL_RETURN_ALT](../advanced_config/parameter_reference.md#RTL_RETURN_ALT) | Return altitude in meters (default: 60m) when [RTL_CONE_ANG](../advanced_config/parameter_reference.md#RTL_CONE_ANG) is 0. 如果已经超过这个值, 飞机将返回当前的高度。 | +| [RTL_DESCEND_ALT](../advanced_config/parameter_reference.md#RTL_DESCEND_ALT) | 最小返航高度和无人机从较高的返航高度到减速或者停止的初始下降高度(默认: 30米)。 | +| [RTL_LAND_DELAY](../advanced_config/parameter_reference.md#RTL_LAND_DELAY) | Time to wait at `RTL_DESCEND_ALT` before landing (default: 0.5s) -by default this period is short so that the vehicle will simply slow and then land immediately. If set to -1 the system will loiter at `RTL_DESCEND_ALT` rather than landing. 延迟能够使你为起落架的展开部署配置时间(自动触发)。 | +| [RTL_MIN_DIST](../advanced_config/parameter_reference.md#RTL_MIN_DIST) | 能够触发无人机上升到返航高度,距离起始位置的最小水平距离由那个"锥形"指定。 If the vehicle is horizontally closer than this distance to home, it will return at its current altitude or `RTL_DESCEND_ALT` (whichever is higher) instead of first ascending to RTL_RETURN_ALT. | +| [RTL_CONE_ANG](../advanced_config/parameter_reference.md#RTL_CONE_ANG) | 圆锥半角决定无人机的 RTL 返航高度。 数值(度数):0、25、45、65、80、90。 Note that 0 is "no cone" (always return at `RTL_RETURN_ALT` or higher), while 90 indicates that the vehicle must return at the current altitude or `RTL_DESCEND_ALT` (whichever is higher). | +| [COM_RC_OVERRIDE](../advanced_config/parameter_reference.md#COM_RC_OVERRIDE) | Controls whether stick movement on a multicopter (or VTOL in MC mode) causes a mode change to [Position mode](../flight_modes_mc/position.md) (except when vehicle is handling a critical battery failsafe). 可以分别为自动模式和 offboard 模式启用此功能,默认情况下在自动模式下启用此功能。 | +| [COM_RC_STICK_OV](../advanced_config/parameter_reference.md#COM_RC_STICK_OV) | The amount of stick movement that causes a transition to [Position mode](../flight_modes_mc/position.md) (if [COM_RC_OVERRIDE](#COM_RC_OVERRIDE) is enabled). | +| [RTL_LOITER_RAD](../advanced_config/parameter_reference.md#RTL_LOITER_RAD) | [Fixed-wing Only] The radius of the loiter circle (at [RTL_LAND_DELAY](#RTL_LAND_DELAY)). | +| [MIS_TKO_LAND_REQ](../advanced_config/parameter_reference.md#MIS_TKO_LAND_REQ) | Specify whether a mission landing or takeoff pattern is _required_. Generally fixed-wing vehicles set this to require a landing pattern but VTOL do not. | diff --git a/docs/zh/flight_modes_fw/mission.md b/docs/zh/flight_modes_fw/mission.md index b3a5552282..02da257df6 100644 --- a/docs/zh/flight_modes_fw/mission.md +++ b/docs/zh/flight_modes_fw/mission.md @@ -61,7 +61,7 @@ Missions can be paused by switching out of mission mode to any other mode (such If the vehicle was not capturing images when it was paused, on resuming it will head from its _current position_ towards the same waypoint as it as was heading towards originally. If the vehicle was capturing images (has camera trigger items) it will instead head from its current position towards the last waypoint it traveled through (before pausing), and then retrace its path at the same speed and with the same camera triggering behaviour. This ensures that in survey/camera missions the planned path is captured. -A mission can be uploaded while the vehicle is paused, in which which case the current active mission item is set to 1. +A mission can be uploaded while the vehicle is paused, in which case the current active mission item is set to 1. :::info When a mission is paused while the camera on the vehicle was triggering, PX4 sets the current active mission item to the previous waypoint, so that when the mission is restarted the vehicle will retrace its last mission leg. @@ -100,8 +100,8 @@ _QGroundControl_ provides additional GCS-level mission handling support (in addi 有关详细信息,请参阅︰ -- [Remove mission after vehicle lands](https://docs.qgroundcontrol.com/master/en/qgc-user-guide/releases/stable_v3.2_long.html#remove-mission-after-vehicle-lands) -- [Resume mission after Return mode](https://docs.qgroundcontrol.com/master/en/qgc-user-guide/releases/stable_v3.2_long.html#resume-mission) +- [Remove mission after vehicle lands](https://docs.qgroundcontrol.com/Stable_V4.3/en/qgc-user-guide/releases/stable_v3.2_long.html#remove-mission-after-vehicle-lands) +- [Resume mission after Return mode](https://docs.qgroundcontrol.com/Stable_V4.3/en/qgc-user-guide/releases/stable_v3.2_long.html#resume-mission) ## Mission Parameters @@ -215,7 +215,7 @@ The diagram below shows the sorts of paths that you might expect. ![acc-rad](../../assets/flying/acceptance_radius_mission.png) Vehicles switch to the next waypoint as soon as they enter the acceptance radius. -This is defined by the "L1 distance", which is is computed from two parameters: [NPFG_DAMPING](../advanced_config/parameter_reference.md#NPFG_DAMPING) and [NPFG_PERIOD](../advanced_config/parameter_reference.md#NPFG_PERIOD), and the current ground speed. +This is defined by the "L1 distance", which is computed from two parameters: [NPFG_DAMPING](../advanced_config/parameter_reference.md#NPFG_DAMPING) and [NPFG_PERIOD](../advanced_config/parameter_reference.md#NPFG_PERIOD), and the current ground speed. By default, it's about 70 meters. The equation is: @@ -317,7 +317,7 @@ On _QGroundControl_ a popup button appears during landing to enable this. Aborting the landing results in a climb out to an orbit pattern centered above the land waypoint. The maximum of the aircraft's current altitude and [MIS_LND_ABRT_ALT](#MIS_LND_ABRT_ALT) is set as the abort orbit altitude height relative to (above) the landing waypoint. -Landing configuration (e.g. flaps, spoilers, landing airspeed) is disabled during abort and the aicraft flies in cruise conditions. +Landing configuration (e.g. flaps, spoilers, landing airspeed) is disabled during abort and the aircraft flies in cruise conditions. The abort command is disabled during the flare for safety. Operators may still manually abort the landing by switching to any manual mode, such as [Stabilized mode](../flight_modes_fw/stabilized.md)), though it should be noted that this is risky! @@ -357,7 +357,7 @@ Note that if the wheel controller is enabled ([FW_W_EN](#FW_W_EN)), the controll :::info Nudging should not be used to supplement poor position control tuning. -If the vehicle is regularly showing poor tracking peformance on a defined path, please refer to the [fixed-wing control tuning guide](../flight_modes_fw/position.md) for instruction. +If the vehicle is regularly showing poor tracking performance on a defined path, please refer to the [fixed-wing control tuning guide](../flight_modes_fw/position.md) for instruction. ::: | 参数 | 描述 | @@ -368,7 +368,7 @@ If the vehicle is regularly showing poor tracking peformance on a defined path, ### Near Ground Safety Constraints -In landing mode, the distance sensor is used to determine proximity to the ground, and the airframe's geometry is used to calculate roll contraints to prevent wing strike. +In landing mode, the distance sensor is used to determine proximity to the ground, and the airframe's geometry is used to calculate roll constraints to prevent wing strike. ![Fixed-wing landing nudging](../../assets/flying/wing_geometry.png) diff --git a/docs/zh/flight_modes_fw/takeoff.md b/docs/zh/flight_modes_fw/takeoff.md index 92f085c721..21af73e31a 100644 --- a/docs/zh/flight_modes_fw/takeoff.md +++ b/docs/zh/flight_modes_fw/takeoff.md @@ -14,7 +14,7 @@ Vehicles are [hand or catapult launched](#catapult-hand-launch) by default, but - Flying vehicles will failsafe if they lose the altitude estimate. - Disarmed vehicles can switch to mode without valid altitude estimate but can't arm. - RC control switches can be used to change flight modes. -- RC stick movement is ignored in catapult takeoff but can can be used to nudge the vehicle in runway takeoff. +- RC stick movement is ignored in catapult takeoff but can be used to nudge the vehicle in runway takeoff. - The [Failure Detector](../config/safety.md#failure-detector) will automatically stop the engines if there is a problem on takeoff. @@ -85,6 +85,7 @@ The vehicle always respects normal FW max/min throttle settings during takeoff ( In _catapult/hand-launch mode_ the vehicle waits to detect launch (based on acceleration trigger). On launch it enables the motor(s) and climbs with the maximum climb rate [FW_T_CLMB_MAX](#FW_T_CLMB_MAX) while keeping the pitch setpoint above [FW_TKO_PITCH_MIN](#FW_TKO_PITCH_MIN). Once it reaches [MIS_TAKEOFF_ALT](#MIS_TAKEOFF_ALT) it will automatically switch to [Hold mode](../flight_modes_fw/hold.md) and loiter. +It is possible to delay the activation of the motors and control surfaces separately, see parameters [FW_LAUN_MOT_DEL](#FW_LAUN_MOT_DEL), [FW_LAUN_CS_LK_DY](#FW_LAUN_CS_LK_DY) and [CA_CS_LAUN_LK](#CA_CS_LAUN_LK). The later is also exposed in the actuator configuration page under the advanced view. All RC stick movement is ignored during the full takeoff sequence. @@ -99,16 +100,18 @@ To launch in this mode: The _launch detector_ is affected by the following parameters: -| 参数 | 描述 | -| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | -| [FW_LAUN_DETCN_ON](../advanced_config/parameter_reference.md#FW_LAUN_DETCN_ON) | Enable automatic launch detection. If disabled motors spin up on arming already | -| [FW_LAUN_AC_THLD](../advanced_config/parameter_reference.md#FW_LAUN_AC_THLD) | Acceleration threshold (acceleration in body-forward direction must be above this value) | -| [FW_LAUN_AC_T](../advanced_config/parameter_reference.md#FW_LAUN_AC_T) | Trigger time (acceleration must be above threshold for this amount of seconds) | -| [FW_LAUN_MOT_DEL](../advanced_config/parameter_reference.md#FW_LAUN_MOT_DEL) | Delay from launch detection to motor spin up | +| 参数 | 描述 | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | +| [FW_LAUN_DETCN_ON](../advanced_config/parameter_reference.md#FW_LAUN_DETCN_ON) | Enable automatic launch detection. If disabled motors spin up on arming already | +| [FW_LAUN_AC_THLD](../advanced_config/parameter_reference.md#FW_LAUN_AC_THLD) | Acceleration threshold (norm of acceleration must be above this value) | +| [FW_LAUN_AC_T](../advanced_config/parameter_reference.md#FW_LAUN_AC_T) | Trigger time (acceleration must be above threshold for this amount of seconds) | +| [FW_LAUN_MOT_DEL](../advanced_config/parameter_reference.md#FW_LAUN_MOT_DEL) | Delay from launch detection to motor spin up | +| [FW_LAUN_CS_LK_DY](../advanced_config/parameter_reference.md#FW_LAUN_CS_LK_DY) | Delay from launch detection to unlocking the control surfaces | +| [CA_CS_LAUN_LK](../advanced_config/parameter_reference.md#CA_CS_LAUN_LK) | Bitmask to select which control surfaces are to be locked during launch | ## Runway Takeoff {#runway_launch} -Runway takeoffs can be used by vehicles with landing gear and and steerable wheel (only). +Runway takeoffs can be used by vehicles with landing gear and steerable wheel (only). You will first need to enable the wheel controller using the parameter [FW_W_EN](#FW_W_EN). Vehicle should be centered and aligned with runway when takeoff is initiated. diff --git a/docs/zh/flight_modes_mc/follow_me.md b/docs/zh/flight_modes_mc/follow_me.md index 278c2f8595..214a32bbf8 100644 --- a/docs/zh/flight_modes_mc/follow_me.md +++ b/docs/zh/flight_modes_mc/follow_me.md @@ -31,7 +31,7 @@ By default it will follow from directly behind the target at a distance of 8 met Users can adjust the follow angle, height and distance using an RC controller as shown above: - _Follow Height_ is controlled with the `up-down` input ("Throttle"). - Center the stick to keep follow the target at a constant hight. Raise or lower the stick to adjust height. + Center the stick to keep follow the target at a constant height. Raise or lower the stick to adjust height. - _Follow Distance_ is controlled with the `forward-back` input ("Pitch"). Pushing the stick forward increases the follow distance, pulling it back decreases the distance. - _Follow Angle_ is controlled with the `left-right` input ("Roll"). @@ -117,7 +117,7 @@ The altitude control mode determine whether the vehicle altitude is relative to - `2D + Terrain` makes the drone follow at a fixed height relative to the terrain underneath it, using information from a distance sensor. - If the vehicle does not have a distance sensor following will be identical to `2D tracking`. - Distance sensors aren't always accurate and vehicles may be "jumpy" when flying in this mode. - - Note that that height is relative to the ground underneath the vehicle, not the follow target. + - Note that height is relative to the ground underneath the vehicle, not the follow target. Note that that height is relative to the ground underneath the vehicle, not the follow target. The drone may not follow altitude changes of the target! - `3D tracking` mode makes the drone follow at a height relative to the follow target, as supplied by its GPS sensor. diff --git a/docs/zh/flight_modes_mc/mission.md b/docs/zh/flight_modes_mc/mission.md index 030b6d1d96..a3f6de291b 100644 --- a/docs/zh/flight_modes_mc/mission.md +++ b/docs/zh/flight_modes_mc/mission.md @@ -64,7 +64,7 @@ Missions can be paused by switching out of mission mode to any other mode (such If the vehicle was not capturing images when it was paused, on resuming it will head from its _current position_ towards the same waypoint as it as was heading towards originally. If the vehicle was capturing images (has camera trigger items) it will instead head from its current position towards the last waypoint it traveled through (before pausing), and then retrace its path at the same speed and with the same camera triggering behaviour. This ensures that in survey/camera missions the planned path is captured. -A mission can be uploaded while the vehicle is paused, in which which case the current active mission item is set to 1. +A mission can be uploaded while the vehicle is paused, in which case the current active mission item is set to 1. :::info When a mission is paused while the camera on the vehicle was triggering, PX4 sets the current active mission item to the previous waypoint, so that when the mission is restarted the vehicle will retrace its last mission leg. @@ -100,8 +100,8 @@ _QGroundControl_ provides additional GCS-level mission handling support (in addi 有关详细信息,请参阅︰ -- [Remove mission after vehicle lands](https://docs.qgroundcontrol.com/master/en/qgc-user-guide/releases/stable_v3.2_long.html#remove-mission-after-vehicle-lands) -- [Resume mission after Return mode](https://docs.qgroundcontrol.com/master/en/qgc-user-guide/releases/stable_v3.2_long.html#resume-mission) +- [Remove mission after vehicle lands](https://docs.qgroundcontrol.com/Stable_V4.3/en/qgc-user-guide/releases/stable_v3.2_long.html#remove-mission-after-vehicle-lands) +- [Resume mission after Return mode](https://docs.qgroundcontrol.com/Stable_V4.3/en/qgc-user-guide/releases/stable_v3.2_long.html#resume-mission) ## Mission Parameters diff --git a/docs/zh/flight_modes_mc/position.md b/docs/zh/flight_modes_mc/position.md index f32b4f357b..73f507289f 100644 --- a/docs/zh/flight_modes_mc/position.md +++ b/docs/zh/flight_modes_mc/position.md @@ -78,7 +78,7 @@ All the parameters in the [Multicopter Position Control](../advanced_config/para ### 位置丢失/安全 位置模式依赖于一个可接受的位置估计。 -If the estimate falls below acceptable levels, for example due to GPS loss, this may trigger a [Position (GPS) Loss Failsafe](../config/safety.md#position-gnss-loss-failsafe). +If the estimate falls below acceptable levels, for example due to GPS loss, this may trigger a [Position (GPS) Loss Failsafe](../config/safety.md#position-loss-failsafe). 如果估计值低于可接受的水平,例如由于 GPS 丢失,这可能会触发位置 (GPS) 丢失故障保护 根据配置,是否有遥控器,以及是否有足够的高度估计,PX4 可能会切换到高度模式、手动模式、降落模式或终止。 ## 另见 diff --git a/docs/zh/flight_modes_mc/return.md b/docs/zh/flight_modes_mc/return.md index f24fd32ddc..345fcb76e0 100644 --- a/docs/zh/flight_modes_mc/return.md +++ b/docs/zh/flight_modes_mc/return.md @@ -48,7 +48,7 @@ This is useful when there are few obstacles near the destination, because it may ![Return mode cone](../../assets/flying/rtl_cone.jpg) -The cone affects the minimum return altitude if return mode is triggered within the cylinder defined by the maximum cone radius and `RTL_RETURN_ALT`: outside this cyclinder `RTL_RETURN_ALT` is used. +The cone affects the minimum return altitude if return mode is triggered within the cylinder defined by the maximum cone radius and `RTL_RETURN_ALT`: outside this cylinder `RTL_RETURN_ALT` is used. Inside the code the minimum return altitude is the intersection of the vehicle position with the cone, or `RTL_DESCEND_ALT` (whichever is higher). In other words, the vehicle must always ascend to at least `RTL_DESCEND_ALT` if below that value. diff --git a/docs/zh/flight_modes_mc/throw_launch.md b/docs/zh/flight_modes_mc/throw_launch.md index d421442b5f..9d197198b7 100644 --- a/docs/zh/flight_modes_mc/throw_launch.md +++ b/docs/zh/flight_modes_mc/throw_launch.md @@ -22,7 +22,7 @@ The vehicle will not automatically disarm after arming, and must be manually dis The vehicle detects that it has been thrown based on reaching a certain speed (5m/s), and then starts the motors at the apex of the throw (once it determines that it has started to fall). You need to throw the vehicle high enough so that it can stabilize its height well before falling anywhere near people or obstacles. -备注: +Notes: - The mode is disabled by default, and must be enabled using a [parameter](#parameters) before arming. - When enabled you cannot take off from the ground using the normal modes. diff --git a/docs/zh/flight_modes_rover/auto.md b/docs/zh/flight_modes_rover/auto.md index 713a6bd39a..228385f230 100644 --- a/docs/zh/flight_modes_rover/auto.md +++ b/docs/zh/flight_modes_rover/auto.md @@ -13,14 +13,14 @@ The mission is typically created and uploaded with a Ground Control Station (GCS The following commands can be used in missions at time of writing (PX4 v1.16): -| QGC mission item | 通信 | 描述 | -| ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------- | -| Mission start | [MAV_CMD_MISSION_START](MAV_CMD_MISSION_START) | Starts the mission. | -| Waypoint | [MAV_CMD_NAV_WAYPOINT](MAV_CMD_NAV_WAYPOINT) | Navigate to waypoint. | -| Return to launch | [MAV\_CMD\_NAV\_RETURN\_TO\_LAUNCH][MAV_CMD_NAV_RETURN_TO_LAUNCH] | Return to the launch location. | -| Change speed | [MAV\_CMD\_DO\_CHANGE\_SPEED][MAV_CMD_DO_CHANGE_SPEED] | Change the speed setpoint | -| Set launch location | [MAV_CMD_DO_SET_HOME](MAV_CMD_DO_SET_HOME) | Changes launch location to specified coordinates. | -| Jump to item (all) | [MAV\_CMD\_DO\_JUMP][MAV_CMD_DO_JUMP] (and other jump commands) | Jump to specified mission item. | +| QGC mission item | 通信 | 描述 | +| ------------------------------------- | ----------------------------------------------------------------- | ----------------------------------------------------------------- | +| Mission start | [MAV\_CMD\_MISSION\_START][MAV_CMD_MISSION_START] | Starts the mission. | +| Waypoint | [MAV\_CMD\_NAV\_WAYPOINT][MAV_CMD_NAV_WAYPOINT] | Navigate to waypoint. | +| Return to launch | [MAV\_CMD\_NAV\_RETURN\_TO\_LAUNCH][MAV_CMD_NAV_RETURN_TO_LAUNCH] | Return to the launch location. | +| Change speed | [MAV\_CMD\_DO\_CHANGE\_SPEED][MAV_CMD_DO_CHANGE_SPEED] | Change the speed setpoint | +| Set launch location | [MAV\_CMD\_DO\_SET\_HOME][MAV_CMD_DO_SET_HOME] | Changes launch location to specified coordinates. | +| Jump to item (all) | [MAV\_CMD\_DO\_JUMP][MAV_CMD_DO_JUMP] (and other jump commands) | Jump to specified mission item. | [MAV_CMD_MISSION_START]: https://mavlink.io/en/messages/common.html#MAV_CMD_MISSION_START [MAV_CMD_NAV_WAYPOINT]: https://mavlink.io/en/messages/common.html#MAV_CMD_NAV_WAYPOINT diff --git a/docs/zh/flight_modes_vtol/mission.md b/docs/zh/flight_modes_vtol/mission.md index ca31540873..bb4c268da3 100644 --- a/docs/zh/flight_modes_vtol/mission.md +++ b/docs/zh/flight_modes_vtol/mission.md @@ -11,7 +11,7 @@ For more information see the specific docs for each mode: - [Mission Mode (MC)](../flight_modes_mc/mission.md) - [Mission Mode (FW)](../flight_modes_fw/mission.md) -The following sections outline mission mode behaviour that is VTOL specificL. +The following sections outline mission mode behaviour that is VTOL specific. ## Mission Commands diff --git a/docs/zh/flight_stack/controller_diagrams.md b/docs/zh/flight_stack/controller_diagrams.md index c28efa4590..6a6c7c7b7d 100644 --- a/docs/zh/flight_stack/controller_diagrams.md +++ b/docs/zh/flight_stack/controller_diagrams.md @@ -110,7 +110,7 @@ Make sure to tune the attitude controller before attempting to tune TECS. 推力(通过油门控制)增加整个飞机的总能量。 因此,俯仰角和油门两个输入量都会对空速和高度产生影响,从而使控制问题变得难了。 -TECS 提供了一种解决方案,即根据能量而不是初始设定值来反映问题。 +TECS offers a solution by representing the problem in terms of energies rather than the original setpoints. 一架飞行器的总能量是飞行器动能和势能之和。 推力(通过油门控制)可以增加飞机的总能量。 一个给定的总能量状态可以通过势能和动能的任意组合来实现。 换句话说,飞行器在高海拔以低空速飞行和在低海拔以高空速飞行时的总能量是等价的。 我们称这种情况叫做比能量平衡,它是根据当前高度和真实空速设定值计算的。 可以通过控制俯仰角来控制飞行器的比能量平衡。 @@ -164,6 +164,42 @@ $$\dot{B} = \gamma - \frac{\dot{V_T}}{g}$$ ## 固定翼姿态控制器 +### Setpoint modificaiton + +Most fixed-wing aircraft cannot generate a sustained yaw rate using the rudder alone. As a result, the yaw component of the quaternion attitude error should be removed before computing the control action. + +This is achieved by premultiplying the setpoint quaternion with a rotation about the global down axis. The additional rotation cancels the yaw component of the attitude error while preserving the roll and pitch components. + +The yaw offset is + +$$ +\psi =-2\frac{\hat{q}_0 q_3 - \hat{q}_1 q_2 + \hat{q}_2 q_1 -\hat{q}_3 q_0} +{\hat{q}_0 q_0 - \hat{q}_1 q_1 - \hat{q}_2 q_2 + \hat{q}_3 q_3} +$$ + +The quaternion representing the yaw offset is + +$$ +ℚ_{\text{yaw}} = +\operatorname{normalize} +\left( +\begin{bmatrix} +1 \ +0 \ +0 \ +\frac{\psi}{2} +\end{bmatrix} +\right) +$$ + +The corrected setpoint quaternion is then obtained by applying the rotation + +$$ +ℚ_{\text{sp, corrected}} = ℚ_{\text{yaw}} \otimes ℚ_{sp} +$$ + +### Quaternion based attitude controller + ![FW Attitude Controller Diagram](../../assets/diagrams/px4_fw_attitude_controller_diagram.png) -### Tailsitter +### Tailsitter {#tailsitter_video} [UAV Works VALAQ Patrol Tailsitter](https://www.valaqpatrol.com/valaq_patrol_technical_data/) @@ -136,7 +137,7 @@ VTOL Control & Airspeed Fault Detection (PX4 Developer Summit 2019) -### Tiltrotor +### Tiltrotor {#tiltrotor_video} [Convergence Tiltrotor](../frames_vtol/vtol_tiltrotor_eflite_convergence_pixfalcon.md) diff --git a/docs/zh/frames_vtol/tailsitter.md b/docs/zh/frames_vtol/tailsitter.md index 888b60edf9..986c614502 100644 --- a/docs/zh/frames_vtol/tailsitter.md +++ b/docs/zh/frames_vtol/tailsitter.md @@ -89,35 +89,36 @@ This section contains videos that are specific to Tailsitter VTOL (videos that a ## Gallery -
-
- -
- wingtraone -
-
-
- -
- -
-
-
- -
- -
-
-
- -
- -
-
- -
+:::: tabs + +:::tab WingtraOne +[WingtraOne](https://wingtra.com/mapping-drone-fast-accurate-surveying/) + +![Wingtra: WingtraOne VTOL Duo Tailsitter](../../assets/airframes/vtol/wingtraone/hero.jpg) +::: + +:::tab Skypull +[Skypull](https://www.skypull.technology/) + +![Skypull SP-1 VTOL QuadTailsitter](../../assets/airframes/vtol/skypull/skypull_sp1.jpg) +::: + +:::tab TBS Caipiroshka +[TBS Caipiroshka](../frames_vtol/vtol_tailsitter_caipiroshka_pixracer.md) + +![TBS Caipiroshka](../../assets/airframes/vtol/caipiroshka/caipiroshka.jpg) +::: + +:::tab Woshark +[Woshark](http://uav-cas.ac.cn/WOSHARK/) + +![Woshark](../../assets/airframes/vtol/xdwgood_ax1800/hero.jpg) +::: + +:::tab VALAQ Patrol Tailsitter +[UAV Works VALAQ Patrol Tailsitter](https://www.valaqpatrol.com/valaq_patrol_technical_data/) + +!["UAV Works VALAQ Patrol Tailsitte](../../assets/airframes/vtol/uav_works_valaq_patrol/hero.jpg) +::: + +:::: diff --git a/docs/zh/frames_vtol/vtol_quadplane_falcon_vertigo_hybrid_rtf_dropix.md b/docs/zh/frames_vtol/vtol_quadplane_falcon_vertigo_hybrid_rtf_dropix.md index a24076acec..f36294f7f9 100644 --- a/docs/zh/frames_vtol/vtol_quadplane_falcon_vertigo_hybrid_rtf_dropix.md +++ b/docs/zh/frames_vtol/vtol_quadplane_falcon_vertigo_hybrid_rtf_dropix.md @@ -3,6 +3,7 @@ :::warning Discontinued The Falcon Venturi FPV Wing frame on which this vehicle is based is no longer available. +The Dropix FC used by this vehicle is discontinued. ::: The _Falcon Vertigo Hybrid VTOL_ is a quadplane VTOL aircraft that has been designed to work with PX4 and the Dropix (Pixhawk compatible) flight controller. It can carry a small GoPro camera. @@ -13,7 +14,7 @@ The components can also be purchased separately. Key information: - **Frame:** Falcon Vertigo Hybrid VTOL -- **Flight controller:** Dropix +- **Flight controller:** Dropix (Discontineud) - **Wing span:** 1.3m ![Falcon Vertigo Hybrid VTOL RTF](../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_complete.jpg) @@ -36,7 +37,7 @@ Almost everything you need is provided in the RTF kit (the links next to compone - Pusher motor power system - Carbon fiber tubes and mounts - G10 motor mounts -- 1 x [3700mah 4S 30C Lipo battery](https://www.overlander.co.uk/batteries/lipo-batteries/power-packs/3700mah-4s-14-8v-25c-lipo-battery-overlander-sport.html) +- 1 x [3700mah 4S 30C Lipo battery](https://wheelspinmodels.co.uk/i/3700mah-4s-14.8v-25c-lipo-battery-overlander-262221/) - Dropix power distribution board and cable The kit does not come with a radio receiver or (optional) telemetry modules. @@ -115,10 +116,6 @@ This kit includes Dropix flight controller with most of the required electronics -:::info -General information about connecting Dropix can be found in [Dropix Flight Controller](../flight_controller/dropix.md). -::: - #### Connect the ESC power connector and pass the signals cables to the flight controller 1. Connect the ESC to the power module using the XT60 connector @@ -146,7 +143,7 @@ For example, you might wire it up like this example (orientation as if "sitting | AUX 2 | Right aileron | | AUX 3 | Elevator | | AUX 4 | Rudder | -| AUX 5 | 油门 | +| AUX 5 | Throttle | @@ -267,7 +264,7 @@ The final assembly step is to check the vehicle is stable and that the motors ha Perform the normal [Basic Configuration](../config/index.md). -备注: +Notes: 1. For [Airframe](../config/airframe.md) select the vehicle group/type as _Standard VTOL_ and the specific vehicle as [Generic Standard VTOL](../airframes/airframe_reference.md#vtol_standard_vtol_generic_standard_vtol) as shown below. diff --git a/docs/zh/frames_vtol/vtol_quadplane_foxtech_loong_2160.md b/docs/zh/frames_vtol/vtol_quadplane_foxtech_loong_2160.md index 660531d13d..dee2b1a132 100644 --- a/docs/zh/frames_vtol/vtol_quadplane_foxtech_loong_2160.md +++ b/docs/zh/frames_vtol/vtol_quadplane_foxtech_loong_2160.md @@ -43,14 +43,14 @@ The following options have been tested: - [Holybro PM08D Power Module (alternative to Auterion PM)](https://holybro.com/collections/power-modules-pdbs/products/pm08d-digital-power-module-14s-200a) - [GPS F9P (included in Skynode eval. kit)](../gps_compass/rtk_gps_holybro_h-rtk-f9p.md) - [GPS M9N (cheaper alternative to F9P)](../gps_compass/rtk_gps_holybro_h-rtk-m8p.md) -- [Airspeed sensor (included in Skynode eval. kit)](https://www.dualrc.com/parts/airspeed-sensor-sdp33) — recommended for improved safety and performance +- [Airspeed sensor (included in Skynode eval. kit)](https://www.dualrc.com/parts/p/airspeed-sensor-sdp33) — recommended for improved safety and performance - [Airspeed sensor (cheaper alternative)](https://holybro.com/products/digital-air-speed-sensor-ms4525do) - [Lidar Lightware lw20-c (included in Skynode eval. kit)](../sensor/sfxx_lidar.md) (Optional) - [Lidar Seeed Studio PSK-CM8JL65-CC5 (cheaper alternative)](https://www.seeedstudio.com/PSK-CM8JL65-CC5-Infrared-Distance-Measuring-Sensor-p-4028.html) (Optional) - [Radio (RC) System](../getting_started/rc_transmitter_receiver.md) of your preference -- [Groundstation and Radio link](https://holybro.com/collections/rc-radio-transmitter-receiver/products/skydroid-h12?variant=42940989931709) +- [Groundstation and Radio link](https://holybro.com/products/skydroid-h12) - [USB-C extension cable](https://www.digitec.ch/en/s1/product/powerguard-usb-c-usb-c-025-m-usb-cables-22529949?dbq=1&gclid=Cj0KCQjw2cWgBhDYARIsALggUhrh-z-7DSU0wKfLBVa8filkXLQaxUpi7pC0ffQyRzLng8Ph01h2R1gaAp0mEALw_wcB&gclsrc=aw.ds) -- [I2C Splitter](https://www.3dxr.co.uk/autopilots-c2/the-cube-aka-pixhawk-2-1-c9/cube-cables-accessories-sensors-c15/cubepilot-i2c-can-splitter-jst-gh-4pin-p2840) +- [I2C Splitter](https://www.3dxr.co.uk/autopilots-c2/the-cube-aka-pixhawk-2-1-c9/cube-cables-accessories-sensors-c15/cubepilot-i2c-can-splitter-jst-gh-4pin-hx4-06152-p2840) - [3D-Printed mounts](https://github.com/PX4/PX4-Autopilot/raw/main/docs/assets/airframes/vtol/foxtech_loong_2160/loong-3d-prints.zip) - 1x Baseplate - 1x Stack-fixture @@ -305,7 +305,7 @@ To load the file: - If the [Lidar Lightware lw20-c (included in Skynode eval. kit)](../sensor/sfxx_lidar.md) is used, [SENS_EN_SF1XX](../advanced_config/parameter_reference.md#SENS_EN_SF1XX) needs to be set to 6 (SF/LW/20c). - Make that the correct airspeed sensor is selected. - If you use the recommended [SDP33 airspeed sensor](https://www.dualrc.com/parts/airspeed-sensor-sdp33) no changes will be needed as [SENS_EN_SDP3X](../advanced_config/parameter_reference.md#SENS_EN_SDP3X) is enabled (set to `1`) in the parameter file. + If you use the recommended [SDP33 airspeed sensor](https://www.dualrc.com/parts/p/airspeed-sensor-sdp33) no changes will be needed as [SENS_EN_SDP3X](../advanced_config/parameter_reference.md#SENS_EN_SDP3X) is enabled (set to `1`) in the parameter file. ### Sensor Calibration diff --git a/docs/zh/frames_vtol/vtol_quadplane_fun_cub_vtol_pixhawk.md b/docs/zh/frames_vtol/vtol_quadplane_fun_cub_vtol_pixhawk.md index cd3c3ebfff..d766e53eed 100644 --- a/docs/zh/frames_vtol/vtol_quadplane_fun_cub_vtol_pixhawk.md +++ b/docs/zh/frames_vtol/vtol_quadplane_fun_cub_vtol_pixhawk.md @@ -55,7 +55,7 @@ For example, you might wire it up like this example (orientation as if "sitting | AUX 2 | Right aileron | | AUX 3 | Elevator | | AUX 4 | Rudder | -| AUX 5 | 油门 | +| AUX 5 | Throttle | For further instructions on wiring and configurations please see: [Standard VTOL Wiring and Configuration](../config_vtol/vtol_quad_configuration.md). diff --git a/docs/zh/frames_vtol/vtol_quadplane_volantex_ranger_ex_pixhawk.md b/docs/zh/frames_vtol/vtol_quadplane_volantex_ranger_ex_pixhawk.md index d9611f4aad..1cf53ddf6d 100644 --- a/docs/zh/frames_vtol/vtol_quadplane_volantex_ranger_ex_pixhawk.md +++ b/docs/zh/frames_vtol/vtol_quadplane_volantex_ranger_ex_pixhawk.md @@ -100,7 +100,7 @@ like "sitting in the plane"). | AUX 2 | Right aileron | | AUX 3 | Elevator | | AUX 4 | Rudder | -| AUX 5 | 油门 | +| AUX 5 | Throttle | :::info The servo direction can be reversed using the PWM_REV parameters in the PWM_OUTPUT group of QGroundControl (cogwheel tab, last item in the left menu) diff --git a/docs/zh/frames_vtol/vtol_tailsitter_caipiroshka_pixracer.md b/docs/zh/frames_vtol/vtol_tailsitter_caipiroshka_pixracer.md index 36d4c03e76..cf5fd97584 100644 --- a/docs/zh/frames_vtol/vtol_tailsitter_caipiroshka_pixracer.md +++ b/docs/zh/frames_vtol/vtol_tailsitter_caipiroshka_pixracer.md @@ -4,7 +4,7 @@ The Caipiroshka VTOL is a slightly modified _TBS Caipirinha_. :::info The _TBS Caipirinha_ has been superseded and is no longer available. -These instructions _should_ work with the updated vehicle: [TBS Caipirinha 2](https://team-blacksheep.com/products/prod:tbs_caipi2_pnp). +These instructions _should_ work with the updated vehicle: [TBS Caipirinha 2](https://www.team-blacksheep.com/products/prod:tbs_caipi2_pnp). A number of other components have been updated in the parts list too. ::: @@ -12,7 +12,7 @@ A number of other components have been updated in the parts list too. ## 配件列表 -- TBS Caipirinha Wing (no longer available - try [TBS Caipirinha 2](https://team-blacksheep.com/products/prod:tbs_caipi2_pnp)) +- TBS Caipirinha Wing (no longer available - try [TBS Caipirinha 2](https://www.team-blacksheep.com/products/prod:tbs_caipi2_pnp)) - Left and right 3D-printed motor mount (design files) - CW 8045 propeller ([Eflight store](https://www.banggood.com/GEMFAN-Carbon-Nylon-8045-CWCCW-Propeller-For-Quadcopters-1-Pair-p-950874.html)) - CCW 8045 propeller ([Eflight store](https://www.banggood.com/GEMFAN-Carbon-Nylon-8045-CWCCW-Propeller-For-Quadcopters-1-Pair-p-950874.html)) @@ -24,7 +24,7 @@ A number of other components have been updated in the parts list too. - [GetFPV](https://www.getfpv.com/lumenier-30a-blheli-s-esc-opto-2-4s.html) - BEC(3A,5-5.3V)(如果你的电调不能提供5V的输出,可以用这个) - 3S 2200 mA锂电池 - - Team Orion 3S 11.1V 50 C ([Hobbyshop store](https://www.hobbyshop.ch/modellbau-elektronik/akku/team-orion-lipo-2200-3s-11-1v-50c-xt60-ori60163.html)) + - Team Orion 3S 11.1V 50 C ([Hobbyshop store](https://www.hobbyshop.ch/team-orion-lipo-2200-3s-11-1v-50c-xt60-ori60163.html)) - [Pixracer autopilot board + power module](../flight_controller/pixracer.md) - [Digital airspeed sensor](https://hobbyking.com/en_us/hkpilot-32-digital-air-speed-sensor-and-pitot-tube-set.html) diff --git a/docs/zh/frames_vtol/vtol_tiltrotor_omp_hobby_zmo_fpv.md b/docs/zh/frames_vtol/vtol_tiltrotor_omp_hobby_zmo_fpv.md index 0903bed592..7efe706fe8 100644 --- a/docs/zh/frames_vtol/vtol_tiltrotor_omp_hobby_zmo_fpv.md +++ b/docs/zh/frames_vtol/vtol_tiltrotor_omp_hobby_zmo_fpv.md @@ -25,9 +25,9 @@ Depending on the final takeoff weight the hover time might be limited (there is ## 购买渠道 -- [OMP-Hobby](https://www.omphobby.com/OMPHOBBY-ZMO-VTOL-FPV-Aircraft-With-DJI-Goggles-And-Remote-Controller-p3069854.html) - [GetFPV](https://www.getfpv.com/omphobby-zmo-z3-vtol-fpv-1200mm-arf-plane-kit-no-fpv-system.html) - [FoxtechFPV](https://www.foxtechfpv.com/zmo-pro-fpv-vtol.html) +- [RMRC](https://www.readymaderc.com/products/details/omp-hobby-zmo-vtol-fpv-airplane-rtf-goggles-radio) ## Flight Controller @@ -43,7 +43,7 @@ The approximate maximum size of the FC is: 50x110x22mm - [GPS F9P (included in Skynode eval. kit)](../gps_compass/rtk_gps_holybro_h-rtk-f9p.md) - [GPS M9N (cheaper alternative to F9P)](../gps_compass/rtk_gps_holybro_h-rtk-m8p.md) -- [Airspeed sensor (included in Skynode eval. kit)](https://www.dualrc.com/parts/airspeed-sensor-sdp33) — recommended for improved safety and performance +- [Airspeed sensor (included in Skynode eval. kit)](https://www.dualrc.com/parts/p/airspeed-sensor-sdp33) — recommended for improved safety and performance - [Airspeed sensor (cheaper alternative)](https://holybro.com/products/digital-air-speed-sensor-ms4525do) - [Lidar Lightware lw20-c (included in Skynode eval. kit)](../sensor/sfxx_lidar.md) (Optional) - [Lidar Seeed Studio PSK-CM8JL65-CC5 (cheaper alternative)](https://www.seeedstudio.com/PSK-CM8JL65-CC5-Infrared-Distance-Measuring-Sensor-p-4028.html) (Optional) @@ -79,7 +79,7 @@ The following tools were used for this build. ### Preparations Remove the original flight controller, ESC and wing connector cables. -Also remove the the propellers. +Also remove the propellers. This will help you with the handling of the vehicle and will reduce the risk of an injury due to an unintentional motor startup. ZMO FPV in it's original state. @@ -101,7 +101,7 @@ Flight controller and wing connectors removed from the vehicle. 4. Shorten the rear motor wires and solder them as shown in the picture into place. -5. Solder signal and GND wires to the PWM input ot the ESC. +5. Solder signal and GND wires to the PWM input to the ESC. ![ESC 01](../../assets/airframes/vtol/omp_hobby_zmo_fpv/esc-01.jpg) @@ -293,7 +293,7 @@ To load the file: The airspeed sensor can be enabled in the [Parameters](../advanced_config/parameters.md#finding-updating-parameters) tab. -- If the [recommended airspeed sensor (SDP33)](https://www.dualrc.com/parts/airspeed-sensor-sdp33) is used, `SENS_EN_SDP3X` needs to be enabled. +- If the [recommended airspeed sensor (SDP33)](https://www.dualrc.com/parts/p/airspeed-sensor-sdp33) is used, `SENS_EN_SDP3X` needs to be enabled. - If the [Lidar Lightware lw20-c (included in Skynode eval. kit)](../sensor/sfxx_lidar.md) is used, `SENS_EN_SF1XX` needs to be set to 6 (SF/LW/20c). ### Sensor Calibration diff --git a/docs/zh/getting_started/flight_reporting.md b/docs/zh/getting_started/flight_reporting.md index 366d304db8..07ac288efe 100644 --- a/docs/zh/getting_started/flight_reporting.md +++ b/docs/zh/getting_started/flight_reporting.md @@ -38,7 +38,7 @@ For more information see [Settings > MAVLink Settings > MAVLink 2 Logging (PX4 o ## 给 PX4 开发人员共享日志文件 -The [Flight Review](https://logs.px4.io/) log file link can be shared for discussion in the [support forums](../contribute/support.md#forums-and-chat) or a [Github issue](../index.md#reporting-bugs-issues). +The [Flight Review](https://logs.px4.io/) log file link can be shared for discussion in the [support forums](../contribute/support.md#forums-and-chat) or a [Github issue](../contribute/support.md#issue-bug-reporting). ## Log Configuration diff --git a/docs/zh/getting_started/rc_transmitter_receiver.md b/docs/zh/getting_started/rc_transmitter_receiver.md index dd2792504c..354345420c 100644 --- a/docs/zh/getting_started/rc_transmitter_receiver.md +++ b/docs/zh/getting_started/rc_transmitter_receiver.md @@ -3,13 +3,15 @@ A Radio Control (RC) system can be used to _manually_ control your vehicle from a handheld RC controller. This topic provides an overview of how RC works, how to choose an appropriate radio system for your vehicle, and how to connect it to your flight controller. -:::tip -PX4 can also be manually controlled using a [Joystick](../config/joystick.md) or gamepad-like controller: this is different to an RC system! -The [COM_RC_IN_MODE](../advanced_config/parameter_reference.md#COM_RC_IN_MODE) parameter [can be set](../advanced_config/parameters.md) to choose whether RC (default), Joystick, both, or neither, are enabled. +:::info +PX4 does not require a manual control system for autonomous flight modes. ::: -:::info -PX4 does not require a remote control system for autonomous flight modes. +:::tip +PX4 can also be [manually controlled](../config/manual_control.md) using a [Joystick](../config/joystick.md) or gamepad-like controller. + +By default PX4 will latch the first valid controller it discovers and use it until the vehicle reboots. +If you have multiple controllers and you want to define their priority see [Manual Control > PX4 Configuration](../config/manual_control.md#px4-configuration). ::: ## 遥控系统是如何工作的? diff --git a/docs/zh/gps_compass/gps_cuav_neo_3.md b/docs/zh/gps_compass/gps_cuav_neo_3.md index 673c20dc37..c8ca199fbf 100644 --- a/docs/zh/gps_compass/gps_cuav_neo_3.md +++ b/docs/zh/gps_compass/gps_cuav_neo_3.md @@ -47,7 +47,7 @@ It integrates Ublox M9N, IST8310, three-color LED lights and safety switches, an ## 购买渠道 -- [CUAV](https://cuav.en.alibaba.com/product/1600217379204-820872629/CUAV_NEO_3_M9N_GPS_Module_for_Pixhawk_Compass_gps_tracker_navigation_gps.html?spm=a2700.shop_oth.74.1.636e28725EvVHb) +- [CUAV](https://www.alibaba.com/product-detail/CUAV_NEO_3_M9N_GPS_Module_for_Pixhawk_Compass_gps_tracker_navigation_gps_1600217379204.html) ## 接线和连接 diff --git a/docs/zh/gps_compass/gps_cuav_neo_3pro.md b/docs/zh/gps_compass/gps_cuav_neo_3pro.md index 938a54ae27..8c243b2b78 100644 --- a/docs/zh/gps_compass/gps_cuav_neo_3pro.md +++ b/docs/zh/gps_compass/gps_cuav_neo_3pro.md @@ -41,7 +41,7 @@ It integrates UBLOX M9N, STM32F4 MCU, RM3100 compass, three-color LED light and ## 购买渠道 -- [CUAV](https://cuav.en.alibaba.com/product/1600165544920-820872629/Free_shipping_CUAV_Neo_3_pro_drone_UAVCAN_GNSS_processor_STM32F412_autopilot_ublox_M9N_positioning_RM3100_compass_uav_gps_module.html?spm=a2700.shop_oth.74.2.636e28725EvVHb) +- [CUAV](https://www.alibaba.com/product-detail/Free_shipping_CUAV_Neo_3_pro_drone_UAVCAN_GNSS_processor_STM32F412_autopilot_ublox_M9N_positioning_RM3100_compass_uav_gps_module_1600165544920.html) ## 接线和连接 diff --git a/docs/zh/gps_compass/index.md b/docs/zh/gps_compass/index.md index 0419f27c1d..04ce372395 100644 --- a/docs/zh/gps_compass/index.md +++ b/docs/zh/gps_compass/index.md @@ -64,7 +64,7 @@ PX4 also supports [Real Time Kinematic (RTK)](../gps_compass/rtk_gps.md) and **P [Hb Micro M8N]: https://holybro.com/products/micro-m8n-gps [CubePilot Here2]: ../gps_compass/gps_hex_here2.md -备注: +Notes: - ✓ or a specific part number indicate that a features is supported, while ✘ or empty show that the feature is not supported. "?" indicates "unknown". @@ -187,9 +187,9 @@ Some of GNSS terms that are useful for interpreting the data include: - `DOP`: Dilution of position (dimensionless). This is a measure of the geometric quality of satellite positions and their effect on the precision of the GPS receiver's calculations. - `EPH`: Standard deviation of horizontal position error (metres). - This represents the the uncertainty in the GPS fix latitude and longitude. + This represents the uncertainty in the GPS fix latitude and longitude. - `EPV`: Standard deviation of vertical position error (metres). - This represents the the uncertainty in the GPS fix altitude. + This represents the uncertainty in the GPS fix altitude. ### DOP vs EPH/EPV diff --git a/docs/zh/gps_compass/magnetometer.md b/docs/zh/gps_compass/magnetometer.md index 0435210bec..1a55fca9f2 100644 --- a/docs/zh/gps_compass/magnetometer.md +++ b/docs/zh/gps_compass/magnetometer.md @@ -22,7 +22,7 @@ If it fails before flight, arming will be denied. ### Compass Parts PX4 can be used with many magnetometer parts, including: Bosch BMM 150 MEMS (via I2C bus), HMC5883 / HMC5983 (I2C or SPI), IST8310 (I2C), LIS3MDL (I2C or SPI), RM3100, and more. -Other supported magnetometer parts and their busses can be inferred from the drivers listed in [Modules Reference: Magnetometer (Driver)](../modules/modules_driver_magnetometer.md). +Other supported magnetometer parts and their buses can be inferred from the drivers listed in [Modules Reference: Magnetometer (Driver)](../modules/modules_driver_magnetometer.md). These parts are included in stand alone compass modules, combined compass/GNSS modules, and also in many flight controllers, @@ -55,7 +55,7 @@ This list contains stand-alone magnetometer modules (without GNSS). Internal compasses are not recommended for real use as a heading source, because the performance is almost always very poor. -This is particularly true on on small vehicles where the flight controller has to be mounted close to motor/ESC power lines and other sources of electromagnetic interference. +This is particularly true on small vehicles where the flight controller has to be mounted close to motor/ESC power lines and other sources of electromagnetic interference. While they may be better on larger vehicles (e.g. VTOL), where it is possible to reduce electromagnetic interference by mounting the flight controller a long way from power supply lines, an external compass will almost always be better. :::tip diff --git a/docs/zh/gps_compass/rtk_gps.md b/docs/zh/gps_compass/rtk_gps.md index 20470f8c52..0c7ac61d8b 100644 --- a/docs/zh/gps_compass/rtk_gps.md +++ b/docs/zh/gps_compass/rtk_gps.md @@ -14,7 +14,7 @@ Some RTK GNSS setups can provide yaw/heading information, as an alternative to t ## 支持的 RTK 设备 -PX4 supports the [u-blox M8P](https://www.u-blox.com/en/product/neo-m8p), [u-blox F9P](https://www.u-blox.com/en/product/zed-f9p-module) and the [Trimble MB-Two](https://oemgnss.trimble.com/en/products/receiver-modules/mb-two) GPS, and products that incorporate them. +PX4 supports the [u-blox M8P](https://www.u-blox.com/en/product/neo-m8p-series), [u-blox F9P](https://www.u-blox.com/en/product/zed-f9p-module) and the [Trimble MB-Two](https://oemgnss.trimble.com/en/products/receiver-modules/mb-two) GPS, and products that incorporate them. The RTK compatible devices below that are expected to work with PX4 (it omits discontined devices). The table indicates devices that also output yaw, and that can provide yaw when two on-vehicle units are used. @@ -57,7 +57,7 @@ It also highlights devices that connect via the CAN bus, and those which support | [Septentrio AsteRx-m3 Pro](../gps_compass/septentrio_asterx-rib.md) | AsteRx | ✓ | | [Septentrio Dual Antenna] | ✓ | | [Septentrio mosaic-go](../gps_compass/septentrio_mosaic-go.md) | mosaic X5 / mosaic H | ✓ | | [Septentrio Dual Antenna] | ✓ | | [SIRIUS RTK GNSS ROVER (F9P)](https://store-drotek.com/911-sirius-rtk-gnss-rover-f9p.html) | F9P | ✓ | | [Dual F9P] | | -| [SparkFun GPS-RTK2 Board - ZED-F9P](https://www.sparkfun.com/products/15136) | F9P | ✓ | | [Dual F9P] | | +| [SparkFun GPS-RTK2 Board - ZED-F9P](https://www.sparkfun.com/sparkfun-gps-rtk2-board-zed-f9p-qwiic-gps-15136.html) | F9P | ✓ | | [Dual F9P] | | | [Trimble MB-Two](../gps_compass/rtk_gps_trimble_mb_two.md) | F9P | ✓ | | ✓ | | @@ -74,7 +74,7 @@ It also highlights devices that connect via the CAN bus, and those which support [mosaic-G5 P3H]: https://www.septentrio.com/en/products/gnss-receivers/gnss-receiver-modules/mosaic-G5-P3H [D10P]: https://docs.datagnss.com/gnss/gnss_module/D10P_RTK -备注: +Notes: - ✓ or a specific part number indicate that a features is supported, while ✘ or empty show that the feature is not supported. "?" indicates "unknown". diff --git a/docs/zh/gps_compass/rtk_gps_cuav_c-rtk-9ps.md b/docs/zh/gps_compass/rtk_gps_cuav_c-rtk-9ps.md index b8eee70993..4cf582fa7c 100644 --- a/docs/zh/gps_compass/rtk_gps_cuav_c-rtk-9ps.md +++ b/docs/zh/gps_compass/rtk_gps_cuav_c-rtk-9ps.md @@ -1,6 +1,6 @@ # CUAV C-RTK 9Ps -The CUAV [C-RTK 9Ps](https://www.cuav.net/en/c_rtk_9ps/) is a multi-satellite, multi-band, centimeter-level, RTK GNSS system. +The CUAV [C-RTK 9Ps](https://www.cuav.net/en/c-rtk-9ps-en/) is a multi-satellite, multi-band, centimeter-level, RTK GNSS system. The module simultaneously receives GPS, GLONASS, Galileo and Beidou satellite signals, enabling faster positioning and higher accuracy. It also supports [RTK GPS Heading](../gps_compass/u-blox_f9p_heading.md) using dual modules. @@ -12,7 +12,7 @@ This is ideal for survey drones, agricultural drones and other application scena ## 购买渠道 -[cuav Store](https://store.cuav.net/shop/c-rtk-9ps/) +[cuav Store](https://store.cuav.net/?route=product%2Fproduct&path=61&product_id=187) ## 技术规范 diff --git a/docs/zh/gps_compass/rtk_gps_cuav_c-rtk.md b/docs/zh/gps_compass/rtk_gps_cuav_c-rtk.md index 12870521b7..2c6fa09e58 100644 --- a/docs/zh/gps_compass/rtk_gps_cuav_c-rtk.md +++ b/docs/zh/gps_compass/rtk_gps_cuav_c-rtk.md @@ -1,6 +1,6 @@ # CUAV C-RTK -The [CUAV C-RTK GPS receiver](https://www.cuav.net/en/c_rtk_9ps/) is an [RTK GPS module](../gps_compass/rtk_gps.md) for the mass market. +The [CUAV C-RTK GPS receiver](https://www.cuav.net/en/c-rtk-9ps-en/) is an [RTK GPS module](../gps_compass/rtk_gps.md) for the mass market. 一个完整的RTK 系统由至少两个 c-rtk 模块 组成(一个用于基站, 另外一个作为移动站用于飞机上)。 使用RTK,PX4控制器可以获取到它的位置,并且这个位置的精度可以达到厘米级的精度,这比普通GPS提供的位置更加精确。 @@ -8,7 +8,7 @@ The [CUAV C-RTK GPS receiver](https://www.cuav.net/en/c_rtk_9ps/) is an [RTK GPS ## 购买渠道 - [cuav taobao](https://item.taobao.com/item.htm?id=565380634341&spm=2014.21600712.0.0) -- [cuav aliexpress](https://www.aliexpress.com/store/product/CUAV-NEW-Flight-Controller-GPS-C-RTK-differential-positioning-navigation-module-GPS-for-PIX4-Pixhawk-pixhack/3257035_32853894248.html?spm=2114.12010608.0.0.75592fadQKPPEn) +- [cuav aliexpress](https://www.aliexpress.com/item/32853894248.html?spm=2114.12010608.0.0.75592fadQKPPEn) ## 配置 @@ -16,7 +16,7 @@ RTK setup and use on PX4 via _QGroundControl_ is largely plug and play \(see [RT ## 接线和连接 -C-RTK GPS comes with a cable that terminates in a 6-pin connector and 4-pin connector that are compatible with [Pixhack v3](https://doc.cuav.net/flight-controller/pixhack/en/quick-start-pixhack-v3x.html#gps--compass). +C-RTK GPS comes with a cable that terminates in a 6-pin connector and 4-pin connector that are compatible with [Pixhack v3](../flight_controller/pixhack_v3.md). 6针连接器提供 rtk gps 的接口, 并应连接到飞行控制器的 gps 接口。 4针连接器是一个 m8n (标准) gps 接口, 可作为第二个 gps(可选)。 diff --git a/docs/zh/gps_compass/rtk_gps_cuav_c-rtk2.md b/docs/zh/gps_compass/rtk_gps_cuav_c-rtk2.md index 19e42522c8..34c81ff106 100644 --- a/docs/zh/gps_compass/rtk_gps_cuav_c-rtk2.md +++ b/docs/zh/gps_compass/rtk_gps_cuav_c-rtk2.md @@ -1,6 +1,6 @@ # CUAV C-RTK2 GNSS Module (RTK/PPK) -The [CUAV C-RTK2 receiver](https://www.cuav.net/en/c_rtk_9ps/) is a high-performance PPK/RTK positioning module created by CUAV for professional applications such as drone aerial surveying and mapping. +The [CUAV C-RTK2 receiver](https://www.cuav.net/en/c-rtk-9ps-en/) is a high-performance PPK/RTK positioning module created by CUAV for professional applications such as drone aerial surveying and mapping. It has a high-precision IMU and positioning module, and can reduce the number of required [control points](https://www.youtube.com/watch?v=3k7v5aXyuKQ) by more than to 80%. In addition to surveying/mapping, it is suitable for many other use-cases, including: agricultural plant protection and drone swarms. @@ -10,7 +10,7 @@ In addition to surveying/mapping, it is suitable for many other use-cases, inclu - High-performance H7 processor - High precision industrial grade IMU -- Support RTK and save RAW raw data (PPK) at the same time +- Support RTK and save raw data (PPK) at the same time - Multi-satellite and multi-frequency receivers - UAVCAN/Dronecan protocol - Support hotshoe and shutter trigger @@ -18,7 +18,7 @@ In addition to surveying/mapping, it is suitable for many other use-cases, inclu ## 购买渠道 -- [CUAV Store](https://store.cuav.net/shop/c-rtk-2/) +- [CUAV Store](https://store.cuav.net/?route=product%2Fproduct&product_id=159) - [CUAV aliexpress](https://pt.aliexpress.com/item/1005003754165772.html?spm=a2g0o.store_pc_groupList.8148356.13.2f893550i0NE4o) # 总览 diff --git a/docs/zh/gps_compass/rtk_gps_datagnss_nano_hrtk.md b/docs/zh/gps_compass/rtk_gps_datagnss_nano_hrtk.md index 4a0bcc8152..7eb84c6475 100644 --- a/docs/zh/gps_compass/rtk_gps_datagnss_nano_hrtk.md +++ b/docs/zh/gps_compass/rtk_gps_datagnss_nano_hrtk.md @@ -90,7 +90,7 @@ Note that for the base we recommend the [NANO RTK Receiver](https://www.datagnss ![DATAGNSS NANO RTK Receiver with case](../../assets/hardware/gps/datagnss_gem1305/nano_rtk_with_case.png) -See to [How to setup Base station](https://wiki.datagnss.com/index.php/GEM1305-autopilot#Base_station_setup) for information on how to configure the module for use as a base station (not including step 6 and later, for which you would QGroundControl instead of Mission Planner). +See to [How to setup Base station](https://docs.datagnss.com/#Base_station_setup) for information on how to configure the module for use as a base station (not including step 6 and later, for which you would QGroundControl instead of Mission Planner). ### Rover Setup (PX4) @@ -111,13 +111,12 @@ GPS and RTK configuration on PX4 via _QGroundControl_ is plug and play (see [RTK ## Resources -- [NANO RTK Receiver 2D drawing file](https://wiki.datagnss.com/images/3/31/EVK-DG-1206_V.2.0.pdf) - [NANO HRTK Receiver Wiki](https://docs.datagnss.com/gnss/rtk_receiver/NANO/nano-helix-rtk/) (DATAGNSS WiKi) - [HED-10L Heading RTK Receiver](https://docs.datagnss.com/gnss/rtk_receiver/HED-10L/) ## More information -- [NANO RTK Receiver](https://docs.datagnss.com/gnss/rtk_receiver/NANO/nano-rtk-receiver) +- [NANO RTK Receiver](https://docs.datagnss.com/gnss/rtk_receiver/NANO/nano-rtk-receiver/) - [HELIX Antenna for RTK](https://www.datagnss.com/collections/rtk-antenna/products/smart-helix-antenna) - [RTK Antenna AGR6302G](https://www.datagnss.com/collections/rtk-antenna/products/antenna-agr6302g) - [AT400 RTK Antenna](https://www.datagnss.com/collections/rtk-antenna/products/at400-multi-band-antenna-for-rtk) diff --git a/docs/zh/gps_compass/rtk_gps_drotek_xl.md b/docs/zh/gps_compass/rtk_gps_drotek_xl.md index 7b032cad86..b67ca1c93e 100644 --- a/docs/zh/gps_compass/rtk_gps_drotek_xl.md +++ b/docs/zh/gps_compass/rtk_gps_drotek_xl.md @@ -2,7 +2,7 @@ :::info This module appears to have been discontinued, and is no longer on the Drotek site (September 2023). -The last documentation was in [PX4 v1.13 here](https://docs.px4.io/v1.13/en/gps_compass/rtk_gps_drotek_xl.html) +The last documentation was in [PX4 v1.13 here](https://docs.px4.io/v1.13/en/gps_compass/rtk_gps_drotek_xl) ::: diff --git a/docs/zh/gps_compass/rtk_gps_gem1305.md b/docs/zh/gps_compass/rtk_gps_gem1305.md index 7d6c66596a..caf9a8174c 100644 --- a/docs/zh/gps_compass/rtk_gps_gem1305.md +++ b/docs/zh/gps_compass/rtk_gps_gem1305.md @@ -77,7 +77,7 @@ The 1.25mm pitch 6P connector (from left: PIN1 to PIN6) supports UART for GNSS a ## 硬件安装 RTK requires a base RTK module attached to the ground station, and a rover RTK module on the vehicle. -The data from the base needs to be transmitted to the drone via telemetry radio and inputed into the RTK receiver on the rover. +The data from the base needs to be transmitted to the drone via telemetry radio and inputted into the RTK receiver on the rover. ![RTK setup overview](../../assets/hardware/gps/datagnss_gem1305/setup_overview.png) @@ -93,7 +93,7 @@ Note that for the base we recommend the [NANO RTK Receiver](https://www.datagnss DATAGNSS NANO RTK Receiver -See to [How to setup Base station](https://wiki.datagnss.com/index.php/GEM1305-autopilot#Base_station_setup) for information on how to configure the module for use as a base station (not including step 6 and later, for which you would QGroundControl instead of Mission Planner). +See to [How to setup Base station](https://docs.datagnss.com/#Base_station_setup) for information on how to configure the module for use as a base station (not including step 6 and later, for which you would QGroundControl instead of Mission Planner). ### Rover Setup (PX4) @@ -115,14 +115,13 @@ GPS and RTK configuration on PX4 via _QGroundControl_ is plug and play (see [RTK ## Resources -- [NANO RTK Receiver 2D drawing file](https://wiki.datagnss.com/images/3/31/EVK-DG-1206_V.2.0.pdf) - [GEM1305 Wiki](https://docs.datagnss.com/gnss/rtk_receiver/GEM1305/) (DATAGNSS WiKi) - [HED-10L Heading RTK Receiver](https://docs.datagnss.com/gnss/rtk_receiver/HED-10L/) - [NANO HRTK Receiver](https://docs.datagnss.com/gnss/rtk_receiver/NANO/nano-helix-rtk/) ## More information -- [NANO RTK Receiver](https://www.datagnss.com/collections/evk/products/tau951m-1312-tiny-evk) +- [NANO RTK Receiver](https://www.datagnss.com/products/nano-rtk-receiver) - [HELIX Antenna for RTK](https://www.datagnss.com/collections/rtk-antenna/products/smart-helix-antenna) - [RTK Antenna AGR6302G](https://www.datagnss.com/collections/rtk-antenna/products/antenna-agr6302g) - [AT400 RTK Antenna](https://www.datagnss.com/collections/rtk-antenna/products/at400-multi-band-antenna-for-rtk) diff --git a/docs/zh/gps_compass/rtk_gps_hex_hereplus.md b/docs/zh/gps_compass/rtk_gps_hex_hereplus.md index 5eb2fb2c6b..388f222603 100644 --- a/docs/zh/gps_compass/rtk_gps_hex_hereplus.md +++ b/docs/zh/gps_compass/rtk_gps_hex_hereplus.md @@ -5,7 +5,7 @@ :::info This GPS is no longer available for purchase but is still compatible with PX4. -Usage documentation can be found in [PX4v1.11 docs](https://docs.px4.io/v1.11/en/gps_compass/rtk_gps_hex_hereplus.html) +Usage documentation can be found in [PX4v1.11 docs](https://docs.px4.io/v1.11/en/gps_compass/rtk_gps_hex_hereplus) ::: The **Here+ RTK GPS receiver** is a small, light and energy efficient [RTK GPS module](../gps_compass/rtk_gps.md), based on the u-blox M8P. 使用RTK,PX4控制器可以获取到它的位置,并且这个位置的精度可以达到厘米级的精度,这比普通GPS提供的位置更加精确。 diff --git a/docs/zh/gps_compass/rtk_gps_holybro_h-rtk-f9p.md b/docs/zh/gps_compass/rtk_gps_holybro_h-rtk-f9p.md index 7a07c8e220..015a9e09ce 100644 --- a/docs/zh/gps_compass/rtk_gps_holybro_h-rtk-f9p.md +++ b/docs/zh/gps_compass/rtk_gps_holybro_h-rtk-f9p.md @@ -19,7 +19,7 @@ Using RTK allows PX4 to get its position with centimetre-level accuracy, which i ## 购买渠道 - [H-RTK F9P (Holybro Website)](https://holybro.com/products/h-rtk-f9p-gnss-series) -- [H-RTK Accessories (Holybro Website)](https://holybro.com/collections/h-rtk-gps) +- [H-RTK Accessories (Holybro Website)](https://holybro.com/collections/gps) ## 配置 @@ -50,6 +50,6 @@ The cables/connectors may need to be modified in order to connect to other fligh ## GPS Accessories -[H-RTK Mount (Holybro Website)](https://holybro.com/products/vertical-mount-for-h-rtk-helical) +[H-RTK Mount (Holybro Website)](https://holybro.com/collections/gps-accessories/products/vertical-mount-for-h-rtk-helical) ![h-rtk](../../assets/hardware/gps/rtk_holybro_h-rtk_mount_3.png) diff --git a/docs/zh/gps_compass/rtk_gps_holybro_h-rtk-m8p.md b/docs/zh/gps_compass/rtk_gps_holybro_h-rtk-m8p.md index 052b33faa3..6831e465f8 100644 --- a/docs/zh/gps_compass/rtk_gps_holybro_h-rtk-m8p.md +++ b/docs/zh/gps_compass/rtk_gps_holybro_h-rtk-m8p.md @@ -2,9 +2,10 @@ :::warning This GNSS has been discontinued, and is no longer commercially available. +Replaced by [Holybro H-RTK F9P GNSS](../gps_compass/rtk_gps_holybro_h-rtk-f9p.md). ::: -The [Holybro H-RTK M8P GNSS](https://holybro.com/collections/standard-h-rtk-series/products/h-rtk-m8p-gnss-series) is an [RTK GNSS module](../gps_compass/rtk_gps.md) series for the mass market. +The _Holybro H-RTK M8P GNSS_ is an [RTK GNSS module](../gps_compass/rtk_gps.md) series for the mass market. This family is similar to the [H-RTK M9P](../gps_compass/rtk_gps_holybro_h-rtk-f9p.md) series but uses the smaller, lighter, and less expensive M8P u-blox RTK GNSS module (which still provides far superior position resolution than previous generations\_. There are three models of Holybro H-RTK M8P to choose from, each with different antenna design to meet different needs. @@ -16,7 +17,7 @@ Using RTK allows PX4 to get its position with centimeter-level accuracy, which i ## 购买渠道 -- [H-RTK M8P (GPS RTK Mounts)](https://holybro.com/products/vertical-mount-for-h-rtk-helical) +- Discontinued. ## 配置 @@ -30,9 +31,7 @@ All H-RTK GNSS models come with a GH 10-pin connector/cable that is compatible w The cables/connectors may need to be modified in order to connect to other flight controller boards (see [pin map](#pin_map)below). ::: - - -## Pin Map +## Pin Map {#pin_map} ![h-rtk_rover_pinmap](../../assets/hardware/gps/rtk_holybro_h-rtk-m8p_pinmap.jpg) diff --git a/docs/zh/gps_compass/rtk_gps_holybro_unicore_um982.md b/docs/zh/gps_compass/rtk_gps_holybro_unicore_um982.md index 14f9db8a77..90ed9f1869 100644 --- a/docs/zh/gps_compass/rtk_gps_holybro_unicore_um982.md +++ b/docs/zh/gps_compass/rtk_gps_holybro_unicore_um982.md @@ -1,10 +1,10 @@ # Holybro H-RTK Unicore UM982 GPS -The [Holybro H-RTK Unicore UM982 GPS](https://holybro.com/products/h-rtk-um982) is an multi-band high-precision [RTK GNSS System](../gps_compass/rtk_gps.md) launched by Holybro. +The [Holybro H-RTK Unicore UM982 GPS](https://holybro.com/products/h-rtk-unicore-um982) is an multi-band high-precision [RTK GNSS System](../gps_compass/rtk_gps.md) launched by Holybro. ![HB-pmw3901-1](../../assets/hardware/gps/holybro-unicore-um982/holybro-unicore-um982-1.jpg) -This module is based on the [Unicore UM982 Chip](https://en.unicorecomm.com/products/detail/24), which supports RTK positioning and dual-antenna heading calculation. +This module is based on the [Unicore UM982 Chip](https://en.unicore.com/products/dual-antenna-gnss-um982/), which supports RTK positioning and dual-antenna heading calculation. This means that it can generate a moving baseline headline/yaw determinations for autopilots with just one GPS module and dual antennas - a magnetometer is not needed. Unlike when using a module such as the U-blox F9P, where you would need [two U-blox F9P modules to compute a heading angle](../gps_compass/u-blox_f9p_heading.md), with the Unicore UM982 GPS, you only need one GPS module! @@ -20,7 +20,7 @@ Additional technical information can be found at [Holybro Technical Documentatio ## 购买渠道 -- [Holybro Website](https://holybro.com/products/h-rtk-um982) +- [Holybro Website](https://holybro.com/products/h-rtk-unicore-um982) ## 布线 diff --git a/docs/zh/gps_compass/rtk_gps_locosys_r1.md b/docs/zh/gps_compass/rtk_gps_locosys_r1.md index 1c617774cd..a4b556e72f 100644 --- a/docs/zh/gps_compass/rtk_gps_locosys_r1.md +++ b/docs/zh/gps_compass/rtk_gps_locosys_r1.md @@ -26,7 +26,7 @@ For an equivalent GPS module with a compass try: [LOCOSYS Hawk R2](../gps_compas - Fast TTFF at low signal level - Free hybrid ephemeris prediction to achieve faster cold start - Default 5Hz, up to 10 Hz update rate (SBAS support 5Hz only). -- Build-in super capacitor to reserve system data for rapid satellite acquisition +- Built-in super capacitor to reserve system data for rapid satellite acquisition ![LOCOSYS Hawk R1](../../assets/hardware/gps/locosys_hawk_a1/locosys_hawk_a1_gps.png) diff --git a/docs/zh/gps_compass/rtk_gps_locosys_r2.md b/docs/zh/gps_compass/rtk_gps_locosys_r2.md index 2b0c8d43f8..2b26812ae0 100644 --- a/docs/zh/gps_compass/rtk_gps_locosys_r2.md +++ b/docs/zh/gps_compass/rtk_gps_locosys_r2.md @@ -22,8 +22,8 @@ The fast time-to-first-fix, RTK convergence, superior sensitivity, low power con - Fast TTFF at low signal level - Free hybrid ephemeris prediction to achieve faster cold start - Default 5Hz, up to 10 Hz update rate (SBAS support 5Hz only) -- Build-in super capacitor to reserve system data for rapid satellite acquisition -- Build-in 3 axis compass function +- Built-in super capacitor to reserve system data for rapid satellite acquisition +- Built-in 3 axis compass function - Three LED indicator for Power, PPS and Data transmit ![LOCOSYS Hawk R2](../../assets/hardware/gps/locosys_hawk_a1/locosys_hawk_a1_gps.png) diff --git a/docs/zh/gps_compass/septentrio.md b/docs/zh/gps_compass/septentrio.md index 6b311f8ae4..fb6dc7fdb5 100644 --- a/docs/zh/gps_compass/septentrio.md +++ b/docs/zh/gps_compass/septentrio.md @@ -10,7 +10,7 @@ Certain receivers are recommended for autopilot applications because of their ph Dual-antenna, ultra-low-power GNSS rover receiver with support for heading. -- [AsteRx-m3 Pro+](https://www.septentrio.com/en/products/gps/gnss-boards/asterx-m3-pro-plus) +- [AsteRx-m3 Pro+](https://www.septentrio.com/en/products/gnss-receivers/gnss-boards/asterx-m3-pro-plus) Dual-antenna, ultra-low-power versatile GNSS rover and base receiver with support for heading. @@ -19,7 +19,7 @@ Certain receivers are recommended for autopilot applications because of their ph Single-antenna evaluation kit with support for L5 frequency band, based on the mosaic-X5 GNSS receiver module. -- [mosaic-go heading](https://www.septentrio.com/en/products/gps/gnss-receiver-modules/mosaic-h-evaluation-kit) +- [mosaic-go heading](https://www.septentrio.com/en/products/gnss-receivers/gnss-receiver-modules/mosaic-h-evaluation-kit) Dual-antenna evaluation kit with support for heading, based on the mosaic-H GNSS receiver module. diff --git a/docs/zh/gps_compass/septentrio_mosaic-go.md b/docs/zh/gps_compass/septentrio_mosaic-go.md index 123b9a33c3..9867c431e0 100644 --- a/docs/zh/gps_compass/septentrio_mosaic-go.md +++ b/docs/zh/gps_compass/septentrio_mosaic-go.md @@ -2,8 +2,8 @@ The Septentrio mosaic-go receivers are evaluation kits for their mosaic-X5 and mosaic-H receiver modules. Because of their small size and low weight, they are ideal for autopilot applications. -The available variants are the [mosaic-go](https://www.septentrio.com/en/products/gps/gnss-receiver-modules/mosaic-go-evaluation-kit) -and [mosaic-go heading](https://www.septentrio.com/en/products/gps/gnss-receiver-modules/mosaic-h-evaluation-kit). +The available variants are the [mosaic-go](https://www.septentrio.com/en/products/gnss-receivers/gnss-receiver-modules/mosaic-go-evaluation-kit) +and [mosaic-go heading](https://www.septentrio.com/en/products/gnss-receivers/gnss-receiver-modules/mosaic-h-evaluation-kit). ![Mosaic go Highly Accurate GNSS Receiver Module](../../assets/hardware/gps/septentrio_sbf/mosaic-go.png) @@ -108,7 +108,7 @@ To enable multi-antenna attitude determination, follow the following procedure: These can be compensated for with the heading parameters provided by the Septentrio driver in PX4. :::info -For optimal heading results, the two antennas should be seperated by at least 30cm / 11.8 in (ideally 50cm / 19.7in or more). +For optimal heading results, the two antennas should be separated by at least 30cm / 11.8 in (ideally 50cm / 19.7in or more). For additional configuration of the dual antenna setup, please refer to our [Knowledge Base](https://support.septentrio.com/l/858493/2022-04-19/xgrqd) or the [hardware manual](https://web.septentrio.com/l/858493/2022-04-19/xgrql). ::: diff --git a/docs/zh/gps_compass/u-blox_f9p_heading.md b/docs/zh/gps_compass/u-blox_f9p_heading.md index 9478e93876..892870844e 100644 --- a/docs/zh/gps_compass/u-blox_f9p_heading.md +++ b/docs/zh/gps_compass/u-blox_f9p_heading.md @@ -10,7 +10,7 @@ This feature works on F9P devices that support CAN or expose the GPS UART2 port. The following devices are supported: - [ARK RTK GPS](https://arkelectron.com/product/ark-rtk-gps/) (arkelectron.com) -- [SparkFun GPS-RTK2 Board - ZED-F9P](https://www.sparkfun.com/products/15136) (www.sparkfun.com) +- [SparkFun GPS-RTK2 Board - ZED-F9P](https://www.sparkfun.com/sparkfun-gps-rtk2-board-zed-f9p-qwiic-gps-15136.html) (www.sparkfun.com) - [SIRIUS RTK GNSS ROVER (F9P)](https://store-drotek.com/911-sirius-rtk-gnss-rover-f9p.html) (store-drotek.com) - [mRo u-blox ZED-F9 RTK L1/L2 GPS](https://store.mrobotics.io/product-p/m10020d.htm) (store.mrobotics.io) - [Holybro H-RTK F9P Helical or Base](https://holybro.com/products/h-rtk-f9p-gnss-series) (Holybro Store) diff --git a/docs/zh/hardware/board_packaging.md b/docs/zh/hardware/board_packaging.md new file mode 100644 index 0000000000..72b4ec37f4 --- /dev/null +++ b/docs/zh/hardware/board_packaging.md @@ -0,0 +1,298 @@ +# Board Firmware Packaging + +PX4 supports building distributable firmware packages for Linux-based (POSIX) boards. +While NuttX boards produce `.px4` firmware files that are flashed via QGroundControl, POSIX boards can produce `.deb` (Debian) packages that are installed using standard Linux package management tools (`dpkg`, `apt`). + +This page covers how manufacturers can add `.deb` packaging to their boards, with examples for both single-processor and multi-processor architectures. + +## 综述 + +The packaging framework uses [CMake CPack](https://cmake.org/cmake/help/latest/module/CPack.html) with the DEB generator. +It is built on two extension points in the PX4 build system: + +- **`boards///cmake/package.cmake`**: CPack variable overrides (package name, version, dependencies, architecture, maintainer info). Loaded during CMake configure. +- **`boards///cmake/install.cmake`**: `install()` rules that define what goes into the package (binaries, scripts, config files, service files). Loaded from `platforms/posix/CMakeLists.txt` where build targets are available. + +When a board provides these files, CI automatically discovers and builds the `_deb` target alongside the normal firmware build. + +## Build Command + +For any board with packaging support: + +```sh +make __deb +``` + +例如: + +```sh +make modalai_voxl2_deb +``` + +This builds the `_default` configuration (and any companion builds for multi-processor boards), then runs `cpack -G DEB` in the build directory. +The resulting `.deb` file is placed in `build/__default/`. + +## Adding Packaging to a Board + +### File Structure + +``` +boards/// + cmake/ + package.cmake # CPack configuration (required) + install.cmake # Install rules (required) + debian/ + postinst # Post-install script (optional) + prerm # Pre-remove script (optional) + .service # Systemd unit file (optional) +``` + +### Step 1: CPack Configuration (package.cmake) + +This file sets CPack variables that control the `.deb` metadata. +It is included from `cmake/package.cmake` after the base CPack defaults are configured. + +```cmake +# boards///cmake/package.cmake + +# Derive Debian-compatible version from git tag +# v1.17.0-alpha1-42-gabcdef -> 1.17.0~alpha1.42.gabcdef +# v1.17.0 -> 1.17.0 +string(REGEX REPLACE "^v" "" _deb_ver "${PX4_GIT_TAG}") +string(REGEX REPLACE "-" "~" _deb_ver "${_deb_ver}") +string(REGEX REPLACE "~([0-9]+)~" ".\\1." _deb_ver "${_deb_ver}") + +# Target architecture (use the target arch, not the build host) +set(CPACK_DEBIAN_ARCHITECTURE "arm64") + +# Package identity +set(CPACK_DEBIAN_PACKAGE_NAME "my-px4-board") +set(CPACK_DEBIAN_FILE_NAME "my-px4-board_${_deb_ver}_arm64.deb") + +# Install prefix +set(CPACK_PACKAGING_INSTALL_PREFIX "/usr") +set(CPACK_INSTALL_PREFIX "/usr") +set(CPACK_SET_DESTDIR true) + +# Package metadata +set(CPACK_DEBIAN_PACKAGE_DESCRIPTION "PX4 Autopilot for My Board") +set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Vendor ") +set(CPACK_DEBIAN_PACKAGE_DEPENDS "some-dependency (>= 1.0)") +set(CPACK_DEBIAN_PACKAGE_CONFLICTS "") +set(CPACK_DEBIAN_PACKAGE_REPLACES "") + +# Disable shlibdeps for cross-compiled boards +set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS OFF) + +# Include post-install and pre-remove scripts (optional) +set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA + "${PX4_BOARD_DIR}/debian/postinst;${PX4_BOARD_DIR}/debian/prerm") +``` + +**Key variables:** + +| Variable | Purpose | +| -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `CPACK_DEBIAN_ARCHITECTURE` | Target architecture. Set explicitly for cross-compiled boards since `dpkg --print-architecture` reports the build host, not the target. | +| `CPACK_DEBIAN_PACKAGE_NAME` | Package name as it appears in `dpkg -l`. | +| `CPACK_DEBIAN_FILE_NAME` | Output `.deb` filename. | +| `CPACK_DEBIAN_PACKAGE_DEPENDS` | Runtime dependencies (comma-separated, Debian format). | +| `CPACK_DEBIAN_PACKAGE_SHLIBDEPS` | Set to `OFF` for cross-compiled boards where `dpkg-shlibdeps` cannot inspect target binaries. | + +### Step 2: Install Rules (install.cmake) + +This file defines what files are packaged in the `.deb`. +It is included from `platforms/posix/CMakeLists.txt` where the `px4` build target is available. + +All paths are relative to `CPACK_PACKAGING_INSTALL_PREFIX` (typically `/usr`). Use `../` to install outside the prefix (e.g., `../etc/` installs to `/etc/`). + +**Minimal example (single-processor board):** + +```cmake +# boards///cmake/install.cmake + +# PX4 binary +install(TARGETS px4 RUNTIME DESTINATION bin) + +# Module alias script (generated during build) +install(PROGRAMS ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/px4-alias.sh DESTINATION bin) + +# Startup scripts +install(PROGRAMS + ${PX4_BOARD_DIR}/target/my-px4-start + DESTINATION bin +) + +# Configuration files +install(FILES + ${PX4_BOARD_DIR}/target/my-config.conf + DESTINATION ../etc/my-board +) + +# Systemd service +install(FILES ${PX4_BOARD_DIR}/debian/my-px4.service + DESTINATION ../etc/systemd/system +) + +# Component metadata +install(FILES + ${PX4_BINARY_DIR}/actuators.json.xz + ${PX4_BINARY_DIR}/parameters.json.xz + DESTINATION ../data/px4/etc/extras + OPTIONAL +) +install(FILES ${PX4_BINARY_DIR}/events/all_events.json.xz + DESTINATION ../data/px4/etc/extras + OPTIONAL +) +``` + +### Step 3: Debian Scripts (optional) + +#### postinst + +Runs after the package is installed. Common tasks: + +- Create `px4-*` module symlinks from `px4-alias.sh` +- Set up required directories with correct ownership +- Run `systemctl daemon-reload` to pick up the service file +- Board-specific setup (e.g., DSP signature generation) + +```bash +#!/usr/bin/env bash +set -e + +# Create px4-* symlinks +if [ -f /usr/bin/px4-alias.sh ]; then + grep "^alias " /usr/bin/px4-alias.sh | \ + sed "s/alias \(px4-[a-zA-Z0-9_]*\)=.*/\1/" | while read cmd; do + ln -sf px4 "/usr/bin/${cmd}" + done +fi + +# Create data directories +mkdir -p /data/px4/param +mkdir -p /data/px4/etc/extras + +# Reload systemd +if command -v systemctl > /dev/null 2>&1; then + systemctl daemon-reload +fi +``` + +#### prerm + +Runs before the package is removed: + +```bash +#!/usr/bin/env bash +set -e + +# Stop the service +if command -v systemctl > /dev/null 2>&1; then + systemctl stop my-px4 2>/dev/null || true +fi + +# Remove px4-* symlinks +for f in /usr/bin/px4-*; do + if [ -L "$f" ] && [ "$(readlink "$f")" = "px4" ]; then + rm -f "$f" + fi +done +``` + +Both scripts must be executable (`chmod +x`). + +## Multi-Processor Boards + +Some boards run PX4 across multiple processors, for example the ModalAI VOXL2 which has a POSIX apps processor (ARM) and a Hexagon DSP (SLPI). +These produce two separate CMake builds, but the `.deb` must contain artifacts from both. + +### How It Works + +1. The `_default` build (POSIX/apps processor) owns the `.deb`. +2. The Makefile `%_deb` target builds `_default`, which chains any companion builds as CMake prerequisites. +3. The `install.cmake` pulls companion build artifacts via absolute path to the sibling build directory. +4. CPack runs in the `_default` build tree and produces a single `.deb`. + +### Companion Build Artifacts + +In `install.cmake`, reference the companion build output by absolute path: + +```cmake +# DSP firmware blob from companion SLPI build +set(SLPI_BUILD_DIR "${PX4_SOURCE_DIR}/build/_-slpi_default") + +install(FILES ${SLPI_BUILD_DIR}/platforms/qurt/libpx4.so + DESTINATION lib/rfsa/adsp + OPTIONAL +) +``` + +The `OPTIONAL` keyword allows the `.deb` to build even when the companion build hasn't run (useful for development/testing of just the apps-processor side). + +### VOXL2 Reference + +The VOXL2 board is a complete working example of multi-processor packaging: + +``` +boards/modalai/voxl2/ + cmake/ + package.cmake # CPack config: voxl-px4, arm64, deps, shlibdeps off + install.cmake # px4 binary, SLPI libpx4.so, scripts, configs, metadata + debian/ + postinst # Symlinks, DSP signature, directory setup + prerm # Stop service, remove symlinks + voxl-px4.service # Systemd unit (after sscrpcd, restart on-failure) + target/ + voxl-px4 # Main startup wrapper + voxl-px4-start # PX4 module startup script +``` + +The resulting `.deb` installs: + +| Path | Contents | +| -------------------------------------- | ------------------------------------------------- | +| `/usr/bin/px4` | Apps processor PX4 binary | +| `/usr/bin/px4-alias.sh` | Module alias script | +| `/usr/bin/voxl-px4` | Startup wrapper | +| `/usr/bin/voxl-px4-start` | Module startup script | +| `/usr/lib/rfsa/adsp/libpx4.so` | DSP firmware (from SLPI build) | +| `/etc/modalai/*.config` | Board configuration files | +| `/etc/systemd/system/voxl-px4.service` | Systemd service | +| `/data/px4/etc/extras/*.json.xz` | Component metadata | + +## CI Integration + +### Automatic Discovery + +The CI system (`Tools/ci/generate_board_targets_json.py`) automatically discovers boards with `cmake/package.cmake` and adds a `__deb` target to the board's existing CI group. +No manual CI configuration is needed. + +### Artifact Collection + +The `Tools/ci/package_build_artifacts.sh` script collects `.deb` files alongside `.px4` and `.elf` artifacts. +On tagged releases, `.deb` files are uploaded to both S3 and GitHub Releases. + +## Version Format + +The `.deb` version is derived from `PX4_GIT_TAG` using Debian-compatible formatting: + +| Git Tag | Debian Version | 备注 | +| --------------------------- | -------------------------- | --------------------------------------------------------- | +| `v1.17.0` | `1.17.0` | Stable release | +| `v1.17.0-beta1` | `1.17.0~beta1` | Pre-release (`~` sorts before release) | +| `v1.17.0-alpha1-42-gabcdef` | `1.17.0~alpha1.42.gabcdef` | Development build | + +The `~` prefix in Debian versioning ensures pre-releases sort lower than the final release: `1.17.0~beta1 < 1.17.0`. + +## Checklist for New Boards + +1. Create `boards///cmake/package.cmake` with CPack variables +2. Create `boards///cmake/install.cmake` with install rules +3. (Optional) Create `boards///debian/postinst` and `prerm` +4. (Optional) Create `boards///debian/.service` +5. Test locally: `make __deb` +6. Verify: `dpkg-deb --info build/__default/_*.deb` +7. Verify: `dpkg-deb --contents build/__default/_*.deb` +8. CI picks it up automatically on the next push diff --git a/docs/zh/hardware/board_support_guide.md b/docs/zh/hardware/board_support_guide.md index f54739bde3..6275b04edf 100644 --- a/docs/zh/hardware/board_support_guide.md +++ b/docs/zh/hardware/board_support_guide.md @@ -57,7 +57,7 @@ PX4 generally only supports boards that are commercially available, which typica ### VER and REV ID (Hardware Revision and Version Sensing) {#ver_rev_id} FMUv5 and onwards have an electrical sensing mechanism. -This sensing coupled with optional configuration data will be used to define hardware’s configuration with respect to a mandatory device and power supply configuration. Manufacturers must obtain the VER and REV ID from PX4 board maintainers by issuing a PR to ammend the [DS-018 Pixhawk standard](https://github.com/pixhawk/Pixhawk-Standards) for board versions and revisions. +This sensing coupled with optional configuration data will be used to define hardware’s configuration with respect to a mandatory device and power supply configuration. Manufacturers must obtain the VER and REV ID from PX4 board maintainers by issuing a PR to amend the [DS-018 Pixhawk standard](https://github.com/pixhawk/Pixhawk-Standards) for board versions and revisions. Because these boards are 100% compliant with the Pixhawk standard, the values assigned for VER and REV ID are the defaults for that FMU Version. @@ -97,7 +97,7 @@ _New_ experimental boards are allocated [VER and REV IDs](#ver_rev_id) based on This category includes all boards that aren't supported by the PX4 project or a manufacturer, and that fall outside the"experimental" support. - Board is somewhat compatible on paper with something we already support, and it would take minimal effort to raise it to "experimental", but neither the dev-team or the manufacturer are currently pursuing this -- Manufacturer/Owner of hardware violates our [Code of Conduct](https://discuss.px4.io/t/code-of-conduct/13655) +- Manufacturer/Owner of hardware violates our [Code of Conduct](https://discuss.px4.io/t/px4-community-code-of-conduct/13655) - Closed source, where any of the necessary tools/libs/drivers/etc needed to add support for a board is deemed incompatible due to licensing restrictions - Board doesn't meet minimum requirements outlined in the General requirements diff --git a/docs/zh/hardware/drone_parts.md b/docs/zh/hardware/drone_parts.md index 640852b21b..0593d1ed94 100644 --- a/docs/zh/hardware/drone_parts.md +++ b/docs/zh/hardware/drone_parts.md @@ -1,4 +1,4 @@ -# 硬件选择和设置 +# Hardware Selection & Setup 本节包含可以用在无人机中的组件以及它们是如何设置的。 diff --git a/docs/zh/hardware/porting_guide_config.md b/docs/zh/hardware/porting_guide_config.md index 5f21a6fdd5..6073da83f6 100644 --- a/docs/zh/hardware/porting_guide_config.md +++ b/docs/zh/hardware/porting_guide_config.md @@ -70,3 +70,19 @@ The command line and GUI interfaces are shown below. ### menuconfig Command Line Interface ![menuconfig command line interface](../../assets/hardware/kconfig-guiconfig.png) + +## Fortified Toolchain Compatibility + +Some toolchains define `_FORTIFY_SOURCE` by default. Those toolchains generally require some optimization, which means PX4 configurations that use `-O0` may fail. + +PX4 keeps the default debug optimization unchanged unless you explicitly opt in. To switch `PX4_DEBUG_OPT_LEVEL` from `-O0` to `-Og`, enable: + +- `Toolchain > Fortified toolchain support` + +This is the Kconfig symbol: + +```sh +CONFIG_BOARD_SUPPORT_FORTIFIED_TOOLCHAIN=y +``` + +You can set it either in `boardconfig`/`boardguiconfig` or directly in your board's `*.px4board` file. diff --git a/docs/zh/index.md b/docs/zh/index.md index 8187b1648c..30a88a2b5e 100644 --- a/docs/zh/index.md +++ b/docs/zh/index.md @@ -5,7 +5,7 @@ const { site } = useData(); # PX4 自动驾驶仪用户指南 -[![Releases](https://img.shields.io/badge/release-main-blue.svg)](https://github.com/PX4/PX4-Autopilot/releases) [![Discuss](https://img.shields.io/badge/discuss-px4-ff69b4.svg)](https://discuss.px4.io//) [![Discord](https://discordapp.com/api/guilds/1022170275984457759/widget.png?style=shield)](https://discord.gg/dronecode) +[![Releases](https://img.shields.io/badge/release-main-blue.svg)](https://github.com/PX4/PX4-Autopilot/releases) [![Discuss](https://img.shields.io/badge/discuss-px4-ff69b4.svg)](https://discuss.px4.io//) [![Discord](https://discordapp.com/api/guilds/1022170275984457759/widget.png?style=shield)](https://discord.com/invite/dronecode) PX4 is an open-source autopilot for drones and autonomous vehicles. It runs on multirotors, fixed-wing, VTOL, helicopters, rovers, and more. This guide covers everything from assembly and configuration to flight operations and development. @@ -21,11 +21,13 @@ PX4 is an open-source autopilot for drones and autonomous vehicles. It runs on m
+## Try PX4 + +No hardware needed. Run PX4 in simulation with a single command using [Docker or a .deb package](simulation/px4_simulation_quickstart.md). Connect [QGroundControl](https://qgroundcontrol.com), [MAVSDK](https://mavsdk.mavlink.io/), or [ROS 2](ros2/index.md) and start flying immediately. + ## For Developers -:::tip -Building on PX4 or extending the platform? Start here: [Development Guide](development/development.md). Set up your [dev environment](dev_setup/config_initial.md), [build from source](dev_setup/building_px4.md), run [SITL simulation](simulation/index.md), or integrate via [ROS 2](ros2/index.md) and [MAVSDK](https://mavsdk.mavlink.io/). -::: +Want to modify PX4 or build from source? Start with the [Development Guide](development/development.md): set up your [dev environment](dev_setup/dev_env.md), [build the code](dev_setup/building_px4.md), and run [SITL simulation](simulation/index.md). ## 入门指南 @@ -49,7 +51,7 @@ Read [Operations](config/operations.md) to understand safety features and failsa ## 技术支持 -Get help on the [discussion forums](https://discuss.px4.io/) or [Discord](https://discord.gg/dronecode). See the [Support](contribute/support.md) page for diagnosing problems, reporting bugs, and joining the [weekly dev call](contribute/dev_call.md). +Get help on the [discussion forums](https://discuss.px4.io/) or [Discord](https://discord.com/invite/dronecode). See the [Support](contribute/support.md) page for diagnosing problems, reporting bugs, and joining the [weekly dev call](contribute/dev_call.md). ## 参与贡献 @@ -93,9 +95,9 @@ _Dronecode 日历_ 展示了面向平台用户和开发者的重要社区活动 ## 治理 -The PX4 Autopilot project is hosted by the [Dronecode Foundation](https://www.dronecode.org/), a [Linux Foundation](https://www.linuxfoundation.org/) Collaborative Project. Dronecode holds all PX4 trademarks and serves as the project's legal guardian, ensuring vendor-neutral stewardship. No single company owns the name or controls the roadmap. The source code is licensed under the [BSD 3-Clause](https://opensource.org/license/BSD-3-Clause) license, so you are free to use, modify, and distribute it in your own projects. +The PX4 Autopilot project is hosted by the [Dronecode Foundation](https://dronecode.org/), a [Linux Foundation](https://www.linuxfoundation.org/) Collaborative Project. Dronecode holds all PX4 trademarks and serves as the project's legal guardian, ensuring vendor-neutral stewardship. No single company owns the name or controls the roadmap. The source code is licensed under the [BSD 3-Clause](https://opensource.org/license/BSD-3-Clause) license, so you are free to use, modify, and distribute it in your own projects. -Dronecode Logo Linux Foundation Logo +Dronecode Logo Linux Foundation Logo
 
diff --git a/docs/zh/mavlink/adding_messages.md b/docs/zh/mavlink/adding_messages.md index c6b42f09fa..458661b5c6 100644 --- a/docs/zh/mavlink/adding_messages.md +++ b/docs/zh/mavlink/adding_messages.md @@ -39,7 +39,7 @@ Once the message headers for your definitions are generated in the PX4 build, yo The first step in debugging is to confirm that any messages you've created are being sent/received as you expect. -You should should first use the `uorb top []` command to verify in real-time that your message is published and the rate (see [uORB Messaging](../middleware/uorb.md#uorb-top-command)). +You should first use the `uorb top []` command to verify in real-time that your message is published and the rate (see [uORB Messaging](../middleware/uorb.md#uorb-top-command)). This approach can also be used to test incoming messages that publish a uORB topic (for other messages you might use `printf` in your code and test in SITL). There are several approaches you can use to view MAVLink traffic: @@ -82,16 +82,16 @@ So if you have created a custom message in PX4 you won't be able to use it unles ### Updating QGroundControl -You will need to [Build QGroundControl](https://docs.qgroundcontrol.com/master/en/qgc-dev-guide/getting_started/index.html) including a pre-built C library that contains your custom messages. +You will need to [Build QGroundControl](https://docs.qgroundcontrol.com/master/en/qgc-dev-guide/getting_started/index.html) with your custom messages included. -QGC uses a pre-built C library that must be located at [/qgroundcontrol/libs/mavlink/include/mavlink](https://github.com/mavlink/qgroundcontrol/tree/master/libs/mavlink/include/mavlink) in the QGC source. +QGC fetches MAVLink via CMake using settings defined in [`cmake/CustomOptions.cmake`](https://github.com/mavlink/qgroundcontrol/blob/master/cmake/CustomOptions.cmake). +The key variables are `QGC_MAVLINK_GIT_REPO` (the MAVLink repository to fetch), `QGC_MAVLINK_GIT_TAG` (a specific commit or tag), and `QGC_MAVLINK_DIALECT` (the dialect, default: `all`). +To use a custom MAVLink repository or dialect, override these in a `CustomOverrides.cmake` file in the QGC source root. -By default this is pre-included as a submodule from but you can [generate your own MAVLink Libraries](https://mavlink.io/en/getting_started/generate_libraries.html). +QGC uses the **all** dialect by default, which includes **common.xml**. +You can include your messages in either file, or [generate your own MAVLink Libraries](https://mavlink.io/en/getting_started/generate_libraries.html). -QGC uses the **all.xml** dialect by default, which includes **common.xml**. -You can include your messages in either file. - -Note that if you use your own _custom dialect_ then it should include **ArduPilotMega.xml** (or it will miss all the existing messages), and you will need to change the dialect used by setting it in [`MAVLINK_CONF`](https://github.com/mavlink/qgroundcontrol/blob/master/QGCExternalLibs.pri#L52) when running _qmake_. +Note that if you use your own _custom dialect_ then it should include **all.xml** (or it may miss all the existing messages), and you will need to set `QGC_MAVLINK_DIALECT` accordingly in `CustomOverrides.cmake`. ### Updating MAVSDK diff --git a/docs/zh/mavlink/index.md b/docs/zh/mavlink/index.md index f63038018f..719fe76871 100644 --- a/docs/zh/mavlink/index.md +++ b/docs/zh/mavlink/index.md @@ -9,10 +9,16 @@ It also links instructions for how you can add PX4 support for: - [Adding Standard Messages](../mavlink/adding_messages.md) - [Streaming MAVLink messages](../mavlink/streaming_messages.md) +- [Configuring/Using MAVLink Profiles](../mavlink/mavlink_profiles.md) - [Handling incoming MAVLink messages (and writing to a uORB topic)](../mavlink/receiving_messages.md) - [Custom MAVLink Messages](../mavlink/custom_messages.md) +- [Message Signing](../mavlink/message_signing.md) - [Protocols/Microservices](../mavlink/protocols.md) +:::warning +MAVLink messages are unauthenticated by default. Without [message signing](../mavlink/message_signing.md) enabled, any device that can send MAVLink messages to the vehicle can execute commands including shell access, file operations, and flight termination. Production deployments must enable signing and follow the [Security Hardening](../mavlink/security_hardening.md) guide. +::: + :::info We do not yet cover _command_ handling and sending, or how to implement your own microservices. ::: @@ -77,7 +83,7 @@ You will need to work with the [MAVLink team](https://mavlink.io/en/contributing ::: PX4 includes the [mavlink/mavlink](https://github.com/mavlink/mavlink) repo as a submodule under [/src/modules/mavlink](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/mavlink). -This contains XML definition files in [/mavlink/messages/1.0/](https://github.com/mavlink/mavlink/blob/master/message_definitions/v1.0/). +This contains XML definition files in [/mavlink/messages/1.0/](https://github.com/mavlink/mavlink/tree/master/message_definitions/v1.0). The build toolchain generates the MAVLink 2 C header files at build time. The XML file for which headers files are generated may be defined in the [PX4 kconfig board configuration](../hardware/porting_guide_config.md#px4-board-configuration-kconfig) on a per-board basis, using the variable `CONFIG_MAVLINK_DIALECT`: diff --git a/docs/zh/mavlink/mavlink_profiles.md b/docs/zh/mavlink/mavlink_profiles.md new file mode 100644 index 0000000000..c3ae6c8019 --- /dev/null +++ b/docs/zh/mavlink/mavlink_profiles.md @@ -0,0 +1,67 @@ +# MAVLink Profiles + +A MAVLink _profile_ (also called a _mode_) defines a set of messages that can be streamed by default on a MAVLink channel and their rates. + +This section lists the profiles, and explains how they can be used and extended. + +## Available Profiles + +The available profiles (in source-code declaration order) are: + +- _Normal_ (`MAVLINK_MODE_NORMAL`): Set of messages for a GCS. +- _Onboard_ (`MAVLINK_MODE_ONBOARD`): Set of messages for a companion computer on a fast link (such as Ethernet). +- _Gimbal_ (`MAVLINK_MODE_GIMBAL`): Messages for a gimbal. Note this also enables message forwarding. +- _External Vision_ (`MAVLINK_MODE_EXTVISION`): Messages for offboard vision systems. +- _External Vision Minimal_ (`MAVLINK_MODE_EXTVISIONMIN`): Messages for offboard vision systems on slower links. +- _OSD_ (`MAVLINK_MODE_OSD`): Set of messages for an [On-Screen Display (OSD)](../peripherals/osd.md#mavlink-osd) system. +- _Magic_ (`MAVLINK_MODE_MAGIC`): No messages streamed by default. Used when configuring streaming dynamically via MAVLink. +- _Custom_ (`MAVLINK_MODE_CUSTOM`): Same as `MAVLINK_MODE_MAGIC`. +- _Config_ (`MAVLINK_MODE_CONFIG`): Set of messages for configuration interface, sent at higher rates. This is used, for example, to send the `MAVLINK_MODE_NORMAL` message set via USB to a GCS. +- _Iridium_ (`MAVLINK_MODE_IRIDIUM`): Streams `HIGH_LATENCY2` message to an iridium satellite phone. +- _Minimal_ (`MAVLINK_MODE_MINIMAL`): Minimal set of messages for use with a GCS on a poor telemetry link. +- _Onboard Low Bandwidth_ (`MAVLINK_MODE_ONBOARD_LOW_BANDWIDTH`): Set of messages to be streamed to a companion computer for re-routing to a reduced-traffic link, such as a GCS. +- _Low Bandwidth_ (`MAVLINK_MODE_LOW_BANDWIDTH`): Reduced message set for low bandwidth links. +- _uAvionix_ (`MAVLINK_MODE_UAVIONIX`): Messages for a uAvionix ADS-B beacon. +- _Distance Sensor_ (`MAVLINK_MODE_DISTANCE_SENSOR`): Streams distance sensor data at unlimited rate. + +:::tip +The profile defines the _default_ messages and rates. +A connected MAVLink system can still request the streams/rates it wants using [MAV_CMD_SET_MESSAGE_INTERVAL](https://mavlink.io/en/messages/common.html#MAV_CMD_SET_MESSAGE_INTERVAL). +::: + +To find the exact messages in each profile, search for `configure_streams_to_default` (or the above profile names) in [mavlink_main.cpp](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/mavlink_main.cpp). + +## Assigning Profiles to Ports + +[MAVLink Peripherals](../peripherals/mavlink_peripherals.md) explains how to set up a port for communicating over MAVLink. +This uses the concept of an abstract [MAVLink instance](../peripherals/mavlink_peripherals.md#mavlink-instances) which is then assigned to a serial port. + +The profile associated with a particular MAVLink instance is set using the associated `MAV_X_MODE` parameter: + +- [MAV_0_MODE](../advanced_config/parameter_reference.md#MAV_0_MODE) +- [MAV_1_MODE](../advanced_config/parameter_reference.md#MAV_1_MODE) +- [MAV_2_MODE](../advanced_config/parameter_reference.md#MAV_2_MODE) + +There are also dedicated profile parameters for ports that are not configured via MAVLink instances: + +- [USB_MAV_MODE](../advanced_config/parameter_reference.md#USB_MAV_MODE): Profile for the USB port (used when MAVLink is set or detected on USB). +- [MAV_S_MODE](../advanced_config/parameter_reference.md#MAV_S_MODE): Profile for the internal SOM (System on Module) to FMU communication channel, used on boards where the FMU and companion computer are co-located on the same module. + +Note that not all profiles can necessarily be set on these ports. + +## Adding Messages to a Profile + +You can add messages to a profile in appropriate `case` switch in the [Mavlink::configure_streams_to_default(const char \*configure_single_stream)](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/mavlink_main.cpp#L1430) method (see [mavlink_main.cpp](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/mavlink_main.cpp)). + +If you're testing with a GCS over USB you might add the message to the `MAVLINK_MODE_CONFIG` case using the `configure_stream_local()` method. +For example, to stream `BATTERY_STATUS_DEMO` at 5 Hz: + +```cpp + case MAVLINK_MODE_CONFIG: // USB + // Note: streams requiring low latency come first + ... + configure_stream_local("BATTERY_STATUS_DEMO", 5.0f); + ... +``` + +See [Streaming MAVLink Messages](streaming_messages.md) for a more detailed example. diff --git a/docs/zh/mavlink/message_signing.md b/docs/zh/mavlink/message_signing.md new file mode 100644 index 0000000000..4b78a95611 --- /dev/null +++ b/docs/zh/mavlink/message_signing.md @@ -0,0 +1,184 @@ +# MAVLink Message Signing + +[MAVLink 2 message signing](https://mavlink.io/en/guide/message_signing.html) allows PX4 to cryptographically verify that incoming MAVLink messages originate from a trusted source (authentication). + +:::info +This mechanism does not _encrypt_ the message payload. +::: + +## 综述 + +When signing is enabled, PX4 appends a 13-byte [signature](https://mavlink.io/en/guide/message_signing.html#signature) to every outgoing MAVLink 2 message. + +Incoming messages are checked against the shared secret key, and unsigned or incorrectly signed messages are rejected (with [exceptions for safety-critical messages](#unsigned-message-allowlist)). + +The signing implementation is built into the MAVLink module and is always available, with no special build flags required. +The key is stored in an SD card: + +- **No key on SD card**: + Signing is disabled. + All messages are sent unsigned and all incoming messages are accepted. +- **Valid key on SD card**: + Signing is active on **all links** (including USB). + Outgoing messages are signed. + Incoming messages must be signed (with [exceptions](#unsigned-message-allowlist)). + +## Enable/Disable Signing + +Signing is controlled using the standard MAVLink [SETUP_SIGNING](https://mavlink.io/en/messages/common.html#SETUP_SIGNING) message (as per the [MAVLink signing specification](https://mavlink.io/en/guide/message_signing.html)): + +- To **enable** signing, send a `SETUP_SIGNING` message with a valid key on any link when no key is currently provisioned (see [Key Provisioning](#key-provisioning)). +- To **disable** signing via MAVLink, send a `SETUP_SIGNING` message with an all-zero key and timestamp. + This message **must be signed with the current active key**. + An unsigned blank-key message is rejected. +- To **change** the signing key, send a `SETUP_SIGNING` message with the new key on any link. + When signing is already active, the message must be signed with the current key. + +:::warning +Signing key changes (enable, disable, or rotate) are **rejected while the vehicle is armed**. +The vehicle must be disarmed before signing configuration can be changed. +::: + +:::tip +If the signing key is lost, you can still disable signing if you have physical access to the vehicle. +Either delete the key file (`/mavlink/mavlink-signing-key.bin`) from the SD card and reboot, or remove the SD card entirely. +::: + +## Key Provisioning + +The signing key is set by sending the MAVLink [SETUP_SIGNING](https://mavlink.io/en/messages/common.html#SETUP_SIGNING) message (ID 256) to PX4. +This message contains: + +- A 32-byte secret key +- A 64-bit initial timestamp + +PX4 accepts `SETUP_SIGNING` on **any link** (USB, telemetry radio, network, and so on). + +When signing is **not active** (no key provisioned), the first `SETUP_SIGNING` with a valid key enables signing. +When signing is **already active**, key changes (including disabling) require that the `SETUP_SIGNING` message is signed with the current key. + +Note that `SETUP_SIGNING` is rejected while the vehicle is armed (disarm before provisioning or changing keys). +As per the MAVLink specification, `SETUP_SIGNING` is never forwarded to other links. + +## Key Storage + +The secret key and timestamp are stored on the SD card at: + +```txt +/mavlink/mavlink-signing-key.bin +``` + +The file is a 40-byte binary file: + +| Offset | Size | Content | +| ------ | -------- | -------------------------------------------------------- | +| 0 | 32 bytes | Secret key | +| 32 | 8 bytes | Timestamp (`uint64_t`, little-endian) | + +The file is created with mode `0600` (owner read/write only), and the containing `/mavlink/` directory is created with mode `0700` (owner only). + +On startup, PX4 reads the key from this file. +If the file exists and contains a non-zero key or timestamp, signing is activated automatically. + +:::info +The timestamp in the file is set when `SETUP_SIGNING` is received. +A graceful shutdown also writes the current timestamp back, but in practice most vehicles are powered off by pulling the battery, so the on-disk timestamp will typically remain at the value from the last key provisioning. +::: + +:::info +Storage of the key on the SD card means that signing can be disabled by removing the card. +Note that this requires physical access to the vehicle. +::: + +## How It Works + +### Initialization + +1. The MAVLink module calls `MavlinkSignControl::start()` during startup. +2. The `/mavlink/` directory is created if it doesn't exist. +3. The `mavlink-signing-key.bin` file is opened if it exists. +4. If a valid key is found (non-zero key or timestamp), signing is activated: the signing struct is wired into the MAVLink library and outgoing messages are signed. +5. If no valid key is found, the signing struct is left disconnected, and the MAVLink library operates with zero signing overhead. + +### Outgoing Messages + +When signing is active (valid key present), the `MAVLINK_SIGNING_FLAG_SIGN_OUTGOING` flag is set, which causes the MAVLink library to automatically append a [SHA-256 based signature](https://mavlink.io/en/guide/message_signing.html#signature) to every outgoing MAVLink 2 message. + +When no key is present, signing is completely bypassed with no CPU or bandwidth overhead. + +### Incoming Messages + +For each incoming message, the MAVLink library checks whether a valid signature is present. +If the message is unsigned or has an invalid signature, the library calls the `accept_unsigned` callback, which decides whether to accept or reject the message based on: + +1. **Signing not active**: If no key has been loaded, all messages are accepted. +2. **Allowlisted message**: Certain [safety-critical messages](#unsigned-message-allowlist) are always accepted. + +## Unsigned Message Allowlist + +The following messages are **always** accepted unsigned, regardless of the signing state. +These are safety-critical messages that may originate from systems that don't support signing: + +| 消息 | ID | Reason | +| -------------------------------------------------------------------------------------------- | --- | -------------------------------------------------------- | +| [HEARTBEAT](https://mavlink.io/en/messages/common.html#HEARTBEAT) | 0 | System discovery and liveness detection | +| [RADIO_STATUS](https://mavlink.io/en/messages/common.html#RADIO_STATUS) | 109 | Radio link status from SiK radios and other radio modems | +| [ADSB_VEHICLE](https://mavlink.io/en/messages/common.html#ADSB_VEHICLE) | 246 | ADS-B traffic information for collision avoidance | +| [COLLISION](https://mavlink.io/en/messages/common.html#COLLISION) | 247 | Collision threat warnings | + +## Security Considerations + +### Signing is enforced on all links + +When signing is active, **all links require signed messages**. +This means: + +- An attacker cannot send unsigned commands on any link. +- Changing or disabling the key requires sending a `SETUP_SIGNING` message **signed with the current key**. +- Signing can be disabled via MAVLink by sending a signed `SETUP_SIGNING` with an all-zero key. + +### Armed guard + +`SETUP_SIGNING` is rejected while the vehicle is armed. +This prevents the signing configuration from being changed during flight, whether by accident or by an attacker who has obtained the key. + +### Lost key recovery + +If the signing key is lost on the GCS side and no device has the current key: + +- **Remove the SD card** and delete `/mavlink/mavlink-signing-key.bin`, then reboot. +- **Reflash via SWD/JTAG** if the SD card is not accessible. + +:::warning +There is no software-only recovery path for a lost key. +This is intentional: any MAVLink-based recovery mechanism would also be available to an attacker. +Physical access to the SD card or debug port is required. +::: + +### Other considerations + +- **Initial key provisioning**: When no key is provisioned, `SETUP_SIGNING` is accepted unsigned on any link. + Once a key is active, subsequent changes require a signed message. + Provision the initial key over a trusted connection, such as USB. +- **Key not exposed via parameters**: The secret key is stored in a separate file on the SD card, not as a MAVLink parameter, so it cannot be read back through the parameter protocol. +- **SD card access**: Anyone with physical access to the SD card can read or modify the `mavlink-signing-key.bin` file, or remove the card entirely to disable signing. + Ensure physical security of the vehicle if signing is used as a security control. +- **Replay protection**: The MAVLink signing protocol includes a timestamp that prevents replay attacks. + The on-disk timestamp is updated when a new key is provisioned via `SETUP_SIGNING`. + A graceful shutdown also persists the current timestamp, but since most vehicles are powered off by pulling the battery, the on-disk timestamp will typically remain at the value from the last key provisioning on reboot. +- **No encryption**: Message signing provides **authentication and integrity only**. + Messages are still sent in plaintext. + An eavesdropper can read all message contents (telemetry, commands, parameters, missions) but cannot forge or modify them without the key. +- **Allowlisted messages bypass signing**: A small set of [safety-critical messages](#unsigned-message-allowlist) are always accepted unsigned. + An attacker can spoof these specific messages (e.g. fake `ADSB_VEHICLE` traffic) even when signing is active. + +### What signing does NOT protect against + +| Attack | Why | +| ----------------------------------------------------- | ------------------------------------------------------- | +| Eavesdropping | Messages are not encrypted | +| SD card extraction | Key file is readable by anyone with physical access | +| Spoofed `HEARTBEAT`/`RADIO_STATUS`/`ADSB`/`COLLISION` | These are allowlisted unsigned | +| Lost key without SD card access | Requires SWD reflash | +| Key rotation | No automatic mechanism; manual re-provisioning required | +| In-flight key changes | `SETUP_SIGNING` rejected while armed | diff --git a/docs/zh/mavlink/protocols.md b/docs/zh/mavlink/protocols.md index 9dac078fb9..5105df2344 100644 --- a/docs/zh/mavlink/protocols.md +++ b/docs/zh/mavlink/protocols.md @@ -30,6 +30,7 @@ These services are known to be supported in some form: - [Landing Target Protocol](https://mavlink.io/en/services/landing_target.html) - [Manual Control (Joystick) Protocol](https://mavlink.io/en/services/manual_control.html) - [MAVLink Id Assignment (sysid, compid)](https://mavlink.io/en/services/mavlink_id_assignment.html) +- [Message Signing](../mavlink/message_signing.md) ([MAVLink spec](https://mavlink.io/en/guide/message_signing.html)) - [Mission Protocol](https://mavlink.io/en/services/mission.html) - [Offboard Control Protocol](https://mavlink.io/en/services/offboard_control.html) - [Remote ID](../peripherals/remote_id.md) ([Open Drone ID Protocol](https://mavlink.io/en/services/opendroneid.html)) diff --git a/docs/zh/mavlink/security_hardening.md b/docs/zh/mavlink/security_hardening.md new file mode 100644 index 0000000000..7501c803a6 --- /dev/null +++ b/docs/zh/mavlink/security_hardening.md @@ -0,0 +1,104 @@ +# MAVLink Security Hardening for Production Deployments + + + +MAVLink is an open communication protocol designed for lightweight, low-latency communication between drones and ground stations. +By default, all MAVLink messages are unauthenticated. +This is intentional for development and testing, but **production deployments must enable [message signing](message_signing.md)** to prevent unauthorized access. + +:::warning +Without message signing enabled, any device that can send MAVLink messages to the vehicle (via radio, network, or serial) can execute any command, including shell access, file operations, parameter changes, mission uploads, arming, and flight termination. +::: + +## What Is at Risk + +When MAVLink signing is not enabled, an attacker within communication range can: + +| Capability | MAVLink mechanism | +| ------------------------------------------- | ------------------------------------------------ | +| Execute shell commands | `SERIAL_CONTROL` with `SERIAL_CONTROL_DEV_SHELL` | +| Read, write, or delete files | MAVLink FTP protocol | +| Change any flight parameter | `PARAM_SET` / `PARAM_EXT_SET` | +| Upload or overwrite missions | Mission protocol | +| Arm or disarm motors | `MAV_CMD_COMPONENT_ARM_DISARM` | +| Terminate flight (crash) | `MAV_CMD_DO_FLIGHTTERMINATION` | +| Trigger emergency landing | Spoofed `BATTERY_STATUS` | +| Reboot the vehicle | `MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN` | + +All of these are standard MAVLink capabilities used by ground control stations. +Without signing, there is no distinction between a legitimate GCS and an unauthorized sender. + +## Hardening Checklist + +### 1. Enable Message Signing + +Message signing provides cryptographic authentication for all MAVLink communication. +See [Message Signing](message_signing.md) for full details. + +Steps: + +1. Connect to the vehicle over a **trusted link** (USB or other secure connection). +2. Provision a 32-byte secret key using the [SETUP_SIGNING](https://mavlink.io/en/messages/common.html#SETUP_SIGNING) message. This works on any link, but use a trusted one for initial provisioning. +3. Provision the same key on all ground control stations and companion computers that need to communicate with the vehicle. +4. Verify that unsigned messages from unknown sources are rejected. + +:::info +Once a key is provisioned, signing is enforced automatically on **all links** (including USB). +Changing or disabling the key requires a signed `SETUP_SIGNING` message. +Signing changes are rejected while the vehicle is armed. +Signing can also be disabled by physically removing the key file from the SD card. +::: + +### 2. Secure Physical Access + +- **SD card**: The signing key is stored at `/mavlink/mavlink-signing-key.bin`. + Anyone with physical access to the SD card can read, modify, or remove the key file. +- **USB ports**: USB follows the same signing rules as all other links. + When signing is active, USB requires signed messages. +- **Debug ports (SWD/JTAG)**: If exposed, [Debug Ports](../debug/swd_debug.md) allow full firmware reflash and bypass all software security. + Not all vehicles expose debug connectors. + +:::warning +Signing protects all MAVLink links. +The primary physical attack surface is the SD card (key file extraction or deletion). +If your threat model includes physical access, secure the SD card slot and debug ports. +::: + +### 3. Secure Network Links + +- Do not expose MAVLink UDP/TCP ports to untrusted networks or the internet. +- Place MAVLink communication links behind firewalls or VPNs. +- Segment MAVLink networks from business or public networks. +- When using companion computers, audit which network interfaces MAVLink is bound to. + +### 4. Understand the Limitations + +- **No encryption**: + Message signing provides authentication and integrity, but messages are sent in plaintext. + An eavesdropper can read telemetry and commands but cannot forge them. +- **Allowlisted messages**: + A small set of [safety-critical messages](message_signing.md#unsigned-message-allowlist) (`HEARTBEAT`, `RADIO_STATUS`, `ADSB_VEHICLE`, `COLLISION`) are always accepted unsigned on all links. + An attacker could spoof these specific messages. +- **Key management**: + There is no automatic key rotation. + Keys must be reprovisioned manually via a signed `SETUP_SIGNING` message. +- **Lost key recovery**: + If the signing key is lost on all GCS devices, the only recovery is physical: remove the SD card and delete the key file, or reflash via SWD/JTAG. + There is no software-only recovery path. + See [Message Signing: Lost Key Recovery](message_signing.md#lost-key-recovery) for details. + +## Integrator Responsibility + +PX4 is open-source flight controller firmware used by manufacturers and system integrators to build commercial and custom drone platforms. + +Securing the communication links for a specific deployment is the responsibility of the system integrator. +其中包括: + +- Choosing appropriate radio hardware and link security +- Enabling and managing MAVLink message signing +- Restricting network access to MAVLink interfaces +- Applying firmware updates that address security issues +- Evaluating whether the default configuration meets the security requirements of the target application + +PX4 provides the tools for securing MAVLink communication. +Integrators must enable and configure them for their deployment context. diff --git a/docs/zh/mavlink/streaming_messages.md b/docs/zh/mavlink/streaming_messages.md index 99589e4915..4e329a2dbb 100644 --- a/docs/zh/mavlink/streaming_messages.md +++ b/docs/zh/mavlink/streaming_messages.md @@ -4,7 +4,7 @@ This tutorial demonstrates how to stream a uORB message as a MAVLink message, an ## 综述 -[MAVLink messages](../middleware/mavlink.md) are streamed using a streaming class, derived from `MavlinkStream`, that has been added to the PX4 stream list. +[MAVLink messages](../middleware/mavlink.md) are streamed using a streaming class, derived from `MavlinkStream`, that has been added to the [PX4 stream list](#add-the-new-class-to-the-streaming-list). The class has framework methods that you implement so PX4 can get information it needs from the generated MAVLink message definition. It also has a `send()` method that is called each time the message needs to be sent — you override this to copy information from a uORB subscription to the MAVLink message object that is to be sent. @@ -190,15 +190,17 @@ Most streaming classes are very similar (see examples in [/src/modules/mavlink/s ::: -Next we include our new class in [mavlink_messages.cpp](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/mavlink_messages.cpp#L2193). -Add the line below to the part of the file where all the other streams are included: +### Add the new class to the streaming list + +Next we add our new class to the streaming list. + +First open [mavlink_messages.cpp](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/mavlink_messages.cpp#L2193) and add the line below to the part of the file where all the other streams are included: ```cpp #include "streams/BATTERY_STATUS_DEMO.hpp" ``` -Finally append the stream class to the `streams_list` at the bottom of -[mavlink_messages.cpp](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/mavlink_messages.cpp) +Then append the stream class to the `streams_list` at the bottom of [mavlink_messages.cpp](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/mavlink_messages.cpp) ```C StreamListItem *streams_list[] = { @@ -215,25 +217,12 @@ We cover that in the next sections. ## Streaming by Default -The easiest way to stream your messages by default (as part of a build) is to add them to [mavlink_main.cpp](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/mavlink_main.cpp) in the appropriate message group. +The easiest way to stream your messages by default (as part of a build) is to add them to appropriate [MAVLink Profile](../mavlink/mavlink_profiles.md), such as `MAVLINK_MODE_NORMAL` if you're streaming to a GCS over WiFI, or `MAVLINK_MODE_OSD` for an OSD device. -If you search in the file you'll find groups of messages defined in a switch statement: +This is covered in [Adding Messages to a Profile](..//mavlink/mavlink_profiles.md#adding-messages-to-a-profile), but in summary you first open [mavlink_main.cpp](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/mavlink_main.cpp), search for the method `Mavlink::configure_streams_to_default`, and then find the profile that you wish to update. -- `MAVLINK_MODE_NORMAL`: Streamed to a GCS. -- `MAVLINK_MODE_ONBOARD`: Streamed to a companion computer on a fast link, such as Ethernet -- `MAVLINK_MODE_ONBOARD_LOW_BANDWIDTH`: Streamed to a companion computer for re-routing to a reduced-traffic link, such as a GCS. -- `MAVLINK_MODE_GIMBAL`: Streamed to a gimbal -- `MAVLINK_MODE_EXTVISION`: Streamed to an external vision system -- `MAVLINK_MODE_EXTVISIONMIN`: Streamed to an external vision system on a slower link -- `MAVLINK_MODE_OSD`: Streamed to an OSD, such as an FPV headset. -- `MAVLINK_MODE_CUSTOM`: Stream nothing by default. Used when configuring streaming using MAVLink. -- `MAVLINK_MODE_MAGIC`: Same as `MAVLINK_MODE_CUSTOM` -- `MAVLINK_MODE_CONFIG`: Streaming over USB with higher rates than `MAVLINK_MODE_NORMAL`. -- `MAVLINK_MODE_MINIMAL`: Stream a minimal set of messages. Normally used for poor telemetry links. -- `MAVLINK_MODE_IRIDIUM`: Streamed to an iridium satellite phone - -Normally you'll be testing on a GCS, so you could just add the message to the `MAVLINK_MODE_NORMAL` case using the `configure_stream_local()` method. -For example, to stream CA_TRAJECTORY at 5 Hz: +If you're just testing on a GCS, you could add the message to the `MAVLINK_MODE_NORMAL` case using the `configure_stream_local()` method. +For example, to stream `BATTERY_STATUS_DEMO` at 5 Hz: ```cpp case MAVLINK_MODE_CONFIG: // USB diff --git a/docs/zh/middleware/dds_topics.md b/docs/zh/middleware/dds_topics.md index 911a7d358c..b29de5f607 100644 --- a/docs/zh/middleware/dds_topics.md +++ b/docs/zh/middleware/dds_topics.md @@ -70,7 +70,6 @@ This document shows a markdown-rendered version of [dds_topics.yaml](https://git | /fmu/in/vehicle_torque_setpoint | [px4_msgs::msg::VehicleTorqueSetpoint](../msg_docs/VehicleTorqueSetpoint.md) | | /fmu/in/actuator_motors | [px4_msgs::msg::ActuatorMotors](../msg_docs/ActuatorMotors.md) | | /fmu/in/actuator_servos | [px4_msgs::msg::ActuatorServos](../msg_docs/ActuatorServos.md) | -| /fmu/in/aux_global_position | [px4_msgs::msg::VehicleGlobalPosition](../msg_docs/VehicleGlobalPosition.md) | | /fmu/in/fixed_wing_longitudinal_setpoint | [px4_msgs::msg::FixedWingLongitudinalSetpoint](../msg_docs/FixedWingLongitudinalSetpoint.md) | | /fmu/in/fixed_wing_lateral_setpoint | [px4_msgs::msg::FixedWingLateralSetpoint](../msg_docs/FixedWingLateralSetpoint.md) | | /fmu/in/longitudinal_control_configuration | [px4_msgs::msg::LongitudinalControlConfiguration](../msg_docs/LongitudinalControlConfiguration.md) | @@ -85,7 +84,9 @@ This document shows a markdown-rendered version of [dds_topics.yaml](https://git ## Subscriptions Multi -None +| Topic | 类型 | Route Field | Max Instances | +| --------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- | ------------- | +| /fmu/in/aux_global_position | [px4_msgs::msg::AuxGlobalPosition](../msg_docs/AuxGlobalPosition.md) | `id` | 4 | ## Not Exported @@ -95,200 +96,210 @@ They are not build into the module, and hence are neither published or subscribe :::details See messages -- [GpioIn](../msg_docs/GpioIn.md) -- [SystemPower](../msg_docs/SystemPower.md) -- [LandingTargetInnovations](../msg_docs/LandingTargetInnovations.md) -- [VehicleOpticalFlow](../msg_docs/VehicleOpticalFlow.md) -- [LandingTargetPose](../msg_docs/LandingTargetPose.md) -- [EstimatorGpsStatus](../msg_docs/EstimatorGpsStatus.md) -- [EstimatorBias](../msg_docs/EstimatorBias.md) -- [ParameterSetValueResponse](../msg_docs/ParameterSetValueResponse.md) -- [LogMessage](../msg_docs/LogMessage.md) -- [PowerMonitor](../msg_docs/PowerMonitor.md) -- [VehicleConstraints](../msg_docs/VehicleConstraints.md) -- [SensorAirflow](../msg_docs/SensorAirflow.md) -- [ArmingCheckRequestV0](../msg_docs/ArmingCheckRequestV0.md) -- [ActuatorArmed](../msg_docs/ActuatorArmed.md) -- [HoverThrustEstimate](../msg_docs/HoverThrustEstimate.md) -- [LaunchDetectionStatus](../msg_docs/LaunchDetectionStatus.md) -- [DifferentialPressure](../msg_docs/DifferentialPressure.md) -- [MagnetometerBiasEstimate](../msg_docs/MagnetometerBiasEstimate.md) -- [PwmInput](../msg_docs/PwmInput.md) -- [OrbTestMedium](../msg_docs/OrbTestMedium.md) -- [QshellReq](../msg_docs/QshellReq.md) -- [GeofenceStatus](../msg_docs/GeofenceStatus.md) -- [RcChannels](../msg_docs/RcChannels.md) -- [Cpuload](../msg_docs/Cpuload.md) -- [DebugArray](../msg_docs/DebugArray.md) -- [FlightPhaseEstimation](../msg_docs/FlightPhaseEstimation.md) -- [Mission](../msg_docs/Mission.md) -- [Airspeed](../msg_docs/Airspeed.md) -- [LedControl](../msg_docs/LedControl.md) -- [HealthReport](../msg_docs/HealthReport.md) -- [FixedWingLateralGuidanceStatus](../msg_docs/FixedWingLateralGuidanceStatus.md) -- [FigureEightStatus](../msg_docs/FigureEightStatus.md) -- [EstimatorInnovations](../msg_docs/EstimatorInnovations.md) -- [VehicleImuStatus](../msg_docs/VehicleImuStatus.md) -- [VehicleLocalPositionSetpoint](../msg_docs/VehicleLocalPositionSetpoint.md) -- [InputRc](../msg_docs/InputRc.md) -- [UavcanParameterRequest](../msg_docs/UavcanParameterRequest.md) -- [FixedWingRunwayControl](../msg_docs/FixedWingRunwayControl.md) -- [SensorCorrection](../msg_docs/SensorCorrection.md) -- [ControlAllocatorStatus](../msg_docs/ControlAllocatorStatus.md) -- [AirspeedValidatedV0](../msg_docs/AirspeedValidatedV0.md) -- [CanInterfaceStatus](../msg_docs/CanInterfaceStatus.md) -- [SensorSelection](../msg_docs/SensorSelection.md) -- [DeviceInformation](../msg_docs/DeviceInformation.md) -- [CameraTrigger](../msg_docs/CameraTrigger.md) -- [SensorAccel](../msg_docs/SensorAccel.md) -- [ActuatorServosTrim](../msg_docs/ActuatorServosTrim.md) -- [SensorsStatusImu](../msg_docs/SensorsStatusImu.md) -- [EstimatorBias3d](../msg_docs/EstimatorBias3d.md) -- [GimbalManagerStatus](../msg_docs/GimbalManagerStatus.md) -- [BatteryStatusV0](../msg_docs/BatteryStatusV0.md) -- [OpenDroneIdSelfId](../msg_docs/OpenDroneIdSelfId.md) -- [VehicleImu](../msg_docs/VehicleImu.md) -- [MissionResult](../msg_docs/MissionResult.md) -- [SensorAccelFifo](../msg_docs/SensorAccelFifo.md) -- [DistanceSensorModeChangeRequest](../msg_docs/DistanceSensorModeChangeRequest.md) -- [SensorPreflightMag](../msg_docs/SensorPreflightMag.md) -- [OrbTest](../msg_docs/OrbTest.md) -- [PositionControllerLandingStatus](../msg_docs/PositionControllerLandingStatus.md) -- [FuelTankStatus](../msg_docs/FuelTankStatus.md) -- [OpenDroneIdSystem](../msg_docs/OpenDroneIdSystem.md) -- [OrbitStatus](../msg_docs/OrbitStatus.md) -- [Px4ioStatus](../msg_docs/Px4ioStatus.md) -- [RtlStatus](../msg_docs/RtlStatus.md) -- [ButtonEvent](../msg_docs/ButtonEvent.md) -- [VehicleLocalPositionV0](../msg_docs/VehicleLocalPositionV0.md) -- [DebugValue](../msg_docs/DebugValue.md) -- [ParameterSetUsedRequest](../msg_docs/ParameterSetUsedRequest.md) -- [RoverSpeedStatus](../msg_docs/RoverSpeedStatus.md) -- [SensorHygrometer](../msg_docs/SensorHygrometer.md) -- [OpenDroneIdOperatorId](../msg_docs/OpenDroneIdOperatorId.md) -- [InternalCombustionEngineStatus](../msg_docs/InternalCombustionEngineStatus.md) -- [GpioOut](../msg_docs/GpioOut.md) -- [ActuatorTest](../msg_docs/ActuatorTest.md) -- [SensorBaro](../msg_docs/SensorBaro.md) -- [PositionControllerStatus](../msg_docs/PositionControllerStatus.md) -- [PurePursuitStatus](../msg_docs/PurePursuitStatus.md) -- [RoverRateStatus](../msg_docs/RoverRateStatus.md) -- [TecsStatus](../msg_docs/TecsStatus.md) -- [PpsCapture](../msg_docs/PpsCapture.md) -- [RaptorStatus](../msg_docs/RaptorStatus.md) -- [EventV0](../msg_docs/EventV0.md) -- [GpioRequest](../msg_docs/GpioRequest.md) -- [FollowTargetEstimator](../msg_docs/FollowTargetEstimator.md) -- [MagWorkerData](../msg_docs/MagWorkerData.md) -- [FollowTarget](../msg_docs/FollowTarget.md) -- [EstimatorAidSource1d](../msg_docs/EstimatorAidSource1d.md) -- [GimbalDeviceSetAttitude](../msg_docs/GimbalDeviceSetAttitude.md) -- [SensorGnssRelative](../msg_docs/SensorGnssRelative.md) -- [ActionRequest](../msg_docs/ActionRequest.md) -- [NavigatorMissionItem](../msg_docs/NavigatorMissionItem.md) -- [GpsInjectData](../msg_docs/GpsInjectData.md) -- [VehicleStatusV0](../msg_docs/VehicleStatusV0.md) -- [DronecanNodeStatus](../msg_docs/DronecanNodeStatus.md) -- [UlogStream](../msg_docs/UlogStream.md) -- [DebugKeyValue](../msg_docs/DebugKeyValue.md) -- [NavigatorStatus](../msg_docs/NavigatorStatus.md) -- [MountOrientation](../msg_docs/MountOrientation.md) -- [RcParameterMap](../msg_docs/RcParameterMap.md) -- [AdcReport](../msg_docs/AdcReport.md) -- [EstimatorSensorBias](../msg_docs/EstimatorSensorBias.md) -- [InternalCombustionEngineControl](../msg_docs/InternalCombustionEngineControl.md) -- [MavlinkLog](../msg_docs/MavlinkLog.md) -- [VehicleMagnetometer](../msg_docs/VehicleMagnetometer.md) -- [GpioConfig](../msg_docs/GpioConfig.md) -- [GainCompression](../msg_docs/GainCompression.md) -- [DebugVect](../msg_docs/DebugVect.md) -- [ArmingCheckReplyV0](../msg_docs/ArmingCheckReplyV0.md) -- [VehicleAttitudeSetpointV0](../msg_docs/VehicleAttitudeSetpointV0.md) -- [FollowTargetStatus](../msg_docs/FollowTargetStatus.md) -- [RtlTimeEstimate](../msg_docs/RtlTimeEstimate.md) -- [RoverAttitudeStatus](../msg_docs/RoverAttitudeStatus.md) -- [SensorUwb](../msg_docs/SensorUwb.md) -- [YawEstimatorStatus](../msg_docs/YawEstimatorStatus.md) -- [VelocityLimits](../msg_docs/VelocityLimits.md) -- [TrajectorySetpoint6dof](../msg_docs/TrajectorySetpoint6dof.md) -- [OpenDroneIdArmStatus](../msg_docs/OpenDroneIdArmStatus.md) -- [EscStatus](../msg_docs/EscStatus.md) -- [GimbalManagerInformation](../msg_docs/GimbalManagerInformation.md) -- [HeaterStatus](../msg_docs/HeaterStatus.md) -- [EstimatorSelectorStatus](../msg_docs/EstimatorSelectorStatus.md) -- [GeofenceResult](../msg_docs/GeofenceResult.md) -- [PowerButtonState](../msg_docs/PowerButtonState.md) -- [Rpm](../msg_docs/Rpm.md) -- [WheelEncoders](../msg_docs/WheelEncoders.md) -- [LoggerStatus](../msg_docs/LoggerStatus.md) -- [CellularStatus](../msg_docs/CellularStatus.md) -- [TuneControl](../msg_docs/TuneControl.md) -- [ConfigOverridesV0](../msg_docs/ConfigOverridesV0.md) -- [GimbalManagerSetAttitude](../msg_docs/GimbalManagerSetAttitude.md) -- [OrbTestLarge](../msg_docs/OrbTestLarge.md) -- [BatteryInfo](../msg_docs/BatteryInfo.md) -- [CameraStatus](../msg_docs/CameraStatus.md) -- [QshellRetval](../msg_docs/QshellRetval.md) -- [SensorMag](../msg_docs/SensorMag.md) -- [RateCtrlStatus](../msg_docs/RateCtrlStatus.md) -- [TaskStackInfo](../msg_docs/TaskStackInfo.md) -- [EstimatorAidSource2d](../msg_docs/EstimatorAidSource2d.md) -- [AirspeedWind](../msg_docs/AirspeedWind.md) -- [AutotuneAttitudeControlStatus](../msg_docs/AutotuneAttitudeControlStatus.md) -- [GimbalDeviceInformation](../msg_docs/GimbalDeviceInformation.md) -- [GpsDump](../msg_docs/GpsDump.md) -- [SensorTemp](../msg_docs/SensorTemp.md) -- [ParameterResetRequest](../msg_docs/ParameterResetRequest.md) -- [TiltrotorExtraControls](../msg_docs/TiltrotorExtraControls.md) -- [SensorsStatus](../msg_docs/SensorsStatus.md) -- [EstimatorStatus](../msg_docs/EstimatorStatus.md) -- [FailureDetectorStatus](../msg_docs/FailureDetectorStatus.md) -- [VehicleAirData](../msg_docs/VehicleAirData.md) -- [ActuatorControlsStatus](../msg_docs/ActuatorControlsStatus.md) -- [TakeoffStatus](../msg_docs/TakeoffStatus.md) -- [GeneratorStatus](../msg_docs/GeneratorStatus.md) -- [SensorGyroFifo](../msg_docs/SensorGyroFifo.md) -- [VehicleAngularVelocity](../msg_docs/VehicleAngularVelocity.md) -- [LandingGearWheel](../msg_docs/LandingGearWheel.md) -- [ParameterSetValueRequest](../msg_docs/ParameterSetValueRequest.md) -- [RegisterExtComponentReplyV0](../msg_docs/RegisterExtComponentReplyV0.md) -- [RaptorInput](../msg_docs/RaptorInput.md) -- [SensorGyro](../msg_docs/SensorGyro.md) -- [ParameterUpdate](../msg_docs/ParameterUpdate.md) -- [NormalizedUnsignedSetpoint](../msg_docs/NormalizedUnsignedSetpoint.md) -- [PositionSetpoint](../msg_docs/PositionSetpoint.md) -- [EstimatorStates](../msg_docs/EstimatorStates.md) -- [ActuatorOutputs](../msg_docs/ActuatorOutputs.md) -- [ManualControlSwitches](../msg_docs/ManualControlSwitches.md) -- [UavcanParameterValue](../msg_docs/UavcanParameterValue.md) -- [VehicleAngularAccelerationSetpoint](../msg_docs/VehicleAngularAccelerationSetpoint.md) -- [EstimatorEventFlags](../msg_docs/EstimatorEventFlags.md) -- [SensorGnssStatus](../msg_docs/SensorGnssStatus.md) -- [GimbalManagerSetManualControl](../msg_docs/GimbalManagerSetManualControl.md) -- [HomePositionV0](../msg_docs/HomePositionV0.md) -- [FixedWingLateralStatus](../msg_docs/FixedWingLateralStatus.md) -- [SatelliteInfo](../msg_docs/SatelliteInfo.md) - [IrlockReport](../msg_docs/IrlockReport.md) -- [Ping](../msg_docs/Ping.md) -- [CameraCapture](../msg_docs/CameraCapture.md) -- [Vtx](../msg_docs/Vtx.md) -- [Ekf2Timestamps](../msg_docs/Ekf2Timestamps.md) -- [RegisterExtComponentRequestV0](../msg_docs/RegisterExtComponentRequestV0.md) -- [EscReport](../msg_docs/EscReport.md) -- [Gripper](../msg_docs/Gripper.md) -- [UlogStreamAck](../msg_docs/UlogStreamAck.md) -- [SensorGyroFft](../msg_docs/SensorGyroFft.md) -- [VehicleRoi](../msg_docs/VehicleRoi.md) -- [VehicleAcceleration](../msg_docs/VehicleAcceleration.md) -- [NeuralControl](../msg_docs/NeuralControl.md) -- [DatamanResponse](../msg_docs/DatamanResponse.md) -- [GimbalControls](../msg_docs/GimbalControls.md) -- [MavlinkTunnel](../msg_docs/MavlinkTunnel.md) -- [EstimatorAidSource3d](../msg_docs/EstimatorAidSource3d.md) -- [DatamanRequest](../msg_docs/DatamanRequest.md) +- [FailureDetectorStatus](../msg_docs/FailureDetectorStatus.md) +- [MissionResult](../msg_docs/MissionResult.md) +- [SensorSelection](../msg_docs/SensorSelection.md) - [Event](../msg_docs/Event.md) -- [RadioStatus](../msg_docs/RadioStatus.md) +- [MountOrientation](../msg_docs/MountOrientation.md) +- [NeuralControl](../msg_docs/NeuralControl.md) +- [VehicleAttitudeSetpointV0](../msg_docs/VehicleAttitudeSetpointV0.md) +- [DifferentialPressure](../msg_docs/DifferentialPressure.md) +- [EstimatorGpsStatus](../msg_docs/EstimatorGpsStatus.md) +- [LedControl](../msg_docs/LedControl.md) +- [RtlStatus](../msg_docs/RtlStatus.md) +- [Rpm](../msg_docs/Rpm.md) +- [QshellReq](../msg_docs/QshellReq.md) +- [ArmingCheckReplyV0](../msg_docs/ArmingCheckReplyV0.md) +- [OrbTest](../msg_docs/OrbTest.md) +- [VehicleImuStatus](../msg_docs/VehicleImuStatus.md) +- [OrbitStatus](../msg_docs/OrbitStatus.md) +- [BatteryInfo](../msg_docs/BatteryInfo.md) +- [RegisterExtComponentReplyV0](../msg_docs/RegisterExtComponentReplyV0.md) +- [HeaterStatus](../msg_docs/HeaterStatus.md) +- [VehicleAngularVelocity](../msg_docs/VehicleAngularVelocity.md) +- [DeviceInformation](../msg_docs/DeviceInformation.md) +- [VehicleLocalPositionV0](../msg_docs/VehicleLocalPositionV0.md) +- [PowerButtonState](../msg_docs/PowerButtonState.md) +- [SensorAirflow](../msg_docs/SensorAirflow.md) +- [TrajectorySetpoint6dof](../msg_docs/TrajectorySetpoint6dof.md) +- [VehicleStatusV0](../msg_docs/VehicleStatusV0.md) +- [HealthReport](../msg_docs/HealthReport.md) +- [FollowTargetEstimator](../msg_docs/FollowTargetEstimator.md) +- [InternalCombustionEngineControl](../msg_docs/InternalCombustionEngineControl.md) +- [AirspeedWind](../msg_docs/AirspeedWind.md) +- [SensorGnssRelative](../msg_docs/SensorGnssRelative.md) +- [VehicleImu](../msg_docs/VehicleImu.md) +- [VehicleStatusV3](../msg_docs/VehicleStatusV3.md) +- [NormalizedUnsignedSetpoint](../msg_docs/NormalizedUnsignedSetpoint.md) +- [EstimatorSelectorStatus](../msg_docs/EstimatorSelectorStatus.md) +- [ActuatorTest](../msg_docs/ActuatorTest.md) +- [CanInterfaceStatus](../msg_docs/CanInterfaceStatus.md) - [VehicleOpticalFlowVel](../msg_docs/VehicleOpticalFlowVel.md) +- [VehicleStatusV1](../msg_docs/VehicleStatusV1.md) +- [SensorGnssStatus](../msg_docs/SensorGnssStatus.md) +- [PwmInput](../msg_docs/PwmInput.md) +- [RcParameterMap](../msg_docs/RcParameterMap.md) +- [VehicleConstraints](../msg_docs/VehicleConstraints.md) +- [SystemPower](../msg_docs/SystemPower.md) +- [Ekf2Timestamps](../msg_docs/Ekf2Timestamps.md) +- [InternalCombustionEngineStatus](../msg_docs/InternalCombustionEngineStatus.md) +- [UavcanParameterValue](../msg_docs/UavcanParameterValue.md) +- [EstimatorEventFlags](../msg_docs/EstimatorEventFlags.md) +- [DebugVect](../msg_docs/DebugVect.md) +- [FollowTarget](../msg_docs/FollowTarget.md) +- [TiltrotorExtraControls](../msg_docs/TiltrotorExtraControls.md) +- [TuneControl](../msg_docs/TuneControl.md) +- [PositionSetpoint](../msg_docs/PositionSetpoint.md) +- [ParameterSetUsedRequest](../msg_docs/ParameterSetUsedRequest.md) +- [SensorAccelFifo](../msg_docs/SensorAccelFifo.md) +- [EventV0](../msg_docs/EventV0.md) +- [AutotuneAttitudeControlStatus](../msg_docs/AutotuneAttitudeControlStatus.md) +- [SensorTemp](../msg_docs/SensorTemp.md) +- [OpenDroneIdSelfId](../msg_docs/OpenDroneIdSelfId.md) +- [FollowTargetStatus](../msg_docs/FollowTargetStatus.md) +- [VehicleGlobalPositionV0](../msg_docs/VehicleGlobalPositionV0.md) +- [LandingGearWheel](../msg_docs/LandingGearWheel.md) +- [SensorsStatus](../msg_docs/SensorsStatus.md) +- [HomePositionV0](../msg_docs/HomePositionV0.md) +- [ParameterUpdate](../msg_docs/ParameterUpdate.md) +- [EstimatorInnovations](../msg_docs/EstimatorInnovations.md) +- [ButtonEvent](../msg_docs/ButtonEvent.md) +- [RaptorInput](../msg_docs/RaptorInput.md) +- [VehicleOpticalFlow](../msg_docs/VehicleOpticalFlow.md) +- [GpioConfig](../msg_docs/GpioConfig.md) +- [SensorMag](../msg_docs/SensorMag.md) +- [LogMessage](../msg_docs/LogMessage.md) +- [GeofenceResult](../msg_docs/GeofenceResult.md) +- [LoggerStatus](../msg_docs/LoggerStatus.md) +- [RcChannels](../msg_docs/RcChannels.md) +- [MagWorkerData](../msg_docs/MagWorkerData.md) - [IridiumsbdStatus](../msg_docs/IridiumsbdStatus.md) +- [SensorGyroFifo](../msg_docs/SensorGyroFifo.md) +- [GeofenceStatus](../msg_docs/GeofenceStatus.md) +- [UlogStreamAck](../msg_docs/UlogStreamAck.md) +- [Airspeed](../msg_docs/Airspeed.md) +- [ActuatorArmed](../msg_docs/ActuatorArmed.md) +- [ParameterSetValueResponse](../msg_docs/ParameterSetValueResponse.md) +- [SensorPreflightMag](../msg_docs/SensorPreflightMag.md) +- [GimbalManagerStatus](../msg_docs/GimbalManagerStatus.md) +- [GimbalDeviceSetAttitude](../msg_docs/GimbalDeviceSetAttitude.md) +- [GimbalManagerInformation](../msg_docs/GimbalManagerInformation.md) +- [EstimatorBias](../msg_docs/EstimatorBias.md) +- [TecsStatus](../msg_docs/TecsStatus.md) +- [GimbalControls](../msg_docs/GimbalControls.md) +- [Mission](../msg_docs/Mission.md) +- [GainCompression](../msg_docs/GainCompression.md) +- [ConfigOverridesV0](../msg_docs/ConfigOverridesV0.md) +- [Ping](../msg_docs/Ping.md) +- [ActuatorControlsStatus](../msg_docs/ActuatorControlsStatus.md) +- [CellularStatus](../msg_docs/CellularStatus.md) +- [DronecanNodeStatus](../msg_docs/DronecanNodeStatus.md) +- [EscEepromWrite](../msg_docs/EscEepromWrite.md) +- [MagnetometerBiasEstimate](../msg_docs/MagnetometerBiasEstimate.md) +- [FixedWingLateralGuidanceStatus](../msg_docs/FixedWingLateralGuidanceStatus.md) +- [OrbTestMedium](../msg_docs/OrbTestMedium.md) +- [PositionControllerStatus](../msg_docs/PositionControllerStatus.md) +- [EscReport](../msg_docs/EscReport.md) +- [SensorGyro](../msg_docs/SensorGyro.md) +- [DatamanRequest](../msg_docs/DatamanRequest.md) +- [FixedWingLateralStatus](../msg_docs/FixedWingLateralStatus.md) +- [GeneratorStatus](../msg_docs/GeneratorStatus.md) +- [SensorAccel](../msg_docs/SensorAccel.md) +- [RangingBeacon](../msg_docs/RangingBeacon.md) +- [RegisterExtComponentRequestV1](../msg_docs/RegisterExtComponentRequestV1.md) +- [GpsDump](../msg_docs/GpsDump.md) +- [GimbalManagerSetManualControl](../msg_docs/GimbalManagerSetManualControl.md) +- [Vtx](../msg_docs/Vtx.md) +- [VehicleStatusV2](../msg_docs/VehicleStatusV2.md) +- [InputRc](../msg_docs/InputRc.md) +- [DebugKeyValue](../msg_docs/DebugKeyValue.md) +- [VehicleMagnetometer](../msg_docs/VehicleMagnetometer.md) +- [OpenDroneIdSystem](../msg_docs/OpenDroneIdSystem.md) +- [RoverAttitudeStatus](../msg_docs/RoverAttitudeStatus.md) +- [GpsInjectData](../msg_docs/GpsInjectData.md) +- [TaskStackInfo](../msg_docs/TaskStackInfo.md) +- [FixedWingRunwayControl](../msg_docs/FixedWingRunwayControl.md) +- [SensorsStatusImu](../msg_docs/SensorsStatusImu.md) +- [VehicleAirData](../msg_docs/VehicleAirData.md) +- [PpsCapture](../msg_docs/PpsCapture.md) +- [CameraStatus](../msg_docs/CameraStatus.md) +- [SensorGyroFft](../msg_docs/SensorGyroFft.md) +- [ParameterResetRequest](../msg_docs/ParameterResetRequest.md) +- [EstimatorBias3d](../msg_docs/EstimatorBias3d.md) +- [PowerMonitor](../msg_docs/PowerMonitor.md) +- [GimbalManagerSetAttitude](../msg_docs/GimbalManagerSetAttitude.md) +- [EstimatorStates](../msg_docs/EstimatorStates.md) +- [FlightPhaseEstimation](../msg_docs/FlightPhaseEstimation.md) +- [SensorUwb](../msg_docs/SensorUwb.md) +- [EscStatus](../msg_docs/EscStatus.md) +- [RegisterExtComponentRequestV0](../msg_docs/RegisterExtComponentRequestV0.md) +- [TakeoffStatus](../msg_docs/TakeoffStatus.md) +- [EstimatorAidSource1d](../msg_docs/EstimatorAidSource1d.md) +- [UavcanParameterRequest](../msg_docs/UavcanParameterRequest.md) +- [EstimatorSensorBias](../msg_docs/EstimatorSensorBias.md) +- [SatelliteInfo](../msg_docs/SatelliteInfo.md) +- [MavlinkLog](../msg_docs/MavlinkLog.md) +- [VehicleCommandAckV0](../msg_docs/VehicleCommandAckV0.md) +- [VehicleAcceleration](../msg_docs/VehicleAcceleration.md) +- [BatteryStatusV0](../msg_docs/BatteryStatusV0.md) +- [CameraTrigger](../msg_docs/CameraTrigger.md) +- [ActuatorOutputs](../msg_docs/ActuatorOutputs.md) +- [EstimatorAidSource2d](../msg_docs/EstimatorAidSource2d.md) +- [EstimatorFusionControl](../msg_docs/EstimatorFusionControl.md) +- [ActionRequest](../msg_docs/ActionRequest.md) +- [DebugArray](../msg_docs/DebugArray.md) +- [AirspeedValidatedV0](../msg_docs/AirspeedValidatedV0.md) +- [RtlTimeEstimate](../msg_docs/RtlTimeEstimate.md) +- [DebugValue](../msg_docs/DebugValue.md) +- [NavigatorMissionItem](../msg_docs/NavigatorMissionItem.md) +- [ArmingCheckRequestV0](../msg_docs/ArmingCheckRequestV0.md) +- [DistanceSensorModeChangeRequest](../msg_docs/DistanceSensorModeChangeRequest.md) +- [FuelTankStatus](../msg_docs/FuelTankStatus.md) +- [PurePursuitStatus](../msg_docs/PurePursuitStatus.md) +- [EscEepromRead](../msg_docs/EscEepromRead.md) +- [UlogStream](../msg_docs/UlogStream.md) +- [VehicleAngularAccelerationSetpoint](../msg_docs/VehicleAngularAccelerationSetpoint.md) +- [CameraCapture](../msg_docs/CameraCapture.md) +- [NavigatorStatus](../msg_docs/NavigatorStatus.md) +- [RoverRateStatus](../msg_docs/RoverRateStatus.md) +- [DatamanResponse](../msg_docs/DatamanResponse.md) +- [PositionControllerLandingStatus](../msg_docs/PositionControllerLandingStatus.md) +- [WheelEncoders](../msg_docs/WheelEncoders.md) +- [FigureEightStatus](../msg_docs/FigureEightStatus.md) +- [GpioOut](../msg_docs/GpioOut.md) +- [RateCtrlStatus](../msg_docs/RateCtrlStatus.md) +- [SensorHygrometer](../msg_docs/SensorHygrometer.md) +- [RaptorStatus](../msg_docs/RaptorStatus.md) +- [Px4ioStatus](../msg_docs/Px4ioStatus.md) +- [VehicleLocalPositionSetpoint](../msg_docs/VehicleLocalPositionSetpoint.md) +- [RadioStatus](../msg_docs/RadioStatus.md) +- [SensorBaro](../msg_docs/SensorBaro.md) +- [YawEstimatorStatus](../msg_docs/YawEstimatorStatus.md) +- [SensorCorrection](../msg_docs/SensorCorrection.md) +- [Gripper](../msg_docs/Gripper.md) +- [LandingTargetPose](../msg_docs/LandingTargetPose.md) +- [EstimatorStatus](../msg_docs/EstimatorStatus.md) +- [GpioRequest](../msg_docs/GpioRequest.md) +- [QshellRetval](../msg_docs/QshellRetval.md) +- [OrbTestLarge](../msg_docs/OrbTestLarge.md) +- [ActuatorServosTrim](../msg_docs/ActuatorServosTrim.md) +- [VehicleRoi](../msg_docs/VehicleRoi.md) +- [GpioIn](../msg_docs/GpioIn.md) +- [HoverThrustEstimate](../msg_docs/HoverThrustEstimate.md) +- [RoverSpeedStatus](../msg_docs/RoverSpeedStatus.md) +- [LaunchDetectionStatus](../msg_docs/LaunchDetectionStatus.md) +- [ParameterSetValueRequest](../msg_docs/ParameterSetValueRequest.md) +- [OpenDroneIdOperatorId](../msg_docs/OpenDroneIdOperatorId.md) +- [Cpuload](../msg_docs/Cpuload.md) +- [ControlAllocatorStatus](../msg_docs/ControlAllocatorStatus.md) +- [OpenDroneIdArmStatus](../msg_docs/OpenDroneIdArmStatus.md) +- [LandingTargetInnovations](../msg_docs/LandingTargetInnovations.md) +- [EstimatorAidSource3d](../msg_docs/EstimatorAidSource3d.md) +- [VelocityLimits](../msg_docs/VelocityLimits.md) +- [AdcReport](../msg_docs/AdcReport.md) +- [GimbalDeviceInformation](../msg_docs/GimbalDeviceInformation.md) +- [MavlinkTunnel](../msg_docs/MavlinkTunnel.md) +- [ManualControlSwitches](../msg_docs/ManualControlSwitches.md) ::: diff --git a/docs/zh/middleware/micrortps.md b/docs/zh/middleware/micrortps.md index c4f8a626f0..3d879ef7cf 100644 --- a/docs/zh/middleware/micrortps.md +++ b/docs/zh/middleware/micrortps.md @@ -3,4 +3,4 @@ [uXRCE-DDS (PX4-ROS 2/DDS Bridge)](../middleware/uxrce_dds.md) has replaced the _Fast-RTPS Bridge_. -If you're working in PX4 v1.13 or earlier see: [Fast-RTPS Bridge](https://docs.px4.io/v1.13/en/middleware/micrortps.html#rtps-dds-interface-px4-fast-rtps-dds-bridge) +If you're working in PX4 v1.13 or earlier see: [Fast-RTPS Bridge](https://docs.px4.io/v1.13/en/middleware/micrortps#rtps-dds-interface-px4-fast-rtps-dds-bridge) diff --git a/docs/zh/middleware/uorb.md b/docs/zh/middleware/uorb.md index 8307da5923..bf2fe1bf4e 100644 --- a/docs/zh/middleware/uorb.md +++ b/docs/zh/middleware/uorb.md @@ -145,8 +145,8 @@ Versioned messages include an additional field `uint32 MESSAGE_VERSION = x`, whe Versioned and non-versioned messages are separated in the file system: - Non-versioned topic message files and [server service](../ros2/user_guide.md#px4-ros-2-service-servers) message files remain in the [`msg/`](https://github.com/PX4/PX4-Autopilot/tree/main/msg) and [`srv/`](https://github.com/PX4/PX4-Autopilot/tree/main/srv) directories, respectively. -- The current (highest) version of message files are located in the `versioned` subfolders ([`msg/versioned`](https://github.com/PX4/PX4-Autopilot/tree/main/msg/versioned) and [`srv/versioned`](https://github.com/PX4/PX4-Autopilot/tree/main/srv/versioned)). -- Older versions of messages are stored in nested `msg/px4_msgs_old/` subfolders ([`msg/px4_msgs_old/msg/`](https://github.com/PX4/PX4-Autopilot/tree/main/msg/px4_msgs_old/msg) and [`msg/px4_msgs_old/srv/`](https://github.com/PX4/PX4-Autopilot/tree/main/msg/px4_msgs_old/srv)). +- The current (highest) version of message files are located in the `versioned` subfolders ([`msg/versioned`](https://github.com/PX4/PX4-Autopilot/tree/main/msg/versioned) and [`srv/versioned`](https://github.com/PX4/PX4-Autopilot/tree/main/msg/versioned)). +- Older versions of messages are stored in nested `msg/px4_msgs_old/` subfolders ([`msg/px4_msgs_old/msg/`](https://github.com/PX4/PX4-Autopilot/tree/main/msg/px4_msgs_old/msg) and [`msg/px4_msgs_old/srv/`](https://github.com/PX4/PX4-Autopilot/tree/main/msg/px4_msgs_old)). The files are also renamed with a suffix to indicate their version number. :::tip @@ -163,7 +163,7 @@ For the full list of versioned and non-versioned messages see: [uORB Message Ref For more on PX4 and ROS 2 communication, see [PX4-ROS 2 Bridge](../ros/ros2_comm.md). :::info -ROS 2 plans to natively support message versioning in the future, but this is not implememented yet. +ROS 2 plans to natively support message versioning in the future, but this is not implemented yet. See the related ROS Enhancement Proposal ([REP 2011](https://github.com/ros-infrastructure/rep/pull/358)). See also this [Foxglove post](https://foxglove.dev/blog/sending-ros2-message-types-over-the-wire) on message hashing and type fetching. ::: diff --git a/docs/zh/middleware/uxrce_dds.md b/docs/zh/middleware/uxrce_dds.md index d5edfd4561..33c3a4b8a2 100644 --- a/docs/zh/middleware/uxrce_dds.md +++ b/docs/zh/middleware/uxrce_dds.md @@ -3,7 +3,7 @@ :::info -uXRCE-DDS replaces the [Fast-RTPS Bridge](https://docs.px4.io/v1.13/en/middleware/micrortps.html#rtps-dds-interface-px4-fast-rtps-dds-bridge) used in PX4 v1.13. +uXRCE-DDS replaces the [Fast-RTPS Bridge](https://docs.px4.io/v1.13/en/middleware/micrortps#rtps-dds-interface-px4-fast-rtps-dds-bridge) used in PX4 v1.13. If you were using the Fast-RTPS Bridge, please follow the [migration guidelines](#fast-rtps-to-uxrce-dds-migration-guidelines). ::: @@ -32,9 +32,14 @@ The agent itself has no dependency on client-side code and can be built and/or i Code that wants to subscribe/publish to PX4 does have a dependency on client-side code; it requires uORB message definitions that match those used to create the PX4 uXRCE-DDS client so that it can interpret the messages. +- For _versioned_ PX4 messages, the [PX4 ROS 2 Message Transition Node](../ros2/px4_ros2_msg_translation_node.md) handles compatibility automatically. + This node acts as an agent-side translator, allowing your code to interact with PX4 without requiring strict, manual message synchronization. +- For unversioned messages, code that needs to publish to PX4 maintains a direct dependency on client-side definitions. + In these cases, you must ensure your local uORB message definitions exactly match those used to create the PX4 uXRCE-DDS client, so that the messages can be correctly interpreted. + ## 代码生成 -The PX4 [uxrce_dds_client](../modules/modules_system.md#uxrce-dds-client) is generated at build time and included in PX4 firmare by default. +PX4 [uxrce_dds_client](../modules/modules_system.md#uxrce-dds-client) 是在构建时生成,并且默认包含在 PX4 固件中。 The agent has no dependency on client code. It can be built standalone or in a ROS 2 workspace, or installed as a snap package on Ubuntu. @@ -335,7 +340,7 @@ The configuration can be done using the [UXRCE-DDS parameters](../advanced_confi - [UXRCE_DDS_NS_IDX](../advanced_config/parameter_reference.md#UXRCE_DDS_NS_IDX) : Index-based namespace definition. Setting this parameter to any value other than `-1` creates a namespace with the prefix `uav_` and the specified value, e.g. `uav_0`, `uav_1`, etc. See [namespace](#customizing-the-namespace) for methods to define richer or arbitrary namespaces. - - [`UXRCE_DDS_FLCTRL`](../advanced_config/parameter_reference.md#UXRCE_DDS_FLCTRL) : Serial port hardware flow control enable. + - [`UXRCE_DDS_FLCTRL`](../advanced_config/parameter_reference.md#UXRCE_DDS_FLCTRL) : Serial port hardware flow control enable. To use hardware flow control, a custom MicroXRCE Agent needs to be adopted. Please refer to [this PR](https://github.com/eProsima/Micro-XRCE-DDS-Agent/pull/407) for the required changes, cherry-pick them on top of the [agent version](#build-run-within-ros-2-workspace) you need to use and then run the agent with the additional `--flow-control` option. :::info @@ -397,11 +402,14 @@ The message definitions are stored in the ROS 2 interface package [PX4/px4_msgs] - 如果您正在使用 PX4 的主要版本或发布版本,您可以通过克隆接口包[PX4/px4_msgs](https://github.com/PX4/px4_msgs)获得消息定义。 - 如果您要创建或修改 uORB 消息,必须从 PX4 源代码树中手动更新工作空间中的消息。 一般来说,这意味着您将更新 [dds_topics.yaml](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/uxrce_dds_client/dds_topics.yaml),克隆接口包。 然后手动同步,将新的/修改的消息定义从 [PX4-Autopilot/msg](https://github.com/PX4/PX4-Autopilot/tree/main/msg)复制到它的 `msg` 文件夹。 - Assuming that PX4-Autopilot is in your home directory `~`, while `px4_msgs` is in `~/px4_ros_com/src/`, then the command might be: + Assuming that PX4-Autopilot is in your home directory `~`, while `px4_msgs` is in `~/ros2_px4_ws/src/`, then the command might be: ```sh - rm ~/px4_ros_com/src/px4_msgs/msg/*.msg - cp ~/PX4-Autopilot/msg/*.msg ~/px4_ros_com/src/px4_msgs/msg/ + rm ~/ros2_px4_ws/src/px4_msgs/msg/*.msg + rm ~/ros2_px4_ws/src/px4_msgs/srv/*.srv + cp ~/PX4-Autopilot/msg/*.msg ~/ros2_px4_ws/src/px4_msgs/msg/ + cp ~/PX4-Autopilot/msg/versioned/*.msg ~/ros2_px4_ws/src/px4_msgs/msg/ + cp ~/PX4-Autopilot/srv/*.msg ~/ros2_px4_ws/src/px4_msgs/srv/ ``` ::: info @@ -535,10 +543,10 @@ subscriptions: subscriptions_multi: - - topic: /fmu/in/vehicle_optical_flow_vel - type: px4_msgs::msg::VehicleOpticalFlowVel - - ... + - topic: /fmu/in/aux_global_position + type: px4_msgs::msg::AuxGlobalPosition + route_field: id # OPTIONAL: field used to demux into instances + max_instances: 4 # Required when route_field is set ``` @@ -555,31 +563,42 @@ Each (`topic`,`type`) pairs defines: 4. The message type (`VehicleOdometry`, `VehicleStatus`, `OffboardControlMode`, etc.) and the ROS 2 package (`px4_msgs`) that is expected to provide the message definition. 5. **(Optional)**: An additional `rate_limit` field (only for publication entries), which specifies the maximum rate (Hz) at which messages will be published on this topic by PX4 to ROS 2. If left unspecified, the maximum publication rate limit is set to 100 Hz. -6. **(Optional)**: An additional `instance` field (only for publication entries), which lets you select which instance of a [multi-instance topic](./uorb.md#multi-instance) you want to be published to ROS 2. +6. **(Optional)**: An additional `instance` field (only for publication entries), which lets you select which instance of a [multi-instance topic](./uorb.md#multi-instance) you want to be published to ROS 2. If provided, this option changes the ROS 2 topic name of the advertised uORB topic appending the instance number: `fmu/out/[uorb topic name][instance]` (plus eventual namespace and message version). In the example above the final topic name would be `/fmu/out/vehicle_imu1`. -`subscriptions` and `subscriptions_multi` allow us to choose the uORB topic instance that ROS 2 topics are routed to: either a shared instance that may also be getting updates from internal PX4 uORB publishers, or a separate instance that is reserved for ROS2 publications, respectively. +`subscriptions` and `subscriptions_multi` allow us to choose the uORB topic instance that ROS 2 topics are routed to: either a shared instance that may also be getting updates from internal PX4 uORB publishers, or a separate instance that is reserved for ROS 2 publications, respectively. Without this mechanism all ROS 2 messages would be routed to the _same_ uORB topic instance (because ROS 2 does not have the concept of [multiple topic instances](../middleware/uorb.md#multi-instance)), and it would not be possible for PX4 subscribers to differentiate between streams from ROS 2 or PX4 publishers. Add a topic to the `subscriptions` section to: -- Create a unidirectional route going from the ROS2 topic to the _default_ instance (instance 0) of the associated uORB topic. - For example, it creates a ROS2 subscriber of `/fmu/in/vehicle_odometry` and a uORB publisher of `vehicle_odometry`. -- If other (internal) PX4 modules are already publishing on the same uORB topic instance as the ROS2 publisher, the instance's subscribers will receive all streams of messages. - The uORB subscriber will not be able to determine if an incoming message was published by PX4 or by ROS2. -- This is the desired behavior when the ROS2 publisher is expected to be the sole publisher on the topic instance (for example, replacing an internal publisher to the topic during offboard control), or when the source of multiple publishing streams does not matter. +- Create a unidirectional route going from the ROS 2 topic to the _default_ instance (instance 0) of the associated uORB topic. + For example, it creates a ROS 2 subscriber of `/fmu/in/vehicle_odometry` and a uORB publisher of `vehicle_odometry`. +- If other (internal) PX4 modules are already publishing on the same uORB topic instance as the ROS 2 publisher, the instance's subscribers will receive all streams of messages. + The uORB subscriber will not be able to determine if an incoming message was published by PX4 or by ROS 2. +- This is the desired behavior when the ROS 2 publisher is expected to be the sole publisher on the topic instance (for example, replacing an internal publisher to the topic during offboard control), or when the source of multiple publishing streams does not matter. Add a topic to the `subscriptions_multi` section to: -- Create a unidirectional route going from the ROS2 topic to a _new_ instance of the associated uORB topic. - For example, if `vehicle_odometry` has already `2` instances, it creates a ROS2 subscriber of `/fmu/in/vehicle_odometry` and a uORB publisher on instance `3` of `vehicle_odometry`. +- Create a unidirectional route going from the ROS 2 topic to a _new_ instance of the associated uORB topic. + For example, if `vehicle_odometry` has already `2` instances, it creates a ROS 2 subscriber of `/fmu/in/vehicle_odometry` and a uORB publisher on instance `3` of `vehicle_odometry`. - This ensures that no other internal PX4 module will publish on the same instance used by uXRCE-DDS. The subscribers will be able to subscribe to the desired instance and distinguish between publishers. -- Note, however, that this guarantees separation between PX4 and ROS2 publishers, not among multiple ROS2 publishers. - In that scenario, their messages will still be routed to the same instance. +- Without `route_field`, this guarantees separation between PX4 and ROS 2 publishers, but not among multiple ROS 2 publishers. In that scenario, their messages will still be routed to the same instance. - This is the desired behavior, for example, when you want PX4 to log the readings of two equal sensors; they will both publish on the same topic, but one will use instance 0 and the other will use instance 1. + Optionally, add `route_field` and `max_instances` to demultiplex a single ROS 2 topic into multiple uORB instances based on a message field value: + +- Each unique value of `route_field` is dynamically assigned to a separate uORB instance on first arrival, up to `max_instances`. + For example, a single `/fmu/in/aux_global_position` ROS 2 topic can be demultiplexed to up to 4 separate uORB instances of `aux_global_position`, with each unique `id` value mapped to its own instance. +- This allows multiple ROS 2 publishers to share a single DDS topic while PX4 subscribers can distinguish between them by subscribing to different uORB instances. +- `route_field` must be a field present in the message definition. `max_instances` is required when `route_field` is set and limits how many distinct sources can be demultiplexed simultaneously. + +:::warning +The `subscriptions_multi` feature with `route_field` is currently only implemented in the uXRCE-DDS client. +The Zenoh bridge module does not yet support demux routing — topics listed under `subscriptions_multi` in `dds_topics.yaml` will be ignored by the Zenoh bridge. +::: + You can arbitrarily change the configuration. For example, you could use different default namespaces or use a custom package to store the message definitions. @@ -597,7 +616,7 @@ For a list of services, details and examples see the [service documentation](../ ## Fast-RTPS to uXRCE-DDS Migration Guidelines These guidelines explain how to migrate from using PX4 v1.13 [Fast-RTPS](../middleware/micrortps.md) middleware to PX4 v1.14 `uXRCE-DDS` middleware. -These are useful if you have [ROS 2 applications written for PX4 v1.13](https://docs.px4.io/v1.13/en/ros/ros2_comm.html), or you have used Fast-RTPS to interface your applications to PX4 [directly](https://docs.px4.io/v1.13/en/middleware/micrortps.html#agent-in-an-offboard-fast-dds-interface-ros-independent). +These are useful if you have [ROS 2 applications written for PX4 v1.13](https://docs.px4.io/v1.13/en/ros/ros2_comm), or you have used Fast-RTPS to interface your applications to PX4 [directly](https://docs.px4.io/v1.13/en/middleware/micrortps#agent-in-an-offboard-fast-dds-interface-ros-independent). :::info This section contains migration-specific information. @@ -606,7 +625,7 @@ You should also read the rest of this page to properly understand uXRCE-DDS. #### Dependencies do not need to be removed -uXRCE-DDS does not need the dependencies that were required for Fast-RTPS, such as those installed by following the topic [Fast DDS Installation](https://docs.px4.io/v1.13/en/dev_setup/fast-dds-installation.html). +uXRCE-DDS does not need the dependencies that were required for Fast-RTPS, such as those installed by following the topic [Fast DDS Installation](https://docs.px4.io/v1.13/en/dev_setup/fast-dds-installation). You can keep them if you want, without affecting your uXRCE-DDS applications. If you do choose to remove the dependencies, take care not to remove anything that is used by applications (for example, Java). @@ -659,7 +678,7 @@ There are many ways to install it on your PC / companion computer - for more inf #### Application-Specific Changes -If you where not using ROS 2 alongside the agent ([Fast DDS Interface ROS-Independent](https://docs.px4.io/v1.13/en/middleware/micrortps.html#agent-in-an-offboard-fast-dds-interface-ros-independent)), then you need to migrate to [eProsima Fast DDS](https://fast-dds.docs.eprosima.com/en/latest/index.html). +If you where not using ROS 2 alongside the agent ([Fast DDS Interface ROS-Independent](https://docs.px4.io/v1.13/en/middleware/micrortps#agent-in-an-offboard-fast-dds-interface-ros-independent)), then you need to migrate to [eProsima Fast DDS](https://fast-dds.docs.eprosima.com/en/latest/index.html). ROS 2 applications still need to compile alongside the PX4 messages, which you do by adding the [px4_msgs](https://github.com/PX4/px4_msgs) package to your workspace. You can remove the [px4_ros_com](https://github.com/PX4/px4_ros_com) package as it is no longer needed, other than for example code. diff --git a/docs/zh/middleware/zenoh.md b/docs/zh/middleware/zenoh.md index f3d90420d6..0c9641924a 100644 --- a/docs/zh/middleware/zenoh.md +++ b/docs/zh/middleware/zenoh.md @@ -1,6 +1,6 @@ # Zenoh (PX4 ROS 2 rmw_zenoh) - + :::warning Experimental @@ -49,6 +49,11 @@ ros2 run rmw_zenoh_cpp rmw_zenohd For more information about the Zenoh Router see the [rmw_zenoh](https://github.com/ros2/rmw_zenoh?tab=readme-ov-file#start-the-zenoh-router) documentation. +:::note +From ROS 2 Jazzy onward, `rmw_zenoh` topic key expressions include the message type hash (RIHS01, as defined in REP-2016). This prevents interoperability with ROS 2 Humble and earlier. +For more information about key expressions, refer to the [rmw_zenoh design documentation](https://github.com/ros2/rmw_zenoh/blob/jazzy/docs/design.md#topic-and-service-name-mapping-to-zenoh-key-expressions). +::: + ## PX4 Zenoh-Pico Node Setup ### PX4 Firmware @@ -79,6 +84,12 @@ You can check if Zenoh is present at runtime by using QGroundControl to [find th If present, the module is installed. ::: +:::warning +Interoperability with ROS 2 Humble and earlier requires setting `CONFIG_ZENOH_KEY_TYPE_HASH=n` to disable the +inclusion of the message type hash (RIHS01, as defined in REP-2016) in the Zenoh key expression. +Note that this will break compatibility with ROS 2 Jazzy and later. +::: + ### Enable Zenoh on PX4 Startup Set the [ZENOH_ENABLE](../advanced_config/parameter_reference.md#ZENOH_ENABLE) parameter to `1` to enable Zenoh on PX4 startup. @@ -94,7 +105,7 @@ If you're using a different IP for the Zenoh daemon, run the following command ( zenoh config net client tcp/10.41.10.1:7447#iface=eth0 ``` -Note that for the simulation target with Zeroh (`px4_sitl_zenoh`) you won't need to make any changes because the default IP address of the Zenoh daemon is set to `localhost`. +Note that for the simulation target with Zenoh (`px4_sitl_zenoh`) you won't need to make any changes because the default IP address of the Zenoh daemon is set to `localhost`. :::warning Any changes to the network configuration require a PX4 system reboot to take effect. @@ -199,3 +210,7 @@ Subscription count: 0 The [PX4 ROS 2 Interface Library](../ros2/px4_ros2_interface_lib.md) works out of the box with Zenoh as a transport backend. This means you can publish and subscribe to PX4 topics over Zenoh without changing your ROS 2 nodes or dealing with DDS configuration. For setup details and supported message types, refer to the [PX4 ROS 2 Interface Library](../ros2/px4_ros2_interface_lib.md). + +:::info +The PX4 ROS 2 Interface Library is not compatible with ROS 2 Humble and earlier, as it requires the message type hash (RIHS01, as defined in REP-2016) to be included in the Zenoh key expression. +::: diff --git a/docs/zh/modules/hello_sky.md b/docs/zh/modules/hello_sky.md index 87e4ebffa4..48007499ea 100644 --- a/docs/zh/modules/hello_sky.md +++ b/docs/zh/modules/hello_sky.md @@ -12,13 +12,15 @@ These are covered in [Application/Module Template](../modules/module_template.md 以下内容是您需要提前准备的: -- [PX4 SITL Simulator](../simulation/index.md) _or_ a [PX4-compatible flight controller](../flight_controller/index.md). +- [Gazebo Simulator](../sim_gazebo_gz/index.md) (or another [PX4 SITL Simulator](../simulation/index.md)) _or_ a [PX4-compatible flight controller](../flight_controller/index.md). - [PX4 Development Toolchain](../dev_setup/dev_env.md) for the desired target. - [Download the PX4 Source Code](../dev_setup/building_px4.md#download-the-px4-source-code) from Github The source code [PX4-Autopilot/src/examples/px4_simple_app](https://github.com/PX4/PX4-Autopilot/tree/main/src/examples/px4_simple_app) directory contains a completed version of this tutorial that you can review if you get stuck. -- Rename (or delete) the **px4_simple_app** directory. +:::tip +Rename (or delete) the **px4_simple_app** directory. +::: ## 最小的应用程序 @@ -34,7 +36,7 @@ This consists of a single _C_ file and a _cmake_ definition (which tells the too ```c /**************************************************************************** * - * Copyright (c) 2012-2022 PX4 Development Team. All rights reserved. + * Copyright (c) 2012-2026 PX4 Development Team. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -67,7 +69,7 @@ This consists of a single _C_ file and a _cmake_ definition (which tells the too ``` - 将下面的代码复制到头部注释的下方, - 该注释应出现在所有贡献的文件中! + Similar code should be present in all contributed files! ```c /** @@ -150,6 +152,9 @@ This consists of a single _C_ file and a _cmake_ definition (which tells the too ) ``` + Note that in your own modules you'd use the current copyright year! + We're using `2015` here to match the example. + The `px4_add_module()` method builds a static library from a module description. - The `MODULE` block is the Firmware-unique name of the module (by convention the module name is prefixed by parent directories back to `src`). @@ -170,7 +175,7 @@ This consists of a single _C_ file and a _cmake_ definition (which tells the too 4. Create and open a new _Kconfig_ definition file named **Kconfig** and define your symbol for naming (see [Kconfig naming convention](../hardware/porting_guide_config.md#px4-kconfig-symbol-naming-convention)). 复制下面的文本: - ```text + ```txt menuconfig EXAMPLES_PX4_SIMPLE_APP bool "px4_simple_app" default n @@ -185,27 +190,34 @@ This consists of a single _C_ file and a _cmake_ definition (which tells the too Applications are added to the build/firmware in the appropriate board-level _px4board_ file for your target: - PX4 SITL (Simulator): [PX4-Autopilot/boards/px4/sitl/default.px4board](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/sitl/default.px4board) -- Pixhawk v1/2: [PX4-Autopilot/boards/px4/fmu-v2/default.px4board](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/fmu-v2/default.px4board) -- Pixracer (px4/fmu-v4): [PX4-Autopilot/boards/px4/fmu-v4/default.px4board](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/fmu-v4/default.px4board) +- Pixhawk 6X (px4/fmu-v6x): [PX4-Autopilot/boards/px4/fmu-v6x/default.px4board](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/fmu-v6x/default.px4board) - _px4board_ files for other boards can be found in [PX4-Autopilot/boards/](https://github.com/PX4/PX4-Autopilot/tree/main/boards) -To enable the compilation of the application into the firmware add the corresponding Kconfig key `CONFIG_EXAMPLES_PX4_SIMPLE_APP=y` in the _px4board_ file or run [boardconfig](../hardware/porting_guide_config.md#px4-menuconfig-setup) `make px4_fmu-v4_default boardconfig`: +To enable the compilation of the application into the firmware add the corresponding Kconfig key `CONFIG_EXAMPLES_PX4_SIMPLE_APP=y` in the _px4board_ file or run [boardconfig](../hardware/porting_guide_config.md#px4-menuconfig-setup). +For example, to edit the board config for FMUv6x you would do: + +```sh +make fmu-v6x_default boardconfig ``` + +And then enable the app in the _boardconfig_ UI as shown: + +```txt examples ---> [x] PX4 Simple app ---- ``` :::info -The line will already be present for most files, because the examples are included in firmware by default. +Examples are opt-in and not included in firmware by default (although they are in SITL). +You must explicitly enable them as shown above. ::: 使用特定板的命令构建示例: -- jMAVSim Simulator: `make px4_sitl_default jmavsim` -- Pixhawk v1/2: `make px4_fmu-v2_default` (or just `make px4_fmu-v2`) -- Pixhawk v3: `make px4_fmu-v4_default` -- Other boards: [Building the Code](../dev_setup/building_px4.md#building-for-nuttx) +- Gazebo Simulator: `make px4_sitl gz_x500` +- Pixhawk 6X: `make px4_fmu-v6x_default` +- Other boards: [Building the Code](../dev_setup/building_px4.md) ## 测试应用(硬件) @@ -213,8 +225,7 @@ The line will already be present for most files, because the examples are includ 启用上传器,然后重启飞控板: -- Pixhawk v1/2: `make px4_fmu-v2_default upload` -- Pixhawk v3: `make px4_fmu-v4_default upload` +- Pixhawk 6X: `make px4_fmu-v6x_default upload` 在您重启飞控板之前,它应该打印一些编译消息,并在最后打印: @@ -299,14 +310,14 @@ The benefits of the PX4 hardware abstraction comes into play here! 无需以任何方式与传感器驱动程序交互,如果板或传感器更新,也无需更新您的应用程序。 ::: -Individual message channels between applications are called [topics](../middleware/uorb.md). For this tutorial, we are interested in the [SensorCombined](https://github.com/PX4/PX4-Autopilot/blob/main/msg/SensorCombined.msg) topic, which holds the synchronized sensor data of the complete system. +Individual message channels between applications are called [topics](../middleware/uorb.md). For this tutorial, we are interested in the [VehicleAcceleration](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/VehicleAcceleration.msg) topic, which holds the filtered vehicle acceleration data. 订阅主题很简单: ```cpp -#include +#include .. -int sensor_sub_fd = orb_subscribe(ORB_ID(sensor_combined)); +int sensor_sub_fd = orb_subscribe(ORB_ID(vehicle_acceleration)); ``` The `sensor_sub_fd` is a topic handle and can be used to very efficiently perform a blocking wait for new data. @@ -317,9 +328,9 @@ Adding `poll()` to the subscription looks like (_pseudocode, look for the full i ```cpp #include -#include +#include .. -int sensor_sub_fd = orb_subscribe(ORB_ID(sensor_combined)); +int sensor_sub_fd = orb_subscribe(ORB_ID(vehicle_acceleration)); /* one could wait for multiple topics with this technique, just using one here */ px4_pollfd_struct_t fds[] = { @@ -327,26 +338,26 @@ px4_pollfd_struct_t fds[] = { }; while (true) { - /* wait for sensor update of 1 file descriptor for 1000 ms (1 second) */ - int poll_ret = px4_poll(fds, 1, 1000); - .. - if (fds[0].revents & POLLIN) { - /* obtained data for the first file descriptor */ - struct sensor_combined_s raw; - /* copy sensors raw data into local buffer */ - orb_copy(ORB_ID(sensor_combined), sensor_sub_fd, &raw); - PX4_INFO("Accelerometer:\t%8.4f\t%8.4f\t%8.4f", - (double)raw.accelerometer_m_s2[0], - (double)raw.accelerometer_m_s2[1], - (double)raw.accelerometer_m_s2[2]); - } +/* wait for sensor update of 1 file descriptor for 1000 ms (1 second) */ +int poll_ret = px4_poll(fds, 1, 1000); +.. +if (fds[0].revents & POLLIN) { + /* obtained data for the first file descriptor */ + struct vehicle_acceleration_s accel; + /* copy sensors raw data into local buffer */ + orb_copy(ORB_ID(vehicle_acceleration), sensor_sub_fd, &accel); + PX4_INFO("Accelerometer:\t%8.4f\t%8.4f\t%8.4f", + (double)accel.xyz[0], + (double)accel.xyz[1], + (double)accel.xyz[2]); +} } ``` 再次编译应用程序可以输入: ```sh -make +make px4_sitl_default ``` ### 测试 uORB 消息订阅 @@ -405,7 +416,7 @@ The [complete example code](https://github.com/PX4/PX4-Autopilot/blob/main/src/e ```c /**************************************************************************** * - * Copyright (c) 2012-2019 PX4 Development Team. All rights reserved. + * Copyright (c) 2012-2026 PX4 Development Team. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -454,7 +465,7 @@ The [complete example code](https://github.com/PX4/PX4-Autopilot/blob/main/src/e #include #include -#include +#include #include __EXPORT int px4_simple_app_main(int argc, char *argv[]); @@ -463,8 +474,8 @@ int px4_simple_app_main(int argc, char *argv[]) { PX4_INFO("Hello Sky!"); - /* subscribe to sensor_combined topic */ - int sensor_sub_fd = orb_subscribe(ORB_ID(sensor_combined)); + /* subscribe to vehicle_acceleration topic */ + int sensor_sub_fd = orb_subscribe(ORB_ID(vehicle_acceleration)); /* limit the update rate to 5 Hz */ orb_set_interval(sensor_sub_fd, 200); @@ -505,20 +516,20 @@ int px4_simple_app_main(int argc, char *argv[]) if (fds[0].revents & POLLIN) { /* obtained data for the first file descriptor */ - struct sensor_combined_s raw; + struct vehicle_acceleration_s accel; /* copy sensors raw data into local buffer */ - orb_copy(ORB_ID(sensor_combined), sensor_sub_fd, &raw); + orb_copy(ORB_ID(vehicle_acceleration), sensor_sub_fd, &accel); PX4_INFO("Accelerometer:\t%8.4f\t%8.4f\t%8.4f", - (double)raw.accelerometer_m_s2[0], - (double)raw.accelerometer_m_s2[1], - (double)raw.accelerometer_m_s2[2]); + (double)accel.xyz[0], + (double)accel.xyz[1], + (double)accel.xyz[2]); /* set att and publish this information for other apps the following does not have any meaning, it's just an example */ - att.q[0] = raw.accelerometer_m_s2[0]; - att.q[1] = raw.accelerometer_m_s2[1]; - att.q[2] = raw.accelerometer_m_s2[2]; + att.q[0] = accel.xyz[0]; + att.q[1] = accel.xyz[1]; + att.q[2] = accel.xyz[2]; orb_publish(ORB_ID(vehicle_attitude), att_pub, &att); } @@ -530,7 +541,6 @@ int px4_simple_app_main(int argc, char *argv[]) } PX4_INFO("exiting"); - return 0; } ``` diff --git a/docs/zh/modules/module_template.md b/docs/zh/modules/module_template.md index fc69875c01..cf840f6cf8 100644 --- a/docs/zh/modules/module_template.md +++ b/docs/zh/modules/module_template.md @@ -22,7 +22,8 @@ PX4-Autopilot contains a template for writing a new application (module) that ru 总结: 1. Specify the dependency on the work queue library in the cmake definition file ([CMakeLists.txt](https://github.com/PX4/PX4-Autopilot/blob/main/src/examples/work_item/CMakeLists.txt)): - ``` + + ```txt ... DEPENDS px4_work_queue @@ -48,9 +49,11 @@ PX4-Autopilot contains a template for writing a new application (module) that ru 4. Implement the `ScheduledWorkItem::Run()` method to perform "work". -5. Implement the `task_spawn` method, specifying that the task is a work queue (using the `task_id_is_work_queue` id. +5. Implement the `task_spawn` method, specifying that the task is a work queue (using the `task_id_is_work_queue` id). -6. Schedule the work queue task using one of the scheduling methods (in the example we use `ScheduleOnInterval` from within the `init` method). +6. Schedule the work queue task using one of the scheduling methods. + In the example, `init()` calls `registerCallback()` on a uORB subscription so that `Run()` is triggered whenever a new `sensor_accel` message is published. + `ScheduleOnInterval` is an alternative for fixed-rate scheduling. ## 任务 @@ -66,6 +69,6 @@ PX4/PX4-Autopilot contains a template for writing a new application (module) tha [startup script](../concept/system_startup.md). - 命令行参数解析。 - Documentation: the `PRINT_MODULE_*` methods serve two purposes (the API is - documented [in the source code](https://github.com/PX4/PX4-Autopilot/blob/v1.8.0/src/platforms/px4_module.h#L381)): + documented [in the source code](https://github.com/PX4/PX4-Autopilot/blob/v1.17/platforms/common/include/px4_platform_common/module.h)): - They are used to print the command-line usage when entering `module help` on the console. - They are automatically extracted via script to generate the [Modules & Commands Reference](../modules/modules_main.md) page. diff --git a/docs/zh/modules/modules_command.md b/docs/zh/modules/modules_command.md index 8cb347995d..a58a5faa06 100644 --- a/docs/zh/modules/modules_command.md +++ b/docs/zh/modules/modules_command.md @@ -342,6 +342,19 @@ mft_cfg [arguments...] , id == revision for ) ``` +## mklittlefs + +Source: [systemcmds/mklittlefs](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/mklittlefs) + +Format a device with the littlefs filesystem. + +### Usage {#mklittlefs_usage} + +``` +mklittlefs [arguments...] + Device and mount point (e.g. /dev/mtd0 /fs/flash) +``` + ## mtd Source: [systemcmds/mtd](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/mtd) diff --git a/docs/zh/modules/modules_driver.md b/docs/zh/modules/modules_driver.md index 336383a42c..365906ad31 100644 --- a/docs/zh/modules/modules_driver.md +++ b/docs/zh/modules/modules_driver.md @@ -191,28 +191,13 @@ Source: [drivers/dshot](https://github.com/PX4/PX4-Autopilot/tree/main/src/drive ### 描述 -This is the DShot output driver. It is similar to the fmu driver, and can be used as drop-in replacement +This is the DShot output driver. It can be used as drop-in replacement to use DShot as ESC communication protocol instead of PWM. -On startup, the module tries to occupy all available pins for DShot output. -It skips all pins already in use (e.g. by a camera trigger module). - It supports: - DShot150, DShot300, DShot600 - telemetry via separate UART and publishing as esc_status message -- sending DShot commands via CLI - -### 示例 - -Permanently reverse motor 1: - -``` -dshot reverse -m 1 -dshot save -m 1 -``` - -After saving, the reversed direction will be regarded as the normal one. So to reverse again repeat the same commands. ### Usage {#dshot_usage} @@ -226,36 +211,6 @@ dshot [arguments...] values: [-x] Swap RX/TX pins - reverse Reverse motor direction - [-m ] Motor index (1-based, default=all) - - normal Normal motor direction - [-m ] Motor index (1-based, default=all) - - save Save current settings - [-m ] Motor index (1-based, default=all) - - 3d_on Enable 3D mode - [-m ] Motor index (1-based, default=all) - - 3d_off Disable 3D mode - [-m ] Motor index (1-based, default=all) - - beep1 Send Beep pattern 1 - [-m ] Motor index (1-based, default=all) - - beep2 Send Beep pattern 2 - [-m ] Motor index (1-based, default=all) - - beep3 Send Beep pattern 3 - [-m ] Motor index (1-based, default=all) - - beep4 Send Beep pattern 4 - [-m ] Motor index (1-based, default=all) - - beep5 Send Beep pattern 5 - [-m ] Motor index (1-based, default=all) - stop status print status info @@ -363,7 +318,7 @@ Source: [modules/gimbal](https://github.com/PX4/PX4-Autopilot/tree/main/src/modu Mount/gimbal Gimbal control driver. It maps several different input methods (eg. RC or MAVLink) to a configured output (eg. AUX channels or MAVLink). -Documentation how to use it is on the [gimbal_control](https://docs.px4.io/main/en/advanced/gimbal_control.html) page. +Documentation how to use it is on the [gimbal_control](../advanced/gimbal_control.md) page. ### 示例 @@ -926,7 +881,7 @@ that can be accepted by most ESCs and servos. It is typically started with: ``` -pca9685_pwm_out start -a 0x40 -b 1 +pca9685_pwm_out start -X -a 0x40 -b 1 ``` ### Usage {#pca9685_pwm_out_usage} @@ -1109,7 +1064,7 @@ px4io [arguments...] ## rgbled -Source: [drivers/lights/rgbled](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/lights/rgbled) +Source: [drivers/lights/rgbled_ncp5623c](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/lights/rgbled_ncp5623c) ### Usage {#rgbled_usage} @@ -1124,7 +1079,9 @@ rgbled [arguments...] [-f ] bus frequency in kHz [-q] quiet startup (no message if no device found) [-a ] I2C address - default: 85 + default: 57 + [-o ] RGB PWM Assignment + default: 123 stop diff --git a/docs/zh/modules/modules_driver_distance_sensor.md b/docs/zh/modules/modules_driver_distance_sensor.md index f330f01947..4352c05272 100644 --- a/docs/zh/modules/modules_driver_distance_sensor.md +++ b/docs/zh/modules/modules_driver_distance_sensor.md @@ -98,13 +98,56 @@ leddar_one [arguments...] stop Stop driver ``` +## lightware_grf_serial + +Source: [drivers/distance_sensor/lightware_grf_serial](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/distance_sensor/lightware_grf_serial) + +### 描述 + +Serial bus driver for the Lightware GRF Laser rangefinder. + +### 配置 + +https://docs.px4.io/main/en/sensor/grf_lidar + +### 参数 + +https://docs.px4.io/main/en/advanced_config/parameter_reference#GRF_SENS_MODEL +https://docs.px4.io/main/en/advanced_config/parameter_reference#GRF_RATE_CFG +https://docs.px4.io/main/en/advanced_config/parameter_reference#SENS_EN_GRF_CFG + +### 示例 + +Attempt to start driver on a specified serial device. + +``` +lightware_grf_serial start -d /dev/ttyS1 +``` + +Stop driver + +``` +lightware_grf_serial stop +``` + +### Usage {#lightware_grf_serial_usage} + +``` +lightware_grf_serial [arguments...] + Commands: + start Start driver + -d Serial device + + stop Stop driver +``` + ## lightware_laser_i2c Source: [drivers/distance_sensor/lightware_laser_i2c](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/distance_sensor/lightware_laser_i2c) ### 描述 -I2C bus driver for Lightware SFxx series LIDAR rangefinders: SF10/a, SF10/b, SF10/c, SF11/c, SF/LW20, SF30/d. +I2C bus driver for Lightware LIDAR rangefinders: SF10/a, SF10/b, SF10/c, SF11/c, SF/LW20, SF/LW30/d, GRF250, GRF500. Setup/usage information: https://docs.px4.io/main/en/sensor/sfxx_lidar.html @@ -122,8 +165,6 @@ lightware_laser_i2c [arguments...] [-q] quiet startup (no message if no device found) [-a ] I2C address default: 102 - [-R ] Sensor rotation - downward facing by default - default: 25 stop diff --git a/docs/zh/modules/modules_driver_imu.md b/docs/zh/modules/modules_driver_imu.md index 67f9a2713b..5b3563564a 100644 --- a/docs/zh/modules/modules_driver_imu.md +++ b/docs/zh/modules/modules_driver_imu.md @@ -130,6 +130,32 @@ adis16507 [arguments...] status print status info ``` +## adis16607 + +Source: [drivers/imu/analog_devices/adis16607](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/analog_devices/adis16607) + +### Usage {#adis16607_usage} + +``` +adis16607 [arguments...] + Commands: + start + [-s] Internal SPI bus(es) + [-S] External SPI bus(es) + [-b ] board-specific bus (default=all) (external SPI: n-th bus + (default=1)) + [-c ] chip-select pin (for internal SPI) or index (for external SPI) + [-m ] SPI mode + [-f ] bus frequency in kHz + [-q] quiet startup (no message if no device found) + [-R ] Rotation + default: 0 + + stop + + status print status info +``` + ## bmi055 Source: [drivers/imu/bosch/bmi055](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/bosch/bmi055) @@ -764,6 +790,32 @@ lsm303d [arguments...] status print status info ``` +## lsm6dsv + +Source: [drivers/imu/st/lsm6dsv](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/st/lsm6dsv) + +### Usage {#lsm6dsv_usage} + +``` +lsm6dsv [arguments...] + Commands: + start + [-s] Internal SPI bus(es) + [-S] External SPI bus(es) + [-b ] board-specific bus (default=all) (external SPI: n-th bus + (default=1)) + [-c ] chip-select pin (for internal SPI) or index (for external SPI) + [-m ] SPI mode + [-f ] bus frequency in kHz + [-q] quiet startup (no message if no device found) + [-R ] Rotation + default: 0 + + stop + + status print status info +``` + ## lsm9ds1 Source: [drivers/imu/st/lsm9ds1](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/st/lsm9ds1) diff --git a/docs/zh/modules/modules_driver_ins.md b/docs/zh/modules/modules_driver_ins.md index 6d023b4d31..8e7bb95f5c 100644 --- a/docs/zh/modules/modules_driver_ins.md +++ b/docs/zh/modules/modules_driver_ins.md @@ -9,7 +9,7 @@ Source: [drivers/ins/microstrain](https://github.com/PX4/PX4-Autopilot/tree/main MicroStrain by HBK Inertial Sensor Driver. Currently supports the following sensors: --[CV7-AR](https://www.hbkworld.com/en/products/transducers/inertial-sensors/vertical-reference-units--vru-/3dm-cv7-ar) -[CV7-AHRS](https://www.hbkworld.com/en/products/transducers/inertial-sensors/attitude-and-heading-reference-systems--ahrs-/3dm-cv7-ahrs) -[CV7-INS](https://www.hbkworld.com/en/products/transducers/inertial-sensors/inertial-navigation-systems--ins-/3dm-cv7-ins) -[CV7-GNSS/INS](https://www.hbkworld.com/en/products/transducers/inertial-sensors/inertial-navigation-systems--ins-/3dm-cv7-gnss-ins) +-[CV7-AR](https://www.hbkworld.com/en/products/transducers/inertial-sensors/vertical-reference-units--vru-/3dm-cv7-ar) -[CV7-AHRS](https://www.hbkworld.com/en/products/transducers/inertial-sensors/attitude-and-heading-reference-systems--ahrs-/3dm-cv7-ahrs) -[CV7-INS](https://www.hbkworld.com/en/products/transducers/inertial-sensors/navigation/3dm-cv7-ins) -[CV7-GNSS/INS](https://www.hbkworld.com/en/products/transducers/inertial-sensors/navigation/3dm-cv7-gnss-ins) This driver is not included in the firmware by default. Include the module in firmware by setting the diff --git a/docs/zh/modules/modules_estimator.md b/docs/zh/modules/modules_estimator.md index 10f1bbac29..16012c9a02 100644 --- a/docs/zh/modules/modules_estimator.md +++ b/docs/zh/modules/modules_estimator.md @@ -54,7 +54,7 @@ Source: [modules/ekf2](https://github.com/PX4/PX4-Autopilot/tree/main/src/module 基于扩展卡尔曼滤波器的姿态和位置估计器。 该模块同时应用于多旋翼和固定翼飞机。 -The documentation can be found on the [ECL/EKF Overview & Tuning](https://docs.px4.io/main/en/advanced_config/tuning_the_ecl_ekf.html) page. +The documentation can be found on the [ECL/EKF Overview & Tuning](../advanced_config/tuning_the_ecl_ekf.md) page. ekf2 can be started in replay mode (`-r`): in this mode, it does not access the system time, but only uses the timestamps from the sensor topics. diff --git a/docs/zh/modules/modules_system.md b/docs/zh/modules/modules_system.md index b23833af58..b93e377acc 100644 --- a/docs/zh/modules/modules_system.md +++ b/docs/zh/modules/modules_system.md @@ -321,7 +321,7 @@ Source: [drivers/heater](https://github.com/PX4/PX4-Autopilot/tree/main/src/driv ### 描述 -Background process running periodically on the LP work queue to regulate IMU temperature at a setpoint. +Background process running periodically on the INS{i} queue to regulate IMU temperature at a setpoint. This task can be started at boot from the startup scripts by setting SENS_EN_THERMAL or via CLI. @@ -732,7 +732,7 @@ The module is typically used together with uORB publisher rules, to specify whic The replay module will just publish all messages that are found in the log. It also applies the parameters from the log. -The replay procedure is documented on the [System-wide Replay](https://docs.px4.io/main/en/debug/system_wide_replay.html) +The replay procedure is documented on the [System-wide Replay](../debug/system_wide_replay.md) page. ### Usage {#replay_usage} @@ -921,6 +921,30 @@ system_power_simulation [arguments...] status print status info ``` +## task_watchdog + +Source: [modules/task_watchdog](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/task_watchdog) + +### 描述 + +Detects when a higher-priority task starves the system by running too long. +When starvation is detected, dumps the offending task's registers and stack, +and saves a cpuload snapshot. + +### Usage {#task_watchdog_usage} + +``` +task_watchdog [arguments...] + Commands: + start + + trigger Manually trigger the watchdog + + stop + + status print status info +``` + ## tattu_can Source: [drivers/tattu_can](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/tattu_can) diff --git a/docs/zh/msg_docs/ActionRequest.md b/docs/zh/msg_docs/ActionRequest.md index e3ccbd5578..8d0034e610 100644 --- a/docs/zh/msg_docs/ActionRequest.md +++ b/docs/zh/msg_docs/ActionRequest.md @@ -25,26 +25,26 @@ Request are published by `manual_control` and subscribed by the `commander` and ### ACTION {#ACTION} -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | - | ---------------------------------------------------------------------------------------- | -| ACTION_DISARM | `uint8` | 0 | Disarm vehicle | -| ACTION_ARM | `uint8` | 1 | Arm vehicle | -| ACTION_TOGGLE_ARMING | `uint8` | 2 | Toggle arming | -| ACTION_UNKILL | `uint8` | 3 | Revert a kill action | -| ACTION_KILL | `uint8` | 4 | Kill vehicle (instantly stop the motors) | -| ACTION_SWITCH_MODE | `uint8` | 5 | Switch mode. The target mode is set in the `mode` field. | -| ACTION_VTOL_TRANSITION_TO_MULTICOPTER | `uint8` | 6 | Transition to hover flight | -| ACTION_VTOL_TRANSITION_TO_FIXEDWING | `uint8` | 7 | Transition to fast forward flight | -| ACTION_TERMINATION | `uint8` | 8 | Irreversibly output failsafe values on all outputs, trigger parachute | +| 参数名 | 类型 | 值 | 描述 | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | - | ---------------------------------------------------------------------------------------- | +| ACTION_DISARM | `uint8` | 0 | Disarm vehicle | +| ACTION_ARM | `uint8` | 1 | Arm vehicle | +| ACTION_TOGGLE_ARMING | `uint8` | 2 | Toggle arming | +| ACTION_UNKILL | `uint8` | 3 | Revert a kill action | +| ACTION_KILL | `uint8` | 4 | Kill vehicle (instantly stop the motors) | +| ACTION_SWITCH_MODE | `uint8` | 5 | Switch mode. The target mode is set in the `mode` field. | +| ACTION_VTOL_TRANSITION_TO_MULTICOPTER | `uint8` | 6 | Transition to hover flight | +| ACTION_VTOL_TRANSITION_TO_FIXEDWING | `uint8` | 7 | Transition to fast forward flight | +| ACTION_TERMINATION | `uint8` | 8 | Irreversibly output failsafe values on all outputs, trigger parachute | ### SOURCE {#SOURCE} -| 参数名 | 类型 | 值 | 描述 | -| ---------------------------------------------------------------------------------------------------------------------- | ------- | - | --------------------------------------------------------------- | -| SOURCE_STICK_GESTURE | `uint8` | 0 | Triggered by holding the sticks in a certain position | -| SOURCE_RC_SWITCH | `uint8` | 1 | Triggered by an RC switch moving into a certain position | -| SOURCE_RC_BUTTON | `uint8` | 2 | Triggered by a momentary button on the RC being pressed or held | -| SOURCE_RC_MODE_SLOT | `uint8` | 3 | Mode change through the RC mode selection mechanism | +| 参数名 | 类型 | 值 | 描述 | +| -------------------------------------------------------------------------------------------------------------------- | ------- | - | --------------------------------------------------------------- | +| SOURCE_STICK_GESTURE | `uint8` | 0 | Triggered by holding the sticks in a certain position | +| SOURCE_RC_SWITCH | `uint8` | 1 | Triggered by an RC switch moving into a certain position | +| SOURCE_RC_BUTTON | `uint8` | 2 | Triggered by a momentary button on the RC being pressed or held | +| SOURCE_RC_MODE_SLOT | `uint8` | 3 | Mode change through the RC mode selection mechanism | ## Source Message @@ -60,26 +60,26 @@ Click here to see original file # It allows mapping triggers from various external interfaces like RC channels or MAVLink to cause an action. # Request are published by `manual_control` and subscribed by the `commander` and `vtol_att_control` modules. -uint64 timestamp # [us] Time since system start +uint64 timestamp # [us] Time since system start -uint8 action # [@enum ACTION] Requested action -uint8 ACTION_DISARM = 0 # Disarm vehicle -uint8 ACTION_ARM = 1 # Arm vehicle -uint8 ACTION_TOGGLE_ARMING = 2 # Toggle arming -uint8 ACTION_UNKILL = 3 # Revert a kill action -uint8 ACTION_KILL = 4 # Kill vehicle (instantly stop the motors) -uint8 ACTION_SWITCH_MODE = 5 # Switch mode. The target mode is set in the `mode` field. -uint8 ACTION_VTOL_TRANSITION_TO_MULTICOPTER = 6 # Transition to hover flight -uint8 ACTION_VTOL_TRANSITION_TO_FIXEDWING = 7 # Transition to fast forward flight -uint8 ACTION_TERMINATION = 8 # Irreversibly output failsafe values on all outputs, trigger parachute +uint8 action # [@enum ACTION] Requested action +uint8 ACTION_DISARM = 0 # Disarm vehicle +uint8 ACTION_ARM = 1 # Arm vehicle +uint8 ACTION_TOGGLE_ARMING = 2 # Toggle arming +uint8 ACTION_UNKILL = 3 # Revert a kill action +uint8 ACTION_KILL = 4 # Kill vehicle (instantly stop the motors) +uint8 ACTION_SWITCH_MODE = 5 # Switch mode. The target mode is set in the `mode` field. +uint8 ACTION_VTOL_TRANSITION_TO_MULTICOPTER = 6 # Transition to hover flight +uint8 ACTION_VTOL_TRANSITION_TO_FIXEDWING = 7 # Transition to fast forward flight +uint8 ACTION_TERMINATION = 8 # Irreversibly output failsafe values on all outputs, trigger parachute -uint8 source # [@enum SOURCE] Request trigger type, such as a switch, button or gesture -uint8 SOURCE_STICK_GESTURE = 0 # Triggered by holding the sticks in a certain position -uint8 SOURCE_RC_SWITCH = 1 # Triggered by an RC switch moving into a certain position -uint8 SOURCE_RC_BUTTON = 2 # Triggered by a momentary button on the RC being pressed or held -uint8 SOURCE_RC_MODE_SLOT = 3 # Mode change through the RC mode selection mechanism +uint8 source # [@enum SOURCE] Request trigger type, such as a switch, button or gesture +uint8 SOURCE_STICK_GESTURE = 0 # Triggered by holding the sticks in a certain position +uint8 SOURCE_RC_SWITCH = 1 # Triggered by an RC switch moving into a certain position +uint8 SOURCE_RC_BUTTON = 2 # Triggered by a momentary button on the RC being pressed or held +uint8 SOURCE_RC_MODE_SLOT = 3 # Mode change through the RC mode selection mechanism -uint8 mode # Requested mode. Only applies when `action` is `ACTION_SWITCH_MODE`. Values for this field are defined by the `vehicle_status_s::NAVIGATION_STATE_*` enumeration. +uint8 mode # Requested mode. Only applies when `action` is `ACTION_SWITCH_MODE`. Values for this field are defined by the `vehicle_status_s::NAVIGATION_STATE_*` enumeration. ``` ::: diff --git a/docs/zh/msg_docs/ActuatorMotors.md b/docs/zh/msg_docs/ActuatorMotors.md index d7c6a1d14b..b10bcd4519 100644 --- a/docs/zh/msg_docs/ActuatorMotors.md +++ b/docs/zh/msg_docs/ActuatorMotors.md @@ -18,15 +18,15 @@ Published by the vehicle's allocation and consumed by the ESC protocol drivers e | timestamp | `uint64` | us | | Time since system start | | timestamp_sample | `uint64` | us | | Sampling timestamp of the data this control response is based on | | reversible_flags | `uint16` | | | Bitset indicating which motors are configured to be reversible | -| control | `float32[12]` | | [-1 : 1] | Normalized thrust. where 1 means maximum positive thrust, -1 maximum negative (if not supported by the output, <0 maps to NaN). NaN maps to disarmed (stop the motors) | +| control | `float32[12]` | | [-1 : 1] | Normalized thrust. Where 1 means maximum positive thrust, -1 maximum negative (if not supported by the output, <0 maps to NaN). NaN maps to disarmed (stop the motors) | ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ----------------------------------------------------------------------------------------------------------- | -------- | --- | -- | -| MESSAGE_VERSION | `uint32` | 0 | | -| ACTUATOR_FUNCTION_MOTOR1 | `uint8` | 101 | | -| NUM_CONTROLS | `uint8` | 12 | | +| 参数名 | 类型 | 值 | 描述 | +| --------------------------------------------------------------------------------------------------------- | -------- | --- | -------------------------------------------------------------------------------------- | +| MESSAGE_VERSION | `uint32` | 0 | | +| ACTUATOR_FUNCTION_MOTOR1 | `uint8` | 101 | output_functions.yaml Motor.start | +| NUM_CONTROLS | `uint8` | 12 | output_functions.yaml Motor.count | ## Source Message @@ -43,15 +43,15 @@ Click here to see original file uint32 MESSAGE_VERSION = 0 -uint64 timestamp # [us] Time since system start -uint64 timestamp_sample # [us] Sampling timestamp of the data this control response is based on +uint64 timestamp # [us] Time since system start +uint64 timestamp_sample # [us] Sampling timestamp of the data this control response is based on -uint16 reversible_flags # [-] Bitset indicating which motors are configured to be reversible +uint16 reversible_flags # [-] Bitset indicating which motors are configured to be reversible -uint8 ACTUATOR_FUNCTION_MOTOR1 = 101 # +uint8 ACTUATOR_FUNCTION_MOTOR1 = 101 # output_functions.yaml Motor.start -uint8 NUM_CONTROLS = 12 # -float32[12] control # [@range -1, 1] Normalized thrust. where 1 means maximum positive thrust, -1 maximum negative (if not supported by the output, <0 maps to NaN). NaN maps to disarmed (stop the motors) +uint8 NUM_CONTROLS = 12 # output_functions.yaml Motor.count +float32[12] control # [@range -1, 1] Normalized thrust. Where 1 means maximum positive thrust, -1 maximum negative (if not supported by the output, <0 maps to NaN). NaN maps to disarmed (stop the motors) ``` ::: diff --git a/docs/zh/msg_docs/ActuatorOutputs.md b/docs/zh/msg_docs/ActuatorOutputs.md index 20c3f325dd..028a15ff4f 100644 --- a/docs/zh/msg_docs/ActuatorOutputs.md +++ b/docs/zh/msg_docs/ActuatorOutputs.md @@ -16,10 +16,10 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------------------------------------------------------------------- | ------- | -- | ------------------- | -| NUM_ACTUATOR_OUTPUTS | `uint8` | 16 | | -| NUM_ACTUATOR_OUTPUT_GROUPS | `uint8` | 4 | for sanity checking | +| 参数名 | 类型 | 值 | 描述 | +| ---------------------------------------------------------------------------------------------------------------------------------- | ------- | -- | ------------------- | +| NUM_ACTUATOR_OUTPUTS | `uint8` | 16 | | +| NUM_ACTUATOR_OUTPUT_GROUPS | `uint8` | 4 | for sanity checking | ## Source Message diff --git a/docs/zh/msg_docs/ActuatorServos.md b/docs/zh/msg_docs/ActuatorServos.md index a02dfdfc2b..4dfc0b53c8 100644 --- a/docs/zh/msg_docs/ActuatorServos.md +++ b/docs/zh/msg_docs/ActuatorServos.md @@ -21,10 +21,10 @@ Published by the vehicle's allocation and consumed by the actuator output driver ## Constants -| 参数名 | 类型 | 值 | 描述 | -| -------------------------------------------------------------------- | -------- | - | -- | -| MESSAGE_VERSION | `uint32` | 0 | | -| NUM_CONTROLS | `uint8` | 8 | | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------ | -------- | - | -- | +| MESSAGE_VERSION | `uint32` | 0 | | +| NUM_CONTROLS | `uint8` | 8 | | ## Source Message @@ -41,11 +41,11 @@ Click here to see original file uint32 MESSAGE_VERSION = 0 -uint64 timestamp # [us] Time since system start -uint64 timestamp_sample # [us] Sampling timestamp of the data this control response is based on +uint64 timestamp # [us] Time since system start +uint64 timestamp_sample # [us] Sampling timestamp of the data this control response is based on -uint8 NUM_CONTROLS = 8 # -float32[8] control # [-] [@range -1, 1] Normalized output. 1 means maximum positive position. -1 maximum negative position (if not supported by the output, <0 maps to NaN). NaN maps to disarmed. +uint8 NUM_CONTROLS = 8 +float32[8] control # [-] [@range -1, 1] Normalized output. 1 means maximum positive position. -1 maximum negative position (if not supported by the output, <0 maps to NaN). NaN maps to disarmed. ``` ::: diff --git a/docs/zh/msg_docs/ActuatorServosTrim.md b/docs/zh/msg_docs/ActuatorServosTrim.md index 180237bc65..10cf0fffb9 100644 --- a/docs/zh/msg_docs/ActuatorServosTrim.md +++ b/docs/zh/msg_docs/ActuatorServosTrim.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Servo trims, added as offset to servo outputs. -**TOPICS:** actuator_servostrim +**TOPICS:** actuator_servos_trim ## Fields @@ -17,9 +17,9 @@ Servo trims, added as offset to servo outputs. ## Constants -| 参数名 | 类型 | 值 | 描述 | -| -------------------------------------------------------------- | ------- | - | -- | -| NUM_CONTROLS | `uint8` | 8 | | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------ | ------- | - | -- | +| NUM_CONTROLS | `uint8` | 8 | | ## Source Message diff --git a/docs/zh/msg_docs/ActuatorTest.md b/docs/zh/msg_docs/ActuatorTest.md index 8d966f2436..0a1f847510 100644 --- a/docs/zh/msg_docs/ActuatorTest.md +++ b/docs/zh/msg_docs/ActuatorTest.md @@ -18,15 +18,15 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------------------------------------- | ------- | --- | -------------------------------------------------------------------------------------------------------------------- | -| ACTION_RELEASE_CONTROL | `uint8` | 0 | exit test mode for the given function | -| ACTION_DO_CONTROL | `uint8` | 1 | enable actuator test mode | -| FUNCTION_MOTOR1 | `uint8` | 101 | | -| MAX_NUM_MOTORS | `uint8` | 12 | | -| FUNCTION_SERVO1 | `uint8` | 201 | | -| MAX_NUM_SERVOS | `uint8` | 8 | | -| ORB_QUEUE_LENGTH | `uint8` | 16 | > = MAX_NUM_MOTORS to support code in esc_calibration | +| 参数名 | 类型 | 值 | 描述 | +| ----------------------------------------------------------------------------------------------------- | ------- | --- | -------------------------------------------------------------------------------------------------------------------- | +| ACTION_RELEASE_CONTROL | `uint8` | 0 | exit test mode for the given function | +| ACTION_DO_CONTROL | `uint8` | 1 | enable actuator test mode | +| FUNCTION_MOTOR1 | `uint8` | 101 | | +| MAX_NUM_MOTORS | `uint8` | 12 | | +| FUNCTION_SERVO1 | `uint8` | 201 | | +| MAX_NUM_SERVOS | `uint8` | 8 | | +| ORB_QUEUE_LENGTH | `uint8` | 16 | > = MAX_NUM_MOTORS to support code in esc_calibration | ## Source Message diff --git a/docs/zh/msg_docs/AirspeedValidated.md b/docs/zh/msg_docs/AirspeedValidated.md index ad69ec7389..e17d3e1120 100644 --- a/docs/zh/msg_docs/AirspeedValidated.md +++ b/docs/zh/msg_docs/AirspeedValidated.md @@ -30,20 +30,20 @@ Used by controllers, estimators and for airspeed reporting to operator. ### SOURCE {#SOURCE} -| 参数名 | 类型 | 值 | 描述 | -| -------------------------------------------------------------------------------------------------------------------------------- | ------ | -- | ----------------------- | -| SOURCE_DISABLED | `int8` | -1 | Disabled | -| SOURCE_GROUND_MINUS_WIND | `int8` | 0 | Ground speed minus wind | -| SOURCE_SENSOR_1 | `int8` | 1 | Sensor 1 | -| SOURCE_SENSOR_2 | `int8` | 2 | Sensor 2 | -| SOURCE_SENSOR_3 | `int8` | 3 | Sensor 3 | -| SOURCE_SYNTHETIC | `int8` | 4 | Synthetic airspeed | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------------------------------------------------------------------ | ------ | -- | ----------------------- | +| SOURCE_DISABLED | `int8` | -1 | Disabled | +| SOURCE_GROUND_MINUS_WIND | `int8` | 0 | Ground speed minus wind | +| SOURCE_SENSOR_1 | `int8` | 1 | Sensor 1 | +| SOURCE_SENSOR_2 | `int8` | 2 | Sensor 2 | +| SOURCE_SENSOR_3 | `int8` | 3 | Sensor 3 | +| SOURCE_SYNTHETIC | `int8` | 4 | Synthetic airspeed | ## Constants -| 参数名 | 类型 | 值 | 描述 | -| -------------------------------------------------------------------- | -------- | - | -- | -| MESSAGE_VERSION | `uint32` | 1 | | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------ | -------- | - | -- | +| MESSAGE_VERSION | `uint32` | 1 | | ## Source Message @@ -58,28 +58,27 @@ Click here to see original file # Provides information about airspeed (indicated, true, calibrated) and the source of the data. # Used by controllers, estimators and for airspeed reporting to operator. - uint32 MESSAGE_VERSION = 1 -uint64 timestamp # [us] Time since system start +uint64 timestamp # [us] Time since system start -float32 indicated_airspeed_m_s # [m/s] [@invalid NaN] Indicated airspeed (IAS) -float32 calibrated_airspeed_m_s # [m/s] [@invalid NaN] Calibrated airspeed (CAS) -float32 true_airspeed_m_s # [m/s] [@invalid NaN] True airspeed (TAS) +float32 indicated_airspeed_m_s # [m/s] [@invalid NaN] Indicated airspeed (IAS) +float32 calibrated_airspeed_m_s # [m/s] [@invalid NaN] Calibrated airspeed (CAS) +float32 true_airspeed_m_s # [m/s] [@invalid NaN] True airspeed (TAS) -int8 airspeed_source # [@enum SOURCE] Source of currently published airspeed values -int8 SOURCE_DISABLED = -1 # Disabled -int8 SOURCE_GROUND_MINUS_WIND = 0 # Ground speed minus wind -int8 SOURCE_SENSOR_1 = 1 # Sensor 1 -int8 SOURCE_SENSOR_2 = 2 # Sensor 2 -int8 SOURCE_SENSOR_3 = 3 # Sensor 3 -int8 SOURCE_SYNTHETIC = 4 # Synthetic airspeed +int8 airspeed_source # [@enum SOURCE] Source of currently published airspeed values +int8 SOURCE_DISABLED = -1 # Disabled +int8 SOURCE_GROUND_MINUS_WIND = 0 # Ground speed minus wind +int8 SOURCE_SENSOR_1 = 1 # Sensor 1 +int8 SOURCE_SENSOR_2 = 2 # Sensor 2 +int8 SOURCE_SENSOR_3 = 3 # Sensor 3 +int8 SOURCE_SYNTHETIC = 4 # Synthetic airspeed -float32 calibrated_ground_minus_wind_m_s # [m/s] [@invalid NaN] CAS calculated from groundspeed - windspeed, where windspeed is estimated based on a zero-sideslip assumption -float32 calibraded_airspeed_synth_m_s # [m/s] [@invalid NaN] Synthetic airspeed -float32 airspeed_derivative_filtered # [m/s^2] Filtered indicated airspeed derivative -float32 throttle_filtered # [-] Filtered fixed-wing throttle -float32 pitch_filtered # [rad] Filtered pitch +float32 calibrated_ground_minus_wind_m_s # [m/s] [@invalid NaN] CAS calculated from groundspeed - windspeed, where windspeed is estimated based on a zero-sideslip assumption +float32 calibraded_airspeed_synth_m_s # [m/s] [@invalid NaN] Synthetic airspeed +float32 airspeed_derivative_filtered # [m/s^2] Filtered indicated airspeed derivative +float32 throttle_filtered # [-] Filtered fixed-wing throttle +float32 pitch_filtered # [rad] Filtered pitch ``` ::: diff --git a/docs/zh/msg_docs/AirspeedValidatedV0.md b/docs/zh/msg_docs/AirspeedValidatedV0.md index 7eb82c74fc..3b397af47e 100644 --- a/docs/zh/msg_docs/AirspeedValidatedV0.md +++ b/docs/zh/msg_docs/AirspeedValidatedV0.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # AirspeedValidatedV0 (UORB message) -**TOPICS:** airspeed_validatedv0 +**TOPICS:** airspeed_validated_v0 ## Fields @@ -24,9 +24,9 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| -------------------------------------------------------------------- | -------- | - | -- | -| MESSAGE_VERSION | `uint32` | 0 | | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------ | -------- | - | -- | +| MESSAGE_VERSION | `uint32` | 0 | | ## Source Message diff --git a/docs/zh/msg_docs/AirspeedWind.md b/docs/zh/msg_docs/AirspeedWind.md index 712e2ec667..0b7af503ee 100644 --- a/docs/zh/msg_docs/AirspeedWind.md +++ b/docs/zh/msg_docs/AirspeedWind.md @@ -35,12 +35,12 @@ subscribed to by any other modules. ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ---------------------------------------------------------------------------------------------------------------------- | ------- | - | ----------------------------------------------------------------------------------------------------- | -| SOURCE_AS_BETA_ONLY | `uint8` | 0 | Wind estimate only based on synthetic sideslip fusion | -| SOURCE_AS_SENSOR_1 | `uint8` | 1 | Combined synthetic sideslip and airspeed fusion (data from first airspeed sensor) | -| SOURCE_AS_SENSOR_2 | `uint8` | 2 | Combined synthetic sideslip and airspeed fusion (data from second airspeed sensor) | -| SOURCE_AS_SENSOR_3 | `uint8` | 3 | Combined synthetic sideslip and airspeed fusion (data from third airspeed sensor) | +| 参数名 | 类型 | 值 | 描述 | +| -------------------------------------------------------------------------------------------------------------------- | ------- | - | ----------------------------------------------------------------------------------------------------- | +| SOURCE_AS_BETA_ONLY | `uint8` | 0 | Wind estimate only based on synthetic sideslip fusion | +| SOURCE_AS_SENSOR_1 | `uint8` | 1 | Combined synthetic sideslip and airspeed fusion (data from first airspeed sensor) | +| SOURCE_AS_SENSOR_2 | `uint8` | 2 | Combined synthetic sideslip and airspeed fusion (data from second airspeed sensor) | +| SOURCE_AS_SENSOR_3 | `uint8` | 3 | Combined synthetic sideslip and airspeed fusion (data from third airspeed sensor) | ## Source Message diff --git a/docs/zh/msg_docs/ArmingCheckReply.md b/docs/zh/msg_docs/ArmingCheckReply.md index 1a211fe047..4b70edccde 100644 --- a/docs/zh/msg_docs/ArmingCheckReply.md +++ b/docs/zh/msg_docs/ArmingCheckReply.md @@ -13,7 +13,7 @@ The request is sent regularly to all registered ROS modes, even while armed, so Note that the external component is identified by its registration_id, which is allocated to the component during registration (arming_check_id in RegisterExtComponentReply). The message is not used by internal/FMU components, as their mode requirements are known at compile time. -**TOPICS:** arming_checkreply +**TOPICS:** arming_check_reply ## Fields @@ -45,16 +45,16 @@ The message is not used by internal/FMU components, as their mode requirements a ### HEALTH_COMPONENT_INDEX {#HEALTH_COMPONENT_INDEX} -| 参数名 | 类型 | 值 | 描述 | -| -------------------------------------------------------------------------------------------------------------------------------------- | ------- | - | --------------------------------------------------------- | -| HEALTH_COMPONENT_INDEX_NONE | `uint8` | 0 | Index of health component for which this response applies | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------------------------------------------------------------------------ | ------- | - | --------------------------------------------------------- | +| HEALTH_COMPONENT_INDEX_NONE | `uint8` | 0 | Index of health component for which this response applies | ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------------------------- | -------- | - | -- | -| MESSAGE_VERSION | `uint32` | 1 | | -| ORB_QUEUE_LENGTH | `uint8` | 4 | | +| 参数名 | 类型 | 值 | 描述 | +| ----------------------------------------------------------------------------------------- | -------- | - | -- | +| MESSAGE_VERSION | `uint32` | 1 | | +| ORB_QUEUE_LENGTH | `uint8` | 4 | | ## Source Message @@ -73,40 +73,40 @@ Click here to see original file # Note that the external component is identified by its registration_id, which is allocated to the component during registration (arming_check_id in RegisterExtComponentReply). # The message is not used by internal/FMU components, as their mode requirements are known at compile time. -uint32 MESSAGE_VERSION = 1 +uint32 MESSAGE_VERSION = 1 uint64 timestamp # [us] Time since system start. -uint8 request_id # [-] Id of ArmingCheckRequest for which this is a response -uint8 registration_id # [-] Id of external component emitting this response +uint8 request_id # [-] Id of ArmingCheckRequest for which this is a response +uint8 registration_id # [-] Id of external component emitting this response -uint8 HEALTH_COMPONENT_INDEX_NONE = 0 # Index of health component for which this response applies +uint8 HEALTH_COMPONENT_INDEX_NONE = 0 # Index of health component for which this response applies -uint8 health_component_index # [@enum HEALTH_COMPONENT_INDEX] -bool health_component_is_present # Unused. Intended for use with health events interface (health_component_t in events.json) -bool health_component_warning # Unused. Intended for use with health events interface (health_component_t in events.json) -bool health_component_error # Unused. Intended for use with health events interface (health_component_t in events.json) +uint8 health_component_index # [@enum HEALTH_COMPONENT_INDEX] +bool health_component_is_present # Unused. Intended for use with health events interface (health_component_t in events.json) +bool health_component_warning # Unused. Intended for use with health events interface (health_component_t in events.json) +bool health_component_error # Unused. Intended for use with health events interface (health_component_t in events.json) -bool can_arm_and_run # True if the component can arm. For navigation mode components, true if the component can arm in the mode or switch to the mode when already armed +bool can_arm_and_run # True if the component can arm. For navigation mode components, true if the component can arm in the mode or switch to the mode when already armed -uint8 num_events # Number of queued failure messages (Event) in the events field +uint8 num_events # Number of queued failure messages (Event) in the events field -Event[5] events # Arming failure reasons (Queue of events to report to GCS) +Event[5] events # Arming failure reasons (Queue of events to report to GCS) # Mode requirements -bool mode_req_angular_velocity # Requires angular velocity estimate (e.g. from gyroscope) -bool mode_req_attitude # Requires an attitude estimate -bool mode_req_local_alt # Requires a local altitude estimate -bool mode_req_local_position # Requires a local position estimate -bool mode_req_local_position_relaxed # Requires a more relaxed global position estimate -bool mode_req_global_position # Requires a global position estimate -bool mode_req_global_position_relaxed # Requires a relaxed global position estimate -bool mode_req_mission # Requires an uploaded mission -bool mode_req_home_position # Requires a home position (such as RTL/Return mode) -bool mode_req_prevent_arming # Prevent arming (such as in Land mode) -bool mode_req_manual_control # Requires a manual controller +bool mode_req_angular_velocity # Requires angular velocity estimate (e.g. from gyroscope) +bool mode_req_attitude # Requires an attitude estimate +bool mode_req_local_alt # Requires a local altitude estimate +bool mode_req_local_position # Requires a local position estimate +bool mode_req_local_position_relaxed # Requires a more relaxed global position estimate +bool mode_req_global_position # Requires a global position estimate +bool mode_req_global_position_relaxed # Requires a relaxed global position estimate +bool mode_req_mission # Requires an uploaded mission +bool mode_req_home_position # Requires a home position (such as RTL/Return mode) +bool mode_req_prevent_arming # Prevent arming (such as in Land mode) +bool mode_req_manual_control # Requires a manual controller -uint8 ORB_QUEUE_LENGTH = 4 +uint8 ORB_QUEUE_LENGTH = 4 ``` ::: diff --git a/docs/zh/msg_docs/ArmingCheckReplyV0.md b/docs/zh/msg_docs/ArmingCheckReplyV0.md index 97b988b505..7c2c3b7402 100644 --- a/docs/zh/msg_docs/ArmingCheckReplyV0.md +++ b/docs/zh/msg_docs/ArmingCheckReplyV0.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # ArmingCheckReplyV0 (UORB message) -**TOPICS:** arming_checkreplyv0 +**TOPICS:** arming_check_reply_v0 ## Fields @@ -33,11 +33,11 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| -------------------------------------------------------------------------------------------------------------------------------------- | -------- | - | -- | -| MESSAGE_VERSION | `uint32` | 0 | | -| HEALTH_COMPONENT_INDEX_NONE | `uint8` | 0 | | -| ORB_QUEUE_LENGTH | `uint8` | 4 | | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------------------------------------------------------------------------ | -------- | - | -- | +| MESSAGE_VERSION | `uint32` | 0 | | +| HEALTH_COMPONENT_INDEX_NONE | `uint8` | 0 | | +| ORB_QUEUE_LENGTH | `uint8` | 4 | | ## Source Message diff --git a/docs/zh/msg_docs/ArmingCheckRequest.md b/docs/zh/msg_docs/ArmingCheckRequest.md index 59af550982..18d8cb1f2f 100644 --- a/docs/zh/msg_docs/ArmingCheckRequest.md +++ b/docs/zh/msg_docs/ArmingCheckRequest.md @@ -13,7 +13,7 @@ The request is sent regularly, even while armed, so that the FMU always knows th The reply will include the published request_id, allowing correlation of all arming check information for a particular request. The reply will also include the registration_id for each external component, provided to it during the registration process (RegisterExtComponentReply). -**TOPICS:** arming_checkrequest +**TOPICS:** arming_check_request ## Fields @@ -25,9 +25,9 @@ The reply will also include the registration_id for each external component, pro ## Constants -| 参数名 | 类型 | 值 | 描述 | -| -------------------------------------------------------------------- | -------- | - | -- | -| MESSAGE_VERSION | `uint32` | 1 | | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------ | -------- | - | -- | +| MESSAGE_VERSION | `uint32` | 1 | | ## Source Message @@ -48,9 +48,9 @@ Click here to see original file uint32 MESSAGE_VERSION = 1 -uint64 timestamp # [us] Time since system start +uint64 timestamp # [us] Time since system start -uint8 request_id # [-] Id of this request. Allows correlation with associated ArmingCheckReply messages. +uint8 request_id # [-] Id of this request. Allows correlation with associated ArmingCheckReply messages. uint32 valid_registrations_mask # [-] Bitmask of valid registration ID's (the bit is also cleared if flagged as unresponsive) ``` diff --git a/docs/zh/msg_docs/ArmingCheckRequestV0.md b/docs/zh/msg_docs/ArmingCheckRequestV0.md index df81ca3fbb..dff71f28d7 100644 --- a/docs/zh/msg_docs/ArmingCheckRequestV0.md +++ b/docs/zh/msg_docs/ArmingCheckRequestV0.md @@ -13,7 +13,7 @@ The request is sent regularly, even while armed, so that the FMU always knows th The reply will include the published request_id, allowing correlation of all arming check information for a particular request. The reply will also include the registration_id for each external component, provided to it during the registration process (RegisterExtComponentReply). -**TOPICS:** arming_checkrequestv0 +**TOPICS:** arming_check_request_v0 ## Fields @@ -24,9 +24,9 @@ The reply will also include the registration_id for each external component, pro ## Constants -| 参数名 | 类型 | 值 | 描述 | -| -------------------------------------------------------------------- | -------- | - | -- | -| MESSAGE_VERSION | `uint32` | 0 | | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------ | -------- | - | -- | +| MESSAGE_VERSION | `uint32` | 0 | | ## Source Message diff --git a/docs/zh/msg_docs/AutotuneAttitudeControlStatus.md b/docs/zh/msg_docs/AutotuneAttitudeControlStatus.md index dc59ccd84e..73a3e3a889 100644 --- a/docs/zh/msg_docs/AutotuneAttitudeControlStatus.md +++ b/docs/zh/msg_docs/AutotuneAttitudeControlStatus.md @@ -11,7 +11,7 @@ and is subscribed to by the respective attitude controllers to command rate setp The rate_sp field is consumed by the controllers, while the remaining fields (model coefficients, gains, filters, and autotune state) are used for logging and debugging. -**TOPICS:** autotune_attitudecontrol_status +**TOPICS:** autotune_attitude_control_status ## Fields @@ -37,25 +37,25 @@ The rate_sp field is consumed by the controllers, while the remaining fields (mo ### STATE {#STATE} -| 参数名 | 类型 | 值 | 描述 | -| ---------------------------------------------------------------------------------------------------------------------------------------------- | ------- | -- | ------------------------------------------------------------------------------------------- | -| STATE_IDLE | `uint8` | 0 | Idle (not running) | -| STATE_INIT | `uint8` | 1 | Initialize filters and setup | -| STATE_ROLL_AMPLITUDE_DETECTION | `uint8` | 2 | FW only: determine required excitation amplitude (roll) | -| STATE_ROLL | `uint8` | 3 | Roll-axis excitation and model identification | -| STATE_ROLL_PAUSE | `uint8` | 4 | Pause to return to level flight | -| STATE_PITCH_AMPLITUDE_DETECTION | `uint8` | 5 | FW only: determine required excitation amplitude (pitch) | -| STATE_PITCH | `uint8` | 6 | Pitch-axis excitation and model identification | -| STATE_PITCH_PAUSE | `uint8` | 7 | Pause to return to level flight | -| STATE_YAW_AMPLITUDE_DETECTION | `uint8` | 8 | FW only: determine required excitation amplitude (yaw) | -| STATE_YAW | `uint8` | 9 | Yaw-axis excitation and model identification | -| STATE_YAW_PAUSE | `uint8` | 10 | Pause to return to level flight | -| STATE_VERIFICATION | `uint8` | 11 | Verify model and candidate gains | -| STATE_APPLY | `uint8` | 12 | Apply gains | -| STATE_TEST | `uint8` | 13 | Test gains in closed-loop | -| STATE_COMPLETE | `uint8` | 14 | Tuning completed successfully | -| STATE_FAIL | `uint8` | 15 | Tuning failed (model invalid or controller unstable) | -| STATE_WAIT_FOR_DISARM | `uint8` | 16 | Waiting for disarm before finalizing | +| 参数名 | 类型 | 值 | 描述 | +| -------------------------------------------------------------------------------------------------------------------------------------------- | ------- | -- | ------------------------------------------------------------------------------------------- | +| STATE_IDLE | `uint8` | 0 | Idle (not running) | +| STATE_INIT | `uint8` | 1 | Initialize filters and setup | +| STATE_ROLL_AMPLITUDE_DETECTION | `uint8` | 2 | FW only: determine required excitation amplitude (roll) | +| STATE_ROLL | `uint8` | 3 | Roll-axis excitation and model identification | +| STATE_ROLL_PAUSE | `uint8` | 4 | Pause to return to level flight | +| STATE_PITCH_AMPLITUDE_DETECTION | `uint8` | 5 | FW only: determine required excitation amplitude (pitch) | +| STATE_PITCH | `uint8` | 6 | Pitch-axis excitation and model identification | +| STATE_PITCH_PAUSE | `uint8` | 7 | Pause to return to level flight | +| STATE_YAW_AMPLITUDE_DETECTION | `uint8` | 8 | FW only: determine required excitation amplitude (yaw) | +| STATE_YAW | `uint8` | 9 | Yaw-axis excitation and model identification | +| STATE_YAW_PAUSE | `uint8` | 10 | Pause to return to level flight | +| STATE_VERIFICATION | `uint8` | 11 | Verify model and candidate gains | +| STATE_APPLY | `uint8` | 12 | Apply gains | +| STATE_TEST | `uint8` | 13 | Test gains in closed-loop | +| STATE_COMPLETE | `uint8` | 14 | Tuning completed successfully | +| STATE_FAIL | `uint8` | 15 | Tuning failed (model invalid or controller unstable) | +| STATE_WAIT_FOR_DISARM | `uint8` | 16 | Waiting for disarm before finalizing | ## Source Message diff --git a/docs/zh/msg_docs/AuxGlobalPosition.md b/docs/zh/msg_docs/AuxGlobalPosition.md new file mode 100644 index 0000000000..290ae9651a --- /dev/null +++ b/docs/zh/msg_docs/AuxGlobalPosition.md @@ -0,0 +1,90 @@ +--- +pageClass: is-wide-page +--- + +# AuxGlobalPosition (UORB message) + +Auxiliary global position. + +This message provides global position data from an external source such as +pseudolites, visual navigation, or other positioning system. + +**TOPICS:** aux_global_position + +## Fields + +| 参数名 | 类型 | Unit [Frame] | Range/Enum | 描述 | +| ------------------------------------------------------------------------------------ | --------- | ---------------------------------------------------------------- | ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| timestamp | `uint64` | us | | Time since system start | +| timestamp_sample | `uint64` | us | | Timestamp of the raw data | +| id | `uint8` | | | Unique identifier for the AGP source | +| source | `uint8` | | [SOURCE](#SOURCE) | Source type of the position data (based on mavlink::GLOBAL_POSITION_SRC) | +| lat | `float64` | deg | | Latitude in WGS84 | +| lon | `float64` | deg | | Longitude in WGS84 | +| alt | `float32` | 米 | | Altitude above mean sea level (AMSL) (Invalid: NaN) | +| eph | `float32` | 米 | | Std dev of horizontal position, lower bounded by NOISE param (Invalid: NaN) | +| epv | `float32` | 米 | | Std dev of vertical position, lower bounded by NOISE param (Invalid: NaN) | +| lat_lon_reset_counter | `uint8` | | | Counter for reset events on horizontal position coordinates | + +## Enums + +### SOURCE {#SOURCE} + +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------------ | ------- | - | -------------- | +| SOURCE_UNKNOWN | `uint8` | 0 | Unknown source | +| SOURCE_GNSS | `uint8` | 1 | GNSS | +| SOURCE_VISION | `uint8` | 2 | Vision | +| SOURCE_PSEUDOLITES | `uint8` | 3 | Pseudolites | +| SOURCE_TERRAIN | `uint8` | 4 | Terrain | +| SOURCE_MAGNETIC | `uint8` | 5 | Magnetic | +| SOURCE_ESTIMATOR | `uint8` | 6 | 估计器 | + +## Constants + +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------ | -------- | - | -- | +| MESSAGE_VERSION | `uint32` | 1 | | + +## Source Message + +[Source file (GitHub)](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/AuxGlobalPosition.msg) + +:::details +Click here to see original file + +```c +# Auxiliary global position +# +# This message provides global position data from an external source such as +# pseudolites, visual navigation, or other positioning system. + +uint32 MESSAGE_VERSION = 1 + +uint64 timestamp # [us] Time since system start +uint64 timestamp_sample # [us] Timestamp of the raw data + +uint8 id # [-] Unique identifier for the AGP source +uint8 source # [@enum SOURCE] Source type of the position data (based on mavlink::GLOBAL_POSITION_SRC) +uint8 SOURCE_UNKNOWN = 0 # Unknown source +uint8 SOURCE_GNSS = 1 # GNSS +uint8 SOURCE_VISION = 2 # Vision +uint8 SOURCE_PSEUDOLITES = 3 # Pseudolites +uint8 SOURCE_TERRAIN = 4 # Terrain +uint8 SOURCE_MAGNETIC = 5 # Magnetic +uint8 SOURCE_ESTIMATOR = 6 # Estimator + +# lat, lon: required for horizontal position fusion, alt: required for vertical position fusion +float64 lat # [deg] Latitude in WGS84 +float64 lon # [deg] Longitude in WGS84 +float32 alt # [m] [@invalid NaN] Altitude above mean sea level (AMSL) + +float32 eph # [m] [@invalid NaN] Std dev of horizontal position, lower bounded by NOISE param +float32 epv # [m] [@invalid NaN] Std dev of vertical position, lower bounded by NOISE param + +uint8 lat_lon_reset_counter # [-] Counter for reset events on horizontal position coordinates + +# TOPICS aux_global_position +``` + +::: diff --git a/docs/zh/msg_docs/BatteryStatus.md b/docs/zh/msg_docs/BatteryStatus.md index 7527a153cc..11a0bbb14e 100644 --- a/docs/zh/msg_docs/BatteryStatus.md +++ b/docs/zh/msg_docs/BatteryStatus.md @@ -25,7 +25,7 @@ Battery instance information is also logged and streamed in MAVLink telemetry. | remaining | `float32` | | [0 : 1] | Remaining capacity (Invalid: -1) | | scale | `float32` | | [1 : -] | Scaling factor to compensate for lower actuation power caused by voltage sag (Invalid: -1) | | time_remaining_s | `float32` | s | | Predicted time remaining until battery is empty under previous averaged load (Invalid: NaN) | -| temperature | `float32` | °C | | Temperature of the battery (Invalid: NaN) | +| temperature | `float32` | degC | | Temperature of the battery (Invalid: NaN) | | cell_count | `uint8` | | | Number of cells (Invalid: 0) | | source | `uint8` | | [SOURCE](#SOURCE) | Battery source | | priority | `uint8` | | | Zero based priority is the connection on the Power Controller V1..Vn AKA BrickN-1 | @@ -59,52 +59,52 @@ Battery instance information is also logged and streamed in MAVLink telemetry. ### SOURCE {#SOURCE} -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------------------------------- | ------- | - | ----------------------------------------------------------------- | -| SOURCE_POWER_MODULE | `uint8` | 0 | Power module (analog ADC or I2C power monitor) | -| SOURCE_EXTERNAL | `uint8` | 1 | External (MAVLink, CAN, or external driver) | -| SOURCE_ESCS | `uint8` | 2 | ESCs (via ESC telemetry) | +| 参数名 | 类型 | 值 | 描述 | +| ----------------------------------------------------------------------------------------------- | ------- | - | ----------------------------------------------------------------- | +| SOURCE_POWER_MODULE | `uint8` | 0 | Power module (analog ADC or I2C power monitor) | +| SOURCE_EXTERNAL | `uint8` | 1 | External (MAVLink, CAN, or external driver) | +| SOURCE_ESCS | `uint8` | 2 | ESCs (via ESC telemetry) | ### WARNING {#WARNING} -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------ | ------- | - | -------------------------------------------- | -| WARNING_NONE | `uint8` | 0 | No battery low voltage warning active | -| WARNING_LOW | `uint8` | 1 | Low voltage warning | -| WARNING_CRITICAL | `uint8` | 2 | Critical voltage, return / abort immediately | -| WARNING_EMERGENCY | `uint8` | 3 | Immediate landing required | -| WARNING_FAILED | `uint8` | 4 | Battery has failed completely | +| 参数名 | 类型 | 值 | 描述 | +| ---------------------------------------------------------------------- | ------- | - | -------------------------------------------- | +| WARNING_NONE | `uint8` | 0 | No battery low voltage warning active | +| WARNING_LOW | `uint8` | 1 | Low voltage warning | +| WARNING_CRITICAL | `uint8` | 2 | Critical voltage, return / abort immediately | +| WARNING_EMERGENCY | `uint8` | 3 | Immediate landing required | +| WARNING_FAILED | `uint8` | 4 | Battery has failed completely | ### STATE {#STATE} -| 参数名 | 类型 | 值 | 描述 | -| -------------------------------------------------------------------- | ------- | - | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| STATE_UNHEALTHY | `uint8` | 6 | Battery is diagnosed to be defective or an error occurred, usage is discouraged / prohibited. Possible causes (faults) are listed in faults field | -| STATE_CHARGING | `uint8` | 7 | Battery is charging | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------ | ------- | - | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| STATE_UNHEALTHY | `uint8` | 6 | Battery is diagnosed to be defective or an error occurred, usage is discouraged / prohibited. Possible causes (faults) are listed in faults field | +| STATE_CHARGING | `uint8` | 7 | Battery is charging | ### FAULT {#FAULT} -| 参数名 | 类型 | 值 | 描述 | -| ---------------------------------------------------------------------------------------------------------------------- | ------- | -- | --------------------------------------------------------------------------------------------------------------------------------- | -| FAULT_DEEP_DISCHARGE | `uint8` | 0 | Battery has deep discharged | -| FAULT_SPIKES | `uint8` | 1 | Voltage spikes | -| FAULT_CELL_FAIL | `uint8` | 2 | One or more cells have failed | -| FAULT_OVER_CURRENT | `uint8` | 3 | Over-current | -| FAULT_OVER_TEMPERATURE | `uint8` | 4 | Over-temperature | -| FAULT_UNDER_TEMPERATURE | `uint8` | 5 | Under-temperature fault | -| FAULT_INCOMPATIBLE_VOLTAGE | `uint8` | 6 | Vehicle voltage is not compatible with this battery (batteries on same power rail should have similar voltage) | -| FAULT_INCOMPATIBLE_FIRMWARE | `uint8` | 7 | Battery firmware is not compatible with current autopilot firmware | -| FAULT_INCOMPATIBLE_MODEL | `uint8` | 8 | Battery model is not supported by the system | -| FAULT_HARDWARE_FAILURE | `uint8` | 9 | Hardware problem | -| FAULT_FAILED_TO_ARM | `uint8` | 10 | Battery had a problem while arming | -| FAULT_COUNT | `uint8` | 11 | Counter. Keep this as last element | +| 参数名 | 类型 | 值 | 描述 | +| -------------------------------------------------------------------------------------------------------------------- | ------- | -- | --------------------------------------------------------------------------------------------------------------------------------- | +| FAULT_DEEP_DISCHARGE | `uint8` | 0 | Battery has deep discharged | +| FAULT_SPIKES | `uint8` | 1 | Voltage spikes | +| FAULT_CELL_FAIL | `uint8` | 2 | One or more cells have failed | +| FAULT_OVER_CURRENT | `uint8` | 3 | Over-current | +| FAULT_OVER_TEMPERATURE | `uint8` | 4 | Over-temperature | +| FAULT_UNDER_TEMPERATURE | `uint8` | 5 | Under-temperature fault | +| FAULT_INCOMPATIBLE_VOLTAGE | `uint8` | 6 | Vehicle voltage is not compatible with this battery (batteries on same power rail should have similar voltage) | +| FAULT_INCOMPATIBLE_FIRMWARE | `uint8` | 7 | Battery firmware is not compatible with current autopilot firmware | +| FAULT_INCOMPATIBLE_MODEL | `uint8` | 8 | Battery model is not supported by the system | +| FAULT_HARDWARE_FAILURE | `uint8` | 9 | Hardware problem | +| FAULT_FAILED_TO_ARM | `uint8` | 10 | Battery had a problem while arming | +| FAULT_COUNT | `uint8` | 11 | Counter. Keep this as last element | ## Constants -| 参数名 | 类型 | 值 | 描述 | -| -------------------------------------------------------------------- | -------- | - | -- | -| MESSAGE_VERSION | `uint32` | 1 | | -| MAX_INSTANCES | `uint8` | 3 | | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------ | -------- | - | -- | +| MESSAGE_VERSION | `uint32` | 1 | | +| MAX_INSTANCES | `uint8` | 3 | | ## Source Message @@ -123,76 +123,75 @@ Click here to see original file uint32 MESSAGE_VERSION = 1 uint8 MAX_INSTANCES = 3 -uint64 timestamp # [us] Time since system start +uint64 timestamp # [us] Time since system start -bool connected # Whether or not a battery is connected. For power modules this is based on a voltage threshold. -float32 voltage_v # [V] [@invalid 0] Battery voltage -float32 current_a # [A] [@invalid -1] Battery current -float32 current_average_a # [A] [@invalid -1] Battery current average (for FW average in level flight) -float32 discharged_mah # [mAh] [@invalid -1] Discharged amount -float32 remaining # [@range 0,1] [@invalid -1] Remaining capacity -float32 scale # [-] [@range 1,] [@invalid -1] Scaling factor to compensate for lower actuation power caused by voltage sag -float32 time_remaining_s # [s] [@invalid NaN] Predicted time remaining until battery is empty under previous averaged load -float32 temperature # [°C] [@invalid NaN] Temperature of the battery -uint8 cell_count # [-] [@invalid 0] Number of cells +bool connected # Whether or not a battery is connected. For power modules this is based on a voltage threshold. +float32 voltage_v # [V] [@invalid 0] Battery voltage +float32 current_a # [A] [@invalid -1] Battery current +float32 current_average_a # [A] [@invalid -1] Battery current average (for FW average in level flight) +float32 discharged_mah # [mAh] [@invalid -1] Discharged amount +float32 remaining # [@range 0,1] [@invalid -1] Remaining capacity +float32 scale # [-] [@range 1,] [@invalid -1] Scaling factor to compensate for lower actuation power caused by voltage sag +float32 time_remaining_s # [s] [@invalid NaN] Predicted time remaining until battery is empty under previous averaged load +float32 temperature # [degC] [@invalid NaN] Temperature of the battery +uint8 cell_count # [-] [@invalid 0] Number of cells +uint8 source # [@enum SOURCE] Battery source +uint8 SOURCE_POWER_MODULE = 0 # Power module (analog ADC or I2C power monitor) +uint8 SOURCE_EXTERNAL = 1 # External (MAVLink, CAN, or external driver) +uint8 SOURCE_ESCS = 2 # ESCs (via ESC telemetry) -uint8 source # [@enum SOURCE] Battery source -uint8 SOURCE_POWER_MODULE = 0 # Power module (analog ADC or I2C power monitor) -uint8 SOURCE_EXTERNAL = 1 # External (MAVLink, CAN, or external driver) -uint8 SOURCE_ESCS = 2 # ESCs (via ESC telemetry) +uint8 priority # [-] Zero based priority is the connection on the Power Controller V1..Vn AKA BrickN-1 +uint16 capacity # [mAh] Capacity of the battery when fully charged +uint16 cycle_count # [-] Number of discharge cycles the battery has experienced +uint16 average_time_to_empty # [minutes] Predicted remaining battery capacity based on the average rate of discharge +uint16 manufacture_date # [-] Manufacture date, part of serial number of the battery pack. Formatted as: Day + Month×32 + (Year–1980)×512 +uint16 state_of_health # [%] [@range 0, 100] State of health. FullChargeCapacity/DesignCapacity +uint16 max_error # [%] [@range 1, 100] Max error, expected margin of error in the state-of-charge calculation +uint8 id # [-] ID number of a battery. Should be unique and consistent for the lifetime of a vehicle. 1-indexed +uint16 interface_error # [-] Interface error counter -uint8 priority # [-] Zero based priority is the connection on the Power Controller V1..Vn AKA BrickN-1 -uint16 capacity # [mAh] Capacity of the battery when fully charged -uint16 cycle_count # [-] Number of discharge cycles the battery has experienced -uint16 average_time_to_empty # [minutes] Predicted remaining battery capacity based on the average rate of discharge -uint16 manufacture_date # [-] Manufacture date, part of serial number of the battery pack. Formatted as: Day + Month×32 + (Year–1980)×512 -uint16 state_of_health # [%] [@range 0, 100] State of health. FullChargeCapacity/DesignCapacity -uint16 max_error # [%] [@range 1, 100] Max error, expected margin of error in the state-of-charge calculation -uint8 id # [-] ID number of a battery. Should be unique and consistent for the lifetime of a vehicle. 1-indexed -uint16 interface_error # [-] Interface error counter +float32[14] voltage_cell_v # [V] [@invalid 0] Battery individual cell voltages +float32 max_cell_voltage_delta # [V] Max difference between individual cell voltages -float32[14] voltage_cell_v # [V] [@invalid 0] Battery individual cell voltages -float32 max_cell_voltage_delta # [V] Max difference between individual cell voltages +bool is_powering_off # Power off event imminent indication, false if unknown +bool is_required # Set if the battery is explicitly required before arming -bool is_powering_off # Power off event imminent indication, false if unknown -bool is_required # Set if the battery is explicitly required before arming +uint8 warning # [@enum WARNING STATE] Current battery warning +uint8 WARNING_NONE = 0 # No battery low voltage warning active +uint8 WARNING_LOW = 1 # Low voltage warning +uint8 WARNING_CRITICAL = 2 # Critical voltage, return / abort immediately +uint8 WARNING_EMERGENCY = 3 # Immediate landing required +uint8 WARNING_FAILED = 4 # Battery has failed completely +uint8 STATE_UNHEALTHY = 6 # Battery is diagnosed to be defective or an error occurred, usage is discouraged / prohibited. Possible causes (faults) are listed in faults field +uint8 STATE_CHARGING = 7 # Battery is charging -uint8 warning # [@enum WARNING STATE] Current battery warning -uint8 WARNING_NONE = 0 # No battery low voltage warning active -uint8 WARNING_LOW = 1 # Low voltage warning -uint8 WARNING_CRITICAL = 2 # Critical voltage, return / abort immediately -uint8 WARNING_EMERGENCY = 3 # Immediate landing required -uint8 WARNING_FAILED = 4 # Battery has failed completely -uint8 STATE_UNHEALTHY = 6 # Battery is diagnosed to be defective or an error occurred, usage is discouraged / prohibited. Possible causes (faults) are listed in faults field -uint8 STATE_CHARGING = 7 # Battery is charging +uint16 faults # [@enum FAULT] Smart battery supply status/fault flags (bitmask) for health indication +uint8 FAULT_DEEP_DISCHARGE = 0 # Battery has deep discharged +uint8 FAULT_SPIKES = 1 # Voltage spikes +uint8 FAULT_CELL_FAIL= 2 # One or more cells have failed +uint8 FAULT_OVER_CURRENT = 3 # Over-current +uint8 FAULT_OVER_TEMPERATURE = 4 # Over-temperature +uint8 FAULT_UNDER_TEMPERATURE = 5 # Under-temperature fault +uint8 FAULT_INCOMPATIBLE_VOLTAGE = 6 # Vehicle voltage is not compatible with this battery (batteries on same power rail should have similar voltage) +uint8 FAULT_INCOMPATIBLE_FIRMWARE = 7 # Battery firmware is not compatible with current autopilot firmware +uint8 FAULT_INCOMPATIBLE_MODEL = 8 # Battery model is not supported by the system +uint8 FAULT_HARDWARE_FAILURE = 9 # Hardware problem +uint8 FAULT_FAILED_TO_ARM = 10 # Battery had a problem while arming +uint8 FAULT_COUNT = 11 # Counter. Keep this as last element -uint16 faults # [@enum FAULT] Smart battery supply status/fault flags (bitmask) for health indication -uint8 FAULT_DEEP_DISCHARGE = 0 # Battery has deep discharged -uint8 FAULT_SPIKES = 1 # Voltage spikes -uint8 FAULT_CELL_FAIL= 2 # One or more cells have failed -uint8 FAULT_OVER_CURRENT = 3 # Over-current -uint8 FAULT_OVER_TEMPERATURE = 4 # Over-temperature -uint8 FAULT_UNDER_TEMPERATURE = 5 # Under-temperature fault -uint8 FAULT_INCOMPATIBLE_VOLTAGE = 6 # Vehicle voltage is not compatible with this battery (batteries on same power rail should have similar voltage) -uint8 FAULT_INCOMPATIBLE_FIRMWARE = 7 # Battery firmware is not compatible with current autopilot firmware -uint8 FAULT_INCOMPATIBLE_MODEL = 8 # Battery model is not supported by the system -uint8 FAULT_HARDWARE_FAILURE = 9 # Hardware problem -uint8 FAULT_FAILED_TO_ARM = 10 # Battery had a problem while arming -uint8 FAULT_COUNT = 11 # Counter. Keep this as last element +float32 full_charge_capacity_wh # [Wh] Compensated battery capacity +float32 remaining_capacity_wh # [Wh] Compensated battery capacity remaining +uint16 over_discharge_count # [-] Number of battery overdischarge +float32 nominal_voltage # [V] Nominal voltage of the battery pack -float32 full_charge_capacity_wh # [Wh] Compensated battery capacity -float32 remaining_capacity_wh # [Wh] Compensated battery capacity remaining -uint16 over_discharge_count # [-] Number of battery overdischarge -float32 nominal_voltage # [V] Nominal voltage of the battery pack - -float32 internal_resistance_estimate # [Ohm] Internal resistance per cell estimate -float32 ocv_estimate # [V] Open circuit voltage estimate -float32 ocv_estimate_filtered # [V] Filtered open circuit voltage estimate -float32 volt_based_soc_estimate # [-] [@range 0, 1] Normalized volt based state of charge estimate -float32 voltage_prediction # [V] Predicted voltage -float32 prediction_error # [V] Prediction error -float32 estimation_covariance_norm # [-] Norm of the covariance matrix +float32 internal_resistance_estimate # [Ohm] Internal resistance per cell estimate +float32 ocv_estimate # [V] Open circuit voltage estimate +float32 ocv_estimate_filtered # [V] Filtered open circuit voltage estimate +float32 volt_based_soc_estimate # [-] [@range 0, 1] Normalized volt based state of charge estimate +float32 voltage_prediction # [V] Predicted voltage +float32 prediction_error # [V] Prediction error +float32 estimation_covariance_norm # [-] Norm of the covariance matrix ``` ::: diff --git a/docs/zh/msg_docs/BatteryStatusV0.md b/docs/zh/msg_docs/BatteryStatusV0.md index 2d3c1ce06b..f58dc6643c 100644 --- a/docs/zh/msg_docs/BatteryStatusV0.md +++ b/docs/zh/msg_docs/BatteryStatusV0.md @@ -10,7 +10,7 @@ Battery status information for up to 4 battery instances. These are populated from power module and smart battery device drivers, and one battery updated from MAVLink. Battery instance information is also logged and streamed in MAVLink telemetry. -**TOPICS:** battery_statusv0 +**TOPICS:** battery_status_v0 ## Fields @@ -60,52 +60,52 @@ Battery instance information is also logged and streamed in MAVLink telemetry. ### SOURCE {#SOURCE} -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------------------------------- | ------- | - | ----------------------------------------------------------------- | -| SOURCE_POWER_MODULE | `uint8` | 0 | Power module (analog ADC or I2C power monitor) | -| SOURCE_EXTERNAL | `uint8` | 1 | External (MAVLink, CAN, or external driver) | -| SOURCE_ESCS | `uint8` | 2 | ESCs (via ESC telemetry) | +| 参数名 | 类型 | 值 | 描述 | +| ----------------------------------------------------------------------------------------------- | ------- | - | ----------------------------------------------------------------- | +| SOURCE_POWER_MODULE | `uint8` | 0 | Power module (analog ADC or I2C power monitor) | +| SOURCE_EXTERNAL | `uint8` | 1 | External (MAVLink, CAN, or external driver) | +| SOURCE_ESCS | `uint8` | 2 | ESCs (via ESC telemetry) | ### WARNING {#WARNING} -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------ | ------- | - | -------------------------------------------- | -| WARNING_NONE | `uint8` | 0 | No battery low voltage warning active | -| WARNING_LOW | `uint8` | 1 | Low voltage warning | -| WARNING_CRITICAL | `uint8` | 2 | Critical voltage, return / abort immediately | -| WARNING_EMERGENCY | `uint8` | 3 | Immediate landing required | -| WARNING_FAILED | `uint8` | 4 | Battery has failed completely | +| 参数名 | 类型 | 值 | 描述 | +| ---------------------------------------------------------------------- | ------- | - | -------------------------------------------- | +| WARNING_NONE | `uint8` | 0 | No battery low voltage warning active | +| WARNING_LOW | `uint8` | 1 | Low voltage warning | +| WARNING_CRITICAL | `uint8` | 2 | Critical voltage, return / abort immediately | +| WARNING_EMERGENCY | `uint8` | 3 | Immediate landing required | +| WARNING_FAILED | `uint8` | 4 | Battery has failed completely | ### STATE {#STATE} -| 参数名 | 类型 | 值 | 描述 | -| -------------------------------------------------------------------- | ------- | - | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| STATE_UNHEALTHY | `uint8` | 6 | Battery is diagnosed to be defective or an error occurred, usage is discouraged / prohibited. Possible causes (faults) are listed in faults field | -| STATE_CHARGING | `uint8` | 7 | Battery is charging | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------ | ------- | - | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| STATE_UNHEALTHY | `uint8` | 6 | Battery is diagnosed to be defective or an error occurred, usage is discouraged / prohibited. Possible causes (faults) are listed in faults field | +| STATE_CHARGING | `uint8` | 7 | Battery is charging | ### FAULT {#FAULT} -| 参数名 | 类型 | 值 | 描述 | -| ---------------------------------------------------------------------------------------------------------------------- | ------- | -- | --------------------------------------------------------------------------------------------------------------------------------- | -| FAULT_DEEP_DISCHARGE | `uint8` | 0 | Battery has deep discharged | -| FAULT_SPIKES | `uint8` | 1 | Voltage spikes | -| FAULT_CELL_FAIL | `uint8` | 2 | One or more cells have failed | -| FAULT_OVER_CURRENT | `uint8` | 3 | Over-current | -| FAULT_OVER_TEMPERATURE | `uint8` | 4 | Over-temperature | -| FAULT_UNDER_TEMPERATURE | `uint8` | 5 | Under-temperature fault | -| FAULT_INCOMPATIBLE_VOLTAGE | `uint8` | 6 | Vehicle voltage is not compatible with this battery (batteries on same power rail should have similar voltage) | -| FAULT_INCOMPATIBLE_FIRMWARE | `uint8` | 7 | Battery firmware is not compatible with current autopilot firmware | -| FAULT_INCOMPATIBLE_MODEL | `uint8` | 8 | Battery model is not supported by the system | -| FAULT_HARDWARE_FAILURE | `uint8` | 9 | Hardware problem | -| FAULT_FAILED_TO_ARM | `uint8` | 10 | Battery had a problem while arming | -| FAULT_COUNT | `uint8` | 11 | Counter. Keep this as last element | +| 参数名 | 类型 | 值 | 描述 | +| -------------------------------------------------------------------------------------------------------------------- | ------- | -- | --------------------------------------------------------------------------------------------------------------------------------- | +| FAULT_DEEP_DISCHARGE | `uint8` | 0 | Battery has deep discharged | +| FAULT_SPIKES | `uint8` | 1 | Voltage spikes | +| FAULT_CELL_FAIL | `uint8` | 2 | One or more cells have failed | +| FAULT_OVER_CURRENT | `uint8` | 3 | Over-current | +| FAULT_OVER_TEMPERATURE | `uint8` | 4 | Over-temperature | +| FAULT_UNDER_TEMPERATURE | `uint8` | 5 | Under-temperature fault | +| FAULT_INCOMPATIBLE_VOLTAGE | `uint8` | 6 | Vehicle voltage is not compatible with this battery (batteries on same power rail should have similar voltage) | +| FAULT_INCOMPATIBLE_FIRMWARE | `uint8` | 7 | Battery firmware is not compatible with current autopilot firmware | +| FAULT_INCOMPATIBLE_MODEL | `uint8` | 8 | Battery model is not supported by the system | +| FAULT_HARDWARE_FAILURE | `uint8` | 9 | Hardware problem | +| FAULT_FAILED_TO_ARM | `uint8` | 10 | Battery had a problem while arming | +| FAULT_COUNT | `uint8` | 11 | Counter. Keep this as last element | ## Constants -| 参数名 | 类型 | 值 | 描述 | -| -------------------------------------------------------------------- | -------- | - | -- | -| MESSAGE_VERSION | `uint32` | 0 | | -| MAX_INSTANCES | `uint8` | 4 | | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------ | -------- | - | -- | +| MESSAGE_VERSION | `uint32` | 0 | | +| MAX_INSTANCES | `uint8` | 4 | | ## Source Message diff --git a/docs/zh/msg_docs/ButtonEvent.md b/docs/zh/msg_docs/ButtonEvent.md index 161a3ea184..cbedf02801 100644 --- a/docs/zh/msg_docs/ButtonEvent.md +++ b/docs/zh/msg_docs/ButtonEvent.md @@ -15,9 +15,9 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------------------------- | ------- | - | -- | -| ORB_QUEUE_LENGTH | `uint8` | 2 | | +| 参数名 | 类型 | 值 | 描述 | +| ----------------------------------------------------------------------------------------- | ------- | - | -- | +| ORB_QUEUE_LENGTH | `uint8` | 2 | | ## Source Message diff --git a/docs/zh/msg_docs/CameraTrigger.md b/docs/zh/msg_docs/CameraTrigger.md index 5bf8c8cdec..848155d65f 100644 --- a/docs/zh/msg_docs/CameraTrigger.md +++ b/docs/zh/msg_docs/CameraTrigger.md @@ -17,9 +17,9 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------------------------- | -------- | - | -- | -| ORB_QUEUE_LENGTH | `uint32` | 2 | | +| 参数名 | 类型 | 值 | 描述 | +| ----------------------------------------------------------------------------------------- | -------- | - | -- | +| ORB_QUEUE_LENGTH | `uint32` | 2 | | ## Source Message diff --git a/docs/zh/msg_docs/CanInterfaceStatus.md b/docs/zh/msg_docs/CanInterfaceStatus.md index 732a8bd2d7..7234f540c2 100644 --- a/docs/zh/msg_docs/CanInterfaceStatus.md +++ b/docs/zh/msg_docs/CanInterfaceStatus.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # CanInterfaceStatus (UORB message) -**TOPICS:** can_interfacestatus +**TOPICS:** can_interface_status ## Fields diff --git a/docs/zh/msg_docs/CellularStatus.md b/docs/zh/msg_docs/CellularStatus.md index 57bfd5f695..96c61e0317 100644 --- a/docs/zh/msg_docs/CellularStatus.md +++ b/docs/zh/msg_docs/CellularStatus.md @@ -27,40 +27,40 @@ This is currently used only for logging cell status from MAVLink. ### STATUS_FLAG {#STATUS_FLAG} -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------------------------------------------- | -------- | ---- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| STATUS_FLAG_UNKNOWN | `uint16` | 1 | State unknown or not reportable | -| STATUS_FLAG_FAILED | `uint16` | 2 | Modem is unusable | -| STATUS_FLAG_INITIALIZING | `uint16` | 4 | Modem is being initialized | -| STATUS_FLAG_LOCKED | `uint16` | 8 | Modem is locked | -| STATUS_FLAG_DISABLED | `uint16` | 16 | Modem is not enabled and is powered down | -| STATUS_FLAG_DISABLING | `uint16` | 32 | Modem is currently transitioning to the STATUS_FLAG_DISABLED state | -| STATUS_FLAG_ENABLING | `uint16` | 64 | Modem is currently transitioning to the STATUS_FLAG_ENABLED state | -| STATUS_FLAG_ENABLED | `uint16` | 128 | Modem is enabled and powered on but not registered with a network provider and not available for data connections | -| STATUS_FLAG_SEARCHING | `uint16` | 256 | Modem is searching for a network provider to register | -| STATUS_FLAG_REGISTERED | `uint16` | 512 | Modem is registered with a network provider, and data connections and messaging may be available for use | -| STATUS_FLAG_DISCONNECTING | `uint16` | 1024 | Modem is disconnecting and deactivating the last active packet data bearer. This state will not be entered if more than one packet data bearer is active and one of the active bearers is deactivated | -| STATUS_FLAG_CONNECTING | `uint16` | 2048 | Modem is activating and connecting the first packet data bearer. Subsequent bearer activations when another bearer is already active do not cause this state to be entered | -| STATUS_FLAG_CONNECTED | `uint16` | 4096 | One or more packet data bearers is active and connected | +| 参数名 | 类型 | 值 | 描述 | +| ----------------------------------------------------------------------------------------------------------- | -------- | ---- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| STATUS_FLAG_UNKNOWN | `uint16` | 1 | State unknown or not reportable | +| STATUS_FLAG_FAILED | `uint16` | 2 | Modem is unusable | +| STATUS_FLAG_INITIALIZING | `uint16` | 4 | Modem is being initialized | +| STATUS_FLAG_LOCKED | `uint16` | 8 | Modem is locked | +| STATUS_FLAG_DISABLED | `uint16` | 16 | Modem is not enabled and is powered down | +| STATUS_FLAG_DISABLING | `uint16` | 32 | Modem is currently transitioning to the STATUS_FLAG_DISABLED state | +| STATUS_FLAG_ENABLING | `uint16` | 64 | Modem is currently transitioning to the STATUS_FLAG_ENABLED state | +| STATUS_FLAG_ENABLED | `uint16` | 128 | Modem is enabled and powered on but not registered with a network provider and not available for data connections | +| STATUS_FLAG_SEARCHING | `uint16` | 256 | Modem is searching for a network provider to register | +| STATUS_FLAG_REGISTERED | `uint16` | 512 | Modem is registered with a network provider, and data connections and messaging may be available for use | +| STATUS_FLAG_DISCONNECTING | `uint16` | 1024 | Modem is disconnecting and deactivating the last active packet data bearer. This state will not be entered if more than one packet data bearer is active and one of the active bearers is deactivated | +| STATUS_FLAG_CONNECTING | `uint16` | 2048 | Modem is activating and connecting the first packet data bearer. Subsequent bearer activations when another bearer is already active do not cause this state to be entered | +| STATUS_FLAG_CONNECTED | `uint16` | 4096 | One or more packet data bearers is active and connected | ### FAILURE_REASON {#FAILURE_REASON} -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------------------------------------------------------------------ | ------- | - | ----------------------------------------------- | -| FAILURE_REASON_NONE | `uint8` | 0 | No error | -| FAILURE_REASON_UNKNOWN | `uint8` | 1 | Error state is unknown | -| FAILURE_REASON_SIM_MISSING | `uint8` | 2 | SIM is required for the modem but missing | -| FAILURE_REASON_SIM_ERROR | `uint8` | 3 | SIM is available, but not usable for connection | +| 参数名 | 类型 | 值 | 描述 | +| ---------------------------------------------------------------------------------------------------------------------------------- | ------- | - | ----------------------------------------------- | +| FAILURE_REASON_NONE | `uint8` | 0 | No error | +| FAILURE_REASON_UNKNOWN | `uint8` | 1 | Error state is unknown | +| FAILURE_REASON_SIM_MISSING | `uint8` | 2 | SIM is required for the modem but missing | +| FAILURE_REASON_SIM_ERROR | `uint8` | 3 | SIM is available, but not usable for connection | ### CELLULAR_NETWORK_RADIO_TYPE {#CELLULAR_NETWORK_RADIO_TYPE} -| 参数名 | 类型 | 值 | 描述 | -| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | - | ----- | -| CELLULAR_NETWORK_RADIO_TYPE_NONE | `uint8` | 0 | None | -| CELLULAR_NETWORK_RADIO_TYPE_GSM | `uint8` | 1 | GSM | -| CELLULAR_NETWORK_RADIO_TYPE_CDMA | `uint8` | 2 | CDMA | -| CELLULAR_NETWORK_RADIO_TYPE_WCDMA | `uint8` | 3 | WCDMA | -| CELLULAR_NETWORK_RADIO_TYPE_LTE | `uint8` | 4 | LTE | +| 参数名 | 类型 | 值 | 描述 | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | - | ----- | +| CELLULAR_NETWORK_RADIO_TYPE_NONE | `uint8` | 0 | None | +| CELLULAR_NETWORK_RADIO_TYPE_GSM | `uint8` | 1 | GSM | +| CELLULAR_NETWORK_RADIO_TYPE_CDMA | `uint8` | 2 | CDMA | +| CELLULAR_NETWORK_RADIO_TYPE_WCDMA | `uint8` | 3 | WCDMA | +| CELLULAR_NETWORK_RADIO_TYPE_LTE | `uint8` | 4 | LTE | ## Source Message diff --git a/docs/zh/msg_docs/ConfigOverrides.md b/docs/zh/msg_docs/ConfigOverrides.md index 198b320a4a..6864e60d5a 100644 --- a/docs/zh/msg_docs/ConfigOverrides.md +++ b/docs/zh/msg_docs/ConfigOverrides.md @@ -22,12 +22,12 @@ Configurable overrides by (external) modes or mode executors. ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ---------------------------------------------------------------------------------------------------------------------------------- | -------- | - | -- | -| MESSAGE_VERSION | `uint32` | 1 | | -| SOURCE_TYPE_MODE | `int8` | 0 | | -| SOURCE_TYPE_MODE_EXECUTOR | `int8` | 1 | | -| ORB_QUEUE_LENGTH | `uint8` | 4 | | +| 参数名 | 类型 | 值 | 描述 | +| -------------------------------------------------------------------------------------------------------------------------------- | -------- | - | -- | +| MESSAGE_VERSION | `uint32` | 1 | | +| SOURCE_TYPE_MODE | `int8` | 0 | | +| SOURCE_TYPE_MODE_EXECUTOR | `int8` | 1 | | +| ORB_QUEUE_LENGTH | `uint8` | 4 | | ## Source Message diff --git a/docs/zh/msg_docs/ConfigOverridesV0.md b/docs/zh/msg_docs/ConfigOverridesV0.md index f091abce99..7abfbc0e7b 100644 --- a/docs/zh/msg_docs/ConfigOverridesV0.md +++ b/docs/zh/msg_docs/ConfigOverridesV0.md @@ -21,12 +21,12 @@ Configurable overrides by (external) modes or mode executors. ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ---------------------------------------------------------------------------------------------------------------------------------- | -------- | - | -- | -| MESSAGE_VERSION | `uint32` | 0 | | -| SOURCE_TYPE_MODE | `int8` | 0 | | -| SOURCE_TYPE_MODE_EXECUTOR | `int8` | 1 | | -| ORB_QUEUE_LENGTH | `uint8` | 4 | | +| 参数名 | 类型 | 值 | 描述 | +| -------------------------------------------------------------------------------------------------------------------------------- | -------- | - | -- | +| MESSAGE_VERSION | `uint32` | 0 | | +| SOURCE_TYPE_MODE | `int8` | 0 | | +| SOURCE_TYPE_MODE_EXECUTOR | `int8` | 1 | | +| ORB_QUEUE_LENGTH | `uint8` | 4 | | ## Source Message diff --git a/docs/zh/msg_docs/ControlAllocatorStatus.md b/docs/zh/msg_docs/ControlAllocatorStatus.md index 5734f740d8..1f57d5a748 100644 --- a/docs/zh/msg_docs/ControlAllocatorStatus.md +++ b/docs/zh/msg_docs/ControlAllocatorStatus.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # ControlAllocatorStatus (UORB message) -**TOPICS:** control_allocatorstatus +**TOPICS:** control_allocator_status ## Fields @@ -21,13 +21,13 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------------------------------------------------------------------------ | ------ | -- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | -| ACTUATOR_SATURATION_OK | `int8` | 0 | The actuator is not saturated | -| ACTUATOR_SATURATION_UPPER_DYN | `int8` | 1 | The actuator is saturated (with a value <= the desired value) because it cannot increase its value faster | -| ACTUATOR_SATURATION_UPPER | `int8` | 2 | The actuator is saturated (with a value <= the desired value) because it has reached its maximum value | -| ACTUATOR_SATURATION_LOWER_DYN | `int8` | -1 | The actuator is saturated (with a value >= the desired value) because it cannot decrease its value faster | -| ACTUATOR_SATURATION_LOWER | `int8` | -2 | The actuator is saturated (with a value >= the desired value) because it has reached its minimum value | +| 参数名 | 类型 | 值 | 描述 | +| ---------------------------------------------------------------------------------------------------------------------------------------- | ------ | -- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | +| ACTUATOR_SATURATION_OK | `int8` | 0 | The actuator is not saturated | +| ACTUATOR_SATURATION_UPPER_DYN | `int8` | 1 | The actuator is saturated (with a value <= the desired value) because it cannot increase its value faster | +| ACTUATOR_SATURATION_UPPER | `int8` | 2 | The actuator is saturated (with a value <= the desired value) because it has reached its maximum value | +| ACTUATOR_SATURATION_LOWER_DYN | `int8` | -1 | The actuator is saturated (with a value >= the desired value) because it cannot decrease its value faster | +| ACTUATOR_SATURATION_LOWER | `int8` | -2 | The actuator is saturated (with a value >= the desired value) because it has reached its minimum value | ## Source Message diff --git a/docs/zh/msg_docs/DatamanResponse.md b/docs/zh/msg_docs/DatamanResponse.md index b719146c23..74a7dff329 100644 --- a/docs/zh/msg_docs/DatamanResponse.md +++ b/docs/zh/msg_docs/DatamanResponse.md @@ -20,14 +20,14 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| -------------------------------------------------------------------------------------------------------------------------------------- | ------- | - | -- | -| STATUS_SUCCESS | `uint8` | 0 | | -| STATUS_FAILURE_ID_ERR | `uint8` | 1 | | -| STATUS_FAILURE_NO_DATA | `uint8` | 2 | | -| STATUS_FAILURE_READ_FAILED | `uint8` | 3 | | -| STATUS_FAILURE_WRITE_FAILED | `uint8` | 4 | | -| STATUS_FAILURE_CLEAR_FAILED | `uint8` | 5 | | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------------------------------------------------------------------------ | ------- | - | -- | +| STATUS_SUCCESS | `uint8` | 0 | | +| STATUS_FAILURE_ID_ERR | `uint8` | 1 | | +| STATUS_FAILURE_NO_DATA | `uint8` | 2 | | +| STATUS_FAILURE_READ_FAILED | `uint8` | 3 | | +| STATUS_FAILURE_WRITE_FAILED | `uint8` | 4 | | +| STATUS_FAILURE_CLEAR_FAILED | `uint8` | 5 | | ## Source Message diff --git a/docs/zh/msg_docs/DebugArray.md b/docs/zh/msg_docs/DebugArray.md index e0998ce320..59e3352335 100644 --- a/docs/zh/msg_docs/DebugArray.md +++ b/docs/zh/msg_docs/DebugArray.md @@ -17,9 +17,9 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ---------------------------------------------------------- | ------- | -- | -- | -| ARRAY_SIZE | `uint8` | 58 | | +| 参数名 | 类型 | 值 | 描述 | +| -------------------------------------------------------- | ------- | -- | -- | +| ARRAY_SIZE | `uint8` | 58 | | ## Source Message diff --git a/docs/zh/msg_docs/DebugKeyValue.md b/docs/zh/msg_docs/DebugKeyValue.md index 66a7719589..1e15f359a7 100644 --- a/docs/zh/msg_docs/DebugKeyValue.md +++ b/docs/zh/msg_docs/DebugKeyValue.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # DebugKeyValue (UORB message) -**TOPICS:** debug_keyvalue +**TOPICS:** debug_key_value ## Fields diff --git a/docs/zh/msg_docs/DeviceInformation.md b/docs/zh/msg_docs/DeviceInformation.md index e1686f4a81..bc08899c2f 100644 --- a/docs/zh/msg_docs/DeviceInformation.md +++ b/docs/zh/msg_docs/DeviceInformation.md @@ -17,8 +17,7 @@ as well as tracking of the used firmware versions on the devices. | ------------------------------------- | ---------- | ---------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | | timestamp | `uint64` | | | time since system start (microseconds) | | device_type | `uint8` | | [DEVICE_TYPE](#DEVICE_TYPE) | Type of the device. Matches MAVLink DEVICE_TYPE enum | -| vendor_name | `char[32]` | | | Name of the device vendor | -| model_name | `char[32]` | | | Name of the device model | +| name | `char[80]` | | | Name of device e.g. DroneCAN node name | | `uint32` | | | Unique device ID for the sensor. Does not change between power cycles. (Invalid: 0 if not available) | | | firmware_version | `char[24]` | | | Firmware version. (Invalid: empty if not available) | | hardware_version | `char[24]` | | | Hardware version. (Invalid: empty if not available) | @@ -28,24 +27,24 @@ as well as tracking of the used firmware versions on the devices. ### DEVICE_TYPE {#DEVICE_TYPE} -| 参数名 | 类型 | 值 | 描述 | -| -------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | -- | ---------------------- | -| DEVICE_TYPE_GENERIC | `uint8` | 0 | Generic/unknown sensor | -| DEVICE_TYPE_AIRSPEED | `uint8` | 1 | 空速传感器 | -| DEVICE_TYPE_ESC | `uint8` | 2 | ESC | -| DEVICE_TYPE_SERVO | `uint8` | 3 | Servo | -| DEVICE_TYPE_GPS | `uint8` | 4 | GPS | -| DEVICE_TYPE_MAGNETOMETER | `uint8` | 5 | 磁力计 | -| DEVICE_TYPE_PARACHUTE | `uint8` | 6 | 降落伞 | -| DEVICE_TYPE_RANGEFINDER | `uint8` | 7 | Rangefinder | -| DEVICE_TYPE_WINCH | `uint8` | 8 | Winch | -| DEVICE_TYPE_BAROMETER | `uint8` | 9 | Barometer | -| DEVICE_TYPE_OPTICAL_FLOW | `uint8` | 10 | Optical flow | -| DEVICE_TYPE_ACCELEROMETER | `uint8` | 11 | Accelerometer | -| DEVICE_TYPE_GYROSCOPE | `uint8` | 12 | Gyroscope | -| DEVICE_TYPE_DIFFERENTIAL_PRESSURE | `uint8` | 13 | Differential pressure | -| DEVICE_TYPE_BATTERY | `uint8` | 14 | Battery | -| DEVICE_TYPE_HYGROMETER | `uint8` | 15 | Hygrometer | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------------------------------------------------------------------------------------ | ------- | -- | ---------------------- | +| DEVICE_TYPE_GENERIC | `uint8` | 0 | Generic/unknown sensor | +| DEVICE_TYPE_AIRSPEED | `uint8` | 1 | 空速传感器 | +| DEVICE_TYPE_ESC | `uint8` | 2 | ESC | +| DEVICE_TYPE_SERVO | `uint8` | 3 | Servo | +| DEVICE_TYPE_GPS | `uint8` | 4 | GPS | +| DEVICE_TYPE_MAGNETOMETER | `uint8` | 5 | 磁力计 | +| DEVICE_TYPE_PARACHUTE | `uint8` | 6 | 降落伞 | +| DEVICE_TYPE_RANGEFINDER | `uint8` | 7 | Rangefinder | +| DEVICE_TYPE_WINCH | `uint8` | 8 | Winch | +| DEVICE_TYPE_BAROMETER | `uint8` | 9 | Barometer | +| DEVICE_TYPE_OPTICAL_FLOW | `uint8` | 10 | Optical flow | +| DEVICE_TYPE_ACCELEROMETER | `uint8` | 11 | Accelerometer | +| DEVICE_TYPE_GYROSCOPE | `uint8` | 12 | Gyroscope | +| DEVICE_TYPE_DIFFERENTIAL_PRESSURE | `uint8` | 13 | Differential pressure | +| DEVICE_TYPE_BATTERY | `uint8` | 14 | Battery | +| DEVICE_TYPE_HYGROMETER | `uint8` | 15 | Hygrometer | ## Source Message @@ -63,7 +62,6 @@ Click here to see original file uint64 timestamp # time since system start (microseconds) uint8 device_type # [@enum DEVICE_TYPE] Type of the device. Matches MAVLink DEVICE_TYPE enum - uint8 DEVICE_TYPE_GENERIC = 0 # Generic/unknown sensor uint8 DEVICE_TYPE_AIRSPEED = 1 # Airspeed sensor uint8 DEVICE_TYPE_ESC = 2 # ESC @@ -81,8 +79,7 @@ uint8 DEVICE_TYPE_DIFFERENTIAL_PRESSURE = 13 # Differential pressure uint8 DEVICE_TYPE_BATTERY = 14 # Battery uint8 DEVICE_TYPE_HYGROMETER = 15 # Hygrometer -char[32] vendor_name # Name of the device vendor -char[32] model_name # Name of the device model +char[80] name # Name of device e.g. DroneCAN node name uint32 device_id # [-] [@invalid 0 if not available] Unique device ID for the sensor. Does not change between power cycles. char[24] firmware_version # [-] [@invalid empty if not available] Firmware version. diff --git a/docs/zh/msg_docs/DistanceSensor.md b/docs/zh/msg_docs/DistanceSensor.md index 33ccfef699..241eb5a9ae 100644 --- a/docs/zh/msg_docs/DistanceSensor.md +++ b/docs/zh/msg_docs/DistanceSensor.md @@ -28,30 +28,30 @@ DISTANCE_SENSOR message data. ## Constants -| 参数名 | 类型 | 值 | 描述 | -| -------------------------------------------------------------------------------------------------------------------------------------------- | ------- | --- | ----------------------------------------------------------------------------------------------------------------- | -| MAV_DISTANCE_SENSOR_LASER | `uint8` | 0 | | -| MAV_DISTANCE_SENSOR_ULTRASOUND | `uint8` | 1 | | -| MAV_DISTANCE_SENSOR_INFRARED | `uint8` | 2 | | -| MAV_DISTANCE_SENSOR_RADAR | `uint8` | 3 | | -| ROTATION_YAW_0 | `uint8` | 0 | MAV_SENSOR_ROTATION_NONE | -| ROTATION_YAW_45 | `uint8` | 1 | MAV_SENSOR_ROTATION_YAW_45 | -| ROTATION_YAW_90 | `uint8` | 2 | MAV_SENSOR_ROTATION_YAW_90 | -| ROTATION_YAW_135 | `uint8` | 3 | MAV_SENSOR_ROTATION_YAW_135 | -| ROTATION_YAW_180 | `uint8` | 4 | MAV_SENSOR_ROTATION_YAW_180 | -| ROTATION_YAW_225 | `uint8` | 5 | MAV_SENSOR_ROTATION_YAW_225 | -| ROTATION_YAW_270 | `uint8` | 6 | MAV_SENSOR_ROTATION_YAW_270 | -| ROTATION_YAW_315 | `uint8` | 7 | MAV_SENSOR_ROTATION_YAW_315 | -| ROTATION_FORWARD_FACING | `uint8` | 0 | MAV_SENSOR_ROTATION_NONE | -| ROTATION_RIGHT_FACING | `uint8` | 2 | MAV_SENSOR_ROTATION_YAW_90 | -| ROTATION_BACKWARD_FACING | `uint8` | 4 | MAV_SENSOR_ROTATION_YAW_180 | -| ROTATION_LEFT_FACING | `uint8` | 6 | MAV_SENSOR_ROTATION_YAW_270 | -| ROTATION_UPWARD_FACING | `uint8` | 24 | MAV_SENSOR_ROTATION_PITCH_90 | -| ROTATION_DOWNWARD_FACING | `uint8` | 25 | MAV_SENSOR_ROTATION_PITCH_270 | -| ROTATION_CUSTOM | `uint8` | 100 | MAV_SENSOR_ROTATION_CUSTOM | -| MODE_UNKNOWN | `uint8` | 0 | | -| MODE_ENABLED | `uint8` | 1 | | -| MODE_DISABLED | `uint8` | 2 | | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------------------------------------------------------------------------------ | ------- | --- | ----------------------------------------------------------------------------------------------------------------- | +| MAV_DISTANCE_SENSOR_LASER | `uint8` | 0 | | +| MAV_DISTANCE_SENSOR_ULTRASOUND | `uint8` | 1 | | +| MAV_DISTANCE_SENSOR_INFRARED | `uint8` | 2 | | +| MAV_DISTANCE_SENSOR_RADAR | `uint8` | 3 | | +| ROTATION_YAW_0 | `uint8` | 0 | MAV_SENSOR_ROTATION_NONE | +| ROTATION_YAW_45 | `uint8` | 1 | MAV_SENSOR_ROTATION_YAW_45 | +| ROTATION_YAW_90 | `uint8` | 2 | MAV_SENSOR_ROTATION_YAW_90 | +| ROTATION_YAW_135 | `uint8` | 3 | MAV_SENSOR_ROTATION_YAW_135 | +| ROTATION_YAW_180 | `uint8` | 4 | MAV_SENSOR_ROTATION_YAW_180 | +| ROTATION_YAW_225 | `uint8` | 5 | MAV_SENSOR_ROTATION_YAW_225 | +| ROTATION_YAW_270 | `uint8` | 6 | MAV_SENSOR_ROTATION_YAW_270 | +| ROTATION_YAW_315 | `uint8` | 7 | MAV_SENSOR_ROTATION_YAW_315 | +| ROTATION_FORWARD_FACING | `uint8` | 0 | MAV_SENSOR_ROTATION_NONE | +| ROTATION_RIGHT_FACING | `uint8` | 2 | MAV_SENSOR_ROTATION_YAW_90 | +| ROTATION_BACKWARD_FACING | `uint8` | 4 | MAV_SENSOR_ROTATION_YAW_180 | +| ROTATION_LEFT_FACING | `uint8` | 6 | MAV_SENSOR_ROTATION_YAW_270 | +| ROTATION_UPWARD_FACING | `uint8` | 24 | MAV_SENSOR_ROTATION_PITCH_90 | +| ROTATION_DOWNWARD_FACING | `uint8` | 25 | MAV_SENSOR_ROTATION_PITCH_270 | +| ROTATION_CUSTOM | `uint8` | 100 | MAV_SENSOR_ROTATION_CUSTOM | +| MODE_UNKNOWN | `uint8` | 0 | | +| MODE_ENABLED | `uint8` | 1 | | +| MODE_DISABLED | `uint8` | 2 | | ## Source Message diff --git a/docs/zh/msg_docs/DistanceSensorModeChangeRequest.md b/docs/zh/msg_docs/DistanceSensorModeChangeRequest.md index 271c8282ac..c834d4db2e 100644 --- a/docs/zh/msg_docs/DistanceSensorModeChangeRequest.md +++ b/docs/zh/msg_docs/DistanceSensorModeChangeRequest.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # DistanceSensorModeChangeRequest (UORB message) -**TOPICS:** distance_sensormode_changerequest +**TOPICS:** distance_sensor_mode_change_request ## Fields @@ -15,10 +15,10 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------ | ------- | - | -- | -| REQUEST_OFF | `uint8` | 0 | | -| REQUEST_ON | `uint8` | 1 | | +| 参数名 | 类型 | 值 | 描述 | +| ---------------------------------------------------------- | ------- | - | -- | +| REQUEST_OFF | `uint8` | 0 | | +| REQUEST_ON | `uint8` | 1 | | ## Source Message diff --git a/docs/zh/msg_docs/DronecanNodeStatus.md b/docs/zh/msg_docs/DronecanNodeStatus.md index 46211f26c3..aa883385e6 100644 --- a/docs/zh/msg_docs/DronecanNodeStatus.md +++ b/docs/zh/msg_docs/DronecanNodeStatus.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # DronecanNodeStatus (UORB message) -**TOPICS:** dronecan_nodestatus +**TOPICS:** dronecan_node_status ## Fields @@ -20,17 +20,17 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| --------------------------------------------------------------------------------------------------- | ------- | - | ------------------------------------------------------------------------------------------------- | -| HEALTH_OK | `uint8` | 0 | The node is functioning properly. | -| HEALTH_WARNING | `uint8` | 1 | A critical parameter went out of range or the node encountered a minor failure. | -| HEALTH_ERROR | `uint8` | 2 | The node encountered a major failure. | -| HEALTH_CRITICAL | `uint8` | 3 | The node suffered a fatal malfunction. | -| MODE_OPERATIONAL | `uint8` | 0 | Normal operating mode. | -| MODE_INITIALIZATION | `uint8` | 1 | Initialization is in progress; this mode is entered immediately after startup. | -| MODE_MAINTENANCE | `uint8` | 2 | E.g. calibration, the bootloader is running, etc. | -| MODE_SOFTWARE_UPDATE | `uint8` | 3 | New software/firmware is being loaded. | -| MODE_OFFLINE | `uint8` | 7 | The node is no longer available. | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------------------------------------- | ------- | - | ------------------------------------------------------------------------------------------------- | +| HEALTH_OK | `uint8` | 0 | The node is functioning properly. | +| HEALTH_WARNING | `uint8` | 1 | A critical parameter went out of range or the node encountered a minor failure. | +| HEALTH_ERROR | `uint8` | 2 | The node encountered a major failure. | +| HEALTH_CRITICAL | `uint8` | 3 | The node suffered a fatal malfunction. | +| MODE_OPERATIONAL | `uint8` | 0 | Normal operating mode. | +| MODE_INITIALIZATION | `uint8` | 1 | Initialization is in progress; this mode is entered immediately after startup. | +| MODE_MAINTENANCE | `uint8` | 2 | E.g. calibration, the bootloader is running, etc. | +| MODE_SOFTWARE_UPDATE | `uint8` | 3 | New software/firmware is being loaded. | +| MODE_OFFLINE | `uint8` | 7 | The node is no longer available. | ## Source Message diff --git a/docs/zh/msg_docs/Ekf2Timestamps.md b/docs/zh/msg_docs/Ekf2Timestamps.md index c5ecbb7693..895a6a8022 100644 --- a/docs/zh/msg_docs/Ekf2Timestamps.md +++ b/docs/zh/msg_docs/Ekf2Timestamps.md @@ -23,9 +23,9 @@ this message contains the (relative) timestamps of the sensor inputs used by EKF ## Constants -| 参数名 | 类型 | 值 | 描述 | -| --------------------------------------------------------------------------------------------------------------- | ------- | ----- | ------------------------------------------------------------- | -| RELATIVE_TIMESTAMP_INVALID | `int16` | 32767 | (0x7fff) If one of the relative timestamps | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------------------------------------------------- | ------- | ----- | ------------------------------------------------------------- | +| RELATIVE_TIMESTAMP_INVALID | `int16` | 32767 | (0x7fff) If one of the relative timestamps | ## Source Message diff --git a/docs/zh/msg_docs/EscEepromRead.md b/docs/zh/msg_docs/EscEepromRead.md new file mode 100644 index 0000000000..a2a63b64ef --- /dev/null +++ b/docs/zh/msg_docs/EscEepromRead.md @@ -0,0 +1,42 @@ +--- +pageClass: is-wide-page +--- + +# EscEepromRead (UORB message) + +**TOPICS:** esc_eeprom_read + +## Fields + +| 参数名 | 类型 | Unit [Frame] | Range/Enum | 描述 | +| --------- | ----------- | ---------------------------------------------------------------- | ---------- | -------------------------------------------------------------------------------------------- | +| timestamp | `uint64` | us | | Time since system start | +| firmware | `uint8` | | | ESC firmware type (see ESC_FIRMWARE enum in MAVLink) | +| index | `uint8` | | | Index of the ESC (0 = ESC1, 1 = ESC2, etc.) | +| length | `uint16` | | | Length of valid data | +| data | `uint8[48]` | | | Raw ESC EEPROM data | + +## Constants + +| 参数名 | 类型 | 值 | 描述 | +| ----------------------------------------------------------------------------------------- | ------- | - | -------------------------------- | +| ORB_QUEUE_LENGTH | `uint8` | 8 | To support 8 queued up responses | + +## Source Message + +[Source file (GitHub)](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EscEepromRead.msg) + +:::details +Click here to see original file + +```c +uint64 timestamp # [us] Time since system start +uint8 firmware # [-] ESC firmware type (see ESC_FIRMWARE enum in MAVLink) +uint8 index # [-] Index of the ESC (0 = ESC1, 1 = ESC2, etc.) +uint16 length # [-] Length of valid data +uint8[48] data # [-] Raw ESC EEPROM data + +uint8 ORB_QUEUE_LENGTH = 8 # To support 8 queued up responses +``` + +::: diff --git a/docs/zh/msg_docs/EscEepromWrite.md b/docs/zh/msg_docs/EscEepromWrite.md new file mode 100644 index 0000000000..8479a86020 --- /dev/null +++ b/docs/zh/msg_docs/EscEepromWrite.md @@ -0,0 +1,44 @@ +--- +pageClass: is-wide-page +--- + +# EscEepromWrite (UORB message) + +**TOPICS:** esc_eeprom_write + +## Fields + +| 参数名 | 类型 | Unit [Frame] | Range/Enum | 描述 | +| ------------------------------- | ----------- | ---------------------------------------------------------------- | ---------- | ----------------------------------------------------------------------------------------------------- | +| timestamp | `uint64` | us | | Time since system start | +| firmware | `uint8` | | | ESC firmware type (see ESC_FIRMWARE enum in MAVLink) | +| index | `uint8` | | | Index of the ESC (0 = ESC1, 1 = ESC2, etc, 255 = All) | +| length | `uint16` | | | Length of valid data | +| data | `uint8[48]` | | | Raw ESC EEPROM data | +| write_mask | `uint32[2]` | | | Bitmask indicating which bytes in the data array should be written (max 48 values) | + +## Constants + +| 参数名 | 类型 | 值 | 描述 | +| ----------------------------------------------------------------------------------------- | ------- | - | ------------------------------- | +| ORB_QUEUE_LENGTH | `uint8` | 8 | To support 8 queued up requests | + +## Source Message + +[Source file (GitHub)](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EscEepromWrite.msg) + +:::details +Click here to see original file + +```c +uint64 timestamp # [us] Time since system start +uint8 firmware # [-] ESC firmware type (see ESC_FIRMWARE enum in MAVLink) +uint8 index # [-] Index of the ESC (0 = ESC1, 1 = ESC2, etc, 255 = All) +uint16 length # [-] Length of valid data +uint8[48] data # [-] Raw ESC EEPROM data +uint32[2] write_mask # [-] Bitmask indicating which bytes in the data array should be written (max 48 values) + +uint8 ORB_QUEUE_LENGTH = 8 # To support 8 queued up requests +``` + +::: diff --git a/docs/zh/msg_docs/EscReport.md b/docs/zh/msg_docs/EscReport.md index 6fbde14d4c..59f4aaeec6 100644 --- a/docs/zh/msg_docs/EscReport.md +++ b/docs/zh/msg_docs/EscReport.md @@ -8,48 +8,44 @@ pageClass: is-wide-page ## Fields -| 参数名 | 类型 | Unit [Frame] | Range/Enum | 描述 | -| -------------------------------------- | --------- | ---------------------------------------------------------------- | ---------- | -------------------------------------------------------------------------------------------------------------------- | -| timestamp | `uint64` | | | time since system start (microseconds) | -| esc_errorcount | `uint32` | | | Number of reported errors by ESC - if supported | -| esc_rpm | `int32` | | | Motor RPM, negative for reverse rotation [RPM] - if supported | -| esc_voltage | `float32` | | | Voltage measured from current ESC [V] - if supported | -| esc_current | `float32` | | | Current measured from current ESC [A] - if supported | -| esc_temperature | `float32` | | | Temperature measured from current ESC [degC] - if supported | -| esc_address | `uint8` | | | Address of current ESC (in most cases 1-8 / must be set by driver) | -| esc_cmdcount | `uint8` | | | Counter of number of commands | -| esc_state | `uint8` | | | State of ESC - depend on Vendor | -| actuator_function | `uint8` | | | actuator output function (one of Motor1...MotorN) | -| failures | `uint16` | | | Bitmask to indicate the internal ESC faults | -| esc_power | `int8` | | | Applied power 0-100 in % (negative values reserved) | +| 参数名 | 类型 | Unit [Frame] | Range/Enum | 描述 | +| -------------------------------------- | --------- | ---------------------------------------------------------------- | ----------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | +| timestamp | `uint64` | us | | Time since system start | +| esc_errorcount | `uint32` | | | Number of reported errors by ESC - if supported | +| esc_rpm | `int32` | rpm | | Motor RPM, negative for reverse rotation - if supported | +| esc_voltage | `float32` | V | | Voltage measured from current ESC - if supported | +| esc_current | `float32` | A | | Current measured from current ESC - if supported | +| esc_temperature | `float32` | degC | | Temperature measured from current ESC - if supported | +| motor_temperature | `int16` | degC | | Temperature measured from current motor - if supported | +| esc_state | `uint8` | | | State of ESC - depend on Vendor | +| actuator_function | `uint8` | | | Actuator output function (one of Motor1...MotorN) | +| failures | `uint16` | | [FAILURE](#FAILURE) | Bitmask to indicate the internal ESC faults | +| esc_power | `int8` | % | [0 : 100] | Applied power (negative values reserved) | + +## Enums + +### FAILURE {#FAILURE} + +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------------------------------------------------------------------------------ | ------- | - | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| FAILURE_OVER_CURRENT | `uint8` | 0 | (1 << 0) | +| FAILURE_OVER_VOLTAGE | `uint8` | 1 | (1 << 1) | +| FAILURE_MOTOR_OVER_TEMPERATURE | `uint8` | 2 | (1 << 2) | +| FAILURE_OVER_RPM | `uint8` | 3 | (1 << 3) | +| FAILURE_INCONSISTENT_CMD | `uint8` | 4 | (1 << 4) Set if ESC received an inconsistent command (i.e out of boundaries) | +| FAILURE_MOTOR_STUCK | `uint8` | 5 | (1 << 5) | +| FAILURE_GENERIC | `uint8` | 6 | (1 << 6) | +| FAILURE_MOTOR_WARN_TEMPERATURE | `uint8` | 7 | (1 << 7) | +| FAILURE_WARN_ESC_TEMPERATURE | `uint8` | 8 | (1 << 8) | +| FAILURE_OVER_ESC_TEMPERATURE | `uint8` | 9 | (1 << 9) | ## Constants -| 参数名 | 类型 | 值 | 描述 | -| -------------------------------------------------------------------------------------------------------------------------------------------- | ------- | --- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| ACTUATOR_FUNCTION_MOTOR1 | `uint8` | 101 | | -| ACTUATOR_FUNCTION_MOTOR2 | `uint8` | 102 | | -| ACTUATOR_FUNCTION_MOTOR3 | `uint8` | 103 | | -| ACTUATOR_FUNCTION_MOTOR4 | `uint8` | 104 | | -| ACTUATOR_FUNCTION_MOTOR5 | `uint8` | 105 | | -| ACTUATOR_FUNCTION_MOTOR6 | `uint8` | 106 | | -| ACTUATOR_FUNCTION_MOTOR7 | `uint8` | 107 | | -| ACTUATOR_FUNCTION_MOTOR8 | `uint8` | 108 | | -| ACTUATOR_FUNCTION_MOTOR9 | `uint8` | 109 | | -| ACTUATOR_FUNCTION_MOTOR10 | `uint8` | 110 | | -| ACTUATOR_FUNCTION_MOTOR11 | `uint8` | 111 | | -| ACTUATOR_FUNCTION_MOTOR12 | `uint8` | 112 | | -| FAILURE_OVER_CURRENT | `uint8` | 0 | (1 << 0) | -| FAILURE_OVER_VOLTAGE | `uint8` | 1 | (1 << 1) | -| FAILURE_MOTOR_OVER_TEMPERATURE | `uint8` | 2 | (1 << 2) | -| FAILURE_OVER_RPM | `uint8` | 3 | (1 << 3) | -| FAILURE_INCONSISTENT_CMD | `uint8` | 4 | (1 << 4) Set if ESC received an inconsistent command (i.e out of boundaries) | -| FAILURE_MOTOR_STUCK | `uint8` | 5 | (1 << 5) | -| FAILURE_GENERIC | `uint8` | 6 | (1 << 6) | -| FAILURE_MOTOR_WARN_TEMPERATURE | `uint8` | 7 | (1 << 7) | -| FAILURE_WARN_ESC_TEMPERATURE | `uint8` | 8 | (1 << 8) | -| FAILURE_OVER_ESC_TEMPERATURE | `uint8` | 9 | (1 << 9) | -| ESC_FAILURE_COUNT | `uint8` | 10 | Counter - keep it as last element! | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------------------------------------------------------------------------ | ------- | --- | ------------------------------------------------------------------------------------------------------------------------ | +| ACTUATOR_FUNCTION_MOTOR1 | `uint8` | 101 | | +| ACTUATOR_FUNCTION_MOTOR_MAX | `uint8` | 112 | output_functions.yaml Motor.start + Motor.count - 1 | +| ESC_FAILURE_COUNT | `uint8` | 10 | Counter - keep it as last element! | ## Source Message @@ -59,46 +55,36 @@ pageClass: is-wide-page Click here to see original file ```c -uint64 timestamp # time since system start (microseconds) -uint32 esc_errorcount # Number of reported errors by ESC - if supported -int32 esc_rpm # Motor RPM, negative for reverse rotation [RPM] - if supported -float32 esc_voltage # Voltage measured from current ESC [V] - if supported -float32 esc_current # Current measured from current ESC [A] - if supported -float32 esc_temperature # Temperature measured from current ESC [degC] - if supported -uint8 esc_address # Address of current ESC (in most cases 1-8 / must be set by driver) -uint8 esc_cmdcount # Counter of number of commands +uint64 timestamp # [us] Time since system start -uint8 esc_state # State of ESC - depend on Vendor +uint32 esc_errorcount # [-] Number of reported errors by ESC - if supported +int32 esc_rpm # [rpm] Motor RPM, negative for reverse rotation - if supported +float32 esc_voltage # [V] Voltage measured from current ESC - if supported +float32 esc_current # [A] Current measured from current ESC - if supported +float32 esc_temperature # [degC] Temperature measured from current ESC - if supported +int16 motor_temperature # [degC] Temperature measured from current motor - if supported -uint8 actuator_function # actuator output function (one of Motor1...MotorN) +uint8 esc_state # [-] State of ESC - depend on Vendor + +uint8 actuator_function # [-] Actuator output function (one of Motor1...MotorN) uint8 ACTUATOR_FUNCTION_MOTOR1 = 101 -uint8 ACTUATOR_FUNCTION_MOTOR2 = 102 -uint8 ACTUATOR_FUNCTION_MOTOR3 = 103 -uint8 ACTUATOR_FUNCTION_MOTOR4 = 104 -uint8 ACTUATOR_FUNCTION_MOTOR5 = 105 -uint8 ACTUATOR_FUNCTION_MOTOR6 = 106 -uint8 ACTUATOR_FUNCTION_MOTOR7 = 107 -uint8 ACTUATOR_FUNCTION_MOTOR8 = 108 -uint8 ACTUATOR_FUNCTION_MOTOR9 = 109 -uint8 ACTUATOR_FUNCTION_MOTOR10 = 110 -uint8 ACTUATOR_FUNCTION_MOTOR11 = 111 -uint8 ACTUATOR_FUNCTION_MOTOR12 = 112 +uint8 ACTUATOR_FUNCTION_MOTOR_MAX = 112 # output_functions.yaml Motor.start + Motor.count - 1 -uint16 failures # Bitmask to indicate the internal ESC faults -int8 esc_power # Applied power 0-100 in % (negative values reserved) +uint16 failures # [@enum FAILURE] Bitmask to indicate the internal ESC faults +int8 esc_power # [%] [@range 0,100] Applied power (negative values reserved) -uint8 FAILURE_OVER_CURRENT = 0 # (1 << 0) -uint8 FAILURE_OVER_VOLTAGE = 1 # (1 << 1) -uint8 FAILURE_MOTOR_OVER_TEMPERATURE = 2 # (1 << 2) -uint8 FAILURE_OVER_RPM = 3 # (1 << 3) -uint8 FAILURE_INCONSISTENT_CMD = 4 # (1 << 4) Set if ESC received an inconsistent command (i.e out of boundaries) -uint8 FAILURE_MOTOR_STUCK = 5 # (1 << 5) -uint8 FAILURE_GENERIC = 6 # (1 << 6) -uint8 FAILURE_MOTOR_WARN_TEMPERATURE = 7 # (1 << 7) -uint8 FAILURE_WARN_ESC_TEMPERATURE = 8 # (1 << 8) -uint8 FAILURE_OVER_ESC_TEMPERATURE = 9 # (1 << 9) -uint8 ESC_FAILURE_COUNT = 10 # Counter - keep it as last element! +uint8 FAILURE_OVER_CURRENT = 0 # (1 << 0) +uint8 FAILURE_OVER_VOLTAGE = 1 # (1 << 1) +uint8 FAILURE_MOTOR_OVER_TEMPERATURE = 2 # (1 << 2) +uint8 FAILURE_OVER_RPM = 3 # (1 << 3) +uint8 FAILURE_INCONSISTENT_CMD = 4 # (1 << 4) Set if ESC received an inconsistent command (i.e out of boundaries) +uint8 FAILURE_MOTOR_STUCK = 5 # (1 << 5) +uint8 FAILURE_GENERIC = 6 # (1 << 6) +uint8 FAILURE_MOTOR_WARN_TEMPERATURE = 7 # (1 << 7) +uint8 FAILURE_WARN_ESC_TEMPERATURE = 8 # (1 << 8) +uint8 FAILURE_OVER_ESC_TEMPERATURE = 9 # (1 << 9) +uint8 ESC_FAILURE_COUNT = 10 # Counter - keep it as last element! ``` ::: diff --git a/docs/zh/msg_docs/EscStatus.md b/docs/zh/msg_docs/EscStatus.md index 96e7990067..cb56d25999 100644 --- a/docs/zh/msg_docs/EscStatus.md +++ b/docs/zh/msg_docs/EscStatus.md @@ -8,27 +8,34 @@ pageClass: is-wide-page ## Fields -| 参数名 | 类型 | Unit [Frame] | Range/Enum | 描述 | -| ---------------------------------------------------------- | -------------- | ---------------------------------------------------------------- | ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| timestamp | `uint64` | | | time since system start (microseconds) | -| counter | `uint16` | | | incremented by the writing thread everytime new data is stored | -| esc_count | `uint8` | | | number of connected ESCs | -| esc_connectiontype | `uint8` | | | how ESCs connected to the system | -| esc_online_flags | `uint8` | | | Bitmask indicating which ESC is online/offline | -| esc_armed_flags | `uint8` | | | Bitmask indicating which ESC is armed. For ESC's where the arming state is not known (returned by the ESC), the arming bits should always be set. | -| esc | `EscReport[8]` | | | | +| 参数名 | 类型 | Unit [Frame] | Range/Enum | 描述 | +| ---------------------------------------------------------- | --------------- | ---------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | +| timestamp | `uint64` | us | | Time since system start | +| counter | `uint16` | | | Incremented by the writing thread everytime new data is stored | +| esc_count | `uint8` | | | Number of connected ESCs | +| esc_connectiontype | `uint8` | | [ESC_CONNECTION_TYPE](#ESC_CONNECTION_TYPE) | How ESCs connected to the system | +| esc_online_flags | `uint16` | | | Bitmask indicating which ESC is online/offline (in motor order) | +| esc_armed_flags | `uint16` | | | Bitmask indicating which ESC is armed (in motor order) | +| esc | `EscReport[12]` | | | | + +## Enums + +### ESC_CONNECTION_TYPE {#ESC_CONNECTION_TYPE} + +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------------------------------------------------------------------------ | ------- | - | ------------------------ | +| ESC_CONNECTION_TYPE_PPM | `uint8` | 0 | Traditional PPM ESC | +| ESC_CONNECTION_TYPE_SERIAL | `uint8` | 1 | Serial Bus connected ESC | +| ESC_CONNECTION_TYPE_ONESHOT | `uint8` | 2 | One Shot PPM | +| ESC_CONNECTION_TYPE_I2C | `uint8` | 3 | I2C | +| ESC_CONNECTION_TYPE_CAN | `uint8` | 4 | CAN-Bus | +| ESC_CONNECTION_TYPE_DSHOT | `uint8` | 5 | DShot | ## Constants -| 参数名 | 类型 | 值 | 描述 | -| -------------------------------------------------------------------------------------------------------------------------------------- | ------- | - | ---------------------------------------------------------------------------------------------------- | -| CONNECTED_ESC_MAX | `uint8` | 8 | The number of ESCs supported. Current (Q2/2013) we support 8 ESCs | -| ESC_CONNECTION_TYPE_PPM | `uint8` | 0 | Traditional PPM ESC | -| ESC_CONNECTION_TYPE_SERIAL | `uint8` | 1 | Serial Bus connected ESC | -| ESC_CONNECTION_TYPE_ONESHOT | `uint8` | 2 | One Shot PPM | -| ESC_CONNECTION_TYPE_I2C | `uint8` | 3 | I2C | -| ESC_CONNECTION_TYPE_CAN | `uint8` | 4 | CAN-Bus | -| ESC_CONNECTION_TYPE_DSHOT | `uint8` | 5 | DShot | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------------------------------- | ------- | -- | ---------------------------------------------------------------- | +| CONNECTED_ESC_MAX | `uint8` | 12 | The number of ESCs supported (Motor1-Motor12) | ## Source Message @@ -38,34 +45,38 @@ pageClass: is-wide-page Click here to see original file ```c -uint64 timestamp # time since system start (microseconds) -uint8 CONNECTED_ESC_MAX = 8 # The number of ESCs supported. Current (Q2/2013) we support 8 ESCs +uint64 timestamp # [us] Time since system start +uint8 CONNECTED_ESC_MAX = 12 # The number of ESCs supported (Motor1-Motor12) -uint8 ESC_CONNECTION_TYPE_PPM = 0 # Traditional PPM ESC -uint8 ESC_CONNECTION_TYPE_SERIAL = 1 # Serial Bus connected ESC -uint8 ESC_CONNECTION_TYPE_ONESHOT = 2 # One Shot PPM -uint8 ESC_CONNECTION_TYPE_I2C = 3 # I2C -uint8 ESC_CONNECTION_TYPE_CAN = 4 # CAN-Bus -uint8 ESC_CONNECTION_TYPE_DSHOT = 5 # DShot +uint8 ESC_CONNECTION_TYPE_PPM = 0 # Traditional PPM ESC +uint8 ESC_CONNECTION_TYPE_SERIAL = 1 # Serial Bus connected ESC +uint8 ESC_CONNECTION_TYPE_ONESHOT = 2 # One Shot PPM +uint8 ESC_CONNECTION_TYPE_I2C = 3 # I2C +uint8 ESC_CONNECTION_TYPE_CAN = 4 # CAN-Bus +uint8 ESC_CONNECTION_TYPE_DSHOT = 5 # DShot -uint16 counter # incremented by the writing thread everytime new data is stored +uint16 counter # [-] Incremented by the writing thread everytime new data is stored -uint8 esc_count # number of connected ESCs -uint8 esc_connectiontype # how ESCs connected to the system +uint8 esc_count # [-] Number of connected ESCs +uint8 esc_connectiontype # [@enum ESC_CONNECTION_TYPE] How ESCs connected to the system -uint8 esc_online_flags # Bitmask indicating which ESC is online/offline -# esc_online_flags bit 0 : Set to 1 if ESC0 is online -# esc_online_flags bit 1 : Set to 1 if ESC1 is online -# esc_online_flags bit 2 : Set to 1 if ESC2 is online -# esc_online_flags bit 3 : Set to 1 if ESC3 is online -# esc_online_flags bit 4 : Set to 1 if ESC4 is online -# esc_online_flags bit 5 : Set to 1 if ESC5 is online -# esc_online_flags bit 6 : Set to 1 if ESC6 is online -# esc_online_flags bit 7 : Set to 1 if ESC7 is online +uint16 esc_online_flags # Bitmask indicating which ESC is online/offline (in motor order) +# esc_online_flags bit 0 : Set to 1 if Motor1 is online +# esc_online_flags bit 1 : Set to 1 if Motor2 is online +# esc_online_flags bit 2 : Set to 1 if Motor3 is online +# esc_online_flags bit 3 : Set to 1 if Motor4 is online +# esc_online_flags bit 4 : Set to 1 if Motor5 is online +# esc_online_flags bit 5 : Set to 1 if Motor6 is online +# esc_online_flags bit 6 : Set to 1 if Motor7 is online +# esc_online_flags bit 7 : Set to 1 if Motor8 is online +# esc_online_flags bit 8 : Set to 1 if Motor9 is online +# esc_online_flags bit 9 : Set to 1 if Motor10 is online +# esc_online_flags bit 10: Set to 1 if Motor11 is online +# esc_online_flags bit 11: Set to 1 if Motor12 is online -uint8 esc_armed_flags # Bitmask indicating which ESC is armed. For ESC's where the arming state is not known (returned by the ESC), the arming bits should always be set. +uint16 esc_armed_flags # [-] Bitmask indicating which ESC is armed (in motor order) -EscReport[8] esc +EscReport[12] esc ``` ::: diff --git a/docs/zh/msg_docs/EstimatorAidSource1d.md b/docs/zh/msg_docs/EstimatorAidSource1d.md index 09f39597a7..50241b18d0 100644 --- a/docs/zh/msg_docs/EstimatorAidSource1d.md +++ b/docs/zh/msg_docs/EstimatorAidSource1d.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 diff --git a/docs/zh/msg_docs/EstimatorEventFlags.md b/docs/zh/msg_docs/EstimatorEventFlags.md index 811b5ad12f..3315d4a685 100644 --- a/docs/zh/msg_docs/EstimatorEventFlags.md +++ b/docs/zh/msg_docs/EstimatorEventFlags.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # EstimatorEventFlags (UORB message) -**TOPICS:** estimator_eventflags +**TOPICS:** estimator_event_flags ## Fields diff --git a/docs/zh/msg_docs/EstimatorFusionControl.md b/docs/zh/msg_docs/EstimatorFusionControl.md new file mode 100644 index 0000000000..e568eba135 --- /dev/null +++ b/docs/zh/msg_docs/EstimatorFusionControl.md @@ -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 +``` + +::: diff --git a/docs/zh/msg_docs/EstimatorGpsStatus.md b/docs/zh/msg_docs/EstimatorGpsStatus.md index 2d32b4aac5..6536ede60b 100644 --- a/docs/zh/msg_docs/EstimatorGpsStatus.md +++ b/docs/zh/msg_docs/EstimatorGpsStatus.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # EstimatorGpsStatus (UORB message) -**TOPICS:** estimator_gpsstatus +**TOPICS:** estimator_gps_status ## Fields diff --git a/docs/zh/msg_docs/EstimatorSelectorStatus.md b/docs/zh/msg_docs/EstimatorSelectorStatus.md index 79e16d52f9..96bf464f63 100644 --- a/docs/zh/msg_docs/EstimatorSelectorStatus.md +++ b/docs/zh/msg_docs/EstimatorSelectorStatus.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # EstimatorSelectorStatus (UORB message) -**TOPICS:** estimator_selectorstatus +**TOPICS:** estimator_selector_status ## Fields diff --git a/docs/zh/msg_docs/EstimatorSensorBias.md b/docs/zh/msg_docs/EstimatorSensorBias.md index 3f1da574de..ef63a2126b 100644 --- a/docs/zh/msg_docs/EstimatorSensorBias.md +++ b/docs/zh/msg_docs/EstimatorSensorBias.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Sensor readings and in-run biases in SI-unit form. Sensor readings are compensated for static offsets,. scale errors, in-run bias and thermal drift (if thermal compensation is enabled and available). -**TOPICS:** estimator_sensorbias +**TOPICS:** estimator_sensor_bias ## Fields diff --git a/docs/zh/msg_docs/EstimatorStatus.md b/docs/zh/msg_docs/EstimatorStatus.md index c6738a439d..5117e8e0b9 100644 --- a/docs/zh/msg_docs/EstimatorStatus.md +++ b/docs/zh/msg_docs/EstimatorStatus.md @@ -51,52 +51,52 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | -- | ------------------------------------------------------------------------------------------------- | -| GPS_CHECK_FAIL_GPS_FIX | `uint8` | 0 | 0 : insufficient fix type (no 3D solution) | -| GPS_CHECK_FAIL_MIN_SAT_COUNT | `uint8` | 1 | 1 : minimum required sat count fail | -| GPS_CHECK_FAIL_MAX_PDOP | `uint8` | 2 | 2 : maximum allowed PDOP fail | -| GPS_CHECK_FAIL_MAX_HORZ_ERR | `uint8` | 3 | 3 : maximum allowed horizontal position error fail | -| GPS_CHECK_FAIL_MAX_VERT_ERR | `uint8` | 4 | 4 : maximum allowed vertical position error fail | -| GPS_CHECK_FAIL_MAX_SPD_ERR | `uint8` | 5 | 5 : maximum allowed speed error fail | -| GPS_CHECK_FAIL_MAX_HORZ_DRIFT | `uint8` | 6 | 6 : maximum allowed horizontal position drift fail - requires stationary vehicle | -| GPS_CHECK_FAIL_MAX_VERT_DRIFT | `uint8` | 7 | 7 : maximum allowed vertical position drift fail - requires stationary vehicle | -| GPS_CHECK_FAIL_MAX_HORZ_SPD_ERR | `uint8` | 8 | 8 : maximum allowed horizontal speed fail - requires stationary vehicle | -| GPS_CHECK_FAIL_MAX_VERT_SPD_ERR | `uint8` | 9 | 9 : maximum allowed vertical velocity discrepancy fail | -| GPS_CHECK_FAIL_SPOOFED | `uint8` | 10 | 10 : GPS signal is spoofed | -| GPS_CHECK_FAIL_JAMMED | `uint8` | 11 | 11 : GPS signal is jammed | -| CS_TILT_ALIGN | `uint8` | 0 | 0 - true if the filter tilt alignment is complete | -| CS_YAW_ALIGN | `uint8` | 1 | 1 - true if the filter yaw alignment is complete | -| CS_GNSS_POS | `uint8` | 2 | 2 - true if GNSS position measurements are being fused | -| CS_OPT_FLOW | `uint8` | 3 | 3 - true if optical flow measurements are being fused | -| CS_MAG_HDG | `uint8` | 4 | 4 - true if a simple magnetic yaw heading is being fused | -| CS_MAG_3D | `uint8` | 5 | 5 - true if 3-axis magnetometer measurement are being fused | -| CS_MAG_DEC | `uint8` | 6 | 6 - true if synthetic magnetic declination measurements are being fused | -| CS_IN_AIR | `uint8` | 7 | 7 - true when thought to be airborne | -| CS_WIND | `uint8` | 8 | 8 - true when wind velocity is being estimated | -| CS_BARO_HGT | `uint8` | 9 | 9 - true when baro data is being fused | -| CS_RNG_HGT | `uint8` | 10 | 10 - true when range finder data is being fused for height aiding | -| CS_GPS_HGT | `uint8` | 11 | 11 - true when GPS altitude is being fused | -| CS_EV_POS | `uint8` | 12 | 12 - true when local position data from external vision is being fused | -| CS_EV_YAW | `uint8` | 13 | 13 - true when yaw data from external vision measurements is being fused | -| CS_EV_HGT | `uint8` | 14 | 14 - true when height data from external vision measurements is being fused | -| CS_BETA | `uint8` | 15 | 15 - true when synthetic sideslip measurements are being fused | -| CS_MAG_FIELD | `uint8` | 16 | 16 - true when only the magnetic field states are updated by the magnetometer | -| CS_FIXED_WING | `uint8` | 17 | 17 - true when thought to be operating as a fixed wing vehicle with constrained sideslip | -| CS_MAG_FAULT | `uint8` | 18 | 18 - true when the magnetometer has been declared faulty and is no longer being used | -| CS_ASPD | `uint8` | 19 | 19 - true when airspeed measurements are being fused | -| CS_GND_EFFECT | `uint8` | 20 | 20 - true when when protection from ground effect induced static pressure rise is active | -| CS_RNG_STUCK | `uint8` | 21 | 21 - true when a stuck range finder sensor has been detected | -| CS_GPS_YAW | `uint8` | 22 | 22 - true when yaw (not ground course) data from a GPS receiver is being fused | -| CS_MAG_ALIGNED | `uint8` | 23 | 23 - true when the in-flight mag field alignment has been completed | -| CS_EV_VEL | `uint8` | 24 | 24 - true when local frame velocity data fusion from external vision measurements is intended | -| CS_SYNTHETIC_MAG_Z | `uint8` | 25 | 25 - true when we are using a synthesized measurement for the magnetometer Z component | -| CS_VEHICLE_AT_REST | `uint8` | 26 | 26 - true when the vehicle is at rest | -| CS_GPS_YAW_FAULT | `uint8` | 27 | 27 - true when the GNSS heading has been declared faulty and is no longer being used | -| CS_RNG_FAULT | `uint8` | 28 | 28 - true when the range finder has been declared faulty and is no longer being used | -| CS_GNSS_VEL | `uint8` | 44 | 44 - true if GNSS velocity measurement fusion is intended | -| CS_GNSS_FAULT | `uint8` | 45 | 45 - true if GNSS measurements have been declared faulty and are no longer used | -| CS_YAW_MANUAL | `uint8` | 46 | 46 - true if yaw has been set manually | +| 参数名 | 类型 | 值 | 描述 | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | -- | ------------------------------------------------------------------------------------------------- | +| GPS_CHECK_FAIL_GPS_FIX | `uint8` | 0 | 0 : insufficient fix type (no 3D solution) | +| GPS_CHECK_FAIL_MIN_SAT_COUNT | `uint8` | 1 | 1 : minimum required sat count fail | +| GPS_CHECK_FAIL_MAX_PDOP | `uint8` | 2 | 2 : maximum allowed PDOP fail | +| GPS_CHECK_FAIL_MAX_HORZ_ERR | `uint8` | 3 | 3 : maximum allowed horizontal position error fail | +| GPS_CHECK_FAIL_MAX_VERT_ERR | `uint8` | 4 | 4 : maximum allowed vertical position error fail | +| GPS_CHECK_FAIL_MAX_SPD_ERR | `uint8` | 5 | 5 : maximum allowed speed error fail | +| GPS_CHECK_FAIL_MAX_HORZ_DRIFT | `uint8` | 6 | 6 : maximum allowed horizontal position drift fail - requires stationary vehicle | +| GPS_CHECK_FAIL_MAX_VERT_DRIFT | `uint8` | 7 | 7 : maximum allowed vertical position drift fail - requires stationary vehicle | +| GPS_CHECK_FAIL_MAX_HORZ_SPD_ERR | `uint8` | 8 | 8 : maximum allowed horizontal speed fail - requires stationary vehicle | +| GPS_CHECK_FAIL_MAX_VERT_SPD_ERR | `uint8` | 9 | 9 : maximum allowed vertical velocity discrepancy fail | +| GPS_CHECK_FAIL_SPOOFED | `uint8` | 10 | 10 : GPS signal is spoofed | +| GPS_CHECK_FAIL_JAMMED | `uint8` | 11 | 11 : GPS signal is jammed | +| CS_TILT_ALIGN | `uint8` | 0 | 0 - true if the filter tilt alignment is complete | +| CS_YAW_ALIGN | `uint8` | 1 | 1 - true if the filter yaw alignment is complete | +| CS_GNSS_POS | `uint8` | 2 | 2 - true if GNSS position measurements are being fused | +| CS_OPT_FLOW | `uint8` | 3 | 3 - true if optical flow measurements are being fused | +| CS_MAG_HDG | `uint8` | 4 | 4 - true if a simple magnetic yaw heading is being fused | +| CS_MAG_3D | `uint8` | 5 | 5 - true if 3-axis magnetometer measurement are being fused | +| CS_MAG_DEC | `uint8` | 6 | 6 - true if synthetic magnetic declination measurements are being fused | +| CS_IN_AIR | `uint8` | 7 | 7 - true when thought to be airborne | +| CS_WIND | `uint8` | 8 | 8 - true when wind velocity is being estimated | +| CS_BARO_HGT | `uint8` | 9 | 9 - true when baro data is being fused | +| CS_RNG_HGT | `uint8` | 10 | 10 - true when range finder data is being fused for height aiding | +| CS_GPS_HGT | `uint8` | 11 | 11 - true when GPS altitude is being fused | +| CS_EV_POS | `uint8` | 12 | 12 - true when local position data from external vision is being fused | +| CS_EV_YAW | `uint8` | 13 | 13 - true when yaw data from external vision measurements is being fused | +| CS_EV_HGT | `uint8` | 14 | 14 - true when height data from external vision measurements is being fused | +| CS_BETA | `uint8` | 15 | 15 - true when synthetic sideslip measurements are being fused | +| CS_MAG_FIELD | `uint8` | 16 | 16 - true when only the magnetic field states are updated by the magnetometer | +| CS_FIXED_WING | `uint8` | 17 | 17 - true when thought to be operating as a fixed wing vehicle with constrained sideslip | +| CS_MAG_FAULT | `uint8` | 18 | 18 - true when the magnetometer has been declared faulty and is no longer being used | +| CS_ASPD | `uint8` | 19 | 19 - true when airspeed measurements are being fused | +| CS_GND_EFFECT | `uint8` | 20 | 20 - true when when protection from ground effect induced static pressure rise is active | +| CS_RNG_STUCK | `uint8` | 21 | 21 - true when a stuck range finder sensor has been detected | +| CS_GPS_YAW | `uint8` | 22 | 22 - true when yaw (not ground course) data from a GPS receiver is being fused | +| CS_MAG_ALIGNED | `uint8` | 23 | 23 - true when the in-flight mag field alignment has been completed | +| CS_EV_VEL | `uint8` | 24 | 24 - true when local frame velocity data fusion from external vision measurements is intended | +| CS_SYNTHETIC_MAG_Z | `uint8` | 25 | 25 - true when we are using a synthesized measurement for the magnetometer Z component | +| CS_VEHICLE_AT_REST | `uint8` | 26 | 26 - true when the vehicle is at rest | +| CS_GPS_YAW_FAULT | `uint8` | 27 | 27 - true when the GNSS heading has been declared faulty and is no longer being used | +| CS_RNG_FAULT | `uint8` | 28 | 28 - true when the range finder has been declared faulty and is no longer being used | +| CS_GNSS_VEL | `uint8` | 44 | 44 - true if GNSS velocity measurement fusion is intended | +| CS_GNSS_FAULT | `uint8` | 45 | 45 - true if GNSS measurements have been declared faulty and are no longer used | +| CS_YAW_MANUAL | `uint8` | 46 | 46 - true if yaw has been set manually | ## Source Message diff --git a/docs/zh/msg_docs/EstimatorStatusFlags.md b/docs/zh/msg_docs/EstimatorStatusFlags.md index 3b9e09d810..d7b7b2915a 100644 --- a/docs/zh/msg_docs/EstimatorStatusFlags.md +++ b/docs/zh/msg_docs/EstimatorStatusFlags.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # EstimatorStatusFlags (UORB message) -**TOPICS:** estimator_statusflags +**TOPICS:** estimator_status_flags ## Fields @@ -61,6 +61,8 @@ pageClass: is-wide-page | cs_gnss_fault | `bool` | | | 45 - true if GNSS true if GNSS measurements (lat, lon, vel) have been declared faulty | | cs_yaw_manual | `bool` | | | 46 - true if yaw has been set manually | | cs_gnss_hgt_fault | `bool` | | | 47 - true if GNSS true if GNSS measurements (alt) have been declared faulty | +| cs_in_transition | `bool` | | | 48 - true if the vehicle is in vtol transition | +| cs_heading_observable | `bool` | | | 49 - true when heading is observable | | fault_status_changes | `uint32` | | | number of filter fault status (fs) changes | | fs_bad_mag_x | `bool` | | | 0 - true if the fusion of the magnetometer X-axis has encountered a numerical error | | fs_bad_mag_y | `bool` | | | 1 - true if the fusion of the magnetometer Y-axis has encountered a numerical error | @@ -136,6 +138,8 @@ bool cs_gnss_vel # 44 - true if GNSS velocity measurement fusion bool cs_gnss_fault # 45 - true if GNSS true if GNSS measurements (lat, lon, vel) have been declared faulty bool cs_yaw_manual # 46 - true if yaw has been set manually bool cs_gnss_hgt_fault # 47 - true if GNSS true if GNSS measurements (alt) have been declared faulty +bool cs_in_transition # 48 - true if the vehicle is in vtol transition +bool cs_heading_observable # 49 - true when heading is observable # fault status uint32 fault_status_changes # number of filter fault status (fs) changes diff --git a/docs/zh/msg_docs/Event.md b/docs/zh/msg_docs/Event.md index d182533105..febef8bba0 100644 --- a/docs/zh/msg_docs/Event.md +++ b/docs/zh/msg_docs/Event.md @@ -20,10 +20,10 @@ Events interface. ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------------------------- | -------- | -- | -- | -| MESSAGE_VERSION | `uint32` | 1 | | -| ORB_QUEUE_LENGTH | `uint8` | 16 | | +| 参数名 | 类型 | 值 | 描述 | +| ----------------------------------------------------------------------------------------- | -------- | -- | -- | +| MESSAGE_VERSION | `uint32` | 1 | | +| ORB_QUEUE_LENGTH | `uint8` | 16 | | ## Source Message diff --git a/docs/zh/msg_docs/EventV0.md b/docs/zh/msg_docs/EventV0.md index cf73c2970c..99ed0fa5ec 100644 --- a/docs/zh/msg_docs/EventV0.md +++ b/docs/zh/msg_docs/EventV0.md @@ -6,7 +6,7 @@ pageClass: is-wide-page this message is required here in the msg_old folder because other msg are depending on it. Events interface. -**TOPICS:** eventv0 +**TOPICS:** event_v0 ## Fields @@ -20,10 +20,10 @@ this message is required here in the msg_old folder because other msg are depend ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------------------------- | -------- | -- | -- | -| MESSAGE_VERSION | `uint32` | 0 | | -| ORB_QUEUE_LENGTH | `uint8` | 16 | | +| 参数名 | 类型 | 值 | 描述 | +| ----------------------------------------------------------------------------------------- | -------- | -- | -- | +| MESSAGE_VERSION | `uint32` | 0 | | +| ORB_QUEUE_LENGTH | `uint8` | 16 | | ## Source Message diff --git a/docs/zh/msg_docs/FailsafeFlags.md b/docs/zh/msg_docs/FailsafeFlags.md index ad9ea06a4a..c04b633113 100644 --- a/docs/zh/msg_docs/FailsafeFlags.md +++ b/docs/zh/msg_docs/FailsafeFlags.md @@ -46,6 +46,11 @@ The flag comments are used as label for the failsafe state machine simulation | battery_warning | `uint8` | | | Battery warning level (see BatteryStatus.msg) | | battery_low_remaining_time | `bool` | | | Low battery based on remaining flight time | | battery_unhealthy | `bool` | | | Battery unhealthy | +| fd_critical_failure | `bool` | | | Critical failure (attitude limit exceeded, or external ATS) | +| fd_esc_arming_failure | `bool` | | | ESC failed to arm | +| fd_imbalanced_prop | `bool` | | | Imbalanced propeller detected | +| fd_motor_failure | `bool` | | | Motor failure | +| fd_alt_loss | `bool` | | | Uncommanded altitude loss (rotary-wing, altitude-controlled flight) | | geofence_breached | `bool` | | | Geofence breached (one or multiple) | | mission_failure | `bool` | | | Mission failure | | vtol_fixed_wing_system_failure | `bool` | | | vehicle in fixed-wing system failure failsafe mode (after quad-chute) | @@ -53,10 +58,8 @@ The flag comments are used as label for the failsafe state machine simulation | flight_time_limit_exceeded | `bool` | | | Maximum flight time exceeded | | position_accuracy_low | `bool` | | | Position estimate has dropped below threshold, but is currently still declared valid | | navigator_failure | `bool` | | | Navigator failed to execute a mode | -| fd_critical_failure | `bool` | | | Critical failure (attitude/altitude limit exceeded, or external ATS) | -| fd_esc_arming_failure | `bool` | | | ESC failed to arm | -| fd_imbalanced_prop | `bool` | | | Imbalanced propeller detected | -| fd_motor_failure | `bool` | | | Motor failure | +| parachute_unhealthy | `bool` | | | Parachute system missing or unhealthy | +| remote_id_unhealthy | `bool` | | | Remote ID (Open Drone ID) system missing or unhealthy | ## Source Message @@ -112,6 +115,13 @@ uint8 battery_warning # Battery warning level (see BatteryStatus bool battery_low_remaining_time # Low battery based on remaining flight time bool battery_unhealthy # Battery unhealthy +# Failure detector +bool fd_critical_failure # Critical failure (attitude limit exceeded, or external ATS) +bool fd_esc_arming_failure # ESC failed to arm +bool fd_imbalanced_prop # Imbalanced propeller detected +bool fd_motor_failure # Motor failure +bool fd_alt_loss # Uncommanded altitude loss (rotary-wing, altitude-controlled flight) + # Other bool geofence_breached # Geofence breached (one or multiple) bool mission_failure # Mission failure @@ -120,12 +130,8 @@ bool wind_limit_exceeded # Wind limit exceeded bool flight_time_limit_exceeded # Maximum flight time exceeded bool position_accuracy_low # Position estimate has dropped below threshold, but is currently still declared valid bool navigator_failure # Navigator failed to execute a mode - -# Failure detector -bool fd_critical_failure # Critical failure (attitude/altitude limit exceeded, or external ATS) -bool fd_esc_arming_failure # ESC failed to arm -bool fd_imbalanced_prop # Imbalanced propeller detected -bool fd_motor_failure # Motor failure +bool parachute_unhealthy # Parachute system missing or unhealthy +bool remote_id_unhealthy # Remote ID (Open Drone ID) system missing or unhealthy ``` ::: diff --git a/docs/zh/msg_docs/FailureDetectorStatus.md b/docs/zh/msg_docs/FailureDetectorStatus.md index d42b6a3995..072fb68eaf 100644 --- a/docs/zh/msg_docs/FailureDetectorStatus.md +++ b/docs/zh/msg_docs/FailureDetectorStatus.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # FailureDetectorStatus (UORB message) -**TOPICS:** failure_detectorstatus +**TOPICS:** failure_detector_status ## Fields diff --git a/docs/zh/msg_docs/FigureEightStatus.md b/docs/zh/msg_docs/FigureEightStatus.md index aee9838ffb..c1e7c41cb4 100644 --- a/docs/zh/msg_docs/FigureEightStatus.md +++ b/docs/zh/msg_docs/FigureEightStatus.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # FigureEightStatus (UORB message) -**TOPICS:** figure_eightstatus +**TOPICS:** figure_eight_status ## Fields diff --git a/docs/zh/msg_docs/FixedWingLateralGuidanceStatus.md b/docs/zh/msg_docs/FixedWingLateralGuidanceStatus.md index 926eff99da..0ff4639db0 100644 --- a/docs/zh/msg_docs/FixedWingLateralGuidanceStatus.md +++ b/docs/zh/msg_docs/FixedWingLateralGuidanceStatus.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Fixed Wing Lateral Guidance Status message. Published by fw_pos_control module to report the resultant lateral setpoints and NPFG debug outputs. -**TOPICS:** fixed_winglateral_guidancestatus +**TOPICS:** fixed_wing_lateral_guidance_status ## Fields diff --git a/docs/zh/msg_docs/FixedWingLateralSetpoint.md b/docs/zh/msg_docs/FixedWingLateralSetpoint.md index 0038fe46ca..8edd91bf05 100644 --- a/docs/zh/msg_docs/FixedWingLateralSetpoint.md +++ b/docs/zh/msg_docs/FixedWingLateralSetpoint.md @@ -4,24 +4,27 @@ pageClass: is-wide-page # FixedWingLateralSetpoint (UORB message) -Fixed Wing Lateral Setpoint message. Used by the fw_lateral_longitudinal_control module. At least one of course, airspeed_direction, or lateral_acceleration must be finite. +Fixed Wing Lateral Setpoint message. -**TOPICS:** fixed_winglateral_setpoint +Used by the fw_lateral_longitudinal_control module +At least one of course, airspeed_direction, or lateral_acceleration must be finite. + +**TOPICS:** fixed_wing_lateral_setpoint ## Fields | 参数名 | 类型 | Unit [Frame] | Range/Enum | 描述 | | ----------------------------------------- | --------- | ---------------------------------------------------------------- | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| timestamp | `uint64` | | | time since system start (microseconds) | +| timestamp | `uint64` | us | | Time since system start | | course | `float32` | rad | [-pi : pi] | Desired direction of travel over ground w.r.t (true) North. NAN if not controlled directly. | | airspeed_direction | `float32` | rad | [-pi : pi] | Desired horizontal angle of airspeed vector w.r.t. (true) North. Same as vehicle heading if in the absence of sideslip. NAN if not controlled directly, takes precedence over course if finite. | -| lateral_acceleration | `float32` | FRD | | Lateral acceleration setpoint. NAN if not controlled directly, used as feedforward if either course setpoint or airspeed_direction is finite. | +| lateral_acceleration | `float32` | m/s^2 [FRD] | | Lateral acceleration setpoint. NAN if not controlled directly, used as feedforward if either course setpoint or airspeed_direction is finite. | ## Constants -| 参数名 | 类型 | 值 | 描述 | -| -------------------------------------------------------------------- | -------- | - | -- | -| MESSAGE_VERSION | `uint32` | 0 | | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------ | -------- | - | -- | +| MESSAGE_VERSION | `uint32` | 0 | | ## Source Message @@ -32,16 +35,17 @@ Click here to see original file ```c # Fixed Wing Lateral Setpoint message +# # Used by the fw_lateral_longitudinal_control module # At least one of course, airspeed_direction, or lateral_acceleration must be finite. uint32 MESSAGE_VERSION = 0 -uint64 timestamp # time since system start (microseconds) +uint64 timestamp # [us] Time since system start -float32 course # [rad] [@range -pi, pi] Desired direction of travel over ground w.r.t (true) North. NAN if not controlled directly. -float32 airspeed_direction # [rad] [@range -pi, pi] Desired horizontal angle of airspeed vector w.r.t. (true) North. Same as vehicle heading if in the absence of sideslip. NAN if not controlled directly, takes precedence over course if finite. -float32 lateral_acceleration # [m/s^2] [FRD] Lateral acceleration setpoint. NAN if not controlled directly, used as feedforward if either course setpoint or airspeed_direction is finite. +float32 course # [rad] [@range -pi, pi] Desired direction of travel over ground w.r.t (true) North. NAN if not controlled directly. +float32 airspeed_direction # [rad] [@range -pi, pi] Desired horizontal angle of airspeed vector w.r.t. (true) North. Same as vehicle heading if in the absence of sideslip. NAN if not controlled directly, takes precedence over course if finite. +float32 lateral_acceleration # [m/s^2] [@frame FRD] Lateral acceleration setpoint. NAN if not controlled directly, used as feedforward if either course setpoint or airspeed_direction is finite. ``` ::: diff --git a/docs/zh/msg_docs/FixedWingLateralStatus.md b/docs/zh/msg_docs/FixedWingLateralStatus.md index 33000ba018..004043b358 100644 --- a/docs/zh/msg_docs/FixedWingLateralStatus.md +++ b/docs/zh/msg_docs/FixedWingLateralStatus.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Fixed Wing Lateral Status message. Published by the fw_lateral_longitudinal_control module to report the resultant lateral setpoint. -**TOPICS:** fixed_winglateral_status +**TOPICS:** fixed_wing_lateral_status ## Fields diff --git a/docs/zh/msg_docs/FixedWingLongitudinalSetpoint.md b/docs/zh/msg_docs/FixedWingLongitudinalSetpoint.md index 8dac3b3999..f7cf15c2af 100644 --- a/docs/zh/msg_docs/FixedWingLongitudinalSetpoint.md +++ b/docs/zh/msg_docs/FixedWingLongitudinalSetpoint.md @@ -4,26 +4,30 @@ pageClass: is-wide-page # FixedWingLongitudinalSetpoint (UORB message) -Fixed Wing Longitudinal Setpoint message. Used by the fw_lateral_longitudinal_control module. If pitch_direct and throttle_direct are not both finite, then the controller relies on altitude/height_rate and equivalent_airspeed to control vertical motion. If both altitude and height_rate are NAN, the controller maintains the current altitude. +Fixed Wing Longitudinal Setpoint message. -**TOPICS:** fixed_winglongitudinal_setpoint +Used by the fw_lateral_longitudinal_control module +If pitch_direct and throttle_direct are not both finite, then the controller relies on altitude/height_rate and equivalent_airspeed to control vertical motion. +If both altitude and height_rate are NAN, the controller maintains the current altitude. + +**TOPICS:** fixed_wing_longitudinal_setpoint ## Fields | 参数名 | 类型 | Unit [Frame] | Range/Enum | 描述 | | ---------------------------------------- | --------- | ---------------------------------------------------------------- | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------- | -| timestamp | `uint64` | | | time since system start (microseconds) | +| timestamp | `uint64` | us | | Time since system start | | altitude | `float32` | 米 | | Altitude setpoint AMSL, not controlled directly if NAN or if height_rate is finite | -| height_rate | `float32` | ENU | | Scalar height rate setpoint. NAN if not controlled directly | +| height_rate | `float32` | m/s [ENU] | | Scalar height rate setpoint. NAN if not controlled directly | | equivalent_airspeed | `float32` | 米/秒 | [0 : inf] | Scalar equivalent airspeed setpoint. NAN if system default should be used | -| pitch_direct | `float32` | FRD | [-pi : pi] | NAN if not controlled, overrides total energy controller | +| pitch_direct | `float32` | rad [FRD] | [-pi : pi] | NAN if not controlled, overrides total energy controller | | throttle_direct | `float32` | norm | [0 : 1] | NAN if not controlled, overrides total energy controller | ## Constants -| 参数名 | 类型 | 值 | 描述 | -| -------------------------------------------------------------------- | -------- | - | -- | -| MESSAGE_VERSION | `uint32` | 0 | | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------ | -------- | - | -- | +| MESSAGE_VERSION | `uint32` | 0 | | ## Source Message @@ -34,19 +38,20 @@ Click here to see original file ```c # Fixed Wing Longitudinal Setpoint message +# # Used by the fw_lateral_longitudinal_control module # If pitch_direct and throttle_direct are not both finite, then the controller relies on altitude/height_rate and equivalent_airspeed to control vertical motion. # If both altitude and height_rate are NAN, the controller maintains the current altitude. uint32 MESSAGE_VERSION = 0 -uint64 timestamp # time since system start (microseconds) +uint64 timestamp # [us] Time since system start -float32 altitude # [m] Altitude setpoint AMSL, not controlled directly if NAN or if height_rate is finite -float32 height_rate # [m/s] [ENU] Scalar height rate setpoint. NAN if not controlled directly -float32 equivalent_airspeed # [m/s] [@range 0, inf] Scalar equivalent airspeed setpoint. NAN if system default should be used -float32 pitch_direct # [rad] [@range -pi, pi] [FRD] NAN if not controlled, overrides total energy controller -float32 throttle_direct # [norm] [@range 0,1] NAN if not controlled, overrides total energy controller +float32 altitude # [m] Altitude setpoint AMSL, not controlled directly if NAN or if height_rate is finite +float32 height_rate # [m/s] [@frame ENU] Scalar height rate setpoint. NAN if not controlled directly +float32 equivalent_airspeed # [m/s] [@range 0, inf] Scalar equivalent airspeed setpoint. NAN if system default should be used +float32 pitch_direct # [rad] [@range -pi, pi] [@frame FRD] NAN if not controlled, overrides total energy controller +float32 throttle_direct # [norm] [@range 0,1] NAN if not controlled, overrides total energy controller ``` ::: diff --git a/docs/zh/msg_docs/FixedWingRunwayControl.md b/docs/zh/msg_docs/FixedWingRunwayControl.md index 3683f8c9e3..ed6bc7cd40 100644 --- a/docs/zh/msg_docs/FixedWingRunwayControl.md +++ b/docs/zh/msg_docs/FixedWingRunwayControl.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Auxiliary control fields for fixed-wing runway takeoff/landing. -**TOPICS:** fixed_wingrunway_control +**TOPICS:** fixed_wing_runway_control ## Fields @@ -19,12 +19,12 @@ Auxiliary control fields for fixed-wing runway takeoff/landing. ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------------------------------------------------------------ | ------- | - | -------------------------------------------------------------------------------- | -| STATE_THROTTLE_RAMP | `uint8` | 0 | ramping up throttle | -| STATE_CLAMPED_TO_RUNWAY | `uint8` | 1 | clamped to runway, controlling yaw directly (wheel or rudder) | -| STATE_CLIMBOUT | `uint8` | 2 | climbout to safe height before navigation | -| STATE_FLYING | `uint8` | 3 | navigate freely | +| 参数名 | 类型 | 值 | 描述 | +| ---------------------------------------------------------------------------------------------------------------------------- | ------- | - | -------------------------------------------------------------------------------- | +| STATE_THROTTLE_RAMP | `uint8` | 0 | ramping up throttle | +| STATE_CLAMPED_TO_RUNWAY | `uint8` | 1 | clamped to runway, controlling yaw directly (wheel or rudder) | +| STATE_CLIMBOUT | `uint8` | 2 | climbout to safe height before navigation | +| STATE_FLYING | `uint8` | 3 | navigate freely | ## Source Message diff --git a/docs/zh/msg_docs/FlightPhaseEstimation.md b/docs/zh/msg_docs/FlightPhaseEstimation.md index 0bfeae8a21..c4fce53e0b 100644 --- a/docs/zh/msg_docs/FlightPhaseEstimation.md +++ b/docs/zh/msg_docs/FlightPhaseEstimation.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # FlightPhaseEstimation (UORB message) -**TOPICS:** flight_phaseestimation +**TOPICS:** flight_phase_estimation ## Fields @@ -15,12 +15,12 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| --------------------------------------------------------------------------------------------------- | ------- | - | ------------------------------- | -| FLIGHT_PHASE_UNKNOWN | `uint8` | 0 | vehicle flight phase is unknown | -| FLIGHT_PHASE_LEVEL | `uint8` | 1 | Vehicle is in level flight | -| FLIGHT_PHASE_DESCEND | `uint8` | 2 | vehicle is in descend | -| FLIGHT_PHASE_CLIMB | `uint8` | 3 | vehicle is climbing | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------------------------------------- | ------- | - | ------------------------------- | +| FLIGHT_PHASE_UNKNOWN | `uint8` | 0 | vehicle flight phase is unknown | +| FLIGHT_PHASE_LEVEL | `uint8` | 1 | Vehicle is in level flight | +| FLIGHT_PHASE_DESCEND | `uint8` | 2 | vehicle is in descend | +| FLIGHT_PHASE_CLIMB | `uint8` | 3 | vehicle is climbing | ## Source Message diff --git a/docs/zh/msg_docs/FollowTargetEstimator.md b/docs/zh/msg_docs/FollowTargetEstimator.md index d947750054..921befded8 100644 --- a/docs/zh/msg_docs/FollowTargetEstimator.md +++ b/docs/zh/msg_docs/FollowTargetEstimator.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # FollowTargetEstimator (UORB message) -**TOPICS:** follow_targetestimator +**TOPICS:** follow_target_estimator ## Fields diff --git a/docs/zh/msg_docs/FollowTargetStatus.md b/docs/zh/msg_docs/FollowTargetStatus.md index 36d2582e12..3f58309e9b 100644 --- a/docs/zh/msg_docs/FollowTargetStatus.md +++ b/docs/zh/msg_docs/FollowTargetStatus.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # FollowTargetStatus (UORB message) -**TOPICS:** follow_targetstatus +**TOPICS:** follow_target_status ## Fields diff --git a/docs/zh/msg_docs/FuelTankStatus.md b/docs/zh/msg_docs/FuelTankStatus.md index ea20b673ae..076f6e69d5 100644 --- a/docs/zh/msg_docs/FuelTankStatus.md +++ b/docs/zh/msg_docs/FuelTankStatus.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # FuelTankStatus (UORB message) -**TOPICS:** fuel_tankstatus +**TOPICS:** fuel_tank_status ## Fields @@ -22,11 +22,11 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| -------------------------------------------------------------------------------------------------------------------------- | ------- | - | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| MAV_FUEL_TYPE_UNKNOWN | `uint8` | 0 | fuel type not specified. Fuel levels are normalized (i.e., maximum is 1, and other levels are relative to 1). | -| MAV_FUEL_TYPE_LIQUID | `uint8` | 1 | represents generic liquid fuels, such as gasoline or diesel. Fuel levels are measured in millilitres (ml), and flow rates in millilitres per second (ml/s). | -| MAV_FUEL_TYPE_GAS | `uint8` | 2 | represents a gas fuel, such as hydrogen, methane, or propane. Fuel levels are in kilo-Pascal (kPa), and flow rates are in milliliters per second (ml/s). | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------------------------------------------------------------ | ------- | - | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| MAV_FUEL_TYPE_UNKNOWN | `uint8` | 0 | fuel type not specified. Fuel levels are normalized (i.e., maximum is 1, and other levels are relative to 1). | +| MAV_FUEL_TYPE_LIQUID | `uint8` | 1 | represents generic liquid fuels, such as gasoline or diesel. Fuel levels are measured in millilitres (ml), and flow rates in millilitres per second (ml/s). | +| MAV_FUEL_TYPE_GAS | `uint8` | 2 | represents a gas fuel, such as hydrogen, methane, or propane. Fuel levels are in kilo-Pascal (kPa), and flow rates are in milliliters per second (ml/s). | ## Source Message diff --git a/docs/zh/msg_docs/GeneratorStatus.md b/docs/zh/msg_docs/GeneratorStatus.md index b3d8c36b28..b3d94d494d 100644 --- a/docs/zh/msg_docs/GeneratorStatus.md +++ b/docs/zh/msg_docs/GeneratorStatus.md @@ -25,31 +25,31 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| STATUS_FLAG_OFF | `uint64` | 1 | Generator is off. | -| STATUS_FLAG_READY | `uint64` | 2 | Generator is ready to start generating power. | -| STATUS_FLAG_GENERATING | `uint64` | 4 | Generator is generating power. | -| STATUS_FLAG_CHARGING | `uint64` | 8 | Generator is charging the batteries (generating enough power to charge and provide the load). | -| STATUS_FLAG_REDUCED_POWER | `uint64` | 16 | Generator is operating at a reduced maximum power. | -| STATUS_FLAG_MAXPOWER | `uint64` | 32 | Generator is providing the maximum output. | -| STATUS_FLAG_OVERTEMP_WARNING | `uint64` | 64 | Generator is near the maximum operating temperature, cooling is insufficient. | -| STATUS_FLAG_OVERTEMP_FAULT | `uint64` | 128 | Generator hit the maximum operating temperature and shutdown. | -| STATUS_FLAG_ELECTRONICS_OVERTEMP_WARNING | `uint64` | 256 | Power electronics are near the maximum operating temperature, cooling is insufficient. | -| STATUS_FLAG_ELECTRONICS_OVERTEMP_FAULT | `uint64` | 512 | Power electronics hit the maximum operating temperature and shutdown. | -| STATUS_FLAG_ELECTRONICS_FAULT | `uint64` | 1024 | Power electronics experienced a fault and shutdown. | -| STATUS_FLAG_POWERSOURCE_FAULT | `uint64` | 2048 | The power source supplying the generator failed e.g. mechanical generator stopped, tether is no longer providing power, solar cell is in shade, hydrogen reaction no longer happening. | -| STATUS_FLAG_COMMUNICATION_WARNING | `uint64` | 4096 | Generator controller having communication problems. | -| STATUS_FLAG_COOLING_WARNING | `uint64` | 8192 | Power electronic or generator cooling system error. | -| STATUS_FLAG_POWER_RAIL_FAULT | `uint64` | 16384 | Generator controller power rail experienced a fault. | -| STATUS_FLAG_OVERCURRENT_FAULT | `uint64` | 32768 | Generator controller exceeded the overcurrent threshold and shutdown to prevent damage. | -| STATUS_FLAG_BATTERY_OVERCHARGE_CURRENT_FAULT | `uint64` | 65536 | Generator controller detected a high current going into the batteries and shutdown to prevent battery damage. | -| STATUS_FLAG_OVERVOLTAGE_FAULT | `uint64` | 131072 | Generator controller exceeded it's overvoltage threshold and shutdown to prevent it exceeding the voltage rating. | -| STATUS_FLAG_BATTERY_UNDERVOLT_FAULT | `uint64` | 262144 | Batteries are under voltage (generator will not start). | -| STATUS_FLAG_START_INHIBITED | `uint64` | 524288 | Generator start is inhibited by e.g. a safety switch. | -| STATUS_FLAG_MAINTENANCE_REQUIRED | `uint64` | 1048576 | Generator requires maintenance. | -| STATUS_FLAG_WARMING_UP | `uint64` | 2097152 | Generator is not ready to generate yet. | -| STATUS_FLAG_IDLE | `uint64` | 4194304 | Generator is idle. | +| 参数名 | 类型 | 值 | 描述 | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| STATUS_FLAG_OFF | `uint64` | 1 | Generator is off. | +| STATUS_FLAG_READY | `uint64` | 2 | Generator is ready to start generating power. | +| STATUS_FLAG_GENERATING | `uint64` | 4 | Generator is generating power. | +| STATUS_FLAG_CHARGING | `uint64` | 8 | Generator is charging the batteries (generating enough power to charge and provide the load). | +| STATUS_FLAG_REDUCED_POWER | `uint64` | 16 | Generator is operating at a reduced maximum power. | +| STATUS_FLAG_MAXPOWER | `uint64` | 32 | Generator is providing the maximum output. | +| STATUS_FLAG_OVERTEMP_WARNING | `uint64` | 64 | Generator is near the maximum operating temperature, cooling is insufficient. | +| STATUS_FLAG_OVERTEMP_FAULT | `uint64` | 128 | Generator hit the maximum operating temperature and shutdown. | +| STATUS_FLAG_ELECTRONICS_OVERTEMP_WARNING | `uint64` | 256 | Power electronics are near the maximum operating temperature, cooling is insufficient. | +| STATUS_FLAG_ELECTRONICS_OVERTEMP_FAULT | `uint64` | 512 | Power electronics hit the maximum operating temperature and shutdown. | +| STATUS_FLAG_ELECTRONICS_FAULT | `uint64` | 1024 | Power electronics experienced a fault and shutdown. | +| STATUS_FLAG_POWERSOURCE_FAULT | `uint64` | 2048 | The power source supplying the generator failed e.g. mechanical generator stopped, tether is no longer providing power, solar cell is in shade, hydrogen reaction no longer happening. | +| STATUS_FLAG_COMMUNICATION_WARNING | `uint64` | 4096 | Generator controller having communication problems. | +| STATUS_FLAG_COOLING_WARNING | `uint64` | 8192 | Power electronic or generator cooling system error. | +| STATUS_FLAG_POWER_RAIL_FAULT | `uint64` | 16384 | Generator controller power rail experienced a fault. | +| STATUS_FLAG_OVERCURRENT_FAULT | `uint64` | 32768 | Generator controller exceeded the overcurrent threshold and shutdown to prevent damage. | +| STATUS_FLAG_BATTERY_OVERCHARGE_CURRENT_FAULT | `uint64` | 65536 | Generator controller detected a high current going into the batteries and shutdown to prevent battery damage. | +| STATUS_FLAG_OVERVOLTAGE_FAULT | `uint64` | 131072 | Generator controller exceeded it's overvoltage threshold and shutdown to prevent it exceeding the voltage rating. | +| STATUS_FLAG_BATTERY_UNDERVOLT_FAULT | `uint64` | 262144 | Batteries are under voltage (generator will not start). | +| STATUS_FLAG_START_INHIBITED | `uint64` | 524288 | Generator start is inhibited by e.g. a safety switch. | +| STATUS_FLAG_MAINTENANCE_REQUIRED | `uint64` | 1048576 | Generator requires maintenance. | +| STATUS_FLAG_WARMING_UP | `uint64` | 2097152 | Generator is not ready to generate yet. | +| STATUS_FLAG_IDLE | `uint64` | 4194304 | Generator is idle. | ## Source Message diff --git a/docs/zh/msg_docs/GeofenceResult.md b/docs/zh/msg_docs/GeofenceResult.md index a6d347f2fe..669cf0cded 100644 --- a/docs/zh/msg_docs/GeofenceResult.md +++ b/docs/zh/msg_docs/GeofenceResult.md @@ -18,14 +18,14 @@ pageClass: is-wide-page ## Constants -\| Name | Type | Value | Description | -\| ------------------------------------------------------- | ------- | ----- | ------------------------------- | ------ | -\| GF_ACTION_NONE | `uint8` | 0 | no action on geofence violation | -\| GF_ACTION_WARN | `uint8` | 1 | critical mavlink message | -\| GF_ACTION_LOITER | `uint8` | 2 | switch to AUTO | LOITER | -\| GF_ACTION_RTL | `uint8` | 3 | switch to AUTO | RTL | -\| GF_ACTION_TERMINATE | `uint8` | 4 | flight termination | -\| GF_ACTION_LAND | `uint8` | 5 | switch to AUTO | LAND | +\| Name | Type | Value | Description | +\| ----------------------------------------------------- | ------- | ----- | ------------------------------- | ------ | +\| GF_ACTION_NONE | `uint8` | 0 | no action on geofence violation | +\| GF_ACTION_WARN | `uint8` | 1 | critical mavlink message | +\| GF_ACTION_LOITER | `uint8` | 2 | switch to AUTO | LOITER | +\| GF_ACTION_RTL | `uint8` | 3 | switch to AUTO | RTL | +\| GF_ACTION_TERMINATE | `uint8` | 4 | flight termination | +\| GF_ACTION_LAND | `uint8` | 5 | switch to AUTO | LAND | ## Source Message diff --git a/docs/zh/msg_docs/GeofenceStatus.md b/docs/zh/msg_docs/GeofenceStatus.md index 329e9dfa45..2c273b8b48 100644 --- a/docs/zh/msg_docs/GeofenceStatus.md +++ b/docs/zh/msg_docs/GeofenceStatus.md @@ -16,10 +16,10 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| --------------------------------------------------------------------------------------------- | ------- | - | -- | -| GF_STATUS_LOADING | `uint8` | 0 | | -| GF_STATUS_READY | `uint8` | 1 | | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------------------------------- | ------- | - | -- | +| GF_STATUS_LOADING | `uint8` | 0 | | +| GF_STATUS_READY | `uint8` | 1 | | ## Source Message diff --git a/docs/zh/msg_docs/GimbalControls.md b/docs/zh/msg_docs/GimbalControls.md index 84276b477d..992d8cc177 100644 --- a/docs/zh/msg_docs/GimbalControls.md +++ b/docs/zh/msg_docs/GimbalControls.md @@ -16,11 +16,11 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------ | ------- | - | -- | -| INDEX_ROLL | `uint8` | 0 | | -| INDEX_PITCH | `uint8` | 1 | | -| INDEX_YAW | `uint8` | 2 | | +| 参数名 | 类型 | 值 | 描述 | +| ---------------------------------------------------------- | ------- | - | -- | +| INDEX_ROLL | `uint8` | 0 | | +| INDEX_PITCH | `uint8` | 1 | | +| INDEX_YAW | `uint8` | 2 | | ## Source Message diff --git a/docs/zh/msg_docs/GimbalDeviceAttitudeStatus.md b/docs/zh/msg_docs/GimbalDeviceAttitudeStatus.md index 37ecb4d5af..04add702fd 100644 --- a/docs/zh/msg_docs/GimbalDeviceAttitudeStatus.md +++ b/docs/zh/msg_docs/GimbalDeviceAttitudeStatus.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # GimbalDeviceAttitudeStatus (UORB message) -**TOPICS:** gimbal_deviceattitude_status +**TOPICS:** gimbal_device_attitude_status ## Fields @@ -26,15 +26,15 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -- | -- | -| DEVICE_FLAGS_RETRACT | `uint16` | 1 | | -| DEVICE_FLAGS_NEUTRAL | `uint16` | 2 | | -| DEVICE_FLAGS_ROLL_LOCK | `uint16` | 4 | | -| DEVICE_FLAGS_PITCH_LOCK | `uint16` | 8 | | -| DEVICE_FLAGS_YAW_LOCK | `uint16` | 16 | | -| DEVICE_FLAGS_YAW_IN_VEHICLE_FRAME | `uint16` | 32 | | -| DEVICE_FLAGS_YAW_IN_EARTH_FRAME | `uint16` | 64 | | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------- | -- | -- | +| DEVICE_FLAGS_RETRACT | `uint16` | 1 | | +| DEVICE_FLAGS_NEUTRAL | `uint16` | 2 | | +| DEVICE_FLAGS_ROLL_LOCK | `uint16` | 4 | | +| DEVICE_FLAGS_PITCH_LOCK | `uint16` | 8 | | +| DEVICE_FLAGS_YAW_LOCK | `uint16` | 16 | | +| DEVICE_FLAGS_YAW_IN_VEHICLE_FRAME | `uint16` | 32 | | +| DEVICE_FLAGS_YAW_IN_EARTH_FRAME | `uint16` | 64 | | ## Source Message diff --git a/docs/zh/msg_docs/GimbalDeviceInformation.md b/docs/zh/msg_docs/GimbalDeviceInformation.md index 8c9f50c5b9..cecf260aa2 100644 --- a/docs/zh/msg_docs/GimbalDeviceInformation.md +++ b/docs/zh/msg_docs/GimbalDeviceInformation.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # GimbalDeviceInformation (UORB message) -**TOPICS:** gimbal_deviceinformation +**TOPICS:** gimbal_device_information ## Fields @@ -29,20 +29,20 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ---- | -- | -| GIMBAL_DEVICE_CAP_FLAGS_HAS_RETRACT | `uint32` | 1 | | -| GIMBAL_DEVICE_CAP_FLAGS_HAS_NEUTRAL | `uint32` | 2 | | -| GIMBAL_DEVICE_CAP_FLAGS_HAS_ROLL_AXIS | `uint32` | 4 | | -| GIMBAL_DEVICE_CAP_FLAGS_HAS_ROLL_FOLLOW | `uint32` | 8 | | -| GIMBAL_DEVICE_CAP_FLAGS_HAS_ROLL_LOCK | `uint32` | 16 | | -| GIMBAL_DEVICE_CAP_FLAGS_HAS_PITCH_AXIS | `uint32` | 32 | | -| GIMBAL_DEVICE_CAP_FLAGS_HAS_PITCH_FOLLOW | `uint32` | 64 | | -| GIMBAL_DEVICE_CAP_FLAGS_HAS_PITCH_LOCK | `uint32` | 128 | | -| GIMBAL_DEVICE_CAP_FLAGS_HAS_YAW_AXIS | `uint32` | 256 | | -| GIMBAL_DEVICE_CAP_FLAGS_HAS_YAW_FOLLOW | `uint32` | 512 | | -| GIMBAL_DEVICE_CAP_FLAGS_HAS_YAW_LOCK | `uint32` | 1024 | | -| GIMBAL_DEVICE_CAP_FLAGS_SUPPORTS_INFINITE_YAW | `uint32` | 2048 | | +| 参数名 | 类型 | 值 | 描述 | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ---- | -- | +| GIMBAL_DEVICE_CAP_FLAGS_HAS_RETRACT | `uint32` | 1 | | +| GIMBAL_DEVICE_CAP_FLAGS_HAS_NEUTRAL | `uint32` | 2 | | +| GIMBAL_DEVICE_CAP_FLAGS_HAS_ROLL_AXIS | `uint32` | 4 | | +| GIMBAL_DEVICE_CAP_FLAGS_HAS_ROLL_FOLLOW | `uint32` | 8 | | +| GIMBAL_DEVICE_CAP_FLAGS_HAS_ROLL_LOCK | `uint32` | 16 | | +| GIMBAL_DEVICE_CAP_FLAGS_HAS_PITCH_AXIS | `uint32` | 32 | | +| GIMBAL_DEVICE_CAP_FLAGS_HAS_PITCH_FOLLOW | `uint32` | 64 | | +| GIMBAL_DEVICE_CAP_FLAGS_HAS_PITCH_LOCK | `uint32` | 128 | | +| GIMBAL_DEVICE_CAP_FLAGS_HAS_YAW_AXIS | `uint32` | 256 | | +| GIMBAL_DEVICE_CAP_FLAGS_HAS_YAW_FOLLOW | `uint32` | 512 | | +| GIMBAL_DEVICE_CAP_FLAGS_HAS_YAW_LOCK | `uint32` | 1024 | | +| GIMBAL_DEVICE_CAP_FLAGS_SUPPORTS_INFINITE_YAW | `uint32` | 2048 | | ## Source Message diff --git a/docs/zh/msg_docs/GimbalDeviceSetAttitude.md b/docs/zh/msg_docs/GimbalDeviceSetAttitude.md index decc960730..da80702ee8 100644 --- a/docs/zh/msg_docs/GimbalDeviceSetAttitude.md +++ b/docs/zh/msg_docs/GimbalDeviceSetAttitude.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # GimbalDeviceSetAttitude (UORB message) -**TOPICS:** gimbal_deviceset_attitude +**TOPICS:** gimbal_device_set_attitude ## Fields @@ -21,13 +21,13 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -- | -- | -| GIMBAL_DEVICE_FLAGS_RETRACT | `uint32` | 1 | | -| GIMBAL_DEVICE_FLAGS_NEUTRAL | `uint32` | 2 | | -| GIMBAL_DEVICE_FLAGS_ROLL_LOCK | `uint32` | 4 | | -| GIMBAL_DEVICE_FLAGS_PITCH_LOCK | `uint32` | 8 | | -| GIMBAL_DEVICE_FLAGS_YAW_LOCK | `uint32` | 16 | | +| 参数名 | 类型 | 值 | 描述 | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -- | -- | +| GIMBAL_DEVICE_FLAGS_RETRACT | `uint32` | 1 | | +| GIMBAL_DEVICE_FLAGS_NEUTRAL | `uint32` | 2 | | +| GIMBAL_DEVICE_FLAGS_ROLL_LOCK | `uint32` | 4 | | +| GIMBAL_DEVICE_FLAGS_PITCH_LOCK | `uint32` | 8 | | +| GIMBAL_DEVICE_FLAGS_YAW_LOCK | `uint32` | 16 | | ## Source Message diff --git a/docs/zh/msg_docs/GimbalManagerInformation.md b/docs/zh/msg_docs/GimbalManagerInformation.md index b1dc7492c1..317fbd4278 100644 --- a/docs/zh/msg_docs/GimbalManagerInformation.md +++ b/docs/zh/msg_docs/GimbalManagerInformation.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # GimbalManagerInformation (UORB message) -**TOPICS:** gimbal_managerinformation +**TOPICS:** gimbal_manager_information ## Fields @@ -22,22 +22,22 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------- | ------ | -- | -| GIMBAL_MANAGER_CAP_FLAGS_HAS_RETRACT | `uint32` | 1 | | -| GIMBAL_MANAGER_CAP_FLAGS_HAS_NEUTRAL | `uint32` | 2 | | -| GIMBAL_MANAGER_CAP_FLAGS_HAS_ROLL_AXIS | `uint32` | 4 | | -| GIMBAL_MANAGER_CAP_FLAGS_HAS_ROLL_FOLLOW | `uint32` | 8 | | -| GIMBAL_MANAGER_CAP_FLAGS_HAS_ROLL_LOCK | `uint32` | 16 | | -| GIMBAL_MANAGER_CAP_FLAGS_HAS_PITCH_AXIS | `uint32` | 32 | | -| GIMBAL_MANAGER_CAP_FLAGS_HAS_PITCH_FOLLOW | `uint32` | 64 | | -| GIMBAL_MANAGER_CAP_FLAGS_HAS_PITCH_LOCK | `uint32` | 128 | | -| GIMBAL_MANAGER_CAP_FLAGS_HAS_YAW_AXIS | `uint32` | 256 | | -| GIMBAL_MANAGER_CAP_FLAGS_HAS_YAW_FOLLOW | `uint32` | 512 | | -| GIMBAL_MANAGER_CAP_FLAGS_HAS_YAW_LOCK | `uint32` | 1024 | | -| GIMBAL_MANAGER_CAP_FLAGS_SUPPORTS_INFINITE_YAW | `uint32` | 2048 | | -| GIMBAL_MANAGER_CAP_FLAGS_CAN_POINT_LOCATION_LOCAL | `uint32` | 65536 | | -| GIMBAL_MANAGER_CAP_FLAGS_CAN_POINT_LOCATION_GLOBAL | `uint32` | 131072 | | +| 参数名 | 类型 | 值 | 描述 | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ------ | -- | +| GIMBAL_MANAGER_CAP_FLAGS_HAS_RETRACT | `uint32` | 1 | | +| GIMBAL_MANAGER_CAP_FLAGS_HAS_NEUTRAL | `uint32` | 2 | | +| GIMBAL_MANAGER_CAP_FLAGS_HAS_ROLL_AXIS | `uint32` | 4 | | +| GIMBAL_MANAGER_CAP_FLAGS_HAS_ROLL_FOLLOW | `uint32` | 8 | | +| GIMBAL_MANAGER_CAP_FLAGS_HAS_ROLL_LOCK | `uint32` | 16 | | +| GIMBAL_MANAGER_CAP_FLAGS_HAS_PITCH_AXIS | `uint32` | 32 | | +| GIMBAL_MANAGER_CAP_FLAGS_HAS_PITCH_FOLLOW | `uint32` | 64 | | +| GIMBAL_MANAGER_CAP_FLAGS_HAS_PITCH_LOCK | `uint32` | 128 | | +| GIMBAL_MANAGER_CAP_FLAGS_HAS_YAW_AXIS | `uint32` | 256 | | +| GIMBAL_MANAGER_CAP_FLAGS_HAS_YAW_FOLLOW | `uint32` | 512 | | +| GIMBAL_MANAGER_CAP_FLAGS_HAS_YAW_LOCK | `uint32` | 1024 | | +| GIMBAL_MANAGER_CAP_FLAGS_SUPPORTS_INFINITE_YAW | `uint32` | 2048 | | +| GIMBAL_MANAGER_CAP_FLAGS_CAN_POINT_LOCATION_LOCAL | `uint32` | 65536 | | +| GIMBAL_MANAGER_CAP_FLAGS_CAN_POINT_LOCATION_GLOBAL | `uint32` | 131072 | | ## Source Message diff --git a/docs/zh/msg_docs/GimbalManagerSetAttitude.md b/docs/zh/msg_docs/GimbalManagerSetAttitude.md index 561fefb37c..7d5955db39 100644 --- a/docs/zh/msg_docs/GimbalManagerSetAttitude.md +++ b/docs/zh/msg_docs/GimbalManagerSetAttitude.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # GimbalManagerSetAttitude (UORB message) -**TOPICS:** gimbal_managerset_attitude +**TOPICS:** gimbal_manager_set_attitude ## Fields @@ -24,14 +24,14 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -- | -- | -| GIMBAL_MANAGER_FLAGS_RETRACT | `uint32` | 1 | | -| GIMBAL_MANAGER_FLAGS_NEUTRAL | `uint32` | 2 | | -| GIMBAL_MANAGER_FLAGS_ROLL_LOCK | `uint32` | 4 | | -| GIMBAL_MANAGER_FLAGS_PITCH_LOCK | `uint32` | 8 | | -| GIMBAL_MANAGER_FLAGS_YAW_LOCK | `uint32` | 16 | | -| ORB_QUEUE_LENGTH | `uint8` | 2 | | +| 参数名 | 类型 | 值 | 描述 | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -- | -- | +| GIMBAL_MANAGER_FLAGS_RETRACT | `uint32` | 1 | | +| GIMBAL_MANAGER_FLAGS_NEUTRAL | `uint32` | 2 | | +| GIMBAL_MANAGER_FLAGS_ROLL_LOCK | `uint32` | 4 | | +| GIMBAL_MANAGER_FLAGS_PITCH_LOCK | `uint32` | 8 | | +| GIMBAL_MANAGER_FLAGS_YAW_LOCK | `uint32` | 16 | | +| ORB_QUEUE_LENGTH | `uint8` | 2 | | ## Source Message diff --git a/docs/zh/msg_docs/GimbalManagerSetManualControl.md b/docs/zh/msg_docs/GimbalManagerSetManualControl.md index dc112f81a0..a6b1379801 100644 --- a/docs/zh/msg_docs/GimbalManagerSetManualControl.md +++ b/docs/zh/msg_docs/GimbalManagerSetManualControl.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # GimbalManagerSetManualControl (UORB message) -**TOPICS:** gimbal_managerset_manualcontrol +**TOPICS:** gimbal_manager_set_manual_control ## Fields @@ -24,13 +24,13 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -- | -- | -| GIMBAL_MANAGER_FLAGS_RETRACT | `uint32` | 1 | | -| GIMBAL_MANAGER_FLAGS_NEUTRAL | `uint32` | 2 | | -| GIMBAL_MANAGER_FLAGS_ROLL_LOCK | `uint32` | 4 | | -| GIMBAL_MANAGER_FLAGS_PITCH_LOCK | `uint32` | 8 | | -| GIMBAL_MANAGER_FLAGS_YAW_LOCK | `uint32` | 16 | | +| 参数名 | 类型 | 值 | 描述 | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -- | -- | +| GIMBAL_MANAGER_FLAGS_RETRACT | `uint32` | 1 | | +| GIMBAL_MANAGER_FLAGS_NEUTRAL | `uint32` | 2 | | +| GIMBAL_MANAGER_FLAGS_ROLL_LOCK | `uint32` | 4 | | +| GIMBAL_MANAGER_FLAGS_PITCH_LOCK | `uint32` | 8 | | +| GIMBAL_MANAGER_FLAGS_YAW_LOCK | `uint32` | 16 | | ## Source Message diff --git a/docs/zh/msg_docs/GimbalManagerStatus.md b/docs/zh/msg_docs/GimbalManagerStatus.md index 6a70505163..034c5fe94d 100644 --- a/docs/zh/msg_docs/GimbalManagerStatus.md +++ b/docs/zh/msg_docs/GimbalManagerStatus.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # GimbalManagerStatus (UORB message) -**TOPICS:** gimbal_managerstatus +**TOPICS:** gimbal_manager_status ## Fields diff --git a/docs/zh/msg_docs/GotoSetpoint.md b/docs/zh/msg_docs/GotoSetpoint.md index f9a1467ad8..6eb7fed838 100644 --- a/docs/zh/msg_docs/GotoSetpoint.md +++ b/docs/zh/msg_docs/GotoSetpoint.md @@ -4,7 +4,13 @@ pageClass: is-wide-page # GotoSetpoint (UORB message) -Position and (optional) heading setpoints with corresponding speed constraints. Setpoints are intended as inputs to position and heading smoothers, respectively. Setpoints do not need to be kinematically consistent. Optional heading setpoints may be specified as controlled by the respective flag. Unset optional setpoints are not controlled. Unset optional constraints default to vehicle specifications. +Position and (optional) heading setpoints with corresponding speed constraints. + +Setpoints are intended as inputs to position and heading smoothers, respectively. +Setpoints do not need to be kinematically consistent. +Optional heading setpoints may be specified as controlled by the respective flag. +Unset optional setpoints are not controlled. +Unset optional constraints default to vehicle specifications. **TOPICS:** goto_setpoint @@ -12,22 +18,22 @@ Position and (optional) heading setpoints with corresponding speed constraints. | 参数名 | 类型 | Unit [Frame] | Range/Enum | 描述 | | ----------------------------------------------------------------------------------------------------------------- | ------------ | ---------------------------------------------------------------- | ---------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| timestamp | `uint64` | | | time since system start (microseconds) | -| 位置 | `float32[3]` | 米 | | NED local world frame | +| timestamp | `uint64` | us | | Time since system start | +| 位置 | `float32[3]` | m [NED] | | NED local world frame | | flag_control_heading | `bool` | | | true if heading is to be controlled | | heading | `float32` | | | (optional) [rad] [-pi,pi] from North | | flag_set_max_horizontal_speed | `bool` | | | true if setting a non-default horizontal speed limit | -| max_horizontal_speed | `float32` | | | (optional) [m/s] maximum speed (absolute) in the NE-plane | +| max_horizontal_speed | `float32` | 米/秒 | | (optional) Maximum speed (absolute) in the NE-plane | | flag_set_max_vertical_speed | `bool` | | | true if setting a non-default vertical speed limit | -| max_vertical_speed | `float32` | | | (optional) [m/s] maximum speed (absolute) in the D-axis | +| max_vertical_speed | `float32` | 米/秒 | | (optional) Maximum speed (absolute) in the D-axis | | flag_set_max_heading_rate | `bool` | | | true if setting a non-default heading rate limit | -| max_heading_rate | `float32` | | | (optional) [rad/s] maximum heading rate (absolute) | +| max_heading_rate | `float32` | rad/s | | (optional) Maximum heading rate (absolute) | ## Constants -| 参数名 | 类型 | 值 | 描述 | -| -------------------------------------------------------------------- | -------- | - | -- | -| MESSAGE_VERSION | `uint32` | 0 | | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------ | -------- | - | -- | +| MESSAGE_VERSION | `uint32` | 0 | | ## Source Message @@ -38,31 +44,32 @@ Click here to see original file ```c # Position and (optional) heading setpoints with corresponding speed constraints -# Setpoints are intended as inputs to position and heading smoothers, respectively -# Setpoints do not need to be kinematically consistent -# Optional heading setpoints may be specified as controlled by the respective flag -# Unset optional setpoints are not controlled -# Unset optional constraints default to vehicle specifications +# +# Setpoints are intended as inputs to position and heading smoothers, respectively. +# Setpoints do not need to be kinematically consistent. +# Optional heading setpoints may be specified as controlled by the respective flag. +# Unset optional setpoints are not controlled. +# Unset optional constraints default to vehicle specifications. uint32 MESSAGE_VERSION = 0 -uint64 timestamp # time since system start (microseconds) +uint64 timestamp # [us] Time since system start # setpoints -float32[3] position # [m] NED local world frame +float32[3] position # [m] [@frame NED] NED local world frame bool flag_control_heading # true if heading is to be controlled float32 heading # (optional) [rad] [-pi,pi] from North # constraints bool flag_set_max_horizontal_speed # true if setting a non-default horizontal speed limit -float32 max_horizontal_speed # (optional) [m/s] maximum speed (absolute) in the NE-plane +float32 max_horizontal_speed # [m/s] (optional) Maximum speed (absolute) in the NE-plane bool flag_set_max_vertical_speed # true if setting a non-default vertical speed limit -float32 max_vertical_speed # (optional) [m/s] maximum speed (absolute) in the D-axis +float32 max_vertical_speed # [m/s] (optional) Maximum speed (absolute) in the D-axis bool flag_set_max_heading_rate # true if setting a non-default heading rate limit -float32 max_heading_rate # (optional) [rad/s] maximum heading rate (absolute) +float32 max_heading_rate # [rad/s] (optional) Maximum heading rate (absolute) ``` ::: diff --git a/docs/zh/msg_docs/GpioConfig.md b/docs/zh/msg_docs/GpioConfig.md index 284d6bb8e1..74d96154bb 100644 --- a/docs/zh/msg_docs/GpioConfig.md +++ b/docs/zh/msg_docs/GpioConfig.md @@ -20,19 +20,19 @@ GPIO configuration. ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ---------------------------------------------------------------------------------------------------------- | -------- | --- | ------ | -| INPUT | `uint32` | 0 | 0x0000 | -| OUTPUT | `uint32` | 1 | 0x0001 | -| PULLUP | `uint32` | 16 | 0x0010 | -| PULLDOWN | `uint32` | 32 | 0x0020 | -| OPENDRAIN | `uint32` | 256 | 0x0100 | -| INPUT_FLOATING | `uint32` | 0 | 0x0000 | -| INPUT_PULLUP | `uint32` | 16 | 0x0010 | -| INPUT_PULLDOWN | `uint32` | 32 | 0x0020 | -| OUTPUT_PUSHPULL | `uint32` | 0 | 0x0000 | -| OUTPUT_OPENDRAIN | `uint32` | 256 | 0x0100 | -| OUTPUT_OPENDRAIN_PULLUP | `uint32` | 272 | 0x0110 | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------------------------------------------- | -------- | --- | ------ | +| INPUT | `uint32` | 0 | 0x0000 | +| OUTPUT | `uint32` | 1 | 0x0001 | +| PULLUP | `uint32` | 16 | 0x0010 | +| PULLDOWN | `uint32` | 32 | 0x0020 | +| OPENDRAIN | `uint32` | 256 | 0x0100 | +| INPUT_FLOATING | `uint32` | 0 | 0x0000 | +| INPUT_PULLUP | `uint32` | 16 | 0x0010 | +| INPUT_PULLDOWN | `uint32` | 32 | 0x0020 | +| OUTPUT_PUSHPULL | `uint32` | 0 | 0x0000 | +| OUTPUT_OPENDRAIN | `uint32` | 256 | 0x0100 | +| OUTPUT_OPENDRAIN_PULLUP | `uint32` | 272 | 0x0110 | ## Source Message diff --git a/docs/zh/msg_docs/GpioIn.md b/docs/zh/msg_docs/GpioIn.md index 659eee9abd..303d8a854c 100644 --- a/docs/zh/msg_docs/GpioIn.md +++ b/docs/zh/msg_docs/GpioIn.md @@ -18,9 +18,9 @@ GPIO mask and state. ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ---------------------------------------------------------------- | ------- | - | -- | -| MAX_INSTANCES | `uint8` | 8 | | +| 参数名 | 类型 | 值 | 描述 | +| -------------------------------------------------------------- | ------- | - | -- | +| MAX_INSTANCES | `uint8` | 8 | | ## Source Message diff --git a/docs/zh/msg_docs/GpsDump.md b/docs/zh/msg_docs/GpsDump.md index 916128d66d..81c0dfd9b4 100644 --- a/docs/zh/msg_docs/GpsDump.md +++ b/docs/zh/msg_docs/GpsDump.md @@ -20,11 +20,11 @@ This message is used to dump the raw gps communication to the log. ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------------------------- | ------- | -- | -- | -| INSTANCE_MAIN | `uint8` | 0 | | -| INSTANCE_SECONDARY | `uint8` | 1 | | -| ORB_QUEUE_LENGTH | `uint8` | 16 | | +| 参数名 | 类型 | 值 | 描述 | +| ----------------------------------------------------------------------------------------- | ------- | -- | -- | +| INSTANCE_MAIN | `uint8` | 0 | | +| INSTANCE_SECONDARY | `uint8` | 1 | | +| ORB_QUEUE_LENGTH | `uint8` | 16 | | ## Source Message diff --git a/docs/zh/msg_docs/GpsInjectData.md b/docs/zh/msg_docs/GpsInjectData.md index f7d4dcf781..bd21b7eede 100644 --- a/docs/zh/msg_docs/GpsInjectData.md +++ b/docs/zh/msg_docs/GpsInjectData.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # GpsInjectData (UORB message) -**TOPICS:** gps_injectdata +**TOPICS:** gps_inject_data ## Fields @@ -18,10 +18,10 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------------------------- | ------- | - | -- | -| ORB_QUEUE_LENGTH | `uint8` | 8 | | -| MAX_INSTANCES | `uint8` | 2 | | +| 参数名 | 类型 | 值 | 描述 | +| ----------------------------------------------------------------------------------------- | ------- | - | -- | +| ORB_QUEUE_LENGTH | `uint8` | 8 | | +| MAX_INSTANCES | `uint8` | 2 | | ## Source Message diff --git a/docs/zh/msg_docs/Gripper.md b/docs/zh/msg_docs/Gripper.md index 533e5a3ec5..47d9dd6601 100644 --- a/docs/zh/msg_docs/Gripper.md +++ b/docs/zh/msg_docs/Gripper.md @@ -17,10 +17,10 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| -------------------------------------------------------------------- | ------ | - | -- | -| COMMAND_GRAB | `int8` | 0 | | -| COMMAND_RELEASE | `int8` | 1 | | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------ | ------ | - | -- | +| COMMAND_GRAB | `int8` | 0 | | +| COMMAND_RELEASE | `int8` | 1 | | ## Source Message diff --git a/docs/zh/msg_docs/HeaterStatus.md b/docs/zh/msg_docs/HeaterStatus.md index 70f2ea04ce..3065ce3e22 100644 --- a/docs/zh/msg_docs/HeaterStatus.md +++ b/docs/zh/msg_docs/HeaterStatus.md @@ -25,10 +25,10 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ---------------------------------------------------------- | ------- | - | -- | -| MODE_GPIO | `uint8` | 1 | | -| MODE_PX4IO | `uint8` | 2 | | +| 参数名 | 类型 | 值 | 描述 | +| -------------------------------------------------------- | ------- | - | -- | +| MODE_GPIO | `uint8` | 1 | | +| MODE_PX4IO | `uint8` | 2 | | ## Source Message diff --git a/docs/zh/msg_docs/HomePosition.md b/docs/zh/msg_docs/HomePosition.md index dfb626284e..70fb275bd4 100644 --- a/docs/zh/msg_docs/HomePosition.md +++ b/docs/zh/msg_docs/HomePosition.md @@ -30,9 +30,9 @@ GPS home position in WGS84 coordinates. ## Constants -| 参数名 | 类型 | 值 | 描述 | -| -------------------------------------------------------------------- | -------- | - | -- | -| MESSAGE_VERSION | `uint32` | 1 | | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------ | -------- | - | -- | +| MESSAGE_VERSION | `uint32` | 1 | | ## Source Message diff --git a/docs/zh/msg_docs/HomePositionV0.md b/docs/zh/msg_docs/HomePositionV0.md index e9e5f9029b..71edf622d9 100644 --- a/docs/zh/msg_docs/HomePositionV0.md +++ b/docs/zh/msg_docs/HomePositionV0.md @@ -6,7 +6,7 @@ pageClass: is-wide-page GPS home position in WGS84 coordinates. -**TOPICS:** home_positionv0 +**TOPICS:** home_position_v0 ## Fields @@ -28,9 +28,9 @@ GPS home position in WGS84 coordinates. ## Constants -| 参数名 | 类型 | 值 | 描述 | -| -------------------------------------------------------------------- | -------- | - | -- | -| MESSAGE_VERSION | `uint32` | 0 | | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------ | -------- | - | -- | +| MESSAGE_VERSION | `uint32` | 0 | | ## Source Message diff --git a/docs/zh/msg_docs/HoverThrustEstimate.md b/docs/zh/msg_docs/HoverThrustEstimate.md index 9a643698e1..1a84254125 100644 --- a/docs/zh/msg_docs/HoverThrustEstimate.md +++ b/docs/zh/msg_docs/HoverThrustEstimate.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # HoverThrustEstimate (UORB message) -**TOPICS:** hover_thrustestimate +**TOPICS:** hover_thrust_estimate ## Fields diff --git a/docs/zh/msg_docs/InputRc.md b/docs/zh/msg_docs/InputRc.md index d594ab203b..3d71749165 100644 --- a/docs/zh/msg_docs/InputRc.md +++ b/docs/zh/msg_docs/InputRc.md @@ -28,26 +28,26 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | --- | -------------------------------------------------------------------------------------------------------------------------------- | -| RC_INPUT_SOURCE_UNKNOWN | `uint8` | 0 | | -| RC_INPUT_SOURCE_PX4FMU_PPM | `uint8` | 1 | | -| RC_INPUT_SOURCE_PX4IO_PPM | `uint8` | 2 | | -| RC_INPUT_SOURCE_PX4IO_SPEKTRUM | `uint8` | 3 | | -| RC_INPUT_SOURCE_PX4IO_SBUS | `uint8` | 4 | | -| RC_INPUT_SOURCE_PX4IO_ST24 | `uint8` | 5 | | -| RC_INPUT_SOURCE_MAVLINK | `uint8` | 6 | | -| RC_INPUT_SOURCE_QURT | `uint8` | 7 | | -| RC_INPUT_SOURCE_PX4FMU_SPEKTRUM | `uint8` | 8 | | -| RC_INPUT_SOURCE_PX4FMU_SBUS | `uint8` | 9 | | -| RC_INPUT_SOURCE_PX4FMU_ST24 | `uint8` | 10 | | -| RC_INPUT_SOURCE_PX4FMU_SUMD | `uint8` | 11 | | -| RC_INPUT_SOURCE_PX4FMU_DSM | `uint8` | 12 | | -| RC_INPUT_SOURCE_PX4IO_SUMD | `uint8` | 13 | | -| RC_INPUT_SOURCE_PX4FMU_CRSF | `uint8` | 14 | | -| RC_INPUT_SOURCE_PX4FMU_GHST | `uint8` | 15 | | -| RC_INPUT_MAX_CHANNELS | `uint8` | 18 | Maximum number of R/C input channels in the system. S.Bus has up to 18 channels. | -| RSSI_MAX | `int8` | 100 | | +| 参数名 | 类型 | 值 | 描述 | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | --- | -------------------------------------------------------------------------------------------------------------------------------- | +| RC_INPUT_SOURCE_UNKNOWN | `uint8` | 0 | | +| RC_INPUT_SOURCE_PX4FMU_PPM | `uint8` | 1 | | +| RC_INPUT_SOURCE_PX4IO_PPM | `uint8` | 2 | | +| RC_INPUT_SOURCE_PX4IO_SPEKTRUM | `uint8` | 3 | | +| RC_INPUT_SOURCE_PX4IO_SBUS | `uint8` | 4 | | +| RC_INPUT_SOURCE_PX4IO_ST24 | `uint8` | 5 | | +| RC_INPUT_SOURCE_MAVLINK | `uint8` | 6 | | +| RC_INPUT_SOURCE_QURT | `uint8` | 7 | | +| RC_INPUT_SOURCE_PX4FMU_SPEKTRUM | `uint8` | 8 | | +| RC_INPUT_SOURCE_PX4FMU_SBUS | `uint8` | 9 | | +| RC_INPUT_SOURCE_PX4FMU_ST24 | `uint8` | 10 | | +| RC_INPUT_SOURCE_PX4FMU_SUMD | `uint8` | 11 | | +| RC_INPUT_SOURCE_PX4FMU_DSM | `uint8` | 12 | | +| RC_INPUT_SOURCE_PX4IO_SUMD | `uint8` | 13 | | +| RC_INPUT_SOURCE_PX4FMU_CRSF | `uint8` | 14 | | +| RC_INPUT_SOURCE_PX4FMU_GHST | `uint8` | 15 | | +| RC_INPUT_MAX_CHANNELS | `uint8` | 18 | Maximum number of R/C input channels in the system. S.Bus has up to 18 channels. | +| RSSI_MAX | `int8` | 100 | | ## Source Message diff --git a/docs/zh/msg_docs/InternalCombustionEngineControl.md b/docs/zh/msg_docs/InternalCombustionEngineControl.md index af98f6a115..d245574a34 100644 --- a/docs/zh/msg_docs/InternalCombustionEngineControl.md +++ b/docs/zh/msg_docs/InternalCombustionEngineControl.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # InternalCombustionEngineControl (UORB message) -**TOPICS:** internal_combustionengine_control +**TOPICS:** internal_combustion_engine_control ## Fields diff --git a/docs/zh/msg_docs/InternalCombustionEngineStatus.md b/docs/zh/msg_docs/InternalCombustionEngineStatus.md index 79866cfb21..5ffede22c1 100644 --- a/docs/zh/msg_docs/InternalCombustionEngineStatus.md +++ b/docs/zh/msg_docs/InternalCombustionEngineStatus.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # InternalCombustionEngineStatus (UORB message) -**TOPICS:** internal_combustionengine_status +**TOPICS:** internal_combustion_engine_status ## Fields @@ -36,36 +36,36 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ------ | -------------------------------------------------------------------------------------- | -| STATE_STOPPED | `uint8` | 0 | The engine is not running. This is the default state. | -| STATE_STARTING | `uint8` | 1 | The engine is starting. This is a transient state. | -| STATE_RUNNING | `uint8` | 2 | The engine is running normally. | -| STATE_FAULT | `uint8` | 3 | The engine can no longer function. | -| FLAG_GENERAL_ERROR | `uint32` | 1 | General error. | -| FLAG_CRANKSHAFT_SENSOR_ERROR_SUPPORTED | `uint32` | 2 | Error of the crankshaft sensor. This flag is optional. | -| FLAG_CRANKSHAFT_SENSOR_ERROR | `uint32` | 4 | | -| FLAG_TEMPERATURE_SUPPORTED | `uint32` | 8 | Temperature levels. These flags are optional | -| FLAG_TEMPERATURE_BELOW_NOMINAL | `uint32` | 16 | Under-temperature warning | -| FLAG_TEMPERATURE_ABOVE_NOMINAL | `uint32` | 32 | Over-temperature warning | -| FLAG_TEMPERATURE_OVERHEATING | `uint32` | 64 | Critical overheating | -| FLAG_TEMPERATURE_EGT_ABOVE_NOMINAL | `uint32` | 128 | Exhaust gas over-temperature warning | -| FLAG_FUEL_PRESSURE_SUPPORTED | `uint32` | 256 | Fuel pressure. These flags are optional | -| FLAG_FUEL_PRESSURE_BELOW_NOMINAL | `uint32` | 512 | Under-pressure warning | -| FLAG_FUEL_PRESSURE_ABOVE_NOMINAL | `uint32` | 1024 | Over-pressure warning | -| FLAG_DETONATION_SUPPORTED | `uint32` | 2048 | Detonation warning. This flag is optional. | -| FLAG_DETONATION_OBSERVED | `uint32` | 4096 | Detonation condition observed warning | -| FLAG_MISFIRE_SUPPORTED | `uint32` | 8192 | Misfire warning. This flag is optional. | -| FLAG_MISFIRE_OBSERVED | `uint32` | 16384 | Misfire condition observed warning | -| FLAG_OIL_PRESSURE_SUPPORTED | `uint32` | 32768 | Oil pressure. These flags are optional | -| FLAG_OIL_PRESSURE_BELOW_NOMINAL | `uint32` | 65536 | Under-pressure warning | -| FLAG_OIL_PRESSURE_ABOVE_NOMINAL | `uint32` | 131072 | Over-pressure warning | -| FLAG_DEBRIS_SUPPORTED | `uint32` | 262144 | Debris warning. This flag is optional | -| FLAG_DEBRIS_DETECTED | `uint32` | 524288 | Detection of debris warning | -| SPARK_PLUG_SINGLE | `uint8` | 0 | | -| SPARK_PLUG_FIRST_ACTIVE | `uint8` | 1 | | -| SPARK_PLUG_SECOND_ACTIVE | `uint8` | 2 | | -| SPARK_PLUG_BOTH_ACTIVE | `uint8` | 3 | | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ------ | -------------------------------------------------------------------------------------- | +| STATE_STOPPED | `uint8` | 0 | The engine is not running. This is the default state. | +| STATE_STARTING | `uint8` | 1 | The engine is starting. This is a transient state. | +| STATE_RUNNING | `uint8` | 2 | The engine is running normally. | +| STATE_FAULT | `uint8` | 3 | The engine can no longer function. | +| FLAG_GENERAL_ERROR | `uint32` | 1 | General error. | +| FLAG_CRANKSHAFT_SENSOR_ERROR_SUPPORTED | `uint32` | 2 | Error of the crankshaft sensor. This flag is optional. | +| FLAG_CRANKSHAFT_SENSOR_ERROR | `uint32` | 4 | | +| FLAG_TEMPERATURE_SUPPORTED | `uint32` | 8 | Temperature levels. These flags are optional | +| FLAG_TEMPERATURE_BELOW_NOMINAL | `uint32` | 16 | Under-temperature warning | +| FLAG_TEMPERATURE_ABOVE_NOMINAL | `uint32` | 32 | Over-temperature warning | +| FLAG_TEMPERATURE_OVERHEATING | `uint32` | 64 | Critical overheating | +| FLAG_TEMPERATURE_EGT_ABOVE_NOMINAL | `uint32` | 128 | Exhaust gas over-temperature warning | +| FLAG_FUEL_PRESSURE_SUPPORTED | `uint32` | 256 | Fuel pressure. These flags are optional | +| FLAG_FUEL_PRESSURE_BELOW_NOMINAL | `uint32` | 512 | Under-pressure warning | +| FLAG_FUEL_PRESSURE_ABOVE_NOMINAL | `uint32` | 1024 | Over-pressure warning | +| FLAG_DETONATION_SUPPORTED | `uint32` | 2048 | Detonation warning. This flag is optional. | +| FLAG_DETONATION_OBSERVED | `uint32` | 4096 | Detonation condition observed warning | +| FLAG_MISFIRE_SUPPORTED | `uint32` | 8192 | Misfire warning. This flag is optional. | +| FLAG_MISFIRE_OBSERVED | `uint32` | 16384 | Misfire condition observed warning | +| FLAG_OIL_PRESSURE_SUPPORTED | `uint32` | 32768 | Oil pressure. These flags are optional | +| FLAG_OIL_PRESSURE_BELOW_NOMINAL | `uint32` | 65536 | Under-pressure warning | +| FLAG_OIL_PRESSURE_ABOVE_NOMINAL | `uint32` | 131072 | Over-pressure warning | +| FLAG_DEBRIS_SUPPORTED | `uint32` | 262144 | Debris warning. This flag is optional | +| FLAG_DEBRIS_DETECTED | `uint32` | 524288 | Detection of debris warning | +| SPARK_PLUG_SINGLE | `uint8` | 0 | | +| SPARK_PLUG_FIRST_ACTIVE | `uint8` | 1 | | +| SPARK_PLUG_SECOND_ACTIVE | `uint8` | 2 | | +| SPARK_PLUG_BOTH_ACTIVE | `uint8` | 3 | | ## Source Message diff --git a/docs/zh/msg_docs/LandingGear.md b/docs/zh/msg_docs/LandingGear.md index cfee3fe457..88c533cfa0 100644 --- a/docs/zh/msg_docs/LandingGear.md +++ b/docs/zh/msg_docs/LandingGear.md @@ -15,11 +15,11 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| -------------------------------------------------------- | ------ | -- | ---------------------- | -| GEAR_UP | `int8` | 1 | landing gear up | -| GEAR_DOWN | `int8` | -1 | landing gear down | -| GEAR_KEEP | `int8` | 0 | keep the current state | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------ | ------ | -- | ---------------------- | +| GEAR_UP | `int8` | 1 | landing gear up | +| GEAR_DOWN | `int8` | -1 | landing gear down | +| GEAR_KEEP | `int8` | 0 | keep the current state | ## Source Message diff --git a/docs/zh/msg_docs/LandingGearWheel.md b/docs/zh/msg_docs/LandingGearWheel.md index 3e9fa40e51..87f9d9580f 100644 --- a/docs/zh/msg_docs/LandingGearWheel.md +++ b/docs/zh/msg_docs/LandingGearWheel.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # LandingGearWheel (UORB message) -**TOPICS:** landing_gearwheel +**TOPICS:** landing_gear_wheel ## Fields diff --git a/docs/zh/msg_docs/LandingTargetInnovations.md b/docs/zh/msg_docs/LandingTargetInnovations.md index d2dd689763..ef529deec9 100644 --- a/docs/zh/msg_docs/LandingTargetInnovations.md +++ b/docs/zh/msg_docs/LandingTargetInnovations.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # LandingTargetInnovations (UORB message) -**TOPICS:** landing_targetinnovations +**TOPICS:** landing_target_innovations ## Fields diff --git a/docs/zh/msg_docs/LandingTargetPose.md b/docs/zh/msg_docs/LandingTargetPose.md index b0e05a7e65..0fe838e10b 100644 --- a/docs/zh/msg_docs/LandingTargetPose.md +++ b/docs/zh/msg_docs/LandingTargetPose.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Relative position of precision land target in navigation (body fixed, north aligned, NED) and inertial (world fixed, north aligned, NED) frames. -**TOPICS:** landing_targetpose +**TOPICS:** landing_target_pose ## Fields diff --git a/docs/zh/msg_docs/LateralControlConfiguration.md b/docs/zh/msg_docs/LateralControlConfiguration.md index 59a1d9ad11..6352037c55 100644 --- a/docs/zh/msg_docs/LateralControlConfiguration.md +++ b/docs/zh/msg_docs/LateralControlConfiguration.md @@ -4,22 +4,24 @@ pageClass: is-wide-page # LateralControlConfiguration (UORB message) -Fixed Wing Lateral Control Configuration message. Used by the fw_lateral_longitudinal_control module to constrain FixedWingLateralSetpoint messages. +Fixed Wing Lateral Control Configuration message. -**TOPICS:** lateral_controlconfiguration +Used by the fw_lateral_longitudinal_control module to constrain FixedWingLateralSetpoint messages. + +**TOPICS:** lateral_control_configuration ## Fields | 参数名 | 类型 | Unit [Frame] | Range/Enum | 描述 | | ----------------------------------------------------------- | --------- | ---------------------------------------------------------------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------- | -| timestamp | `uint64` | | | time since system start (microseconds) | -| lateral_accel_max | `float32` | m/s^2 | | currently maps to a maximum roll angle, accel_max = tan(roll_max) \* GRAVITY | +| timestamp | `uint64` | us | | Time since system start | +| lateral_accel_max | `float32` | m/s^2 | | Currently maps to a maximum roll angle, accel_max = tan(roll_max) \* GRAVITY | ## Constants -| 参数名 | 类型 | 值 | 描述 | -| -------------------------------------------------------------------- | -------- | - | -- | -| MESSAGE_VERSION | `uint32` | 0 | | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------ | -------- | - | -- | +| MESSAGE_VERSION | `uint32` | 0 | | ## Source Message @@ -30,13 +32,14 @@ Click here to see original file ```c # Fixed Wing Lateral Control Configuration message +# # Used by the fw_lateral_longitudinal_control module to constrain FixedWingLateralSetpoint messages. uint32 MESSAGE_VERSION = 0 -uint64 timestamp # time since system start (microseconds) +uint64 timestamp # [us] Time since system start -float32 lateral_accel_max # [m/s^2] currently maps to a maximum roll angle, accel_max = tan(roll_max) * GRAVITY +float32 lateral_accel_max # [m/s^2] Currently maps to a maximum roll angle, accel_max = tan(roll_max) * GRAVITY ``` ::: diff --git a/docs/zh/msg_docs/LaunchDetectionStatus.md b/docs/zh/msg_docs/LaunchDetectionStatus.md index b6389ee7c8..f7713e2aa2 100644 --- a/docs/zh/msg_docs/LaunchDetectionStatus.md +++ b/docs/zh/msg_docs/LaunchDetectionStatus.md @@ -6,22 +6,23 @@ pageClass: is-wide-page Status of the launch detection state machine (fixed-wing only). -**TOPICS:** launch_detectionstatus +**TOPICS:** launch_detection_status ## Fields -| 参数名 | 类型 | Unit [Frame] | Range/Enum | 描述 | -| ---------------------------------------------------------------- | -------- | ---------------------------------------------------------------- | ---------- | --------------------------------------------------------- | -| timestamp | `uint64` | | | time since system start (microseconds) | -| launch_detection_state | `uint8` | | | | +| 参数名 | 类型 | Unit [Frame] | Range/Enum | 描述 | +| ------------------------------------------------------------------------------------------------ | -------- | ---------------------------------------------------------------- | ---------- | -------------------------------------------------------------------------------------------------------------------------------- | +| timestamp | `uint64` | | | time since system start (microseconds) | +| launch_detection_state | `uint8` | | | | +| selected_control_surface_disarmed | `bool` | | | flag indicating whether selected actuators should kept disarmed (have to be configured in control allocation) | ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | - | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| STATE_WAITING_FOR_LAUNCH | `uint8` | 0 | waiting for launch | -| STATE_LAUNCH_DETECTED_DISABLED_MOTOR | `uint8` | 1 | launch detected, but keep motor(s) disabled (e.g. because it can't spin freely while on catapult) | -| STATE_FLYING | `uint8` | 2 | launch detected, use normal takeoff/flying configuration | +| 参数名 | 类型 | 值 | 描述 | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | - | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| STATE_WAITING_FOR_LAUNCH | `uint8` | 0 | waiting for launch | +| STATE_LAUNCH_DETECTED_DISABLED_MOTOR | `uint8` | 1 | launch detected, but keep motor(s) disabled (e.g. because it can't spin freely while on catapult) | +| STATE_FLYING | `uint8` | 2 | launch detected, use normal takeoff/flying configuration | ## Source Message @@ -40,6 +41,8 @@ uint8 STATE_LAUNCH_DETECTED_DISABLED_MOTOR = 1 # launch detected, but keep moto uint8 STATE_FLYING = 2 # launch detected, use normal takeoff/flying configuration uint8 launch_detection_state + +bool selected_control_surface_disarmed # [-] flag indicating whether selected actuators should kept disarmed (have to be configured in control allocation) ``` ::: diff --git a/docs/zh/msg_docs/LedControl.md b/docs/zh/msg_docs/LedControl.md index 2b83e1c972..3a96cff505 100644 --- a/docs/zh/msg_docs/LedControl.md +++ b/docs/zh/msg_docs/LedControl.md @@ -21,27 +21,27 @@ LED control: control a single or multiple LED's. These are the externally visibl ## Constants -| 参数名 | 类型 | 值 | 描述 | -| --------------------------------------------------------------------------------------------- | ------- | - | ------------------------------------------------------------------------------------------------------------------------------------------------ | -| COLOR_OFF | `uint8` | 0 | this is only used in the drivers | -| COLOR_RED | `uint8` | 1 | | -| COLOR_GREEN | `uint8` | 2 | | -| COLOR_BLUE | `uint8` | 3 | | -| COLOR_YELLOW | `uint8` | 4 | | -| COLOR_PURPLE | `uint8` | 5 | | -| COLOR_AMBER | `uint8` | 6 | | -| COLOR_CYAN | `uint8` | 7 | | -| COLOR_WHITE | `uint8` | 8 | | -| MODE_OFF | `uint8` | 0 | turn LED off | -| MODE_ON | `uint8` | 1 | turn LED on | -| MODE_DISABLED | `uint8` | 2 | disable this priority (switch to lower priority setting) | -| MODE_BLINK_SLOW | `uint8` | 3 | | -| MODE_BLINK_NORMAL | `uint8` | 4 | | -| MODE_BLINK_FAST | `uint8` | 5 | | -| MODE_BREATHE | `uint8` | 6 | continuously increase & decrease brightness (solid color if driver does not support it) | -| MODE_FLASH | `uint8` | 7 | two fast blinks (on/off) with timing as in MODE_BLINK_FAST and then off for a while | -| MAX_PRIORITY | `uint8` | 2 | maximum priority (minimum is 0) | -| ORB_QUEUE_LENGTH | `uint8` | 8 | needs to match BOARD_MAX_LEDS | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------------------------------- | ------- | - | ------------------------------------------------------------------------------------------------------------------------------------------------ | +| COLOR_OFF | `uint8` | 0 | this is only used in the drivers | +| COLOR_RED | `uint8` | 1 | | +| COLOR_GREEN | `uint8` | 2 | | +| COLOR_BLUE | `uint8` | 3 | | +| COLOR_YELLOW | `uint8` | 4 | | +| COLOR_PURPLE | `uint8` | 5 | | +| COLOR_AMBER | `uint8` | 6 | | +| COLOR_CYAN | `uint8` | 7 | | +| COLOR_WHITE | `uint8` | 8 | | +| MODE_OFF | `uint8` | 0 | turn LED off | +| MODE_ON | `uint8` | 1 | turn LED on | +| MODE_DISABLED | `uint8` | 2 | disable this priority (switch to lower priority setting) | +| MODE_BLINK_SLOW | `uint8` | 3 | | +| MODE_BLINK_NORMAL | `uint8` | 4 | | +| MODE_BLINK_FAST | `uint8` | 5 | | +| MODE_BREATHE | `uint8` | 6 | continuously increase & decrease brightness (solid color if driver does not support it) | +| MODE_FLASH | `uint8` | 7 | two fast blinks (on/off) with timing as in MODE_BLINK_FAST and then off for a while | +| MAX_PRIORITY | `uint8` | 2 | maximum priority (minimum is 0) | +| ORB_QUEUE_LENGTH | `uint8` | 8 | needs to match BOARD_MAX_LEDS | ## Source Message diff --git a/docs/zh/msg_docs/LogMessage.md b/docs/zh/msg_docs/LogMessage.md index b6cf33bc6e..3ddfc3191a 100644 --- a/docs/zh/msg_docs/LogMessage.md +++ b/docs/zh/msg_docs/LogMessage.md @@ -18,9 +18,9 @@ A logging message, output with PX4_WARN, PX4_ERR, PX4_INFO. ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------------------------- | ------- | - | -- | -| ORB_QUEUE_LENGTH | `uint8` | 4 | | +| 参数名 | 类型 | 值 | 描述 | +| ----------------------------------------------------------------------------------------- | ------- | - | -- | +| ORB_QUEUE_LENGTH | `uint8` | 4 | | ## Source Message diff --git a/docs/zh/msg_docs/LoggerStatus.md b/docs/zh/msg_docs/LoggerStatus.md index 11472db2f2..302bf6a0c0 100644 --- a/docs/zh/msg_docs/LoggerStatus.md +++ b/docs/zh/msg_docs/LoggerStatus.md @@ -24,13 +24,13 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------------------------------- | ------- | - | -------------------------------------------------------------------------------------------- | -| LOGGER_TYPE_FULL | `uint8` | 0 | Normal, full size log | -| LOGGER_TYPE_MISSION | `uint8` | 1 | reduced mission log (e.g. for geotagging) | -| BACKEND_FILE | `uint8` | 1 | | -| BACKEND_MAVLINK | `uint8` | 2 | | -| BACKEND_ALL | `uint8` | 3 | | +| 参数名 | 类型 | 值 | 描述 | +| ----------------------------------------------------------------------------------------------- | ------- | - | -------------------------------------------------------------------------------------------- | +| LOGGER_TYPE_FULL | `uint8` | 0 | Normal, full size log | +| LOGGER_TYPE_MISSION | `uint8` | 1 | reduced mission log (e.g. for geotagging) | +| BACKEND_FILE | `uint8` | 1 | | +| BACKEND_MAVLINK | `uint8` | 2 | | +| BACKEND_ALL | `uint8` | 3 | | ## Source Message diff --git a/docs/zh/msg_docs/LongitudinalControlConfiguration.md b/docs/zh/msg_docs/LongitudinalControlConfiguration.md index e33c7d4669..5dabc96301 100644 --- a/docs/zh/msg_docs/LongitudinalControlConfiguration.md +++ b/docs/zh/msg_docs/LongitudinalControlConfiguration.md @@ -4,30 +4,33 @@ pageClass: is-wide-page # LongitudinalControlConfiguration (UORB message) -Fixed Wing Longitudinal Control Configuration message. Used by the fw_lateral_longitudinal_control module and TECS to constrain FixedWingLongitudinalSetpoint messages. and configure the resultant setpoints. +Fixed Wing Longitudinal Control Configuration message. -**TOPICS:** longitudinal_controlconfiguration +Used by the fw_lateral_longitudinal_control module and TECS to constrain FixedWingLongitudinalSetpoint messages +and configure the resultant setpoints. + +**TOPICS:** longitudinal_control_configuration ## Fields | 参数名 | 类型 | Unit [Frame] | Range/Enum | 描述 | | ------------------------------------------------------------------------------------------- | --------- | ---------------------------------------------------------------- | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| timestamp | `uint64` | | | time since system start (microseconds) | -| pitch_min | `float32` | rad | [-pi : pi] | defaults to FW_P_LIM_MIN if NAN. | -| pitch_max | `float32` | rad | [-pi : pi] | defaults to FW_P_LIM_MAX if NAN. | -| throttle_min | `float32` | norm | [0 : 1] | deaults to FW_THR_MIN if NAN. | -| throttle_max | `float32` | norm | [0 : 1] | defaults to FW_THR_MAX if NAN. | -| climb_rate_target | `float32` | 米/秒 | | target climbrate to change altitude. Defaults to FW_T_CLIMB_MAX if NAN. Not used if height_rate is directly set in FixedWingLongitudinalSetpoint. | -| sink_rate_target | `float32` | 米/秒 | | target sinkrate to change altitude. Defaults to FW_T_SINK_MAX if NAN. Not used if height_rate is directly set in FixedWingLongitudinalSetpoint. | -| speed_weight | `float32` | | [0 : 2] | , 0=pitch controls altitude only, 2=pitch controls airspeed only | -| enforce_low_height_condition | `bool` | boolean | | if true, the altitude controller is configured with an alternative timeconstant for tighter altitude tracking | -| disable_underspeed_protection | `bool` | boolean | | if true, underspeed handling is disabled in the altitude controller | +| timestamp | `uint64` | us | | Time since system start | +| pitch_min | `float32` | rad | [-pi : pi] | Defaults to FW_P_LIM_MIN if NAN. | +| pitch_max | `float32` | rad | [-pi : pi] | Defaults to FW_P_LIM_MAX if NAN. | +| throttle_min | `float32` | norm | [0 : 1] | Defaults to FW_THR_MIN if NAN. | +| throttle_max | `float32` | norm | [0 : 1] | Defaults to FW_THR_MAX if NAN. | +| climb_rate_target | `float32` | 米/秒 | | Target climbrate to change altitude. Defaults to FW_T_CLIMB_MAX if NAN. Not used if height_rate is directly set in FixedWingLongitudinalSetpoint. | +| sink_rate_target | `float32` | 米/秒 | | Target sinkrate to change altitude. Defaults to FW_T_SINK_MAX if NAN. Not used if height_rate is directly set in FixedWingLongitudinalSetpoint. | +| speed_weight | `float32` | | [0 : 2] | 0=pitch controls altitude only, 2=pitch controls airspeed only | +| enforce_low_height_condition | `bool` | | | If true, the altitude controller is configured with an alternative timeconstant for tighter altitude tracking | +| disable_underspeed_protection | `bool` | | | If true, underspeed handling is disabled in the altitude controller | ## Constants -| 参数名 | 类型 | 值 | 描述 | -| -------------------------------------------------------------------- | -------- | - | -- | -| MESSAGE_VERSION | `uint32` | 0 | | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------ | -------- | - | -- | +| MESSAGE_VERSION | `uint32` | 0 | | ## Source Message @@ -38,22 +41,23 @@ Click here to see original file ```c # Fixed Wing Longitudinal Control Configuration message +# # Used by the fw_lateral_longitudinal_control module and TECS to constrain FixedWingLongitudinalSetpoint messages # and configure the resultant setpoints. uint32 MESSAGE_VERSION = 0 -uint64 timestamp # time since system start (microseconds) +uint64 timestamp # [us] Time since system start -float32 pitch_min # [rad][@range -pi, pi] defaults to FW_P_LIM_MIN if NAN. -float32 pitch_max # [rad][@range -pi, pi] defaults to FW_P_LIM_MAX if NAN. -float32 throttle_min # [norm] [@range 0,1] deaults to FW_THR_MIN if NAN. -float32 throttle_max # [norm] [@range 0,1] defaults to FW_THR_MAX if NAN. -float32 climb_rate_target # [m/s] target climbrate to change altitude. Defaults to FW_T_CLIMB_MAX if NAN. Not used if height_rate is directly set in FixedWingLongitudinalSetpoint. -float32 sink_rate_target # [m/s] target sinkrate to change altitude. Defaults to FW_T_SINK_MAX if NAN. Not used if height_rate is directly set in FixedWingLongitudinalSetpoint. -float32 speed_weight # [@range 0,2], 0=pitch controls altitude only, 2=pitch controls airspeed only -bool enforce_low_height_condition # [boolean] if true, the altitude controller is configured with an alternative timeconstant for tighter altitude tracking -bool disable_underspeed_protection # [boolean] if true, underspeed handling is disabled in the altitude controller +float32 pitch_min # [rad] [@range -pi, pi] Defaults to FW_P_LIM_MIN if NAN. +float32 pitch_max # [rad] [@range -pi, pi] Defaults to FW_P_LIM_MAX if NAN. +float32 throttle_min # [norm] [@range 0,1] Defaults to FW_THR_MIN if NAN. +float32 throttle_max # [norm] [@range 0,1] Defaults to FW_THR_MAX if NAN. +float32 climb_rate_target # [m/s] Target climbrate to change altitude. Defaults to FW_T_CLIMB_MAX if NAN. Not used if height_rate is directly set in FixedWingLongitudinalSetpoint. +float32 sink_rate_target # [m/s] Target sinkrate to change altitude. Defaults to FW_T_SINK_MAX if NAN. Not used if height_rate is directly set in FixedWingLongitudinalSetpoint. +float32 speed_weight # [-] [@range 0,2] 0=pitch controls altitude only, 2=pitch controls airspeed only +bool enforce_low_height_condition # If true, the altitude controller is configured with an alternative timeconstant for tighter altitude tracking +bool disable_underspeed_protection # If true, underspeed handling is disabled in the altitude controller ``` ::: diff --git a/docs/zh/msg_docs/MagWorkerData.md b/docs/zh/msg_docs/MagWorkerData.md index fa90b4cd67..989c584406 100644 --- a/docs/zh/msg_docs/MagWorkerData.md +++ b/docs/zh/msg_docs/MagWorkerData.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # MagWorkerData (UORB message) -**TOPICS:** mag_workerdata +**TOPICS:** mag_worker_data ## Fields @@ -23,9 +23,9 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------ | ------- | - | -- | -| MAX_MAGS | `uint8` | 4 | | +| 参数名 | 类型 | 值 | 描述 | +| ---------------------------------------------------- | ------- | - | -- | +| MAX_MAGS | `uint8` | 4 | | ## Source Message diff --git a/docs/zh/msg_docs/MagnetometerBiasEstimate.md b/docs/zh/msg_docs/MagnetometerBiasEstimate.md index b215bbc04f..a095b1fe34 100644 --- a/docs/zh/msg_docs/MagnetometerBiasEstimate.md +++ b/docs/zh/msg_docs/MagnetometerBiasEstimate.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # MagnetometerBiasEstimate (UORB message) -**TOPICS:** magnetometer_biasestimate +**TOPICS:** magnetometer_bias_estimate ## Fields diff --git a/docs/zh/msg_docs/ManualControlSetpoint.md b/docs/zh/msg_docs/ManualControlSetpoint.md index 9059326deb..fb3c31c955 100644 --- a/docs/zh/msg_docs/ManualControlSetpoint.md +++ b/docs/zh/msg_docs/ManualControlSetpoint.md @@ -30,17 +30,17 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------------------------- | -------- | - | ---------------------------------------------------------------- | -| MESSAGE_VERSION | `uint32` | 0 | | -| SOURCE_UNKNOWN | `uint8` | 0 | | -| SOURCE_RC | `uint8` | 1 | radio control (input_rc) | -| SOURCE_MAVLINK_0 | `uint8` | 2 | mavlink instance 0 | -| SOURCE_MAVLINK_1 | `uint8` | 3 | mavlink instance 1 | -| SOURCE_MAVLINK_2 | `uint8` | 4 | mavlink instance 2 | -| SOURCE_MAVLINK_3 | `uint8` | 5 | mavlink instance 3 | -| SOURCE_MAVLINK_4 | `uint8` | 6 | mavlink instance 4 | -| SOURCE_MAVLINK_5 | `uint8` | 7 | mavlink instance 5 | +| 参数名 | 类型 | 值 | 描述 | +| ----------------------------------------------------------------------------------------- | -------- | - | ---------------------------------------------------------------- | +| MESSAGE_VERSION | `uint32` | 0 | | +| SOURCE_UNKNOWN | `uint8` | 0 | | +| SOURCE_RC | `uint8` | 1 | radio control (input_rc) | +| SOURCE_MAVLINK_0 | `uint8` | 2 | mavlink instance 0 | +| SOURCE_MAVLINK_1 | `uint8` | 3 | mavlink instance 1 | +| SOURCE_MAVLINK_2 | `uint8` | 4 | mavlink instance 2 | +| SOURCE_MAVLINK_3 | `uint8` | 5 | mavlink instance 3 | +| SOURCE_MAVLINK_4 | `uint8` | 6 | mavlink instance 4 | +| SOURCE_MAVLINK_5 | `uint8` | 7 | mavlink instance 5 | ## Source Message diff --git a/docs/zh/msg_docs/ManualControlSwitches.md b/docs/zh/msg_docs/ManualControlSwitches.md index 6a3c09c14b..a1594d8780 100644 --- a/docs/zh/msg_docs/ManualControlSwitches.md +++ b/docs/zh/msg_docs/ManualControlSwitches.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # ManualControlSwitches (UORB message) -**TOPICS:** manual_controlswitches +**TOPICS:** manual_control_switches ## Fields @@ -29,20 +29,20 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| --------------------------------------------------------------------------------------------- | ------- | - | ---------------------------------------------------- | -| SWITCH_POS_NONE | `uint8` | 0 | switch is not mapped | -| SWITCH_POS_ON | `uint8` | 1 | switch activated (value = 1) | -| SWITCH_POS_MIDDLE | `uint8` | 2 | middle position (value = 0) | -| SWITCH_POS_OFF | `uint8` | 3 | switch not activated (value = -1) | -| MODE_SLOT_NONE | `uint8` | 0 | no mode slot assigned | -| MODE_SLOT_1 | `uint8` | 1 | mode slot 1 selected | -| MODE_SLOT_2 | `uint8` | 2 | mode slot 2 selected | -| MODE_SLOT_3 | `uint8` | 3 | mode slot 3 selected | -| MODE_SLOT_4 | `uint8` | 4 | mode slot 4 selected | -| MODE_SLOT_5 | `uint8` | 5 | mode slot 5 selected | -| MODE_SLOT_6 | `uint8` | 6 | mode slot 6 selected | -| MODE_SLOT_NUM | `uint8` | 6 | number of slots | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------------------------------- | ------- | - | ---------------------------------------------------- | +| SWITCH_POS_NONE | `uint8` | 0 | switch is not mapped | +| SWITCH_POS_ON | `uint8` | 1 | switch activated (value = 1) | +| SWITCH_POS_MIDDLE | `uint8` | 2 | middle position (value = 0) | +| SWITCH_POS_OFF | `uint8` | 3 | switch not activated (value = -1) | +| MODE_SLOT_NONE | `uint8` | 0 | no mode slot assigned | +| MODE_SLOT_1 | `uint8` | 1 | mode slot 1 selected | +| MODE_SLOT_2 | `uint8` | 2 | mode slot 2 selected | +| MODE_SLOT_3 | `uint8` | 3 | mode slot 3 selected | +| MODE_SLOT_4 | `uint8` | 4 | mode slot 4 selected | +| MODE_SLOT_5 | `uint8` | 5 | mode slot 5 selected | +| MODE_SLOT_6 | `uint8` | 6 | mode slot 6 selected | +| MODE_SLOT_NUM | `uint8` | 6 | number of slots | ## Source Message diff --git a/docs/zh/msg_docs/MavlinkLog.md b/docs/zh/msg_docs/MavlinkLog.md index 6567ec6eea..69c1e0aa97 100644 --- a/docs/zh/msg_docs/MavlinkLog.md +++ b/docs/zh/msg_docs/MavlinkLog.md @@ -16,9 +16,9 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------------------------- | ------- | - | -- | -| ORB_QUEUE_LENGTH | `uint8` | 8 | | +| 参数名 | 类型 | 值 | 描述 | +| ----------------------------------------------------------------------------------------- | ------- | - | -- | +| ORB_QUEUE_LENGTH | `uint8` | 8 | | ## Source Message diff --git a/docs/zh/msg_docs/MavlinkTunnel.md b/docs/zh/msg_docs/MavlinkTunnel.md index 4462d631ba..c064423453 100644 --- a/docs/zh/msg_docs/MavlinkTunnel.md +++ b/docs/zh/msg_docs/MavlinkTunnel.md @@ -21,19 +21,19 @@ MAV_TUNNEL_PAYLOAD_TYPE enum. ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------- | --- | ---------------------------------------- | -| MAV_TUNNEL_PAYLOAD_TYPE_UNKNOWN | `uint8` | 0 | Encoding of payload unknown | -| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED0 | `uint8` | 200 | Registered for STorM32 gimbal controller | -| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED1 | `uint8` | 201 | Registered for STorM32 gimbal controller | -| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED2 | `uint8` | 202 | Registered for STorM32 gimbal controller | -| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED3 | `uint8` | 203 | Registered for STorM32 gimbal controller | -| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED4 | `uint8` | 204 | Registered for STorM32 gimbal controller | -| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED5 | `uint8` | 205 | Registered for STorM32 gimbal controller | -| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED6 | `uint8` | 206 | Registered for STorM32 gimbal controller | -| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED7 | `uint8` | 207 | Registered for STorM32 gimbal controller | -| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED8 | `uint8` | 208 | Registered for STorM32 gimbal controller | -| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED9 | `uint8` | 209 | Registered for STorM32 gimbal controller | +| 参数名 | 类型 | 值 | 描述 | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | --- | ---------------------------------------- | +| MAV_TUNNEL_PAYLOAD_TYPE_UNKNOWN | `uint8` | 0 | Encoding of payload unknown | +| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED0 | `uint8` | 200 | Registered for STorM32 gimbal controller | +| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED1 | `uint8` | 201 | Registered for STorM32 gimbal controller | +| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED2 | `uint8` | 202 | Registered for STorM32 gimbal controller | +| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED3 | `uint8` | 203 | Registered for STorM32 gimbal controller | +| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED4 | `uint8` | 204 | Registered for STorM32 gimbal controller | +| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED5 | `uint8` | 205 | Registered for STorM32 gimbal controller | +| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED6 | `uint8` | 206 | Registered for STorM32 gimbal controller | +| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED7 | `uint8` | 207 | Registered for STorM32 gimbal controller | +| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED8 | `uint8` | 208 | Registered for STorM32 gimbal controller | +| MAV_TUNNEL_PAYLOAD_TYPE_STORM32_RESERVED9 | `uint8` | 209 | Registered for STorM32 gimbal controller | ## Source Message diff --git a/docs/zh/msg_docs/MessageFormatRequest.md b/docs/zh/msg_docs/MessageFormatRequest.md index d522c3e777..4eb65270fc 100644 --- a/docs/zh/msg_docs/MessageFormatRequest.md +++ b/docs/zh/msg_docs/MessageFormatRequest.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # MessageFormatRequest (UORB message) -**TOPICS:** message_formatrequest +**TOPICS:** message_format_request ## Fields @@ -16,9 +16,9 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| --------------------------------------------------------------------------------------------------------- | -------- | - | --------------------------------------------------------------------------------------------------------------------------------------------------- | -| LATEST_PROTOCOL_VERSION | `uint16` | 1 | Current version of this protocol. Increase this whenever the MessageFormatRequest or MessageFormatResponse changes. | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------------------------------------------- | -------- | - | --------------------------------------------------------------------------------------------------------------------------------------------------- | +| LATEST_PROTOCOL_VERSION | `uint16` | 1 | Current version of this protocol. Increase this whenever the MessageFormatRequest or MessageFormatResponse changes. | ## Source Message diff --git a/docs/zh/msg_docs/MessageFormatResponse.md b/docs/zh/msg_docs/MessageFormatResponse.md index a3a1790d0b..f626193ebb 100644 --- a/docs/zh/msg_docs/MessageFormatResponse.md +++ b/docs/zh/msg_docs/MessageFormatResponse.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # MessageFormatResponse (UORB message) -**TOPICS:** message_formatresponse +**TOPICS:** message_format_response ## Fields diff --git a/docs/zh/msg_docs/ModeCompleted.md b/docs/zh/msg_docs/ModeCompleted.md index 731503b039..1887f8858c 100644 --- a/docs/zh/msg_docs/ModeCompleted.md +++ b/docs/zh/msg_docs/ModeCompleted.md @@ -18,11 +18,11 @@ Mode completion result, published by an active mode. The possible values of nav_ ## Constants -| 参数名 | 类型 | 值 | 描述 | -| --------------------------------------------------------------------------------------------------- | -------- | --- | ---------------------------------------------- | -| MESSAGE_VERSION | `uint32` | 0 | | -| RESULT_SUCCESS | `uint8` | 0 | | -| RESULT_FAILURE_OTHER | `uint8` | 100 | Mode failed (generic error) | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------------------------------------- | -------- | --- | ---------------------------------------------- | +| MESSAGE_VERSION | `uint32` | 0 | | +| RESULT_SUCCESS | `uint8` | 0 | | +| RESULT_FAILURE_OTHER | `uint8` | 100 | Mode failed (generic error) | ## Source Message diff --git a/docs/zh/msg_docs/NavigatorMissionItem.md b/docs/zh/msg_docs/NavigatorMissionItem.md index 63e3e56b0b..c996620bf9 100644 --- a/docs/zh/msg_docs/NavigatorMissionItem.md +++ b/docs/zh/msg_docs/NavigatorMissionItem.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # NavigatorMissionItem (UORB message) -**TOPICS:** navigator_missionitem +**TOPICS:** navigator_mission_item ## Fields diff --git a/docs/zh/msg_docs/NavigatorStatus.md b/docs/zh/msg_docs/NavigatorStatus.md index 554b9fe18a..95d486d95b 100644 --- a/docs/zh/msg_docs/NavigatorStatus.md +++ b/docs/zh/msg_docs/NavigatorStatus.md @@ -18,10 +18,10 @@ Current status of a Navigator mode. The possible values of nav_state are defined ## Constants -| 参数名 | 类型 | 值 | 描述 | -| -------------------------------------------------------------- | ------- | - | --------------------------------------------------- | -| FAILURE_NONE | `uint8` | 0 | | -| FAILURE_HAGL | `uint8` | 1 | Target altitude exceeds maximum height above ground | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------ | ------- | - | --------------------------------------------------- | +| FAILURE_NONE | `uint8` | 0 | | +| FAILURE_HAGL | `uint8` | 1 | Target altitude exceeds maximum height above ground | ## Source Message diff --git a/docs/zh/msg_docs/ObstacleDistance.md b/docs/zh/msg_docs/ObstacleDistance.md index 7dce3a0e4f..82f1732a4e 100644 --- a/docs/zh/msg_docs/ObstacleDistance.md +++ b/docs/zh/msg_docs/ObstacleDistance.md @@ -23,15 +23,15 @@ Obstacle distances in front of the sensor. ## Constants -| 参数名 | 类型 | 值 | 描述 | -| -------------------------------------------------------------------------------------------------------------------------------------------- | ------- | -- | -- | -| MAV_FRAME_GLOBAL | `uint8` | 0 | | -| MAV_FRAME_LOCAL_NED | `uint8` | 1 | | -| MAV_FRAME_BODY_FRD | `uint8` | 12 | | -| MAV_DISTANCE_SENSOR_LASER | `uint8` | 0 | | -| MAV_DISTANCE_SENSOR_ULTRASOUND | `uint8` | 1 | | -| MAV_DISTANCE_SENSOR_INFRARED | `uint8` | 2 | | -| MAV_DISTANCE_SENSOR_RADAR | `uint8` | 3 | | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------------------------------------------------------------------------------ | ------- | -- | -- | +| MAV_FRAME_GLOBAL | `uint8` | 0 | | +| MAV_FRAME_LOCAL_NED | `uint8` | 1 | | +| MAV_FRAME_BODY_FRD | `uint8` | 12 | | +| MAV_DISTANCE_SENSOR_LASER | `uint8` | 0 | | +| MAV_DISTANCE_SENSOR_ULTRASOUND | `uint8` | 1 | | +| MAV_DISTANCE_SENSOR_INFRARED | `uint8` | 2 | | +| MAV_DISTANCE_SENSOR_RADAR | `uint8` | 3 | | ## Source Message diff --git a/docs/zh/msg_docs/OffboardControlMode.md b/docs/zh/msg_docs/OffboardControlMode.md index b52cdf8187..6945b89f62 100644 --- a/docs/zh/msg_docs/OffboardControlMode.md +++ b/docs/zh/msg_docs/OffboardControlMode.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Off-board control mode. -**TOPICS:** offboard_controlmode +**TOPICS:** offboard_control_mode ## Fields diff --git a/docs/zh/msg_docs/OnboardComputerStatus.md b/docs/zh/msg_docs/OnboardComputerStatus.md index 0a34170c56..a23da8b1b7 100644 --- a/docs/zh/msg_docs/OnboardComputerStatus.md +++ b/docs/zh/msg_docs/OnboardComputerStatus.md @@ -6,7 +6,7 @@ pageClass: is-wide-page ONBOARD_COMPUTER_STATUS message data. -**TOPICS:** onboard_computerstatus +**TOPICS:** onboard_computer_status ## Fields diff --git a/docs/zh/msg_docs/OpenDroneIdArmStatus.md b/docs/zh/msg_docs/OpenDroneIdArmStatus.md index e648c5fc96..5180fd2d19 100644 --- a/docs/zh/msg_docs/OpenDroneIdArmStatus.md +++ b/docs/zh/msg_docs/OpenDroneIdArmStatus.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # OpenDroneIdArmStatus (UORB message) -**TOPICS:** open_droneid_armstatus +**TOPICS:** open_drone_id_arm_status ## Fields diff --git a/docs/zh/msg_docs/OpenDroneIdOperatorId.md b/docs/zh/msg_docs/OpenDroneIdOperatorId.md index 35d96ba699..9eb0c37fdd 100644 --- a/docs/zh/msg_docs/OpenDroneIdOperatorId.md +++ b/docs/zh/msg_docs/OpenDroneIdOperatorId.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # OpenDroneIdOperatorId (UORB message) -**TOPICS:** open_droneid_operatorid +**TOPICS:** open_drone_id_operator_id ## Fields diff --git a/docs/zh/msg_docs/OpenDroneIdSelfId.md b/docs/zh/msg_docs/OpenDroneIdSelfId.md index 5bb087df07..a11209dd97 100644 --- a/docs/zh/msg_docs/OpenDroneIdSelfId.md +++ b/docs/zh/msg_docs/OpenDroneIdSelfId.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # OpenDroneIdSelfId (UORB message) -**TOPICS:** open_droneid_selfid +**TOPICS:** open_drone_id_self_id ## Fields diff --git a/docs/zh/msg_docs/OpenDroneIdSystem.md b/docs/zh/msg_docs/OpenDroneIdSystem.md index d8572d8a26..3c7fbad9ba 100644 --- a/docs/zh/msg_docs/OpenDroneIdSystem.md +++ b/docs/zh/msg_docs/OpenDroneIdSystem.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # OpenDroneIdSystem (UORB message) -**TOPICS:** open_droneid_system +**TOPICS:** open_drone_id_system ## Fields diff --git a/docs/zh/msg_docs/OrbTestLarge.md b/docs/zh/msg_docs/OrbTestLarge.md index 5fa4df6d84..7625cde4b0 100644 --- a/docs/zh/msg_docs/OrbTestLarge.md +++ b/docs/zh/msg_docs/OrbTestLarge.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # OrbTestLarge (UORB message) -**TOPICS:** orb_testlarge +**TOPICS:** orb_test_large ## Fields diff --git a/docs/zh/msg_docs/OrbTestMedium.md b/docs/zh/msg_docs/OrbTestMedium.md index 25bb53a8db..a5a7d0193e 100644 --- a/docs/zh/msg_docs/OrbTestMedium.md +++ b/docs/zh/msg_docs/OrbTestMedium.md @@ -16,9 +16,9 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------------------------- | ------- | -- | -- | -| ORB_QUEUE_LENGTH | `uint8` | 16 | | +| 参数名 | 类型 | 值 | 描述 | +| ----------------------------------------------------------------------------------------- | ------- | -- | -- | +| ORB_QUEUE_LENGTH | `uint8` | 16 | | ## Source Message diff --git a/docs/zh/msg_docs/OrbitStatus.md b/docs/zh/msg_docs/OrbitStatus.md index c0d0b826de..3fdceb4d7a 100644 --- a/docs/zh/msg_docs/OrbitStatus.md +++ b/docs/zh/msg_docs/OrbitStatus.md @@ -22,14 +22,14 @@ ORBIT_YAW_BEHAVIOUR. ## Constants -| 参数名 | 类型 | 值 | 描述 | -| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | - | -- | -| ORBIT_YAW_BEHAVIOUR_HOLD_FRONT_TO_CIRCLE_CENTER | `uint8` | 0 | | -| ORBIT_YAW_BEHAVIOUR_HOLD_INITIAL_HEADING | `uint8` | 1 | | -| ORBIT_YAW_BEHAVIOUR_UNCONTROLLED | `uint8` | 2 | | -| ORBIT_YAW_BEHAVIOUR_HOLD_FRONT_TANGENT_TO_CIRCLE | `uint8` | 3 | | -| ORBIT_YAW_BEHAVIOUR_RC_CONTROLLED | `uint8` | 4 | | -| ORBIT_YAW_BEHAVIOUR_UNCHANGED | `uint8` | 5 | | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------- | - | -- | +| ORBIT_YAW_BEHAVIOUR_HOLD_FRONT_TO_CIRCLE_CENTER | `uint8` | 0 | | +| ORBIT_YAW_BEHAVIOUR_HOLD_INITIAL_HEADING | `uint8` | 1 | | +| ORBIT_YAW_BEHAVIOUR_UNCONTROLLED | `uint8` | 2 | | +| ORBIT_YAW_BEHAVIOUR_HOLD_FRONT_TANGENT_TO_CIRCLE | `uint8` | 3 | | +| ORBIT_YAW_BEHAVIOUR_RC_CONTROLLED | `uint8` | 4 | | +| ORBIT_YAW_BEHAVIOUR_UNCHANGED | `uint8` | 5 | | ## Source Message diff --git a/docs/zh/msg_docs/ParameterResetRequest.md b/docs/zh/msg_docs/ParameterResetRequest.md index e1cbda865c..10cd6357a5 100644 --- a/docs/zh/msg_docs/ParameterResetRequest.md +++ b/docs/zh/msg_docs/ParameterResetRequest.md @@ -6,7 +6,7 @@ pageClass: is-wide-page ParameterResetRequest : Used by the primary to reset one or all parameter value(s) on the remote. -**TOPICS:** parameter_resetrequest +**TOPICS:** parameter_reset_request ## Fields @@ -18,9 +18,9 @@ ParameterResetRequest : Used by the primary to reset one or all parameter value( ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------------------------- | ------- | - | -- | -| ORB_QUEUE_LENGTH | `uint8` | 4 | | +| 参数名 | 类型 | 值 | 描述 | +| ----------------------------------------------------------------------------------------- | ------- | - | -- | +| ORB_QUEUE_LENGTH | `uint8` | 4 | | ## Source Message diff --git a/docs/zh/msg_docs/ParameterSetUsedRequest.md b/docs/zh/msg_docs/ParameterSetUsedRequest.md index 007d8b68e8..8aa1c5ffff 100644 --- a/docs/zh/msg_docs/ParameterSetUsedRequest.md +++ b/docs/zh/msg_docs/ParameterSetUsedRequest.md @@ -6,7 +6,7 @@ pageClass: is-wide-page ParameterSetUsedRequest : Used by a remote to update the used flag for a parameter on the primary. -**TOPICS:** parameter_setused_request +**TOPICS:** parameter_set_used_request ## Fields @@ -17,9 +17,9 @@ ParameterSetUsedRequest : Used by a remote to update the used flag for a paramet ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------------------------- | ------- | -- | -- | -| ORB_QUEUE_LENGTH | `uint8` | 64 | | +| 参数名 | 类型 | 值 | 描述 | +| ----------------------------------------------------------------------------------------- | ------- | -- | -- | +| ORB_QUEUE_LENGTH | `uint8` | 64 | | ## Source Message diff --git a/docs/zh/msg_docs/ParameterSetValueRequest.md b/docs/zh/msg_docs/ParameterSetValueRequest.md index 002d74b89d..cf31878e63 100644 --- a/docs/zh/msg_docs/ParameterSetValueRequest.md +++ b/docs/zh/msg_docs/ParameterSetValueRequest.md @@ -19,9 +19,9 @@ ParameterSetValueRequest : Used by a remote or primary to update the value for a ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------------------------- | ------- | -- | -- | -| ORB_QUEUE_LENGTH | `uint8` | 32 | | +| 参数名 | 类型 | 值 | 描述 | +| ----------------------------------------------------------------------------------------- | ------- | -- | -- | +| ORB_QUEUE_LENGTH | `uint8` | 32 | | ## Source Message diff --git a/docs/zh/msg_docs/ParameterSetValueResponse.md b/docs/zh/msg_docs/ParameterSetValueResponse.md index fd014cb827..e08c52c377 100644 --- a/docs/zh/msg_docs/ParameterSetValueResponse.md +++ b/docs/zh/msg_docs/ParameterSetValueResponse.md @@ -18,9 +18,9 @@ ParameterSetValueResponse : Response to a set value request by either primary or ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------------------------- | ------- | - | -- | -| ORB_QUEUE_LENGTH | `uint8` | 4 | | +| 参数名 | 类型 | 值 | 描述 | +| ----------------------------------------------------------------------------------------- | ------- | - | -- | +| ORB_QUEUE_LENGTH | `uint8` | 4 | | ## Source Message diff --git a/docs/zh/msg_docs/PositionControllerLandingStatus.md b/docs/zh/msg_docs/PositionControllerLandingStatus.md index 853d7ab722..75b5a9a801 100644 --- a/docs/zh/msg_docs/PositionControllerLandingStatus.md +++ b/docs/zh/msg_docs/PositionControllerLandingStatus.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # PositionControllerLandingStatus (UORB message) -**TOPICS:** position_controllerlanding_status +**TOPICS:** position_controller_landing_status ## Fields @@ -17,13 +17,13 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| --------------------------------------------------------------------------------------------------------- | ------- | - | ------------------------------------------------------------------------------------------------------------------------------------ | -| NOT_ABORTED | `uint8` | 0 | | -| ABORTED_BY_OPERATOR | `uint8` | 1 | | -| TERRAIN_NOT_FOUND | `uint8` | 2 | FW_LND_ABORT (1 << 0) | -| TERRAIN_TIMEOUT | `uint8` | 3 | FW_LND_ABORT (1 << 1) | -| UNKNOWN_ABORT_CRITERION | `uint8` | 4 | | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------------------------------------------- | ------- | - | ------------------------------------------------------------------------------------------------------------------------------------ | +| NOT_ABORTED | `uint8` | 0 | | +| ABORTED_BY_OPERATOR | `uint8` | 1 | | +| TERRAIN_NOT_FOUND | `uint8` | 2 | FW_LND_ABORT (1 << 0) | +| TERRAIN_TIMEOUT | `uint8` | 3 | FW_LND_ABORT (1 << 1) | +| UNKNOWN_ABORT_CRITERION | `uint8` | 4 | | ## Source Message diff --git a/docs/zh/msg_docs/PositionControllerStatus.md b/docs/zh/msg_docs/PositionControllerStatus.md index b9ffbecf3d..5a003f4b43 100644 --- a/docs/zh/msg_docs/PositionControllerStatus.md +++ b/docs/zh/msg_docs/PositionControllerStatus.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # PositionControllerStatus (UORB message) -**TOPICS:** position_controllerstatus +**TOPICS:** position_controller_status ## Fields diff --git a/docs/zh/msg_docs/PositionSetpoint.md b/docs/zh/msg_docs/PositionSetpoint.md index fcbe027d42..6ed38aad74 100644 --- a/docs/zh/msg_docs/PositionSetpoint.md +++ b/docs/zh/msg_docs/PositionSetpoint.md @@ -35,16 +35,16 @@ this file is only used in the position_setpoint triple as a dependency. ## Constants -| 参数名 | 类型 | 值 | 描述 | -| --------------------------------------------------------------------------------------------------------- | ------- | - | --------------------------------------------------------------------------- | -| SETPOINT_TYPE_POSITION | `uint8` | 0 | position setpoint | -| SETPOINT_TYPE_VELOCITY | `uint8` | 1 | velocity setpoint | -| SETPOINT_TYPE_LOITER | `uint8` | 2 | loiter setpoint | -| SETPOINT_TYPE_TAKEOFF | `uint8` | 3 | takeoff setpoint | -| SETPOINT_TYPE_LAND | `uint8` | 4 | land setpoint, altitude must be ignored, descend until landing | -| SETPOINT_TYPE_IDLE | `uint8` | 5 | do nothing, switch off motors or keep at idle speed (MC) | -| LOITER_TYPE_ORBIT | `uint8` | 0 | Circular pattern | -| LOITER_TYPE_FIGUREEIGHT | `uint8` | 1 | Pattern resembling an 8 | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------------------------------------------- | ------- | - | --------------------------------------------------------------------------- | +| SETPOINT_TYPE_POSITION | `uint8` | 0 | position setpoint | +| SETPOINT_TYPE_VELOCITY | `uint8` | 1 | velocity setpoint | +| SETPOINT_TYPE_LOITER | `uint8` | 2 | loiter setpoint | +| SETPOINT_TYPE_TAKEOFF | `uint8` | 3 | takeoff setpoint | +| SETPOINT_TYPE_LAND | `uint8` | 4 | land setpoint, altitude must be ignored, descend until landing | +| SETPOINT_TYPE_IDLE | `uint8` | 5 | do nothing, switch off motors or keep at idle speed (MC) | +| LOITER_TYPE_ORBIT | `uint8` | 0 | Circular pattern | +| LOITER_TYPE_FIGUREEIGHT | `uint8` | 1 | Pattern resembling an 8 | ## Source Message diff --git a/docs/zh/msg_docs/PositionSetpointTriplet.md b/docs/zh/msg_docs/PositionSetpointTriplet.md index 8d1e06a47c..59069003e5 100644 --- a/docs/zh/msg_docs/PositionSetpointTriplet.md +++ b/docs/zh/msg_docs/PositionSetpointTriplet.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Global position setpoint triplet in WGS84 coordinates. This are the three next waypoints (or just the next two or one). -**TOPICS:** position_setpointtriplet +**TOPICS:** position_setpoint_triplet ## Fields diff --git a/docs/zh/msg_docs/PowerButtonState.md b/docs/zh/msg_docs/PowerButtonState.md index 831b00dba5..1b6c48d580 100644 --- a/docs/zh/msg_docs/PowerButtonState.md +++ b/docs/zh/msg_docs/PowerButtonState.md @@ -6,7 +6,7 @@ pageClass: is-wide-page power button state notification message. -**TOPICS:** power_buttonstate +**TOPICS:** power_button_state ## Fields @@ -17,12 +17,12 @@ power button state notification message. ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | - | ------------------------------------------------------------------------------------------ | -| PWR_BUTTON_STATE_IDEL | `uint8` | 0 | Button went up without meeting shutdown button down time (delete event) | -| PWR_BUTTON_STATE_DOWN | `uint8` | 1 | Button went Down | -| PWR_BUTTON_STATE_UP | `uint8` | 2 | Button went Up | -| PWR_BUTTON_STATE_REQUEST_SHUTDOWN | `uint8` | 3 | Button went Up after meeting shutdown button down time | +| 参数名 | 类型 | 值 | 描述 | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | - | ------------------------------------------------------------------------------------------ | +| PWR_BUTTON_STATE_IDEL | `uint8` | 0 | Button went up without meeting shutdown button down time (delete event) | +| PWR_BUTTON_STATE_DOWN | `uint8` | 1 | Button went Down | +| PWR_BUTTON_STATE_UP | `uint8` | 2 | Button went Up | +| PWR_BUTTON_STATE_REQUEST_SHUTDOWN | `uint8` | 3 | Button went Up after meeting shutdown button down time | ## Source Message diff --git a/docs/zh/msg_docs/PurePursuitStatus.md b/docs/zh/msg_docs/PurePursuitStatus.md index 878cf0f173..c0927cdbe0 100644 --- a/docs/zh/msg_docs/PurePursuitStatus.md +++ b/docs/zh/msg_docs/PurePursuitStatus.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Pure pursuit status. -**TOPICS:** pure_pursuitstatus +**TOPICS:** pure_pursuit_status ## Fields diff --git a/docs/zh/msg_docs/QshellReq.md b/docs/zh/msg_docs/QshellReq.md index 5d63c2deb1..a1ad25e7cd 100644 --- a/docs/zh/msg_docs/QshellReq.md +++ b/docs/zh/msg_docs/QshellReq.md @@ -17,9 +17,9 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ---------------------------------------------------------- | -------- | --- | -- | -| MAX_STRLEN | `uint32` | 100 | | +| 参数名 | 类型 | 值 | 描述 | +| -------------------------------------------------------- | -------- | --- | -- | +| MAX_STRLEN | `uint32` | 100 | | ## Source Message diff --git a/docs/zh/msg_docs/RangingBeacon.md b/docs/zh/msg_docs/RangingBeacon.md new file mode 100644 index 0000000000..6a707fbe3a --- /dev/null +++ b/docs/zh/msg_docs/RangingBeacon.md @@ -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` | 米 | | Range measurement | +| lat | `float64` | deg | | Latitude | +| lon | `float64` | deg | | Longitude | +| alt | `float32` | 米 | | Beacon altitude (frame defined in alt_type) | +| alt_type | `uint8` | | [ALT_TYPE](#ALT_TYPE) | Altitude frame for alt field | +| hacc | `float32` | 米 | | Groundbeacon horizontal accuracy | +| vacc | `float32` | 米 | | Groundbeacon vertical accuracy | +| sequence_nr | `uint8` | | | | +| status | `uint8` | | | | +| carrier_freq | `uint16` | MHz | | Carrier frequency | +| range_accuracy | `float32` | 米 | | Range accuracy estimate | + +## Enums + +### ALT_TYPE {#ALT_TYPE} + +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------------------------- | ------- | - | ------------------------------------------------------- | +| ALT_TYPE_WGS84 | `uint8` | 0 | Altitude above WGS84 ellipsoid | +| 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 +``` + +::: diff --git a/docs/zh/msg_docs/RaptorInput.md b/docs/zh/msg_docs/RaptorInput.md index a6e4786526..7fd1c6233e 100644 --- a/docs/zh/msg_docs/RaptorInput.md +++ b/docs/zh/msg_docs/RaptorInput.md @@ -23,10 +23,10 @@ Raptor Input. ## Constants -| 参数名 | 类型 | 值 | 描述 | -| -------------------------------------------------------------------- | -------- | - | ---------------------------------------------------------------- | -| MESSAGE_VERSION | `uint32` | 0 | | -| ACTION_DIM | `uint8` | 4 | Policy output dimensionality (for quadrotors) | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------ | -------- | - | ---------------------------------------------------------------- | +| MESSAGE_VERSION | `uint32` | 0 | | +| ACTION_DIM | `uint8` | 4 | Policy output dimensionality (for quadrotors) | ## Source Message diff --git a/docs/zh/msg_docs/RaptorStatus.md b/docs/zh/msg_docs/RaptorStatus.md index 9f3d70b244..de9261eefd 100644 --- a/docs/zh/msg_docs/RaptorStatus.md +++ b/docs/zh/msg_docs/RaptorStatus.md @@ -39,16 +39,16 @@ Raptor Status. ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | - | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| MESSAGE_VERSION | `uint32` | 0 | | -| EXIT_REASON_NONE | `uint8` | 0 | No exit reason => Raptor control step was executed (actuator_motors should have been published) | -| EXIT_REASON_NO_ANGULAR_VELOCITY_UPDATE | `uint8` | 1 | We synchronize the control onto the input observation with the highest update frequency, which is vehicle_angular_velocity. If there was no update, we do not need to execute the policy again | -| EXIT_REASON_NOT_ALL_OBSERVATIONS_SET | `uint8` | 2 | We can not execute the policy if not all observations are available | -| EXIT_REASON_ANGULAR_VELOCITY_STALE | `uint8` | 3 | If OBSERVATION_TIMEOUT_ANGULAR_VELOCITY is exceeded, we treat the vehicle_angular_velocity as stale and can not run the policy | -| EXIT_REASON_LOCAL_POSITION_STALE | `uint8` | 4 | If OBSERVATION_TIMEOUT_LOCAL_POSITION is exceeded, we treat the vehicle_local_position as stale and can not run the policy | -| EXIT_REASON_ATTITUDE_STALE | `uint8` | 5 | If OBSERVATION_TIMEOUT_ATTITUDE is exceeded, we treat the vehicle_attitude as stale and can not run the policy | -| EXIT_REASON_EXECUTOR_STATUS_SOURCE_NOT_CONTROL | `uint8` | 6 | The executor that runs the policy can run in oversampling mode, where it decides if the policy should be ran based on the timestamp and not based on fixed synchronization onto the vehicle_angular_velocity. In this case the executor can decide to skip running the policy if the interval is too small, in which case this flag is set. | +| 参数名 | 类型 | 值 | 描述 | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | - | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| MESSAGE_VERSION | `uint32` | 0 | | +| EXIT_REASON_NONE | `uint8` | 0 | No exit reason => Raptor control step was executed (actuator_motors should have been published) | +| EXIT_REASON_NO_ANGULAR_VELOCITY_UPDATE | `uint8` | 1 | We synchronize the control onto the input observation with the highest update frequency, which is vehicle_angular_velocity. If there was no update, we do not need to execute the policy again | +| EXIT_REASON_NOT_ALL_OBSERVATIONS_SET | `uint8` | 2 | We can not execute the policy if not all observations are available | +| EXIT_REASON_ANGULAR_VELOCITY_STALE | `uint8` | 3 | If OBSERVATION_TIMEOUT_ANGULAR_VELOCITY is exceeded, we treat the vehicle_angular_velocity as stale and can not run the policy | +| EXIT_REASON_LOCAL_POSITION_STALE | `uint8` | 4 | If OBSERVATION_TIMEOUT_LOCAL_POSITION is exceeded, we treat the vehicle_local_position as stale and can not run the policy | +| EXIT_REASON_ATTITUDE_STALE | `uint8` | 5 | If OBSERVATION_TIMEOUT_ATTITUDE is exceeded, we treat the vehicle_attitude as stale and can not run the policy | +| EXIT_REASON_EXECUTOR_STATUS_SOURCE_NOT_CONTROL | `uint8` | 6 | The executor that runs the policy can run in oversampling mode, where it decides if the policy should be ran based on the timestamp and not based on fixed synchronization onto the vehicle_angular_velocity. In this case the executor can decide to skip running the policy if the interval is too small, in which case this flag is set. | ## Source Message diff --git a/docs/zh/msg_docs/RateCtrlStatus.md b/docs/zh/msg_docs/RateCtrlStatus.md index 087357cb2b..a11548b7ab 100644 --- a/docs/zh/msg_docs/RateCtrlStatus.md +++ b/docs/zh/msg_docs/RateCtrlStatus.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # RateCtrlStatus (UORB message) -**TOPICS:** rate_ctrlstatus +**TOPICS:** rate_ctrl_status ## Fields diff --git a/docs/zh/msg_docs/RcChannels.md b/docs/zh/msg_docs/RcChannels.md index 5bcdc36912..4a47d3b42c 100644 --- a/docs/zh/msg_docs/RcChannels.md +++ b/docs/zh/msg_docs/RcChannels.md @@ -21,39 +21,39 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------------------------------------------------------------------ | ------- | -- | -- | -| FUNCTION_THROTTLE | `uint8` | 0 | | -| FUNCTION_ROLL | `uint8` | 1 | | -| FUNCTION_PITCH | `uint8` | 2 | | -| FUNCTION_YAW | `uint8` | 3 | | -| FUNCTION_RETURN | `uint8` | 4 | | -| FUNCTION_LOITER | `uint8` | 5 | | -| FUNCTION_OFFBOARD | `uint8` | 6 | | -| FUNCTION_FLAPS | `uint8` | 7 | | -| FUNCTION_AUX_1 | `uint8` | 8 | | -| FUNCTION_AUX_2 | `uint8` | 9 | | -| FUNCTION_AUX_3 | `uint8` | 10 | | -| FUNCTION_AUX_4 | `uint8` | 11 | | -| FUNCTION_AUX_5 | `uint8` | 12 | | -| FUNCTION_AUX_6 | `uint8` | 13 | | -| FUNCTION_PARAM_1 | `uint8` | 14 | | -| FUNCTION_PARAM_2 | `uint8` | 15 | | -| FUNCTION_PARAM_3_5 | `uint8` | 16 | | -| FUNCTION_KILLSWITCH | `uint8` | 17 | | -| FUNCTION_TRANSITION | `uint8` | 18 | | -| FUNCTION_GEAR | `uint8` | 19 | | -| FUNCTION_ARMSWITCH | `uint8` | 20 | | -| FUNCTION_FLTBTN_SLOT_1 | `uint8` | 21 | | -| FUNCTION_FLTBTN_SLOT_2 | `uint8` | 22 | | -| FUNCTION_FLTBTN_SLOT_3 | `uint8` | 23 | | -| FUNCTION_FLTBTN_SLOT_4 | `uint8` | 24 | | -| FUNCTION_FLTBTN_SLOT_5 | `uint8` | 25 | | -| FUNCTION_FLTBTN_SLOT_6 | `uint8` | 26 | | -| FUNCTION_ENGAGE_MAIN_MOTOR | `uint8` | 27 | | -| FUNCTION_PAYLOAD_POWER | `uint8` | 28 | | -| FUNCTION_TERMINATION | `uint8` | 29 | | -| FUNCTION_FLTBTN_SLOT_COUNT | `uint8` | 6 | | +| 参数名 | 类型 | 值 | 描述 | +| ---------------------------------------------------------------------------------------------------------------------------------- | ------- | -- | -- | +| FUNCTION_THROTTLE | `uint8` | 0 | | +| FUNCTION_ROLL | `uint8` | 1 | | +| FUNCTION_PITCH | `uint8` | 2 | | +| FUNCTION_YAW | `uint8` | 3 | | +| FUNCTION_RETURN | `uint8` | 4 | | +| FUNCTION_LOITER | `uint8` | 5 | | +| FUNCTION_OFFBOARD | `uint8` | 6 | | +| FUNCTION_FLAPS | `uint8` | 7 | | +| FUNCTION_AUX_1 | `uint8` | 8 | | +| FUNCTION_AUX_2 | `uint8` | 9 | | +| FUNCTION_AUX_3 | `uint8` | 10 | | +| FUNCTION_AUX_4 | `uint8` | 11 | | +| FUNCTION_AUX_5 | `uint8` | 12 | | +| FUNCTION_AUX_6 | `uint8` | 13 | | +| FUNCTION_PARAM_1 | `uint8` | 14 | | +| FUNCTION_PARAM_2 | `uint8` | 15 | | +| FUNCTION_PARAM_3_5 | `uint8` | 16 | | +| FUNCTION_KILLSWITCH | `uint8` | 17 | | +| FUNCTION_TRANSITION | `uint8` | 18 | | +| FUNCTION_GEAR | `uint8` | 19 | | +| FUNCTION_ARMSWITCH | `uint8` | 20 | | +| FUNCTION_FLTBTN_SLOT_1 | `uint8` | 21 | | +| FUNCTION_FLTBTN_SLOT_2 | `uint8` | 22 | | +| FUNCTION_FLTBTN_SLOT_3 | `uint8` | 23 | | +| FUNCTION_FLTBTN_SLOT_4 | `uint8` | 24 | | +| FUNCTION_FLTBTN_SLOT_5 | `uint8` | 25 | | +| FUNCTION_FLTBTN_SLOT_6 | `uint8` | 26 | | +| FUNCTION_ENGAGE_MAIN_MOTOR | `uint8` | 27 | | +| FUNCTION_PAYLOAD_POWER | `uint8` | 28 | | +| FUNCTION_TERMINATION | `uint8` | 29 | | +| FUNCTION_FLTBTN_SLOT_COUNT | `uint8` | 6 | | ## Source Message diff --git a/docs/zh/msg_docs/RcParameterMap.md b/docs/zh/msg_docs/RcParameterMap.md index 1d350e334a..9d644ba738 100644 --- a/docs/zh/msg_docs/RcParameterMap.md +++ b/docs/zh/msg_docs/RcParameterMap.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # RcParameterMap (UORB message) -**TOPICS:** rc_parametermap +**TOPICS:** rc_parameter_map ## Fields @@ -21,10 +21,10 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| -------------------------------------------------------------------------------------------------------------------- | ------- | -- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| RC_PARAM_MAP_NCHAN | `uint8` | 3 | This limit is also hardcoded in the enum RC_CHANNELS_FUNCTION in rc_channels.h | -| PARAM_ID_LEN | `uint8` | 16 | corresponds to MAVLINK_MSG_PARAM_VALUE_FIELD_PARAM_ID_LEN | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------------------------------------------------------ | ------- | -- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| RC_PARAM_MAP_NCHAN | `uint8` | 3 | This limit is also hardcoded in the enum RC_CHANNELS_FUNCTION in rc_channels.h | +| PARAM_ID_LEN | `uint8` | 16 | corresponds to MAVLINK_MSG_PARAM_VALUE_FIELD_PARAM_ID_LEN | ## Source Message diff --git a/docs/zh/msg_docs/RegisterExtComponentReply.md b/docs/zh/msg_docs/RegisterExtComponentReply.md index 286676e3f0..fefb3bcf5b 100644 --- a/docs/zh/msg_docs/RegisterExtComponentReply.md +++ b/docs/zh/msg_docs/RegisterExtComponentReply.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # RegisterExtComponentReply (UORB message) -**TOPICS:** register_extcomponent_reply +**TOPICS:** register_ext_component_reply ## Fields @@ -22,10 +22,10 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------------------------- | -------- | - | -- | -| MESSAGE_VERSION | `uint32` | 1 | | -| ORB_QUEUE_LENGTH | `uint8` | 2 | | +| 参数名 | 类型 | 值 | 描述 | +| ----------------------------------------------------------------------------------------- | -------- | - | -- | +| MESSAGE_VERSION | `uint32` | 1 | | +| ORB_QUEUE_LENGTH | `uint8` | 2 | | ## Source Message diff --git a/docs/zh/msg_docs/RegisterExtComponentReplyV0.md b/docs/zh/msg_docs/RegisterExtComponentReplyV0.md index 73d32efaaf..a3ebfa0362 100644 --- a/docs/zh/msg_docs/RegisterExtComponentReplyV0.md +++ b/docs/zh/msg_docs/RegisterExtComponentReplyV0.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # RegisterExtComponentReplyV0 (UORB message) -**TOPICS:** register_extcomponent_replyv0 +**TOPICS:** register_ext_component_reply_v0 ## Fields @@ -21,10 +21,10 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------------------------- | -------- | - | -- | -| MESSAGE_VERSION | `uint32` | 0 | | -| ORB_QUEUE_LENGTH | `uint8` | 2 | | +| 参数名 | 类型 | 值 | 描述 | +| ----------------------------------------------------------------------------------------- | -------- | - | -- | +| MESSAGE_VERSION | `uint32` | 0 | | +| ORB_QUEUE_LENGTH | `uint8` | 2 | | ## Source Message diff --git a/docs/zh/msg_docs/RegisterExtComponentRequest.md b/docs/zh/msg_docs/RegisterExtComponentRequest.md index 1fa2e661fb..f9511e2683 100644 --- a/docs/zh/msg_docs/RegisterExtComponentRequest.md +++ b/docs/zh/msg_docs/RegisterExtComponentRequest.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Request to register an external component. -**TOPICS:** register_extcomponent_request +**TOPICS:** register_ext_component_request ## Fields @@ -23,14 +23,15 @@ Request to register an external component. | replace_internal_mode | `uint8` | | | vehicle_status::NAVIGATION_STATE_\* | | activate_mode_immediately | `bool` | | | switch to the registered mode (can only be set in combination with an executor) | | not_user_selectable | `bool` | | | mode cannot be selected by the user | +| request_offboard_setpoints | `bool` | | | set to true if the registered mode wants to receive offboard trajectory setpoints via MAVLink | ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ----------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | - | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| MESSAGE_VERSION | `uint32` | 1 | | -| LATEST_PX4_ROS2_API_VERSION | `uint16` | 1 | API version compatibility. Increase this on a breaking semantic change. Changes to any message field are detected separately and do not require an API version change. | -| ORB_QUEUE_LENGTH | `uint8` | 2 | | +| 参数名 | 类型 | 值 | 描述 | +| --------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | - | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| MESSAGE_VERSION | `uint32` | 2 | | +| LATEST_PX4_ROS2_API_VERSION | `uint16` | 1 | API version compatibility. Increase this on a breaking semantic change. Changes to any message field are detected separately and do not require an API version change. | +| ORB_QUEUE_LENGTH | `uint8` | 2 | | ## Source Message @@ -42,7 +43,7 @@ Click here to see original file ```c # Request to register an external component -uint32 MESSAGE_VERSION = 1 +uint32 MESSAGE_VERSION = 2 uint64 timestamp # time since system start (microseconds) @@ -62,6 +63,7 @@ bool enable_replace_internal_mode # set to true if an internal mode should be r uint8 replace_internal_mode # vehicle_status::NAVIGATION_STATE_* bool activate_mode_immediately # switch to the registered mode (can only be set in combination with an executor) bool not_user_selectable # mode cannot be selected by the user +bool request_offboard_setpoints # set to true if the registered mode wants to receive offboard trajectory setpoints via MAVLink uint8 ORB_QUEUE_LENGTH = 2 ``` diff --git a/docs/zh/msg_docs/RegisterExtComponentRequestV0.md b/docs/zh/msg_docs/RegisterExtComponentRequestV0.md index 21202b552f..9c20407928 100644 --- a/docs/zh/msg_docs/RegisterExtComponentRequestV0.md +++ b/docs/zh/msg_docs/RegisterExtComponentRequestV0.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Request to register an external component. -**TOPICS:** register_extcomponent_requestv0 +**TOPICS:** register_ext_component_request_v0 ## Fields @@ -25,11 +25,11 @@ Request to register an external component. ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ----------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | - | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| MESSAGE_VERSION | `uint32` | 0 | | -| LATEST_PX4_ROS2_API_VERSION | `uint16` | 1 | API version compatibility. Increase this on a breaking semantic change. Changes to any message field are detected separately and do not require an API version change. | -| ORB_QUEUE_LENGTH | `uint8` | 2 | | +| 参数名 | 类型 | 值 | 描述 | +| --------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | - | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| MESSAGE_VERSION | `uint32` | 0 | | +| LATEST_PX4_ROS2_API_VERSION | `uint16` | 1 | API version compatibility. Increase this on a breaking semantic change. Changes to any message field are detected separately and do not require an API version change. | +| ORB_QUEUE_LENGTH | `uint8` | 2 | | ## Source Message diff --git a/docs/zh/msg_docs/RegisterExtComponentRequestV1.md b/docs/zh/msg_docs/RegisterExtComponentRequestV1.md new file mode 100644 index 0000000000..43436c1e34 --- /dev/null +++ b/docs/zh/msg_docs/RegisterExtComponentRequestV1.md @@ -0,0 +1,69 @@ +--- +pageClass: is-wide-page +--- + +# RegisterExtComponentRequestV1 (UORB message) + +Request to register an external component. + +**TOPICS:** register_ext_component_request_v1 + +## Fields + +| 参数名 | 类型 | Unit [Frame] | Range/Enum | 描述 | +| ------------------------------------------------------------------------------------------- | ---------- | ---------------------------------------------------------------- | ---------- | -------------------------------------------------------------------------------------------------------------------------- | +| timestamp | `uint64` | | | time since system start (microseconds) | +| request_id | `uint64` | | | ID, set this to a random value | +| name | `char[25]` | | | either the requested mode name, or component name | +| px4_ros2_api_version | `uint16` | | | Set to LATEST_PX4_ROS2_API_VERSION | +| register_arming_check | `bool` | | | | +| register_mode | `bool` | | | registering a mode also requires arming_check to be set | +| register_mode_executor | `bool` | | | registering an executor also requires a mode to be registered (which is the owned mode by the executor) | +| enable_replace_internal_mode | `bool` | | | set to true if an internal mode should be replaced | +| replace_internal_mode | `uint8` | | | vehicle_status::NAVIGATION_STATE_\* | +| activate_mode_immediately | `bool` | | | switch to the registered mode (can only be set in combination with an executor) | +| not_user_selectable | `bool` | | | mode cannot be selected by the user | + +## Constants + +| 参数名 | 类型 | 值 | 描述 | +| --------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | - | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| MESSAGE_VERSION | `uint32` | 1 | | +| LATEST_PX4_ROS2_API_VERSION | `uint16` | 1 | API version compatibility. Increase this on a breaking semantic change. Changes to any message field are detected separately and do not require an API version change. | +| ORB_QUEUE_LENGTH | `uint8` | 2 | | + +## Source Message + +[Source file (GitHub)](https://github.com/PX4/PX4-Autopilot/blob/main/msg/px4_msgs_old/msg/RegisterExtComponentRequestV1.msg) + +:::details +Click here to see original file + +```c +# Request to register an external component + +uint32 MESSAGE_VERSION = 1 + +uint64 timestamp # time since system start (microseconds) + +uint64 request_id # ID, set this to a random value +char[25] name # either the requested mode name, or component name + +uint16 LATEST_PX4_ROS2_API_VERSION = 1 # API version compatibility. Increase this on a breaking semantic change. Changes to any message field are detected separately and do not require an API version change. + +uint16 px4_ros2_api_version # Set to LATEST_PX4_ROS2_API_VERSION + +# Components to be registered +bool register_arming_check +bool register_mode # registering a mode also requires arming_check to be set +bool register_mode_executor # registering an executor also requires a mode to be registered (which is the owned mode by the executor) + +bool enable_replace_internal_mode # set to true if an internal mode should be replaced +uint8 replace_internal_mode # vehicle_status::NAVIGATION_STATE_* +bool activate_mode_immediately # switch to the registered mode (can only be set in combination with an executor) +bool not_user_selectable # mode cannot be selected by the user + +uint8 ORB_QUEUE_LENGTH = 2 +``` + +::: diff --git a/docs/zh/msg_docs/RoverAttitudeSetpoint.md b/docs/zh/msg_docs/RoverAttitudeSetpoint.md index c1c2cee024..cf9e864e99 100644 --- a/docs/zh/msg_docs/RoverAttitudeSetpoint.md +++ b/docs/zh/msg_docs/RoverAttitudeSetpoint.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Rover Attitude Setpoint. -**TOPICS:** rover_attitudesetpoint +**TOPICS:** rover_attitude_setpoint ## Fields diff --git a/docs/zh/msg_docs/RoverAttitudeStatus.md b/docs/zh/msg_docs/RoverAttitudeStatus.md index f006d5b330..5012636aac 100644 --- a/docs/zh/msg_docs/RoverAttitudeStatus.md +++ b/docs/zh/msg_docs/RoverAttitudeStatus.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Rover Attitude Status. -**TOPICS:** rover_attitudestatus +**TOPICS:** rover_attitude_status ## Fields diff --git a/docs/zh/msg_docs/RoverPositionSetpoint.md b/docs/zh/msg_docs/RoverPositionSetpoint.md index 59e9680d77..6dd6b9af9f 100644 --- a/docs/zh/msg_docs/RoverPositionSetpoint.md +++ b/docs/zh/msg_docs/RoverPositionSetpoint.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Rover Position Setpoint. -**TOPICS:** rover_positionsetpoint +**TOPICS:** rover_position_setpoint ## Fields diff --git a/docs/zh/msg_docs/RoverRateSetpoint.md b/docs/zh/msg_docs/RoverRateSetpoint.md index 8c04911b69..87b5bc6920 100644 --- a/docs/zh/msg_docs/RoverRateSetpoint.md +++ b/docs/zh/msg_docs/RoverRateSetpoint.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Rover Rate setpoint. -**TOPICS:** rover_ratesetpoint +**TOPICS:** rover_rate_setpoint ## Fields diff --git a/docs/zh/msg_docs/RoverRateStatus.md b/docs/zh/msg_docs/RoverRateStatus.md index 1755f63f12..e451b0ed5e 100644 --- a/docs/zh/msg_docs/RoverRateStatus.md +++ b/docs/zh/msg_docs/RoverRateStatus.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Rover Rate Status. -**TOPICS:** rover_ratestatus +**TOPICS:** rover_rate_status ## Fields diff --git a/docs/zh/msg_docs/RoverSpeedSetpoint.md b/docs/zh/msg_docs/RoverSpeedSetpoint.md index b9689cdbbb..a740bbb7bf 100644 --- a/docs/zh/msg_docs/RoverSpeedSetpoint.md +++ b/docs/zh/msg_docs/RoverSpeedSetpoint.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Rover Speed Setpoint. -**TOPICS:** rover_speedsetpoint +**TOPICS:** rover_speed_setpoint ## Fields diff --git a/docs/zh/msg_docs/RoverSpeedStatus.md b/docs/zh/msg_docs/RoverSpeedStatus.md index ffd4bb3661..0d9646fd03 100644 --- a/docs/zh/msg_docs/RoverSpeedStatus.md +++ b/docs/zh/msg_docs/RoverSpeedStatus.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Rover Velocity Status. -**TOPICS:** rover_speedstatus +**TOPICS:** rover_speed_status ## Fields diff --git a/docs/zh/msg_docs/RoverSteeringSetpoint.md b/docs/zh/msg_docs/RoverSteeringSetpoint.md index 60ca511e3d..b6b0284815 100644 --- a/docs/zh/msg_docs/RoverSteeringSetpoint.md +++ b/docs/zh/msg_docs/RoverSteeringSetpoint.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Rover Steering setpoint. -**TOPICS:** rover_steeringsetpoint +**TOPICS:** rover_steering_setpoint ## Fields diff --git a/docs/zh/msg_docs/RoverThrottleSetpoint.md b/docs/zh/msg_docs/RoverThrottleSetpoint.md index bf137546aa..73813293d3 100644 --- a/docs/zh/msg_docs/RoverThrottleSetpoint.md +++ b/docs/zh/msg_docs/RoverThrottleSetpoint.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Rover Throttle setpoint. -**TOPICS:** rover_throttlesetpoint +**TOPICS:** rover_throttle_setpoint ## Fields diff --git a/docs/zh/msg_docs/RtlStatus.md b/docs/zh/msg_docs/RtlStatus.md index 6b8b7e94c7..58e7e50b88 100644 --- a/docs/zh/msg_docs/RtlStatus.md +++ b/docs/zh/msg_docs/RtlStatus.md @@ -8,24 +8,24 @@ pageClass: is-wide-page ## Fields -| 参数名 | 类型 | Unit [Frame] | Range/Enum | 描述 | -| --------------------------------------------------------------- | -------- | ---------------------------------------------------------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| timestamp | `uint64` | | | time since system start (microseconds) | -| safe_points_id | `uint32` | | | unique ID of active set of safe_point_items | -| is_evaluation_pending | `bool` | | | flag if the RTL point needs reevaluation (e.g. new safe points available, but need loading). | -| has_vtol_approach | `bool` | | | flag if approaches are defined for current RTL_TYPE parameter setting | -| rtl_type | `uint8` | | | Type of RTL chosen | -| safe_point_index | `uint8` | | | index of the chosen safe point, if in RTL_STATUS_TYPE_DIRECT_SAFE_POINT mode | +| 参数名 | 类型 | Unit [Frame] | Range/Enum | 描述 | +| --------------------------------------------------------------- | -------- | ---------------------------------------------------------------- | ---------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| timestamp | `uint64` | | | time since system start (microseconds) | +| safe_points_id | `uint32` | | | unique ID of active set of safe_point_items | +| is_evaluation_pending | `bool` | | | flag if the RTL point needs reevaluation (e.g. new safe points available, but need loading). | +| has_vtol_approach | `bool` | | | flag if approaches are defined for current RTL_TYPE parameter setting | +| rtl_type | `uint8` | | | Type of RTL chosen | +| safe_point_index | `uint8` | | | index of the chosen safe point, UINT8_MAX if no rally point was chosen | ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------- | - | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| RTL_STATUS_TYPE_NONE | `uint8` | 0 | pending if evaluation can't pe performed currently e.g. when it is still loading the safe points | -| RTL_STATUS_TYPE_DIRECT_SAFE_POINT | `uint8` | 1 | chosen to directly go to a safe point or home position | -| RTL_STATUS_TYPE_DIRECT_MISSION_LAND | `uint8` | 2 | going straight to the beginning of the mission landing | -| RTL_STATUS_TYPE_FOLLOW_MISSION | `uint8` | 3 | Following the mission from start index to mission landing. Start index is current WP if in Mission mode, and closest WP otherwise. | -| RTL_STATUS_TYPE_FOLLOW_MISSION_REVERSE | `uint8` | 4 | Following the mission in reverse from start index to the beginning of the mission. Start index is previous WP if in Mission mode, and closest WP otherwise. | +| 参数名 | 类型 | 值 | 描述 | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | - | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| RTL_STATUS_TYPE_NONE | `uint8` | 0 | pending if evaluation can't pe performed currently e.g. when it is still loading the safe points | +| RTL_STATUS_TYPE_DIRECT_SAFE_POINT | `uint8` | 1 | chosen to directly go to a safe point or home position | +| RTL_STATUS_TYPE_DIRECT_MISSION_LAND | `uint8` | 2 | going straight to the beginning of the mission landing | +| RTL_STATUS_TYPE_FOLLOW_MISSION | `uint8` | 3 | Following the mission from start index to mission landing. Start index is current WP if in Mission mode, and closest WP otherwise. | +| RTL_STATUS_TYPE_FOLLOW_MISSION_REVERSE | `uint8` | 4 | Following the mission in reverse from start index to the beginning of the mission. Start index is previous WP if in Mission mode, and closest WP otherwise. | ## Source Message @@ -43,7 +43,7 @@ bool is_evaluation_pending # flag if the RTL point needs reevaluation (e. bool has_vtol_approach # flag if approaches are defined for current RTL_TYPE parameter setting uint8 rtl_type # Type of RTL chosen -uint8 safe_point_index # index of the chosen safe point, if in RTL_STATUS_TYPE_DIRECT_SAFE_POINT mode +uint8 safe_point_index # index of the chosen safe point, UINT8_MAX if no rally point was chosen uint8 RTL_STATUS_TYPE_NONE=0 # pending if evaluation can't pe performed currently e.g. when it is still loading the safe points uint8 RTL_STATUS_TYPE_DIRECT_SAFE_POINT=1 # chosen to directly go to a safe point or home position diff --git a/docs/zh/msg_docs/RtlTimeEstimate.md b/docs/zh/msg_docs/RtlTimeEstimate.md index 5ed2e8d097..f81658717a 100644 --- a/docs/zh/msg_docs/RtlTimeEstimate.md +++ b/docs/zh/msg_docs/RtlTimeEstimate.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # RtlTimeEstimate (UORB message) -**TOPICS:** rtl_timeestimate +**TOPICS:** rtl_time_estimate ## Fields diff --git a/docs/zh/msg_docs/SatelliteInfo.md b/docs/zh/msg_docs/SatelliteInfo.md index 65ff7152a2..2a08cb1710 100644 --- a/docs/zh/msg_docs/SatelliteInfo.md +++ b/docs/zh/msg_docs/SatelliteInfo.md @@ -21,9 +21,9 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------------------------------------------------------------ | ------- | -- | -- | -| SAT_INFO_MAX_SATELLITES | `uint8` | 40 | | +| 参数名 | 类型 | 值 | 描述 | +| ---------------------------------------------------------------------------------------------------------------------------- | ------- | -- | -- | +| SAT_INFO_MAX_SATELLITES | `uint8` | 40 | | ## Source Message diff --git a/docs/zh/msg_docs/SensorAccel.md b/docs/zh/msg_docs/SensorAccel.md index 9df887f343..149317bb99 100644 --- a/docs/zh/msg_docs/SensorAccel.md +++ b/docs/zh/msg_docs/SensorAccel.md @@ -23,9 +23,9 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------------------------- | ------- | - | -- | -| ORB_QUEUE_LENGTH | `uint8` | 8 | | +| 参数名 | 类型 | 值 | 描述 | +| ----------------------------------------------------------------------------------------- | ------- | - | -- | +| ORB_QUEUE_LENGTH | `uint8` | 8 | | ## Source Message diff --git a/docs/zh/msg_docs/SensorAccelFifo.md b/docs/zh/msg_docs/SensorAccelFifo.md index fdc8e20826..c06ca20163 100644 --- a/docs/zh/msg_docs/SensorAccelFifo.md +++ b/docs/zh/msg_docs/SensorAccelFifo.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # SensorAccelFifo (UORB message) -**TOPICS:** sensor_accelfifo +**TOPICS:** sensor_accel_fifo ## Fields diff --git a/docs/zh/msg_docs/SensorBaro.md b/docs/zh/msg_docs/SensorBaro.md index 8498376d07..00f4fa3d5d 100644 --- a/docs/zh/msg_docs/SensorBaro.md +++ b/docs/zh/msg_docs/SensorBaro.md @@ -24,9 +24,9 @@ The information is published in the `SCALED_PRESSURE_n` MAVLink messages (along ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------------------------- | ------- | - | -- | -| ORB_QUEUE_LENGTH | `uint8` | 4 | | +| 参数名 | 类型 | 值 | 描述 | +| ----------------------------------------------------------------------------------------- | ------- | - | -- | +| ORB_QUEUE_LENGTH | `uint8` | 4 | | ## Source Message diff --git a/docs/zh/msg_docs/SensorCombined.md b/docs/zh/msg_docs/SensorCombined.md index 8ab0c5fadb..5ce665ecca 100644 --- a/docs/zh/msg_docs/SensorCombined.md +++ b/docs/zh/msg_docs/SensorCombined.md @@ -25,12 +25,12 @@ Sensor readings in SI-unit form. These fields are scaled and offset-compensated ## Constants -| 参数名 | 类型 | 值 | 描述 | -| --------------------------------------------------------------------------------------------------------------- | ------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------- | -| RELATIVE_TIMESTAMP_INVALID | `int32` | 2147483647 | (0x7fffffff) If one of the relative timestamps is set to this value, it means the associated sensor values are invalid | -| CLIPPING_X | `uint8` | 1 | | -| CLIPPING_Y | `uint8` | 2 | | -| CLIPPING_Z | `uint8` | 4 | | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------------------------------------------------- | ------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------- | +| RELATIVE_TIMESTAMP_INVALID | `int32` | 2147483647 | (0x7fffffff) If one of the relative timestamps is set to this value, it means the associated sensor values are invalid | +| CLIPPING_X | `uint8` | 1 | | +| CLIPPING_Y | `uint8` | 2 | | +| CLIPPING_Z | `uint8` | 4 | | ## Source Message diff --git a/docs/zh/msg_docs/SensorGnssRelative.md b/docs/zh/msg_docs/SensorGnssRelative.md index 8f4c2b59bc..33196347f5 100644 --- a/docs/zh/msg_docs/SensorGnssRelative.md +++ b/docs/zh/msg_docs/SensorGnssRelative.md @@ -6,7 +6,7 @@ pageClass: is-wide-page GNSS relative positioning information in NED frame. The NED frame is defined as the local topological system at the reference station. -**TOPICS:** sensor_gnssrelative +**TOPICS:** sensor_gnss_relative ## Fields diff --git a/docs/zh/msg_docs/SensorGnssStatus.md b/docs/zh/msg_docs/SensorGnssStatus.md index 8124591cc6..d0c2f8acb5 100644 --- a/docs/zh/msg_docs/SensorGnssStatus.md +++ b/docs/zh/msg_docs/SensorGnssStatus.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Gnss quality indicators. -**TOPICS:** sensor_gnssstatus +**TOPICS:** sensor_gnss_status ## Fields diff --git a/docs/zh/msg_docs/SensorGps.md b/docs/zh/msg_docs/SensorGps.md index e5edf24fea..cb4dd669e1 100644 --- a/docs/zh/msg_docs/SensorGps.md +++ b/docs/zh/msg_docs/SensorGps.md @@ -10,81 +10,84 @@ GPS position in WGS84 coordinates. the field 'timestamp' is for the position & v ## Fields -| 参数名 | 类型 | Unit [Frame] | Range/Enum | 描述 | -| ----------------------------------------------------------------------------- | --------- | ---------------------------------------------------------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| timestamp | `uint64` | | | time since system start (microseconds) | -| timestamp_sample | `uint64` | | | | -| device_id | `uint32` | | | unique device ID for the sensor that does not change between power cycles | -| latitude_deg | `float64` | | | Latitude in degrees, allows centimeter level RTK precision | -| longitude_deg | `float64` | | | Longitude in degrees, allows centimeter level RTK precision | -| altitude_msl_m | `float64` | | | Altitude above MSL, meters | -| altitude_ellipsoid_m | `float64` | | | Altitude above Ellipsoid, meters | -| s_variance_m_s | `float32` | | | GPS speed accuracy estimate, (metres/sec) | -| c_variance_rad | `float32` | | | GPS course accuracy estimate, (radians) | -| fix_type | `uint8` | | | Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. | -| eph | `float32` | | | GPS horizontal position accuracy (metres) | -| epv | `float32` | | | GPS vertical position accuracy (metres) | -| hdop | `float32` | | | Horizontal dilution of precision | -| vdop | `float32` | | | Vertical dilution of precision | -| noise_per_ms | `int32` | | | GPS noise per millisecond | -| automatic_gain_control | `uint16` | | | Automatic gain control monitor | -| jamming_state | `uint8` | | | indicates whether jamming has been detected or suspected by the receivers. O: Unknown, 1: OK, 2: Mitigated, 3: Detected | -| jamming_indicator | `int32` | | | indicates jamming is occurring | -| spoofing_state | `uint8` | | | indicates whether spoofing has been detected or suspected by the receivers. O: Unknown, 1: OK, 2: Mitigated, 3: Detected | -| authentication_state | `uint8` | | | GPS signal authentication state | -| vel_m_s | `float32` | | | GPS ground speed, (metres/sec) | -| vel_n_m_s | `float32` | | | GPS North velocity, (metres/sec) | -| vel_e_m_s | `float32` | | | GPS East velocity, (metres/sec) | -| vel_d_m_s | `float32` | | | GPS Down velocity, (metres/sec) | -| cog_rad | `float32` | | | Course over ground (NOT heading, but direction of movement), -PI..PI, (radians) | -| vel_ned_valid | `bool` | | | True if NED velocity is valid | -| timestamp_time_relative | `int32` | | | timestamp + timestamp_time_relative = Time of the UTC timestamp since system start, (microseconds) | -| time_utc_usec | `uint64` | | | Timestamp (microseconds, UTC), this is the timestamp which comes from the gps module. It might be unavailable right after cold start, indicated by a value of 0 | -| satellites_used | `uint8` | | | Number of satellites used | -| system_error | `uint32` | | | General errors with the connected GPS receiver | -| heading | `float32` | | | heading angle of XYZ body frame rel to NED. Set to NaN if not available and updated (used for dual antenna GPS), (rad, [-PI, PI]) | -| heading_offset | `float32` | | | heading offset of dual antenna array in body frame. Set to NaN if not applicable. (rad, [-PI, PI]) | -| heading_accuracy | `float32` | | | heading accuracy (rad, [0, 2PI]) | -| rtcm_injection_rate | `float32` | | | RTCM message injection rate Hz | -| selected_rtcm_instance | `uint8` | | | uorb instance that is being used for RTCM corrections | -| rtcm_crc_failed | `bool` | | | RTCM message CRC failure detected | -| rtcm_msg_used | `uint8` | | | Indicates if the RTCM message was used successfully by the receiver | +| 参数名 | 类型 | Unit [Frame] | Range/Enum | 描述 | +| ----------------------------------------------------------------------------- | --------- | ---------------------------------------------------------------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| timestamp | `uint64` | | | time since system start (microseconds) | +| timestamp_sample | `uint64` | | | | +| device_id | `uint32` | | | unique device ID for the sensor that does not change between power cycles | +| latitude_deg | `float64` | | | Latitude in degrees, allows centimeter level RTK precision | +| longitude_deg | `float64` | | | Longitude in degrees, allows centimeter level RTK precision | +| altitude_msl_m | `float64` | | | Altitude above MSL, meters | +| altitude_ellipsoid_m | `float64` | | | Altitude above Ellipsoid, meters | +| s_variance_m_s | `float32` | | | GPS speed accuracy estimate, (metres/sec) | +| c_variance_rad | `float32` | | | GPS course accuracy estimate, (radians) | +| fix_type | `uint8` | | | Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. | +| eph | `float32` | | | GPS horizontal position accuracy (metres) | +| epv | `float32` | | | GPS vertical position accuracy (metres) | +| hdop | `float32` | | | Horizontal dilution of precision | +| vdop | `float32` | | | Vertical dilution of precision | +| noise_per_ms | `int32` | | | GPS noise per millisecond | +| automatic_gain_control | `uint16` | | | Automatic gain control monitor | +| jamming_state | `uint8` | | | indicates whether jamming has been detected or suspected by the receivers. O: Unknown, 1: OK, 2: Mitigated, 3: Detected | +| jamming_indicator | `int32` | | | indicates jamming is occurring | +| spoofing_state | `uint8` | | | indicates whether spoofing has been detected or suspected by the receivers. O: Unknown, 1: OK, 2: Mitigated, 3: Detected | +| authentication_state | `uint8` | | | GPS signal authentication state | +| vel_m_s | `float32` | | | GPS ground speed, (metres/sec) | +| vel_n_m_s | `float32` | | | GPS North velocity, (metres/sec) | +| vel_e_m_s | `float32` | | | GPS East velocity, (metres/sec) | +| vel_d_m_s | `float32` | | | GPS Down velocity, (metres/sec) | +| cog_rad | `float32` | | | Course over ground (NOT heading, but direction of movement), -PI..PI, (radians) | +| vel_ned_valid | `bool` | | | True if NED velocity is valid | +| timestamp_time_relative | `int32` | | | timestamp + timestamp_time_relative = Time of the UTC timestamp since system start, (microseconds) | +| time_utc_usec | `uint64` | | | Timestamp (microseconds, UTC), this is the timestamp which comes from the gps module. It might be unavailable right after cold start, indicated by a value of 0 | +| satellites_used | `uint8` | | | Number of satellites used | +| system_error | `uint32` | | | General errors with the connected GPS receiver | +| heading | `float32` | | | heading angle of XYZ body frame rel to NED. Set to NaN if not available and updated (used for dual antenna GPS), (rad, [-PI, PI]) | +| heading_offset | `float32` | | | heading offset of dual antenna array in body frame. Set to NaN if not applicable. (rad, [-PI, PI]) | +| heading_accuracy | `float32` | | | heading accuracy (rad, [0, 2PI]) | +| rtcm_injection_rate | `float32` | | | RTCM message injection rate Hz | +| selected_rtcm_instance | `uint8` | | | uorb instance that is being used for RTCM corrections | +| rtcm_crc_failed | `bool` | | | RTCM message CRC failure detected | +| rtcm_msg_used | `uint8` | | | Indicates if the RTCM message was used successfully by the receiver | +| antenna_offset_x | `float32` | m [body frame FRD] | | X Position of GNSS antenna | +| antenna_offset_y | `float32` | m [body frame FRD] | | Y Position of GNSS antenna | +| antenna_offset_z | `float32` | m [body frame FRD] | | Z Position of GNSS antenna | ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -- | ---------------------------------------------------------- | -| FIX_TYPE_NONE | `uint8` | 1 | Value 0 is also valid to represent no fix. | -| FIX_TYPE_2D | `uint8` | 2 | | -| FIX_TYPE_3D | `uint8` | 3 | | -| FIX_TYPE_RTCM_CODE_DIFFERENTIAL | `uint8` | 4 | | -| FIX_TYPE_RTK_FLOAT | `uint8` | 5 | | -| FIX_TYPE_RTK_FIXED | `uint8` | 6 | | -| FIX_TYPE_EXTRAPOLATED | `uint8` | 8 | | -| JAMMING_STATE_UNKNOWN | `uint8` | 0 | default | -| JAMMING_STATE_OK | `uint8` | 1 | | -| JAMMING_STATE_MITIGATED | `uint8` | 2 | | -| JAMMING_STATE_DETECTED | `uint8` | 3 | | -| SPOOFING_STATE_UNKNOWN | `uint8` | 0 | default | -| SPOOFING_STATE_OK | `uint8` | 1 | | -| SPOOFING_STATE_MITIGATED | `uint8` | 2 | | -| SPOOFING_STATE_DETECTED | `uint8` | 3 | | -| AUTHENTICATION_STATE_UNKNOWN | `uint8` | 0 | default | -| AUTHENTICATION_STATE_INITIALIZING | `uint8` | 1 | | -| AUTHENTICATION_STATE_ERROR | `uint8` | 2 | | -| AUTHENTICATION_STATE_OK | `uint8` | 3 | | -| AUTHENTICATION_STATE_DISABLED | `uint8` | 4 | | -| SYSTEM_ERROR_OK | `uint32` | 0 | default | -| SYSTEM_ERROR_INCOMING_CORRECTIONS | `uint32` | 1 | | -| SYSTEM_ERROR_CONFIGURATION | `uint32` | 2 | | -| SYSTEM_ERROR_SOFTWARE | `uint32` | 4 | | -| SYSTEM_ERROR_ANTENNA | `uint32` | 8 | | -| SYSTEM_ERROR_EVENT_CONGESTION | `uint32` | 16 | | -| SYSTEM_ERROR_CPU_OVERLOAD | `uint32` | 32 | | -| SYSTEM_ERROR_OUTPUT_CONGESTION | `uint32` | 64 | | -| RTCM_MSG_USED_UNKNOWN | `uint8` | 0 | | -| RTCM_MSG_USED_NOT_USED | `uint8` | 1 | | -| RTCM_MSG_USED_USED | `uint8` | 2 | | +| 参数名 | 类型 | 值 | 描述 | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -- | ---------------------------------------------------------- | +| FIX_TYPE_NONE | `uint8` | 1 | Value 0 is also valid to represent no fix. | +| FIX_TYPE_2D | `uint8` | 2 | | +| FIX_TYPE_3D | `uint8` | 3 | | +| FIX_TYPE_RTCM_CODE_DIFFERENTIAL | `uint8` | 4 | | +| FIX_TYPE_RTK_FLOAT | `uint8` | 5 | | +| FIX_TYPE_RTK_FIXED | `uint8` | 6 | | +| FIX_TYPE_EXTRAPOLATED | `uint8` | 8 | | +| JAMMING_STATE_UNKNOWN | `uint8` | 0 | default | +| JAMMING_STATE_OK | `uint8` | 1 | | +| JAMMING_STATE_MITIGATED | `uint8` | 2 | | +| JAMMING_STATE_DETECTED | `uint8` | 3 | | +| SPOOFING_STATE_UNKNOWN | `uint8` | 0 | default | +| SPOOFING_STATE_OK | `uint8` | 1 | | +| SPOOFING_STATE_MITIGATED | `uint8` | 2 | | +| SPOOFING_STATE_DETECTED | `uint8` | 3 | | +| AUTHENTICATION_STATE_UNKNOWN | `uint8` | 0 | default | +| AUTHENTICATION_STATE_INITIALIZING | `uint8` | 1 | | +| AUTHENTICATION_STATE_ERROR | `uint8` | 2 | | +| AUTHENTICATION_STATE_OK | `uint8` | 3 | | +| AUTHENTICATION_STATE_DISABLED | `uint8` | 4 | | +| SYSTEM_ERROR_OK | `uint32` | 0 | default | +| SYSTEM_ERROR_INCOMING_CORRECTIONS | `uint32` | 1 | | +| SYSTEM_ERROR_CONFIGURATION | `uint32` | 2 | | +| SYSTEM_ERROR_SOFTWARE | `uint32` | 4 | | +| SYSTEM_ERROR_ANTENNA | `uint32` | 8 | | +| SYSTEM_ERROR_EVENT_CONGESTION | `uint32` | 16 | | +| SYSTEM_ERROR_CPU_OVERLOAD | `uint32` | 32 | | +| SYSTEM_ERROR_OUTPUT_CONGESTION | `uint32` | 64 | | +| RTCM_MSG_USED_UNKNOWN | `uint8` | 0 | | +| RTCM_MSG_USED_NOT_USED | `uint8` | 1 | | +| RTCM_MSG_USED_USED | `uint8` | 2 | | ## Source Message @@ -183,6 +186,10 @@ uint8 RTCM_MSG_USED_NOT_USED = 1 uint8 RTCM_MSG_USED_USED = 2 uint8 rtcm_msg_used # Indicates if the RTCM message was used successfully by the receiver +float32 antenna_offset_x # [m] [@frame body frame FRD] X Position of GNSS antenna +float32 antenna_offset_y # [m] [@frame body frame FRD] Y Position of GNSS antenna +float32 antenna_offset_z # [m] [@frame body frame FRD] Z Position of GNSS antenna + # TOPICS sensor_gps vehicle_gps_position ``` diff --git a/docs/zh/msg_docs/SensorGyro.md b/docs/zh/msg_docs/SensorGyro.md index 5f01541605..915565c51d 100644 --- a/docs/zh/msg_docs/SensorGyro.md +++ b/docs/zh/msg_docs/SensorGyro.md @@ -23,9 +23,9 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------------------------- | ------- | - | -- | -| ORB_QUEUE_LENGTH | `uint8` | 8 | | +| 参数名 | 类型 | 值 | 描述 | +| ----------------------------------------------------------------------------------------- | ------- | - | -- | +| ORB_QUEUE_LENGTH | `uint8` | 8 | | ## Source Message diff --git a/docs/zh/msg_docs/SensorGyroFft.md b/docs/zh/msg_docs/SensorGyroFft.md index 3f6841a73a..3f84667341 100644 --- a/docs/zh/msg_docs/SensorGyroFft.md +++ b/docs/zh/msg_docs/SensorGyroFft.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # SensorGyroFft (UORB message) -**TOPICS:** sensor_gyrofft +**TOPICS:** sensor_gyro_fft ## Fields diff --git a/docs/zh/msg_docs/SensorGyroFifo.md b/docs/zh/msg_docs/SensorGyroFifo.md index c2ace874c7..2d022a000b 100644 --- a/docs/zh/msg_docs/SensorGyroFifo.md +++ b/docs/zh/msg_docs/SensorGyroFifo.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # SensorGyroFifo (UORB message) -**TOPICS:** sensor_gyrofifo +**TOPICS:** sensor_gyro_fifo ## Fields @@ -22,9 +22,9 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------------------------- | ------- | - | -- | -| ORB_QUEUE_LENGTH | `uint8` | 4 | | +| 参数名 | 类型 | 值 | 描述 | +| ----------------------------------------------------------------------------------------- | ------- | - | -- | +| ORB_QUEUE_LENGTH | `uint8` | 4 | | ## Source Message diff --git a/docs/zh/msg_docs/SensorMag.md b/docs/zh/msg_docs/SensorMag.md index 2ec39720c7..4df402ac77 100644 --- a/docs/zh/msg_docs/SensorMag.md +++ b/docs/zh/msg_docs/SensorMag.md @@ -21,9 +21,9 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------------------------- | ------- | - | -- | -| ORB_QUEUE_LENGTH | `uint8` | 4 | | +| 参数名 | 类型 | 值 | 描述 | +| ----------------------------------------------------------------------------------------- | ------- | - | -- | +| ORB_QUEUE_LENGTH | `uint8` | 4 | | ## Source Message diff --git a/docs/zh/msg_docs/SensorOpticalFlow.md b/docs/zh/msg_docs/SensorOpticalFlow.md index e555cb7b76..7ce7097210 100644 --- a/docs/zh/msg_docs/SensorOpticalFlow.md +++ b/docs/zh/msg_docs/SensorOpticalFlow.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # SensorOpticalFlow (UORB message) -**TOPICS:** sensor_opticalflow +**TOPICS:** sensor_optical_flow ## Fields @@ -28,12 +28,12 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------------------------------- | ------- | - | -- | -| MODE_UNKNOWN | `uint8` | 0 | | -| MODE_BRIGHT | `uint8` | 1 | | -| MODE_LOWLIGHT | `uint8` | 2 | | -| MODE_SUPER_LOWLIGHT | `uint8` | 3 | | +| 参数名 | 类型 | 值 | 描述 | +| ----------------------------------------------------------------------------------------------- | ------- | - | -- | +| MODE_UNKNOWN | `uint8` | 0 | | +| MODE_BRIGHT | `uint8` | 1 | | +| MODE_LOWLIGHT | `uint8` | 2 | | +| MODE_SUPER_LOWLIGHT | `uint8` | 3 | | ## Source Message diff --git a/docs/zh/msg_docs/SensorPreflightMag.md b/docs/zh/msg_docs/SensorPreflightMag.md index 8f7747119d..c0d0bbef26 100644 --- a/docs/zh/msg_docs/SensorPreflightMag.md +++ b/docs/zh/msg_docs/SensorPreflightMag.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Pre-flight sensor check metrics. The topic will not be updated when the vehicle is armed. -**TOPICS:** sensor_preflightmag +**TOPICS:** sensor_preflight_mag ## Fields diff --git a/docs/zh/msg_docs/SensorsStatusImu.md b/docs/zh/msg_docs/SensorsStatusImu.md index 7abcb84e28..9750b7eed4 100644 --- a/docs/zh/msg_docs/SensorsStatusImu.md +++ b/docs/zh/msg_docs/SensorsStatusImu.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Sensor check metrics. This will be zero for a sensor that's primary or unpopulated. -**TOPICS:** sensors_statusimu +**TOPICS:** sensors_status_imu ## Fields diff --git a/docs/zh/msg_docs/SystemPower.md b/docs/zh/msg_docs/SystemPower.md index 2386e4cd08..1dabc1bd49 100644 --- a/docs/zh/msg_docs/SystemPower.md +++ b/docs/zh/msg_docs/SystemPower.md @@ -27,16 +27,16 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------------------------------- | ------- | - | -- | -| BRICK1_VALID_SHIFTS | `uint8` | 0 | | -| BRICK1_VALID_MASK | `uint8` | 1 | | -| BRICK2_VALID_SHIFTS | `uint8` | 1 | | -| BRICK2_VALID_MASK | `uint8` | 2 | | -| BRICK3_VALID_SHIFTS | `uint8` | 2 | | -| BRICK3_VALID_MASK | `uint8` | 4 | | -| BRICK4_VALID_SHIFTS | `uint8` | 3 | | -| BRICK4_VALID_MASK | `uint8` | 8 | | +| 参数名 | 类型 | 值 | 描述 | +| ----------------------------------------------------------------------------------------------- | ------- | - | -- | +| BRICK1_VALID_SHIFTS | `uint8` | 0 | | +| BRICK1_VALID_MASK | `uint8` | 1 | | +| BRICK2_VALID_SHIFTS | `uint8` | 1 | | +| BRICK2_VALID_MASK | `uint8` | 2 | | +| BRICK3_VALID_SHIFTS | `uint8` | 2 | | +| BRICK3_VALID_MASK | `uint8` | 4 | | +| BRICK4_VALID_SHIFTS | `uint8` | 3 | | +| BRICK4_VALID_MASK | `uint8` | 8 | | ## Source Message diff --git a/docs/zh/msg_docs/TakeoffStatus.md b/docs/zh/msg_docs/TakeoffStatus.md index 075f3a8ae4..14b684aeff 100644 --- a/docs/zh/msg_docs/TakeoffStatus.md +++ b/docs/zh/msg_docs/TakeoffStatus.md @@ -18,14 +18,14 @@ Status of the takeoff state machine currently just available for multicopters. ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | - | -- | -| TAKEOFF_STATE_UNINITIALIZED | `uint8` | 0 | | -| TAKEOFF_STATE_DISARMED | `uint8` | 1 | | -| TAKEOFF_STATE_SPOOLUP | `uint8` | 2 | | -| TAKEOFF_STATE_READY_FOR_TAKEOFF | `uint8` | 3 | | -| TAKEOFF_STATE_RAMPUP | `uint8` | 4 | | -| TAKEOFF_STATE_FLIGHT | `uint8` | 5 | | +| 参数名 | 类型 | 值 | 描述 | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | - | -- | +| TAKEOFF_STATE_UNINITIALIZED | `uint8` | 0 | | +| TAKEOFF_STATE_DISARMED | `uint8` | 1 | | +| TAKEOFF_STATE_SPOOLUP | `uint8` | 2 | | +| TAKEOFF_STATE_READY_FOR_TAKEOFF | `uint8` | 3 | | +| TAKEOFF_STATE_RAMPUP | `uint8` | 4 | | +| TAKEOFF_STATE_FLIGHT | `uint8` | 5 | | ## Source Message diff --git a/docs/zh/msg_docs/TaskStackInfo.md b/docs/zh/msg_docs/TaskStackInfo.md index b640e52e9f..9fc42ef652 100644 --- a/docs/zh/msg_docs/TaskStackInfo.md +++ b/docs/zh/msg_docs/TaskStackInfo.md @@ -6,7 +6,7 @@ pageClass: is-wide-page stack information for a single running process. -**TOPICS:** task_stackinfo +**TOPICS:** task_stack_info ## Fields @@ -18,9 +18,9 @@ stack information for a single running process. ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------------------------- | ------- | - | -- | -| ORB_QUEUE_LENGTH | `uint8` | 2 | | +| 参数名 | 类型 | 值 | 描述 | +| ----------------------------------------------------------------------------------------- | ------- | - | -- | +| ORB_QUEUE_LENGTH | `uint8` | 2 | | ## Source Message diff --git a/docs/zh/msg_docs/TelemetryStatus.md b/docs/zh/msg_docs/TelemetryStatus.md index 744dcb606a..cf1cfdcdfa 100644 --- a/docs/zh/msg_docs/TelemetryStatus.md +++ b/docs/zh/msg_docs/TelemetryStatus.md @@ -36,6 +36,7 @@ pageClass: is-wide-page | heartbeat_type_onboard_controller | `bool` | | | MAV_TYPE_ONBOARD_CONTROLLER | | heartbeat_type_gimbal | `bool` | | | MAV_TYPE_GIMBAL | | heartbeat_type_adsb | `bool` | | | MAV_TYPE_ADSB | +| heartbeat_type_flarm | `bool` | | | MAV_TYPE_FLARM | | heartbeat_type_camera | `bool` | | | MAV_TYPE_CAMERA | | heartbeat_type_parachute | `bool` | | | MAV_TYPE_PARACHUTE | | heartbeat_type_open_drone_id | `bool` | | | MAV_TYPE_ODID | @@ -51,14 +52,14 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ---------------------------------------------------------------------------------------------------------------------------------- | -------- | ------- | ------------------------------------------------------------------ | -| LINK_TYPE_GENERIC | `uint8` | 0 | | -| LINK_TYPE_UBIQUITY_BULLET | `uint8` | 1 | | -| LINK_TYPE_WIRE | `uint8` | 2 | | -| LINK_TYPE_USB | `uint8` | 3 | | -| LINK_TYPE_IRIDIUM | `uint8` | 4 | | -| HEARTBEAT_TIMEOUT_US | `uint64` | 2500000 | Heartbeat timeout (tolerate missing 1 + jitter) | +| 参数名 | 类型 | 值 | 描述 | +| -------------------------------------------------------------------------------------------------------------------------------- | -------- | ------- | ------------------------------------------------------------------ | +| LINK_TYPE_GENERIC | `uint8` | 0 | | +| LINK_TYPE_UBIQUITY_BULLET | `uint8` | 1 | | +| LINK_TYPE_WIRE | `uint8` | 2 | | +| LINK_TYPE_USB | `uint8` | 3 | | +| LINK_TYPE_IRIDIUM | `uint8` | 4 | | +| HEARTBEAT_TIMEOUT_US | `uint64` | 2500000 | Heartbeat timeout (tolerate missing 1 + jitter) | ## Source Message @@ -113,6 +114,7 @@ bool heartbeat_type_gcs # MAV_TYPE_GCS bool heartbeat_type_onboard_controller # MAV_TYPE_ONBOARD_CONTROLLER bool heartbeat_type_gimbal # MAV_TYPE_GIMBAL bool heartbeat_type_adsb # MAV_TYPE_ADSB +bool heartbeat_type_flarm # MAV_TYPE_FLARM bool heartbeat_type_camera # MAV_TYPE_CAMERA bool heartbeat_type_parachute # MAV_TYPE_PARACHUTE bool heartbeat_type_open_drone_id # MAV_TYPE_ODID diff --git a/docs/zh/msg_docs/TiltrotorExtraControls.md b/docs/zh/msg_docs/TiltrotorExtraControls.md index 25426445f9..a8401a800d 100644 --- a/docs/zh/msg_docs/TiltrotorExtraControls.md +++ b/docs/zh/msg_docs/TiltrotorExtraControls.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # TiltrotorExtraControls (UORB message) -**TOPICS:** tiltrotor_extracontrols +**TOPICS:** tiltrotor_extra_controls ## Fields diff --git a/docs/zh/msg_docs/TimesyncStatus.md b/docs/zh/msg_docs/TimesyncStatus.md index c472101720..8681665975 100644 --- a/docs/zh/msg_docs/TimesyncStatus.md +++ b/docs/zh/msg_docs/TimesyncStatus.md @@ -19,11 +19,11 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| --------------------------------------------------------------------------------------------------------- | ------- | - | -- | -| SOURCE_PROTOCOL_UNKNOWN | `uint8` | 0 | | -| SOURCE_PROTOCOL_MAVLINK | `uint8` | 1 | | -| SOURCE_PROTOCOL_DDS | `uint8` | 2 | | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------------------------------------------- | ------- | - | -- | +| SOURCE_PROTOCOL_UNKNOWN | `uint8` | 0 | | +| SOURCE_PROTOCOL_MAVLINK | `uint8` | 1 | | +| SOURCE_PROTOCOL_DDS | `uint8` | 2 | | ## Source Message diff --git a/docs/zh/msg_docs/TrajectorySetpoint.md b/docs/zh/msg_docs/TrajectorySetpoint.md index a5c2dc56b5..ad86df0ba5 100644 --- a/docs/zh/msg_docs/TrajectorySetpoint.md +++ b/docs/zh/msg_docs/TrajectorySetpoint.md @@ -22,9 +22,9 @@ Trajectory setpoint in NED frame. Input to PID position controller. Needs to be ## Constants -| 参数名 | 类型 | 值 | 描述 | -| -------------------------------------------------------------------- | -------- | - | -- | -| MESSAGE_VERSION | `uint32` | 0 | | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------ | -------- | - | -- | +| MESSAGE_VERSION | `uint32` | 0 | | ## Source Message diff --git a/docs/zh/msg_docs/TransponderReport.md b/docs/zh/msg_docs/TransponderReport.md index caabb760bd..cb8bf420ec 100644 --- a/docs/zh/msg_docs/TransponderReport.md +++ b/docs/zh/msg_docs/TransponderReport.md @@ -28,37 +28,37 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------- | --- | -- | -| PX4_ADSB_FLAGS_VALID_COORDS | `uint16` | 1 | | -| PX4_ADSB_FLAGS_VALID_ALTITUDE | `uint16` | 2 | | -| PX4_ADSB_FLAGS_VALID_HEADING | `uint16` | 4 | | -| PX4_ADSB_FLAGS_VALID_VELOCITY | `uint16` | 8 | | -| PX4_ADSB_FLAGS_VALID_CALLSIGN | `uint16` | 16 | | -| PX4_ADSB_FLAGS_VALID_SQUAWK | `uint16` | 32 | | -| PX4_ADSB_FLAGS_RETRANSLATE | `uint16` | 256 | | -| ADSB_EMITTER_TYPE_NO_INFO | `uint16` | 0 | | -| ADSB_EMITTER_TYPE_LIGHT | `uint16` | 1 | | -| ADSB_EMITTER_TYPE_SMALL | `uint16` | 2 | | -| ADSB_EMITTER_TYPE_LARGE | `uint16` | 3 | | -| ADSB_EMITTER_TYPE_HIGH_VORTEX_LARGE | `uint16` | 4 | | -| ADSB_EMITTER_TYPE_HEAVY | `uint16` | 5 | | -| ADSB_EMITTER_TYPE_HIGHLY_MANUV | `uint16` | 6 | | -| ADSB_EMITTER_TYPE_ROTOCRAFT | `uint16` | 7 | | -| ADSB_EMITTER_TYPE_UNASSIGNED | `uint16` | 8 | | -| ADSB_EMITTER_TYPE_GLIDER | `uint16` | 9 | | -| ADSB_EMITTER_TYPE_LIGHTER_AIR | `uint16` | 10 | | -| ADSB_EMITTER_TYPE_PARACHUTE | `uint16` | 11 | | -| ADSB_EMITTER_TYPE_ULTRA_LIGHT | `uint16` | 12 | | -| ADSB_EMITTER_TYPE_UNASSIGNED2 | `uint16` | 13 | | -| ADSB_EMITTER_TYPE_UAV | `uint16` | 14 | | -| ADSB_EMITTER_TYPE_SPACE | `uint16` | 15 | | -| ADSB_EMITTER_TYPE_UNASSGINED3 | `uint16` | 16 | | -| ADSB_EMITTER_TYPE_EMERGENCY_SURFACE | `uint16` | 17 | | -| ADSB_EMITTER_TYPE_SERVICE_SURFACE | `uint16` | 18 | | -| ADSB_EMITTER_TYPE_POINT_OBSTACLE | `uint16` | 19 | | -| ADSB_EMITTER_TYPE_ENUM_END | `uint16` | 20 | | -| ORB_QUEUE_LENGTH | `uint8` | 16 | | +| 参数名 | 类型 | 值 | 描述 | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | --- | -- | +| PX4_ADSB_FLAGS_VALID_COORDS | `uint16` | 1 | | +| PX4_ADSB_FLAGS_VALID_ALTITUDE | `uint16` | 2 | | +| PX4_ADSB_FLAGS_VALID_HEADING | `uint16` | 4 | | +| PX4_ADSB_FLAGS_VALID_VELOCITY | `uint16` | 8 | | +| PX4_ADSB_FLAGS_VALID_CALLSIGN | `uint16` | 16 | | +| PX4_ADSB_FLAGS_VALID_SQUAWK | `uint16` | 32 | | +| PX4_ADSB_FLAGS_RETRANSLATE | `uint16` | 256 | | +| ADSB_EMITTER_TYPE_NO_INFO | `uint16` | 0 | | +| ADSB_EMITTER_TYPE_LIGHT | `uint16` | 1 | | +| ADSB_EMITTER_TYPE_SMALL | `uint16` | 2 | | +| ADSB_EMITTER_TYPE_LARGE | `uint16` | 3 | | +| ADSB_EMITTER_TYPE_HIGH_VORTEX_LARGE | `uint16` | 4 | | +| ADSB_EMITTER_TYPE_HEAVY | `uint16` | 5 | | +| ADSB_EMITTER_TYPE_HIGHLY_MANUV | `uint16` | 6 | | +| ADSB_EMITTER_TYPE_ROTOCRAFT | `uint16` | 7 | | +| ADSB_EMITTER_TYPE_UNASSIGNED | `uint16` | 8 | | +| ADSB_EMITTER_TYPE_GLIDER | `uint16` | 9 | | +| ADSB_EMITTER_TYPE_LIGHTER_AIR | `uint16` | 10 | | +| ADSB_EMITTER_TYPE_PARACHUTE | `uint16` | 11 | | +| ADSB_EMITTER_TYPE_ULTRA_LIGHT | `uint16` | 12 | | +| ADSB_EMITTER_TYPE_UNASSIGNED2 | `uint16` | 13 | | +| ADSB_EMITTER_TYPE_UAV | `uint16` | 14 | | +| ADSB_EMITTER_TYPE_SPACE | `uint16` | 15 | | +| ADSB_EMITTER_TYPE_UNASSGINED3 | `uint16` | 16 | | +| ADSB_EMITTER_TYPE_EMERGENCY_SURFACE | `uint16` | 17 | | +| ADSB_EMITTER_TYPE_SERVICE_SURFACE | `uint16` | 18 | | +| ADSB_EMITTER_TYPE_POINT_OBSTACLE | `uint16` | 19 | | +| ADSB_EMITTER_TYPE_ENUM_END | `uint16` | 20 | | +| ORB_QUEUE_LENGTH | `uint8` | 16 | | ## Source Message diff --git a/docs/zh/msg_docs/TuneControl.md b/docs/zh/msg_docs/TuneControl.md index 517da9a693..1c29b48717 100644 --- a/docs/zh/msg_docs/TuneControl.md +++ b/docs/zh/msg_docs/TuneControl.md @@ -22,33 +22,33 @@ This message is used to control the tunes, when the tune_id is set to CUSTOM. th ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | --- | -- | -| TUNE_ID_STOP | `uint8` | 0 | | -| TUNE_ID_STARTUP | `uint8` | 1 | | -| TUNE_ID_ERROR | `uint8` | 2 | | -| TUNE_ID_NOTIFY_POSITIVE | `uint8` | 3 | | -| TUNE_ID_NOTIFY_NEUTRAL | `uint8` | 4 | | -| TUNE_ID_NOTIFY_NEGATIVE | `uint8` | 5 | | -| TUNE_ID_ARMING_WARNING | `uint8` | 6 | | -| TUNE_ID_BATTERY_WARNING_SLOW | `uint8` | 7 | | -| TUNE_ID_BATTERY_WARNING_FAST | `uint8` | 8 | | -| TUNE_ID_GPS_WARNING | `uint8` | 9 | | -| TUNE_ID_ARMING_FAILURE | `uint8` | 10 | | -| TUNE_ID_PARACHUTE_RELEASE | `uint8` | 11 | | -| TUNE_ID_SINGLE_BEEP | `uint8` | 12 | | -| TUNE_ID_HOME_SET | `uint8` | 13 | | -| TUNE_ID_SD_INIT | `uint8` | 14 | | -| TUNE_ID_SD_ERROR | `uint8` | 15 | | -| TUNE_ID_PROG_PX4IO | `uint8` | 16 | | -| TUNE_ID_PROG_PX4IO_OK | `uint8` | 17 | | -| TUNE_ID_PROG_PX4IO_ERR | `uint8` | 18 | | -| TUNE_ID_POWER_OFF | `uint8` | 19 | | -| NUMBER_OF_TUNES | `uint8` | 20 | | -| VOLUME_LEVEL_MIN | `uint8` | 0 | | -| VOLUME_LEVEL_DEFAULT | `uint8` | 20 | | -| VOLUME_LEVEL_MAX | `uint8` | 100 | | -| ORB_QUEUE_LENGTH | `uint8` | 4 | | +| 参数名 | 类型 | 值 | 描述 | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | --- | -- | +| TUNE_ID_STOP | `uint8` | 0 | | +| TUNE_ID_STARTUP | `uint8` | 1 | | +| TUNE_ID_ERROR | `uint8` | 2 | | +| TUNE_ID_NOTIFY_POSITIVE | `uint8` | 3 | | +| TUNE_ID_NOTIFY_NEUTRAL | `uint8` | 4 | | +| TUNE_ID_NOTIFY_NEGATIVE | `uint8` | 5 | | +| TUNE_ID_ARMING_WARNING | `uint8` | 6 | | +| TUNE_ID_BATTERY_WARNING_SLOW | `uint8` | 7 | | +| TUNE_ID_BATTERY_WARNING_FAST | `uint8` | 8 | | +| TUNE_ID_GPS_WARNING | `uint8` | 9 | | +| TUNE_ID_ARMING_FAILURE | `uint8` | 10 | | +| TUNE_ID_PARACHUTE_RELEASE | `uint8` | 11 | | +| TUNE_ID_SINGLE_BEEP | `uint8` | 12 | | +| TUNE_ID_HOME_SET | `uint8` | 13 | | +| TUNE_ID_SD_INIT | `uint8` | 14 | | +| TUNE_ID_SD_ERROR | `uint8` | 15 | | +| TUNE_ID_PROG_PX4IO | `uint8` | 16 | | +| TUNE_ID_PROG_PX4IO_OK | `uint8` | 17 | | +| TUNE_ID_PROG_PX4IO_ERR | `uint8` | 18 | | +| TUNE_ID_POWER_OFF | `uint8` | 19 | | +| NUMBER_OF_TUNES | `uint8` | 20 | | +| VOLUME_LEVEL_MIN | `uint8` | 0 | | +| VOLUME_LEVEL_DEFAULT | `uint8` | 20 | | +| VOLUME_LEVEL_MAX | `uint8` | 100 | | +| ORB_QUEUE_LENGTH | `uint8` | 4 | | ## Source Message diff --git a/docs/zh/msg_docs/UavcanParameterRequest.md b/docs/zh/msg_docs/UavcanParameterRequest.md index ec6c5e65e1..4488f66632 100644 --- a/docs/zh/msg_docs/UavcanParameterRequest.md +++ b/docs/zh/msg_docs/UavcanParameterRequest.md @@ -6,7 +6,7 @@ pageClass: is-wide-page UAVCAN-MAVLink parameter bridge request type. -**TOPICS:** uavcan_parameterrequest +**TOPICS:** uavcan_parameter_request ## Fields @@ -23,16 +23,16 @@ UAVCAN-MAVLink parameter bridge request type. ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | -- | ------------------------------------------------------------------------------------------------------------------------------------------ | -| MESSAGE_TYPE_PARAM_REQUEST_READ | `uint8` | 20 | MAVLINK_MSG_ID_PARAM_REQUEST_READ | -| MESSAGE_TYPE_PARAM_REQUEST_LIST | `uint8` | 21 | MAVLINK_MSG_ID_PARAM_REQUEST_LIST | -| MESSAGE_TYPE_PARAM_SET | `uint8` | 23 | MAVLINK_MSG_ID_PARAM_SET | -| NODE_ID_ALL | `uint8` | 0 | MAV_COMP_ID_ALL | -| PARAM_TYPE_UINT8 | `uint8` | 1 | MAV_PARAM_TYPE_UINT8 | -| PARAM_TYPE_INT64 | `uint8` | 8 | MAV_PARAM_TYPE_INT64 | -| PARAM_TYPE_REAL32 | `uint8` | 9 | MAV_PARAM_TYPE_REAL32 | -| ORB_QUEUE_LENGTH | `uint8` | 4 | | +| 参数名 | 类型 | 值 | 描述 | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | -- | ------------------------------------------------------------------------------------------------------------------------------------------ | +| MESSAGE_TYPE_PARAM_REQUEST_READ | `uint8` | 20 | MAVLINK_MSG_ID_PARAM_REQUEST_READ | +| MESSAGE_TYPE_PARAM_REQUEST_LIST | `uint8` | 21 | MAVLINK_MSG_ID_PARAM_REQUEST_LIST | +| MESSAGE_TYPE_PARAM_SET | `uint8` | 23 | MAVLINK_MSG_ID_PARAM_SET | +| NODE_ID_ALL | `uint8` | 0 | MAV_COMP_ID_ALL | +| PARAM_TYPE_UINT8 | `uint8` | 1 | MAV_PARAM_TYPE_UINT8 | +| PARAM_TYPE_INT64 | `uint8` | 8 | MAV_PARAM_TYPE_INT64 | +| PARAM_TYPE_REAL32 | `uint8` | 9 | MAV_PARAM_TYPE_REAL32 | +| ORB_QUEUE_LENGTH | `uint8` | 4 | | ## Source Message diff --git a/docs/zh/msg_docs/UavcanParameterValue.md b/docs/zh/msg_docs/UavcanParameterValue.md index bca3946c73..52eb0e8661 100644 --- a/docs/zh/msg_docs/UavcanParameterValue.md +++ b/docs/zh/msg_docs/UavcanParameterValue.md @@ -6,7 +6,7 @@ pageClass: is-wide-page UAVCAN-MAVLink parameter bridge response type. -**TOPICS:** uavcan_parametervalue +**TOPICS:** uavcan_parameter_value ## Fields diff --git a/docs/zh/msg_docs/UlogStream.md b/docs/zh/msg_docs/UlogStream.md index b65cd15656..f5e593a801 100644 --- a/docs/zh/msg_docs/UlogStream.md +++ b/docs/zh/msg_docs/UlogStream.md @@ -21,10 +21,10 @@ Message to stream ULog data from the logger. Corresponds to the LOGGING_DATA. ma ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------------------------- | ------- | -- | ------------------------------------------------------------------------------------ | -| FLAGS_NEED_ACK | `uint8` | 1 | if set, this message requires to be acked. | -| ORB_QUEUE_LENGTH | `uint8` | 16 | TODO: we might be able to reduce this if mavlink polled on the topic | +| 参数名 | 类型 | 值 | 描述 | +| ----------------------------------------------------------------------------------------- | ------- | -- | ------------------------------------------------------------------------------------ | +| FLAGS_NEED_ACK | `uint8` | 1 | if set, this message requires to be acked. | +| ORB_QUEUE_LENGTH | `uint8` | 16 | TODO: we might be able to reduce this if mavlink polled on the topic | ## Source Message diff --git a/docs/zh/msg_docs/UlogStreamAck.md b/docs/zh/msg_docs/UlogStreamAck.md index 67aebcb665..3f0f7986fc 100644 --- a/docs/zh/msg_docs/UlogStreamAck.md +++ b/docs/zh/msg_docs/UlogStreamAck.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Ack a previously sent ulog_stream message that had. the NEED_ACK flag set. -**TOPICS:** ulog_streamack +**TOPICS:** ulog_stream_ack ## Fields @@ -17,10 +17,10 @@ Ack a previously sent ulog_stream message that had. the NEED_ACK flag set. ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------------------- | ------- | -- | ------------------------------------------------------------------------------------------------------------------------ | -| ACK_TIMEOUT | `int32` | 50 | timeout waiting for an ack until we retry to send the message [ms] | -| ACK_MAX_TRIES | `int32` | 50 | maximum amount of tries to (re-)send a message, each time waiting ACK_TIMEOUT ms | +| 参数名 | 类型 | 值 | 描述 | +| ----------------------------------------------------------------------------------- | ------- | -- | ------------------------------------------------------------------------------------------------------------------------ | +| ACK_TIMEOUT | `int32` | 50 | timeout waiting for an ack until we retry to send the message [ms] | +| ACK_MAX_TRIES | `int32` | 50 | maximum amount of tries to (re-)send a message, each time waiting ACK_TIMEOUT ms | ## Source Message diff --git a/docs/zh/msg_docs/UnregisterExtComponent.md b/docs/zh/msg_docs/UnregisterExtComponent.md index b32876a9cb..7c5a200981 100644 --- a/docs/zh/msg_docs/UnregisterExtComponent.md +++ b/docs/zh/msg_docs/UnregisterExtComponent.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # UnregisterExtComponent (UORB message) -**TOPICS:** unregister_extcomponent +**TOPICS:** unregister_ext_component ## Fields @@ -18,9 +18,9 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| -------------------------------------------------------------------- | -------- | - | -- | -| MESSAGE_VERSION | `uint32` | 0 | | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------ | -------- | - | -- | +| MESSAGE_VERSION | `uint32` | 0 | | ## Source Message diff --git a/docs/zh/msg_docs/VehicleAirData.md b/docs/zh/msg_docs/VehicleAirData.md index 50c31a329a..d83c9e80fb 100644 --- a/docs/zh/msg_docs/VehicleAirData.md +++ b/docs/zh/msg_docs/VehicleAirData.md @@ -9,7 +9,7 @@ Vehicle air data. Data from the currently selected barometer (plus ambient temperature from the source specified in temperature_source). Includes calculated data such as barometric altitude and air density. -**TOPICS:** vehicle_airdata +**TOPICS:** vehicle_air_data ## Fields diff --git a/docs/zh/msg_docs/VehicleAngularAccelerationSetpoint.md b/docs/zh/msg_docs/VehicleAngularAccelerationSetpoint.md index 42d8113ce3..0e1558d531 100644 --- a/docs/zh/msg_docs/VehicleAngularAccelerationSetpoint.md +++ b/docs/zh/msg_docs/VehicleAngularAccelerationSetpoint.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # VehicleAngularAccelerationSetpoint (UORB message) -**TOPICS:** vehicle_angularacceleration_setpoint +**TOPICS:** vehicle_angular_acceleration_setpoint ## Fields diff --git a/docs/zh/msg_docs/VehicleAngularVelocity.md b/docs/zh/msg_docs/VehicleAngularVelocity.md index 78ac217f48..02eecb244b 100644 --- a/docs/zh/msg_docs/VehicleAngularVelocity.md +++ b/docs/zh/msg_docs/VehicleAngularVelocity.md @@ -17,9 +17,9 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| -------------------------------------------------------------------- | -------- | - | -- | -| MESSAGE_VERSION | `uint32` | 0 | | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------ | -------- | - | -- | +| MESSAGE_VERSION | `uint32` | 0 | | ## Source Message diff --git a/docs/zh/msg_docs/VehicleAttitude.md b/docs/zh/msg_docs/VehicleAttitude.md index 6e02785b7c..2466cd0bd0 100644 --- a/docs/zh/msg_docs/VehicleAttitude.md +++ b/docs/zh/msg_docs/VehicleAttitude.md @@ -20,9 +20,9 @@ This is similar to the mavlink message ATTITUDE_QUATERNION, but for onboard use. ## Constants -| 参数名 | 类型 | 值 | 描述 | -| -------------------------------------------------------------------- | -------- | - | -- | -| MESSAGE_VERSION | `uint32` | 0 | | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------ | -------- | - | -- | +| MESSAGE_VERSION | `uint32` | 0 | | ## Source Message diff --git a/docs/zh/msg_docs/VehicleAttitudeSetpoint.md b/docs/zh/msg_docs/VehicleAttitudeSetpoint.md index 3430b05149..c8966515a1 100644 --- a/docs/zh/msg_docs/VehicleAttitudeSetpoint.md +++ b/docs/zh/msg_docs/VehicleAttitudeSetpoint.md @@ -17,9 +17,9 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| -------------------------------------------------------------------- | -------- | - | -- | -| MESSAGE_VERSION | `uint32` | 1 | | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------ | -------- | - | -- | +| MESSAGE_VERSION | `uint32` | 1 | | ## Source Message diff --git a/docs/zh/msg_docs/VehicleAttitudeSetpointV0.md b/docs/zh/msg_docs/VehicleAttitudeSetpointV0.md index 26f12aefb0..58ea362d0a 100644 --- a/docs/zh/msg_docs/VehicleAttitudeSetpointV0.md +++ b/docs/zh/msg_docs/VehicleAttitudeSetpointV0.md @@ -19,9 +19,9 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| -------------------------------------------------------------------- | -------- | - | -- | -| MESSAGE_VERSION | `uint32` | 0 | | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------ | -------- | - | -- | +| MESSAGE_VERSION | `uint32` | 0 | | ## Source Message diff --git a/docs/zh/msg_docs/VehicleCommand.md b/docs/zh/msg_docs/VehicleCommand.md index 26734bfe93..8e64594216 100644 --- a/docs/zh/msg_docs/VehicleCommand.md +++ b/docs/zh/msg_docs/VehicleCommand.md @@ -1052,6 +1052,20 @@ Actuator configuration command. | 6 | | | ? | | 7 | | | ? | +### VEHICLE_CMD_ESC_REQUEST_EEPROM (312) + +Request EEPROM data from an ESC. + +| Param | 单位 (Units) | Range/Enum | 描述 | +| ----- | ----------------------------- | ---------- | ------------- | +| 1 | | | ESC Index | +| 2 | | | Firmware Type | +| 3 | | | Unused | +| 4 | | | Unused | +| 5 | | | Unused | +| 6 | | | ? | +| 7 | | | ? | + ### VEHICLE_CMD_COMPONENT_ARM_DISARM (400) Arms / Disarms a component. @@ -1444,6 +1458,20 @@ None | 6 | | | ? | | 7 | | | ? | +### VEHICLE_CMD_ESTIMATOR_SENSOR_ENABLE (43006) + +Enable/disable estimator sensor fusion. + +| Param | 单位 (Units) | 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). @@ -1490,34 +1518,34 @@ Change mode by specifying nav_state directly. ### ORBIT_YAW_BEHAVIOUR {#ORBIT_YAW_BEHAVIOUR} -| 参数名 | 类型 | 值 | 描述 | -| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | - | -- | -| ORBIT_YAW_BEHAVIOUR_HOLD_FRONT_TO_CIRCLE_CENTER | `uint8` | 0 | | -| ORBIT_YAW_BEHAVIOUR_HOLD_INITIAL_HEADING | `uint8` | 1 | | -| ORBIT_YAW_BEHAVIOUR_UNCONTROLLED | `uint8` | 2 | | -| ORBIT_YAW_BEHAVIOUR_HOLD_FRONT_TANGENT_TO_CIRCLE | `uint8` | 3 | | -| ORBIT_YAW_BEHAVIOUR_RC_CONTROLLED | `uint8` | 4 | | -| ORBIT_YAW_BEHAVIOUR_UNCHANGED | `uint8` | 5 | | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------- | - | -- | +| ORBIT_YAW_BEHAVIOUR_HOLD_FRONT_TO_CIRCLE_CENTER | `uint8` | 0 | | +| ORBIT_YAW_BEHAVIOUR_HOLD_INITIAL_HEADING | `uint8` | 1 | | +| ORBIT_YAW_BEHAVIOUR_UNCONTROLLED | `uint8` | 2 | | +| ORBIT_YAW_BEHAVIOUR_HOLD_FRONT_TANGENT_TO_CIRCLE | `uint8` | 3 | | +| ORBIT_YAW_BEHAVIOUR_RC_CONTROLLED | `uint8` | 4 | | +| ORBIT_YAW_BEHAVIOUR_UNCHANGED | `uint8` | 5 | | ### VEHICLE_ROI {#VEHICLE_ROI} -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------------------------------------------------------ | ------- | - | -------------------------------------------- | -| VEHICLE_ROI_NONE | `uint8` | 0 | No region of interest. | -| VEHICLE_ROI_WPNEXT | `uint8` | 1 | Point toward next MISSION. | -| VEHICLE_ROI_WPINDEX | `uint8` | 2 | Point toward given MISSION. | -| VEHICLE_ROI_LOCATION | `uint8` | 3 | Point toward fixed location. | -| VEHICLE_ROI_TARGET | `uint8` | 4 | Point toward target. | -| VEHICLE_ROI_ENUM_END | `uint8` | 5 | | +| 参数名 | 类型 | 值 | 描述 | +| ---------------------------------------------------------------------------------------------------------------------- | ------- | - | -------------------------------------------- | +| VEHICLE_ROI_NONE | `uint8` | 0 | No region of interest. | +| VEHICLE_ROI_WPNEXT | `uint8` | 1 | Point toward next MISSION. | +| VEHICLE_ROI_WPINDEX | `uint8` | 2 | Point toward given MISSION. | +| VEHICLE_ROI_LOCATION | `uint8` | 3 | Point toward fixed location. | +| VEHICLE_ROI_TARGET | `uint8` | 4 | Point toward target. | +| VEHICLE_ROI_ENUM_END | `uint8` | 5 | | ### SPEED_TYPE {#SPEED_TYPE} -| 参数名 | 类型 | 值 | 描述 | -| -------------------------------------------------------------------------------------------------------------------------------- | ------- | - | -- | -| SPEED_TYPE_AIRSPEED | `uint8` | 0 | | -| SPEED_TYPE_GROUNDSPEED | `uint8` | 1 | | -| SPEED_TYPE_CLIMB_SPEED | `uint8` | 2 | | -| SPEED_TYPE_DESCEND_SPEED | `uint8` | 3 | | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------------------------------------------------------------------ | ------- | - | -- | +| SPEED_TYPE_AIRSPEED | `uint8` | 0 | | +| SPEED_TYPE_GROUNDSPEED | `uint8` | 1 | | +| SPEED_TYPE_CLIMB_SPEED | `uint8` | 2 | | +| SPEED_TYPE_DESCEND_SPEED | `uint8` | 3 | | ### MAV_MOUNT_MODE {#MAV_MOUNT_MODE} @@ -1526,50 +1554,65 @@ Change mode by specifying nav_state directly. ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ---- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| MESSAGE_VERSION | `uint32` | 0 | | -| PREFLIGHT_CALIBRATION_TEMPERATURE_CALIBRATION | `uint16` | 3 | Param value for VEHICLE_CMD_PREFLIGHT_CALIBRATION to start temperature calibration. | -| VEHICLE_MOUNT_MODE_RETRACT | `uint8` | 0 | Load and keep safe position (Roll,Pitch,Yaw) from permanent memory and stop stabilization. | -| VEHICLE_MOUNT_MODE_NEUTRAL | `uint8` | 1 | Load and keep neutral position (Roll,Pitch,Yaw) from permanent memory. | -| VEHICLE_MOUNT_MODE_MAVLINK_TARGETING | `uint8` | 2 | Load neutral position and start MAVLink Roll,Pitch,Yaw control with stabilization. | -| VEHICLE_MOUNT_MODE_RC_TARGETING | `uint8` | 3 | Load neutral position and start RC Roll,Pitch,Yaw control with stabilization. | -| VEHICLE_MOUNT_MODE_GPS_POINT | `uint8` | 4 | Load neutral position and start to point to Lat,Lon,Alt. | -| VEHICLE_MOUNT_MODE_ENUM_END | `uint8` | 5 | | -| PARACHUTE_ACTION_DISABLE | `uint8` | 0 | | -| PARACHUTE_ACTION_ENABLE | `uint8` | 1 | | -| PARACHUTE_ACTION_RELEASE | `uint8` | 2 | | -| FAILURE_UNIT_SENSOR_GYRO | `uint8` | 0 | | -| FAILURE_UNIT_SENSOR_ACCEL | `uint8` | 1 | | -| FAILURE_UNIT_SENSOR_MAG | `uint8` | 2 | | -| FAILURE_UNIT_SENSOR_BARO | `uint8` | 3 | | -| FAILURE_UNIT_SENSOR_GPS | `uint8` | 4 | | -| FAILURE_UNIT_SENSOR_OPTICAL_FLOW | `uint8` | 5 | | -| FAILURE_UNIT_SENSOR_VIO | `uint8` | 6 | | -| FAILURE_UNIT_SENSOR_DISTANCE_SENSOR | `uint8` | 7 | | -| FAILURE_UNIT_SENSOR_AIRSPEED | `uint8` | 8 | | -| FAILURE_UNIT_SYSTEM_BATTERY | `uint8` | 100 | | -| FAILURE_UNIT_SYSTEM_MOTOR | `uint8` | 101 | | -| FAILURE_UNIT_SYSTEM_SERVO | `uint8` | 102 | | -| FAILURE_UNIT_SYSTEM_AVOIDANCE | `uint8` | 103 | | -| FAILURE_UNIT_SYSTEM_RC_SIGNAL | `uint8` | 104 | | -| FAILURE_UNIT_SYSTEM_MAVLINK_SIGNAL | `uint8` | 105 | | -| FAILURE_TYPE_OK | `uint8` | 0 | | -| FAILURE_TYPE_OFF | `uint8` | 1 | | -| FAILURE_TYPE_STUCK | `uint8` | 2 | | -| FAILURE_TYPE_GARBAGE | `uint8` | 3 | | -| FAILURE_TYPE_WRONG | `uint8` | 4 | | -| FAILURE_TYPE_SLOW | `uint8` | 5 | | -| FAILURE_TYPE_DELAYED | `uint8` | 6 | | -| FAILURE_TYPE_INTERMITTENT | `uint8` | 7 | | -| ARMING_ACTION_DISARM | `int8` | 0 | | -| ARMING_ACTION_ARM | `int8` | 1 | | -| GRIPPER_ACTION_RELEASE | `uint8` | 0 | | -| GRIPPER_ACTION_GRAB | `uint8` | 1 | | -| SAFETY_OFF | `uint8` | 0 | | -| SAFETY_ON | `uint8` | 1 | | -| ORB_QUEUE_LENGTH | `uint8` | 8 | | -| COMPONENT_MODE_EXECUTOR_START | `uint16` | 1000 | | +| 参数名 | 类型 | 值 | 描述 | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ---- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| MESSAGE_VERSION | `uint32` | 0 | | +| PREFLIGHT_CALIBRATION_TEMPERATURE_CALIBRATION | `uint16` | 3 | Param value for VEHICLE_CMD_PREFLIGHT_CALIBRATION to start temperature calibration. | +| FUSION_SOURCE_GPS | `uint8` | 0 | GNSS (EKF2_GPS{i}\_CTRL, use instance param) | +| FUSION_SOURCE_OF | `uint8` | 1 | Optical Flow (EKF2_OF_CTRL) | +| FUSION_SOURCE_EV | `uint8` | 2 | External Vision (EKF2_EV_CTRL) | +| FUSION_SOURCE_AGP | `uint8` | 3 | Auxiliary Global Position (EKF2_AGP{i}\_CTRL, use instance param) | +| FUSION_SOURCE_BARO | `uint8` | 4 | Barometer (EKF2_BARO_CTRL) | +| FUSION_SOURCE_RNG | `uint8` | 5 | Range Finder (EKF2_RNG_CTRL) | +| FUSION_SOURCE_MAG | `uint8` | 6 | Magnetometer (EKF2_MAG_TYPE) | +| FUSION_SOURCE_ASPD | `uint8` | 7 | Airspeed (EKF2_ARSP_THR) | +| FUSION_SOURCE_RNGBCN | `uint8` | 8 | Ranging Beacon | +| VEHICLE_MOUNT_MODE_RETRACT | `uint8` | 0 | Load and keep safe position (Roll,Pitch,Yaw) from permanent memory and stop stabilization. | +| VEHICLE_MOUNT_MODE_NEUTRAL | `uint8` | 1 | Load and keep neutral position (Roll,Pitch,Yaw) from permanent memory. | +| VEHICLE_MOUNT_MODE_MAVLINK_TARGETING | `uint8` | 2 | Load neutral position and start MAVLink Roll,Pitch,Yaw control with stabilization. | +| VEHICLE_MOUNT_MODE_RC_TARGETING | `uint8` | 3 | Load neutral position and start RC Roll,Pitch,Yaw control with stabilization. | +| VEHICLE_MOUNT_MODE_GPS_POINT | `uint8` | 4 | Load neutral position and start to point to Lat,Lon,Alt. | +| VEHICLE_MOUNT_MODE_ENUM_END | `uint8` | 5 | | +| ACTUATOR_CONFIGURATION_NONE | `uint8` | 0 | Do nothing. | +| ACTUATOR_CONFIGURATION_BEEP | `uint8` | 1 | Command the actuator to beep now. | +| ACTUATOR_CONFIGURATION_3D_MODE_ON | `uint8` | 2 | Permanently set the actuator (ESC) to 3D mode (reversible thrust). | +| ACTUATOR_CONFIGURATION_3D_MODE_OFF | `uint8` | 3 | Permanently set the actuator (ESC) to non 3D mode (non-reversible thrust). | +| ACTUATOR_CONFIGURATION_SPIN_DIRECTION1 | `uint8` | 4 | Permanently set the actuator (ESC) to spin direction 1 (which can be clockwise or counter-clockwise). | +| ACTUATOR_CONFIGURATION_SPIN_DIRECTION2 | `uint8` | 5 | Permanently set the actuator (ESC) to spin direction 2 (opposite of direction 1). | +| PARACHUTE_ACTION_DISABLE | `uint8` | 0 | | +| PARACHUTE_ACTION_ENABLE | `uint8` | 1 | | +| PARACHUTE_ACTION_RELEASE | `uint8` | 2 | | +| FAILURE_UNIT_SENSOR_GYRO | `uint8` | 0 | | +| FAILURE_UNIT_SENSOR_ACCEL | `uint8` | 1 | | +| FAILURE_UNIT_SENSOR_MAG | `uint8` | 2 | | +| FAILURE_UNIT_SENSOR_BARO | `uint8` | 3 | | +| FAILURE_UNIT_SENSOR_GPS | `uint8` | 4 | | +| FAILURE_UNIT_SENSOR_OPTICAL_FLOW | `uint8` | 5 | | +| FAILURE_UNIT_SENSOR_VIO | `uint8` | 6 | | +| FAILURE_UNIT_SENSOR_DISTANCE_SENSOR | `uint8` | 7 | | +| FAILURE_UNIT_SENSOR_AIRSPEED | `uint8` | 8 | | +| FAILURE_UNIT_SYSTEM_BATTERY | `uint8` | 100 | | +| FAILURE_UNIT_SYSTEM_MOTOR | `uint8` | 101 | | +| FAILURE_UNIT_SYSTEM_SERVO | `uint8` | 102 | | +| FAILURE_UNIT_SYSTEM_AVOIDANCE | `uint8` | 103 | | +| FAILURE_UNIT_SYSTEM_RC_SIGNAL | `uint8` | 104 | | +| FAILURE_UNIT_SYSTEM_MAVLINK_SIGNAL | `uint8` | 105 | | +| FAILURE_TYPE_OK | `uint8` | 0 | | +| FAILURE_TYPE_OFF | `uint8` | 1 | | +| FAILURE_TYPE_STUCK | `uint8` | 2 | | +| FAILURE_TYPE_GARBAGE | `uint8` | 3 | | +| FAILURE_TYPE_WRONG | `uint8` | 4 | | +| FAILURE_TYPE_SLOW | `uint8` | 5 | | +| FAILURE_TYPE_DELAYED | `uint8` | 6 | | +| FAILURE_TYPE_INTERMITTENT | `uint8` | 7 | | +| ARMING_ACTION_DISARM | `int8` | 0 | | +| ARMING_ACTION_ARM | `int8` | 1 | | +| GRIPPER_ACTION_RELEASE | `uint8` | 0 | | +| GRIPPER_ACTION_GRAB | `uint8` | 1 | | +| SAFETY_OFF | `uint8` | 0 | | +| SAFETY_ON | `uint8` | 1 | | +| ORB_QUEUE_LENGTH | `uint8` | 8 | | +| COMPONENT_MODE_EXECUTOR_START | `uint16` | 1000 | | ## Source Message @@ -1661,6 +1704,7 @@ uint16 VEHICLE_CMD_GIMBAL_DEVICE_INFORMATION = 283 # Command to ask information uint16 VEHICLE_CMD_MISSION_START = 300 # Start running a mission. |first_item: the first mission item to run|last_item: the last mission item to run (after this item is run, the mission ends)| uint16 VEHICLE_CMD_ACTUATOR_TEST = 310 # Actuator testing command. |[@range -1,1] value|[s] timeout|Unused|Unused|output function| uint16 VEHICLE_CMD_CONFIGURE_ACTUATOR = 311 # Actuator configuration command. |configuration|Unused|Unused|Unused|output function| +uint16 VEHICLE_CMD_ESC_REQUEST_EEPROM = 312 # Request EEPROM data from an ESC. |ESC Index|Firmware Type|Unused|Unused|Unused| uint16 VEHICLE_CMD_COMPONENT_ARM_DISARM = 400 # Arms / Disarms a component. |1 to arm, 0 to disarm. uint16 VEHICLE_CMD_RUN_PREARM_CHECKS = 401 # Instructs a target system to run pre-arm checks. uint16 VEHICLE_CMD_INJECT_FAILURE = 420 # Inject artificial failure for testing purposes. @@ -1690,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). @@ -1710,6 +1765,13 @@ uint8 VEHICLE_ROI_LOCATION = 3 # Point toward fixed location. uint8 VEHICLE_ROI_TARGET = 4 # Point toward target. uint8 VEHICLE_ROI_ENUM_END = 5 +uint8 ACTUATOR_CONFIGURATION_NONE = 0 # Do nothing. +uint8 ACTUATOR_CONFIGURATION_BEEP = 1 # Command the actuator to beep now. +uint8 ACTUATOR_CONFIGURATION_3D_MODE_ON = 2 # Permanently set the actuator (ESC) to 3D mode (reversible thrust). +uint8 ACTUATOR_CONFIGURATION_3D_MODE_OFF = 3 # Permanently set the actuator (ESC) to non 3D mode (non-reversible thrust). +uint8 ACTUATOR_CONFIGURATION_SPIN_DIRECTION1 = 4 # Permanently set the actuator (ESC) to spin direction 1 (which can be clockwise or counter-clockwise). +uint8 ACTUATOR_CONFIGURATION_SPIN_DIRECTION2 = 5 # Permanently set the actuator (ESC) to spin direction 2 (opposite of direction 1). + uint8 PARACHUTE_ACTION_DISABLE = 0 uint8 PARACHUTE_ACTION_ENABLE = 1 uint8 PARACHUTE_ACTION_RELEASE = 2 diff --git a/docs/zh/msg_docs/VehicleCommandAck.md b/docs/zh/msg_docs/VehicleCommandAck.md index 1eb26aa95a..0959b418ee 100644 --- a/docs/zh/msg_docs/VehicleCommandAck.md +++ b/docs/zh/msg_docs/VehicleCommandAck.md @@ -4,42 +4,55 @@ pageClass: is-wide-page # VehicleCommandAck (UORB message) -Vehicle Command Ackonwledgement uORB message. Used for acknowledging the vehicle command being received. Follows the MAVLink COMMAND_ACK message definition. +Vehicle Command Acknowledgement uORB message. -**TOPICS:** vehicle_commandack +Used for acknowledging the vehicle command being received. +Follows the MAVLink COMMAND_ACK message definition + +**TOPICS:** vehicle_command_ack ## Fields -| 参数名 | 类型 | Unit [Frame] | Range/Enum | 描述 | -| ------------------------------------- | -------- | ---------------------------------------------------------------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| timestamp | `uint64` | | | time since system start (microseconds) | -| command | `uint32` | | | Command that is being acknowledged | -| result | `uint8` | | | Command result | -| result_param1 | `uint8` | | | Also used as progress[%], it can be set with the reason why the command was denied, or the progress percentage when result is MAV_RESULT_IN_PROGRESS | -| result_param2 | `int32` | | | Additional parameter of the result, example: which parameter of MAV_CMD_NAV_WAYPOINT caused it to be denied. | -| target_system | `uint8` | | | | -| target_component | `uint16` | | | Target component / mode executor | -| from_external | `bool` | | | Indicates if the command came from an external source | +| 参数名 | 类型 | Unit [Frame] | Range/Enum | 描述 | +| ------------------------------------- | -------- | ------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| timestamp | `uint64` | us | | time since system start | +| command | `uint32` | | | Command that is being acknowledged | +| result | `uint8` | | [VEHICLE_CMD_RESULT](#VEHICLE_CMD_RESULT) | Command result | +| result_param1 | `uint8` | | | Can be set with the reason why the command was denied, or the progress percentage when result is MAV_RESULT_IN_PROGRESS (%) | +| result_param2 | `int32` | enum ARM_AUTH_DENIED_REASON | | Additional parameter of the result, example: which parameter of MAV_CMD_NAV_WAYPOINT caused it to be denied, or what ARM_AUTH_DENIED_REASON | +| target_system | `uint8` | | | Target system | +| target_component | `uint16` | | | Target component / mode executor | +| from_external | `bool` | | | Indicates if the command came from an external source | + +## Enums + +### VEHICLE_CMD_RESULT {#VEHICLE_CMD_RESULT} + +| 参数名 | 类型 | 值 | 描述 | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | - | ------------------------------------------------------------------------- | +| VEHICLE_CMD_RESULT_ACCEPTED | `uint8` | 0 | Command ACCEPTED and EXECUTED | +| VEHICLE_CMD_RESULT_TEMPORARILY_REJECTED | `uint8` | 1 | Command TEMPORARY REJECTED/DENIED | +| VEHICLE_CMD_RESULT_DENIED | `uint8` | 2 | Command PERMANENTLY DENIED | +| VEHICLE_CMD_RESULT_UNSUPPORTED | `uint8` | 3 | Command UNKNOWN/UNSUPPORTED | +| VEHICLE_CMD_RESULT_FAILED | `uint8` | 4 | Command executed, but failed | +| VEHICLE_CMD_RESULT_IN_PROGRESS | `uint8` | 5 | Command being executed | +| VEHICLE_CMD_RESULT_CANCELLED | `uint8` | 6 | Command Canceled | +| VEHICLE_CMD_RESULT_COMMAND_LONG_ONLY | `uint8` | 7 | Command is only accepted when sent as a COMMAND_LONG | +| VEHICLE_CMD_RESULT_COMMAND_INT_ONLY | `uint8` | 8 | Command is only accepted when sent as a COMMAND_INT | +| VEHICLE_CMD_RESULT_UNSUPPORTED_MAV_FRAME | `uint8` | 9 | Command does not support specified frame | ## Constants -| 参数名 | 类型 | 值 | 描述 | -| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | - | --------------------------------- | -| MESSAGE_VERSION | `uint32` | 0 | | -| VEHICLE_CMD_RESULT_ACCEPTED | `uint8` | 0 | Command ACCEPTED and EXECUTED | -| VEHICLE_CMD_RESULT_TEMPORARILY_REJECTED | `uint8` | 1 | Command TEMPORARY REJECTED/DENIED | -| VEHICLE_CMD_RESULT_DENIED | `uint8` | 2 | Command PERMANENTLY DENIED | -| VEHICLE_CMD_RESULT_UNSUPPORTED | `uint8` | 3 | Command UNKNOWN/UNSUPPORTED | -| VEHICLE_CMD_RESULT_FAILED | `uint8` | 4 | Command executed, but failed | -| VEHICLE_CMD_RESULT_IN_PROGRESS | `uint8` | 5 | Command being executed | -| VEHICLE_CMD_RESULT_CANCELLED | `uint8` | 6 | Command Canceled | -| ARM_AUTH_DENIED_REASON_GENERIC | `uint16` | 0 | | -| ARM_AUTH_DENIED_REASON_NONE | `uint16` | 1 | | -| ARM_AUTH_DENIED_REASON_INVALID_WAYPOINT | `uint16` | 2 | | -| ARM_AUTH_DENIED_REASON_TIMEOUT | `uint16` | 3 | | -| ARM_AUTH_DENIED_REASON_AIRSPACE_IN_USE | `uint16` | 4 | | -| ARM_AUTH_DENIED_REASON_BAD_WEATHER | `uint16` | 5 | | -| ORB_QUEUE_LENGTH | `uint8` | 8 | | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | - | -- | +| MESSAGE_VERSION | `uint32` | 1 | | +| ORB_QUEUE_LENGTH | `uint8` | 8 | | +| ARM_AUTH_DENIED_REASON_GENERIC | `uint16` | 0 | | +| ARM_AUTH_DENIED_REASON_NONE | `uint16` | 1 | | +| ARM_AUTH_DENIED_REASON_INVALID_WAYPOINT | `uint16` | 2 | | +| ARM_AUTH_DENIED_REASON_TIMEOUT | `uint16` | 3 | | +| ARM_AUTH_DENIED_REASON_AIRSPACE_IN_USE | `uint16` | 4 | | +| ARM_AUTH_DENIED_REASON_BAD_WEATHER | `uint16` | 5 | | ## Source Message @@ -49,23 +62,35 @@ Vehicle Command Ackonwledgement uORB message. Used for acknowledging the vehicle Click here to see original file ```c -# Vehicle Command Ackonwledgement uORB message. +# Vehicle Command Acknowledgement uORB message. +# # Used for acknowledging the vehicle command being received. # Follows the MAVLink COMMAND_ACK message definition -uint32 MESSAGE_VERSION = 0 +uint32 MESSAGE_VERSION = 1 -uint64 timestamp # time since system start (microseconds) +uint64 timestamp # [us] time since system start -# Result cases. This follows the MAVLink MAV_RESULT enum definition -uint8 VEHICLE_CMD_RESULT_ACCEPTED = 0 # Command ACCEPTED and EXECUTED | -uint8 VEHICLE_CMD_RESULT_TEMPORARILY_REJECTED = 1 # Command TEMPORARY REJECTED/DENIED | -uint8 VEHICLE_CMD_RESULT_DENIED = 2 # Command PERMANENTLY DENIED | -uint8 VEHICLE_CMD_RESULT_UNSUPPORTED = 3 # Command UNKNOWN/UNSUPPORTED | -uint8 VEHICLE_CMD_RESULT_FAILED = 4 # Command executed, but failed | -uint8 VEHICLE_CMD_RESULT_IN_PROGRESS = 5 # Command being executed | -uint8 VEHICLE_CMD_RESULT_CANCELLED = 6 # Command Canceled +uint8 ORB_QUEUE_LENGTH = 8 +uint32 command # [-] Command that is being acknowledged + +uint8 result # [@enum VEHICLE_CMD_RESULT] Command result +# VEHICLE_CMD_RESULT Result cases. Follows the MAVLink MAV_RESULT enum definition +uint8 VEHICLE_CMD_RESULT_ACCEPTED = 0 # Command ACCEPTED and EXECUTED +uint8 VEHICLE_CMD_RESULT_TEMPORARILY_REJECTED = 1 # Command TEMPORARY REJECTED/DENIED +uint8 VEHICLE_CMD_RESULT_DENIED = 2 # Command PERMANENTLY DENIED +uint8 VEHICLE_CMD_RESULT_UNSUPPORTED = 3 # Command UNKNOWN/UNSUPPORTED +uint8 VEHICLE_CMD_RESULT_FAILED = 4 # Command executed, but failed +uint8 VEHICLE_CMD_RESULT_IN_PROGRESS = 5 # Command being executed +uint8 VEHICLE_CMD_RESULT_CANCELLED = 6 # Command Canceled +uint8 VEHICLE_CMD_RESULT_COMMAND_LONG_ONLY = 7 # Command is only accepted when sent as a COMMAND_LONG +uint8 VEHICLE_CMD_RESULT_COMMAND_INT_ONLY = 8 # Command is only accepted when sent as a COMMAND_INT +uint8 VEHICLE_CMD_RESULT_UNSUPPORTED_MAV_FRAME = 9 # Command does not support specified frame + +uint8 result_param1 # [-] Can be set with the reason why the command was denied, or the progress percentage when result is MAV_RESULT_IN_PROGRESS (%) + +int32 result_param2 # [enum ARM_AUTH_DENIED_REASON] Additional parameter of the result, example: which parameter of MAV_CMD_NAV_WAYPOINT caused it to be denied, or what ARM_AUTH_DENIED_REASON # Arming denied specific cases uint16 ARM_AUTH_DENIED_REASON_GENERIC = 0 uint16 ARM_AUTH_DENIED_REASON_NONE = 1 @@ -74,16 +99,10 @@ uint16 ARM_AUTH_DENIED_REASON_TIMEOUT = 3 uint16 ARM_AUTH_DENIED_REASON_AIRSPACE_IN_USE = 4 uint16 ARM_AUTH_DENIED_REASON_BAD_WEATHER = 5 -uint8 ORB_QUEUE_LENGTH = 8 +uint8 target_system # [-] Target system +uint16 target_component # Target component / mode executor -uint32 command # Command that is being acknowledged -uint8 result # Command result -uint8 result_param1 # Also used as progress[%], it can be set with the reason why the command was denied, or the progress percentage when result is MAV_RESULT_IN_PROGRESS -int32 result_param2 # Additional parameter of the result, example: which parameter of MAV_CMD_NAV_WAYPOINT caused it to be denied. -uint8 target_system -uint16 target_component # Target component / mode executor - -bool from_external # Indicates if the command came from an external source +bool from_external # Indicates if the command came from an external source ``` ::: diff --git a/docs/zh/msg_docs/VehicleCommandAckV0.md b/docs/zh/msg_docs/VehicleCommandAckV0.md new file mode 100644 index 0000000000..a7b7442843 --- /dev/null +++ b/docs/zh/msg_docs/VehicleCommandAckV0.md @@ -0,0 +1,89 @@ +--- +pageClass: is-wide-page +--- + +# VehicleCommandAckV0 (UORB message) + +Vehicle Command Ackonwledgement uORB message. Used for acknowledging the vehicle command being received. Follows the MAVLink COMMAND_ACK message definition. + +**TOPICS:** vehicle_command_ack_v0 + +## Fields + +| 参数名 | 类型 | Unit [Frame] | Range/Enum | 描述 | +| ------------------------------------- | -------- | ---------------------------------------------------------------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| timestamp | `uint64` | | | time since system start (microseconds) | +| command | `uint32` | | | Command that is being acknowledged | +| result | `uint8` | | | Command result | +| result_param1 | `uint8` | | | Also used as progress[%], it can be set with the reason why the command was denied, or the progress percentage when result is MAV_RESULT_IN_PROGRESS | +| result_param2 | `int32` | | | Additional parameter of the result, example: which parameter of MAV_CMD_NAV_WAYPOINT caused it to be denied. | +| target_system | `uint8` | | | | +| target_component | `uint16` | | | Target component / mode executor | +| from_external | `bool` | | | Indicates if the command came from an external source | + +## Constants + +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | - | --------------------------------- | +| MESSAGE_VERSION | `uint32` | 0 | | +| VEHICLE_CMD_RESULT_ACCEPTED | `uint8` | 0 | Command ACCEPTED and EXECUTED | +| VEHICLE_CMD_RESULT_TEMPORARILY_REJECTED | `uint8` | 1 | Command TEMPORARY REJECTED/DENIED | +| VEHICLE_CMD_RESULT_DENIED | `uint8` | 2 | Command PERMANENTLY DENIED | +| VEHICLE_CMD_RESULT_UNSUPPORTED | `uint8` | 3 | Command UNKNOWN/UNSUPPORTED | +| VEHICLE_CMD_RESULT_FAILED | `uint8` | 4 | Command executed, but failed | +| VEHICLE_CMD_RESULT_IN_PROGRESS | `uint8` | 5 | Command being executed | +| VEHICLE_CMD_RESULT_CANCELLED | `uint8` | 6 | Command Canceled | +| ARM_AUTH_DENIED_REASON_GENERIC | `uint16` | 0 | | +| ARM_AUTH_DENIED_REASON_NONE | `uint16` | 1 | | +| ARM_AUTH_DENIED_REASON_INVALID_WAYPOINT | `uint16` | 2 | | +| ARM_AUTH_DENIED_REASON_TIMEOUT | `uint16` | 3 | | +| ARM_AUTH_DENIED_REASON_AIRSPACE_IN_USE | `uint16` | 4 | | +| ARM_AUTH_DENIED_REASON_BAD_WEATHER | `uint16` | 5 | | +| ORB_QUEUE_LENGTH | `uint8` | 8 | | + +## Source Message + +[Source file (GitHub)](https://github.com/PX4/PX4-Autopilot/blob/main/msg/px4_msgs_old/msg/VehicleCommandAckV0.msg) + +:::details +Click here to see original file + +```c +# Vehicle Command Ackonwledgement uORB message. +# Used for acknowledging the vehicle command being received. +# Follows the MAVLink COMMAND_ACK message definition + +uint32 MESSAGE_VERSION = 0 + +uint64 timestamp # time since system start (microseconds) + +# Result cases. This follows the MAVLink MAV_RESULT enum definition +uint8 VEHICLE_CMD_RESULT_ACCEPTED = 0 # Command ACCEPTED and EXECUTED | +uint8 VEHICLE_CMD_RESULT_TEMPORARILY_REJECTED = 1 # Command TEMPORARY REJECTED/DENIED | +uint8 VEHICLE_CMD_RESULT_DENIED = 2 # Command PERMANENTLY DENIED | +uint8 VEHICLE_CMD_RESULT_UNSUPPORTED = 3 # Command UNKNOWN/UNSUPPORTED | +uint8 VEHICLE_CMD_RESULT_FAILED = 4 # Command executed, but failed | +uint8 VEHICLE_CMD_RESULT_IN_PROGRESS = 5 # Command being executed | +uint8 VEHICLE_CMD_RESULT_CANCELLED = 6 # Command Canceled + +# Arming denied specific cases +uint16 ARM_AUTH_DENIED_REASON_GENERIC = 0 +uint16 ARM_AUTH_DENIED_REASON_NONE = 1 +uint16 ARM_AUTH_DENIED_REASON_INVALID_WAYPOINT = 2 +uint16 ARM_AUTH_DENIED_REASON_TIMEOUT = 3 +uint16 ARM_AUTH_DENIED_REASON_AIRSPACE_IN_USE = 4 +uint16 ARM_AUTH_DENIED_REASON_BAD_WEATHER = 5 + +uint8 ORB_QUEUE_LENGTH = 8 + +uint32 command # Command that is being acknowledged +uint8 result # Command result +uint8 result_param1 # Also used as progress[%], it can be set with the reason why the command was denied, or the progress percentage when result is MAV_RESULT_IN_PROGRESS +int32 result_param2 # Additional parameter of the result, example: which parameter of MAV_CMD_NAV_WAYPOINT caused it to be denied. +uint8 target_system +uint16 target_component # Target component / mode executor + +bool from_external # Indicates if the command came from an external source +``` + +::: diff --git a/docs/zh/msg_docs/VehicleControlMode.md b/docs/zh/msg_docs/VehicleControlMode.md index dcc5eca11b..bf9df815b9 100644 --- a/docs/zh/msg_docs/VehicleControlMode.md +++ b/docs/zh/msg_docs/VehicleControlMode.md @@ -29,9 +29,9 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| -------------------------------------------------------------------- | -------- | - | -- | -| MESSAGE_VERSION | `uint32` | 0 | | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------ | -------- | - | -- | +| MESSAGE_VERSION | `uint32` | 0 | | ## Source Message diff --git a/docs/zh/msg_docs/VehicleGlobalPosition.md b/docs/zh/msg_docs/VehicleGlobalPosition.md index 9bb2b4b2c0..c557dbee94 100644 --- a/docs/zh/msg_docs/VehicleGlobalPosition.md +++ b/docs/zh/msg_docs/VehicleGlobalPosition.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Fused global position in WGS84. This struct contains global position estimation. It is not the raw GPS. measurement (@see vehicle_gps_position). This topic is usually published by the position. estimator, which will take more sources of information into account than just GPS,. e.g. control inputs of the vehicle in a Kalman-filter implementation. -**TOPICS:** vehicle_global_position vehicle_global_position_groundtruth external_ins_global_position estimator_global_position aux_global_position +**TOPICS:** vehicle_global_position vehicle_global_position_groundtruth external_ins_global_position estimator_global_position ## Fields @@ -33,9 +33,9 @@ Fused global position in WGS84. This struct contains global position estimation. ## Constants -| 参数名 | 类型 | 值 | 描述 | -| -------------------------------------------------------------------- | -------- | - | -- | -| MESSAGE_VERSION | `uint32` | 0 | | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------ | -------- | - | -- | +| MESSAGE_VERSION | `uint32` | 0 | | ## Source Message @@ -81,7 +81,6 @@ bool dead_reckoning # True if this position is estimated through dead-reckoning # TOPICS vehicle_global_position vehicle_global_position_groundtruth external_ins_global_position # TOPICS estimator_global_position -# TOPICS aux_global_position ``` ::: diff --git a/docs/zh/msg_docs/VehicleGlobalPositionV0.md b/docs/zh/msg_docs/VehicleGlobalPositionV0.md new file mode 100644 index 0000000000..a690e23ee2 --- /dev/null +++ b/docs/zh/msg_docs/VehicleGlobalPositionV0.md @@ -0,0 +1,86 @@ +--- +pageClass: is-wide-page +--- + +# VehicleGlobalPositionV0 (UORB message) + +Fused global position in WGS84. This struct contains global position estimation. It is not the raw GPS. measurement (@see vehicle_gps_position). This topic is usually published by the position. estimator, which will take more sources of information into account than just GPS,. e.g. control inputs of the vehicle in a Kalman-filter implementation. + +**TOPICS:** vehicle_global_position vehicle_global_position_groundtruth external_ins_global_position estimator_global_position + +## Fields + +| 参数名 | 类型 | Unit [Frame] | Range/Enum | 描述 | +| ------------------------------------------------------------------------------------ | --------- | ---------------------------------------------------------------- | ---------- | ---------------------------------------------------------------------------- | +| timestamp | `uint64` | | | time since system start (microseconds) | +| timestamp_sample | `uint64` | | | the timestamp of the raw data (microseconds) | +| lat | `float64` | | | Latitude, (degrees) | +| lon | `float64` | | | Longitude, (degrees) | +| alt | `float32` | | | Altitude AMSL, (meters) | +| alt_ellipsoid | `float32` | | | Altitude above ellipsoid, (meters) | +| lat_lon_valid | `bool` | | | | +| alt_valid | `bool` | | | | +| delta_alt | `float32` | | | Reset delta for altitude | +| delta_terrain | `float32` | | | Reset delta for terrain | +| lat_lon_reset_counter | `uint8` | | | Counter for reset events on horizontal position coordinates | +| alt_reset_counter | `uint8` | | | Counter for reset events on altitude | +| terrain_reset_counter | `uint8` | | | Counter for reset events on terrain | +| eph | `float32` | | | Standard deviation of horizontal position error, (metres) | +| epv | `float32` | | | Standard deviation of vertical position error, (metres) | +| terrain_alt | `float32` | | | Terrain altitude WGS84, (metres) | +| terrain_alt_valid | `bool` | | | Terrain altitude estimate is valid | +| dead_reckoning | `bool` | | | True if this position is estimated through dead-reckoning | + +## Constants + +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------ | -------- | - | -- | +| MESSAGE_VERSION | `uint32` | 0 | | + +## Source Message + +[Source file (GitHub)](https://github.com/PX4/PX4-Autopilot/blob/main/msg/px4_msgs_old/msg/VehicleGlobalPositionV0.msg) + +:::details +Click here to see original file + +```c +# Fused global position in WGS84. +# This struct contains global position estimation. It is not the raw GPS +# measurement (@see vehicle_gps_position). This topic is usually published by the position +# estimator, which will take more sources of information into account than just GPS, +# e.g. control inputs of the vehicle in a Kalman-filter implementation. +# + +uint32 MESSAGE_VERSION = 0 + +uint64 timestamp # time since system start (microseconds) +uint64 timestamp_sample # the timestamp of the raw data (microseconds) + +float64 lat # Latitude, (degrees) +float64 lon # Longitude, (degrees) +float32 alt # Altitude AMSL, (meters) +float32 alt_ellipsoid # Altitude above ellipsoid, (meters) + +bool lat_lon_valid +bool alt_valid + +float32 delta_alt # Reset delta for altitude +float32 delta_terrain # Reset delta for terrain +uint8 lat_lon_reset_counter # Counter for reset events on horizontal position coordinates +uint8 alt_reset_counter # Counter for reset events on altitude +uint8 terrain_reset_counter # Counter for reset events on terrain + +float32 eph # Standard deviation of horizontal position error, (metres) +float32 epv # Standard deviation of vertical position error, (metres) + +float32 terrain_alt # Terrain altitude WGS84, (metres) +bool terrain_alt_valid # Terrain altitude estimate is valid + +bool dead_reckoning # True if this position is estimated through dead-reckoning + +# TOPICS vehicle_global_position vehicle_global_position_groundtruth external_ins_global_position +# TOPICS estimator_global_position +``` + +::: diff --git a/docs/zh/msg_docs/VehicleImu.md b/docs/zh/msg_docs/VehicleImu.md index 06af1d6d58..35a7ac7636 100644 --- a/docs/zh/msg_docs/VehicleImu.md +++ b/docs/zh/msg_docs/VehicleImu.md @@ -27,11 +27,11 @@ IMU readings in SI-unit form. ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ---------------------------------------------------------- | ------- | - | -- | -| CLIPPING_X | `uint8` | 1 | | -| CLIPPING_Y | `uint8` | 2 | | -| CLIPPING_Z | `uint8` | 4 | | +| 参数名 | 类型 | 值 | 描述 | +| -------------------------------------------------------- | ------- | - | -- | +| CLIPPING_X | `uint8` | 1 | | +| CLIPPING_Y | `uint8` | 2 | | +| CLIPPING_Z | `uint8` | 4 | | ## Source Message diff --git a/docs/zh/msg_docs/VehicleImuStatus.md b/docs/zh/msg_docs/VehicleImuStatus.md index 28e0c067f0..3fa34c0f56 100644 --- a/docs/zh/msg_docs/VehicleImuStatus.md +++ b/docs/zh/msg_docs/VehicleImuStatus.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # VehicleImuStatus (UORB message) -**TOPICS:** vehicle_imustatus +**TOPICS:** vehicle_imu_status ## Fields diff --git a/docs/zh/msg_docs/VehicleLandDetected.md b/docs/zh/msg_docs/VehicleLandDetected.md index d213899155..2a6ac241b0 100644 --- a/docs/zh/msg_docs/VehicleLandDetected.md +++ b/docs/zh/msg_docs/VehicleLandDetected.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # VehicleLandDetected (UORB message) -**TOPICS:** vehicle_landdetected +**TOPICS:** vehicle_land_detected ## Fields @@ -26,9 +26,9 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| -------------------------------------------------------------------- | -------- | - | -- | -| MESSAGE_VERSION | `uint32` | 0 | | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------ | -------- | - | -- | +| MESSAGE_VERSION | `uint32` | 0 | | ## Source Message diff --git a/docs/zh/msg_docs/VehicleLocalPosition.md b/docs/zh/msg_docs/VehicleLocalPosition.md index 6fbe4a2104..b87b0f3dcb 100644 --- a/docs/zh/msg_docs/VehicleLocalPosition.md +++ b/docs/zh/msg_docs/VehicleLocalPosition.md @@ -68,12 +68,12 @@ Fused local position in NED. The coordinate system origin is the vehicle positio ## Constants -| 参数名 | 类型 | 值 | 描述 | -| -------------------------------------------------------------------------------------------------------------------------------- | -------- | - | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| MESSAGE_VERSION | `uint32` | 1 | | -| DIST_BOTTOM_SENSOR_NONE | `uint8` | 0 | | -| DIST_BOTTOM_SENSOR_RANGE | `uint8` | 1 | (1 << 0) a range sensor is used to estimate dist_bottom field | -| DIST_BOTTOM_SENSOR_FLOW | `uint8` | 2 | (1 << 1) a flow sensor is used to estimate dist_bottom field (mostly fixed-wing use case) | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------------------------------------------------------------------ | -------- | - | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| MESSAGE_VERSION | `uint32` | 1 | | +| DIST_BOTTOM_SENSOR_NONE | `uint8` | 0 | | +| DIST_BOTTOM_SENSOR_RANGE | `uint8` | 1 | (1 << 0) a range sensor is used to estimate dist_bottom field | +| DIST_BOTTOM_SENSOR_FLOW | `uint8` | 2 | (1 << 1) a flow sensor is used to estimate dist_bottom field (mostly fixed-wing use case) | ## Source Message diff --git a/docs/zh/msg_docs/VehicleLocalPositionSetpoint.md b/docs/zh/msg_docs/VehicleLocalPositionSetpoint.md index 3f1b87450c..0c71f46ed5 100644 --- a/docs/zh/msg_docs/VehicleLocalPositionSetpoint.md +++ b/docs/zh/msg_docs/VehicleLocalPositionSetpoint.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Local position setpoint in NED frame. Telemetry of PID position controller to monitor tracking. NaN means the state was not controlled. -**TOPICS:** vehicle_localposition_setpoint +**TOPICS:** vehicle_local_position_setpoint ## Fields diff --git a/docs/zh/msg_docs/VehicleLocalPositionV0.md b/docs/zh/msg_docs/VehicleLocalPositionV0.md index 3c11cf615e..7c8c3e1824 100644 --- a/docs/zh/msg_docs/VehicleLocalPositionV0.md +++ b/docs/zh/msg_docs/VehicleLocalPositionV0.md @@ -67,12 +67,12 @@ Fused local position in NED. The coordinate system origin is the vehicle positio ## Constants -| 参数名 | 类型 | 值 | 描述 | -| -------------------------------------------------------------------------------------------------------------------------------- | -------- | - | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| MESSAGE_VERSION | `uint32` | 0 | | -| DIST_BOTTOM_SENSOR_NONE | `uint8` | 0 | | -| DIST_BOTTOM_SENSOR_RANGE | `uint8` | 1 | (1 << 0) a range sensor is used to estimate dist_bottom field | -| DIST_BOTTOM_SENSOR_FLOW | `uint8` | 2 | (1 << 1) a flow sensor is used to estimate dist_bottom field (mostly fixed-wing use case) | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------------------------------------------------------------------ | -------- | - | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| MESSAGE_VERSION | `uint32` | 0 | | +| DIST_BOTTOM_SENSOR_NONE | `uint8` | 0 | | +| DIST_BOTTOM_SENSOR_RANGE | `uint8` | 1 | (1 << 0) a range sensor is used to estimate dist_bottom field | +| DIST_BOTTOM_SENSOR_FLOW | `uint8` | 2 | (1 << 1) a flow sensor is used to estimate dist_bottom field (mostly fixed-wing use case) | ## Source Message diff --git a/docs/zh/msg_docs/VehicleOdometry.md b/docs/zh/msg_docs/VehicleOdometry.md index 92833c5111..6ff32cd778 100644 --- a/docs/zh/msg_docs/VehicleOdometry.md +++ b/docs/zh/msg_docs/VehicleOdometry.md @@ -32,26 +32,26 @@ Fits ROS REP 147 for aerial vehicles ### POSE_FRAME {#POSE_FRAME} -| 参数名 | 类型 | 值 | 描述 | -| ----------------------------------------------------------------------------------------------- | ------- | - | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| POSE_FRAME_UNKNOWN | `uint8` | 0 | Unknown frame | -| POSE_FRAME_NED | `uint8` | 1 | North-East-Down (NED) navigation frame. Aligned with True North. | -| POSE_FRAME_FRD | `uint8` | 2 | Forward-Right-Down (FRD) frame. Constant arbitrary heading offset from True North. Z is down. | +| 参数名 | 类型 | 值 | 描述 | +| --------------------------------------------------------------------------------------------- | ------- | - | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| POSE_FRAME_UNKNOWN | `uint8` | 0 | Unknown frame | +| POSE_FRAME_NED | `uint8` | 1 | North-East-Down (NED) navigation frame. Aligned with True North. | +| POSE_FRAME_FRD | `uint8` | 2 | Forward-Right-Down (FRD) frame. Constant arbitrary heading offset from True North. Z is down. | ### VELOCITY_FRAME {#VELOCITY_FRAME} -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------------------------------------------------------------ | ------- | - | ------------------------------------------------------------------------------------------------------------------------------------------------------- | -| VELOCITY_FRAME_UNKNOWN | `uint8` | 0 | Unknown frame | -| VELOCITY_FRAME_NED | `uint8` | 1 | NED navigation frame at current position. | -| VELOCITY_FRAME_FRD | `uint8` | 2 | FRD navigation frame at current position. Constant arbitrary heading offset from True North. Z is down. | -| VELOCITY_FRAME_BODY_FRD | `uint8` | 3 | FRD body-fixed frame | +| 参数名 | 类型 | 值 | 描述 | +| ---------------------------------------------------------------------------------------------------------------------------- | ------- | - | ------------------------------------------------------------------------------------------------------------------------------------------------------- | +| VELOCITY_FRAME_UNKNOWN | `uint8` | 0 | Unknown frame | +| VELOCITY_FRAME_NED | `uint8` | 1 | NED navigation frame at current position. | +| VELOCITY_FRAME_FRD | `uint8` | 2 | FRD navigation frame at current position. Constant arbitrary heading offset from True North. Z is down. | +| VELOCITY_FRAME_BODY_FRD | `uint8` | 3 | FRD body-fixed frame | ## Constants -| 参数名 | 类型 | 值 | 描述 | -| -------------------------------------------------------------------- | -------- | - | -- | -| MESSAGE_VERSION | `uint32` | 0 | | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------ | -------- | - | -- | +| MESSAGE_VERSION | `uint32` | 0 | | ## Source Message diff --git a/docs/zh/msg_docs/VehicleOpticalFlow.md b/docs/zh/msg_docs/VehicleOpticalFlow.md index f8b7c0e37a..670f57282f 100644 --- a/docs/zh/msg_docs/VehicleOpticalFlow.md +++ b/docs/zh/msg_docs/VehicleOpticalFlow.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Optical flow in XYZ body frame in SI units. -**TOPICS:** vehicle_opticalflow +**TOPICS:** vehicle_optical_flow ## Fields diff --git a/docs/zh/msg_docs/VehicleRatesSetpoint.md b/docs/zh/msg_docs/VehicleRatesSetpoint.md index b27d532257..ef132d250c 100644 --- a/docs/zh/msg_docs/VehicleRatesSetpoint.md +++ b/docs/zh/msg_docs/VehicleRatesSetpoint.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # VehicleRatesSetpoint (UORB message) -**TOPICS:** vehicle_ratessetpoint +**TOPICS:** vehicle_rates_setpoint ## Fields @@ -19,9 +19,9 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| -------------------------------------------------------------------- | -------- | - | -- | -| MESSAGE_VERSION | `uint32` | 0 | | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------ | -------- | - | -- | +| MESSAGE_VERSION | `uint32` | 0 | | ## Source Message diff --git a/docs/zh/msg_docs/VehicleRoi.md b/docs/zh/msg_docs/VehicleRoi.md index b94ec08e34..1f059ed50d 100644 --- a/docs/zh/msg_docs/VehicleRoi.md +++ b/docs/zh/msg_docs/VehicleRoi.md @@ -23,14 +23,14 @@ Vehicle Region Of Interest (ROI). ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ----------------------------------------------------------------------------------- | ------- | - | ---------------------------------------------- | -| ROI_NONE | `uint8` | 0 | No region of interest | -| ROI_WPNEXT | `uint8` | 1 | Point toward next MISSION with optional offset | -| ROI_WPINDEX | `uint8` | 2 | Point toward given MISSION | -| ROI_LOCATION | `uint8` | 3 | Point toward fixed location | -| ROI_TARGET | `uint8` | 4 | Point toward target | -| ROI_ENUM_END | `uint8` | 5 | | +| 参数名 | 类型 | 值 | 描述 | +| --------------------------------------------------------------------------------- | ------- | - | ---------------------------------------------- | +| ROI_NONE | `uint8` | 0 | No region of interest | +| ROI_WPNEXT | `uint8` | 1 | Point toward next MISSION with optional offset | +| ROI_WPINDEX | `uint8` | 2 | Point toward given MISSION | +| ROI_LOCATION | `uint8` | 3 | Point toward fixed location | +| ROI_TARGET | `uint8` | 4 | Point toward target | +| ROI_ENUM_END | `uint8` | 5 | | ## Source Message diff --git a/docs/zh/msg_docs/VehicleStatus.md b/docs/zh/msg_docs/VehicleStatus.md index 578226b0fc..a4aed49924 100644 --- a/docs/zh/msg_docs/VehicleStatus.md +++ b/docs/zh/msg_docs/VehicleStatus.md @@ -22,9 +22,10 @@ Encodes the system state of the vehicle published by commander. | nav_state_user_intention | `uint8` | | | Mode that the user selected (might be different from nav_state in a failsafe situation) | | nav_state | `uint8` | | | Currently active mode | | executor_in_charge | `uint8` | | | Current mode executor in charge (0=Autopilot) | +| nav_state_display | `uint8` | | | User-visible nav state sent via MAVLink (executor state if active, otherwise nav_state) | +| accepts_offboard_setpoints | `bool` | | | True if the current mode accepts offboard trajectory setpoints via MAVLink | | valid_nav_states_mask | `uint32` | | | Bitmask for all valid nav_state values | | can_set_nav_states_mask | `uint32` | | | Bitmask for all modes that a user can select | -| failure_detector_status | `uint16` | | | | | hil_state | `uint8` | | | | | vehicle_type | `uint8` | | | | | failsafe | `bool` | | | true if system is in failsafe state (e.g.:RTL, Hover, Terminate, ...) | @@ -48,77 +49,69 @@ Encodes the system state of the vehicle published by commander. | open_drone_id_system_healthy | `bool` | | | | | parachute_system_present | `bool` | | | | | parachute_system_healthy | `bool` | | | | +| traffic_avoidance_system_present | `bool` | | | | | rc_calibration_in_progress | `bool` | | | | | calibration_enabled | `bool` | | | | | pre_flight_checks_pass | `bool` | | | true if all checks necessary to arm pass | ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | --- | ----------------------------------------------------------------------------- | -| MESSAGE_VERSION | `uint32` | 1 | | -| ARMING_STATE_DISARMED | `uint8` | 1 | | -| ARMING_STATE_ARMED | `uint8` | 2 | | -| ARM_DISARM_REASON_STICK_GESTURE | `uint8` | 1 | | -| ARM_DISARM_REASON_RC_SWITCH | `uint8` | 2 | | -| ARM_DISARM_REASON_COMMAND_INTERNAL | `uint8` | 3 | | -| ARM_DISARM_REASON_COMMAND_EXTERNAL | `uint8` | 4 | | -| ARM_DISARM_REASON_MISSION_START | `uint8` | 5 | | -| ARM_DISARM_REASON_LANDING | `uint8` | 6 | | -| ARM_DISARM_REASON_PREFLIGHT_INACTION | `uint8` | 7 | | -| ARM_DISARM_REASON_KILL_SWITCH | `uint8` | 8 | | -| ARM_DISARM_REASON_RC_BUTTON | `uint8` | 13 | | -| ARM_DISARM_REASON_FAILSAFE | `uint8` | 14 | | -| NAVIGATION_STATE_MANUAL | `uint8` | 0 | Manual mode | -| NAVIGATION_STATE_ALTCTL | `uint8` | 1 | Altitude control mode | -| NAVIGATION_STATE_POSCTL | `uint8` | 2 | Position control mode | -| NAVIGATION_STATE_AUTO_MISSION | `uint8` | 3 | Auto mission mode | -| NAVIGATION_STATE_AUTO_LOITER | `uint8` | 4 | Auto loiter mode | -| NAVIGATION_STATE_AUTO_RTL | `uint8` | 5 | Auto return to launch mode | -| NAVIGATION_STATE_POSITION_SLOW | `uint8` | 6 | | -| NAVIGATION_STATE_FREE5 | `uint8` | 7 | | -| NAVIGATION_STATE_ALTITUDE_CRUISE | `uint8` | 8 | Altitude with Cruise mode | -| NAVIGATION_STATE_FREE3 | `uint8` | 9 | | -| NAVIGATION_STATE_ACRO | `uint8` | 10 | Acro mode | -| NAVIGATION_STATE_FREE2 | `uint8` | 11 | | -| NAVIGATION_STATE_DESCEND | `uint8` | 12 | Descend mode (no position control) | -| NAVIGATION_STATE_TERMINATION | `uint8` | 13 | Termination mode | -| NAVIGATION_STATE_OFFBOARD | `uint8` | 14 | | -| NAVIGATION_STATE_STAB | `uint8` | 15 | Stabilized mode | -| NAVIGATION_STATE_FREE1 | `uint8` | 16 | | -| NAVIGATION_STATE_AUTO_TAKEOFF | `uint8` | 17 | Takeoff | -| NAVIGATION_STATE_AUTO_LAND | `uint8` | 18 | Land | -| NAVIGATION_STATE_AUTO_FOLLOW_TARGET | `uint8` | 19 | Auto Follow | -| NAVIGATION_STATE_AUTO_PRECLAND | `uint8` | 20 | Precision land with landing target | -| NAVIGATION_STATE_ORBIT | `uint8` | 21 | Orbit in a circle | -| NAVIGATION_STATE_AUTO_VTOL_TAKEOFF | `uint8` | 22 | Takeoff, transition, establish loiter | -| NAVIGATION_STATE_EXTERNAL1 | `uint8` | 23 | | -| NAVIGATION_STATE_EXTERNAL2 | `uint8` | 24 | | -| NAVIGATION_STATE_EXTERNAL3 | `uint8` | 25 | | -| NAVIGATION_STATE_EXTERNAL4 | `uint8` | 26 | | -| NAVIGATION_STATE_EXTERNAL5 | `uint8` | 27 | | -| NAVIGATION_STATE_EXTERNAL6 | `uint8` | 28 | | -| NAVIGATION_STATE_EXTERNAL7 | `uint8` | 29 | | -| NAVIGATION_STATE_EXTERNAL8 | `uint8` | 30 | | -| NAVIGATION_STATE_MAX | `uint8` | 31 | | -| FAILURE_NONE | `uint16` | 0 | | -| FAILURE_ROLL | `uint16` | 1 | (1 << 0) | -| FAILURE_PITCH | `uint16` | 2 | (1 << 1) | -| FAILURE_ALT | `uint16` | 4 | (1 << 2) | -| FAILURE_EXT | `uint16` | 8 | (1 << 3) | -| FAILURE_ARM_ESC | `uint16` | 16 | (1 << 4) | -| FAILURE_BATTERY | `uint16` | 32 | (1 << 5) | -| FAILURE_IMBALANCED_PROP | `uint16` | 64 | (1 << 6) | -| FAILURE_MOTOR | `uint16` | 128 | (1 << 7) | -| HIL_STATE_OFF | `uint8` | 0 | | -| HIL_STATE_ON | `uint8` | 1 | | -| VEHICLE_TYPE_UNSPECIFIED | `uint8` | 0 | | -| VEHICLE_TYPE_ROTARY_WING | `uint8` | 1 | | -| VEHICLE_TYPE_FIXED_WING | `uint8` | 2 | | -| VEHICLE_TYPE_ROVER | `uint8` | 3 | | -| FAILSAFE_DEFER_STATE_DISABLED | `uint8` | 0 | | -| FAILSAFE_DEFER_STATE_ENABLED | `uint8` | 1 | | -| FAILSAFE_DEFER_STATE_WOULD_FAILSAFE | `uint8` | 2 | Failsafes deferred, but would trigger a failsafe | +| 参数名 | 类型 | 值 | 描述 | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -- | ----------------------------------------------------- | +| MESSAGE_VERSION | `uint32` | 4 | | +| ARMING_STATE_DISARMED | `uint8` | 1 | | +| ARMING_STATE_ARMED | `uint8` | 2 | | +| ARM_DISARM_REASON_STICK_GESTURE | `uint8` | 1 | | +| ARM_DISARM_REASON_RC_SWITCH | `uint8` | 2 | | +| ARM_DISARM_REASON_COMMAND_INTERNAL | `uint8` | 3 | | +| ARM_DISARM_REASON_COMMAND_EXTERNAL | `uint8` | 4 | | +| ARM_DISARM_REASON_MISSION_START | `uint8` | 5 | | +| ARM_DISARM_REASON_LANDING | `uint8` | 6 | | +| ARM_DISARM_REASON_PREFLIGHT_INACTION | `uint8` | 7 | | +| ARM_DISARM_REASON_KILL_SWITCH | `uint8` | 8 | | +| ARM_DISARM_REASON_RC_BUTTON | `uint8` | 13 | | +| ARM_DISARM_REASON_FAILSAFE | `uint8` | 14 | | +| NAVIGATION_STATE_MANUAL | `uint8` | 0 | Manual mode | +| NAVIGATION_STATE_ALTCTL | `uint8` | 1 | Altitude control mode | +| NAVIGATION_STATE_POSCTL | `uint8` | 2 | Position control mode | +| NAVIGATION_STATE_AUTO_MISSION | `uint8` | 3 | Auto mission mode | +| NAVIGATION_STATE_AUTO_LOITER | `uint8` | 4 | Auto loiter mode | +| NAVIGATION_STATE_AUTO_RTL | `uint8` | 5 | Auto return to launch mode | +| NAVIGATION_STATE_POSITION_SLOW | `uint8` | 6 | | +| NAVIGATION_STATE_FREE5 | `uint8` | 7 | | +| NAVIGATION_STATE_ALTITUDE_CRUISE | `uint8` | 8 | Altitude with Cruise mode | +| NAVIGATION_STATE_FREE3 | `uint8` | 9 | | +| NAVIGATION_STATE_ACRO | `uint8` | 10 | Acro mode | +| NAVIGATION_STATE_FREE2 | `uint8` | 11 | | +| NAVIGATION_STATE_DESCEND | `uint8` | 12 | Descend mode (no position control) | +| NAVIGATION_STATE_TERMINATION | `uint8` | 13 | Termination mode | +| NAVIGATION_STATE_OFFBOARD | `uint8` | 14 | | +| NAVIGATION_STATE_STAB | `uint8` | 15 | Stabilized mode | +| NAVIGATION_STATE_FREE1 | `uint8` | 16 | | +| NAVIGATION_STATE_AUTO_TAKEOFF | `uint8` | 17 | Takeoff | +| NAVIGATION_STATE_AUTO_LAND | `uint8` | 18 | Land | +| NAVIGATION_STATE_AUTO_FOLLOW_TARGET | `uint8` | 19 | Auto Follow | +| NAVIGATION_STATE_AUTO_PRECLAND | `uint8` | 20 | Precision land with landing target | +| NAVIGATION_STATE_ORBIT | `uint8` | 21 | Orbit in a circle | +| NAVIGATION_STATE_AUTO_VTOL_TAKEOFF | `uint8` | 22 | Takeoff, transition, establish loiter | +| NAVIGATION_STATE_EXTERNAL1 | `uint8` | 23 | | +| NAVIGATION_STATE_EXTERNAL2 | `uint8` | 24 | | +| NAVIGATION_STATE_EXTERNAL3 | `uint8` | 25 | | +| NAVIGATION_STATE_EXTERNAL4 | `uint8` | 26 | | +| NAVIGATION_STATE_EXTERNAL5 | `uint8` | 27 | | +| NAVIGATION_STATE_EXTERNAL6 | `uint8` | 28 | | +| NAVIGATION_STATE_EXTERNAL7 | `uint8` | 29 | | +| NAVIGATION_STATE_EXTERNAL8 | `uint8` | 30 | | +| NAVIGATION_STATE_MAX | `uint8` | 31 | | +| HIL_STATE_OFF | `uint8` | 0 | | +| HIL_STATE_ON | `uint8` | 1 | | +| VEHICLE_TYPE_UNSPECIFIED | `uint8` | 0 | | +| VEHICLE_TYPE_ROTARY_WING | `uint8` | 1 | | +| VEHICLE_TYPE_FIXED_WING | `uint8` | 2 | | +| VEHICLE_TYPE_ROVER | `uint8` | 3 | | +| FAILSAFE_DEFER_STATE_DISABLED | `uint8` | 0 | | +| FAILSAFE_DEFER_STATE_ENABLED | `uint8` | 1 | | +| FAILSAFE_DEFER_STATE_WOULD_FAILSAFE | `uint8` | 2 | Failsafes deferred, but would trigger a failsafe | ## Source Message @@ -130,7 +123,7 @@ Click here to see original file ```c # Encodes the system state of the vehicle published by commander -uint32 MESSAGE_VERSION = 1 +uint32 MESSAGE_VERSION = 4 uint64 timestamp # time since system start (microseconds) @@ -193,22 +186,13 @@ uint8 NAVIGATION_STATE_EXTERNAL8 = 30 uint8 NAVIGATION_STATE_MAX = 31 uint8 executor_in_charge # Current mode executor in charge (0=Autopilot) +uint8 nav_state_display # User-visible nav state sent via MAVLink (executor state if active, otherwise nav_state) + +bool accepts_offboard_setpoints # True if the current mode accepts offboard trajectory setpoints via MAVLink uint32 valid_nav_states_mask # Bitmask for all valid nav_state values uint32 can_set_nav_states_mask # Bitmask for all modes that a user can select -# Bitmask of detected failures -uint16 failure_detector_status -uint16 FAILURE_NONE = 0 -uint16 FAILURE_ROLL = 1 # (1 << 0) -uint16 FAILURE_PITCH = 2 # (1 << 1) -uint16 FAILURE_ALT = 4 # (1 << 2) -uint16 FAILURE_EXT = 8 # (1 << 3) -uint16 FAILURE_ARM_ESC = 16 # (1 << 4) -uint16 FAILURE_BATTERY = 32 # (1 << 5) -uint16 FAILURE_IMBALANCED_PROP = 64 # (1 << 6) -uint16 FAILURE_MOTOR = 128 # (1 << 7) - uint8 hil_state uint8 HIL_STATE_OFF = 0 uint8 HIL_STATE_ON = 1 @@ -256,6 +240,8 @@ bool open_drone_id_system_healthy bool parachute_system_present bool parachute_system_healthy +bool traffic_avoidance_system_present + bool rc_calibration_in_progress bool calibration_enabled diff --git a/docs/zh/msg_docs/VehicleStatusV0.md b/docs/zh/msg_docs/VehicleStatusV0.md index ea613f8ab1..77a7c41bcf 100644 --- a/docs/zh/msg_docs/VehicleStatusV0.md +++ b/docs/zh/msg_docs/VehicleStatusV0.md @@ -6,7 +6,7 @@ pageClass: is-wide-page Encodes the system state of the vehicle published by commander. -**TOPICS:** vehicle_statusv0 +**TOPICS:** vehicle_status_v0 ## Fields @@ -56,76 +56,76 @@ Encodes the system state of the vehicle published by commander. ## Constants -| 参数名 | 类型 | 值 | 描述 | -| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | --- | ----------------------------------------------------------------------------- | -| MESSAGE_VERSION | `uint32` | 0 | | -| ARMING_STATE_DISARMED | `uint8` | 1 | | -| ARMING_STATE_ARMED | `uint8` | 2 | | -| ARM_DISARM_REASON_TRANSITION_TO_STANDBY | `uint8` | 0 | | -| ARM_DISARM_REASON_STICK_GESTURE | `uint8` | 1 | | -| ARM_DISARM_REASON_RC_SWITCH | `uint8` | 2 | | -| ARM_DISARM_REASON_COMMAND_INTERNAL | `uint8` | 3 | | -| ARM_DISARM_REASON_COMMAND_EXTERNAL | `uint8` | 4 | | -| ARM_DISARM_REASON_MISSION_START | `uint8` | 5 | | -| ARM_DISARM_REASON_SAFETY_BUTTON | `uint8` | 6 | | -| ARM_DISARM_REASON_AUTO_DISARM_LAND | `uint8` | 7 | | -| ARM_DISARM_REASON_AUTO_DISARM_PREFLIGHT | `uint8` | 8 | | -| ARM_DISARM_REASON_KILL_SWITCH | `uint8` | 9 | | -| ARM_DISARM_REASON_LOCKDOWN | `uint8` | 10 | | -| ARM_DISARM_REASON_FAILURE_DETECTOR | `uint8` | 11 | | -| ARM_DISARM_REASON_SHUTDOWN | `uint8` | 12 | | -| ARM_DISARM_REASON_UNIT_TEST | `uint8` | 13 | | -| NAVIGATION_STATE_MANUAL | `uint8` | 0 | Manual mode | -| NAVIGATION_STATE_ALTCTL | `uint8` | 1 | Altitude control mode | -| NAVIGATION_STATE_POSCTL | `uint8` | 2 | Position control mode | -| NAVIGATION_STATE_AUTO_MISSION | `uint8` | 3 | Auto mission mode | -| NAVIGATION_STATE_AUTO_LOITER | `uint8` | 4 | Auto loiter mode | -| NAVIGATION_STATE_AUTO_RTL | `uint8` | 5 | Auto return to launch mode | -| NAVIGATION_STATE_POSITION_SLOW | `uint8` | 6 | | -| NAVIGATION_STATE_FREE5 | `uint8` | 7 | | -| NAVIGATION_STATE_FREE4 | `uint8` | 8 | | -| NAVIGATION_STATE_FREE3 | `uint8` | 9 | | -| NAVIGATION_STATE_ACRO | `uint8` | 10 | Acro mode | -| NAVIGATION_STATE_FREE2 | `uint8` | 11 | | -| NAVIGATION_STATE_DESCEND | `uint8` | 12 | Descend mode (no position control) | -| NAVIGATION_STATE_TERMINATION | `uint8` | 13 | Termination mode | -| NAVIGATION_STATE_OFFBOARD | `uint8` | 14 | | -| NAVIGATION_STATE_STAB | `uint8` | 15 | Stabilized mode | -| NAVIGATION_STATE_FREE1 | `uint8` | 16 | | -| NAVIGATION_STATE_AUTO_TAKEOFF | `uint8` | 17 | Takeoff | -| NAVIGATION_STATE_AUTO_LAND | `uint8` | 18 | Land | -| NAVIGATION_STATE_AUTO_FOLLOW_TARGET | `uint8` | 19 | Auto Follow | -| NAVIGATION_STATE_AUTO_PRECLAND | `uint8` | 20 | Precision land with landing target | -| NAVIGATION_STATE_ORBIT | `uint8` | 21 | Orbit in a circle | -| NAVIGATION_STATE_AUTO_VTOL_TAKEOFF | `uint8` | 22 | Takeoff, transition, establish loiter | -| NAVIGATION_STATE_EXTERNAL1 | `uint8` | 23 | | -| NAVIGATION_STATE_EXTERNAL2 | `uint8` | 24 | | -| NAVIGATION_STATE_EXTERNAL3 | `uint8` | 25 | | -| NAVIGATION_STATE_EXTERNAL4 | `uint8` | 26 | | -| NAVIGATION_STATE_EXTERNAL5 | `uint8` | 27 | | -| NAVIGATION_STATE_EXTERNAL6 | `uint8` | 28 | | -| NAVIGATION_STATE_EXTERNAL7 | `uint8` | 29 | | -| NAVIGATION_STATE_EXTERNAL8 | `uint8` | 30 | | -| NAVIGATION_STATE_MAX | `uint8` | 31 | | -| FAILURE_NONE | `uint16` | 0 | | -| FAILURE_ROLL | `uint16` | 1 | (1 << 0) | -| FAILURE_PITCH | `uint16` | 2 | (1 << 1) | -| FAILURE_ALT | `uint16` | 4 | (1 << 2) | -| FAILURE_EXT | `uint16` | 8 | (1 << 3) | -| FAILURE_ARM_ESC | `uint16` | 16 | (1 << 4) | -| FAILURE_BATTERY | `uint16` | 32 | (1 << 5) | -| FAILURE_IMBALANCED_PROP | `uint16` | 64 | (1 << 6) | -| FAILURE_MOTOR | `uint16` | 128 | (1 << 7) | -| HIL_STATE_OFF | `uint8` | 0 | | -| HIL_STATE_ON | `uint8` | 1 | | -| VEHICLE_TYPE_UNKNOWN | `uint8` | 0 | | -| VEHICLE_TYPE_ROTARY_WING | `uint8` | 1 | | -| VEHICLE_TYPE_FIXED_WING | `uint8` | 2 | | -| VEHICLE_TYPE_ROVER | `uint8` | 3 | | -| VEHICLE_TYPE_AIRSHIP | `uint8` | 4 | | -| FAILSAFE_DEFER_STATE_DISABLED | `uint8` | 0 | | -| FAILSAFE_DEFER_STATE_ENABLED | `uint8` | 1 | | -| FAILSAFE_DEFER_STATE_WOULD_FAILSAFE | `uint8` | 2 | Failsafes deferred, but would trigger a failsafe | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------- | --- | ----------------------------------------------------------------------------- | +| MESSAGE_VERSION | `uint32` | 0 | | +| ARMING_STATE_DISARMED | `uint8` | 1 | | +| ARMING_STATE_ARMED | `uint8` | 2 | | +| ARM_DISARM_REASON_TRANSITION_TO_STANDBY | `uint8` | 0 | | +| ARM_DISARM_REASON_STICK_GESTURE | `uint8` | 1 | | +| ARM_DISARM_REASON_RC_SWITCH | `uint8` | 2 | | +| ARM_DISARM_REASON_COMMAND_INTERNAL | `uint8` | 3 | | +| ARM_DISARM_REASON_COMMAND_EXTERNAL | `uint8` | 4 | | +| ARM_DISARM_REASON_MISSION_START | `uint8` | 5 | | +| ARM_DISARM_REASON_SAFETY_BUTTON | `uint8` | 6 | | +| ARM_DISARM_REASON_AUTO_DISARM_LAND | `uint8` | 7 | | +| ARM_DISARM_REASON_AUTO_DISARM_PREFLIGHT | `uint8` | 8 | | +| ARM_DISARM_REASON_KILL_SWITCH | `uint8` | 9 | | +| ARM_DISARM_REASON_LOCKDOWN | `uint8` | 10 | | +| ARM_DISARM_REASON_FAILURE_DETECTOR | `uint8` | 11 | | +| ARM_DISARM_REASON_SHUTDOWN | `uint8` | 12 | | +| ARM_DISARM_REASON_UNIT_TEST | `uint8` | 13 | | +| NAVIGATION_STATE_MANUAL | `uint8` | 0 | Manual mode | +| NAVIGATION_STATE_ALTCTL | `uint8` | 1 | Altitude control mode | +| NAVIGATION_STATE_POSCTL | `uint8` | 2 | Position control mode | +| NAVIGATION_STATE_AUTO_MISSION | `uint8` | 3 | Auto mission mode | +| NAVIGATION_STATE_AUTO_LOITER | `uint8` | 4 | Auto loiter mode | +| NAVIGATION_STATE_AUTO_RTL | `uint8` | 5 | Auto return to launch mode | +| NAVIGATION_STATE_POSITION_SLOW | `uint8` | 6 | | +| NAVIGATION_STATE_FREE5 | `uint8` | 7 | | +| NAVIGATION_STATE_FREE4 | `uint8` | 8 | | +| NAVIGATION_STATE_FREE3 | `uint8` | 9 | | +| NAVIGATION_STATE_ACRO | `uint8` | 10 | Acro mode | +| NAVIGATION_STATE_FREE2 | `uint8` | 11 | | +| NAVIGATION_STATE_DESCEND | `uint8` | 12 | Descend mode (no position control) | +| NAVIGATION_STATE_TERMINATION | `uint8` | 13 | Termination mode | +| NAVIGATION_STATE_OFFBOARD | `uint8` | 14 | | +| NAVIGATION_STATE_STAB | `uint8` | 15 | Stabilized mode | +| NAVIGATION_STATE_FREE1 | `uint8` | 16 | | +| NAVIGATION_STATE_AUTO_TAKEOFF | `uint8` | 17 | Takeoff | +| NAVIGATION_STATE_AUTO_LAND | `uint8` | 18 | Land | +| NAVIGATION_STATE_AUTO_FOLLOW_TARGET | `uint8` | 19 | Auto Follow | +| NAVIGATION_STATE_AUTO_PRECLAND | `uint8` | 20 | Precision land with landing target | +| NAVIGATION_STATE_ORBIT | `uint8` | 21 | Orbit in a circle | +| NAVIGATION_STATE_AUTO_VTOL_TAKEOFF | `uint8` | 22 | Takeoff, transition, establish loiter | +| NAVIGATION_STATE_EXTERNAL1 | `uint8` | 23 | | +| NAVIGATION_STATE_EXTERNAL2 | `uint8` | 24 | | +| NAVIGATION_STATE_EXTERNAL3 | `uint8` | 25 | | +| NAVIGATION_STATE_EXTERNAL4 | `uint8` | 26 | | +| NAVIGATION_STATE_EXTERNAL5 | `uint8` | 27 | | +| NAVIGATION_STATE_EXTERNAL6 | `uint8` | 28 | | +| NAVIGATION_STATE_EXTERNAL7 | `uint8` | 29 | | +| NAVIGATION_STATE_EXTERNAL8 | `uint8` | 30 | | +| NAVIGATION_STATE_MAX | `uint8` | 31 | | +| FAILURE_NONE | `uint16` | 0 | | +| FAILURE_ROLL | `uint16` | 1 | (1 << 0) | +| FAILURE_PITCH | `uint16` | 2 | (1 << 1) | +| FAILURE_ALT | `uint16` | 4 | (1 << 2) | +| FAILURE_EXT | `uint16` | 8 | (1 << 3) | +| FAILURE_ARM_ESC | `uint16` | 16 | (1 << 4) | +| FAILURE_BATTERY | `uint16` | 32 | (1 << 5) | +| FAILURE_IMBALANCED_PROP | `uint16` | 64 | (1 << 6) | +| FAILURE_MOTOR | `uint16` | 128 | (1 << 7) | +| HIL_STATE_OFF | `uint8` | 0 | | +| HIL_STATE_ON | `uint8` | 1 | | +| VEHICLE_TYPE_UNKNOWN | `uint8` | 0 | | +| VEHICLE_TYPE_ROTARY_WING | `uint8` | 1 | | +| VEHICLE_TYPE_FIXED_WING | `uint8` | 2 | | +| VEHICLE_TYPE_ROVER | `uint8` | 3 | | +| VEHICLE_TYPE_AIRSHIP | `uint8` | 4 | | +| FAILSAFE_DEFER_STATE_DISABLED | `uint8` | 0 | | +| FAILSAFE_DEFER_STATE_ENABLED | `uint8` | 1 | | +| FAILSAFE_DEFER_STATE_WOULD_FAILSAFE | `uint8` | 2 | Failsafes deferred, but would trigger a failsafe | ## Source Message diff --git a/docs/zh/msg_docs/VehicleStatusV1.md b/docs/zh/msg_docs/VehicleStatusV1.md new file mode 100644 index 0000000000..d6cb63372d --- /dev/null +++ b/docs/zh/msg_docs/VehicleStatusV1.md @@ -0,0 +1,287 @@ +--- +pageClass: is-wide-page +--- + +# VehicleStatusV1 (UORB message) + +Encodes the system state of the vehicle published by commander. + +**TOPICS:** vehicle_status_v1 + +## Fields + +| 参数名 | 类型 | Unit [Frame] | Range/Enum | 描述 | +| ---------------------------------------------------------------------------------------------------------------- | -------- | ---------------------------------------------------------------- | --------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| timestamp | `uint64` | us | | Time since system start | +| armed_time | `uint64` | us | | Arming timestamp | +| takeoff_time | `uint64` | us | | Takeoff timestamp | +| arming_state | `uint8` | | | | +| latest_arming_reason | `uint8` | | | | +| latest_disarming_reason | `uint8` | | | | +| nav_state_timestamp | `uint64` | | | Time when current nav_state activated | +| nav_state_user_intention | `uint8` | | | Mode that the user selected (might be different from nav_state in a failsafe situation) | +| nav_state | `uint8` | | [NAVIGATION_STATE](#NAVIGATION_STATE) | Currently active mode | +| executor_in_charge | `uint8` | | | Current mode executor in charge (0=Autopilot) | +| valid_nav_states_mask | `uint32` | | | Bitmask for all valid nav_state values | +| can_set_nav_states_mask | `uint32` | | | Bitmask for all modes that a user can select | +| failure_detector_status | `uint16` | | [FAILURE](#FAILURE) | | +| hil_state | `uint8` | enum HIL_STATE | | | +| vehicle_type | `uint8` | | [VEHICLE_TYPE](#VEHICLE_TYPE) | | +| failsafe | `bool` | | | true if system is in failsafe state (e.g.:RTL, Hover, Terminate, ...) | +| failsafe_and_user_took_over | `bool` | | | true if system is in failsafe state but the user took over control | +| failsafe_defer_state | `uint8` | | [FAILSAFE_DEFER_STATE](#FAILSAFE_DEFER_STATE) | | +| gcs_connection_lost | `bool` | | | datalink to GCS lost | +| gcs_connection_lost_counter | `uint8` | | | counts unique GCS connection lost events | +| high_latency_data_link_lost | `bool` | | | Set to true if the high latency data link (eg. RockBlock Iridium 9603 telemetry module) is lost | +| is_vtol | `bool` | | | True if the system is VTOL capable | +| is_vtol_tailsitter | `bool` | | | True if the system performs a 90° pitch down rotation during transition from MC to FW | +| in_transition_mode | `bool` | | | True if VTOL is doing a transition | +| in_transition_to_fw | `bool` | | | True if VTOL is doing a transition from MC to FW | +| system_type | `uint8` | | | system type, contains mavlink MAV_TYPE | +| system_id | `uint8` | | | system id, contains MAVLink's system ID field | +| component_id | `uint8` | | | subsystem / component id, contains MAVLink's component ID field | +| safety_button_available | `bool` | | | Set to true if a safety button is connected | +| safety_off | `bool` | | | Set to true if safety is off | +| power_input_valid | `bool` | | | Set if input power is valid | +| usb_connected | `bool` | | | Set to true (never cleared) once telemetry received from usb link | +| open_drone_id_system_present | `bool` | | | | +| open_drone_id_system_healthy | `bool` | | | | +| parachute_system_present | `bool` | | | | +| parachute_system_healthy | `bool` | | | | +| rc_calibration_in_progress | `bool` | | | | +| calibration_enabled | `bool` | | | | +| pre_flight_checks_pass | `bool` | | | true if all checks necessary to arm pass | + +## Enums + +### NAVIGATION_STATE {#NAVIGATION_STATE} + +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | -- | ----------------------------------------------------- | +| NAVIGATION_STATE_MANUAL | `uint8` | 0 | Manual mode | +| NAVIGATION_STATE_ALTCTL | `uint8` | 1 | Altitude control mode | +| NAVIGATION_STATE_POSCTL | `uint8` | 2 | Position control mode | +| NAVIGATION_STATE_AUTO_MISSION | `uint8` | 3 | Auto mission mode | +| NAVIGATION_STATE_AUTO_LOITER | `uint8` | 4 | Auto loiter mode | +| NAVIGATION_STATE_AUTO_RTL | `uint8` | 5 | Auto return to launch mode | +| NAVIGATION_STATE_POSITION_SLOW | `uint8` | 6 | | +| NAVIGATION_STATE_FREE5 | `uint8` | 7 | | +| NAVIGATION_STATE_ALTITUDE_CRUISE | `uint8` | 8 | Altitude with Cruise mode | +| NAVIGATION_STATE_FREE3 | `uint8` | 9 | | +| NAVIGATION_STATE_ACRO | `uint8` | 10 | Acro mode | +| NAVIGATION_STATE_FREE2 | `uint8` | 11 | | +| NAVIGATION_STATE_DESCEND | `uint8` | 12 | Descend mode (no position control) | +| NAVIGATION_STATE_TERMINATION | `uint8` | 13 | Termination mode | +| NAVIGATION_STATE_OFFBOARD | `uint8` | 14 | | +| NAVIGATION_STATE_STAB | `uint8` | 15 | Stabilized mode | +| NAVIGATION_STATE_FREE1 | `uint8` | 16 | | +| NAVIGATION_STATE_AUTO_TAKEOFF | `uint8` | 17 | Takeoff | +| NAVIGATION_STATE_AUTO_LAND | `uint8` | 18 | Land | +| NAVIGATION_STATE_AUTO_FOLLOW_TARGET | `uint8` | 19 | Auto Follow | +| NAVIGATION_STATE_AUTO_PRECLAND | `uint8` | 20 | Precision land with landing target | +| NAVIGATION_STATE_ORBIT | `uint8` | 21 | Orbit in a circle | +| NAVIGATION_STATE_AUTO_VTOL_TAKEOFF | `uint8` | 22 | Takeoff, transition, establish loiter | +| NAVIGATION_STATE_EXTERNAL1 | `uint8` | 23 | | +| NAVIGATION_STATE_EXTERNAL2 | `uint8` | 24 | | +| NAVIGATION_STATE_EXTERNAL3 | `uint8` | 25 | | +| NAVIGATION_STATE_EXTERNAL4 | `uint8` | 26 | | +| NAVIGATION_STATE_EXTERNAL5 | `uint8` | 27 | | +| NAVIGATION_STATE_EXTERNAL6 | `uint8` | 28 | | +| NAVIGATION_STATE_EXTERNAL7 | `uint8` | 29 | | +| NAVIGATION_STATE_EXTERNAL8 | `uint8` | 30 | | +| NAVIGATION_STATE_MAX | `uint8` | 31 | | + +### FAILURE {#FAILURE} + +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------------------------------------------- | -------- | --- | ----------------------------------------------------------------------------- | +| FAILURE_NONE | `uint16` | 0 | | +| FAILURE_ROLL | `uint16` | 1 | (1 << 0) | +| FAILURE_PITCH | `uint16` | 2 | (1 << 1) | +| FAILURE_ALT | `uint16` | 4 | (1 << 2) | +| FAILURE_EXT | `uint16` | 8 | (1 << 3) | +| FAILURE_ARM_ESC | `uint16` | 16 | (1 << 4) | +| FAILURE_BATTERY | `uint16` | 32 | (1 << 5) | +| FAILURE_IMBALANCED_PROP | `uint16` | 64 | (1 << 6) | +| FAILURE_MOTOR | `uint16` | 128 | (1 << 7) | + +### VEHICLE_TYPE {#VEHICLE_TYPE} + +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------------------------------------------------------------------ | ------- | - | -- | +| VEHICLE_TYPE_UNSPECIFIED | `uint8` | 0 | | +| VEHICLE_TYPE_ROTARY_WING | `uint8` | 1 | | +| VEHICLE_TYPE_FIXED_WING | `uint8` | 2 | | +| VEHICLE_TYPE_ROVER | `uint8` | 3 | | + +### FAILSAFE_DEFER_STATE {#FAILSAFE_DEFER_STATE} + +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | - | ------------------------------------------------ | +| FAILSAFE_DEFER_STATE_DISABLED | `uint8` | 0 | | +| FAILSAFE_DEFER_STATE_ENABLED | `uint8` | 1 | | +| FAILSAFE_DEFER_STATE_WOULD_FAILSAFE | `uint8` | 2 | Failsafes deferred, but would trigger a failsafe | + +## Constants + +| 参数名 | 类型 | 值 | 描述 | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -- | -- | +| MESSAGE_VERSION | `uint32` | 1 | | +| ARMING_STATE_DISARMED | `uint8` | 1 | | +| ARMING_STATE_ARMED | `uint8` | 2 | | +| ARM_DISARM_REASON_STICK_GESTURE | `uint8` | 1 | | +| ARM_DISARM_REASON_RC_SWITCH | `uint8` | 2 | | +| ARM_DISARM_REASON_COMMAND_INTERNAL | `uint8` | 3 | | +| ARM_DISARM_REASON_COMMAND_EXTERNAL | `uint8` | 4 | | +| ARM_DISARM_REASON_MISSION_START | `uint8` | 5 | | +| ARM_DISARM_REASON_LANDING | `uint8` | 6 | | +| ARM_DISARM_REASON_PREFLIGHT_INACTION | `uint8` | 7 | | +| ARM_DISARM_REASON_KILL_SWITCH | `uint8` | 8 | | +| ARM_DISARM_REASON_RC_BUTTON | `uint8` | 13 | | +| ARM_DISARM_REASON_FAILSAFE | `uint8` | 14 | | +| HIL_STATE_OFF | `uint8` | 0 | | +| HIL_STATE_ON | `uint8` | 1 | | + +## Source Message + +[Source file (GitHub)](https://github.com/PX4/PX4-Autopilot/blob/main/msg/px4_msgs_old/msg/VehicleStatusV1.msg) + +:::details +Click here to see original file + +```c +# Encodes the system state of the vehicle published by commander + +uint32 MESSAGE_VERSION = 1 + +uint64 timestamp # [us] Time since system start + +uint64 armed_time # [us] Arming timestamp +uint64 takeoff_time # [us] Takeoff timestamp + +uint8 arming_state +uint8 ARMING_STATE_DISARMED = 1 +uint8 ARMING_STATE_ARMED = 2 + +uint8 latest_arming_reason +uint8 latest_disarming_reason +uint8 ARM_DISARM_REASON_STICK_GESTURE = 1 +uint8 ARM_DISARM_REASON_RC_SWITCH = 2 +uint8 ARM_DISARM_REASON_COMMAND_INTERNAL = 3 +uint8 ARM_DISARM_REASON_COMMAND_EXTERNAL = 4 +uint8 ARM_DISARM_REASON_MISSION_START = 5 +uint8 ARM_DISARM_REASON_LANDING = 6 +uint8 ARM_DISARM_REASON_PREFLIGHT_INACTION = 7 +uint8 ARM_DISARM_REASON_KILL_SWITCH = 8 +uint8 ARM_DISARM_REASON_RC_BUTTON = 13 +uint8 ARM_DISARM_REASON_FAILSAFE = 14 + +uint64 nav_state_timestamp # Time when current nav_state activated + +uint8 nav_state_user_intention # Mode that the user selected (might be different from nav_state in a failsafe situation) + +uint8 nav_state # [@enum NAVIGATION_STATE] Currently active mode +uint8 NAVIGATION_STATE_MANUAL = 0 # Manual mode +uint8 NAVIGATION_STATE_ALTCTL = 1 # Altitude control mode +uint8 NAVIGATION_STATE_POSCTL = 2 # Position control mode +uint8 NAVIGATION_STATE_AUTO_MISSION = 3 # Auto mission mode +uint8 NAVIGATION_STATE_AUTO_LOITER = 4 # Auto loiter mode +uint8 NAVIGATION_STATE_AUTO_RTL = 5 # Auto return to launch mode +uint8 NAVIGATION_STATE_POSITION_SLOW = 6 +uint8 NAVIGATION_STATE_FREE5 = 7 +uint8 NAVIGATION_STATE_ALTITUDE_CRUISE = 8 # Altitude with Cruise mode +uint8 NAVIGATION_STATE_FREE3 = 9 +uint8 NAVIGATION_STATE_ACRO = 10 # Acro mode +uint8 NAVIGATION_STATE_FREE2 = 11 +uint8 NAVIGATION_STATE_DESCEND = 12 # Descend mode (no position control) +uint8 NAVIGATION_STATE_TERMINATION = 13 # Termination mode +uint8 NAVIGATION_STATE_OFFBOARD = 14 +uint8 NAVIGATION_STATE_STAB = 15 # Stabilized mode +uint8 NAVIGATION_STATE_FREE1 = 16 +uint8 NAVIGATION_STATE_AUTO_TAKEOFF = 17 # Takeoff +uint8 NAVIGATION_STATE_AUTO_LAND = 18 # Land +uint8 NAVIGATION_STATE_AUTO_FOLLOW_TARGET = 19 # Auto Follow +uint8 NAVIGATION_STATE_AUTO_PRECLAND = 20 # Precision land with landing target +uint8 NAVIGATION_STATE_ORBIT = 21 # Orbit in a circle +uint8 NAVIGATION_STATE_AUTO_VTOL_TAKEOFF = 22 # Takeoff, transition, establish loiter +uint8 NAVIGATION_STATE_EXTERNAL1 = 23 +uint8 NAVIGATION_STATE_EXTERNAL2 = 24 +uint8 NAVIGATION_STATE_EXTERNAL3 = 25 +uint8 NAVIGATION_STATE_EXTERNAL4 = 26 +uint8 NAVIGATION_STATE_EXTERNAL5 = 27 +uint8 NAVIGATION_STATE_EXTERNAL6 = 28 +uint8 NAVIGATION_STATE_EXTERNAL7 = 29 +uint8 NAVIGATION_STATE_EXTERNAL8 = 30 +uint8 NAVIGATION_STATE_MAX = 31 + +uint8 executor_in_charge # [-] Current mode executor in charge (0=Autopilot) + +uint32 valid_nav_states_mask # [-] Bitmask for all valid nav_state values +uint32 can_set_nav_states_mask # [-] Bitmask for all modes that a user can select + +# Bitmask of detected failures +uint16 failure_detector_status # [@enum FAILURE] +uint16 FAILURE_NONE = 0 +uint16 FAILURE_ROLL = 1 # (1 << 0) +uint16 FAILURE_PITCH = 2 # (1 << 1) +uint16 FAILURE_ALT = 4 # (1 << 2) +uint16 FAILURE_EXT = 8 # (1 << 3) +uint16 FAILURE_ARM_ESC = 16 # (1 << 4) +uint16 FAILURE_BATTERY = 32 # (1 << 5) +uint16 FAILURE_IMBALANCED_PROP = 64 # (1 << 6) +uint16 FAILURE_MOTOR = 128 # (1 << 7) + +uint8 hil_state # [enum HIL_STATE] +uint8 HIL_STATE_OFF = 0 +uint8 HIL_STATE_ON = 1 + +# Current vehicle locomotion method. A vehicle can have different methods (e.g. VTOL transitions from RW to FW method) +uint8 vehicle_type # [@enum VEHICLE_TYPE] +uint8 VEHICLE_TYPE_UNSPECIFIED = 0 +uint8 VEHICLE_TYPE_ROTARY_WING = 1 +uint8 VEHICLE_TYPE_FIXED_WING = 2 +uint8 VEHICLE_TYPE_ROVER = 3 + +uint8 FAILSAFE_DEFER_STATE_DISABLED = 0 +uint8 FAILSAFE_DEFER_STATE_ENABLED = 1 +uint8 FAILSAFE_DEFER_STATE_WOULD_FAILSAFE = 2 # Failsafes deferred, but would trigger a failsafe + +bool failsafe # true if system is in failsafe state (e.g.:RTL, Hover, Terminate, ...) +bool failsafe_and_user_took_over # true if system is in failsafe state but the user took over control +uint8 failsafe_defer_state # [@enum FAILSAFE_DEFER_STATE] + +# Link loss +bool gcs_connection_lost # datalink to GCS lost +uint8 gcs_connection_lost_counter # counts unique GCS connection lost events +bool high_latency_data_link_lost # Set to true if the high latency data link (eg. RockBlock Iridium 9603 telemetry module) is lost + +# VTOL flags +bool is_vtol # True if the system is VTOL capable +bool is_vtol_tailsitter # True if the system performs a 90° pitch down rotation during transition from MC to FW +bool in_transition_mode # True if VTOL is doing a transition +bool in_transition_to_fw # True if VTOL is doing a transition from MC to FW + +# MAVLink identification +uint8 system_type # system type, contains mavlink MAV_TYPE +uint8 system_id # system id, contains MAVLink's system ID field +uint8 component_id # subsystem / component id, contains MAVLink's component ID field + +bool safety_button_available # Set to true if a safety button is connected +bool safety_off # Set to true if safety is off + +bool power_input_valid # Set if input power is valid +bool usb_connected # Set to true (never cleared) once telemetry received from usb link + +bool open_drone_id_system_present +bool open_drone_id_system_healthy + +bool parachute_system_present +bool parachute_system_healthy + +bool rc_calibration_in_progress +bool calibration_enabled + +bool pre_flight_checks_pass # true if all checks necessary to arm pass +``` + +::: diff --git a/docs/zh/msg_docs/VehicleStatusV2.md b/docs/zh/msg_docs/VehicleStatusV2.md new file mode 100644 index 0000000000..36068f21ed --- /dev/null +++ b/docs/zh/msg_docs/VehicleStatusV2.md @@ -0,0 +1,270 @@ +--- +pageClass: is-wide-page +--- + +# VehicleStatusV2 (UORB message) + +Encodes the system state of the vehicle published by commander. + +**TOPICS:** vehicle_status_v2 + +## Fields + +| 参数名 | 类型 | Unit [Frame] | Range/Enum | 描述 | +| ---------------------------------------------------------------------------------------------------------------- | -------- | ---------------------------------------------------------------- | ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| timestamp | `uint64` | | | time since system start (microseconds) | +| armed_time | `uint64` | | | Arming timestamp (microseconds) | +| takeoff_time | `uint64` | | | Takeoff timestamp (microseconds) | +| arming_state | `uint8` | | | | +| latest_arming_reason | `uint8` | | | | +| latest_disarming_reason | `uint8` | | | | +| nav_state_timestamp | `uint64` | | | time when current nav_state activated | +| nav_state_user_intention | `uint8` | | | Mode that the user selected (might be different from nav_state in a failsafe situation) | +| nav_state | `uint8` | | | Currently active mode | +| executor_in_charge | `uint8` | | | Current mode executor in charge (0=Autopilot) | +| nav_state_display | `uint8` | | | User-visible nav state sent via MAVLink (executor state if active, otherwise nav_state) | +| valid_nav_states_mask | `uint32` | | | Bitmask for all valid nav_state values | +| can_set_nav_states_mask | `uint32` | | | Bitmask for all modes that a user can select | +| failure_detector_status | `uint16` | | | | +| hil_state | `uint8` | | | | +| vehicle_type | `uint8` | | | | +| failsafe | `bool` | | | true if system is in failsafe state (e.g.:RTL, Hover, Terminate, ...) | +| failsafe_and_user_took_over | `bool` | | | true if system is in failsafe state but the user took over control | +| failsafe_defer_state | `uint8` | | | one of FAILSAFE_DEFER_STATE_\* | +| gcs_connection_lost | `bool` | | | datalink to GCS lost | +| gcs_connection_lost_counter | `uint8` | | | counts unique GCS connection lost events | +| high_latency_data_link_lost | `bool` | | | Set to true if the high latency data link (eg. RockBlock Iridium 9603 telemetry module) is lost | +| is_vtol | `bool` | | | True if the system is VTOL capable | +| is_vtol_tailsitter | `bool` | | | True if the system performs a 90° pitch down rotation during transition from MC to FW | +| in_transition_mode | `bool` | | | True if VTOL is doing a transition | +| in_transition_to_fw | `bool` | | | True if VTOL is doing a transition from MC to FW | +| system_type | `uint8` | | | system type, contains mavlink MAV_TYPE | +| system_id | `uint8` | | | system id, contains MAVLink's system ID field | +| component_id | `uint8` | | | subsystem / component id, contains MAVLink's component ID field | +| safety_button_available | `bool` | | | Set to true if a safety button is connected | +| safety_off | `bool` | | | Set to true if safety is off | +| power_input_valid | `bool` | | | set if input power is valid | +| usb_connected | `bool` | | | set to true (never cleared) once telemetry received from usb link | +| open_drone_id_system_present | `bool` | | | | +| open_drone_id_system_healthy | `bool` | | | | +| parachute_system_present | `bool` | | | | +| parachute_system_healthy | `bool` | | | | +| traffic_avoidance_system_present | `bool` | | | | +| rc_calibration_in_progress | `bool` | | | | +| calibration_enabled | `bool` | | | | +| pre_flight_checks_pass | `bool` | | | true if all checks necessary to arm pass | + +## Constants + +| 参数名 | 类型 | 值 | 描述 | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | --- | ----------------------------------------------------------------------------- | +| MESSAGE_VERSION | `uint32` | 2 | | +| ARMING_STATE_DISARMED | `uint8` | 1 | | +| ARMING_STATE_ARMED | `uint8` | 2 | | +| ARM_DISARM_REASON_STICK_GESTURE | `uint8` | 1 | | +| ARM_DISARM_REASON_RC_SWITCH | `uint8` | 2 | | +| ARM_DISARM_REASON_COMMAND_INTERNAL | `uint8` | 3 | | +| ARM_DISARM_REASON_COMMAND_EXTERNAL | `uint8` | 4 | | +| ARM_DISARM_REASON_MISSION_START | `uint8` | 5 | | +| ARM_DISARM_REASON_LANDING | `uint8` | 6 | | +| ARM_DISARM_REASON_PREFLIGHT_INACTION | `uint8` | 7 | | +| ARM_DISARM_REASON_KILL_SWITCH | `uint8` | 8 | | +| ARM_DISARM_REASON_RC_BUTTON | `uint8` | 13 | | +| ARM_DISARM_REASON_FAILSAFE | `uint8` | 14 | | +| NAVIGATION_STATE_MANUAL | `uint8` | 0 | Manual mode | +| NAVIGATION_STATE_ALTCTL | `uint8` | 1 | Altitude control mode | +| NAVIGATION_STATE_POSCTL | `uint8` | 2 | Position control mode | +| NAVIGATION_STATE_AUTO_MISSION | `uint8` | 3 | Auto mission mode | +| NAVIGATION_STATE_AUTO_LOITER | `uint8` | 4 | Auto loiter mode | +| NAVIGATION_STATE_AUTO_RTL | `uint8` | 5 | Auto return to launch mode | +| NAVIGATION_STATE_POSITION_SLOW | `uint8` | 6 | | +| NAVIGATION_STATE_FREE5 | `uint8` | 7 | | +| NAVIGATION_STATE_ALTITUDE_CRUISE | `uint8` | 8 | Altitude with Cruise mode | +| NAVIGATION_STATE_FREE3 | `uint8` | 9 | | +| NAVIGATION_STATE_ACRO | `uint8` | 10 | Acro mode | +| NAVIGATION_STATE_FREE2 | `uint8` | 11 | | +| NAVIGATION_STATE_DESCEND | `uint8` | 12 | Descend mode (no position control) | +| NAVIGATION_STATE_TERMINATION | `uint8` | 13 | Termination mode | +| NAVIGATION_STATE_OFFBOARD | `uint8` | 14 | | +| NAVIGATION_STATE_STAB | `uint8` | 15 | Stabilized mode | +| NAVIGATION_STATE_FREE1 | `uint8` | 16 | | +| NAVIGATION_STATE_AUTO_TAKEOFF | `uint8` | 17 | Takeoff | +| NAVIGATION_STATE_AUTO_LAND | `uint8` | 18 | Land | +| NAVIGATION_STATE_AUTO_FOLLOW_TARGET | `uint8` | 19 | Auto Follow | +| NAVIGATION_STATE_AUTO_PRECLAND | `uint8` | 20 | Precision land with landing target | +| NAVIGATION_STATE_ORBIT | `uint8` | 21 | Orbit in a circle | +| NAVIGATION_STATE_AUTO_VTOL_TAKEOFF | `uint8` | 22 | Takeoff, transition, establish loiter | +| NAVIGATION_STATE_EXTERNAL1 | `uint8` | 23 | | +| NAVIGATION_STATE_EXTERNAL2 | `uint8` | 24 | | +| NAVIGATION_STATE_EXTERNAL3 | `uint8` | 25 | | +| NAVIGATION_STATE_EXTERNAL4 | `uint8` | 26 | | +| NAVIGATION_STATE_EXTERNAL5 | `uint8` | 27 | | +| NAVIGATION_STATE_EXTERNAL6 | `uint8` | 28 | | +| NAVIGATION_STATE_EXTERNAL7 | `uint8` | 29 | | +| NAVIGATION_STATE_EXTERNAL8 | `uint8` | 30 | | +| NAVIGATION_STATE_MAX | `uint8` | 31 | | +| FAILURE_NONE | `uint16` | 0 | | +| FAILURE_ROLL | `uint16` | 1 | (1 << 0) | +| FAILURE_PITCH | `uint16` | 2 | (1 << 1) | +| FAILURE_ALT | `uint16` | 4 | (1 << 2) | +| FAILURE_EXT | `uint16` | 8 | (1 << 3) | +| FAILURE_ARM_ESC | `uint16` | 16 | (1 << 4) | +| FAILURE_BATTERY | `uint16` | 32 | (1 << 5) | +| FAILURE_IMBALANCED_PROP | `uint16` | 64 | (1 << 6) | +| FAILURE_MOTOR | `uint16` | 128 | (1 << 7) | +| HIL_STATE_OFF | `uint8` | 0 | | +| HIL_STATE_ON | `uint8` | 1 | | +| VEHICLE_TYPE_UNSPECIFIED | `uint8` | 0 | | +| VEHICLE_TYPE_ROTARY_WING | `uint8` | 1 | | +| VEHICLE_TYPE_FIXED_WING | `uint8` | 2 | | +| VEHICLE_TYPE_ROVER | `uint8` | 3 | | +| FAILSAFE_DEFER_STATE_DISABLED | `uint8` | 0 | | +| FAILSAFE_DEFER_STATE_ENABLED | `uint8` | 1 | | +| FAILSAFE_DEFER_STATE_WOULD_FAILSAFE | `uint8` | 2 | Failsafes deferred, but would trigger a failsafe | + +## Source Message + +[Source file (GitHub)](https://github.com/PX4/PX4-Autopilot/blob/main/msg/px4_msgs_old/msg/VehicleStatusV2.msg) + +:::details +Click here to see original file + +```c +# Encodes the system state of the vehicle published by commander + +uint32 MESSAGE_VERSION = 2 + +uint64 timestamp # time since system start (microseconds) + +uint64 armed_time # Arming timestamp (microseconds) +uint64 takeoff_time # Takeoff timestamp (microseconds) + +uint8 arming_state +uint8 ARMING_STATE_DISARMED = 1 +uint8 ARMING_STATE_ARMED = 2 + +uint8 latest_arming_reason +uint8 latest_disarming_reason +uint8 ARM_DISARM_REASON_STICK_GESTURE = 1 +uint8 ARM_DISARM_REASON_RC_SWITCH = 2 +uint8 ARM_DISARM_REASON_COMMAND_INTERNAL = 3 +uint8 ARM_DISARM_REASON_COMMAND_EXTERNAL = 4 +uint8 ARM_DISARM_REASON_MISSION_START = 5 +uint8 ARM_DISARM_REASON_LANDING = 6 +uint8 ARM_DISARM_REASON_PREFLIGHT_INACTION = 7 +uint8 ARM_DISARM_REASON_KILL_SWITCH = 8 +uint8 ARM_DISARM_REASON_RC_BUTTON = 13 +uint8 ARM_DISARM_REASON_FAILSAFE = 14 + +uint64 nav_state_timestamp # time when current nav_state activated + +uint8 nav_state_user_intention # Mode that the user selected (might be different from nav_state in a failsafe situation) + +uint8 nav_state # Currently active mode +uint8 NAVIGATION_STATE_MANUAL = 0 # Manual mode +uint8 NAVIGATION_STATE_ALTCTL = 1 # Altitude control mode +uint8 NAVIGATION_STATE_POSCTL = 2 # Position control mode +uint8 NAVIGATION_STATE_AUTO_MISSION = 3 # Auto mission mode +uint8 NAVIGATION_STATE_AUTO_LOITER = 4 # Auto loiter mode +uint8 NAVIGATION_STATE_AUTO_RTL = 5 # Auto return to launch mode +uint8 NAVIGATION_STATE_POSITION_SLOW = 6 +uint8 NAVIGATION_STATE_FREE5 = 7 +uint8 NAVIGATION_STATE_ALTITUDE_CRUISE = 8 # Altitude with Cruise mode +uint8 NAVIGATION_STATE_FREE3 = 9 +uint8 NAVIGATION_STATE_ACRO = 10 # Acro mode +uint8 NAVIGATION_STATE_FREE2 = 11 +uint8 NAVIGATION_STATE_DESCEND = 12 # Descend mode (no position control) +uint8 NAVIGATION_STATE_TERMINATION = 13 # Termination mode +uint8 NAVIGATION_STATE_OFFBOARD = 14 +uint8 NAVIGATION_STATE_STAB = 15 # Stabilized mode +uint8 NAVIGATION_STATE_FREE1 = 16 +uint8 NAVIGATION_STATE_AUTO_TAKEOFF = 17 # Takeoff +uint8 NAVIGATION_STATE_AUTO_LAND = 18 # Land +uint8 NAVIGATION_STATE_AUTO_FOLLOW_TARGET = 19 # Auto Follow +uint8 NAVIGATION_STATE_AUTO_PRECLAND = 20 # Precision land with landing target +uint8 NAVIGATION_STATE_ORBIT = 21 # Orbit in a circle +uint8 NAVIGATION_STATE_AUTO_VTOL_TAKEOFF = 22 # Takeoff, transition, establish loiter +uint8 NAVIGATION_STATE_EXTERNAL1 = 23 +uint8 NAVIGATION_STATE_EXTERNAL2 = 24 +uint8 NAVIGATION_STATE_EXTERNAL3 = 25 +uint8 NAVIGATION_STATE_EXTERNAL4 = 26 +uint8 NAVIGATION_STATE_EXTERNAL5 = 27 +uint8 NAVIGATION_STATE_EXTERNAL6 = 28 +uint8 NAVIGATION_STATE_EXTERNAL7 = 29 +uint8 NAVIGATION_STATE_EXTERNAL8 = 30 +uint8 NAVIGATION_STATE_MAX = 31 + +uint8 executor_in_charge # Current mode executor in charge (0=Autopilot) +uint8 nav_state_display # User-visible nav state sent via MAVLink (executor state if active, otherwise nav_state) + +uint32 valid_nav_states_mask # Bitmask for all valid nav_state values +uint32 can_set_nav_states_mask # Bitmask for all modes that a user can select + +# Bitmask of detected failures +uint16 failure_detector_status +uint16 FAILURE_NONE = 0 +uint16 FAILURE_ROLL = 1 # (1 << 0) +uint16 FAILURE_PITCH = 2 # (1 << 1) +uint16 FAILURE_ALT = 4 # (1 << 2) +uint16 FAILURE_EXT = 8 # (1 << 3) +uint16 FAILURE_ARM_ESC = 16 # (1 << 4) +uint16 FAILURE_BATTERY = 32 # (1 << 5) +uint16 FAILURE_IMBALANCED_PROP = 64 # (1 << 6) +uint16 FAILURE_MOTOR = 128 # (1 << 7) + +uint8 hil_state +uint8 HIL_STATE_OFF = 0 +uint8 HIL_STATE_ON = 1 + +# Current vehicle locomotion method. A vehicle can have different methods (e.g. VTOL transitions from RW to FW method) +uint8 vehicle_type +uint8 VEHICLE_TYPE_UNSPECIFIED = 0 +uint8 VEHICLE_TYPE_ROTARY_WING = 1 +uint8 VEHICLE_TYPE_FIXED_WING = 2 +uint8 VEHICLE_TYPE_ROVER = 3 + +uint8 FAILSAFE_DEFER_STATE_DISABLED = 0 +uint8 FAILSAFE_DEFER_STATE_ENABLED = 1 +uint8 FAILSAFE_DEFER_STATE_WOULD_FAILSAFE = 2 # Failsafes deferred, but would trigger a failsafe + +bool failsafe # true if system is in failsafe state (e.g.:RTL, Hover, Terminate, ...) +bool failsafe_and_user_took_over # true if system is in failsafe state but the user took over control +uint8 failsafe_defer_state # one of FAILSAFE_DEFER_STATE_* + +# Link loss +bool gcs_connection_lost # datalink to GCS lost +uint8 gcs_connection_lost_counter # counts unique GCS connection lost events +bool high_latency_data_link_lost # Set to true if the high latency data link (eg. RockBlock Iridium 9603 telemetry module) is lost + +# VTOL flags +bool is_vtol # True if the system is VTOL capable +bool is_vtol_tailsitter # True if the system performs a 90° pitch down rotation during transition from MC to FW +bool in_transition_mode # True if VTOL is doing a transition +bool in_transition_to_fw # True if VTOL is doing a transition from MC to FW + +# MAVLink identification +uint8 system_type # system type, contains mavlink MAV_TYPE +uint8 system_id # system id, contains MAVLink's system ID field +uint8 component_id # subsystem / component id, contains MAVLink's component ID field + +bool safety_button_available # Set to true if a safety button is connected +bool safety_off # Set to true if safety is off + +bool power_input_valid # set if input power is valid +bool usb_connected # set to true (never cleared) once telemetry received from usb link + +bool open_drone_id_system_present +bool open_drone_id_system_healthy + +bool parachute_system_present +bool parachute_system_healthy + +bool traffic_avoidance_system_present + +bool rc_calibration_in_progress +bool calibration_enabled + +bool pre_flight_checks_pass # true if all checks necessary to arm pass +``` + +::: diff --git a/docs/zh/msg_docs/VehicleStatusV3.md b/docs/zh/msg_docs/VehicleStatusV3.md new file mode 100644 index 0000000000..67def582ba --- /dev/null +++ b/docs/zh/msg_docs/VehicleStatusV3.md @@ -0,0 +1,248 @@ +--- +pageClass: is-wide-page +--- + +# VehicleStatusV3 (UORB message) + +Encodes the system state of the vehicle published by commander. + +**TOPICS:** vehicle_status_v3 + +## Fields + +| 参数名 | 类型 | Unit [Frame] | Range/Enum | 描述 | +| ---------------------------------------------------------------------------------------------------------------- | -------- | ---------------------------------------------------------------- | ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| timestamp | `uint64` | | | time since system start (microseconds) | +| armed_time | `uint64` | | | Arming timestamp (microseconds) | +| takeoff_time | `uint64` | | | Takeoff timestamp (microseconds) | +| arming_state | `uint8` | | | | +| latest_arming_reason | `uint8` | | | | +| latest_disarming_reason | `uint8` | | | | +| nav_state_timestamp | `uint64` | | | time when current nav_state activated | +| nav_state_user_intention | `uint8` | | | Mode that the user selected (might be different from nav_state in a failsafe situation) | +| nav_state | `uint8` | | | Currently active mode | +| executor_in_charge | `uint8` | | | Current mode executor in charge (0=Autopilot) | +| nav_state_display | `uint8` | | | User-visible nav state sent via MAVLink (executor state if active, otherwise nav_state) | +| valid_nav_states_mask | `uint32` | | | Bitmask for all valid nav_state values | +| can_set_nav_states_mask | `uint32` | | | Bitmask for all modes that a user can select | +| hil_state | `uint8` | | | | +| vehicle_type | `uint8` | | | | +| failsafe | `bool` | | | true if system is in failsafe state (e.g.:RTL, Hover, Terminate, ...) | +| failsafe_and_user_took_over | `bool` | | | true if system is in failsafe state but the user took over control | +| failsafe_defer_state | `uint8` | | | one of FAILSAFE_DEFER_STATE_\* | +| gcs_connection_lost | `bool` | | | datalink to GCS lost | +| gcs_connection_lost_counter | `uint8` | | | counts unique GCS connection lost events | +| high_latency_data_link_lost | `bool` | | | Set to true if the high latency data link (eg. RockBlock Iridium 9603 telemetry module) is lost | +| is_vtol | `bool` | | | True if the system is VTOL capable | +| is_vtol_tailsitter | `bool` | | | True if the system performs a 90° pitch down rotation during transition from MC to FW | +| in_transition_mode | `bool` | | | True if VTOL is doing a transition | +| in_transition_to_fw | `bool` | | | True if VTOL is doing a transition from MC to FW | +| system_type | `uint8` | | | system type, contains mavlink MAV_TYPE | +| system_id | `uint8` | | | system id, contains MAVLink's system ID field | +| component_id | `uint8` | | | subsystem / component id, contains MAVLink's component ID field | +| safety_button_available | `bool` | | | Set to true if a safety button is connected | +| safety_off | `bool` | | | Set to true if safety is off | +| power_input_valid | `bool` | | | set if input power is valid | +| usb_connected | `bool` | | | set to true (never cleared) once telemetry received from usb link | +| open_drone_id_system_present | `bool` | | | | +| open_drone_id_system_healthy | `bool` | | | | +| parachute_system_present | `bool` | | | | +| parachute_system_healthy | `bool` | | | | +| traffic_avoidance_system_present | `bool` | | | | +| rc_calibration_in_progress | `bool` | | | | +| calibration_enabled | `bool` | | | | +| pre_flight_checks_pass | `bool` | | | true if all checks necessary to arm pass | + +## Constants + +| 参数名 | 类型 | 值 | 描述 | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -- | ----------------------------------------------------- | +| MESSAGE_VERSION | `uint32` | 3 | | +| ARMING_STATE_DISARMED | `uint8` | 1 | | +| ARMING_STATE_ARMED | `uint8` | 2 | | +| ARM_DISARM_REASON_STICK_GESTURE | `uint8` | 1 | | +| ARM_DISARM_REASON_RC_SWITCH | `uint8` | 2 | | +| ARM_DISARM_REASON_COMMAND_INTERNAL | `uint8` | 3 | | +| ARM_DISARM_REASON_COMMAND_EXTERNAL | `uint8` | 4 | | +| ARM_DISARM_REASON_MISSION_START | `uint8` | 5 | | +| ARM_DISARM_REASON_LANDING | `uint8` | 6 | | +| ARM_DISARM_REASON_PREFLIGHT_INACTION | `uint8` | 7 | | +| ARM_DISARM_REASON_KILL_SWITCH | `uint8` | 8 | | +| ARM_DISARM_REASON_RC_BUTTON | `uint8` | 13 | | +| ARM_DISARM_REASON_FAILSAFE | `uint8` | 14 | | +| NAVIGATION_STATE_MANUAL | `uint8` | 0 | Manual mode | +| NAVIGATION_STATE_ALTCTL | `uint8` | 1 | Altitude control mode | +| NAVIGATION_STATE_POSCTL | `uint8` | 2 | Position control mode | +| NAVIGATION_STATE_AUTO_MISSION | `uint8` | 3 | Auto mission mode | +| NAVIGATION_STATE_AUTO_LOITER | `uint8` | 4 | Auto loiter mode | +| NAVIGATION_STATE_AUTO_RTL | `uint8` | 5 | Auto return to launch mode | +| NAVIGATION_STATE_POSITION_SLOW | `uint8` | 6 | | +| NAVIGATION_STATE_FREE5 | `uint8` | 7 | | +| NAVIGATION_STATE_ALTITUDE_CRUISE | `uint8` | 8 | Altitude with Cruise mode | +| NAVIGATION_STATE_FREE3 | `uint8` | 9 | | +| NAVIGATION_STATE_ACRO | `uint8` | 10 | Acro mode | +| NAVIGATION_STATE_FREE2 | `uint8` | 11 | | +| NAVIGATION_STATE_DESCEND | `uint8` | 12 | Descend mode (no position control) | +| NAVIGATION_STATE_TERMINATION | `uint8` | 13 | Termination mode | +| NAVIGATION_STATE_OFFBOARD | `uint8` | 14 | | +| NAVIGATION_STATE_STAB | `uint8` | 15 | Stabilized mode | +| NAVIGATION_STATE_FREE1 | `uint8` | 16 | | +| NAVIGATION_STATE_AUTO_TAKEOFF | `uint8` | 17 | Takeoff | +| NAVIGATION_STATE_AUTO_LAND | `uint8` | 18 | Land | +| NAVIGATION_STATE_AUTO_FOLLOW_TARGET | `uint8` | 19 | Auto Follow | +| NAVIGATION_STATE_AUTO_PRECLAND | `uint8` | 20 | Precision land with landing target | +| NAVIGATION_STATE_ORBIT | `uint8` | 21 | Orbit in a circle | +| NAVIGATION_STATE_AUTO_VTOL_TAKEOFF | `uint8` | 22 | Takeoff, transition, establish loiter | +| NAVIGATION_STATE_EXTERNAL1 | `uint8` | 23 | | +| NAVIGATION_STATE_EXTERNAL2 | `uint8` | 24 | | +| NAVIGATION_STATE_EXTERNAL3 | `uint8` | 25 | | +| NAVIGATION_STATE_EXTERNAL4 | `uint8` | 26 | | +| NAVIGATION_STATE_EXTERNAL5 | `uint8` | 27 | | +| NAVIGATION_STATE_EXTERNAL6 | `uint8` | 28 | | +| NAVIGATION_STATE_EXTERNAL7 | `uint8` | 29 | | +| NAVIGATION_STATE_EXTERNAL8 | `uint8` | 30 | | +| NAVIGATION_STATE_MAX | `uint8` | 31 | | +| HIL_STATE_OFF | `uint8` | 0 | | +| HIL_STATE_ON | `uint8` | 1 | | +| VEHICLE_TYPE_UNSPECIFIED | `uint8` | 0 | | +| VEHICLE_TYPE_ROTARY_WING | `uint8` | 1 | | +| VEHICLE_TYPE_FIXED_WING | `uint8` | 2 | | +| VEHICLE_TYPE_ROVER | `uint8` | 3 | | +| FAILSAFE_DEFER_STATE_DISABLED | `uint8` | 0 | | +| FAILSAFE_DEFER_STATE_ENABLED | `uint8` | 1 | | +| FAILSAFE_DEFER_STATE_WOULD_FAILSAFE | `uint8` | 2 | Failsafes deferred, but would trigger a failsafe | + +## Source Message + +[Source file (GitHub)](https://github.com/PX4/PX4-Autopilot/blob/main/msg/px4_msgs_old/msg/VehicleStatusV3.msg) + +:::details +Click here to see original file + +```c +# Encodes the system state of the vehicle published by commander + +uint32 MESSAGE_VERSION = 3 + +uint64 timestamp # time since system start (microseconds) + +uint64 armed_time # Arming timestamp (microseconds) +uint64 takeoff_time # Takeoff timestamp (microseconds) + +uint8 arming_state +uint8 ARMING_STATE_DISARMED = 1 +uint8 ARMING_STATE_ARMED = 2 + +uint8 latest_arming_reason +uint8 latest_disarming_reason +uint8 ARM_DISARM_REASON_STICK_GESTURE = 1 +uint8 ARM_DISARM_REASON_RC_SWITCH = 2 +uint8 ARM_DISARM_REASON_COMMAND_INTERNAL = 3 +uint8 ARM_DISARM_REASON_COMMAND_EXTERNAL = 4 +uint8 ARM_DISARM_REASON_MISSION_START = 5 +uint8 ARM_DISARM_REASON_LANDING = 6 +uint8 ARM_DISARM_REASON_PREFLIGHT_INACTION = 7 +uint8 ARM_DISARM_REASON_KILL_SWITCH = 8 +uint8 ARM_DISARM_REASON_RC_BUTTON = 13 +uint8 ARM_DISARM_REASON_FAILSAFE = 14 + +uint64 nav_state_timestamp # time when current nav_state activated + +uint8 nav_state_user_intention # Mode that the user selected (might be different from nav_state in a failsafe situation) + +uint8 nav_state # Currently active mode +uint8 NAVIGATION_STATE_MANUAL = 0 # Manual mode +uint8 NAVIGATION_STATE_ALTCTL = 1 # Altitude control mode +uint8 NAVIGATION_STATE_POSCTL = 2 # Position control mode +uint8 NAVIGATION_STATE_AUTO_MISSION = 3 # Auto mission mode +uint8 NAVIGATION_STATE_AUTO_LOITER = 4 # Auto loiter mode +uint8 NAVIGATION_STATE_AUTO_RTL = 5 # Auto return to launch mode +uint8 NAVIGATION_STATE_POSITION_SLOW = 6 +uint8 NAVIGATION_STATE_FREE5 = 7 +uint8 NAVIGATION_STATE_ALTITUDE_CRUISE = 8 # Altitude with Cruise mode +uint8 NAVIGATION_STATE_FREE3 = 9 +uint8 NAVIGATION_STATE_ACRO = 10 # Acro mode +uint8 NAVIGATION_STATE_FREE2 = 11 +uint8 NAVIGATION_STATE_DESCEND = 12 # Descend mode (no position control) +uint8 NAVIGATION_STATE_TERMINATION = 13 # Termination mode +uint8 NAVIGATION_STATE_OFFBOARD = 14 +uint8 NAVIGATION_STATE_STAB = 15 # Stabilized mode +uint8 NAVIGATION_STATE_FREE1 = 16 +uint8 NAVIGATION_STATE_AUTO_TAKEOFF = 17 # Takeoff +uint8 NAVIGATION_STATE_AUTO_LAND = 18 # Land +uint8 NAVIGATION_STATE_AUTO_FOLLOW_TARGET = 19 # Auto Follow +uint8 NAVIGATION_STATE_AUTO_PRECLAND = 20 # Precision land with landing target +uint8 NAVIGATION_STATE_ORBIT = 21 # Orbit in a circle +uint8 NAVIGATION_STATE_AUTO_VTOL_TAKEOFF = 22 # Takeoff, transition, establish loiter +uint8 NAVIGATION_STATE_EXTERNAL1 = 23 +uint8 NAVIGATION_STATE_EXTERNAL2 = 24 +uint8 NAVIGATION_STATE_EXTERNAL3 = 25 +uint8 NAVIGATION_STATE_EXTERNAL4 = 26 +uint8 NAVIGATION_STATE_EXTERNAL5 = 27 +uint8 NAVIGATION_STATE_EXTERNAL6 = 28 +uint8 NAVIGATION_STATE_EXTERNAL7 = 29 +uint8 NAVIGATION_STATE_EXTERNAL8 = 30 +uint8 NAVIGATION_STATE_MAX = 31 + +uint8 executor_in_charge # Current mode executor in charge (0=Autopilot) +uint8 nav_state_display # User-visible nav state sent via MAVLink (executor state if active, otherwise nav_state) + +uint32 valid_nav_states_mask # Bitmask for all valid nav_state values +uint32 can_set_nav_states_mask # Bitmask for all modes that a user can select + +uint8 hil_state +uint8 HIL_STATE_OFF = 0 +uint8 HIL_STATE_ON = 1 + +# Current vehicle locomotion method. A vehicle can have different methods (e.g. VTOL transitions from RW to FW method) +uint8 vehicle_type +uint8 VEHICLE_TYPE_UNSPECIFIED = 0 +uint8 VEHICLE_TYPE_ROTARY_WING = 1 +uint8 VEHICLE_TYPE_FIXED_WING = 2 +uint8 VEHICLE_TYPE_ROVER = 3 + +uint8 FAILSAFE_DEFER_STATE_DISABLED = 0 +uint8 FAILSAFE_DEFER_STATE_ENABLED = 1 +uint8 FAILSAFE_DEFER_STATE_WOULD_FAILSAFE = 2 # Failsafes deferred, but would trigger a failsafe + +bool failsafe # true if system is in failsafe state (e.g.:RTL, Hover, Terminate, ...) +bool failsafe_and_user_took_over # true if system is in failsafe state but the user took over control +uint8 failsafe_defer_state # one of FAILSAFE_DEFER_STATE_* + +# Link loss +bool gcs_connection_lost # datalink to GCS lost +uint8 gcs_connection_lost_counter # counts unique GCS connection lost events +bool high_latency_data_link_lost # Set to true if the high latency data link (eg. RockBlock Iridium 9603 telemetry module) is lost + +# VTOL flags +bool is_vtol # True if the system is VTOL capable +bool is_vtol_tailsitter # True if the system performs a 90° pitch down rotation during transition from MC to FW +bool in_transition_mode # True if VTOL is doing a transition +bool in_transition_to_fw # True if VTOL is doing a transition from MC to FW + +# MAVLink identification +uint8 system_type # system type, contains mavlink MAV_TYPE +uint8 system_id # system id, contains MAVLink's system ID field +uint8 component_id # subsystem / component id, contains MAVLink's component ID field + +bool safety_button_available # Set to true if a safety button is connected +bool safety_off # Set to true if safety is off + +bool power_input_valid # set if input power is valid +bool usb_connected # set to true (never cleared) once telemetry received from usb link + +bool open_drone_id_system_present +bool open_drone_id_system_healthy + +bool parachute_system_present +bool parachute_system_healthy + +bool traffic_avoidance_system_present + +bool rc_calibration_in_progress +bool calibration_enabled + +bool pre_flight_checks_pass # true if all checks necessary to arm pass +``` + +::: diff --git a/docs/zh/msg_docs/VtolVehicleStatus.md b/docs/zh/msg_docs/VtolVehicleStatus.md index 99e88e333c..ecb4cd8833 100644 --- a/docs/zh/msg_docs/VtolVehicleStatus.md +++ b/docs/zh/msg_docs/VtolVehicleStatus.md @@ -6,7 +6,7 @@ pageClass: is-wide-page VEHICLE_VTOL_STATE, should match 1:1 MAVLinks's MAV_VTOL_STATE. -**TOPICS:** vtol_vehiclestatus +**TOPICS:** vtol_vehicle_status ## Fields @@ -18,14 +18,14 @@ VEHICLE_VTOL_STATE, should match 1:1 MAVLinks's MAV_VTOL_STATE. ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------- | - | -- | -| MESSAGE_VERSION | `uint32` | 0 | | -| VEHICLE_VTOL_STATE_UNDEFINED | `uint8` | 0 | | -| VEHICLE_VTOL_STATE_TRANSITION_TO_FW | `uint8` | 1 | | -| VEHICLE_VTOL_STATE_TRANSITION_TO_MC | `uint8` | 2 | | -| VEHICLE_VTOL_STATE_MC | `uint8` | 3 | | -| VEHICLE_VTOL_STATE_FW | `uint8` | 4 | | +| 参数名 | 类型 | 值 | 描述 | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | - | -- | +| MESSAGE_VERSION | `uint32` | 0 | | +| VEHICLE_VTOL_STATE_UNDEFINED | `uint8` | 0 | | +| VEHICLE_VTOL_STATE_TRANSITION_TO_FW | `uint8` | 1 | | +| VEHICLE_VTOL_STATE_TRANSITION_TO_MC | `uint8` | 2 | | +| VEHICLE_VTOL_STATE_MC | `uint8` | 3 | | +| VEHICLE_VTOL_STATE_FW | `uint8` | 4 | | ## Source Message diff --git a/docs/zh/msg_docs/Vtx.md b/docs/zh/msg_docs/Vtx.md index 22ec9c8b2f..fdf99d022e 100644 --- a/docs/zh/msg_docs/Vtx.md +++ b/docs/zh/msg_docs/Vtx.md @@ -24,20 +24,20 @@ pageClass: is-wide-page ## Constants -| 参数名 | 类型 | 值 | 描述 | -| ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | --- | ----------------------------------------- | -| BAND_NAME_LENGTH | `uint8` | 12 | | -| POWER_LABEL_LENGTH | `uint8` | 4 | | -| PROTOCOL_NONE | `uint8` | 0 | No protocol is detected, usually an error | -| PROTOCOL_SMART_AUDIO_V1 | `uint8` | 10 | | -| PROTOCOL_SMART_AUDIO_V2 | `uint8` | 20 | | -| PROTOCOL_SMART_AUDIO_V2_1 | `uint8` | 21 | | -| PROTOCOL_TRAMP | `uint8` | 100 | | -| DEVICE_UNKNOWN | `uint8` | 0 | | -| DEVICE_PEAK_THOR_T67 | `uint8` | 20 | | -| DEVICE_RUSH_MAX_SOLO | `uint8` | 40 | | -| MODE_NORMAL | `uint8` | 0 | | -| MODE_PIT | `uint8` | 1 | | +| 参数名 | 类型 | 值 | 描述 | +| ----------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | --- | ----------------------------------------- | +| BAND_NAME_LENGTH | `uint8` | 12 | | +| POWER_LABEL_LENGTH | `uint8` | 4 | | +| PROTOCOL_NONE | `uint8` | 0 | No protocol is detected, usually an error | +| PROTOCOL_SMART_AUDIO_V1 | `uint8` | 10 | | +| PROTOCOL_SMART_AUDIO_V2 | `uint8` | 20 | | +| PROTOCOL_SMART_AUDIO_V2_1 | `uint8` | 21 | | +| PROTOCOL_TRAMP | `uint8` | 100 | | +| DEVICE_UNKNOWN | `uint8` | 0 | | +| DEVICE_PEAK_THOR_T67 | `uint8` | 20 | | +| DEVICE_RUSH_MAX_SOLO | `uint8` | 40 | | +| MODE_NORMAL | `uint8` | 0 | | +| MODE_PIT | `uint8` | 1 | | ## Source Message diff --git a/docs/zh/msg_docs/Wind.md b/docs/zh/msg_docs/Wind.md index ccc25c2d3a..641bb0dfb4 100644 --- a/docs/zh/msg_docs/Wind.md +++ b/docs/zh/msg_docs/Wind.md @@ -28,9 +28,9 @@ Published by the navigation filter (EKF2) for use by other flight modules and li ## Constants -| 参数名 | 类型 | 值 | 描述 | -| -------------------------------------------------------------------- | -------- | - | -- | -| MESSAGE_VERSION | `uint32` | 0 | | +| 参数名 | 类型 | 值 | 描述 | +| ------------------------------------------------------------------ | -------- | - | -- | +| MESSAGE_VERSION | `uint32` | 0 | | ## Source Message diff --git a/docs/zh/msg_docs/YawEstimatorStatus.md b/docs/zh/msg_docs/YawEstimatorStatus.md index 74521ece52..acbf213c2a 100644 --- a/docs/zh/msg_docs/YawEstimatorStatus.md +++ b/docs/zh/msg_docs/YawEstimatorStatus.md @@ -4,7 +4,7 @@ pageClass: is-wide-page # YawEstimatorStatus (UORB message) -**TOPICS:** yaw_estimatorstatus +**TOPICS:** yaw_estimator_status ## Fields diff --git a/docs/zh/msg_docs/index.md b/docs/zh/msg_docs/index.md index b36a58c735..45396a8c42 100644 --- a/docs/zh/msg_docs/index.md +++ b/docs/zh/msg_docs/index.md @@ -18,15 +18,16 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m - [AirspeedValidated](AirspeedValidated.md) — Validated airspeed. - [ArmingCheckReply](ArmingCheckReply.md) — Arming check reply. - [ArmingCheckRequest](ArmingCheckRequest.md) — Arming check request. +- [AuxGlobalPosition](AuxGlobalPosition.md) — Auxiliary global position. - [BatteryStatus](BatteryStatus.md) — Battery status. - [ConfigOverrides](ConfigOverrides.md) — Configurable overrides by (external) modes or mode executors. - [Event](Event.md) — Events interface. -- [FixedWingLateralSetpoint](FixedWingLateralSetpoint.md) — Fixed Wing Lateral Setpoint message. Used by the fw_lateral_longitudinal_control module. At least one of course, airspeed_direction, or lateral_acceleration must be finite. -- [FixedWingLongitudinalSetpoint](FixedWingLongitudinalSetpoint.md) — Fixed Wing Longitudinal Setpoint message. Used by the fw_lateral_longitudinal_control module. If pitch_direct and throttle_direct are not both finite, then the controller relies on altitude/height_rate and equivalent_airspeed to control vertical motion. If both altitude and height_rate are NAN, the controller maintains the current altitude. -- [GotoSetpoint](GotoSetpoint.md) — Position and (optional) heading setpoints with corresponding speed constraints. Setpoints are intended as inputs to position and heading smoothers, respectively. Setpoints do not need to be kinematically consistent. Optional heading setpoints may be specified as controlled by the respective flag. Unset optional setpoints are not controlled. Unset optional constraints default to vehicle specifications. +- [FixedWingLateralSetpoint](FixedWingLateralSetpoint.md) — Fixed Wing Lateral Setpoint message. +- [FixedWingLongitudinalSetpoint](FixedWingLongitudinalSetpoint.md) — Fixed Wing Longitudinal Setpoint message. +- [GotoSetpoint](GotoSetpoint.md) — Position and (optional) heading setpoints with corresponding speed constraints. - [HomePosition](HomePosition.md) — GPS home position in WGS84 coordinates. -- [LateralControlConfiguration](LateralControlConfiguration.md) — Fixed Wing Lateral Control Configuration message. Used by the fw_lateral_longitudinal_control module to constrain FixedWingLateralSetpoint messages. -- [LongitudinalControlConfiguration](LongitudinalControlConfiguration.md) — Fixed Wing Longitudinal Control Configuration message. Used by the fw_lateral_longitudinal_control module and TECS to constrain FixedWingLongitudinalSetpoint messages. and configure the resultant setpoints. +- [LateralControlConfiguration](LateralControlConfiguration.md) — Fixed Wing Lateral Control Configuration message. +- [LongitudinalControlConfiguration](LongitudinalControlConfiguration.md) — Fixed Wing Longitudinal Control Configuration message. - [ManualControlSetpoint](ManualControlSetpoint.md) - [ModeCompleted](ModeCompleted.md) — Mode completion result, published by an active mode. The possible values of nav_state are defined in the VehicleStatus msg. Note that this is not always published (e.g. when a user switches modes or on. failsafe activation). - [RaptorInput](RaptorInput.md) — Raptor Input. @@ -39,7 +40,7 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m - [VehicleAttitude](VehicleAttitude.md) — This is similar to the mavlink message ATTITUDE_QUATERNION, but for onboard use. The quaternion uses the Hamilton convention, and the order is q(w, x, y, z). - [VehicleAttitudeSetpoint](VehicleAttitudeSetpoint.md) - [VehicleCommand](VehicleCommand.md) — Vehicle Command uORB message. Used for commanding a mission / action / etc. Follows the MAVLink COMMAND_INT / COMMAND_LONG definition. -- [VehicleCommandAck](VehicleCommandAck.md) — Vehicle Command Ackonwledgement uORB message. Used for acknowledging the vehicle command being received. Follows the MAVLink COMMAND_ACK message definition. +- [VehicleCommandAck](VehicleCommandAck.md) — Vehicle Command Acknowledgement uORB message. - [VehicleControlMode](VehicleControlMode.md) - [VehicleGlobalPosition](VehicleGlobalPosition.md) — Fused global position in WGS84. This struct contains global position estimation. It is not the raw GPS. measurement (@see vehicle_gps_position). This topic is usually published by the position. estimator, which will take more sources of information into account than just GPS,. e.g. control inputs of the vehicle in a Kalman-filter implementation. - [VehicleLandDetected](VehicleLandDetected.md) @@ -84,6 +85,8 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m - [DistanceSensorModeChangeRequest](DistanceSensorModeChangeRequest.md) - [DronecanNodeStatus](DronecanNodeStatus.md) - [Ekf2Timestamps](Ekf2Timestamps.md) — this message contains the (relative) timestamps of the sensor inputs used by EKF2. It can be used for reproducible replay. +- [EscEepromRead](EscEepromRead.md) +- [EscEepromWrite](EscEepromWrite.md) - [EscReport](EscReport.md) - [EscStatus](EscStatus.md) - [EstimatorAidSource1d](EstimatorAidSource1d.md) @@ -92,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) @@ -189,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) @@ -266,6 +271,12 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m - [HomePositionV0](HomePositionV0.md) — GPS home position in WGS84 coordinates. - [RegisterExtComponentReplyV0](RegisterExtComponentReplyV0.md) - [RegisterExtComponentRequestV0](RegisterExtComponentRequestV0.md) — Request to register an external component. +- [RegisterExtComponentRequestV1](RegisterExtComponentRequestV1.md) — Request to register an external component. - [VehicleAttitudeSetpointV0](VehicleAttitudeSetpointV0.md) +- [VehicleCommandAckV0](VehicleCommandAckV0.md) — Vehicle Command Ackonwledgement uORB message. Used for acknowledging the vehicle command being received. Follows the MAVLink COMMAND_ACK message definition. +- [VehicleGlobalPositionV0](VehicleGlobalPositionV0.md) — Fused global position in WGS84. This struct contains global position estimation. It is not the raw GPS. measurement (@see vehicle_gps_position). This topic is usually published by the position. estimator, which will take more sources of information into account than just GPS,. e.g. control inputs of the vehicle in a Kalman-filter implementation. - [VehicleLocalPositionV0](VehicleLocalPositionV0.md) — Fused local position in NED. The coordinate system origin is the vehicle position at the time when the EKF2-module was started. - [VehicleStatusV0](VehicleStatusV0.md) — Encodes the system state of the vehicle published by commander. +- [VehicleStatusV1](VehicleStatusV1.md) — Encodes the system state of the vehicle published by commander. +- [VehicleStatusV2](VehicleStatusV2.md) — Encodes the system state of the vehicle published by commander. +- [VehicleStatusV3](VehicleStatusV3.md) — Encodes the system state of the vehicle published by commander. diff --git a/docs/zh/neural_networks/mc_neural_network_control.md b/docs/zh/neural_networks/mc_neural_network_control.md index 8e0e94c327..55ad891cf7 100644 --- a/docs/zh/neural_networks/mc_neural_network_control.md +++ b/docs/zh/neural_networks/mc_neural_network_control.md @@ -17,7 +17,7 @@ Note that after training the network you will need to update and rebuild PX4. TLFM is a mature inference library intended for use on embedded devices. It has support for several architectures, so there is a high likelihood that you can build it for the board you want to use. -If not, there are other possible NN frameworks, such as [Eigen](https://eigen.tuxfamily.org/index.php?title=Main_Page) and [Executorch](https://pytorch.org/executorch-overview). +If not, there are other possible NN frameworks, such as [Eigen](https://eigen.tuxfamily.org/index.php?title=Main_Page) and [Executorch](https://docs.pytorch.org/executorch/stable/intro-overview.html). This document explains how you can include the module in your PX4 build, and provides a broad overview of how it works. The other documents in the section provide more information about the integration, allowing you to replace the NN with a version trained on different data, or even to replace the TLFM library altogether. diff --git a/docs/zh/neural_networks/nn_module_utilities.md b/docs/zh/neural_networks/nn_module_utilities.md index 7c9054ed17..cab2f4cfc5 100644 --- a/docs/zh/neural_networks/nn_module_utilities.md +++ b/docs/zh/neural_networks/nn_module_utilities.md @@ -41,7 +41,7 @@ This only works for some flight controllers, so you might have to use an RC cont This specifies what you want to create, you can read more about this in the [Control Interface](../ros2/px4_ros2_control_interface.md). In this case we register an arming check and a mode. 2. Wait for a [RegisterExtComponentReply](../msg_docs/RegisterExtComponentReply.md). - This will give feedback on wether the mode registration was successful, and what the mode and arming check id is for the new mode. + This will give feedback on whether the mode registration was successful, and what the mode and arming check id is for the new mode. 3. [Optional] With the mode id, publish a [VehicleControlMode](../msg_docs/VehicleControlMode.md) message on the `config_control_setpoints` topic. Here you can configure what other modules run in parallel. The example controller replaces everything, so it turns off allocation. @@ -71,7 +71,7 @@ For these messages to be saved in your logs you need to include `debug` in the [ The module has two includes for measuring the inference times. The first one is a driver that works on the actual flight controller units, but a second one, `chrono`, is loaded for SITL testing. -Which timing library is included and used is based on wether PX4 is built with NUTTX or not. +Which timing library is included and used is based on whether PX4 is built with NUTTX or not. ## Changing the setpoint diff --git a/docs/zh/neural_networks/raptor.md b/docs/zh/neural_networks/raptor.md index e7b9c60d68..4983568032 100644 --- a/docs/zh/neural_networks/raptor.md +++ b/docs/zh/neural_networks/raptor.md @@ -1,6 +1,6 @@ # RAPTOR: A Neural Network Module for Adaptive Quadrotor Control - + :::warning This is an experimental module. diff --git a/docs/zh/payloads/generic_actuator_control.md b/docs/zh/payloads/generic_actuator_control.md index 127d59c99f..85bf32654f 100644 --- a/docs/zh/payloads/generic_actuator_control.md +++ b/docs/zh/payloads/generic_actuator_control.md @@ -68,7 +68,7 @@ To use a generic actuator in a mission: ## MAVSDK (Example script) -The following [MAVSDK](https://mavsdk.mavlink.io/main/en/index.html) [example code](https://github.com/mavlink/MAVSDK/blob/main/examples/set_actuator/set_actuator.cpp) shows how to trigger payload release using the MAVSDK Action plugin's [`set_actuator()`](https://mavsdk.mavlink.io/main/en/cpp/api_reference/classmavsdk_1_1_action.html#classmavsdk_1_1_action_1ad30beac27f05c62dcf6a3d0928b86e4c) method. +The following [MAVSDK](https://mavsdk.mavlink.io/main/en/index.html) [example code](https://github.com/mavlink/MAVSDK/blob/main/cpp/examples/set_actuator/set_actuator.cpp) shows how to trigger payload release using the MAVSDK Action plugin's [`set_actuator()`](https://mavsdk.mavlink.io/main/en/cpp/api_reference/classmavsdk_1_1_action.html#classmavsdk_1_1_action_1ad30beac27f05c62dcf6a3d0928b86e4c) method. The `set_actuator()` index values map to the MAVLink payload outputs defined for your airframe. diff --git a/docs/zh/peripherals/adsb_flarm.md b/docs/zh/peripherals/adsb_flarm.md index 36d2c728be..f6c3932001 100644 --- a/docs/zh/peripherals/adsb_flarm.md +++ b/docs/zh/peripherals/adsb_flarm.md @@ -1,6 +1,6 @@ # ADS-B/FLARM/UTM Receivers: Air Traffic Avoidance -PX4 supports simple air traffic avoidance in [missions](../flying/missions.md) using [ADS-B](https://en.wikipedia.org/wiki/Automatic_dependent_surveillance_%E2%80%93_broadcast), [FLARM](https://en.wikipedia.org/wiki/FLARM), or [UTM](https://www.faa.gov/uas/research_development/traffic_management) transponders that use the standard MAVLink interfaces. +PX4 supports simple air traffic avoidance in [missions](../flying/missions.md) using [ADS-B](https://en.wikipedia.org/wiki/Automatic_dependent_surveillance_%E2%80%93_broadcast), [FLARM](https://en.wikipedia.org/wiki/FLARM), or [UTM](https://www.faa.gov/uas/advanced_operations/traffic_management) transponders that use the standard MAVLink interfaces. If a potential collision is detected, PX4 can _warn_, immediately [land](../flight_modes_mc/land.md), or [return](../flight_modes_mc/return.md) (depending on the value of [NAV_TRAFF_AVOID](#NAV_TRAFF_AVOID)). @@ -53,7 +53,7 @@ The TX and RX on the flight controller must be connected to the RX and TX on the ### Port Configuration -The recievers are configured in the same way as any other [MAVLink Peripheral](../peripherals/mavlink_peripherals.md). +The receivers are configured in the same way as any other [MAVLink Peripheral](../peripherals/mavlink_peripherals.md). The only _specific_ setup is that the port baud rate must be set to 57600 and the a low-bandwidth profile (`MAV_X_MODE`). Assuming you have connected the device to the TELEM2 port, [set the parameters](../advanced_config/parameters.md) as shown: @@ -74,10 +74,27 @@ Configure the action when there is a potential collision using the parameter bel | 参数 | 描述 | | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | [NAV_TRAFF_AVOID](../advanced_config/parameter_reference.md#NAV_TRAFF_AVOID) | Enable traffic avoidance mode specify avoidance response. 0: Disable, 1: Warn only, 2: Return mode, 3: Land mode. | -| [NAV_TRAFF_A_HOR](../advanced_config/parameter_reference.md#NAV_TRAFF_A_HOR) | Horizonal radius of cylinder around the vehicle that defines its airspace (i.e. the airspace in the ground plane). | +| [NAV_TRAFF_A_HOR](../advanced_config/parameter_reference.md#NAV_TRAFF_A_HOR) | Horizontal radius of cylinder around the vehicle that defines its airspace (i.e. the airspace in the ground plane). | | [NAV_TRAFF_A_VER](../advanced_config/parameter_reference.md#NAV_TRAFF_A_VER) | Vertical height above and below vehicle of the cylinder that defines its airspace (also see [NAV_TRAFF_A_HOR](#NAV_TRAFF_A_HOR)). | | [NAV_TRAFF_COLL_T](../advanced_config/parameter_reference.md#NAV_TRAFF_COLL_T) | Collision time threshold. Avoidance will trigger if the estimated time until collision drops below this value (the estimated time is based on relative speed of traffic and UAV). | +### Arming Check + +PX4 can be configured to check for the presence of a traffic avoidance system (ADSB or FLARM transponder) before arming. +This ensures that a traffic avoidance system is connected and functioning before flight. + +The check is configured using the [COM_ARM_TRAFF](../advanced_config/parameter_reference.md#COM_ARM_TRAFF) parameter: + +| 值 | 描述 | +| - | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 0 | Disabled (default). No check is performed. | +| 1 | Warning only. A warning is issued if no traffic avoidance system is detected, but arming is allowed. | +| 2 | Enforce for all modes. Arming is denied if no traffic avoidance system is detected, regardless of flight mode. | +| 3 | Enforce for mission modes only. Arming is denied if no traffic avoidance system is detected and a mission mode is planned. | + +When a traffic avoidance system is detected, the system tracks its presence with a 3-second timeout. +If the system is lost or regained, corresponding events are logged ("Traffic avoidance system lost" / "Traffic avoidance system regained"). + ## 实现 ### ADSB/FLARM @@ -131,7 +148,7 @@ These simulate ADS-B traffic where there may be a conflict, where there won't be :::details Information about the test methods -The relevent methods are defined in [AdsbConflict.cpp](https://github.com/PX4/PX4-Autopilot/blob/main/src/lib/adsb/AdsbConflict.cpp#L342C1-L342C1). +The relevant methods are defined in [AdsbConflict.cpp](https://github.com/PX4/PX4-Autopilot/blob/main/src/lib/adsb/AdsbConflict.cpp#L342C1-L342C1). #### `run_fake_traffic()` method diff --git a/docs/zh/peripherals/dshot.md b/docs/zh/peripherals/dshot.md index 8ea59236a7..86cd10dc47 100644 --- a/docs/zh/peripherals/dshot.md +++ b/docs/zh/peripherals/dshot.md @@ -13,7 +13,7 @@ DShot is an alternative ESC protocol that has several advantages over [PWM](../p ## Supported ESC -[ESCs & Motors > Supported ESCs](../peripherals/esc_motors#supported-esc) has a list of supported ESC (check "Protocols" column for DShot ESC). +[ESCs & Motors > Supported ESCs](../peripherals/esc_motors.md#supported-esc) has a list of supported ESC (check "Protocols" column for DShot ESC). ## Wiring/Connections {#wiring} @@ -47,74 +47,12 @@ DShot comes with different speed options: _DShot150_, _DShot300_, and _DShot600_ 电调应该初始化,电机应该按照正确的方向转动。 - If the motors do not spin in the correct direction (for the [selected airframe](../airframes/airframe_reference.md)) you can reverse them in the UI using the **Set Spin Direction** option (this option appears after you select DShot and assign motors). - You can also reverse motors by sending an [ESC Command](#commands). ## ESC Commands {#commands} Commands can be sent to the ESC via the [MAVLink shell](../debug/mavlink_shell.md). See [here](../modules/modules_driver.md#dshot) for a full reference of the supported commands. -其中最重要的是: - -- Make a motor connected to to FMU output pin 1 beep (helps with identifying motors) - - ```sh - dshot beep1 -m 1 - ``` - -- Retrieve ESC information (requires telemetry, see below): - - ```sh - nsh> dshot esc_info -m 2 - INFO [dshot] ESC Type: #TEKKO32_4in1# - INFO [dshot] MCU Serial Number: xxxxxx-xxxxxx-xxxxxx-xxxxxx - INFO [dshot] Firmware version: 32.60 - INFO [dshot] Rotation Direction: normal - INFO [dshot] 3D Mode: off - INFO [dshot] Low voltage Limit: off - INFO [dshot] Current Limit: off - INFO [dshot] LED 0: unsupported - INFO [dshot] LED 1: unsupported - INFO [dshot] LED 2: unsupported - INFO [dshot] LED 3: unsupported - ``` - -- Permanently set the spin direction of a motor connected to FMU output pin 1 (while motors are _not_ spinning): - - - Set spin direction to `reversed`: - - ```sh - dshot reverse -m 1 - dshot save -m 1 - ``` - - Retrieving ESC information will then show: - - ```sh - Rotation Direction: reversed - ``` - - - Set spin direction to `normal`: - - ```sh - dshot normal -m 1 - dshot save -m 1 - ``` - - Retrieving ESC information will then show: - - ```sh - Rotation Direction: normal - ``` - - :::note - - - The commands will have no effect if the motors are spinning, or if the ESC is already set to the corresponding direction. - - The ESC will revert to its last saved direction (normal or reversed) on reboot if `save` is not called after changing the direction. - - -::: - ## ESC Telemetry Some ESCs are capable of sending telemetry back to the flight controller through a UART RX port. @@ -133,61 +71,76 @@ The provided telemetry includes: 1. 把电调上的TELE端口连接到飞控上空的串口的 RX 端。 2. Enable telemetry on that serial port using [DSHOT_TEL_CFG](../advanced_config/parameter_reference.md#DSHOT_TEL_CFG). -重启后,您可以检查TELE数据传输是否正常工作(确保电池已连接),方法如下: - -```sh -dshot esc_info -m 1 -``` - :::tip -You may have to configure [MOT_POLE_COUNT](../advanced_config/parameter_reference.md#MOT_POLE_COUNT) to get the correct RPM values. +You may have to configure the per-motor pole count parameters ([`DSHOT_MOT_POL1`–`DSHOT_MOT_POL12`](../advanced_config/parameter_reference.md#DSHOT_MOT_POL1)) to get correct RPM values. +The default value for these is 14 poles, which is typical for 5-inch prop motors. ::: :::tip -Not all DSHOT-capable ESCs support `[esc_info]`(e.g. APD 80F3x), even when telemetry is supported and enabled. -显示的错误是: - -```sh -ERROR [dshot] No data received. If telemetry is setup correctly, try again. -``` - -查看制造商文档以获取详细信息。 +[Extended DShot Telemetry (EDT)](#extended-dshot-telemetry-edt) can provide temperature, voltage, and current through the BDShot signal — no serial telemetry wire needed. ::: ## Bidirectional DShot (Telemetry) -Bidirectional DShot is a protocol that can provide telemetry including: high rate ESC RPM data, voltage, current, and temperature with a single wire. +Bidirectional DShot (BDShot) enables the ESC to send eRPM telemetry back to the flight controller on the same signal wire used for throttle commands — no additional telemetry wire is needed for RPM data. +High-rate eRPM data significantly improves the performance of [Dynamic Notch Filters](../config_mc/filter_tuning.md#dynamic-notch-filters) and enables more precise vehicle tuning. -The PX4 implementation currently enables only ESC RPM (eRPM) data collection from each ESC at high frequencies. -This telemetry significantly improves the performance of [Dynamic Notch Filters](../config_mc/filter_tuning.md#dynamic-notch-filters) and enables more precise vehicle tuning. +With [Extended DShot Telemetry (EDT)](#extended-dshot-telemetry-edt) enabled, BDShot can also provide temperature, voltage, and current data. + +### Hardware Support + +BDShot requires a flight controller with DMA-capable timers. +Any FMU output on a supported timer can be used for BDShot — multiple timers are supported through sequential burst/capture. + +Supported processors: + +- **STM32H7**: All FMU outputs on DMA-capable timers +- **i.MXRT** (V6X-RT & Tropic): All FMU outputs :::info -The [ESC Telemetry](#esc-telemetry) described above is currently still necessary if you want voltage, current, or temperature information. -It's setup and use is independent of bidirectional DShot. -::: - -### 硬件安装 - The ESC must be connected to FMU outputs only. -These will be labeled `MAIN` on flight controllers that only have one PWM bus, and `AUX` on controllers that have both `MAIN` and `AUX` ports (i.e. FCs that have an IO board). - -:::warning -**Limited hardware support** -This feature is only supported on flight controllers with the following processors: - -- STM32H7: First four FMU outputs - - Must be connected to the first 4 FMU outputs, and these outputs must also be mapped to the same timer. - - [KakuteH7](../flight_controller/kakuteh7v2.md) is not supported because the outputs are not mapped to the same timer. -- [i.MXRT](../flight_controller/nxp_mr_vmu_rt1176.md) (V6X-RT & Tropic): 8 FMU outputs. - -No other boards are supported. +These are labeled `MAIN` on controllers with a single PWM bus, and `AUX` on controllers with both `MAIN` and `AUX` ports (i.e. those with an IO board). ::: -### Configuration {#bidirectional-dshot-configuration} +### PX4 Configuration {#bidirectional-dshot-configuration} -To enable bidirectional DShot, set the [DSHOT_BIDIR_EN](../advanced_config/parameter_reference.md#DSHOT_BIDIR_EN) parameter. +BDShot is enabled **per-timer** in the [Actuator Configuration](../config/actuators.md) UI. +Select **BDShot150**, **BDShot300**, or **BDShot600** as the output protocol instead of the corresponding DShot speed. +There is no separate enable parameter — choosing a BDShot protocol activates bidirectional telemetry on that timer's outputs. -The system calculates actual motor RPM from the received eRPM data using the [MOT_POLE_COUNT](../advanced_config/parameter_reference.md#MOT_POLE_COUNT) parameter. -This parameter must be set correctly for accurate RPM reporting. +The system calculates actual motor RPM from eRPM data using per-motor pole count parameters: `DSHOT_MOT_POL1` through `DSHOT_MOT_POL12` (one per motor output). +The default is 14 poles, which is typical for 5-inch prop motors. +If you are using AM32 ESCs, the motor pole count must also be set in the AM32 firmware configuration (e.g. via the AM32 configurator tool) to match. + +### Extended DShot Telemetry (EDT) + +EDT extends BDShot by interleaving temperature, voltage, and current data into the eRPM telemetry frames. +This allows ESC health monitoring through the same signal wire, without requiring a separate serial telemetry connection. + +To enable EDT: + +1. Configure BDShot on the desired outputs (see above). +2. Set `DSHOT_BIDIR_EDT` to `1` and reboot. + +The ESC firmware must support EDT (e.g. [AM32](https://github.com/am32-firmware/AM32)). + +When both serial telemetry and BDShot/EDT are enabled, the driver merges data from both sources. + +## AM32 ESC Settings (EEPROM) + +PX4 can read and write AM32 ESC firmware settings (EEPROM) via a ground station, enabling remote ESC configuration without connecting directly to each ESC. + +### Requirements + +- ESCs running [AM32 firmware](https://github.com/am32-firmware/AM32) with serial telemetry connected ([DSHOT_TEL_CFG](../advanced_config/parameter_reference.md#DSHOT_TEL_CFG)) +- `DSHOT_ESC_TYPE` set to `1` (AM32) +- Ground station with ESC EEPROM support (QGroundControl feature in development) +- MAVLink development dialect enabled on the flight controller + +### How It Works + +PX4 automatically reads the full EEPROM from each ESC on boot. +The ground station can then display individual settings and allow the user to modify them. +Changes are written back to the ESC one byte at a time using the DShot programming protocol. diff --git a/docs/zh/peripherals/esc_motors.md b/docs/zh/peripherals/esc_motors.md index c372d04192..17143455ef 100644 --- a/docs/zh/peripherals/esc_motors.md +++ b/docs/zh/peripherals/esc_motors.md @@ -11,7 +11,7 @@ The following list is non-exhaustive. | ESC Device | Protocols | Firmwares | 备注 | | ------------------------------ | ------------------------------------ | ------------------------ | ----------------------------------------------------- | -| [ARK 4IN1 ESC] | [Dshot], [PWM] | [AM32] | Has versions with/without connnectors | +| [ARK 4IN1 ESC] | [Dshot], [PWM] | [AM32] | Has versions with/without connectors | | [Holybro Kotleta 20] | [DroneCAN], [PWM] | [PX4 Sapog ESC Firmware] | | | [Vertiq Motor & ESC modules] | [Dshot], [OneShot], Multishot, [PWM] | Vertiq firmware | Larger modules support DroneCAN, ESC and Motor in one | | [RaccoonLab CAN PWM ESC nodes] | [DroneCAN], Cyphal | | Cyphal and DroneCAN notes for PWM ESC | diff --git a/docs/zh/peripherals/frsky_telemetry.md b/docs/zh/peripherals/frsky_telemetry.md index 130f3f1081..adca4a5d9e 100644 --- a/docs/zh/peripherals/frsky_telemetry.md +++ b/docs/zh/peripherals/frsky_telemetry.md @@ -166,7 +166,7 @@ D-Port receivers transmit the following messages (from [here](https://github.com ## 睿思凯遥测接收机 -Pixhawk/PX4 supports D (old) and S (new) FrSky telemetry. The table belows all FrSky receivers that support telemetry via a D/S.PORT (in theory all of these should work). +Pixhawk/PX4 supports D (old) and S (new) FrSky telemetry. The table below lists all FrSky receivers that support telemetry via a D/S.PORT (in theory all of these should work). :::tip Note that the X series receivers listed below are recommended (e.g. XSR, X8R). The R and G series have not been tested/validated by the test team, but should work. @@ -213,8 +213,8 @@ You will need connectors that are appropriate for your autopilot (e.g. _JST-GH c The Pixracer includes electronics for converting between S.PORT and UART signals, but for other boards you will need a UART to S.PORT adapter. These can be sourced from: -- [FrSky FUL-1](https://www.frsky-rc.com/product/ful-1/): [unmannedtech.co.uk](https://www.unmannedtechshop.co.uk/frsky-transmitter-receiver-upgrade-adapter-ful-1/) -- SPC: [getfpv.com](https://www.getfpv.com/frsky-smart-port-converter-cable.html), [unmannedtechshop.co.uk](https://www.unmannedtechshop.co.uk/frsky-smart-port-converter-spc/) +- [FrSky FUL-1](https://www.frsky-rc.com/product/ful-1/): [unmannedtech.co.uk](https://www.unmannedtechshop.co.uk/products/frsky-transmitter-receiver-upgrade-adapter-ful-1) +- SPC: [getfpv.com](https://www.getfpv.com/frsky-smart-port-converter-cable.html), [unmannedtechshop.co.uk](https://www.unmannedtechshop.co.uk/products/frsky-smart-port-converter-spc) More information about the connections for different boards is given below. diff --git a/docs/zh/peripherals/index.md b/docs/zh/peripherals/index.md index afd22e7ea0..22e3d75c81 100644 --- a/docs/zh/peripherals/index.md +++ b/docs/zh/peripherals/index.md @@ -2,8 +2,9 @@ This section contains topics about peripheral hardware that can be connected to a flight controller (not including [cameras and other payloads](../payloads/index.md)). -The peripherals are not _required_ for flight, but may support it by providing improved safety, or allowing the vehicle to meet regulartory requirements: +The peripherals are not _required_ for flight, but may support it by providing improved safety, or allowing the vehicle to meet regulatory requirements: - [ADSB/FLARM/UTM (Traffic Avoidance)](../peripherals/adsb_flarm.md) +- [On-Screen Display (OSD)](../peripherals/osd.md) - [Parachute](../peripherals/parachute.md) - [Remote ID](../peripherals/remote_id.md) diff --git a/docs/zh/peripherals/mavlink_peripherals.md b/docs/zh/peripherals/mavlink_peripherals.md index b344857a2d..5eedbe69a1 100644 --- a/docs/zh/peripherals/mavlink_peripherals.md +++ b/docs/zh/peripherals/mavlink_peripherals.md @@ -1,6 +1,6 @@ # MAVLink Peripherals (GCS/OSD/Gimbal/Camera/Companion) -Ground Control Stations (GCS), On-Screen Displays (OSD), MAVLink Cameras & Gimbals, Remote IDs, Companion Computers, ADS-B receivers, and other MAVLink peripherals interact with PX4 using separate MAVLink streams, sent via different serial ports. +Ground Control Stations (GCS), [MAVLink On-Screen Displays (OSD)](../peripherals/osd.md#mavlink-osd), MAVLink [Cameras](../camera/mavlink_v2_camera.md) and [Gimbals](../advanced/gimbal_control.md), [Remote IDs](../peripherals/remote_id.md), Companion Computers, [ADS-B receivers](../peripherals/adsb_flarm.md), and other MAVLink peripherals interact with PX4 using separate MAVLink streams, sent via different serial ports. In order to configure that a particular serial port is used for MAVLink traffic with a particular peripheral, we use [Serial Port Configuration](../peripherals/serial_configuration.md), assigning one of the abstract "MAVLink instance" configuration parameters to the desired port. We then set other properties of the MAVLink channel using the parameters associated with our selected MAVLink instance, so that they match the requirements of our particular peripheral. @@ -26,38 +26,12 @@ The parameters for each instance are: - [MAV_X_CONFIG](../advanced_config/parameter_reference.md#MAV_0_CONFIG) - Set the serial port (UART) for this instance "X", where X is 0, 1, 2. It can be any unused port, e.g.: `TELEM2`, `TELEM3`, `GPS2` etc. For more information see [Serial Port Configuration](../peripherals/serial_configuration.md). - -- [MAV_X_MODE](../advanced_config/parameter_reference.md#MAV_0_MODE) - Specify the telemetry mode/target (the set of messages to stream for the current instance and their rate). - The default values are: - - - _Normal_: Standard set of messages for a GCS. - - _Custom_ or _Magic_: Nothing (in the default PX4 implementation). - Modes may be used for testing when developing a new mode. - - _Onboard_: Standard set of messages for a companion computer. - - _OSD_: Standard set of messages for an OSD system. - - _Config_: Standard set of messages and rate configuration for a fast link (e.g. USB). - - _Minimal_: Minimal set of messages for use with a GCS connected on a high latency link. - - _External Vision_: Messages for offboard vision systems. - - _Gimbal_: Messages for a gimbal. Note this also enables [message forwarding](#MAV_X_FORWARD) - - _Onboard Low Bandwidth_: Standard set of messages for a companion computer connected on a lower speed link. - - _uAvionix_: Messages for a uAvionix ADS-B beacon. - - ::: info - If you need to find the specific set of message for each mode search for `MAVLINK_MODE_` in [/src/modules/mavlink/mavlink_main.cpp](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/mavlink_main.cpp). - -::: - - :::tip - The mode defines the _default_ messages and rates. - A connected MAVLink system can still request the streams/rates that it wants using [MAV_CMD_SET_MESSAGE_INTERVAL](https://mavlink.io/en/messages/common.html#MAV_CMD_SET_MESSAGE_INTERVAL). - -::: - +- [MAV_X_MODE](../advanced_config/parameter_reference.md#MAV_0_MODE) - Specify the [MAVLink profile](../mavlink/mavlink_profiles.md) for the instance, such as _Normal_ or _OSD_. + Profiles define a particular set of streamed messages and their rates — you should choose a profile that is appropriate for your channel and the peripheral. - [MAV_X_RATE](../advanced_config/parameter_reference.md#MAV_0_MODE) - Set the maximum _data rate_ for this instance (bytes/second). - This is the combined rate for all streams of individual message (the rates for individual messages are reduced if the total rate exceeds this value). - The default setting will generally be acceptable, but might be reduced if the telemetry link becomes saturated and too many messages are being dropped. - A value of 0 sets the data rate to half the theoretical value. - - [MAV_X_FORWARD](../advanced_config/parameter_reference.md#MAV_0_FORWARD) - Enable forwarding of MAVLink packets received by the current instance onto other interfaces. This might be used, for example, to transfer messages between a GCS and a companion computer so that the GCS can talk to a MAVLink enabled camera connected to the companion computer. @@ -121,6 +95,7 @@ Links to setup instructions for specific MAVLink components: ## 另见 +- [MAVLink Profiles](../mavlink/mavlink_profiles.md) - [串口配置](../peripherals/serial_configuration.md) - [PX4 Ethernet Setup > PX4 MAVLink Serial Port Configuration](../advanced_config/ethernet_setup.md#px4-mavlink-serial-port-configuration) - [串口映射](../hardware/serial_port_mapping.md) diff --git a/docs/zh/peripherals/osd.md b/docs/zh/peripherals/osd.md new file mode 100644 index 0000000000..b684ea84b2 --- /dev/null +++ b/docs/zh/peripherals/osd.md @@ -0,0 +1,103 @@ +# On-Screen Display (OSD) + +An **On-Screen Display (OSD)** overlays flight telemetry — battery, altitude, GPS, RSSI, attitude, etc. — onto a pilot's video feed. +OSDs are commonly used in FPV and long-range flying so the pilot can see live flight data without looking away from the video. + +PX4 supports three distinct OSD mechanisms, each targeting a different class of video system: + +| Mechanism | Use case | Transport | Runs on FC? | +| --------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------- | -------------------------------------------------------------- | +| [MSP OSD](#msp-osd) | Digital FPV air units and video goggles that speak Betaflight MSP (e.g. DJI O3/O4, Walksnail, HDZero, Caddx Vista) | Serial, MSPv1 | Yes — [`msp_osd`](../modules/modules_driver.md#msp-osd) driver | +| [ATXXXX Analog OSD](#atxxxx-analog-osd) | Legacy analog video with an on-board MAX7456/ATXXXX overlay chip (e.g. OmnibusF4SD) | SPI to on-board chip | Yes — [`atxxxx`](../modules/modules_driver.md#atxxxx) driver | +| [MAVLink OSD](#mavlink-osd) | MAVLink-aware ground stations and displays that render their own OSD from telemetry (e.g. Yaapu on EdgeTX/OpenTX, Skydroid, mLRS HUDs) | Serial, MAVLink | No — streams MAVLink; the display renders the OSD | + +Which one you use is determined by your video hardware, not by PX4 preference. +If you're unsure, start with your video system's documentation and match the OSD mechanism it expects. + +## MSP OSD + +**MSP (MultiWii Serial Protocol) OSD** is the mechanism used by digital FPV systems (DJI, Walksnail, HDZero) and by many digital goggles/air units to render telemetry over the pilot's video feed. +PX4 implements the subset of MSP used for OSD telemetry, matching what Betaflight and INAV send. + +The [`msp_osd`](../modules/modules_driver.md#msp-osd) driver converts uORB topics (battery, GPS, attitude, etc.) to MSP packets and sends them out a serial port at 115200 baud. + +### Supported displays + +PX4 currently sends a subset of MSP messages. +Reliably-working display items include: + +- Craft name and flight mode / arming state +- Battery voltage, current draw, mAh consumed, average cell voltage +- GPS latitude, longitude, satellite count, ground speed +- Home distance and direction +- Altitude (from GNSS / baro) +- RSSI +- Crosshairs toggle + +Some items in [`OSD_SYMBOLS`](../advanced_config/parameter_reference.md#OSD_SYMBOLS) are reserved but not yet implemented — see the parameter's `(unused)` bit labels. +For feature-completeness work, see the tracking issues on GitHub. + +### 硬件设置 + +1. Connect the digital air unit's MSP / telemetry input to a free UART on the flight controller (TX → RX, RX → TX, GND → GND). +2. Power the air unit from its own BEC or a VTX power pad — most air units expect 5 V or battery voltage, not autopilot 5 V. +3. Note which PX4 serial device the UART maps to on your board (e.g. `TELEM2` → `/dev/ttyS2`). + See [Serial Port Mapping](../hardware/serial_port_mapping.md). + +### Firmware requirements + +The `msp_osd` driver is included in the default build for most modern Pixhawk and FPV-oriented boards (e.g. `px4_fmu-v5x`, `px4_fmu-v6x`, `ark_fpv`, `cuav_7-nano`, `micoair_h743*`). +If your board does not include it by default, enable it via [board config](../hardware/porting_guide_config.md#px4-menuconfig-setup): + +```sh +make _default boardconfig +# drivers → OSD → msp_osd +``` + +Then rebuild and flash. + +### PX4 configuration + +1. Assign the selected serial port to MSP OSD with [`MSP_OSD_CONFIG`](../advanced_config/parameter_reference.md#MSP_OSD_CONFIG). +2. Set the matching `SER__BAUD` to `115200`. +3. Reboot. +4. Tune the display via the [`OSD_*` parameters](../advanced_config/parameter_reference.md#osd): + - [`OSD_SYMBOLS`](../advanced_config/parameter_reference.md#OSD_SYMBOLS) — bitmask selecting which items appear. + - [`OSD_CH_HEIGHT`](../advanced_config/parameter_reference.md#OSD_CH_HEIGHT) — vertical position of the crosshairs. + - [`OSD_LOG_LEVEL`](../advanced_config/parameter_reference.md#OSD_LOG_LEVEL) — minimum severity for on-screen warnings. + - [`OSD_SCROLL_RATE`](../advanced_config/parameter_reference.md#OSD_SCROLL_RATE) / [`OSD_DWELL_TIME`](../advanced_config/parameter_reference.md#OSD_DWELL_TIME) — scrolling of long messages. + - [`OSD_RC_STICK`](../advanced_config/parameter_reference.md#OSD_RC_STICK) — forward RC sticks to the VTX when disarmed, so you can navigate the VTX menu. + +### Worked examples + +- [Reptile Dragon 2 > msp_osd Module](../frames_plane/reptile_dragon_2.md#msp-osd-module) — end-to-end wiring and configuration for a Caddx Vista build. +- [Turbo Timber Evolution](../frames_plane/turbo_timber_evolution.md) — references the same setup pattern. + +## MAVLink OSD + +Some OSDs render their own overlay directly from the MAVLink telemetry stream — the flight controller simply streams MAVLink at a rate the display can parse. +PX4 exposes this via a dedicated MAVLink stream profile. + +To use a MAVLink OSD: + +1. Choose an unused MAVLink instance ([`MAV_X_CONFIG`](../peripherals/mavlink_peripherals.md#default_ports)) and assign it to the serial port connected to the display. +2. Configure the mode of the selected MAVLink instance with [`MAV_X_MODE`](./mavlink_peripherals.md#MAV_X_MODE) by setting it to **`OSD`**. + The `OSD` mode uses a built-in rate table tuned for low-bandwidth OSD consumption. +3. Set the matching `SER__BAUD` to the baud rate the display expects. + +The stream content is fixed (defined in `src/modules/mavlink/mavlink_main.cpp`) and cannot be customised from parameters. +See [MAVLink Peripherals (GCS/OSD/Gimbal/Camera/Companion)](./mavlink_peripherals.md) for the full MAVLink-side configuration. + +## ATXXXX Analog OSD + +The [`atxxxx`](../modules/modules_driver.md#atxxxx) driver targets boards with an on-board MAX7456 / ATXXXX chip that overlays characters onto an analog video stream (PAL or NTSC). +This was common on older F4-class FCs such as OmnibusF4SD and is largely superseded by digital systems. + +No external wiring is required on boards that include the chip; to enable it, set [`OSD_ATXXXX_CFG`](../advanced_config/parameter_reference.md#OSD_ATXXXX_CFG) to `1` (NTSC) or `2` (PAL) and reboot. + +## See also + +- [Parameter Reference > OSD](../advanced_config/parameter_reference.md#osd) — all OSD parameters. +- [MAVLink Peripherals (GCS/OSD/Gimbal/Camera/Companion)](./mavlink_peripherals.md) — MAVLink serial configuration. +- [Serial Port Configuration](./serial_configuration.md) — assigning modules to UARTs. +- [`msp_osd` module reference](../modules/modules_driver.md#msp-osd) — CLI usage and source. diff --git a/docs/zh/peripherals/parachute.md b/docs/zh/peripherals/parachute.md index 234d2b8f9e..6c8fbeee96 100644 --- a/docs/zh/peripherals/parachute.md +++ b/docs/zh/peripherals/parachute.md @@ -44,6 +44,7 @@ To enable flight termination: - Set [Safety](../config/safety.md) action to _Flight termination_ for checks where you want the parachute to trigger. - Set [Failure Detector](../config/safety.md#failure-detector) pitch angles, roll angles and time triggers for crash/flip detection, and disable the failure/IMU timeout circuit breaker (i.e. set [CBRK_FLIGHTTERM=0](../advanced_config/parameter_reference.md#CBRK_FLIGHTTERM)). +- Set [FD_ALT_LOSS](../advanced_config/parameter_reference.md#FD_ALT_LOSS) to enable flight termination if a rotary-wing vehicle loses too much altitude below its setpoint (see [Altitude Loss Trigger](../config/safety.md#altitude-loss-trigger)). :::info You can also configure an [external Automatic Trigger System (ATS)](../config/safety.md#external-automatic-trigger-system-ats) for failure detection. diff --git a/docs/zh/peripherals/pwm_escs_and_servo.md b/docs/zh/peripherals/pwm_escs_and_servo.md index 21d4261f33..620a1d495c 100644 --- a/docs/zh/peripherals/pwm_escs_and_servo.md +++ b/docs/zh/peripherals/pwm_escs_and_servo.md @@ -66,7 +66,7 @@ In this case the wire will normally be connected to the flight controller servo PWM motors and servos are configured using the [Actuator Configuration](../config/actuators.md) screen in QGroundControl. -After assigning outputs and basic calibration, you may then wish to peform an [ESC Calibration](../advanced_config/esc_calibration.md). +After assigning outputs and basic calibration, you may then wish to perform an [ESC Calibration](../advanced_config/esc_calibration.md). Additional PX4 PWM configuration parameters can be found here: [PWM Outputs](../advanced_config/parameter_reference.md#pwm-outputs). diff --git a/docs/zh/peripherals/remote_id.md b/docs/zh/peripherals/remote_id.md index 3200d64c42..af8a41ed95 100644 --- a/docs/zh/peripherals/remote_id.md +++ b/docs/zh/peripherals/remote_id.md @@ -144,20 +144,19 @@ The [CAN Remote ID Not Working](../peripherals/remote_id.md#can-remote-id-not-wo There is no need to explicitly enable Remote ID (supported Remote ID messages are either streamed by default or must be requested in the current implementation, even if no remote ID is connected). -### Prevent Arming based on Remote ID +### Remote ID Failsafe and Arming Check -To only allow arming when a Remote ID is ready, [set](../advanced_config/parameters.md#conditional-parameters) the parameter [COM_ARM_ODID](#COM_ARM_ODID) to `2` (it is disabled by default). + -| 参数 | 描述 | -| ----------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [COM_ARM_ODID](../advanced_config/parameter_reference.md#COM_ARM_ODID) | Enable Drone ID system detection and health check. `0`: Disable (default), `1`: Warn if Remote ID not detected but still allow arming, `2`: Only allow arming if Remote ID is present. | +The [COM_ARM_ODID](../advanced_config/parameter_reference.md#COM_ARM_ODID) parameter configures both the arming check and the in-flight failsafe action when the Remote ID system is missing or unhealthy. +For more information see [Remote ID Failsafe](http://localhost:5173/px4_user_guide/en/config/safety#remote-id-failsafe) in _Safety Configuration_. ## Module Broadcast Testing Integrators should test than the remote ID module is broadcasting the correct information, such as UAV location, ID, operator ID and so on. This is most easily done using a 3rd party application on your mobile device: -- [Drone Scanner](https://github.com/dronetag/drone-scanner) (Google Play or Apple App store) +- [Drone Scanner](https://help.dronetag.com/drone-scanner/) (Google Play or Apple App store) - [OpenDroneID OSM](https://play.google.com/store/apps/details?id=org.opendroneid.android_osm&hl=en&gl=US) (Google Play) ## 实现 @@ -174,7 +173,7 @@ The following message can be streamed on request (using [MAV_CMD_SET_MESSAGE_INT - [OPEN_DRONE_ID_BASIC_ID](https://mavlink.io/en/messages/common.html#OPEN_DRONE_ID_BASIC_ID) - UAV identity information (essentially a serial number) - PX4 v1.14 specifies a serial number ([MAV_ODID_ID_TYPE_SERIAL_NUMBER](https://mavlink.io/en/messages/common.html#MAV_ODID_ID_TYPE_SERIAL_NUMBER)) but does not use the required format (ANSI/CTA-2063 format). -PX4 prevents arming based on Remote ID health if parameter [COM_ARM_ODID](../advanced_config/parameter_reference.md#COM_ARM_ODID) is set to `2`. +PX4 can prevent arming and/or trigger an in-flight failsafe based on Remote ID health via the [COM_ARM_ODID](../advanced_config/parameter_reference.md#COM_ARM_ODID) parameter. The UAV will then require `HEARTBEAT` messages from the Remote ID as a precondition for arming the UAV. You can also set the parameter to `1` to warn but still allow arming when Remote ID `HEARTBEAT` messages are not detected. diff --git a/docs/zh/peripherals/serial_configuration.md b/docs/zh/peripherals/serial_configuration.md index 267d8c4d31..48bbaba470 100644 --- a/docs/zh/peripherals/serial_configuration.md +++ b/docs/zh/peripherals/serial_configuration.md @@ -109,7 +109,7 @@ The following ports are commonly mapped to specific functions on all boards: This is configured by default as a MAVLink port the onboard profile (for companion computers). The configuration for MAVLink is unique to this port (it doesn't use the `MAV_X_CONFIG` parameters). - - [SYS_USB_AUTO](../advanced_config/parameter_reference.md#SYS_USB_AUTO) sets whether the port is set to no partiular protocol, autodetects the protocol, or sets the comms link to MAVLink. + - [SYS_USB_AUTO](../advanced_config/parameter_reference.md#SYS_USB_AUTO) sets whether the port is set to no particular protocol, autodetects the protocol, or sets the comms link to MAVLink. - [USB_MAV_MODE](../advanced_config/parameter_reference.md#USB_MAV_MODE) sets the MAVLink profile that is used if MAVLink is set or detected. Other ports generally have no assigned functions by default (are disabled). diff --git a/docs/zh/peripherals/vertiq.md b/docs/zh/peripherals/vertiq.md index d6c6b33627..e90ecdcd57 100644 --- a/docs/zh/peripherals/vertiq.md +++ b/docs/zh/peripherals/vertiq.md @@ -6,7 +6,7 @@ With closed loop velocity control for the fastest response times available, clas ![Vertiq Module Lineup](../../assets/peripherals/esc_vertiq/vertiq_esc_lineup.jpg) -All Vertiq modules support traditional [PWM input, DShot, OneShot, and Multishot communication protocols](https://iqmotion.readthedocs.io/en/latest/communication_protocols/hobby_protocol.html). Vertiq's larger modules also support [DroneCAN control](https://iqmotion.readthedocs.io/en/latest/communication_protocols/dronecan_protocol.html). +All Vertiq modules support traditional [PWM input, DShot, OneShot, and Multishot communication protocols](https://iqmotion.readthedocs.io/en/latest/communication_protocols/timer_based_protocol.html). Vertiq's larger modules also support [DroneCAN control](https://iqmotion.readthedocs.io/en/latest/communication_protocols/dronecan_protocol.html). ## 购买渠道 @@ -38,6 +38,18 @@ Instructions for integrating the motor/ESC using with DroneCAN can be found in [ These instructions walk you through setting the correct parameters for enabling the flight controller's DroneCAN drivers, setting the correct configuration parameters for communication with Vertiq modules on the DroneCAN bus, ESC configuration, and testing that your flight controller can properly control your modules over DroneCAN. +#### LED Configuration for Vertiq Modules + +:::info +This configuration is only required if you have the optional [Vertiq LED module add-on](https://www.vertiq.co/add-ons). +Standard Vertiq ESC modules do not include LEDs. +::: + +Vertiq LED Add-on modules have two LEDs per ESC (RGB for status, White for anti-collision). +See [DroneCAN Lights](../dronecan/lights.md) for configuration instructions. + +The `light_id` for each LED is calculated as: `esc_index × 3 + BASE_ID`, where `BASE_ID` is 1 for RGB and 2 for White. + ### DShot/PWM Configuration Instructions for integrating the motor/ESC using PWM and DShot can be found in [PWM and DShot Control with a Flight Controller](https://iqmotion.readthedocs.io/en/latest/tutorials/pwm_control_flight_controller.html). diff --git a/docs/zh/power_module/holybro_pm06_pixhawk4mini_power_module.md b/docs/zh/power_module/holybro_pm06_pixhawk4mini_power_module.md index b726a275e9..8f2b236bb6 100644 --- a/docs/zh/power_module/holybro_pm06_pixhawk4mini_power_module.md +++ b/docs/zh/power_module/holybro_pm06_pixhawk4mini_power_module.md @@ -26,6 +26,8 @@ This power module has integrated power distribution board and provides regulated ## Wiring/Connections -Wiring and connection examples can be found in: [Pixhawk 4 Mini > Power](../assembly/quick_start_pixhawk4_mini.md#power). +![pm06_pin_map](../../assets/hardware/power_module/holybro_pm06/pm06_pin_map.jpg) - +This image shows the wiring and connections for the [Pixhawk 4 Mini](https://docs.px4.io/v1.16/en/assembly/quick_start_pixhawk4_mini#power) (discontinued). + +![Pixhawk 4 - Power Management Board](../../assets/hardware/power_module/holybro_pm06/pixhawk4mini_power_management.png) diff --git a/docs/zh/power_module/index.md b/docs/zh/power_module/index.md index d8df4ce2ec..5fd1952772 100644 --- a/docs/zh/power_module/index.md +++ b/docs/zh/power_module/index.md @@ -13,7 +13,7 @@ The PX4 battery/power module configuration (via the ADC interface) is covered in For easiest assembly use a power module or PDB recommended by your FC manufacturer, and sized for your power requirements. The Pixhawk connector standard requires that the VCC line must provide at least 2.5A continuous current and default to 5.3V. -In in practice flight controllers may have different recommendations or preferences, so if you don't (or can't) use a recommended module, check that the module matches your FC's requirements. +In practice flight controllers may have different recommendations or preferences, so if you don't (or can't) use a recommended module, check that the module matches your FC's requirements. ::: This section provides information about a number of power modules and power distribution boards (see FC manufacturer docs for more options): diff --git a/docs/zh/releases/1.12.md b/docs/zh/releases/1.12.md index c56534128d..c0957f15e0 100644 --- a/docs/zh/releases/1.12.md +++ b/docs/zh/releases/1.12.md @@ -28,7 +28,7 @@ - **RTL Trigger based on remaining flight range ([PR#16399](https://github.com/PX4/PX4-Autopilot/pull/16399))** - Calculates time to home, on RTL, taking into account vehicle speed, wind speed, and destination distance/direction -- **Pre-emptive geofence breach ([PR#16400](https://github.com/PX4/PX4-Autopilot/pull/16400))** +- **Preemptive geofence breach ([PR#16400](https://github.com/PX4/PX4-Autopilot/pull/16400))** - Triggers a breach if the _predicted_ current trajectory will result in a breach, allowing the vehicle to be re-routed to a safe hold position. - **Airframe Scripts** - The syntax for setting defaults was changed and custom scripts require an update @@ -128,7 +128,7 @@ The gains have a new meaning ### NuttX -Nuttx was upgraded from [8.2+ to NuttX 10.10.0+](https://github.com/apache/incubator-nuttx/compare/nuttx-8.2..nuttx-10.0.1) (@ [904a602c74dc08a100b5c2bd490807de19e73e10](https://github.com/apache/incubator-nuttx/commit/904a602c74dc08a100b5c2bd490807de19e73e10)) +Nuttx was upgraded from [8.2+ to NuttX 10.10.0+](https://github.com/apache/nuttx/compare/nuttx-8.2..nuttx-10.0.1) (@ [904a602c74dc08a100b5c2bd490807de19e73e10](https://github.com/apache/nuttx/commit/904a602c74dc08a100b5c2bd490807de19e73e10)) - **SDCARD performance:** Results in better performance on H7 Targets - [**BACKPORT**] stm32:SDIO:Use 250 Ms Data path timeout, regardless of Card Clock frequency diff --git a/docs/zh/releases/1.14.md b/docs/zh/releases/1.14.md index bf1e8982e4..069d38cf58 100644 --- a/docs/zh/releases/1.14.md +++ b/docs/zh/releases/1.14.md @@ -51,10 +51,10 @@ The new [Failsafe State Machine Simulation](../config/safety_simulation.md) allo ### New Gazebo -Given [the recent changes](https://discourse.ros.org/t/a-new-era-for-gazebo-cross-post/25012) by the Open Robotics simulation team, we are introducing name changes for our gazebo simulations, mirroring Open Robotics naming scheme, starting with v1.14: +Given [the recent changes](https://discourse.openrobotics.org/t/a-new-era-for-gazebo-cross-post/25012) by the Open Robotics simulation team, we are introducing name changes for our gazebo simulations, mirroring Open Robotics naming scheme, starting with v1.14: -- [Ignition Gazebo](https://docs.px4.io/v1.13/en/simulation/ignition_gazebo.html) to [Gazebo](../sim_gazebo_gz/index.md) -- [Gazebo](https://docs.px4.io/v1.13/en/simulation/gazebo.html) to [Gazebo Classic](../sim_gazebo_classic/index.md). +- [Ignition Gazebo](https://docs.px4.io/v1.13/en/simulation/ignition_gazebo) to [Gazebo](../sim_gazebo_gz/index.md) +- [Gazebo](https://docs.px4.io/v1.13/en/simulation/gazebo) to [Gazebo Classic](../sim_gazebo_classic/index.md). Most importantly this affects the PX4 build target names as well: @@ -63,7 +63,7 @@ Most importantly this affects the PX4 build target names as well: ### Improved ROS 2 Interface via uXRCE-DDS -We updated the ROS 2 interface, replacing [Fast-RTPS](https://docs.px4.io/v1.13/en/middleware/micrortps.html) with [uXRCE-DDS](../ros2/user_guide.md), resulting in an improved experience across the board. +We updated the ROS 2 interface, replacing [Fast-RTPS](https://docs.px4.io/v1.13/en/middleware/micrortps) with [uXRCE-DDS](../ros2/user_guide.md), resulting in an improved experience across the board. The change also avoids the need for `_rtps` build targets, enabling the interface on even more targets by default. ## Upgrade Guide @@ -85,7 +85,7 @@ For users upgrading from previous versions, please take a moment to review the f 3. Fast-RTPS users must port their code to the new uXRCE-DDS interface. Application code should only require minor modifications. These include (minimally): -Modifying topic names to match the new naming pattern, which changed from `fmu//out` to `fmu/out/`, and [Adusting the QoS settings](../ros2/user_guide.md#ros-2-subscriber-qos-settings). +Modifying topic names to match the new naming pattern, which changed from `fmu//out` to `fmu/out/`, and [Adjusting the QoS settings](../ros2/user_guide.md#ros-2-subscriber-qos-settings). For more information see [Fast-RTPS to uXRCE-DDS Migration Guidelines](../middleware/uxrce_dds.md#fast-rtps-to-uxrce-dds-migration-guidelines) @@ -102,7 +102,7 @@ For more information see [Fast-RTPS to uXRCE-DDS Migration Guidelines](../middle - Failsafe state machine rewrite and [web simulation](../config/safety_simulation.md) - Improved preflight failure check reporting (requires QGC [v4.2.0](https://github.com/mavlink/qgroundcontrol/releases/tag/v4.2.0) or later): [PX4-Autopilot#20030](https://github.com/PX4/PX4-Autopilot/pull/20030) and [qgroundcontrol#10362](https://github.com/mavlink/qgroundcontrol/pull/10362) -- [Package delivery in mission](../advanced/package_delivery.md): For package delivery applications, inital support for payload delivery in mission for gripper actuator was added +- [Package delivery in mission](../advanced/package_delivery.md): For package delivery applications, initial support for payload delivery in mission for gripper actuator was added - Manual control setpoint message redefinition: `manual_control_setpoint.x`, `y`, `z`, `w` -> `roll`, `pitch`, `yaw`, `throttle`; `throttle scale [0,1] -> [-1,1]` - [PX4-Autopilot#15949](https://github.com/PX4/PX4-Autopilot/pull/15949) - Default motor PWM configuration - [PX4-Autopilot#21800](https://github.com/PX4/PX4-Autopilot/pull/21800) - Fix PWM/Oneshot calibration - [PX4-Autopilot#21726](https://github.com/PX4/PX4-Autopilot/pull/21726) @@ -135,7 +135,7 @@ For more information see [Fast-RTPS to uXRCE-DDS Migration Guidelines](../middle - [Gazebo-classic] Addition of Omnicopter model: A fully actuated omnidirectional vehicle model has been added to Gazebo SITL - https://github.com/PX4/PX4-SITL_gazebo-classic/pull/866 - [Gazebo-classic] Addition of Advanced liftdrag plugin: Advanced liftdrag plugin that models nonlinear aerodynamics based on AVL - [PX4-SITL_gazebo-classic#901](https://github.com/PX4/PX4-SITL_gazebo-classic/pull/901) - [Gazebo-classic] Addition of Safe landing world: Addition of safe landing world, for testing safe landing - [PX4-SITL_gazebo-classic#93](https://github.com/PX4/PX4-SITL_gazebo-classic/pull/93) -- [Gazebo-classic] Depricated Ubuntu Bionic reated tests: Removed testing due to EOL of Ubuntu Bionic - [PX4-SITL_gazebo-classic#974](https://github.com/PX4/PX4-SITL_gazebo-classic/pull/974) +- [Gazebo-classic] Deprecated Ubuntu Bionic reated tests: Removed testing due to EOL of Ubuntu Bionic - [PX4-SITL_gazebo-classic#974](https://github.com/PX4/PX4-SITL_gazebo-classic/pull/974) - [SIH] Standalone sensor simulations in tree: Ability to simulate sensors in tree that was part of SIH is now a stand alone sensor module. Sensors include magnetometer, GPS, Barometer, Airspeed - [PX4-Autopilot#20137](https://github.com/PX4/PX4-Autopilot/pull/20137), https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/simulation/sensor_airspeed_sim - [SIH] Failure injection for battery simulation - https://github.com/PX4/PX4-Autopilot/commit/ebc1d7544e8146788c9e7cf5e8b64f60199240e4 diff --git a/docs/zh/releases/1.15.md b/docs/zh/releases/1.15.md index 1b1dc34cc5..c791204592 100644 --- a/docs/zh/releases/1.15.md +++ b/docs/zh/releases/1.15.md @@ -67,7 +67,7 @@ Please continue reading for [upgrade instructions](#upgrade-guide). ### Control -- **[Offboard]** [ros2 offboard control](../flight_modes/offboard.md#ros-2-messages) allows for direct motors and servo control ([PX4-Autopilot#22222](https://github.com/PX4/PX4-Autopilot/pull/22222)) +- **[Offboard]** [ros2 offboard control](../flight_modes/offboard.md#ros-2-offboard-control) allows for direct motors and servo control ([PX4-Autopilot#22222](https://github.com/PX4/PX4-Autopilot/pull/22222)) ### Estimation @@ -79,7 +79,7 @@ Please continue reading for [upgrade instructions](#upgrade-guide). - Correct way of describing the quaternion uncertainty using Lie group theory - Use Joseph stabilized covariance update algorithm for better covariance stability and allow use of "consider states" (inactive states with non-zero variance) ([PX4-Autopilot#22770](https://github.com/PX4/PX4-Autopilot/pull/22770)) - Covariance prediction, measurement jacobians, state struct and covariance index auto-generated using SymForce -- Manual position update throught MAVLink (`MAV_CMD_EXTERNAL_POSITION_ESTIMATE`) +- Manual position update through MAVLink (`MAV_CMD_EXTERNAL_POSITION_ESTIMATE`) - Add Auxiliary Global Position (AGP) fusion (for e.g.: external map matching vision algorithm) **Mag:** diff --git a/docs/zh/releases/1.16.md b/docs/zh/releases/1.16.md index 66b64f9f5b..34b248cebf 100644 --- a/docs/zh/releases/1.16.md +++ b/docs/zh/releases/1.16.md @@ -57,7 +57,7 @@ Please continue reading for [upgrade instructions](#upgrade-guide). - [Voltage-based estimation with load compensation](../config/battery.md#voltage-based-estimation-with-load-compensation) now uses a real-time estimate of the internal resistance of the battery to compensate voltage drops under load (with increased current), providing a better capacity estimate than with the raw measured voltage. - Thrust-based load compensation has been removed (along with the `BATn_V_LOAD_DROP` parameters, where `n` is the battery number). -- The [Position (GNSS) loss failsafe](../config/safety.md#position-gnss-loss-failsafe) configurable delay (`COM_POS_FS_DELAY`) has been removed. +- The [Position (GNSS) loss failsafe](../config/safety.md#position-loss-failsafe) configurable delay (`COM_POS_FS_DELAY`) has been removed. The failsafe will now trigger 1 second after position has been lost. ([PX4-Autopilot#24063](https://github.com/PX4/PX4-Autopilot/pull/24063)). - [Log Encryption](../dev_log/log_encryption.md) now generates an encrypted log that contains the public-key-encrypted symmetric key that can be used to decrypt it, instead of putting the key into a separate file. @@ -160,7 +160,7 @@ Please continue reading for [upgrade instructions](#upgrade-guide). - mavlink_ftp: handle relative paths correctly. ([PX4-Autopilot#22980](https://github.com/PX4/PX4-Autopilot/pull/22980)) - Parameter to always start mavlink stream via USB. ([PX4-Autopilot#22234](https://github.com/PX4/PX4-Autopilot/pull/22234)) - Refactor: MAVLink message handling in one function, reference instead of pointer to main instance ([PX4-Autopilo#23219](https://github.com/PX4/PX4-Autopilot/pull/22234)) -- mavlink log handler rewrite for improved effeciency ([PX4-Autopilo#23219](https://github.com/PX4/PX4-Autopilot/pull/22234)) +- mavlink log handler rewrite for improved efficiency ([PX4-Autopilo#23219](https://github.com/PX4/PX4-Autopilot/pull/22234)) ### Multi-Rotor diff --git a/docs/zh/releases/1.17.md b/docs/zh/releases/1.17.md index 1d32628731..15d43c70d5 100644 --- a/docs/zh/releases/1.17.md +++ b/docs/zh/releases/1.17.md @@ -9,11 +9,11 @@ const { site } = useData();
-

This page is on a release branch, and hence probably out of date. See the latest version.

+

This page is on a release branch, and hence probably out of date. See the latest version.

-This contains changes to PX4 planned for PX4 v1.17 (since the last major release [PX v1.16](../releases/1.16.md)). +This contains changes in PX4 v1.17 (since the last major release [PX v1.16](../releases/1.16.md)). :::warning PX4 v1.17 is in alpha/beta testing. @@ -57,7 +57,7 @@ Please continue reading for [upgrade instructions](#upgrade-guide). --> -- [MC Neural Network Module](../advanced/neural_networkss.md) +- [MC Neural Network Module](../advanced/neural_networks.md) ### Estimation @@ -79,7 +79,7 @@ Please continue reading for [upgrade instructions](#upgrade-guide). - Add synthetic mecanum rover model: [PX4-gazebo-models#113](https://github.com/PX4/PX4-gazebo-models/pull/113) - Update synthetic ackermann rover model: [PX4-gazebo-models#117](https://github.com/PX4/PX4-gazebo-models/pull/117) -- [Simulation-in-Hardware (SIH)](../sim_sih/index.md#compatibility) +- [Simulation-in-Hardware (SIH)](../sim_sih/index.md#supported-vehicle-types) - New simulation: MC Hexacopter X - New simulation: Ackermann Rover diff --git a/docs/zh/releases/index.md b/docs/zh/releases/index.md index a3a486fa6c..8598e86027 100644 --- a/docs/zh/releases/index.md +++ b/docs/zh/releases/index.md @@ -3,7 +3,7 @@ 这是一份 PX4 发行说明列表,其中包含每次发布所做更改的清单,详细说明了新增功能、漏洞修复、弃用内容以及更新情况。 - [main](../releases/main.md) (changes planned for v1.18 or later) -- [v1.17](../releases/1.17.md) (changes planned for v1.17, since v1.16) +- [v1.17](../releases/1.17.md) (changes in v1.17, since v1.16) - [v1.16](../releases/1.16.md) - [v1.15](../releases/1.15.md) - [v1.14](../releases/1.14.md) diff --git a/docs/zh/releases/main.md b/docs/zh/releases/main.md index b8a4d4a467..7673ba4748 100644 --- a/docs/zh/releases/main.md +++ b/docs/zh/releases/main.md @@ -9,7 +9,7 @@ const { site } = useData();
-

This page is on a release branch, and hence probably out of date. See the latest version.

+

This page is on a release branch, and hence probably out of date. See the latest version.

@@ -22,7 +22,8 @@ Update these notes with features that are going to be in `main` (PX4 v1.18 or la ## Read Before Upgrading -- TBD … +- Log rotation is now enabled by default. Previously, a single log file grew for the entire flight and old logs were only deleted at boot once free space fell below a fixed 300 MB floor. The logger now caps each log file at [SDLOG_MAX_SIZE](../advanced_config/parameter_reference.md#SDLOG_MAX_SIZE) (new parameter, default `1024` MB) and keeps a configurable percentage of the disk free via [SDLOG_ROTATE](../advanced_config/parameter_reference.md#SDLOG_ROTATE) (new parameter, default `90`, so at least 10% free). Cleanup runs at log start rather than boot, so logs can still be downloaded via FTP before they are deleted. See [Log Cleanup](../dev_log/logging.md#log-cleanup) for details. +- `SDLOG_DIRS_MAX` behaviour changed: it is now an orthogonal directory-count cap that runs on top of the new space-based cleanup, and the default is `0` (disabled). Previously it enforced a fixed ~300 MB free-space floor even when set to `0`. If you relied on that implicit floor, set [SDLOG_ROTATE](../advanced_config/parameter_reference.md#SDLOG_ROTATE) instead. Please continue reading for [upgrade instructions](#upgrade-guide). @@ -40,16 +41,22 @@ Please continue reading for [upgrade instructions](#upgrade-guide). ### Common +- [Remote ID (Open Drone ID) in-flight failsafe](../peripherals/remote_id.md): extended [COM_ARM_ODID](../advanced_config/parameter_reference.md#COM_ARM_ODID) to also trigger a configurable failsafe action (Return, Land, or Terminate) if the Remote ID heartbeat is lost while airborne. Users previously on `COM_ARM_ODID=2` retain the same arming behaviour; set to `3` or higher to enable the in-flight action. ([PX4-Autopilot#27029](https://github.com/PX4/PX4-Autopilot/pull/27029)) - [QGroundControl Bootloader Update](../advanced_config/bootloader_update.md#qgc-bootloader-update-sys-bl-update) via the [SYS_BL_UPDATE](../advanced_config/parameter_reference.md#SYS_BL_UPDATE) parameter has been re-enabled after being broken for a number of releases. ([PX4-Autopilot#25032: build: romf: fix generation of rc.board_bootloader_upgrade](https://github.com/PX4/PX4-Autopilot/pull/25032)). +- [Feature: Allow prioritization of manual control inputs based on their instance number in ascending or descending order](../config/manual_control.md#px4-configuration). ([PX4-Autopilot#25602: Ascending and descending manual control input priorities](https://github.com/PX4/PX4-Autopilot/pull/25602)). ### Control - Added new flight mode(s): [Altitude Cruise (MC)](../flight_modes_mc/altitude_cruise.md), Altitude Cruise (FW). For fixed-wing the mode behaves the same as Altitude mode but you can disable the manual control loss failsafe. ([PX4-Autopilot#25435: Add new flight mode: Altitude Cruise](https://github.com/PX4/PX4-Autopilot/pull/25435)). +### 安全 + +- Rotary-wing vehicles now support uncommanded altitude loss detection: if the vehicle descends more than [FD_ALT_LOSS](../advanced_config/parameter_reference.md#FD_ALT_LOSS) meters below its setpoint in altitude-controlled flight, flight termination (and parachute deployment) is triggered. See [Altitude Loss Trigger](../config/safety.md#altitude-loss-trigger). ([PX4-Autopilot#26837](https://github.com/PX4/PX4-Autopilot/pull/26837)) + ### Estimation -- TBD +- Added [EKF2_POS_LOCK](../advanced_config/parameter_reference.md#EKF2_POS_LOCK) to force constant position fusion while landed, useful for vehicles relying on dead-reckoning sensors (airspeed, optical flow) that provide no aiding on the ground. ### 传感器 @@ -58,7 +65,7 @@ Please continue reading for [upgrade instructions](#upgrade-guide). ### 仿真 -- TBD +- SIH: Add option to set wind velocity ([PX4-Autopilot#26467](https://github.com/PX4-Autopilot/pull/26467)) @@ -137,7 +137,7 @@ make px4_sitl 2. 一些Python 依赖关系也必须安装 (使用 **`pip`** 或 **`apt`**): ```sh - pip install --user -U empy==3.3.4 pyros-genmsg setuptools + pip install --user -U empty==3.3.4 pyros-genmsg setuptools ``` ### 配置微型 XRCE-DDS 代理与客户端 diff --git a/docs/zh/sensor/airspeed.md b/docs/zh/sensor/airspeed.md index 0442aae34f..ad8ee1e01e 100644 --- a/docs/zh/sensor/airspeed.md +++ b/docs/zh/sensor/airspeed.md @@ -11,8 +11,8 @@ For fixed-wing flight it is the airspeed that guarantees lift — not ground spe Recommended digital airspeed sensors include: - Based on [Pitot tube](https://en.wikipedia.org/wiki/Pitot_tube) - - I2C MEAS Spec series (e.g. [MS4525DO](https://www.te.com/usa-en/product-CAT-BLPS0002.html), [MS5525](https://www.te.com/usa-en/product-CAT-BLPS0003.html)) - - [mRo I2C Airspeed Sensor JST-GH MS4525DO](https://store.3dr.com/mro-i2c-airspeed-sensor-jst-gh-ms4525do/) (3DR store) + - I2C MEAS Spec series (e.g. [MS4525DO](https://www.te.com/en/product-20003581-00.html), [MS5525](https://www.te.com/usa-en/product-CAT-BLPS0003.html)) + - [mRo I2C Airspeed Sensor JST-GH MS4525DO](https://store.3dr.com/airspeed-sensor-jst-gh-ms4525do/) (3DR store) - [Digital Differential Airspeed Sensor Kit - MS4525DO](https://store-drotek.com/793-digital-differential-airspeed-sensor-kit-.html) (Drotek). - [Holybro Digital Air Speed Sensor - MS4525DO](https://holybro.com/collections/sensors/products/digital-air-speed-sensor-ms4525do) - [Holybro Digital Air Speed Sensor - MS5525DSO](https://holybro.com/collections/sensors/products/digital-air-speed-sensor-ms5525dso) @@ -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. diff --git a/docs/zh/sensor/airspeed_tfslot.md b/docs/zh/sensor/airspeed_tfslot.md index 5c96e40fe2..8bdd90e0c2 100644 --- a/docs/zh/sensor/airspeed_tfslot.md +++ b/docs/zh/sensor/airspeed_tfslot.md @@ -5,7 +5,7 @@ ![TFSLOT and TFSLOT WITH TFASPDIMU02 board](../../assets/hardware/sensors/airspeed/tsflot_compose.jpg) [TFSLOT](https://github.com/ThunderFly-aerospace/TFSLOT01) is an airspeed sensor based on venturi effects. -In the basic configuration, the TFSLOT is equipped with the [TFASPDIMU02](https://github.com/ThunderFly-aerospace/TFASPDIMU02) sensor board, which contains a differential pressure sensor ([Sensirion SDP3x series](https://sensirion.com/products/catalog/?filter_series=d1816d53-f5c8-47e3-ab47-818c3fd54259)) and a 9-axis motion tracking sensor ([ICM-20948](https://invensense.tdk.com/products/motion-tracking/9-axis/icm-20948/)). +In the basic configuration, the TFSLOT is equipped with the [TFASPDIMU02](https://github.com/ThunderFly-aerospace/TFASPDIMU02) sensor board, which contains a differential pressure sensor ([Sensirion SDP3x series](https://sensirion.com/products/catalog?filter_series=d1816d53-f5c8-47e3-ab47-818c3fd54259)) and a 9-axis motion tracking sensor ([ICM-20948](https://invensense.tdk.com/products/motion-tracking/9-axis/icm-20948/)). The IMU unit can be used as an external compass. - This design brings several advantages when used on small-scale and slow-flying UAVs. diff --git a/docs/zh/sensor/barometer.md b/docs/zh/sensor/barometer.md index f9fd0496bd..02d4bc8a48 100644 --- a/docs/zh/sensor/barometer.md +++ b/docs/zh/sensor/barometer.md @@ -65,7 +65,7 @@ This calibration is controlled by the [SENS_BAR_AUTOCAL](../advanced_config/para The algorithm monitors GNSS quality, collects altitude differences over a 2-second filtered window, and verifies stability within 4m tolerance. Once stable, it uses binary search to calculate pressure offsets that align baro altitude with GNSS altitude (0.1m precision), then applies the offset to all sensors and saves the parameters. -备注: +Notes: - **EKF Independence**: GNSS-baro calibration operates independently of EKF2 altitude fusion settings. - **Execution Timing**: Calibration runs even when [EKF2_GPS_CTRL](../advanced_config/parameter_reference.md#EKF2_GPS_CTRL) altitude fusion is disabled. diff --git a/docs/zh/sensor/grf_lidar.md b/docs/zh/sensor/grf_lidar.md new file mode 100644 index 0000000000..53c32da749 --- /dev/null +++ b/docs/zh/sensor/grf_lidar.md @@ -0,0 +1,69 @@ +# Lightware GRF250/GRF500 Gimbal Lidar + +LightWare [GRF250](https://lightwarelidar.com/shop/grf-250/) and [GRF500](https://lightwarelidar.com/shop/grf-500/) are small and light Lidar modules with a range of 250m and 500m, respectively. + +![LightWare GRF250 Gimbal Lidar](../../assets/hardware/sensors/lidar_lightware/grf_500.png) + +:::info +The Lidar driver is not included in the default build of PX4. +You will need to [create and use a custom build](#add-the-driver-to-the-px4-build). +::: + +## 购买渠道 + +Order these modules from: + +- [GRF250](https://lightwarelidar.com/shop/grf-250/) +- [GRF500](https://lightwarelidar.com/shop/grf-500/) + +## 硬件安装 + +The rangefinder can be connected to any unused serial port, such as `TELEM2`. +[Parameter Configuration](#parameter-configuration) explains how to configure the port to use and the other properties of the rangefinder. + +## PX4 Setup + +### Add the Driver to the PX4 Build + +The [lightware_grf_serial](../modules/modules_driver_distance_sensor.md#lightware-grf-serial) driver for this Lidar is not included in PX4 firmware by default. +In order to use these modules you will first need to update the firmware configuration to add the driver, and then build the firmware. + +1. Update the firmware configuration. You can use either of the following options: + - Menuconfig: + 1. Install and open [menuconfig](../hardware/porting_guide_config.md#px4-menuconfig-setup) + 2. In [menuconfig](../hardware/porting_guide_config.md#px4-menuconfig-setup), navigate to **Drivers > Distance sensors** + 3. Select/Enable `lightware_grf_serial` + 4. Save the configuration + + - Manually update `default.px4` to include the configuration key: + 1. Open the `default.px4board` config file that corresponds to the board you want to build for. + For example, to add the driver to `fmu-v6x` boards you would update [/boards/px4/fmu-v6x/default.px4board ](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/fmu-v6x/default.px4board) + 2. Add the following line and save the file: + + ```txt + CONFIG_DRIVERS_DISTANCE_SENSOR_LIGHTWARE_GRF_SERIAL=y + ``` + +2. [Build PX4](../dev_setup/building_px4.md) for your flight controller target and upload the new firmware. + +### Parameter Configuration + +You will need to configure PX4 to indicate the serial port to which the sensor is connected (as per [Serial Port Configuration](../peripherals/serial_configuration.md)) and also the orientation and other properties of the sensor. + +The [parameters to change](../advanced_config/parameters.md) are listed in the table. + +| 参数 | 描述 | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------ | +| [SENS_EN_GRF_CFG](../advanced_config/parameter_reference.md#SENS_EN_GRF_CFG) | Set to the serial port the sensor is connected to. | +| [GRF_RATE_CFG](../advanced_config/parameter_reference.md#GRF_RATE_CFG) | Set the update rate. | +| [GRF_SENS_MODEL](../advanced_config/parameter_reference.md#GRF_SENS_MODEL) | Set the sensor model to use. | + +## 测试 + +You can confirm that the sensor is correctly configured by connecting QGroundControl, and observing that [DISTANCE_SENSOR](https://mavlink.io/en/messages/common.html#DISTANCE_SENSOR) is present in the [MAVLink Inspector](https://docs.qgroundcontrol.com/master/en/qgc-user-guide/analyze_view/mavlink_inspector.html). + +Moving the sensor around at various distances from a surface will have the `current_distance` value change. + +## 故障处理 + +If you are having problems with connecting to the sensor you may need to unassign a the default serial port. [Unassign Default Serial Port](../peripherals/serial_configuration.md) diff --git a/docs/zh/sensor/inertial_navigation_systems.md b/docs/zh/sensor/inertial_navigation_systems.md index 36b0fb97e8..c35aad06d5 100644 --- a/docs/zh/sensor/inertial_navigation_systems.md +++ b/docs/zh/sensor/inertial_navigation_systems.md @@ -49,5 +49,4 @@ Essentially it is an AHRS that also includes position/velocity estimation. ## 更多信息 -- [What is an Inertial Navigation System?](https://www.vectornav.com/resources/inertial-navigation-articles/what-is-an-ins) (VectorNav) - [Inertial Navigation Primer](https://www.vectornav.com/resources/inertial-navigation-primer) (VectorNav) diff --git a/docs/zh/sensor/inertiallabs.md b/docs/zh/sensor/inertiallabs.md index 68e231041b..82af82b866 100644 --- a/docs/zh/sensor/inertiallabs.md +++ b/docs/zh/sensor/inertiallabs.md @@ -21,8 +21,8 @@ The mode is configurable using a parameter. [Get technical support or send requests to sales team](https://inertiallabs.com/inertial-labs-inc/contact-inertial-labs-team/). Recommended sensors: -- [INS-U GNSS/INS](https://inertiallabs.com/ins-u-datasheet): Recommended for fixed-wing systems without hovering, where static heading is not necessary. -- [INS-DU DUAL GNSS/INS](https://inertiallabs.com/ins-du-datasheet): Recommended for multicopter systems where hovering and low dynamics requires the use of static heading. +- [INS-U GNSS/INS](https://inertiallabs.com/wp-content/uploads/2026/01/INS-U_INS-U-OEM_Datasheet_REV2.18_JAN2026.pdf): Recommended for fixed-wing systems without hovering, where static heading is not necessary. +- [INS-DU DUAL GNSS/INS](https://inertiallabs.com/wp-content/uploads/2025/12/INS-DU_INS-DU-OEM_Datasheet_REV1.00_DEC2025.pdf): Recommended for multicopter systems where hovering and low dynamics requires the use of static heading. ## 硬件安装 diff --git a/docs/zh/sensor/lidar_lite.md b/docs/zh/sensor/lidar_lite.md index c4ae26f23e..09b6cb0e1f 100644 --- a/docs/zh/sensor/lidar_lite.md +++ b/docs/zh/sensor/lidar_lite.md @@ -6,7 +6,7 @@ LIDAR-Lite is a compact, high-performance optical distant measurement sensor sol ## 购买渠道 -- [LIDAR-Lite v3](https://buy.garmin.com/en-AU/AU/p/557294) (5cm - 40m) +- [LIDAR-Lite v3](https://www.garmin.com/en-AU/p/557294/) (5cm - 40m) ## 针脚定义 diff --git a/docs/zh/sensor/microstrain.md b/docs/zh/sensor/microstrain.md index 9d1e630ae5..9546b0dd29 100644 --- a/docs/zh/sensor/microstrain.md +++ b/docs/zh/sensor/microstrain.md @@ -7,10 +7,10 @@ Widely used across industries like aerospace, robotics, industrial automation, a The driver currently supports the following hardware: -- [`MicroStrain CV7-AR`](https://www.hbkworld.com/en/products/transducers/inertial-sensors/vertical-reference-units--vru-/3dm-cv7-ar): Inertial Measurement Unit (IMU) and Vertical Reference Unit (VRU) -- [`MicroStrain CV7-AHRS`](https://www.hbkworld.com/en/products/transducers/inertial-sensors/attitude-and-heading-reference-systems--ahrs-/3dm-cv7-ahrs): Inertial Measurement Unit (IMU) and Attitude Heading Reference System (AHRS) -- [`MicroStrain CV7-INS`](https://www.hbkworld.com/en/products/transducers/inertial-sensors/inertial-navigation-systems--ins-/3dm-cv7-ins): Inertial Measurement Unit (IMU) and Inertial Navigation System (INS). -- [`MicroStrain CV7-GNSS/INS`](https://www.hbkworld.com/en/products/transducers/inertial-sensors/inertial-navigation-systems--ins-/3dm-cv7-gnss-ins): Inertial Measurement Unit (IMU) and Inertial Navigation System (INS) combined with dual multiband (GNSS) receivers. +- [`MicroStrain CV7-AR`](https://www.hbkworld.com/en/products/transducers/inertial-sensors/vertical-reference/3dm-cv7-ar): Inertial Measurement Unit (IMU) and Vertical Reference Unit (VRU) +- [`MicroStrain CV7-AHRS`](https://www.hbkworld.com/en/products/transducers/inertial-sensors/attitude-and-heading/3dm-cv7-ahrs): Inertial Measurement Unit (IMU) and Attitude Heading Reference System (AHRS) +- [`MicroStrain CV7-INS`](https://www.hbkworld.com/en/products/transducers/inertial-sensors/navigation/3dm-cv7-ins): Inertial Measurement Unit (IMU) and Inertial Navigation System (INS). +- [`MicroStrain CV7-GNSS/INS`](https://www.hbkworld.com/en/products/transducers/inertial-sensors/navigation/3dm-cv7-gnss-ins): Inertial Measurement Unit (IMU) and Inertial Navigation System (INS) combined with dual multiband (GNSS) receivers. PX4 can use these sensors to provide raw IMU data for EKF2 or to replace EKF2 as an external INS. For more information, including user manuals and datasheets, please refer to the sensors product page. @@ -18,7 +18,7 @@ For more information, including user manuals and datasheets, please refer to the ## 购买渠道 MicroStrain sensors can be purchased through HBK's official [MicroStrain product page](https://www.hbkworld.com/en/products/transducers/inertial-sensors) or through authorized distributors globally. -For large orders, custom requirements, or technical inquiries, reach out directly to [sales](https://www.hbkworld.com/en/contact-us/contact-sales-microstrain) +For large orders, custom requirements, or technical inquiries, reach out directly to [sales](https://www.hbkworld.com/en/contact-us) ## 硬件安装 diff --git a/docs/zh/sensor/optical_flow.md b/docs/zh/sensor/optical_flow.md index 682685a1f7..029e611265 100644 --- a/docs/zh/sensor/optical_flow.md +++ b/docs/zh/sensor/optical_flow.md @@ -34,6 +34,12 @@ The information is written to the corresponding uORB topics: [DistanceSensor](.. | Right | - X | | Left | + X | +:::info +The integrated flow values are **angular measurements** (radians) representing rotation of the image about the sensor's body axes using the right-hand convention. +They are _not_ translational displacements along those axes, which is why forward vehicle movement (along X) appears in the Y flow axis, and rightward movement (along Y) appears in the X flow axis. +Specifically, forward movement causes the ground image to rotate about the Y axis (+ Y), while rightward movement causes a negative rotation about the X axis (- X). +::: + Sensor data from the optical flow device is fused with other velocity data sources. The approach used for fusing sensor data and any offsets from the center of the vehicle must be configured in the [estimator](#estimators). @@ -71,7 +77,7 @@ It is used in a number of products, including some from: Bitcraze, Tindie, Hex, ### Other Cameras/Sensors It is also possible to use a board/quad that has an integrated camera. -For this the [Optical Flow repo](https://github.com/PX4/OpticalFlow) can be used (see also [snap_cam](https://github.com/PX4/snap_cam)). +For this the [Optical Flow repo](https://github.com/PX4/PX4-OpticalFlow) can be used (see also [snap_cam](https://github.com/PX4/snap_cam)). ## Range Finders diff --git a/docs/zh/sensor/px4flow.md b/docs/zh/sensor/px4flow.md index 646f9baf77..a3de079ce1 100644 --- a/docs/zh/sensor/px4flow.md +++ b/docs/zh/sensor/px4flow.md @@ -5,4 +5,4 @@ PX4 不支持 PX4 v1.13 的 PX4Flow [光流](../sensor/optical_flow.md)传感器(它不适用于当前固件)。 PX4可以使用旧的 PX4Flow 固件。 -文档已被删除(如果需要, 请参阅[v1.13中的 PX4Flow 的旧文档](https://docs.px4.io/v1.13/en/sensor/px4flow.html))。 +Documentation has been removed (if needed, see [Legacy Docs for PX4Flow in v1.13](https://docs.px4.io/v1.13/en/sensor/px4flow)). diff --git a/docs/zh/sensor/rangefinders.md b/docs/zh/sensor/rangefinders.md index 4e11fb19ac..9abb86c800 100644 --- a/docs/zh/sensor/rangefinders.md +++ b/docs/zh/sensor/rangefinders.md @@ -93,7 +93,7 @@ It comes with a JST GHR 4 pin connector that is compatible with the I2C port on ### MaxBotix I2CXL-MaxSonar-EZ -The MaxBotix [I2CXL-MaxSonar-EZ](https://www.maxbotix.com/product-category/i2cxl-maxsonar-ez-products) range has a number of relatively short-ranged sonar based rangefinders that are suitable for assisted takeoff/landing and collision avoidance. +The MaxBotix [I2CXL-MaxSonar-EZ](https://maxbotix.com/collections/i2cxl-maxsonar-ez-products) range has a number of relatively short-ranged sonar based rangefinders that are suitable for assisted takeoff/landing and collision avoidance. 这些可以使用 I2C 端口连接。 The rangefinders are enabled using the parameter [SENS_EN_MB12XX](../advanced_config/parameter_reference.md#SENS_EN_MB12XX). @@ -163,7 +163,7 @@ Features: - [VL53L1CBV0FY-1](https://www.st.com/resource/en/datasheet/vl53l1.pdf) sensor - Input voltage sensor -- CAN connectors: 2 [UCANPHY Micro (JST-GH 4)](https://raccoonlabdev.github.io/docs/guide/wires/). +- CAN connectors: 2 [UCANPHY Micro (JST-GH 4)](https://docs.raccoonlab.co/guide/wires/). ## Configuration/Setup {#configuration} diff --git a/docs/zh/sensor/sbgecom.md b/docs/zh/sensor/sbgecom.md index 40c0068cb0..129e9ce0f9 100644 --- a/docs/zh/sensor/sbgecom.md +++ b/docs/zh/sensor/sbgecom.md @@ -2,7 +2,7 @@ [SBG-Systems](https://www.sbg-systems.com/) designs, manufactures, and support an extensive range of state-of-the-art inertial sensors such as Inertial Measurement Units (IMU), Attitude and Heading Reference Systems (AHRS), Inertial Navigation Systems with embedded GNSS (INS/GNSS), and so on. -PX4 supports [all SBG Systems products](https://www.sbg-systems.com/products/) and can use these as an [external INS](../sensor/inertial_navigation_systems.md) (bypassing/replacing the EKF2 estimator), or as a source of raw sensor data provided to the navigation estimator. +PX4 supports [all SBG Systems products](https://www.sbg-systems.com/) and can use these as an [external INS](../sensor/inertial_navigation_systems.md) (bypassing/replacing the EKF2 estimator), or as a source of raw sensor data provided to the navigation estimator. ![Ellipse](../../assets/hardware/sensors/inertial/ellipse-inertial-navigation-system.png) @@ -17,7 +17,7 @@ SBG Systems products provide a range of benefits to PX4 users and can be integra The sbgECom PX4 driver is streamlined to provide a simple plug-and-play architecture, removing engineering obstacles and allowing the acceleration of the design, development, and launch of platforms to keep pace with the rapid rate of innovation. -The driver supports [all SBG Systems products](https://www.sbg-systems.com/products/). +The driver supports [all SBG Systems products](https://www.sbg-systems.com/). In particular the following systems are recommended: - **Pulse:** Recommended for fixed-wing systems without hovering, where static heading is not necessary. @@ -151,5 +151,5 @@ Published topics can be viewed using the `listener` command. ## Hardware Specifications -- [Product Briefs](https://www.sbg-systems.com/products/) +- [Product Briefs](https://www.sbg-systems.com/) - [Datasheets](https://www.sbg-systems.com/contact/#products) diff --git a/docs/zh/sensor/sf45_rotating_lidar.md b/docs/zh/sensor/sf45_rotating_lidar.md index 78cc7ff57b..0581ff545a 100644 --- a/docs/zh/sensor/sf45_rotating_lidar.md +++ b/docs/zh/sensor/sf45_rotating_lidar.md @@ -12,7 +12,7 @@ You will need to [create and use a custom build](#add-the-driver-to-the-px4-buil ## LightWare Studio Setup -In the [LightWare Studio](https://www.lightwarelidar.com/resources-software) app set following values: +In the [LightWare Studio](https://lightwarelidar.com/resources-software/) app set following values: | 参数 | 描述 | | --------- | ------ | diff --git a/docs/zh/sensor/sfxx_lidar.md b/docs/zh/sensor/sfxx_lidar.md index a2534add6e..433ee7af55 100644 --- a/docs/zh/sensor/sfxx_lidar.md +++ b/docs/zh/sensor/sfxx_lidar.md @@ -9,14 +9,14 @@ These are useful for applications including terrain following, precision hoverin The following models are supported by PX4, and can be connected to either the I2C or Serial bus (the tables below indicates what bus can be used for each model). -| Model | Range (m) | Bus | 描述 | -| ------------------------------------------------------- | ---------------------------- | ----------------- | ------------------------------------------------------------------------------------------------------------- | -| [SF11/C](https://lightwarelidar.com/shop/sf11-c-100-m/) | 100 | Serial or I2C bus | | -| [LW20/C](https://lightware.co.za/products/lw20-c-100-m) | 100 | I2C bus | Waterproofed (IP67) with servo for sense-and-avoid applications | -| [SF30/D](https://lightwarelidar.com/shop/sf30-d-200-m/) | 200 | I2C bus | Waterproofed (IP67) | -| [SF45/B](../sensor/sf45_rotating_lidar.md) | 50 | Serial | Rotary Lidar (Used for [Collision Prevention](../computer_vision/collision_prevention.md)) | -| [GRF250](https://lightwarelidar.com/shop/grf-250/) | 250 | I2C | Gimbal Range Finder | -| [GRF500](https://lightwarelidar.com/shop/grf-500/) | 500 | I2C | Gimbal Range Finder | +| Model | Range (m) | Bus | 描述 | +| ---------------------------------------------------------- | ---------------------------- | ----------------- | ------------------------------------------------------------------------------------------------------------- | +| [SF11/C](https://lightwarelidar.com/shop/sf11-c-100-m/) | 100 | Serial or I2C bus | | +| [LW20/C](https://lightwarelidar.com/products/lw20-c-100-m) | 100 | I2C bus | Waterproofed (IP67) with servo for sense-and-avoid applications | +| [SF30/D](https://lightwarelidar.com/shop/sf30-d-200-m/) | 200 | I2C bus | Waterproofed (IP67) | +| [SF45/B](../sensor/sf45_rotating_lidar.md) | 50 | Serial | Rotary Lidar (Used for [Collision Prevention](../computer_vision/collision_prevention.md)) | +| [GRF250](../sensor/grf_lidar.md) | 250 | Serial or I2C | Gimbal Range Finder | +| [GRF500](../sensor/grf_lidar.md) | 500 | Serial or I2C | Gimbal Range Finder | :::details Discontinued diff --git a/docs/zh/sensor/teraranger.md b/docs/zh/sensor/teraranger.md index f8b2a4b553..1a8e95c33b 100644 --- a/docs/zh/sensor/teraranger.md +++ b/docs/zh/sensor/teraranger.md @@ -1,12 +1,17 @@ -# TeraRanger 测距仪 +# TeraRanger Rangefinders (Discontinued) + +:::warning +TeraRanger Evo sensors were discontinued by Terabee in May 2024. +Limited stock may still be available from third-party resellers such as [Tribotix](https://tribotix.com/product/teraranger-evo-60m/). +::: TeraRanger provide a number of lightweight distance measurement sensor based on infrared Time-of-Flight (ToF) technology. 他们通常比声纳更快、范围更大、比基于激光的系统更小、更轻。 PX4 supports: -- [TeraRanger Evo 60m](https://www.terabee.com/shop/lidar-tof-range-finders/teraranger-evo-60m/) (0.5 – 60 m) -- [TeraRanger Evo 600Hz](https://www.terabee.com/shop/lidar-tof-range-finders/teraranger-evo-600hz/) (0.75 - 8 m) +- [TeraRanger Evo 60m](https://tribotix.com/product/teraranger-evo-60m/) (0.5 – 60 m) +- [TeraRanger Evo 600Hz](https://tribotix.com/product/teraranger-evo-600hz/) (0.75 - 8 m) :::info PX4 also supports _TeraRanger One_ (I2C adapter required). diff --git a/docs/zh/sensor/thunderfly_tachometer.md b/docs/zh/sensor/thunderfly_tachometer.md index 6ee25a921a..db1c75bc0b 100644 --- a/docs/zh/sensor/thunderfly_tachometer.md +++ b/docs/zh/sensor/thunderfly_tachometer.md @@ -31,7 +31,7 @@ The LED lights up when the pulse input is grounded or exposed to logical 0, so y Hall-Effect sensors (magnetically operated) are ideal for harsh environments, where dirt, dust, and water can contact the sensed rotor. Many different hall effect sensors are commercially available. -For example, a [55100 Miniature Flange Mounting Proximity Sensor](https://m.littelfuse.com/media?resourcetype=datasheets&itemid=6d69d457-770e-46ba-9998-012c5e0aedd7&filename=littelfuse-hall-effect-sensors-55100-datasheet) is a good choice. +For example, a [55100 Miniature Flange Mounting Proximity Sensor](https://www.littelfuse.com/assetdocs/littelfuse-hall-effect-sensors-55100-datasheet?assetguid=6d69d457-770e-46ba-9998-012c5e0aedd7) is a good choice. ![Example of Hall effect probe](../../assets/hardware/sensors/tfrpm/hall_probe.jpg) @@ -90,7 +90,7 @@ pcf8583 status ``` If the driver is running, the I²C port will be printed along with other basic parameters of the running instance. -If the driver is not running it can be started started using theprocedure described above. +If the driver is not running it can be started using theprocedure described above. The [listener](../modules/modules_command.md#listener) command allows you to monitor RPM UORB messages from the running driver. diff --git a/docs/zh/sensor/vectornav.md b/docs/zh/sensor/vectornav.md index ba09632367..540151f567 100644 --- a/docs/zh/sensor/vectornav.md +++ b/docs/zh/sensor/vectornav.md @@ -42,7 +42,7 @@ This can be changed to any rigid rotation using the VectorNav Reference Frame Ro If using a GNSS-enabled product, the GNSS antenna must be mounted rigidly with respect to the inertial sensor and with an unobstructed sky view. If using a dual-GNSS-enabled product (VN-3X0), the secondary antenna must be mounted rigidly with respect to the primary antenna and the inertial sensor with an unobstructed sky view. -For more mounting requirements and recommendations, see the relevant [Quick Start Guide](https://www.vectornav.com/resources/quick-start-guides). +For more mounting requirements and recommendations, see the relevant [Quick Start Guide](https://www.vectornav.com/resources/technical-documentation/quick-start-guides). ## Firmware Configuration @@ -82,7 +82,7 @@ IMU data should be published at 800Hz (400Hz if using VN-300). ## VectorNav Configuration -Definitions for all commands and registers referenced in this section can be found in the respective [VectorNav ICD](https://www.vectornav.com/resources/interface-control-documents). +Definitions for all commands and registers referenced in this section can be found in the respective [VectorNav ICD](https://www.vectornav.com/resources/technical-documentation/interface-control-documents). Upon initialization, PX4 configures the VectorNav unit as follows: @@ -137,5 +137,5 @@ Published topics can be viewed using the `listener` command. ## Hardware Specifications -- [Product Briefs](https://www.vectornav.com/resources/product-briefs) -- [Datasheets](https://www.vectornav.com/resources/datasheets) +- [Product Briefs](https://www.vectornav.com/resources/product-information/product-briefs) +- [Datasheets](https://www.vectornav.com/resources/technical-documentation/datasheets) diff --git a/docs/zh/sensor_bus/translator_tfi2cadt.md b/docs/zh/sensor_bus/translator_tfi2cadt.md index 49ea3a7c3c..ad98d26d61 100644 --- a/docs/zh/sensor_bus/translator_tfi2cadt.md +++ b/docs/zh/sensor_bus/translator_tfi2cadt.md @@ -13,7 +13,7 @@ The module contains two pairs of connectors, each pair responsible for different :::info [TFI2CADT01](https://github.com/ThunderFly-aerospace/TFI2CADT01) is designed as open-source hardware with GPLv3 license. -It is commercially available from [ThunderFly](https://www.thunderfly.cz/) company or from [Tindie eshop](https://www.tindie.com/products/26353/). +It is commercially available from [ThunderFly](https://www.thunderfly.cz/) company or from [Tindie eshop](https://www.tindie.com/products/thunderfly/tfi2cadt01-pixhawk-i2c-address-translator/). ::: ## Address Translation Method @@ -30,7 +30,7 @@ If you need your own value for address translation, changing the configuration r The tachometer sensor [TFRPM01](../sensor/thunderfly_tachometer.md) can be set to two different addresses using a solder jumper. If the autopilot has three buses, only 6 sensors can be connected and no bus remains free (2 available addresses \* 3 I2C ports). In some multicopters or VTOL solutions, there is a need to measure the RPM of 8 or more elements. -The [TFI2CADT01](https://www.tindie.com/products/26353/) is highly recommended in this case. +The [TFI2CADT01](https://www.tindie.com/products/thunderfly/tfi2cadt01-pixhawk-i2c-address-translator/) is highly recommended in this case. ![Multiple sensors](../../assets/peripherals/i2c_tfi2cadt/tfi2cadt01_multi_tfrpm01.jpg) diff --git a/docs/zh/sim_gazebo_classic/index.md b/docs/zh/sim_gazebo_classic/index.md index d3245db579..4d9a98f981 100644 --- a/docs/zh/sim_gazebo_classic/index.md +++ b/docs/zh/sim_gazebo_classic/index.md @@ -347,7 +347,7 @@ The video below shows that the location of the environment is aligned with the w For extended development sessions it might be more convenient to start Gazebo Classic and PX4 separately or even from within an IDE. -In addition to the existing cmake targets that run `sitl_run.sh` with parameters for px4 to load the correct model it creates a launcher targets named `px4_` that is a thin wrapper around original sitl px4 app. +In addition to the existing cmake targets that run `sitl_run.sh` with parameters for PX4 to load the correct model it creates a launcher targets named `px4_` that is a thin wrapper around original sitl PX4 app. This thin wrapper simply embeds app arguments like current working directories and the path to the model file. To start Gazebo Classic and PX4 separately: @@ -368,7 +368,7 @@ To start Gazebo Classic and PX4 separately: - Start the debug session directly from IDE -This approach significantly reduces the debug cycle time because simulator is always running in background and you only re-run the px4 process which is very light. +This approach significantly reduces the debug cycle time because simulator is always running in background and you only re-run the PX4 process which is very light. ## Simulated Survey Camera diff --git a/docs/zh/sim_gazebo_gz/gazebo_models.md b/docs/zh/sim_gazebo_gz/gazebo_models.md index 5756fa3bda..359e9ee285 100644 --- a/docs/zh/sim_gazebo_gz/gazebo_models.md +++ b/docs/zh/sim_gazebo_gz/gazebo_models.md @@ -45,7 +45,7 @@ You can connect a PX4-enabled vehicle to an instance of _gz-server_ using severa You can then drag and drop any PX4 model into your simulation. ::: info - These models are taken from an web-server called [Gazebo Fuel](https://app.gazebosim.org/dashboard), which essentially acts as an online database for all types of models and worlds that can be launched in Gazebo. + These models are taken from an web-server called [Gazebo Fuel](https://app.gazebosim.org/PX4), which essentially acts as an online database for all types of models and worlds that can be launched in Gazebo. ::: diff --git a/docs/zh/sim_gazebo_gz/index.md b/docs/zh/sim_gazebo_gz/index.md index c029851d3e..7bd3f71795 100644 --- a/docs/zh/sim_gazebo_gz/index.md +++ b/docs/zh/sim_gazebo_gz/index.md @@ -5,7 +5,7 @@ Gazebo was previously known as "Gazebo Ignition" (while _Gazebo Classic_ was pre See the [official blog post](https://www.openrobotics.org/blog/2022/4/6/a-new-era-for-gazebo) for more information. ::: -[Gazebo](https://gazebosim.org/home) is an open source robotics simulator. +[Gazebo](https://gazebosim.org/docs/latest/getstarted/) is an open source robotics simulator. It supersedes the older [Gazebo Classic](../sim_gazebo_classic/index.md) simulator, and is the only supported version of Gazebo for Ubuntu 22.04 and onwards. **Supported Vehicles:** Quadrotor, Plane, VTOL, Rover @@ -303,7 +303,7 @@ where `ARGS` is a list of environment variables including: - `PX4_GZ_FOLLOW_OFFSET_X`, `PX4_GZ_FOLLOW_OFFSET_Y`, `PX4_GZ_FOLLOW_OFFSET_Z`: Set the relative offset of the follow camera to the vehicle. -The PX4 Gazebo worlds and and models databases [can be found on GitHub here](https://github.com/PX4/PX4-gazebo-models). +The PX4 Gazebo worlds and models databases [can be found on GitHub here](https://github.com/PX4/PX4-gazebo-models). :::info `gz_env.sh.in` is compiled and made available in `$PX4_DIR/build/px4_sitl_default/rootfs/gz_env.sh` diff --git a/docs/zh/sim_gazebo_gz/tools_avl_automation.md b/docs/zh/sim_gazebo_gz/tools_avl_automation.md index fd57223dce..29c78fd7db 100644 --- a/docs/zh/sim_gazebo_gz/tools_avl_automation.md +++ b/docs/zh/sim_gazebo_gz/tools_avl_automation.md @@ -121,7 +121,7 @@ From the stability derivatives log file, the following advanced lift drag plugin | CYa | CYa | dCy/da (sideforce slope wrt alpha) | | Cla | Cell | dCl/da (roll moment slope wrt alpha) | | Cma | Cema | dCm/da (pitching moment slope wrt aLpha - before stall) | -| Cna | Cena | dCn/da (yaw moment slope wrt alpha) | +| Can | Cena | dCn/da (yaw moment slope wrt alpha) | | CLb | CLb | dCL/dbeta (lift coefficient slope wrt beta) | | CYb | CYb | dCY/dbeta (side force slope wrt beta) | | Clb | Cell | dCl/dbeta (roll moment slope wrt beta) | diff --git a/docs/zh/sim_gazebo_gz/vehicles.md b/docs/zh/sim_gazebo_gz/vehicles.md index ba9b16be4a..1c26a29036 100644 --- a/docs/zh/sim_gazebo_gz/vehicles.md +++ b/docs/zh/sim_gazebo_gz/vehicles.md @@ -8,7 +8,7 @@ Supported vehicle types include: mutirotor, VTOL, Plane, Rover. :::warning See [Gazebo Classic Vehicles](../sim_gazebo_classic/vehicles.md) for vehicles that work with the older [Gazebo "Classic" simulation](../sim_gazebo_classic/index.md). -Note that vehicle models are not interchangable between the two versions of the simulator: the vehicles on this page only work with (new) [Gazebo](../sim_gazebo_gz/index.md). +Note that vehicle models are not interchangeable between the two versions of the simulator: the vehicles on this page only work with (new) [Gazebo](../sim_gazebo_gz/index.md). ::: ## 多旋翼 diff --git a/docs/zh/sim_gazebo_gz/worlds.md b/docs/zh/sim_gazebo_gz/worlds.md index a6defbc533..449dc1a319 100644 --- a/docs/zh/sim_gazebo_gz/worlds.md +++ b/docs/zh/sim_gazebo_gz/worlds.md @@ -104,4 +104,4 @@ The PX4 toolchain will automatically spawn a world that has the same name as the The model specific worlds are: -- [Aruco world](#aruco): Default world with an [ArUco marker](https://docs.opencv.org/4.x/d5/dae/tutorial_aruco_detection.html) that can be used with with [x500_mono_cam_down](../sim_gazebo_gz/vehicles.md#x500-quadrotor-with-monocular-camera-down-facing) for testing [precision landing](../advanced_features/precland.md). +- [Aruco world](#aruco): Default world with an [ArUco marker](https://docs.opencv.org/4.x/d5/dae/tutorial_aruco_detection.html) that can be used with [x500_mono_cam_down](../sim_gazebo_gz/vehicles.md#x500-quadrotor-with-monocular-camera-down-facing) for testing [precision landing](../advanced_features/precland.md). diff --git a/docs/zh/sim_hawkeye/index.md b/docs/zh/sim_hawkeye/index.md new file mode 100644 index 0000000000..15d8d2ed28 --- /dev/null +++ b/docs/zh/sim_hawkeye/index.md @@ -0,0 +1,61 @@ +# Hawkeye Visualizer + +[Hawkeye](https://px4.github.io/Hawkeye/) is a real-time 3D flight _visualizer_ for PX4. + +Hawkeye is the natural pair for [SIH](../sim_sih/index.md) — SIH runs the physics of an aircraft simulation and outputs MAVLink [HIL_STATE_QUATERNION](https://mavlink.io/en/messages/common.html#HIL_STATE_QUATERNION) messages, Hawkeye uses these to show you what's happening. + +Hawkeye has zero runtime dependencies, supports up to 16 vehicles simultaneously, and can replay PX4 ULog (`.ulg`) flight logs with transport controls, markers, and multi-drone correlation analysis. + +## Install + +### macOS (Homebrew) + +```sh +brew tap PX4/px4 +brew install PX4/px4/hawkeye +``` + +### Linux (Debian/Ubuntu) + +Download the `.deb` from the [Hawkeye releases page](https://github.com/PX4/Hawkeye/releases/latest): + +```sh +sudo dpkg -i hawkeye-*.deb +``` + +### Windows and source builds + +For Ubuntu 24.04 or later in WSL2 you can install the packages in the same way: + +```sh +sudo dpkg -i hawkeye-*.deb +``` + +For other versions of Ubuntu (or native Windows builds) you may need to [Build from source](https://px4.github.io/Hawkeye/developer/build) (Hawkeye docs). + +## Usage with SIH + +Start PX4 SIH, then launch Hawkeye in a separate terminal: + +```sh +# Terminal 1 +make px4_sitl sihsim_quadx + +# Terminal 2 +hawkeye +``` + +Hawkeye listens on UDP port 19410 — the same port SIH sends [HIL_STATE_QUATERNION](https://mavlink.io/en/messages/common.html#HIL_STATE_QUATERNION) on — so no configuration is needed. +The vehicle appears in the Hawkeye window as soon as SIH starts streaming. + +For fixed-wing or tailsitter simulation, Hawkeye auto-detects the vehicle type from MAVLink `HEARTBEAT` and loads the matching 3D model. + +## Full documentation + +Complete documentation — including multi-vehicle SITL, ULog replay, HUD modes, camera controls, and correlation analysis — lives at **[px4.github.io/Hawkeye](https://px4.github.io/Hawkeye/)**. + +- [First SITL run](https://px4.github.io/Hawkeye/first-sitl) — the shortest path from install to seeing a vehicle move +- [Multi-Drone Replay](https://px4.github.io/Hawkeye/multi_drone) — compare multiple flights with deconfliction and correlation +- [Live SITL Integration](https://px4.github.io/Hawkeye/sitl) — single-vehicle and multi-instance swarm workflows +- [Command-Line Reference](https://px4.github.io/Hawkeye/cli) — every CLI flag with examples +- [Source code](https://github.com/PX4/Hawkeye) diff --git a/docs/zh/sim_jmavsim/index.md b/docs/zh/sim_jmavsim/index.md index d63db8d443..3e15936ec0 100644 --- a/docs/zh/sim_jmavsim/index.md +++ b/docs/zh/sim_jmavsim/index.md @@ -22,37 +22,31 @@ jMAVSim can also be used for HITL Simulation ([as shown here](../simulation/hitl ## 安装 -jMAVSim setup is included in our [standard build instructions](../dev_setup/dev_env.md) for Ubuntu Linux and Windows. -Follow the instructions below to install jMAVSim on macOS. +jMAVSim requires JDK 17 or later. +On Ubuntu and Windows, the [standard development environment setup](../dev_setup/dev_env.md) scripts install all required dependencies including Java. +On macOS, you need to install Java manually as shown below. ### macOS -To setup the environment for [jMAVSim](../sim_jmavsim/index.md) simulation: +jMAVSim requires OpenJDK 17 or later. +Install it via Homebrew: -1. Install a recent version of Java (e.g. Java 15). - You can download [Java 15 (or later) from Oracle](https://www.oracle.com/java/technologies/downloads/?er=221886) or use [Eclipse Temurin](https://adoptium.net): +```sh +brew install openjdk@17 +``` - ```sh - brew install --cask temurin - ``` +Homebrew installs OpenJDK but does not link it into your `PATH`, so you need to set `JAVA_HOME` for jMAVSim to find it. +Add this to your shell profile (e.g. `~/.zshrc`): -2. Install jMAVSim: - - ```sh - brew install px4-sim-jmavsim - ``` - - :::warning - PX4 v1.11 and beyond require at least JDK 15 for jMAVSim simulation. - - For earlier versions, macOS users might see the error `Exception in thread "main" java.lang.UnsupportedClassVersionError:`. - You can find the fix in the [jMAVSim with SITL > Troubleshooting](../sim_jmavsim/index.md#troubleshooting)). - -::: +```sh +export JAVA_HOME=$(/usr/libexec/java_home -v 17) +``` ## Simulation Environment -Software in the Loop Simulation runs the complete system on the host machine and simulates the autopilot. It connects via local network to the simulator. The setup looks like this: +Software in the Loop Simulation runs the complete system on the host machine and simulates the autopilot. +It connects via local network to the simulator. +The setup looks like this: [![Mermaid graph: SITL Simulator](https://mermaid.ink/img/eyJjb2RlIjoiZ3JhcGggTFI7XG4gIFNpbXVsYXRvci0tPk1BVkxpbms7XG4gIE1BVkxpbmstLT5TSVRMOyIsIm1lcm1haWQiOnsidGhlbWUiOiJkZWZhdWx0In0sInVwZGF0ZUVkaXRvciI6ZmFsc2V9)](https://mermaid-js.github.io/mermaid-live-editor/#/edit/eyJjb2RlIjoiZ3JhcGggTFI7XG4gIFNpbXVsYXRvci0tPk1BVkxpbms7XG4gIE1BVkxpbmstLT5TSVRMOyIsIm1lcm1haWQiOnsidGhlbWUiOiJkZWZhdWx0In0sInVwZGF0ZUVkaXRvciI6ZmFsc2V9) @@ -95,7 +89,8 @@ It will also bring up a window showing a 3D view of the [jMAVSim](https://github ## Taking it to the Sky -The system will start printing status information. You will be able to start flying once you have a position lock (shortly after the console displays the message: _EKF commencing GPS fusion_). +The system will start printing status information. +You will be able to start flying once you have a position lock (shortly after the console displays the message: _EKF commencing GPS fusion_). To takeoff enter the following into the console: @@ -220,11 +215,13 @@ To disable lockstep in: ## Extending and Customizing -To extend or customize the simulation interface, edit the files in the **Tools/jMAVSim** folder. The code can be accessed through the[jMAVSim repository](https://github.com/px4/jMAVSim) on Github. +To extend or customize the simulation interface, edit the files in the **Tools/jMAVSim** folder. +The code can be accessed through the[jMAVSim repository](https://github.com/px4/jMAVSim) on Github. :::info The build system enforces the correct submodule to be checked out for all dependencies, including the simulator. -It will not overwrite changes in files in the directory, however, when these changes are committed the submodule needs to be registered in the Firmware repo with the new commit hash. To do so, `git add Tools/jMAVSim` and commit the change. +It will not overwrite changes in files in the directory, however, when these changes are committed the submodule needs to be registered in the Firmware repo with the new commit hash. +To do so, `git add Tools/jMAVSim` and commit the change. This will update the GIT hash of the simulator. ::: @@ -237,6 +234,75 @@ The simulation can be [interfaced to ROS](../simulation/ros_interface.md) the sa - The startup scripts are discussed in [System Startup](../concept/system_startup.md). - The simulated root file system ("`/`" directory) is created inside the build directory here: `build/px4_sitl_default/rootfs`. +## Display-Only Mode + +jMAVSim can run as a display-only renderer for other simulators (like [SIH](../sim_sih/index.md)), with its internal physics disabled. +In this mode, jMAVSim receives vehicle position via MAVLink and only renders the 3D view. + +To use jMAVSim as a display for SIH running in SITL: + +```sh +# Start SIH first +make px4_sitl_sih sihsim_quadx + +# In another terminal, start jMAVSim in display-only mode +./Tools/simulation/jmavsim/jmavsim_run.sh -p 19410 -u -q -o # 19410 is the default SIH display port +``` + +For SIH running on flight controller hardware: + +```sh +./Tools/simulation/jmavsim/jmavsim_run.sh -q -d /dev/ttyACM0 -b 2000000 -o +``` + +Use `-a` for airplane display or `-t` for tailsitter display. + +## Command-Line Reference + +The `jmavsim_run.sh` launch script accepts the following flags: + +| Flag | 描述 | +| ------------- | -------------------------------------------------------------------------------------------- | +| `-b ` | Serial baud rate (default: 921600) | +| `-d ` | Serial device path (e.g., `/dev/ttyACM0`) | +| `-u` | Use UDP connection instead of serial | +| `-i ` | Simulated MAVLink system ID | +| `-p ` | UDP port (default: 14560) | +| `-q` | No interactive console | +| `-s ` | TCP serial port | +| `-r ` | Render rate in Hz | +| `-l` | Enable lockstep | +| `-o` | Display-only mode (disable physics, render only) | +| `-a` | Use airplane model | +| `-t` | Use tailsitter model | +| `HEADLESS=1` | Environment variable: run without GUI window | + +## How jMAVSim Works + +jMAVSim is a Java-based lightweight simulator that communicates with PX4 via MAVLink HIL (Hardware-In-the-Loop) messages. + +In normal mode: + +1. PX4 sends actuator commands via [HIL_ACTUATOR_CONTROLS](https://mavlink.io/en/messages/common.html#HIL_ACTUATOR_CONTROLS). +2. jMAVSim runs its physics engine to compute the vehicle state. +3. jMAVSim sends sensor data back via [HIL_SENSOR](https://mavlink.io/en/messages/common.html#HIL_SENSOR) and [HIL_GPS](https://mavlink.io/en/messages/common.html#HIL_GPS). + +In **display-only mode** (`-o` flag), jMAVSim disables its physics engine and only reads [HIL_STATE_QUATERNION](https://mavlink.io/en/messages/common.html#HIL_STATE_QUATERNION) messages to render the vehicle position. +This allows it to visualize vehicles from other simulators like SIH. + +jMAVSim supports [lockstep synchronization](#lockstep) with PX4 (enabled with `-l` flag), ensuring deterministic simulation results. + +## Keyboard Shortcuts + +Camera modes in the jMAVSim 3D view: + +| Key | Camera Mode | +| -------------------------------- | ------------------------------------------------------- | +| **F** | First person (attached to vehicle) | +| **S** | Stationary (fixed position) | +| **G** | Gimbal (follows vehicle orientation) | +| **(default)** | Third person follow | + ## 故障处理 ### java.long.NoClassDefFoundError @@ -310,7 +376,7 @@ sudo gedit /etc/java-8-openjdk/accessibility.properties and comment out the line indicated below: ```sh -#assistive_technologies=org.GNOME.Acessibility.AtkWrapper +#assistive_technologies=org.GNOME.Accessibility.AtkWrapper ``` For more info, check [this GitHub issue](https://github.com/PX4/PX4-Autopilot/issues/9557). @@ -327,8 +393,8 @@ Exception in thread "main" java.lang.UnsupportedClassVersionError: me/drton/jmav This error is telling you, you need a more recent version of Java in your environment. Class file version 58 corresponds to jdk14, version 59 to jdk15, version 60 to jdk 16 etc. -To fix it under macOS, we recommend installing OpenJDK through homebrew +To fix it under macOS, install a newer OpenJDK via Homebrew: ```sh -brew install --cask adoptopenjdk16 +brew install openjdk@17 ``` diff --git a/docs/zh/sim_sih/hardware.md b/docs/zh/sim_sih/hardware.md new file mode 100644 index 0000000000..fa92336798 --- /dev/null +++ b/docs/zh/sim_sih/hardware.md @@ -0,0 +1,183 @@ +# SIH on Flight Controller Hardware + +[SIH](../sim_sih/index.md) can run directly on flight controller hardware with `SYS_AUTOSTART` set to the desired value for the frame. +This replaces real sensors with simulated data while running on the actual autopilot. + +For a comparison of SIH and HITL on hardware, see [Hardware Simulation](../simulation/hardware.md). + +## Starting SIH + +1. Connect the flight controller to QGroundControl via USB. +2. Set `SYS_AUTOSTART` parameter to the desired airframe. +3. Reboot the flight controller. +4. The SIH module starts automatically and provides simulated sensor data. + +:::tip +To ensure there is no leftover parameter from previous setup, it is recommended to reset all the parameters to firmware's default before modifying `SYS_AUTOSTART`. +::: + +The following airframes are supported. + +| SIH Airframe | SYS_AUTOSTART | Status | +| --------------- | ---------------------------------- | ------------ | +| Quadrotor X | 1100 | Stable | +| Airplane | 1101 | Experimental | +| Tailsitter Duo | 1102 | Experimental | +| 标准垂起固定翼 | 1103 | Experimental | +| Ackermann Rover | 1104 | Experimental | +| Hexacopter X | 1105 | Experimental | + +Once running, the vehicle can be controlled from QGroundControl or an RC controller. + +## Firmware Builds with SIH + +The SIH module is included in many, but not all, default firmware builds. +This list can change between PX4 releases. +Always verify using the method in [Check if SIH is in Firmware](#check-if-sih-is-in-firmware). + +The table below lists build targets that include SIH at the time of writing: + +| Build Target | Board | +| ------------------------------------ | ------------------------------------------- | +| `px4_fmu-v3_default` | Pixhawk 2 (Cube Black) | +| `px4_fmu-v4_default` | Pixhawk 3 Pro | +| `px4_fmu-v4pro_default` | Pixracer | +| `px4_fmu-v5_default` | Pixhawk 4 | +| `px4_fmu-v5x_default` | Pixhawk 5X | +| `px4_fmu-v6c_default` | Pixhawk 6C | +| `px4_fmu-v6c_raptor` | Pixhawk 6C (Raptor) | +| `px4_fmu-v6x_multicopter` | Pixhawk 6X (multicopter) | +| `auterion_fmu-v6s_default` | Auterion FMU-v6S | +| `auterion_fmu-v6x_default` | Auterion FMU-v6X | +| `holybro_durandal-v1_default` | Holybro Durandal | +| `holybro_kakuteh7_default` | Holybro Kakute H7 | +| `holybro_kakuteh7v2_default` | Holybro Kakute H7 V2 | +| `holybro_pix32v5_default` | Holybro Pix32 V5 | +| `cuav_nora_default` | CUAV Nora | +| `cuav_x7pro_default` | CUAV X7 Pro | +| `cuav_x25-evo_default` | CUAV X25 EVO | +| `cuav_x25-super_default` | CUAV X25 Super | +| `cubepilot_cubeyellow_default` | CubePilot Cube Yellow | +| `mro_pixracerpro_default` | MRO PixRacer Pro | +| `mro_x21_default` | MRO X2.1 | +| `mro_ctrl-zero-h7_default` | MRO Ctrl Zero H7 | +| `mro_ctrl-zero-h7-oem_default` | MRO Ctrl Zero H7 OEM | +| `mro_ctrl-zero-f7_default` | MRO Ctrl Zero F7 | +| `mro_ctrl-zero-f7-oem_default` | MRO Ctrl Zero F7 OEM | +| `mro_ctrl-zero-classic_default` | MRO Ctrl Zero Classic | +| `3dr_ctrl-zero-h7-oem-revg_default` | 3DR Ctrl Zero H7 OEM RevG | +| `modalai_fc-v1_default` | ModalAI FC V1 | +| `nxp_fmuk66-v3_default` | NXP FMUK66-V3 | +| `nxp_fmuk66-e_default` | NXP FMUK66-E | +| `radiolink_PIX6_default` | Radiolink PIX6 | +| `siyi_n7_default` | SIYI N7 | +| `sky-drones_smartap-airlink_default` | Sky-Drones SmartAP Airlink | +| `uvify_core_default` | UVify Core | +| `atl_mantis-edu_default` | ATL Mantis EDU | +| `av_x-v1_default` | AV X-V1 | +| `narinfc_h7_default` | NarinFC H7 | +| `thepeach_k1_default` | ThePeach K1 | +| `thepeach_r1_default` | ThePeach R1 | +| `airmind_mindpx-v2_default` | AirMind MindPX V2 | +| `beaglebone_blue_default` | BeagleBone Blue | +| `bluerobotics_navigator_default` | BlueRobotics Navigator | +| `emlid_navio2_default` | Emlid Navio2 | +| `px4_raspberrypi_default` | 通用依赖 | +| `scumaker_pilotpi_default` | Scumaker PilotPi | + +:::info +Some boards (e.g., `px4_fmu-v6x_default`, `cubepilot_cubeorange_default`) do not include SIH in their default build due to flash memory constraints. +You can add SIH to any board -- see [Check if SIH is in Firmware](#check-if-sih-is-in-firmware). +::: + +## Requirements + +- A flight controller with SIH module included in firmware (see [Firmware Builds with SIH](#firmware-builds-with-sih)). +- USB connection for QGroundControl. +- Optional: jMAVSim for 3D visualization via serial link (see [Visualization](#hardware-visualization)). + +## Check if SIH is in Firmware + +SIH is included in [most default firmware builds](#check-if-sih-is-in-firmware). +To verify, search for `sih` in the parameter list in QGroundControl. If `SIH_*` parameters are available, the module is included. + +To add SIH to a custom build, enable it in the board configuration: + +```txt +CONFIG_MODULES_SIMULATION_SIMULATOR_SIH=y +``` + +## Visualization (Optional) {#hardware-visualization} + +If you need a visual aid to see what the simulated vehicle is doing on hardware: + +### QGroundControl + +Connect the flight controller via USB. QGC shows the vehicle on the map view with attitude, position, and telemetry, the same as a real flight. + +### jMAVSim (3D Display-Only) + +jMAVSim can render a 3D view of the vehicle over a serial connection. No physics are simulated in jMAVSim -- it is display-only. + +```sh +./Tools/simulation/jmavsim/jmavsim_run.sh -q -d /dev/ttyACM0 -b 2000000 -o +``` + +Where `/dev/ttyACM0` is the serial device for the flight controller. +On macOS, this is typically `/dev/tty.usbmodem*`. + +## Controlling Actuators + +:::warning +If you want to control throttle actuators in SIH, make sure to remove propellers for safety. +::: + +In some scenarios, it may be useful to control an actuator while running SIH on hardware. For example, you might want to verify that winches or grippers are functioning correctly by checking the servo responses. + +**To enable actuator control in SIH:** + +1. Configure PWM parameters in the airframe file: + + Ensure your airframe file includes the necessary parameters to map PWM outputs to the correct channels. + + For example, if a servo is connected to MAIN 3 and you want to map it to AUX1 on your RC, use the following command: + + `param set-default PWM_MAIN_FUNC3 407` + + You can find a full list of available values for `PWM_MAIN_FUNCn` [here](../advanced_config/parameter_reference.md#PWM_MAIN_FUNC1). In this case, `407` maps the MAIN 3 output to AUX1 on the RC. + + Alternatively, you can use the [`PWM_AUX_FUNCn`](../advanced_config/parameter_reference.md#PWM_AUX_FUNC1) parameters. + + You may also configure the output as desired: + + - Disarmed PWM: ([`PWM_MAIN_DISn`](../advanced_config/parameter_reference.md#PWM_MAIN_DIS1) / [`PWM_AUX_DIS1`](../advanced_config/parameter_reference.md#PWM_AUX_DIS1)) + - Minimum PWM ([`PWM_MAIN_MINn`](../advanced_config/parameter_reference.md#PWM_MAIN_MIN1) / [`PWM_AUX_MINn`](../advanced_config/parameter_reference.md#PWM_AUX_MIN1)) + - Maximum PWM ([`PWM_MAIN_MAXn`](../advanced_config/parameter_reference.md#PWM_MAIN_MAX1) / [`PWM_AUX_MAXn`](../advanced_config/parameter_reference.md#PWM_AUX_MAX1)) + +2. Manually start the PWM output driver + + For safety, the PWM driver is not started automatically in SIH. To enable it, run the following command in the MAVLink shell: + + ```sh + pwm_out start + ``` + + **And to disable it again:** + + ```sh + pwm_out stop + ``` + +## Adding New Airframes (FC) + +Airframe configuration for SIH on a flight controller differs from SITL in a few ways: + +- Airframe file goes in `ROMFS/px4fmu_common/init.d/airframes` and follows the naming template `${ID}_${model_name}.hil`, where `ID` is the `SYS_AUTOSTART_ID` used to select the airframe, and `model_name` is the airframe model name. +- Add the model name in `ROMFS/px4fmu_common/init.d/airframes/CMakeLists.txt` to generate a corresponding make target. +- Actuators are configured with `HIL_ACT_FUNC*` parameters (not the usual `PWM_MAIN_FUNC*` parameters). + This is to avoid using the real actuator outputs in SIH. + Similarly, the bitfield for inverting individual actuator output ranges is `HIL_ACT_REV`, rather than `PWM_MAIN_REV`. + +For general airframe setup (SIH parameters, EKF2 tuning), see [Adding New Airframes](index.md#adding-new-airframes) on the main SIH page. + +For examples, see the `.hil` airframes in [ROMFS/px4fmu_common/init.d/airframes](https://github.com/PX4/PX4-Autopilot/tree/main/ROMFS/px4fmu_common/init.d/airframes). diff --git a/docs/zh/sim_sih/index.md b/docs/zh/sim_sih/index.md index 383c700b8c..557f591b72 100644 --- a/docs/zh/sim_sih/index.md +++ b/docs/zh/sim_sih/index.md @@ -1,288 +1,231 @@ -# Simulation-In-Hardware (SIH) +# SIH Simulation - + -:::warning -This simulator is [community supported and maintained](../simulation/community_supported_simulators.md). -It may or may not work with current versions of PX4 (known to work in PX4 v1.14). +SIH (Simulation-In-Hardware) is a lightweight, headless simulator with zero external dependencies that runs physics directly inside PX4 via uORB messages. +No GUI, no external processes, no rendering overhead — just PX4 running a C++ physics model. +This makes it the fastest way to iterate on flight code. -See [Toolchain Installation](../dev_setup/dev_env.md) for information about the environments and tools supported by the core development team. +:::tip +SIH is also available as a [prebuilt Docker container or .deb package](../simulation/px4_sitl_prebuilt_packages.md), which is useful if you don't need to modify PX4 itself. +See [PX4 Simulation QuickStart](../simulation/px4_simulation_quickstart.md) for a one-line instruction on how this is used. ::: -Simulation-In-Hardware (SIH) is an alternative to [Hardware In The Loop simulation (HITL)](../simulation/hitl.md) for quadrotors, fixed-wing vehicles (airplane), and VTOL tailsitters. - -SIH can be used by new PX4 users to get familiar with PX4 and the different modes and features, and of course to learn to fly a vehicle using an RC controller in simulation, which is not possible using SITL. - ## 综述 -With SIH the whole simulation is running on embedded hardware: the controller, the state estimator, and the simulator. -The Desktop computer is only used to display the virtual vehicle. +SIH runs as a PX4 module that replaces real sensor and actuator hardware with a simulated physics model. +It provides simulated IMU, GPS, barometer, magnetometer, and airspeed sensor data via uORB, and reads actuator outputs to update the vehicle state at each timestep. -![Simulator MAVLink API](../../assets/diagrams/SIH_diagram.png) +The simulation runs in lockstep with PX4, ensuring deterministic and reproducible results. +It also integrates seamlessly with ROS 2 with no additional configuration (see [ROS 2 Integration](#ros-2-integration) below). -### Compatibility +Two modes are supported: -- SIH is compatible with all PX4 supported boards except those based on FMUv2. -- SIH for MC quadrotor is supported from PX4 v1.9. -- SIH for FW (airplane) and VTOL tailsitter are supported from PX4 v1.13. -- SIH as SITL (without hardware) from PX4 v1.14. -- SIH for Standard VTOL from PX4 v1.16. -- SIH for MC Hexacopter X from PX4 v1.17. -- SIH for Ackermann Rover from PX4 v1.17. +- **[SITL](#sih-as-sitl-no-fc):** Runs on your computer with no hardware needed, and headless (without a UI) by default. + _This is the fastest and easiest way to start a simulation on PX4._ -### Benefits +- **[SIH on flight controller hardware](#sih-on-flight-controller-hardware):** Runs the entire simulation on the autopilot (`SYS_HITL=2`). -SIH provides several benefits over HITL: +### Supported Vehicle Types -- It ensures synchronous timing by avoiding the bidirectional connection to the computer. - As a result the user does not need such a powerful desktop computer. -- The whole simulation remains inside the PX4 environment. - Developers who are familiar with PX4 can more easily incorporate their own mathematical model into the simulator. - They can, for instance, modify the aerodynamic model, or noise level of the sensors, or even add a sensor to be simulated. -- The physical parameters representing the vehicle (such as mass, inertia, and maximum thrust force) can easily be modified from the [SIH parameters](../advanced_config/parameter_reference.md#simulation-in-hardware). +The following vehicle types are supported: -## Requirements - -To run the SIH, you will need a: - -- [Flight controller](../flight_controller/index.md), such as a Pixhawk-series board. - - ::: info - From PX4 v1.14 you can run [SIH "as SITL"](#sih-as-sitl-no-fc), in which case a flight controller is not required. - -::: - -- [Manual controller](../getting_started/px4_basic_concepts.md#manual-control): either a [radio control system](../getting_started/rc_transmitter_receiver.md) or a [joystick](../config/joystick.md). - -- QGroundControl for flying the vehicle via GCS. - -- Development computer for visualizing the virtual vehicle (optional). - -## Check if SIH is in Firmware - -The modules required for SIH are built into most PX4 firmware by default. -These include: [`pwm_out_sim`](../modules/modules_driver.md#pwm-out-sim), [`sensor_baro_sim`](../modules/modules_system.md#sensor-baro-sim), [`sensor_gps_sim`](../modules/modules_system.md#sensor-gps-sim) and [`sensor_mag_sim`](../modules/modules_system.md#sensor-mag-sim). - -To check that these are present on your flight controller: - -1. 启动QGroundControl。 - -2. Open **Analyze Tools > Mavlink Console**. - -3. Enter the following commands in the console: - - ```sh - pwm_out_sim status - ``` - - ```sh - sensor_baro_sim status - ``` - - ```sh - sensor_gps_sim status - ``` - - ```sh - sensor_mag_sim status - ``` - - ::: tip - Note that when using SIH on real hardware you do not need to additionally enable the modules using their corresponding parameters ([SENS_EN_GPSSIM](../advanced_config/parameter_reference.md#SENS_EN_GPSSIM), [SENS_EN_BAROSIM](../advanced_config/parameter_reference.md#SENS_EN_BAROSIM), [SENS_EN_MAGSIM](../advanced_config/parameter_reference.md#SENS_EN_MAGSIM)). - -::: - -4. If a valid status is returned you can start using SIH. - -If any of the returned values above are `nsh: MODULENAME: command not found`, then you don't have the module installed. -In this case you will have to add them to your board configuration and then rebuild and install the firmware. - -### Adding SIH to the Firmware - -Add the following key to the configuration file for your flight controller to include all the required modules (for an example see [boards/px4/fmu-v6x/default.px4board](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/fmu-v6x/default.px4board)). -Then re-build the firmware and flash it to the board. - -```text -CONFIG_MODULES_SIMULATION_SIMULATOR_SIH=y -``` - -:::details -What does this do? - -This installs the dependencies in [simulator_sih/Kconfig](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/simulation/simulator_sih/Kconfig). -It is equivalent to: - -```text -CONFIG_MODULES_SIMULATION_PWM_OUT_SIM=y -CONFIG_MODULES_SIMULATION_SENSOR_BARO_SIM=y -CONFIG_MODULES_SIMULATION_SENSOR_GPS_SIM=y -CONFIG_MODULES_SIMULATION_SENSOR_MAG_SIM=y -``` - -::: - -As an alterative to updating configuration files manually, you can use the following command to launch a GUI configuration tool, and interactively enable the required modules at the path: **modules > Simulation > simulator_sih**. -For example, to update the fmu-v6x configuration you would use: - -```sh -make px4_fmu-v6x boardconfig -``` - -After uploading, check that the required modules are present. - -:::note -To use rover in SIH you must use the [rover build](../config_rover/index.md#flashing-the-rover-build) or add the rover modules to your board configuration. -::: - -## Starting SIH - -To set up/start SIH: - -1. Connect the flight controller to the desktop computer with a USB cable. -2. Open QGroundControl and wait for the flight controller too boot and connect. -3. Open [Vehicle Setup > Airframe](../config/airframe.md) then select the desired frame: - - [SIH Quadcopter X](../airframes/airframe_reference.md#copter_simulation_sih_quadcopter_x) - - **SIH Hexacopter X** (currently only has an airframe for SITL to safe flash so on flight control hardware it has to be manually configured equivalently). - - [SIH plane AERT](../airframes/airframe_reference.md#plane_simulation_sih_plane_aert) - - [SIH Tailsitter Duo](../airframes/airframe_reference.md#vtol_simulation_sih_tailsitter_duo) - - [SIH Standard VTOL QuadPlane](../airframes/airframe_reference.md#vtol_simulation_sih_standard_vtol_quadplane) - - [SIH Ackermann Rover](../airframes/airframe_reference.md#rover_rover_sih_rover_ackermann) - -The autopilot will then reboot. -The `sih` module is started on reboot, and the vehicle should be displayed on the ground control station map. +| Vehicle | Make Target | Status | +| ---------------------------------------------------------------------------------- | ---------------------------------------- | ------------ | +| Quadrotor X | `make px4_sitl_sih sihsim_quadx` | Stable | +| Hexarotor X | `make px4_sitl_sih sihsim_hexa` | Experimental | +| Fixed-wing (airplane) | `make px4_sitl_sih sihsim_airplane` | Experimental | +| Tailsitter VTOL | `make px4_sitl_sih sihsim_xvert` | Experimental | +| Standard VTOL (QuadPlane) | `make px4_sitl_sih sihsim_standard_vtol` | Experimental | +| Ackermann Rover | `make px4_sitl_sih sihsim_rover` | Experimental | :::warning -The airplane needs to takeoff in manual mode at full throttle. -Also, if the airplane crashes the state estimator might lose its fix. +Only the quadrotor vehicle type is stable and recommended for development. All other vehicle types (hexarotor, fixed-wing, VTOL, rover) are experimental and may have aerodynamic model or controller interaction issues that produce unrealistic flight behaviour. ::: -## Display/Visualisation (optional) +### How SIH Works -The SIH-simulated vehicle can be displayed using [jMAVSim](../sim_jmavsim/index.md) as a visualiser. +![SIH Overview](../../assets/simulation/sih_overview.svg) + +SIH differs from external simulators: + +- **No MAVLink simulator API:** SIH communicates entirely via uORB (PX4's internal message bus). +- **No external process:** The physics model runs in the same PX4 process. +- **Lockstep by default:** Simulation time is synchronized with PX4 scheduling. + +## SIH as SITL {#sih-as-sitl-no-fc} + +SIH as SITL is the easiest and fastest way to set up a simulator with PX4. +It requires no hardware, and very few extra dependencies. + +### Quick Start + +To build PX4 and run SIH for a quadrotor: + +```sh +make px4_sitl_sih sihsim_quadx +``` + +QGroundControl auto-connects on UDP port 14550 — just open it and you'll see the vehicle. +Note that the simulation is "headless" by default (has no GUI), but you can use an external viewer. + +See [Supported vehicle types](#supported-vehicle-types) for other vehicles. :::tip -SIH does not _need_ a visualiser — you can connect with QGroundControl and fly the vehicle without one. +Use the `px4_sitl_sih` build target! +The `px4_sitl` target will work, but will also build Gazebo libraries. ::: -To display the simulated vehicle: +### Visualization (Optional) {#sitl-visualization} -1. Close _QGroundControl_ (if open). +SIH is intentionally headless by default. +If you need a visual aid to see what the vehicle is doing you can use QGroundControl to track path over ground, and/or [Hawkeye](../sim_hawkeye/index.md) as a 3D viewer. -2. Unplug and replug the flight controller (allow a few seconds for it to boot). +#### QGroundControl -3. Start jMAVSim by calling the script **jmavsim_run.sh** from a terminal: +QGC auto-connects on UDP port 14550. Open QGC while SIH is running and the vehicle appears on the map view with attitude, position, and telemetry. - ```sh - ./Tools/simulation/jmavsim/jmavsim_run.sh -q -d /dev/ttyACM0 -b 2000000 -o - ``` +#### Hawkeye (3D Visualizer) - where the flags are: +[Hawkeye](../sim_hawkeye/index.md) renders a real-time 3D view of the vehicle using MAVLink position data. +No physics are simulated in Hawkeye — it is a visualizer only. - - `-q` to allow the communication to _QGroundControl_ (optional). - - `-d` to start the serial device `/dev/ttyACM0` on Linux. - On macOS this would be `/dev/tty.usbmodem1`. - - `-b` to set the serial baud rate to `2000000`. - - `-o` to start jMAVSim in _display Only_ mode (i.e. the physical engine is turned off and jMAVSim only displays the trajectory given by the SIH in real-time). - - add a flag `-a` to display an aircraft or `-t` to display a tailsitter. - If this flag is not present a quadrotor will be displayed by default. - -4. After few seconds, _QGroundControl_ can be opened again. - -At this point, the system can be armed and flown. -The vehicle can be observed moving in jMAVSim, and on the QGC _Fly_ view. - -## SIH as SITL (no FC) - -SIH can be run as SITL (Software-In-The-Loop) from v1.14. -What this means is that the simulation code is executed on the laptop/computer instead of a flight controller, similar to Gazebo or jMAVSim. -In this case you don't need the flight controller hardware. - -To run SIH as SITL: - -1. Install the [PX4 Development toolchain](../dev_setup/dev_env.md). -2. Run the appropriate make command for each vehicle type (at the root of the PX4-Autopilot repository): - - Quadcopter - - ```sh - make px4_sitl sihsim_quadx - ``` - - - Hexacopter - - ```sh - make px4_sitl sihsim_hex - ``` - - - Fixed-wing (plane) - - ```sh - make px4_sitl sihsim_airplane - ``` - - - XVert VTOL tailsitter - - ```sh - make px4_sitl sihsim_xvert - ``` - - - 标准垂起固定翼 - - ```sh - make px4_sitl sihsim_standard_vtol - ``` - - - Ackermann Rover - - ```sh - make px4_sitl sihsim_rover_ackermann - ``` - -### Change Simulation Speed - -SITL allows the simulation to be run faster than real time. -To run the airplane simulation 10 times faster than real time, run the command: +In a separate terminal, run: ```sh -PX4_SIM_SPEED_FACTOR=10 make px4_sitl sihsim_airplane +hawkeye ``` -To display the vehicle in jMAVSim during SITL mode, enter the following command in another terminal: +Hawkeye connects on UDP port 19410 by default (the same port SIH sends `HIL_STATE_QUATERNION` on). +It then auto-detects the vehicle type from the MAVLink `HEARTBEAT` and loads the matching 3D model. + +The [Hawkeye](../sim_hawkeye/index.md) overview page explains how to install the software. +See the [Hawkeye docs](https://px4.github.io/Hawkeye/) for other features, such as ULog replay, and multi-vehicle visualization. + +### Environment Configuration + +#### Change Simulation Speed + +SIH supports faster-than-realtime simulation via the `PX4_SIM_SPEED_FACTOR` environment variable: ```sh -./Tools/simulation/jmavsim/jmavsim_run.sh -p 19410 -u -q -o +# Run at 10x speed +PX4_SIM_SPEED_FACTOR=10 make px4_sitl_sih sihsim_quadx ``` -- add a flag `-a` to display an aircraft or `-t` to display a tailsitter. - If this flag is not present a quadrotor will be displayed by default. +#### Wind Simulation -### Set Custom Takeoff Location +SIH supports setting a wind velocity with the PX4 parameters [`SIH_WIND_N`](../advanced_config/parameter_reference.md#SIH_WIND_E) and [`SIH_WIND_E`](../advanced_config/parameter_reference.md#SIH_WIND_E) [m/s]. The parameters can also be changed during flight to simulate changing wind. -The takeoff location in SIH on SITL can be set using environment variables. -This will override the default takeoff location. +#### Set Custom Takeoff Location -The variables to set are: `PX4_HOME_LAT`, `PX4_HOME_LON`, and `PX4_HOME_ALT`. - -例如: +The default takeoff location can be set using environment variables: ```sh export PX4_HOME_LAT=28.452386 export PX4_HOME_LON=-13.867138 export PX4_HOME_ALT=28.5 -make px4_sitl sihsim_quadx +make px4_sitl_sih sihsim_quadx ``` +### ROS 2 Integration + +SIH works with ROS 2 via the [uXRCE-DDS](../middleware/uxrce_dds.md) client, which auto-starts in SITL mode. +This is the same mechanism used by Gazebo — both simulators expose the same set of uORB topics to ROS 2. +The DDS agent connects on UDP port **8888** by default (configurable via `UXRCE_DDS_PRT` parameter or `PX4_UXRCE_DDS_PORT` environment variable). + +To use SIH with ROS 2: + +1. Start SIH: + + ```sh + make px4_sitl_sih sihsim_quadx + ``` + +2. In a separate terminal, start the Micro XRCE-DDS Agent: + + ```sh + MicroXRCEAgent udp4 -p 8888 + ``` + +See [uXRCE-DDS (PX4-ROS 2/DDS Bridge)](../middleware/uxrce_dds.md) for full setup instructions, including agent installation and ROS 2 workspace configuration. + +### Port Reference + +PX4 SITL opens the following UDP ports (all instance-aware, offset by instance number N). + +| PX4 sends to (remote) | PX4 listens on (local) | Use for | Instance offset | +| ---------------------------------------- | ----------------------------------------- | ------------------------------------------------ | ------------------------------------------------------------ | +| **14550** | 18570 (+N) | QGroundControl, GCS tools | Yes | +| **14540** (+N) | 14580 (+N) | MAVSDK, MAVROS, offboard APIs | Yes (capped at 14549 for 10+ instances) | +| **14030** (+N) | 14280 (+N) | Onboard camera/payload | Yes | +| **13280** (+N) | 13030 (+N) | Gimbal control | Yes | +| **19410** (+N) | 19450 (+N) | Hawkeye visualizer (SIH only) | Yes | +| **8888** | - | uXRCE-DDS / ROS 2 | No (use DDS namespace for multi-instance) | + +QGC auto-connects on port **14550** by default. MAVSDK connects on **14540**. No manual port configuration needed for single-instance use. + +### 基于gazebo的多飞行器仿真 + +SIH supports multi-vehicle simulation using PX4's instance system. +Each instance gets unique MAVLink ports, a unique system ID, and a separate DDS namespace. + +To launch multiple SIH vehicles, first build: + +```sh +make px4_sitl_sih sihsim_quadx +``` + +Then use the multi-instance launch script: + +```sh +./Tools/simulation/sitl_multiple_run.sh 3 sihsim_quadx px4_sitl_sih +``` + +Or launch instances manually: + +```sh +# Terminal 1 (instance 0) +make px4_sitl_sih sihsim_quadx + +# Terminal 2 (instance 1) +./build/px4_sitl_sih/bin/px4 -i 1 -d ./build/px4_sitl_sih/etc + +# Terminal 3 (instance 2) +./build/px4_sitl_sih/bin/px4 -i 2 -d ./build/px4_sitl_sih/etc +``` + +Each instance allocates ports automatically (all offset by instance number): + +| Instance | MAVLink (18570+N) | MAVLink (14540+N) | DDS (8888) Namespace | +| -------- | ------------------------------------ | ------------------------------------ | --------------------------------------- | +| 0 | 18570 | 14540 | (default) | +| 1 | 18571 | 14541 | px4_1 | +| 2 | 18572 | 14542 | px4_2 | + +See [Port Reference](#port-reference) for the complete list of ports. + +## Running the SIH on Flight Controller Hardware {#sih-on-flight-controller-hardware} + +:::info +The SIH on flight controller is community supported. +::: + +SIH can also run on flight controller hardware, replacing real sensors with simulated data while running on the actual autopilot. +See [SIH on Flight Controller Hardware](hardware.md) for setup instructions. + ## Adding New Airframes [Adding a new airframe](../dev_airframes/adding_a_new_frame.md) for use in SIH simulation is much the same as for other use cases. You still need to configure your vehicle type and [geometry](../config/actuators.md) (`CA_` parameters) and start any other defaults for that specific vehicle. :::warning -Not every vehicle can be simulated with SIH — there are currently [four supported vehicle types](../advanced_config/parameter_reference.md#SIH_VEHICLE_TYPE), each of which has a relatively rigid implementation in [`sih.cpp`](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/simulation/simulator_sih/sih.cpp). +Not every vehicle can be simulated with SIH — there are currently [six supported vehicle types](../advanced_config/parameter_reference.md#SIH_VEHICLE_TYPE) (quadcopter, fixed-wing, tailsitter, standard VTOL, hexacopter, rover), each of which has a relatively rigid implementation in [`sih.cpp`](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/simulation/simulator_sih/sih.cpp). ::: The specific differences for SIH simulation airframes are listed in the sections below. -For all variants of SIH: +### All Variants - Set all the [Simulation In Hardware](../advanced_config/parameter_reference.md#simulation-in-hardware) parameters (prefixed with `SIH_`) in order to configure the physical model of the vehicle. @@ -302,17 +245,13 @@ For all variants of SIH: ::: -- `param set-default EKF2_GPS_DELAY 0` to improve state estimator performance (the assumption of instant GPS measurements would normally be unrealistic, but is accurate for SIH). +- `param set-default SENS_GPS0_DELAY 0` to improve state estimator performance (the assumption of instant GPS measurements would normally be unrealistic, but is accurate for SIH). -For SIH on FC: +### SIH on Flight Controller -- Airframe file goes in `ROMFS/px4fmu_common/init.d/airframes` and follows the naming template `${ID}_${model_name}.hil`, where `ID` is the `SYS_AUTOSTART_ID` used to select the airframe, and `model_name` is the airframe model name. -- Add the model name in `ROMFS/px4fmu_common/init.d/airframes/CMakeLists.txt` to generate a corresponding make target. -- Actuators are configured with `HIL_ACT_FUNC*` parameters (not the usual `PWM_MAIN_FUNC*` parameters). - This is to avoid using the real actuator outputs in SIH. - Similarly, the bitfield for inverting individual actuator output ranges is `HIL_ACT_REV`, rather than `PWM_MAIN_REV`. +See [Adding New Airframes (FC)](../sim_sih/hardware.md#adding-new-airframes-fc) in _SIH on Flight Controller Hardware_. -For SIH as SITL (no FC): +### SIH as SITL - Airframe file goes in `ROMFS/px4fmu_common/init.d-posix/airframes` and follows the naming template `${ID}_sihsim_${model_name}`, where `ID` is the `SYS_AUTOSTART_ID` used to select the airframe, and `model_name` is the airframe model name. - Add the model name in `src/modules/simulation/simulator_sih/CMakeLists.txt` to generate a corresponding make target. @@ -326,68 +265,54 @@ For SIH as SITL (no FC): - `param set-default SENS_EN_MAGSIM 1` - `param set-default SENS_EN_ARSPDSIM 1` (if it is a fixed-wing or VTOL airframe with airspeed sensor) -For specific examples see the `_sihsim_` airframes in [ROMFS/px4fmu_common/init.d-posix/airframes](https://github.com/PX4/PX4-Autopilot/blob/main/ROMFS/px4fmu_common/init.d-posix/airframes/) (SIH as SITL) and [ROMFS/px4fmu_common/init.d/airframes](https://github.com/PX4/PX4-Autopilot/tree/main/ROMFS/px4fmu_common/init.d/airframes) (SIH on FC). - -## Controlling Actuators in SIH - -:::warning -If you want to control throttling actuators in SIH, make sure to remove propellers for safety. -::: - -In some scenarios, it may be useful to control an actuator while running SIH. For example, you might want to verify that winches or grippers are functioning correctly by checking the servo responses. - -To enable actuator control in SIH: - -1. Configure PWM parameters in the airframe file: - -Ensure your airframe file includes the necessary parameters to map PWM outputs to the correct channels. - -For example, if a servo is connected to MAIN 3 and you want to map it to AUX1 on your RC, use the following command: - -`param set-default PWM_MAIN_FUNC3 407` - -You can find a full list of available values for `PWM_MAIN_FUNCn` [here](../advanced_config/parameter_reference.md#PWM_MAIN_FUNC1). In this case, `407` maps the MAIN 3 output to AUX1 on the RC. - -Alternatively, you can use the [`PWM_AUX_FUNCn`](../advanced_config/parameter_reference.md#PWM_AUX_FUNC1) parameters. - -You may also configure the output as desired: - -- Disarmed PWM: ([`PWM_MAIN_DISn`](../advanced_config/parameter_reference.md#PWM_MAIN_DIS1) / [`PWM_AUX_DIS1`](../advanced_config/parameter_reference.md#PWM_AUX_DIS1)) -- Minimum PWM ([`PWM_MAIN_MINn`](../advanced_config/parameter_reference.md#PWM_MAIN_MIN1) / [`PWM_AUX_MINn`](../advanced_config/parameter_reference.md#PWM_AUX_MIN1)) -- Maximum PWM ([`PWM_MAIN_MAXn`](../advanced_config/parameter_reference.md#PWM_MAIN_MAX1) / [`PWM_AUX_MAXn`](../advanced_config/parameter_reference.md#PWM_AUX_MAX1)) - -2. Manually start the PWM output driver - -For safety, the PWM driver is not started automatically in SIH. To enable it, run the following command in the MAVLink shell: - -`pwm_out start` - -And to disable it again: - -`pwm_out stop` +For specific examples see the `_sihsim_` airframes in [ROMFS/px4fmu_common/init.d-posix/airframes](https://github.com/PX4/PX4-Autopilot/tree/main/ROMFS/px4fmu_common/init.d-posix/airframes) (SIH as SITL) and [ROMFS/px4fmu_common/init.d/airframes](https://github.com/PX4/PX4-Autopilot/tree/main/ROMFS/px4fmu_common/init.d/airframes) (SIH on FC). ## Dynamic Models The dynamic models for the various vehicles are: -- Quadcopter: [pdf report](https://github.com/PX4/PX4-Autopilot/raw/main/docs/assets/simulation/SIH_dynamic_model.pdf). -- Hexacopter: Equivalent to the Quadcopter but with a symmetric hexacopter x actuation setup. -- Fixed-wing: Inspired by the PhD thesis: "Dynamics modeling of agile fixed-wing unmanned aerial vehicles." Khan, Waqas, supervised by Nahon, Meyer, McGill University, PhD thesis, 2016. -- Tailsitter: Inspired by the master's thesis: "Modeling and control of a flying wing tailsitter unmanned aerial vehicle." Chiappinelli, Romain, supervised by Nahon, Meyer, McGill University, Masters thesis, 2018. -- Ackermann Rover: Based on lateral vehicle dynamics of the bicycle model adapted from [Sri Anumakonda, Everything you need to know about Self-Driving Cars in <30 minutes](https://srianumakonda.medium.com/everything-you-need-to-know-about-self-driving-in-30-minutes-b38d68bd3427) +- Quadrotor: [pdf](https://github.com/PX4/PX4-Autopilot/raw/main/docs/assets/simulation/SIH_dynamic_model.pdf) +- Fixed-wing: based on Khan (2016), see references below +- Tailsitter: based on Chiappinelli (2018), see references below +- Rover: bicycle model with linear tire model + +**Propeller model with advance ratio** + +Since PX4 v1.17, the propeller model for fixed-wing, tailsitter, and VTOL pusher vehicles is based on the equations from UIUC Propeller Database. + +UIUC_prop_equations + +This model includes the thrust coefficient CT(J) and power coefficient CP(J) as functions of the advance ratio J. +As a result, the maximum thrust force is realistically reduced as the aircraft speed is increased. +The SIH implements the thrust and power coefficients as second-order polynomial fits. + +CT = SIH_F_CT0 + SIH_F_CT1⋅J + SIH_F_CT2⋅J² + +CP = SIH_F_CP0 + SIH_F_CP1⋅J + SIH_F_CP2⋅J² + +If `SIH_F_CT0` and `SIH_F_CP0` are non-zero and positive, the SIH uses the model with advance ratio. +If not, the SIH uses a simple model with maximum thrust force given by `SIH_F_T_MAX` and maximum torque given by `SIH_F_Q_MAX`. + +**References:** + +1. PX4 Development Team, "SIH Dynamic Model," PX4-Autopilot, 2019. [PDF](https://github.com/PX4/PX4-Autopilot/raw/main/docs/assets/simulation/SIH_dynamic_model.pdf) +2. W. Khan, "Dynamics modeling of agile fixed-wing unmanned aerial vehicles," Ph.D. thesis, Dept. of Mechanical Engineering, McGill University, Montreal, 2016. +3. R. Chiappinelli, "Modeling and control of a flying wing tailsitter unmanned aerial vehicle," M.Sc. thesis, Dept. of Mechanical Engineering, McGill University, Montreal, 2018. +4. S. Anumakonda, "Everything you need to know about Self-Driving Cars," 2021. [Link](https://srianumakonda.medium.com/everything-you-need-to-know-about-self-driving-in-30-minutes-b38d68bd3427) +5. J.B. Brandt, R.W. Deters, G.K. Ananda, O.D. Dantsker, and M.S. Selig, UIUC Propeller Database, Vols 1-4, University of Illinois at Urbana-Champaign, Department of Aerospace Engineering, retrieved from https://m-selig.ae.illinois.edu/props/propDB.html. ## 视频 - +SIH demo with a fixed-wing vehicle @[youtube](https://youtu.be/PzIpSCRD8Jo) +How to parametrize the thrust and power coefficients CT & CP @[youtube](https://www.youtube.com/watch?v=KNSd9ge0sSw) ## Credits SIH was originally developed by Coriolis g Corporation. The airplane model and tailsitter models were added by Altitude R&D inc. -Both are Canadian companies: - Coriolis g developed a new type of Vertical Takeoff and Landing (VTOL) vehicles based on passive coupling systems; -- [Altitude R&D](https://www.altitude-rd.com/) is specialized in dynamics, control, and real-time simulation (today relocated in Zurich). +- [Altitude R&D](https://www.altitude-rd.com/) is specialized in dynamics, control, and real-time simulation (located in Zurich). The simulator is released for free under BSD license. diff --git a/docs/zh/simulation/community_supported_simulators.md b/docs/zh/simulation/community_supported_simulators.md index d569d2d29d..296fe37d13 100644 --- a/docs/zh/simulation/community_supported_simulators.md +++ b/docs/zh/simulation/community_supported_simulators.md @@ -12,10 +12,13 @@ See [Toolchain Installation](../dev_setup/dev_env.md) for information about the 这些工具有来自其社区的不同程度的支持 (有些得到很好的支持,有些则没有) 。 Questions about these tools should be raised on the [discussion forums](../contribute/support.md#forums-and-chat) -| 仿真器 | 描述 | -| ---------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| [Simulation-In-Hardware](../sim_sih/index.md) (SIH) |

A simulator implemented in C++ as a PX4 module directly in the Firmware [code](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/simulation/simulator_sih). It can be ran in SITL directly on the computer or as an alternative to HITL offering a hard real-time simulation directly on the hardware autopilot.

Supported Vehicles: Quad, Hexa, Plane, Tailsitter, Standard VTOL, Ackermann Rover

| -| [FlightGear](../sim_flightgear/index.md) |

A simulator that provides physically and visually realistic simulations. In particular it can simulate many weather conditions, including thunderstorms, snow, rain and hail, and can also simulate thermals and different types of atmospheric flows. [Multi-vehicle simulation](../sim_flightgear/multi_vehicle.md) is also supported.

Supported Vehicles: Plane, Autogyro, Rover

| -| [JMAVSim](../sim_jmavsim/index.md) |

A simple multirotor/quad simulator. This was previously part of the PX4 development toolchain but was removed in favour of [Gazebo](../sim_gazebo_gz/index.md).

Supported Vehicles: Quad

| -| [JSBSim](../sim_jsbsim/index.md) |

A simulator that provides advanced flight dynamics models. This can be used to model realistic flight dynamics based on wind tunnel data.

Supported Vehicles: Plane, Quad, Hex

| -| [AirSim](../sim_airsim/index.md) |

A cross platform simulator that provides physically and visually realistic simulations. This simulator is resource intensive, and requires a significantly more powerful computer than the other simulators described here.

Supported Vehicles: Iris (MultiRotor model and a configuration for PX4 QuadRotor in the X configuration).

| +| 仿真器 | 描述 | +| ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| [FlightGear](../sim_flightgear/index.md) |

A simulator that provides physically and visually realistic simulations. In particular it can simulate many weather conditions, including thunderstorms, snow, rain and hail, and can also simulate thermals and different types of atmospheric flows. [Multi-vehicle simulation](../sim_flightgear/multi_vehicle.md) is also supported.

Supported Vehicles: Plane, Autogyro, Rover

| +| [JMAVSim](../sim_jmavsim/index.md) |

A simple multirotor/quad simulator. This was previously part of the PX4 development toolchain but was removed in favour of [Gazebo](../sim_gazebo_gz/index.md).

Supported Vehicles: Quad

| +| [JSBSim](../sim_jsbsim/index.md) |

A simulator that provides advanced flight dynamics models. This can be used to model realistic flight dynamics based on wind tunnel data.

Supported Vehicles: Plane, Quad, Hex

| +| [AirSim](../sim_airsim/index.md) |

A cross platform simulator that provides physically and visually realistic simulations. This simulator is resource intensive, and requires a significantly more powerful computer than the other simulators described here.

Supported Vehicles: Iris (MultiRotor model and a configuration for PX4 QuadRotor in the X configuration).

| + +:::tip +[Gazebo](../sim_gazebo_gz/index.md) and [SIH](../sim_sih/index.md) are the officially supported simulators. See the [Simulation](index.md) page for more information. +::: diff --git a/docs/zh/simulation/failsafes.md b/docs/zh/simulation/failsafes.md index c083b13f90..354a70518e 100644 --- a/docs/zh/simulation/failsafes.md +++ b/docs/zh/simulation/failsafes.md @@ -47,7 +47,7 @@ To control how fast the battery depletes to the minimal value use the parameter By changing [SIM_BAT_MIN_PCT](../advanced_config/parameter_reference.md#SIM_BAT_MIN_PCT) in flight, you can also test regaining capacity to simulate inaccurate battery state estimation or in-air charging technology. ::: -It is also possible to disable the simulated battery using [SIM_BAT_ENABLE](../advanced_config/parameter_reference.md#SIM_BAT_ENABLE) in order to, for example, provide an external battery simulation via MAVLink. +The simulated battery can be completely disabled by setting [SIM_BAT_DRAIN](../advanced_config/parameter_reference.md#SIM_BAT_DRAIN) to 0. This is useful, for example, if you provide an external battery simulation via MAVLink. ## GPS 损失 diff --git a/docs/zh/simulation/hardware.md b/docs/zh/simulation/hardware.md new file mode 100644 index 0000000000..ad1229bcfa --- /dev/null +++ b/docs/zh/simulation/hardware.md @@ -0,0 +1,29 @@ +# Hardware Simulation + +PX4 can run simulation directly on a real flight controller, replacing real sensors with simulated data, while otherwise executing the full flight stack on actual autopilot hardware. + +:::info +Simulating PX4 on flight controller hardware exercises more flight stack code than SITL, and tests more of your hardware integration. +It can surface issues with running PX4 that might hidden when running on a desktop OS and hardware, or even a different flight controller board. +::: + +Two simulation approaches are available, controlled by the [SYS_HITL](../advanced_config/parameter_reference.md#SYS_HITL) parameter: + +- **[HITL Simulation](../simulation/hitl.md) (`SYS_HITL=1`):** An external simulator (Gazebo Classic or jMAVSim) runs physics on a companion computer and sends sensor data to the flight controller via MAVLink HIL messages. Requires a USB/UART connection and simulator setup. +- **[SIH on Hardware](../sim_sih/hardware.md) (`SYS_HITL=2`):** A C++ physics model runs directly on the flight controller itself. No external simulator, no companion computer, no MAVLink sensor data. Just set the parameter and reboot. + +## HITL vs SIH {#comparision} + +| | HITL (`SYS_HITL=1`) | SIH (`SYS_HITL=2`) | +| ----------------- | ---------------------------------------------------------------------- | ---------------------------------------------------- | +| Physics model | External simulator (Gazebo Classic, jMAVSim) | Internal C++ module | +| Communication | MAVLink HIL messages | uORB (internal) | +| External process | Required | Not required | +| Setup complexity | Higher | Lower | +| Sensor simulation | Camera, lidar, etc. (via simulator) | IMU, GPS, baro, mag, airspeed only | +| Vehicle types | Quadcopter, Standard VTOL | Quad, Hex, FW, VTOL Tailsitter, Standard VTOL, Rover | + +## When to Use Which + +- Use **SIH** if you want the simplest possible setup. No external dependencies. +- Use **HITL** if you need an external physics engine, 3D visualization from Gazebo Classic, or camera/lidar sensor simulation that SIH does not provide. diff --git a/docs/zh/simulation/hitl.md b/docs/zh/simulation/hitl.md index 7edad92be5..2d83aef69e 100644 --- a/docs/zh/simulation/hitl.md +++ b/docs/zh/simulation/hitl.md @@ -12,9 +12,9 @@ See [Toolchain Installation](../dev_setup/dev_env.md) for information about the PX4 支持多轴( [jMAVSim](../sim_jmavsim/index.md)或[Gazebo Classic](../sim_gazebo_classic/index.md))及VTOL (using Gazebo Classic)的仿真。 - +For a comparison of HITL and SIH on hardware, see [Hardware Simulation](../simulation/hardware.md). -## HITL兼容机架 +## HITL-Compatible Airframes {#compatible_airframe} 机架与模拟器兼容情况: @@ -23,9 +23,7 @@ PX4 支持多轴( [jMAVSim](../sim_jmavsim/index.md)或[Gazebo Classic](../sim_g | [HIL Quadcopter X](../airframes/airframe_reference.md#copter_simulation_hil_quadcopter_x) | 1002 | Y | Y | | [HIL Standard VTOL QuadPlane](../airframes/airframe_reference.md#vtol_standard_vtol_hil_standard_vtol_quadplane) | 4001 | Y | | - - -## HITL 仿真环境 +## HITL Simulation Environment {#simulation_environment} 硬件在环仿真(HITL)模式下标准的 PX4 固件在真实的硬件上运行。 JMAVSim or Gazebo Classic (running on a development computer) are connected to the flight controller hardware via USB/UART. @@ -104,18 +102,18 @@ make px4_fmu-v6x boardconfig 2. Select a [compatible airframe](#compatible_airframe) you want to test. Then click **Apply and Restart** on top-right of the _Airframe Setup_ page. -3. 如有必要, 校准您的 RC 遥控器 或操纵杆。 +3. Calibrate your [Manual Controller](../config/manual_control.md) (RC or Joystick), if needed. 4. 设置 UDP 1. Under the _General_ tab of the settings menu, uncheck all _AutoConnect_ boxes except for **UDP**. ![QGC Auto-connect settings for HITL](../../assets/gcs/qgc_hitl_autoconnect.png) -5. (可选) 配置操纵杆和故障保护。 - Set the following [parameters](../advanced_config/parameters.md) in order to use a joystick instead of an RC remote control transmitter: +5. (Optional) Configure your manual controller priority and failsafe: - - [COM_RC_IN_MODE](../advanced_config/parameter_reference.md#COM_RC_IN_MODE) to "Joystick/No RC Checks". 这允许操纵杆输入并禁用 RC 输入检查。 - - [NAV_RCL_ACT](../advanced_config/parameter_reference.md#NAV_RCL_ACT) to "Disabled". 这可确保在没有无线遥控的情况下运行 HITL 时 RC 失控保护不会介入。 + - [Enable a mode in `COM_RC_IN_MODE` that enables and prioritises the controllers you want to use](../config/manual_control.md#px4-configuration). + The default `RC or MAVLink keep first` should work if you plan to only have a Joystick (no RC). + - You can set [NAV_RCL_ACT](../advanced_config/parameter_reference.md#NAV_RCL_ACT) to disable manual control loss failsafe while flying in a simulation. :::tip The _QGroundControl User Guide_ also has instructions on [Joystick](https://docs.qgroundcontrol.com/master/en/qgc-user-guide/setup_view/joystick.html) and [Virtual Joystick](https://docs.qgroundcontrol.com/master/en/qgc-user-guide/settings_view/virtual_joystick.html) setup. @@ -137,7 +135,7 @@ Make sure _QGroundControl_ is not running! 1. Build PX4 with [Gazebo Classic](../sim_gazebo_classic/index.md) (in order to build the Gazebo Classic plugins). ```sh - cd + cd DONT_RUN=1 make px4_sitl_default gazebo-classic ``` diff --git a/docs/zh/simulation/index.md b/docs/zh/simulation/index.md index e5d3f03025..229f691c6b 100644 --- a/docs/zh/simulation/index.md +++ b/docs/zh/simulation/index.md @@ -3,38 +3,83 @@ 在仿真机中模拟器允许 px4 飞行代码来控制计算机建模工具。 You can interact with this vehicle just as you might with a real vehicle, using _QGroundControl_, an offboard API, or a radio controller/gamepad. -:::tip -Simulation is a quick, easy, and most importantly, _safe_ way to test changes to PX4 code before attempting to fly in the real world. -It is also a good way to start flying with PX4 when you haven't yet got a vehicle to experiment with. -::: - PX4 supports both _Software In the Loop (SITL)_ simulation, where the flight stack runs on computer (either the same computer or another computer on the same network) and _Hardware In the Loop (HITL)_ simulation using a simulation firmware on a real flight controller board. Information about available simulators and how to set them up are provided in the next section. The other sections provide general information about how the simulator works, and are not required to _use_ the simulators. +:::tip +Simulation is a quick, easy, and most importantly, _safe_ way to test changes to PX4 code before attempting to fly in the real world. +It is also a good way to start flying with PX4 when you haven't yet got a vehicle to experiment with. +::: + ## 支持的仿真器 The following simulators are supported by the PX4 core development team. +:::info +Gazebo Classic is being downgraded to [community supported](../simulation/community_supported_simulators.md) and is no longer recommended as the default simulation solution. +Use [Gazebo](../sim_gazebo_gz/index.md) (formerly Gazebo Ignition) for new projects. +If you have an older workflow that does not yet work in newer Gazebo, Gazebo Classic remains available but will not receive core team maintenance going forward. +See [PX4-Autopilot#23602](https://github.com/PX4/PX4-Autopilot/issues/23602) for the deprecation timeline and migration status. +::: + | 仿真器 | 描述 | | ------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [Gazebo](../sim_gazebo_gz/index.md) | Gazebo supersedes [Gazebo Classic](../sim_gazebo_classic/index.md), featuring more advanced rendering, physics and sensor models. It is the only version of Gazebo available from Ubuntu Linux 22.04

A powerful 3D simulation environment that is particularly suitable for testing object-avoidance and computer vision. 它还可用于 [多工具仿真](../simulation/multi-vehicle-simulation.md),通常用于 [ROS](../simulation/ros_interface.md),这是一种用于自动控制的工具集。

Supported Vehicles: Quad, VTOL (Standard, Tailsitter, Tiltroter), Plane, Rovers | +| [SIH](../sim_sih/index.md) | A lightweight, headless simulator that runs physics directly inside PX4 as a C++ module (no external dependencies). Headless by default for fastest iteration. Supports ROS 2 via uXRCE-DDS. Can also run on flight controller hardware (`SYS_HITL=2`).

**Supported Vehicles:** Quad, Hex, Plane, Tailsitter, Standard VTOL, Rover | | [Gazebo Classic](../sim_gazebo_classic/index.md) | A powerful 3D simulation environment that is particularly suitable for testing object-avoidance and computer vision. It can also be used for [multi-vehicle simulation](../simulation/multi-vehicle-simulation.md) and is commonly used with [ROS](../simulation/ros_interface.md), a collection of tools for automating vehicle control.

**Supported Vehicles:** Quad ([Iris](../airframes/airframe_reference.md#copter_quadrotor_x_generic_quadcopter)), Hex (Typhoon H480), [Generic Standard VTOL (QuadPlane)](../airframes/airframe_reference.md#vtol_standard_vtol_generic_standard_vtol), Tailsitter, Plane, Rover, Submarine | There are also a number of [Community Supported Simulators](../simulation/community_supported_simulators.md). ---- +:::tip +To run PX4 SITL without setting up a build environment, [pre-built packages and containers](px4_sitl_prebuilt_packages.md) are available. +::: -所有模拟器都使用 Simulator MAVLink API 与 PX4 进行通信。 -It is not required to _use_ the simulators. +### Simulator Comparison + +| 特性 | Gazebo | SIH | +| ------------------------- | ------------------------------------------------- | -------------------------------------------------------------------------------------- | +| **Default Mode** | GUI with 3D rendering | Headless (fastest iteration) | +| **3D Visualization** | Built-in (photorealistic) | Optional: QGC map or jMAVSim display-only | +| **Physics Engine** | External (gz-physics) | Internal (C++ module, uORB) | +| **External Dependencies** | Gazebo packages, rendering libs | None | +| **Vehicle Types** | Quad, VTOL, Plane, Rovers | Quad, Hex, Plane, Tailsitter, Std VTOL, Rover | +| **Multi-vehicle** | Yes (documented) | Yes ([multi-vehicle](../sim_sih/index.md#multi-vehicle-simulation)) | +| **Sensor Simulation** | Camera, LiDAR, depth, IMU, GPS, baro, mag | IMU, GPS, baro, mag, airspeed | +| **Custom Worlds/Models** | Yes (SDF, large model library) | No | +| **ROS 2 Integration** | Yes (uXRCE-DDS) | Yes (uXRCE-DDS) | +| **Extensibility** | Plugins, custom sensors, environments | Modify C++ source, tune SIH\_\* parameters | +| **Community/Ecosystem** | Large Gazebo community, model repos | PX4-internal | +| **Faster-than-Realtime** | Yes | Yes | +| **Runs on FC Hardware** | No | Yes (SYS_HITL=2) | +| **macOS Apple Silicon** | Unstable (known issues) | Works natively | +| **Lockstep** | Yes | Yes | + +:::tip +For a detailed analysis of PX4 simulation user needs, priorities, and pain points, see the [PX4 Simulation Integration Survey Report](https://www.mcguirerobotics.com/px4_sim_research_report/) (K. McGuire, Dronecode Foundation, Dec 2025, 120 respondents). +::: + +### Which Simulator Should I Use? + +- **Full-featured simulation with 3D rendering, custom worlds, camera/lidar sensors, or rich sensor ecosystems:** Use [Gazebo](../sim_gazebo_gz/index.md). Largest ecosystem, custom models and plugins, photorealistic rendering, extensive sensor library, large community. +- **Fast headless iteration, controls research, zero-dependency setup, or macOS:** Use [SIH](../sim_sih/index.md). Runs entirely inside PX4 with no external dependencies, headless by default for maximum speed, physics parameters directly tunable via `SIH_*` params. Supports ROS 2 via uXRCE-DDS. +- **Hardware integration testing without propellers:** Use [SIH on flight controller hardware](../sim_sih/index.md#sih-on-flight-controller-hardware) (`SYS_HITL=2`). + +:::info +SIH is headless by default. For optional 3D visualization, you can use [jMAVSim in display-only mode](../sim_sih/index.md#visualization-optional) or monitor the vehicle in QGroundControl's map view. +::: ## 仿真器 MAVLink API -All simulators except for Gazebo communicate with PX4 using the Simulator MAVLink API. +Most external simulators communicate with PX4 using the Simulator MAVLink API. This API defines a set of MAVLink messages that supply sensor data from the simulated world to PX4 and return motor and actuator values from the flight code that will be applied to the simulated vehicle. The image below shows the message flow. +:::info +SIH does not use the MAVLink simulator API. It runs physics internally via uORB messages. Gazebo communicates with PX4 via gz_bridge (Gazebo transport), not MAVLink. +::: + ![Simulator MAVLink API](../../assets/simulation/px4_simulator_messages.svg) :::info @@ -67,7 +112,7 @@ The messages are described below (see links for specific detail). -PX4 directly uses the [Gazebo API](https://gazebosim.org/docs) to interface with [Gazebo](../sim_gazebo_gz/index.md) and MAVlink is not required. +PX4 directly uses the [Gazebo API](https://gazebosim.org/docs/) to interface with [Gazebo](../sim_gazebo_gz/index.md) and MAVlink is not required. ## 默认 PX4 MAVLink UDP 端口 @@ -96,7 +141,7 @@ See [System Startup](../concept/system_startup.md) to learn more. ## SITL 仿真环境 -The diagram below shows a typical SITL simulation environment for any of the supported simulators that use MAVLink (i.e. all of them except Gazebo). +The diagram below shows a typical SITL simulation environment for any of the supported simulators that use MAVLink (i.e. most external simulators, but not Gazebo or SIH). ![PX4 SITL overview](../../assets/simulation/px4_sitl_overview.svg) @@ -153,8 +198,16 @@ make px4_sitl jmavsim # Start PX4 with no simulator (i.e. to use your own "custom" simulator) make px4_sitl none_iris + +# SIH (headless, zero dependencies) +make px4_sitl_sih sihsim_quadx +make px4_sitl_sih sihsim_airplane ``` +:::info +Use `px4_sitl_sih` instead of `px4_sitl` to avoid building Gazebo dependencies. +::: + The simulation can be further configured via environment variables: - Any of the [PX4 parameters](../advanced_config/parameter_reference.md) can be overridden via `export PX4_PARAM_{name}={value}`. @@ -165,7 +218,7 @@ For more information see: [Building the Code > PX4 Make Build Targets](../dev_se ### Run Simulation Faster than Realtime {#simulation_speed} -SITL can be run faster or slower than real-time when using Gazebo, Gazebo Classic, or jMAVSim. +SITL can be run faster or slower than real-time when using Gazebo, Gazebo Classic, jMAVSim, or SIH. The speed factor is set using the environment variable `PX4_SIM_SPEED_FACTOR`. @@ -179,6 +232,7 @@ This is what makes it possible to run the simulation at different speeds, and al - Gazebo: [Change Simulation Speed](../sim_gazebo_gz/index.md#change-simulation-speed) - Gazebo Classic: [Change Simulation Speed](../sim_gazebo_classic/index.md#change-simulation-speed) and [Lockstep](../sim_gazebo_classic/index.md#lockstep) - jMAVSim: [Change Simulation Speed](../sim_jmavsim/index.md#change-simulation-speed) and [Lockstep](../sim_jmavsim/index.md#lockstep) +- SIH: Supports `PX4_SIM_SPEED_FACTOR` for faster-than-realtime simulation. ### 启动脚本 @@ -213,7 +267,7 @@ For setup information see the _QGroundControl User Guide_: PX4 supports capture of both still images and video from within the [Gazebo Classic](../sim_gazebo_classic/index.md) simulated environment. This can be enabled/set up as described in [Gazebo Glassic > Video Streaming](../sim_gazebo_classic/index.md#video-streaming). -The simulated camera is a gazebo classic plugin that implements the [MAVLink Camera Protocol](https://mavlink.io/en/protocol/camera.html) . +The simulated camera is a gazebo classic plugin that implements the [MAVLink Camera Protocol](https://mavlink.io/en/services/camera.html) . PX4 connects/integrates with this camera in _exactly the same way_ as it would with any other MAVLink camera: 1. [TRIG_INTERFACE](../advanced_config/parameter_reference.md#TRIG_INTERFACE) must be set to `3` to configure the camera trigger driver for use with a MAVLink camera diff --git a/docs/zh/simulation/multi-vehicle-simulation.md b/docs/zh/simulation/multi-vehicle-simulation.md index 3e9eaa59d7..08208f2260 100644 --- a/docs/zh/simulation/multi-vehicle-simulation.md +++ b/docs/zh/simulation/multi-vehicle-simulation.md @@ -6,6 +6,7 @@ - [Multi-Vehicle Sim with Gazebo Classic](../sim_gazebo_classic/multi_vehicle_simulation.md) (both with and without ROS) - [Multi-Vehicle Sim with FlightGear](../sim_flightgear/multi_vehicle.md) - [Multi-Vehicle Sim with JMAVSim](../sim_jmavsim/multi_vehicle.md) +- [Multi-Vehicle Sim with SIH](../sim_sih/index.md#multi-vehicle-simulation) The choice of the simulator depends on the vehicle to be simulated, how "good" the simulation needs to be (and for what features), and how many vehicles need to be simulated at a time: @@ -18,5 +19,8 @@ The choice of the simulator depends on the vehicle to be simulated, how "good" t Note, this is the successor of [Gazebo Classic](../sim_gazebo_classic/index.md) (below). - [Gazebo Classic](../sim_gazebo_classic/index.md) is less accurate and less heavy-weight and supports many features and vehicles that aren't available for FlightGear. It can simulate many more vehicles at a time than FlightGear and it allows for different types of vehicles to be simulated at the same time. -- JMAVSim is a very light-weight simulator that supports only quadcopters. +- [JMAVSim](../sim_jmavsim/index.md) is a very light-weight simulator that supports only quadcopters. It is recommended if you need to support a lot of quadcopters, and the simulation only needs to be approximate. +- [SIH](../sim_sih/index.md) is the lightest-weight option with zero external dependencies. + Since SIH is headless and runs physics internally, it can launch many instances with minimal resource usage. + It supports all 6 vehicle types (quad, hex, plane, tailsitter, standard VTOL, rover). diff --git a/docs/zh/simulation/px4_simulation_quickstart.md b/docs/zh/simulation/px4_simulation_quickstart.md new file mode 100644 index 0000000000..7a314741f4 --- /dev/null +++ b/docs/zh/simulation/px4_simulation_quickstart.md @@ -0,0 +1,25 @@ +# PX4 Simulation QuickStart + +First install [Docker](https://docs.docker.com/get-docker/) (a free tool that runs containers). + +The following command will then run a PX4 quadrotor simulation that you can connect to [QGroundControl](https://qgroundcontrol.com), [MAVSDK](https://mavsdk.mavlink.io/) or [ROS 2](../ros2/user_guide.md) (on Linux, macOS, and Windows): + +```sh +docker run --rm -it -p 14550:14550/udp px4io/px4-sitl:latest +``` + +That's it — open [QGroundControl](https://qgroundcontrol.com) and fly! + +::: tip + +To try [other vehicle types](../sim_sih/#supported-vehicle-types) append the corresponding line below to the command: + +```sh +-e PX4_SIM_MODEL=sihsim_airplane # Plane +-e PX4_SIM_MODEL=sihsim_standard_vtol # Standard VTOL +-e PX4_SIM_MODEL=sihsim_rover # Ackermann rover +``` + +For more information and options see [Container Images](../simulation/px4_sitl_prebuilt_packages.md#container-images) (in _Pre-built SITL Packages_) and [SIH Simulation](../sim_sih/index.md). + +::: diff --git a/docs/zh/simulation/px4_sitl_prebuilt_packages.md b/docs/zh/simulation/px4_sitl_prebuilt_packages.md new file mode 100644 index 0000000000..dc9ed792b0 --- /dev/null +++ b/docs/zh/simulation/px4_sitl_prebuilt_packages.md @@ -0,0 +1,297 @@ +# Pre-built SITL Packages + +Pre-built packages let you run [PX4 SITL simulation](index.md) without setting up a build environment. + +This is very useful if you don't need to modify PX4 itself. +For example, if you want to write drone apps using [MAVSDK](https://mavsdk.mavlink.io) or [ROS 2](../ros2/user_guide.md), or you just want to fly with PX4. + +:::tip +See [PX4 Simulation QuickStart](px4_simulation_quickstart.md) for a one-line instruction to run the SIH package in a container. +::: + +## What's Available + +Two simulators are packaged, each available as a `.deb` package (Ubuntu) or a Docker [container](#container-images) (any OS): + +| 仿真器 | Format | Package / Image | Size | +| -------------------------------------------- | -------------------- | ----------------------- | ----------------------- | +| [SIH](../sim_sih/index.md) | .deb | `px4` | ~10 MB | +| | container | `px4io/px4-sitl` | ~100 MB | +| [Gazebo Harmonic](../sim_gazebo_gz/index.md) | .deb | `px4-gazebo` | ~30 MB | +| | container | `px4io/px4-sitl-gazebo` | ~2 GB | + +SIH is a lightweight, headless simulator built into PX4 with no external dependencies. +Gazebo provides full 3D simulation with camera, LiDAR, and custom worlds. +Sizes are approximate and vary between releases. + +For help choosing between simulators, see the [simulator comparison table](index.md#simulator-comparison). + +### Versions and Releases + +Packages and images are versioned to match PX4 tags (e.g. `v1.17.0`, `v1.17.0~beta1`). +`.deb` packages are built for **Ubuntu 22.04 (Jammy)** and **24.04 (Noble)**, on both **amd64** and **arm64**. +Container images support **amd64** and **arm64**. +Stable releases and pre-releases are published on the [PX4 Releases](https://github.com/PX4/PX4-Autopilot/releases) page. + +## .deb Packages (Ubuntu) + +Download the `.deb` file for your Ubuntu version and architecture from the [PX4 Releases](https://github.com/PX4/PX4-Autopilot/releases) page, then install as shown below. +After installation the binary is added to the default Ubuntu system paths, and can be run from anywhere. + +### px4 (SIH) + +No extra repositories are required: + +```bash +sudo apt install ./px4_*.deb +``` + +### px4-gazebo (Gazebo Harmonic) + +The package depends on Gazebo Harmonic runtime libraries from the OSRF repository. +Add the repository first, then install: + +```bash +# Add OSRF Gazebo repository (one-time setup) +sudo curl -fsSL 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" \ + | sudo tee /etc/apt/sources.list.d/gazebo-stable.list > /dev/null +sudo apt update + +# Install (resolves Gazebo dependencies automatically) +sudo apt install ./px4-gazebo_*.deb +``` + +### Uninstalling + +```bash +sudo apt remove px4 # SIH package +sudo apt remove px4-gazebo # Gazebo package +``` + +## Container Images + +Container images are built using the same `.deb` packages described above, packaged into minimal Docker images. +They are published to [Docker Hub](https://hub.docker.com/u/px4io) on every tagged release. +You will need to [install Docker](https://docs.docker.com/get-docker/). + +| Image | 仿真器 | +| ----------------------------- | --------------------------------- | +| `px4io/px4-sitl:` | SIH (headless) | +| `px4io/px4-sitl-gazebo:` | Gazebo Harmonic | + +Tags follow PX4 versions (e.g. `v1.17.0`). + +### Running + +```bash +# SIH +docker run --rm -it -p 14550:14550/udp px4io/px4-sitl:latest + +# Gazebo +docker run --rm -it -p 14550:14550/udp px4io/px4-sitl-gazebo:latest +``` + +Pass environment variables with `-e`: + +```bash +docker run --rm -it -p 14550:14550/udp \ + -e PX4_SIM_MODEL=sihsim_airplane \ + px4io/px4-sitl:latest +``` + +The quick-start command above only exposes the QGroundControl port. +To use MAVSDK, uXRCE-DDS (ROS 2), or MAVSim Viewer, expose the additional ports: + +```bash +docker run --rm -it \ + -p 14550:14550/udp \ + -p 14540:14540/udp \ + -p 8888:8888/udp \ + -p 19410:19410/udp \ + px4io/px4-sitl:latest +``` + +| Port | Protocol | Used by | +| ----- | -------- | ---------------------------------------------- | +| 14550 | UDP | QGroundControl | +| 14540 | UDP | MAVSDK / offboard API | +| 8888 | UDP | uXRCE-DDS agent (ROS 2) | +| 19410 | UDP | SIH display (MAVSim Viewer) | + +On Linux, you can skip individual port flags and use `--network host` instead: + +```bash +docker run --rm -it --network host px4io/px4-sitl:latest +``` + +## 配置 + +These options apply to both `.deb` packages and containers. +Note that after the first section below we only show how to use them with the deb packages (the pattern for using the options doesn't change). + +### Vehicle Selection + +Set `PX4_SIM_MODEL` to choose a vehicle. + +SIH: + +```bash +# Deb package +PX4_SIM_MODEL=sihsim_airplane px4 + +# Container +docker run --rm -it -p 14550:14550/udp px4io/px4-sitl:latest -e PX4_SIM_MODEL=sihsim_airplane +``` + +Gazebo: + +``` +# Deb package +PX4_SIM_MODEL=gz_x500 px4-gazebo + +# Container +docker run --rm -it -p 14550:14550/udp px4io/px4-sitl-gazebo:latest -e PX4_SIM_MODEL=gz_x500 +``` + +See [SIH Supported Vehicles](../sim_sih/index.md#supported-vehicle-types) and [Gazebo Vehicles](../sim_gazebo_gz/vehicles.md) for the full lists. + +### World Selection (Gazebo only) + +```sh +PX4_GZ_WORLD=baylands PX4_SIM_MODEL=gz_x500 px4-gazebo +``` + +See [Gazebo Worlds](../sim_gazebo_gz/worlds.md) for available worlds. + +### Environment Variables + +| Variable | 描述 | 默认值 | +| -------------------- | ------------------------------------------------------------------------------------------------------ | ----------------------------- | +| `PX4_SIM_MODEL` | Vehicle model (e.g. `gz_x500`, `sihsim_quadx`) | (required) | +| `PX4_GZ_WORLD` | Gazebo world name, without `.sdf` (e.g. `baylands`) | `default` | +| `HEADLESS` | Set to `1` to disable Gazebo GUI | (unset) | +| `PX4_UXRCE_DDS_PORT` | uXRCE-DDS agent UDP port | `8888` | +| `PX4_UXRCE_DDS_NS` | uXRCE-DDS ROS namespace | (none) | +| `XDG_DATA_HOME` | Base directory for per-instance working data (parameters, dataman) | `$HOME/.local/share` | + +## Multi-Instance + +Multiple simulated vehicles can run simultaneously by passing the `-i` flag with an instance number. +Each instance must be started in a separate terminal (or container). This works with both simulators. + +```sh +# Terminal 1 +PX4_SIM_MODEL=sihsim_quadx px4 -i 0 + +# Terminal 2 +PX4_SIM_MODEL=sihsim_quadx px4 -i 1 +``` + +MAVLink and uXRCE-DDS port numbers are automatically offset by the instance number. + +Each package (`px4` and `px4-gazebo`) is a standalone install. Do not mix instances from the two packages in the same session. + +## MAVLink and QGroundControl + +PX4 opens several MAVLink UDP ports on startup. +[QGroundControl](https://qgroundcontrol.com) auto-connects on UDP port 14550. +You can also connect [MAVSDK](https://mavsdk.mavlink.io) or any MAVLink-compatible tool. + +| Link | 模式 | UDP Local Port | UDP Remote Port | Data Rate | +| ----------------------------------------- | ------- | ---------------- | ---------------- | --------- | +| GCS link | Normal | 18570 + instance | 14550 | 4 Mbps | +| API/Offboard link | Onboard | 14580 + instance | 14540 + instance | 4 Mbps | +| Onboard link to camera | Onboard | 14280 + instance | 14030 + instance | 4 kbps | +| Onboard link to gimbal | Gimbal | 13030 + instance | 13280 + instance | 400 kbps | +| SIH display (SIH only) | Custom | 19450 + instance | 19410 + instance | 400 kbps | + +By default, MAVLink only listens on localhost. +Set parameter `MAV_{i}_BROADCAST = 1` to enable network access. + +## ROS 2 Integration + +The `uxrce_dds_client` module starts automatically and connects to a Micro XRCE-DDS Agent over UDP. +Run the agent before starting PX4: + +```sh +MicroXRCEAgent udp4 -p 8888 +``` + +| 设置 | 默认值 | +| ---------- | ----------- | +| Transport | UDP | +| Agent IP | `127.0.0.1` | +| Agent Port | `8888` | + +Environment variables `PX4_UXRCE_DDS_PORT` and `PX4_UXRCE_DDS_NS` override the corresponding PX4 parameters ([UXRCE_DDS_PRT](../advanced_config/parameter_reference.md#UXRCE_DDS_PRT), [UXRCE_DDS_NS_IDX](../advanced_config/parameter_reference.md#UXRCE_DDS_NS_IDX)) at runtime without modifying stored parameters: + +```sh +PX4_UXRCE_DDS_PORT=9999 PX4_UXRCE_DDS_NS=drone1 PX4_SIM_MODEL=sihsim_quadx px4 +``` + +## Daemon Mode + +Start PX4 without an interactive shell (useful for CI pipelines and automated testing): + +```sh +PX4_SIM_MODEL=sihsim_quadx px4 -d +``` + +## Installed File Layout + +### px4 + +```txt +/opt/px4/ + bin/ + px4 # PX4 binary + px4-* # Module symlinks + px4-alias.sh # Shell aliases + etc/ # ROMFS (init scripts, mixers, airframes) + init.d-posix/ + +/usr/bin/px4 -> /opt/px4/bin/px4 +``` + +### px4-gazebo + +```txt +/opt/px4-gazebo/ + bin/ + px4 # PX4 binary + px4-gazebo # Gazebo wrapper (sets GZ_SIM_* env vars) + px4-* # Module symlinks + px4-alias.sh # Shell aliases + etc/ # ROMFS (init scripts, mixers, airframes) + init.d-posix/ + share/gz/ + models/ # Gazebo vehicle models + worlds/ # Gazebo world files + server.config + lib/gz/plugins/ # PX4 Gazebo plugins + +/usr/bin/px4-gazebo -> /opt/px4-gazebo/bin/px4-gazebo +``` + +### Runtime directories (created on first run, per user) + +```sh +$XDG_DATA_HOME/px4/rootfs// # parameters, dataman, eeprom +``` + +## Building .deb Files Locally + +To build `.deb` files locally (e.g. to package a custom PX4 branch): + +```sh +# SIH — produces px4_*.deb +make px4_sitl_sih +cd build/px4_sitl_sih && cpack -G DEB + +# Gazebo — produces px4-gazebo_*.deb +make px4_sitl_default +cd build/px4_sitl_default && cpack -G DEB +``` diff --git a/docs/zh/smart_batteries/index.md b/docs/zh/smart_batteries/index.md index 45cba51bc5..00eeca0211 100644 --- a/docs/zh/smart_batteries/index.md +++ b/docs/zh/smart_batteries/index.md @@ -1,7 +1,7 @@ # 智能电池 智能电池提供的电池状态信息比自动驾驶仪估计的“哑”电池更准确(通常也更详细)。 -这使得能够更可靠地通知故障条件。 +This allows for more reliable flight planning notification of failure conditions. 这些信息可能包括:剩余电量、空电时间(估计)、电池电压(额定最大/最小电压、电流电压等)、温度、电流、故障信息、电池供应商、化学成分等。 PX4(至少)支持以下智能电池: diff --git a/docs/zh/smart_batteries/rotoye_batmon.md b/docs/zh/smart_batteries/rotoye_batmon.md index 20e9e615cf..7d6af56887 100644 --- a/docs/zh/smart_batteries/rotoye_batmon.md +++ b/docs/zh/smart_batteries/rotoye_batmon.md @@ -1,6 +1,6 @@ # 补充信息 -[Rotoye 电池监测器](https://rotoye.com/batmon/) 是一款套件,用于为现成的锂离子和锂聚合物电池增添智能电池功能。 +[Rotoye Batmon](https://shop.rotoye.com/batmon/) is a kit for adding smart battery functionality to off-the-shelf Lithium-Ion and LiPo batteries. It can be purchased as a standalone unit or as part of a factory-assembled smart-battery. ![Rotoye 电池监控板](../../assets/hardware/smart_batteries/rotoye_batmon/smart-battery-rotoye.jpg) @@ -9,7 +9,7 @@ It can be purchased as a standalone unit or as part of a factory-assembled smart ## 购买渠道 -[Rotoye 商店](https://rotoye.com/batmon/):电池套件、自定义智能电池和配件 +[Rotoye Store](https://shop.rotoye.com/batmon/): Batmon kits, custom smart-batteries, and accessories ## Wiring/Connections @@ -50,7 +50,3 @@ In _QGroundControl_: batt_smbus start -X -b 1 -a 11 # External bus 1, address 0x0b batt_smbus start -X -b 1 -a 12 # External bus 1, address 0x0c ``` - -## 更多信息 - -快速入门指南(https://rotoye.com/batmon-tutorial/) (Rotoye) diff --git a/docs/zh/software_update/stm32_bootloader.md b/docs/zh/software_update/stm32_bootloader.md index 8bce27a416..3d7d9c1eea 100644 --- a/docs/zh/software_update/stm32_bootloader.md +++ b/docs/zh/software_update/stm32_bootloader.md @@ -62,7 +62,7 @@ arm-none-eabi-gdb ### J-Link -These instructions are for the [J-Link GDB server](https://www.segger.com/jlink-gdb-server.html). +These instructions are for the [J-Link GDB server](https://www.segger.com/products/debug-probes/j-link/tools/j-link-gdb-server/about-j-link-gdb-server/). #### 系统必备组件 diff --git a/docs/zh/telemetry/cuav_p8_radio.md b/docs/zh/telemetry/cuav_p8_radio.md index 37a63a1f1a..bf1bc95171 100644 --- a/docs/zh/telemetry/cuav_p8_radio.md +++ b/docs/zh/telemetry/cuav_p8_radio.md @@ -19,7 +19,7 @@ It supports multiple modes such as point-to-point, point-to-multipoint, and rela ## 购买渠道 -- [CUAV store](https://www.cuav.net/en/p8-2/) +- [CUAV store](https://www.cuav.net/en/p8-en/) - [CUAV alibaba](https://www.alibaba.com/product-detail/Free-shipping-CUAV-UAV-P8-Radio_1600324379418.html?spm=a2747.manage.0.0.2dca71d2bY4B0M) ## PX4 配置 @@ -61,6 +61,6 @@ CUAV P8 Radio does not support power supply from the flight controller, it needs ## More information -[P8 manual](http://manual.cuav.net/data-transmission/p8-radio/p8-user-manual-en.pdf) +[P8 manual](https://manual.cuav.net/data-transmission/p8-radio/p8_user_manual_cn.pdf) [CUAV P8 Radio](https://doc.cuav.net/data-transmission/p8-radio/en/) (Official Guide) diff --git a/docs/zh/telemetry/holybro_sik_longrange.md b/docs/zh/telemetry/holybro_sik_longrange.md new file mode 100644 index 0000000000..b401a60ac3 --- /dev/null +++ b/docs/zh/telemetry/holybro_sik_longrange.md @@ -0,0 +1,100 @@ +# Holybro SiK Telemetry Radio - Long Range + +This Holybro SiK Long Range Telemetry Radio is a small, light, and inexpensive open-source radio platform with an extended range (~20km) compared to the standard model. + +This radio is plug-and-play, ready for all Pixhawk Standard and other similar flight controllers, providing the easiest way to set up a telemetry connection between your controller and a ground station. +It uses open-source firmware that has been specially designed to work well with MAVLink packets and to be integrated with PX4, ArduPilot, Mission Planner and QGroundControl. + +The radios are available in 915 MHz or 433 MHz versions. +Please purchase the model that is appropriate for your country/region. + +![Sik Telemetry Radio - Long Range](../../assets/hardware/telemetry/holybro_sik_longrange/holybro_sik_longrange.jpg) + +## 购买渠道 + +- [Holybro SiK Telemetry Radio - Long Range](https://holybro.com/collections/telemetry-radios/products/sik-telemetry-radio-1w) + +## 特性 + +- 1W maximum RF output and up to 20km range (compared to 100mW/300m for the short range version). +- Open-source SIK firmware +- Plug-n-play for Pixhawk Standard Flight Controllers +- The Easiest way to connect your controller and Ground Station +- Interchangeable air and ground radio +- 6-position JST-GH connector + +## 技术规范 + +- 1 W maximum output power (adjustable) -117 dBm receive sensitivity +- RP-SMA connector +- 2-way full-duplex communication through adaptive TDM UART interface +- Transparent serial link +- MAVLink protocol framing +- Frequency Hopping Spread Spectrum (FHSS) Configurable duty cycle +- Error correction corrects up to 25% of bit errors Open-source SIK firmware +- Configurable through Mission Planner & APM Planner +- FT230X USB to BASIC UART IC +- USB Type C connector +- XT30 power connector for 7~28V DC input + +## LEDs Indicators Status + +The radios have four status LEDs. +The USB `RX` and `TX` LEDs indicate the status of reception and transmission of the USB port. +The `RADIO` and `ACT` two LED lights indicate the status of the RF circuit. + +- USB-TX LED (orange): + - Blinking: USB port has data transmission + - Off: USB port has no data transmission +- USB-RX LED (orange): + - Blinking: USB port has data reception + - Off: USB port has no data reception +- Radio LED (Green) + - Blinking: Searching for another radio + - Solid: Link is established with another radio +- ACT LED (Red) + - Flashing: Transmitting data + - Solid: In firmware update mode + +![Holybro SiK LongRange LED Indicators](../../assets/hardware/telemetry/holybro_sik_longrange/holybro_sik_longrange_label.png) + +## Connecting to Flight Controller + +Supply the power (7~28V) to the radio via the XT30 connector. +Use the 6-pin JST-GH connector that comes with the radio to connect the radio to your flight controller's `TELEM1` port. + +Note that `TELEM2` can also be used, but you may need to [configure the telemetry port](../peripherals/mavlink_peripherals.md) on some flight controllers. + +## Connecting to a PC or Ground Station + +First, power the module with a 7~28V DC source. +Then, connect the radio to your Windows PC or Ground Station using a Type-C USB cable. + +The necessary drivers should be installed automatically, and the radio will appear as a new “USB Serial Port” in the Windows Device Manager under Ports (COM & LPT). +The Mission Planner's COM Port selection drop-down should also include the newly added COM port. + +## Packages Include + +### Single Radio + +- 1W Radio modules with antennas (1) +- High-gain omnidirectional antenna (1) +- Male Type-C to male Type-C USB cable (1) +- Male XT30 to female XT30 adapter cable (1) +- Male XT30 to female XT60 adapter cable (1) +- JST-GH-6P to JST-GH-6P cable (1) (for Pixhawk Standard FC) +- Rubber damping grommet (3) + +![Sik Telemetry Radio - LongRange Package1](../../assets/hardware/telemetry/holybro_sik_longrange/holybro_sik_longrange_include1.png) + +### Pair Radios + +- 1W Radio modules with antennas (2) +- High-gain omnidirectional antenna (2) +- Male Type-C to male Type-C USB cable (1) +- Male XT30 to female XT30 adapter cable (1) +- Male XT30 to female XT60 adapter cable (1) +- JST-GH-6P to JST-GH-6P cable (1) (for Pixhawk Standard FC) +- Rubber damping grommet (3) + +![Sik Telemetry Radio - LongRange Package2](../../assets/hardware/telemetry/holybro_sik_longrange/holybro_sik_longrange_include2.png) diff --git a/docs/zh/telemetry/index.md b/docs/zh/telemetry/index.md index 9fe8ed3087..0dc5cee836 100644 --- a/docs/zh/telemetry/index.md +++ b/docs/zh/telemetry/index.md @@ -6,6 +6,7 @@ PX4支持多种类型数传电台: - [SiK Radio](../telemetry/sik_radio.md) based firmware (more generally, any radio with a UART interface should work). - [HolyBro SiK Telemetry Radio](../telemetry/holybro_sik_radio.md) + - [HolyBro SiK Long Range](../telemetry/holybro_sik_longrange.md) - [RFD900 Telemetry Radio](../telemetry/rfd900_telemetry.md) - [ThunderFly TFSIK01 Telemetry Radio](../telemetry/tfsik_telemetry.md) - _HKPilot Telemetry Radio_ (Discontinued) diff --git a/docs/zh/telemetry/jfi_telemetry.md b/docs/zh/telemetry/jfi_telemetry.md index b9387b536b..1d95bda865 100644 --- a/docs/zh/telemetry/jfi_telemetry.md +++ b/docs/zh/telemetry/jfi_telemetry.md @@ -94,7 +94,7 @@ If you want to change the baud rate: ### One-to-many (1:N) Setups For one-to-many (1:N) setups a higher baud rate is _highly recommended_ to ensure stable data reception. -All J.Fi devices should be set to the same baud rate (although communication may work even when when devices use different baud rates). +All J.Fi devices should be set to the same baud rate (although communication may work even when devices use different baud rates). This should be changed in both PX4 and the J.Fi modules as explained in the previous section. You will also need to make sure that all vehicles on the MAVLink network are assigned a unique **System ID** ([MAV_SYS_ID](../advanced_config/parameter_reference.md#MAV_SYS_ID)). diff --git a/docs/zh/telemetry/sik_radio.md b/docs/zh/telemetry/sik_radio.md index 8d2d4f9a9e..6d6a960440 100644 --- a/docs/zh/telemetry/sik_radio.md +++ b/docs/zh/telemetry/sik_radio.md @@ -14,6 +14,7 @@ Hardware for the SiK radio can be obtained from various manufacturers/stores in ## Vendors - [Holybro Telemetry Radio](../telemetry/holybro_sik_radio.md) +- [HolyBro SiK Long Range](../telemetry/holybro_sik_longrange.md) - [RFD900 Telemetry Radio](../telemetry/rfd900_telemetry.md) - [ThunderFly TFSIK01 Telemetry Radio](../telemetry/tfsik_telemetry.md) - _HKPilot Telemetry Radio_ (Discontinued) diff --git a/docs/zh/test_and_ci/integration_testing_mavsdk.md b/docs/zh/test_and_ci/integration_testing_mavsdk.md index f42654f229..bb629ef690 100644 --- a/docs/zh/test_and_ci/integration_testing_mavsdk.md +++ b/docs/zh/test_and_ci/integration_testing_mavsdk.md @@ -7,7 +7,7 @@ PX4 can be tested end to end to using integration tests based on [MAVSDK](https: 测试需要将MAVSAK C++库安装到系统目录(如: /usr/lib or /usr/local/lib) -:::note +:::info This is the recommended integration test framework for PX4. ::: diff --git a/docs/zh/test_and_ci/integration_testing_ros1_mavros.md b/docs/zh/test_and_ci/integration_testing_ros1_mavros.md index 083deb2310..541f3eb3c5 100644 --- a/docs/zh/test_and_ci/integration_testing_ros1_mavros.md +++ b/docs/zh/test_and_ci/integration_testing_ros1_mavros.md @@ -9,7 +9,7 @@ It should be used only for new test cases that _require_ ROS 1. [MAVSDK Integration Testing](../test_and_ci/integration_testing_mavsdk.md) is preferred when writing new tests. ::: -:::note +:::info All PX4 integration tests are executed automatically by our [Continuous Integration](../test_and_ci/continous_integration.md) system. ::: diff --git a/docs/zh/test_and_ci/test_flights.md b/docs/zh/test_and_ci/test_flights.md index 654ab39b1e..186859f6e3 100644 --- a/docs/zh/test_and_ci/test_flights.md +++ b/docs/zh/test_and_ci/test_flights.md @@ -7,7 +7,7 @@ const { site } = useData();
-

This page may be out out of date. See the latest version.

+

This page may be out of date. See the latest version.

@@ -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. +### 多旋翼 + - [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) diff --git a/docs/zh/test_and_ci/unit_tests.md b/docs/zh/test_and_ci/unit_tests.md index 0a3039a8f9..182caffa36 100644 --- a/docs/zh/test_and_ci/unit_tests.md +++ b/docs/zh/test_and_ci/unit_tests.md @@ -141,7 +141,7 @@ It can be run directly in a debugger, however be careful to only run one test pe } ``` - `OPTION` can be `OPT_NOALLTEST`,`OPT_NOJIGTEST` or `0` and is considered if within px4 shell one of the two commands are called: + `OPTION` can be `OPT_NOALLTEST`,`OPT_NOJIGTEST` or `0` and is considered if within PX4 shell one of the two commands are called: ```sh pxh> tests all diff --git a/docs/zh/test_cards/fw_01_manual_modes.md b/docs/zh/test_cards/fw_01_manual_modes.md new file mode 100644 index 0000000000..3847189cbb --- /dev/null +++ b/docs/zh/test_cards/fw_01_manual_modes.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 + +❏ 自稳 + +    ❏ Wings level with stick centered + +    ❏ Pitch/Roll response with correct bank angle limits + +    ❏ Yaw coordination + +    ❏ Throttle response 1:1 + +❏ 高度 + +    ❏ 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 + +❏ 定点 + +    ❏ Vehicle should hold current heading and loiter with stick centered + +    ❏ Altitude should hold current value + +    ❏ Roll input commands heading change + +## 预期成果 + +- 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 diff --git a/docs/zh/test_cards/fw_02_full_autonomous.md b/docs/zh/test_cards/fw_02_full_autonomous.md new file mode 100644 index 0000000000..34ce8063d4 --- /dev/null +++ b/docs/zh/test_cards/fw_02_full_autonomous.md @@ -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 + +## 预期成果 + +- 任务应该在第一次尝试时上传 +- 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) diff --git a/docs/zh/test_cards/mc_02_full_autonomous.md b/docs/zh/test_cards/mc_02_full_autonomous.md index 64e83fdba8..179564ab36 100644 --- a/docs/zh/test_cards/mc_02_full_autonomous.md +++ b/docs/zh/test_cards/mc_02_full_autonomous.md @@ -54,7 +54,7 @@ Plan a mission on the ground. Ensure the mission has - 当油门升高时,起飞应该是平稳的 - 任务应该在第一次尝试时上传 - 使用 Auto 时飞机应自动起飞 -- Vehicle shoud adjust height to RTL altitude before returning home +- Vehicle should adjust height to RTL altitude before returning home - 着陆时,直升机不应在地面上反弹 v1 #include -#include +#include class RegisterExtComponentRequestV1Translation { public: using MessageOlder = px4_msgs_old::msg::RegisterExtComponentRequestV0; static_assert(MessageOlder::MESSAGE_VERSION == 0); - using MessageNewer = px4_msgs::msg::RegisterExtComponentRequest; + using MessageNewer = px4_msgs_old::msg::RegisterExtComponentRequestV1; static_assert(MessageNewer::MESSAGE_VERSION == 1); static constexpr const char* kTopic = "fmu/in/register_ext_component_request"; diff --git a/msg/translation_node/translations/translation_register_ext_component_request_v2.h b/msg/translation_node/translations/translation_register_ext_component_request_v2.h new file mode 100644 index 0000000000..d7c199e336 --- /dev/null +++ b/msg/translation_node/translations/translation_register_ext_component_request_v2.h @@ -0,0 +1,51 @@ +/**************************************************************************** + * Copyright (c) 2026 PX4 Development Team. + * SPDX-License-Identifier: BSD-3-Clause + ****************************************************************************/ +#pragma once + +// Translate RegisterExtComponentRequest v1 <--> v2 +#include +#include + +class RegisterExtComponentRequestV2Translation { +public: + using MessageOlder = px4_msgs_old::msg::RegisterExtComponentRequestV1; + static_assert(MessageOlder::MESSAGE_VERSION == 1); + + using MessageNewer = px4_msgs::msg::RegisterExtComponentRequest; + static_assert(MessageNewer::MESSAGE_VERSION == 2); + + static constexpr const char* kTopic = "fmu/in/register_ext_component_request"; + + static void fromOlder(const MessageOlder &msg_older, MessageNewer &msg_newer) { + msg_newer.timestamp = msg_older.timestamp; + msg_newer.request_id = msg_older.request_id; + msg_newer.name = msg_older.name; + msg_newer.px4_ros2_api_version = msg_older.px4_ros2_api_version; + msg_newer.register_arming_check = msg_older.register_arming_check; + msg_newer.register_mode = msg_older.register_mode; + msg_newer.register_mode_executor = msg_older.register_mode_executor; + msg_newer.enable_replace_internal_mode = msg_older.enable_replace_internal_mode; + msg_newer.replace_internal_mode = msg_older.replace_internal_mode; + msg_newer.activate_mode_immediately = msg_older.activate_mode_immediately; + msg_newer.not_user_selectable = msg_older.not_user_selectable; + msg_newer.request_offboard_setpoints = false; + } + + static void toOlder(const MessageNewer &msg_newer, MessageOlder &msg_older) { + msg_older.timestamp = msg_newer.timestamp; + msg_older.request_id = msg_newer.request_id; + msg_older.name = msg_newer.name; + msg_older.px4_ros2_api_version = msg_newer.px4_ros2_api_version; + msg_older.register_arming_check = msg_newer.register_arming_check; + msg_older.register_mode = msg_newer.register_mode; + msg_older.register_mode_executor = msg_newer.register_mode_executor; + msg_older.enable_replace_internal_mode = msg_newer.enable_replace_internal_mode; + msg_older.replace_internal_mode = msg_newer.replace_internal_mode; + msg_older.activate_mode_immediately = msg_newer.activate_mode_immediately; + msg_older.not_user_selectable = msg_newer.not_user_selectable; + } +}; + +REGISTER_TOPIC_TRANSLATION_DIRECT(RegisterExtComponentRequestV2Translation); diff --git a/msg/translation_node/translations/translation_vehicle_command_ack_v1.h b/msg/translation_node/translations/translation_vehicle_command_ack_v1.h new file mode 100644 index 0000000000..993b20008c --- /dev/null +++ b/msg/translation_node/translations/translation_vehicle_command_ack_v1.h @@ -0,0 +1,51 @@ +/**************************************************************************** + * Copyright (c) 2024 PX4 Development Team. + * SPDX-License-Identifier: BSD-3-Clause + ****************************************************************************/ +#pragma once + +// Translate VehicleCommandAck v0 <--> v1 +#include +#include + +class VehicleCommandAckV1Translation { +public: + using MessageOlder = px4_msgs_old::msg::VehicleCommandAckV0; + static_assert(MessageOlder::MESSAGE_VERSION == 0); + + using MessageNewer = px4_msgs::msg::VehicleCommandAck; + static_assert(MessageNewer::MESSAGE_VERSION == 1); + + static constexpr const char* kTopic = "fmu/out/vehicle_command_ack"; + + static void fromOlder(const MessageOlder &msg_older, MessageNewer &msg_newer) { + // Set msg_newer from msg_older + msg_newer.timestamp = msg_older.timestamp; + msg_newer.command = msg_older.command; + msg_newer.result = msg_older.result; + msg_newer.result_param1 = msg_older.result_param1; + msg_newer.result_param2 = msg_older.result_param2; + msg_newer.target_system = msg_older.target_system; + msg_newer.target_component = msg_older.target_component; + msg_newer.from_external = msg_older.from_external; + } + + static void toOlder(const MessageNewer &msg_newer, MessageOlder &msg_older) { + // Set msg_older from msg_newer + msg_older.timestamp = msg_newer.timestamp; + msg_older.command = msg_newer.command; + if (msg_newer.result > msg_newer.VEHICLE_CMD_RESULT_CANCELLED) { + msg_older.result = msg_older.VEHICLE_CMD_RESULT_DENIED; + } + else { + msg_older.result = msg_newer.result; + } + msg_older.result_param1 = msg_newer.result_param1; + msg_older.result_param2 = msg_newer.result_param2; + msg_older.target_system = msg_newer.target_system; + msg_older.target_component = msg_newer.target_component; + msg_older.from_external = msg_newer.from_external; + } +}; + +REGISTER_TOPIC_TRANSLATION_DIRECT(VehicleCommandAckV1Translation); diff --git a/msg/translation_node/translations/translation_vehicle_status_v2.h b/msg/translation_node/translations/translation_vehicle_status_v2.h index da4b315566..816e5d3cdd 100644 --- a/msg/translation_node/translations/translation_vehicle_status_v2.h +++ b/msg/translation_node/translations/translation_vehicle_status_v2.h @@ -6,14 +6,14 @@ // Translate VehicleStatus v1 <--> v2 #include -#include +#include class VehicleStatusV2Translation { public: using MessageOlder = px4_msgs_old::msg::VehicleStatusV1; static_assert(MessageOlder::MESSAGE_VERSION == 1); - using MessageNewer = px4_msgs::msg::VehicleStatus; + using MessageNewer = px4_msgs_old::msg::VehicleStatusV2; static_assert(MessageNewer::MESSAGE_VERSION == 2); static constexpr const char* kTopic = "fmu/out/vehicle_status"; diff --git a/msg/translation_node/translations/translation_vehicle_status_v3.h b/msg/translation_node/translations/translation_vehicle_status_v3.h new file mode 100644 index 0000000000..92e51121ef --- /dev/null +++ b/msg/translation_node/translations/translation_vehicle_status_v3.h @@ -0,0 +1,112 @@ +/**************************************************************************** + * Copyright (c) 2026 PX4 Development Team. + * SPDX-License-Identifier: BSD-3-Clause + ****************************************************************************/ +#pragma once + +// Translate VehicleStatus v2 <--> v3 +#include +#include + +class VehicleStatusV3Translation { +public: + using MessageOlder = px4_msgs_old::msg::VehicleStatusV2; + static_assert(MessageOlder::MESSAGE_VERSION == 2); + + using MessageNewer = px4_msgs_old::msg::VehicleStatusV3; + static_assert(MessageNewer::MESSAGE_VERSION == 3); + + static constexpr const char* kTopic = "fmu/out/vehicle_status"; + + static void fromOlder(const MessageOlder &msg_older, MessageNewer &msg_newer) { + // Set msg_newer from msg_older + msg_newer.timestamp = msg_older.timestamp; + msg_newer.armed_time = msg_older.armed_time; + msg_newer.takeoff_time = msg_older.takeoff_time; + msg_newer.arming_state = msg_older.arming_state; + msg_newer.latest_arming_reason = msg_older.latest_arming_reason; + msg_newer.latest_disarming_reason = msg_older.latest_disarming_reason; + msg_newer.nav_state_timestamp = msg_older.nav_state_timestamp; + msg_newer.nav_state_user_intention = msg_older.nav_state_user_intention; + msg_newer.nav_state = msg_older.nav_state; + msg_newer.executor_in_charge = msg_older.executor_in_charge; + msg_newer.nav_state_display = msg_older.nav_state_display; + msg_newer.valid_nav_states_mask = msg_older.valid_nav_states_mask; + msg_newer.can_set_nav_states_mask = msg_older.can_set_nav_states_mask; + // failure_detector_status removed (use separate FailureDetectorStatus topic) + msg_newer.hil_state = msg_older.hil_state; + msg_newer.vehicle_type = msg_older.vehicle_type; + msg_newer.failsafe = msg_older.failsafe; + msg_newer.failsafe_and_user_took_over = msg_older.failsafe_and_user_took_over; + msg_newer.failsafe_defer_state = msg_older.failsafe_defer_state; + msg_newer.gcs_connection_lost = msg_older.gcs_connection_lost; + msg_newer.gcs_connection_lost_counter = msg_older.gcs_connection_lost_counter; + msg_newer.high_latency_data_link_lost = msg_older.high_latency_data_link_lost; + msg_newer.is_vtol = msg_older.is_vtol; + msg_newer.is_vtol_tailsitter = msg_older.is_vtol_tailsitter; + msg_newer.in_transition_mode = msg_older.in_transition_mode; + msg_newer.in_transition_to_fw = msg_older.in_transition_to_fw; + msg_newer.system_type = msg_older.system_type; + msg_newer.system_id = msg_older.system_id; + msg_newer.component_id = msg_older.component_id; + msg_newer.safety_button_available = msg_older.safety_button_available; + msg_newer.safety_off = msg_older.safety_off; + msg_newer.power_input_valid = msg_older.power_input_valid; + msg_newer.usb_connected = msg_older.usb_connected; + msg_newer.open_drone_id_system_present = msg_older.open_drone_id_system_present; + msg_newer.open_drone_id_system_healthy = msg_older.open_drone_id_system_healthy; + msg_newer.parachute_system_present = msg_older.parachute_system_present; + msg_newer.parachute_system_healthy = msg_older.parachute_system_healthy; + msg_newer.traffic_avoidance_system_present = msg_older.traffic_avoidance_system_present; + msg_newer.rc_calibration_in_progress = msg_older.rc_calibration_in_progress; + msg_newer.calibration_enabled = msg_older.calibration_enabled; + msg_newer.pre_flight_checks_pass = msg_older.pre_flight_checks_pass; + } + + static void toOlder(const MessageNewer &msg_newer, MessageOlder &msg_older) { + // Set msg_older from msg_newer + msg_older.timestamp = msg_newer.timestamp; + msg_older.armed_time = msg_newer.armed_time; + msg_older.takeoff_time = msg_newer.takeoff_time; + msg_older.arming_state = msg_newer.arming_state; + msg_older.latest_arming_reason = msg_newer.latest_arming_reason; + msg_older.latest_disarming_reason = msg_newer.latest_disarming_reason; + msg_older.nav_state_timestamp = msg_newer.nav_state_timestamp; + msg_older.nav_state_user_intention = msg_newer.nav_state_user_intention; + msg_older.nav_state = msg_newer.nav_state; + msg_older.executor_in_charge = msg_newer.executor_in_charge; + msg_older.nav_state_display = msg_newer.nav_state_display; + msg_older.valid_nav_states_mask = msg_newer.valid_nav_states_mask; + msg_older.can_set_nav_states_mask = msg_newer.can_set_nav_states_mask; + msg_older.failure_detector_status = 0; // Removed in v3, use separate FailureDetectorStatus topic + msg_older.hil_state = msg_newer.hil_state; + msg_older.vehicle_type = msg_newer.vehicle_type; + msg_older.failsafe = msg_newer.failsafe; + msg_older.failsafe_and_user_took_over = msg_newer.failsafe_and_user_took_over; + msg_older.failsafe_defer_state = msg_newer.failsafe_defer_state; + msg_older.gcs_connection_lost = msg_newer.gcs_connection_lost; + msg_older.gcs_connection_lost_counter = msg_newer.gcs_connection_lost_counter; + msg_older.high_latency_data_link_lost = msg_newer.high_latency_data_link_lost; + msg_older.is_vtol = msg_newer.is_vtol; + msg_older.is_vtol_tailsitter = msg_newer.is_vtol_tailsitter; + msg_older.in_transition_mode = msg_newer.in_transition_mode; + msg_older.in_transition_to_fw = msg_newer.in_transition_to_fw; + msg_older.system_type = msg_newer.system_type; + msg_older.system_id = msg_newer.system_id; + msg_older.component_id = msg_newer.component_id; + msg_older.safety_button_available = msg_newer.safety_button_available; + msg_older.safety_off = msg_newer.safety_off; + msg_older.power_input_valid = msg_newer.power_input_valid; + msg_older.usb_connected = msg_newer.usb_connected; + msg_older.open_drone_id_system_present = msg_newer.open_drone_id_system_present; + msg_older.open_drone_id_system_healthy = msg_newer.open_drone_id_system_healthy; + msg_older.parachute_system_present = msg_newer.parachute_system_present; + msg_older.parachute_system_healthy = msg_newer.parachute_system_healthy; + msg_older.traffic_avoidance_system_present = msg_newer.traffic_avoidance_system_present; + msg_older.rc_calibration_in_progress = msg_newer.rc_calibration_in_progress; + msg_older.calibration_enabled = msg_newer.calibration_enabled; + msg_older.pre_flight_checks_pass = msg_newer.pre_flight_checks_pass; + } +}; + +REGISTER_TOPIC_TRANSLATION_DIRECT(VehicleStatusV3Translation); diff --git a/msg/translation_node/translations/translation_vehicle_status_v4.h b/msg/translation_node/translations/translation_vehicle_status_v4.h new file mode 100644 index 0000000000..36413cce8b --- /dev/null +++ b/msg/translation_node/translations/translation_vehicle_status_v4.h @@ -0,0 +1,109 @@ +/**************************************************************************** + * Copyright (c) 2026 PX4 Development Team. + * SPDX-License-Identifier: BSD-3-Clause + ****************************************************************************/ +#pragma once + +// Translate VehicleStatus v3 <--> v4 +#include +#include + +class VehicleStatusV4Translation { +public: + using MessageOlder = px4_msgs_old::msg::VehicleStatusV3; + static_assert(MessageOlder::MESSAGE_VERSION == 3); + + using MessageNewer = px4_msgs::msg::VehicleStatus; + static_assert(MessageNewer::MESSAGE_VERSION == 4); + + static constexpr const char* kTopic = "fmu/out/vehicle_status"; + + static void fromOlder(const MessageOlder &msg_older, MessageNewer &msg_newer) { + msg_newer.timestamp = msg_older.timestamp; + msg_newer.armed_time = msg_older.armed_time; + msg_newer.takeoff_time = msg_older.takeoff_time; + msg_newer.arming_state = msg_older.arming_state; + msg_newer.latest_arming_reason = msg_older.latest_arming_reason; + msg_newer.latest_disarming_reason = msg_older.latest_disarming_reason; + msg_newer.nav_state_timestamp = msg_older.nav_state_timestamp; + msg_newer.nav_state_user_intention = msg_older.nav_state_user_intention; + msg_newer.nav_state = msg_older.nav_state; + msg_newer.executor_in_charge = msg_older.executor_in_charge; + msg_newer.nav_state_display = msg_older.nav_state_display; + msg_newer.accepts_offboard_setpoints = false; + msg_newer.valid_nav_states_mask = msg_older.valid_nav_states_mask; + msg_newer.can_set_nav_states_mask = msg_older.can_set_nav_states_mask; + msg_newer.hil_state = msg_older.hil_state; + msg_newer.vehicle_type = msg_older.vehicle_type; + msg_newer.failsafe = msg_older.failsafe; + msg_newer.failsafe_and_user_took_over = msg_older.failsafe_and_user_took_over; + msg_newer.failsafe_defer_state = msg_older.failsafe_defer_state; + msg_newer.gcs_connection_lost = msg_older.gcs_connection_lost; + msg_newer.gcs_connection_lost_counter = msg_older.gcs_connection_lost_counter; + msg_newer.high_latency_data_link_lost = msg_older.high_latency_data_link_lost; + msg_newer.is_vtol = msg_older.is_vtol; + msg_newer.is_vtol_tailsitter = msg_older.is_vtol_tailsitter; + msg_newer.in_transition_mode = msg_older.in_transition_mode; + msg_newer.in_transition_to_fw = msg_older.in_transition_to_fw; + msg_newer.system_type = msg_older.system_type; + msg_newer.system_id = msg_older.system_id; + msg_newer.component_id = msg_older.component_id; + msg_newer.safety_button_available = msg_older.safety_button_available; + msg_newer.safety_off = msg_older.safety_off; + msg_newer.power_input_valid = msg_older.power_input_valid; + msg_newer.usb_connected = msg_older.usb_connected; + msg_newer.open_drone_id_system_present = msg_older.open_drone_id_system_present; + msg_newer.open_drone_id_system_healthy = msg_older.open_drone_id_system_healthy; + msg_newer.parachute_system_present = msg_older.parachute_system_present; + msg_newer.parachute_system_healthy = msg_older.parachute_system_healthy; + msg_newer.traffic_avoidance_system_present = msg_older.traffic_avoidance_system_present; + msg_newer.rc_calibration_in_progress = msg_older.rc_calibration_in_progress; + msg_newer.calibration_enabled = msg_older.calibration_enabled; + msg_newer.pre_flight_checks_pass = msg_older.pre_flight_checks_pass; + } + + static void toOlder(const MessageNewer &msg_newer, MessageOlder &msg_older) { + msg_older.timestamp = msg_newer.timestamp; + msg_older.armed_time = msg_newer.armed_time; + msg_older.takeoff_time = msg_newer.takeoff_time; + msg_older.arming_state = msg_newer.arming_state; + msg_older.latest_arming_reason = msg_newer.latest_arming_reason; + msg_older.latest_disarming_reason = msg_newer.latest_disarming_reason; + msg_older.nav_state_timestamp = msg_newer.nav_state_timestamp; + msg_older.nav_state_user_intention = msg_newer.nav_state_user_intention; + msg_older.nav_state = msg_newer.nav_state; + msg_older.executor_in_charge = msg_newer.executor_in_charge; + msg_older.nav_state_display = msg_newer.nav_state_display; + msg_older.valid_nav_states_mask = msg_newer.valid_nav_states_mask; + msg_older.can_set_nav_states_mask = msg_newer.can_set_nav_states_mask; + msg_older.hil_state = msg_newer.hil_state; + msg_older.vehicle_type = msg_newer.vehicle_type; + msg_older.failsafe = msg_newer.failsafe; + msg_older.failsafe_and_user_took_over = msg_newer.failsafe_and_user_took_over; + msg_older.failsafe_defer_state = msg_newer.failsafe_defer_state; + msg_older.gcs_connection_lost = msg_newer.gcs_connection_lost; + msg_older.gcs_connection_lost_counter = msg_newer.gcs_connection_lost_counter; + msg_older.high_latency_data_link_lost = msg_newer.high_latency_data_link_lost; + msg_older.is_vtol = msg_newer.is_vtol; + msg_older.is_vtol_tailsitter = msg_newer.is_vtol_tailsitter; + msg_older.in_transition_mode = msg_newer.in_transition_mode; + msg_older.in_transition_to_fw = msg_newer.in_transition_to_fw; + msg_older.system_type = msg_newer.system_type; + msg_older.system_id = msg_newer.system_id; + msg_older.component_id = msg_newer.component_id; + msg_older.safety_button_available = msg_newer.safety_button_available; + msg_older.safety_off = msg_newer.safety_off; + msg_older.power_input_valid = msg_newer.power_input_valid; + msg_older.usb_connected = msg_newer.usb_connected; + msg_older.open_drone_id_system_present = msg_newer.open_drone_id_system_present; + msg_older.open_drone_id_system_healthy = msg_newer.open_drone_id_system_healthy; + msg_older.parachute_system_present = msg_newer.parachute_system_present; + msg_older.parachute_system_healthy = msg_newer.parachute_system_healthy; + msg_older.traffic_avoidance_system_present = msg_newer.traffic_avoidance_system_present; + msg_older.rc_calibration_in_progress = msg_newer.rc_calibration_in_progress; + msg_older.calibration_enabled = msg_newer.calibration_enabled; + msg_older.pre_flight_checks_pass = msg_newer.pre_flight_checks_pass; + } +}; + +REGISTER_TOPIC_TRANSLATION_DIRECT(VehicleStatusV4Translation); diff --git a/msg/versioned/ActuatorMotors.msg b/msg/versioned/ActuatorMotors.msg index d165c5c1cb..09b3820ec6 100644 --- a/msg/versioned/ActuatorMotors.msg +++ b/msg/versioned/ActuatorMotors.msg @@ -5,12 +5,12 @@ uint32 MESSAGE_VERSION = 0 -uint64 timestamp # [us] Time since system start -uint64 timestamp_sample # [us] Sampling timestamp of the data this control response is based on +uint64 timestamp # [us] Time since system start +uint64 timestamp_sample # [us] Sampling timestamp of the data this control response is based on -uint16 reversible_flags # [-] Bitset indicating which motors are configured to be reversible +uint16 reversible_flags # [-] Bitset indicating which motors are configured to be reversible -uint8 ACTUATOR_FUNCTION_MOTOR1 = 101 # +uint8 ACTUATOR_FUNCTION_MOTOR1 = 101 # output_functions.yaml Motor.start -uint8 NUM_CONTROLS = 12 # -float32[12] control # [@range -1, 1] Normalized thrust. where 1 means maximum positive thrust, -1 maximum negative (if not supported by the output, <0 maps to NaN). NaN maps to disarmed (stop the motors) +uint8 NUM_CONTROLS = 12 # output_functions.yaml Motor.count +float32[12] control # [@range -1, 1] Normalized thrust. Where 1 means maximum positive thrust, -1 maximum negative (if not supported by the output, <0 maps to NaN). NaN maps to disarmed (stop the motors) diff --git a/msg/versioned/ActuatorServos.msg b/msg/versioned/ActuatorServos.msg index c547998d1c..0ff5cafd89 100644 --- a/msg/versioned/ActuatorServos.msg +++ b/msg/versioned/ActuatorServos.msg @@ -5,8 +5,8 @@ uint32 MESSAGE_VERSION = 0 -uint64 timestamp # [us] Time since system start -uint64 timestamp_sample # [us] Sampling timestamp of the data this control response is based on +uint64 timestamp # [us] Time since system start +uint64 timestamp_sample # [us] Sampling timestamp of the data this control response is based on -uint8 NUM_CONTROLS = 8 # -float32[8] control # [-] [@range -1, 1] Normalized output. 1 means maximum positive position. -1 maximum negative position (if not supported by the output, <0 maps to NaN). NaN maps to disarmed. +uint8 NUM_CONTROLS = 8 +float32[8] control # [-] [@range -1, 1] Normalized output. 1 means maximum positive position. -1 maximum negative position (if not supported by the output, <0 maps to NaN). NaN maps to disarmed. diff --git a/msg/versioned/AirspeedValidated.msg b/msg/versioned/AirspeedValidated.msg index c9d9eb2a61..d49b6f76cb 100644 --- a/msg/versioned/AirspeedValidated.msg +++ b/msg/versioned/AirspeedValidated.msg @@ -3,25 +3,24 @@ # Provides information about airspeed (indicated, true, calibrated) and the source of the data. # Used by controllers, estimators and for airspeed reporting to operator. - uint32 MESSAGE_VERSION = 1 -uint64 timestamp # [us] Time since system start +uint64 timestamp # [us] Time since system start -float32 indicated_airspeed_m_s # [m/s] [@invalid NaN] Indicated airspeed (IAS) -float32 calibrated_airspeed_m_s # [m/s] [@invalid NaN] Calibrated airspeed (CAS) -float32 true_airspeed_m_s # [m/s] [@invalid NaN] True airspeed (TAS) +float32 indicated_airspeed_m_s # [m/s] [@invalid NaN] Indicated airspeed (IAS) +float32 calibrated_airspeed_m_s # [m/s] [@invalid NaN] Calibrated airspeed (CAS) +float32 true_airspeed_m_s # [m/s] [@invalid NaN] True airspeed (TAS) -int8 airspeed_source # [@enum SOURCE] Source of currently published airspeed values -int8 SOURCE_DISABLED = -1 # Disabled -int8 SOURCE_GROUND_MINUS_WIND = 0 # Ground speed minus wind -int8 SOURCE_SENSOR_1 = 1 # Sensor 1 -int8 SOURCE_SENSOR_2 = 2 # Sensor 2 -int8 SOURCE_SENSOR_3 = 3 # Sensor 3 -int8 SOURCE_SYNTHETIC = 4 # Synthetic airspeed +int8 airspeed_source # [@enum SOURCE] Source of currently published airspeed values +int8 SOURCE_DISABLED = -1 # Disabled +int8 SOURCE_GROUND_MINUS_WIND = 0 # Ground speed minus wind +int8 SOURCE_SENSOR_1 = 1 # Sensor 1 +int8 SOURCE_SENSOR_2 = 2 # Sensor 2 +int8 SOURCE_SENSOR_3 = 3 # Sensor 3 +int8 SOURCE_SYNTHETIC = 4 # Synthetic airspeed -float32 calibrated_ground_minus_wind_m_s # [m/s] [@invalid NaN] CAS calculated from groundspeed - windspeed, where windspeed is estimated based on a zero-sideslip assumption -float32 calibraded_airspeed_synth_m_s # [m/s] [@invalid NaN] Synthetic airspeed -float32 airspeed_derivative_filtered # [m/s^2] Filtered indicated airspeed derivative -float32 throttle_filtered # [-] Filtered fixed-wing throttle -float32 pitch_filtered # [rad] Filtered pitch +float32 calibrated_ground_minus_wind_m_s # [m/s] [@invalid NaN] CAS calculated from groundspeed - windspeed, where windspeed is estimated based on a zero-sideslip assumption +float32 calibraded_airspeed_synth_m_s # [m/s] [@invalid NaN] Synthetic airspeed +float32 airspeed_derivative_filtered # [m/s^2] Filtered indicated airspeed derivative +float32 throttle_filtered # [-] Filtered fixed-wing throttle +float32 pitch_filtered # [rad] Filtered pitch diff --git a/msg/versioned/ArmingCheckReply.msg b/msg/versioned/ArmingCheckReply.msg index b39649641f..78cb015308 100644 --- a/msg/versioned/ArmingCheckReply.msg +++ b/msg/versioned/ArmingCheckReply.msg @@ -7,37 +7,37 @@ # Note that the external component is identified by its registration_id, which is allocated to the component during registration (arming_check_id in RegisterExtComponentReply). # The message is not used by internal/FMU components, as their mode requirements are known at compile time. -uint32 MESSAGE_VERSION = 1 +uint32 MESSAGE_VERSION = 1 uint64 timestamp # [us] Time since system start. -uint8 request_id # [-] Id of ArmingCheckRequest for which this is a response -uint8 registration_id # [-] Id of external component emitting this response +uint8 request_id # [-] Id of ArmingCheckRequest for which this is a response +uint8 registration_id # [-] Id of external component emitting this response -uint8 HEALTH_COMPONENT_INDEX_NONE = 0 # Index of health component for which this response applies +uint8 HEALTH_COMPONENT_INDEX_NONE = 0 # Index of health component for which this response applies -uint8 health_component_index # [@enum HEALTH_COMPONENT_INDEX] -bool health_component_is_present # Unused. Intended for use with health events interface (health_component_t in events.json) -bool health_component_warning # Unused. Intended for use with health events interface (health_component_t in events.json) -bool health_component_error # Unused. Intended for use with health events interface (health_component_t in events.json) +uint8 health_component_index # [@enum HEALTH_COMPONENT_INDEX] +bool health_component_is_present # Unused. Intended for use with health events interface (health_component_t in events.json) +bool health_component_warning # Unused. Intended for use with health events interface (health_component_t in events.json) +bool health_component_error # Unused. Intended for use with health events interface (health_component_t in events.json) -bool can_arm_and_run # True if the component can arm. For navigation mode components, true if the component can arm in the mode or switch to the mode when already armed +bool can_arm_and_run # True if the component can arm. For navigation mode components, true if the component can arm in the mode or switch to the mode when already armed -uint8 num_events # Number of queued failure messages (Event) in the events field +uint8 num_events # Number of queued failure messages (Event) in the events field -Event[5] events # Arming failure reasons (Queue of events to report to GCS) +Event[5] events # Arming failure reasons (Queue of events to report to GCS) # Mode requirements -bool mode_req_angular_velocity # Requires angular velocity estimate (e.g. from gyroscope) -bool mode_req_attitude # Requires an attitude estimate -bool mode_req_local_alt # Requires a local altitude estimate -bool mode_req_local_position # Requires a local position estimate -bool mode_req_local_position_relaxed # Requires a more relaxed global position estimate -bool mode_req_global_position # Requires a global position estimate -bool mode_req_global_position_relaxed # Requires a relaxed global position estimate -bool mode_req_mission # Requires an uploaded mission -bool mode_req_home_position # Requires a home position (such as RTL/Return mode) -bool mode_req_prevent_arming # Prevent arming (such as in Land mode) -bool mode_req_manual_control # Requires a manual controller +bool mode_req_angular_velocity # Requires angular velocity estimate (e.g. from gyroscope) +bool mode_req_attitude # Requires an attitude estimate +bool mode_req_local_alt # Requires a local altitude estimate +bool mode_req_local_position # Requires a local position estimate +bool mode_req_local_position_relaxed # Requires a more relaxed global position estimate +bool mode_req_global_position # Requires a global position estimate +bool mode_req_global_position_relaxed # Requires a relaxed global position estimate +bool mode_req_mission # Requires an uploaded mission +bool mode_req_home_position # Requires a home position (such as RTL/Return mode) +bool mode_req_prevent_arming # Prevent arming (such as in Land mode) +bool mode_req_manual_control # Requires a manual controller -uint8 ORB_QUEUE_LENGTH = 4 +uint8 ORB_QUEUE_LENGTH = 4 diff --git a/msg/versioned/ArmingCheckRequest.msg b/msg/versioned/ArmingCheckRequest.msg index df12a79d35..79a30af500 100644 --- a/msg/versioned/ArmingCheckRequest.msg +++ b/msg/versioned/ArmingCheckRequest.msg @@ -9,8 +9,8 @@ uint32 MESSAGE_VERSION = 1 -uint64 timestamp # [us] Time since system start +uint64 timestamp # [us] Time since system start -uint8 request_id # [-] Id of this request. Allows correlation with associated ArmingCheckReply messages. +uint8 request_id # [-] Id of this request. Allows correlation with associated ArmingCheckReply messages. uint32 valid_registrations_mask # [-] Bitmask of valid registration ID's (the bit is also cleared if flagged as unresponsive) diff --git a/msg/versioned/BatteryStatus.msg b/msg/versioned/BatteryStatus.msg index 567f6633fc..5eefb41c52 100644 --- a/msg/versioned/BatteryStatus.msg +++ b/msg/versioned/BatteryStatus.msg @@ -7,73 +7,72 @@ uint32 MESSAGE_VERSION = 1 uint8 MAX_INSTANCES = 3 -uint64 timestamp # [us] Time since system start +uint64 timestamp # [us] Time since system start -bool connected # Whether or not a battery is connected. For power modules this is based on a voltage threshold. -float32 voltage_v # [V] [@invalid 0] Battery voltage -float32 current_a # [A] [@invalid -1] Battery current -float32 current_average_a # [A] [@invalid -1] Battery current average (for FW average in level flight) -float32 discharged_mah # [mAh] [@invalid -1] Discharged amount -float32 remaining # [@range 0,1] [@invalid -1] Remaining capacity -float32 scale # [-] [@range 1,] [@invalid -1] Scaling factor to compensate for lower actuation power caused by voltage sag -float32 time_remaining_s # [s] [@invalid NaN] Predicted time remaining until battery is empty under previous averaged load -float32 temperature # [°C] [@invalid NaN] Temperature of the battery -uint8 cell_count # [-] [@invalid 0] Number of cells +bool connected # Whether or not a battery is connected. For power modules this is based on a voltage threshold. +float32 voltage_v # [V] [@invalid 0] Battery voltage +float32 current_a # [A] [@invalid -1] Battery current +float32 current_average_a # [A] [@invalid -1] Battery current average (for FW average in level flight) +float32 discharged_mah # [mAh] [@invalid -1] Discharged amount +float32 remaining # [@range 0,1] [@invalid -1] Remaining capacity +float32 scale # [-] [@range 1,] [@invalid -1] Scaling factor to compensate for lower actuation power caused by voltage sag +float32 time_remaining_s # [s] [@invalid NaN] Predicted time remaining until battery is empty under previous averaged load +float32 temperature # [degC] [@invalid NaN] Temperature of the battery +uint8 cell_count # [-] [@invalid 0] Number of cells +uint8 source # [@enum SOURCE] Battery source +uint8 SOURCE_POWER_MODULE = 0 # Power module (analog ADC or I2C power monitor) +uint8 SOURCE_EXTERNAL = 1 # External (MAVLink, CAN, or external driver) +uint8 SOURCE_ESCS = 2 # ESCs (via ESC telemetry) -uint8 source # [@enum SOURCE] Battery source -uint8 SOURCE_POWER_MODULE = 0 # Power module (analog ADC or I2C power monitor) -uint8 SOURCE_EXTERNAL = 1 # External (MAVLink, CAN, or external driver) -uint8 SOURCE_ESCS = 2 # ESCs (via ESC telemetry) +uint8 priority # [-] Zero based priority is the connection on the Power Controller V1..Vn AKA BrickN-1 +uint16 capacity # [mAh] Capacity of the battery when fully charged +uint16 cycle_count # [-] Number of discharge cycles the battery has experienced +uint16 average_time_to_empty # [minutes] Predicted remaining battery capacity based on the average rate of discharge +uint16 manufacture_date # [-] Manufacture date, part of serial number of the battery pack. Formatted as: Day + Month×32 + (Year–1980)×512 +uint16 state_of_health # [%] [@range 0, 100] State of health. FullChargeCapacity/DesignCapacity +uint16 max_error # [%] [@range 1, 100] Max error, expected margin of error in the state-of-charge calculation +uint8 id # [-] ID number of a battery. Should be unique and consistent for the lifetime of a vehicle. 1-indexed +uint16 interface_error # [-] Interface error counter -uint8 priority # [-] Zero based priority is the connection on the Power Controller V1..Vn AKA BrickN-1 -uint16 capacity # [mAh] Capacity of the battery when fully charged -uint16 cycle_count # [-] Number of discharge cycles the battery has experienced -uint16 average_time_to_empty # [minutes] Predicted remaining battery capacity based on the average rate of discharge -uint16 manufacture_date # [-] Manufacture date, part of serial number of the battery pack. Formatted as: Day + Month×32 + (Year–1980)×512 -uint16 state_of_health # [%] [@range 0, 100] State of health. FullChargeCapacity/DesignCapacity -uint16 max_error # [%] [@range 1, 100] Max error, expected margin of error in the state-of-charge calculation -uint8 id # [-] ID number of a battery. Should be unique and consistent for the lifetime of a vehicle. 1-indexed -uint16 interface_error # [-] Interface error counter +float32[14] voltage_cell_v # [V] [@invalid 0] Battery individual cell voltages +float32 max_cell_voltage_delta # [V] Max difference between individual cell voltages -float32[14] voltage_cell_v # [V] [@invalid 0] Battery individual cell voltages -float32 max_cell_voltage_delta # [V] Max difference between individual cell voltages +bool is_powering_off # Power off event imminent indication, false if unknown +bool is_required # Set if the battery is explicitly required before arming -bool is_powering_off # Power off event imminent indication, false if unknown -bool is_required # Set if the battery is explicitly required before arming +uint8 warning # [@enum WARNING STATE] Current battery warning +uint8 WARNING_NONE = 0 # No battery low voltage warning active +uint8 WARNING_LOW = 1 # Low voltage warning +uint8 WARNING_CRITICAL = 2 # Critical voltage, return / abort immediately +uint8 WARNING_EMERGENCY = 3 # Immediate landing required +uint8 WARNING_FAILED = 4 # Battery has failed completely +uint8 STATE_UNHEALTHY = 6 # Battery is diagnosed to be defective or an error occurred, usage is discouraged / prohibited. Possible causes (faults) are listed in faults field +uint8 STATE_CHARGING = 7 # Battery is charging -uint8 warning # [@enum WARNING STATE] Current battery warning -uint8 WARNING_NONE = 0 # No battery low voltage warning active -uint8 WARNING_LOW = 1 # Low voltage warning -uint8 WARNING_CRITICAL = 2 # Critical voltage, return / abort immediately -uint8 WARNING_EMERGENCY = 3 # Immediate landing required -uint8 WARNING_FAILED = 4 # Battery has failed completely -uint8 STATE_UNHEALTHY = 6 # Battery is diagnosed to be defective or an error occurred, usage is discouraged / prohibited. Possible causes (faults) are listed in faults field -uint8 STATE_CHARGING = 7 # Battery is charging +uint16 faults # [@enum FAULT] Smart battery supply status/fault flags (bitmask) for health indication +uint8 FAULT_DEEP_DISCHARGE = 0 # Battery has deep discharged +uint8 FAULT_SPIKES = 1 # Voltage spikes +uint8 FAULT_CELL_FAIL= 2 # One or more cells have failed +uint8 FAULT_OVER_CURRENT = 3 # Over-current +uint8 FAULT_OVER_TEMPERATURE = 4 # Over-temperature +uint8 FAULT_UNDER_TEMPERATURE = 5 # Under-temperature fault +uint8 FAULT_INCOMPATIBLE_VOLTAGE = 6 # Vehicle voltage is not compatible with this battery (batteries on same power rail should have similar voltage) +uint8 FAULT_INCOMPATIBLE_FIRMWARE = 7 # Battery firmware is not compatible with current autopilot firmware +uint8 FAULT_INCOMPATIBLE_MODEL = 8 # Battery model is not supported by the system +uint8 FAULT_HARDWARE_FAILURE = 9 # Hardware problem +uint8 FAULT_FAILED_TO_ARM = 10 # Battery had a problem while arming +uint8 FAULT_COUNT = 11 # Counter. Keep this as last element -uint16 faults # [@enum FAULT] Smart battery supply status/fault flags (bitmask) for health indication -uint8 FAULT_DEEP_DISCHARGE = 0 # Battery has deep discharged -uint8 FAULT_SPIKES = 1 # Voltage spikes -uint8 FAULT_CELL_FAIL= 2 # One or more cells have failed -uint8 FAULT_OVER_CURRENT = 3 # Over-current -uint8 FAULT_OVER_TEMPERATURE = 4 # Over-temperature -uint8 FAULT_UNDER_TEMPERATURE = 5 # Under-temperature fault -uint8 FAULT_INCOMPATIBLE_VOLTAGE = 6 # Vehicle voltage is not compatible with this battery (batteries on same power rail should have similar voltage) -uint8 FAULT_INCOMPATIBLE_FIRMWARE = 7 # Battery firmware is not compatible with current autopilot firmware -uint8 FAULT_INCOMPATIBLE_MODEL = 8 # Battery model is not supported by the system -uint8 FAULT_HARDWARE_FAILURE = 9 # Hardware problem -uint8 FAULT_FAILED_TO_ARM = 10 # Battery had a problem while arming -uint8 FAULT_COUNT = 11 # Counter. Keep this as last element +float32 full_charge_capacity_wh # [Wh] Compensated battery capacity +float32 remaining_capacity_wh # [Wh] [@invalid NaN] Compensated battery capacity remaining +uint16 over_discharge_count # [-] Number of battery overdischarge +float32 nominal_voltage # [V] [@invalid NaN] Nominal voltage of the battery pack -float32 full_charge_capacity_wh # [Wh] Compensated battery capacity -float32 remaining_capacity_wh # [Wh] Compensated battery capacity remaining -uint16 over_discharge_count # [-] Number of battery overdischarge -float32 nominal_voltage # [V] Nominal voltage of the battery pack - -float32 internal_resistance_estimate # [Ohm] Internal resistance per cell estimate -float32 ocv_estimate # [V] Open circuit voltage estimate -float32 ocv_estimate_filtered # [V] Filtered open circuit voltage estimate -float32 volt_based_soc_estimate # [-] [@range 0, 1] Normalized volt based state of charge estimate -float32 voltage_prediction # [V] Predicted voltage -float32 prediction_error # [V] Prediction error -float32 estimation_covariance_norm # [-] Norm of the covariance matrix +float32 internal_resistance_estimate # [Ohm] Internal resistance per cell estimate +float32 ocv_estimate # [V] Open circuit voltage estimate +float32 ocv_estimate_filtered # [V] Filtered open circuit voltage estimate +float32 volt_based_soc_estimate # [-] [@range 0, 1] Normalized volt based state of charge estimate +float32 voltage_prediction # [V] Predicted voltage +float32 prediction_error # [V] Prediction error +float32 estimation_covariance_norm # [-] Norm of the covariance matrix diff --git a/msg/versioned/FixedWingLateralSetpoint.msg b/msg/versioned/FixedWingLateralSetpoint.msg index ac7410878e..21b6465376 100644 --- a/msg/versioned/FixedWingLateralSetpoint.msg +++ b/msg/versioned/FixedWingLateralSetpoint.msg @@ -1,11 +1,12 @@ # Fixed Wing Lateral Setpoint message +# # Used by the fw_lateral_longitudinal_control module # At least one of course, airspeed_direction, or lateral_acceleration must be finite. uint32 MESSAGE_VERSION = 0 -uint64 timestamp # time since system start (microseconds) +uint64 timestamp # [us] Time since system start -float32 course # [rad] [@range -pi, pi] Desired direction of travel over ground w.r.t (true) North. NAN if not controlled directly. -float32 airspeed_direction # [rad] [@range -pi, pi] Desired horizontal angle of airspeed vector w.r.t. (true) North. Same as vehicle heading if in the absence of sideslip. NAN if not controlled directly, takes precedence over course if finite. -float32 lateral_acceleration # [m/s^2] [FRD] Lateral acceleration setpoint. NAN if not controlled directly, used as feedforward if either course setpoint or airspeed_direction is finite. +float32 course # [rad] [@range -pi, pi] Desired direction of travel over ground w.r.t (true) North. NAN if not controlled directly. +float32 airspeed_direction # [rad] [@range -pi, pi] Desired horizontal angle of airspeed vector w.r.t. (true) North. Same as vehicle heading if in the absence of sideslip. NAN if not controlled directly, takes precedence over course if finite. +float32 lateral_acceleration # [m/s^2] [@frame FRD] Lateral acceleration setpoint. NAN if not controlled directly, used as feedforward if either course setpoint or airspeed_direction is finite. diff --git a/msg/versioned/FixedWingLongitudinalSetpoint.msg b/msg/versioned/FixedWingLongitudinalSetpoint.msg index 06896df8b6..ff4b27e84e 100644 --- a/msg/versioned/FixedWingLongitudinalSetpoint.msg +++ b/msg/versioned/FixedWingLongitudinalSetpoint.msg @@ -1,14 +1,15 @@ # Fixed Wing Longitudinal Setpoint message +# # Used by the fw_lateral_longitudinal_control module # If pitch_direct and throttle_direct are not both finite, then the controller relies on altitude/height_rate and equivalent_airspeed to control vertical motion. # If both altitude and height_rate are NAN, the controller maintains the current altitude. uint32 MESSAGE_VERSION = 0 -uint64 timestamp # time since system start (microseconds) +uint64 timestamp # [us] Time since system start -float32 altitude # [m] Altitude setpoint AMSL, not controlled directly if NAN or if height_rate is finite -float32 height_rate # [m/s] [ENU] Scalar height rate setpoint. NAN if not controlled directly -float32 equivalent_airspeed # [m/s] [@range 0, inf] Scalar equivalent airspeed setpoint. NAN if system default should be used -float32 pitch_direct # [rad] [@range -pi, pi] [FRD] NAN if not controlled, overrides total energy controller -float32 throttle_direct # [norm] [@range 0,1] NAN if not controlled, overrides total energy controller +float32 altitude # [m] Altitude setpoint AMSL, not controlled directly if NAN or if height_rate is finite +float32 height_rate # [m/s] [@frame ENU] Scalar height rate setpoint. NAN if not controlled directly +float32 equivalent_airspeed # [m/s] [@range 0, inf] Scalar equivalent airspeed setpoint. NAN if system default should be used +float32 pitch_direct # [rad] [@range -pi, pi] [@frame FRD] NAN if not controlled, overrides total energy controller +float32 throttle_direct # [norm] [@range 0,1] NAN if not controlled, overrides total energy controller diff --git a/msg/versioned/GotoSetpoint.msg b/msg/versioned/GotoSetpoint.msg index 4871a3cb7d..b794fccf56 100644 --- a/msg/versioned/GotoSetpoint.msg +++ b/msg/versioned/GotoSetpoint.msg @@ -1,26 +1,27 @@ # Position and (optional) heading setpoints with corresponding speed constraints -# Setpoints are intended as inputs to position and heading smoothers, respectively -# Setpoints do not need to be kinematically consistent -# Optional heading setpoints may be specified as controlled by the respective flag -# Unset optional setpoints are not controlled -# Unset optional constraints default to vehicle specifications +# +# Setpoints are intended as inputs to position and heading smoothers, respectively. +# Setpoints do not need to be kinematically consistent. +# Optional heading setpoints may be specified as controlled by the respective flag. +# Unset optional setpoints are not controlled. +# Unset optional constraints default to vehicle specifications. uint32 MESSAGE_VERSION = 0 -uint64 timestamp # time since system start (microseconds) +uint64 timestamp # [us] Time since system start # setpoints -float32[3] position # [m] NED local world frame +float32[3] position # [m] [@frame NED] NED local world frame bool flag_control_heading # true if heading is to be controlled float32 heading # (optional) [rad] [-pi,pi] from North # constraints bool flag_set_max_horizontal_speed # true if setting a non-default horizontal speed limit -float32 max_horizontal_speed # (optional) [m/s] maximum speed (absolute) in the NE-plane +float32 max_horizontal_speed # [m/s] (optional) Maximum speed (absolute) in the NE-plane bool flag_set_max_vertical_speed # true if setting a non-default vertical speed limit -float32 max_vertical_speed # (optional) [m/s] maximum speed (absolute) in the D-axis +float32 max_vertical_speed # [m/s] (optional) Maximum speed (absolute) in the D-axis bool flag_set_max_heading_rate # true if setting a non-default heading rate limit -float32 max_heading_rate # (optional) [rad/s] maximum heading rate (absolute) +float32 max_heading_rate # [rad/s] (optional) Maximum heading rate (absolute) diff --git a/msg/versioned/LateralControlConfiguration.msg b/msg/versioned/LateralControlConfiguration.msg index 783bd38465..f509df31eb 100644 --- a/msg/versioned/LateralControlConfiguration.msg +++ b/msg/versioned/LateralControlConfiguration.msg @@ -1,8 +1,9 @@ # Fixed Wing Lateral Control Configuration message +# # Used by the fw_lateral_longitudinal_control module to constrain FixedWingLateralSetpoint messages. uint32 MESSAGE_VERSION = 0 -uint64 timestamp # time since system start (microseconds) +uint64 timestamp # [us] Time since system start -float32 lateral_accel_max # [m/s^2] currently maps to a maximum roll angle, accel_max = tan(roll_max) * GRAVITY +float32 lateral_accel_max # [m/s^2] Currently maps to a maximum roll angle, accel_max = tan(roll_max) * GRAVITY diff --git a/msg/versioned/LongitudinalControlConfiguration.msg b/msg/versioned/LongitudinalControlConfiguration.msg index ac9c56df44..ef37072930 100644 --- a/msg/versioned/LongitudinalControlConfiguration.msg +++ b/msg/versioned/LongitudinalControlConfiguration.msg @@ -1,17 +1,18 @@ # Fixed Wing Longitudinal Control Configuration message +# # Used by the fw_lateral_longitudinal_control module and TECS to constrain FixedWingLongitudinalSetpoint messages # and configure the resultant setpoints. uint32 MESSAGE_VERSION = 0 -uint64 timestamp # time since system start (microseconds) +uint64 timestamp # [us] Time since system start -float32 pitch_min # [rad][@range -pi, pi] defaults to FW_P_LIM_MIN if NAN. -float32 pitch_max # [rad][@range -pi, pi] defaults to FW_P_LIM_MAX if NAN. -float32 throttle_min # [norm] [@range 0,1] deaults to FW_THR_MIN if NAN. -float32 throttle_max # [norm] [@range 0,1] defaults to FW_THR_MAX if NAN. -float32 climb_rate_target # [m/s] target climbrate to change altitude. Defaults to FW_T_CLIMB_MAX if NAN. Not used if height_rate is directly set in FixedWingLongitudinalSetpoint. -float32 sink_rate_target # [m/s] target sinkrate to change altitude. Defaults to FW_T_SINK_MAX if NAN. Not used if height_rate is directly set in FixedWingLongitudinalSetpoint. -float32 speed_weight # [@range 0,2], 0=pitch controls altitude only, 2=pitch controls airspeed only -bool enforce_low_height_condition # [boolean] if true, the altitude controller is configured with an alternative timeconstant for tighter altitude tracking -bool disable_underspeed_protection # [boolean] if true, underspeed handling is disabled in the altitude controller +float32 pitch_min # [rad] [@range -pi, pi] Defaults to FW_P_LIM_MIN if NAN. +float32 pitch_max # [rad] [@range -pi, pi] Defaults to FW_P_LIM_MAX if NAN. +float32 throttle_min # [norm] [@range 0,1] Defaults to FW_THR_MIN if NAN. +float32 throttle_max # [norm] [@range 0,1] Defaults to FW_THR_MAX if NAN. +float32 climb_rate_target # [m/s] Target climbrate to change altitude. Defaults to FW_T_CLIMB_MAX if NAN. Not used if height_rate is directly set in FixedWingLongitudinalSetpoint. +float32 sink_rate_target # [m/s] Target sinkrate to change altitude. Defaults to FW_T_SINK_MAX if NAN. Not used if height_rate is directly set in FixedWingLongitudinalSetpoint. +float32 speed_weight # [-] [@range 0,2] 0=pitch controls altitude only, 2=pitch controls airspeed only +bool enforce_low_height_condition # If true, the altitude controller is configured with an alternative timeconstant for tighter altitude tracking +bool disable_underspeed_protection # If true, underspeed handling is disabled in the altitude controller diff --git a/msg/versioned/RegisterExtComponentRequest.msg b/msg/versioned/RegisterExtComponentRequest.msg index 3b76aef15e..1ed4295f71 100644 --- a/msg/versioned/RegisterExtComponentRequest.msg +++ b/msg/versioned/RegisterExtComponentRequest.msg @@ -1,6 +1,6 @@ # Request to register an external component -uint32 MESSAGE_VERSION = 1 +uint32 MESSAGE_VERSION = 2 uint64 timestamp # time since system start (microseconds) @@ -20,5 +20,6 @@ bool enable_replace_internal_mode # set to true if an internal mode should be r uint8 replace_internal_mode # vehicle_status::NAVIGATION_STATE_* bool activate_mode_immediately # switch to the registered mode (can only be set in combination with an executor) bool not_user_selectable # mode cannot be selected by the user +bool request_offboard_setpoints # set to true if the registered mode wants to receive offboard trajectory setpoints via MAVLink uint8 ORB_QUEUE_LENGTH = 2 diff --git a/msg/versioned/VehicleCommand.msg b/msg/versioned/VehicleCommand.msg index 9503477ce4..be86cd22df 100644 --- a/msg/versioned/VehicleCommand.msg +++ b/msg/versioned/VehicleCommand.msg @@ -80,6 +80,7 @@ uint16 VEHICLE_CMD_GIMBAL_DEVICE_INFORMATION = 283 # Command to ask information uint16 VEHICLE_CMD_MISSION_START = 300 # Start running a mission. |first_item: the first mission item to run|last_item: the last mission item to run (after this item is run, the mission ends)| uint16 VEHICLE_CMD_ACTUATOR_TEST = 310 # Actuator testing command. |[@range -1,1] value|[s] timeout|Unused|Unused|output function| uint16 VEHICLE_CMD_CONFIGURE_ACTUATOR = 311 # Actuator configuration command. |configuration|Unused|Unused|Unused|output function| +uint16 VEHICLE_CMD_ESC_REQUEST_EEPROM = 312 # Request EEPROM data from an ESC. |ESC Index|Firmware Type|Unused|Unused|Unused| uint16 VEHICLE_CMD_COMPONENT_ARM_DISARM = 400 # Arms / Disarms a component. |1 to arm, 0 to disarm. uint16 VEHICLE_CMD_RUN_PREARM_CHECKS = 401 # Instructs a target system to run pre-arm checks. uint16 VEHICLE_CMD_INJECT_FAILURE = 420 # Inject artificial failure for testing purposes. @@ -109,6 +110,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). @@ -129,6 +141,13 @@ uint8 VEHICLE_ROI_LOCATION = 3 # Point toward fixed location. uint8 VEHICLE_ROI_TARGET = 4 # Point toward target. uint8 VEHICLE_ROI_ENUM_END = 5 +uint8 ACTUATOR_CONFIGURATION_NONE = 0 # Do nothing. +uint8 ACTUATOR_CONFIGURATION_BEEP = 1 # Command the actuator to beep now. +uint8 ACTUATOR_CONFIGURATION_3D_MODE_ON = 2 # Permanently set the actuator (ESC) to 3D mode (reversible thrust). +uint8 ACTUATOR_CONFIGURATION_3D_MODE_OFF = 3 # Permanently set the actuator (ESC) to non 3D mode (non-reversible thrust). +uint8 ACTUATOR_CONFIGURATION_SPIN_DIRECTION1 = 4 # Permanently set the actuator (ESC) to spin direction 1 (which can be clockwise or counter-clockwise). +uint8 ACTUATOR_CONFIGURATION_SPIN_DIRECTION2 = 5 # Permanently set the actuator (ESC) to spin direction 2 (opposite of direction 1). + uint8 PARACHUTE_ACTION_DISABLE = 0 uint8 PARACHUTE_ACTION_ENABLE = 1 uint8 PARACHUTE_ACTION_RELEASE = 2 diff --git a/msg/versioned/VehicleCommandAck.msg b/msg/versioned/VehicleCommandAck.msg index c3f679bfbc..1546577582 100644 --- a/msg/versioned/VehicleCommandAck.msg +++ b/msg/versioned/VehicleCommandAck.msg @@ -1,20 +1,32 @@ -# Vehicle Command Ackonwledgement uORB message. +# Vehicle Command Acknowledgement uORB message. +# # Used for acknowledging the vehicle command being received. # Follows the MAVLink COMMAND_ACK message definition -uint32 MESSAGE_VERSION = 0 +uint32 MESSAGE_VERSION = 1 -uint64 timestamp # time since system start (microseconds) +uint64 timestamp # [us] time since system start -# Result cases. This follows the MAVLink MAV_RESULT enum definition -uint8 VEHICLE_CMD_RESULT_ACCEPTED = 0 # Command ACCEPTED and EXECUTED | -uint8 VEHICLE_CMD_RESULT_TEMPORARILY_REJECTED = 1 # Command TEMPORARY REJECTED/DENIED | -uint8 VEHICLE_CMD_RESULT_DENIED = 2 # Command PERMANENTLY DENIED | -uint8 VEHICLE_CMD_RESULT_UNSUPPORTED = 3 # Command UNKNOWN/UNSUPPORTED | -uint8 VEHICLE_CMD_RESULT_FAILED = 4 # Command executed, but failed | -uint8 VEHICLE_CMD_RESULT_IN_PROGRESS = 5 # Command being executed | -uint8 VEHICLE_CMD_RESULT_CANCELLED = 6 # Command Canceled +uint8 ORB_QUEUE_LENGTH = 8 +uint32 command # [-] Command that is being acknowledged + +uint8 result # [@enum VEHICLE_CMD_RESULT] Command result +# VEHICLE_CMD_RESULT Result cases. Follows the MAVLink MAV_RESULT enum definition +uint8 VEHICLE_CMD_RESULT_ACCEPTED = 0 # Command ACCEPTED and EXECUTED +uint8 VEHICLE_CMD_RESULT_TEMPORARILY_REJECTED = 1 # Command TEMPORARY REJECTED/DENIED +uint8 VEHICLE_CMD_RESULT_DENIED = 2 # Command PERMANENTLY DENIED +uint8 VEHICLE_CMD_RESULT_UNSUPPORTED = 3 # Command UNKNOWN/UNSUPPORTED +uint8 VEHICLE_CMD_RESULT_FAILED = 4 # Command executed, but failed +uint8 VEHICLE_CMD_RESULT_IN_PROGRESS = 5 # Command being executed +uint8 VEHICLE_CMD_RESULT_CANCELLED = 6 # Command Canceled +uint8 VEHICLE_CMD_RESULT_COMMAND_LONG_ONLY = 7 # Command is only accepted when sent as a COMMAND_LONG +uint8 VEHICLE_CMD_RESULT_COMMAND_INT_ONLY = 8 # Command is only accepted when sent as a COMMAND_INT +uint8 VEHICLE_CMD_RESULT_UNSUPPORTED_MAV_FRAME = 9 # Command does not support specified frame + +uint8 result_param1 # [-] Can be set with the reason why the command was denied, or the progress percentage when result is MAV_RESULT_IN_PROGRESS (%) + +int32 result_param2 # [enum ARM_AUTH_DENIED_REASON] Additional parameter of the result, example: which parameter of MAV_CMD_NAV_WAYPOINT caused it to be denied, or what ARM_AUTH_DENIED_REASON # Arming denied specific cases uint16 ARM_AUTH_DENIED_REASON_GENERIC = 0 uint16 ARM_AUTH_DENIED_REASON_NONE = 1 @@ -23,13 +35,7 @@ uint16 ARM_AUTH_DENIED_REASON_TIMEOUT = 3 uint16 ARM_AUTH_DENIED_REASON_AIRSPACE_IN_USE = 4 uint16 ARM_AUTH_DENIED_REASON_BAD_WEATHER = 5 -uint8 ORB_QUEUE_LENGTH = 8 +uint8 target_system # [-] Target system +uint16 target_component # Target component / mode executor -uint32 command # Command that is being acknowledged -uint8 result # Command result -uint8 result_param1 # Also used as progress[%], it can be set with the reason why the command was denied, or the progress percentage when result is MAV_RESULT_IN_PROGRESS -int32 result_param2 # Additional parameter of the result, example: which parameter of MAV_CMD_NAV_WAYPOINT caused it to be denied. -uint8 target_system -uint16 target_component # Target component / mode executor - -bool from_external # Indicates if the command came from an external source +bool from_external # Indicates if the command came from an external source diff --git a/msg/versioned/VehicleStatus.msg b/msg/versioned/VehicleStatus.msg index 3420ada11c..28cbe379e9 100644 --- a/msg/versioned/VehicleStatus.msg +++ b/msg/versioned/VehicleStatus.msg @@ -1,6 +1,6 @@ # Encodes the system state of the vehicle published by commander -uint32 MESSAGE_VERSION = 2 +uint32 MESSAGE_VERSION = 4 uint64 timestamp # time since system start (microseconds) @@ -65,21 +65,11 @@ uint8 NAVIGATION_STATE_MAX = 31 uint8 executor_in_charge # Current mode executor in charge (0=Autopilot) uint8 nav_state_display # User-visible nav state sent via MAVLink (executor state if active, otherwise nav_state) +bool accepts_offboard_setpoints # True if the current mode accepts offboard trajectory setpoints via MAVLink + uint32 valid_nav_states_mask # Bitmask for all valid nav_state values uint32 can_set_nav_states_mask # Bitmask for all modes that a user can select -# Bitmask of detected failures -uint16 failure_detector_status -uint16 FAILURE_NONE = 0 -uint16 FAILURE_ROLL = 1 # (1 << 0) -uint16 FAILURE_PITCH = 2 # (1 << 1) -uint16 FAILURE_ALT = 4 # (1 << 2) -uint16 FAILURE_EXT = 8 # (1 << 3) -uint16 FAILURE_ARM_ESC = 16 # (1 << 4) -uint16 FAILURE_BATTERY = 32 # (1 << 5) -uint16 FAILURE_IMBALANCED_PROP = 64 # (1 << 6) -uint16 FAILURE_MOTOR = 128 # (1 << 7) - uint8 hil_state uint8 HIL_STATE_OFF = 0 uint8 HIL_STATE_ON = 1 diff --git a/platforms/common/include/px4_platform_common/px4_mtd.h b/platforms/common/include/px4_platform_common/px4_mtd.h index 71d9e577ff..fa792e78c4 100644 --- a/platforms/common/include/px4_platform_common/px4_mtd.h +++ b/platforms/common/include/px4_platform_common/px4_mtd.h @@ -80,6 +80,11 @@ __EXPORT ssize_t px4_mtd_get_partition_size(const mtd_instance_s *instance, cons int px4_at24c_initialize(FAR struct i2c_master_s *dev, uint8_t address, FAR struct mtd_dev_s **mtd_dev); +/* + Update the page count of an already-initialised device. + */ +int px4_at24c_set_npages(FAR struct mtd_dev_s *dev, uint16_t npages); + void px4_at24c_deinitialize(void); int flexspi_attach(mtd_instance_s *instance); diff --git a/platforms/common/include/px4_platform_common/px4_work_queue/ScheduledWorkItem.hpp b/platforms/common/include/px4_platform_common/px4_work_queue/ScheduledWorkItem.hpp index 20f5ebf29b..c4c84debe2 100644 --- a/platforms/common/include/px4_platform_common/px4_work_queue/ScheduledWorkItem.hpp +++ b/platforms/common/include/px4_platform_common/px4_work_queue/ScheduledWorkItem.hpp @@ -46,6 +46,8 @@ public: bool Scheduled() { return !hrt_called(&_call); } + virtual ~ScheduledWorkItem(); + /** * Schedule next run with a delay in microseconds. * @@ -76,7 +78,6 @@ public: protected: ScheduledWorkItem(const char *name, const wq_config_t &config) : WorkItem(name, config) {} - virtual ~ScheduledWorkItem() override; virtual void print_run_status() override; diff --git a/platforms/common/include/px4_platform_common/px4_work_queue/WorkItem.hpp b/platforms/common/include/px4_platform_common/px4_work_queue/WorkItem.hpp index 5c1f82061d..a2eddbef58 100644 --- a/platforms/common/include/px4_platform_common/px4_work_queue/WorkItem.hpp +++ b/platforms/common/include/px4_platform_common/px4_work_queue/WorkItem.hpp @@ -83,13 +83,14 @@ public: const char *ItemName() const { return _item_name; } + virtual ~WorkItem(); + protected: explicit WorkItem(const char *name, const wq_config_t &config); explicit WorkItem(const char *name, const WorkItem &work_item); - virtual ~WorkItem(); /** * Remove work item from the runnable queue, if it's there diff --git a/platforms/common/pab_manifest.c b/platforms/common/pab_manifest.c index c6560d6803..dd203af075 100644 --- a/platforms/common/pab_manifest.c +++ b/platforms/common/pab_manifest.c @@ -465,7 +465,8 @@ static px4_hw_mft_list_entry_t mft_lists[] = { {HW_BASE_ID(16), base_configuration_0, arraySize(base_configuration_0)}, // Auterion Skynode ver 16 {HW_BASE_ID(17), base_configuration_17, arraySize(base_configuration_17)}, // Auterion Skynode ver 17 {HW_BASE_ID(18), base_configuration_18, arraySize(base_configuration_18)}, // Auterion Skynode S ver 18 - {HW_BASE_ID(19), base_configuration_19, arraySize(base_configuration_19)}, // Auterion Skynode N + {HW_BASE_ID(19), base_configuration_19, arraySize(base_configuration_19)}, // Auterion Skynode N rev 0 + {HW_BASE_ID(20), base_configuration_19, arraySize(base_configuration_19)}, // Auterion Skynode N rev 1 {HW_BASE_ID(0x100), base_configuration_0, arraySize(base_configuration_0)}, // Holybro Pixhawk Jetson Baseboard ver 0x100 Alaised to ID 0 {HW_BASE_ID(0x150), base_configuration_0, arraySize(base_configuration_0)}, // ZeroOne Pixhawk Baseboard ver 0x150 {HW_BASE_ID(0x200), base_configuration_0, arraySize(base_configuration_0)}, // AmovLab Pixhawk Baseboard ver 0x150 diff --git a/platforms/common/px4_work_queue/Kconfig b/platforms/common/px4_work_queue/Kconfig index 63b68f0269..bb320e9519 100644 --- a/platforms/common/px4_work_queue/Kconfig +++ b/platforms/common/px4_work_queue/Kconfig @@ -193,7 +193,7 @@ config WQ_HP_DEFAULT_PRIORITY config WQ_UAVCAN_STACKSIZE int "Stack size for uavcan" - default 3624 + default 3754 range 1000 10000 help Sets the stack size for the uavcan work queue. diff --git a/platforms/common/shutdown.cpp b/platforms/common/shutdown.cpp index d1be7ff5a1..3d110aba98 100644 --- a/platforms/common/shutdown.cpp +++ b/platforms/common/shutdown.cpp @@ -57,9 +57,10 @@ #ifdef __PX4_NUTTX #include -#include #endif +#include + using namespace time_literals; static pthread_mutex_t shutdown_mutex = diff --git a/platforms/common/uORB/Subscription.hpp b/platforms/common/uORB/Subscription.hpp index 723427d840..e899762751 100644 --- a/platforms/common/uORB/Subscription.hpp +++ b/platforms/common/uORB/Subscription.hpp @@ -92,6 +92,11 @@ public: // copy assignment Subscription &operator=(const Subscription &other) { + // Check for self-assignment + if (this == &other) { + return *this; + } + unsubscribe(); _orb_id = other._orb_id; _instance = other._instance; diff --git a/platforms/common/uORB/uORBManager.hpp b/platforms/common/uORB/uORBManager.hpp index d5202b9236..9b4ed5f089 100644 --- a/platforms/common/uORB/uORBManager.hpp +++ b/platforms/common/uORB/uORBManager.hpp @@ -448,6 +448,8 @@ public: static uint8_t orb_get_instance(const void *node_handle); + virtual ~Manager(); + #if defined(CONFIG_BUILD_FLAT) /* These are optimized by inlining in NuttX Flat build */ static unsigned updates_available(const void *node_handle, unsigned last_generation) { return is_advertised(node_handle) ? static_cast(node_handle)->updates_available(last_generation) : 0; } @@ -504,7 +506,6 @@ private: // data members private: //class methods Manager(); - virtual ~Manager(); #ifdef CONFIG_ORB_COMMUNICATOR /** diff --git a/platforms/common/uORB/uORB_tests/uORBTest_UnitTest.cpp b/platforms/common/uORB/uORB_tests/uORBTest_UnitTest.cpp index 035d2f9ac5..1ad23b581d 100644 --- a/platforms/common/uORB/uORB_tests/uORBTest_UnitTest.cpp +++ b/platforms/common/uORB/uORB_tests/uORBTest_UnitTest.cpp @@ -645,7 +645,7 @@ int uORBTest::UnitTest::test_wrap_around() } #define CHECK_COPY(i_got, i_correct) \ orb_copy(ORB_ID(orb_test_medium_wrap_around), sfd, &u); \ - if (i_got != i_correct) { \ + if ((i_got) != (i_correct)) { \ return test_fail("got wrong element from the queue (got %i, should be %i)", i_got, i_correct); \ } @@ -875,7 +875,7 @@ int uORBTest::UnitTest::test_queue() } #define CHECK_COPY(i_got, i_correct) \ orb_copy(ORB_ID(orb_test_medium_queue), sfd, &u); \ - if (i_got != i_correct) { \ + if ((i_got) != (i_correct)) { \ return test_fail("got wrong element from the queue (got %i, should be %i)", i_got, i_correct); \ } @@ -941,10 +941,10 @@ int uORBTest::UnitTest::pub_test_queue_entry(int argc, char *argv[]) int uORBTest::UnitTest::pub_test_queue_main() { orb_test_medium_s t{}; - orb_advert_t ptopic{nullptr}; + orb_advert_t ptopic = orb_advertise(ORB_ID(orb_test_medium_queue_poll), &t); const int queue_size = orb_get_queue_size(ORB_ID(orb_test_medium_queue_poll)); - if ((ptopic = orb_advertise(ORB_ID(orb_test_medium_queue_poll), &t)) == nullptr) { + if (ptopic == nullptr) { _thread_should_exit = true; return test_fail("advertise failed: %d", errno); } @@ -981,9 +981,9 @@ int uORBTest::UnitTest::test_queue_poll_notify() test_note("Testing orb queuing (poll & notify)"); orb_test_medium_s t{}; - int sfd = -1; + int sfd = orb_subscribe(ORB_ID(orb_test_medium_queue_poll)); - if ((sfd = orb_subscribe(ORB_ID(orb_test_medium_queue_poll))) < 0) { + if (sfd < 0) { return test_fail("subscribe failed: %d", errno); } diff --git a/platforms/common/work_queue/hrt_queue.c b/platforms/common/work_queue/hrt_queue.c index 9393a9e7c2..d602e5ea1b 100644 --- a/platforms/common/work_queue/hrt_queue.c +++ b/platforms/common/work_queue/hrt_queue.c @@ -48,7 +48,6 @@ #include #include #include -#include #include #include "hrt_work.h" diff --git a/platforms/nuttx/NuttX/nuttx b/platforms/nuttx/NuttX/nuttx index f34ff89edf..2d9c0387dd 160000 --- a/platforms/nuttx/NuttX/nuttx +++ b/platforms/nuttx/NuttX/nuttx @@ -1 +1 @@ -Subproject commit f34ff89edf9764fdd177f3faa616d85ebf2778f2 +Subproject commit 2d9c0387dd6c629f2a6ed425f9cb63e19fba9c1f diff --git a/platforms/nuttx/init/imxrt/rc.board_arch_defaults b/platforms/nuttx/init/imxrt/rc.board_arch_defaults index d1dd00ad9a..2877b5a5fd 100644 --- a/platforms/nuttx/init/imxrt/rc.board_arch_defaults +++ b/platforms/nuttx/init/imxrt/rc.board_arch_defaults @@ -3,6 +3,14 @@ # imxrt specific defaults #------------------------------------------------------------------------------ +# Multi-EKF +param set-default -s EKF2_MULTI_IMU 3 +param set-default SENS_IMU_MODE 0 + +param set-default -s IMU_GYRO_FFT_EN 1 + param set-default -s MC_AT_EN 1 -set LOGGER_BUF 32 +param set-default -s UAVCAN_ENABLE 2 + +set LOGGER_BUF 64 diff --git a/platforms/nuttx/src/bootloader/common/bl.c b/platforms/nuttx/src/bootloader/common/bl.c index 7690fe062a..a36db7756e 100644 --- a/platforms/nuttx/src/bootloader/common/bl.c +++ b/platforms/nuttx/src/bootloader/common/bl.c @@ -104,7 +104,7 @@ #define PROTO_GET_OTP 0x2a // read a byte from OTP at the given address #define PROTO_GET_SN 0x2b // read a word from UDID area ( Serial) at the given address #define PROTO_GET_CHIP 0x2c // read chip version (MCU IDCODE) -#define PROTO_SET_DELAY 0x2d // set minimum boot delay +#define PROTO_SET_DELAY 0x2d // set boot delay (deprecated; always NACKed) #define PROTO_GET_CHIP_DES 0x2e // read chip version In ASCII #define PROTO_GET_VERSION 0x2f // read version #define PROTO_BOOT 0x30 // boot the application @@ -1021,49 +1021,19 @@ bootloader(unsigned timeout) } break; -#ifdef BOOT_DELAY_ADDRESS - - case PROTO_SET_DELAY: { - /* - Allow for the bootloader to setup a - boot delay signature which tells the - board to delay for at least a - specified number of seconds on boot. - */ - int v = cin_wait(100); - - if (v < 0) { - goto cmd_bad; - } - - uint8_t boot_delay = v & 0xFF; - - if (boot_delay > BOOT_DELAY_MAX) { - goto cmd_bad; - } - - // expect EOC - if (!wait_for_eoc(2)) { - goto cmd_bad; - } - - uint32_t sig1 = flash_func_read_word(BOOT_DELAY_ADDRESS); - uint32_t sig2 = flash_func_read_word(BOOT_DELAY_ADDRESS + 4); - - if (sig1 != BOOT_DELAY_SIGNATURE1 || - sig2 != BOOT_DELAY_SIGNATURE2) { - goto cmd_bad; - } - - uint32_t value = (BOOT_DELAY_SIGNATURE1 & 0xFFFFFF00) | boot_delay; - flash_func_write_word(BOOT_DELAY_ADDRESS, value); - - if (flash_func_read_word(BOOT_DELAY_ADDRESS) != value) { - goto cmd_fail; - } - } - break; -#endif + case PROTO_SET_DELAY: + /* + * Boot delay used to let the bootloader pause before + * starting the app by writing a signature next to the + * vector table. It never worked correctly on modern + * FMUs (signature was placed past where the bootloader + * looked, H7 flash granularity prevented single-word + * writes, and the flash cache never flushed the write), + * so it has been removed. NACK so a client that still + * sends it gets a clear rejection instead of silent + * fake success. + */ + goto cmd_bad; // finalise programming and boot the system // diff --git a/platforms/nuttx/src/bootloader/common/bl.h b/platforms/nuttx/src/bootloader/common/bl.h index 080bc47e0f..7fc4386f3b 100644 --- a/platforms/nuttx/src/bootloader/common/bl.h +++ b/platforms/nuttx/src/bootloader/common/bl.h @@ -89,12 +89,6 @@ extern int buf_get(void); #define LED_ACTIVITY 1 #define LED_BOOTLOADER 2 -#ifdef BOOT_DELAY_ADDRESS -# define BOOT_DELAY_SIGNATURE1 0x92c2ecff -# define BOOT_DELAY_SIGNATURE2 0xc5057d5d -# define BOOT_DELAY_MAX 30 -#endif - #define MAX_DES_LENGTH 20 #define MAX_VERSION_LENGTH 32 diff --git a/platforms/nuttx/src/bootloader/common/image_toc.c b/platforms/nuttx/src/bootloader/common/image_toc.c index 3d8494f6da..ffb3c1d057 100644 --- a/platforms/nuttx/src/bootloader/common/image_toc.c +++ b/platforms/nuttx/src/bootloader/common/image_toc.c @@ -41,6 +41,13 @@ #include "image_toc.h" #include "bl.h" +#include "crypto.h" + +#ifdef BOOTLOADER_USE_TOC + +#ifndef BOARD_IMAGE_TOC_OFFSET +# error "BOARD_IMAGE_TOC_OFFSET must be defined when BOOTLOADER_USE_TOC is enabled" +#endif /* Helper macros to define flash start and end addresses, based on info from * hw_config.h @@ -50,7 +57,7 @@ bool find_toc(const image_toc_entry_t **toc_entries, uint8_t *len) { - const uintptr_t toc_start_u32 = APP_LOAD_ADDRESS + BOOT_DELAY_ADDRESS + 8; + const uintptr_t toc_start_u32 = APP_LOAD_ADDRESS + BOARD_IMAGE_TOC_OFFSET; const image_toc_start_t *toc_start = (const image_toc_start_t *)toc_start_u32; const image_toc_entry_t *entry = (const image_toc_entry_t *)(toc_start_u32 + sizeof(image_toc_start_t)); @@ -105,3 +112,14 @@ bool find_toc(const image_toc_entry_t **toc_entries, uint8_t *len) *len = 0; return false; } + +#else // BOOTLOADER_USE_TOC + +bool find_toc(const image_toc_entry_t **toc_entries, uint8_t *len) +{ + (void)toc_entries; + (void)len; + return false; +} + +#endif // BOOTLOADER_USE_TOC diff --git a/platforms/nuttx/src/bootloader/nxp/imxrt_common/main.c b/platforms/nuttx/src/bootloader/nxp/imxrt_common/main.c index a137c8477b..98e6aa92aa 100644 --- a/platforms/nuttx/src/bootloader/nxp/imxrt_common/main.c +++ b/platforms/nuttx/src/bootloader/nxp/imxrt_common/main.c @@ -744,33 +744,6 @@ bootloader_main(void) board_set_rtc_signature(0); } -#ifdef BOOT_DELAY_ADDRESS - { - /* - if a boot delay signature is present then delay the boot - by at least that amount of time in seconds. This allows - for an opportunity for a companion computer to load a - new firmware, while still booting fast by sending a BOOT - command - */ - uint32_t sig1 = flash_func_read_word(BOOT_DELAY_ADDRESS); - uint32_t sig2 = flash_func_read_word(BOOT_DELAY_ADDRESS + 4); - - if (sig2 == BOOT_DELAY_SIGNATURE2 && - (sig1 & 0xFFFFFF00) == (BOOT_DELAY_SIGNATURE1 & 0xFFFFFF00)) { - unsigned boot_delay = sig1 & 0xFF; - - if (boot_delay <= BOOT_DELAY_MAX) { - try_boot = false; - - if (timeout < boot_delay * 1000) { - timeout = boot_delay * 1000; - } - } - } - } -#endif - /* * Check if the force-bootloader pins are strapped; if strapped, * don't try booting. diff --git a/platforms/nuttx/src/bootloader/stm/stm32_common/main.c b/platforms/nuttx/src/bootloader/stm/stm32_common/main.c index 9b3bab5022..4713660703 100644 --- a/platforms/nuttx/src/bootloader/stm/stm32_common/main.c +++ b/platforms/nuttx/src/bootloader/stm/stm32_common/main.c @@ -687,33 +687,6 @@ bootloader_main(void) board_set_rtc_signature(0); } -#ifdef BOOT_DELAY_ADDRESS - { - /* - if a boot delay signature is present then delay the boot - by at least that amount of time in seconds. This allows - for an opportunity for a companion computer to load a - new firmware, while still booting fast by sending a BOOT - command - */ - uint32_t sig1 = flash_func_read_word(BOOT_DELAY_ADDRESS); - uint32_t sig2 = flash_func_read_word(BOOT_DELAY_ADDRESS + 4); - - if (sig2 == BOOT_DELAY_SIGNATURE2 && - (sig1 & 0xFFFFFF00) == (BOOT_DELAY_SIGNATURE1 & 0xFFFFFF00)) { - unsigned boot_delay = sig1 & 0xFF; - - if (boot_delay <= BOOT_DELAY_MAX) { - try_boot = false; - - if (timeout < boot_delay * 1000) { - timeout = boot_delay * 1000; - } - } - } - } -#endif - /* * Check if the force-bootloader pins are strapped; if strapped, * don't try booting. diff --git a/platforms/nuttx/src/px4/common/px4_24xxxx_mtd.c b/platforms/nuttx/src/px4/common/px4_24xxxx_mtd.c index 65e5794a96..8d4e725ae0 100644 --- a/platforms/nuttx/src/px4/common/px4_24xxxx_mtd.c +++ b/platforms/nuttx/src/px4/common/px4_24xxxx_mtd.c @@ -618,6 +618,13 @@ int px4_at24c_initialize(FAR struct i2c_master_s *dev, return 0; } +int px4_at24c_set_npages(FAR struct mtd_dev_s *dev, uint16_t npages) +{ + FAR struct at24c_dev_s *priv = (FAR struct at24c_dev_s *)dev; + priv->npages = npages; + return 0; +} + /* * XXX: debug hackery */ diff --git a/platforms/nuttx/src/px4/common/px4_mtd.cpp b/platforms/nuttx/src/px4/common/px4_mtd.cpp index 6723c35eca..5e66af2450 100644 --- a/platforms/nuttx/src/px4/common/px4_mtd.cpp +++ b/platforms/nuttx/src/px4/common/px4_mtd.cpp @@ -300,6 +300,7 @@ int px4_mtd_config(const px4_mtd_manifest_t *mft_mtd) for (uint8_t i = num_instances, num_entry = 0u; i < total_new_instances; ++i, ++num_entry) { + rv = -ENOMEM; instances[i] = new mtd_instance_s; if (instances[i] == nullptr) { @@ -315,7 +316,6 @@ memoryout: instances[i]->mtd_dev = nullptr; instances[i]->n_partitions_current = 0; - rv = -ENOMEM; instances[i]->part_dev = new FAR struct mtd_dev_s *[nparts]; if (instances[i]->part_dev == nullptr) { @@ -358,8 +358,12 @@ memoryout: #endif } else if (mtd_list->entries[num_entry]->device->bus_type == px4_mft_device_t::ONCHIP) { - instances[i]->n_partitions_current++; - return 0; + /* ONCHIP type is registered externally. + * Populate the query table for all partitions and skip the MTD attach / geometry + * steps. */ + instances[i]->n_partitions_current = nparts; + rv = 0; + continue; } if (rv != 0) { diff --git a/platforms/nuttx/src/px4/nxp/imxrt/dshot/dshot.c b/platforms/nuttx/src/px4/nxp/imxrt/dshot/dshot.c index 7bd2508ddf..ff9d7dcc98 100644 --- a/platforms/nuttx/src/px4/nxp/imxrt/dshot/dshot.c +++ b/platforms/nuttx/src/px4/nxp/imxrt/dshot/dshot.c @@ -63,8 +63,6 @@ static const uint32_t gcr_decode[32] = { 0x0, 0x0, 0x8, 0x1, 0x0, 0x4, 0xC, 0x0 }; -uint32_t erpms[DSHOT_TIMERS]; - typedef enum { DSHOT_START = 0, DSHOT_12BIT_FIFO, @@ -321,8 +319,10 @@ static int flexio_irq_handler(int irq, void *context, void *arg) } -int up_dshot_init(uint32_t channel_mask, unsigned dshot_pwm_freq, bool enable_bidirectional_dshot) +int up_dshot_init(uint32_t channel_mask, uint32_t bdshot_channel_mask, unsigned dshot_pwm_freq, bool edt_enable) { + (void)edt_enable; // Not implemented + /* Calculate dshot timings based on dshot_pwm_freq */ dshot_tcmp = 0x2F00 | (((BOARD_FLEXIO_PREQ / (dshot_pwm_freq * 3) / 2) - 1) & 0xFF); dshot_speed = dshot_pwm_freq; @@ -360,7 +360,7 @@ int up_dshot_init(uint32_t channel_mask, unsigned dshot_pwm_freq, bool enable_bi imxrt_config_gpio(timer_io_channels[channel].dshot.pinmux | IOMUX_PULL_UP); - if (enable_bidirectional_dshot) { + if (bdshot_channel_mask & (1 << channel)) { dshot_inst[channel].bdshot = true; dshot_inst[channel].bdshot_training_mask = 0; dshot_inst[channel].bdshot_tcmp_offset = BDSHOT_TCMP_MIN_OFFSET; @@ -383,7 +383,7 @@ int up_dshot_init(uint32_t channel_mask, unsigned dshot_pwm_freq, bool enable_bi flexio_modifyreg32(IMXRT_FLEXIO_CTRL_OFFSET, 0, FLEXIO_CTRL_FLEXEN_MASK); - return channel_mask; + return dshot_mask; } void up_bdshot_training(uint32_t channel, uint32_t value) @@ -497,24 +497,26 @@ void up_bdshot_erpm(void) } -int up_bdshot_num_erpm_ready(void) +uint16_t up_bdshot_get_ready_mask(void) { - int num_ready = 0; - - for (unsigned i = 0; i < DSHOT_TIMERS; ++i) { - // We only check that data has been received, rather than if it's valid. - // This ensures data is published even if one channel has bit errors. - if (bdshot_parsed_recv_mask & (1 << i)) { - ++num_ready; - } - } - - return num_ready; + return (uint16_t)bdshot_parsed_recv_mask; } +int up_bdshot_num_errors(uint8_t channel) +{ + if (channel >= DSHOT_TIMERS) { + return 0; + } + + return dshot_inst[channel].crc_error_cnt + dshot_inst[channel].frame_error_cnt + dshot_inst[channel].no_response_cnt; +} int up_bdshot_get_erpm(uint8_t channel, int *erpm) { + if (channel >= DSHOT_TIMERS) { + return -1; + } + if (bdshot_parsed_recv_mask & (1 << channel)) { *erpm = (int)dshot_inst[channel].erpm; return 0; @@ -523,13 +525,28 @@ int up_bdshot_get_erpm(uint8_t channel, int *erpm) return -1; } -int up_bdshot_channel_status(uint8_t channel) +int up_bdshot_get_extended_telemetry(uint8_t channel, int type, uint8_t *value) +{ + // NOT IMPLEMENTED + return -1; +} + +int up_bdshot_channel_capture_supported(uint8_t channel) +{ + if (channel >= DSHOT_TIMERS) { + return 0; + } + + return dshot_inst[channel].init && dshot_inst[channel].bdshot; +} + +int up_bdshot_channel_online(uint8_t channel) { if (channel < DSHOT_TIMERS) { return ((dshot_inst[channel].no_response_cnt - dshot_inst[channel].last_no_response_cnt) < BDSHOT_OFFLINE_COUNT); } - return -1; + return 0; } void up_bdshot_status(void) @@ -538,7 +555,7 @@ void up_bdshot_status(void) for (uint8_t channel = 0; (channel < DSHOT_TIMERS); channel++) { if (dshot_inst[channel].init) { - PX4_INFO("Channel %i %s Last erpm %i value", channel, up_bdshot_channel_status(channel) ? "online" : "offline", + PX4_INFO("Channel %i %s Last erpm %i value", channel, up_bdshot_channel_online(channel) ? "online" : "offline", dshot_inst[channel].erpm); PX4_INFO("BDSHOT Training done: %s TCMP offset: %d", dshot_inst[channel].bdshot_training_done ? "YES" : "NO", dshot_inst[channel].bdshot_tcmp_offset); @@ -601,7 +618,7 @@ uint64_t dshot_expand_data(uint16_t packet) * bit 12 - dshot telemetry enable/disable * bits 13-16 - XOR checksum **/ -void dshot_motor_data_set(unsigned channel, uint16_t throttle, bool telemetry) +void dshot_motor_data_set(uint8_t channel, uint16_t throttle, bool telemetry) { if (channel < DSHOT_TIMERS && dshot_inst[channel].init) { uint16_t csum_data; diff --git a/platforms/nuttx/src/px4/nxp/imxrt/io_pins/input_capture.c b/platforms/nuttx/src/px4/nxp/imxrt/io_pins/input_capture.c index 7e0e0b669e..532c23af43 100644 --- a/platforms/nuttx/src/px4/nxp/imxrt/io_pins/input_capture.c +++ b/platforms/nuttx/src/px4/nxp/imxrt/io_pins/input_capture.c @@ -93,7 +93,7 @@ static void input_capture_chan_handler(void *context, const io_timers_t *timer, channel_stats[chan_index].edges++; channel_stats[chan_index].last_time = isrs_time - (isrs_rcnt - capture); - uint32_t overflow = 0;//_REG32(timer, KINETIS_FTM_CSC_OFFSET(chan->timer_channel - 1)) & FTM_CSC_CHF; + uint32_t overflow = 0;//_REG32(timer, KINETIS_FTM_CSC_OFFSET(chan->timer_channel)) & FTM_CSC_CHF; if (overflow) { diff --git a/platforms/nuttx/src/px4/nxp/imxrt/led_pwm/led_pwm.cpp b/platforms/nuttx/src/px4/nxp/imxrt/led_pwm/led_pwm.cpp index 883d13908e..e46f91b48c 100644 --- a/platforms/nuttx/src/px4/nxp/imxrt/led_pwm/led_pwm.cpp +++ b/platforms/nuttx/src/px4/nxp/imxrt/led_pwm/led_pwm.cpp @@ -238,7 +238,7 @@ led_pwm_channel_init(unsigned channel) { /* Only initialize used channels */ - if (led_pwm_channels[channel].timer_channel) { + if (led_pwm_channels[channel].gpio_out) { unsigned timer = led_pwm_channels[channel].timer_index; irqstate_t flags = px4_enter_critical_section(); @@ -249,7 +249,7 @@ led_pwm_channel_init(unsigned channel) /* configure the channel */ - uint32_t chan = led_pwm_channels[channel].timer_channel - 1; + uint32_t chan = led_pwm_channels[channel].timer_channel; uint16_t rvalue = REG(timer, KINETIS_FTM_CSC_OFFSET(chan)); rvalue &= ~CnSC_RESET; @@ -284,7 +284,7 @@ led_pwm_servo_set(unsigned channel, uint8_t cvalue) value--; } - REG(timer, KINETIS_FTM_CV_OFFSET(led_pwm_channels[channel].timer_channel - 1)) = value; + REG(timer, KINETIS_FTM_CV_OFFSET(led_pwm_channels[channel].timer_channel)) = value; return 0; } @@ -300,11 +300,11 @@ unsigned led_pwm_servo_get(unsigned channel) /* test timer for validity */ if ((led_pwm_timers[timer].base == 0) || - (led_pwm_channels[channel].timer_channel == 0)) { + (led_pwm_channels[channel].gpio_out == 0)) { return value; } - value = REG(timer, KINETIS_FTM_CV_OFFSET(led_pwm_channels[channel].timer_channel - 1)); + value = REG(timer, KINETIS_FTM_CV_OFFSET(led_pwm_channels[channel].timer_channel)); unsigned period = led_pwm_timer_get_period(timer); return ((value + 1) * 255 / period); } diff --git a/platforms/nuttx/src/px4/nxp/kinetis/include/px4_arch/io_timer_hw_description.h b/platforms/nuttx/src/px4/nxp/kinetis/include/px4_arch/io_timer_hw_description.h index afea4a7b64..70b790c72b 100644 --- a/platforms/nuttx/src/px4/nxp/kinetis/include/px4_arch/io_timer_hw_description.h +++ b/platforms/nuttx/src/px4/nxp/kinetis/include/px4_arch/io_timer_hw_description.h @@ -93,7 +93,7 @@ static inline constexpr timer_io_channels_t initIOTimerChannel(const io_timers_t ret.gpio_in = gpio_af | gpio_pin_port; ret.gpio_out = gpio_af | gpio_pin_port; - ret.timer_channel = (int)timer.channel + 1; + ret.timer_channel = (uint8_t)timer.channel; // find timer index ret.timer_index = 0xff; diff --git a/platforms/nuttx/src/px4/nxp/kinetis/io_pins/input_capture.c b/platforms/nuttx/src/px4/nxp/kinetis/io_pins/input_capture.c index cf7e1ab528..9f8a1c7231 100644 --- a/platforms/nuttx/src/px4/nxp/kinetis/io_pins/input_capture.c +++ b/platforms/nuttx/src/px4/nxp/kinetis/io_pins/input_capture.c @@ -110,7 +110,7 @@ static void input_capture_chan_handler(void *context, const io_timers_t *timer, channel_stats[chan_index].edges++; channel_stats[chan_index].last_time = isrs_time - (isrs_rcnt - capture); - uint32_t overflow = _REG32(timer, KINETIS_FTM_CSC_OFFSET(chan->timer_channel - 1)) & FTM_CSC_CHF; + uint32_t overflow = _REG32(timer, KINETIS_FTM_CSC_OFFSET(chan->timer_channel)) & FTM_CSC_CHF; if (overflow) { @@ -157,7 +157,7 @@ int up_input_capture_set(unsigned channel, input_capture_edge edge, capture_filt /* This register selects the filter value for the inputs of channels. Channels 4, 5, 6 and 7 do not have an input filter. */ - if (filter && timer_io_channels[channel].timer_channel - 1 > 3) { + if (filter && timer_io_channels[channel].timer_channel > 3) { return -EINVAL; } @@ -200,7 +200,7 @@ int up_input_capture_get_filter(unsigned channel, capture_filter_t *filter) rv = -EINVAL; - if (timer_io_channels[channel].timer_channel - 1 <= 3) { + if (timer_io_channels[channel].timer_channel <= 3) { rv = -ENXIO; /* Any pins in capture mode */ @@ -213,22 +213,22 @@ int up_input_capture_get_filter(unsigned channel, capture_filter_t *filter) switch (timer_io_channels[channel].timer_channel) { - case 1: + case 0: rvalue = rFILTER(timer) & FTM_FILTER_CH0FVAL_MASK; *filter = (rvalue >> FTM_FILTER_CH0FVAL_SHIFT); break; - case 2: + case 1: rvalue = rFILTER(timer) & FTM_FILTER_CH1FVAL_MASK; *filter = (rvalue >> FTM_FILTER_CH1FVAL_SHIFT); break; - case 3: + case 2: rvalue = rFILTER(timer) & FTM_FILTER_CH2FVAL_MASK; *filter = (rvalue >> FTM_FILTER_CH2FVAL_SHIFT); break; - case 4: + case 3: rvalue = rFILTER(timer) & FTM_FILTER_CH3FVAL_MASK; *filter = (rvalue >> FTM_FILTER_CH3FVAL_SHIFT); break; @@ -266,27 +266,27 @@ int up_input_capture_set_filter(unsigned channel, capture_filter_t filter) switch (timer_io_channels[channel].timer_channel) { - case 1: + case 0: rvalue = rFILTER(timer) & ~FTM_FILTER_CH0FVAL_MASK; rvalue |= (filter << FTM_FILTER_CH0FVAL_SHIFT); rFILTER(timer) = rvalue; break; - case 2: + case 1: rvalue = rFILTER(timer) & ~FTM_FILTER_CH1FVAL_MASK; rvalue |= (filter << FTM_FILTER_CH1FVAL_SHIFT); rFILTER(timer) = rvalue; break; - case 3: + case 2: rvalue = rFILTER(timer) & ~FTM_FILTER_CH2FVAL_MASK; rvalue |= (filter << FTM_FILTER_CH2FVAL_SHIFT); rFILTER(timer) = rvalue; break; - case 4: - rvalue = rFILTER(timer) & ~FTM_FILTER_CH2FVAL_MASK; - rvalue |= (filter << FTM_FILTER_CH2FVAL_SHIFT); + case 3: + rvalue = rFILTER(timer) & ~FTM_FILTER_CH3FVAL_MASK; + rvalue |= (filter << FTM_FILTER_CH3FVAL_SHIFT); rFILTER(timer) = rvalue; break; @@ -316,7 +316,7 @@ int up_input_capture_get_trigger(unsigned channel, input_capture_edge *edge) rv = OK; uint32_t timer = timer_io_channels[channel].timer_index; - uint16_t rvalue = _REG32(timer, KINETIS_FTM_CSC_OFFSET(timer_io_channels[channel].timer_channel - 1)); + uint16_t rvalue = _REG32(timer, KINETIS_FTM_CSC_OFFSET(timer_io_channels[channel].timer_channel)); rvalue &= (FTM_CSC_MSB | FTM_CSC_MSA); switch (rvalue) { @@ -377,10 +377,10 @@ int up_input_capture_set_trigger(unsigned channel, input_capture_edge edge) uint32_t timer = timer_io_channels[channel].timer_index; irqstate_t flags = px4_enter_critical_section(); - uint32_t rvalue = _REG32(timer, KINETIS_FTM_CSC_OFFSET(timer_io_channels[channel].timer_channel - 1)); + uint32_t rvalue = _REG32(timer, KINETIS_FTM_CSC_OFFSET(timer_io_channels[channel].timer_channel)); rvalue &= (FTM_CSC_MSB | FTM_CSC_MSA); rvalue |= edge_bits; - _REG32(timer, KINETIS_FTM_CSC_OFFSET(timer_io_channels[channel].timer_channel - 1)) = rvalue; + _REG32(timer, KINETIS_FTM_CSC_OFFSET(timer_io_channels[channel].timer_channel)) = rvalue; px4_leave_critical_section(flags); rv = OK; } diff --git a/platforms/nuttx/src/px4/nxp/kinetis/io_pins/io_timer.c b/platforms/nuttx/src/px4/nxp/kinetis/io_pins/io_timer.c index ca42f00464..3dfaa03ac2 100644 --- a/platforms/nuttx/src/px4/nxp/kinetis/io_pins/io_timer.c +++ b/platforms/nuttx/src/px4/nxp/kinetis/io_pins/io_timer.c @@ -343,7 +343,7 @@ int io_timer_validate_channel_index(unsigned channel) { int rv = -EINVAL; - if (channel < MAX_TIMER_IO_CHANNELS && timer_io_channels[channel].timer_channel != 0) { + if (channel < MAX_TIMER_IO_CHANNELS) { unsigned timer = timer_io_channels[channel].timer_index; @@ -740,7 +740,7 @@ int io_timer_channel_init(unsigned channel, io_timer_channel_mode_t mode, /* configure the channel */ - uint32_t chan = timer_io_channels[channel].timer_channel - 1; + uint32_t chan = timer_io_channels[channel].timer_channel; uint16_t rvalue = REG(timer, KINETIS_FTM_CSC_OFFSET(chan)); rvalue &= ~clearbits; @@ -820,7 +820,7 @@ int io_timer_set_enable(bool state, io_timer_channel_mode_t mode, io_timer_chann masks &= ~(1 << chan_index); if (io_timer_validate_channel_index(chan_index) == 0) { - uint32_t chan = timer_io_channels[chan_index].timer_channel - 1; + uint32_t chan = timer_io_channels[chan_index].timer_channel; uint32_t timer = channels_timer(chan_index); action_cache[timer].base = io_timers[timer].base; action_cache[timer].cnsc[action_cache[timer].index].cnsc_offset = io_timers[timer].base + KINETIS_FTM_CSC_OFFSET(chan); @@ -905,7 +905,7 @@ int io_timer_set_ccr(unsigned channel, uint16_t value) irqstate_t flags = px4_enter_critical_section(); uint32_t save = rSC(timer); rSC(timer) = save & ~(FTM_SC_CLKS_MASK); - REG(timer, KINETIS_FTM_CV_OFFSET(timer_io_channels[channel].timer_channel - 1)) = value; + REG(timer, KINETIS_FTM_CV_OFFSET(timer_io_channels[channel].timer_channel)) = value; rSC(timer) = save; px4_leave_critical_section(flags); } @@ -924,7 +924,7 @@ uint16_t io_channel_get_ccr(unsigned channel) if ((mode == IOTimerChanMode_PWMOut) || (mode == IOTimerChanMode_OneShot) || (mode == IOTimerChanMode_Trigger)) { - value = REG(channels_timer(channel), KINETIS_FTM_CV_OFFSET(timer_io_channels[channel].timer_channel - 1)); + value = REG(channels_timer(channel), KINETIS_FTM_CV_OFFSET(timer_io_channels[channel].timer_channel)); } } diff --git a/platforms/nuttx/src/px4/nxp/kinetis/led_pwm/led_pwm.cpp b/platforms/nuttx/src/px4/nxp/kinetis/led_pwm/led_pwm.cpp index 797f5ca948..22538c9a92 100644 --- a/platforms/nuttx/src/px4/nxp/kinetis/led_pwm/led_pwm.cpp +++ b/platforms/nuttx/src/px4/nxp/kinetis/led_pwm/led_pwm.cpp @@ -228,7 +228,7 @@ led_pwm_channel_init(unsigned channel) { /* Only initialize used channels */ - if (led_pwm_channels[channel].timer_channel) { + if (led_pwm_channels[channel].gpio_out) { unsigned timer = led_pwm_channels[channel].timer_index; irqstate_t flags = px4_enter_critical_section(); @@ -239,7 +239,7 @@ led_pwm_channel_init(unsigned channel) /* configure the channel */ - uint32_t chan = led_pwm_channels[channel].timer_channel - 1; + uint32_t chan = led_pwm_channels[channel].timer_channel; uint16_t rvalue = REG(timer, KINETIS_FTM_CSC_OFFSET(chan)); rvalue &= ~CnSC_RESET; @@ -274,7 +274,7 @@ led_pwm_servo_set(unsigned channel, uint8_t cvalue) value--; } - REG(timer, KINETIS_FTM_CV_OFFSET(led_pwm_channels[channel].timer_channel - 1)) = value; + REG(timer, KINETIS_FTM_CV_OFFSET(led_pwm_channels[channel].timer_channel)) = value; return 0; } @@ -290,11 +290,11 @@ unsigned led_pwm_servo_get(unsigned channel) /* test timer for validity */ if ((led_pwm_timers[timer].base == 0) || - (led_pwm_channels[channel].timer_channel == 0)) { + (led_pwm_channels[channel].gpio_out == 0)) { return value; } - value = REG(timer, KINETIS_FTM_CV_OFFSET(led_pwm_channels[channel].timer_channel - 1)); + value = REG(timer, KINETIS_FTM_CV_OFFSET(led_pwm_channels[channel].timer_channel)); unsigned period = led_pwm_timer_get_period(timer); return ((value + 1) * 255 / period); } diff --git a/platforms/nuttx/src/px4/nxp/s32k1xx/include/px4_arch/io_timer_hw_description.h b/platforms/nuttx/src/px4/nxp/s32k1xx/include/px4_arch/io_timer_hw_description.h index dd57ab285e..dc01692287 100644 --- a/platforms/nuttx/src/px4/nxp/s32k1xx/include/px4_arch/io_timer_hw_description.h +++ b/platforms/nuttx/src/px4/nxp/s32k1xx/include/px4_arch/io_timer_hw_description.h @@ -151,7 +151,7 @@ static inline constexpr timer_io_channels_t initIOTimerChannel(const io_timers_t ret.gpio_in = gpio_af | gpio_pin_port; ret.gpio_out = gpio_af | gpio_pin_port; - ret.timer_channel = (int)timer.channel + 1; + ret.timer_channel = (uint8_t)timer.channel; // find timer index ret.timer_index = 0xff; diff --git a/platforms/nuttx/src/px4/nxp/s32k1xx/io_pins/input_capture.c b/platforms/nuttx/src/px4/nxp/s32k1xx/io_pins/input_capture.c index 5abfc14657..77d150a296 100644 --- a/platforms/nuttx/src/px4/nxp/s32k1xx/io_pins/input_capture.c +++ b/platforms/nuttx/src/px4/nxp/s32k1xx/io_pins/input_capture.c @@ -110,7 +110,7 @@ static void input_capture_chan_handler(void *context, const io_timers_t *timer, channel_stats[chan_index].edges++; channel_stats[chan_index].last_time = isrs_time - (isrs_rcnt - capture); - uint32_t overflow = _REG32(timer, S32K1XX_FTM_CNSC_OFFSET(chan->timer_channel - 1)) & FTM_CNSC_CHF; + uint32_t overflow = _REG32(timer, S32K1XX_FTM_CNSC_OFFSET(chan->timer_channel)) & FTM_CNSC_CHF; if (overflow) { @@ -157,7 +157,7 @@ int up_input_capture_set(unsigned channel, input_capture_edge edge, capture_filt /* This register selects the filter value for the inputs of channels. Channels 4, 5, 6 and 7 do not have an input filter. */ - if (filter && timer_io_channels[channel].timer_channel - 1 > 3) { + if (filter && timer_io_channels[channel].timer_channel > 3) { return -EINVAL; } @@ -200,7 +200,7 @@ int up_input_capture_get_filter(unsigned channel, capture_filter_t *filter) rv = -EINVAL; - if (timer_io_channels[channel].timer_channel - 1 <= 3) { + if (timer_io_channels[channel].timer_channel <= 3) { rv = -ENXIO; /* Any pins in capture mode */ @@ -213,22 +213,22 @@ int up_input_capture_get_filter(unsigned channel, capture_filter_t *filter) switch (timer_io_channels[channel].timer_channel) { - case 1: + case 0: rvalue = rFILTER(timer) & FTM_FILTER_CH0FVAL_MASK; *filter = (rvalue >> FTM_FILTER_CH0FVAL_SHIFT); break; - case 2: + case 1: rvalue = rFILTER(timer) & FTM_FILTER_CH1FVAL_MASK; *filter = (rvalue >> FTM_FILTER_CH1FVAL_SHIFT); break; - case 3: + case 2: rvalue = rFILTER(timer) & FTM_FILTER_CH2FVAL_MASK; *filter = (rvalue >> FTM_FILTER_CH2FVAL_SHIFT); break; - case 4: + case 3: rvalue = rFILTER(timer) & FTM_FILTER_CH3FVAL_MASK; *filter = (rvalue >> FTM_FILTER_CH3FVAL_SHIFT); break; @@ -266,27 +266,27 @@ int up_input_capture_set_filter(unsigned channel, capture_filter_t filter) switch (timer_io_channels[channel].timer_channel) { - case 1: + case 0: rvalue = rFILTER(timer) & ~FTM_FILTER_CH0FVAL_MASK; rvalue |= (filter << FTM_FILTER_CH0FVAL_SHIFT); rFILTER(timer) = rvalue; break; - case 2: + case 1: rvalue = rFILTER(timer) & ~FTM_FILTER_CH1FVAL_MASK; rvalue |= (filter << FTM_FILTER_CH1FVAL_SHIFT); rFILTER(timer) = rvalue; break; - case 3: + case 2: rvalue = rFILTER(timer) & ~FTM_FILTER_CH2FVAL_MASK; rvalue |= (filter << FTM_FILTER_CH2FVAL_SHIFT); rFILTER(timer) = rvalue; break; - case 4: - rvalue = rFILTER(timer) & ~FTM_FILTER_CH2FVAL_MASK; - rvalue |= (filter << FTM_FILTER_CH2FVAL_SHIFT); + case 3: + rvalue = rFILTER(timer) & ~FTM_FILTER_CH3FVAL_MASK; + rvalue |= (filter << FTM_FILTER_CH3FVAL_SHIFT); rFILTER(timer) = rvalue; break; @@ -316,7 +316,7 @@ int up_input_capture_get_trigger(unsigned channel, input_capture_edge *edge) rv = OK; uint32_t timer = timer_io_channels[channel].timer_index; - uint16_t rvalue = _REG32(timer, S32K1XX_FTM_CNSC_OFFSET(timer_io_channels[channel].timer_channel - 1)); + uint16_t rvalue = _REG32(timer, S32K1XX_FTM_CNSC_OFFSET(timer_io_channels[channel].timer_channel)); rvalue &= (FTM_CNSC_MSB | FTM_CNSC_MSA); switch (rvalue) { @@ -377,10 +377,10 @@ int up_input_capture_set_trigger(unsigned channel, input_capture_edge edge) uint32_t timer = timer_io_channels[channel].timer_index; irqstate_t flags = px4_enter_critical_section(); - uint32_t rvalue = _REG32(timer, S32K1XX_FTM_CNSC_OFFSET(timer_io_channels[channel].timer_channel - 1)); + uint32_t rvalue = _REG32(timer, S32K1XX_FTM_CNSC_OFFSET(timer_io_channels[channel].timer_channel)); rvalue &= (FTM_CNSC_MSB | FTM_CNSC_MSA); rvalue |= edge_bits; - _REG32(timer, S32K1XX_FTM_CNSC_OFFSET(timer_io_channels[channel].timer_channel - 1)) = rvalue; + _REG32(timer, S32K1XX_FTM_CNSC_OFFSET(timer_io_channels[channel].timer_channel)) = rvalue; px4_leave_critical_section(flags); rv = OK; } diff --git a/platforms/nuttx/src/px4/nxp/s32k1xx/io_pins/io_timer.c b/platforms/nuttx/src/px4/nxp/s32k1xx/io_pins/io_timer.c index 3435365937..0b6533b8f9 100644 --- a/platforms/nuttx/src/px4/nxp/s32k1xx/io_pins/io_timer.c +++ b/platforms/nuttx/src/px4/nxp/s32k1xx/io_pins/io_timer.c @@ -339,7 +339,7 @@ int io_timer_validate_channel_index(unsigned channel) { int rv = -EINVAL; - if (channel < MAX_TIMER_IO_CHANNELS && timer_io_channels[channel].timer_channel != 0) { + if (channel < MAX_TIMER_IO_CHANNELS) { unsigned timer = timer_io_channels[channel].timer_index; @@ -742,7 +742,7 @@ int io_timer_channel_init(unsigned channel, io_timer_channel_mode_t mode, /* configure the channel */ - uint32_t chan = timer_io_channels[channel].timer_channel - 1; + uint32_t chan = timer_io_channels[channel].timer_channel; uint16_t rvalue = REG(timer, S32K1XX_FTM_CNSC_OFFSET(chan)); rvalue &= ~clearbits; @@ -823,7 +823,7 @@ int io_timer_set_enable(bool state, io_timer_channel_mode_t mode, io_timer_chann masks &= ~(1 << chan_index); if (io_timer_validate_channel_index(chan_index) == 0) { - uint32_t chan = timer_io_channels[chan_index].timer_channel - 1; + uint32_t chan = timer_io_channels[chan_index].timer_channel; uint32_t timer = channels_timer(chan_index); action_cache[timer].base = io_timers[timer].base; action_cache[timer].cnsc[action_cache[timer].index].cnsc_offset = io_timers[timer].base + S32K1XX_FTM_CNSC_OFFSET(chan); @@ -912,7 +912,7 @@ int io_timer_set_ccr(unsigned channel, uint16_t value) irqstate_t flags = px4_enter_critical_section(); uint32_t save = rSC(timer); rSC(timer) = save & ~(FTM_SC_CLKS_MASK); - REG(timer, S32K1XX_FTM_CNV_OFFSET(timer_io_channels[channel].timer_channel - 1)) = value; + REG(timer, S32K1XX_FTM_CNV_OFFSET(timer_io_channels[channel].timer_channel)) = value; rSC(timer) = save; px4_leave_critical_section(flags); } @@ -931,7 +931,7 @@ uint16_t io_channel_get_ccr(unsigned channel) if ((mode == IOTimerChanMode_PWMOut) || (mode == IOTimerChanMode_OneShot) || (mode == IOTimerChanMode_Trigger)) { - value = REG(channels_timer(channel), S32K1XX_FTM_CNV_OFFSET(timer_io_channels[channel].timer_channel - 1)); + value = REG(channels_timer(channel), S32K1XX_FTM_CNV_OFFSET(timer_io_channels[channel].timer_channel)); } } diff --git a/platforms/nuttx/src/px4/nxp/s32k1xx/led_pwm/led_pwm.cpp b/platforms/nuttx/src/px4/nxp/s32k1xx/led_pwm/led_pwm.cpp index b5a4c8c3e1..6aa35dc7ad 100644 --- a/platforms/nuttx/src/px4/nxp/s32k1xx/led_pwm/led_pwm.cpp +++ b/platforms/nuttx/src/px4/nxp/s32k1xx/led_pwm/led_pwm.cpp @@ -228,7 +228,7 @@ led_pwm_channel_init(unsigned channel) { /* Only initialize used channels */ - if (led_pwm_channels[channel].timer_channel) { + if (led_pwm_channels[channel].gpio_out) { unsigned timer = led_pwm_channels[channel].timer_index; irqstate_t flags = px4_enter_critical_section(); @@ -239,7 +239,7 @@ led_pwm_channel_init(unsigned channel) /* configure the channel */ - uint32_t chan = led_pwm_channels[channel].timer_channel - 1; + uint32_t chan = led_pwm_channels[channel].timer_channel; uint16_t rvalue = REG(timer, S32K1XX_FTM_CNSC_OFFSET(chan)); rvalue &= ~CnSC_RESET; @@ -275,7 +275,7 @@ led_pwm_servo_set(unsigned channel, uint8_t cvalue) value--; } - REG(timer, S32K1XX_FTM_CNV_OFFSET(led_pwm_channels[channel].timer_channel - 1)) = value; + REG(timer, S32K1XX_FTM_CNV_OFFSET(led_pwm_channels[channel].timer_channel)) = value; return 0; } @@ -291,11 +291,11 @@ unsigned led_pwm_servo_get(unsigned channel) /* test timer for validity */ if ((led_pwm_timers[timer].base == 0) || - (led_pwm_channels[channel].timer_channel == 0)) { + (led_pwm_channels[channel].gpio_out == 0)) { return value; } - value = REG(timer, S32K1XX_FTM_CNV_OFFSET(led_pwm_channels[channel].timer_channel - 1)); + value = REG(timer, S32K1XX_FTM_CNV_OFFSET(led_pwm_channels[channel].timer_channel)); unsigned period = led_pwm_timer_get_period(timer); return ((value + 1) * 255 / period); } diff --git a/platforms/nuttx/src/px4/nxp/s32k3xx/include/px4_arch/io_timer_hw_description.h b/platforms/nuttx/src/px4/nxp/s32k3xx/include/px4_arch/io_timer_hw_description.h index 724d944792..9459d7b803 100644 --- a/platforms/nuttx/src/px4/nxp/s32k3xx/include/px4_arch/io_timer_hw_description.h +++ b/platforms/nuttx/src/px4/nxp/s32k3xx/include/px4_arch/io_timer_hw_description.h @@ -52,7 +52,7 @@ static inline constexpr timer_io_channels_t initIOTimerChannel(const io_timers_t ret.gpio_in = pinmux; ret.gpio_out = pinmux; - ret.timer_channel = (int)timer.channel + 1; + ret.timer_channel = (uint8_t)timer.channel; // find timer index ret.timer_index = timer.channel; diff --git a/platforms/nuttx/src/px4/nxp/s32k3xx/io_pins/input_capture.c b/platforms/nuttx/src/px4/nxp/s32k3xx/io_pins/input_capture.c index f5c0a4ddc2..f47b12909e 100644 --- a/platforms/nuttx/src/px4/nxp/s32k3xx/io_pins/input_capture.c +++ b/platforms/nuttx/src/px4/nxp/s32k3xx/io_pins/input_capture.c @@ -108,7 +108,7 @@ static void input_capture_chan_handler(void *context, const io_timers_t *timer, channel_stats[chan_index].edges++; channel_stats[chan_index].last_time = isrs_time - (isrs_rcnt - capture); - uint32_t overflow = 0;//_REG32(timer, S32K1XX_FTM_CNSC_OFFSET(chan->timer_channel - 1)) & FTM_CNSC_CHF; + uint32_t overflow = 0;//_REG32(timer, S32K1XX_FTM_CNSC_OFFSET(chan->timer_channel)) & FTM_CNSC_CHF; if (overflow) { @@ -155,7 +155,7 @@ int up_input_capture_set(unsigned channel, input_capture_edge edge, capture_filt /* This register selects the filter value for the inputs of channels. Channels 4, 5, 6 and 7 do not have an input filter. */ - if (filter && timer_io_channels[channel].timer_channel - 1 > 3) { + if (filter && timer_io_channels[channel].timer_channel > 3) { return -EINVAL; } @@ -198,7 +198,7 @@ int up_input_capture_get_filter(unsigned channel, capture_filter_t *filter) rv = -EINVAL; - if (timer_io_channels[channel].timer_channel - 1 <= 3) { + if (timer_io_channels[channel].timer_channel <= 3) { rv = -ENXIO; /* Any pins in capture mode */ @@ -274,7 +274,7 @@ int up_input_capture_get_trigger(unsigned channel, input_capture_edge *edge) rv = OK; //uint32_t timer = timer_io_channels[channel].timer_index; - /*uint16_t rvalue = _REG32(timer, S32K1XX_FTM_CNSC_OFFSET(timer_io_channels[channel].timer_channel - 1)); + /*uint16_t rvalue = _REG32(timer, S32K1XX_FTM_CNSC_OFFSET(timer_io_channels[channel].timer_channel)); rvalue &= (FTM_CNSC_MSB | FTM_CNSC_MSA); switch (rvalue) { @@ -335,10 +335,10 @@ int up_input_capture_set_trigger(unsigned channel, input_capture_edge edge) //uint32_t timer = timer_io_channels[channel].timer_index; irqstate_t flags = px4_enter_critical_section(); - /*uint32_t rvalue = _REG32(timer, S32K1XX_FTM_CNSC_OFFSET(timer_io_channels[channel].timer_channel - 1)); + /*uint32_t rvalue = _REG32(timer, S32K1XX_FTM_CNSC_OFFSET(timer_io_channels[channel].timer_channel)); rvalue &= (FTM_CNSC_MSB | FTM_CNSC_MSA); rvalue |= edge_bits; - _REG32(timer, S32K1XX_FTM_CNSC_OFFSET(timer_io_channels[channel].timer_channel - 1)) = rvalue;*/ + _REG32(timer, S32K1XX_FTM_CNSC_OFFSET(timer_io_channels[channel].timer_channel)) = rvalue;*/ px4_leave_critical_section(flags); rv = OK; } diff --git a/platforms/nuttx/src/px4/nxp/s32k3xx/io_pins/io_timer.c b/platforms/nuttx/src/px4/nxp/s32k3xx/io_pins/io_timer.c index 1a56a5338a..f199e34ab3 100644 --- a/platforms/nuttx/src/px4/nxp/s32k3xx/io_pins/io_timer.c +++ b/platforms/nuttx/src/px4/nxp/s32k3xx/io_pins/io_timer.c @@ -301,7 +301,7 @@ int io_timer_validate_channel_index(unsigned channel) { int rv = -EINVAL; - if (channel < MAX_TIMER_IO_CHANNELS && timer_io_channels[channel].timer_channel != 0) { + if (channel < MAX_TIMER_IO_CHANNELS) { unsigned timer = timer_io_channels[channel].timer_index; @@ -731,7 +731,7 @@ int io_timer_channel_init(unsigned channel, io_timer_channel_mode_t mode, /* configure the channel */ - uint32_t chan = timer_io_channels[channel].timer_channel - 1; + uint32_t chan = timer_io_channels[channel].timer_channel; //FIXME use setbits/clearbits for different modes @@ -830,7 +830,7 @@ int io_timer_set_enable(bool state, io_timer_channel_mode_t mode, io_timer_chann masks &= ~(1 << chan_index); if (io_timer_validate_channel_index(chan_index) == 0) { - uint32_t chan = timer_io_channels[chan_index].timer_channel - 1; + uint32_t chan = timer_io_channels[chan_index].timer_channel; uint32_t timer = channels_timer(chan_index); if ((state && @@ -875,7 +875,7 @@ int io_timer_set_ccr(unsigned channel, uint16_t value) /* configure the channel */ irqstate_t flags = px4_enter_critical_section(); - rA(channels_timer(channel), timer_io_channels[channel].timer_channel - 1) = EMIOS_A(value * 2); + rA(channels_timer(channel), timer_io_channels[channel].timer_channel) = EMIOS_A(value * 2); px4_leave_critical_section(flags); } } @@ -895,7 +895,7 @@ uint16_t io_channel_get_ccr(unsigned channel) (mode == IOTimerChanMode_OneShot) || (mode == IOTimerChanMode_Trigger)) { /* Read rALTA to fetch AS2 shadow register */ - value = (rALTA(channels_timer(channel), timer_io_channels[channel].timer_channel - 1) & EMIOS_A_MASK) / 2; + value = (rALTA(channels_timer(channel), timer_io_channels[channel].timer_channel) & EMIOS_A_MASK) / 2; } } diff --git a/platforms/nuttx/src/px4/nxp/s32k3xx/led_pwm/led_pwm.cpp b/platforms/nuttx/src/px4/nxp/s32k3xx/led_pwm/led_pwm.cpp index 3d42fc2314..1f1bce6184 100644 --- a/platforms/nuttx/src/px4/nxp/s32k3xx/led_pwm/led_pwm.cpp +++ b/platforms/nuttx/src/px4/nxp/s32k3xx/led_pwm/led_pwm.cpp @@ -228,7 +228,7 @@ led_pwm_channel_init(unsigned channel) { /* Only initialize used channels */ - if (led_pwm_channels[channel].timer_channel) { + if (led_pwm_channels[channel].gpio_out) { unsigned timer = led_pwm_channels[channel].timer_index; irqstate_t flags = px4_enter_critical_section(); @@ -239,7 +239,7 @@ led_pwm_channel_init(unsigned channel) /* configure the channel */ - uint32_t chan = led_pwm_channels[channel].timer_channel - 1; + uint32_t chan = led_pwm_channels[channel].timer_channel; uint16_t rvalue = REG(timer, S32K1XX_FTM_CNSC_OFFSET(chan)); rvalue &= ~CnSC_RESET; @@ -275,7 +275,7 @@ led_pwm_servo_set(unsigned channel, uint8_t cvalue) value--; } - REG(timer, S32K1XX_FTM_CNV_OFFSET(led_pwm_channels[channel].timer_channel - 1)) = value; + REG(timer, S32K1XX_FTM_CNV_OFFSET(led_pwm_channels[channel].timer_channel)) = value; return 0; } @@ -291,11 +291,11 @@ led_pwm_servo_get(unsigned channel) /* test timer for validity */ if ((led_pwm_timers[timer].base == 0) || - (led_pwm_channels[channel].timer_channel == 0)) { + (led_pwm_channels[channel].gpio_out == 0)) { return value; } - value = REG(timer, S32K1XX_FTM_CNV_OFFSET(led_pwm_channels[channel].timer_channel - 1)); + value = REG(timer, S32K1XX_FTM_CNV_OFFSET(led_pwm_channels[channel].timer_channel)); unsigned period = led_pwm_timer_get_period(timer); return ((value + 1) * 255 / period); } diff --git a/platforms/nuttx/src/px4/rpi/rpi_common/include/px4_arch/hw_description.h b/platforms/nuttx/src/px4/rpi/rpi_common/include/px4_arch/hw_description.h index 5588a45c70..a5fa8d71eb 100644 --- a/platforms/nuttx/src/px4/rpi/rpi_common/include/px4_arch/hw_description.h +++ b/platforms/nuttx/src/px4/rpi/rpi_common/include/px4_arch/hw_description.h @@ -57,7 +57,7 @@ enum Timer { Timer7, }; enum Channel { - ChannelA = 1, + ChannelA = 0, ChannelB, }; struct TimerChannel { diff --git a/platforms/nuttx/src/px4/rpi/rpi_common/io_pins/io_timer.c b/platforms/nuttx/src/px4/rpi/rpi_common/io_pins/io_timer.c index 1cba81e8c9..5c2b4ceb09 100644 --- a/platforms/nuttx/src/px4/rpi/rpi_common/io_pins/io_timer.c +++ b/platforms/nuttx/src/px4/rpi/rpi_common/io_pins/io_timer.c @@ -266,7 +266,7 @@ int io_timer_validate_channel_index(unsigned channel) { int rv = -EINVAL; - if (channel < MAX_TIMER_IO_CHANNELS && timer_io_channels[channel].timer_channel != 0) { + if (channel < MAX_TIMER_IO_CHANNELS) { unsigned timer = timer_io_channels[channel].timer_index; @@ -602,7 +602,7 @@ int io_timer_channel_init(unsigned channel, io_timer_channel_mode_t mode, /* configure the channel */ // Nothing to configure here really. - // uint32_t chan = timer_io_channels[channel].timer_channel - 1; + // uint32_t chan = timer_io_channels[channel].timer_channel; channel_handlers[channel].callback = channel_handler; channel_handlers[channel].context = context; @@ -664,7 +664,7 @@ int io_timer_set_enable(bool state, io_timer_channel_mode_t mode, io_timer_chann masks &= ~(1 << chan_index); if (io_timer_validate_channel_index(chan_index) == 0) { - // uint32_t chan = timer_io_channels[chan_index].timer_channel - 1; + // uint32_t chan = timer_io_channels[chan_index].timer_channel; uint32_t timer = channels_timer(chan_index); action_cache[timer].base = io_timers[timer].base; // action_cache[timer].cnsc[action_cache[timer].index].cnsc_offset = io_timers[timer].base + KINETIS_FTM_CSC_OFFSET(chan); @@ -739,8 +739,8 @@ int io_timer_set_ccr(unsigned channel, uint16_t value) /* configure the channel */ int regVal = rCCR(channels_timer(channel)); - regVal &= ~(0xffff << (timer_io_channels[channel].timer_channel - 1) * 16); - regVal |= value << (timer_io_channels[channel].timer_channel - 1) * 16; + regVal &= ~(0xffff << (timer_io_channels[channel].timer_channel) * 16); + regVal |= value << (timer_io_channels[channel].timer_channel) * 16; rCCR(channels_timer(channel)) = regVal; } } @@ -758,7 +758,7 @@ uint16_t io_channel_get_ccr(unsigned channel) if ((mode == IOTimerChanMode_PWMOut) || (mode == IOTimerChanMode_OneShot) || (mode == IOTimerChanMode_Trigger)) { - value = rCCR(channels_timer(channel)) >> (timer_io_channels[channel].timer_channel - 1) * 16; + value = rCCR(channels_timer(channel)) >> (timer_io_channels[channel].timer_channel) * 16; } } diff --git a/platforms/nuttx/src/px4/stm/stm32_common/dshot/dshot.c b/platforms/nuttx/src/px4/stm/stm32_common/dshot/dshot.c index a667537d9f..c8dfe228c4 100644 --- a/platforms/nuttx/src/px4/stm/stm32_common/dshot/dshot.c +++ b/platforms/nuttx/src/px4/stm/stm32_common/dshot/dshot.c @@ -1,7 +1,6 @@ /**************************************************************************** * - * Copyright (C) 2024 PX4 Development Team. All rights reserved. - * Author: Igor Misic + * Copyright (C) 2025 PX4 Development Team. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -50,11 +49,6 @@ #include -// This can be overriden for a specific board. -#ifndef BOARD_DMA_NUM_DSHOT_CHANNELS -#define BOARD_DMA_NUM_DSHOT_CHANNELS 1 -#endif - // DShot protocol definitions #define ONE_MOTOR_DATA_SIZE 16u #define MOTOR_PWM_BIT_1 14u @@ -97,17 +91,20 @@ static void dma_burst_finished_callback(DMA_HANDLE handle, uint8_t status, void static void capture_complete_callback(void *arg); static void process_capture_results(uint8_t timer_index, uint8_t channel_index); -static unsigned calculate_period(uint8_t timer_index, uint8_t channel_index); +static uint32_t convert_edge_intervals_to_bitstream(uint8_t timer_index, uint8_t channel_index); +static void decode_dshot_telemetry(uint32_t payload, struct BDShotTelemetry *packet); + +static void dshot_start_timer_burst(uint8_t timer_index); // Timer configuration struct typedef struct timer_config_t { - DMA_HANDLE dma_handle; // DMA stream for DMA update and eRPM Capture Compare + DMA_HANDLE dma_handle; // DMA stream for DMA update and eRPM Capture Compare bool enabled; // Timer enabled bool enabled_channels[4]; // Timer Channels enabled (requested) bool initialized; // Timer initialized bool initialized_channels[4]; // Timer channels initialized (successfully started) bool bidirectional; // Timer in bidir (inverted) mode - int capture_channel_index; // Timer channel currently being catured in bidirectional mode + int capture_channel; // Timer channel currently being captured in bidirectional mode uint8_t timer_index; // Timer index. Necessary to have memory for passing pointer to hrt callback } timer_config_t; @@ -119,63 +116,98 @@ px4_cache_aligned_data() = {}; static uint32_t *dshot_output_buffer[MAX_IO_TIMERS] = {}; // Buffer containing channel capture data for a single timer -static uint16_t dshot_capture_buffer[MAX_NUM_CHANNELS_PER_TIMER][CHANNEL_CAPTURE_BUFF_SIZE] +static uint16_t dshot_capture_buffer[MAX_IO_TIMERS][MAX_NUM_CHANNELS_PER_TIMER][CHANNEL_CAPTURE_BUFF_SIZE] px4_cache_aligned_data() = {}; -static bool _bidirectional = false; -static uint8_t _bidi_timer_index = 0; // TODO: BDSHOT_TIM param to select timer index? +static const uint32_t gcr_decode[32] = { + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x9, 0xA, 0xB, 0x0, 0xD, 0xE, 0xF, + 0x0, 0x0, 0x2, 0x3, 0x0, 0x5, 0x6, 0x7, + 0x0, 0x0, 0x8, 0x1, 0x0, 0x4, 0xC, 0x0 +}; + +// Indicates when the bdshot capture cycle is finished. This is necessary since the captured data is +// processed after a fixed delay in an hrt callback. System jitter can delay the firing of the hrt callback +// and thus delay the processing of the data. This should never happen in a properly working system, as the +// jitter would have to be longer than the control allocator update interval. A warning is issued if this +// ever does occur. +static volatile bool _bdshot_cycle_complete[MAX_IO_TIMERS] = { [0 ...(MAX_IO_TIMERS - 1)] = true }; + +static uint32_t _bdshot_channel_mask = 0; static uint32_t _dshot_frequency = 0; +static hrt_abstime _bdshot_capture_delay = 0; +static bool _edt_enabled = false; // Extended DShot Telemetry -// eRPM data for channels on the singular timer -static int32_t _erpms[MAX_TIMER_IO_CHANNELS] = {}; -static bool _erpms_ready[MAX_TIMER_IO_CHANNELS] = {}; -// hrt callback handle for captcomp post dma processing -static struct hrt_call _cc_call; +// Online flags, set if ESC is reponding with valid BDShot frames +#define BDSHOT_OFFLINE_COUNT 200 +static volatile bool _bdshot_online[MAX_TIMER_IO_CHANNELS] = {}; +static volatile uint16_t _bdshot_ready_mask = 0; +static bool _bdshot_capture_supported[MAX_TIMER_IO_CHANNELS] = {}; +static volatile int _consecutive_failures[MAX_TIMER_IO_CHANNELS] = {}; +static volatile int _consecutive_successes[MAX_TIMER_IO_CHANNELS] = {}; + +typedef struct { + int32_t erpm; + bool ready; + float rate_hz; + uint64_t last_timestamp; +} erpm_data_t; + +typedef struct { + uint8_t value; + bool ready; + float rate_hz; + uint64_t last_timestamp; +} edt_data_t; + +// Adaptive base interval per channel, scaled by 8 for sub-tick precision (ticks_per_bit * 8) +static uint32_t _base_interval_x8[MAX_TIMER_IO_CHANNELS] = { [0 ...(MAX_TIMER_IO_CHANNELS - 1)] = 168 }; // 21 * 8 + +static volatile erpm_data_t _erpms[MAX_TIMER_IO_CHANNELS] = {}; +static volatile edt_data_t _edt_temp[MAX_TIMER_IO_CHANNELS] = {}; +static volatile edt_data_t _edt_volt[MAX_TIMER_IO_CHANNELS] = {}; +static volatile edt_data_t _edt_curr[MAX_TIMER_IO_CHANNELS] = {}; + +static float calculate_rate_hz(uint64_t last_timestamp, float last_rate_hz, uint64_t timestamp); + +// hrt callback handle for captcomp post dma processing per timer +static struct hrt_call _cc_calls[MAX_IO_TIMERS]; // decoding status for each channel -static uint32_t read_ok[MAX_NUM_CHANNELS_PER_TIMER] = {}; -static uint32_t read_fail_nibble[MAX_NUM_CHANNELS_PER_TIMER] = {}; -static uint32_t read_fail_crc[MAX_NUM_CHANNELS_PER_TIMER] = {}; -static uint32_t read_fail_zero[MAX_NUM_CHANNELS_PER_TIMER] = {}; +static uint32_t read_ok[MAX_TIMER_IO_CHANNELS] = {}; +static uint32_t read_fail_crc[MAX_TIMER_IO_CHANNELS] = {}; -static perf_counter_t hrt_callback_perf = NULL; +static perf_counter_t capture_complete_perf = NULL; +static perf_counter_t burst_perf = NULL; +static perf_counter_t capture_window_perf = NULL; static void init_timer_config(uint32_t channel_mask) { - // Mark timers in use, channels in use, and timers for bidir dshot - for (unsigned output_channel = 0; output_channel < MAX_TIMER_IO_CHANNELS; output_channel++) { + // Mark timers in use, channels in use, and timers for bdshot + for (uint8_t output_channel = 0; output_channel < MAX_TIMER_IO_CHANNELS; output_channel++) { if (channel_mask & (1 << output_channel)) { uint8_t timer_index = timer_io_channels[output_channel].timer_index; uint8_t timer_channel = timer_io_channels[output_channel].timer_channel; - if ((timer_channel <= 0) || (timer_channel >= 5)) { - // invalid channel, only 1 - 4 + if (timer_channel >= 4) { + // invalid channel, only 0 - 3 continue; } - uint8_t timer_channel_index = timer_channel - 1; - if (io_timers[timer_index].dshot.dma_base == 0) { // board does not configure dshot on this timer continue; } - // NOTE: only 1 timer can be used if Bidirectional DShot is enabled - if (_bidirectional && (timer_index != _bidi_timer_index)) { - continue; - } - - // NOTE: this is necessary to pass timer_index to DMA callback timer_configs[timer_index].timer_index = timer_index; - // Mark timer as enabled timer_configs[timer_index].enabled = true; - // Mark channel as enabled - timer_configs[timer_index].enabled_channels[timer_channel_index] = true; + timer_configs[timer_index].enabled_channels[timer_channel] = true; + // TODO: bdshot per timer not on all timers // Mark timer as bidirectional - if (_bidirectional && timer_index == _bidi_timer_index) { + if (_bdshot_channel_mask & (1 << output_channel)) { timer_configs[timer_index].bidirectional = true; } } @@ -197,11 +229,6 @@ static void init_timers_dma_up(void) continue; } - // NOTE: only 1 timer can be used if Bidirectional DShot is enabled - if (_bidirectional && (timer_index != _bidi_timer_index)) { - continue; - } - // Attempt to allocate DMA for Burst timer_configs[timer_index].dma_handle = stm32_dmachannel(io_timers[timer_index].dshot.dma_map_up); @@ -216,14 +243,16 @@ static void init_timers_dma_up(void) // Bidirectional DShot will free/allocate DMA stream on every update event. This is required // in order to reconfigure the DMA stream between Timer Burst and CaptureCompare. - if (_bidirectional) { - // Free the allocated DMA channels - for (uint8_t timer_index = 0; timer_index < MAX_IO_TIMERS; timer_index++) { - if (timer_configs[timer_index].dma_handle != NULL) { - stm32_dmafree(timer_configs[timer_index].dma_handle); - timer_configs[timer_index].dma_handle = NULL; - PX4_INFO("Freed DMA UP Timer Index %u", timer_index); - } + for (uint8_t timer_index = 0; timer_index < MAX_IO_TIMERS; timer_index++) { + + if (!timer_configs[timer_index].bidirectional) { + continue; + } + + if (timer_configs[timer_index].dma_handle != NULL) { + stm32_dmafree(timer_configs[timer_index].dma_handle); + timer_configs[timer_index].dma_handle = NULL; + PX4_INFO("Freed DMA UP Timer Index %u", timer_index); } } } @@ -244,14 +273,13 @@ static int32_t init_timer_channels(uint8_t timer_index) uint8_t timer_channel = timer_io_channels[output_channel].timer_channel; - if ((timer_channel <= 0) || (timer_channel >= 5)) { - // invalid channel, only 1 - 4 + if (timer_channel >= 4) { + // invalid channel, only 0 - 3 continue; } - uint8_t timer_channel_index = timer_channel - 1; bool this_timer = timer_index == timer_io_channels[output_channel].timer_index; - bool channel_enabled = timer_configs[timer_index].enabled_channels[timer_channel_index]; + bool channel_enabled = timer_configs[timer_index].enabled_channels[timer_channel]; if (this_timer && channel_enabled) { int ret = io_timer_channel_init(output_channel, mode, NULL, NULL); @@ -261,36 +289,37 @@ static int32_t init_timer_channels(uint8_t timer_index) continue; } - timer_configs[timer_index].initialized_channels[timer_channel_index] = true; + timer_configs[timer_index].initialized_channels[timer_channel] = true; channels_init_mask |= (1 << output_channel); - if (timer_configs[timer_index].bidirectional) { - PX4_DEBUG("DShot initialized OutputChannel %u (bidirectional)", output_channel); - - } else { - PX4_DEBUG("DShot initialized OutputChannel %u", output_channel); - } + PX4_DEBUG("%sDShot initialized OutputChannel %u", timer_configs[timer_index].bidirectional ? "B" : "", output_channel); } } return channels_init_mask; } -int up_dshot_init(uint32_t channel_mask, unsigned dshot_pwm_freq, bool enable_bidirectional_dshot) +int up_dshot_init(uint32_t channel_mask, uint32_t bdshot_channel_mask, unsigned dshot_pwm_freq, bool edt_enable) { _dshot_frequency = dshot_pwm_freq; - _bidirectional = enable_bidirectional_dshot; + _bdshot_channel_mask = bdshot_channel_mask; + _edt_enabled = edt_enable; - if (_bidirectional) { - PX4_INFO("Bidirectional DShot enabled, only one timer will be used"); - hrt_callback_perf = perf_alloc(PC_ELAPSED, "dshot: callback perf"); + // Precompute capture delay: 30us switch time + frame time + 20us margin + hrt_abstime frame_us = (16 * 1000000) / _dshot_frequency; + _bdshot_capture_delay = 30 + frame_us + 20; + + if (bdshot_channel_mask) { + // TODO: show which timers/channels it's enabled on + PX4_INFO("BDShot enabled"); + capture_complete_perf = perf_alloc(PC_ELAPSED, "dshot: capture complete"); + burst_perf = perf_alloc(PC_INTERVAL, "dshot: burst perf"); + capture_window_perf = perf_alloc(PC_INTERVAL, "dshot: capture window"); } - // NOTE: if bidirectional is enabled only 1 timer can be used. This is because Burst mode uses 1 DMA channel per timer - // and CaptureCompare (for reading ESC eRPM) uses 4 DMA. Even if we only used CaptureCompare on a single timer - // we would still need 5 DMA; 1 DMA for the second timer burst, and 4 DMA for the first timer CaptureCompare. The only - // way to support more than 1 timer is to burst/captcomp sequentially for each timer enabled for dshot. The code is - // structured in a way to allow extending support for this in the future. + // NOTE: All timers are triggered in a loop with a small delay. + // Each timer needs its own DMA channel, re-used for burst transmit and then capture. + // For bidirectional DShot, each timer uses round-robin capture (1 channel per timer per cycle). // Initialize timer_config data based on enabled channels init_timer_config(channel_mask); @@ -306,7 +335,7 @@ int up_dshot_init(uint32_t channel_mask, unsigned dshot_pwm_freq, bool enable_bi unsigned output_buffer_offset = 0; - for (unsigned timer_index = 0; timer_index < MAX_IO_TIMERS; timer_index++) { + for (uint8_t timer_index = 0; timer_index < MAX_IO_TIMERS; timer_index++) { if (timer_configs[timer_index].initialized) { if (io_timers[timer_index].base == 0) { // no more timers configured break; @@ -327,89 +356,147 @@ int up_dshot_init(uint32_t channel_mask, unsigned dshot_pwm_freq, bool enable_bi } } + // Mark BDShot channels without capture DMA as processed (so they don't block ready count) + // and track which channels support capture + for (uint8_t output_channel = 0; output_channel < MAX_TIMER_IO_CHANNELS; output_channel++) { + if (bdshot_channel_mask & (1 << output_channel)) { + uint8_t timer_index = timer_io_channels[output_channel].timer_index; + uint8_t timer_channel = timer_io_channels[output_channel].timer_channel; + + if (timer_channel < 4) { + if (io_timers[timer_index].dshot.dma_map_ch[timer_channel] != 0) { + _bdshot_capture_supported[output_channel] = true; + + } else { + // No DMA for capture on this channel - mark as ready so it doesn't block + _bdshot_ready_mask |= (1u << output_channel); + PX4_WARN("BDShot capture not supported on output %u (no DMA)", output_channel); + } + } + } + } + return channels_init_mask; } -// Kicks off a DMA transmit for each configured timer and the associated channels +// ESC boot delay - wait for ESCs to initialize before enabling BDShot capture +static const uint64_t ESC_BOOT_DELAY_US = 3000000; + +// Start burst DMA for a single timer +static void dshot_start_timer_burst(uint8_t timer_index) +{ + timer_config_t *timer = &timer_configs[timer_index]; + io_timer_channel_mode_t mode = timer->bidirectional ? IOTimerChanMode_DshotInverted : IOTimerChanMode_Dshot; + + io_timer_set_enable(true, mode, io_timer_get_group(timer_index)); + + uint32_t channel_count = io_timers_channel_mapping.element[timer_index].channel_count_including_gaps; + io_timer_set_dshot_burst_mode(timer_index, _dshot_frequency, channel_count); + + if (timer->bidirectional) { + // Deallocate DMA from previous transaction + if (timer->dma_handle != NULL) { + stm32_dmastop(timer->dma_handle); + stm32_dmafree(timer->dma_handle); + timer->dma_handle = NULL; + } + + // Allocate DMA + timer->dma_handle = stm32_dmachannel(io_timers[timer_index].dshot.dma_map_up); + + if (timer->dma_handle == NULL) { + PX4_WARN("DMA allocation for timer %u failed", timer_index); + _bdshot_cycle_complete[timer_index] = true; + return; + } + } + + // Flush cache so DMA sees the data + up_clean_dcache((uintptr_t)dshot_output_buffer[timer_index], + (uintptr_t)dshot_output_buffer[timer_index] + + DSHOT_OUTPUT_BUFFER_SIZE(channel_count)); + + px4_stm32_dmasetup(timer->dma_handle, + io_timers[timer_index].base + STM32_GTIM_DMAR_OFFSET, + (uint32_t)(dshot_output_buffer[timer_index]), + channel_count * CHANNEL_OUTPUT_BUFF_SIZE, + DSHOT_DMA_SCR); + + // Clean UDE flag before DMA is started + io_timer_update_dma_req(timer_index, false); + + // Trigger DMA. For BDShot after boot delay, use callback for capture setup. + if (timer->bidirectional && (hrt_absolute_time() > ESC_BOOT_DELAY_US)) { + perf_begin(burst_perf); + stm32_dmastart(timer->dma_handle, dma_burst_finished_callback, &timer->timer_index, false); + + } else { + // Standard DShot or BDShot during boot - no capture needed + stm32_dmastart(timer->dma_handle, NULL, NULL, false); + + if (timer->bidirectional) { + // During boot, mark BDShot cycle complete immediately + _bdshot_cycle_complete[timer_index] = true; + } + } + + // Enable DMA update request + io_timer_update_dma_req(timer_index, true); +} + +// Kicks off DMA transmit for all configured timers simultaneously void up_dshot_trigger() { - // Enable DShot inverted on all channels - io_timer_set_enable(true, _bidirectional ? IOTimerChanMode_DshotInverted : IOTimerChanMode_Dshot, - IO_TIMER_ALL_MODES_CHANNELS); + for (int i = 0; i < MAX_IO_TIMERS; i++) { + if (!_bdshot_cycle_complete[i]) { + PX4_WARN("Cycle not complete, check system jitter!"); + return; + } + } - // For each timer, begin DMA transmit - for (uint8_t timer_index = 0; timer_index < MAX_IO_TIMERS; timer_index++) { - if (timer_configs[timer_index].enabled && timer_configs[timer_index].initialized) { + // Mark all BDShot timers as cycle incomplete and start all timers + uint8_t bdshot_timers_started = 0; - uint32_t channel_count = io_timers_channel_mapping.element[timer_index].channel_count_including_gaps; - - io_timer_set_dshot_burst_mode(timer_index, _dshot_frequency, channel_count); - - if (_bidirectional) { - // Deallocate DMA from previous transaction - if (timer_configs[timer_index].dma_handle != NULL) { - stm32_dmastop(timer_configs[timer_index].dma_handle); - stm32_dmafree(timer_configs[timer_index].dma_handle); - timer_configs[timer_index].dma_handle = NULL; + for (uint8_t i = 0; i < MAX_IO_TIMERS; i++) { + if (timer_configs[i].enabled && timer_configs[i].initialized) { + if (timer_configs[i].bidirectional) { + // Stagger between bidirectional timer bursts to prevent response frame overlap. + // Response frames arrive ~30us after burst, and reconfiguring for capture takes >15us. + if (bdshot_timers_started > 0) { + px4_udelay(10); } - // Allocate DMA - timer_configs[timer_index].dma_handle = stm32_dmachannel(io_timers[timer_index].dshot.dma_map_up); - - if (timer_configs[timer_index].dma_handle == NULL) { - PX4_WARN("DMA allocation for timer %u failed", timer_index); - continue; - } + _bdshot_cycle_complete[i] = false; + bdshot_timers_started++; } - // Flush cache so DMA sees the data - up_clean_dcache((uintptr_t) dshot_output_buffer[timer_index], - (uintptr_t) dshot_output_buffer[timer_index] + - DSHOT_OUTPUT_BUFFER_SIZE(channel_count)); - - px4_stm32_dmasetup(timer_configs[timer_index].dma_handle, - io_timers[timer_index].base + STM32_GTIM_DMAR_OFFSET, - (uint32_t)(dshot_output_buffer[timer_index]), - channel_count * CHANNEL_OUTPUT_BUFF_SIZE, - DSHOT_DMA_SCR); - - // Clean UDE flag before DMA is started - io_timer_update_dma_req(timer_index, false); - - // Trigger DMA (DShot Outputs) - if (timer_configs[timer_index].bidirectional) { - stm32_dmastart(timer_configs[timer_index].dma_handle, dma_burst_finished_callback, - &timer_configs[timer_index].timer_index, - false); - - } else { - stm32_dmastart(timer_configs[timer_index].dma_handle, NULL, NULL, false); - } - - // Enable DMA update request - io_timer_update_dma_req(timer_index, true); + dshot_start_timer_burst(i); } } } static void select_next_capture_channel(uint8_t timer_index) { - bool found = false; - int next_index = timer_configs[timer_index].capture_channel_index; + int current = timer_configs[timer_index].capture_channel; - while (!found) { - next_index++; + // Try each of the 4 possible channels, starting from current+1 + for (int i = 1; i <= 4; i++) { + int next = (current + i) % 4; - if (next_index > 3) { - next_index = 0; - } + if (timer_configs[timer_index].initialized_channels[next]) { + uint8_t output_channel = output_channel_from_timer_channel(timer_index, next); - if (timer_configs[timer_index].initialized_channels[next_index]) { - found = true; + if (output_channel >= MAX_TIMER_IO_CHANNELS) { + continue; + } + + // Only capture from channels that support BDShot (have DMA mapping) + if (_bdshot_capture_supported[output_channel]) { + timer_configs[timer_index].capture_channel = next; + return; + } } } - - timer_configs[timer_index].capture_channel_index = next_index; } static uint8_t output_channel_from_timer_channel(uint8_t timer_index, uint8_t timer_channel_index) @@ -417,7 +504,7 @@ static uint8_t output_channel_from_timer_channel(uint8_t timer_index, uint8_t ti for (uint8_t output_channel = 0; output_channel < MAX_TIMER_IO_CHANNELS; output_channel++) { bool is_this_timer = timer_index == timer_io_channels[output_channel].timer_index; - uint8_t channel_index = timer_io_channels[output_channel].timer_channel - 1; + uint8_t channel_index = timer_io_channels[output_channel].timer_channel; if (is_this_timer && (channel_index == timer_channel_index)) { // We found the output channel associated with this timer channel @@ -425,19 +512,29 @@ static uint8_t output_channel_from_timer_channel(uint8_t timer_index, uint8_t ti } } - // TODO: error handling? - return 0; + return MAX_TIMER_IO_CHANNELS; } void dma_burst_finished_callback(DMA_HANDLE handle, uint8_t status, void *arg) { uint8_t timer_index = *((uint8_t *)arg); + timer_config_t *timer = &timer_configs[timer_index]; + + // TODO: revisit logic for DMA failure handling (does it occur?) + // if (status != DMA_STATUS_SUCCESS) { + // } + + // For standard DShot or BDShot during boot: no capture needed + if (!timer->bidirectional || (hrt_absolute_time() <= ESC_BOOT_DELAY_US)) { + return; + } + // Clean DMA UP configuration - if (timer_configs[timer_index].dma_handle != NULL) { - stm32_dmastop(timer_configs[timer_index].dma_handle); - stm32_dmafree(timer_configs[timer_index].dma_handle); - timer_configs[timer_index].dma_handle = NULL; + if (timer->dma_handle != NULL) { + stm32_dmastop(timer->dma_handle); + stm32_dmafree(timer->dma_handle); + timer->dma_handle = NULL; } // Disable DMA update request @@ -447,28 +544,37 @@ void dma_burst_finished_callback(DMA_HANDLE handle, uint8_t status, void *arg) io_timer_unallocate_timer(timer_index); // Flush cache so DMA sees the data - memset(dshot_capture_buffer, 0, sizeof(dshot_capture_buffer)); - up_clean_dcache((uintptr_t) dshot_capture_buffer, - (uintptr_t) dshot_capture_buffer + DSHOT_CAPTURE_BUFFER_SIZE(MAX_NUM_CHANNELS_PER_TIMER)); + memset(dshot_capture_buffer[timer_index], 0, sizeof(dshot_capture_buffer[timer_index])); + up_clean_dcache((uintptr_t) dshot_capture_buffer[timer_index], + (uintptr_t) dshot_capture_buffer[timer_index] + DSHOT_CAPTURE_BUFFER_SIZE(MAX_NUM_CHANNELS_PER_TIMER)); - // Unallocate timer channel for currently selected capture_channel - uint8_t capture_channel = timer_configs[timer_index].capture_channel_index; - uint8_t output_channel = output_channel_from_timer_channel(timer_index, capture_channel); + // Re-initialize the current capture channel back to CaptureDMA + uint8_t capture_output_channel = output_channel_from_timer_channel(timer_index, timer_configs[timer_index].capture_channel); - // Re-initialize output for CaptureDMA for next time - io_timer_unallocate_channel(output_channel); - io_timer_channel_init(output_channel, IOTimerChanMode_CaptureDMA, NULL, NULL); + if (capture_output_channel < MAX_TIMER_IO_CHANNELS) { + io_timer_unallocate_channel(capture_output_channel); + io_timer_channel_init(capture_output_channel, IOTimerChanMode_CaptureDMA, NULL, NULL); + } // Select the next capture channel select_next_capture_channel(timer_index); // Allocate DMA for currently selected capture_channel - capture_channel = timer_configs[timer_index].capture_channel_index; + uint8_t capture_channel = timer_configs[timer_index].capture_channel; timer_configs[timer_index].dma_handle = stm32_dmachannel(io_timers[timer_index].dshot.dma_map_ch[capture_channel]); - // If DMA handler is valid, start DMA - if (timer_configs[timer_index].dma_handle == NULL) { + // If DMA handler is invalid, skip capture + if (timer->dma_handle == NULL) { PX4_WARN("failed to allocate dma for timer %u channel %u", timer_index, capture_channel); + + // Restore the capture channel back to DshotInverted (was set to CaptureDMA above) + if (capture_output_channel < MAX_TIMER_IO_CHANNELS) { + io_timer_unallocate_channel(capture_output_channel); + io_timer_channel_init(capture_output_channel, IOTimerChanMode_DshotInverted, NULL, NULL); + } + + perf_end(burst_perf); + _bdshot_cycle_complete[timer_index] = true; return; } @@ -482,7 +588,7 @@ void dma_burst_finished_callback(DMA_HANDLE handle, uint8_t status, void *arg) // Setup DMA for this channel px4_stm32_dmasetup(timer_configs[timer_index].dma_handle, periph_addr, - (uint32_t) dshot_capture_buffer[capture_channel], + (uint32_t) dshot_capture_buffer[timer_index][capture_channel], CHANNEL_CAPTURE_BUFF_SIZE, DSHOT_BIDIRECTIONAL_DMA_SCR); @@ -490,25 +596,26 @@ void dma_burst_finished_callback(DMA_HANDLE handle, uint8_t status, void *arg) // we use an hrt callback to schedule the processing of the received and DMAd eRPM frames. stm32_dmastart(timer_configs[timer_index].dma_handle, NULL, NULL, false); - // Enable CaptureDMA and on all configured channels - io_timer_set_enable(true, IOTimerChanMode_CaptureDMA, IO_TIMER_ALL_MODES_CHANNELS); + // Enable CaptureDMA on this timer's channels only + io_timer_set_enable(true, IOTimerChanMode_CaptureDMA, io_timer_get_group(timer_index)); - // 30us to switch regardless of DShot frequency + eRPM frame time + 10us for good measure - hrt_abstime frame_us = (16 * 1000000) / _dshot_frequency; // 16 bits * us_per_s / bits_per_s - hrt_abstime delay = 30 + frame_us + 10; - hrt_call_after(&_cc_call, delay, capture_complete_callback, arg); + perf_end(burst_perf); + perf_begin(capture_window_perf); + + hrt_call_after(&_cc_calls[timer_index], _bdshot_capture_delay, capture_complete_callback, arg); } static void capture_complete_callback(void *arg) { - perf_begin(hrt_callback_perf); + perf_end(capture_window_perf); + perf_begin(capture_complete_perf); uint8_t timer_index = *((uint8_t *)arg); // Unallocate the timer as CaptureDMA io_timer_unallocate_timer(timer_index); - uint8_t capture_channel = timer_configs[timer_index].capture_channel_index; + uint8_t capture_channel = timer_configs[timer_index].capture_channel; // Disable capture DMA io_timer_capture_dma_req(timer_index, capture_channel, false); @@ -520,11 +627,10 @@ static void capture_complete_callback(void *arg) for (uint8_t output_channel = 0; output_channel < MAX_TIMER_IO_CHANNELS; output_channel++) { bool is_this_timer = timer_index == timer_io_channels[output_channel].timer_index; - uint8_t timer_channel_index = timer_io_channels[output_channel].timer_channel - 1; + uint8_t timer_channel_index = timer_io_channels[output_channel].timer_channel; bool channel_initialized = timer_configs[timer_index].initialized_channels[timer_channel_index]; if (is_this_timer && channel_initialized) { - io_timer_unallocate_channel(output_channel); // Initialize back to DShotInverted to bring IO back to the expected idle state io_timer_channel_init(output_channel, IOTimerChanMode_DshotInverted, NULL, NULL); @@ -532,51 +638,287 @@ static void capture_complete_callback(void *arg) } // Invalidate the dcache to ensure most recent data is available - up_invalidate_dcache((uintptr_t) dshot_capture_buffer, - (uintptr_t) dshot_capture_buffer + DSHOT_CAPTURE_BUFFER_SIZE(MAX_NUM_CHANNELS_PER_TIMER)); + up_invalidate_dcache((uintptr_t) dshot_capture_buffer[timer_index], + (uintptr_t) dshot_capture_buffer[timer_index] + DSHOT_CAPTURE_BUFFER_SIZE(MAX_NUM_CHANNELS_PER_TIMER)); // Process eRPM frames from all channels on this timer process_capture_results(timer_index, capture_channel); - // Enable all channels configured as DShotInverted - io_timer_set_enable(true, IOTimerChanMode_DshotInverted, IO_TIMER_ALL_MODES_CHANNELS); + // Enable this timer's channels as DShotInverted + io_timer_set_enable(true, IOTimerChanMode_DshotInverted, io_timer_get_group(timer_index)); - perf_end(hrt_callback_perf); + perf_end(capture_complete_perf); + + _bdshot_cycle_complete[timer_index] = true; } void process_capture_results(uint8_t timer_index, uint8_t channel_index) { - const unsigned period = calculate_period(timer_index, channel_index); + uint8_t output_channel = output_channel_from_timer_channel(timer_index, channel_index); + + if (output_channel >= MAX_TIMER_IO_CHANNELS) { + return; + } + + uint32_t value = convert_edge_intervals_to_bitstream(timer_index, channel_index); + + // Decode RLL + value = (value ^ (value >> 1)); + + // Decode GCR + uint32_t payload = gcr_decode[value & 0x1f]; + payload |= gcr_decode[(value >> 5) & 0x1f] << 4; + payload |= gcr_decode[(value >> 10) & 0x1f] << 8; + payload |= gcr_decode[(value >> 15) & 0x1f] << 12; + + // Calculate checksum + uint32_t checksum = payload; + checksum = checksum ^ (checksum >> 8); + checksum = checksum ^ (checksum >> NIBBLES_SIZE); + + if ((checksum & 0xF) != 0xF) { + ++read_fail_crc[output_channel]; + + if (_consecutive_failures[output_channel]++ > BDSHOT_OFFLINE_COUNT) { + _consecutive_failures[output_channel] = BDSHOT_OFFLINE_COUNT; + _consecutive_successes[output_channel] = 0; + _bdshot_online[output_channel] = false; + } + + _bdshot_ready_mask |= (1u << output_channel); + return; + } + + ++read_ok[output_channel]; + + if (_consecutive_successes[output_channel]++ > BDSHOT_OFFLINE_COUNT) { + _consecutive_successes[output_channel] = BDSHOT_OFFLINE_COUNT; + _consecutive_failures[output_channel] = 0; + _bdshot_online[output_channel] = true; + } + + // Convert payload into telem type/value + struct BDShotTelemetry packet = {}; + payload = (payload >> 4) & 0xFFF; + decode_dshot_telemetry(payload, &packet); + + hrt_abstime now = hrt_absolute_time(); + + switch (packet.type) { + case DSHOT_EDT_ERPM: { + _erpms[output_channel].erpm = packet.value; + _erpms[output_channel].ready = true; + + uint64_t last_timestamp = _erpms[output_channel].last_timestamp; + float last_rate_hz = _erpms[output_channel].rate_hz; + _erpms[output_channel].rate_hz = calculate_rate_hz(last_timestamp, last_rate_hz, now); + _erpms[output_channel].last_timestamp = now; + break; + } + + case DSHOT_EDT_TEMPERATURE: { + _edt_temp[output_channel].value = packet.value; + _edt_temp[output_channel].ready = true; + + uint64_t last_timestamp = _edt_temp[output_channel].last_timestamp; + float last_rate_hz = _edt_temp[output_channel].rate_hz; + _edt_temp[output_channel].rate_hz = calculate_rate_hz(last_timestamp, last_rate_hz, now); + _edt_temp[output_channel].last_timestamp = now; + break; + } + + case DSHOT_EDT_VOLTAGE: { + _edt_volt[output_channel].value = packet.value; + _edt_volt[output_channel].ready = true; + + uint64_t last_timestamp = _edt_volt[output_channel].last_timestamp; + float last_rate_hz = _edt_volt[output_channel].rate_hz; + _edt_volt[output_channel].rate_hz = calculate_rate_hz(last_timestamp, last_rate_hz, now); + _edt_volt[output_channel].last_timestamp = now; + break; + } + + case DSHOT_EDT_CURRENT: { + _edt_curr[output_channel].value = packet.value; + _edt_curr[output_channel].ready = true; + + uint64_t last_timestamp = _edt_curr[output_channel].last_timestamp; + float last_rate_hz = _edt_curr[output_channel].rate_hz; + _edt_curr[output_channel].rate_hz = calculate_rate_hz(last_timestamp, last_rate_hz, now); + _edt_curr[output_channel].last_timestamp = now; + break; + } + + case DSHOT_EDT_STATE_EVENT: + // TODO: Handle these? + break; + + default: + PX4_DEBUG("unknown EDT type %d", packet.type); + break; + } + + _bdshot_ready_mask |= (1u << output_channel); +} + +float calculate_rate_hz(uint64_t last_timestamp, float last_rate_hz, uint64_t timestamp) +{ + if (last_timestamp == 0 || timestamp <= last_timestamp) { + return last_rate_hz; + } + + uint64_t dt_us = timestamp - last_timestamp; + + float instant_rate = 1000000.0f / dt_us; + + // Simple exponential moving average with fixed alpha + // Alpha = 0.125 (1/8) works well across all rates + float rate_hz = instant_rate * 0.125f + last_rate_hz * 0.875f; + + return rate_hz; +} + +// Converts captured edge timestamps into a raw bit stream. +// Measures the time intervals between signal edges to determine how many consecutive +// 1s or 0s to shift in, alternating the bit value with each edge transition. +// Uses adaptive per-channel timing calibration to handle ESC oscillator variation. +// Returns a 20 bit raw value that still needs RLL and GCR decoding. +uint32_t convert_edge_intervals_to_bitstream(uint8_t timer_index, uint8_t channel_index) +{ + // First pass: collect all intervals + uint32_t intervals[CHANNEL_CAPTURE_BUFF_SIZE] = {}; + unsigned interval_count = 0; + + // We can ignore the very first data point as it's the pulse before it starts. + unsigned previous = dshot_capture_buffer[timer_index][channel_index][1]; + + for (unsigned i = 2; i < CHANNEL_CAPTURE_BUFF_SIZE; ++i) { + if (dshot_capture_buffer[timer_index][channel_index][i] == 0) { + // Once we get zeros we're through + break; + } + + uint32_t interval = dshot_capture_buffer[timer_index][channel_index][i] - previous; + + // Filter out noise: reject intervals <10 or >100 ticks + if (interval >= 10 && interval <= 100) { + intervals[interval_count++] = interval; + } + + previous = dshot_capture_buffer[timer_index][channel_index][i]; + } + + if (interval_count == 0) { + return 0; + } + + // Calibrate base interval using minimum interval (always 1 bit in GCR) + // The shortest valid interval in the frame represents a single bit period + uint32_t min_interval = intervals[0]; + + for (unsigned i = 1; i < interval_count; i++) { + if (intervals[i] < min_interval) { + min_interval = intervals[i]; + } + } uint8_t output_channel = output_channel_from_timer_channel(timer_index, channel_index); - - if (period == 0) { - // If the parsing failed, set the eRPM to 0 - _erpms[output_channel] = 0; - - } else if (period == 65408) { - // Special case for zero motion (e.g., stationary motor) - _erpms[output_channel] = 0; - - } else { - // Convert the period to eRPM - _erpms[output_channel] = (1000000 * 60 / 100 + period / 2) / period; + if (output_channel >= MAX_TIMER_IO_CHANNELS) { + return 0; } - // We set it ready anyway, not to hold up other channels when used in round robin. - _erpms_ready[output_channel] = true; + // Update base interval with low-pass filter (alpha = 1/8) using x8 fixed-point + // base_x8 = base_x8 * 7/8 + min_interval (which is min * 8/8 in x8 representation) + _base_interval_x8[output_channel] = _base_interval_x8[output_channel] - (_base_interval_x8[output_channel] >> 3) + min_interval; + + // Second pass: decode bits using adaptive threshold (integer math) + uint32_t value = 0; + uint32_t high = 1; + unsigned shifted = 0; + + uint32_t base_x8 = _base_interval_x8[output_channel]; + + for (unsigned i = 0; i < interval_count; i++) { + // Convert interval to bit count: bits = interval/base + 0.5, using x8 fixed-point rounding + uint32_t bits = (intervals[i] * 8 + base_x8 / 2) / base_x8; + + // Clamp to valid range (1-4 bits typical in GCR encoding) + if (bits < 1) { + bits = 1; + + } else if (bits > 4) { + bits = 4; + } + + // Shift in the bits + for (unsigned bit = 0; bit < bits; ++bit) { + value = (value << 1) | high; + ++shifted; + } + + high = !high; + } + + // Flexible frame validation: accept 18-24 bits instead of forcing exactly 21 + // This handles ESC timing variation and incomplete frames + if (shifted < 18 || shifted > 24) { + // Frame too short or too long - likely corrupted + return 0; + } + + // Pad to 21 bits for GCR decoder (which expects exactly 21 bits) + if (shifted < 21) { + value <<= (21 - shifted); + + } else if (shifted > 21) { + // Trim excess bits (shouldn't happen often with proper decoding) + value >>= (shifted - 21); + } + + return value; } -/** -* bits 1-11 - throttle value (0-47 are reserved for commands, 48-2047 give 2000 steps of throttle resolution) -* bit 12 - dshot telemetry enable/disable -* bits 13-16 - XOR checksum -**/ -void dshot_motor_data_set(unsigned channel, uint16_t data, bool telemetry) +void decode_dshot_telemetry(uint32_t payload, struct BDShotTelemetry *packet) { + // Extended DShot Telemetry + bool edt_enabled = _edt_enabled; + uint32_t mantissa = payload & 0x01FF; + bool is_telemetry = !(mantissa & 0x0100); // if the msb of the mantissa is zero, then this is an extended telemetry packet + + if (edt_enabled && is_telemetry) { + packet->type = (payload & 0x0F00) >> 8; + packet->value = payload & 0x00FF; // extended telemetry value is 8 bits wide + + } else { + // otherwise it's an eRPM frame + uint8_t exponent = ((payload >> 9) & 0x7); // 3 bit: exponent + uint16_t period = (payload & 0x1FF); // 9 bit: period base + period = period << exponent; // Period in usec + + packet->type = DSHOT_EDT_ERPM; + + if (period == 65408 || period == 0) { + // 65408 is a special case for zero motion (e.g., stationary motor) + packet->value = 0; + + } else { + packet->value = (1000000 * 60 / 100 + period / 2) / period; + } + } +} + +// bits 1-11 - throttle value (0-47 are reserved for commands, 48-2047 give 2000 steps of throttle resolution) +// bit 12 - dshot telemetry enable/disable +// bits 13-16 - XOR checksum +void dshot_motor_data_set(uint8_t channel, uint16_t data, bool telemetry) +{ + if (channel >= MAX_TIMER_IO_CHANNELS) { + return; + } + uint8_t timer_index = timer_io_channels[channel].timer_index; - uint8_t timer_channel_index = timer_io_channels[channel].timer_channel - 1; + uint8_t timer_channel_index = timer_io_channels[channel].timer_channel; bool channel_initialized = timer_configs[timer_index].initialized_channels[timer_channel_index]; if (!channel_initialized) { @@ -591,7 +933,7 @@ void dshot_motor_data_set(unsigned channel, uint16_t data, bool telemetry) uint16_t csum_data = packet; - /* XOR checksum calculation */ + // XOR checksum calculation csum_data >>= NIBBLES_SIZE; for (uint8_t i = 0; i < DSHOT_NUMBER_OF_NIBBLES; i++) { @@ -599,14 +941,13 @@ void dshot_motor_data_set(unsigned channel, uint16_t data, bool telemetry) csum_data >>= NIBBLES_SIZE; } - if (_bidirectional) { + if (_bdshot_channel_mask & (1 << channel)) { packet |= ((~checksum) & 0x0F); } else { packet |= ((checksum) & 0x0F); } - const io_timers_channel_mapping_element_t *mapping = &io_timers_channel_mapping.element[timer_index]; uint8_t num_motors = mapping->channel_count_including_gaps; uint8_t timer_channel = timer_io_channels[channel].timer_channel - mapping->lowest_timer_channel; @@ -620,209 +961,154 @@ void dshot_motor_data_set(unsigned channel, uint16_t data, bool telemetry) int up_dshot_arm(bool armed) { - return io_timer_set_enable(armed, _bidirectional ? IOTimerChanMode_DshotInverted : IOTimerChanMode_Dshot, - IO_TIMER_ALL_MODES_CHANNELS); -} + int ret = PX4_OK; -int up_bdshot_num_erpm_ready(void) -{ - int num_ready = 0; - - for (unsigned i = 0; i < MAX_TIMER_IO_CHANNELS; ++i) { - if (_erpms_ready[i]) { - ++num_ready; - } + for (int timer_index = 0; timer_index < MAX_IO_TIMERS; timer_index++) { + io_timer_channel_mode_t mode = timer_configs[timer_index].bidirectional ? IOTimerChanMode_DshotInverted : IOTimerChanMode_Dshot; + ret |= io_timer_set_enable(armed, mode, io_timer_get_group(timer_index)); } - return num_ready; + return ret; } -int up_bdshot_get_erpm(uint8_t output_channel, int *erpm) +uint16_t up_bdshot_get_ready_mask(void) { - uint8_t timer_index = timer_io_channels[output_channel].timer_index; - uint8_t timer_channel_index = timer_io_channels[output_channel].timer_channel - 1; - bool channel_initialized = timer_configs[timer_index].initialized_channels[timer_channel_index]; + return _bdshot_ready_mask; +} - if (channel_initialized) { - *erpm = _erpms[output_channel]; - _erpms_ready[output_channel] = false; - return PX4_OK; +int up_bdshot_num_errors(uint8_t channel) +{ + if (channel >= MAX_TIMER_IO_CHANNELS) { + return 0; } - // this channel is not configured for dshot - return PX4_ERROR; + return read_fail_crc[channel]; } -int up_bdshot_channel_status(uint8_t channel) +int up_bdshot_get_erpm(uint8_t channel, int *erpm) { + int status = PX4_ERROR; + + if (channel >= MAX_TIMER_IO_CHANNELS) { + return status; + } + uint8_t timer_index = timer_io_channels[channel].timer_index; - uint8_t timer_channel_index = timer_io_channels[channel].timer_channel - 1; + uint8_t timer_channel_index = timer_io_channels[channel].timer_channel; bool channel_initialized = timer_configs[timer_index].initialized_channels[timer_channel_index]; - // TODO: track that each channel is communicating using the decode stats - if (channel_initialized) { - return 1; + if (channel_initialized && _erpms[channel].ready) { + *erpm = _erpms[channel].erpm; + status = PX4_OK; } - return 0; + // Mark sample read — only for channels with capture support + if (_bdshot_capture_supported[channel]) { + _bdshot_ready_mask &= ~(1u << channel); + } + + return status; +} + +int up_bdshot_get_extended_telemetry(uint8_t channel, int type, uint8_t *value) +{ + int result = PX4_ERROR; + + if (channel >= MAX_TIMER_IO_CHANNELS) { + return result; + } + + switch (type) { + case DSHOT_EDT_TEMPERATURE: + if (_edt_temp[channel].ready) { + *value = _edt_temp[channel].value; + _edt_temp[channel].ready = false; + result = PX4_OK; + } + + break; + + case DSHOT_EDT_VOLTAGE: + if (_edt_volt[channel].ready) { + *value = _edt_volt[channel].value; + _edt_volt[channel].ready = false; + result = PX4_OK; + } + + break; + + case DSHOT_EDT_CURRENT: + if (_edt_curr[channel].ready) { + *value = _edt_curr[channel].value; + _edt_curr[channel].ready = false; + result = PX4_OK; + } + + break; + + default: + break; + } + + return result; +} + +int up_bdshot_channel_online(uint8_t channel) +{ + if (channel >= MAX_TIMER_IO_CHANNELS) { + return 0; + } + + return _bdshot_online[channel]; +} + +int up_bdshot_channel_capture_supported(uint8_t channel) +{ + if (channel >= MAX_TIMER_IO_CHANNELS) { + return 0; + } + + return _bdshot_capture_supported[channel]; } void up_bdshot_status(void) { PX4_INFO("dshot driver stats:"); - if (_bidirectional) { - PX4_INFO("Bidirectional DShot enabled"); - } + if (_bdshot_channel_mask) { + PX4_INFO("BDShot channel mask: 0x%04x", (unsigned)_bdshot_channel_mask); - uint8_t timer_index = _bidi_timer_index; + // Always show read counters for BDShot + for (int i = 0; i < MAX_TIMER_IO_CHANNELS; i++) { + if (_bdshot_channel_mask & (1 << i)) { + if (_bdshot_capture_supported[i]) { + PX4_INFO("Ch%u: read_ok %lu, fail_crc %lu", + i, read_ok[i], read_fail_crc[i]); - for (uint8_t timer_channel_index = 0; timer_channel_index < MAX_NUM_CHANNELS_PER_TIMER; timer_channel_index++) { - bool channel_initialized = timer_configs[timer_index].initialized_channels[timer_channel_index]; - - if (channel_initialized) { - PX4_INFO("Timer %u, Channel %u: read %lu, failed nibble %lu, failed CRC %lu, invalid/zero %lu", - timer_index, timer_channel_index, - read_ok[timer_channel_index], - read_fail_nibble[timer_channel_index], - read_fail_crc[timer_channel_index], - read_fail_zero[timer_channel_index]); + } else { + PX4_INFO("Ch%u: no DMA for capture", i); + } + } } } -} -uint8_t nibbles_from_mapped(uint8_t mapped) -{ - switch (mapped) { - case 0x19: - return 0x00; + if (_edt_enabled) { + PX4_INFO("BDShot EDT"); - case 0x1B: - return 0x01; - - case 0x12: - return 0x02; - - case 0x13: - return 0x03; - - case 0x1D: - return 0x04; - - case 0x15: - return 0x05; - - case 0x16: - return 0x06; - - case 0x17: - return 0x07; - - case 0x1a: - return 0x08; - - case 0x09: - return 0x09; - - case 0x0A: - return 0x0A; - - case 0x0B: - return 0x0B; - - case 0x1E: - return 0x0C; - - case 0x0D: - return 0x0D; - - case 0x0E: - return 0x0E; - - case 0x0F: - return 0x0F; - - default: - // Unknown mapped - return 0xFF; - } -} - -unsigned calculate_period(uint8_t timer_index, uint8_t channel_index) -{ - uint32_t value = 0; - uint32_t high = 1; // We start off with high - unsigned shifted = 0; - - // We can ignore the very first data point as it's the pulse before it starts. - unsigned previous = dshot_capture_buffer[channel_index][1]; - - // Loop through the capture buffer for the specified channel - for (unsigned i = 2; i < CHANNEL_CAPTURE_BUFF_SIZE; ++i) { - - if (dshot_capture_buffer[channel_index][i] == 0) { - // Once we get zeros we're through - break; + for (int i = 0; i < MAX_TIMER_IO_CHANNELS; i++) { + if (_bdshot_online[i]) { + PX4_INFO("Ch%d: eRPM: %dHz Temp: %dC (%.1fHz) Volt: %.2fV (%.1fHz) Curr: %.1fA (%.1fHz)", + i, + (int)_erpms[i].rate_hz, + (int)_edt_temp[i].value, + (double)_edt_temp[i].rate_hz, + (double)_edt_volt[i].value * 0.25, + (double)_edt_volt[i].rate_hz, + (double)_edt_curr[i].value * 0.5, + (double)_edt_curr[i].rate_hz); + } } - - // This seemss to work with dshot 150, 300, 600, 1200 - // The values were found by trial and error to get the quantization just right. - const uint32_t bits = (dshot_capture_buffer[channel_index][i] - previous + 5) / 20; - - // Convert GCR encoded pulse train into value - for (unsigned bit = 0; bit < bits; ++bit) { - value = (value << 1) | high; - ++shifted; - } - - // The next edge toggles. - high = !high; - - previous = dshot_capture_buffer[channel_index][i]; } - - if (shifted == 0) { - // no data yet, or this time - ++read_fail_zero[channel_index]; - return 0; - } - - // We need to make sure we shifted 21 times. We might have missed some low "pulses" at the very end. - value <<= (21 - shifted); - - // From GCR to eRPM according to: - // https://brushlesswhoop.com/dshot-and-bidirectional-dshot/#erpm-transmission - unsigned gcr = (value ^ (value >> 1)); - - uint32_t data = 0; - - // 20bits -> 5 mapped -> 4 nibbles - for (unsigned i = 0; i < 4; ++i) { - uint32_t nibble = nibbles_from_mapped(gcr & 0x1F) << (4 * i); - - if (nibble == 0xFF) { - ++read_fail_nibble[channel_index];; - return 0; - } - - data |= nibble; - gcr >>= 5; - } - - unsigned shift = (data & 0xE000) >> 13; - unsigned period = ((data & 0x1FF0) >> 4) << shift; - unsigned crc = data & 0xF; - - unsigned payload = (data & 0xFFF0) >> 4; - unsigned calculated_crc = (~(payload ^ (payload >> 4) ^ (payload >> 8))) & 0x0F; - - if (crc != calculated_crc) { - ++read_fail_crc[channel_index];; - return 0; - } - - ++read_ok[channel_index];; - return period; } #endif diff --git a/platforms/nuttx/src/px4/stm/stm32_common/include/px4_arch/hw_description.h b/platforms/nuttx/src/px4/stm/stm32_common/include/px4_arch/hw_description.h index c28fa7e86c..948be5e1bc 100644 --- a/platforms/nuttx/src/px4/stm/stm32_common/include/px4_arch/hw_description.h +++ b/platforms/nuttx/src/px4/stm/stm32_common/include/px4_arch/hw_description.h @@ -102,7 +102,7 @@ enum Timer { #endif }; enum Channel { - Channel1 = 1, + Channel1 = 0, Channel2, Channel3, Channel4, diff --git a/platforms/nuttx/src/px4/stm/stm32_common/include/px4_arch/io_timer_hw_description.h b/platforms/nuttx/src/px4/stm/stm32_common/include/px4_arch/io_timer_hw_description.h index bdd6feec25..e54f4b18b4 100644 --- a/platforms/nuttx/src/px4/stm/stm32_common/include/px4_arch/io_timer_hw_description.h +++ b/platforms/nuttx/src/px4/stm/stm32_common/include/px4_arch/io_timer_hw_description.h @@ -52,29 +52,27 @@ static inline constexpr timer_io_channels_t initIOTimerChannel(const io_timers_t // TODO: here we could validate that pin actually maps to the given timer channel + ret.timer_channel = (uint8_t)timer.channel; + switch (timer.channel) { case Timer::Channel1: ret.ccr_offset = STM32_GTIM_CCR1_OFFSET; ret.masks = GTIM_SR_CC1IF | GTIM_SR_CC1OF; - ret.timer_channel = 1; break; case Timer::Channel2: ret.ccr_offset = STM32_GTIM_CCR2_OFFSET; ret.masks = GTIM_SR_CC2IF | GTIM_SR_CC2OF; - ret.timer_channel = 2; break; case Timer::Channel3: ret.ccr_offset = STM32_GTIM_CCR3_OFFSET; ret.masks = GTIM_SR_CC3IF | GTIM_SR_CC3OF; - ret.timer_channel = 3; break; case Timer::Channel4: ret.ccr_offset = STM32_GTIM_CCR4_OFFSET; ret.masks = GTIM_SR_CC4IF | GTIM_SR_CC4OF; - ret.timer_channel = 4; break; } diff --git a/platforms/nuttx/src/px4/stm/stm32_common/io_pins/input_capture.c b/platforms/nuttx/src/px4/stm/stm32_common/io_pins/input_capture.c index 349393c28d..0314f1a3f5 100644 --- a/platforms/nuttx/src/px4/stm/stm32_common/io_pins/input_capture.c +++ b/platforms/nuttx/src/px4/stm/stm32_common/io_pins/input_capture.c @@ -203,22 +203,22 @@ int up_input_capture_get_filter(unsigned channel, capture_filter_t *filter) switch (timer_io_channels[channel].timer_channel) { - case 1: + case 0: rvalue = rCCMR1(timer) & GTIM_CCMR1_IC1F_MASK; *filter = (rvalue >> GTIM_CCMR1_IC1F_SHIFT); break; - case 2: + case 1: rvalue = rCCMR1(timer) & GTIM_CCMR1_IC2F_MASK; *filter = (rvalue >> GTIM_CCMR1_IC2F_SHIFT); break; - case 3: + case 2: rvalue = rCCMR2(timer) & GTIM_CCMR2_IC3F_MASK; *filter = (rvalue >> GTIM_CCMR2_IC3F_SHIFT); break; - case 4: + case 3: rvalue = rCCMR2(timer) & GTIM_CCMR2_IC4F_MASK; *filter = (rvalue >> GTIM_CCMR2_IC4F_SHIFT); break; @@ -255,25 +255,25 @@ int up_input_capture_set_filter(unsigned channel, capture_filter_t filter) switch (timer_io_channels[channel].timer_channel) { - case 1: + case 0: rvalue = rCCMR1(timer) & ~GTIM_CCMR1_IC1F_MASK; rvalue |= (filter << GTIM_CCMR1_IC1F_SHIFT); rCCMR1(timer) = rvalue; break; - case 2: + case 1: rvalue = rCCMR1(timer) & ~GTIM_CCMR1_IC2F_MASK; rvalue |= (filter << GTIM_CCMR1_IC2F_SHIFT); rCCMR1(timer) = rvalue; break; - case 3: + case 2: rvalue = rCCMR2(timer) & ~GTIM_CCMR2_IC3F_MASK; rvalue |= (filter << GTIM_CCMR2_IC3F_SHIFT); rCCMR2(timer) = rvalue; break; - case 4: + case 3: rvalue = rCCMR2(timer) & ~GTIM_CCMR2_IC4F_MASK; rvalue |= (filter << GTIM_CCMR2_IC4F_SHIFT); rCCMR2(timer) = rvalue; @@ -309,21 +309,21 @@ int up_input_capture_get_trigger(unsigned channel, input_capture_edge *edge) switch (timer_io_channels[channel].timer_channel) { - case 1: + case 0: rvalue = rCCER(timer) & (GTIM_CCER_CC1P | GTIM_CCER_CC1NP); break; - case 2: + case 1: rvalue = rCCER(timer) & (GTIM_CCER_CC2P | GTIM_CCER_CC2NP); rvalue >>= 4; break; - case 3: + case 2: rvalue = rCCER(timer) & (GTIM_CCER_CC3P | GTIM_CCER_CC3NP); rvalue >>= 8; break; - case 4: + case 3: rvalue = rCCER(timer) & (GTIM_CCER_CC4P | GTIM_CCER_CC4NP); rvalue >>= 12; break; @@ -400,28 +400,28 @@ int up_input_capture_set_trigger(unsigned channel, input_capture_edge edge) switch (timer_io_channels[channel].timer_channel) { - case 1: + case 0: rvalue = rCCER(timer); rvalue &= ~(GTIM_CCER_CC1P | GTIM_CCER_CC1NP); rvalue |= edge_bits; rCCER(timer) = rvalue; break; - case 2: + case 1: rvalue = rCCER(timer); rvalue &= ~(GTIM_CCER_CC2P | GTIM_CCER_CC2NP); rvalue |= (edge_bits << 4); rCCER(timer) = rvalue; break; - case 3: + case 2: rvalue = rCCER(timer); rvalue &= ~(GTIM_CCER_CC3P | GTIM_CCER_CC3NP); rvalue |= edge_bits << 8; rCCER(timer) = rvalue; break; - case 4: + case 3: rvalue = rCCER(timer); rvalue &= ~(GTIM_CCER_CC4P | GTIM_CCER_CC4NP); rvalue |= edge_bits << 12; diff --git a/platforms/nuttx/src/px4/stm/stm32_common/io_pins/io_timer.c b/platforms/nuttx/src/px4/stm/stm32_common/io_pins/io_timer.c index 44a82c1652..5c9eb0b8af 100644 --- a/platforms/nuttx/src/px4/stm/stm32_common/io_pins/io_timer.c +++ b/platforms/nuttx/src/px4/stm/stm32_common/io_pins/io_timer.c @@ -357,7 +357,7 @@ int io_timer_validate_channel_index(unsigned channel) { int rv = -EINVAL; - if (channel < MAX_TIMER_IO_CHANNELS && timer_io_channels[channel].timer_channel != 0) { + if (channel < MAX_TIMER_IO_CHANNELS) { unsigned timer = timer_io_channels[channel].timer_index; @@ -606,7 +606,7 @@ int io_timer_set_dshot_burst_mode(uint8_t timer, unsigned dshot_pwm_freq, uint8_ rEGR(timer) = ATIM_EGR_UG; // find the lowest channel index for the timer (they are not necessarily in ascending order) - unsigned lowest_timer_channel = 4; + unsigned lowest_timer_channel = 3; uint32_t first_channel_index = io_timers_channel_mapping.element[timer].first_channel_index; uint32_t last_channel_index = first_channel_index + io_timers_channel_mapping.element[timer].channel_count; @@ -619,13 +619,13 @@ int io_timer_set_dshot_burst_mode(uint8_t timer, unsigned dshot_pwm_freq, uint8_ uint32_t start_ccr_register = 0; switch (lowest_timer_channel) { - case 1: start_ccr_register = TIM_DMABASE_CCR1; break; + case 0: start_ccr_register = TIM_DMABASE_CCR1; break; - case 2: start_ccr_register = TIM_DMABASE_CCR2; break; + case 1: start_ccr_register = TIM_DMABASE_CCR2; break; - case 3: start_ccr_register = TIM_DMABASE_CCR3; break; + case 2: start_ccr_register = TIM_DMABASE_CCR3; break; - case 4: start_ccr_register = TIM_DMABASE_CCR4; break; + case 3: start_ccr_register = TIM_DMABASE_CCR4; break; } rDCR(timer) = start_ccr_register | tim_dma_burst_length; @@ -934,9 +934,9 @@ int io_timer_channel_init(unsigned channel, io_timer_channel_mode_t mode, /* configure the channel */ - uint32_t shifts = timer_io_channels[channel].timer_channel - 1; + uint32_t shifts = timer_io_channels[channel].timer_channel; - /* Map shifts timer channel 1-4 to 0-3 */ + /* Map shifts timer channel 0-3 */ uint32_t ccmr_offset = STM32_GTIM_CCMR1_OFFSET + ((shifts >> 1) * sizeof(uint32_t)); uint32_t ccr_offset = STM32_GTIM_CCR1_OFFSET + (shifts * sizeof(uint32_t)); @@ -1047,7 +1047,7 @@ int io_timer_set_enable(bool state, io_timer_channel_mode_t mode, io_timer_chann for (int chan_index = 0; masks != 0 && chan_index < MAX_TIMER_IO_CHANNELS; chan_index++) { if (masks & (1 << chan_index)) { masks &= ~(1 << chan_index); - uint32_t shifts = timer_io_channels[chan_index].timer_channel - 1; + uint32_t shifts = timer_io_channels[chan_index].timer_channel; uint32_t timer = channels_timer(chan_index); action_cache[timer].base = io_timers[timer].base; action_cache[timer].ccer_clearbits |= CCER_C1_INIT << (shifts * CCER_C1_NUM_BITS); diff --git a/platforms/nuttx/src/px4/stm/stm32_common/led_pwm/led_pwm.cpp b/platforms/nuttx/src/px4/stm/stm32_common/led_pwm/led_pwm.cpp index 158d75b8da..bd0fd0b380 100644 --- a/platforms/nuttx/src/px4/stm/stm32_common/led_pwm/led_pwm.cpp +++ b/platforms/nuttx/src/px4/stm/stm32_common/led_pwm/led_pwm.cpp @@ -166,7 +166,7 @@ led_pwm_channel_init(unsigned channel) { /* Only initialize used channels */ - if (led_pwm_channels[channel].timer_channel) { + if (led_pwm_channels[channel].gpio_out) { unsigned timer = led_pwm_channels[channel].timer_index; @@ -177,22 +177,22 @@ led_pwm_channel_init(unsigned channel) /* configure the channel */ switch (led_pwm_channels[channel].timer_channel) { - case 1: + case 0: rCCMR1(timer) |= (GTIM_CCMR_MODE_PWM1 << GTIM_CCMR1_OC1M_SHIFT) | GTIM_CCMR1_OC1PE; rCCER(timer) |= polarity | GTIM_CCER_CC1E; break; - case 2: + case 1: rCCMR1(timer) |= (GTIM_CCMR_MODE_PWM1 << GTIM_CCMR1_OC2M_SHIFT) | GTIM_CCMR1_OC2PE; rCCER(timer) |= polarity | GTIM_CCER_CC2E; break; - case 3: + case 2: rCCMR2(timer) |= (GTIM_CCMR_MODE_PWM1 << GTIM_CCMR2_OC3M_SHIFT) | GTIM_CCMR2_OC3PE; rCCER(timer) |= polarity | GTIM_CCER_CC3E; break; - case 4: + case 3: rCCMR2(timer) |= (GTIM_CCMR_MODE_PWM1 << GTIM_CCMR2_OC4M_SHIFT) | GTIM_CCMR2_OC4PE; rCCER(timer) |= polarity | GTIM_CCER_CC4E; break; @@ -226,19 +226,19 @@ led_pwm_servo_set(unsigned channel, uint8_t cvalue) switch (led_pwm_channels[channel].timer_channel) { - case 1: + case 0: rCCR1(timer) = value; break; - case 2: + case 1: rCCR2(timer) = value; break; - case 3: + case 2: rCCR3(timer) = value; break; - case 4: + case 3: rCCR4(timer) = value; break; @@ -260,25 +260,25 @@ unsigned led_pwm_servo_get(unsigned channel) /* test timer for validity */ if ((led_pwm_timers[timer].base == 0) || - (led_pwm_channels[channel].timer_channel == 0)) { + (led_pwm_channels[channel].gpio_out == 0)) { return 0; } /* configure the channel */ switch (led_pwm_channels[channel].timer_channel) { - case 1: + case 0: value = rCCR1(timer); break; - case 2: + case 1: value = rCCR2(timer); break; - case 3: + case 2: value = rCCR3(timer); break; - case 4: + case 3: value = rCCR4(timer); break; } diff --git a/platforms/nuttx/src/px4/stm/stm32h7/include/px4_arch/io_timer_hw_description.h b/platforms/nuttx/src/px4/stm/stm32h7/include/px4_arch/io_timer_hw_description.h index 20886b995c..b0f86a31a5 100644 --- a/platforms/nuttx/src/px4/stm/stm32h7/include/px4_arch/io_timer_hw_description.h +++ b/platforms/nuttx/src/px4/stm/stm32h7/include/px4_arch/io_timer_hw_description.h @@ -93,29 +93,27 @@ static inline constexpr timer_io_channels_t initIOTimerChannel(const io_timers_t { timer_io_channels_t ret = initIOTimerGPIOInOut(timer, pin); + ret.timer_channel = (uint8_t)timer.channel; + switch (timer.channel) { case Timer::Channel1: ret.ccr_offset = STM32_GTIM_CCR1_OFFSET; ret.masks = GTIM_SR_CC1IF | GTIM_SR_CC1OF; - ret.timer_channel = 1; break; case Timer::Channel2: ret.ccr_offset = STM32_GTIM_CCR2_OFFSET; ret.masks = GTIM_SR_CC2IF | GTIM_SR_CC2OF; - ret.timer_channel = 2; break; case Timer::Channel3: ret.ccr_offset = STM32_GTIM_CCR3_OFFSET; ret.masks = GTIM_SR_CC3IF | GTIM_SR_CC3OF; - ret.timer_channel = 3; break; case Timer::Channel4: ret.ccr_offset = STM32_GTIM_CCR4_OFFSET; ret.masks = GTIM_SR_CC4IF | GTIM_SR_CC4OF; - ret.timer_channel = 4; break; } diff --git a/platforms/posix/CMakeLists.txt b/platforms/posix/CMakeLists.txt index 5b94634f57..594fa95c99 100644 --- a/platforms/posix/CMakeLists.txt +++ b/platforms/posix/CMakeLists.txt @@ -23,6 +23,9 @@ px4_posix_generate_alias( add_definitions(-DPX4_SOURCE_DIR="${PX4_SOURCE_DIR}" -DPX4_BINARY_DIR="${PX4_BINARY_DIR}") +# PX4_INSTALL_PREFIX is set by cmake/package.cmake after this file is processed. +# It is passed via target_compile_definitions on the px4 target from package.cmake. + add_executable(px4 src/px4/common/main.cpp apps.cpp @@ -80,9 +83,16 @@ target_link_libraries(px4 PRIVATE uORB) # install # -# TODO: extend to snapdragon +# Detect dpkg early so install rules can branch on it. +# find_program caches the result, so the later call in package.cmake is a no-op. +find_program(DPKG_PROGRAM dpkg) -# px4 dirs +# Generic install rules (skipped when board provides its own install.cmake) +if(NOT EXISTS "${PX4_BOARD_DIR}/cmake/install.cmake") + +# Legacy top-level install (posix-configs, test data, etc into px4/ prefix). +# Skip when building .deb packages which use a clean /opt/px4-sitl{,-sih}/ layout. +if(NOT DPKG_PROGRAM) install( DIRECTORY ${PROJECT_SOURCE_DIR}/posix-configs @@ -93,6 +103,9 @@ install( ${PROJECT_NAME} USE_SOURCE_PERMISSIONS ) +endif() + +endif() # NOT board install.cmake # Module Symlinks px4_posix_generate_symlinks( @@ -112,6 +125,11 @@ if(EXISTS "${PX4_BOARD_DIR}/cmake/upload.cmake") include(${PX4_BOARD_DIR}/cmake/upload.cmake) endif() +# board defined install rules for .deb packaging +if(EXISTS "${PX4_BOARD_DIR}/cmake/install.cmake") + include(${PX4_BOARD_DIR}/cmake/install.cmake) +endif() + # board defined link libraries if(EXISTS "${PX4_BOARD_DIR}/cmake/link_libraries.cmake") include(${PX4_BOARD_DIR}/cmake/link_libraries.cmake) @@ -155,6 +173,11 @@ elseif("${PX4_BOARD}" MATCHES "sitl") # install + # Legacy install rules (used by ROS launch, existing CPack tarball workflow). + # Skip when building .deb packages: the .deb rules below provide a clean + # /opt/px4-sitl{,-sih}/ layout and these would duplicate/bloat the package. + if(NOT DPKG_PROGRAM) + # px4 dirs install( DIRECTORY @@ -219,4 +242,82 @@ elseif("${PX4_BOARD}" MATCHES "sitl") OPTIONAL ) + endif() # NOT DPKG_PROGRAM + + #################################################################### + # Install rules for .deb package (only when dpkg is available) + #################################################################### + if(DPKG_PROGRAM AND NOT CMAKE_C_COMPILER MATCHES "emcc$") + + # px4 binary + install(TARGETS px4 + RUNTIME DESTINATION bin + ) + + # module symlinks and alias script + install( + DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ + DESTINATION bin + USE_SOURCE_PERMISSIONS + FILES_MATCHING + PATTERN "px4-*" + PATTERN "px4-alias.sh" + ) + + # ROMFS (init scripts, mixers, etc.) + install( + DIRECTORY ${PX4_BINARY_DIR}/etc + DESTINATION . + USE_SOURCE_PERMISSIONS + ) + + if(CONFIG_MODULES_SIMULATION_GZ_BRIDGE) + # Gazebo wrapper script (sets GZ_SIM_* env vars pointing at installed resources) + install( + PROGRAMS ${PROJECT_SOURCE_DIR}/Tools/packaging/px4-gazebo.sh + DESTINATION bin + RENAME px4-gazebo + ) + endif() + + if(CONFIG_MODULES_SIMULATION_GZ_BRIDGE) + # Gazebo models + install( + DIRECTORY ${PROJECT_SOURCE_DIR}/Tools/simulation/gz/models + DESTINATION share/gz + OPTIONAL + ) + + # Gazebo worlds + install( + DIRECTORY ${PROJECT_SOURCE_DIR}/Tools/simulation/gz/worlds + DESTINATION share/gz + OPTIONAL + ) + + # Gazebo server config + install( + FILES ${PROJECT_SOURCE_DIR}/Tools/simulation/gz/server.config + DESTINATION share/gz + OPTIONAL + ) + + # Gazebo plugins (built .so files) + install( + DIRECTORY ${CMAKE_BINARY_DIR}/src/modules/simulation/gz_plugins/ + DESTINATION lib/gz/plugins + FILES_MATCHING PATTERN "*.so" + PATTERN "CMakeFiles" EXCLUDE + ) + + # OpticalFlow external library (runtime dep of OpticalFlowSystem plugin) + install( + FILES ${CMAKE_BINARY_DIR}/OpticalFlow/install/lib/libOpticalFlow.so + DESTINATION lib/gz/plugins + OPTIONAL + ) + endif() + + endif() # DPKG_PROGRAM AND NOT emcc + endif() diff --git a/platforms/posix/cmake/px4_impl_os.cmake b/platforms/posix/cmake/px4_impl_os.cmake index 49c3813bda..9390318061 100644 --- a/platforms/posix/cmake/px4_impl_os.cmake +++ b/platforms/posix/cmake/px4_impl_os.cmake @@ -31,6 +31,24 @@ # ############################################################################ +# Homebrew's qt@5 is keg-only on macOS. gz-gui8 (pulled in by gz-sim8 +# from the Gazebo simulation modules) links against Qt5 and CMake +# cannot locate it without a prefix hint. This file is included early +# from the root CMakeLists.txt, before any add_subdirectory descends +# into find_package(gz-sim8). Only runs when the user has not already +# set Qt5_DIR. +if(APPLE AND NOT DEFINED Qt5_DIR) + execute_process( + COMMAND brew --prefix qt@5 + OUTPUT_VARIABLE _brew_qt5_prefix + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_QUIET + ) + if(_brew_qt5_prefix AND EXISTS "${_brew_qt5_prefix}/lib/cmake/Qt5") + list(APPEND CMAKE_PREFIX_PATH "${_brew_qt5_prefix}") + endif() +endif() + #============================================================================= # # Defined functions in this file @@ -225,6 +243,12 @@ function(px4_os_add_flags) if(UNIX AND APPLE) add_definitions(-D__PX4_DARWIN) + # Silence Apple ld warning about duplicate static libs. CMake intentionally + # re-emits them to resolve circular deps (px4_layer, px4_work_queue, + # px4_daemon, lockstep_scheduler). See also CMAKE_*_ARCHIVE_FINISH override + # at the top of the root CMakeLists.txt for the matching ranlib silence. + add_link_options(LINKER:-no_warn_duplicate_libraries) + elseif(CYGWIN) add_definitions( -D__PX4_CYGWIN diff --git a/platforms/posix/cmake/sitl_tests.cmake b/platforms/posix/cmake/sitl_tests.cmake index fdd8a5300e..01dc680aa6 100644 --- a/platforms/posix/cmake/sitl_tests.cmake +++ b/platforms/posix/cmake/sitl_tests.cmake @@ -72,20 +72,6 @@ endforeach() -# Mavlink test requires mavlink running -add_test(NAME sitl-mavlink - COMMAND $ - -s ${PX4_SOURCE_DIR}/posix-configs/SITL/init/test/test_mavlink - -t ${PX4_SOURCE_DIR}/test_data - ${PX4_SOURCE_DIR}/ROMFS/px4fmu_test - WORKING_DIRECTORY ${SITL_WORKING_DIR} -) - -set_tests_properties(sitl-mavlink PROPERTIES FAIL_REGULAR_EXPRESSION "FAIL") -set_tests_properties(sitl-mavlink PROPERTIES PASS_REGULAR_EXPRESSION "ALL TESTS PASSED") -sanitizer_fail_test_on_error(sitl-mavlink) - - # IMU filtering add_test(NAME sitl-imu_filtering COMMAND $ diff --git a/src/drivers/differential_pressure/asp5033/parameters.c b/platforms/posix/include/sys/boardctl.h similarity index 87% rename from src/drivers/differential_pressure/asp5033/parameters.c rename to platforms/posix/include/sys/boardctl.h index 07f91aac3d..2024c08f65 100644 --- a/src/drivers/differential_pressure/asp5033/parameters.c +++ b/platforms/posix/include/sys/boardctl.h @@ -1,6 +1,6 @@ /**************************************************************************** * - * Copyright (c) 2023 PX4 Development Team. All rights reserved. + * Copyright (C) 2025-2026 ModalAI, Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -31,11 +31,14 @@ * ****************************************************************************/ -/** - * ASP5033 differential pressure sensor (external I2C) - * - * @reboot_required true - * @group Sensors - * @boolean - */ -PARAM_DEFINE_INT32(SENS_EN_ASP5033, 0); +#pragma once + +#include + +#if defined(CONFIG_BOARDCTL_RESET) + +#define BOARDIOC_RESET (1<<0) + +extern "C" __EXPORT int boardctl(unsigned int cmd, uintptr_t arg); + +#endif diff --git a/platforms/posix/src/px4/common/SerialImpl.cpp b/platforms/posix/src/px4/common/SerialImpl.cpp index 4859832829..a2e11c4100 100644 --- a/platforms/posix/src/px4/common/SerialImpl.cpp +++ b/platforms/posix/src/px4/common/SerialImpl.cpp @@ -128,10 +128,10 @@ bool SerialImpl::configure() struct termios uart_config; - int termios_state; + int termios_state = tcgetattr(_serial_fd, &uart_config); /* fill the struct for the new configuration */ - if ((termios_state = tcgetattr(_serial_fd, &uart_config)) < 0) { + if (termios_state < 0) { PX4_ERR("ERR: %d (tcgetattr)", termios_state); return false; } @@ -199,17 +199,23 @@ bool SerialImpl::configure() } /* set baud rate */ - if ((termios_state = cfsetispeed(&uart_config, speed)) < 0) { + termios_state = cfsetispeed(&uart_config, speed); + + if (termios_state < 0) { PX4_ERR("ERR: %d (cfsetispeed)", termios_state); return false; } - if ((termios_state = cfsetospeed(&uart_config, speed)) < 0) { + termios_state = cfsetospeed(&uart_config, speed); + + if (termios_state < 0) { PX4_ERR("ERR: %d (cfsetospeed)", termios_state); return false; } - if ((termios_state = tcsetattr(_serial_fd, TCSANOW, &uart_config)) < 0) { + termios_state = tcsetattr(_serial_fd, TCSANOW, &uart_config); + + if (termios_state < 0) { PX4_ERR("ERR: %d (tcsetattr)", termios_state); return false; } diff --git a/platforms/posix/src/px4/common/lockstep_scheduler/CMakeLists.txt b/platforms/posix/src/px4/common/lockstep_scheduler/CMakeLists.txt index 7b4798c600..1adf45fd94 100644 --- a/platforms/posix/src/px4/common/lockstep_scheduler/CMakeLists.txt +++ b/platforms/posix/src/px4/common/lockstep_scheduler/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.5) +cmake_minimum_required(VERSION 3.10) # We want to test the lockstep schedule even if it is not used otherwise. px4_add_library(lockstep_scheduler diff --git a/platforms/posix/src/px4/common/lockstep_scheduler/build-and-test.sh b/platforms/posix/src/px4/common/lockstep_scheduler/build-and-test.sh deleted file mode 100755 index dd92e0a764..0000000000 --- a/platforms/posix/src/px4/common/lockstep_scheduler/build-and-test.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env bash - -set -e - -rm -rf build - -(mkdir -p build && cd build && CXX=g++ cmake .. && make -j8 && time $@ ./test/lockstep_scheduler_test) -rm -rf build - -(mkdir -p build && cd build && CXX=clang++ cmake .. && make -j8 && time $@ ./test/lockstep_scheduler_test) -rm -rf build diff --git a/platforms/posix/src/px4/common/lockstep_scheduler/test/CMakeLists.txt b/platforms/posix/src/px4/common/lockstep_scheduler/test/CMakeLists.txt index 4b30be206b..ffadd34e9d 100644 --- a/platforms/posix/src/px4/common/lockstep_scheduler/test/CMakeLists.txt +++ b/platforms/posix/src/px4/common/lockstep_scheduler/test/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.5) +cmake_minimum_required(VERSION 3.10) add_executable(lockstep_scheduler_test src/lockstep_scheduler_test.cpp diff --git a/platforms/posix/src/px4/common/main.cpp b/platforms/posix/src/px4/common/main.cpp index 87af3b7344..e34452d5b2 100644 --- a/platforms/posix/src/px4/common/main.cpp +++ b/platforms/posix/src/px4/common/main.cpp @@ -259,6 +259,32 @@ int main(int argc, char **argv) PX4_INFO("instance: %i", instance); } +#if defined(PX4_INSTALL_PREFIX) + + // When installed as a .deb package, default to the baked-in install prefix. + // Working directory defaults to XDG_DATA_HOME/px4/rootfs/. + if (commands_file.empty() && data_path.empty() && working_directory.empty() + && dir_exists(PX4_INSTALL_PREFIX"/etc") + ) { + data_path = PX4_INSTALL_PREFIX"/etc"; + + const char *xdg_data_home = getenv("XDG_DATA_HOME"); + std::string state_base; + + if (xdg_data_home) { + state_base = xdg_data_home; + + } else { + const char *home = getenv("HOME"); + state_base = std::string(home ? home : "/tmp") + "/.local/share"; + } + + working_directory = state_base + "/px4/rootfs"; + working_directory_default = true; + } + +#endif // PX4_INSTALL_PREFIX + #if defined(PX4_BINARY_DIR) // data_path & working_directory: if no commands specified or in current working directory), @@ -745,13 +771,34 @@ std::string pwd() return (getcwd(temp, PATH_MAX) ? std::string(temp) : std::string("")); } +static int mkdir_p(const std::string &path) +{ + std::string tmp = path; + + for (size_t i = 1; i < tmp.size(); ++i) { + if (tmp[i] == '/') { + tmp[i] = '\0'; + + if (mkdir(tmp.c_str(), S_IRWXU | S_IRWXG | S_IRWXO) != 0 && errno != EEXIST) { + return -1; + } + + tmp[i] = '/'; + } + } + + if (mkdir(tmp.c_str(), S_IRWXU | S_IRWXG | S_IRWXO) != 0 && errno != EEXIST) { + return -1; + } + + return 0; +} + int change_directory(const std::string &directory) { - // create directory + // create directory (including intermediate components) if (!dir_exists(directory)) { - int ret = mkdir(directory.c_str(), S_IRWXU | S_IRWXG | S_IRWXO); - - if (ret == -1) { + if (mkdir_p(directory) != 0) { PX4_ERR("Error creating directory: %s (%s)", directory.c_str(), strerror(errno)); return -1; } diff --git a/platforms/posix/src/px4/common/px4_daemon/pxh.cpp b/platforms/posix/src/px4/common/px4_daemon/pxh.cpp index 8774facd71..609356484f 100644 --- a/platforms/posix/src/px4/common/px4_daemon/pxh.cpp +++ b/platforms/posix/src/px4/common/px4_daemon/pxh.cpp @@ -209,9 +209,9 @@ void Pxh::run_remote_pxh(int remote_in_fd, int remote_out_fd) if (fds[0].revents & POLLIN) { uint8_t buffer[512]; - size_t len; + size_t len = read(pipe_stderr, buffer, sizeof(buffer)); - if ((len = read(pipe_stderr, buffer, sizeof(buffer))) <= 0) { + if (len <= 0) { break; //EOF or ERROR } @@ -233,9 +233,9 @@ void Pxh::run_remote_pxh(int remote_in_fd, int remote_out_fd) if (fds[1].revents & POLLIN) { uint8_t buffer[512]; - size_t len; + size_t len = read(pipe_stdout, buffer, sizeof(buffer)); - if ((len = read(pipe_stdout, buffer, sizeof(buffer))) <= 0) { + if (len <= 0) { break; //EOF or ERROR } @@ -430,7 +430,7 @@ void Pxh::_setup_term() term.c_lflag &= ~ICANON; term.c_lflag &= ~ECHO; tcsetattr(0, TCSANOW, &term); - setbuf(stdin, nullptr); + (void)setvbuf(stdin, nullptr, _IONBF, 0); } void Pxh::_restore_term() diff --git a/platforms/posix/src/px4/common/px4_daemon/server.cpp b/platforms/posix/src/px4/common/px4_daemon/server.cpp index c26b364457..95b8116be4 100644 --- a/platforms/posix/src/px4/common/px4_daemon/server.cpp +++ b/platforms/posix/src/px4/common/px4_daemon/server.cpp @@ -269,9 +269,9 @@ void cmd.pop_back(); // We register thread specific data. This is used for PX4_INFO (etc.) log calls. - CmdThreadSpecificData *thread_data_ptr; + CmdThreadSpecificData *thread_data_ptr = static_cast(pthread_getspecific(_instance->_key)); - if ((thread_data_ptr = (CmdThreadSpecificData *)pthread_getspecific(_instance->_key)) == nullptr) { + if (thread_data_ptr == nullptr) { thread_data_ptr = new CmdThreadSpecificData; thread_data_ptr->thread_stdout = out; thread_data_ptr->is_atty = isatty; diff --git a/platforms/posix/src/px4/common/px4_daemon/server_io.cpp b/platforms/posix/src/px4/common/px4_daemon/server_io.cpp index d06aa1922f..7deb93b4b1 100644 --- a/platforms/posix/src/px4/common/px4_daemon/server_io.cpp +++ b/platforms/posix/src/px4/common/px4_daemon/server_io.cpp @@ -60,20 +60,20 @@ using namespace px4_daemon; FILE *get_stdout(bool *isatty_) { - Server::CmdThreadSpecificData *thread_data_ptr; - - // If we are not in a thread that has been started by a client, we don't - // have any thread specific data set and we won't have a pipe to write - // stdout to. - if (!Server::is_running() || - (thread_data_ptr = (Server::CmdThreadSpecificData *)pthread_getspecific( - Server::get_pthread_key())) == nullptr) { + // If the server is not running, we are not in a thread that has been started + if (!Server::is_running()) { if (isatty_) { *isatty_ = isatty(1); } return stdout; } - if (thread_data_ptr->thread_stdout == nullptr) { + Server::CmdThreadSpecificData *thread_data_ptr = static_cast(pthread_getspecific( + Server::get_pthread_key())); + + // If we are not in a thread that has been started by a client, we don't + // have any thread specific data set and we won't have a pipe to write + // stdout to. + if (thread_data_ptr == nullptr || thread_data_ptr->thread_stdout == nullptr) { if (isatty_) { *isatty_ = isatty(1); } return stdout; diff --git a/platforms/posix/src/px4/common/px4_posix_impl.cpp b/platforms/posix/src/px4/common/px4_posix_impl.cpp index 31c1bb125c..a8d021db77 100644 --- a/platforms/posix/src/px4/common/px4_posix_impl.cpp +++ b/platforms/posix/src/px4/common/px4_posix_impl.cpp @@ -39,7 +39,6 @@ #include #include -#include #include #include #include diff --git a/platforms/posix/src/px4/common/px4_sem.cpp b/platforms/posix/src/px4/common/px4_sem.cpp index fd43ae0e85..492e019893 100644 --- a/platforms/posix/src/px4/common/px4_sem.cpp +++ b/platforms/posix/src/px4/common/px4_sem.cpp @@ -143,8 +143,8 @@ int px4_sem_timedwait(px4_sem_t *s, const struct timespec *abstime) errno = ret; if (ret != 0 && ret != ETIMEDOUT) { - setbuf(stdout, nullptr); - setbuf(stderr, nullptr); + (void)setvbuf(stdout, nullptr, _IONBF, 0); + (void)setvbuf(stderr, nullptr, _IONBF, 0); const unsigned NAMELEN = 32; char thread_name[NAMELEN] = {}; (void)pthread_getname_np(pthread_self(), thread_name, NAMELEN); diff --git a/platforms/posix/src/px4/common/tasks.cpp b/platforms/posix/src/px4/common/tasks.cpp index 1d1e70569b..b5df4d56f0 100644 --- a/platforms/posix/src/px4/common/tasks.cpp +++ b/platforms/posix/src/px4/common/tasks.cpp @@ -46,7 +46,6 @@ #include #include #include -#include #include #include #include diff --git a/platforms/qurt/include/px4_arch/micro_hal.h b/platforms/qurt/include/px4_arch/micro_hal.h index d88e2ee29e..236cc48ce7 100644 --- a/platforms/qurt/include/px4_arch/micro_hal.h +++ b/platforms/qurt/include/px4_arch/micro_hal.h @@ -31,4 +31,33 @@ * ****************************************************************************/ -// Placeholder +#pragma once + +#include +#include + +#if defined(CONFIG_I2C) + +__BEGIN_DECLS + +struct i2c_master_s; + +struct i2c_msg_s { + uint32_t frequency; + uint16_t addr; + uint16_t flags; + uint8_t *buffer; + int length; +}; + +#define I2C_M_READ 0x0001 + +#define I2C_TRANSFER(dev, msgs, count) px4_qurt_i2c_transfer(dev, msgs, count) + +struct i2c_master_s *px4_i2cbus_initialize(int bus); +int px4_i2cbus_uninitialize(struct i2c_master_s *dev); +int px4_qurt_i2c_transfer(struct i2c_master_s *dev, struct i2c_msg_s *msgs, unsigned count); + +__END_DECLS + +#endif /* CONFIG_I2C */ diff --git a/boards/modalai/voxl2-slpi/src/init.c b/platforms/qurt/include/sys/boardctl.h similarity index 87% rename from boards/modalai/voxl2-slpi/src/init.c rename to platforms/qurt/include/sys/boardctl.h index f9a71ffaa2..2024c08f65 100644 --- a/boards/modalai/voxl2-slpi/src/init.c +++ b/platforms/qurt/include/sys/boardctl.h @@ -1,6 +1,6 @@ /**************************************************************************** * - * Copyright (C) 2022 ModalAI, Inc. All rights reserved. + * Copyright (C) 2025-2026 ModalAI, Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -30,6 +30,15 @@ * POSSIBILITY OF SUCH DAMAGE. * ****************************************************************************/ -#include "board_config.h" -// Place holder for VOXL2-specific early startup code +#pragma once + +#include + +#if defined(CONFIG_BOARDCTL_RESET) + +#define BOARDIOC_RESET (1<<0) + +extern "C" __EXPORT int boardctl(unsigned int cmd, uintptr_t arg); + +#endif diff --git a/platforms/qurt/src/px4/CMakeLists.txt b/platforms/qurt/src/px4/CMakeLists.txt index 097ec098f2..4c10b97aa1 100644 --- a/platforms/qurt/src/px4/CMakeLists.txt +++ b/platforms/qurt/src/px4/CMakeLists.txt @@ -40,6 +40,7 @@ set(QURT_LAYER_SRCS main.cpp qurt_log.cpp SerialImpl.cpp + px4_i2c.cpp ) add_library(px4_layer @@ -48,3 +49,4 @@ add_library(px4_layer target_link_libraries(px4_layer PRIVATE work_queue) target_link_libraries(px4_layer PRIVATE drivers_board) +target_link_libraries(px4_layer PRIVATE drivers__device) diff --git a/platforms/qurt/src/px4/px4_i2c.cpp b/platforms/qurt/src/px4/px4_i2c.cpp new file mode 100644 index 0000000000..5b6c9cc647 --- /dev/null +++ b/platforms/qurt/src/px4/px4_i2c.cpp @@ -0,0 +1,164 @@ +/**************************************************************************** + * + * Copyright (C) 2022 ModalAI, Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name PX4 nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +/** + * @file px4_i2c.cpp + * + * NuttX-compatible I2C API shim for QuRT/SLPI. + * Implements px4_i2cbus_initialize/uninitialize and I2C_TRANSFER + * on top of the QuRT device::I2C callback infrastructure by deriving + * from device::I2C to access its protected transfer methods. + */ + +#include +#include +#include + +#if defined(CONFIG_I2C) + +#include + +/** + * Minimal derived class that exposes the protected I2C::transfer() + * and I2C::set_device_address() for use by the compatibility shim. + */ +class I2CShim : public device::I2C +{ +public: + I2CShim(int bus) : + I2C(0, "i2c_shim", bus, 0x01, 100000) + {} + + int do_transfer(uint8_t addr, const uint8_t *send, unsigned send_len, + uint8_t *recv, unsigned recv_len) + { + set_device_address(addr, false); + return transfer(send, send_len, recv, recv_len); + } +}; + +struct i2c_master_s { + I2CShim *shim; +}; + +struct i2c_master_s *px4_i2cbus_initialize(int bus) +{ + auto *shim = new I2CShim(bus); + + if (shim == nullptr) { + return nullptr; + } + + if (shim->init() != PX4_OK) { + delete shim; + return nullptr; + } + + auto *dev = new i2c_master_s; + + if (dev == nullptr) { + delete shim; + return nullptr; + } + + dev->shim = shim; + return dev; +} + +int px4_i2cbus_uninitialize(struct i2c_master_s *dev) +{ + if (dev != nullptr) { + delete dev->shim; + delete dev; + } + + return PX4_OK; +} + +int px4_qurt_i2c_transfer(struct i2c_master_s *dev, struct i2c_msg_s *msgs, unsigned count) +{ + if (dev == nullptr || dev->shim == nullptr || msgs == nullptr || count == 0) { + return PX4_ERROR; + } + + unsigned i = 0; + + while (i < count) { + struct i2c_msg_s *msg = &msgs[i]; + + // Check for write+read pair to the same address (common i2cdetect pattern) + if ((i + 1 < count) && + !(msg->flags & I2C_M_READ) && + (msgs[i + 1].flags & I2C_M_READ) && + (msg->addr == msgs[i + 1].addr)) { + + int ret = dev->shim->do_transfer(msg->addr, + msg->buffer, msg->length, + msgs[i + 1].buffer, msgs[i + 1].length); + + if (ret != PX4_OK) { + return ret; + } + + i += 2; + + } else if (msg->flags & I2C_M_READ) { + // Single read + int ret = dev->shim->do_transfer(msg->addr, + nullptr, 0, + msg->buffer, msg->length); + + if (ret != PX4_OK) { + return ret; + } + + i++; + + } else { + // Single write + int ret = dev->shim->do_transfer(msg->addr, + msg->buffer, msg->length, + nullptr, 0); + + if (ret != PX4_OK) { + return ret; + } + + i++; + } + } + + return PX4_OK; +} + +#endif /* CONFIG_I2C */ diff --git a/platforms/qurt/src/px4/px4_qurt_impl.cpp b/platforms/qurt/src/px4/px4_qurt_impl.cpp index 545b098f20..34f3c8620c 100644 --- a/platforms/qurt/src/px4/px4_qurt_impl.cpp +++ b/platforms/qurt/src/px4/px4_qurt_impl.cpp @@ -1,6 +1,6 @@ /**************************************************************************** * - * Copyright (C) 2022 ModalAI, Inc. All rights reserved. + * Copyright (C) 2022-2026 ModalAI, Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -32,10 +32,18 @@ ****************************************************************************/ #include +extern "C" void px4muorb_request_reset(void); + __BEGIN_DECLS long PX4_TICKS_PER_SEC = 1000L; void fsync(int fd) { return; } uint32_t crc32part(const uint8_t *src, size_t len, uint32_t crc32val) { return 1; } +int boardctl(unsigned int cmd, uintptr_t arg) +{ + px4muorb_request_reset(); + return 0; +} + __END_DECLS diff --git a/platforms/qurt/src/px4/tasks.cpp b/platforms/qurt/src/px4/tasks.cpp index 112fb15452..9263cb91cc 100644 --- a/platforms/qurt/src/px4/tasks.cpp +++ b/platforms/qurt/src/px4/tasks.cpp @@ -1,6 +1,6 @@ /**************************************************************************** * - * Copyright (C) 2022 ModalAI, Inc. All rights reserved. + * Copyright (C) 2022-2026 ModalAI, Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -244,6 +244,7 @@ static px4_task_t px4_task_spawn_internal(const char *name, int priority, px4_ma (void *) &taskmap[task_index]); if (retcode != PX4_OK) { + pthread_attr_destroy(&taskmap[task_index].attr); pthread_mutex_unlock(&task_mutex); PX4_ERR("Couldn't create pthread %s", name); return -1; @@ -258,7 +259,7 @@ static px4_task_t px4_task_spawn_internal(const char *name, int priority, px4_ma pthread_mutex_unlock(&task_mutex); - return i; + return task_index; } px4_task_t px4_task_spawn_cmd(const char *name, int scheduler, int priority, int stack_size, px4_main_t entry, @@ -292,15 +293,25 @@ int px4_task_delete(px4_task_t id) if (pthread_self() == pid) { pthread_join(pid, nullptr); + pthread_attr_destroy(&taskmap[id].attr); taskmap[id].isused = false; pthread_mutex_unlock(&task_mutex); pthread_exit(nullptr); } else { rv = pthread_cancel(pid); + pthread_mutex_unlock(&task_mutex); + + if (rv == 0) { + pthread_join(pid, nullptr); + } + + pthread_mutex_lock(&task_mutex); } + pthread_attr_destroy(&taskmap[id].attr); taskmap[id].isused = false; + pthread_mutex_unlock(&task_mutex); return rv; } @@ -315,6 +326,7 @@ void px4_task_exit(int ret) for (i = 0; i < PX4_MAX_TASKS; ++i) { if (taskmap[i].tid == pid) { pthread_mutex_lock(&task_mutex); + pthread_attr_destroy(&taskmap[i].attr); taskmap[i].isused = false; break; } @@ -325,10 +337,9 @@ void px4_task_exit(int ret) } else { PX4_DEBUG("px4_task_exit: %s", taskmap[i].name); + pthread_mutex_unlock(&task_mutex); } - pthread_mutex_unlock(&task_mutex); - pthread_exit((void *)(unsigned long)ret); } diff --git a/posix-configs/SITL/init/test/test_mavlink b/posix-configs/SITL/init/test/test_mavlink deleted file mode 100644 index 57afc0ca5e..0000000000 --- a/posix-configs/SITL/init/test/test_mavlink +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/sh -# PX4 commands need the 'px4-' prefix in bash. -# (px4-alias.sh is expected to be in the PATH) -. px4-alias.sh - -param load -param set CBRK_SUPPLY_CHK 894281 - -dataman start - -battery_simulator start -simulator_mavlink start -tone_alarm start -pwm_out_sim start - -ver all - -mavlink start -x -u 14556 -r 2000000 -mavlink boot_complete - -mavlink_tests - -shutdown diff --git a/posix-configs/rpi/pilotpi_fw.config b/posix-configs/rpi/pilotpi_fw.config index 4c66381e1c..fc35cc2f7e 100644 --- a/posix-configs/rpi/pilotpi_fw.config +++ b/posix-configs/rpi/pilotpi_fw.config @@ -41,7 +41,7 @@ ms5611 start -I ads1115 start -I # PWM -pca9685_pwm_out start +pca9685_pwm_out start -X control_allocator start # external GPS & compass diff --git a/posix-configs/rpi/pilotpi_mc.config b/posix-configs/rpi/pilotpi_mc.config index 9c037597c7..461be59d57 100644 --- a/posix-configs/rpi/pilotpi_mc.config +++ b/posix-configs/rpi/pilotpi_mc.config @@ -41,7 +41,7 @@ ms5611 start -I ads1115 start -I # PWM -pca9685_pwm_out start +pca9685_pwm_out start -X control_allocator start # external GPS & compass diff --git a/src/drivers/actuators/vertiq_io/iq-module-communication-cpp b/src/drivers/actuators/vertiq_io/iq-module-communication-cpp index c488af4e88..d05d55a2b7 160000 --- a/src/drivers/actuators/vertiq_io/iq-module-communication-cpp +++ b/src/drivers/actuators/vertiq_io/iq-module-communication-cpp @@ -1 +1 @@ -Subproject commit c488af4e8807de80739aa48efd2ea51614dd8195 +Subproject commit d05d55a2b706a660d46d725e1d35d59049a519ba diff --git a/src/drivers/actuators/vertiq_io/vertiq_configuration_handler.cpp b/src/drivers/actuators/vertiq_io/vertiq_configuration_handler.cpp index c80096ed2f..d001f37806 100644 --- a/src/drivers/actuators/vertiq_io/vertiq_configuration_handler.cpp +++ b/src/drivers/actuators/vertiq_io/vertiq_configuration_handler.cpp @@ -35,7 +35,18 @@ VertiqConfigurationHandler::VertiqConfigurationHandler(VertiqSerialInterface *ser, VertiqClientManager *client_manager) : _serial_interface(ser), - _client_manager(client_manager) + _client_manager(client_manager), + _prop_input_parser_client(0) + +#ifdef CONFIG_USE_IFCI_CONFIGURATION + , _ifci_client(0) +#endif + +#ifdef CONFIG_USE_PULSING_CONFIGURATION + , _voltage_superposition_client(0) + , _pulsing_rectangular_input_parser_client(0) +#endif + { } @@ -43,47 +54,47 @@ void VertiqConfigurationHandler::InitConfigurationClients(uint8_t object_id) { _object_id_now = object_id; //Make sure we store the initial object ID - _prop_input_parser_client = new EscPropellerInputParserClient(object_id); - _client_manager->AddNewClient(_prop_input_parser_client); + _prop_input_parser_client.UpdateEntryIds(object_id); + _client_manager->AddNewClient(&_prop_input_parser_client); #ifdef CONFIG_USE_IFCI_CONFIGURATION - _ifci_client = new IQUartFlightControllerInterfaceClient(object_id); - _client_manager->AddNewClient(_ifci_client); + _ifci_client.UpdateEntryIds(object_id); + _client_manager->AddNewClient(&_ifci_client); #endif //CONFIG_USE_IFCI_CONFIGURATION #ifdef CONFIG_USE_PULSING_CONFIGURATION - _voltage_superposition_client = new VoltageSuperPositionClient(object_id); - _client_manager->AddNewClient(_voltage_superposition_client); + _voltage_superposition_client.UpdateEntryIds(object_id); + _client_manager->AddNewClient(&_voltage_superposition_client); - _pulsing_rectangular_input_parser_client = new PulsingRectangularInputParserClient(object_id); - _client_manager->AddNewClient(_pulsing_rectangular_input_parser_client); + _pulsing_rectangular_input_parser_client.UpdateEntryIds(object_id); + _client_manager->AddNewClient(&_pulsing_rectangular_input_parser_client); #endif //CONFIG_USE_PULSING_CONFIGURATION } void VertiqConfigurationHandler::InitClientEntryWrappers() { - AddNewClientEntry(param_find("VTQ_MAX_VELOCITY"), &(_prop_input_parser_client->velocity_max_)); - AddNewClientEntry(param_find("VTQ_MAX_VOLTS"), &(_prop_input_parser_client->volts_max_)); - AddNewClientEntry(param_find("VTQ_CONTROL_MODE"), &(_prop_input_parser_client->mode_)); - AddNewClientEntry(param_find("VTQ_MOTOR_DIR"), &(_prop_input_parser_client->sign_)); - AddNewClientEntry(param_find("VTQ_FC_DIR"), &(_prop_input_parser_client->flip_negative_)); + AddNewClientEntry(param_find("VTQ_MAX_VELOCITY"), &(_prop_input_parser_client.velocity_max_)); + AddNewClientEntry(param_find("VTQ_MAX_VOLTS"), &(_prop_input_parser_client.volts_max_)); + AddNewClientEntry(param_find("VTQ_CONTROL_MODE"), &(_prop_input_parser_client.mode_)); + AddNewClientEntry(param_find("VTQ_MOTOR_DIR"), &(_prop_input_parser_client.sign_)); + AddNewClientEntry(param_find("VTQ_FC_DIR"), &(_prop_input_parser_client.flip_negative_)); #ifdef CONFIG_USE_IFCI_CONFIGURATION - AddNewClientEntry(param_find("VTQ_THROTTLE_CVI"), &(_ifci_client->throttle_cvi_)); + AddNewClientEntry(param_find("VTQ_THROTTLE_CVI"), &(_ifci_client.throttle_cvi_)); #endif //CONFIG_USE_IFCI_CONFIGURATION #ifdef CONFIG_USE_PULSING_CONFIGURATION AddNewClientEntry (param_find("VTQ_PULSE_V_MODE"), - &(_pulsing_rectangular_input_parser_client->pulsing_voltage_mode_)); - AddNewClientEntry(param_find("VTQ_X_CVI"), &(_ifci_client->x_cvi_)); - AddNewClientEntry(param_find("VTQ_Y_CVI"), &(_ifci_client->y_cvi_)); - AddNewClientEntry(param_find("VTQ_ZERO_ANGLE"), &(_voltage_superposition_client->zero_angle_)); + &(_pulsing_rectangular_input_parser_client.pulsing_voltage_mode_)); + AddNewClientEntry(param_find("VTQ_X_CVI"), &(_ifci_client.x_cvi_)); + AddNewClientEntry(param_find("VTQ_Y_CVI"), &(_ifci_client.y_cvi_)); + AddNewClientEntry(param_find("VTQ_ZERO_ANGLE"), &(_voltage_superposition_client.zero_angle_)); AddNewClientEntry(param_find("VTQ_VELO_CUTOFF"), - &(_voltage_superposition_client->velocity_cutoff_)); + &(_voltage_superposition_client.velocity_cutoff_)); AddNewClientEntry(param_find("VTQ_TQUE_OFF_ANG"), - &(_voltage_superposition_client->propeller_torque_offset_angle_)); + &(_voltage_superposition_client.propeller_torque_offset_angle_)); AddNewClientEntry(param_find("VTQ_PULSE_V_LIM"), - &(_pulsing_rectangular_input_parser_client->pulsing_voltage_limit_)); + &(_pulsing_rectangular_input_parser_client.pulsing_voltage_limit_)); #endif //CONFIG_USE_PULSING_CONFIGURATION } @@ -91,15 +102,15 @@ void VertiqConfigurationHandler::UpdateClientsToNewObjId(uint8_t new_object_id) { _object_id_now = new_object_id; - DestroyAndRecreateClient(_prop_input_parser_client, new_object_id); + _prop_input_parser_client.UpdateEntryIds(new_object_id); #ifdef CONFIG_USE_IFCI_CONFIGURATION - DestroyAndRecreateClient(_ifci_client, new_object_id); + _ifci_client.UpdateEntryIds(new_object_id); #endif #ifdef CONFIG_USE_PULSING_CONFIGURATION - DestroyAndRecreateClient(_voltage_superposition_client, new_object_id); - DestroyAndRecreateClient(_pulsing_rectangular_input_parser_client, new_object_id); + _voltage_superposition_client.UpdateEntryIds(new_object_id); + _pulsing_rectangular_input_parser_client.UpdateEntryIds(new_object_id); #endif } @@ -114,8 +125,6 @@ void VertiqConfigurationHandler::UpdateIquartConfigParams() { for (uint8_t i = 0; i < _added_configuration_entry_wrappers; i++) { _configuration_entry_wrappers[i]->SendGet(_serial_interface); - //Ensure that these get messages get out - _client_manager->HandleClientCommunication(); } //Now go ahead and grab responses, and update everyone to be on the same page, but do it quickly. diff --git a/src/drivers/actuators/vertiq_io/vertiq_configuration_handler.hpp b/src/drivers/actuators/vertiq_io/vertiq_configuration_handler.hpp index 57d7afa474..5acd881dc2 100644 --- a/src/drivers/actuators/vertiq_io/vertiq_configuration_handler.hpp +++ b/src/drivers/actuators/vertiq_io/vertiq_configuration_handler.hpp @@ -89,7 +89,7 @@ public: * * @param timeout The maximum amount of time we can keep trying to get responses */ - void CoordinateIquartWithPx4Params(hrt_abstime timeout = 100_ms); + void CoordinateIquartWithPx4Params(hrt_abstime timeout = 10_ms); /** * @brief Gives access to the object ID currently being used @@ -157,16 +157,16 @@ private: //////////////////////////////////////////////////////////////////////// //Vertiq Client information //Known Configuration Clients can be created as pointers to certain types of clients - EscPropellerInputParserClient *_prop_input_parser_client; + EscPropellerInputParserClient _prop_input_parser_client; #ifdef CONFIG_USE_IFCI_CONFIGURATION //Make all of the clients that we need to talk to the IFCI config params - IQUartFlightControllerInterfaceClient *_ifci_client; + IQUartFlightControllerInterfaceClient _ifci_client; #endif //CONFIG_USE_IFCI_CONFIGURATION #ifdef CONFIG_USE_PULSING_CONFIGURATION - VoltageSuperPositionClient *_voltage_superposition_client; - PulsingRectangularInputParserClient *_pulsing_rectangular_input_parser_client; + VoltageSuperPositionClient _voltage_superposition_client; + PulsingRectangularInputParserClient _pulsing_rectangular_input_parser_client; #endif //CONFIG_USE_PULSING_CONFIGURATION //////////////////////////////////////////////////////////////////////// diff --git a/src/drivers/actuators/vertiq_io/vertiq_io.cpp b/src/drivers/actuators/vertiq_io/vertiq_io.cpp index 23269d4080..bdef50b5f2 100644 --- a/src/drivers/actuators/vertiq_io/vertiq_io.cpp +++ b/src/drivers/actuators/vertiq_io/vertiq_io.cpp @@ -153,7 +153,7 @@ void VertiqIo::Run() void VertiqIo::parameters_update() { - //If someone has changed any parameter in our module. Checked at 1Hz + //If someone has changed any parameter in our module. Checked periodically if (_parameter_update_sub.updated()) { //Grab the changed parameter with copy (which lowers the "changed" flag) parameter_update_s param_update; @@ -183,11 +183,11 @@ void VertiqIo::parameters_update() } } -void VertiqIo::OutputControls(uint16_t outputs[MAX_ACTUATORS]) +void VertiqIo::OutputControls(float outputs[MAX_ACTUATORS]) { //Put the mixer outputs into the output message for (uint8_t i = 0; i < _transmission_message.num_cvs; i++) { - _transmission_message.commands[i] = outputs[i]; + _transmission_message.commands[i] = static_cast(lroundf(outputs[i])); } _operational_ifci.PackageIfciCommandsForTransmission(&_transmission_message, _output_message, &_output_len); @@ -195,8 +195,7 @@ void VertiqIo::OutputControls(uint16_t outputs[MAX_ACTUATORS]) _serial_interface.ProcessSerialTx(); } -bool VertiqIo::updateOutputs(uint16_t outputs[MAX_ACTUATORS], unsigned num_outputs, - unsigned num_control_groups_updated) +bool VertiqIo::updateOutputs(float outputs[MAX_ACTUATORS], unsigned num_outputs, unsigned num_control_groups_updated) { #ifdef CONFIG_USE_IFCI_CONFIGURATION diff --git a/src/drivers/actuators/vertiq_io/vertiq_io.hpp b/src/drivers/actuators/vertiq_io/vertiq_io.hpp index 379315d0e7..eb0079dc43 100644 --- a/src/drivers/actuators/vertiq_io/vertiq_io.hpp +++ b/src/drivers/actuators/vertiq_io/vertiq_io.hpp @@ -94,14 +94,13 @@ public: void print_info(); /** @see OutputModuleInterface */ - bool updateOutputs(uint16_t outputs[MAX_ACTUATORS], - unsigned num_outputs, unsigned num_control_groups_updated) override; + bool updateOutputs(float outputs[MAX_ACTUATORS], unsigned num_outputs, unsigned num_control_groups_updated) override; /** * @brief Used to package and transmit controls via IQUART * @param outputs The output throttles calculated by the mixer */ - void OutputControls(uint16_t outputs[MAX_ACTUATORS]); + void OutputControls(float outputs[MAX_ACTUATORS]); private: @@ -167,7 +166,7 @@ private: uORB::Publication _esc_status_pub{ORB_ID(esc_status)}; //We want to publish our ESC Status to anyone who will listen // Subscriptions - uORB::SubscriptionInterval _parameter_update_sub{ORB_ID(parameter_update), 1_s}; + uORB::SubscriptionInterval _parameter_update_sub{ORB_ID(parameter_update), 10_ms}; //We need to know what's going on with the actuator test to make sure we handle it properly uORB::Subscription _actuator_test_sub{ORB_ID(actuator_test)}; diff --git a/src/drivers/actuators/vertiq_io/vertiq_serial_interface.cpp b/src/drivers/actuators/vertiq_io/vertiq_serial_interface.cpp index c62327f00e..5c5d955e01 100644 --- a/src/drivers/actuators/vertiq_io/vertiq_serial_interface.cpp +++ b/src/drivers/actuators/vertiq_io/vertiq_serial_interface.cpp @@ -189,12 +189,41 @@ bool VertiqSerialInterface::CheckForRx() uint8_t *VertiqSerialInterface::ReadAndSetRxBytes() { - //Read the bytes available for us - read(_uart_fd, _rx_buf, _bytes_available); + if (_uart_fd < 0 || _bytes_available == 0) { + return nullptr; + } - //Put the data into our IQUART handler - _iquart_interface.SetRxBytes(_rx_buf, _bytes_available); - return _rx_buf; + size_t total = 0; + + while (total < _bytes_available) { + ssize_t n = read(_uart_fd, _rx_buf + total, _bytes_available - total); + + if (n < 0) { + if (errno == EAGAIN) { + break; // no more data + } + + if (errno == EINTR) { + continue; // interrupted. repeat again + } + + PX4_ERR("Read failed: %s", strerror(errno)); + return nullptr; + } + + if (n == 0) { + break; // EOF or no data + } + + total += static_cast(n); + } + + if (total > 0) { + _iquart_interface.SetRxBytes(_rx_buf, total); + return _rx_buf; + } + + return nullptr; } void VertiqSerialInterface::ProcessSerialRx(ClientAbstract **client_array, uint8_t number_of_clients) @@ -203,7 +232,7 @@ void VertiqSerialInterface::ProcessSerialRx(ClientAbstract **client_array, uint8 ReOpenSerial(); //We have bytes - if (CheckForRx()) { + while (CheckForRx()) { uint8_t *data_ptr = ReadAndSetRxBytes(); //While we've got packets to look at, give the packet to each of the clients so that each @@ -225,10 +254,41 @@ void VertiqSerialInterface::ProcessSerialTx() //Make sure we can actually talk ReOpenSerial(); + if (_uart_fd < 0) { + return; + } + //while there's stuff to write, write it //Clients are responsible for adding TX messages to the buffer through get/set/save commands while (_iquart_interface.GetTxBytes(_tx_buf, _bytes_available)) { - write(_uart_fd, _tx_buf, _bytes_available); + + size_t total = 0; + + while (total < _bytes_available) { + + ssize_t n = write(_uart_fd, _tx_buf + total, _bytes_available - total); + + if (n < 0) { + + if (errno == EAGAIN) { + // UART buffer full — try again later + break; + } + + if (errno == EINTR) { + continue; // interrupted. try again + } + + PX4_ERR("Write failed: %s", strerror(errno)); + return; + } + + if (n == 0) { + break; + } + + total += static_cast(n); + } } } diff --git a/src/drivers/actuators/vertiq_io/vertiq_telemetry_manager.cpp b/src/drivers/actuators/vertiq_io/vertiq_telemetry_manager.cpp index fb2b5bd2e1..fd5d024094 100644 --- a/src/drivers/actuators/vertiq_io/vertiq_telemetry_manager.cpp +++ b/src/drivers/actuators/vertiq_io/vertiq_telemetry_manager.cpp @@ -35,7 +35,8 @@ VertiqTelemetryManager::VertiqTelemetryManager(VertiqClientManager *client_manager) : _client_manager(client_manager), - _telem_state(UNPAUSED) + _telem_state(UNPAUSED), + _telem_interface(0) { } @@ -45,8 +46,8 @@ void VertiqTelemetryManager::Init(uint64_t telem_bitmask, uint8_t module_id) _telem_bitmask = telem_bitmask; FindTelemetryModuleIds(); - _telem_interface = new IQUartFlightControllerInterfaceClient(module_id); - _client_manager->AddNewClient(_telem_interface); + _telem_interface.UpdateEntryIds(module_id); + _client_manager->AddNewClient(&_telem_interface); } void VertiqTelemetryManager::FindTelemetryModuleIds() @@ -79,10 +80,8 @@ void VertiqTelemetryManager::StartPublishing(uORB::Publication *es for (unsigned i = 0; i < _number_of_module_ids_for_telem; i++) { _esc_status.esc[i].timestamp = 0; - _esc_status.esc[i].esc_address = 0; _esc_status.esc[i].esc_rpm = 0; _esc_status.esc[i].esc_state = 0; - _esc_status.esc[i].esc_cmdcount = 0; _esc_status.esc[i].esc_voltage = 0; _esc_status.esc[i].esc_current = 0; _esc_status.esc[i].esc_temperature = 0; @@ -106,12 +105,11 @@ uint16_t VertiqTelemetryManager::UpdateTelemetry() bool timed_out = (time_now - _time_of_last_telem_request) > _telem_timeout; //We got a telemetry response - if (_telem_interface->telemetry_.IsFresh()) { + if (_telem_interface.telemetry_.IsFresh()) { //grab the data - IFCITelemetryData telem_response = _telem_interface->telemetry_.get_reply(); + IFCITelemetryData telem_response = _telem_interface.telemetry_.get_reply(); // also update our internal report for logging - _esc_status.esc[_current_module_id_target_index].esc_address = _module_ids_in_use[_number_of_module_ids_for_telem]; _esc_status.esc[_current_module_id_target_index].timestamp = time_now; _esc_status.esc[_current_module_id_target_index].esc_rpm = telem_response.speed * 60.0f * M_1_PI_F * 0.5f; //We get back rad/s, convert to rpm @@ -123,7 +121,6 @@ uint16_t VertiqTelemetryManager::UpdateTelemetry() _esc_status.esc[_current_module_id_target_index].esc_temperature = telem_response.mcu_temp * 0.01; //"If you ask other escs for their temp, they're giving you the micro temp, so go with that" _esc_status.esc[_current_module_id_target_index].esc_state = 0; //not implemented - _esc_status.esc[_current_module_id_target_index].esc_cmdcount = 0; //not implemented _esc_status.esc[_current_module_id_target_index].failures = 0; //not implemented //Update the overall _esc_status timestamp and our counter @@ -148,9 +145,8 @@ uint16_t VertiqTelemetryManager::UpdateTelemetry() uint16_t next_telem = FindNextMotorForTelemetry(); if (next_telem != _impossible_module_id) { - //We need to update the module ID we're going to listen to. So, kill the old one, and make it anew. - delete _telem_interface; - _telem_interface = new IQUartFlightControllerInterfaceClient(next_telem); + //We need to update the module ID we're going to listen to + _telem_interface.UpdateEntryIds(next_telem); } //update the telem target diff --git a/src/drivers/actuators/vertiq_io/vertiq_telemetry_manager.hpp b/src/drivers/actuators/vertiq_io/vertiq_telemetry_manager.hpp index 8d56d33a43..21d4854e0d 100644 --- a/src/drivers/actuators/vertiq_io/vertiq_telemetry_manager.hpp +++ b/src/drivers/actuators/vertiq_io/vertiq_telemetry_manager.hpp @@ -133,7 +133,7 @@ private: VertiqClientManager *_client_manager; vertiq_telemetry_pause_states _telem_state; //Keep track of whether or not we've paused telemetry - IQUartFlightControllerInterfaceClient *_telem_interface; //Used for reading responses from our telemetry targets + IQUartFlightControllerInterfaceClient _telem_interface; //Used for reading responses from our telemetry targets esc_status_s _esc_status; //We want to publish our ESC Status to anyone who will listen static const uint8_t MAX_SUPPORTABLE_MODULE_IDS = 63; //[0, 62] //The max number of module IDs that we can support static const uint8_t MAX_ESC_STATUS_ENTRIES = diff --git a/src/drivers/actuators/voxl_esc/CMakeLists.txt b/src/drivers/actuators/voxl_esc/CMakeLists.txt index dbfa0c42c3..cb914f7e4c 100644 --- a/src/drivers/actuators/voxl_esc/CMakeLists.txt +++ b/src/drivers/actuators/voxl_esc/CMakeLists.txt @@ -49,4 +49,5 @@ px4_add_module( mixer_module MODULE_CONFIG module.yaml + voxl_esc_params.yaml ) diff --git a/src/drivers/actuators/voxl_esc/voxl_esc.cpp b/src/drivers/actuators/voxl_esc/voxl_esc.cpp index c41bc69642..1929f68c12 100644 --- a/src/drivers/actuators/voxl_esc/voxl_esc.cpp +++ b/src/drivers/actuators/voxl_esc/voxl_esc.cpp @@ -63,10 +63,8 @@ VoxlEsc::VoxlEsc() : for (unsigned i = 0; i < VOXL_ESC_OUTPUT_CHANNELS; i++) { _esc_status.esc[i].timestamp = 0; - _esc_status.esc[i].esc_address = 0; _esc_status.esc[i].esc_rpm = 0; _esc_status.esc[i].esc_state = 0; - _esc_status.esc[i].esc_cmdcount = 0; _esc_status.esc[i].esc_voltage = 0; _esc_status.esc[i].esc_current = 0; _esc_status.esc[i].esc_temperature = 0; @@ -291,6 +289,7 @@ int VoxlEsc::load_params(voxl_esc_params_t *params, ch_assign_t *map) param_get(param_find("VOXL_ESC_T_EXPO"), ¶ms->turtle_motor_expo); param_get(param_find("VOXL_ESC_T_MINF"), ¶ms->turtle_stick_minf); param_get(param_find("VOXL_ESC_T_COSP"), ¶ms->turtle_cosphi); + param_get(param_find("VOXL_ESC_T_ON"), ¶ms->turtle_button_on); param_get(param_find("VOXL_ESC_FUNC1"), ¶ms->function_map[0]); param_get(param_find("VOXL_ESC_FUNC2"), ¶ms->function_map[1]); @@ -363,6 +362,12 @@ int VoxlEsc::load_params(voxl_esc_params_t *params, ch_assign_t *map) ret = PX4_ERROR; } + if (params->turtle_button_on < -1 || params->turtle_button_on > 15) { + PX4_ERR("Invalid parameter VOXL_ESC_T_ON. Please verify parameters."); + params->turtle_button_on = -1; + ret = PX4_ERROR; + } + if (params->gpio_ctl_channel < 0 || params->gpio_ctl_channel > 6) { PX4_ERR("Invalid parameter VOXL_ESC_GPIO_CH. Please verify parameters."); params->gpio_ctl_channel = 0; @@ -514,12 +519,10 @@ int VoxlEsc::parse_response(uint8_t *buf, uint8_t len, bool print_feedback) _esc_chans[id].feedback_time = tnow; // also update our internal report for logging - _esc_status.esc[id].esc_address = motor_idx + 1; //remapped motor ID _esc_status.esc[id].timestamp = tnow; _esc_status.esc[id].esc_rpm = fb.rpm; _esc_status.esc[id].esc_power = fb.power; _esc_status.esc[id].esc_state = fb.id_state & 0x0F; - _esc_status.esc[id].esc_cmdcount = fb.cmd_counter; _esc_status.esc[id].esc_voltage = _esc_chans[id].voltage; _esc_status.esc[id].esc_current = _esc_chans[id].current; _esc_status.esc[id].failures = 0; //not implemented @@ -554,14 +557,6 @@ int VoxlEsc::parse_response(uint8_t *buf, uint8_t len, bool print_feedback) } - //print ESC status just for debugging - /* - PX4_INFO("[%lld] ID=%d, ADDR %d, STATE=%d, RPM=%5d, PWR=%3d%%, V=%.2fdV, I=%.2fA, T=%+3dC, CNT %d, FAIL %d", - _esc_status.esc[id].timestamp, id, _esc_status.esc[id].esc_address, - _esc_status.esc[id].esc_state, _esc_status.esc[id].esc_rpm, _esc_status.esc[id].esc_power, - (double)_esc_status.esc[id].esc_voltage, (double)_esc_status.esc[id].esc_current, _esc_status.esc[id].esc_temperature, - _esc_status.esc[id].esc_cmdcount, _esc_status.esc[id].failures); - */ } } @@ -950,7 +945,7 @@ int VoxlEsc::update_params() return ret; } -void VoxlEsc::update_leds(vehicle_control_mode_s mode, led_control_s control) +void VoxlEsc::update_leds(const vehicle_control_mode_s &mode, const led_control_s &control) { int i = 0; uint8_t led_mask = _led_rsc.led_mask; @@ -1230,8 +1225,7 @@ void VoxlEsc::mix_turtle_mode(uint16_t outputs[MAX_ACTUATORS]) } /* OutputModuleInterface */ -bool VoxlEsc::updateOutputs(uint16_t outputs[MAX_ACTUATORS], - unsigned num_outputs, unsigned num_control_groups_updated) +bool VoxlEsc::updateOutputs(float outputs[MAX_ACTUATORS], unsigned num_outputs, unsigned num_control_groups_updated) { //in Run() we call _mixing_output.update(), which calls MixingOutput::limitAndUpdateOutputs which calls _interface.updateOutputs (this function) //So, if Run() is blocked by a custom command, this function will not be called until Run is running again @@ -1240,9 +1234,16 @@ bool VoxlEsc::updateOutputs(uint16_t outputs[MAX_ACTUATORS], return false; } + // Convert float outputs to uint16_t hardware values + uint16_t hw_outputs[VOXL_ESC_OUTPUT_CHANNELS] {}; + + for (int i = 0; i < VOXL_ESC_OUTPUT_CHANNELS; i++) { + hw_outputs[i] = static_cast(lroundf(outputs[i])); + } + // don't use mixed values... recompute now. if (_turtle_mode_en) { - mix_turtle_mode(outputs); + mix_turtle_mode(hw_outputs); } for (int i = 0; i < VOXL_ESC_OUTPUT_CHANNELS; i++) { @@ -1252,24 +1253,24 @@ bool VoxlEsc::updateOutputs(uint16_t outputs[MAX_ACTUATORS], } else { if ((_turtle_mode_en) || (_parameters.cmd_type == VOXL_ESC_RPM_CMDS)) { if (_extended_rpm) { - if (outputs[i] > VOXL_ESC_RPM_MAX_EXT) { outputs[i] = VOXL_ESC_RPM_MAX_EXT; } + if (hw_outputs[i] > VOXL_ESC_RPM_MAX_EXT) { hw_outputs[i] = VOXL_ESC_RPM_MAX_EXT; } } else { - if (outputs[i] > VOXL_ESC_RPM_MAX) { outputs[i] = VOXL_ESC_RPM_MAX; } + if (hw_outputs[i] > VOXL_ESC_RPM_MAX) { hw_outputs[i] = VOXL_ESC_RPM_MAX; } } } else if (_parameters.cmd_type == VOXL_ESC_PWM_CMDS) { - if (outputs[i] > VOXL_ESC_PWM_MAX) { outputs[i] = VOXL_ESC_PWM_MAX; } + if (hw_outputs[i] > VOXL_ESC_PWM_MAX) { hw_outputs[i] = VOXL_ESC_PWM_MAX; } - else if (outputs[i] < _min_active_pwm) { outputs[i] = _min_active_pwm; } + else if (hw_outputs[i] < _min_active_pwm) { hw_outputs[i] = _min_active_pwm; } } if (!_turtle_mode_en) { - _esc_chans[i].rate_req = outputs[i] * _output_map[i].direction; + _esc_chans[i].rate_req = hw_outputs[i] * _output_map[i].direction; } else { // mapping updated in mixTurtleMode, no remap needed here, but reverse direction - _esc_chans[i].rate_req = outputs[i] * _output_map[i].direction * (-1); + _esc_chans[i].rate_req = hw_outputs[i] * _output_map[i].direction * (-1); } } } @@ -1495,21 +1496,28 @@ void VoxlEsc::Run() if (!_outputs_on) { - float setpoint = VOXL_ESC_MODE_DISABLED_SETPOINT; + bool activate = false; - if (_parameters.mode == VOXL_ESC_MODE_TURTLE_AUX1) { - setpoint = _manual_control_setpoint.aux1; + if (_manual_control_setpoint.data_source >= manual_control_setpoint_s::SOURCE_MAVLINK_0 + && _parameters.turtle_button_on >= 0) { + // MAVLink source: use buttons field directly + activate = (_manual_control_setpoint.buttons & (1 << _parameters.turtle_button_on)) != 0; - } else if (_parameters.mode == VOXL_ESC_MODE_TURTLE_AUX2) { - setpoint = _manual_control_setpoint.aux2; + } else if (_manual_control_setpoint.data_source == manual_control_setpoint_s::SOURCE_RC) { + // RC source: use aux channel as before + float setpoint = VOXL_ESC_MODE_DISABLED_SETPOINT; + + if (_parameters.mode == VOXL_ESC_MODE_TURTLE_AUX1) { + setpoint = _manual_control_setpoint.aux1; + + } else if (_parameters.mode == VOXL_ESC_MODE_TURTLE_AUX2) { + setpoint = _manual_control_setpoint.aux2; + } + + activate = (setpoint > VOXL_ESC_MODE_THRESHOLD); } - if (setpoint > VOXL_ESC_MODE_THRESHOLD) { - _turtle_mode_en = true; - - } else { - _turtle_mode_en = false; - } + _turtle_mode_en = activate; } } @@ -1698,6 +1706,7 @@ void VoxlEsc::print_params() PX4_INFO("Params: VOXL_ESC_T_EXPO: %" PRId32, _parameters.turtle_motor_expo); PX4_INFO("Params: VOXL_ESC_T_MINF: %f", (double)_parameters.turtle_stick_minf); PX4_INFO("Params: VOXL_ESC_T_COSP: %f", (double)_parameters.turtle_cosphi); + PX4_INFO("Params: VOXL_ESC_T_ON: %" PRId32, _parameters.turtle_button_on); PX4_INFO("Params: VOXL_ESC_VLOG: %" PRId32, _parameters.verbose_logging); PX4_INFO("Params: VOXL_ESC_PUB_BST: %" PRId32, _parameters.publish_battery_status); diff --git a/src/drivers/actuators/voxl_esc/voxl_esc.hpp b/src/drivers/actuators/voxl_esc/voxl_esc.hpp index a73f26ae10..450c15bd1a 100644 --- a/src/drivers/actuators/voxl_esc/voxl_esc.hpp +++ b/src/drivers/actuators/voxl_esc/voxl_esc.hpp @@ -83,8 +83,7 @@ public: void print_params(); /** @see OutputModuleInterface */ - bool updateOutputs(uint16_t outputs[MAX_ACTUATORS], - unsigned num_outputs, unsigned num_control_groups_updated) override; + bool updateOutputs(float outputs[MAX_ACTUATORS], unsigned num_outputs, unsigned num_control_groups_updated) override; virtual int init(); int device_init(); // function where uart port is opened and ESC queried @@ -176,6 +175,7 @@ private: int32_t esc_over_temp_threshold{0}; int32_t gpio_ctl_channel{0}; int32_t cmd_type{0}; + int32_t turtle_button_on{-1}; } voxl_esc_params_t; struct EscChan { @@ -271,7 +271,7 @@ private: bool _device_initialized{false}; - void update_leds(vehicle_control_mode_s mode, led_control_s control); + void update_leds(const vehicle_control_mode_s &mode, const led_control_s &control); int read_response(Command *out_cmd); int parse_response(uint8_t *buf, uint8_t len, bool print_feedback); diff --git a/src/drivers/actuators/voxl_esc/voxl_esc_params.c b/src/drivers/actuators/voxl_esc/voxl_esc_params.c deleted file mode 100644 index 6ccfeb60ba..0000000000 --- a/src/drivers/actuators/voxl_esc/voxl_esc_params.c +++ /dev/null @@ -1,306 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2020 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * UART ESC configuration - * - * Selects what type of UART ESC, if any, is being used. - * - * @reboot_required true - * - * @group VOXL ESC - * @value 0 - Disabled - * @value 1 - VOXL ESC - * @min 0 - * @max 1 - */ -PARAM_DEFINE_INT32(VOXL_ESC_CONFIG, 0); - -/** - * UART ESC baud rate - * - * Default rate is 250Kbps, which is used in off-the-shelf MoadalAI ESC products. - * - * @group VOXL ESC - * @unit bit/s - */ -PARAM_DEFINE_INT32(VOXL_ESC_BAUD, 250000); - -/** - * Motor mappings for ModalAI ESC - * - * HW Channel Idexes (PX4 Indexes) (note: silkscreen shows 0 indexed) - * 4(1) 3(4) - * [front] - * 1(3) 2(2) - */ - -// The following are auto generated params from control allocator pattern, put here for reference - -// Default ESC1 to motor2 -//PARAM_DEFINE_INT32(VOXL_ESC_FUNC1, 102); - -//PARAM_DEFINE_INT32(VOXL_ESC_FUNC2, 103); - -//PARAM_DEFINE_INT32(VOXL_ESC_FUNC3, 101); - -//PARAM_DEFINE_INT32(VOXL_ESC_FUNC4, 104); - -/** - * UART ESC RPM Min - * - * Minimum RPM for ESC - * - * @group VOXL ESC - * @unit rpm - */ -PARAM_DEFINE_INT32(VOXL_ESC_RPM_MIN, 5500); - -/** - * UART ESC RPM Max - * - * Maximum RPM for ESC - * - * @group VOXL ESC - * @unit rpm - */ -PARAM_DEFINE_INT32(VOXL_ESC_RPM_MAX, 15000); - -/** - * UART ESC Mode - * - * Selects what type of mode is enabled, if any - * - * @reboot_required true - * - * @group VOXL ESC - * @value 0 - None - * @value 1 - Turtle Mode enabled via AUX1 - * @value 2 - Turtle Mode enabled via AUX2 - * @value 3 - UART Passthrough Mode - * @min 0 - * @max 2 - */ -PARAM_DEFINE_INT32(VOXL_ESC_MODE, 0); - -/** - * UART ESC ID 1 Spin Direction Flag - * - * @group VOXL ESC - * @value 0 - Default - * @value 1 - Reverse - */ -PARAM_DEFINE_INT32(VOXL_ESC_SDIR1, 0); - -/** - * UART ESC ID 2 Spin Direction Flag - * - * @group VOXL ESC - * @value 0 - Default - * @value 1 - Reverse - */ -PARAM_DEFINE_INT32(VOXL_ESC_SDIR2, 0); - -/** - * UART ESC ID 3 Spin Direction Flag - * - * @group VOXL ESC - * @value 0 - Default - * @value 1 - Reverse - */ -PARAM_DEFINE_INT32(VOXL_ESC_SDIR3, 0); - -/** - * UART ESC ID 4 Spin Direction Flag - * - * @group VOXL ESC - * @value 0 - Default - * @value 1 - Reverse - */ -PARAM_DEFINE_INT32(VOXL_ESC_SDIR4, 0); - -/** - * UART ESC Turtle Mode Crash Flip Motor Percent - * - * @group VOXL ESC - * @min 1 - * @max 100 - * @decimal 10 - * @increment 1 - */ -PARAM_DEFINE_INT32(VOXL_ESC_T_PERC, 90); - -/** - * UART ESC Turtle Mode Crash Flip Motor Deadband - * - * @group VOXL ESC - * @min 0 - * @max 100 - * @decimal 10 - * @increment 1 - */ -PARAM_DEFINE_INT32(VOXL_ESC_T_DEAD, 20); - -/** - * UART ESC Turtle Mode Crash Flip Motor STICK_MINF - * - * @group VOXL ESC - * @min 0.0 - * @max 100.0 - * @decimal 10 - * @increment 1.0 - */ -PARAM_DEFINE_FLOAT(VOXL_ESC_T_MINF, 0.15); - -/** - * UART ESC Turtle Mode Crash Flip Motor expo - * - * @group VOXL ESC - * @min 0 - * @max 100 - * @decimal 10 - * @increment 1 - */ -PARAM_DEFINE_INT32(VOXL_ESC_T_EXPO, 35); - -/** - * UART ESC Turtle Mode Cosphi - * - * @group VOXL ESC - * @min 0.000 - * @max 1.000 - * @decimal 10 - * @increment 0.001 - */ -PARAM_DEFINE_FLOAT(VOXL_ESC_T_COSP, 0.990); - -/** - * UART ESC verbose logging - * - * @reboot_required true - * - * @group VOXL ESC - * @value 0 - Disabled - * @value 1 - Enabled - * @min 0 - * @max 1 - */ -PARAM_DEFINE_INT32(VOXL_ESC_VLOG, 0); - - -/** - * UART ESC Enable publishing of battery status - * - * Only applicable to ESCs that report total battery voltage and current - * - * @reboot_required true - * - * @group VOXL ESC - * @value 0 - Disabled - * @value 1 - Enabled - * @min 0 - * @max 1 - */ -PARAM_DEFINE_INT32(VOXL_ESC_PUB_BST, 1); - - -/** - * UART ESC Temperature Warning Threshold (Degrees C) - * - * Only applicable to ESCs that report temperature - * - * @reboot_required true - * - * @group VOXL ESC - * @value 0 - Disabled - * @min 0 - * @max 200 - */ -PARAM_DEFINE_INT32(VOXL_ESC_T_WARN, 0); - - -/** - * UART ESC Over-Temperature Threshold (Degrees C) - * - * Only applicable to ESCs that report temperature - * - * @reboot_required true - * - * @group VOXL ESC - * @value 0 - Disabled - * @min 0 - * @max 200 - */ -PARAM_DEFINE_INT32(VOXL_ESC_T_OVER, 0); - - -/** - * GPIO Control Channel - * - * - * @reboot_required true - * - * @group VOXL ESC - * @value 0 - Disabled - * @min 0 - * @max 6 - */ -PARAM_DEFINE_INT32(VOXL_ESC_GPIO_CH, 0); - -/** - * UART ESC command type - * - * Selects between RPM or PWM commands - * - * @reboot_required true - * - * @group VOXL ESC - * @value 0 - RPM - * @value 1 - PWM - * @min 0 - * @max 1 - */ -PARAM_DEFINE_INT32(VOXL_ESC_CMD, 0); - -/** - * UART ESC Minimum motor power - * - * Minimum motor power for ESC when VOXL_ESC_CMD is set for PWM. - * Make sure to set this high enough so that the motors are always spinning - * while armed. - * - * @group VOXL ESC - * @min 0.0 - * @max 1.0 - */ -PARAM_DEFINE_FLOAT(VOXL_ESC_PWR_MIN, 0.05); diff --git a/src/drivers/actuators/voxl_esc/voxl_esc_params.yaml b/src/drivers/actuators/voxl_esc/voxl_esc_params.yaml new file mode 100644 index 0000000000..1017e23027 --- /dev/null +++ b/src/drivers/actuators/voxl_esc/voxl_esc_params.yaml @@ -0,0 +1,223 @@ +module_name: voxl_esc +parameters: +- group: VOXL ESC + definitions: + VOXL_ESC_CONFIG: + description: + short: UART ESC configuration + long: Selects what type of UART ESC, if any, is being used. + type: enum + values: + 0: '- Disabled' + 1: '- VOXL ESC' + default: 0 + reboot_required: true + min: 0 + max: 1 + VOXL_ESC_BAUD: + description: + short: UART ESC baud rate + long: Default rate is 250Kbps, which is used in off-the-shelf MoadalAI ESC + products. + type: int32 + default: 250000 + unit: bit/s + VOXL_ESC_RPM_MIN: + description: + short: UART ESC RPM Min + long: Minimum RPM for ESC + type: int32 + default: 5500 + unit: rpm + VOXL_ESC_RPM_MAX: + description: + short: UART ESC RPM Max + long: Maximum RPM for ESC + type: int32 + default: 15000 + unit: rpm + VOXL_ESC_MODE: + description: + short: UART ESC Mode + long: Selects what type of mode is enabled, if any + type: enum + values: + 0: '- None' + 1: '- Turtle Mode enabled via AUX1' + 2: '- Turtle Mode enabled via AUX2' + 3: '- UART Passthrough Mode' + default: 0 + reboot_required: true + min: 0 + max: 3 + VOXL_ESC_SDIR1: + description: + short: UART ESC ID 1 Spin Direction Flag + type: enum + values: + 0: '- Default' + 1: '- Reverse' + default: 0 + VOXL_ESC_SDIR2: + description: + short: UART ESC ID 2 Spin Direction Flag + type: enum + values: + 0: '- Default' + 1: '- Reverse' + default: 0 + VOXL_ESC_SDIR3: + description: + short: UART ESC ID 3 Spin Direction Flag + type: enum + values: + 0: '- Default' + 1: '- Reverse' + default: 0 + VOXL_ESC_SDIR4: + description: + short: UART ESC ID 4 Spin Direction Flag + type: enum + values: + 0: '- Default' + 1: '- Reverse' + default: 0 + VOXL_ESC_T_PERC: + description: + short: UART ESC Turtle Mode Crash Flip Motor Percent + type: int32 + default: 90 + min: 1 + max: 100 + decimal: 10 + increment: 1 + VOXL_ESC_T_DEAD: + description: + short: UART ESC Turtle Mode Crash Flip Motor Deadband + type: int32 + default: 20 + min: 0 + max: 100 + decimal: 10 + increment: 1 + VOXL_ESC_T_MINF: + description: + short: UART ESC Turtle Mode Crash Flip Motor STICK_MINF + type: float + default: 0.15 + min: 0.0 + max: 100.0 + decimal: 10 + increment: 1.0 + VOXL_ESC_T_EXPO: + description: + short: UART ESC Turtle Mode Crash Flip Motor expo + type: int32 + default: 35 + min: 0 + max: 100 + decimal: 10 + increment: 1 + VOXL_ESC_T_COSP: + description: + short: UART ESC Turtle Mode Cosphi + type: float + default: 0.99 + min: 0.0 + max: 1.0 + decimal: 10 + increment: 0.001 + VOXL_ESC_T_ON: + description: + short: UART ESC Turtle Mode button index for MAVLink manual control + long: |- + Specifies which button in the MAVLink MANUAL_CONTROL buttons field + activates turtle mode. Only used when data source is a MAVLink instance. + When data source is RC, turtle mode activation uses the AUX channel + selected by VOXL_ESC_MODE instead. + Set to -1 to disable turtle mode activation via MAVLink buttons. + type: enum + values: + -1: Disabled + default: -1 + reboot_required: true + min: -1 + max: 15 + VOXL_ESC_VLOG: + description: + short: UART ESC verbose logging + type: enum + values: + 0: '- Disabled' + 1: '- Enabled' + default: 0 + reboot_required: true + min: 0 + max: 1 + VOXL_ESC_PUB_BST: + description: + short: UART ESC Enable publishing of battery status + long: Only applicable to ESCs that report total battery voltage and current + type: enum + values: + 0: '- Disabled' + 1: '- Enabled' + default: 1 + reboot_required: true + min: 0 + max: 1 + VOXL_ESC_T_WARN: + description: + short: UART ESC Temperature Warning Threshold (Degrees C) + long: Only applicable to ESCs that report temperature + type: enum + values: + 0: '- Disabled' + default: 0 + reboot_required: true + min: 0 + max: 200 + VOXL_ESC_T_OVER: + description: + short: UART ESC Over-Temperature Threshold (Degrees C) + long: Only applicable to ESCs that report temperature + type: enum + values: + 0: '- Disabled' + default: 0 + reboot_required: true + min: 0 + max: 200 + VOXL_ESC_GPIO_CH: + description: + short: GPIO Control Channel + type: enum + values: + 0: '- Disabled' + default: 0 + reboot_required: true + min: 0 + max: 6 + VOXL_ESC_CMD: + description: + short: UART ESC command type + long: Selects between RPM or PWM commands + type: enum + values: + 0: '- RPM' + 1: '- PWM' + default: 0 + reboot_required: true + min: 0 + max: 1 + VOXL_ESC_PWR_MIN: + description: + short: UART ESC Minimum motor power + long: |- + Minimum motor power for ESC when VOXL_ESC_CMD is set for PWM. + Make sure to set this high enough so that the motors are always spinning + while armed. + type: float + default: 0.05 + min: 0.0 + max: 1.0 diff --git a/src/drivers/adc/ads1115/CMakeLists.txt b/src/drivers/adc/ads1115/CMakeLists.txt index 744cdfdb6b..d0fcdb0215 100644 --- a/src/drivers/adc/ads1115/CMakeLists.txt +++ b/src/drivers/adc/ads1115/CMakeLists.txt @@ -37,5 +37,7 @@ px4_add_module( SRCS ads1115_main.cpp ADS1115.cpp + MODULE_CONFIG + ads1115_params.yaml DEPENDS ) diff --git a/src/drivers/adc/ads1115/ads1115_params.c b/src/drivers/adc/ads1115/ads1115_params.c deleted file mode 100644 index b1af67f307..0000000000 --- a/src/drivers/adc/ads1115/ads1115_params.c +++ /dev/null @@ -1,43 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2022 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Enable external ADS1115 ADC - * - * If enabled, the internal ADC is not used. - * - * @boolean - * @reboot_required true - * @group Sensors - */ -PARAM_DEFINE_INT32(ADC_ADS1115_EN, 0); diff --git a/src/drivers/adc/ads1115/ads1115_params.yaml b/src/drivers/adc/ads1115/ads1115_params.yaml new file mode 100644 index 0000000000..93fb0f4052 --- /dev/null +++ b/src/drivers/adc/ads1115/ads1115_params.yaml @@ -0,0 +1,11 @@ +module_name: ads1115 +parameters: +- group: Sensors + definitions: + ADC_ADS1115_EN: + description: + short: Enable external ADS1115 ADC + long: If enabled, the internal ADC is not used. + type: boolean + default: 0 + reboot_required: true diff --git a/src/drivers/adc/ads7128/CMakeLists.txt b/src/drivers/adc/ads7128/CMakeLists.txt new file mode 100644 index 0000000000..2c449c419f --- /dev/null +++ b/src/drivers/adc/ads7128/CMakeLists.txt @@ -0,0 +1,45 @@ +############################################################################ +# +# Copyright (c) 2026 PX4 Development Team. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# 3. Neither the name PX4 nor the names of its contributors may be +# used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS +# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED +# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +############################################################################ + +px4_add_module( + MODULE drivers__adc__ads7128 + MAIN ads7128 + COMPILE_FLAGS + SRCS + ads7128.cpp + ads7128_main.cpp + MODULE_CONFIG + module.yaml + DEPENDS + px4_work_queue + ) diff --git a/src/drivers/adc/ads7128/Kconfig b/src/drivers/adc/ads7128/Kconfig new file mode 100644 index 0000000000..3ef9efd56c --- /dev/null +++ b/src/drivers/adc/ads7128/Kconfig @@ -0,0 +1,5 @@ +menuconfig DRIVERS_ADC_ADS7128 + bool "ADS7128 driver" + default n + ---help--- + Enable support for ADS7128 diff --git a/src/drivers/adc/ads7128/ads7128.cpp b/src/drivers/adc/ads7128/ads7128.cpp new file mode 100644 index 0000000000..4d95adf284 --- /dev/null +++ b/src/drivers/adc/ads7128/ads7128.cpp @@ -0,0 +1,354 @@ +/**************************************************************************** + * + * Copyright (C) 2026 PX4 Development Team. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name PX4 nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ +#include "ads7128.h" +#include + +#define READ 0x10 +#define WRITE 0x08 +#define SET_BIT 0x18 +#define CLEAR_BIT 0x20 + +#define SYSTEM_STATUS 0x00 +#define GENERAL_CFG 0x01 +#define DATA_CFG 0x02 +#define OSR_CFG 0x03 +#define OPMODE_CFG 0x04 +#define PIN_CFG 0x05 +#define GPIO_CFG 0x07 +#define GPO_DRIVE_CFG 0x09 +#define GPO_VALUE 0x0B +#define GPI_VALUE 0x0D +#define SEQUENCE_CFG 0x10 +#define CHANNEL_SEL 0x11 +#define AUTO_SEQ_CH_SEL 0x12 + +#define RECENT_CH0_LSB 0xA0 + + +ADS7128::ADS7128(const I2CSPIDriverConfig &config) : + I2C(config), + I2CSPIDriver(config), + ModuleParams(nullptr), + _cycle_perf(perf_alloc(PC_ELAPSED, MODULE_NAME": single-sample")), + _comms_errors(perf_alloc(PC_COUNT, MODULE_NAME": comms errors")) +{ + static_assert(arraySize(adc_report_s::channel_id) >= NUM_CHANNELS, "ADS7128 reports 8 channels"); +} + +ADS7128::~ADS7128() +{ + ScheduleClear(); + perf_free(_cycle_perf); + perf_free(_comms_errors); +} + +int ADS7128::init() +{ + int ret = I2C::init(); + + if (ret != PX4_OK) { + PX4_DEBUG("I2C::init failed (%i)", ret); + return ret; + } + + _adc_report.device_id = this->get_device_id(); + _adc_report.v_ref = _adc_ads7128_refv.get(); + _adc_report.resolution = 4096; + + ScheduleNow(); + return PX4_OK; +} + +int ADS7128::init_calibrate() +{ + uint8_t send_data[3] = {SET_BIT, GENERAL_CFG, 0x02}; + int ret = transfer(&send_data[0], 3, nullptr, 0); + return ret; +} + +int ADS7128::poll_calibrate() +{ + uint8_t send_data[2] = {READ, GENERAL_CFG}; + uint8_t recv_data; + + int ret = transfer(&send_data[0], 2, nullptr, 0); + ret |= transfer(nullptr, 0, &recv_data, 1); + + if (ret == PX4_OK && !(recv_data & 2u)) { + return PX4_OK; + } + + return PX4_ERROR; +} + +int ADS7128::init_reset() +{ + uint8_t send_data[3] = {SET_BIT, GENERAL_CFG, 0x01}; + int ret = transfer(&send_data[0], 3, nullptr, 0); + return ret; +} + +int ADS7128::poll_reset() +{ + uint8_t send_data[2] = {READ, GENERAL_CFG}; + uint8_t recv_data; + + int ret = transfer(&send_data[0], 2, nullptr, 0); + ret |= transfer(nullptr, 0, &recv_data, 1); + + if (ret == PX4_OK && !(recv_data & 1u)) { + return PX4_OK; + } + + return PX4_ERROR; +} + +int ADS7128::adc_get() +{ + uint8_t send_data[2]; + uint8_t recv_data[2]; + send_data[0] = READ; + + for (int i = 0; i < 8; i++) { + // Read LSB data + send_data[1] = RECENT_CH0_LSB + (i * 2); + int ret = transfer(&send_data[0], 2, nullptr, 0); + ret |= transfer(nullptr, 0, &recv_data[0], 1); + + // Read MSB data + send_data[1] = RECENT_CH0_LSB + (i * 2) + 1; + ret |= transfer(&send_data[0], 2, nullptr, 0); + ret |= transfer(nullptr, 0, &recv_data[1], 1); + + uint16_t raw_value = (((uint16_t)recv_data[1]) << 4) | (recv_data[0] >> 4); + + if (ret == PX4_OK) { + _adc_report.channel_id[i] = i; + _adc_report.raw_data[i] = raw_value; + + } else { + return PX4_ERROR; + } + } + + return PX4_OK; +} + +int ADS7128::probe() +{ + uint8_t send_data[3]; + uint8_t recv_data[2]; + + for (int i = 0; i < 3; i++) { + // Put device in in manual mode + send_data[0] = WRITE; + send_data[1] = OPMODE_CFG; + send_data[2] = 0x00; + int ret = transfer(&send_data[0], 3, nullptr, 0); + + // Select channel 0 + send_data[0] = WRITE; + send_data[1] = CHANNEL_SEL; + send_data[2] = 0x00; // Channel 0 + ret |= transfer(&send_data[0], 3, nullptr, 0); + + // Set device in debug mode (should respond with 0xA5AX to all reads) + send_data[0] = SET_BIT; + send_data[1] = DATA_CFG; + send_data[2] = 0x80; + ret |= transfer(&send_data[0], 3, nullptr, 0); + + // Read + ret |= transfer(nullptr, 0, &recv_data[0], 2); + + // Turn debug mode off + send_data[0] = CLEAR_BIT; + send_data[1] = DATA_CFG; + send_data[2] = 0x80; + ret |= transfer(&send_data[0], 3, nullptr, 0); + + if (recv_data[0] == 165 && recv_data[1] >= 160 && ret == PX4_OK) { + return PX4_OK; + } + + px4_usleep(10000); + } + + return PX4_ERROR; +} + +int ADS7128::configure() +{ + uint8_t send_data[3]; + + // Configure all channels as AIN (Clear all bits in PIN_CFG and GPIO_CFG) + send_data[0] = CLEAR_BIT; + send_data[1] = PIN_CFG; + send_data[2] = 0xFF; + int ret = transfer(&send_data[0], 3, nullptr, 0); + + send_data[0] = CLEAR_BIT; + send_data[1] = GPIO_CFG; + send_data[2] = 0xFF; + ret |= transfer(&send_data[0], 3, nullptr, 0); + + // Enable analog inputs for sequencing (AUTO_SEQ_CHSEL) + send_data[0] = WRITE; + send_data[1] = AUTO_SEQ_CH_SEL; + send_data[2] = 0xFF; // Select all channels + ret |= transfer(&send_data[0], 3, nullptr, 0); + + // Select Auto-sequence mode (SEQ_MODE = 01b) + send_data[0] = WRITE; + send_data[1] = SEQUENCE_CFG; + send_data[2] = 0x01; + ret |= transfer(&send_data[0], 3, nullptr, 0); + + // Set mode to autonomous monitoring (CONV_MODE = 01b) + send_data[0] = WRITE; + send_data[1] = OPMODE_CFG; + send_data[2] = 0x20; + ret |= transfer(&send_data[0], 3, nullptr, 0); + + // Enable statistics module (STAT_EN = 1) + send_data[0] = SET_BIT; + send_data[1] = GENERAL_CFG; + send_data[2] = 0x20; + ret |= transfer(&send_data[0], 3, nullptr, 0); + + // Start channel sequence (SEQ_START = 1) + send_data[0] = SET_BIT; + send_data[1] = SEQUENCE_CFG; + send_data[2] = 0x10; + ret |= transfer(&send_data[0], 3, nullptr, 0); + + // Provide the first start of conversion (From the datasheet: "The first start of conversion must be provided by the host") + send_data[0] = SET_BIT; + send_data[1] = GENERAL_CFG; + send_data[2] = 0x08; + ret |= transfer(&send_data[0], 3, nullptr, 0); + + return ret; +} + +void ADS7128::exit_and_cleanup() +{ + I2CSPIDriverBase::exit_and_cleanup(); +} + +void ADS7128::RunImpl() +{ + if (should_exit()) { + PX4_INFO("stopping"); + return; + } + + int ret; + + switch (_state) { + case STATE::RESET: + ret = init_reset(); + + if (ret == PX4_OK) { + _state = STATE::CONFIGURE; + + } else { + _state = STATE::RESET; + perf_count(_comms_errors); + } + + ScheduleDelayed(SAMPLE_INTERVAL * 2); // Reset should take around 10ms to finish => double the sample interval to be safe + break; + + case STATE::CONFIGURE: + ret = poll_reset(); + ret |= configure(); + ret |= init_calibrate(); + + if (ret == PX4_OK) { + _state = STATE::CALIBRATE; + + } else { + _state = STATE::RESET; + perf_count(_comms_errors); + } + + ScheduleDelayed(SAMPLE_INTERVAL); // Calibration should only take around 50 microseconds to finish + break; + + case STATE::CALIBRATE: + ret = poll_calibrate(); + + if (ret == PX4_OK) { + _state = STATE::WORK; + + } else { + _state = STATE::RESET; + perf_count(_comms_errors); + } + + ScheduleDelayed(SAMPLE_INTERVAL); + break; + + case STATE::WORK: + perf_begin(_cycle_perf); + + ret = adc_get(); + _adc_report.timestamp = hrt_absolute_time(); + + + perf_end(_cycle_perf); + + if (ret != PX4_OK) { + + consecutive_fails++; + + if (consecutive_fails > 10) { + _state = STATE::RESET; + consecutive_fails = 0; + } + + perf_count(_comms_errors); + + } else { + _adc_report_pub.publish(_adc_report); + } + + ScheduleDelayed(SAMPLE_INTERVAL); + break; + } + + for (unsigned i = 0; i < arraySize(adc_report_s::channel_id); ++i) { + _adc_report.channel_id[i] = -1; + } +} diff --git a/src/modules/fw_att_control/fw_pitch_controller.h b/src/drivers/adc/ads7128/ads7128.h similarity index 57% rename from src/modules/fw_att_control/fw_pitch_controller.h rename to src/drivers/adc/ads7128/ads7128.h index d8a40ab636..020e8d795c 100644 --- a/src/modules/fw_att_control/fw_pitch_controller.h +++ b/src/drivers/adc/ads7128/ads7128.h @@ -1,6 +1,6 @@ /**************************************************************************** * - * Copyright (c) 2020-2023 PX4 Development Team. All rights reserved. + * Copyright (C) 2026 PX4 Development Team. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -30,45 +30,59 @@ * POSSIBILITY OF SUCH DAMAGE. * ****************************************************************************/ +#pragma once -/** - * @file fw_pitch_controller.h - * Definition of a simple pitch P controller. - */ +#include +#include +#include +#include +#include +#include +#include -#ifndef FW_PITCH_CONTROLLER_H -#define FW_PITCH_CONTROLLER_H +using namespace time_literals; -class PitchController +class ADS7128 : public device::I2C, public I2CSPIDriver, public ModuleParams { public: - PitchController() = default; - ~PitchController() = default; + ADS7128(const I2CSPIDriverConfig &config); + ~ADS7128() override; - /** - * @brief Calculates both euler and body pitch rate setpoints. - * - * @param pitch_setpoint pitch setpoint [rad] - * @param euler_yaw_rate_setpoint euler yaw rate setpoint [rad/s] - * @param roll estimated roll [rad] - * @param pitch estimated pitch [rad] - * @return Pitch body rate setpoint [rad/s] - */ - float control_pitch(float pitch_setpoint, float euler_yaw_rate_setpoint, float roll, float pitch); - - void set_time_constant(float time_constant) { _tc = time_constant; } - void set_max_rate_pos(float max_rate_pos) { _max_rate_pos = max_rate_pos; } - void set_max_rate_neg(float max_rate_neg) { _max_rate_neg = max_rate_neg; } - - float get_euler_rate_setpoint() { return _euler_rate_setpoint; } - float get_body_rate_setpoint() { return _body_rate_setpoint; } + static void print_usage(); + int init() override; + void RunImpl(); + int probe() override; + void print_status() override; private: - float _tc{}; - float _max_rate_pos{}; - float _max_rate_neg{}; - float _euler_rate_setpoint{}; - float _body_rate_setpoint{}; -}; + static const hrt_abstime SAMPLE_INTERVAL{10_ms}; + static constexpr int NUM_CHANNELS = 8; -#endif // FW_PITCH_CONTROLLER_H + perf_counter_t _cycle_perf; + perf_counter_t _comms_errors; + + uORB::PublicationMulti _adc_report_pub{ORB_ID(adc_report)}; + adc_report_s _adc_report{}; + + DEFINE_PARAMETERS( + (ParamFloat) _adc_ads7128_refv + ) + + int init_reset(); + int poll_reset(); + int configure(); + int init_calibrate(); + int poll_calibrate(); + int adc_get(); + void exit_and_cleanup() override; + + enum class STATE : uint8_t { + RESET, + CONFIGURE, + CALIBRATE, + WORK + }; + STATE _state{STATE::RESET}; + + int consecutive_fails{0}; +}; diff --git a/boards/xc-fly/xc-slim/src/bootloader_main.c b/src/drivers/adc/ads7128/ads7128_main.cpp similarity index 57% rename from boards/xc-fly/xc-slim/src/bootloader_main.c rename to src/drivers/adc/ads7128/ads7128_main.cpp index 5670308a29..833ee72611 100644 --- a/boards/xc-fly/xc-slim/src/bootloader_main.c +++ b/src/drivers/adc/ads7128/ads7128_main.cpp @@ -1,6 +1,6 @@ /**************************************************************************** * - * Copyright (c) 2021 PX4 Development Team. All rights reserved. + * Copyright (c) 2026 PX4 Development Team. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -30,46 +30,56 @@ * POSSIBILITY OF SUCH DAMAGE. * ****************************************************************************/ +#include +#include +#include "ads7128.h" -/** - * @file bootloader_main.c - * - * FMU-specific early startup code for bootloader -*/ - -#include "board_config.h" -#include "bl.h" - -#include -#include -#include -#include -#include -#include "arm_internal.h" -#include - -extern int sercon_main(int c, char **argv); - -__EXPORT void board_on_reset(int status) {} - -__EXPORT void stm32_boardinitialize(void) +void ADS7128::print_usage() { - /* configure USB interfaces */ - stm32_usbinitialize(); + PRINT_MODULE_USAGE_NAME("ADS7128", "driver"); + PRINT_MODULE_USAGE_SUBCATEGORY("adc"); + PRINT_MODULE_USAGE_COMMAND("start"); + PRINT_MODULE_USAGE_PARAMS_I2C_SPI_DRIVER(true, false); + PRINT_MODULE_USAGE_PARAMS_I2C_ADDRESS(0x10); + PRINT_MODULE_USAGE_DEFAULT_COMMANDS(); } -__EXPORT int board_app_initialize(uintptr_t arg) +void ADS7128::print_status() { - return 0; + I2CSPIDriverBase::print_status(); + perf_print_counter(_cycle_perf); + perf_print_counter(_comms_errors); } -void board_late_initialize(void) +extern "C" int ads7128_main(int argc, char *argv[]) { - sercon_main(0, NULL); -} + using ThisDriver = ADS7128; + BusCLIArguments cli{true, false}; -extern void sys_tick_handler(void); -void board_timerhook(void) -{ - sys_tick_handler(); + cli.default_i2c_frequency = 400000; + cli.i2c_address = 0x10; + const char *name = MODULE_NAME; + const char *verb = cli.parseDefaultArguments(argc, argv); + + if (!verb) { + ThisDriver::print_usage(); + return -1; + } + + BusInstanceIterator iterator(name, cli, DRV_ADC_DEVTYPE_ADS7128); + + if (!strcmp(verb, "start")) { + return ThisDriver::module_start(cli, iterator); + } + + if (!strcmp(verb, "stop")) { + return ThisDriver::module_stop(iterator); + } + + if (!strcmp(verb, "status")) { + return ThisDriver::module_status(iterator); + } + + ThisDriver::print_usage(); + return -1; } diff --git a/src/drivers/adc/ads7128/module.yaml b/src/drivers/adc/ads7128/module.yaml new file mode 100644 index 0000000000..bcfa9aa990 --- /dev/null +++ b/src/drivers/adc/ads7128/module.yaml @@ -0,0 +1,20 @@ +__max_num_config_instances: &max_num_config_instances 1 + +module_name: ADS7128 + +parameters: + - group: ADC + definitions: + ADC_ADS7128_REFV: + description: + short: Applied reference Voltage. + long: | + The voltage applied to the ADS7128 board as reference + type: float + unit: V + min: 2.35 + max: 5.5 + decimal: 2 + increment: 0.01 + reboot_required: true + default: 3.3 diff --git a/src/drivers/adc/tla2528/module.yaml b/src/drivers/adc/tla2528/module.yaml index b9059ddf04..1ec9ba6536 100644 --- a/src/drivers/adc/tla2528/module.yaml +++ b/src/drivers/adc/tla2528/module.yaml @@ -5,16 +5,6 @@ module_name: TLA2528 parameters: - group: ADC definitions: - ADC_TLA2528_EN: - description: - short: Enable TLA2528 - long: | - Enable the driver for the TLA2528 - type: boolean - reboot_required: true - default: 0 - - ADC_TLA2528_REFV: description: short: Applied reference Voltage. diff --git a/src/drivers/barometer/bmp280/BMP280.cpp b/src/drivers/barometer/bmp280/BMP280.cpp index 864d4d3f3b..82772eba20 100644 --- a/src/drivers/barometer/bmp280/BMP280.cpp +++ b/src/drivers/barometer/bmp280/BMP280.cpp @@ -144,8 +144,12 @@ BMP280::collect() _collect_phase = false; - // this should be fairly close to the end of the conversion, so the best approximation of the time - const hrt_abstime timestamp_sample = hrt_absolute_time(); + /* Correct for measurement integration delay: the pressure was + * integrated over the preceding _measure_interval window, so the + * effective sample midpoint is half the measurement time before now. */ + const hrt_abstime now = hrt_absolute_time(); + const hrt_abstime half_meas = _measure_interval / 2; + const hrt_abstime timestamp_sample = (now > half_meas) ? (now - half_meas) : now; bmp280::data_s *data = _interface->get_data(BMP280_ADDR_DATA); if (data == nullptr) { diff --git a/src/drivers/barometer/bmp388/bmp388.cpp b/src/drivers/barometer/bmp388/bmp388.cpp index 464d9b5829..ab9557f504 100644 --- a/src/drivers/barometer/bmp388/bmp388.cpp +++ b/src/drivers/barometer/bmp388/bmp388.cpp @@ -171,8 +171,12 @@ BMP388::collect() perf_begin(_sample_perf); - /* this should be fairly close to the end of the conversion, so the best approximation of the time */ - const hrt_abstime timestamp_sample = hrt_absolute_time(); + /* Correct for measurement integration delay: the pressure was + * integrated over the preceding measurement_time window, so the + * effective sample midpoint is half the measurement time before now. */ + const hrt_abstime now = hrt_absolute_time(); + const hrt_abstime half_meas = get_measurement_time() / 2; + const hrt_abstime timestamp_sample = (now > half_meas) ? (now - half_meas) : now; if (!get_sensor_data(sensor_comp, &data)) { perf_count(_comms_errors); @@ -206,16 +210,15 @@ BMP388::collect() bool BMP388::soft_reset() { - bool result = false; uint8_t status; - int ret; - - ret = _interface->get_reg(BMP3_SENS_STATUS_REG_ADDR, &status); + int ret = _interface->get_reg(BMP3_SENS_STATUS_REG_ADDR, &status); if (ret != OK) { return false; } + bool result = false; + if (status & BMP3_CMD_RDY) { ret = _interface->set_reg(BPM3_CMD_SOFT_RESET, BMP3_CMD_ADDR); @@ -244,16 +247,9 @@ BMP388::soft_reset() static int8_t cal_crc(uint8_t seed, uint8_t data) { int8_t poly = 0x1D; - int8_t var2; - uint8_t i; - for (i = 0; i < 8; i++) { - if ((seed & 0x80) ^ (data & 0x80)) { - var2 = 1; - - } else { - var2 = 0; - } + for (uint8_t i = 0; i < 8; i++) { + int8_t var2 = ((seed & 0x80) ^ (data & 0x80)) ? 1 : 0; seed = (seed & 0x7F) << 1; data = (data & 0x7F) << 1; @@ -272,7 +268,6 @@ bool BMP388::validate_trimming_param() { uint8_t crc = 0xFF; - uint8_t stored_crc; uint8_t *trim_param = (uint8_t *)_cal; static_assert(BMP3_CALIB_DATA_LEN <= sizeof(*_cal), "unexpected struct size"); @@ -283,6 +278,8 @@ BMP388::validate_trimming_param() crc = (crc ^ 0xFF); + uint8_t stored_crc; + if (_interface->get_reg(BMP3_TRIM_CRC_DATA_ADDR, &stored_crc) != OK) { return false; } @@ -421,18 +418,14 @@ BMP388::set_sensor_settings() bool BMP388::set_op_mode(uint8_t op_mode) { - bool result = false; - uint8_t last_set_mode; uint8_t op_mode_reg_val; - int ret = OK; - - ret = _interface->get_reg(BMP3_PWR_CTRL_ADDR, &op_mode_reg_val); + int ret = _interface->get_reg(BMP3_PWR_CTRL_ADDR, &op_mode_reg_val); if (ret != OK) { return false; } - last_set_mode = BMP3_GET_BITS(op_mode_reg_val, BMP3_OP_MODE); + uint8_t last_set_mode = BMP3_GET_BITS(op_mode_reg_val, BMP3_OP_MODE); /* Device needs to be put in sleep mode to transition */ if (last_set_mode != BMP3_SLEEP_MODE) { @@ -446,6 +439,8 @@ BMP388::set_op_mode(uint8_t op_mode) px4_usleep(BMP3_POST_SLEEP_WAIT_TIME); } + bool result = false; + if (ret == OK) { ret = _interface->get_reg(BMP3_PWR_CTRL_ADDR, &op_mode_reg_val); @@ -474,13 +469,9 @@ BMP388::set_op_mode(uint8_t op_mode) */ static void parse_sensor_data(const uint8_t *reg_data, struct bmp3_uncomp_data *uncomp_data) { - uint32_t data_xlsb; - uint32_t data_lsb; - uint32_t data_msb; - - data_xlsb = (uint32_t)reg_data[0]; - data_lsb = (uint32_t)reg_data[1] << 8; - data_msb = (uint32_t)reg_data[2] << 16; + uint32_t data_xlsb = (uint32_t)reg_data[0]; + uint32_t data_lsb = (uint32_t)reg_data[1] << 8; + uint32_t data_msb = (uint32_t)reg_data[2] << 16; uncomp_data->pressure = data_msb | data_lsb | data_xlsb; data_xlsb = (uint32_t)reg_data[3]; @@ -499,24 +490,16 @@ static void parse_sensor_data(const uint8_t *reg_data, struct bmp3_uncomp_data * */ static int64_t compensate_temperature(const struct bmp3_uncomp_data *uncomp_data, struct bmp3_calib_data *calib_data) { - int64_t partial_data1; - int64_t partial_data2; - int64_t partial_data3; - int64_t partial_data4; - int64_t partial_data5; - int64_t partial_data6; - int64_t comp_temp; - - partial_data1 = ((int64_t)uncomp_data->temperature - (256 * calib_data->reg_calib_data.par_t1)); - partial_data2 = calib_data->reg_calib_data.par_t2 * partial_data1; - partial_data3 = (partial_data1 * partial_data1); - partial_data4 = (int64_t)partial_data3 * calib_data->reg_calib_data.par_t3; - partial_data5 = ((int64_t)(partial_data2 * 262144) + partial_data4); - partial_data6 = partial_data5 / 4294967296; + int64_t partial_data1 = ((int64_t)uncomp_data->temperature - (256 * calib_data->reg_calib_data.par_t1)); + int64_t partial_data2 = calib_data->reg_calib_data.par_t2 * partial_data1; + int64_t partial_data3 = (partial_data1 * partial_data1); + int64_t partial_data4 = (int64_t)partial_data3 * calib_data->reg_calib_data.par_t3; + int64_t partial_data5 = ((int64_t)(partial_data2 * 262144) + partial_data4); + int64_t partial_data6 = partial_data5 / 4294967296; /* Store t_lin in dev. structure for pressure calculation */ calib_data->reg_calib_data.t_lin = partial_data6; - comp_temp = (int64_t)((partial_data6 * 25) / 16384); + int64_t comp_temp = (int64_t)((partial_data6 * 25) / 16384); return comp_temp; } @@ -532,27 +515,19 @@ static uint64_t compensate_pressure(const struct bmp3_uncomp_data *uncomp_data, const struct bmp3_calib_data *calib_data) { const struct bmp3_reg_calib_data *reg_calib_data = &calib_data->reg_calib_data; - int64_t partial_data1; - int64_t partial_data2; - int64_t partial_data3; - int64_t partial_data4; - int64_t partial_data5; - int64_t partial_data6; - int64_t offset; - int64_t sensitivity; - uint64_t comp_press; - partial_data1 = reg_calib_data->t_lin * reg_calib_data->t_lin; - partial_data2 = partial_data1 / 64; - partial_data3 = (partial_data2 * reg_calib_data->t_lin) / 256; - partial_data4 = (reg_calib_data->par_p8 * partial_data3) / 32; - partial_data5 = (reg_calib_data->par_p7 * partial_data1) * 16; - partial_data6 = (reg_calib_data->par_p6 * reg_calib_data->t_lin) * 4194304; - offset = (reg_calib_data->par_p5 * 140737488355328) + partial_data4 + partial_data5 + partial_data6; + int64_t partial_data1 = reg_calib_data->t_lin * reg_calib_data->t_lin; + int64_t partial_data2 = partial_data1 / 64; + int64_t partial_data3 = (partial_data2 * reg_calib_data->t_lin) / 256; + int64_t partial_data4 = (reg_calib_data->par_p8 * partial_data3) / 32; + int64_t partial_data5 = (reg_calib_data->par_p7 * partial_data1) * 16; + int64_t partial_data6 = (reg_calib_data->par_p6 * reg_calib_data->t_lin) * 4194304; + int64_t offset = (reg_calib_data->par_p5 * 140737488355328) + partial_data4 + partial_data5 + partial_data6; partial_data2 = (reg_calib_data->par_p4 * partial_data3) / 32; partial_data4 = (reg_calib_data->par_p3 * partial_data1) * 4; partial_data5 = (reg_calib_data->par_p2 - 16384) * reg_calib_data->t_lin * 2097152; - sensitivity = ((reg_calib_data->par_p1 - 16384) * 70368744177664) + partial_data2 + partial_data4 + partial_data5; + int64_t sensitivity = ((reg_calib_data->par_p1 - 16384) * 70368744177664) + partial_data2 + partial_data4 + + partial_data5; partial_data1 = (sensitivity / 16777216) * uncomp_data->pressure; partial_data2 = reg_calib_data->par_p10 * reg_calib_data->t_lin; partial_data3 = partial_data2 + (65536 * reg_calib_data->par_p9); @@ -564,7 +539,7 @@ static uint64_t compensate_pressure(const struct bmp3_uncomp_data *uncomp_data, partial_data2 = (reg_calib_data->par_p11 * partial_data6) / 65536; partial_data3 = (partial_data2 * uncomp_data->pressure) / 128; partial_data4 = (offset / 4) + partial_data1 + partial_data5 + partial_data3; - comp_press = (((uint64_t)partial_data4 * 25) / (uint64_t)1099511627776); + uint64_t comp_press = (((uint64_t)partial_data4 * 25) / (uint64_t)1099511627776); return comp_press; } @@ -585,7 +560,7 @@ BMP388::compensate_data(uint8_t sensor_comp, struct bmp3_reg_calib_data *reg_calib_data = &calib_data.reg_calib_data; memcpy(reg_calib_data, _cal, 21); - if ((uncomp_data != NULL) && (comp_data != NULL)) { + if ((uncomp_data != nullptr) && (comp_data != nullptr)) { if (sensor_comp & (BMP3_PRESS | BMP3_TEMP)) { comp_data->temperature = compensate_temperature(uncomp_data, &calib_data); } @@ -595,10 +570,10 @@ BMP388::compensate_data(uint8_t sensor_comp, } } else { - rslt = -1; + rslt = ERROR; } - return (rslt == 0); + return (rslt == OK); } /*! @@ -609,13 +584,12 @@ BMP388::compensate_data(uint8_t sensor_comp, bool BMP388::get_sensor_data(uint8_t sensor_comp, struct bmp3_data *comp_data) { + uint8_t reg_data[BMP3_P_T_DATA_LEN] {}; + + int8_t rslt = _interface->get_reg_buf(BMP3_SENS_STATUS_REG_ADDR, reg_data, BMP3_P_T_DATA_LEN); + bool result = false; - int8_t rslt; - - uint8_t reg_data[BMP3_P_T_DATA_LEN]; - struct bmp3_uncomp_data uncomp_data; - - rslt = _interface->get_reg_buf(BMP3_SENS_STATUS_REG_ADDR, reg_data, BMP3_P_T_DATA_LEN); + struct bmp3_uncomp_data uncomp_data {}; if (rslt == OK) { uint8_t status = reg_data[0]; diff --git a/src/drivers/barometer/bmp581/bmp581.cpp b/src/drivers/barometer/bmp581/bmp581.cpp index 9f05e0519e..2c4c469d79 100644 --- a/src/drivers/barometer/bmp581/bmp581.cpp +++ b/src/drivers/barometer/bmp581/bmp581.cpp @@ -137,8 +137,12 @@ int BMP581::collect() perf_begin(_sample_perf); - /* this should be fairly close to the end of the conversion, so the best approximation of the time */ - const hrt_abstime timestamp_sample = hrt_absolute_time(); + /* Correct for measurement integration delay: the pressure was + * integrated over the preceding measurement_time window, so the + * effective sample midpoint is half the measurement time before now. */ + const hrt_abstime now = hrt_absolute_time(); + const hrt_abstime half_meas = get_measurement_time() / 2; + const hrt_abstime timestamp_sample = (now > half_meas) ? (now - half_meas) : now; int_status = get_interrupt_status(); @@ -710,6 +714,10 @@ int BMP581::get_sensor_data(bmp5_sensor_data *sensor_data) /* Division by 2^6(whose equivalent value is 64) is performed to get pressure data in Pa */ sensor_data->pressure = (float)(raw_data_p / 64.0); + if (sensor_data->pressure < BMP5_PRESSURE_MIN_PA || sensor_data->pressure > BMP5_PRESSURE_MAX_PA) { + return PX4_ERROR; + } + } else { sensor_data->pressure = 0.0; } diff --git a/src/drivers/barometer/bmp581/bmp581.h b/src/drivers/barometer/bmp581/bmp581.h index 00d149b950..47e336a605 100644 --- a/src/drivers/barometer/bmp581/bmp581.h +++ b/src/drivers/barometer/bmp581/bmp581.h @@ -101,6 +101,10 @@ #define BMP5_DEEP_ENABLED (0) #define BMP5_DEEP_DISABLED (1) +/* Pressure operating range (Pa) */ +#define BMP5_PRESSURE_MIN_PA (30000.0f) +#define BMP5_PRESSURE_MAX_PA (125000.0f) + /* ODR settings */ #define BMP5_ODR_50_HZ (0x0F) #define BMP5_ODR_05_HZ (0x18) diff --git a/src/drivers/barometer/dps310/CMakeLists.txt b/src/drivers/barometer/dps310/CMakeLists.txt index 8227591962..5da4c1faa8 100644 --- a/src/drivers/barometer/dps310/CMakeLists.txt +++ b/src/drivers/barometer/dps310/CMakeLists.txt @@ -40,5 +40,6 @@ px4_add_module( DPS310_SPI.cpp dps310_main.cpp DEPENDS + drivers__device px4_work_queue ) diff --git a/src/drivers/barometer/goertek/spa06/CMakeLists.txt b/src/drivers/barometer/goertek/spa06/CMakeLists.txt index 572b5dab2a..5dbc4efc68 100644 --- a/src/drivers/barometer/goertek/spa06/CMakeLists.txt +++ b/src/drivers/barometer/goertek/spa06/CMakeLists.txt @@ -40,6 +40,8 @@ px4_add_module( SPA06_I2C.cpp SPA06_SPI.cpp spa06_main.cpp + MODULE_CONFIG + parameters.yaml DEPENDS px4_work_queue ) diff --git a/src/drivers/barometer/goertek/spa06/parameters.c b/src/drivers/barometer/goertek/spa06/parameters.c deleted file mode 100644 index a785329131..0000000000 --- a/src/drivers/barometer/goertek/spa06/parameters.c +++ /dev/null @@ -1,41 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2024 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Goertek SPA06 Barometer (external I2C) - * - * @reboot_required true - * @group Sensors - * @boolean - */ -PARAM_DEFINE_INT32(SENS_EN_SPA06, 0); diff --git a/src/drivers/barometer/goertek/spa06/parameters.yaml b/src/drivers/barometer/goertek/spa06/parameters.yaml new file mode 100644 index 0000000000..0790b4c2a7 --- /dev/null +++ b/src/drivers/barometer/goertek/spa06/parameters.yaml @@ -0,0 +1,10 @@ +module_name: spa06 +parameters: +- group: Sensors + definitions: + SENS_EN_SPA06: + description: + short: Goertek SPA06 Barometer (external I2C) + type: boolean + default: 0 + reboot_required: true diff --git a/src/drivers/barometer/goertek/spl06/CMakeLists.txt b/src/drivers/barometer/goertek/spl06/CMakeLists.txt index 044ca466a5..1df05ebe5b 100644 --- a/src/drivers/barometer/goertek/spl06/CMakeLists.txt +++ b/src/drivers/barometer/goertek/spl06/CMakeLists.txt @@ -40,6 +40,8 @@ px4_add_module( SPL06_I2C.cpp SPL06_SPI.cpp spl06_main.cpp + MODULE_CONFIG + parameters.yaml DEPENDS px4_work_queue ) diff --git a/src/drivers/barometer/goertek/spl06/parameters.c b/src/drivers/barometer/goertek/spl06/parameters.c deleted file mode 100644 index 2712844477..0000000000 --- a/src/drivers/barometer/goertek/spl06/parameters.c +++ /dev/null @@ -1,41 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2022 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Goertek SPL06 Barometer (external I2C) - * - * @reboot_required true - * @group Sensors - * @boolean - */ -PARAM_DEFINE_INT32(SENS_EN_SPL06, 0); diff --git a/src/drivers/barometer/goertek/spl06/parameters.yaml b/src/drivers/barometer/goertek/spl06/parameters.yaml new file mode 100644 index 0000000000..cb5703e8f4 --- /dev/null +++ b/src/drivers/barometer/goertek/spl06/parameters.yaml @@ -0,0 +1,10 @@ +module_name: spl06 +parameters: +- group: Sensors + definitions: + SENS_EN_SPL06: + description: + short: Goertek SPL06 Barometer (external I2C) + type: boolean + default: 0 + reboot_required: true diff --git a/src/drivers/barometer/lps22hb/LPS22HB.cpp b/src/drivers/barometer/lps22hb/LPS22HB.cpp index 3121acc0ef..a29b2189db 100644 --- a/src/drivers/barometer/lps22hb/LPS22HB.cpp +++ b/src/drivers/barometer/lps22hb/LPS22HB.cpp @@ -139,8 +139,12 @@ int LPS22HB::collect() uint8_t TEMP_OUT_H; } report{}; - /* this should be fairly close to the end of the measurement, so the best approximation of the time */ - const hrt_abstime timestamp_sample = hrt_absolute_time(); + /* Correct for measurement integration delay: the one-shot conversion + * was started CONVERSION_INTERVAL ago, so the effective sample + * midpoint is half the conversion interval before now. */ + const hrt_abstime now = hrt_absolute_time(); + const hrt_abstime half_meas = LPS22HB_CONVERSION_INTERVAL / 2; + const hrt_abstime timestamp_sample = (now > half_meas) ? (now - half_meas) : now; int ret = _interface->read(STATUS, (uint8_t *)&report, sizeof(report)); if (ret != OK) { diff --git a/src/drivers/barometer/lps25h/LPS25H.cpp b/src/drivers/barometer/lps25h/LPS25H.cpp index ed28d0b456..4a74b4be6f 100644 --- a/src/drivers/barometer/lps25h/LPS25H.cpp +++ b/src/drivers/barometer/lps25h/LPS25H.cpp @@ -151,8 +151,12 @@ int LPS25H::collect() int16_t t; } report{}; - /* get measurements from the device : MSB enables register address auto-increment */ - const hrt_abstime timestamp_sample = hrt_absolute_time(); + /* Correct for measurement integration delay: the one-shot conversion + * was started CONVERSION_INTERVAL ago, so the effective sample + * midpoint is half the conversion interval before now. */ + const hrt_abstime now = hrt_absolute_time(); + const hrt_abstime half_meas = LPS25H_CONVERSION_INTERVAL / 2; + const hrt_abstime timestamp_sample = (now > half_meas) ? (now - half_meas) : now; int ret = _interface->read(ADDR_STATUS_REG | (1 << 7), (uint8_t *)&report, sizeof(report)); if (ret != OK) { diff --git a/src/drivers/barometer/mpl3115a2/MPL3115A2.cpp b/src/drivers/barometer/mpl3115a2/MPL3115A2.cpp index 8acc202465..8c4348b705 100644 --- a/src/drivers/barometer/mpl3115a2/MPL3115A2.cpp +++ b/src/drivers/barometer/mpl3115a2/MPL3115A2.cpp @@ -50,6 +50,7 @@ #define MPL3115A2_CONVERSION_INTERVAL 10000 /* microseconds */ #define MPL3115A2_OSR 2 /* Over Sample rate of 4 18MS Minimum time between data samples */ +#define MPL3115A2_CONVERSION_TIME 18000 /* ADC conversion time at OSR 2 (ratio 4), microseconds */ #define MPL3115A2_CTRL_TRIGGER (CTRL_REG1_OST | CTRL_REG1_OS(MPL3115A2_OSR)) MPL3115A2::MPL3115A2(const I2CSPIDriverConfig &config) : @@ -200,6 +201,8 @@ int MPL3115A2::measure() perf_count(_comms_errors); } + _measure_start_time = hrt_absolute_time(); + perf_end(_measure_perf); return PX4_OK; @@ -228,7 +231,12 @@ int MPL3115A2::collect() */ uint8_t b[3 + 2] {}; uint8_t reg = OUT_P_MSB; - const hrt_abstime timestamp_sample = hrt_absolute_time(); + + /* Correct for measurement integration delay: the conversion was + * started in measure(), so the effective sample midpoint is half the + * conversion time after the start. Using the stored start time avoids + * jitter from the polling interval. */ + const hrt_abstime timestamp_sample = _measure_start_time + MPL3115A2_CONVERSION_TIME / 2; ret = transfer(®, 1, &b[0], sizeof(b)); if (ret == -EIO) { diff --git a/src/drivers/barometer/mpl3115a2/MPL3115A2.hpp b/src/drivers/barometer/mpl3115a2/MPL3115A2.hpp index 9bf8bf7f51..ba0ebe9159 100644 --- a/src/drivers/barometer/mpl3115a2/MPL3115A2.hpp +++ b/src/drivers/barometer/mpl3115a2/MPL3115A2.hpp @@ -81,6 +81,8 @@ private: bool _collect_phase{false}; + hrt_abstime _measure_start_time{0}; + perf_counter_t _sample_perf; perf_counter_t _measure_perf; perf_counter_t _comms_errors; diff --git a/src/drivers/barometer/ms5611/MS5611.hpp b/src/drivers/barometer/ms5611/MS5611.hpp index 6f297e86b4..ff360b795f 100644 --- a/src/drivers/barometer/ms5611/MS5611.hpp +++ b/src/drivers/barometer/ms5611/MS5611.hpp @@ -83,6 +83,7 @@ enum MS56XX_DEVICE_TYPES { * conversion finished */ #define MS5611_CONVERSION_INTERVAL 10000 /* microseconds */ +#define MS5611_OSR1024_CONVERSION_TIME 2280 /* max ADC conversion time at OSR 1024, microseconds */ #define MS5611_MEASUREMENT_RATIO 3 /* pressure measurements per temperature measurement */ class MS5611 : public I2CSPIDriver diff --git a/src/drivers/barometer/ms5611/ms5611.cpp b/src/drivers/barometer/ms5611/ms5611.cpp index 871316a0fd..d925a30af8 100644 --- a/src/drivers/barometer/ms5611/ms5611.cpp +++ b/src/drivers/barometer/ms5611/ms5611.cpp @@ -243,8 +243,13 @@ MS5611::collect() perf_begin(_sample_perf); - /* read the most recent measurement - read offset/size are hardcoded in the interface */ - const hrt_abstime timestamp_sample = hrt_absolute_time(); + /* Correct for measurement integration delay: the conversion was + * started CONVERSION_INTERVAL ago and took OSR1024_CONVERSION_TIME + * to integrate, so the effective sample midpoint is + * (CONVERSION_INTERVAL - OSR1024_CONVERSION_TIME/2) before now. */ + const hrt_abstime now = hrt_absolute_time(); + static constexpr hrt_abstime correction = MS5611_CONVERSION_INTERVAL - MS5611_OSR1024_CONVERSION_TIME / 2; + const hrt_abstime timestamp_sample = (now > correction) ? (now - correction) : now; int ret = _interface->read(0, (void *)&raw, 0); if (ret < 0) { diff --git a/src/drivers/barometer/ms5837/MS5837.cpp b/src/drivers/barometer/ms5837/MS5837.cpp index 4bd4d11c9a..365df5d822 100644 --- a/src/drivers/barometer/ms5837/MS5837.cpp +++ b/src/drivers/barometer/ms5837/MS5837.cpp @@ -269,8 +269,13 @@ int MS5837::_collect() perf_begin(_sample_perf); - /* read the most recent measurement - read offset/size are hardcoded in the interface */ - const hrt_abstime timestamp_sample = hrt_absolute_time(); + /* Correct for measurement integration delay: the conversion was + * started CONVERSION_INTERVAL ago and took OSR1024_CONVERSION_TIME + * to integrate, so the effective sample midpoint is + * (CONVERSION_INTERVAL - OSR1024_CONVERSION_TIME/2) before now. */ + const hrt_abstime now = hrt_absolute_time(); + static constexpr hrt_abstime correction = MS5837_CONVERSION_INTERVAL - MS5837_OSR1024_CONVERSION_TIME / 2; + const hrt_abstime timestamp_sample = (now > correction) ? (now - correction) : now; int ret = read(0, (void *)&raw, 0); if (ret < 0) { diff --git a/src/drivers/barometer/ms5837/ms5837_registers.h b/src/drivers/barometer/ms5837/ms5837_registers.h index 75ef7a6ddb..e664e5f1fe 100644 --- a/src/drivers/barometer/ms5837/ms5837_registers.h +++ b/src/drivers/barometer/ms5837/ms5837_registers.h @@ -83,6 +83,7 @@ * conversion finished */ #define MS5837_CONVERSION_INTERVAL 10000 /* microseconds */ +#define MS5837_OSR1024_CONVERSION_TIME 2280 /* max ADC conversion time at OSR 1024, microseconds */ #define MS5837_MEASUREMENT_RATIO 3 /* pressure measurements per temperature measurement */ namespace ms5837 diff --git a/src/drivers/batt_smbus/CMakeLists.txt b/src/drivers/batt_smbus/CMakeLists.txt index bf60e80af3..d08fdfb3e9 100644 --- a/src/drivers/batt_smbus/CMakeLists.txt +++ b/src/drivers/batt_smbus/CMakeLists.txt @@ -37,6 +37,8 @@ px4_add_module( SRCS batt_smbus.cpp + MODULE_CONFIG + parameters.yaml DEPENDS drivers__smbus ) diff --git a/src/drivers/batt_smbus/parameters.c b/src/drivers/batt_smbus/parameters.c deleted file mode 100644 index 0d256c7577..0000000000 --- a/src/drivers/batt_smbus/parameters.c +++ /dev/null @@ -1,64 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2018 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * SMBUS Smart battery driver BQ40Z50 and BQ40Z80 - * - * @reboot_required true - * - * @boolean - * @group Sensors - */ -PARAM_DEFINE_INT32(SENS_EN_BATT, 0); - -/** - * Capacity/current multiplier for high-current capable SMBUS battery - * - * @reboot_required true - * @decimal 1 - * @group Sensors - */ -PARAM_DEFINE_FLOAT(BAT1_C_MULT, 1.0f); - -/** - * Battery device model - * - * @reboot_required true - * @min 0 - * @max 2 - * @group Sensors - * @value 0 AutoDetect - * @value 1 BQ40Z50 based - * @value 2 BQ40Z80 based - */ -PARAM_DEFINE_INT32(BAT1_SMBUS_MODEL, 0); diff --git a/src/drivers/batt_smbus/parameters.yaml b/src/drivers/batt_smbus/parameters.yaml new file mode 100644 index 0000000000..f4d18be40a --- /dev/null +++ b/src/drivers/batt_smbus/parameters.yaml @@ -0,0 +1,29 @@ +module_name: batt_smbus +parameters: +- group: Sensors + definitions: + SENS_EN_BATT: + description: + short: SMBUS Smart battery driver BQ40Z50 and BQ40Z80 + type: boolean + default: 0 + reboot_required: true + BAT1_C_MULT: + description: + short: Capacity/current multiplier for high-current capable SMBUS battery + type: float + default: 1.0 + reboot_required: true + decimal: 1 + BAT1_SMBUS_MODEL: + description: + short: Battery device model + type: enum + values: + 0: AutoDetect + 1: BQ40Z50 based + 2: BQ40Z80 based + default: 0 + reboot_required: true + min: 0 + max: 2 diff --git a/src/drivers/camera_capture/CMakeLists.txt b/src/drivers/camera_capture/CMakeLists.txt index 37e9e88b86..a3e8f769d2 100644 --- a/src/drivers/camera_capture/CMakeLists.txt +++ b/src/drivers/camera_capture/CMakeLists.txt @@ -44,6 +44,8 @@ px4_add_module( -DPARAM_PREFIX="${PARAM_PREFIX}" SRCS camera_capture.cpp + MODULE_CONFIG + camera_capture_params.yaml DEPENDS arch_io_pins ) diff --git a/src/drivers/camera_capture/camera_capture_params.c b/src/drivers/camera_capture/camera_capture_params.c deleted file mode 100644 index 606cf91f23..0000000000 --- a/src/drivers/camera_capture/camera_capture_params.c +++ /dev/null @@ -1,87 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2017 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file camera_capture_params.c - * Camera capture parameters - * - * @author Mohammed Kabir - */ -/** - * Camera strobe delay - * - * This parameter sets the delay between image integration start and strobe firing - * - * @unit ms - * @min 0.0 - * @max 100.0 - * @decimal 1 - * @group Camera Capture - */ -PARAM_DEFINE_FLOAT(CAM_CAP_DELAY, 0.0f); - -/** - * Camera capture feedback - * - * Enables camera capture feedback - * - * @boolean - * @group Camera Control - * @reboot_required true - */ -PARAM_DEFINE_INT32(CAM_CAP_FBACK, 0); - -/** - * Camera capture timestamping mode - * - * Change time measurement - * - * @value 0 Get absolute timestamp - * @value 1 Get timestamp of mid exposure (active high) - * @value 2 Get timestamp of mid exposure (active low) - * - * @group Camera Control - * @reboot_required true - */ -PARAM_DEFINE_INT32(CAM_CAP_MODE, 0); - -/** - * Camera capture edge - * - * @value 0 Falling edge - * @value 1 Rising edge - * - * @group Camera Control - * @reboot_required true - */ -PARAM_DEFINE_INT32(CAM_CAP_EDGE, 0); diff --git a/src/drivers/camera_capture/camera_capture_params.yaml b/src/drivers/camera_capture/camera_capture_params.yaml new file mode 100644 index 0000000000..0ab50066f3 --- /dev/null +++ b/src/drivers/camera_capture/camera_capture_params.yaml @@ -0,0 +1,44 @@ +module_name: camera_capture +parameters: +- group: Camera Capture + definitions: + CAM_CAP_DELAY: + description: + short: Camera strobe delay + long: This parameter sets the delay between image integration start and strobe + firing + type: float + default: 0.0 + unit: ms + min: 0.0 + max: 100.0 + decimal: 1 +- group: Camera Control + definitions: + CAM_CAP_FBACK: + description: + short: Camera capture feedback + long: Enables camera capture feedback + type: boolean + default: 0 + reboot_required: true + CAM_CAP_MODE: + description: + short: Camera capture timestamping mode + long: Change time measurement + type: enum + values: + 0: Get absolute timestamp + 1: Get timestamp of mid exposure (active high) + 2: Get timestamp of mid exposure (active low) + default: 0 + reboot_required: true + CAM_CAP_EDGE: + description: + short: Camera capture edge + type: enum + values: + 0: Falling edge + 1: Rising edge + default: 0 + reboot_required: true diff --git a/src/drivers/camera_trigger/CMakeLists.txt b/src/drivers/camera_trigger/CMakeLists.txt index 77604edfc0..8d1d6ba228 100644 --- a/src/drivers/camera_trigger/CMakeLists.txt +++ b/src/drivers/camera_trigger/CMakeLists.txt @@ -48,6 +48,8 @@ px4_add_module( interfaces/src/pwm.cpp interfaces/src/seagull_map2.cpp interfaces/src/gpio.cpp + MODULE_CONFIG + camera_trigger_params.yaml DEPENDS px4_work_queue ) diff --git a/src/drivers/camera_trigger/camera_trigger.cpp b/src/drivers/camera_trigger/camera_trigger.cpp index 33d89f3c01..484fd2fe92 100644 --- a/src/drivers/camera_trigger/camera_trigger.cpp +++ b/src/drivers/camera_trigger/camera_trigger.cpp @@ -88,9 +88,9 @@ typedef enum : int32_t { TRIGGER_MODE_DISTANCE_ON_CMD } trigger_mode_t; -#define commandParamToInt(n) static_cast(n >= 0 ? n + 0.5f : n - 0.5f) +#define commandParamToInt(n) static_cast((n) >= 0 ? (n) + 0.5f : (n) - 0.5f) -class CameraTrigger : public px4::ScheduledWorkItem +class CameraTrigger final : public px4::ScheduledWorkItem { public: /** diff --git a/src/drivers/camera_trigger/camera_trigger_params.c b/src/drivers/camera_trigger/camera_trigger_params.c deleted file mode 100644 index 54e0fd3175..0000000000 --- a/src/drivers/camera_trigger/camera_trigger_params.c +++ /dev/null @@ -1,165 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2015-2021 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file camera_trigger_params.c - * Camera trigger parameters - * - * @author Mohammed Kabir - * @author Andreas Bircher - * @author Lorenz Meier - */ - -/** -* Camera trigger Interface -* -* Selects the trigger interface -* -* @value 1 GPIO -* @value 2 Seagull MAP2 (over PWM) -* @value 3 MAVLink (Camera Protocol v1) -* @value 4 Generic PWM (IR trigger, servo) -* -* @reboot_required true -* @group Camera trigger -*/ -PARAM_DEFINE_INT32(TRIG_INTERFACE, 4); - -/** - * Camera trigger interval - * - * This parameter sets the time between two consecutive trigger events - * - * @unit ms - * @min 4.0 - * @max 10000.0 - * @decimal 1 - * @reboot_required true - * @group Camera trigger - */ -PARAM_DEFINE_FLOAT(TRIG_INTERVAL, 40.0f); - -/** - * Minimum camera trigger interval - * - * This parameter sets the minimum time between two consecutive trigger events - * the specific camera setup is supporting. - * - * @unit ms - * @min 1.0 - * @max 10000.0 - * @decimal 1 - * @reboot_required true - * @group Camera trigger - */ -PARAM_DEFINE_FLOAT(TRIG_MIN_INTERVA, 1.0f); - -/** - * Camera trigger polarity - * - * This parameter sets the polarity of the trigger (0 = active low, 1 = active high ) - * - * @value 0 Active low - * @value 1 Active high - * @min 0 - * @max 1 - * @reboot_required true - * @group Camera trigger - */ -PARAM_DEFINE_INT32(TRIG_POLARITY, 0); - -/** - * Camera trigger activation time - * - * This parameter sets the time the trigger needs to pulled high or low. - * - * @unit ms - * @min 0.1 - * @max 3000 - * @decimal 1 - * @reboot_required true - * @group Camera trigger - */ -PARAM_DEFINE_FLOAT(TRIG_ACT_TIME, 40.0f); - -/** - * Camera trigger mode - * - * @value 0 Disable - * @value 1 Time based, on command - * @value 2 Time based, always on - * @value 3 Distance based, always on - * @value 4 Distance based, on command (Survey mode) - * @min 0 - * @max 4 - * @reboot_required true - * @group Camera trigger - */ -PARAM_DEFINE_INT32(TRIG_MODE, 0); - -/** - * Camera trigger distance - * - * Sets the distance at which to trigger the camera. - * - * @unit m - * @min 0 - * @increment 1 - * @decimal 1 - * @reboot_required true - * @group Camera trigger - */ -PARAM_DEFINE_FLOAT(TRIG_DISTANCE, 25.0f); - -/** - * PWM output to trigger shot. - * - * @min 1000 - * @max 2000 - * @unit us - * @group Camera trigger - * @reboot_required true - */ -PARAM_DEFINE_INT32(TRIG_PWM_SHOOT, 1900); - - -/** - * PWM neutral output on trigger pin. - * - * @min 1000 - * @max 2000 - * @unit us - * @group Camera trigger - * @reboot_required true - */ -PARAM_DEFINE_INT32(TRIG_PWM_NEUTRAL, 1500); diff --git a/src/drivers/camera_trigger/camera_trigger_params.yaml b/src/drivers/camera_trigger/camera_trigger_params.yaml new file mode 100644 index 0000000000..6d8330fcb1 --- /dev/null +++ b/src/drivers/camera_trigger/camera_trigger_params.yaml @@ -0,0 +1,107 @@ +module_name: camera_trigger +parameters: +- group: Camera trigger + definitions: + TRIG_INTERFACE: + description: + short: Camera trigger Interface + long: Selects the trigger interface + type: enum + values: + 1: GPIO + 2: Seagull MAP2 (over PWM) + 3: MAVLink (Camera Protocol v1) + 4: Generic PWM (IR trigger, servo) + default: 4 + reboot_required: true + TRIG_INTERVAL: + description: + short: Camera trigger interval + long: This parameter sets the time between two consecutive trigger events + type: float + default: 40.0 + unit: ms + min: 4.0 + max: 10000.0 + decimal: 1 + reboot_required: true + TRIG_MIN_INTERVA: + description: + short: Minimum camera trigger interval + long: |- + This parameter sets the minimum time between two consecutive trigger events + the specific camera setup is supporting. + type: float + default: 1.0 + unit: ms + min: 1.0 + max: 10000.0 + decimal: 1 + reboot_required: true + TRIG_POLARITY: + description: + short: Camera trigger polarity + long: This parameter sets the polarity of the trigger (0 = active low, 1 = + active high ) + type: enum + values: + 0: Active low + 1: Active high + default: 0 + min: 0 + max: 1 + reboot_required: true + TRIG_ACT_TIME: + description: + short: Camera trigger activation time + long: This parameter sets the time the trigger needs to pulled high or low. + type: float + default: 40.0 + unit: ms + min: 0.1 + max: 3000 + decimal: 1 + reboot_required: true + TRIG_MODE: + description: + short: Camera trigger mode + type: enum + values: + 0: Disable + 1: Time based, on command + 2: Time based, always on + 3: Distance based, always on + 4: Distance based, on command (Survey mode) + default: 0 + min: 0 + max: 4 + reboot_required: true + TRIG_DISTANCE: + description: + short: Camera trigger distance + long: Sets the distance at which to trigger the camera. + type: float + default: 25.0 + unit: m + min: 0 + increment: 1 + decimal: 1 + reboot_required: true + TRIG_PWM_SHOOT: + description: + short: PWM output to trigger shot + type: int32 + default: 1900 + min: 1000 + max: 2000 + unit: us + reboot_required: true + TRIG_PWM_NEUTRAL: + description: + short: PWM neutral output on trigger pin + type: int32 + default: 1500 + min: 1000 + max: 2000 + unit: us + reboot_required: true diff --git a/src/drivers/cdcacm_autostart/CMakeLists.txt b/src/drivers/cdcacm_autostart/CMakeLists.txt index 8e78ba1cd2..26933f177a 100644 --- a/src/drivers/cdcacm_autostart/CMakeLists.txt +++ b/src/drivers/cdcacm_autostart/CMakeLists.txt @@ -37,4 +37,6 @@ px4_add_module( # -DDEBUG_BUILD SRCS cdcacm_autostart.cpp + MODULE_CONFIG + cdcacm_autostart_params.yaml ) diff --git a/src/drivers/cdcacm_autostart/cdcacm_autostart_params.c b/src/drivers/cdcacm_autostart/cdcacm_autostart_params.c deleted file mode 100644 index 87eb5160f5..0000000000 --- a/src/drivers/cdcacm_autostart/cdcacm_autostart_params.c +++ /dev/null @@ -1,69 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2024 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Enable USB autostart - * - * @value 0 Disabled - * @value 1 Auto-detect - * @value 2 MAVLink - * - * @reboot_required true - * - * @group CDCACM - */ -PARAM_DEFINE_INT32(SYS_USB_AUTO, 2); - -/** - * Specify USB MAVLink mode - * - * @value 0 normal - * @value 1 custom - * @value 2 onboard - * @value 3 osd - * @value 4 magic - * @value 5 config - * @value 6 iridium - * @value 7 minimal - * @value 8 extvision - * @value 9 extvisionmin - * @value 10 gimbal - * @value 11 onboard_low_bandwidth - * @value 12 uavionix - * @value 13 Low Bandwidth - * - * @reboot_required true - * - * @group CDCACM - */ -PARAM_DEFINE_INT32(USB_MAV_MODE, 2); diff --git a/src/drivers/cdcacm_autostart/cdcacm_autostart_params.yaml b/src/drivers/cdcacm_autostart/cdcacm_autostart_params.yaml new file mode 100644 index 0000000000..bee66780b7 --- /dev/null +++ b/src/drivers/cdcacm_autostart/cdcacm_autostart_params.yaml @@ -0,0 +1,35 @@ +module_name: cdcacm_autostart +parameters: +- group: CDCACM + definitions: + SYS_USB_AUTO: + description: + short: Enable USB autostart + type: enum + values: + 0: Disabled + 1: Auto-detect + 2: MAVLink + default: 2 + reboot_required: true + USB_MAV_MODE: + description: + short: Specify USB MAVLink mode + type: enum + values: + 0: normal + 1: custom + 2: onboard + 3: osd + 4: magic + 5: config + 6: iridium + 7: minimal + 8: extvision + 9: extvisionmin + 10: gimbal + 11: onboard_low_bandwidth + 12: uavionix + 13: Low Bandwidth + default: 2 + reboot_required: true diff --git a/src/drivers/cyphal/Actuators/EscClient.hpp b/src/drivers/cyphal/Actuators/EscClient.hpp index b6f469c90e..eae5383314 100644 --- a/src/drivers/cyphal/Actuators/EscClient.hpp +++ b/src/drivers/cyphal/Actuators/EscClient.hpp @@ -169,7 +169,7 @@ public: { } - void update_outputs(uint16_t outputs[MAX_ACTUATORS], unsigned num_outputs) + void update_outputs(float outputs[MAX_ACTUATORS], unsigned num_outputs) { if (_port_id == 0 || _port_id == CANARD_PORT_ID_UNSET) { return; @@ -178,7 +178,7 @@ public: uint8_t max_num_outputs = MAX_ACTUATORS > num_outputs ? num_outputs : MAX_ACTUATORS; for (int8_t i = max_num_outputs - 1; i >= _max_number_of_nonzero_outputs; i--) { - if (outputs[i] != 0) { + if (fabsf(outputs[i]) > FLT_EPSILON) { _max_number_of_nonzero_outputs = i + 1; break; } @@ -187,7 +187,7 @@ public: uint16_t payload_buffer[reg_udral_service_actuator_common_sp_Vector31_0_1_value_ARRAY_CAPACITY_]; for (uint8_t i = 0; i < _max_number_of_nonzero_outputs; i++) { - payload_buffer[i] = nunavutFloat16Pack(outputs[i] / 8192.0); + payload_buffer[i] = nunavutFloat16Pack(outputs[i] / 8192.f); // Output is float16 so this would benefit rescaling to e.g. [-1,1] } const CanardTransferMetadata transfer_metadata = { @@ -243,7 +243,6 @@ public: const ZubaxCompactFeedback *feedback = ((const ZubaxCompactFeedback *)(receive.payload)); ref.timestamp = hrt_absolute_time(); - ref.esc_address = receive.metadata.remote_node_id; ref.esc_voltage = 0.2 * feedback->dc_voltage; ref.esc_current = 0.2 * feedback->dc_current; ref.esc_temperature = NAN; diff --git a/src/drivers/cyphal/CMakeLists.txt b/src/drivers/cyphal/CMakeLists.txt index dc3c82b7bd..1e6d8a9ece 100644 --- a/src/drivers/cyphal/CMakeLists.txt +++ b/src/drivers/cyphal/CMakeLists.txt @@ -109,7 +109,7 @@ px4_add_module( COMPILE_FLAGS #-DCANARD_ASSERT -DUINT32_C\(x\)=__UINT32_C\(x\) - -O0 + ${PX4_DEBUG_OPT_LEVEL} ${DRIVERS_CYPHAL_OPTIONS} INCLUDES ${LIBCANARD_DIR}/libcanard/ @@ -133,6 +133,7 @@ px4_add_module( ${LIBCANARD_DIR}/libcanard/canard.h MODULE_CONFIG module.yaml + parameters.yaml DEPENDS git_libcanard git_public_regulated_data_types diff --git a/src/drivers/cyphal/Cyphal.cpp b/src/drivers/cyphal/Cyphal.cpp index c102f2e5b7..f6b411ac65 100644 --- a/src/drivers/cyphal/Cyphal.cpp +++ b/src/drivers/cyphal/Cyphal.cpp @@ -435,8 +435,7 @@ void CyphalNode::sendPortList() _uavcan_node_port_List_last = now; } -bool UavcanMixingInterface::updateOutputs(uint16_t outputs[MAX_ACTUATORS], unsigned num_outputs, - unsigned num_control_groups_updated) +bool UavcanMixingInterface::updateOutputs(float outputs[MAX_ACTUATORS], unsigned num_outputs, unsigned num_control_groups_updated) { // Note: This gets called from MixingOutput from within its update() function // Hence, the mutex lock in UavcanMixingInterface::Run() is in effect diff --git a/src/drivers/cyphal/Cyphal.hpp b/src/drivers/cyphal/Cyphal.hpp index bc2383bd9b..893edfe2fb 100644 --- a/src/drivers/cyphal/Cyphal.hpp +++ b/src/drivers/cyphal/Cyphal.hpp @@ -87,8 +87,7 @@ public: _node_mutex(node_mutex), _pub_manager(pub_manager) {} - bool updateOutputs(uint16_t outputs[MAX_ACTUATORS], - unsigned num_outputs, unsigned num_control_groups_updated) override; + bool updateOutputs(float outputs[MAX_ACTUATORS], unsigned num_outputs, unsigned num_control_groups_updated) override; void printInfo() { _mixing_output.printStatus(); } diff --git a/src/drivers/cyphal/NodeManager.cpp b/src/drivers/cyphal/NodeManager.cpp index 89d8f1b2a1..75960393a6 100644 --- a/src/drivers/cyphal/NodeManager.cpp +++ b/src/drivers/cyphal/NodeManager.cpp @@ -166,7 +166,9 @@ void NodeManager::HandleListResponse(const CanardRxTransfer &receive) PX4_INFO("Set portID succesfull"); } else { - PX4_INFO("Register not found %.*s", msg.name.name.count, msg.name.name.elements); + PX4_INFO("Register not found %.*s", + static_cast(msg.name.name.count), + msg.name.name.elements); } } } diff --git a/src/drivers/cyphal/parameters.c b/src/drivers/cyphal/parameters.c deleted file mode 100644 index 6c70e1f2f2..0000000000 --- a/src/drivers/cyphal/parameters.c +++ /dev/null @@ -1,271 +0,0 @@ -/**************************************************************************** - * - * Copyright (C) 2020 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Cyphal - * - * 0 - Cyphal disabled. - * 1 - Enables Cyphal - * - * @boolean - * @reboot_required true - * @group Cyphal - */ -PARAM_DEFINE_INT32(CYPHAL_ENABLE, 1); - -/** - * Cyphal Node ID. - * - * Read the specs at https://opencyphal.org/ to learn more about Node ID. - * - * @min -1 - * @max 125 - * @reboot_required true - * @group Cyphal - */ -PARAM_DEFINE_INT32(CYPHAL_ID, 1); - -/** - * UAVCAN/CAN v1 bus bitrate. - * - * @unit bit/s - * @min 20000 - * @max 1000000 - * @reboot_required true - * @group Cyphal - */ -PARAM_DEFINE_INT32(CYPHAL_BAUD, 1000000); - -/* Subscription port ID, -1 will be treated as unset */ - -/** - * ESC 0 subscription port ID. - * - * @min -1 - * @max 6143 - * @group Cyphal - */ -PARAM_DEFINE_INT32(UCAN1_ESC0_SUB, -1); - -/** - * GPS 0 subscription port ID. - * - * @min -1 - * @max 6143 - * @group Cyphal - */ -PARAM_DEFINE_INT32(UCAN1_GPS0_SUB, -1); - -/** - * GPS 1 subscription port ID. - * - * @min -1 - * @max 6143 - * @group Cyphal - */ -PARAM_DEFINE_INT32(UCAN1_GPS1_SUB, -1); - -/** - * UDRAL battery energy source subscription port ID. - * - * @min -1 - * @max 6143 - * @group Cyphal - */ -PARAM_DEFINE_INT32(UCAN1_BMS_ES_SUB, -1); - -/** - * UDRAL battery status subscription port ID. - * - * @min -1 - * @max 6143 - * @group Cyphal - */ -PARAM_DEFINE_INT32(UCAN1_BMS_BS_SUB, -1); - -/** - * UDRAL battery parameters subscription port ID. - * - * @min -1 - * @max 6143 - * @group Cyphal - */ -PARAM_DEFINE_INT32(UCAN1_BMS_BP_SUB, -1); - -/** - * Cyphal legacy battery port ID. - * - * @min -1 - * @max 6143 - * @group Cyphal - */ -PARAM_DEFINE_INT32(UCAN1_LG_BMS_SUB, -1); - - -/** - * sensor_gps uORB over Cyphal subscription port ID. - * - * @min -1 - * @max 6143 - * @group Cyphal - */ -PARAM_DEFINE_INT32(UCAN1_UORB_GPS, -1); - - -/** - * sensor_gps uORB over Cyphal publication port ID. - * - * @min -1 - * @max 6143 - * @group Cyphal - */ -PARAM_DEFINE_INT32(UCAN1_UORB_GPS_P, -1); - -// Publication Port IDs - -/** - * Cyphal ESC publication port ID. - * - * @min -1 - * @max 6143 - * @group Cyphal - */ -PARAM_DEFINE_INT32(UCAN1_ESC_PUB, -1); - -/** - * Cyphal ESC readiness port ID. - * - * @min -1 - * @max 6143 - * @group Cyphal - */ -PARAM_DEFINE_INT32(UCAN1_READ_PUB, -1); - -/** - * Cyphal ESC 0 zubax feedback port ID. - * - * @min -1 - * @max 6143 - * @group Cyphal - */ -PARAM_DEFINE_INT32(UCAN1_FB0_SUB, -1); - -/** - * Cyphal ESC 1 zubax feedback port ID. - * - * @min -1 - * @max 6143 - * @group Cyphal - */ -PARAM_DEFINE_INT32(UCAN1_FB1_SUB, -1); - -/** - * Cyphal ESC 2 zubax feedback port ID. - * - * @min -1 - * @max 6143 - * @group Cyphal - */ -PARAM_DEFINE_INT32(UCAN1_FB2_SUB, -1); - -/** - * Cyphal ESC 3 zubax feedback port ID. - * - * @min -1 - * @max 6143 - * @group Cyphal - */ -PARAM_DEFINE_INT32(UCAN1_FB3_SUB, -1); - -/** - * Cyphal ESC 4 zubax feedback port ID. - * - * @min -1 - * @max 6143 - * @group Cyphal - */ -PARAM_DEFINE_INT32(UCAN1_FB4_SUB, -1); - -/** - * Cyphal ESC 5 zubax feedback port ID. - * - * @min -1 - * @max 6143 - * @group Cyphal - */ -PARAM_DEFINE_INT32(UCAN1_FB5_SUB, -1); - -/** - * Cyphal ESC 6 zubax feedback port ID. - * - * @min -1 - * @max 6143 - * @group Cyphal - */ -PARAM_DEFINE_INT32(UCAN1_FB6_SUB, -1); - -/** - * Cyphal ESC 7 zubax feedback port ID. - * - * @min -1 - * @max 6143 - * @group Cyphal - */ -PARAM_DEFINE_INT32(UCAN1_FB7_SUB, -1); - -/** - * Cyphal GPS publication port ID. - * - * @min -1 - * @max 6143 - * @group Cyphal - */ -PARAM_DEFINE_INT32(UCAN1_GPS_PUB, -1); - -/** - * Cyphal Servo publication port ID. - * - * @min -1 - * @max 6143 - * @group Cyphal - */ -PARAM_DEFINE_INT32(UCAN1_SERVO_PUB, -1); - -/** - * actuator_outputs uORB over Cyphal publication port ID. - * - * @min -1 - * @max 6143 - * @group Cyphal - */ -PARAM_DEFINE_INT32(UCAN1_ACTR_PUB, -1); diff --git a/src/drivers/cyphal/parameters.yaml b/src/drivers/cyphal/parameters.yaml new file mode 100644 index 0000000000..ae2a239267 --- /dev/null +++ b/src/drivers/cyphal/parameters.yaml @@ -0,0 +1,185 @@ +module_name: cyphal +parameters: +- group: Cyphal + definitions: + CYPHAL_ENABLE: + description: + short: Cyphal + long: |- + 0 - Cyphal disabled. + 1 - Enables Cyphal + type: boolean + default: 1 + reboot_required: true + CYPHAL_ID: + description: + short: Cyphal Node ID + long: Read the specs at https://opencyphal.org/ to learn more about Node ID. + type: int32 + default: 1 + min: -1 + max: 125 + reboot_required: true + CYPHAL_BAUD: + description: + short: UAVCAN/CAN v1 bus bitrate + type: int32 + default: 1000000 + unit: bit/s + min: 20000 + max: 1000000 + reboot_required: true + UCAN1_ESC0_SUB: + description: + short: ESC 0 subscription port ID + type: int32 + default: -1 + min: -1 + max: 6143 + UCAN1_GPS0_SUB: + description: + short: GPS 0 subscription port ID + type: int32 + default: -1 + min: -1 + max: 6143 + UCAN1_GPS1_SUB: + description: + short: GPS 1 subscription port ID + type: int32 + default: -1 + min: -1 + max: 6143 + UCAN1_BMS_ES_SUB: + description: + short: UDRAL battery energy source subscription port ID + type: int32 + default: -1 + min: -1 + max: 6143 + UCAN1_BMS_BS_SUB: + description: + short: UDRAL battery status subscription port ID + type: int32 + default: -1 + min: -1 + max: 6143 + UCAN1_BMS_BP_SUB: + description: + short: UDRAL battery parameters subscription port ID + type: int32 + default: -1 + min: -1 + max: 6143 + UCAN1_LG_BMS_SUB: + description: + short: Cyphal legacy battery port ID + type: int32 + default: -1 + min: -1 + max: 6143 + UCAN1_UORB_GPS: + description: + short: sensor_gps uORB over Cyphal subscription port ID + type: int32 + default: -1 + min: -1 + max: 6143 + UCAN1_UORB_GPS_P: + description: + short: sensor_gps uORB over Cyphal publication port ID + type: int32 + default: -1 + min: -1 + max: 6143 + UCAN1_ESC_PUB: + description: + short: Cyphal ESC publication port ID + type: int32 + default: -1 + min: -1 + max: 6143 + UCAN1_READ_PUB: + description: + short: Cyphal ESC readiness port ID + type: int32 + default: -1 + min: -1 + max: 6143 + UCAN1_FB0_SUB: + description: + short: Cyphal ESC 0 zubax feedback port ID + type: int32 + default: -1 + min: -1 + max: 6143 + UCAN1_FB1_SUB: + description: + short: Cyphal ESC 1 zubax feedback port ID + type: int32 + default: -1 + min: -1 + max: 6143 + UCAN1_FB2_SUB: + description: + short: Cyphal ESC 2 zubax feedback port ID + type: int32 + default: -1 + min: -1 + max: 6143 + UCAN1_FB3_SUB: + description: + short: Cyphal ESC 3 zubax feedback port ID + type: int32 + default: -1 + min: -1 + max: 6143 + UCAN1_FB4_SUB: + description: + short: Cyphal ESC 4 zubax feedback port ID + type: int32 + default: -1 + min: -1 + max: 6143 + UCAN1_FB5_SUB: + description: + short: Cyphal ESC 5 zubax feedback port ID + type: int32 + default: -1 + min: -1 + max: 6143 + UCAN1_FB6_SUB: + description: + short: Cyphal ESC 6 zubax feedback port ID + type: int32 + default: -1 + min: -1 + max: 6143 + UCAN1_FB7_SUB: + description: + short: Cyphal ESC 7 zubax feedback port ID + type: int32 + default: -1 + min: -1 + max: 6143 + UCAN1_GPS_PUB: + description: + short: Cyphal GPS publication port ID + type: int32 + default: -1 + min: -1 + max: 6143 + UCAN1_SERVO_PUB: + description: + short: Cyphal Servo publication port ID + type: int32 + default: -1 + min: -1 + max: 6143 + UCAN1_ACTR_PUB: + description: + short: actuator_outputs uORB over Cyphal publication port ID + type: int32 + default: -1 + min: -1 + max: 6143 diff --git a/src/drivers/cyphal/public_regulated_data_types b/src/drivers/cyphal/public_regulated_data_types index d0bd6516da..a229bb78e7 160000 --- a/src/drivers/cyphal/public_regulated_data_types +++ b/src/drivers/cyphal/public_regulated_data_types @@ -1 +1 @@ -Subproject commit d0bd6516dac8ff61287fe49a9f2c75e7d4dc1b8e +Subproject commit a229bb78e76c48a3082be163bc240b2c13ff2d89 diff --git a/src/drivers/differential_pressure/asp5033/CMakeLists.txt b/src/drivers/differential_pressure/asp5033/CMakeLists.txt index 3ca04b9d67..4002690fb8 100644 --- a/src/drivers/differential_pressure/asp5033/CMakeLists.txt +++ b/src/drivers/differential_pressure/asp5033/CMakeLists.txt @@ -38,6 +38,8 @@ px4_add_module( asp5033_main.cpp ASP5033.cpp ASP5033.hpp + MODULE_CONFIG + parameters.yaml DEPENDS px4_work_queue ) diff --git a/src/drivers/differential_pressure/asp5033/parameters.yaml b/src/drivers/differential_pressure/asp5033/parameters.yaml new file mode 100644 index 0000000000..ab9c25ed03 --- /dev/null +++ b/src/drivers/differential_pressure/asp5033/parameters.yaml @@ -0,0 +1,10 @@ +module_name: asp5033 +parameters: +- group: Sensors + definitions: + SENS_EN_ASP5033: + description: + short: ASP5033 differential pressure sensor (external I2C) + type: boolean + default: 0 + reboot_required: true diff --git a/src/drivers/differential_pressure/auav/AUAV_Differential.cpp b/src/drivers/differential_pressure/auav/AUAV_Differential.cpp index b2d2b1fa21..37ed504c7b 100644 --- a/src/drivers/differential_pressure/auav/AUAV_Differential.cpp +++ b/src/drivers/differential_pressure/auav/AUAV_Differential.cpp @@ -55,6 +55,10 @@ AUAV_Differential::AUAV_Differential(const I2CSPIDriverConfig &config) : _cal_range = 60; break; + case 4: /* AUAV L60D (+- 60 inH20) */ + _cal_range = 120; + break; + default: _cal_range = 10; /* Default fallback */ break; @@ -151,7 +155,7 @@ int AUAV_Differential::read_factory_data() int32_t sensor_type = ((char_high - '0') * 10) + (char_low - '0'); /* Check if the detected sensor type is valid */ - if (sensor_type != AUAV_LD_05 && sensor_type != AUAV_LD_10 && sensor_type != AUAV_LD_30) { + if (sensor_type != AUAV_LD_05 && sensor_type != AUAV_LD_10 && sensor_type != AUAV_LD_30 && sensor_type != AUAV_LD_60) { return PX4_ERROR; } diff --git a/src/drivers/differential_pressure/auav/AUAV_Differential.hpp b/src/drivers/differential_pressure/auav/AUAV_Differential.hpp index 1b3ce238ce..200501aab9 100644 --- a/src/drivers/differential_pressure/auav/AUAV_Differential.hpp +++ b/src/drivers/differential_pressure/auav/AUAV_Differential.hpp @@ -62,6 +62,7 @@ static constexpr float INH_TO_PA = 249.08f; static constexpr int32_t AUAV_LD_05 = 5; static constexpr int32_t AUAV_LD_10 = 10; static constexpr int32_t AUAV_LD_30 = 30; +static constexpr int32_t AUAV_LD_60 = 60; class AUAV_Differential : public AUAV { diff --git a/src/drivers/differential_pressure/auav/CMakeLists.txt b/src/drivers/differential_pressure/auav/CMakeLists.txt index 9eaab94754..0cbb5eca48 100644 --- a/src/drivers/differential_pressure/auav/CMakeLists.txt +++ b/src/drivers/differential_pressure/auav/CMakeLists.txt @@ -43,6 +43,8 @@ px4_add_module( AUAV_Absolute.hpp AUAV_Differential.cpp AUAV_Differential.hpp + MODULE_CONFIG + parameters.yaml DEPENDS px4_work_queue ) diff --git a/src/drivers/differential_pressure/auav/parameters.c b/src/drivers/differential_pressure/auav/parameters.c deleted file mode 100644 index 660bc4e943..0000000000 --- a/src/drivers/differential_pressure/auav/parameters.c +++ /dev/null @@ -1,44 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2021-2024 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Amphenol AUAV differential / absolute pressure sensor (external I2C) - * - * @reboot_required true - * @group Sensors - * @value 0 Sensor disabled, when explicitly started treated as AUAV L05D - * @value 1 AUAV L05D - * @value 2 AUAV L10D - * @value 3 AUAV L30D - */ -PARAM_DEFINE_INT32(SENS_EN_AUAVX, 0); diff --git a/src/drivers/differential_pressure/auav/parameters.yaml b/src/drivers/differential_pressure/auav/parameters.yaml new file mode 100644 index 0000000000..e1c6b4fbc7 --- /dev/null +++ b/src/drivers/differential_pressure/auav/parameters.yaml @@ -0,0 +1,16 @@ +module_name: auav +parameters: +- group: Sensors + definitions: + SENS_EN_AUAVX: + description: + short: Amphenol AUAV differential / absolute pressure sensor (external I2C) + type: enum + values: + 0: Sensor disabled, when explicitly started treated as AUAV L05D + 1: AUAV L05D + 2: AUAV L10D + 3: AUAV L30D + 4: AUAV L60D + default: 0 + reboot_required: true diff --git a/src/drivers/differential_pressure/ets/CMakeLists.txt b/src/drivers/differential_pressure/ets/CMakeLists.txt index 23dc3f26aa..c9c5203d42 100644 --- a/src/drivers/differential_pressure/ets/CMakeLists.txt +++ b/src/drivers/differential_pressure/ets/CMakeLists.txt @@ -38,6 +38,8 @@ px4_add_module( ets_airspeed_main.cpp ETSAirspeed.cpp ETSAirspeed.hpp + MODULE_CONFIG + parameters.yaml DEPENDS px4_work_queue ) diff --git a/src/drivers/differential_pressure/ets/parameters.c b/src/drivers/differential_pressure/ets/parameters.c deleted file mode 100644 index 5a0f7728ff..0000000000 --- a/src/drivers/differential_pressure/ets/parameters.c +++ /dev/null @@ -1,41 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2021 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Eagle Tree airspeed sensor (external I2C) - * - * @reboot_required true - * @group Sensors - * @boolean - */ -PARAM_DEFINE_INT32(SENS_EN_ETSASPD, 0); diff --git a/src/drivers/differential_pressure/ets/parameters.yaml b/src/drivers/differential_pressure/ets/parameters.yaml new file mode 100644 index 0000000000..509ef11f1a --- /dev/null +++ b/src/drivers/differential_pressure/ets/parameters.yaml @@ -0,0 +1,10 @@ +module_name: ets +parameters: +- group: Sensors + definitions: + SENS_EN_ETSASPD: + description: + short: Eagle Tree airspeed sensor (external I2C) + type: boolean + default: 0 + reboot_required: true diff --git a/src/drivers/differential_pressure/ms4515/CMakeLists.txt b/src/drivers/differential_pressure/ms4515/CMakeLists.txt index e3e1d1ad55..49939ba982 100644 --- a/src/drivers/differential_pressure/ms4515/CMakeLists.txt +++ b/src/drivers/differential_pressure/ms4515/CMakeLists.txt @@ -39,6 +39,8 @@ px4_add_module( ms4515_main.cpp MS4515.cpp MS4515.hpp + MODULE_CONFIG + parameters.yaml DEPENDS px4_work_queue ) diff --git a/src/drivers/differential_pressure/ms4515/parameters.c b/src/drivers/differential_pressure/ms4515/parameters.c deleted file mode 100644 index 25337376a3..0000000000 --- a/src/drivers/differential_pressure/ms4515/parameters.c +++ /dev/null @@ -1,41 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2021 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * TE MS4515 differential pressure sensor (external I2C) - * - * @reboot_required true - * @group Sensors - * @boolean - */ -PARAM_DEFINE_INT32(SENS_EN_MS4515, 0); diff --git a/src/drivers/differential_pressure/ms4515/parameters.yaml b/src/drivers/differential_pressure/ms4515/parameters.yaml new file mode 100644 index 0000000000..e90b81eb04 --- /dev/null +++ b/src/drivers/differential_pressure/ms4515/parameters.yaml @@ -0,0 +1,10 @@ +module_name: ms4515 +parameters: +- group: Sensors + definitions: + SENS_EN_MS4515: + description: + short: TE MS4515 differential pressure sensor (external I2C) + type: boolean + default: 0 + reboot_required: true diff --git a/src/drivers/differential_pressure/ms4525do/CMakeLists.txt b/src/drivers/differential_pressure/ms4525do/CMakeLists.txt index 49bf83e181..c6d0e11e5c 100644 --- a/src/drivers/differential_pressure/ms4525do/CMakeLists.txt +++ b/src/drivers/differential_pressure/ms4525do/CMakeLists.txt @@ -39,6 +39,8 @@ px4_add_module( ms4525do_main.cpp MS4525DO.cpp MS4525DO.hpp + MODULE_CONFIG + parameters.yaml DEPENDS px4_work_queue ) diff --git a/src/drivers/differential_pressure/ms4525do/MS4525DO.cpp b/src/drivers/differential_pressure/ms4525do/MS4525DO.cpp index fcce76edda..8fa255c67d 100644 --- a/src/drivers/differential_pressure/ms4525do/MS4525DO.cpp +++ b/src/drivers/differential_pressure/ms4525do/MS4525DO.cpp @@ -70,7 +70,7 @@ int MS4525DO::probe() if ((status_1 == (uint8_t)STATUS::Normal_Operation) && (status_2 == (uint8_t)STATUS::Stale_Data) - && (data_1[2] == data_1[2])) { + && (data_1[2] == data_2[2])) { _retries = 1; // enable retries during operation return PX4_OK; diff --git a/src/drivers/differential_pressure/ms4525do/parameters.c b/src/drivers/differential_pressure/ms4525do/parameters.c deleted file mode 100644 index 86f722ab19..0000000000 --- a/src/drivers/differential_pressure/ms4525do/parameters.c +++ /dev/null @@ -1,41 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2021-2022 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * TE MS4525DO differential pressure sensor (external I2C) - * - * @reboot_required true - * @group Sensors - * @boolean - */ -PARAM_DEFINE_INT32(SENS_EN_MS4525DO, 0); diff --git a/src/drivers/differential_pressure/ms4525do/parameters.yaml b/src/drivers/differential_pressure/ms4525do/parameters.yaml new file mode 100644 index 0000000000..1ab61ef34e --- /dev/null +++ b/src/drivers/differential_pressure/ms4525do/parameters.yaml @@ -0,0 +1,10 @@ +module_name: ms4525do +parameters: +- group: Sensors + definitions: + SENS_EN_MS4525DO: + description: + short: TE MS4525DO differential pressure sensor (external I2C) + type: boolean + default: 0 + reboot_required: true diff --git a/src/drivers/differential_pressure/ms5525dso/CMakeLists.txt b/src/drivers/differential_pressure/ms5525dso/CMakeLists.txt index 1cf253b7aa..0dd77b1d75 100644 --- a/src/drivers/differential_pressure/ms5525dso/CMakeLists.txt +++ b/src/drivers/differential_pressure/ms5525dso/CMakeLists.txt @@ -39,6 +39,8 @@ px4_add_module( ms5525dso_main.cpp MS5525DSO.cpp MS5525DSO.hpp + MODULE_CONFIG + parameters.yaml DEPENDS px4_work_queue ) diff --git a/src/drivers/differential_pressure/ms5525dso/parameters.yaml b/src/drivers/differential_pressure/ms5525dso/parameters.yaml new file mode 100644 index 0000000000..bc8c628315 --- /dev/null +++ b/src/drivers/differential_pressure/ms5525dso/parameters.yaml @@ -0,0 +1,10 @@ +module_name: ms5525dso +parameters: +- group: Sensors + definitions: + SENS_EN_MS5525DS: + description: + short: TE MS5525DSO differential pressure sensor (external I2C) + type: boolean + default: 0 + reboot_required: true diff --git a/src/drivers/differential_pressure/sdp3x/CMakeLists.txt b/src/drivers/differential_pressure/sdp3x/CMakeLists.txt index f0e626485d..facaf5c3ad 100644 --- a/src/drivers/differential_pressure/sdp3x/CMakeLists.txt +++ b/src/drivers/differential_pressure/sdp3x/CMakeLists.txt @@ -39,6 +39,8 @@ px4_add_module( sdp3x_main.cpp SDP3X.cpp SDP3X.hpp + MODULE_CONFIG + parameters.yaml DEPENDS px4_work_queue ) diff --git a/src/drivers/differential_pressure/sdp3x/parameters.c b/src/drivers/differential_pressure/sdp3x/parameters.c deleted file mode 100644 index 47f26836ce..0000000000 --- a/src/drivers/differential_pressure/sdp3x/parameters.c +++ /dev/null @@ -1,41 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2021 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Sensirion SDP3X differential pressure sensor (external I2C) - * - * @reboot_required true - * @group Sensors - * @boolean - */ -PARAM_DEFINE_INT32(SENS_EN_SDP3X, 0); diff --git a/src/drivers/differential_pressure/sdp3x/parameters.yaml b/src/drivers/differential_pressure/sdp3x/parameters.yaml new file mode 100644 index 0000000000..e9b78e96ec --- /dev/null +++ b/src/drivers/differential_pressure/sdp3x/parameters.yaml @@ -0,0 +1,10 @@ +module_name: sdp3x +parameters: +- group: Sensors + definitions: + SENS_EN_SDP3X: + description: + short: Sensirion SDP3X differential pressure sensor (external I2C) + type: boolean + default: 0 + reboot_required: true diff --git a/src/drivers/distance_sensor/broadcom/afbrs50/CMakeLists.txt b/src/drivers/distance_sensor/broadcom/afbrs50/CMakeLists.txt index f31737d552..362cae9dae 100644 --- a/src/drivers/distance_sensor/broadcom/afbrs50/CMakeLists.txt +++ b/src/drivers/distance_sensor/broadcom/afbrs50/CMakeLists.txt @@ -50,6 +50,8 @@ px4_add_module( API/Src/s2pi.cpp API/Src/timer.c argus_hal_test.c + MODULE_CONFIG + parameters.yaml DEPENDS px4_work_queue drivers_rangefinder diff --git a/src/drivers/distance_sensor/broadcom/afbrs50/parameters.c b/src/drivers/distance_sensor/broadcom/afbrs50/parameters.c deleted file mode 100644 index 26f3683e96..0000000000 --- a/src/drivers/distance_sensor/broadcom/afbrs50/parameters.c +++ /dev/null @@ -1,102 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2023 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * AFBR Rangefinder Mode - * - * This parameter defines the mode of the AFBR Rangefinder. - * - * @reboot_required true - * @min 0 - * @max 3 - * @group Sensors - * - * @value 0 Short Range Mode - * @value 1 Long Range Mode - * @value 2 High Speed Short Range Mode - * @value 3 High Speed Long Range Mode - */ -PARAM_DEFINE_INT32(SENS_AFBR_MODE, 0); - -/** - * AFBR Rangefinder Short Range Rate - * - * This parameter defines measurement rate of the AFBR Rangefinder in short range mode. - * - * @min 1 - * @max 100 - * @group Sensors - * - */ -PARAM_DEFINE_INT32(SENS_AFBR_S_RATE, 50); - -/** - * AFBR Rangefinder Long Range Rate - * - * This parameter defines measurement rate of the AFBR Rangefinder in long range mode. - * - * @min 1 - * @max 100 - * @group Sensors - * - */ -PARAM_DEFINE_INT32(SENS_AFBR_L_RATE, 25); - -/** - * AFBR Rangefinder Short/Long Range Threshold - * - * This parameter defines the threshold for switching between short and long range mode. - * The mode will switch from short to long range when the distance is greater than the threshold plus the hysteresis. - * The mode will switch from long to short range when the distance is less than the threshold minus the hysteresis. - * - * @unit m - * @min 1 - * @max 50 - * @group Sensors - * - */ -PARAM_DEFINE_INT32(SENS_AFBR_THRESH, 4); - - -/** - * AFBR Rangefinder Short/Long Range Threshold Hysteresis - * - * This parameter defines the hysteresis for switching between short and long range mode. - * - * @unit m - * @min 1 - * @max 10 - * @group Sensors - * - */ -PARAM_DEFINE_INT32(SENS_AFBR_HYSTER, 1); diff --git a/src/drivers/distance_sensor/broadcom/afbrs50/parameters.yaml b/src/drivers/distance_sensor/broadcom/afbrs50/parameters.yaml new file mode 100644 index 0000000000..42fc73479f --- /dev/null +++ b/src/drivers/distance_sensor/broadcom/afbrs50/parameters.yaml @@ -0,0 +1,58 @@ +module_name: afbrs50 +parameters: +- group: Sensors + definitions: + SENS_AFBR_MODE: + description: + short: AFBR Rangefinder Mode + long: This parameter defines the mode of the AFBR Rangefinder. + type: enum + values: + 0: Short Range Mode + 1: Long Range Mode + 2: High Speed Short Range Mode + 3: High Speed Long Range Mode + default: 0 + reboot_required: true + min: 0 + max: 3 + SENS_AFBR_S_RATE: + description: + short: AFBR Rangefinder Short Range Rate + long: This parameter defines measurement rate of the AFBR Rangefinder in short + range mode. + type: int32 + default: 50 + min: 1 + max: 100 + SENS_AFBR_L_RATE: + description: + short: AFBR Rangefinder Long Range Rate + long: This parameter defines measurement rate of the AFBR Rangefinder in long + range mode. + type: int32 + default: 25 + min: 1 + max: 100 + SENS_AFBR_THRESH: + description: + short: AFBR Rangefinder Short/Long Range Threshold + long: |- + This parameter defines the threshold for switching between short and long range mode. + The mode will switch from short to long range when the distance is greater than the threshold plus the hysteresis. + The mode will switch from long to short range when the distance is less than the threshold minus the hysteresis. + type: int32 + default: 4 + unit: m + min: 1 + max: 50 + SENS_AFBR_HYSTER: + description: + short: AFBR Rangefinder Short/Long Range Threshold Hysteresis + long: This parameter defines the hysteresis for switching between short and + long range mode. + type: int32 + default: 1 + unit: m + min: 1 + max: 10 diff --git a/src/drivers/distance_sensor/lightware_grf_serial/lightware_grf_serial.cpp b/src/drivers/distance_sensor/lightware_grf_serial/lightware_grf_serial.cpp index 403c61f562..82cabca08c 100755 --- a/src/drivers/distance_sensor/lightware_grf_serial/lightware_grf_serial.cpp +++ b/src/drivers/distance_sensor/lightware_grf_serial/lightware_grf_serial.cpp @@ -256,8 +256,8 @@ void GRFLaserSerial::Run() /* clear ONLCR flag (which appends a CR for every LF) */ uart_config.c_oflag &= ~ONLCR; - /* no parity, one stop bit */ - uart_config.c_cflag &= ~(CSTOPB | PARENB); + /* no parity, one stop bit, no hardware flow control */ + uart_config.c_cflag &= ~(CSTOPB | PARENB | CRTSCTS); unsigned speed = B115200; diff --git a/src/drivers/distance_sensor/lightware_laser_i2c/CMakeLists.txt b/src/drivers/distance_sensor/lightware_laser_i2c/CMakeLists.txt index a19f16d5b9..953e74a093 100644 --- a/src/drivers/distance_sensor/lightware_laser_i2c/CMakeLists.txt +++ b/src/drivers/distance_sensor/lightware_laser_i2c/CMakeLists.txt @@ -35,6 +35,8 @@ px4_add_module( MAIN lightware_laser_i2c SRCS lightware_laser_i2c.cpp + MODULE_CONFIG + parameters.yaml DEPENDS drivers_rangefinder ) diff --git a/src/drivers/distance_sensor/lightware_laser_i2c/parameters.c b/src/drivers/distance_sensor/lightware_laser_i2c/parameters.c deleted file mode 100644 index d549144f9d..0000000000 --- a/src/drivers/distance_sensor/lightware_laser_i2c/parameters.c +++ /dev/null @@ -1,83 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2017 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Lightware laser rangefinder (i2c) - * - * @reboot_required true - * @min 0 - * @max 9 - * @group Sensors - * @value 0 Disabled - * @value 1 SF10/a - * @value 2 SF10/b - * @value 3 SF10/c - * @value 4 SF11/c - * @value 5 SF/LW20/b - * @value 6 SF/LW20/c - * @value 7 SF/LW30/d - * @value 8 GRF250 - * @value 9 GRF500 - */ -PARAM_DEFINE_INT32(SENS_EN_SF1XX, 0); - -/** - * Lightware laser rangefinder Operation Mode - * - * @value 0 Disabled - * @value 1 Enabled - * @value 2 Enabled in VTOL MC mode, listen to request from system in FW mode - * - * @min 0 - * @max 2 - */ -PARAM_DEFINE_INT32(SF1XX_MODE, 1); - -/** - * Lightware laser rangefinder Rotation - * - * Distance sensor orientation as MAV_SENSOR_ORIENTATION enum. - * Applies to all models supported by SENS_EN_SF1XX. - * - * @reboot_required true - * @min 0 - * @max 25 - * @group Sensors - * @value 0 Forward - * @value 2 Right - * @value 4 Backward - * @value 6 Left - * @value 24 Upward - * @value 25 Downward - */ -PARAM_DEFINE_INT32(SF1XX_ROT, 25); diff --git a/src/drivers/distance_sensor/lightware_laser_i2c/parameters.yaml b/src/drivers/distance_sensor/lightware_laser_i2c/parameters.yaml new file mode 100644 index 0000000000..f5f3c45a7f --- /dev/null +++ b/src/drivers/distance_sensor/lightware_laser_i2c/parameters.yaml @@ -0,0 +1,54 @@ +module_name: lightware_laser_i2c +parameters: +- group: Sensors + definitions: + SENS_EN_SF1XX: + description: + short: Lightware laser rangefinder (i2c) + type: enum + values: + 0: Disabled + 1: SF10/a + 2: SF10/b + 3: SF10/c + 4: SF11/c + 5: SF/LW20/b + 6: SF/LW20/c + 7: SF/LW30/d + 8: GRF250 + 9: GRF500 + default: 0 + reboot_required: true + min: 0 + max: 9 + SF1XX_ROT: + description: + short: Lightware laser rangefinder Rotation + long: |- + Distance sensor orientation as MAV_SENSOR_ORIENTATION enum. + Applies to all models supported by SENS_EN_SF1XX. + type: enum + values: + 0: Forward + 2: Right + 4: Backward + 6: Left + 24: Upward + 25: Downward + default: 25 + reboot_required: true + min: 0 + max: 25 +- group: Miscellaneous + definitions: + SF1XX_MODE: + description: + short: Lightware laser rangefinder Operation Mode + type: enum + values: + 0: Disabled + 1: Enabled + 2: Enabled in VTOL MC mode, listen to request from system in FW mode + default: 1 + min: 0 + max: 2 diff --git a/src/drivers/distance_sensor/lightware_laser_serial/CMakeLists.txt b/src/drivers/distance_sensor/lightware_laser_serial/CMakeLists.txt index 6851eadc74..a8012e6584 100644 --- a/src/drivers/distance_sensor/lightware_laser_serial/CMakeLists.txt +++ b/src/drivers/distance_sensor/lightware_laser_serial/CMakeLists.txt @@ -45,6 +45,7 @@ px4_add_module( px4_work_queue MODULE_CONFIG module.yaml + parameters.yaml ) if(PX4_TESTING) diff --git a/src/drivers/distance_sensor/lightware_laser_serial/parameters.c b/src/drivers/distance_sensor/lightware_laser_serial/parameters.c deleted file mode 100644 index f8b2c01a8e..0000000000 --- a/src/drivers/distance_sensor/lightware_laser_serial/parameters.c +++ /dev/null @@ -1,48 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2017 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Lightware Laser Rangefinder hardware model (serial) - * - * @reboot_required true - * @group Sensors - * @value 1 SF02 - * @value 2 SF10/a - * @value 3 SF10/b - * @value 4 SF10/c - * @value 5 SF11/c - * @value 6 SF30/b - * @value 7 SF30/c - * @value 8 LW20/c - */ -PARAM_DEFINE_INT32(SENS_EN_SF0X, 1); diff --git a/src/drivers/distance_sensor/lightware_laser_serial/parameters.yaml b/src/drivers/distance_sensor/lightware_laser_serial/parameters.yaml new file mode 100644 index 0000000000..90c4bb818c --- /dev/null +++ b/src/drivers/distance_sensor/lightware_laser_serial/parameters.yaml @@ -0,0 +1,19 @@ +module_name: lightware_laser_serial +parameters: +- group: Sensors + definitions: + SENS_EN_SF0X: + description: + short: Lightware Laser Rangefinder hardware model (serial) + type: enum + values: + 1: SF02 + 2: SF10/a + 3: SF10/b + 4: SF10/c + 5: SF11/c + 6: SF30/b + 7: SF30/c + 8: LW20/c + default: 1 + reboot_required: true diff --git a/src/drivers/distance_sensor/lightware_sf45_serial/lightware_sf45_serial.cpp b/src/drivers/distance_sensor/lightware_sf45_serial/lightware_sf45_serial.cpp index e15c43a44e..561d2bc555 100755 --- a/src/drivers/distance_sensor/lightware_sf45_serial/lightware_sf45_serial.cpp +++ b/src/drivers/distance_sensor/lightware_sf45_serial/lightware_sf45_serial.cpp @@ -253,7 +253,7 @@ void SF45LaserSerial::Run() uart_config.c_oflag &= ~ONLCR; /* no parity, one stop bit */ - uart_config.c_cflag &= ~(CSTOPB | PARENB); + uart_config.c_cflag &= ~(CSTOPB | PARENB | CRTSCTS); unsigned speed = B921600; diff --git a/src/drivers/distance_sensor/ll40ls/CMakeLists.txt b/src/drivers/distance_sensor/ll40ls/CMakeLists.txt index 659fdb8b20..d8a6e23d7a 100644 --- a/src/drivers/distance_sensor/ll40ls/CMakeLists.txt +++ b/src/drivers/distance_sensor/ll40ls/CMakeLists.txt @@ -38,6 +38,8 @@ px4_add_module( SRCS ll40ls.cpp LidarLiteI2C.cpp + MODULE_CONFIG + parameters.yaml DEPENDS drivers_rangefinder ) diff --git a/src/drivers/distance_sensor/ll40ls/parameters.yaml b/src/drivers/distance_sensor/ll40ls/parameters.yaml new file mode 100644 index 0000000000..811b890dc1 --- /dev/null +++ b/src/drivers/distance_sensor/ll40ls/parameters.yaml @@ -0,0 +1,16 @@ +module_name: ll40ls +parameters: +- group: Sensors + definitions: + SENS_EN_LL40LS: + description: + short: Lidar-Lite (LL40LS) + type: enum + values: + 0: Disabled + 1: PWM + 2: I2C + default: 0 + reboot_required: true + min: 0 + max: 2 diff --git a/src/drivers/distance_sensor/mappydot/CMakeLists.txt b/src/drivers/distance_sensor/mappydot/CMakeLists.txt index 58625fa8eb..3b94e58cca 100644 --- a/src/drivers/distance_sensor/mappydot/CMakeLists.txt +++ b/src/drivers/distance_sensor/mappydot/CMakeLists.txt @@ -35,6 +35,8 @@ px4_add_module( MAIN mappydot SRCS MappyDot.cpp + MODULE_CONFIG + parameters.yaml DEPENDS drivers_rangefinder ) diff --git a/src/drivers/distance_sensor/mappydot/parameters.c b/src/drivers/distance_sensor/mappydot/parameters.c deleted file mode 100644 index 7b29ba549d..0000000000 --- a/src/drivers/distance_sensor/mappydot/parameters.c +++ /dev/null @@ -1,297 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2017 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - - -/** - * Enable Mappydot rangefinder (i2c) - * - * @reboot_required true - * @min 0 - * @max 1 - * @group Sensors - * @value 0 Disabled - * @value 1 Autodetect - */ -PARAM_DEFINE_INT32(SENS_EN_MPDT, 0); - -/** - * MappyDot Sensor 0 Rotation - * - * This parameter defines the rotation of the Mappydot sensor relative to the platform. - * - * @reboot_required true - * @min 0 - * @max 7 - * @group Sensors - * - * @value 0 No rotation - * @value 1 Yaw 45° - * @value 2 Yaw 90° - * @value 3 Yaw 135° - * @value 4 Yaw 180° - * @value 5 Yaw 225° - * @value 6 Yaw 270° - * @value 7 Yaw 315° - */ -PARAM_DEFINE_INT32(SENS_MPDT0_ROT, 0); - -/** - * MappyDot Sensor 1 Rotation - * - * This parameter defines the rotation of the Mappydot sensor relative to the platform. - * - * @reboot_required true - * @min 0 - * @max 7 - * @group Sensors - * - * @value 0 No rotation - * @value 1 Yaw 45° - * @value 2 Yaw 90° - * @value 3 Yaw 135° - * @value 4 Yaw 180° - * @value 5 Yaw 225° - * @value 6 Yaw 270° - * @value 7 Yaw 315° - */ -PARAM_DEFINE_INT32(SENS_MPDT1_ROT, 0); - -/** - * MappyDot Sensor 2 Rotation - * - * This parameter defines the rotation of the Mappydot sensor relative to the platform. - * - * @reboot_required true - * @min 0 - * @max 7 - * @group Sensors - * - * @value 0 No rotation - * @value 1 Yaw 45° - * @value 2 Yaw 90° - * @value 3 Yaw 135° - * @value 4 Yaw 180° - * @value 5 Yaw 225° - * @value 6 Yaw 270° - * @value 7 Yaw 315° - */ -PARAM_DEFINE_INT32(SENS_MPDT2_ROT, 0); - -/** - * MappyDot Sensor 3 Rotation - * - * This parameter defines the rotation of the Mappydot sensor relative to the platform. - * - * @reboot_required true - * @min 0 - * @max 7 - * @group Sensors - * - * @value 0 No rotation - * @value 1 Yaw 45° - * @value 2 Yaw 90° - * @value 3 Yaw 135° - * @value 4 Yaw 180° - * @value 5 Yaw 225° - * @value 6 Yaw 270° - * @value 7 Yaw 315° - */ -PARAM_DEFINE_INT32(SENS_MPDT3_ROT, 0); - -/** - * MappyDot Sensor 4 Rotation - * - * This parameter defines the rotation of the Mappydot sensor relative to the platform. - * - * @reboot_required true - * @min 0 - * @max 7 - * @group Sensors - * - * @value 0 No rotation - * @value 1 Yaw 45° - * @value 2 Yaw 90° - * @value 3 Yaw 135° - * @value 4 Yaw 180° - * @value 5 Yaw 225° - * @value 6 Yaw 270° - * @value 7 Yaw 315° - */ -PARAM_DEFINE_INT32(SENS_MPDT4_ROT, 0); - -/** - * MappyDot Sensor 5 Rotation - * - * This parameter defines the rotation of the Mappydot sensor relative to the platform. - * - * @reboot_required true - * @min 0 - * @max 7 - * @group Sensors - * - * @value 0 No rotation - * @value 1 Yaw 45° - * @value 2 Yaw 90° - * @value 3 Yaw 135° - * @value 4 Yaw 180° - * @value 5 Yaw 225° - * @value 6 Yaw 270° - * @value 7 Yaw 315° - */ -PARAM_DEFINE_INT32(SENS_MPDT5_ROT, 0); - -/** - * MappyDot Sensor 6 Rotation - * - * This parameter defines the rotation of the Mappydot sensor relative to the platform. - * - * @reboot_required true - * @min 0 - * @max 7 - * @group Sensors - * - * @value 0 No rotation - * @value 1 Yaw 45° - * @value 2 Yaw 90° - * @value 3 Yaw 135° - * @value 4 Yaw 180° - * @value 5 Yaw 225° - * @value 6 Yaw 270° - * @value 7 Yaw 315° - */ -PARAM_DEFINE_INT32(SENS_MPDT6_ROT, 0); - -/** - * MappyDot Sensor 7 Rotation - * - * This parameter defines the rotation of the Mappydot sensor relative to the platform. - * - * @reboot_required true - * @min 0 - * @max 7 - * @group Sensors - * - * @value 0 No rotation - * @value 1 Yaw 45° - * @value 2 Yaw 90° - * @value 3 Yaw 135° - * @value 4 Yaw 180° - * @value 5 Yaw 225° - * @value 6 Yaw 270° - * @value 7 Yaw 315° - */ -PARAM_DEFINE_INT32(SENS_MPDT7_ROT, 0); - -/** - * MappyDot Sensor 8 Rotation - * - * This parameter defines the rotation of the Mappydot sensor relative to the platform. - * - * @reboot_required true - * @min 0 - * @max 7 - * @group Sensors - * - * @value 0 No rotation - * @value 1 Yaw 45° - * @value 2 Yaw 90° - * @value 3 Yaw 135° - * @value 4 Yaw 180° - * @value 5 Yaw 225° - * @value 6 Yaw 270° - * @value 7 Yaw 315° - */ -PARAM_DEFINE_INT32(SENS_MPDT8_ROT, 0); - -/** - * MappyDot Sensor 9 Rotation - * - * This parameter defines the rotation of the Mappydot sensor relative to the platform. - * - * @reboot_required true - * @min 0 - * @max 7 - * @group Sensors - * - * @value 0 No rotation - * @value 1 Yaw 45° - * @value 2 Yaw 90° - * @value 3 Yaw 135° - * @value 4 Yaw 180° - * @value 5 Yaw 225° - * @value 6 Yaw 270° - * @value 7 Yaw 315° - */ -PARAM_DEFINE_INT32(SENS_MPDT9_ROT, 0); - -/** - * MappyDot Sensor 10 Rotation - * - * This parameter defines the rotation of the Mappydot sensor relative to the platform. - * - * @reboot_required true - * @min 0 - * @max 7 - * @group Sensors - * - * @value 0 No rotation - * @value 1 Yaw 45° - * @value 2 Yaw 90° - * @value 3 Yaw 135° - * @value 4 Yaw 180° - * @value 5 Yaw 225° - * @value 6 Yaw 270° - * @value 7 Yaw 315° - */ -PARAM_DEFINE_INT32(SENS_MPDT10_ROT, 0); - -/** - * MappyDot Sensor 12 Rotation - * - * This parameter defines the rotation of the Mappydot sensor relative to the platform. - * - * @reboot_required true - * @min 0 - * @max 7 - * @group Sensors - * - * @value 0 No rotation - * @value 1 Yaw 45° - * @value 2 Yaw 90° - * @value 3 Yaw 135° - * @value 4 Yaw 180° - * @value 5 Yaw 225° - * @value 6 Yaw 270° - * @value 7 Yaw 315° - */ -PARAM_DEFINE_INT32(SENS_MPDT11_ROT, 0); diff --git a/src/drivers/distance_sensor/mappydot/parameters.yaml b/src/drivers/distance_sensor/mappydot/parameters.yaml new file mode 100644 index 0000000000..f479dd1626 --- /dev/null +++ b/src/drivers/distance_sensor/mappydot/parameters.yaml @@ -0,0 +1,243 @@ +module_name: mappydot +parameters: +- group: Sensors + definitions: + SENS_EN_MPDT: + description: + short: Enable Mappydot rangefinder (i2c) + type: enum + values: + 0: Disabled + 1: Autodetect + default: 0 + reboot_required: true + min: 0 + max: 1 + SENS_MPDT0_ROT: + description: + short: MappyDot Sensor 0 Rotation + long: This parameter defines the rotation of the Mappydot sensor relative + to the platform. + type: enum + values: + 0: No rotation + 1: "Yaw 45\xB0" + 2: "Yaw 90\xB0" + 3: "Yaw 135\xB0" + 4: "Yaw 180\xB0" + 5: "Yaw 225\xB0" + 6: "Yaw 270\xB0" + 7: "Yaw 315\xB0" + default: 0 + reboot_required: true + min: 0 + max: 7 + SENS_MPDT1_ROT: + description: + short: MappyDot Sensor 1 Rotation + long: This parameter defines the rotation of the Mappydot sensor relative + to the platform. + type: enum + values: + 0: No rotation + 1: "Yaw 45\xB0" + 2: "Yaw 90\xB0" + 3: "Yaw 135\xB0" + 4: "Yaw 180\xB0" + 5: "Yaw 225\xB0" + 6: "Yaw 270\xB0" + 7: "Yaw 315\xB0" + default: 0 + reboot_required: true + min: 0 + max: 7 + SENS_MPDT2_ROT: + description: + short: MappyDot Sensor 2 Rotation + long: This parameter defines the rotation of the Mappydot sensor relative + to the platform. + type: enum + values: + 0: No rotation + 1: "Yaw 45\xB0" + 2: "Yaw 90\xB0" + 3: "Yaw 135\xB0" + 4: "Yaw 180\xB0" + 5: "Yaw 225\xB0" + 6: "Yaw 270\xB0" + 7: "Yaw 315\xB0" + default: 0 + reboot_required: true + min: 0 + max: 7 + SENS_MPDT3_ROT: + description: + short: MappyDot Sensor 3 Rotation + long: This parameter defines the rotation of the Mappydot sensor relative + to the platform. + type: enum + values: + 0: No rotation + 1: "Yaw 45\xB0" + 2: "Yaw 90\xB0" + 3: "Yaw 135\xB0" + 4: "Yaw 180\xB0" + 5: "Yaw 225\xB0" + 6: "Yaw 270\xB0" + 7: "Yaw 315\xB0" + default: 0 + reboot_required: true + min: 0 + max: 7 + SENS_MPDT4_ROT: + description: + short: MappyDot Sensor 4 Rotation + long: This parameter defines the rotation of the Mappydot sensor relative + to the platform. + type: enum + values: + 0: No rotation + 1: "Yaw 45\xB0" + 2: "Yaw 90\xB0" + 3: "Yaw 135\xB0" + 4: "Yaw 180\xB0" + 5: "Yaw 225\xB0" + 6: "Yaw 270\xB0" + 7: "Yaw 315\xB0" + default: 0 + reboot_required: true + min: 0 + max: 7 + SENS_MPDT5_ROT: + description: + short: MappyDot Sensor 5 Rotation + long: This parameter defines the rotation of the Mappydot sensor relative + to the platform. + type: enum + values: + 0: No rotation + 1: "Yaw 45\xB0" + 2: "Yaw 90\xB0" + 3: "Yaw 135\xB0" + 4: "Yaw 180\xB0" + 5: "Yaw 225\xB0" + 6: "Yaw 270\xB0" + 7: "Yaw 315\xB0" + default: 0 + reboot_required: true + min: 0 + max: 7 + SENS_MPDT6_ROT: + description: + short: MappyDot Sensor 6 Rotation + long: This parameter defines the rotation of the Mappydot sensor relative + to the platform. + type: enum + values: + 0: No rotation + 1: "Yaw 45\xB0" + 2: "Yaw 90\xB0" + 3: "Yaw 135\xB0" + 4: "Yaw 180\xB0" + 5: "Yaw 225\xB0" + 6: "Yaw 270\xB0" + 7: "Yaw 315\xB0" + default: 0 + reboot_required: true + min: 0 + max: 7 + SENS_MPDT7_ROT: + description: + short: MappyDot Sensor 7 Rotation + long: This parameter defines the rotation of the Mappydot sensor relative + to the platform. + type: enum + values: + 0: No rotation + 1: "Yaw 45\xB0" + 2: "Yaw 90\xB0" + 3: "Yaw 135\xB0" + 4: "Yaw 180\xB0" + 5: "Yaw 225\xB0" + 6: "Yaw 270\xB0" + 7: "Yaw 315\xB0" + default: 0 + reboot_required: true + min: 0 + max: 7 + SENS_MPDT8_ROT: + description: + short: MappyDot Sensor 8 Rotation + long: This parameter defines the rotation of the Mappydot sensor relative + to the platform. + type: enum + values: + 0: No rotation + 1: "Yaw 45\xB0" + 2: "Yaw 90\xB0" + 3: "Yaw 135\xB0" + 4: "Yaw 180\xB0" + 5: "Yaw 225\xB0" + 6: "Yaw 270\xB0" + 7: "Yaw 315\xB0" + default: 0 + reboot_required: true + min: 0 + max: 7 + SENS_MPDT9_ROT: + description: + short: MappyDot Sensor 9 Rotation + long: This parameter defines the rotation of the Mappydot sensor relative + to the platform. + type: enum + values: + 0: No rotation + 1: "Yaw 45\xB0" + 2: "Yaw 90\xB0" + 3: "Yaw 135\xB0" + 4: "Yaw 180\xB0" + 5: "Yaw 225\xB0" + 6: "Yaw 270\xB0" + 7: "Yaw 315\xB0" + default: 0 + reboot_required: true + min: 0 + max: 7 + SENS_MPDT10_ROT: + description: + short: MappyDot Sensor 10 Rotation + long: This parameter defines the rotation of the Mappydot sensor relative + to the platform. + type: enum + values: + 0: No rotation + 1: "Yaw 45\xB0" + 2: "Yaw 90\xB0" + 3: "Yaw 135\xB0" + 4: "Yaw 180\xB0" + 5: "Yaw 225\xB0" + 6: "Yaw 270\xB0" + 7: "Yaw 315\xB0" + default: 0 + reboot_required: true + min: 0 + max: 7 + SENS_MPDT11_ROT: + description: + short: MappyDot Sensor 12 Rotation + long: This parameter defines the rotation of the Mappydot sensor relative + to the platform. + type: enum + values: + 0: No rotation + 1: "Yaw 45\xB0" + 2: "Yaw 90\xB0" + 3: "Yaw 135\xB0" + 4: "Yaw 180\xB0" + 5: "Yaw 225\xB0" + 6: "Yaw 270\xB0" + 7: "Yaw 315\xB0" + default: 0 + reboot_required: true + min: 0 + max: 7 diff --git a/src/drivers/distance_sensor/mb12xx/CMakeLists.txt b/src/drivers/distance_sensor/mb12xx/CMakeLists.txt index 6413710a33..8a2648aa6f 100644 --- a/src/drivers/distance_sensor/mb12xx/CMakeLists.txt +++ b/src/drivers/distance_sensor/mb12xx/CMakeLists.txt @@ -37,6 +37,8 @@ px4_add_module( -Wno-cast-align # TODO: fix and enable SRCS mb12xx.cpp + MODULE_CONFIG + parameters.yaml DEPENDS drivers_rangefinder ) diff --git a/src/drivers/distance_sensor/mb12xx/parameters.c b/src/drivers/distance_sensor/mb12xx/parameters.c deleted file mode 100644 index 9974a8548e..0000000000 --- a/src/drivers/distance_sensor/mb12xx/parameters.c +++ /dev/null @@ -1,294 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2017 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Maxbotix Sonar (mb12xx) - * - * @reboot_required true - * - * @boolean - * @group Sensors - */ -PARAM_DEFINE_INT32(SENS_EN_MB12XX, 0); - -/** - * MaxBotix MB12XX Sensor 0 Rotation - * - * This parameter defines the rotation of the sensor relative to the platform. - * - * @reboot_required true - * @min 0 - * @max 7 - * @group Sensors - * - * @value 0 No rotation - * @value 1 Yaw 45° - * @value 2 Yaw 90° - * @value 3 Yaw 135° - * @value 4 Yaw 180° - * @value 5 Yaw 225° - * @value 6 Yaw 270° - * @value 7 Yaw 315° - */ -PARAM_DEFINE_INT32(SENS_MB12_0_ROT, 0); - -/** - * MaxBotix MB12XX Sensor 1 Rotation - * - * This parameter defines the rotation of the sensor relative to the platform. - * - * @reboot_required true - * @min 0 - * @max 7 - * @group Sensors - * - * @value 0 No rotation - * @value 1 Yaw 45° - * @value 2 Yaw 90° - * @value 3 Yaw 135° - * @value 4 Yaw 180° - * @value 5 Yaw 225° - * @value 6 Yaw 270° - * @value 7 Yaw 315° - */ -PARAM_DEFINE_INT32(SENS_MB12_1_ROT, 0); - -/** - * MaxBotix MB12XX Sensor 2 Rotation - * - * This parameter defines the rotation of the sensor relative to the platform. - * - * @reboot_required true - * @min 0 - * @max 7 - * @group Sensors - * - * @value 0 No rotation - * @value 1 Yaw 45° - * @value 2 Yaw 90° - * @value 3 Yaw 135° - * @value 4 Yaw 180° - * @value 5 Yaw 225° - * @value 6 Yaw 270° - * @value 7 Yaw 315° - */ -PARAM_DEFINE_INT32(SENS_MB12_2_ROT, 0); - -/** - * MaxBotix MB12XX Sensor 3 Rotation - * - * This parameter defines the rotation of the sensor relative to the platform. - * - * @reboot_required true - * @min 0 - * @max 7 - * @group Sensors - * - * @value 0 No rotation - * @value 1 Yaw 45° - * @value 2 Yaw 90° - * @value 3 Yaw 135° - * @value 4 Yaw 180° - * @value 5 Yaw 225° - * @value 6 Yaw 270° - * @value 7 Yaw 315° - */ -PARAM_DEFINE_INT32(SENS_MB12_3_ROT, 0); - -/** - * MaxBotix MB12XX Sensor 4 Rotation - * - * This parameter defines the rotation of the sensor relative to the platform. - * - * @reboot_required true - * @min 0 - * @max 7 - * @group Sensors - * - * @value 0 No rotation - * @value 1 Yaw 45° - * @value 2 Yaw 90° - * @value 3 Yaw 135° - * @value 4 Yaw 180° - * @value 5 Yaw 225° - * @value 6 Yaw 270° - * @value 7 Yaw 315° - */ -PARAM_DEFINE_INT32(SENS_MB12_4_ROT, 0); - -/** - * MaxBotix MB12XX Sensor 5 Rotation - * - * This parameter defines the rotation of the sensor relative to the platform. - * - * @reboot_required true - * @min 0 - * @max 7 - * @group Sensors - * - * @value 0 No rotation - * @value 1 Yaw 45° - * @value 2 Yaw 90° - * @value 3 Yaw 135° - * @value 4 Yaw 180° - * @value 5 Yaw 225° - * @value 6 Yaw 270° - * @value 7 Yaw 315° - */ -PARAM_DEFINE_INT32(SENS_MB12_5_ROT, 0); - -/** - * MaxBotix MB12XX Sensor 6 Rotation - * - * This parameter defines the rotation of the sensor relative to the platform. - * - * @reboot_required true - * @min 0 - * @max 7 - * @group Sensors - * - * @value 0 No rotation - * @value 1 Yaw 45° - * @value 2 Yaw 90° - * @value 3 Yaw 135° - * @value 4 Yaw 180° - * @value 5 Yaw 225° - * @value 6 Yaw 270° - * @value 7 Yaw 315° - */ -PARAM_DEFINE_INT32(SENS_MB12_6_ROT, 0); - -/** - * MaxBotix MB12XX Sensor 7 Rotation - * - * This parameter defines the rotation of the sensor relative to the platform. - * - * @reboot_required true - * @min 0 - * @max 7 - * @group Sensors - * - * @value 0 No rotation - * @value 1 Yaw 45° - * @value 2 Yaw 90° - * @value 3 Yaw 135° - * @value 4 Yaw 180° - * @value 5 Yaw 225° - * @value 6 Yaw 270° - * @value 7 Yaw 315° - */ -PARAM_DEFINE_INT32(SENS_MB12_7_ROT, 0); - -/** - * MaxBotix MB12XX Sensor 8 Rotation - * - * This parameter defines the rotation of the sensor relative to the platform. - * - * @reboot_required true - * @min 0 - * @max 7 - * @group Sensors - * - * @value 0 No rotation - * @value 1 Yaw 45° - * @value 2 Yaw 90° - * @value 3 Yaw 135° - * @value 4 Yaw 180° - * @value 5 Yaw 225° - * @value 6 Yaw 270° - * @value 7 Yaw 315° - */ -PARAM_DEFINE_INT32(SENS_MB12_8_ROT, 0); - -/** - * MaxBotix MB12XX Sensor 9 Rotation - * - * This parameter defines the rotation of the sensor relative to the platform. - * - * @reboot_required true - * @min 0 - * @max 7 - * @group Sensors - * - * @value 0 No rotation - * @value 1 Yaw 45° - * @value 2 Yaw 90° - * @value 3 Yaw 135° - * @value 4 Yaw 180° - * @value 5 Yaw 225° - * @value 6 Yaw 270° - * @value 7 Yaw 315° - */ -PARAM_DEFINE_INT32(SENS_MB12_9_ROT, 0); - -/** - * MaxBotix MB12XX Sensor 10 Rotation - * - * This parameter defines the rotation of the sensor relative to the platform. - * - * @reboot_required true - * @min 0 - * @max 7 - * @group Sensors - * - * @value 0 No rotation - * @value 1 Yaw 45° - * @value 2 Yaw 90° - * @value 3 Yaw 135° - * @value 4 Yaw 180° - * @value 5 Yaw 225° - * @value 6 Yaw 270° - * @value 7 Yaw 315° - */ -PARAM_DEFINE_INT32(SENS_MB12_10_ROT, 0); - -/** - * MaxBotix MB12XX Sensor 12 Rotation - * - * This parameter defines the rotation of the sensor relative to the platform. - * - * @reboot_required true - * @min 0 - * @max 7 - * @group Sensors - * - * @value 0 No rotation - * @value 1 Yaw 45° - * @value 2 Yaw 90° - * @value 3 Yaw 135° - * @value 4 Yaw 180° - * @value 5 Yaw 225° - * @value 6 Yaw 270° - * @value 7 Yaw 315° - */ -PARAM_DEFINE_INT32(SENS_MB12_11_ROT, 0); diff --git a/src/drivers/distance_sensor/mb12xx/parameters.yaml b/src/drivers/distance_sensor/mb12xx/parameters.yaml new file mode 100644 index 0000000000..7279e5740f --- /dev/null +++ b/src/drivers/distance_sensor/mb12xx/parameters.yaml @@ -0,0 +1,226 @@ +module_name: mb12xx +parameters: +- group: Sensors + definitions: + SENS_EN_MB12XX: + description: + short: Maxbotix Sonar (mb12xx) + type: boolean + default: 0 + reboot_required: true + SENS_MB12_0_ROT: + description: + short: MaxBotix MB12XX Sensor 0 Rotation + long: This parameter defines the rotation of the sensor relative to the platform. + type: enum + values: + 0: No rotation + 1: "Yaw 45\xB0" + 2: "Yaw 90\xB0" + 3: "Yaw 135\xB0" + 4: "Yaw 180\xB0" + 5: "Yaw 225\xB0" + 6: "Yaw 270\xB0" + 7: "Yaw 315\xB0" + default: 0 + reboot_required: true + min: 0 + max: 7 + SENS_MB12_1_ROT: + description: + short: MaxBotix MB12XX Sensor 1 Rotation + long: This parameter defines the rotation of the sensor relative to the platform. + type: enum + values: + 0: No rotation + 1: "Yaw 45\xB0" + 2: "Yaw 90\xB0" + 3: "Yaw 135\xB0" + 4: "Yaw 180\xB0" + 5: "Yaw 225\xB0" + 6: "Yaw 270\xB0" + 7: "Yaw 315\xB0" + default: 0 + reboot_required: true + min: 0 + max: 7 + SENS_MB12_2_ROT: + description: + short: MaxBotix MB12XX Sensor 2 Rotation + long: This parameter defines the rotation of the sensor relative to the platform. + type: enum + values: + 0: No rotation + 1: "Yaw 45\xB0" + 2: "Yaw 90\xB0" + 3: "Yaw 135\xB0" + 4: "Yaw 180\xB0" + 5: "Yaw 225\xB0" + 6: "Yaw 270\xB0" + 7: "Yaw 315\xB0" + default: 0 + reboot_required: true + min: 0 + max: 7 + SENS_MB12_3_ROT: + description: + short: MaxBotix MB12XX Sensor 3 Rotation + long: This parameter defines the rotation of the sensor relative to the platform. + type: enum + values: + 0: No rotation + 1: "Yaw 45\xB0" + 2: "Yaw 90\xB0" + 3: "Yaw 135\xB0" + 4: "Yaw 180\xB0" + 5: "Yaw 225\xB0" + 6: "Yaw 270\xB0" + 7: "Yaw 315\xB0" + default: 0 + reboot_required: true + min: 0 + max: 7 + SENS_MB12_4_ROT: + description: + short: MaxBotix MB12XX Sensor 4 Rotation + long: This parameter defines the rotation of the sensor relative to the platform. + type: enum + values: + 0: No rotation + 1: "Yaw 45\xB0" + 2: "Yaw 90\xB0" + 3: "Yaw 135\xB0" + 4: "Yaw 180\xB0" + 5: "Yaw 225\xB0" + 6: "Yaw 270\xB0" + 7: "Yaw 315\xB0" + default: 0 + reboot_required: true + min: 0 + max: 7 + SENS_MB12_5_ROT: + description: + short: MaxBotix MB12XX Sensor 5 Rotation + long: This parameter defines the rotation of the sensor relative to the platform. + type: enum + values: + 0: No rotation + 1: "Yaw 45\xB0" + 2: "Yaw 90\xB0" + 3: "Yaw 135\xB0" + 4: "Yaw 180\xB0" + 5: "Yaw 225\xB0" + 6: "Yaw 270\xB0" + 7: "Yaw 315\xB0" + default: 0 + reboot_required: true + min: 0 + max: 7 + SENS_MB12_6_ROT: + description: + short: MaxBotix MB12XX Sensor 6 Rotation + long: This parameter defines the rotation of the sensor relative to the platform. + type: enum + values: + 0: No rotation + 1: "Yaw 45\xB0" + 2: "Yaw 90\xB0" + 3: "Yaw 135\xB0" + 4: "Yaw 180\xB0" + 5: "Yaw 225\xB0" + 6: "Yaw 270\xB0" + 7: "Yaw 315\xB0" + default: 0 + reboot_required: true + min: 0 + max: 7 + SENS_MB12_7_ROT: + description: + short: MaxBotix MB12XX Sensor 7 Rotation + long: This parameter defines the rotation of the sensor relative to the platform. + type: enum + values: + 0: No rotation + 1: "Yaw 45\xB0" + 2: "Yaw 90\xB0" + 3: "Yaw 135\xB0" + 4: "Yaw 180\xB0" + 5: "Yaw 225\xB0" + 6: "Yaw 270\xB0" + 7: "Yaw 315\xB0" + default: 0 + reboot_required: true + min: 0 + max: 7 + SENS_MB12_8_ROT: + description: + short: MaxBotix MB12XX Sensor 8 Rotation + long: This parameter defines the rotation of the sensor relative to the platform. + type: enum + values: + 0: No rotation + 1: "Yaw 45\xB0" + 2: "Yaw 90\xB0" + 3: "Yaw 135\xB0" + 4: "Yaw 180\xB0" + 5: "Yaw 225\xB0" + 6: "Yaw 270\xB0" + 7: "Yaw 315\xB0" + default: 0 + reboot_required: true + min: 0 + max: 7 + SENS_MB12_9_ROT: + description: + short: MaxBotix MB12XX Sensor 9 Rotation + long: This parameter defines the rotation of the sensor relative to the platform. + type: enum + values: + 0: No rotation + 1: "Yaw 45\xB0" + 2: "Yaw 90\xB0" + 3: "Yaw 135\xB0" + 4: "Yaw 180\xB0" + 5: "Yaw 225\xB0" + 6: "Yaw 270\xB0" + 7: "Yaw 315\xB0" + default: 0 + reboot_required: true + min: 0 + max: 7 + SENS_MB12_10_ROT: + description: + short: MaxBotix MB12XX Sensor 10 Rotation + long: This parameter defines the rotation of the sensor relative to the platform. + type: enum + values: + 0: No rotation + 1: "Yaw 45\xB0" + 2: "Yaw 90\xB0" + 3: "Yaw 135\xB0" + 4: "Yaw 180\xB0" + 5: "Yaw 225\xB0" + 6: "Yaw 270\xB0" + 7: "Yaw 315\xB0" + default: 0 + reboot_required: true + min: 0 + max: 7 + SENS_MB12_11_ROT: + description: + short: MaxBotix MB12XX Sensor 12 Rotation + long: This parameter defines the rotation of the sensor relative to the platform. + type: enum + values: + 0: No rotation + 1: "Yaw 45\xB0" + 2: "Yaw 90\xB0" + 3: "Yaw 135\xB0" + 4: "Yaw 180\xB0" + 5: "Yaw 225\xB0" + 6: "Yaw 270\xB0" + 7: "Yaw 315\xB0" + default: 0 + reboot_required: true + min: 0 + max: 7 diff --git a/src/drivers/distance_sensor/pga460/CMakeLists.txt b/src/drivers/distance_sensor/pga460/CMakeLists.txt index d95a0500a8..64d8b67ab5 100644 --- a/src/drivers/distance_sensor/pga460/CMakeLists.txt +++ b/src/drivers/distance_sensor/pga460/CMakeLists.txt @@ -37,6 +37,8 @@ px4_add_module( MAIN pga460 SRCS pga460.cpp + MODULE_CONFIG + parameters.yaml DEPENDS drivers_rangefinder ) diff --git a/src/drivers/distance_sensor/pga460/parameters.c b/src/drivers/distance_sensor/pga460/parameters.c deleted file mode 100644 index ce095963a8..0000000000 --- a/src/drivers/distance_sensor/pga460/parameters.c +++ /dev/null @@ -1,42 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2018 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * PGA460 Ultrasonic driver (PGA460) - * - * @reboot_required true - * - * @boolean - * @group Sensors - */ -PARAM_DEFINE_INT32(SENS_EN_PGA460, 0); diff --git a/src/drivers/distance_sensor/pga460/parameters.yaml b/src/drivers/distance_sensor/pga460/parameters.yaml new file mode 100644 index 0000000000..ac97cd3a4b --- /dev/null +++ b/src/drivers/distance_sensor/pga460/parameters.yaml @@ -0,0 +1,10 @@ +module_name: pga460 +parameters: +- group: Sensors + definitions: + SENS_EN_PGA460: + description: + short: PGA460 Ultrasonic driver (PGA460) + type: boolean + default: 0 + reboot_required: true diff --git a/src/drivers/distance_sensor/srf05/CMakeLists.txt b/src/drivers/distance_sensor/srf05/CMakeLists.txt index 5211d23fbd..1a3588d769 100644 --- a/src/drivers/distance_sensor/srf05/CMakeLists.txt +++ b/src/drivers/distance_sensor/srf05/CMakeLists.txt @@ -36,6 +36,8 @@ px4_add_module( COMPILE_FLAGS SRCS SRF05.cpp + MODULE_CONFIG + parameters.yaml DEPENDS drivers_rangefinder ) diff --git a/src/drivers/distance_sensor/srf05/parameters.c b/src/drivers/distance_sensor/srf05/parameters.c deleted file mode 100644 index ac0f108c51..0000000000 --- a/src/drivers/distance_sensor/srf05/parameters.c +++ /dev/null @@ -1,41 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2020 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * HY-SRF05 / HC-SR05 - * - * @reboot_required true - * @group Sensors - * @boolean - */ -PARAM_DEFINE_INT32(SENS_EN_SR05, 0); diff --git a/src/drivers/distance_sensor/srf05/parameters.yaml b/src/drivers/distance_sensor/srf05/parameters.yaml new file mode 100644 index 0000000000..195c9ace39 --- /dev/null +++ b/src/drivers/distance_sensor/srf05/parameters.yaml @@ -0,0 +1,10 @@ +module_name: srf05 +parameters: +- group: Sensors + definitions: + SENS_EN_SR05: + description: + short: HY-SRF05 / HC-SR05 + type: boolean + default: 0 + reboot_required: true diff --git a/src/drivers/distance_sensor/teraranger/CMakeLists.txt b/src/drivers/distance_sensor/teraranger/CMakeLists.txt index 5c0903d1fb..bbbf24cd43 100644 --- a/src/drivers/distance_sensor/teraranger/CMakeLists.txt +++ b/src/drivers/distance_sensor/teraranger/CMakeLists.txt @@ -37,6 +37,8 @@ px4_add_module( teraranger_main.cpp TERARANGER.cpp TERARANGER.hpp + MODULE_CONFIG + parameters.yaml DEPENDS drivers_rangefinder px4_work_queue diff --git a/src/drivers/distance_sensor/teraranger/parameters.c b/src/drivers/distance_sensor/teraranger/parameters.c deleted file mode 100644 index 56253fe7a9..0000000000 --- a/src/drivers/distance_sensor/teraranger/parameters.c +++ /dev/null @@ -1,48 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2017 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * TeraRanger Rangefinder (i2c) - * - * @reboot_required true - * @min 0 - * @max 3 - * @group Sensors - * @value 0 Disabled - * @value 1 Autodetect - * @value 2 TROne - * @value 3 TREvo60m - * @value 4 TREvo600Hz - * @value 5 TREvo3m - */ -PARAM_DEFINE_INT32(SENS_EN_TRANGER, 0); diff --git a/src/drivers/distance_sensor/teraranger/parameters.yaml b/src/drivers/distance_sensor/teraranger/parameters.yaml new file mode 100644 index 0000000000..c587ce71f9 --- /dev/null +++ b/src/drivers/distance_sensor/teraranger/parameters.yaml @@ -0,0 +1,19 @@ +module_name: teraranger +parameters: +- group: Sensors + definitions: + SENS_EN_TRANGER: + description: + short: TeraRanger Rangefinder (i2c) + type: enum + values: + 0: Disabled + 1: Autodetect + 2: TROne + 3: TREvo60m + 4: TREvo600Hz + 5: TREvo3m + default: 0 + reboot_required: true + min: 0 + max: 5 diff --git a/src/drivers/distance_sensor/tf02pro/CMakeLists.txt b/src/drivers/distance_sensor/tf02pro/CMakeLists.txt index c09f78f820..c3be65e5e6 100644 --- a/src/drivers/distance_sensor/tf02pro/CMakeLists.txt +++ b/src/drivers/distance_sensor/tf02pro/CMakeLists.txt @@ -37,6 +37,8 @@ px4_add_module( TF02PRO.cpp TF02PRO.hpp tf02pro_main.cpp + MODULE_CONFIG + parameters.yaml DEPENDS drivers_rangefinder px4_work_queue diff --git a/src/drivers/distance_sensor/tf02pro/parameters.c b/src/drivers/distance_sensor/tf02pro/parameters.c deleted file mode 100644 index e37acc064b..0000000000 --- a/src/drivers/distance_sensor/tf02pro/parameters.c +++ /dev/null @@ -1,42 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2023 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * TF02 Pro Distance Sensor (i2c) - * - * @reboot_required true - * - * @boolean - * @group Sensors - */ -PARAM_DEFINE_INT32(SENS_EN_TF02PRO, 0); diff --git a/src/drivers/distance_sensor/tf02pro/parameters.yaml b/src/drivers/distance_sensor/tf02pro/parameters.yaml new file mode 100644 index 0000000000..ce0b59af1f --- /dev/null +++ b/src/drivers/distance_sensor/tf02pro/parameters.yaml @@ -0,0 +1,10 @@ +module_name: tf02pro +parameters: +- group: Sensors + definitions: + SENS_EN_TF02PRO: + description: + short: TF02 Pro Distance Sensor (i2c) + type: boolean + default: 0 + reboot_required: true diff --git a/src/drivers/distance_sensor/vl53l0x/CMakeLists.txt b/src/drivers/distance_sensor/vl53l0x/CMakeLists.txt index c75562460f..501070aa75 100644 --- a/src/drivers/distance_sensor/vl53l0x/CMakeLists.txt +++ b/src/drivers/distance_sensor/vl53l0x/CMakeLists.txt @@ -37,6 +37,8 @@ px4_add_module( SRCS VL53L0X.cpp VL53L0X.hpp + MODULE_CONFIG + params.yaml DEPENDS drivers_rangefinder px4_work_queue diff --git a/src/drivers/distance_sensor/vl53l0x/params.c b/src/drivers/distance_sensor/vl53l0x/params.c deleted file mode 100644 index 14243b998b..0000000000 --- a/src/drivers/distance_sensor/vl53l0x/params.c +++ /dev/null @@ -1,42 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2023 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * VL53L0X Distance Sensor - * - * @reboot_required true - * - * @boolean - * @group Sensors - */ -PARAM_DEFINE_INT32(SENS_EN_VL53L0X, 0); diff --git a/src/drivers/distance_sensor/vl53l0x/params.yaml b/src/drivers/distance_sensor/vl53l0x/params.yaml new file mode 100644 index 0000000000..4cb8c24846 --- /dev/null +++ b/src/drivers/distance_sensor/vl53l0x/params.yaml @@ -0,0 +1,10 @@ +module_name: vl53l0x +parameters: +- group: Sensors + definitions: + SENS_EN_VL53L0X: + description: + short: VL53L0X Distance Sensor + type: boolean + default: 0 + reboot_required: true diff --git a/src/drivers/distance_sensor/vl53l1x/CMakeLists.txt b/src/drivers/distance_sensor/vl53l1x/CMakeLists.txt index e3564ed360..7a2947d3fa 100644 --- a/src/drivers/distance_sensor/vl53l1x/CMakeLists.txt +++ b/src/drivers/distance_sensor/vl53l1x/CMakeLists.txt @@ -37,6 +37,8 @@ px4_add_module( SRCS vl53l1x.cpp vl53l1x.hpp + MODULE_CONFIG + params.yaml DEPENDS drivers_rangefinder px4_work_queue diff --git a/src/drivers/distance_sensor/vl53l1x/params.c b/src/drivers/distance_sensor/vl53l1x/params.c deleted file mode 100644 index 8092b9465e..0000000000 --- a/src/drivers/distance_sensor/vl53l1x/params.c +++ /dev/null @@ -1,42 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2019 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * VL53L1X Distance Sensor - * - * @reboot_required true - * - * @boolean - * @group Sensors - */ -PARAM_DEFINE_INT32(SENS_EN_VL53L1X, 0); diff --git a/src/drivers/distance_sensor/vl53l1x/params.yaml b/src/drivers/distance_sensor/vl53l1x/params.yaml new file mode 100644 index 0000000000..4153210bca --- /dev/null +++ b/src/drivers/distance_sensor/vl53l1x/params.yaml @@ -0,0 +1,10 @@ +module_name: vl53l1x +parameters: +- group: Sensors + definitions: + SENS_EN_VL53L1X: + description: + short: VL53L1X Distance Sensor + type: boolean + default: 0 + reboot_required: true diff --git a/src/drivers/drv_dshot.h b/src/drivers/drv_dshot.h index 792d6076fc..797f70af93 100644 --- a/src/drivers/drv_dshot.h +++ b/src/drivers/drv_dshot.h @@ -1,6 +1,6 @@ /**************************************************************************** * - * Copyright (c) 2024 PX4 Development Team. All rights reserved. + * Copyright (c) 2025 PX4 Development Team. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -31,11 +31,6 @@ * ****************************************************************************/ -/** - * @file drv_dshot.h - * - */ - #pragma once #include @@ -48,39 +43,40 @@ __BEGIN_DECLS -typedef enum { - DShot_cmd_motor_stop = 0, - DShot_cmd_beacon1, - DShot_cmd_beacon2, - DShot_cmd_beacon3, - DShot_cmd_beacon4, - DShot_cmd_beacon5, - DShot_cmd_esc_info, // V2 includes settings - DShot_cmd_spin_direction_1, - DShot_cmd_spin_direction_2, - DShot_cmd_3d_mode_off, - DShot_cmd_3d_mode_on, - DShot_cmd_settings_request, // Currently not implemented - DShot_cmd_save_settings, - DShot_cmd_spin_direction_normal = 20, - DShot_cmd_spin_direction_reversed = 21, - DShot_cmd_led0_on, // BLHeli32 only - DShot_cmd_led1_on, // BLHeli32 only - DShot_cmd_led2_on, // BLHeli32 only - DShot_cmd_led3_on, // BLHeli32 only - DShot_cmd_led0_off, // BLHeli32 only - DShot_cmd_led1_off, // BLHeli32 only - DShot_cmd_led2_off, // BLHeli32 only - DShot_cmd_led4_off, // BLHeli32 only - DShot_cmd_audio_stream_mode_on_off = 30, // KISS audio Stream mode on/off - DShot_cmd_silent_mode_on_off = 31, // KISS silent Mode on/off - DShot_cmd_signal_line_telemetry_disable = 32, - DShot_cmd_signal_line_continuous_erpm_telemetry = 33, - DShot_cmd_MAX = 47, // >47 are throttle values - DShot_cmd_MIN_throttle = 48, - DShot_cmd_MAX_throttle = 2047 -} dshot_command_t; +// https://brushlesswhoop.com/dshot-and-bidirectional-dshot/#special-commands +enum { + DSHOT_CMD_MOTOR_STOP = 0, + DSHOT_CMD_BEEP1 = 1, + DSHOT_CMD_ESC_INFO = 6, + DSHOT_CMD_SPIN_DIRECTION_1 = 7, + DSHOT_CMD_SPIN_DIRECTION_2 = 8, + DSHOT_CMD_3D_MODE_OFF = 9, + DSHOT_CMD_3D_MODE_ON = 10, + DSHOT_CMD_SAVE_SETTINGS = 12, + DSHOT_EXTENDED_TELEMETRY_ENABLE = 13, + DSHOT_CMD_ENTER_PROGRAMMING_MODE = 36, + DSHOT_CMD_EXIT_PROGRAMMING_MODE = 37, + DSHOT_CMD_MAX = 47, // >47 are throttle values + DSHOT_CMD_MIN_THROTTLE = 48, + DSHOT_CMD_MAX_THROTTLE = 2047 +}; +// Extended DShot Telemetry +enum { + DSHOT_EDT_ERPM = 0x00, + DSHOT_EDT_TEMPERATURE = 0x02, // C + DSHOT_EDT_VOLTAGE = 0x04, // 0.25V per step + DSHOT_EDT_CURRENT = 0x06, // A + DSHOT_EDT_DEBUG1 = 0x08, + DSHOT_EDT_DEBUG2 = 0x0A, + DSHOT_EDT_DEBUG3 = 0x0C, + DSHOT_EDT_STATE_EVENT = 0x0E, +}; + +struct BDShotTelemetry { + int type; + int32_t value; +}; /** * Intialise the Dshot outputs using the specified configuration. @@ -91,12 +87,12 @@ typedef enum { * @param dshot_pwm_freq Frequency of DSHOT signal. Usually DSHOT150, DSHOT300, or DSHOT600 * @return <0 on error, the initialized channels mask. */ -__EXPORT extern int up_dshot_init(uint32_t channel_mask, unsigned dshot_pwm_freq, bool enable_bidirectional_dshot); +__EXPORT extern int up_dshot_init(uint32_t channel_mask, uint32_t bdshot_channel_mask, unsigned dshot_pwm_freq, bool edt_enable); /** * Set Dshot motor data, used by up_dshot_motor_data_set() and up_dshot_motor_command() (internal method) */ -__EXPORT extern void dshot_motor_data_set(unsigned channel, uint16_t throttle, bool telemetry); +__EXPORT extern void dshot_motor_data_set(uint8_t channel, uint16_t throttle, bool telemetry); /** * Set the current dshot throttle value for a channel (motor). @@ -105,9 +101,9 @@ __EXPORT extern void dshot_motor_data_set(unsigned channel, uint16_t throttle, b * @param throttle The output dshot throttle value in [0 = DSHOT_DISARM_VALUE, 1 = DSHOT_MIN_THROTTLE, 1999 = DSHOT_MAX_THROTTLE]. * @param telemetry If true, request telemetry from that motor */ -static inline void up_dshot_motor_data_set(unsigned channel, uint16_t throttle, bool telemetry) +static inline void up_dshot_motor_data_set(uint8_t channel, uint16_t throttle, bool telemetry) { - dshot_motor_data_set(channel, throttle + DShot_cmd_MIN_throttle, telemetry); + dshot_motor_data_set(channel, throttle + DSHOT_CMD_MIN_THROTTLE, telemetry); } /** @@ -142,17 +138,18 @@ __EXPORT extern int up_dshot_arm(bool armed); */ __EXPORT extern void up_bdshot_status(void); +/** + * Get bitmask of channels that have processed BDShot data ready to read. + * Each bit corresponds to an output channel index. + */ +__EXPORT extern uint16_t up_bdshot_get_ready_mask(void); /** - * Get how many bidirectional erpm channels are ready - * - * When we get the erpm round-robin style, we need to get - * and publish the erpms less often. - * - * @return <0 on error, OK on succes + * Get the total number of errors for a channel + * @param channel Dshot channel + * @return The total number of recorded errors */ -__EXPORT extern int up_bdshot_num_erpm_ready(void); - +__EXPORT extern int up_bdshot_num_errors(uint8_t channel); /** * Get bidrectional dshot erpm for a channel @@ -162,6 +159,14 @@ __EXPORT extern int up_bdshot_num_erpm_ready(void); */ __EXPORT extern int up_bdshot_get_erpm(uint8_t channel, int *erpm); +/** + * Get bidrectional dshot extended telemetry for a channel + * @param channel Dshot channel + * @param type The type of telemetry value to get + * @param value pointer to write the telemetry value + * @return <0 on error, OK on succes + */ +__EXPORT extern int up_bdshot_get_extended_telemetry(uint8_t channel, int type, uint8_t *value); /** * Get bidrectional dshot status for a channel @@ -169,7 +174,13 @@ __EXPORT extern int up_bdshot_get_erpm(uint8_t channel, int *erpm); * @param erpm pointer to write the erpm value * @return <0 on error / not supported, 0 on offline, 1 on online */ -__EXPORT extern int up_bdshot_channel_status(uint8_t channel); +__EXPORT extern int up_bdshot_channel_online(uint8_t channel); +/** + * Check if bidrectional dshot capture is supported for a channel + * @param channel Dshot channel + * @return 0 if not supported (no DMA), 1 if supported + */ +__EXPORT extern int up_bdshot_channel_capture_supported(uint8_t channel); __END_DECLS diff --git a/src/drivers/drv_sensor.h b/src/drivers/drv_sensor.h index bcd663dd05..f10ef8f2c6 100644 --- a/src/drivers/drv_sensor.h +++ b/src/drivers/drv_sensor.h @@ -68,6 +68,7 @@ #define DRV_MAG_DEVTYPE_QMC5883P 0x0F #define DRV_IMU_DEVTYPE_LSM303D 0x11 +#define DRV_IMU_DEVTYPE_ST_LSM6DSV 0x12 #define DRV_IMU_DEVTYPE_SIM 0x14 #define DRV_DIFF_PRESS_DEVTYPE_SIM 0x15 @@ -135,6 +136,7 @@ #define DRV_IMU_DEVTYPE_ADIS16507 0x5A #define DRV_IMU_DEVTYPE_SCH16T 0x5B +#define DRV_IMU_DEVTYPE_ADIS16607 0x5C #define DRV_BARO_DEVTYPE_MPC2520 0x5F #define DRV_BARO_DEVTYPE_LPS22HB 0x60 @@ -268,6 +270,7 @@ #define DRV_TEMP_DEVTYPE_MCP9808 0xEE #define DRV_TEMP_DEVTYPE_TMP102 0xF0 +#define DRV_ADC_DEVTYPE_ADS7128 0xF1 #define DRV_DEVTYPE_UNUSED 0xff diff --git a/src/drivers/dshot/CMakeLists.txt b/src/drivers/dshot/CMakeLists.txt index 82f7c3db51..58f2894f88 100644 --- a/src/drivers/dshot/CMakeLists.txt +++ b/src/drivers/dshot/CMakeLists.txt @@ -1,6 +1,6 @@ ############################################################################ # -# Copyright (c) 2019-2021 PX4 Development Team. All rights reserved. +# Copyright (c) 2019-2026 PX4 Development Team. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -42,9 +42,11 @@ px4_add_module( MAIN dshot COMPILE_FLAGS -DPARAM_PREFIX="${PARAM_PREFIX}" + # -DDEBUG_BUILD SRCS DShot.cpp DShotTelemetry.cpp + esc/AM32Settings.cpp DEPENDS arch_io_pins arch_dshot diff --git a/src/drivers/dshot/DShot.cpp b/src/drivers/dshot/DShot.cpp index 5150a81e5a..61853d86ab 100644 --- a/src/drivers/dshot/DShot.cpp +++ b/src/drivers/dshot/DShot.cpp @@ -1,6 +1,6 @@ /**************************************************************************** * - * Copyright (c) 2019-2022 PX4 Development Team. All rights reserved. + * Copyright (c) 2026 PX4 Development Team. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -32,14 +32,12 @@ ****************************************************************************/ #include "DShot.h" - #include - #include ModuleBase::Descriptor DShot::desc{task_spawn, custom_command, print_usage}; -char DShot::_telemetry_device[] {}; +char DShot::_serial_port_path[20] {}; bool DShot::_telemetry_swap_rxtx{false}; px4::atomic_bool DShot::_request_telemetry_init{false}; @@ -52,6 +50,9 @@ DShot::DShot() : // Avoid using the PWM failsafe params _mixing_output.setAllFailsafeValues(UINT16_MAX); + + // Advertise early to ensure we beat uavcan + _esc_status_pub.advertise(); } DShot::~DShot() @@ -60,371 +61,99 @@ DShot::~DShot() up_dshot_arm(false); perf_free(_cycle_perf); - perf_free(_bdshot_rpm_perf); - perf_free(_dshot_telem_perf); - - delete _telemetry; + perf_free(_bdshot_recv_perf); + perf_free(_bdshot_error_perf); + perf_free(_serial_telem_success_perf); + perf_free(_serial_telem_error_perf); + perf_free(_serial_telem_timeout_perf); + perf_free(_serial_telem_allsampled_perf); } int DShot::init() { - _output_mask = (1u << _num_outputs) - 1; - - // Getting initial parameter values update_params(); - ScheduleNow(); - - return OK; -} - -int DShot::task_spawn(int argc, char *argv[]) -{ - DShot *instance = new DShot(); - - if (instance) { - desc.object.store(instance); - desc.task_id = task_id_is_work_queue; - - if (instance->init() == PX4_OK) { - return PX4_OK; - } - - } else { - PX4_ERR("alloc failed"); + if (initialize_dshot()) { + ScheduleNow(); + return PX4_OK; } - delete instance; - desc.object.store(nullptr); - desc.task_id = -1; - return PX4_ERROR; } -void DShot::enable_dshot_outputs(const bool enabled) +void DShot::Run() { - if (enabled && !_outputs_initialized) { - unsigned int dshot_frequency = 0; - uint32_t dshot_frequency_param = 0; - - for (int timer = 0; timer < MAX_IO_TIMERS; ++timer) { - uint32_t channels = io_timer_get_group(timer); - - if (channels == 0) { - continue; - } - - char param_name[17]; - snprintf(param_name, sizeof(param_name), "%s_TIM%u", _mixing_output.paramPrefix(), timer); - - int32_t tim_config = 0; - param_t handle = param_find(param_name); - param_get(handle, &tim_config); - unsigned int dshot_frequency_request = 0; - - if (tim_config == -5) { - dshot_frequency_request = DSHOT150; - - } else if (tim_config == -4) { - dshot_frequency_request = DSHOT300; - - } else if (tim_config == -3) { - dshot_frequency_request = DSHOT600; - - } else { - _output_mask &= ~channels; // don't use for dshot - } - - if (dshot_frequency_request != 0) { - if (dshot_frequency != 0 && dshot_frequency != dshot_frequency_request) { - PX4_WARN("Only supporting a single frequency, adjusting param %s", param_name); - param_set_no_notification(handle, &dshot_frequency_param); - - } else { - dshot_frequency = dshot_frequency_request; - dshot_frequency_param = tim_config; - } - } - } - - _bidirectional_dshot_enabled = _param_bidirectional_enable.get(); - - int ret = up_dshot_init(_output_mask, dshot_frequency, _bidirectional_dshot_enabled); - - if (ret < 0) { - PX4_ERR("up_dshot_init failed (%i)", ret); - return; - } - - _output_mask = ret; - - // disable unused functions - for (unsigned i = 0; i < _num_outputs; ++i) { - if (((1 << i) & _output_mask) == 0) { - _mixing_output.disableFunction(i); - - } - } - - if (_output_mask == 0) { - // exit the module if no outputs used - request_stop(); - return; - } - - _outputs_initialized = true; + if (should_exit()) { + ScheduleClear(); + _mixing_output.unregister(); + exit_and_cleanup(desc); + return; } - if (_outputs_initialized) { - up_dshot_arm(enabled); - _outputs_on = enabled; + perf_begin(_cycle_perf); + + _mixing_output.update(); + + bool serial_updated = process_serial_telemetry(); + bool bdshot_updated = process_bdshot_telemetry(); + + if (serial_updated || bdshot_updated) { + _esc_status.timestamp = hrt_absolute_time(); + _esc_status.esc_count = _motor_count; + _esc_status.counter++; + _esc_status_pub.publish(_esc_status); } + + if (_parameter_update_sub.updated()) { + update_params(); + } + + // Telemetry init hook + if (_request_telemetry_init.load()) { + init_telemetry(_serial_port_path, _telemetry_swap_rxtx); + _request_telemetry_init.store(false); + } + + handle_vehicle_commands(); + + // check at end of cycle (updateSubscriptions() can potentially change to a different WorkQueue thread) + _mixing_output.updateSubscriptions(true); + + perf_end(_cycle_perf); } -void DShot::update_num_motors() +bool DShot::updateOutputs(float *outputs, unsigned num_outputs, unsigned num_control_groups_updated) { - int motor_count = 0; - - for (unsigned i = 0; i < _num_outputs; ++i) { - if (_mixing_output.isFunctionSet(i)) { - _actuator_functions[motor_count] = (uint8_t)_mixing_output.outputFunction(i); - ++motor_count; - } - } - - _num_motors = motor_count; -} - -void DShot::init_telemetry(const char *device, bool swap_rxtx) -{ - if (!_telemetry) { - _telemetry = new DShotTelemetry{}; - - if (!_telemetry) { - PX4_ERR("alloc failed"); - return; - } - } - - if (device != NULL) { - int ret = _telemetry->init(device, swap_rxtx); - - if (ret != 0) { - PX4_ERR("telemetry init failed (%i)", ret); - } - } - - update_num_motors(); -} - -int DShot::handle_new_telemetry_data(const int telemetry_index, const DShotTelemetry::EscData &data, bool ignore_rpm) -{ - int ret = 0; - // fill in new motor data - esc_status_s &esc_status = esc_status_pub.get(); - - if (telemetry_index < esc_status_s::CONNECTED_ESC_MAX) { - esc_status.esc_online_flags |= 1 << telemetry_index; - - esc_status.esc[telemetry_index].actuator_function = _actuator_functions[telemetry_index]; - - if (!ignore_rpm) { - // If we also have bidirectional dshot, we use rpm and timestamps from there. - esc_status.esc[telemetry_index].timestamp = data.time; - esc_status.esc[telemetry_index].esc_rpm = (static_cast(data.erpm) * 100) / - (_param_mot_pole_count.get() / 2); - } - - esc_status.esc[telemetry_index].esc_voltage = static_cast(data.voltage) * 0.01f; - esc_status.esc[telemetry_index].esc_current = static_cast(data.current) * 0.01f; - esc_status.esc[telemetry_index].esc_temperature = static_cast(data.temperature); - // TODO: accumulate consumption and use for battery estimation - } - - // publish when motor index wraps (which is robust against motor timeouts) - if (telemetry_index <= _last_telemetry_index) { - esc_status.timestamp = hrt_absolute_time(); - esc_status.esc_connectiontype = esc_status_s::ESC_CONNECTION_TYPE_DSHOT; - esc_status.esc_count = _num_motors; - ++esc_status.counter; - - ret = 1; // Indicate we wrapped, so we publish data - } - - _last_telemetry_index = telemetry_index; - - perf_count(_dshot_telem_perf); - - return ret; -} - -void DShot::publish_esc_status(void) -{ - esc_status_s &esc_status = esc_status_pub.get(); - int telemetry_index = 0; - - // clear data of the esc that are offline - for (int index = 0; (index < _last_telemetry_index); index++) { - if ((esc_status.esc_online_flags & (1 << index)) == 0) { - memset(&esc_status.esc[index], 0, sizeof(struct esc_report_s)); - } - } - - // FIXME: mark all UART Telemetry ESC's as online, otherwise commander complains even for a single dropout - esc_status.esc_count = _num_motors; - esc_status.esc_online_flags = (1 << esc_status.esc_count) - 1; - esc_status.esc_armed_flags = (1 << esc_status.esc_count) - 1; - - if (_bidirectional_dshot_enabled) { - for (unsigned i = 0; i < _num_outputs; i++) { - if (_mixing_output.isFunctionSet(i)) { - if (up_bdshot_channel_status(i)) { - esc_status.esc_online_flags |= 1 << i; - - } else { - esc_status.esc_online_flags &= ~(1 << i); - } - - ++telemetry_index; - } - } - } - - if (!esc_status_pub.advertised()) { - esc_status_pub.advertise(); - - } else { - esc_status_pub.update(); - } - - // reset esc online flags - esc_status.esc_online_flags = 0; -} - -int DShot::handle_new_bdshot_erpm(void) -{ - int num_erpms = 0; - int telemetry_index = 0; - int erpm; - esc_status_s &esc_status = esc_status_pub.get(); - - esc_status.timestamp = hrt_absolute_time(); - esc_status.counter = _esc_status_counter++; - esc_status.esc_connectiontype = esc_status_s::ESC_CONNECTION_TYPE_DSHOT; - esc_status.esc_armed_flags = _outputs_on; - - // We wait until all are ready. - if (up_bdshot_num_erpm_ready() < _num_motors) { - return 0; - } - - for (unsigned i = 0; i < _num_outputs; i++) { - if (_mixing_output.isFunctionSet(i)) { - if (up_bdshot_get_erpm(i, &erpm) == 0) { - num_erpms++; - esc_status.esc_online_flags |= 1 << telemetry_index; - esc_status.esc[telemetry_index].timestamp = hrt_absolute_time(); - esc_status.esc[telemetry_index].esc_rpm = (erpm * 100) / (_param_mot_pole_count.get() / 2); - esc_status.esc[telemetry_index].actuator_function = _actuator_functions[telemetry_index]; - } - - ++telemetry_index; - } - } - - perf_count(_bdshot_rpm_perf); - - return num_erpms; -} - -int DShot::send_command_thread_safe(const dshot_command_t command, const int num_repetitions, const int motor_index) -{ - Command cmd{}; - cmd.command = command; - - if (motor_index == -1) { - cmd.motor_mask = 0xff; - - } else { - cmd.motor_mask = 1 << motor_index; - } - - cmd.num_repetitions = num_repetitions; - _new_command.store(&cmd); - - hrt_abstime timestamp_for_timeout = hrt_absolute_time(); - - // wait until main thread processed it - while (_new_command.load()) { - - if (hrt_elapsed_time(×tamp_for_timeout) < 2_s) { - px4_usleep(1000); - - } else { - _new_command.store(nullptr); - PX4_WARN("DShot command timeout!"); - } - } - - return 0; -} - -void DShot::mixerChanged() -{ - update_num_motors(); -} - -bool DShot::updateOutputs(uint16_t outputs[MAX_ACTUATORS], - unsigned num_outputs, unsigned num_control_groups_updated) -{ - if (!_outputs_on) { + if (!_hardware_initialized || !_motor_count) { return false; } - int requested_telemetry_index = -1; + uint16_t hw_outputs[MAX_ACTUATORS] = {}; - if (_telemetry) { - requested_telemetry_index = _telemetry->getRequestMotorIndex(); + for (unsigned i = 0; i < num_outputs; i++) { + hw_outputs[i] = static_cast(lroundf(outputs[i])); } - int telemetry_index = 0; + _esc_status.esc_armed_flags = esc_armed_mask(hw_outputs, num_outputs); + bool armed = _esc_status.esc_armed_flags != 0; - for (int i = 0; i < (int)num_outputs; i++) { + if (!armed) { + // Select next command to send (if any) + if (_telemetry.telemetryResponseFinished() && + _current_command.finished() && _telemetry.commandResponseFinished()) { + select_next_command(); + } - uint16_t output = outputs[i]; - - if (output == DSHOT_DISARM_VALUE) { - - if (_current_command.valid() && (_current_command.motor_mask & (1 << i))) { - up_dshot_motor_command(i, _current_command.command, true); - - } else { - up_dshot_motor_command(i, DShot_cmd_motor_stop, telemetry_index == requested_telemetry_index); - } + // Send command if available + if (!_current_command.finished()) { + update_motor_commands(num_outputs); } else { - - if (_param_dshot_3d_enable.get() || (_reversible_outputs & (1u << i))) { - output = convert_output_to_3d_scaling(output); - } - - up_dshot_motor_data_set(i, math::min(output, static_cast(DSHOT_MAX_THROTTLE)), - telemetry_index == requested_telemetry_index); + update_motor_outputs(hw_outputs, num_outputs); } - telemetry_index += _mixing_output.isFunctionSet(i); - } - - // Decrement the command counter - if (_current_command.valid()) { - --_current_command.num_repetitions; - - // Queue a save command after the burst if save has been requested - if (_current_command.num_repetitions == 0 && _current_command.save) { - _current_command.save = false; - _current_command.num_repetitions = 10; - _current_command.command = dshot_command_t::DShot_cmd_save_settings; - } + } else { + update_motor_outputs(hw_outputs, num_outputs); } up_dshot_trigger(); @@ -432,13 +161,595 @@ bool DShot::updateOutputs(uint16_t outputs[MAX_ACTUATORS], return true; } +// TODO: this needs a refactor +void DShot::select_next_command() +{ + // Settings Programming + // NOTE: only update when we're not actively programming an ESC + if (!_dshot_programming_active) { + + if (_esc_eeprom_write_sub.updated()) { + auto last_generation = _esc_eeprom_write_sub.get_last_generation(); + _esc_eeprom_write_sub.copy(&_esc_eeprom_write); + auto current_generation = _esc_eeprom_write_sub.get_last_generation(); + + if (current_generation != last_generation + 1) { + PX4_ERR("esc_eeprom_write lost, generation %u -> %u", last_generation, current_generation); + } + + if (_esc_eeprom_write.index != 255 && _esc_eeprom_write.index >= DSHOT_MAX_MOTORS) { + PX4_ERR("esc_eeprom_write: invalid index %u", _esc_eeprom_write.index); + + } else { + PX4_DEBUG("ESC%u: starting programming mode", _esc_eeprom_write.index + 1); + _dshot_programming_active = true; + } + } + } + + // Command order or priority: + // - EDT Request + // - Settings Request + // - Settings Programming + + // EDT Request mask + uint16_t needs_edt_request_mask = _bdshot_telem_online_mask & ~_bdshot_edt_requested_mask; + + // Settings Request mask + uint16_t needs_settings_request_mask = _serial_telem_online_mask & ~_settings_requested_mask; + + bool serial_telem_delay_elapsed = hrt_absolute_time() > _serial_telem_delay_until; + + _current_command.clear(); + + // EDT Request: use motor-order masks since needs_edt_request_mask is in motor order + uint16_t edt_motors_to_request = _bdshot_motor_mask & needs_edt_request_mask; + + if (_bdshot_edt_enabled && edt_motors_to_request != 0) { + // Find first motor that needs EDT request and has been online long enough + hrt_abstime now = hrt_absolute_time(); + + for (int motor_index = 0; motor_index < DSHOT_MAX_MOTORS; motor_index++) { + if (edt_motors_to_request & (1 << motor_index)) { + // Wait 1 second after ESC comes online before sending EDT (ESC init sequence) + if (_bdshot_telem_online_timestamps[motor_index] == 0 + || (now - _bdshot_telem_online_timestamps[motor_index]) < 1_s) { + continue; + } + + _current_command.num_repetitions = 10; + _current_command.command = DSHOT_EXTENDED_TELEMETRY_ENABLE; + _current_command.motor_mask = (1 << motor_index); + _bdshot_edt_requested_mask |= (1 << motor_index); + PX4_DEBUG("ESC%d: requesting EDT at time %.2fs", motor_index + 1, (double)now / 1000000.); + break; + } + } + + } else if (_esc_type != 0 && _serial_telemetry_enabled && serial_telem_delay_elapsed && (_motor_mask & needs_settings_request_mask)) { + // Settings Request: use motor-order masks since needs_settings_request_mask is in motor order + uint16_t settings_motors_to_request = _motor_mask & needs_settings_request_mask; + + // Find first motor that needs settings request + for (int motor_index = 0; motor_index < DSHOT_MAX_MOTORS; motor_index++) { + if (settings_motors_to_request & (1 << motor_index)) { + auto now = hrt_absolute_time(); + _current_command.num_repetitions = 6; + _current_command.command = DSHOT_CMD_ESC_INFO; + _current_command.motor_mask = (1 << motor_index); + _current_command.expect_response = true; + _settings_requested_mask |= (1 << motor_index); + PX4_DEBUG("ESC%d: requesting Settings at time %.2fs", motor_index + 1, (double)now / 1000000.); + break; + } + } + + } else if (_dshot_programming_active) { + // Motor mask for programming: all motors or single motor + const uint16_t programming_motor_mask = _esc_eeprom_write.index == 255 + ? (uint16_t)((1u << DSHOT_MAX_MOTORS) - 1) + : (uint16_t)(1u << _esc_eeprom_write.index); + + // Settings programming state machine + if (_programming_state == ProgrammingState::Idle) { + // Get next setting address/value to program + int next_index = -1; + + // Find settings that need to be written but haven't been yet + int max_length = math::min((int)_esc_eeprom_write.length, (int)sizeof(_esc_eeprom_write.data)); + + for (int i = 0; i < max_length; i++) { + int array_index = i / 32; + int bit_index = i % 32; + + bool needs_write = _esc_eeprom_write.write_mask[array_index] & (1 << bit_index); + bool already_written = _settings_written_mask[array_index] & (1 << bit_index); + + if (needs_write && !already_written) { + next_index = i; + break; + } + } + + if (next_index >= 0) { + if (_esc_eeprom_write.index == 255) { + PX4_DEBUG("ESC ALL: Writing setting at index %d, value %u", next_index, _esc_eeprom_write.data[next_index]); + + } else { + PX4_DEBUG("ESC%d: Writing setting at index %d, value %u", _esc_eeprom_write.index + 1, next_index, + _esc_eeprom_write.data[next_index]); + } + + _programming_address = next_index; + _programming_value = _esc_eeprom_write.data[next_index]; + _programming_state = ProgrammingState::EnterMode; + + // Pre-emptively Mark this setting as written + int array_index = next_index / 32; + int bit_index = next_index % 32; + _settings_written_mask[array_index] |= (1 << bit_index); + + } else { + // All settings have been written + PX4_DEBUG("All settings written at time %.2fs", (double)hrt_absolute_time() / 1000000.); + + _dshot_programming_active = false; + _current_command.command = DSHOT_CMD_SAVE_SETTINGS; + _current_command.num_repetitions = 6; + _current_command.motor_mask = programming_motor_mask; + _programming_state = ProgrammingState::Idle; + + // Clear the written mask for this motor for next time + _settings_written_mask[0] = 0; + _settings_written_mask[1] = 0; + + // Mark as unread so that we read again + _settings_requested_mask &= ~(programming_motor_mask); + _serial_telem_delay_until = hrt_absolute_time() + 500_ms; + } + } + + switch (_programming_state) { + case ProgrammingState::EnterMode: + _current_command.command = DSHOT_CMD_ENTER_PROGRAMMING_MODE; + _current_command.num_repetitions = 6; + _current_command.motor_mask = programming_motor_mask; + _programming_state = ProgrammingState::SendAddress; + break; + + case ProgrammingState::SendAddress: + _current_command.command = _programming_address; + _current_command.num_repetitions = 1; + _current_command.motor_mask = programming_motor_mask; + _programming_state = ProgrammingState::SendValue; + break; + + case ProgrammingState::SendValue: + _current_command.command = _programming_value; + _current_command.num_repetitions = 1; + _current_command.motor_mask = programming_motor_mask; + _programming_state = ProgrammingState::ExitMode; + break; + + case ProgrammingState::ExitMode: + _current_command.command = DSHOT_CMD_EXIT_PROGRAMMING_MODE; + _current_command.num_repetitions = 1; + _current_command.motor_mask = programming_motor_mask; + _programming_state = ProgrammingState::Idle; + break; + + default: + break; + } + } +} + +void DShot::update_motor_outputs(uint16_t outputs[MAX_ACTUATORS], int num_outputs) +{ + for (int i = 0; i < num_outputs; i++) { + int motor_index = motor_index_from_output(i); + + if (motor_index < 0) { + up_dshot_motor_command(i, DSHOT_CMD_MOTOR_STOP, false); + continue; + } + + bool set_telemetry_bit = (_telemetry_motor_index == motor_index + && _serial_telemetry_enabled + && _telemetry.telemetryResponseFinished() + && _telemetry.commandResponseFinished() + && hrt_absolute_time() > _serial_telem_delay_until); + + if (set_telemetry_bit) { + _telemetry.startTelemetryRequest(); + } + + if (outputs[i] == DSHOT_DISARM_VALUE) { + up_dshot_motor_command(i, DSHOT_CMD_MOTOR_STOP, set_telemetry_bit); + + } else { + up_dshot_motor_data_set(i, calculate_output_value(outputs[i], i), set_telemetry_bit); + } + } +} + +void DShot::update_motor_commands(int num_outputs) +{ + bool command_sent = false; + + for (int i = 0; i < num_outputs; i++) { + uint16_t command = DSHOT_CMD_MOTOR_STOP; + int motor_index = motor_index_from_output(i); + + if (motor_index >= 0 && (_current_command.motor_mask & (1 << motor_index))) { + if (_current_command.expect_response) { + _telemetry.setExpectCommandResponse(motor_index, _current_command.command); + } + + command = _current_command.command; + command_sent = true; + } + + up_dshot_motor_command(i, command, false); + } + + if (command_sent) { + --_current_command.num_repetitions; + + // Queue a save command if it has been requested + if (_current_command.num_repetitions == 0 && _current_command.save) { + _current_command.save = false; + _current_command.num_repetitions = 10; + _current_command.command = DSHOT_CMD_SAVE_SETTINGS; + } + } +} + +uint16_t DShot::esc_armed_mask(uint16_t *outputs, uint8_t num_outputs) +{ + uint16_t mask = 0; + + for (uint8_t i = 0; i < num_outputs; i++) { + int motor_index = motor_index_from_output(i); + + if (motor_index >= 0 && outputs[i] != DSHOT_DISARM_VALUE) { + mask |= (1 << motor_index); + } + } + + return mask; +} + +uint16_t DShot::calculate_output_value(uint16_t raw, int index) +{ + uint16_t output = raw; + + // Reverse output if required + if (_3d_enabled || (_mixing_output.reversibleOutputs() & (1u << index))) { + output = convert_output_to_3d_scaling(raw); + } + + output = math::min(output, DSHOT_MAX_THROTTLE); + + return output; +} + +bool DShot::process_serial_telemetry() +{ + if (!_serial_telemetry_enabled) { + return false; + } + + // Periodically retry skipped motors when disarmed so channels that came online late + // (e.g. ESC power-cycled after boot) can recover. We don't retry while armed to avoid + // timeout blips on healthy channels during flight. + bool armed = _esc_status.esc_armed_flags != 0; + + if (!armed && _serial_telem_skip_mask != 0 + && hrt_elapsed_time(&_serial_telem_last_retry) > SERIAL_TELEM_RETRY_INTERVAL) { + _serial_telem_skip_mask = 0; + + for (int i = 0; i < DSHOT_MAX_MOTORS; i++) { + _serial_telem_consecutive_timeouts[i] = 0; + } + + _serial_telem_last_retry = hrt_absolute_time(); + } + + bool all_telem_sampled = false; + + if (!_telemetry.commandResponseFinished()) { + if (_telemetry.commandResponseStarted()) { + _telemetry.parseCommandResponse(); + } + + } else if (_telemetry_motor_index < 0) { + // Bootstrap: pick the first motor to poll + set_next_telemetry_index(); + + } else { + + int motor_index = _telemetry_motor_index; + + EscData esc {}; + esc.source = TelemetrySource::Serial; + esc.motor_index = motor_index; + + switch (_telemetry.parseTelemetryPacket(&esc)) { + case TelemetryStatus::NotStarted: + // no-op, should not hit this case + break; + + case TelemetryStatus::NotReady: + // no-op, will eventually timeout + break; + + case TelemetryStatus::Ready: + + // Reset consecutive timeout counter on any successful response + _serial_telem_consecutive_timeouts[motor_index] = 0; + _serial_telem_skip_mask &= ~(1 << motor_index); + + // Online mask is in motor order for consistency with BDShot + if (_serial_telem_online_mask & (1 << motor_index)) { + consume_esc_data(esc); + all_telem_sampled = set_next_telemetry_index(); + perf_count(_serial_telem_success_perf); + + } else { + hrt_abstime now = hrt_absolute_time(); + + // Timestamps are in actuator order to match _esc_status.esc[] + if (_serial_telem_online_timestamps[motor_index] == 0) { + _serial_telem_online_timestamps[motor_index] = now; + } + + // Mark as online only after 100_ms without errors + if (now - _serial_telem_online_timestamps[motor_index] > 100_ms) { + _serial_telem_online_mask |= (1 << motor_index); + } + } + + break; + + case TelemetryStatus::Timeout: + // Set ESC data to zeroes + // Error counts and timestamps are in actuator order to match _esc_status.esc[] + _serial_telem_errors[motor_index]++; + _serial_telem_online_mask &= ~(1 << motor_index); + _serial_telem_online_timestamps[motor_index] = 0; + + // Track consecutive timeouts for adaptive skip + if (_serial_telem_consecutive_timeouts[motor_index] < SERIAL_TELEM_SKIP_THRESHOLD) { + _serial_telem_consecutive_timeouts[motor_index]++; + + if (_serial_telem_consecutive_timeouts[motor_index] >= SERIAL_TELEM_SKIP_THRESHOLD) { + _serial_telem_skip_mask |= (1 << motor_index); + PX4_DEBUG("ESC%d serial telemetry lost, skipping", motor_index + 1); + } + } + + // Consume an empty EscData to zero the data + consume_esc_data(esc); + all_telem_sampled = set_next_telemetry_index(); + perf_count(_serial_telem_timeout_perf); + break; + + case TelemetryStatus::ParseError: + // Set ESC data to zeroes + PX4_WARN("Telem parse error, ESC %d", motor_index); + _serial_telem_errors[motor_index]++; + _serial_telem_online_mask &= ~(1 << motor_index); + _serial_telem_online_timestamps[motor_index] = 0; + // Consume an empty EscData to zero the data + consume_esc_data(esc); + all_telem_sampled = set_next_telemetry_index(); + _serial_telem_delay_until = hrt_absolute_time() + 1_s; + perf_count(_serial_telem_error_perf); + break; + } + } + + return all_telem_sampled; +} + +bool DShot::set_next_telemetry_index() +{ + // Round-robin through motor indices (Motor1=0, Motor2=1, ...). + // _telemetry_motor_index and _telemetry_requested_mask are in motor-index domain. + + // Active motors are those that exist and aren't being skipped + uint16_t active_motor_mask = _motor_mask & ~_serial_telem_skip_mask; + + if (active_motor_mask == 0) { + _telemetry_motor_index = -1; + _telemetry_requested_mask = 0; + return true; + } + + int start = (_telemetry_motor_index < 0) ? 0 : (_telemetry_motor_index + 1) % DSHOT_MAX_MOTORS; + int motor = start; + + do { + if ((active_motor_mask & (1 << motor)) && !(_telemetry_requested_mask & (1 << motor))) { + _telemetry_motor_index = motor; + _telemetry_requested_mask |= (1 << motor); + return false; + } + + motor = (motor + 1) % DSHOT_MAX_MOTORS; + } while (motor != start); + + // All active motors have been sampled + _telemetry_motor_index = -1; + _telemetry_requested_mask = 0; + perf_count(_serial_telem_allsampled_perf); + return true; +} + +bool DShot::process_bdshot_telemetry() +{ + if (!_bdshot_output_mask) { + return false; + } + + hrt_abstime now = hrt_absolute_time(); + + // Don't try to process any telem data until after ESCs have been given time to boot + if (now < ESC_INIT_TELEM_DELAY) { + return false; + } + + // We wait until all BDShot channels are ready. + if ((up_bdshot_get_ready_mask() & _bdshot_output_mask) != _bdshot_output_mask) { + return false; + } + + for (uint8_t output_channel = 0; output_channel < DSHOT_MAXIMUM_CHANNELS; output_channel++) { + if (!(_bdshot_output_mask & (1 << output_channel))) { + continue; + } + + int motor_index = motor_index_from_output(output_channel); + + if (motor_index < 0) { + continue; + } + + EscData esc = {}; + esc.source = TelemetrySource::BDShot; + esc.motor_index = motor_index; + esc.timestamp = now; + + _bdshot_telem_errors[motor_index] = up_bdshot_num_errors(output_channel); + + if (up_bdshot_channel_online(output_channel)) { + + // Record when this motor first came online + if (!(_bdshot_telem_online_mask & (1 << motor_index))) { + _bdshot_telem_online_timestamps[motor_index] = now; + } + + // Online mask is in motor order for command/request logic + _bdshot_telem_online_mask |= (1 << motor_index); + + // Only update RPM if online + int erpm = 0; + + if (up_bdshot_get_erpm(output_channel, &erpm) == PX4_OK) { + esc.erpm = erpm * 100; + + } else { + // Use previous value (esc_status is indexed by motor_index) + int pole_count = math::max(get_pole_count(motor_index), 2); // constrain to 2 to avoid divide by zero + esc.erpm = _esc_status.esc[motor_index].esc_rpm * (pole_count / 2); + } + + // Extended DShot Telemetry + if (_bdshot_edt_enabled) { + + uint8_t value = 0; + + if (up_bdshot_get_extended_telemetry(output_channel, DSHOT_EDT_TEMPERATURE, &value) == PX4_OK) { + esc.temperature = value; // BDShot temperature is in C + + } else { + esc.temperature = _esc_status.esc[motor_index].esc_temperature; // use previous + } + + if (up_bdshot_get_extended_telemetry(output_channel, DSHOT_EDT_VOLTAGE, &value) == PX4_OK) { + esc.voltage = static_cast(value) / 4.f; // BDShot voltage is in 0.25V + + } else { + esc.voltage = _esc_status.esc[motor_index].esc_voltage; // use previous + } + + if (up_bdshot_get_extended_telemetry(output_channel, DSHOT_EDT_CURRENT, &value) == PX4_OK) { + esc.current = static_cast(value) / 2.f; // BDShot current is in 0.5A + + } else { + esc.current = _esc_status.esc[motor_index].esc_current; // use previous + } + } + + } else { + _bdshot_telem_online_mask &= ~(1 << motor_index); + _bdshot_telem_online_timestamps[motor_index] = 0; + _bdshot_edt_requested_mask &= ~(1 << motor_index); + perf_count(_bdshot_error_perf); + } + + consume_esc_data(esc); + } + + perf_count(_bdshot_recv_perf); + + return true; +} + +void DShot::consume_esc_data(const EscData &esc) +{ + int motor_index = esc.motor_index; + + if (!math::isInRange(motor_index, 0, DSHOT_MAX_MOTORS - 1)) { + return; + } + + // Determine if this motor is online based on its telemetry sources. + // Intentionally conservative: when both BDShot and serial telemetry are enabled, + // both must report online. A motor reporting offline on either source indicates + // a degraded setup that should be surfaced to the operator. + uint16_t motor_bit = 1u << motor_index; + bool is_bdshot = _bdshot_motor_mask & motor_bit; + + // Both sources must report online when enabled (conservative) + bool motor_online = (!is_bdshot || (_bdshot_telem_online_mask & motor_bit)) + && (!_serial_telemetry_enabled || (_serial_telem_online_mask & motor_bit)); + + if (motor_online) { + _esc_status.esc_online_flags |= motor_bit; + + } else { + _esc_status.esc_online_flags &= ~motor_bit; + } + + // esc_status is indexed by motor_index (Motor1=0, Motor2=1, ...) + _esc_status.esc[motor_index].esc_errorcount = _serial_telem_errors[motor_index] + + _bdshot_telem_errors[motor_index]; + + if (esc.source == TelemetrySource::Serial) { + // Only use SerialTelemetry eRPM when BDShot is disabled + if (!is_bdshot) { + _esc_status.esc[motor_index].timestamp = esc.timestamp; + int pole_count = math::max(get_pole_count(motor_index), 2); // constrain to 2 to avoid divide by zero + _esc_status.esc[motor_index].esc_rpm = esc.erpm / (pole_count / 2); + } + + _esc_status.esc[motor_index].esc_voltage = esc.voltage; + _esc_status.esc[motor_index].esc_current = esc.current; + _esc_status.esc[motor_index].esc_temperature = esc.temperature; + + } else if (esc.source == TelemetrySource::BDShot) { + _esc_status.esc[motor_index].timestamp = esc.timestamp; + int pole_count = math::max(get_pole_count(motor_index), 2); // constrain to 2 to avoid divide by zero + _esc_status.esc[motor_index].esc_rpm = esc.erpm / (pole_count / 2); + + // Only use BDShot Volt/Curr/Temp when Serial Telemetry is disabled + if (!_serial_telemetry_enabled) { + _esc_status.esc[motor_index].esc_voltage = esc.voltage; + _esc_status.esc[motor_index].esc_current = esc.current; + _esc_status.esc[motor_index].esc_temperature = esc.temperature; + } + } +} + uint16_t DShot::convert_output_to_3d_scaling(uint16_t output) { // DShot 3D splits the throttle ranges in two. // This is in terms of DShot values, code below is in terms of actuator_output // Direction 1) 48 is the slowest, 1047 is the fastest. // Direction 2) 1049 is the slowest, 2047 is the fastest. - if (output >= _param_dshot_3d_dead_l.get() && output < _param_dshot_3d_dead_h.get()) { + if (output >= _3d_dead_l && output < _3d_dead_h) { return DSHOT_DISARM_VALUE; } @@ -452,7 +763,7 @@ uint16_t DShot::convert_output_to_3d_scaling(uint16_t output) } float max_output = 999.f; - float min_output = max_output * _param_dshot_min.get(); + float min_output = max_output * _dshot_min; output = math::min(max_output, (min_output + output * (max_output - min_output) / max_output)); if (upper_range) { @@ -462,159 +773,135 @@ uint16_t DShot::convert_output_to_3d_scaling(uint16_t output) return output; } -void DShot::Run() +void DShot::handle_vehicle_commands() { - if (should_exit()) { - ScheduleClear(); - _mixing_output.unregister(); + vehicle_command_s command = {}; - exit_and_cleanup(desc); + while (_current_command.finished() && _vehicle_command_sub.update(&command)) { + + switch (command.command) { + case vehicle_command_s::VEHICLE_CMD_CONFIGURE_ACTUATOR: + handle_configure_actuator(command); + break; + + case vehicle_command_s::VEHICLE_CMD_ESC_REQUEST_EEPROM: + handle_esc_request_eeprom(command); + break; + + default: + break; + } + } +} + +void DShot::handle_configure_actuator(const vehicle_command_s &command) +{ + int function = (int)(command.param5 + 0.5); + + if (function > 1000) { + // NOTE: backwards compatibility for QGC - 1101=Motor1, 1102=Motor2, etc + function -= 1000; + + } else if (function >= 1 && function <= 16) { + // MAVLink standard: ACTUATOR_OUTPUT_FUNCTION_MOTOR1=1 .. MOTOR16=16 + // PX4 internal: OutputFunction::Motor1=101 .. Motor12=112 + function += 100; + } + + int motor_index = -1; + + if (function >= (int)OutputFunction::Motor1 && function < ((int)OutputFunction::Motor1 + DSHOT_MAXIMUM_CHANNELS)) { + for (int i = 0; i < DSHOT_MAXIMUM_CHANNELS; ++i) { + if ((int)_mixing_output.outputFunction(i) == function && _mixing_output.isMotor(i)) { + motor_index = (int)_mixing_output.outputFunction(i) - (int)OutputFunction::Motor1; + } + } + } + + vehicle_command_ack_s command_ack = {}; + command_ack.command = command.command; + command_ack.target_system = command.source_system; + command_ack.target_component = command.source_component; + command_ack.result = vehicle_command_ack_s::VEHICLE_CMD_RESULT_UNSUPPORTED; + + if ((motor_index >= 0) && (motor_index < DSHOT_MAX_MOTORS)) { + int type = lroundf(command.param1); + PX4_DEBUG("motor_index: %i type: %i", motor_index, type); + _current_command.clear(); + _current_command.command = DSHOT_CMD_MOTOR_STOP; + _current_command.num_repetitions = 10; + _current_command.save = false; + + + switch (type) { + case vehicle_command_s::ACTUATOR_CONFIGURATION_BEEP: + _current_command.command = DSHOT_CMD_BEEP1; + break; + + case vehicle_command_s::ACTUATOR_CONFIGURATION_3D_MODE_OFF: + _current_command.command = DSHOT_CMD_3D_MODE_OFF; + _current_command.save = true; + break; + + case vehicle_command_s::ACTUATOR_CONFIGURATION_3D_MODE_ON: + _current_command.command = DSHOT_CMD_3D_MODE_ON; + _current_command.save = true; + break; + + case vehicle_command_s::ACTUATOR_CONFIGURATION_SPIN_DIRECTION1: + _current_command.command = DSHOT_CMD_SPIN_DIRECTION_1; + _current_command.save = true; + break; + + case vehicle_command_s::ACTUATOR_CONFIGURATION_SPIN_DIRECTION2: + _current_command.command = DSHOT_CMD_SPIN_DIRECTION_2; + _current_command.save = true; + break; + + default: + PX4_WARN("unknown command: %i", type); + break; + } + + if (_current_command.command != DSHOT_CMD_MOTOR_STOP) { + command_ack.result = vehicle_command_ack_s::VEHICLE_CMD_RESULT_ACCEPTED; + _current_command.motor_mask = 1 << motor_index; + } + } + + command_ack.timestamp = hrt_absolute_time(); + _command_ack_pub.publish(command_ack); +} + +void DShot::handle_esc_request_eeprom(const vehicle_command_s &command) +{ + PX4_DEBUG("Received ESC_REQUEST_EEPROM"); + PX4_DEBUG("esc_index: %d", (int)command.param2); + + int esc_index = lroundf(command.param2); + + if (esc_index != 255 && (esc_index < 0 || esc_index >= DSHOT_MAX_MOTORS)) { + PX4_ERR("ESC_REQUEST_EEPROM: invalid esc_index %d", esc_index); return; } - perf_begin(_cycle_perf); + if (esc_index == 255) { + PX4_DEBUG("mark all unread"); + _settings_requested_mask = 0; - _mixing_output.update(); - - // update output status if armed or if mixer is loaded - bool outputs_on = true; - - if (_outputs_on != outputs_on) { - enable_dshot_outputs(outputs_on); + } else { + PX4_DEBUG("mark one unread"); + _settings_requested_mask &= ~(1 << esc_index); } - - if (_telemetry) { - const int telem_update = _telemetry->update(_num_motors); - - if (telem_update >= 0) { - const int need_to_publish = handle_new_telemetry_data(telem_update, _telemetry->latestESCData(), - _bidirectional_dshot_enabled); - - // We don't want to publish twice, once by telemetry and once by bidirectional dishot. - if (!_bidirectional_dshot_enabled && need_to_publish) { - publish_esc_status(); - } - } - } - - if (_bidirectional_dshot_enabled) { - // Add bdshot data to esc status - const int need_to_publish = handle_new_bdshot_erpm(); - - if (need_to_publish) { - publish_esc_status(); - } - } - - if (_parameter_update_sub.updated()) { - update_params(); - } - - // telemetry device update request? - if (_request_telemetry_init.load()) { - init_telemetry(_telemetry_device, _telemetry_swap_rxtx); - _request_telemetry_init.store(false); - } - - // new command? - if (!_current_command.valid()) { - Command *new_command = _new_command.load(); - - if (new_command) { - _current_command = *new_command; - _new_command.store(nullptr); - } - } - - handle_vehicle_commands(); - - if (!_mixing_output.armed().armed) { - if (_reversible_outputs != _mixing_output.reversibleOutputs()) { - _reversible_outputs = _mixing_output.reversibleOutputs(); - update_params(); - } - } - - // check at end of cycle (updateSubscriptions() can potentially change to a different WorkQueue thread) - _mixing_output.updateSubscriptions(true); - - perf_end(_cycle_perf); } -void DShot::handle_vehicle_commands() +int DShot::get_pole_count(int motor_index) const { - vehicle_command_s vehicle_command; - - while (!_current_command.valid() && _vehicle_command_sub.update(&vehicle_command)) { - - if (vehicle_command.command == vehicle_command_s::VEHICLE_CMD_CONFIGURE_ACTUATOR) { - int function = (int)(vehicle_command.param5 + 0.5); - - if (function < 1000) { - const int first_motor_function = 1; // from MAVLink ACTUATOR_OUTPUT_FUNCTION - const int first_servo_function = 33; - - if (function >= first_motor_function && function < first_motor_function + actuator_test_s::MAX_NUM_MOTORS) { - function = function - first_motor_function + actuator_test_s::FUNCTION_MOTOR1; - - } else if (function >= first_servo_function && function < first_servo_function + actuator_test_s::MAX_NUM_SERVOS) { - function = function - first_servo_function + actuator_test_s::FUNCTION_SERVO1; - - } else { - function = INT32_MAX; - } - - } else { - function -= 1000; - } - - int type = (int)(vehicle_command.param1 + 0.5f); - int index = -1; - - for (int i = 0; i < DIRECT_PWM_OUTPUT_CHANNELS; ++i) { - if ((int)_mixing_output.outputFunction(i) == function) { - index = i; - } - } - - vehicle_command_ack_s command_ack{}; - command_ack.command = vehicle_command.command; - command_ack.target_system = vehicle_command.source_system; - command_ack.target_component = vehicle_command.source_component; - command_ack.result = vehicle_command_ack_s::VEHICLE_CMD_RESULT_UNSUPPORTED; - - if (index != -1) { - PX4_DEBUG("setting command: index: %i type: %i", index, type); - _current_command.command = dshot_command_t::DShot_cmd_motor_stop; - - switch (type) { - case 1: _current_command.command = dshot_command_t::DShot_cmd_beacon1; break; - - case 2: _current_command.command = dshot_command_t::DShot_cmd_3d_mode_on; break; - - case 3: _current_command.command = dshot_command_t::DShot_cmd_3d_mode_off; break; - - case 4: _current_command.command = dshot_command_t::DShot_cmd_spin_direction_1; break; - - case 5: _current_command.command = dshot_command_t::DShot_cmd_spin_direction_2; break; - } - - if (_current_command.command == dshot_command_t::DShot_cmd_motor_stop) { - PX4_WARN("unknown command: %i", type); - - } else { - command_ack.result = vehicle_command_ack_s::VEHICLE_CMD_RESULT_ACCEPTED; - _current_command.motor_mask = 1 << index; - _current_command.num_repetitions = 10; - _current_command.save = true; - } - - } - - command_ack.timestamp = hrt_absolute_time(); - _command_ack_pub.publish(command_ack); - } + if (motor_index >= 0 && motor_index < DSHOT_MAX_MOTORS) { + return _pole_count_params[motor_index]; } + + return 14; } void DShot::update_params() @@ -624,36 +911,316 @@ void DShot::update_params() updateParams(); - // we use a minimum value of 1, since 0 is for disarmed - _mixing_output.setAllMinValues(math::constrain(static_cast((_param_dshot_min.get() * - static_cast(DSHOT_MAX_THROTTLE))), - DSHOT_MIN_THROTTLE, DSHOT_MAX_THROTTLE)); + // Cache params used in hot path + _bdshot_edt_enabled = _param_dshot_bidir_edt.get(); + _3d_enabled = _param_dshot_3d_enable.get(); + _3d_dead_l = _param_dshot_3d_dead_l.get(); + _3d_dead_h = _param_dshot_3d_dead_h.get(); + _dshot_min = _param_dshot_min.get(); + _esc_type = _param_dshot_esc_type.get(); + + // Calculate minimum DShot output as percent of throttle and constrain. + float min_value = _dshot_min * (float)DSHOT_MAX_THROTTLE; + uint16_t dshot_min_value = math::constrain((uint16_t)min_value, DSHOT_MIN_THROTTLE, DSHOT_MAX_THROTTLE); + + _mixing_output.setAllMinValues(dshot_min_value); // Do not use the minimum parameter for reversible outputs - for (unsigned i = 0; i < _num_outputs; ++i) { - if ((1 << i) & _reversible_outputs) { + for (uint8_t i = 0; i < DSHOT_MAXIMUM_CHANNELS; i++) { + if (_mixing_output.reversibleOutputs() & (1 << i)) { _mixing_output.minValue(i) = DSHOT_MIN_THROTTLE; } } + + // Update per-motor pole count param handles and cached values + for (int i = 0; i < DSHOT_MAX_MOTORS; i++) { + char name[20]; + snprintf(name, sizeof(name), "DSHOT_MOT_POL%d", i + 1); + _param_pole_count_handles[i] = param_find(name); + + int32_t pole_count = 14; + param_get(_param_pole_count_handles[i], &pole_count); + _pole_count_params[i] = pole_count; + } +} + +void DShot::mixerChanged() +{ + PX4_DEBUG("mixerChanged"); + + _esc_status.esc_connectiontype = esc_status_s::ESC_CONNECTION_TYPE_DSHOT; + + // Build actuator-order and motor-order masks from actual motor assignments + uint32_t new_output_mask = 0; + uint32_t new_motor_mask = 0; + + for (int actuator_channel = 0; actuator_channel < DSHOT_MAXIMUM_CHANNELS; actuator_channel++) { + int motor_index = motor_index_from_output(actuator_channel); + + if (motor_index >= 0) { + new_output_mask |= (1 << actuator_channel); + new_motor_mask |= (1 << motor_index); + _esc_status.esc[motor_index].actuator_function = (uint8_t)_mixing_output.outputFunction(actuator_channel); + } + } + + // Check if we need to (re)initialize hardware + // bool needs_init = !_hardware_initialized || (new_output_mask != _output_mask); + + if (!_hardware_initialized) { + PX4_DEBUG("Output mask changed: 0x%" PRIx32 " -> 0x%" PRIx32, _output_mask, new_output_mask); + _output_mask = new_output_mask; + _motor_mask = new_motor_mask; + _motor_count = __builtin_popcount(_output_mask); + + uint32_t new_bdshot_output_mask = _bdshot_timer_channels & _output_mask; + PX4_DEBUG("BDShot Output mask changed: 0x%" PRIx32 " -> 0x%" PRIx32, _bdshot_output_mask, new_bdshot_output_mask); + _bdshot_output_mask = new_bdshot_output_mask; + + // Compute motor-order BDShot mask + uint32_t new_bdshot_motor_mask = 0; + + for (int actuator_channel = 0; actuator_channel < DSHOT_MAXIMUM_CHANNELS; actuator_channel++) { + int motor_index = motor_index_from_output(actuator_channel); + + if (motor_index >= 0 && (new_bdshot_output_mask & (1 << actuator_channel))) { + new_bdshot_motor_mask |= (1 << motor_index); + } + } + + _bdshot_motor_mask = new_bdshot_motor_mask; + PX4_DEBUG("Motor mask: 0x%" PRIx32 ", BDShot motor mask: 0x%" PRIx32, _motor_mask, _bdshot_motor_mask); + + up_dshot_init(_output_mask, _bdshot_output_mask, _dshot_frequency, _bdshot_edt_enabled); + up_dshot_arm(true); + _hardware_initialized = true; + } +} + +bool DShot::initialize_dshot() +{ + uint32_t dshot_timer_channels = 0; // Channels on DShot-enabled timers + + // Iterate through timers to determine DShot frequency and BDShot channels + for (uint8_t timer_index = 0; timer_index < MAX_IO_TIMERS; timer_index++) { + + // Get mask of actuator channels associated with this timer group + uint32_t timer_channels = io_timer_get_group(timer_index); + + if (timer_channels == 0) { + continue; + } + + char param_name[17] = {}; + snprintf(param_name, sizeof(param_name), "%s_TIM%u", _mixing_output.paramPrefix(), timer_index); + + int32_t tim_config = 0; + param_t handle = param_find(param_name); + param_get(handle, &tim_config); + + // Map timer config to DShot frequency and BDShot flag + uint32_t freq = 0; + bool is_bdshot = false; + + switch (tim_config) { + case TIM_CONFIG_DSHOT150: freq = DSHOT150; break; + + case TIM_CONFIG_DSHOT300: freq = DSHOT300; break; + + case TIM_CONFIG_DSHOT600: freq = DSHOT600; break; + + case TIM_CONFIG_BDSHOT150: freq = DSHOT150; is_bdshot = true; break; + + case TIM_CONFIG_BDSHOT300: freq = DSHOT300; is_bdshot = true; break; + + case TIM_CONFIG_BDSHOT600: freq = DSHOT600; is_bdshot = true; break; + + default: break; + } + + if (freq > 0) { + if (_dshot_frequency != 0 && _dshot_frequency != freq) { + PX4_WARN("Mixed DShot frequencies across timers, using freq: %lu", freq); + } + + _dshot_frequency = freq; + dshot_timer_channels |= timer_channels; + + if (is_bdshot) { + _bdshot_timer_channels |= timer_channels; + } + } + } + + if (dshot_timer_channels == 0) { + PX4_INFO("No channels configured"); + return false; + } + + return true; +} + +void DShot::init_telemetry(const char *device, bool swap_rxtx) +{ + if (!device) { + return; + } + + if (_telemetry.init(device, swap_rxtx) != PX4_OK) { + PX4_ERR("telemetry init failed"); + return; + } + + // Enable serial telemetry now that we've successfully initialized + _serial_telemetry_enabled = true; + + // Initialize ESC settings handlers based on ESC type + ESCType esc_type = static_cast(_param_dshot_esc_type.get()); + _telemetry.initSettingsHandlers(esc_type, _motor_mask); +} + +static void print_spacer() +{ + for (int i = 0; i < 64; i++) { + PX4_INFO_RAW("-"); + } + + PX4_INFO_RAW("\n"); +} + +int DShot::print_status() +{ + print_spacer(); + PX4_INFO("DShot Driver Status"); + print_spacer(); + + // Configuration + PX4_INFO("Configuration:"); + PX4_INFO(" Output Mask: 0x%02lx (%u channels)", (unsigned long)_output_mask, _motor_count); + PX4_INFO(" BDShot Telemetry: %s", _bdshot_output_mask ? "Enabled" : "Disabled"); + PX4_INFO(" Serial Telemetry: %s", _serial_telemetry_enabled ? "Enabled" : "Disabled"); + PX4_INFO(" Extended DShot: %s", _bdshot_edt_enabled ? "Enabled" : "Disabled"); + + const char *esc_type_str = "Unknown"; + + switch (_param_dshot_esc_type.get()) { + case 1: esc_type_str = "AM32"; break; + + default: break; + } + + PX4_INFO(" ESC Type: %s (%ld)", esc_type_str, _param_dshot_esc_type.get()); + PX4_INFO(" 3D Mode: %s", _param_dshot_3d_enable.get() ? "Enabled" : "Disabled"); + + // Per-motor pole counts + PX4_INFO(" Motor Poles:"); + + for (int i = 0; i < DSHOT_MAX_MOTORS; i++) { + if (_motor_mask & (1 << i)) { + PX4_INFO(" Motor %d: %d poles", i + 1, get_pole_count(i)); + } + } + + // Telemetry Status + if (_bdshot_output_mask || _serial_telemetry_enabled) { + print_spacer(); + PX4_INFO("Telemetry Status:"); + PX4_INFO(" %-4s %-6s %-8s %-8s %-12s %-12s", "Ch", "Motor", "BDShot", "Serial", "BDShot Err", "Serial Err"); + + for (int actuator_channel = 0; actuator_channel < DSHOT_MAXIMUM_CHANNELS; actuator_channel++) { + int motor_index = motor_index_from_output(actuator_channel); + + if (motor_index < 0) { + continue; + } + + const char *bdshot_status = "-"; + const char *serial_status = "-"; + + // Online masks are in motor order + if (_bdshot_output_mask & (1 << actuator_channel)) { + if (!up_bdshot_channel_capture_supported(actuator_channel)) { + bdshot_status = "No DMA"; + + } else { + bdshot_status = (_bdshot_telem_online_mask & (1 << motor_index)) ? "Online" : "Offline"; + } + } + + if (_serial_telemetry_enabled) { + serial_status = (_serial_telem_online_mask & (1 << motor_index)) ? "Online" : "Offline"; + } + + // Error arrays are in actuator order + PX4_INFO(" %-4d %-6d %-8s %-8s %-12lu %-12lu", + actuator_channel + 1, + motor_index + 1, + bdshot_status, + serial_status, + (unsigned long)_bdshot_telem_errors[motor_index], + (unsigned long)_serial_telem_errors[motor_index]); + } + + if (_bdshot_output_mask && _bdshot_edt_enabled) { + PX4_INFO(" EDT Requested Mask (motor order): 0x%02x", _bdshot_edt_requested_mask); + } + + if (_serial_telemetry_enabled) { + PX4_INFO(" Settings Requested Mask (motor order): 0x%02x", _settings_requested_mask); + } + } + + // Bidirectional DShot hardware status + if (_bdshot_output_mask) { + print_spacer(); + PX4_INFO("Bidirectional DShot Hardware:"); + up_bdshot_status(); + } + + // Serial telemetry stats + if (_serial_telemetry_enabled) { + print_spacer(); + PX4_INFO("Serial Telemetry Stats:"); + _telemetry.printStatus(); + } + + print_spacer(); + PX4_INFO("Mixer Information:"); + _mixing_output.printStatus(); + + print_spacer(); + PX4_INFO("Performance Counters:"); + perf_print_counter(_cycle_perf); + + if (_bdshot_output_mask) { + perf_print_counter(_bdshot_recv_perf); + perf_print_counter(_bdshot_error_perf); + } + + if (_serial_telemetry_enabled) { + perf_print_counter(_serial_telem_success_perf); + perf_print_counter(_serial_telem_error_perf); + perf_print_counter(_serial_telem_timeout_perf); + perf_print_counter(_serial_telem_allsampled_perf); + } + + print_spacer(); + + return 0; } int DShot::custom_command(int argc, char *argv[]) { const char *verb = argv[0]; - int motor_index = -1; // select motor index, default: -1=all int myoptind = 1; bool swap_rxtx = false; const char *device_name = nullptr; int ch; const char *myoptarg = nullptr; - while ((ch = px4_getopt(argc, argv, "m:xd:", &myoptind, &myoptarg)) != EOF) { + while ((ch = px4_getopt(argc, argv, "xd:", &myoptind, &myoptarg)) != EOF) { switch (ch) { - case 'm': - motor_index = strtol(myoptarg, nullptr, 10) - 1; - break; - case 'x': swap_rxtx = true; break; @@ -670,8 +1237,8 @@ int DShot::custom_command(int argc, char *argv[]) if (!strcmp(verb, "telemetry")) { if (device_name) { // telemetry can be requested before the module is started - strncpy(_telemetry_device, device_name, sizeof(_telemetry_device) - 1); - _telemetry_device[sizeof(_telemetry_device) - 1] = '\0'; + strncpy(_serial_port_path, device_name, sizeof(_serial_port_path) - 1); + _serial_port_path[sizeof(_serial_port_path) - 1] = '\0'; _telemetry_swap_rxtx = swap_rxtx; _request_telemetry_init.store(true); } @@ -679,36 +1246,6 @@ int DShot::custom_command(int argc, char *argv[]) return 0; } - struct VerbCommand { - const char *name; - dshot_command_t command; - int num_repetitions; - }; - - constexpr VerbCommand commands[] = { - {"reverse", DShot_cmd_spin_direction_2, 10}, - {"normal", DShot_cmd_spin_direction_1, 10}, - {"save", DShot_cmd_save_settings, 10}, - {"3d_on", DShot_cmd_3d_mode_on, 10}, - {"3d_off", DShot_cmd_3d_mode_off, 10}, - {"beep1", DShot_cmd_beacon1, 1}, - {"beep2", DShot_cmd_beacon2, 1}, - {"beep3", DShot_cmd_beacon3, 1}, - {"beep4", DShot_cmd_beacon4, 1}, - {"beep5", DShot_cmd_beacon5, 1}, - }; - - for (unsigned i = 0; i < sizeof(commands) / sizeof(commands[0]); ++i) { - if (!strcmp(verb, commands[i].name)) { - if (!is_running(desc)) { - PX4_ERR("module not running"); - return -1; - } - - return get_instance(desc)->send_command_thread_safe(commands[i].command, commands[i].num_repetitions, motor_index); - } - } - if (!is_running(desc)) { int ret = DShot::task_spawn(argc, argv); @@ -720,28 +1257,31 @@ int DShot::custom_command(int argc, char *argv[]) return print_usage("unknown command"); } -int DShot::print_status() +int DShot::task_spawn(int argc, char *argv[]) { - PX4_INFO("Outputs initialized: %s", _outputs_initialized ? "yes" : "no"); - PX4_INFO("Outputs used: 0x%" PRIx32, _output_mask); - PX4_INFO("Outputs on: %s", _outputs_on ? "yes" : "no"); - perf_print_counter(_cycle_perf); - perf_print_counter(_bdshot_rpm_perf); - perf_print_counter(_dshot_telem_perf); + int ret = PX4_ERROR; + DShot *instance = new DShot(); - _mixing_output.printStatus(); + if (instance) { + desc.object.store(instance); + desc.task_id = task_id_is_work_queue; - if (_telemetry) { - PX4_INFO("telemetry on: %s", _telemetry_device); - _telemetry->printStatus(); + if (instance->init() == PX4_OK) { + return PX4_OK; + } + + PX4_INFO("Exiting"); + ret = PX4_OK; + + } else { + PX4_ERR("alloc failed"); } - /* Print dshot status */ - if (_bidirectional_dshot_enabled) { - up_bdshot_status(); - } + delete instance; + desc.object.store(nullptr); + desc.task_id = -1; - return 0; + return ret; } int DShot::print_usage(const char *reason) @@ -753,22 +1293,13 @@ int DShot::print_usage(const char *reason) PRINT_MODULE_DESCRIPTION( R"DESCR_STR( ### Description -This is the DShot output driver. It is similar to the fmu driver, and can be used as drop-in replacement +This is the DShot output driver. It can be used as drop-in replacement to use DShot as ESC communication protocol instead of PWM. -On startup, the module tries to occupy all available pins for DShot output. -It skips all pins already in use (e.g. by a camera trigger module). - It supports: - DShot150, DShot300, DShot600 - telemetry via separate UART and publishing as esc_status message -- sending DShot commands via CLI -### Examples -Permanently reverse motor 1: -$ dshot reverse -m 1 -$ dshot save -m 1 -After saving, the reversed direction will be regarded as the normal one. So to reverse again repeat the same commands. )DESCR_STR"); PRINT_MODULE_USAGE_NAME("dshot", "driver"); @@ -778,28 +1309,6 @@ After saving, the reversed direction will be regarded as the normal one. So to r PRINT_MODULE_USAGE_PARAM_STRING('d', nullptr, "", "UART device", false); PRINT_MODULE_USAGE_PARAM_FLAG('x', "Swap RX/TX pins", true); - // DShot commands - PRINT_MODULE_USAGE_COMMAND_DESCR("reverse", "Reverse motor direction"); - PRINT_MODULE_USAGE_PARAM_INT('m', -1, 0, 16, "Motor index (1-based, default=all)", true); - PRINT_MODULE_USAGE_COMMAND_DESCR("normal", "Normal motor direction"); - PRINT_MODULE_USAGE_PARAM_INT('m', -1, 0, 16, "Motor index (1-based, default=all)", true); - PRINT_MODULE_USAGE_COMMAND_DESCR("save", "Save current settings"); - PRINT_MODULE_USAGE_PARAM_INT('m', -1, 0, 16, "Motor index (1-based, default=all)", true); - PRINT_MODULE_USAGE_COMMAND_DESCR("3d_on", "Enable 3D mode"); - PRINT_MODULE_USAGE_PARAM_INT('m', -1, 0, 16, "Motor index (1-based, default=all)", true); - PRINT_MODULE_USAGE_COMMAND_DESCR("3d_off", "Disable 3D mode"); - PRINT_MODULE_USAGE_PARAM_INT('m', -1, 0, 16, "Motor index (1-based, default=all)", true); - PRINT_MODULE_USAGE_COMMAND_DESCR("beep1", "Send Beep pattern 1"); - PRINT_MODULE_USAGE_PARAM_INT('m', -1, 0, 16, "Motor index (1-based, default=all)", true); - PRINT_MODULE_USAGE_COMMAND_DESCR("beep2", "Send Beep pattern 2"); - PRINT_MODULE_USAGE_PARAM_INT('m', -1, 0, 16, "Motor index (1-based, default=all)", true); - PRINT_MODULE_USAGE_COMMAND_DESCR("beep3", "Send Beep pattern 3"); - PRINT_MODULE_USAGE_PARAM_INT('m', -1, 0, 16, "Motor index (1-based, default=all)", true); - PRINT_MODULE_USAGE_COMMAND_DESCR("beep4", "Send Beep pattern 4"); - PRINT_MODULE_USAGE_PARAM_INT('m', -1, 0, 16, "Motor index (1-based, default=all)", true); - PRINT_MODULE_USAGE_COMMAND_DESCR("beep5", "Send Beep pattern 5"); - PRINT_MODULE_USAGE_PARAM_INT('m', -1, 0, 16, "Motor index (1-based, default=all)", true); - PRINT_MODULE_USAGE_DEFAULT_COMMANDS(); return 0; diff --git a/src/drivers/dshot/DShot.h b/src/drivers/dshot/DShot.h index bb67996acd..a4a54a5691 100644 --- a/src/drivers/dshot/DShot.h +++ b/src/drivers/dshot/DShot.h @@ -1,6 +1,6 @@ /**************************************************************************** * - * Copyright (c) 2019-2022 PX4 Development Team. All rights reserved. + * Copyright (c) 2026 PX4 Development Team. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -39,23 +39,33 @@ #include #include #include +#include +#include "DShotCommon.h" #include "DShotTelemetry.h" using namespace time_literals; -#if !defined(DIRECT_PWM_OUTPUT_CHANNELS) -# error "board_config.h needs to define DIRECT_PWM_OUTPUT_CHANNELS" -#endif +static_assert(DSHOT_MAXIMUM_CHANNELS <= 16, "DShot driver uses uint16_t bitmasks"); -/** Dshot PWM frequency, Hz */ -static constexpr unsigned int DSHOT150 = 150000u; -static constexpr unsigned int DSHOT300 = 300000u; -static constexpr unsigned int DSHOT600 = 600000u; +static constexpr hrt_abstime ESC_INIT_TELEM_DELAY = 5_s; -static constexpr int DSHOT_DISARM_VALUE = 0; -static constexpr int DSHOT_MIN_THROTTLE = 1; -static constexpr int DSHOT_MAX_THROTTLE = 1999; +/// Dshot PWM frequency (Hz) +static constexpr uint32_t DSHOT150 = 150000u; +static constexpr uint32_t DSHOT300 = 300000u; +static constexpr uint32_t DSHOT600 = 600000u; + +/// Timer config values from PWM_TIM param (matches pwm_out/module.yaml enum) +static constexpr int32_t TIM_CONFIG_DSHOT150 = -5; +static constexpr int32_t TIM_CONFIG_DSHOT300 = -4; +static constexpr int32_t TIM_CONFIG_DSHOT600 = -3; +static constexpr int32_t TIM_CONFIG_BDSHOT150 = -8; +static constexpr int32_t TIM_CONFIG_BDSHOT300 = -7; +static constexpr int32_t TIM_CONFIG_BDSHOT600 = -6; + +static constexpr uint16_t DSHOT_DISARM_VALUE = 0; +static constexpr uint16_t DSHOT_MIN_THROTTLE = 1; +static constexpr uint16_t DSHOT_MAX_THROTTLE = 1999; class DShot final : public ModuleBase, public OutputModuleInterface { @@ -65,122 +75,190 @@ public: DShot(); ~DShot() override; - /** @see ModuleBase */ + // @see ModuleBase static int custom_command(int argc, char *argv[]); + // @see ModuleBase + int print_status() override; + + // @see ModuleBase + static int print_usage(const char *reason = nullptr); + + // @see ModuleBase + static int task_spawn(int argc, char *argv[]); + int init(); void mixerChanged() override; - /** @see ModuleBase::print_status() */ - int print_status() override; - - /** @see ModuleBase */ - static int print_usage(const char *reason = nullptr); - - /** - * Send a dshot command to one or all motors - * This is expected to be called from another thread. - * @param num_repetitions number of times to repeat, set at least to 1 - * @param motor_index index or -1 for all - * @return 0 on success, <0 error otherwise - */ - int send_command_thread_safe(const dshot_command_t command, const int num_repetitions, const int motor_index); - - /** @see ModuleBase */ - static int task_spawn(int argc, char *argv[]); - - bool telemetry_enabled() const { return _telemetry != nullptr; } - - bool updateOutputs(uint16_t outputs[MAX_ACTUATORS], - unsigned num_outputs, unsigned num_control_groups_updated) override; + bool updateOutputs(float *outputs, unsigned num_outputs, unsigned num_control_groups_updated) override; private: - /** Disallow copy construction and move assignment. */ + // Disallow copy construction and move assignment DShot(const DShot &) = delete; DShot operator=(const DShot &) = delete; - enum class DShotConfig { - Disabled = 0, - DShot150 = 150, - DShot300 = 300, - DShot600 = 600, - }; - - struct Command { - dshot_command_t command{}; - int num_repetitions{0}; - uint8_t motor_mask{0xff}; - bool save{false}; - - bool valid() const { return num_repetitions > 0; } - void clear() { num_repetitions = 0; } - }; - - int _last_telemetry_index{-1}; - uint8_t _actuator_functions[esc_status_s::CONNECTED_ESC_MAX] {}; - - void enable_dshot_outputs(const bool enabled); - + bool initialize_dshot(); void init_telemetry(const char *device, bool swap_rxtx); - int handle_new_telemetry_data(const int telemetry_index, const DShotTelemetry::EscData &data, bool ignore_rpm); + // Map output channel to motor index [0..DSHOT_MAX_MOTORS-1], or -1 if not a motor + int motor_index_from_output(int output_channel) const + { + if (!_mixing_output.isMotor(output_channel)) { return -1; } - void publish_esc_status(void); + int idx = (int)_mixing_output.outputFunction(output_channel) - (int)OutputFunction::Motor1; + return (idx >= 0 && idx < DSHOT_MAX_MOTORS) ? idx : -1; + } - int handle_new_bdshot_erpm(void); + uint16_t esc_armed_mask(uint16_t *outputs, uint8_t num_outputs); - void Run() override; + void update_motor_outputs(uint16_t *outputs, int num_outputs); + void update_motor_commands(int num_outputs); + void select_next_command(); - void update_params(); + bool set_next_telemetry_index(); // Returns true when the telemetry index has wrapped, indicating all configured motors have been sampled. + bool process_serial_telemetry(); + bool process_bdshot_telemetry(); - void update_num_motors(); - - void handle_vehicle_commands(); + void consume_esc_data(const EscData &data); + uint16_t calculate_output_value(uint16_t raw, int index); uint16_t convert_output_to_3d_scaling(uint16_t output); - MixingOutput _mixing_output{PARAM_PREFIX, DIRECT_PWM_OUTPUT_CHANNELS, *this, MixingOutput::SchedulingPolicy::Auto, false, false}; - uint32_t _reversible_outputs{}; + void Run() override; + void update_params(); - DShotTelemetry *_telemetry{nullptr}; + // Mavlink command handlers + void handle_vehicle_commands(); + void handle_configure_actuator(const vehicle_command_s &command); + void handle_esc_request_eeprom(const vehicle_command_s &command); - uORB::PublicationMultiData esc_status_pub{ORB_ID(esc_status)}; + // Mixer + MixingOutput _mixing_output{PARAM_PREFIX, DSHOT_MAXIMUM_CHANNELS, *this, MixingOutput::SchedulingPolicy::Auto, false, false}; - static char _telemetry_device[20]; - static bool _telemetry_swap_rxtx; - static px4::atomic_bool _request_telemetry_init; - - px4::atomic _new_command{nullptr}; - - - bool _outputs_initialized{false}; - bool _outputs_on{false}; - bool _bidirectional_dshot_enabled{false}; - - static constexpr unsigned _num_outputs{DIRECT_PWM_OUTPUT_CHANNELS}; + // Actuator-order masks (indexed by output channel) uint32_t _output_mask{0}; + uint32_t _bdshot_output_mask{0}; - int _num_motors{0}; - - perf_counter_t _cycle_perf{perf_alloc(PC_ELAPSED, MODULE_NAME": cycle")}; - perf_counter_t _bdshot_rpm_perf{perf_alloc(PC_COUNT, MODULE_NAME": bdshot rpm")}; - perf_counter_t _dshot_telem_perf{perf_alloc(PC_COUNT, MODULE_NAME": dshot telem")}; - - Command _current_command{}; + // Motor-order masks (indexed by motor number: Motor1=0, Motor2=1, etc.) + uint32_t _motor_mask{0}; + uint32_t _bdshot_motor_mask{0}; + uint8_t _motor_count{0}; + // uORB uORB::SubscriptionInterval _parameter_update_sub{ORB_ID(parameter_update), 1_s}; uORB::Subscription _vehicle_command_sub{ORB_ID(vehicle_command)}; - uORB::Publication _command_ack_pub{ORB_ID(vehicle_command_ack)}; - uint16_t _esc_status_counter{0}; + uORB::Subscription _esc_eeprom_write_sub{ORB_ID(esc_eeprom_write)}; + uORB::PublicationMultiData _esc_status_pub{ORB_ID(esc_status)}; + uORB::Publication _command_ack_pub{ORB_ID(vehicle_command_ack)}; + + esc_status_s _esc_status{}; + + // Status information + uint32_t _bdshot_telem_online_mask = 0; // Mask indicating telem receive status for bidirectional dshot telem + uint32_t _serial_telem_online_mask = 0; // Mask indicating telem receive status for serial telem + uint32_t _serial_telem_errors[DSHOT_MAX_MOTORS] = {}; + uint32_t _bdshot_telem_errors[DSHOT_MAX_MOTORS] = {}; + uint16_t _bdshot_edt_requested_mask = 0; + uint16_t _settings_requested_mask = 0; + + // Array of timestamps indicating when the telemetry came online + hrt_abstime _serial_telem_online_timestamps[DSHOT_MAX_MOTORS] = {}; + hrt_abstime _bdshot_telem_online_timestamps[DSHOT_MAX_MOTORS] = {}; + + // Serial telemetry adaptive skip: stop polling motors that never respond + static constexpr int SERIAL_TELEM_SKIP_THRESHOLD = 10; // consecutive timeouts before skipping + static constexpr hrt_abstime SERIAL_TELEM_RETRY_INTERVAL = 3_s; // disarmed retry period + uint16_t _serial_telem_skip_mask = 0; // motors to skip in round-robin + uint8_t _serial_telem_consecutive_timeouts[DSHOT_MAX_MOTORS] = {}; + hrt_abstime _serial_telem_last_retry = 0; + + // Serial Telemetry + DShotTelemetry _telemetry; + static char _serial_port_path[20]; + static bool _telemetry_swap_rxtx; + static px4::atomic_bool _request_telemetry_init; + int _telemetry_motor_index = -1; + uint32_t _telemetry_requested_mask = 0; + hrt_abstime _serial_telem_delay_until = ESC_INIT_TELEM_DELAY; + + // Parameters we must load only at init + bool _serial_telemetry_enabled = false; + bool _bdshot_edt_enabled = false; + + // Cached parameters (updated in update_params()) + bool _3d_enabled = false; + int _3d_dead_l = 0; + int _3d_dead_h = 0; + float _dshot_min = 0.f; + int _esc_type = 0; + + // Hardware initialization state + bool _hardware_initialized = false; + uint32_t _dshot_frequency = 0; + uint32_t _bdshot_timer_channels = 0; + + // Perf counters + perf_counter_t _cycle_perf{perf_alloc(PC_ELAPSED, MODULE_NAME": cycle")}; + perf_counter_t _bdshot_recv_perf{perf_alloc(PC_COUNT, MODULE_NAME": bdshot recv")}; + perf_counter_t _bdshot_error_perf{perf_alloc(PC_COUNT, MODULE_NAME": bdshot error")}; + perf_counter_t _serial_telem_success_perf{perf_alloc(PC_COUNT, MODULE_NAME": serial telem success")}; + perf_counter_t _serial_telem_error_perf{perf_alloc(PC_COUNT, MODULE_NAME": serial telem error")}; + perf_counter_t _serial_telem_timeout_perf{perf_alloc(PC_COUNT, MODULE_NAME": serial telem timeout")}; + perf_counter_t _serial_telem_allsampled_perf{perf_alloc(PC_COUNT, MODULE_NAME": serial telem all sampled")}; + + // Commands + struct DShotCommand { + uint16_t command{}; + int num_repetitions{0}; + uint16_t motor_mask{(1u << DSHOT_MAXIMUM_CHANNELS) - 1}; + bool save{false}; + bool expect_response{false}; + + bool finished() const { return num_repetitions == 0; } + void clear() + { + command = 0; + num_repetitions = 0; + motor_mask = 0; + save = false; + expect_response = false; + } + }; + + DShotCommand _current_command{}; + + // DShot Programming Mode + enum class ProgrammingState { + Idle, + EnterMode, + SendAddress, + SendValue, + ExitMode + }; + + esc_eeprom_write_s _esc_eeprom_write{}; + bool _dshot_programming_active = {false}; + uint32_t _settings_written_mask[2] = {}; + + ProgrammingState _programming_state{ProgrammingState::Idle}; + + uint16_t _programming_address{}; + uint16_t _programming_value{}; + + param_t _param_pole_count_handles[DSHOT_MAX_MOTORS] {}; + int32_t _pole_count_params[DSHOT_MAX_MOTORS] {}; + int get_pole_count(int motor_index) const; + + // Parameters DEFINE_PARAMETERS( + (ParamInt) _param_dshot_esc_type, (ParamFloat) _param_dshot_min, (ParamBool) _param_dshot_3d_enable, (ParamInt) _param_dshot_3d_dead_h, (ParamInt) _param_dshot_3d_dead_l, - (ParamInt) _param_mot_pole_count, - (ParamBool) _param_bidirectional_enable + (ParamBool) _param_dshot_bidir_edt ) }; diff --git a/boards/xc-fly/xc-slim/nuttx-config/include/board_dma_map.h b/src/drivers/dshot/DShotCommon.h similarity index 54% rename from boards/xc-fly/xc-slim/nuttx-config/include/board_dma_map.h rename to src/drivers/dshot/DShotCommon.h index a27735b354..ff96282c6c 100644 --- a/boards/xc-fly/xc-slim/nuttx-config/include/board_dma_map.h +++ b/src/drivers/dshot/DShotCommon.h @@ -1,6 +1,6 @@ /**************************************************************************** * - * Copyright (c) 2021 PX4 Development Team. All rights reserved. + * Copyright (c) 2026 PX4 Development Team. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -32,31 +32,62 @@ ****************************************************************************/ #pragma once -// #define DMAMAP_SPI1_RX DMAMAP_DMA12_SPI1RX_0 /* DMA1:37 */ -// #define DMAMAP_SPI1_TX DMAMAP_DMA12_SPI1TX_0 /* DMA1:38 */ -#define DMAMAP_SPI2_RX DMAMAP_DMA12_SPI2RX_0 /* DMA1:39 */ -#define DMAMAP_SPI2_TX DMAMAP_DMA12_SPI2TX_0 /* DMA1:40 */ +#include +#include +#include -// DMAMUX2 -// #define DMAMAP_SPI3_RX DMAMAP_DMA12_SPI3RX_0 /* DMA1:61 */ -// #define DMAMAP_SPI3_TX DMAMAP_DMA12_SPI3TX_0 /* DMA1:62 */ +#if !defined(DIRECT_PWM_OUTPUT_CHANNELS) +# error "board_config.h needs to define DIRECT_PWM_OUTPUT_CHANNELS" +#endif -// #define DMAMAP_SPI6_RX DMAMAP_BDMA_SPI6_RX /* BDMA:11 */ -// #define DMAMAP_SPI6_TX DMAMAP_BDMA_SPI6_TX /* BDMA:12 */ +static constexpr int DSHOT_MAXIMUM_CHANNELS = DIRECT_PWM_OUTPUT_CHANNELS; -//TODO: UART DMA test -// #define DMAMAP_USART1_RX DMAMAP_DMA12_USART1RX_1 /*DMA2:41*/ -// #define DMAMAP_USART1_TX DMAMAP_DMA12_USART1TX_1 /*DMA2:42*/ +// Motor-indexed arrays use this — bounded by both hardware channels and protocol limit +static constexpr int DSHOT_MAX_MOTORS = DSHOT_MAXIMUM_CHANNELS < esc_status_s::CONNECTED_ESC_MAX + ? DSHOT_MAXIMUM_CHANNELS : esc_status_s::CONNECTED_ESC_MAX; -// #define DMAMAP_USART2_RX DMAMAP_DMA12_USART2RX_1 /* DMA2:43 */ -// #define DMAMAP_USART2_TX DMAMAP_DMA12_USART2TX_1 /* DMA2:44 */ +enum class TelemetrySource { + Serial = 0, + BDShot = 1, +}; -// #define DMAMAP_USART3_RX DMAMAP_DMA12_USART3RX_1 /* DMA2:45 */ -// #define DMAMAP_USART3_TX DMAMAP_DMA12_USART3TX_1 /* DMA2:46 */ +struct EscData { + int motor_index; // Motor index 0..(CONNECTED_ESC_MAX-1) + hrt_abstime timestamp; // Sample time + TelemetrySource source; -#define DMAMAP_UART4_RX DMAMAP_DMA12_UART4RX_1 /* DMA1:63 */ -#define DMAMAP_UART4_TX DMAMAP_DMA12_UART4TX_1 /* DMA1:64 */ + float temperature; // [C] + float voltage; // [V] + float current; // [A] + int32_t erpm; // [eRPM] +}; -// #define DMAMAP_UART5_RX DMAMAP_DMA12_UART5RX_0 /* DMA1:65 */ -// #define DMAMAP_UART5_TX DMAMAP_DMA12_UART5RX_0 /* DMA1:66 */ +enum class TelemetryStatus { + NotStarted = 0, + NotReady = 1, + Ready = 2, + Timeout = 3, + ParseError = 4, +}; + +inline uint8_t crc8(const uint8_t *buf, unsigned len) +{ + auto update_crc8 = [](uint8_t crc, uint8_t crc_seed) { + uint8_t crc_u = crc ^ crc_seed; + + for (unsigned i = 0; i < 8; ++i) { + crc_u = (crc_u & 0x80) ? 0x7 ^ (crc_u << 1) : (crc_u << 1); + } + + return crc_u; + }; + + uint8_t crc = 0; + + for (unsigned i = 0; i < len; ++i) { + crc = update_crc8(buf[i], crc); + } + + return crc; +} diff --git a/src/drivers/dshot/DShotTelemetry.cpp b/src/drivers/dshot/DShotTelemetry.cpp index 0567759226..c3c85a7ff3 100644 --- a/src/drivers/dshot/DShotTelemetry.cpp +++ b/src/drivers/dshot/DShotTelemetry.cpp @@ -1,6 +1,6 @@ /**************************************************************************** * - * Copyright (c) 2019 PX4 Development Team. All rights reserved. + * Copyright (c) 2026 PX4 Development Team. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -34,6 +34,7 @@ #include "DShotTelemetry.h" #include +#include #include #include @@ -47,6 +48,14 @@ using namespace time_literals; DShotTelemetry::~DShotTelemetry() { _uart.close(); + + // Clean up settings handlers + for (int i = 0; i < DSHOT_MAX_MOTORS; i++) { + if (_settings_handlers[i]) { + delete _settings_handlers[i]; + _settings_handlers[i] = nullptr; + } + } } int DShotTelemetry::init(const char *port, bool swap_rxtx) @@ -76,304 +85,224 @@ int DShotTelemetry::init(const char *port, bool swap_rxtx) return PX4_OK; } -int DShotTelemetry::update(int num_motors) +void DShotTelemetry::initSettingsHandlers(ESCType esc_type, uint16_t output_mask) { - if (_current_motor_index_request == -1) { - // nothing in progress, start a request - _current_motor_index_request = 0; - _current_request_start = 0; - _frame_position = 0; - return -1; + if (_settings_initialized) { + return; } - // read from the uart. This must be non-blocking, so check first if there is data available - int bytes_available = _uart.bytesAvailable(); + _esc_type = esc_type; - if (bytes_available <= 0) { - // no data available. Check for a timeout - const hrt_abstime now = hrt_absolute_time(); + for (uint8_t i = 0; i < DSHOT_MAX_MOTORS; i++) { - if (_current_request_start > 0 && now - _current_request_start > 30_ms) { - if (_redirect_output) { - // clear and go back to internal buffer - _redirect_output = nullptr; - _current_motor_index_request = -1; + bool output_enabled = (1 << i) & output_mask; - } else { - PX4_DEBUG("ESC telemetry timeout for motor %i (frame pos=%i)", _current_motor_index_request, _frame_position); - ++_num_timeouts; - } - - requestNextMotor(num_motors); - return -2; + if (!output_enabled) { + continue; } - return -1; - } + ESCSettingsInterface *interface = nullptr; - uint8_t buf[ESC_FRAME_SIZE]; - int bytes = _uart.read(buf, sizeof(buf)); + switch (esc_type) { + case ESCType::AM32: + interface = new AM32Settings(i); + break; - int ret = -1; + case ESCType::Unknown: + break; - for (int i = 0; i < bytes && ret == -1; ++i) { - if (_redirect_output) { - _redirect_output->buffer[_redirect_output->buf_pos++] = buf[i]; + default: + PX4_WARN("Unsupported ESC type for settings: %d", (int)esc_type); + break; + } - if (_redirect_output->buf_pos == sizeof(_redirect_output->buffer)) { - // buffer full: return & go back to internal buffer - _redirect_output = nullptr; - ret = _current_motor_index_request; - _current_motor_index_request = -1; - requestNextMotor(num_motors); - } - - } else { - bool successful_decoding; - - if (decodeByte(buf[i], successful_decoding)) { - if (successful_decoding) { - ret = _current_motor_index_request; - } - - requestNextMotor(num_motors); - } + if (interface) { + _settings_handlers[i] = interface; } } - return ret; + _settings_initialized = true; } -bool DShotTelemetry::decodeByte(uint8_t byte, bool &successful_decoding) +void DShotTelemetry::resetCommandResponse() { - _frame_buffer[_frame_position++] = byte; - successful_decoding = false; + _command_response_motor_index = -1; + _command_response_start = 0; + _command_response_position = 0; +} - if (_frame_position == ESC_FRAME_SIZE) { - PX4_DEBUG("got ESC frame for motor %i", _current_motor_index_request); - uint8_t checksum = crc8(_frame_buffer, ESC_FRAME_SIZE - 1); - uint8_t checksum_data = _frame_buffer[ESC_FRAME_SIZE - 1]; - - if (checksum == checksum_data) { - _latest_data.time = hrt_absolute_time(); - _latest_data.temperature = _frame_buffer[0]; - _latest_data.voltage = (_frame_buffer[1] << 8) | _frame_buffer[2]; - _latest_data.current = (_frame_buffer[3] << 8) | _frame_buffer[4]; - _latest_data.consumption = (_frame_buffer[5]) << 8 | _frame_buffer[6]; - _latest_data.erpm = (_frame_buffer[7] << 8) | _frame_buffer[8]; - PX4_DEBUG("Motor %i: temp=%i, V=%i, cur=%i, consumpt=%i, rpm=%i", _current_motor_index_request, - _latest_data.temperature, _latest_data.voltage, _latest_data.current, _latest_data.consumption, - _latest_data.erpm); - ++_num_successful_responses; - successful_decoding = true; - - } else { - ++_num_checksum_errors; - } - - return true; +void DShotTelemetry::parseCommandResponse() +{ + if (hrt_elapsed_time(&_command_response_start) > 1_s) { + PX4_WARN("Command response timed out: %d bytes received", _command_response_position); + PX4_WARN("At time %.2fs", (double)hrt_absolute_time() / 1000000.); + resetCommandResponse(); + return; } - return false; + uint8_t buf[COMMAND_RESPONSE_MAX_SIZE] = {}; + int bytes = _uart.read(buf, sizeof(buf)); + + if (bytes <= 0) { + return; + } + + // Handle potential overflow, fail out + if (_command_response_position + bytes > COMMAND_RESPONSE_MAX_SIZE) { + PX4_ERR("command response overflow"); + resetCommandResponse(); + return; + } + + // Add bytes to buffer + memcpy(&_command_response_buffer[_command_response_position], buf, bytes); + _command_response_position += bytes; + + switch (_command_response_command) { + case DSHOT_CMD_ESC_INFO: { + if (_command_response_motor_index < 0 || _command_response_motor_index >= DSHOT_MAX_MOTORS) { + resetCommandResponse(); + return; + } + + auto handler = _settings_handlers[_command_response_motor_index]; + + if (!handler) { + resetCommandResponse(); + break; + } + + if (_command_response_position == handler->getExpectedResponseSize()) { + // TODO: handle command failures + handler->decodeInfoResponse(_command_response_buffer, _command_response_position); + resetCommandResponse(); + } + + break; + } + + default: + break; + } +} + +TelemetryStatus DShotTelemetry::parseTelemetryPacket(EscData *esc_data) +{ + if (telemetryResponseFinished()) { + return TelemetryStatus::NotStarted; + } + + hrt_abstime elapsed = hrt_elapsed_time(&_telemetry_request_start); + + // At 115200 baud the 10-byte response takes ~868us. Skip polling until data could have arrived. + if (elapsed < 800) { + return TelemetryStatus::NotReady; + } + + uint8_t buf[TELEMETRY_FRAME_SIZE]; + int bytes = _uart.read(buf, sizeof(buf)); + + if (bytes <= 0) { + if (elapsed > 5_ms) { + ++_num_timeouts; + + // Mark telemetry request as finished + _telemetry_request_start = 0; + _frame_position = 0; + return TelemetryStatus::Timeout; + } + + return TelemetryStatus::NotReady; + } + + return decodeTelemetryResponse(buf, bytes, esc_data); +} + +TelemetryStatus DShotTelemetry::decodeTelemetryResponse(uint8_t *buffer, int length, EscData *esc_data) +{ + auto status = TelemetryStatus::NotReady; + + for (int i = 0; i < length; i++) { + _frame_buffer[_frame_position++] = buffer[i]; + + /* + * ESC Telemetry Frame Structure (10 bytes total) + * ============================================= + * Byte 0: Temperature (uint8_t) [deg C] + * Byte 1-2: Voltage (uint16_t, big-endian) [0.01V] + * Byte 3-4: Current (uint16_t, big-endian) [0.01A] + * Byte 5-6: Consumption (uint16_t, big-endian) [mAh] + * Byte 7-8: eRPM (uint16_t, big-endian) [100ERPM] + * Byte 9: CRC8 Checksum + */ + + if (_frame_position == TELEMETRY_FRAME_SIZE) { + uint8_t checksum = crc8(_frame_buffer, TELEMETRY_FRAME_SIZE - 1); + uint8_t checksum_data = _frame_buffer[TELEMETRY_FRAME_SIZE - 1]; + + if (checksum == checksum_data) { + + uint8_t temperature = _frame_buffer[0]; + uint16_t voltage = (_frame_buffer[1] << 8) | _frame_buffer[2]; + uint16_t current = (_frame_buffer[3] << 8) | _frame_buffer[4]; + // int16_t consumption = (_frame_buffer[5]) << 8 | _frame_buffer[6]; + uint16_t erpm = (_frame_buffer[7] << 8) | _frame_buffer[8]; + + esc_data->timestamp = hrt_absolute_time(); + esc_data->temperature = (float)temperature; + esc_data->voltage = (float)voltage * 0.01f; + esc_data->current = (float)current * 0.01f; + esc_data->erpm = erpm * 100; + + ++_num_successful_responses; + status = TelemetryStatus::Ready; + + } else { + ++_num_checksum_errors; + status = TelemetryStatus::ParseError; + } + + // Mark telemetry request as finished + _telemetry_request_start = 0; + _frame_position = 0; + } + } + + return status; +} + +void DShotTelemetry::setExpectCommandResponse(int motor_index, uint16_t command) +{ + _command_response_motor_index = motor_index; + _command_response_command = command; + _command_response_start = hrt_absolute_time(); + _command_response_position = 0; +} + +bool DShotTelemetry::commandResponseFinished() +{ + return _command_response_motor_index < 0; +} + +bool DShotTelemetry::commandResponseStarted() +{ + return _command_response_start > 0; +} + +void DShotTelemetry::startTelemetryRequest() +{ + _frame_position = 0; + _telemetry_request_start = hrt_absolute_time(); +} + +bool DShotTelemetry::telemetryResponseFinished() +{ + return _telemetry_request_start == 0; } void DShotTelemetry::printStatus() const { - PX4_INFO("Number of successful ESC frames: %i", _num_successful_responses); - PX4_INFO("Number of timeouts: %i", _num_timeouts); - PX4_INFO("Number of CRC errors: %i", _num_checksum_errors); -} - -uint8_t DShotTelemetry::crc8(const uint8_t *buf, uint8_t len) -{ - auto update_crc8 = [](uint8_t crc, uint8_t crc_seed) { - uint8_t crc_u = crc ^ crc_seed; - - for (int i = 0; i < 8; ++i) { - crc_u = (crc_u & 0x80) ? 0x7 ^ (crc_u << 1) : (crc_u << 1); - } - - return crc_u; - }; - - uint8_t crc = 0; - - for (int i = 0; i < len; ++i) { - crc = update_crc8(buf[i], crc); - } - - return crc; -} - -void DShotTelemetry::requestNextMotor(int num_motors) -{ - _current_motor_index_request = (_current_motor_index_request + 1) % num_motors; - _current_request_start = 0; - _frame_position = 0; -} - -int DShotTelemetry::getRequestMotorIndex() -{ - if (_current_request_start != 0) { - // already in progress, do not send another request - return -1; - } - - _current_request_start = hrt_absolute_time(); - return _current_motor_index_request; -} - -void DShotTelemetry::decodeAndPrintEscInfoPacket(const OutputBuffer &buffer) -{ - static constexpr int version_position = 12; - const uint8_t *data = buffer.buffer; - - if (buffer.buf_pos < version_position) { - PX4_ERR("Not enough data received"); - return; - } - - enum class ESCVersionInfo { - BLHELI32, - KissV1, - KissV2, - }; - ESCVersionInfo version; - int packet_length; - - if (data[version_position] == 254) { - version = ESCVersionInfo::BLHELI32; - packet_length = esc_info_size_blheli32; - - } else if (data[version_position] == 255) { - version = ESCVersionInfo::KissV2; - packet_length = esc_info_size_kiss_v2; - - } else { - version = ESCVersionInfo::KissV1; - packet_length = esc_info_size_kiss_v1; - } - - if (buffer.buf_pos != packet_length) { - PX4_ERR("Packet length mismatch (%i != %i)", buffer.buf_pos, packet_length); - return; - } - - if (DShotTelemetry::crc8(data, packet_length - 1) != data[packet_length - 1]) { - PX4_ERR("Checksum mismatch"); - return; - } - - uint8_t esc_firmware_version = 0; - uint8_t esc_firmware_subversion = 0; - uint8_t esc_type = 0; - - switch (version) { - case ESCVersionInfo::KissV1: - esc_firmware_version = data[12]; - esc_firmware_subversion = (data[13] & 0x1f) + 97; - esc_type = (data[13] & 0xe0) >> 5; - break; - - case ESCVersionInfo::KissV2: - case ESCVersionInfo::BLHELI32: - esc_firmware_version = data[13]; - esc_firmware_subversion = data[14]; - esc_type = data[15]; - break; - } - - const char *esc_type_str = ""; - - switch (version) { - case ESCVersionInfo::KissV1: - case ESCVersionInfo::KissV2: - switch (esc_type) { - case 1: esc_type_str = "KISS8A"; - break; - - case 2: esc_type_str = "KISS16A"; - break; - - case 3: esc_type_str = "KISS24A"; - break; - - case 5: esc_type_str = "KISS Ultralite"; - break; - - default: esc_type_str = "KISS (unknown)"; - break; - } - - break; - - case ESCVersionInfo::BLHELI32: { - char *esc_type_mutable = (char *)(data + 31); - esc_type_mutable[32] = 0; - esc_type_str = esc_type_mutable; - } - break; - } - - PX4_INFO("ESC Type: %s", esc_type_str); - - PX4_INFO("MCU Serial Number: %02x%02x%02x-%02x%02x%02x-%02x%02x%02x-%02x%02x%02x", - data[0], data[1], data[2], data[3], data[4], data[5], data[6], data[7], data[8], - data[9], data[10], data[11]); - - switch (version) { - case ESCVersionInfo::KissV1: - case ESCVersionInfo::KissV2: - PX4_INFO("Firmware version: %d.%d%c", esc_firmware_version / 100, esc_firmware_version % 100, - (char)esc_firmware_subversion); - break; - - case ESCVersionInfo::BLHELI32: - PX4_INFO("Firmware version: %d.%d", esc_firmware_version, esc_firmware_subversion); - break; - } - - if (version == ESCVersionInfo::KissV2 || version == ESCVersionInfo::BLHELI32) { - PX4_INFO("Rotation Direction: %s", data[16] ? "reversed" : "normal"); - PX4_INFO("3D Mode: %s", data[17] ? "on" : "off"); - } - - if (version == ESCVersionInfo::BLHELI32) { - uint8_t setting = data[18]; - - switch (setting) { - case 0: - PX4_INFO("Low voltage Limit: off"); - break; - - case 255: - PX4_INFO("Low voltage Limit: unsupported"); - break; - - default: - PX4_INFO("Low voltage Limit: %d.%01d V", setting / 10, setting % 10); - break; - } - - setting = data[19]; - - switch (setting) { - case 0: - PX4_INFO("Current Limit: off"); - break; - - case 255: - PX4_INFO("Current Limit: unsupported"); - break; - - default: - PX4_INFO("Current Limit: %d A", setting); - break; - } - - for (int i = 0; i < 4; ++i) { - setting = data[i + 20]; - PX4_INFO("LED %d: %s", i, setting ? (setting == 255 ? "unsupported" : "on") : "off"); - } - } + PX4_INFO("Successful ESC frames: %i", _num_successful_responses); + PX4_INFO("Timeouts: %i", _num_timeouts); + PX4_INFO("CRC errors: %i", _num_checksum_errors); } diff --git a/src/drivers/dshot/DShotTelemetry.h b/src/drivers/dshot/DShotTelemetry.h index ccbe7b1ce0..c9593ac152 100644 --- a/src/drivers/dshot/DShotTelemetry.h +++ b/src/drivers/dshot/DShotTelemetry.h @@ -1,6 +1,6 @@ /**************************************************************************** * - * Copyright (c) 2019 PX4 Development Team. All rights reserved. + * Copyright (c) 2026 PX4 Development Team. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -34,90 +34,59 @@ #pragma once #include -#include +#include +#include "DShotCommon.h" +#include "esc/AM32Settings.h" class DShotTelemetry { public: - struct EscData { - hrt_abstime time; - int8_t temperature; ///< [deg C] - int16_t voltage; ///< [0.01V] - int16_t current; ///< [0.01A] - int16_t consumption; ///< [mAh] - int16_t erpm; ///< [100ERPM] - }; - - static constexpr int esc_info_size_blheli32 = 64; - static constexpr int esc_info_size_kiss_v1 = 15; - static constexpr int esc_info_size_kiss_v2 = 21; - static constexpr int max_esc_info_size = esc_info_size_blheli32; - - struct OutputBuffer { - uint8_t buffer[max_esc_info_size]; - int buf_pos{0}; - int motor_index; - }; ~DShotTelemetry(); int init(const char *uart_device, bool swap_rxtx); - - /** - * Read telemetry from the UART (non-blocking) and handle timeouts. - * @param num_motors How many DShot enabled motors - * @return -1 if no update, -2 timeout, >= 0 for the motor index. Use @latestESCData() to get the data. - */ - int update(int num_motors); - - bool redirectActive() const { return _redirect_output != nullptr; } - - /** - * Get the motor index for which telemetry should be requested. - * @return -1 if no request should be made, motor index otherwise - */ - int getRequestMotorIndex(); - - const EscData &latestESCData() const { return _latest_data; } - - /** - * Check whether we are currently expecting to read new data from an ESC - */ - bool expectingData() const { return _current_request_start != 0; } - void printStatus() const; - static void decodeAndPrintEscInfoPacket(const OutputBuffer &buffer); + void startTelemetryRequest(); + bool telemetryResponseFinished(); + + TelemetryStatus parseTelemetryPacket(EscData *esc_data); + + // Attempt to parse a command response. Returns the index of the ESC or -1 on failure. + void parseCommandResponse(); + bool commandResponseFinished(); + bool commandResponseStarted(); + + void setExpectCommandResponse(int motor_index, uint16_t command); + void resetCommandResponse(); + void initSettingsHandlers(ESCType esc_type, uint16_t output_mask); private: - static constexpr int ESC_FRAME_SIZE = 10; + static constexpr int COMMAND_RESPONSE_MAX_SIZE = 49; + static constexpr int TELEMETRY_FRAME_SIZE = 10; + TelemetryStatus decodeTelemetryResponse(uint8_t *buffer, int length, EscData *esc_data); - void requestNextMotor(int num_motors); + device::Serial _uart{}; - /** - * Decode a single byte from an ESC feedback frame - * @param byte - * @param successful_decoding set to true if checksum matches - * @return true if received the expected amount of bytes and the next motor can be requested - */ - bool decodeByte(uint8_t byte, bool &successful_decoding); + // Command response + int _command_response_motor_index{-1}; + uint16_t _command_response_command{0}; + uint8_t _command_response_buffer[COMMAND_RESPONSE_MAX_SIZE]; + int _command_response_position{0}; + hrt_abstime _command_response_start{0}; - static uint8_t crc8(const uint8_t *buf, uint8_t len); - - device::Serial _uart {}; - - uint8_t _frame_buffer[ESC_FRAME_SIZE]; + // Telemetry packet + uint8_t _frame_buffer[TELEMETRY_FRAME_SIZE]; int _frame_position{0}; - - EscData _latest_data; - - int _current_motor_index_request{-1}; - hrt_abstime _current_request_start{0}; - - OutputBuffer *_redirect_output{nullptr}; ///< if set, all read bytes are stored here instead of the internal buffer + hrt_abstime _telemetry_request_start{0}; // statistics int _num_timeouts{0}; int _num_successful_responses{0}; int _num_checksum_errors{0}; + + // Settings + ESCSettingsInterface *_settings_handlers[DSHOT_MAX_MOTORS] = {nullptr}; + ESCType _esc_type{ESCType::Unknown}; + bool _settings_initialized{false}; }; diff --git a/src/drivers/dshot/esc/AM32Settings.cpp b/src/drivers/dshot/esc/AM32Settings.cpp new file mode 100644 index 0000000000..7f67a6ac1a --- /dev/null +++ b/src/drivers/dshot/esc/AM32Settings.cpp @@ -0,0 +1,85 @@ +/**************************************************************************** + * + * Copyright (c) 2026 PX4 Development Team. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name PX4 nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +#include "AM32Settings.h" +#include "../DShotCommon.h" +#include + +static constexpr int RESPONSE_SIZE = EEPROM_SIZE + 1; // 48B data + 1B CRC + +uORB::Publication AM32Settings::_esc_eeprom_read_pub{ORB_ID(esc_eeprom_read)}; + +AM32Settings::AM32Settings(int index) + : _esc_index(index) +{} + +int AM32Settings::getExpectedResponseSize() +{ + return RESPONSE_SIZE; +} + +void AM32Settings::publish_latest() +{ + esc_eeprom_read_s data = {}; + data.timestamp = hrt_absolute_time(); + data.firmware = 1; // ESC_FIRMWARE_AM32 + data.index = _esc_index; + memcpy(data.data, &_eeprom_data, sizeof(_eeprom_data)); + data.length = sizeof(_eeprom_data); + _esc_eeprom_read_pub.publish(data); +} + +bool AM32Settings::decodeInfoResponse(const uint8_t *buf, int size) +{ + if (size != RESPONSE_SIZE) { + return false; + } + + uint8_t checksum = crc8(buf, EEPROM_SIZE); + uint8_t checksum_data = buf[EEPROM_SIZE]; + + if (checksum != checksum_data) { + PX4_WARN("Command Response checksum failed!"); + return false; + } + + PX4_DEBUG("Successfully received AM32 settings from ESC%d", _esc_index + 1); + + // Store data for retrieval later if requested + memcpy(&_eeprom_data, buf, EEPROM_SIZE); + + // Publish data immediately + publish_latest(); + + return true; +} diff --git a/src/drivers/dshot/esc/AM32Settings.h b/src/drivers/dshot/esc/AM32Settings.h new file mode 100644 index 0000000000..c3e8f6f365 --- /dev/null +++ b/src/drivers/dshot/esc/AM32Settings.h @@ -0,0 +1,57 @@ +/**************************************************************************** + * + * Copyright (c) 2026 PX4 Development Team. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name PX4 nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +#pragma once + +#include "ESCSettingsInterface.h" +#include +#include + +static constexpr int EEPROM_SIZE = 48; + +class AM32Settings : public ESCSettingsInterface +{ +public: + AM32Settings(int index); + + int getExpectedResponseSize() override; + bool decodeInfoResponse(const uint8_t *buf, int size) override; + + void publish_latest() override; + +private: + int _esc_index{}; + uint8_t _eeprom_data[EEPROM_SIZE] {}; + + static uORB::Publication _esc_eeprom_read_pub; +}; diff --git a/src/modules/mavlink/mavlink_tests/mavlink_tests.cpp b/src/drivers/dshot/esc/ESCSettingsInterface.h similarity index 78% rename from src/modules/mavlink/mavlink_tests/mavlink_tests.cpp rename to src/drivers/dshot/esc/ESCSettingsInterface.h index 32cba16aff..fe5b6db371 100644 --- a/src/modules/mavlink/mavlink_tests/mavlink_tests.cpp +++ b/src/drivers/dshot/esc/ESCSettingsInterface.h @@ -1,6 +1,6 @@ /**************************************************************************** * - * Copyright (C) 2014 PX4 Development Team. All rights reserved. + * Copyright (c) 2026 PX4 Development Team. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -31,17 +31,24 @@ * ****************************************************************************/ -/** - * @file mavlink_tests.cpp - */ +#pragma once -#include +#include -#include "mavlink_ftp_test.h" +enum class ESCType : uint8_t { + Unknown = 0, + AM32 = 1, +}; -extern "C" __EXPORT int mavlink_tests_main(int argc, char *argv[]); - -int mavlink_tests_main(int argc, char *argv[]) +class ESCSettingsInterface { - return mavlink_ftp_test() ? 0 : -1; -} +public: + virtual ~ESCSettingsInterface() = default; + + virtual bool decodeInfoResponse(const uint8_t *buf, int size) = 0; + virtual int getExpectedResponseSize() = 0; + virtual void publish_latest() { /* no-op */}; + + // TODO: function to read data + // TODO: function to write data +}; diff --git a/src/drivers/dshot/module.yaml b/src/drivers/dshot/module.yaml index d25809f87c..3dda5f4dcf 100644 --- a/src/drivers/dshot/module.yaml +++ b/src/drivers/dshot/module.yaml @@ -8,6 +8,15 @@ serial_config: parameters: - group: DShot definitions: + DSHOT_ESC_TYPE: + description: + short: ESC Type + long: The ESC firmware type + type: enum + values: + 0: Unknown + 1: AM32 + default: 0 DSHOT_MIN: description: short: Minimum DShot Motor Output @@ -33,13 +42,13 @@ parameters: When mixer outputs 1000 or value inside DSHOT 3D deadband, DShot 0 is sent. type: boolean default: 0 - DSHOT_BIDIR_EN: + DSHOT_BIDIR_EDT: description: - short: Enable bidirectional DShot + short: Enable Extended DShot Telemetry long: | - This parameter enables bidirectional DShot which provides RPM feedback. - Note that this requires ESCs that support bidirectional DSHot, e.g. BlHeli32. - This is not the same as DShot telemetry which requires an additional serial connection. + This parameter enables Extended DShot Telemetry which allows transmission of + additional telemetry within the eRPM frame. The EDT data is interleaved with + the eRPM frames at a low rate. type: boolean default: 0 reboot_required: true @@ -63,14 +72,18 @@ parameters: min: 0 max: 1000 default: 1000 - MOT_POLE_COUNT: # only used by dshot so far, so keep it under the dshot group + DSHOT_MOT_POL${i}: description: - short: Number of magnetic poles of the motors + short: Number of magnetic poles of motor ${i} long: | - Specify the number of magnetic poles of the motors. - It is required to compute the RPM value from the eRPM returned with the ESC telemetry. - - Either get the number from the motor spec sheet or count the magnets on the bell of the motor (not the stator magnets). + Number of magnetic poles for motor ${i}. + Required to compute RPM from the eRPM returned by ESC telemetry. + Either get the number from the motor spec sheet or count the magnets + on the bell of the motor (not the stator magnets). Typical motors for 5 inch props have 14 poles. type: int32 default: 14 + min: 2 + max: 400 + num_instances: 12 + instance_start: 1 diff --git a/src/drivers/gnss/septentrio/septentrio.cpp b/src/drivers/gnss/septentrio/septentrio.cpp index 8cd71875e1..bffc940e29 100644 --- a/src/drivers/gnss/septentrio/septentrio.cpp +++ b/src/drivers/gnss/septentrio/septentrio.cpp @@ -437,7 +437,7 @@ SeptentrioDriver *SeptentrioDriver::instantiate(int argc, char *argv[], Instance bool valid_chosen_baud_rate {false}; - for (uint8_t i = 0; i < sizeof(k_supported_baud_rates) / sizeof(k_supported_baud_rates[0]); i++) { + for (size_t i = 0; i < sizeof(k_supported_baud_rates) / sizeof(k_supported_baud_rates[0]); i++) { switch (instance) { case Instance::Main: if (arguments.baud_rate_main == static_cast(k_supported_baud_rates[i])) { diff --git a/src/drivers/gps/CMakeLists.txt b/src/drivers/gps/CMakeLists.txt index 3c3c0cc3e0..6c6660f56d 100644 --- a/src/drivers/gps/CMakeLists.txt +++ b/src/drivers/gps/CMakeLists.txt @@ -53,6 +53,7 @@ px4_add_module( devices/src/crc.cpp MODULE_CONFIG module.yaml + params.yaml DEPENDS git_gps_devices gnss diff --git a/src/drivers/gps/params.c b/src/drivers/gps/params.c deleted file mode 100644 index 4eb8142128..0000000000 --- a/src/drivers/gps/params.c +++ /dev/null @@ -1,383 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2016-2024 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Log GPS communication data - * - * If this is set to 1, all GPS communication data will be published via uORB, - * and written to the log file as gps_dump message. - * - * If this is set to 2, the main GPS is configured to output RTCM data, - * which is then logged as gps_dump and can be used for PPK. - * - * @min 0 - * @max 2 - * @value 0 Disable - * @value 1 Full communication - * @value 2 RTCM output (PPK) - * @group GPS - */ -PARAM_DEFINE_INT32(GPS_DUMP_COMM, 0); - -/** - * u-blox GPS dynamic platform model - * - * u-blox receivers support different dynamic platform models to adjust the navigation engine to - * the expected application environment. - * - * @min 0 - * @max 9 - * @value 2 stationary - * @value 4 automotive - * @value 6 airborne with <1g acceleration - * @value 7 airborne with <2g acceleration - * @value 8 airborne with <4g acceleration - * - * @reboot_required true - * - * @group GPS - */ -PARAM_DEFINE_INT32(GPS_UBX_DYNMODEL, 7); - -/** - * u-blox GPS DGNSS timeout - * - * When set to 0 (default), default DGNSS timeout set by u-blox will be used. - * - * @min 0 - * @max 255 - * @unit s - * - * @reboot_required true - * - * @group GPS - */ -PARAM_DEFINE_INT32(GPS_UBX_DGNSS_TO, 0); - -/** - * u-blox GPS minimum satellite signal level for navigation - * - * When set to 0 (default), default minimum satellite signal level set by u-blox wll be used. - * - * @min 0 - * @max 255 - * @unit dBHz - * - * @reboot_required true - * - * @group GPS - */ -PARAM_DEFINE_INT32(GPS_UBX_MIN_CNO, 0); - -/** - * u-blox GPS minimum elevation for a GNSS satellite to be used in navigation - * - * When set to 0 (default), default minimum elevation set by u-blox will be used. - * - * @min 0 - * @max 127 - * @unit deg - * - * @reboot_required true - * - * @group GPS - */ -PARAM_DEFINE_INT32(GPS_UBX_MIN_ELEV, 0); - -/** - * u-blox GPS output rate - * - * Configure the output rate of u-blox GPS receivers (protocol v27+). - * When set to 0, automatic rate selection is used based on the receiver model. - * Default rates: M9N=8Hz, F9P L1L2=5Hz, F9P L1L5=5Hz, Others=10Hz. - * - * Note: Higher rates reduce satellite count (e.g., >8Hz limits to 16 SVs on M9N). - * Max rates vary by model and RTK mode: F9P L1L2=5-7Hz, F9P L1L5=7-8Hz, X20=25Hz. - * High rates at 115200 baud may cause dropouts. - * - * @min 0 - * @max 25 - * @unit Hz - * @reboot_required true - * @group GPS - */ -PARAM_DEFINE_INT32(GPS_UBX_RATE, 0); - -/** - * Enable sat info (if available) - * - * Enable publication of satellite info (ORB_ID(satellite_info)) if possible. - * Not available on MTK. - * - * @boolean - * @reboot_required true - * @group GPS - */ -PARAM_DEFINE_INT32(GPS_SAT_INFO, 0); - -/** - * u-blox GPS Mode - * - * Select the u-blox configuration setup. Most setups will use the default, including RTK and - * dual GPS without heading. - * - * If rover has RTCM corrections from a static base (or other static correction source) coming in on UART2, then select Mode 5. - * The Heading mode requires 2 F9P devices to be attached. The main GPS will act as rover and output - * heading information, whereas the secondary will act as moving base. - * Modes 1 and 2 require each F9P UART1 to be connected to the Autopilot. In addition, UART2 on the - * F9P units are connected to each other. - * Modes 3 and 4 only require UART1 on each F9P connected to the Autopilot or Can Node. UART RX DMA is required. - * RTK is still possible with this setup. - * Mode 6 is intended for use with a ground control station (not necessarily an RTK correction base). - * - * @min 0 - * @max 1 - * @value 0 Default - * @value 1 Heading (Rover With Moving Base UART1 Connected To Autopilot, UART2 Connected To Moving Base) - * @value 2 Moving Base (UART1 Connected To Autopilot, UART2 Connected To Rover) - * @value 3 Heading (Rover With Moving Base UART1 Connected to Autopilot Or Can Node At 921600) - * @value 4 Moving Base (Moving Base UART1 Connected to Autopilot Or Can Node At 921600) - * @value 5 Rover with Static Base on UART2 (similar to Default, except coming in on UART2) - * @value 6 Ground Control Station (UART2 outputs NMEA) - * - * @reboot_required true - * @group GPS - */ -PARAM_DEFINE_INT32(GPS_UBX_MODE, 0); - - -/** - * u-blox F9P UART2 Baudrate - * - * Select a baudrate for the F9P's UART2 port. - * In GPS_UBX_MODE 1, 2, and 3, the F9P's UART2 port is configured to send/receive RTCM corrections. - * Set this to 57600 if you want to attach a telemetry radio on UART2. - * - * @min 0 - * @unit B/s - * - * @reboot_required true - * @group GPS - */ -PARAM_DEFINE_INT32(GPS_UBX_BAUD2, 230400); - -/** - * u-blox protocol configuration for interfaces - * - * @min 0 - * @max 32 - * @bit 0 Enable I2C input protocol UBX - * @bit 1 Enable I2C input protocol NMEA - * @bit 2 Enable I2C input protocol RTCM3X - * @bit 3 Enable I2C output protocol UBX - * @bit 4 Enable I2C output protocol NMEA - * @bit 5 Enable I2C output protocol RTCM3X - * - * @reboot_required true - * @group GPS - */ -PARAM_DEFINE_INT32(GPS_UBX_CFG_INTF, 0); - -/** - * Enable MSM7 message output for PPK workflow. - * - * @boolean - * @reboot_required true - * @group GPS - */ -PARAM_DEFINE_INT32(GPS_UBX_PPK, 0); - -/** - * u-blox GPS jamming detection high sensitivity mode - * - * Enables or disables the high sensitivity mode for the u-blox jamming detection - * (CFG-SEC-JAMDET_SENSITIVITY_HI). When enabled, the receiver uses a - * more sensitive algorithm to detect jamming. Disabling this may reduce false - * positives in electrically noisy environments. - * - * @boolean - * @reboot_required true - * @group GPS - */ -PARAM_DEFINE_INT32(GPS_UBX_JAM_DET, 1); - -/** - * Wipes the flash config of UBX modules. - * - * Some UBX modules have a FLASH that allows to store persistent configuration that will be loaded on start. - * PX4 does override all configuration parameters it needs in RAM, which takes precedence over the values in FLASH. - * However, configuration parameters that are not overriden by PX4 can still cause unexpected problems during flight. - * To avoid these kind of problems a clean config can be reached by wiping the FLASH on boot. - * - * Note: Currently only supported on UBX. - * - * @reboot_required true - * @group GPS - * @boolean - */ -PARAM_DEFINE_INT32(GPS_CFG_WIPE, 0); - -/** - * Heading/Yaw offset for dual antenna GPS - * - * Heading offset angle for dual antenna GPS setups that support heading estimation. - * - * Set this to 0 if the antennas are parallel to the forward-facing direction - * of the vehicle and the rover (or Unicore primary) antenna is in front. - * - * The offset angle increases clockwise. - * - * Set this to 90 if the rover (or Unicore primary, or Septentrio Mosaic Aux) - * antenna is placed on the right side of the vehicle and the moving base - * antenna is on the left side. - * - * (Note: the Unicore primary antenna is the one connected on the right as seen - * from the top). - * - * @min 0 - * @max 360 - * @unit deg - * @reboot_required true - * @decimal 3 - * - * @group GPS - */ -PARAM_DEFINE_FLOAT(GPS_YAW_OFFSET, 0.f); - -/** - * Protocol for Main GPS - * - * Select the GPS protocol over serial. - * - * Auto-detection will probe all protocols, and thus is a bit slower. - * - * @min 0 - * @max 7 - * @value 0 Auto detect - * @value 1 u-blox - * @value 2 MTK - * @value 3 Ashtech / Trimble - * @value 4 Emlid Reach - * @value 5 Femtomes - * @value 6 NMEA (generic) - * - * @reboot_required true - * @group GPS - */ -PARAM_DEFINE_INT32(GPS_1_PROTOCOL, 1); - -/** - * Protocol for Secondary GPS - * - * Select the GPS protocol over serial. - * - * Auto-detection will probe all protocols, and thus is a bit slower. - * - * @min 0 - * @max 6 - * @value 0 Auto detect - * @value 1 u-blox - * @value 2 MTK - * @value 3 Ashtech / Trimble - * @value 4 Emlid Reach - * @value 5 Femtomes - * @value 6 NMEA (generic) - * - * @reboot_required true - * @group GPS - */ -PARAM_DEFINE_INT32(GPS_2_PROTOCOL, 1); - -/** - * GNSS Systems for Primary GPS (integer bitmask) - * - * This integer bitmask controls the set of GNSS systems used by the receiver. Check your - * receiver's documentation on how many systems are supported to be used in parallel. - * - * Currently this functionality is just implemented for u-blox receivers. - * - * When no bits are set, the receiver's default configuration should be used. - * - * Set bits true to enable: - * 0 : Use GPS (with QZSS) - * 1 : Use SBAS (multiple GPS augmentation systems) - * 2 : Use Galileo - * 3 : Use BeiDou - * 4 : Use GLONASS - * 5 : Use NAVIC - * - * @min 0 - * @max 63 - * @bit 0 GPS (with QZSS) - * @bit 1 SBAS - * @bit 2 Galileo - * @bit 3 BeiDou - * @bit 4 GLONASS - * @bit 5 NAVIC - * - * @reboot_required true - * @group GPS - */ -PARAM_DEFINE_INT32(GPS_1_GNSS, 0); - -/** - * GNSS Systems for Secondary GPS (integer bitmask) - * - * This integer bitmask controls the set of GNSS systems used by the receiver. Check your - * receiver's documentation on how many systems are supported to be used in parallel. - * - * Currently this functionality is just implemented for u-blox receivers. - * - * When no bits are set, the receiver's default configuration should be used. - * - * Set bits true to enable: - * 0 : Use GPS (with QZSS) - * 1 : Use SBAS (multiple GPS augmentation systems) - * 2 : Use Galileo - * 3 : Use BeiDou - * 4 : Use GLONASS - * 5 : Use NAVIC - * - * @min 0 - * @max 63 - * @bit 0 GPS (with QZSS) - * @bit 1 SBAS - * @bit 2 Galileo - * @bit 3 BeiDou - * @bit 4 GLONASS - * @bit 5 NAVIC - * - * @reboot_required true - * @group GPS - */ -PARAM_DEFINE_INT32(GPS_2_GNSS, 0); diff --git a/src/drivers/gps/params.yaml b/src/drivers/gps/params.yaml new file mode 100644 index 0000000000..ec4cc1863a --- /dev/null +++ b/src/drivers/gps/params.yaml @@ -0,0 +1,311 @@ +module_name: gps +parameters: +- group: GPS + definitions: + GPS_DUMP_COMM: + description: + short: Log GPS communication data + long: |- + If this is set to 1, all GPS communication data will be published via uORB, + and written to the log file as gps_dump message. + + If this is set to 2, the main GPS is configured to output RTCM data, + which is then logged as gps_dump and can be used for PPK. + type: enum + values: + 0: Disable + 1: Full communication + 2: RTCM output (PPK) + default: 0 + min: 0 + max: 2 + GPS_UBX_DYNMODEL: + description: + short: u-blox GPS dynamic platform model + long: |- + u-blox receivers support different dynamic platform models to adjust the navigation engine to + the expected application environment. + type: enum + values: + 2: stationary + 4: automotive + 6: airborne with <1g acceleration + 7: airborne with <2g acceleration + 8: airborne with <4g acceleration + default: 7 + min: 0 + max: 9 + reboot_required: true + GPS_UBX_DGNSS_TO: + description: + short: u-blox GPS DGNSS timeout + long: When set to 0 (default), default DGNSS timeout set by u-blox will be + used. + type: int32 + default: 0 + min: 0 + max: 255 + unit: s + reboot_required: true + GPS_UBX_MIN_CNO: + description: + short: u-blox GPS minimum satellite signal level for navigation + long: When set to 0 (default), default minimum satellite signal level set + by u-blox wll be used. + type: int32 + default: 0 + min: 0 + max: 255 + unit: dBHz + reboot_required: true + GPS_UBX_MIN_ELEV: + description: + short: u-blox GPS minimum satellite elevation angle + long: |- + u-blox GPS minimum elevation for a GNSS satellite to be used in navigation + + When set to 0 (default), default minimum elevation set by u-blox will be used. + type: int32 + default: 0 + min: 0 + max: 127 + unit: deg + reboot_required: true + GPS_UBX_RATE: + description: + short: u-blox GPS output rate + long: |- + Configure the output rate of u-blox GPS receivers (protocol v27+). + When set to 0, automatic rate selection is used based on the receiver model. + Default rates: M9N=8Hz, F9P L1L2=5Hz, F9P L1L5=5Hz, Others=10Hz. + + Note: Higher rates reduce satellite count (e.g., >8Hz limits to 16 SVs on M9N). + Max rates vary by model and RTK mode: F9P L1L2=5-7Hz, F9P L1L5=7-8Hz, X20=25Hz. + High rates at 115200 baud may cause dropouts. + type: int32 + default: 0 + min: 0 + max: 25 + unit: Hz + reboot_required: true + GPS_SAT_INFO: + description: + short: Enable sat info (if available) + long: |- + Enable publication of satellite info (ORB_ID(satellite_info)) if possible. + Not available on MTK. + type: boolean + default: 0 + reboot_required: true + GPS_UBX_MODE: + description: + short: u-blox GPS Mode + long: |- + Select the u-blox configuration setup. Most setups will use the default, including RTK and + dual GPS without heading. + + If rover has RTCM corrections from a static base (or other static correction source) coming in on UART2, then select Mode 5. + The Heading mode requires 2 F9P devices to be attached. The main GPS will act as rover and output + heading information, whereas the secondary will act as moving base. + Modes 1 and 2 require each F9P UART1 to be connected to the Autopilot. In addition, UART2 on the + F9P units are connected to each other. + Modes 3 and 4 only require UART1 on each F9P connected to the Autopilot or Can Node. UART RX DMA is required. + RTK is still possible with this setup. + Mode 6 is intended for use with a ground control station (not necessarily an RTK correction base). + type: enum + values: + 0: Default + 1: Heading (Rover With Moving Base UART1 Connected To Autopilot, UART2 Connected + To Moving Base) + 2: Moving Base (UART1 Connected To Autopilot, UART2 Connected To Rover) + 3: Heading (Rover With Moving Base UART1 Connected to Autopilot Or Can Node + At 921600) + 4: Moving Base (Moving Base UART1 Connected to Autopilot Or Can Node At 921600) + 5: Rover with Static Base on UART2 (similar to Default, except coming in on + UART2) + 6: Ground Control Station (UART2 outputs NMEA) + default: 0 + min: 0 + max: 6 + reboot_required: true + GPS_UBX_BAUD2: + description: + short: u-blox F9P UART2 Baudrate + long: |- + Select a baudrate for the F9P's UART2 port. + In GPS_UBX_MODE 1, 2, and 3, the F9P's UART2 port is configured to send/receive RTCM corrections. + Set this to 57600 if you want to attach a telemetry radio on UART2. + type: int32 + default: 230400 + min: 0 + unit: B/s + reboot_required: true + GPS_UBX_CFG_INTF: + description: + short: u-blox protocol configuration for interfaces + type: bitmask + bit: + 0: Enable I2C input protocol UBX + 1: Enable I2C input protocol NMEA + 2: Enable I2C input protocol RTCM3X + 3: Enable I2C output protocol UBX + 4: Enable I2C output protocol NMEA + 5: Enable I2C output protocol RTCM3X + default: 0 + min: 0 + max: 32 + reboot_required: true + GPS_UBX_PPK: + description: + short: Enable MSM7 message output for PPK workflow + type: boolean + default: 0 + reboot_required: true + GPS_UBX_JAM_DET: + description: + short: u-blox GPS jamming detection high sensitivity mode + long: |- + Enables or disables the high sensitivity mode for the u-blox jamming detection + (CFG-SEC-JAMDET_SENSITIVITY_HI). When enabled, the receiver uses a + more sensitive algorithm to detect jamming. Disabling this may reduce false + positives in electrically noisy environments. + type: boolean + default: 1 + reboot_required: true + GPS_CFG_WIPE: + description: + short: Wipes the flash config of UBX modules + long: |- + Some UBX modules have a FLASH that allows to store persistent configuration that will be loaded on start. + PX4 does override all configuration parameters it needs in RAM, which takes precedence over the values in FLASH. + However, configuration parameters that are not overriden by PX4 can still cause unexpected problems during flight. + To avoid these kind of problems a clean config can be reached by wiping the FLASH on boot. + + Note: Currently only supported on UBX. + type: boolean + default: 0 + reboot_required: true + GPS_YAW_OFFSET: + description: + short: Heading/Yaw offset for dual antenna GPS + long: |- + Heading offset angle for dual antenna GPS setups that support heading estimation. + + Set this to 0 if the antennas are parallel to the forward-facing direction + of the vehicle and the rover (or Unicore primary) antenna is in front. + + The offset angle increases clockwise. + + Set this to 90 if the rover (or Unicore primary, or Septentrio Mosaic Aux) + antenna is placed on the right side of the vehicle and the moving base + antenna is on the left side. + + (Note: the Unicore primary antenna is the one connected on the right as seen + from the top). + type: float + default: 0.0 + min: 0 + max: 360 + unit: deg + reboot_required: true + decimal: 3 + GPS_1_PROTOCOL: + description: + short: Protocol for Main GPS + long: |- + Select the GPS protocol over serial. + + Auto-detection will probe all protocols, and thus is a bit slower. + type: enum + values: + 0: Auto detect + 1: u-blox + 2: MTK + 3: Ashtech / Trimble + 4: Emlid Reach + 5: Femtomes + 6: NMEA (generic) + default: 1 + min: 0 + max: 7 + reboot_required: true + GPS_2_PROTOCOL: + description: + short: Protocol for Secondary GPS + long: |- + Select the GPS protocol over serial. + + Auto-detection will probe all protocols, and thus is a bit slower. + type: enum + values: + 0: Auto detect + 1: u-blox + 2: MTK + 3: Ashtech / Trimble + 4: Emlid Reach + 5: Femtomes + 6: NMEA (generic) + default: 1 + min: 0 + max: 6 + reboot_required: true + GPS_1_GNSS: + description: + short: GNSS Systems for Primary GPS (integer bitmask) + long: |- + This integer bitmask controls the set of GNSS systems used by the receiver. Check your + receiver's documentation on how many systems are supported to be used in parallel. + + Currently this functionality is just implemented for u-blox receivers. + + When no bits are set, the receiver's default configuration should be used. + + Set bits true to enable: + 0 : Use GPS (with QZSS) + 1 : Use SBAS (multiple GPS augmentation systems) + 2 : Use Galileo + 3 : Use BeiDou + 4 : Use GLONASS + 5 : Use NAVIC + type: bitmask + bit: + 0: GPS (with QZSS) + 1: SBAS + 2: Galileo + 3: BeiDou + 4: GLONASS + 5: NAVIC + default: 0 + min: 0 + max: 63 + reboot_required: true + GPS_2_GNSS: + description: + short: GNSS Systems for Secondary GPS (integer bitmask) + long: |- + This integer bitmask controls the set of GNSS systems used by the receiver. Check your + receiver's documentation on how many systems are supported to be used in parallel. + + Currently this functionality is just implemented for u-blox receivers. + + When no bits are set, the receiver's default configuration should be used. + + Set bits true to enable: + 0 : Use GPS (with QZSS) + 1 : Use SBAS (multiple GPS augmentation systems) + 2 : Use Galileo + 3 : Use BeiDou + 4 : Use GLONASS + 5 : Use NAVIC + type: bitmask + bit: + 0: GPS (with QZSS) + 1: SBAS + 2: Galileo + 3: BeiDou + 4: GLONASS + 5: NAVIC + default: 0 + min: 0 + max: 63 + reboot_required: true diff --git a/src/drivers/heater/CMakeLists.txt b/src/drivers/heater/CMakeLists.txt index 6f1fe2e249..66450571b2 100644 --- a/src/drivers/heater/CMakeLists.txt +++ b/src/drivers/heater/CMakeLists.txt @@ -1,6 +1,6 @@ ############################################################################ # -# Copyright (c) 2016 PX4 Development Team. All rights reserved. +# Copyright (c) 2015-2026 PX4 Development Team. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -36,4 +36,6 @@ px4_add_module( COMPILE_FLAGS SRCS heater.cpp + MODULE_CONFIG + module.yaml ) diff --git a/src/drivers/heater/heater.cpp b/src/drivers/heater/heater.cpp index f11bc46782..9eb699e4fb 100644 --- a/src/drivers/heater/heater.cpp +++ b/src/drivers/heater/heater.cpp @@ -1,6 +1,6 @@ /**************************************************************************** * - * Copyright (c) 2018-20 PX4 Development Team. All rights reserved. + * Copyright (c) 2018-2026 PX4 Development Team. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -48,47 +48,81 @@ #include #include -ModuleBase::Descriptor Heater::desc{task_spawn, custom_command, print_usage}; - #if defined(BOARD_USES_PX4IO_VERSION) and defined(PX4IO_HEATER_ENABLED) // Heater on some boards is on IO MCU // Use ioctl calls to IO driver to turn heater on/off +// TODO: Multi-instance heater for PX4IO to be implemented # define HEATER_PX4IO #else // Use direct calls to turn GPIO pin on/off # ifndef GPIO_HEATER_OUTPUT # error "To use the heater driver, the board_config.h must define and initialize GPIO_HEATER_OUTPUT" # endif +# if !(HEATER_NUM >=1 && HEATER_NUM <=3) +# error "HEATER_NUM must be defined 1, 2, or 3 in the board_config.h" +# endif +# if HEATER_NUM >= 1 +# ifndef GPIO_HEATER1_OUTPUT +# error "The board_config.h must define every heater's GPIO" +# endif +# endif +# if HEATER_NUM >= 2 +# ifndef GPIO_HEATER2_OUTPUT +# error "The board_config.h must define every heater's GPIO" +# endif +# endif +# if HEATER_NUM == 3 +# ifndef GPIO_HEATER3_OUTPUT +# error "The board_config.h must define every heater's GPIO" +# endif +# endif # define HEATER_GPIO #endif -Heater::Heater() : +Heater *Heater::g_heater[HEATER_MAX_INSTANCES] {}; //! 0-based + +Heater::Heater(uint8_t instance) : + ScheduledWorkItem(heater_instance_name(instance), px4::wq_configurations::lp_default), ModuleParams(nullptr), - ScheduledWorkItem(MODULE_NAME, px4::wq_configurations::lp_default) + _instance(instance) { - _heater_status_pub.advertise(); + initialize_heater_io(); + + char name[32]; + + // Dynamically locate the parameter handle corresponding to the current instance + snprintf(name, sizeof(name), "HEATER%u_IMU_ID", (unsigned)_instance); + _param_handles.imu_id = param_find(name); // + + snprintf(name, sizeof(name), "HEATER%u_TEMP", (unsigned)_instance); + _param_handles.temp = param_find(name); // + + snprintf(name, sizeof(name), "HEATER%u_TEMP_P", (unsigned)_instance); + _param_handles.temp_p = param_find(name); // + + snprintf(name, sizeof(name), "HEATER%u_TEMP_I", (unsigned)_instance); + _param_handles.temp_i = param_find(name); // + + snprintf(name, sizeof(name), "HEATER%u_TEMP_FF", (unsigned)_instance); + _param_handles.temp_ff = param_find(name); // + + _heater_status_pub.advertise(); // + + // Initialization parameter values + update_params(true); } Heater::~Heater() { disable_heater(); -} - -int Heater::custom_command(int argc, char *argv[]) -{ - // Check if the driver is running. - if (!is_running(desc)) { - PX4_INFO("not running"); - return PX4_ERROR; - } - - return print_usage("Unrecognized command."); + ScheduleClear(); } void Heater::disable_heater() { // Reset heater to off state. #ifdef HEATER_PX4IO + // TODO: Multi-instance heater for PX4IO to be implemented if (_io_fd >= 0) { px4_ioctl(_io_fd, PX4IO_HEATER_CONTROL, HEATER_MODE_DISABLED); } @@ -96,7 +130,30 @@ void Heater::disable_heater() #endif #ifdef HEATER_GPIO - px4_arch_configgpio(GPIO_HEATER_OUTPUT); + + switch (_instance) { + case 1 : +#ifdef GPIO_HEATER1_OUTPUT + px4_arch_configgpio(GPIO_HEATER1_OUTPUT); +#endif + break; + + case 2 : +#ifdef GPIO_HEATER2_OUTPUT + px4_arch_configgpio(GPIO_HEATER2_OUTPUT); +#endif + break; + + case 3 : +#ifdef GPIO_HEATER3_OUTPUT + px4_arch_configgpio(GPIO_HEATER3_OUTPUT); +#endif + break; + + default: + break; + } + #endif } @@ -104,6 +161,7 @@ void Heater::initialize_heater_io() { // Initialize heater to off state. #ifdef HEATER_PX4IO + // TODO: Multi-instance heater for PX4IO to be implemented if (_io_fd < 0) { _io_fd = px4_open(IO_HEATER_DEVICE_PATH, O_RDWR); } @@ -115,7 +173,30 @@ void Heater::initialize_heater_io() #endif #ifdef HEATER_GPIO - px4_arch_configgpio(GPIO_HEATER_OUTPUT); + + switch (_instance) { + case 1 : +#ifdef GPIO_HEATER1_OUTPUT + px4_arch_configgpio(GPIO_HEATER1_OUTPUT); +#endif + break; + + case 2 : +#ifdef GPIO_HEATER2_OUTPUT + px4_arch_configgpio(GPIO_HEATER2_OUTPUT); +#endif + break; + + case 3 : +#ifdef GPIO_HEATER3_OUTPUT + px4_arch_configgpio(GPIO_HEATER3_OUTPUT); +#endif + break; + + default: + break; + } + #endif } @@ -123,6 +204,7 @@ void Heater::heater_off() { #ifdef HEATER_PX4IO + // TODO: Multi-instance heater for PX4IO to be implemented if (_io_fd >= 0) { px4_ioctl(_io_fd, PX4IO_HEATER_CONTROL, HEATER_MODE_OFF); } @@ -130,7 +212,33 @@ void Heater::heater_off() #endif #ifdef HEATER_GPIO - HEATER_OUTPUT_EN(false); + + switch (_instance) { + case 1 : +#ifdef GPIO_HEATER1_OUTPUT + HEATER1_OUTPUT_EN(false); + // px4_arch_gpiowrite(GPIO_HEATER1_OUTPUT, false); +#endif + break; + + case 2 : +#ifdef GPIO_HEATER2_OUTPUT + HEATER2_OUTPUT_EN(false); + // px4_arch_gpiowrite(GPIO_HEATER2_OUTPUT, false); +#endif + break; + + case 3 : +#ifdef GPIO_HEATER3_OUTPUT + HEATER3_OUTPUT_EN(false); + // px4_arch_gpiowrite(GPIO_HEATER3_OUTPUT, false); +#endif + break; + + default: + break; + } + #endif } @@ -138,6 +246,7 @@ void Heater::heater_on() { #ifdef HEATER_PX4IO + // TODO: Multi-instance heater for PX4IO to be implemented if (_io_fd >= 0) { px4_ioctl(_io_fd, PX4IO_HEATER_CONTROL, HEATER_MODE_ON); } @@ -145,35 +254,106 @@ void Heater::heater_on() #endif #ifdef HEATER_GPIO - HEATER_OUTPUT_EN(true); + + switch (_instance) { + case 1 : +# ifdef GPIO_HEATER1_OUTPUT + HEATER1_OUTPUT_EN(true); + // px4_arch_gpiowrite(GPIO_HEATER1_OUTPUT, true); +# endif + break; + + case 2 : +# ifdef GPIO_HEATER2_OUTPUT + HEATER2_OUTPUT_EN(true); + // px4_arch_gpiowrite(GPIO_HEATER2_OUTPUT, true); +# endif + break; + + case 3 : +# ifdef GPIO_HEATER3_OUTPUT + HEATER3_OUTPUT_EN(true); + // px4_arch_gpiowrite(GPIO_HEATER3_OUTPUT, true); +# endif + break; + + default: + break; + } + #endif } bool Heater::initialize_topics() { - for (uint8_t i = 0; i < ORB_MULTI_MAX_INSTANCES; i++) { - uORB::SubscriptionData sensor_accel_sub{ORB_ID(sensor_accel), i}; + // Force a single read of the parameters to ensure _params.imu_id is already up to date. + update_params(true); - if (sensor_accel_sub.get().timestamp != 0 && - sensor_accel_sub.get().device_id != 0 && - PX4_ISFINITE(sensor_accel_sub.get().temperature)) { + if (!_heater_initialized) { + PX4_ERR("heater %u: params not initialized", (unsigned)_instance); + return false; + } - // If the correct ID is found, exit the for-loop with _sensor_accel_sub pointing to the correct instance. - if (sensor_accel_sub.get().device_id == (uint32_t)_param_sens_temp_id.get()) { - _sensor_accel_sub.ChangeInstance(i); - _sensor_device_id = sensor_accel_sub.get().device_id; - initialize_heater_io(); - return true; - } + const int32_t target = _params.imu_id; + + // Scan multiple instances of accel, matching device_id or auto-select + int8_t selected_instance = -1; + sensor_accel_s accel{}; + + + for (uint8_t i = 0; i < HEATER_MAX_INSTANCES; i++) { + uORB::Subscription s{ORB_ID(sensor_accel), i}; + + if (!s.advertised()) { + continue; + } + + sensor_accel_s a{}; + + if (!s.copy(&a)) { + continue; + } + + if (target == 0) { + // Select the first available option + selected_instance = i; + accel = a; + break; + } + + if ((uint32_t)target == a.device_id) { + selected_instance = i; + accel = a; + break; } } - return false; + if (selected_instance < 0) { + if (target == 0) { + PX4_ERR("heater %u: no sensor_accel instances available", (unsigned)_instance); + + } else { + PX4_ERR("heater %u: no accel matches device_id=%ld", (unsigned)_instance, (long)target); + } + + return false; + } + + _sensor_device_id = accel.device_id; + + // Switch subscription to this instance + _sensor_accel_sub.ChangeInstance(selected_instance); + PX4_INFO("heater %u bound accel instance %d (device_id=%lu)", + (unsigned)_instance, selected_instance, (unsigned long)_sensor_device_id); + + return true; } + + void Heater::Run() { - if (should_exit()) { + if (_should_exit) { #if defined(HEATER_PX4IO) // must be closed from wq thread @@ -182,7 +362,13 @@ void Heater::Run() } #endif - exit_and_cleanup(desc); + ScheduleClear(); + + // Ensure heating is turned off (avoid leaving it in the ON position). + heater_off(); + + delete Heater::g_heater[_instance - 1]; + Heater::g_heater[_instance - 1] = nullptr; return; } @@ -209,16 +395,16 @@ void Heater::Run() // Update the current IMU sensor temperature if valid. if (PX4_ISFINITE(sensor_accel.temperature)) { - temperature_delta = _param_sens_imu_temp.get() - sensor_accel.temperature; + temperature_delta = _params.temp - sensor_accel.temperature; _temperature_last = sensor_accel.temperature; } - _proportional_value = temperature_delta * _param_sens_imu_temp_p.get(); - _integrator_value += temperature_delta * _param_sens_imu_temp_i.get(); + _proportional_value = temperature_delta * _params.temp_p; + _integrator_value += temperature_delta * _params.temp_i; _integrator_value = math::constrain(_integrator_value, -0.25f, 0.25f); - _controller_time_on_usec = static_cast((_param_sens_imu_temp_ff.get() + _proportional_value + + _controller_time_on_usec = static_cast((_params.temp_ff + _proportional_value + _integrator_value) * static_cast(CONTROLLER_PERIOD_DEFAULT)); _controller_time_on_usec = math::constrain(_controller_time_on_usec, 0, CONTROLLER_PERIOD_DEFAULT); @@ -232,13 +418,11 @@ void Heater::Run() } if (_controller_time_on_usec > 0) { - // Turn the heater on. _heater_on = true; heater_on(); ScheduleDelayed(_controller_time_on_usec); } else { - // Turn the heater off. ScheduleDelayed(CONTROLLER_PERIOD_DEFAULT); } } @@ -252,13 +436,13 @@ void Heater::publish_status() status.device_id = _sensor_device_id; status.heater_on = _heater_on; status.temperature_sensor = _temperature_last; - status.temperature_target = _param_sens_imu_temp.get(); + status.temperature_target = _params.temp; status.temperature_target_met = _temperature_target_met; status.controller_period_usec = CONTROLLER_PERIOD_DEFAULT; status.controller_time_on_usec = _controller_time_on_usec; status.proportional_value = _proportional_value; status.integrator_value = _integrator_value; - status.feed_forward_value = _param_sens_imu_temp_ff.get(); + status.feed_forward_value = _params.temp_ff; #ifdef HEATER_PX4IO status.mode = heater_status_s::MODE_PX4IO; @@ -273,32 +457,135 @@ void Heater::publish_status() int Heater::start() { - // Exit the driver if the sensor ID does not match the desired sensor. - if (_param_sens_temp_id.get() == 0) { - PX4_ERR("Valid SENS_TEMP_ID required"); - request_stop(); - return PX4_ERROR; + update_params(true); + + const int32_t target = _params.imu_id; + + // Disabled instance + if (target < 0) { + PX4_INFO("heater %u disabled (HEATER%u_IMU_ID=%ld)", + (unsigned)_instance, (unsigned)_instance, (long)target); + return PX4_OK; + } + + // Auto-select only allowed for legacy single-heater setups + if ((target == 0) && (HEATER_NUM > 1)) { + PX4_INFO("heater %u disabled (HEATER%u_IMU_ID=0 not allowed when HEATER_NUM>1)", + (unsigned)_instance, (unsigned)_instance); + return PX4_OK; } - update_params(true); ScheduleNow(); return PX4_OK; } -int Heater::task_spawn(int argc, char *argv[]) +void Heater::stop() { - Heater *heater = new Heater(); + _should_exit = true; + heater_off(); + ScheduleNow(); +} - if (!heater) { - PX4_ERR("driver allocation failed"); +int Heater::status(uint8_t instance) +{ + + if (instance > 0 && instance <= HEATER_MAX_INSTANCES) { + if (Heater::is_running_instance(instance)) { + PX4_INFO("instance %u: running", (unsigned)instance); + PX4_INFO("instance %u: IMU ID is %lu", (unsigned)instance, Heater::g_heater[instance - 1]->_sensor_device_id); + PX4_INFO("instance %u: IMU Temperature is %f", (unsigned)instance, (double)Heater::g_heater[instance - 1]->_temperature_last); + PX4_INFO("instance %u: Set Temperature is %f", (unsigned)instance, (double)Heater::g_heater[instance - 1]->_params.temp); + + } + + } else { + for (instance = 1; instance <= HEATER_MAX_INSTANCES; instance++) { + if (Heater::is_running_instance(instance)) { + PX4_INFO("instance %u: running", (unsigned)instance); + PX4_INFO("instance %u: IMU ID is %lu", (unsigned)instance, Heater::g_heater[instance - 1]->_sensor_device_id); + PX4_INFO("instance %u: IMU Temperature is %f", (unsigned)instance, (double)Heater::g_heater[instance - 1]->_temperature_last); + PX4_INFO("instance %u: Set Temperature is %f", (unsigned)instance, (double)Heater::g_heater[instance - 1]->_params.temp); + } + } + } + + return PX4_OK; +} + +const char *Heater::heater_instance_name(uint8_t inst) +{ + switch (inst) { + case 1: return "heater_1"; + + case 2: return "heater_2"; + + case 3: return "heater_3"; + + default: return "heater"; + } +} + + +int Heater::stop_all() +{ + for (uint8_t i = 0; i < HEATER_MAX_INSTANCES; i++) { + if (Heater::g_heater[i]) { + Heater::g_heater[i]->stop(); + } + } + + PX4_INFO("All heater stoped"); + + return PX4_OK; +} + +bool Heater::is_running_instance(uint8_t instance) +{ + if (instance < 1 || instance > HEATER_MAX_INSTANCES) { + return false; + } + + return Heater::g_heater[instance - 1] != nullptr; +} + +bool Heater::is_running_any() +{ + for (uint8_t i = 0; i < HEATER_MAX_INSTANCES; i++) { + if (Heater::g_heater[i] != nullptr) { return true; } + } + + return false; +} + +int Heater::start_instance(uint8_t instance) +{ + if (instance < 1 || instance > HEATER_NUM) { + PX4_ERR("invalid instance %u", (unsigned)instance); return PX4_ERROR; } - desc.object.store(heater); - desc.task_id = task_id_is_work_queue; + if (Heater::is_running_instance(instance)) { + PX4_WARN("heater %u already running", (unsigned)instance); + return PX4_OK; + } - heater->start(); - return 0; + Heater *h = new Heater(instance); + + if (!h) { + PX4_ERR("alloc failed"); + return PX4_ERROR; + } + + int ret = h->start(); + + if (ret != PX4_OK) { + h->stop(); + delete h; + return ret; + } + + Heater::g_heater[instance - 1] = h; + return PX4_OK; } void Heater::update_params(const bool force) @@ -309,10 +596,31 @@ void Heater::update_params(const bool force) _parameter_update_sub.copy(¶m_update); // update parameters from storage - ModuleParams::updateParams(); + if (_param_handles.imu_id != PARAM_INVALID) { + param_get(_param_handles.imu_id, &_params.imu_id); + } + + if (_param_handles.temp != PARAM_INVALID) { + param_get(_param_handles.temp, &_params.temp); + } + + if (_param_handles.temp_p != PARAM_INVALID) { + param_get(_param_handles.temp_p, &_params.temp_p); + } + + if (_param_handles.temp_i != PARAM_INVALID) { + param_get(_param_handles.temp_i, &_params.temp_i); + } + + if (_param_handles.temp_ff != PARAM_INVALID) { + param_get(_param_handles.temp_ff, &_params.temp_ff); + } + + _heater_initialized = true; } } + int Heater::print_usage(const char *reason) { if (reason) { @@ -322,7 +630,7 @@ int Heater::print_usage(const char *reason) PRINT_MODULE_DESCRIPTION( R"DESCR_STR( ### Description -Background process running periodically on the LP work queue to regulate IMU temperature at a setpoint. +Background process running periodically on the INS{i} queue to regulate IMU temperature at a setpoint. This task can be started at boot from the startup scripts by setting SENS_EN_THERMAL or via CLI. )DESCR_STR"); @@ -334,7 +642,65 @@ This task can be started at boot from the startup scripts by setting SENS_EN_THE return 0; } + extern "C" __EXPORT int heater_main(int argc, char *argv[]) { - return ModuleBase::main(Heater::desc, argc, argv); + if (argc < 2) { + PX4_INFO("usage: heater {start|stop|status} [-i N]"); + return PX4_ERROR; + } + + int ch; + int myoptind = 2; + const char *myoptarg = nullptr; + int instance = -1; + while ((ch = px4_getopt(argc, argv, "i:", &myoptind, &myoptarg)) != EOF) { + if (ch == 'i') { + instance = (int)strtol(myoptarg, nullptr, 10); + } + } + + if (!strcmp(argv[1], "start")) { + // Compatibility: Without parameters, only the first one is applied by default. + if (instance > 0) { + return Heater::start_instance((uint8_t)instance); + } else { + PX4_INFO("Heater numbers start from 1, trying to start all Heaters"); + for(uint8_t i = 0; i < HEATER_NUM; i++){ + Heater::start_instance(i + 1); + } + + return PX4_OK; + } + } + + if (!strcmp(argv[1], "stop")) { + + // Compatibility: Without parameters, only the first one is applied by default. + if (instance > 0 && instance <= HEATER_MAX_INSTANCES) { + if (Heater::g_heater[instance - 1]) { + Heater::g_heater[instance - 1]->stop(); + return PX4_OK; + } + return PX4_ERROR; + } else { + return Heater::stop_all(); + } + + + } + + if (!strcmp(argv[1], "status")) { + + if (!Heater::is_running_any()) { + PX4_INFO("not running"); + return PX4_OK; + } + + Heater::status(instance); + return PX4_OK; + } + + PX4_INFO("unknown command"); + return PX4_ERROR; } diff --git a/src/drivers/heater/heater.h b/src/drivers/heater/heater.h index 1a38800a51..16b55a65a9 100644 --- a/src/drivers/heater/heater.h +++ b/src/drivers/heater/heater.h @@ -48,10 +48,12 @@ #include #include #include +#include #include #include #include #include +#include #include @@ -59,25 +61,26 @@ using namespace time_literals; #define CONTROLLER_PERIOD_DEFAULT 10000 #define TEMPERATURE_TARGET_THRESHOLD 2.5f +#define HEATER_MAX_INSTANCES 3 // If changed, also need to change `max_num_config_instances` in module.yaml +#if HEATER_NUM > HEATER_MAX_INSTANCES +#error "HEATER_NUM must less than HEATER_MAX_INSTANCES" +#endif -class Heater : public ModuleBase, public ModuleParams, public px4::ScheduledWorkItem +class Heater : px4::ScheduledWorkItem, public ModuleParams { public: - static Descriptor desc; - - Heater(); + Heater(uint8_t instance); virtual ~Heater(); /** - * @see ModuleBase::custom_command(). - * @brief main Main entry point to the module that should be - * called directly from the module's main method. - * @param argc The input argument count. - * @param argv Pointer to the input argument array. - * @return Returns 0 iff successful, -1 otherwise. + * @brief Initiates the heater driver work queue, starts a new background task, + * and fails if it is already running. + * @return Returns 1 iff start was successful. */ - static int custom_command(int argc, char *argv[]); + int start(); + + void stop(); /** * @see ModuleBase::print_usage(). @@ -86,21 +89,15 @@ public: */ static int print_usage(const char *reason = nullptr); - /** - * @see ModuleBase::task_spawn(). - * @brief Initializes the class in the same context as the work queue - * and starts the background listener. - * @param argv Pointer to the input argument array. - * @return Returns 0 iff successful, -1 otherwise. - */ - static int task_spawn(int argc, char *argv[]); + static bool is_running_instance(uint8_t instance); + static bool is_running_any(); - /** - * @brief Initiates the heater driver work queue, starts a new background task, - * and fails if it is already running. - * @return Returns 1 iff start was successful. - */ - int start(); + static int start_instance(uint8_t instance); + static int stop_all(); + static int status(uint8_t instance); + static const char *heater_instance_name(uint8_t inst); + + static Heater *g_heater[HEATER_MAX_INSTANCES]; private: @@ -149,7 +146,7 @@ private: float _integrator_value = 0.0f; float _proportional_value = 0.0f; - uORB::Publication _heater_status_pub{ORB_ID(heater_status)}; + uORB::PublicationMulti _heater_status_pub{ORB_ID(heater_status)}; uORB::SubscriptionInterval _parameter_update_sub{ORB_ID(parameter_update), 1_s}; @@ -159,11 +156,23 @@ private: float _temperature_last{NAN}; - DEFINE_PARAMETERS( - (ParamFloat) _param_sens_imu_temp_ff, - (ParamFloat) _param_sens_imu_temp_i, - (ParamFloat) _param_sens_imu_temp_p, - (ParamFloat) _param_sens_imu_temp, - (ParamInt) _param_sens_temp_id - ) + const uint8_t _instance; //! 1-based + + volatile bool _should_exit{false}; + struct { + param_t imu_id; + param_t temp; + param_t temp_p; + param_t temp_i; + param_t temp_ff; + } _param_handles; + + struct { + int32_t imu_id; // HEATER_IMU_ID: <0 disable, 0 auto, >0 match device_id + float temp; // target temperature + float temp_p; + float temp_i; + float temp_ff; + } _params; + }; diff --git a/src/drivers/heater/heater_params.c b/src/drivers/heater/heater_params.c deleted file mode 100644 index 151f9f3eaf..0000000000 --- a/src/drivers/heater/heater_params.c +++ /dev/null @@ -1,97 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2018-19 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file heater_params.c - * Heater parameters. - * - * @author Mark Sauder - * @author Alex Klimaj - * @author Jake Dahl - */ - -/** - * Target IMU device ID to regulate temperature. - * - * @category system - * @group Sensors - */ -PARAM_DEFINE_INT32(SENS_TEMP_ID, 0); - -/** - * Target IMU temperature. - * - * @category system - * @group Sensors - * @unit celcius - * @min 0 - * @max 85.0 - * @decimal 3 - */ -PARAM_DEFINE_FLOAT(SENS_IMU_TEMP, 55.0f); - -/** - * IMU heater controller feedforward value. - * - * @category system - * @group Sensors - * @unit % - * @min 0 - * @max 1.0 - * @decimal 3 - */ -PARAM_DEFINE_FLOAT(SENS_IMU_TEMP_FF, 0.05f); - -/** - * IMU heater controller integrator gain value. - * - * @category system - * @group Sensors - * @unit us/C - * @min 0 - * @max 1.0 - * @decimal 3 - */ -PARAM_DEFINE_FLOAT(SENS_IMU_TEMP_I, 0.025f); - -/** - * IMU heater controller proportional gain value. - * - * @category system - * @group Sensors - * @unit us/C - * @min 0 - * @max 2.0 - * @decimal 3 - */ -PARAM_DEFINE_FLOAT(SENS_IMU_TEMP_P, 1.0f); diff --git a/src/drivers/heater/module.yaml b/src/drivers/heater/module.yaml new file mode 100644 index 0000000000..2e072eb02a --- /dev/null +++ b/src/drivers/heater/module.yaml @@ -0,0 +1,90 @@ +__max_num_config_instances: &max_num_config_instances 3 + +module_name: heater + +parameters: + - group: Sensors + definitions: + HEATER${i}_IMU_ID: + description: + short: The ID of the IMU controlled by heater ${i} + long: | + Specifies the sensor device ID (DEVID) that this heater instance controls. + -1 disables this heater instance. + If set to 0, auto-select is only supported when HEATER_NUM == 1. On boards with multiple heater outputs, + a valid DEVID must be configured for each heater to ensure a 1:1 mapping between heater output and IMU. + + + type: int32 + reboot_required: true + num_instances: *max_num_config_instances + instance_start: 1 + default: [0, 0, 0] + + HEATER${i}_TEMP: + description: + short: Target temperature for heater ${i} + long: | + Specify the target stable temperature (in degrees Celsius) for the IMU. + It is generally recommended to set this between 40°C and 60°C, + which must be higher than the maximum ambient temperature. + + type: float + decimal: 3 + reboot_required: true + num_instances: *max_num_config_instances + instance_start: 1 + unit: celcius + min: 0 + max: 85.0 + default: [55.0, 55.0, 55.0] + + HEATER${i}_TEMP_FF: + description: + short: IMU heater controller ${i} feedforward value + long: | + Used to predict the baseline power consumption required to maintain temperature, + helping to reduce adjustment time. + + type: float + unit: '%' + min: 0 + max: 1.0 + decimal: 3 + reboot_required: false + num_instances: *max_num_config_instances + instance_start: 1 + default: [0.05, 0.05, 0.05] + + HEATER${i}_TEMP_I: + description: + short: IMU heater controller ${i} integrator gain value + long: | + Integral gain is used to eliminate steady-state error, + ensuring that the temperature ultimately reaches the setpoint target. + + type: float + unit: us/C + min: 0 + max: 1.0 + decimal: 3 + reboot_required: false + num_instances: *max_num_config_instances + instance_start: 1 + default: [0.025, 0.025, 0.025] + + HEATER${i}_TEMP_P: + description: + short: IMU heater controller ${i} proportional gain value + long: | + The proportional gain determines how quickly the controller responds to temperature deviations. + + type: float + unit: us/C + min: 0 + max: 2.0 + decimal: 3 + reboot_required: false + num_instances: *max_num_config_instances + instance_start: 1 + default: [1.0, 1.0, 1.0] diff --git a/src/drivers/hygrometer/sht3x/CMakeLists.txt b/src/drivers/hygrometer/sht3x/CMakeLists.txt index 2edf899151..545e8c6d2e 100644 --- a/src/drivers/hygrometer/sht3x/CMakeLists.txt +++ b/src/drivers/hygrometer/sht3x/CMakeLists.txt @@ -38,6 +38,8 @@ px4_add_module( SRCS sht3x.cpp sht3x.h + MODULE_CONFIG + sht3x_params.yaml DEPENDS px4_work_queue ) diff --git a/src/drivers/hygrometer/sht3x/sht3x_params.c b/src/drivers/hygrometer/sht3x/sht3x_params.c deleted file mode 100644 index 2d54886f4a..0000000000 --- a/src/drivers/hygrometer/sht3x/sht3x_params.c +++ /dev/null @@ -1,41 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2021 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * SHT3x temperature and hygrometer - * - * @reboot_required true - * @group Sensors - * @boolean - */ -PARAM_DEFINE_INT32(SENS_EN_SHT3X, 0); diff --git a/src/drivers/hygrometer/sht3x/sht3x_params.yaml b/src/drivers/hygrometer/sht3x/sht3x_params.yaml new file mode 100644 index 0000000000..3dc0f83e9f --- /dev/null +++ b/src/drivers/hygrometer/sht3x/sht3x_params.yaml @@ -0,0 +1,10 @@ +module_name: sht3x +parameters: +- group: Sensors + definitions: + SENS_EN_SHT3X: + description: + short: SHT3x temperature and hygrometer + type: boolean + default: 0 + reboot_required: true diff --git a/src/drivers/imu/Kconfig b/src/drivers/imu/Kconfig index ee0978d39c..a50831a232 100644 --- a/src/drivers/imu/Kconfig +++ b/src/drivers/imu/Kconfig @@ -6,6 +6,7 @@ menu "IMU" select DRIVERS_IMU_ANALOG_DEVICES_ADIS16497 select DRIVERS_IMU_ANALOG_DEVICES_ADIS16448 select DRIVERS_IMU_ANALOG_DEVICES_ADIS16470 + select DRIVERS_IMU_ANALOG_DEVICES_ADIS16607 select DRIVERS_IMU_BOSCH_BMI055 select DRIVERS_IMU_BOSCH_BMI088 select DRIVERS_IMU_MURATA_SCH16T diff --git a/src/drivers/imu/analog_devices/adis16448/CMakeLists.txt b/src/drivers/imu/analog_devices/adis16448/CMakeLists.txt index b8f8d690fc..bcc65cff54 100644 --- a/src/drivers/imu/analog_devices/adis16448/CMakeLists.txt +++ b/src/drivers/imu/analog_devices/adis16448/CMakeLists.txt @@ -42,6 +42,8 @@ px4_add_module( ADIS16448.hpp adis16448_main.cpp Analog_Devices_ADIS16448_registers.hpp + MODULE_CONFIG + parameters.yaml DEPENDS drivers_accelerometer drivers_gyroscope diff --git a/src/drivers/imu/analog_devices/adis16448/parameters.c b/src/drivers/imu/analog_devices/adis16448/parameters.c deleted file mode 100644 index 9b33736092..0000000000 --- a/src/drivers/imu/analog_devices/adis16448/parameters.c +++ /dev/null @@ -1,56 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2021 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Analog Devices ADIS16448 IMU (external SPI) - * - * @reboot_required true - * @min 0 - * @max 1 - * @group Sensors - * @value 0 Disabled - * @value 1 Enabled - */ -PARAM_DEFINE_INT32(SENS_EN_ADIS164X, 0); - -/** - * Analog Devices ADIS16448 IMU Orientation(external SPI) - * - * @reboot_required true - * @min 0 - * @max 101 - * @group Sensors - * @value 0 ROTATION_NONE - * @value 4 ROTATION_YAW_180 - */ -PARAM_DEFINE_INT32(SENS_OR_ADIS164X, 0); diff --git a/src/drivers/imu/analog_devices/adis16448/parameters.yaml b/src/drivers/imu/analog_devices/adis16448/parameters.yaml new file mode 100644 index 0000000000..d82fdb49cd --- /dev/null +++ b/src/drivers/imu/analog_devices/adis16448/parameters.yaml @@ -0,0 +1,26 @@ +module_name: adis16448 +parameters: +- group: Sensors + definitions: + SENS_EN_ADIS164X: + description: + short: Analog Devices ADIS16448 IMU (external SPI) + type: enum + values: + 0: Disabled + 1: Enabled + default: 0 + reboot_required: true + min: 0 + max: 1 + SENS_OR_ADIS164X: + description: + short: Analog Devices ADIS16448 IMU Orientation(external SPI) + type: enum + values: + 0: ROTATION_NONE + 4: ROTATION_YAW_180 + default: 0 + reboot_required: true + min: 0 + max: 101 diff --git a/src/drivers/imu/analog_devices/adis16507/CMakeLists.txt b/src/drivers/imu/analog_devices/adis16507/CMakeLists.txt index 8624b8ecdf..f473fa8f88 100644 --- a/src/drivers/imu/analog_devices/adis16507/CMakeLists.txt +++ b/src/drivers/imu/analog_devices/adis16507/CMakeLists.txt @@ -40,6 +40,8 @@ px4_add_module( ADIS16507.hpp adis16507_main.cpp Analog_Devices_ADIS16507_registers.hpp + MODULE_CONFIG + parameters.yaml DEPENDS drivers_accelerometer drivers_gyroscope diff --git a/src/drivers/imu/analog_devices/adis16507/parameters.c b/src/drivers/imu/analog_devices/adis16507/parameters.c deleted file mode 100644 index aa2dcb148d..0000000000 --- a/src/drivers/imu/analog_devices/adis16507/parameters.c +++ /dev/null @@ -1,41 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2021 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Analog Devices ADIS16507 IMU (external SPI) - * - * @group Sensors - * @boolean - * @reboot_required true - */ -PARAM_DEFINE_INT32(SENS_EN_ADIS165X, 0); diff --git a/src/drivers/imu/analog_devices/adis16507/parameters.yaml b/src/drivers/imu/analog_devices/adis16507/parameters.yaml new file mode 100644 index 0000000000..47f9ab880b --- /dev/null +++ b/src/drivers/imu/analog_devices/adis16507/parameters.yaml @@ -0,0 +1,10 @@ +module_name: adis16507 +parameters: +- group: Sensors + definitions: + SENS_EN_ADIS165X: + description: + short: Analog Devices ADIS16507 IMU (external SPI) + type: boolean + default: 0 + reboot_required: true diff --git a/src/drivers/imu/analog_devices/adis16607/ADIS16607.cpp b/src/drivers/imu/analog_devices/adis16607/ADIS16607.cpp new file mode 100644 index 0000000000..205a96409b --- /dev/null +++ b/src/drivers/imu/analog_devices/adis16607/ADIS16607.cpp @@ -0,0 +1,430 @@ +/**************************************************************************** + * + * Copyright (c) 2026 PX4 Development Team. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name PX4 nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +#include "ADIS16607.hpp" +#include + +using namespace time_literals; + +ADIS16607::ADIS16607(const I2CSPIDriverConfig &config) : + SPI(config), + I2CSPIDriver(config), + _drdy_gpio(config.drdy_gpio), + _px4_accel(get_device_id(), config.rotation), + _px4_gyro(get_device_id(), config.rotation) +{ + if (_drdy_gpio != 0) { + _drdy_missed_perf = perf_alloc(PC_COUNT, MODULE_NAME": DRDY missed"); + } +} + +ADIS16607::~ADIS16607() +{ + perf_free(_reset_perf); + perf_free(_bad_transfer_perf); + perf_free(_perf_crc_bad); + perf_free(_drdy_missed_perf); +} + +int ADIS16607::init() +{ + int ret = SPI::init(); + + if (ret != PX4_OK) { + DEVICE_DEBUG("SPI::init failed (%i)", ret); + return ret; + } + + return Reset() ? 0 : -1; +} + +bool ADIS16607::Reset() +{ + _state = STATE::RESET; + DataReadyInterruptDisable(); + ScheduleClear(); + ScheduleNow(); + return true; +} + +void ADIS16607::exit_and_cleanup() +{ + DataReadyInterruptDisable(); + I2CSPIDriverBase::exit_and_cleanup(); +} + +void ADIS16607::print_status() +{ + I2CSPIDriverBase::print_status(); + + perf_print_counter(_reset_perf); + perf_print_counter(_bad_transfer_perf); + perf_print_counter(_perf_crc_bad); + perf_print_counter(_drdy_missed_perf); +} + +int ADIS16607::probe() +{ + // Power-On Start-Up Time 50 ms + if (hrt_absolute_time() < 50_ms) { + PX4_WARN("required Power-On Start-Up Time 50 ms"); + } + + // lock the device to half duplex SPI mode + RegisterWrite(Register::SPI_HALFDUPLEX_KEY, SPI_HALFDUPLEX_KEY_VALUE); + + const uint16_t device_id = RegisterRead(Register::DEV_ID); + + if (device_id != DEVICE_IDENTIFICATION) { + PX4_ERR("unexpected DEV_ID 0x%02x", device_id); + return PX4_ERROR; + } + + return PX4_OK; +} + +void ADIS16607::RunImpl() +{ + const hrt_abstime now = hrt_absolute_time(); + + switch (_state) { + case STATE::RESET: + perf_count(_reset_perf); + RegisterWrite(Register::SOFT_RESET, SOFT_RESET_BIT::RESET); + _reset_timestamp = now; + _failure_count = 0; + _state = STATE::WAIT_FOR_RESET; + ScheduleDelayed(50_ms); // 50 ms Reset Recovery Time + break; + + case STATE::WAIT_FOR_RESET: + // lock the device to half duplex SPI mode + RegisterWrite(Register::SPI_HALFDUPLEX_KEY, SPI_HALFDUPLEX_KEY_VALUE); + // These bits are cleared when read + RegisterRead(Register::DIAG_STAT); + + if (_self_test_passed) { + if ((RegisterRead(Register::DEV_ID) == DEVICE_IDENTIFICATION)) { + // if reset succeeded then configure + _state = STATE::CONFIGURE; + ScheduleNow(); + + } else { + // RESET not complete + if (hrt_elapsed_time(&_reset_timestamp) > 1000_ms) { + PX4_WARN("Reset failed, retrying"); + _state = STATE::RESET; + ScheduleDelayed(100_ms); + + } else { + PX4_DEBUG("Reset not complete, check again in 100 ms"); + ScheduleDelayed(100_ms); + } + } + + } else { + RegisterWrite(Register::MSC_CTRL, MSC_CTRL_BIT::Self_test_1); + _state = STATE::SELF_TEST_CHECK; + ScheduleDelayed(50_ms); // Self Test Time + } + + break; + + case STATE::SELF_TEST_CHECK: { + // read DIAG_STAT to check result + const uint16_t diag_stat = RegisterRead(Register::DIAG_STAT); + + if (diag_stat != 0) { + PX4_ERR("self test failed, resetting. DIAG_STAT: %#X", diag_stat); + _state = STATE::RESET; + ScheduleDelayed(3_s); + + } else { + PX4_DEBUG("self test passed"); + _self_test_passed = true; + _state = STATE::RESET; + ScheduleNow(); + } + } + break; + + case STATE::CONFIGURE: + if (Configure()) { + // if configure succeeded then start reading + _state = STATE::READ; + + if (DataReadyInterruptConfigure()) { + _data_ready_interrupt_enabled = true; + + // backup schedule as a watchdog timeout + ScheduleDelayed(100_ms); + + } else { + _data_ready_interrupt_enabled = false; + ScheduleOnInterval(SAMPLE_INTERVAL_US, SAMPLE_INTERVAL_US); + } + + } else { + // CONFIGURE not complete + if (hrt_elapsed_time(&_reset_timestamp) > 1000_ms) { + PX4_WARN("Configure failed, resetting"); + _state = STATE::RESET; + + } else { + PX4_WARN("Configure failed, retrying"); + } + + ScheduleDelayed(100_ms); + } + + break; + + case STATE::READ: { + hrt_abstime timestamp_sample = now; + + if (_data_ready_interrupt_enabled) { + // scheduled from interrupt if _drdy_timestamp_sample was set as expected + const hrt_abstime drdy_timestamp_sample = _drdy_timestamp_sample.fetch_and(0); + + if ((now - drdy_timestamp_sample) < SAMPLE_INTERVAL_US) { + timestamp_sample = drdy_timestamp_sample; + + } else { + perf_count(_drdy_missed_perf); + } + + // push backup schedule back + ScheduleDelayed(SAMPLE_INTERVAL_US * 2); + } + + bool success = false; + struct BurstRead { + uint16_t cmd; + uint16_t DIAG_STAT; + int16_t X_ACCL_HIGH_OUT; + int16_t X_ACCL_LOW_OUT; + int16_t Y_ACCL_HIGH_OUT; + int16_t Y_ACCL_LOW_OUT; + int16_t Z_ACCL_HIGH_OUT; + int16_t Z_ACCL_LOW_OUT; + int16_t X_GYRO_HIGH_OUT; + int16_t X_GYRO_LOW_OUT; + int16_t Y_GYRO_HIGH_OUT; + int16_t Y_GYRO_LOW_OUT; + int16_t Z_GYRO_HIGH_OUT; + int16_t Z_GYRO_LOW_OUT; + int16_t TEMP_OUT; + uint16_t COUNT; + uint16_t checksum; + } buffer{}; + + // ADIS16607 burst report should be 272 bits + static_assert(sizeof(BurstRead) == (272 / 8), "ADIS16607 report not 272 bits"); + + buffer.cmd = static_cast(Register::DIAG_STAT) | DIR_READ; + + if (transfer((uint8_t *)&buffer, ((uint8_t *)&buffer), sizeof(buffer) / sizeof(uint8_t)) == PX4_OK) { + + // Calculate checksum and compare + uint16_t *checksum_helper = &buffer.DIAG_STAT; + + uint16_t checksum = 0; + + for (int i = 0; i < 15; i++) { + checksum += be16toh(checksum_helper[i]); + } + + if (be16toh(buffer.checksum) != checksum) { + perf_count(_bad_transfer_perf); + perf_count(_perf_crc_bad); + } + + // Check all Status/Error Flag Indicators (DIAG_STAT) + if (be16toh(buffer.DIAG_STAT) != 0) { + perf_count(_bad_transfer_perf); + } + + buffer.TEMP_OUT = (int16_t)be16toh(buffer.TEMP_OUT); + + float temperature = (float)(buffer.TEMP_OUT) * 0.005f + 25.0f; + + _px4_accel.set_temperature(temperature); + _px4_gyro.set_temperature(temperature); + + // sensor's frame is +x forward, +y left, +z up + // flip y & z to publish right handed with z down (x forward, y right, z down) + float accel_x = (be16toh(buffer.X_ACCL_HIGH_OUT) << 16 | be16toh(buffer.X_ACCL_LOW_OUT)) >> 8; + float accel_y = -1 * ((be16toh(buffer.Y_ACCL_HIGH_OUT) << 16 | be16toh(buffer.Y_ACCL_LOW_OUT)) >> 8); + float accel_z = -1 * ((be16toh(buffer.Z_ACCL_HIGH_OUT) << 16 | be16toh(buffer.Z_ACCL_LOW_OUT)) >> 8); + + float gyro_x = (be16toh(buffer.X_GYRO_HIGH_OUT) << 16 | be16toh(buffer.X_GYRO_LOW_OUT)) >> 8; + float gyro_y = -1 * ((be16toh(buffer.Y_GYRO_HIGH_OUT) << 16 | be16toh(buffer.Y_GYRO_LOW_OUT)) >> 8); + float gyro_z = -1 * ((be16toh(buffer.Z_GYRO_HIGH_OUT) << 16 | be16toh(buffer.Z_GYRO_LOW_OUT)) >> 8); + + _px4_accel.update(timestamp_sample, accel_x, accel_y, accel_z); + _px4_gyro.update(timestamp_sample, gyro_x, gyro_y, gyro_z); + + success = true; + + if (_failure_count > 0) { + _failure_count--; + } + + } else { + perf_count(_bad_transfer_perf); + } + + if (!success) { + _failure_count++; + + // full reset if things are failing consistently + if (_failure_count > 10) { + Reset(); + return; + } + } + } + + break; + } +} + +bool ADIS16607::Configure() +{ + // first set and clear all configured register bits + for (const auto ®_cfg : _register_cfg) { + RegisterSetAndClearBits(reg_cfg.reg, reg_cfg.set_bits, reg_cfg.clear_bits); + } + + // now check that all are configured + bool success = true; + + for (const auto ®_cfg : _register_cfg) { + if (!RegisterCheck(reg_cfg)) { + success = false; + } + } + + RegisterWrite(Register::USER_FIFO_CFG, USER_FIFO_CFG_BIT::CLEAR_FIFOB); + + // accel: ±40 g, 200000 LSB/g (24-bit format) + _px4_accel.set_range(40.f * CONSTANTS_ONE_G); + _px4_accel.set_scale(CONSTANTS_ONE_G / 200000.f); // scaling 200000 LSB/g -> m/s^2 per LSB + + // gyro: ±2000 °/sec, 4000 LSB/°/sec (24-bit format) + _px4_gyro.set_range(math::radians(2000.f)); + _px4_gyro.set_scale(math::radians(1.f / 4000.f)); // scaling 4000 LSB/°/sec -> rad/s per LSB + + return success; +} + +int ADIS16607::DataReadyInterruptCallback(int irq, void *context, void *arg) +{ + static_cast(arg)->DataReady(); + return 0; +} + +void ADIS16607::DataReady() +{ + _drdy_timestamp_sample.store(hrt_absolute_time()); + ScheduleNow(); +} + +bool ADIS16607::DataReadyInterruptConfigure() +{ + if (_drdy_gpio == 0) { + return false; + } + + // Setup data ready on falling edge + return px4_arch_gpiosetevent(_drdy_gpio, false, true, false, &DataReadyInterruptCallback, this) == 0; +} + +bool ADIS16607::DataReadyInterruptDisable() +{ + if (_drdy_gpio == 0) { + return false; + } + + return px4_arch_gpiosetevent(_drdy_gpio, false, false, false, nullptr, nullptr) == 0; +} + +bool ADIS16607::RegisterCheck(const register_config_t ®_cfg) +{ + bool success = true; + + const uint16_t reg_value = RegisterRead(reg_cfg.reg); + + if (reg_cfg.set_bits && ((reg_value & reg_cfg.set_bits) != reg_cfg.set_bits)) { + PX4_DEBUG("0x%02hhX: 0x%02hhX (0x%02hhX not set)", (uint8_t)reg_cfg.reg, reg_value, reg_cfg.set_bits); + success = false; + } + + if (reg_cfg.clear_bits && ((reg_value & reg_cfg.clear_bits) != 0)) { + PX4_DEBUG("0x%02hhX: 0x%02hhX (0x%02hhX not cleared)", (uint8_t)reg_cfg.reg, reg_value, reg_cfg.clear_bits); + success = false; + } + + return success; +} + +uint16_t ADIS16607::RegisterRead(Register reg) +{ + uint8_t cmd[4]; + cmd[0] = (static_cast(reg) | DIR_READ); + + transfer(&cmd[0], &cmd[0], 4); + + return (uint16_t)((cmd[2] << 8) | cmd[3]); +} + +void ADIS16607::RegisterWrite(Register reg, uint16_t value) +{ + uint8_t cmd[3]; + cmd[0] = static_cast(reg); + cmd[1] = (value >> 8) & 0xFF; + cmd[2] = value & 0xFF; + + transfer(&cmd[0], nullptr, 3); +} + +void ADIS16607::RegisterSetAndClearBits(Register reg, uint16_t setbits, uint16_t clearbits) +{ + const uint16_t orig_val = RegisterRead(reg); + + uint16_t val = (orig_val & ~clearbits) | setbits; + + if (orig_val != val) { + RegisterWrite(reg, val); + } +} diff --git a/src/drivers/imu/analog_devices/adis16607/ADIS16607.hpp b/src/drivers/imu/analog_devices/adis16607/ADIS16607.hpp new file mode 100644 index 0000000000..6a666d567c --- /dev/null +++ b/src/drivers/imu/analog_devices/adis16607/ADIS16607.hpp @@ -0,0 +1,134 @@ +/**************************************************************************** + * + * Copyright (c) 2026 PX4 Development Team. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name PX4 nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +/** + * @file ADIS16607.hpp + * + * Driver for the Analog Devices ADIS16607 connected via SPI. + * + */ + +#pragma once + +#include "Analog_Devices_ADIS16607_registers.hpp" + +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace Analog_Devices_ADIS16607; + +class ADIS16607 : public device::SPI, public I2CSPIDriver +{ +public: + ADIS16607(const I2CSPIDriverConfig &config); + ~ADIS16607() override; + + static void print_usage(); + + void RunImpl(); + + int init() override; + void print_status() override; + +private: + void exit_and_cleanup() override; + + struct register_config_t { + Register reg; + uint16_t set_bits{0}; + uint16_t clear_bits{0}; + }; + + int probe() override; + + bool Reset(); + + bool Configure(); + + static int DataReadyInterruptCallback(int irq, void *context, void *arg); + void DataReady(); + bool DataReadyInterruptConfigure(); + bool DataReadyInterruptDisable(); + + bool RegisterCheck(const register_config_t ®_cfg); + + uint16_t RegisterRead(Register reg); + void RegisterWrite(Register reg, uint16_t value); + void RegisterSetAndClearBits(Register reg, uint16_t setbits, uint16_t clearbits); + + const spi_drdy_gpio_t _drdy_gpio; + + PX4Accelerometer _px4_accel; + PX4Gyroscope _px4_gyro; + + perf_counter_t _reset_perf{perf_alloc(PC_COUNT, MODULE_NAME": reset")}; + perf_counter_t _bad_transfer_perf{perf_alloc(PC_COUNT, MODULE_NAME": bad transfer")}; + perf_counter_t _perf_crc_bad{perf_counter_t(perf_alloc(PC_COUNT, MODULE_NAME": CRC16 bad"))}; + perf_counter_t _drdy_missed_perf{nullptr}; + + hrt_abstime _reset_timestamp{0}; + int _failure_count{0}; + + px4::atomic _drdy_timestamp_sample{0}; + bool _data_ready_interrupt_enabled{false}; + + bool _self_test_passed{false}; + + enum class STATE : uint8_t { + RESET, + WAIT_FOR_RESET, + SELF_TEST_CHECK, + CONFIGURE, + READ, + } _state{STATE::RESET}; + + register_config_t _register_cfg[3] { + // Register | Set bits, Clear bits + {Register::USER_GPIO_CFG1, USER_GPIO_CFG1_BIT::GPIO3_DR, 0}, + { + Register::USER_DATA_CFG, + USER_DATA_CFG_BIT::WORD_SIZE_32 | USER_DATA_CFG_BIT::TEMPERATURE_EN | USER_DATA_CFG_BIT::DATA_CNTR_EN | + USER_DATA_CFG_BIT::Z_GYRO_EN | USER_DATA_CFG_BIT::Y_GYRO_EN | USER_DATA_CFG_BIT::X_GYRO_EN | + USER_DATA_CFG_BIT::Z_ACCEL_EN | USER_DATA_CFG_BIT::Y_ACCEL_EN | USER_DATA_CFG_BIT::X_ACCEL_EN, + USER_DATA_CFG_BIT::Z_DELTANG_EN | USER_DATA_CFG_BIT::Y_DELTANG_EN | USER_DATA_CFG_BIT::X_DELTANG_EN | + USER_DATA_CFG_BIT::Z_DELTVEL_EN | USER_DATA_CFG_BIT::Y_DELTVEL_EN | USER_DATA_CFG_BIT::X_DELTVEL_EN + }, + {Register::MSC_CTRL, MSC_CTRL_BIT::FILT_BW_500Hz, 0}, + }; +}; diff --git a/src/drivers/imu/analog_devices/adis16607/Analog_Devices_ADIS16607_registers.hpp b/src/drivers/imu/analog_devices/adis16607/Analog_Devices_ADIS16607_registers.hpp new file mode 100644 index 0000000000..aac80952d1 --- /dev/null +++ b/src/drivers/imu/analog_devices/adis16607/Analog_Devices_ADIS16607_registers.hpp @@ -0,0 +1,137 @@ +/**************************************************************************** + * + * Copyright (c) 2026 PX4 Development Team. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name PX4 nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +/** + * @file Analog_Devices_ADIS16607_registers.hpp + * + * Analog Devices ADIS16607 registers. + * + */ + +#pragma once + +#include + +// TODO: move to a central header +static constexpr uint16_t Bit0 = (1 << 0); +static constexpr uint16_t Bit1 = (1 << 1); +static constexpr uint16_t Bit2 = (1 << 2); +static constexpr uint16_t Bit3 = (1 << 3); +static constexpr uint16_t Bit4 = (1 << 4); +static constexpr uint16_t Bit5 = (1 << 5); +static constexpr uint16_t Bit6 = (1 << 6); +static constexpr uint16_t Bit7 = (1 << 7); +static constexpr uint16_t Bit8 = (1 << 8); +static constexpr uint16_t Bit9 = (1 << 9); +static constexpr uint16_t Bit10 = (1 << 10); +static constexpr uint16_t Bit11 = (1 << 11); +static constexpr uint16_t Bit12 = (1 << 12); +static constexpr uint16_t Bit13 = (1 << 13); +static constexpr uint16_t Bit14 = (1 << 14); +static constexpr uint16_t Bit15 = (1 << 15); + +namespace Analog_Devices_ADIS16607 +{ +static constexpr uint32_t SPI_SPEED = 10 * 1000 * 1000; // 10 MHz SPI serial interface +static constexpr uint16_t DIR_READ = 0x80; +static constexpr uint16_t DEVICE_IDENTIFICATION = 0x6000; +static constexpr uint16_t SPI_HALFDUPLEX_KEY_VALUE = 0xB4B4; +static constexpr uint32_t SAMPLE_INTERVAL_US = 125; // 8000 Hz + +enum class Register : uint16_t { + DEV_ID = 0x00, + DIAG_STAT = 0x05, + USER_GPIO_CFG1 = 0x2F, + SPI_HALFDUPLEX_KEY = 0x32, + USER_DATA_CFG = 0x34, + USER_FIFO_CFG = 0x35, + SOFT_RESET = 0x36, + MSC_CTRL = 0x39, +}; + +// DIAG_STAT +enum DIAG_STAT_BIT : uint16_t { + Gyro_CST_fault = Bit15, // The gyro continuous self-test has failed. + Accelerometer_CST_fault = Bit14, // An accelerometer continuous self-test has failed + Gyro_fault = Bit13, // The gyro sensor has been disabled + Accelerometer_overload_or_fault = Bit12, // The accelerometer has been disabled + Power_supplies_fault = Bit11, // Fault in Any of the Power Supplies + SDSP_fault = Bit10, // SDSP Combined Error Status + BL_fault = Bit9, // Bootloader Fault + FW_fault = Bit8, // Firmware Faults. + SYNC_LOST = Bit2, // DPLL Has lost its sync input + DPLL_UnLocked = Bit1, // Status of the DPLL + FIFO_Threshold_Met = Bit0, // FIFO contains at least the desired number of samples +}; + +// USER_GPIO_CFG1 +enum USER_GPIO_CFG1_BIT : uint16_t { + GPIO3_DR = Bit9, // Configure GPIO pins(GPIO3 as DR) +}; + +// USER_DATA_CFG +enum USER_DATA_CFG_BIT : uint16_t { + WORD_SIZE_32 = Bit15, // 32-bit Output Word Length + DATA_CNTR_EN = Bit14, // Enable Output Data Counter + TEMPERATURE_EN = Bit12, // Enable Temperature Sensor + Z_DELTANG_EN = Bit11, + Y_DELTANG_EN = Bit10, + X_DELTANG_EN = Bit9, + Z_DELTVEL_EN = Bit8, + Y_DELTVEL_EN = Bit7, + X_DELTVEL_EN = Bit6, + Z_GYRO_EN = Bit5, + Y_GYRO_EN = Bit4, + X_GYRO_EN = Bit3, + Z_ACCEL_EN = Bit2, + Y_ACCEL_EN = Bit1, + X_ACCEL_EN = Bit0, +}; + +// USER_FIFO_CFG +enum USER_FIFO_CFG_BIT : uint16_t { + CLEAR_FIFOB = Bit15, // Clear the FIFO pointers to reset it +}; + +// SOFT_RESET +enum SOFT_RESET_BIT : uint16_t { + RESET = Bit0, // Trigger soft reset +}; + +// MSC_CTRL +enum MSC_CTRL_BIT : uint16_t { + FILT_BW_500Hz = Bit8, // fc= 500 Hz + Self_test_1 = Bit6, // enable Self-Test mode +}; + +} // namespace Analog_Devices_ADIS16607 diff --git a/src/drivers/imu/analog_devices/adis16607/CMakeLists.txt b/src/drivers/imu/analog_devices/adis16607/CMakeLists.txt new file mode 100644 index 0000000000..a9bfdfc0e1 --- /dev/null +++ b/src/drivers/imu/analog_devices/adis16607/CMakeLists.txt @@ -0,0 +1,47 @@ +############################################################################ +# +# Copyright (c) 2026 PX4 Development Team. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# 3. Neither the name PX4 nor the names of its contributors may be +# used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS +# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED +# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +############################################################################ + +px4_add_module( + MODULE drivers__imu__analog_devices__adis16607 + MAIN adis16607 + COMPILE_FLAGS + SRCS + ADIS16607.cpp + ADIS16607.hpp + adis16607_main.cpp + Analog_Devices_ADIS16607_registers.hpp + DEPENDS + drivers_accelerometer + drivers_gyroscope + px4_work_queue + ) diff --git a/src/drivers/imu/analog_devices/adis16607/Kconfig b/src/drivers/imu/analog_devices/adis16607/Kconfig new file mode 100644 index 0000000000..35b843ad65 --- /dev/null +++ b/src/drivers/imu/analog_devices/adis16607/Kconfig @@ -0,0 +1,5 @@ +menuconfig DRIVERS_IMU_ANALOG_DEVICES_ADIS16607 + bool "ADIS16607" + default n + ---help--- + Enable support for analog_devices ADIS16607 diff --git a/src/modules/mc_pos_control/multicopter_nudging_params.c b/src/drivers/imu/analog_devices/adis16607/adis16607_main.cpp similarity index 57% rename from src/modules/mc_pos_control/multicopter_nudging_params.c rename to src/drivers/imu/analog_devices/adis16607/adis16607_main.cpp index 89f8f9714f..8d68a9d65c 100644 --- a/src/modules/mc_pos_control/multicopter_nudging_params.c +++ b/src/drivers/imu/analog_devices/adis16607/adis16607_main.cpp @@ -1,6 +1,6 @@ /**************************************************************************** * - * Copyright (c) 2023 PX4 Development Team. All rights reserved. + * Copyright (c) 2026 PX4 Development Team. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -31,39 +31,57 @@ * ****************************************************************************/ -/** - * Enable nudging based on user input during autonomous land routine - * - * Using stick input the vehicle can be moved horizontally and yawed. - * The descend speed is amended: - * stick full up - 0 - * stick centered - MPC_LAND_SPEED - * stick full down - 2 * MPC_LAND_SPEED - * - * Manual override during auto modes has to be disabled to use this feature (see COM_RC_OVERRIDE). - * - * @min 0 - * @max 1 - * @value 0 Nudging disabled - * @value 1 Nudging enabled - * @group Multicopter Position Control - */ -PARAM_DEFINE_INT32(MPC_LAND_RC_HELP, 0); +#include "ADIS16607.hpp" -/** - * User assisted landing radius - * - * When nudging is enabled (see MPC_LAND_RC_HELP), this defines the maximum - * allowed horizontal displacement from the original landing point. - * - If inside of the radius, only allow nudging inputs that do not move the vehicle outside of it. - * - If outside of the radius, only allow nudging inputs that move the vehicle back towards it. - * - * Set it to -1 for infinite radius. - * - * @unit m - * @min -1 - * @decimal 0 - * @increment 1 - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(MPC_LAND_RADIUS, -1.0f); +#include +#include + +void ADIS16607::print_usage() +{ + PRINT_MODULE_USAGE_NAME("adis16607", "driver"); + PRINT_MODULE_USAGE_SUBCATEGORY("imu"); + PRINT_MODULE_USAGE_COMMAND("start"); + PRINT_MODULE_USAGE_PARAMS_I2C_SPI_DRIVER(false, true); + PRINT_MODULE_USAGE_PARAM_INT('R', 0, 0, 35, "Rotation", true); + PRINT_MODULE_USAGE_DEFAULT_COMMANDS(); +} + +extern "C" int adis16607_main(int argc, char *argv[]) +{ + int ch; + using ThisDriver = ADIS16607; + BusCLIArguments cli{false, true}; + cli.default_spi_frequency = SPI_SPEED; + + while ((ch = cli.getOpt(argc, argv, "R:")) != EOF) { + switch (ch) { + case 'R': + cli.rotation = (enum Rotation)atoi(cli.optArg()); + break; + } + } + + const char *verb = cli.optArg(); + + if (!verb) { + ThisDriver::print_usage(); + return -1; + } + + BusInstanceIterator iterator(MODULE_NAME, cli, DRV_IMU_DEVTYPE_ADIS16607); + + if (!strcmp(verb, "start")) { + return ThisDriver::module_start(cli, iterator); + } + + if (!strcmp(verb, "stop")) { + return ThisDriver::module_stop(iterator); + } + + if (!strcmp(verb, "status")) { + return ThisDriver::module_status(iterator); + } + + ThisDriver::print_usage(); + return -1; +} diff --git a/src/drivers/imu/invensense/icm20649/ICM20649.cpp b/src/drivers/imu/invensense/icm20649/ICM20649.cpp index 77c4012c41..8398c8caf4 100644 --- a/src/drivers/imu/invensense/icm20649/ICM20649.cpp +++ b/src/drivers/imu/invensense/icm20649/ICM20649.cpp @@ -108,23 +108,18 @@ void ICM20649::print_status() int ICM20649::probe() { for (int i = 0; i < 3; i++) { + // force bank 0: the actual register bank after a soft reset is unknown, + // but _last_register_bank is default-initialized to 0, so RegisterRead + // would otherwise skip the bank select and read from the wrong bank + SelectRegisterBank(REG_BANK_SEL_BIT::USER_BANK_0, true); + uint8_t whoami = RegisterRead(Register::BANK_0::WHO_AM_I); if (whoami == WHOAMI) { return PX4_OK; - - } else { - DEVICE_DEBUG("unexpected WHO_AM_I 0x%02x", whoami); - - uint8_t reg_bank_sel = RegisterRead(Register::BANK_0::REG_BANK_SEL); - int bank = reg_bank_sel >> 4; - - if (bank >= 1 && bank <= 3) { - DEVICE_DEBUG("incorrect register bank for WHO_AM_I REG_BANK_SEL:0x%02x, bank:%d", reg_bank_sel, bank); - // force bank selection and retry - SelectRegisterBank(REG_BANK_SEL_BIT::USER_BANK_0, true); - } } + + DEVICE_DEBUG("unexpected WHO_AM_I 0x%02x", whoami); } return PX4_ERROR; diff --git a/src/drivers/imu/invensense/icm20948/ICM20948.cpp b/src/drivers/imu/invensense/icm20948/ICM20948.cpp index 2031e62b89..8de53a2c5e 100644 --- a/src/drivers/imu/invensense/icm20948/ICM20948.cpp +++ b/src/drivers/imu/invensense/icm20948/ICM20948.cpp @@ -137,23 +137,18 @@ void ICM20948::print_status() int ICM20948::probe() { for (int i = 0; i < 3; i++) { + // force bank 0: the actual register bank after a soft reset is unknown, + // but _last_register_bank is default-initialized to 0, so RegisterRead + // would otherwise skip the bank select and read from the wrong bank + SelectRegisterBank(REG_BANK_SEL_BIT::USER_BANK_0, true); + uint8_t whoami = RegisterRead(Register::BANK_0::WHO_AM_I); if (whoami == WHOAMI) { return PX4_OK; - - } else { - DEVICE_DEBUG("unexpected WHO_AM_I 0x%02x", whoami); - - uint8_t reg_bank_sel = RegisterRead(Register::BANK_0::REG_BANK_SEL); - int bank = reg_bank_sel >> 4; - - if (bank >= 1 && bank <= 3) { - DEVICE_DEBUG("incorrect register bank for WHO_AM_I REG_BANK_SEL:0x%02x, bank:%d", reg_bank_sel, bank); - // force bank selection and retry - SelectRegisterBank(REG_BANK_SEL_BIT::USER_BANK_0, true); - } } + + DEVICE_DEBUG("unexpected WHO_AM_I 0x%02x", whoami); } return PX4_ERROR; diff --git a/src/drivers/imu/invensense/icm20948/ICM20948_I2C_Passthrough.cpp b/src/drivers/imu/invensense/icm20948/ICM20948_I2C_Passthrough.cpp index 82573d48c1..51e8792cc5 100644 --- a/src/drivers/imu/invensense/icm20948/ICM20948_I2C_Passthrough.cpp +++ b/src/drivers/imu/invensense/icm20948/ICM20948_I2C_Passthrough.cpp @@ -88,24 +88,18 @@ int ICM20948_I2C_Passthrough::probe() { // 3 retries for (int i = 0; i < 3; i++) { + // force bank 0: the actual register bank after a soft reset is unknown, + // but _last_register_bank is default-initialized to 0, so RegisterRead + // would otherwise skip the bank select and read from the wrong bank + SelectRegisterBank(REG_BANK_SEL_BIT::USER_BANK_0, true); const uint8_t WHO_AM_I = RegisterRead(Register::BANK_0::WHO_AM_I); if (WHO_AM_I == WHOAMI) { return PX4_OK; - - } else { - DEVICE_DEBUG("unexpected WHO_AM_I 0x%02x", WHO_AM_I); - - uint8_t reg_bank_sel = RegisterRead(Register::BANK_0::REG_BANK_SEL); - int bank = reg_bank_sel >> 4; - - if (bank >= 1 && bank <= 3) { - DEVICE_DEBUG("incorrect register bank for WHO_AM_I REG_BANK_SEL:0x%02x, bank:%d", reg_bank_sel, bank); - // force bank selection and retry - SelectRegisterBank(REG_BANK_SEL_BIT::USER_BANK_0, true); - } } + + DEVICE_DEBUG("unexpected WHO_AM_I 0x%02x", WHO_AM_I); } return PX4_ERROR; diff --git a/src/drivers/imu/invensense/icm40609d/ICM40609D.cpp b/src/drivers/imu/invensense/icm40609d/ICM40609D.cpp index 28fce0691c..d9a9b0da5f 100644 --- a/src/drivers/imu/invensense/icm40609d/ICM40609D.cpp +++ b/src/drivers/imu/invensense/icm40609d/ICM40609D.cpp @@ -108,23 +108,18 @@ void ICM40609D::print_status() int ICM40609D::probe() { for (int i = 0; i < 3; i++) { + // force bank 0: the actual register bank after a soft reset is unknown, + // but _last_register_bank is default-initialized to 0, so RegisterRead + // would otherwise skip the bank select and read from the wrong bank + SelectRegisterBank(REG_BANK_SEL_BIT::USER_BANK_0, true); + uint8_t whoami = RegisterRead(Register::BANK_0::WHO_AM_I); if (whoami == WHOAMI) { return PX4_OK; - - } else { - DEVICE_DEBUG("unexpected WHO_AM_I 0x%02x", whoami); - - uint8_t reg_bank_sel = RegisterRead(Register::BANK_0::REG_BANK_SEL); - int bank = reg_bank_sel >> 4; - - if (bank >= 1 && bank <= 3) { - DEVICE_DEBUG("incorrect register bank for WHO_AM_I REG_BANK_SEL:0x%02x, bank:%d", reg_bank_sel, bank); - // force bank selection and retry - SelectRegisterBank(REG_BANK_SEL_BIT::USER_BANK_0, true); - } } + + DEVICE_DEBUG("unexpected WHO_AM_I 0x%02x", whoami); } return PX4_ERROR; diff --git a/src/drivers/imu/invensense/icm42605/ICM42605.cpp b/src/drivers/imu/invensense/icm42605/ICM42605.cpp index e805382194..4e7b980f85 100644 --- a/src/drivers/imu/invensense/icm42605/ICM42605.cpp +++ b/src/drivers/imu/invensense/icm42605/ICM42605.cpp @@ -108,23 +108,18 @@ void ICM42605::print_status() int ICM42605::probe() { for (int i = 0; i < 3; i++) { + // force bank 0: the actual register bank after a soft reset is unknown, + // but _last_register_bank is default-initialized to 0, so RegisterRead + // would otherwise skip the bank select and read from the wrong bank + SelectRegisterBank(REG_BANK_SEL_BIT::USER_BANK_0, true); + uint8_t whoami = RegisterRead(Register::BANK_0::WHO_AM_I); if (whoami == WHOAMI) { return PX4_OK; - - } else { - DEVICE_DEBUG("unexpected WHO_AM_I 0x%02x", whoami); - - uint8_t reg_bank_sel = RegisterRead(Register::BANK_0::REG_BANK_SEL); - int bank = reg_bank_sel >> 4; - - if (bank >= 1 && bank <= 3) { - DEVICE_DEBUG("incorrect register bank for WHO_AM_I REG_BANK_SEL:0x%02x, bank:%d", reg_bank_sel, bank); - // force bank selection and retry - SelectRegisterBank(REG_BANK_SEL_BIT::USER_BANK_0, true); - } } + + DEVICE_DEBUG("unexpected WHO_AM_I 0x%02x", whoami); } return PX4_ERROR; diff --git a/src/drivers/imu/invensense/icm42688p/ICM42688P.cpp b/src/drivers/imu/invensense/icm42688p/ICM42688P.cpp index 382bd74fb3..4fef164792 100644 --- a/src/drivers/imu/invensense/icm42688p/ICM42688P.cpp +++ b/src/drivers/imu/invensense/icm42688p/ICM42688P.cpp @@ -125,24 +125,19 @@ void ICM42688P::print_status() int ICM42688P::probe() { for (int i = 0; i < 3; i++) { + // force bank 0: the actual register bank after a soft reset is unknown, + // but _last_register_bank is default-initialized to 0, so RegisterRead + // would otherwise skip the bank select and read from the wrong bank + SelectRegisterBank(REG_BANK_SEL_BIT::BANK_SEL_0, true); + uint8_t whoami = RegisterRead(Register::BANK_0::WHO_AM_I); uint8_t expected_whoami = isICM686 ? WHOAMI686 : WHOAMI; if (whoami == expected_whoami) { return PX4_OK; - - } else { - DEVICE_DEBUG("unexpected WHO_AM_I 0x%02x", whoami); - - uint8_t reg_bank_sel = RegisterRead(Register::BANK_0::REG_BANK_SEL); - int bank = reg_bank_sel >> 4; - - if (bank >= 1 && bank <= 3) { - DEVICE_DEBUG("incorrect register bank for WHO_AM_I REG_BANK_SEL:0x%02x, bank:%d", reg_bank_sel, bank); - // force bank selection and retry - SelectRegisterBank(REG_BANK_SEL_BIT::BANK_SEL_0, true); - } } + + DEVICE_DEBUG("unexpected WHO_AM_I 0x%02x", whoami); } return PX4_ERROR; diff --git a/src/drivers/imu/invensense/iim42652/IIM42652.cpp b/src/drivers/imu/invensense/iim42652/IIM42652.cpp index afc6e551b7..cedd6bfe44 100644 --- a/src/drivers/imu/invensense/iim42652/IIM42652.cpp +++ b/src/drivers/imu/invensense/iim42652/IIM42652.cpp @@ -123,23 +123,18 @@ void IIM42652::print_status() int IIM42652::probe() { for (int i = 0; i < 3; i++) { + // force bank 0: the actual register bank after a soft reset is unknown, + // but _last_register_bank is default-initialized to 0, so RegisterRead + // would otherwise skip the bank select and read from the wrong bank + SelectRegisterBank(REG_BANK_SEL_BIT::BANK_SEL_0, true); + uint8_t whoami = RegisterRead(Register::BANK_0::WHO_AM_I); if (whoami == WHOAMI) { return PX4_OK; - - } else { - DEVICE_DEBUG("unexpected WHO_AM_I 0x%02x", whoami); - - uint8_t reg_bank_sel = RegisterRead(Register::BANK_0::REG_BANK_SEL); - int bank = reg_bank_sel >> 4; - - if (bank >= 1 && bank <= 3) { - DEVICE_DEBUG("incorrect register bank for WHO_AM_I REG_BANK_SEL:0x%02x, bank:%d", reg_bank_sel, bank); - // force bank selection and retry - SelectRegisterBank(REG_BANK_SEL_BIT::BANK_SEL_0, true); - } } + + DEVICE_DEBUG("unexpected WHO_AM_I 0x%02x", whoami); } return PX4_ERROR; diff --git a/src/drivers/imu/invensense/iim42653/IIM42653.cpp b/src/drivers/imu/invensense/iim42653/IIM42653.cpp index 4d5c2f6db8..d25f37fef1 100644 --- a/src/drivers/imu/invensense/iim42653/IIM42653.cpp +++ b/src/drivers/imu/invensense/iim42653/IIM42653.cpp @@ -123,23 +123,18 @@ void IIM42653::print_status() int IIM42653::probe() { for (int i = 0; i < 3; i++) { + // force bank 0: the actual register bank after a soft reset is unknown, + // but _last_register_bank is default-initialized to 0, so RegisterRead + // would otherwise skip the bank select and read from the wrong bank + SelectRegisterBank(REG_BANK_SEL_BIT::BANK_SEL_0, true); + uint8_t whoami = RegisterRead(Register::BANK_0::WHO_AM_I); if (whoami == WHOAMI) { return PX4_OK; - - } else { - DEVICE_DEBUG("unexpected WHO_AM_I 0x%02x", whoami); - - uint8_t reg_bank_sel = RegisterRead(Register::BANK_0::REG_BANK_SEL); - int bank = reg_bank_sel >> 4; - - if (bank >= 1 && bank <= 3) { - DEVICE_DEBUG("incorrect register bank for WHO_AM_I REG_BANK_SEL:0x%02x, bank:%d", reg_bank_sel, bank); - // force bank selection and retry - SelectRegisterBank(REG_BANK_SEL_BIT::BANK_SEL_0, true); - } } + + DEVICE_DEBUG("unexpected WHO_AM_I 0x%02x", whoami); } return PX4_ERROR; diff --git a/src/drivers/imu/murata/sch16t/CMakeLists.txt b/src/drivers/imu/murata/sch16t/CMakeLists.txt index 73b90a12fb..af54d7d06d 100644 --- a/src/drivers/imu/murata/sch16t/CMakeLists.txt +++ b/src/drivers/imu/murata/sch16t/CMakeLists.txt @@ -40,6 +40,8 @@ px4_add_module( SCH16T.hpp sch16t_main.cpp Murata_SCH16T_registers.hpp + MODULE_CONFIG + parameters.yaml DEPENDS drivers_accelerometer drivers_gyroscope diff --git a/src/drivers/imu/murata/sch16t/parameters.c b/src/drivers/imu/murata/sch16t/parameters.c deleted file mode 100644 index 85e6728f64..0000000000 --- a/src/drivers/imu/murata/sch16t/parameters.c +++ /dev/null @@ -1,90 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2024 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Murata SCH16T IMU (external SPI) - * - * @reboot_required true - * @min 0 - * @max 1 - * @group Sensors - * @value 0 Disabled - * @value 1 Enabled - */ -PARAM_DEFINE_INT32(SENS_EN_SCH16T, 0); - -/** - * Gyro filter settings - * - * @value 0 13 Hz - * @value 1 30 Hz - * @value 2 68 Hz - * @value 3 235 Hz - * @value 4 280 Hz - * @value 5 370 Hz - * @value 6 No filter - * - * @reboot_required true - * - */ -PARAM_DEFINE_INT32(SCH16T_GYRO_FILT, 2); - -/** - * Accel filter settings - * - * @value 0 13 Hz - * @value 1 30 Hz - * @value 2 68 Hz - * @value 3 235 Hz - * @value 4 280 Hz - * @value 5 370 Hz - * @value 6 No filter - * - * @reboot_required true - * - */ -PARAM_DEFINE_INT32(SCH16T_ACC_FILT, 6); - -/** - * Gyro and Accel decimation settings - * - * @value 0 None - * @value 1 5900 Hz - * @value 2 2950 Hz - * @value 3 1475 Hz - * @value 4 738 Hz - * - * @reboot_required true - * - */ -PARAM_DEFINE_INT32(SCH16T_DECIM, 4); diff --git a/src/drivers/imu/murata/sch16t/parameters.yaml b/src/drivers/imu/murata/sch16t/parameters.yaml new file mode 100644 index 0000000000..4c4dec25dd --- /dev/null +++ b/src/drivers/imu/murata/sch16t/parameters.yaml @@ -0,0 +1,57 @@ +module_name: sch16t +parameters: +- group: Sensors + definitions: + SENS_EN_SCH16T: + description: + short: Murata SCH16T IMU (external SPI) + type: enum + values: + 0: Disabled + 1: Enabled + default: 0 + reboot_required: true + min: 0 + max: 1 +- group: Miscellaneous + definitions: + SCH16T_GYRO_FILT: + description: + short: Gyro filter settings + type: enum + values: + 0: 13 Hz + 1: 30 Hz + 2: 68 Hz + 3: 235 Hz + 4: 280 Hz + 5: 370 Hz + 6: No filter + default: 2 + reboot_required: true + SCH16T_ACC_FILT: + description: + short: Accel filter settings + type: enum + values: + 0: 13 Hz + 1: 30 Hz + 2: 68 Hz + 3: 235 Hz + 4: 280 Hz + 5: 370 Hz + 6: No filter + default: 6 + reboot_required: true + SCH16T_DECIM: + description: + short: Gyro and Accel decimation settings + type: enum + values: + 0: None + 1: 5900 Hz + 2: 2950 Hz + 3: 1475 Hz + 4: 738 Hz + default: 4 + reboot_required: true diff --git a/src/drivers/imu/st/lsm6dsv/CMakeLists.txt b/src/drivers/imu/st/lsm6dsv/CMakeLists.txt new file mode 100644 index 0000000000..d28b39b19c --- /dev/null +++ b/src/drivers/imu/st/lsm6dsv/CMakeLists.txt @@ -0,0 +1,47 @@ +############################################################################ +# +# Copyright (c) 2024-2026 PX4 Development Team. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# 3. Neither the name PX4 nor the names of its contributors may be +# used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS +# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED +# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +############################################################################ + +px4_add_module( + MODULE drivers__imu__st__lsm6dsv + MAIN lsm6dsv + COMPILE_FLAGS + SRCS + LSM6DSV.cpp + LSM6DSV.hpp + lsm6dsv_main.cpp + ST_LSM6DSV_Registers.hpp + DEPENDS + drivers_accelerometer + drivers_gyroscope + px4_work_queue + ) diff --git a/src/drivers/imu/st/lsm6dsv/Kconfig b/src/drivers/imu/st/lsm6dsv/Kconfig new file mode 100644 index 0000000000..ca691463e4 --- /dev/null +++ b/src/drivers/imu/st/lsm6dsv/Kconfig @@ -0,0 +1,5 @@ +menuconfig DRIVERS_IMU_ST_LSM6DSV + bool "lsm6dsv" + default n + ---help--- + Enable support for lsm6dsv diff --git a/src/drivers/imu/st/lsm6dsv/LSM6DSV.cpp b/src/drivers/imu/st/lsm6dsv/LSM6DSV.cpp new file mode 100644 index 0000000000..37f2d9a3c6 --- /dev/null +++ b/src/drivers/imu/st/lsm6dsv/LSM6DSV.cpp @@ -0,0 +1,539 @@ +/**************************************************************************** + * + * Copyright (c) 2024-2026 PX4 Development Team. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name PX4 nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +#include "LSM6DSV.hpp" + +using namespace time_literals; + +static constexpr int16_t combine(uint8_t msb, uint8_t lsb) +{ + return (msb << 8u) | lsb; +} + +LSM6DSV::LSM6DSV(const I2CSPIDriverConfig &config) : + SPI(config), + I2CSPIDriver(config), + _drdy_gpio(config.drdy_gpio), + _px4_accel(get_device_id(), config.rotation), + _px4_gyro(get_device_id(), config.rotation) +{ + if (config.drdy_gpio != 0) { + _drdy_missed_perf = perf_alloc(PC_COUNT, MODULE_NAME": DRDY missed"); + } + + ConfigureSampleRate(_px4_gyro.get_max_rate_hz()); +} + +LSM6DSV::~LSM6DSV() +{ + perf_free(_bad_register_perf); + perf_free(_bad_transfer_perf); + perf_free(_fifo_empty_perf); + perf_free(_fifo_overflow_perf); + perf_free(_fifo_reset_perf); + perf_free(_drdy_missed_perf); +} + +int LSM6DSV::init() +{ + int ret = SPI::init(); + + if (ret != PX4_OK) { + DEVICE_DEBUG("SPI::init failed (%i)", ret); + return ret; + } + + return Reset() ? 0 : -1; +} + +bool LSM6DSV::Reset() +{ + DataReadyInterruptDisable(); + _state = STATE::RESET; + ScheduleClear(); + ScheduleNow(); + return true; +} + +void LSM6DSV::exit_and_cleanup() +{ + DataReadyInterruptDisable(); + I2CSPIDriverBase::exit_and_cleanup(); +} + +void LSM6DSV::print_status() +{ + I2CSPIDriverBase::print_status(); + + PX4_INFO("FIFO empty interval: %d us (%.1f Hz), %ld samples per cycle", + _fifo_empty_interval_us, 1e6 / _fifo_empty_interval_us, (long)_fifo_gyro_samples); + PX4_INFO("Sensor ODR: %u Hz (HAODR mode1), FIFO sample dt: %.0f us", + (unsigned)GYRO_ODR, (double)FIFO_SAMPLE_DT); + + perf_print_counter(_bad_register_perf); + perf_print_counter(_bad_transfer_perf); + perf_print_counter(_fifo_empty_perf); + perf_print_counter(_fifo_overflow_perf); + perf_print_counter(_fifo_reset_perf); + perf_print_counter(_drdy_missed_perf); +} + +int LSM6DSV::probe() +{ + const uint8_t whoami = RegisterRead(Register::WHO_AM_I); + + if (whoami != WHO_AM_I_ID) { + DEVICE_DEBUG("unexpected WHO_AM_I 0x%02x", whoami); + return PX4_ERROR; + } + + return PX4_OK; +} + +void LSM6DSV::RunImpl() +{ + const hrt_abstime now = hrt_absolute_time(); + + switch (_state) { + case STATE::RESET: + // Software reset + RegisterWrite(Register::CTRL3, CTRL3_BIT::SW_RESET); + _reset_timestamp = now; + _failure_count = 0; + _state = STATE::WAIT_FOR_RESET; + ScheduleDelayed(100_ms); + break; + + case STATE::WAIT_FOR_RESET: + if (RegisterRead(Register::WHO_AM_I) == WHO_AM_I_ID) { + // Set IF_INC immediately to enable multi-byte reads + RegisterWrite(Register::CTRL3, CTRL3_BIT::IF_INC | CTRL3_BIT::BDU); + + _state = STATE::CONFIGURE; + ScheduleDelayed(10_ms); + + } else { + if (hrt_elapsed_time(&_reset_timestamp) > 1000_ms) { + PX4_DEBUG("Reset failed, retrying"); + _state = STATE::RESET; + ScheduleDelayed(100_ms); + + } else { + PX4_DEBUG("Reset not complete, check again in 10 ms"); + ScheduleDelayed(10_ms); + } + } + + break; + + case STATE::CONFIGURE: + if (Configure()) { + _state = STATE::FIFO_RESET; + ScheduleDelayed(1_ms); + + } else { + if (hrt_elapsed_time(&_reset_timestamp) > 1000_ms) { + PX4_DEBUG("Configure failed, resetting"); + _state = STATE::RESET; + + } else { + PX4_DEBUG("Configure failed, retrying"); + } + + ScheduleDelayed(100_ms); + } + + break; + + case STATE::FIFO_RESET: + _state = STATE::FIFO_READ; + FIFOReset(); + + if (DataReadyInterruptConfigure()) { + _data_ready_interrupt_enabled = true; + ScheduleDelayed(100_ms); + + } else { + _data_ready_interrupt_enabled = false; + ScheduleOnInterval(_fifo_empty_interval_us, _fifo_empty_interval_us); + } + + break; + + case STATE::FIFO_READ: { + hrt_abstime timestamp_sample = now; + bool success = false; + + if (_data_ready_interrupt_enabled) { + const hrt_abstime drdy_timestamp_sample = _drdy_timestamp_sample.fetch_and(0); + + if ((now - drdy_timestamp_sample) < _fifo_empty_interval_us) { + timestamp_sample = drdy_timestamp_sample; + + } else { + perf_count(_drdy_missed_perf); + } + + ScheduleDelayed(_fifo_empty_interval_us * 2); + } + + // Read FIFO status (atomic multi-byte read to avoid race between STATUS1 and STATUS2) + struct FIFOStatusTransfer { + uint8_t cmd{static_cast(Register::FIFO_STATUS1) | DIR_READ}; + uint8_t STATUS1{0}; + uint8_t STATUS2{0}; + } fifo_status{}; + + if (transfer((uint8_t *)&fifo_status, (uint8_t *)&fifo_status, sizeof(fifo_status)) != PX4_OK) { + perf_count(_bad_transfer_perf); + + } else if (fifo_status.STATUS2 & static_cast(FIFO_STATUS2_BIT::FIFO_OVR_LATCHED)) { + FIFOReset(); + perf_count(_fifo_overflow_perf); + + } else { + // FIFO unread word count: 9-bit field (FIFO_STATUS2 bit0 is bit8) + // Each sample period produces 2 words (1 gyro word + 1 accel word) + uint16_t fifo_words = fifo_status.STATUS1; + + if (fifo_status.STATUS2 & static_cast(FIFO_STATUS2_BIT::DIFF_FIFO_8)) { + fifo_words |= (1u << 8); + } + + // Convert word count to sample periods for comparisons against _fifo_gyro_samples / FIFO_MAX_SAMPLES + const uint16_t sample_periods = fifo_words / 2; + + if (sample_periods == 0) { + perf_count(_fifo_empty_perf); + + } else if (sample_periods > static_cast(FIFO_MAX_SAMPLES)) { + // not technically an overflow, but more samples than we expected or can publish + FIFOReset(); + perf_count(_fifo_overflow_perf); + + } else { + + // tolerate minor jitter, leave sample to next iteration if behind by only 1 + if (sample_periods == static_cast(_fifo_gyro_samples) + 1) { + timestamp_sample -= static_cast(FIFO_SAMPLE_DT); + fifo_words -= 2; + } + + if (FIFORead(timestamp_sample, fifo_words)) { + success = true; + + if (_failure_count > 0) { + _failure_count--; + } + } + } + } + + if (!success) { + _failure_count++; + + if (_failure_count > 10) { + Reset(); + return; + } + } + + // periodically check configuration registers + if (!success || hrt_elapsed_time(&_last_config_check_timestamp) > 100_ms) { + if (RegisterCheck(_register_cfg[_checked_register])) { + _last_config_check_timestamp = now; + _checked_register = (_checked_register + 1) % size_register_cfg; + + } else { + perf_count(_bad_register_perf); + Reset(); + } + + } else { + // periodically update temperature (~1 Hz) + if (hrt_elapsed_time(&_temperature_update_timestamp) >= 1_s) { + UpdateTemperature(); + _temperature_update_timestamp = now; + } + } + } + + break; + } +} + +void LSM6DSV::ConfigureSampleRate(int sample_rate) +{ + const float min_interval = FIFO_SAMPLE_DT; + _fifo_empty_interval_us = math::max(roundf((1e6f / (float)sample_rate) / min_interval) * min_interval, min_interval); + + _fifo_gyro_samples = roundf(math::min((float)_fifo_empty_interval_us / (1e6f / GYRO_RATE), (float)FIFO_MAX_SAMPLES)); + + _fifo_empty_interval_us = _fifo_gyro_samples * (1e6f / GYRO_RATE); + + ConfigureFIFOWatermark(_fifo_gyro_samples); +} + +bool LSM6DSV::Configure() +{ + // First enable HAODR mode, then configure ODR registers + for (const auto ®_cfg : _register_cfg) { + RegisterSetAndClearBits(reg_cfg.reg, reg_cfg.set_bits, reg_cfg.clear_bits); + } + + // Verify all registers + bool success = true; + + for (const auto ®_cfg : _register_cfg) { + if (!RegisterCheck(reg_cfg)) { + success = false; + } + } + + // Gyroscope: ±2000 dps, 70 mdps/LSB (ST datasheet) + _px4_gyro.set_scale(math::radians(70.f / 1000.f)); + _px4_gyro.set_range(math::radians(2000.f)); + + // Accelerometer: ±16g, 0.488 mg/LSB (ST datasheet) + _px4_accel.set_scale(0.488f * (CONSTANTS_ONE_G / 1000.f)); + _px4_accel.set_range(16.f * CONSTANTS_ONE_G); + + return success; +} + +bool LSM6DSV::RegisterCheck(const register_config_t ®_cfg) +{ + bool success = true; + + const uint8_t reg_value = RegisterRead(reg_cfg.reg); + + if (reg_cfg.set_bits && ((reg_value & reg_cfg.set_bits) != reg_cfg.set_bits)) { + PX4_DEBUG("0x%02hhX: 0x%02hhX (0x%02hhX not set)", (uint8_t)reg_cfg.reg, reg_value, reg_cfg.set_bits); + success = false; + } + + if (reg_cfg.clear_bits && ((reg_value & reg_cfg.clear_bits) != 0)) { + PX4_DEBUG("0x%02hhX: 0x%02hhX (0x%02hhX not cleared)", (uint8_t)reg_cfg.reg, reg_value, reg_cfg.clear_bits); + success = false; + } + + return success; +} + +uint8_t LSM6DSV::RegisterRead(Register reg) +{ + uint8_t cmd[2] {}; + cmd[0] = static_cast(reg) | DIR_READ; + transfer(cmd, cmd, sizeof(cmd)); + return cmd[1]; +} + +void LSM6DSV::RegisterWrite(Register reg, uint8_t value) +{ + uint8_t cmd[2] { (uint8_t)reg, value }; + transfer(cmd, cmd, sizeof(cmd)); +} + +void LSM6DSV::RegisterSetAndClearBits(Register reg, uint8_t setbits, uint8_t clearbits) +{ + const uint8_t orig_val = RegisterRead(reg); + + uint8_t val = (orig_val & ~clearbits) | setbits; + + if (orig_val != val) { + RegisterWrite(reg, val); + } +} + +bool LSM6DSV::FIFORead(const hrt_abstime ×tamp_sample, uint16_t samples) +{ + sensor_gyro_fifo_s gyro{}; + gyro.timestamp_sample = timestamp_sample; + gyro.samples = 0; + gyro.dt = FIFO_SAMPLE_DT; + + sensor_accel_fifo_s accel{}; + accel.timestamp_sample = timestamp_sample; + accel.samples = 0; + accel.dt = FIFO_SAMPLE_DT; + + // Read FIFO word by word: each word is 7 bytes (tag + 6 data) + for (uint16_t i = 0; i < samples; i++) { + // Read tag + data in one transfer (1 cmd byte + 7 data bytes) + struct FIFOWordTransfer { + uint8_t cmd{static_cast(Register::FIFO_DATA_OUT_TAG) | DIR_READ}; + uint8_t TAG{0}; + uint8_t DATA_X_L{0}; + uint8_t DATA_X_H{0}; + uint8_t DATA_Y_L{0}; + uint8_t DATA_Y_H{0}; + uint8_t DATA_Z_L{0}; + uint8_t DATA_Z_H{0}; + } buffer{}; + + if (transfer((uint8_t *)&buffer, (uint8_t *)&buffer, sizeof(buffer)) != PX4_OK) { + perf_count(_bad_transfer_perf); + continue; + } + + // Decode tag from upper 5 bits + const uint8_t tag_id = buffer.TAG >> 3; + + const int16_t data_x = combine(buffer.DATA_X_H, buffer.DATA_X_L); + const int16_t data_y = combine(buffer.DATA_Y_H, buffer.DATA_Y_L); + const int16_t data_z = combine(buffer.DATA_Z_H, buffer.DATA_Z_L); + + if (tag_id == static_cast(FifoTag::GYRO_NC)) { + if (gyro.samples < (sizeof(gyro.x) / sizeof(gyro.x[0]))) { + gyro.x[gyro.samples] = data_x; + gyro.y[gyro.samples] = data_y; + gyro.z[gyro.samples] = data_z; + gyro.samples++; + } + + } else if (tag_id == static_cast(FifoTag::ACCEL_NC)) { + if (accel.samples < (sizeof(accel.x) / sizeof(accel.x[0]))) { + accel.x[accel.samples] = data_x; + accel.y[accel.samples] = data_y; + accel.z[accel.samples] = data_z; + accel.samples++; + } + + } else if (tag_id == static_cast(FifoTag::TEMPERATURE)) { + const int16_t temp_raw = combine(buffer.DATA_X_H, buffer.DATA_X_L); + const float temperature = (temp_raw / 256.0f) + 25.0f; + + if (PX4_ISFINITE(temperature)) { + _px4_accel.set_temperature(temperature); + _px4_gyro.set_temperature(temperature); + } + } + + // Other tags (TIMESTAMP, etc.) are silently ignored + } + + // Publish + if (gyro.samples > 0) { + _px4_gyro.set_error_count(perf_event_count(_bad_register_perf) + perf_event_count(_bad_transfer_perf) + + perf_event_count(_fifo_empty_perf) + perf_event_count(_fifo_overflow_perf)); + _px4_gyro.updateFIFO(gyro); + } + + if (accel.samples > 0) { + _px4_accel.set_error_count(perf_event_count(_bad_register_perf) + perf_event_count(_bad_transfer_perf) + + perf_event_count(_fifo_empty_perf) + perf_event_count(_fifo_overflow_perf)); + _px4_accel.updateFIFO(accel); + } + + return (accel.samples > 0) && (gyro.samples > 0); +} + +void LSM6DSV::FIFOReset() +{ + perf_count(_fifo_reset_perf); + + // Switch to Bypass mode to flush FIFO + RegisterWrite(Register::FIFO_CTRL4, FIFO_CTRL4_BIT::FIFO_MODE_BYPASS); + + // Re-enable Continuous mode + RegisterWrite(Register::FIFO_CTRL4, FIFO_CTRL4_BIT::FIFO_MODE_CONTINUOUS); + + _drdy_timestamp_sample.store(0); +} + +void LSM6DSV::UpdateTemperature() +{ + struct TransferBuffer { + uint8_t cmd{static_cast(Register::OUT_TEMP_L) | DIR_READ}; + uint8_t OUT_TEMP_L{0}; + uint8_t OUT_TEMP_H{0}; + } buffer{}; + + if (transfer((uint8_t *)&buffer, (uint8_t *)&buffer, sizeof(buffer)) != PX4_OK) { + perf_count(_bad_transfer_perf); + return; + } + + // 256 LSB/°C, zero = 25°C + const int16_t OUT_TEMP = combine(buffer.OUT_TEMP_H, buffer.OUT_TEMP_L); + const float temperature = (OUT_TEMP / 256.0f) + 25.0f; + + if (PX4_ISFINITE(temperature)) { + _px4_accel.set_temperature(temperature); + _px4_gyro.set_temperature(temperature); + } +} + +int LSM6DSV::DataReadyInterruptCallback(int irq, void *context, void *arg) +{ + static_cast(arg)->DataReady(); + return 0; +} + +void LSM6DSV::DataReady() +{ + _drdy_timestamp_sample.store(hrt_absolute_time()); + ScheduleNow(); +} + +bool LSM6DSV::DataReadyInterruptConfigure() +{ + if (_drdy_gpio == 0) { + return false; + } + + // INT1 defaults to active-high (H_LACTIVE=0), use rising edge + return px4_arch_gpiosetevent(_drdy_gpio, true, false, true, &DataReadyInterruptCallback, this) == 0; +} + +bool LSM6DSV::DataReadyInterruptDisable() +{ + if (_drdy_gpio == 0) { + return false; + } + + return px4_arch_gpiosetevent(_drdy_gpio, false, false, false, nullptr, nullptr) == 0; +} + +void LSM6DSV::ConfigureFIFOWatermark(uint8_t samples) +{ + // accel + gyro = 2 FIFO words per sample period + const uint8_t fifo_watermark = samples * 2; + + for (auto &r : _register_cfg) { + if (r.reg == Register::FIFO_CTRL1) { + r.set_bits = fifo_watermark; + r.clear_bits = static_cast(~fifo_watermark & 0xFF); + } + } +} diff --git a/src/drivers/imu/st/lsm6dsv/LSM6DSV.hpp b/src/drivers/imu/st/lsm6dsv/LSM6DSV.hpp new file mode 100644 index 0000000000..4b783f8bb4 --- /dev/null +++ b/src/drivers/imu/st/lsm6dsv/LSM6DSV.hpp @@ -0,0 +1,159 @@ +/**************************************************************************** + * + * Copyright (c) 2024-2026 PX4 Development Team. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name PX4 nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +/** + * @file LSM6DSV.hpp + * + * Driver for the ST LSM6DSV connected via SPI. + * + */ + +#pragma once + +#include "ST_LSM6DSV_Registers.hpp" + +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace ST_LSM6DSV; + +class LSM6DSV : public device::SPI, public I2CSPIDriver +{ +public: + LSM6DSV(const I2CSPIDriverConfig &config); + ~LSM6DSV() override; + + static void print_usage(); + + void RunImpl(); + + int init() override; + void print_status() override; + +private: + void exit_and_cleanup() override; + + // Sensor Configuration + static constexpr float FIFO_SAMPLE_DT{1e6f / GYRO_ODR}; + static constexpr float GYRO_RATE{static_cast(GYRO_ODR)}; + static constexpr float ACCEL_RATE{static_cast(ACCEL_ODR)}; + + static constexpr int32_t FIFO_MAX_SAMPLES{static_cast(FIFO::MAX_DRAIN_SAMPLES)}; + + struct register_config_t { + Register reg; + uint8_t set_bits{0}; + uint8_t clear_bits{0}; + }; + + int probe() override; + + bool Reset(); + + bool Configure(); + void ConfigureSampleRate(int sample_rate); + + bool RegisterCheck(const register_config_t ®_cfg); + + uint8_t RegisterRead(Register reg); + void RegisterWrite(Register reg, uint8_t value); + void RegisterSetAndClearBits(Register reg, uint8_t setbits, uint8_t clearbits); + + bool FIFORead(const hrt_abstime ×tamp_sample, uint16_t samples); + void FIFOReset(); + + void UpdateTemperature(); + + static int DataReadyInterruptCallback(int irq, void *context, void *arg); + void DataReady(); + bool DataReadyInterruptConfigure(); + bool DataReadyInterruptDisable(); + void ConfigureFIFOWatermark(uint8_t samples); + + const spi_drdy_gpio_t _drdy_gpio; + PX4Accelerometer _px4_accel; + PX4Gyroscope _px4_gyro; + + perf_counter_t _bad_register_perf{perf_alloc(PC_COUNT, MODULE_NAME": bad register")}; + perf_counter_t _bad_transfer_perf{perf_alloc(PC_COUNT, MODULE_NAME": bad transfer")}; + perf_counter_t _fifo_empty_perf{perf_alloc(PC_COUNT, MODULE_NAME": FIFO empty")}; + perf_counter_t _fifo_overflow_perf{perf_alloc(PC_COUNT, MODULE_NAME": FIFO overflow")}; + perf_counter_t _fifo_reset_perf{perf_alloc(PC_COUNT, MODULE_NAME": FIFO reset")}; + perf_counter_t _drdy_missed_perf{nullptr}; + + hrt_abstime _reset_timestamp{0}; + hrt_abstime _last_config_check_timestamp{0}; + hrt_abstime _temperature_update_timestamp{0}; + int _failure_count{0}; + + px4::atomic _drdy_timestamp_sample{0}; + bool _data_ready_interrupt_enabled{false}; + + enum class STATE : uint8_t { + RESET, + WAIT_FOR_RESET, + CONFIGURE, + FIFO_RESET, + FIFO_READ, + } _state{STATE::RESET}; + + uint16_t _fifo_empty_interval_us{500}; // default 500 us / 2000 Hz + int32_t _fifo_gyro_samples{static_cast(_fifo_empty_interval_us / (1000000 / GYRO_ODR))}; + + uint8_t _checked_register{0}; + static constexpr uint8_t size_register_cfg{12}; + register_config_t _register_cfg[size_register_cfg] { + // Register | Set bits | Clear bits + { Register::CTRL3, CTRL3_BIT::BDU | CTRL3_BIT::IF_INC, CTRL3_BIT::SW_RESET }, + { Register::HAODR_CFG, HAODR_CFG_BIT::HAODR_MODE1, 0 }, + { Register::CTRL1, HAODR_MODE1_ODR_2000HZ | CTRL1_BIT::CTRL1_MODE_HAODR, 0 }, + { Register::CTRL2, HAODR_MODE1_ODR_2000HZ | CTRL2_BIT::CTRL2_MODE_HAODR, 0 }, + { Register::CTRL6, CTRL6_BIT::FS_G_2000DPS, 0 }, + { Register::CTRL8, CTRL8_BIT::FS_XL_16G | CTRL8_BIT::LPF2_BW_ODR_DIV_10, 0 }, + { Register::CTRL9, CTRL9_BIT::LPF2_XL_EN, 0 }, + { + Register::FIFO_CTRL3, static_cast(FIFO_CTRL3_BIT::BDR_GY_HAODR) | + static_cast(FIFO_CTRL3_BIT::BDR_XL_HAODR), 0 + }, + { Register::FIFO_CTRL4, FIFO_CTRL4_BIT::FIFO_MODE_CONTINUOUS, 0 }, + { Register::INT1_CTRL, INT1_CTRL_BIT::INT1_FIFO_TH, 0 }, + { Register::CTRL4, CTRL4_BIT::DRDY_PULSED, 0 }, + { Register::FIFO_CTRL1, 0, 0 }, // WTM[7:0] set at runtime by ConfigureFIFOWatermark() + }; +}; diff --git a/src/drivers/imu/st/lsm6dsv/ST_LSM6DSV_Registers.hpp b/src/drivers/imu/st/lsm6dsv/ST_LSM6DSV_Registers.hpp new file mode 100644 index 0000000000..ffd6bd4f10 --- /dev/null +++ b/src/drivers/imu/st/lsm6dsv/ST_LSM6DSV_Registers.hpp @@ -0,0 +1,217 @@ +/**************************************************************************** + * + * Copyright (c) 2024-2026 PX4 Development Team. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name PX4 nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +/** + * @file ST_LSM6DSV_Registers.hpp + * + * ST LSM6DSV registers. + * + */ + +#pragma once + +#include +#include + +static constexpr uint8_t Bit0 = (1 << 0); +static constexpr uint8_t Bit1 = (1 << 1); +static constexpr uint8_t Bit2 = (1 << 2); +static constexpr uint8_t Bit3 = (1 << 3); +static constexpr uint8_t Bit4 = (1 << 4); +static constexpr uint8_t Bit5 = (1 << 5); +static constexpr uint8_t Bit6 = (1 << 6); +static constexpr uint8_t Bit7 = (1 << 7); + +namespace ST_LSM6DSV +{ + +static constexpr uint32_t SPI_SPEED = 8 * 1000 * 1000; // 8 MHz SPI data clock + +static constexpr uint8_t DIR_READ = 0x80; + +static constexpr uint8_t WHO_AM_I_ID = 0x70; // LSM6DSV16X + +// HAODR mode-1 ODR: 2000 Hz +static constexpr uint32_t GYRO_ODR = 2000; +static constexpr uint32_t ACCEL_ODR = 2000; + +// HAODR mode-1 ODR codes (written to CTRL1/CTRL2 [3:0]) +static constexpr uint8_t HAODR_MODE1_ODR_2000HZ = 0x0A; + +enum class Register : uint8_t { + IF_CFG = 0x03, // Interrupt polarity and output mode + + FIFO_CTRL1 = 0x07, + FIFO_CTRL2 = 0x08, + FIFO_CTRL3 = 0x09, + FIFO_CTRL4 = 0x0A, + + INT1_CTRL = 0x0D, // INT1 pin control + + WHO_AM_I = 0x0F, + + CTRL1 = 0x10, // Accel ODR + FS + CTRL2 = 0x11, // Gyro ODR + FS + CTRL3 = 0x12, // BDU, IF_INC, SW_RESET + CTRL4 = 0x13, + CTRL6 = 0x15, // Gyro FS + CTRL8 = 0x17, // Accel FS + LPF2 BW + CTRL9 = 0x18, // LPF2 enable + + FIFO_STATUS1 = 0x1B, + FIFO_STATUS2 = 0x1C, + + STATUS_REG = 0x1E, + + OUT_TEMP_L = 0x20, + OUT_TEMP_H = 0x21, + + OUTX_L_G = 0x22, + + OUTX_L_A = 0x28, + + FIFO_DATA_OUT_TAG = 0x78, + FIFO_DATA_OUT_X_L = 0x79, + + HAODR_CFG = 0x62, +}; + +// CTRL1 — Accelerometer control (ODR + operating mode + HAODR flag) +enum CTRL1_BIT : uint8_t { + // ODR_XL [3:0] — set via HAODR mode-1 code 0x0A for 2000 Hz + // OP_MODE_XL [2:0] in bits [6:4]: 0b000 = high-performance mode + CTRL1_MODE_HAODR = Bit4, // bit 4 must be set for HAODR selection +}; + +// CTRL2 — Gyroscope control (ODR + operating mode + HAODR flag) +enum CTRL2_BIT : uint8_t { + CTRL2_MODE_HAODR = Bit4, +}; + +// IF_CFG (0x03) — Interrupt polarity and output mode +enum IF_CFG_BIT : uint8_t { + H_LACTIVE = Bit4, // Interrupt active-low + PP_OD = Bit3, // Push-pull (0) / Open-drain (1) +}; + +// INT1_CTRL (0x0D) — INT1 pin control +enum INT1_CTRL_BIT : uint8_t { + INT1_FIFO_TH = Bit3, // FIFO threshold interrupt on INT1 +}; + +// CTRL3 +enum CTRL3_BIT : uint8_t { + BDU = Bit6, // Block Data Update + IF_INC = Bit2, // Register address auto-increment + SW_RESET = Bit0, // Software reset +}; + +// CTRL4 +enum CTRL4_BIT : uint8_t { + INT2_on_INT1 = Bit4, // Route INT2 signals to INT1 + DRDY_PULSED = Bit1, // Pulsed interrupt mode (~65 µs) +}; + +// CTRL6 — Gyroscope full-scale +enum CTRL6_BIT : uint8_t { + // FS_G [3:0] + FS_G_2000DPS = 0x04, // ±2000 dps +}; + +// CTRL8 — Accelerometer full-scale + LPF2 bandwidth +enum CTRL8_BIT : uint8_t { + // FS_XL [1:0] in bits [1:0] + FS_XL_16G = 0x03, // ±16 g + + // HP_LPF2_XL_BW [2:0] in bits [7:5] — when LPF2 enabled via CTRL9 + LPF2_BW_ODR_DIV_10 = Bit5, // 0x20 → ODR/10 +}; + +// CTRL9 +enum CTRL9_BIT : uint8_t { + LPF2_XL_EN = Bit3, // Enable accelerometer LPF2 +}; + +// STATUS_REG +enum STATUS_REG_BIT : uint8_t { + XLDA = Bit0, // Accelerometer new data available + GDA = Bit1, // Gyroscope new data available + TDA = Bit2, // Temperature new data available +}; + +// FIFO_CTRL3 — Batch Data Rate for accel and gyro +enum FIFO_CTRL3_BIT : uint8_t { + // BDR_GY [3:0] in bits [7:4], BDR_XL [3:0] in bits [3:0] + // Set both to HAODR mode-1 code = 0x0A + BDR_XL_HAODR = HAODR_MODE1_ODR_2000HZ, + BDR_GY_HAODR = HAODR_MODE1_ODR_2000HZ << 4, +}; + +// FIFO_CTRL4 — FIFO mode +enum FIFO_CTRL4_BIT : uint8_t { + FIFO_MODE_BYPASS = 0x00, + FIFO_MODE_CONTINUOUS = 0x06, // Continuous mode +}; + +// FIFO_STATUS2 (bit layout: [7]WTM_IA [6]OVR_IA [5]FULL_IA [4]CNT_BDR [3]OVR_LATCHED [2:1]0 [0]DIFF8) +enum FIFO_STATUS2_BIT : uint8_t { + FIFO_OVR_LATCHED = Bit3, // FIFO overrun latched (cleared on read) + COUNTER_BDR_IA = Bit4, // Counter BDR reached + FIFO_OVR_IA = Bit6, // FIFO overrun status (non-latched) + DIFF_FIFO_8 = Bit0, // bit 8 of FIFO diff count +}; + +// HAODR_CFG +enum HAODR_CFG_BIT : uint8_t { + HAODR_MODE1 = 0x01, // Enable HAODR mode-1 +}; + +// FIFO tag IDs (upper 5 bits of FIFO_DATA_OUT_TAG >> 3) +enum class FifoTag : uint8_t { + GYRO_NC = 0x01, + ACCEL_NC = 0x02, + TEMPERATURE = 0x03, + TIMESTAMP = 0x04, +}; + +namespace FIFO +{ +// FIFO word: 1-byte tag + 6-byte data = 7 bytes +static constexpr size_t WORD_SIZE = 7; +// Max samples to drain per poll (avoid blocking scheduler) +static constexpr size_t MAX_DRAIN_SAMPLES = 32; +// FIFO depth: 512 words max on LSM6DSV +static constexpr size_t DEPTH = 512; +} + +} // namespace ST_LSM6DSV diff --git a/src/modules/fw_att_control/fw_roll_controller.h b/src/drivers/imu/st/lsm6dsv/lsm6dsv_main.cpp similarity index 57% rename from src/modules/fw_att_control/fw_roll_controller.h rename to src/drivers/imu/st/lsm6dsv/lsm6dsv_main.cpp index 5e47f0ffd0..f0b4cbe469 100644 --- a/src/modules/fw_att_control/fw_roll_controller.h +++ b/src/drivers/imu/st/lsm6dsv/lsm6dsv_main.cpp @@ -1,6 +1,6 @@ /**************************************************************************** * - * Copyright (c) 2020-2023 PX4 Development Team. All rights reserved. + * Copyright (c) 2024-2026 PX4 Development Team. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -31,42 +31,57 @@ * ****************************************************************************/ -/** - * @file fw_roll_controller.h - * Definition of a simple roll P controller. - */ +#include "LSM6DSV.hpp" -#ifndef FW_ROLL_CONTROLLER_H -#define FW_ROLL_CONTROLLER_H +#include +#include -class RollController +void LSM6DSV::print_usage() { -public: - RollController() = default; - ~RollController() = default; + PRINT_MODULE_USAGE_NAME("lsm6dsv", "driver"); + PRINT_MODULE_USAGE_SUBCATEGORY("imu"); + PRINT_MODULE_USAGE_COMMAND("start"); + PRINT_MODULE_USAGE_PARAMS_I2C_SPI_DRIVER(false, true); + PRINT_MODULE_USAGE_PARAM_INT('R', 0, 0, 35, "Rotation", true); + PRINT_MODULE_USAGE_DEFAULT_COMMANDS(); +} - /** - * @brief Calculates both euler and body roll rate setpoints. - * - * @param roll_setpoint roll setpoint [rad] - * @param euler_yaw_rate_setpoint euler yaw rate setpoint [rad/s] - * @param roll estimated roll [rad] - * @param pitch estimated pitch [rad] - * @return Roll body rate setpoint [rad/s] - */ - float control_roll(float roll_setpoint, float euler_yaw_rate_setpoint, float roll, float pitch); +extern "C" int lsm6dsv_main(int argc, char *argv[]) +{ + int ch; + using ThisDriver = LSM6DSV; + BusCLIArguments cli{false, true}; + cli.default_spi_frequency = SPI_SPEED; - void set_time_constant(float time_constant) { _tc = time_constant; } - void set_max_rate(float max_rate) { _max_rate = max_rate; } + while ((ch = cli.getOpt(argc, argv, "R:")) != EOF) { + switch (ch) { + case 'R': + cli.rotation = (enum Rotation)atoi(cli.optArg()); + break; + } + } - float get_euler_rate_setpoint() { return _euler_rate_setpoint; } - float get_body_rate_setpoint() { return _body_rate_setpoint; } + const char *verb = cli.optArg(); -private: - float _tc{}; - float _max_rate{}; - float _euler_rate_setpoint{}; - float _body_rate_setpoint{}; -}; + if (!verb) { + ThisDriver::print_usage(); + return -1; + } -#endif // FW_ROLL_CONTROLLER_H + BusInstanceIterator iterator(MODULE_NAME, cli, DRV_IMU_DEVTYPE_ST_LSM6DSV); + + if (!strcmp(verb, "start")) { + return ThisDriver::module_start(cli, iterator); + } + + if (!strcmp(verb, "stop")) { + return ThisDriver::module_stop(iterator); + } + + if (!strcmp(verb, "status")) { + return ThisDriver::module_status(iterator); + } + + ThisDriver::print_usage(); + return -1; +} diff --git a/src/drivers/ins/eulernav_bahrs/eulernav_driver.cpp b/src/drivers/ins/eulernav_bahrs/eulernav_driver.cpp index 536ee6afa6..a8bdfb78cb 100644 --- a/src/drivers/ins/eulernav_bahrs/eulernav_driver.cpp +++ b/src/drivers/ins/eulernav_bahrs/eulernav_driver.cpp @@ -149,11 +149,15 @@ int EulerNavDriver::print_status() { if (_is_initialized) { - PX4_INFO("Elapsed time: %llu [us].\n", hrt_elapsed_time(&_statistics.start_time)); - PX4_INFO("Total bytes received: %lu.\n", _statistics.total_bytes_received); + PX4_INFO("Elapsed time: %llu [us].\n", + static_cast(hrt_elapsed_time(&_statistics.start_time))); + PX4_INFO("Total bytes received: %lu.\n", + static_cast(_statistics.total_bytes_received)); PX4_INFO("Inertial messages received: %lu. Navigation messages received: %lu.\n", - _statistics.inertial_message_counter, _statistics.navigation_message_counter); - PX4_INFO("Failed CRC count: %lu.\n", _statistics.crc_failures); + static_cast(_statistics.inertial_message_counter), + static_cast(_statistics.navigation_message_counter)); + PX4_INFO("Failed CRC count: %lu.\n", + static_cast(_statistics.crc_failures)); } else @@ -298,7 +302,7 @@ void EulerNavDriver::processDataBuffer() if (static_cast(bytes_to_retrieve) == _data_buffer.pop_front(bytes + sizeof(CSerialProtocol::SMessageHeader), bytes_to_retrieve)) { - const uint32_t message_length_in_words{message_length / sizeof(uint32_t)}; + const uint32_t message_length_in_words{static_cast(message_length / sizeof(uint32_t))}; const uint32_t actual_crc{crc32(_message_storage, message_length_in_words - 1)}; const uint32_t expected_crc = _message_storage[message_length_in_words - 1]; diff --git a/src/drivers/ins/ilabs/ILabs.cpp b/src/drivers/ins/ilabs/ILabs.cpp index e221ee50e6..c994f4f3d3 100644 --- a/src/drivers/ins/ilabs/ILabs.cpp +++ b/src/drivers/ins/ilabs/ILabs.cpp @@ -67,13 +67,15 @@ enum ILabsMode { ILabs::ILabs(const char *serialDeviceName) : ModuleParams(nullptr), ScheduledWorkItem(MODULE_NAME, px4::serial_port_to_wq(serialDeviceName)), - _attitude_pub((_param_ilabs_mode.get() == ILabsMode::RAW_SENSORS_DATA) ? ORB_ID(external_ins_attitude) - : ORB_ID(vehicle_attitude)), - _local_position_pub((_param_ilabs_mode.get() == ILabsMode::RAW_SENSORS_DATA) ? ORB_ID(external_ins_local_position) - : ORB_ID(vehicle_local_position)), + _attitude_pub((_param_ilabs_mode.get() == ILabsMode::RAW_SENSORS_DATA) + ? ORB_ID(external_ins_attitude) + : ORB_ID(vehicle_attitude)), + _local_position_pub((_param_ilabs_mode.get() == ILabsMode::RAW_SENSORS_DATA) + ? ORB_ID(external_ins_local_position) + : ORB_ID(vehicle_local_position)), _global_position_pub((_param_ilabs_mode.get() == ILabsMode::RAW_SENSORS_DATA) - ? ORB_ID(external_ins_global_position) - : ORB_ID(vehicle_global_position)) { + ? ORB_ID(external_ins_global_position) + : ORB_ID(vehicle_global_position)) { // store port name strncpy(_serialDeviceName, serialDeviceName, sizeof(_serialDeviceName) - 1); @@ -470,8 +472,8 @@ void ILabs::processData(InertialLabs::SensorsData *data) { sensor_gps.latitude_deg = data->gps.latitude; sensor_gps.longitude_deg = data->gps.longitude; - sensor_gps.altitude_ellipsoid_m = data->gps.altitude; - sensor_gps.altitude_msl_m = data->gps.altitude; + sensor_gps.altitude_ellipsoid_m = static_cast(data->gps.altitude); + sensor_gps.altitude_msl_m = static_cast(data->gps.altitude); sensor_gps.fix_type = data->gps.fixType + 1; @@ -485,7 +487,7 @@ void ILabs::processData(InertialLabs::SensorsData *data) { sensor_gps.jamming_state = data->gps.jamStatus; sensor_gps.jamming_indicator = (sensor_gps.jamming_state != InertialLabs::JammingStatus::UNKOWN_OR_DISABLED) && - (sensor_gps.jamming_state != InertialLabs::JammingStatus::OK); + (sensor_gps.jamming_state != InertialLabs::JammingStatus::NO_SIGNIFICANT); sensor_gps.spoofing_state = data->gps.spoofingStatus; sensor_gps.vel_m_s = diff --git a/src/drivers/ins/ilabs/ILabs.h b/src/drivers/ins/ilabs/ILabs.h index c0d8b6d0a2..df485c11f0 100644 --- a/src/drivers/ins/ilabs/ILabs.h +++ b/src/drivers/ins/ilabs/ILabs.h @@ -90,6 +90,8 @@ private: self->processData(data); } +private: + DEFINE_PARAMETERS((ParamInt)_param_ilabs_mode) InertialLabs::Sensor _sensor{}; char _serialDeviceName[20]{}; @@ -127,6 +129,4 @@ private: perf_alloc(PC_INTERVAL, MODULE_NAME ": local position publish interval")}; perf_counter_t _global_position_pub_interval_perf{ perf_alloc(PC_INTERVAL, MODULE_NAME ": global position publish interval")}; - - DEFINE_PARAMETERS((ParamInt)_param_ilabs_mode) }; diff --git a/src/drivers/ins/ilabs/libilabs/include/data.h b/src/drivers/ins/ilabs/libilabs/include/data.h index 2d91355f28..0a586d3b17 100644 --- a/src/drivers/ins/ilabs/libilabs/include/data.h +++ b/src/drivers/ins/ilabs/libilabs/include/data.h @@ -188,7 +188,7 @@ enum NewAidingData { enum JammingStatus : uint8_t { UNKOWN_OR_DISABLED = 0, - OK = 1, // No significant jamming + NO_SIGNIFICANT = 1, // No significant jamming WARNING = 2, // Interference visible but fix ok CRITICAL = 3, // Interference visible and no fix }; diff --git a/src/drivers/ins/microstrain/MicroStrain.cpp b/src/drivers/ins/microstrain/MicroStrain.cpp index cc78f46300..330f98cb3c 100755 --- a/src/drivers/ins/microstrain/MicroStrain.cpp +++ b/src/drivers/ins/microstrain/MicroStrain.cpp @@ -195,7 +195,9 @@ mip_cmd_result MicroStrain::forceIdle() uint8_t set_to_idle_tries = 0; while (set_to_idle_tries++ < 3) { - if (mip_cmd_result_is_ack((res = mip_base_set_idle(&_device)))) { + res = mip_base_set_idle(&_device); + + if (mip_cmd_result_is_ack(res)) { break; } else { @@ -210,7 +212,7 @@ int MicroStrain::connectAtBaud(int32_t baud) { if (device_uart.isOpen()) { if (device_uart.setBaudrate(baud) == false) { - PX4_ERR("Failed to set UART %lu baud", baud); + PX4_ERR("Failed to set UART %lu baud", static_cast(baud)); } } else { @@ -220,7 +222,7 @@ int MicroStrain::connectAtBaud(int32_t baud) } if (device_uart.setBaudrate(baud) == false) { - PX4_ERR("Failed to set UART %lu baud", baud); + PX4_ERR("Failed to set UART %lu baud", static_cast(baud)); return PX4_ERROR; } @@ -230,11 +232,13 @@ int MicroStrain::connectAtBaud(int32_t baud) } } - PX4_INFO("Serial Port %s with baud of %lu baud", (device_uart.isOpen() ? "CONNECTED" : "NOT CONNECTED"), baud); + PX4_INFO("Serial Port %s with baud of %lu baud", + (device_uart.isOpen() ? "CONNECTED" : "NOT CONNECTED"), + static_cast(baud)); // Re-init the interface with the correct timeouts mip_interface_init(&_device, _parse_buffer, sizeof(_parse_buffer), mip_timeout_from_baudrate(baud) * 1_ms, 250_ms, - &mipInterfaceUserSendToDevice, &mipInterfaceUserRecvFromDevice, &mip_interface_default_update, NULL); + &mipInterfaceUserSendToDevice, &mipInterfaceUserRecvFromDevice, &mip_interface_default_update, nullptr); if (!mip_cmd_result_is_ack(forceIdle())) { PX4_ERR("Could not set device to idle"); @@ -827,7 +831,9 @@ mip_cmd_result MicroStrain::configureGnssAiding() // Sets up the GNSS aiding source if (supportsDescriptor(MIP_FILTER_CMD_DESC_SET, MIP_CMD_DESC_FILTER_GNSS_SOURCE_CONTROL)) { - if (!mip_cmd_result_is_ack(res = mip_filter_write_gnss_source(&_device, (uint8_t)_param_ms_gnss_aid_src_ctrl.get()))) { + res = mip_filter_write_gnss_source(&_device, (uint8_t)_param_ms_gnss_aid_src_ctrl.get()); + + if (!mip_cmd_result_is_ack(res)) { PX4_ERR("Could not write the gnss aiding source"); return res; } @@ -838,9 +844,11 @@ mip_cmd_result MicroStrain::configureGnssAiding() // Sets up the aiding frame for the external source if (supportsDescriptor(MIP_AIDING_CMD_DESC_SET, MIP_CMD_DESC_AIDING_FRAME_CONFIG)) { - if (!mip_cmd_result_is_ack(res = mip_aiding_write_frame_config(&_device, 1, - MIP_AIDING_FRAME_CONFIG_COMMAND_FORMAT_EULER, false, - gnss_antenna_offset1, &rotation_gnss))) { + res = mip_aiding_write_frame_config(&_device, 1, + MIP_AIDING_FRAME_CONFIG_COMMAND_FORMAT_EULER, false, + gnss_antenna_offset1, &rotation_gnss); + + if (!mip_cmd_result_is_ack(res)) { PX4_ERR("Could not write aiding frame config"); return res; } @@ -870,20 +878,23 @@ mip_cmd_result MicroStrain::configureGnssAiding() } // Selectively enables dual antenna heading as an aiding measurement - if (!mip_cmd_result_is_ack(res = enableAidingSource( - MIP_FILTER_AIDING_MEASUREMENT_ENABLE_COMMAND_AIDING_SOURCE_GNSS_HEADING, - _param_ms_int_heading_en.get(), - 0, 0, nullptr, mip_aiding_frame_config_command_rotation{0}, - 0, _int_aiding, "dual antenna heading"))) { + res = enableAidingSource(MIP_FILTER_AIDING_MEASUREMENT_ENABLE_COMMAND_AIDING_SOURCE_GNSS_HEADING, + _param_ms_int_heading_en.get(), + 0, 0, nullptr, mip_aiding_frame_config_command_rotation{}, + 0, _int_aiding, "dual antenna heading"); + + if (!mip_cmd_result_is_ack(res)) { return res; } } // Otherwise sets up the aiding frame else if (supportsDescriptor(MIP_AIDING_CMD_DESC_SET, MIP_CMD_DESC_AIDING_FRAME_CONFIG)) { - if (!mip_cmd_result_is_ack(res = mip_aiding_write_frame_config(&_device, 1, - MIP_AIDING_FRAME_CONFIG_COMMAND_FORMAT_EULER, false, - gnss_antenna_offset1, &rotation_gnss))) { + res = mip_aiding_write_frame_config(&_device, 1, + MIP_AIDING_FRAME_CONFIG_COMMAND_FORMAT_EULER, false, + gnss_antenna_offset1, &rotation_gnss); + + if (!mip_cmd_result_is_ack(res)) { PX4_ERR("Could not write aiding frame config"); return res; } @@ -902,47 +913,51 @@ mip_cmd_result MicroStrain::configureAidingSources() mip_cmd_result res; // Selectively turn on internal magnetometer as an aiding source - if (!mip_cmd_result_is_ack(res = enableAidingSource( - MIP_FILTER_AIDING_MEASUREMENT_ENABLE_COMMAND_AIDING_SOURCE_MAGNETOMETER, - _param_ms_int_mag_en.get(), - 0, 0, nullptr, mip_aiding_frame_config_command_rotation{0}, - 0, _int_aiding, "internal magnetometer"))) { + res = enableAidingSource(MIP_FILTER_AIDING_MEASUREMENT_ENABLE_COMMAND_AIDING_SOURCE_MAGNETOMETER, + _param_ms_int_mag_en.get(), + 0, 0, nullptr, mip_aiding_frame_config_command_rotation{}, + 0, _int_aiding, "internal magnetometer"); + + if (!mip_cmd_result_is_ack(res)) { return res; } // Selectively turn on external magnetometer as an aiding source - if (!mip_cmd_result_is_ack(res = enableAidingSource( - MIP_FILTER_AIDING_MEASUREMENT_ENABLE_COMMAND_AIDING_SOURCE_EXTERNAL_MAGNETOMETER, - _param_ms_ext_mag_en.get(), - 2, MIP_AIDING_FRAME_CONFIG_COMMAND_FORMAT_EULER, - ext_mag_offset, rotation_ext_mag, - MIP_CMD_DESC_AIDING_MAGNETIC_FIELD, - _ext_mag_aiding, - "external magnetometer"))) { + res = enableAidingSource(MIP_FILTER_AIDING_MEASUREMENT_ENABLE_COMMAND_AIDING_SOURCE_EXTERNAL_MAGNETOMETER, + _param_ms_ext_mag_en.get(), + 2, MIP_AIDING_FRAME_CONFIG_COMMAND_FORMAT_EULER, + ext_mag_offset, rotation_ext_mag, + MIP_CMD_DESC_AIDING_MAGNETIC_FIELD, + _ext_mag_aiding, + "external magnetometer"); + + if (!mip_cmd_result_is_ack(res)) { return res; } // Selectively turn on body frame velocity as an aiding source - if (!mip_cmd_result_is_ack(res = enableAidingSource( - MIP_FILTER_AIDING_MEASUREMENT_ENABLE_COMMAND_AIDING_SOURCE_VEHICLE_FRAME_VEL, - _param_ms_ext_opt_flow_en.get(), - 3, MIP_AIDING_FRAME_CONFIG_COMMAND_FORMAT_EULER, - optical_flow_offset, rotation_oflow, - MIP_CMD_DESC_AIDING_VEL_ODOM, - _ext_optical_flow_aiding, - "optical flow"))) { + res = enableAidingSource(MIP_FILTER_AIDING_MEASUREMENT_ENABLE_COMMAND_AIDING_SOURCE_VEHICLE_FRAME_VEL, + _param_ms_ext_opt_flow_en.get(), + 3, MIP_AIDING_FRAME_CONFIG_COMMAND_FORMAT_EULER, + optical_flow_offset, rotation_oflow, + MIP_CMD_DESC_AIDING_VEL_ODOM, + _ext_optical_flow_aiding, + "optical flow"); + + if (!mip_cmd_result_is_ack(res)) { return res; } // Selectively turn on external heading as an aiding source - if (!mip_cmd_result_is_ack(res = enableAidingSource( - MIP_FILTER_AIDING_MEASUREMENT_ENABLE_COMMAND_AIDING_SOURCE_EXTERNAL_HEADING, - _param_ms_ext_heading_en.get(), - 4, MIP_AIDING_FRAME_CONFIG_COMMAND_FORMAT_EULER, - ext_heading_offset, rotation_ext_heading, - MIP_CMD_DESC_AIDING_HEADING_TRUE, - _ext_heading_aiding, - "external heading"))) { + res = enableAidingSource(MIP_FILTER_AIDING_MEASUREMENT_ENABLE_COMMAND_AIDING_SOURCE_EXTERNAL_HEADING, + _param_ms_ext_heading_en.get(), + 4, MIP_AIDING_FRAME_CONFIG_COMMAND_FORMAT_EULER, + ext_heading_offset, rotation_ext_heading, + MIP_CMD_DESC_AIDING_HEADING_TRUE, + _ext_heading_aiding, + "external heading"); + + if (!mip_cmd_result_is_ack(res)) { return res; } @@ -989,7 +1004,7 @@ bool MicroStrain::initializeIns() for (auto &baudrate : BAUDRATES) { if (connectAtBaud(baudrate) == PX4_OK) { - PX4_INFO("found baudrate %lu", baudrate); + PX4_INFO("found baudrate %lu", static_cast(baudrate)); is_connected = true; break; } @@ -1009,7 +1024,9 @@ bool MicroStrain::initializeIns() // Setting the device baudrate to the desired value PX4_INFO("Setting the baud to desired baud rate"); - if (!mip_cmd_result_is_ack(res = writeBaudRate(DESIRED_BAUDRATE, 1))) { + res = writeBaudRate(DESIRED_BAUDRATE, 1); + + if (!mip_cmd_result_is_ack(res)) { PX4_ERR("Could not set the baudrate!"); return false; } @@ -1018,18 +1035,22 @@ bool MicroStrain::initializeIns() // Connecting using the desired baudrate if (connectAtBaud(DESIRED_BAUDRATE) != PX4_OK) { - PX4_ERR("Could not Connect at %lu", DESIRED_BAUDRATE); + PX4_ERR("Could not Connect at %lu", static_cast(DESIRED_BAUDRATE)); return false; } // Configure IMU ranges - if (!mip_cmd_result_is_ack(res = configureImuRange())) { + res = configureImuRange(); + + if (!mip_cmd_result_is_ack(res)) { MS_PX4_ERROR(res, "Could not configure IMU range"); return false; } // Configure the IMU message formt based on what descriptors are supported - if (!mip_cmd_result_is_ack(res = configureImuMessageFormat())) { + res = configureImuMessageFormat(); + + if (!mip_cmd_result_is_ack(res)) { MS_PX4_ERROR(res, "Could not write IMU message format"); return false; } @@ -1040,7 +1061,9 @@ bool MicroStrain::initializeIns() this); // Configure the Filter message format based on what descriptors are supported - if (!mip_cmd_result_is_ack(res = configureFilterMessageFormat())) { + res = configureFilterMessageFormat(); + + if (!mip_cmd_result_is_ack(res)) { MS_PX4_ERROR(res, "Could not write filter message format"); return false; } @@ -1051,7 +1074,9 @@ bool MicroStrain::initializeIns() this); // Configure the GNSS1 message format based on what descriptors are supported - if (!mip_cmd_result_is_ack(res = configureGnssMessageFormat(MIP_GNSS1_DATA_DESC_SET))) { + res = configureGnssMessageFormat(MIP_GNSS1_DATA_DESC_SET); + + if (!mip_cmd_result_is_ack(res)) { MS_PX4_ERROR(res, "Could not write GNSS1 message format"); } @@ -1061,7 +1086,9 @@ bool MicroStrain::initializeIns() this); // Configure the GNSS2 message format based on what descriptors are supported - if (!mip_cmd_result_is_ack(res = configureGnssMessageFormat(MIP_GNSS2_DATA_DESC_SET))) { + res = configureGnssMessageFormat(MIP_GNSS2_DATA_DESC_SET); + + if (!mip_cmd_result_is_ack(res)) { MS_PX4_ERROR(res, "Could not write GNSS2 message format"); } @@ -1071,13 +1098,17 @@ bool MicroStrain::initializeIns() this); // Configure the aiding sources based on what the sensor supports - if (!mip_cmd_result_is_ack(res = configureAidingSources())) { + res = configureAidingSources(); + + if (!mip_cmd_result_is_ack(res)) { MS_PX4_ERROR(res, "Could not configure aiding frames!"); return false; } // Initialize the filter - if (!mip_cmd_result_is_ack(res = writeFilterInitConfig())) { + res = writeFilterInitConfig(); + + if (!mip_cmd_result_is_ack(res)) { MS_PX4_ERROR(res, "Could not configure filter initialization!"); return false; } @@ -1086,9 +1117,12 @@ bool MicroStrain::initializeIns() if (_param_ms_svt_en.get() && supportsDescriptor(MIP_3DM_CMD_DESC_SET, MIP_CMD_DESC_3DM_SENSOR2VEHICLE_TRANSFORM_EUL)) { PX4_DEBUG("Writing SVT"); - if (!mip_cmd_result_is_ack(res = mip_3dm_write_sensor_2_vehicle_transform_euler(&_device, - math::radians(rotation_sens.euler[0]), - math::radians(rotation_sens.euler[1]), math::radians(rotation_sens.euler[2])))) { + res = mip_3dm_write_sensor_2_vehicle_transform_euler(&_device, + math::radians(rotation_sens.euler[0]), + math::radians(rotation_sens.euler[1]), + math::radians(rotation_sens.euler[2])); + + if (!mip_cmd_result_is_ack(res)) { MS_PX4_ERROR(res, "Could not set sensor-to-vehicle transformation!"); return false; } @@ -1098,7 +1132,9 @@ bool MicroStrain::initializeIns() if (supportsDescriptor(MIP_FILTER_CMD_DESC_SET, MIP_CMD_DESC_FILTER_RESET_FILTER)) { PX4_DEBUG("Reseting filter"); - if (!mip_cmd_result_is_ack(res = mip_filter_reset(&_device))) { + res = mip_filter_reset(&_device); + + if (!mip_cmd_result_is_ack(res)) { MS_PX4_ERROR(res, "Could not reset the filter!"); return false; } @@ -1107,8 +1143,10 @@ bool MicroStrain::initializeIns() if (supportsDescriptor(MIP_3DM_CMD_DESC_SET, MIP_CMD_DESC_3DM_CONTROL_DATA_STREAM)) { PX4_DEBUG("Writing datastream control"); - if (!mip_cmd_result_is_ack(res = mip_3dm_write_datastream_control(&_device, - MIP_3DM_DATASTREAM_CONTROL_COMMAND_ALL_STREAMS, true))) { + res = mip_3dm_write_datastream_control(&_device, + MIP_3DM_DATASTREAM_CONTROL_COMMAND_ALL_STREAMS, true); + + if (!mip_cmd_result_is_ack(res)) { MS_PX4_ERROR(res, "Could not enable the data stream"); return false; } @@ -1118,7 +1156,9 @@ bool MicroStrain::initializeIns() if (supportsDescriptor(MIP_BASE_CMD_DESC_SET, MIP_CMD_DESC_BASE_RESUME)) { PX4_DEBUG("Resuming device"); - if (!mip_cmd_result_is_ack(res = mip_base_resume(&_device))) { + res = mip_base_resume(&_device); + + if (!mip_cmd_result_is_ack(res)) { MS_PX4_ERROR(res, "Could not resume the device!"); return false; } @@ -1968,8 +2008,8 @@ Currently supports the following sensors: -[CV7-AR](https://www.hbkworld.com/en/products/transducers/inertial-sensors/vertical-reference-units--vru-/3dm-cv7-ar) -[CV7-AHRS](https://www.hbkworld.com/en/products/transducers/inertial-sensors/attitude-and-heading-reference-systems--ahrs-/3dm-cv7-ahrs) --[CV7-INS](https://www.hbkworld.com/en/products/transducers/inertial-sensors/inertial-navigation-systems--ins-/3dm-cv7-ins) --[CV7-GNSS/INS](https://www.hbkworld.com/en/products/transducers/inertial-sensors/inertial-navigation-systems--ins-/3dm-cv7-gnss-ins) +-[CV7-INS](https://www.hbkworld.com/en/products/transducers/inertial-sensors/navigation/3dm-cv7-ins) +-[CV7-GNSS/INS](https://www.hbkworld.com/en/products/transducers/inertial-sensors/navigation/3dm-cv7-gnss-ins) This driver is not included in the firmware by default. Include the module in firmware by setting the diff --git a/src/drivers/ins/microstrain/MicroStrain.hpp b/src/drivers/ins/microstrain/MicroStrain.hpp index cad2c2830a..74055fccd4 100755 --- a/src/drivers/ins/microstrain/MicroStrain.hpp +++ b/src/drivers/ins/microstrain/MicroStrain.hpp @@ -201,11 +201,11 @@ private: float ext_mag_offset[3] = {0}; float optical_flow_offset[3] = {0}; float ext_heading_offset[3] = {0}; - mip_aiding_frame_config_command_rotation rotation_sens = {0}; - mip_aiding_frame_config_command_rotation rotation_gnss = {0}; - mip_aiding_frame_config_command_rotation rotation_ext_mag = {0}; - mip_aiding_frame_config_command_rotation rotation_oflow = {0}; - mip_aiding_frame_config_command_rotation rotation_ext_heading = {0}; + mip_aiding_frame_config_command_rotation rotation_sens = {}; + mip_aiding_frame_config_command_rotation rotation_gnss = {}; + mip_aiding_frame_config_command_rotation rotation_ext_mag = {}; + mip_aiding_frame_config_command_rotation rotation_oflow = {}; + mip_aiding_frame_config_command_rotation rotation_ext_heading = {}; float ext_mag_uncert = 0.0; float opt_flow_uncert = 0.0; diff --git a/src/drivers/ins/sbgecom/CMakeLists.txt b/src/drivers/ins/sbgecom/CMakeLists.txt index e4c8362da3..b9778b59b3 100644 --- a/src/drivers/ins/sbgecom/CMakeLists.txt +++ b/src/drivers/ins/sbgecom/CMakeLists.txt @@ -40,6 +40,17 @@ add_subdirectory(sbgECom) add_dependencies(sbgECom prebuild_targets) +# Vendor tree warning relaxations. +# +# sbgECom is a third-party submodule (PX4/sbgECom) we do not own. +# These -Wno-* flags are scoped PRIVATE to the sbgECom target so they +# apply only when compiling vendor .c files, not to the PX4 wrapper +# (sbgecom.cpp/.hpp) which is built as a separate target via +# px4_add_module() below and must remain under PX4's standard -Wall -Werror. +# +# If you add a flag here, it should address a warning emitted by vendor +# code only. Warnings triggered in PX4-authored code must be fixed at +# the source, not silenced here. target_compile_options(sbgECom PRIVATE -Wno-format @@ -49,8 +60,15 @@ target_compile_options(sbgECom -Wno-type-limits -Wno-maybe-uninitialized -Wno-float-equal + -Wno-logical-op ) +# -Wno-typedef-redefinition is Clang-only. GCC rejects unrecognized +# warning flags under -Werror, so guard this by compiler. +if(CMAKE_C_COMPILER_ID MATCHES "Clang") + target_compile_options(sbgECom PRIVATE -Wno-typedef-redefinition) +endif() + if("${PX4_PLATFORM}" MATCHES "nuttx") target_compile_definitions(sbgECom PUBLIC __NUTTX__) endif() diff --git a/src/drivers/ins/sbgecom/sbgecom.cpp b/src/drivers/ins/sbgecom/sbgecom.cpp index 2739e73963..2f6ee53633 100644 --- a/src/drivers/ins/sbgecom/sbgecom.cpp +++ b/src/drivers/ins/sbgecom/sbgecom.cpp @@ -43,6 +43,7 @@ #include #include +#include #include #include #include @@ -323,9 +324,9 @@ void SbgEcom::handleLogEkfNav(const SbgEComLogUnion *ref_sbg_data, void *user_ar const double longitude = ref_sbg_data->ekfNavData.position[1]; const double altitude = ref_sbg_data->ekfNavData.position[2]; - const double north_velocity = ref_sbg_data->ekfNavData.velocity[0]; - const double east_velocity = ref_sbg_data->ekfNavData.velocity[1]; - const double down_velocity = ref_sbg_data->ekfNavData.velocity[2]; + const double north_velocity = static_cast(ref_sbg_data->ekfNavData.velocity[0]); + const double east_velocity = static_cast(ref_sbg_data->ekfNavData.velocity[1]); + const double down_velocity = static_cast(ref_sbg_data->ekfNavData.velocity[2]); if (!instance->_pos_ref.isInitialized()) { instance->_pos_ref.initReference(latitude, longitude, time_now_us); @@ -457,7 +458,7 @@ void SbgEcom::handleLogGnssPosVelHdt(SbgEComMsgId msg, const SbgEComLogUnion *re sensor_gps.latitude_deg = gnss_data->gps_pos.latitude; sensor_gps.longitude_deg = gnss_data->gps_pos.longitude; sensor_gps.altitude_msl_m = gnss_data->gps_pos.altitude; - sensor_gps.altitude_ellipsoid_m = gnss_data->gps_pos.undulation; + sensor_gps.altitude_ellipsoid_m = static_cast(gnss_data->gps_pos.undulation); sensor_gps.s_variance_m_s = sqrt(pow(gnss_data->gps_vel.velocityAcc[0], 2) + pow(gnss_data->gps_vel.velocityAcc[1], 2) + @@ -831,18 +832,18 @@ void SbgEcom::send_config(SbgEComHandle *pHandle, const char *config) sbgEComCmdApiReplyConstruct(&reply); - sbgEComCmdApiPost(pHandle, "/api/v1/settings", NULL, config, &reply); + sbgEComCmdApiPost(pHandle, "/api/v1/settings", nullptr, config, &reply); if (!sbgEComCmdApiReplySuccessful(&reply)) { PX4_ERR("Fail to apply SBG configuration: %s", reply.pContent); } else { - bool need_reboot = (strstr(reply.pContent, NEED_REBOOT_STR) != NULL); - sbgEComCmdApiPost(pHandle, "/api/v1/settings/save", NULL, NULL, &reply); + bool need_reboot = (strstr(reply.pContent, NEED_REBOOT_STR) != nullptr); + sbgEComCmdApiPost(pHandle, "/api/v1/settings/save", nullptr, nullptr, &reply); if (need_reboot) { PX4_INFO("Reboot SBG device"); - sbgEComCmdApiPost(pHandle, "/api/v1/system/reboot", NULL, NULL, &reply); + sbgEComCmdApiPost(pHandle, "/api/v1/system/reboot", nullptr, nullptr, &reply); } } @@ -852,7 +853,7 @@ void SbgEcom::send_config(SbgEComHandle *pHandle, const char *config) void SbgEcom::send_config_file(SbgEComHandle *pHandle, const char *file_path) { int fd; - char *body = NULL; + char *body = nullptr; struct stat s; assert(pHandle); @@ -869,12 +870,35 @@ void SbgEcom::send_config_file(SbgEComHandle *pHandle, const char *file_path) body = (char *)malloc(s.st_size + 1); if (!body) { - PX4_ERR("Failed to allocate memory (%ld) - %s", s.st_size + 1, strerror(get_errno())); + PX4_ERR("Failed to allocate memory (%lld) - %s", + static_cast(s.st_size + 1), + strerror(errno)); close(fd); return; } - read(fd, body, s.st_size); + ssize_t total_read = 0; + + while (total_read < s.st_size) { + const ssize_t ret = read(fd, body + total_read, s.st_size - total_read); + + if (ret < 0) { + PX4_ERR("Read failed: %s", strerror(errno)); + free(body); + close(fd); + return; + } + + if (ret == 0) { + PX4_ERR("Read failed: unexpected end of file"); + free(body); + close(fd); + return; + } + + total_read += ret; + } + body[s.st_size] = '\0'; send_config(pHandle, body); @@ -896,7 +920,9 @@ int SbgEcom::init() error_code = sbgInterfaceSerialCreate(&_sbg_interface, _device_name, _baudrate); if (error_code == SBG_NO_ERROR) { - PX4_INFO("Serial interface created successfully on port: %s, baudrate: %ld", _device_name, _baudrate); + PX4_INFO("Serial interface created successfully on port: %s, baudrate: %ld", + _device_name, + static_cast(_baudrate)); } pSerialHandle = (int *)_sbg_interface.handle; diff --git a/src/drivers/ins/sbgecom/sbgecom.hpp b/src/drivers/ins/sbgecom/sbgecom.hpp index f73ade46f9..39ff5e5a77 100644 --- a/src/drivers/ins/sbgecom/sbgecom.hpp +++ b/src/drivers/ins/sbgecom/sbgecom.hpp @@ -218,7 +218,7 @@ private: SbgErrorCode sendMagLog(SbgEComHandle *handle, SbgEcom *instance); void set_device_id(uint32_t device_id); - uint32_t get_device_id(void); + uint32_t get_device_id(); // SBG interface and state variables SbgInterface _sbg_interface; @@ -241,7 +241,7 @@ private: int init_result; MapProjection _pos_ref{}; - double _gps_alt_ref{NAN}; + double _gps_alt_ref{static_cast(NAN)}; struct GnssData { bool pos_received = false; diff --git a/src/drivers/ins/vectornav/VectorNav.cpp b/src/drivers/ins/vectornav/VectorNav.cpp index 29eed67ca5..f720712697 100644 --- a/src/drivers/ins/vectornav/VectorNav.cpp +++ b/src/drivers/ins/vectornav/VectorNav.cpp @@ -504,7 +504,9 @@ bool VectorNav::init() VnError error = E_NONE; // change baudrate to max - if ((error = VnSensor_changeBaudrate(&_vs, DESIRED_BAUDRATE)) != E_NONE) { + error = VnSensor_changeBaudrate(&_vs, DESIRED_BAUDRATE); + + if (error != E_NONE) { PX4_ERR("Error changing baud rate failed: %d", error); VnSensor_disconnect(&_vs); return false; @@ -513,7 +515,9 @@ bool VectorNav::init() // query the sensor's model number char model_number[30] {}; - if ((error = VnSensor_readModelNumber(&_vs, model_number, sizeof(model_number))) != E_NONE) { + error = VnSensor_readModelNumber(&_vs, model_number, sizeof(model_number)); + + if (error != E_NONE) { PX4_ERR("Error reading model number %d", error); VnSensor_disconnect(&_vs); return false; @@ -522,7 +526,9 @@ bool VectorNav::init() // query the sensor's hardware revision uint32_t hardware_revision = 0; - if ((error = VnSensor_readHardwareRevision(&_vs, &hardware_revision)) != E_NONE) { + error = VnSensor_readHardwareRevision(&_vs, &hardware_revision); + + if (error != E_NONE) { PX4_ERR("Error reading HW revision %d", error); VnSensor_disconnect(&_vs); return false; @@ -531,7 +537,9 @@ bool VectorNav::init() // query the sensor's serial number uint32_t serial_number = 0; - if ((error = VnSensor_readSerialNumber(&_vs, &serial_number)) != E_NONE) { + error = VnSensor_readSerialNumber(&_vs, &serial_number); + + if (error != E_NONE) { PX4_ERR("Error reading serial number %d", error); VnSensor_disconnect(&_vs); return false; @@ -540,7 +548,9 @@ bool VectorNav::init() // query the sensor's firmware version char firmware_version[30] {}; - if ((error = VnSensor_readFirmwareVersion(&_vs, firmware_version, sizeof(firmware_version))) != E_NONE) { + error = VnSensor_readFirmwareVersion(&_vs, firmware_version, sizeof(firmware_version)); + + if (error != E_NONE) { PX4_ERR("Error reading firmware version %d", error); VnSensor_disconnect(&_vs); return false; @@ -623,7 +633,9 @@ bool VectorNav::configure() GPSGROUP_NONE ); - if ((error = VnSensor_writeBinaryOutput1(&_vs, &_binary_output_group_1, true)) != E_NONE) { + error = VnSensor_writeBinaryOutput1(&_vs, &_binary_output_group_1, true); + + if (error != E_NONE) { // char buffer[128]{}; // strFromVnError((char*)buffer, error); @@ -646,7 +658,9 @@ bool VectorNav::configure() GPSGROUP_NONE ); - if ((error = VnSensor_writeBinaryOutput2(&_vs, &_binary_output_group_2, true)) != E_NONE) { + error = VnSensor_writeBinaryOutput2(&_vs, &_binary_output_group_2, true); + + if (error != E_NONE) { PX4_ERR("Error writing binary output 2 %d", error); return false; } @@ -666,7 +680,9 @@ bool VectorNav::configure() GPSGROUP_NONE ); - if ((error = VnSensor_writeBinaryOutput3(&_vs, &_binary_output_group_3, true)) != E_NONE) { + error = VnSensor_writeBinaryOutput3(&_vs, &_binary_output_group_3, true); + + if (error != E_NONE) { PX4_ERR("Error writing binary output 3 %d", error); //return false; } @@ -719,7 +735,7 @@ void VectorNav::Run() const hrt_abstime time_last_valid_imu_us = _time_last_valid_imu_us.load(); if (_param_vn_mode.get() == 1) { - if ((time_last_valid_imu_us != 0) && (hrt_elapsed_time(&time_last_valid_imu_us) < 3_s)) + if ((time_last_valid_imu_us != 0) && (hrt_elapsed_time(&time_last_valid_imu_us) < 3_s)) { // update sensor_selection if configured in INS mode if ((_px4_accel.get_device_id() != 0) && (_px4_gyro.get_device_id() != 0)) { @@ -729,6 +745,7 @@ void VectorNav::Run() sensor_selection.timestamp = hrt_absolute_time(); _sensor_selection_pub.publish(sensor_selection); } + } } if ((time_configured_us != 0) && (hrt_elapsed_time(&time_last_valid_imu_us) > 5_s) diff --git a/src/drivers/ins/vectornav/VectorNav.hpp b/src/drivers/ins/vectornav/VectorNav.hpp index 0f062c85bd..2a723acc0c 100644 --- a/src/drivers/ins/vectornav/VectorNav.hpp +++ b/src/drivers/ins/vectornav/VectorNav.hpp @@ -59,7 +59,6 @@ extern "C" { #include #include #include -#include #include #include #include @@ -96,7 +95,6 @@ public: int print_status() override; private: - bool init(); bool configure(); @@ -109,6 +107,10 @@ private: void sensorCallback(VnUartPacket *packet); +private: + DEFINE_PARAMETERS( + (ParamInt) _param_vn_mode + ) char _port[20] {}; bool _initialized{false}; @@ -158,7 +160,6 @@ private: perf_counter_t _local_position_pub_interval_perf{perf_alloc(PC_INTERVAL, MODULE_NAME": local position publish interval")}; perf_counter_t _global_position_pub_interval_perf{perf_alloc(PC_INTERVAL, MODULE_NAME": global position publish interval")}; - // TODO: params for GNSS antenna offsets // A // B @@ -180,8 +181,4 @@ private: // VN_GNSS_ANTB_POS_X // Uncertainty in the X-axis position measurement. - - DEFINE_PARAMETERS( - (ParamInt) _param_vn_mode - ) }; diff --git a/src/drivers/ins/vectornav/libvnc/.clang-tidy b/src/drivers/ins/vectornav/libvnc/.clang-tidy new file mode 100644 index 0000000000..f97c26ca7f --- /dev/null +++ b/src/drivers/ins/vectornav/libvnc/.clang-tidy @@ -0,0 +1,4 @@ +--- +Checks: '-clang-analyzer-cplusplus.NewDeleteLeaks' +WarningsAsErrors: '' +... diff --git a/src/drivers/irlock/CMakeLists.txt b/src/drivers/irlock/CMakeLists.txt index 7d376f2406..00813875e0 100644 --- a/src/drivers/irlock/CMakeLists.txt +++ b/src/drivers/irlock/CMakeLists.txt @@ -37,4 +37,6 @@ px4_add_module( -Wno-cast-align # TODO: fix and enable SRCS irlock.cpp + MODULE_CONFIG + parameters.yaml ) diff --git a/src/drivers/irlock/parameters.c b/src/drivers/irlock/parameters.c deleted file mode 100644 index 3135165793..0000000000 --- a/src/drivers/irlock/parameters.c +++ /dev/null @@ -1,41 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2022 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * IR-LOCK Sensor (external I2C) - * - * @reboot_required true - * @group Sensors - * @boolean - */ -PARAM_DEFINE_INT32(SENS_EN_IRLOCK, 0); diff --git a/src/drivers/irlock/parameters.yaml b/src/drivers/irlock/parameters.yaml new file mode 100644 index 0000000000..6e2607cf0a --- /dev/null +++ b/src/drivers/irlock/parameters.yaml @@ -0,0 +1,10 @@ +module_name: irlock +parameters: +- group: Sensors + definitions: + SENS_EN_IRLOCK: + description: + short: IR-LOCK Sensor (external I2C) + type: boolean + default: 0 + reboot_required: true diff --git a/src/drivers/linux_pwm_out/linux_pwm_out.cpp b/src/drivers/linux_pwm_out/linux_pwm_out.cpp index f5235f904a..c8fa59e637 100644 --- a/src/drivers/linux_pwm_out/linux_pwm_out.cpp +++ b/src/drivers/linux_pwm_out/linux_pwm_out.cpp @@ -97,10 +97,15 @@ int LinuxPWMOut::task_spawn(int argc, char *argv[]) return PX4_ERROR; } -bool LinuxPWMOut::updateOutputs(uint16_t outputs[MAX_ACTUATORS], - unsigned num_outputs, unsigned num_control_groups_updated) +bool LinuxPWMOut::updateOutputs(float outputs[MAX_ACTUATORS], unsigned num_outputs, unsigned num_control_groups_updated) { - _pwm_out->send_output_pwm(outputs, num_outputs); + uint16_t hw_outputs[MAX_ACTUATORS] {}; + + for (unsigned i = 0; i < num_outputs; i++) { + hw_outputs[i] = static_cast(lroundf(outputs[i])); + } + + _pwm_out->send_output_pwm(hw_outputs, num_outputs); return true; } diff --git a/src/drivers/linux_pwm_out/linux_pwm_out.hpp b/src/drivers/linux_pwm_out/linux_pwm_out.hpp index ab8b41653e..d63e29c607 100644 --- a/src/drivers/linux_pwm_out/linux_pwm_out.hpp +++ b/src/drivers/linux_pwm_out/linux_pwm_out.hpp @@ -73,8 +73,7 @@ public: int init(); - bool updateOutputs(uint16_t outputs[MAX_ACTUATORS], - unsigned num_outputs, unsigned num_control_groups_updated) override; + bool updateOutputs(float outputs[MAX_ACTUATORS], unsigned num_outputs, unsigned num_control_groups_updated) override; private: static constexpr int MAX_ACTUATORS = 8; diff --git a/src/drivers/optical_flow/paa3905/CMakeLists.txt b/src/drivers/optical_flow/paa3905/CMakeLists.txt index baf8b50fde..1940f593e3 100644 --- a/src/drivers/optical_flow/paa3905/CMakeLists.txt +++ b/src/drivers/optical_flow/paa3905/CMakeLists.txt @@ -41,6 +41,8 @@ px4_add_module( PAA3905.cpp PAA3905.hpp PixArt_PAA3905_Registers.hpp + MODULE_CONFIG + parameters.yaml DEPENDS conversion drivers__device diff --git a/src/drivers/optical_flow/paa3905/parameters.c b/src/drivers/optical_flow/paa3905/parameters.c deleted file mode 100644 index 2646721d94..0000000000 --- a/src/drivers/optical_flow/paa3905/parameters.c +++ /dev/null @@ -1,42 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2022 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * PAA3905 Optical Flow - * - * @reboot_required true - * - * @boolean - * @group Sensors - */ -PARAM_DEFINE_INT32(SENS_EN_PAA3905, 0); diff --git a/src/drivers/optical_flow/paa3905/parameters.yaml b/src/drivers/optical_flow/paa3905/parameters.yaml new file mode 100644 index 0000000000..376c7c8693 --- /dev/null +++ b/src/drivers/optical_flow/paa3905/parameters.yaml @@ -0,0 +1,10 @@ +module_name: paa3905 +parameters: +- group: Sensors + definitions: + SENS_EN_PAA3905: + description: + short: PAA3905 Optical Flow + type: boolean + default: 0 + reboot_required: true diff --git a/src/drivers/optical_flow/paw3902/CMakeLists.txt b/src/drivers/optical_flow/paw3902/CMakeLists.txt index f76c0b5606..1f558258f7 100644 --- a/src/drivers/optical_flow/paw3902/CMakeLists.txt +++ b/src/drivers/optical_flow/paw3902/CMakeLists.txt @@ -41,6 +41,8 @@ px4_add_module( PAW3902.cpp PAW3902.hpp PixArt_PAW3902_Registers.hpp + MODULE_CONFIG + parameters.yaml DEPENDS conversion drivers__device diff --git a/src/drivers/optical_flow/paw3902/parameters.c b/src/drivers/optical_flow/paw3902/parameters.c deleted file mode 100644 index e2ce1da533..0000000000 --- a/src/drivers/optical_flow/paw3902/parameters.c +++ /dev/null @@ -1,42 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2019-2022 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * PAW3902/PAW3903 Optical Flow - * - * @reboot_required true - * - * @boolean - * @group Sensors - */ -PARAM_DEFINE_INT32(SENS_EN_PAW3902, 0); diff --git a/src/drivers/optical_flow/paw3902/parameters.yaml b/src/drivers/optical_flow/paw3902/parameters.yaml new file mode 100644 index 0000000000..8fe6421add --- /dev/null +++ b/src/drivers/optical_flow/paw3902/parameters.yaml @@ -0,0 +1,10 @@ +module_name: paw3902 +parameters: +- group: Sensors + definitions: + SENS_EN_PAW3902: + description: + short: PAW3902/PAW3903 Optical Flow + type: boolean + default: 0 + reboot_required: true diff --git a/src/drivers/optical_flow/pmw3901/CMakeLists.txt b/src/drivers/optical_flow/pmw3901/CMakeLists.txt index 33bb3c4511..0e1e9e54da 100644 --- a/src/drivers/optical_flow/pmw3901/CMakeLists.txt +++ b/src/drivers/optical_flow/pmw3901/CMakeLists.txt @@ -38,4 +38,6 @@ px4_add_module( pmw3901_main.cpp PMW3901.cpp PMW3901.hpp + MODULE_CONFIG + parameters.yaml ) diff --git a/src/drivers/optical_flow/pmw3901/parameters.c b/src/drivers/optical_flow/pmw3901/parameters.c deleted file mode 100644 index 74e9a48266..0000000000 --- a/src/drivers/optical_flow/pmw3901/parameters.c +++ /dev/null @@ -1,42 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2019 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * PMW3901 Optical Flow - * - * @reboot_required true - * - * @boolean - * @group Sensors - */ -PARAM_DEFINE_INT32(SENS_EN_PMW3901, 0); diff --git a/src/drivers/optical_flow/pmw3901/parameters.yaml b/src/drivers/optical_flow/pmw3901/parameters.yaml new file mode 100644 index 0000000000..a4a07cf55d --- /dev/null +++ b/src/drivers/optical_flow/pmw3901/parameters.yaml @@ -0,0 +1,10 @@ +module_name: pmw3901 +parameters: +- group: Sensors + definitions: + SENS_EN_PMW3901: + description: + short: PMW3901 Optical Flow + type: boolean + default: 0 + reboot_required: true diff --git a/src/drivers/optical_flow/px4flow/CMakeLists.txt b/src/drivers/optical_flow/px4flow/CMakeLists.txt index e3928d80d1..5c7c6ea202 100644 --- a/src/drivers/optical_flow/px4flow/CMakeLists.txt +++ b/src/drivers/optical_flow/px4flow/CMakeLists.txt @@ -37,4 +37,6 @@ px4_add_module( -Wno-cast-align # TODO: fix and enable SRCS px4flow.cpp + MODULE_CONFIG + parameters.yaml ) diff --git a/src/drivers/optical_flow/px4flow/parameters.c b/src/drivers/optical_flow/px4flow/parameters.c deleted file mode 100644 index 485dd08416..0000000000 --- a/src/drivers/optical_flow/px4flow/parameters.c +++ /dev/null @@ -1,42 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2019 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * PX4 Flow Optical Flow - * - * @reboot_required true - * - * @boolean - * @group Sensors - */ -PARAM_DEFINE_INT32(SENS_EN_PX4FLOW, 0); diff --git a/src/drivers/optical_flow/px4flow/parameters.yaml b/src/drivers/optical_flow/px4flow/parameters.yaml new file mode 100644 index 0000000000..64bc82e59e --- /dev/null +++ b/src/drivers/optical_flow/px4flow/parameters.yaml @@ -0,0 +1,10 @@ +module_name: px4flow +parameters: +- group: Sensors + definitions: + SENS_EN_PX4FLOW: + description: + short: PX4 Flow Optical Flow + type: boolean + default: 0 + reboot_required: true diff --git a/src/drivers/osd/atxxxx/CMakeLists.txt b/src/drivers/osd/atxxxx/CMakeLists.txt index 748f6aa4dc..a432d4d468 100644 --- a/src/drivers/osd/atxxxx/CMakeLists.txt +++ b/src/drivers/osd/atxxxx/CMakeLists.txt @@ -35,6 +35,8 @@ px4_add_module( MAIN atxxxx SRCS atxxxx.cpp + MODULE_CONFIG + params.yaml DEPENDS px4_work_queue ) diff --git a/src/drivers/osd/atxxxx/params.c b/src/drivers/osd/atxxxx/params.c deleted file mode 100644 index 1836522c94..0000000000 --- a/src/drivers/osd/atxxxx/params.c +++ /dev/null @@ -1,48 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2018-2019 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** -* Enable/Disable the ATXXX OSD Chip -* -* Configure the ATXXXX OSD Chip (mounted on the OmnibusF4SD board) and -* select the transmission standard. -* -* @value 0 Disabled -* @value 1 NTSC -* @value 2 PAL -* -* @reboot_required true -* @group OSD -* -*/ -PARAM_DEFINE_INT32(OSD_ATXXXX_CFG, 0); diff --git a/src/drivers/osd/atxxxx/params.yaml b/src/drivers/osd/atxxxx/params.yaml new file mode 100644 index 0000000000..63053108a1 --- /dev/null +++ b/src/drivers/osd/atxxxx/params.yaml @@ -0,0 +1,17 @@ +module_name: atxxxx +parameters: +- group: OSD + definitions: + OSD_ATXXXX_CFG: + description: + short: Enable/Disable the ATXXX OSD Chip + long: |- + Configure the ATXXXX OSD Chip (mounted on the OmnibusF4SD board) and + select the transmission standard. + type: enum + values: + 0: Disabled + 1: NTSC + 2: PAL + default: 0 + reboot_required: true diff --git a/src/drivers/osd/msp_osd/MspV1.cpp b/src/drivers/osd/msp_osd/MspV1.cpp index 1b5371302f..24165ce9e6 100644 --- a/src/drivers/osd/msp_osd/MspV1.cpp +++ b/src/drivers/osd/msp_osd/MspV1.cpp @@ -170,7 +170,9 @@ int MspV1::Receive(uint8_t *payload, uint8_t *message_id) } while (bytes_available > 4) { - if ((ret = read(_fd, header, 1)) != 1) { + ret = read(_fd, header, 1); + + if (ret != 1) { return ret; } @@ -186,7 +188,9 @@ int MspV1::Receive(uint8_t *payload, uint8_t *message_id) return -EWOULDBLOCK; } - if ((ret = read(_fd, &header[1], 4)) != 4) { + ret = read(_fd, &header[1], 4); + + if (ret != 4) { return ret; } @@ -198,7 +202,9 @@ int MspV1::Receive(uint8_t *payload, uint8_t *message_id) payload_size = header[3]; *message_id = header[4]; - if ((ret = read(_fd, payload, payload_size + MSP_CRC_SIZE)) != payload_size + MSP_CRC_SIZE) { + ret = read(_fd, payload, payload_size + MSP_CRC_SIZE); + + if (ret != payload_size + MSP_CRC_SIZE) { if (ret != -EWOULDBLOCK) { has_header = false; } diff --git a/src/drivers/pca9685_pwm_out/PCA9685.h b/src/drivers/pca9685_pwm_out/PCA9685.h index d22b4cec22..77aa1cf756 100644 --- a/src/drivers/pca9685_pwm_out/PCA9685.h +++ b/src/drivers/pca9685_pwm_out/PCA9685.h @@ -35,6 +35,7 @@ #include #include #include +#include #define PCA9685_REG_MODE1 0x00 // Mode register 1 #define PCA9685_REG_MODE2 0x01 // Mode register 2 diff --git a/src/drivers/pca9685_pwm_out/main.cpp b/src/drivers/pca9685_pwm_out/main.cpp index 9093c0831d..5b290bfa5b 100644 --- a/src/drivers/pca9685_pwm_out/main.cpp +++ b/src/drivers/pca9685_pwm_out/main.cpp @@ -73,8 +73,7 @@ public: static int custom_command(int argc, char *argv[]); static int print_usage(const char *reason = nullptr); - bool updateOutputs(uint16_t *outputs, unsigned num_outputs, - unsigned num_control_groups_updated) override; + bool updateOutputs(float outputs[MAX_ACTUATORS], unsigned num_outputs, unsigned num_control_groups_updated) override; int print_status() override; @@ -155,8 +154,7 @@ int PCA9685Wrapper::init() return PX4_OK; } -bool PCA9685Wrapper::updateOutputs(uint16_t *outputs, unsigned num_outputs, - unsigned num_control_groups_updated) +bool PCA9685Wrapper::updateOutputs(float outputs[MAX_ACTUATORS], unsigned num_outputs, unsigned num_control_groups_updated) { if (_state != STATE::RUNNING) { return false; } @@ -164,11 +162,13 @@ bool PCA9685Wrapper::updateOutputs(uint16_t *outputs, unsigned num_outputs, num_outputs = num_outputs > PCA9685_PWM_CHANNEL_COUNT ? PCA9685_PWM_CHANNEL_COUNT : num_outputs; for (uint8_t i = 0; i < num_outputs; ++i) { + uint16_t output = static_cast(lroundf(outputs[i])); + if (param_duty_mode & (1 << i)) { - low_level_outputs[i] = outputs[i]; + low_level_outputs[i] = output; } else { - low_level_outputs[i] = pca9685->calcRawFromPulse(outputs[i]); + low_level_outputs[i] = pca9685->calcRawFromPulse(output); } } @@ -332,7 +332,7 @@ that can be accepted by most ESCs and servos. ### Examples It is typically started with: -$ pca9685_pwm_out start -a 0x40 -b 1 +$ pca9685_pwm_out start -X -a 0x40 -b 1 )DESCR_STR"); @@ -346,13 +346,18 @@ $ pca9685_pwm_out start -a 0x40 -b 1 } int PCA9685Wrapper::print_status() { - int ret = ModuleBase::print_status(); - PX4_INFO("PCA9685 @I2C Bus %d, address 0x%.2x, real frequency %.2f", - pca9685->get_device_bus(), - pca9685->get_device_address(), - (double)(pca9685->getFreq())); + int ret = ModuleBase::print_status(); + PX4_INFO("PCA9685 @I2C Bus %d, address 0x%.2x, real frequency %.2f", + pca9685->get_device_bus(), + pca9685->get_device_address(), + (double)(pca9685->getFreq())); - return ret; + perf_print_counter(_cycle_perf); + perf_print_counter(_comms_errors); + perf_print_counter(_registers_invalid_reset); + perf_print_counter(_registers_transfer_reset); + + return ret; } int PCA9685Wrapper::custom_command(int argc, char **argv) { @@ -360,92 +365,43 @@ int PCA9685Wrapper::custom_command(int argc, char **argv) { } int PCA9685Wrapper::task_spawn(int argc, char **argv) { - int ch; - int address = PCA9685_DEFAULT_ADDRESS; - int iicbus = PCA9685_DEFAULT_IICBUS; + BusCLIArguments cli{true, false}; + cli.default_i2c_frequency = 400000; + cli.i2c_address = PCA9685_DEFAULT_ADDRESS; + cli.requested_bus = PCA9685_DEFAULT_IICBUS; + cli.parseDefaultArguments(argc, argv); - int32_t en_bus = 0; - param_t param_handle = param_find("PCA9685_EN_BUS"); - - if (param_handle != PARAM_INVALID) { - param_get(param_handle, &en_bus); - - if (en_bus > 0) { - iicbus = en_bus; - } - } - - int32_t i2c_addr = 0; - param_handle = param_find("PCA9685_I2C_ADDR"); - - if (param_handle != PARAM_INVALID) { - param_get(param_handle, &i2c_addr); - - if (i2c_addr > 0) { - address = i2c_addr; - } - } - - int myoptind = 1; - const char *myoptarg = nullptr; - while ((ch = px4_getopt(argc, argv, "a:b:", &myoptind, &myoptarg)) != EOF) { - switch (ch) { - case 'a': - errno = 0; - address = strtol(myoptarg, nullptr, 16); - if (errno != 0) { - PX4_WARN("Invalid address"); - return PX4_ERROR; - } - break; - - case 'b': - iicbus = strtol(myoptarg, nullptr, 10); - if (errno != 0) { - PX4_WARN("Invalid bus"); - return PX4_ERROR; - } - break; - - case '?': - PX4_WARN("Unsupported args"); - return PX4_ERROR; - - default: - break; - } - } - - auto *instance = new PCA9685Wrapper(); + auto *instance = new PCA9685Wrapper(); if (instance) { desc.object.store(instance); desc.task_id = task_id_is_work_queue; - instance->pca9685 = new PCA9685(iicbus, address); - if(instance->pca9685==nullptr){ - PX4_ERR("alloc failed"); - goto driverInstanceAllocFailed; - } + instance->pca9685 = new PCA9685(cli.requested_bus, cli.i2c_address); - if (instance->init() == PX4_OK) { - return PX4_OK; - } else { - PX4_ERR("driver init failed"); - delete instance->pca9685; - instance->pca9685=nullptr; - } - } else { - PX4_ERR("alloc failed"); - return PX4_ERROR; - } + if(instance->pca9685==nullptr){ + PX4_ERR("alloc failed"); + goto driverInstanceAllocFailed; + } + + if (instance->init() == PX4_OK) { + return PX4_OK; + } else { + PX4_ERR("driver init failed"); + delete instance->pca9685; + instance->pca9685=nullptr; + } + } else { + PX4_ERR("alloc failed"); + return PX4_ERROR; + } driverInstanceAllocFailed: delete instance; desc.object.store(nullptr); desc.task_id = -1; - return PX4_ERROR; + return PX4_ERROR; } void PCA9685Wrapper::updateParams() { diff --git a/src/drivers/pca9685_pwm_out/module.yaml b/src/drivers/pca9685_pwm_out/module.yaml index e10d8da38c..ce69223dd7 100644 --- a/src/drivers/pca9685_pwm_out/module.yaml +++ b/src/drivers/pca9685_pwm_out/module.yaml @@ -6,8 +6,8 @@ actuator_output: standard_params: disarmed: { min: 800, max: 2200, default: 1000 } min: { min: 800, max: 1400, default: 1100 } - max: { min: 1600, max: 2200, default: 1900 } center: { min: 800, max: 2200} + max: { min: 1600, max: 2200, default: 1900 } failsafe: { min: 800, max: 2200 } custom_params: - name: 'DUTY_EN' diff --git a/src/drivers/power_monitor/ina220/CMakeLists.txt b/src/drivers/power_monitor/ina220/CMakeLists.txt index e3a2f26012..aaa190f5b6 100644 --- a/src/drivers/power_monitor/ina220/CMakeLists.txt +++ b/src/drivers/power_monitor/ina220/CMakeLists.txt @@ -40,6 +40,8 @@ px4_add_module( SRCS ina220_main.cpp ina220.cpp + MODULE_CONFIG + ina220_params.yaml DEPENDS battery px4_work_queue diff --git a/src/drivers/power_monitor/ina220/ina220_params.c b/src/drivers/power_monitor/ina220/ina220_params.c deleted file mode 100644 index d07b8570a5..0000000000 --- a/src/drivers/power_monitor/ina220/ina220_params.c +++ /dev/null @@ -1,98 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2022 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Enable INA220 Power Monitor - * - * For systems a INA220 Power Monitor, this should be set to true - * - * @group Sensors - * @boolean - * @reboot_required true -*/ -PARAM_DEFINE_INT32(SENS_EN_INA220, 0); - -/** - * INA220 Power Monitor Config - * - * @group Sensors - * @min 0 - * @max 65535 - * @decimal 1 - * @increment 1 -*/ -PARAM_DEFINE_INT32(INA220_CONFIG, 8607); - -/** - * INA220 Power Monitor Battery Max Current - * - * @group Sensors - * @min 0.1 - * @max 500.0 - * @decimal 2 - * @increment 0.1 - */ -PARAM_DEFINE_FLOAT(INA220_CUR_BAT, 164.0f); - -/** - * INA220 Power Monitor Battery Shunt - * - * @group Sensors - * @min 0.000000001 - * @max 0.1 - * @decimal 10 - * @increment .000000001 - */ -PARAM_DEFINE_FLOAT(INA220_SHUNT_BAT, 0.0005f); - -/** - * INA220 Power Monitor Regulator Max Current - * - * @group Sensors - * @min 0.1 - * @max 500.0 - * @decimal 2 - * @increment 0.1 - */ -PARAM_DEFINE_FLOAT(INA220_CUR_REG, 164.0f); - -/** - * INA220 Power Monitor Regulator Shunt - * - * @group Sensors - * @min 0.000000001 - * @max 0.1 - * @decimal 10 - * @increment .000000001 - */ -PARAM_DEFINE_FLOAT(INA220_SHUNT_REG, 0.0005f); diff --git a/src/drivers/power_monitor/ina220/ina220_params.yaml b/src/drivers/power_monitor/ina220/ina220_params.yaml new file mode 100644 index 0000000000..7ce03a2003 --- /dev/null +++ b/src/drivers/power_monitor/ina220/ina220_params.yaml @@ -0,0 +1,56 @@ +module_name: ina220 +parameters: +- group: Sensors + definitions: + SENS_EN_INA220: + description: + short: Enable INA220 Power Monitor + long: For systems with an INA220 Power Monitor, this should be set to true + type: boolean + default: 0 + reboot_required: true + INA220_CONFIG: + description: + short: INA220 Power Monitor Config + type: int32 + default: 8607 + min: 0 + max: 65535 + decimal: 1 + increment: 1 + INA220_CUR_BAT: + description: + short: INA220 Power Monitor Battery Max Current + type: float + default: 164.0 + min: 0.1 + max: 500.0 + decimal: 2 + increment: 0.1 + INA220_SHUNT_BAT: + description: + short: INA220 Power Monitor Battery Shunt + type: float + default: 0.0005 + min: 1.0e-09 + max: 0.1 + decimal: 10 + increment: 1.0e-09 + INA220_CUR_REG: + description: + short: INA220 Power Monitor Regulator Max Current + type: float + default: 164.0 + min: 0.1 + max: 500.0 + decimal: 2 + increment: 0.1 + INA220_SHUNT_REG: + description: + short: INA220 Power Monitor Regulator Shunt + type: float + default: 0.0005 + min: 1.0e-09 + max: 0.1 + decimal: 10 + increment: 1.0e-09 diff --git a/src/drivers/power_monitor/ina226/CMakeLists.txt b/src/drivers/power_monitor/ina226/CMakeLists.txt index c80a2bdc7c..26fd043379 100644 --- a/src/drivers/power_monitor/ina226/CMakeLists.txt +++ b/src/drivers/power_monitor/ina226/CMakeLists.txt @@ -38,6 +38,8 @@ px4_add_module( SRCS ina226_main.cpp ina226.cpp + MODULE_CONFIG + ina226_params.yaml DEPENDS battery px4_work_queue diff --git a/src/drivers/power_monitor/ina226/ina226_params.c b/src/drivers/power_monitor/ina226/ina226_params.c deleted file mode 100644 index 90aa9312eb..0000000000 --- a/src/drivers/power_monitor/ina226/ina226_params.c +++ /dev/null @@ -1,79 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2019-2021 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Enable INA226 Power Monitor - * - * For systems a INA226 Power Monitor, this should be set to true - * - * @group Sensors - * @boolean - * @reboot_required true -*/ -PARAM_DEFINE_INT32(SENS_EN_INA226, 0); - -/** - * INA226 Power Monitor Config - * - * @group Sensors - * @min 0 - * @max 65535 - * @decimal 1 - * @increment 1 - * @reboot_required true -*/ -PARAM_DEFINE_INT32(INA226_CONFIG, 18139); - -/** - * INA226 Power Monitor Max Current - * - * @group Sensors - * @min 0.1 - * @max 200.0 - * @decimal 2 - * @increment 0.1 - * @reboot_required true - */ -PARAM_DEFINE_FLOAT(INA226_CURRENT, 164.0f); - -/** - * INA226 Power Monitor Shunt - * - * @group Sensors - * @min 0.000000001 - * @max 0.1 - * @decimal 10 - * @increment .000000001 - * @reboot_required true - */ -PARAM_DEFINE_FLOAT(INA226_SHUNT, 0.0005f); diff --git a/src/drivers/power_monitor/ina226/ina226_params.yaml b/src/drivers/power_monitor/ina226/ina226_params.yaml new file mode 100644 index 0000000000..77807ccd6f --- /dev/null +++ b/src/drivers/power_monitor/ina226/ina226_params.yaml @@ -0,0 +1,41 @@ +module_name: ina226 +parameters: +- group: Sensors + definitions: + SENS_EN_INA226: + description: + short: Enable INA226 Power Monitor + long: For systems with an INA226 Power Monitor, this should be set to true + type: boolean + default: 0 + reboot_required: true + INA226_CONFIG: + description: + short: INA226 Power Monitor Config + type: int32 + default: 18139 + min: 0 + max: 65535 + decimal: 1 + increment: 1 + reboot_required: true + INA226_CURRENT: + description: + short: INA226 Power Monitor Max Current + type: float + default: 164.0 + min: 0.1 + max: 200.0 + decimal: 2 + increment: 0.1 + reboot_required: true + INA226_SHUNT: + description: + short: INA226 Power Monitor Shunt + type: float + default: 0.0005 + min: 1.0e-09 + max: 0.1 + decimal: 10 + increment: 1.0e-09 + reboot_required: true diff --git a/src/drivers/power_monitor/ina228/CMakeLists.txt b/src/drivers/power_monitor/ina228/CMakeLists.txt index 32af49b463..1a5ba76beb 100644 --- a/src/drivers/power_monitor/ina228/CMakeLists.txt +++ b/src/drivers/power_monitor/ina228/CMakeLists.txt @@ -38,6 +38,8 @@ px4_add_module( SRCS ina228_main.cpp ina228.cpp + MODULE_CONFIG + ina228_params.yaml DEPENDS battery px4_work_queue diff --git a/src/drivers/power_monitor/ina228/ina228_params.c b/src/drivers/power_monitor/ina228/ina228_params.c deleted file mode 100644 index 4895a5bf8a..0000000000 --- a/src/drivers/power_monitor/ina228/ina228_params.c +++ /dev/null @@ -1,79 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2021 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Enable INA228 Power Monitor - * - * For systems a INA228 Power Monitor, this should be set to true - * - * @group Sensors - * @boolean - * @reboot_required true -*/ -PARAM_DEFINE_INT32(SENS_EN_INA228, 0); - -/** - * INA228 Power Monitor Config - * - * @group Sensors - * @min 0 - * @max 65535 - * @decimal 1 - * @increment 1 - * @reboot_required true -*/ -PARAM_DEFINE_INT32(INA228_CONFIG, 63779); - -/** - * INA228 Power Monitor Max Current - * - * @group Sensors - * @min 0.1 - * @max 327.68 - * @decimal 2 - * @increment 0.1 - * @reboot_required true - */ -PARAM_DEFINE_FLOAT(INA228_CURRENT, 327.68f); - -/** - * INA228 Power Monitor Shunt - * - * @group Sensors - * @min 0.000000001 - * @max 0.1 - * @decimal 10 - * @increment .000000001 - * @reboot_required true - */ -PARAM_DEFINE_FLOAT(INA228_SHUNT, 0.0005f); diff --git a/src/drivers/power_monitor/ina228/ina228_params.yaml b/src/drivers/power_monitor/ina228/ina228_params.yaml new file mode 100644 index 0000000000..1b6997a344 --- /dev/null +++ b/src/drivers/power_monitor/ina228/ina228_params.yaml @@ -0,0 +1,41 @@ +module_name: ina228 +parameters: +- group: Sensors + definitions: + SENS_EN_INA228: + description: + short: Enable INA228 Power Monitor + long: For systems with an INA228 Power Monitor, this should be set to true + type: boolean + default: 0 + reboot_required: true + INA228_CONFIG: + description: + short: INA228 Power Monitor Config + type: int32 + default: 63779 + min: 0 + max: 65535 + decimal: 1 + increment: 1 + reboot_required: true + INA228_CURRENT: + description: + short: INA228 Power Monitor Max Current + type: float + default: 327.68 + min: 0.1 + max: 327.68 + decimal: 2 + increment: 0.1 + reboot_required: true + INA228_SHUNT: + description: + short: INA228 Power Monitor Shunt + type: float + default: 0.0005 + min: 1.0e-09 + max: 0.1 + decimal: 10 + increment: 1.0e-09 + reboot_required: true diff --git a/src/drivers/power_monitor/ina238/CMakeLists.txt b/src/drivers/power_monitor/ina238/CMakeLists.txt index 311fdad662..7b5545dcc0 100644 --- a/src/drivers/power_monitor/ina238/CMakeLists.txt +++ b/src/drivers/power_monitor/ina238/CMakeLists.txt @@ -38,6 +38,8 @@ px4_add_module( SRCS ina238_main.cpp ina238.cpp + MODULE_CONFIG + ina238_params.yaml DEPENDS battery px4_work_queue diff --git a/src/drivers/power_monitor/ina238/ina238_params.c b/src/drivers/power_monitor/ina238/ina238_params.c deleted file mode 100644 index 0db7f7e3bf..0000000000 --- a/src/drivers/power_monitor/ina238/ina238_params.c +++ /dev/null @@ -1,67 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2021 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Enable INA238 Power Monitor - * - * For systems a INA238 Power Monitor, this should be set to true - * - * @group Sensors - * @boolean - * @reboot_required true -*/ -PARAM_DEFINE_INT32(SENS_EN_INA238, 0); - -/** - * INA238 Power Monitor Max Current - * - * @group Sensors - * @min 0.1 - * @max 327.68 - * @decimal 2 - * @increment 0.1 - * @reboot_required true - */ -PARAM_DEFINE_FLOAT(INA238_CURRENT, 327.68f); - -/** - * INA238 Power Monitor Shunt - * - * @group Sensors - * @min 0.000000001 - * @max 0.1 - * @decimal 10 - * @increment .000000001 - * @reboot_required true - */ -PARAM_DEFINE_FLOAT(INA238_SHUNT, 0.0005f); diff --git a/src/drivers/power_monitor/ina238/ina238_params.yaml b/src/drivers/power_monitor/ina238/ina238_params.yaml new file mode 100644 index 0000000000..fce50416d6 --- /dev/null +++ b/src/drivers/power_monitor/ina238/ina238_params.yaml @@ -0,0 +1,31 @@ +module_name: ina238 +parameters: +- group: Sensors + definitions: + SENS_EN_INA238: + description: + short: Enable INA238 Power Monitor + long: For systems with an INA238 Power Monitor, this should be set to true + type: boolean + default: 0 + reboot_required: true + INA238_CURRENT: + description: + short: INA238 Power Monitor Max Current + type: float + default: 327.68 + min: 0.1 + max: 327.68 + decimal: 2 + increment: 0.1 + reboot_required: true + INA238_SHUNT: + description: + short: INA238 Power Monitor Shunt + type: float + default: 0.0005 + min: 1.0e-09 + max: 0.1 + decimal: 10 + increment: 1.0e-09 + reboot_required: true diff --git a/src/drivers/power_monitor/voxlpm/CMakeLists.txt b/src/drivers/power_monitor/voxlpm/CMakeLists.txt index c1043a7d7d..41527d0df4 100644 --- a/src/drivers/power_monitor/voxlpm/CMakeLists.txt +++ b/src/drivers/power_monitor/voxlpm/CMakeLists.txt @@ -36,6 +36,8 @@ px4_add_module( SRCS voxlpm.cpp voxlpm_main.cpp + MODULE_CONFIG + voxlpm_params.yaml DEPENDS battery px4_work_queue diff --git a/src/drivers/power_monitor/voxlpm/voxlpm_params.c b/src/drivers/power_monitor/voxlpm/voxlpm_params.c deleted file mode 100644 index 5bfee0c07f..0000000000 --- a/src/drivers/power_monitor/voxlpm/voxlpm_params.c +++ /dev/null @@ -1,58 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2020 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * VOXL Power Monitor Shunt, Battery - * - * @reboot_required true - * - * @min 0.000000001 - * @max 0.1 - * @decimal 10 - * @increment .000000001 - * @group Sensors - */ -PARAM_DEFINE_FLOAT(VOXLPM_SHUNT_BAT, 0.00063f); - -/** - * VOXL Power Monitor Shunt, Regulator - * - * @reboot_required true - * - * @min 0.000000001 - * @max 0.1 - * @decimal 10 - * @increment .000000001 - * @group Sensors - */ -PARAM_DEFINE_FLOAT(VOXLPM_SHUNT_REG, 0.0056f); diff --git a/src/drivers/power_monitor/voxlpm/voxlpm_params.yaml b/src/drivers/power_monitor/voxlpm/voxlpm_params.yaml new file mode 100644 index 0000000000..60c715d000 --- /dev/null +++ b/src/drivers/power_monitor/voxlpm/voxlpm_params.yaml @@ -0,0 +1,24 @@ +module_name: voxlpm +parameters: +- group: Sensors + definitions: + VOXLPM_SHUNT_BAT: + description: + short: VOXL Power Monitor Shunt, Battery + type: float + default: 0.00063 + reboot_required: true + min: 1.0e-09 + max: 0.1 + decimal: 10 + increment: 1.0e-09 + VOXLPM_SHUNT_REG: + description: + short: VOXL Power Monitor Shunt, Regulator + type: float + default: 0.0056 + reboot_required: true + min: 1.0e-09 + max: 0.1 + decimal: 10 + increment: 1.0e-09 diff --git a/src/drivers/pps_capture/CMakeLists.txt b/src/drivers/pps_capture/CMakeLists.txt index cf613393f6..259b8b60eb 100644 --- a/src/drivers/pps_capture/CMakeLists.txt +++ b/src/drivers/pps_capture/CMakeLists.txt @@ -44,4 +44,6 @@ px4_add_module( -DPARAM_PREFIX="${PARAM_PREFIX}" SRCS PPSCapture.cpp + MODULE_CONFIG + pps_capture_params.yaml ) diff --git a/src/drivers/pps_capture/PPSCapture.cpp b/src/drivers/pps_capture/PPSCapture.cpp index 49923baa33..9460fe263e 100644 --- a/src/drivers/pps_capture/PPSCapture.cpp +++ b/src/drivers/pps_capture/PPSCapture.cpp @@ -48,6 +48,7 @@ ModuleBase::Descriptor PPSCapture::desc{task_spawn, custom_command, print_usage}; PPSCapture::PPSCapture() : + ModuleParams(nullptr), ScheduledWorkItem(MODULE_NAME, px4::wq_configurations::hp_default) { _pps_capture_pub.advertise(); @@ -117,9 +118,16 @@ void PPSCapture::Run() sensor_gps_s sensor_gps; - if (_sensor_gps_sub.update(&sensor_gps)) { - _last_gps_utc_timestamp = sensor_gps.time_utc_usec; - _last_gps_timestamp = sensor_gps.timestamp; + const uint32_t gps_device_id = static_cast(_param_pps_cap_gps_id.get()); + + for (auto &sub : _sensor_gps_subs) { + if (sub.update(&sensor_gps)) { + if (gps_device_id == 0 || sensor_gps.device_id == gps_device_id) { + _last_gps_utc_timestamp = sensor_gps.time_utc_usec; + _last_gps_timestamp = sensor_gps.timestamp; + break; + } + } } pps_capture_s pps_capture; diff --git a/src/drivers/pps_capture/PPSCapture.hpp b/src/drivers/pps_capture/PPSCapture.hpp index 075e198b7e..d598efb0a9 100644 --- a/src/drivers/pps_capture/PPSCapture.hpp +++ b/src/drivers/pps_capture/PPSCapture.hpp @@ -36,15 +36,17 @@ #include #include #include +#include #include #include #include +#include #include #include using namespace time_literals; -class PPSCapture : public ModuleBase, public px4::ScheduledWorkItem +class PPSCapture : public ModuleBase, public ModuleParams, public px4::ScheduledWorkItem { public: static Descriptor desc; @@ -71,16 +73,23 @@ public: private: void Run() override; + static constexpr int GPS_MAX_RECEIVERS = 2; + int _channel{-1}; uint32_t _pps_capture_gpio{0}; - uORB::Publication _pps_capture_pub{ORB_ID(pps_capture)}; - uORB::Subscription _sensor_gps_sub{ORB_ID(sensor_gps)}; - orb_advert_t _mavlink_log_pub{nullptr}; - hrt_abstime _hrt_timestamp{0}; + uORB::Publication _pps_capture_pub{ORB_ID(pps_capture)}; + uORB::SubscriptionMultiArray _sensor_gps_subs{ORB_ID::sensor_gps}; + orb_advert_t _mavlink_log_pub{nullptr}; + + hrt_abstime _hrt_timestamp{0}; hrt_abstime _last_gps_timestamp{0}; - uint64_t _last_gps_utc_timestamp{0}; - uint8_t _pps_rate_exceeded_counter{0}; - px4::atomic _pps_rate_failure{false}; + uint64_t _last_gps_utc_timestamp{0}; + uint8_t _pps_rate_exceeded_counter{0}; + px4::atomic _pps_rate_failure{false}; + + DEFINE_PARAMETERS( + (ParamInt) _param_pps_cap_gps_id + ) }; diff --git a/src/drivers/pps_capture/pps_capture_params.c b/src/drivers/pps_capture/pps_capture_params.c deleted file mode 100644 index 6f5bdaac64..0000000000 --- a/src/drivers/pps_capture/pps_capture_params.c +++ /dev/null @@ -1,43 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2021 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * PPS capture enable - * - * Enables the PPS capture module to refine the GPS time from pulses detected on a PWM pin configured as "PPS Input". - * - * @boolean - * @group GPS - * @reboot_required true - */ -PARAM_DEFINE_INT32(PPS_CAP_ENABLE, 0); diff --git a/src/drivers/pps_capture/pps_capture_params.yaml b/src/drivers/pps_capture/pps_capture_params.yaml new file mode 100644 index 0000000000..ec77c37195 --- /dev/null +++ b/src/drivers/pps_capture/pps_capture_params.yaml @@ -0,0 +1,26 @@ +module_name: pps_capture +parameters: +- group: GPS + definitions: + PPS_CAP_ENABLE: + description: + short: PPS capture enable + long: Enables the PPS capture module to refine the GPS time from pulses detected + on a PWM pin configured as "PPS Input". + type: boolean + default: 0 + reboot_required: true + PPS_CAP_GPS_ID: + description: + short: PPS capture GPS receiver device ID + long: | + Device ID of the GPS receiver that emits the PPS signal captured on the + configured PWM input pin. When set to 0 (default), the first available + GPS instance is used. + + The device ID can be obtained from the sensor_gps publication + (e.g. via listener sensor_gps). + type: int32 + default: 0 + min: 0 + reboot_required: true diff --git a/src/drivers/pwm_out/PWMOut.cpp b/src/drivers/pwm_out/PWMOut.cpp index bb32fb7152..49c0b35032 100644 --- a/src/drivers/pwm_out/PWMOut.cpp +++ b/src/drivers/pwm_out/PWMOut.cpp @@ -127,19 +127,18 @@ bool PWMOut::update_pwm_out_state(bool on) return true; } -bool PWMOut::updateOutputs(uint16_t outputs[MAX_ACTUATORS], - unsigned num_outputs, unsigned num_control_groups_updated) +bool PWMOut::updateOutputs(float outputs[MAX_ACTUATORS], unsigned num_outputs, unsigned num_control_groups_updated) { /* output to the servos */ if (_pwm_initialized) { for (size_t i = 0; i < num_outputs; i++) { if (!_mixing_output.isFunctionSet(i)) { // do not run any signal on disabled channels - outputs[i] = 0; + outputs[i] = 0.f; } if (_pwm_mask & (1 << i)) { - up_pwm_servo_set(i, outputs[i]); + up_pwm_servo_set(i, static_cast(lroundf(outputs[i]))); } } } diff --git a/src/drivers/pwm_out/PWMOut.hpp b/src/drivers/pwm_out/PWMOut.hpp index bae339b511..f055f1056d 100644 --- a/src/drivers/pwm_out/PWMOut.hpp +++ b/src/drivers/pwm_out/PWMOut.hpp @@ -73,8 +73,7 @@ public: /** @see ModuleBase::print_status() */ int print_status() override; - bool updateOutputs(uint16_t outputs[MAX_ACTUATORS], - unsigned num_outputs, unsigned num_control_groups_updated) override; + bool updateOutputs(float outputs[MAX_ACTUATORS], unsigned num_outputs, unsigned num_control_groups_updated) override; private: void Run() override; diff --git a/src/drivers/pwm_out/module.yaml b/src/drivers/pwm_out/module.yaml index 2c5e54e83d..8580807773 100644 --- a/src/drivers/pwm_out/module.yaml +++ b/src/drivers/pwm_out/module.yaml @@ -7,20 +7,23 @@ actuator_output: standard_params: disarmed: { min: 800, max: 2200, default: 1000 } min: { min: 800, max: 1400, default: 1000 } - max: { min: 1600, max: 2200, default: 2000 } center: { min: 800, max: 2200} + max: { min: 1600, max: 2200, default: 2000 } failsafe: { min: 800, max: 2200 } extra_function_groups: [ pwm_fmu ] pwm_timer_param: description: short: Output Protocol Configuration for ${label} long: | - Select which Output Protocol to use for outputs ${label}. + Select the output protocol for ${label}: PWM, OneShot, DShot, or Bidirectional DShot. Custom PWM rates can be used by directly setting any value >0. type: enum default: 400 values: + -8: BDShot150 + -7: BDShot300 + -6: BDShot600 -5: DShot150 -4: DShot300 -3: DShot600 diff --git a/src/drivers/px4io/CMakeLists.txt b/src/drivers/px4io/CMakeLists.txt index 6ad4f44ef2..20bd7932a2 100644 --- a/src/drivers/px4io/CMakeLists.txt +++ b/src/drivers/px4io/CMakeLists.txt @@ -41,6 +41,7 @@ px4_add_module( px4io_uploader.cpp MODULE_CONFIG module.yaml + px4io_params.yaml DEPENDS arch_px4io_serial button_publisher diff --git a/src/drivers/px4io/module.yaml b/src/drivers/px4io/module.yaml index 01d21a4afe..062042d4d4 100644 --- a/src/drivers/px4io/module.yaml +++ b/src/drivers/px4io/module.yaml @@ -9,6 +9,7 @@ actuator_output: standard_params: disarmed: { min: 800, max: 2200, default: 1000 } min: { min: 800, max: 1400, default: 1000 } + center: { min: 800, max: 2200} max: { min: 1600, max: 2200, default: 2000 } failsafe: { min: 800, max: 2200 } pwm_timer_param: diff --git a/src/drivers/px4io/px4io.cpp b/src/drivers/px4io/px4io.cpp index 6e61f6e736..671651ed60 100644 --- a/src/drivers/px4io/px4io.cpp +++ b/src/drivers/px4io/px4io.cpp @@ -155,8 +155,7 @@ public: uint16_t system_status() const { return _status; } - bool updateOutputs(uint16_t outputs[MAX_ACTUATORS], unsigned num_outputs, - unsigned num_control_groups_updated) override; + bool updateOutputs(float outputs[MAX_ACTUATORS], unsigned num_outputs, unsigned num_control_groups_updated) override; private: void Run() override; @@ -364,19 +363,22 @@ PX4IO::~PX4IO() perf_free(_interface_write_perf); } -bool PX4IO::updateOutputs(uint16_t outputs[MAX_ACTUATORS], - unsigned num_outputs, unsigned num_control_groups_updated) +bool PX4IO::updateOutputs(float outputs[MAX_ACTUATORS], unsigned num_outputs, unsigned num_control_groups_updated) { + uint16_t hw_outputs[MAX_ACTUATORS] {}; + for (size_t i = 0; i < num_outputs; i++) { if (!_mixing_output.isFunctionSet(i)) { // do not run any signal on disabled channels outputs[i] = 0; } + + hw_outputs[i] = static_cast(lroundf(outputs[i])); } if (!_test_fmu_fail) { /* output to the servos */ - io_reg_set(PX4IO_PAGE_DIRECT_PWM, 0, outputs, num_outputs); + io_reg_set(PX4IO_PAGE_DIRECT_PWM, 0, hw_outputs, num_outputs); } return true; @@ -504,7 +506,7 @@ void PX4IO::updateFailsafe() uint16_t values[PX4IO_MAX_ACTUATORS] {}; for (unsigned i = 0; i < _max_actuators; i++) { - values[i] = _mixing_output.actualFailsafeValue(i); + values[i] = static_cast(lroundf(_mixing_output.actualFailsafeValue(i))); } io_reg_set(PX4IO_PAGE_FAILSAFE_PWM, 0, values, _max_actuators); diff --git a/src/drivers/px4io/px4io_params.yaml b/src/drivers/px4io/px4io_params.yaml new file mode 100644 index 0000000000..4da2480ba2 --- /dev/null +++ b/src/drivers/px4io/px4io_params.yaml @@ -0,0 +1,10 @@ +module_name: px4io +parameters: +- group: PWM Outputs + definitions: + PWM_SBUS_MODE: + description: + short: S.BUS out + long: Set to 1 to enable S.BUS version 1 output instead of RSSI. + type: boolean + default: 0 diff --git a/src/drivers/rc/crsf_rc/CrsfParser.cpp b/src/drivers/rc/crsf_rc/CrsfParser.cpp index 1e8b8e0d0c..5bd8eba6ce 100644 --- a/src/drivers/rc/crsf_rc/CrsfParser.cpp +++ b/src/drivers/rc/crsf_rc/CrsfParser.cpp @@ -393,6 +393,18 @@ bool CrsfParser_TryParseCrsfPacket(CrsfPacket_t *const new_packet, CrsfParserSta QueueBuffer_Peek(&rx_queue, working_index++, &packet_size); QueueBuffer_Peek(&rx_queue, working_index++, &packet_type); + // Discard packets with packet_size too small to contain type + CRC. + // Without this guard, (packet_size - PACKET_SIZE_TYPE_SIZE) underflows + // the uint32_t working_segment_size, permanently stalling the parser. + if (packet_size < PACKET_SIZE_TYPE_SIZE) { + parser_statistics->invalid_unknown_packet_sizes++; + parser_state = PARSER_STATE_HEADER; + working_segment_size = HEADER_SIZE; + working_index = 0; + buffer_count = QueueBuffer_Count(&rx_queue); + continue; + } + working_descriptor = FindCrsfDescriptor((enum CRSF_PACKET_TYPE)packet_type); // If we know what this packet is... @@ -401,6 +413,15 @@ bool CrsfParser_TryParseCrsfPacket(CrsfPacket_t *const new_packet, CrsfParserSta if (working_descriptor->packet_size == -1) { working_segment_size = packet_size - PACKET_SIZE_TYPE_SIZE; + if (working_index + working_segment_size + CRC_SIZE > CRSF_MAX_PACKET_LEN) { + parser_statistics->invalid_known_packet_sizes++; + parser_state = PARSER_STATE_HEADER; + working_segment_size = HEADER_SIZE; + working_index = 0; + buffer_count = QueueBuffer_Count(&rx_queue); + continue; + } + } else { if (packet_size != working_descriptor->packet_size + PACKET_SIZE_TYPE_SIZE) { parser_statistics->invalid_known_packet_sizes++; diff --git a/src/drivers/roboclaw/Roboclaw.cpp b/src/drivers/roboclaw/Roboclaw.cpp index bf1b608e91..731d932116 100644 --- a/src/drivers/roboclaw/Roboclaw.cpp +++ b/src/drivers/roboclaw/Roboclaw.cpp @@ -156,15 +156,10 @@ int Roboclaw::initializeUART() } } -bool Roboclaw::updateOutputs(uint16_t outputs[MAX_ACTUATORS], - unsigned num_outputs, unsigned num_control_groups_updated) +bool Roboclaw::updateOutputs(float outputs[MAX_ACTUATORS], unsigned num_outputs, unsigned num_control_groups_updated) { - float right_motor_output = ((float)outputs[0] - 128.0f) / 127.f; - float left_motor_output = ((float)outputs[1] - 128.0f) / 127.f; - - setMotorSpeed(Motor::Right, right_motor_output); - setMotorSpeed(Motor::Left, left_motor_output); - + setMotorSpeed(Motor::Right, (outputs[0] - 127.0f) / 127.f); + setMotorSpeed(Motor::Left, (outputs[1] - 127.0f) / 127.f); return true; } @@ -246,7 +241,7 @@ void Roboclaw::setMotorSpeed(Motor motor, float value) // send command if (motor == Motor::Right) { - if (value > 0) { + if (value > 0.f) { command = Command::DriveForwardMotor1; } else { @@ -254,7 +249,7 @@ void Roboclaw::setMotorSpeed(Motor motor, float value) } } else if (motor == Motor::Left) { - if (value > 0) { + if (value > 0.f) { command = Command::DriveForwardMotor2; } else { @@ -291,15 +286,9 @@ void Roboclaw::resetEncoders() sendTransaction(Command::ResetEncoders, nullptr, 0); } -void Roboclaw::sendUnsigned7Bit(Command command, float data) +void Roboclaw::sendUnsigned7Bit(Command command, const float data) { - data = fabs(data); - - if (data >= 1.0f) { - data = 0.99f; - } - - auto byte = (uint8_t)(data * INT8_MAX); + uint8_t byte = static_cast(lroundf(fabs(data) * INT8_MAX)); sendTransaction(command, &byte, 1); } @@ -345,7 +334,7 @@ int Roboclaw::writeCommandWithPayload(Command command, uint8_t *wbuff, size_t by // Not all bytes sent if (bytes_written < packet_size) { - PX4_ERR("Only wrote %d out of %d bytes", bytes_written, bytes_to_write); + PX4_ERR("Only wrote %zu out of %zu bytes", bytes_written, bytes_to_write); return ERROR; } @@ -392,7 +381,7 @@ int Roboclaw::writeCommand(Command command) size_t bytes_written = write(_uart_fd, buffer, 2); if (bytes_written < 2) { - PX4_ERR("Only wrote %d out of %d bytes", bytes_written, 2); + PX4_ERR("Only wrote %zu out of %d bytes", bytes_written, 2); return ERROR; } diff --git a/src/drivers/roboclaw/Roboclaw.hpp b/src/drivers/roboclaw/Roboclaw.hpp index fd7050fe7a..d0ab6f75fa 100644 --- a/src/drivers/roboclaw/Roboclaw.hpp +++ b/src/drivers/roboclaw/Roboclaw.hpp @@ -79,8 +79,7 @@ public: void Run() override; /** @see OutputModuleInterface */ - bool updateOutputs(uint16_t outputs[MAX_ACTUATORS], - unsigned num_outputs, unsigned num_control_groups_updated) override; + bool updateOutputs(float outputs[MAX_ACTUATORS], unsigned num_outputs, unsigned num_control_groups_updated) override; void setMotorSpeed(Motor motor, float value); ///< rev/sec void setMotorDutyCycle(Motor motor, float value); diff --git a/src/drivers/roboclaw/module.yaml b/src/drivers/roboclaw/module.yaml index 1a4b58691c..6934cd28f4 100644 --- a/src/drivers/roboclaw/module.yaml +++ b/src/drivers/roboclaw/module.yaml @@ -10,9 +10,9 @@ actuator_output: - param_prefix: RBCLW channel_label: 'Channel' standard_params: - disarmed: { min: 128, max: 128, default: 128 } - min: { min: 1, max: 128, default: 1 } - max: { min: 128, max: 256, default: 256 } + disarmed: { min: 127, max: 127, default: 127 } + min: { min: 0, max: 127, default: 0 } + max: { min: 127, max: 254, default: 254 } failsafe: { min: 0, max: 257 } num_channels: 2 diff --git a/src/drivers/rpm/pcf8583/CMakeLists.txt b/src/drivers/rpm/pcf8583/CMakeLists.txt index 9eef9031a7..919e57f159 100644 --- a/src/drivers/rpm/pcf8583/CMakeLists.txt +++ b/src/drivers/rpm/pcf8583/CMakeLists.txt @@ -38,6 +38,8 @@ px4_add_module( PCF8583.cpp PCF8583.hpp pcf8583_main.cpp + MODULE_CONFIG + parameters.yaml DEPENDS drivers__device px4_work_queue diff --git a/src/drivers/rpm/pcf8583/parameters.c b/src/drivers/rpm/pcf8583/parameters.c deleted file mode 100644 index f34ea4ae6d..0000000000 --- a/src/drivers/rpm/pcf8583/parameters.c +++ /dev/null @@ -1,82 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2020 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** -* PCF8583 eneable driver -* -* Run PCF8583 driver automatically -* -* @reboot_required true -* @min 0 -* @max 1 -* @group Sensors -* @value 0 Disabled -* @value 1 Eneabled -*/ -PARAM_DEFINE_INT32(SENS_EN_PCF8583, 0); - - -/** - * PCF8583 rotorfreq (i2c) pool interval - * - * Determines how often the sensor is read out. - * - * @reboot_required true - * @group Sensors - * @unit us - */ -PARAM_DEFINE_INT32(PCF8583_POOL, 1000000); - -/** - * PCF8583 rotorfreq (i2c) pulse reset value - * - * Internal device counter is reset to 0 when overrun this value, - * counter is able to store up to 6 digits - * reset of counter takes some time - measurement with reset has worse accuracy. - * 0 means reset counter after every measurement. - * - * @reboot_required true - * @group Sensors - */ -PARAM_DEFINE_INT32(PCF8583_RESET, 500000); - -/** - * PCF8583 rotorfreq (i2c) pulse count - * - * Nmumber of signals per rotation of actuator - * - * @reboot_required true - * @group Sensors - * @min 1 - */ -PARAM_DEFINE_INT32(PCF8583_MAGNET, 2); diff --git a/src/drivers/rpm/pcf8583/parameters.yaml b/src/drivers/rpm/pcf8583/parameters.yaml new file mode 100644 index 0000000000..185878d4fe --- /dev/null +++ b/src/drivers/rpm/pcf8583/parameters.yaml @@ -0,0 +1,43 @@ +module_name: pcf8583 +parameters: +- group: Sensors + definitions: + SENS_EN_PCF8583: + description: + short: PCF8583 enable driver + long: Run PCF8583 driver automatically + type: enum + values: + 0: Disabled + 1: Enabled + default: 0 + reboot_required: true + min: 0 + max: 1 + PCF8583_POOL: + description: + short: PCF8583 rotorfreq (i2c) poll interval + long: Determines how often the sensor is read out. + type: int32 + default: 1000000 + reboot_required: true + unit: us + PCF8583_RESET: + description: + short: PCF8583 rotorfreq (i2c) pulse reset value + long: |- + Internal device counter is reset to 0 when overrun this value, + counter is able to store up to 6 digits + reset of counter takes some time - measurement with reset has worse accuracy. + 0 means reset counter after every measurement. + type: int32 + default: 500000 + reboot_required: true + PCF8583_MAGNET: + description: + short: PCF8583 rotorfreq (i2c) pulse count + long: Number of signals per rotation of actuator + type: int32 + default: 2 + reboot_required: true + min: 1 diff --git a/src/drivers/rpm_capture/CMakeLists.txt b/src/drivers/rpm_capture/CMakeLists.txt index b2639cba1d..76c2a50495 100644 --- a/src/drivers/rpm_capture/CMakeLists.txt +++ b/src/drivers/rpm_capture/CMakeLists.txt @@ -44,4 +44,6 @@ px4_add_module( -DPARAM_PREFIX="${PARAM_PREFIX}" SRCS RPMCapture.cpp + MODULE_CONFIG + rpm_capture_params.yaml ) diff --git a/src/drivers/rpm_capture/rpm_capture_params.c b/src/drivers/rpm_capture/rpm_capture_params.c deleted file mode 100644 index 5402d089ab..0000000000 --- a/src/drivers/rpm_capture/rpm_capture_params.c +++ /dev/null @@ -1,55 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2024 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * RPM capture enable - * - * Enables the RPM capture module to estimate RPM from pulses detected on a PWM pin configured as "RPM Input". - * - * @boolean - * @group System - * @reboot_required true - */ -PARAM_DEFINE_INT32(RPM_CAP_ENABLE, 0); - -/** - * Voltage pulses per revolution - * - * Number of voltage pulses per one rotor revolution on the capturing pin. - * - * @group System - * @min 1 - * @max 50 - * @reboot_required true - */ -PARAM_DEFINE_INT32(RPM_PULS_PER_REV, 1); diff --git a/src/drivers/rpm_capture/rpm_capture_params.yaml b/src/drivers/rpm_capture/rpm_capture_params.yaml new file mode 100644 index 0000000000..0ae1cb3a3f --- /dev/null +++ b/src/drivers/rpm_capture/rpm_capture_params.yaml @@ -0,0 +1,21 @@ +module_name: rpm_capture +parameters: +- group: System + definitions: + RPM_CAP_ENABLE: + description: + short: RPM capture enable + long: Enables the RPM capture module to estimate RPM from pulses detected + on a PWM pin configured as "RPM Input". + type: boolean + default: 0 + reboot_required: true + RPM_PULS_PER_REV: + description: + short: Voltage pulses per revolution + long: Number of voltage pulses per one rotor revolution on the capturing pin. + type: int32 + default: 1 + min: 1 + max: 50 + reboot_required: true diff --git a/src/drivers/smart_battery/batmon/CMakeLists.txt b/src/drivers/smart_battery/batmon/CMakeLists.txt index 8025d6a034..f660949b4b 100644 --- a/src/drivers/smart_battery/batmon/CMakeLists.txt +++ b/src/drivers/smart_battery/batmon/CMakeLists.txt @@ -38,6 +38,8 @@ px4_add_module( SRCS batmon.cpp + MODULE_CONFIG + batmon_params.yaml DEPENDS drivers__smbus_sbs drivers__smbus diff --git a/src/drivers/smart_battery/batmon/batmon_params.c b/src/drivers/smart_battery/batmon/batmon_params.c deleted file mode 100644 index 66a2bd28fc..0000000000 --- a/src/drivers/smart_battery/batmon/batmon_params.c +++ /dev/null @@ -1,61 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2021 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file batmon_params.c - * Smart battery driver parameters for BatMon (rotoye.com/batmon) - * - * @author Eohan George - */ - -/** - * Parameter to enable BatMon module - * - * @reboot_required true - * @min 0 - * @max 2 - * @group Sensors - * @value 0 Disabled - * @value 1 Start on default I2C addr(BATMON_ADDR_DFLT) - * @value 2 Autodetect I2C address (TODO) - */ -PARAM_DEFINE_INT32(BATMON_DRIVER_EN, 0); - -/** - * I2C address for BatMon battery 1 - * - * @reboot_required true - * @decimal 1 - * @group Sensors - */ -PARAM_DEFINE_INT32(BATMON_ADDR_DFLT, 11); //0x0B diff --git a/src/drivers/smart_battery/batmon/batmon_params.yaml b/src/drivers/smart_battery/batmon/batmon_params.yaml new file mode 100644 index 0000000000..6186bb7a79 --- /dev/null +++ b/src/drivers/smart_battery/batmon/batmon_params.yaml @@ -0,0 +1,23 @@ +module_name: batmon +parameters: +- group: Sensors + definitions: + BATMON_DRIVER_EN: + description: + short: Parameter to enable BatMon module + type: enum + values: + 0: Disabled + 1: Start on default I2C addr(BATMON_ADDR_DFLT) + 2: Autodetect I2C address (TODO) + default: 0 + reboot_required: true + min: 0 + max: 2 + BATMON_ADDR_DFLT: + description: + short: I2C address for BatMon battery 1 + type: int32 + default: 11 + reboot_required: true + decimal: 1 diff --git a/src/drivers/tap_esc/CMakeLists.txt b/src/drivers/tap_esc/CMakeLists.txt index cf5acf0685..cbf5a8a858 100644 --- a/src/drivers/tap_esc/CMakeLists.txt +++ b/src/drivers/tap_esc/CMakeLists.txt @@ -43,6 +43,7 @@ px4_add_module( TAP_ESC.hpp MODULE_CONFIG module.yaml + tap_esc_params.yaml DEPENDS led mixer_module diff --git a/src/drivers/tap_esc/TAP_ESC.cpp b/src/drivers/tap_esc/TAP_ESC.cpp index 0c41c7fca5..2e3fa6ed9c 100644 --- a/src/drivers/tap_esc/TAP_ESC.cpp +++ b/src/drivers/tap_esc/TAP_ESC.cpp @@ -243,7 +243,7 @@ void TAP_ESC::send_tune_packet(EscbusTunePacket &tune_packet) tap_esc_common::send_packet(_uart_fd, buzzer_packet, -1); } -bool TAP_ESC::updateOutputs(uint16_t outputs[MAX_ACTUATORS], unsigned num_outputs, +bool TAP_ESC::updateOutputs(float outputs[MAX_ACTUATORS], unsigned num_outputs, unsigned num_control_groups_updated) { if (_initialized) { @@ -252,26 +252,26 @@ bool TAP_ESC::updateOutputs(uint16_t outputs[MAX_ACTUATORS], unsigned num_output // We need to remap from the system default to what PX4's normal scheme is switch (num_outputs) { case 4: - motor_out[0] = outputs[2]; - motor_out[1] = outputs[1]; - motor_out[2] = outputs[3]; - motor_out[3] = outputs[0]; + motor_out[0] = static_cast(lroundf(outputs[2])); + motor_out[1] = static_cast(lroundf(outputs[1])); + motor_out[2] = static_cast(lroundf(outputs[3])); + motor_out[3] = static_cast(lroundf(outputs[0])); break; case 6: - motor_out[0] = outputs[3]; - motor_out[1] = outputs[0]; - motor_out[2] = outputs[4]; - motor_out[3] = outputs[2]; - motor_out[4] = outputs[1]; - motor_out[5] = outputs[5]; + motor_out[0] = static_cast(lroundf(outputs[3])); + motor_out[1] = static_cast(lroundf(outputs[0])); + motor_out[2] = static_cast(lroundf(outputs[4])); + motor_out[3] = static_cast(lroundf(outputs[2])); + motor_out[4] = static_cast(lroundf(outputs[1])); + motor_out[5] = static_cast(lroundf(outputs[5])); break; default: // Use the system defaults for (uint8_t i = 0; i < num_outputs; ++i) { - motor_out[i] = outputs[i]; + motor_out[i] = static_cast(lroundf(outputs[i])); } break; diff --git a/src/drivers/tap_esc/TAP_ESC.hpp b/src/drivers/tap_esc/TAP_ESC.hpp index 1b9ee392e3..2593368aac 100644 --- a/src/drivers/tap_esc/TAP_ESC.hpp +++ b/src/drivers/tap_esc/TAP_ESC.hpp @@ -101,8 +101,7 @@ public: int init(); - bool updateOutputs(uint16_t outputs[MAX_ACTUATORS], - unsigned num_outputs, unsigned num_control_groups_updated) override; + bool updateOutputs(float outputs[MAX_ACTUATORS], unsigned num_outputs, unsigned num_control_groups_updated) override; private: diff --git a/src/drivers/tap_esc/tap_esc_params.c b/src/drivers/tap_esc/tap_esc_params.c deleted file mode 100644 index fae32a918e..0000000000 --- a/src/drivers/tap_esc/tap_esc_params.c +++ /dev/null @@ -1,32 +0,0 @@ -/** - * @file tap_esc_params.c - * Parameters for esc version - * - */ - -/** - * Required esc firmware version. - * - * @group ESC - * @min 0 - * @max 65535 - */ -PARAM_DEFINE_INT32(ESC_FW_VER, 0); - -/** - * Required esc bootloader version. - * - * @group ESC - * @min 0 - * @max 65535 - */ -PARAM_DEFINE_INT32(ESC_BL_VER, 0); - -/** - * Required esc hardware version - * - * @group ESC - * @min 0 - * @max 65535 - */ -PARAM_DEFINE_INT32(ESC_HW_VER, 0); diff --git a/src/drivers/tap_esc/tap_esc_params.yaml b/src/drivers/tap_esc/tap_esc_params.yaml new file mode 100644 index 0000000000..75b5fc03b1 --- /dev/null +++ b/src/drivers/tap_esc/tap_esc_params.yaml @@ -0,0 +1,25 @@ +module_name: tap_esc +parameters: +- group: ESC + definitions: + ESC_FW_VER: + description: + short: Required esc firmware version + type: int32 + default: 0 + min: 0 + max: 65535 + ESC_BL_VER: + description: + short: Required esc bootloader version + type: int32 + default: 0 + min: 0 + max: 65535 + ESC_HW_VER: + description: + short: Required esc hardware version + type: int32 + default: 0 + min: 0 + max: 65535 diff --git a/src/drivers/tattu_can/TattuCan.cpp b/src/drivers/tattu_can/TattuCan.cpp index 9a89ff05e0..e6a8879218 100644 --- a/src/drivers/tattu_can/TattuCan.cpp +++ b/src/drivers/tattu_can/TattuCan.cpp @@ -98,9 +98,16 @@ void TattuCan::Run() while (receive(&received_frame) > 0) { + if (received_frame.payload_size == 0) { + break; + } + size_t payload_size = received_frame.payload_size - 1; - // TODO: add check to prevent buffer overflow from a corrupt 'payload_size' value - // TODO: AND look for TAIL_BYTE_START_OF_TRANSFER to indicate end of transfer. Untested... + + if (offset + payload_size > sizeof(tattu_message)) { + break; + } + memcpy(((char *)&tattu_message) + offset, received_frame.payload, payload_size); offset += payload_size; } diff --git a/src/drivers/telemetry/bst/CMakeLists.txt b/src/drivers/telemetry/bst/CMakeLists.txt index 1bbeec9b8d..31625d66da 100644 --- a/src/drivers/telemetry/bst/CMakeLists.txt +++ b/src/drivers/telemetry/bst/CMakeLists.txt @@ -36,5 +36,7 @@ px4_add_module( COMPILE_FLAGS SRCS bst.cpp + MODULE_CONFIG + bst_params.yaml DEPENDS ) diff --git a/src/drivers/telemetry/bst/bst.cpp b/src/drivers/telemetry/bst/bst.cpp index 7d7013651b..fdbf662e6d 100644 --- a/src/drivers/telemetry/bst/bst.cpp +++ b/src/drivers/telemetry/bst/bst.cpp @@ -197,6 +197,12 @@ int BST::probe() } uint8_t *reply_raw = reinterpret_cast(&dev_info_reply); + + if (dev_info_reply.length >= sizeof(dev_info_reply)) { + PX4_ERR("invalid reply length: %u", dev_info_reply.length); + return -EIO; + } + uint8_t crc_calc = crc8(reinterpret_cast(&dev_info_reply.type), dev_info_reply.length - 1); uint8_t crc_recv = reply_raw[dev_info_reply.length]; @@ -205,6 +211,10 @@ int BST::probe() return -EIO; } + if (dev_info_reply.payload.dev_name_len >= sizeof(dev_info_reply.payload.dev_name)) { + dev_info_reply.payload.dev_name_len = sizeof(dev_info_reply.payload.dev_name) - 1; + } + dev_info_reply.payload.dev_name[dev_info_reply.payload.dev_name_len] = '\0'; PX4_DEBUG("device info: hardware ID: 0x%08X, firmware ID: 0x%04X, device name: %s", (int)swap_uint32(dev_info_reply.payload.hw_id), (int)swap_uint16(dev_info_reply.payload.fw_id), diff --git a/src/drivers/telemetry/bst/bst_params.c b/src/drivers/telemetry/bst/bst_params.c deleted file mode 100644 index 5e6452ab10..0000000000 --- a/src/drivers/telemetry/bst/bst_params.c +++ /dev/null @@ -1,43 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2019 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Blacksheep telemetry Enable - * - * If true, the FMU will try to connect to Blacksheep telemetry on start up - * - * @boolean - * @reboot_required true - * @group Telemetry - */ -PARAM_DEFINE_INT32(TEL_BST_EN, 0); diff --git a/src/drivers/telemetry/bst/bst_params.yaml b/src/drivers/telemetry/bst/bst_params.yaml new file mode 100644 index 0000000000..6006fe2733 --- /dev/null +++ b/src/drivers/telemetry/bst/bst_params.yaml @@ -0,0 +1,12 @@ +module_name: bst +parameters: +- group: Telemetry + definitions: + TEL_BST_EN: + description: + short: Blacksheep telemetry Enable + long: If true, the FMU will try to connect to Blacksheep telemetry on start + up + type: boolean + default: 0 + reboot_required: true diff --git a/src/drivers/telemetry/iridiumsbd/CMakeLists.txt b/src/drivers/telemetry/iridiumsbd/CMakeLists.txt index fa2da626c6..1ac27795d2 100644 --- a/src/drivers/telemetry/iridiumsbd/CMakeLists.txt +++ b/src/drivers/telemetry/iridiumsbd/CMakeLists.txt @@ -39,5 +39,6 @@ px4_add_module( IridiumSBD.h MODULE_CONFIG module.yaml + iridiumsbd_params.yaml DEPENDS ) diff --git a/src/drivers/telemetry/iridiumsbd/iridiumsbd_params.c b/src/drivers/telemetry/iridiumsbd/iridiumsbd_params.c deleted file mode 100644 index 4f198b0001..0000000000 --- a/src/drivers/telemetry/iridiumsbd/iridiumsbd_params.c +++ /dev/null @@ -1,32 +0,0 @@ - -/** - * Satellite radio read interval. Only required to be nonzero if data is not sent using a ring call. - * - * @unit s - * @min 0 - * @max 5000 - * @group Iridium SBD - */ -PARAM_DEFINE_INT32(ISBD_READ_INT, 0); - -/** - * Iridium SBD session timeout - * - * @unit s - * @min 0 - * @max 300 - * @group Iridium SBD - */ -PARAM_DEFINE_INT32(ISBD_SBD_TIMEOUT, 60); - -/** - * Time the Iridium driver will wait for additional mavlink messages to combine them into one SBD message - * - * Value 0 turns the functionality off - * - * @unit ms - * @min 0 - * @max 500 - * @group Iridium SBD - */ -PARAM_DEFINE_INT32(ISBD_STACK_TIME, 0); diff --git a/src/drivers/telemetry/iridiumsbd/iridiumsbd_params.yaml b/src/drivers/telemetry/iridiumsbd/iridiumsbd_params.yaml new file mode 100644 index 0000000000..04f4306a42 --- /dev/null +++ b/src/drivers/telemetry/iridiumsbd/iridiumsbd_params.yaml @@ -0,0 +1,34 @@ +module_name: iridiumsbd +parameters: +- group: Iridium SBD + definitions: + ISBD_READ_INT: + description: + short: Iridium SBD read interval + long: Satellite radio read interval. Only required to be nonzero if data is + not sent using a ring call + type: int32 + default: 0 + unit: s + min: 0 + max: 5000 + ISBD_SBD_TIMEOUT: + description: + short: Iridium SBD session timeout + type: int32 + default: 60 + unit: s + min: 0 + max: 300 + ISBD_STACK_TIME: + description: + short: Iridium SBD message stacking wait time + long: |- + Time the Iridium driver will wait for additional mavlink messages to combine them into one SBD message + + Value 0 turns the functionality off + type: int32 + default: 0 + unit: ms + min: 0 + max: 500 diff --git a/src/drivers/temperature_sensor/mcp9808/CMakeLists.txt b/src/drivers/temperature_sensor/mcp9808/CMakeLists.txt index 108858606b..535dd5157f 100644 --- a/src/drivers/temperature_sensor/mcp9808/CMakeLists.txt +++ b/src/drivers/temperature_sensor/mcp9808/CMakeLists.txt @@ -39,6 +39,8 @@ px4_add_module( mcp9808_main.cpp mcp9808.cpp mcp9808.h + MODULE_CONFIG + mcp9808_params.yaml DEPENDS px4_work_queue ) diff --git a/src/drivers/temperature_sensor/mcp9808/mcp9808_params.c b/src/drivers/temperature_sensor/mcp9808/mcp9808_params.c deleted file mode 100644 index 8dc0b5241c..0000000000 --- a/src/drivers/temperature_sensor/mcp9808/mcp9808_params.c +++ /dev/null @@ -1,41 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2025 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Enable MCP9808 temperature sensor (external I2C) - * - * @reboot_required true - * @group Sensors - * @boolean - */ -PARAM_DEFINE_INT32(SENS_EN_MCP9808, 0); diff --git a/src/drivers/temperature_sensor/mcp9808/mcp9808_params.yaml b/src/drivers/temperature_sensor/mcp9808/mcp9808_params.yaml new file mode 100644 index 0000000000..1d5e75c65d --- /dev/null +++ b/src/drivers/temperature_sensor/mcp9808/mcp9808_params.yaml @@ -0,0 +1,10 @@ +module_name: mcp9808 +parameters: +- group: Sensors + definitions: + SENS_EN_MCP9808: + description: + short: Enable MCP9808 temperature sensor (external I2C) + type: boolean + default: 0 + reboot_required: true diff --git a/src/drivers/transponder/sagetech_mxs/CMakeLists.txt b/src/drivers/transponder/sagetech_mxs/CMakeLists.txt index 08d2f2d60a..b2539f2799 100644 --- a/src/drivers/transponder/sagetech_mxs/CMakeLists.txt +++ b/src/drivers/transponder/sagetech_mxs/CMakeLists.txt @@ -80,4 +80,5 @@ px4_add_module( px4_work_queue MODULE_CONFIG module.yaml + parameters.yaml ) diff --git a/src/drivers/transponder/sagetech_mxs/parameters.c b/src/drivers/transponder/sagetech_mxs/parameters.c deleted file mode 100644 index 4164f8691d..0000000000 --- a/src/drivers/transponder/sagetech_mxs/parameters.c +++ /dev/null @@ -1,107 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2022 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/* - * parameters.c - * - * Sagetech MXS transponder custom parameters - * @author Megan McCormick megan.mccormick@sagetech.com - * @author Check Faber chuck.faber@sagetech.com - */ - -/** - * Sagetech MXS mode configuration - * - * This parameter defines the operating mode of the MXS - * - * @reboot_required false - * @min 0 - * @max 3 - * @group Transponder - * - * @value 0 Off - * @value 1 On - * @value 2 Standby - * @value 3 Alt - */ -PARAM_DEFINE_INT32(MXS_OP_MODE, 0); - -/** - * Sagetech MXS Participant Configuration - * - * The MXS communication port to receive Target data from - * - * @min 0 - * @max 2 - * @reboot_required false - * @group Transponder - * - * @value 0 Auto - * @value 1 COM0 - * @value 2 COM1 - */ -PARAM_DEFINE_INT32(MXS_TARG_PORT, 1); - -/** - * Sagetech External Configuration Mode - * - * Disables auto-configuration mode enabling MXS config through external software. - * - * @reboot_required true - * @boolean - * @group Transponder - */ -PARAM_DEFINE_INT32(MXS_EXT_CFG, 0); - -/** - * MXS Serial Communication Baud rate - * - * Baudrate for the Serial Port connected to the MXS Transponder - * - * @reboot_required true - * @min 0 - * @max 10 - * @value 0 38400 - * @value 1 600 - * @value 2 4800 - * @value 3 9600 - * @value 4 RESERVED - * @value 5 57600 - * @value 6 115200 - * @value 7 230400 - * @value 8 19200 - * @value 9 460800 - * @value 10 921600 - * @group Serial - */ -PARAM_DEFINE_INT32(SER_MXS_BAUD, 5); diff --git a/src/drivers/transponder/sagetech_mxs/parameters.yaml b/src/drivers/transponder/sagetech_mxs/parameters.yaml new file mode 100644 index 0000000000..c403c97c71 --- /dev/null +++ b/src/drivers/transponder/sagetech_mxs/parameters.yaml @@ -0,0 +1,62 @@ +module_name: sagetech_mxs +parameters: +- group: Serial + definitions: + SER_MXS_BAUD: + description: + short: MXS Serial Communication Baud rate + long: Baudrate for the Serial Port connected to the MXS Transponder + type: enum + values: + 0: '38400' + 1: '600' + 2: '4800' + 3: '9600' + 4: RESERVED + 5: '57600' + 6: '115200' + 7: '230400' + 8: '19200' + 9: '460800' + 10: '921600' + default: 5 + reboot_required: true + min: 0 + max: 10 +- group: Transponder + definitions: + MXS_OP_MODE: + description: + short: Sagetech MXS mode configuration + long: This parameter defines the operating mode of the MXS + type: enum + values: + 0: 'Off' + 1: 'On' + 2: Standby + 3: Alt + default: 0 + reboot_required: false + min: 0 + max: 3 + MXS_TARG_PORT: + description: + short: Sagetech MXS Participant Configuration + long: The MXS communication port to receive Target data from + type: enum + values: + 0: Auto + 1: COM0 + 2: COM1 + default: 1 + min: 0 + max: 2 + reboot_required: false + MXS_EXT_CFG: + description: + short: Sagetech External Configuration Mode + long: Disables auto-configuration mode enabling MXS config through external + software. + type: boolean + default: 0 + reboot_required: true diff --git a/src/drivers/uavcan/CMakeLists.txt b/src/drivers/uavcan/CMakeLists.txt index 96c53bb073..70512233cf 100644 --- a/src/drivers/uavcan/CMakeLists.txt +++ b/src/drivers/uavcan/CMakeLists.txt @@ -184,6 +184,7 @@ px4_add_module( sensors/safety_button.cpp MODULE_CONFIG module.yaml + uavcan_params.yaml DEPENDS px4_uavcan_dsdlc diff --git a/src/drivers/uavcan/actuators/esc.cpp b/src/drivers/uavcan/actuators/esc.cpp index d44b565131..97dd733e2b 100644 --- a/src/drivers/uavcan/actuators/esc.cpp +++ b/src/drivers/uavcan/actuators/esc.cpp @@ -85,7 +85,7 @@ int UavcanEscController::init() return res; } -void UavcanEscController::update_outputs(uint16_t outputs[MAX_ACTUATORS], uint8_t output_array_size) +void UavcanEscController::update_outputs(float outputs[MAX_ACTUATORS], uint8_t output_array_size) { // TODO: configurable rate limit const auto timestamp = _node.getMonotonicTime(); @@ -99,7 +99,7 @@ void UavcanEscController::update_outputs(uint16_t outputs[MAX_ACTUATORS], uint8_ uavcan::equipment::esc::RawCommand msg{}; for (unsigned i = 0; i < output_array_size; i++) { - msg.cmd.push_back(static_cast(outputs[i])); + msg.cmd.push_back(static_cast(lroundf(outputs[i]))); } _uavcan_pub_raw_cmd.broadcast(msg); @@ -115,14 +115,13 @@ void UavcanEscController::esc_status_sub_cb(const uavcan::ReceivedDataStructure< if (msg.esc_index < esc_status_s::CONNECTED_ESC_MAX) { esc_report_s &esc_report = _esc_status.esc[msg.esc_index]; esc_report.timestamp = hrt_absolute_time(); - esc_report.esc_address = msg.getSrcNodeID().get(); esc_report.esc_voltage = msg.voltage; esc_report.esc_current = msg.current; esc_report.esc_temperature = msg.temperature + atmosphere::kAbsoluteNullCelsius; // Kelvin to Celsius // esc_report.motor_temperature is filled in the extended status callback esc_report.esc_rpm = msg.rpm; esc_report.esc_errorcount = msg.error_count; - esc_report.failures = get_failures(msg.esc_index); + esc_report.failures = get_failures(msg.esc_index, msg.getSrcNodeID().get()); _esc_status.esc_count = _rotor_count; _esc_status.counter += 1; @@ -153,9 +152,9 @@ void UavcanEscController::esc_status_extended_sub_cb(const uavcan::ReceivedDataS } } -uint8_t UavcanEscController::check_escs_status() +uint16_t UavcanEscController::check_escs_status() { - int esc_status_flags = 0; + uint16_t esc_status_flags = 0; const hrt_abstime now = hrt_absolute_time(); for (int index = 0; index < esc_status_s::CONNECTED_ESC_MAX; index++) { @@ -169,11 +168,11 @@ uint8_t UavcanEscController::check_escs_status() return esc_status_flags; } -uint32_t UavcanEscController::get_failures(uint8_t esc_index) +uint32_t UavcanEscController::get_failures(uint8_t esc_index, uint8_t node_id) { - // Check DoneCAN node health of the ESC + // Check DroneCAN node health of the ESC dronecan_node_status_s node_status{}; - uint8_t esc_node_id = _esc_status.esc[esc_index].esc_address; + uint8_t esc_node_id = node_id; uint8_t node_health = dronecan_node_status_s::HEALTH_OK; uint16_t vendor_specific_status_code = 0; diff --git a/src/drivers/uavcan/actuators/esc.hpp b/src/drivers/uavcan/actuators/esc.hpp index 9a53820bff..450688536d 100644 --- a/src/drivers/uavcan/actuators/esc.hpp +++ b/src/drivers/uavcan/actuators/esc.hpp @@ -73,7 +73,7 @@ public: bool initialized() { return _initialized; }; - void update_outputs(uint16_t outputs[MAX_ACTUATORS], uint8_t output_array_size); + void update_outputs(float outputs[MAX_ACTUATORS], uint8_t output_array_size); /** * Sets the number of rotors and enable timer @@ -99,12 +99,12 @@ private: /** * Checks all the ESCs freshness based on timestamp, if an ESC exceeds the timeout then is flagged offline. */ - uint8_t check_escs_status(); + uint16_t check_escs_status(); /** * Gets failure flags for a specific ESC */ - uint32_t get_failures(uint8_t esc_index); + uint32_t get_failures(uint8_t esc_index, uint8_t node_id); typedef uavcan::MethodBinder&)> StatusCbBinder; diff --git a/src/drivers/uavcan/actuators/servo.cpp b/src/drivers/uavcan/actuators/servo.cpp index 1af9a7173c..85b4b92d29 100644 --- a/src/drivers/uavcan/actuators/servo.cpp +++ b/src/drivers/uavcan/actuators/servo.cpp @@ -44,8 +44,7 @@ UavcanServoController::UavcanServoController(uavcan::INode &node) : _uavcan_pub_array_cmd.setPriority(UAVCAN_COMMAND_TRANSFER_PRIORITY); } -void -UavcanServoController::update_outputs(uint16_t outputs[MAX_ACTUATORS], unsigned num_outputs) +void UavcanServoController::update_outputs(float outputs[MAX_ACTUATORS], unsigned num_outputs) { uavcan::equipment::actuator::ArrayCommand msg; @@ -53,7 +52,7 @@ UavcanServoController::update_outputs(uint16_t outputs[MAX_ACTUATORS], unsigned uavcan::equipment::actuator::Command cmd; cmd.actuator_id = i; cmd.command_type = uavcan::equipment::actuator::Command::COMMAND_TYPE_UNITLESS; - cmd.command_value = (float)outputs[i] / 500.f - 1.f; // [-1, 1] + cmd.command_value = outputs[i] / 500.f - 1.f; // TODO would benefit from [-1, 1] parameters msg.commands.push_back(cmd); } diff --git a/src/drivers/uavcan/actuators/servo.hpp b/src/drivers/uavcan/actuators/servo.hpp index 78d6f233e1..9c464d9cc4 100644 --- a/src/drivers/uavcan/actuators/servo.hpp +++ b/src/drivers/uavcan/actuators/servo.hpp @@ -52,7 +52,7 @@ public: UavcanServoController(uavcan::INode &node); ~UavcanServoController() = default; - void update_outputs(uint16_t outputs[MAX_ACTUATORS], unsigned num_outputs); + void update_outputs(float outputs[MAX_ACTUATORS], unsigned num_outputs); private: uavcan::INode &_node; diff --git a/src/drivers/uavcan/libdronecan/libuavcan/CMakeLists.txt b/src/drivers/uavcan/libdronecan/libuavcan/CMakeLists.txt index 8e095162e2..87f5353216 100644 --- a/src/drivers/uavcan/libdronecan/libuavcan/CMakeLists.txt +++ b/src/drivers/uavcan/libdronecan/libuavcan/CMakeLists.txt @@ -21,7 +21,10 @@ endif () project(libuavcan) -find_package(PythonInterp) +if(NOT PYTHON_EXECUTABLE) + find_package(Python3 COMPONENTS Interpreter) + set(PYTHON_EXECUTABLE ${Python3_EXECUTABLE}) +endif() if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") set(COMPILER_IS_GCC_COMPATIBLE 1) diff --git a/src/drivers/uavcan/libdronecan/libuavcan/dsdl_compiler/libuavcan_dsdl_compiler/pyratemp.py b/src/drivers/uavcan/libdronecan/libuavcan/dsdl_compiler/libuavcan_dsdl_compiler/pyratemp.py index ed117b7c01..4497db1fce 100755 --- a/src/drivers/uavcan/libdronecan/libuavcan/dsdl_compiler/libuavcan_dsdl_compiler/pyratemp.py +++ b/src/drivers/uavcan/libdronecan/libuavcan/dsdl_compiler/libuavcan_dsdl_compiler/pyratemp.py @@ -278,7 +278,7 @@ def escape(s, format=HTML): - `NONE`: nothing is replaced - `HTML`: replace &<>'" by &...; - - `LATEX`: replace \#$%&_{}~^ + - `LATEX`: replace \\#$%&_{}~^ - `MAIL_HEADER`: escape non-ASCII mail-header-contents :Returns: the escaped string in unicode diff --git a/src/drivers/uavcan/module.yaml b/src/drivers/uavcan/module.yaml index 9518e06494..c8eb7bccb9 100644 --- a/src/drivers/uavcan/module.yaml +++ b/src/drivers/uavcan/module.yaml @@ -1,4 +1,5 @@ -__max_num_uavcan_lights: &max_num_uavcan_lights 3 # Needs to be equal to MAX_NUM_UAVCAN_LIGHTS constant +__max_num_uavcan_lights: &max_num_uavcan_lights 2 # NOTE: This value must match MAX_NUM_UAVCAN_LIGHTS in rgbled.hpp + module_name: UAVCAN parameters: @@ -54,18 +55,23 @@ parameters: description: short: Light ${i} function long: | - Function assigned to light ${i}. - 0: Status - displays system status colors - 1: Anti-collision - white beacon controlled by LGT_ANTCL parameter + Function for light ${i}. + UAVCAN_LGT_MODE determines when the first option or second option is active Off/On. type: enum num_instances: *max_num_uavcan_lights instance_start: 0 min: 0 - max: 1 + max: 9 default: 0 values: - 0: Status Light - 1: Anti-collision Light + 0: Status/Status + 1: Off/White + 2: Off/Red + 3: Off/Green + 4: Status/White + 5: Status/Red + 6: Status/Green + 7: Status/Off actuator_output: show_subgroups_if: 'UAVCAN_ENABLE>=3' config_parameters: @@ -82,7 +88,7 @@ actuator_output: min: { min: 0, max: 8191, default: 1 } max: { min: 0, max: 8191, default: 8191 } failsafe: { min: 0, max: 8191 } - num_channels: 8 + num_channels: 12 - param_prefix: UAVCAN_SV group_label: 'Servos' channel_label: 'Servo' diff --git a/src/drivers/uavcan/rgbled.cpp b/src/drivers/uavcan/rgbled.cpp index 3ee0e1225e..438038d8a7 100644 --- a/src/drivers/uavcan/rgbled.cpp +++ b/src/drivers/uavcan/rgbled.cpp @@ -46,7 +46,7 @@ UavcanRGBController::UavcanRGBController(uavcan::INode &node) : int UavcanRGBController::init() { // Cache number of lights (0 disables the feature) - _num_lights = math::min(static_cast(_param_lgt_num.get()), MAX_NUM_UAVCAN_LIGHTS); + _num_lights = math::min(static_cast(_param_uavcan_lgt_num.get()), MAX_NUM_UAVCAN_LIGHTS); if (_num_lights == 0) { return 0; // Disabled, don't start timer @@ -98,74 +98,71 @@ void UavcanRGBController::periodic_update(const uavcan::TimerEvent &) } // Compute status color from led_control_data - uavcan::equipment::indication::RGB565 status_color{}; - uint8_t brightness = led_control_data.leds[0].brightness; - - switch (led_control_data.leds[0].color) { - case led_control_s::COLOR_RED: - status_color = rgb888_to_rgb565(brightness, 0, 0); - break; - - case led_control_s::COLOR_GREEN: - status_color = rgb888_to_rgb565(0, brightness, 0); - break; - - case led_control_s::COLOR_BLUE: - status_color = rgb888_to_rgb565(0, 0, brightness); - break; - - case led_control_s::COLOR_AMBER: // make it the same as yellow - case led_control_s::COLOR_YELLOW: - status_color = rgb888_to_rgb565(brightness, brightness, 0); - break; - - case led_control_s::COLOR_PURPLE: - status_color = rgb888_to_rgb565(brightness, 0, brightness); - break; - - case led_control_s::COLOR_CYAN: - status_color = rgb888_to_rgb565(0, brightness, brightness); - break; - - case led_control_s::COLOR_WHITE: - status_color = rgb888_to_rgb565(brightness, brightness, brightness); - break; - - default: - case led_control_s::COLOR_OFF: - break; - } + uavcan::equipment::indication::RGB565 status_color = color_to_rgb565(led_control_data.leds[0].color, led_control_data.leds[0].brightness); // Build and send light commands for all configured lights uavcan::equipment::indication::LightsCommand light_command; + const bool light_on = is_light_on(); for (uint8_t i = 0; i < _num_lights; i++) { - uavcan::equipment::indication::SingleLightCommand cmd; - cmd.light_id = _light_ids[i]; + uavcan::equipment::indication::RGB565 color_on, color_off; + color_on = color_off = color_to_rgb565(led_control_s::COLOR_OFF); switch (_light_functions[i]) { + // Always show status case LightFunction::Status: - cmd.color = status_color; + color_on = color_off = status_color; break; - case LightFunction::AntiCollision: - uint8_t brigtness = is_anticolision_on() ? 255 : 0; - cmd.color = rgb888_to_rgb565(brigtness, brigtness, brigtness); + // Static color when UAVCAN_LGT_MODE active + case LightFunction::White: + color_on = color_to_rgb565(led_control_s::COLOR_WHITE); + break; + + case LightFunction::Red: + color_on = color_to_rgb565(led_control_s::COLOR_RED); + break; + + case LightFunction::Green: + color_on = color_to_rgb565(led_control_s::COLOR_GREEN); + break; + + // Hybrid functions: show status when UAVCAN_LGT_MODE inactive, static color when active + case LightFunction::StatusOrWhite: + color_on = color_to_rgb565(led_control_s::COLOR_WHITE); + color_off = status_color; + break; + + case LightFunction::StatusOrRed: + color_on = color_to_rgb565(led_control_s::COLOR_RED); + color_off = status_color; + break; + + case LightFunction::StatusOrGreen: + color_on = color_to_rgb565(led_control_s::COLOR_GREEN); + color_off = status_color; + break; + + case LightFunction::StatusOrOff: + color_off = status_color; break; } + uavcan::equipment::indication::SingleLightCommand cmd; + cmd.light_id = _light_ids[i]; + cmd.color = light_on ? color_on : color_off; light_command.commands.push_back(cmd); } _uavcan_pub_lights_cmd.broadcast(light_command); } -bool UavcanRGBController::is_anticolision_on() +bool UavcanRGBController::is_light_on() { actuator_armed_s actuator_armed{}; _actuator_armed_sub.copy(&actuator_armed); - switch (_param_uavcan_lgt_antcl.get()) { + switch (_param_uavcan_lgt_mode.get()) { case 3: // Always on return true; @@ -181,6 +178,53 @@ bool UavcanRGBController::is_anticolision_on() } } +uavcan::equipment::indication::RGB565 UavcanRGBController::color_to_rgb565(uint8_t color, uint8_t brightness) +{ + uint8_t R = 0, G = 0, B = 0; + + switch (color) { + case led_control_s::COLOR_RED: + R = brightness; + break; + + case led_control_s::COLOR_GREEN: + G = brightness; + break; + + case led_control_s::COLOR_BLUE: + B = brightness; + break; + + case led_control_s::COLOR_AMBER: // make it the same as yellow + case led_control_s::COLOR_YELLOW: + R = brightness; + G = brightness; + break; + + case led_control_s::COLOR_PURPLE: + R = brightness; + B = brightness; + break; + + case led_control_s::COLOR_CYAN: + G = brightness; + B = brightness; + break; + + case led_control_s::COLOR_WHITE: + R = brightness; + G = brightness; + B = brightness; + break; + + default: + case led_control_s::COLOR_OFF: + break; + } + + return rgb888_to_rgb565(R, G, B); +} + uavcan::equipment::indication::RGB565 UavcanRGBController::rgb888_to_rgb565(uint8_t red, uint8_t green, uint8_t blue) { // RGB565: Full brightness is (31, 63, 31), off is (0, 0, 0) diff --git a/src/drivers/uavcan/rgbled.hpp b/src/drivers/uavcan/rgbled.hpp index ee189019e2..6c6ce765c7 100644 --- a/src/drivers/uavcan/rgbled.hpp +++ b/src/drivers/uavcan/rgbled.hpp @@ -54,19 +54,26 @@ private: // Max update rate to avoid excessive bus traffic static constexpr unsigned MAX_RATE_HZ = 20; - // Maximum number of configurable lights - static constexpr uint8_t MAX_NUM_UAVCAN_LIGHTS = 3; + // NOTE: This value must match __max_num_uavcan_lights in module.yaml + static constexpr uint8_t MAX_NUM_UAVCAN_LIGHTS = 2; - // Light function types + // Light function types - must match values in module.yaml UAVCAN_LGT_FN enum class LightFunction : uint8_t { - Status = 0, // System status colors from led_control - AntiCollision = 1 // White beacon based on arm state + Status = 0, + White = 1, + Red = 2, + Green = 3, + StatusOrWhite = 4, + StatusOrRed = 5, + StatusOrGreen = 6, + StatusOrOff = 7 }; void periodic_update(const uavcan::TimerEvent &); - bool is_anticolision_on(); ///< Evaluates current on state of collision lights accordingt to UAVCAN_LGT_ANTCL + bool is_light_on(); + uavcan::equipment::indication::RGB565 color_to_rgb565(uint8_t color, uint8_t brightness = 255); uavcan::equipment::indication::RGB565 rgb888_to_rgb565(uint8_t red, uint8_t green, uint8_t blue); typedef uavcan::MethodBinder @@ -90,7 +97,7 @@ private: param_t _light_fn_params[MAX_NUM_UAVCAN_LIGHTS] {}; DEFINE_PARAMETERS( - (ParamInt) _param_lgt_num, - (ParamInt) _param_uavcan_lgt_antcl + (ParamInt) _param_uavcan_lgt_num, + (ParamInt) _param_uavcan_lgt_mode ) }; diff --git a/src/drivers/uavcan/sensors/accel.cpp b/src/drivers/uavcan/sensors/accel.cpp index 0efa5c5e6e..9f3d6a20ca 100644 --- a/src/drivers/uavcan/sensors/accel.cpp +++ b/src/drivers/uavcan/sensors/accel.cpp @@ -63,7 +63,7 @@ void UavcanAccelBridge::imu_sub_cb(const uavcan::ReceivedDataStructure 0) ? msg.timestamp.usec : hrt_absolute_time(); if (channel == nullptr) { // Something went wrong - no channel to publish on; return diff --git a/src/drivers/uavcan/sensors/battery.cpp b/src/drivers/uavcan/sensors/battery.cpp index ccf587980f..8dfff769c5 100644 --- a/src/drivers/uavcan/sensors/battery.cpp +++ b/src/drivers/uavcan/sensors/battery.cpp @@ -95,7 +95,7 @@ UavcanBatteryBridge::battery_sub_cb(const uavcan::ReceivedDataStructure FLT_EPSILON) ? msg.nominal_voltage : NAN; _battery_status[instance].is_powering_off = msg.is_powering_off; if (msg.nominal_voltage > FLT_EPSILON) { @@ -212,7 +215,7 @@ void UavcanBatteryBridge::cbat_sub_cb(const uavcan::ReceivedDataStructureregisterDeviceCapability(msg.getSrcNodeID().get(), - _battery_status[instance].id, NodeInfoPublisher::DeviceCapability::BATTERY); + _node_ids[instance], NodeInfoPublisher::DeviceCapability::BATTERY); } } @@ -306,10 +310,10 @@ UavcanBatteryBridge::filterData(const uavcan::ReceivedDataStructureupdateCurrent(msg.current); _battery[instance]->updateBatteryStatus(hrt_absolute_time()); - /* Override data that is expected to arrive from UAVCAN msg*/ + /* Override data that is expected to arrive from UAVCAN msg */ _battery_status[instance] = _battery[instance]->getBatteryStatus(); _battery_status[instance].temperature = msg.temperature + atmosphere::kAbsoluteNullCelsius; // Kelvin to Celsius - _battery_status[instance].id = msg.getSrcNodeID().get(); // overwrite zeroed index from _battery + _battery_status[instance].id = msg.battery_id; publish(msg.getSrcNodeID().get(), &_battery_status[instance]); diff --git a/src/drivers/uavcan/sensors/battery.hpp b/src/drivers/uavcan/sensors/battery.hpp index e0e050e9c4..84dc075227 100644 --- a/src/drivers/uavcan/sensors/battery.hpp +++ b/src/drivers/uavcan/sensors/battery.hpp @@ -110,6 +110,7 @@ private: battery_info_s _battery_info[battery_status_s::MAX_INSTANCES] {}; battery_status_s _battery_status[battery_status_s::MAX_INSTANCES] {}; BatteryDataType _batt_update_mod[battery_status_s::MAX_INSTANCES] {}; + uint8_t _node_ids[battery_status_s::MAX_INSTANCES] {}; // UAVCAN node ID per instance static constexpr int FILTER_DATA = 2; static constexpr int BATTERY_INDEX_1 = 1; diff --git a/src/drivers/uavcan/sensors/gnss.cpp b/src/drivers/uavcan/sensors/gnss.cpp index fb02f1d274..36b57786f6 100644 --- a/src/drivers/uavcan/sensors/gnss.cpp +++ b/src/drivers/uavcan/sensors/gnss.cpp @@ -533,8 +533,7 @@ void UavcanGnssBridge::process_fixx(const uavcan::ReceivedDataStructure sensor_gps.vdop = msg.pdop; } - // Use heading from RelPosHeading message if available and we have RTK Fixed solution. - if (_rel_heading_valid && (fix_type == sensor_gps_s::FIX_TYPE_RTK_FIXED)) { + if (_rel_heading_valid) { sensor_gps.heading = _rel_heading; sensor_gps.heading_offset = NAN; sensor_gps.heading_accuracy = _rel_heading_accuracy; diff --git a/src/drivers/uavcan/sensors/gyro.cpp b/src/drivers/uavcan/sensors/gyro.cpp index ab72693866..fca4ba7b4f 100644 --- a/src/drivers/uavcan/sensors/gyro.cpp +++ b/src/drivers/uavcan/sensors/gyro.cpp @@ -75,7 +75,8 @@ void UavcanGyroBridge::imu_sub_cb(const uavcan::ReceivedDataStructureupdate(hrt_absolute_time(), + const hrt_abstime timestamp_sample = (msg.timestamp.usec > 0) ? msg.timestamp.usec : hrt_absolute_time(); + gyro->update(timestamp_sample, msg.rate_gyro_latest[0], msg.rate_gyro_latest[1], msg.rate_gyro_latest[2]); diff --git a/src/drivers/uavcan/sensors/rangefinder.cpp b/src/drivers/uavcan/sensors/rangefinder.cpp index b476c66947..f66fd65442 100644 --- a/src/drivers/uavcan/sensors/rangefinder.cpp +++ b/src/drivers/uavcan/sensors/rangefinder.cpp @@ -116,7 +116,8 @@ void UavcanRangefinderBridge::range_sub_cb(const quality = 100; } - rangefinder->update(hrt_absolute_time(), msg.range, quality); + const hrt_abstime timestamp_sample = (msg.timestamp.usec > 0) ? msg.timestamp.usec : hrt_absolute_time(); + rangefinder->update(timestamp_sample, msg.range, quality); // Register device capability if not already done if (_node_info_publisher != nullptr) { diff --git a/src/drivers/uavcan/uavcan_main.cpp b/src/drivers/uavcan/uavcan_main.cpp index 956f5f4193..4cd8ade8f0 100644 --- a/src/drivers/uavcan/uavcan_main.cpp +++ b/src/drivers/uavcan/uavcan_main.cpp @@ -468,7 +468,7 @@ UavcanNode::fill_node_info() char fw_git_short[9] = {}; std::memmove(fw_git_short, px4_firmware_version_string(), 8); char *end = nullptr; - swver.vcs_commit = std::strtol(fw_git_short, &end, 16); + swver.vcs_commit = std::strtoul(fw_git_short, &end, 16); swver.optional_field_flags |= swver.OPTIONAL_FIELD_FLAG_VCS_COMMIT; // Too verbose for normal operation @@ -1090,8 +1090,7 @@ void UavcanNode::publish_node_statuses() } #if defined(CONFIG_UAVCAN_OUTPUTS_CONTROLLER) -bool UavcanMixingInterfaceESC::updateOutputs(uint16_t outputs[MAX_ACTUATORS], unsigned num_outputs, - unsigned num_control_groups_updated) +bool UavcanMixingInterfaceESC::updateOutputs(float outputs[MAX_ACTUATORS], unsigned num_outputs, unsigned num_control_groups_updated) { if (_esc_controller.initialized()) { // num_outputs is the maximum possible number of outputs (8) @@ -1135,8 +1134,7 @@ void UavcanMixingInterfaceESC::mixerChanged() _esc_controller.set_rotor_count(rotor_count); } -bool UavcanMixingInterfaceServo::updateOutputs(uint16_t outputs[MAX_ACTUATORS], unsigned num_outputs, - unsigned num_control_groups_updated) +bool UavcanMixingInterfaceServo::updateOutputs(float outputs[MAX_ACTUATORS], unsigned num_outputs, unsigned num_control_groups_updated) { _servo_controller.update_outputs(outputs, num_outputs); return true; diff --git a/src/drivers/uavcan/uavcan_main.hpp b/src/drivers/uavcan/uavcan_main.hpp index 56f7c445fe..4f84ff783e 100644 --- a/src/drivers/uavcan/uavcan_main.hpp +++ b/src/drivers/uavcan/uavcan_main.hpp @@ -129,8 +129,7 @@ public: _node_mutex(node_mutex), _esc_controller(esc_controller) {} - bool updateOutputs(uint16_t outputs[MAX_ACTUATORS], - unsigned num_outputs, unsigned num_control_groups_updated) override; + bool updateOutputs(float outputs[MAX_ACTUATORS], unsigned num_outputs, unsigned num_control_groups_updated) override; void mixerChanged() override; @@ -162,8 +161,7 @@ public: _node_mutex(node_mutex), _servo_controller(servo_controller) {} - bool updateOutputs(uint16_t outputs[MAX_ACTUATORS], - unsigned num_outputs, unsigned num_control_groups_updated) override; + bool updateOutputs(float outputs[MAX_ACTUATORS], unsigned num_outputs, unsigned num_control_groups_updated) override; MixingOutput &mixingOutput() { return _mixing_output; } diff --git a/src/drivers/uavcan/uavcan_params.c b/src/drivers/uavcan/uavcan_params.c deleted file mode 100644 index 9dd90e2e4c..0000000000 --- a/src/drivers/uavcan/uavcan_params.c +++ /dev/null @@ -1,384 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2014-2021 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @author Pavel Kirienko - */ - -/** - * UAVCAN mode - * - * 0 - UAVCAN disabled. - * 1 - Enables support for UAVCAN sensors without dynamic node ID allocation and firmware update. - * 2 - Enables support for UAVCAN sensors with dynamic node ID allocation and firmware update. - * 3 - Enables support for UAVCAN sensors and actuators with dynamic node ID allocation and firmware update. Also sets the motor control outputs to UAVCAN. - * - * @min 0 - * @max 3 - * @value 0 Disabled - * @value 1 Sensors Manual Config - * @value 2 Sensors Automatic Config - * @value 3 Sensors and Actuators (ESCs) Automatic Config - * @reboot_required true - * @group UAVCAN - */ -PARAM_DEFINE_INT32(UAVCAN_ENABLE, 0); - -/** - * UAVCAN Node ID. - * - * Read the specs at https://dronecan.github.io/ to learn more about Node ID. - * - * @min 1 - * @max 125 - * @reboot_required true - * @group UAVCAN - */ -PARAM_DEFINE_INT32(UAVCAN_NODE_ID, 1); - -/** - * UAVCAN CAN bus bitrate. - * - * @unit bit/s - * @min 20000 - * @max 1000000 - * @reboot_required true - * @group UAVCAN - */ -PARAM_DEFINE_INT32(UAVCAN_BITRATE, 1000000); - -/** - * UAVCAN rangefinder minimum range - * - * This parameter defines the minimum valid range for a rangefinder connected via UAVCAN. - * - * @unit m - * @group UAVCAN - */ -PARAM_DEFINE_FLOAT(UAVCAN_RNG_MIN, 0.0f); - -/** - * UAVCAN rangefinder maximum range - * - * This parameter defines the maximum valid range for a rangefinder connected via UAVCAN. - * - * @unit m - * @group UAVCAN - */ -PARAM_DEFINE_FLOAT(UAVCAN_RNG_MAX, 999.0f); - -/** - * UAVCAN fuel tank maximum capacity - * - * This parameter defines the maximum fuel capacity of the vehicle's fuel tank. - * - * @min 0.0 - * @max 100000.0 - * @unit liters - * @decimal 1 - * @increment 0.1 - * @reboot_required true - * @group UAVCAN - */ -PARAM_DEFINE_FLOAT(UAVCAN_ECU_MAXF, 15.0f); - -/** - * UAVCAN fuel tank fuel type - * - * This parameter defines the type of fuel used in the vehicle's fuel tank. - * - * 0: Unknown - * 1: Liquid (e.g., gasoline, diesel) - * 2: Gas (e.g., hydrogen, methane, propane) - * - * @min 0 - * @max 2 - * @value 0 Unknown - * @value 1 Liquid - * @value 2 Gas - * @reboot_required true - * @group UAVCAN - */ -PARAM_DEFINE_INT32(UAVCAN_ECU_FUELT, 1); - -/** - * UAVCAN ANTI_COLLISION light operating mode - * - * This parameter defines the minimum condition under which the system will command - * lights with anti-collision function to turn on (white). - * - * 0 - Always off - * 1 - When autopilot is armed - * 2 - When autopilot is prearmed - * 3 - Always on - * - * @min 0 - * @max 3 - * @value 0 Always off - * @value 1 When autopilot is armed - * @value 2 When autopilot is prearmed - * @value 3 Always on - * @reboot_required true - * @group UAVCAN - */ -PARAM_DEFINE_INT32(UAVCAN_LGT_ANTCL, 2); - -/** - * publish Arming Status stream - * - * Enable UAVCAN Arming Status stream publication - * uavcan::equipment::safety::ArmingStatus - * - * @boolean - * @reboot_required true - * @group UAVCAN - */ -PARAM_DEFINE_INT32(UAVCAN_PUB_ARM, 0); - -/** - * publish RTCM stream - * - * Enable UAVCAN RTCM stream publication - * uavcan::equipment::gnss::RTCMStream - * - * @boolean - * @reboot_required true - * @group UAVCAN - */ -PARAM_DEFINE_INT32(UAVCAN_PUB_RTCM, 0); - -/** - * publish moving baseline data RTCM stream - * - * Enable UAVCAN RTCM stream publication - * ardupilot::gnss::MovingBaselineData - * - * @boolean - * @reboot_required true - * @group UAVCAN - */ -PARAM_DEFINE_INT32(UAVCAN_PUB_MBD, 0); - -/** - * subscription airspeed - * - * Enable UAVCAN airspeed subscriptions. - * uavcan::equipment::air_data::IndicatedAirspeed - * uavcan::equipment::air_data::TrueAirspeed - * uavcan::equipment::air_data::StaticTemperature - * - * @boolean - * @reboot_required true - * @group UAVCAN - */ -PARAM_DEFINE_INT32(UAVCAN_SUB_ASPD, 0); - -/** - * subscription barometer - * - * Enable UAVCAN barometer subscription. - * uavcan::equipment::air_data::StaticPressure - * uavcan::equipment::air_data::StaticTemperature - * - * @boolean - * @reboot_required true - * @group UAVCAN - */ -PARAM_DEFINE_INT32(UAVCAN_SUB_BARO, 0); - -/** - * subscription battery - * - * Enable UAVCAN battery subscription. - * uavcan::equipment::power::BatteryInfo - * ardupilot::equipment::power::BatteryInfoAux - * cuav::equipment::power::CBAT - * - * 0 - Disable - * 1 - Use raw data. Recommended for Smart battery - * 2 - Filter the data with internal battery library (unsupported with CBAT) - * - * @min 0 - * @max 2 - * @value 0 Disable - * @value 1 Raw data - * @value 2 Filter data - * @reboot_required true - * @group UAVCAN - */ -PARAM_DEFINE_INT32(UAVCAN_SUB_BAT, 0); - -/** - * subscription differential pressure - * - * Enable UAVCAN differential pressure subscription. - * uavcan::equipment::air_data::RawAirData - * - * @boolean - * @reboot_required true - * @group UAVCAN - */ -PARAM_DEFINE_INT32(UAVCAN_SUB_DPRES, 0); - -/** - * subscription flow - * - * Enable UAVCAN optical flow subscription. - * - * @boolean - * @reboot_required true - * @group UAVCAN - */ -PARAM_DEFINE_INT32(UAVCAN_SUB_FLOW, 0); - -/** - * subscription fuel tank - * - * Enable UAVCAN fuel tank status subscription. - * - * @boolean - * @reboot_required true - * @group UAVCAN - */ -PARAM_DEFINE_INT32(UAVCAN_SUB_FUEL, 0); - -/** - * subscription GPS - * - * Enable UAVCAN GPS subscriptions. - * uavcan::equipment::gnss::Fix - * uavcan::equipment::gnss::Fix2 - * uavcan::equipment::gnss::Auxiliary - * - * @boolean - * @reboot_required true - * @group UAVCAN - */ -PARAM_DEFINE_INT32(UAVCAN_SUB_GPS, 1); - -/** - * subscription GPS Relative - * - * Enable UAVCAN GPS Relative subscription. - * ardupilot::gnss::RelPosHeading - * - * @boolean - * @reboot_required true - * @group UAVCAN - */ -PARAM_DEFINE_INT32(UAVCAN_SUB_GPS_R, 1); - -/** - * subscription hygrometer - * - * Enable UAVCAN hygrometer subscriptions. - * dronecan::sensors::hygrometer::Hygrometer - * - * @boolean - * @reboot_required true - * @group UAVCAN - */ -PARAM_DEFINE_INT32(UAVCAN_SUB_HYGRO, 0); - -/** - * subscription ICE - * - * Enable UAVCAN internal combustion engine (ICE) subscription. - * uavcan::equipment::ice::reciprocating::Status - * - * @boolean - * @reboot_required true - * @group UAVCAN - */ -PARAM_DEFINE_INT32(UAVCAN_SUB_ICE, 0); - -/** - * subscription IMU - * - * Enable UAVCAN IMU subscription. - * uavcan::equipment::ahrs::RawIMU - * - * @boolean - * @reboot_required true - * @group UAVCAN - */ -PARAM_DEFINE_INT32(UAVCAN_SUB_IMU, 0); - -/** - * subscription magnetometer - * - * Enable UAVCAN mag subscription. - * uavcan::equipment::ahrs::MagneticFieldStrength - * uavcan::equipment::ahrs::MagneticFieldStrength2 - * - * @boolean - * @reboot_required true - * @group UAVCAN - */ -PARAM_DEFINE_INT32(UAVCAN_SUB_MAG, 1); - -/** - * subscription range finder - * - * Enable UAVCAN range finder subscription. - * uavcan::equipment::range_sensor::Measurement - * - * @boolean - * @reboot_required true - * @group UAVCAN - */ -PARAM_DEFINE_INT32(UAVCAN_SUB_RNG, 0); - -/** - * subscription button - * - * Enable UAVCAN button subscription. - * ardupilot::indication::Button - * - * @boolean - * @reboot_required true - * @group UAVCAN - */ -PARAM_DEFINE_INT32(UAVCAN_SUB_BTN, 0); - -/** - * subscription MovingBaselineData - * - * Enable UAVCAN MovingBaselineData subscription. - * ardupilot::gnss::MovingBaselineData - * - * @boolean - * @reboot_required true - * @group UAVCAN - */ -PARAM_DEFINE_INT32(UAVCAN_SUB_MBD, 0); diff --git a/src/drivers/uavcan/uavcan_params.yaml b/src/drivers/uavcan/uavcan_params.yaml new file mode 100644 index 0000000000..97cac23a22 --- /dev/null +++ b/src/drivers/uavcan/uavcan_params.yaml @@ -0,0 +1,289 @@ +module_name: uavcan +parameters: +- group: UAVCAN + definitions: + UAVCAN_ENABLE: + description: + short: UAVCAN mode + long: |- + 0 - UAVCAN disabled. + 1 - Enables support for UAVCAN sensors without dynamic node ID allocation and firmware update. + 2 - Enables support for UAVCAN sensors with dynamic node ID allocation and firmware update. + 3 - Enables support for UAVCAN sensors and actuators with dynamic node ID allocation and firmware update. Also sets the motor control outputs to UAVCAN. + type: enum + values: + 0: Disabled + 1: Sensors Manual Config + 2: Sensors Automatic Config + 3: Sensors and Actuators (ESCs) Automatic Config + default: 0 + min: 0 + max: 3 + reboot_required: true + UAVCAN_NODE_ID: + description: + short: UAVCAN Node ID + long: Read the specs at https://dronecan.github.io/ to learn more about Node + ID. + type: int32 + default: 1 + min: 1 + max: 125 + reboot_required: true + UAVCAN_BITRATE: + description: + short: UAVCAN CAN bus bitrate + type: int32 + default: 1000000 + unit: bit/s + min: 20000 + max: 1000000 + reboot_required: true + UAVCAN_RNG_MIN: + description: + short: UAVCAN rangefinder minimum range + long: This parameter defines the minimum valid range for a rangefinder connected + via UAVCAN. + type: float + default: 0.0 + unit: m + UAVCAN_RNG_MAX: + description: + short: UAVCAN rangefinder maximum range + long: This parameter defines the maximum valid range for a rangefinder connected + via UAVCAN. + type: float + default: 999.0 + unit: m + UAVCAN_ECU_MAXF: + description: + short: UAVCAN fuel tank maximum capacity + long: This parameter defines the maximum fuel capacity of the vehicle's fuel + tank. + type: float + default: 15.0 + min: 0.0 + max: 100000.0 + unit: liters + decimal: 1 + increment: 0.1 + reboot_required: true + UAVCAN_ECU_FUELT: + description: + short: UAVCAN fuel tank fuel type + long: |- + This parameter defines the type of fuel used in the vehicle's fuel tank. + + 0: Unknown + 1: Liquid (e.g., gasoline, diesel) + 2: Gas (e.g., hydrogen, methane, propane) + type: enum + values: + 0: Unknown + 1: Liquid + 2: Gas + default: 1 + min: 0 + max: 2 + reboot_required: true + UAVCAN_LGT_MODE: + description: + short: UAVCAN Navigation light operating mode + long: |- + This parameter defines the minimum condition under which the system will command + Navigation lights to turn on. Affects lights with functions: Anti-collision, Colored Navigation Lights or Hybrid lights. + + For hybrid functions (StatusOrAntiCollision, etc.), the light + displays status colors when this mode is inactive, and switches to the + navigation light function when this mode becomes active. + + 0 - Always off + 1 - When autopilot is armed + 2 - When autopilot is prearmed + 3 - Always on + type: enum + values: + 0: Always off + 1: When autopilot is armed + 2: When autopilot is prearmed + 3: Always on + default: 1 + min: 0 + max: 3 + reboot_required: true + UAVCAN_PUB_ARM: + description: + short: publish Arming Status stream + long: |- + Enable UAVCAN Arming Status stream publication + uavcan::equipment::safety::ArmingStatus + type: boolean + default: 0 + reboot_required: true + UAVCAN_PUB_RTCM: + description: + short: publish RTCM stream + long: |- + Enable UAVCAN RTCM stream publication + uavcan::equipment::gnss::RTCMStream + type: boolean + default: 0 + reboot_required: true + UAVCAN_PUB_MBD: + description: + short: publish moving baseline data RTCM stream + long: |- + Enable UAVCAN RTCM stream publication + ardupilot::gnss::MovingBaselineData + type: boolean + default: 0 + reboot_required: true + UAVCAN_SUB_ASPD: + description: + short: subscription airspeed + long: |- + Enable UAVCAN airspeed subscriptions. + uavcan::equipment::air_data::IndicatedAirspeed + uavcan::equipment::air_data::TrueAirspeed + uavcan::equipment::air_data::StaticTemperature + type: boolean + default: 0 + reboot_required: true + UAVCAN_SUB_BARO: + description: + short: subscription barometer + long: |- + Enable UAVCAN barometer subscription. + uavcan::equipment::air_data::StaticPressure + uavcan::equipment::air_data::StaticTemperature + type: boolean + default: 0 + reboot_required: true + UAVCAN_SUB_BAT: + description: + short: subscription battery + long: |- + Enable UAVCAN battery subscription. + uavcan::equipment::power::BatteryInfo + ardupilot::equipment::power::BatteryInfoAux + cuav::equipment::power::CBAT + + 0 - Disable + 1 - Use raw data. Recommended for Smart battery + 2 - Filter the data with internal battery library (unsupported with CBAT) + type: enum + values: + 0: Disable + 1: Raw data + 2: Filter data + default: 0 + min: 0 + max: 2 + reboot_required: true + UAVCAN_SUB_DPRES: + description: + short: subscription differential pressure + long: |- + Enable UAVCAN differential pressure subscription. + uavcan::equipment::air_data::RawAirData + type: boolean + default: 0 + reboot_required: true + UAVCAN_SUB_FLOW: + description: + short: subscription flow + long: Enable UAVCAN optical flow subscription. + type: boolean + default: 0 + reboot_required: true + UAVCAN_SUB_FUEL: + description: + short: subscription fuel tank + long: Enable UAVCAN fuel tank status subscription. + type: boolean + default: 0 + reboot_required: true + UAVCAN_SUB_GPS: + description: + short: subscription GPS + long: |- + Enable UAVCAN GPS subscriptions. + uavcan::equipment::gnss::Fix + uavcan::equipment::gnss::Fix2 + uavcan::equipment::gnss::Auxiliary + type: boolean + default: 1 + reboot_required: true + UAVCAN_SUB_GPS_R: + description: + short: subscription GPS Relative + long: |- + Enable UAVCAN GPS Relative subscription. + ardupilot::gnss::RelPosHeading + type: boolean + default: 1 + reboot_required: true + UAVCAN_SUB_HYGRO: + description: + short: subscription hygrometer + long: |- + Enable UAVCAN hygrometer subscriptions. + dronecan::sensors::hygrometer::Hygrometer + type: boolean + default: 0 + reboot_required: true + UAVCAN_SUB_ICE: + description: + short: subscription ICE + long: |- + Enable UAVCAN internal combustion engine (ICE) subscription. + uavcan::equipment::ice::reciprocating::Status + type: boolean + default: 0 + reboot_required: true + UAVCAN_SUB_IMU: + description: + short: subscription IMU + long: |- + Enable UAVCAN IMU subscription. + uavcan::equipment::ahrs::RawIMU + type: boolean + default: 0 + reboot_required: true + UAVCAN_SUB_MAG: + description: + short: subscription magnetometer + long: |- + Enable UAVCAN mag subscription. + uavcan::equipment::ahrs::MagneticFieldStrength + uavcan::equipment::ahrs::MagneticFieldStrength2 + type: boolean + default: 1 + reboot_required: true + UAVCAN_SUB_RNG: + description: + short: subscription range finder + long: |- + Enable UAVCAN range finder subscription. + uavcan::equipment::range_sensor::Measurement + type: boolean + default: 0 + reboot_required: true + UAVCAN_SUB_BTN: + description: + short: subscription button + long: |- + Enable UAVCAN button subscription. + ardupilot::indication::Button + type: boolean + default: 0 + reboot_required: true + UAVCAN_SUB_MBD: + description: + short: subscription MovingBaselineData + long: |- + Enable UAVCAN MovingBaselineData subscription. + ardupilot::gnss::MovingBaselineData + type: boolean + default: 0 + reboot_required: true diff --git a/src/drivers/uavcan/uavcan_servers.cpp b/src/drivers/uavcan/uavcan_servers.cpp index 3d35ea523e..1c35483df4 100644 --- a/src/drivers/uavcan/uavcan_servers.cpp +++ b/src/drivers/uavcan/uavcan_servers.cpp @@ -157,14 +157,8 @@ void UavcanServers::migrateFWFromRoot(const char *sd_path, const char *sd_root_p const size_t sd_root_path_len = strlen(sd_root_path); struct stat sb; int rv; - char dstpath[maxlen + 1]; char srcpath[maxlen + 1]; - - DIR *const sd_root_dir = opendir(sd_root_path); - - if (!sd_root_dir) { - return; - } + char dstpath[maxlen + 1]; if (stat(sd_path, &sb) != 0 || !S_ISDIR(sb.st_mode)) { rv = mkdir(sd_path, S_IRWXU | S_IRWXG | S_IRWXO); @@ -175,19 +169,21 @@ void UavcanServers::migrateFWFromRoot(const char *sd_path, const char *sd_root_p } } - // Iterate over all bin files in root directory + // Phase 1: collect .bin filenames with directory open, then close + static constexpr int MaxBinFiles = 10; + char bin_names[MaxBinFiles][NAME_MAX + 1]; + int bin_count = 0; + + DIR *const sd_root_dir = opendir(sd_root_path); + + if (!sd_root_dir) { + return; + } + struct dirent *dev_dirent = NULL; - while ((dev_dirent = readdir(sd_root_dir)) != nullptr) { - - uavcan_posix::FirmwareVersionChecker::AppDescriptor descriptor{0}; - - // Looking for all uavcan.bin files. - + while ((dev_dirent = readdir(sd_root_dir)) != nullptr && bin_count < MaxBinFiles) { if (DIRENT_ISFILE(dev_dirent->d_type) && strstr(dev_dirent->d_name, ".bin") != nullptr) { - - // Make sure the path fits - size_t filename_len = strlen(dev_dirent->d_name); size_t srcpath_len = sd_root_path_len + 1 + filename_len; @@ -196,26 +192,33 @@ void UavcanServers::migrateFWFromRoot(const char *sd_path, const char *sd_root_p continue; } - snprintf(srcpath, sizeof(srcpath), "%s%s", sd_root_path, dev_dirent->d_name); - - if (uavcan_posix::FirmwareVersionChecker::getFileInfo(srcpath, descriptor, 1024) != 0) { - continue; - } - - if (descriptor.image_crc == 0) { - continue; - } - - snprintf(dstpath, sizeof(dstpath), "%s/%d.bin", sd_path, descriptor.board_id); - - if (copyFw(dstpath, srcpath) >= 0) { - unlink(srcpath); - } + strncpy(bin_names[bin_count], dev_dirent->d_name, NAME_MAX); + bin_names[bin_count][NAME_MAX] = '\0'; + bin_count++; } } - if (sd_root_dir != nullptr) { - (void)closedir(sd_root_dir); + (void)closedir(sd_root_dir); + + // Phase 2: process collected files with directory closed + for (int i = 0; i < bin_count; i++) { + uavcan_posix::FirmwareVersionChecker::AppDescriptor descriptor{0}; + + snprintf(srcpath, sizeof(srcpath), "%s%s", sd_root_path, bin_names[i]); + + if (uavcan_posix::FirmwareVersionChecker::getFileInfo(srcpath, descriptor, 1024) != 0) { + continue; + } + + if (descriptor.image_crc == 0) { + continue; + } + + snprintf(dstpath, sizeof(dstpath), "%s/%d.bin", sd_path, descriptor.board_id); + + if (copyFw(dstpath, srcpath) >= 0) { + unlink(srcpath); + } } } diff --git a/src/drivers/uavcannode/CMakeLists.txt b/src/drivers/uavcannode/CMakeLists.txt index d170bde437..2027237ab8 100644 --- a/src/drivers/uavcannode/CMakeLists.txt +++ b/src/drivers/uavcannode/CMakeLists.txt @@ -148,6 +148,8 @@ px4_add_module( UavcanNode.hpp UavcanNodeParamManager.hpp UavcanNodeParamManager.cpp + MODULE_CONFIG + uavcannode_params.yaml DEPENDS arch_watchdog_iwdg px4_uavcan_dsdlc diff --git a/src/drivers/uavcannode/Publishers/RangeSensorMeasurement.hpp b/src/drivers/uavcannode/Publishers/RangeSensorMeasurement.hpp index 134caea21a..ca8226b15a 100644 --- a/src/drivers/uavcannode/Publishers/RangeSensorMeasurement.hpp +++ b/src/drivers/uavcannode/Publishers/RangeSensorMeasurement.hpp @@ -75,6 +75,7 @@ public: if (uORB::SubscriptionCallbackWorkItem::update(&dist)) { uavcan::equipment::range_sensor::Measurement range_sensor{}; + range_sensor.timestamp.usec = getNode().getUtcTime().toUSec() - (hrt_absolute_time() - dist.timestamp); range_sensor.sensor_id = get_instance(); range_sensor.range = dist.current_distance; range_sensor.field_of_view = dist.h_fov; diff --git a/src/drivers/uavcannode/UavcanNode.cpp b/src/drivers/uavcannode/UavcanNode.cpp index 0940791c90..86a350d27c 100644 --- a/src/drivers/uavcannode/UavcanNode.cpp +++ b/src/drivers/uavcannode/UavcanNode.cpp @@ -36,6 +36,13 @@ #include "boot_app_shared.h" #include "boot_alt_app_shared.h" +// Weak default: return the compile-time name from uavcan_board_identity. +// Boards that resolve the name at runtime can provide a strong override. +extern "C" __attribute__((weak)) const char *board_get_uavcan_hw_name(void) +{ + return HW_UAVCAN_NAME; +} + #include #include #include @@ -284,7 +291,7 @@ void UavcanNode::fill_node_info() char fw_git_short[9] = {}; std::memmove(fw_git_short, px4_firmware_version_string(), 8); char *end = nullptr; - swver.vcs_commit = std::strtol(fw_git_short, &end, 16); + swver.vcs_commit = std::strtoul(fw_git_short, &end, 16); swver.optional_field_flags |= swver.OPTIONAL_FIELD_FLAG_VCS_COMMIT; swver.major = AppDescriptor.major_version; swver.minor = AppDescriptor.minor_version; @@ -351,7 +358,7 @@ void UavcanNode::cb_beginfirmware_update(const uavcan::ReceivedDataStructure 0.5f) { _pwm_on = true; } - output_cmds[i] = ((uint32_t)outputs[i]) * MIXER_OUTPUT_TO_CMD_SCALE; //convert to ns + output_cmds[i] = static_cast(lroundf(outputs[i] * MIXER_OUTPUT_TO_CMD_SCALE)); //convert to ns } Command cmd; @@ -347,9 +346,9 @@ bool Voxl2IO::updateOutputs(uint16_t outputs[input_rc_s::RC_INPUT_MAX_CHANNELS], //if (_pwm_on && _debug){ if (_debug) { - PX4_INFO("Mixer outputs: [%u, %u, %u, %u, %u, %u, %u, %u]", - outputs[0], outputs[1], outputs[2], outputs[3], - outputs[4], outputs[5], outputs[6], outputs[7]); + PX4_INFO("Mixer outputs: [%.0f, %.0f, %.0f, %.0f, %.0f, %.0f, %.0f, %.0f]", + (double)outputs[0], (double)outputs[1], (double)outputs[2], (double)outputs[3], + (double)outputs[4], (double)outputs[5], (double)outputs[6], (double)outputs[7]); } perf_count(_output_update_perf); diff --git a/src/drivers/voxl2_io/voxl2_io.hpp b/src/drivers/voxl2_io/voxl2_io.hpp index 6b417c17db..8b6f916287 100644 --- a/src/drivers/voxl2_io/voxl2_io.hpp +++ b/src/drivers/voxl2_io/voxl2_io.hpp @@ -85,8 +85,7 @@ public: int print_status() override; /** @see OutputModuleInterface */ - bool updateOutputs(uint16_t outputs[input_rc_s::RC_INPUT_MAX_CHANNELS], - unsigned num_outputs, unsigned num_control_groups_updated) override; + bool updateOutputs(float outputs[MAX_ACTUATORS], unsigned num_outputs, unsigned num_control_groups_updated) override; virtual int init(); diff --git a/src/drivers/voxl2_io/voxl2_io_params.c b/src/drivers/voxl2_io/voxl2_io_params.c deleted file mode 100644 index ac99723b8d..0000000000 --- a/src/drivers/voxl2_io/voxl2_io_params.c +++ /dev/null @@ -1,104 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2020 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * VOXL2_IO UART baud rate - * - * Default rate is 921600, which is used for communicating with VOXL2_IO board - * - * @group VOXL2 IO - * @unit bit/s - */ -PARAM_DEFINE_INT32(VOXL2_IO_BAUD, 921600); - - -/** - * VOXL2_IO Disabled PWM - * - * Pulse duration in disabled state (microseconds) for VOXL2_IO board - * - * @min 0 - * @max 2000 - * @group VOXL2 IO - * @unit us - */ -PARAM_DEFINE_INT32(VOXL2_IO_DIS, 1000); - -/** - * VOXL2_IO Min PWM - * - * Minimum duration (microseconds) for VOXL2_IO board - * - * @min 0 - * @max 2000 - * @group VOXL2 IO - * @unit us - */ - -PARAM_DEFINE_INT32(VOXL2_IO_MIN, 1100); - -/** - * VOXL2_IO Max PWM - * - * Maximum duration (microseconds) for VOXL2_IO board - * @min 0 - * @max 2000 - * @group VOXL2 IO - * @unit us - */ -PARAM_DEFINE_INT32(VOXL2_IO_MAX, 2000); - - -/** - * VOXL2_IO Calibration Min PWM - * - * Minimum duration (microseconds) for VOXL2_IO board - * - * @min 0 - * @max 2000 - * @group VOXL2 IO - * @unit us - */ - -PARAM_DEFINE_INT32(VOXL2_IO_CMIN, 1050); - -/** - * VOXL2_IO Calibration Max PWM - * - * Maximum duration (microseconds) for VOXL2_IO board - * @min 0 - * @max 2000 - * @group VOXL2 IO - * @unit us - */ -PARAM_DEFINE_INT32(VOXL2_IO_CMAX, 2000); diff --git a/src/drivers/voxl2_io/voxl2_io_params.yaml b/src/drivers/voxl2_io/voxl2_io_params.yaml new file mode 100644 index 0000000000..847044946f --- /dev/null +++ b/src/drivers/voxl2_io/voxl2_io_params.yaml @@ -0,0 +1,57 @@ +module_name: voxl2_io +parameters: +- group: VOXL2 IO + definitions: + VOXL2_IO_BAUD: + description: + short: VOXL2_IO UART baud rate + long: Default rate is 921600, which is used for communicating with VOXL2_IO + board + type: int32 + default: 921600 + unit: bit/s + VOXL2_IO_DIS: + description: + short: VOXL2_IO Disabled PWM + long: Pulse duration in disabled state (microseconds) for VOXL2_IO board + type: int32 + default: 1000 + min: 0 + max: 2000 + unit: us + VOXL2_IO_MIN: + description: + short: VOXL2_IO Min PWM + long: Minimum duration (microseconds) for VOXL2_IO board + type: int32 + default: 1100 + min: 0 + max: 2000 + unit: us + VOXL2_IO_MAX: + description: + short: VOXL2_IO Max PWM + long: Maximum duration (microseconds) for VOXL2_IO board + type: int32 + default: 2000 + min: 0 + max: 2000 + unit: us + VOXL2_IO_CMIN: + description: + short: VOXL2_IO Calibration Min PWM + long: Minimum duration (microseconds) for VOXL2_IO board + type: int32 + default: 1050 + min: 0 + max: 2000 + unit: us + VOXL2_IO_CMAX: + description: + short: VOXL2_IO Calibration Max PWM + long: Maximum duration (microseconds) for VOXL2_IO board + type: int32 + default: 2000 + min: 0 + max: 2000 + unit: us diff --git a/src/drivers/vtxtable/VtxTable.cpp b/src/drivers/vtxtable/VtxTable.cpp index 8c8174d433..46e6e932b9 100644 --- a/src/drivers/vtxtable/VtxTable.cpp +++ b/src/drivers/vtxtable/VtxTable.cpp @@ -156,7 +156,7 @@ void vtxtable_print_status() PX4_INFO("VTX table: "); } else { - PX4_INFO("VTX table %ux%u: %s", vtxtable().bands(), vtxtable().channels(), vtxtable().name()); + PX4_INFO("VTX table %zux%zu: %s", vtxtable().bands(), vtxtable().channels(), vtxtable().name()); vtxtable_print_frequencies(); } @@ -306,7 +306,10 @@ int vtxtable_custom_command(int argc, char *argv[]) void vtxtable_print_frequencies() { for (uint8_t b = 0; b < vtxtable().bands(); b++) { - PX4_INFO_RAW("INFO [vtxtable] %c: %-*s=", vtxtable().band_letter(b), vtx::Config::NAME_LENGTH, vtxtable().band_name(b)); + PX4_INFO_RAW("INFO [vtxtable] %c: %-*s=", + vtxtable().band_letter(b), + static_cast(vtx::Config::NAME_LENGTH), + vtxtable().band_name(b)); for (uint8_t c = 0; c < vtxtable().channels(); c++) { PX4_INFO_RAW(" %4hu", vtxtable().frequency(b, c)); diff --git a/src/drivers/vtxtable/config.h b/src/drivers/vtxtable/config.h index f22b76e0f4..0da9a04701 100644 --- a/src/drivers/vtxtable/config.h +++ b/src/drivers/vtxtable/config.h @@ -404,7 +404,7 @@ public: inline int store(const char *filename) const { LockGuard lg{_mutex}; - int fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC); + int fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0666); if (fd < 0) { return errno; @@ -432,7 +432,7 @@ public: } LockGuard lg{_mutex}; - int fd = open(filename, O_RDONLY); + int fd = open(filename, O_RDONLY, 0666); if (fd < 0) { return errno; @@ -489,8 +489,34 @@ public: } // now read into the data structure directly - lseek(fd, sizeof(magic), SEEK_SET); - read(fd, &_data, sizeof(Storage)); + if (lseek(fd, sizeof(magic), SEEK_SET) < 0) { + close(fd); + return -errno; + } + + size_t total = 0; + uint8_t *ptr = reinterpret_cast(&_data); + + while (total < sizeof(Storage)) { + const int n = read(fd, ptr + total, sizeof(Storage) - total); + + if (n < 0) { + if (errno == EINTR) { + continue; + } + + close(fd); + return -errno; + } + + if (n == 0) { + close(fd); + return -EIO; + } + + total += static_cast(n); + } + close(fd); _change_value++; diff --git a/src/examples/px4_simple_app/px4_simple_app.c b/src/examples/px4_simple_app/px4_simple_app.c index 25e89efcf1..1bbd833494 100644 --- a/src/examples/px4_simple_app/px4_simple_app.c +++ b/src/examples/px4_simple_app/px4_simple_app.c @@ -1,6 +1,6 @@ /**************************************************************************** * - * Copyright (c) 2012-2019 PX4 Development Team. All rights reserved. + * Copyright (c) 2012-2026 PX4 Development Team. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/src/lib/adsb/AdsbConflict.cpp b/src/lib/adsb/AdsbConflict.cpp index 976b322796..5d7e2cded7 100644 --- a/src/lib/adsb/AdsbConflict.cpp +++ b/src/lib/adsb/AdsbConflict.cpp @@ -95,9 +95,9 @@ void AdsbConflict::detect_traffic_conflict(double lat_now, double lon_now, float int AdsbConflict::find_icao_address_in_conflict_list(uint32_t icao_address) { - for (uint8_t i = 0; i < _traffic_buffer.icao_address.size(); i++) { + for (size_t i = 0; i < _traffic_buffer.icao_address.size(); i++) { if (_traffic_buffer.icao_address[i] == icao_address) { - return i; + return static_cast(i); } } diff --git a/src/lib/adsb/CMakeLists.txt b/src/lib/adsb/CMakeLists.txt index 10a4eaf101..82eae49e2f 100644 --- a/src/lib/adsb/CMakeLists.txt +++ b/src/lib/adsb/CMakeLists.txt @@ -32,6 +32,7 @@ ############################################################################ px4_add_library(adsb AdsbConflict.cpp) +set_property(GLOBAL APPEND PROPERTY PX4_MODULE_CONFIG_FILES ${CMAKE_CURRENT_SOURCE_DIR}/parameters.yaml) target_link_libraries(adsb PUBLIC geo) diff --git a/src/lib/adsb/parameters.c b/src/lib/adsb/parameters.c deleted file mode 100644 index 6c2174d2bf..0000000000 --- a/src/lib/adsb/parameters.c +++ /dev/null @@ -1,251 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2022 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * ADSB-Out squawk code configuration - * - * This parameter defines the squawk code. Value should be between 0000 and 7777. - * - * @reboot_required false - * @min 0 - * @max 7777 - * @group ADSB - * - */ -PARAM_DEFINE_INT32(ADSB_SQUAWK, 1200); - -/** - * ADSB-Out Ident Configuration - * - * Enable Identification of Position feature - * - * @boolean - * @reboot_required false - * @group ADSB - */ -PARAM_DEFINE_INT32(ADSB_IDENT, 0); - -/** - * ADSB-In Vehicle List Size - * - * Change number of targets to track - * - * @min 0 - * @max 50 - * @reboot_required true - * @group ADSB - */ -PARAM_DEFINE_INT32(ADSB_LIST_MAX, 25); - -/** - * ADSB-Out ICAO configuration - * - * Defines the ICAO ID of the vehicle - * - * @reboot_required true - * @min -1 - * @max 16777215 - * @group ADSB - * - */ -PARAM_DEFINE_INT32(ADSB_ICAO_ID, 1194684); - -/** - * ADSB-Out Vehicle Size Configuration - * - * Report the length and width of the vehicle in meters. In most cases, use '1' for the smallest vehicle size. - * - * @reboot_required true - * @min 0 - * @max 15 - * @group ADSB - * - * @value 0 SizeUnknown - * @value 1 Len15_Wid23 - * @value 2 Len25_Wid28 - * @value 3 Len25_Wid34 - * @value 4 Len35_Wid33 - * @value 5 Len35_Wid38 - * @value 6 Len45_Wid39 - * @value 7 Len45_Wid45 - * @value 8 Len55_Wid45 - * @value 9 Len55_Wid52 - * @value 10 Len65_Wid59 - * @value 11 Len65_Wid67 - * @value 12 Len75_Wid72 - * @value 13 Len75_Wid80 - * @value 14 Len85_Wid80 - * @value 15 Len85_Wid90 - */ -PARAM_DEFINE_INT32(ADSB_LEN_WIDTH, 1); - -/** - * ADSB-Out Vehicle Emitter Type - * - * Configure the emitter type of the vehicle. - * - * @reboot_required true - * @min 0 - * @max 15 - * @group ADSB - * - * @value 0 Unknown - * @value 1 Light - * @value 2 Small - * @value 3 Large - * @value 4 HighVortex - * @value 5 Heavy - * @value 6 Performance - * @value 7 Rotorcraft - * @value 8 RESERVED - * @value 9 Glider - * @value 10 LightAir - * @value 11 Parachute - * @value 12 UltraLight - * @value 13 RESERVED - * @value 14 UAV - * @value 15 Space - * @value 16 RESERVED - * @value 17 EmergencySurf - * @value 18 ServiceSurf - * @value 19 PointObstacle - */ -PARAM_DEFINE_INT32(ADSB_EMIT_TYPE, 14); - -/** - * ADSB-Out Vehicle Max Speed - * - * Informs ADSB vehicles of this vehicle's max speed capability - * - * @reboot_required true - * @min 0 - * @max 6 - * @value 0 UnknownMaxSpeed - * @value 1 75Kts - * @value 2 150Kts - * @value 3 300Kts - * @value 4 600Kts - * @value 5 1200Kts - * @value 6 Over1200Kts - * @group ADSB - */ -PARAM_DEFINE_INT32(ADSB_MAX_SPEED, 0); - -/** - * ADSB-In Special ICAO configuration - * - * This vehicle is always tracked. Use 0 to disable. - * - * @reboot_required false - * @min 0 - * @max 16777215 - * @group ADSB - * - */ -PARAM_DEFINE_INT32(ADSB_ICAO_SPECL, 0); - -/** - * ADSB-Out Emergency State - * - * Sets the vehicle emergency state - * - * @reboot_required false - * @min 0 - * @max 6 - * @value 0 NoEmergency - * @value 1 General - * @value 2 Medical - * @value 3 LowFuel - * @value 4 NoCommunications - * @value 5 Interference - * @value 6 Downed - * @group ADSB - */ -PARAM_DEFINE_INT32(ADSB_EMERGC, 0); - -/** - * ADSB-Out GPS Offset lat - * - * Sets GPS lataral offset encoding - * - * @reboot_required false - * @min 0 - * @max 7 - * @value 0 NoData - * @value 1 LatLeft2M - * @value 2 LatLeft4M - * @value 3 LatLeft6M - * @value 4 LatRight0M - * @value 5 LatRight2M - * @value 6 LatRight4M - * @value 7 LatRight6M - * @group ADSB - */ -PARAM_DEFINE_INT32(ADSB_GPS_OFF_LAT, 0); - -/** - * ADSB-Out GPS Offset lon - * - * Sets GPS longitudinal offset encoding - * - * @reboot_required false - * @min 0 - * @max 1 - * @value 0 NoData - * @value 1 AppliedBySensor - * @group ADSB - */ -PARAM_DEFINE_INT32(ADSB_GPS_OFF_LON, 0); - -/** - * First 4 characters of CALLSIGN - * - * Sets first 4 characters of a total of 8. Valid characters are A-Z, 0-9, " ". Example "PX4 " -> 1347957792 - * For CALLSIGN shorter than 8 characters use the null terminator at the end '\0'. - * - * @reboot_required true - * @group ADSB - */ - -PARAM_DEFINE_INT32(ADSB_CALLSIGN_1, 0); - -/** -* Second 4 characters of CALLSIGN -* -* Sets second 4 characters of a total of 8. Valid characters are A-Z, 0-9, " " only. Example "TEST" -> 1413829460 -* For CALLSIGN shorter than 8 characters use the null terminator at the end '\0'. -* -* @reboot_required true -* @group ADSB -*/ -PARAM_DEFINE_INT32(ADSB_CALLSIGN_2, 0); diff --git a/src/lib/adsb/parameters.yaml b/src/lib/adsb/parameters.yaml new file mode 100644 index 0000000000..0ba0d224a8 --- /dev/null +++ b/src/lib/adsb/parameters.yaml @@ -0,0 +1,187 @@ +module_name: adsb +parameters: +- group: ADSB + definitions: + ADSB_SQUAWK: + description: + short: ADSB-Out squawk code configuration + long: This parameter defines the squawk code. Value should be between 0000 + and 7777. + type: int32 + default: 1200 + reboot_required: false + min: 0 + max: 7777 + ADSB_IDENT: + description: + short: ADSB-Out Ident Configuration + long: Enable Identification of Position feature + type: boolean + default: 0 + reboot_required: false + ADSB_LIST_MAX: + description: + short: ADSB-In Vehicle List Size + long: Change number of targets to track + type: int32 + default: 25 + min: 0 + max: 50 + reboot_required: true + ADSB_ICAO_ID: + description: + short: ADSB-Out ICAO configuration + long: Defines the ICAO ID of the vehicle + type: int32 + default: 1194684 + reboot_required: true + min: -1 + max: 16777215 + ADSB_LEN_WIDTH: + description: + short: ADSB-Out Vehicle Size Configuration + long: Report the length and width of the vehicle in meters. In most cases, + use '1' for the smallest vehicle size. + type: enum + values: + 0: SizeUnknown + 1: Len15_Wid23 + 2: Len25_Wid28 + 3: Len25_Wid34 + 4: Len35_Wid33 + 5: Len35_Wid38 + 6: Len45_Wid39 + 7: Len45_Wid45 + 8: Len55_Wid45 + 9: Len55_Wid52 + 10: Len65_Wid59 + 11: Len65_Wid67 + 12: Len75_Wid72 + 13: Len75_Wid80 + 14: Len85_Wid80 + 15: Len85_Wid90 + default: 1 + reboot_required: true + min: 0 + max: 15 + ADSB_EMIT_TYPE: + description: + short: ADSB-Out Vehicle Emitter Type + long: Configure the emitter type of the vehicle. + type: enum + values: + 0: Unknown + 1: Light + 2: Small + 3: Large + 4: HighVortex + 5: Heavy + 6: Performance + 7: Rotorcraft + 8: RESERVED + 9: Glider + 10: LightAir + 11: Parachute + 12: UltraLight + 13: RESERVED + 14: UAV + 15: Space + 16: RESERVED + 17: EmergencySurf + 18: ServiceSurf + 19: PointObstacle + default: 14 + reboot_required: true + min: 0 + max: 19 + ADSB_MAX_SPEED: + description: + short: ADSB-Out Vehicle Max Speed + long: Informs ADSB vehicles of this vehicle's max speed capability + type: enum + values: + 0: UnknownMaxSpeed + 1: 75Kts + 2: 150Kts + 3: 300Kts + 4: 600Kts + 5: 1200Kts + 6: Over1200Kts + default: 0 + reboot_required: true + min: 0 + max: 6 + ADSB_ICAO_SPECL: + description: + short: ADSB-In Special ICAO configuration + long: This vehicle is always tracked. Use 0 to disable. + type: int32 + default: 0 + reboot_required: false + min: 0 + max: 16777215 + ADSB_EMERGC: + description: + short: ADSB-Out Emergency State + long: Sets the vehicle emergency state + type: enum + values: + 0: NoEmergency + 1: General + 2: Medical + 3: LowFuel + 4: NoCommunications + 5: Interference + 6: Downed + default: 0 + reboot_required: false + min: 0 + max: 6 + ADSB_GPS_OFF_LAT: + description: + short: ADSB-Out GPS Offset lat + long: Sets GPS lataral offset encoding + type: enum + values: + 0: NoData + 1: LatLeft2M + 2: LatLeft4M + 3: LatLeft6M + 4: LatRight0M + 5: LatRight2M + 6: LatRight4M + 7: LatRight6M + default: 0 + reboot_required: false + min: 0 + max: 7 + ADSB_GPS_OFF_LON: + description: + short: ADSB-Out GPS Offset lon + long: Sets GPS longitudinal offset encoding + type: enum + values: + 0: NoData + 1: AppliedBySensor + default: 0 + reboot_required: false + min: 0 + max: 1 + ADSB_CALLSIGN_1: + description: + short: First 4 characters of CALLSIGN + long: |- + Sets first 4 characters of a total of 8. Valid characters are A-Z, 0-9, " ". Example "PX4 " -> 1347957792 + For CALLSIGN shorter than 8 characters use the null terminator at the end '\0'. + type: int32 + default: 0 + reboot_required: true + ADSB_CALLSIGN_2: + description: + short: Second 4 characters of CALLSIGN + long: |- + Sets second 4 characters of a total of 8. Valid characters are A-Z, 0-9, " " only. Example "TEST" -> 1413829460 + For CALLSIGN shorter than 8 characters use the null terminator at the end '\0'. + type: int32 + default: 0 + reboot_required: true diff --git a/src/lib/battery/battery.cpp b/src/lib/battery/battery.cpp index 16b79a6bbd..766c147e61 100644 --- a/src/lib/battery/battery.cpp +++ b/src/lib/battery/battery.cpp @@ -87,6 +87,9 @@ Battery::Battery(int index, ModuleParams *parent, const int sample_interval_us, snprintf(param_name, sizeof(param_name), "BAT%d_SOURCE", _index); _param_handles.source = param_find(param_name); + snprintf(param_name, sizeof(param_name), "BAT%d_I_OVERWRITE", _index); + _param_handles.i_overwrite = param_find(param_name); + _param_handles.low_thr = param_find("BAT_LOW_THR"); _param_handles.crit_thr = param_find("BAT_CRIT_THR"); _param_handles.emergen_thr = param_find("BAT_EMERGEN_THR"); @@ -103,7 +106,13 @@ void Battery::updateVoltage(const float voltage_v) void Battery::updateCurrent(const float current_a) { - _current_a = current_a; + // Overwrite the measured current if current overwrite is defined and vehicle is unarmed + if (!_armed && _params.i_overwrite > FLT_EPSILON) { + _current_a = _params.i_overwrite; + + } else { + _current_a = current_a; + } } void Battery::updateTemperature(const float temperature_c) @@ -144,6 +153,15 @@ void Battery::updateBatteryStatus(const hrt_abstime ×tamp) if (_connected && _battery_initialized) { _warning = determineWarning(_state_of_charge); } + + if (_vehicle_status_sub.updated()) { + vehicle_status_s vehicle_status; + + if (_vehicle_status_sub.copy(&vehicle_status)) { + _armed = (vehicle_status.arming_state == vehicle_status_s::ARMING_STATE_ARMED); + _vehicle_status_is_fw = (vehicle_status.vehicle_type == vehicle_status_s::VEHICLE_TYPE_FIXED_WING); + } + } } battery_status_s Battery::getBatteryStatus() @@ -166,6 +184,8 @@ battery_status_s Battery::getBatteryStatus() battery_status.warning = _warning; battery_status.timestamp = hrt_absolute_time(); battery_status.faults = determineFaults(); + battery_status.remaining_capacity_wh = NAN; // not measured by dumb power module; smart-battery drivers overwrite + battery_status.nominal_voltage = NAN; // not measured by dumb power module; smart-battery drivers overwrite battery_status.internal_resistance_estimate = _internal_resistance_estimate; battery_status.ocv_estimate = _voltage_v + _internal_resistance_estimate * _params.n_cells * _current_a; battery_status.ocv_estimate_filtered = _ocv_filter_v.getState(); @@ -201,8 +221,9 @@ void Battery::updateDt(const hrt_abstime ×tamp) float Battery::sumDischarged(float current_a) { - if (_dt > FLT_EPSILON) { + if (_dt > FLT_EPSILON && fabsf(current_a + 1.f) > FLT_EPSILON) { // mAh since last loop: (current[A] * 1000 = [mA]) * (dt[s] / 3600 = [h]) + // current = -1 means invalid current measurement _discharged_mah_loop = (current_a * 1e3f) * (_dt / 3600.f); _discharged_mah += _discharged_mah_loop; } @@ -352,30 +373,19 @@ void Battery::computeScale() float Battery::computeRemainingTime(float current_a) { float time_remaining_s = NAN; - bool reset_current_avg_filter = false; - - if (_vehicle_status_sub.updated()) { - vehicle_status_s vehicle_status; - - if (_vehicle_status_sub.copy(&vehicle_status)) { - _armed = (vehicle_status.arming_state == vehicle_status_s::ARMING_STATE_ARMED); - - if (vehicle_status.vehicle_type == vehicle_status_s::VEHICLE_TYPE_FIXED_WING && !_vehicle_status_is_fw) { - reset_current_avg_filter = true; - } - - _vehicle_status_is_fw = (vehicle_status.vehicle_type == vehicle_status_s::VEHICLE_TYPE_FIXED_WING); - } - } _flight_phase_estimation_sub.update(); + bool reset_filter_transition_now = !_vehicle_status_was_fw && _vehicle_status_is_fw; + // reset filter if not feasible, negative or we did a VTOL transition to FW mode if (!PX4_ISFINITE(_current_average_filter_a.getState()) || _current_average_filter_a.getState() < FLT_EPSILON - || reset_current_avg_filter) { + || reset_filter_transition_now) { _current_average_filter_a.reset(_params.bat_avrg_current); } + _vehicle_status_was_fw = _vehicle_status_is_fw; + if (_armed && PX4_ISFINITE(current_a)) { // For FW only update when we are in level flight if (!_vehicle_status_is_fw || ((hrt_absolute_time() - _flight_phase_estimation_sub.get().timestamp) < 2_s @@ -411,6 +421,7 @@ void Battery::updateParams() param_get(_param_handles.crit_thr, &_params.crit_thr); param_get(_param_handles.emergen_thr, &_params.emergen_thr); param_get(_param_handles.bat_avrg_current, &_params.bat_avrg_current); + param_get(_param_handles.i_overwrite, &_params.i_overwrite); float capacity{0.f}; param_get(_param_handles.capacity, &capacity); diff --git a/src/lib/battery/battery.h b/src/lib/battery/battery.h index b432c80e27..bcc9baa6d9 100644 --- a/src/lib/battery/battery.h +++ b/src/lib/battery/battery.h @@ -147,6 +147,7 @@ protected: param_t emergen_thr; param_t source; param_t bat_avrg_current; + param_t i_overwrite; } _param_handles{}; struct { @@ -159,6 +160,7 @@ protected: float emergen_thr; int32_t source; float bat_avrg_current; + float i_overwrite; } _params{}; const int _index; @@ -200,6 +202,7 @@ private: hrt_abstime _last_timestamp{0}; bool _armed{false}; bool _vehicle_status_is_fw{false}; + bool _vehicle_status_was_fw{false}; hrt_abstime _last_unconnected_timestamp{0}; // Internal Resistance estimation diff --git a/src/lib/battery/module.yaml b/src/lib/battery/module.yaml index adaaf72395..68e5d12a79 100644 --- a/src/lib/battery/module.yaml +++ b/src/lib/battery/module.yaml @@ -126,6 +126,23 @@ parameters: instance_start: 1 default: [0, -1, -1] + BAT${i}_I_OVERWRITE: + description: + short: Battery ${i} idle current overwrite + long: | + 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. + type: float + decimal: 2 + num_instances: *max_num_config_instances + instance_start: 1 + default: [0, 0, 0] + BAT_LOW_THR: description: short: Low threshold. diff --git a/src/lib/circuit_breaker/CMakeLists.txt b/src/lib/circuit_breaker/CMakeLists.txt index 54ee7cdbd0..c3a1743d4a 100644 --- a/src/lib/circuit_breaker/CMakeLists.txt +++ b/src/lib/circuit_breaker/CMakeLists.txt @@ -32,3 +32,4 @@ ############################################################################ px4_add_library(circuit_breaker circuit_breaker.cpp) +set_property(GLOBAL APPEND PROPERTY PX4_MODULE_CONFIG_FILES ${CMAKE_CURRENT_SOURCE_DIR}/circuit_breaker_params.yaml) diff --git a/src/lib/circuit_breaker/circuit_breaker_params.c b/src/lib/circuit_breaker/circuit_breaker_params.c deleted file mode 100644 index b68e60a56c..0000000000 --- a/src/lib/circuit_breaker/circuit_breaker_params.c +++ /dev/null @@ -1,134 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2014 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/* - * @file circuit_breaker_params.c - * - * Circuit breaker parameters. - * Analog to real aviation circuit breakers these parameters - * allow to disable subsystems. They are not supported as standard - * operation procedure and are only provided for development purposes. - * To ensure they are not activated accidentally, the associated - * parameter needs to set to the key (magic). - */ - -/** - * Circuit breaker for power supply check - * - * Setting this parameter to 894281 will disable the power valid - * checks in the commander. - * WARNING: ENABLING THIS CIRCUIT BREAKER IS AT OWN RISK - * - * @min 0 - * @max 894281 - * @category Developer - * @group Circuit Breaker - */ -PARAM_DEFINE_INT32(CBRK_SUPPLY_CHK, 0); - -/** - * Circuit breaker for IO safety - * - * Setting this parameter to 22027 will disable IO safety. - * WARNING: ENABLING THIS CIRCUIT BREAKER IS AT OWN RISK - * - * @min 0 - * @max 22027 - * @category Developer - * @group Circuit Breaker - */ -PARAM_DEFINE_INT32(CBRK_IO_SAFETY, 22027); - -/** - * Circuit breaker for flight termination - * - * Setting this parameter to 121212 will disable the flight termination action if triggered - * by the FailureDetector logic or if FMU is lost. - * This circuit breaker does not affect the RC loss, data link loss, geofence, - * and takeoff failure detection safety logic. - * - * @reboot_required true - * @min 0 - * @max 121212 - * @category Developer - * @group Circuit Breaker - */ -PARAM_DEFINE_INT32(CBRK_FLIGHTTERM, 121212); - -/** - * Circuit breaker for disabling buzzer - * - * Setting this parameter to 782097 will disable the buzzer audio notification. - * - * Setting this parameter to 782090 will disable the startup tune, while keeping - * all others enabled. - * - * @reboot_required true - * @min 0 - * @max 782097 - * @category Developer - * @group Circuit Breaker - */ -PARAM_DEFINE_INT32(CBRK_BUZZER, 0); - -/** - * Circuit breaker for USB link check - * - * Setting this parameter to 197848 will disable the USB connected - * checks in the commander, setting it to 0 keeps them enabled (recommended). - * - * We are generally recommending to not fly with the USB link - * connected and production vehicles should set this parameter to - * zero to prevent users from flying USB powered. However, for R&D purposes - * it has proven over the years to work just fine. - * - * @min 0 - * @max 197848 - * @category Developer - * @group Circuit Breaker - */ -PARAM_DEFINE_INT32(CBRK_USB_CHK, 197848); - -/** - * Circuit breaker for arming in fixed-wing mode check - * - * Setting this parameter to 159753 will enable arming in fixed-wing - * mode for VTOLs. - * WARNING: ENABLING THIS CIRCUIT BREAKER IS AT OWN RISK - * - * @min 0 - * @max 159753 - * @category Developer - * @group Circuit Breaker - */ -PARAM_DEFINE_INT32(CBRK_VTOLARMING, 0); diff --git a/src/lib/circuit_breaker/circuit_breaker_params.yaml b/src/lib/circuit_breaker/circuit_breaker_params.yaml new file mode 100644 index 0000000000..6ace492dd3 --- /dev/null +++ b/src/lib/circuit_breaker/circuit_breaker_params.yaml @@ -0,0 +1,83 @@ +module_name: circuit_breaker +parameters: +- group: Circuit Breaker + definitions: + CBRK_SUPPLY_CHK: + description: + short: Circuit breaker for power supply check + long: |- + Setting this parameter to 894281 will disable the power valid + checks in the commander. + WARNING: ENABLING THIS CIRCUIT BREAKER IS AT OWN RISK + category: Developer + type: int32 + default: 0 + min: 0 + max: 894281 + CBRK_IO_SAFETY: + description: + short: Circuit breaker for IO safety + long: |- + Setting this parameter to 22027 will disable IO safety. + WARNING: ENABLING THIS CIRCUIT BREAKER IS AT OWN RISK + category: Developer + type: int32 + default: 22027 + min: 0 + max: 22027 + CBRK_FLIGHTTERM: + description: + short: Circuit breaker for flight termination + long: |- + Setting this parameter to 121212 will disable the flight termination action if triggered + by the FailureDetector logic or if FMU is lost. + This circuit breaker does not affect the RC loss, data link loss, geofence, + and takeoff failure detection safety logic. + category: Developer + type: int32 + default: 121212 + reboot_required: true + min: 0 + max: 121212 + CBRK_BUZZER: + description: + short: Circuit breaker for disabling buzzer + long: |- + Setting this parameter to 782097 will disable the buzzer audio notification. + + Setting this parameter to 782090 will disable the startup tune, while keeping + all others enabled. + category: Developer + type: int32 + default: 0 + reboot_required: true + min: 0 + max: 782097 + CBRK_USB_CHK: + description: + short: Circuit breaker for USB link check + long: |- + Setting this parameter to 197848 will disable the USB connected + checks in the commander, setting it to 0 keeps them enabled (recommended). + + We are generally recommending to not fly with the USB link + connected and production vehicles should set this parameter to + zero to prevent users from flying USB powered. However, for R&D purposes + it has proven over the years to work just fine. + category: Developer + type: int32 + default: 197848 + min: 0 + max: 197848 + CBRK_VTOLARMING: + description: + short: Circuit breaker for arming in fixed-wing mode check + long: |- + Setting this parameter to 159753 will enable arming in fixed-wing + mode for VTOLs. + WARNING: ENABLING THIS CIRCUIT BREAKER IS AT OWN RISK + category: Developer + type: int32 + default: 0 + min: 0 + max: 159753 diff --git a/src/lib/collision_prevention/CMakeLists.txt b/src/lib/collision_prevention/CMakeLists.txt index ae42b65454..c0c6e06210 100644 --- a/src/lib/collision_prevention/CMakeLists.txt +++ b/src/lib/collision_prevention/CMakeLists.txt @@ -35,6 +35,7 @@ px4_add_library(CollisionPrevention CollisionPrevention.cpp ObstacleMath.cpp ) +set_property(GLOBAL APPEND PROPERTY PX4_MODULE_CONFIG_FILES ${CMAKE_CURRENT_SOURCE_DIR}/collisionprevention_params.yaml) target_compile_options(CollisionPrevention PRIVATE -Wno-cast-align) # TODO: fix and enable target_include_directories(CollisionPrevention PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) target_link_libraries(CollisionPrevention PRIVATE mathlib) diff --git a/src/lib/collision_prevention/CollisionPrevention.cpp b/src/lib/collision_prevention/CollisionPrevention.cpp index 7e04629915..a375e67632 100644 --- a/src/lib/collision_prevention/CollisionPrevention.cpp +++ b/src/lib/collision_prevention/CollisionPrevention.cpp @@ -40,6 +40,8 @@ #include "CollisionPrevention.hpp" #include "ObstacleMath.hpp" #include +#include + using namespace matrix; @@ -329,7 +331,7 @@ CollisionPrevention::_enterData(int map_index, float sensor_range, float sensor_ //3. this sensor data is out of range, the last reading was as well and this is the sensor with longest range //4. this sensor data is out of range, the last reading was valid and coming from the same sensor - uint16_t sensor_range_cm = static_cast(100.0f * sensor_range + 0.5f); //convert to cm + uint16_t sensor_range_cm = static_cast(lroundf(100.0f * sensor_range)); //convert to cm if (sensor_reading < sensor_range) { if ((_obstacle_map_body_frame.distances[map_index] < _data_maxranges[map_index] @@ -355,18 +357,18 @@ CollisionPrevention::_enterData(int map_index, float sensor_range, float sensor_ bool CollisionPrevention::_checkSetpointDirectionFeasability() { - bool setpoint_feasible = true; - - for (int i = 0; i < BIN_COUNT; i++) { - // check if our setpoint is either pointing in a direction where data exists, or if not, wether we are allowed to go where there is no data - if ((_obstacle_map_body_frame.distances[i] == UINT16_MAX && i == _setpoint_index) && (!_param_cp_go_no_data.get() - || (_param_cp_go_no_data.get() && _data_fov[i]))) { - setpoint_feasible = false; - - } + if (_setpoint_index < 0 || _setpoint_index >= BIN_COUNT) { + return false; // treat out-of-bounds as unsafe } - return setpoint_feasible; + const bool no_data = (_obstacle_map_body_frame.distances[_setpoint_index] == UINT16_MAX); + const bool allow_movement_towards_no_data = _param_cp_go_no_data.get(); + const bool fov_at_setpoint = _data_fov[_setpoint_index]; + + // The setpoint is feasible if: + // 1. There is actual data at the setpoint (no_data == false), OR + // 2. There is no data, but movement into no-data bins is allowed and the setpoint is outside the sensor FOV. + return !no_data || (allow_movement_towards_no_data && !fov_at_setpoint); } void @@ -406,13 +408,13 @@ CollisionPrevention::_addDistanceSensorData(distance_sensor_s &distance_sensor, ObstacleMath::project_distance_on_horizontal_plane(distance_reading, sensor_yaw_body_rad, vehicle_attitude); } - uint16_t sensor_range = static_cast(100.0f * distance_sensor.max_distance + 0.5f); // convert to cm + uint16_t sensor_range = static_cast(lroundf(100.0f * distance_sensor.max_distance)); // convert to cm for (int bin = lower_bound; bin <= upper_bound; ++bin) { int wrapped_bin = ObstacleMath::wrap_bin(bin, BIN_COUNT); if (_enterData(wrapped_bin, distance_sensor.max_distance, distance_reading)) { - _obstacle_map_body_frame.distances[wrapped_bin] = static_cast(100.0f * distance_reading + 0.5f); + _obstacle_map_body_frame.distances[wrapped_bin] = static_cast(lroundf(100.0f * distance_reading)); _data_timestamps[wrapped_bin] = _obstacle_map_body_frame.timestamp; _data_maxranges[wrapped_bin] = sensor_range; _data_fov[wrapped_bin] = 1; diff --git a/src/lib/collision_prevention/collisionprevention_params.c b/src/lib/collision_prevention/collisionprevention_params.c deleted file mode 100644 index b573abff1f..0000000000 --- a/src/lib/collision_prevention/collisionprevention_params.c +++ /dev/null @@ -1,86 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2018 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file collisionprevention_params.c - * - * Parameters defined by the collisionprevention lib. - * - * @author Tanja Baumann - */ - -/** - * Minimum distance the vehicle should keep to all obstacles - * - * Only used in Position mode. Collision avoidance is disabled by setting this parameter to a negative value - * - * @min -1 - * @max 15 - * @unit m - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(CP_DIST, -1.0f); - -/** - * Average delay of the range sensor message plus the tracking delay of the position controller in seconds - * - * Only used in Position mode. - * - * @min 0 - * @max 1 - * @unit s - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(CP_DELAY, 0.4f); - -/** - * Angle left/right from the commanded setpoint by which the collision prevention algorithm can choose to change the setpoint direction - * - * Only used in Position mode. - * - * @min 0 - * @max 90 - * @unit deg - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(CP_GUIDE_ANG, 30.f); - -/** - * Boolean to allow moving into directions where there is no sensor data (outside FOV) - * - * Only used in Position mode. - * - * @boolean - * @group Multicopter Position Control - */ -PARAM_DEFINE_INT32(CP_GO_NO_DATA, 0); diff --git a/src/lib/collision_prevention/collisionprevention_params.yaml b/src/lib/collision_prevention/collisionprevention_params.yaml new file mode 100644 index 0000000000..7e62b36987 --- /dev/null +++ b/src/lib/collision_prevention/collisionprevention_params.yaml @@ -0,0 +1,47 @@ +module_name: collision_prevention +parameters: +- group: Multicopter Position Control + definitions: + CP_DIST: + description: + short: Minimum distance the vehicle should keep to all obstacles + long: Only used in Position mode. Collision avoidance is disabled by setting + this parameter to a negative value + type: float + default: -1.0 + min: -1 + max: 15 + unit: m + CP_DELAY: + description: + short: Range sensor and position controller average delay + long: |- + Average delay of the range sensor message plus the tracking delay of the position controller in seconds + + Only used in Position mode. + type: float + default: 0.4 + min: 0 + max: 1 + unit: s + CP_GUIDE_ANG: + description: + short: Collision prevention guidance angle + long: |- + Angle left/right from the commanded setpoint by which the collision prevention algorithm can choose to change the setpoint direction + + Only used in Position mode. + type: float + default: 30.0 + min: 0 + max: 90 + unit: deg + CP_GO_NO_DATA: + description: + short: Allow moving into directions without sensor data + long: |- + Boolean to allow moving into directions where there is no sensor data (outside FOV) + + Only used in Position mode. + type: boolean + default: 0 diff --git a/src/lib/control_allocation/actuator_effectiveness/ActuatorEffectiveness.cpp b/src/lib/control_allocation/actuator_effectiveness/ActuatorEffectiveness.cpp index b36da8230f..b714829f04 100644 --- a/src/lib/control_allocation/actuator_effectiveness/ActuatorEffectiveness.cpp +++ b/src/lib/control_allocation/actuator_effectiveness/ActuatorEffectiveness.cpp @@ -50,6 +50,11 @@ int ActuatorEffectiveness::Configuration::addActuator(ActuatorType type, const m return -1; } + if (type == ActuatorType::MOTORS && selected_matrix != 0) { + PX4_ERR("Trying to add motors to matrix %d (add to matrix 0)", selected_matrix); + return -1; + } + effectiveness_matrices[selected_matrix](ActuatorEffectiveness::ControlAxis::ROLL, actuator_idx) = torque(0); effectiveness_matrices[selected_matrix](ActuatorEffectiveness::ControlAxis::PITCH, actuator_idx) = torque(1); effectiveness_matrices[selected_matrix](ActuatorEffectiveness::ControlAxis::YAW, actuator_idx) = torque(2); @@ -84,10 +89,10 @@ int ActuatorEffectiveness::Configuration::totalNumActuators() const return total_count; } -void ActuatorEffectiveness::stopMaskedMotorsWithZeroThrust(uint32_t stoppable_motors_mask, ActuatorVector &actuator_sp) +void ActuatorEffectiveness::stopMaskedMotorsWithZeroThrust(ActuatorBitmask stoppable_motors_mask, ActuatorVector &actuator_sp) { for (int actuator_idx = 0; actuator_idx < NUM_ACTUATORS; actuator_idx++) { - const uint32_t motor_mask = (1u << actuator_idx); + const ActuatorBitmask motor_mask = (1u << actuator_idx); if (stoppable_motors_mask & motor_mask) { diff --git a/src/lib/control_allocation/actuator_effectiveness/ActuatorEffectiveness.hpp b/src/lib/control_allocation/actuator_effectiveness/ActuatorEffectiveness.hpp index ffc2315b72..b901d44a21 100644 --- a/src/lib/control_allocation/actuator_effectiveness/ActuatorEffectiveness.hpp +++ b/src/lib/control_allocation/actuator_effectiveness/ActuatorEffectiveness.hpp @@ -88,6 +88,10 @@ public: using EffectivenessMatrix = matrix::Matrix; using ActuatorVector = matrix::Vector; + using ActuatorBitmask = uint32_t; + + static_assert(NUM_ACTUATORS <= 8 * sizeof(ActuatorBitmask), + "NUM_ACTUATORS exceeds the number of bits available in the mask type."); enum class FlightPhase { HOVER_FLIGHT = 0, @@ -201,7 +205,7 @@ public: /** * Get a bitmask of motors to be stopped */ - virtual uint32_t getStoppedMotors() const { return _stopped_motors_mask; } + virtual ActuatorBitmask getStoppedMotors() const { return _stopped_motors_mask; } /** * Fill in the unallocated torque and thrust, customized by effectiveness type. @@ -215,9 +219,9 @@ public: * @param stoppable_motors_mask mask of motors that should be stopped if there's no thrust demand * @param actuator_sp outcome of the allocation to determine if the motor should be stopped */ - virtual void stopMaskedMotorsWithZeroThrust(uint32_t stoppable_motors_mask, ActuatorVector &actuator_sp); + virtual void stopMaskedMotorsWithZeroThrust(ActuatorBitmask stoppable_motors_mask, ActuatorVector &actuator_sp); protected: FlightPhase _flight_phase{FlightPhase::HOVER_FLIGHT}; - uint32_t _stopped_motors_mask{0}; + ActuatorBitmask _stopped_motors_mask{0}; }; diff --git a/src/lib/control_allocation/control_allocation/ControlAllocation.cpp b/src/lib/control_allocation/control_allocation/ControlAllocation.cpp index dfdf9ca7f7..7278108a8c 100644 --- a/src/lib/control_allocation/control_allocation/ControlAllocation.cpp +++ b/src/lib/control_allocation/control_allocation/ControlAllocation.cpp @@ -110,17 +110,54 @@ const void ControlAllocation::applySlewRateLimit(float dt) { + // For motors, an actuator setpoint of NaN represents switching off the + // motor (giving it disarmed PWM). Physically it results in zero thrust, + // therefore for the purpose of slew limiting we need to consider NaN + // equivalent to zero. But after the slew limiting, we again replace by + // NaN. + + // We want the slew rate to behave like this on different input transitions: + // - between 0 and NaN: immediately match input + // - nonzero to NaN: sink to zero with slew rate, then replace zero by NaN + // - NaN to nonzero: replace NaN by zero, then rise with slew rate to input + // - between nonzero and 0: slew limit, then match input + for (int i = 0; i < _num_actuators; i++) { if (_actuator_slew_rate_limit(i) > FLT_EPSILON) { - float delta_sp_max = dt * (_actuator_max(i) - _actuator_min(i)) / _actuator_slew_rate_limit(i); - float delta_sp = _actuator_sp(i) - _prev_actuator_sp(i); + + float input = _actuator_sp(i); + float previous = _prev_actuator_sp(i); + + // Before slew limiting, transform NaN to 0, but remember if the input was NaN + const bool input_is_nan = !PX4_ISFINITE(input); + + if (input_is_nan) { + input = 0.f; + } + + if (!PX4_ISFINITE(previous)) { + previous = 0.f; + } + + // Slew limit without any NaN involved + const float delta_sp_max = dt * (_actuator_max(i) - _actuator_min(i)) / _actuator_slew_rate_limit(i); + const float delta_sp = input - previous; + + float output = input; if (delta_sp > delta_sp_max) { - _actuator_sp(i) = _prev_actuator_sp(i) + delta_sp_max; + output = previous + delta_sp_max; } else if (delta_sp < -delta_sp_max) { - _actuator_sp(i) = _prev_actuator_sp(i) - delta_sp_max; + output = previous - delta_sp_max; } + + // Transform back to NaN if appropriate + if (input_is_nan && fabsf(output) < FLT_EPSILON) { + output = NAN; + } + + _actuator_sp(i) = output; } } } diff --git a/src/lib/control_allocation/control_allocation/ControlAllocation.hpp b/src/lib/control_allocation/control_allocation/ControlAllocation.hpp index a106120026..8d3c75d6e3 100644 --- a/src/lib/control_allocation/control_allocation/ControlAllocation.hpp +++ b/src/lib/control_allocation/control_allocation/ControlAllocation.hpp @@ -83,6 +83,7 @@ public: static constexpr uint8_t NUM_AXES = ActuatorEffectiveness::NUM_AXES; using ActuatorVector = matrix::Vector; + using ActuatorBitmask = ActuatorEffectiveness::ActuatorBitmask; enum ControlAxis { ROLL = 0, @@ -222,6 +223,24 @@ public: ActuatorVector normalizeActuatorSetpoint(const ActuatorVector &actuator) const; + /** + * Apply a mask of actuators to be set to NaN. + * + * A NaN value in _actuator_sp represents a disabled or stopped actuator. + * This mask is typically used to stop motors in specific flight phases or when certain thrust components are NaN. + * + * @param nan_actuators_mask Bitmask indicating which actuators to set to NaN. + * If (nan_actuators_mask & (1 << i)), _actuator_sp(i) becomes NaN. + */ + void applyNanToActuators(ActuatorBitmask nan_actuators_mask) + { + for (int i = 0; i < _num_actuators; i++) { + if (nan_actuators_mask & (1u << i)) { + _actuator_sp(i) = NAN; + } + } + } + virtual void updateParameters() {} int numConfiguredActuators() const { return _num_actuators; } diff --git a/src/lib/controllib/block/BlockParam.cpp b/src/lib/controllib/block/BlockParam.cpp index f78258ade3..38792e1780 100644 --- a/src/lib/controllib/block/BlockParam.cpp +++ b/src/lib/controllib/block/BlockParam.cpp @@ -37,6 +37,7 @@ * Controller library code */ +#include "Block.hpp" #include "BlockParam.hpp" #include diff --git a/src/lib/controllib/block/BlockParam.hpp b/src/lib/controllib/block/BlockParam.hpp index c298bdbba7..d5939481fa 100644 --- a/src/lib/controllib/block/BlockParam.hpp +++ b/src/lib/controllib/block/BlockParam.hpp @@ -39,8 +39,6 @@ #pragma once -#include "Block.hpp" - #include #include #include diff --git a/src/lib/controllib/controllib_test/CMakeLists.txt b/src/lib/controllib/controllib_test/CMakeLists.txt index 0d57d54cc1..87333294b6 100644 --- a/src/lib/controllib/controllib_test/CMakeLists.txt +++ b/src/lib/controllib/controllib_test/CMakeLists.txt @@ -38,5 +38,7 @@ px4_add_module( -Wno-double-promotion # TODO: fix in Matrix library Vector::pow() SRCS controllib_test_main.cpp + MODULE_CONFIG + test_params.yaml DEPENDS ) diff --git a/src/lib/controllib/controllib_test/test_params.c b/src/lib/controllib/controllib_test/test_params.c deleted file mode 100644 index bfaa19636b..0000000000 --- a/src/lib/controllib/controllib_test/test_params.c +++ /dev/null @@ -1,66 +0,0 @@ -#include -// WARNING: -// do not changes these unless -// you want to recompute the -// answers for all of the unit tests - - -/** - * @group Testing - */ -PARAM_DEFINE_FLOAT(TEST_MIN, -1.0f); - -/** - * @group Testing - */ -PARAM_DEFINE_FLOAT(TEST_MAX, 1.0f); - -/** - * @group Testing - */ -PARAM_DEFINE_FLOAT(TEST_TRIM, 0.5f); - -/** - * @group Testing - */ -PARAM_DEFINE_FLOAT(TEST_HP, 10.0f); - -/** - * @group Testing - */ -PARAM_DEFINE_FLOAT(TEST_LP, 10.0f); - -/** - * @group Testing - */ -PARAM_DEFINE_FLOAT(TEST_P, 0.2f); - -/** - * @group Testing - */ -PARAM_DEFINE_FLOAT(TEST_I, 0.1f); - -/** - * @group Testing - */ -PARAM_DEFINE_FLOAT(TEST_I_MAX, 1.0f); - -/** - * @group Testing - */ -PARAM_DEFINE_FLOAT(TEST_D, 0.01f); - -/** - * @group Testing - */ -PARAM_DEFINE_FLOAT(TEST_D_LP, 10.0f); - -/** - * @group Testing - */ -PARAM_DEFINE_FLOAT(TEST_MEAN, 1.0f); - -/** - * @group Testing - */ -PARAM_DEFINE_FLOAT(TEST_DEV, 2.0f); diff --git a/src/lib/controllib/controllib_test/test_params.yaml b/src/lib/controllib/controllib_test/test_params.yaml new file mode 100644 index 0000000000..8e96f358b7 --- /dev/null +++ b/src/lib/controllib/controllib_test/test_params.yaml @@ -0,0 +1,64 @@ +module_name: controllib_test +parameters: +- group: Testing + definitions: + TEST_MIN: + description: + short: TEST_MIN + type: float + default: -1.0 + TEST_MAX: + description: + short: TEST_MAX + type: float + default: 1.0 + TEST_TRIM: + description: + short: TEST_TRIM + type: float + default: 0.5 + TEST_HP: + description: + short: TEST_HP + type: float + default: 10.0 + TEST_LP: + description: + short: TEST_LP + type: float + default: 10.0 + TEST_P: + description: + short: TEST_P + type: float + default: 0.2 + TEST_I: + description: + short: TEST_I + type: float + default: 0.1 + TEST_I_MAX: + description: + short: TEST_I_MAX + type: float + default: 1.0 + TEST_D: + description: + short: TEST_D + type: float + default: 0.01 + TEST_D_LP: + description: + short: TEST_D_LP + type: float + default: 10.0 + TEST_MEAN: + description: + short: TEST_MEAN + type: float + default: 1.0 + TEST_DEV: + description: + short: TEST_DEV + type: float + default: 2.0 diff --git a/src/lib/dataman_client/DatamanClient.cpp b/src/lib/dataman_client/DatamanClient.cpp index 0e10b22d11..442580693e 100644 --- a/src/lib/dataman_client/DatamanClient.cpp +++ b/src/lib/dataman_client/DatamanClient.cpp @@ -148,6 +148,10 @@ bool DatamanClient::syncHandler(const dataman_request_s &request, dataman_respon bool DatamanClient::readSync(dm_item_t item, uint32_t index, uint8_t *buffer, uint32_t length, hrt_abstime timeout) { + if (_client_id == CLIENT_ID_NOT_SET) { + return false; + } + if (length > g_per_item_size[item]) { PX4_ERR("Length %" PRIu32 " can't fit in data size for item %" PRIi8, length, static_cast(item)); return false; @@ -184,6 +188,10 @@ bool DatamanClient::readSync(dm_item_t item, uint32_t index, uint8_t *buffer, ui bool DatamanClient::writeSync(dm_item_t item, uint32_t index, uint8_t *buffer, uint32_t length, hrt_abstime timeout) { + if (_client_id == CLIENT_ID_NOT_SET) { + return false; + } + if (length > g_per_item_size[item]) { PX4_ERR("Length %" PRIu32 " can't fit in data size for item %" PRIi8, length, static_cast(item)); return false; @@ -219,6 +227,10 @@ bool DatamanClient::writeSync(dm_item_t item, uint32_t index, uint8_t *buffer, u bool DatamanClient::clearSync(dm_item_t item, hrt_abstime timeout) { + if (_client_id == CLIENT_ID_NOT_SET) { + return false; + } + hrt_abstime timestamp = hrt_absolute_time(); dataman_request_s request; @@ -245,6 +257,10 @@ bool DatamanClient::clearSync(dm_item_t item, hrt_abstime timeout) bool DatamanClient::readAsync(dm_item_t item, uint32_t index, uint8_t *buffer, uint32_t length) { + if (_client_id == CLIENT_ID_NOT_SET) { + return false; + } + if (length > g_per_item_size[item]) { PX4_ERR("Length %" PRIu32 " can't fit in data size for item %" PRIi8, length, static_cast(item)); return false; @@ -283,6 +299,10 @@ bool DatamanClient::readAsync(dm_item_t item, uint32_t index, uint8_t *buffer, u bool DatamanClient::writeAsync(dm_item_t item, uint32_t index, uint8_t *buffer, uint32_t length) { + if (_client_id == CLIENT_ID_NOT_SET) { + return false; + } + if (length > g_per_item_size[item]) { PX4_ERR("Length %" PRIu32 " can't fit in data size for item %" PRIi8, length, static_cast(item)); return false; @@ -323,6 +343,10 @@ bool DatamanClient::writeAsync(dm_item_t item, uint32_t index, uint8_t *buffer, bool DatamanClient::clearAsync(dm_item_t item) { + if (_client_id == CLIENT_ID_NOT_SET) { + return false; + } + bool success = false; if (_state == State::Idle) { diff --git a/src/lib/dataman_client/DatamanClient.hpp b/src/lib/dataman_client/DatamanClient.hpp index 9d1b71fd2c..36012245ec 100644 --- a/src/lib/dataman_client/DatamanClient.hpp +++ b/src/lib/dataman_client/DatamanClient.hpp @@ -183,11 +183,11 @@ private: px4_pollfd_struct_t _fds; - uint8_t _client_id{0}; + static constexpr uint8_t CLIENT_ID_NOT_SET{0}; + + uint8_t _client_id{CLIENT_ID_NOT_SET}; perf_counter_t _sync_perf{nullptr}; - - static constexpr uint8_t CLIENT_ID_NOT_SET{0}; }; diff --git a/src/lib/drivers/device/qurt/I2C.cpp b/src/lib/drivers/device/qurt/I2C.cpp index a459dbbe81..0d1eb0757e 100644 --- a/src/lib/drivers/device/qurt/I2C.cpp +++ b/src/lib/drivers/device/qurt/I2C.cpp @@ -48,6 +48,10 @@ #include #include +extern "C" { + __EXPORT void fc_uninitialize_i2c_bus(int fd); +} + namespace device { @@ -122,7 +126,7 @@ I2C::init() _i2c_fd = _config_i2c_bus(get_device_bus(), get_device_address(), _frequency); pthread_mutex_unlock(_mutex); - if (_i2c_fd == PX4_ERROR) { + if (_i2c_fd == -1) { PX4_ERR("i2c init failed"); goto out; } @@ -132,6 +136,8 @@ I2C::init() if (ret != OK) { PX4_ERR("i2c probe failed"); + fc_uninitialize_i2c_bus(_i2c_fd); + _i2c_fd = -1; goto out; } @@ -152,10 +158,12 @@ out: } void -I2C::set_device_address(int address) +I2C::set_device_address(int address, bool log) { if ((_i2c_fd != PX4_ERROR) && (_set_i2c_address != NULL)) { - PX4_INFO("Set i2c address 0x%x, fd %d", address, _i2c_fd); + if (log) { + PX4_INFO("Set i2c address 0x%x, fd %d", address, _i2c_fd); + } pthread_mutex_lock(_mutex); _set_i2c_address(_i2c_fd, address); diff --git a/src/lib/drivers/device/qurt/I2C.hpp b/src/lib/drivers/device/qurt/I2C.hpp index ccf5e1f5df..2e4e214bab 100644 --- a/src/lib/drivers/device/qurt/I2C.hpp +++ b/src/lib/drivers/device/qurt/I2C.hpp @@ -103,7 +103,7 @@ protected: */ virtual int probe() { return PX4_OK; } - virtual void set_device_address(int address); + virtual void set_device_address(int address, bool log = true); /** * Perform an I2C transaction to the device. diff --git a/src/lib/drivers/device/qurt/SPI.cpp b/src/lib/drivers/device/qurt/SPI.cpp index 66ebb26dd6..8e040ec227 100644 --- a/src/lib/drivers/device/qurt/SPI.cpp +++ b/src/lib/drivers/device/qurt/SPI.cpp @@ -157,7 +157,11 @@ SPI::transfer(uint8_t *send, uint8_t *recv, unsigned len) if (_spi_transfer != NULL) { pthread_mutex_lock(&_mutex); - ret = _spi_transfer(_fd, send, recv, len); + + if (recv) { ret = _spi_transfer(_fd, send, recv, len); } + + else { ret = _spi_transfer(_fd, send, send, len); } + pthread_mutex_unlock(&_mutex); } else { diff --git a/src/lib/events/enums.json b/src/lib/events/enums.json index 20b7d841e1..25af281509 100644 --- a/src/lib/events/enums.json +++ b/src/lib/events/enums.json @@ -721,6 +721,8 @@ "3": [67371008], "4": [50593792], "5": [84148224], + "6": [33751040], + "8": [720896], "10": [327680], "14": [393216], "15": [458752], diff --git a/src/lib/fw_performance_model/CMakeLists.txt b/src/lib/fw_performance_model/CMakeLists.txt index a09424fdee..c93557ded7 100644 --- a/src/lib/fw_performance_model/CMakeLists.txt +++ b/src/lib/fw_performance_model/CMakeLists.txt @@ -34,3 +34,4 @@ px4_add_library(performance_model PerformanceModel.cpp ) +set_property(GLOBAL APPEND PROPERTY PX4_MODULE_CONFIG_FILES ${CMAKE_CURRENT_SOURCE_DIR}/performance_model_params.yaml) diff --git a/src/lib/fw_performance_model/performance_model_params.c b/src/lib/fw_performance_model/performance_model_params.c deleted file mode 100644 index 810fddff62..0000000000 --- a/src/lib/fw_performance_model/performance_model_params.c +++ /dev/null @@ -1,225 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2023 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Trim throttle - * - * Required throttle (at sea level, standard atmosphere) for level flight at FW_AIRSPD_TRIM - * - * @unit norm - * @min 0.0 - * @max 1.0 - * @decimal 2 - * @increment 0.01 - * @group FW Performance - */ -PARAM_DEFINE_FLOAT(FW_THR_TRIM, 0.6f); - -/** - * Throttle at min airspeed - * - * Required throttle (at sea level, standard atmosphere) for level flight at minimum airspeed FW_AIRSPD_MIN - * - * Set to 0 to disable mapping of airspeed to trim throttle below FW_AIRSPD_TRIM. - * - * @min 0 - * @max 1 - * @decimal 2 - * @increment 0.01 - * @group FW Performance - */ -PARAM_DEFINE_FLOAT(FW_THR_ASPD_MIN, 0.f); - -/** - * Throttle at max airspeed - * - * Required throttle (at sea level, standard atmosphere) for level flight at maximum airspeed FW_AIRSPD_MAX - * - * Set to 0 to disable mapping of airspeed to trim throttle. - * - * @min 0 - * @max 1 - * @decimal 2 - * @increment 0.01 - * @group FW Performance - */ -PARAM_DEFINE_FLOAT(FW_THR_ASPD_MAX, 0.f); - - -/** - * Service ceiling - * - * Altitude in standard atmosphere at which the vehicle in normal configuration (WEIGHT_BASE) is still able to achieve a maximum climb rate of - * 0.5m/s at maximum throttle (FW_THR_MAX). Used to compensate for air density in FW_T_CLMB_MAX. - * Set negative to disable. - * - * @min -1.0 - * @unit m - * @decimal 0 - * @increment 1.0 - * @group FW Performance - */ -PARAM_DEFINE_FLOAT(FW_SERVICE_CEIL, -1.0f); - -/** - * Vehicle base weight. - * - * This is the weight of the vehicle at which it's performance limits were derived. A zero or negative value - * disables trim throttle and minimum airspeed compensation based on weight. - * - * @unit kg - * @decimal 1 - * @increment 0.5 - * @group FW Performance - */ -PARAM_DEFINE_FLOAT(WEIGHT_BASE, -1.0f); - -/** - * Vehicle gross weight. - * - * This is the actual weight of the vehicle at any time. This value will differ from WEIGHT_BASE in case weight was added - * or removed from the base weight. Examples are the addition of payloads or larger batteries. A zero or negative value - * disables trim throttle and minimum airspeed compensation based on weight. - * - * @unit kg - * @decimal 1 - * @increment 0.1 - * @group FW Performance - */ -PARAM_DEFINE_FLOAT(WEIGHT_GROSS, -1.0f); - -/** - * Maximum climb rate - * - * This is the maximum calibrated climb rate that the aircraft can achieve with - * the throttle set to FW_THR_MAX and the airspeed set to the - * trim value. For electric aircraft make sure this number can be - * achieved towards the end of flight when the battery voltage has reduced. - * - * @unit m/s - * @min 1.0 - * @decimal 1 - * @increment 0.5 - * @group FW Performance - */ -PARAM_DEFINE_FLOAT(FW_T_CLMB_MAX, 5.0f); - -/** - * Minimum descent rate - * - * This is the minimum calibrated sink rate of the aircraft with the throttle - * set to THR_MIN and flown at the same airspeed as used - * to measure FW_T_CLMB_MAX. - * - * @unit m/s - * @min 1.0 - * @decimal 1 - * @increment 0.5 - * @group FW Performance - */ -PARAM_DEFINE_FLOAT(FW_T_SINK_MIN, 2.0f); - -/** - * Trim (Cruise) Airspeed - * - * The trim CAS (calibrated airspeed) of the vehicle. If an airspeed controller is active, - * this is the default airspeed setpoint that the controller will try to achieve. - * This value corresponds to the trim airspeed with the default load factor (level flight, default weight). - * - * @unit m/s - * @min 0.5 - * @decimal 1 - * @increment 0.5 - * @group FW Performance - */ -PARAM_DEFINE_FLOAT(FW_AIRSPD_TRIM, 15.0f); - -/** - * Stall Airspeed (CAS) - * - * The stall airspeed (calibrated airspeed) of the vehicle. - * It is used for airspeed sensor failure detection and for the control - * surface scaling airspeed limits. - * - * @unit m/s - * @min 0.5 - * @decimal 1 - * @increment 0.5 - * @group FW Performance - */ -PARAM_DEFINE_FLOAT(FW_AIRSPD_STALL, 7.0f); - -/** - * Minimum Airspeed (CAS) - * - * The minimal airspeed (calibrated airspeed) the user is able to command. - * Further, if the airspeed falls below this value, the TECS controller will try to - * increase airspeed more aggressively. - * Has to be set according to the vehicle's stall speed (which should be set in FW_AIRSPD_STALL), - * with some margin between the stall speed and minimum airspeed. - * This value corresponds to the desired minimum speed with the default load factor (level flight, default weight), - * and is automatically adpated to the current load factor (calculated from roll setpoint and WEIGHT_GROSS/WEIGHT_BASE). - * - * @unit m/s - * @min 0.5 - * @decimal 1 - * @increment 0.5 - * @group FW Performance - */ -PARAM_DEFINE_FLOAT(FW_AIRSPD_MIN, 10.0f); - -/** - * Maximum Airspeed (CAS) - * - * The maximal airspeed (calibrated airspeed) the user is able to command. - * - * @unit m/s - * @min 0.5 - * @decimal 1 - * @increment 0.5 - * @group FW Performance - */ -PARAM_DEFINE_FLOAT(FW_AIRSPD_MAX, 20.0f); - -/** - * Airspeed scale with full flaps - * - * Factor applied to the minimum and stall airspeed when flaps are fully deployed. - * - * @min 0.5 - * @max 1 - * @decimal 2 - * @increment 0.01 - * @group FW Performance - */ -PARAM_DEFINE_FLOAT(FW_AIRSPD_FLP_SC, 1.f); diff --git a/src/lib/fw_performance_model/performance_model_params.yaml b/src/lib/fw_performance_model/performance_model_params.yaml new file mode 100644 index 0000000000..f218b597fa --- /dev/null +++ b/src/lib/fw_performance_model/performance_model_params.yaml @@ -0,0 +1,169 @@ +module_name: fw_performance_model +parameters: +- group: FW Performance + definitions: + FW_THR_TRIM: + description: + short: Trim throttle + long: Required throttle (at sea level, standard atmosphere) for level flight + at FW_AIRSPD_TRIM + type: float + default: 0.6 + unit: norm + min: 0.0 + max: 1.0 + decimal: 2 + increment: 0.01 + FW_THR_ASPD_MIN: + description: + short: Throttle at min airspeed + long: |- + Required throttle (at sea level, standard atmosphere) for level flight at minimum airspeed FW_AIRSPD_MIN + + Set to 0 to disable mapping of airspeed to trim throttle below FW_AIRSPD_TRIM. + type: float + default: 0.0 + min: 0 + max: 1 + decimal: 2 + increment: 0.01 + FW_THR_ASPD_MAX: + description: + short: Throttle at max airspeed + long: |- + Required throttle (at sea level, standard atmosphere) for level flight at maximum airspeed FW_AIRSPD_MAX + + Set to 0 to disable mapping of airspeed to trim throttle. + type: float + default: 0.0 + min: 0 + max: 1 + decimal: 2 + increment: 0.01 + FW_SERVICE_CEIL: + description: + short: Service ceiling + long: |- + Altitude in standard atmosphere at which the vehicle in normal configuration (WEIGHT_BASE) is still able to achieve a maximum climb rate of + 0.5m/s at maximum throttle (FW_THR_MAX). Used to compensate for air density in FW_T_CLMB_MAX. + Set negative to disable. + type: float + default: -1.0 + min: -1.0 + unit: m + decimal: 0 + increment: 1.0 + WEIGHT_BASE: + description: + short: Vehicle base weight + long: |- + This is the weight of the vehicle at which it's performance limits were derived. A zero or negative value + disables trim throttle and minimum airspeed compensation based on weight. + type: float + default: -1.0 + unit: kg + decimal: 1 + increment: 0.5 + WEIGHT_GROSS: + description: + short: Vehicle gross weight + long: |- + This is the actual weight of the vehicle at any time. This value will differ from WEIGHT_BASE in case weight was added + or removed from the base weight. Examples are the addition of payloads or larger batteries. A zero or negative value + disables trim throttle and minimum airspeed compensation based on weight. + type: float + default: -1.0 + unit: kg + decimal: 1 + increment: 0.1 + FW_T_CLMB_MAX: + description: + short: Maximum climb rate + long: |- + This is the maximum calibrated climb rate that the aircraft can achieve with + the throttle set to FW_THR_MAX and the airspeed set to the + trim value. For electric aircraft make sure this number can be + achieved towards the end of flight when the battery voltage has reduced. + type: float + default: 5.0 + unit: m/s + min: 1.0 + decimal: 1 + increment: 0.5 + FW_T_SINK_MIN: + description: + short: Minimum descent rate + long: |- + This is the minimum calibrated sink rate of the aircraft with the throttle + set to THR_MIN and flown at the same airspeed as used + to measure FW_T_CLMB_MAX. + type: float + default: 2.0 + unit: m/s + min: 1.0 + decimal: 1 + increment: 0.5 + FW_AIRSPD_TRIM: + description: + short: Trim (Cruise) Airspeed + long: |- + The trim CAS (calibrated airspeed) of the vehicle. If an airspeed controller is active, + this is the default airspeed setpoint that the controller will try to achieve. + This value corresponds to the trim airspeed with the default load factor (level flight, default weight). + type: float + default: 15.0 + unit: m/s + min: 0.5 + decimal: 1 + increment: 0.5 + FW_AIRSPD_STALL: + description: + short: Stall Airspeed (CAS) + long: |- + The stall airspeed (calibrated airspeed) of the vehicle. + It is used for airspeed sensor failure detection and for the control + surface scaling airspeed limits. + type: float + default: 7.0 + unit: m/s + min: 0.5 + decimal: 1 + increment: 0.5 + FW_AIRSPD_MIN: + description: + short: Minimum Airspeed (CAS) + long: |- + The minimal airspeed (calibrated airspeed) the user is able to command. + Further, if the airspeed falls below this value, the TECS controller will try to + increase airspeed more aggressively. + Has to be set according to the vehicle's stall speed (which should be set in FW_AIRSPD_STALL), + with some margin between the stall speed and minimum airspeed. + This value corresponds to the desired minimum speed with the default load factor (level flight, default weight), + and is automatically adpated to the current load factor (calculated from roll setpoint and WEIGHT_GROSS/WEIGHT_BASE). + type: float + default: 10.0 + unit: m/s + min: 0.5 + decimal: 1 + increment: 0.5 + FW_AIRSPD_MAX: + description: + short: Maximum Airspeed (CAS) + long: The maximal airspeed (calibrated airspeed) the user is able to command. + type: float + default: 20.0 + unit: m/s + min: 0.5 + decimal: 1 + increment: 0.5 + FW_AIRSPD_FLP_SC: + description: + short: Airspeed scale with full flaps + long: Factor applied to the minimum and stall airspeed when flaps are fully + deployed. + type: float + default: 1.0 + min: 0.5 + max: 1 + decimal: 2 + increment: 0.01 diff --git a/src/lib/gnss/test/RtcmTestCommon.hpp b/src/lib/gnss/test/RtcmTestCommon.hpp index f2012d353e..aea6275b56 100644 --- a/src/lib/gnss/test/RtcmTestCommon.hpp +++ b/src/lib/gnss/test/RtcmTestCommon.hpp @@ -69,7 +69,11 @@ protected: } // Helper to build a frame with raw payload bytes (no message type encoding) - std::vector buildRawFrame(const std::vector &payload) + // + // Keep this helper out-of-line to avoid a GCC false positive on the + // inlined std::vector::push_back. + // See https://github.com/PX4/PX4-Autopilot/issues/26875 for details. + __attribute__((noinline)) std::vector buildRawFrame(const std::vector &payload) { std::vector frame; size_t payload_len = payload.size(); diff --git a/src/lib/lat_lon_alt/lat_lon_alt.cpp b/src/lib/lat_lon_alt/lat_lon_alt.cpp index 40b86a635a..1732939fe4 100644 --- a/src/lib/lat_lon_alt/lat_lon_alt.cpp +++ b/src/lib/lat_lon_alt/lat_lon_alt.cpp @@ -111,6 +111,21 @@ void LatLonAlt::computeRadiiOfCurvature(const double latitude, double &meridian_ transverse_radius_of_curvature = Wgs84::equatorial_radius / sqrt_tmp; } +matrix::Dcmf LatLonAlt::computeRotEcefToNed() const +{ + const double cos_lat = cos(_latitude_rad); + const double sin_lat = sin(_latitude_rad); + const double cos_lon = cos(_longitude_rad); + const double sin_lon = sin(_longitude_rad); + + const float val[] = {(float)(-sin_lat * cos_lon), (float)(-sin_lat * sin_lon), (float)cos_lat, + (float) - sin_lon, (float)cos_lon, 0.f, + (float)(-cos_lat * cos_lon), (float)(-cos_lat * sin_lon), (float) - sin_lat + }; + + return matrix::Dcmf(val); +} + LatLonAlt LatLonAlt::operator+(const matrix::Vector3f &delta_pos) const { const matrix::Vector2d d_lat_lon_to_d_xy = deltaLatLonToDeltaXY(latitude_rad(), altitude()); diff --git a/src/lib/lat_lon_alt/lat_lon_alt.hpp b/src/lib/lat_lon_alt/lat_lon_alt.hpp index 02614c1862..448212eaa8 100644 --- a/src/lib/lat_lon_alt/lat_lon_alt.hpp +++ b/src/lib/lat_lon_alt/lat_lon_alt.hpp @@ -87,6 +87,11 @@ public: void operator=(const LatLonAlt &lla) { + // Protect against self-assignment + if (this == &lla) { + return; + } + _latitude_rad = lla.latitude_rad(); _longitude_rad = lla.longitude_rad(); _altitude = lla.altitude(); @@ -98,6 +103,9 @@ public: */ matrix::Vector3f computeAngularRateNavFrame(const matrix::Vector3f &v_ned) const; + // Compute the ECEF to NED coordinate transformation matrix at the current position + matrix::Dcmf computeRotEcefToNed() const; + struct Wgs84 { static constexpr double equatorial_radius = 6378137.0; static constexpr double eccentricity = 0.0818191908425; diff --git a/src/lib/led/CMakeLists.txt b/src/lib/led/CMakeLists.txt index 82e33bc292..4ec9d49a48 100644 --- a/src/lib/led/CMakeLists.txt +++ b/src/lib/led/CMakeLists.txt @@ -32,6 +32,7 @@ ############################################################################ px4_add_library(led led.cpp) +set_property(GLOBAL APPEND PROPERTY PX4_MODULE_CONFIG_FILES ${CMAKE_CURRENT_SOURCE_DIR}/led_params.yaml) target_compile_options(led PRIVATE -Wno-implicit-fallthrough # TODO: fix and remove ) diff --git a/src/lib/led/led.cpp b/src/lib/led/led.cpp index 6a96d49960..062c20cd5a 100644 --- a/src/lib/led/led.cpp +++ b/src/lib/led/led.cpp @@ -161,7 +161,9 @@ int LedController::update(LedControlData &control_data) if (current_blink_duration > 0) { ++num_blinking_leds; - if ((_states[i].current_blinking_time += blink_delta_t) > current_blink_duration) { + _states[i].current_blinking_time += blink_delta_t; + + if (_states[i].current_blinking_time > current_blink_duration) { _states[i].current_blinking_time -= current_blink_duration; if (cur_data.blink_times_left == 246) { diff --git a/src/lib/led/led_params.c b/src/lib/led/led_params.c deleted file mode 100644 index 1120fb9ca7..0000000000 --- a/src/lib/led/led_params.c +++ /dev/null @@ -1,42 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2015-2021 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * RGB Led brightness limit - * - * Set to 0 to disable, 1 for maximum brightness - * - * @unit % - * @group System - */ -PARAM_DEFINE_FLOAT(SYS_RGB_MAXBRT, 1.f); diff --git a/src/lib/led/led_params.yaml b/src/lib/led/led_params.yaml new file mode 100644 index 0000000000..4dc102bdb8 --- /dev/null +++ b/src/lib/led/led_params.yaml @@ -0,0 +1,11 @@ +module_name: led +parameters: +- group: System + definitions: + SYS_RGB_MAXBRT: + description: + short: RGB Led brightness limit + long: Set to 0 to disable, 1 for maximum brightness + type: float + default: 1.0 + unit: '%' diff --git a/src/lib/mathlib/math/filter/MedianFilter.hpp b/src/lib/mathlib/math/filter/MedianFilter.hpp index b483e59e7c..3fcdc800c3 100644 --- a/src/lib/mathlib/math/filter/MedianFilter.hpp +++ b/src/lib/mathlib/math/filter/MedianFilter.hpp @@ -48,6 +48,11 @@ namespace math { +template struct is_floating_point { static constexpr bool value = false; }; +template<> struct is_floating_point { static constexpr bool value = true; }; +template<> struct is_floating_point { static constexpr bool value = true; }; +template<> struct is_floating_point { static constexpr bool value = true; }; + template class MedianFilter { @@ -82,7 +87,30 @@ private: static int cmp(const void *a, const void *b) { - return (*(T *)a >= *(T *)b) ? 1 : -1; + const T va = *(const T *)a; + const T vb = *(const T *)b; + + if constexpr(is_floating_point::value) { + if (!__builtin_isfinite(va) && !__builtin_isfinite(vb)) { + return 0; + + } else if (!__builtin_isfinite(va)) { + return 1; + + } else if (!__builtin_isfinite(vb)) { + return -1; + } + } + + if (va < vb) { + return -1; + } + + if (va > vb) { + return 1; + } + + return 0; } T _buffer[WINDOW] {}; diff --git a/src/lib/mathlib/math/test/MedianFilterTest.cpp b/src/lib/mathlib/math/test/MedianFilterTest.cpp index f74cc7ef76..2cbafc26b8 100644 --- a/src/lib/mathlib/math/test/MedianFilterTest.cpp +++ b/src/lib/mathlib/math/test/MedianFilterTest.cpp @@ -91,3 +91,54 @@ TEST_F(MedianFilterTest, test5i_100) EXPECT_EQ(median_filter5.apply(i), max(0, i - 2)); } } + +TEST_F(MedianFilterTest, test5f_nan_majority_finite) +{ + MedianFilter median_filter5; + median_filter5.insert(1.0f); + median_filter5.insert(2.0f); + median_filter5.insert(NAN); + median_filter5.insert(3.0f); + median_filter5.insert(NAN); + EXPECT_TRUE(PX4_ISFINITE(median_filter5.median())); + EXPECT_EQ(median_filter5.median(), 3.0f); +} + +TEST_F(MedianFilterTest, test5f_nan_majority_nan) +{ + MedianFilter median_filter5; + median_filter5.insert(NAN); + median_filter5.insert(NAN); + median_filter5.insert(1.0f); + median_filter5.insert(NAN); + median_filter5.insert(2.0f); + EXPECT_FALSE(PX4_ISFINITE(median_filter5.median())); +} + +TEST_F(MedianFilterTest, test3f_equal_values) +{ + MedianFilter median_filter3; + median_filter3.insert(5.0f); + median_filter3.insert(5.0f); + median_filter3.insert(5.0f); + EXPECT_EQ(median_filter3.median(), 5.0f); +} + +TEST_F(MedianFilterTest, test3f_nan_spike_recovery) +{ + MedianFilter median_filter3; + + // Fill with finite values + median_filter3.apply(1.0f); + median_filter3.apply(2.0f); + EXPECT_EQ(median_filter3.apply(3.0f), 2.0f); // window: [1, 2, 3] + + // NaN spike enters — majority still finite + EXPECT_TRUE(PX4_ISFINITE(median_filter3.apply(NAN))); // window: [2, 3, NaN] + EXPECT_EQ(median_filter3.median(), 3.0f); + + // Recovery — NaN leaves the window + EXPECT_EQ(median_filter3.apply(4.0f), 4.0f); // window: [3, NaN, 4] → sorted [3, 4, NaN] → median 4 + EXPECT_EQ(median_filter3.apply(5.0f), 5.0f); // window: [NaN, 4, 5] → sorted [4, 5, NaN] → median 5 + EXPECT_EQ(median_filter3.apply(6.0f), 5.0f); // window: [4, 5, 6] → all finite again +} diff --git a/src/lib/mathlib/math/test/UtilitiesTest.cpp b/src/lib/mathlib/math/test/UtilitiesTest.cpp index 017a38d49e..e46eb1a645 100644 --- a/src/lib/mathlib/math/test/UtilitiesTest.cpp +++ b/src/lib/mathlib/math/test/UtilitiesTest.cpp @@ -44,7 +44,7 @@ using namespace math::Utilities; -TEST(euler312YawTest, fromQuaternion) +TEST(euler321YawTest, fromQuaternion) { matrix::Quatf q1(3.5f, 2.4f, -0.5f, -3.f); q1.normalize(); @@ -57,6 +57,26 @@ TEST(euler312YawTest, fromQuaternion) EXPECT_FLOAT_EQ(euler2(2), getEuler321Yaw(q2)); } +TEST(euler312YawTest, fromQuaternion) +{ + // Use orientations with more pitch than roll so 312 sequence is appropriate + matrix::Quatf q1(3.5f, 2.4f, -0.5f, -3.f); + q1.normalize(); + const matrix::Dcmf R1(q1); + EXPECT_FLOAT_EQ(getEuler312Yaw(R1), getEuler312Yaw(q1)); + + matrix::Quatf q2(0.f, 0, -1.f, 0.f); + q2.normalize(); + const matrix::Dcmf R2(q2); + EXPECT_FLOAT_EQ(getEuler312Yaw(R2), getEuler312Yaw(q2)); + + // Pure yaw rotation — 312 and 321 yaw should agree + matrix::Quatf q3(matrix::Eulerf(0.f, 0.f, 1.2f)); + const matrix::Dcmf R3(q3); + EXPECT_FLOAT_EQ(getEuler312Yaw(R3), getEuler312Yaw(q3)); + EXPECT_NEAR(getEuler312Yaw(q3), getEuler321Yaw(q3), 1e-5f); +} + TEST(shouldUse321RotationSequenceTest, pitch90) { matrix::Eulerf euler(0.f, math::radians(90), 0.f); diff --git a/src/lib/matrix/matrix/Slice.hpp b/src/lib/matrix/matrix/Slice.hpp index 53d24769e9..e4c14da4f0 100644 --- a/src/lib/matrix/matrix/Slice.hpp +++ b/src/lib/matrix/matrix/Slice.hpp @@ -59,6 +59,11 @@ public: // Separate function needed otherwise the default copy constructor matches before the deep copy implementation Self &operator=(const Self &other) { + // Protect against self-assignment + if (this == &other) { + return *this; + } + return this->operator=(other); } diff --git a/src/lib/mixer_module/CMakeLists.txt b/src/lib/mixer_module/CMakeLists.txt index 3a1581118b..5d9ebbe603 100644 --- a/src/lib/mixer_module/CMakeLists.txt +++ b/src/lib/mixer_module/CMakeLists.txt @@ -60,6 +60,8 @@ px4_add_library(mixer_module mixer_module.cpp mixer_module.hpp ) +set_property(GLOBAL APPEND PROPERTY PX4_MODULE_CONFIG_FILES ${CMAKE_CURRENT_SOURCE_DIR}/motor_params.yaml) +set_property(GLOBAL APPEND PROPERTY PX4_MODULE_CONFIG_FILES ${CMAKE_CURRENT_SOURCE_DIR}/params.yaml) add_dependencies(mixer_module output_functions_header) target_compile_options(mixer_module PRIVATE ${MAX_CUSTOM_OPT_LEVEL}) diff --git a/src/lib/mixer_module/functions/FunctionActuatorSet.hpp b/src/lib/mixer_module/functions/FunctionActuatorSet.hpp index 8c34767eb5..be9762fa01 100644 --- a/src/lib/mixer_module/functions/FunctionActuatorSet.hpp +++ b/src/lib/mixer_module/functions/FunctionActuatorSet.hpp @@ -35,6 +35,7 @@ #include "FunctionProviderBase.hpp" +#include #include /** @@ -58,7 +59,7 @@ public: while (_topic.update(&vehicle_command)) { if (vehicle_command.command == vehicle_command_s::VEHICLE_CMD_DO_SET_ACTUATOR) { - int index = (int)(vehicle_command.param7 + 0.5f); + int index = static_cast(lroundf(vehicle_command.param7)); if (index == 0) { if (PX4_ISFINITE(vehicle_command.param1)) { _data[0] = vehicle_command.param1; } diff --git a/src/lib/mixer_module/mixer_module.cpp b/src/lib/mixer_module/mixer_module.cpp index eb67188018..e47fed82a7 100644 --- a/src/lib/mixer_module/mixer_module.cpp +++ b/src/lib/mixer_module/mixer_module.cpp @@ -144,9 +144,9 @@ void MixingOutput::printStatus() const PX4_INFO_RAW("Channel Configuration:\n"); for (unsigned i = 0; i < _max_num_outputs; i++) { - PX4_INFO_RAW("Channel %i: func: %3i, value: %i, failsafe: %d, disarmed: %d, min: %d, max: %d, center: %d\n", i, - (int)_function_assignment[i], _current_output_value[i], - actualFailsafeValue(i), _disarmed_value[i], _min_value[i], _max_value[i], _center_value[i]); + PX4_INFO_RAW("Channel %2d: func: %3d, value: %.2f, failsafe: %.2f, disarmed: %d, min: %d, max: %d, center: %d\n", + i, (int)_function_assignment[i], (double)_current_output_value[i], (double)actualFailsafeValue(i), + _disarmed_value[i], _min_value[i], _max_value[i], _center_value[i]); } } @@ -509,15 +509,15 @@ MixingOutput::limitAndUpdateOutputs(float outputs[MAX_ACTUATORS], bool has_updat // Doing so makes calibrations consistent among different configurations and hence PWM minimum and maximum have a consistent effect // hence the defaults for these parameters also make most setups work out of the box if (_armed.in_esc_calibration_mode) { - static constexpr uint16_t PWM_CALIBRATION_LOW = 1000; - static constexpr uint16_t PWM_CALIBRATION_HIGH = 2000; + static constexpr float PWM_CALIBRATION_LOW = 1000.f; + static constexpr float PWM_CALIBRATION_HIGH = 2000.f; for (int i = 0; i < _max_num_outputs; i++) { - if (_current_output_value[i] == _min_value[i]) { + if (fabsf(_current_output_value[i] - (float)_min_value[i]) < 0.5f) { _current_output_value[i] = PWM_CALIBRATION_LOW; } - if (_current_output_value[i] == _max_value[i]) { + if (fabsf(_current_output_value[i] - (float)_max_value[i]) < 0.5f) { _current_output_value[i] = PWM_CALIBRATION_HIGH; } } @@ -532,7 +532,7 @@ MixingOutput::limitAndUpdateOutputs(float outputs[MAX_ACTUATORS], bool has_updat } } -uint16_t MixingOutput::output_limit_calc_single(int i, float value) const +float MixingOutput::output_limit_calc_single(int i, float value) const { // check for invalid / disabled channels if (!PX4_ISFINITE(value)) { @@ -552,27 +552,15 @@ uint16_t MixingOutput::output_limit_calc_single(int i, float value) const && _param_handles[i].center != PARAM_INVALID && _center_value[i] >= 800 && _center_value[i] <= 2200) { - - /* bi-linear interpolation */ - if (value < 0.0f) { - output = math::interpolate(value, -1.f, 0.0f, - static_cast(_min_value[i]), static_cast(_center_value[i])); - - } else { - output = math::interpolate(value, 0.0f, 1.0f, - static_cast(_center_value[i]), static_cast(_max_value[i])); - } - + output = math::interpolateNXY(value, {-1.f, 0.f, 1.f}, {(float)_min_value[i], (float)_center_value[i], (float)_max_value[i]}); } // Everything except servos, or if center is not set else { - output = math::interpolate(value, -1.f, 1.f, - static_cast(_min_value[i]), static_cast(_max_value[i])); + output = math::interpolate(value, -1.f, 1.f, static_cast(_min_value[i]), static_cast(_max_value[i])); } - return math::constrain(lroundf(output), 0L, static_cast(UINT16_MAX)); - + return output; } void @@ -647,7 +635,7 @@ MixingOutput::output_limit_calc(const bool armed, const int num_channels, const for (int i = 0; i < num_channels; i++) { // Ramp from disarmed value to currently desired output that would apply without ramp - uint16_t desired_output = output_limit_calc_single(i, output[i]); + float desired_output = output_limit_calc_single(i, output[i]); _current_output_value[i] = _disarmed_value[i] + progress * (desired_output - _disarmed_value[i]); } } @@ -688,10 +676,9 @@ MixingOutput::updateLatencyPerfCounter(const actuator_outputs_s &actuator_output } } -uint16_t -MixingOutput::actualFailsafeValue(int index) const +float MixingOutput::actualFailsafeValue(int index) const { - uint16_t value = 0; + float value = 0; if (_failsafe_value[index] == UINT16_MAX) { // if set to default, use the one provided by the function float default_failsafe = NAN; @@ -703,7 +690,7 @@ MixingOutput::actualFailsafeValue(int index) const value = output_limit_calc_single(index, default_failsafe); } else { - value = _failsafe_value[index]; + value = static_cast(_failsafe_value[index]); } return value; diff --git a/src/lib/mixer_module/mixer_module.hpp b/src/lib/mixer_module/mixer_module.hpp index 3e4cec0d51..8f98df5e65 100644 --- a/src/lib/mixer_module/mixer_module.hpp +++ b/src/lib/mixer_module/mixer_module.hpp @@ -84,8 +84,7 @@ public: * @param num_control_groups_updated number of actuator_control groups updated * @return if true, the update got handled, and actuator_outputs can be published */ - virtual bool updateOutputs(uint16_t outputs[MAX_ACTUATORS], - unsigned num_outputs, unsigned num_control_groups_updated) = 0; + virtual bool updateOutputs(float outputs[MAX_ACTUATORS], unsigned num_outputs, unsigned num_control_groups_updated) = 0; /** called whenever the mixer gets updated/reset */ virtual void mixerChanged() {} @@ -141,6 +140,8 @@ public: OutputFunction outputFunction(int index) const { return _function_assignment[index]; } + bool isMotor(int index) const { return isFunctionSet(index) && (_function_assignment[index] >= OutputFunction::Motor1) && (_function_assignment[index] <= OutputFunction::Motor12); } + /** * Call this regularly from Run(). It will call interface.updateOutputs(). * @return true if outputs were updated @@ -186,7 +187,7 @@ public: /** * Returns the actual failsafe value taking into account the assigned function */ - uint16_t actualFailsafeValue(int index) const; + float actualFailsafeValue(int index) const; void setIgnoreLockdown(bool ignore_lockdown) { _ignore_lockdown = ignore_lockdown; } @@ -207,7 +208,7 @@ public: protected: void updateParams() override; - uint16_t output_limit_calc_single(int i, float value) const; + float output_limit_calc_single(int i, float value) const; private: @@ -247,7 +248,7 @@ private: uint16_t _min_value[MAX_ACTUATORS] {}; uint16_t _center_value[MAX_ACTUATORS] {}; uint16_t _max_value[MAX_ACTUATORS] {}; - uint16_t _current_output_value[MAX_ACTUATORS] {}; ///< current output values (reordered) + float _current_output_value[MAX_ACTUATORS] {}; ///< current output values (reordered) uint16_t _reverse_output_mask{0}; ///< reverses the interval [min, max] -> [max, min], NOT motor direction enum class OutputLimitState { diff --git a/src/lib/mixer_module/mixer_module_tests.cpp b/src/lib/mixer_module/mixer_module_tests.cpp index 7f3a6feede..5a6f08ed86 100644 --- a/src/lib/mixer_module/mixer_module_tests.cpp +++ b/src/lib/mixer_module/mixer_module_tests.cpp @@ -87,8 +87,7 @@ public: was_scheduled = true; } - bool updateOutputs(uint16_t outputs_[MAX_ACTUATORS], - unsigned num_outputs_, unsigned num_control_groups_updated) override + bool updateOutputs(float outputs_[MAX_ACTUATORS], unsigned num_outputs_, unsigned num_control_groups_updated) override { memcpy(outputs, outputs_, sizeof(outputs)); num_outputs = num_outputs_; @@ -168,7 +167,7 @@ public: mixer_changed = false; } - uint16_t outputs[MAX_ACTUATORS] {}; + float outputs[MAX_ACTUATORS] {}; int num_outputs{0}; int num_updates{0}; bool was_scheduled{false}; @@ -480,7 +479,7 @@ public: bool support_esc_calibration, bool ramp_up = true) : MixingOutput(param_prefix, max_num_outputs, interface, scheduling_policy, support_esc_calibration, ramp_up) {}; - uint16_t output_limit_calc_single(int i, float value) const { return MixingOutput::output_limit_calc_single(i, value); } + float output_limit_calc_single(int i, float value) const { return MixingOutput::output_limit_calc_single(i, value); } }; TEST_F(MixerModuleTest, OutputLimitCalcSingle) @@ -501,8 +500,10 @@ TEST_F(MixerModuleTest, OutputLimitCalcSingle) EXPECT_EQ(mixing_output.output_limit_calc_single(0, 1.1f), 2000); EXPECT_EQ(mixing_output.output_limit_calc_single(0, -1000.f), 1000); // Way ouf of range EXPECT_EQ(mixing_output.output_limit_calc_single(0, 1000.f), 2000); - EXPECT_EQ(mixing_output.output_limit_calc_single(0, 0.0005), 1500); // Rounding down - EXPECT_EQ(mixing_output.output_limit_calc_single(0, 0.0015), 1501); // Rounding up + EXPECT_EQ(mixing_output.output_limit_calc_single(0, 0.0005), 1500.25f); + EXPECT_EQ(static_cast(lroundf(mixing_output.output_limit_calc_single(0, 0.0005))), 1500); // Rounding down + EXPECT_EQ(mixing_output.output_limit_calc_single(0, 0.0015), 1500.75f); + EXPECT_EQ(static_cast(lroundf(mixing_output.output_limit_calc_single(0, 0.0015))), 1501); // Rounding up EXPECT_EQ(mixing_output.output_limit_calc_single(0, 0.002), 1501); // Exact value mixing_output.setAllMinValues(0); // lower range [0,20] @@ -517,8 +518,10 @@ TEST_F(MixerModuleTest, OutputLimitCalcSingle) EXPECT_EQ(mixing_output.output_limit_calc_single(0, 1.1f), 20); EXPECT_EQ(mixing_output.output_limit_calc_single(0, -1000.f), 0); // Way ouf of range EXPECT_EQ(mixing_output.output_limit_calc_single(0, 1000.f), 20); - EXPECT_EQ(mixing_output.output_limit_calc_single(0, 0.025), 10); // Rounding down - EXPECT_EQ(mixing_output.output_limit_calc_single(0, 0.075), 11); // Rounding up + EXPECT_EQ(mixing_output.output_limit_calc_single(0, 0.025), 10.25f); + EXPECT_EQ(static_cast(lroundf(mixing_output.output_limit_calc_single(0, 0.025))), 10); // Rounding down + EXPECT_EQ(mixing_output.output_limit_calc_single(0, 0.075), 10.75f); + EXPECT_EQ(static_cast(lroundf(mixing_output.output_limit_calc_single(0, 0.075))), 11); // Rounding up EXPECT_EQ(mixing_output.output_limit_calc_single(0, 0.1), 11); // Exact value mixing_output.setAllMinValues(20); // inverted range [20,0] @@ -533,7 +536,9 @@ TEST_F(MixerModuleTest, OutputLimitCalcSingle) EXPECT_EQ(mixing_output.output_limit_calc_single(0, 1.1f), 0); EXPECT_EQ(mixing_output.output_limit_calc_single(0, -1000.f), 20); // Way ouf of range EXPECT_EQ(mixing_output.output_limit_calc_single(0, 1000.f), 0); - EXPECT_EQ(mixing_output.output_limit_calc_single(0, 0.025), 10); // Rounding down - EXPECT_EQ(mixing_output.output_limit_calc_single(0, 0.075), 9); // Rounding up + EXPECT_EQ(mixing_output.output_limit_calc_single(0, 0.025), 9.75f); + EXPECT_EQ(static_cast(lroundf(mixing_output.output_limit_calc_single(0, 0.025))), 10); // Rounding down + EXPECT_EQ(mixing_output.output_limit_calc_single(0, 0.075), 9.25f); + EXPECT_EQ(static_cast(lroundf(mixing_output.output_limit_calc_single(0, 0.075))), 9); // Rounding up EXPECT_EQ(mixing_output.output_limit_calc_single(0, 0.1), 9); // Exact value } diff --git a/src/lib/mixer_module/motor_params.c b/src/lib/mixer_module/motor_params.c deleted file mode 100644 index 51cb34f3ec..0000000000 --- a/src/lib/mixer_module/motor_params.c +++ /dev/null @@ -1,57 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2018 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file motor_params.c - * - * Parameters for motors. - * - */ - -/** - * Thrust to motor control signal model parameter - * - * Parameter used to model the nonlinear relationship between - * motor control signal (e.g. PWM) and static thrust. - * - * The model is: rel_thrust = factor * rel_signal^2 + (1-factor) * rel_signal, - * where rel_thrust is the normalized thrust between 0 and 1, and - * rel_signal is the relative motor control signal between 0 and 1. - * - * @min 0.0 - * @max 1.0 - * @decimal 1 - * @increment 0.1 - * @group PWM Outputs - */ -PARAM_DEFINE_FLOAT(THR_MDL_FAC, 0.0f); diff --git a/src/lib/mixer_module/motor_params.yaml b/src/lib/mixer_module/motor_params.yaml new file mode 100644 index 0000000000..aabf8e6cb0 --- /dev/null +++ b/src/lib/mixer_module/motor_params.yaml @@ -0,0 +1,24 @@ +module_name: mixer_module +parameters: +- group: PWM Outputs + definitions: + THR_MDL_FAC: + description: + short: Thrust to motor control signal model parameter + long: |- + Parameter used to model the nonlinear relationship between + motor control signal (e.g. PWM) and static thrust. + + The model is: + + ``` + rel_thrust = factor * rel_signal^2 + (1-factor) * rel_signal + ``` + , where rel_thrust is the normalized thrust between 0 and 1, and + rel_signal is the relative motor control signal between 0 and 1. + type: float + default: 0.0 + min: 0.0 + max: 1.0 + decimal: 1 + increment: 0.1 diff --git a/src/lib/mixer_module/params.c b/src/lib/mixer_module/params.c deleted file mode 100644 index e54a25eca0..0000000000 --- a/src/lib/mixer_module/params.c +++ /dev/null @@ -1,18 +0,0 @@ - -/** - * Multicopter air-mode - * - * The air-mode enables the mixer to increase the total thrust of the multirotor - * in order to keep attitude and rate control even at low and high throttle. - * - * This function should be disabled during tuning as it will help the controller - * to diverge if the closed-loop is unstable (i.e. the vehicle is not tuned yet). - * - * Enabling air-mode for yaw requires the use of an arming switch. - * - * @value 0 Disabled - * @value 1 Roll/Pitch - * @value 2 Roll/Pitch/Yaw - * @group Mixer Output - */ -PARAM_DEFINE_INT32(MC_AIRMODE, 0); diff --git a/src/lib/mixer_module/params.yaml b/src/lib/mixer_module/params.yaml new file mode 100644 index 0000000000..29efcbbeec --- /dev/null +++ b/src/lib/mixer_module/params.yaml @@ -0,0 +1,21 @@ +module_name: mixer_module +parameters: +- group: Mixer Output + definitions: + MC_AIRMODE: + description: + short: Multicopter air-mode + long: |- + The air-mode enables the mixer to increase the total thrust of the multirotor + in order to keep attitude and rate control even at low and high throttle. + + This function should be disabled during tuning as it will help the controller + to diverge if the closed-loop is unstable (i.e. the vehicle is not tuned yet). + + Enabling air-mode for yaw requires the use of an arming switch. + type: enum + values: + 0: Disabled + 1: Roll/Pitch + 2: Roll/Pitch/Yaw + default: 0 diff --git a/src/lib/npfg/AirspeedDirectionController.hpp b/src/lib/npfg/AirspeedDirectionController.hpp index d0111729ca..c6295792db 100644 --- a/src/lib/npfg/AirspeedDirectionController.hpp +++ b/src/lib/npfg/AirspeedDirectionController.hpp @@ -59,13 +59,15 @@ #ifndef PX4_AIRSPEEDDIRECTIONONTROLLER_HPP #define PX4_AIRSPEEDDIRECTIONONTROLLER_HPP +#include +#include + class AirspeedDirectionController { public: - AirspeedDirectionController(); - + void setPGainFromPeriodAndDamping(float damping, float period) {p_gain_ = 4.f * M_PI_F * damping / math::max(period, FLT_EPSILON);} float controlHeading(const float heading_sp, const float heading, const float airspeed) const; private: diff --git a/src/lib/parameters/CMakeLists.txt b/src/lib/parameters/CMakeLists.txt index cfa118b2dd..9cb776e0df 100644 --- a/src/lib/parameters/CMakeLists.txt +++ b/src/lib/parameters/CMakeLists.txt @@ -37,21 +37,9 @@ if (NOT PARAM_DEFAULT_OVERRIDES) set(PARAM_DEFAULT_OVERRIDES "{}") endif() -# get full path for each module -get_property(module_list GLOBAL PROPERTY PX4_MODULE_PATHS) get_property(module_config_files GLOBAL PROPERTY PX4_MODULE_CONFIG_FILES) if(DISABLE_PARAMS_MODULE_SCOPING) - # search all directories with .c files (potentially containing parameters) - file(GLOB_RECURSE c_files - ${PX4_SOURCE_DIR}/src/*.c - ${external_module_paths} - ) - foreach(file_path ${c_files}) - get_filename_component(dir_path ${file_path} PATH) - list(APPEND module_list "${dir_path}") - endforeach() - # search for all module configs as well file(GLOB_RECURSE yaml_files ${PX4_SOURCE_DIR}/src/*.yaml @@ -72,12 +60,8 @@ if(DISABLE_PARAMS_MODULE_SCOPING) endforeach() list(REMOVE_DUPLICATES module_config_files) -else() - list(APPEND module_list ${external_module_paths}) endif() -list(REMOVE_DUPLICATES module_list) - set(generated_params_dir ${PX4_BINARY_DIR}/generated_params) set(generated_serial_params_file ${generated_params_dir}/serial_params.c) set(generated_module_params_file ${generated_params_dir}/module_params.c) @@ -114,17 +98,27 @@ add_custom_command(OUTPUT ${generated_serial_params_file} ${generated_module_par COMMENT "Generating serial_params.c" ) +# readonly params config (used by both px_process_params.py and px_generate_params.py) +set(READONLY_PARAMS_CONFIG "${PX4_BOARD_DIR}/readonly_params.yaml") +if(EXISTS ${READONLY_PARAMS_CONFIG}) + set(READONLY_PARAMS_ARG "--readonly-config" "${READONLY_PARAMS_CONFIG}") + set(READONLY_PARAMS_DEPEND "${READONLY_PARAMS_CONFIG}") +else() + set(READONLY_PARAMS_ARG "") + set(READONLY_PARAMS_DEPEND "") +endif() + set(parameters_xml ${PX4_BINARY_DIR}/parameters.xml) set(parameters_json ${PX4_BINARY_DIR}/parameters.json) -file(GLOB_RECURSE param_src_files ${PX4_SOURCE_DIR}/src/*params.c ${PX4_SOURCE_DIR}/src/*parameters.c) add_custom_command(OUTPUT ${parameters_xml} ${parameters_json} ${parameters_json}.xz COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/px_process_params.py - --src-path ${module_list} ${generated_params_dir} + --src-path ${generated_params_dir} --xml ${parameters_xml} --json ${parameters_json} --compress --overrides ${PARAM_DEFAULT_OVERRIDES} --board ${PX4_BOARD} + ${READONLY_PARAMS_ARG} #--verbose COMMAND ${PYTHON_EXECUTABLE} ${PX4_SOURCE_DIR}/Tools/validate_json.py --schema-file ${PX4_SOURCE_DIR}/src/modules/mavlink/mavlink/component_information/parameter.schema.json @@ -132,24 +126,28 @@ add_custom_command(OUTPUT ${parameters_xml} ${parameters_json} ${parameters_json --skip-if-no-schema # mavlink submodule might not exist for current target if built in CI #--verbose DEPENDS - ${param_src_files} ${generated_serial_params_file} ${generated_module_params_file} + ${READONLY_PARAMS_DEPEND} px4params/srcparser.py px4params/srcscanner.py px4params/jsonout.py px4params/xmlout.py + px4params/readonly_config.py px_process_params.py COMMENT "Generating parameters.xml" ) add_custom_target(parameters_xml DEPENDS ${parameters_xml}) # generate px4_parameters.hpp + add_custom_command(OUTPUT px4_parameters.hpp COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/px_generate_params.py --xml ${parameters_xml} --dest ${CMAKE_CURRENT_BINARY_DIR} + ${READONLY_PARAMS_ARG} DEPENDS ${PX4_BINARY_DIR}/parameters.xml + ${READONLY_PARAMS_DEPEND} px_generate_params.py templates/px4_parameters.hpp.jinja ) diff --git a/src/lib/parameters/param.h b/src/lib/parameters/param.h index c8b8dbd79d..16a3ec34b2 100644 --- a/src/lib/parameters/param.h +++ b/src/lib/parameters/param.h @@ -175,6 +175,23 @@ __EXPORT const char *param_name(param_t param); */ __EXPORT bool param_is_volatile(param_t param); +/** + * Obtain the read-only state of a parameter. + * + * @param param A handle returned by param_find or passed by param_foreach. + * @return true if the parameter is read-only + */ +__EXPORT bool param_is_readonly(param_t param); + +/** + * Lock all read-only parameters. + * + * Before this call, read-only parameters can be freely modified (e.g. by + * startup scripts). After this call, any attempt to set, set-default, or + * reset a read-only parameter will be rejected. + */ +__EXPORT void param_lock_readonly(void); + /** * Test whether a parameter's value has changed from the default. * diff --git a/src/lib/parameters/param_translation.cpp b/src/lib/parameters/param_translation.cpp index 837a2d68ba..e88faf8579 100644 --- a/src/lib/parameters/param_translation.cpp +++ b/src/lib/parameters/param_translation.cpp @@ -34,6 +34,7 @@ #include "param_translation.h" +#include #include #include #include @@ -177,5 +178,71 @@ param_modify_on_import_ret param_modify_on_import(bson_node_t node) } } + // 2026-03-11: translate EKF2_GPS_POS_X/Y/Z -> SENS_GPS0_OFFX/OFFY/OFFZ + { + if (strcmp("EKF2_GPS_POS_X", node->name) == 0) { + strcpy(node->name, "SENS_GPS0_OFFX"); + PX4_INFO("migrating %s -> %s", "EKF2_GPS_POS_X", "SENS_GPS0_OFFX"); + return param_modify_on_import_ret::PARAM_MODIFIED; + } + + if (strcmp("EKF2_GPS_POS_Y", node->name) == 0) { + strcpy(node->name, "SENS_GPS0_OFFY"); + PX4_INFO("migrating %s -> %s", "EKF2_GPS_POS_Y", "SENS_GPS0_OFFY"); + return param_modify_on_import_ret::PARAM_MODIFIED; + } + + if (strcmp("EKF2_GPS_POS_Z", node->name) == 0) { + strcpy(node->name, "SENS_GPS0_OFFZ"); + PX4_INFO("migrating %s -> %s", "EKF2_GPS_POS_Z", "SENS_GPS0_OFFZ"); + return param_modify_on_import_ret::PARAM_MODIFIED; + } + } + + // 2026-03-11: translate EKF2_GPS_DELAY to SENS_GPS0_DELAY and SENS_GPS1_DELAY + { + if (strcmp("EKF2_GPS_DELAY", node->name) == 0) { + int32_t delay_ms = static_cast(node->d); + param_set(param_find("SENS_GPS0_DELAY"), &delay_ms); + param_set(param_find("SENS_GPS1_DELAY"), &delay_ms); + PX4_INFO("migrating %s -> %s, %s", "EKF2_GPS_DELAY", "SENS_GPS0_DELAY", "SENS_GPS1_DELAY"); + } + } + + // 2026-03-11: translate MOT_POLE_COUNT to per-motor DSHOT_MOT_POL1-12 + { + if ((node->type == bson_type_t::BSON_INT32) && (strcmp("MOT_POLE_COUNT", node->name) == 0)) { + for (int i = 1; i <= 12; i++) { + char name[20]; + snprintf(name, sizeof(name), "DSHOT_MOT_POL%d", i); + param_set(param_find(name), &node->i32); + } + + PX4_INFO("migrating %s -> DSHOT_MOT_POL1-12 (value=%" PRId32 ")", "MOT_POLE_COUNT", node->i32); + return param_modify_on_import_ret::PARAM_SKIP_IMPORT; + } + } + + // 2026-03-19: translate EKF2_ENGINE_WRM to EKF2_POS_LOCK + { + if (strcmp("EKF2_ENGINE_WRM", node->name) == 0) { + int32_t delay_ms = static_cast(node->d); + param_set(param_find("EKF2_POS_LOCK"), &delay_ms); + PX4_INFO("migrating %s -> %s", "EKF2_ENGINE_WRM", "EKF2_POS_LOCK"); + return param_modify_on_import_ret::PARAM_SKIP_IMPORT; + } + } + + // 2026-03-19: translate RC*_REV from float to int32 + { + if ((node->type == bson_type_t::BSON_DOUBLE) && (strncmp("RC", node->name, 2) == 0) + && strstr(node->name, "_REV") != nullptr) { + node->i32 = (node->d < 0.0) ? -1 : 1; + node->type = bson_type_t::BSON_INT32; + PX4_INFO("migrating %s from float to int32", node->name); + return param_modify_on_import_ret::PARAM_MODIFIED; + } + } + return param_modify_on_import_ret::PARAM_NOT_MODIFIED; } diff --git a/src/lib/parameters/parameters.cpp b/src/lib/parameters/parameters.cpp index 772a5c2a9e..1508fcb4a5 100644 --- a/src/lib/parameters/parameters.cpp +++ b/src/lib/parameters/parameters.cpp @@ -413,6 +413,11 @@ param_set_internal(param_t param, const void *val, bool mark_saved, bool notify_ return PX4_ERROR; } + if (param_is_readonly(param)) { + PX4_WARN("param %s is read-only", param_name(param)); + return PX4_ERROR; + } + int result = -1; bool param_changed = false; perf_begin(param_set_perf); @@ -544,6 +549,11 @@ int param_set_default_value(param_t param, const void *val) return PX4_ERROR; } + if (param_is_readonly(param)) { + PX4_WARN("param %s is read-only", param_name(param)); + return PX4_ERROR; + } + int result = PX4_ERROR; @@ -615,6 +625,10 @@ static int param_reset_internal(param_t param, bool notify = true, bool autosave return false; #endif + if (param_is_readonly(param)) { + return 0; // silently skip — param_reset_all loops over all params + } + bool param_found = user_config.contains(param); if (handle_in_range(param)) { diff --git a/src/lib/parameters/parameters_common.cpp b/src/lib/parameters/parameters_common.cpp index 215bc7e1b1..ad915f6421 100644 --- a/src/lib/parameters/parameters_common.cpp +++ b/src/lib/parameters/parameters_common.cpp @@ -96,6 +96,26 @@ bool param_is_volatile(param_t param) return false; } +static bool params_locked = false; + +bool param_is_readonly(param_t param) +{ + if (params_locked && handle_in_range(param)) { + for (const auto &p : px4::parameters_readonly) { + if (static_cast(param) == p) { + return true; + } + } + } + + return false; +} + +void param_lock_readonly() +{ + params_locked = true; +} + size_t param_size(param_t param) { if (handle_in_range(param)) { diff --git a/src/lib/parameters/px4params/jsonout.py b/src/lib/parameters/px4params/jsonout.py index ba97c740d9..69f10f26bc 100644 --- a/src/lib/parameters/px4params/jsonout.py +++ b/src/lib/parameters/px4params/jsonout.py @@ -82,6 +82,8 @@ class JsonOutput(): if param.GetVolatile(): curr_param['volatile'] = True + if param.GetReadonly(): + curr_param['readOnly'] = True last_param_name = param.GetName() for code in param.GetFieldCodes(): diff --git a/src/lib/parameters/px4params/markdownout.py b/src/lib/parameters/px4params/markdownout.py index 4c698fb511..77501cf099 100644 --- a/src/lib/parameters/px4params/markdownout.py +++ b/src/lib/parameters/px4params/markdownout.py @@ -20,11 +20,24 @@ If a listed parameter is missing from the Firmware see: [Finding/Updating Parame """ ) + # Define the groups and parameters that are specific to certain boards, to allow for a note to be added to the documentation. + BOARD_SPECIFIC_GROUPS = ['Actuator Outputs'] + PARAM_IS_OUTPUT_TIMER = ['PWM_MAIN_TIM0', 'PWM_MAIN_TIM1', 'PWM_MAIN_TIM2', 'PWM_AUX_TIM0', 'PWM_AUX_TIM1', 'PWM_AUX_TIM2', 'PWM_AUX_TIM3'] + for group in groups: result += f'## {group.GetName()}\n\n' + group_is_board_specific = (group.GetName() in BOARD_SPECIFIC_GROUPS) + for param in group.GetParams(): name = param.GetName() + + # Apply note if either the group is board specific + apply_note_board_specific_group = group_is_board_specific + + # Apply note if name is in list of timer group parameters + apply_timer_param_note = (name in PARAM_IS_OUTPUT_TIMER) + short_desc = param.GetFieldValue("short_desc") or '' # Add fullstop to short_desc if not present @@ -78,6 +91,10 @@ If a listed parameter is missing from the Firmware see: [Finding/Updating Parame def_val='Disabled (0)' result += f'### {name} (`{type}`)' + ' {#' + name + '}\n\n' + if apply_note_board_specific_group: + result += f'\n\n' + if apply_timer_param_note: + result += f'\n\n' if short_desc: result += f'{short_desc}\n\n' if long_desc: @@ -87,7 +104,8 @@ If a listed parameter is missing from the Firmware see: [Finding/Updating Parame if bitmask_list: result += bitmask_output # Format the ranges as a table. - result += f"Reboot | minValue | maxValue | increment | default | unit\n--- | --- | --- | --- | --- | ---\n{'✓' if reboot_required else ' ' } | {min_val} | {max_val} | {increment} | {def_val} | {unit} \n\n" + is_readonly = param.GetReadonly() + result += f"Reboot | minValue | maxValue | increment | default | unit | Read-Only\n--- | --- | --- | --- | --- | --- | ---\n{'✓' if reboot_required else ' ' } | {min_val} | {max_val} | {increment} | {def_val} | {unit} | {'✓' if is_readonly else ' '}\n\n" self.output = result diff --git a/src/lib/parameters/px4params/readonly_config.py b/src/lib/parameters/px4params/readonly_config.py new file mode 100644 index 0000000000..1a3469af87 --- /dev/null +++ b/src/lib/parameters/px4params/readonly_config.py @@ -0,0 +1,48 @@ +""" +Shared helper to load readonly parameter configuration from YAML. +""" +import sys + +try: + import yaml +except ImportError as e: + print("Failed to import yaml: " + str(e)) + print("") + print("You may need to install it using:") + print(" pip3 install --user pyyaml") + print("") + sys.exit(1) + + +def load_readonly_params(readonly_config, all_param_names): + """ + Load readonly parameter config and return the set of readonly param names. + + @param readonly_config: path to readonly_params.yaml + @param all_param_names: set of all known parameter names + @return: set of readonly parameter names + """ + if readonly_config is None: + return set() + + with open(readonly_config, 'r') as f: + config = yaml.safe_load(f) + + mode = config.get('mode', 'block') + listed_params = set(config.get('parameters', [])) + + # Validate that all listed parameters actually exist + unknown = listed_params - all_param_names + if unknown: + print("Error: readonly_params.yaml lists unknown parameters: %s" % ', '.join(sorted(unknown))) + sys.exit(1) + + if mode == 'block': + # Listed params are read-only + return listed_params + elif mode == 'allow': + # Only listed params are writable, all others are read-only + return all_param_names - listed_params + else: + print("Error: readonly_params.yaml has unknown mode '%s' (expected 'block' or 'allow')" % mode) + sys.exit(1) diff --git a/src/lib/parameters/px4params/srcparser.py b/src/lib/parameters/px4params/srcparser.py index e9ed7132e6..7444125ba8 100644 --- a/src/lib/parameters/px4params/srcparser.py +++ b/src/lib/parameters/px4params/srcparser.py @@ -61,6 +61,7 @@ class Parameter(object): self.category = "" self.volatile = False self.boolean = False + self.readonly = False def GetName(self): return self.name @@ -80,6 +81,9 @@ class Parameter(object): def GetBoolean(self): return self.boolean + def GetReadonly(self): + return self.readonly + def SetField(self, code, value): """ Set named field value @@ -110,6 +114,12 @@ class Parameter(object): """ self.boolean = True + def SetReadonly(self): + """ + Set readonly flag + """ + self.readonly = True + def SetCategory(self, category): """ Set param category @@ -232,6 +242,9 @@ class SourceParser(object): # start waiting for the next part - long comment. if state == "wait-short-end": state = "wait-long" + if state == "wait-long-end": + # Long description includes empty lines + long_desc += "\n" else: m = self.re_comment_tag.match(comment_content) if m: @@ -352,7 +365,7 @@ class SourceParser(object): allowedUnits = set ([ '%', 'Hz', '1/s', 'mAh', 'rad', '%/rad', 'rad/s', 'rad/s^2', '%/rad/s', 'rad s^2/m', 'rad s/m', - 'bit/s', 'B/s', + 'bit/s', 'B/s', 'MiB', 'deg', 'deg*1e7', 'deg/s', 'deg/s^2', 'celcius', 'gauss', 'gauss/s', 'gauss^2', 'liters', 'hPa', 'kg', 'kg/m^2', 'kg m^2', 'kg/m^3', diff --git a/src/lib/parameters/px4params/xmlout.py b/src/lib/parameters/px4params/xmlout.py index ecbd5a3dc6..9a24bb3b62 100644 --- a/src/lib/parameters/px4params/xmlout.py +++ b/src/lib/parameters/px4params/xmlout.py @@ -43,6 +43,8 @@ class XMLOutput(): xml_param.attrib["volatile"] = "true" if param.GetBoolean(): xml_param.attrib["boolean"] = "true" + if param.GetReadonly(): + xml_param.attrib["readonly"] = "true" if (param.GetCategory()): xml_param.attrib["category"] = param.GetCategory() last_param_name = param.GetName() diff --git a/src/lib/parameters/px_generate_params.py b/src/lib/parameters/px_generate_params.py index eeab2e2494..9a41b7ad4c 100755 --- a/src/lib/parameters/px_generate_params.py +++ b/src/lib/parameters/px_generate_params.py @@ -18,13 +18,15 @@ except ImportError as e: sys.exit(1) import os +from px4params.readonly_config import load_readonly_params -def generate(xml_file, dest='.'): +def generate(xml_file, dest='.', readonly_config=None): """ Generate px4 param source from xml. @param xml_file: input parameter xml file @param dest: Destination directory for generated files + @param readonly_config: path to readonly_params.yaml (optional) None means to scan everything. """ # pylint: disable=broad-except @@ -39,6 +41,9 @@ def generate(xml_file, dest='.'): params = sorted(params, key=lambda name: name.attrib["name"]) + all_param_names = set(p.attrib["name"] for p in params) + readonly_params = load_readonly_params(readonly_config, all_param_names) + script_path = os.path.dirname(os.path.realpath(__file__)) # for jinja docs see: http://jinja.pocoo.org/docs/2.9/api/ @@ -55,13 +60,14 @@ def generate(xml_file, dest='.'): template = env.get_template(template_file) with open(os.path.join( dest, template_file.replace('.jinja','')), 'w') as fid: - fid.write(template.render(params=params)) + fid.write(template.render(params=params, readonly_params=readonly_params)) if __name__ == "__main__": arg_parser = argparse.ArgumentParser() arg_parser.add_argument("--xml", help="parameter xml file") arg_parser.add_argument("--dest", help="destination path", default=os.path.curdir) + arg_parser.add_argument("--readonly-config", help="path to readonly_params.yaml", default=None) args = arg_parser.parse_args() - generate(xml_file=args.xml, dest=args.dest) + generate(xml_file=args.xml, dest=args.dest, readonly_config=args.readonly_config) # vim: set et fenc=utf-8 ff=unix sts=4 sw=4 ts=4 : diff --git a/src/lib/parameters/px_process_params.py b/src/lib/parameters/px_process_params.py index 2d35e3e95d..0caf9c763f 100755 --- a/src/lib/parameters/px_process_params.py +++ b/src/lib/parameters/px_process_params.py @@ -47,7 +47,7 @@ from __future__ import print_function import sys import os import argparse -from px4params import srcscanner, srcparser, injectxmlparams, xmlout, markdownout, jsonout +from px4params import srcscanner, srcparser, injectxmlparams, xmlout, markdownout, jsonout, readonly_config import lzma #to create .xz file import json @@ -102,6 +102,10 @@ def main(): default="{}", metavar="OVERRIDES", help="a dict of overrides in the form of a json string") + parser.add_argument("--readonly-config", + default=None, + metavar="FILENAME", + help="path to readonly_params.yaml") args = parser.parse_args() @@ -143,6 +147,18 @@ def main(): param.default = val print("OVERRIDING {:s} to {:s}!!!!!".format(name, val)) + # Mark readonly parameters + if args.readonly_config: + all_param_names = set() + for group in param_groups: + for param in group.GetParams(): + all_param_names.add(param.GetName()) + readonly_params = readonly_config.load_readonly_params(args.readonly_config, all_param_names) + for group in param_groups: + for param in group.GetParams(): + if param.GetName() in readonly_params: + param.SetReadonly() + output_files = [] # Output to XML file diff --git a/src/lib/parameters/templates/px4_parameters.hpp.jinja b/src/lib/parameters/templates/px4_parameters.hpp.jinja index ed61539d62..17b6ac5468 100644 --- a/src/lib/parameters/templates/px4_parameters.hpp.jinja +++ b/src/lib/parameters/templates/px4_parameters.hpp.jinja @@ -47,5 +47,13 @@ static constexpr params parameters_volatile[] = { {% endfor %} }; +static constexpr params parameters_readonly[] = { +{% for param in params %} + {%- if param.attrib["name"] in readonly_params %} + params::{{ param.attrib["name"] }}, + {%- endif -%} +{% endfor %} +}; + } // namespace px4 diff --git a/src/lib/pid/PID.cpp b/src/lib/pid/PID.cpp index 6fbb346351..ed3a345cf6 100644 --- a/src/lib/pid/PID.cpp +++ b/src/lib/pid/PID.cpp @@ -44,7 +44,7 @@ void PID::setGains(const float P, const float I, const float D) float PID::update(const float feedback, const float dt, const bool update_integral) { const float error = _setpoint - feedback; - const float output = (_gain_proportional * error) + _integral + (_gain_derivative * updateDerivative(feedback, dt)); + const float output = (_gain_proportional * error) + _integral - (_gain_derivative * updateDerivative(feedback, dt)); if (update_integral) { updateIntegral(error, dt); diff --git a/src/lib/pid/PID.hpp b/src/lib/pid/PID.hpp index 615fd60b22..526abccf4c 100644 --- a/src/lib/pid/PID.hpp +++ b/src/lib/pid/PID.hpp @@ -46,8 +46,8 @@ public: void setSetpoint(const float setpoint) { _setpoint = setpoint; } float update(const float feedback, const float dt, const bool update_integral = true); float getIntegral() { return _integral; } - void resetIntegral() { _integral = 0.f; }; - void resetDerivative() { _last_feedback = NAN; }; + void resetIntegral() { _integral = 0.f; } + void resetDerivative() { _last_feedback = NAN; } private: void updateIntegral(float error, const float dt); float updateDerivative(float feedback, const float dt); diff --git a/src/lib/pid/PIDTest.cpp b/src/lib/pid/PIDTest.cpp index ae7d847bde..0fcbf459e8 100644 --- a/src/lib/pid/PIDTest.cpp +++ b/src/lib/pid/PIDTest.cpp @@ -128,3 +128,24 @@ TEST(PIDTest, InteralOpenLoop) EXPECT_FLOAT_EQ(pid.update(0.f, 0.1f, true), 0.f); EXPECT_FLOAT_EQ(pid.update(0.f, 0.1f, true), -.01f); } + +TEST(PIDTest, DerivativeOnlyDampsFeedbackMotion) +{ + // Derivative-on-measurement: the D term must oppose feedback motion so the + // output damps the plant rather than reinforcing its movement. + PID pid; + pid.setOutputLimit(100.f); + pid.setGains(0.f, 0.f, 1.f); + pid.setSetpoint(0.f); + + // First sample seeds _last_feedback; derivative contribution is zero. + EXPECT_FLOAT_EQ(pid.update(0.f, 0.1f, false), 0.f); + + // Feedback rises by 1.0 over dt = 0.1 -> d(feedback)/dt = +10. + // Expected output = -Kd * d(feedback)/dt = -10. + EXPECT_FLOAT_EQ(pid.update(1.f, 0.1f, false), -10.f); + + // Feedback falls by 1.0 over dt = 0.1 -> d(feedback)/dt = -10. + // Expected output = +10 (still damping). + EXPECT_FLOAT_EQ(pid.update(0.f, 0.1f, false), 10.f); +} diff --git a/src/lib/pure_pursuit/CMakeLists.txt b/src/lib/pure_pursuit/CMakeLists.txt index 1547d3dcdb..76d7a537de 100644 --- a/src/lib/pure_pursuit/CMakeLists.txt +++ b/src/lib/pure_pursuit/CMakeLists.txt @@ -35,5 +35,6 @@ px4_add_library(pure_pursuit PurePursuit.cpp PurePursuit.hpp ) +set_property(GLOBAL APPEND PROPERTY PX4_MODULE_CONFIG_FILES ${CMAKE_CURRENT_SOURCE_DIR}/purepursuit_params.yaml) px4_add_unit_gtest(SRC PurePursuitTest.cpp LINKLIBS pure_pursuit) diff --git a/src/lib/pure_pursuit/purepursuit_params.c b/src/lib/pure_pursuit/purepursuit_params.c deleted file mode 100644 index b7b7e7a35e..0000000000 --- a/src/lib/pure_pursuit/purepursuit_params.c +++ /dev/null @@ -1,75 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2025 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file pruepursuit_params.c - * - * Parameters defined by the pure pursuit lib. - */ - -/** - * Tuning parameter for the pure pursuit controller - * - * Lower value -> More aggressive controller (beware overshoot/oscillations) - * - * @min 0.1 - * @max 100 - * @increment 0.01 - * @decimal 2 - * @group Pure Pursuit - */ -PARAM_DEFINE_FLOAT(PP_LOOKAHD_GAIN, 1.0f); - -/** - * Minimum lookahead distance for the pure pursuit controller - * - * @min 0.1 - * @max 100 - * @unit m - * @increment 0.01 - * @decimal 2 - * @group Pure Pursuit - */ -PARAM_DEFINE_FLOAT(PP_LOOKAHD_MIN, 1.0f); - -/** - * Maximum lookahead distance for the pure pursuit controller - * - * @min 0.1 - * @max 100 - * @unit m - * @increment 0.01 - * @decimal 2 - * @group Pure Pursuit - */ -PARAM_DEFINE_FLOAT(PP_LOOKAHD_MAX, 10.0f); diff --git a/src/lib/pure_pursuit/purepursuit_params.yaml b/src/lib/pure_pursuit/purepursuit_params.yaml new file mode 100644 index 0000000000..88d2a0d108 --- /dev/null +++ b/src/lib/pure_pursuit/purepursuit_params.yaml @@ -0,0 +1,34 @@ +module_name: pure_pursuit +parameters: +- group: Pure Pursuit + definitions: + PP_LOOKAHD_GAIN: + description: + short: Tuning parameter for the pure pursuit controller + long: Lower value -> More aggressive controller (beware overshoot/oscillations) + type: float + default: 1.0 + min: 0.1 + max: 100 + increment: 0.01 + decimal: 2 + PP_LOOKAHD_MIN: + description: + short: Minimum lookahead distance for the pure pursuit controller + type: float + default: 1.0 + min: 0.1 + max: 100 + unit: m + increment: 0.01 + decimal: 2 + PP_LOOKAHD_MAX: + description: + short: Maximum lookahead distance for the pure pursuit controller + type: float + default: 10.0 + min: 0.1 + max: 100 + unit: m + increment: 0.01 + decimal: 2 diff --git a/src/lib/rate_control/CMakeLists.txt b/src/lib/rate_control/CMakeLists.txt index 2370b2eb5d..795825537b 100644 --- a/src/lib/rate_control/CMakeLists.txt +++ b/src/lib/rate_control/CMakeLists.txt @@ -37,6 +37,7 @@ px4_add_library(RateControl gain_compression.cpp gain_compression.hpp ) +set_property(GLOBAL APPEND PROPERTY PX4_MODULE_CONFIG_FILES ${CMAKE_CURRENT_SOURCE_DIR}/gain_compression_params.yaml) target_compile_options(RateControl PRIVATE ${MAX_CUSTOM_OPT_LEVEL}) target_include_directories(RateControl PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) target_link_libraries(RateControl PRIVATE mathlib) diff --git a/src/lib/rate_control/gain_compression.cpp b/src/lib/rate_control/gain_compression.cpp index 7e1e172de4..40a60c19ba 100644 --- a/src/lib/rate_control/gain_compression.cpp +++ b/src/lib/rate_control/gain_compression.cpp @@ -96,6 +96,10 @@ void GainCompression3d::update(const Vector3f &input, const float dt) float GainCompression::update(const float input, const float dt) { + if (!PX4_ISFINITE(input)) { + return _compression_gain; + } + _hpf = _alpha_hpf * _hpf + _alpha_hpf * (input - _input_prev); _lpf.update(_hpf * _hpf); diff --git a/src/lib/rate_control/gain_compression_params.c b/src/lib/rate_control/gain_compression_params.c deleted file mode 100644 index 7a3cda5660..0000000000 --- a/src/lib/rate_control/gain_compression_params.c +++ /dev/null @@ -1,53 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2025 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * AS IS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Enable rate gain compression - * - * @boolean - * @group FW Rate Control - */ -PARAM_DEFINE_INT32(FW_GC_EN, 1); - -/** - * Compression gain lower limit - * - * The range of the compression gain is between this parameter and 1.0 - * - * @min 0.0 - * @max 1.0 - * @increment 0.01 - * @decimal 2 - * @group FW Rate Control - */ -PARAM_DEFINE_FLOAT(FW_GC_GAIN_MIN, 0.3f); diff --git a/src/lib/rate_control/gain_compression_params.yaml b/src/lib/rate_control/gain_compression_params.yaml new file mode 100644 index 0000000000..4a2339a60a --- /dev/null +++ b/src/lib/rate_control/gain_compression_params.yaml @@ -0,0 +1,19 @@ +module_name: rate_control +parameters: +- group: FW Rate Control + definitions: + FW_GC_EN: + description: + short: Enable rate gain compression + type: boolean + default: 1 + FW_GC_GAIN_MIN: + description: + short: Compression gain lower limit + long: The range of the compression gain is between this parameter and 1.0 + type: float + default: 0.3 + min: 0.0 + max: 1.0 + increment: 0.01 + decimal: 2 diff --git a/src/lib/rc/sbus.cpp b/src/lib/rc/sbus.cpp index 8dfee6bb57..de63cd7f03 100644 --- a/src/lib/rc/sbus.cpp +++ b/src/lib/rc/sbus.cpp @@ -237,7 +237,7 @@ sbus1_output(int sbus_fd, uint16_t *values, uint16_t num_values) * currently ignoring single bit channels. */ for (unsigned i = 0; (i < num_values) && (i < 16); ++i) { - value = (uint16_t)(((values[i] - SBUS_SCALE_OFFSET) / SBUS_SCALE_FACTOR) + .5f); + value = static_cast(lround((values[i] - SBUS_SCALE_OFFSET) / SBUS_SCALE_FACTOR)); /*protect from out of bounds values and limit to 11 bits*/ if (value > 0x07ff) { @@ -643,7 +643,7 @@ sbus_decode(uint64_t frame_time, uint8_t *frame, uint16_t *values, uint16_t *num /* convert 0-2048 values to 1000-2000 ppm encoding in a not too sloppy fashion */ - values[channel] = (uint16_t)(value * SBUS_SCALE_FACTOR + .5f) + SBUS_SCALE_OFFSET; + values[channel] = static_cast(lround(value * SBUS_SCALE_FACTOR) + SBUS_SCALE_OFFSET); } /* decode switch channels if data fields are wide enough */ diff --git a/src/lib/rc/st24.cpp b/src/lib/rc/st24.cpp index 3e0b2f6851..69b9737c91 100644 --- a/src/lib/rc/st24.cpp +++ b/src/lib/rc/st24.cpp @@ -41,6 +41,7 @@ #include #include +#include #include "st24.h" #include "common_rc.h" @@ -180,13 +181,13 @@ int st24_decode(uint8_t byte, uint8_t *rssi, uint8_t *lost_count, uint16_t *chan channels[chan_index] = ((uint16_t)d->channel[i] << 4); channels[chan_index] |= ((uint16_t)(0xF0 & d->channel[i + 1]) >> 4); /* convert values to 1000-2000 ppm encoding in a not too sloppy fashion */ - channels[chan_index] = (uint16_t)(channels[chan_index] * ST24_SCALE_FACTOR + .5f) + ST24_SCALE_OFFSET; + channels[chan_index] = (uint16_t)lroundf(channels[chan_index] * ST24_SCALE_FACTOR) + ST24_SCALE_OFFSET; chan_index++; channels[chan_index] = ((uint16_t)d->channel[i + 2]); channels[chan_index] |= (((uint16_t)(0x0F & d->channel[i + 1])) << 8); /* convert values to 1000-2000 ppm encoding in a not too sloppy fashion */ - channels[chan_index] = (uint16_t)(channels[chan_index] * ST24_SCALE_FACTOR + .5f) + ST24_SCALE_OFFSET; + channels[chan_index] = (uint16_t)lroundf(channels[chan_index] * ST24_SCALE_FACTOR) + ST24_SCALE_OFFSET; chan_index++; } } @@ -209,13 +210,13 @@ int st24_decode(uint8_t byte, uint8_t *rssi, uint8_t *lost_count, uint16_t *chan channels[chan_index] = ((uint16_t)d->channel[i] << 4); channels[chan_index] |= ((uint16_t)(0xF0 & d->channel[i + 1]) >> 4); /* convert values to 1000-2000 ppm encoding in a not too sloppy fashion */ - channels[chan_index] = (uint16_t)(channels[chan_index] * ST24_SCALE_FACTOR + .5f) + ST24_SCALE_OFFSET; + channels[chan_index] = static_cast(lroundf(channels[chan_index] * ST24_SCALE_FACTOR) + ST24_SCALE_OFFSET); chan_index++; channels[chan_index] = ((uint16_t)d->channel[i + 2]); channels[chan_index] |= (((uint16_t)(0x0F & d->channel[i + 1])) << 8); /* convert values to 1000-2000 ppm encoding in a not too sloppy fashion */ - channels[chan_index] = (uint16_t)(channels[chan_index] * ST24_SCALE_FACTOR + .5f) + ST24_SCALE_OFFSET; + channels[chan_index] = static_cast(lroundf(channels[chan_index] * ST24_SCALE_FACTOR) + ST24_SCALE_OFFSET); chan_index++; } } diff --git a/src/lib/rover_control/CMakeLists.txt b/src/lib/rover_control/CMakeLists.txt index f3a9277d29..138f7e63a2 100644 --- a/src/lib/rover_control/CMakeLists.txt +++ b/src/lib/rover_control/CMakeLists.txt @@ -35,6 +35,7 @@ px4_add_library(rover_control RoverControl.cpp RoverControl.hpp ) +set_property(GLOBAL APPEND PROPERTY PX4_MODULE_CONFIG_FILES ${CMAKE_CURRENT_SOURCE_DIR}/rovercontrol_params.yaml) target_link_libraries(rover_control PUBLIC PID) target_link_libraries(rover_control PUBLIC geo) diff --git a/src/lib/rover_control/rovercontrol_params.c b/src/lib/rover_control/rovercontrol_params.c deleted file mode 100644 index 3683384f5a..0000000000 --- a/src/lib/rover_control/rovercontrol_params.c +++ /dev/null @@ -1,320 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2025 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file rovercontrol_params.c - * - * Parameters defined by the rover control lib. - */ - -/** - * Yaw stick deadzone - * - * Percentage of stick input range that will be interpreted as zero around the stick centered value. - * - * @min 0 - * @max 1 - * @increment 0.01 - * @decimal 2 - * @group Rover Rate Control - */ -PARAM_DEFINE_FLOAT(RO_YAW_STICK_DZ, 0.1f); - -/** - * Yaw rate expo factor - * - * Exponential factor for tuning the input curve shape. - * - * 0 Purely linear input curve - * 1 Purely cubic input curve - * - * @min 0 - * @max 1 - * @decimal 2 - * @group Rover Rate Control - */ -PARAM_DEFINE_FLOAT(RO_YAW_EXPO, 0.f); - -/** - * Yaw rate super expo factor - * - * "Superexponential" factor for refining the input curve shape tuned using RO_YAW_EXPO. - * - * 0 Pure Expo function - * 0.7 reasonable shape enhancement for intuitive stick feel - * 0.95 very strong bent input curve only near maxima have effect - * - * @min 0 - * @max 0.95 - * @decimal 2 - * @group Rover Rate Control - */ -PARAM_DEFINE_FLOAT(RO_YAW_SUPEXPO, 0.f); - -/** - * Yaw rate measurement threshold - * - * The minimum threshold for the yaw rate measurement not to be interpreted as zero. - * - * @unit deg/s - * @min 0 - * @max 100 - * @increment 0.01 - * @decimal 2 - * @group Rover Rate Control - */ -PARAM_DEFINE_FLOAT(RO_YAW_RATE_TH, 3.f); - -/** - * Proportional gain for closed loop yaw rate controller - * - * @min 0 - * @max 100 - * @increment 0.01 - * @decimal 3 - * @group Rover Rate Control - */ -PARAM_DEFINE_FLOAT(RO_YAW_RATE_P, 0.f); - -/** - * Integral gain for closed loop yaw rate controller - * - * @min 0 - * @max 100 - * @increment 0.01 - * @decimal 3 - * @group Rover Rate Control - */ -PARAM_DEFINE_FLOAT(RO_YAW_RATE_I, 0.f); - -/** - * Yaw rate limit - * - * Used to cap yaw rate setpoints and map controller inputs to yaw rate setpoints - * in Acro, Stabilized and Position mode. - * - * @unit deg/s - * @min 0 - * @max 10000 - * @increment 0.01 - * @decimal 2 - * @group Rover Rate Control - */ -PARAM_DEFINE_FLOAT(RO_YAW_RATE_LIM, 0.f); - -/** - * Yaw acceleration limit - * - * Used to cap how quickly the magnitude of yaw rate setpoints can increase. - * Set to -1 to disable. - * - * @unit deg/s^2 - * @min -1 - * @max 10000 - * @increment 0.01 - * @decimal 2 - * @group Rover Rate Control - */ -PARAM_DEFINE_FLOAT(RO_YAW_ACCEL_LIM, -1.f); - -/** - * Yaw deceleration limit - * - * Used to cap how quickly the magnitude of yaw rate setpoints can decrease. - * Set to -1 to disable. - * - * @unit deg/s^2 - * @min -1 - * @max 10000 - * @increment 0.01 - * @decimal 2 - * @group Rover Rate Control - */ -PARAM_DEFINE_FLOAT(RO_YAW_DECEL_LIM, -1.f); - -/** - * Yaw rate correction factor - * - * Multiplicative correction factor for the feedforward mapping of the yaw rate controller. - * Increase this value (x > 1) if the measured yaw rate is lower than the setpoint, decrease (0 < x < 1) otherwise. - * Note: Tuning this is particularly useful for skid-steered rovers, or rovers with misaligned wheels/steering axes - * that cause a lot of friction when turning. - * - * @min 0.01 - * @max 10000 - * @increment 0.01 - * @decimal 2 - * @group Rover Rate Control - */ -PARAM_DEFINE_FLOAT(RO_YAW_RATE_CORR, 1.f); - -/** - * Proportional gain for closed loop yaw controller - * - * @min 0 - * @max 100 - * @increment 0.01 - * @decimal 3 - * @group Rover Attitude Control - */ -PARAM_DEFINE_FLOAT(RO_YAW_P, 0.f); - -/** - * Speed the rover drives at maximum throttle - * - * Used to linearly map speeds [m/s] to throttle values [-1. 1]. - * - * @min 0 - * @max 100 - * @unit m/s - * @increment 0.01 - * @decimal 2 - * @group Rover Velocity Control - */ -PARAM_DEFINE_FLOAT(RO_MAX_THR_SPEED, 0.f); - -/** - * Proportional gain for ground speed controller - * - * @min 0 - * @max 100 - * @increment 0.01 - * @decimal 2 - * @group Rover Velocity Control - */ -PARAM_DEFINE_FLOAT(RO_SPEED_P, 0.f); - -/** - * Integral gain for ground speed controller - * - * @min 0 - * @max 100 - * @increment 0.001 - * @decimal 3 - * @group Rover Velocity Control - */ -PARAM_DEFINE_FLOAT(RO_SPEED_I, 0.f); - -/** - * Speed limit - * - * Used to cap speed setpoints and map controller inputs to speed setpoints in Position mode. - * - * @unit m/s - * @min -1 - * @max 100 - * @increment 0.01 - * @decimal 2 - * @group Rover Velocity Control - */ -PARAM_DEFINE_FLOAT(RO_SPEED_LIM, -1.f); - -/** - * Acceleration limit - * - * Set to -1 to disable. - * For mecanum rovers this limit is used for longitudinal and lateral acceleration. - * - * @unit m/s^2 - * @min -1 - * @max 100 - * @increment 0.01 - * @decimal 2 - * @group Rover Velocity Control - */ -PARAM_DEFINE_FLOAT(RO_ACCEL_LIM, -1.f); - -/** - * Deceleration limit - * - * Set to -1 to disable. - * Note that if it is disabled the rover will not slow down when approaching waypoints in auto modes. - * For mecanum rovers this limit is used for longitudinal and lateral deceleration. - * - * @unit m/s^2 - * @min -1 - * @max 100 - * @increment 0.01 - * @decimal 2 - * @group Rover Velocity Control - */ -PARAM_DEFINE_FLOAT(RO_DECEL_LIM, -1.f); - -/** - * Jerk limit - * - * Set to -1 to disable. - * Note that if it is disabled the rover will not slow down when approaching waypoints in auto modes. - * For mecanum rovers this limit is used for longitudinal and lateral jerk. - * - * @unit m/s^3 - * @min -1 - * @max 100 - * @increment 0.01 - * @decimal 2 - * @group Rover Velocity Control - */ -PARAM_DEFINE_FLOAT(RO_JERK_LIM, -1.f); - -/** - * Speed measurement threshold - * - * Set to -1 to disable. - * The minimum threshold for the speed measurement not to be interpreted as zero. - * - * @unit m/s - * @min 0 - * @max 100 - * @increment 0.01 - * @decimal 2 - * @group Rover Velocity Control - */ -PARAM_DEFINE_FLOAT(RO_SPEED_TH, 0.1f); - -/** - * Tuning parameter for the speed reduction based on the course error - * - * Reduced_speed = RO_MAX_THR_SPEED * (1 - normalized_course_error * RO_SPEED_RED) - * The normalized course error is the angle between the current course and the bearing setpoint - * interpolated from [0, 180] -> [0, 1]. - * Higher value -> More speed reduction. - * Note: This is also used to calculate the speed at which the vehicle arrives at a waypoint in auto modes. - * Set to -1 to disable bearing error based speed reduction. - * - * @min -1 - * @max 100 - * @increment 0.01 - * @decimal 2 - * @group Rover Velocity Control - */ -PARAM_DEFINE_FLOAT(RO_SPEED_RED, -1.f); diff --git a/src/lib/rover_control/rovercontrol_params.yaml b/src/lib/rover_control/rovercontrol_params.yaml new file mode 100644 index 0000000000..20071f8eb0 --- /dev/null +++ b/src/lib/rover_control/rovercontrol_params.yaml @@ -0,0 +1,251 @@ +module_name: rover_control +parameters: +- group: Rover Attitude Control + definitions: + RO_YAW_P: + description: + short: Proportional gain for closed loop yaw controller + type: float + default: 0.0 + min: 0 + max: 100 + increment: 0.01 + decimal: 3 +- group: Rover Rate Control + definitions: + RO_YAW_STICK_DZ: + description: + short: Yaw stick deadzone + long: Percentage of stick input range that will be interpreted as zero around + the stick centered value. + type: float + default: 0.1 + min: 0 + max: 1 + increment: 0.01 + decimal: 2 + RO_YAW_EXPO: + description: + short: Yaw rate expo factor + long: |- + Exponential factor for tuning the input curve shape. + + 0 Purely linear input curve + 1 Purely cubic input curve + type: float + default: 0.0 + min: 0 + max: 1 + decimal: 2 + RO_YAW_SUPEXPO: + description: + short: Yaw rate super expo factor + long: |- + "Superexponential" factor for refining the input curve shape tuned using RO_YAW_EXPO. + + 0 Pure Expo function + 0.7 reasonable shape enhancement for intuitive stick feel + 0.95 very strong bent input curve only near maxima have effect + type: float + default: 0.0 + min: 0 + max: 0.95 + decimal: 2 + RO_YAW_RATE_TH: + description: + short: Yaw rate measurement threshold + long: The minimum threshold for the yaw rate measurement not to be interpreted + as zero. + type: float + default: 3.0 + unit: deg/s + min: 0 + max: 100 + increment: 0.01 + decimal: 2 + RO_YAW_RATE_P: + description: + short: Proportional gain for closed loop yaw rate controller + type: float + default: 0.0 + min: 0 + max: 100 + increment: 0.01 + decimal: 3 + RO_YAW_RATE_I: + description: + short: Integral gain for closed loop yaw rate controller + type: float + default: 0.0 + min: 0 + max: 100 + increment: 0.01 + decimal: 3 + RO_YAW_RATE_LIM: + description: + short: Yaw rate limit + long: |- + Used to cap yaw rate setpoints and map controller inputs to yaw rate setpoints + in Acro, Stabilized and Position mode. + type: float + default: 0.0 + unit: deg/s + min: 0 + max: 10000 + increment: 0.01 + decimal: 2 + RO_YAW_ACCEL_LIM: + description: + short: Yaw acceleration limit + long: |- + Used to cap how quickly the magnitude of yaw rate setpoints can increase. + Set to -1 to disable. + type: float + default: -1.0 + unit: deg/s^2 + min: -1 + max: 10000 + increment: 0.01 + decimal: 2 + RO_YAW_DECEL_LIM: + description: + short: Yaw deceleration limit + long: |- + Used to cap how quickly the magnitude of yaw rate setpoints can decrease. + Set to -1 to disable. + type: float + default: -1.0 + unit: deg/s^2 + min: -1 + max: 10000 + increment: 0.01 + decimal: 2 + RO_YAW_RATE_CORR: + description: + short: Yaw rate correction factor + long: |- + Multiplicative correction factor for the feedforward mapping of the yaw rate controller. + Increase this value (x > 1) if the measured yaw rate is lower than the setpoint, decrease (0 < x < 1) otherwise. + Note: Tuning this is particularly useful for skid-steered rovers, or rovers with misaligned wheels/steering axes + that cause a lot of friction when turning. + type: float + default: 1.0 + min: 0.01 + max: 10000 + increment: 0.01 + decimal: 2 +- group: Rover Velocity Control + definitions: + RO_MAX_THR_SPEED: + description: + short: Speed the rover drives at maximum throttle + long: Used to linearly map speeds [m/s] to throttle values [-1. 1]. + type: float + default: 0.0 + min: 0 + max: 100 + unit: m/s + increment: 0.01 + decimal: 2 + RO_SPEED_P: + description: + short: Proportional gain for ground speed controller + type: float + default: 0.0 + min: 0 + max: 100 + increment: 0.01 + decimal: 2 + RO_SPEED_I: + description: + short: Integral gain for ground speed controller + type: float + default: 0.0 + min: 0 + max: 100 + increment: 0.001 + decimal: 3 + RO_SPEED_LIM: + description: + short: Speed limit + long: Used to cap speed setpoints and map controller inputs to speed setpoints + in Position mode. + type: float + default: -1.0 + unit: m/s + min: -1 + max: 100 + increment: 0.01 + decimal: 2 + RO_ACCEL_LIM: + description: + short: Acceleration limit + long: |- + Set to -1 to disable. + For mecanum rovers this limit is used for longitudinal and lateral acceleration. + type: float + default: -1.0 + unit: m/s^2 + min: -1 + max: 100 + increment: 0.01 + decimal: 2 + RO_DECEL_LIM: + description: + short: Deceleration limit + long: |- + Set to -1 to disable. + Note that if it is disabled the rover will not slow down when approaching waypoints in auto modes. + For mecanum rovers this limit is used for longitudinal and lateral deceleration. + type: float + default: -1.0 + unit: m/s^2 + min: -1 + max: 100 + increment: 0.01 + decimal: 2 + RO_JERK_LIM: + description: + short: Jerk limit + long: |- + Set to -1 to disable. + Note that if it is disabled the rover will not slow down when approaching waypoints in auto modes. + For mecanum rovers this limit is used for longitudinal and lateral jerk. + type: float + default: -1.0 + unit: m/s^3 + min: -1 + max: 100 + increment: 0.01 + decimal: 2 + RO_SPEED_TH: + description: + short: Speed measurement threshold + long: |- + Set to -1 to disable. + The minimum threshold for the speed measurement not to be interpreted as zero. + type: float + default: 0.1 + unit: m/s + min: 0 + max: 100 + increment: 0.01 + decimal: 2 + RO_SPEED_RED: + description: + short: Tuning parameter for the speed reduction based on the course error + long: |- + ``` + Reduced_speed = RO_MAX_THR_SPEED * (1 - normalized_course_error * RO_SPEED_RED) + ``` + The normalized course error is the angle between the current course and the bearing setpoint + interpolated from [0, 180] -> [0, 1]. + Higher value -> More speed reduction. + Note: This is also used to calculate the speed at which the vehicle arrives at a waypoint in auto modes. + Set to -1 to disable bearing error based speed reduction. + type: float + default: -1.0 + min: -1 + max: 100 + increment: 0.01 + decimal: 2 diff --git a/src/lib/stick_yaw/CMakeLists.txt b/src/lib/stick_yaw/CMakeLists.txt index 63e873c72f..cc935f8d89 100644 --- a/src/lib/stick_yaw/CMakeLists.txt +++ b/src/lib/stick_yaw/CMakeLists.txt @@ -35,3 +35,5 @@ px4_add_library(StickYaw StickYaw.cpp ) target_include_directories(StickYaw PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) + +px4_add_functional_gtest(SRC StickYawTest.cpp LINKLIBS StickYaw) diff --git a/src/lib/stick_yaw/StickYaw.cpp b/src/lib/stick_yaw/StickYaw.cpp index 2978d8e37b..c45cdee823 100644 --- a/src/lib/stick_yaw/StickYaw.cpp +++ b/src/lib/stick_yaw/StickYaw.cpp @@ -73,7 +73,8 @@ void StickYaw::generateYawSetpoint(float &yawspeed_setpoint, float &yaw_setpoint bool StickYaw::updateYawCorrection(const float yaw, const float unaided_yaw, const float deltatime) { if (!PX4_ISFINITE(unaided_yaw)) { - _yaw_correction = 0.f; + // If unaided yaw is not available we leave yaw_correction_ unchanged + // Meaning yaw_setpoint - yaw_correction_prev + _yaw_correction = yaw_setpoint return false; } diff --git a/src/modules/ekf2/EKF/aid_sources/zero_innovation_heading_update.cpp b/src/lib/stick_yaw/StickYawTest.cpp similarity index 53% rename from src/modules/ekf2/EKF/aid_sources/zero_innovation_heading_update.cpp rename to src/lib/stick_yaw/StickYawTest.cpp index 400cd9f19c..7c28b5c8e4 100644 --- a/src/modules/ekf2/EKF/aid_sources/zero_innovation_heading_update.cpp +++ b/src/lib/stick_yaw/StickYawTest.cpp @@ -1,6 +1,6 @@ /**************************************************************************** * - * Copyright (c) 2022 PX4 Development Team. All rights reserved. + * Copyright (C) 2025 PX4 Development Team. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -31,39 +31,47 @@ * ****************************************************************************/ -/** - * @file zero_innovation_heading_update.cpp - * Control function for ekf heading update when at rest or no other heading source available - */ +#include +#include "StickYaw.hpp" -#include "ekf.h" +#include -void Ekf::controlZeroInnovationHeadingUpdate() +TEST(StickYawTest, UnaidedYawNanTransitionNoYawJump) { - const bool yaw_aiding = _control_status.flags.mag_hdg || _control_status.flags.mag_3D - || _control_status.flags.ev_yaw || _control_status.flags.gnss_yaw; + // When unaided_yaw transitions from finite to NAN mid-flight, + // the yaw setpoint must not jump discontinuously. + // See: https://github.com/PX4/PX4-Autopilot/pull/25710 - // fuse zero innovation at a limited rate if the yaw variance is too large - if (!yaw_aiding - && isTimedOut(_time_last_heading_fuse, (uint64_t)200'000)) { + param_control_autosave(false); - // Use an observation variance larger than usual but small enough - // to constrain the yaw variance just below the threshold - const float obs_var = _control_status.flags.tilt_align ? 0.25f : 0.001f; + StickYaw stick_yaw{nullptr}; + float yawspeed_sp = 0.f; + float yaw_sp = NAN; + const float dt = 0.01f; - estimator_aid_source1d_s aid_src_status{}; - aid_src_status.observation = getEulerYaw(_state.quat_nominal); - aid_src_status.observation_variance = obs_var; - aid_src_status.innovation = 0.f; + // Phase 1: Establish yaw lock at yaw=0 with unaided_yaw=0 + stick_yaw.reset(0.f, 0.f); - VectorState H_YAW; - - computeYawInnovVarAndH(obs_var, aid_src_status.innovation_variance, H_YAW); - - if (!_control_status.flags.tilt_align - || (aid_src_status.innovation_variance - obs_var) > sq(_params.ekf2_head_noise)) { - // The yaw variance is too large, fuse fake measurement - fuseYaw(aid_src_status, H_YAW); - } + for (int i = 0; i < 10; i++) { + stick_yaw.generateYawSetpoint(yawspeed_sp, yaw_sp, 0.f, 0.f, dt, 0.f); } + + EXPECT_NEAR(yaw_sp, 0.f, 0.01f); + + // Phase 2: Simulate EKF yaw correction — yaw jumps to 0.3 rad while + // unaided_yaw stays at 0. This creates a yaw_error of 0.3 and triggers + // the convergence detector, building up _yaw_correction ≈ 0.3. + for (int i = 0; i < 5; i++) { + stick_yaw.generateYawSetpoint(yawspeed_sp, yaw_sp, 0.f, 0.3f, dt, 0.f); + } + + const float yaw_sp_before = yaw_sp; + ASSERT_TRUE(PX4_ISFINITE(yaw_sp_before)); + + // Phase 3: unaided_yaw becomes NAN — yaw setpoint must not jump. + stick_yaw.generateYawSetpoint(yawspeed_sp, yaw_sp, 0.f, 0.3f, dt, NAN); + + EXPECT_NEAR(yaw_sp, yaw_sp_before, 0.01f) + << "Yaw setpoint jumped from " << yaw_sp_before << " to " << yaw_sp + << " when unaided_yaw became NAN"; } diff --git a/src/lib/systemlib/CMakeLists.txt b/src/lib/systemlib/CMakeLists.txt index 726fa7c074..3e10c5e892 100644 --- a/src/lib/systemlib/CMakeLists.txt +++ b/src/lib/systemlib/CMakeLists.txt @@ -47,4 +47,5 @@ if(${PX4_PLATFORM} STREQUAL "nuttx") endif() px4_add_library(systemlib ${SRCS}) +set_property(GLOBAL APPEND PROPERTY PX4_MODULE_CONFIG_FILES ${CMAKE_CURRENT_SOURCE_DIR}/system_params.yaml) target_compile_options(systemlib PRIVATE ${MAX_CUSTOM_OPT_LEVEL}) diff --git a/src/lib/systemlib/system_params.c b/src/lib/systemlib/system_params.c deleted file mode 100644 index 644e849d9d..0000000000 --- a/src/lib/systemlib/system_params.c +++ /dev/null @@ -1,303 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2013-2017 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/* - * @file system_params.c - * - * System wide parameters - */ - -/** - * Auto-start script index. - * - * CHANGING THIS VALUE REQUIRES A RESTART. Defines the auto-start script used to bootstrap the system. - * - * @reboot_required true - * @min 0 - * @max 9999999 - * @group System - */ -PARAM_DEFINE_INT32(SYS_AUTOSTART, 0); - -/** - * Automatically configure default values. - * - * Set to 1 to reset parameters on next system startup (setting defaults). - * Platform-specific values are used if available. - * RC* parameters are preserved. - * - * @value 0 Keep parameters - * @value 1 Reset parameters to airframe defaults - * @group System - */ -PARAM_DEFINE_INT32(SYS_AUTOCONFIG, 0); - -/** - * Enable HITL/SIH mode on next boot - * - * While enabled the system will boot in Hardware-In-The-Loop (HITL) - * or Simulation-In-Hardware (SIH) mode and not enable all sensors and checks. - * When disabled the same vehicle can be flown normally. - * - * Set to 'external HITL', if the system should perform as if it were a real - * vehicle (the only difference to a real system is then only the parameter - * value, which can be used for log analysis). - * - * @value -1 external HITL - * @value 0 HITL and SIH disabled - * @value 1 HITL enabled - * @value 2 SIH enabled - * @reboot_required true - * - * @group System - */ -PARAM_DEFINE_INT32(SYS_HITL, 0); - -/** - * Parameter version - * - * This is used internally only: an airframe configuration might set an expected - * parameter version value via PARAM_DEFAULTS_VER. This is checked on bootup - * against SYS_PARAM_VER, and if they do not match, parameters are reset and - * reloaded from the airframe configuration. - * - * @min 0 - * @group System - */ -PARAM_DEFINE_INT32(SYS_PARAM_VER, 1); - -/** - * Enable auto start of rate gyro thermal calibration at the next power up. - * - * 0 : Set to 0 to do nothing - * 1 : Set to 1 to start a calibration at next boot - * This parameter is reset to zero when the temperature calibration starts. - * - * default (0, no calibration) - * - * @group System - * @min 0 - * @max 1 - */ -PARAM_DEFINE_INT32(SYS_CAL_GYRO, 0); - -/** - * Enable auto start of accelerometer thermal calibration at the next power up. - * - * 0 : Set to 0 to do nothing - * 1 : Set to 1 to start a calibration at next boot - * This parameter is reset to zero when the temperature calibration starts. - * - * default (0, no calibration) - * - * @group System - * @min 0 - * @max 1 - */ -PARAM_DEFINE_INT32(SYS_CAL_ACCEL, 0); - -/** - * Enable auto start of barometer thermal calibration at the next power up. - * - * 0 : Set to 0 to do nothing - * 1 : Set to 1 to start a calibration at next boot - * This parameter is reset to zero when the temperature calibration starts. - * - * default (0, no calibration) - * - * @group System - * @min 0 - * @max 1 - */ -PARAM_DEFINE_INT32(SYS_CAL_BARO, 0); - -/** - * Required temperature rise during thermal calibration - * - * A temperature increase greater than this value is required during calibration. - * Calibration will complete for each sensor when the temperature increase above the starting temperature exceeds the value set by SYS_CAL_TDEL. - * If the temperature rise is insufficient, the calibration will continue indefinitely and the board will need to be repowered to exit. - * - * @unit celcius - * @min 10 - * @group System - */ -PARAM_DEFINE_INT32(SYS_CAL_TDEL, 24); - -/** - * Minimum starting temperature for thermal calibration - * - * Temperature calibration for each sensor will ignore data if the temperature is lower than the value set by SYS_CAL_TMIN. - * - * @unit celcius - * @group System - */ -PARAM_DEFINE_INT32(SYS_CAL_TMIN, 5); - -/** - * Maximum starting temperature for thermal calibration - * - * Temperature calibration will not start if the temperature of any sensor is higher than the value set by SYS_CAL_TMAX. - * - * @unit celcius - * @group System - */ -PARAM_DEFINE_INT32(SYS_CAL_TMAX, 10); - -/** - * Control if the vehicle has a GPS - * - * Disable this if the system has no GPS. - * If disabled, the sensors hub will not process sensor_gps, - * and GPS will not be available for the rest of the system. - * - * @boolean - * @reboot_required true - * - * @group System - */ -PARAM_DEFINE_INT32(SYS_HAS_GPS, 1); - -/** - * Control if and how many magnetometers are expected - * - * 0: System has no magnetometer, preflight checks should pass without one. - * 1-N: Require the presence of N magnetometer sensors for check to pass. - * - * @reboot_required true - * @group System - */ -PARAM_DEFINE_INT32(SYS_HAS_MAG, 1); - -/** - * Control if the vehicle has a barometer - * - * Disable this if the board has no barometer, such as some of the Omnibus - * F4 SD variants. - * If disabled, the preflight checks will not check for the presence of a - * barometer. - * - * @boolean - * @reboot_required true - * - * @group System - */ -PARAM_DEFINE_INT32(SYS_HAS_BARO, 1); - -/** - * Control if the vehicle has an airspeed sensor - * - * Set this to 0 if the board has no airspeed sensor. - * If set to 0, the preflight checks will not check for the presence of an - * airspeed sensor. - * - * @group System - * @min 0 - * @max 1 - */ -PARAM_DEFINE_INT32(SYS_HAS_NUM_ASPD, 0); - -/** - * Number of distance sensors to check being available - * - * The preflight check will fail if fewer than this number of distance sensors with valid data is present. - * - * Disable the check with 0. - * - * @group System - * @min 0 - * @max 4 - */ -PARAM_DEFINE_INT32(SYS_HAS_NUM_DIST, 0); - -/** - * Number of optical flow sensors required to be available - * - * The preflight check will fail if fewer than this number of optical flow sensors with valid data are present. - * - * @group System - * @min 0 - * @max 1 - */ - -PARAM_DEFINE_INT32(SYS_HAS_NUM_OF, 0); - -/** - * Enable factory calibration mode - * - * If enabled, future sensor calibrations will be stored to /fs/mtd_caldata. - * - * Note: this is only supported on boards with a separate calibration storage - * /fs/mtd_caldata. - * - * @value 0 Disabled - * @value 1 All sensors - * @value 2 All sensors except mag - * @group System - */ -PARAM_DEFINE_INT32(SYS_FAC_CAL_MODE, 0); - -/** - * Bootloader update - * - * If enabled, update the bootloader on the next boot. - * - * WARNING: do not cut the power during an update process, otherwise you will - * have to recover using some alternative method (e.g. JTAG). - * - * Instructions: - * - Insert an SD card - * - Enable this parameter - * - Reboot the board (plug the power or send a reboot command) - * - Wait until the board comes back up (or at least 2 minutes) - * - If it does not come back, check the file bootlog.txt on the SD card - * - * @boolean - * @reboot_required true - * - * @group System - */ -PARAM_DEFINE_INT32(SYS_BL_UPDATE, 0); - -/** - * Enable failure injection - * - * If enabled allows MAVLink INJECT_FAILURE commands. - * - * WARNING: the failures can easily cause crashes and are to be used with caution! - * - * @boolean - * - * @group System - */ -PARAM_DEFINE_INT32(SYS_FAILURE_EN, 0); diff --git a/src/lib/systemlib/system_params.yaml b/src/lib/systemlib/system_params.yaml new file mode 100644 index 0000000000..ec8b55d8ce --- /dev/null +++ b/src/lib/systemlib/system_params.yaml @@ -0,0 +1,230 @@ +module_name: systemlib +parameters: +- group: System + definitions: + SYS_AUTOSTART: + description: + short: Auto-start script index + long: CHANGING THIS VALUE REQUIRES A RESTART. Defines the auto-start script + used to bootstrap the system. + type: int32 + default: 0 + reboot_required: true + min: 0 + max: 9999999 + SYS_AUTOCONFIG: + description: + short: Automatically configure default values + long: |- + Set to 1 to reset parameters on next system startup (setting defaults). + Platform-specific values are used if available. + RC* parameters are preserved. + type: enum + values: + 0: Keep parameters + 1: Reset parameters to airframe defaults + default: 0 + SYS_HITL: + description: + short: Enable HITL/SIH mode on next boot + long: |- + While enabled the system will boot in Hardware-In-The-Loop (HITL) + or Simulation-In-Hardware (SIH) mode and not enable all sensors and checks. + When disabled the same vehicle can be flown normally. + + Set to 'external HITL', if the system should perform as if it were a real + vehicle (the only difference to a real system is then only the parameter + value, which can be used for log analysis). + type: enum + values: + -1: external HITL + 0: HITL and SIH disabled + 1: HITL enabled + 2: SIH enabled + default: 0 + reboot_required: true + SYS_PARAM_VER: + description: + short: Parameter version + long: |- + This is used internally only: an airframe configuration might set an expected + parameter version value via PARAM_DEFAULTS_VER. This is checked on bootup + against SYS_PARAM_VER, and if they do not match, parameters are reset and + reloaded from the airframe configuration. + type: int32 + default: 1 + min: 0 + SYS_CAL_GYRO: + description: + short: Auto start gyro thermal calibration on next boot + long: |- + Enable auto start of rate gyro thermal calibration at the next power up + + 0 : Set to 0 to do nothing + 1 : Set to 1 to start a calibration at next boot + This parameter is reset to zero when the temperature calibration starts. + + default (0, no calibration) + type: int32 + default: 0 + min: 0 + max: 1 + SYS_CAL_ACCEL: + description: + short: Auto start accel thermal calibration on next boot + long: |- + Enable auto start of accelerometer thermal calibration at the next power up + + 0 : Set to 0 to do nothing + 1 : Set to 1 to start a calibration at next boot + This parameter is reset to zero when the temperature calibration starts. + + default (0, no calibration) + type: int32 + default: 0 + min: 0 + max: 1 + SYS_CAL_BARO: + description: + short: Auto start baro thermal calibration on next boot + long: |- + Enable auto start of barometer thermal calibration at the next power up + + 0 : Set to 0 to do nothing + 1 : Set to 1 to start a calibration at next boot + This parameter is reset to zero when the temperature calibration starts. + + default (0, no calibration) + type: int32 + default: 0 + min: 0 + max: 1 + SYS_CAL_TDEL: + description: + short: Required temperature rise during thermal calibration + long: |- + A temperature increase greater than this value is required during calibration. + Calibration will complete for each sensor when the temperature increase above the starting temperature exceeds the value set by SYS_CAL_TDEL. + If the temperature rise is insufficient, the calibration will continue indefinitely and the board will need to be repowered to exit. + type: int32 + default: 24 + unit: celcius + min: 10 + SYS_CAL_TMIN: + description: + short: Minimum starting temperature for thermal calibration + long: Temperature calibration for each sensor will ignore data if the temperature + is lower than the value set by SYS_CAL_TMIN. + type: int32 + default: 5 + unit: celcius + SYS_CAL_TMAX: + description: + short: Maximum starting temperature for thermal calibration + long: Temperature calibration will not start if the temperature of any sensor + is higher than the value set by SYS_CAL_TMAX. + type: int32 + default: 10 + unit: celcius + SYS_HAS_GPS: + description: + short: Control if the vehicle has a GPS + long: |- + Disable this if the system has no GPS. + If disabled, the sensors hub will not process sensor_gps, + and GPS will not be available for the rest of the system. + type: boolean + default: 1 + reboot_required: true + SYS_HAS_MAG: + description: + short: Control if and how many magnetometers are expected + long: |- + 0: System has no magnetometer, preflight checks should pass without one. + 1-N: Require the presence of N magnetometer sensors for check to pass. + type: int32 + default: 1 + reboot_required: true + SYS_HAS_BARO: + description: + short: Control if the vehicle has a barometer + long: |- + Disable this if the board has no barometer, such as some of the Omnibus + F4 SD variants. + If disabled, the preflight checks will not check for the presence of a + barometer. + type: boolean + default: 1 + reboot_required: true + SYS_HAS_NUM_ASPD: + description: + short: Control if the vehicle has an airspeed sensor + long: |- + Set this to 0 if the board has no airspeed sensor. + If set to 0, the preflight checks will not check for the presence of an + airspeed sensor. + type: int32 + default: 0 + min: 0 + max: 1 + SYS_HAS_NUM_DIST: + description: + short: Number of distance sensors to check being available + long: |- + The preflight check will fail if fewer than this number of distance sensors with valid data is present. + + Disable the check with 0. + type: int32 + default: 0 + min: 0 + max: 4 + SYS_HAS_NUM_OF: + description: + short: Number of optical flow sensors required to be available + long: The preflight check will fail if fewer than this number of optical flow + sensors with valid data are present. + type: int32 + default: 0 + min: 0 + max: 1 + SYS_FAC_CAL_MODE: + description: + short: Enable factory calibration mode + long: |- + If enabled, future sensor calibrations will be stored to /fs/mtd_caldata. + + Note: this is only supported on boards with a separate calibration storage + /fs/mtd_caldata. + type: enum + values: + 0: Disabled + 1: All sensors + 2: All sensors except mag + default: 0 + SYS_BL_UPDATE: + description: + short: Bootloader update + long: |- + If enabled, update the bootloader on the next boot. + + WARNING: do not cut the power during an update process, otherwise you will + have to recover using some alternative method (e.g. JTAG). + + Instructions: + - Insert an SD card + - Enable this parameter + - Reboot the board (plug the power or send a reboot command) + - Wait until the board comes back up (or at least 2 minutes) + - If it does not come back, check the file bootlog.txt on the SD card + type: boolean + default: 0 + reboot_required: true + SYS_FAILURE_EN: + description: + short: Enable failure injection + long: |- + If enabled allows MAVLink INJECT_FAILURE commands. + + WARNING: the failures can easily cause crashes and are to be used with caution! + type: boolean + default: 0 diff --git a/src/lib/tecs/TECS.cpp b/src/lib/tecs/TECS.cpp index 69d124239d..1ed625e36e 100644 --- a/src/lib/tecs/TECS.cpp +++ b/src/lib/tecs/TECS.cpp @@ -103,31 +103,18 @@ void TECSAirspeedFilter::update(const float dt, const Input &input, const Param new_state_predicted(0) = _airspeed_state.speed + dt * _airspeed_state.speed_rate; new_state_predicted(1) = _airspeed_state.speed_rate; - const float airspeed_noise_inv{1.0f / param.airspeed_measurement_std_dev}; - const float airspeed_rate_noise_inv{1.0f / param.airspeed_rate_measurement_std_dev}; - const float airspeed_rate_noise_inv_squared_process_noise{airspeed_rate_noise_inv *airspeed_rate_noise_inv * param.airspeed_rate_noise_std_dev}; - const float denom{airspeed_noise_inv + airspeed_rate_noise_inv_squared_process_noise}; - const float common_nom{std::sqrt(param.airspeed_rate_noise_std_dev * (2.0f * airspeed_noise_inv + airspeed_rate_noise_inv_squared_process_noise))}; - - matrix::Matrix kalman_gain; - kalman_gain(0, 0) = airspeed_noise_inv * common_nom / denom; - kalman_gain(0, 1) = airspeed_rate_noise_inv_squared_process_noise / denom; - kalman_gain(1, 0) = airspeed_noise_inv * airspeed_noise_inv * param.airspeed_rate_noise_std_dev / denom; - kalman_gain(1, 1) = airspeed_rate_noise_inv_squared_process_noise * common_nom / denom; - const matrix::Vector2f innovation{(airspeed - new_state_predicted(0)), (airspeed_derivative - new_state_predicted(1))}; + matrix::Vector2f new_state; - new_state = new_state_predicted + dt * (kalman_gain * (innovation)); + new_state(0) = new_state_predicted(0) + dt * (kKg00 * innovation(0) + kKg01 * innovation(1)); + new_state(1) = new_state_predicted(1) + dt * (kKg10 * innovation(0) + kKg11 * innovation(1)); // Clip airspeed at zero if (new_state(0) < FLT_EPSILON) { new_state(0) = 0.0f; // calculate input that would result in zero speed. - const float desired_airspeed_innovation = (-new_state_predicted(0) / dt - kalman_gain(0, - 1) * innovation(1)) / kalman_gain(0, - 0); - new_state(1) = new_state_predicted(1) + dt * (kalman_gain(1, 0) * desired_airspeed_innovation + kalman_gain(1, - 1) * innovation(1)); + const float desired_airspeed_innovation = (-new_state_predicted(0) / dt - kKg01 * innovation(1)) / kKg00; + new_state(1) = new_state_predicted(1) + dt * (kKg10 * desired_airspeed_innovation + kKg11 * innovation(1)); } // Update states diff --git a/src/lib/tecs/TECS.hpp b/src/lib/tecs/TECS.hpp index a45faeb2e3..8cf1f71819 100644 --- a/src/lib/tecs/TECS.hpp +++ b/src/lib/tecs/TECS.hpp @@ -70,9 +70,6 @@ public: */ struct Param { float equivalent_airspeed_trim; ///< the trim value of the equivalent airspeed [m/s]. - float airspeed_measurement_std_dev; ///< airspeed measurement standard deviation in [m/s]. - float airspeed_rate_measurement_std_dev;///< airspeed rate measurement standard deviation in [m/s²]. - float airspeed_rate_noise_std_dev; ///< standard deviation on the airspeed rate deviation in the model in [m/s²]. }; /** @@ -116,6 +113,25 @@ public: private: // States AirspeedFilterState _airspeed_state{.speed = 0.0f, .speed_rate = 0.0f}; ///< Complimentary filter state + + // Steady-state Kalman gains for the 2-state (airspeed, airspeed_rate) complementary filter. + // + // Noise model: R = diag(σ_meas², σ_rate_meas²), Q = diag(0, σ_proc²) + // + // Defining: a = 1/σ_meas, b = σ_proc/σ_rate_meas², d = a + b, n = sqrt(σ_proc·(2a + b)) + // + // K = | a·n/d b/d | + // | a²·σ_proc/d b·n/d | + // + // With σ_meas=0.07 m/s, σ_rate_meas=0.2 m/s², σ_proc=0.2 m/s²: + // a=14.2857, b=5, d=19.2857, n=2.5912 + // + // To recompute if any noise value changes: + // python3 -c "import math; sm=0.07; sr=0.2; sp=0.2; a=1/sm; b=sp/sr**2; d=a+b; n=math.sqrt(sp*(2*a+b)); print(a*n/d, b/d, a*a*sp/d, b*n/d)" + static constexpr float kKg00{1.91940287f}; + static constexpr float kKg01{0.25925926f}; + static constexpr float kKg10{2.11640212f}; + static constexpr float kKg11{0.67179101f}; }; class TECSAltitudeReferenceModel @@ -598,9 +614,6 @@ public: void set_detect_underspeed_enabled(bool enabled) { _control_flag.detect_underspeed_enabled = enabled; }; // setters for parameters - void set_airspeed_measurement_std_dev(float std_dev) {_airspeed_filter_param.airspeed_measurement_std_dev = std_dev;}; - void set_airspeed_rate_measurement_std_dev(float std_dev) {_airspeed_filter_param.airspeed_rate_measurement_std_dev = std_dev;}; - void set_airspeed_filter_process_std_dev(float std_dev) {_airspeed_filter_param.airspeed_rate_noise_std_dev = std_dev;}; void set_integrator_gain_throttle(float gain) { _control_param.integrator_gain_throttle = gain;}; void set_integrator_gain_pitch(float gain) { _control_param.integrator_gain_pitch = gain; }; @@ -710,9 +723,6 @@ private: /// Airspeed filter parameters. TECSAirspeedFilter::Param _airspeed_filter_param{ .equivalent_airspeed_trim = 15.0f, - .airspeed_measurement_std_dev = 0.2f, - .airspeed_rate_measurement_std_dev = 0.05f, - .airspeed_rate_noise_std_dev = 0.02f }; /// Reference model parameters. TECSAltitudeReferenceModel::Param _reference_param{ diff --git a/src/lib/tensorflow_lite_micro/CMakeLists.txt b/src/lib/tensorflow_lite_micro/CMakeLists.txt index f4fc4709a0..575bb663c3 100644 --- a/src/lib/tensorflow_lite_micro/CMakeLists.txt +++ b/src/lib/tensorflow_lite_micro/CMakeLists.txt @@ -72,25 +72,9 @@ if(CONFIG_LIB_TFLM) ${TFLITE_DOWNLOADS_DIR}/cmsis ) - set(TFLM_BUILD_TIMESTAMP ${CMAKE_CURRENT_BINARY_DIR}/tflm_build_complete.timestamp) - add_custom_command( - OUTPUT ${TFLM_BUILD_TIMESTAMP} - COMMAND ${CMAKE_COMMAND} -E copy_if_different - ${CMAKE_CURRENT_SOURCE_DIR}/generate_cc_arrays.py - ${CMAKE_CURRENT_SOURCE_DIR}/tflite_micro/tensorflow/lite/micro/tools/generate_cc_arrays.py - # TODO maybe change this if building for other architectures - COMMAND make -f tensorflow/lite/micro/tools/make/Makefile MICRO_LITE_EXAMPLE_TESTS= MICRO_LITE_BENCHMARKS= MICRO_LITE_TEST_SRCS= MICRO_LITE_INTEGRATION_TESTS= third_party_downloads - # Create timestamp file to mark completion - COMMAND ${CMAKE_COMMAND} -E touch ${TFLM_BUILD_TIMESTAMP} - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/tflite_micro - COMMENT "Downloading TFLM third party dependencies" - DEPENDS git_tflite-micro - VERBATIM - ) - add_custom_target(build_tflm_native - DEPENDS ${TFLM_BUILD_TIMESTAMP} - ) - + # Third-party dependencies are vendored in the PX4/tflite-micro fork under + # tensorflow/lite/micro/tools/make/downloads/ so no network fetch is needed + # at build time. See the px4/vendored-deps branch for details. px4_add_library(tensorflow_lite_micro ${TFLITE_MICRO_SRCS}) if(CONFIG_BOARD_TOOLCHAIN STREQUAL "arm-none-eabi") @@ -98,7 +82,7 @@ if(CONFIG_LIB_TFLM) endif() target_include_directories(tensorflow_lite_micro PUBLIC ${TFLM_INCLUDE_DIRS}) - add_dependencies(tensorflow_lite_micro build_tflm_native) + add_dependencies(tensorflow_lite_micro git_tflite-micro) target_compile_features(tensorflow_lite_micro PRIVATE cxx_std_17) target_compile_options(tensorflow_lite_micro PUBLIC diff --git a/src/lib/tensorflow_lite_micro/generate_cc_arrays.py b/src/lib/tensorflow_lite_micro/generate_cc_arrays.py deleted file mode 100755 index e69de29bb2..0000000000 diff --git a/src/lib/tensorflow_lite_micro/tflite_micro b/src/lib/tensorflow_lite_micro/tflite_micro index 3c0b1e3091..6450e42a8a 160000 --- a/src/lib/tensorflow_lite_micro/tflite_micro +++ b/src/lib/tensorflow_lite_micro/tflite_micro @@ -1 +1 @@ -Subproject commit 3c0b1e3091e4ea423e1bf9da89d41d09517eb0c9 +Subproject commit 6450e42a8adfba36fe5ade4ab66e9ecf59920dc4 diff --git a/src/lib/tinybson/tinybson.cpp b/src/lib/tinybson/tinybson.cpp index 131901ecc8..e62b2e7b87 100644 --- a/src/lib/tinybson/tinybson.cpp +++ b/src/lib/tinybson/tinybson.cpp @@ -51,8 +51,8 @@ # define debug(fmt, args...) do { } while(0) #endif -#define CODER_CHECK(_c) do { if (_c->dead) { PX4_ERR("coder dead"); return -1; }} while(0) -#define CODER_KILL(_c, _reason) do { PX4_ERR("killed: %s", _reason); _c->dead = true; return -1; } while(0) +#define CODER_CHECK(_c) do { if ((_c)->dead) { PX4_ERR("coder dead"); return -1; }} while(0) +#define CODER_KILL(_c, _reason) do { PX4_ERR("killed: %s", _reason); (_c)->dead = true; return -1; } while(0) static int read_x(bson_decoder_t decoder, void *p, size_t s) diff --git a/src/lib/tunes/tune_definition.desc b/src/lib/tunes/tune_definition.desc index 493106f94c..e52995a793 100644 --- a/src/lib/tunes/tune_definition.desc +++ b/src/lib/tunes/tune_definition.desc @@ -94,8 +94,8 @@ PX4_DEFINE_TUNE(3, NOTIFY_POSITIVE, "MFT200e8a8a", PX4_DEFINE_TUNE(4, NOTIFY_NEUTRAL, "MFT200e8e", true /* Notify Neutral tone */) PX4_DEFINE_TUNE(5, NOTIFY_NEGATIVE, "MFT200e8c8e8c8e8c8", true /* Notify Negative tone */) PX4_DEFINE_TUNE(6, ARMING_WARNING, "MNT75L1O2G", false /* arming warning */) -PX4_DEFINE_TUNE(7, BATTERY_WARNING_SLOW, "MBNT100a8", true /* battery warning slow */) -PX4_DEFINE_TUNE(8, BATTERY_WARNING_FAST, "MBNT255a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8", true /* battery warning fast */) +PX4_DEFINE_TUNE(7, BATTERY_WARNING_SLOW, "MBT100a8P", true /* battery warning slow */) +PX4_DEFINE_TUNE(8, BATTERY_WARNING_FAST, "MBT255a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8P", true /* battery warning fast */) PX4_DEFINE_TUNE(9, GPS_WARNING, "MFT255L4AAAL1F#", false /* gps warning slow */) PX4_DEFINE_TUNE(10, ARMING_FAILURE, "MFT255L4<< #define BEAT_TIME_CONVERSION_MS (60 * 1000 * 4) -#define BEAT_TIME_CONVERSION_US BEAT_TIME_CONVERSION_MS * 1000 +#define BEAT_TIME_CONVERSION_US (BEAT_TIME_CONVERSION_MS * 1000) #define BEAT_TIME_CONVERSION BEAT_TIME_CONVERSION_US // semitone offsets from C for the characters 'A'-'G' diff --git a/src/lib/weather_vane/CMakeLists.txt b/src/lib/weather_vane/CMakeLists.txt index 9719a71cb8..ad149da61a 100644 --- a/src/lib/weather_vane/CMakeLists.txt +++ b/src/lib/weather_vane/CMakeLists.txt @@ -32,3 +32,4 @@ ############################################################################ px4_add_library(WeatherVane WeatherVane.cpp) +set_property(GLOBAL APPEND PROPERTY PX4_MODULE_CONFIG_FILES ${CMAKE_CURRENT_SOURCE_DIR}/weathervane_params.yaml) diff --git a/src/lib/weather_vane/weathervane_params.c b/src/lib/weather_vane/weathervane_params.c deleted file mode 100644 index 9cf6e021c1..0000000000 --- a/src/lib/weather_vane/weathervane_params.c +++ /dev/null @@ -1,82 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2018 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file weathervane_params.c - * - * Parameters defined by the weathervane lib. - * - * @author Roman Bapst - */ - -/** - * Enable weathervane. - * - * @boolean - * @group Multicopter Position Control - */ -PARAM_DEFINE_INT32(WV_EN, 0); - -/** - * Weather-vane roll angle to yawrate. - * - * The desired gain to convert roll sp into yaw rate sp. - * - * @min 0.0 - * @max 3.0 - * @unit Hz - * @increment 0.01 - * @decimal 3 - * @group VTOL Attitude Control - */ -PARAM_DEFINE_FLOAT(WV_GAIN, 1.0f); - -/** - * Minimum roll angle setpoint for weathervane controller to demand a yaw-rate. - * - * @min 0 - * @max 5 - * @unit deg - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(WV_ROLL_MIN, 1.0f); - -/** - * Maximum yawrate the weathervane controller is allowed to demand. - * - * @min 0 - * @max 120 - * @unit deg/s - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(WV_YRATE_MAX, 90.0f); diff --git a/src/lib/weather_vane/weathervane_params.yaml b/src/lib/weather_vane/weathervane_params.yaml new file mode 100644 index 0000000000..68cc5bcc45 --- /dev/null +++ b/src/lib/weather_vane/weathervane_params.yaml @@ -0,0 +1,39 @@ +module_name: weather_vane +parameters: +- group: Multicopter Position Control + definitions: + WV_EN: + description: + short: Enable weathervane + type: boolean + default: 0 + WV_ROLL_MIN: + description: + short: Minimum roll angle for weathervane yaw-rate demand + long: Minimum roll angle setpoint for weathervane controller to demand a yaw-rate + type: float + default: 1.0 + min: 0 + max: 5 + unit: deg + WV_YRATE_MAX: + description: + short: Maximum yawrate the weathervane controller is allowed to demand + type: float + default: 90.0 + min: 0 + max: 120 + unit: deg/s +- group: VTOL Attitude Control + definitions: + WV_GAIN: + description: + short: Weather-vane roll angle to yawrate + long: The desired gain to convert roll sp into yaw rate sp. + type: float + default: 1.0 + min: 0.0 + max: 3.0 + unit: Hz + increment: 0.01 + decimal: 3 diff --git a/src/lib/wind_estimator/WindEstimator.cpp b/src/lib/wind_estimator/WindEstimator.cpp index 93602d75a6..ce61d1b286 100644 --- a/src/lib/wind_estimator/WindEstimator.cpp +++ b/src/lib/wind_estimator/WindEstimator.cpp @@ -45,8 +45,8 @@ WindEstimator::initialise(const matrix::Vector3f &velI, const float hor_vel_vari { if (PX4_ISFINITE(tas_meas) && PX4_ISFINITE(tas_variance)) { - constexpr float initial_heading_var = sq(math::radians(INITIAL_HEADING_ERROR_DEG)); - constexpr float initial_sideslip_var = sq(math::radians(INITIAL_BETA_ERROR_DEG)); + constexpr float initial_heading_var = sq(math::radians(kInitialHeadingErrorDeg)); + constexpr float initial_sideslip_var = sq(math::radians(kInitialBetaErrorDeg)); matrix::SquareMatrix P_wind_init; matrix::Vector2f wind_init; @@ -64,7 +64,7 @@ WindEstimator::initialise(const matrix::Vector3f &velI, const float hor_vel_vari _state.setZero(); _state(INDEX_TAS_SCALE) = 1.0f; _P.setZero(); - _P(INDEX_W_N, INDEX_W_N) = _P(INDEX_W_E, INDEX_W_E) = sq(INITIAL_WIND_ERROR); + _P(INDEX_W_N, INDEX_W_N) = _P(INDEX_W_E, INDEX_W_E) = sq(kInitialWindError); } _wind_estimator_reset = true; @@ -95,14 +95,14 @@ WindEstimator::update(uint64_t time_now) const float dt = (float)(time_now - _time_last_update) * 1e-6f; _time_last_update = time_now; - // if airspeed scale is at default (1.0) and we are in the first 5 minutes of flight time, multiply _tas_scale_psd by 100 for faster learning + // if airspeed scale is at default (1.0) and we are in the first 5 minutes of flight time, multiply kTasScalePsd by 100 for faster learning const float tas_psd_multiplier = (fabsf(_scale_init - 1.0f) < FLT_EPSILON && (time_now - _time_initialised < kTASScaleFastLearnTime)) ? kTASScalePSDMultiplier : 1.f; matrix::Matrix3f Qk; Qk(INDEX_W_N, INDEX_W_N) = _wind_psd * dt; Qk(INDEX_W_E, INDEX_W_E) = Qk(INDEX_W_N, INDEX_W_N); - Qk(INDEX_TAS_SCALE, INDEX_TAS_SCALE) = _tas_scale_psd * tas_psd_multiplier * dt; + Qk(INDEX_TAS_SCALE, INDEX_TAS_SCALE) = kTasScalePsd * tas_psd_multiplier * dt; _P += Qk; } @@ -130,7 +130,7 @@ WindEstimator::fuse_airspeed(uint64_t time_now, const float true_airspeed, const sym::FuseAirspeed(velI, _state, _P, true_airspeed, _tas_var, FLT_EPSILON, &H_tas, &K, &_tas_innov_var, &_tas_innov); - const bool meas_is_rejected = check_if_meas_is_rejected(_tas_innov, _tas_innov_var, _tas_gate); + const bool meas_is_rejected = check_if_meas_is_rejected(_tas_innov, _tas_innov_var, kTasGate); if (_tas_innov_var < FLT_EPSILON) { // re init filter in case of a negative variance, and trigger early return to not fuse measurement @@ -172,10 +172,10 @@ WindEstimator::fuse_beta(uint64_t time_now, const matrix::Vector3f &velI, const matrix::Matrix H_beta; matrix::Matrix K; - sym::FuseBeta(velI, _state, _P, q_att, _beta_var, FLT_EPSILON, + sym::FuseBeta(velI, _state, _P, q_att, kBetaVar, FLT_EPSILON, &H_beta, &K, &_beta_innov_var, &_beta_innov); - const bool meas_is_rejected = check_if_meas_is_rejected(_beta_innov, _beta_innov_var, _beta_gate); + const bool meas_is_rejected = check_if_meas_is_rejected(_beta_innov, _beta_innov_var, kBetaGate); if (_beta_innov_var < FLT_EPSILON) { // re init filter in case of a negative variance, and trigger early return to not fuse measurement diff --git a/src/lib/wind_estimator/WindEstimator.hpp b/src/lib/wind_estimator/WindEstimator.hpp index b69ee9cb85..3e11b2b56f 100644 --- a/src/lib/wind_estimator/WindEstimator.hpp +++ b/src/lib/wind_estimator/WindEstimator.hpp @@ -86,12 +86,9 @@ public: // unaided, the state uncertainty (diagonal of sqrt(P)) grows by the process noise spectral density every second void set_wind_process_noise_spectral_density(float wind_nsd) { _wind_psd = wind_nsd * wind_nsd; } - void set_tas_scale_process_noise_spectral_density(float tas_scale_nsd) { _tas_scale_psd = tas_scale_nsd * tas_scale_nsd; } void set_tas_noise(float tas_sigma) { _tas_var = tas_sigma * tas_sigma; } - void set_beta_noise(float beta_var) { _beta_var = beta_var * beta_var; } - void set_tas_gate(uint8_t gate_size) {_tas_gate = gate_size; } - void set_beta_gate(uint8_t gate_size) {_beta_gate = gate_size; } + void set_scale_init(float scale_init) {_scale_init = 1.f / math::constrain(scale_init, 0.1f, 10.f); } void reset_scale_to_init() @@ -109,11 +106,11 @@ private: INDEX_TAS_SCALE }; ///< enum which can be used to access state. - static constexpr float INITIAL_WIND_ERROR = + static constexpr float kInitialWindError = 2.5f; // initial uncertainty of each wind state when filter is initialised without airspeed [m/s] - static constexpr float INITIAL_BETA_ERROR_DEG = + static constexpr float kInitialBetaErrorDeg = 15.0f; // sidelip uncertainty used to initialise the filter with a true airspeed measurement [deg] - static constexpr float INITIAL_HEADING_ERROR_DEG = + static constexpr float kInitialHeadingErrorDeg = 10.0f; // heading uncertainty used to initialise the filter with a true airspeed measurement [deg] matrix::Vector3f _state{0.f, 0.f, 1.f}; @@ -127,12 +124,12 @@ private: bool _initialised{false}; ///< True: filter has been initialised - float _wind_psd{0.1f}; ///< wind process noise power spectral density (m^2/s^4/Hz) - float _tas_scale_psd{0.0001f}; ///< true airspeed process noise power spectral density (1/s^2/Hz) - float _tas_var{1.4f}; ///< true airspeed measurement noise variance - float _beta_var{0.5f}; ///< sideslip measurement noise variance - uint8_t _tas_gate{3}; ///< airspeed fusion gate size - uint8_t _beta_gate{1}; ///< sideslip fusion gate size + float _wind_psd{0.01f}; ///< wind process noise power spectral density (m^2/s^4/Hz), (0.1 m/s^2/sqrt(Hz))^2 + static constexpr float kTasScalePsd{1e-8f}; ///< true airspeed scale process noise power spectral density (1/s^2/Hz), (0.0001 1/s/sqrt(Hz))^2 + float _tas_var{1.96f}; ///< true airspeed measurement noise variance (m/s)^2, (1.4 m/s)^2 + static constexpr float kBetaVar{0.0225f}; ///< sideslip measurement noise variance (rad)^2, (0.15 rad)^2 + static constexpr uint8_t kTasGate{4}; ///< airspeed fusion gate size (SD) + static constexpr uint8_t kBetaGate{1}; ///< sideslip fusion gate size (SD) float _scale_init{1.f}; diff --git a/src/lib/world_magnetic_model/CMakeLists.txt b/src/lib/world_magnetic_model/CMakeLists.txt index 350eeb2d44..523fec7f97 100644 --- a/src/lib/world_magnetic_model/CMakeLists.txt +++ b/src/lib/world_magnetic_model/CMakeLists.txt @@ -57,5 +57,5 @@ target_compile_options(world_magnetic_model PRIVATE ${MAX_CUSTOM_OPT_LEVEL}) if(BUILD_TESTING) px4_add_unit_gtest(SRC test_geo_lookup.cpp LINKLIBS world_magnetic_model) - target_compile_options(unit-test_geo_lookup PRIVATE -O0 -Wno-double-promotion) + target_compile_options(unit-test_geo_lookup PRIVATE ${PX4_DEBUG_OPT_LEVEL} -Wno-double-promotion) endif() diff --git a/src/modules/airspeed_selector/AirspeedValidator.cpp b/src/modules/airspeed_selector/AirspeedValidator.cpp index bbd907ff52..22777f42f8 100644 --- a/src/modules/airspeed_selector/AirspeedValidator.cpp +++ b/src/modules/airspeed_selector/AirspeedValidator.cpp @@ -122,8 +122,9 @@ AirspeedValidator::update_CAS_scale_validated(bool gnss_valid, const matrix::Vec reset_CAS_scale_check(); } - const float course_over_ground_rad = matrix::wrap_2pi(atan2f(vI(0), vI(1))); - const int segment_index = int(SCALE_CHECK_SAMPLES * course_over_ground_rad / (2.f * M_PI_F)); + const float course_over_ground_rad = matrix::wrap_2pi(atan2f(vI(1), vI(0))); + const int segment_index = static_cast(SCALE_CHECK_SAMPLES * course_over_ground_rad / (2.f * M_PI_F)) + % SCALE_CHECK_SAMPLES; _scale_check_groundspeed(segment_index) = vI.norm(); _scale_check_TAS(segment_index) = airspeed_true_raw; diff --git a/src/modules/airspeed_selector/AirspeedValidator.hpp b/src/modules/airspeed_selector/AirspeedValidator.hpp index f902e8a9de..d33fdf91d2 100644 --- a/src/modules/airspeed_selector/AirspeedValidator.hpp +++ b/src/modules/airspeed_selector/AirspeedValidator.hpp @@ -95,21 +95,13 @@ public: // setters wind estimator parameters void set_wind_estimator_wind_process_noise_spectral_density(float wind_nsd) { _wind_estimator.set_wind_process_noise_spectral_density(wind_nsd); } - void set_wind_estimator_tas_scale_process_noise_spectral_density(float tas_scale_nsd) { _wind_estimator.set_tas_scale_process_noise_spectral_density(tas_scale_nsd); } + void set_wind_estimator_tas_noise(float tas_sigma) { _wind_estimator.set_tas_noise(tas_sigma); } + void set_wind_estimator_tas_scale_init(float tas_scale_init) { _tas_scale_init = tas_scale_init; } - void set_wind_estimator_tas_noise(float tas_sigma) { _wind_estimator.set_tas_noise(tas_sigma); } - void set_wind_estimator_beta_noise(float beta_var) { _wind_estimator.set_beta_noise(beta_var); } - void set_wind_estimator_tas_gate(uint8_t gate_size) - { - _wind_estimator.set_tas_gate(gate_size); - } - - void set_wind_estimator_beta_gate(uint8_t gate_size) { _wind_estimator.set_beta_gate(gate_size); } - // setters for failure detection tuning parameters void set_tas_innov_threshold(float tas_innov_threshold) { _tas_innov_threshold = tas_innov_threshold; } void set_tas_innov_integ_threshold(float tas_innov_integ_threshold) { _tas_innov_integ_threshold = tas_innov_integ_threshold; } diff --git a/src/modules/airspeed_selector/CMakeLists.txt b/src/modules/airspeed_selector/CMakeLists.txt index fb3d24f869..1be9fedc43 100644 --- a/src/modules/airspeed_selector/CMakeLists.txt +++ b/src/modules/airspeed_selector/CMakeLists.txt @@ -37,6 +37,8 @@ px4_add_module( airspeed_selector_main.cpp AirspeedValidator.cpp AirspeedValidator.hpp + MODULE_CONFIG + airspeed_selector_params.yaml DEPENDS wind_estimator ) diff --git a/src/modules/airspeed_selector/airspeed_selector_main.cpp b/src/modules/airspeed_selector/airspeed_selector_main.cpp index c0d6e1e7d5..36787eb6ca 100644 --- a/src/modules/airspeed_selector/airspeed_selector_main.cpp +++ b/src/modules/airspeed_selector/airspeed_selector_main.cpp @@ -188,11 +188,7 @@ private: DEFINE_PARAMETERS( (ParamFloat) _param_aspd_wind_nsd, - (ParamFloat) _param_aspd_scale_nsd, (ParamFloat) _param_west_tas_noise, - (ParamFloat) _param_west_beta_noise, - (ParamInt) _param_west_tas_gate, - (ParamInt) _param_west_beta_gate, (ParamInt) _param_aspd_scale_apply, (ParamFloat) _param_airspeed_scale_1, (ParamFloat) _param_airspeed_scale_2, @@ -413,9 +409,8 @@ AirspeedModule::Run() if (_in_takeoff_situation) { // set flag to false if either speed is above stall speed, // or launch detection + land detection indicate flying - const bool speed_above_stall = airspeed_raw.indicated_airspeed_m_s > _param_fw_airspd_stall.get(); - airspeed_raw.indicated_airspeed_m_s > _param_fw_airspd_stall.get() - || (PX4_ISFINITE(_ground_minus_wind_CAS) && _ground_minus_wind_CAS > _param_fw_airspd_stall.get()); + const bool speed_above_stall = _airspeed_validator[i].get_CAS() > _param_fw_airspd_stall.get() + || (PX4_ISFINITE(_ground_minus_wind_CAS) && _ground_minus_wind_CAS > _param_fw_airspd_stall.get()); launch_detection_status_s launch_detection_status{}; _launch_detection_status_sub.copy(&launch_detection_status); @@ -444,8 +439,10 @@ AirspeedModule::Run() // save estimated airspeed scale after disarm if airspeed is valid and scale has changed if (!armed && _armed_prev) { + const float scale_change_threshold = _param_airspeed_scale[i] * 0.03f; // 3% relative change threshold + if (_param_aspd_scale_apply.get() > 0 && _airspeed_validator[i].get_airspeed_valid() - && fabsf(_airspeed_validator[i].get_CAS_scale_validated() - _param_airspeed_scale[i]) > FLT_EPSILON) { + && fabsf(_airspeed_validator[i].get_CAS_scale_validated() - _param_airspeed_scale[i]) > scale_change_threshold) { mavlink_log_info(&_mavlink_log_pub, "Airspeed sensor Nr. %d ASPD_SCALE updated: %.4f --> %.4f", i + 1, (double)_param_airspeed_scale[i], @@ -517,19 +514,10 @@ void AirspeedModule::update_params() } _wind_estimator_sideslip.set_wind_process_noise_spectral_density(_param_aspd_wind_nsd.get()); - _wind_estimator_sideslip.set_tas_scale_process_noise_spectral_density(_param_aspd_scale_nsd.get()); - _wind_estimator_sideslip.set_tas_noise(_param_west_tas_noise.get()); - _wind_estimator_sideslip.set_beta_noise(_param_west_beta_noise.get()); - _wind_estimator_sideslip.set_tas_gate(_param_west_tas_gate.get()); - _wind_estimator_sideslip.set_beta_gate(_param_west_beta_gate.get()); for (int i = 0; i < MAX_NUM_AIRSPEED_SENSORS; i++) { _airspeed_validator[i].set_wind_estimator_wind_process_noise_spectral_density(_param_aspd_wind_nsd.get()); - _airspeed_validator[i].set_wind_estimator_tas_scale_process_noise_spectral_density(_param_aspd_scale_nsd.get()); _airspeed_validator[i].set_wind_estimator_tas_noise(_param_west_tas_noise.get()); - _airspeed_validator[i].set_wind_estimator_beta_noise(_param_west_beta_noise.get()); - _airspeed_validator[i].set_wind_estimator_tas_gate(_param_west_tas_gate.get()); - _airspeed_validator[i].set_wind_estimator_beta_gate(_param_west_beta_gate.get()); _airspeed_validator[i].set_tas_scale_apply(_param_aspd_scale_apply.get()); _airspeed_validator[i].set_wind_estimator_tas_scale_init(_param_airspeed_scale[i]); @@ -749,11 +737,10 @@ void AirspeedModule::select_airspeed_and_publish() airspeed_validated.indicated_airspeed_m_s = NAN; airspeed_validated.calibrated_airspeed_m_s = NAN; airspeed_validated.true_airspeed_m_s = NAN; + airspeed_validated.airspeed_derivative_filtered = NAN; + airspeed_validated.pitch_filtered = NAN; - airspeed_validated.airspeed_derivative_filtered = _airspeed_validator[valid_airspeed_index - - 1].get_airspeed_derivative(); airspeed_validated.throttle_filtered = _throttle_filtered.getState(); - airspeed_validated.pitch_filtered = _airspeed_validator[valid_airspeed_index - 1].get_pitch_filtered(); airspeed_validated.airspeed_source = valid_airspeed_index; _prev_airspeed_src = _valid_airspeed_src; @@ -789,6 +776,8 @@ void AirspeedModule::select_airspeed_and_publish() airspeed_validated.true_airspeed_m_s = _airspeed_validator[valid_airspeed_index - 1].get_TAS(); airspeed_validated.calibrated_ground_minus_wind_m_s = _ground_minus_wind_CAS; airspeed_validated.calibraded_airspeed_synth_m_s = get_synthetic_airspeed(airspeed_validated.throttle_filtered); + airspeed_validated.airspeed_derivative_filtered = _airspeed_validator[valid_airspeed_index - 1].get_airspeed_derivative(); + airspeed_validated.pitch_filtered = _airspeed_validator[valid_airspeed_index - 1].get_pitch_filtered(); break; } diff --git a/src/modules/airspeed_selector/airspeed_selector_params.c b/src/modules/airspeed_selector/airspeed_selector_params.c deleted file mode 100644 index 34d74cbfc5..0000000000 --- a/src/modules/airspeed_selector/airspeed_selector_params.c +++ /dev/null @@ -1,255 +0,0 @@ - -/** - * Wind estimator wind process noise spectral density - * - * Wind process noise of the internal wind estimator(s) of the airspeed selector. - * When unaided, the wind estimate uncertainty (1-sigma, in m/s) increases by this amount every second. - * - * @min 0 - * @max 1 - * @unit m/s^2/sqrt(Hz) - * @decimal 2 - * @group Airspeed Validator - */ -PARAM_DEFINE_FLOAT(ASPD_WIND_NSD, 1.e-1f); - -/** - * Wind estimator true airspeed scale process noise spectral density - * - * Airspeed scale process noise of the internal wind estimator(s) of the airspeed selector. - * When unaided, the scale uncertainty (1-sigma, unitless) increases by this amount every second. - * - * @min 0 - * @max 0.1 - * @unit 1/s/sqrt(Hz) - * @decimal 5 - * @group Airspeed Validator - */ -PARAM_DEFINE_FLOAT(ASPD_SCALE_NSD, 1.e-4f); - -/** - * Wind estimator true airspeed measurement noise - * - * True airspeed measurement noise of the internal wind estimator(s) of the airspeed selector. - * - * @min 0 - * @max 4 - * @unit m/s - * @decimal 1 - * @group Airspeed Validator - */ -PARAM_DEFINE_FLOAT(ASPD_TAS_NOISE, 1.4f); - -/** - * Wind estimator sideslip measurement noise - * - * Sideslip measurement noise of the internal wind estimator(s) of the airspeed selector. - * - * @min 0 - * @max 1 - * @unit rad - * @decimal 3 - * @group Airspeed Validator - */ -PARAM_DEFINE_FLOAT(ASPD_BETA_NOISE, 0.15f); - -/** - * Gate size for true airspeed fusion - * - * Sets the number of standard deviations used by the innovation consistency test. - * - * @min 1 - * @max 5 - * @unit SD - * @group Airspeed Validator - */ -PARAM_DEFINE_INT32(ASPD_TAS_GATE, 4); - -/** - * Gate size for sideslip angle fusion - * - * Sets the number of standard deviations used by the innovation consistency test. - * - * @min 1 - * @max 5 - * @unit SD - * @group Airspeed Validator - */ -PARAM_DEFINE_INT32(ASPD_BETA_GATE, 1); - -/** - * Controls when to apply the new estimated airspeed scale(s) - * - * @value 0 Do not automatically apply the estimated scale - * @value 1 Apply the estimated scale after disarm - * @value 2 Apply the estimated scale in air - * @group Airspeed Validator - */ -PARAM_DEFINE_INT32(ASPD_SCALE_APPLY, 2); - -/** - * Scale of airspeed sensor 1 - * - * This is the scale IAS --> CAS of the first airspeed sensor instance - * - * @min 0.5 - * @max 2.0 - * @decimal 2 - * @group Airspeed Validator - * @volatile - */ -PARAM_DEFINE_FLOAT(ASPD_SCALE_1, 1.0f); - -/** - * Scale of airspeed sensor 2 - * - * This is the scale IAS --> CAS of the second airspeed sensor instance - * - * @min 0.5 - * @max 2.0 - * @decimal 2 - * @group Airspeed Validator - * @volatile - */ -PARAM_DEFINE_FLOAT(ASPD_SCALE_2, 1.0f); - -/** - * Scale of airspeed sensor 3 - * - * This is the scale IAS --> CAS of the third airspeed sensor instance - * - * @min 0.5 - * @max 2.0 - * @decimal 2 - * @group Airspeed Validator - * @volatile - */ -PARAM_DEFINE_FLOAT(ASPD_SCALE_3, 1.0f); - -/** - * Index or primary airspeed measurement source - * - * @value 0 Groundspeed minus windspeed - * @value 1 First airspeed sensor - * @value 2 Second airspeed sensor - * @value 3 Third airspeed sensor - * @value 4 Thrust based airspeed - * - * @reboot_required true - * @group Airspeed Validator - */ -PARAM_DEFINE_INT32(ASPD_PRIMARY, 1); - - -/** - * Enable checks on airspeed sensors - * - * Controls which checks are run to check airspeed data for validity. Only applied if ASPD_PRIMARY > 0. - * - * Note: The missing data check (bit 0) is implicitly always enabled when ASPD_DO_CHECKS > 0, even if bit 0 is not explicitly set. - * - * @min 0 - * @max 31 - * @bit 0 Only data missing check (triggers if more than 1s no data) - * @bit 1 Data stuck (triggers if data is exactly constant for 2s in FW mode) - * @bit 2 Innovation check (see ASPD_FS_INNOV) - * @bit 3 Load factor check (triggers if measurement is below stall speed) - * @bit 4 First principle check (airspeed change vs. throttle and pitch) - * @group Airspeed Validator - */ -PARAM_DEFINE_INT32(ASPD_DO_CHECKS, 7); - -/** - * Fallback options - * - * @value 0 Fallback only to other airspeed sensors - * @value 1 Fallback to groundspeed-minus-windspeed airspeed estimation - * @value 2 Fallback to thrust based airspeed estimation - * @group Airspeed Validator - */ -PARAM_DEFINE_INT32(ASPD_FALLBACK, 0); - -/** - * Airspeed failure innovation threshold - * - * This specifies the minimum airspeed innovation required to trigger a failsafe. Larger values make the check less sensitive, - * smaller values make it more sensitive. Large innovations indicate an inconsistency between predicted (groundspeed - windspeeed) - * and measured airspeed. - * The time required to detect a fault when the threshold is exceeded depends on the size of the exceedance and is controlled by the ASPD_FS_INTEG parameter. - * - * @unit m/s - * @min 0.5 - * @max 10.0 - * @decimal 1 - * @group Airspeed Validator - */ -PARAM_DEFINE_FLOAT(ASPD_FS_INNOV, 5.f); - -/** - * Airspeed failure innovation integral threshold - * - * This sets the time integral of airspeed innovation exceedance above ASPD_FS_INNOV required to trigger a failsafe. - * Larger values make the check less sensitive, smaller positive values make it more sensitive. - * - * @unit m - * @min 0.0 - * @max 50.0 - * @decimal 1 - * @group Airspeed Validator - */ -PARAM_DEFINE_FLOAT(ASPD_FS_INTEG, 10.f); - -/** - * Airspeed failsafe stop delay - * - * Delay before stopping use of airspeed sensor if checks indicate sensor is bad. - * - * @unit s - * @group Airspeed Validator - * @min 0.0 - * @decimal 1 - */ -PARAM_DEFINE_FLOAT(ASPD_FS_T_STOP, 1.f); - -/** - * Airspeed failsafe start delay - * - * Delay before switching back to using airspeed sensor if checks indicate sensor is good. - * Set to a negative value to disable the re-enabling in flight. - * - * @unit s - * @group Airspeed Validator - * @min -1.0 - * @decimal 1 - */ -PARAM_DEFINE_FLOAT(ASPD_FS_T_START, -1.f); - -/** - * Horizontal wind uncertainty threshold for valid ground-minus-wind - * - * The airspeed alternative derived from groundspeed and heading will be declared valid - * as soon and as long the horizontal wind uncertainty is below this value. - * - * @unit m/s - * @min 0.01 - * @max 5 - * @decimal 2 - * @group Airspeed Validator - */ -PARAM_DEFINE_FLOAT(ASPD_WERR_THR, 2.f); - -/** - * First principle airspeed check time window - * - * Window for comparing airspeed change to throttle and pitch change. - * Triggers when the airspeed change within this window is negative while throttle increases - * and the vehicle pitches down. - * Is meant to catch degrading airspeed blockages as can happen when flying through icing conditions. - * Relies on FW_THR_TRIM being set accurately. - * - * @unit s - * @min 0 - * @decimal 1 - * @group Airspeed Validator - */ -PARAM_DEFINE_FLOAT(ASPD_FP_T_WINDOW, 2.0f); diff --git a/src/modules/airspeed_selector/airspeed_selector_params.yaml b/src/modules/airspeed_selector/airspeed_selector_params.yaml new file mode 100644 index 0000000000..de4358c306 --- /dev/null +++ b/src/modules/airspeed_selector/airspeed_selector_params.yaml @@ -0,0 +1,174 @@ +module_name: airspeed_selector +parameters: +- group: Airspeed Validator + definitions: + ASPD_WIND_NSD: + description: + short: Wind estimator wind process noise spectral density + long: |- + Wind process noise of the internal wind estimator(s) of the airspeed selector. + When unaided, the wind estimate uncertainty (1-sigma, in m/s) increases by this amount every second. + type: float + default: 0.1 + min: 0 + max: 1 + unit: m/s^2/sqrt(Hz) + decimal: 2 + ASPD_TAS_NOISE: + description: + short: Wind estimator true airspeed measurement noise + long: True airspeed measurement noise of the internal wind estimator(s) of + the airspeed selector. + type: float + default: 1.4 + min: 0 + max: 4 + unit: m/s + decimal: 1 + ASPD_SCALE_APPLY: + description: + short: Controls when to apply the new estimated airspeed scale(s) + type: enum + values: + 0: Do not automatically apply the estimated scale + 1: Apply the estimated scale after disarm + 2: Apply the estimated scale in air + default: 2 + ASPD_SCALE_1: + description: + short: Scale of airspeed sensor 1 + long: This is the scale IAS --> CAS of the first airspeed sensor instance + type: float + default: 1.0 + min: 0.5 + max: 2.0 + decimal: 2 + ASPD_SCALE_2: + description: + short: Scale of airspeed sensor 2 + long: This is the scale IAS --> CAS of the second airspeed sensor instance + type: float + default: 1.0 + min: 0.5 + max: 2.0 + decimal: 2 + ASPD_SCALE_3: + description: + short: Scale of airspeed sensor 3 + long: This is the scale IAS --> CAS of the third airspeed sensor instance + type: float + default: 1.0 + min: 0.5 + max: 2.0 + decimal: 2 + ASPD_PRIMARY: + description: + short: Index or primary airspeed measurement source + type: enum + values: + 0: Groundspeed minus windspeed + 1: First airspeed sensor + 2: Second airspeed sensor + 3: Third airspeed sensor + 4: Thrust based airspeed + default: 1 + reboot_required: true + ASPD_DO_CHECKS: + description: + short: Enable checks on airspeed sensors + long: |- + Controls which checks are run to check airspeed data for validity. Only applied if ASPD_PRIMARY > 0. + + Note: The missing data check (bit 0) is implicitly always enabled when ASPD_DO_CHECKS > 0, even if bit 0 is not explicitly set. + type: bitmask + bit: + 0: Only data missing check (triggers if more than 1s no data) + 1: Data stuck (triggers if data is exactly constant for 2s in FW mode) + 2: Innovation check (see ASPD_FS_INNOV) + 3: Load factor check (triggers if measurement is below stall speed) + 4: First principle check (airspeed change vs. throttle and pitch) + default: 7 + min: 0 + max: 31 + ASPD_FALLBACK: + description: + short: Fallback options + type: enum + values: + 0: Fallback only to other airspeed sensors + 1: Fallback to groundspeed-minus-windspeed airspeed estimation + 2: Fallback to thrust based airspeed estimation + default: 0 + ASPD_FS_INNOV: + description: + short: Airspeed failure innovation threshold + long: |- + This specifies the minimum airspeed innovation required to trigger a failsafe. Larger values make the check less sensitive, + smaller values make it more sensitive. Large innovations indicate an inconsistency between predicted (groundspeed - windspeeed) + and measured airspeed. + The time required to detect a fault when the threshold is exceeded depends on the size of the exceedance and is controlled by the ASPD_FS_INTEG parameter. + type: float + default: 5.0 + unit: m/s + min: 0.5 + max: 10.0 + decimal: 1 + ASPD_FS_INTEG: + description: + short: Airspeed failure innovation integral threshold + long: |- + This sets the time integral of airspeed innovation exceedance above ASPD_FS_INNOV required to trigger a failsafe. + Larger values make the check less sensitive, smaller positive values make it more sensitive. + type: float + default: 10.0 + unit: m + min: 0.0 + max: 50.0 + decimal: 1 + ASPD_FS_T_STOP: + description: + short: Airspeed failsafe stop delay + long: Delay before stopping use of airspeed sensor if checks indicate sensor + is bad. + type: float + default: 1.0 + unit: s + min: 0.0 + decimal: 1 + ASPD_FS_T_START: + description: + short: Airspeed failsafe start delay + long: |- + Delay before switching back to using airspeed sensor if checks indicate sensor is good. + Set to a negative value to disable the re-enabling in flight. + type: float + default: -1.0 + unit: s + min: -1.0 + decimal: 1 + ASPD_WERR_THR: + description: + short: Horizontal wind uncertainty threshold for valid ground-minus-wind + long: |- + The airspeed alternative derived from groundspeed and heading will be declared valid + as soon and as long the horizontal wind uncertainty is below this value. + type: float + default: 2.0 + unit: m/s + min: 0.01 + max: 5 + decimal: 2 + ASPD_FP_T_WINDOW: + description: + short: First principle airspeed check time window + long: |- + Window for comparing airspeed change to throttle and pitch change. + Triggers when the airspeed change within this window is negative while throttle increases + and the vehicle pitches down. + Is meant to catch degrading airspeed blockages as can happen when flying through icing conditions. + Relies on FW_THR_TRIM being set accurately. + type: float + default: 2.0 + unit: s + min: 0 + decimal: 1 diff --git a/src/modules/attitude_estimator_q/CMakeLists.txt b/src/modules/attitude_estimator_q/CMakeLists.txt index b725408721..305bc31f40 100644 --- a/src/modules/attitude_estimator_q/CMakeLists.txt +++ b/src/modules/attitude_estimator_q/CMakeLists.txt @@ -38,6 +38,8 @@ px4_add_module( STACK_MAX 1600 SRCS attitude_estimator_q_main.cpp + MODULE_CONFIG + attitude_estimator_q_params.yaml DEPENDS world_magnetic_model ) diff --git a/src/modules/attitude_estimator_q/attitude_estimator_q_params.c b/src/modules/attitude_estimator_q/attitude_estimator_q_params.c deleted file mode 100644 index b9a3dc752d..0000000000 --- a/src/modules/attitude_estimator_q/attitude_estimator_q_params.c +++ /dev/null @@ -1,146 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2015 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/* - * @file attitude_estimator_q_params.c - * - * Parameters for attitude estimator (quaternion based) - * - * @author Anton Babushkin - */ - -/** - * standalone attitude estimator enable (unsupported) - * - * Enable standalone quaternion based attitude estimator. - * - * @group Attitude Q estimator - * @boolean - */ -PARAM_DEFINE_INT32(ATT_EN, 0); - -/** - * Complimentary filter accelerometer weight - * - * @group Attitude Q estimator - * @min 0 - * @max 1 - * @decimal 2 - */ -PARAM_DEFINE_FLOAT(ATT_W_ACC, 0.2f); - -/** - * Complimentary filter magnetometer weight - * - * Set to 0 to avoid using the magnetometer. - * - * @group Attitude Q estimator - * @min 0 - * @max 1 - * @decimal 2 - */ -PARAM_DEFINE_FLOAT(ATT_W_MAG, 0.1f); - -/** - * Complimentary filter external heading weight - * - * @group Attitude Q estimator - * @min 0 - * @max 1 - */ -PARAM_DEFINE_FLOAT(ATT_W_EXT_HDG, 0.1f); - -/** - * Complimentary filter gyroscope bias weight - * - * @group Attitude Q estimator - * @min 0 - * @max 1 - * @decimal 2 - */ -PARAM_DEFINE_FLOAT(ATT_W_GYRO_BIAS, 0.1f); - -/** - * Magnetic declination, in degrees - * - * This parameter is not used in normal operation, - * as the declination is looked up based on the - * GPS coordinates of the vehicle. - * - * @group Attitude Q estimator - * @unit deg - * @decimal 2 - */ -PARAM_DEFINE_FLOAT(ATT_MAG_DECL, 0.0f); - -/** - * Automatic GPS based declination compensation - * - * @group Attitude Q estimator - * @boolean - */ -PARAM_DEFINE_INT32(ATT_MAG_DECL_A, 1); - -/** - * External heading usage mode (from Motion capture/Vision) - * - * Set to 1 to use heading estimate from vision. - * Set to 2 to use heading from motion capture. - * - * @group Attitude Q estimator - * @value 0 None - * @value 1 Vision - * @value 2 Motion Capture - * @min 0 - * @max 2 - */ -PARAM_DEFINE_INT32(ATT_EXT_HDG_M, 0); - -/** - * Acceleration compensation based on GPS velocity. - * - * @group Attitude Q estimator - * @boolean - */ -PARAM_DEFINE_INT32(ATT_ACC_COMP, 0); - -/** - * Gyro bias limit - * - * @group Attitude Q estimator - * @unit rad/s - * @min 0 - * @max 2 - * @decimal 3 - */ -PARAM_DEFINE_FLOAT(ATT_BIAS_MAX, 0.05f); diff --git a/src/modules/attitude_estimator_q/attitude_estimator_q_params.yaml b/src/modules/attitude_estimator_q/attitude_estimator_q_params.yaml new file mode 100644 index 0000000000..4fc06e3a1b --- /dev/null +++ b/src/modules/attitude_estimator_q/attitude_estimator_q_params.yaml @@ -0,0 +1,86 @@ +module_name: attitude_estimator_q +parameters: +- group: Attitude Q estimator + definitions: + ATT_EN: + description: + short: standalone attitude estimator enable (unsupported) + long: Enable standalone quaternion based attitude estimator. + type: boolean + default: 0 + ATT_W_ACC: + description: + short: Complementary filter accelerometer weight + type: float + default: 0.2 + min: 0 + max: 1 + decimal: 2 + ATT_W_MAG: + description: + short: Complementary filter magnetometer weight + long: Set to 0 to avoid using the magnetometer. + type: float + default: 0.1 + min: 0 + max: 1 + decimal: 2 + ATT_W_EXT_HDG: + description: + short: Complementary filter external heading weight + type: float + default: 0.1 + min: 0 + max: 1 + ATT_W_GYRO_BIAS: + description: + short: Complementary filter gyroscope bias weight + type: float + default: 0.1 + min: 0 + max: 1 + decimal: 2 + ATT_MAG_DECL: + description: + short: Magnetic declination, in degrees + long: |- + This parameter is not used in normal operation, + as the declination is looked up based on the + GPS coordinates of the vehicle. + type: float + default: 0.0 + unit: deg + decimal: 2 + ATT_MAG_DECL_A: + description: + short: Automatic GPS based declination compensation + type: boolean + default: 1 + ATT_EXT_HDG_M: + description: + short: External heading usage mode (from Motion capture/Vision) + long: |- + Set to 1 to use heading estimate from vision. + Set to 2 to use heading from motion capture. + type: enum + values: + 0: None + 1: Vision + 2: Motion Capture + default: 0 + min: 0 + max: 2 + ATT_ACC_COMP: + description: + short: Acceleration compensation based on GPS velocity + type: boolean + default: 0 + ATT_BIAS_MAX: + description: + short: Gyro bias limit + type: float + default: 0.05 + unit: rad/s + min: 0 + max: 2 + decimal: 3 diff --git a/src/modules/battery_status/CMakeLists.txt b/src/modules/battery_status/CMakeLists.txt index df7c9967d4..e215a4c4df 100644 --- a/src/modules/battery_status/CMakeLists.txt +++ b/src/modules/battery_status/CMakeLists.txt @@ -39,6 +39,7 @@ px4_add_module( analog_battery.cpp MODULE_CONFIG module.yaml + analog_battery_params_common.yaml DEPENDS battery conversion diff --git a/src/modules/battery_status/analog_battery.cpp b/src/modules/battery_status/analog_battery.cpp index 3a1357b868..68a9a4ad13 100644 --- a/src/modules/battery_status/analog_battery.cpp +++ b/src/modules/battery_status/analog_battery.cpp @@ -67,12 +67,6 @@ AnalogBattery::AnalogBattery(int index, ModuleParams *parent, const int sample_i snprintf(param_name, sizeof(param_name), "BAT%d_V_CHANNEL", index); _analog_param_handles.v_channel = param_find(param_name); - snprintf(param_name, sizeof(param_name), "BAT%d_I_CHANNEL", index); - _analog_param_handles.i_channel = param_find(param_name); - - snprintf(param_name, sizeof(param_name), "BAT%d_I_OVERWRITE", index); - _analog_param_handles.i_overwrite = param_find(param_name); - snprintf(param_name, sizeof(param_name), "BAT%d_V_FILT", index); _analog_param_handles.v_filt = param_find(param_name); @@ -105,15 +99,6 @@ AnalogBattery::updateBatteryStatusADC(hrt_abstime timestamp, float voltage_raw, } } - // Overwrite the measured current if current overwrite is defined and vehicle is unarmed - if (_analog_params.i_overwrite > 0) { - updateTopics(); - - if (_arming_state == vehicle_status_s::ARMING_STATE_DISARMED) { - current_a = _analog_params.i_overwrite; - } - } - Battery::setConnected(connected); Battery::updateVoltage(voltage_v); Battery::updateCurrent(current_a); @@ -147,12 +132,7 @@ int AnalogBattery::get_voltage_channel() int AnalogBattery::get_current_channel() { - if (_analog_params.i_channel >= 0) { - return _analog_params.i_channel; - - } else { - return DEFAULT_I_CHANNEL[_index - 1]; - } + return DEFAULT_I_CHANNEL[_index - 1]; } void @@ -161,8 +141,6 @@ AnalogBattery::updateParams() param_get(_analog_param_handles.v_div, &_analog_params.v_div); param_get(_analog_param_handles.a_per_v, &_analog_params.a_per_v); param_get(_analog_param_handles.v_channel, &_analog_params.v_channel); - param_get(_analog_param_handles.i_channel, &_analog_params.i_channel); - param_get(_analog_param_handles.i_overwrite, &_analog_params.i_overwrite); param_get(_analog_param_handles.v_offs_cur, &_analog_params.v_offs_cur); param_get(_analog_param_handles.v_filt, &_analog_params.v_filt); param_get(_analog_param_handles.i_filt, &_analog_params.i_filt); @@ -177,12 +155,3 @@ AnalogBattery::updateParams() Battery::updateParams(); } - -void AnalogBattery::updateTopics() -{ - vehicle_status_s vehicle_status; - - if (_vehicle_status_sub.update(&vehicle_status)) { - _arming_state = vehicle_status.arming_state; - } -} diff --git a/src/modules/battery_status/analog_battery.h b/src/modules/battery_status/analog_battery.h index df308fc710..8659adac05 100644 --- a/src/modules/battery_status/analog_battery.h +++ b/src/modules/battery_status/analog_battery.h @@ -36,8 +36,6 @@ #include #include #include -#include - class AnalogBattery : public Battery { public: @@ -78,8 +76,6 @@ protected: param_t v_div; param_t a_per_v; param_t v_channel; - param_t i_channel; - param_t i_overwrite; param_t v_filt; param_t i_filt; } _analog_param_handles; @@ -89,8 +85,6 @@ protected: float v_div; float a_per_v; int32_t v_channel; - int32_t i_channel; - float i_overwrite; float v_filt; float i_filt; } _analog_params; @@ -101,12 +95,7 @@ private: static constexpr int V_CHANNEL_DISABLED = -2; - uORB::Subscription _vehicle_status_sub{ORB_ID(vehicle_status)}; - uint8_t _arming_state{0}; - hrt_abstime _last_timestamp{0}; AlphaFilter _voltage_filter{}; AlphaFilter _current_filter{}; - - void updateTopics(); }; diff --git a/src/modules/battery_status/analog_battery_params_common.c b/src/modules/battery_status/analog_battery_params_common.c deleted file mode 100644 index ed33d09c1b..0000000000 --- a/src/modules/battery_status/analog_battery_params_common.c +++ /dev/null @@ -1,43 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2012-2017 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Offset in volt as seen by the ADC input of the current sensor. - * - * This offset will be subtracted before calculating the battery - * current based on the voltage. - * - * @group Battery Calibration - * @decimal 8 - */ -PARAM_DEFINE_FLOAT(BAT_V_OFFS_CURR, 0.0); diff --git a/src/modules/battery_status/analog_battery_params_common.yaml b/src/modules/battery_status/analog_battery_params_common.yaml new file mode 100644 index 0000000000..1d79200635 --- /dev/null +++ b/src/modules/battery_status/analog_battery_params_common.yaml @@ -0,0 +1,13 @@ +module_name: battery_status +parameters: +- group: Battery Calibration + definitions: + BAT_V_OFFS_CURR: + description: + short: Offset in volt as seen by the ADC input of the current sensor + long: |- + This offset will be subtracted before calculating the battery + current based on the voltage. + type: float + default: 0.0 + decimal: 8 diff --git a/src/modules/battery_status/analog_battery_params_deprecated.c b/src/modules/battery_status/analog_battery_params_deprecated.c deleted file mode 100644 index e2a2ade511..0000000000 --- a/src/modules/battery_status/analog_battery_params_deprecated.c +++ /dev/null @@ -1,39 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2012-2019 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * This parameter is deprecated. Please use BAT1_I_CHANNEL. - * - * @group Battery Calibration - */ -PARAM_DEFINE_INT32(BAT_ADC_CHANNEL, -1); diff --git a/src/modules/battery_status/module.yaml b/src/modules/battery_status/module.yaml index 03fa372ba1..a908a87ff0 100644 --- a/src/modules/battery_status/module.yaml +++ b/src/modules/battery_status/module.yaml @@ -51,38 +51,6 @@ parameters: instance_start: 1 default: [-1, -1] - BAT${i}_I_CHANNEL: - description: - short: Battery ${i} Current ADC Channel - long: | - This parameter specifies the ADC channel used to monitor current of main power battery. - A value of -1 means to use the board default. - - type: int32 - reboot_required: true - num_instances: *max_num_config_instances - instance_start: 1 - default: [-1, -1] - - BAT${i}_I_OVERWRITE: - description: - short: Battery ${i} idle current overwrite - long: | - 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. - - type: float - decimal: 8 - reboot_required: true - num_instances: *max_num_config_instances - instance_start: 1 - default: [0, 0] - BAT${i}_V_FILT: description: short: Battery ${i} voltage filter time constant diff --git a/src/modules/commander/CMakeLists.txt b/src/modules/commander/CMakeLists.txt index 5dc2a11a7c..dc8f0040d4 100644 --- a/src/modules/commander/CMakeLists.txt +++ b/src/modules/commander/CMakeLists.txt @@ -63,6 +63,7 @@ px4_add_module( worker_thread.cpp MODULE_CONFIG module.yaml + commander_params.yaml DEPENDS ArmAuthorization circuit_breaker diff --git a/src/modules/commander/Commander.cpp b/src/modules/commander/Commander.cpp index 0ba1619a51..efbdc1819f 100644 --- a/src/modules/commander/Commander.cpp +++ b/src/modules/commander/Commander.cpp @@ -249,8 +249,30 @@ int Commander::custom_command(int argc, char *argv[]) } else if (!strcmp(argv[1], "mag")) { if (argc > 2 && (strcmp(argv[2], "quick") == 0)) { - // magnetometer quick calibration: VEHICLE_CMD_FIXED_MAG_CAL_YAW - send_vehicle_command(vehicle_command_s::VEHICLE_CMD_FIXED_MAG_CAL_YAW); + // Magnetometer quick calibration with optional heading + float heading_deg = 0.0f; + + if (argc > 3) { + char *end; + heading_deg = strtof(argv[3], &end); + + if (*end != '\0') { // Check if parsing failed + PX4_ERR("Invalid heading value: %s", argv[3]); + return 1; + } + + heading_deg = matrix::wrap(roundf(heading_deg), 0.f, 360.f); + } + + // Send command with heading (param1), other params zeroed (use GPS) + send_vehicle_command(vehicle_command_s::VEHICLE_CMD_FIXED_MAG_CAL_YAW, + heading_deg, // param1: Yaw of vehicle in earth frame (deg) + 0.0f, // param2: CompassMask, 0 for all + 0.0f, // param3: latitude (deg) If Latitude and longitude are both zero then use the current vehicle location + 0.0f, // param4: longitude (deg) + 0.0, // param5: unused + 0.0, // param6: unused + 0.0f); // param7: unused } else { // magnetometer calibration: param2 = 1 @@ -608,27 +630,29 @@ transition_result_t Commander::arm(arm_disarm_reason_t calling_reason, bool run_ if (run_preflight_checks) { if (_vehicle_control_mode.flag_control_manual_enabled) { - if (_vehicle_control_mode.flag_control_climb_rate_enabled && - !_failsafe_flags.manual_control_signal_lost && _is_throttle_above_center) { + if (!_failsafe_flags.manual_control_signal_lost) { + bool throttle_safe; - mavlink_log_critical(&_mavlink_log_pub, "Arming denied: throttle above center\t"); - events::send(events::ID("commander_arm_denied_throttle_center"), {events::Log::Critical, events::LogInternal::Info}, - "Arming denied: throttle above center"); - tune_negative(true); - return TRANSITION_DENIED; - } + if (_vehicle_status.vehicle_type == vehicle_status_s::VEHICLE_TYPE_ROVER) { + // Rovers: center stick = stop, safe to arm near center + throttle_safe = (fabsf(_last_manual_throttle) < 0.2f); - if (!_vehicle_control_mode.flag_control_climb_rate_enabled && - !_failsafe_flags.manual_control_signal_lost && !_is_throttle_low - && ((_vehicle_status.vehicle_type == vehicle_status_s::VEHICLE_TYPE_FIXED_WING) - || (_vehicle_status.vehicle_type == vehicle_status_s::VEHICLE_TYPE_ROTARY_WING)) - ) { + } else if (_vehicle_control_mode.flag_control_climb_rate_enabled) { + // Climb-rate modes (AltCtl, PosCtl, etc.): center = hover, safe at or below center + throttle_safe = (_last_manual_throttle <= 0.2f); - mavlink_log_critical(&_mavlink_log_pub, "Arming denied: high throttle\t"); - events::send(events::ID("commander_arm_denied_throttle_high"), {events::Log::Critical, events::LogInternal::Info}, - "Arming denied: high throttle"); - tune_negative(true); - return TRANSITION_DENIED; + } else { + // Manual/Stab/Acro on MC/FW: bottom = no thrust, safe at bottom + throttle_safe = (_last_manual_throttle < -0.8f); + } + + if (!throttle_safe) { + mavlink_log_critical(&_mavlink_log_pub, "Arming denied: throttle not in safe position\t"); + events::send(events::ID("commander_arm_denied_throttle_unsafe"), {events::Log::Critical, events::LogInternal::Info}, + "Arming denied: throttle not in safe position"); + tune_negative(true); + return TRANSITION_DENIED; + } } } else if (calling_reason == arm_disarm_reason_t::stick_gesture @@ -766,6 +790,7 @@ Commander::Commander() : updateParameters(); _failsafe.setOnNotifyUserCallback(&Commander::onFailsafeNotifyUserTrampoline, this); + _auto_disarm_killed.set_hysteresis_time_from(false, 5_s); } Commander::~Commander() @@ -981,7 +1006,7 @@ Commander::handle_command(const vehicle_command_s &cmd) break; case vehicle_command_s::VEHICLE_CMD_SET_NAV_STATE: { // Used from ROS - uint8_t desired_nav_state = (uint8_t)(cmd.param1 + 0.5f); + uint8_t desired_nav_state = static_cast(lroundf(cmd.param1)); if (_user_mode_intention.change(desired_nav_state, getSourceFromCommand(cmd))) { cmd_result = vehicle_command_ack_s::VEHICLE_CMD_RESULT_ACCEPTED; @@ -1340,6 +1365,13 @@ Commander::handle_command(const vehicle_command_s &cmd) // reject if armed or shutting down answer_command(cmd, vehicle_command_ack_s::VEHICLE_CMD_RESULT_TEMPORARILY_REJECTED); + } else if (_vehicle_status.hil_state == vehicle_status_s::HIL_STATE_ON) { + // reject calibration in SIH mode — simulated sensors cannot be calibrated + answer_command(cmd, vehicle_command_ack_s::VEHICLE_CMD_RESULT_DENIED); + mavlink_log_critical(&_mavlink_log_pub, "Calibration denied: not supported in SIH mode\t"); + events::send(events::ID("commander_calib_denied_sih"), events::Log::Critical, + "Calibration denied: not supported in SIH mode"); + } else { if ((int)(cmd.param1) == 1) { @@ -1453,6 +1485,13 @@ Commander::handle_command(const vehicle_command_s &cmd) // reject if armed or shutting down answer_command(cmd, vehicle_command_ack_s::VEHICLE_CMD_RESULT_TEMPORARILY_REJECTED); + } else if (_vehicle_status.hil_state == vehicle_status_s::HIL_STATE_ON) { + // reject calibration in SIH mode — simulated sensors cannot be calibrated + answer_command(cmd, vehicle_command_ack_s::VEHICLE_CMD_RESULT_DENIED); + mavlink_log_critical(&_mavlink_log_pub, "Calibration denied: not supported in SIH mode\t"); + events::send(events::ID("commander_mag_yaw_calib_denied_sih"), events::Log::Critical, + "Calibration denied: not supported in SIH mode"); + } else { answer_command(cmd, vehicle_command_ack_s::VEHICLE_CMD_RESULT_ACCEPTED); // parameter 1: Heading (degrees) @@ -1602,6 +1641,7 @@ Commander::handle_command(const vehicle_command_s &cmd) case vehicle_command_s::VEHICLE_CMD_DO_GIMBAL_MANAGER_PITCHYAW: case vehicle_command_s::VEHICLE_CMD_DO_GIMBAL_MANAGER_CONFIGURE: case vehicle_command_s::VEHICLE_CMD_CONFIGURE_ACTUATOR: + case vehicle_command_s::VEHICLE_CMD_ESC_REQUEST_EEPROM: case vehicle_command_s::VEHICLE_CMD_REQUEST_MESSAGE: case vehicle_command_s::VEHICLE_CMD_DO_WINCH: case vehicle_command_s::VEHICLE_CMD_DO_GRIPPER: @@ -1609,6 +1649,7 @@ Commander::handle_command(const vehicle_command_s &cmd) case vehicle_command_s::VEHICLE_CMD_REQUEST_CAMERA_INFORMATION: case vehicle_command_s::VEHICLE_CMD_EXTERNAL_ATTITUDE_ESTIMATE: case vehicle_command_s::VEHICLE_CMD_DO_AUTOTUNE_ENABLE: + case vehicle_command_s::VEHICLE_CMD_ESTIMATOR_SENSOR_ENABLE: /* ignore commands that are handled by other parts of the system */ break; @@ -1670,13 +1711,9 @@ unsigned Commander::handleCommandActuatorTest(const vehicle_command_s &cmd) return vehicle_command_ack_s::VEHICLE_CMD_RESULT_DENIED; } - if (_param_com_mot_test_en.get() != 1) { - return vehicle_command_ack_s::VEHICLE_CMD_RESULT_DENIED; - } - actuator_test_s actuator_test{}; actuator_test.timestamp = hrt_absolute_time(); - actuator_test.function = (int)(cmd.param5 + 0.5); + actuator_test.function = static_cast(lroundf(cmd.param5)); if (actuator_test.function < 1000) { const int first_motor_function = 1; // from MAVLink ACTUATOR_OUTPUT_FUNCTION @@ -1701,7 +1738,7 @@ unsigned Commander::handleCommandActuatorTest(const vehicle_command_s &cmd) actuator_test.value = cmd.param1; actuator_test.action = actuator_test_s::ACTION_DO_CONTROL; - int timeout_ms = (int)(cmd.param2 * 1000.f + 0.5f); + int timeout_ms = static_cast(lroundf(cmd.param2 * 1000.f)); if (timeout_ms <= 0) { actuator_test.action = actuator_test_s::ACTION_RELEASE_CONTROL; @@ -1814,8 +1851,6 @@ void Commander::updateParameters() _vehicle_status.system_type = value_int32; } - _auto_disarm_killed.set_hysteresis_time_from(false, _param_com_kill_disarm.get() * 1_s); - const bool is_rotary = is_rotary_wing(_vehicle_status) || (is_vtol(_vehicle_status) && _vtol_vehicle_status.vehicle_vtol_state != vtol_vehicle_status_s::VEHICLE_VTOL_STATE_FW); const bool is_fixed = is_fixed_wing(_vehicle_status) || (is_vtol(_vehicle_status) @@ -1872,6 +1907,7 @@ void Commander::run() #endif // BOARD_HAS_POWER_CONTROL _boot_timestamp = hrt_absolute_time(); + _arm_on_boot_requested = _param_com_arm_on_boot.get(); arm_auth_init(&_mavlink_log_pub, &_vehicle_status.system_id); @@ -1927,7 +1963,6 @@ void Commander::run() // Check for failure detector status if (_failure_detector.update(_vehicle_status, _vehicle_control_mode)) { - _vehicle_status.failure_detector_status = _failure_detector.getStatus().value; _status_changed = true; } @@ -1952,6 +1987,20 @@ void Commander::run() perf_end(_preflight_check_perf); checkAndInformReadyForTakeoff(); + + // Arm automatically on boot once preflight checks pass + // _arm_on_boot_done prevents re-arming after disarming + const bool should_arm_on_boot = _arm_on_boot_requested + && !_arm_on_boot_done + && !isArmed() + && hrt_elapsed_time(&_boot_timestamp) > 5_s + && pre_flight_checks_pass; + + if (should_arm_on_boot) { + if (arm(arm_disarm_reason_t::mission_start, false) != TRANSITION_DENIED) { + _arm_on_boot_done = true; + } + } } // handle commands last, as the system needs to be updated to handle them @@ -2000,7 +2049,7 @@ void Commander::run() send_parachute_command(); } - // publish states (armed, control_mode, vehicle_status, failure_detector_status) at 2 Hz or immediately when changed + // publish states (armed, control_mode, vehicle_status) at 2 Hz or immediately when changed if ((now >= _vehicle_status.timestamp + 500_ms) || _status_changed || nav_state_or_failsafe_changed || !(_actuator_armed == actuator_armed_prev)) { @@ -2013,10 +2062,11 @@ void Commander::run() // vehicle_status publish (after prearm/preflight updates above) _mode_management.getModeStatus(_vehicle_status.valid_nav_states_mask, _vehicle_status.can_set_nav_states_mask); + _vehicle_status.accepts_offboard_setpoints = _mode_management.currentModeAcceptsOffboardSetpoints(_vehicle_status.nav_state); _vehicle_status.timestamp = hrt_absolute_time(); _vehicle_status_pub.publish(_vehicle_status); - _failure_detector.publishStatus(); + _failure_detector.publishStatus(_health_and_arming_checks.getEscArmStatus(), _health_and_arming_checks.getMotorFailureMask()); } checkWorkerThread(); @@ -2032,8 +2082,10 @@ void Commander::run() perf_end(_loop_perf); - // sleep if there are no vehicle_commands or action_requests to process - if (!_vehicle_command_sub.updated() && !_action_request_sub.updated()) { + // Always sleep during calibration to avoid competing with calibration + // worker threads for CPU. Otherwise, sleep only when idle. + if (_vehicle_status.calibration_enabled + || (!_vehicle_command_sub.updated() && !_action_request_sub.updated())) { px4_usleep(COMMANDER_MONITORING_INTERVAL); } } @@ -2086,15 +2138,8 @@ void Commander::checkForMissionUpdate() if (_vehicle_status.nav_state == vehicle_status_s::NAVIGATION_STATE_AUTO_TAKEOFF || _vehicle_status.nav_state == vehicle_status_s::NAVIGATION_STATE_AUTO_VTOL_TAKEOFF) { - // Transition mode to loiter or auto-mission after takeoff is completed. - if ((_param_com_takeoff_act.get() == 1) && auto_mission_available) { - _user_mode_intention.change(vehicle_status_s::NAVIGATION_STATE_AUTO_MISSION); - - } else { - // Transition to loiter when the takeoff is completed (force into the Loiter, if mode is not executable then failsafe). - _user_mode_intention.change(vehicle_status_s::NAVIGATION_STATE_AUTO_LOITER, ModeChangeSource::ModeExecutor, false, - true); - } + // Transition to loiter when the takeoff is completed (force into the Loiter, if mode is not executable then failsafe). + _user_mode_intention.change(vehicle_status_s::NAVIGATION_STATE_AUTO_LOITER, ModeChangeSource::ModeExecutor, false, true); } else if (_vehicle_status.nav_state == vehicle_status_s::NAVIGATION_STATE_AUTO_MISSION) { // Transition to loiter when the mission is cleared and/or finished, and we are still in mission mode. @@ -2786,10 +2831,7 @@ void Commander::dataLinkCheck() _high_latency_datalink_regained = _high_latency_datalink_timestamp; } - if (_vehicle_status.high_latency_data_link_lost && - (_high_latency_datalink_regained != 0) && - (hrt_elapsed_time(&_high_latency_datalink_regained) > (_param_com_hldl_reg_t.get() * 1_s)) - ) { + if (_vehicle_status.high_latency_data_link_lost && (_high_latency_datalink_regained != 0)) { _vehicle_status.high_latency_data_link_lost = false; _status_changed = true; } @@ -2927,7 +2969,7 @@ void Commander::dataLinkCheck() // ONBOARD CONTROLLER data link loss failsafe if ((_datalink_last_heartbeat_onboard_controller > 0) - && (hrt_elapsed_time(&_datalink_last_heartbeat_onboard_controller) > (_param_com_obc_loss_t.get() * 1_s)) + && (hrt_elapsed_time(&_datalink_last_heartbeat_onboard_controller) > 5_s) && !_onboard_controller_lost) { mavlink_log_critical(&_mavlink_log_pub, "Connection to mission computer lost\t"); @@ -2939,7 +2981,7 @@ void Commander::dataLinkCheck() // Parachute system if ((hrt_elapsed_time(&_datalink_last_heartbeat_parachute_system) > 3_s) && !_parachute_system_lost) { - mavlink_log_critical(&_mavlink_log_pub, "Parachute system lost"); + mavlink_log_critical(&_mavlink_log_pub, "Parachute system lost\t"); _vehicle_status.parachute_system_present = false; _vehicle_status.parachute_system_healthy = false; _parachute_system_lost = true; @@ -2949,7 +2991,7 @@ void Commander::dataLinkCheck() // Remote ID system if ((hrt_elapsed_time(&_datalink_last_heartbeat_open_drone_id_system) > 3_s) && !_open_drone_id_system_lost) { - mavlink_log_critical(&_mavlink_log_pub, "Remote ID system lost"); + mavlink_log_critical(&_mavlink_log_pub, "Remote ID system lost\t"); events::send(events::ID("commander_remote_id_lost"), events::Log::Critical, "Remote ID system lost"); _vehicle_status.open_drone_id_system_present = false; _vehicle_status.open_drone_id_system_healthy = false; @@ -2958,9 +3000,9 @@ void Commander::dataLinkCheck() } // Traffic avoidance system (ADSB/FLARM) - if ((hrt_elapsed_time(&_datalink_last_heartbeat_traffic_avoidance_system) > 3_s) + if ((_param_com_arm_traff.get() > 0) && (hrt_elapsed_time(&_datalink_last_heartbeat_traffic_avoidance_system) > 3_s) && !_traffic_avoidance_system_lost) { - mavlink_log_critical(&_mavlink_log_pub, "Traffic avoidance system lost"); + mavlink_log_critical(&_mavlink_log_pub, "Traffic avoidance system lost\t"); events::send(events::ID("commander_traffic_avoidance_lost"), events::Log::Critical, "Traffic avoidance system lost"); _vehicle_status.traffic_avoidance_system_present = false; _traffic_avoidance_system_lost = true; @@ -3006,8 +3048,7 @@ void Commander::manualControlCheck() if (manual_control_updated && manual_control_setpoint.valid) { - _is_throttle_above_center = (manual_control_setpoint.throttle > 0.2f); - _is_throttle_low = (manual_control_setpoint.throttle < -0.8f); + _last_manual_throttle = manual_control_setpoint.throttle; if (isArmed()) { // Abort autonomous mode and switch to position mode if sticks are moved significantly diff --git a/src/modules/commander/Commander.hpp b/src/modules/commander/Commander.hpp index ff6ed018be..bfaa12b20f 100644 --- a/src/modules/commander/Commander.hpp +++ b/src/modules/commander/Commander.hpp @@ -258,6 +258,8 @@ private: hrt_abstime _boot_timestamp{0}; hrt_abstime _last_disarmed_timestamp{0}; + bool _arm_on_boot_done{false}; ///< true once arm-on-boot has been attempted + bool _arm_on_boot_requested{false}; hrt_abstime _overload_start{0}; ///< time when CPU overload started #if !defined(CONFIG_ARCH_LEDS) && defined(BOARD_HAS_CONTROL_STATUS_LEDS) @@ -279,8 +281,7 @@ private: bool _last_overload{false}; bool _mode_switch_mapped{false}; - bool _is_throttle_above_center{false}; - bool _is_throttle_low{false}; + float _last_manual_throttle{-1.f}; bool _arm_tune_played{false}; bool _have_taken_off_since_arming{false}; @@ -339,19 +340,15 @@ private: (ParamBool) _param_com_disarm_man, (ParamInt) _param_com_dl_loss_t, (ParamInt) _param_com_hldl_loss_t, - (ParamInt) _param_com_hldl_reg_t, (ParamBool) _param_com_home_en, (ParamBool) _param_com_home_in_air, - (ParamInt) _param_com_flt_profile, (ParamBool) _param_com_force_safety, - (ParamFloat) _param_com_kill_disarm, - (ParamBool) _param_com_mot_test_en, - (ParamFloat) _param_com_obc_loss_t, (ParamInt) _param_com_prearm_mode, (ParamInt) _param_com_rc_override, (ParamFloat) _param_com_spoolup_time, (ParamInt) _param_com_flight_uuid, - (ParamInt) _param_com_takeoff_act, - (ParamFloat) _param_com_cpu_max + (ParamFloat) _param_com_cpu_max, + (ParamBool) _param_com_arm_on_boot, + (ParamInt) _param_com_arm_traff ) }; diff --git a/src/modules/commander/HealthAndArmingChecks/CMakeLists.txt b/src/modules/commander/HealthAndArmingChecks/CMakeLists.txt index b170d1d2ca..ad18a2ad79 100644 --- a/src/modules/commander/HealthAndArmingChecks/CMakeLists.txt +++ b/src/modules/commander/HealthAndArmingChecks/CMakeLists.txt @@ -56,6 +56,7 @@ px4_add_library(health_and_arming_checks checks/manualControlCheck.cpp checks/missionCheck.cpp checks/modeCheck.cpp + checks/rallyPointCheck.cpp checks/navigatorCheck.cpp checks/offboardCheck.cpp checks/openDroneIDCheck.cpp @@ -71,6 +72,7 @@ px4_add_library(health_and_arming_checks checks/externalChecks.cpp ) +set_property(GLOBAL APPEND PROPERTY PX4_MODULE_CONFIG_FILES ${CMAKE_CURRENT_SOURCE_DIR}/esc_check_params.yaml) add_dependencies(health_and_arming_checks mode_util) px4_add_functional_gtest(SRC HealthAndArmingChecksTest.cpp diff --git a/src/modules/commander/HealthAndArmingChecks/HealthAndArmingChecks.hpp b/src/modules/commander/HealthAndArmingChecks/HealthAndArmingChecks.hpp index 1986e55e15..5a5e5fb119 100644 --- a/src/modules/commander/HealthAndArmingChecks/HealthAndArmingChecks.hpp +++ b/src/modules/commander/HealthAndArmingChecks/HealthAndArmingChecks.hpp @@ -68,6 +68,7 @@ #include "checks/geofenceCheck.hpp" #include "checks/flightTimeCheck.hpp" #include "checks/missionCheck.hpp" +#include "checks/rallyPointCheck.hpp" #include "checks/rcAndDataLinkCheck.hpp" #include "checks/vtolCheck.hpp" #include "checks/offboardCheck.hpp" @@ -109,6 +110,9 @@ public: const failsafe_flags_s &failsafeFlags() const { return _failsafe_flags; } + uint16_t getMotorFailureMask() const {return _esc_checks.getMotorFailureMask(); } + bool getEscArmStatus() const { return _esc_checks.getEscArmStatus(); } + #ifndef CONSTRAINED_FLASH ExternalChecks &externalChecks() { return _external_checks; } #endif @@ -155,6 +159,7 @@ private: GeofenceChecks _geofence_checks; FlightTimeChecks _flight_time_checks; MissionChecks _mission_checks; + RallyPointChecks _rally_point_checks; RcAndDataLinkChecks _rc_and_data_link_checks; VtolChecks _vtol_checks; OffboardChecks _offboard_checks; @@ -163,7 +168,7 @@ private: ExternalChecks _external_checks; #endif - HealthAndArmingCheckBase *_checks[40] = { + HealthAndArmingCheckBase *_checks[41] = { #ifndef CONSTRAINED_FLASH &_external_checks, #endif @@ -185,6 +190,7 @@ private: &_manual_control_checks, &_home_position_checks, &_mission_checks, + &_rally_point_checks, &_offboard_checks, // must be after _estimator_checks &_mode_checks, // must be after _estimator_checks, _home_position_checks, _mission_checks, _offboard_checks, _external_checks &_open_drone_id_checks, diff --git a/src/modules/commander/HealthAndArmingChecks/checks/armPermissionCheck.cpp b/src/modules/commander/HealthAndArmingChecks/checks/armPermissionCheck.cpp index d25cff98d5..528935b8e8 100644 --- a/src/modules/commander/HealthAndArmingChecks/checks/armPermissionCheck.cpp +++ b/src/modules/commander/HealthAndArmingChecks/checks/armPermissionCheck.cpp @@ -37,13 +37,13 @@ void ArmPermissionChecks::checkAndReport(const Context &context, Report &reporte { if (_param_com_armable.get() < 1) { /* EVENT - * @description - * Vehicle is in safety configuration and denies arming. - * - * - * This check can be configured via COM_ARMABLE parameter. - * - */ + * @description + * Vehicle is in safety configuration and denies arming. + * + * + * This check can be configured via COM_ARMABLE parameter. + * + */ reporter.armingCheckFailure(NavModes::All, health_component_t::system, events::ID("check_armable_configuration"), events::Log::Error, "Vehicle is in safety configuration"); diff --git a/src/modules/commander/HealthAndArmingChecks/checks/batteryCheck.cpp b/src/modules/commander/HealthAndArmingChecks/checks/batteryCheck.cpp index 9b40fb39ac..1d6fb818c0 100644 --- a/src/modules/commander/HealthAndArmingChecks/checks/batteryCheck.cpp +++ b/src/modules/commander/HealthAndArmingChecks/checks/batteryCheck.cpp @@ -211,13 +211,13 @@ void BatteryChecks::checkAndReport(const Context &context, Report &reporter) // This is declared critical so QGC displays a yellow box and reads "low battery" out loud making the user aware /* EVENT - * @description - * The lowest battery state of charge is below the low threshold. - * - * - * Can be configured with BAT_LOW_THR. - * - */ + * @description + * The lowest battery state of charge is below the low threshold. + * + * + * Can be configured with BAT_LOW_THR. + * + */ reporter.armingCheckFailure(affected_modes, health_component_t::battery, events::ID("check_battery_low"), events::Log::Critical, "Low battery"); @@ -229,13 +229,13 @@ void BatteryChecks::checkAndReport(const Context &context, Report &reporter) case battery_status_s::WARNING_CRITICAL: /* EVENT - * @description - * The lowest battery state of charge is below the critical threshold. - * - * - * Can be configured with BAT_CRIT_THR and from when to disalow arming with COM_ARM_BAT_MIN. - * - */ + * @description + * The lowest battery state of charge is below the critical threshold. + * + * + * Can be configured with BAT_CRIT_THR and from when to disalow arming with COM_ARM_BAT_MIN. + * + */ reporter.armingCheckFailure(affected_modes, health_component_t::battery, events::ID("check_battery_critical"), events::Log::Critical, "Critical battery"); @@ -247,13 +247,13 @@ void BatteryChecks::checkAndReport(const Context &context, Report &reporter) case battery_status_s::WARNING_EMERGENCY: /* EVENT - * @description - * The lowest battery state of charge is below the emergency threshold. - * - * - * Can be configured with BAT_EMERGEN_THR. - * - */ + * @description + * The lowest battery state of charge is below the emergency threshold. + * + * + * Can be configured with BAT_EMERGEN_THR. + * + */ reporter.armingCheckFailure(affected_modes, health_component_t::battery, events::ID("check_battery_emergency"), events::Log::Emergency, "Emergency battery level"); diff --git a/src/modules/commander/HealthAndArmingChecks/checks/escCheck.cpp b/src/modules/commander/HealthAndArmingChecks/checks/escCheck.cpp index dc8afc8bcf..9fd5f76ede 100644 --- a/src/modules/commander/HealthAndArmingChecks/checks/escCheck.cpp +++ b/src/modules/commander/HealthAndArmingChecks/checks/escCheck.cpp @@ -62,7 +62,6 @@ static constexpr const char *esc_fault_reason_str(esc_fault_reason_t esc_fault_r case esc_fault_reason_t::esc_warn_temp: return "over temperature"; case esc_fault_reason_t::esc_over_temp: return "critical temperature"; - } return ""; @@ -72,19 +71,31 @@ static constexpr const char *esc_fault_reason_str(esc_fault_reason_t esc_fault_r void EscChecks::checkAndReport(const Context &context, Report &reporter) { const hrt_abstime now = hrt_absolute_time(); - const hrt_abstime esc_telemetry_timeout = - 700_ms; // Some DShot ESCs are unresponsive for ~550ms during their initialization, so we use a timeout higher than that - esc_status_s esc_status; - if (_esc_status_sub.copy(&esc_status) && (now < esc_status.timestamp + esc_telemetry_timeout)) { + // Run motor status checks even when no new ESC data arrives (to detect timeouts) + if (_esc_status_sub.copy(&esc_status)) { + if (esc_status.esc_count <= 0) { + return; + } - checkEscStatus(context, reporter, esc_status); + uint16_t mask = 0; + + if (_param_com_arm_chk_escs.get() > 0) { + mask |= checkEscOnline(context, reporter, esc_status, now); + mask |= checkEscStatus(context, reporter, esc_status); + } + + if (_param_fd_act_en.get() > 0) { + updateEscsStatus(context, reporter, esc_status, now); + mask |= checkMotorStatus(context, reporter, esc_status, now); + } + + _motor_failure_mask = mask; reporter.setIsPresent(health_component_t::motors_escs); + reporter.failsafeFlags().fd_motor_failure = (mask != 0); - } else if (_param_com_arm_chk_escs.get() - && now - _start_time > 5_s) { // Wait a bit after startup to allow esc's to init - + } else if ((_param_com_arm_chk_escs.get() > 0) && now > _start_time + 3_s) { // Allow ESCs to init /* EVENT * @description * @@ -100,83 +111,240 @@ void EscChecks::checkAndReport(const Context &context, Report &reporter) } } -void EscChecks::checkEscStatus(const Context &context, Report &reporter, const esc_status_s &esc_status) +uint16_t EscChecks::checkEscOnline(const Context &context, Report &reporter, const esc_status_s &esc_status, hrt_abstime now) { - const NavModes required_modes = _param_com_arm_chk_escs.get() ? NavModes::All : NavModes::None; + // Check if one or more the ESCs are offline + uint16_t mask = 0; + char esc_fail_msg[esc_status_s::CONNECTED_ESC_MAX * 6 + 1] = ""; - if (esc_status.esc_count > 0) { - // Check if one or more the ESCs are offline - char esc_fail_msg[50]; - esc_fail_msg[0] = '\0'; + for (int esc_index = 0; esc_index < esc_status_s::CONNECTED_ESC_MAX; esc_index++) { + if (!math::isInRange(esc_status.esc[esc_index].actuator_function, + esc_report_s::ACTUATOR_FUNCTION_MOTOR1, esc_report_s::ACTUATOR_FUNCTION_MOTOR_MAX)) { + continue; // Skip unmapped ESC status entries + } - for (int i = 0; i < esc_status_s::CONNECTED_ESC_MAX; ++i) { - const bool mapped = math::isInRange(esc_status.esc[i].actuator_function, actuator_motors_s::ACTUATOR_FUNCTION_MOTOR1, - uint8_t(actuator_motors_s::ACTUATOR_FUNCTION_MOTOR1 + actuator_motors_s::NUM_CONTROLS - 1)); - const bool offline = (esc_status.esc_online_flags & (1 << i)) == 0; + const bool timeout = now > esc_status.esc[esc_index].timestamp + ESC_TIMEOUT_US; + const bool is_offline = (esc_status.esc_online_flags & (1 << esc_index)) == 0; - if (mapped && offline) { - /* EVENT - * @description - * - * This check can be configured via COM_ARM_CHK_ESCS parameter. - * - */ - reporter.healthFailure(required_modes, health_component_t::motors_escs, events::ID("check_escs_offline"), - events::Log::Critical, "ESC {1} offline", i + 1); - snprintf(esc_fail_msg + strlen(esc_fail_msg), sizeof(esc_fail_msg) - strlen(esc_fail_msg), "ESC%d ", i + 1); - esc_fail_msg[sizeof(esc_fail_msg) - 1] = '\0'; + // Set failure bits for this motor + if (timeout || is_offline) { + mask |= (1u << esc_index); + + uint8_t esc_nr = esc_index + 1; + /* EVENT + * @description + * + * This check can be configured via COM_ARM_CHK_ESCS parameter. + * + */ + reporter.healthFailure(NavModes::All, health_component_t::motors_escs, events::ID("check_escs_offline"), + events::Log::Critical, "ESC {1} offline", esc_nr); + snprintf(esc_fail_msg + strlen(esc_fail_msg), sizeof(esc_fail_msg) - strlen(esc_fail_msg), "ESC%d ", esc_nr); + esc_fail_msg[sizeof(esc_fail_msg) - 1] = '\0'; + } + } + + if (reporter.mavlink_log_pub() && esc_fail_msg[0] != '\0') { + mavlink_log_critical(reporter.mavlink_log_pub(), "%soffline. %s\t", esc_fail_msg, context.isArmed() ? "Land now!" : ""); + } + + return mask; +} + +uint16_t EscChecks::checkEscStatus(const Context &context, Report &reporter, const esc_status_s &esc_status) +{ + uint16_t mask = 0; + + for (int esc_index = 0; esc_index < esc_status_s::CONNECTED_ESC_MAX; esc_index++) { + if (!math::isInRange(esc_status.esc[esc_index].actuator_function, + esc_report_s::ACTUATOR_FUNCTION_MOTOR1, esc_report_s::ACTUATOR_FUNCTION_MOTOR_MAX)) { + continue; // Skip unmapped ESC status entries + } + + const uint8_t actuator_function_index = esc_status.esc[esc_index].actuator_function - esc_report_s::ACTUATOR_FUNCTION_MOTOR1; + + if (esc_status.esc[esc_index].failures == 0) { + continue; + + } else { + mask |= (1u << actuator_function_index); // Set bit in mask + } + + for (uint8_t fault_index = 0; fault_index <= static_cast(esc_fault_reason_t::_max); fault_index++) { + if (!(esc_status.esc[esc_index].failures & (1 << fault_index))) { + continue; } - } - if ((esc_fail_msg[0] != '\0') && reporter.mavlink_log_pub()) { - mavlink_log_critical(reporter.mavlink_log_pub(), "%soffline. %s\t", esc_fail_msg, context.isArmed() ? "Land now!" : ""); - } + esc_fault_reason_t fault_reason_index = static_cast(fault_index); + const char *user_action = ""; + events::px4::enums::suggested_action_t action = events::px4::enums::suggested_action_t::none; - for (int index = 0; index < esc_status_s::CONNECTED_ESC_MAX; ++index) { + if (context.isArmed()) { + if (fault_reason_index == esc_fault_reason_t::motor_warn_temp + || fault_reason_index == esc_fault_reason_t::esc_warn_temp + || fault_reason_index == esc_fault_reason_t::over_rpm) { + user_action = "Reduce throttle"; + action = events::px4::enums::suggested_action_t::reduce_throttle; - if (esc_status.esc[index].failures != 0) { - - for (uint8_t fault_index = 0; fault_index <= static_cast(esc_fault_reason_t::_max); fault_index++) { - if (esc_status.esc[index].failures & (1 << fault_index)) { - - esc_fault_reason_t fault_reason_index = static_cast(fault_index); - - const char *user_action = ""; - events::px4::enums::suggested_action_t action = events::px4::enums::suggested_action_t::none; - - if (context.isArmed()) { - if (fault_reason_index == esc_fault_reason_t::motor_warn_temp - || fault_reason_index == esc_fault_reason_t::esc_warn_temp) { - user_action = "Reduce throttle"; - action = events::px4::enums::suggested_action_t::reduce_throttle; - - } else { - user_action = "Land now!"; - action = events::px4::enums::suggested_action_t::land; - } - } - - uint8_t motor_index = esc_status.esc[index].actuator_function - actuator_motors_s::ACTUATOR_FUNCTION_MOTOR1 + 1; - - /* EVENT - * @description - * {3} - * - * - * This check can be configured via COM_ARM_CHK_ESCS parameter. - * - */ - reporter.healthFailure( - required_modes, health_component_t::motors_escs, events::ID("check_escs_fault"), - events::Log::Critical, "ESC {1}: {2}", motor_index, fault_reason_index, action); - - if (reporter.mavlink_log_pub()) { - mavlink_log_emergency(reporter.mavlink_log_pub(), "ESC%d: %s. %s \t", motor_index, - esc_fault_reason_str(fault_reason_index), user_action); - } - } + } else { + user_action = "Land now!"; + action = events::px4::enums::suggested_action_t::land; } } + + /* EVENT + * @description + * {3} + * + * + * This check can be configured via COM_ARM_CHK_ESCS parameter. + * + */ + reporter.healthFailure( + NavModes::All, health_component_t::motors_escs, events::ID("check_failure_detector_arm_esc"), + events::Log::Critical, "ESC {1}: {2}", esc_index + 1, fault_reason_index, action); + + if (reporter.mavlink_log_pub()) { + mavlink_log_emergency(reporter.mavlink_log_pub(), "ESC%d: %s. %s \t", esc_index + 1, + esc_fault_reason_str(fault_reason_index), user_action); + } } } + + return mask; +} + +uint16_t EscChecks::checkMotorStatus(const Context &context, Report &reporter, const esc_status_s &esc_status, hrt_abstime now) +{ + uint16_t mask = 0; + + // Only check while armed + if (context.status().arming_state == vehicle_status_s::ARMING_STATE_ARMED) { + actuator_motors_s actuator_motors{}; + _actuator_motors_sub.copy(&actuator_motors); + + // Check individual ESC reports + for (uint8_t i = 0; i < esc_status_s::CONNECTED_ESC_MAX; i++) { + if (!math::isInRange(esc_status.esc[i].actuator_function, + esc_report_s::ACTUATOR_FUNCTION_MOTOR1, esc_report_s::ACTUATOR_FUNCTION_MOTOR_MAX)) { + continue; // Skip unmapped ESC status entries + } + + const uint8_t actuator_function_index = esc_status.esc[i].actuator_function - esc_report_s::ACTUATOR_FUNCTION_MOTOR1; + const float current = esc_status.esc[i].esc_current; + + // First wait for ESC telemetry reporting non-zero current. Before that happens, don't check it. + if (current > FLT_EPSILON) { + _esc_has_reported_current[i] = true; + } + + if (!_esc_has_reported_current[i]) { + continue; + } + + // Current limits + float thrust = 0.f; + + if (PX4_ISFINITE(actuator_motors.control[actuator_function_index])) { + // Normalized motor thrust commands before thrust model factor is applied, NAN means motor is turned off -> 0 thrust + thrust = fabsf(actuator_motors.control[actuator_function_index]); + } + + bool current_too_low = current < (thrust * _param_motfail_c2t.get()) - _param_motfail_low_off.get(); + bool current_too_high = current > (thrust * _param_motfail_c2t.get()) + _param_motfail_high_off.get(); + + _esc_undercurrent_hysteresis[i].set_hysteresis_time_from(false, _param_motfail_time.get() * 1_s); + _esc_overcurrent_hysteresis[i].set_hysteresis_time_from(false, _param_motfail_time.get() * 1_s); + + if (!_esc_undercurrent_hysteresis[i].get_state()) { + // Only set, never clear mid-air: stopping the motor in response could make it appear healthy again + _esc_undercurrent_hysteresis[i].set_state_and_update(current_too_low, now); + } + + if (!_esc_overcurrent_hysteresis[i].get_state()) { + // Only set, never clear mid-air: stopping the motor in response could make it appear healthy again + _esc_overcurrent_hysteresis[i].set_state_and_update(current_too_high, now); + } + + mask |= (static_cast(_esc_undercurrent_hysteresis[i].get_state()) << actuator_function_index); + mask |= (static_cast(_esc_overcurrent_hysteresis[i].get_state()) << actuator_function_index); + + if (_esc_undercurrent_hysteresis[i].get_state()) { + /* EVENT + * @description + * + * This check can be configured via FD_ACT_EN parameter. + * + */ + reporter.healthFailure(NavModes::All, health_component_t::motors_escs, + events::ID("check_motor_undercurrent"), + events::Log::Critical, "Motor {1} undercurrent detected", actuator_function_index + 1); + + if (reporter.mavlink_log_pub()) { + mavlink_log_critical(reporter.mavlink_log_pub(), "Motor failure: Motor %d undercurrent detected", + actuator_function_index + 1); + } + } + + if (_esc_overcurrent_hysteresis[i].get_state()) { + /* EVENT + * @description + * + * This check can be configured via FD_ACT_EN parameter. + * + */ + reporter.healthFailure(NavModes::All, health_component_t::motors_escs, + events::ID("check_motor_overcurrent"), + events::Log::Critical, "Motor {1} overcurrent detected", actuator_function_index + 1); + + if (reporter.mavlink_log_pub()) { + mavlink_log_critical(reporter.mavlink_log_pub(), "Motor failure: Motor %d overcurrent detected", + actuator_function_index + 1); + } + } + } + + } else { // Disarmed + for (uint8_t i = 0; i < esc_status_s::CONNECTED_ESC_MAX; ++i) { + _esc_undercurrent_hysteresis[i].set_state_and_update(false, now); + _esc_overcurrent_hysteresis[i].set_state_and_update(false, now); + } + } + + return mask; +} + +void EscChecks::updateEscsStatus(const Context &context, Report &reporter, const esc_status_s &esc_status, hrt_abstime now) +{ + if (context.status().arming_state == vehicle_status_s::ARMING_STATE_ARMED) { + const int limited_esc_count = math::min(esc_status.esc_count, esc_status_s::CONNECTED_ESC_MAX); + const int all_escs_armed_mask = (1 << limited_esc_count) - 1; + const bool is_all_escs_armed = (all_escs_armed_mask == esc_status.esc_armed_flags); + + _esc_arm_hysteresis.set_hysteresis_time_from(false, ESC_TIMEOUT_US); + _esc_arm_hysteresis.set_state_and_update(!is_all_escs_armed, now); + + if (_esc_arm_hysteresis.get_state()) { + /* EVENT + * @description + * + * This check can be configured via COM_ARM_CHK_ESCS parameter. + * + */ + reporter.healthFailure(NavModes::All, health_component_t::motors_escs, + events::ID("check_escs_not_all_armed"), + events::Log::Critical, "Not all ESCs are armed"); + + if (reporter.mavlink_log_pub()) { + mavlink_log_critical(reporter.mavlink_log_pub(), "ESC failure: Not all ESCs are armed. Land now!"); + } + + reporter.failsafeFlags().fd_esc_arming_failure = true; + } + + } else { + // reset ESC bitfield + _esc_arm_hysteresis.set_state_and_update(false, now); + reporter.failsafeFlags().fd_esc_arming_failure = false; + } } diff --git a/src/modules/commander/HealthAndArmingChecks/checks/escCheck.hpp b/src/modules/commander/HealthAndArmingChecks/checks/escCheck.hpp index a96c147234..74f9a56d9d 100644 --- a/src/modules/commander/HealthAndArmingChecks/checks/escCheck.hpp +++ b/src/modules/commander/HealthAndArmingChecks/checks/escCheck.hpp @@ -35,8 +35,11 @@ #include "../Common.hpp" +#include #include +#include #include +#include class EscChecks : public HealthAndArmingCheckBase { @@ -46,14 +49,33 @@ public: void checkAndReport(const Context &context, Report &reporter) override; + uint16_t getMotorFailureMask() const { return _motor_failure_mask; } + bool getEscArmStatus() const { return _esc_arm_hysteresis.get_state(); } + private: - void checkEscStatus(const Context &context, Report &reporter, const esc_status_s &esc_status); + uint16_t checkEscOnline(const Context &context, Report &reporter, const esc_status_s &esc_status, hrt_abstime now); + uint16_t checkEscStatus(const Context &context, Report &reporter, const esc_status_s &esc_status); + uint16_t checkMotorStatus(const Context &context, Report &reporter, const esc_status_s &esc_status, hrt_abstime now); + void updateEscsStatus(const Context &context, Report &reporter, const esc_status_s &esc_status, hrt_abstime now); + + static constexpr hrt_abstime ESC_TIMEOUT_US = 300_ms; uORB::Subscription _esc_status_sub{ORB_ID(esc_status)}; + uORB::Subscription _actuator_motors_sub{ORB_ID(actuator_motors)}; const hrt_abstime _start_time{hrt_absolute_time()}; + uint16_t _motor_failure_mask = 0; + bool _esc_has_reported_current[esc_status_s::CONNECTED_ESC_MAX] {}; + systemlib::Hysteresis _esc_undercurrent_hysteresis[esc_status_s::CONNECTED_ESC_MAX]; + systemlib::Hysteresis _esc_overcurrent_hysteresis[esc_status_s::CONNECTED_ESC_MAX]; + systemlib::Hysteresis _esc_arm_hysteresis; + DEFINE_PARAMETERS_CUSTOM_PARENT(HealthAndArmingCheckBase, - (ParamBool) _param_com_arm_chk_escs - ) + (ParamBool) _param_com_arm_chk_escs, + (ParamBool) _param_fd_act_en, + (ParamFloat) _param_motfail_c2t, + (ParamFloat) _param_motfail_time, + (ParamFloat) _param_motfail_low_off, + (ParamFloat) _param_motfail_high_off); }; diff --git a/src/modules/commander/HealthAndArmingChecks/checks/estimatorCheck.cpp b/src/modules/commander/HealthAndArmingChecks/checks/estimatorCheck.cpp index 010cbacf7f..eb545ad2ce 100644 --- a/src/modules/commander/HealthAndArmingChecks/checks/estimatorCheck.cpp +++ b/src/modules/commander/HealthAndArmingChecks/checks/estimatorCheck.cpp @@ -136,15 +136,23 @@ void EstimatorChecks::checkAndReport(const Context &context, Report &reporter) void EstimatorChecks::checkEstimatorStatus(const Context &context, Report &reporter, const estimator_status_s &estimator_status, NavModes required_groups) { + // Heading is required to arm for all modes that need any form of local position, plus FW AUTO_TAKEOFF + const NavModes heading_required_groups = (NavModes)( + reporter.failsafeFlags().mode_req_local_position | + reporter.failsafeFlags().mode_req_local_position_relaxed | + (1u << vehicle_status_s::NAVIGATION_STATE_AUTO_TAKEOFF)); + if (!context.isArmed() && estimator_status.pre_flt_fail_innov_heading) { /* EVENT + * @description + * Recalibrate compass or perform manual heading reset. */ - reporter.armingCheckFailure(required_groups, health_component_t::local_position_estimate, + reporter.armingCheckFailure(heading_required_groups, health_component_t::local_position_estimate, events::ID("check_estimator_heading_not_stable"), - events::Log::Error, "Heading estimate not stable"); + events::Log::Error, "Heading estimate invalid"); if (reporter.mavlink_log_pub()) { - mavlink_log_critical(reporter.mavlink_log_pub(), "Preflight Fail: heading estimate not stable"); + mavlink_log_critical(reporter.mavlink_log_pub(), "Preflight Fail: heading estimate invalid"); } } else if (!context.isArmed() && estimator_status.pre_flt_fail_innov_vel_horiz) { @@ -627,10 +635,10 @@ void EstimatorChecks::checkGps(const Context &context, Report &reporter, const s */ reporter.armingCheckFailure(NavModes::None, health_component_t::gps, events::ID("check_estimator_gps_jamming_critical"), - events::Log::Critical, "GPS jamming detected"); + events::Log::Warning, "GPS jamming detected"); if (reporter.mavlink_log_pub()) { - mavlink_log_critical(reporter.mavlink_log_pub(), "GPS jamming detected\t"); + mavlink_log_warning(reporter.mavlink_log_pub(), "GPS jamming detected\t"); } } } @@ -695,7 +703,7 @@ void EstimatorChecks::setModeRequirementFlags(const Context &context, bool pre_f bool v_xy_valid = lpos.v_xy_valid; if (!context.isArmed()) { - if (pre_flt_fail_innov_heading || pre_flt_fail_innov_pos_horiz) { + if (pre_flt_fail_innov_pos_horiz) { xy_valid = false; } diff --git a/src/modules/commander/HealthAndArmingChecks/checks/failureDetectorCheck.cpp b/src/modules/commander/HealthAndArmingChecks/checks/failureDetectorCheck.cpp index fed77a0b41..6c273bd8cb 100644 --- a/src/modules/commander/HealthAndArmingChecks/checks/failureDetectorCheck.cpp +++ b/src/modules/commander/HealthAndArmingChecks/checks/failureDetectorCheck.cpp @@ -35,7 +35,13 @@ void FailureDetectorChecks::checkAndReport(const Context &context, Report &reporter) { - if (context.status().failure_detector_status & vehicle_status_s::FAILURE_ROLL) { + failure_detector_status_s fd_status; + + if (!_failure_detector_status_sub.copy(&fd_status)) { + return; + } + + if (fd_status.fd_roll) { /* EVENT * @description * The vehicle exceeded the maximum configured roll angle. @@ -51,7 +57,7 @@ void FailureDetectorChecks::checkAndReport(const Context &context, Report &repor mavlink_log_critical(reporter.mavlink_log_pub(), "Preflight Fail: Attitude failure (roll)"); } - } else if (context.status().failure_detector_status & vehicle_status_s::FAILURE_PITCH) { + } else if (fd_status.fd_pitch) { /* EVENT * @description * The vehicle exceeded the maximum configured pitch angle. @@ -68,7 +74,7 @@ void FailureDetectorChecks::checkAndReport(const Context &context, Report &repor } } - if (context.status().failure_detector_status & vehicle_status_s::FAILURE_ALT) { + if (fd_status.fd_alt) { /* EVENT */ reporter.armingCheckFailure(NavModes::All, health_component_t::system, events::ID("check_failure_detector_alt"), @@ -79,7 +85,7 @@ void FailureDetectorChecks::checkAndReport(const Context &context, Report &repor } } - if (context.status().failure_detector_status & vehicle_status_s::FAILURE_EXT) { + if (fd_status.fd_ext) { /* EVENT * @description * @@ -94,33 +100,10 @@ void FailureDetectorChecks::checkAndReport(const Context &context, Report &repor } } - reporter.failsafeFlags().fd_critical_failure = context.status().failure_detector_status & - (vehicle_status_s::FAILURE_ROLL | vehicle_status_s::FAILURE_PITCH | vehicle_status_s::FAILURE_ALT | - vehicle_status_s::FAILURE_EXT); + reporter.failsafeFlags().fd_critical_failure = fd_status.fd_roll || fd_status.fd_pitch || fd_status.fd_ext; + reporter.failsafeFlags().fd_alt_loss = fd_status.fd_alt; - - reporter.failsafeFlags().fd_esc_arming_failure = context.status().failure_detector_status & - vehicle_status_s::FAILURE_ARM_ESC; - - if (reporter.failsafeFlags().fd_esc_arming_failure) { - /* EVENT - * @description - * One or more ESCs failed to arm. - * - * - * This check can be configured via FD_ESCS_EN parameter. - * - */ - reporter.healthFailure(NavModes::All, health_component_t::motors_escs, events::ID("check_failure_detector_arm_esc"), - events::Log::Critical, "ESC failure"); - - if (reporter.mavlink_log_pub()) { - mavlink_log_critical(reporter.mavlink_log_pub(), "Preflight Fail: ESC failure detected"); - } - } - - reporter.failsafeFlags().fd_imbalanced_prop = context.status().failure_detector_status & - vehicle_status_s::FAILURE_IMBALANCED_PROP; + reporter.failsafeFlags().fd_imbalanced_prop = fd_status.fd_imbalanced_prop; if (reporter.failsafeFlags().fd_imbalanced_prop) { /* EVENT @@ -128,7 +111,7 @@ void FailureDetectorChecks::checkAndReport(const Context &context, Report &repor * Check that all propellers are mounted correctly and are not damaged. * * - * This check can be configured via FD_IMB_PROP_THR and COM_IMB_PROP_ACT parameters. + * This check can be configured via FD_IMB_PROP_THR parameter. * */ reporter.healthFailure(NavModes::All, health_component_t::system, events::ID("check_failure_detector_imbalanced_prop"), @@ -138,22 +121,4 @@ void FailureDetectorChecks::checkAndReport(const Context &context, Report &repor mavlink_log_critical(reporter.mavlink_log_pub(), "Preflight Fail: Imbalanced propeller detected"); } } - - reporter.failsafeFlags().fd_motor_failure = context.status().failure_detector_status & vehicle_status_s::FAILURE_MOTOR; - - if (reporter.failsafeFlags().fd_motor_failure) { - /* EVENT - * @description - * - * This check can be configured via FD_ACT_EN parameter. - * - */ - reporter.healthFailure(NavModes::All, health_component_t::motors_escs, events::ID("check_failure_detector_motor"), - events::Log::Critical, "Motor failure detected"); - - if (reporter.mavlink_log_pub()) { - mavlink_log_critical(reporter.mavlink_log_pub(), "Preflight Fail: Motor failure detected"); - } - } - } diff --git a/src/modules/commander/HealthAndArmingChecks/checks/failureDetectorCheck.hpp b/src/modules/commander/HealthAndArmingChecks/checks/failureDetectorCheck.hpp index ebad706c37..7be96f7267 100644 --- a/src/modules/commander/HealthAndArmingChecks/checks/failureDetectorCheck.hpp +++ b/src/modules/commander/HealthAndArmingChecks/checks/failureDetectorCheck.hpp @@ -35,6 +35,8 @@ #include "../Common.hpp" +#include +#include class FailureDetectorChecks : public HealthAndArmingCheckBase { @@ -45,4 +47,5 @@ public: void checkAndReport(const Context &context, Report &reporter) override; private: + uORB::Subscription _failure_detector_status_sub{ORB_ID(failure_detector_status)}; }; diff --git a/src/modules/commander/HealthAndArmingChecks/checks/flightTimeCheck.cpp b/src/modules/commander/HealthAndArmingChecks/checks/flightTimeCheck.cpp index adb8a02d7e..32aea019eb 100644 --- a/src/modules/commander/HealthAndArmingChecks/checks/flightTimeCheck.cpp +++ b/src/modules/commander/HealthAndArmingChecks/checks/flightTimeCheck.cpp @@ -80,9 +80,9 @@ void FlightTimeChecks::checkAndReport(const Context &context, Report &reporter) } /* EVENT - * @description - * Maximal flight time warning (less than 1min remaining) - */ + * @description + * Maximal flight time warning (less than 1min remaining) + */ events::send(events::ID("commander_max_flight_time_warning_seconds"), events::Log::Warning, "Approaching max flight time (system will RTL in {1} seconds)", floored_remaining_flight_time_sec); @@ -97,9 +97,9 @@ void FlightTimeChecks::checkAndReport(const Context &context, Report &reporter) } /* EVENT - * @description - * Maximal flight time warning (more than 1min remaining) - */ + * @description + * Maximal flight time warning (more than 1min remaining) + */ events::send(events::ID("commander_max_flight_time_warning_minutes"), events::Log::Warning, "Approaching max flight time (system will RTL in {1} minutes)", floored_remaining_flight_time_min); } diff --git a/src/modules/commander/HealthAndArmingChecks/checks/geofenceCheck.cpp b/src/modules/commander/HealthAndArmingChecks/checks/geofenceCheck.cpp index ceb8458721..f3c34097ee 100644 --- a/src/modules/commander/HealthAndArmingChecks/checks/geofenceCheck.cpp +++ b/src/modules/commander/HealthAndArmingChecks/checks/geofenceCheck.cpp @@ -51,11 +51,11 @@ void GeofenceChecks::checkAndReport(const Context &context, Report &reporter) if (geofence_result.geofence_max_dist_triggered) { /* EVENT - * @description - * - * This check can be configured via GF_ACTION and GF_MAX_HOR_DIST parameters. - * - */ + * @description + * + * This check can be configured via GF_ACTION and GF_MAX_HOR_DIST parameters. + * + */ reporter.armingCheckFailure(NavModes::All, health_component_t::system, events::ID("check_gf_violation_max_hor_dist"), events::Log::Error, "Geofence violation: exceeding maximum distance to Home"); @@ -67,11 +67,11 @@ void GeofenceChecks::checkAndReport(const Context &context, Report &reporter) if (geofence_result.geofence_max_alt_triggered) { /* EVENT - * @description - * - * This check can be configured via GF_ACTION and GF_MAX_VER_DIST parameters. - * - */ + * @description + * + * This check can be configured via GF_ACTION and GF_MAX_VER_DIST parameters. + * + */ reporter.armingCheckFailure(NavModes::All, health_component_t::system, events::ID("check_gf_violation_max_alt"), events::Log::Error, "Geofence violation: exceeding maximum altitude above Home"); @@ -83,11 +83,11 @@ void GeofenceChecks::checkAndReport(const Context &context, Report &reporter) if (geofence_result.geofence_custom_fence_triggered) { /* EVENT - * @description - * - * This check can be configured via GF_ACTION parameter. - * - */ + * @description + * + * This check can be configured via GF_ACTION parameter. + * + */ reporter.armingCheckFailure(NavModes::All, health_component_t::system, events::ID("check_gf_violation_custom_gf"), events::Log::Error, "Geofence violation: approaching or outside geofence"); diff --git a/src/modules/commander/HealthAndArmingChecks/checks/modeCheck.cpp b/src/modules/commander/HealthAndArmingChecks/checks/modeCheck.cpp index d13a4a19ae..f5f8a05eeb 100644 --- a/src/modules/commander/HealthAndArmingChecks/checks/modeCheck.cpp +++ b/src/modules/commander/HealthAndArmingChecks/checks/modeCheck.cpp @@ -141,17 +141,6 @@ void ModeChecks::checkAndReport(const Context &context, Report &reporter) reporter.clearCanRunBits((NavModes)reporter.failsafeFlags().mode_req_mission); } - if (reporter.failsafeFlags().offboard_control_signal_lost && reporter.failsafeFlags().mode_req_offboard_signal != 0) { - /* EVENT - * @description - * The offboard component is not sending setpoints or the required estimate (e.g. position) is missing. - */ - reporter.armingCheckFailure((NavModes)reporter.failsafeFlags().mode_req_offboard_signal, health_component_t::system, - events::ID("check_modes_offboard_signal"), - events::Log::Error, "No offboard signal"); - reporter.clearCanRunBits((NavModes)reporter.failsafeFlags().mode_req_offboard_signal); - } - if (reporter.failsafeFlags().home_position_invalid && reporter.failsafeFlags().mode_req_home_position != 0) { /* EVENT */ diff --git a/src/modules/commander/HealthAndArmingChecks/checks/offboardCheck.cpp b/src/modules/commander/HealthAndArmingChecks/checks/offboardCheck.cpp index 331b12b272..9e0d9985f7 100644 --- a/src/modules/commander/HealthAndArmingChecks/checks/offboardCheck.cpp +++ b/src/modules/commander/HealthAndArmingChecks/checks/offboardCheck.cpp @@ -40,6 +40,9 @@ void OffboardChecks::checkAndReport(const Context &context, Report &reporter) reporter.failsafeFlags().offboard_control_signal_lost = true; offboard_control_mode_s offboard_control_mode; + const NavModes affected_modes = (NavModes)reporter.failsafeFlags().mode_req_offboard_signal; + const bool has_affected_modes = affected_modes != NavModes::None; + bool has_specific_reason = false; if (_offboard_control_mode_sub.copy(&offboard_control_mode)) { @@ -52,16 +55,63 @@ void OffboardChecks::checkAndReport(const Context &context, Report &reporter) if (offboard_control_mode.position && reporter.failsafeFlags().local_position_invalid) { offboard_available = false; + has_specific_reason = true; + + if (has_affected_modes) { + /* EVENT + * @description + * Offboard position control requires a valid local position estimate. + */ + reporter.armingCheckFailure(affected_modes, health_component_t::system, + events::ID("check_modes_offboard_no_local_position"), + events::Log::Error, "Offboard requires local position"); + reporter.clearCanRunBits(affected_modes); + } } else if (offboard_control_mode.velocity && reporter.failsafeFlags().local_velocity_invalid) { offboard_available = false; + has_specific_reason = true; - } else if (offboard_control_mode.acceleration && reporter.failsafeFlags().attitude_invalid) { - // OFFBOARD acceleration handled by position controller + if (has_affected_modes) { + /* EVENT + * @description + * Offboard velocity control requires a valid local velocity estimate. + */ + reporter.armingCheckFailure(affected_modes, health_component_t::system, + events::ID("check_modes_offboard_no_local_velocity"), + events::Log::Error, "Offboard requires local velocity"); + reporter.clearCanRunBits(affected_modes); + } + + } else if ((offboard_control_mode.acceleration || offboard_control_mode.attitude) + && reporter.failsafeFlags().attitude_invalid) { offboard_available = false; + has_specific_reason = true; + + if (has_affected_modes) { + /* EVENT + * @description + * Offboard acceleration and attitude control require a valid attitude estimate. + */ + reporter.armingCheckFailure(affected_modes, health_component_t::system, + events::ID("check_modes_offboard_no_attitude"), + events::Log::Error, "Offboard requires attitude estimate"); + reporter.clearCanRunBits(affected_modes); + } } // This is a mode requirement, no need to report reporter.failsafeFlags().offboard_control_signal_lost = !offboard_available; } + + if (reporter.failsafeFlags().offboard_control_signal_lost && !has_specific_reason && has_affected_modes) { + /* EVENT + * @description + * The offboard component is not sending recent setpoints. + */ + reporter.armingCheckFailure(affected_modes, health_component_t::system, + events::ID("check_modes_offboard_signal_lost"), + events::Log::Error, "No offboard signal"); + reporter.clearCanRunBits(affected_modes); + } } diff --git a/src/modules/commander/HealthAndArmingChecks/checks/openDroneIDCheck.cpp b/src/modules/commander/HealthAndArmingChecks/checks/openDroneIDCheck.cpp index bb4847a2c5..5a847d40ec 100644 --- a/src/modules/commander/HealthAndArmingChecks/checks/openDroneIDCheck.cpp +++ b/src/modules/commander/HealthAndArmingChecks/checks/openDroneIDCheck.cpp @@ -36,17 +36,17 @@ void OpenDroneIDChecks::checkAndReport(const Context &context, Report &reporter) { - // Check to see if the check has been disabled + reporter.failsafeFlags().remote_id_unhealthy = + !context.status().open_drone_id_system_present || + !context.status().open_drone_id_system_healthy; + if (!_param_com_arm_odid.get()) { return; } - NavModes affected_modes{NavModes::None}; - - if (_param_com_arm_odid.get() == 2) { - // disallow arming without the Open Drone ID system - affected_modes = NavModes::All; - } + const bool is_error = _param_com_arm_odid.get() >= 2; + const NavModes affected_modes = is_error ? NavModes::All : NavModes::None; + const events::Log log_level = is_error ? events::Log::Error : events::Log::Warning; if (!context.status().open_drone_id_system_present) { /* EVENT @@ -57,9 +57,9 @@ void OpenDroneIDChecks::checkAndReport(const Context &context, Report &reporter) * This check can be configured via COM_ARM_ODID parameter. * */ - reporter.armingCheckFailure(affected_modes, health_component_t::open_drone_id, - events::ID("check_open_drone_id_missing"), - events::Log::Error, "Open Drone ID system missing"); + reporter.healthFailure(affected_modes, health_component_t::open_drone_id, + events::ID("check_open_drone_id_missing"), + log_level, "Open Drone ID system missing"); if (reporter.mavlink_log_pub()) { mavlink_log_critical(reporter.mavlink_log_pub(), "Preflight Fail: Open Drone ID system missing"); @@ -74,9 +74,9 @@ void OpenDroneIDChecks::checkAndReport(const Context &context, Report &reporter) * This check can be configured via COM_ARM_ODID parameter. * */ - reporter.armingCheckFailure(affected_modes, health_component_t::open_drone_id, - events::ID("check_open_drone_id_unhealthy"), - events::Log::Error, "Open Drone ID system not ready"); + reporter.healthFailure(affected_modes, health_component_t::open_drone_id, + events::ID("check_open_drone_id_unhealthy"), + log_level, "Open Drone ID system not ready"); if (reporter.mavlink_log_pub()) { mavlink_log_critical(reporter.mavlink_log_pub(), "Preflight Fail: Open Drone ID system not ready"); diff --git a/src/modules/commander/HealthAndArmingChecks/checks/parachuteCheck.cpp b/src/modules/commander/HealthAndArmingChecks/checks/parachuteCheck.cpp index ce0c2f538f..a3abb2f3fa 100644 --- a/src/modules/commander/HealthAndArmingChecks/checks/parachuteCheck.cpp +++ b/src/modules/commander/HealthAndArmingChecks/checks/parachuteCheck.cpp @@ -42,13 +42,17 @@ void ParachuteChecks::checkAndReport(const Context &context, Report &reporter) return; } + reporter.failsafeFlags().parachute_unhealthy = + !context.status().parachute_system_present || + !context.status().parachute_system_healthy; + if (!context.status().parachute_system_present) { /* EVENT * @description - * Parachute system failed to report. Make sure it it setup and installed properly. + * No MAVLink parachute heartbeat detected. Check connection, power, configuration. * * - * This check can be configured via COM_PARACHUTE parameter. + * Enabled by COM_PARACHUTE * */ reporter.healthFailure(NavModes::All, health_component_t::parachute, events::ID("check_parachute_missing"), @@ -62,10 +66,10 @@ void ParachuteChecks::checkAndReport(const Context &context, Report &reporter) /* EVENT * @description - * Parachute system reported being unhealth. + * MAVLink parachute system reports unhealthy status. * * - * This check can be configured via COM_PARACHUTE parameter. + * Enabled by COM_PARACHUTE * */ reporter.healthFailure(NavModes::All, health_component_t::parachute, events::ID("check_parachute_unhealthy"), diff --git a/boards/xc-fly/xc-slim/src/mtd.cpp b/src/modules/commander/HealthAndArmingChecks/checks/rallyPointCheck.cpp similarity index 58% rename from boards/xc-fly/xc-slim/src/mtd.cpp rename to src/modules/commander/HealthAndArmingChecks/checks/rallyPointCheck.cpp index e89e53e03b..09c68738d1 100644 --- a/boards/xc-fly/xc-slim/src/mtd.cpp +++ b/src/modules/commander/HealthAndArmingChecks/checks/rallyPointCheck.cpp @@ -1,6 +1,6 @@ /**************************************************************************** * - * Copyright (C) 2020 PX4 Development Team. All rights reserved. + * Copyright (c) 2026 PX4 Development Team. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -10,8 +10,7 @@ * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. + * the distribution. * 3. Neither the name PX4 nor the names of its contributors may be * used to endorse or promote products derived from this software * without specific prior written permission. @@ -30,49 +29,40 @@ * POSSIBILITY OF SUCH DAMAGE. * ****************************************************************************/ -//TODO:Prepare for NxtDual -#include -#include -// KiB BS nB -static const px4_mft_device_t spi2 = { // FM25V02A on FMUM native: 32K X 8, emulated as (1024 Blocks of 32) - .bus_type = px4_mft_device_t::SPI, - .devid = SPIDEV_FLASH(2) // SPIDEV_FLASH(0) -}; +#include "rallyPointCheck.hpp" -static const px4_mtd_entry_t fmum_flash = { - .device = &spi2, - .npart = 1, - .partd = { - { - .type = MTD_PARAMETERS, - .path = "/fs/mtd_params", - .nblocks = 32 - - } - }, -}; - -static const px4_mtd_manifest_t board_mtd_config = { - .nconfigs = 1, - .entries = { - &fmum_flash - } -}; - -static const px4_mft_entry_s mtd_mft = { - .type = MTD, - .pmft = (void *) &board_mtd_config, -}; - -static const px4_mft_s mft = { - .nmft = 1, - .mfts = { - &mtd_mft - } -}; - -const px4_mft_s *board_get_manifest(void) +RallyPointChecks::RallyPointChecks() + : _param_rtl_type_handle(param_find("RTL_TYPE")) { - return &mft; +} + +void RallyPointChecks::checkAndReport(const Context &context, Report &reporter) +{ + int32_t rtl_type = 0; + + if (param_get(_param_rtl_type_handle, &rtl_type) != 0 || rtl_type != 5) { + // Only enforce rally point requirement when RTL_TYPE == 5 (safe points only) + return; + } + + rtl_status_s rtl_status; + + if (!_rtl_status_sub.copy(&rtl_status) || rtl_status.safe_point_index == UINT8_MAX) { + /* EVENT + * @description + * Upload at least one rally point before arming, or change RTL_TYPE. + * + * + * This check is active when RTL_TYPE is set to 5 (safe points only). + * + */ + reporter.armingCheckFailure(NavModes::All, health_component_t::system, + events::ID("check_rally_point_missing"), + events::Log::Error, "No rally point available"); + + if (reporter.mavlink_log_pub()) { + mavlink_log_critical(reporter.mavlink_log_pub(), "Preflight Fail: No rally point available\t"); + } + } } diff --git a/src/drivers/px4io/px4io_params.c b/src/modules/commander/HealthAndArmingChecks/checks/rallyPointCheck.hpp similarity index 76% rename from src/drivers/px4io/px4io_params.c rename to src/modules/commander/HealthAndArmingChecks/checks/rallyPointCheck.hpp index b390bdb18a..b36d6a7c2e 100644 --- a/src/drivers/px4io/px4io_params.c +++ b/src/modules/commander/HealthAndArmingChecks/checks/rallyPointCheck.hpp @@ -1,6 +1,6 @@ /**************************************************************************** * - * Copyright (c) 2015-2018 PX4 Development Team. All rights reserved. + * Copyright (c) 2026 PX4 Development Team. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -10,8 +10,7 @@ * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. + * the distribution. * 3. Neither the name PX4 nor the names of its contributors may be * used to endorse or promote products derived from this software * without specific prior written permission. @@ -31,23 +30,24 @@ * ****************************************************************************/ -/** - * @file px4io_params.c - * - * Parameters defined by the PX4IO driver - * - * @author Lorenz Meier - */ +#pragma once -#include +#include "../Common.hpp" + +#include +#include #include -/** - * S.BUS out - * - * Set to 1 to enable S.BUS version 1 output instead of RSSI. - * - * @boolean - * @group PWM Outputs - */ -PARAM_DEFINE_INT32(PWM_SBUS_MODE, 0); +class RallyPointChecks : public HealthAndArmingCheckBase +{ +public: + RallyPointChecks(); + ~RallyPointChecks() = default; + + void checkAndReport(const Context &context, Report &reporter) override; + +private: + uORB::Subscription _rtl_status_sub{ORB_ID(rtl_status)}; + + const param_t _param_rtl_type_handle; +}; diff --git a/src/modules/commander/HealthAndArmingChecks/checks/sdcardCheck.cpp b/src/modules/commander/HealthAndArmingChecks/checks/sdcardCheck.cpp index 89ba247ed2..695f87c5b2 100644 --- a/src/modules/commander/HealthAndArmingChecks/checks/sdcardCheck.cpp +++ b/src/modules/commander/HealthAndArmingChecks/checks/sdcardCheck.cpp @@ -46,41 +46,30 @@ void SdCardChecks::checkAndReport(const Context &context, Report &reporter) { #ifdef PX4_STORAGEDIR - if (_param_com_arm_sdcard.get() > 0) { +#ifndef CONFIG_BOARD_NO_SDCARD + struct statfs statfs_buf; - struct statfs statfs_buf; + if (!_sdcard_detected && statfs(PX4_STORAGEDIR, &statfs_buf) == 0) { + // on NuttX we get a data block count f_blocks and byte count per block f_bsize if an SD card is inserted + _sdcard_detected = (statfs_buf.f_blocks > 0) && (statfs_buf.f_bsize > 0); + } - if (!_sdcard_detected && statfs(PX4_STORAGEDIR, &statfs_buf) == 0) { - // on NuttX we get a data block count f_blocks and byte count per block f_bsize if an SD card is inserted - _sdcard_detected = (statfs_buf.f_blocks > 0) && (statfs_buf.f_bsize > 0); - } + if (!_sdcard_detected) { + /* EVENT + * @description + * Insert an SD Card to the autopilot and reboot the system. + */ + reporter.armingCheckFailure(NavModes::None, health_component_t::system, + events::ID("check_missing_fmu_sdcard"), + events::Log::Error, "Missing FMU SD Card"); - if (!_sdcard_detected) { - NavModes affected_modes{NavModes::None}; - - if (_param_com_arm_sdcard.get() == 2) { - // disallow arming without sd card - affected_modes = NavModes::All; - } - - /* EVENT - * @description - * Insert an SD Card to the autopilot and reboot the system. - * - * - * This check can be configured via COM_ARM_SDCARD parameter. - * - */ - reporter.armingCheckFailure(affected_modes, health_component_t::system, - events::ID("check_missing_fmu_sdcard"), - events::Log::Error, "Missing FMU SD Card"); - - if (reporter.mavlink_log_pub()) { - mavlink_log_critical(reporter.mavlink_log_pub(), "Preflight Fail: Missing FMU SD Card"); - } + if (reporter.mavlink_log_pub()) { + mavlink_log_critical(reporter.mavlink_log_pub(), "Preflight Fail: Missing FMU SD Card"); } } +#endif // CONFIG_BOARD_NO_SDCARD + #ifdef __PX4_NUTTX // Check for hardfault files @@ -126,6 +115,57 @@ void SdCardChecks::checkAndReport(const Context &context, Report &reporter) } } +#if CONFIG_MODULES_TASK_WATCHDOG + // Check for task watchdog dump files + + if (!_watchdog_checked_once && _param_com_arm_hardfault_check.get()) { + _watchdog_checked_once = true; + + DIR *wdp = opendir(PX4_STORAGEDIR "/task_watchdog"); + + if (wdp != nullptr) { + + struct dirent *wresult; + + while ((wresult = readdir(wdp)) && !_watchdog_file_present) { + + // Check for pattern wdg_*.log or load_*.log + const size_t len = strlen(wresult->d_name); + + if (len > 5 && strcmp(wresult->d_name + len - 4, ".log") == 0) { + if (strncmp("wdg_", wresult->d_name, 4) == 0 + || strncmp("load_", wresult->d_name, 5) == 0) { + _watchdog_file_present = true; + } + } + } + + closedir(wdp); + } + } + + if (_watchdog_file_present && _param_com_arm_hardfault_check.get()) { + /* EVENT + * @description + * The SD card contains task watchdog dump files from a previous task starvation event. + * + * + * Remove the files in the 'task_watchdog' directory on the SD card after analysis. + * + * This check can be configured via COM_ARM_HFLT_CHK parameter. + * + */ + reporter.healthFailure(NavModes::All, health_component_t::system, + events::ID("check_task_watchdog_present"), + events::Log::Error, "Task watchdog dumps present on SD card"); + + if (reporter.mavlink_log_pub()) { + mavlink_log_critical(reporter.mavlink_log_pub(), "Preflight Fail: Task watchdog dumps present on SD"); + } + } + +#endif /* CONFIG_MODULES_TASK_WATCHDOG */ + #endif /* __PX4_NUTTX */ #endif /* PX4_STORAGEDIR */ } diff --git a/src/modules/commander/HealthAndArmingChecks/checks/sdcardCheck.hpp b/src/modules/commander/HealthAndArmingChecks/checks/sdcardCheck.hpp index da02ee8292..96fe1e306e 100644 --- a/src/modules/commander/HealthAndArmingChecks/checks/sdcardCheck.hpp +++ b/src/modules/commander/HealthAndArmingChecks/checks/sdcardCheck.hpp @@ -45,16 +45,19 @@ public: private: #ifdef PX4_STORAGEDIR +#ifndef CONFIG_BOARD_NO_SDCARD bool _sdcard_detected {false}; +#endif // CONFIG_BOARD_NO_SDCARD #ifdef __PX4_NUTTX bool _hardfault_checked_once {false}; bool _hardfault_file_present {false}; + bool _watchdog_checked_once {false}; + bool _watchdog_file_present {false}; #endif -#endif +#endif // PX4_STORAGEDIR DEFINE_PARAMETERS_CUSTOM_PARENT(HealthAndArmingCheckBase, - (ParamInt) _param_com_arm_sdcard, (ParamBool) _param_com_arm_hardfault_check ) }; diff --git a/src/modules/commander/HealthAndArmingChecks/esc_check_params.yaml b/src/modules/commander/HealthAndArmingChecks/esc_check_params.yaml new file mode 100644 index 0000000000..a1170bc592 --- /dev/null +++ b/src/modules/commander/HealthAndArmingChecks/esc_check_params.yaml @@ -0,0 +1,62 @@ +module_name: HealthAndArmingChecks +parameters: +- group: Motor Failure + definitions: + FD_ACT_EN: + description: + short: Enable Actuator Failure check + long: |- + If enabled, the HealthAndArmingChecks will verify that for motors, a minimum amount of ESC current per throttle + level is being consumed. + Otherwise this indicates an motor failure. + This check only works for ESCs that report current consumption. + type: boolean + default: 0 + MOTFAIL_C2T: + description: + short: Motor Failure Current/Throttle Scale + long: |- + Determines the slope between expected steady state current and linearized, normalized thrust command. + E.g. FD_ACT_MOT_C2T A represents the expected steady state current at 100%. + FD_ACT_LOW_OFF and FD_ACT_HIGH_OFF offset the threshold from that slope. + type: float + default: 35.0 + min: 0.0 + max: 50.0 + unit: A/% + decimal: 2 + increment: 1 + MOTFAIL_LOW_OFF: + description: + short: Undercurrent motor failure limit offset + long: threshold = FD_ACT_MOT_C2T * thrust - FD_ACT_LOW_OFF + type: float + default: 10.0 + min: 0 + max: 30 + unit: A + decimal: 2 + increment: 1 + MOTFAIL_HIGH_OFF: + description: + short: Overcurrent motor failure limit offset + long: threshold = FD_ACT_MOT_C2T * thrust + FD_ACT_HIGH_OFF + type: float + default: 10.0 + min: 0 + max: 30 + unit: A + decimal: 2 + increment: 1 + MOTFAIL_TIME: + description: + short: Motor Failure Hysteresis Time + long: Motor failure only triggers after current thresholds are exceeded for + this time. + type: float + default: 1.0 + unit: s + min: 0.01 + max: 10 + decimal: 2 + increment: 1 diff --git a/src/modules/commander/ModeManagement.cpp b/src/modules/commander/ModeManagement.cpp index b7bd7cb21a..a3ad01d86e 100644 --- a/src/modules/commander/ModeManagement.cpp +++ b/src/modules/commander/ModeManagement.cpp @@ -295,6 +295,8 @@ void ModeManagement::checkNewRegistrations(UpdateRequest &update_request) mode.replaces_nav_state = request.replace_internal_mode; } + mode.request_offboard_setpoints = request.request_offboard_setpoints; + nav_mode_id = _modes.addExternalMode(mode); reply.mode_id = nav_mode_id; } @@ -671,4 +673,19 @@ void ModeManagement::getModeStatus(uint32_t &valid_nav_state_mask, uint32_t &can } } +bool ModeManagement::currentModeAcceptsOffboardSetpoints(uint8_t nav_state) const +{ + // OFFBOARD mode always accepts offboard setpoints + if (nav_state == vehicle_status_s::NAVIGATION_STATE_OFFBOARD) { + return true; + } + + // Check if it's an external mode that requests offboard setpoints + if (_modes.valid(nav_state)) { + return _modes.mode(nav_state).request_offboard_setpoints; + } + + return false; +} + #endif /* CONSTRAINED_FLASH */ diff --git a/src/modules/commander/ModeManagement.hpp b/src/modules/commander/ModeManagement.hpp index e65b340fa1..e20a1c6c47 100644 --- a/src/modules/commander/ModeManagement.hpp +++ b/src/modules/commander/ModeManagement.hpp @@ -105,6 +105,7 @@ public: bool unresponsive_reported{false}; int arming_check_registration_id{-1}; int mode_executor_registration_id{-1}; + bool request_offboard_setpoints{false}; config_overrides_s overrides{}; vehicle_control_mode_s config_control_setpoint{}; }; @@ -130,7 +131,7 @@ class ModeManagement : public ModeChangeHandler { public: ModeManagement(ExternalChecks &external_checks); - ~ModeManagement() = default; + virtual ~ModeManagement() = default; struct UpdateRequest { bool change_user_intended_nav_state{false}; @@ -169,6 +170,8 @@ public: void getModeStatus(uint32_t &valid_nav_state_mask, uint32_t &can_set_nav_state_mask) const; + bool currentModeAcceptsOffboardSetpoints(uint8_t nav_state) const; + void updateActiveConfigOverrides(uint8_t nav_state, config_overrides_s &overrides_in_out); private: @@ -202,7 +205,7 @@ class ModeManagement : public ModeChangeHandler { public: ModeManagement() = default; - ~ModeManagement() = default; + virtual ~ModeManagement() = default; struct UpdateRequest { bool change_user_intended_nav_state{false}; @@ -232,6 +235,11 @@ public: can_set_nav_state_mask = valid_nav_state_mask & ~(1u << vehicle_status_s::NAVIGATION_STATE_TERMINATION); } + bool currentModeAcceptsOffboardSetpoints(uint8_t nav_state) const + { + return nav_state == vehicle_status_s::NAVIGATION_STATE_OFFBOARD; + } + void updateActiveConfigOverrides(uint8_t nav_state, config_overrides_s &overrides_in_out) { } private: diff --git a/src/modules/commander/UserModeIntention.hpp b/src/modules/commander/UserModeIntention.hpp index e37bf467b1..fd563e5d49 100644 --- a/src/modules/commander/UserModeIntention.hpp +++ b/src/modules/commander/UserModeIntention.hpp @@ -44,6 +44,17 @@ enum class ModeChangeSource { class ModeChangeHandler { public: + ModeChangeHandler() = default; + virtual ~ModeChangeHandler() = default; + + /** + * Explicitly disable copying/moving + */ + ModeChangeHandler(const ModeChangeHandler &) = delete; + ModeChangeHandler &operator=(const ModeChangeHandler &) = delete; + ModeChangeHandler(ModeChangeHandler &&) = delete; + ModeChangeHandler &operator=(ModeChangeHandler &&) = delete; + virtual void onUserIntendedNavStateChange(ModeChangeSource source, uint8_t user_intended_nav_state) = 0; /** @@ -64,6 +75,12 @@ public: const HealthAndArmingChecks &health_and_arming_checks, ModeChangeHandler *handler); ~UserModeIntention() = default; + /** + * Explicitly disable copying/moving + */ + UserModeIntention(const UserModeIntention &) = delete; + UserModeIntention &operator=(const UserModeIntention &) = delete; + /** * Change the user intended mode * @param user_intended_nav_state new mode diff --git a/src/modules/commander/accelerometer_calibration.cpp b/src/modules/commander/accelerometer_calibration.cpp index 13990e01c9..d34dc29133 100644 --- a/src/modules/commander/accelerometer_calibration.cpp +++ b/src/modules/commander/accelerometer_calibration.cpp @@ -178,6 +178,10 @@ static calibrate_return read_accelerometer_avg(accel_worker_data_s *worker_data, /* use the first sensor to pace the readout, but do per-sensor counts */ while (counts[0] < samples_num) { + // Yield CPU — updatedBlocking() returns immediately when data is + // already available, so with high-rate sensors the loop never blocks. + px4_usleep(1000); + if (accel_sub[0].updatedBlocking(100000)) { for (unsigned accel_index = 0; accel_index < MAX_ACCEL_SENS; accel_index++) { sensor_accel_s arp; diff --git a/src/modules/commander/baro_calibration.cpp b/src/modules/commander/baro_calibration.cpp index ab5267d2d6..a9315c82b2 100644 --- a/src/modules/commander/baro_calibration.cpp +++ b/src/modules/commander/baro_calibration.cpp @@ -81,7 +81,6 @@ int do_baro_calibration(orb_advert_t *mavlink_log_pub) uint64_t timestamp_sample_sum[MAX_SENSOR_COUNT] {0}; float data_sum[MAX_SENSOR_COUNT] {}; - float temperature_sum[MAX_SENSOR_COUNT] {}; int data_sum_count[MAX_SENSOR_COUNT] {}; const hrt_abstime time_start_us = hrt_absolute_time(); @@ -99,7 +98,6 @@ int do_baro_calibration(orb_advert_t *mavlink_log_pub) timestamp_sample_sum[instance] += sensor_baro.timestamp_sample; data_sum[instance] += pressure_corrected; - temperature_sum[instance] += sensor_baro.temperature; data_sum_count[instance]++; } } @@ -145,9 +143,8 @@ int do_baro_calibration(orb_advert_t *mavlink_log_pub) if ((calibration[instance].device_id() != 0) && (data_sum_count[instance] > 0)) { const float pressure_pa = data_sum[instance] / data_sum_count[instance]; - const float temperature = temperature_sum[instance] / data_sum_count[instance]; - float pressure_altitude = getAltitudeFromPressure(pressure_pa, temperature); + float pressure_altitude = getAltitudeFromPressure(pressure_pa, kPressRefSeaLevelPa); // Use GPS altitude as a reference to compute the baro bias measurement const float baro_bias = pressure_altitude - gps_altitude; @@ -155,25 +152,25 @@ int do_baro_calibration(orb_advert_t *mavlink_log_pub) float altitude = pressure_altitude - baro_bias; // find pressure offset that aligns baro altitude with GPS via binary search - float front = -10000.f; - float middle = NAN; - float last = 10000.f; + float low = -10000.f; + float high = 10000.f; + static constexpr float kTolerance = 0.1f; + static constexpr int kMaxIterations = 100; float bias = NAN; - // perform a binary search - while (front <= last) { - middle = front + (last - front) / 2; - float altitude_calibrated = getAltitudeFromPressure(pressure_pa - middle, temperature); + for (int i = 0; i < kMaxIterations; ++i) { + float mid = low + (high - low) / 2.f; + float altitude_calibrated = getAltitudeFromPressure(pressure_pa - mid, kPressRefSeaLevelPa); - if (altitude_calibrated > altitude + 0.1f) { - last = middle; + if (altitude_calibrated > altitude + kTolerance) { + high = mid; - } else if (altitude_calibrated < altitude - 0.1f) { - front = middle; + } else if (altitude_calibrated < altitude - kTolerance) { + low = mid; } else { - bias = middle; + bias = mid; break; } } diff --git a/src/modules/commander/calibration_routines.cpp b/src/modules/commander/calibration_routines.cpp index 3c4d5ee2cb..9bedb92cad 100644 --- a/src/modules/commander/calibration_routines.cpp +++ b/src/modules/commander/calibration_routines.cpp @@ -90,6 +90,10 @@ enum detect_orientation_return detect_orientation(orb_advert_t *mavlink_log_pub, uORB::SubscriptionBlocking vehicle_acceleration_sub{ORB_ID(vehicle_acceleration)}; while (true) { + // Yield CPU — updateBlocking() returns immediately when data is + // already available, so with high-rate sensors the loop never blocks. + px4_usleep(1000); + vehicle_acceleration_s accel; if (vehicle_acceleration_sub.updateBlocking(accel, 100000)) { diff --git a/src/modules/commander/commander_params.c b/src/modules/commander/commander_params.c deleted file mode 100644 index ed762fd40c..0000000000 --- a/src/modules/commander/commander_params.c +++ /dev/null @@ -1,1056 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2013-2023 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file commander_params.c - * - * Parameters definition for Commander. - * - * @author Lorenz Meier - * @author Thomas Gubler - * @author Julian Oes - */ - -/** - * Roll trim - * - * The trim value is the actuator control value the system needs - * for straight and level flight. - * - * @group Radio Calibration - * @min -0.5 - * @max 0.5 - * @decimal 2 - * @increment 0.01 - */ -PARAM_DEFINE_FLOAT(TRIM_ROLL, 0.0f); - -/** - * Pitch trim - * - * The trim value is the actuator control value the system needs - * for straight and level flight. - * - * @group Radio Calibration - * @min -0.5 - * @max 0.5 - * @decimal 2 - * @increment 0.01 - */ -PARAM_DEFINE_FLOAT(TRIM_PITCH, 0.0f); - -/** - * Yaw trim - * - * The trim value is the actuator control value the system needs - * for straight and level flight. - * - * @group Radio Calibration - * @min -0.5 - * @max 0.5 - * @decimal 2 - * @increment 0.01 - */ -PARAM_DEFINE_FLOAT(TRIM_YAW, 0.0f); - -/** - * GCS connection loss time threshold - * - * After this amount of seconds without datalink, the GCS connection lost mode triggers - * - * @group Commander - * @unit s - * @min 5 - * @max 300 - * @decimal 1 - * @increment 1 - */ -PARAM_DEFINE_INT32(COM_DL_LOSS_T, 10); - -/** - * High Latency Datalink loss time threshold - * - * After this amount of seconds without datalink the data link lost mode triggers - * - * @group Commander - * @unit s - * @min 60 - * @max 3600 - */ -PARAM_DEFINE_INT32(COM_HLDL_LOSS_T, 120); - -/** - * High Latency Datalink regain time threshold - * - * After a data link loss: after this number of seconds with a healthy datalink the 'datalink loss' - * flag is set back to false - * - * @group Commander - * @unit s - * @min 0 - * @max 60 - */ -PARAM_DEFINE_INT32(COM_HLDL_REG_T, 0); - -/** - * Manual control loss timeout - * - * The time in seconds without a new setpoint from RC or Joystick, after which the connection is considered lost. - * This must be kept short as the vehicle will use the last supplied setpoint until the timeout triggers. - * Ensure the value is not set lower than the update interval of the RC or Joystick. - * - * @group Commander - * @unit s - * @min 0 - * @max 35 - * @decimal 1 - * @increment 0.1 - */ -PARAM_DEFINE_FLOAT(COM_RC_LOSS_T, 0.5f); - -/** - * Home position enabled - * - * Set home position automatically if possible. - * - * During missions, the latitude/longitude of the home position is locked and will not reset during intermediate landings. - * It will only update once the mission is complete or landed outside of a mission. - * However, the altitude is still being adjusted to correct for GNSS vertical drift in the first 2 minutes after takeoff. - * - * @group Commander - * @reboot_required true - * @boolean - */ -PARAM_DEFINE_INT32(COM_HOME_EN, 1); - -/** - * Allows setting the home position after takeoff - * - * If set to true, the autopilot is allowed to set its home position after takeoff - * The true home position is back-computed if a local position is estimate if available. - * If no local position is available, home is set to the current position. - * - * @boolean - * @group Commander - */ -PARAM_DEFINE_INT32(COM_HOME_IN_AIR, 0); - -/** - * Manual control input source configuration - * - * Selects stick input selection behavior: - * either a traditional remote control receiver (RC) or a MAVLink joystick (MANUAL_CONTROL message) - * - * Priority sources are immediately switched to whenever they get valid. - * - * 0 RC only. Requires valid RC calibration. - * 1 MAVLink only. RC and related checks are disabled. - * 2 Switches only if current source becomes invalid. - * 3 Locks to the first valid source until reboot. - * 4 Ignores all sources. - * 5 RC priority, then MAVLink (lower instance before higher) - * 6 MAVLink priority (lower instance before higher), then RC - * 7 RC priority, then MAVLink (higher instance before lower) - * 8 MAVLink priority (higher instance before lower), then RC - * - * @group Commander - * @min 0 - * @max 8 - * @value 0 RC only - * @value 1 MAVLink only - * @value 2 RC or MAVLink with fallback - * @value 3 RC or MAVLink keep first - * @value 4 Disable manual control - * @value 5 Prio: RC > MAVL 1 > MAVL 2 - * @value 6 Prio: MAVL 1 > MAVL 2 > RC - * @value 7 Prio: RC > MAVL 2 > MAVL 1 - * @value 8 Prio: MAVL 2 > MAVL 1 > RC - */ -PARAM_DEFINE_INT32(COM_RC_IN_MODE, 3); - -/** - * Time-out for auto disarm after landing - * - * A non-zero, positive value specifies the time-out period in seconds after which the vehicle will be - * automatically disarmed in case a landing situation has been detected during this period. - * - * A zero or negative value means that automatic disarming triggered by landing detection is disabled. - * - * @group Commander - * @unit s - * @decimal 1 - * @increment 0.1 - */ - -PARAM_DEFINE_FLOAT(COM_DISARM_LAND, 2.0f); - -/** - * Time-out for auto disarm if not taking off - * - * A non-zero, positive value specifies the time in seconds, within which the - * vehicle is expected to take off after arming. In case the vehicle didn't takeoff - * within the timeout it disarms again. - * - * A negative value disables autmoatic disarming triggered by a pre-takeoff timeout. - * - * @group Commander - * @unit s - * @decimal 1 - * @increment 0.1 - */ -PARAM_DEFINE_FLOAT(COM_DISARM_PRFLT, 10.0f); - -/** - * Arming without GNSS configuration - * - * Configures whether arming is allowed without GNSS, for modes that require a global position - * (specifically, in those modes when a check defined by EKF2_GPS_CHECK fails). - * The settings deny arming and warn, allow arming and warn, or silently allow arming. - * - * @group Commander - * @value 0 Deny arming - * @value 1 Allow arming (with warning) - * @value 2 Allow arming (no warning) - */ -PARAM_DEFINE_INT32(COM_ARM_WO_GPS, 1); - -/** - * Arm switch is a momentary button - * - * 0: Arming/disarming triggers on switch transition. - * 1: Arming/disarming triggers when holding the momentary button down like the stick gesture. - * - * @group Commander - * @boolean - */ -PARAM_DEFINE_INT32(COM_ARM_SWISBTN, 0); - -/** - * Allow disarming via switch/stick/button on multicopters in manual thrust modes - * - * 0: Disallow disarming when not landed - * 1: Allow disarming in multicopter flight in modes where - * the thrust is directly controlled by thr throttle stick - * e.g. Stabilized, Acro - * - * @group Commander - * @boolean - */ -PARAM_DEFINE_INT32(COM_DISARM_MAN, 1); - -/** - * Battery failsafe mode - * - * Action the system takes at critical battery. See also BAT_CRIT_THR and BAT_EMERGEN_THR - * for definition of battery states. - * - * @group Commander - * @value 0 Warning - * @value 2 Land mode - * @value 3 Return at critical level, land at emergency level - */ -PARAM_DEFINE_INT32(COM_LOW_BAT_ACT, 0); - -/** - * Delay between failsafe condition triggered and failsafe reaction - * - * Before entering failsafe (RTL, Land, Hold), wait COM_FAIL_ACT_T seconds in Hold mode - * for the user to realize. - * During that time the user can switch modes, but cannot take over control via the stick override feature (see COM_RC_OVERRIDE). - * Afterwards the configured failsafe action is triggered and the user may use stick override. - * - * A zero value disables the delay. - * - * @group Commander - * @unit s - * @min 0.0 - * @max 25.0 - * @decimal 1 - */ -PARAM_DEFINE_FLOAT(COM_FAIL_ACT_T, 5.f); - -/** - * Imbalanced propeller failsafe mode - * - * Action the system takes when an imbalanced propeller is detected by the failure detector. - * See also FD_IMB_PROP_THR to set the failure threshold. - * - * @group Commander - * - * @value -1 Disabled - * @value 0 Warning - * @value 1 Return - * @value 2 Land - * @increment 1 - */ -PARAM_DEFINE_INT32(COM_IMB_PROP_ACT, 0); - -/** - * Time-out to wait when offboard connection is lost before triggering offboard lost action. - * - * See COM_OBL_RC_ACT to configure action. - * - * @group Commander - * @unit s - * @min 0 - * @max 60 - * @increment 0.01 - */ -PARAM_DEFINE_FLOAT(COM_OF_LOSS_T, 1.0f); - -/** - * Set action after a quadchute - * - * @value -1 Warning only - * @value 0 Return mode - * @value 1 Land mode - * @value 2 Hold mode - * @group Commander - */ -PARAM_DEFINE_INT32(COM_QC_ACT, 0); - -/** - * Set offboard loss failsafe mode - * - * The offboard loss failsafe will only be entered after a timeout, - * set by COM_OF_LOSS_T in seconds. - * - * @value 0 Position mode - * @value 1 Altitude mode - * @value 2 Stabilized - * @value 3 Return mode - * @value 4 Land mode - * @value 5 Hold mode - * @value 6 Terminate - * @value 7 Disarm - * @group Commander - */ -PARAM_DEFINE_INT32(COM_OBL_RC_ACT, 0); - -/** - * Time-out to wait when onboard computer connection is lost before warning about loss connection. - * - * @group Commander - * @unit s - * @min 0 - * @max 60 - * @increment 0.01 - */ -PARAM_DEFINE_FLOAT(COM_OBC_LOSS_T, 5.0f); - -/** - * Maximum accelerometer inconsistency between IMU units that will allow arming - * - * @group Commander - * @unit m/s^2 - * @min 0.1 - * @max 1.0 - * @decimal 2 - * @increment 0.05 - */ -PARAM_DEFINE_FLOAT(COM_ARM_IMU_ACC, 0.7f); - -/** - * Maximum rate gyro inconsistency between IMU units that will allow arming - * - * @group Commander - * @unit rad/s - * @min 0.02 - * @max 0.3 - * @decimal 3 - * @increment 0.01 - */ -PARAM_DEFINE_FLOAT(COM_ARM_IMU_GYR, 0.25f); - -/** - * Maximum magnetic field inconsistency between units that will allow arming - * - * Set -1 to disable the check. - * - * @group Commander - * @unit deg - * @min 3 - * @max 180 - */ -PARAM_DEFINE_INT32(COM_ARM_MAG_ANG, 60); - -/** - * Enable mag strength preflight check - * - * Check if the estimator detects a strong magnetic - * disturbance (check enabled by EKF2_MAG_CHECK) - * - * @value 0 Disabled - * @value 1 Deny arming - * @value 2 Warning only - * - * @group Commander - */ -PARAM_DEFINE_INT32(COM_ARM_MAG_STR, 2); - -/** - * Enable manual control stick override - * - * When enabled, moving the sticks more than COM_RC_STICK_OV - * immediately gives control back to the pilot by switching to Position mode and - * if position is unavailable Altitude mode. - * Note: Only has an effect on multicopters, and VTOLs in multicopter mode. - * - * @min 0 - * @max 3 - * @bit 0 Enable override during auto modes (except for in critical battery reaction) - * @bit 1 Enable override during offboard mode - * @group Commander - */ -PARAM_DEFINE_INT32(COM_RC_OVERRIDE, 1); - -/** - * Stick override threshold - * - * If COM_RC_OVERRIDE is enabled and the joystick input is moved more than this threshold - * the autopilot the pilot takes over control. - * - * @group Commander - * @unit % - * @min 5 - * @max 80 - * @decimal 0 - * @increment 0.05 - */ -PARAM_DEFINE_FLOAT(COM_RC_STICK_OV, 30.0f); - -/** - * Require valid mission to arm - * - * The default allows to arm the vehicle without a valid mission. - * - * @group Commander - * @boolean - */ -PARAM_DEFINE_INT32(COM_ARM_MIS_REQ, 0); - -/** - * Require arm authorization to arm - * - * By default off. The default allows to arm the vehicle without a arm authorization. - * - * @group Commander - * @boolean - */ -PARAM_DEFINE_INT32(COM_ARM_AUTH_REQ, 0); - -/** - * Arm authorizer system id - * - * Used if arm authorization is requested by COM_ARM_AUTH_REQ. - * - * @group Commander - */ -PARAM_DEFINE_INT32(COM_ARM_AUTH_ID, 10); - -/** - * Arm authorization method - * - * Methods: - * - one arm: request authorization and arm when authorization is received - * - two step arm: 1st arm command request an authorization and - * 2nd arm command arm the drone if authorized - * - * Used if arm authorization is requested by COM_ARM_AUTH_REQ. - * - * @group Commander - * @value 0 one arm - * @value 1 two step arm - */ -PARAM_DEFINE_INT32(COM_ARM_AUTH_MET, 0); - -/** - * Arm authorization timeout - * - * Timeout for authorizer answer. - * Used if arm authorization is requested by COM_ARM_AUTH_REQ. - * - * @group Commander - * @unit s - * @decimal 1 - * @increment 0.1 - */ -PARAM_DEFINE_FLOAT(COM_ARM_AUTH_TO, 1); - -/** - * Horizontal position error threshold for hovering systems - * - * This is the horizontal position error (EPH) threshold that will trigger a failsafe. - * If the previous position error was below this threshold, there is an additional - * factor of 2.5 applied (threshold for invalidation 2.5 times the one for validation). - * Only used for multicopters and VTOLs in hover mode. - * Independent from estimator positioning data timeout threshold (see EKF2_NOAID_TOUT). - * - * Set to -1 to disable. - * - * @unit m - * @min -1 - * @max 400 - * @decimal 1 - * @group Commander - */ -PARAM_DEFINE_FLOAT(COM_POS_FS_EPH, 5.f); - -/** - * Horizontal velocity error threshold. - * - * This is the horizontal velocity error (EVH) threshold that will trigger a failsafe. - * The default is appropriate for a multicopter. Can be increased for a fixed-wing. - * If the previous velocity error was below this threshold, there is an additional - * factor of 2.5 applied (threshold for invalidation 2.5 times the one for validation). - * - * @unit m/s - * @min 0 - * @decimal 1 - * @group Commander - */ -PARAM_DEFINE_FLOAT(COM_VEL_FS_EVH, 1.f); - -/** - * Next flight UUID - * - * This number is incremented automatically after every flight on - * disarming in order to remember the next flight UUID. - * The first flight is 0. - * - * @group Commander - * @category system - * @volatile - * @min 0 - */ -PARAM_DEFINE_INT32(COM_FLIGHT_UUID, 0); - -/** - * Action after TAKEOFF has been accepted. - * - * The mode transition after TAKEOFF has completed successfully. - * - * @value 0 Hold - * @value 1 Mission (if valid) - * @group Commander - */ -PARAM_DEFINE_INT32(COM_TAKEOFF_ACT, 0); - -/** - * Set GCS connection loss failsafe mode - * - * The GCS connection loss failsafe will only be entered after a timeout, - * set by COM_DL_LOSS_T in seconds. Once the timeout occurs the selected - * action will be executed. - * - * @value 0 Disabled - * @value 1 Hold mode - * @value 2 Return mode - * @value 3 Land mode - * @value 5 Terminate - * @value 6 Disarm - * @min 0 - * @max 6 - * - * @group Commander - */ -PARAM_DEFINE_INT32(NAV_DLL_ACT, 0); - -/** - * Set manual control loss failsafe mode - * - * The manual control loss failsafe will only be entered after a timeout, - * set by COM_RC_LOSS_T in seconds. - * - * @value 1 Hold mode - * @value 2 Return mode - * @value 3 Land mode - * @value 5 Terminate - * @value 6 Disarm - * @min 1 - * @max 6 - * - * @group Commander - */ -PARAM_DEFINE_INT32(NAV_RCL_ACT, 2); - -/** - * Manual control loss exceptions - * - * Specify modes in which stick input is ignored and no failsafe action is triggered. - * External modes requiring stick input will still failsafe. - * Auto modes are: Hold, Takeoff, Land, RTL, Descend, Follow Target, Precland, Orbit. - * - * @min 0 - * @max 31 - * @bit 0 Mission - * @bit 1 Auto modes - * @bit 2 Offboard - * @bit 3 External Mode - * @bit 4 Altitude Cruise - * @group Commander - */ -PARAM_DEFINE_INT32(COM_RCL_EXCEPT, 0); - -/** - * Datalink loss exceptions - * - * Specify modes in which ground control station connection loss is ignored and no failsafe action is triggered. - * See also COM_RCL_EXCEPT. - * - * @min 0 - * @max 31 - * @bit 0 Mission - * @bit 1 Auto modes - * @bit 2 Offboard - * @bit 3 External Mode - * @bit 4 Altitude Cruise - * @group Commander - */ -PARAM_DEFINE_INT32(COM_DLL_EXCEPT, 0); - -/** - * Set the actuator failure failsafe mode - * - * Note: actuator failure needs to be enabled and configured via FD_ACT_* - * parameters. - * - * @min 0 - * @max 3 - * @value 0 Warning only - * @value 1 Hold mode - * @value 2 Land mode - * @value 3 Return mode - * @value 4 Terminate - * @group Commander - */ -PARAM_DEFINE_INT32(COM_ACT_FAIL_ACT, 0); - -/** - * Expect and require a healthy MAVLink parachute system - * - * @boolean - * @group Commander - */ -PARAM_DEFINE_INT32(COM_PARACHUTE, 0); - -/** - * User Flight Profile - * - * Describes the intended use of the vehicle. - * Can be used by ground control software or log post processing. - * This param does not influence the behavior within the firmware. This means for example the control logic is independent of the setting of this param (but depends on other params). - * - * @value 0 Default - * @value 100 Pro User - * @value 200 Flight Tester - * @value 300 Developer - * - * @group Commander - */ -PARAM_DEFINE_INT32(COM_FLT_PROFILE, 0); - -/** - * Enable checks on ESCs that report telemetry. - * - * If this parameter is set, the system will check ESC's online status and failures. - * This param is specific for ESCs reporting status. It shall be used only if ESCs support telemetry. - * - * @group Commander - * @boolean - */ -PARAM_DEFINE_INT32(COM_ARM_CHK_ESCS, 0); - -/** - * Condition to enter prearmed mode - * - * Condition to enter the prearmed state, an intermediate state between disarmed and armed - * in which non-throttling actuators are active. - * - * @value 0 Disabled - * @value 1 Safety button - * @value 2 Always - * - * @group Commander - */ -PARAM_DEFINE_INT32(COM_PREARM_MODE, 0); - -/** - * Enable force safety - * - * Force safety when the vehicle disarms - * - * @boolean - * @group Commander - */ -PARAM_DEFINE_INT32(COM_FORCE_SAFETY, 0); - -/** - * Enable Actuator Testing - * - * If set, enables the actuator test interface via MAVLink (ACTUATOR_TEST), that - * allows spinning the motors and moving the servos for testing purposes. - * - * @boolean - * @group Commander - */ -PARAM_DEFINE_INT32(COM_MOT_TEST_EN, 1); - -/** - * Timeout value for disarming when kill switch is engaged - * - * Use RC_MAP_KILL_SW to map a kill switch. - * - * @group Commander - * @unit s - * @min 0.0 - * @max 30.0 - * @increment 0.1 - */ -PARAM_DEFINE_FLOAT(COM_KILL_DISARM, 5.0f); - -/** - * Maximum allowed CPU load to still arm. - * - * The check fails if the CPU load is above this threshold for 2s. - * - * A negative value disables the check. - * - * @group Commander - * @unit % - * @min -1 - * @max 100 - * @increment 1 - */ -PARAM_DEFINE_FLOAT(COM_CPU_MAX, 95.0f); - -/** - * Maximum allowed RAM usage to pass checks - * - * The check fails if the RAM usage is above this threshold. - * - * A negative value disables the check. - * - * @group Commander - * @unit % - * @min -1 - * @max 100 - * @increment 1 - */ -PARAM_DEFINE_FLOAT(COM_RAM_MAX, 95.0f); - -/** - * Required number of redundant power modules - * - * This configures a check to verify the expected number of 5V rail power supplies are present. By default only one is expected. - * Note: CBRK_SUPPLY_CHK disables all power checks including this one. - * - * @group Commander - * @min 0 - * @max 4 - */ -PARAM_DEFINE_INT32(COM_POWER_COUNT, 1); - -/** - * Timeout for detecting a failure after takeoff - * - * A non-zero, positive value specifies the timeframe in seconds within failure detector is allowed to disarm the vehicle - * if attitude exceeds the limits defined in FD_FAIL_P and FD_FAIL_R. - * The check is not executed for flight modes that do support acrobatic maneuvers, e.g: Acro (MC/FW) and Manual (FW). - * A zero or negative value means that the check is disabled. - * - * @group Commander - * @unit s - * @min -1.0 - * @max 5.0 - * @decimal 3 - */ -PARAM_DEFINE_FLOAT(COM_LKDOWN_TKO, 3.0f); - -/** - * Enable FMU SD card detection check - * - * This check detects if the FMU SD card is missing. - * Depending on the value of the parameter, the check can be - * disabled, warn only or deny arming. - * - * @group Commander - * @value 0 Disabled - * @value 1 Warning only - * @value 2 Enforce SD card presence - */ -PARAM_DEFINE_INT32(COM_ARM_SDCARD, 1); - -/** - * Enable FMU SD card hardfault detection check - * - * This check detects if there are hardfault files present on the - * SD card. If so, and the parameter is enabled, arming is prevented. - * - * @group Commander - * @boolean - */ -PARAM_DEFINE_INT32(COM_ARM_HFLT_CHK, 1); - -/** - * Enable Drone ID system detection and health check - * - * This check detects if the Open Drone ID system is missing. - * Depending on the value of the parameter, the check can be - * disabled, warn only or deny arming. - * - * @group Commander - * @value 0 Disabled - * @value 1 Warning only - * @value 2 Enforce Open Drone ID system presence - */ -PARAM_DEFINE_INT32(COM_ARM_ODID, 0); - -/** - * Enable Traffic Avoidance system detection check - * - * This check detects if a traffic avoidance system (ADSB/FLARM transponder) - * is missing. Depending on the value of the parameter, the check can be - * disabled, warn only, or deny arming. - * - * @group Commander - * @value 0 Disabled - * @value 1 Warning only - * @value 2 Enforce for all modes - * @value 3 Enforce for mission modes only - */ -PARAM_DEFINE_INT32(COM_ARM_TRAFF, 0); - -/** - * Enforced delay between arming and further navigation - * - * The minimal time from arming the motors until moving the vehicle is possible is COM_SPOOLUP_TIME seconds. - * Goal: - * - Motors and propellers spool up to idle speed before getting commanded to spin faster - * - Timeout for ESCs and smart batteries to successfulyy do failure checks - * e.g. for stuck rotors before the vehicle is off the ground - * - * @group Commander - * @min 0 - * @max 30 - * @decimal 1 - * @increment 0.1 - * @unit s - */ -PARAM_DEFINE_FLOAT(COM_SPOOLUP_TIME, 1.0f); - -/** - * Wind speed warning threshold - * - * A warning is triggered if the currently estimated wind speed is above this value. - * Warning is sent periodically (every 1 minute). - * - * Set to -1 to disable. - * - * @min -1 - * @decimal 1 - * @increment 0.1 - * @group Commander - * @unit m/s - */ -PARAM_DEFINE_FLOAT(COM_WIND_WARN, -1.f); - -/** - * Maximum allowed flight time - * - * The vehicle aborts the current operation and returns to launch when - * the time since takeoff is above this value. It is not possible to resume the - * mission or switch to any auto mode other than RTL or Land. Taking over in any manual - * mode is still possible. - * - * Starting from 90% of the maximum flight time, a warning message will be sent - * every 1 minute with the remaining time until automatic RTL. - * - * Set to -1 to disable. - * - * @unit s - * @min -1 - * @group Commander - */ -PARAM_DEFINE_INT32(COM_FLT_TIME_MAX, -1); - -/** - * High wind speed failsafe threshold - * - * Wind speed threshold above which an automatic failsafe action is triggered. - * Failsafe action can be specified with COM_WIND_MAX_ACT. - * - * @min -1 - * @decimal 1 - * @increment 0.1 - * @group Commander - * @unit m/s - */ -PARAM_DEFINE_FLOAT(COM_WIND_MAX, -1.f); - -/** - * High wind failsafe mode - * - * Action the system takes when a wind speed above the specified threshold is detected. - * See COM_WIND_MAX to set the failsafe threshold. - * If enabled, it is not possible to resume the mission or switch to any auto mode other than - * RTL or Land if this threshold is exceeded. Taking over in any manual - * mode is still possible. - * - * @group Commander - * - * @value 0 None - * @value 1 Warning - * @value 2 Hold - * @value 3 Return - * @value 4 Terminate - * @value 5 Land - * @increment 1 - */ -PARAM_DEFINE_INT32(COM_WIND_MAX_ACT, 0); - -/** - * Low position accuracy failsafe threshold - * - * This triggers the action specified in COM_POS_LOW_ACT if the estimated position accuracy is below this threshold. - * Local position has to be still declared valid, which requires some kind of velocity aiding or large dead-reckoning time (EKF2_NOAID_TOUT), - * and a high failsafe threshold (COM_POS_FS_EPH). - * - * Set to -1 to disable. - * - * @min -1 - * @max 1000 - * @group Commander - * @unit m - */ -PARAM_DEFINE_FLOAT(COM_POS_LOW_EPH, -1.0f); - -/** - * Low position accuracy action - * - * Action the system takes when the estimated position has an accuracy below the specified threshold. - * See COM_POS_LOW_EPH to set the failsafe threshold. - * The failsafe action is only executed if the vehicle is in auto mission or auto loiter mode, - * otherwise it is only a warning. - * - * @group Commander - * - * @value 0 None - * @value 1 Warning - * @value 2 Hold - * @value 3 Return - * @value 4 Terminate - * @value 5 Land - * @increment 1 - */ -PARAM_DEFINE_INT32(COM_POS_LOW_ACT, 3); - -/** - * Flag to allow arming - * - * Set 0 to prevent accidental use of the vehicle e.g. for safety or maintenance reasons. - * - * @boolean - * @value 0 Disallow arming - * @value 1 Allow arming - * @group Commander - */ -PARAM_DEFINE_INT32(COM_ARMABLE, 1); - -/** - * Minimum battery level for arming - * - * Threshold for battery percentage below arming is prohibited. - * - * A negative value means BAT_CRIT_THR is the threshold. - * - * @unit norm - * @min -1 - * @max 0.9 - * @decimal 2 - * @increment 0.01 - * @group Commander - */ -PARAM_DEFINE_FLOAT(COM_ARM_BAT_MIN, -1.f); - -/** - * Enable throw-start - * - * Allows to start the vehicle by throwing it into the air. - * - * @group Commander - * @boolean - */ -PARAM_DEFINE_INT32(COM_THROW_EN, 0); - -/** - * Minimum speed for the throw start - * - * When the throw launch is enabled, the drone will only allow motors to spin after this speed - * is exceeded before detecting the freefall. This is a safety feature to ensure the drone does - * not turn on after accidental drop or a rapid movement before the throw. - * - * Set to 0 to disable. - * - * @group Commander - * @min 0 - * @decimal 1 - * @increment 0.1 - * @unit m/s - */ -PARAM_DEFINE_FLOAT(COM_THROW_SPEED, 5); - -/** - * Remaining flight time low failsafe - * - * Action the system takes when the remaining flight time is below - * the estimated time it takes to reach the RTL destination. - * - * @group Commander - * @value 0 None - * @value 1 Warning - * @value 3 Return - * @increment 1 - */ -PARAM_DEFINE_INT32(COM_FLTT_LOW_ACT, 0); - -/** - * Allow external mode registration while armed. - * - * By default disabled for safety reasons - * - * @group Commander - * @boolean - * - */ -PARAM_DEFINE_INT32(COM_MODE_ARM_CHK, 0); diff --git a/src/modules/commander/commander_params.yaml b/src/modules/commander/commander_params.yaml new file mode 100644 index 0000000000..392e4eabf1 --- /dev/null +++ b/src/modules/commander/commander_params.yaml @@ -0,0 +1,790 @@ +module_name: commander +parameters: +- group: Commander + definitions: + COM_DL_LOSS_T: + description: + short: GCS connection loss time threshold + long: After this amount of seconds without datalink, the GCS connection lost + mode triggers + type: int32 + default: 10 + unit: s + min: 5 + max: 300 + decimal: 1 + increment: 1 + COM_HLDL_LOSS_T: + description: + short: High Latency Datalink loss time threshold + long: After this amount of seconds without datalink the data link lost mode + triggers + type: int32 + default: 120 + unit: s + min: 60 + max: 3600 + COM_RC_LOSS_T: + description: + short: Manual control loss timeout + long: |- + The time in seconds without a new setpoint from RC or Joystick, after which the connection is considered lost. + This must be kept short as the vehicle will use the last supplied setpoint until the timeout triggers. + Ensure the value is not set lower than the update interval of the RC or Joystick. + type: float + default: 0.5 + unit: s + min: 0 + max: 35 + decimal: 1 + increment: 0.1 + COM_HOME_EN: + description: + short: Home position enabled + long: |- + Set home position automatically if possible. + + During missions, the latitude/longitude of the home position is locked and will not reset during intermediate landings. + It will only update once the mission is complete or landed outside of a mission. + However, the altitude is still being adjusted to correct for GNSS vertical drift in the first 2 minutes after takeoff. + type: boolean + default: 1 + reboot_required: true + COM_HOME_IN_AIR: + description: + short: Allows setting the home position after takeoff + long: |- + If set to true, the autopilot is allowed to set its home position after takeoff + The true home position is back-computed if a local position is estimate if available. + If no local position is available, home is set to the current position. + type: boolean + default: 0 + COM_RC_IN_MODE: + description: + short: Manual control input source configuration + long: |- + Selects stick input selection behavior: + either a traditional remote control receiver (RC) or a MAVLink joystick (MANUAL_CONTROL message) + + Priority sources are immediately switched to whenever they get valid. + + 0 RC only. Requires valid RC calibration. + 1 MAVLink only. RC and related checks are disabled. + 2 Switches only if current source becomes invalid. + 3 Locks to the first valid source until reboot. + 4 Ignores all sources. + 5 RC priority, then MAVLink (lower instance before higher) + 6 MAVLink priority (lower instance before higher), then RC + 7 RC priority, then MAVLink (higher instance before lower) + 8 MAVLink priority (higher instance before lower), then RC + type: enum + values: + 0: RC only + 1: MAVLink only + 2: RC or MAVLink with fallback + 3: RC or MAVLink keep first + 4: Disable manual control + 5: 'Prio: RC > MAVL 1 > MAVL 2' + 6: 'Prio: MAVL 1 > MAVL 2 > RC' + 7: 'Prio: RC > MAVL 2 > MAVL 1' + 8: 'Prio: MAVL 2 > MAVL 1 > RC' + default: 3 + min: 0 + max: 8 + COM_DISARM_LAND: + description: + short: Time-out for auto disarm after landing + long: |- + A non-zero, positive value specifies the time-out period in seconds after which the vehicle will be + automatically disarmed in case a landing situation has been detected during this period. + + A zero or negative value means that automatic disarming triggered by landing detection is disabled. + type: float + default: 2.0 + unit: s + decimal: 1 + increment: 0.1 + COM_DISARM_PRFLT: + description: + short: Time-out for auto disarm if not taking off + long: |- + A non-zero, positive value specifies the time in seconds, within which the + vehicle is expected to take off after arming. In case the vehicle didn't takeoff + within the timeout it disarms again. + + A negative value disables autmoatic disarming triggered by a pre-takeoff timeout. + type: float + default: 10.0 + unit: s + decimal: 1 + increment: 0.1 + COM_ARM_WO_GPS: + description: + short: Arming without GNSS configuration + long: |- + Configures whether arming is allowed without GNSS, for modes that require a global position + (specifically, in those modes when a check defined by EKF2_GPS_CHECK fails). + The settings deny arming and warn, allow arming and warn, or silently allow arming. + type: enum + values: + 0: Deny arming + 1: Allow arming (with warning) + 2: Allow arming (no warning) + default: 1 + COM_ARM_SWISBTN: + description: + short: Arm switch is a momentary button + long: |- + 0: Arming/disarming triggers on switch transition. + 1: Arming/disarming triggers when holding the momentary button down like the stick gesture. + type: boolean + default: 0 + COM_DISARM_MAN: + description: + short: Allow disarming in manual thrust modes + long: |- + Allow disarming via switch/stick/button on multicopters in manual thrust modes + + 0: Disallow disarming when not landed + 1: Allow disarming in multicopter flight in modes where + the thrust is directly controlled by thr throttle stick + e.g. Stabilized, Acro + type: boolean + default: 1 + COM_LOW_BAT_ACT: + description: + short: Battery failsafe mode + long: |- + Action the system takes at critical battery. See also BAT_CRIT_THR and BAT_EMERGEN_THR + for definition of battery states. + type: enum + values: + 0: Warning + 2: Land mode + 3: Return at critical level, land at emergency level + default: 0 + COM_FAIL_ACT_T: + description: + short: Delay between failsafe condition triggered and failsafe reaction + long: |- + Before entering failsafe (RTL, Land, Hold), wait COM_FAIL_ACT_T seconds in Hold mode + for the user to realize. + During that time the user can switch modes, but cannot take over control via the stick override feature (see COM_RC_OVERRIDE). + Afterwards the configured failsafe action is triggered and the user may use stick override. + + A zero value disables the delay. + type: float + default: 5.0 + unit: s + min: 0.0 + max: 25.0 + decimal: 1 + COM_OF_LOSS_T: + description: + short: Offboard connection loss timeout + long: |- + Time-out to wait when offboard connection is lost before triggering offboard lost action + + See COM_OBL_RC_ACT to configure action. + type: float + default: 1.0 + unit: s + min: 0 + max: 60 + increment: 0.01 + COM_QC_ACT: + description: + short: Set action after a quadchute + type: enum + values: + -1: Warning only + 0: Return mode + 1: Land mode + 2: Hold mode + default: 0 + COM_OBL_RC_ACT: + description: + short: Set offboard loss failsafe mode + long: |- + The offboard loss failsafe will only be entered after a timeout, + set by COM_OF_LOSS_T in seconds. + type: enum + values: + 0: Position mode + 1: Altitude mode + 2: Stabilized + 3: Return mode + 4: Land mode + 5: Hold mode + 6: Terminate + 7: Disarm + default: 0 + COM_ARM_IMU_ACC: + description: + short: Max accelerometer inconsistency for arming + long: Maximum accelerometer inconsistency between IMU units that will allow + arming + type: float + default: 0.7 + unit: m/s^2 + min: 0.1 + max: 1.0 + decimal: 2 + increment: 0.05 + COM_ARM_IMU_GYR: + description: + short: Max rate gyro inconsistency for arming + long: Maximum rate gyro inconsistency between IMU units that will allow arming + type: float + default: 0.25 + unit: rad/s + min: 0.02 + max: 0.3 + decimal: 3 + increment: 0.01 + COM_ARM_MAG_ANG: + description: + short: Max magnetic field inconsistency for arming + long: |- + Maximum magnetic field inconsistency between units that will allow arming + + Set -1 to disable the check. + type: int32 + default: 60 + unit: deg + min: 3 + max: 180 + COM_ARM_MAG_STR: + description: + short: Enable mag strength preflight check + long: |- + Check if the estimator detects a strong magnetic + disturbance (check enabled by EKF2_MAG_CHECK) + type: enum + values: + 0: Disabled + 1: Deny arming + 2: Warning only + default: 2 + COM_RC_OVERRIDE: + description: + short: Enable manual control stick override + long: |- + When enabled, moving the sticks more than COM_RC_STICK_OV + immediately gives control back to the pilot by switching to Position mode and + if position is unavailable Altitude mode. + Note: Only has an effect on multicopters, and VTOLs in multicopter mode. + type: bitmask + bit: + 0: Enable override during auto modes (except for in critical battery reaction) + 1: Enable override during offboard mode + default: 1 + min: 0 + max: 3 + COM_RC_STICK_OV: + description: + short: Stick override threshold + long: |- + If COM_RC_OVERRIDE is enabled and the joystick input is moved more than this threshold + the pilot takes over control. + type: float + default: 30.0 + unit: '%' + min: 5 + max: 80 + decimal: 0 + increment: 0.05 + COM_ARM_MIS_REQ: + description: + short: Require valid mission to arm + long: The default allows to arm the vehicle without a valid mission. + type: boolean + default: 0 + COM_ARM_AUTH_REQ: + description: + short: Require arm authorization to arm + long: By default off. The default allows to arm the vehicle without a arm + authorization. + type: boolean + default: 0 + COM_ARM_AUTH_ID: + description: + short: Arm authorizer system id + long: Used if arm authorization is requested by COM_ARM_AUTH_REQ. + type: int32 + default: 10 + COM_ARM_AUTH_MET: + description: + short: Arm authorization method + long: |- + Methods: + - one arm: request authorization and arm when authorization is received + - two step arm: 1st arm command request an authorization and + 2nd arm command arm the drone if authorized + + Used if arm authorization is requested by COM_ARM_AUTH_REQ. + type: enum + values: + 0: one arm + 1: two step arm + default: 0 + COM_ARM_ON_BOOT: + description: + short: Arm automatically on boot + long: |- + When enabled, the vehicle arms automatically once all preflight checks pass after boot. + The vehicle will not re-arm after a manual disarm. + Has no effect if COM_ARMABLE is 0. + type: boolean + default: 0 + reboot_required: true + COM_ARM_AUTH_TO: + description: + short: Arm authorization timeout + long: |- + Timeout for authorizer answer. + Used if arm authorization is requested by COM_ARM_AUTH_REQ. + type: float + default: 1 + unit: s + decimal: 1 + increment: 0.1 + COM_POS_FS_EPH: + description: + short: Horizontal position error threshold for hovering systems + long: |- + This is the horizontal position error (EPH) threshold that will trigger a failsafe. + If the previous position error was below this threshold, there is an additional + factor of 2.5 applied (threshold for invalidation 2.5 times the one for validation). + Only used for multicopters and VTOLs in hover mode. + Independent from estimator positioning data timeout threshold (see EKF2_NOAID_TOUT). + + Set to -1 to disable. + type: float + default: 5.0 + unit: m + min: -1 + max: 400 + decimal: 1 + COM_VEL_FS_EVH: + description: + short: Horizontal velocity error threshold + long: |- + This is the horizontal velocity error (EVH) threshold that will trigger a failsafe. + The default is appropriate for a multicopter. Can be increased for a fixed-wing. + If the previous velocity error was below this threshold, there is an additional + factor of 2.5 applied (threshold for invalidation 2.5 times the one for validation). + type: float + default: 1.0 + unit: m/s + min: 0 + decimal: 1 + COM_FLIGHT_UUID: + description: + short: Next flight UUID + long: |- + This number is incremented automatically after every flight on + disarming in order to remember the next flight UUID. + The first flight is 0. + category: System + type: int32 + default: 0 + volatile: true + min: 0 + NAV_DLL_ACT: + description: + short: Set GCS connection loss failsafe mode + long: |- + The GCS connection loss failsafe will only be entered after a timeout, + set by COM_DL_LOSS_T in seconds. Once the timeout occurs the selected + action will be executed. + type: enum + values: + 0: Disabled + 1: Hold mode + 2: Return mode + 3: Land mode + 5: Terminate + 6: Disarm + default: 0 + min: 0 + max: 6 + NAV_RCL_ACT: + description: + short: Set manual control loss failsafe mode + long: |- + The manual control loss failsafe will only be entered after a timeout, + set by COM_RC_LOSS_T in seconds. + type: enum + values: + 1: Hold mode + 2: Return mode + 3: Land mode + 5: Terminate + 6: Disarm + default: 2 + min: 1 + max: 6 + COM_RCL_EXCEPT: + description: + short: Manual control loss exceptions + long: |- + Specify modes in which stick input is ignored and no failsafe action is triggered. + External modes requiring stick input will still failsafe. + Auto modes are: Hold, Takeoff, Land, RTL, Descend, Follow Target, Precland, Orbit. + type: bitmask + bit: + 0: Mission + 1: Auto modes + 2: Offboard + 3: External Mode + 4: Altitude Cruise + default: 0 + min: 0 + max: 31 + COM_DLL_EXCEPT: + description: + short: Datalink loss exceptions + long: |- + Specify modes in which ground control station connection loss is ignored and no failsafe action is triggered. + See also COM_RCL_EXCEPT. + type: bitmask + bit: + 0: Mission + 1: Auto modes + 2: Offboard + 3: External Mode + 4: Altitude Cruise + default: 0 + min: 0 + max: 31 + COM_ACT_FAIL_ACT: + description: + short: Set the actuator failure failsafe mode + long: |- + Note: actuator failure needs to be enabled and configured via FD_ACT_* + parameters. + type: enum + values: + 0: Warning only + 1: Hold mode + 2: Land mode + 3: Return mode + 4: Terminate + default: 0 + min: 0 + max: 4 + COM_PARACHUTE: + description: + short: Require MAVLink parachute system to be present and healthy + type: boolean + default: 0 + COM_ARM_CHK_ESCS: + description: + short: Enable checks on ESCs that report telemetry + long: |- + If this parameter is set, the system will check ESC's online status and failures. + This param is specific for ESCs reporting status. It shall be used only if ESCs support telemetry. + type: boolean + default: 0 + COM_PREARM_MODE: + description: + short: Condition to enter prearmed mode + long: |- + Condition to enter the prearmed state, an intermediate state between disarmed and armed + in which non-throttling actuators are active. + type: enum + values: + 0: Disabled + 1: Safety button + 2: Always + default: 0 + COM_FORCE_SAFETY: + description: + short: Enable force safety + long: Force safety when the vehicle disarms + type: boolean + default: 0 + COM_CPU_MAX: + description: + short: Maximum allowed CPU load to still arm + long: |- + The check fails if the CPU load is above this threshold for 2s. + + A negative value disables the check. + type: float + default: 95.0 + unit: '%' + min: -1 + max: 100 + increment: 1 + COM_RAM_MAX: + description: + short: Maximum allowed RAM usage to pass checks + long: |- + The check fails if the RAM usage is above this threshold. + + A negative value disables the check. + type: float + default: 95.0 + unit: '%' + min: -1 + max: 100 + increment: 1 + COM_POWER_COUNT: + description: + short: Required number of redundant power modules + long: |- + This configures a check to verify the expected number of 5V rail power supplies are present. By default only one is expected. + Note: CBRK_SUPPLY_CHK disables all power checks including this one. + type: int32 + default: 1 + min: 0 + max: 4 + COM_ARM_HFLT_CHK: + description: + short: Enable FMU SD card hardfault / watchdog detection check + long: |- + This check detects if there are hardfault / watchdog files present on the + SD card. If so, and the parameter is enabled, arming is prevented. + type: boolean + default: 1 + COM_ARM_ODID: + description: + short: Open Drone ID system check and in-flight failsafe + long: Actions other than warning also prevent arming. + type: enum + values: + 0: Disabled + 1: Warning only + 2: Error only + 3: Return + 4: Land + 5: Terminate + default: 0 + COM_ARM_TRAFF: + description: + short: Enable Traffic Avoidance system detection check + long: |- + This check detects if a traffic avoidance system (ADSB/FLARM transponder) + is missing. Depending on the value of the parameter, the check can be + disabled, warn only, or deny arming. + type: enum + values: + 0: Disabled + 1: Warning only + 2: Enforce for all modes + 3: Enforce for mission modes only + default: 0 + COM_SPOOLUP_TIME: + description: + short: Enforced delay between arming and further navigation + long: |- + The minimal time from arming the motors until moving the vehicle is possible is COM_SPOOLUP_TIME seconds. + Goal: + - Motors and propellers spool up to idle speed before getting commanded to spin faster + - Timeout for ESCs and smart batteries to successfulyy do failure checks + e.g. for stuck rotors before the vehicle is off the ground + type: float + default: 1.0 + min: 0 + max: 30 + decimal: 1 + increment: 0.1 + unit: s + COM_WIND_WARN: + description: + short: Wind speed warning threshold + long: |- + A warning is triggered if the currently estimated wind speed is above this value. + Warning is sent periodically (every 1 minute). + + Set to -1 to disable. + type: float + default: -1.0 + min: -1 + decimal: 1 + increment: 0.1 + unit: m/s + COM_FLT_TIME_MAX: + description: + short: Maximum allowed flight time + long: |- + The vehicle aborts the current operation and returns to launch when + the time since takeoff is above this value. It is not possible to resume the + mission or switch to any auto mode other than RTL or Land. Taking over in any manual + mode is still possible. + + Starting from 90% of the maximum flight time, a warning message will be sent + every 1 minute with the remaining time until automatic RTL. + + Set to -1 to disable. + type: int32 + default: -1 + unit: s + min: -1 + COM_WIND_MAX: + description: + short: High wind speed failsafe threshold + long: |- + Wind speed threshold above which an automatic failsafe action is triggered. + Failsafe action can be specified with COM_WIND_MAX_ACT. + type: float + default: -1.0 + min: -1 + decimal: 1 + increment: 0.1 + unit: m/s + COM_WIND_MAX_ACT: + description: + short: High wind failsafe mode + long: |- + Action the system takes when a wind speed above the specified threshold is detected. + See COM_WIND_MAX to set the failsafe threshold. + If enabled, it is not possible to resume the mission or switch to any auto mode other than + RTL or Land if this threshold is exceeded. Taking over in any manual + mode is still possible. + type: enum + values: + 0: None + 1: Warning + 2: Hold + 3: Return + 4: Terminate + 5: Land + default: 0 + increment: 1 + COM_POS_LOW_EPH: + description: + short: Low position accuracy failsafe threshold + long: |- + This triggers the action specified in COM_POS_LOW_ACT if the estimated position accuracy is below this threshold. + Local position has to be still declared valid, which requires some kind of velocity aiding or large dead-reckoning time (EKF2_NOAID_TOUT), + and a high failsafe threshold (COM_POS_FS_EPH). + + Set to -1 to disable. + type: float + default: -1.0 + min: -1 + max: 1000 + unit: m + COM_POS_LOW_ACT: + description: + short: Low position accuracy action + long: |- + Action the system takes when the estimated position has an accuracy below the specified threshold. + See COM_POS_LOW_EPH to set the failsafe threshold. + The failsafe action is only executed if the vehicle is in auto mission or auto loiter mode, + otherwise it is only a warning. + type: enum + values: + 0: None + 1: Warning + 2: Hold + 3: Return + 4: Terminate + 5: Land + default: 3 + increment: 1 + COM_ARMABLE: + description: + short: Flag to allow arming + long: Set 0 to prevent accidental use of the vehicle e.g. for safety or maintenance + reasons. + type: enum + values: + 0: Disallow arming + 1: Allow arming + default: 1 + COM_ARM_BAT_MIN: + description: + short: Minimum battery level for arming + long: |- + Threshold for battery percentage below arming is prohibited. + + A negative value means BAT_CRIT_THR is the threshold. + type: float + default: -1.0 + unit: norm + min: -1 + max: 0.9 + decimal: 2 + increment: 0.01 + COM_THROW_EN: + description: + short: Enable throw-start + long: Allows to start the vehicle by throwing it into the air. + type: boolean + default: 0 + COM_THROW_SPEED: + description: + short: Minimum speed for the throw start + long: |- + When the throw launch is enabled, the drone will only allow motors to spin after this speed + is exceeded before detecting the freefall. This is a safety feature to ensure the drone does + not turn on after accidental drop or a rapid movement before the throw. + + Set to 0 to disable. + type: float + default: 5 + min: 0 + decimal: 1 + increment: 0.1 + unit: m/s + COM_FLTT_LOW_ACT: + description: + short: Remaining flight time low failsafe + long: |- + Action the system takes when the remaining flight time is below + the estimated time it takes to reach the RTL destination. + type: enum + values: + 0: None + 1: Warning + 3: Return + default: 0 + increment: 1 + COM_MODE_ARM_CHK: + description: + short: Allow external mode registration while armed + long: By default disabled for safety reasons + type: boolean + default: 0 +- group: Radio Calibration + definitions: + TRIM_ROLL: + description: + short: Roll trim + long: |- + The trim value is the actuator control value the system needs + for straight and level flight. + type: float + default: 0.0 + min: -0.5 + max: 0.5 + decimal: 2 + increment: 0.01 + TRIM_PITCH: + description: + short: Pitch trim + long: |- + The trim value is the actuator control value the system needs + for straight and level flight. + type: float + default: 0.0 + min: -0.5 + max: 0.5 + decimal: 2 + increment: 0.01 + TRIM_YAW: + description: + short: Yaw trim + long: |- + The trim value is the actuator control value the system needs + for straight and level flight. + type: float + default: 0.0 + min: -0.5 + max: 0.5 + decimal: 2 + increment: 0.01 diff --git a/src/modules/commander/failsafe/failsafe.cpp b/src/modules/commander/failsafe/failsafe.cpp index b0c19db29b..a086a574df 100644 --- a/src/modules/commander/failsafe/failsafe.cpp +++ b/src/modules/commander/failsafe/failsafe.cpp @@ -126,33 +126,6 @@ FailsafeBase::ActionOptions Failsafe::fromGfActParam(int param_value) return options; } -FailsafeBase::ActionOptions Failsafe::fromImbalancedPropActParam(int param_value) -{ - ActionOptions options{}; - - switch (imbalanced_propeller_failsafe_mode(param_value)) { - case imbalanced_propeller_failsafe_mode::Disabled: - default: - options.action = Action::None; - break; - - case imbalanced_propeller_failsafe_mode::Warning: - options.action = Action::Warn; - break; - - case imbalanced_propeller_failsafe_mode::Return: - options.action = Action::RTL; - options.clear_condition = ClearCondition::OnModeChangeOrDisarm; - break; - - case imbalanced_propeller_failsafe_mode::Land: - options.action = Action::Land; - options.clear_condition = ClearCondition::OnModeChangeOrDisarm; - break; - } - - return options; -} FailsafeBase::ActionOptions Failsafe::fromActuatorFailureActParam(int param_value) { @@ -442,6 +415,38 @@ FailsafeBase::ActionOptions Failsafe::fromRemainingFlightTimeLowActParam(int par return options; } +FailsafeBase::ActionOptions Failsafe::fromOdidFailActParam(int param_value) +{ + ActionOptions options{}; + + switch (open_drone_id_failsafe_mode(param_value)) { + case open_drone_id_failsafe_mode::Return_mode: + options.action = Action::RTL; + options.clear_condition = ClearCondition::OnModeChangeOrDisarm; + break; + + case open_drone_id_failsafe_mode::Land_mode: + options.action = Action::Land; + options.clear_condition = ClearCondition::OnModeChangeOrDisarm; + break; + + case open_drone_id_failsafe_mode::Terminate: + options.allow_user_takeover = UserTakeoverAllowed::Never; + options.action = Action::Terminate; + options.clear_condition = ClearCondition::Never; + break; + + case open_drone_id_failsafe_mode::None: + case open_drone_id_failsafe_mode::Warning: + case open_drone_id_failsafe_mode::Error: + default: + options.action = Action::None; + break; + } + + return options; +} + bool Failsafe::isFailsafeIgnored(uint8_t user_intended_mode, int32_t exception_mask_parameter) { switch (user_intended_mode) { @@ -510,7 +515,7 @@ void Failsafe::checkStateAndMode(const hrt_abstime &time_us, const State &state, || state.user_intended_mode == vehicle_status_s::NAVIGATION_STATE_AUTO_PRECLAND; const bool dll_loss_ignored = isFailsafeIgnored(state.user_intended_mode, _param_com_dll_except.get()) - || ignore_any_link_loss_vtol_takeoff_fixedwing || dll_loss_ignored_land; + || ignore_any_link_loss_vtol_takeoff_fixedwing || dll_loss_ignored_land || !state.armed; if (_param_nav_dll_act.get() != int32_t(gcs_connection_loss_failsafe_mode::Disabled) && !dll_loss_ignored) { CHECK_FAILSAFE(status_flags, gcs_connection_lost, fromNavDllOrRclActParam(_param_nav_dll_act.get()).causedBy(Cause::GCSConnectionLoss)); @@ -565,15 +570,23 @@ void Failsafe::checkStateAndMode(const hrt_abstime &time_us, const State &state, CHECK_FAILSAFE(status_flags, battery_low_remaining_time, ActionOptions(fromRemainingFlightTimeLowActParam(_param_com_fltt_low_act.get()))); - if ((_armed_time != 0) - && (time_us < _armed_time + static_cast(_param_com_spoolup_time.get() * 1_s)) - ) { + const hrt_abstime spoolup = static_cast(_param_com_spoolup_time.get() * 1_s); + + if ((_armed_time != 0) && (time_us < _armed_time + spoolup)) { CHECK_FAILSAFE(status_flags, battery_unhealthy, ActionOptions(Action::Disarm).cannotBeDeferred()); } else { CHECK_FAILSAFE(status_flags, battery_unhealthy, Action::Warn); } + // Parachute system health failsafe + CHECK_FAILSAFE(status_flags, parachute_unhealthy, Action::RTL); + + // Remote ID (Open Drone ID) loss failsafe + if (state.armed && _param_com_arm_odid.get() >= int32_t(open_drone_id_failsafe_mode::Return_mode)) { + CHECK_FAILSAFE(status_flags, remote_id_unhealthy, fromOdidFailActParam(_param_com_arm_odid.get())); + } + // Battery low failsafe // If battery was low and arming was allowed through COM_ARM_BAT_MIN, don't failsafe immediately for the current low battery warning state const bool warning_worse_than_at_arming = (status_flags.battery_warning > _battery_warning_at_arming); @@ -604,9 +617,7 @@ void Failsafe::checkStateAndMode(const hrt_abstime &time_us, const State &state, // Handle fails during spoolup just after arming - if ((_armed_time != 0) - && (time_us < _armed_time + static_cast(_param_com_spoolup_time.get() * 1_s)) - ) { + if ((_armed_time != 0) && (time_us < _armed_time + spoolup)) { _last_state_fd_esc_arming = checkFailsafe(_caller_id_fd_esc_arming, _last_state_fd_esc_arming, status_flags.fd_esc_arming_failure, ActionOptions(Action::Disarm).cannotBeDeferred()); @@ -616,20 +627,20 @@ void Failsafe::checkStateAndMode(const hrt_abstime &time_us, const State &state, } // Handle fails during the early takeoff phase - if ((_armed_time != 0) - && (time_us < _armed_time - + static_cast((_param_com_lkdown_tko.get() + _param_com_spoolup_time.get()) * 1_s)) - ) { + if ((_armed_time != 0) && (time_us < _armed_time + spoolup + 3_s)) { CHECK_FAILSAFE(status_flags, fd_critical_failure, ActionOptions(Action::Disarm).cannotBeDeferred()); + CHECK_FAILSAFE(status_flags, fd_alt_loss, ActionOptions(Action::Disarm).cannotBeDeferred()); } else if (!circuit_breaker_enabled_by_val(_param_cbrk_flightterm.get(), CBRK_FLIGHTTERM_KEY)) { CHECK_FAILSAFE(status_flags, fd_critical_failure, ActionOptions(Action::Terminate).cannotBeDeferred()); + CHECK_FAILSAFE(status_flags, fd_alt_loss, ActionOptions(Action::Terminate).cannotBeDeferred()); } else { CHECK_FAILSAFE(status_flags, fd_critical_failure, Action::Warn); + CHECK_FAILSAFE(status_flags, fd_alt_loss, Action::Warn); } - CHECK_FAILSAFE(status_flags, fd_imbalanced_prop, fromImbalancedPropActParam(_param_com_imb_prop_act.get())); + CHECK_FAILSAFE(status_flags, fd_imbalanced_prop, Action::Warn); CHECK_FAILSAFE(status_flags, fd_motor_failure, fromActuatorFailureActParam(_param_com_actuator_failure_act.get())); diff --git a/src/modules/commander/failsafe/failsafe.h b/src/modules/commander/failsafe/failsafe.h index d5b3f0a79e..dc7974a830 100644 --- a/src/modules/commander/failsafe/failsafe.h +++ b/src/modules/commander/failsafe/failsafe.h @@ -88,13 +88,6 @@ private: Terminate = 4, }; - enum class imbalanced_propeller_failsafe_mode : int32_t { - Disabled = -1, - Warning = 0, - Return = 1, - Land = 2, - }; - enum class geofence_violation_action : int32_t { None = 0, Warning = 1, @@ -157,10 +150,18 @@ private: Return_mode = 3 }; + enum class open_drone_id_failsafe_mode : int32_t { + None = 0, + Warning = 1, + Error = 2, + Return_mode = 3, + Land_mode = 4, + Terminate = 5, + }; + static ActionOptions fromNavDllOrRclActParam(int param_value); static ActionOptions fromGfActParam(int param_value); - static ActionOptions fromImbalancedPropActParam(int param_value); static ActionOptions fromActuatorFailureActParam(int param_value); static ActionOptions fromBatteryWarningActParam(int param_value, uint8_t battery_warning); static ActionOptions fromQuadchuteActParam(int param_value); @@ -168,6 +169,7 @@ private: static ActionOptions fromHighWindLimitActParam(int param_value); static ActionOptions fromPosLowActParam(int param_value); static ActionOptions fromRemainingFlightTimeLowActParam(int param_value); + static ActionOptions fromOdidFailActParam(int param_value); static bool isFailsafeIgnored(uint8_t user_intended_mode, int32_t exception_mask_parameter); @@ -200,8 +202,6 @@ private: (ParamInt) _param_com_rc_in_mode, (ParamInt) _param_gf_action, (ParamFloat) _param_com_spoolup_time, - (ParamInt) _param_com_imb_prop_act, - (ParamFloat) _param_com_lkdown_tko, (ParamInt) _param_cbrk_flightterm, (ParamInt) _param_com_actuator_failure_act, (ParamInt) _param_com_low_bat_act, @@ -209,7 +209,8 @@ private: (ParamInt) _param_com_qc_act, (ParamInt) _param_com_wind_max_act, (ParamInt) _param_com_fltt_low_act, - (ParamInt) _param_com_pos_low_act + (ParamInt) _param_com_pos_low_act, + (ParamInt) _param_com_arm_odid ); }; diff --git a/src/modules/commander/failure_detector/CMakeLists.txt b/src/modules/commander/failure_detector/CMakeLists.txt index e6cd9d57c8..9e391573b9 100644 --- a/src/modules/commander/failure_detector/CMakeLists.txt +++ b/src/modules/commander/failure_detector/CMakeLists.txt @@ -35,3 +35,8 @@ px4_add_library(failure_detector FailureDetector.cpp FailureInjector.cpp ) +set_property(GLOBAL APPEND PROPERTY PX4_MODULE_CONFIG_FILES ${CMAKE_CURRENT_SOURCE_DIR}/failure_detector_params.yaml) + +px4_add_functional_gtest(SRC FailureDetectorAltitudeLossTest.cpp + LINKLIBS failure_detector hysteresis +) diff --git a/src/modules/commander/failure_detector/FailureDetector.cpp b/src/modules/commander/failure_detector/FailureDetector.cpp index cbba4c68e0..eb5a50967e 100644 --- a/src/modules/commander/failure_detector/FailureDetector.cpp +++ b/src/modules/commander/failure_detector/FailureDetector.cpp @@ -39,6 +39,7 @@ */ #include "FailureDetector.hpp" +#include "../HealthAndArmingChecks/HealthAndArmingChecks.hpp" using namespace time_literals; @@ -55,6 +56,7 @@ bool FailureDetector::update(const vehicle_status_s &vehicle_status, const vehic if (vehicle_control_mode.flag_control_attitude_enabled) { updateAttitudeStatus(vehicle_status); + updateAltitudeStatus(vehicle_status, vehicle_control_mode); if (_param_fd_ext_ats_en.get()) { updateExternalAtsStatus(); @@ -65,21 +67,9 @@ bool FailureDetector::update(const vehicle_status_s &vehicle_status, const vehic _failure_detector_status.flags.pitch = false; _failure_detector_status.flags.alt = false; _failure_detector_status.flags.ext = false; - } - - // esc_status subscriber is shared between subroutines - esc_status_s esc_status; - - if (_esc_status_sub.update(&esc_status)) { - _failure_injector.manipulateEscStatus(esc_status); - - if (_param_escs_en.get()) { - updateEscsStatus(vehicle_status, esc_status); - } - - if (_param_fd_act_en.get()) { - updateMotorStatus(vehicle_status, esc_status); - } + // Reset altitude loss state so it reinitialises cleanly when altitude control re-engages. + _alt_loss_ref_z = NAN; + _alt_loss_hysteresis.set_state_and_update(false, hrt_absolute_time()); } if (_param_fd_imb_prop_thr.get() > 0) { @@ -89,19 +79,19 @@ bool FailureDetector::update(const vehicle_status_s &vehicle_status, const vehic return _failure_detector_status.value != status_prev.value; } -void FailureDetector::publishStatus() +void FailureDetector::publishStatus(bool esc_arm_status, uint16_t motor_failure_mask) { failure_detector_status_s failure_detector_status{}; failure_detector_status.fd_roll = _failure_detector_status.flags.roll; failure_detector_status.fd_pitch = _failure_detector_status.flags.pitch; failure_detector_status.fd_alt = _failure_detector_status.flags.alt; failure_detector_status.fd_ext = _failure_detector_status.flags.ext; - failure_detector_status.fd_arm_escs = _failure_detector_status.flags.arm_escs; + failure_detector_status.fd_arm_escs = esc_arm_status || (motor_failure_mask != 0); failure_detector_status.fd_battery = _failure_detector_status.flags.battery; failure_detector_status.fd_imbalanced_prop = _failure_detector_status.flags.imbalanced_prop; - failure_detector_status.fd_motor = _failure_detector_status.flags.motor; + failure_detector_status.fd_motor = (motor_failure_mask != 0); failure_detector_status.imbalanced_prop_metric = _imbalanced_prop_lpf.getState(); - failure_detector_status.motor_failure_mask = _motor_failure_mask; + failure_detector_status.motor_failure_mask = motor_failure_mask; failure_detector_status.motor_stop_mask = _failure_injector.getMotorStopMask(); failure_detector_status.timestamp = hrt_absolute_time(); _failure_detector_status_pub.publish(failure_detector_status); @@ -155,6 +145,55 @@ void FailureDetector::updateAttitudeStatus(const vehicle_status_s &vehicle_statu } } +void FailureDetector::updateAltitudeStatus(const vehicle_status_s &vehicle_status, + const vehicle_control_mode_s &vehicle_control_mode) +{ + const float threshold = _param_fd_alt_loss.get(); + + if (threshold < FLT_EPSILON + || !vehicle_control_mode.flag_control_altitude_enabled + || vehicle_status.vehicle_type != vehicle_status_s::VEHICLE_TYPE_ROTARY_WING) { + _failure_detector_status.flags.alt = false; + _alt_loss_ref_z = NAN; + return; + } + + vehicle_local_position_s lpos{}; + vehicle_local_position_setpoint_s lpos_sp{}; + _vehicle_local_position_sub.copy(&lpos); + _vehicle_local_position_setpoint_sub.copy(&lpos_sp); + + // Adjust reference on EKF z reset to avoid false triggers + if (lpos.z_reset_counter != _alt_loss_z_reset_counter) { + if (PX4_ISFINITE(_alt_loss_ref_z)) { + _alt_loss_ref_z += lpos.delta_z; + } + + _alt_loss_z_reset_counter = lpos.z_reset_counter; + } + + const hrt_abstime now = hrt_absolute_time(); + + if (lpos.z > lpos_sp.z) { + // Ratcheting NED-z reference: tracks the highest altitude reached while below setpoint. + if (!PX4_ISFINITE(_alt_loss_ref_z)) { + _alt_loss_ref_z = lpos.z; + } + + _alt_loss_ref_z = math::constrain(_alt_loss_ref_z, lpos_sp.z, lpos.z); + + const bool is_below_threshold = (lpos.z - _alt_loss_ref_z) > threshold; + _alt_loss_hysteresis.set_hysteresis_time_from(false, (hrt_abstime)(1_s * _param_fd_alt_loss_ttri.get())); + _alt_loss_hysteresis.set_state_and_update(is_below_threshold, now); + + } else { + _alt_loss_ref_z = NAN; + _alt_loss_hysteresis.set_state_and_update(false, now); + } + + _failure_detector_status.flags.alt = _alt_loss_hysteresis.get_state(); +} + void FailureDetector::updateExternalAtsStatus() { pwm_input_s pwm_input; @@ -172,34 +211,6 @@ void FailureDetector::updateExternalAtsStatus() } } -void FailureDetector::updateEscsStatus(const vehicle_status_s &vehicle_status, const esc_status_s &esc_status) -{ - hrt_abstime now = hrt_absolute_time(); - - if (vehicle_status.arming_state == vehicle_status_s::ARMING_STATE_ARMED) { - const int limited_esc_count = math::min(esc_status.esc_count, esc_status_s::CONNECTED_ESC_MAX); - const int all_escs_armed_mask = (1 << limited_esc_count) - 1; - const bool is_all_escs_armed = (all_escs_armed_mask == esc_status.esc_armed_flags); - - bool is_esc_failure = !is_all_escs_armed; - - for (int i = 0; i < limited_esc_count; i++) { - is_esc_failure = is_esc_failure || (esc_status.esc[i].failures > 0); - } - - _esc_failure_hysteresis.set_hysteresis_time_from(false, 300_ms); - _esc_failure_hysteresis.set_state_and_update(is_esc_failure, now); - - if (_esc_failure_hysteresis.get_state()) { - _failure_detector_status.flags.arm_escs = true; - } - - } else { - // reset ESC bitfield - _esc_failure_hysteresis.set_state_and_update(false, now); - _failure_detector_status.flags.arm_escs = false; - } -} void FailureDetector::updateImbalancedPropStatus() { @@ -258,82 +269,3 @@ void FailureDetector::updateImbalancedPropStatus() } } } - -void FailureDetector::updateMotorStatus(const vehicle_status_s &vehicle_status, const esc_status_s &esc_status) -{ - // 1. Telemetry times out -> communication or power lost on that ESC - // 2. Too low current draw compared to commanded thrust - // Overvoltage, overcurrent do not have checks yet esc_report.failures are handled separately - - const hrt_abstime now = hrt_absolute_time(); - - // Only check while armed - if (vehicle_status.arming_state == vehicle_status_s::ARMING_STATE_ARMED) { - actuator_motors_s actuator_motors{}; - _actuator_motors_sub.copy(&actuator_motors); - - // Check individual ESC reports - for (uint8_t i = 0; i < esc_status_s::CONNECTED_ESC_MAX; ++i) { - // Map the esc status index to the actuator function index - const uint8_t actuator_function_index = - esc_status.esc[i].actuator_function - actuator_motors_s::ACTUATOR_FUNCTION_MOTOR1; - - if (actuator_function_index >= actuator_motors_s::NUM_CONTROLS) { - continue; // Invalid mapping - } - - const bool timeout = now > esc_status.esc[i].timestamp + 300_ms; - const float current = esc_status.esc[i].esc_current; - - // First wait for ESC telemetry reporting non-zero current. Before that happens, don't check it. - if (current > FLT_EPSILON) { - _esc_has_reported_current[i] = true; - } - - if (!_esc_has_reported_current[i]) { - continue; - } - - _motor_failure_mask &= ~(1u << actuator_function_index); // Reset bit in mask to accumulate failures again - _motor_failure_mask |= (static_cast(timeout) << actuator_function_index); // Telemetry timeout - - // Current limits - float thrust = 0.f; - - if (PX4_ISFINITE(actuator_motors.control[actuator_function_index])) { - // Normalized motor thrust commands before thrust model factor is applied, NAN means motor is turned off -> 0 thrust - thrust = fabsf(actuator_motors.control[actuator_function_index]); - } - - bool thrust_above_threshold = thrust > _param_fd_act_mot_thr.get(); - bool current_too_low = current < (thrust * _param_fd_act_mot_c2t.get()) - _param_fd_act_low_off.get(); - bool current_too_high = current > (thrust * _param_fd_act_mot_c2t.get()) + _param_fd_act_high_off.get(); - - _esc_undercurrent_hysteresis[i].set_hysteresis_time_from(false, _param_fd_act_mot_tout.get() * 1_ms); - _esc_overcurrent_hysteresis[i].set_hysteresis_time_from(false, _param_fd_act_mot_tout.get() * 1_ms); - - if (!_esc_undercurrent_hysteresis[i].get_state()) { - // Do not clear mid operation because a reaction could be to stop the motor and that would be conidered healthy again - _esc_undercurrent_hysteresis[i].set_state_and_update(thrust_above_threshold && current_too_low && !timeout, now); - } - - if (!_esc_overcurrent_hysteresis[i].get_state()) { - // Do not clear mid operation because a reaction could be to stop the motor and that would be conidered healthy again - _esc_overcurrent_hysteresis[i].set_state_and_update(current_too_high && !timeout, now); - } - - _motor_failure_mask |= (static_cast(_esc_undercurrent_hysteresis[i].get_state()) << actuator_function_index); - _motor_failure_mask |= (static_cast(_esc_overcurrent_hysteresis[i].get_state()) << actuator_function_index); - } - - _failure_detector_status.flags.motor = (_motor_failure_mask != 0u); - - } else { // Disarmed - for (uint8_t i = 0; i < esc_status_s::CONNECTED_ESC_MAX; ++i) { - _esc_undercurrent_hysteresis[i].set_state_and_update(false, now); - _esc_overcurrent_hysteresis[i].set_state_and_update(false, now); - } - - _failure_detector_status.flags.motor = false; - } -} diff --git a/src/modules/commander/failure_detector/FailureDetector.hpp b/src/modules/commander/failure_detector/FailureDetector.hpp index 26182f4c3c..0d14036da6 100644 --- a/src/modules/commander/failure_detector/FailureDetector.hpp +++ b/src/modules/commander/failure_detector/FailureDetector.hpp @@ -53,8 +53,6 @@ // subscriptions #include #include -#include -#include #include #include #include @@ -62,6 +60,8 @@ #include #include #include +#include +#include #include union failure_detector_status_u { @@ -70,10 +70,8 @@ union failure_detector_status_u { uint16_t pitch : 1; uint16_t alt : 1; uint16_t ext : 1; - uint16_t arm_escs : 1; uint16_t battery : 1; uint16_t imbalanced_prop : 1; - uint16_t motor : 1; } flags; uint16_t value {0}; }; @@ -89,39 +87,37 @@ public: bool update(const vehicle_status_s &vehicle_status, const vehicle_control_mode_s &vehicle_control_mode); const failure_detector_status_u &getStatus() const { return _failure_detector_status; } - void publishStatus(); + void publishStatus(bool esc_arm_status, uint16_t motor_failure_mask); private: void updateAttitudeStatus(const vehicle_status_s &vehicle_status); + void updateAltitudeStatus(const vehicle_status_s &vehicle_status, + const vehicle_control_mode_s &vehicle_control_mode); void updateExternalAtsStatus(); - void updateEscsStatus(const vehicle_status_s &vehicle_status, const esc_status_s &esc_status); - void updateMotorStatus(const vehicle_status_s &vehicle_status, const esc_status_s &esc_status); void updateImbalancedPropStatus(); failure_detector_status_u _failure_detector_status{}; systemlib::Hysteresis _roll_failure_hysteresis{false}; systemlib::Hysteresis _pitch_failure_hysteresis{false}; + systemlib::Hysteresis _alt_loss_hysteresis{false}; systemlib::Hysteresis _ext_ats_failure_hysteresis{false}; - systemlib::Hysteresis _esc_failure_hysteresis{false}; + + float _alt_loss_ref_z{NAN}; // ratcheting NED-z reference for altitude loss detection + uint8_t _alt_loss_z_reset_counter{0}; // tracks EKF z resets to avoid false altitude loss triggers static constexpr float _imbalanced_prop_lpf_time_constant{5.f}; AlphaFilter _imbalanced_prop_lpf{}; uint32_t _selected_accel_device_id{0}; hrt_abstime _imu_status_timestamp_prev{0}; - // Motor failure check - bool _esc_has_reported_current[esc_status_s::CONNECTED_ESC_MAX] {}; // true if ESC reported non-zero current before (some never report any) - systemlib::Hysteresis _esc_undercurrent_hysteresis[esc_status_s::CONNECTED_ESC_MAX]; - systemlib::Hysteresis _esc_overcurrent_hysteresis[esc_status_s::CONNECTED_ESC_MAX]; - uint16_t _motor_failure_mask = 0; // actuator function indexed uORB::Subscription _vehicle_attitude_sub{ORB_ID(vehicle_attitude)}; - uORB::Subscription _esc_status_sub{ORB_ID(esc_status)}; // TODO: multi-instance + uORB::Subscription _vehicle_local_position_sub{ORB_ID(vehicle_local_position)}; + uORB::Subscription _vehicle_local_position_setpoint_sub{ORB_ID(vehicle_local_position_setpoint)}; uORB::Subscription _pwm_input_sub{ORB_ID(pwm_input)}; uORB::Subscription _sensor_selection_sub{ORB_ID(sensor_selection)}; uORB::Subscription _vehicle_imu_status_sub{ORB_ID(vehicle_imu_status)}; - uORB::Subscription _actuator_motors_sub{ORB_ID(actuator_motors)}; uORB::Publication _failure_detector_status_pub{ORB_ID(failure_detector_status)}; @@ -134,15 +130,8 @@ private: (ParamFloat) _param_fd_fail_p_ttri, (ParamBool) _param_fd_ext_ats_en, (ParamInt) _param_fd_ext_ats_trig, - (ParamInt) _param_escs_en, (ParamInt) _param_fd_imb_prop_thr, - - // Actuator failure - (ParamBool) _param_fd_act_en, - (ParamFloat) _param_fd_act_mot_thr, - (ParamFloat) _param_fd_act_mot_c2t, - (ParamInt) _param_fd_act_mot_tout, - (ParamFloat) _param_fd_act_low_off, - (ParamFloat) _param_fd_act_high_off + (ParamFloat) _param_fd_alt_loss, + (ParamFloat) _param_fd_alt_loss_ttri ) }; diff --git a/src/modules/commander/failure_detector/FailureDetectorAltitudeLossTest.cpp b/src/modules/commander/failure_detector/FailureDetectorAltitudeLossTest.cpp new file mode 100644 index 0000000000..aebd2025e4 --- /dev/null +++ b/src/modules/commander/failure_detector/FailureDetectorAltitudeLossTest.cpp @@ -0,0 +1,162 @@ +/**************************************************************************** + * + * Copyright (c) 2026 PX4 Development Team. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name PX4 nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +#include + +#include "FailureDetector.hpp" + +#include +#include +#include + +// to run: make tests TESTFILTER=FailureDetectorAltitudeLossTest + +using namespace time_literals; + +class FailureDetectorAltitudeLossTest : public ::testing::Test +{ +public: + void SetUp() override + { + param_control_autosave(false); + + // FD_ALT_LOSS = 5m, FD_ALT_LOSS_T = 0s + param_t param = param_handle(px4::params::FD_ALT_LOSS); + float threshold = 5.f; + param_set(param, &threshold); + + param = param_handle(px4::params::FD_ALT_LOSS_T); + float ttri = 0.f; + param_set(param, &ttri); + } + + // Publish position and setpoint, then run the detector. Returns the alt flag state. + bool update(float lpos_z, float lpos_sp_z, float delta_z = 0.f, uint8_t z_reset_counter = 0) + { + vehicle_local_position_s lpos{}; + lpos.timestamp = hrt_absolute_time(); + lpos.z = lpos_z; + lpos.z_valid = true; + lpos.delta_z = delta_z; + lpos.z_reset_counter = z_reset_counter; + _lpos_pub.publish(lpos); + + vehicle_local_position_setpoint_s lpos_sp{}; + lpos_sp.timestamp = hrt_absolute_time(); + lpos_sp.z = lpos_sp_z; + _lpos_sp_pub.publish(lpos_sp); + + vehicle_status_s status{}; + status.vehicle_type = vehicle_status_s::VEHICLE_TYPE_ROTARY_WING; + + vehicle_control_mode_s control_mode{}; + control_mode.flag_control_attitude_enabled = true; + control_mode.flag_control_altitude_enabled = true; + + _fd.update(status, control_mode); + + return _fd.getStatus().flags.alt; + } + +private: + FailureDetector _fd{nullptr}; + + uORB::Publication _lpos_pub{ORB_ID(vehicle_local_position)}; + uORB::Publication _lpos_sp_pub{ORB_ID(vehicle_local_position_setpoint)}; +}; + +TEST_F(FailureDetectorAltitudeLossTest, NoTriggerWhenDisabled) +{ + param_t param = param_handle(px4::params::FD_ALT_LOSS); + float threshold = 0.f; + param_set(param, &threshold); + + EXPECT_FALSE(update(-90.f, -100.f)); +} + +TEST_F(FailureDetectorAltitudeLossTest, NoTriggerAboveSetpoint) +{ + EXPECT_FALSE(update(-105.f, -100.f)); +} + +TEST_F(FailureDetectorAltitudeLossTest, NoTriggerWithinThreshold) +{ + // 3m below setpoint, threshold is 5m + EXPECT_FALSE(update(-97.f, -100.f)); +} + +TEST_F(FailureDetectorAltitudeLossTest, TriggerAfterSustainedDrop) +{ + // Ratchet initialises at -97; vehicle sinks to -91 (6m drop exceeds 5m threshold) + EXPECT_FALSE(update(-97.f, -100.f)); // 0m drop + EXPECT_FALSE(update(-95.f, -100.f)); // 2m drop + EXPECT_FALSE(update(-93.f, -100.f)); // 4m drop + EXPECT_TRUE(update(-91.f, -100.f)); // 6m drop, triggers +} + +TEST_F(FailureDetectorAltitudeLossTest, RatchetHoldsOnPartialRecovery) +{ + // Ratchet tracks the best recovery point and is not reset by a partial climb + EXPECT_FALSE(update(-96.f, -100.f)); // ratchet = -96, drop = 0m + EXPECT_FALSE(update(-94.f, -100.f)); // ratchet = -96, drop = 2m + EXPECT_FALSE(update(-96.f, -100.f)); // partial recovery, ratchet stays at -96, drop = 0m + EXPECT_FALSE(update(-95.f, -100.f)); // ratchet = -96, drop = 1m + EXPECT_TRUE(update(-90.f, -100.f)); // ratchet = -96, drop = 6m, triggers +} + +TEST_F(FailureDetectorAltitudeLossTest, ResetWhenBackAboveSetpoint) +{ + // After triggering, climbing above setpoint clears the flag and resets the ratchet + EXPECT_FALSE(update(-97.f, -100.f)); + EXPECT_TRUE(update(-91.f, -100.f)); + + EXPECT_FALSE(update(-101.f, -100.f)); // above setpoint, resets + + EXPECT_FALSE(update(-97.f, -100.f)); // ratchet reinitialises at -97, drop = 0m + EXPECT_FALSE(update(-95.f, -100.f)); // drop = 2m, no trigger +} + +TEST_F(FailureDetectorAltitudeLossTest, NoTriggerOnEkfZReset) +{ + // EKF resets z by 6m downward; reference shifts with it so the drop stays 0m. + EXPECT_FALSE(update(-97.f, -100.f)); // ratchet = -97, drop = 0m + EXPECT_FALSE(update(-91.f, -100.f, 6.f, 1)); // EKF reset: ref shifts to -91, drop = 0m +} + +TEST_F(FailureDetectorAltitudeLossTest, NoTriggerOnSetpointJump) +{ + // Setpoint jumps 10m higher; vehicle position unchanged so ratchet stays at -97, drop = 0m. + EXPECT_FALSE(update(-97.f, -100.f)); // ratchet = -97, drop = 0m + EXPECT_FALSE(update(-97.f, -110.f)); // setpoint jumps, vehicle 13m below sp, but drop = 0m + EXPECT_FALSE(update(-97.f, -110.f)); // vehicle holds position, no trigger +} diff --git a/src/modules/commander/failure_detector/FailureInjector.cpp b/src/modules/commander/failure_detector/FailureInjector.cpp index e1633500c3..9bbab47342 100644 --- a/src/modules/commander/failure_detector/FailureInjector.cpp +++ b/src/modules/commander/failure_detector/FailureInjector.cpp @@ -33,6 +33,7 @@ #include "FailureInjector.hpp" +#include #include #include @@ -53,15 +54,15 @@ void FailureInjector::update() vehicle_command_s vehicle_command; while (_vehicle_command_sub.update(&vehicle_command)) { - const int failure_unit = static_cast(vehicle_command.param1 + 0.5f); - const int failure_type = static_cast(vehicle_command.param2 + 0.5f); + const int failure_unit = static_cast(lroundf(vehicle_command.param1)); + const int failure_type = static_cast(lroundf(vehicle_command.param2)); if (vehicle_command.command != vehicle_command_s::VEHICLE_CMD_INJECT_FAILURE || failure_unit != vehicle_command_s::FAILURE_UNIT_SYSTEM_MOTOR) { continue; } - const int instance = static_cast(vehicle_command.param3 + 0.5f); + const int instance = static_cast(lroundf(vehicle_command.param3)); bool supported = false; for (int i = 0; i < esc_status_s::CONNECTED_ESC_MAX; i++) { diff --git a/src/modules/commander/failure_detector/failure_detector_params.c b/src/modules/commander/failure_detector/failure_detector_params.c deleted file mode 100644 index 9324820472..0000000000 --- a/src/modules/commander/failure_detector/failure_detector_params.c +++ /dev/null @@ -1,244 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2018 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file failure_detector_params.c - * - * Parameters used by the Failure Detector. - * - * @author Mathieu Bresciani - */ - -#include -#include - -/** - * FailureDetector Max Roll - * - * Maximum roll angle before FailureDetector triggers the attitude_failure flag. - * The flag triggers flight termination (if @CBRK_FLIGHTTERM = 0), - * which sets outputs to their failsafe values. - * On takeoff the flag triggers lockdown (irrespective of @CBRK_FLIGHTTERM), - * which disarms motors but does not set outputs to failsafe values. - * - * Setting this parameter to 0 disables the check - * - * @min 0 - * @max 180 - * @unit deg - * @group Failure Detector - */ -PARAM_DEFINE_INT32(FD_FAIL_R, 60); - -/** - * FailureDetector Max Pitch - * - * Maximum pitch angle before FailureDetector triggers the attitude_failure flag. - * The flag triggers flight termination (if @CBRK_FLIGHTTERM = 0), - * which sets outputs to their failsafe values. - * On takeoff the flag triggers lockdown (irrespective of @CBRK_FLIGHTTERM), - * which disarms motors but does not set outputs to failsafe values. - * - * Setting this parameter to 0 disables the check - * - * @min 0 - * @max 180 - * @unit deg - * @group Failure Detector - */ -PARAM_DEFINE_INT32(FD_FAIL_P, 60); - -/** - * Roll failure trigger time - * - * Seconds (decimal) that roll has to exceed FD_FAIL_R before being considered as a failure. - * - * @unit s - * @min 0.02 - * @max 5 - * @decimal 2 - * - * @group Failure Detector - */ -PARAM_DEFINE_FLOAT(FD_FAIL_R_TTRI, 0.3); - -/** - * Pitch failure trigger time - * - * Seconds (decimal) that pitch has to exceed FD_FAIL_P before being considered as a failure. - * - * @unit s - * @min 0.02 - * @max 5 - * @decimal 2 - * - * @group Failure Detector - */ -PARAM_DEFINE_FLOAT(FD_FAIL_P_TTRI, 0.3); - -/** - * Enable PWM input on for engaging failsafe from an external automatic trigger system (ATS). - * - * Enabled on either AUX5 or MAIN5 depending on board. - * External ATS is required by ASTM F3322-18. - * - * @boolean - * @reboot_required true - * @group Failure Detector - */ -PARAM_DEFINE_INT32(FD_EXT_ATS_EN, 0); - -/** - * The PWM threshold from external automatic trigger system for engaging failsafe. - * - * External ATS is required by ASTM F3322-18. - * - * @unit us - * @decimal 2 - * - * @group Failure Detector - */ -PARAM_DEFINE_INT32(FD_EXT_ATS_TRIG, 1900); - -/** - * Enable checks on ESCs that report their arming state. - * - * If enabled, failure detector will verify that all the ESCs have successfully armed when the vehicle has transitioned to the armed state. - * Timeout for receiving an acknowledgement from the ESCs is 0.3s, if no feedback is received the failure detector will auto disarm the vehicle. - * - * @boolean - * - * @group Failure Detector - */ -PARAM_DEFINE_INT32(FD_ESCS_EN, 1); - -/** - * Imbalanced propeller check threshold - * - * Value at which the imbalanced propeller metric (based on horizontal and - * vertical acceleration variance) triggers a failure - * - * Setting this value to 0 disables the feature. - * - * @min 0 - * @max 1000 - * @increment 1 - * @group Failure Detector - */ -PARAM_DEFINE_INT32(FD_IMB_PROP_THR, 30); - -/** - * Enable Actuator Failure check - * - * If enabled, failure detector will verify that for motors, a minimum amount of ESC current per throttle - * level is being consumed. - * Otherwise this indicates an motor failure. - * - * @boolean - * @reboot_required true - * - * @group Failure Detector - */ -PARAM_DEFINE_INT32(FD_ACT_EN, 0); - -/** - * Motor Failure Thrust Threshold - * - * Failure detection per motor only triggers above this thrust value. - * Set to 1 to disable the detection. - * - * @group Failure Detector - * @unit norm - * @min 0.0 - * @max 1.0 - * @decimal 2 - * @increment 0.01 - */ -PARAM_DEFINE_FLOAT(FD_ACT_MOT_THR, 0.2f); - -/** - * Motor Failure Current/Throttle Scale - * - * Determines the slope between expected steady state current and linearized, normalized thrust command. - * E.g. FD_ACT_MOT_C2T A represents the expected steady state current at 100%. - * FD_ACT_LOW_OFF and FD_ACT_HIGH_OFF offset the threshold from that slope. - * - * @group Failure Detector - * @min 0.0 - * @max 50.0 - * @unit A/% - * @decimal 2 - * @increment 1 - */ -PARAM_DEFINE_FLOAT(FD_ACT_MOT_C2T, 35.f); - -/** - * Motor Failure Hysteresis Time - * - * Motor failure only triggers after current thresholds are exceeded for this time. - * - * @group Failure Detector - * @unit ms - * @min 10 - * @max 10000 - * @increment 100 - */ -PARAM_DEFINE_INT32(FD_ACT_MOT_TOUT, 1000); - -/** - * Undercurrent motor failure limit offset - * - * threshold = FD_ACT_MOT_C2T * thrust - FD_ACT_LOW_OFF - * - * @group Failure Detector - * @min 0 - * @max 30 - * @unit A - * @decimal 2 - * @increment 1 - */ -PARAM_DEFINE_FLOAT(FD_ACT_LOW_OFF, 10.f); - -/** - * Overcurrent motor failure limit offset - * - * threshold = FD_ACT_MOT_C2T * thrust + FD_ACT_HIGH_OFF - * - * @group Failure Detector - * @min 0 - * @max 30 - * @unit A - * @decimal 2 - * @increment 1 - */ -PARAM_DEFINE_FLOAT(FD_ACT_HIGH_OFF, 10.f); diff --git a/src/modules/commander/failure_detector/failure_detector_params.yaml b/src/modules/commander/failure_detector/failure_detector_params.yaml new file mode 100644 index 0000000000..597067d88b --- /dev/null +++ b/src/modules/commander/failure_detector/failure_detector_params.yaml @@ -0,0 +1,116 @@ +module_name: failure_detector +parameters: +- group: Failure Detector + definitions: + FD_FAIL_R: + description: + short: FailureDetector Max Roll + long: |- + Maximum roll angle before FailureDetector triggers the attitude_failure flag. + The flag triggers flight termination (if @CBRK_FLIGHTTERM = 0), + which sets outputs to their failsafe values. + On takeoff the flag triggers lockdown (irrespective of @CBRK_FLIGHTTERM), + which disarms motors but does not set outputs to failsafe values. + + Setting this parameter to 0 disables the check + type: int32 + default: 60 + min: 0 + max: 180 + unit: deg + FD_FAIL_P: + description: + short: FailureDetector Max Pitch + long: |- + Maximum pitch angle before FailureDetector triggers the attitude_failure flag. + The flag triggers flight termination (if @CBRK_FLIGHTTERM = 0), + which sets outputs to their failsafe values. + On takeoff the flag triggers lockdown (irrespective of @CBRK_FLIGHTTERM), + which disarms motors but does not set outputs to failsafe values. + + Setting this parameter to 0 disables the check + type: int32 + default: 60 + min: 0 + max: 180 + unit: deg + FD_FAIL_R_TTRI: + description: + short: Roll failure trigger time + long: Seconds (decimal) that roll has to exceed FD_FAIL_R before being considered + as a failure. + type: float + default: 0.3 + unit: s + min: 0.02 + max: 5 + decimal: 2 + FD_FAIL_P_TTRI: + description: + short: Pitch failure trigger time + long: Seconds (decimal) that pitch has to exceed FD_FAIL_P before being considered + as a failure. + type: float + default: 0.3 + unit: s + min: 0.02 + max: 5 + decimal: 2 + FD_EXT_ATS_EN: + description: + short: Enable PWM input from external ATS for failsafe + long: |- + Enable PWM input on for engaging failsafe from an external automatic trigger system (ATS) + + Enabled on either AUX5 or MAIN5 depending on board. + External ATS is required by ASTM F3322-18. + type: boolean + default: 0 + reboot_required: true + FD_EXT_ATS_TRIG: + description: + short: External ATS PWM threshold for failsafe + long: |- + The PWM threshold from external automatic trigger system for engaging failsafe + + External ATS is required by ASTM F3322-18. + type: int32 + default: 1900 + unit: us + decimal: 2 + FD_IMB_PROP_THR: + description: + short: Imbalanced propeller check threshold + long: |- + Value at which the imbalanced propeller metric (based on horizontal and + vertical acceleration variance) triggers a failure + + Setting this value to 0 disables the feature. + type: int32 + default: 30 + min: 0 + max: 1000 + increment: 1 + FD_ALT_LOSS: + description: + short: Altitude loss threshold for termination and parachute deployment + long: |- + Maximum altitude loss below the setpoint allowed before the vehicle terminates and deploys the parachute. Set to 0 to disable. + type: float + default: 0.0 + min: 0.0 + max: 200.0 + unit: m + decimal: 1 + increment: 0.5 + FD_ALT_LOSS_T: + description: + short: Altitude loss failure trigger time + long: |- + Seconds that the altitude loss threshold must be exceeded before the failure is declared. + type: float + default: 1.0 + min: 0.02 + max: 5.0 + unit: s + decimal: 2 diff --git a/src/modules/commander/gyro_calibration.cpp b/src/modules/commander/gyro_calibration.cpp index 676b05297b..df3c07e3ea 100644 --- a/src/modules/commander/gyro_calibration.cpp +++ b/src/modules/commander/gyro_calibration.cpp @@ -59,6 +59,8 @@ #include #include +using namespace time_literals; + static constexpr char sensor_name[] {"gyro"}; static constexpr unsigned MAX_GYROS = 4; @@ -91,12 +93,24 @@ static calibrate_return gyro_calibration_worker(gyro_worker_data_t &worker_data) /* use slowest gyro to pace, but count correctly per-gyro for statistics */ unsigned slow_count = 0; + hrt_abstime last_cancel_check = hrt_absolute_time(); while (slow_count < CALIBRATION_COUNT) { - if (calibrate_cancel_check(worker_data.mavlink_log_pub, calibration_started)) { - return calibrate_return_cancelled; + // Throttle cancel check — calibrate_cancel_check() creates a new + // uORB::Subscription each call, triggering an O(n) topic lookup. + // At high sensor rates this dominates CPU. Check at most every 200ms. + if (hrt_elapsed_time(&last_cancel_check) > 200_ms) { + last_cancel_check = hrt_absolute_time(); + + if (calibrate_cancel_check(worker_data.mavlink_log_pub, calibration_started)) { + return calibrate_return_cancelled; + } } + // Yield CPU — updatedBlocking() returns immediately when data is + // already available, so with high-rate sensors the loop never blocks. + px4_usleep(1000); + if (gyro_sub[0].updatedBlocking(100000)) { unsigned update_count = CALIBRATION_COUNT; diff --git a/src/modules/commander/lm_fit.cpp b/src/modules/commander/lm_fit.cpp index 866fa6f071..e6ae8467ea 100644 --- a/src/modules/commander/lm_fit.cpp +++ b/src/modules/commander/lm_fit.cpp @@ -55,7 +55,7 @@ void lm_sphere_fit_iteration(const float x[], const float y[], const float z[], float residual = 0.0f; // Gauss Newton Part common for all kind of extensions including LM - for (uint16_t k = 0; k < samples_collected; k++) { + for (size_t k = 0; k < samples_collected; k++) { float sphere_jacob[4]; //Calculate Jacobian @@ -118,7 +118,7 @@ void lm_sphere_fit_iteration(const float x[], const float y[], const float z[], } // Calculate mean squared residuals - for (uint16_t k = 0; k < samples_collected; k++) { + for (size_t k = 0; k < samples_collected; k++) { float A = (params.diag(0) * (x[k] - fit1_params[1])) + (params.offdiag(0) * (y[k] - fit1_params[2])) + (params.offdiag(1) * (z[k] + fit1_params[3])); @@ -188,7 +188,7 @@ void lm_ellipsoid_fit_iteration(const float x[], const float y[], const float z[ float ellipsoid_jacob[9]; // Gauss Newton Part common for all kind of extensions including LM - for (uint16_t k = 0; k < samples_collected; k++) { + for (size_t k = 0; k < samples_collected; k++) { // Calculate Jacobian float A = (params.diag(0) * (x[k] - params.offset(0))) + (params.offdiag(0) * (y[k] - params.offset(1))) + @@ -255,7 +255,7 @@ void lm_ellipsoid_fit_iteration(const float x[], const float y[], const float z[ } // Calculate mean squared residuals - for (uint16_t k = 0; k < samples_collected; k++) { + for (size_t k = 0; k < samples_collected; k++) { float A = (fit1_params[3] * (x[k] - fit1_params[0])) + (fit1_params[6] * (y[k] - fit1_params[1])) + (fit1_params[7] * (z[k] - fit1_params[2])); float B = (fit1_params[6] * (x[k] - fit1_params[0])) + (fit1_params[4] * (y[k] - fit1_params[1])) + (fit1_params[8] * diff --git a/src/modules/commander/mag_calibration.cpp b/src/modules/commander/mag_calibration.cpp index 0cecec7139..a3b9c9aa0c 100644 --- a/src/modules/commander/mag_calibration.cpp +++ b/src/modules/commander/mag_calibration.cpp @@ -278,14 +278,22 @@ static calibrate_return mag_calibration_worker(detect_orientation_return orienta uORB::SubscriptionBlocking gyro_sub{ORB_ID(sensor_gyro)}; + hrt_abstime last_cancel_check = hrt_absolute_time(); + while (fabsf(gyro_x_integral) < gyro_int_thresh_rad && fabsf(gyro_y_integral) < gyro_int_thresh_rad && fabsf(gyro_z_integral) < gyro_int_thresh_rad) { - /* abort on request */ - if (calibrate_cancel_check(worker_data->mavlink_log_pub, calibration_started)) { - result = calibrate_return_cancelled; - return result; + // Throttle cancel check — calibrate_cancel_check() creates a new + // uORB::Subscription each call, triggering an O(n) topic lookup. + // At high sensor rates this dominates CPU. Check at most every 200ms. + if (hrt_elapsed_time(&last_cancel_check) > 200_ms) { + last_cancel_check = hrt_absolute_time(); + + if (calibrate_cancel_check(worker_data->mavlink_log_pub, calibration_started)) { + result = calibrate_return_cancelled; + return result; + } } /* abort with timeout */ @@ -297,6 +305,10 @@ static calibrate_return mag_calibration_worker(detect_orientation_return orienta } /* Wait clocking for new data on all gyro */ + // Yield CPU — updateBlocking() returns immediately when data is + // already available, so with high-rate sensors the loop never blocks. + px4_usleep(1000); + sensor_gyro_s gyro; if (gyro_sub.updateBlocking(gyro, 1000_ms)) { @@ -326,14 +338,27 @@ static calibrate_return mag_calibration_worker(detect_orientation_return orienta unsigned poll_errcount = 0; unsigned calibration_counter_side = 0; + last_cancel_check = hrt_absolute_time(); + while (hrt_absolute_time() < calibration_deadline && calibration_counter_side < worker_data->calibration_points_perside) { - if (calibrate_cancel_check(worker_data->mavlink_log_pub, calibration_started)) { - result = calibrate_return_cancelled; - break; + // Throttle cancel check — calibrate_cancel_check() creates a new + // uORB::Subscription each call, triggering an O(n) topic lookup. + // At high sensor rates this dominates CPU. Check at most every 200ms. + if (hrt_elapsed_time(&last_cancel_check) > 200_ms) { + last_cancel_check = hrt_absolute_time(); + + if (calibrate_cancel_check(worker_data->mavlink_log_pub, calibration_started)) { + result = calibrate_return_cancelled; + break; + } } + // Yield CPU — updatedBlocking() returns immediately when data is + // already available, so with high-rate sensors the loop never blocks. + px4_usleep(1000); + if (mag_sub[0].updatedBlocking(1000_ms)) { bool rejected = false; Vector3f new_samples[MAX_MAGS] {}; diff --git a/src/modules/control_allocator/ControlAllocator.cpp b/src/modules/control_allocator/ControlAllocator.cpp index ee4f27519e..39642bf71d 100644 --- a/src/modules/control_allocator/ControlAllocator.cpp +++ b/src/modules/control_allocator/ControlAllocator.cpp @@ -76,8 +76,6 @@ ControlAllocator::ControlAllocator() : } parameters_updated(); - - _slew_limited_ice_shedding_output.setSlewRate(ICE_SHEDDING_MAX_SLEWRATE); } ControlAllocator::~ControlAllocator() @@ -439,6 +437,11 @@ ControlAllocator::Run() _actuator_effectiveness->updateSetpoint(c[i], i, _control_allocation[i]->_actuator_sp, _control_allocation[i]->getActuatorMin(), _control_allocation[i]->getActuatorMax()); + if (i == 0) { + // The motors are always in allocation 0 + handle_stopped_motors(now); + } + if (_has_slew_rate) { _control_allocation[i]->applySlewRateLimit(dt); } @@ -598,6 +601,33 @@ ControlAllocator::update_effectiveness_matrix_if_needed(EffectivenessUpdateReaso } } + +void +ControlAllocator::handle_stopped_motors(const hrt_abstime now) +{ + const ActuatorBitmask stopped_motors_due_to_effectiveness = _actuator_effectiveness->getStoppedMotors(); + + const ActuatorBitmask stopped_motors = stopped_motors_due_to_effectiveness + | _handled_motor_failure_bitmask + | _motor_stop_mask; + + // Handle stopped motors by setting NaN + const unsigned int allocation_index = 0; // Motors always in allocation 0 + _control_allocation[allocation_index]->applyNanToActuators(stopped_motors); + + // Apply ice shedding, which applies _only_ to stopped motors + const bool any_stopped_motor_failed = 0 != (stopped_motors_due_to_effectiveness & (_handled_motor_failure_bitmask | _motor_stop_mask)); + const float ice_shedding_output = get_ice_shedding_output(now); + + if (ice_shedding_output > FLT_EPSILON && !any_stopped_motor_failed) { + for (int motors_idx = 0; motors_idx < _num_actuators[allocation_index] && motors_idx < actuator_motors_s::NUM_CONTROLS; motors_idx++) { + if (stopped_motors & 1u << motors_idx) { + _control_allocation[allocation_index]->_actuator_sp(motors_idx) = ice_shedding_output; + } + } + } +} + void ControlAllocator::publish_control_allocator_status(int matrix_index) { @@ -652,7 +682,7 @@ ControlAllocator::publish_control_allocator_status(int matrix_index) } float -ControlAllocator::get_ice_shedding_output(hrt_abstime now, bool any_stopped_motor_failed) +ControlAllocator::get_ice_shedding_output(hrt_abstime now) { const float period_sec = _param_ice_shedding_period.get(); @@ -662,26 +692,18 @@ ControlAllocator::get_ice_shedding_output(hrt_abstime now, bool any_stopped_moto // If any stopped motor has failed, the feature will create much more // torque than in the nominal case, and becomes pointless anyway as we // cannot go back to multicopter - const bool apply_shedding = _is_vtol && in_forward_flight && !any_stopped_motor_failed; + const bool apply_shedding = _is_vtol && in_forward_flight; if (feature_disabled_by_param || !apply_shedding) { - // Bypass slew limit and immediately set zero, to not - // interfere with backtransition in any way - _slew_limited_ice_shedding_output.setForcedValue(0.0f); + return 0.0f; } else { - // Raw square wave output + // Square wave output const float elapsed_in_period = fmodf(static_cast(now) / 1_s, period_sec); - const float raw_ice_shedding_output = elapsed_in_period < ICE_SHEDDING_ON_SEC ? ICE_SHEDDING_OUTPUT : 0.0f; + const float ice_shedding_output = elapsed_in_period < ICE_SHEDDING_ON_SEC ? ICE_SHEDDING_OUTPUT : 0.0f; - // Apply slew rate limit - const float dt = static_cast(now - _last_ice_shedding_update) / 1_s; - _slew_limited_ice_shedding_output.update(raw_ice_shedding_output, dt); + return ice_shedding_output; } - - _last_ice_shedding_update = now; - - return _slew_limited_ice_shedding_output.getState(); } void @@ -704,16 +726,6 @@ ControlAllocator::publish_actuator_controls() int actuator_idx = 0; int actuator_idx_matrix[ActuatorEffectiveness::MAX_NUM_MATRICES] {}; - const uint32_t stopped_motors_due_to_effectiveness = _actuator_effectiveness->getStoppedMotors(); - - const uint32_t stopped_motors = stopped_motors_due_to_effectiveness - | _handled_motor_failure_bitmask - | _motor_stop_mask; - - const bool any_stopped_motor_failed = 0 != (stopped_motors_due_to_effectiveness & (_handled_motor_failure_bitmask | _motor_stop_mask)); - - const float ice_shedding_output = get_ice_shedding_output(actuator_motors.timestamp, any_stopped_motor_failed); - // motors int motors_idx; @@ -721,15 +733,6 @@ ControlAllocator::publish_actuator_controls() int selected_matrix = _control_allocation_selection_indexes[actuator_idx]; float actuator_sp = _control_allocation[selected_matrix]->getActuatorSetpoint()(actuator_idx_matrix[selected_matrix]); actuator_motors.control[motors_idx] = PX4_ISFINITE(actuator_sp) ? actuator_sp : NAN; - - if (stopped_motors & (1u << motors_idx)) { - actuator_motors.control[motors_idx] = NAN; - - if (ice_shedding_output > FLT_EPSILON) { - actuator_motors.control[motors_idx] = ice_shedding_output; - } - } - ++actuator_idx_matrix[selected_matrix]; ++actuator_idx; } diff --git a/src/modules/control_allocator/ControlAllocator.hpp b/src/modules/control_allocator/ControlAllocator.hpp index bd9c8b726d..99420ee95a 100644 --- a/src/modules/control_allocator/ControlAllocator.hpp +++ b/src/modules/control_allocator/ControlAllocator.hpp @@ -91,12 +91,12 @@ public: static constexpr int MAX_NUM_MOTORS = actuator_motors_s::NUM_CONTROLS; static constexpr int MAX_NUM_SERVOS = actuator_servos_s::NUM_CONTROLS; - static constexpr float ICE_SHEDDING_MAX_SLEWRATE = 0.1f; static constexpr float ICE_SHEDDING_ON_SEC = 2.0f; static constexpr float ICE_SHEDDING_OUTPUT = 0.01f; using ActuatorVector = ActuatorEffectiveness::ActuatorVector; + using ActuatorBitmask = ActuatorEffectiveness::ActuatorBitmask; ControlAllocator(); @@ -146,7 +146,9 @@ private: void publish_actuator_controls(); - float get_ice_shedding_output(hrt_abstime now, bool any_stopped_motor_failed); + void handle_stopped_motors(const hrt_abstime now); + + float get_ice_shedding_output(hrt_abstime now); AllocationMethod _allocation_method_id{AllocationMethod::NONE}; ControlAllocation *_control_allocation[ActuatorEffectiveness::MAX_NUM_MATRICES] {}; ///< class for control allocation calculations @@ -184,8 +186,15 @@ private: int _num_actuators[(int)ActuatorType::COUNT] {}; // Inputs + // + // Torque and thrust setpoints are usually published together. + // Only torque drives the callback so control allocation runs once, then Run() reads the latest thrust. + // Refs: + // - https://github.com/PX4/PX4-Autopilot/pull/24955 + // - https://github.com/PX4/PX4-Autopilot/issues/24230 + // - https://github.com/PX4/PX4-Autopilot/issues/26971 uORB::SubscriptionCallbackWorkItem _vehicle_torque_setpoint_sub{this, ORB_ID(vehicle_torque_setpoint)}; /**< vehicle torque setpoint subscription */ - uORB::Subscription _vehicle_thrust_setpoint_sub{ORB_ID(vehicle_thrust_setpoint)}; /**< vehicle thrust setpoint subscription */ + uORB::Subscription _vehicle_thrust_setpoint_sub{ORB_ID(vehicle_thrust_setpoint)}; /**< vehicle thrust setpoint subscription, polled when torque is triggered*/ uORB::Subscription _vehicle_torque_setpoint1_sub{ORB_ID(vehicle_torque_setpoint), 1}; /**< vehicle torque setpoint subscription (2. instance) */ uORB::Subscription _vehicle_thrust_setpoint1_sub{ORB_ID(vehicle_thrust_setpoint), 1}; /**< vehicle thrust setpoint subscription (2. instance) */ @@ -225,9 +234,6 @@ private: bool _has_slew_rate{false}; - SlewRate _slew_limited_ice_shedding_output; - hrt_abstime _last_ice_shedding_update{}; - DEFINE_PARAMETERS( (ParamInt) _param_ca_airframe, (ParamInt) _param_ca_method, diff --git a/src/modules/control_allocator/VehicleActuatorEffectiveness/ActuatorEffectivenessCustom.hpp b/src/modules/control_allocator/VehicleActuatorEffectiveness/ActuatorEffectivenessCustom.hpp index e2f5d4dfa6..2ae810bf6d 100644 --- a/src/modules/control_allocator/VehicleActuatorEffectiveness/ActuatorEffectivenessCustom.hpp +++ b/src/modules/control_allocator/VehicleActuatorEffectiveness/ActuatorEffectivenessCustom.hpp @@ -54,5 +54,5 @@ protected: ActuatorEffectivenessRotors _motors; ActuatorEffectivenessControlSurfaces _torque; - uint32_t _motors_mask{}; + ActuatorBitmask _motors_mask{}; }; diff --git a/src/modules/control_allocator/VehicleActuatorEffectiveness/ActuatorEffectivenessFixedWing.hpp b/src/modules/control_allocator/VehicleActuatorEffectiveness/ActuatorEffectivenessFixedWing.hpp index 7e2e7802eb..cc955d1acc 100644 --- a/src/modules/control_allocator/VehicleActuatorEffectiveness/ActuatorEffectivenessFixedWing.hpp +++ b/src/modules/control_allocator/VehicleActuatorEffectiveness/ActuatorEffectivenessFixedWing.hpp @@ -65,5 +65,5 @@ private: int _first_control_surface_idx{0}; ///< applies to matrix 1 - uint32_t _forwards_motors_mask{}; + ActuatorBitmask _forwards_motors_mask{}; }; diff --git a/src/modules/control_allocator/VehicleActuatorEffectiveness/ActuatorEffectivenessRotors.cpp b/src/modules/control_allocator/VehicleActuatorEffectiveness/ActuatorEffectivenessRotors.cpp index b4edd0f2b0..2d3ed43f08 100644 --- a/src/modules/control_allocator/VehicleActuatorEffectiveness/ActuatorEffectivenessRotors.cpp +++ b/src/modules/control_allocator/VehicleActuatorEffectiveness/ActuatorEffectivenessRotors.cpp @@ -224,14 +224,14 @@ ActuatorEffectivenessRotors::computeEffectivenessMatrix(const Geometry &geometry return num_actuators; } -uint32_t ActuatorEffectivenessRotors::updateAxisFromTilts(const ActuatorEffectivenessTilts &tilts, +ActuatorBitmask ActuatorEffectivenessRotors::updateAxisFromTilts(const ActuatorEffectivenessTilts &tilts, float collective_tilt_control) { if (!PX4_ISFINITE(collective_tilt_control)) { collective_tilt_control = -1.f; } - uint32_t nontilted_motors = 0; + ActuatorBitmask nontilted_motors = 0; for (int i = 0; i < _geometry.num_rotors; ++i) { int tilt_index = _geometry.rotors[i].tilt_index; @@ -256,9 +256,9 @@ Vector3f ActuatorEffectivenessRotors::tiltedAxis(float tilt_angle, float tilt_di return Dcmf{Eulerf{0.f, -tilt_angle, tilt_direction}} * axis; } -uint32_t ActuatorEffectivenessRotors::getMotors() const +ActuatorBitmask ActuatorEffectivenessRotors::getMotors() const { - uint32_t motors = 0; + ActuatorBitmask motors = 0; for (int i = 0; i < _geometry.num_rotors; ++i) { motors |= 1u << i; @@ -267,9 +267,9 @@ uint32_t ActuatorEffectivenessRotors::getMotors() const return motors; } -uint32_t ActuatorEffectivenessRotors::getUpwardsMotors() const +ActuatorBitmask ActuatorEffectivenessRotors::getUpwardsMotors() const { - uint32_t upwards_motors = 0; + ActuatorBitmask upwards_motors = 0; for (int i = 0; i < _geometry.num_rotors; ++i) { const Vector3f &axis = _geometry.rotors[i].axis; @@ -282,9 +282,9 @@ uint32_t ActuatorEffectivenessRotors::getUpwardsMotors() const return upwards_motors; } -uint32_t ActuatorEffectivenessRotors::getForwardsMotors() const +ActuatorBitmask ActuatorEffectivenessRotors::getForwardsMotors() const { - uint32_t forward_motors = 0; + ActuatorBitmask forward_motors = 0; for (int i = 0; i < _geometry.num_rotors; ++i) { const Vector3f &axis = _geometry.rotors[i].axis; diff --git a/src/modules/control_allocator/VehicleActuatorEffectiveness/ActuatorEffectivenessRotors.hpp b/src/modules/control_allocator/VehicleActuatorEffectiveness/ActuatorEffectivenessRotors.hpp index c6f0425569..60d9e11973 100644 --- a/src/modules/control_allocator/VehicleActuatorEffectiveness/ActuatorEffectivenessRotors.hpp +++ b/src/modules/control_allocator/VehicleActuatorEffectiveness/ActuatorEffectivenessRotors.hpp @@ -51,6 +51,8 @@ class ActuatorEffectivenessTilts; using namespace time_literals; +using ActuatorBitmask = ActuatorEffectiveness::ActuatorBitmask; + class ActuatorEffectivenessRotors : public ModuleParams, public ActuatorEffectiveness { public: @@ -108,7 +110,7 @@ public: * @param tilt_control current tilt control in [-1, 1] (can be NAN) * @return the motors as bitset which are not tiltable */ - uint32_t updateAxisFromTilts(const ActuatorEffectivenessTilts &tilts, float tilt_control); + ActuatorBitmask updateAxisFromTilts(const ActuatorEffectivenessTilts &tilts, float tilt_control); const Geometry &geometry() const { return _geometry; } @@ -126,9 +128,9 @@ public: void enableThreeDimensionalThrust(bool enable) { _geometry.three_dimensional_thrust_disabled = !enable; } - uint32_t getMotors() const; - uint32_t getUpwardsMotors() const; - uint32_t getForwardsMotors() const; + ActuatorBitmask getMotors() const; + ActuatorBitmask getUpwardsMotors() const; + ActuatorBitmask getForwardsMotors() const; private: void updateParams() override; diff --git a/src/modules/control_allocator/VehicleActuatorEffectiveness/ActuatorEffectivenessRoverAckermann.hpp b/src/modules/control_allocator/VehicleActuatorEffectiveness/ActuatorEffectivenessRoverAckermann.hpp index 82b07733bf..3e6c14f676 100644 --- a/src/modules/control_allocator/VehicleActuatorEffectiveness/ActuatorEffectivenessRoverAckermann.hpp +++ b/src/modules/control_allocator/VehicleActuatorEffectiveness/ActuatorEffectivenessRoverAckermann.hpp @@ -48,5 +48,5 @@ public: const char *name() const override { return "Rover (Ackermann)"; } private: - uint32_t _motors_mask{}; + ActuatorBitmask _motors_mask{}; }; diff --git a/src/modules/control_allocator/VehicleActuatorEffectiveness/ActuatorEffectivenessStandardVTOL.hpp b/src/modules/control_allocator/VehicleActuatorEffectiveness/ActuatorEffectivenessStandardVTOL.hpp index 4879c6b022..3c1ba1f0c8 100644 --- a/src/modules/control_allocator/VehicleActuatorEffectiveness/ActuatorEffectivenessStandardVTOL.hpp +++ b/src/modules/control_allocator/VehicleActuatorEffectiveness/ActuatorEffectivenessStandardVTOL.hpp @@ -84,8 +84,8 @@ private: ActuatorEffectivenessRotors _rotors; ActuatorEffectivenessControlSurfaces _control_surfaces; - uint32_t _upwards_motors_mask{}; - uint32_t _forwards_motors_mask{}; + ActuatorBitmask _upwards_motors_mask{}; + ActuatorBitmask _forwards_motors_mask{}; int _first_control_surface_idx{0}; ///< applies to matrix 1 diff --git a/src/modules/control_allocator/VehicleActuatorEffectiveness/ActuatorEffectivenessTailsitterVTOL.hpp b/src/modules/control_allocator/VehicleActuatorEffectiveness/ActuatorEffectivenessTailsitterVTOL.hpp index c7a588954f..293157d729 100644 --- a/src/modules/control_allocator/VehicleActuatorEffectiveness/ActuatorEffectivenessTailsitterVTOL.hpp +++ b/src/modules/control_allocator/VehicleActuatorEffectiveness/ActuatorEffectivenessTailsitterVTOL.hpp @@ -84,7 +84,7 @@ protected: ActuatorEffectivenessRotors _mc_rotors; ActuatorEffectivenessControlSurfaces _control_surfaces; - uint32_t _forwards_motors_mask{}; + ActuatorBitmask _forwards_motors_mask{}; int _first_control_surface_idx{0}; ///< applies to matrix 1 diff --git a/src/modules/control_allocator/VehicleActuatorEffectiveness/ActuatorEffectivenessTiltrotorVTOL.hpp b/src/modules/control_allocator/VehicleActuatorEffectiveness/ActuatorEffectivenessTiltrotorVTOL.hpp index db7b37304b..4c9a412424 100644 --- a/src/modules/control_allocator/VehicleActuatorEffectiveness/ActuatorEffectivenessTiltrotorVTOL.hpp +++ b/src/modules/control_allocator/VehicleActuatorEffectiveness/ActuatorEffectivenessTiltrotorVTOL.hpp @@ -93,8 +93,8 @@ protected: ActuatorEffectivenessControlSurfaces _control_surfaces; ActuatorEffectivenessTilts _tilts; - uint32_t _motors{}; - uint32_t _untiltable_motors{}; + ActuatorBitmask _motors{}; + ActuatorBitmask _untiltable_motors{}; int _first_control_surface_idx{0}; ///< applies to matrix 1 int _first_tilt_idx{0}; ///< applies to matrix 0 diff --git a/src/modules/control_allocator/VehicleActuatorEffectiveness/ActuatorEffectivenessUUV.hpp b/src/modules/control_allocator/VehicleActuatorEffectiveness/ActuatorEffectivenessUUV.hpp index 78e52c34aa..e4873f38d2 100644 --- a/src/modules/control_allocator/VehicleActuatorEffectiveness/ActuatorEffectivenessUUV.hpp +++ b/src/modules/control_allocator/VehicleActuatorEffectiveness/ActuatorEffectivenessUUV.hpp @@ -62,5 +62,5 @@ public: protected: ActuatorEffectivenessRotors _rotors; - uint32_t _motors_mask{}; + ActuatorBitmask _motors_mask{}; }; diff --git a/src/modules/control_allocator/module.yaml b/src/modules/control_allocator/module.yaml index 93e8c6ddc4..647afefdb3 100644 --- a/src/modules/control_allocator/module.yaml +++ b/src/modules/control_allocator/module.yaml @@ -625,11 +625,9 @@ parameters: description: short: Ice shedding cycle period long: | - Ice shedding prevents ice buildup in VTOL aircraft motors by - periodically spinning inactive rotors. When enabled (period - > 0), every cycle lasts for the defined period and includes - a 2‑second spin at 0.01 motor output. If period <= 0, the - feature is disabled. + Ice shedding prevents ice buildup in VTOL aircraft motors by periodically spinning inactive rotors. + When enabled (period > 0), every cycle lasts for the defined period and includes a 2-second spin at 0.01 motor output. + If period <= 0, the feature is disabled. type: float decimal: 1 unit: s @@ -686,114 +684,133 @@ mixer: - { 'disabled': True, 'default': 0.0 } # yaw - { 'hidden': True, 'min': -1.0, 'max': 1.0, 'default': 0} # flap - { 'hidden': True, 'min': -1.0, 'max': 1.0, 'default': 0} # spoiler + - { 'hidden': True, 'default': 0} # launch-lock 1: # Left Aileron - { 'min': -1.0, 'max': 0.0, 'default': -0.5 } # roll - { 'hidden': True, 'default': 0.0 } # pitch - { 'hidden': True, 'default': 0.0 } # yaw - { 'hidden': False, 'min': -1.0, 'max': 1.0, 'default': 0} # flap - { 'hidden': False, 'min': -1.0, 'max': 1.0, 'default': 0} # spoiler + - { 'hidden': False, 'default': 0} # launch-lock 2: # Right Aileron - { 'min': 0.0, 'max': 1.0, 'default': 0.5 } # roll - { 'hidden': True, 'default': 0.0 } # pitch - { 'hidden': True, 'default': 0.0 } # yaw - { 'hidden': False, 'min': -1.0, 'max': 1.0, 'default': 0} # flap - { 'hidden': False, 'min': -1.0, 'max': 1.0, 'default': 0} # spoiler + - { 'hidden': False, 'default': 0} # launch-lock 3: # Elevator - { 'hidden': True, 'default': 0.0 } # roll - { 'min': 0.0, 'max': 1.0, 'default': 1.0 } # pitch - { 'hidden': True, 'default': 0.0 } # yaw - { 'hidden': False, 'min': -1.0, 'max': 1.0, 'default': 0} # flap - { 'hidden': False, 'min': -1.0, 'max': 1.0, 'default': 0} # spoiler + - { 'hidden': False, 'default': 0} # launch-lock 4: # Rudder - { 'hidden': True, 'default': 0.0 } # roll - { 'hidden': True, 'default': 0.0 } # pitch - { 'min': 0.0, 'max': 1.0, 'default': 1.0 } # yaw - { 'hidden': True, 'min': -1.0, 'max': 1.0, 'default': 0} # flap - { 'hidden': True, 'min': -1.0, 'max': 1.0, 'default': 0} # spoiler + - { 'hidden': False, 'default': 0} # launch-lock 5: # Left Elevon - { 'min': -1.0, 'max': 0.0, 'default': -0.5 } # roll - { 'min': 0.0, 'max': 1.0, 'default': 0.5 } # pitch - { 'hidden': True, 'default': 0.0 } # yaw - { 'hidden': False, 'min': -1.0, 'max': 1.0, 'default': 0} # flap - { 'hidden': False, 'min': -1.0, 'max': 1.0, 'default': 0} # spoiler + - { 'hidden': False, 'default': 0} # launch-lock 6: # Right Elevon - { 'min': 0.0, 'max': 1.0, 'default': 0.5 } # roll - { 'min': 0.0, 'max': 1.0, 'default': 0.5 } # pitch - { 'hidden': True, 'default': 0.0 } # yaw - { 'hidden': False, 'min': -1.0, 'max': 1.0, 'default': 0} # flap - { 'hidden': False, 'min': -1.0, 'max': 1.0, 'default': 0} # spoiler + - { 'hidden': False, 'default': 0} # launch-lock 7: # Left V Tail - { 'hidden': True, 'default': 0.0 } # roll - { 'min': 0.0, 'max': 1.0, 'default': 0.5 } # pitch - { 'min': 0.0, 'max': 1.0, 'default': 0.5 } # yaw - { 'hidden': False, 'min': -1.0, 'max': 1.0, 'default': 0} # flap - { 'hidden': False, 'min': -1.0, 'max': 1.0, 'default': 0} # spoiler + - { 'hidden': False, 'default': 0} # launch-lock 8: # Right V Tail - { 'hidden': True, 'default': 0.0 } # roll - { 'min': 0.0, 'max': 1.0, 'default': 0.5 } # pitch - { 'min': -1.0, 'max': 0.0, 'default': -0.5 } # yaw - { 'hidden': False, 'min': -1.0, 'max': 1.0, 'default': 0} # flap - { 'hidden': False, 'min': -1.0, 'max': 1.0, 'default': 0} # spoiler + - { 'hidden': False, 'default': 0} # launch-lock 9: # Left Flap - { 'hidden': True, 'default': 0.0 } # roll - { 'hidden': True, 'default': 0.0 } # pitch - { 'hidden': True, 'default': 0.0 } # yaw - { 'hidden': False, 'min': -1.0, 'max': 1.0, 'default': 1} # flap - { 'hidden': False, 'min': -1.0, 'max': 1.0, 'default': 0} # spoiler + - { 'hidden': False, 'default': 0} # launch-lock 10: # Right Flap - { 'hidden': True, 'default': 0.0 } # roll - { 'hidden': True, 'default': 0.0 } # pitch - { 'hidden': True, 'default': 0.0 } # yaw - { 'hidden': False, 'min': -1.0, 'max': 1.0, 'default': 1} # flap - { 'hidden': False, 'min': -1.0, 'max': 1.0, 'default': 0} # spoiler + - { 'hidden': False, 'default': 0} # launch-lock 11: # Airbrake - { 'hidden': True, 'default': 0.0 } # roll - { 'hidden': True, 'default': 0.0 } # pitch - { 'hidden': True, 'default': 0.0 } # yaw - { 'hidden': True, 'min': -1.0, 'max': 1.0, 'default': 0} # flap - { 'hidden': True, 'min': -1.0, 'max': 1.0, 'default': 0} # spoiler + - { 'hidden': False, 'default': 0} # launch-lock 12: # Custom - { 'hidden': False, 'default': 0.0 } # roll - { 'hidden': False, 'default': 0.0 } # pitch - { 'hidden': False, 'default': 0.0 } # yaw - { 'hidden': True, 'min': -1.0, 'max': 1.0, 'default': 0} # flap - { 'hidden': True, 'min': -1.0, 'max': 1.0, 'default': 0} # spoiler + - { 'hidden': False, 'default': 0} # launch-lock 13: # Left A Tail - { 'hidden': True, 'default': 0.0 } # roll - { 'min': 0.0, 'max': 1.0, 'default': 0.5 } # pitch - { 'min': -1.0, 'max': 0.0, 'default': -0.5 } # yaw - { 'hidden': False, 'min': -1.0, 'max': 1.0, 'default': 0} # flap - { 'hidden': False, 'min': -1.0, 'max': 1.0, 'default': 0} # spoiler + - { 'hidden': False, 'default': 0} # launch-lock 14: # Right A Tail - { 'hidden': True, 'default': 0.0 } # roll - { 'min': 0.0, 'max': 1.0, 'default': 0.5 } # pitch - { 'min': 0.0, 'max': 1.0, 'default': 0.5 } # yaw - { 'hidden': False, 'min': -1.0, 'max': 1.0, 'default': 0} # flap - { 'hidden': False, 'min': -1.0, 'max': 1.0, 'default': 0} # spoiler + - { 'hidden': False, 'default': 0} # launch-lock 15: # Single Channel Aileron - { 'min': 0.0, 'max': 1.0, 'default': 1.0 } # roll - { 'hidden': True, 'default': 0.0 } # pitch - { 'hidden': True, 'default': 0.0 } # yaw - { 'hidden': True, 'min': -1.0, 'max': 1.0, 'default': 0} # flap - { 'hidden': True, 'min': -1.0, 'max': 1.0, 'default': 0} # spoiler + - { 'hidden': False, 'default': 0} # launch-lock 16: # Steering Wheel - { 'hidden': True, 'default': 0.0 } # roll - { 'hidden': True, 'default': 0.0 } # pitch - { 'hidden': True, 'default': 0.0 } # yaw - { 'hidden': True, 'min': -1.0, 'max': 1.0, 'default': 0} # flap - { 'hidden': True, 'min': -1.0, 'max': 1.0, 'default': 0} # spoiler + - { 'hidden': True, 'default': 0} # launch-lock 17: # Left Spoiler - { 'hidden': True, 'default': 0.0 } # roll - { 'hidden': True, 'default': 0.0 } # pitch - { 'hidden': True, 'default': 0.0 } # yaw - { 'hidden': False, 'min': -1.0, 'max': 1.0, 'default': 0} # flap - { 'hidden': False, 'min': -1.0, 'max': 1.0, 'default': 1} # spoiler + - { 'hidden': False, 'default': 0} # launch-lock 18: # Right Spoiler - { 'hidden': True, 'default': 0.0 } # roll - { 'hidden': True, 'default': 0.0 } # pitch - { 'hidden': True, 'default': 0.0 } # yaw - { 'hidden': False, 'min': -1.0, 'max': 1.0, 'default': 0} # flap - { 'hidden': False, 'min': -1.0, 'max': 1.0, 'default': 1} # spoiler + - { 'hidden': False, 'default': 0} # launch-lock - select_identifier: 'servo-type-tailsitter' # restrict torque based on servo type for tailsitters diff --git a/src/modules/dataman/CMakeLists.txt b/src/modules/dataman/CMakeLists.txt index 6c0a1ab695..a3ca6c3602 100644 --- a/src/modules/dataman/CMakeLists.txt +++ b/src/modules/dataman/CMakeLists.txt @@ -37,4 +37,6 @@ px4_add_module( -Wno-cast-align # TODO: fix and enable SRCS dataman.cpp + MODULE_CONFIG + parameters.yaml ) diff --git a/src/modules/dataman/parameters.c b/src/modules/dataman/parameters.c deleted file mode 100644 index 031fe54463..0000000000 --- a/src/modules/dataman/parameters.c +++ /dev/null @@ -1,48 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2021 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Dataman storage backend - * - * If the board supports persistent storage (i.e., the KConfig variable DATAMAN_PERSISTENT_STORAGE is set), - * the 'Default storage' backend uses a file on persistent storage. If not supported, this backend uses - * non-persistent storage in RAM. - * - * @group System - * @value -1 Dataman disabled - * @value 0 Default storage - * @value 1 RAM storage - * @boolean - * @reboot_required true - */ -PARAM_DEFINE_INT32(SYS_DM_BACKEND, 0); diff --git a/src/modules/dataman/parameters.yaml b/src/modules/dataman/parameters.yaml new file mode 100644 index 0000000000..7b8e497be6 --- /dev/null +++ b/src/modules/dataman/parameters.yaml @@ -0,0 +1,18 @@ +module_name: dataman +parameters: +- group: System + definitions: + SYS_DM_BACKEND: + description: + short: Dataman storage backend + long: |- + If the board supports persistent storage (i.e., the KConfig variable DATAMAN_PERSISTENT_STORAGE is set), + the 'Default storage' backend uses a file on persistent storage. If not supported, this backend uses + non-persistent storage in RAM. + type: enum + values: + -1: Dataman disabled + 0: Default storage + 1: RAM storage + default: 0 + reboot_required: true diff --git a/src/modules/ekf2/CMakeLists.txt b/src/modules/ekf2/CMakeLists.txt index c12d7657ab..1f05add4fc 100644 --- a/src/modules/ekf2/CMakeLists.txt +++ b/src/modules/ekf2/CMakeLists.txt @@ -132,7 +132,6 @@ list(APPEND EKF_SRCS EKF/aid_sources/fake_pos_control.cpp EKF/aid_sources/ZeroGyroUpdate.cpp EKF/aid_sources/ZeroVelocityUpdate.cpp - EKF/aid_sources/zero_innovation_heading_update.cpp ) if(CONFIG_EKF2_AIRSPEED) @@ -221,6 +220,13 @@ if(CONFIG_EKF2_RANGE_FINDER) list(APPEND EKF_MODULE_PARAMS params_range_finder.yaml) endif() +if(CONFIG_EKF2_RANGING_BEACON) + list(APPEND EKF_SRCS + EKF/aid_sources/ranging_beacon/ranging_beacon_control.cpp + ) + list(APPEND EKF_MODULE_PARAMS params_ranging_beacon.yaml) +endif() + if(CONFIG_EKF2_SIDESLIP) list(APPEND EKF_SRCS EKF/aid_sources/sideslip/sideslip_fusion.cpp) list(APPEND EKF_MODULE_PARAMS params_sideslip.yaml) diff --git a/src/modules/ekf2/EKF/CMakeLists.txt b/src/modules/ekf2/EKF/CMakeLists.txt index 7ef54d5995..38dc2718ea 100644 --- a/src/modules/ekf2/EKF/CMakeLists.txt +++ b/src/modules/ekf2/EKF/CMakeLists.txt @@ -53,7 +53,6 @@ list(APPEND EKF_SRCS aid_sources/fake_pos_control.cpp aid_sources/ZeroGyroUpdate.cpp aid_sources/ZeroVelocityUpdate.cpp - aid_sources/zero_innovation_heading_update.cpp ) if(CONFIG_EKF2_AIRSPEED) @@ -126,6 +125,12 @@ if(CONFIG_EKF2_RANGE_FINDER) ) endif() +if(CONFIG_EKF2_RANGING_BEACON) + list(APPEND EKF_SRCS + aid_sources/ranging_beacon/ranging_beacon_control.cpp + ) +endif() + if(CONFIG_EKF2_SIDESLIP) list(APPEND EKF_SRCS aid_sources/sideslip/sideslip_fusion.cpp) endif() diff --git a/src/modules/ekf2/EKF/aid_sources/airspeed/airspeed_fusion.cpp b/src/modules/ekf2/EKF/aid_sources/airspeed/airspeed_fusion.cpp index 49d5b4f396..97f7c32fe3 100644 --- a/src/modules/ekf2/EKF/aid_sources/airspeed/airspeed_fusion.cpp +++ b/src/modules/ekf2/EKF/aid_sources/airspeed/airspeed_fusion.cpp @@ -82,7 +82,9 @@ void Ekf::controlAirDataFusion(const imuSample &imu_delayed) #endif // CONFIG_EKF2_GNSS - if (_params.ekf2_arsp_thr <= 0.f) { + _fc.aspd.available = (_params.ekf2_arsp_thr > 0.f); + + if (!_fc.aspd.intended()) { stopAirspeedFusion(); return; } @@ -94,7 +96,7 @@ void Ekf::controlAirDataFusion(const imuSample &imu_delayed) updateAirspeed(airspeed_sample, _aid_src_airspeed); const bool continuing_conditions_passing = _control_status.flags.in_air && (_control_status.flags.fixed_wing - || _control_status.flags.in_transition_to_fw) + || _control_status.flags.in_transition) && !_control_status.flags.fake_pos; const bool is_airspeed_significant = airspeed_sample.true_airspeed > _params.ekf2_arsp_thr; diff --git a/src/modules/ekf2/EKF/aid_sources/aux_global_position/aux_global_position.cpp b/src/modules/ekf2/EKF/aid_sources/aux_global_position/aux_global_position.cpp index ec3525c091..9ff7d45993 100644 --- a/src/modules/ekf2/EKF/aid_sources/aux_global_position/aux_global_position.cpp +++ b/src/modules/ekf2/EKF/aid_sources/aux_global_position/aux_global_position.cpp @@ -132,6 +132,19 @@ bool AuxGlobalPosition::anySourceFusing() const return false; } +uint8_t AuxGlobalPosition::sourceFusingBitmask() const +{ + uint8_t mask = 0; + + for (int i = 0; i < MAX_AGP_IDS; i++) { + if (_sources[i] && _sources[i]->isFusing()) { + mask |= (1u << i); + } + } + + return mask; +} + int32_t AuxGlobalPosition::getAgpParamInt32(const char *param_suffix, int instance) const { char param_name[20] {}; diff --git a/src/modules/ekf2/EKF/aid_sources/aux_global_position/aux_global_position.hpp b/src/modules/ekf2/EKF/aid_sources/aux_global_position/aux_global_position.hpp index 4b30f5d9d7..fb1d1421b6 100644 --- a/src/modules/ekf2/EKF/aid_sources/aux_global_position/aux_global_position.hpp +++ b/src/modules/ekf2/EKF/aid_sources/aux_global_position/aux_global_position.hpp @@ -67,6 +67,7 @@ public: */ float testRatioFiltered() const; bool anySourceFusing() const; + uint8_t sourceFusingBitmask() const; int32_t getIdParam(int instance); void setIdParam(int instance, int32_t sensor_id); int mapSensorIdToSlot(int32_t sensor_id); diff --git a/src/modules/ekf2/EKF/aid_sources/aux_global_position/aux_global_position_control.cpp b/src/modules/ekf2/EKF/aid_sources/aux_global_position/aux_global_position_control.cpp index 3a790cd8f0..0487691dd8 100644 --- a/src/modules/ekf2/EKF/aid_sources/aux_global_position/aux_global_position_control.cpp +++ b/src/modules/ekf2/EKF/aid_sources/aux_global_position/aux_global_position_control.cpp @@ -99,11 +99,13 @@ void AgpSource::bufferData(const aux_global_position_s &msg, const estimator::im bool AgpSource::update(Ekf &ekf, const estimator::imuSample &imu_delayed) { + ekf._fc.agp[_slot].available = (_params.ctrl != 0); + AuxGlobalPositionSample sample; if (_buffer.pop_first_older_than(imu_delayed.time_us, &sample)) { - if (!(_params.ctrl & static_cast(Ctrl::kHPos))) { + if (!ekf._fc.agp[_slot].intended()) { return true; } diff --git a/src/modules/ekf2/EKF/aid_sources/barometer/baro_height_control.cpp b/src/modules/ekf2/EKF/aid_sources/barometer/baro_height_control.cpp index b7b45d5ced..cf623bc7b6 100644 --- a/src/modules/ekf2/EKF/aid_sources/barometer/baro_height_control.cpp +++ b/src/modules/ekf2/EKF/aid_sources/barometer/baro_height_control.cpp @@ -40,6 +40,8 @@ void Ekf::controlBaroHeightFusion(const imuSample &imu_sample) { + _fc.baro.available = (_params.ekf2_baro_ctrl != 0); + static constexpr const char *HGT_SRC_NAME = "baro"; auto &aid_src = _aid_src_baro_hgt; @@ -111,7 +113,7 @@ void Ekf::controlBaroHeightFusion(const imuSample &imu_sample) } // determine if we should use height aiding - const bool continuing_conditions_passing = (_params.ekf2_baro_ctrl == 1) + const bool continuing_conditions_passing = _fc.baro.intended() && measurement_valid && (_baro_counter > _obs_buffer_length) && !_control_status.flags.baro_fault; diff --git a/src/modules/ekf2/EKF/aid_sources/external_vision/ev_control.cpp b/src/modules/ekf2/EKF/aid_sources/external_vision/ev_control.cpp index 8f93f01b76..3d89944c7b 100644 --- a/src/modules/ekf2/EKF/aid_sources/external_vision/ev_control.cpp +++ b/src/modules/ekf2/EKF/aid_sources/external_vision/ev_control.cpp @@ -41,6 +41,8 @@ void Ekf::controlExternalVisionFusion(const imuSample &imu_sample) { + _fc.ev.available = (_params.ekf2_ev_ctrl != 0); + _ev_pos_b_est.predict(_dt_ekf_avg); _ev_hgt_b_est.predict(_dt_ekf_avg); diff --git a/src/modules/ekf2/EKF/aid_sources/external_vision/ev_height_control.cpp b/src/modules/ekf2/EKF/aid_sources/external_vision/ev_height_control.cpp index 5e26b059c8..5f3eee5fe5 100644 --- a/src/modules/ekf2/EKF/aid_sources/external_vision/ev_height_control.cpp +++ b/src/modules/ekf2/EKF/aid_sources/external_vision/ev_height_control.cpp @@ -57,7 +57,7 @@ void Ekf::controlEvHeightFusion(const imuSample &imu_sample, const extVisionSamp Matrix3f pos_cov{matrix::diag(ev_sample.position_var)}; // rotate EV to the EKF reference frame unless we're operating entirely in vision frame - if (!(_control_status.flags.ev_yaw && _control_status.flags.ev_pos)) { + if (!(_control_status.flags.ev_yaw && _control_status.flags.ev_pos) && ev_sample.pos_frame == PositionFrame::LOCAL_FRAME_FRD) { const Quatf q_error(_ev_q_error_filt.getState()); @@ -67,10 +67,9 @@ void Ekf::controlEvHeightFusion(const imuSample &imu_sample, const extVisionSamp pos = R_ev_to_ekf * ev_sample.pos; pos_cov = R_ev_to_ekf * matrix::diag(ev_sample.position_var) * R_ev_to_ekf.transpose(); - // increase minimum variance to include EV orientation variance - // TODO: do this properly - const float orientation_var_max = math::max(ev_sample.orientation_var(0), ev_sample.orientation_var(1)); - pos_cov(2, 2) = math::max(pos_cov(2, 2), orientation_var_max); + // Position variance contribution from orientation uncertainty: δp_z = δθ_roll·py - δθ_pitch·px + pos_cov(2, 2) += sq(ev_sample.pos(1)) * ev_sample.orientation_var(0) // roll + + sq(ev_sample.pos(0)) * ev_sample.orientation_var(1); // pitch } } @@ -102,7 +101,7 @@ void Ekf::controlEvHeightFusion(const imuSample &imu_sample, const extVisionSamp bias_est.fuseBias(measurement + _gpos.altitude(), measurement_var + P(State::pos.idx + 2, State::pos.idx + 2)); } - const bool continuing_conditions_passing = (_params.ekf2_ev_ctrl & static_cast(EvCtrl::VPOS)) + const bool continuing_conditions_passing = _fc.ev.enabled && (_params.ekf2_ev_ctrl & static_cast(EvCtrl::VPOS)) && measurement_valid; const bool starting_conditions_passing = common_starting_conditions_passing diff --git a/src/modules/ekf2/EKF/aid_sources/external_vision/ev_pos_control.cpp b/src/modules/ekf2/EKF/aid_sources/external_vision/ev_pos_control.cpp index 4720824e32..070c2d716f 100644 --- a/src/modules/ekf2/EKF/aid_sources/external_vision/ev_pos_control.cpp +++ b/src/modules/ekf2/EKF/aid_sources/external_vision/ev_pos_control.cpp @@ -49,7 +49,7 @@ void Ekf::controlEvPosFusion(const imuSample &imu_sample, const extVisionSample || (_control_status_prev.flags.yaw_align != _control_status.flags.yaw_align); // determine if we should use EV position aiding - bool continuing_conditions_passing = (_params.ekf2_ev_ctrl & static_cast(EvCtrl::HPOS)) + bool continuing_conditions_passing = _fc.ev.enabled && (_params.ekf2_ev_ctrl & static_cast(EvCtrl::HPOS)) && _control_status.flags.tilt_align && PX4_ISFINITE(ev_sample.pos(0)) && PX4_ISFINITE(ev_sample.pos(1)); @@ -101,13 +101,11 @@ void Ekf::controlEvPosFusion(const imuSample &imu_sample, const extVisionSample pos = R_ev_to_ekf * ev_sample.pos - pos_offset_earth; pos_cov = R_ev_to_ekf * matrix::diag(ev_sample.position_var) * R_ev_to_ekf.transpose(); - // increase minimum variance to include EV orientation variance - // TODO: do this properly - const float orientation_var_max = ev_sample.orientation_var.max(); - - for (int i = 0; i < 2; i++) { - pos_cov(i, i) = math::max(pos_cov(i, i), orientation_var_max); - } + // Position variance contribution from orientation uncertainty: δp = δθ × p + pos_cov(0, 0) += sq(ev_sample.pos(2)) * ev_sample.orientation_var(1) // pitch + + sq(ev_sample.pos(1)) * ev_sample.orientation_var(2); // yaw + pos_cov(1, 1) += sq(ev_sample.pos(0)) * ev_sample.orientation_var(2) // yaw + + sq(ev_sample.pos(2)) * ev_sample.orientation_var(0); // roll if (_control_status.flags.gnss_pos) { _ev_pos_b_est.setFusionActive(); diff --git a/src/modules/ekf2/EKF/aid_sources/external_vision/ev_vel.h b/src/modules/ekf2/EKF/aid_sources/external_vision/ev_vel.h index 10d6b64cf4..3f7cf93666 100644 --- a/src/modules/ekf2/EKF/aid_sources/external_vision/ev_vel.h +++ b/src/modules/ekf2/EKF/aid_sources/external_vision/ev_vel.h @@ -166,7 +166,11 @@ public: _measurement = rotation_ev_to_ekf * _sample.vel - velocity_offset_earth; _measurement_var = matrix::SquareMatrix3f(rotation_ev_to_ekf * matrix::diag( _sample.velocity_var) * rotation_ev_to_ekf.transpose()).diag(); - _min_variance = math::max(_min_variance, _sample.orientation_var.max()); + // Velocity variance contribution from orientation uncertainty: δv = δθ × v + const float vx = _sample.vel(0), vy = _sample.vel(1), vz = _sample.vel(2); + _measurement_var(0) += sq(vz) * _sample.orientation_var(1) + sq(vy) * _sample.orientation_var(2); + _measurement_var(1) += sq(vx) * _sample.orientation_var(2) + sq(vz) * _sample.orientation_var(0); + _measurement_var(2) += sq(vy) * _sample.orientation_var(0) + sq(vx) * _sample.orientation_var(1); } enforceMinimumVariance(); diff --git a/src/modules/ekf2/EKF/aid_sources/external_vision/ev_vel_control.cpp b/src/modules/ekf2/EKF/aid_sources/external_vision/ev_vel_control.cpp index efc714964b..31b82dc357 100644 --- a/src/modules/ekf2/EKF/aid_sources/external_vision/ev_vel_control.cpp +++ b/src/modules/ekf2/EKF/aid_sources/external_vision/ev_vel_control.cpp @@ -51,7 +51,7 @@ void Ekf::controlEvVelFusion(ExternalVisionVel &ev, const bool common_starting_c || (_control_status_prev.flags.yaw_align != _control_status.flags.yaw_align); // determine if we should use EV velocity aiding - bool continuing_conditions_passing = (_params.ekf2_ev_ctrl & static_cast(EvCtrl::VEL)) + bool continuing_conditions_passing = _fc.ev.enabled && (_params.ekf2_ev_ctrl & static_cast(EvCtrl::VEL)) && _control_status.flags.tilt_align && ev._sample.vel.isAllFinite() && !ev._sample.vel.longerThan(_params.ekf2_vel_lim); diff --git a/src/modules/ekf2/EKF/aid_sources/external_vision/ev_yaw_control.cpp b/src/modules/ekf2/EKF/aid_sources/external_vision/ev_yaw_control.cpp index 5f597da7ba..4e588e192b 100644 --- a/src/modules/ekf2/EKF/aid_sources/external_vision/ev_yaw_control.cpp +++ b/src/modules/ekf2/EKF/aid_sources/external_vision/ev_yaw_control.cpp @@ -66,7 +66,7 @@ void Ekf::controlEvYawFusion(const imuSample &imu_sample, const extVisionSample } // determine if we should use EV yaw aiding - bool continuing_conditions_passing = (_params.ekf2_ev_ctrl & static_cast(EvCtrl::YAW)) + bool continuing_conditions_passing = _fc.ev.enabled && (_params.ekf2_ev_ctrl & static_cast(EvCtrl::YAW)) && _control_status.flags.tilt_align && !_control_status.flags.ev_yaw_fault && PX4_ISFINITE(aid_src.observation) diff --git a/src/modules/ekf2/EKF/aid_sources/gnss/gnss_height_control.cpp b/src/modules/ekf2/EKF/aid_sources/gnss/gnss_height_control.cpp index 80ec82a883..ccfd3d3d5a 100644 --- a/src/modules/ekf2/EKF/aid_sources/gnss/gnss_height_control.cpp +++ b/src/modules/ekf2/EKF/aid_sources/gnss/gnss_height_control.cpp @@ -60,7 +60,7 @@ void Ekf::controlGnssHeightFusion(const gnssSample &gps_sample) } } - const Vector3f pos_offset_body = _params.gps_pos_body - _params.imu_pos_body; + const Vector3f pos_offset_body = gps_sample.pos_body - _params.imu_pos_body; const Vector3f pos_offset_earth = _R_to_earth * pos_offset_body; const float gnss_alt = gps_sample.alt + pos_offset_earth(2); diff --git a/src/modules/ekf2/EKF/aid_sources/gnss/gps_control.cpp b/src/modules/ekf2/EKF/aid_sources/gnss/gps_control.cpp index 6b523fad28..dfc6d8e08d 100644 --- a/src/modules/ekf2/EKF/aid_sources/gnss/gps_control.cpp +++ b/src/modules/ekf2/EKF/aid_sources/gnss/gps_control.cpp @@ -41,7 +41,9 @@ void Ekf::controlGpsFusion(const imuSample &imu_delayed) { - if (!_gps_buffer || (_params.ekf2_gps_ctrl == 0)) { + _fc.gps.available = (_params.ekf2_gps_ctrl != 0); + + if (!_gps_buffer || !_fc.gps.intended()) { stopGnssFusion(); return; } @@ -160,7 +162,7 @@ void Ekf::controlGnssVelFusion(estimator_aid_source3d_s &aid_src, const bool for const bool do_reset = force_reset || !_control_status_prev.flags.yaw_align; // Start fusing the data without reset if possible to avoid disturbing the filter - if (!do_reset && ((aid_src.test_ratio[0] + aid_src.test_ratio[1]) < sq(0.5f))) { + if (!do_reset && aid_src.test_ratio[0] < 1.f && aid_src.test_ratio[1] < 1.f) { fused = fuseVelocity(aid_src); } @@ -221,7 +223,7 @@ void Ekf::controlGnssPosFusion(estimator_aid_source2d_s &aid_src, const bool for // Start fusing the data without reset if possible to avoid disturbing the filter if (_local_origin_lat_lon.isInitialized() && !do_reset - && ((aid_src.test_ratio[0] + aid_src.test_ratio[1]) < sq(0.5f))) { + && aid_src.test_ratio[0] < 1.f && aid_src.test_ratio[1] < 1.f) { fused = fuseHorizontalPosition(aid_src); } @@ -304,7 +306,7 @@ bool Ekf::isGnssPosResetAllowed() const void Ekf::updateGnssVel(const imuSample &imu_sample, const gnssSample &gnss_sample, estimator_aid_source3d_s &aid_src) { // correct velocity for offset relative to IMU - const Vector3f pos_offset_body = _params.gps_pos_body - _params.imu_pos_body; + const Vector3f pos_offset_body = gnss_sample.pos_body - _params.imu_pos_body; const Vector3f angular_velocity = imu_sample.delta_ang / imu_sample.delta_ang_dt - _state.gyro_bias; const Vector3f vel_offset_body = angular_velocity % pos_offset_body; @@ -342,7 +344,7 @@ void Ekf::updateGnssVel(const imuSample &imu_sample, const gnssSample &gnss_samp void Ekf::updateGnssPos(const gnssSample &gnss_sample, estimator_aid_source2d_s &aid_src) { // correct position and height for offset relative to IMU - const Vector3f pos_offset_body = _params.gps_pos_body - _params.imu_pos_body; + const Vector3f pos_offset_body = gnss_sample.pos_body - _params.imu_pos_body; const Vector3f pos_offset_earth = Vector3f(_R_to_earth * pos_offset_body); const LatLonAlt measurement(gnss_sample.lat, gnss_sample.lon, gnss_sample.alt); const LatLonAlt measurement_corrected = measurement + (-pos_offset_earth); @@ -376,13 +378,14 @@ void Ekf::controlGnssYawEstimator(estimator_aid_source3d_s &aid_src_vel) { // update yaw estimator velocity (basic sanity check on GNSS velocity data) const float vel_var = aid_src_vel.observation_variance[0]; + const float vel_accuracy = sqrtf(vel_var); const Vector2f vel_xy(aid_src_vel.observation); if ((vel_var > 0.f) - && (vel_var < _params.ekf2_req_sacc) + && (vel_accuracy < _params.ekf2_req_sacc) && vel_xy.isAllFinite()) { - _yawEstimator.fuseVelocity(vel_xy, vel_var, _control_status.flags.in_air); + _yawEstimator.fuseVelocity(vel_xy, vel_accuracy, _control_status.flags.in_air); // Try to align yaw using estimate if available if (((_params.ekf2_gps_ctrl & static_cast(GnssCtrl::VEL)) diff --git a/src/modules/ekf2/EKF/aid_sources/gravity/gravity_fusion.cpp b/src/modules/ekf2/EKF/aid_sources/gravity/gravity_fusion.cpp index 3a5e5447bb..fb0b3bc932 100644 --- a/src/modules/ekf2/EKF/aid_sources/gravity/gravity_fusion.cpp +++ b/src/modules/ekf2/EKF/aid_sources/gravity/gravity_fusion.cpp @@ -110,6 +110,7 @@ void Ekf::controlGravityFusion(const imuSample &imu) const bool accel_clipping = imu.delta_vel_clipping[0] || imu.delta_vel_clipping[1] || imu.delta_vel_clipping[2]; if (_control_status.flags.gravity_vector && !_aid_src_gravity.innovation_rejected && !accel_clipping) { + fused[index] = measurementUpdate(K, H, _aid_src_gravity.observation_variance[index], _aid_src_gravity.innovation[index]); } diff --git a/src/modules/ekf2/EKF/aid_sources/magnetometer/mag_control.cpp b/src/modules/ekf2/EKF/aid_sources/magnetometer/mag_control.cpp index 06dd0b4c80..c3a6d9eae6 100644 --- a/src/modules/ekf2/EKF/aid_sources/magnetometer/mag_control.cpp +++ b/src/modules/ekf2/EKF/aid_sources/magnetometer/mag_control.cpp @@ -54,7 +54,9 @@ void Ekf::controlMagFusion(const imuSample &imu_sample) _control_status.flags.mag_aligned_in_flight = false; } - if (_params.ekf2_mag_type == MagFuseType::NONE) { + _fc.mag.available = _params.ekf2_mag_type != static_cast(MagFuseType::NONE); + + if (!_fc.mag.intended()) { stopMagFusion(); return; } @@ -150,9 +152,9 @@ void Ekf::controlMagFusion(const imuSample &imu_sample) math::max(_params.ekf2_mag_gate, 1.f)); // innovation gate // determine if we should use mag fusion - bool continuing_conditions_passing = ((_params.ekf2_mag_type == MagFuseType::INIT) - || (_params.ekf2_mag_type == MagFuseType::AUTO) - || (_params.ekf2_mag_type == MagFuseType::HEADING)) + bool continuing_conditions_passing = ((_params.ekf2_mag_type == static_cast(MagFuseType::INIT)) + || (_params.ekf2_mag_type == static_cast(MagFuseType::AUTO)) + || (_params.ekf2_mag_type == static_cast(MagFuseType::HEADING))) && _control_status.flags.tilt_align && (_control_status.flags.yaw_align || (!_control_status.flags.ev_yaw && !_control_status.flags.yaw_align)) && mag_sample.mag.longerThan(0.f) @@ -187,12 +189,12 @@ void Ekf::controlMagFusion(const imuSample &imu_sample) && (!_control_status.flags.yaw_manual || _control_status.flags.mag_aligned_in_flight); _control_status.flags.mag_3D = common_conditions_passing - && (_params.ekf2_mag_type == MagFuseType::AUTO) + && (_params.ekf2_mag_type == static_cast(MagFuseType::AUTO)) && _control_status.flags.mag_aligned_in_flight; _control_status.flags.mag_hdg = common_conditions_passing - && ((_params.ekf2_mag_type == MagFuseType::HEADING) - || (_params.ekf2_mag_type == MagFuseType::AUTO && !_control_status.flags.mag_3D)); + && ((_params.ekf2_mag_type == static_cast(MagFuseType::HEADING)) + || (_params.ekf2_mag_type == static_cast(MagFuseType::AUTO) && !_control_status.flags.mag_3D)); } if (_control_status.flags.mag_3D && !_control_status_prev.flags.mag_3D) { diff --git a/src/modules/ekf2/EKF/aid_sources/optical_flow/optical_flow_control.cpp b/src/modules/ekf2/EKF/aid_sources/optical_flow/optical_flow_control.cpp index fa6f70ab4e..2fd346f053 100644 --- a/src/modules/ekf2/EKF/aid_sources/optical_flow/optical_flow_control.cpp +++ b/src/modules/ekf2/EKF/aid_sources/optical_flow/optical_flow_control.cpp @@ -42,7 +42,9 @@ void Ekf::controlOpticalFlowFusion(const imuSample &imu_delayed) { - if (!_flow_buffer || (_params.ekf2_of_ctrl != 1)) { + _fc.of.available = (_params.ekf2_of_ctrl != 0); + + if (!_flow_buffer || !_fc.of.intended()) { stopFlowFusion(); return; } @@ -146,7 +148,7 @@ void Ekf::controlOpticalFlowFusion(const imuSample &imu_delayed) && !flow_sample.flow_rate.longerThan(_flow_max_rate) && !flow_compensated.longerThan(_flow_max_rate); - const bool continuing_conditions_passing = (_params.ekf2_of_ctrl == 1) + const bool continuing_conditions_passing = _fc.of.intended() && _control_status.flags.tilt_align && is_within_sensor_dist; @@ -155,7 +157,7 @@ void Ekf::controlOpticalFlowFusion(const imuSample &imu_delayed) && is_magnitude_good && is_tilt_good && (_flow_counter > 10) - && (isTerrainEstimateValid() || isHorizontalAidingActive()) + && (isTerrainEstimateValid() || isHorizontalAidingActive() || (_height_sensor_ref == HeightSensor::RANGE)) && isTimedOut(_aid_src_optical_flow.time_last_fuse, (uint64_t)2e6); // Prevent rapid switching // If the height is relative to the ground, terrain height cannot be observed. diff --git a/src/modules/ekf2/EKF/aid_sources/range_finder/range_height_control.cpp b/src/modules/ekf2/EKF/aid_sources/range_finder/range_height_control.cpp index 3e092e8342..7efcb9bebe 100644 --- a/src/modules/ekf2/EKF/aid_sources/range_finder/range_height_control.cpp +++ b/src/modules/ekf2/EKF/aid_sources/range_finder/range_height_control.cpp @@ -42,6 +42,8 @@ void Ekf::controlRangeHaglFusion(const imuSample &imu_sample) { + _fc.rng.available = (_params.ekf2_rng_ctrl != static_cast(RngCtrl::DISABLED)); + static constexpr const char *HGT_SRC_NAME = "RNG"; bool rng_data_ready = false; @@ -127,8 +129,7 @@ void Ekf::controlRangeHaglFusion(const imuSample &imu_sample) aid_src.innovation_rejected = false; } - const bool continuing_conditions_passing = ((_params.ekf2_rng_ctrl == static_cast(RngCtrl::ENABLED)) - || (_params.ekf2_rng_ctrl == static_cast(RngCtrl::CONDITIONAL))) + const bool continuing_conditions_passing = _fc.rng.intended() && _control_status.flags.tilt_align && measurement_valid; diff --git a/src/modules/ekf2/EKF/aid_sources/ranging_beacon/ranging_beacon_control.cpp b/src/modules/ekf2/EKF/aid_sources/ranging_beacon/ranging_beacon_control.cpp new file mode 100644 index 0000000000..4412988968 --- /dev/null +++ b/src/modules/ekf2/EKF/aid_sources/ranging_beacon/ranging_beacon_control.cpp @@ -0,0 +1,141 @@ +/**************************************************************************** + * + * Copyright (c) 2026 PX4 Development Team. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name PX4 nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +/** + * @file ranging_beacon_control.cpp + * Control functions for EKF ranging beacon fusion + */ + +#include "ekf.h" +#include +#include + +void Ekf::controlRangingBeaconFusion(const imuSample &imu_delayed) +{ + _fc.rngbcn.available = (_params.ekf2_rngbc_ctrl != 0); + + if (!_ranging_beacon_buffer || !_fc.rngbcn.intended()) { + stopRangingBeaconFusion(); + return; + } + + rangingBeaconSample ranging_beacon_sample_delayed{}; + const bool ranging_beacon_data_ready = _ranging_beacon_buffer->pop_first_older_than( + imu_delayed.time_us, &ranging_beacon_sample_delayed); + + if (ranging_beacon_data_ready) { + + const rangingBeaconSample &sample = ranging_beacon_sample_delayed; + + const bool measurement_valid = PX4_ISFINITE(sample.range_m) + && (sample.range_m > 0.f) + && PX4_ISFINITE(sample.range_var) + && PX4_ISFINITE(sample.beacon_lat) + && PX4_ISFINITE(sample.beacon_lon) + && PX4_ISFINITE(sample.beacon_alt); + + if (measurement_valid && _local_origin_lat_lon.isInitialized() && PX4_ISFINITE(_local_origin_alt)) { + fuseRangingBeacon(sample); + } + + } + + if (_control_status.flags.rngbcn_fusion + && isTimedOut(_aid_src_ranging_beacon.time_last_fuse, 2 * RNGBC_MAX_INTERVAL)) { + stopRangingBeaconFusion(); + } +} + +void Ekf::fuseRangingBeacon(const rangingBeaconSample &sample) +{ + const matrix::Vector3d vehicle_ecef = _gpos.toEcef(); + + const LatLonAlt beacon_lla(sample.beacon_lat, sample.beacon_lon, sample.beacon_alt); + const matrix::Vector3d beacon_ecef = beacon_lla.toEcef(); + + const matrix::Vector3d delta_ecef = beacon_ecef - vehicle_ecef; + const double predicted_range = delta_ecef.norm(); + + const float innovation = static_cast(predicted_range) - sample.range_m; + const float R = fmaxf(sample.range_var, sq(_params.ekf2_rngbc_noise)); + + // Compute beacon position for the symforce H matrix. + // _state.pos(0:1) is always 0 in the global-position EKF, so N,E are relative. + // _state.pos(2) contains altitude, so beacon_pos(2) must be absolute. + const matrix::Dcmf R_ecef_to_ned = _gpos.computeRotEcefToNed(); + const Vector3f delta_ecef_f(static_cast(delta_ecef(0)), + static_cast(delta_ecef(1)), + static_cast(delta_ecef(2))); + const Vector3f delta_ned = R_ecef_to_ned * delta_ecef_f; + const Vector3f beacon_pos(delta_ned(0), delta_ned(1), _state.pos(2) + delta_ned(2)); + float innov_var; + VectorState H; + + sym::ComputeRangeBeaconInnovVarAndH(_state.vector(), P, beacon_pos, R, FLT_EPSILON, &innov_var, &H); + + updateAidSourceStatus(_aid_src_ranging_beacon, + sample.time_us, + sample.range_m, + R, + innovation, + innov_var, + _params.ekf2_rngbc_gate); + + _aid_src_ranging_beacon.device_id = sample.beacon_id; + + if (_aid_src_ranging_beacon.innovation_rejected) { + return; + } + + VectorState K = P * H / innov_var; + K(State::pos.idx + 2) = 0.f; // altitude is handled by height reference + measurementUpdate(K, H, R, innovation); + + _aid_src_ranging_beacon.fused = true; + _aid_src_ranging_beacon.time_last_fuse = _time_delayed_us; + _time_last_hor_pos_fuse = _time_delayed_us; + + if (!_control_status.flags.rngbcn_fusion) { + ECL_INFO("starting ranging beacon fusion"); + _control_status.flags.rngbcn_fusion = true; + } + +} + +void Ekf::stopRangingBeaconFusion() +{ + if (_control_status.flags.rngbcn_fusion) { + ECL_INFO("stopping ranging beacon fusion"); + _control_status.flags.rngbcn_fusion = false; + } +} diff --git a/src/modules/ekf2/EKF/bias_estimator/position_bias_estimator.hpp b/src/modules/ekf2/EKF/bias_estimator/position_bias_estimator.hpp index 629bb538a1..6d8a5e2213 100644 --- a/src/modules/ekf2/EKF/bias_estimator/position_bias_estimator.hpp +++ b/src/modules/ekf2/EKF/bias_estimator/position_bias_estimator.hpp @@ -62,7 +62,7 @@ public: } } - void fuseBias(Vector2f bias, Vector2f bias_var) + void fuseBias(const Vector2f &bias, const Vector2f &bias_var) { if ((_sensor_ref != _sensor) && _is_sensor_fusion_active) { _bias[0].fuseBias(bias(0), bias_var(0)); diff --git a/src/modules/ekf2/EKF/common.h b/src/modules/ekf2/EKF/common.h index 982cb4c1af..19c21baae8 100644 --- a/src/modules/ekf2/EKF/common.h +++ b/src/modules/ekf2/EKF/common.h @@ -76,6 +76,8 @@ static constexpr uint64_t GNSS_YAW_MAX_INTERVAL = 1500e3; ///< Maximum allowable time interval between GNSS yaw measurements (uSec) static constexpr uint64_t MAG_MAX_INTERVAL = 500e3; ///< Maximum allowable time interval between magnetic field measurements (uSec) +static constexpr uint64_t RNGBC_MAX_INTERVAL = + 5000e3; ///< Maximum allowable time interval between ranging beacon measurements (uSec) // bad accelerometer detection and mitigation static constexpr uint64_t BADACC_PROBATION = @@ -203,6 +205,7 @@ struct gnssSample { float yaw_offset{}; ///< Heading/Yaw offset for dual antenna GPS - refer to description for GPS_YAW_OFFSET bool spoofed{}; ///< true if GNSS data is spoofed bool jammed{}; ///< true if GNSS data is jammed + Vector3f pos_body{}; ///< position of GPS antenna in body frame (m) }; struct magSample { @@ -261,6 +264,16 @@ struct auxVelSample { }; #endif // CONFIG_EKF2_AUXVEL +struct rangingBeaconSample { + uint64_t time_us{}; ///< timestamp of the measurement (uSec) + uint8_t beacon_id{}; ///< beacon identifier + float range_m{}; ///< measured range to beacon (m) + float range_var{}; ///< range measurement variance (m^2) + double beacon_lat{}; ///< beacon latitude (degrees) + double beacon_lon{}; ///< beacon longitude (degrees) + float beacon_alt{}; ///< beacon altitude AMSL (m) +}; + struct systemFlagUpdate { uint64_t time_us{}; bool at_rest{false}; @@ -268,7 +281,28 @@ struct systemFlagUpdate { bool is_fixed_wing{false}; bool gnd_effect{false}; bool constant_pos{false}; - bool in_transition_to_fw{false}; + bool in_transition{false}; +}; + +// Runtime fusion control. Populated by EKF2 module, read by EKF core. +static constexpr uint8_t MAX_AGP_INSTANCES = 4; + +struct FusionSensor { + bool enabled{false}; // runtime toggleable via MAVLink + bool available{false}; // CTRL-param != disabled-value (functions as factory-setting) + bool intended() const { return enabled && available; } +}; + +struct FusionControl { + FusionSensor gps; + FusionSensor of; + FusionSensor ev; + FusionSensor agp[MAX_AGP_INSTANCES]; + FusionSensor baro; + FusionSensor rng; + FusionSensor mag; + FusionSensor aspd; + FusionSensor rngbcn; }; struct parameters { @@ -280,6 +314,7 @@ struct parameters { float ekf2_vel_lim{100.f}; ///< velocity state limit (m/s) // measurement source control + int32_t ekf2_sens_en{8191}; ///< sensor fusion enable bitmask (EKF2_SENS_EN) int32_t ekf2_hgt_ref{static_cast(HeightSensor::BARO)}; int32_t position_sensor_ref{static_cast(PositionSensor::GNSS)}; @@ -306,7 +341,7 @@ struct parameters { #if defined(CONFIG_EKF2_BAROMETER) int32_t ekf2_baro_ctrl {1}; - float ekf2_baro_delay{0.0f}; ///< barometer height measurement delay relative to the IMU (mSec) + float ekf2_baro_delay {0.0f}; ///< barometer height measurement delay relative to the IMU (mSec) float ekf2_baro_noise{2.0f}; ///< observation noise for barometric height fusion (m) float baro_bias_nsd{0.13f}; ///< process noise for barometric height bias estimation (m/s/sqrt(Hz)) float ekf2_baro_gate{5.0f}; ///< barometric and GPS height innovation consistency gate size (STD) @@ -330,10 +365,6 @@ struct parameters { #if defined(CONFIG_EKF2_GNSS) int32_t ekf2_gps_ctrl {static_cast(GnssCtrl::HPOS) | static_cast(GnssCtrl::VEL)}; int32_t ekf2_gps_mode {static_cast(GnssMode::kAuto)}; - float ekf2_gps_delay{110.0f}; ///< GPS measurement delay relative to the IMU (mSec) - - Vector3f gps_pos_body{}; ///< xyz position of the GPS antenna in body frame (m) - // position and velocity fusion float ekf2_gps_v_noise{0.5f}; ///< minimum allowed observation noise for gps velocity fusion (m/sec) float ekf2_gps_p_noise{0.5f}; ///< minimum allowed observation noise for gps position fusion (m) @@ -506,6 +537,14 @@ struct parameters { const float auxvel_gate{5.0f}; ///< velocity fusion innovation consistency gate size (STD) #endif // CONFIG_EKF2_AUXVEL +#if defined(CONFIG_EKF2_RANGING_BEACON) + // ranging beacon fusion + int32_t ekf2_rngbc_ctrl{0}; ///< ranging beacon fusion control (0=disabled, 1=enabled) + float ekf2_rngbc_delay{0.f}; ///< ranging beacon measurement delay relative to the IMU (mSec) + float ekf2_rngbc_noise{1.f}; ///< ranging beacon measurement noise (m) + float ekf2_rngbc_gate{5.f}; ///< ranging beacon fusion innovation consistency gate size (STD) +#endif // CONFIG_EKF2_RANGING_BEACON + }; union fault_status_u { @@ -593,7 +632,9 @@ uint64_t gnss_fault : uint64_t yaw_manual : 1; ///< 46 - true if yaw has been reset manually uint64_t gnss_hgt_fault : 1; ///< 47 - true if GNSS measurements (alt) have been declared faulty and are no longer used - uint64_t in_transition_to_fw : 1; ///< 48 - true if the vehicle is in transition to fw + uint64_t in_transition : 1; ///< 48 - true if the vehicle is in vtol transition + uint64_t heading_observable : 1; ///< 49 - true when heading is observable + uint64_t rngbcn_fusion : 1; ///< 50 - true when ranging beacon position fusion is active } flags; uint64_t value; diff --git a/src/modules/ekf2/EKF/control.cpp b/src/modules/ekf2/EKF/control.cpp index caf3e0108a..574e7f70c2 100644 --- a/src/modules/ekf2/EKF/control.cpp +++ b/src/modules/ekf2/EKF/control.cpp @@ -58,7 +58,7 @@ void Ekf::controlFusionModes(const imuSample &imu_delayed) set_in_air_status(system_flags_delayed.in_air); set_is_fixed_wing(system_flags_delayed.is_fixed_wing); - set_in_transition_to_fw(system_flags_delayed.in_transition_to_fw); + set_in_transition(system_flags_delayed.in_transition); if (system_flags_delayed.gnd_effect) { set_gnd_effect(); @@ -116,6 +116,10 @@ void Ekf::controlFusionModes(const imuSample &imu_delayed) controlGpsFusion(imu_delayed); #endif // CONFIG_EKF2_GNSS +#if defined(CONFIG_EKF2_RANGING_BEACON) + controlRangingBeaconFusion(imu_delayed); +#endif // CONFIG_EKF2_RANGING_BEACON + #if defined(CONFIG_EKF2_AUX_GLOBAL_POSITION) && defined(MODULE_NAME) _aux_global_position.update(*this, imu_delayed); _control_status.flags.aux_gpos = _aux_global_position.anySourceFusing(); @@ -154,8 +158,6 @@ void Ekf::controlFusionModes(const imuSample &imu_delayed) updateTerrainValidity(); #endif // CONFIG_EKF2_TERRAIN - controlZeroInnovationHeadingUpdate(); - _zero_velocity_update.update(*this, imu_delayed); if (_params.ekf2_imu_ctrl & static_cast(ImuCtrl::GyroBias)) { @@ -168,4 +170,8 @@ void Ekf::controlFusionModes(const imuSample &imu_delayed) // check if we are no longer fusing measurements that directly constrain velocity drift updateDeadReckoningStatus(); + + const bool yaw_aiding = _control_status.flags.mag_hdg || _control_status.flags.mag_3D + || _control_status.flags.ev_yaw || _control_status.flags.gnss_yaw; + _control_status.flags.heading_observable = isNorthEastAidingActive() || yaw_aiding; } diff --git a/src/modules/ekf2/EKF/covariance.cpp b/src/modules/ekf2/EKF/covariance.cpp index 85ce9b9c17..5820fc74d7 100644 --- a/src/modules/ekf2/EKF/covariance.cpp +++ b/src/modules/ekf2/EKF/covariance.cpp @@ -139,6 +139,11 @@ void Ekf::predictCovariance(const imuSample &imu_delayed) imu_delayed.delta_ang / imu_delayed.delta_ang_dt, gyro_var, dt); + if (!_control_status.flags.heading_observable) { + // Zero heading correlations to prevent unintended heading corrections when heading is not observable + uncorrelateAndLimitHeadingCovariance(); + } + // Construct the process noise variance diagonal for those states with a stationary process model // These are kinematic states and their error growth is controlled separately by the IMU noise variances @@ -250,6 +255,11 @@ void Ekf::constrainStateVariances() // belong to the same group (e.g. vel_x, vel_y, vel_z) constrainStateVar(State::quat_nominal, 1e-9f, 1.f); + + if (!_control_status.flags.heading_observable) { + uncorrelateAndLimitHeadingCovariance(); + } + constrainStateVar(State::vel, 1e-6f, 1e6f); constrainStateVar(State::pos, 1e-6f, 1e6f); constrainStateVarLimitRatio(State::gyro_bias, kGyroBiasVarianceMin, 1.f); @@ -286,10 +296,12 @@ void Ekf::constrainStateVar(const IdxDof &state, float min, float max) } else if (P(i, i) > max) { // Constrain the variance growth by fusing zero innovation as clipping the variance // would artifically increase the correlation between states and destabilize the filter. + // constrain_variances=false prevents unbounded recursion via + // fuseDirectStateMeasurement -> constrainStateVariances -> constrainStateVar -> here. const float innov = 0.f; const float R = 10.f * P(i, i); // This reduces the variance by ~10% as K = P / (P + R) const float innov_var = P(i, i) + R; - fuseDirectStateMeasurement(innov, innov_var, R, i); + fuseDirectStateMeasurement(innov, innov_var, R, i, /*constrain_variances=*/false); } } } @@ -311,6 +323,13 @@ void Ekf::constrainStateVarLimitRatio(const IdxDof &state, float min, float max, constrainStateVar(state, limited_min, limited_max); } +void Ekf::uncorrelateAndLimitHeadingCovariance() +{ + const float heading_var = P(State::quat_nominal.idx + 2, State::quat_nominal.idx + 2); + const float heading_var_max = sq(_params.ekf2_head_noise); + P.uncorrelateCovarianceSetVariance<1>(State::quat_nominal.idx + 2, fminf(heading_var, heading_var_max)); +} + void Ekf::resetQuatCov(const float yaw_noise) { const float tilt_var = sq(math::max(_params.ekf2_angerr_init, 0.01f)); diff --git a/src/modules/ekf2/EKF/ekf.h b/src/modules/ekf2/EKF/ekf.h index ef70ff3613..1382a0e4ab 100644 --- a/src/modules/ekf2/EKF/ekf.h +++ b/src/modules/ekf2/EKF/ekf.h @@ -137,6 +137,10 @@ public: const Vector3f &getFlowRefBodyRate() const { return _ref_body_rate; } #endif // CONFIG_EKF2_OPTICAL_FLOW +#if defined(CONFIG_EKF2_AUX_GLOBAL_POSITION) && defined(MODULE_NAME) + uint8_t getAgpFusingBitmask() const { return _aux_global_position.sourceFusingBitmask(); } +#endif // CONFIG_EKF2_AUX_GLOBAL_POSITION + float getHeadingInnov() const; float getHeadingInnovVar() const; float getHeadingInnovRatio() const; @@ -259,7 +263,10 @@ public: } // fuse single direct state measurement (eg NED velocity, NED position, mag earth field, etc) - void fuseDirectStateMeasurement(const float innov, const float innov_var, const float R, const int state_index); + // constrain_variances must be false when called from inside constrainStateVar to prevent + // unbounded recursion (constrainStateVariances can call back into this function). + void fuseDirectStateMeasurement(const float innov, const float innov_var, const float R, const int state_index, + bool constrain_variances = true); bool measurementUpdate(VectorState &K, const VectorState &H, const float R, const float innovation); @@ -413,16 +420,25 @@ public: const auto &aid_src_aux_vel() const { return _aid_src_aux_vel; } #endif // CONFIG_EKF2_AUXVEL +#if defined(CONFIG_EKF2_RANGING_BEACON) + const auto &aid_src_ranging_beacon() const { return _aid_src_ranging_beacon; } +#endif // CONFIG_EKF2_RANGING_BEACON + bool resetGlobalPosToExternalObservation(double latitude, double longitude, float altitude, float eph, float epv, uint64_t timestamp_observation); void resetHeadingToExternalObservation(float heading, float heading_accuracy) { + // External heading is an observation of yaw. Setting heading_observable = true + // prevents clearInhibitedStateKalmanGains() from inhibiting the update + _control_status.flags.heading_observable = true; + const float heading_variance = sq(heading_accuracy); + if (_control_status.flags.yaw_align) { - resetYawByFusion(heading, heading_accuracy); + resetYawByFusion(heading, heading_variance); } else { - resetQuatStateYaw(heading, heading_accuracy); + resetQuatStateYaw(heading, heading_variance); _control_status.flags.yaw_align = true; } @@ -589,6 +605,10 @@ private: # endif // CONFIG_EKF2_GNSS_YAW #endif // CONFIG_EKF2_GNSS +#if defined(CONFIG_EKF2_RANGING_BEACON) + estimator_aid_source1d_s _aid_src_ranging_beacon {}; +#endif // CONFIG_EKF2_RANGING_BEACON + #if defined(CONFIG_EKF2_GRAVITY_FUSION) estimator_aid_source3d_s _aid_src_gravity {}; #endif // CONFIG_EKF2_GRAVITY_FUSION @@ -823,6 +843,8 @@ private: void constrainStateVar(const IdxDof &state, float min, float max); void constrainStateVarLimitRatio(const IdxDof &state, float min, float max, float max_ratio = 1.e6f); + void uncorrelateAndLimitHeadingCovariance(); + // generic function which will perform a fusion step given a kalman gain K // and a scalar innovation value void fuse(const VectorState &K, float innovation); @@ -918,6 +940,12 @@ private: #endif // CONFIG_EKF2_GNSS +#if defined(CONFIG_EKF2_RANGING_BEACON) + void controlRangingBeaconFusion(const imuSample &imu_delayed); + void fuseRangingBeacon(const rangingBeaconSample &sample); + void stopRangingBeaconFusion(); +#endif // CONFIG_EKF2_RANGING_BEACON + #if defined(CONFIG_EKF2_MAGNETOMETER) // control fusion of magnetometer observations void controlMagFusion(const imuSample &imu_sample); @@ -949,8 +977,6 @@ private: void resetHeightToLastKnown(); void stopFakeHgtFusion(); - void controlZeroInnovationHeadingUpdate(); - #if defined(CONFIG_EKF2_AUXVEL) // control fusion of auxiliary velocity observations void controlAuxVelFusion(const imuSample &imu_sample); diff --git a/src/modules/ekf2/EKF/ekf_helper.cpp b/src/modules/ekf2/EKF/ekf_helper.cpp index f5b8703c0d..381c10eca9 100644 --- a/src/modules/ekf2/EKF/ekf_helper.cpp +++ b/src/modules/ekf2/EKF/ekf_helper.cpp @@ -810,7 +810,8 @@ void Ekf::updateHorizontalDeadReckoningstatus() } // position aiding active - if ((_control_status.flags.gnss_pos || _control_status.flags.ev_pos || _control_status.flags.aux_gpos) + if ((_control_status.flags.gnss_pos || _control_status.flags.ev_pos + || _control_status.flags.aux_gpos || _control_status.flags.rngbcn_fusion) && isRecent(_time_last_hor_pos_fuse, _params.no_aid_timeout_max) ) { inertial_dead_reckoning = false; @@ -825,7 +826,7 @@ void Ekf::updateHorizontalDeadReckoningstatus() inertial_dead_reckoning = false; } else { - if (!_control_status.flags.in_air && (_params.ekf2_of_ctrl == 1) + if (!_control_status.flags.in_air && _fc.of.intended() && isRecent(_aid_src_optical_flow.timestamp_sample, _params.no_aid_timeout_max) ) { // currently landed, but optical flow aiding should be possible once in air @@ -852,7 +853,7 @@ void Ekf::updateHorizontalDeadReckoningstatus() if (!_control_status.flags.in_air && _control_status.flags.fixed_wing && (_params.ekf2_fuse_beta == 1) - && (_params.ekf2_arsp_thr > 0.f) && isRecent(_aid_src_airspeed.timestamp_sample, _params.no_aid_timeout_max) + && _fc.aspd.intended() && isRecent(_aid_src_airspeed.timestamp_sample, _params.no_aid_timeout_max) ) { // currently landed, but air data aiding should be possible once in air aiding_expected_in_air = true; @@ -1026,7 +1027,8 @@ void Ekf::updateIMUBiasInhibit(const imuSample &imu_delayed) } } -void Ekf::fuseDirectStateMeasurement(const float innov, const float innov_var, const float R, const int state_index) +void Ekf::fuseDirectStateMeasurement(const float innov, const float innov_var, const float R, const int state_index, + bool constrain_variances) { VectorState K; // Kalman gain vector for any single observation - sequential fusion is used. @@ -1080,7 +1082,9 @@ void Ekf::fuseDirectStateMeasurement(const float innov, const float innov_var, c #endif - constrainStateVariances(); + if (constrain_variances) { + constrainStateVariances(); + } // apply the state corrections fuse(K, innov); @@ -1232,6 +1236,10 @@ void Ekf::updateAidSourceStatus(estimator_aid_source1d_s &status, const uint64_t void Ekf::clearInhibitedStateKalmanGains(VectorState &K) const { + if (!_control_status.flags.heading_observable) { + K(State::quat_nominal.idx + 2) = 0.f; + } + for (unsigned i = 0; i < State::gyro_bias.dof; i++) { if (_gyro_bias_inhibit[i]) { K(State::gyro_bias.idx + i) = 0.f; diff --git a/src/modules/ekf2/EKF/estimator_interface.cpp b/src/modules/ekf2/EKF/estimator_interface.cpp index b6f71444e9..a25256fd15 100644 --- a/src/modules/ekf2/EKF/estimator_interface.cpp +++ b/src/modules/ekf2/EKF/estimator_interface.cpp @@ -73,6 +73,9 @@ EstimatorInterface::~EstimatorInterface() #if defined(CONFIG_EKF2_AUXVEL) delete _auxvel_buffer; #endif // CONFIG_EKF2_AUXVEL +#if defined(CONFIG_EKF2_RANGING_BEACON) + delete _ranging_beacon_buffer; +#endif // CONFIG_EKF2_RANGING_BEACON } // Accumulate imu data and store to buffer at desired rate @@ -159,7 +162,7 @@ void EstimatorInterface::setMagData(const magSample &mag_sample) #endif // CONFIG_EKF2_MAGNETOMETER #if defined(CONFIG_EKF2_GNSS) -void EstimatorInterface::setGpsData(const gnssSample &gnss_sample, const bool pps_compensation) +void EstimatorInterface::setGpsData(const gnssSample &gnss_sample) { if (!_initialised) { return; @@ -177,10 +180,7 @@ void EstimatorInterface::setGpsData(const gnssSample &gnss_sample, const bool pp } } - const int64_t delay = pps_compensation ? 0 : static_cast(_params.ekf2_gps_delay * 1000); - const int64_t time_us = gnss_sample.time_us - - delay - static_cast(_dt_ekf_avg * 5e5f); // seconds to microseconds divided by 2 if (time_us >= static_cast(_gps_buffer->get_newest().time_us + _min_obs_interval_us)) { @@ -439,6 +439,46 @@ void EstimatorInterface::setAuxVelData(const auxVelSample &auxvel_sample) } #endif // CONFIG_EKF2_AUXVEL +#if defined(CONFIG_EKF2_RANGING_BEACON) +void EstimatorInterface::setRangingBeaconData(const rangingBeaconSample &ranging_beacon_sample) +{ + + if (!_initialised) { + return; + } + + // Allocate the required buffer size if not previously done + if (_ranging_beacon_buffer == nullptr) { + _ranging_beacon_buffer = new TimestampedRingBuffer(_obs_buffer_length); + + if (_ranging_beacon_buffer == nullptr || !_ranging_beacon_buffer->valid()) { + delete _ranging_beacon_buffer; + _ranging_beacon_buffer = nullptr; + printBufferAllocationFailed("ranging beacon"); + return; + } + } + + const int64_t time_us = ranging_beacon_sample.time_us + - static_cast(_params.ekf2_rngbc_delay * 1000) + - static_cast(_dt_ekf_avg * 5e5f); // seconds to microseconds divided by 2 + + // limit data rate to prevent data being lost + if (time_us >= static_cast(_ranging_beacon_buffer->get_newest().time_us + _min_obs_interval_us)) { + + rangingBeaconSample ranging_beacon_sample_new{ranging_beacon_sample}; + ranging_beacon_sample_new.time_us = time_us; + + _ranging_beacon_buffer->push(ranging_beacon_sample_new); + _time_last_ranging_beacon_buffer_push = _time_latest_us; + + } else { + ECL_WARN("ranging beacon data too fast %" PRIi64 " < %" PRIu64 " + %d", time_us, + _ranging_beacon_buffer->get_newest().time_us, _min_obs_interval_us); + } +} +#endif // CONFIG_EKF2_RANGING_BEACON + void EstimatorInterface::setSystemFlagData(const systemFlagUpdate &system_flags) { if (!_initialised) { @@ -621,7 +661,8 @@ int EstimatorInterface::getNumberOfActiveHorizontalPositionAidingSources() const { return int(_control_status.flags.gnss_pos) + int(_control_status.flags.ev_pos) - + int(_control_status.flags.aux_gpos); + + int(_control_status.flags.aux_gpos) + + int(_control_status.flags.rngbcn_fusion); } bool EstimatorInterface::isHorizontalPositionAidingActive() const @@ -699,7 +740,8 @@ bool EstimatorInterface::isNorthEastAidingActive() const { return _control_status.flags.gnss_pos || _control_status.flags.gnss_vel - || _control_status.flags.aux_gpos; + || _control_status.flags.aux_gpos + || (_control_status.flags.ev_pos && _control_status.flags.yaw_align); } void EstimatorInterface::printBufferAllocationFailed(const char *buffer_name) diff --git a/src/modules/ekf2/EKF/estimator_interface.h b/src/modules/ekf2/EKF/estimator_interface.h index 55148e2fd5..93756090f4 100644 --- a/src/modules/ekf2/EKF/estimator_interface.h +++ b/src/modules/ekf2/EKF/estimator_interface.h @@ -89,7 +89,7 @@ public: void setIMUData(const imuSample &imu_sample); #if defined(CONFIG_EKF2_GNSS) - void setGpsData(const gnssSample &gnss_sample, const bool pps_compensation = false); + void setGpsData(const gnssSample &gnss_sample); const gnssSample &get_gps_sample_delayed() const { return _gps_sample_delayed; } @@ -146,11 +146,16 @@ public: void setAuxVelData(const auxVelSample &auxvel_sample); #endif // CONFIG_EKF2_AUXVEL +#if defined(CONFIG_EKF2_RANGING_BEACON) + void setRangingBeaconData(const rangingBeaconSample &ranging_beacon_sample); +#endif // CONFIG_EKF2_RANGING_BEACON + void setSystemFlagData(const systemFlagUpdate &system_flags); // return a address to the parameters struct // in order to give access to the application parameters *getParamHandle() { return &_params; } + FusionControl *getFusionControlHandle() { return &_fc; } // set vehicle landed status data void set_in_air_status(bool in_air) @@ -197,7 +202,7 @@ public: // set vehicle is fixed wing status void set_is_fixed_wing(bool is_fixed_wing) { _control_status.flags.fixed_wing = is_fixed_wing; } - void set_in_transition_to_fw(bool in_transition) { _control_status.flags.in_transition_to_fw = in_transition; } + void set_in_transition(bool in_transition) { _control_status.flags.in_transition = in_transition; } // set flag if static pressure rise due to ground effect is expected // use _params.ekf2_gnd_eff_dz to adjust for expected rise in static pressure @@ -332,6 +337,7 @@ protected: virtual bool init(uint64_t timestamp) = 0; parameters _params{}; // filter parameters + FusionControl _fc{}; /* OBS_BUFFER_LENGTH defines how many observations (non-IMU measurements) we can buffer @@ -454,6 +460,11 @@ protected: #endif // CONFIG_EKF2_AUXVEL TimestampedRingBuffer *_system_flag_buffer {nullptr}; +#if defined(CONFIG_EKF2_RANGING_BEACON) + TimestampedRingBuffer *_ranging_beacon_buffer {nullptr}; + uint64_t _time_last_ranging_beacon_buffer_push{0}; +#endif // CONFIG_EKF2_RANGING_BEACON + #if defined(CONFIG_EKF2_BAROMETER) TimestampedRingBuffer *_baro_buffer {nullptr}; uint64_t _time_last_baro_buffer_push{0}; diff --git a/src/modules/ekf2/EKF/position_fusion.cpp b/src/modules/ekf2/EKF/position_fusion.cpp index cd11355578..7e88ad4644 100644 --- a/src/modules/ekf2/EKF/position_fusion.cpp +++ b/src/modules/ekf2/EKF/position_fusion.cpp @@ -201,13 +201,25 @@ void Ekf::resetAltitudeTo(const float new_altitude, float new_vert_pos_var) updateVerticalPositionResetStatus(delta_z); #if defined(CONFIG_EKF2_BAROMETER) - _baro_b_est.setBias(_baro_b_est.getBias() + delta_z); + + if (_control_status.flags.baro_hgt) { + _baro_b_est.setBias(_baro_b_est.getBias() + delta_z); + } + #endif // CONFIG_EKF2_BAROMETER #if defined(CONFIG_EKF2_EXTERNAL_VISION) - _ev_hgt_b_est.setBias(_ev_hgt_b_est.getBias() - delta_z); + + if (_control_status.flags.ev_hgt) { + _ev_hgt_b_est.setBias(_ev_hgt_b_est.getBias() - delta_z); + } + #endif // CONFIG_EKF2_EXTERNAL_VISION #if defined(CONFIG_EKF2_GNSS) - _gps_hgt_b_est.setBias(_gps_hgt_b_est.getBias() + delta_z); + + if (_control_status.flags.gps_hgt) { + _gps_hgt_b_est.setBias(_gps_hgt_b_est.getBias() + delta_z); + } + #endif // CONFIG_EKF2_GNSS #if defined(CONFIG_EKF2_TERRAIN) diff --git a/src/modules/ekf2/EKF/python/ekf_derivation/derivation.py b/src/modules/ekf2/EKF/python/ekf_derivation/derivation.py index 91c3fd734e..11f500a6a2 100755 --- a/src/modules/ekf2/EKF/python/ekf_derivation/derivation.py +++ b/src/modules/ekf2/EKF/python/ekf_derivation/derivation.py @@ -721,6 +721,23 @@ def compute_gravity_z_innov_var_and_h( return (innov_var, H.T) +def compute_range_beacon_innov_var_and_h( + state: VState, + P: MTangent, + beacon_pos: sf.V3, + R: sf.Scalar, + epsilon: sf.Scalar +) -> (sf.Scalar, VTangent): + + state = vstate_to_state(state) + delta = beacon_pos - state["pos"] + range_pred = delta.norm(epsilon=epsilon) + + H = jacobian_chain_rule(range_pred, state) + innov_var = (H * P * H.T + R)[0,0] + + return (innov_var, H.T) + print("Derive EKF2 equations...") generate_px4_function(predict_covariance, output_names=None) @@ -752,5 +769,6 @@ generate_px4_function(compute_gravity_z_innov_var_and_h, output_names=["innov_va generate_px4_function(compute_body_vel_innov_var_h, output_names=["innov_var", "Hx", "Hy", "Hz"]) generate_px4_function(compute_body_vel_y_innov_var, output_names=["innov_var"]) generate_px4_function(compute_body_vel_z_innov_var, output_names=["innov_var"]) +generate_px4_function(compute_range_beacon_innov_var_and_h, output_names=["innov_var", "H"]) generate_px4_state(State, tangent_idx) diff --git a/src/modules/ekf2/EKF/python/ekf_derivation/generated/compute_range_beacon_innov_var_and_h.h b/src/modules/ekf2/EKF/python/ekf_derivation/generated/compute_range_beacon_innov_var_and_h.h new file mode 100644 index 0000000000..f2dd55e297 --- /dev/null +++ b/src/modules/ekf2/EKF/python/ekf_derivation/generated/compute_range_beacon_innov_var_and_h.h @@ -0,0 +1,71 @@ +// ----------------------------------------------------------------------------- +// This file was autogenerated by symforce from template: +// function/FUNCTION.h.jinja +// Do NOT modify by hand. +// ----------------------------------------------------------------------------- + +#pragma once + +#include + +namespace sym { + +/** + * This function was autogenerated from a symbolic function. Do not modify by hand. + * + * Symbolic function: compute_range_beacon_innov_var_and_h + * + * Args: + * state: Matrix25_1 + * P: Matrix24_24 + * beacon_pos: Matrix31 + * R: Scalar + * epsilon: Scalar + * + * Outputs: + * innov_var: Scalar + * H: Matrix24_1 + */ +template +void ComputeRangeBeaconInnovVarAndH(const matrix::Matrix& state, + const matrix::Matrix& P, + const matrix::Matrix& beacon_pos, const Scalar R, + const Scalar epsilon, Scalar* const innov_var = nullptr, + matrix::Matrix* const H = nullptr) { + // Total ops: 40 + + // Input arrays + + // Intermediate terms (7) + const Scalar _tmp0 = beacon_pos(2, 0) - state(9, 0); + const Scalar _tmp1 = beacon_pos(1, 0) - state(8, 0); + const Scalar _tmp2 = beacon_pos(0, 0) - state(7, 0); + const Scalar _tmp3 = std::pow(Scalar(std::pow(_tmp0, Scalar(2)) + std::pow(_tmp1, Scalar(2)) + + std::pow(_tmp2, Scalar(2)) + epsilon), + Scalar(Scalar(-1) / Scalar(2))); + const Scalar _tmp4 = _tmp0 * _tmp3; + const Scalar _tmp5 = _tmp2 * _tmp3; + const Scalar _tmp6 = _tmp1 * _tmp3; + + // Output terms (2) + if (innov_var != nullptr) { + Scalar& _innov_var = (*innov_var); + + _innov_var = R - _tmp4 * (-P(6, 8) * _tmp5 - P(7, 8) * _tmp6 - P(8, 8) * _tmp4) - + _tmp5 * (-P(6, 6) * _tmp5 - P(7, 6) * _tmp6 - P(8, 6) * _tmp4) - + _tmp6 * (-P(6, 7) * _tmp5 - P(7, 7) * _tmp6 - P(8, 7) * _tmp4); + } + + if (H != nullptr) { + matrix::Matrix& _h = (*H); + + _h.setZero(); + + _h(6, 0) = -_tmp5; + _h(7, 0) = -_tmp6; + _h(8, 0) = -_tmp4; + } +} // NOLINT(readability/fn_size) + +// NOLINTNEXTLINE(readability/fn_size) +} // namespace sym diff --git a/src/modules/ekf2/EKF/python/tuning_tools/baro_static_pressure_compensation/requirements.txt b/src/modules/ekf2/EKF/python/tuning_tools/baro_static_pressure_compensation/requirements.txt index 8e93d98669..ae2d64bdd0 100644 --- a/src/modules/ekf2/EKF/python/tuning_tools/baro_static_pressure_compensation/requirements.txt +++ b/src/modules/ekf2/EKF/python/tuning_tools/baro_static_pressure_compensation/requirements.txt @@ -1,6 +1,5 @@ matplotlib==3.5.1 numpy==1.22.2 -numpy==1.21.5 numpy_quaternion==2022.4.3 pyulog==0.9.0 scipy==1.8.0 diff --git a/src/modules/ekf2/EKF2.cpp b/src/modules/ekf2/EKF2.cpp index 98e2be7828..919d0f9a7f 100644 --- a/src/modules/ekf2/EKF2.cpp +++ b/src/modules/ekf2/EKF2.cpp @@ -62,10 +62,12 @@ EKF2::EKF2(bool multi_mode, const px4::wq_config_t &config, bool replay_mode): _wind_pub(multi_mode ? ORB_ID(estimator_wind) : ORB_ID(wind)), #endif // CONFIG_EKF2_WIND _params(_ekf.getParamHandle()), + _fc(*_ekf.getFusionControlHandle()), _param_ekf2_predict_us(_params->ekf2_predict_us), _param_ekf2_delay_max(_params->ekf2_delay_max), _param_ekf2_imu_ctrl(_params->ekf2_imu_ctrl), _param_ekf2_vel_lim(_params->ekf2_vel_lim), + _param_ekf2_sens_en(_params->ekf2_sens_en), #if defined(CONFIG_EKF2_AUXVEL) _param_ekf2_avel_delay(_params->ekf2_avel_delay), #endif // CONFIG_EKF2_AUXVEL @@ -80,10 +82,6 @@ EKF2::EKF2(bool multi_mode, const px4::wq_config_t &config, bool replay_mode): #if defined(CONFIG_EKF2_GNSS) _param_ekf2_gps_ctrl(_params->ekf2_gps_ctrl), _param_ekf2_gps_mode(_params->ekf2_gps_mode), - _param_ekf2_gps_delay(_params->ekf2_gps_delay), - _param_ekf2_gps_pos_x(_params->gps_pos_body(0)), - _param_ekf2_gps_pos_y(_params->gps_pos_body(1)), - _param_ekf2_gps_pos_z(_params->gps_pos_body(2)), _param_ekf2_gps_v_noise(_params->ekf2_gps_v_noise), _param_ekf2_gps_p_noise(_params->ekf2_gps_p_noise), _param_ekf2_gps_p_gate(_params->ekf2_gps_p_gate), @@ -168,6 +166,12 @@ EKF2::EKF2(bool multi_mode, const px4::wq_config_t &config, bool replay_mode): _param_ekf2_rng_pos_y(_params->rng_pos_body(1)), _param_ekf2_rng_pos_z(_params->rng_pos_body(2)), #endif // CONFIG_EKF2_RANGE_FINDER +#if defined(CONFIG_EKF2_RANGING_BEACON) + _param_ekf2_rngbc_ctrl(_params->ekf2_rngbc_ctrl), + _param_ekf2_rngbc_delay(_params->ekf2_rngbc_delay), + _param_ekf2_rngbc_noise(_params->ekf2_rngbc_noise), + _param_ekf2_rngbc_gate(_params->ekf2_rngbc_gate), +#endif // CONFIG_EKF2_RANGING_BEACON #if defined(CONFIG_EKF2_EXTERNAL_VISION) _param_ekf2_ev_delay(_params->ekf2_ev_delay), _param_ekf2_ev_ctrl(_params->ekf2_ev_ctrl), @@ -216,6 +220,7 @@ EKF2::EKF2(bool multi_mode, const px4::wq_config_t &config, bool replay_mode): _param_ekf2_abl_tau(_params->ekf2_abl_tau), _param_ekf2_gyr_b_lim(_params->ekf2_gyr_b_lim) { + initFusionControl(); AdvertiseTopics(); } @@ -369,6 +374,14 @@ void EKF2::AdvertiseTopics() #endif // CONFIG_EKF2_RANGE_FINDER +#if defined(CONFIG_EKF2_RANGING_BEACON) + + if (_param_ekf2_rngbc_ctrl.get()) { + _estimator_aid_src_ranging_beacon_pub.advertise(); + } + +#endif // CONFIG_EKF2_RANGING_BEACON + #if defined(CONFIG_EKF2_SIDESLIP) if (_param_ekf2_fuse_beta.get()) { @@ -448,6 +461,7 @@ void EKF2::Run() // update parameters from storage updateParams(); + initFusionControl(); VerifyParams(); @@ -597,6 +611,12 @@ void EKF2::Run() command_ack.timestamp = hrt_absolute_time(); _vehicle_command_ack_pub.publish(command_ack); } + + if (vehicle_command.command == vehicle_command_s::VEHICLE_CMD_ESTIMATOR_SENSOR_ENABLE) { + handleSensorFusionCommand(vehicle_command, command_ack); + command_ack.timestamp = hrt_absolute_time(); + _vehicle_command_ack_pub.publish(command_ack); + } } } @@ -794,6 +814,9 @@ void EKF2::Run() #if defined(CONFIG_EKF2_RANGE_FINDER) UpdateRangeSample(ekf2_timestamps); #endif // CONFIG_EKF2_RANGE_FINDER +#if defined(CONFIG_EKF2_RANGING_BEACON) + UpdateRangingBeaconSample(ekf2_timestamps); +#endif // CONFIG_EKF2_RANGING_BEACON UpdateSystemFlagsSample(ekf2_timestamps); // run the EKF update and output @@ -815,6 +838,7 @@ void EKF2::Run() PublishEventFlags(now); PublishStatus(now); PublishStatusFlags(now); + PublishFusionControl(now); if (_param_ekf2_log_verbose.get()) { PublishAidSourceStatus(now); @@ -931,11 +955,17 @@ void EKF2::VerifyParams() #endif // CONFIG_EKF2_RANGE_FINDER #if defined(CONFIG_EKF2_GNSS) + { + int32_t gps_delay_ms = 0; - if (_param_ekf2_gps_delay.get() > delay_max) { - delay_max = _param_ekf2_gps_delay.get(); + if (param_get(param_find("SENS_GPS0_DELAY"), &gps_delay_ms) == PX4_OK) { + delay_max = math::max(delay_max, static_cast(gps_delay_ms)); + } + + if (param_get(param_find("SENS_GPS1_DELAY"), &gps_delay_ms) == PX4_OK) { + delay_max = math::max(delay_max, static_cast(gps_delay_ms)); + } } - #endif // CONFIG_EKF2_GNSS #if defined(CONFIG_EKF2_OPTICAL_FLOW) @@ -965,6 +995,104 @@ void EKF2::VerifyParams() } } +void EKF2::initFusionControl() +{ + if (!_prev_armed) { + + const int32_t sens_en = _param_ekf2_sens_en.get(); + + _fc.gps.enabled = sens_en & (1 << SENS_EN_GPS0); + _fc.of.enabled = sens_en & (1 << SENS_EN_OF); + _fc.ev.enabled = sens_en & (1 << SENS_EN_EV); + + for (uint8_t i = 0; i < MAX_AGP_INSTANCES; i++) { + _fc.agp[i].enabled = sens_en & (1 << (SENS_EN_AGP0 + i)); + } + + _fc.baro.enabled = sens_en & (1 << SENS_EN_BARO); + _fc.rng.enabled = sens_en & (1 << SENS_EN_RNG); + _fc.mag.enabled = sens_en & (1 << SENS_EN_MAG); + _fc.aspd.enabled = sens_en & (1 << SENS_EN_ASPD); + _fc.rngbcn.enabled = sens_en & (1 << SENS_EN_RNGBCN); + } +} + +void EKF2::handleSensorFusionCommand(const vehicle_command_s &cmd, vehicle_command_ack_s &ack) +{ + ack.result = vehicle_command_ack_s::VEHICLE_CMD_RESULT_UNSUPPORTED; + + const uint8_t sensor_type = static_cast(cmd.param1); + const uint8_t instance = PX4_ISFINITE(cmd.param2) ? static_cast(cmd.param2) : 0; + const bool enable = (static_cast(cmd.param3) == 1); + + FusionSensor *sensor = nullptr; + + switch (sensor_type) { + case vehicle_command_s::FUSION_SOURCE_GPS: sensor = &_fc.gps; break; + + case vehicle_command_s::FUSION_SOURCE_OF: sensor = &_fc.of; break; + + case vehicle_command_s::FUSION_SOURCE_EV: sensor = &_fc.ev; break; + + case vehicle_command_s::FUSION_SOURCE_AGP: + if (instance < MAX_AGP_INSTANCES) { sensor = &_fc.agp[instance]; } + + break; + + case vehicle_command_s::FUSION_SOURCE_BARO: sensor = &_fc.baro; break; + + case vehicle_command_s::FUSION_SOURCE_RNG: sensor = &_fc.rng; break; + + case vehicle_command_s::FUSION_SOURCE_MAG: sensor = &_fc.mag; break; + + case vehicle_command_s::FUSION_SOURCE_ASPD: sensor = &_fc.aspd; break; + + case vehicle_command_s::FUSION_SOURCE_RNGBCN: sensor = &_fc.rngbcn; break; + + default: break; + } + + if (sensor) { + sensor->enabled = enable; + + if (!_prev_armed) { + syncSensEnParam(); + } + + ack.result = (!enable || sensor->available) + ? vehicle_command_ack_s::VEHICLE_CMD_RESULT_ACCEPTED + : vehicle_command_ack_s::VEHICLE_CMD_RESULT_TEMPORARILY_REJECTED; + } +} + +void EKF2::syncSensEnParam() +{ + int32_t sens_en = 0; + + if (_fc.gps.enabled) { sens_en |= (1 << SENS_EN_GPS0); } + + if (_fc.of.enabled) { sens_en |= (1 << SENS_EN_OF); } + + if (_fc.ev.enabled) { sens_en |= (1 << SENS_EN_EV); } + + for (uint8_t i = 0; i < MAX_AGP_INSTANCES; i++) { + if (_fc.agp[i].enabled) { sens_en |= (1 << (SENS_EN_AGP0 + i)); } + } + + if (_fc.baro.enabled) { sens_en |= (1 << SENS_EN_BARO); } + + if (_fc.rng.enabled) { sens_en |= (1 << SENS_EN_RNG); } + + if (_fc.mag.enabled) { sens_en |= (1 << SENS_EN_MAG); } + + if (_fc.aspd.enabled) { sens_en |= (1 << SENS_EN_ASPD); } + + if (_fc.rngbcn.enabled) { sens_en |= (1 << SENS_EN_RNGBCN); } + + _param_ekf2_sens_en.set(sens_en); + _param_ekf2_sens_en.commit_no_notification(); +} + void EKF2::PublishAidSourceStatus(const hrt_abstime ×tamp) { #if defined(CONFIG_EKF2_AIRSPEED) @@ -990,6 +1118,12 @@ void EKF2::PublishAidSourceStatus(const hrt_abstime ×tamp) PublishAidSourceStatus(timestamp, _ekf.aid_src_rng_hgt(), _status_rng_hgt_pub_last, _estimator_aid_src_rng_hgt_pub); #endif // CONFIG_EKF2_RANGE_FINDER +#if defined(CONFIG_EKF2_RANGING_BEACON) + // ranging beacon + PublishAidSourceStatus(timestamp, _ekf.aid_src_ranging_beacon(), _status_ranging_beacon_pub_last, + _estimator_aid_src_ranging_beacon_pub); +#endif // CONFIG_EKF2_RANGING_BEACON + // fake position PublishAidSourceStatus(timestamp, _ekf.aid_src_fake_pos(), _status_fake_pos_pub_last, _estimator_aid_src_fake_pos_pub); PublishAidSourceStatus(timestamp, _ekf.aid_src_fake_hgt(), _status_fake_hgt_pub_last, _estimator_aid_src_fake_hgt_pub); @@ -1227,7 +1361,7 @@ void EKF2::PublishGlobalPosition(const hrt_abstime ×tamp) float delta_hagl = 0.f; _ekf.get_hagl_reset(&delta_hagl, &global_pos.terrain_reset_counter); - global_pos.delta_terrain = -delta_z; + global_pos.delta_terrain = -delta_hagl; #endif // CONFIG_EKF2_TERRAIN global_pos.dead_reckoning = _ekf.control_status_flags().inertial_dead_reckoning @@ -1853,7 +1987,7 @@ void EKF2::PublishStatus(const hrt_abstime ×tamp) status.time_slip = _last_time_slip_us * 1e-6f; static constexpr float kMinTestRatioPreflight = 0.5f; - status.pre_flt_fail_innov_heading = (kMinTestRatioPreflight < status.hdg_test_ratio); + status.pre_flt_fail_innov_heading = (kMinTestRatioPreflight < status.hdg_test_ratio) || !_ekf.control_status_flags().yaw_align; status.pre_flt_fail_innov_height = (kMinTestRatioPreflight < status.hgt_test_ratio); status.pre_flt_fail_innov_pos_horiz = (kMinTestRatioPreflight < status.pos_test_ratio); status.pre_flt_fail_innov_vel_horiz = (kMinTestRatioPreflight < vel_xy_test_ratio); @@ -1878,6 +2012,47 @@ void EKF2::PublishStatus(const hrt_abstime ×tamp) _estimator_status_pub.publish(status); } +void EKF2::PublishFusionControl(const hrt_abstime ×tamp) +{ + estimator_fusion_control_s msg{}; + msg.gps_intended[0] = _fc.gps.intended(); + msg.of_intended = _fc.of.intended(); + msg.ev_intended = _fc.ev.intended(); + + for (uint8_t i = 0; i < MAX_AGP_INSTANCES; i++) { + msg.agp_intended[i] = _fc.agp[i].intended(); + } + + msg.baro_intended = _fc.baro.intended(); + msg.rng_intended = _fc.rng.intended(); + msg.mag_intended = _fc.mag.intended(); + msg.aspd_intended = _fc.aspd.intended(); + msg.rngbcn_intended = _fc.rngbcn.intended(); + + const auto &cs = _ekf.control_status_flags(); + msg.gps_active[0] = cs.gnss_pos || cs.gps_hgt || cs.gnss_vel || cs.gnss_yaw; + msg.of_active = cs.opt_flow; + msg.ev_active = cs.ev_pos || cs.ev_hgt || cs.ev_vel || cs.ev_yaw; + msg.baro_active = cs.baro_hgt; + msg.rng_active = cs.rng_hgt; + msg.mag_active = cs.mag; + msg.aspd_active = cs.fuse_aspd; + msg.rngbcn_active = cs.rngbcn_fusion; + +#if defined(CONFIG_EKF2_AUX_GLOBAL_POSITION) + { + const uint8_t agp_mask = _ekf.getAgpFusingBitmask(); + + for (uint8_t i = 0; i < MAX_AGP_INSTANCES; i++) { + msg.agp_active[i] = agp_mask & (1u << i); + } + } +#endif + + msg.timestamp = _replay_mode ? timestamp : hrt_absolute_time(); + _estimator_fc_pub.publish(msg); +} + void EKF2::PublishStatusFlags(const hrt_abstime ×tamp) { // publish at ~ 1 Hz (or immediately if filter control status or fault status changes) @@ -1950,6 +2125,8 @@ void EKF2::PublishStatusFlags(const hrt_abstime ×tamp) status_flags.cs_gnss_fault = _ekf.control_status_flags().gnss_fault; status_flags.cs_yaw_manual = _ekf.control_status_flags().yaw_manual; status_flags.cs_gnss_hgt_fault = _ekf.control_status_flags().gnss_hgt_fault; + status_flags.cs_in_transition = _ekf.control_status_flags().in_transition; + status_flags.cs_heading_observable = _ekf.control_status_flags().heading_observable; status_flags.fault_status_changes = _filter_fault_status_changes; status_flags.fs_bad_mag_x = _ekf.fault_status_flags().bad_mag_x; @@ -2144,6 +2321,30 @@ void EKF2::UpdateAuxVelSample(ekf2_timestamps_s &ekf2_timestamps) } #endif // CONFIG_EKF2_AUXVEL +#if defined(CONFIG_EKF2_RANGING_BEACON) +void EKF2::UpdateRangingBeaconSample(ekf2_timestamps_s &ekf2_timestamps) +{ + ranging_beacon_s ranging_beacon; + + if (_ranging_beacon_sub.update(&ranging_beacon)) { + const float range_var = PX4_ISFINITE(ranging_beacon.range_accuracy) + ? sq(ranging_beacon.range_accuracy) : sq(_param_ekf2_rngbc_noise.get()); + + rangingBeaconSample sample{ + .time_us = ranging_beacon.timestamp_sample, + .beacon_id = ranging_beacon.beacon_id, + .range_m = ranging_beacon.range, + .range_var = range_var, + .beacon_lat = ranging_beacon.lat, + .beacon_lon = ranging_beacon.lon, + .beacon_alt = ranging_beacon.alt, + }; + + _ekf.setRangingBeaconData(sample); + } +} +#endif // CONFIG_EKF2_RANGING_BEACON + #if defined(CONFIG_EKF2_BAROMETER) void EKF2::UpdateBaroSample(ekf2_timestamps_s &ekf2_timestamps) { @@ -2434,12 +2635,12 @@ void EKF2::UpdateGpsSample(ekf2_timestamps_s &ekf2_timestamps) const float altitude_amsl = static_cast(vehicle_gps_position.altitude_msl_m); const float altitude_ellipsoid = static_cast(vehicle_gps_position.altitude_ellipsoid_m); - // if pps_compensation is active but not valid, the timestamp_sample will be equal to timestamp - const bool pps_compensation = vehicle_gps_position.timestamp_sample > 0 - && vehicle_gps_position.timestamp_sample != vehicle_gps_position.timestamp; + // timestamp_sample is corrected by the sensors module (per-receiver delay or PPS) + const bool timestamp_corrected = vehicle_gps_position.timestamp_sample > 0 + && vehicle_gps_position.timestamp_sample != vehicle_gps_position.timestamp; gnssSample gnss_sample{ - .time_us = pps_compensation ? vehicle_gps_position.timestamp_sample : vehicle_gps_position.timestamp, + .time_us = timestamp_corrected ? vehicle_gps_position.timestamp_sample : vehicle_gps_position.timestamp, .lat = vehicle_gps_position.latitude_deg, .lon = vehicle_gps_position.longitude_deg, .alt = altitude_amsl, @@ -2456,9 +2657,12 @@ void EKF2::UpdateGpsSample(ekf2_timestamps_s &ekf2_timestamps) .yaw_offset = vehicle_gps_position.heading_offset, .spoofed = vehicle_gps_position.spoofing_state == sensor_gps_s::SPOOFING_STATE_DETECTED, .jammed = vehicle_gps_position.jamming_state == sensor_gps_s::JAMMING_STATE_DETECTED, + .pos_body = Vector3f(vehicle_gps_position.antenna_offset_x, + vehicle_gps_position.antenna_offset_y, + vehicle_gps_position.antenna_offset_z), }; - _ekf.setGpsData(gnss_sample, pps_compensation); + _ekf.setGpsData(gnss_sample); const float geoid_height = altitude_ellipsoid - altitude_amsl; @@ -2597,18 +2801,23 @@ void EKF2::UpdateSystemFlagsSample(ekf2_timestamps_s &ekf2_timestamps) // vehicle_status vehicle_status_s vehicle_status; - bool armed = false; - if (_status_sub.copy(&vehicle_status) && (ekf2_timestamps.timestamp < vehicle_status.timestamp + 3_s)) { + const bool armed = (vehicle_status.arming_state == vehicle_status_s::ARMING_STATE_ARMED); + + if (_prev_armed && !armed) { + syncSensEnParam(); + } + + _prev_armed = armed; + // initially set in_air from arming_state (will be overridden if land detector is available) - armed = (vehicle_status.arming_state == vehicle_status_s::ARMING_STATE_ARMED); flags.in_air = armed; // let the EKF know if the vehicle motion is that of a fixed wing (forward flight only relative to wind) flags.is_fixed_wing = (vehicle_status.vehicle_type == vehicle_status_s::VEHICLE_TYPE_FIXED_WING); - flags.in_transition_to_fw = vehicle_status.in_transition_to_fw; + flags.in_transition = vehicle_status.in_transition_mode; #if defined(CONFIG_EKF2_SIDESLIP) @@ -2631,8 +2840,7 @@ void EKF2::UpdateSystemFlagsSample(ekf2_timestamps_s &ekf2_timestamps) flags.in_air = !vehicle_land_detected.landed; flags.gnd_effect = vehicle_land_detected.in_ground_effect; - // Enable constant position fusion for engine warmup when landed and armed - flags.constant_pos = _param_ekf2_engine_wrm.get() && !flags.in_air && armed; + flags.constant_pos = _param_ekf2_pos_lock.get() && !flags.in_air && _ekf.isGlobalHorizontalPositionValid(); } launch_detection_status_s launch_detection_status; @@ -2640,8 +2848,8 @@ void EKF2::UpdateSystemFlagsSample(ekf2_timestamps_s &ekf2_timestamps) if (_launch_detection_status_sub.copy(&launch_detection_status) && (ekf2_timestamps.timestamp < launch_detection_status.timestamp + 3_s)) { - flags.constant_pos = (launch_detection_status.launch_detection_state == - launch_detection_status_s::STATE_WAITING_FOR_LAUNCH); + flags.constant_pos |= (launch_detection_status.launch_detection_state == + launch_detection_status_s::STATE_WAITING_FOR_LAUNCH); } _ekf.setSystemFlagData(flags); @@ -2862,12 +3070,12 @@ int EKF2::task_spawn(int argc, char *argv[]) vehicle_status_sub.update(); - for (uint8_t mag = 0; mag < mag_instances; mag++) { - uORB::SubscriptionData vehicle_mag_sub{ORB_ID(vehicle_magnetometer), mag}; + for (size_t mag = 0; mag < static_cast(mag_instances); mag++) { + uORB::SubscriptionData vehicle_mag_sub{ORB_ID(vehicle_magnetometer), static_cast(mag)}; - for (uint8_t imu = 0; imu < imu_instances; imu++) { + for (size_t imu = 0; imu < static_cast(imu_instances); imu++) { - uORB::SubscriptionData vehicle_imu_sub{ORB_ID(vehicle_imu), imu}; + uORB::SubscriptionData vehicle_imu_sub{ORB_ID(vehicle_imu), static_cast(imu)}; vehicle_mag_sub.update(); // Mag & IMU data must be valid, first mag can be ignored initially @@ -2898,7 +3106,7 @@ int EKF2::task_spawn(int argc, char *argv[]) } } else { - PX4_ERR("alloc and init failed imu: %" PRIu8 " mag:%" PRIu8, imu, mag); + PX4_ERR("alloc and init failed imu: %" PRIu8 " mag:%" PRIu8, static_cast(imu), static_cast(mag)); px4_usleep(100000); break; } @@ -2945,7 +3153,7 @@ int EKF2::print_usage(const char *reason) ### Description Attitude and position estimator using an Extended Kalman Filter. It is used for Multirotors and Fixed-Wing. -The documentation can be found on the [ECL/EKF Overview & Tuning](https://docs.px4.io/main/en/advanced_config/tuning_the_ecl_ekf.html) page. +The documentation can be found on the [ECL/EKF Overview & Tuning](../advanced_config/tuning_the_ecl_ekf.md) page. ekf2 can be started in replay mode (`-r`): in this mode, it does not access the system time, but only uses the timestamps from the sensor topics. diff --git a/src/modules/ekf2/EKF2.hpp b/src/modules/ekf2/EKF2.hpp index ff372df248..b350d9c102 100644 --- a/src/modules/ekf2/EKF2.hpp +++ b/src/modules/ekf2/EKF2.hpp @@ -73,6 +73,7 @@ #include #include #include +#include #include #include #include @@ -123,6 +124,10 @@ # include #endif // CONFIG_EKF2_WIND +#if defined(CONFIG_EKF2_RANGING_BEACON) +# include +#endif // CONFIG_EKF2_RANGING_BEACON + extern pthread_mutex_t ekf2_module_mutex; class EKF2 final : public ModuleParams, public px4::ScheduledWorkItem @@ -194,6 +199,7 @@ private: void PublishStates(const hrt_abstime ×tamp); void PublishStatus(const hrt_abstime ×tamp); void PublishStatusFlags(const hrt_abstime ×tamp); + void PublishFusionControl(const hrt_abstime ×tamp); #if defined(CONFIG_EKF2_WIND) void PublishWindEstimate(const hrt_abstime ×tamp); #endif // CONFIG_EKF2_WIND @@ -229,6 +235,9 @@ private: #if defined(CONFIG_EKF2_RANGE_FINDER) void UpdateRangeSample(ekf2_timestamps_s &ekf2_timestamps); #endif // CONFIG_EKF2_RANGE_FINDER +#if defined(CONFIG_EKF2_RANGING_BEACON) + void UpdateRangingBeaconSample(ekf2_timestamps_s &ekf2_timestamps); +#endif // CONFIG_EKF2_RANGING_BEACON void UpdateSystemFlagsSample(ekf2_timestamps_s &ekf2_timestamps); @@ -339,6 +348,10 @@ private: hrt_abstime _status_aux_vel_pub_last{0}; #endif // CONFIG_EKF2_AUXVEL +#if defined(CONFIG_EKF2_RANGING_BEACON) + uORB::Subscription _ranging_beacon_sub {ORB_ID(ranging_beacon)}; +#endif // CONFIG_EKF2_RANGING_BEACON + #if defined(CONFIG_EKF2_OPTICAL_FLOW) uORB::Subscription _vehicle_optical_flow_sub {ORB_ID(vehicle_optical_flow)}; uORB::PublicationMulti _estimator_optical_flow_vel_pub{ORB_ID(estimator_optical_flow_vel)}; @@ -394,6 +407,25 @@ private: uORB::Subscription _vehicle_command_sub{ORB_ID(vehicle_command)}; uORB::Publication _vehicle_command_ack_pub{ORB_ID(vehicle_command_ack)}; + enum SensEnBit : uint16_t { + SENS_EN_GPS0 = 0, + SENS_EN_GPS1 = 1, + SENS_EN_OF = 2, + SENS_EN_EV = 3, + SENS_EN_AGP0 = 4, + // bit: 5-7 reserved for AGP1..3 + SENS_EN_BARO = 8, + SENS_EN_RNG = 9, + SENS_EN_MAG = 10, + SENS_EN_ASPD = 11, + SENS_EN_RNGBCN = 12, + }; + bool _prev_armed{false}; + + void initFusionControl(); + void handleSensorFusionCommand(const vehicle_command_s &cmd, vehicle_command_ack_s &ack); + void syncSensEnParam(); + uORB::SubscriptionCallbackWorkItem _sensor_combined_sub{this, ORB_ID(sensor_combined)}; uORB::SubscriptionCallbackWorkItem _vehicle_imu_sub{this, ORB_ID(vehicle_imu)}; @@ -407,6 +439,11 @@ private: int _distance_sensor_selected{-1}; // because we can have several distance sensor instances with different orientations #endif // CONFIG_EKF2_RANGE_FINDER +#if defined(CONFIG_EKF2_RANGING_BEACON) + hrt_abstime _status_ranging_beacon_pub_last {0}; + uORB::PublicationMulti _estimator_aid_src_ranging_beacon_pub{ORB_ID(estimator_aid_src_ranging_beacon)}; +#endif // CONFIG_EKF2_RANGING_BEACON + bool _callback_registered{false}; hrt_abstime _last_event_flags_publish{0}; @@ -427,6 +464,7 @@ private: uORB::PublicationMulti _estimator_sensor_bias_pub{ORB_ID(estimator_sensor_bias)}; uORB::PublicationMulti _estimator_states_pub{ORB_ID(estimator_states)}; uORB::PublicationMulti _estimator_status_flags_pub{ORB_ID(estimator_status_flags)}; + uORB::PublicationMulti _estimator_fc_pub{ORB_ID(estimator_fusion_control)}; uORB::PublicationMulti _estimator_status_pub{ORB_ID(estimator_status)}; uORB::PublicationMulti _estimator_aid_src_fake_hgt_pub{ORB_ID(estimator_aid_src_fake_hgt)}; @@ -480,6 +518,7 @@ private: Ekf _ekf; parameters *_params; ///< pointer to ekf parameter struct (located in _ekf class instance) + FusionControl &_fc; DEFINE_PARAMETERS( (ParamBool) _param_ekf2_log_verbose, @@ -487,7 +526,8 @@ private: (ParamExtFloat) _param_ekf2_delay_max, (ParamExtInt) _param_ekf2_imu_ctrl, (ParamExtFloat) _param_ekf2_vel_lim, - (ParamBool) _param_ekf2_engine_wrm, + (ParamBool) _param_ekf2_pos_lock, + (ParamExtInt) _param_ekf2_sens_en, #if defined(CONFIG_EKF2_AUXVEL) (ParamExtFloat) @@ -514,12 +554,6 @@ private: #if defined(CONFIG_EKF2_GNSS) (ParamExtInt) _param_ekf2_gps_ctrl, (ParamExtInt) _param_ekf2_gps_mode, - (ParamExtFloat) _param_ekf2_gps_delay, - - (ParamExtFloat) _param_ekf2_gps_pos_x, - (ParamExtFloat) _param_ekf2_gps_pos_y, - (ParamExtFloat) _param_ekf2_gps_pos_z, - (ParamExtFloat) _param_ekf2_gps_v_noise, (ParamExtFloat) _param_ekf2_gps_p_noise, @@ -543,7 +577,7 @@ private: #endif // CONFIG_EKF2_GNSS #if defined(CONFIG_EKF2_BAROMETER) - (ParamExtInt) _param_ekf2_baro_ctrl,///< barometer control selection + (ParamExtInt) _param_ekf2_baro_ctrl, (ParamExtFloat) _param_ekf2_baro_delay, (ParamExtFloat) _param_ekf2_baro_noise, (ParamExtFloat) _param_ekf2_baro_gate, @@ -628,6 +662,14 @@ private: (ParamExtFloat) _param_ekf2_rng_pos_z, #endif // CONFIG_EKF2_RANGE_FINDER +#if defined(CONFIG_EKF2_RANGING_BEACON) + // ranging beacon fusion + (ParamExtInt) _param_ekf2_rngbc_ctrl, + (ParamExtFloat) _param_ekf2_rngbc_delay, + (ParamExtFloat) _param_ekf2_rngbc_noise, + (ParamExtFloat) _param_ekf2_rngbc_gate, +#endif // CONFIG_EKF2_RANGING_BEACON + #if defined(CONFIG_EKF2_EXTERNAL_VISION) // vision estimate fusion (ParamExtFloat) @@ -657,7 +699,7 @@ private: #if defined(CONFIG_EKF2_OPTICAL_FLOW) // optical flow fusion (ParamExtInt) - _param_ekf2_of_ctrl, ///< optical flow fusion selection + _param_ekf2_of_ctrl, (ParamExtInt) _param_ekf2_of_gyr_src, (ParamExtFloat) diff --git a/src/modules/ekf2/Kconfig b/src/modules/ekf2/Kconfig index 04bcfc104c..88bbb6a7e1 100644 --- a/src/modules/ekf2/Kconfig +++ b/src/modules/ekf2/Kconfig @@ -120,6 +120,14 @@ depends on MODULES_EKF2 ---help--- EKF2 range finder fusion support. +menuconfig EKF2_RANGING_BEACON +depends on MODULES_EKF2 + bool "ranging beacon fusion support" + default y + depends on !BOARD_CONSTRAINED_FLASH + ---help--- + EKF2 ranging beacon fusion support. + menuconfig EKF2_SIDESLIP depends on MODULES_EKF2 bool "sideslip fusion support" diff --git a/src/modules/ekf2/module.yaml b/src/modules/ekf2/module.yaml index b0462ec5f8..03b06e54ad 100644 --- a/src/modules/ekf2/module.yaml +++ b/src/modules/ekf2/module.yaml @@ -92,8 +92,10 @@ parameters: by this parameter. The range sensor and vision options should only be used when for operation over a flat surface as the local NED origin will move up and down with ground level. - If GPS is set as reference but altitude fusion is disabled in EKF2_GPS_CTRL, - the GPS altitude is still used to initiaize the bias of the other height sensors. + + If GPS is set as reference and EKF2_GPS_CTRL is not 0, the GPS altitude is + still used to initiaize the bias of the other height sensors, regardless of + the altitude fusion bit in EKF2_GPS_CTRL. type: enum values: 0: Barometric pressure @@ -184,10 +186,36 @@ parameters: unit: m/s decimal: 1 - EKF2_ENGINE_WRM: + EKF2_POS_LOCK: description: - short: Enable constant position fusion during engine warmup - long: When enabled, constant position fusion is enabled when the vehicle is landed and armed. - This is intended for IC engine warmup (e.g., fuel engines on catapult) to allow mode transitions to auto/takeoff despite vibrations from running engines. + short: Enable constant position fusion while on ground + long: When enabled, constant position fusion is enabled when the vehicle is landeded if position has been initialized but has currently no vel/pos aiding. type: boolean default: 0 + + EKF2_SENS_EN: + description: + short: Sensor fusion enable bitmask + long: 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). + type: bitmask + bit: + 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 + default: 8191 + min: 0 + max: 8191 diff --git a/src/modules/ekf2/params_gnss.yaml b/src/modules/ekf2/params_gnss.yaml index 04bff36346..acc5a9db3a 100644 --- a/src/modules/ekf2/params_gnss.yaml +++ b/src/modules/ekf2/params_gnss.yaml @@ -27,18 +27,6 @@ parameters: 0: Automatic 1: Dead-reckoning default: 0 - EKF2_GPS_DELAY: - description: - short: GPS measurement delay relative to IMU measurement - long: GPS measurement delay relative to IMU measurement if PPS time correction - is not available/enabled (PPS_CAP_ENABLE). - type: float - default: 110 - min: 0 - max: 300 - unit: ms - reboot_required: true - decimal: 1 EKF2_GPS_P_NOISE: description: short: Measurement noise for GNSS position @@ -86,30 +74,6 @@ parameters: max: 5.0 unit: m/s decimal: 2 - EKF2_GPS_POS_X: - description: - short: X position of GPS antenna in body frame - long: Forward (roll) axis with origin relative to vehicle centre of gravity - type: float - default: 0.0 - unit: m - decimal: 3 - EKF2_GPS_POS_Y: - description: - short: Y position of GPS antenna in body frame - long: Right (pitch) axis with origin relative to vehicle centre of gravity - type: float - default: 0.0 - unit: m - decimal: 3 - EKF2_GPS_POS_Z: - description: - short: Z position of GPS antenna in body frame - long: Down (yaw) axis with origin relative to vehicle centre of gravity - type: float - default: 0.0 - unit: m - decimal: 3 EKF2_GPS_CHECK: description: short: Integer bitmask controlling GPS checks @@ -137,7 +101,7 @@ parameters: short: Required EPH to use GPS type: float default: 3.0 - min: 2 + min: 0.1 max: 100 unit: m decimal: 1 @@ -146,7 +110,7 @@ parameters: short: Required EPV to use GPS type: float default: 5.0 - min: 2 + min: 0.1 max: 100 unit: m decimal: 1 diff --git a/src/modules/ekf2/params_ranging_beacon.yaml b/src/modules/ekf2/params_ranging_beacon.yaml new file mode 100644 index 0000000000..ab5360428a --- /dev/null +++ b/src/modules/ekf2/params_ranging_beacon.yaml @@ -0,0 +1,42 @@ +module_name: ekf2 +parameters: +- group: EKF2 + definitions: + EKF2_RNGBC_CTRL: + description: + short: Ranging beacon fusion control + long: Enable/disable ranging beacon fusion. + type: enum + values: + 0: Disable ranging beacon fusion + 1: Enable ranging beacon fusion + default: 0 + EKF2_RNGBC_DELAY: + description: + short: Ranging beacon measurement delay relative to IMU measurements + type: float + default: 0 + min: 0 + max: 1000 + unit: ms + reboot_required: true + decimal: 1 + EKF2_RNGBC_GATE: + description: + short: Gate size for ranging beacon fusion + long: Sets the number of standard deviations used by the innovation consistency test. + type: float + default: 5.0 + min: 1.0 + unit: SD + decimal: 1 + EKF2_RNGBC_NOISE: + description: + short: Measurement noise for ranging beacon fusion + long: Used to lower bound or replace the uncertainty included in the message + type: float + default: 30.0 + min: 0.1 + max: 500.0 + unit: m + decimal: 1 diff --git a/src/modules/ekf2/test/change_indication/ekf_gsf_reset.csv b/src/modules/ekf2/test/change_indication/ekf_gsf_reset.csv index 2e572c5051..c925e78507 100644 --- a/src/modules/ekf2/test/change_indication/ekf_gsf_reset.csv +++ b/src/modules/ekf2/test/change_indication/ekf_gsf_reset.csv @@ -1,391 +1,391 @@ Timestamp,state[0],state[1],state[2],state[3],state[4],state[5],state[6],state[7],state[8],state[9],state[10],state[11],state[12],state[13],state[14],state[15],state[16],state[17],state[18],state[19],state[20],state[21],state[22],state[23],variance[0],variance[1],variance[2],variance[3],variance[4],variance[5],variance[6],variance[7],variance[8],variance[9],variance[10],variance[11],variance[12],variance[13],variance[14],variance[15],variance[16],variance[17],variance[18],variance[19],variance[20],variance[21],variance[22],variance[23] -10000,1,-0.0094,-0.01,-3.2e-06,0.00023,7.3e-05,-0.011,0,0,-0.00045,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.1,0.01,0.01,8.1e-05,25,25,10,1e+02,1e+02,1e+02,0.01,0.01,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.032 -90000,1,-0.0094,-0.011,6.9e-05,-0.00047,0.0026,-0.026,0,0,-0.0023,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.1,0.01,0.01,0.00036,25,25,10,1e+02,1e+02,1e+02,0.01,0.01,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.058 -190000,1,-0.0094,-0.011,2.8e-05,6.9e-05,0.004,-0.041,0,0,-1.2e+02,-3e-11,-2.6e-12,5.6e-13,0,0,-5e-08,0,0,0,0,0,0,0,0,-1.2e+02,0.011,0.011,0.00084,25,25,10,1e+02,1e+02,1,0.01,0.01,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.082 -290000,1,-0.0094,-0.011,6.3e-05,0.001,0.0064,-0.053,0,0,-1.2e+02,9.1e-10,1e-10,-1.7e-11,0,0,-2.5e-06,0,0,0,0,0,0,0,0,-1.2e+02,0.012,0.012,0.00075,25,25,9.6,0.37,0.37,0.41,0.01,0.01,0.0049,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.11 -390000,1,-0.0094,-0.011,7e-05,0.0024,0.0083,-0.059,0,0,-1.2e+02,-1.1e-08,2.8e-09,2.9e-10,0,0,-1.5e-05,0,0,0,0,0,0,0,0,-1.2e+02,0.012,0.012,0.0012,25,25,8.1,0.97,0.97,0.32,0.01,0.01,0.0049,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.13 -490000,1,-0.0095,-0.012,2e-05,0.0039,0.0048,-0.06,0,0,-1.2e+02,1.6e-06,-3.7e-07,-4.2e-08,0,0,-4.1e-05,0,0,0,0,0,0,0,0,-1.2e+02,0.013,0.013,0.00072,7.8,7.8,5.9,0.34,0.34,0.31,0.01,0.01,0.0021,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.16 -590000,1,-0.0095,-0.012,2.6e-05,0.006,0.0073,-0.059,0,0,-1.2e+02,1.6e-06,-3.4e-07,-4e-08,0,0,-7.3e-05,0,0,0,0,0,0,0,0,-1.2e+02,0.015,0.015,0.00099,7.9,7.9,4.2,0.67,0.67,0.32,0.01,0.01,0.0021,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.18 -690000,1,-0.0096,-0.012,8.6e-05,0.0063,0.0052,-0.059,0,0,-1.2e+02,5.5e-06,-3.2e-06,-1.8e-07,0,0,-0.00012,0,0,0,0,0,0,0,0,-1.2e+02,0.016,0.016,0.00061,2.7,2.7,2.8,0.26,0.26,0.29,0.01,0.01,0.00098,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.21 -790000,1,-0.0097,-0.013,9.9e-05,0.0086,0.0073,-0.063,0,0,-1.2e+02,5.4e-06,-3.1e-06,-1.8e-07,0,0,-0.00016,0,0,0,0,0,0,0,0,-1.2e+02,0.018,0.018,0.00077,2.8,2.8,2,0.42,0.42,0.28,0.01,0.01,0.00098,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.23 -890000,1,-0.0098,-0.013,0.00012,0.01,0.006,-0.077,0,0,-1.2e+02,1.6e-05,-1.5e-05,-6.5e-07,0,0,-0.00016,0,0,0,0,0,0,0,0,-1.2e+02,0.019,0.019,0.00051,1.3,1.3,2,0.2,0.2,0.43,0.0099,0.01,0.00053,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.26 -990000,1,-0.0099,-0.013,0.00013,0.015,0.0064,-0.092,0,0,-1.2e+02,1.6e-05,-1.5e-05,-6.5e-07,0,0,-0.00016,0,0,0,0,0,0,0,0,-1.2e+02,0.021,0.021,0.00062,1.5,1.5,2,0.3,0.3,0.61,0.0099,0.01,0.00053,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.28 -1090000,1,-0.01,-0.014,0.00013,0.016,0.0051,-0.11,0,0,-1.2e+02,4.1e-05,-6.2e-05,-2.1e-06,0,0,-0.00016,0,0,0,0,0,0,0,0,-1.2e+02,0.023,0.023,0.00043,0.93,0.93,2,0.17,0.17,0.84,0.0098,0.0098,0.00032,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.31 -1190000,1,-0.01,-0.014,0.0001,0.02,0.0053,-0.12,0,0,-1.2e+02,4.1e-05,-6.2e-05,-2.1e-06,0,0,-0.00016,0,0,0,0,0,0,0,0,-1.2e+02,0.025,0.025,0.00051,1.1,1.1,2,0.24,0.24,1.1,0.0098,0.0098,0.00032,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.33 -1290000,1,-0.01,-0.014,0.00016,0.02,0.0044,-0.14,0,0,-1.2e+02,8.5e-05,-0.00019,-5.5e-06,0,0,-0.00016,0,0,0,0,0,0,0,0,-1.2e+02,0.026,0.026,0.00038,0.89,0.89,2,0.15,0.15,1.4,0.0095,0.0095,0.0002,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.36 -1390000,1,-0.01,-0.014,0.00017,0.026,0.0042,-0.15,0,0,-1.2e+02,8.5e-05,-0.00019,-5.5e-06,0,0,-0.00016,0,0,0,0,0,0,0,0,-1.2e+02,0.028,0.028,0.00043,1.2,1.2,2,0.21,0.21,1.7,0.0095,0.0095,0.0002,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.38 -1490000,1,-0.01,-0.014,0.00015,0.024,0.0029,-0.16,0,0,-1.2e+02,0.00015,-0.00045,-1.2e-05,0,0,-0.00016,0,0,0,0,0,0,0,0,-1.2e+02,0.027,0.027,0.00033,0.96,0.96,2,0.14,0.14,2.1,0.0088,0.0088,0.00014,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.41 -1590000,1,-0.01,-0.014,0.00015,0.03,0.0035,-0.18,0,0,-1.2e+02,0.00015,-0.00045,-1.2e-05,0,0,-0.00016,0,0,0,0,0,0,0,0,-1.2e+02,0.03,0.03,0.00037,1.3,1.3,2,0.2,0.2,2.6,0.0088,0.0088,0.00014,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.43 -1690000,1,-0.011,-0.014,0.00012,0.028,-9.5e-05,-0.19,0,0,-1.2e+02,0.0002,-0.00088,-2.2e-05,0,0,-0.00017,0,0,0,0,0,0,0,0,-1.2e+02,0.026,0.026,0.0003,1,1,2,0.14,0.14,3,0.0078,0.0078,0.0001,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.46 -1790000,1,-0.011,-0.014,9.5e-05,0.035,-0.0019,-0.2,0,0,-1.2e+02,0.0002,-0.00088,-2.2e-05,0,0,-0.00017,0,0,0,0,0,0,0,0,-1.2e+02,0.028,0.028,0.00033,1.3,1.3,2,0.2,0.2,3.5,0.0078,0.0078,0.0001,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.48 -1890000,1,-0.011,-0.015,7.5e-05,0.043,-0.0032,-0.22,0,0,-1.2e+02,0.0002,-0.00088,-2.2e-05,0,0,-0.00017,0,0,0,0,0,0,0,0,-1.2e+02,0.031,0.031,0.00037,1.7,1.7,2,0.31,0.31,4.1,0.0078,0.0078,0.0001,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.51 -1990000,1,-0.011,-0.014,8.5e-05,0.036,-0.0046,-0.23,0,0,-1.2e+02,0.00022,-0.0014,-3.2e-05,0,0,-0.00017,0,0,0,0,0,0,0,0,-1.2e+02,0.025,0.025,0.00029,1.3,1.3,2.1,0.2,0.2,4.7,0.0067,0.0067,7.5e-05,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.53 -2090000,1,-0.011,-0.014,4.7e-05,0.041,-0.0071,-0.24,0,0,-1.2e+02,0.00022,-0.0014,-3.2e-05,0,0,-0.00017,0,0,0,0,0,0,0,0,-1.2e+02,0.027,0.027,0.00032,1.7,1.7,2.1,0.31,0.31,5.3,0.0067,0.0067,7.5e-05,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.56 -2190000,1,-0.011,-0.014,5.9e-05,0.033,-0.0068,-0.26,0,0,-1.2e+02,0.00017,-0.002,-4.2e-05,0,0,-0.00017,0,0,0,0,0,0,0,0,-1.2e+02,0.02,0.02,0.00027,1.2,1.2,2.1,0.2,0.2,6,0.0055,0.0055,5.7e-05,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.58 -2290000,1,-0.011,-0.014,4.5e-05,0.039,-0.0093,-0.27,0,0,-1.2e+02,0.00017,-0.002,-4.2e-05,0,0,-0.00017,0,0,0,0,0,0,0,0,-1.2e+02,0.022,0.022,0.00029,1.5,1.5,2.1,0.3,0.3,6.7,0.0055,0.0055,5.7e-05,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.61 -2390000,1,-0.011,-0.013,6.2e-05,0.03,-0.0087,-0.29,0,0,-1.2e+02,9e-05,-0.0025,-5e-05,0,0,-0.00018,0,0,0,0,0,0,0,0,-1.2e+02,0.017,0.017,0.00024,1,1,2.1,0.19,0.19,7.4,0.0046,0.0046,4.5e-05,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.63 -2490000,1,-0.011,-0.013,4.4e-05,0.035,-0.011,-0.3,0,0,-1.2e+02,9e-05,-0.0025,-5e-05,0,0,-0.00018,0,0,0,0,0,0,0,0,-1.2e+02,0.018,0.018,0.00026,1.3,1.3,2.1,0.28,0.28,8.2,0.0046,0.0046,4.5e-05,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.66 -2590000,1,-0.011,-0.013,5.9e-05,0.026,-0.009,-0.31,0,0,-1.2e+02,-1.4e-05,-0.0029,-5.7e-05,0,0,-0.00018,0,0,0,0,0,0,0,0,-1.2e+02,0.014,0.014,0.00022,0.89,0.89,2.1,0.18,0.18,9.1,0.0038,0.0038,3.6e-05,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.68 -2690000,1,-0.011,-0.013,5.5e-05,0.03,-0.01,-0.33,0,0,-1.2e+02,-1.4e-05,-0.0029,-5.7e-05,0,0,-0.00018,0,0,0,0,0,0,0,0,-1.2e+02,0.015,0.015,0.00024,1.1,1.1,2.2,0.25,0.25,10,0.0038,0.0038,3.6e-05,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.71 -2790000,1,-0.011,-0.013,4.9e-05,0.023,-0.0093,-0.34,0,0,-1.2e+02,-0.00012,-0.0033,-6.1e-05,0,0,-0.00018,0,0,0,0,0,0,0,0,-1.2e+02,0.011,0.011,0.00021,0.77,0.77,2.2,0.16,0.16,11,0.0032,0.0032,2.9e-05,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.73 -2890000,1,-0.011,-0.013,-1.1e-06,0.027,-0.011,-0.35,0,0,-1.2e+02,-0.00012,-0.0033,-6.1e-05,0,0,-0.00018,0,0,0,0,0,0,0,0,-1.2e+02,0.013,0.013,0.00022,0.95,0.95,2.2,0.23,0.23,12,0.0032,0.0032,2.9e-05,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.76 -2990000,1,-0.011,-0.013,4.6e-05,0.022,-0.0095,-0.36,0,0,-1.2e+02,-0.00023,-0.0036,-6.5e-05,0,0,-0.00018,0,0,0,0,0,0,0,0,-1.2e+02,0.0099,0.0099,0.00019,0.67,0.67,2.2,0.15,0.15,13,0.0027,0.0027,2.4e-05,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.78 -3090000,1,-0.011,-0.013,4.9e-05,0.025,-0.011,-0.38,0,0,-1.2e+02,-0.00023,-0.0036,-6.5e-05,0,0,-0.00018,0,0,0,0,0,0,0,0,-1.2e+02,0.011,0.011,0.00021,0.83,0.83,2.2,0.22,0.22,14,0.0027,0.0027,2.4e-05,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.81 -3190000,1,-0.011,-0.013,-8e-06,0.02,-0.0086,-0.39,0,0,-1.2e+02,-0.00034,-0.0039,-6.7e-05,0,0,-0.00017,0,0,0,0,0,0,0,0,-1.2e+02,0.0087,0.0087,0.00018,0.59,0.59,2.3,0.14,0.14,15,0.0023,0.0023,2e-05,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.83 -3290000,1,-0.011,-0.013,3.2e-05,0.023,-0.01,-0.4,0,0,-1.2e+02,-0.00034,-0.0039,-6.7e-05,0,0,-0.00017,0,0,0,0,0,0,0,0,-1.2e+02,0.0096,0.0096,0.00019,0.73,0.73,2.3,0.2,0.2,16,0.0023,0.0023,2e-05,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.86 -3390000,1,-0.011,-0.012,3.2e-06,0.018,-0.0091,-0.42,0,0,-1.2e+02,-0.00044,-0.0041,-7e-05,0,0,-0.00017,0,0,0,0,0,0,0,0,-1.2e+02,0.0078,0.0078,0.00017,0.53,0.53,2.3,0.14,0.14,18,0.002,0.002,1.7e-05,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.88 -3490000,1,-0.011,-0.013,-4.5e-06,0.022,-0.012,-0.43,0,0,-1.2e+02,-0.00044,-0.0041,-7e-05,0,0,-0.00017,0,0,0,0,0,0,0,0,-1.2e+02,0.0086,0.0086,0.00018,0.66,0.66,2.3,0.19,0.19,19,0.002,0.002,1.7e-05,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.91 -3590000,1,-0.011,-0.012,1.9e-05,0.017,-0.011,-0.44,0,0,-1.2e+02,-0.00055,-0.0044,-7.1e-05,0,0,-0.00017,0,0,0,0,0,0,0,0,-1.2e+02,0.007,0.007,0.00016,0.49,0.49,2.4,0.13,0.13,20,0.0017,0.0017,1.4e-05,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.93 -3690000,1,-0.011,-0.012,0.00014,0.019,-0.014,-0.46,0,0,-1.2e+02,-0.00055,-0.0044,-7.1e-05,0,0,-0.00017,0,0,0,0,0,0,0,0,-1.2e+02,0.0077,0.0077,0.00017,0.6,0.6,2.4,0.18,0.18,22,0.0017,0.0017,1.4e-05,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.96 -3790000,1,-0.011,-0.012,0.00019,0.016,-0.013,-0.47,0,0,-1.2e+02,-0.00067,-0.0046,-7.2e-05,0,0,-0.00016,0,0,0,0,0,0,0,0,-1.2e+02,0.0064,0.0064,0.00015,0.45,0.45,2.4,0.12,0.12,23,0.0014,0.0014,1.2e-05,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.98 -3890000,1,-0.011,-0.012,0.00015,0.017,-0.014,-0.48,0,0,-1.2e+02,-0.00067,-0.0046,-7.2e-05,0,0,-0.00016,0,0,0,0,0,0,0,0,-1.2e+02,0.0069,0.0069,0.00016,0.55,0.55,2.4,0.17,0.17,24,0.0014,0.0014,1.2e-05,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1 -3990000,1,-0.011,-0.012,0.00016,0.02,-0.016,-0.5,0,0,-1.2e+02,-0.00067,-0.0046,-7.2e-05,0,0,-0.00016,0,0,0,0,0,0,0,0,-1.2e+02,0.0075,0.0075,0.00017,0.67,0.67,2.5,0.23,0.23,26,0.0014,0.0014,1.2e-05,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1 -4090000,1,-0.011,-0.012,0.00015,0.017,-0.014,-0.51,0,0,-1.2e+02,-0.00079,-0.0047,-7.3e-05,0,0,-0.00016,0,0,0,0,0,0,0,0,-1.2e+02,0.0062,0.0062,0.00015,0.51,0.51,2.5,0.16,0.16,28,0.0012,0.0012,1e-05,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.1 -4190000,1,-0.011,-0.012,0.00013,0.02,-0.016,-0.53,0,0,-1.2e+02,-0.00079,-0.0047,-7.3e-05,0,0,-0.00016,0,0,0,0,0,0,0,0,-1.2e+02,0.0067,0.0067,0.00016,0.61,0.61,2.5,0.21,0.21,29,0.0012,0.0012,1e-05,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.1 -4290000,1,-0.01,-0.012,8.1e-05,0.017,-0.012,-0.54,0,0,-1.2e+02,-0.00091,-0.0049,-7.3e-05,0,0,-0.00016,0,0,0,0,0,0,0,0,-1.2e+02,0.0056,0.0056,0.00014,0.47,0.47,2.6,0.15,0.15,31,0.00097,0.00097,9e-06,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.1 -4390000,1,-0.01,-0.012,0.0001,0.018,-0.013,-0.55,0,0,-1.2e+02,-0.00091,-0.0049,-7.3e-05,0,0,-0.00016,0,0,0,0,0,0,0,0,-1.2e+02,0.006,0.006,0.00015,0.56,0.56,2.6,0.2,0.2,33,0.00097,0.00097,9e-06,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.1 -4490000,1,-0.01,-0.012,0.00016,0.014,-0.0097,-0.57,0,0,-1.2e+02,-0.001,-0.005,-7.3e-05,0,0,-0.00015,0,0,0,0,0,0,0,0,-1.2e+02,0.0049,0.0049,0.00014,0.43,0.43,2.6,0.14,0.14,34,0.0008,0.0008,7.8e-06,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.2 -4590000,1,-0.01,-0.012,0.00019,0.017,-0.011,-0.58,0,0,-1.2e+02,-0.001,-0.005,-7.3e-05,0,0,-0.00015,0,0,0,0,0,0,0,0,-1.2e+02,0.0053,0.0053,0.00014,0.52,0.52,2.7,0.19,0.19,36,0.0008,0.0008,7.8e-06,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.2 -4690000,1,-0.01,-0.012,0.00019,0.014,-0.0096,-0.6,0,0,-1.2e+02,-0.0011,-0.0052,-7.4e-05,0,0,-0.00015,0,0,0,0,0,0,0,0,-1.2e+02,0.0044,0.0044,0.00013,0.4,0.4,2.7,0.14,0.14,38,0.00065,0.00065,6.9e-06,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.2 -4790000,1,-0.01,-0.012,0.00018,0.015,-0.011,-0.61,0,0,-1.2e+02,-0.0011,-0.0052,-7.4e-05,0,0,-0.00015,0,0,0,0,0,0,0,0,-1.2e+02,0.0047,0.0047,0.00014,0.48,0.48,2.7,0.18,0.18,40,0.00065,0.00065,6.9e-06,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.2 -4890000,1,-0.01,-0.011,0.00017,0.012,-0.0097,-0.63,0,0,-1.2e+02,-0.0012,-0.0053,-7.4e-05,0,0,-0.00014,0,0,0,0,0,0,0,0,-1.2e+02,0.0039,0.0039,0.00012,0.37,0.37,2.8,0.13,0.13,42,0.00053,0.00053,6e-06,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.3 -4990000,1,-0.01,-0.012,0.00015,0.015,-0.01,-0.64,0,0,-1.2e+02,-0.0012,-0.0053,-7.4e-05,0,0,-0.00014,0,0,0,0,0,0,0,0,-1.2e+02,0.0041,0.0041,0.00013,0.44,0.44,2.8,0.17,0.17,44,0.00053,0.00053,6e-06,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.3 -5090000,1,-0.01,-0.011,0.0002,0.011,-0.0081,-0.66,0,0,-1.2e+02,-0.0013,-0.0054,-7.4e-05,0,0,-0.00014,0,0,0,0,0,0,0,0,-1.2e+02,0.0034,0.0034,0.00012,0.34,0.34,2.8,0.12,0.12,47,0.00043,0.00043,5.3e-06,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.3 -5190000,1,-0.01,-0.011,0.00022,0.013,-0.0095,-0.67,0,0,-1.2e+02,-0.0013,-0.0054,-7.4e-05,0,0,-0.00014,0,0,0,0,0,0,0,0,-1.2e+02,0.0036,0.0036,0.00012,0.4,0.4,2.9,0.16,0.16,49,0.00043,0.00043,5.3e-06,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.3 -5290000,1,-0.0099,-0.011,0.00021,0.0086,-0.007,-0.68,0,0,-1.2e+02,-0.0013,-0.0055,-7.4e-05,0,0,-0.00014,0,0,0,0,0,0,0,0,-1.2e+02,0.003,0.003,0.00011,0.31,0.31,2.9,0.12,0.12,51,0.00034,0.00034,4.7e-06,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.4 -5390000,1,-0.0099,-0.011,0.00027,0.0081,-0.0078,-0.7,0,0,-1.2e+02,-0.0013,-0.0055,-7.4e-05,0,0,-0.00014,0,0,0,0,0,0,0,0,-1.2e+02,0.0032,0.0032,0.00012,0.36,0.36,3,0.16,0.16,54,0.00034,0.00034,4.7e-06,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.4 -5490000,1,-0.0098,-0.011,0.00028,0.0055,-0.0059,-0.71,0,0,-1.2e+02,-0.0014,-0.0055,-7.4e-05,0,0,-0.00013,0,0,0,0,0,0,0,0,-1.2e+02,0.0026,0.0026,0.00011,0.28,0.28,3,0.11,0.11,56,0.00028,0.00028,4.2e-06,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.4 -5590000,1,-0.0097,-0.011,0.00026,0.0061,-0.0063,-0.73,0,0,-1.2e+02,-0.0014,-0.0055,-7.4e-05,0,0,-0.00013,0,0,0,0,0,0,0,0,-1.2e+02,0.0028,0.0028,0.00011,0.33,0.33,3,0.15,0.15,59,0.00028,0.00028,4.2e-06,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.4 -5690000,1,-0.0096,-0.011,0.00033,0.0041,-0.0036,-0.74,0,0,-1.2e+02,-0.0014,-0.0056,-7.4e-05,0,0,-0.00013,0,0,0,0,0,0,0,0,-1.2e+02,0.0023,0.0023,0.00011,0.26,0.26,3.1,0.11,0.11,61,0.00022,0.00022,3.8e-06,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.5 -5790000,1,-0.0095,-0.011,0.00033,0.0044,-0.0025,-0.75,0,0,-1.2e+02,-0.0014,-0.0056,-7.4e-05,0,0,-0.00013,0,0,0,0,0,0,0,0,-1.2e+02,0.0025,0.0025,0.00011,0.3,0.3,3.1,0.14,0.14,64,0.00022,0.00022,3.8e-06,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.5 -5890000,1,-0.0094,-0.011,0.00031,0.0038,-0.0007,0.0028,0,0,-4.9e+02,-0.0014,-0.0056,-7.4e-05,0,0,-0.00013,0,0,0,0,0,0,0,0,-4.9e+02,0.0021,0.0021,0.0001,0.23,0.23,9.8,0.1,0.1,0.52,0.00018,0.00018,3.4e-06,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.5 -5990000,1,-0.0094,-0.011,0.00033,0.0041,0.00081,0.015,0,0,-4.9e+02,-0.0014,-0.0056,-7.4e-05,0,0,-0.00014,0,0,0,0,0,0,0,0,-4.9e+02,0.0022,0.0022,0.00011,0.27,0.27,8.8,0.13,0.13,0.33,0.00018,0.00018,3.4e-06,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.5 -6090000,1,-0.0094,-0.011,0.00032,0.0051,0.002,-0.011,0,0,-4.9e+02,-0.0014,-0.0056,-7.4e-05,0,0,-0.00013,0,0,0,0,0,0,0,0,-4.9e+02,0.0023,0.0023,0.00011,0.31,0.31,7,0.17,0.17,0.33,0.00018,0.00018,3.4e-06,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.6 -6190000,1,-0.0094,-0.011,0.00024,0.0038,0.0044,-0.005,0,0,-4.9e+02,-0.0015,-0.0056,-7.5e-05,0,0,-0.00015,0,0,0,0,0,0,0,0,-4.9e+02,0.0019,0.0019,0.0001,0.25,0.25,4.9,0.13,0.13,0.32,0.00015,0.00015,3.1e-06,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.6 -6290000,1,-0.0094,-0.011,0.00022,0.005,0.0045,-0.012,0,0,-4.9e+02,-0.0015,-0.0056,-7.5e-05,0,0,-0.00016,0,0,0,0,0,0,0,0,-4.9e+02,0.002,0.002,0.00011,0.28,0.28,3.2,0.16,0.16,0.3,0.00015,0.00015,3.1e-06,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.6 -6390000,1,-0.0093,-0.011,0.00023,0.0043,0.0055,-0.05,0,0,-4.9e+02,-0.0015,-0.0057,-7.5e-05,0,0,-0.0001,0,0,0,0,0,0,0,0,-4.9e+02,0.0017,0.0017,9.9e-05,0.22,0.22,2.3,0.12,0.12,0.29,0.00012,0.00012,2.8e-06,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.6 -6490000,1,-0.0093,-0.011,0.00023,0.0049,0.0057,-0.052,0,0,-4.9e+02,-0.0015,-0.0057,-7.5e-05,0,0,-0.00015,0,0,0,0,0,0,0,0,-4.9e+02,0.0018,0.0018,0.0001,0.26,0.26,1.5,0.15,0.15,0.26,0.00012,0.00012,2.8e-06,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.7 -6590000,1,-0.0093,-0.011,0.00016,0.0037,0.0057,-0.099,0,0,-4.9e+02,-0.0014,-0.0057,-7.6e-05,0,0,2.9e-05,0,0,0,0,0,0,0,0,-4.9e+02,0.0015,0.0015,9.6e-05,0.2,0.2,1.1,0.12,0.12,0.23,9.7e-05,9.7e-05,2.6e-06,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.7 -6690000,1,-0.0093,-0.011,9.4e-05,0.0046,0.0053,-0.076,0,0,-4.9e+02,-0.0014,-0.0057,-7.6e-05,0,0,-0.00029,0,0,0,0,0,0,0,0,-4.9e+02,0.0016,0.0016,9.9e-05,0.23,0.23,0.78,0.14,0.14,0.21,9.7e-05,9.7e-05,2.6e-06,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.7 -6790000,0.71,0.0012,-0.014,0.71,-0.0056,0.0034,-0.11,0,0,-4.9e+02,-0.0014,-0.0057,-7.5e-05,0,0,-6.5e-05,0.21,0.00022,0.43,0.0002,0.00068,-0.0026,0,0,-4.9e+02,0.0013,0.0013,0.055,0.18,0.18,0.6,0.1,0.1,0.2,7.8e-05,7.7e-05,2.4e-06,0.04,0.04,0.04,0.0015,0.0014,0.0015,0.0019,0.0015,0.0015,1,1,1.7 -6890000,0.71,0.0013,-0.014,0.7,-0.0077,0.0039,-0.12,0,0,-4.9e+02,-0.0015,-0.0057,-7.6e-05,0,0,-9.4e-05,0.21,3.8e-05,0.43,6.6e-05,0.001,-0.00079,0,0,-4.9e+02,0.0013,0.0013,0.047,0.18,0.18,0.46,0.1,0.1,0.18,7.8e-05,7.6e-05,2.4e-06,0.04,0.04,0.04,0.0014,0.00069,0.0013,0.0017,0.0014,0.0013,1,1,1.8 -6990000,0.71,0.0013,-0.014,0.71,-0.0079,0.0041,-0.12,0,0,-4.9e+02,-0.0014,-0.0057,-7.8e-05,-8.6e-06,-0.00026,-0.00041,0.21,-2.9e-05,0.43,-0.00021,0.00062,-0.00035,0,0,-4.9e+02,0.0013,0.0013,0.045,0.19,0.19,0.36,0.11,0.11,0.16,7.8e-05,7.6e-05,2.4e-06,0.04,0.04,0.04,0.0013,0.00046,0.0013,0.0017,0.0013,0.0013,1,1,1.8 -7090000,0.71,0.0012,-0.014,0.71,-0.0084,0.0027,-0.13,0,0,-4.9e+02,-0.0014,-0.0057,-7.9e-05,0.00025,-0.00058,-0.00078,0.21,-3.1e-05,0.43,-0.00035,0.00028,-0.00036,0,0,-4.9e+02,0.0013,0.0013,0.043,0.2,0.2,0.29,0.12,0.12,0.16,7.8e-05,7.6e-05,2.4e-06,0.04,0.04,0.04,0.0013,0.00035,0.0013,0.0017,0.0013,0.0013,1,1,1.8 -7190000,0.71,0.0013,-0.014,0.71,-0.01,0.0026,-0.15,0,0,-4.9e+02,-0.0014,-0.0057,-7.9e-05,0.0002,-0.00051,-0.00057,0.21,-2.5e-05,0.43,-0.00033,0.00038,-0.00041,0,0,-4.9e+02,0.0013,0.0013,0.042,0.21,0.21,0.24,0.14,0.14,0.15,7.7e-05,7.6e-05,2.4e-06,0.04,0.04,0.04,0.0013,0.00028,0.0013,0.0016,0.0013,0.0013,1,1,1.8 -7290000,0.71,0.0015,-0.014,0.71,-0.012,0.005,-0.15,0,0,-4.9e+02,-0.0015,-0.0057,-7.5e-05,-0.00016,-0.00022,-0.0012,0.21,-2.7e-05,0.43,-0.00031,0.0008,-0.00035,0,0,-4.9e+02,0.0013,0.0013,0.042,0.22,0.23,0.2,0.16,0.16,0.14,7.7e-05,7.6e-05,2.4e-06,0.04,0.04,0.04,0.0013,0.00023,0.0013,0.0016,0.0013,0.0013,1,1,1.9 -7390000,0.71,0.0016,-0.014,0.71,-0.012,0.0077,-0.16,0,0,-4.9e+02,-0.0016,-0.0057,-7.3e-05,-0.00023,-5.2e-05,-0.0014,0.21,-2.4e-05,0.43,-0.0003,0.00089,-0.00029,0,0,-4.9e+02,0.0013,0.0013,0.041,0.24,0.25,0.18,0.18,0.18,0.13,7.7e-05,7.6e-05,2.4e-06,0.04,0.04,0.039,0.0013,0.0002,0.0013,0.0016,0.0013,0.0013,1,1,1.9 -7490000,0.71,0.0015,-0.014,0.71,-0.013,0.0067,-0.16,0,0,-4.9e+02,-0.0015,-0.0057,-7.4e-05,-0.00012,-8.9e-05,-0.0022,0.21,-1.7e-05,0.43,-0.00028,0.00081,-0.0004,0,0,-4.9e+02,0.0013,0.0013,0.041,0.27,0.27,0.15,0.21,0.21,0.12,7.6e-05,7.6e-05,2.4e-06,0.04,0.04,0.039,0.0013,0.00018,0.0013,0.0016,0.0013,0.0013,1,1,1.9 -7590000,0.71,0.0016,-0.014,0.71,-0.014,0.011,-0.17,0,0,-4.9e+02,-0.0016,-0.0057,-7.1e-05,-0.00018,0.00019,-0.003,0.21,-1.7e-05,0.43,-0.00031,0.00089,-0.00024,0,0,-4.9e+02,0.0013,0.0013,0.041,0.29,0.29,0.14,0.25,0.25,0.12,7.6e-05,7.5e-05,2.4e-06,0.04,0.04,0.039,0.0013,0.00016,0.0013,0.0016,0.0013,0.0013,1,1,1.9 -7690000,0.71,0.0016,-0.014,0.71,-0.015,0.011,-0.16,0,0,-4.9e+02,-0.0015,-0.0057,-7.2e-05,-0.00018,0.00016,-0.0051,0.21,-1.4e-05,0.43,-0.00028,0.00086,-0.00031,0,0,-4.9e+02,0.0014,0.0013,0.04,0.32,0.32,0.13,0.29,0.29,0.11,7.5e-05,7.5e-05,2.4e-06,0.04,0.04,0.039,0.0013,0.00014,0.0013,0.0016,0.0013,0.0013,1,1,2 -7790000,0.71,0.0017,-0.014,0.71,-0.019,0.011,-0.16,0,0,-4.9e+02,-0.0015,-0.0057,-7.5e-05,-0.0003,3.6e-05,-0.0071,0.21,-1.3e-05,0.43,-0.00029,0.00081,-0.00036,0,0,-4.9e+02,0.0014,0.0013,0.04,0.36,0.36,0.12,0.34,0.34,0.11,7.4e-05,7.5e-05,2.4e-06,0.04,0.04,0.038,0.0013,0.00013,0.0013,0.0016,0.0013,0.0013,1,1,2 -7890000,0.71,0.0017,-0.014,0.71,-0.02,0.014,-0.16,0,0,-4.9e+02,-0.0015,-0.0057,-7.3e-05,-0.00031,0.00017,-0.0096,0.21,-1.2e-05,0.43,-0.0003,0.00081,-0.00028,0,0,-4.9e+02,0.0014,0.0014,0.04,0.39,0.39,0.11,0.4,0.4,0.1,7.3e-05,7.4e-05,2.4e-06,0.04,0.04,0.038,0.0013,0.00012,0.0013,0.0016,0.0013,0.0013,1,1,2 -7990000,0.71,0.0017,-0.014,0.71,-0.02,0.015,-0.16,0,0,-4.9e+02,-0.0015,-0.0056,-7.2e-05,-0.0003,0.00025,-0.011,0.21,-1e-05,0.43,-0.0003,0.00088,-0.00036,0,0,-4.9e+02,0.0014,0.0014,0.04,0.43,0.43,0.1,0.47,0.47,0.099,7.1e-05,7.4e-05,2.4e-06,0.04,0.04,0.038,0.0013,0.00011,0.0013,0.0016,0.0013,0.0013,1,1,2 -8090000,0.71,0.0016,-0.014,0.71,-0.018,0.017,-0.17,0,0,-4.9e+02,-0.0015,-0.0056,-7e-05,-0.00023,0.00032,-0.011,0.21,-9.1e-06,0.43,-0.00028,0.00092,-0.00033,0,0,-4.9e+02,0.0014,0.0014,0.04,0.47,0.47,0.1,0.55,0.55,0.097,7e-05,7.3e-05,2.4e-06,0.04,0.04,0.037,0.0013,0.0001,0.0013,0.0016,0.0013,0.0013,1,1,2.1 -8190000,0.71,0.0017,-0.014,0.71,-0.024,0.02,-0.18,0,0,-4.9e+02,-0.0016,-0.0057,-7.1e-05,-0.00037,0.00033,-0.013,0.21,-9.4e-06,0.43,-0.00031,0.00087,-0.00034,0,0,-4.9e+02,0.0014,0.0014,0.04,0.52,0.51,0.099,0.64,0.64,0.094,6.8e-05,7.2e-05,2.4e-06,0.04,0.04,0.037,0.0013,9.4e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.1 -8290000,0.71,0.0017,-0.014,0.71,-0.0003,0.00012,-0.17,0,0,-4.9e+02,-0.0015,-0.0057,-7.5e-05,-0.00049,0.00033,-0.017,0.21,-7.5e-06,0.43,-0.00026,0.00081,-0.00033,0,0,-4.9e+02,0.0014,0.0014,0.039,25,25,0.097,1e+02,1e+02,0.091,6.6e-05,7.1e-05,2.4e-06,0.04,0.04,0.036,0.0013,8.8e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.1 -8390000,0.71,0.0016,-0.014,0.71,-0.0017,0.0016,-0.17,0,0,-4.9e+02,-0.0015,-0.0056,-7.2e-05,-0.00049,0.00033,-0.021,0.21,-6.8e-06,0.43,-0.00025,0.00085,-0.00029,0,0,-4.9e+02,0.0014,0.0014,0.039,25,25,0.097,1e+02,1e+02,0.091,6.5e-05,7e-05,2.4e-06,0.04,0.04,0.035,0.0013,8.3e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.1 -8490000,0.71,0.0017,-0.014,0.71,-0.0034,0.0035,-0.17,0,0,-4.9e+02,-0.0015,-0.0056,-7.3e-05,-0.00049,0.00033,-0.025,0.21,-6.7e-06,0.43,-0.00026,0.00082,-0.00026,0,0,-4.9e+02,0.0014,0.0014,0.039,25,25,0.096,50,50,0.089,6.3e-05,6.9e-05,2.4e-06,0.04,0.04,0.034,0.0013,7.8e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.2 -8590000,0.71,0.0021,-0.014,0.71,-0.0071,0.0078,-0.17,0,0,-4.9e+02,-0.0017,-0.0057,-7.1e-05,-0.00049,0.00033,-0.029,0.21,-9.7e-06,0.43,-0.00038,0.00078,-0.00026,0,0,-4.9e+02,0.0013,0.0014,0.039,25,25,0.095,51,51,0.088,6e-05,6.8e-05,2.4e-06,0.04,0.04,0.033,0.0013,7.4e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.2 -8690000,0.71,0.002,-0.014,0.71,0,0,-0.16,0,0,-4.9e+02,-0.0016,-0.0056,-6.8e-05,-0.00049,0.00033,-0.035,0.21,-8.1e-06,0.43,-0.00035,0.00086,-0.00028,0,0,-4.9e+02,0.0013,0.0014,0.039,25,25,0.096,1e+02,1e+02,0.088,5.8e-05,6.7e-05,2.4e-06,0.04,0.04,0.033,0.0013,7.1e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.2 -8790000,0.71,0.0019,-0.014,0.71,-0.0021,0.0025,-0.15,0,0,-4.9e+02,-0.0016,-0.0057,-7.1e-05,-0.00049,0.00033,-0.041,0.21,-7.2e-06,0.43,-0.00033,0.00081,-0.00027,0,0,-4.9e+02,0.0013,0.0014,0.039,25,25,0.095,1e+02,1e+02,0.087,5.6e-05,6.6e-05,2.4e-06,0.04,0.04,0.032,0.0013,6.7e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.2 -8890000,0.71,0.0019,-0.014,0.71,-0.0041,0.0034,-0.15,0,0,-4.9e+02,-0.0015,-0.0057,-7.4e-05,-0.00049,0.00033,-0.045,0.21,-6e-06,0.43,-0.0003,0.0008,-0.00032,0,0,-4.9e+02,0.0013,0.0014,0.039,25,25,0.095,1e+02,1e+02,0.086,5.4e-05,6.4e-05,2.4e-06,0.04,0.04,0.03,0.0013,6.4e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.3 -8990000,0.71,0.0018,-0.014,0.71,-0.0063,0.0034,-0.14,0,0,-4.9e+02,-0.0015,-0.0058,-7.8e-05,-0.00074,0.00034,-0.051,0.21,-4.9e-06,0.43,-0.00026,0.00073,-0.00033,0,0,-4.9e+02,0.0013,0.0014,0.039,25,25,0.096,1e+02,1e+02,0.087,5.2e-05,6.3e-05,2.4e-06,0.04,0.04,0.029,0.0013,6.2e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.3 -9090000,0.71,0.002,-0.014,0.71,-0.01,0.0045,-0.14,0,0,-4.9e+02,-0.0015,-0.0058,-7.8e-05,-0.00085,0.00044,-0.053,0.21,-5.3e-06,0.43,-0.00029,0.00069,-0.00033,0,0,-4.9e+02,0.0013,0.0014,0.039,25,25,0.095,1e+02,1e+02,0.086,4.9e-05,6.2e-05,2.4e-06,0.04,0.04,0.028,0.0013,5.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.3 -9190000,0.71,0.0018,-0.014,0.71,-0.0084,0.007,-0.14,0,0,-4.9e+02,-0.0015,-0.0056,-7.3e-05,-0.00074,0.0005,-0.057,0.21,-4.7e-06,0.43,-0.00027,0.00082,-0.00024,0,0,-4.9e+02,0.0013,0.0014,0.039,25,25,0.094,1.1e+02,1.1e+02,0.085,4.7e-05,6e-05,2.4e-06,0.04,0.04,0.027,0.0013,5.7e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.3 -9290000,0.71,0.0017,-0.014,0.71,-0.008,0.0073,-0.14,0,0,-4.9e+02,-0.0014,-0.0056,-7.4e-05,-0.00083,0.0005,-0.061,0.21,-3.7e-06,0.43,-0.00023,0.00083,-0.00023,0,0,-4.9e+02,0.0013,0.0014,0.039,25,25,0.093,1.1e+02,1.1e+02,0.085,4.4e-05,5.9e-05,2.4e-06,0.04,0.04,0.025,0.0013,5.4e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.4 -9390000,0.71,0.0015,-0.014,0.71,-0.008,0.0082,-0.14,0,0,-4.9e+02,-0.0013,-0.0056,-7.5e-05,-0.00093,0.00049,-0.065,0.21,-2.9e-06,0.43,-0.00019,0.00083,-0.00021,0,0,-4.9e+02,0.0013,0.0014,0.039,25,25,0.093,1.1e+02,1.1e+02,0.086,4.2e-05,5.7e-05,2.4e-06,0.04,0.04,0.024,0.0013,5.2e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.4 -9490000,0.71,0.0014,-0.014,0.71,-0.0052,0.01,-0.13,0,0,-4.9e+02,-0.0013,-0.0055,-7.2e-05,-0.00088,0.00052,-0.068,0.21,-2.4e-06,0.43,-0.00015,0.00091,-0.00012,0,0,-4.9e+02,0.0013,0.0013,0.039,25,25,0.091,1.2e+02,1.2e+02,0.085,4e-05,5.5e-05,2.4e-06,0.04,0.04,0.023,0.0013,5e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.4 -9590000,0.71,0.0016,-0.014,0.71,-0.0075,0.015,-0.13,0,0,-4.9e+02,-0.0014,-0.0055,-6.9e-05,-0.00094,0.00072,-0.072,0.21,-3.3e-06,0.43,-0.00021,0.00092,-0.00011,0,0,-4.9e+02,0.0013,0.0013,0.039,25,25,0.09,1.2e+02,1.2e+02,0.085,3.8e-05,5.4e-05,2.4e-06,0.04,0.04,0.021,0.0013,4.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.4 -9690000,0.71,0.0018,-0.014,0.71,-0.014,0.016,-0.12,0,0,-4.9e+02,-0.0014,-0.0056,-7.3e-05,-0.0012,0.00085,-0.077,0.21,-3.6e-06,0.43,-0.00024,0.0008,-0.00016,0,0,-4.9e+02,0.0013,0.0013,0.039,25,25,0.089,1.3e+02,1.3e+02,0.086,3.6e-05,5.2e-05,2.4e-06,0.04,0.04,0.02,0.0013,4.7e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.5 -9790000,0.71,0.0018,-0.014,0.71,-0.0099,0.02,-0.11,0,0,-4.9e+02,-0.0014,-0.0055,-7.1e-05,-0.0013,0.00093,-0.082,0.21,-3.4e-06,0.43,-0.00021,0.00085,-9e-05,0,0,-4.9e+02,0.0013,0.0013,0.039,25,25,0.087,1.3e+02,1.3e+02,0.085,3.4e-05,5.1e-05,2.4e-06,0.04,0.04,0.019,0.0013,4.6e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.5 -9890000,0.71,0.0019,-0.014,0.71,-0.013,0.022,-0.11,0,0,-4.9e+02,-0.0014,-0.0056,-7.1e-05,-0.0013,0.001,-0.085,0.21,-3.5e-06,0.43,-0.00023,0.00083,-9.7e-05,0,0,-4.9e+02,0.0013,0.0013,0.039,25,25,0.084,1.4e+02,1.4e+02,0.085,3.2e-05,4.9e-05,2.4e-06,0.04,0.04,0.018,0.0013,4.4e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.5 -9990000,0.71,0.0019,-0.014,0.71,-0.017,0.021,-0.1,0,0,-4.9e+02,-0.0014,-0.0056,-7.3e-05,-0.0015,0.0011,-0.089,0.21,-3.3e-06,0.43,-0.00022,0.00078,-0.00013,0,0,-4.9e+02,0.0013,0.0013,0.039,25,25,0.083,1.4e+02,1.4e+02,0.086,3.1e-05,4.7e-05,2.4e-06,0.04,0.04,0.017,0.0013,4.3e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.5 -10090000,0.71,0.0021,-0.014,0.71,-0.018,0.025,-0.096,0,0,-4.9e+02,-0.0015,-0.0056,-7.1e-05,-0.0015,0.0012,-0.091,0.21,-3.7e-06,0.43,-0.00026,0.00079,-0.00012,0,0,-4.9e+02,0.0013,0.0013,0.039,25,25,0.08,1.5e+02,1.5e+02,0.085,2.9e-05,4.6e-05,2.4e-06,0.04,0.04,0.016,0.0013,4.2e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.6 -10190000,0.71,0.0021,-0.014,0.71,-0.029,0.022,-0.096,0,0,-4.9e+02,-0.0015,-0.0058,-7.7e-05,-0.0018,0.0012,-0.093,0.21,-3.6e-06,0.43,-0.00025,0.00065,-0.00015,0,0,-4.9e+02,0.0012,0.0012,0.039,25,25,0.078,1.6e+02,1.6e+02,0.084,2.7e-05,4.4e-05,2.4e-06,0.04,0.04,0.014,0.0013,4e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.6 -10290000,0.71,0.002,-0.013,0.71,-0.036,0.018,-0.084,0,0,-4.9e+02,-0.0015,-0.0059,-8.1e-05,-0.002,0.0014,-0.098,0.21,-3.3e-06,0.43,-0.00024,0.00057,-0.00017,0,0,-4.9e+02,0.0012,0.0012,0.039,25,25,0.076,1.6e+02,1.6e+02,0.085,2.6e-05,4.3e-05,2.3e-06,0.04,0.04,0.014,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.6 -10390000,0.71,0.0019,-0.013,0.71,0.0087,-0.019,-0.067,0,0,-4.9e+02,-0.0014,-0.0059,-8.2e-05,-0.002,0.0014,-0.11,0.21,-2.8e-06,0.43,-0.00021,0.00059,-0.00013,0,0,-4.9e+02,0.0012,0.0012,0.039,0.25,0.25,0.065,0.5,0.5,0.077,2.4e-05,4.1e-05,2.3e-06,0.04,0.04,0.011,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.6 -10490000,0.71,0.0018,-0.013,0.71,0.0068,-0.019,-0.056,0,0,-4.9e+02,-0.0014,-0.0059,-8.5e-05,-0.0022,0.0015,-0.11,0.21,-2.4e-06,0.43,-0.00018,0.00053,-0.00015,0,0,-4.9e+02,0.0012,0.0012,0.039,0.25,0.25,0.064,0.51,0.51,0.077,2.3e-05,3.9e-05,2.3e-06,0.04,0.04,0.011,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.7 -10590000,0.71,0.0022,-0.013,0.71,0.0059,-0.0077,-0.044,0,0,-4.9e+02,-0.0015,-0.0059,-8.2e-05,-0.0024,0.0021,-0.11,0.21,-3.7e-06,0.43,-0.00027,0.00052,-0.00016,0,0,-4.9e+02,0.0012,0.0011,0.039,0.13,0.13,0.056,0.17,0.17,0.072,2.2e-05,3.7e-05,2.3e-06,0.039,0.039,0.0092,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.7 -10690000,0.71,0.0021,-0.013,0.71,0.0032,-0.0085,-0.04,0,0,-4.9e+02,-0.0015,-0.0059,-8.3e-05,-0.0025,0.0021,-0.11,0.21,-3.3e-06,0.43,-0.00025,0.00052,-0.00017,0,0,-4.9e+02,0.0012,0.0011,0.038,0.14,0.14,0.056,0.18,0.18,0.073,2.1e-05,3.6e-05,2.3e-06,0.039,0.039,0.0087,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.7 -10790000,0.71,0.002,-0.013,0.71,0.0034,-0.0059,-0.036,0,0,-4.9e+02,-0.0014,-0.0059,-8.3e-05,-0.0026,0.0025,-0.12,0.21,-3.2e-06,0.43,-0.00024,0.00055,-0.00016,0,0,-4.9e+02,0.0011,0.0011,0.038,0.093,0.094,0.05,0.11,0.11,0.068,1.9e-05,3.4e-05,2.3e-06,0.039,0.039,0.0076,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.7 -10890000,0.71,0.0019,-0.013,0.71,0.0022,-0.0059,-0.037,0,0,-4.9e+02,-0.0014,-0.0059,-8.3e-05,-0.0027,0.0024,-0.12,0.21,-2.9e-06,0.43,-0.00023,0.00057,-0.00015,0,0,-4.9e+02,0.0011,0.0011,0.038,0.1,0.1,0.049,0.11,0.11,0.068,1.8e-05,3.3e-05,2.3e-06,0.039,0.039,0.0072,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.8 -10990000,0.71,0.0017,-0.014,0.71,0.0069,-0.00092,-0.034,0,0,-4.9e+02,-0.0013,-0.0057,-8.2e-05,-0.0027,0.0034,-0.12,0.21,-2.4e-06,0.43,-0.0002,0.00071,-0.00011,0,0,-4.9e+02,0.0011,0.001,0.038,0.079,0.08,0.045,0.079,0.079,0.066,1.7e-05,3.1e-05,2.3e-06,0.037,0.037,0.0064,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.8 -11090000,0.71,0.0018,-0.014,0.71,0.0068,0.0026,-0.029,0,0,-4.9e+02,-0.0013,-0.0056,-7.8e-05,-0.0026,0.0032,-0.12,0.21,-2.6e-06,0.43,-0.00021,0.00077,-6.6e-05,0,0,-4.9e+02,0.0011,0.00099,0.038,0.09,0.091,0.044,0.085,0.085,0.066,1.6e-05,2.9e-05,2.3e-06,0.037,0.037,0.0061,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.8 -11190000,0.71,0.0017,-0.014,0.71,0.01,0.004,-0.031,0,0,-4.9e+02,-0.0013,-0.0057,-8e-05,-0.0025,0.0043,-0.12,0.21,-2.6e-06,0.43,-0.00022,0.00078,-8.4e-05,0,0,-4.9e+02,0.00097,0.00091,0.038,0.074,0.075,0.041,0.066,0.066,0.063,1.5e-05,2.7e-05,2.3e-06,0.036,0.036,0.0055,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.8 -11290000,0.71,0.0016,-0.014,0.71,0.0095,0.0026,-0.03,0,0,-4.9e+02,-0.0012,-0.0057,-8.5e-05,-0.0029,0.0046,-0.12,0.21,-2.2e-06,0.43,-0.0002,0.00072,-0.00011,0,0,-4.9e+02,0.00097,0.0009,0.038,0.085,0.087,0.041,0.072,0.072,0.064,1.4e-05,2.6e-05,2.3e-06,0.036,0.036,0.0052,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.9 -11390000,0.71,0.0016,-0.013,0.71,0.005,0.0016,-0.029,0,0,-4.9e+02,-0.0012,-0.0058,-8.8e-05,-0.0035,0.0044,-0.12,0.21,-2.2e-06,0.43,-0.00019,0.00065,-0.00016,0,0,-4.9e+02,0.00086,0.00081,0.038,0.071,0.073,0.037,0.058,0.058,0.061,1.3e-05,2.4e-05,2.3e-06,0.033,0.034,0.0047,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.9 -11490000,0.71,0.0015,-0.013,0.71,0.0012,-0.0011,-0.027,0,0,-4.9e+02,-0.0012,-0.006,-9.5e-05,-0.0041,0.0053,-0.12,0.21,-1.9e-06,0.43,-0.00016,0.00055,-0.00022,0,0,-4.9e+02,0.00085,0.0008,0.038,0.083,0.085,0.037,0.064,0.064,0.061,1.3e-05,2.3e-05,2.3e-06,0.033,0.034,0.0045,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.9 -11590000,0.71,0.0013,-0.013,0.71,-0.0019,-0.00077,-0.027,0,0,-4.9e+02,-0.0012,-0.006,-9.7e-05,-0.0047,0.0054,-0.12,0.21,-1.7e-06,0.43,-0.00014,0.00053,-0.00023,0,0,-4.9e+02,0.00075,0.00072,0.038,0.07,0.072,0.035,0.054,0.054,0.06,1.2e-05,2.1e-05,2.3e-06,0.031,0.032,0.0041,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.9 -11690000,0.71,0.0011,-0.013,0.71,-0.0034,-0.0018,-0.029,0,0,-4.9e+02,-0.0011,-0.006,-0.0001,-0.0055,0.0055,-0.12,0.21,-1.2e-06,0.43,-8.2e-05,0.00052,-0.00026,0,0,-4.9e+02,0.00075,0.00071,0.038,0.081,0.084,0.034,0.06,0.06,0.06,1.1e-05,2e-05,2.3e-06,0.031,0.032,0.0039,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3 -11790000,0.71,0.0011,-0.013,0.71,-0.0074,-0.0001,-0.027,0,0,-4.9e+02,-0.0011,-0.006,-0.0001,-0.0072,0.0056,-0.12,0.21,-1.2e-06,0.43,-6.6e-05,0.00049,-0.00027,0,0,-4.9e+02,0.00064,0.00063,0.038,0.068,0.07,0.032,0.051,0.051,0.058,1e-05,1.8e-05,2.3e-06,0.028,0.029,0.0035,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3 -11890000,0.71,0.00098,-0.013,0.71,-0.0084,-0.0029,-0.025,0,0,-4.9e+02,-0.001,-0.006,-0.0001,-0.0079,0.0062,-0.12,0.21,-1.1e-06,0.43,-3.5e-05,0.00046,-0.00032,0,0,-4.9e+02,0.00064,0.00062,0.038,0.079,0.082,0.031,0.058,0.058,0.058,9.9e-06,1.8e-05,2.3e-06,0.028,0.029,0.0034,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3 -11990000,0.71,0.0013,-0.013,0.71,-0.012,0.0019,-0.027,0,0,-4.9e+02,-0.0011,-0.006,-0.0001,-0.0074,0.0067,-0.12,0.21,-2e-06,0.43,-0.00011,0.00047,-0.00032,0,0,-4.9e+02,0.00056,0.00055,0.037,0.066,0.068,0.03,0.049,0.049,0.057,9.2e-06,1.6e-05,2.3e-06,0.026,0.027,0.0031,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3 -12090000,0.71,0.0014,-0.013,0.71,-0.013,0.0051,-0.03,0,0,-4.9e+02,-0.0012,-0.006,-9.7e-05,-0.0063,0.0059,-0.12,0.21,-2.2e-06,0.43,-0.00014,0.00052,-0.00027,0,0,-4.9e+02,0.00056,0.00054,0.037,0.076,0.079,0.029,0.056,0.057,0.057,8.8e-06,1.6e-05,2.3e-06,0.026,0.027,0.003,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.1 -12190000,0.71,0.0012,-0.013,0.71,-0.0067,0.0046,-0.023,0,0,-4.9e+02,-0.0011,-0.0059,-9.8e-05,-0.0061,0.0061,-0.13,0.21,-1.5e-06,0.43,-8.5e-05,0.00059,-0.00026,0,0,-4.9e+02,0.00048,0.00048,0.037,0.063,0.065,0.028,0.048,0.048,0.055,8.2e-06,1.4e-05,2.3e-06,0.023,0.026,0.0027,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.1 -12290000,0.71,0.001,-0.013,0.71,-0.008,0.0051,-0.02,0,0,-4.9e+02,-0.001,-0.0059,-9.8e-05,-0.0067,0.0057,-0.13,0.21,-1.2e-06,0.43,-6e-05,0.0006,-0.00025,0,0,-4.9e+02,0.00048,0.00048,0.037,0.073,0.075,0.027,0.056,0.056,0.056,7.9e-06,1.4e-05,2.3e-06,0.023,0.025,0.0026,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.1 -12390000,0.71,0.001,-0.013,0.71,-0.0053,0.0038,-0.016,0,0,-4.9e+02,-0.001,-0.0059,-0.0001,-0.0053,0.0074,-0.13,0.21,-1.6e-06,0.43,-0.0001,0.0006,-0.00024,0,0,-4.9e+02,0.00042,0.00043,0.037,0.06,0.062,0.026,0.048,0.048,0.055,7.5e-06,1.3e-05,2.3e-06,0.021,0.024,0.0024,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.1 -12490000,0.71,0.00094,-0.013,0.71,-0.0069,0.0034,-0.016,0,0,-4.9e+02,-0.001,-0.006,-0.0001,-0.0058,0.0086,-0.13,0.21,-1.8e-06,0.43,-0.00013,0.00054,-0.00024,0,0,-4.9e+02,0.00042,0.00042,0.037,0.069,0.071,0.025,0.055,0.055,0.055,7.2e-06,1.3e-05,2.3e-06,0.021,0.024,0.0023,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.2 -12590000,0.71,0.0011,-0.013,0.71,-0.014,0.0042,-0.019,0,0,-4.9e+02,-0.0011,-0.006,-0.0001,-0.005,0.0078,-0.13,0.21,-2.1e-06,0.43,-0.00017,0.00051,-0.00024,0,0,-4.9e+02,0.00037,0.00038,0.037,0.057,0.059,0.024,0.047,0.047,0.054,6.8e-06,1.2e-05,2.3e-06,0.019,0.022,0.0021,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.2 -12690000,0.71,0.0014,-0.013,0.71,-0.017,0.0051,-0.021,0,0,-4.9e+02,-0.0012,-0.006,-0.0001,-0.0032,0.0092,-0.13,0.21,-3.1e-06,0.43,-0.00024,0.0005,-0.00025,0,0,-4.9e+02,0.00037,0.00038,0.037,0.065,0.067,0.024,0.055,0.055,0.054,6.5e-06,1.2e-05,2.3e-06,0.019,0.022,0.0021,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.2 -12790000,0.71,0.0012,-0.013,0.71,-0.02,0.0031,-0.022,0,0,-4.9e+02,-0.0011,-0.006,-0.0001,-0.0047,0.008,-0.13,0.21,-2.4e-06,0.43,-0.00018,0.00048,-0.00026,0,0,-4.9e+02,0.00033,0.00034,0.037,0.054,0.056,0.023,0.047,0.047,0.053,6.2e-06,1.1e-05,2.3e-06,0.018,0.021,0.0019,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.2 -12890000,0.71,0.0011,-0.013,0.71,-0.019,0.0019,-0.019,0,0,-4.9e+02,-0.0011,-0.006,-0.0001,-0.006,0.0076,-0.13,0.21,-2e-06,0.43,-0.00015,0.00047,-0.00025,0,0,-4.9e+02,0.00033,0.00034,0.037,0.061,0.063,0.023,0.054,0.055,0.053,6e-06,1.1e-05,2.3e-06,0.018,0.021,0.0018,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.3 -12990000,0.71,0.001,-0.013,0.71,-0.0089,0.0022,-0.018,0,0,-4.9e+02,-0.0011,-0.006,-0.0001,-0.0035,0.0079,-0.13,0.21,-1.8e-06,0.43,-0.00016,0.00058,-0.00019,0,0,-4.9e+02,0.0003,0.00031,0.037,0.051,0.053,0.021,0.047,0.047,0.052,5.7e-06,1e-05,2.3e-06,0.016,0.02,0.0017,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.3 -13090000,0.71,0.00094,-0.013,0.71,-0.0096,0.00018,-0.016,0,0,-4.9e+02,-0.0011,-0.006,-0.00011,-0.0047,0.0095,-0.13,0.21,-2.2e-06,0.43,-0.00017,0.00052,-0.00023,0,0,-4.9e+02,0.0003,0.00031,0.037,0.057,0.059,0.021,0.054,0.054,0.052,5.5e-06,9.7e-06,2.3e-06,0.016,0.02,0.0016,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.3 -13190000,0.71,0.00094,-0.013,0.71,-0.0022,0.0011,-0.012,0,0,-4.9e+02,-0.0011,-0.006,-0.00011,-0.0028,0.011,-0.13,0.21,-2.6e-06,0.43,-0.00021,0.00057,-0.0002,0,0,-4.9e+02,0.00027,0.00029,0.037,0.048,0.049,0.02,0.047,0.047,0.051,5.2e-06,9.2e-06,2.3e-06,0.015,0.019,0.0015,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.3 -13290000,0.71,0.00078,-0.013,0.71,-0.00066,0.0018,-0.007,0,0,-4.9e+02,-0.001,-0.006,-0.0001,-0.0043,0.0094,-0.13,0.21,-1.6e-06,0.43,-0.00015,0.00058,-0.00019,0,0,-4.9e+02,0.00027,0.00028,0.037,0.053,0.055,0.02,0.054,0.054,0.051,5.1e-06,8.9e-06,2.3e-06,0.015,0.018,0.0015,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.4 -13390000,0.71,0.00069,-0.013,0.71,0.00036,0.0025,-0.0026,0,0,-4.9e+02,-0.001,-0.006,-0.0001,-0.0037,0.0086,-0.13,0.21,-1.4e-06,0.43,-0.00013,0.00063,-0.00018,0,0,-4.9e+02,0.00025,0.00027,0.037,0.045,0.046,0.019,0.047,0.047,0.05,4.9e-06,8.5e-06,2.3e-06,0.014,0.018,0.0014,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.4 -13490000,0.71,0.0007,-0.013,0.71,0.00035,0.0026,0.00045,0,0,-4.9e+02,-0.001,-0.0059,-0.0001,-0.0037,0.0078,-0.13,0.21,-1.1e-06,0.43,-0.00012,0.00064,-0.00016,0,0,-4.9e+02,0.00025,0.00026,0.037,0.05,0.052,0.019,0.054,0.054,0.05,4.7e-06,8.3e-06,2.3e-06,0.014,0.018,0.0013,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.4 -13590000,0.71,0.00071,-0.013,0.71,0.00011,0.0029,-0.00092,0,0,-4.9e+02,-0.001,-0.006,-0.0001,-0.0035,0.009,-0.13,0.21,-1.5e-06,0.43,-0.00015,0.00063,-0.00018,0,0,-4.9e+02,0.00023,0.00025,0.037,0.042,0.044,0.018,0.046,0.047,0.05,4.5e-06,7.9e-06,2.3e-06,0.013,0.017,0.0013,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.4 -13690000,0.71,0.00069,-0.013,0.71,0.0011,0.0054,-0.0036,0,0,-4.9e+02,-0.001,-0.0059,-0.0001,-0.0029,0.0078,-0.13,0.21,-1.1e-06,0.43,-0.00013,0.00065,-0.00015,0,0,-4.9e+02,0.00023,0.00025,0.037,0.047,0.048,0.018,0.053,0.054,0.049,4.4e-06,7.7e-06,2.3e-06,0.013,0.017,0.0012,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.5 -13790000,0.71,0.00073,-0.013,0.71,0.00075,0.0022,-0.0047,0,0,-4.9e+02,-0.001,-0.006,-9.9e-05,-0.0014,0.0085,-0.13,0.21,-1.5e-06,0.43,-0.00017,0.00066,-0.00014,0,0,-4.9e+02,0.00022,0.00023,0.037,0.04,0.041,0.017,0.046,0.046,0.048,4.2e-06,7.3e-06,2.3e-06,0.013,0.016,0.0011,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.5 -13890000,0.71,0.00057,-0.013,0.71,0.0026,0.0022,-0.0073,0,0,-4.9e+02,-0.001,-0.0059,-9.9e-05,-0.0028,0.0074,-0.13,0.21,-8.2e-07,0.43,-0.00012,0.00066,-0.00014,0,0,-4.9e+02,0.00022,0.00023,0.037,0.044,0.045,0.017,0.053,0.053,0.049,4.1e-06,7.2e-06,2.3e-06,0.012,0.016,0.0011,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.5 -13990000,0.71,0.00064,-0.013,0.71,0.002,0.00051,-0.0067,0,0,-4.9e+02,-0.001,-0.0059,-9.8e-05,-0.0014,0.0078,-0.13,0.21,-1.1e-06,0.43,-0.00016,0.00066,-0.00012,0,0,-4.9e+02,0.00021,0.00022,0.037,0.037,0.039,0.016,0.046,0.046,0.048,3.9e-06,6.9e-06,2.3e-06,0.012,0.015,0.001,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.5 -14090000,0.71,0.00071,-0.013,0.71,0.0016,0.0019,-0.0065,0,0,-4.9e+02,-0.0011,-0.0059,-9.4e-05,8.8e-05,0.0068,-0.13,0.21,-8.9e-07,0.43,-0.00016,0.00069,-8.3e-05,0,0,-4.9e+02,0.00021,0.00022,0.037,0.041,0.043,0.016,0.053,0.053,0.048,3.8e-06,6.7e-06,2.3e-06,0.012,0.015,0.00099,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.6 -14190000,0.71,0.00066,-0.014,0.71,0.0046,0.0018,-0.0079,0,0,-4.9e+02,-0.0011,-0.0059,-9.3e-05,0.00058,0.0065,-0.13,0.21,-6.6e-07,0.43,-0.00015,0.00072,-6.5e-05,0,0,-4.9e+02,0.0002,0.00021,0.037,0.035,0.037,0.015,0.046,0.046,0.047,3.6e-06,6.4e-06,2.3e-06,0.011,0.015,0.00094,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.6 -14290000,0.71,0.00074,-0.014,0.71,0.0048,0.0031,-0.0063,0,0,-4.9e+02,-0.0011,-0.0059,-9.2e-05,0.0015,0.0064,-0.13,0.21,-7.8e-07,0.43,-0.00016,0.00072,-4.7e-05,0,0,-4.9e+02,0.0002,0.00021,0.037,0.038,0.04,0.015,0.052,0.052,0.047,3.5e-06,6.2e-06,2.3e-06,0.011,0.014,0.00091,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.6 -14390000,0.71,0.00062,-0.014,0.71,0.0073,0.0048,-0.0082,0,0,-4.9e+02,-0.001,-0.0058,-8.9e-05,0.0012,0.0049,-0.13,0.21,7.5e-08,0.43,-0.00012,0.00075,-3.1e-05,0,0,-4.9e+02,0.00019,0.0002,0.037,0.033,0.035,0.015,0.046,0.046,0.046,3.4e-06,6e-06,2.3e-06,0.011,0.014,0.00086,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.6 -14490000,0.71,0.00051,-0.014,0.71,0.0082,0.0063,-0.0099,0,0,-4.9e+02,-0.001,-0.0058,-8.9e-05,-0.00012,0.0044,-0.13,0.21,5.8e-07,0.43,-0.0001,0.00071,-3.1e-05,0,0,-4.9e+02,0.00019,0.0002,0.037,0.036,0.038,0.014,0.052,0.052,0.046,3.3e-06,5.8e-06,2.3e-06,0.011,0.014,0.00083,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.7 -14590000,0.71,0.0004,-0.013,0.71,0.0063,0.0048,-0.011,0,0,-4.9e+02,-0.001,-0.0059,-8.9e-05,-0.00098,0.0041,-0.13,0.21,6.7e-07,0.43,-9.4e-05,0.00068,-4.4e-05,0,0,-4.9e+02,0.00018,0.00019,0.037,0.031,0.033,0.014,0.045,0.045,0.046,3.2e-06,5.6e-06,2.3e-06,0.01,0.014,0.00079,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.7 -14690000,0.71,0.00035,-0.013,0.71,0.0081,0.0029,-0.0077,0,0,-4.9e+02,-0.001,-0.0058,-8.7e-05,-0.00089,0.0032,-0.13,0.21,1.1e-06,0.43,-7.7e-05,0.0007,-2.9e-05,0,0,-4.9e+02,0.00018,0.00019,0.037,0.034,0.036,0.014,0.051,0.052,0.046,3.1e-06,5.5e-06,2.3e-06,0.01,0.013,0.00077,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.7 -14790000,0.71,0.00034,-0.013,0.71,0.0057,0.0014,-0.0059,0,0,-4.9e+02,-0.001,-0.0058,-8.7e-05,-0.001,0.003,-0.13,0.21,1e-06,0.43,-8.2e-05,0.00067,-3e-05,0,0,-4.9e+02,0.00017,0.00018,0.037,0.03,0.031,0.013,0.045,0.045,0.045,3e-06,5.3e-06,2.3e-06,0.0098,0.013,0.00073,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.7 -14890000,0.71,0.0003,-0.013,0.71,0.008,0.0031,-0.008,0,0,-4.9e+02,-0.00099,-0.0058,-8.6e-05,-0.0013,0.0024,-0.13,0.21,1.3e-06,0.43,-6.7e-05,0.00068,-2.7e-05,0,0,-4.9e+02,0.00018,0.00018,0.037,0.032,0.034,0.013,0.051,0.051,0.045,2.9e-06,5.1e-06,2.3e-06,0.0097,0.013,0.00071,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.8 -14990000,0.71,0.00025,-0.013,0.71,0.007,0.0021,-0.006,0,0,-4.9e+02,-0.00099,-0.0059,-8.7e-05,-0.0017,0.0029,-0.13,0.21,1.1e-06,0.43,-7.7e-05,0.00066,-3.9e-05,0,0,-4.9e+02,0.00017,0.00017,0.037,0.028,0.03,0.013,0.045,0.045,0.045,2.8e-06,4.9e-06,2.3e-06,0.0094,0.012,0.00067,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.8 -15090000,0.71,0.00018,-0.013,0.71,0.0078,0.0021,-0.0072,0,0,-4.9e+02,-0.00099,-0.0059,-8.8e-05,-0.0018,0.0033,-0.13,0.21,9.8e-07,0.43,-8.9e-05,0.00064,-4e-05,0,0,-4.9e+02,0.00017,0.00017,0.037,0.03,0.032,0.013,0.05,0.051,0.044,2.7e-06,4.8e-06,2.3e-06,0.0093,0.012,0.00065,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.8 -15190000,0.71,0.00015,-0.013,0.71,0.0075,0.0027,-0.0063,0,0,-4.9e+02,-0.00098,-0.0059,-8.9e-05,-0.0024,0.0035,-0.13,0.21,9.8e-07,0.43,-9.8e-05,0.00061,-4.7e-05,0,0,-4.9e+02,0.00016,0.00017,0.037,0.027,0.028,0.012,0.044,0.045,0.044,2.6e-06,4.6e-06,2.3e-06,0.0091,0.012,0.00063,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.8 -15290000,0.71,0.00017,-0.013,0.71,0.008,0.0037,-0.005,0,0,-4.9e+02,-0.001,-0.0059,-8.7e-05,-0.0015,0.0033,-0.13,0.21,1e-06,0.43,-0.00012,0.00061,-2.2e-05,0,0,-4.9e+02,0.00016,0.00017,0.037,0.029,0.031,0.012,0.05,0.05,0.044,2.6e-06,4.5e-06,2.3e-06,0.0089,0.012,0.00061,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.9 -15390000,0.71,0.00018,-0.013,0.71,0.0073,0.005,-0.004,0,0,-4.9e+02,-0.001,-0.0058,-8.3e-05,-0.0006,0.0018,-0.13,0.21,1.4e-06,0.43,-0.0001,0.00063,1.5e-06,0,0,-4.9e+02,0.00016,0.00016,0.037,0.025,0.027,0.012,0.044,0.044,0.043,2.5e-06,4.4e-06,2.3e-06,0.0087,0.012,0.00058,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.9 -15490000,0.71,0.0002,-0.013,0.71,0.0088,0.0041,-0.0032,0,0,-4.9e+02,-0.001,-0.0059,-8.6e-05,-0.00099,0.0031,-0.13,0.21,9.4e-07,0.43,-0.00012,0.00061,-1.7e-05,0,0,-4.9e+02,0.00016,0.00016,0.037,0.027,0.029,0.012,0.049,0.05,0.044,2.4e-06,4.3e-06,2.3e-06,0.0086,0.011,0.00056,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.9 -15590000,0.71,0.00016,-0.013,0.71,0.0074,0.0031,-0.0024,0,0,-4.9e+02,-0.001,-0.0059,-8.8e-05,-0.0016,0.0038,-0.13,0.21,5.9e-07,0.43,-0.00012,0.00059,-4.2e-05,0,0,-4.9e+02,0.00016,0.00016,0.037,0.024,0.026,0.011,0.044,0.044,0.043,2.3e-06,4.1e-06,2.3e-06,0.0084,0.011,0.00054,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.9 -15690000,0.71,0.00021,-0.013,0.71,0.0077,0.0032,-0.0025,0,0,-4.9e+02,-0.001,-0.0059,-8.9e-05,-0.0011,0.0042,-0.13,0.21,2.8e-07,0.43,-0.00013,0.0006,-4.5e-05,0,0,-4.9e+02,0.00016,0.00016,0.037,0.026,0.028,0.011,0.049,0.049,0.043,2.3e-06,4e-06,2.3e-06,0.0083,0.011,0.00052,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4 -15790000,0.71,0.00017,-0.013,0.71,0.0083,0.0017,-0.0043,0,0,-4.9e+02,-0.001,-0.0059,-8.8e-05,-0.0013,0.0044,-0.13,0.21,1.7e-07,0.43,-0.00014,0.00059,-4.9e-05,0,0,-4.9e+02,0.00015,0.00015,0.037,0.023,0.025,0.011,0.043,0.044,0.042,2.2e-06,3.9e-06,2.3e-06,0.0082,0.011,0.0005,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4 -15890000,0.71,0.00018,-0.013,0.71,0.009,0.0016,-0.0029,0,0,-4.9e+02,-0.001,-0.0059,-8.8e-05,-0.00059,0.0047,-0.13,0.21,-3.2e-08,0.43,-0.00015,0.00059,-4e-05,0,0,-4.9e+02,0.00015,0.00015,0.037,0.025,0.027,0.011,0.048,0.049,0.042,2.2e-06,3.8e-06,2.3e-06,0.0081,0.011,0.00049,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4 -15990000,0.71,0.00016,-0.013,0.71,0.0088,0.0017,-0.00057,0,0,-4.9e+02,-0.0011,-0.0059,-8.3e-05,8.5e-05,0.0039,-0.13,0.21,7.9e-08,0.43,-0.00016,0.0006,-2.2e-05,0,0,-4.9e+02,0.00015,0.00015,0.037,0.022,0.024,0.011,0.043,0.043,0.042,2.1e-06,3.6e-06,2.3e-06,0.0079,0.01,0.00047,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4 -16090000,0.71,0.00019,-0.013,0.71,0.011,0.0034,0.0016,0,0,-4.9e+02,-0.0011,-0.0059,-7.9e-05,0.00089,0.0026,-0.13,0.21,3.6e-07,0.43,-0.00014,0.00064,-5.8e-06,0,0,-4.9e+02,0.00015,0.00015,0.037,0.024,0.026,0.01,0.048,0.049,0.042,2e-06,3.6e-06,2.3e-06,0.0078,0.01,0.00046,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.1 -16190000,0.71,0.00024,-0.013,0.71,0.01,0.0036,0.0018,0,0,-4.9e+02,-0.0011,-0.0059,-7.8e-05,0.0017,0.0028,-0.13,0.21,4.5e-08,0.43,-0.00015,0.00065,4.5e-08,0,0,-4.9e+02,0.00015,0.00014,0.037,0.021,0.023,0.01,0.043,0.043,0.041,2e-06,3.4e-06,2.3e-06,0.0077,0.01,0.00044,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.1 -16290000,0.71,0.00026,-0.014,0.71,0.013,0.0046,0.001,0,0,-4.9e+02,-0.0011,-0.0058,-7.4e-05,0.002,0.0015,-0.13,0.21,5.2e-07,0.43,-0.00013,0.00066,1.5e-05,0,0,-4.9e+02,0.00015,0.00014,0.037,0.023,0.025,0.01,0.048,0.048,0.041,1.9e-06,3.4e-06,2.3e-06,0.0076,0.01,0.00043,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.1 -16390000,0.71,0.00031,-0.014,0.71,0.01,0.0031,0.00099,0,0,-4.9e+02,-0.0011,-0.0058,-7.5e-05,0.0031,0.0026,-0.13,0.21,-2.7e-07,0.43,-0.00015,0.00066,1.9e-05,0,0,-4.9e+02,0.00014,0.00014,0.037,0.02,0.023,0.0098,0.042,0.043,0.041,1.9e-06,3.2e-06,2.3e-06,0.0075,0.0098,0.00042,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.1 -16490000,0.71,0.0004,-0.014,0.71,0.0091,0.0044,-0.00091,0,0,-4.9e+02,-0.0011,-0.0058,-7.4e-05,0.004,0.0028,-0.13,0.21,-4.9e-07,0.43,-0.00016,0.00065,3.3e-05,0,0,-4.9e+02,0.00014,0.00014,0.037,0.022,0.024,0.0098,0.047,0.048,0.041,1.8e-06,3.2e-06,2.3e-06,0.0074,0.0097,0.00041,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.2 -16590000,0.71,0.00051,-0.013,0.71,0.007,0.0053,-0.0021,0,0,-4.9e+02,-0.0011,-0.0058,-7.5e-05,0.0042,0.0025,-0.13,0.21,-5.2e-07,0.43,-0.00015,0.00065,2.9e-05,0,0,-4.9e+02,0.00014,0.00014,0.037,0.02,0.022,0.0095,0.042,0.042,0.04,1.8e-06,3.1e-06,2.3e-06,0.0073,0.0095,0.00039,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.2 -16690000,0.71,0.00047,-0.013,0.71,0.0079,0.0056,-0.00027,0,0,-4.9e+02,-0.0011,-0.0059,-7.8e-05,0.0036,0.0031,-0.13,0.21,-6.8e-07,0.43,-0.00015,0.00064,1.8e-05,0,0,-4.9e+02,0.00014,0.00014,0.037,0.021,0.024,0.0094,0.047,0.047,0.04,1.7e-06,3e-06,2.3e-06,0.0072,0.0094,0.00038,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.2 -16790000,0.71,0.00047,-0.013,0.71,0.006,0.0063,-3.5e-05,0,0,-4.9e+02,-0.0011,-0.0058,-7.9e-05,0.0034,0.0027,-0.13,0.21,-6.5e-07,0.43,-0.00013,0.00065,5.6e-06,0,0,-4.9e+02,0.00014,0.00013,0.037,0.019,0.021,0.0093,0.042,0.042,0.04,1.7e-06,2.9e-06,2.3e-06,0.0071,0.0093,0.00037,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.2 -16890000,0.71,0.00052,-0.013,0.71,0.0057,0.0072,0.0013,0,0,-4.9e+02,-0.0012,-0.0059,-8.1e-05,0.0038,0.0033,-0.13,0.21,-9.3e-07,0.43,-0.00015,0.00064,1e-05,0,0,-4.9e+02,0.00014,0.00013,0.037,0.02,0.023,0.0092,0.046,0.047,0.04,1.6e-06,2.9e-06,2.3e-06,0.007,0.0091,0.00036,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.3 -16990000,0.71,0.00049,-0.013,0.71,0.0057,0.0049,0.0019,0,0,-4.9e+02,-0.0012,-0.0059,-8.1e-05,0.0037,0.0044,-0.13,0.21,-1.4e-06,0.43,-0.00016,0.00063,-9.4e-08,0,0,-4.9e+02,0.00014,0.00013,0.037,0.018,0.021,0.009,0.041,0.042,0.039,1.6e-06,2.7e-06,2.3e-06,0.0069,0.009,0.00035,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.3 -17090000,0.71,0.00054,-0.013,0.71,0.006,0.0064,0.0024,0,0,-4.9e+02,-0.0012,-0.0059,-8e-05,0.0047,0.0047,-0.13,0.21,-1.7e-06,0.43,-0.00018,0.00063,1.2e-05,0,0,-4.9e+02,0.00014,0.00013,0.037,0.02,0.022,0.0089,0.046,0.047,0.039,1.6e-06,2.7e-06,2.3e-06,0.0068,0.0089,0.00034,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.3 -17190000,0.71,0.00059,-0.013,0.71,0.0061,0.0074,0.0022,0,0,-4.9e+02,-0.0012,-0.0059,-7.6e-05,0.0055,0.0046,-0.13,0.21,-2e-06,0.43,-0.00018,0.00064,1.4e-05,0,0,-4.9e+02,0.00013,0.00013,0.037,0.018,0.02,0.0087,0.041,0.042,0.039,1.5e-06,2.6e-06,2.3e-06,0.0068,0.0087,0.00033,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.3 -17290000,0.71,0.00062,-0.013,0.71,0.0079,0.0081,0.005,0,0,-4.9e+02,-0.0012,-0.0059,-7.8e-05,0.0058,0.0055,-0.13,0.21,-2.4e-06,0.43,-0.0002,0.00063,1.7e-05,0,0,-4.9e+02,0.00013,0.00013,0.037,0.019,0.022,0.0087,0.045,0.046,0.039,1.5e-06,2.6e-06,2.3e-06,0.0067,0.0086,0.00033,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.4 -17390000,0.71,0.00067,-0.013,0.71,0.0077,0.0085,0.0058,0,0,-4.9e+02,-0.0012,-0.0059,-7.2e-05,0.0066,0.0053,-0.13,0.21,-2.5e-06,0.43,-0.00021,0.00063,3.5e-05,0,0,-4.9e+02,0.00013,0.00012,0.037,0.017,0.02,0.0085,0.041,0.041,0.039,1.4e-06,2.5e-06,2.2e-06,0.0066,0.0085,0.00032,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.4 -17490000,0.71,0.00062,-0.013,0.71,0.0094,0.0086,0.0072,0,0,-4.9e+02,-0.0012,-0.0059,-7.2e-05,0.0061,0.005,-0.13,0.21,-2.3e-06,0.43,-0.00021,0.00063,3e-05,0,0,-4.9e+02,0.00013,0.00012,0.037,0.019,0.021,0.0085,0.045,0.046,0.039,1.4e-06,2.4e-06,2.2e-06,0.0065,0.0084,0.00031,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.4 -17590000,0.71,0.00058,-0.013,0.71,0.01,0.0079,0.011,0,0,-4.9e+02,-0.0012,-0.0059,-6.9e-05,0.0065,0.0052,-0.13,0.21,-2.6e-06,0.43,-0.00021,0.00063,2.7e-05,0,0,-4.9e+02,0.00013,0.00012,0.037,0.017,0.019,0.0083,0.04,0.041,0.038,1.4e-06,2.3e-06,2.2e-06,0.0065,0.0083,0.0003,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.4 -17690000,0.71,0.00056,-0.013,0.71,0.011,0.0094,0.01,0,0,-4.9e+02,-0.0012,-0.0059,-6.8e-05,0.0066,0.005,-0.13,0.21,-2.5e-06,0.43,-0.00022,0.00063,3.5e-05,0,0,-4.9e+02,0.00013,0.00012,0.037,0.018,0.021,0.0082,0.045,0.046,0.038,1.3e-06,2.3e-06,2.2e-06,0.0064,0.0082,0.0003,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.5 -17790000,0.71,0.00055,-0.013,0.71,0.012,0.01,0.0095,0,0,-4.9e+02,-0.0012,-0.0059,-5.9e-05,0.0075,0.0039,-0.13,0.21,-2.5e-06,0.43,-0.00021,0.00066,4.5e-05,0,0,-4.9e+02,0.00013,0.00012,0.037,0.016,0.019,0.0081,0.04,0.041,0.038,1.3e-06,2.2e-06,2.2e-06,0.0063,0.0081,0.00029,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.5 -17890000,0.71,0.00054,-0.013,0.71,0.015,0.011,0.0098,0,0,-4.9e+02,-0.0012,-0.0059,-5.6e-05,0.0073,0.0032,-0.13,0.21,-2.1e-06,0.43,-0.00021,0.00066,5e-05,0,0,-4.9e+02,0.00013,0.00012,0.037,0.018,0.021,0.008,0.044,0.045,0.038,1.3e-06,2.2e-06,2.2e-06,0.0063,0.008,0.00028,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.5 -17990000,0.71,0.00047,-0.013,0.71,0.016,0.0084,0.011,0,0,-4.9e+02,-0.0012,-0.0059,-5.6e-05,0.0071,0.0035,-0.13,0.21,-2.3e-06,0.43,-0.00022,0.00066,4.6e-05,0,0,-4.9e+02,0.00012,0.00012,0.037,0.016,0.019,0.0079,0.04,0.041,0.037,1.2e-06,2.1e-06,2.2e-06,0.0062,0.0078,0.00027,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.5 -18090000,0.71,0.00046,-0.013,0.71,0.017,0.0076,0.012,0,0,-4.9e+02,-0.0012,-0.0059,-6.1e-05,0.0066,0.0045,-0.13,0.21,-2.4e-06,0.43,-0.00023,0.00064,4.2e-05,0,0,-4.9e+02,0.00013,0.00012,0.037,0.017,0.02,0.0079,0.044,0.045,0.038,1.2e-06,2.1e-06,2.2e-06,0.0061,0.0078,0.00027,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.6 -18190000,0.71,0.00042,-0.013,0.71,0.018,0.0086,0.013,0,0,-4.9e+02,-0.0012,-0.0059,-5.7e-05,0.0068,0.0041,-0.13,0.21,-2.5e-06,0.43,-0.00023,0.00064,4.2e-05,0,0,-4.9e+02,0.00012,0.00011,0.037,0.016,0.018,0.0077,0.04,0.041,0.037,1.2e-06,2e-06,2.2e-06,0.0061,0.0076,0.00026,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.6 -18290000,0.71,0.00033,-0.013,0.71,0.019,0.0081,0.014,0,0,-4.9e+02,-0.0012,-0.0059,-5.9e-05,0.0064,0.0044,-0.13,0.21,-2.5e-06,0.43,-0.00023,0.00063,3.7e-05,0,0,-4.9e+02,0.00012,0.00011,0.037,0.017,0.02,0.0077,0.044,0.045,0.037,1.2e-06,2e-06,2.2e-06,0.006,0.0076,0.00026,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.6 -18390000,0.71,0.0003,-0.013,0.71,0.021,0.01,0.015,0,0,-4.9e+02,-0.0012,-0.0059,-5.3e-05,0.0062,0.0036,-0.13,0.21,-2.3e-06,0.43,-0.00022,0.00064,3.8e-05,0,0,-4.9e+02,0.00012,0.00011,0.037,0.015,0.018,0.0075,0.039,0.04,0.037,1.1e-06,1.9e-06,2.2e-06,0.006,0.0075,0.00025,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.6 -18490000,0.71,0.00037,-0.013,0.71,0.021,0.011,0.014,0,0,-4.9e+02,-0.0012,-0.0059,-5.2e-05,0.0067,0.0037,-0.13,0.21,-2.4e-06,0.43,-0.00022,0.00065,4.2e-05,0,0,-4.9e+02,0.00012,0.00011,0.037,0.016,0.02,0.0075,0.043,0.045,0.037,1.1e-06,1.9e-06,2.2e-06,0.0059,0.0074,0.00025,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.7 -18590000,0.71,0.00038,-0.013,0.71,0.021,0.012,0.013,0,0,-4.9e+02,-0.0012,-0.0059,-4.4e-05,0.0075,0.0031,-0.13,0.21,-2.5e-06,0.43,-0.00022,0.00067,4.7e-05,0,0,-4.9e+02,0.00012,0.00011,0.037,0.015,0.018,0.0074,0.039,0.04,0.037,1.1e-06,1.8e-06,2.2e-06,0.0058,0.0073,0.00024,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.7 -18690000,0.71,0.00029,-0.013,0.71,0.022,0.012,0.012,0,0,-4.9e+02,-0.0012,-0.0059,-4.6e-05,0.0068,0.0032,-0.13,0.21,-2.4e-06,0.43,-0.00022,0.00066,4.1e-05,0,0,-4.9e+02,0.00012,0.00011,0.037,0.016,0.019,0.0074,0.043,0.044,0.036,1.1e-06,1.8e-06,2.2e-06,0.0058,0.0072,0.00024,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.7 -18790000,0.71,0.00031,-0.013,0.71,0.021,0.011,0.012,0,0,-4.9e+02,-0.0012,-0.0059,-4.5e-05,0.0071,0.0037,-0.13,0.21,-2.7e-06,0.43,-0.00022,0.00065,3.8e-05,0,0,-4.9e+02,0.00012,0.00011,0.036,0.015,0.018,0.0073,0.039,0.04,0.036,1e-06,1.7e-06,2.2e-06,0.0057,0.0071,0.00023,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.7 -18890000,0.71,0.0004,-0.013,0.71,0.021,0.013,0.012,0,0,-4.9e+02,-0.0012,-0.0059,-3.9e-05,0.008,0.0032,-0.13,0.21,-2.7e-06,0.43,-0.00023,0.00067,5.1e-05,0,0,-4.9e+02,0.00012,0.00011,0.036,0.016,0.019,0.0072,0.043,0.044,0.036,1e-06,1.7e-06,2.2e-06,0.0057,0.0071,0.00023,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.8 -18990000,0.71,0.00045,-0.013,0.71,0.021,0.014,0.011,0,0,-4.9e+02,-0.0013,-0.0059,-3.3e-05,0.0086,0.0033,-0.13,0.21,-3e-06,0.43,-0.00024,0.00068,5.2e-05,0,0,-4.9e+02,0.00011,0.0001,0.036,0.015,0.017,0.0071,0.039,0.04,0.036,9.8e-07,1.6e-06,2.2e-06,0.0056,0.0069,0.00022,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.8 -19090000,0.71,0.0005,-0.013,0.71,0.021,0.015,0.013,0,0,-4.9e+02,-0.0013,-0.0059,-3.3e-05,0.0093,0.0036,-0.13,0.21,-3.3e-06,0.43,-0.00025,0.00068,5.6e-05,0,0,-4.9e+02,0.00012,0.0001,0.036,0.016,0.019,0.0071,0.042,0.044,0.036,9.6e-07,1.6e-06,2.2e-06,0.0056,0.0069,0.00022,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.8 -19190000,0.71,0.00054,-0.013,0.71,0.02,0.015,0.013,0,0,-4.9e+02,-0.0013,-0.0059,-2.6e-05,0.0098,0.0038,-0.13,0.21,-3.5e-06,0.43,-0.00027,0.00069,6e-05,0,0,-4.9e+02,0.00011,0.0001,0.036,0.014,0.017,0.007,0.038,0.04,0.036,9.3e-07,1.5e-06,2.1e-06,0.0055,0.0068,0.00022,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.8 -19290000,0.71,0.00057,-0.013,0.71,0.021,0.015,0.015,0,0,-4.9e+02,-0.0013,-0.0059,-3e-05,0.0097,0.0042,-0.13,0.21,-3.5e-06,0.43,-0.00027,0.00068,6.2e-05,0,0,-4.9e+02,0.00011,0.0001,0.036,0.015,0.019,0.007,0.042,0.044,0.036,9.2e-07,1.5e-06,2.1e-06,0.0055,0.0067,0.00021,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.9 -19390000,0.71,0.00053,-0.013,0.71,0.02,0.014,0.018,0,0,-4.9e+02,-0.0013,-0.0059,-2.3e-05,0.0096,0.004,-0.13,0.21,-3.6e-06,0.43,-0.00026,0.00068,5.7e-05,0,0,-4.9e+02,0.00011,0.0001,0.036,0.014,0.017,0.0069,0.038,0.04,0.036,8.9e-07,1.5e-06,2.1e-06,0.0055,0.0066,0.00021,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.9 -19490000,0.71,0.00054,-0.013,0.71,0.02,0.015,0.015,0,0,-4.9e+02,-0.0013,-0.0059,-1.8e-05,0.0096,0.0033,-0.13,0.21,-3.4e-06,0.43,-0.00026,0.00069,6e-05,0,0,-4.9e+02,0.00011,0.0001,0.036,0.015,0.018,0.0069,0.042,0.044,0.035,8.8e-07,1.4e-06,2.1e-06,0.0054,0.0066,0.00021,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.9 -19590000,0.71,0.00062,-0.013,0.71,0.017,0.014,0.015,0,0,-4.9e+02,-0.0013,-0.0059,-6.4e-06,0.01,0.003,-0.13,0.21,-3.5e-06,0.43,-0.00027,0.0007,6.8e-05,0,0,-4.9e+02,0.00011,9.8e-05,0.036,0.014,0.017,0.0068,0.038,0.039,0.035,8.6e-07,1.4e-06,2.1e-06,0.0054,0.0065,0.0002,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.9 -19690000,0.71,0.00066,-0.013,0.71,0.017,0.012,0.016,0,0,-4.9e+02,-0.0013,-0.0059,-9.9e-06,0.011,0.0037,-0.13,0.21,-3.8e-06,0.43,-0.00027,0.0007,6e-05,0,0,-4.9e+02,0.00011,9.8e-05,0.036,0.015,0.018,0.0068,0.042,0.043,0.035,8.4e-07,1.4e-06,2.1e-06,0.0053,0.0064,0.0002,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,5 -19790000,0.71,0.00074,-0.013,0.71,0.015,0.01,0.017,0,0,-4.9e+02,-0.0013,-0.0059,-5.4e-06,0.011,0.004,-0.13,0.21,-4.1e-06,0.43,-0.00028,0.0007,5.9e-05,0,0,-4.9e+02,0.00011,9.6e-05,0.036,0.014,0.017,0.0067,0.038,0.039,0.035,8.2e-07,1.3e-06,2.1e-06,0.0053,0.0063,0.0002,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,5 -19890000,0.71,0.00065,-0.013,0.71,0.015,0.012,0.018,0,0,-4.9e+02,-0.0013,-0.0058,2.8e-06,0.011,0.003,-0.13,0.21,-3.7e-06,0.43,-0.00027,0.00071,6.6e-05,0,0,-4.9e+02,0.00011,9.6e-05,0.036,0.015,0.018,0.0067,0.041,0.043,0.035,8.1e-07,1.3e-06,2.1e-06,0.0052,0.0063,0.00019,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,5 -19990000,0.71,0.00062,-0.013,0.71,0.013,0.012,0.02,0,0,-4.9e+02,-0.0013,-0.0058,1.8e-05,0.011,0.0021,-0.13,0.21,-3.6e-06,0.43,-0.00027,0.00072,7e-05,0,0,-4.9e+02,0.0001,9.4e-05,0.036,0.014,0.017,0.0066,0.038,0.039,0.035,7.9e-07,1.3e-06,2.1e-06,0.0052,0.0062,0.00019,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,5 -20090000,0.71,0.00065,-0.013,0.71,0.013,0.013,0.02,0,0,-4.9e+02,-0.0013,-0.0058,2.8e-05,0.012,0.0013,-0.13,0.21,-3.5e-06,0.43,-0.00028,0.00074,8.1e-05,0,0,-4.9e+02,0.00011,9.5e-05,0.036,0.014,0.018,0.0066,0.041,0.043,0.035,7.8e-07,1.2e-06,2.1e-06,0.0052,0.0062,0.00019,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,5.1 -20190000,0.71,0.00069,-0.013,0.71,0.012,0.011,0.022,0,0,-4.9e+02,-0.0013,-0.0058,3.7e-05,0.012,0.001,-0.13,0.21,-3.4e-06,0.43,-0.00027,0.00074,8e-05,0,0,-4.9e+02,0.0001,9.3e-05,0.036,0.013,0.016,0.0065,0.038,0.039,0.034,7.6e-07,1.2e-06,2.1e-06,0.0051,0.0061,0.00018,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,5.1 -20290000,0.71,0.0007,-0.013,0.71,0.01,0.011,0.021,0,0,-4.9e+02,-0.0013,-0.0058,4.1e-05,0.012,0.00096,-0.13,0.21,-3.5e-06,0.43,-0.00028,0.00075,8.1e-05,0,0,-4.9e+02,0.0001,9.3e-05,0.036,0.014,0.018,0.0065,0.041,0.043,0.034,7.5e-07,1.2e-06,2.1e-06,0.0051,0.0061,0.00018,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,5.1 -20390000,0.71,0.00065,-0.013,0.71,0.0088,0.0091,0.022,0,0,-4.9e+02,-0.0013,-0.0058,4.5e-05,0.012,0.001,-0.13,0.21,-3.5e-06,0.43,-0.00027,0.00075,7.1e-05,0,0,-4.9e+02,0.0001,9.1e-05,0.036,0.013,0.016,0.0064,0.037,0.039,0.034,7.3e-07,1.1e-06,2e-06,0.0051,0.006,0.00018,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,5.1 -20490000,0.71,0.0007,-0.013,0.71,0.0089,0.009,0.022,0,0,-4.9e+02,-0.0013,-0.0058,4.1e-05,0.012,0.0013,-0.13,0.21,-3.5e-06,0.43,-0.00027,0.00074,7e-05,0,0,-4.9e+02,0.0001,9.1e-05,0.036,0.014,0.017,0.0064,0.041,0.043,0.034,7.2e-07,1.1e-06,2e-06,0.005,0.0059,0.00018,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,5.2 -20590000,0.71,0.00073,-0.013,0.71,0.008,0.007,0.02,0,0,-4.9e+02,-0.0013,-0.0058,4.2e-05,0.012,0.0019,-0.13,0.21,-3.7e-06,0.43,-0.00027,0.00074,6.9e-05,0,0,-4.9e+02,0.0001,8.9e-05,0.036,0.013,0.016,0.0063,0.037,0.039,0.034,7e-07,1.1e-06,2e-06,0.005,0.0059,0.00017,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,5.2 -20690000,0.71,0.00076,-0.013,0.71,0.0087,0.007,0.021,0,0,-4.9e+02,-0.0013,-0.0058,4.5e-05,0.012,0.0016,-0.13,0.21,-3.7e-06,0.43,-0.00027,0.00074,7.1e-05,0,0,-4.9e+02,0.0001,9e-05,0.036,0.014,0.017,0.0064,0.041,0.043,0.034,6.9e-07,1.1e-06,2e-06,0.005,0.0058,0.00017,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,5.2 -20790000,0.71,0.0008,-0.013,0.7,0.0065,0.0066,0.021,0,0,-4.9e+02,-0.0013,-0.0058,5.1e-05,0.013,0.0018,-0.13,0.21,-3.7e-06,0.43,-0.00028,0.00075,6.5e-05,0,0,-4.9e+02,9.8e-05,8.8e-05,0.036,0.013,0.016,0.0063,0.037,0.039,0.034,6.7e-07,1e-06,2e-06,0.0049,0.0057,0.00017,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,5.2 -20890000,0.71,0.00081,-0.013,0.7,0.0064,0.0062,0.021,0,0,-4.9e+02,-0.0013,-0.0058,5.8e-05,0.013,0.0013,-0.13,0.21,-3.7e-06,0.43,-0.00028,0.00076,7e-05,0,0,-4.9e+02,9.9e-05,8.8e-05,0.036,0.014,0.017,0.0063,0.04,0.043,0.034,6.7e-07,1e-06,2e-06,0.0049,0.0057,0.00017,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,5.3 -20990000,0.71,0.00083,-0.013,0.7,0.0047,0.0039,0.021,0,0,-4.9e+02,-0.0013,-0.0058,6.3e-05,0.013,0.0016,-0.13,0.21,-3.7e-06,0.43,-0.0003,0.00076,6.7e-05,0,0,-4.9e+02,9.6e-05,8.6e-05,0.036,0.013,0.016,0.0062,0.037,0.039,0.033,6.5e-07,9.9e-07,2e-06,0.0049,0.0056,0.00016,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,5.3 -21090000,0.71,0.00081,-0.013,0.7,0.0056,0.0031,0.022,0,0,-4.9e+02,-0.0013,-0.0058,6.8e-05,0.013,0.0011,-0.13,0.21,-3.5e-06,0.43,-0.00029,0.00077,6.4e-05,0,0,-4.9e+02,9.7e-05,8.6e-05,0.036,0.014,0.017,0.0062,0.04,0.043,0.034,6.4e-07,9.9e-07,2e-06,0.0048,0.0056,0.00016,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,5.3 -21190000,0.71,0.00081,-0.013,0.7,0.0059,0.0022,0.021,0,0,-4.9e+02,-0.0013,-0.0058,6.8e-05,0.013,0.0013,-0.13,0.21,-3.5e-06,0.43,-0.00029,0.00077,6.1e-05,0,0,-4.9e+02,9.5e-05,8.5e-05,0.036,0.013,0.016,0.0061,0.037,0.039,0.033,6.3e-07,9.5e-07,2e-06,0.0048,0.0055,0.00016,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,5.3 -21290000,0.71,0.00089,-0.013,0.7,0.0052,0.0023,0.023,0,0,-4.9e+02,-0.0013,-0.0058,7.8e-05,0.013,0.00082,-0.13,0.21,-3.5e-06,0.43,-0.00029,0.00079,6.5e-05,0,0,-4.9e+02,9.5e-05,8.5e-05,0.036,0.014,0.017,0.0061,0.04,0.043,0.033,6.2e-07,9.5e-07,1.9e-06,0.0048,0.0055,0.00016,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,5.4 -21390000,0.71,0.00088,-0.013,0.7,0.0042,0.0003,0.023,0,0,-4.9e+02,-0.0013,-0.0058,7.3e-05,0.013,0.00099,-0.13,0.21,-3.7e-06,0.43,-0.00029,0.00078,6.5e-05,0,0,-4.9e+02,9.3e-05,8.3e-05,0.036,0.013,0.016,0.0061,0.037,0.039,0.033,6e-07,9.1e-07,1.9e-06,0.0047,0.0054,0.00016,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,5.4 -21490000,0.71,0.00087,-0.013,0.7,0.0047,0.00072,0.023,0,0,-4.9e+02,-0.0013,-0.0058,7.8e-05,0.013,0.00064,-0.13,0.21,-3.7e-06,0.43,-0.00028,0.00078,7e-05,0,0,-4.9e+02,9.4e-05,8.4e-05,0.036,0.014,0.017,0.0061,0.04,0.043,0.033,6e-07,9.1e-07,1.9e-06,0.0047,0.0054,0.00015,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,5.4 -21590000,0.71,0.00086,-0.013,0.7,0.0035,0.0012,0.023,0,0,-4.9e+02,-0.0013,-0.0058,7.6e-05,0.013,0.00067,-0.13,0.21,-3.8e-06,0.43,-0.00028,0.00078,6.7e-05,0,0,-4.9e+02,9.2e-05,8.2e-05,0.036,0.013,0.015,0.006,0.037,0.039,0.033,5.8e-07,8.7e-07,1.9e-06,0.0047,0.0054,0.00015,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,5.4 -21690000,0.71,0.00084,-0.013,0.7,0.0052,0.0015,0.025,0,0,-4.9e+02,-0.0013,-0.0058,8e-05,0.013,0.00026,-0.13,0.21,-3.7e-06,0.43,-0.00027,0.00078,6.7e-05,0,0,-4.9e+02,9.2e-05,8.2e-05,0.036,0.013,0.017,0.006,0.04,0.042,0.033,5.8e-07,8.7e-07,1.9e-06,0.0047,0.0053,0.00015,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,5.5 -21790000,0.71,0.00083,-0.013,0.7,0.0033,0.0037,0.024,0,0,-4.9e+02,-0.0013,-0.0058,7.1e-05,0.013,0.00044,-0.13,0.21,-4.3e-06,0.43,-0.00029,0.00078,6.9e-05,0,0,-4.9e+02,9e-05,8.1e-05,0.036,0.013,0.015,0.006,0.037,0.039,0.033,5.6e-07,8.3e-07,1.9e-06,0.0046,0.0053,0.00015,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,5.5 -21890000,0.71,0.00083,-0.013,0.7,0.004,0.0042,0.024,0,0,-4.9e+02,-0.0013,-0.0058,7.2e-05,0.013,0.00036,-0.13,0.21,-4.2e-06,0.43,-0.00029,0.00078,6.7e-05,0,0,-4.9e+02,9.1e-05,8.1e-05,0.036,0.013,0.016,0.006,0.04,0.042,0.033,5.6e-07,8.3e-07,1.9e-06,0.0046,0.0053,0.00015,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,5.5 -21990000,0.71,0.00085,-0.013,0.7,0.0028,0.0049,0.025,0,0,-4.9e+02,-0.0013,-0.0058,6.9e-05,0.014,0.00019,-0.13,0.21,-4.6e-06,0.43,-0.0003,0.00078,6.9e-05,0,0,-4.9e+02,8.9e-05,7.9e-05,0.036,0.012,0.015,0.0059,0.036,0.038,0.033,5.5e-07,8e-07,1.9e-06,0.0046,0.0052,0.00015,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,0.01 -22090000,0.71,0.00087,-0.013,0.7,0.0027,0.0065,0.024,0,0,-4.9e+02,-0.0013,-0.0058,6.9e-05,0.014,0.00024,-0.13,0.21,-4.6e-06,0.43,-0.0003,0.00078,6.9e-05,0,0,-4.9e+02,8.9e-05,8e-05,0.036,0.013,0.016,0.0059,0.04,0.042,0.033,5.4e-07,8e-07,1.9e-06,0.0046,0.0052,0.00014,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,0.01 -22190000,0.71,0.00084,-0.013,0.7,0.0022,0.0065,0.024,0,0,-4.9e+02,-0.0013,-0.0058,7.5e-05,0.014,0.00031,-0.13,0.21,-4.4e-06,0.43,-0.00031,0.00079,5.8e-05,0,0,-4.9e+02,8.7e-05,7.8e-05,0.036,0.012,0.015,0.0059,0.036,0.038,0.033,5.3e-07,7.7e-07,1.8e-06,0.0045,0.0051,0.00014,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,0.01 -22290000,0.71,0.00087,-0.013,0.7,0.0015,0.0062,0.024,0,0,-4.9e+02,-0.0013,-0.0058,7.3e-05,0.013,0.00036,-0.13,0.21,-4.5e-06,0.43,-0.00031,0.00078,5.9e-05,0,0,-4.9e+02,8.8e-05,7.8e-05,0.036,0.013,0.016,0.0059,0.04,0.042,0.033,5.2e-07,7.7e-07,1.8e-06,0.0045,0.0051,0.00014,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,0.01 -22390000,0.71,0.00089,-0.013,0.7,-0.0008,0.0059,0.026,0,0,-4.9e+02,-0.0013,-0.0058,8e-05,0.014,0.00057,-0.13,0.21,-4.4e-06,0.43,-0.00031,0.00079,6e-05,0,0,-4.9e+02,8.6e-05,7.7e-05,0.036,0.012,0.015,0.0058,0.036,0.038,0.033,5.1e-07,7.4e-07,1.8e-06,0.0045,0.005,0.00014,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,0.01 -22490000,0.71,0.00093,-0.013,0.7,-0.0019,0.0067,0.027,0,0,-4.9e+02,-0.0013,-0.0058,8e-05,0.014,0.0007,-0.13,0.21,-4.4e-06,0.43,-0.00033,0.0008,5.8e-05,0,0,-4.9e+02,8.7e-05,7.7e-05,0.036,0.013,0.016,0.0058,0.04,0.042,0.033,5.1e-07,7.4e-07,1.8e-06,0.0045,0.005,0.00014,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,0.01 -22590000,0.71,0.00095,-0.013,0.7,-0.0036,0.0061,0.026,0,0,-4.9e+02,-0.0014,-0.0058,8.4e-05,0.015,0.00088,-0.13,0.21,-4.3e-06,0.43,-0.00034,0.00081,5.5e-05,0,0,-4.9e+02,8.5e-05,7.6e-05,0.036,0.012,0.015,0.0058,0.036,0.038,0.032,5e-07,7.1e-07,1.8e-06,0.0044,0.005,0.00014,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,0.01 -22690000,0.71,0.001,-0.013,0.7,-0.0049,0.0075,0.027,0,0,-4.9e+02,-0.0014,-0.0058,9e-05,0.015,0.00076,-0.13,0.21,-4.2e-06,0.43,-0.00035,0.00082,5.4e-05,0,0,-4.9e+02,8.5e-05,7.6e-05,0.036,0.013,0.016,0.0058,0.039,0.042,0.033,4.9e-07,7.1e-07,1.8e-06,0.0044,0.005,0.00014,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,0.01 -22790000,0.71,0.001,-0.013,0.7,-0.0069,0.0064,0.028,0,0,-4.9e+02,-0.0014,-0.0058,7.9e-05,0.015,0.0015,-0.13,0.21,-4.4e-06,0.43,-0.00034,0.0008,6e-05,0,0,-4.9e+02,8.3e-05,7.5e-05,0.036,0.012,0.015,0.0058,0.036,0.038,0.032,4.8e-07,6.8e-07,1.8e-06,0.0044,0.0049,0.00013,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,0.01 -22890000,0.71,0.00099,-0.013,0.7,-0.0073,0.0073,0.03,0,0,-4.9e+02,-0.0014,-0.0058,7.9e-05,0.015,0.0014,-0.13,0.21,-4.4e-06,0.43,-0.00034,0.00079,5.6e-05,0,0,-4.9e+02,8.4e-05,7.5e-05,0.036,0.013,0.016,0.0058,0.039,0.042,0.032,4.8e-07,6.8e-07,1.7e-06,0.0044,0.0049,0.00013,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,0.01 -22990000,0.71,0.00097,-0.013,0.7,-0.0075,0.0064,0.03,0,0,-4.9e+02,-0.0014,-0.0058,8.8e-05,0.015,0.0013,-0.13,0.21,-4.1e-06,0.43,-0.00034,0.0008,5.3e-05,0,0,-4.9e+02,8.2e-05,7.4e-05,0.036,0.012,0.015,0.0057,0.036,0.038,0.032,4.7e-07,6.6e-07,1.7e-06,0.0044,0.0048,0.00013,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,0.01 -23090000,0.71,0.00092,-0.013,0.7,-0.0079,0.0063,0.031,0,0,-4.9e+02,-0.0014,-0.0058,8e-05,0.014,0.0015,-0.13,0.21,-4.2e-06,0.43,-0.00034,0.00079,5.1e-05,0,0,-4.9e+02,8.3e-05,7.4e-05,0.036,0.013,0.016,0.0057,0.039,0.042,0.032,4.7e-07,6.6e-07,1.7e-06,0.0043,0.0048,0.00013,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,0.01 -23190000,0.71,0.00097,-0.013,0.7,-0.0092,0.0043,0.032,0,0,-4.9e+02,-0.0014,-0.0058,8.2e-05,0.015,0.0017,-0.13,0.21,-4.2e-06,0.43,-0.00033,0.00078,4.3e-05,0,0,-4.9e+02,8.1e-05,7.3e-05,0.036,0.012,0.014,0.0057,0.036,0.038,0.032,4.6e-07,6.3e-07,1.7e-06,0.0043,0.0048,0.00013,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,0.01 -23290000,0.71,0.00089,-0.013,0.7,-0.009,0.0038,0.032,0,0,-4.9e+02,-0.0014,-0.0058,8.4e-05,0.014,0.0016,-0.13,0.21,-4.2e-06,0.43,-0.00033,0.00078,4.1e-05,0,0,-4.9e+02,8.2e-05,7.3e-05,0.036,0.013,0.016,0.0057,0.039,0.042,0.032,4.5e-07,6.3e-07,1.7e-06,0.0043,0.0048,0.00013,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,0.01 -23390000,0.71,0.00095,-0.013,0.7,-0.0093,0.0026,0.03,0,0,-4.9e+02,-0.0014,-0.0058,8.7e-05,0.014,0.0016,-0.13,0.21,-4.3e-06,0.43,-0.00031,0.00078,4.3e-05,0,0,-4.9e+02,8e-05,7.2e-05,0.036,0.012,0.014,0.0057,0.036,0.038,0.032,4.4e-07,6.1e-07,1.7e-06,0.0043,0.0047,0.00013,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,0.01 -23490000,0.71,0.0033,-0.011,0.7,-0.016,0.0028,-0.0031,0,0,-4.9e+02,-0.0014,-0.0058,9.3e-05,0.014,0.0013,-0.13,0.21,-4.2e-06,0.43,-0.0003,0.00081,6.7e-05,0,0,-4.9e+02,8.1e-05,7.2e-05,0.036,0.013,0.015,0.0057,0.039,0.042,0.032,4.4e-07,6.1e-07,1.7e-06,0.0043,0.0047,0.00013,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0012,1,1,0.01 -23590000,0.71,0.0086,-0.0027,0.7,-0.027,0.0028,-0.035,0,0,-4.9e+02,-0.0013,-0.0058,8.9e-05,0.014,0.0013,-0.13,0.21,-4.2e-06,0.43,-0.0003,0.00086,0.00014,0,0,-4.9e+02,7.9e-05,7.1e-05,0.036,0.012,0.014,0.0056,0.036,0.038,0.032,4.3e-07,5.9e-07,1.6e-06,0.0043,0.0047,0.00012,0.0013,3.9e-05,0.0012,0.0016,0.0012,0.0012,1,1,0.01 -23690000,0.71,0.0082,0.003,0.71,-0.058,-0.005,-0.085,0,0,-4.9e+02,-0.0013,-0.0058,9e-05,0.014,0.0013,-0.13,0.21,-4.2e-06,0.43,-0.0003,0.0008,0.0001,0,0,-4.9e+02,8e-05,7.1e-05,0.036,0.013,0.015,0.0056,0.039,0.042,0.032,4.3e-07,5.9e-07,1.6e-06,0.0042,0.0047,0.00012,0.0012,3.9e-05,0.0012,0.0016,0.0012,0.0012,1,1,0.01 -23790000,0.71,0.0052,-0.00025,0.71,-0.082,-0.017,-0.14,0,0,-4.9e+02,-0.0013,-0.0058,9.1e-05,0.013,0.00086,-0.13,0.21,-3.4e-06,0.43,-0.00036,0.0008,0.00045,0,0,-4.9e+02,7.8e-05,7e-05,0.036,0.012,0.014,0.0056,0.036,0.038,0.032,4.2e-07,5.7e-07,1.6e-06,0.0042,0.0046,0.00012,0.0012,3.9e-05,0.0012,0.0016,0.0012,0.0012,1,1,0.01 -23890000,0.71,0.0026,-0.0063,0.71,-0.099,-0.025,-0.19,0,0,-4.9e+02,-0.0013,-0.0058,9.1e-05,0.014,0.001,-0.13,0.21,-3.3e-06,0.43,-0.00038,0.00085,0.00036,0,0,-4.9e+02,7.9e-05,7e-05,0.036,0.013,0.016,0.0056,0.039,0.042,0.032,4.2e-07,5.7e-07,1.6e-06,0.0042,0.0046,0.00012,0.0012,3.9e-05,0.0012,0.0016,0.0012,0.0012,1,1,0.01 -23990000,0.71,0.0012,-0.011,0.71,-0.1,-0.029,-0.25,0,0,-4.9e+02,-0.0013,-0.0058,9.6e-05,0.014,0.001,-0.13,0.21,-3e-06,0.43,-0.00036,0.00085,0.00034,0,0,-4.9e+02,7.7e-05,6.9e-05,0.036,0.012,0.015,0.0056,0.036,0.038,0.032,4.1e-07,5.5e-07,1.6e-06,0.0042,0.0046,0.00012,0.0012,3.9e-05,0.0012,0.0016,0.0012,0.0012,1,1,0.01 -24090000,0.71,0.0025,-0.0096,0.71,-0.1,-0.028,-0.29,0,0,-4.9e+02,-0.0013,-0.0058,0.0001,0.014,0.0007,-0.13,0.21,-2.5e-06,0.43,-0.00038,0.00082,0.00038,0,0,-4.9e+02,7.7e-05,6.9e-05,0.036,0.013,0.016,0.0056,0.039,0.042,0.032,4.1e-07,5.5e-07,1.6e-06,0.0042,0.0046,0.00012,0.0012,3.9e-05,0.0012,0.0016,0.0012,0.0012,1,1,0.01 -24190000,0.71,0.0036,-0.0073,0.71,-0.11,-0.03,-0.34,0,0,-4.9e+02,-0.0013,-0.0058,0.00011,0.013,0.00059,-0.13,0.21,-1.8e-06,0.43,-0.00038,0.00085,0.00037,0,0,-4.9e+02,7.6e-05,6.8e-05,0.036,0.012,0.015,0.0055,0.036,0.038,0.031,4e-07,5.4e-07,1.6e-06,0.0042,0.0045,0.00012,0.0012,3.9e-05,0.0012,0.0016,0.0012,0.0012,1,1,0.01 -24290000,0.71,0.0041,-0.0065,0.71,-0.12,-0.034,-0.4,0,0,-4.9e+02,-0.0013,-0.0058,0.0001,0.013,0.00055,-0.13,0.21,-1.5e-06,0.43,-0.00042,0.0009,0.00044,0,0,-4.9e+02,7.7e-05,6.9e-05,0.036,0.013,0.016,0.0056,0.039,0.042,0.032,4e-07,5.4e-07,1.6e-06,0.0042,0.0045,0.00012,0.0012,3.9e-05,0.0012,0.0016,0.0012,0.0012,1,1,0.01 -24390000,0.71,0.0042,-0.0067,0.71,-0.13,-0.041,-0.45,0,0,-4.9e+02,-0.0013,-0.0058,0.00011,0.013,0.0012,-0.13,0.21,1.3e-06,0.43,-0.0003,0.00094,0.00043,0,0,-4.9e+02,7.5e-05,6.7e-05,0.036,0.012,0.015,0.0055,0.036,0.038,0.031,3.9e-07,5.2e-07,1.5e-06,0.0041,0.0045,0.00012,0.0012,3.9e-05,0.0012,0.0016,0.0012,0.0012,1,1,0.01 -24490000,0.71,0.005,-0.0025,0.71,-0.14,-0.046,-0.5,0,0,-4.9e+02,-0.0013,-0.0058,0.00011,0.013,0.0012,-0.13,0.21,1.3e-06,0.43,-0.0003,0.00095,0.00042,0,0,-4.9e+02,7.6e-05,6.8e-05,0.036,0.013,0.016,0.0055,0.039,0.042,0.031,3.9e-07,5.2e-07,1.5e-06,0.0041,0.0045,0.00012,0.0012,3.9e-05,0.0012,0.0016,0.0012,0.0012,1,1,0.01 -24590000,0.71,0.0055,0.0012,0.71,-0.16,-0.057,-0.55,0,0,-4.9e+02,-0.0013,-0.0058,0.00013,0.012,0.0012,-0.13,0.21,2.3e-06,0.43,5.4e-05,0.0006,0.00037,0,0,-4.9e+02,7.4e-05,6.7e-05,0.036,0.012,0.015,0.0055,0.036,0.038,0.031,3.8e-07,5e-07,1.5e-06,0.0041,0.0044,0.00011,0.0012,3.9e-05,0.0012,0.0015,0.0012,0.0012,1,1,0.01 -24690000,0.71,0.0056,0.0021,0.71,-0.18,-0.07,-0.64,0,0,-4.9e+02,-0.0013,-0.0058,0.00013,0.012,0.001,-0.13,0.21,3.3e-06,0.43,9.8e-06,0.00064,0.00056,0,0,-4.9e+02,7.5e-05,6.7e-05,0.036,0.013,0.016,0.0055,0.039,0.042,0.031,3.8e-07,5e-07,1.5e-06,0.0041,0.0044,0.00011,0.0012,3.9e-05,0.0012,0.0015,0.0012,0.0012,1,1,0.01 -24790000,0.71,0.0053,0.00083,0.71,-0.2,-0.084,-0.72,0,0,-4.9e+02,-0.0013,-0.0058,0.00013,0.012,0.0011,-0.13,0.21,2.6e-06,0.43,4.2e-05,0.00061,0.00032,0,0,-4.9e+02,7.3e-05,6.6e-05,0.036,0.012,0.015,0.0055,0.036,0.038,0.031,3.7e-07,4.9e-07,1.5e-06,0.0041,0.0044,0.00011,0.0012,3.9e-05,0.0012,0.0015,0.0012,0.0012,1,1,0.01 -24890000,0.71,0.0071,0.0025,0.71,-0.22,-0.095,-0.74,0,0,-4.9e+02,-0.0013,-0.0058,0.00012,0.012,0.0011,-0.13,0.21,3.4e-06,0.43,-6.5e-05,0.00076,0.00034,0,0,-4.9e+02,7.4e-05,6.6e-05,0.036,0.013,0.016,0.0055,0.039,0.042,0.031,3.7e-07,4.9e-07,1.5e-06,0.0041,0.0044,0.00011,0.0012,3.9e-05,0.0012,0.0015,0.0012,0.0012,1,1,0.01 -24990000,0.71,0.0089,0.0043,0.71,-0.24,-0.1,-0.8,0,0,-4.9e+02,-0.0013,-0.0058,0.00011,0.012,0.00076,-0.13,0.21,2.8e-06,0.43,-0.00015,0.00086,-4.5e-06,0,0,-4.9e+02,7.2e-05,6.5e-05,0.036,0.012,0.015,0.0055,0.036,0.038,0.031,3.7e-07,4.8e-07,1.5e-06,0.0041,0.0043,0.00011,0.0012,3.9e-05,0.0012,0.0015,0.0012,0.0012,1,1,0.01 -25090000,0.71,0.0092,0.0037,0.71,-0.27,-0.11,-0.85,0,0,-4.9e+02,-0.0013,-0.0058,0.00011,0.012,0.00085,-0.13,0.21,2.4e-06,0.43,-0.00016,0.00087,-4.1e-05,0,0,-4.9e+02,7.3e-05,6.5e-05,0.036,0.013,0.017,0.0055,0.039,0.042,0.031,3.7e-07,4.8e-07,1.5e-06,0.0041,0.0043,0.00011,0.0012,3.9e-05,0.0012,0.0015,0.0012,0.0012,1,1,0.01 -25190000,0.71,0.0087,0.0023,0.71,-0.3,-0.13,-0.9,0,0,-4.9e+02,-0.0013,-0.0058,0.00013,0.011,0.0012,-0.13,0.21,7.7e-06,0.43,9.3e-05,0.00084,9.5e-05,0,0,-4.9e+02,7.2e-05,6.4e-05,0.035,0.012,0.016,0.0054,0.036,0.038,0.031,3.6e-07,4.6e-07,1.5e-06,0.004,0.0043,0.00011,0.0012,3.9e-05,0.0012,0.0015,0.0012,0.0012,1,1,0.01 -25290000,0.71,0.011,0.0091,0.71,-0.33,-0.14,-0.95,0,0,-4.9e+02,-0.0013,-0.0058,0.00013,0.011,0.0012,-0.13,0.21,7.6e-06,0.43,0.00012,0.00079,0.0001,0,0,-4.9e+02,7.2e-05,6.5e-05,0.035,0.013,0.017,0.0054,0.039,0.042,0.031,3.6e-07,4.6e-07,1.4e-06,0.004,0.0043,0.00011,0.0012,3.9e-05,0.0012,0.0015,0.0012,0.0012,1,1,0.01 -25390000,0.71,0.012,0.016,0.71,-0.36,-0.16,-1,0,0,-4.9e+02,-0.0013,-0.0058,0.00013,0.011,0.0009,-0.13,0.21,1.1e-05,0.43,0.00052,0.00047,0.00014,0,0,-4.9e+02,7.1e-05,6.3e-05,0.035,0.012,0.016,0.0054,0.036,0.038,0.031,3.5e-07,4.5e-07,1.4e-06,0.004,0.0043,0.00011,0.0012,3.9e-05,0.0012,0.0015,0.0012,0.0012,1,1,0.01 -25490000,0.71,0.012,0.017,0.71,-0.41,-0.18,-1.1,0,0,-4.9e+02,-0.0013,-0.0058,0.00014,0.01,0.00078,-0.13,0.21,1e-05,0.43,0.00069,0.00015,0.00032,0,0,-4.9e+02,7.2e-05,6.4e-05,0.035,0.013,0.018,0.0054,0.039,0.042,0.031,3.5e-07,4.5e-07,1.4e-06,0.004,0.0043,0.00011,0.0012,3.9e-05,0.0012,0.0015,0.0012,0.0012,1,1,0.01 -25590000,0.71,0.012,0.015,0.71,-0.45,-0.21,-1.1,0,0,-4.9e+02,-0.0012,-0.0058,0.00015,0.0098,0.0012,-0.13,0.21,1.6e-05,0.43,0.00099,0.00015,0.00033,0,0,-4.9e+02,7.1e-05,6.3e-05,0.034,0.012,0.018,0.0054,0.036,0.038,0.031,3.5e-07,4.4e-07,1.4e-06,0.004,0.0042,0.00011,0.0012,3.9e-05,0.0012,0.0015,0.0012,0.0012,1,1,0.01 -25690000,0.71,0.015,0.022,0.71,-0.49,-0.23,-1.2,0,0,-4.9e+02,-0.0012,-0.0058,0.00016,0.0098,0.0011,-0.13,0.21,1.7e-05,0.43,0.00098,0.00017,0.00042,0,0,-4.9e+02,7.1e-05,6.3e-05,0.034,0.013,0.02,0.0054,0.039,0.042,0.031,3.5e-07,4.4e-07,1.4e-06,0.004,0.0042,0.00011,0.0012,3.9e-05,0.0012,0.0014,0.0012,0.0011,1,1,0.01 -25790000,0.71,0.018,0.028,0.71,-0.54,-0.26,-1.2,0,0,-4.9e+02,-0.0012,-0.0058,0.00016,0.0091,0.00045,-0.13,0.21,2e-05,0.43,0.0014,-7.6e-05,-3.4e-05,0,0,-4.9e+02,7e-05,6.2e-05,0.033,0.013,0.019,0.0054,0.036,0.038,0.031,3.4e-07,4.3e-07,1.4e-06,0.004,0.0042,0.0001,0.0011,3.9e-05,0.0011,0.0014,0.0011,0.0011,1,1,0.01 -25890000,0.71,0.018,0.028,0.71,-0.62,-0.29,-1.3,0,0,-4.9e+02,-0.0012,-0.0058,0.00017,0.0093,0.00038,-0.13,0.21,2.2e-05,0.43,0.0014,-7.7e-06,-0.0001,0,0,-4.9e+02,7.1e-05,6.3e-05,0.033,0.014,0.022,0.0054,0.039,0.042,0.031,3.4e-07,4.3e-07,1.4e-06,0.004,0.0042,0.0001,0.0011,3.9e-05,0.0011,0.0014,0.0011,0.0011,1,1,0.01 -25990000,0.7,0.017,0.025,0.71,-0.67,-0.32,-1.3,0,0,-4.9e+02,-0.0012,-0.0059,0.00019,0.0084,0.00072,-0.13,0.21,2.9e-05,0.43,0.0023,-0.00057,-0.00056,0,0,-4.9e+02,7e-05,6.2e-05,0.032,0.013,0.021,0.0054,0.036,0.039,0.031,3.4e-07,4.3e-07,1.4e-06,0.004,0.0042,0.0001,0.0011,3.9e-05,0.0011,0.0013,0.0011,0.0011,1,1,0.01 -26090000,0.7,0.022,0.035,0.71,-0.74,-0.35,-1.3,0,0,-4.9e+02,-0.0012,-0.0059,0.00018,0.0085,0.00089,-0.13,0.21,2.5e-05,0.43,0.0024,-0.00049,-0.0012,0,0,-4.9e+02,7.1e-05,6.2e-05,0.032,0.014,0.024,0.0054,0.039,0.043,0.031,3.4e-07,4.3e-07,1.4e-06,0.004,0.0042,0.0001,0.0011,3.9e-05,0.0011,0.0013,0.0011,0.0011,1,1,0.01 -26190000,0.7,0.024,0.045,0.71,-0.79,-0.39,-1.3,0,0,-4.9e+02,-0.0012,-0.0058,0.00018,0.0074,-0.00025,-0.13,0.21,3.9e-05,0.43,0.0023,0.0004,-0.0014,0,0,-4.9e+02,7.1e-05,6.1e-05,0.03,0.014,0.024,0.0053,0.036,0.039,0.031,3.3e-07,4.2e-07,1.4e-06,0.004,0.0042,0.0001,0.001,3.9e-05,0.001,0.0013,0.001,0.001,1,1,0.01 -26290000,0.7,0.025,0.047,0.71,-0.89,-0.43,-1.3,0,0,-4.9e+02,-0.0012,-0.0058,0.00018,0.0074,-0.00023,-0.13,0.21,3.8e-05,0.43,0.0023,0.00028,-0.0014,0,0,-4.9e+02,7.1e-05,6.1e-05,0.03,0.015,0.028,0.0054,0.039,0.043,0.031,3.3e-07,4.2e-07,1.4e-06,0.004,0.0042,0.0001,0.00099,3.9e-05,0.00099,0.0013,0.001,0.00099,1,1,0.01 -26390000,0.7,0.024,0.044,0.71,-0.96,-0.49,-1.3,0,0,-4.9e+02,-0.0011,-0.0059,0.00021,0.0065,0.00054,-0.13,0.21,4.5e-05,0.44,0.0036,-0.00019,-0.0024,0,0,-4.9e+02,7.1e-05,6.1e-05,0.028,0.014,0.027,0.0053,0.036,0.039,0.031,3.3e-07,4.1e-07,1.3e-06,0.004,0.0042,0.0001,0.00096,3.9e-05,0.00095,0.0012,0.00096,0.00095,1,1,0.01 -26490000,0.7,0.031,0.06,0.71,-1.1,-0.53,-1.3,0,0,-4.9e+02,-0.0011,-0.0059,0.0002,0.0065,0.00055,-0.13,0.21,3.8e-05,0.44,0.004,-0.00099,-0.0026,0,0,-4.9e+02,7.2e-05,6.1e-05,0.028,0.016,0.031,0.0053,0.039,0.044,0.031,3.3e-07,4.2e-07,1.3e-06,0.0039,0.0042,0.0001,0.00092,3.9e-05,0.00092,0.0012,0.00092,0.00091,1,1,0.01 -26590000,0.7,0.037,0.076,0.71,-1.2,-0.59,-1.3,0,0,-4.9e+02,-0.0011,-0.0059,0.00019,0.0049,-0.00046,-0.13,0.21,3.7e-05,0.44,0.0041,-0.00065,-0.0048,0,0,-4.9e+02,7.2e-05,6e-05,0.025,0.015,0.031,0.0053,0.036,0.04,0.031,3.3e-07,4.1e-07,1.3e-06,0.0039,0.0041,9.9e-05,0.00087,3.9e-05,0.00086,0.001,0.00087,0.00086,1,1,0.01 -26690000,0.7,0.039,0.079,0.71,-1.3,-0.65,-1.3,0,0,-4.9e+02,-0.0011,-0.0059,0.00019,0.0049,-0.00055,-0.13,0.21,4.4e-05,0.44,0.004,-0.00014,-0.004,0,0,-4.9e+02,7.2e-05,6.1e-05,0.025,0.017,0.037,0.0053,0.04,0.045,0.031,3.3e-07,4.1e-07,1.3e-06,0.0039,0.0041,9.9e-05,0.00081,3.9e-05,0.0008,0.001,0.00081,0.00079,1,1,0.01 -26790000,0.7,0.036,0.073,0.71,-1.4,-0.74,-1.3,0,0,-4.9e+02,-0.0011,-0.0059,0.00022,0.0033,0.00031,-0.13,0.21,8.2e-05,0.44,0.0055,0.00061,-0.0037,0,0,-4.9e+02,7.3e-05,6e-05,0.022,0.016,0.036,0.0053,0.036,0.041,0.031,3.2e-07,4.1e-07,1.3e-06,0.0039,0.0041,9.8e-05,0.00076,3.9e-05,0.00075,0.00092,0.00076,0.00074,1,1,0.01 -26890000,0.7,0.045,0.095,0.71,-1.6,-0.8,-1.3,0,0,-4.9e+02,-0.0011,-0.0059,0.00023,0.0034,0.0003,-0.13,0.21,8.8e-05,0.44,0.0053,0.0012,-0.0041,0,0,-4.9e+02,7.3e-05,6e-05,0.022,0.018,0.043,0.0053,0.04,0.046,0.031,3.2e-07,4.1e-07,1.3e-06,0.0039,0.0041,9.8e-05,0.00072,3.9e-05,0.0007,0.00091,0.00072,0.0007,1,1,0.01 -26990000,0.7,0.051,0.12,0.71,-1.7,-0.89,-1.3,0,0,-4.9e+02,-0.00098,-0.0059,0.00022,0.0014,-0.0016,-0.13,0.21,0.00013,0.44,0.006,0.0034,-0.0056,0,0,-4.9e+02,7.4e-05,6e-05,0.019,0.017,0.042,0.0053,0.037,0.041,0.031,3.2e-07,4.1e-07,1.3e-06,0.0039,0.0041,9.7e-05,0.00065,3.9e-05,0.00063,0.00079,0.00065,0.00062,1,1,0.01 -27090000,0.7,0.052,0.12,0.71,-1.9,-0.98,-1.2,0,0,-4.9e+02,-0.00098,-0.0059,0.00022,0.0013,-0.0016,-0.13,0.21,0.00013,0.44,0.006,0.0035,-0.0052,0,0,-4.9e+02,7.4e-05,6e-05,0.019,0.02,0.052,0.0053,0.04,0.048,0.031,3.2e-07,4.1e-07,1.3e-06,0.0039,0.0041,9.6e-05,0.00059,3.9e-05,0.00056,0.00078,0.0006,0.00056,1,1,0.01 -27190000,0.7,0.05,0.11,0.7,-2.1,-1,-1.2,0,0,-4.9e+02,-0.00097,-0.0059,0.00022,0.00024,-0.0018,-0.13,0.21,4.5e-05,0.44,0.002,0.0027,-0.0049,0,0,-4.9e+02,7.5e-05,6e-05,0.016,0.02,0.051,0.0053,0.043,0.05,0.031,3.2e-07,4.1e-07,1.3e-06,0.0039,0.0041,9.6e-05,0.00055,3.9e-05,0.00051,0.00066,0.00055,0.00051,1,1,0.01 -27290000,0.71,0.044,0.095,0.7,-2.3,-1.1,-1.2,0,0,-4.9e+02,-0.00097,-0.0059,0.00023,0.00028,-0.0018,-0.13,0.21,5.3e-05,0.44,0.0019,0.0034,-0.0049,0,0,-4.9e+02,7.6e-05,6.1e-05,0.016,0.022,0.059,0.0053,0.047,0.057,0.031,3.2e-07,4.1e-07,1.3e-06,0.0039,0.0041,9.5e-05,0.00052,3.9e-05,0.00048,0.00066,0.00052,0.00048,1,1,0.01 -27390000,0.71,0.038,0.079,0.7,-2.4,-1.1,-1.2,0,0,-4.9e+02,-0.00092,-0.0059,0.00021,-0.00096,-0.0035,-0.13,0.21,9.8e-06,0.44,-0.00058,0.0031,-0.0063,0,0,-4.9e+02,7.6e-05,6e-05,0.013,0.021,0.052,0.0053,0.049,0.059,0.031,3.2e-07,4e-07,1.3e-06,0.0039,0.0041,9.5e-05,0.00049,3.9e-05,0.00046,0.00055,0.00049,0.00046,1,1,0.01 -27490000,0.71,0.032,0.064,0.7,-2.5,-1.1,-1.2,0,0,-4.9e+02,-0.00092,-0.0059,0.00022,-0.0009,-0.0034,-0.13,0.21,1.5e-05,0.44,-0.00066,0.0032,-0.0067,0,0,-4.9e+02,7.7e-05,6.1e-05,0.013,0.023,0.056,0.0053,0.054,0.067,0.03,3.2e-07,4e-07,1.3e-06,0.0039,0.0041,9.4e-05,0.00048,3.9e-05,0.00045,0.00055,0.00048,0.00044,1,1,0.01 -27590000,0.72,0.028,0.051,0.69,-2.6,-1.1,-1.2,0,0,-4.9e+02,-0.00092,-0.0059,0.00023,-0.0016,-0.0028,-0.13,0.21,-4.1e-05,0.44,-0.0033,0.0027,-0.0065,0,0,-4.9e+02,7.7e-05,6.1e-05,0.011,0.021,0.047,0.0053,0.056,0.068,0.031,3.2e-07,4e-07,1.3e-06,0.0039,0.0041,9.4e-05,0.00046,3.9e-05,0.00044,0.00047,0.00046,0.00044,1,1,0.01 -27690000,0.72,0.027,0.05,0.69,-2.6,-1.2,-1.2,0,0,-4.9e+02,-0.00092,-0.0059,0.00023,-0.0016,-0.0027,-0.13,0.21,-3.6e-05,0.44,-0.0034,0.0026,-0.0068,0,0,-4.9e+02,7.8e-05,6.1e-05,0.011,0.022,0.049,0.0053,0.062,0.077,0.031,3.2e-07,4e-07,1.3e-06,0.0039,0.0041,9.3e-05,0.00046,3.9e-05,0.00044,0.00047,0.00046,0.00043,1,1,0.01 -27790000,0.72,0.027,0.051,0.69,-2.6,-1.2,-1.2,0,0,-4.9e+02,-0.00091,-0.0059,0.00022,-0.0021,-0.0025,-0.13,0.21,-6.4e-05,0.44,-0.0052,0.002,-0.0072,0,0,-4.9e+02,7.9e-05,6.1e-05,0.0097,0.02,0.042,0.0053,0.064,0.077,0.03,3.2e-07,4e-07,1.3e-06,0.0039,0.0041,9.2e-05,0.00045,3.9e-05,0.00043,0.00041,0.00045,0.00043,1,1,0.01 -27890000,0.72,0.027,0.049,0.69,-2.7,-1.2,-1.2,0,0,-4.9e+02,-0.00091,-0.0059,0.00023,-0.0022,-0.0025,-0.13,0.21,-6.6e-05,0.44,-0.0051,0.002,-0.0072,0,0,-4.9e+02,7.9e-05,6.1e-05,0.0097,0.021,0.043,0.0053,0.07,0.087,0.031,3.2e-07,4e-07,1.3e-06,0.0039,0.0041,9.2e-05,0.00044,3.9e-05,0.00043,0.00041,0.00044,0.00042,1,1,0.01 -27990000,0.72,0.026,0.046,0.69,-2.7,-1.2,-1.2,0,0,-4.9e+02,-0.00093,-0.0059,0.00024,-0.002,-0.0015,-0.13,0.21,-8.2e-05,0.44,-0.0065,0.0014,-0.0071,0,0,-4.9e+02,8e-05,6.1e-05,0.0086,0.02,0.038,0.0053,0.072,0.087,0.03,3.1e-07,4e-07,1.3e-06,0.0039,0.0041,9.1e-05,0.00043,3.9e-05,0.00042,0.00037,0.00043,0.00042,1,1,0.01 -28090000,0.72,0.032,0.059,0.69,-2.8,-1.2,-1.2,0,0,-4.9e+02,-0.00093,-0.0059,0.00023,-0.0021,-0.0013,-0.13,0.21,-8.1e-05,0.44,-0.0066,0.0013,-0.0072,0,0,-4.9e+02,8.1e-05,6.1e-05,0.0086,0.021,0.039,0.0053,0.078,0.097,0.03,3.1e-07,4e-07,1.3e-06,0.0039,0.0041,9.1e-05,0.00042,3.9e-05,0.00042,0.00036,0.00042,0.00041,1,1,0.01 -28190000,0.72,0.037,0.072,0.69,-2.8,-1.2,-0.93,0,0,-4.9e+02,-0.00094,-0.0059,0.00024,-0.0022,-0.00082,-0.13,0.21,-9.9e-05,0.44,-0.0074,0.00088,-0.0071,0,0,-4.9e+02,8.1e-05,6.1e-05,0.0079,0.02,0.034,0.0053,0.08,0.097,0.031,3.1e-07,4e-07,1.3e-06,0.0039,0.0041,9e-05,0.00041,3.9e-05,0.00041,0.00033,0.00041,0.00041,1,1,0.01 -28290000,0.73,0.029,0.055,0.69,-2.8,-1.2,-0.069,0,0,-4.9e+02,-0.00093,-0.0059,0.00024,-0.0023,-0.0007,-0.13,0.21,-0.0001,0.44,-0.0075,0.0013,-0.0069,0,0,-4.9e+02,8.2e-05,6.1e-05,0.0079,0.02,0.035,0.0053,0.087,0.11,0.031,3.1e-07,4e-07,1.3e-06,0.0039,0.0041,9e-05,0.0004,3.9e-05,0.0004,0.00033,0.0004,0.0004,1,1,0.01 -28390000,0.73,0.012,0.024,0.69,-2.8,-1.2,0.79,0,0,-4.9e+02,-0.00094,-0.0059,0.00023,-0.0023,-0.0004,-0.13,0.21,-8.9e-05,0.44,-0.0076,0.0013,-0.007,0,0,-4.9e+02,8.3e-05,6.2e-05,0.0079,0.02,0.035,0.0054,0.094,0.12,0.03,3.1e-07,4e-07,1.3e-06,0.0039,0.0041,9e-05,0.0004,3.9e-05,0.0004,0.00033,0.0004,0.0004,1,1,0.01 -28490000,0.73,0.0028,0.0059,0.69,-2.8,-1.2,1.1,0,0,-4.9e+02,-0.00094,-0.0059,0.00023,-0.0019,-0.00011,-0.13,0.21,-7.1e-05,0.44,-0.0077,0.0014,-0.0069,0,0,-4.9e+02,8.4e-05,6.2e-05,0.0079,0.021,0.035,0.0054,0.1,0.13,0.031,3.1e-07,4e-07,1.3e-06,0.0039,0.0041,8.9e-05,0.0004,3.9e-05,0.0004,0.00033,0.0004,0.0004,1,1,0.01 -28590000,0.73,0.00088,0.0024,0.69,-2.7,-1.2,0.98,0,0,-4.9e+02,-0.00094,-0.0059,0.00024,-0.002,-4.1e-05,-0.13,0.21,-7.3e-05,0.44,-0.0076,0.0015,-0.0069,0,0,-4.9e+02,8.4e-05,6.2e-05,0.0079,0.021,0.033,0.0054,0.11,0.14,0.031,3.1e-07,4e-07,1.3e-06,0.0039,0.0041,8.9e-05,0.0004,3.9e-05,0.0004,0.00033,0.0004,0.0004,1,1,0.01 -28690000,0.73,0.00018,0.0015,0.69,-2.6,-1.2,0.99,0,0,-4.9e+02,-0.00095,-0.0059,0.00024,-0.0017,0.00033,-0.13,0.21,-5.6e-05,0.44,-0.0077,0.0014,-0.0068,0,0,-4.9e+02,8.5e-05,6.2e-05,0.0079,0.022,0.033,0.0054,0.12,0.15,0.031,3.1e-07,4e-07,1.3e-06,0.0039,0.0041,8.8e-05,0.0004,3.9e-05,0.0004,0.00033,0.00039,0.0004,1,1,0.01 -28790000,0.73,-2e-05,0.0014,0.69,-2.6,-1.2,0.99,0,0,-4.9e+02,-0.00098,-0.0059,0.00024,-0.0012,0.00059,-0.12,0.21,-9.7e-05,0.44,-0.0092,0.0006,-0.006,0,0,-4.9e+02,8.6e-05,6.2e-05,0.0075,0.021,0.028,0.0054,0.12,0.15,0.031,3.1e-07,4e-07,1.3e-06,0.0039,0.0041,8.8e-05,0.00039,3.9e-05,0.0004,0.00031,0.00039,0.00039,1,1,0.01 -28890000,0.73,-1.1e-05,0.0016,0.69,-2.5,-1.2,0.98,0,0,-4.9e+02,-0.00099,-0.0059,0.00025,-0.00095,0.00094,-0.12,0.21,-8e-05,0.44,-0.0093,0.00056,-0.0059,0,0,-4.9e+02,8.6e-05,6.2e-05,0.0075,0.021,0.028,0.0054,0.13,0.16,0.031,3.1e-07,4e-07,1.3e-06,0.0039,0.0041,8.7e-05,0.00039,3.9e-05,0.0004,0.00031,0.00039,0.00039,1,1,0.01 -28990000,0.73,0.00034,0.0023,0.68,-2.5,-1.1,0.98,0,0,-4.9e+02,-0.001,-0.0059,0.00025,0.00033,0.0014,-0.12,0.21,-0.00011,0.44,-0.011,-0.00037,-0.0047,0,0,-4.9e+02,8.7e-05,6.2e-05,0.0073,0.02,0.025,0.0054,0.13,0.16,0.031,3e-07,4e-07,1.3e-06,0.0038,0.004,8.7e-05,0.00039,3.9e-05,0.0004,0.0003,0.00039,0.00039,1,1,0.01 -29090000,0.73,0.00051,0.0027,0.68,-2.4,-1.1,0.97,0,0,-4.9e+02,-0.001,-0.0059,0.00025,0.0005,0.0018,-0.12,0.21,-9.7e-05,0.44,-0.011,-0.00042,-0.0046,0,0,-4.9e+02,8.7e-05,6.2e-05,0.0073,0.021,0.025,0.0054,0.14,0.17,0.031,3e-07,4e-07,1.2e-06,0.0038,0.004,8.6e-05,0.00039,3.9e-05,0.00039,0.0003,0.00038,0.00039,1,1,0.01 -29190000,0.73,0.00075,0.0031,0.68,-2.4,-1.1,0.97,0,0,-4.9e+02,-0.0011,-0.0059,0.00026,0.00087,0.0019,-0.12,0.21,-0.00013,0.44,-0.011,-0.00065,-0.0042,0,0,-4.9e+02,8.8e-05,6.1e-05,0.0072,0.02,0.023,0.0054,0.14,0.17,0.031,3e-07,3.9e-07,1.2e-06,0.0038,0.004,8.6e-05,0.00038,3.9e-05,0.00039,0.0003,0.00038,0.00039,1,1,0.01 -29290000,0.73,0.0011,0.0039,0.68,-2.3,-1.1,0.99,0,0,-4.9e+02,-0.0011,-0.0059,0.00026,0.00088,0.0024,-0.12,0.21,-0.00012,0.44,-0.011,-0.00073,-0.0041,0,0,-4.9e+02,8.8e-05,6.2e-05,0.0072,0.021,0.024,0.0054,0.14,0.18,0.031,3e-07,3.9e-07,1.2e-06,0.0038,0.004,8.5e-05,0.00038,3.9e-05,0.00039,0.0003,0.00038,0.00039,1,1,0.01 -29390000,0.73,0.0017,0.0054,0.68,-2.3,-1.1,1,0,0,-4.9e+02,-0.0011,-0.0059,0.00026,0.0016,0.003,-0.12,0.21,-0.00016,0.44,-0.012,-0.0014,-0.0033,0,0,-4.9e+02,8.8e-05,6.1e-05,0.0071,0.02,0.023,0.0054,0.15,0.18,0.03,3e-07,3.9e-07,1.2e-06,0.0038,0.004,8.5e-05,0.00038,3.9e-05,0.00039,0.00029,0.00038,0.00039,1,1,0.01 -29490000,0.73,0.0022,0.0065,0.68,-2.3,-1.1,1,0,0,-4.9e+02,-0.0011,-0.0059,0.00027,0.0016,0.0033,-0.12,0.21,-0.00015,0.44,-0.012,-0.0014,-0.0033,0,0,-4.9e+02,8.9e-05,6.1e-05,0.0071,0.021,0.024,0.0054,0.15,0.19,0.031,3e-07,3.9e-07,1.2e-06,0.0038,0.004,8.5e-05,0.00038,3.9e-05,0.00039,0.00029,0.00038,0.00039,1,1,0.01 -29590000,0.73,0.0027,0.0075,0.68,-2.2,-1.1,0.99,0,0,-4.9e+02,-0.0011,-0.0059,0.00026,0.0022,0.0033,-0.12,0.21,-0.00016,0.44,-0.012,-0.0016,-0.0029,0,0,-4.9e+02,8.9e-05,6.1e-05,0.0071,0.02,0.023,0.0054,0.15,0.19,0.031,2.9e-07,3.8e-07,1.2e-06,0.0038,0.004,8.4e-05,0.00038,3.9e-05,0.00039,0.00029,0.00037,0.00038,1,1,0.01 -29690000,0.73,0.003,0.0081,0.68,-2.2,-1.1,0.99,0,0,-4.9e+02,-0.0011,-0.0059,0.00026,0.0021,0.0037,-0.12,0.21,-0.00016,0.44,-0.012,-0.0017,-0.0029,0,0,-4.9e+02,8.9e-05,6.1e-05,0.0071,0.021,0.024,0.0054,0.16,0.2,0.031,2.9e-07,3.8e-07,1.2e-06,0.0038,0.004,8.4e-05,0.00038,3.9e-05,0.00039,0.00029,0.00037,0.00038,1,1,0.01 -29790000,0.73,0.0034,0.0086,0.68,-2.2,-1.1,0.98,0,0,-4.9e+02,-0.0012,-0.0059,0.00025,0.0031,0.0036,-0.12,0.21,-0.00018,0.44,-0.013,-0.0019,-0.0023,0,0,-4.9e+02,8.9e-05,6.1e-05,0.0071,0.02,0.023,0.0054,0.16,0.2,0.031,2.9e-07,3.8e-07,1.2e-06,0.0038,0.004,8.3e-05,0.00037,3.9e-05,0.00039,0.00029,0.00037,0.00038,1,1,0.01 -29890000,0.73,0.0034,0.0087,0.68,-2.1,-1.1,0.96,0,0,-4.9e+02,-0.0012,-0.0059,0.00025,0.0028,0.0042,-0.12,0.21,-0.00018,0.44,-0.013,-0.002,-0.0023,0,0,-4.9e+02,8.9e-05,6.1e-05,0.0071,0.021,0.025,0.0054,0.17,0.21,0.031,2.9e-07,3.8e-07,1.2e-06,0.0038,0.004,8.3e-05,0.00037,3.9e-05,0.00039,0.00029,0.00037,0.00038,1,1,0.01 -29990000,0.73,0.0036,0.0088,0.68,-2.1,-1.1,0.95,0,0,-4.9e+02,-0.0012,-0.0059,0.00023,0.0033,0.0039,-0.12,0.21,-0.0002,0.44,-0.013,-0.0022,-0.002,0,0,-4.9e+02,8.8e-05,6e-05,0.0071,0.02,0.024,0.0053,0.17,0.21,0.03,2.9e-07,3.7e-07,1.2e-06,0.0038,0.0039,8.2e-05,0.00037,3.9e-05,0.00039,0.00029,0.00037,0.00038,1,1,0.01 -30090000,0.73,0.0035,0.0087,0.68,-2.1,-1.1,0.94,0,0,-4.9e+02,-0.0012,-0.0059,0.00023,0.0029,0.0043,-0.12,0.21,-0.00021,0.44,-0.013,-0.0023,-0.002,0,0,-4.9e+02,8.9e-05,6.1e-05,0.0071,0.021,0.025,0.0054,0.18,0.22,0.03,2.9e-07,3.7e-07,1.2e-06,0.0038,0.0039,8.2e-05,0.00037,3.9e-05,0.00039,0.00028,0.00037,0.00038,1,1,0.01 -30190000,0.73,0.0036,0.0084,0.68,-2.1,-1.1,0.92,0,0,-4.9e+02,-0.0012,-0.0059,0.00021,0.0037,0.0038,-0.12,0.21,-0.00022,0.44,-0.013,-0.0024,-0.0016,0,0,-4.9e+02,8.8e-05,6e-05,0.007,0.02,0.025,0.0053,0.18,0.22,0.031,2.8e-07,3.6e-07,1.2e-06,0.0038,0.0039,8.1e-05,0.00037,3.9e-05,0.00038,0.00028,0.00037,0.00038,1,1,0.01 -30290000,0.73,0.0034,0.0082,0.68,-2,-1.1,0.91,0,0,-4.9e+02,-0.0012,-0.0059,0.00021,0.0035,0.004,-0.12,0.21,-0.00023,0.44,-0.013,-0.0024,-0.0017,0,0,-4.9e+02,8.9e-05,6.1e-05,0.007,0.021,0.026,0.0054,0.19,0.23,0.03,2.8e-07,3.6e-07,1.2e-06,0.0038,0.0039,8.1e-05,0.00037,3.9e-05,0.00038,0.00028,0.00036,0.00038,1,1,0.01 -30390000,0.73,0.0035,0.0079,0.68,-2,-1.1,0.9,0,0,-4.9e+02,-0.0012,-0.0059,0.00019,0.0043,0.004,-0.12,0.21,-0.00022,0.43,-0.013,-0.0025,-0.0014,0,0,-4.9e+02,8.7e-05,6e-05,0.007,0.021,0.025,0.0053,0.19,0.23,0.03,2.8e-07,3.6e-07,1.2e-06,0.0038,0.0039,8.1e-05,0.00037,3.9e-05,0.00038,0.00028,0.00036,0.00038,1,1,0.01 -30490000,0.73,0.0034,0.0077,0.68,-2,-1.1,0.88,0,0,-4.9e+02,-0.0012,-0.0059,0.0002,0.0042,0.0042,-0.12,0.21,-0.00022,0.43,-0.013,-0.0025,-0.0014,0,0,-4.9e+02,8.8e-05,6e-05,0.007,0.022,0.027,0.0054,0.2,0.24,0.031,2.8e-07,3.6e-07,1.2e-06,0.0038,0.0039,8e-05,0.00036,3.9e-05,0.00038,0.00028,0.00036,0.00038,1,1,0.01 -30590000,0.73,0.0034,0.0072,0.68,-1.9,-1,0.85,0,0,-4.9e+02,-0.0012,-0.0059,0.00018,0.005,0.0039,-0.12,0.21,-0.00024,0.43,-0.012,-0.0025,-0.001,0,0,-4.9e+02,8.6e-05,6e-05,0.0069,0.021,0.026,0.0053,0.2,0.24,0.03,2.8e-07,3.5e-07,1.1e-06,0.0038,0.0038,8e-05,0.00036,3.9e-05,0.00038,0.00028,0.00036,0.00038,1,1,0.01 -30690000,0.73,0.0031,0.0069,0.68,-1.9,-1,0.84,0,0,-4.9e+02,-0.0012,-0.0059,0.00018,0.0047,0.0043,-0.12,0.21,-0.00025,0.43,-0.012,-0.0025,-0.001,0,0,-4.9e+02,8.6e-05,6e-05,0.0069,0.022,0.028,0.0053,0.21,0.25,0.03,2.8e-07,3.5e-07,1.1e-06,0.0037,0.0038,7.9e-05,0.00036,3.9e-05,0.00038,0.00028,0.00036,0.00038,1,1,0.01 -30790000,0.73,0.0031,0.0064,0.68,-1.9,-1,0.83,0,0,-4.9e+02,-0.0012,-0.0059,0.00015,0.0054,0.0037,-0.12,0.21,-0.00025,0.43,-0.012,-0.0026,-0.00079,0,0,-4.9e+02,8.4e-05,6e-05,0.0068,0.021,0.027,0.0053,0.21,0.25,0.03,2.8e-07,3.4e-07,1.1e-06,0.0037,0.0038,7.9e-05,0.00036,3.9e-05,0.00038,0.00028,0.00036,0.00038,1,1,0.01 -30890000,0.73,0.003,0.006,0.68,-1.9,-1,0.82,0,0,-4.9e+02,-0.0012,-0.0059,0.00015,0.0054,0.0041,-0.12,0.21,-0.00024,0.43,-0.012,-0.0026,-0.00077,0,0,-4.9e+02,8.5e-05,6e-05,0.0068,0.022,0.029,0.0053,0.22,0.26,0.03,2.8e-07,3.4e-07,1.1e-06,0.0037,0.0038,7.9e-05,0.00036,3.9e-05,0.00038,0.00027,0.00036,0.00038,1,1,0.01 -30990000,0.73,0.003,0.0053,0.68,-1.8,-1,0.81,0,0,-4.9e+02,-0.0013,-0.0058,0.00012,0.0063,0.0037,-0.12,0.21,-0.00026,0.43,-0.012,-0.0027,-0.00042,0,0,-4.9e+02,8.3e-05,5.9e-05,0.0067,0.021,0.028,0.0053,0.22,0.26,0.03,2.7e-07,3.3e-07,1.1e-06,0.0037,0.0038,7.8e-05,0.00036,3.9e-05,0.00038,0.00027,0.00036,0.00038,1,1,0.01 -31090000,0.73,0.0027,0.0048,0.68,-1.8,-1,0.8,0,0,-4.9e+02,-0.0013,-0.0059,0.00012,0.006,0.0042,-0.12,0.21,-0.00026,0.43,-0.012,-0.0027,-0.00043,0,0,-4.9e+02,8.3e-05,6e-05,0.0067,0.022,0.03,0.0053,0.23,0.27,0.031,2.7e-07,3.3e-07,1.1e-06,0.0037,0.0038,7.8e-05,0.00036,3.9e-05,0.00038,0.00027,0.00036,0.00037,1,1,0.01 -31190000,0.73,0.0026,0.0044,0.68,-1.8,-1,0.79,0,0,-4.9e+02,-0.0013,-0.0058,0.0001,0.0063,0.0042,-0.12,0.21,-0.00028,0.43,-0.011,-0.0028,-0.00025,0,0,-4.9e+02,8.1e-05,5.9e-05,0.0066,0.021,0.028,0.0053,0.23,0.27,0.03,2.7e-07,3.2e-07,1.1e-06,0.0037,0.0038,7.7e-05,0.00036,3.9e-05,0.00038,0.00027,0.00035,0.00037,1,1,0.01 -31290000,0.73,0.0023,0.0038,0.68,-1.8,-1,0.8,0,0,-4.9e+02,-0.0013,-0.0058,0.00011,0.006,0.0046,-0.12,0.21,-0.00028,0.43,-0.011,-0.0028,-0.00028,0,0,-4.9e+02,8.2e-05,6e-05,0.0066,0.022,0.03,0.0053,0.24,0.28,0.03,2.7e-07,3.2e-07,1.1e-06,0.0037,0.0038,7.7e-05,0.00036,3.9e-05,0.00038,0.00027,0.00035,0.00037,1,1,0.01 -31390000,0.73,0.0022,0.0031,0.68,-1.7,-0.99,0.79,0,0,-4.9e+02,-0.0013,-0.0058,8.4e-05,0.0064,0.0045,-0.12,0.21,-0.00031,0.43,-0.011,-0.0028,-2.4e-05,0,0,-4.9e+02,7.9e-05,5.9e-05,0.0065,0.021,0.029,0.0053,0.24,0.28,0.03,2.7e-07,3.1e-07,1e-06,0.0037,0.0037,7.7e-05,0.00036,3.9e-05,0.00038,0.00026,0.00035,0.00037,1,1,0.01 -31490000,0.73,0.002,0.0025,0.68,-1.7,-0.99,0.79,0,0,-4.9e+02,-0.0013,-0.0058,8e-05,0.0063,0.0051,-0.12,0.21,-0.00031,0.43,-0.011,-0.0029,1.2e-05,0,0,-4.9e+02,8e-05,5.9e-05,0.0065,0.022,0.031,0.0053,0.25,0.29,0.03,2.7e-07,3.1e-07,1e-06,0.0037,0.0037,7.6e-05,0.00036,3.9e-05,0.00038,0.00026,0.00035,0.00037,1,1,0.01 -31590000,0.73,0.002,0.002,0.68,-1.7,-0.97,0.79,0,0,-4.9e+02,-0.0013,-0.0058,5.4e-05,0.0072,0.0049,-0.12,0.21,-0.0003,0.43,-0.01,-0.0029,0.00025,0,0,-4.9e+02,7.8e-05,5.9e-05,0.0063,0.021,0.029,0.0053,0.25,0.29,0.03,2.6e-07,3.1e-07,1e-06,0.0037,0.0037,7.6e-05,0.00036,3.9e-05,0.00038,0.00026,0.00035,0.00037,1,1,0.01 -31690000,0.73,0.0017,0.0013,0.68,-1.6,-0.97,0.79,0,0,-4.9e+02,-0.0013,-0.0058,5.6e-05,0.0068,0.0053,-0.12,0.21,-0.0003,0.43,-0.01,-0.0029,0.00022,0,0,-4.9e+02,7.8e-05,5.9e-05,0.0063,0.022,0.031,0.0053,0.26,0.3,0.03,2.6e-07,3.1e-07,1e-06,0.0037,0.0037,7.6e-05,0.00036,3.9e-05,0.00038,0.00026,0.00035,0.00037,1,1,0.01 -31790000,0.73,0.0016,0.00054,0.69,-1.6,-0.95,0.79,0,0,-4.9e+02,-0.0013,-0.0058,3.1e-05,0.0078,0.0052,-0.12,0.21,-0.00031,0.43,-0.0099,-0.003,0.00056,0,0,-4.9e+02,7.6e-05,5.9e-05,0.0062,0.021,0.029,0.0052,0.26,0.3,0.03,2.6e-07,3e-07,1e-06,0.0037,0.0037,7.5e-05,0.00036,3.9e-05,0.00037,0.00025,0.00035,0.00037,1,1,0.01 -31890000,0.73,0.0013,-0.00019,0.69,-1.6,-0.95,0.79,0,0,-4.9e+02,-0.0013,-0.0058,3.2e-05,0.0077,0.0058,-0.12,0.21,-0.0003,0.43,-0.0099,-0.003,0.00059,0,0,-4.9e+02,7.6e-05,5.9e-05,0.0062,0.022,0.031,0.0053,0.27,0.31,0.03,2.6e-07,3e-07,1e-06,0.0037,0.0037,7.5e-05,0.00036,3.9e-05,0.00037,0.00025,0.00035,0.00037,1,1,0.01 -31990000,0.73,0.0012,-0.00079,0.69,-1.6,-0.93,0.78,0,0,-4.9e+02,-0.0013,-0.0058,9e-08,0.0082,0.0057,-0.12,0.2,-0.0003,0.43,-0.0094,-0.003,0.00076,0,0,-4.9e+02,7.4e-05,5.8e-05,0.006,0.021,0.03,0.0052,0.27,0.31,0.03,2.6e-07,2.9e-07,9.8e-07,0.0037,0.0037,7.5e-05,0.00035,3.9e-05,0.00037,0.00025,0.00035,0.00037,1,1,0.01 -32090000,0.73,0.00086,-0.0015,0.69,-1.5,-0.93,0.79,0,0,-4.9e+02,-0.0013,-0.0058,-5.5e-07,0.008,0.0063,-0.12,0.21,-0.0003,0.43,-0.0094,-0.003,0.00077,0,0,-4.9e+02,7.5e-05,5.9e-05,0.006,0.022,0.032,0.0053,0.28,0.32,0.03,2.6e-07,2.9e-07,9.8e-07,0.0036,0.0037,7.4e-05,0.00035,3.9e-05,0.00037,0.00025,0.00035,0.00037,1,1,0.01 -32190000,0.73,0.00066,-0.0025,0.69,-1.5,-0.91,0.79,0,0,-4.9e+02,-0.0014,-0.0058,-3.5e-05,0.0084,0.0065,-0.12,0.2,-0.00031,0.43,-0.009,-0.0031,0.001,0,0,-4.9e+02,7.3e-05,5.8e-05,0.0059,0.021,0.03,0.0052,0.28,0.32,0.03,2.6e-07,2.9e-07,9.6e-07,0.0036,0.0036,7.4e-05,0.00035,3.9e-05,0.00037,0.00025,0.00035,0.00037,1,1,0.01 -32290000,0.73,0.00038,-0.0032,0.69,-1.5,-0.91,0.79,0,0,-4.9e+02,-0.0014,-0.0058,-3.4e-05,0.0082,0.0071,-0.12,0.2,-0.00031,0.43,-0.009,-0.0031,0.001,0,0,-4.9e+02,7.3e-05,5.8e-05,0.0059,0.022,0.032,0.0052,0.29,0.33,0.03,2.6e-07,2.9e-07,9.5e-07,0.0036,0.0036,7.4e-05,0.00035,3.8e-05,0.00037,0.00025,0.00035,0.00037,1,1,0.01 -32390000,0.73,0.00029,-0.004,0.69,-1.5,-0.89,0.79,0,0,-4.9e+02,-0.0014,-0.0058,-5.2e-05,0.0087,0.0071,-0.12,0.2,-0.0003,0.43,-0.0085,-0.0031,0.0012,0,0,-4.9e+02,7.1e-05,5.8e-05,0.0057,0.021,0.03,0.0052,0.29,0.33,0.03,2.5e-07,2.8e-07,9.4e-07,0.0036,0.0036,7.3e-05,0.00035,3.8e-05,0.00037,0.00024,0.00035,0.00037,1,1,0.01 -32490000,0.73,0.00014,-0.0042,0.69,-1.4,-0.88,0.79,0,0,-4.9e+02,-0.0014,-0.0058,-5e-05,0.0084,0.0076,-0.12,0.2,-0.0003,0.43,-0.0085,-0.0031,0.0012,0,0,-4.9e+02,7.2e-05,5.8e-05,0.0057,0.022,0.032,0.0052,0.3,0.34,0.03,2.5e-07,2.8e-07,9.3e-07,0.0036,0.0036,7.3e-05,0.00035,3.8e-05,0.00037,0.00024,0.00035,0.00037,1,1,0.01 -32590000,0.72,0.00019,-0.0045,0.69,-1.4,-0.87,0.79,0,0,-4.9e+02,-0.0014,-0.0058,-7.1e-05,0.0088,0.0077,-0.12,0.2,-0.00031,0.43,-0.0081,-0.0031,0.0013,0,0,-4.9e+02,7e-05,5.8e-05,0.0056,0.021,0.03,0.0052,0.3,0.34,0.03,2.5e-07,2.8e-07,9.1e-07,0.0036,0.0036,7.3e-05,0.00035,3.8e-05,0.00037,0.00024,0.00035,0.00037,1,1,0.01 -32690000,0.72,0.00016,-0.0046,0.69,-1.4,-0.86,0.79,0,0,-4.9e+02,-0.0014,-0.0058,-7.1e-05,0.0087,0.0081,-0.12,0.2,-0.00031,0.43,-0.0081,-0.0032,0.0014,0,0,-4.9e+02,7e-05,5.8e-05,0.0056,0.022,0.032,0.0052,0.31,0.35,0.03,2.5e-07,2.8e-07,9.1e-07,0.0036,0.0036,7.3e-05,0.00035,3.8e-05,0.00037,0.00024,0.00035,0.00037,1,1,0.01 -32790000,0.72,0.00028,-0.0047,0.69,-1.3,-0.84,0.78,0,0,-4.9e+02,-0.0014,-0.0057,-9.1e-05,0.0091,0.0082,-0.12,0.2,-0.00031,0.43,-0.0077,-0.0032,0.0015,0,0,-4.9e+02,6.8e-05,5.7e-05,0.0054,0.022,0.03,0.0052,0.3,0.35,0.03,2.5e-07,2.7e-07,8.9e-07,0.0036,0.0036,7.2e-05,0.00035,3.8e-05,0.00037,0.00023,0.00035,0.00036,1,1,0.01 -32890000,0.72,0.00036,-0.0046,0.69,-1.3,-0.84,0.78,0,0,-4.9e+02,-0.0014,-0.0057,-0.0001,0.009,0.0089,-0.12,0.2,-0.00031,0.43,-0.0078,-0.0032,0.0016,0,0,-4.9e+02,6.9e-05,5.8e-05,0.0054,0.022,0.031,0.0052,0.32,0.36,0.03,2.5e-07,2.7e-07,8.9e-07,0.0036,0.0036,7.2e-05,0.00035,3.8e-05,0.00037,0.00023,0.00035,0.00036,1,1,0.01 -32990000,0.72,0.00058,-0.0047,0.69,-1.3,-0.82,0.78,0,0,-4.9e+02,-0.0014,-0.0057,-0.00011,0.0094,0.0092,-0.11,0.2,-0.00031,0.43,-0.0073,-0.0032,0.0017,0,0,-4.9e+02,6.7e-05,5.7e-05,0.0052,0.021,0.029,0.0051,0.31,0.36,0.03,2.5e-07,2.7e-07,8.7e-07,0.0036,0.0036,7.2e-05,0.00035,3.8e-05,0.00037,0.00023,0.00035,0.00036,1,1,0.01 -33090000,0.72,0.00054,-0.0047,0.69,-1.3,-0.82,0.77,0,0,-4.9e+02,-0.0014,-0.0057,-9.8e-05,0.0092,0.0095,-0.11,0.2,-0.00031,0.43,-0.0073,-0.0032,0.0017,0,0,-4.9e+02,6.8e-05,5.7e-05,0.0052,0.022,0.031,0.0052,0.33,0.37,0.03,2.5e-07,2.7e-07,8.7e-07,0.0036,0.0036,7.1e-05,0.00035,3.8e-05,0.00037,0.00023,0.00035,0.00036,1,1,0.01 -33190000,0.72,0.004,-0.0039,0.7,-1.2,-0.8,0.72,0,0,-4.9e+02,-0.0014,-0.0057,-0.00011,0.0093,0.0095,-0.11,0.21,-0.00031,0.43,-0.0069,-0.0032,0.0017,0,0,-4.9e+02,6.6e-05,5.7e-05,0.0051,0.022,0.029,0.0051,0.32,0.37,0.03,2.4e-07,2.6e-07,8.5e-07,0.0036,0.0035,7.1e-05,0.00035,3.8e-05,0.00037,0.00022,0.00035,0.00036,1,1,0.01 -33290000,0.67,0.016,-0.0033,0.74,-1.2,-0.78,0.7,0,0,-4.9e+02,-0.0014,-0.0057,-0.00011,0.0091,0.0098,-0.11,0.2,-0.00029,0.43,-0.0071,-0.0033,0.0017,0,0,-4.9e+02,6.6e-05,5.7e-05,0.0051,0.022,0.031,0.0051,0.34,0.38,0.03,2.4e-07,2.6e-07,8.5e-07,0.0036,0.0035,7.1e-05,0.00035,3.8e-05,0.00037,0.00022,0.00035,0.00036,1,1,0.01 -33390000,0.56,0.014,-0.0036,0.83,-1.2,-0.77,0.89,0,0,-4.9e+02,-0.0014,-0.0057,-0.00012,0.0093,0.01,-0.11,0.21,-0.00036,0.43,-0.0064,-0.0032,0.0018,0,0,-4.9e+02,6.5e-05,5.6e-05,0.0047,0.021,0.028,0.0051,0.33,0.37,0.03,2.4e-07,2.6e-07,8.3e-07,0.0036,0.0035,7e-05,0.00032,3.8e-05,0.00036,0.00021,0.00032,0.00036,1,1,0.01 -33490000,0.43,0.0071,-0.0011,0.9,-1.2,-0.76,0.91,0,0,-4.9e+02,-0.0014,-0.0057,-0.00014,0.0093,0.01,-0.11,0.21,-0.00044,0.43,-0.0059,-0.0021,0.0019,0,0,-4.9e+02,6.5e-05,5.6e-05,0.0041,0.022,0.029,0.0051,0.34,0.38,0.03,2.4e-07,2.6e-07,8.1e-07,0.0036,0.0035,7.1e-05,0.00025,3.7e-05,0.00036,0.00017,0.00024,0.00036,1,1,0.01 -33590000,0.27,0.001,-0.0036,0.96,-1.2,-0.75,0.87,0,0,-4.9e+02,-0.0014,-0.0057,-0.00017,0.0093,0.01,-0.11,0.21,-0.00069,0.43,-0.0039,-0.0014,0.002,0,0,-4.9e+02,6.4e-05,5.5e-05,0.0031,0.02,0.027,0.0051,0.34,0.37,0.03,2.4e-07,2.6e-07,7.9e-07,0.0036,0.0035,7.1e-05,0.00016,3.6e-05,0.00036,0.00012,0.00015,0.00036,1,1,0.01 -33690000,0.098,-0.0026,-0.0066,1,-1.1,-0.74,0.88,0,0,-4.9e+02,-0.0014,-0.0057,-0.00018,0.0093,0.01,-0.11,0.21,-0.00074,0.43,-0.0036,-0.001,0.0021,0,0,-4.9e+02,6.4e-05,5.5e-05,0.0024,0.021,0.028,0.0051,0.35,0.37,0.03,2.4e-07,2.6e-07,7.8e-07,0.0036,0.0035,7.1e-05,0.0001,3.5e-05,0.00036,8.3e-05,9.8e-05,0.00036,1,1,0.01 -33790000,-0.074,-0.0044,-0.0084,1,-1.1,-0.72,0.86,0,0,-4.9e+02,-0.0014,-0.0057,-0.0002,0.0093,0.01,-0.11,0.21,-0.0009,0.43,-0.0021,-0.001,0.0023,0,0,-4.9e+02,6.2e-05,5.4e-05,0.0019,0.02,0.026,0.0051,0.35,0.37,0.03,2.4e-07,2.6e-07,7.7e-07,0.0036,0.0035,7.1e-05,6.8e-05,3.5e-05,0.00036,5.5e-05,6.1e-05,0.00036,1,1,0.01 -33890000,-0.24,-0.0058,-0.009,0.97,-1,-0.69,0.85,0,0,-4.9e+02,-0.0014,-0.0057,-0.00021,0.0093,0.01,-0.11,0.21,-0.001,0.43,-0.0013,-0.0011,0.0024,0,0,-4.9e+02,6.2e-05,5.4e-05,0.0016,0.022,0.028,0.0051,0.36,0.38,0.03,2.4e-07,2.6e-07,7.7e-07,0.0036,0.0035,7.1e-05,4.8e-05,3.4e-05,0.00036,3.8e-05,4.1e-05,0.00036,1,1,0.01 -33990000,-0.39,-0.0045,-0.012,0.92,-0.94,-0.64,0.82,0,0,-4.9e+02,-0.0015,-0.0057,-0.00021,0.0092,0.01,-0.11,0.21,-0.001,0.43,-0.0011,-0.00064,0.0025,0,0,-4.9e+02,6e-05,5.3e-05,0.0015,0.021,0.027,0.0051,0.36,0.37,0.03,2.4e-07,2.5e-07,7.7e-07,0.0036,0.0035,7.1e-05,3.6e-05,3.4e-05,0.00036,2.8e-05,2.9e-05,0.00036,1,1,0.01 -34090000,-0.5,-0.0036,-0.014,0.87,-0.88,-0.59,0.82,0,0,-4.9e+02,-0.0015,-0.0057,-0.00021,0.0092,0.011,-0.11,0.21,-0.00097,0.43,-0.0013,-0.00053,0.0025,0,0,-4.9e+02,6e-05,5.3e-05,0.0014,0.023,0.03,0.0051,0.37,0.38,0.03,2.4e-07,2.6e-07,7.7e-07,0.0036,0.0035,7.1e-05,3e-05,3.4e-05,0.00036,2.2e-05,2.3e-05,0.00036,1,1,0.01 -34190000,-0.57,-0.0035,-0.012,0.82,-0.86,-0.54,0.82,0,0,-4.9e+02,-0.0015,-0.0057,-0.0002,0.007,0.014,-0.11,0.21,-0.00097,0.43,-0.0011,-0.00031,0.0028,0,0,-4.9e+02,5.7e-05,5.1e-05,0.0013,0.023,0.029,0.0051,0.5,0.5,0.03,2.4e-07,2.5e-07,7.6e-07,0.0035,0.0035,7e-05,2.5e-05,3.4e-05,0.00036,1.8e-05,1.8e-05,0.00036,1,1,0.01 -34290000,-0.61,-0.0045,-0.0092,0.79,-0.8,-0.48,0.82,0,0,-4.9e+02,-0.0015,-0.0057,-0.0002,0.0067,0.014,-0.11,0.21,-0.00098,0.43,-0.00093,-0.00018,0.0028,0,0,-4.9e+02,5.7e-05,5.1e-05,0.0012,0.025,0.032,0.0051,0.5,0.5,0.03,2.4e-07,2.5e-07,7.6e-07,0.0035,0.0035,7e-05,2.2e-05,3.4e-05,0.00036,1.5e-05,1.5e-05,0.00036,1,1,0.01 -34390000,-0.63,-0.0051,-0.0063,0.77,-0.78,-0.44,0.82,0,0,-4.9e+02,-0.0015,-0.0057,-0.00017,0.0036,0.018,-0.11,0.21,-0.00095,0.43,-0.00093,1.7e-05,0.0029,0,0,-4.9e+02,5.3e-05,4.9e-05,0.0012,0.025,0.031,0.0051,0.17,0.17,0.03,2.4e-07,2.5e-07,7.5e-07,0.0034,0.0035,7e-05,2e-05,3.3e-05,0.00036,1.3e-05,1.3e-05,0.00036,1,1,0.01 -34490000,-0.65,-0.006,-0.0041,0.76,-0.72,-0.39,0.82,0,0,-4.9e+02,-0.0015,-0.0057,-0.00017,0.0034,0.019,-0.11,0.21,-0.00096,0.43,-0.00087,-2.3e-05,0.003,0,0,-4.9e+02,5.3e-05,4.9e-05,0.0011,0.027,0.035,0.0051,0.17,0.17,0.03,2.4e-07,2.5e-07,7.5e-07,0.0034,0.0035,7e-05,1.8e-05,3.3e-05,0.00036,1.2e-05,1.2e-05,0.00036,1,1,0.01 -34590000,-0.66,-0.0061,-0.0027,0.75,-0.7,-0.37,0.82,0,0,-4.9e+02,-0.0015,-0.0058,-0.00014,-0.0015,0.024,-0.11,0.21,-0.00092,0.43,-0.00094,2.9e-05,0.0032,0,0,-4.9e+02,5e-05,4.7e-05,0.0011,0.027,0.034,0.0051,0.1,0.1,0.03,2.4e-07,2.5e-07,7.5e-07,0.0033,0.0034,6.9e-05,1.6e-05,3.3e-05,0.00036,1.1e-05,1e-05,0.00036,1,1,0.01 -34690000,-0.67,-0.0065,-0.0018,0.75,-0.65,-0.32,0.81,0,0,-4.9e+02,-0.0015,-0.0058,-0.00014,-0.0018,0.025,-0.11,0.21,-0.00094,0.43,-0.0008,0.00023,0.0031,0,0,-4.9e+02,5e-05,4.7e-05,0.0011,0.03,0.037,0.0051,0.1,0.1,0.03,2.4e-07,2.5e-07,7.5e-07,0.0033,0.0034,6.9e-05,1.6e-05,3.3e-05,0.00036,9.9e-06,9.4e-06,0.00036,1,1,0.01 -34790000,-0.67,-0.0058,-0.0012,0.74,-0.63,-0.31,0.81,0,0,-4.9e+02,-0.0015,-0.0058,-8.8e-05,-0.0092,0.032,-0.11,0.21,-0.00096,0.43,-0.00065,0.00032,0.0033,0,0,-4.9e+02,4.5e-05,4.4e-05,0.001,0.029,0.035,0.0051,0.074,0.075,0.03,2.4e-07,2.5e-07,7.4e-07,0.0032,0.0033,6.9e-05,1.4e-05,3.3e-05,0.00036,9.1e-06,8.6e-06,0.00036,1,1,0.01 -34890000,-0.67,-0.0058,-0.0011,0.74,-0.58,-0.27,0.8,0,0,-4.9e+02,-0.0015,-0.0058,-8.8e-05,-0.0094,0.032,-0.11,0.21,-0.00096,0.43,-0.00066,0.00028,0.0033,0,0,-4.9e+02,4.5e-05,4.4e-05,0.001,0.032,0.039,0.0051,0.076,0.077,0.03,2.4e-07,2.5e-07,7.4e-07,0.0032,0.0033,6.9e-05,1.4e-05,3.3e-05,0.00036,8.4e-06,7.9e-06,0.00036,1,1,0.01 -34990000,-0.67,-0.013,-0.0036,0.74,0.47,0.33,-0.031,0,0,-4.9e+02,-0.0016,-0.0059,-3.9e-05,-0.017,0.041,-0.11,0.21,-0.00096,0.43,-0.00054,0.00033,0.0035,0,0,-4.9e+02,4.1e-05,4e-05,0.001,0.033,0.045,0.0053,0.06,0.061,0.03,2.4e-07,2.5e-07,7.4e-07,0.003,0.0031,6.9e-05,1.3e-05,3.3e-05,0.00036,7.9e-06,7.4e-06,0.00036,1,1,0.01 -35090000,-0.67,-0.013,-0.0036,0.74,0.6,0.36,-0.089,0,0,-4.9e+02,-0.0016,-0.0059,-4e-05,-0.017,0.041,-0.11,0.21,-0.00097,0.43,-0.0005,0.00027,0.0035,0,0,-4.9e+02,4.1e-05,4e-05,0.00099,0.036,0.049,0.0054,0.063,0.065,0.03,2.4e-07,2.5e-07,7.4e-07,0.003,0.0031,6.9e-05,1.2e-05,3.3e-05,0.00036,7.5e-06,6.9e-06,0.00036,1,1,0.01 -35190000,-0.67,-0.012,-0.0034,0.74,0.62,0.37,-0.091,0,0,-4.9e+02,-0.0016,-0.0059,-5.8e-06,-0.017,0.041,-0.11,0.21,-0.0011,0.43,-0.00046,0.00031,0.0035,0,0,-4.9e+02,4.1e-05,4e-05,0.00098,0.039,0.052,0.0054,0.053,0.055,0.03,2.4e-07,2.5e-07,7.4e-07,0.003,0.0031,6.9e-05,1.2e-05,3.3e-05,0.00036,7.1e-06,6.4e-06,0.00036,1,1,0.01 -35290000,-0.67,-0.012,-0.0035,0.74,0.65,0.41,-0.088,0,0,-4.9e+02,-0.0016,-0.0059,-7.2e-06,-0.017,0.041,-0.11,0.21,-0.0011,0.43,-0.00039,0.00032,0.0035,0,0,-4.9e+02,4.1e-05,4e-05,0.00097,0.042,0.056,0.0054,0.057,0.06,0.03,2.4e-07,2.5e-07,7.4e-07,0.003,0.0031,6.9e-05,1.1e-05,3.3e-05,0.00036,6.7e-06,6.1e-06,0.00036,1,1,0.01 -35390000,-0.67,-0.012,-0.0032,0.74,0.66,0.4,-0.089,0,0,-4.9e+02,-0.0016,-0.0059,3.2e-05,-0.017,0.041,-0.11,0.21,-0.0012,0.43,-0.00032,0.0003,0.0036,0,0,-4.9e+02,4e-05,3.9e-05,0.00096,0.045,0.058,0.0054,0.05,0.054,0.03,2.4e-07,2.5e-07,7.4e-07,0.003,0.0031,6.9e-05,1.1e-05,3.3e-05,0.00036,6.5e-06,5.8e-06,0.00036,1,1,0.01 -35490000,-0.67,-0.012,-0.0032,0.74,0.69,0.44,-0.088,0,0,-4.9e+02,-0.0016,-0.0059,2.9e-05,-0.017,0.041,-0.11,0.21,-0.0012,0.43,-0.00023,0.00025,0.0036,0,0,-4.9e+02,4e-05,3.9e-05,0.00095,0.049,0.063,0.0054,0.055,0.06,0.03,2.4e-07,2.5e-07,7.4e-07,0.003,0.0031,6.9e-05,1.1e-05,3.3e-05,0.00036,6.2e-06,5.5e-06,0.00036,1,1,0.01 -35590000,-0.67,-0.011,-0.003,0.74,0.68,0.42,-0.091,0,0,-4.9e+02,-0.0016,-0.0059,8e-05,-0.017,0.041,-0.11,0.21,-0.0013,0.43,-0.00028,0.00028,0.0036,0,0,-4.9e+02,3.8e-05,3.8e-05,0.00093,0.05,0.063,0.0054,0.05,0.055,0.03,2.4e-07,2.5e-07,7.4e-07,0.003,0.0031,6.9e-05,1e-05,3.3e-05,0.00036,6e-06,5.2e-06,0.00036,1,1,0.01 -35690000,-0.67,-0.011,-0.003,0.74,0.71,0.46,-0.089,0,0,-4.9e+02,-0.0016,-0.0059,7.9e-05,-0.017,0.041,-0.11,0.21,-0.0013,0.43,-0.0002,0.00027,0.0036,0,0,-4.9e+02,3.8e-05,3.8e-05,0.00093,0.054,0.068,0.0054,0.057,0.063,0.031,2.4e-07,2.5e-07,7.4e-07,0.003,0.0031,6.9e-05,1e-05,3.3e-05,0.00036,5.8e-06,5e-06,0.00036,1,1,0.01 -35790000,-0.67,-0.01,-0.0028,0.74,0.69,0.42,-0.092,0,0,-4.9e+02,-0.0016,-0.006,0.00013,-0.027,0.049,-0.11,0.21,-0.0014,0.43,-0.00021,0.00031,0.0037,0,0,-4.9e+02,3.6e-05,3.7e-05,0.00091,0.054,0.066,0.0054,0.052,0.058,0.03,2.4e-07,2.5e-07,7.4e-07,0.0029,0.003,6.9e-05,9.5e-06,3.3e-05,0.00036,5.6e-06,4.8e-06,0.00036,1,1,0.023 -35890000,-0.67,-0.01,-0.0029,0.74,0.71,0.46,-0.088,0,0,-4.9e+02,-0.0016,-0.006,0.00013,-0.027,0.049,-0.11,0.21,-0.0014,0.43,-0.00019,0.0003,0.0037,0,0,-4.9e+02,3.6e-05,3.7e-05,0.00091,0.058,0.071,0.0054,0.06,0.067,0.03,2.4e-07,2.5e-07,7.4e-07,0.0029,0.003,6.9e-05,9.3e-06,3.3e-05,0.00036,5.4e-06,4.6e-06,0.00036,1,1,0.048 -35990000,-0.67,-0.0091,-0.0027,0.74,0.67,0.42,-0.092,0,0,-4.9e+02,-0.0016,-0.006,0.00019,-0.038,0.059,-0.11,0.21,-0.0014,0.43,-0.00024,0.00033,0.0038,0,0,-4.9e+02,3.4e-05,3.5e-05,0.00088,0.057,0.067,0.0054,0.056,0.062,0.031,2.4e-07,2.5e-07,7.3e-07,0.0028,0.0029,6.9e-05,8.8e-06,3.3e-05,0.00036,5.3e-06,4.4e-06,0.00036,1,1,0.073 -36090000,-0.67,-0.0092,-0.0027,0.74,0.7,0.45,-0.088,0,0,-4.9e+02,-0.0016,-0.006,0.00019,-0.038,0.059,-0.11,0.21,-0.0014,0.43,-0.00019,0.00032,0.0038,0,0,-4.9e+02,3.4e-05,3.5e-05,0.00088,0.061,0.072,0.0054,0.064,0.072,0.031,2.4e-07,2.5e-07,7.4e-07,0.0028,0.0029,6.8e-05,8.7e-06,3.3e-05,0.00036,5.1e-06,4.3e-06,0.00036,1,1,0.098 -36190000,-0.67,-0.0092,-0.0027,0.74,0.72,0.48,-0.084,0,0,-4.9e+02,-0.0016,-0.006,0.00019,-0.038,0.059,-0.11,0.21,-0.0014,0.43,-9.1e-05,0.00031,0.0038,0,0,-4.9e+02,3.4e-05,3.5e-05,0.00088,0.066,0.076,0.0054,0.074,0.084,0.031,2.4e-07,2.5e-07,7.4e-07,0.0028,0.0029,6.8e-05,8.5e-06,3.3e-05,0.00036,5e-06,4.1e-06,0.00036,1,1,0.12 -36290000,-0.67,-0.0092,-0.0027,0.74,0.75,0.52,-0.079,0,0,-4.9e+02,-0.0016,-0.006,0.00018,-0.038,0.058,-0.11,0.21,-0.0014,0.43,-6.6e-05,0.0003,0.0038,0,0,-4.9e+02,3.4e-05,3.5e-05,0.00088,0.071,0.082,0.0054,0.086,0.098,0.031,2.4e-07,2.6e-07,7.4e-07,0.0028,0.0029,6.8e-05,8.4e-06,3.3e-05,0.00036,4.9e-06,4e-06,0.00036,1,1,0.15 -36390000,-0.67,-0.0093,-0.0027,0.74,0.77,0.55,-0.076,0,0,-4.9e+02,-0.0016,-0.006,0.00018,-0.038,0.058,-0.11,0.21,-0.0014,0.43,-6.3e-05,0.00034,0.0038,0,0,-4.9e+02,3.4e-05,3.5e-05,0.00088,0.076,0.087,0.0054,0.1,0.11,0.031,2.5e-07,2.6e-07,7.4e-07,0.0028,0.0029,6.8e-05,8.3e-06,3.3e-05,0.00036,4.8e-06,3.9e-06,0.00036,1,1,0.17 -36490000,-0.67,-0.0093,-0.0027,0.74,0.8,0.58,-0.072,0,0,-4.9e+02,-0.0016,-0.006,0.00019,-0.038,0.058,-0.11,0.21,-0.0014,0.43,-8.7e-05,0.00035,0.0038,0,0,-4.9e+02,3.4e-05,3.5e-05,0.00087,0.081,0.092,0.0054,0.12,0.13,0.031,2.5e-07,2.6e-07,7.4e-07,0.0028,0.0029,6.8e-05,8.2e-06,3.3e-05,0.00036,4.7e-06,3.8e-06,0.00036,1,1,0.2 -36590000,-0.67,-0.0094,-0.0027,0.74,0.82,0.62,-0.066,0,0,-4.9e+02,-0.0016,-0.006,0.00018,-0.038,0.058,-0.11,0.21,-0.0014,0.43,-3.4e-05,0.00038,0.0038,0,0,-4.9e+02,3.5e-05,3.6e-05,0.00087,0.086,0.098,0.0054,0.13,0.15,0.031,2.5e-07,2.6e-07,7.4e-07,0.0028,0.0029,6.8e-05,8.1e-06,3.3e-05,0.00036,4.6e-06,3.7e-06,0.00036,1,1,0.22 -36690000,-0.67,-0.0094,-0.0027,0.74,0.85,0.65,-0.062,0,0,-4.9e+02,-0.0016,-0.006,0.00018,-0.038,0.058,-0.11,0.21,-0.0014,0.43,3.2e-06,0.00039,0.0038,0,0,-4.9e+02,3.5e-05,3.6e-05,0.00087,0.092,0.1,0.0055,0.15,0.18,0.031,2.5e-07,2.6e-07,7.4e-07,0.0028,0.0029,6.7e-05,8e-06,3.3e-05,0.00036,4.5e-06,3.6e-06,0.00036,1,1,0.25 -36790000,-0.67,-0.0094,-0.0027,0.74,0.88,0.68,-0.056,0,0,-4.9e+02,-0.0016,-0.006,0.00018,-0.038,0.058,-0.11,0.21,-0.0015,0.43,5.3e-05,0.00035,0.0038,0,0,-4.9e+02,3.5e-05,3.6e-05,0.00087,0.098,0.11,0.0054,0.18,0.2,0.031,2.5e-07,2.6e-07,7.4e-07,0.0028,0.0029,6.7e-05,7.9e-06,3.3e-05,0.00036,4.5e-06,3.5e-06,0.00036,1,1,0.27 -36890000,-0.67,-0.0095,-0.0027,0.74,0.9,0.72,-0.051,0,0,-4.9e+02,-0.0016,-0.006,0.00017,-0.038,0.058,-0.11,0.21,-0.0015,0.43,9.7e-05,0.00034,0.0038,0,0,-4.9e+02,3.5e-05,3.6e-05,0.00087,0.1,0.12,0.0054,0.2,0.23,0.031,2.5e-07,2.6e-07,7.4e-07,0.0028,0.0029,6.7e-05,7.8e-06,3.3e-05,0.00036,4.4e-06,3.4e-06,0.00036,1,1,0.3 -36990000,-0.67,-0.0095,-0.0026,0.74,0.93,0.75,-0.046,0,0,-4.9e+02,-0.0016,-0.006,0.00017,-0.038,0.057,-0.11,0.21,-0.0015,0.43,0.00012,0.00035,0.0038,0,0,-4.9e+02,3.5e-05,3.6e-05,0.00087,0.11,0.12,0.0055,0.23,0.26,0.031,2.5e-07,2.6e-07,7.4e-07,0.0028,0.0029,6.7e-05,7.7e-06,3.3e-05,0.00036,4.3e-06,3.3e-06,0.00036,1,1,0.33 -37090000,-0.67,-0.0096,-0.0025,0.74,0.96,0.78,-0.04,0,0,-4.9e+02,-0.0016,-0.006,0.00017,-0.037,0.057,-0.11,0.21,-0.0015,0.43,0.00013,0.00038,0.0038,0,0,-4.9e+02,3.6e-05,3.6e-05,0.00087,0.12,0.13,0.0055,0.26,0.3,0.031,2.5e-07,2.6e-07,7.4e-07,0.0028,0.0029,6.7e-05,7.6e-06,3.3e-05,0.00036,4.3e-06,3.3e-06,0.00036,1,1,0.35 -37190000,-0.67,-0.0096,-0.0025,0.74,0.98,0.82,-0.034,0,0,-4.9e+02,-0.0016,-0.006,0.00017,-0.037,0.057,-0.11,0.21,-0.0015,0.43,0.00013,0.00038,0.0038,0,0,-4.9e+02,3.6e-05,3.7e-05,0.00087,0.12,0.14,0.0054,0.29,0.34,0.031,2.5e-07,2.6e-07,7.4e-07,0.0028,0.0029,6.6e-05,7.6e-06,3.3e-05,0.00036,4.2e-06,3.2e-06,0.00036,1,1,0.38 -37290000,-0.67,-0.0096,-0.0026,0.74,1,0.85,-0.029,0,0,-4.9e+02,-0.0016,-0.006,0.00017,-0.037,0.057,-0.11,0.21,-0.0015,0.43,0.00015,0.00038,0.0038,0,0,-4.9e+02,3.6e-05,3.7e-05,0.00087,0.13,0.14,0.0055,0.33,0.38,0.031,2.5e-07,2.6e-07,7.4e-07,0.0028,0.0029,6.6e-05,7.5e-06,3.3e-05,0.00036,4.2e-06,3.1e-06,0.00036,1,1,0.4 -37390000,-0.67,-0.0097,-0.0025,0.74,1,0.88,-0.024,0,0,-4.9e+02,-0.0016,-0.006,0.00017,-0.037,0.057,-0.11,0.21,-0.0015,0.43,0.00018,0.00039,0.0038,0,0,-4.9e+02,3.6e-05,3.7e-05,0.00087,0.14,0.15,0.0054,0.37,0.43,0.031,2.6e-07,2.6e-07,7.4e-07,0.0028,0.0029,6.6e-05,7.4e-06,3.3e-05,0.00036,4.1e-06,3.1e-06,0.00036,1,1,0.43 -37490000,-0.67,-0.0097,-0.0025,0.74,1.1,0.91,-0.018,0,0,-4.9e+02,-0.0016,-0.006,0.00016,-0.037,0.057,-0.11,0.21,-0.0015,0.43,0.00022,0.00042,0.0038,0,0,-4.9e+02,3.6e-05,3.7e-05,0.00087,0.14,0.16,0.0054,0.41,0.48,0.031,2.6e-07,2.7e-07,7.5e-07,0.0028,0.0029,6.6e-05,7.4e-06,3.3e-05,0.00036,4.1e-06,3e-06,0.00036,1,1,0.45 -37590000,-0.67,-0.0097,-0.0024,0.74,1.1,0.95,-0.011,0,0,-4.9e+02,-0.0016,-0.006,0.00016,-0.037,0.057,-0.11,0.21,-0.0015,0.43,0.00024,0.00042,0.0038,0,0,-4.9e+02,3.7e-05,3.7e-05,0.00087,0.15,0.17,0.0055,0.46,0.53,0.032,2.6e-07,2.7e-07,7.5e-07,0.0028,0.0029,6.6e-05,7.3e-06,3.3e-05,0.00036,4e-06,3e-06,0.00036,1,1,0.48 -37690000,-0.67,-0.0098,-0.0025,0.74,1.1,0.98,-0.0037,0,0,-4.9e+02,-0.0016,-0.006,0.00016,-0.037,0.056,-0.11,0.21,-0.0015,0.43,0.00026,0.00041,0.0038,0,0,-4.9e+02,3.7e-05,3.8e-05,0.00087,0.16,0.17,0.0054,0.51,0.59,0.031,2.6e-07,2.7e-07,7.5e-07,0.0028,0.0029,6.6e-05,7.3e-06,3.3e-05,0.00036,4e-06,2.9e-06,0.00036,1,1,0.5 -37790000,-0.67,-0.0098,-0.0025,0.74,1.1,1,0.0033,0,0,-4.9e+02,-0.0016,-0.006,0.00016,-0.037,0.056,-0.11,0.21,-0.0015,0.43,0.00027,0.00042,0.0038,0,0,-4.9e+02,3.7e-05,3.8e-05,0.00087,0.17,0.18,0.0054,0.57,0.65,0.031,2.6e-07,2.7e-07,7.5e-07,0.0028,0.0029,6.5e-05,7.2e-06,3.3e-05,0.00036,3.9e-06,2.9e-06,0.00036,1,1,0.53 -37890000,-0.67,-0.0098,-0.0025,0.74,1.2,1.1,0.0094,0,0,-4.9e+02,-0.0016,-0.006,0.00016,-0.037,0.056,-0.11,0.21,-0.0015,0.43,0.00028,0.0004,0.0038,0,0,-4.9e+02,3.7e-05,3.8e-05,0.00088,0.18,0.19,0.0054,0.63,0.72,0.031,2.6e-07,2.7e-07,7.5e-07,0.0028,0.0029,6.5e-05,7.2e-06,3.3e-05,0.00036,3.9e-06,2.8e-06,0.00036,1,1,0.55 -37990000,-0.67,-0.0098,-0.0025,0.74,1.2,1.1,0.017,0,0,-4.9e+02,-0.0016,-0.006,0.00016,-0.037,0.056,-0.11,0.21,-0.0015,0.43,0.00029,0.0004,0.0038,0,0,-4.9e+02,3.8e-05,3.8e-05,0.00088,0.18,0.2,0.0054,0.7,0.8,0.032,2.6e-07,2.7e-07,7.5e-07,0.0028,0.0029,6.5e-05,7.1e-06,3.3e-05,0.00036,3.9e-06,2.8e-06,0.00036,1,1,0.58 -38090000,-0.67,-0.0098,-0.0025,0.74,1.2,1.1,0.026,0,0,-4.9e+02,-0.0016,-0.006,0.00015,-0.037,0.056,-0.11,0.21,-0.0015,0.43,0.00031,0.00041,0.0038,0,0,-4.9e+02,3.8e-05,3.9e-05,0.00088,0.19,0.21,0.0054,0.77,0.88,0.031,2.6e-07,2.7e-07,7.5e-07,0.0028,0.0029,6.5e-05,7.1e-06,3.3e-05,0.00036,3.8e-06,2.7e-06,0.00036,1,1,0.61 -38190000,-0.67,-0.0098,-0.0025,0.74,1.2,1.2,0.032,0,0,-4.9e+02,-0.0016,-0.006,0.00015,-0.037,0.056,-0.11,0.21,-0.0015,0.43,0.00032,0.00041,0.0038,0,0,-4.9e+02,3.8e-05,3.9e-05,0.00088,0.2,0.22,0.0054,0.85,0.96,0.031,2.6e-07,2.7e-07,7.5e-07,0.0028,0.0029,6.5e-05,7e-06,3.3e-05,0.00036,3.8e-06,2.7e-06,0.00036,1,1,0.63 -38290000,-0.67,-0.0099,-0.0025,0.74,1.3,1.2,0.039,0,0,-4.9e+02,-0.0016,-0.006,0.00015,-0.037,0.056,-0.11,0.21,-0.0015,0.43,0.00032,0.00039,0.0038,0,0,-4.9e+02,3.8e-05,3.9e-05,0.00088,0.21,0.23,0.0054,0.93,1.1,0.032,2.6e-07,2.7e-07,7.5e-07,0.0028,0.0029,6.5e-05,7e-06,3.3e-05,0.00036,3.8e-06,2.7e-06,0.00036,1,1,0.66 -38390000,-0.67,-0.0099,-0.0025,0.74,1.3,1.2,0.045,0,0,-4.9e+02,-0.0016,-0.006,0.00015,-0.037,0.056,-0.11,0.21,-0.0015,0.43,0.00032,0.00041,0.0038,0,0,-4.9e+02,3.9e-05,3.9e-05,0.00088,0.22,0.24,0.0054,1,1.1,0.032,2.6e-07,2.7e-07,7.5e-07,0.0027,0.0029,6.4e-05,6.9e-06,3.3e-05,0.00036,3.8e-06,2.6e-06,0.00036,1,1,0.68 -38490000,-0.67,-0.0099,-0.0024,0.74,1.3,1.3,0.051,0,0,-4.9e+02,-0.0016,-0.006,0.00015,-0.037,0.056,-0.11,0.21,-0.0015,0.43,0.00033,0.00043,0.0038,0,0,-4.9e+02,3.9e-05,4e-05,0.00088,0.23,0.25,0.0054,1.1,1.3,0.031,2.6e-07,2.7e-07,7.5e-07,0.0027,0.0029,6.4e-05,6.9e-06,3.3e-05,0.00036,3.7e-06,2.6e-06,0.00036,1,1,0.71 -38590000,-0.67,-0.0099,-0.0024,0.74,1.4,1.3,0.056,0,0,-4.9e+02,-0.0016,-0.006,0.00015,-0.037,0.056,-0.11,0.21,-0.0015,0.43,0.00033,0.00044,0.0038,0,0,-4.9e+02,3.9e-05,4e-05,0.00088,0.24,0.26,0.0054,1.2,1.4,0.032,2.7e-07,2.7e-07,7.5e-07,0.0027,0.0029,6.4e-05,6.9e-06,3.3e-05,0.00036,3.7e-06,2.5e-06,0.00036,1,1,0.73 -38690000,-0.67,-0.01,-0.0024,0.74,1.4,1.3,0.062,0,0,-4.9e+02,-0.0016,-0.006,0.00015,-0.037,0.056,-0.11,0.21,-0.0015,0.43,0.00035,0.00045,0.0038,0,0,-4.9e+02,3.9e-05,4e-05,0.00088,0.25,0.27,0.0054,1.3,1.5,0.032,2.7e-07,2.8e-07,7.5e-07,0.0027,0.0029,6.4e-05,6.8e-06,3.3e-05,0.00036,3.7e-06,2.5e-06,0.00036,1,1,0.76 -38790000,-0.67,-0.01,-0.0024,0.74,1.4,1.4,0.068,0,0,-4.9e+02,-0.0016,-0.006,0.00014,-0.037,0.056,-0.11,0.21,-0.0015,0.43,0.00036,0.00045,0.0038,0,0,-4.9e+02,4e-05,4e-05,0.00088,0.26,0.28,0.0054,1.4,1.6,0.032,2.7e-07,2.8e-07,7.5e-07,0.0027,0.0029,6.4e-05,6.8e-06,3.3e-05,0.00036,3.7e-06,2.5e-06,0.00036,1,1,0.79 -38890000,-0.67,-0.01,-0.0024,0.74,1.4,1.4,0.57,0,0,-4.9e+02,-0.0016,-0.006,0.00014,-0.037,0.056,-0.11,0.21,-0.0015,0.43,0.00037,0.00042,0.0038,0,0,-4.9e+02,4e-05,4e-05,0.00088,0.26,0.28,0.0054,1.6,1.7,0.032,2.7e-07,2.8e-07,7.5e-07,0.0027,0.0029,6.4e-05,6.8e-06,3.3e-05,0.00036,3.7e-06,2.5e-06,0.00036,1,1,0.81 +10000,1,-0.0094,-0.01,-3.2e-06,0.00023,7.3e-05,-0.011,0,0,-0.00045,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.1,0.01,0.01,9.2e-06,25,25,10,1e+02,1e+02,1e+02,0.01,0.01,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.032 +90000,1,-0.0094,-0.011,6.9e-05,-0.00047,0.0026,-0.026,0,0,-0.0023,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.1,0.01,0.01,1.9e-05,25,25,10,1e+02,1e+02,1e+02,0.01,0.01,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.058 +190000,1,-0.0094,-0.011,2.8e-05,6.9e-05,0.004,-0.041,0,0,-1.2e+02,-3e-11,-2.6e-12,5.6e-13,0,0,-5e-08,0,0,0,0,0,0,0,0,-1.2e+02,0.011,0.011,3e-05,25,25,10,1e+02,1e+02,1,0.01,0.01,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.082 +290000,1,-0.0094,-0.011,6.3e-05,0.001,0.0064,-0.053,0,0,-1.2e+02,9.1e-10,1e-10,-1.6e-11,0,0,-2.5e-06,0,0,0,0,0,0,0,0,-1.2e+02,0.012,0.012,4e-05,25,25,9.6,0.37,0.37,0.41,0.01,0.01,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.11 +390000,1,-0.0094,-0.011,7e-05,0.0024,0.0083,-0.059,0,0,-1.2e+02,-1.1e-08,2.8e-09,2.9e-10,0,0,-1.5e-05,0,0,0,0,0,0,0,0,-1.2e+02,0.012,0.012,5e-05,25,25,8.1,0.97,0.97,0.32,0.01,0.01,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.13 +490000,1,-0.0095,-0.012,2e-05,0.0039,0.0048,-0.06,0,0,-1.2e+02,1.6e-06,-3.7e-07,-4.1e-08,0,0,-4.1e-05,0,0,0,0,0,0,0,0,-1.2e+02,0.013,0.013,6e-05,7.8,7.8,5.9,0.34,0.34,0.31,0.01,0.01,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.16 +590000,1,-0.0095,-0.012,2.6e-05,0.006,0.0073,-0.059,0,0,-1.2e+02,1.6e-06,-3.4e-07,-4e-08,0,0,-7.3e-05,0,0,0,0,0,0,0,0,-1.2e+02,0.015,0.015,7.1e-05,7.9,7.9,4.2,0.67,0.67,0.32,0.01,0.01,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.18 +690000,1,-0.0096,-0.012,8.6e-05,0.0063,0.0052,-0.059,0,0,-1.2e+02,5.5e-06,-3.2e-06,-1.8e-07,0,0,-0.00012,0,0,0,0,0,0,0,0,-1.2e+02,0.016,0.016,8.1e-05,2.7,2.7,2.8,0.26,0.26,0.29,0.01,0.01,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.21 +790000,1,-0.0097,-0.013,9.9e-05,0.0086,0.0073,-0.063,0,0,-1.2e+02,5.4e-06,-3.1e-06,-1.7e-07,0,0,-0.00016,0,0,0,0,0,0,0,0,-1.2e+02,0.018,0.018,9.1e-05,2.8,2.8,2,0.42,0.42,0.28,0.01,0.01,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.23 +890000,1,-0.0098,-0.013,0.00012,0.01,0.006,-0.077,0,0,-1.2e+02,1.6e-05,-1.5e-05,-6.4e-07,0,0,-0.00016,0,0,0,0,0,0,0,0,-1.2e+02,0.019,0.019,0.0001,1.3,1.3,2,0.2,0.2,0.43,0.01,0.01,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.26 +990000,1,-0.0099,-0.013,0.00013,0.015,0.0064,-0.092,0,0,-1.2e+02,1.6e-05,-1.5e-05,-6.4e-07,0,0,-0.00016,0,0,0,0,0,0,0,0,-1.2e+02,0.021,0.021,0.00011,1.5,1.5,2,0.3,0.3,0.61,0.01,0.01,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.28 +1090000,1,-0.01,-0.014,0.00013,0.016,0.0051,-0.11,0,0,-1.2e+02,4.1e-05,-6.2e-05,-2.1e-06,0,0,-0.00016,0,0,0,0,0,0,0,0,-1.2e+02,0.023,0.023,0.00012,0.93,0.93,2,0.17,0.17,0.84,0.0098,0.0098,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.31 +1190000,1,-0.01,-0.014,0.0001,0.02,0.0053,-0.12,0,0,-1.2e+02,4.1e-05,-6.2e-05,-2.1e-06,0,0,-0.00016,0,0,0,0,0,0,0,0,-1.2e+02,0.025,0.025,0.00013,1.1,1.1,2,0.24,0.24,1.1,0.0098,0.0098,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.33 +1290000,1,-0.01,-0.014,0.00016,0.02,0.0044,-0.14,0,0,-1.2e+02,8.5e-05,-0.00019,-5.5e-06,0,0,-0.00016,0,0,0,0,0,0,0,0,-1.2e+02,0.026,0.026,0.00014,0.89,0.89,2,0.15,0.15,1.4,0.0095,0.0095,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.36 +1390000,1,-0.01,-0.014,0.00017,0.026,0.0042,-0.15,0,0,-1.2e+02,8.5e-05,-0.00019,-5.5e-06,0,0,-0.00016,0,0,0,0,0,0,0,0,-1.2e+02,0.028,0.028,0.00015,1.2,1.2,2,0.21,0.21,1.7,0.0095,0.0095,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.38 +1490000,1,-0.01,-0.014,0.00015,0.024,0.0029,-0.16,0,0,-1.2e+02,0.00015,-0.00045,-1.2e-05,0,0,-0.00016,0,0,0,0,0,0,0,0,-1.2e+02,0.027,0.027,0.00016,0.96,0.96,2,0.14,0.14,2.1,0.0089,0.0089,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.41 +1590000,1,-0.01,-0.014,0.00015,0.03,0.0035,-0.18,0,0,-1.2e+02,0.00015,-0.00045,-1.2e-05,0,0,-0.00016,0,0,0,0,0,0,0,0,-1.2e+02,0.03,0.03,0.00017,1.3,1.3,2,0.2,0.2,2.6,0.0089,0.0089,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.43 +1690000,1,-0.011,-0.014,0.00012,0.028,-9.5e-05,-0.19,0,0,-1.2e+02,0.0002,-0.00088,-2.1e-05,0,0,-0.00017,0,0,0,0,0,0,0,0,-1.2e+02,0.026,0.026,0.00018,1,1,2,0.14,0.14,3,0.0078,0.0078,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.46 +1790000,1,-0.011,-0.014,9.5e-05,0.035,-0.0019,-0.2,0,0,-1.2e+02,0.0002,-0.00088,-2.1e-05,0,0,-0.00017,0,0,0,0,0,0,0,0,-1.2e+02,0.028,0.028,0.00019,1.3,1.3,2,0.2,0.2,3.5,0.0078,0.0078,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.48 +1890000,1,-0.011,-0.015,7.5e-05,0.043,-0.0032,-0.22,0,0,-1.2e+02,0.0002,-0.00088,-2.1e-05,0,0,-0.00017,0,0,0,0,0,0,0,0,-1.2e+02,0.031,0.031,0.0002,1.7,1.7,2,0.31,0.31,4.1,0.0078,0.0078,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.51 +1990000,1,-0.011,-0.014,8.6e-05,0.036,-0.0046,-0.23,0,0,-1.2e+02,0.00022,-0.0014,-3.2e-05,0,0,-0.00017,0,0,0,0,0,0,0,0,-1.2e+02,0.025,0.025,0.00021,1.3,1.3,2.1,0.2,0.2,4.7,0.0067,0.0067,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.53 +2090000,1,-0.011,-0.014,4.7e-05,0.041,-0.0071,-0.24,0,0,-1.2e+02,0.00022,-0.0014,-3.2e-05,0,0,-0.00017,0,0,0,0,0,0,0,0,-1.2e+02,0.027,0.027,0.00022,1.7,1.7,2.1,0.31,0.31,5.3,0.0067,0.0067,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.56 +2190000,1,-0.011,-0.014,5.9e-05,0.033,-0.0068,-0.26,0,0,-1.2e+02,0.00017,-0.002,-4.2e-05,0,0,-0.00017,0,0,0,0,0,0,0,0,-1.2e+02,0.02,0.02,0.00023,1.2,1.2,2.1,0.2,0.2,6,0.0055,0.0055,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.58 +2290000,1,-0.011,-0.014,4.6e-05,0.039,-0.0093,-0.27,0,0,-1.2e+02,0.00017,-0.002,-4.2e-05,0,0,-0.00017,0,0,0,0,0,0,0,0,-1.2e+02,0.022,0.022,0.00024,1.5,1.5,2.1,0.3,0.3,6.7,0.0055,0.0055,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.61 +2390000,1,-0.011,-0.013,6.3e-05,0.03,-0.0087,-0.29,0,0,-1.2e+02,9e-05,-0.0025,-5e-05,0,0,-0.00018,0,0,0,0,0,0,0,0,-1.2e+02,0.017,0.017,0.00025,1,1,2.1,0.19,0.19,7.4,0.0046,0.0046,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.63 +2490000,1,-0.011,-0.013,4.5e-05,0.035,-0.011,-0.3,0,0,-1.2e+02,9e-05,-0.0025,-5e-05,0,0,-0.00018,0,0,0,0,0,0,0,0,-1.2e+02,0.018,0.018,0.00026,1.3,1.3,2.1,0.28,0.28,8.2,0.0046,0.0046,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.66 +2590000,1,-0.011,-0.013,5.9e-05,0.026,-0.009,-0.31,0,0,-1.2e+02,-1.4e-05,-0.0029,-5.6e-05,0,0,-0.00018,0,0,0,0,0,0,0,0,-1.2e+02,0.014,0.014,0.00028,0.89,0.89,2.1,0.18,0.18,9.1,0.0038,0.0038,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.68 +2690000,1,-0.011,-0.013,5.6e-05,0.03,-0.01,-0.33,0,0,-1.2e+02,-1.4e-05,-0.0029,-5.6e-05,0,0,-0.00018,0,0,0,0,0,0,0,0,-1.2e+02,0.015,0.015,0.00029,1.1,1.1,2.2,0.25,0.25,10,0.0038,0.0038,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.71 +2790000,1,-0.011,-0.013,5e-05,0.023,-0.0093,-0.34,0,0,-1.2e+02,-0.00012,-0.0033,-6.1e-05,0,0,-0.00018,0,0,0,0,0,0,0,0,-1.2e+02,0.011,0.011,0.0003,0.77,0.77,2.2,0.16,0.16,11,0.0032,0.0032,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.73 +2890000,1,-0.011,-0.013,5.1e-08,0.027,-0.011,-0.35,0,0,-1.2e+02,-0.00012,-0.0033,-6.1e-05,0,0,-0.00018,0,0,0,0,0,0,0,0,-1.2e+02,0.013,0.013,0.00031,0.95,0.95,2.2,0.23,0.23,12,0.0032,0.0032,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.76 +2990000,1,-0.011,-0.013,4.8e-05,0.022,-0.0095,-0.36,0,0,-1.2e+02,-0.00023,-0.0036,-6.5e-05,0,0,-0.00018,0,0,0,0,0,0,0,0,-1.2e+02,0.0099,0.0099,0.00032,0.67,0.67,2.2,0.15,0.15,13,0.0027,0.0027,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.78 +3090000,1,-0.011,-0.013,5e-05,0.025,-0.011,-0.38,0,0,-1.2e+02,-0.00023,-0.0036,-6.5e-05,0,0,-0.00018,0,0,0,0,0,0,0,0,-1.2e+02,0.011,0.011,0.00033,0.83,0.83,2.2,0.22,0.22,14,0.0027,0.0027,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.81 +3190000,1,-0.011,-0.013,-6.6e-06,0.02,-0.0086,-0.39,0,0,-1.2e+02,-0.00034,-0.0039,-6.8e-05,0,0,-0.00017,0,0,0,0,0,0,0,0,-1.2e+02,0.0087,0.0087,0.00034,0.59,0.59,2.3,0.14,0.14,15,0.0023,0.0023,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.83 +3290000,1,-0.011,-0.013,3.3e-05,0.023,-0.01,-0.4,0,0,-1.2e+02,-0.00034,-0.0039,-6.8e-05,0,0,-0.00017,0,0,0,0,0,0,0,0,-1.2e+02,0.0096,0.0096,0.00035,0.73,0.73,2.3,0.2,0.2,16,0.0023,0.0023,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.86 +3390000,1,-0.011,-0.012,4.8e-06,0.018,-0.0091,-0.42,0,0,-1.2e+02,-0.00044,-0.0041,-7e-05,0,0,-0.00017,0,0,0,0,0,0,0,0,-1.2e+02,0.0078,0.0078,0.00036,0.53,0.53,2.3,0.14,0.14,18,0.002,0.002,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.88 +3490000,1,-0.011,-0.013,-2.8e-06,0.022,-0.012,-0.43,0,0,-1.2e+02,-0.00044,-0.0041,-7e-05,0,0,-0.00017,0,0,0,0,0,0,0,0,-1.2e+02,0.0086,0.0086,0.00037,0.66,0.66,2.3,0.19,0.19,19,0.002,0.002,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.91 +3590000,1,-0.011,-0.012,2.1e-05,0.017,-0.011,-0.44,0,0,-1.2e+02,-0.00055,-0.0044,-7.3e-05,0,0,-0.00017,0,0,0,0,0,0,0,0,-1.2e+02,0.007,0.007,0.00038,0.49,0.49,2.4,0.13,0.13,20,0.0017,0.0017,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.93 +3690000,1,-0.011,-0.012,0.00014,0.019,-0.014,-0.46,0,0,-1.2e+02,-0.00055,-0.0044,-7.3e-05,0,0,-0.00017,0,0,0,0,0,0,0,0,-1.2e+02,0.0077,0.0077,0.00039,0.6,0.6,2.4,0.18,0.18,22,0.0017,0.0017,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.96 +3790000,1,-0.011,-0.012,0.00019,0.016,-0.013,-0.47,0,0,-1.2e+02,-0.00067,-0.0046,-7.4e-05,0,0,-0.00016,0,0,0,0,0,0,0,0,-1.2e+02,0.0064,0.0064,0.0004,0.45,0.45,2.4,0.12,0.12,23,0.0014,0.0014,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.98 +3890000,1,-0.011,-0.012,0.00016,0.017,-0.014,-0.48,0,0,-1.2e+02,-0.00067,-0.0046,-7.4e-05,0,0,-0.00016,0,0,0,0,0,0,0,0,-1.2e+02,0.0069,0.0069,0.00041,0.55,0.55,2.4,0.17,0.17,24,0.0014,0.0014,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1 +3990000,1,-0.011,-0.012,0.00016,0.02,-0.016,-0.5,0,0,-1.2e+02,-0.00067,-0.0046,-7.4e-05,0,0,-0.00016,0,0,0,0,0,0,0,0,-1.2e+02,0.0075,0.0075,0.00042,0.67,0.67,2.5,0.23,0.23,26,0.0014,0.0014,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1 +4090000,1,-0.011,-0.012,0.00015,0.017,-0.014,-0.51,0,0,-1.2e+02,-0.00079,-0.0047,-7.5e-05,0,0,-0.00016,0,0,0,0,0,0,0,0,-1.2e+02,0.0062,0.0062,0.00043,0.51,0.51,2.5,0.16,0.16,28,0.0012,0.0012,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.1 +4190000,1,-0.011,-0.012,0.00013,0.02,-0.016,-0.53,0,0,-1.2e+02,-0.00079,-0.0047,-7.5e-05,0,0,-0.00016,0,0,0,0,0,0,0,0,-1.2e+02,0.0067,0.0067,0.00044,0.61,0.61,2.5,0.21,0.21,29,0.0012,0.0012,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.1 +4290000,1,-0.01,-0.012,8.4e-05,0.017,-0.012,-0.54,0,0,-1.2e+02,-0.00091,-0.0049,-7.6e-05,0,0,-0.00016,0,0,0,0,0,0,0,0,-1.2e+02,0.0056,0.0056,0.00045,0.47,0.47,2.6,0.15,0.15,31,0.00098,0.00098,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.1 +4390000,1,-0.01,-0.012,0.00011,0.018,-0.013,-0.55,0,0,-1.2e+02,-0.00091,-0.0049,-7.6e-05,0,0,-0.00016,0,0,0,0,0,0,0,0,-1.2e+02,0.006,0.006,0.00046,0.56,0.56,2.6,0.2,0.2,33,0.00098,0.00098,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.1 +4490000,1,-0.01,-0.012,0.00017,0.014,-0.0097,-0.57,0,0,-1.2e+02,-0.001,-0.005,-7.7e-05,0,0,-0.00015,0,0,0,0,0,0,0,0,-1.2e+02,0.005,0.005,0.00047,0.43,0.43,2.6,0.14,0.14,34,0.00081,0.0008,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.2 +4590000,1,-0.01,-0.012,0.0002,0.017,-0.011,-0.58,0,0,-1.2e+02,-0.001,-0.005,-7.7e-05,0,0,-0.00015,0,0,0,0,0,0,0,0,-1.2e+02,0.0053,0.0053,0.00048,0.52,0.52,2.7,0.19,0.19,36,0.00081,0.0008,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.2 +4690000,1,-0.01,-0.012,0.0002,0.014,-0.0096,-0.6,0,0,-1.2e+02,-0.0011,-0.0052,-7.8e-05,0,0,-0.00015,0,0,0,0,0,0,0,0,-1.2e+02,0.0044,0.0044,0.00049,0.4,0.4,2.7,0.14,0.14,38,0.00066,0.00066,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.2 +4790000,1,-0.01,-0.012,0.00019,0.015,-0.011,-0.61,0,0,-1.2e+02,-0.0011,-0.0052,-7.8e-05,0,0,-0.00015,0,0,0,0,0,0,0,0,-1.2e+02,0.0047,0.0047,0.0005,0.48,0.48,2.7,0.18,0.18,40,0.00066,0.00066,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.2 +4890000,1,-0.01,-0.011,0.00018,0.012,-0.0097,-0.63,0,0,-1.2e+02,-0.0012,-0.0053,-8e-05,0,0,-0.00014,0,0,0,0,0,0,0,0,-1.2e+02,0.0039,0.0039,0.00051,0.37,0.37,2.8,0.13,0.13,42,0.00054,0.00053,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.3 +4990000,1,-0.01,-0.012,0.00015,0.015,-0.01,-0.64,0,0,-1.2e+02,-0.0012,-0.0053,-8e-05,0,0,-0.00014,0,0,0,0,0,0,0,0,-1.2e+02,0.0041,0.0041,0.00052,0.44,0.44,2.8,0.17,0.17,44,0.00054,0.00053,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.3 +5090000,1,-0.01,-0.011,0.0002,0.011,-0.0081,-0.66,0,0,-1.2e+02,-0.0013,-0.0054,-8.1e-05,0,0,-0.00014,0,0,0,0,0,0,0,0,-1.2e+02,0.0034,0.0034,0.00053,0.34,0.34,2.8,0.12,0.12,47,0.00043,0.00043,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.3 +5190000,1,-0.01,-0.011,0.00023,0.013,-0.0095,-0.67,0,0,-1.2e+02,-0.0013,-0.0054,-8.1e-05,0,0,-0.00014,0,0,0,0,0,0,0,0,-1.2e+02,0.0036,0.0036,0.00054,0.4,0.4,2.9,0.16,0.16,49,0.00043,0.00043,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.3 +5290000,1,-0.0099,-0.011,0.00022,0.0086,-0.007,-0.68,0,0,-1.2e+02,-0.0013,-0.0055,-8.3e-05,0,0,-0.00014,0,0,0,0,0,0,0,0,-1.2e+02,0.003,0.003,0.00055,0.31,0.31,2.9,0.12,0.12,51,0.00035,0.00035,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.4 +5390000,1,-0.0099,-0.011,0.00028,0.0081,-0.0078,-0.7,0,0,-1.2e+02,-0.0013,-0.0055,-8.3e-05,0,0,-0.00014,0,0,0,0,0,0,0,0,-1.2e+02,0.0032,0.0032,0.00056,0.36,0.36,3,0.16,0.16,54,0.00035,0.00035,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.4 +5490000,1,-0.0098,-0.011,0.00029,0.0055,-0.0059,-0.71,0,0,-1.2e+02,-0.0014,-0.0055,-8.4e-05,0,0,-0.00013,0,0,0,0,0,0,0,0,-1.2e+02,0.0026,0.0026,0.00057,0.28,0.28,3,0.11,0.11,56,0.00028,0.00028,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.4 +5590000,1,-0.0097,-0.011,0.00027,0.0061,-0.0063,-0.73,0,0,-1.2e+02,-0.0014,-0.0055,-8.4e-05,0,0,-0.00013,0,0,0,0,0,0,0,0,-1.2e+02,0.0028,0.0028,0.00058,0.33,0.33,3,0.15,0.15,59,0.00028,0.00028,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.4 +5690000,1,-0.0096,-0.011,0.00034,0.0041,-0.0036,-0.74,0,0,-1.2e+02,-0.0014,-0.0056,-8.5e-05,0,0,-0.00013,0,0,0,0,0,0,0,0,-1.2e+02,0.0023,0.0023,0.00059,0.26,0.26,3.1,0.11,0.11,61,0.00023,0.00023,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.5 +5790000,1,-0.0095,-0.011,0.00034,0.0044,-0.0025,-0.75,0,0,-1.2e+02,-0.0014,-0.0056,-8.5e-05,0,0,-0.00013,0,0,0,0,0,0,0,0,-1.2e+02,0.0025,0.0025,0.0006,0.3,0.3,3.1,0.14,0.14,64,0.00023,0.00023,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.5 +5890000,1,-0.0094,-0.011,0.00032,0.0038,-0.0007,0.0028,0,0,-4.9e+02,-0.0014,-0.0056,-8.6e-05,0,0,-0.00013,0,0,0,0,0,0,0,0,-4.9e+02,0.0021,0.0021,0.00061,0.23,0.23,9.8,0.1,0.1,0.52,0.00019,0.00019,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.5 +5990000,1,-0.0094,-0.011,0.00034,0.0041,0.00081,0.015,0,0,-4.9e+02,-0.0014,-0.0056,-8.6e-05,0,0,-0.00014,0,0,0,0,0,0,0,0,-4.9e+02,0.0022,0.0022,0.00062,0.27,0.27,8.8,0.13,0.13,0.33,0.00019,0.00019,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.5 +6090000,1,-0.0094,-0.011,0.00033,0.0051,0.002,-0.011,0,0,-4.9e+02,-0.0014,-0.0056,-8.6e-05,0,0,-0.00013,0,0,0,0,0,0,0,0,-4.9e+02,0.0023,0.0023,0.00063,0.31,0.31,7,0.17,0.17,0.33,0.00019,0.00019,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.6 +6190000,1,-0.0094,-0.011,0.00025,0.0038,0.0044,-0.005,0,0,-4.9e+02,-0.0015,-0.0056,-8.7e-05,0,0,-0.00015,0,0,0,0,0,0,0,0,-4.9e+02,0.0019,0.0019,0.00064,0.25,0.25,4.9,0.13,0.13,0.32,0.00015,0.00015,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.6 +6290000,1,-0.0094,-0.011,0.00023,0.005,0.0045,-0.012,0,0,-4.9e+02,-0.0015,-0.0056,-8.7e-05,0,0,-0.00016,0,0,0,0,0,0,0,0,-4.9e+02,0.002,0.002,0.00065,0.28,0.28,3.2,0.16,0.16,0.3,0.00015,0.00015,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.6 +6390000,1,-0.0093,-0.011,0.00025,0.0043,0.0055,-0.05,0,0,-4.9e+02,-0.0015,-0.0057,-8.7e-05,0,0,-0.0001,0,0,0,0,0,0,0,0,-4.9e+02,0.0017,0.0017,0.00066,0.22,0.22,2.3,0.12,0.12,0.29,0.00013,0.00012,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.6 +6490000,1,-0.0093,-0.011,0.00024,0.0049,0.0058,-0.052,0,0,-4.9e+02,-0.0015,-0.0057,-8.7e-05,0,0,-0.00015,0,0,0,0,0,0,0,0,-4.9e+02,0.0018,0.0018,0.00067,0.26,0.26,1.5,0.15,0.15,0.26,0.00013,0.00012,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.7 +6590000,1,-0.0093,-0.011,0.00018,0.0037,0.0057,-0.099,0,0,-4.9e+02,-0.0014,-0.0057,-8.7e-05,0,0,2.9e-05,0,0,0,0,0,0,0,0,-4.9e+02,0.0015,0.0015,0.00068,0.2,0.2,1.1,0.12,0.12,0.23,0.0001,0.0001,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.7 +6690000,1,-0.0093,-0.011,0.00011,0.0046,0.0053,-0.076,0,0,-4.9e+02,-0.0014,-0.0057,-8.7e-05,0,0,-0.00029,0,0,0,0,0,0,0,0,-4.9e+02,0.0016,0.0016,0.00069,0.23,0.23,0.78,0.14,0.14,0.21,0.0001,0.0001,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.7 +6790000,0.71,0.0012,-0.014,0.71,-0.0056,0.0034,-0.11,0,0,-4.9e+02,-0.0015,-0.0057,-0.00016,0,0,-6.5e-05,0.21,0.00022,0.43,0.0002,0.00068,-0.0026,0,0,-4.9e+02,0.0013,0.0013,0.055,0.18,0.18,0.6,0.1,0.1,0.2,8.5e-05,8.1e-05,0.01,0.04,0.04,0.04,0.0015,0.0014,0.0015,0.0019,0.0015,0.0015,1,1,1.7 +6890000,0.71,0.0013,-0.014,0.7,-0.0077,0.0039,-0.12,0,0,-4.9e+02,-0.0015,-0.0057,0.00027,0,0,-9.4e-05,0.21,3.8e-05,0.43,6.5e-05,0.001,-0.00079,0,0,-4.9e+02,0.0013,0.0013,0.047,0.18,0.18,0.46,0.1,0.1,0.18,8.4e-05,8.1e-05,0.01,0.04,0.04,0.04,0.0014,0.00069,0.0013,0.0017,0.0014,0.0013,1,1,1.8 +6990000,0.71,0.0013,-0.014,0.71,-0.0079,0.0042,-0.12,0,0,-4.9e+02,-0.0014,-0.0057,-0.00086,-8.2e-06,-0.00025,-0.00041,0.21,-2.8e-05,0.43,-0.00021,0.00062,-0.00035,0,0,-4.9e+02,0.0013,0.0013,0.045,0.19,0.19,0.36,0.11,0.11,0.16,8.4e-05,8.1e-05,0.0099,0.04,0.04,0.04,0.0013,0.00046,0.0013,0.0017,0.0013,0.0013,1,1,1.8 +7090000,0.71,0.0012,-0.014,0.71,-0.0084,0.0028,-0.13,0,0,-4.9e+02,-0.0014,-0.0057,-0.0018,0.00025,-0.00055,-0.00078,0.21,-2.9e-05,0.43,-0.00034,0.00028,-0.00036,0,0,-4.9e+02,0.0013,0.0013,0.044,0.2,0.2,0.29,0.12,0.12,0.16,8.4e-05,8.1e-05,0.0097,0.04,0.04,0.04,0.0013,0.00035,0.0013,0.0017,0.0013,0.0013,1,1,1.8 +7190000,0.71,0.0013,-0.014,0.71,-0.01,0.0027,-0.15,0,0,-4.9e+02,-0.0014,-0.0057,-0.0015,0.0002,-0.00048,-0.00057,0.21,-2.3e-05,0.43,-0.00032,0.00038,-0.00041,0,0,-4.9e+02,0.0013,0.0013,0.043,0.21,0.21,0.24,0.14,0.14,0.15,8.4e-05,8.1e-05,0.0094,0.04,0.04,0.04,0.0013,0.00028,0.0013,0.0016,0.0013,0.0013,1,1,1.8 +7290000,0.71,0.0015,-0.014,0.71,-0.012,0.005,-0.15,0,0,-4.9e+02,-0.0015,-0.0057,-0.00031,-0.00016,-0.00021,-0.0012,0.21,-2.7e-05,0.43,-0.0003,0.0008,-0.00035,0,0,-4.9e+02,0.0013,0.0013,0.042,0.22,0.23,0.2,0.16,0.16,0.14,8.4e-05,8.1e-05,0.009,0.04,0.04,0.04,0.0013,0.00023,0.0013,0.0016,0.0013,0.0013,1,1,1.9 +7390000,0.71,0.0015,-0.014,0.71,-0.012,0.0077,-0.16,0,0,-4.9e+02,-0.0015,-0.0057,0.00072,-0.00023,-7.7e-05,-0.0014,0.21,-2.5e-05,0.43,-0.00031,0.00089,-0.00029,0,0,-4.9e+02,0.0013,0.0013,0.042,0.24,0.25,0.18,0.18,0.18,0.13,8.3e-05,8.1e-05,0.0085,0.04,0.04,0.039,0.0013,0.0002,0.0013,0.0016,0.0013,0.0013,1,1,1.9 +7490000,0.71,0.0015,-0.014,0.71,-0.013,0.0065,-0.16,0,0,-4.9e+02,-0.0015,-0.0057,0.0013,-0.00012,-0.00014,-0.0022,0.21,-1.8e-05,0.43,-0.00029,0.00081,-0.0004,0,0,-4.9e+02,0.0013,0.0013,0.042,0.27,0.27,0.15,0.21,0.21,0.12,8.2e-05,8.1e-05,0.0079,0.04,0.04,0.039,0.0013,0.00018,0.0013,0.0016,0.0013,0.0013,1,1,1.9 +7590000,0.71,0.0016,-0.014,0.71,-0.014,0.011,-0.17,0,0,-4.9e+02,-0.0015,-0.0057,0.0029,-0.00019,6.5e-05,-0.003,0.21,-1.9e-05,0.43,-0.00035,0.00088,-0.00024,0,0,-4.9e+02,0.0014,0.0013,0.042,0.29,0.3,0.14,0.25,0.25,0.12,8.1e-05,8.1e-05,0.0073,0.04,0.04,0.039,0.0013,0.00016,0.0013,0.0016,0.0013,0.0013,1,1,1.9 +7690000,0.71,0.0016,-0.014,0.71,-0.016,0.01,-0.16,0,0,-4.9e+02,-0.0015,-0.0057,0.0027,-0.0002,3e-05,-0.0051,0.21,-1.6e-05,0.43,-0.00032,0.00085,-0.00032,0,0,-4.9e+02,0.0014,0.0013,0.042,0.32,0.32,0.13,0.29,0.29,0.11,8e-05,8.1e-05,0.0067,0.04,0.04,0.039,0.0013,0.00014,0.0013,0.0016,0.0013,0.0013,1,1,2 +7790000,0.71,0.0017,-0.014,0.71,-0.018,0.011,-0.16,0,0,-4.9e+02,-0.0015,-0.0057,-0.00018,-0.0003,4.3e-05,-0.0071,0.21,-1.3e-05,0.43,-0.0003,0.00081,-0.00036,0,0,-4.9e+02,0.0014,0.0014,0.042,0.36,0.36,0.12,0.34,0.34,0.11,7.9e-05,8.1e-05,0.006,0.04,0.04,0.038,0.0013,0.00013,0.0013,0.0016,0.0013,0.0013,1,1,2 +7890000,0.71,0.0017,-0.014,0.71,-0.02,0.013,-0.16,0,0,-4.9e+02,-0.0015,-0.0057,0.0012,-0.00034,0.0001,-0.0096,0.21,-1.3e-05,0.43,-0.00033,0.00079,-0.00028,0,0,-4.9e+02,0.0014,0.0014,0.042,0.39,0.39,0.11,0.4,0.4,0.1,7.7e-05,8.1e-05,0.0053,0.04,0.04,0.038,0.0013,0.00012,0.0013,0.0016,0.0013,0.0013,1,1,2 +7990000,0.71,0.0017,-0.014,0.71,-0.00073,0.001,-0.16,0,0,-4.9e+02,-0.0015,-0.0057,0.0022,-0.00035,9.4e-05,-0.011,0.21,-1.2e-05,0.43,-0.00035,0.00084,-0.00038,0,0,-4.9e+02,0.0014,0.0014,0.042,25,25,0.1,1e+02,1e+02,0.099,7.5e-05,8.1e-05,0.0047,0.04,0.04,0.038,0.0013,0.00011,0.0013,0.0016,0.0013,0.0013,1,1,2 +8090000,0.71,0.0016,-0.014,0.71,-0.0023,0.0026,-0.17,0,0,-4.9e+02,-0.0014,-0.0057,0.0036,-0.00035,9.4e-05,-0.011,0.21,-1.1e-05,0.43,-0.00035,0.00086,-0.00036,0,0,-4.9e+02,0.0014,0.0014,0.042,25,25,0.1,1e+02,1e+02,0.097,7.4e-05,8.1e-05,0.0043,0.04,0.04,0.037,0.0013,0.0001,0.0013,0.0016,0.0013,0.0013,1,1,2.1 +8190000,0.71,0.0017,-0.014,0.71,-0.0051,0.0045,-0.18,0,0,-4.9e+02,-0.0015,-0.0057,0.0017,-0.00035,9.4e-05,-0.013,0.21,-1e-05,0.43,-0.00035,0.00083,-0.00036,0,0,-4.9e+02,0.0014,0.0014,0.041,25,25,0.099,50,50,0.094,7.1e-05,8.1e-05,0.0038,0.04,0.04,0.037,0.0013,9.4e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.1 +8290000,0.71,0.0017,-0.014,0.71,-0.0062,0.0047,-0.17,0,0,-4.9e+02,-0.0015,-0.0057,0.00069,-0.00035,9.4e-05,-0.017,0.21,-7.8e-06,0.43,-0.00029,0.00078,-0.00034,0,0,-4.9e+02,0.0014,0.0014,0.041,25,25,0.097,51,51,0.091,6.9e-05,8.1e-05,0.0033,0.04,0.04,0.036,0.0013,8.8e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.1 +8390000,0.71,0.0017,-0.014,0.71,-0.0076,0.0058,-0.17,0,0,-4.9e+02,-0.0014,-0.0057,0.002,-0.00035,9.4e-05,-0.021,0.21,-7.9e-06,0.43,-0.0003,0.00078,-0.00032,0,0,-4.9e+02,0.0014,0.0014,0.041,24,24,0.097,35,35,0.091,6.7e-05,8.1e-05,0.003,0.04,0.04,0.035,0.0013,8.3e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.1 +8490000,0.71,0.0017,-0.014,0.71,-0.0097,0.0078,-0.17,0,0,-4.9e+02,-0.0014,-0.0057,0.0013,-0.00035,9.4e-05,-0.025,0.21,-7.2e-06,0.43,-0.0003,0.00076,-0.00028,0,0,-4.9e+02,0.0014,0.0014,0.041,25,25,0.096,36,36,0.089,6.5e-05,8.1e-05,0.0027,0.04,0.04,0.034,0.0013,7.8e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.2 +8590000,0.71,0.0021,-0.014,0.71,-0.014,0.014,-0.17,0,0,-4.9e+02,-0.0017,-0.0057,-1.8e-05,-0.00035,9.4e-05,-0.029,0.21,-9.4e-06,0.43,-0.00039,0.00076,-0.00026,0,0,-4.9e+02,0.0014,0.0015,0.041,24,24,0.095,28,28,0.088,6.2e-05,8.1e-05,0.0024,0.04,0.04,0.033,0.0013,7.4e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.2 +8690000,0.71,0.002,-0.014,0.71,-0.016,0.015,-0.16,0,0,-4.9e+02,-0.0016,-0.0057,0.0015,-0.00035,9.4e-05,-0.035,0.21,-8.8e-06,0.43,-0.00038,0.00078,-0.00031,0,0,-4.9e+02,0.0014,0.0015,0.041,24,24,0.096,29,29,0.088,6e-05,8.1e-05,0.0022,0.04,0.04,0.033,0.0013,7.1e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.2 +8790000,0.71,0.0019,-0.014,0.71,-0.018,0.015,-0.15,0,0,-4.9e+02,-0.0016,-0.0057,0.00072,-0.00035,9.4e-05,-0.041,0.21,-7.4e-06,0.43,-0.00035,0.00076,-0.00029,0,0,-4.9e+02,0.0014,0.0015,0.041,23,23,0.095,24,24,0.087,5.8e-05,8.1e-05,0.002,0.04,0.04,0.032,0.0013,6.7e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.2 +8890000,0.71,0.0019,-0.014,0.71,-0.019,0.015,-0.15,0,0,-4.9e+02,-0.0015,-0.0057,0.00032,-0.00035,9.4e-05,-0.045,0.21,-6e-06,0.43,-0.00031,0.00076,-0.00033,0,0,-4.9e+02,0.0014,0.0015,0.041,23,23,0.095,26,26,0.086,5.5e-05,8.1e-05,0.0018,0.04,0.04,0.03,0.0013,6.4e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.3 +8990000,0.71,0.0018,-0.014,0.71,-0.021,0.014,-0.14,0,0,-4.9e+02,-0.0015,-0.0057,-0.00052,-0.00035,9.4e-05,-0.051,0.21,-4.5e-06,0.43,-0.00025,0.00074,-0.00032,0,0,-4.9e+02,0.0014,0.0015,0.041,23,23,0.096,29,29,0.087,5.3e-05,8.1e-05,0.0016,0.04,0.04,0.029,0.0013,6.2e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.3 +9090000,0.71,0.002,-0.014,0.71,-0.023,0.016,-0.14,0,0,-4.9e+02,-0.0015,-0.0057,-0.00091,-0.00035,9.4e-05,-0.053,0.21,-4.8e-06,0.43,-0.00027,0.00073,-0.00031,0,0,-4.9e+02,0.0014,0.0015,0.041,21,21,0.095,25,25,0.086,5e-05,8.1e-05,0.0015,0.04,0.04,0.028,0.0013,5.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.3 +9190000,0.71,0.0019,-0.014,0.71,-0.023,0.016,-0.14,0,0,-4.9e+02,-0.0014,-0.0057,0.00078,-0.00035,9.4e-05,-0.057,0.21,-4.9e-06,0.43,-0.00029,0.00072,-0.00027,0,0,-4.9e+02,0.0014,0.0015,0.041,21,21,0.094,27,27,0.085,4.8e-05,8.1e-05,0.0014,0.04,0.04,0.027,0.0013,5.7e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.3 +9290000,0.71,0.0017,-0.014,0.71,-0.022,0.013,-0.14,0,0,-4.9e+02,-0.0014,-0.0057,0.00086,-0.00035,9.4e-05,-0.061,0.21,-3.9e-06,0.43,-0.00024,0.00072,-0.00027,0,0,-4.9e+02,0.0014,0.0015,0.041,19,19,0.093,24,24,0.085,4.5e-05,8.1e-05,0.0013,0.04,0.04,0.025,0.0013,5.4e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.4 +9390000,0.71,0.0015,-0.014,0.71,-0.022,0.013,-0.14,0,0,-4.9e+02,-0.0013,-0.0057,0.00077,-0.00035,9.4e-05,-0.065,0.21,-3.1e-06,0.43,-0.0002,0.00072,-0.00025,0,0,-4.9e+02,0.0015,0.0015,0.042,19,19,0.093,27,27,0.086,4.3e-05,8.1e-05,0.0012,0.04,0.04,0.024,0.0013,5.2e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.4 +9490000,0.71,0.0014,-0.014,0.71,-0.02,0.0099,-0.13,0,0,-4.9e+02,-0.0012,-0.0057,0.0016,-0.00035,9.4e-05,-0.068,0.21,-3e-06,0.43,-0.00017,0.00072,-0.00019,0,0,-4.9e+02,0.0015,0.0015,0.042,17,17,0.091,24,24,0.085,4.1e-05,8.1e-05,0.0011,0.04,0.04,0.023,0.0013,5e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.4 +9590000,0.71,0.0016,-0.014,0.71,-0.025,0.015,-0.13,0,0,-4.9e+02,-0.0013,-0.0057,0.0016,-0.00035,9.4e-05,-0.072,0.21,-3.7e-06,0.43,-0.00025,0.00071,-0.0002,0,0,-4.9e+02,0.0015,0.0015,0.042,17,17,0.09,27,27,0.085,3.9e-05,8.1e-05,0.001,0.04,0.04,0.021,0.0013,4.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.4 +9690000,0.71,0.0018,-0.014,0.71,-0.027,0.018,-0.12,0,0,-4.9e+02,-0.0014,-0.0057,0.00069,-0.00035,9.4e-05,-0.077,0.21,-3.7e-06,0.43,-0.00025,0.00068,-0.0002,0,0,-4.9e+02,0.0015,0.0016,0.042,15,15,0.089,23,23,0.086,3.7e-05,8.1e-05,0.00095,0.04,0.04,0.02,0.0013,4.7e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.5 +9790000,0.71,0.0017,-0.014,0.71,-0.025,0.019,-0.11,0,0,-4.9e+02,-0.0014,-0.0057,0.0011,-0.00035,9.4e-05,-0.082,0.21,-3.6e-06,0.43,-0.00023,0.00067,-0.00016,0,0,-4.9e+02,0.0015,0.0016,0.042,15,15,0.087,26,26,0.085,3.5e-05,8.1e-05,0.0009,0.04,0.04,0.019,0.0013,4.6e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.5 +9890000,0.71,0.0018,-0.014,0.71,-0.027,0.02,-0.11,0,0,-4.9e+02,-0.0014,-0.0057,0.00093,-0.00035,9.4e-05,-0.085,0.21,-3.7e-06,0.43,-0.00025,0.00067,-0.00016,0,0,-4.9e+02,0.0016,0.0016,0.042,13,13,0.084,23,23,0.085,3.3e-05,8e-05,0.00085,0.04,0.04,0.018,0.0013,4.4e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.5 +9990000,0.71,0.0019,-0.014,0.71,-0.028,0.02,-0.1,0,0,-4.9e+02,-0.0014,-0.0057,0.00054,-0.00035,9.4e-05,-0.089,0.21,-3.2e-06,0.43,-0.00023,0.00066,-0.00017,0,0,-4.9e+02,0.0016,0.0016,0.042,14,13,0.083,26,26,0.086,3.1e-05,8e-05,0.00081,0.04,0.04,0.017,0.0013,4.3e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.5 +10090000,0.71,0.002,-0.014,0.71,-0.029,0.022,-0.096,0,0,-4.9e+02,-0.0015,-0.0057,0.00062,-0.00035,9.4e-05,-0.091,0.21,-3.7e-06,0.43,-0.00027,0.00065,-0.00017,0,0,-4.9e+02,0.0016,0.0016,0.042,12,12,0.08,23,23,0.085,3e-05,8e-05,0.00076,0.04,0.04,0.016,0.0013,4.2e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.6 +10190000,0.71,0.0021,-0.014,0.71,-0.032,0.025,-0.096,0,0,-4.9e+02,-0.0015,-0.0057,-0.00022,-0.00035,9.4e-05,-0.093,0.21,-3.4e-06,0.43,-0.00024,0.00064,-0.00014,0,0,-4.9e+02,0.0016,0.0016,0.042,12,12,0.078,25,25,0.084,2.8e-05,8e-05,0.00073,0.04,0.04,0.014,0.0013,4e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.6 +10290000,0.71,0.0021,-0.014,0.71,-0.031,0.023,-0.084,0,0,-4.9e+02,-0.0015,-0.0057,-0.00067,-0.00035,9.4e-05,-0.098,0.21,-3e-06,0.43,-0.00023,0.00064,-0.00012,0,0,-4.9e+02,0.0017,0.0016,0.043,10,10,0.076,22,22,0.085,2.6e-05,8e-05,0.0007,0.04,0.04,0.014,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.6 +10390000,0.71,0.0019,-0.014,0.71,0.0085,-0.018,-0.067,0,0,-4.9e+02,-0.0014,-0.0057,-0.00058,-0.00045,6.4e-05,-0.11,0.21,-2.4e-06,0.43,-0.00021,0.00066,-9e-05,0,0,-4.9e+02,0.0016,0.0015,0.043,0.25,0.25,0.065,0.5,0.5,0.077,2.5e-05,7.8e-05,0.00066,0.04,0.04,0.011,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.6 +10490000,0.71,0.0019,-0.014,0.71,0.0073,-0.017,-0.056,0,0,-4.9e+02,-0.0014,-0.0057,-0.00092,-0.00056,0.00015,-0.11,0.21,-1.9e-06,0.43,-0.00019,0.00067,-8.3e-05,0,0,-4.9e+02,0.0017,0.0015,0.043,0.25,0.25,0.064,0.51,0.51,0.077,2.3e-05,7.8e-05,0.00063,0.04,0.04,0.011,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.7 +10590000,0.71,0.0022,-0.014,0.71,0.0066,-0.0062,-0.044,0,0,-4.9e+02,-0.0015,-0.0057,-0.00087,-0.00079,0.00068,-0.11,0.21,-3.4e-06,0.43,-0.00024,0.00065,-8.9e-05,0,0,-4.9e+02,0.0017,0.0015,0.043,0.13,0.13,0.056,0.17,0.17,0.072,2.2e-05,7.6e-05,0.0006,0.04,0.04,0.0092,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.7 +10690000,0.71,0.0022,-0.014,0.71,0.0046,-0.0062,-0.04,0,0,-4.9e+02,-0.0015,-0.0057,-0.00091,-0.00088,0.00068,-0.11,0.21,-2.9e-06,0.43,-0.00023,0.00066,-9.2e-05,0,0,-4.9e+02,0.0017,0.0015,0.043,0.14,0.14,0.056,0.18,0.18,0.073,2.1e-05,7.6e-05,0.00058,0.04,0.04,0.0087,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.7 +10790000,0.71,0.0021,-0.014,0.71,0.0047,-0.004,-0.036,0,0,-4.9e+02,-0.0015,-0.0057,-0.0008,-0.001,0.00099,-0.12,0.21,-2.7e-06,0.43,-0.00023,0.00067,-8.8e-05,0,0,-4.9e+02,0.0017,0.0014,0.043,0.097,0.098,0.05,0.11,0.11,0.068,2e-05,7.3e-05,0.00055,0.039,0.039,0.0076,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.7 +10890000,0.71,0.0019,-0.014,0.71,0.0038,-0.0036,-0.038,0,0,-4.9e+02,-0.0014,-0.0057,-0.00073,-0.0011,0.00095,-0.12,0.21,-2.4e-06,0.43,-0.00022,0.00068,-9e-05,0,0,-4.9e+02,0.0017,0.0014,0.043,0.11,0.11,0.049,0.11,0.11,0.068,1.9e-05,7.3e-05,0.00053,0.039,0.039,0.0072,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.8 +10990000,0.71,0.0017,-0.014,0.71,0.0076,0.00029,-0.034,0,0,-4.9e+02,-0.0013,-0.0056,-0.00046,-0.0013,0.0019,-0.12,0.21,-1.7e-06,0.43,-0.0002,0.00075,-8.3e-05,0,0,-4.9e+02,0.0016,0.0013,0.043,0.084,0.087,0.045,0.079,0.079,0.066,1.7e-05,6.8e-05,0.0005,0.038,0.038,0.0064,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.8 +11090000,0.71,0.0018,-0.014,0.71,0.0063,0.0023,-0.029,0,0,-4.9e+02,-0.0013,-0.0056,-9e-05,-0.0013,0.0019,-0.12,0.21,-2e-06,0.43,-0.00022,0.00074,-7.4e-05,0,0,-4.9e+02,0.0016,0.0013,0.043,0.098,0.1,0.044,0.085,0.085,0.066,1.6e-05,6.8e-05,0.00048,0.038,0.038,0.0061,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.8 +11190000,0.71,0.0017,-0.014,0.71,0.011,0.0051,-0.031,0,0,-4.9e+02,-0.0013,-0.0056,-0.00037,-0.0011,0.0027,-0.12,0.21,-2e-06,0.43,-0.00022,0.0008,-6.5e-05,0,0,-4.9e+02,0.0014,0.0012,0.042,0.079,0.084,0.041,0.066,0.066,0.063,1.5e-05,6.1e-05,0.00044,0.036,0.037,0.0055,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.8 +11290000,0.71,0.0017,-0.014,0.71,0.012,0.0058,-0.03,0,0,-4.9e+02,-0.0013,-0.0056,-0.00069,-0.0014,0.0027,-0.12,0.21,-1.4e-06,0.43,-0.00019,0.00081,-5.8e-05,0,0,-4.9e+02,0.0015,0.0012,0.042,0.094,0.1,0.041,0.072,0.072,0.064,1.5e-05,6.1e-05,0.00043,0.036,0.037,0.0052,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.9 +11390000,0.71,0.0017,-0.014,0.71,0.0074,0.0049,-0.03,0,0,-4.9e+02,-0.0013,-0.0056,-0.00081,-0.0018,0.002,-0.12,0.21,-1.1e-06,0.43,-0.00017,0.00077,-9.5e-05,0,0,-4.9e+02,0.0013,0.0011,0.042,0.077,0.083,0.037,0.058,0.059,0.061,1.3e-05,5.4e-05,0.00039,0.034,0.035,0.0047,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.9 +11490000,0.71,0.0016,-0.014,0.71,0.0064,0.0059,-0.027,0,0,-4.9e+02,-0.0012,-0.0056,-0.0013,-0.0022,0.002,-0.12,0.21,-4.8e-07,0.43,-0.00013,0.00078,-0.00011,0,0,-4.9e+02,0.0013,0.0011,0.042,0.092,0.1,0.037,0.065,0.065,0.061,1.3e-05,5.4e-05,0.00038,0.034,0.035,0.0045,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.9 +11590000,0.71,0.0014,-0.014,0.71,0.0024,0.0051,-0.028,0,0,-4.9e+02,-0.0012,-0.0057,-0.0012,-0.0027,0.0014,-0.12,0.21,1.3e-07,0.43,-0.00011,0.00076,-0.00012,0,0,-4.9e+02,0.0011,0.00097,0.041,0.075,0.082,0.035,0.054,0.054,0.06,1.2e-05,4.8e-05,0.00034,0.031,0.034,0.0041,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,2.9 +11690000,0.71,0.0012,-0.014,0.71,0.0021,0.0059,-0.029,0,0,-4.9e+02,-0.0011,-0.0057,-0.0013,-0.0035,0.0013,-0.12,0.21,8.5e-07,0.43,-6.6e-05,0.00078,-0.00014,0,0,-4.9e+02,0.0011,0.00097,0.041,0.089,0.099,0.034,0.061,0.062,0.06,1.1e-05,4.8e-05,0.00033,0.031,0.034,0.0039,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3 +11790000,0.71,0.0012,-0.014,0.71,-0.0031,0.006,-0.027,0,0,-4.9e+02,-0.0011,-0.0057,-0.0012,-0.0051,0.00074,-0.12,0.21,1.3e-06,0.43,-4.7e-05,0.00073,-0.00016,0,0,-4.9e+02,0.00093,0.00086,0.041,0.073,0.08,0.032,0.051,0.052,0.058,1e-05,4.2e-05,0.0003,0.029,0.033,0.0035,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3 +11890000,0.71,0.0011,-0.014,0.71,-0.0026,0.0055,-0.025,0,0,-4.9e+02,-0.001,-0.0057,-0.0014,-0.0056,0.00069,-0.12,0.21,1.6e-06,0.43,-1e-05,0.00075,-0.00019,0,0,-4.9e+02,0.00095,0.00086,0.041,0.086,0.096,0.031,0.059,0.059,0.058,1e-05,4.2e-05,0.00029,0.029,0.033,0.0034,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3 +11990000,0.71,0.0014,-0.014,0.71,-0.0074,0.0083,-0.027,0,0,-4.9e+02,-0.0011,-0.0057,-0.0013,-0.005,0.00072,-0.12,0.21,6.3e-07,0.43,-4.8e-05,0.00073,-0.00019,0,0,-4.9e+02,0.00079,0.00076,0.04,0.07,0.077,0.03,0.05,0.05,0.057,9.4e-06,3.7e-05,0.00027,0.026,0.033,0.0031,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3 +12090000,0.71,0.0015,-0.014,0.71,-0.0094,0.011,-0.03,0,0,-4.9e+02,-0.0012,-0.0057,-0.001,-0.0041,0.00084,-0.12,0.21,6.1e-09,0.43,-9.4e-05,0.00072,-0.00017,0,0,-4.9e+02,0.00081,0.00076,0.04,0.081,0.091,0.029,0.057,0.058,0.057,9e-06,3.7e-05,0.00026,0.026,0.033,0.003,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.1 +12190000,0.71,0.0012,-0.014,0.71,-0.0039,0.0092,-0.023,0,0,-4.9e+02,-0.0011,-0.0057,-0.00093,-0.004,0.001,-0.13,0.21,7.4e-07,0.43,-4.4e-05,0.00077,-0.00017,0,0,-4.9e+02,0.00068,0.00068,0.04,0.067,0.074,0.028,0.049,0.049,0.055,8.4e-06,3.3e-05,0.00024,0.024,0.032,0.0027,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.1 +12290000,0.71,0.0011,-0.014,0.71,-0.0051,0.0099,-0.02,0,0,-4.9e+02,-0.001,-0.0057,-0.00085,-0.0046,0.00088,-0.13,0.21,1e-06,0.43,-3.1e-05,0.00077,-0.00017,0,0,-4.9e+02,0.0007,0.00068,0.04,0.077,0.086,0.027,0.056,0.057,0.056,8.1e-06,3.3e-05,0.00023,0.024,0.032,0.0026,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.1 +12390000,0.71,0.001,-0.014,0.71,-0.0024,0.0088,-0.016,0,0,-4.9e+02,-0.0011,-0.0057,-0.00098,-0.0029,0.0014,-0.13,0.21,9.5e-07,0.43,-4.2e-05,0.00079,-0.00015,0,0,-4.9e+02,0.0006,0.00062,0.04,0.063,0.07,0.026,0.048,0.049,0.055,7.6e-06,3e-05,0.00021,0.022,0.032,0.0024,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.1 +12490000,0.71,0.00098,-0.014,0.71,-0.0029,0.011,-0.016,0,0,-4.9e+02,-0.001,-0.0057,-0.0012,-0.0031,0.0014,-0.13,0.21,1.3e-06,0.43,-5.4e-05,0.00077,-0.00013,0,0,-4.9e+02,0.00061,0.00062,0.04,0.072,0.081,0.025,0.056,0.057,0.055,7.3e-06,3e-05,0.00021,0.022,0.032,0.0023,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.2 +12590000,0.71,0.0011,-0.014,0.71,-0.011,0.0093,-0.02,0,0,-4.9e+02,-0.0011,-0.0057,-0.001,-0.0023,0.00094,-0.13,0.21,8.6e-07,0.43,-0.0001,0.0007,-0.00014,0,0,-4.9e+02,0.00053,0.00057,0.04,0.059,0.066,0.024,0.048,0.048,0.054,6.9e-06,2.8e-05,0.00019,0.02,0.031,0.0022,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.2 +12690000,0.71,0.0014,-0.014,0.71,-0.014,0.012,-0.021,0,0,-4.9e+02,-0.0012,-0.0057,-0.0011,-0.00027,0.0014,-0.13,0.21,6.7e-09,0.43,-0.00014,0.00072,-0.00013,0,0,-4.9e+02,0.00055,0.00057,0.04,0.067,0.076,0.024,0.055,0.056,0.054,6.7e-06,2.8e-05,0.00019,0.02,0.031,0.0021,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.2 +12790000,0.71,0.0012,-0.014,0.71,-0.017,0.008,-0.022,0,0,-4.9e+02,-0.0012,-0.0058,-0.00098,-0.0019,0.00071,-0.13,0.21,5.5e-07,0.43,-0.0001,0.00067,-0.00016,0,0,-4.9e+02,0.00048,0.00053,0.039,0.056,0.062,0.023,0.047,0.048,0.053,6.3e-06,2.6e-05,0.00018,0.019,0.031,0.0019,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.2 +12890000,0.71,0.0011,-0.014,0.71,-0.017,0.0073,-0.019,0,0,-4.9e+02,-0.0011,-0.0058,-0.00094,-0.0032,0.00042,-0.13,0.21,1e-06,0.43,-7.5e-05,0.00066,-0.00016,0,0,-4.9e+02,0.00049,0.00053,0.04,0.063,0.071,0.023,0.055,0.056,0.053,6.1e-06,2.6e-05,0.00017,0.019,0.031,0.0018,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.3 +12990000,0.71,0.001,-0.014,0.71,-0.007,0.0064,-0.018,0,0,-4.9e+02,-0.0011,-0.0058,-0.00082,-0.00088,0.0014,-0.13,0.21,8.1e-07,0.43,-9.3e-05,0.00073,-0.0001,0,0,-4.9e+02,0.00044,0.00049,0.039,0.052,0.059,0.021,0.047,0.048,0.052,5.8e-06,2.4e-05,0.00016,0.018,0.031,0.0017,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.3 +13090000,0.71,0.00095,-0.014,0.71,-0.0069,0.0063,-0.016,0,0,-4.9e+02,-0.0011,-0.0057,-0.001,-0.0016,0.0013,-0.13,0.21,1.1e-06,0.43,-7e-05,0.00072,-0.00012,0,0,-4.9e+02,0.00045,0.00049,0.039,0.058,0.067,0.021,0.055,0.056,0.052,5.6e-06,2.4e-05,0.00016,0.017,0.031,0.0016,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.3 +13190000,0.71,0.00094,-0.014,0.71,0.00013,0.0068,-0.012,0,0,-4.9e+02,-0.0011,-0.0057,-0.001,0.00047,0.0022,-0.13,0.21,8.1e-07,0.43,-8.4e-05,0.00078,-8.3e-05,0,0,-4.9e+02,0.00041,0.00047,0.039,0.049,0.055,0.02,0.047,0.048,0.051,5.3e-06,2.3e-05,0.00015,0.016,0.031,0.0015,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.3 +13290000,0.71,0.0008,-0.014,0.71,0.0014,0.0072,-0.007,0,0,-4.9e+02,-0.001,-0.0057,-0.00088,-0.0013,0.0017,-0.13,0.21,1.5e-06,0.43,-6.3e-05,0.00076,-9.1e-05,0,0,-4.9e+02,0.00042,0.00047,0.039,0.054,0.063,0.02,0.054,0.055,0.051,5.2e-06,2.3e-05,0.00015,0.016,0.031,0.0015,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.4 +13390000,0.71,0.0007,-0.014,0.71,0.0018,0.0065,-0.0026,0,0,-4.9e+02,-0.001,-0.0057,-0.00075,-0.00089,0.0019,-0.13,0.21,1.2e-06,0.43,-5.8e-05,0.00078,-9.9e-05,0,0,-4.9e+02,0.00039,0.00044,0.039,0.046,0.052,0.019,0.047,0.047,0.05,4.9e-06,2.2e-05,0.00014,0.016,0.031,0.0014,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.4 +13490000,0.71,0.00071,-0.014,0.71,0.0017,0.0066,0.0004,0,0,-4.9e+02,-0.001,-0.0057,-0.00066,-0.0011,0.0018,-0.13,0.21,1.3e-06,0.43,-6.6e-05,0.00077,-8.9e-05,0,0,-4.9e+02,0.0004,0.00045,0.039,0.051,0.059,0.019,0.054,0.055,0.05,4.8e-06,2.2e-05,0.00014,0.015,0.031,0.0013,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.4 +13590000,0.71,0.00072,-0.014,0.71,0.0014,0.007,-0.00096,0,0,-4.9e+02,-0.001,-0.0058,-0.00074,-0.00056,0.0021,-0.13,0.21,1.2e-06,0.43,-6.6e-05,0.00077,-9.8e-05,0,0,-4.9e+02,0.00037,0.00043,0.039,0.043,0.049,0.018,0.047,0.047,0.05,4.6e-06,2.1e-05,0.00013,0.015,0.03,0.0013,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.4 +13690000,0.71,0.00071,-0.014,0.71,0.0021,0.0091,-0.0037,0,0,-4.9e+02,-0.001,-0.0058,-0.0006,-0.0003,0.0021,-0.13,0.21,1.1e-06,0.43,-8.1e-05,0.00077,-8.2e-05,0,0,-4.9e+02,0.00038,0.00043,0.039,0.047,0.055,0.018,0.053,0.055,0.049,4.4e-06,2.1e-05,0.00013,0.015,0.03,0.0012,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.5 +13790000,0.71,0.00075,-0.014,0.71,0.0016,0.0055,-0.0047,0,0,-4.9e+02,-0.0011,-0.0058,-0.00058,0.0012,0.0029,-0.13,0.21,7.4e-07,0.43,-0.00012,0.00077,-7.5e-05,0,0,-4.9e+02,0.00036,0.00041,0.039,0.04,0.047,0.017,0.046,0.047,0.048,4.2e-06,2e-05,0.00012,0.014,0.03,0.0011,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.5 +13890000,0.71,0.0006,-0.014,0.71,0.0034,0.0054,-0.0073,0,0,-4.9e+02,-0.001,-0.0058,-0.00051,-0.00036,0.0024,-0.13,0.21,1.1e-06,0.43,-8.2e-05,0.00075,-8.3e-05,0,0,-4.9e+02,0.00037,0.00041,0.039,0.044,0.052,0.017,0.053,0.054,0.049,4.1e-06,2e-05,0.00012,0.014,0.03,0.0011,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.5 +13990000,0.71,0.00066,-0.014,0.71,0.0027,0.0032,-0.0067,0,0,-4.9e+02,-0.001,-0.0058,-0.00047,0.00094,0.0032,-0.13,0.21,8.5e-07,0.43,-0.00013,0.00074,-7e-05,0,0,-4.9e+02,0.00035,0.0004,0.039,0.038,0.044,0.016,0.046,0.047,0.048,4e-06,1.9e-05,0.00012,0.014,0.03,0.001,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.5 +14090000,0.71,0.00073,-0.014,0.71,0.002,0.004,-0.0066,0,0,-4.9e+02,-0.0011,-0.0058,-0.00034,0.0021,0.0034,-0.13,0.21,6e-07,0.43,-0.00017,0.00075,-5.1e-05,0,0,-4.9e+02,0.00036,0.0004,0.039,0.041,0.05,0.016,0.053,0.054,0.048,3.8e-06,1.9e-05,0.00011,0.013,0.03,0.001,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.6 +14190000,0.71,0.00069,-0.014,0.71,0.0049,0.0034,-0.008,0,0,-4.9e+02,-0.0011,-0.0058,-0.00029,0.0024,0.0037,-0.13,0.21,5.8e-07,0.43,-0.00018,0.00077,-3.9e-05,0,0,-4.9e+02,0.00034,0.00039,0.039,0.035,0.042,0.015,0.046,0.047,0.047,3.7e-06,1.8e-05,0.00011,0.013,0.03,0.00095,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.6 +14290000,0.71,0.00077,-0.014,0.71,0.0051,0.0047,-0.0064,0,0,-4.9e+02,-0.0011,-0.0058,-0.00026,0.0032,0.0039,-0.13,0.21,4.5e-07,0.43,-0.00021,0.00077,-2.6e-05,0,0,-4.9e+02,0.00035,0.00039,0.039,0.039,0.047,0.015,0.052,0.054,0.047,3.6e-06,1.8e-05,0.00011,0.013,0.03,0.00092,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.6 +14390000,0.71,0.00065,-0.014,0.71,0.0073,0.0054,-0.0083,0,0,-4.9e+02,-0.001,-0.0058,-0.00013,0.0025,0.0039,-0.13,0.21,5.3e-07,0.43,-0.00018,0.00077,-2.2e-05,0,0,-4.9e+02,0.00034,0.00038,0.039,0.033,0.041,0.015,0.046,0.047,0.046,3.5e-06,1.7e-05,0.0001,0.013,0.029,0.00087,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.6 +14490000,0.71,0.00054,-0.014,0.71,0.0083,0.0068,-0.01,0,0,-4.9e+02,-0.001,-0.0058,-0.00012,0.0012,0.0035,-0.13,0.21,7.1e-07,0.43,-0.00013,0.00074,-1.6e-05,0,0,-4.9e+02,0.00035,0.00038,0.039,0.036,0.045,0.014,0.052,0.053,0.046,3.4e-06,1.7e-05,0.0001,0.012,0.029,0.00084,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.7 +14590000,0.71,0.00044,-0.013,0.71,0.0063,0.005,-0.011,0,0,-4.9e+02,-0.001,-0.0058,-8.8e-05,0.00018,0.0036,-0.13,0.21,5.9e-07,0.43,-0.00012,0.00069,-3.6e-05,0,0,-4.9e+02,0.00033,0.00037,0.039,0.031,0.039,0.014,0.045,0.046,0.046,3.2e-06,1.7e-05,9.7e-05,0.012,0.029,0.0008,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.7 +14690000,0.71,0.00039,-0.013,0.71,0.008,0.0025,-0.0077,0,0,-4.9e+02,-0.00099,-0.0058,-2.1e-05,2.4e-06,0.0036,-0.13,0.21,5.8e-07,0.43,-0.00012,0.00069,-2.8e-05,0,0,-4.9e+02,0.00034,0.00037,0.039,0.034,0.044,0.014,0.051,0.053,0.046,3.1e-06,1.7e-05,9.6e-05,0.012,0.029,0.00078,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.7 +14790000,0.71,0.00037,-0.013,0.71,0.0057,0.00071,-0.006,0,0,-4.9e+02,-0.001,-0.0059,1.5e-05,-0.00027,0.0039,-0.13,0.21,3.8e-07,0.43,-0.00014,0.00065,-3.6e-05,0,0,-4.9e+02,0.00033,0.00036,0.039,0.03,0.038,0.013,0.045,0.046,0.045,3e-06,1.6e-05,9.1e-05,0.012,0.028,0.00074,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.7 +14890000,0.71,0.00033,-0.013,0.71,0.0078,0.0021,-0.008,0,0,-4.9e+02,-0.00099,-0.0059,4.8e-05,-0.00065,0.0037,-0.13,0.21,3.9e-07,0.43,-0.00013,0.00065,-3.5e-05,0,0,-4.9e+02,0.00034,0.00036,0.039,0.032,0.042,0.013,0.051,0.053,0.045,3e-06,1.6e-05,9e-05,0.012,0.028,0.00072,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.8 +14990000,0.71,0.00029,-0.013,0.71,0.007,0.0015,-0.006,0,0,-4.9e+02,-0.00099,-0.0059,2.3e-06,-0.00096,0.0037,-0.13,0.21,4.4e-07,0.43,-0.00012,0.00063,-4.2e-05,0,0,-4.9e+02,0.00033,0.00035,0.039,0.028,0.037,0.013,0.045,0.046,0.045,2.8e-06,1.5e-05,8.6e-05,0.012,0.028,0.00068,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.8 +15090000,0.71,0.00022,-0.013,0.71,0.0077,0.0017,-0.0073,0,0,-4.9e+02,-0.00099,-0.0059,-2.6e-05,-0.0009,0.0037,-0.13,0.21,4.9e-07,0.43,-0.00012,0.00062,-4e-05,0,0,-4.9e+02,0.00034,0.00035,0.039,0.031,0.041,0.013,0.05,0.052,0.044,2.8e-06,1.5e-05,8.5e-05,0.011,0.028,0.00066,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.8 +15190000,0.71,0.00018,-0.013,0.71,0.0076,0.0026,-0.0064,0,0,-4.9e+02,-0.00098,-0.0059,-5.7e-05,-0.0014,0.0036,-0.13,0.21,5.9e-07,0.43,-0.00011,0.00059,-4.1e-05,0,0,-4.9e+02,0.00033,0.00034,0.039,0.027,0.036,0.012,0.044,0.046,0.044,2.7e-06,1.4e-05,8.1e-05,0.011,0.027,0.00064,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.8 +15290000,0.71,0.0002,-0.013,0.71,0.008,0.0033,-0.0051,0,0,-4.9e+02,-0.001,-0.0059,-2.1e-05,-0.00061,0.0038,-0.13,0.21,5.6e-07,0.43,-0.00016,0.00059,-2.3e-05,0,0,-4.9e+02,0.00034,0.00034,0.039,0.029,0.04,0.012,0.05,0.052,0.044,2.6e-06,1.4e-05,8e-05,0.011,0.027,0.00062,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.9 +15390000,0.71,0.00021,-0.013,0.7,0.0072,0.0034,-0.004,0,0,-4.9e+02,-0.001,-0.0059,0.0001,-0.00031,0.004,-0.13,0.21,3.2e-07,0.43,-0.00019,0.0006,-1.7e-05,0,0,-4.9e+02,0.00032,0.00033,0.039,0.025,0.035,0.012,0.044,0.046,0.043,2.5e-06,1.4e-05,7.6e-05,0.011,0.027,0.00059,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.9 +15490000,0.71,0.00023,-0.013,0.7,0.0088,0.0033,-0.0032,0,0,-4.9e+02,-0.001,-0.0059,6.1e-06,-0.00028,0.004,-0.13,0.21,4.2e-07,0.43,-0.00018,0.00058,-2.5e-05,0,0,-4.9e+02,0.00033,0.00033,0.039,0.028,0.039,0.012,0.049,0.052,0.044,2.5e-06,1.4e-05,7.5e-05,0.011,0.027,0.00057,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.9 +15590000,0.71,0.00019,-0.013,0.71,0.0074,0.003,-0.0024,0,0,-4.9e+02,-0.001,-0.0059,-4.7e-05,-0.00066,0.004,-0.13,0.21,3.4e-07,0.43,-0.00017,0.00057,-4.5e-05,0,0,-4.9e+02,0.00032,0.00032,0.039,0.024,0.034,0.011,0.044,0.045,0.043,2.4e-06,1.3e-05,7.2e-05,0.011,0.026,0.00055,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,3.9 +15690000,0.71,0.00024,-0.013,0.71,0.0078,0.0032,-0.0026,0,0,-4.9e+02,-0.001,-0.0059,-6.5e-05,-7.7e-05,0.0042,-0.13,0.21,2.4e-07,0.43,-0.00018,0.00058,-4.8e-05,0,0,-4.9e+02,0.00033,0.00032,0.039,0.026,0.038,0.011,0.049,0.052,0.043,2.3e-06,1.3e-05,7.1e-05,0.011,0.026,0.00053,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4 +15790000,0.71,0.0002,-0.013,0.71,0.0083,0.0014,-0.0044,0,0,-4.9e+02,-0.001,-0.0059,-4.2e-05,-0.0004,0.0047,-0.13,0.21,-6.1e-09,0.43,-0.00019,0.00056,-5.7e-05,0,0,-4.9e+02,0.00032,0.00031,0.039,0.023,0.034,0.011,0.043,0.045,0.042,2.2e-06,1.2e-05,6.7e-05,0.01,0.025,0.00051,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4 +15890000,0.71,0.00021,-0.013,0.71,0.0091,0.0013,-0.003,0,0,-4.9e+02,-0.001,-0.0059,-4.3e-05,0.00034,0.005,-0.13,0.21,-9e-08,0.43,-0.00022,0.00056,-5.1e-05,0,0,-4.9e+02,0.00033,0.00031,0.039,0.025,0.037,0.011,0.048,0.051,0.042,2.2e-06,1.2e-05,6.6e-05,0.01,0.025,0.0005,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4 +15990000,0.71,0.00018,-0.013,0.7,0.0088,0.00028,-0.00065,0,0,-4.9e+02,-0.0011,-0.0059,5.6e-05,0.00048,0.0056,-0.13,0.21,-4.4e-07,0.43,-0.00025,0.00055,-5e-05,0,0,-4.9e+02,0.00031,0.0003,0.039,0.022,0.033,0.011,0.043,0.045,0.042,2.1e-06,1.1e-05,6.3e-05,0.01,0.024,0.00048,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4 +16090000,0.71,0.00021,-0.013,0.7,0.011,0.00056,0.0015,0,0,-4.9e+02,-0.0011,-0.0059,0.00015,0.00079,0.0057,-0.13,0.21,-6e-07,0.43,-0.00027,0.00057,-5e-05,0,0,-4.9e+02,0.00032,0.0003,0.039,0.024,0.037,0.01,0.048,0.051,0.042,2.1e-06,1.1e-05,6.2e-05,0.01,0.024,0.00047,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.1 +16190000,0.71,0.00026,-0.013,0.7,0.01,0.00089,0.0017,0,0,-4.9e+02,-0.0011,-0.0059,0.00015,0.0015,0.006,-0.13,0.21,-7.2e-07,0.43,-0.0003,0.00057,-4.8e-05,0,0,-4.9e+02,0.00031,0.00029,0.039,0.021,0.033,0.01,0.043,0.045,0.041,2e-06,1.1e-05,5.9e-05,0.01,0.023,0.00045,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.1 +16290000,0.71,0.00027,-0.013,0.7,0.012,0.00053,0.00093,0,0,-4.9e+02,-0.0011,-0.0059,0.00024,0.0014,0.0059,-0.13,0.21,-8.3e-07,0.43,-0.00031,0.00058,-4.3e-05,0,0,-4.9e+02,0.00032,0.00029,0.039,0.023,0.036,0.01,0.048,0.051,0.041,2e-06,1.1e-05,5.8e-05,0.0099,0.023,0.00044,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.1 +16390000,0.71,0.00032,-0.013,0.7,0.01,-0.00017,0.0009,0,0,-4.9e+02,-0.0011,-0.0059,0.00019,0.0028,0.0064,-0.13,0.21,-9.2e-07,0.43,-0.00036,0.00058,-4.1e-05,0,0,-4.9e+02,0.0003,0.00028,0.039,0.021,0.032,0.0098,0.042,0.045,0.041,1.9e-06,1e-05,5.5e-05,0.0098,0.023,0.00043,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.1 +16490000,0.71,0.00041,-0.013,0.7,0.009,0.00073,-0.001,0,0,-4.9e+02,-0.0011,-0.0059,0.0002,0.0036,0.0067,-0.13,0.21,-1e-06,0.43,-0.00039,0.00058,-3e-05,0,0,-4.9e+02,0.00031,0.00028,0.039,0.022,0.036,0.0098,0.047,0.051,0.041,1.8e-06,1e-05,5.4e-05,0.0097,0.023,0.00042,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.2 +16590000,0.71,0.00052,-0.013,0.7,0.0069,0.0025,-0.0022,0,0,-4.9e+02,-0.0011,-0.0059,0.00014,0.004,0.0056,-0.13,0.21,-8.3e-07,0.43,-0.00037,0.0006,-2.6e-05,0,0,-4.9e+02,0.0003,0.00027,0.038,0.02,0.032,0.0095,0.042,0.045,0.04,1.8e-06,9.4e-06,5.1e-05,0.0096,0.022,0.0004,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.2 +16690000,0.71,0.00049,-0.013,0.7,0.0079,0.0033,-0.00035,0,0,-4.9e+02,-0.0011,-0.0059,9.1e-05,0.0038,0.0055,-0.13,0.21,-7.3e-07,0.43,-0.00036,0.00059,-2.9e-05,0,0,-4.9e+02,0.00031,0.00027,0.038,0.021,0.035,0.0094,0.047,0.051,0.04,1.7e-06,9.4e-06,5.1e-05,0.0095,0.022,0.00039,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.2 +16790000,0.71,0.00049,-0.013,0.7,0.006,0.0047,-0.00011,0,0,-4.9e+02,-0.0011,-0.0059,4.8e-05,0.0038,0.0045,-0.13,0.21,-6e-07,0.43,-0.00034,0.00061,-3.4e-05,0,0,-4.9e+02,0.00029,0.00026,0.038,0.019,0.031,0.0093,0.042,0.045,0.04,1.7e-06,8.8e-06,4.8e-05,0.0094,0.021,0.00038,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.2 +16890000,0.71,0.00055,-0.013,0.71,0.0057,0.0059,0.0013,0,0,-4.9e+02,-0.0012,-0.0059,2.1e-05,0.0043,0.0047,-0.13,0.21,-6.7e-07,0.43,-0.00035,0.00061,-2.6e-05,0,0,-4.9e+02,0.0003,0.00026,0.038,0.02,0.035,0.0092,0.046,0.05,0.04,1.7e-06,8.8e-06,4.7e-05,0.0093,0.021,0.00037,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.3 +16990000,0.71,0.00051,-0.013,0.71,0.0058,0.0038,0.0019,0,0,-4.9e+02,-0.0012,-0.0059,1.1e-05,0.0043,0.0056,-0.13,0.21,-1.1e-06,0.43,-0.00037,0.00059,-3.8e-05,0,0,-4.9e+02,0.00029,0.00025,0.038,0.018,0.031,0.009,0.041,0.044,0.039,1.6e-06,8.1e-06,4.4e-05,0.0091,0.02,0.00036,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.3 +17090000,0.71,0.00056,-0.013,0.71,0.006,0.005,0.0023,0,0,-4.9e+02,-0.0012,-0.0059,1.7e-05,0.0052,0.006,-0.13,0.21,-1.2e-06,0.43,-0.00039,0.00059,-2.8e-05,0,0,-4.9e+02,0.00029,0.00025,0.038,0.02,0.034,0.0089,0.046,0.05,0.039,1.6e-06,8.1e-06,4.4e-05,0.0091,0.02,0.00035,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.3 +17190000,0.71,0.0006,-0.013,0.7,0.0061,0.0049,0.0022,0,0,-4.9e+02,-0.0012,-0.0059,9e-05,0.0055,0.007,-0.13,0.21,-1.7e-06,0.43,-0.00043,0.00058,-4.3e-05,0,0,-4.9e+02,0.00028,0.00024,0.038,0.018,0.031,0.0087,0.041,0.044,0.039,1.5e-06,7.5e-06,4.1e-05,0.0089,0.019,0.00034,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.3 +17290000,0.71,0.00063,-0.013,0.71,0.0079,0.0062,0.005,0,0,-4.9e+02,-0.0012,-0.0059,4.3e-05,0.0062,0.0072,-0.13,0.21,-1.8e-06,0.43,-0.00044,0.00058,-3.3e-05,0,0,-4.9e+02,0.00028,0.00024,0.038,0.019,0.034,0.0087,0.045,0.05,0.039,1.5e-06,7.5e-06,4.1e-05,0.0089,0.019,0.00033,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.4 +17390000,0.71,0.00067,-0.013,0.7,0.0077,0.0052,0.0058,0,0,-4.9e+02,-0.0012,-0.006,0.00013,0.0064,0.0083,-0.13,0.21,-2.2e-06,0.43,-0.00048,0.00056,-3.2e-05,0,0,-4.9e+02,0.00027,0.00023,0.038,0.017,0.03,0.0085,0.041,0.044,0.039,1.4e-06,7e-06,3.8e-05,0.0087,0.018,0.00032,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.4 +17490000,0.71,0.00062,-0.013,0.7,0.0094,0.0051,0.0071,0,0,-4.9e+02,-0.0012,-0.006,0.00013,0.0059,0.0081,-0.13,0.21,-2.1e-06,0.43,-0.00047,0.00056,-3.7e-05,0,0,-4.9e+02,0.00028,0.00023,0.038,0.019,0.034,0.0085,0.045,0.05,0.039,1.4e-06,7e-06,3.8e-05,0.0086,0.018,0.00032,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.4 +17590000,0.71,0.00058,-0.013,0.7,0.01,0.0037,0.011,0,0,-4.9e+02,-0.0012,-0.006,0.00017,0.0059,0.0089,-0.13,0.21,-2.5e-06,0.43,-0.00049,0.00054,-5.1e-05,0,0,-4.9e+02,0.00026,0.00022,0.038,0.017,0.03,0.0083,0.04,0.044,0.038,1.4e-06,6.4e-06,3.5e-05,0.0085,0.017,0.00031,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.4 +17690000,0.71,0.00055,-0.013,0.7,0.011,0.0047,0.01,0,0,-4.9e+02,-0.0012,-0.006,0.00019,0.0059,0.0089,-0.13,0.21,-2.5e-06,0.43,-0.00049,0.00054,-4.4e-05,0,0,-4.9e+02,0.00027,0.00022,0.038,0.018,0.033,0.0082,0.045,0.05,0.038,1.3e-06,6.4e-06,3.5e-05,0.0084,0.017,0.0003,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.5 +17790000,0.71,0.00052,-0.013,0.7,0.012,0.0041,0.0094,0,0,-4.9e+02,-0.0012,-0.006,0.00029,0.0062,0.0093,-0.13,0.21,-2.7e-06,0.43,-0.00053,0.00056,-5.5e-05,0,0,-4.9e+02,0.00025,0.00021,0.038,0.016,0.029,0.0081,0.04,0.044,0.038,1.3e-06,5.9e-06,3.3e-05,0.0083,0.016,0.00029,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.5 +17890000,0.71,0.0005,-0.013,0.7,0.015,0.0037,0.0097,0,0,-4.9e+02,-0.0012,-0.006,0.00032,0.0058,0.0092,-0.13,0.21,-2.8e-06,0.43,-0.00052,0.00055,-5.2e-05,0,0,-4.9e+02,0.00026,0.00021,0.038,0.018,0.033,0.008,0.044,0.05,0.038,1.3e-06,5.9e-06,3.2e-05,0.0082,0.016,0.00029,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.5 +17990000,0.71,0.00044,-0.013,0.7,0.016,0.0015,0.011,0,0,-4.9e+02,-0.0012,-0.006,0.00031,0.0056,0.0093,-0.13,0.21,-2.8e-06,0.43,-0.00051,0.00054,-5.6e-05,0,0,-4.9e+02,0.00025,0.0002,0.038,0.016,0.029,0.0079,0.04,0.044,0.037,1.2e-06,5.5e-06,3e-05,0.0081,0.016,0.00028,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.5 +18090000,0.71,0.00044,-0.013,0.7,0.017,0.0015,0.012,0,0,-4.9e+02,-0.0012,-0.006,0.00024,0.0056,0.0092,-0.13,0.21,-2.7e-06,0.43,-0.0005,0.00053,-5e-05,0,0,-4.9e+02,0.00025,0.0002,0.038,0.017,0.032,0.0079,0.044,0.05,0.038,1.2e-06,5.5e-06,3e-05,0.008,0.016,0.00028,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.6 +18190000,0.71,0.00039,-0.013,0.7,0.018,0.0022,0.013,0,0,-4.9e+02,-0.0012,-0.006,0.00028,0.0056,0.0093,-0.13,0.21,-2.8e-06,0.43,-0.0005,0.00053,-5.6e-05,0,0,-4.9e+02,0.00024,0.00019,0.038,0.016,0.029,0.0077,0.04,0.044,0.037,1.2e-06,5e-06,2.8e-05,0.0079,0.015,0.00027,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.6 +18290000,0.71,0.00031,-0.013,0.7,0.019,0.0019,0.014,0,0,-4.9e+02,-0.0012,-0.006,0.00024,0.0053,0.0091,-0.13,0.21,-2.8e-06,0.43,-0.00049,0.00052,-5.6e-05,0,0,-4.9e+02,0.00024,0.00019,0.038,0.017,0.032,0.0077,0.044,0.05,0.037,1.2e-06,5e-06,2.8e-05,0.0078,0.015,0.00026,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.6 +18390000,0.71,0.00027,-0.013,0.7,0.021,0.0032,0.014,0,0,-4.9e+02,-0.0012,-0.006,0.00029,0.0048,0.009,-0.13,0.21,-3e-06,0.43,-0.00047,0.00052,-6.2e-05,0,0,-4.9e+02,0.00023,0.00018,0.038,0.015,0.028,0.0075,0.039,0.044,0.037,1.1e-06,4.6e-06,2.6e-05,0.0077,0.014,0.00026,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.6 +18490000,0.71,0.00032,-0.013,0.7,0.021,0.0038,0.014,0,0,-4.9e+02,-0.0012,-0.006,0.0003,0.0053,0.0092,-0.13,0.21,-3e-06,0.43,-0.0005,0.00053,-6.3e-05,0,0,-4.9e+02,0.00023,0.00018,0.038,0.016,0.031,0.0075,0.043,0.05,0.037,1.1e-06,4.6e-06,2.6e-05,0.0076,0.014,0.00025,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.7 +18590000,0.71,0.00032,-0.013,0.7,0.021,0.0038,0.013,0,0,-4.9e+02,-0.0012,-0.006,0.00036,0.0057,0.0095,-0.13,0.21,-3.3e-06,0.43,-0.00052,0.00054,-7.1e-05,0,0,-4.9e+02,0.00022,0.00017,0.038,0.015,0.028,0.0074,0.039,0.044,0.037,1.1e-06,4.3e-06,2.4e-05,0.0075,0.013,0.00025,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.7 +18690000,0.71,0.00024,-0.013,0.7,0.022,0.0033,0.012,0,0,-4.9e+02,-0.0012,-0.006,0.00034,0.0051,0.0093,-0.13,0.21,-3.3e-06,0.43,-0.00049,0.00052,-7.2e-05,0,0,-4.9e+02,0.00023,0.00017,0.038,0.016,0.03,0.0074,0.043,0.049,0.036,1.1e-06,4.3e-06,2.4e-05,0.0075,0.013,0.00024,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.7 +18790000,0.71,0.00026,-0.013,0.7,0.021,0.0032,0.012,0,0,-4.9e+02,-0.0012,-0.006,0.00032,0.0054,0.0095,-0.13,0.21,-3.5e-06,0.43,-0.0005,0.00051,-7.4e-05,0,0,-4.9e+02,0.00021,0.00017,0.037,0.015,0.027,0.0073,0.039,0.044,0.036,1e-06,3.9e-06,2.2e-05,0.0073,0.013,0.00024,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.7 +18890000,0.71,0.00034,-0.013,0.7,0.021,0.004,0.012,0,0,-4.9e+02,-0.0012,-0.006,0.00038,0.006,0.0098,-0.13,0.21,-3.5e-06,0.43,-0.00053,0.00053,-7.1e-05,0,0,-4.9e+02,0.00022,0.00017,0.037,0.016,0.03,0.0072,0.043,0.049,0.036,1e-06,3.9e-06,2.2e-05,0.0073,0.013,0.00023,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.8 +18990000,0.71,0.00038,-0.013,0.7,0.021,0.0046,0.011,0,0,-4.9e+02,-0.0012,-0.006,0.0004,0.0065,0.01,-0.13,0.21,-3.6e-06,0.43,-0.00057,0.00053,-8e-05,0,0,-4.9e+02,0.0002,0.00016,0.037,0.015,0.027,0.0071,0.039,0.044,0.036,9.8e-07,3.6e-06,2.1e-05,0.0071,0.012,0.00023,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.8 +19090000,0.71,0.00042,-0.013,0.7,0.021,0.0054,0.013,0,0,-4.9e+02,-0.0013,-0.006,0.0004,0.0071,0.01,-0.13,0.21,-3.5e-06,0.43,-0.0006,0.00054,-7.9e-05,0,0,-4.9e+02,0.00021,0.00016,0.037,0.016,0.029,0.0071,0.042,0.049,0.036,9.7e-07,3.6e-06,2e-05,0.0071,0.012,0.00023,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.8 +19190000,0.71,0.00047,-0.013,0.7,0.02,0.0051,0.013,0,0,-4.9e+02,-0.0013,-0.006,0.00043,0.0075,0.011,-0.13,0.21,-3.6e-06,0.43,-0.00062,0.00054,-8.4e-05,0,0,-4.9e+02,0.0002,0.00015,0.037,0.014,0.026,0.007,0.038,0.044,0.036,9.4e-07,3.3e-06,1.9e-05,0.007,0.012,0.00022,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.8 +19290000,0.71,0.0005,-0.013,0.7,0.021,0.0045,0.015,0,0,-4.9e+02,-0.0013,-0.006,0.0004,0.0075,0.011,-0.13,0.21,-3.6e-06,0.43,-0.00062,0.00053,-7.5e-05,0,0,-4.9e+02,0.0002,0.00015,0.037,0.015,0.029,0.007,0.042,0.049,0.036,9.3e-07,3.3e-06,1.9e-05,0.007,0.012,0.00022,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.9 +19390000,0.71,0.00046,-0.012,0.7,0.019,0.0033,0.018,0,0,-4.9e+02,-0.0013,-0.006,0.00042,0.0073,0.011,-0.13,0.21,-3.9e-06,0.43,-0.0006,0.00052,-8.5e-05,0,0,-4.9e+02,0.00019,0.00015,0.037,0.014,0.026,0.0069,0.038,0.043,0.036,9e-07,3.1e-06,1.8e-05,0.0068,0.011,0.00021,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.9 +19490000,0.71,0.00045,-0.012,0.7,0.019,0.0029,0.015,0,0,-4.9e+02,-0.0013,-0.006,0.00046,0.007,0.011,-0.13,0.21,-4e-06,0.43,-0.0006,0.00053,-8.9e-05,0,0,-4.9e+02,0.00019,0.00015,0.037,0.015,0.028,0.0069,0.042,0.049,0.035,8.9e-07,3.1e-06,1.7e-05,0.0068,0.011,0.00021,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.9 +19590000,0.71,0.00052,-0.012,0.7,0.017,0.0017,0.015,0,0,-4.9e+02,-0.0013,-0.006,0.00052,0.0075,0.011,-0.13,0.21,-4.3e-06,0.43,-0.00062,0.00054,-9e-05,0,0,-4.9e+02,0.00018,0.00014,0.037,0.014,0.025,0.0068,0.038,0.043,0.035,8.6e-07,2.8e-06,1.6e-05,0.0067,0.01,0.00021,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,4.9 +19690000,0.71,0.00056,-0.012,0.7,0.017,-0.00041,0.016,0,0,-4.9e+02,-0.0013,-0.006,0.00048,0.008,0.011,-0.13,0.21,-4.1e-06,0.43,-0.00064,0.00054,-9.9e-05,0,0,-4.9e+02,0.00019,0.00014,0.037,0.015,0.028,0.0068,0.042,0.049,0.035,8.5e-07,2.8e-06,1.6e-05,0.0066,0.01,0.0002,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,5 +19790000,0.71,0.00064,-0.012,0.7,0.015,-0.0016,0.017,0,0,-4.9e+02,-0.0013,-0.006,0.00049,0.0085,0.012,-0.13,0.21,-4.3e-06,0.43,-0.00066,0.00054,-0.0001,0,0,-4.9e+02,0.00018,0.00014,0.037,0.014,0.025,0.0067,0.038,0.043,0.035,8.3e-07,2.6e-06,1.5e-05,0.0065,0.01,0.0002,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,5 +19890000,0.71,0.00054,-0.012,0.7,0.015,-0.0015,0.018,0,0,-4.9e+02,-0.0013,-0.006,0.00054,0.008,0.011,-0.13,0.21,-4.6e-06,0.43,-0.00063,0.00055,-0.0001,0,0,-4.9e+02,0.00018,0.00014,0.037,0.015,0.027,0.0067,0.041,0.049,0.035,8.2e-07,2.6e-06,1.5e-05,0.0065,0.01,0.0002,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,5 +19990000,0.71,0.0005,-0.012,0.7,0.013,-0.0023,0.02,0,0,-4.9e+02,-0.0013,-0.006,0.00061,0.0079,0.011,-0.13,0.21,-5.1e-06,0.43,-0.00063,0.00056,-0.0001,0,0,-4.9e+02,0.00017,0.00013,0.037,0.014,0.024,0.0066,0.038,0.043,0.035,7.9e-07,2.4e-06,1.4e-05,0.0064,0.0096,0.00019,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,5 +20090000,0.71,0.00051,-0.012,0.7,0.013,-0.0039,0.02,0,0,-4.9e+02,-0.0013,-0.006,0.00067,0.008,0.011,-0.13,0.21,-5.2e-06,0.43,-0.00065,0.00059,-9.9e-05,0,0,-4.9e+02,0.00017,0.00013,0.037,0.015,0.026,0.0066,0.041,0.048,0.035,7.8e-07,2.4e-06,1.4e-05,0.0064,0.0096,0.00019,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,5.1 +20190000,0.71,0.00054,-0.012,0.7,0.012,-0.0049,0.022,0,0,-4.9e+02,-0.0013,-0.006,0.00069,0.0078,0.011,-0.13,0.21,-5.9e-06,0.43,-0.00061,0.0006,-9.6e-05,0,0,-4.9e+02,0.00016,0.00013,0.037,0.013,0.024,0.0065,0.038,0.043,0.034,7.6e-07,2.2e-06,1.3e-05,0.0063,0.0092,0.00019,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,5.1 +20290000,0.71,0.00054,-0.012,0.7,0.01,-0.0062,0.021,0,0,-4.9e+02,-0.0013,-0.006,0.0007,0.0082,0.011,-0.13,0.21,-5.7e-06,0.43,-0.00065,0.00061,-0.0001,0,0,-4.9e+02,0.00017,0.00013,0.037,0.014,0.026,0.0065,0.041,0.048,0.034,7.5e-07,2.2e-06,1.3e-05,0.0062,0.0092,0.00018,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,5.1 +20390000,0.71,0.0005,-0.012,0.7,0.0087,-0.0071,0.022,0,0,-4.9e+02,-0.0013,-0.006,0.00069,0.0081,0.011,-0.13,0.21,-6.2e-06,0.43,-0.00063,0.0006,-0.00011,0,0,-4.9e+02,0.00016,0.00012,0.037,0.013,0.023,0.0064,0.037,0.043,0.034,7.3e-07,2.1e-06,1.2e-05,0.0061,0.0088,0.00018,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,5.1 +20490000,0.71,0.00055,-0.012,0.7,0.0089,-0.0077,0.022,0,0,-4.9e+02,-0.0013,-0.006,0.00066,0.0081,0.011,-0.13,0.21,-6.1e-06,0.43,-0.00063,0.00058,-0.00011,0,0,-4.9e+02,0.00016,0.00012,0.037,0.014,0.025,0.0064,0.041,0.048,0.034,7.2e-07,2.1e-06,1.2e-05,0.0061,0.0088,0.00018,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,5.2 +20590000,0.71,0.0006,-0.013,0.7,0.0079,-0.0081,0.02,0,0,-4.9e+02,-0.0013,-0.006,0.00063,0.0087,0.011,-0.13,0.21,-6.1e-06,0.43,-0.00064,0.00058,-0.0001,0,0,-4.9e+02,0.00015,0.00012,0.037,0.013,0.023,0.0063,0.037,0.043,0.034,7e-07,1.9e-06,1.1e-05,0.006,0.0085,0.00018,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,5.2 +20690000,0.71,0.00062,-0.013,0.7,0.0086,-0.0093,0.021,0,0,-4.9e+02,-0.0013,-0.006,0.00064,0.0086,0.011,-0.13,0.21,-6.2e-06,0.43,-0.00064,0.00059,-0.0001,0,0,-4.9e+02,0.00015,0.00012,0.037,0.014,0.025,0.0064,0.041,0.048,0.034,7e-07,1.9e-06,1.1e-05,0.006,0.0085,0.00017,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,5.2 +20790000,0.71,0.00066,-0.013,0.7,0.0064,-0.0086,0.021,0,0,-4.9e+02,-0.0013,-0.006,0.00064,0.0091,0.011,-0.13,0.21,-6.2e-06,0.43,-0.00066,0.00059,-0.00011,0,0,-4.9e+02,0.00015,0.00011,0.037,0.013,0.022,0.0063,0.037,0.043,0.034,6.8e-07,1.8e-06,1.1e-05,0.0059,0.0082,0.00017,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,5.2 +20890000,0.71,0.00065,-0.013,0.7,0.0063,-0.011,0.021,0,0,-4.9e+02,-0.0013,-0.006,0.00067,0.0091,0.011,-0.13,0.21,-6.3e-06,0.43,-0.00066,0.00061,-0.00011,0,0,-4.9e+02,0.00015,0.00011,0.037,0.014,0.024,0.0063,0.041,0.048,0.034,6.7e-07,1.8e-06,1.1e-05,0.0059,0.0082,0.00017,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,5.3 +20990000,0.71,0.00069,-0.013,0.7,0.0046,-0.012,0.021,0,0,-4.9e+02,-0.0013,-0.006,0.00066,0.0095,0.011,-0.13,0.21,-6.2e-06,0.43,-0.00069,0.00062,-0.00011,0,0,-4.9e+02,0.00014,0.00011,0.037,0.013,0.022,0.0062,0.037,0.042,0.033,6.5e-07,1.6e-06,1e-05,0.0058,0.0079,0.00017,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,5.3 +21090000,0.71,0.00065,-0.013,0.7,0.0056,-0.014,0.022,0,0,-4.9e+02,-0.0013,-0.006,0.00068,0.0092,0.01,-0.13,0.21,-6.4e-06,0.43,-0.00068,0.00062,-0.00011,0,0,-4.9e+02,0.00014,0.00011,0.037,0.014,0.024,0.0062,0.04,0.047,0.034,6.5e-07,1.6e-06,9.9e-06,0.0058,0.0079,0.00016,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,5.3 +21190000,0.71,0.00067,-0.013,0.7,0.0058,-0.013,0.021,0,0,-4.9e+02,-0.0013,-0.006,0.00065,0.0093,0.0099,-0.13,0.21,-6.5e-06,0.43,-0.00067,0.00062,-0.00011,0,0,-4.9e+02,0.00014,0.00011,0.037,0.013,0.021,0.0061,0.037,0.042,0.033,6.3e-07,1.5e-06,9.4e-06,0.0057,0.0076,0.00016,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,5.3 +21290000,0.71,0.00074,-0.013,0.7,0.0051,-0.015,0.023,0,0,-4.9e+02,-0.0013,-0.006,0.00069,0.0095,0.01,-0.13,0.21,-6.6e-06,0.43,-0.00068,0.00065,-0.00011,0,0,-4.9e+02,0.00014,0.00011,0.037,0.014,0.023,0.0061,0.04,0.047,0.033,6.2e-07,1.5e-06,9.3e-06,0.0057,0.0076,0.00016,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,5.4 +21390000,0.71,0.00074,-0.013,0.7,0.0041,-0.015,0.023,0,0,-4.9e+02,-0.0013,-0.006,0.00063,0.0098,0.0093,-0.13,0.21,-7e-06,0.43,-0.00066,0.00064,-9.7e-05,0,0,-4.9e+02,0.00013,0.0001,0.037,0.013,0.021,0.0061,0.037,0.042,0.033,6.1e-07,1.4e-06,8.8e-06,0.0056,0.0074,0.00016,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,5.4 +21490000,0.71,0.00073,-0.013,0.7,0.0046,-0.016,0.023,0,0,-4.9e+02,-0.0013,-0.006,0.00065,0.0095,0.0092,-0.13,0.21,-7.3e-06,0.43,-0.00063,0.00065,-9.1e-05,0,0,-4.9e+02,0.00013,0.0001,0.037,0.014,0.023,0.0061,0.04,0.047,0.033,6e-07,1.4e-06,8.7e-06,0.0056,0.0074,0.00016,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,5.4 +21590000,0.71,0.00073,-0.013,0.7,0.0035,-0.013,0.023,0,0,-4.9e+02,-0.0013,-0.006,0.00061,0.0099,0.0086,-0.13,0.21,-7.5e-06,0.43,-0.00064,0.00066,-8.5e-05,0,0,-4.9e+02,0.00013,0.0001,0.037,0.013,0.02,0.006,0.037,0.042,0.033,5.9e-07,1.3e-06,8.2e-06,0.0055,0.0071,0.00015,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,5.4 +21690000,0.71,0.0007,-0.013,0.7,0.0051,-0.014,0.025,0,0,-4.9e+02,-0.0013,-0.006,0.00063,0.0095,0.0084,-0.13,0.21,-7.9e-06,0.43,-0.00062,0.00065,-8.5e-05,0,0,-4.9e+02,0.00013,0.0001,0.037,0.013,0.022,0.006,0.04,0.047,0.033,5.8e-07,1.3e-06,8.2e-06,0.0055,0.0071,0.00015,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,5.5 +21790000,0.71,0.00071,-0.013,0.7,0.0032,-0.0095,0.024,0,0,-4.9e+02,-0.0013,-0.0059,0.00056,0.011,0.0076,-0.13,0.21,-8.2e-06,0.43,-0.00064,0.00067,-6.6e-05,0,0,-4.9e+02,0.00012,9.8e-05,0.037,0.013,0.02,0.006,0.037,0.042,0.033,5.7e-07,1.2e-06,7.7e-06,0.0055,0.0069,0.00015,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,5.5 +21890000,0.71,0.0007,-0.013,0.7,0.004,-0.0098,0.024,0,0,-4.9e+02,-0.0013,-0.0059,0.00056,0.01,0.0075,-0.13,0.21,-8.2e-06,0.43,-0.00065,0.00067,-6.8e-05,0,0,-4.9e+02,0.00013,9.9e-05,0.037,0.013,0.022,0.006,0.04,0.047,0.033,5.6e-07,1.2e-06,7.7e-06,0.0054,0.0069,0.00015,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,5.5 +21990000,0.71,0.00074,-0.013,0.7,0.0028,-0.0074,0.025,0,0,-4.9e+02,-0.0013,-0.0059,0.00052,0.011,0.0067,-0.13,0.21,-8.7e-06,0.43,-0.00065,0.00069,-5.6e-05,0,0,-4.9e+02,0.00012,9.6e-05,0.037,0.012,0.02,0.0059,0.036,0.042,0.033,5.5e-07,1.2e-06,7.3e-06,0.0054,0.0067,0.00015,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,0.01 +22090000,0.71,0.00076,-0.013,0.7,0.0027,-0.0065,0.024,0,0,-4.9e+02,-0.0013,-0.0059,0.00052,0.011,0.0068,-0.13,0.21,-8.7e-06,0.43,-0.00066,0.00069,-5.4e-05,0,0,-4.9e+02,0.00012,9.6e-05,0.037,0.013,0.021,0.0059,0.04,0.046,0.033,5.5e-07,1.2e-06,7.2e-06,0.0054,0.0067,0.00015,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,0.01 +22190000,0.71,0.00073,-0.013,0.7,0.0021,-0.0057,0.024,0,0,-4.9e+02,-0.0013,-0.0059,0.00052,0.011,0.0067,-0.13,0.21,-8.6e-06,0.43,-0.00069,0.00069,-6.7e-05,0,0,-4.9e+02,0.00012,9.4e-05,0.037,0.012,0.019,0.0059,0.036,0.042,0.033,5.3e-07,1.1e-06,6.9e-06,0.0053,0.0065,0.00014,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,0.01 +22290000,0.71,0.00076,-0.013,0.7,0.0015,-0.0065,0.024,0,0,-4.9e+02,-0.0013,-0.0059,0.0005,0.011,0.0066,-0.13,0.21,-8.7e-06,0.43,-0.00068,0.00068,-6.1e-05,0,0,-4.9e+02,0.00012,9.4e-05,0.037,0.013,0.021,0.0059,0.04,0.046,0.033,5.3e-07,1.1e-06,6.8e-06,0.0053,0.0065,0.00014,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,0.01 +22390000,0.71,0.00078,-0.013,0.7,-0.00082,-0.006,0.026,0,0,-4.9e+02,-0.0013,-0.0059,0.00051,0.012,0.0067,-0.13,0.21,-8.6e-06,0.43,-0.00069,0.00069,-6.1e-05,0,0,-4.9e+02,0.00011,9.1e-05,0.037,0.012,0.019,0.0058,0.036,0.041,0.033,5.2e-07,1e-06,6.5e-06,0.0052,0.0064,0.00014,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,0.01 +22490000,0.71,0.00082,-0.013,0.7,-0.0019,-0.0059,0.027,0,0,-4.9e+02,-0.0013,-0.0059,0.00051,0.012,0.0069,-0.13,0.21,-8.3e-06,0.43,-0.00071,0.0007,-6.4e-05,0,0,-4.9e+02,0.00012,9.2e-05,0.037,0.013,0.02,0.0058,0.04,0.046,0.033,5.1e-07,1e-06,6.4e-06,0.0052,0.0064,0.00014,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,0.01 +22590000,0.71,0.00085,-0.013,0.7,-0.0036,-0.0056,0.026,0,0,-4.9e+02,-0.0013,-0.0059,0.0005,0.013,0.0068,-0.13,0.21,-8e-06,0.43,-0.00074,0.00071,-6.6e-05,0,0,-4.9e+02,0.00011,8.9e-05,0.037,0.012,0.018,0.0058,0.036,0.041,0.032,5e-07,9.8e-07,6.1e-06,0.0052,0.0062,0.00014,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,0.01 +22690000,0.71,0.0009,-0.013,0.7,-0.0049,-0.0052,0.027,0,0,-4.9e+02,-0.0013,-0.0059,0.00052,0.013,0.0069,-0.13,0.21,-7.9e-06,0.43,-0.00074,0.00071,-7.1e-05,0,0,-4.9e+02,0.00011,9e-05,0.037,0.013,0.02,0.0058,0.039,0.046,0.033,5e-07,9.8e-07,6.1e-06,0.0052,0.0062,0.00014,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,0.01 +22790000,0.71,0.00092,-0.013,0.7,-0.0069,-0.0044,0.028,0,0,-4.9e+02,-0.0014,-0.0059,0.00046,0.013,0.007,-0.13,0.21,-7.9e-06,0.43,-0.00074,0.00072,-4.6e-05,0,0,-4.9e+02,0.00011,8.8e-05,0.037,0.012,0.018,0.0058,0.036,0.041,0.032,4.9e-07,9.2e-07,5.8e-06,0.0051,0.0061,0.00013,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,0.01 +22890000,0.71,0.00089,-0.013,0.7,-0.0073,-0.004,0.03,0,0,-4.9e+02,-0.0014,-0.0059,0.00046,0.013,0.0068,-0.13,0.21,-8e-06,0.43,-0.00075,0.00072,-4.9e-05,0,0,-4.9e+02,0.00011,8.8e-05,0.037,0.013,0.02,0.0058,0.039,0.045,0.032,4.8e-07,9.2e-07,5.7e-06,0.0051,0.0061,0.00013,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,0.01 +22990000,0.71,0.00087,-0.013,0.7,-0.0074,-0.0045,0.03,0,0,-4.9e+02,-0.0013,-0.0059,0.00047,0.013,0.0067,-0.13,0.21,-8.1e-06,0.43,-0.00075,0.00071,-5.7e-05,0,0,-4.9e+02,0.00011,8.6e-05,0.037,0.012,0.018,0.0057,0.036,0.041,0.032,4.7e-07,8.7e-07,5.5e-06,0.005,0.006,0.00013,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,0.01 +23090000,0.71,0.00082,-0.013,0.7,-0.0078,-0.0046,0.031,0,0,-4.9e+02,-0.0013,-0.0059,0.00044,0.013,0.0067,-0.13,0.21,-8.1e-06,0.43,-0.00076,0.00071,-4.9e-05,0,0,-4.9e+02,0.00011,8.6e-05,0.037,0.013,0.019,0.0057,0.039,0.045,0.032,4.7e-07,8.7e-07,5.4e-06,0.005,0.006,0.00013,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,0.01 +23190000,0.71,0.00088,-0.013,0.7,-0.0092,-0.0058,0.032,0,0,-4.9e+02,-0.0014,-0.0059,0.00043,0.013,0.0066,-0.13,0.21,-8.4e-06,0.43,-0.00076,0.00071,-5.4e-05,0,0,-4.9e+02,0.0001,8.4e-05,0.037,0.012,0.017,0.0057,0.036,0.041,0.032,4.6e-07,8.3e-07,5.2e-06,0.005,0.0058,0.00013,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,0.01 +23290000,0.71,0.0008,-0.013,0.7,-0.009,-0.007,0.032,0,0,-4.9e+02,-0.0013,-0.0059,0.00044,0.013,0.0065,-0.13,0.21,-8.5e-06,0.43,-0.00076,0.0007,-5.6e-05,0,0,-4.9e+02,0.0001,8.5e-05,0.037,0.013,0.019,0.0057,0.039,0.045,0.032,4.6e-07,8.3e-07,5.2e-06,0.005,0.0058,0.00013,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,0.01 +23390000,0.71,0.00086,-0.013,0.7,-0.0093,-0.0073,0.03,0,0,-4.9e+02,-0.0013,-0.0059,0.00043,0.013,0.0063,-0.13,0.21,-9.1e-06,0.43,-0.00075,0.0007,-5.1e-05,0,0,-4.9e+02,0.0001,8.3e-05,0.037,0.012,0.017,0.0057,0.036,0.041,0.032,4.5e-07,7.9e-07,4.9e-06,0.0049,0.0057,0.00013,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,0.01 +23490000,0.71,0.0032,-0.01,0.7,-0.016,-0.008,-0.0032,0,0,-4.9e+02,-0.0013,-0.0059,0.00044,0.013,0.0063,-0.13,0.21,-9.4e-06,0.43,-0.00073,0.00072,-3.1e-05,0,0,-4.9e+02,0.0001,8.3e-05,0.037,0.013,0.019,0.0057,0.039,0.045,0.032,4.4e-07,7.9e-07,4.9e-06,0.0049,0.0057,0.00013,0.0013,3.9e-05,0.0013,0.0016,0.0013,0.0013,1,1,0.01 +23590000,0.71,0.0085,-0.0024,0.7,-0.027,-0.0068,-0.035,0,0,-4.9e+02,-0.0013,-0.0059,0.00042,0.013,0.0059,-0.13,0.21,-9.5e-06,0.43,-0.00073,0.00079,4.6e-05,0,0,-4.9e+02,9.8e-05,8.1e-05,0.037,0.012,0.017,0.0056,0.036,0.04,0.032,4.3e-07,7.5e-07,4.7e-06,0.0049,0.0056,0.00012,0.0012,3.9e-05,0.0012,0.0016,0.0012,0.0012,1,1,0.01 +23690000,0.71,0.0082,0.0034,0.7,-0.058,-0.015,-0.085,0,0,-4.9e+02,-0.0013,-0.0059,0.00042,0.013,0.0059,-0.13,0.21,-9.4e-06,0.43,-0.00073,0.00074,5.1e-06,0,0,-4.9e+02,9.9e-05,8.2e-05,0.037,0.013,0.018,0.0056,0.039,0.045,0.032,4.3e-07,7.5e-07,4.7e-06,0.0049,0.0056,0.00012,0.0012,3.9e-05,0.0012,0.0016,0.0012,0.0012,1,1,0.01 +23790000,0.71,0.0052,9.7e-05,0.7,-0.083,-0.026,-0.14,0,0,-4.9e+02,-0.0013,-0.0059,0.00041,0.012,0.0052,-0.13,0.21,-9e-06,0.43,-0.00083,0.00074,0.00034,0,0,-4.9e+02,9.6e-05,8e-05,0.037,0.012,0.017,0.0056,0.036,0.04,0.032,4.2e-07,7.1e-07,4.5e-06,0.0048,0.0055,0.00012,0.0012,3.9e-05,0.0012,0.0016,0.0012,0.0012,1,1,0.01 +23890000,0.71,0.0026,-0.006,0.7,-0.1,-0.035,-0.19,0,0,-4.9e+02,-0.0013,-0.0059,0.0004,0.012,0.0053,-0.13,0.21,-8.7e-06,0.43,-0.00085,0.0008,0.00024,0,0,-4.9e+02,9.7e-05,8e-05,0.037,0.013,0.018,0.0056,0.039,0.044,0.032,4.2e-07,7.1e-07,4.4e-06,0.0048,0.0055,0.00012,0.0012,3.9e-05,0.0012,0.0016,0.0012,0.0012,1,1,0.01 +23990000,0.71,0.0012,-0.011,0.7,-0.1,-0.038,-0.25,0,0,-4.9e+02,-0.0013,-0.0059,0.00041,0.012,0.0052,-0.13,0.21,-8.4e-06,0.43,-0.00087,0.00079,0.00021,0,0,-4.9e+02,9.4e-05,7.9e-05,0.037,0.012,0.017,0.0056,0.036,0.04,0.032,4.1e-07,6.8e-07,4.3e-06,0.0048,0.0054,0.00012,0.0012,3.9e-05,0.0012,0.0016,0.0012,0.0012,1,1,0.01 +24090000,0.71,0.0024,-0.0093,0.7,-0.1,-0.038,-0.29,0,0,-4.9e+02,-0.0013,-0.0059,0.00042,0.012,0.0051,-0.13,0.21,-8.4e-06,0.43,-0.00089,0.00076,0.00024,0,0,-4.9e+02,9.5e-05,7.9e-05,0.037,0.013,0.018,0.0056,0.039,0.044,0.032,4.1e-07,6.8e-07,4.2e-06,0.0048,0.0054,0.00012,0.0012,3.9e-05,0.0012,0.0016,0.0012,0.0012,1,1,0.01 +24190000,0.71,0.0035,-0.007,0.7,-0.11,-0.039,-0.34,0,0,-4.9e+02,-0.0013,-0.0059,0.00042,0.012,0.0048,-0.13,0.21,-7.8e-06,0.43,-0.00095,0.0008,0.00023,0,0,-4.9e+02,9.2e-05,7.7e-05,0.037,0.012,0.017,0.0055,0.036,0.04,0.031,4e-07,6.5e-07,4.1e-06,0.0048,0.0053,0.00012,0.0012,3.9e-05,0.0012,0.0016,0.0012,0.0012,1,1,0.01 +24290000,0.71,0.004,-0.0062,0.7,-0.12,-0.043,-0.4,0,0,-4.9e+02,-0.0013,-0.0059,0.00041,0.012,0.0047,-0.13,0.21,-7.8e-06,0.43,-0.00098,0.00085,0.0003,0,0,-4.9e+02,9.3e-05,7.8e-05,0.037,0.013,0.018,0.0056,0.039,0.044,0.032,4e-07,6.5e-07,4e-06,0.0048,0.0053,0.00012,0.0012,3.9e-05,0.0012,0.0016,0.0012,0.0012,1,1,0.01 +24390000,0.71,0.0041,-0.0063,0.7,-0.13,-0.05,-0.45,0,0,-4.9e+02,-0.0013,-0.0059,0.00042,0.012,0.0052,-0.13,0.21,-5.5e-06,0.43,-0.00091,0.0009,0.00029,0,0,-4.9e+02,9.1e-05,7.6e-05,0.037,0.012,0.017,0.0055,0.036,0.04,0.031,3.9e-07,6.3e-07,3.9e-06,0.0047,0.0053,0.00012,0.0012,3.9e-05,0.0012,0.0015,0.0012,0.0012,1,1,0.01 +24490000,0.71,0.005,-0.0022,0.7,-0.14,-0.055,-0.5,0,0,-4.9e+02,-0.0013,-0.0059,0.00041,0.012,0.0053,-0.13,0.21,-5.5e-06,0.43,-0.00091,0.00092,0.00027,0,0,-4.9e+02,9.2e-05,7.6e-05,0.037,0.013,0.018,0.0055,0.039,0.044,0.031,3.9e-07,6.3e-07,3.8e-06,0.0047,0.0053,0.00012,0.0012,3.9e-05,0.0012,0.0015,0.0012,0.0012,1,1,0.01 +24590000,0.71,0.0055,0.0015,0.7,-0.16,-0.066,-0.55,0,0,-4.9e+02,-0.0013,-0.0059,0.00044,0.011,0.0054,-0.13,0.21,-5e-06,0.43,-0.00067,0.00055,0.00019,0,0,-4.9e+02,8.9e-05,7.5e-05,0.037,0.012,0.016,0.0055,0.036,0.04,0.031,3.9e-07,6e-07,3.7e-06,0.0047,0.0052,0.00011,0.0012,3.9e-05,0.0012,0.0015,0.0012,0.0012,1,1,0.01 +24690000,0.71,0.0055,0.0024,0.7,-0.18,-0.08,-0.64,0,0,-4.9e+02,-0.0013,-0.0059,0.00046,0.011,0.0053,-0.13,0.21,-4.4e-06,0.43,-0.00071,0.00059,0.00035,0,0,-4.9e+02,9e-05,7.5e-05,0.037,0.013,0.018,0.0055,0.039,0.044,0.031,3.8e-07,6e-07,3.7e-06,0.0047,0.0052,0.00011,0.0012,3.9e-05,0.0012,0.0015,0.0012,0.0012,1,1,0.01 +24790000,0.71,0.0053,0.0012,0.7,-0.2,-0.092,-0.72,0,0,-4.9e+02,-0.0013,-0.0059,0.00044,0.011,0.0051,-0.13,0.21,-5e-06,0.43,-0.00078,0.00058,0.00011,0,0,-4.9e+02,8.8e-05,7.4e-05,0.036,0.012,0.017,0.0055,0.036,0.04,0.031,3.8e-07,5.8e-07,3.6e-06,0.0047,0.0051,0.00011,0.0012,3.9e-05,0.0012,0.0015,0.0012,0.0012,1,1,0.01 +24890000,0.71,0.007,0.0028,0.7,-0.22,-0.1,-0.74,0,0,-4.9e+02,-0.0013,-0.0059,0.00042,0.011,0.0051,-0.13,0.21,-4.2e-06,0.43,-0.00087,0.00074,0.00012,0,0,-4.9e+02,8.9e-05,7.4e-05,0.036,0.013,0.018,0.0055,0.039,0.044,0.031,3.8e-07,5.8e-07,3.5e-06,0.0047,0.0051,0.00011,0.0012,3.9e-05,0.0012,0.0015,0.0012,0.0012,1,1,0.01 +24990000,0.71,0.0089,0.0045,0.7,-0.24,-0.11,-0.8,0,0,-4.9e+02,-0.0013,-0.0059,0.00038,0.011,0.0043,-0.13,0.21,-3.9e-06,0.43,-0.0011,0.00085,-0.00022,0,0,-4.9e+02,8.6e-05,7.3e-05,0.036,0.012,0.017,0.0055,0.036,0.04,0.031,3.7e-07,5.6e-07,3.4e-06,0.0046,0.0051,0.00011,0.0012,3.9e-05,0.0012,0.0015,0.0012,0.0012,1,1,0.01 +25090000,0.71,0.0092,0.0039,0.7,-0.27,-0.12,-0.85,0,0,-4.9e+02,-0.0013,-0.0059,0.00037,0.011,0.0043,-0.13,0.21,-4.1e-06,0.43,-0.0011,0.00087,-0.00025,0,0,-4.9e+02,8.7e-05,7.3e-05,0.036,0.013,0.018,0.0055,0.039,0.044,0.031,3.7e-07,5.6e-07,3.4e-06,0.0046,0.0051,0.00011,0.0012,3.9e-05,0.0012,0.0015,0.0012,0.0012,1,1,0.01 +25190000,0.71,0.0087,0.0026,0.7,-0.3,-0.13,-0.9,0,0,-4.9e+02,-0.0013,-0.0059,0.00041,0.01,0.0048,-0.13,0.21,-4.8e-07,0.43,-0.00095,0.00083,-0.00015,0,0,-4.9e+02,8.5e-05,7.2e-05,0.036,0.012,0.017,0.0054,0.036,0.04,0.031,3.6e-07,5.4e-07,3.3e-06,0.0046,0.005,0.00011,0.0012,3.9e-05,0.0012,0.0015,0.0012,0.0012,1,1,0.01 +25290000,0.71,0.011,0.0094,0.7,-0.33,-0.14,-0.95,0,0,-4.9e+02,-0.0013,-0.0059,0.00041,0.01,0.0048,-0.13,0.21,-6.9e-07,0.43,-0.00093,0.00078,-0.00015,0,0,-4.9e+02,8.6e-05,7.2e-05,0.036,0.013,0.019,0.0054,0.039,0.044,0.031,3.6e-07,5.4e-07,3.3e-06,0.0046,0.005,0.00011,0.0012,3.9e-05,0.0012,0.0015,0.0012,0.0012,1,1,0.01 +25390000,0.71,0.012,0.016,0.7,-0.36,-0.16,-1,0,0,-4.9e+02,-0.0012,-0.0059,0.00042,0.0094,0.0045,-0.13,0.21,2.2e-06,0.43,-0.00069,0.00047,-0.00016,0,0,-4.9e+02,8.4e-05,7.1e-05,0.036,0.012,0.018,0.0054,0.036,0.04,0.031,3.6e-07,5.2e-07,3.2e-06,0.0046,0.005,0.00011,0.0012,3.9e-05,0.0012,0.0015,0.0012,0.0012,1,1,0.01 +25490000,0.71,0.012,0.017,0.7,-0.41,-0.19,-1.1,0,0,-4.9e+02,-0.0012,-0.0059,0.00043,0.0093,0.0045,-0.13,0.21,5.6e-07,0.43,-0.00053,0.00015,2.7e-06,0,0,-4.9e+02,8.5e-05,7.1e-05,0.036,0.013,0.019,0.0054,0.039,0.044,0.031,3.6e-07,5.2e-07,3.1e-06,0.0046,0.005,0.00011,0.0012,3.9e-05,0.0012,0.0015,0.0012,0.0012,1,1,0.01 +25590000,0.71,0.012,0.015,0.7,-0.45,-0.22,-1.1,0,0,-4.9e+02,-0.0012,-0.0059,0.00045,0.0085,0.005,-0.13,0.21,4.7e-06,0.43,-0.0004,0.00015,-3.2e-05,0,0,-4.9e+02,8.4e-05,7e-05,0.035,0.012,0.018,0.0054,0.036,0.04,0.031,3.5e-07,5.1e-07,3.1e-06,0.0046,0.0049,0.00011,0.0012,3.9e-05,0.0012,0.0015,0.0012,0.0012,1,1,0.01 +25690000,0.71,0.015,0.022,0.7,-0.5,-0.24,-1.2,0,0,-4.9e+02,-0.0012,-0.0059,0.00046,0.0085,0.005,-0.13,0.21,5e-06,0.43,-0.00042,0.00017,2.5e-05,0,0,-4.9e+02,8.5e-05,7e-05,0.035,0.013,0.021,0.0054,0.039,0.044,0.031,3.5e-07,5.1e-07,3e-06,0.0046,0.0049,0.00011,0.0012,3.9e-05,0.0012,0.0015,0.0012,0.0012,1,1,0.01 +25790000,0.71,0.018,0.028,0.7,-0.55,-0.26,-1.2,0,0,-4.9e+02,-0.0012,-0.0059,0.00046,0.0078,0.0042,-0.13,0.21,7.9e-06,0.43,-0.00031,-6.7e-05,-0.00047,0,0,-4.9e+02,8.3e-05,6.9e-05,0.034,0.013,0.02,0.0054,0.036,0.04,0.031,3.4e-07,4.9e-07,3e-06,0.0045,0.0049,0.00011,0.0011,3.9e-05,0.0011,0.0014,0.0011,0.0011,1,1,0.01 +25890000,0.71,0.018,0.029,0.7,-0.62,-0.29,-1.3,0,0,-4.9e+02,-0.0012,-0.0059,0.00048,0.0079,0.0043,-0.13,0.21,9.6e-06,0.43,-0.00028,1.3e-05,-0.00058,0,0,-4.9e+02,8.4e-05,6.9e-05,0.034,0.014,0.023,0.0054,0.039,0.044,0.031,3.4e-07,4.9e-07,2.9e-06,0.0045,0.0049,0.0001,0.0011,3.9e-05,0.0011,0.0014,0.0011,0.0011,1,1,0.01 +25990000,0.71,0.017,0.026,0.71,-0.67,-0.33,-1.3,0,0,-4.9e+02,-0.0012,-0.0059,0.00052,0.0068,0.0048,-0.13,0.21,1.5e-05,0.43,0.00031,-0.00055,-0.0011,0,0,-4.9e+02,8.3e-05,6.8e-05,0.033,0.013,0.022,0.0054,0.036,0.04,0.031,3.4e-07,4.8e-07,2.9e-06,0.0045,0.0048,0.0001,0.0011,3.9e-05,0.0011,0.0014,0.0011,0.0011,1,1,0.01 +26090000,0.7,0.022,0.036,0.71,-0.74,-0.35,-1.3,0,0,-4.9e+02,-0.0012,-0.0059,0.0005,0.007,0.0049,-0.13,0.21,1.3e-05,0.43,0.00035,-0.00051,-0.0018,0,0,-4.9e+02,8.4e-05,6.8e-05,0.033,0.014,0.025,0.0054,0.039,0.044,0.031,3.4e-07,4.8e-07,2.8e-06,0.0045,0.0048,0.0001,0.0011,3.9e-05,0.0011,0.0014,0.0011,0.0011,1,1,0.01 +26190000,0.7,0.024,0.045,0.71,-0.8,-0.39,-1.3,0,0,-4.9e+02,-0.0011,-0.0059,0.00049,0.0059,0.0036,-0.13,0.21,2.7e-05,0.44,1e-05,0.00038,-0.002,0,0,-4.9e+02,8.4e-05,6.7e-05,0.032,0.013,0.024,0.0053,0.036,0.04,0.031,3.4e-07,4.7e-07,2.8e-06,0.0045,0.0048,0.0001,0.001,3.9e-05,0.001,0.0013,0.001,0.001,1,1,0.01 +26290000,0.7,0.025,0.047,0.71,-0.89,-0.43,-1.3,0,0,-4.9e+02,-0.0011,-0.0059,0.00048,0.0058,0.0036,-0.13,0.21,2.5e-05,0.44,5.8e-05,0.00023,-0.0021,0,0,-4.9e+02,8.5e-05,6.8e-05,0.031,0.015,0.028,0.0054,0.039,0.045,0.031,3.4e-07,4.8e-07,2.8e-06,0.0045,0.0048,0.0001,0.00099,3.9e-05,0.00099,0.0013,0.001,0.00099,1,1,0.01 +26390000,0.7,0.024,0.044,0.71,-0.97,-0.49,-1.3,0,0,-4.9e+02,-0.0011,-0.0059,0.00054,0.0046,0.0047,-0.13,0.21,3.2e-05,0.44,0.001,-0.00025,-0.0032,0,0,-4.9e+02,8.5e-05,6.7e-05,0.03,0.014,0.027,0.0053,0.036,0.04,0.031,3.3e-07,4.7e-07,2.7e-06,0.0045,0.0048,0.0001,0.00096,3.9e-05,0.00096,0.0012,0.00096,0.00096,1,1,0.01 +26490000,0.7,0.032,0.06,0.71,-1.1,-0.53,-1.3,0,0,-4.9e+02,-0.0011,-0.0059,0.00054,0.0047,0.0047,-0.13,0.21,2.6e-05,0.44,0.0014,-0.0011,-0.0035,0,0,-4.9e+02,8.5e-05,6.7e-05,0.029,0.015,0.031,0.0053,0.039,0.045,0.031,3.3e-07,4.7e-07,2.7e-06,0.0045,0.0048,0.0001,0.00092,3.9e-05,0.00092,0.0012,0.00092,0.00092,1,1,0.01 +26590000,0.7,0.038,0.076,0.71,-1.2,-0.58,-1.3,0,0,-4.9e+02,-0.0011,-0.0059,0.00051,0.0031,0.0035,-0.13,0.21,2.9e-05,0.44,0.0013,-0.00088,-0.0056,0,0,-4.9e+02,8.6e-05,6.6e-05,0.027,0.015,0.031,0.0053,0.036,0.041,0.031,3.3e-07,4.6e-07,2.7e-06,0.0045,0.0048,0.0001,0.00087,3.9e-05,0.00086,0.0011,0.00087,0.00086,1,1,0.01 +26690000,0.7,0.039,0.079,0.7,-1.3,-0.64,-1.3,0,0,-4.9e+02,-0.0011,-0.0059,0.00051,0.0031,0.0034,-0.13,0.21,3.4e-05,0.44,0.0012,-0.00039,-0.0048,0,0,-4.9e+02,8.7e-05,6.6e-05,0.027,0.017,0.038,0.0053,0.04,0.046,0.031,3.3e-07,4.6e-07,2.7e-06,0.0045,0.0048,9.9e-05,0.00081,3.9e-05,0.0008,0.0011,0.00081,0.0008,1,1,0.01 +26790000,0.7,0.037,0.074,0.71,-1.4,-0.73,-1.3,0,0,-4.9e+02,-0.001,-0.006,0.00057,0.0012,0.0046,-0.13,0.21,7.2e-05,0.44,0.0026,0.0003,-0.0048,0,0,-4.9e+02,8.7e-05,6.5e-05,0.024,0.016,0.037,0.0053,0.036,0.041,0.031,3.3e-07,4.6e-07,2.6e-06,0.0045,0.0047,9.9e-05,0.00076,3.9e-05,0.00075,0.00096,0.00076,0.00075,1,1,0.01 +26890000,0.7,0.046,0.095,0.7,-1.6,-0.79,-1.3,0,0,-4.9e+02,-0.001,-0.006,0.00058,0.0012,0.0047,-0.13,0.21,7.8e-05,0.44,0.0024,0.0009,-0.0052,0,0,-4.9e+02,8.8e-05,6.6e-05,0.024,0.018,0.044,0.0053,0.04,0.047,0.031,3.3e-07,4.6e-07,2.6e-06,0.0045,0.0047,9.8e-05,0.00072,3.9e-05,0.0007,0.00096,0.00072,0.0007,1,1,0.01 +26990000,0.7,0.052,0.12,0.7,-1.7,-0.88,-1.3,0,0,-4.9e+02,-0.00097,-0.006,0.00056,-0.00085,0.0026,-0.13,0.21,0.00012,0.44,0.003,0.003,-0.0067,0,0,-4.9e+02,8.9e-05,6.5e-05,0.021,0.017,0.043,0.0053,0.037,0.042,0.031,3.2e-07,4.6e-07,2.6e-06,0.0045,0.0047,9.7e-05,0.00065,3.9e-05,0.00063,0.00083,0.00065,0.00063,1,1,0.01 +27090000,0.7,0.053,0.12,0.7,-1.9,-0.97,-1.2,0,0,-4.9e+02,-0.00097,-0.006,0.00055,-0.00087,0.0026,-0.13,0.21,0.00012,0.44,0.003,0.0029,-0.0062,0,0,-4.9e+02,9e-05,6.6e-05,0.021,0.02,0.053,0.0053,0.04,0.048,0.031,3.3e-07,4.6e-07,2.6e-06,0.0045,0.0047,9.7e-05,0.00059,3.9e-05,0.00056,0.00082,0.0006,0.00056,1,1,0.01 +27190000,0.71,0.05,0.11,0.69,-2.1,-1,-1.2,0,0,-4.9e+02,-0.00095,-0.006,0.00056,-0.0022,0.0024,-0.13,0.21,4.8e-05,0.44,-0.00072,0.0022,-0.0058,0,0,-4.9e+02,9e-05,6.5e-05,0.017,0.02,0.052,0.0053,0.043,0.05,0.031,3.2e-07,4.6e-07,2.5e-06,0.0045,0.0047,9.6e-05,0.00055,3.9e-05,0.00052,0.00069,0.00055,0.00051,1,1,0.01 +27290000,0.71,0.044,0.095,0.69,-2.3,-1.1,-1.2,0,0,-4.9e+02,-0.00095,-0.006,0.00056,-0.0022,0.0024,-0.13,0.21,5.5e-05,0.44,-0.00088,0.0029,-0.0058,0,0,-4.9e+02,9.2e-05,6.6e-05,0.017,0.022,0.061,0.0053,0.047,0.058,0.031,3.2e-07,4.6e-07,2.5e-06,0.0045,0.0047,9.6e-05,0.00052,3.9e-05,0.00048,0.00069,0.00052,0.00048,1,1,0.01 +27390000,0.72,0.038,0.079,0.69,-2.4,-1.1,-1.2,0,0,-4.9e+02,-0.0009,-0.0059,0.00054,-0.0035,0.00051,-0.13,0.21,2.2e-05,0.44,-0.0032,0.0026,-0.0071,0,0,-4.9e+02,9.2e-05,6.6e-05,0.014,0.021,0.054,0.0053,0.049,0.059,0.031,3.2e-07,4.6e-07,2.5e-06,0.0045,0.0047,9.5e-05,0.00049,3.9e-05,0.00046,0.00057,0.00049,0.00046,1,1,0.01 +27490000,0.72,0.032,0.064,0.69,-2.5,-1.1,-1.2,0,0,-4.9e+02,-0.0009,-0.0059,0.00054,-0.0035,0.00063,-0.13,0.21,2.8e-05,0.44,-0.0033,0.0026,-0.0075,0,0,-4.9e+02,9.3e-05,6.6e-05,0.014,0.022,0.058,0.0053,0.054,0.068,0.031,3.2e-07,4.6e-07,2.5e-06,0.0045,0.0047,9.5e-05,0.00048,3.9e-05,0.00045,0.00057,0.00048,0.00045,1,1,0.01 +27590000,0.72,0.028,0.051,0.69,-2.6,-1.1,-1.2,0,0,-4.9e+02,-0.00089,-0.0059,0.00056,-0.0043,0.0013,-0.13,0.21,-2.3e-05,0.44,-0.0057,0.0022,-0.0072,0,0,-4.9e+02,9.4e-05,6.6e-05,0.012,0.02,0.049,0.0053,0.056,0.069,0.031,3.2e-07,4.5e-07,2.5e-06,0.0045,0.0047,9.4e-05,0.00046,3.9e-05,0.00045,0.00049,0.00046,0.00044,1,1,0.01 +27690000,0.72,0.027,0.05,0.69,-2.6,-1.1,-1.2,0,0,-4.9e+02,-0.0009,-0.0059,0.00056,-0.0043,0.0014,-0.13,0.21,-1.7e-05,0.44,-0.0058,0.0021,-0.0075,0,0,-4.9e+02,9.5e-05,6.6e-05,0.012,0.021,0.05,0.0053,0.062,0.078,0.031,3.2e-07,4.6e-07,2.5e-06,0.0045,0.0047,9.3e-05,0.00045,3.9e-05,0.00044,0.00048,0.00046,0.00044,1,1,0.01 +27790000,0.72,0.027,0.052,0.69,-2.6,-1.1,-1.2,0,0,-4.9e+02,-0.00089,-0.0059,0.00055,-0.0049,0.0016,-0.13,0.21,-3.9e-05,0.44,-0.0073,0.0016,-0.0078,0,0,-4.9e+02,9.6e-05,6.6e-05,0.011,0.02,0.043,0.0053,0.064,0.078,0.03,3.2e-07,4.5e-07,2.4e-06,0.0044,0.0047,9.3e-05,0.00044,3.9e-05,0.00044,0.00042,0.00044,0.00043,1,1,0.01 +27890000,0.72,0.027,0.05,0.69,-2.7,-1.2,-1.2,0,0,-4.9e+02,-0.00089,-0.0059,0.00055,-0.0049,0.0017,-0.13,0.21,-4e-05,0.44,-0.0073,0.0015,-0.0078,0,0,-4.9e+02,9.7e-05,6.6e-05,0.011,0.021,0.044,0.0053,0.07,0.088,0.031,3.2e-07,4.5e-07,2.4e-06,0.0044,0.0047,9.2e-05,0.00044,3.9e-05,0.00043,0.00042,0.00044,0.00043,1,1,0.01 +27990000,0.73,0.026,0.046,0.68,-2.7,-1.2,-1.2,0,0,-4.9e+02,-0.0009,-0.006,0.00058,-0.0049,0.0028,-0.13,0.21,-5.4e-05,0.44,-0.0085,0.001,-0.0077,0,0,-4.9e+02,9.7e-05,6.6e-05,0.0096,0.02,0.038,0.0053,0.072,0.088,0.03,3.2e-07,4.5e-07,2.4e-06,0.0044,0.0047,9.2e-05,0.00043,3.9e-05,0.00043,0.00038,0.00043,0.00042,1,1,0.01 +28090000,0.73,0.032,0.059,0.68,-2.8,-1.2,-1.2,0,0,-4.9e+02,-0.0009,-0.006,0.00057,-0.005,0.003,-0.13,0.21,-5.3e-05,0.44,-0.0086,0.00087,-0.0078,0,0,-4.9e+02,9.9e-05,6.6e-05,0.0096,0.021,0.039,0.0053,0.078,0.098,0.03,3.2e-07,4.5e-07,2.4e-06,0.0044,0.0047,9.1e-05,0.00042,3.9e-05,0.00042,0.00038,0.00042,0.00042,1,1,0.01 +28190000,0.73,0.037,0.072,0.68,-2.8,-1.2,-0.93,0,0,-4.9e+02,-0.00091,-0.006,0.00058,-0.0052,0.0035,-0.13,0.21,-7e-05,0.44,-0.0094,0.00045,-0.0077,0,0,-4.9e+02,0.0001,6.6e-05,0.0088,0.02,0.035,0.0053,0.08,0.098,0.031,3.2e-07,4.5e-07,2.4e-06,0.0044,0.0047,9.1e-05,0.00041,3.9e-05,0.00042,0.00035,0.00041,0.00041,1,1,0.01 +28290000,0.73,0.029,0.055,0.68,-2.8,-1.2,-0.069,0,0,-4.9e+02,-0.00091,-0.006,0.00057,-0.0053,0.0036,-0.13,0.21,-7.3e-05,0.44,-0.0094,0.00084,-0.0075,0,0,-4.9e+02,0.0001,6.6e-05,0.0088,0.02,0.035,0.0054,0.087,0.11,0.031,3.2e-07,4.5e-07,2.4e-06,0.0044,0.0047,9e-05,0.0004,3.9e-05,0.00041,0.00035,0.0004,0.00041,1,1,0.01 +28390000,0.73,0.012,0.024,0.68,-2.8,-1.2,0.79,0,0,-4.9e+02,-0.00091,-0.006,0.00056,-0.0052,0.0039,-0.13,0.21,-5.9e-05,0.44,-0.0096,0.00088,-0.0076,0,0,-4.9e+02,0.0001,6.6e-05,0.0088,0.02,0.036,0.0054,0.094,0.12,0.031,3.2e-07,4.5e-07,2.4e-06,0.0044,0.0047,9e-05,0.0004,3.9e-05,0.00041,0.00035,0.0004,0.0004,1,1,0.01 +28490000,0.73,0.0024,0.0064,0.68,-2.8,-1.2,1.1,0,0,-4.9e+02,-0.00092,-0.006,0.00056,-0.0048,0.0042,-0.13,0.21,-3.9e-05,0.44,-0.0097,0.0009,-0.0074,0,0,-4.9e+02,0.0001,6.7e-05,0.0088,0.02,0.035,0.0054,0.1,0.13,0.031,3.2e-07,4.6e-07,2.4e-06,0.0044,0.0047,9e-05,0.0004,3.9e-05,0.00041,0.00035,0.00039,0.0004,1,1,0.01 +28590000,0.73,0.0005,0.0029,0.68,-2.7,-1.2,0.98,0,0,-4.9e+02,-0.00092,-0.006,0.00057,-0.005,0.0043,-0.13,0.21,-4.1e-05,0.44,-0.0097,0.00096,-0.0075,0,0,-4.9e+02,0.0001,6.7e-05,0.0088,0.021,0.034,0.0054,0.11,0.14,0.031,3.2e-07,4.6e-07,2.4e-06,0.0044,0.0047,8.9e-05,0.00039,3.9e-05,0.00041,0.00034,0.00039,0.0004,1,1,0.01 +28690000,0.73,-0.00021,0.002,0.68,-2.6,-1.2,0.99,0,0,-4.9e+02,-0.00092,-0.006,0.00057,-0.0047,0.0048,-0.12,0.21,-2.1e-05,0.44,-0.0098,0.00088,-0.0074,0,0,-4.9e+02,0.0001,6.7e-05,0.0088,0.022,0.033,0.0054,0.12,0.15,0.031,3.2e-07,4.6e-07,2.3e-06,0.0044,0.0047,8.9e-05,0.00039,3.9e-05,0.00041,0.00034,0.00039,0.0004,1,1,0.01 +28790000,0.73,-0.00043,0.0019,0.68,-2.6,-1.2,0.99,0,0,-4.9e+02,-0.00096,-0.006,0.00058,-0.0043,0.005,-0.12,0.21,-6.5e-05,0.44,-0.011,8.5e-05,-0.0065,0,0,-4.9e+02,0.00011,6.7e-05,0.0085,0.02,0.029,0.0054,0.12,0.15,0.031,3.1e-07,4.5e-07,2.3e-06,0.0044,0.0047,8.8e-05,0.00039,3.9e-05,0.0004,0.00033,0.00039,0.0004,1,1,0.01 +28890000,0.73,-0.00042,0.0021,0.68,-2.5,-1.2,0.98,0,0,-4.9e+02,-0.00096,-0.006,0.00058,-0.004,0.0055,-0.12,0.21,-4.6e-05,0.44,-0.011,3e-05,-0.0064,0,0,-4.9e+02,0.00011,6.7e-05,0.0085,0.021,0.028,0.0054,0.13,0.16,0.031,3.1e-07,4.6e-07,2.3e-06,0.0044,0.0047,8.8e-05,0.00039,3.9e-05,0.0004,0.00033,0.00039,0.0004,1,1,0.01 +28990000,0.73,-8.3e-05,0.0028,0.68,-2.5,-1.1,0.98,0,0,-4.9e+02,-0.001,-0.006,0.0006,-0.0028,0.0059,-0.12,0.21,-8.1e-05,0.44,-0.013,-0.0009,-0.0051,0,0,-4.9e+02,0.00011,6.6e-05,0.0083,0.02,0.026,0.0054,0.13,0.16,0.031,3.1e-07,4.5e-07,2.3e-06,0.0044,0.0046,8.7e-05,0.00039,3.9e-05,0.0004,0.00032,0.00038,0.0004,1,1,0.01 +29090000,0.73,8.2e-05,0.0032,0.68,-2.4,-1.1,0.97,0,0,-4.9e+02,-0.001,-0.006,0.0006,-0.0026,0.0064,-0.12,0.21,-6.4e-05,0.44,-0.013,-0.00097,-0.005,0,0,-4.9e+02,0.00011,6.7e-05,0.0083,0.021,0.026,0.0054,0.13,0.17,0.031,3.1e-07,4.5e-07,2.3e-06,0.0044,0.0046,8.7e-05,0.00038,3.9e-05,0.0004,0.00032,0.00038,0.0004,1,1,0.01 +29190000,0.73,0.00032,0.0036,0.68,-2.4,-1.1,0.96,0,0,-4.9e+02,-0.001,-0.006,0.00061,-0.0023,0.0065,-0.12,0.21,-0.0001,0.44,-0.013,-0.0012,-0.0045,0,0,-4.9e+02,0.00011,6.6e-05,0.0083,0.02,0.024,0.0054,0.14,0.17,0.031,3.1e-07,4.5e-07,2.3e-06,0.0044,0.0046,8.6e-05,0.00038,3.9e-05,0.0004,0.00031,0.00038,0.00039,1,1,0.01 +29290000,0.73,0.00068,0.0044,0.68,-2.3,-1.1,0.99,0,0,-4.9e+02,-0.001,-0.006,0.00061,-0.0023,0.007,-0.12,0.21,-9.3e-05,0.44,-0.013,-0.0013,-0.0045,0,0,-4.9e+02,0.00011,6.6e-05,0.0083,0.021,0.025,0.0054,0.14,0.18,0.031,3.1e-07,4.5e-07,2.3e-06,0.0044,0.0046,8.6e-05,0.00038,3.9e-05,0.0004,0.00031,0.00038,0.00039,1,1,0.01 +29390000,0.74,0.0013,0.0059,0.68,-2.3,-1.1,1,0,0,-4.9e+02,-0.0011,-0.006,0.00061,-0.0015,0.0075,-0.12,0.21,-0.00014,0.44,-0.014,-0.002,-0.0036,0,0,-4.9e+02,0.00011,6.6e-05,0.0083,0.02,0.024,0.0054,0.14,0.18,0.031,3e-07,4.4e-07,2.3e-06,0.0044,0.0046,8.5e-05,0.00038,3.9e-05,0.00039,0.00031,0.00038,0.00039,1,1,0.01 +29490000,0.74,0.0018,0.007,0.68,-2.3,-1.1,1,0,0,-4.9e+02,-0.0011,-0.006,0.00061,-0.0016,0.0078,-0.12,0.21,-0.00013,0.44,-0.014,-0.002,-0.0036,0,0,-4.9e+02,0.00011,6.6e-05,0.0083,0.021,0.025,0.0054,0.15,0.19,0.031,3e-07,4.4e-07,2.2e-06,0.0044,0.0046,8.5e-05,0.00038,3.9e-05,0.00039,0.00031,0.00038,0.00039,1,1,0.01 +29590000,0.74,0.0023,0.008,0.68,-2.2,-1.1,0.99,0,0,-4.9e+02,-0.0011,-0.006,0.00059,-0.00088,0.0077,-0.12,0.21,-0.00014,0.44,-0.014,-0.0023,-0.0032,0,0,-4.9e+02,0.00011,6.6e-05,0.0083,0.02,0.025,0.0054,0.15,0.19,0.031,3e-07,4.4e-07,2.2e-06,0.0044,0.0046,8.4e-05,0.00037,3.9e-05,0.00039,0.00031,0.00037,0.00039,1,1,0.01 +29690000,0.74,0.0026,0.0086,0.68,-2.2,-1.1,0.99,0,0,-4.9e+02,-0.0011,-0.006,0.00059,-0.00098,0.0081,-0.12,0.21,-0.00014,0.44,-0.014,-0.0023,-0.0031,0,0,-4.9e+02,0.00011,6.6e-05,0.0083,0.021,0.026,0.0054,0.16,0.2,0.031,3e-07,4.4e-07,2.2e-06,0.0044,0.0046,8.4e-05,0.00037,3.9e-05,0.00039,0.00031,0.00037,0.00039,1,1,0.01 +29790000,0.74,0.003,0.009,0.68,-2.2,-1.1,0.98,0,0,-4.9e+02,-0.0011,-0.006,0.00057,0.0002,0.0078,-0.12,0.21,-0.00016,0.44,-0.015,-0.0025,-0.0025,0,0,-4.9e+02,0.00011,6.5e-05,0.0083,0.02,0.025,0.0054,0.16,0.2,0.031,3e-07,4.3e-07,2.2e-06,0.0043,0.0045,8.3e-05,0.00037,3.9e-05,0.00039,0.00031,0.00037,0.00039,1,1,0.01 +29890000,0.74,0.003,0.0092,0.68,-2.1,-1.1,0.96,0,0,-4.9e+02,-0.0011,-0.006,0.00057,-0.00011,0.0084,-0.12,0.21,-0.00016,0.44,-0.015,-0.0026,-0.0025,0,0,-4.9e+02,0.00011,6.6e-05,0.0083,0.021,0.027,0.0054,0.17,0.21,0.031,3e-07,4.3e-07,2.2e-06,0.0043,0.0045,8.3e-05,0.00037,3.9e-05,0.00039,0.00031,0.00037,0.00039,1,1,0.01 +29990000,0.74,0.0032,0.0092,0.68,-2.1,-1.1,0.95,0,0,-4.9e+02,-0.0011,-0.006,0.00052,0.0006,0.0077,-0.12,0.21,-0.00018,0.44,-0.015,-0.0028,-0.0021,0,0,-4.9e+02,0.00011,6.5e-05,0.0082,0.02,0.026,0.0054,0.17,0.21,0.03,2.9e-07,4.2e-07,2.1e-06,0.0043,0.0045,8.3e-05,0.00037,3.9e-05,0.00039,0.0003,0.00037,0.00039,1,1,0.01 +30090000,0.74,0.0031,0.0091,0.68,-2.1,-1.1,0.94,0,0,-4.9e+02,-0.0011,-0.006,0.00052,0.00025,0.0082,-0.12,0.21,-0.00019,0.44,-0.015,-0.0029,-0.0022,0,0,-4.9e+02,0.00011,6.5e-05,0.0082,0.021,0.028,0.0054,0.18,0.22,0.03,2.9e-07,4.2e-07,2.1e-06,0.0043,0.0045,8.2e-05,0.00037,3.9e-05,0.00039,0.0003,0.00037,0.00039,1,1,0.01 +30190000,0.74,0.0033,0.0088,0.68,-2,-1.1,0.92,0,0,-4.9e+02,-0.0012,-0.006,0.00048,0.0014,0.0073,-0.12,0.2,-0.00021,0.44,-0.014,-0.003,-0.0017,0,0,-4.9e+02,0.00011,6.5e-05,0.0082,0.021,0.027,0.0054,0.18,0.22,0.031,2.9e-07,4.1e-07,2.1e-06,0.0043,0.0044,8.2e-05,0.00037,3.9e-05,0.00039,0.0003,0.00036,0.00039,1,1,0.01 +30290000,0.74,0.0031,0.0086,0.68,-2,-1.1,0.91,0,0,-4.9e+02,-0.0012,-0.006,0.00048,0.0011,0.0076,-0.12,0.2,-0.00021,0.44,-0.014,-0.003,-0.0017,0,0,-4.9e+02,0.00011,6.5e-05,0.0082,0.021,0.03,0.0054,0.19,0.23,0.031,2.9e-07,4.1e-07,2.1e-06,0.0043,0.0044,8.1e-05,0.00036,3.9e-05,0.00039,0.0003,0.00036,0.00039,1,1,0.01 +30390000,0.74,0.0032,0.0083,0.68,-2,-1.1,0.9,0,0,-4.9e+02,-0.0012,-0.006,0.00044,0.0021,0.0072,-0.12,0.2,-0.00021,0.43,-0.014,-0.0031,-0.0014,0,0,-4.9e+02,0.00011,6.5e-05,0.0081,0.021,0.029,0.0053,0.19,0.23,0.03,2.9e-07,3.9e-07,2e-06,0.0043,0.0044,8.1e-05,0.00036,3.9e-05,0.00039,0.0003,0.00036,0.00038,1,1,0.01 +30490000,0.74,0.0031,0.008,0.68,-2,-1.1,0.88,0,0,-4.9e+02,-0.0012,-0.006,0.00045,0.002,0.0075,-0.12,0.2,-0.00021,0.43,-0.014,-0.0031,-0.0014,0,0,-4.9e+02,0.00011,6.5e-05,0.0081,0.022,0.031,0.0054,0.2,0.24,0.031,2.9e-07,3.9e-07,2e-06,0.0043,0.0044,8.1e-05,0.00036,3.9e-05,0.00039,0.0003,0.00036,0.00038,1,1,0.01 +30590000,0.74,0.0031,0.0075,0.68,-1.9,-1.1,0.84,0,0,-4.9e+02,-0.0012,-0.0059,0.00041,0.0031,0.0069,-0.12,0.2,-0.00023,0.43,-0.014,-0.0031,-0.001,0,0,-4.9e+02,0.0001,6.5e-05,0.0079,0.021,0.03,0.0053,0.2,0.24,0.03,2.8e-07,3.8e-07,1.9e-06,0.0043,0.0044,8e-05,0.00036,3.9e-05,0.00039,0.00029,0.00036,0.00038,1,1,0.01 +30690000,0.74,0.0029,0.0072,0.68,-1.9,-1.1,0.84,0,0,-4.9e+02,-0.0012,-0.0059,0.00041,0.0028,0.0073,-0.12,0.2,-0.00024,0.43,-0.014,-0.0031,-0.001,0,0,-4.9e+02,0.0001,6.5e-05,0.0079,0.022,0.032,0.0054,0.21,0.25,0.03,2.8e-07,3.8e-07,1.9e-06,0.0043,0.0044,8e-05,0.00036,3.9e-05,0.00039,0.00029,0.00036,0.00038,1,1,0.01 +30790000,0.74,0.0029,0.0067,0.68,-1.9,-1,0.83,0,0,-4.9e+02,-0.0012,-0.0059,0.00035,0.0039,0.0063,-0.12,0.2,-0.00024,0.43,-0.013,-0.0032,-0.00071,0,0,-4.9e+02,0.0001,6.4e-05,0.0078,0.021,0.03,0.0053,0.21,0.25,0.031,2.8e-07,3.7e-07,1.9e-06,0.0043,0.0043,7.9e-05,0.00036,3.9e-05,0.00038,0.00029,0.00036,0.00038,1,1,0.01 +30890000,0.74,0.0027,0.0063,0.68,-1.9,-1,0.82,0,0,-4.9e+02,-0.0012,-0.0059,0.00035,0.0039,0.0068,-0.12,0.2,-0.00023,0.43,-0.013,-0.0032,-0.00069,0,0,-4.9e+02,0.0001,6.5e-05,0.0078,0.022,0.033,0.0054,0.22,0.26,0.031,2.8e-07,3.7e-07,1.9e-06,0.0043,0.0043,7.9e-05,0.00036,3.9e-05,0.00038,0.00029,0.00036,0.00038,1,1,0.01 +30990000,0.73,0.0028,0.0056,0.68,-1.8,-1,0.81,0,0,-4.9e+02,-0.0013,-0.0059,0.0003,0.0051,0.006,-0.12,0.2,-0.00025,0.43,-0.013,-0.0032,-0.00028,0,0,-4.9e+02,9.8e-05,6.4e-05,0.0076,0.021,0.031,0.0053,0.22,0.26,0.03,2.8e-07,3.6e-07,1.8e-06,0.0042,0.0043,7.8e-05,0.00036,3.9e-05,0.00038,0.00028,0.00036,0.00038,1,1,0.01 +31090000,0.73,0.0025,0.0051,0.68,-1.8,-1,0.8,0,0,-4.9e+02,-0.0013,-0.0059,0.00029,0.0049,0.0065,-0.12,0.2,-0.00025,0.43,-0.013,-0.0032,-0.00028,0,0,-4.9e+02,9.9e-05,6.4e-05,0.0076,0.022,0.033,0.0054,0.23,0.27,0.031,2.8e-07,3.6e-07,1.8e-06,0.0042,0.0043,7.8e-05,0.00036,3.9e-05,0.00038,0.00028,0.00036,0.00038,1,1,0.01 +31190000,0.73,0.0025,0.0046,0.68,-1.8,-1,0.79,0,0,-4.9e+02,-0.0013,-0.0059,0.00025,0.0054,0.0063,-0.12,0.2,-0.00026,0.43,-0.012,-0.0032,-6.7e-05,0,0,-4.9e+02,9.5e-05,6.4e-05,0.0074,0.021,0.032,0.0053,0.23,0.27,0.03,2.7e-07,3.4e-07,1.7e-06,0.0042,0.0042,7.8e-05,0.00036,3.9e-05,0.00038,0.00028,0.00036,0.00038,1,1,0.01 +31290000,0.73,0.0022,0.004,0.68,-1.7,-1,0.8,0,0,-4.9e+02,-0.0013,-0.0059,0.00026,0.0051,0.0069,-0.12,0.2,-0.00027,0.43,-0.012,-0.0032,-0.0001,0,0,-4.9e+02,9.6e-05,6.4e-05,0.0074,0.022,0.034,0.0053,0.24,0.28,0.03,2.7e-07,3.5e-07,1.7e-06,0.0042,0.0042,7.7e-05,0.00036,3.9e-05,0.00038,0.00028,0.00036,0.00038,1,1,0.01 +31390000,0.73,0.0021,0.0034,0.68,-1.7,-1,0.79,0,0,-4.9e+02,-0.0013,-0.0059,0.00022,0.0058,0.0065,-0.12,0.2,-0.0003,0.43,-0.012,-0.0033,0.0002,0,0,-4.9e+02,9.3e-05,6.4e-05,0.0072,0.021,0.032,0.0053,0.24,0.28,0.03,2.7e-07,3.3e-07,1.7e-06,0.0042,0.0042,7.7e-05,0.00036,3.8e-05,0.00038,0.00027,0.00036,0.00038,1,1,0.01 +31490000,0.73,0.0018,0.0027,0.68,-1.7,-1,0.79,0,0,-4.9e+02,-0.0013,-0.0059,0.00021,0.0056,0.0071,-0.12,0.2,-0.00029,0.43,-0.012,-0.0033,0.00024,0,0,-4.9e+02,9.3e-05,6.4e-05,0.0072,0.022,0.034,0.0053,0.25,0.29,0.03,2.7e-07,3.3e-07,1.7e-06,0.0042,0.0042,7.7e-05,0.00036,3.8e-05,0.00038,0.00027,0.00036,0.00038,1,1,0.01 +31590000,0.73,0.0019,0.0022,0.68,-1.7,-0.98,0.79,0,0,-4.9e+02,-0.0013,-0.0058,0.00016,0.0068,0.0067,-0.12,0.2,-0.00028,0.43,-0.011,-0.0033,0.00053,0,0,-4.9e+02,9e-05,6.3e-05,0.007,0.021,0.032,0.0053,0.25,0.29,0.03,2.7e-07,3.2e-07,1.6e-06,0.0042,0.0042,7.6e-05,0.00036,3.8e-05,0.00038,0.00027,0.00036,0.00037,1,1,0.01 +31690000,0.73,0.0016,0.0015,0.68,-1.6,-0.98,0.79,0,0,-4.9e+02,-0.0013,-0.0058,0.00016,0.0064,0.0072,-0.12,0.2,-0.00029,0.43,-0.011,-0.0033,0.00048,0,0,-4.9e+02,9.1e-05,6.4e-05,0.007,0.022,0.035,0.0053,0.26,0.3,0.03,2.7e-07,3.2e-07,1.6e-06,0.0042,0.0041,7.6e-05,0.00036,3.8e-05,0.00038,0.00027,0.00036,0.00037,1,1,0.01 +31790000,0.73,0.0015,0.00069,0.68,-1.6,-0.96,0.79,0,0,-4.9e+02,-0.0013,-0.0058,0.00012,0.0077,0.007,-0.12,0.2,-0.00029,0.43,-0.011,-0.0033,0.00086,0,0,-4.9e+02,8.7e-05,6.3e-05,0.0068,0.022,0.032,0.0053,0.26,0.3,0.03,2.6e-07,3.1e-07,1.5e-06,0.0041,0.0041,7.5e-05,0.00036,3.8e-05,0.00038,0.00026,0.00036,0.00037,1,1,0.01 +31890000,0.73,0.0012,-2.8e-05,0.68,-1.6,-0.96,0.79,0,0,-4.9e+02,-0.0013,-0.0058,0.00012,0.0075,0.0076,-0.12,0.2,-0.00029,0.43,-0.011,-0.0033,0.00089,0,0,-4.9e+02,8.8e-05,6.3e-05,0.0068,0.023,0.035,0.0053,0.27,0.31,0.03,2.6e-07,3.1e-07,1.5e-06,0.0041,0.0041,7.5e-05,0.00036,3.8e-05,0.00038,0.00026,0.00036,0.00037,1,1,0.01 +31990000,0.73,0.0012,-0.00066,0.69,-1.6,-0.94,0.78,0,0,-4.9e+02,-0.0013,-0.0058,6.8e-05,0.0083,0.0074,-0.12,0.2,-0.00029,0.43,-0.0099,-0.0033,0.0011,0,0,-4.9e+02,8.5e-05,6.3e-05,0.0066,0.022,0.032,0.0052,0.27,0.31,0.03,2.6e-07,3.1e-07,1.5e-06,0.0041,0.0041,7.5e-05,0.00036,3.8e-05,0.00038,0.00026,0.00036,0.00037,1,1,0.01 +32090000,0.73,0.00084,-0.0014,0.69,-1.5,-0.93,0.79,0,0,-4.9e+02,-0.0013,-0.0058,6.6e-05,0.008,0.008,-0.12,0.2,-0.00029,0.43,-0.0099,-0.0033,0.0011,0,0,-4.9e+02,8.5e-05,6.3e-05,0.0066,0.023,0.035,0.0053,0.28,0.32,0.03,2.6e-07,3.1e-07,1.5e-06,0.0041,0.0041,7.5e-05,0.00036,3.8e-05,0.00037,0.00026,0.00036,0.00037,1,1,0.01 +32190000,0.73,0.00067,-0.0024,0.69,-1.5,-0.92,0.79,0,0,-4.9e+02,-0.0014,-0.0058,1.1e-05,0.0087,0.008,-0.12,0.2,-0.0003,0.43,-0.0094,-0.0033,0.0014,0,0,-4.9e+02,8.2e-05,6.3e-05,0.0063,0.022,0.032,0.0052,0.28,0.32,0.03,2.6e-07,3e-07,1.4e-06,0.0041,0.0041,7.4e-05,0.00036,3.8e-05,0.00037,0.00025,0.00036,0.00037,1,1,0.01 +32290000,0.73,0.00039,-0.0031,0.69,-1.5,-0.91,0.79,0,0,-4.9e+02,-0.0014,-0.0058,1.2e-05,0.0085,0.0088,-0.12,0.2,-0.0003,0.43,-0.0094,-0.0033,0.0014,0,0,-4.9e+02,8.3e-05,6.3e-05,0.0063,0.023,0.035,0.0052,0.29,0.33,0.03,2.6e-07,3e-07,1.4e-06,0.0041,0.0041,7.4e-05,0.00036,3.8e-05,0.00037,0.00025,0.00036,0.00037,1,1,0.01 +32390000,0.73,0.00032,-0.0039,0.69,-1.5,-0.89,0.79,0,0,-4.9e+02,-0.0014,-0.0058,-1.8e-05,0.009,0.0086,-0.12,0.2,-0.00029,0.43,-0.0089,-0.0033,0.0016,0,0,-4.9e+02,8e-05,6.2e-05,0.0061,0.022,0.032,0.0052,0.29,0.33,0.03,2.5e-07,2.9e-07,1.4e-06,0.0041,0.004,7.3e-05,0.00036,3.8e-05,0.00037,0.00025,0.00035,0.00037,1,1,0.01 +32490000,0.73,0.00017,-0.0041,0.69,-1.4,-0.89,0.79,0,0,-4.9e+02,-0.0014,-0.0058,-1.4e-05,0.0088,0.0092,-0.12,0.2,-0.00029,0.43,-0.0089,-0.0033,0.0016,0,0,-4.9e+02,8.1e-05,6.3e-05,0.0061,0.023,0.034,0.0052,0.3,0.34,0.03,2.5e-07,2.9e-07,1.4e-06,0.0041,0.004,7.3e-05,0.00036,3.8e-05,0.00037,0.00025,0.00035,0.00037,1,1,0.01 +32590000,0.72,0.00024,-0.0045,0.69,-1.4,-0.87,0.79,0,0,-4.9e+02,-0.0014,-0.0058,-4.7e-05,0.0093,0.0092,-0.12,0.2,-0.0003,0.43,-0.0084,-0.0032,0.0017,0,0,-4.9e+02,7.8e-05,6.2e-05,0.0059,0.022,0.032,0.0052,0.29,0.34,0.03,2.5e-07,2.8e-07,1.3e-06,0.0041,0.004,7.3e-05,0.00036,3.8e-05,0.00037,0.00024,0.00035,0.00037,1,1,0.01 +32690000,0.72,0.00021,-0.0045,0.69,-1.4,-0.86,0.79,0,0,-4.9e+02,-0.0014,-0.0058,-4.8e-05,0.0092,0.0098,-0.12,0.2,-0.0003,0.43,-0.0084,-0.0033,0.0018,0,0,-4.9e+02,7.9e-05,6.2e-05,0.0059,0.023,0.034,0.0052,0.31,0.35,0.03,2.5e-07,2.9e-07,1.3e-06,0.0041,0.004,7.3e-05,0.00036,3.8e-05,0.00037,0.00024,0.00035,0.00037,1,1,0.01 +32790000,0.72,0.00035,-0.0046,0.69,-1.3,-0.85,0.78,0,0,-4.9e+02,-0.0014,-0.0058,-7.8e-05,0.0097,0.0098,-0.12,0.21,-0.0003,0.43,-0.008,-0.0032,0.0019,0,0,-4.9e+02,7.6e-05,6.2e-05,0.0057,0.022,0.032,0.0052,0.3,0.35,0.03,2.5e-07,2.8e-07,1.3e-06,0.0041,0.004,7.2e-05,0.00036,3.8e-05,0.00037,0.00023,0.00035,0.00037,1,1,0.01 +32890000,0.72,0.00043,-0.0045,0.69,-1.3,-0.84,0.78,0,0,-4.9e+02,-0.0014,-0.0058,-9.4e-05,0.0095,0.01,-0.12,0.21,-0.0003,0.43,-0.008,-0.0032,0.002,0,0,-4.9e+02,7.7e-05,6.2e-05,0.0057,0.023,0.034,0.0052,0.32,0.36,0.03,2.5e-07,2.8e-07,1.3e-06,0.0041,0.004,7.2e-05,0.00036,3.8e-05,0.00037,0.00023,0.00035,0.00037,1,1,0.01 +32990000,0.72,0.00066,-0.0046,0.69,-1.3,-0.82,0.78,0,0,-4.9e+02,-0.0014,-0.0057,-0.0001,0.01,0.011,-0.11,0.21,-0.0003,0.43,-0.0075,-0.0033,0.0022,0,0,-4.9e+02,7.5e-05,6.1e-05,0.0055,0.022,0.031,0.0052,0.31,0.36,0.03,2.5e-07,2.7e-07,1.2e-06,0.004,0.004,7.2e-05,0.00036,3.8e-05,0.00037,0.00023,0.00035,0.00037,1,1,0.01 +33090000,0.72,0.00062,-0.0046,0.69,-1.3,-0.82,0.77,0,0,-4.9e+02,-0.0014,-0.0057,-9e-05,0.0098,0.011,-0.11,0.21,-0.0003,0.43,-0.0075,-0.0033,0.0021,0,0,-4.9e+02,7.5e-05,6.2e-05,0.0055,0.023,0.033,0.0052,0.33,0.37,0.03,2.5e-07,2.7e-07,1.2e-06,0.004,0.004,7.1e-05,0.00036,3.8e-05,0.00037,0.00023,0.00035,0.00036,1,1,0.01 +33190000,0.72,0.0041,-0.0038,0.7,-1.2,-0.8,0.72,0,0,-4.9e+02,-0.0014,-0.0057,-0.00011,0.0099,0.011,-0.11,0.21,-0.0003,0.43,-0.0071,-0.0032,0.0021,0,0,-4.9e+02,7.3e-05,6.1e-05,0.0053,0.022,0.031,0.0051,0.32,0.37,0.03,2.4e-07,2.7e-07,1.2e-06,0.004,0.0039,7.1e-05,0.00036,3.8e-05,0.00037,0.00022,0.00035,0.00036,1,1,0.01 +33290000,0.67,0.016,-0.0032,0.74,-1.2,-0.79,0.7,0,0,-4.9e+02,-0.0014,-0.0057,-0.0001,0.0097,0.012,-0.11,0.2,-0.00028,0.43,-0.0073,-0.0034,0.0021,0,0,-4.9e+02,7.4e-05,6.1e-05,0.0053,0.023,0.032,0.0052,0.33,0.38,0.03,2.4e-07,2.7e-07,1.2e-06,0.004,0.0039,7.1e-05,0.00035,3.8e-05,0.00037,0.00022,0.00035,0.00036,1,1,0.01 +33390000,0.56,0.014,-0.0036,0.83,-1.2,-0.77,0.89,0,0,-4.9e+02,-0.0014,-0.0057,-0.00012,0.0099,0.012,-0.11,0.21,-0.00035,0.43,-0.0065,-0.0033,0.0022,0,0,-4.9e+02,7.2e-05,6e-05,0.0049,0.021,0.03,0.0051,0.33,0.38,0.03,2.4e-07,2.7e-07,1.1e-06,0.004,0.0039,7.1e-05,0.00032,3.8e-05,0.00037,0.00021,0.00032,0.00036,1,1,0.01 +33490000,0.43,0.0072,-0.0011,0.9,-1.2,-0.76,0.91,0,0,-4.9e+02,-0.0014,-0.0057,-0.00015,0.0099,0.012,-0.11,0.21,-0.00043,0.43,-0.006,-0.0021,0.0022,0,0,-4.9e+02,7.2e-05,6e-05,0.0042,0.022,0.03,0.0051,0.34,0.38,0.03,2.4e-07,2.7e-07,1.1e-06,0.004,0.0039,7.1e-05,0.00024,3.7e-05,0.00037,0.00017,0.00024,0.00036,1,1,0.01 +33590000,0.27,0.0012,-0.0036,0.96,-1.2,-0.75,0.87,0,0,-4.9e+02,-0.0014,-0.0057,-0.0002,0.0099,0.012,-0.11,0.21,-0.00068,0.43,-0.004,-0.0014,0.0024,0,0,-4.9e+02,7.1e-05,5.9e-05,0.0032,0.02,0.028,0.0051,0.34,0.37,0.03,2.4e-07,2.6e-07,1e-06,0.004,0.0039,7.1e-05,0.00015,3.6e-05,0.00037,0.00012,0.00015,0.00036,1,1,0.01 +33690000,0.098,-0.0024,-0.0066,1,-1.1,-0.74,0.88,0,0,-4.9e+02,-0.0014,-0.0057,-0.00021,0.0099,0.012,-0.11,0.21,-0.00073,0.43,-0.0036,-0.0011,0.0024,0,0,-4.9e+02,7.1e-05,5.9e-05,0.0025,0.021,0.029,0.0051,0.35,0.38,0.03,2.4e-07,2.6e-07,1e-06,0.004,0.0039,7.1e-05,0.0001,3.5e-05,0.00036,8.2e-05,9.6e-05,0.00036,1,1,0.01 +33790000,-0.074,-0.0043,-0.0084,1,-1.1,-0.71,0.86,0,0,-4.9e+02,-0.0015,-0.0057,-0.00024,0.0099,0.012,-0.11,0.21,-0.00089,0.43,-0.0022,-0.001,0.0026,0,0,-4.9e+02,6.9e-05,5.8e-05,0.002,0.02,0.027,0.0051,0.35,0.37,0.03,2.4e-07,2.6e-07,1e-06,0.004,0.0039,7.1e-05,6.8e-05,3.5e-05,0.00036,5.4e-05,6.1e-05,0.00036,1,1,0.01 +33890000,-0.24,-0.0057,-0.0091,0.97,-1,-0.68,0.85,0,0,-4.9e+02,-0.0015,-0.0057,-0.00024,0.0099,0.012,-0.11,0.21,-0.001,0.43,-0.0014,-0.0011,0.0026,0,0,-4.9e+02,6.9e-05,5.8e-05,0.0017,0.022,0.029,0.0051,0.36,0.38,0.03,2.4e-07,2.6e-07,1e-06,0.004,0.0039,7.1e-05,4.8e-05,3.4e-05,0.00036,3.8e-05,4.1e-05,0.00036,1,1,0.01 +33990000,-0.39,-0.0044,-0.013,0.92,-0.94,-0.64,0.82,0,0,-4.9e+02,-0.0015,-0.0057,-0.00025,0.0098,0.012,-0.11,0.21,-0.00099,0.43,-0.0012,-0.00065,0.0028,0,0,-4.9e+02,6.6e-05,5.7e-05,0.0015,0.021,0.029,0.0051,0.36,0.37,0.03,2.4e-07,2.6e-07,9.9e-07,0.004,0.0039,7.1e-05,3.7e-05,3.4e-05,0.00036,2.8e-05,2.9e-05,0.00036,1,1,0.01 +34090000,-0.5,-0.0035,-0.014,0.87,-0.89,-0.59,0.82,0,0,-4.9e+02,-0.0015,-0.0057,-0.00025,0.0097,0.013,-0.11,0.21,-0.00096,0.43,-0.0013,-0.00053,0.0028,0,0,-4.9e+02,6.6e-05,5.7e-05,0.0014,0.023,0.031,0.0051,0.37,0.38,0.03,2.4e-07,2.6e-07,9.9e-07,0.004,0.0039,7.1e-05,3e-05,3.4e-05,0.00036,2.2e-05,2.3e-05,0.00036,1,1,0.01 +34190000,-0.57,-0.0034,-0.012,0.82,-0.86,-0.54,0.82,0,0,-4.9e+02,-0.0015,-0.0057,-0.00023,0.0072,0.016,-0.11,0.21,-0.00096,0.43,-0.0011,-0.00031,0.003,0,0,-4.9e+02,6.3e-05,5.5e-05,0.0013,0.023,0.031,0.0051,0.5,0.5,0.03,2.4e-07,2.6e-07,9.8e-07,0.0039,0.0039,7e-05,2.6e-05,3.4e-05,0.00036,1.8e-05,1.8e-05,0.00036,1,1,0.01 +34290000,-0.61,-0.0044,-0.0093,0.79,-0.81,-0.48,0.82,0,0,-4.9e+02,-0.0015,-0.0057,-0.00023,0.0068,0.016,-0.11,0.21,-0.00098,0.43,-0.001,-0.00018,0.003,0,0,-4.9e+02,6.3e-05,5.5e-05,0.0013,0.025,0.034,0.0051,0.5,0.5,0.03,2.4e-07,2.6e-07,9.8e-07,0.0039,0.0039,7e-05,2.3e-05,3.4e-05,0.00036,1.5e-05,1.5e-05,0.00036,1,1,0.01 +34390000,-0.63,-0.0049,-0.0064,0.77,-0.78,-0.44,0.82,0,0,-4.9e+02,-0.0015,-0.0057,-0.0002,0.0031,0.021,-0.11,0.21,-0.00095,0.43,-0.00099,2.1e-05,0.0031,0,0,-4.9e+02,5.8e-05,5.3e-05,0.0012,0.025,0.033,0.0051,0.17,0.17,0.03,2.4e-07,2.5e-07,9.7e-07,0.0038,0.0038,7e-05,2e-05,3.4e-05,0.00036,1.4e-05,1.3e-05,0.00036,1,1,0.01 +34490000,-0.65,-0.0059,-0.0042,0.76,-0.73,-0.39,0.82,0,0,-4.9e+02,-0.0015,-0.0057,-0.0002,0.0029,0.021,-0.11,0.21,-0.00096,0.43,-0.00092,-1.7e-05,0.0031,0,0,-4.9e+02,5.8e-05,5.3e-05,0.0012,0.028,0.037,0.0051,0.17,0.17,0.03,2.4e-07,2.5e-07,9.7e-07,0.0038,0.0038,7e-05,1.9e-05,3.4e-05,0.00036,1.2e-05,1.2e-05,0.00036,1,1,0.01 +34590000,-0.66,-0.0059,-0.0027,0.75,-0.71,-0.37,0.82,0,0,-4.9e+02,-0.0015,-0.0058,-0.00016,-0.0028,0.028,-0.11,0.21,-0.00093,0.43,-0.00098,3.8e-05,0.0033,0,0,-4.9e+02,5.4e-05,5e-05,0.0011,0.028,0.035,0.0051,0.1,0.1,0.03,2.4e-07,2.5e-07,9.6e-07,0.0037,0.0037,6.9e-05,1.7e-05,3.3e-05,0.00036,1.1e-05,1e-05,0.00036,1,1,0.01 +34690000,-0.67,-0.0063,-0.0019,0.75,-0.65,-0.32,0.81,0,0,-4.9e+02,-0.0015,-0.0058,-0.00015,-0.0031,0.028,-0.11,0.21,-0.00095,0.43,-0.00084,0.00024,0.0032,0,0,-4.9e+02,5.4e-05,5e-05,0.0011,0.031,0.039,0.0051,0.1,0.1,0.03,2.4e-07,2.5e-07,9.6e-07,0.0037,0.0037,6.9e-05,1.6e-05,3.3e-05,0.00036,1e-05,9.4e-06,0.00036,1,1,0.01 +34790000,-0.67,-0.0055,-0.0013,0.74,-0.64,-0.31,0.8,0,0,-4.9e+02,-0.0015,-0.0058,-9.1e-05,-0.011,0.036,-0.11,0.21,-0.00098,0.43,-0.00067,0.00033,0.0033,0,0,-4.9e+02,4.9e-05,4.7e-05,0.0011,0.03,0.037,0.0051,0.074,0.075,0.03,2.4e-07,2.5e-07,9.5e-07,0.0035,0.0036,6.9e-05,1.5e-05,3.3e-05,0.00036,9.2e-06,8.5e-06,0.00036,1,1,0.01 +34890000,-0.67,-0.0055,-0.0012,0.74,-0.59,-0.27,0.8,0,0,-4.9e+02,-0.0015,-0.0058,-9.1e-05,-0.012,0.036,-0.11,0.21,-0.00097,0.43,-0.00067,0.00029,0.0033,0,0,-4.9e+02,4.9e-05,4.7e-05,0.0011,0.033,0.041,0.0051,0.076,0.078,0.03,2.4e-07,2.5e-07,9.5e-07,0.0035,0.0036,6.9e-05,1.4e-05,3.3e-05,0.00036,8.6e-06,7.9e-06,0.00036,1,1,0.01 +34990000,-0.67,-0.012,-0.0036,0.74,0.46,0.33,-0.032,0,0,-4.9e+02,-0.0016,-0.0059,-2.8e-05,-0.02,0.045,-0.11,0.21,-0.00098,0.43,-0.00054,0.00034,0.0035,0,0,-4.9e+02,4.4e-05,4.3e-05,0.001,0.034,0.047,0.0053,0.06,0.061,0.03,2.4e-07,2.5e-07,9.4e-07,0.0033,0.0034,6.9e-05,1.3e-05,3.3e-05,0.00036,8.1e-06,7.3e-06,0.00036,1,1,0.01 +35090000,-0.67,-0.012,-0.0036,0.74,0.59,0.36,-0.091,0,0,-4.9e+02,-0.0016,-0.0059,-2.9e-05,-0.02,0.045,-0.11,0.21,-0.00099,0.43,-0.0005,0.00028,0.0035,0,0,-4.9e+02,4.4e-05,4.3e-05,0.001,0.038,0.052,0.0054,0.063,0.065,0.03,2.4e-07,2.5e-07,9.4e-07,0.0033,0.0034,6.9e-05,1.3e-05,3.3e-05,0.00036,7.7e-06,6.8e-06,0.00036,1,1,0.01 +35190000,-0.67,-0.012,-0.0034,0.74,0.61,0.36,-0.093,0,0,-4.9e+02,-0.0016,-0.0059,1.5e-05,-0.02,0.045,-0.11,0.21,-0.0011,0.43,-0.00045,0.00033,0.0035,0,0,-4.9e+02,4.3e-05,4.3e-05,0.001,0.04,0.055,0.0054,0.053,0.056,0.03,2.4e-07,2.5e-07,9.4e-07,0.0033,0.0034,6.9e-05,1.2e-05,3.3e-05,0.00036,7.3e-06,6.4e-06,0.00036,1,1,0.01 +35290000,-0.67,-0.012,-0.0035,0.74,0.63,0.4,-0.09,0,0,-4.9e+02,-0.0016,-0.0059,1.3e-05,-0.02,0.045,-0.11,0.21,-0.0011,0.43,-0.00038,0.00033,0.0035,0,0,-4.9e+02,4.3e-05,4.3e-05,0.001,0.044,0.06,0.0054,0.057,0.061,0.03,2.4e-07,2.5e-07,9.4e-07,0.0033,0.0034,6.9e-05,1.2e-05,3.3e-05,0.00036,6.9e-06,6e-06,0.00036,1,1,0.01 +35390000,-0.67,-0.011,-0.0032,0.74,0.64,0.39,-0.091,0,0,-4.9e+02,-0.0016,-0.0059,6.3e-05,-0.02,0.045,-0.11,0.21,-0.0012,0.43,-0.00029,0.00032,0.0035,0,0,-4.9e+02,4.2e-05,4.2e-05,0.00098,0.046,0.061,0.0054,0.051,0.054,0.03,2.4e-07,2.5e-07,9.3e-07,0.0033,0.0034,6.9e-05,1.1e-05,3.3e-05,0.00036,6.7e-06,5.8e-06,0.00036,1,1,0.01 +35490000,-0.67,-0.011,-0.0032,0.74,0.67,0.43,-0.09,0,0,-4.9e+02,-0.0016,-0.0059,6e-05,-0.02,0.045,-0.11,0.21,-0.0012,0.43,-0.0002,0.00027,0.0035,0,0,-4.9e+02,4.2e-05,4.2e-05,0.00098,0.051,0.066,0.0054,0.056,0.061,0.03,2.4e-07,2.5e-07,9.4e-07,0.0033,0.0034,6.9e-05,1.1e-05,3.3e-05,0.00036,6.4e-06,5.5e-06,0.00036,1,1,0.01 +35590000,-0.67,-0.011,-0.003,0.74,0.66,0.4,-0.093,0,0,-4.9e+02,-0.0016,-0.0059,0.00012,-0.02,0.045,-0.11,0.21,-0.0013,0.43,-0.00023,0.0003,0.0035,0,0,-4.9e+02,4e-05,4e-05,0.00096,0.052,0.066,0.0054,0.051,0.056,0.03,2.4e-07,2.5e-07,9.3e-07,0.0033,0.0034,6.9e-05,1.1e-05,3.3e-05,0.00036,6.2e-06,5.2e-06,0.00036,1,1,0.01 +35690000,-0.67,-0.011,-0.003,0.74,0.69,0.44,-0.091,0,0,-4.9e+02,-0.0016,-0.0059,0.00012,-0.021,0.045,-0.11,0.21,-0.0013,0.43,-0.00015,0.00029,0.0035,0,0,-4.9e+02,4e-05,4.1e-05,0.00096,0.057,0.072,0.0055,0.058,0.064,0.031,2.4e-07,2.5e-07,9.3e-07,0.0033,0.0034,6.9e-05,1e-05,3.3e-05,0.00036,6e-06,5e-06,0.00036,1,1,0.01 +35790000,-0.67,-0.0098,-0.0028,0.74,0.67,0.4,-0.094,0,0,-4.9e+02,-0.0016,-0.006,0.00019,-0.031,0.053,-0.11,0.21,-0.0014,0.43,-0.00014,0.00033,0.0035,0,0,-4.9e+02,3.8e-05,3.9e-05,0.00093,0.057,0.069,0.0054,0.053,0.059,0.031,2.4e-07,2.5e-07,9.3e-07,0.0032,0.0033,6.9e-05,9.9e-06,3.3e-05,0.00036,5.8e-06,4.8e-06,0.00036,1,1,0.023 +35890000,-0.67,-0.0098,-0.0028,0.74,0.69,0.44,-0.091,0,0,-4.9e+02,-0.0016,-0.006,0.00019,-0.031,0.053,-0.11,0.21,-0.0014,0.43,-0.00011,0.00032,0.0035,0,0,-4.9e+02,3.8e-05,3.9e-05,0.00093,0.061,0.075,0.0054,0.061,0.069,0.031,2.4e-07,2.5e-07,9.3e-07,0.0032,0.0033,6.9e-05,9.8e-06,3.3e-05,0.00036,5.7e-06,4.6e-06,0.00036,1,1,0.048 +35990000,-0.67,-0.0087,-0.0027,0.74,0.65,0.39,-0.094,0,0,-4.9e+02,-0.0016,-0.006,0.00026,-0.042,0.064,-0.11,0.21,-0.0014,0.43,-0.00014,0.00035,0.0036,0,0,-4.9e+02,3.5e-05,3.6e-05,0.0009,0.06,0.07,0.0054,0.057,0.063,0.031,2.4e-07,2.5e-07,9.2e-07,0.003,0.0032,6.9e-05,9.2e-06,3.3e-05,0.00036,5.5e-06,4.4e-06,0.00036,1,1,0.073 +36090000,-0.67,-0.0087,-0.0027,0.74,0.67,0.43,-0.091,0,0,-4.9e+02,-0.0016,-0.006,0.00026,-0.042,0.064,-0.11,0.21,-0.0014,0.43,-0.0001,0.00034,0.0036,0,0,-4.9e+02,3.5e-05,3.7e-05,0.0009,0.064,0.075,0.0054,0.066,0.074,0.031,2.4e-07,2.5e-07,9.2e-07,0.003,0.0032,6.8e-05,9.1e-06,3.3e-05,0.00036,5.4e-06,4.3e-06,0.00036,1,1,0.098 +36190000,-0.67,-0.0076,-0.0027,0.74,0.61,0.38,-0.093,0,0,-4.9e+02,-0.0016,-0.0061,0.00032,-0.054,0.076,-0.11,0.21,-0.0014,0.43,-1.7e-06,0.00038,0.0036,0,0,-4.9e+02,3.2e-05,3.4e-05,0.00087,0.061,0.069,0.0054,0.06,0.067,0.031,2.4e-07,2.5e-07,9.2e-07,0.0029,0.003,6.8e-05,8.5e-06,3.3e-05,0.00036,5.3e-06,4.1e-06,0.00036,1,1,0.12 +36290000,-0.67,-0.0077,-0.0026,0.74,0.63,0.41,-0.089,0,0,-4.9e+02,-0.0016,-0.0061,0.00032,-0.054,0.076,-0.11,0.21,-0.0014,0.43,2.4e-05,0.00038,0.0036,0,0,-4.9e+02,3.2e-05,3.4e-05,0.00087,0.065,0.074,0.0054,0.07,0.078,0.031,2.4e-07,2.5e-07,9.2e-07,0.0028,0.003,6.8e-05,8.4e-06,3.3e-05,0.00036,5.2e-06,4e-06,0.00036,1,1,0.15 +36390000,-0.67,-0.0067,-0.0026,0.75,0.56,0.35,-0.093,0,0,-4.9e+02,-0.0016,-0.0061,0.00039,-0.065,0.089,-0.11,0.21,-0.0014,0.43,2.9e-05,0.00047,0.0037,0,0,-4.9e+02,2.9e-05,3.1e-05,0.00084,0.06,0.066,0.0054,0.064,0.069,0.031,2.4e-07,2.5e-07,9.2e-07,0.0027,0.0028,6.8e-05,7.8e-06,3.2e-05,0.00036,5e-06,3.9e-06,0.00036,1,1,0.17 +36490000,-0.67,-0.0067,-0.0027,0.75,0.58,0.38,-0.089,0,0,-4.9e+02,-0.0016,-0.0061,0.00039,-0.065,0.089,-0.11,0.21,-0.0014,0.43,7.2e-06,0.00047,0.0037,0,0,-4.9e+02,3e-05,3.1e-05,0.00084,0.065,0.07,0.0054,0.074,0.081,0.031,2.4e-07,2.6e-07,9.2e-07,0.0027,0.0028,6.8e-05,7.7e-06,3.2e-05,0.00036,4.9e-06,3.8e-06,0.00036,1,1,0.2 +36590000,-0.67,-0.0057,-0.0026,0.75,0.5,0.33,-0.089,0,0,-4.9e+02,-0.0016,-0.0062,0.00045,-0.075,0.1,-0.11,0.21,-0.0014,0.43,6.5e-05,0.00055,0.0037,0,0,-4.9e+02,2.7e-05,2.8e-05,0.00082,0.058,0.062,0.0053,0.066,0.071,0.031,2.5e-07,2.5e-07,9.1e-07,0.0025,0.0026,6.7e-05,7.1e-06,3.2e-05,0.00036,4.9e-06,3.7e-06,0.00036,1,1,0.22 +36690000,-0.67,-0.0057,-0.0026,0.75,0.52,0.35,-0.084,0,0,-4.9e+02,-0.0016,-0.0061,0.00045,-0.075,0.1,-0.11,0.21,-0.0014,0.43,0.0001,0.00056,0.0037,0,0,-4.9e+02,2.7e-05,2.9e-05,0.00082,0.062,0.066,0.0054,0.077,0.083,0.031,2.5e-07,2.6e-07,9.1e-07,0.0025,0.0026,6.7e-05,7e-06,3.2e-05,0.00036,4.8e-06,3.6e-06,0.00036,1,1,0.25 +36790000,-0.66,-0.0039,-0.0028,0.75,0.35,0.25,-0.088,0,0,-4.9e+02,-0.0016,-0.0062,0.00054,-0.093,0.13,-0.11,0.22,-0.0012,0.43,0.00017,0.00059,0.0037,0,0,-4.9e+02,2.2e-05,2.3e-05,0.00079,0.046,0.047,0.0053,0.06,0.063,0.031,2.5e-07,2.6e-07,9.1e-07,0.0021,0.0022,6.7e-05,6e-06,3.2e-05,0.00036,4.7e-06,3.5e-06,0.00036,1,1,0.27 +36890000,-0.66,-0.004,-0.0028,0.75,0.36,0.27,-0.083,0,0,-4.9e+02,-0.0016,-0.0062,0.00053,-0.093,0.13,-0.11,0.22,-0.0012,0.43,0.00022,0.00058,0.0037,0,0,-4.9e+02,2.2e-05,2.3e-05,0.00078,0.049,0.05,0.0053,0.069,0.073,0.031,2.5e-07,2.6e-07,9.1e-07,0.0021,0.0022,6.7e-05,5.9e-06,3.2e-05,0.00036,4.6e-06,3.4e-06,0.00036,1,1,0.3 +36990000,-0.66,-0.0029,-0.0028,0.75,0.26,0.21,-0.084,0,0,-4.9e+02,-0.0016,-0.0062,0.00058,-0.1,0.14,-0.11,0.22,-0.0011,0.43,0.00026,0.00062,0.0036,0,0,-4.9e+02,1.9e-05,2e-05,0.00077,0.038,0.038,0.0052,0.056,0.058,0.031,2.5e-07,2.6e-07,9.1e-07,0.0019,0.0019,6.7e-05,5.3e-06,3.2e-05,0.00036,4.6e-06,3.3e-06,0.00036,1,1,0.32 +37090000,-0.66,-0.003,-0.0027,0.75,0.27,0.23,-0.077,0,0,-4.9e+02,-0.0016,-0.0062,0.00058,-0.1,0.14,-0.11,0.22,-0.0011,0.43,0.00027,0.00065,0.0036,0,0,-4.9e+02,1.9e-05,2e-05,0.00077,0.041,0.041,0.0052,0.064,0.066,0.031,2.5e-07,2.6e-07,9.1e-07,0.0019,0.0019,6.6e-05,5.2e-06,3.2e-05,0.00036,4.5e-06,3.2e-06,0.00036,1,1,0.35 +37190000,-0.66,-0.0023,-0.0027,0.75,0.2,0.19,-0.074,0,0,-4.9e+02,-0.0016,-0.0063,0.00062,-0.11,0.15,-0.11,0.22,-0.0011,0.43,0.00029,0.00068,0.0036,0,0,-4.9e+02,1.7e-05,1.8e-05,0.00076,0.033,0.033,0.0051,0.053,0.054,0.03,2.5e-07,2.6e-07,9.1e-07,0.0017,0.0017,6.6e-05,4.8e-06,3.2e-05,0.00036,4.5e-06,3.2e-06,0.00036,1,1,0.37 +37290000,-0.66,-0.0023,-0.0028,0.75,0.21,0.2,-0.068,0,0,-4.9e+02,-0.0016,-0.0063,0.00061,-0.11,0.15,-0.11,0.22,-0.0011,0.43,0.00031,0.00068,0.0036,0,0,-4.9e+02,1.7e-05,1.8e-05,0.00076,0.035,0.035,0.0052,0.06,0.061,0.031,2.5e-07,2.6e-07,9.1e-07,0.0017,0.0017,6.6e-05,4.7e-06,3.2e-05,0.00036,4.4e-06,3.1e-06,0.00036,1,1,0.4 +37390000,-0.66,-0.0019,-0.0027,0.75,0.16,0.17,-0.064,0,0,-4.9e+02,-0.0016,-0.0063,0.00063,-0.12,0.16,-0.11,0.22,-0.001,0.43,0.00035,0.00069,0.0035,0,0,-4.9e+02,1.6e-05,1.7e-05,0.00075,0.029,0.029,0.0051,0.051,0.052,0.03,2.5e-07,2.6e-07,9.1e-07,0.0016,0.0016,6.6e-05,4.4e-06,3.2e-05,0.00036,4.4e-06,3e-06,0.00036,1,1,0.42 +37490000,-0.66,-0.0019,-0.0027,0.75,0.16,0.19,-0.058,0,0,-4.9e+02,-0.0016,-0.0063,0.00063,-0.12,0.16,-0.11,0.22,-0.001,0.43,0.00039,0.00072,0.0035,0,0,-4.9e+02,1.6e-05,1.7e-05,0.00075,0.031,0.03,0.0051,0.057,0.058,0.03,2.5e-07,2.6e-07,9.1e-07,0.0016,0.0016,6.6e-05,4.3e-06,3.2e-05,0.00036,4.3e-06,3e-06,0.00036,1,1,0.45 +37590000,-0.66,-0.0016,-0.0026,0.75,0.13,0.17,-0.052,0,0,-4.9e+02,-0.0016,-0.0063,0.00064,-0.12,0.16,-0.11,0.22,-0.00095,0.43,0.00041,0.00073,0.0035,0,0,-4.9e+02,1.5e-05,1.6e-05,0.00075,0.026,0.026,0.0051,0.049,0.05,0.03,2.5e-07,2.6e-07,9.1e-07,0.0015,0.0015,6.5e-05,4e-06,3.2e-05,0.00036,4.3e-06,2.9e-06,0.00036,1,1,0.47 +37690000,-0.66,-0.0016,-0.0027,0.75,0.13,0.19,-0.044,0,0,-4.9e+02,-0.0016,-0.0063,0.00064,-0.12,0.16,-0.11,0.22,-0.00095,0.43,0.00044,0.00072,0.0034,0,0,-4.9e+02,1.6e-05,1.6e-05,0.00075,0.028,0.027,0.0051,0.055,0.055,0.03,2.5e-07,2.6e-07,9.1e-07,0.0015,0.0015,6.5e-05,4e-06,3.2e-05,0.00036,4.2e-06,2.9e-06,0.00036,1,1,0.5 +37790000,-0.66,-0.0013,-0.0027,0.75,0.1,0.17,-0.037,0,0,-4.9e+02,-0.0016,-0.0063,0.00065,-0.13,0.17,-0.11,0.22,-0.00089,0.43,0.00046,0.00073,0.0034,0,0,-4.9e+02,1.5e-05,1.5e-05,0.00075,0.024,0.023,0.005,0.047,0.048,0.03,2.5e-07,2.6e-07,9.1e-07,0.0014,0.0014,6.5e-05,3.7e-06,3.2e-05,0.00036,4.2e-06,2.8e-06,0.00036,1,1,0.52 +37890000,-0.66,-0.0013,-0.0027,0.75,0.1,0.18,-0.03,0,0,-4.9e+02,-0.0016,-0.0063,0.00065,-0.13,0.17,-0.11,0.22,-0.00089,0.43,0.00047,0.00071,0.0034,0,0,-4.9e+02,1.5e-05,1.5e-05,0.00075,0.026,0.025,0.005,0.053,0.053,0.03,2.5e-07,2.6e-07,9.1e-07,0.0014,0.0014,6.5e-05,3.7e-06,3.2e-05,0.00036,4.2e-06,2.8e-06,0.00036,1,1,0.55 +37990000,-0.66,-0.0011,-0.0027,0.75,0.081,0.17,-0.023,0,0,-4.9e+02,-0.0016,-0.0063,0.00065,-0.13,0.17,-0.11,0.22,-0.00082,0.43,0.00049,0.00072,0.0033,0,0,-4.9e+02,1.5e-05,1.5e-05,0.00075,0.022,0.022,0.005,0.046,0.046,0.03,2.6e-07,2.6e-07,9.1e-07,0.0013,0.0013,6.4e-05,3.5e-06,3.2e-05,0.00036,4.1e-06,2.7e-06,0.00036,1,1,0.57 +38090000,-0.66,-0.0011,-0.0027,0.75,0.082,0.18,-0.013,0,0,-4.9e+02,-0.0016,-0.0063,0.00065,-0.13,0.17,-0.11,0.22,-0.00082,0.43,0.00051,0.00073,0.0033,0,0,-4.9e+02,1.5e-05,1.5e-05,0.00075,0.024,0.023,0.005,0.051,0.052,0.03,2.6e-07,2.6e-07,9.1e-07,0.0013,0.0013,6.4e-05,3.5e-06,3.2e-05,0.00036,4.1e-06,2.7e-06,0.00036,1,1,0.6 +38190000,-0.66,-0.00092,-0.0026,0.75,0.062,0.17,-0.0068,0,0,-4.9e+02,-0.0016,-0.0063,0.00065,-0.13,0.17,-0.11,0.22,-0.00074,0.43,0.00053,0.00072,0.0033,0,0,-4.9e+02,1.5e-05,1.5e-05,0.00074,0.021,0.02,0.005,0.045,0.045,0.03,2.6e-07,2.6e-07,9.1e-07,0.0012,0.0012,6.4e-05,3.3e-06,3.2e-05,0.00036,4.1e-06,2.6e-06,0.00036,1,1,0.62 +38290000,-0.66,-0.00095,-0.0026,0.75,0.063,0.18,0.00024,0,0,-4.9e+02,-0.0016,-0.0063,0.00065,-0.13,0.17,-0.11,0.22,-0.00074,0.43,0.00053,0.00071,0.0032,0,0,-4.9e+02,1.5e-05,1.5e-05,0.00074,0.022,0.022,0.005,0.05,0.05,0.03,2.6e-07,2.6e-07,9.1e-07,0.0012,0.0012,6.4e-05,3.3e-06,3.2e-05,0.00036,4.1e-06,2.6e-06,0.00036,1,1,0.65 +38390000,-0.66,-0.00078,-0.0025,0.75,0.048,0.17,0.006,0,0,-4.9e+02,-0.0016,-0.0063,0.00065,-0.14,0.17,-0.11,0.22,-0.00066,0.43,0.00054,0.00072,0.0032,0,0,-4.9e+02,1.5e-05,1.4e-05,0.00074,0.02,0.019,0.005,0.044,0.044,0.03,2.6e-07,2.7e-07,9.1e-07,0.0012,0.0012,6.4e-05,3.1e-06,3.2e-05,0.00036,4e-06,2.6e-06,0.00036,1,1,0.67 +38490000,-0.66,-0.00081,-0.0025,0.75,0.049,0.18,0.013,0,0,-4.9e+02,-0.0016,-0.0063,0.00064,-0.14,0.17,-0.11,0.22,-0.00066,0.43,0.00055,0.00074,0.0032,0,0,-4.9e+02,1.5e-05,1.5e-05,0.00074,0.021,0.021,0.005,0.049,0.049,0.03,2.6e-07,2.7e-07,9.1e-07,0.0012,0.0012,6.4e-05,3.1e-06,3.2e-05,0.00036,4e-06,2.5e-06,0.00036,1,1,0.7 +38590000,-0.66,-0.00067,-0.0023,0.75,0.038,0.17,0.018,0,0,-4.9e+02,-0.0016,-0.0063,0.00064,-0.14,0.17,-0.11,0.22,-0.00056,0.43,0.00055,0.00075,0.0032,0,0,-4.9e+02,1.5e-05,1.4e-05,0.00074,0.019,0.018,0.005,0.043,0.043,0.03,2.6e-07,2.7e-07,9.1e-07,0.0011,0.0011,6.3e-05,3e-06,3.2e-05,0.00036,4e-06,2.5e-06,0.00036,1,1,0.72 +38690000,-0.66,-0.00076,-0.0023,0.75,0.038,0.18,0.025,0,0,-4.9e+02,-0.0016,-0.0063,0.00064,-0.14,0.17,-0.11,0.22,-0.00056,0.43,0.00057,0.00076,0.0032,0,0,-4.9e+02,1.5e-05,1.5e-05,0.00074,0.02,0.02,0.005,0.048,0.048,0.03,2.6e-07,2.7e-07,9.1e-07,0.0011,0.0011,6.3e-05,3e-06,3.2e-05,0.00036,4e-06,2.5e-06,0.00036,1,1,0.75 +38790000,-0.66,-0.00064,-0.0022,0.75,0.029,0.17,0.031,0,0,-4.9e+02,-0.0016,-0.0062,0.00063,-0.14,0.17,-0.11,0.22,-0.00045,0.43,0.00058,0.00075,0.0031,0,0,-4.9e+02,1.5e-05,1.4e-05,0.00074,0.018,0.018,0.0049,0.043,0.043,0.03,2.6e-07,2.7e-07,9.1e-07,0.0011,0.001,6.3e-05,2.9e-06,3.2e-05,0.00036,4e-06,2.4e-06,0.00036,1,1,0.77 +38890000,-0.66,-0.00082,-0.0023,0.75,0.019,0.17,0.53,0,0,-4.9e+02,-0.0016,-0.0062,0.00063,-0.14,0.17,-0.11,0.22,-0.00045,0.43,0.00059,0.00073,0.0031,0,0,-4.9e+02,1.5e-05,1.5e-05,0.00074,0.019,0.019,0.005,0.047,0.047,0.03,2.6e-07,2.7e-07,9.1e-07,0.0011,0.001,6.3e-05,2.8e-06,3.2e-05,0.00036,3.9e-06,2.4e-06,0.00036,1,1,0.8 diff --git a/src/modules/ekf2/test/change_indication/iris_gps.csv b/src/modules/ekf2/test/change_indication/iris_gps.csv index 6878e1cce7..c554fa8297 100644 --- a/src/modules/ekf2/test/change_indication/iris_gps.csv +++ b/src/modules/ekf2/test/change_indication/iris_gps.csv @@ -1,351 +1,351 @@ Timestamp,state[0],state[1],state[2],state[3],state[4],state[5],state[6],state[7],state[8],state[9],state[10],state[11],state[12],state[13],state[14],state[15],state[16],state[17],state[18],state[19],state[20],state[21],state[22],state[23],variance[0],variance[1],variance[2],variance[3],variance[4],variance[5],variance[6],variance[7],variance[8],variance[9],variance[10],variance[11],variance[12],variance[13],variance[14],variance[15],variance[16],variance[17],variance[18],variance[19],variance[20],variance[21],variance[22],variance[23] -10000,1,-0.011,-0.01,0.00023,0.00033,-0.00013,-0.01,0,0,-0.00042,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.1,0.01,0.01,8.1e-05,25,25,10,1e+02,1e+02,1e+02,0.01,0.01,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.032 -90000,1,-0.011,-0.01,0.00033,-0.001,-0.0031,-0.024,0,0,-0.0021,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.1,0.01,0.01,0.00036,25,25,10,1e+02,1e+02,1e+02,0.01,0.01,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.058 -190000,1,-0.012,-0.011,0.00044,-0.0023,-0.003,-0.035,0,0,-4.9e+02,1.6e-09,-1.4e-09,-6.4e-11,0,0,-3.2e-06,0,0,0,0,0,0,0,0,-4.9e+02,0.011,0.011,0.00084,25,25,10,1e+02,1e+02,1,0.01,0.01,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.082 -290000,1,-0.012,-0.011,0.00044,-0.0033,-0.0044,-0.038,0,0,-4.9e+02,7.3e-09,-1.1e-08,-3.9e-10,0,0,-2e-05,0,0,0,0,0,0,0,0,-4.9e+02,0.012,0.012,0.00075,25,25,9.6,0.37,0.37,0.41,0.01,0.01,0.0049,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.11 -390000,1,-0.012,-0.011,0.00049,-0.0025,-0.0059,-0.05,0,0,-4.9e+02,-2.1e-10,-1.4e-08,-3.2e-10,0,0,-1.4e-05,0,0,0,0,0,0,0,0,-4.9e+02,0.012,0.012,0.0012,25,25,8.1,0.97,0.97,0.32,0.01,0.01,0.0049,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.13 -490000,1,-0.012,-0.012,0.00055,-0.0007,-0.0062,-0.055,0,0,-4.9e+02,-1.2e-06,7.3e-07,4.1e-08,0,0,-1.9e-05,0,0,0,0,0,0,0,0,-4.9e+02,0.013,0.013,0.00072,7.8,7.8,5.9,0.34,0.34,0.31,0.01,0.01,0.0021,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.16 -590000,1,-0.012,-0.012,0.00057,-0.002,-0.009,-0.1,0,0,-4.9e+02,-1.3e-06,7.6e-07,4.5e-08,0,0,6.3e-05,0,0,0,0,0,0,0,0,-4.9e+02,0.015,0.015,0.00099,7.9,7.9,4.2,0.67,0.67,0.32,0.01,0.01,0.0021,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.18 -690000,1,-0.012,-0.012,0.0006,5.4e-05,-0.0088,-0.039,0,0,-4.9e+02,-5.6e-06,1.6e-06,1.6e-07,0,0,-0.00017,0,0,0,0,0,0,0,0,-4.9e+02,0.016,0.016,0.00061,2.7,2.7,2.8,0.26,0.26,0.29,0.01,0.01,0.00098,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.21 -790000,1,-0.012,-0.012,0.0006,0.0022,-0.01,-0.045,0,0,-4.9e+02,-5.4e-06,1.6e-06,1.5e-07,0,0,-0.0002,0,0,0,0,0,0,0,0,-4.9e+02,0.018,0.018,0.00077,2.8,2.8,1.9,0.42,0.42,0.27,0.01,0.01,0.00098,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.23 -890000,1,-0.012,-0.013,0.00061,0.0031,-0.0084,-0.086,0,0,-4.9e+02,-2.2e-05,1e-06,4.9e-07,0,0,-7.4e-05,0,0,0,0,0,0,0,0,-4.9e+02,0.019,0.019,0.00051,1.3,1.3,1.3,0.2,0.2,0.25,0.0099,0.0099,0.00053,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.26 -990000,1,-0.012,-0.013,0.00058,0.006,-0.0097,-0.11,0,0,-4.9e+02,-2.2e-05,9.9e-07,4.9e-07,0,0,-9.4e-06,0,0,0,0,0,0,0,0,-4.9e+02,0.021,0.021,0.00062,1.5,1.5,0.95,0.3,0.3,0.23,0.0099,0.0099,0.00053,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.28 -1090000,1,-0.012,-0.013,0.00054,0.011,-0.013,-0.13,0,0,-4.9e+02,-6.1e-05,-1.5e-05,9.8e-07,0,0,3.8e-05,0,0,0,0,0,0,0,0,-4.9e+02,0.023,0.023,0.00043,0.93,0.93,0.69,0.17,0.17,0.2,0.0098,0.0098,0.00032,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.31 -1190000,1,-0.012,-0.013,0.00047,0.015,-0.018,-0.1,0,0,-4.9e+02,-5.8e-05,-1.4e-05,9.7e-07,0,0,-0.00052,0,0,0,0,0,0,0,0,-4.9e+02,0.025,0.025,0.00051,1.1,1.1,0.54,0.24,0.24,0.19,0.0098,0.0098,0.00032,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.33 -1290000,1,-0.012,-0.014,0.00042,0.019,-0.018,-0.1,0,0,-4.9e+02,-0.00017,-9.7e-05,1.5e-06,0,0,-0.00079,0,0,0,0,0,0,0,0,-4.9e+02,0.026,0.026,0.00038,0.89,0.89,0.42,0.15,0.15,0.18,0.0095,0.0095,0.00021,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.36 -1390000,1,-0.012,-0.014,0.00038,0.026,-0.023,-0.094,0,0,-4.9e+02,-0.00016,-9.3e-05,1.5e-06,0,0,-0.0014,0,0,0,0,0,0,0,0,-4.9e+02,0.028,0.028,0.00043,1.2,1.2,0.33,0.21,0.21,0.16,0.0095,0.0095,0.00021,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.38 -1490000,1,-0.012,-0.014,0.00038,0.024,-0.02,-0.11,0,0,-4.9e+02,-0.00039,-0.00033,1.2e-06,0,0,-0.0013,0,0,0,0,0,0,0,0,-4.9e+02,0.027,0.027,0.00033,0.96,0.96,0.27,0.14,0.14,0.15,0.0088,0.0088,0.00014,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.41 -1590000,1,-0.012,-0.014,0.00039,0.031,-0.024,-0.13,0,0,-4.9e+02,-0.00039,-0.00033,1.2e-06,0,0,-0.0014,0,0,0,0,0,0,0,0,-4.9e+02,0.03,0.03,0.00037,1.3,1.3,0.23,0.2,0.2,0.14,0.0088,0.0088,0.00014,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.43 -1690000,1,-0.012,-0.014,0.00044,0.028,-0.019,-0.13,0,0,-4.9e+02,-0.00073,-0.00074,-3.5e-07,0,0,-0.0018,0,0,0,0,0,0,0,0,-4.9e+02,0.026,0.026,0.0003,1,1,0.19,0.14,0.14,0.13,0.0078,0.0078,0.0001,0.04,0.04,0.039,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.46 -1790000,1,-0.012,-0.014,0.0004,0.035,-0.024,-0.13,0,0,-4.9e+02,-0.00073,-0.00073,-3e-07,0,0,-0.0028,0,0,0,0,0,0,0,0,-4.9e+02,0.028,0.028,0.00033,1.3,1.3,0.17,0.2,0.2,0.12,0.0078,0.0078,0.0001,0.04,0.04,0.039,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.48 -1890000,1,-0.012,-0.014,0.00039,0.043,-0.025,-0.14,0,0,-4.9e+02,-0.00072,-0.00072,-2.7e-07,0,0,-0.0032,0,0,0,0,0,0,0,0,-4.9e+02,0.031,0.031,0.00037,1.7,1.7,0.15,0.31,0.31,0.12,0.0078,0.0078,0.0001,0.04,0.04,0.039,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.51 -1990000,1,-0.011,-0.014,0.0004,0.035,-0.018,-0.14,0,0,-4.9e+02,-0.0011,-0.0013,-3.7e-06,0,0,-0.0046,0,0,0,0,0,0,0,0,-4.9e+02,0.025,0.025,0.00029,1.3,1.3,0.13,0.2,0.2,0.11,0.0067,0.0067,7.6e-05,0.04,0.04,0.039,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.53 -2090000,1,-0.011,-0.014,0.00043,0.042,-0.02,-0.14,0,0,-4.9e+02,-0.0011,-0.0012,-3.5e-06,0,0,-0.0064,0,0,0,0,0,0,0,0,-4.9e+02,0.027,0.027,0.00032,1.7,1.7,0.12,0.31,0.31,0.11,0.0067,0.0067,7.6e-05,0.04,0.04,0.039,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.56 -2190000,1,-0.011,-0.014,0.00039,0.033,-0.013,-0.14,0,0,-4.9e+02,-0.0014,-0.0018,-8.8e-06,0,0,-0.0075,0,0,0,0,0,0,0,0,-4.9e+02,0.02,0.02,0.00027,1.2,1.2,0.11,0.2,0.2,0.11,0.0055,0.0055,5.8e-05,0.04,0.04,0.038,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.58 -2290000,1,-0.011,-0.014,0.00038,0.038,-0.014,-0.14,0,0,-4.9e+02,-0.0014,-0.0018,-8.6e-06,0,0,-0.0097,0,0,0,0,0,0,0,0,-4.9e+02,0.022,0.022,0.00029,1.5,1.5,0.11,0.3,0.3,0.1,0.0055,0.0055,5.8e-05,0.04,0.04,0.038,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.61 -2390000,1,-0.011,-0.013,0.0004,0.029,-0.0098,-0.14,0,0,-4.9e+02,-0.0017,-0.0023,-1.5e-05,0,0,-0.012,0,0,0,0,0,0,0,0,-4.9e+02,0.017,0.017,0.00024,1,1,0.1,0.19,0.19,0.098,0.0046,0.0046,4.5e-05,0.04,0.04,0.037,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.63 -2490000,1,-0.011,-0.014,0.00048,0.033,-0.0088,-0.14,0,0,-4.9e+02,-0.0017,-0.0023,-1.5e-05,0,0,-0.013,0,0,0,0,0,0,0,0,-4.9e+02,0.018,0.018,0.00026,1.3,1.3,0.1,0.28,0.28,0.097,0.0046,0.0046,4.5e-05,0.04,0.04,0.037,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.66 -2590000,1,-0.01,-0.013,0.00039,0.023,-0.0059,-0.15,0,0,-4.9e+02,-0.0018,-0.0027,-2.1e-05,0,0,-0.015,0,0,0,0,0,0,0,0,-4.9e+02,0.014,0.014,0.00022,0.89,0.89,0.099,0.18,0.18,0.094,0.0038,0.0038,3.6e-05,0.04,0.04,0.036,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.68 -2690000,1,-0.01,-0.013,0.00043,0.027,-0.0051,-0.15,0,0,-4.9e+02,-0.0018,-0.0027,-2e-05,0,0,-0.018,0,0,0,0,0,0,0,0,-4.9e+02,0.015,0.015,0.00024,1.1,1.1,0.097,0.25,0.25,0.091,0.0038,0.0038,3.6e-05,0.04,0.04,0.036,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.71 -2790000,1,-0.01,-0.013,0.00038,0.022,-0.0029,-0.14,0,0,-4.9e+02,-0.0019,-0.003,-2.6e-05,0,0,-0.022,0,0,0,0,0,0,0,0,-4.9e+02,0.011,0.011,0.00021,0.77,0.77,0.095,0.16,0.16,0.089,0.0032,0.0032,2.9e-05,0.04,0.04,0.035,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.73 -2890000,1,-0.01,-0.013,0.0003,0.026,-0.0046,-0.14,0,0,-4.9e+02,-0.0019,-0.003,-2.6e-05,0,0,-0.025,0,0,0,0,0,0,0,0,-4.9e+02,0.013,0.013,0.00022,0.95,0.95,0.096,0.23,0.23,0.089,0.0032,0.0032,2.9e-05,0.04,0.04,0.034,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.76 -2990000,1,-0.01,-0.013,0.00032,0.02,-0.0035,-0.15,0,0,-4.9e+02,-0.002,-0.0033,-3.1e-05,0,0,-0.028,0,0,0,0,0,0,0,0,-4.9e+02,0.0099,0.0099,0.00019,0.67,0.67,0.095,0.15,0.15,0.088,0.0027,0.0027,2.4e-05,0.04,0.04,0.033,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.78 -3090000,1,-0.01,-0.013,0.00052,0.025,-0.0063,-0.15,0,0,-4.9e+02,-0.002,-0.0033,-3.1e-05,0,0,-0.031,0,0,0,0,0,0,0,0,-4.9e+02,0.011,0.011,0.00021,0.83,0.83,0.095,0.22,0.22,0.086,0.0027,0.0027,2.4e-05,0.04,0.04,0.032,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.81 -3190000,1,-0.01,-0.013,0.00057,0.02,-0.0061,-0.15,0,0,-4.9e+02,-0.002,-0.0036,-3.5e-05,0,0,-0.032,0,0,0,0,0,0,0,0,-4.9e+02,0.0088,0.0088,0.00018,0.59,0.59,0.096,0.14,0.14,0.087,0.0023,0.0023,2e-05,0.04,0.04,0.031,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.83 -3290000,1,-0.01,-0.013,0.00059,0.023,-0.0062,-0.15,0,0,-4.9e+02,-0.002,-0.0036,-3.5e-05,0,0,-0.034,0,0,0,0,0,0,0,0,-4.9e+02,0.0096,0.0096,0.00019,0.73,0.73,0.095,0.2,0.2,0.086,0.0023,0.0023,2e-05,0.04,0.04,0.03,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.86 -3390000,1,-0.0098,-0.013,0.0006,0.019,-0.0032,-0.15,0,0,-4.9e+02,-0.0021,-0.0038,-3.9e-05,0,0,-0.039,0,0,0,0,0,0,0,0,-4.9e+02,0.0078,0.0078,0.00017,0.53,0.53,0.095,0.14,0.14,0.085,0.002,0.002,1.7e-05,0.04,0.04,0.029,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.88 -3490000,1,-0.0097,-0.013,0.00059,0.025,-0.0018,-0.15,0,0,-4.9e+02,-0.0021,-0.0038,-3.9e-05,0,0,-0.044,0,0,0,0,0,0,0,0,-4.9e+02,0.0086,0.0086,0.00018,0.66,0.66,0.095,0.19,0.19,0.086,0.002,0.002,1.7e-05,0.04,0.04,0.027,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.91 -3590000,1,-0.0095,-0.012,0.00054,0.021,-0.0014,-0.15,0,0,-4.9e+02,-0.0022,-0.004,-4.3e-05,0,0,-0.046,0,0,0,0,0,0,0,0,-4.9e+02,0.0071,0.0071,0.00016,0.49,0.49,0.094,0.13,0.13,0.086,0.0017,0.0017,1.4e-05,0.04,0.04,0.026,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.93 -3690000,1,-0.0095,-0.013,0.00053,0.024,-0.00063,-0.15,0,0,-4.9e+02,-0.0022,-0.004,-4.3e-05,0,0,-0.051,0,0,0,0,0,0,0,0,-4.9e+02,0.0077,0.0077,0.00017,0.6,0.6,0.093,0.18,0.18,0.085,0.0017,0.0017,1.4e-05,0.04,0.04,0.025,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.96 -3790000,1,-0.0094,-0.012,0.00055,0.019,0.0037,-0.15,0,0,-4.9e+02,-0.0022,-0.0043,-4.8e-05,0,0,-0.054,0,0,0,0,0,0,0,0,-4.9e+02,0.0064,0.0064,0.00015,0.45,0.45,0.093,0.12,0.12,0.086,0.0014,0.0014,1.2e-05,0.04,0.04,0.024,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.98 -3890000,1,-0.0094,-0.013,0.00064,0.021,0.005,-0.14,0,0,-4.9e+02,-0.0022,-0.0042,-4.7e-05,0,0,-0.058,0,0,0,0,0,0,0,0,-4.9e+02,0.0069,0.0069,0.00016,0.55,0.55,0.091,0.17,0.17,0.086,0.0014,0.0014,1.2e-05,0.04,0.04,0.022,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1 -3990000,1,-0.0094,-0.013,0.0007,0.026,0.0048,-0.14,0,0,-4.9e+02,-0.0022,-0.0042,-4.7e-05,0,0,-0.063,0,0,0,0,0,0,0,0,-4.9e+02,0.0075,0.0075,0.00017,0.66,0.66,0.089,0.23,0.23,0.085,0.0014,0.0014,1.2e-05,0.04,0.04,0.021,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1 -4090000,1,-0.0093,-0.012,0.00077,0.022,0.0042,-0.12,0,0,-4.9e+02,-0.0022,-0.0044,-5.2e-05,0,0,-0.071,0,0,0,0,0,0,0,0,-4.9e+02,0.0062,0.0062,0.00015,0.5,0.5,0.087,0.16,0.16,0.085,0.0012,0.0012,1e-05,0.04,0.04,0.02,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.1 -4190000,1,-0.0094,-0.012,0.00073,0.024,0.0039,-0.12,0,0,-4.9e+02,-0.0022,-0.0044,-5.2e-05,0,0,-0.074,0,0,0,0,0,0,0,0,-4.9e+02,0.0068,0.0068,0.00016,0.61,0.61,0.086,0.21,0.21,0.086,0.0012,0.0012,1e-05,0.04,0.04,0.019,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.1 -4290000,1,-0.0095,-0.012,0.00075,0.021,0.0037,-0.13,0,0,-4.9e+02,-0.0021,-0.0046,-5.7e-05,0,0,-0.076,0,0,0,0,0,0,0,0,-4.9e+02,0.0056,0.0056,0.00014,0.47,0.47,0.084,0.15,0.15,0.085,0.00097,0.00097,9.1e-06,0.04,0.04,0.017,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.1 -4390000,1,-0.0094,-0.012,0.0007,0.025,0.0023,-0.11,0,0,-4.9e+02,-0.0021,-0.0046,-5.7e-05,0,0,-0.083,0,0,0,0,0,0,0,0,-4.9e+02,0.006,0.006,0.00015,0.56,0.56,0.081,0.2,0.2,0.084,0.00097,0.00097,9.1e-06,0.04,0.04,0.016,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.1 -4490000,1,-0.0094,-0.012,0.00077,0.021,0.004,-0.11,0,0,-4.9e+02,-0.0021,-0.0048,-6.2e-05,0,0,-0.086,0,0,0,0,0,0,0,0,-4.9e+02,0.005,0.005,0.00014,0.43,0.43,0.08,0.14,0.14,0.085,0.0008,0.0008,7.9e-06,0.04,0.04,0.015,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.2 -4590000,1,-0.0094,-0.012,0.00083,0.023,0.0029,-0.11,0,0,-4.9e+02,-0.0021,-0.0048,-6.2e-05,0,0,-0.088,0,0,0,0,0,0,0,0,-4.9e+02,0.0054,0.0054,0.00014,0.52,0.52,0.077,0.19,0.19,0.084,0.0008,0.0008,7.9e-06,0.04,0.04,0.014,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.2 -4690000,1,-0.0094,-0.012,0.00077,0.017,0.0031,-0.1,0,0,-4.9e+02,-0.0021,-0.005,-6.6e-05,0,0,-0.093,0,0,0,0,0,0,0,0,-4.9e+02,0.0044,0.0044,0.00013,0.4,0.4,0.074,0.14,0.14,0.083,0.00065,0.00065,6.9e-06,0.04,0.04,0.013,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.2 -4790000,1,-0.0093,-0.012,0.00087,0.015,0.0053,-0.1,0,0,-4.9e+02,-0.0021,-0.005,-6.6e-05,0,0,-0.095,0,0,0,0,0,0,0,0,-4.9e+02,0.0047,0.0047,0.00014,0.47,0.47,0.073,0.18,0.18,0.084,0.00065,0.00065,6.9e-06,0.04,0.04,0.012,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.2 -4890000,1,-0.0092,-0.012,0.00091,0.01,0.0028,-0.093,0,0,-4.9e+02,-0.0021,-0.0051,-7e-05,0,0,-0.099,0,0,0,0,0,0,0,0,-4.9e+02,0.0039,0.0039,0.00012,0.36,0.36,0.07,0.13,0.13,0.083,0.00053,0.00053,6.1e-06,0.04,0.04,0.011,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.3 -4990000,1,-0.0092,-0.012,0.00089,0.013,0.0035,-0.085,0,0,-4.9e+02,-0.0021,-0.0051,-7e-05,0,0,-0.1,0,0,0,0,0,0,0,0,-4.9e+02,0.0042,0.0042,0.00013,0.43,0.43,0.067,0.17,0.17,0.082,0.00053,0.00053,6.1e-06,0.04,0.04,0.011,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.3 -5090000,1,-0.0091,-0.011,0.00097,0.01,0.0038,-0.083,0,0,-4.9e+02,-0.002,-0.0052,-7.3e-05,0,0,-0.1,0,0,0,0,0,0,0,0,-4.9e+02,0.0034,0.0034,0.00012,0.33,0.33,0.065,0.12,0.12,0.082,0.00043,0.00043,5.4e-06,0.04,0.04,0.0098,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.3 -5190000,1,-0.0089,-0.012,0.001,0.0099,0.0074,-0.08,0,0,-4.9e+02,-0.002,-0.0052,-7.3e-05,0,0,-0.11,0,0,0,0,0,0,0,0,-4.9e+02,0.0037,0.0037,0.00012,0.39,0.39,0.063,0.16,0.16,0.081,0.00043,0.00043,5.4e-06,0.04,0.04,0.0091,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.3 -5290000,1,-0.0089,-0.011,0.0011,0.0082,0.0074,-0.069,0,0,-4.9e+02,-0.002,-0.0053,-7.6e-05,0,0,-0.11,0,0,0,0,0,0,0,0,-4.9e+02,0.003,0.003,0.00011,0.3,0.3,0.06,0.12,0.12,0.08,0.00035,0.00035,4.8e-06,0.04,0.04,0.0084,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.4 -5390000,1,-0.0088,-0.011,0.0011,0.0077,0.011,-0.065,0,0,-4.9e+02,-0.002,-0.0053,-7.6e-05,0,0,-0.11,0,0,0,0,0,0,0,0,-4.9e+02,0.0032,0.0032,0.00012,0.36,0.36,0.057,0.16,0.16,0.079,0.00035,0.00035,4.8e-06,0.04,0.04,0.0078,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.4 -5490000,1,-0.0088,-0.011,0.0011,0.0072,0.012,-0.061,0,0,-4.9e+02,-0.002,-0.0054,-7.8e-05,0,0,-0.11,0,0,0,0,0,0,0,0,-4.9e+02,0.0027,0.0027,0.00011,0.28,0.28,0.056,0.11,0.11,0.079,0.00028,0.00028,4.3e-06,0.04,0.04,0.0073,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.4 -5590000,1,-0.0088,-0.012,0.001,0.0083,0.016,-0.054,0,0,-4.9e+02,-0.002,-0.0054,-7.8e-05,0,0,-0.12,0,0,0,0,0,0,0,0,-4.9e+02,0.0028,0.0028,0.00011,0.33,0.33,0.053,0.15,0.15,0.078,0.00028,0.00028,4.3e-06,0.04,0.04,0.0067,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.4 -5690000,1,-0.0089,-0.011,0.0009,0.0077,0.016,-0.053,0,0,-4.9e+02,-0.0019,-0.0054,-8e-05,0,0,-0.12,0,0,0,0,0,0,0,0,-4.9e+02,0.0024,0.0024,0.00011,0.25,0.25,0.051,0.11,0.11,0.076,0.00023,0.00023,3.8e-06,0.04,0.04,0.0063,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.5 -5790000,1,-0.0087,-0.011,0.00086,0.0089,0.018,-0.05,0,0,-4.9e+02,-0.0019,-0.0054,-8e-05,0,0,-0.12,0,0,0,0,0,0,0,0,-4.9e+02,0.0025,0.0025,0.00011,0.3,0.3,0.05,0.14,0.14,0.077,0.00023,0.00023,3.8e-06,0.04,0.04,0.0059,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.5 -5890000,1,-0.0088,-0.011,0.0009,0.0095,0.016,-0.048,0,0,-4.9e+02,-0.0019,-0.0055,-8.3e-05,0,0,-0.12,0,0,0,0,0,0,0,0,-4.9e+02,0.0021,0.0021,0.0001,0.23,0.23,0.047,0.1,0.1,0.075,0.00018,0.00018,3.5e-06,0.04,0.04,0.0054,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.5 -5990000,1,-0.0088,-0.012,0.00087,0.011,0.017,-0.042,0,0,-4.9e+02,-0.0019,-0.0055,-8.3e-05,0,0,-0.12,0,0,0,0,0,0,0,0,-4.9e+02,0.0022,0.0022,0.00011,0.27,0.27,0.045,0.13,0.13,0.074,0.00018,0.00018,3.5e-06,0.04,0.04,0.005,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.5 -6090000,1,-0.0087,-0.011,0.00068,0.011,0.018,-0.039,0,0,-4.9e+02,-0.0019,-0.0055,-8.3e-05,0,0,-0.12,0,0,0,0,0,0,0,0,-4.9e+02,0.0023,0.0023,0.00011,0.31,0.31,0.044,0.17,0.17,0.074,0.00018,0.00018,3.5e-06,0.04,0.04,0.0047,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.6 -6190000,1,-0.0089,-0.011,0.00069,0.0087,0.017,-0.038,0,0,-4.9e+02,-0.0018,-0.0055,-8.6e-05,0,0,-0.12,0,0,0,0,0,0,0,0,-4.9e+02,0.002,0.002,0.0001,0.24,0.24,0.042,0.13,0.13,0.073,0.00015,0.00015,3.1e-06,0.04,0.04,0.0044,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.6 -6290000,1,-0.0088,-0.011,0.00072,0.008,0.02,-0.041,0,0,-4.9e+02,-0.0018,-0.0055,-8.6e-05,0,0,-0.12,0,0,0,0,0,0,0,0,-4.9e+02,0.0021,0.0021,0.00011,0.28,0.28,0.04,0.16,0.16,0.072,0.00015,0.00015,3.1e-06,0.04,0.04,0.0041,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.6 -6390000,1,-0.0089,-0.011,0.00073,0.0082,0.017,-0.042,0,0,-4.9e+02,-0.0017,-0.0056,-8.8e-05,0,0,-0.12,0,0,0,0,0,0,0,0,-4.9e+02,0.0017,0.0017,9.9e-05,0.22,0.22,0.039,0.12,0.12,0.072,0.00012,0.00012,2.9e-06,0.04,0.04,0.0039,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.6 -6490000,1,-0.0088,-0.011,0.00063,0.0057,0.016,-0.04,0,0,-4.9e+02,-0.0017,-0.0056,-8.8e-05,0,0,-0.13,0,0,0,0,0,0,0,0,-4.9e+02,0.0018,0.0018,0.0001,0.25,0.25,0.038,0.15,0.15,0.07,0.00012,0.00012,2.9e-06,0.04,0.04,0.0036,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.7 -6590000,1,-0.0089,-0.011,0.00056,0.0039,0.015,-0.042,0,0,-4.9e+02,-0.0017,-0.0056,-9e-05,0,0,-0.13,0,0,0,0,0,0,0,0,-4.9e+02,0.0016,0.0016,9.6e-05,0.2,0.2,0.036,0.12,0.12,0.069,9.8e-05,9.8e-05,2.6e-06,0.04,0.04,0.0034,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.7 -6690000,1,-0.0088,-0.011,0.00052,0.0022,0.018,-0.044,0,0,-4.9e+02,-0.0017,-0.0056,-9e-05,0,0,-0.13,0,0,0,0,0,0,0,0,-4.9e+02,0.0016,0.0016,9.9e-05,0.23,0.23,0.035,0.14,0.14,0.068,9.8e-05,9.8e-05,2.6e-06,0.04,0.04,0.0031,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.7 -6790000,1,-0.0089,-0.011,0.00049,0.003,0.016,-0.043,0,0,-4.9e+02,-0.0016,-0.0056,-9.2e-05,0,0,-0.13,0,0,0,0,0,0,0,0,-4.9e+02,0.0014,0.0014,9.3e-05,0.18,0.18,0.034,0.11,0.11,0.068,8e-05,8.1e-05,2.4e-06,0.04,0.04,0.003,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.7 -6890000,1,-0.0087,-0.011,0.0004,0.0023,0.016,-0.039,0,0,-4.9e+02,-0.0016,-0.0056,-9.2e-05,0,0,-0.13,0,0,0,0,0,0,0,0,-4.9e+02,0.0015,0.0015,9.6e-05,0.21,0.21,0.032,0.14,0.14,0.067,8e-05,8.1e-05,2.4e-06,0.04,0.04,0.0028,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.8 -6990000,0.98,-0.0067,-0.012,0.18,-0.0032,0.013,-0.037,0,0,-4.9e+02,-0.0015,-0.0056,-9.4e-05,0,0,-0.13,0.2,-0.00047,0.44,0.00044,-0.00092,0.00033,0,0,-4.9e+02,0.0013,0.0012,0.056,0.16,0.16,0.031,0.097,0.097,0.066,6.5e-05,6.4e-05,2.2e-06,0.04,0.04,0.0026,0.0015,0.0014,0.0015,0.0016,0.0018,0.0015,1,1,1.8 -7090000,0.98,-0.0065,-0.012,0.18,-0.0041,0.017,-0.038,0,0,-4.9e+02,-0.0016,-0.0056,-9.4e-05,0,0,-0.13,0.2,-0.0001,0.44,-0.00021,-0.00026,0.00015,0,0,-4.9e+02,0.0013,0.0013,0.049,0.16,0.16,0.03,0.1,0.1,0.066,6.5e-05,6.4e-05,2.2e-06,0.04,0.04,0.0024,0.0014,0.00071,0.0013,0.0014,0.0016,0.0013,1,1,1.8 -7190000,0.98,-0.0065,-0.012,0.18,-0.0046,0.019,-0.037,0,0,-4.9e+02,-0.0016,-0.0056,-9.4e-05,-6.1e-05,2.9e-05,-0.13,0.2,-7.3e-05,0.43,-0.00016,-0.00034,-2.6e-05,0,0,-4.9e+02,0.0013,0.0013,0.046,0.16,0.16,0.029,0.11,0.11,0.065,6.5e-05,6.4e-05,2.2e-06,0.04,0.04,0.0023,0.0013,0.00046,0.0013,0.0014,0.0016,0.0013,1,1,1.8 -7290000,0.98,-0.0064,-0.012,0.18,-0.0041,0.023,-0.034,0,0,-4.9e+02,-0.0016,-0.0057,-9.4e-05,-0.00029,0.00017,-0.13,0.2,-5e-05,0.43,-0.00035,-0.00025,5.4e-05,0,0,-4.9e+02,0.0014,0.0013,0.044,0.17,0.17,0.028,0.12,0.12,0.064,6.5e-05,6.4e-05,2.2e-06,0.04,0.04,0.0022,0.0013,0.00034,0.0013,0.0014,0.0016,0.0013,1,1,1.9 -7390000,0.98,-0.0063,-0.012,0.18,-0.0015,0.00095,-0.032,0,0,-4.9e+02,-0.0016,-0.0057,-9.4e-05,-0.00036,0.00035,-0.13,0.2,-3.9e-05,0.43,-0.00045,-0.00021,8.3e-05,0,0,-4.9e+02,0.0014,0.0014,0.044,25,25,0.027,1e+02,1e+02,0.064,6.4e-05,6.3e-05,2.2e-06,0.04,0.04,0.002,0.0013,0.00028,0.0013,0.0014,0.0016,0.0013,1,1,1.9 -7490000,0.98,-0.0063,-0.012,0.18,0.00099,0.0035,-0.026,0,0,-4.9e+02,-0.0016,-0.0056,-9.2e-05,-0.00036,0.00035,-0.13,0.2,-2.9e-05,0.43,-0.00038,-0.0002,-8.7e-05,0,0,-4.9e+02,0.0015,0.0014,0.043,25,25,0.026,1e+02,1e+02,0.063,6.4e-05,6.3e-05,2.2e-06,0.04,0.04,0.0019,0.0013,0.00023,0.0013,0.0014,0.0016,0.0013,1,1,1.9 -7590000,0.98,-0.0064,-0.012,0.18,0.0022,0.0061,-0.023,0,0,-4.9e+02,-0.0016,-0.0056,-9.2e-05,-0.00036,0.00035,-0.13,0.2,-2.5e-05,0.43,-0.0003,-0.00021,-1.4e-05,0,0,-4.9e+02,0.0015,0.0015,0.043,25,25,0.025,51,51,0.062,6.4e-05,6.3e-05,2.2e-06,0.04,0.04,0.0018,0.0013,0.00019,0.0013,0.0014,0.0016,0.0013,1,1,1.9 -7690000,0.98,-0.0064,-0.013,0.18,0.0022,0.0093,-0.022,0,0,-4.9e+02,-0.0016,-0.0056,-9.2e-05,-0.00036,0.00035,-0.13,0.2,-2.2e-05,0.43,-0.00026,-0.00022,-6.3e-07,0,0,-4.9e+02,0.0016,0.0015,0.042,25,25,0.025,52,52,0.062,6.4e-05,6.3e-05,2.2e-06,0.04,0.04,0.0017,0.0013,0.00017,0.0013,0.0014,0.0016,0.0013,1,1,2 -7790000,0.98,-0.0064,-0.013,0.18,0.0057,0.01,-0.025,0,0,-4.9e+02,-0.0015,-0.0055,-9.2e-05,-0.00036,0.00035,-0.13,0.2,-1.9e-05,0.43,-0.00016,-0.00022,-4.7e-06,0,0,-4.9e+02,0.0016,0.0016,0.042,24,24,0.024,35,35,0.061,6.3e-05,6.2e-05,2.2e-06,0.04,0.04,0.0016,0.0013,0.00015,0.0013,0.0014,0.0016,0.0013,1,1,2 -7890000,0.98,-0.0064,-0.013,0.18,0.0048,0.014,-0.025,0,0,-4.9e+02,-0.0015,-0.0055,-9.2e-05,-0.00036,0.00035,-0.13,0.2,-1.7e-05,0.43,-0.00014,-0.00022,4.3e-05,0,0,-4.9e+02,0.0016,0.0016,0.042,24,24,0.023,36,36,0.06,6.3e-05,6.2e-05,2.2e-06,0.04,0.04,0.0015,0.0013,0.00014,0.0013,0.0014,0.0016,0.0013,1,1,2 -7990000,0.98,-0.0063,-0.013,0.18,0.0034,0.017,-0.022,0,0,-4.9e+02,-0.0016,-0.0056,-9.3e-05,-0.00036,0.00035,-0.13,0.2,-1.6e-05,0.43,-0.00015,-0.00025,7.5e-05,0,0,-4.9e+02,0.0017,0.0016,0.042,24,24,0.022,28,28,0.059,6.3e-05,6.1e-05,2.2e-06,0.04,0.04,0.0015,0.0013,0.00012,0.0013,0.0014,0.0016,0.0013,1,1,2 -8090000,0.98,-0.0062,-0.013,0.18,0.0045,0.019,-0.022,0,0,-4.9e+02,-0.0015,-0.0056,-9.5e-05,-0.00036,0.00035,-0.13,0.2,-1.4e-05,0.43,-0.00012,-0.00024,0.0001,0,0,-4.9e+02,0.0017,0.0017,0.042,24,24,0.022,30,30,0.059,6.2e-05,6e-05,2.2e-06,0.04,0.04,0.0014,0.0013,0.00011,0.0013,0.0014,0.0016,0.0013,1,1,2.1 -8190000,0.98,-0.0064,-0.012,0.18,0.0055,0.022,-0.018,0,0,-4.9e+02,-0.0015,-0.0056,-9.7e-05,-0.00036,0.00035,-0.13,0.2,-1.2e-05,0.44,-8.8e-05,-0.00023,0.00015,0,0,-4.9e+02,0.0018,0.0017,0.041,23,23,0.021,24,24,0.058,6.1e-05,5.9e-05,2.2e-06,0.04,0.04,0.0013,0.0013,0.0001,0.0013,0.0014,0.0016,0.0013,1,1,2.1 -8290000,0.98,-0.0062,-0.012,0.18,0.0024,0.028,-0.017,0,0,-4.9e+02,-0.0015,-0.0058,-9.8e-05,-0.00036,0.00035,-0.13,0.2,-1.3e-05,0.43,-8.5e-05,-0.00026,7.1e-05,0,0,-4.9e+02,0.0018,0.0017,0.041,23,23,0.02,27,27,0.057,6.1e-05,5.8e-05,2.2e-06,0.04,0.04,0.0013,0.0013,9.7e-05,0.0013,0.0014,0.0016,0.0013,1,1,2.1 -8390000,0.98,-0.0062,-0.012,0.18,-0.0019,0.028,-0.016,0,0,-4.9e+02,-0.0015,-0.0058,-9.9e-05,-0.00036,0.00035,-0.13,0.2,-1.2e-05,0.43,-9e-05,-0.00026,2.5e-05,0,0,-4.9e+02,0.0019,0.0018,0.041,21,21,0.02,23,23,0.057,6e-05,5.7e-05,2.2e-06,0.04,0.04,0.0012,0.0013,9.1e-05,0.0013,0.0014,0.0016,0.0013,1,1,2.1 -8490000,0.98,-0.0059,-0.012,0.18,-0.0056,0.035,-0.017,0,0,-4.9e+02,-0.0016,-0.0059,-9.8e-05,-0.00036,0.00035,-0.13,0.2,-1.3e-05,0.43,-8.8e-05,-0.0003,-1.8e-06,0,0,-4.9e+02,0.0019,0.0018,0.041,21,21,0.019,25,25,0.056,5.9e-05,5.6e-05,2.2e-06,0.04,0.04,0.0011,0.0013,8.5e-05,0.0013,0.0014,0.0016,0.0013,1,1,2.2 -8590000,0.98,-0.006,-0.012,0.18,0.00022,0.034,-0.012,0,0,-4.9e+02,-0.0016,-0.0057,-9.7e-05,-0.00036,0.00035,-0.14,0.2,-1.1e-05,0.43,-0.00013,-0.00025,8.5e-06,0,0,-4.9e+02,0.0019,0.0018,0.041,19,19,0.018,22,22,0.055,5.9e-05,5.5e-05,2.2e-06,0.04,0.04,0.0011,0.0013,8e-05,0.0013,0.0014,0.0016,0.0013,1,1,2.2 -8690000,0.98,-0.0059,-0.012,0.18,-0.0016,0.037,-0.014,0,0,-4.9e+02,-0.0016,-0.0058,-9.7e-05,-0.00036,0.00035,-0.14,0.2,-1.1e-05,0.43,-0.00017,-0.00026,-8.2e-05,0,0,-4.9e+02,0.002,0.0018,0.041,19,19,0.018,24,24,0.055,5.8e-05,5.3e-05,2.2e-06,0.04,0.04,0.001,0.0013,7.6e-05,0.0013,0.0014,0.0016,0.0013,1,1,2.2 -8790000,0.98,-0.006,-0.012,0.18,-0.0043,0.039,-0.014,0,0,-4.9e+02,-0.0016,-0.0058,-9.9e-05,-0.00036,0.00035,-0.14,0.2,-1e-05,0.43,-0.00014,-0.00026,-0.00012,0,0,-4.9e+02,0.002,0.0018,0.041,19,19,0.018,27,27,0.055,5.7e-05,5.2e-05,2.2e-06,0.04,0.04,0.00099,0.0013,7.2e-05,0.0013,0.0014,0.0016,0.0013,1,1,2.2 -8890000,0.98,-0.006,-0.012,0.18,0.0013,0.041,-0.0094,0,0,-4.9e+02,-0.0016,-0.0057,-9.6e-05,-0.00036,0.00035,-0.14,0.2,-9.6e-06,0.43,-0.00021,-0.00025,-0.00011,0,0,-4.9e+02,0.002,0.0018,0.041,17,17,0.017,24,24,0.054,5.6e-05,5e-05,2.2e-06,0.04,0.04,0.00094,0.0013,6.8e-05,0.0013,0.0014,0.0016,0.0013,1,1,2.3 -8990000,0.98,-0.0059,-0.013,0.18,0.011,0.047,-0.0086,0,0,-4.9e+02,-0.0016,-0.0056,-9.1e-05,-0.00036,0.00035,-0.14,0.2,-9e-06,0.43,-0.00032,-0.0002,-6.1e-05,0,0,-4.9e+02,0.0021,0.0018,0.041,17,17,0.017,27,27,0.054,5.5e-05,4.9e-05,2.2e-06,0.04,0.04,0.00091,0.0013,6.5e-05,0.0013,0.0014,0.0016,0.0013,1,1,2.3 -9090000,0.98,-0.0055,-0.013,0.18,0.00043,0.056,-0.0096,0,0,-4.9e+02,-0.0017,-0.0057,-9e-05,-0.00036,0.00035,-0.14,0.2,-1.1e-05,0.43,-0.00023,-0.00031,-8.2e-05,0,0,-4.9e+02,0.0021,0.0018,0.041,15,15,0.016,24,24,0.053,5.4e-05,4.7e-05,2.2e-06,0.04,0.04,0.00087,0.0013,6.2e-05,0.0013,0.0014,0.0016,0.0013,1,1,2.3 -9190000,0.98,-0.0053,-0.013,0.18,0.0037,0.064,-0.009,0,0,-4.9e+02,-0.0018,-0.0057,-8.8e-05,-0.00036,0.00035,-0.14,0.2,-1.1e-05,0.43,-0.00026,-0.00034,-0.0001,0,0,-4.9e+02,0.0021,0.0018,0.041,15,15,0.016,27,27,0.052,5.2e-05,4.6e-05,2.2e-06,0.04,0.04,0.00083,0.0013,5.9e-05,0.0013,0.0013,0.0016,0.0013,1,1,2.3 -9290000,0.98,-0.0053,-0.013,0.18,0.014,0.062,-0.0074,0,0,-4.9e+02,-0.0017,-0.0056,-8.6e-05,-0.00036,0.00035,-0.14,0.2,-9.7e-06,0.43,-0.00034,-0.0003,-8e-05,0,0,-4.9e+02,0.0021,0.0018,0.041,13,13,0.015,24,24,0.052,5.1e-05,4.4e-05,2.2e-06,0.04,0.04,0.00079,0.0013,5.6e-05,0.0013,0.0013,0.0016,0.0013,1,1,2.4 -9390000,0.98,-0.0054,-0.013,0.18,0.015,0.06,-0.0063,0,0,-4.9e+02,-0.0017,-0.0056,-8.9e-05,-0.00036,0.00035,-0.14,0.2,-8.6e-06,0.43,-0.0003,-0.00025,-3.2e-05,0,0,-4.9e+02,0.0021,0.0018,0.041,13,13,0.015,26,26,0.052,5e-05,4.2e-05,2.2e-06,0.04,0.04,0.00077,0.0013,5.4e-05,0.0013,0.0013,0.0016,0.0013,1,1,2.4 -9490000,0.98,-0.0053,-0.013,0.18,0.0095,0.061,-0.0046,0,0,-4.9e+02,-0.0017,-0.0056,-8.9e-05,-0.00036,0.00035,-0.14,0.2,-8.8e-06,0.43,-0.00028,-0.00029,-7e-05,0,0,-4.9e+02,0.0022,0.0018,0.041,12,12,0.015,23,23,0.051,4.9e-05,4e-05,2.2e-06,0.04,0.04,0.00074,0.0013,5.2e-05,0.0013,0.0013,0.0015,0.0013,1,1,2.4 -9590000,0.98,-0.0057,-0.013,0.18,0.0086,0.052,-0.0045,0,0,-4.9e+02,-0.0016,-0.0057,-9.5e-05,-0.00036,0.00035,-0.14,0.2,-6.5e-06,0.43,-0.00025,-0.00023,-0.00011,0,0,-4.9e+02,0.0022,0.0018,0.041,12,12,0.014,26,26,0.05,4.7e-05,3.9e-05,2.2e-06,0.04,0.04,0.00071,0.0013,5e-05,0.0013,0.0013,0.0015,0.0013,1,1,2.4 -9690000,0.98,-0.0059,-0.013,0.18,0.01,0.047,-0.0016,0,0,-4.9e+02,-0.0015,-0.0056,-9.7e-05,-0.00036,0.00035,-0.14,0.2,-5.7e-06,0.43,-0.00025,-0.00019,-9.4e-05,0,0,-4.9e+02,0.0022,0.0018,0.041,10,10,0.014,23,23,0.05,4.6e-05,3.7e-05,2.2e-06,0.04,0.04,0.00068,0.0013,4.9e-05,0.0013,0.0013,0.0015,0.0013,1,1,2.5 -9790000,0.98,-0.0061,-0.012,0.18,0.0018,0.041,-0.003,0,0,-4.9e+02,-0.0014,-0.0058,-0.0001,-0.00036,0.00035,-0.14,0.2,-4.4e-06,0.43,-0.00013,-0.00018,-0.00014,0,0,-4.9e+02,0.0022,0.0017,0.041,10,10,0.014,25,25,0.05,4.5e-05,3.6e-05,2.2e-06,0.04,0.04,0.00066,0.0013,4.7e-05,0.0013,0.0013,0.0015,0.0013,1,1,2.5 -9890000,0.98,-0.0061,-0.012,0.18,0.0094,0.041,-0.0017,0,0,-4.9e+02,-0.0014,-0.0057,-0.0001,-0.00036,0.00035,-0.14,0.2,-4.3e-06,0.43,-0.00017,-0.00016,-8.9e-05,0,0,-4.9e+02,0.0022,0.0017,0.041,8.6,8.7,0.013,22,22,0.049,4.3e-05,3.4e-05,2.2e-06,0.04,0.04,0.00063,0.0013,4.5e-05,0.0013,0.0013,0.0015,0.0013,1,1,2.5 -9990000,0.98,-0.0063,-0.012,0.18,0.0032,0.034,-0.001,0,0,-4.9e+02,-0.0013,-0.0058,-0.00011,-0.00036,0.00035,-0.14,0.2,-3.3e-06,0.43,-8e-05,-0.00015,-0.00013,0,0,-4.9e+02,0.0022,0.0017,0.041,8.6,8.7,0.013,24,24,0.049,4.2e-05,3.3e-05,2.2e-06,0.04,0.04,0.00061,0.0013,4.4e-05,0.0013,0.0013,0.0015,0.0013,1,1,2.5 -10090000,0.98,-0.0067,-0.012,0.18,0.0014,0.019,0.00016,0,0,-4.9e+02,-0.0012,-0.0058,-0.00011,-0.00036,0.00035,-0.14,0.2,-1.9e-06,0.43,-3.9e-05,-7e-05,-0.00014,0,0,-4.9e+02,0.0022,0.0017,0.041,7.4,7.5,0.013,21,21,0.048,4.1e-05,3.1e-05,2.2e-06,0.04,0.04,0.00059,0.0013,4.2e-05,0.0013,0.0013,0.0015,0.0013,1,1,2.6 -10190000,0.98,-0.0072,-0.012,0.18,0.006,0.005,0.001,0,0,-4.9e+02,-0.0011,-0.0058,-0.00012,-0.00036,0.00035,-0.14,0.2,-3e-07,0.43,-3.1e-05,6.3e-05,-0.00015,0,0,-4.9e+02,0.0022,0.0016,0.041,7.4,7.6,0.012,23,23,0.048,3.9e-05,3e-05,2.2e-06,0.04,0.04,0.00057,0.0013,4.1e-05,0.0013,0.0013,0.0015,0.0013,1,1,2.6 -10290000,0.98,-0.0071,-0.012,0.18,0.012,0.0087,-3.9e-05,0,0,-4.9e+02,-0.0011,-0.0057,-0.00011,-0.00036,0.00035,-0.14,0.2,-7.8e-07,0.43,-0.0001,7.5e-05,-0.00011,0,0,-4.9e+02,0.0022,0.0016,0.041,6.4,6.5,0.012,20,20,0.048,3.8e-05,2.8e-05,2.2e-06,0.04,0.04,0.00055,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,2.6 -10390000,0.98,-0.0071,-0.013,0.18,0.0079,0.003,-0.0025,0,0,-4.9e+02,-0.0011,-0.0056,-0.00011,-0.00028,0.00038,-0.14,0.2,-9.1e-07,0.43,-0.00013,7.2e-05,-6.2e-05,0,0,-4.9e+02,0.0021,0.0015,0.041,0.24,0.24,0.012,0.5,0.5,0.047,3.5e-05,2.6e-05,2.2e-06,0.04,0.04,0.00053,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,2.6 -10490000,0.98,-0.0073,-0.012,0.18,0.01,0.00093,0.00026,0,0,-4.9e+02,-0.001,-0.0057,-0.00012,-0.00037,0.00025,-0.14,0.2,-1e-07,0.43,-9.9e-05,0.00012,-8.5e-05,0,0,-4.9e+02,0.002,0.0015,0.041,0.25,0.25,0.012,0.51,0.51,0.046,3.3e-05,2.5e-05,2.2e-06,0.04,0.04,0.00051,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,2.7 -10590000,0.98,-0.007,-0.012,0.18,0.00065,-4.6e-05,0.00078,0,0,-4.9e+02,-0.0011,-0.0057,-0.00011,-0.0003,0.00019,-0.14,0.2,-6.7e-07,0.43,-0.00011,8.7e-05,-7.3e-05,0,0,-4.9e+02,0.002,0.0015,0.041,0.13,0.13,0.011,0.17,0.17,0.045,3.2e-05,2.3e-05,2.2e-06,0.04,0.04,0.00049,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,2.7 -10690000,0.98,-0.0072,-0.013,0.18,0.0035,-0.0027,0.0019,0,0,-4.9e+02,-0.0011,-0.0056,-0.00011,-0.00029,0.00011,-0.14,0.2,-3.7e-07,0.43,-0.00014,0.00013,-7.1e-05,0,0,-4.9e+02,0.002,0.0015,0.041,0.13,0.14,0.011,0.17,0.17,0.045,3.1e-05,2.2e-05,2.2e-06,0.04,0.04,0.00048,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,2.7 -10790000,0.98,-0.0073,-0.013,0.18,0.006,-0.006,0.003,0,0,-4.9e+02,-0.001,-0.0056,-0.00011,-0.00019,-2.5e-05,-0.14,0.2,-2.2e-07,0.43,-0.00019,0.0002,-9.2e-05,0,0,-4.9e+02,0.0019,0.0014,0.041,0.09,0.095,0.011,0.11,0.11,0.044,2.9e-05,2.1e-05,2.2e-06,0.04,0.04,0.00046,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,2.7 -10890000,0.98,-0.0069,-0.013,0.18,0.0082,-0.0029,0.0025,0,0,-4.9e+02,-0.0011,-0.0055,-0.00011,-3.7e-05,7.7e-05,-0.14,0.2,-1.1e-06,0.43,-0.00025,0.00016,-7.4e-05,0,0,-4.9e+02,0.0019,0.0014,0.041,0.097,0.1,0.01,0.11,0.11,0.044,2.8e-05,2e-05,2.2e-06,0.04,0.04,0.00044,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,2.8 -10990000,0.98,-0.0069,-0.013,0.18,0.0056,0.0032,0.0039,0,0,-4.9e+02,-0.0011,-0.0056,-0.00011,-0.0002,6.7e-05,-0.14,0.2,-1.2e-06,0.43,-0.00018,0.00013,-0.00012,0,0,-4.9e+02,0.0018,0.0013,0.04,0.074,0.081,0.01,0.079,0.079,0.043,2.5e-05,1.8e-05,2.2e-06,0.04,0.04,0.00043,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,2.8 -11090000,0.98,-0.0075,-0.013,0.18,0.0094,0.0017,0.0063,0,0,-4.9e+02,-0.001,-0.0056,-0.00011,-0.00036,-0.00015,-0.14,0.2,-1.3e-08,0.43,-0.00017,0.00021,-0.00011,0,0,-4.9e+02,0.0018,0.0013,0.04,0.082,0.093,0.01,0.084,0.085,0.043,2.4e-05,1.7e-05,2.2e-06,0.04,0.04,0.00042,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,2.8 -11190000,0.98,-0.0077,-0.013,0.18,0.0084,0.0024,0.0095,0,0,-4.9e+02,-0.00097,-0.0057,-0.00012,-0.0005,-7.2e-05,-0.14,0.2,4.7e-07,0.43,-9.4e-05,0.00018,-0.00012,0,0,-4.9e+02,0.0016,0.0012,0.04,0.066,0.075,0.0097,0.065,0.066,0.042,2.1e-05,1.5e-05,2.2e-06,0.04,0.04,0.0004,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,2.8 -11290000,0.98,-0.0077,-0.012,0.18,0.0067,-0.00011,0.011,0,0,-4.9e+02,-0.00097,-0.0057,-0.00012,-0.0006,9e-05,-0.14,0.2,5.8e-07,0.43,-3.4e-05,0.00014,-0.00015,0,0,-4.9e+02,0.0016,0.0012,0.04,0.074,0.088,0.0096,0.071,0.072,0.042,2.1e-05,1.5e-05,2.2e-06,0.04,0.04,0.00039,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,2.9 -11390000,0.98,-0.0076,-0.012,0.18,0.0046,0.00097,0.0084,0,0,-4.9e+02,-0.00098,-0.0058,-0.00012,-0.00061,5e-06,-0.14,0.2,5.1e-07,0.43,-9.7e-06,0.00013,-0.00018,0,0,-4.9e+02,0.0015,0.0011,0.04,0.062,0.073,0.0093,0.058,0.058,0.042,1.8e-05,1.3e-05,2.2e-06,0.04,0.039,0.00038,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,2.9 -11490000,0.98,-0.0075,-0.012,0.18,0.0053,-0.00049,0.011,0,0,-4.9e+02,-0.00098,-0.0057,-0.00012,-0.00059,-8.8e-05,-0.14,0.2,5.2e-07,0.43,-3e-05,0.00015,-0.00017,0,0,-4.9e+02,0.0015,0.0011,0.04,0.07,0.085,0.0092,0.063,0.064,0.041,1.7e-05,1.3e-05,2.2e-06,0.04,0.039,0.00037,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,2.9 -11590000,0.98,-0.0076,-0.012,0.18,0.0048,-0.00043,0.012,0,0,-4.9e+02,-0.00099,-0.0058,-0.00012,-0.00067,3.1e-05,-0.14,0.2,5e-07,0.43,1.7e-05,0.00011,-0.00019,0,0,-4.9e+02,0.0013,0.001,0.04,0.06,0.071,0.009,0.053,0.054,0.041,1.5e-05,1.1e-05,2.2e-06,0.039,0.039,0.00036,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,2.9 -11690000,0.98,-0.0075,-0.012,0.18,0.0043,0.002,0.014,0,0,-4.9e+02,-0.001,-0.0058,-0.00012,-0.00062,0.00016,-0.14,0.2,2.9e-07,0.43,2.2e-05,9e-05,-0.00021,0,0,-4.9e+02,0.0013,0.001,0.04,0.068,0.083,0.0089,0.059,0.06,0.041,1.4e-05,1.1e-05,2.2e-06,0.039,0.039,0.00035,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3 -11790000,0.98,-0.0075,-0.012,0.18,0.0029,0.0028,0.015,0,0,-4.9e+02,-0.001,-0.0058,-0.00012,-7.1e-05,0.00014,-0.14,0.2,1.7e-07,0.43,8.8e-06,8.5e-05,-0.00022,0,0,-4.9e+02,0.0012,0.00095,0.039,0.058,0.069,0.0087,0.05,0.051,0.04,1.2e-05,9.2e-06,2.2e-06,0.039,0.039,0.00034,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3 -11890000,0.98,-0.0076,-0.012,0.18,0.0041,0.0015,0.013,0,0,-4.9e+02,-0.001,-0.0059,-0.00012,-0.00028,0.00031,-0.14,0.2,3.2e-07,0.43,3.8e-05,8.3e-05,-0.00026,0,0,-4.9e+02,0.0012,0.00094,0.039,0.066,0.08,0.0086,0.056,0.058,0.04,1.2e-05,8.9e-06,2.2e-06,0.039,0.039,0.00034,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3 -11990000,0.98,-0.0077,-0.012,0.18,0.0069,0.0036,0.013,0,0,-4.9e+02,-0.001,-0.0058,-0.00012,-0.00033,0.00046,-0.14,0.2,9e-08,0.43,2.1e-05,7.7e-05,-0.00026,0,0,-4.9e+02,0.001,0.00087,0.039,0.056,0.067,0.0084,0.048,0.049,0.04,9.9e-06,7.7e-06,2.2e-06,0.039,0.039,0.00033,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3 -12090000,0.98,-0.0077,-0.012,0.18,0.01,0.0013,0.015,0,0,-4.9e+02,-0.00099,-0.0058,-0.00012,-0.00052,0.00019,-0.14,0.2,3.4e-07,0.43,2.2e-05,0.00011,-0.00025,0,0,-4.9e+02,0.001,0.00086,0.039,0.064,0.077,0.0084,0.055,0.056,0.039,9.7e-06,7.5e-06,2.2e-06,0.039,0.039,0.00032,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.1 -12190000,0.98,-0.0077,-0.012,0.18,0.011,0.00011,0.014,0,0,-4.9e+02,-0.00097,-0.0058,-0.00012,-0.0012,-0.00047,-0.14,0.2,4.6e-07,0.43,5.8e-05,0.00014,-0.00028,0,0,-4.9e+02,0.00093,0.0008,0.039,0.054,0.064,0.0082,0.047,0.048,0.039,8.1e-06,6.5e-06,2.2e-06,0.039,0.039,0.00031,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.1 -12290000,0.98,-0.0078,-0.012,0.18,0.0082,-0.0033,0.013,0,0,-4.9e+02,-0.00096,-0.0058,-0.00013,-0.0015,-0.00028,-0.14,0.2,6.6e-07,0.43,8.4e-05,0.00013,-0.00028,0,0,-4.9e+02,0.00093,0.0008,0.039,0.062,0.074,0.0081,0.054,0.055,0.039,8e-06,6.3e-06,2.2e-06,0.039,0.038,0.00031,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.1 -12390000,0.98,-0.0079,-0.012,0.18,0.0081,-0.0046,0.013,0,0,-4.9e+02,-0.00095,-0.0058,-0.00013,-0.0018,-0.00077,-0.14,0.2,7e-07,0.43,0.00011,0.00016,-0.0003,0,0,-4.9e+02,0.00083,0.00074,0.039,0.053,0.061,0.008,0.047,0.048,0.038,6.8e-06,5.5e-06,2.2e-06,0.039,0.038,0.0003,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.1 -12490000,0.98,-0.008,-0.012,0.18,0.0097,-0.006,0.018,0,0,-4.9e+02,-0.00093,-0.0058,-0.00013,-0.002,-0.001,-0.14,0.2,8.2e-07,0.43,0.00012,0.00019,-0.00031,0,0,-4.9e+02,0.00084,0.00074,0.039,0.059,0.07,0.0079,0.053,0.055,0.038,6.6e-06,5.4e-06,2.1e-06,0.039,0.038,0.0003,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.2 -12590000,0.98,-0.0081,-0.012,0.18,0.012,-0.0099,0.019,0,0,-4.9e+02,-0.00092,-0.0058,-0.00013,-0.0022,-0.00089,-0.14,0.2,9.3e-07,0.43,0.00013,0.00019,-0.00032,0,0,-4.9e+02,0.00076,0.00069,0.039,0.051,0.058,0.0078,0.046,0.047,0.038,5.7e-06,4.7e-06,2.1e-06,0.039,0.038,0.00029,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.2 -12690000,0.98,-0.008,-0.012,0.18,0.012,-0.014,0.019,0,0,-4.9e+02,-0.00091,-0.0058,-0.00013,-0.0024,-0.00084,-0.14,0.2,9.4e-07,0.43,0.00014,0.00019,-0.00033,0,0,-4.9e+02,0.00076,0.00069,0.039,0.057,0.066,0.0077,0.053,0.054,0.038,5.6e-06,4.6e-06,2.1e-06,0.039,0.038,0.00028,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.2 -12790000,0.98,-0.0081,-0.012,0.18,0.014,-0.012,0.02,0,0,-4.9e+02,-0.00093,-0.0058,-0.00013,-0.0017,-0.0013,-0.14,0.2,9.2e-07,0.43,0.00011,0.00021,-0.0003,0,0,-4.9e+02,0.0007,0.00065,0.039,0.048,0.055,0.0076,0.046,0.047,0.037,4.8e-06,4e-06,2.1e-06,0.038,0.038,0.00028,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.2 -12890000,0.98,-0.0081,-0.012,0.18,0.016,-0.013,0.021,0,0,-4.9e+02,-0.00094,-0.0058,-0.00013,-0.0013,-0.0015,-0.14,0.2,8.6e-07,0.43,8.7e-05,0.00022,-0.00029,0,0,-4.9e+02,0.0007,0.00065,0.039,0.054,0.062,0.0076,0.052,0.054,0.038,4.7e-06,4e-06,2.1e-06,0.038,0.038,0.00027,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.3 -12990000,0.98,-0.0079,-0.012,0.18,0.013,-0.0087,0.022,0,0,-4.9e+02,-0.00098,-0.0058,-0.00012,-0.0011,-0.0016,-0.14,0.2,3.6e-07,0.43,9.9e-05,0.00019,-0.00031,0,0,-4.9e+02,0.00065,0.00061,0.038,0.046,0.052,0.0074,0.046,0.047,0.037,4.1e-06,3.5e-06,2.1e-06,0.038,0.037,0.00027,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.3 -13090000,0.98,-0.0079,-0.012,0.18,0.015,-0.0076,0.02,0,0,-4.9e+02,-0.00099,-0.0058,-0.00012,-0.0006,-0.0018,-0.14,0.2,2.8e-07,0.43,7.5e-05,0.0002,-0.0003,0,0,-4.9e+02,0.00065,0.00061,0.038,0.052,0.058,0.0074,0.052,0.054,0.037,4.1e-06,3.4e-06,2.1e-06,0.038,0.037,0.00026,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.3 -13190000,0.98,-0.0079,-0.012,0.18,0.0098,-0.0077,0.019,0,0,-4.9e+02,-0.001,-0.0058,-0.00012,-0.00035,-0.0022,-0.14,0.2,1.7e-07,0.43,9.8e-05,0.00019,-0.0003,0,0,-4.9e+02,0.00061,0.00058,0.038,0.044,0.049,0.0073,0.046,0.047,0.036,3.6e-06,3.1e-06,2.1e-06,0.038,0.037,0.00026,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.3 -13290000,0.98,-0.008,-0.012,0.18,0.011,-0.0094,0.017,0,0,-4.9e+02,-0.00099,-0.0058,-0.00012,-0.00056,-0.0028,-0.14,0.2,3e-07,0.43,0.00011,0.00021,-0.0003,0,0,-4.9e+02,0.00061,0.00058,0.038,0.049,0.055,0.0073,0.052,0.054,0.037,3.5e-06,3e-06,2.1e-06,0.038,0.037,0.00025,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.4 -13390000,0.98,-0.0079,-0.012,0.18,0.0092,-0.0081,0.017,0,0,-4.9e+02,-0.001,-0.0058,-0.00012,-0.0012,-0.0028,-0.14,0.2,2.4e-08,0.43,0.00014,0.00021,-0.00034,0,0,-4.9e+02,0.00057,0.00055,0.038,0.042,0.046,0.0071,0.045,0.046,0.036,3.1e-06,2.7e-06,2.1e-06,0.038,0.037,0.00025,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.4 -13490000,0.98,-0.0079,-0.012,0.18,0.011,-0.0068,0.017,0,0,-4.9e+02,-0.00099,-0.0058,-0.00012,-0.0012,-0.0033,-0.14,0.2,6.2e-08,0.43,0.00015,0.00024,-0.00034,0,0,-4.9e+02,0.00057,0.00055,0.038,0.046,0.052,0.0071,0.052,0.053,0.036,3.1e-06,2.7e-06,2.1e-06,0.038,0.037,0.00025,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.4 -13590000,0.98,-0.0079,-0.012,0.18,0.014,-0.0071,0.018,0,0,-4.9e+02,-0.00099,-0.0058,-0.00012,-0.0017,-0.0034,-0.14,0.2,1.4e-07,0.43,0.00015,0.00023,-0.00034,0,0,-4.9e+02,0.00054,0.00053,0.038,0.04,0.044,0.007,0.045,0.046,0.036,2.8e-06,2.5e-06,2.1e-06,0.038,0.037,0.00024,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.4 -13690000,0.98,-0.0078,-0.012,0.18,0.014,-0.0082,0.018,0,0,-4.9e+02,-0.001,-0.0058,-0.00012,-0.0014,-0.0031,-0.14,0.2,1.6e-07,0.43,0.00014,0.00021,-0.00032,0,0,-4.9e+02,0.00054,0.00053,0.038,0.044,0.048,0.007,0.052,0.053,0.036,2.8e-06,2.4e-06,2.1e-06,0.038,0.036,0.00024,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.5 -13790000,0.98,-0.0078,-0.012,0.18,0.019,-0.0045,0.018,0,0,-4.9e+02,-0.001,-0.0058,-0.00013,-0.0019,-0.0025,-0.14,0.2,-8.1e-08,0.43,0.00014,0.00019,-0.00033,0,0,-4.9e+02,0.00052,0.00051,0.038,0.038,0.041,0.0069,0.045,0.046,0.036,2.5e-06,2.2e-06,2.1e-06,0.038,0.036,0.00023,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.5 -13890000,0.98,-0.0076,-0.012,0.18,0.019,-0.0031,0.019,0,0,-4.9e+02,-0.001,-0.0058,-0.00012,-0.0012,-0.002,-0.14,0.2,-2.8e-07,0.43,0.00012,0.00017,-0.00033,0,0,-4.9e+02,0.00052,0.00051,0.038,0.042,0.046,0.0069,0.051,0.053,0.036,2.5e-06,2.2e-06,2.1e-06,0.038,0.036,0.00023,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.5 -13990000,0.98,-0.0076,-0.012,0.18,0.019,-0.0012,0.018,0,0,-4.9e+02,-0.001,-0.0058,-0.00012,-0.00064,-0.0024,-0.14,0.2,-1.8e-07,0.43,0.00012,0.00017,-0.0003,0,0,-4.9e+02,0.0005,0.0005,0.038,0.036,0.039,0.0068,0.045,0.046,0.035,2.3e-06,2e-06,2.1e-06,0.038,0.036,0.00023,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.5 -14090000,0.98,-0.0077,-0.011,0.18,0.017,-0.0084,0.019,0,0,-4.9e+02,-0.001,-0.0058,-0.00013,-0.0024,-0.0022,-0.14,0.2,-9.8e-08,0.43,0.00018,0.00018,-0.00034,0,0,-4.9e+02,0.0005,0.0005,0.038,0.04,0.043,0.0068,0.051,0.052,0.035,2.3e-06,2e-06,2.1e-06,0.037,0.036,0.00022,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.6 -14190000,0.98,-0.0078,-0.011,0.18,0.016,-0.0078,0.019,0,0,-4.9e+02,-0.00099,-0.0058,-0.00014,-0.0035,-0.0034,-0.14,0.2,7.8e-08,0.43,0.00023,0.0002,-0.00036,0,0,-4.9e+02,0.00048,0.00048,0.038,0.034,0.037,0.0067,0.045,0.046,0.035,2.1e-06,1.9e-06,2.1e-06,0.037,0.036,0.00022,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.6 -14290000,0.98,-0.0078,-0.011,0.18,0.018,-0.0084,0.017,0,0,-4.9e+02,-0.00099,-0.0058,-0.00014,-0.0036,-0.0036,-0.14,0.2,1.6e-07,0.43,0.00023,0.0002,-0.00035,0,0,-4.9e+02,0.00048,0.00049,0.038,0.037,0.04,0.0067,0.051,0.052,0.035,2.1e-06,1.8e-06,2.1e-06,0.037,0.036,0.00022,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.6 -14390000,0.98,-0.0078,-0.011,0.18,0.018,-0.0098,0.018,0,0,-4.9e+02,-0.001,-0.0058,-0.00013,-0.0034,-0.0044,-0.14,0.2,2.8e-07,0.43,0.00024,0.00021,-0.00034,0,0,-4.9e+02,0.00047,0.00047,0.038,0.033,0.035,0.0066,0.045,0.046,0.035,1.9e-06,1.7e-06,2.1e-06,0.037,0.035,0.00021,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.6 -14490000,0.98,-0.008,-0.011,0.18,0.018,-0.011,0.022,0,0,-4.9e+02,-0.00098,-0.0058,-0.00014,-0.0044,-0.0045,-0.14,0.2,4.4e-07,0.43,0.00027,0.00022,-0.00035,0,0,-4.9e+02,0.00047,0.00047,0.038,0.036,0.038,0.0066,0.051,0.052,0.035,1.9e-06,1.7e-06,2.1e-06,0.037,0.035,0.00021,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.7 -14590000,0.98,-0.0081,-0.011,0.18,0.017,-0.011,0.019,0,0,-4.9e+02,-0.00098,-0.0058,-0.00014,-0.0049,-0.0058,-0.14,0.2,5.4e-07,0.43,0.00032,0.00023,-0.00036,0,0,-4.9e+02,0.00046,0.00046,0.038,0.031,0.033,0.0065,0.045,0.045,0.035,1.8e-06,1.6e-06,2.1e-06,0.037,0.035,0.00021,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.7 -14690000,0.98,-0.0082,-0.011,0.18,0.017,-0.011,0.019,0,0,-4.9e+02,-0.00098,-0.0058,-0.00014,-0.0048,-0.0062,-0.14,0.2,6.3e-07,0.43,0.00032,0.00024,-0.00036,0,0,-4.9e+02,0.00046,0.00046,0.038,0.034,0.036,0.0065,0.05,0.051,0.034,1.8e-06,1.6e-06,2.1e-06,0.037,0.035,0.00021,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.7 -14790000,0.98,-0.0082,-0.011,0.18,0.02,-0.0038,0.019,0,0,-4.9e+02,-0.001,-0.0058,-0.00014,-0.0041,-0.0076,-0.14,0.2,4.6e-07,0.43,0.00032,0.00024,-0.00033,0,0,-4.9e+02,0.00045,0.00045,0.038,0.029,0.031,0.0064,0.044,0.045,0.034,1.7e-06,1.5e-06,2.1e-06,0.037,0.035,0.0002,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.7 -14890000,0.98,-0.0082,-0.011,0.18,0.021,-0.0059,0.023,0,0,-4.9e+02,-0.001,-0.0058,-0.00013,-0.0036,-0.0092,-0.14,0.2,8.5e-07,0.43,0.00031,0.00026,-0.00029,0,0,-4.9e+02,0.00045,0.00045,0.038,0.032,0.034,0.0064,0.05,0.051,0.034,1.7e-06,1.5e-06,2.1e-06,0.037,0.035,0.0002,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.8 -14990000,0.98,-0.0084,-0.011,0.18,0.02,-0.0062,0.026,0,0,-4.9e+02,-0.001,-0.0058,-0.00013,-0.0034,-0.011,-0.14,0.2,1.1e-06,0.43,0.00034,0.00029,-0.00027,0,0,-4.9e+02,0.00044,0.00045,0.038,0.028,0.03,0.0063,0.044,0.045,0.034,1.6e-06,1.4e-06,2.1e-06,0.037,0.035,0.0002,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.8 -15090000,0.98,-0.0083,-0.011,0.18,0.021,-0.0055,0.029,0,0,-4.9e+02,-0.001,-0.0058,-0.00013,-0.0035,-0.011,-0.14,0.2,1.1e-06,0.43,0.00034,0.00029,-0.00027,0,0,-4.9e+02,0.00044,0.00045,0.038,0.03,0.032,0.0063,0.05,0.051,0.034,1.6e-06,1.4e-06,2.1e-06,0.037,0.035,0.0002,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.8 -15190000,0.98,-0.0085,-0.011,0.18,0.019,-0.0064,0.03,0,0,-4.9e+02,-0.001,-0.0058,-0.00013,-0.004,-0.012,-0.14,0.2,1.3e-06,0.43,0.00038,0.0003,-0.00028,0,0,-4.9e+02,0.00043,0.00044,0.038,0.027,0.028,0.0063,0.044,0.045,0.034,1.5e-06,1.3e-06,2.1e-06,0.037,0.034,0.00019,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.8 -15290000,0.98,-0.0087,-0.012,0.18,0.022,-0.0071,0.029,0,0,-4.9e+02,-0.001,-0.0058,-0.00013,-0.0035,-0.014,-0.14,0.2,1.4e-06,0.43,0.00037,0.00033,-0.00026,0,0,-4.9e+02,0.00043,0.00044,0.038,0.029,0.031,0.0063,0.049,0.05,0.034,1.5e-06,1.3e-06,2.1e-06,0.036,0.034,0.00019,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.9 -15390000,0.98,-0.0088,-0.012,0.18,0.022,-0.0046,0.029,0,0,-4.9e+02,-0.001,-0.0058,-0.00013,-0.0037,-0.014,-0.14,0.2,1.2e-06,0.43,0.00041,0.00035,-0.00027,0,0,-4.9e+02,0.00042,0.00043,0.038,0.026,0.027,0.0062,0.044,0.044,0.034,1.4e-06,1.3e-06,2.1e-06,0.036,0.034,0.00019,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.9 -15490000,0.98,-0.0088,-0.012,0.18,0.022,-0.0074,0.028,0,0,-4.9e+02,-0.001,-0.0058,-0.00013,-0.0037,-0.014,-0.14,0.2,1.2e-06,0.43,0.00041,0.00035,-0.00027,0,0,-4.9e+02,0.00042,0.00043,0.038,0.028,0.029,0.0062,0.049,0.05,0.034,1.4e-06,1.3e-06,2.1e-06,0.036,0.034,0.00019,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.9 -15590000,0.98,-0.0089,-0.011,0.18,0.023,-0.0088,0.028,0,0,-4.9e+02,-0.001,-0.0058,-0.00012,-0.0033,-0.014,-0.14,0.2,1.2e-06,0.43,0.0004,0.00035,-0.00026,0,0,-4.9e+02,0.00041,0.00043,0.038,0.024,0.026,0.0061,0.043,0.044,0.033,1.3e-06,1.2e-06,2.1e-06,0.036,0.034,0.00018,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.9 -15690000,0.98,-0.0087,-0.011,0.18,0.024,-0.011,0.028,0,0,-4.9e+02,-0.001,-0.0058,-0.00012,-0.0023,-0.012,-0.14,0.2,8.3e-07,0.43,0.00035,0.00029,-0.00025,0,0,-4.9e+02,0.00041,0.00043,0.038,0.026,0.028,0.0061,0.049,0.049,0.033,1.3e-06,1.2e-06,2.1e-06,0.036,0.034,0.00018,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4 -15790000,0.98,-0.0086,-0.011,0.18,0.02,-0.01,0.028,0,0,-4.9e+02,-0.001,-0.0058,-0.00011,-0.0012,-0.011,-0.14,0.2,3.9e-07,0.43,0.00034,0.00028,-0.00024,0,0,-4.9e+02,0.00041,0.00042,0.038,0.023,0.025,0.0061,0.043,0.044,0.033,1.3e-06,1.1e-06,2.1e-06,0.036,0.034,0.00018,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4 -15890000,0.98,-0.0088,-0.011,0.18,0.02,-0.0093,0.029,0,0,-4.9e+02,-0.001,-0.0058,-0.00012,-0.0022,-0.012,-0.14,0.2,6.3e-07,0.43,0.00037,0.0003,-0.00026,0,0,-4.9e+02,0.00041,0.00042,0.038,0.025,0.027,0.0061,0.048,0.049,0.033,1.3e-06,1.1e-06,2.1e-06,0.036,0.034,0.00018,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4 -15990000,0.98,-0.0087,-0.011,0.18,0.018,-0.0083,0.026,0,0,-4.9e+02,-0.001,-0.0058,-0.00012,-0.0024,-0.014,-0.14,0.2,4.6e-07,0.43,0.00041,0.00034,-0.00027,0,0,-4.9e+02,0.0004,0.00042,0.038,0.022,0.024,0.006,0.043,0.043,0.033,1.2e-06,1.1e-06,2.1e-06,0.036,0.033,0.00018,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4 -16090000,0.98,-0.0087,-0.011,0.18,0.02,-0.01,0.023,0,0,-4.9e+02,-0.001,-0.0058,-0.00012,-0.0031,-0.014,-0.14,0.2,5.6e-07,0.43,0.00044,0.00037,-0.00029,0,0,-4.9e+02,0.0004,0.00042,0.038,0.024,0.025,0.006,0.048,0.049,0.033,1.2e-06,1.1e-06,2e-06,0.036,0.033,0.00017,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.1 -16190000,0.98,-0.0087,-0.011,0.18,0.015,-0.0085,0.022,0,0,-4.9e+02,-0.001,-0.0058,-0.00013,-0.0037,-0.015,-0.14,0.2,5.1e-07,0.43,0.00048,0.00037,-0.0003,0,0,-4.9e+02,0.0004,0.00041,0.038,0.021,0.023,0.006,0.043,0.043,0.033,1.2e-06,1.1e-06,2e-06,0.036,0.033,0.00017,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.1 -16290000,0.98,-0.0087,-0.011,0.18,0.017,-0.01,0.022,0,0,-4.9e+02,-0.001,-0.0058,-0.00013,-0.0034,-0.014,-0.14,0.2,4.9e-07,0.43,0.00046,0.00035,-0.0003,0,0,-4.9e+02,0.0004,0.00041,0.038,0.023,0.024,0.006,0.047,0.048,0.033,1.2e-06,1e-06,2e-06,0.036,0.033,0.00017,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.1 -16390000,0.98,-0.0087,-0.011,0.18,0.019,-0.009,0.022,0,0,-4.9e+02,-0.001,-0.0058,-0.00012,-0.0029,-0.017,-0.14,0.2,7.2e-07,0.43,0.00048,0.00039,-0.00028,0,0,-4.9e+02,0.00039,0.00041,0.038,0.021,0.022,0.0059,0.042,0.043,0.033,1.1e-06,1e-06,2e-06,0.035,0.033,0.00017,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.1 -16490000,0.98,-0.0089,-0.011,0.18,0.023,-0.011,0.024,0,0,-4.9e+02,-0.001,-0.0058,-0.00012,-0.0032,-0.017,-0.14,0.2,9.2e-07,0.43,0.00049,0.0004,-0.00028,0,0,-4.9e+02,0.00039,0.00041,0.038,0.022,0.023,0.0059,0.047,0.048,0.033,1.1e-06,1e-06,2e-06,0.035,0.033,0.00017,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.2 -16590000,0.98,-0.0089,-0.011,0.18,0.026,-0.011,0.028,0,0,-4.9e+02,-0.001,-0.0058,-0.00012,-0.0031,-0.017,-0.14,0.2,7.2e-07,0.43,0.0005,0.00041,-0.00028,0,0,-4.9e+02,0.00039,0.00041,0.038,0.02,0.021,0.0059,0.042,0.042,0.033,1.1e-06,9.7e-07,2e-06,0.035,0.033,0.00017,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.2 -16690000,0.98,-0.0089,-0.011,0.18,0.028,-0.016,0.028,0,0,-4.9e+02,-0.001,-0.0058,-0.00012,-0.0025,-0.017,-0.14,0.2,5.5e-07,0.43,0.00048,0.00039,-0.00027,0,0,-4.9e+02,0.00039,0.00041,0.038,0.021,0.022,0.0059,0.047,0.047,0.033,1.1e-06,9.6e-07,2e-06,0.035,0.033,0.00016,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.2 -16790000,0.98,-0.0088,-0.011,0.18,0.028,-0.015,0.027,0,0,-4.9e+02,-0.0011,-0.0058,-0.00012,-0.0019,-0.017,-0.14,0.2,2.5e-07,0.43,0.00048,0.00039,-0.00027,0,0,-4.9e+02,0.00038,0.0004,0.038,0.019,0.02,0.0059,0.042,0.042,0.033,1e-06,9.4e-07,2e-06,0.035,0.033,0.00016,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.2 -16890000,0.98,-0.0087,-0.011,0.18,0.028,-0.015,0.028,0,0,-4.9e+02,-0.0011,-0.0058,-0.00011,-0.00084,-0.016,-0.14,0.2,9.5e-08,0.43,0.00045,0.00038,-0.00025,0,0,-4.9e+02,0.00038,0.0004,0.038,0.02,0.022,0.0059,0.046,0.047,0.033,1e-06,9.3e-07,2e-06,0.035,0.032,0.00016,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.3 -16990000,0.98,-0.0088,-0.011,0.18,0.027,-0.015,0.028,0,0,-4.9e+02,-0.0011,-0.0058,-0.00011,-0.00048,-0.017,-0.13,0.2,7.5e-08,0.43,0.00047,0.0004,-0.00025,0,0,-4.9e+02,0.00038,0.0004,0.038,0.018,0.019,0.0058,0.041,0.042,0.032,1e-06,9e-07,2e-06,0.035,0.032,0.00016,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.3 -17090000,0.98,-0.009,-0.011,0.18,0.031,-0.018,0.028,0,0,-4.9e+02,-0.0011,-0.0058,-0.00011,-0.00087,-0.019,-0.13,0.2,2.8e-08,0.43,0.0005,0.00047,-0.00027,0,0,-4.9e+02,0.00038,0.0004,0.038,0.02,0.021,0.0058,0.046,0.047,0.032,1e-06,9e-07,2e-06,0.035,0.032,0.00016,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.3 -17190000,0.98,-0.0091,-0.011,0.18,0.028,-0.023,0.029,0,0,-4.9e+02,-0.0011,-0.0058,-0.00012,-0.0018,-0.019,-0.13,0.2,-4.9e-07,0.43,0.00054,0.00048,-0.00031,0,0,-4.9e+02,0.00038,0.0004,0.038,0.018,0.019,0.0058,0.041,0.042,0.032,9.7e-07,8.7e-07,2e-06,0.035,0.032,0.00016,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.3 -17290000,0.98,-0.0091,-0.011,0.18,0.031,-0.024,0.029,0,0,-4.9e+02,-0.0011,-0.0058,-0.00012,-0.0025,-0.019,-0.13,0.2,-5e-07,0.43,0.00057,0.00049,-0.00033,0,0,-4.9e+02,0.00038,0.0004,0.038,0.019,0.02,0.0058,0.045,0.046,0.032,9.7e-07,8.6e-07,2e-06,0.035,0.032,0.00016,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.4 -17390000,0.98,-0.009,-0.011,0.18,0.025,-0.025,0.028,0,0,-4.9e+02,-0.0011,-0.0058,-0.00012,-0.0011,-0.018,-0.13,0.2,-8.6e-07,0.43,0.00055,0.00049,-0.00032,0,0,-4.9e+02,0.00037,0.00039,0.038,0.017,0.018,0.0057,0.041,0.041,0.032,9.4e-07,8.4e-07,2e-06,0.034,0.032,0.00015,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.4 -17490000,0.98,-0.009,-0.011,0.18,0.024,-0.026,0.028,0,0,-4.9e+02,-0.0011,-0.0058,-0.00012,-0.0014,-0.018,-0.13,0.2,-8e-07,0.43,0.00055,0.00049,-0.00032,0,0,-4.9e+02,0.00037,0.00039,0.038,0.018,0.02,0.0057,0.045,0.046,0.032,9.3e-07,8.4e-07,2e-06,0.034,0.032,0.00015,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.4 -17590000,0.98,-0.009,-0.011,0.18,0.022,-0.023,0.028,0,0,-4.9e+02,-0.0011,-0.0058,-0.00012,-0.00091,-0.019,-0.13,0.2,-1.5e-06,0.43,0.00057,0.00049,-0.00033,0,0,-4.9e+02,0.00037,0.00039,0.038,0.017,0.018,0.0057,0.04,0.041,0.032,9.1e-07,8.1e-07,2e-06,0.034,0.032,0.00015,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.4 -17690000,0.98,-0.0091,-0.011,0.18,0.022,-0.024,0.029,0,0,-4.9e+02,-0.0011,-0.0058,-0.00012,-0.00059,-0.019,-0.13,0.2,-1.2e-06,0.43,0.00055,0.00046,-0.00031,0,0,-4.9e+02,0.00037,0.00039,0.038,0.018,0.019,0.0057,0.045,0.045,0.032,9e-07,8.1e-07,2e-06,0.034,0.031,0.00015,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.5 -17790000,0.98,-0.0091,-0.011,0.18,0.023,-0.023,0.029,0,0,-4.9e+02,-0.0011,-0.0058,-0.00012,0.00019,-0.019,-0.13,0.2,-1.2e-06,0.43,0.00052,0.00044,-0.00029,0,0,-4.9e+02,0.00037,0.00039,0.038,0.016,0.017,0.0057,0.04,0.041,0.032,8.8e-07,7.9e-07,2e-06,0.034,0.031,0.00015,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.5 -17890000,0.98,-0.009,-0.011,0.18,0.026,-0.025,0.029,0,0,-4.9e+02,-0.0011,-0.0058,-0.00011,0.0008,-0.018,-0.13,0.2,-1.2e-06,0.43,0.00049,0.00041,-0.00027,0,0,-4.9e+02,0.00037,0.00039,0.038,0.017,0.019,0.0057,0.044,0.045,0.032,8.8e-07,7.8e-07,2e-06,0.034,0.031,0.00015,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.5 -17990000,0.98,-0.009,-0.011,0.18,0.025,-0.021,0.028,0,0,-4.9e+02,-0.0011,-0.0058,-0.00012,0.0016,-0.019,-0.13,0.2,-1.2e-06,0.43,0.00049,0.00042,-0.00026,0,0,-4.9e+02,0.00037,0.00038,0.038,0.016,0.017,0.0056,0.04,0.04,0.032,8.5e-07,7.6e-07,2e-06,0.034,0.031,0.00015,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.5 -18090000,0.98,-0.0091,-0.011,0.18,0.026,-0.023,0.028,0,0,-4.9e+02,-0.0011,-0.0058,-0.00012,0.0017,-0.02,-0.13,0.2,-1.1e-06,0.43,0.00049,0.00041,-0.00025,0,0,-4.9e+02,0.00037,0.00038,0.038,0.017,0.018,0.0056,0.044,0.045,0.032,8.5e-07,7.6e-07,1.9e-06,0.034,0.031,0.00015,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.6 -18190000,0.98,-0.0091,-0.011,0.18,0.025,-0.021,0.029,0,0,-4.9e+02,-0.0011,-0.0058,-0.00011,0.0033,-0.021,-0.13,0.2,-1.3e-06,0.43,0.00046,0.00043,-0.00023,0,0,-4.9e+02,0.00036,0.00038,0.038,0.015,0.016,0.0056,0.04,0.04,0.032,8.3e-07,7.4e-07,1.9e-06,0.034,0.031,0.00014,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.6 -18290000,0.98,-0.0092,-0.011,0.18,0.028,-0.022,0.028,0,0,-4.9e+02,-0.0011,-0.0058,-0.0001,0.0035,-0.022,-0.13,0.2,-1.1e-06,0.43,0.00046,0.00044,-0.00021,0,0,-4.9e+02,0.00036,0.00038,0.038,0.016,0.018,0.0056,0.044,0.044,0.032,8.2e-07,7.3e-07,1.9e-06,0.034,0.031,0.00014,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.6 -18390000,0.98,-0.0091,-0.011,0.18,0.027,-0.02,0.028,0,0,-4.9e+02,-0.0011,-0.0058,-0.00011,0.0038,-0.022,-0.13,0.2,-1.5e-06,0.43,0.00047,0.00045,-0.00022,0,0,-4.9e+02,0.00036,0.00038,0.038,0.015,0.016,0.0056,0.039,0.04,0.032,8e-07,7.2e-07,1.9e-06,0.034,0.031,0.00014,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.6 -18490000,0.98,-0.0091,-0.011,0.18,0.031,-0.021,0.027,0,0,-4.9e+02,-0.0011,-0.0058,-9.9e-05,0.0044,-0.022,-0.13,0.2,-1.4e-06,0.43,0.00045,0.00046,-0.00021,0,0,-4.9e+02,0.00036,0.00038,0.038,0.016,0.017,0.0056,0.043,0.044,0.032,8e-07,7.1e-07,1.9e-06,0.033,0.031,0.00014,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.7 -18590000,0.98,-0.0089,-0.011,0.18,0.028,-0.02,0.027,0,0,-4.9e+02,-0.0012,-0.0058,-0.0001,0.0047,-0.021,-0.13,0.2,-2e-06,0.43,0.00045,0.00043,-0.00021,0,0,-4.9e+02,0.00036,0.00038,0.038,0.015,0.016,0.0055,0.039,0.04,0.032,7.8e-07,7e-07,1.9e-06,0.033,0.031,0.00014,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.7 -18690000,0.98,-0.0088,-0.011,0.18,0.029,-0.019,0.026,0,0,-4.9e+02,-0.0012,-0.0058,-9.7e-05,0.0057,-0.019,-0.13,0.2,-2e-06,0.43,0.00041,0.0004,-0.00019,0,0,-4.9e+02,0.00036,0.00038,0.038,0.016,0.017,0.0055,0.043,0.044,0.031,7.8e-07,6.9e-07,1.9e-06,0.033,0.03,0.00014,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.7 -18790000,0.98,-0.0088,-0.011,0.18,0.026,-0.019,0.026,0,0,-4.9e+02,-0.0012,-0.0058,-9.8e-05,0.0062,-0.019,-0.13,0.2,-2.4e-06,0.43,0.00042,0.00041,-0.0002,0,0,-4.9e+02,0.00035,0.00037,0.038,0.014,0.016,0.0055,0.039,0.04,0.032,7.6e-07,6.8e-07,1.9e-06,0.033,0.03,0.00014,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.7 -18890000,0.98,-0.0088,-0.011,0.18,0.027,-0.019,0.024,0,0,-4.9e+02,-0.0012,-0.0058,-9.8e-05,0.006,-0.02,-0.13,0.2,-2.5e-06,0.43,0.00043,0.00042,-0.00021,0,0,-4.9e+02,0.00035,0.00037,0.038,0.015,0.017,0.0055,0.043,0.044,0.031,7.6e-07,6.7e-07,1.9e-06,0.033,0.03,0.00014,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.8 -18990000,0.98,-0.0087,-0.011,0.18,0.024,-0.019,0.025,0,0,-4.9e+02,-0.0012,-0.0058,-9.9e-05,0.0067,-0.019,-0.13,0.2,-3.1e-06,0.43,0.00042,0.00041,-0.00021,0,0,-4.9e+02,0.00035,0.00037,0.038,0.014,0.015,0.0055,0.039,0.039,0.031,7.4e-07,6.6e-07,1.9e-06,0.033,0.03,0.00014,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.8 -19090000,0.98,-0.0088,-0.011,0.18,0.023,-0.02,0.026,0,0,-4.9e+02,-0.0012,-0.0058,-9.2e-05,0.0073,-0.019,-0.13,0.2,-3e-06,0.43,0.00042,0.00042,-0.0002,0,0,-4.9e+02,0.00035,0.00037,0.038,0.015,0.016,0.0055,0.042,0.043,0.032,7.3e-07,6.5e-07,1.9e-06,0.033,0.03,0.00014,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.8 -19190000,0.98,-0.0086,-0.011,0.18,0.02,-0.02,0.026,0,0,-4.9e+02,-0.0012,-0.0058,-0.0001,0.0071,-0.019,-0.13,0.2,-3.8e-06,0.43,0.00043,0.00042,-0.00023,0,0,-4.9e+02,0.00035,0.00037,0.038,0.014,0.015,0.0055,0.038,0.039,0.031,7.2e-07,6.4e-07,1.9e-06,0.033,0.03,0.00013,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.8 -19290000,0.98,-0.0087,-0.011,0.18,0.021,-0.021,0.027,0,0,-4.9e+02,-0.0012,-0.0058,-0.0001,0.0071,-0.019,-0.13,0.2,-3.8e-06,0.43,0.00044,0.00044,-0.00023,0,0,-4.9e+02,0.00035,0.00037,0.038,0.015,0.016,0.0055,0.042,0.043,0.031,7.1e-07,6.3e-07,1.9e-06,0.033,0.03,0.00013,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.9 -19390000,0.98,-0.0087,-0.011,0.18,0.019,-0.017,0.028,0,0,-4.9e+02,-0.0012,-0.0058,-0.0001,0.0077,-0.019,-0.13,0.2,-4.2e-06,0.43,0.00043,0.00043,-0.00023,0,0,-4.9e+02,0.00035,0.00037,0.038,0.014,0.015,0.0055,0.038,0.039,0.031,7e-07,6.2e-07,1.9e-06,0.033,0.03,0.00013,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.9 -19490000,0.98,-0.0088,-0.011,0.18,0.021,-0.019,0.028,0,0,-4.9e+02,-0.0012,-0.0058,-0.00011,0.0071,-0.02,-0.13,0.2,-3.9e-06,0.43,0.00043,0.0004,-0.00022,0,0,-4.9e+02,0.00035,0.00037,0.038,0.015,0.016,0.0055,0.042,0.043,0.031,6.9e-07,6.2e-07,1.9e-06,0.032,0.03,0.00013,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.9 -19590000,0.98,-0.0088,-0.011,0.18,0.018,-0.02,0.03,0,0,-4.9e+02,-0.0012,-0.0058,-0.00011,0.0074,-0.02,-0.13,0.2,-4.1e-06,0.43,0.00043,0.0004,-0.00022,0,0,-4.9e+02,0.00034,0.00036,0.038,0.013,0.015,0.0054,0.038,0.039,0.031,6.8e-07,6e-07,1.8e-06,0.032,0.03,0.00013,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.9 -19690000,0.98,-0.0088,-0.011,0.18,0.018,-0.019,0.029,0,0,-4.9e+02,-0.0012,-0.0058,-0.0001,0.0079,-0.021,-0.13,0.2,-3.8e-06,0.43,0.00043,0.0004,-0.00021,0,0,-4.9e+02,0.00034,0.00036,0.038,0.014,0.016,0.0054,0.042,0.043,0.031,6.8e-07,6e-07,1.8e-06,0.032,0.029,0.00013,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,5 -19790000,0.98,-0.0089,-0.011,0.18,0.016,-0.017,0.028,0,0,-4.9e+02,-0.0012,-0.0058,-0.00011,0.008,-0.021,-0.13,0.2,-4.3e-06,0.43,0.00043,0.00041,-0.00023,0,0,-4.9e+02,0.00034,0.00036,0.038,0.013,0.014,0.0054,0.038,0.039,0.031,6.6e-07,5.9e-07,1.8e-06,0.032,0.029,0.00013,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,5 -19890000,0.98,-0.0089,-0.011,0.18,0.017,-0.018,0.029,0,0,-4.9e+02,-0.0012,-0.0058,-0.00011,0.008,-0.021,-0.13,0.2,-4.3e-06,0.43,0.00043,0.00041,-0.00023,0,0,-4.9e+02,0.00034,0.00036,0.038,0.014,0.015,0.0054,0.041,0.042,0.031,6.6e-07,5.8e-07,1.8e-06,0.032,0.029,0.00013,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,5 -19990000,0.98,-0.0089,-0.012,0.18,0.015,-0.018,0.026,0,0,-4.9e+02,-0.0012,-0.0058,-0.00011,0.0089,-0.02,-0.13,0.2,-4.9e-06,0.43,0.00042,0.00041,-0.00023,0,0,-4.9e+02,0.00034,0.00036,0.038,0.013,0.014,0.0054,0.038,0.038,0.031,6.4e-07,5.7e-07,1.8e-06,0.032,0.029,0.00013,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,5 -20090000,0.98,-0.0089,-0.012,0.18,0.017,-0.021,0.027,0,0,-4.9e+02,-0.0012,-0.0058,-0.00011,0.0091,-0.021,-0.13,0.2,-4.8e-06,0.43,0.00042,0.00042,-0.00023,0,0,-4.9e+02,0.00034,0.00036,0.038,0.014,0.015,0.0054,0.041,0.042,0.031,6.4e-07,5.7e-07,1.8e-06,0.032,0.029,0.00013,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,5.1 -20190000,0.98,-0.009,-0.012,0.18,0.017,-0.018,0.028,0,0,-4.9e+02,-0.0012,-0.0058,-0.00012,0.0091,-0.021,-0.13,0.2,-5.4e-06,0.43,0.00042,0.00043,-0.00024,0,0,-4.9e+02,0.00034,0.00036,0.038,0.013,0.014,0.0054,0.037,0.038,0.031,6.2e-07,5.5e-07,1.8e-06,0.032,0.029,0.00013,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,0.01 -20290000,0.98,-0.009,-0.012,0.18,0.015,-0.02,0.028,0,0,-4.9e+02,-0.0012,-0.0058,-0.00011,0.0091,-0.022,-0.13,0.2,-5.4e-06,0.43,0.00042,0.00044,-0.00025,0,0,-4.9e+02,0.00034,0.00036,0.038,0.014,0.015,0.0054,0.041,0.042,0.031,6.2e-07,5.5e-07,1.8e-06,0.032,0.029,0.00012,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,0.01 -20390000,0.98,-0.0089,-0.012,0.18,0.013,-0.017,0.028,0,0,-4.9e+02,-0.0012,-0.0058,-0.00011,0.01,-0.022,-0.13,0.2,-5.5e-06,0.43,0.00041,0.00042,-0.00023,0,0,-4.9e+02,0.00034,0.00035,0.038,0.013,0.014,0.0054,0.037,0.038,0.031,6.1e-07,5.4e-07,1.8e-06,0.032,0.029,0.00012,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,0.01 -20490000,0.98,-0.0089,-0.012,0.18,0.0097,-0.019,0.029,0,0,-4.9e+02,-0.0012,-0.0058,-0.00011,0.01,-0.022,-0.13,0.2,-5.3e-06,0.43,0.00041,0.00041,-0.00023,0,0,-4.9e+02,0.00034,0.00035,0.038,0.014,0.015,0.0054,0.041,0.042,0.031,6.1e-07,5.4e-07,1.8e-06,0.031,0.029,0.00012,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,0.01 -20590000,0.98,-0.0089,-0.012,0.18,0.0089,-0.019,0.029,0,0,-4.9e+02,-0.0012,-0.0058,-0.0001,0.012,-0.022,-0.13,0.2,-5.3e-06,0.43,0.00038,0.00039,-0.00022,0,0,-4.9e+02,0.00033,0.00035,0.038,0.013,0.014,0.0053,0.037,0.038,0.031,5.9e-07,5.3e-07,1.8e-06,0.031,0.029,0.00012,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,0.01 -20690000,0.98,-0.0088,-0.012,0.18,0.0078,-0.018,0.03,0,0,-4.9e+02,-0.0012,-0.0058,-0.00011,0.011,-0.022,-0.13,0.2,-5.5e-06,0.43,0.00039,0.00039,-0.00022,0,0,-4.9e+02,0.00033,0.00035,0.038,0.013,0.015,0.0054,0.041,0.042,0.031,5.9e-07,5.2e-07,1.8e-06,0.031,0.029,0.00012,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,0.01 -20790000,0.98,-0.0081,-0.012,0.18,0.004,-0.015,0.015,0,0,-4.9e+02,-0.0012,-0.0058,-0.0001,0.012,-0.022,-0.13,0.2,-5.9e-06,0.43,0.00037,0.00039,-0.00022,0,0,-4.9e+02,0.00033,0.00035,0.038,0.013,0.014,0.0053,0.037,0.038,0.031,5.8e-07,5.1e-07,1.8e-06,0.031,0.028,0.00012,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,0.01 -20890000,0.98,0.00095,-0.0079,0.18,0.0001,-0.0039,-0.1,0,0,-4.9e+02,-0.0012,-0.0058,-0.0001,0.012,-0.023,-0.13,0.2,-6.8e-06,0.43,0.00037,0.00051,-0.00017,0,0,-4.9e+02,0.00033,0.00035,0.038,0.013,0.015,0.0053,0.04,0.042,0.031,5.8e-07,5.1e-07,1.8e-06,0.031,0.028,0.00012,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,0.01 -20990000,0.98,0.0043,-0.0044,0.18,-0.012,0.015,-0.24,0,0,-4.9e+02,-0.0012,-0.0058,-0.0001,0.013,-0.023,-0.13,0.2,-6.8e-06,0.43,0.00036,0.0005,-0.00013,0,0,-4.9e+02,0.00033,0.00035,0.038,0.013,0.014,0.0053,0.037,0.038,0.031,5.6e-07,5e-07,1.7e-06,0.031,0.028,0.00012,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -21090000,0.98,0.0027,-0.0048,0.18,-0.023,0.03,-0.36,0,0,-4.9e+02,-0.0012,-0.0058,-9.8e-05,0.013,-0.023,-0.13,0.2,-5e-06,0.43,0.00042,0.0003,-0.00017,0,0,-4.9e+02,0.00033,0.00035,0.038,0.014,0.015,0.0053,0.04,0.041,0.031,5.6e-07,5e-07,1.7e-06,0.031,0.028,0.00012,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -21190000,0.98,-8.5e-05,-0.0064,0.18,-0.029,0.037,-0.49,0,0,-4.9e+02,-0.0012,-0.0058,-9e-05,0.012,-0.024,-0.13,0.2,-4.5e-06,0.43,0.00042,0.00032,-0.00016,0,0,-4.9e+02,0.00033,0.00034,0.038,0.013,0.014,0.0053,0.037,0.038,0.031,5.5e-07,4.9e-07,1.7e-06,0.031,0.028,0.00012,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -21290000,0.98,-0.0023,-0.0077,0.18,-0.028,0.039,-0.62,0,0,-4.9e+02,-0.0012,-0.0058,-9.8e-05,0.012,-0.024,-0.13,0.2,-5.1e-06,0.43,0.00041,0.00036,-9.2e-05,0,0,-4.9e+02,0.00033,0.00034,0.037,0.014,0.015,0.0053,0.04,0.041,0.031,5.5e-07,4.8e-07,1.7e-06,0.031,0.028,0.00012,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -21390000,0.98,-0.0037,-0.0083,0.18,-0.026,0.036,-0.75,0,0,-4.9e+02,-0.0012,-0.0058,-9.6e-05,0.012,-0.024,-0.13,0.2,-4.6e-06,0.43,0.00043,0.00028,-0.00011,0,0,-4.9e+02,0.00032,0.00034,0.037,0.013,0.014,0.0053,0.037,0.038,0.031,5.3e-07,4.7e-07,1.7e-06,0.031,0.028,0.00012,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -21490000,0.98,-0.0045,-0.0088,0.18,-0.021,0.033,-0.88,0,0,-4.9e+02,-0.0012,-0.0058,-9e-05,0.013,-0.024,-0.13,0.2,-4.6e-06,0.43,0.00042,0.00031,-0.00015,0,0,-4.9e+02,0.00032,0.00034,0.037,0.014,0.016,0.0053,0.04,0.041,0.031,5.3e-07,4.7e-07,1.7e-06,0.031,0.028,0.00012,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -21590000,0.98,-0.0049,-0.0087,0.18,-0.014,0.03,-1,0,0,-4.9e+02,-0.0012,-0.0058,-8.5e-05,0.013,-0.023,-0.13,0.2,-4.7e-06,0.43,0.0004,0.00036,-0.00017,0,0,-4.9e+02,0.00032,0.00034,0.037,0.013,0.015,0.0053,0.037,0.038,0.031,5.2e-07,4.6e-07,1.7e-06,0.03,0.028,0.00012,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -21690000,0.98,-0.0052,-0.0086,0.18,-0.011,0.025,-1.1,0,0,-4.9e+02,-0.0012,-0.0058,-7.7e-05,0.013,-0.024,-0.13,0.2,-4.6e-06,0.43,0.00038,0.00041,-0.00015,0,0,-4.9e+02,0.00032,0.00034,0.037,0.014,0.016,0.0053,0.04,0.041,0.031,5.2e-07,4.6e-07,1.7e-06,0.03,0.028,0.00011,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -21790000,0.98,-0.0055,-0.0088,0.18,-0.0061,0.021,-1.3,0,0,-4.9e+02,-0.0012,-0.0058,-6.8e-05,0.014,-0.023,-0.13,0.2,-4.7e-06,0.43,0.00038,0.0004,-0.00021,0,0,-4.9e+02,0.00032,0.00033,0.037,0.013,0.015,0.0052,0.037,0.038,0.031,5.1e-07,4.5e-07,1.7e-06,0.03,0.028,0.00011,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -21890000,0.98,-0.0058,-0.0089,0.18,-0.0025,0.016,-1.4,0,0,-4.9e+02,-0.0012,-0.0058,-7e-05,0.014,-0.023,-0.13,0.2,-5.1e-06,0.43,0.00035,0.00042,-0.0002,0,0,-4.9e+02,0.00032,0.00033,0.037,0.014,0.016,0.0053,0.04,0.041,0.031,5.1e-07,4.5e-07,1.7e-06,0.03,0.028,0.00011,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -21990000,0.98,-0.0064,-0.0092,0.18,-0.00044,0.011,-1.4,0,0,-4.9e+02,-0.0013,-0.0058,-6.5e-05,0.014,-0.022,-0.13,0.2,-4.7e-06,0.43,0.00038,0.00043,-0.00021,0,0,-4.9e+02,0.00031,0.00033,0.037,0.013,0.015,0.0052,0.037,0.038,0.031,4.9e-07,4.4e-07,1.7e-06,0.03,0.027,0.00011,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -22090000,0.98,-0.0071,-0.01,0.18,0.0016,0.0076,-1.4,0,0,-4.9e+02,-0.0013,-0.0058,-5.6e-05,0.015,-0.021,-0.13,0.2,-4.7e-06,0.43,0.00038,0.00045,-0.00022,0,0,-4.9e+02,0.00031,0.00033,0.037,0.014,0.016,0.0053,0.04,0.041,0.031,4.9e-07,4.4e-07,1.6e-06,0.03,0.027,0.00011,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -22190000,0.98,-0.0075,-0.01,0.18,0.0073,0.0033,-1.4,0,0,-4.9e+02,-0.0013,-0.0058,-4.8e-05,0.016,-0.02,-0.13,0.2,-4.8e-06,0.43,0.00038,0.00047,-0.00022,0,0,-4.9e+02,0.00031,0.00032,0.037,0.013,0.014,0.0052,0.037,0.038,0.03,4.8e-07,4.3e-07,1.6e-06,0.03,0.027,0.00011,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -22290000,0.98,-0.0082,-0.01,0.18,0.013,-0.0025,-1.4,0,0,-4.9e+02,-0.0013,-0.0058,-5e-05,0.015,-0.02,-0.13,0.2,-4.7e-06,0.43,0.00037,0.00046,-0.00022,0,0,-4.9e+02,0.00031,0.00032,0.037,0.014,0.015,0.0052,0.04,0.041,0.03,4.8e-07,4.3e-07,1.6e-06,0.029,0.027,0.00011,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -22390000,0.98,-0.0085,-0.011,0.18,0.017,-0.011,-1.4,0,0,-4.9e+02,-0.0013,-0.0058,-5.2e-05,0.014,-0.019,-0.13,0.2,-4.9e-06,0.43,0.00039,0.00046,-0.00024,0,0,-4.9e+02,0.00031,0.00032,0.037,0.013,0.014,0.0052,0.037,0.038,0.03,4.7e-07,4.2e-07,1.6e-06,0.029,0.027,0.00011,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -22490000,0.98,-0.0087,-0.011,0.18,0.022,-0.018,-1.4,0,0,-4.9e+02,-0.0013,-0.0058,-5.6e-05,0.014,-0.02,-0.13,0.2,-5.2e-06,0.43,0.0004,0.00048,-0.00026,0,0,-4.9e+02,0.00031,0.00032,0.037,0.013,0.015,0.0052,0.04,0.041,0.03,4.7e-07,4.2e-07,1.6e-06,0.029,0.027,0.00011,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -22590000,0.98,-0.0086,-0.012,0.18,0.029,-0.025,-1.4,0,0,-4.9e+02,-0.0013,-0.0058,-4.8e-05,0.014,-0.02,-0.13,0.2,-4.7e-06,0.43,0.0004,0.0005,-0.00025,0,0,-4.9e+02,0.0003,0.00032,0.037,0.013,0.014,0.0052,0.036,0.038,0.03,4.6e-07,4.1e-07,1.6e-06,0.029,0.027,0.00011,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -22690000,0.98,-0.0085,-0.012,0.18,0.033,-0.03,-1.4,0,0,-4.9e+02,-0.0013,-0.0058,-5e-05,0.014,-0.02,-0.13,0.2,-4.7e-06,0.43,0.0004,0.0005,-0.00027,0,0,-4.9e+02,0.0003,0.00032,0.037,0.013,0.015,0.0052,0.04,0.041,0.03,4.6e-07,4.1e-07,1.6e-06,0.029,0.027,0.00011,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -22790000,0.98,-0.0085,-0.012,0.18,0.038,-0.038,-1.4,0,0,-4.9e+02,-0.0013,-0.0058,-5.4e-05,0.014,-0.02,-0.13,0.2,-4.9e-06,0.43,0.00039,0.00047,-0.00029,0,0,-4.9e+02,0.0003,0.00031,0.037,0.012,0.014,0.0052,0.036,0.038,0.03,4.4e-07,4e-07,1.6e-06,0.029,0.027,0.00011,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -22890000,0.98,-0.0087,-0.013,0.18,0.042,-0.043,-1.4,0,0,-4.9e+02,-0.0013,-0.0058,-4.5e-05,0.014,-0.02,-0.13,0.2,-4.6e-06,0.43,0.00039,0.00048,-0.00028,0,0,-4.9e+02,0.0003,0.00031,0.037,0.013,0.015,0.0052,0.04,0.041,0.03,4.4e-07,4e-07,1.6e-06,0.029,0.027,0.00011,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -22990000,0.98,-0.0086,-0.013,0.18,0.046,-0.047,-1.4,0,0,-4.9e+02,-0.0013,-0.0058,-3.6e-05,0.014,-0.02,-0.13,0.2,-4.9e-06,0.43,0.00039,0.00045,-0.00025,0,0,-4.9e+02,0.0003,0.00031,0.037,0.012,0.014,0.0052,0.036,0.038,0.03,4.3e-07,3.9e-07,1.6e-06,0.029,0.027,0.00011,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -23090000,0.98,-0.0086,-0.013,0.18,0.051,-0.052,-1.4,0,0,-4.9e+02,-0.0013,-0.0058,-3.5e-05,0.014,-0.019,-0.13,0.2,-5e-06,0.43,0.00037,0.00046,-0.00024,0,0,-4.9e+02,0.0003,0.00031,0.037,0.013,0.014,0.0052,0.04,0.041,0.03,4.3e-07,3.9e-07,1.5e-06,0.029,0.027,0.00011,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -23190000,0.98,-0.0086,-0.014,0.18,0.057,-0.054,-1.4,0,0,-4.9e+02,-0.0013,-0.0058,-3.9e-05,0.014,-0.019,-0.13,0.2,-5.7e-06,0.43,0.00035,0.00043,-0.00023,0,0,-4.9e+02,0.00029,0.00031,0.037,0.012,0.013,0.0052,0.036,0.038,0.03,4.2e-07,3.8e-07,1.5e-06,0.028,0.027,0.00011,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -23290000,0.98,-0.0091,-0.014,0.18,0.062,-0.059,-1.4,0,0,-4.9e+02,-0.0013,-0.0058,-3.5e-05,0.014,-0.019,-0.13,0.2,-5.8e-06,0.43,0.00032,0.00047,-0.00024,0,0,-4.9e+02,0.00029,0.00031,0.037,0.013,0.014,0.0052,0.04,0.041,0.03,4.3e-07,3.8e-07,1.5e-06,0.028,0.026,0.00011,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -23390000,0.98,-0.009,-0.014,0.18,0.067,-0.062,-1.4,0,0,-4.9e+02,-0.0013,-0.0058,-4.9e-05,0.015,-0.019,-0.13,0.2,-6e-06,0.43,0.00033,0.00045,-0.00022,0,0,-4.9e+02,0.00029,0.0003,0.037,0.012,0.013,0.0052,0.036,0.037,0.03,4.2e-07,3.7e-07,1.5e-06,0.028,0.026,0.0001,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -23490000,0.98,-0.0091,-0.014,0.18,0.072,-0.064,-1.4,0,0,-4.9e+02,-0.0013,-0.0058,-4.1e-05,0.015,-0.019,-0.13,0.2,-5.8e-06,0.43,0.00032,0.0005,-0.00026,0,0,-4.9e+02,0.00029,0.0003,0.037,0.013,0.014,0.0052,0.039,0.041,0.03,4.2e-07,3.7e-07,1.5e-06,0.028,0.026,0.0001,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -23590000,0.98,-0.0093,-0.014,0.18,0.075,-0.066,-1.4,0,0,-4.9e+02,-0.0013,-0.0058,-3.7e-05,0.015,-0.019,-0.13,0.2,-6.7e-06,0.43,0.00027,0.00047,-0.00023,0,0,-4.9e+02,0.00029,0.0003,0.037,0.012,0.013,0.0051,0.036,0.037,0.03,4.1e-07,3.7e-07,1.5e-06,0.028,0.026,0.0001,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -23690000,0.98,-0.01,-0.015,0.18,0.074,-0.068,-1.3,0,0,-4.9e+02,-0.0013,-0.0058,-3e-05,0.016,-0.019,-0.13,0.2,-6.5e-06,0.43,0.00025,0.00049,-0.00022,0,0,-4.9e+02,0.00029,0.0003,0.037,0.012,0.014,0.0052,0.039,0.041,0.03,4.1e-07,3.7e-07,1.5e-06,0.028,0.026,0.0001,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -23790000,0.98,-0.012,-0.018,0.18,0.068,-0.064,-0.94,0,0,-4.9e+02,-0.0013,-0.0058,-2.8e-05,0.017,-0.019,-0.13,0.2,-6.2e-06,0.43,0.00024,0.00053,-0.0002,0,0,-4.9e+02,0.00029,0.0003,0.037,0.011,0.013,0.0051,0.036,0.037,0.03,4e-07,3.6e-07,1.5e-06,0.028,0.026,0.0001,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -23890000,0.98,-0.015,-0.022,0.18,0.064,-0.064,-0.51,0,0,-4.9e+02,-0.0013,-0.0058,-2.5e-05,0.017,-0.019,-0.13,0.2,-6.2e-06,0.43,0.00023,0.00055,-0.00023,0,0,-4.9e+02,0.00029,0.0003,0.037,0.012,0.013,0.0051,0.039,0.041,0.03,4e-07,3.6e-07,1.5e-06,0.028,0.026,0.0001,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -23990000,0.98,-0.017,-0.024,0.18,0.063,-0.063,-0.12,0,0,-4.9e+02,-0.0013,-0.0058,-3.2e-05,0.018,-0.019,-0.13,0.2,-6.3e-06,0.43,0.00019,0.00056,2.1e-05,0,0,-4.9e+02,0.00029,0.0003,0.037,0.011,0.012,0.0051,0.036,0.037,0.03,3.9e-07,3.5e-07,1.5e-06,0.028,0.026,0.0001,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -24090000,0.98,-0.017,-0.023,0.18,0.07,-0.071,0.11,0,0,-4.9e+02,-0.0013,-0.0058,-3.5e-05,0.018,-0.019,-0.13,0.2,-6.2e-06,0.43,0.00021,0.00054,2.2e-05,0,0,-4.9e+02,0.00029,0.0003,0.037,0.012,0.013,0.0051,0.039,0.04,0.03,3.9e-07,3.5e-07,1.4e-06,0.028,0.026,0.0001,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -24190000,0.98,-0.014,-0.019,0.18,0.08,-0.076,0.1,0,0,-4.9e+02,-0.0013,-0.0058,-3.5e-05,0.019,-0.019,-0.13,0.2,-5.9e-06,0.43,0.00021,0.0005,0.00012,0,0,-4.9e+02,0.00028,0.0003,0.037,0.011,0.012,0.0051,0.036,0.037,0.03,3.8e-07,3.5e-07,1.4e-06,0.028,0.026,0.0001,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -24290000,0.98,-0.012,-0.016,0.18,0.084,-0.08,0.079,0,0,-4.9e+02,-0.0013,-0.0058,-3.3e-05,0.019,-0.019,-0.13,0.2,-5.5e-06,0.43,0.00024,0.00045,0.00012,0,0,-4.9e+02,0.00028,0.0003,0.037,0.012,0.013,0.0051,0.039,0.04,0.03,3.8e-07,3.5e-07,1.4e-06,0.028,0.026,0.0001,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -24390000,0.98,-0.011,-0.015,0.18,0.077,-0.074,0.095,0,0,-4.9e+02,-0.0013,-0.0058,-3.2e-05,0.021,-0.019,-0.13,0.2,-4.1e-06,0.43,0.00024,0.0005,0.00018,0,0,-4.9e+02,0.00028,0.0003,0.037,0.011,0.012,0.0051,0.035,0.037,0.03,3.8e-07,3.4e-07,1.4e-06,0.027,0.026,0.0001,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -24490000,0.98,-0.011,-0.015,0.18,0.073,-0.071,0.093,0,0,-4.9e+02,-0.0013,-0.0058,-1.8e-05,0.021,-0.02,-0.13,0.2,-4.1e-06,0.43,0.00016,0.00061,0.00023,0,0,-4.9e+02,0.00028,0.0003,0.037,0.012,0.013,0.0051,0.038,0.04,0.03,3.8e-07,3.4e-07,1.4e-06,0.027,0.026,0.0001,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -24590000,0.98,-0.012,-0.015,0.18,0.069,-0.067,0.088,0,0,-4.9e+02,-0.0013,-0.0058,-3e-05,0.023,-0.02,-0.13,0.2,-2.8e-06,0.43,0.0002,0.00058,0.00024,0,0,-4.9e+02,0.00028,0.00029,0.037,0.011,0.012,0.0051,0.035,0.037,0.03,3.7e-07,3.4e-07,1.4e-06,0.027,0.026,9.9e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -24690000,0.98,-0.012,-0.015,0.18,0.067,-0.067,0.088,0,0,-4.9e+02,-0.0013,-0.0058,-2.8e-05,0.023,-0.021,-0.13,0.2,-3e-06,0.43,0.00019,0.00061,0.00024,0,0,-4.9e+02,0.00028,0.00029,0.037,0.012,0.013,0.0051,0.038,0.04,0.03,3.7e-07,3.4e-07,1.4e-06,0.027,0.026,9.9e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -24790000,0.98,-0.012,-0.014,0.18,0.064,-0.065,0.079,0,0,-4.9e+02,-0.0013,-0.0058,-3.6e-05,0.024,-0.021,-0.13,0.2,-2.4e-06,0.43,0.00018,0.00061,0.00023,0,0,-4.9e+02,0.00028,0.00029,0.037,0.011,0.012,0.0051,0.035,0.036,0.03,3.7e-07,3.3e-07,1.4e-06,0.027,0.026,9.8e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -24890000,0.98,-0.012,-0.014,0.18,0.063,-0.068,0.069,0,0,-4.9e+02,-0.0013,-0.0058,-3.1e-05,0.024,-0.021,-0.13,0.2,-2.2e-06,0.43,0.00018,0.00062,0.00026,0,0,-4.9e+02,0.00028,0.00029,0.037,0.012,0.013,0.0051,0.038,0.04,0.03,3.7e-07,3.3e-07,1.4e-06,0.027,0.026,9.8e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -24990000,0.98,-0.012,-0.014,0.18,0.054,-0.065,0.062,0,0,-4.9e+02,-0.0014,-0.0058,-4.5e-05,0.026,-0.023,-0.13,0.2,-2.4e-06,0.43,0.00014,0.00073,0.00027,0,0,-4.9e+02,0.00028,0.00029,0.037,0.011,0.012,0.0051,0.035,0.036,0.03,3.6e-07,3.3e-07,1.4e-06,0.027,0.025,9.8e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -25090000,0.98,-0.012,-0.014,0.18,0.051,-0.064,0.059,0,0,-4.9e+02,-0.0014,-0.0058,-4.5e-05,0.026,-0.022,-0.13,0.2,-3e-06,0.43,0.00013,0.0008,0.00031,0,0,-4.9e+02,0.00028,0.00029,0.037,0.012,0.013,0.0051,0.038,0.04,0.03,3.6e-07,3.3e-07,1.4e-06,0.027,0.025,9.7e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -25190000,0.98,-0.012,-0.014,0.18,0.045,-0.058,0.059,0,0,-4.9e+02,-0.0014,-0.0058,-6.3e-05,0.028,-0.023,-0.13,0.2,-3e-06,0.43,0.00011,0.00083,0.0003,0,0,-4.9e+02,0.00028,0.00029,0.037,0.011,0.012,0.0051,0.035,0.036,0.03,3.5e-07,3.2e-07,1.3e-06,0.027,0.025,9.7e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -25290000,0.98,-0.012,-0.013,0.18,0.041,-0.06,0.054,0,0,-4.9e+02,-0.0014,-0.0058,-7e-05,0.027,-0.023,-0.13,0.2,-3.5e-06,0.43,9.8e-05,0.00086,0.00027,0,0,-4.9e+02,0.00028,0.00029,0.037,0.012,0.013,0.0051,0.038,0.04,0.03,3.5e-07,3.2e-07,1.3e-06,0.027,0.025,9.6e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -25390000,0.98,-0.012,-0.013,0.18,0.032,-0.054,0.053,0,0,-4.9e+02,-0.0014,-0.0058,-8.6e-05,0.029,-0.024,-0.13,0.2,-4.4e-06,0.43,5.9e-05,0.00091,0.00028,0,0,-4.9e+02,0.00028,0.00029,0.037,0.011,0.012,0.0051,0.035,0.036,0.03,3.5e-07,3.2e-07,1.3e-06,0.027,0.025,9.6e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -25490000,0.98,-0.013,-0.013,0.18,0.028,-0.054,0.052,0,0,-4.9e+02,-0.0014,-0.0058,-8.7e-05,0.029,-0.024,-0.13,0.2,-4.1e-06,0.43,5.3e-05,0.00087,0.00026,0,0,-4.9e+02,0.00028,0.00029,0.037,0.012,0.013,0.0051,0.038,0.04,0.03,3.5e-07,3.2e-07,1.3e-06,0.027,0.025,9.6e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -25590000,0.98,-0.013,-0.013,0.18,0.023,-0.05,0.053,0,0,-4.9e+02,-0.0014,-0.0058,-0.0001,0.03,-0.025,-0.13,0.2,-5e-06,0.43,2.1e-05,0.00089,0.00023,0,0,-4.9e+02,0.00028,0.00029,0.037,0.011,0.012,0.0051,0.035,0.036,0.03,3.4e-07,3.2e-07,1.3e-06,0.027,0.025,9.5e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -25690000,0.98,-0.012,-0.012,0.18,0.023,-0.05,0.043,0,0,-4.9e+02,-0.0014,-0.0058,-0.0001,0.03,-0.025,-0.13,0.2,-5.1e-06,0.43,2.6e-05,0.00092,0.00024,0,0,-4.9e+02,0.00028,0.00029,0.037,0.012,0.013,0.0051,0.038,0.039,0.03,3.4e-07,3.2e-07,1.3e-06,0.027,0.025,9.5e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -25790000,0.98,-0.012,-0.012,0.18,0.011,-0.042,0.043,0,0,-4.9e+02,-0.0014,-0.0058,-0.00012,0.032,-0.026,-0.13,0.2,-5.6e-06,0.43,-3.4e-05,0.00085,0.00023,0,0,-4.9e+02,0.00028,0.00029,0.037,0.011,0.012,0.0051,0.035,0.036,0.03,3.4e-07,3.1e-07,1.3e-06,0.027,0.025,9.4e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -25890000,0.98,-0.012,-0.012,0.18,0.0058,-0.04,0.045,0,0,-4.9e+02,-0.0014,-0.0058,-0.00013,0.032,-0.026,-0.13,0.2,-5.8e-06,0.43,-5.4e-05,0.00082,0.00019,0,0,-4.9e+02,0.00028,0.00029,0.037,0.012,0.013,0.0051,0.038,0.039,0.03,3.4e-07,3.1e-07,1.3e-06,0.027,0.025,9.4e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -25990000,0.98,-0.012,-0.012,0.18,-0.0032,-0.034,0.038,0,0,-4.9e+02,-0.0014,-0.0058,-0.00014,0.033,-0.026,-0.13,0.2,-7.2e-06,0.43,-0.00011,0.0008,0.00017,0,0,-4.9e+02,0.00028,0.00029,0.037,0.011,0.012,0.0051,0.035,0.036,0.03,3.3e-07,3.1e-07,1.3e-06,0.027,0.025,9.4e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -26090000,0.98,-0.012,-0.012,0.18,-0.0078,-0.034,0.037,0,0,-4.9e+02,-0.0014,-0.0058,-0.00013,0.034,-0.026,-0.13,0.2,-6.7e-06,0.43,-0.00011,0.00079,0.0002,0,0,-4.9e+02,0.00028,0.00029,0.037,0.012,0.013,0.0051,0.038,0.039,0.03,3.3e-07,3.1e-07,1.3e-06,0.027,0.025,9.4e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -26190000,0.98,-0.012,-0.012,0.18,-0.015,-0.026,0.033,0,0,-4.9e+02,-0.0014,-0.0058,-0.00014,0.035,-0.026,-0.13,0.2,-7.1e-06,0.43,-0.00013,0.00078,0.00021,0,0,-4.9e+02,0.00028,0.00029,0.037,0.011,0.012,0.005,0.035,0.036,0.03,3.3e-07,3e-07,1.2e-06,0.027,0.025,9.3e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -26290000,0.98,-0.012,-0.013,0.18,-0.015,-0.026,0.027,0,0,-4.9e+02,-0.0014,-0.0058,-0.00014,0.035,-0.026,-0.13,0.2,-7.7e-06,0.43,-0.00014,0.0008,0.00019,0,0,-4.9e+02,0.00028,0.00029,0.037,0.012,0.013,0.0051,0.038,0.039,0.03,3.3e-07,3e-07,1.2e-06,0.027,0.025,9.3e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -26390000,0.98,-0.011,-0.013,0.18,-0.021,-0.018,0.031,0,0,-4.9e+02,-0.0014,-0.0058,-0.00015,0.036,-0.027,-0.13,0.2,-8.9e-06,0.43,-0.00018,0.00077,0.00015,0,0,-4.9e+02,0.00028,0.00029,0.037,0.011,0.012,0.005,0.035,0.036,0.03,3.2e-07,3e-07,1.2e-06,0.026,0.025,9.2e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -26490000,0.98,-0.011,-0.013,0.18,-0.023,-0.016,0.04,0,0,-4.9e+02,-0.0014,-0.0058,-0.00016,0.036,-0.027,-0.13,0.2,-9.3e-06,0.43,-0.00018,0.00081,0.00015,0,0,-4.9e+02,0.00028,0.00029,0.037,0.012,0.013,0.0051,0.038,0.039,0.03,3.3e-07,3e-07,1.2e-06,0.026,0.025,9.2e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -26590000,0.98,-0.01,-0.013,0.18,-0.026,-0.0076,0.04,0,0,-4.9e+02,-0.0015,-0.0058,-0.00017,0.036,-0.027,-0.13,0.2,-1.1e-05,0.43,-0.00022,0.00082,0.00015,0,0,-4.9e+02,0.00028,0.00029,0.037,0.011,0.012,0.005,0.035,0.036,0.03,3.2e-07,3e-07,1.2e-06,0.026,0.025,9.2e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -26690000,0.98,-0.01,-0.013,0.18,-0.027,-0.0036,0.039,0,0,-4.9e+02,-0.0014,-0.0058,-0.00018,0.036,-0.028,-0.13,0.2,-1.1e-05,0.43,-0.00023,0.00083,0.00014,0,0,-4.9e+02,0.00028,0.00029,0.037,0.012,0.013,0.0051,0.038,0.039,0.03,3.2e-07,3e-07,1.2e-06,0.026,0.025,9.2e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -26790000,0.98,-0.0099,-0.012,0.18,-0.035,0.00072,0.038,0,0,-4.9e+02,-0.0015,-0.0058,-0.00018,0.037,-0.027,-0.13,0.2,-1.1e-05,0.43,-0.00025,0.00081,0.00014,0,0,-4.9e+02,0.00028,0.00029,0.037,0.011,0.012,0.005,0.035,0.036,0.03,3.2e-07,2.9e-07,1.2e-06,0.026,0.025,9.1e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -26890000,0.98,-0.0092,-0.012,0.18,-0.04,0.0036,0.034,0,0,-4.9e+02,-0.0015,-0.0058,-0.00018,0.037,-0.027,-0.13,0.2,-1.1e-05,0.43,-0.00025,0.00079,0.00014,0,0,-4.9e+02,0.00028,0.00029,0.037,0.012,0.013,0.0051,0.038,0.039,0.03,3.2e-07,2.9e-07,1.2e-06,0.026,0.025,9.1e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -26990000,0.98,-0.0087,-0.013,0.18,-0.048,0.011,0.033,0,0,-4.9e+02,-0.0015,-0.0058,-0.00018,0.037,-0.027,-0.13,0.2,-1.2e-05,0.43,-0.00027,0.00077,0.00014,0,0,-4.9e+02,0.00028,0.00029,0.037,0.011,0.012,0.005,0.035,0.036,0.03,3.1e-07,2.9e-07,1.2e-06,0.026,0.025,9.1e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -27090000,0.98,-0.0085,-0.013,0.18,-0.05,0.017,0.036,0,0,-4.9e+02,-0.0015,-0.0058,-0.00019,0.038,-0.027,-0.13,0.2,-1.2e-05,0.43,-0.00027,0.00077,0.00015,0,0,-4.9e+02,0.00028,0.00029,0.037,0.012,0.013,0.005,0.038,0.039,0.03,3.1e-07,2.9e-07,1.2e-06,0.026,0.025,9e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -27190000,0.98,-0.0086,-0.013,0.18,-0.056,0.024,0.039,0,0,-4.9e+02,-0.0015,-0.0058,-0.00019,0.038,-0.027,-0.13,0.2,-1.2e-05,0.43,-0.00028,0.00076,0.00015,0,0,-4.9e+02,0.00028,0.00029,0.037,0.011,0.012,0.005,0.035,0.036,0.03,3.1e-07,2.9e-07,1.2e-06,0.026,0.025,9e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -27290000,0.98,-0.0087,-0.014,0.18,-0.063,0.029,0.15,0,0,-4.9e+02,-0.0015,-0.0058,-0.00019,0.038,-0.028,-0.13,0.2,-1.2e-05,0.43,-0.00029,0.00076,0.00015,0,0,-4.9e+02,0.00028,0.00029,0.037,0.012,0.013,0.005,0.038,0.039,0.03,3.1e-07,2.9e-07,1.2e-06,0.026,0.025,9e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -27390000,0.98,-0.01,-0.016,0.18,-0.071,0.036,0.48,0,0,-4.9e+02,-0.0015,-0.0058,-0.00019,0.038,-0.028,-0.13,0.2,-1.4e-05,0.43,-0.00036,0.00068,0.00021,0,0,-4.9e+02,0.00028,0.00029,0.037,0.011,0.012,0.005,0.035,0.036,0.03,3e-07,2.8e-07,1.1e-06,0.026,0.024,9e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -27490000,0.98,-0.012,-0.018,0.18,-0.074,0.041,0.79,0,0,-4.9e+02,-0.0015,-0.0058,-0.0002,0.038,-0.028,-0.13,0.2,-1.4e-05,0.43,-0.00033,0.00064,0.00021,0,0,-4.9e+02,0.00028,0.00029,0.037,0.011,0.013,0.005,0.038,0.039,0.03,3.1e-07,2.8e-07,1.1e-06,0.026,0.024,8.9e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -27590000,0.98,-0.011,-0.017,0.18,-0.07,0.045,0.89,0,0,-4.9e+02,-0.0015,-0.0058,-0.0002,0.038,-0.028,-0.13,0.2,-1.4e-05,0.43,-0.00031,0.00059,0.00024,0,0,-4.9e+02,0.00028,0.00029,0.037,0.011,0.012,0.005,0.035,0.036,0.03,3e-07,2.8e-07,1.1e-06,0.026,0.024,8.9e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -27690000,0.98,-0.01,-0.014,0.18,-0.066,0.041,0.79,0,0,-4.9e+02,-0.0015,-0.0058,-0.0002,0.038,-0.028,-0.13,0.2,-1.4e-05,0.43,-0.0003,0.00058,0.00022,0,0,-4.9e+02,0.00028,0.00029,0.037,0.011,0.012,0.005,0.038,0.039,0.03,3e-07,2.8e-07,1.1e-06,0.026,0.024,8.9e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -27790000,0.98,-0.0088,-0.013,0.18,-0.066,0.04,0.78,0,0,-4.9e+02,-0.0015,-0.0058,-0.0002,0.038,-0.028,-0.13,0.2,-1.5e-05,0.43,-0.0003,0.00054,0.00023,0,0,-4.9e+02,0.00028,0.00029,0.037,0.011,0.012,0.005,0.035,0.036,0.03,3e-07,2.8e-07,1.1e-06,0.026,0.024,8.9e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -27890000,0.98,-0.0085,-0.013,0.18,-0.071,0.046,0.82,0,0,-4.9e+02,-0.0015,-0.0058,-0.0002,0.038,-0.029,-0.13,0.2,-1.5e-05,0.43,-0.0003,0.00054,0.00023,0,0,-4.9e+02,0.00029,0.00029,0.037,0.011,0.012,0.005,0.038,0.039,0.03,3e-07,2.8e-07,1.1e-06,0.026,0.024,8.8e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -27990000,0.98,-0.0089,-0.013,0.18,-0.072,0.049,0.81,0,0,-4.9e+02,-0.0014,-0.0058,-0.00019,0.037,-0.028,-0.13,0.2,-1.5e-05,0.43,-0.0003,0.00048,0.00025,0,0,-4.9e+02,0.00029,0.00029,0.037,0.011,0.012,0.005,0.035,0.036,0.03,3e-07,2.7e-07,1.1e-06,0.026,0.024,8.8e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -28090000,0.98,-0.0092,-0.013,0.18,-0.076,0.049,0.82,0,0,-4.9e+02,-0.0014,-0.0058,-0.00018,0.037,-0.028,-0.13,0.2,-1.5e-05,0.43,-0.00031,0.0005,0.00024,0,0,-4.9e+02,0.00029,0.00029,0.037,0.011,0.012,0.005,0.038,0.039,0.03,3e-07,2.7e-07,1.1e-06,0.026,0.024,8.8e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -28190000,0.98,-0.0086,-0.013,0.18,-0.077,0.047,0.82,0,0,-4.9e+02,-0.0014,-0.0058,-0.00018,0.037,-0.028,-0.13,0.2,-1.5e-05,0.43,-0.00029,0.00048,0.00025,0,0,-4.9e+02,0.00029,0.00029,0.037,0.011,0.012,0.005,0.035,0.036,0.03,2.9e-07,2.7e-07,1.1e-06,0.026,0.024,8.8e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -28290000,0.98,-0.0081,-0.014,0.18,-0.081,0.05,0.82,0,0,-4.9e+02,-0.0014,-0.0058,-0.00017,0.037,-0.029,-0.13,0.2,-1.4e-05,0.43,-0.0003,0.00051,0.00022,0,0,-4.9e+02,0.00029,0.00029,0.037,0.011,0.012,0.005,0.038,0.039,0.03,2.9e-07,2.7e-07,1.1e-06,0.026,0.024,8.7e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 -28390000,0.98,-0.0082,-0.014,0.18,-0.082,0.054,0.82,0,0,-4.9e+02,-0.0014,-0.0058,-0.00016,0.036,-0.029,-0.13,0.2,-1.5e-05,0.43,-0.00035,0.00042,0.00023,0,0,-4.9e+02,0.00029,0.00029,0.036,0.011,0.012,0.005,0.035,0.036,0.03,2.9e-07,2.7e-07,1.1e-06,0.026,0.024,8.7e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 -28490000,0.98,-0.0084,-0.015,0.18,-0.085,0.057,0.83,0,0,-4.9e+02,-0.0014,-0.0058,-0.00017,0.036,-0.029,-0.13,0.2,-1.5e-05,0.43,-0.00032,0.0004,0.00026,0,0,-4.9e+02,0.00029,0.00029,0.036,0.011,0.012,0.005,0.038,0.039,0.03,2.9e-07,2.7e-07,1.1e-06,0.026,0.024,8.7e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 -28590000,0.98,-0.0085,-0.015,0.18,-0.079,0.054,0.82,0,0,-4.9e+02,-0.0014,-0.0058,-0.00015,0.036,-0.028,-0.13,0.2,-1.5e-05,0.43,-0.00029,0.00039,0.00025,0,0,-4.9e+02,0.00029,0.00029,0.036,0.011,0.012,0.005,0.035,0.036,0.03,2.9e-07,2.7e-07,1e-06,0.026,0.024,8.7e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 -28690000,0.98,-0.0083,-0.014,0.18,-0.078,0.054,0.82,0,0,-4.9e+02,-0.0014,-0.0058,-0.00015,0.036,-0.029,-0.13,0.2,-1.5e-05,0.43,-0.00026,0.00039,0.00025,0,0,-4.9e+02,0.00029,0.00029,0.036,0.011,0.012,0.005,0.038,0.039,0.03,2.9e-07,2.7e-07,1e-06,0.026,0.024,8.7e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 -28790000,0.98,-0.0076,-0.014,0.18,-0.076,0.055,0.82,0,0,-4.9e+02,-0.0014,-0.0058,-0.00014,0.035,-0.029,-0.13,0.2,-1.6e-05,0.43,-0.00029,0.00028,0.00025,0,0,-4.9e+02,0.00029,0.00029,0.036,0.011,0.012,0.005,0.035,0.036,0.03,2.8e-07,2.6e-07,1e-06,0.026,0.024,8.6e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 -28890000,0.98,-0.0074,-0.013,0.18,-0.08,0.057,0.82,0,0,-4.9e+02,-0.0014,-0.0058,-0.00014,0.035,-0.029,-0.13,0.2,-1.6e-05,0.43,-0.00029,0.00032,0.00023,0,0,-4.9e+02,0.00029,0.00029,0.036,0.011,0.012,0.005,0.038,0.039,0.03,2.8e-07,2.6e-07,1e-06,0.026,0.024,8.6e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 -28990000,0.98,-0.0072,-0.014,0.18,-0.077,0.054,0.82,0,0,-4.9e+02,-0.0014,-0.0058,-0.00013,0.034,-0.029,-0.13,0.2,-1.7e-05,0.43,-0.00033,0.00017,0.00027,0,0,-4.9e+02,0.00029,0.00029,0.036,0.011,0.012,0.005,0.035,0.036,0.03,2.8e-07,2.6e-07,1e-06,0.026,0.024,8.6e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 -29090000,0.98,-0.007,-0.014,0.18,-0.08,0.056,0.82,0,0,-4.9e+02,-0.0014,-0.0058,-0.00013,0.034,-0.029,-0.13,0.2,-1.7e-05,0.43,-0.00035,0.00015,0.00027,0,0,-4.9e+02,0.00029,0.00029,0.036,0.011,0.012,0.005,0.038,0.039,0.03,2.8e-07,2.6e-07,1e-06,0.026,0.024,8.6e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 -29190000,0.98,-0.007,-0.014,0.18,-0.078,0.056,0.82,0,0,-4.9e+02,-0.0014,-0.0058,-0.00012,0.033,-0.029,-0.13,0.2,-1.8e-05,0.43,-0.00038,1.6e-05,0.00028,0,0,-4.9e+02,0.00029,0.00029,0.036,0.011,0.012,0.005,0.035,0.036,0.03,2.8e-07,2.6e-07,1e-06,0.025,0.024,8.5e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 -29290000,0.98,-0.0072,-0.014,0.18,-0.081,0.062,0.82,0,0,-4.9e+02,-0.0014,-0.0058,-0.00012,0.033,-0.029,-0.13,0.2,-1.9e-05,0.43,-0.00038,-1.1e-05,0.00029,0,0,-4.9e+02,0.00029,0.00029,0.036,0.011,0.012,0.005,0.038,0.039,0.03,2.8e-07,2.6e-07,1e-06,0.025,0.024,8.5e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 -29390000,0.98,-0.0077,-0.013,0.18,-0.077,0.061,0.82,0,0,-4.9e+02,-0.0014,-0.0058,-0.00011,0.033,-0.029,-0.13,0.2,-2e-05,0.43,-0.00041,-0.00014,0.0003,0,0,-4.9e+02,0.00029,0.00029,0.036,0.011,0.012,0.005,0.035,0.036,0.03,2.8e-07,2.6e-07,9.9e-07,0.025,0.024,8.5e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 -29490000,0.98,-0.0076,-0.013,0.18,-0.08,0.062,0.82,0,0,-4.9e+02,-0.0014,-0.0058,-9.7e-05,0.033,-0.029,-0.13,0.2,-2e-05,0.43,-0.00044,-0.00011,0.00027,0,0,-4.9e+02,0.00029,0.00029,0.036,0.011,0.012,0.005,0.038,0.039,0.03,2.8e-07,2.6e-07,9.9e-07,0.025,0.024,8.5e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 -29590000,0.98,-0.0075,-0.013,0.18,-0.077,0.06,0.83,0,0,-4.9e+02,-0.0014,-0.0058,-8.1e-05,0.032,-0.029,-0.13,0.2,-2.1e-05,0.43,-0.00049,-0.00022,0.00027,0,0,-4.9e+02,0.00029,0.00029,0.036,0.011,0.012,0.005,0.035,0.036,0.03,2.7e-07,2.6e-07,9.8e-07,0.025,0.024,8.5e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 -29690000,0.98,-0.0075,-0.013,0.18,-0.082,0.059,0.82,0,0,-4.9e+02,-0.0014,-0.0058,-7.3e-05,0.032,-0.029,-0.13,0.2,-2.1e-05,0.43,-0.00051,-0.00018,0.00026,0,0,-4.9e+02,0.00029,0.00029,0.036,0.011,0.012,0.005,0.038,0.039,0.03,2.7e-07,2.6e-07,9.7e-07,0.025,0.024,8.4e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 -29790000,0.98,-0.0074,-0.013,0.18,-0.079,0.054,0.82,0,0,-4.9e+02,-0.0014,-0.0058,-5.8e-05,0.031,-0.029,-0.13,0.2,-2.3e-05,0.43,-0.00056,-0.0003,0.00026,0,0,-4.9e+02,0.00029,0.00029,0.036,0.011,0.012,0.005,0.035,0.036,0.03,2.7e-07,2.5e-07,9.6e-07,0.025,0.024,8.4e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 -29890000,0.98,-0.0068,-0.014,0.18,-0.08,0.055,0.82,0,0,-4.9e+02,-0.0014,-0.0058,-5.1e-05,0.031,-0.029,-0.13,0.2,-2.3e-05,0.43,-0.00059,-0.00027,0.00024,0,0,-4.9e+02,0.00029,0.00029,0.036,0.011,0.012,0.005,0.038,0.039,0.03,2.7e-07,2.5e-07,9.6e-07,0.025,0.024,8.4e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 -29990000,0.98,-0.007,-0.014,0.18,-0.075,0.051,0.81,0,0,-4.9e+02,-0.0014,-0.0058,-4e-05,0.03,-0.03,-0.13,0.2,-2.4e-05,0.43,-0.00057,-0.00032,0.00026,0,0,-4.9e+02,0.00029,0.00029,0.036,0.011,0.012,0.0049,0.035,0.036,0.03,2.7e-07,2.5e-07,9.5e-07,0.025,0.024,8.4e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 -30090000,0.98,-0.0071,-0.014,0.18,-0.076,0.051,0.81,0,0,-4.9e+02,-0.0014,-0.0058,-5e-05,0.03,-0.03,-0.13,0.2,-2.5e-05,0.43,-0.00052,-0.00039,0.00031,0,0,-4.9e+02,0.00029,0.00029,0.036,0.011,0.012,0.005,0.038,0.039,0.029,2.7e-07,2.5e-07,9.4e-07,0.025,0.024,8.4e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 -30190000,0.98,-0.0072,-0.014,0.18,-0.071,0.047,0.81,0,0,-4.9e+02,-0.0014,-0.0058,-5.3e-05,0.029,-0.03,-0.13,0.2,-2.8e-05,0.43,-0.00053,-0.00061,0.00037,0,0,-4.9e+02,0.00029,0.00029,0.036,0.011,0.012,0.0049,0.035,0.036,0.03,2.7e-07,2.5e-07,9.4e-07,0.025,0.024,8.4e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 -30290000,0.98,-0.0072,-0.014,0.18,-0.071,0.047,0.81,0,0,-4.9e+02,-0.0014,-0.0058,-5.1e-05,0.03,-0.03,-0.13,0.2,-2.7e-05,0.43,-0.00057,-0.00066,0.00037,0,0,-4.9e+02,0.00029,0.00029,0.036,0.011,0.012,0.005,0.038,0.039,0.03,2.7e-07,2.5e-07,9.3e-07,0.025,0.024,8.3e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 -30390000,0.98,-0.0072,-0.013,0.18,-0.065,0.042,0.81,0,0,-4.9e+02,-0.0014,-0.0058,-3.4e-05,0.029,-0.031,-0.13,0.2,-2.8e-05,0.43,-0.00072,-0.00088,0.00038,0,0,-4.9e+02,0.00029,0.00029,0.036,0.011,0.012,0.0049,0.035,0.036,0.029,2.6e-07,2.5e-07,9.2e-07,0.025,0.024,8.3e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 -30490000,0.98,-0.0072,-0.014,0.18,-0.068,0.043,0.81,0,0,-4.9e+02,-0.0014,-0.0058,-2.8e-05,0.029,-0.031,-0.13,0.2,-2.8e-05,0.43,-0.00076,-0.00087,0.00036,0,0,-4.9e+02,0.00029,0.00029,0.036,0.011,0.012,0.005,0.038,0.039,0.03,2.7e-07,2.5e-07,9.2e-07,0.025,0.024,8.3e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 -30590000,0.98,-0.0075,-0.014,0.18,-0.064,0.04,0.81,0,0,-4.9e+02,-0.0014,-0.0058,-1.2e-05,0.028,-0.031,-0.13,0.2,-2.8e-05,0.43,-0.00087,-0.00098,0.00036,0,0,-4.9e+02,0.00029,0.00029,0.036,0.011,0.012,0.0049,0.035,0.036,0.029,2.6e-07,2.5e-07,9.1e-07,0.025,0.024,8.3e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 -30690000,0.98,-0.0079,-0.014,0.18,-0.062,0.039,0.81,0,0,-4.9e+02,-0.0014,-0.0058,-1.2e-05,0.029,-0.032,-0.13,0.2,-2.9e-05,0.43,-0.00085,-0.00092,0.00036,0,0,-4.9e+02,0.00029,0.00029,0.036,0.011,0.012,0.0049,0.038,0.039,0.029,2.6e-07,2.5e-07,9e-07,0.025,0.024,8.3e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 -30790000,0.98,-0.0076,-0.014,0.17,-0.056,0.034,0.81,0,0,-4.9e+02,-0.0014,-0.0058,-7.8e-06,0.028,-0.032,-0.13,0.2,-3e-05,0.43,-0.00093,-0.0011,0.0004,0,0,-4.9e+02,0.00029,0.00029,0.036,0.011,0.012,0.0049,0.035,0.036,0.03,2.6e-07,2.4e-07,9e-07,0.025,0.024,8.3e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 -30890000,0.98,-0.007,-0.014,0.17,-0.056,0.03,0.81,0,0,-4.9e+02,-0.0014,-0.0058,-1.5e-05,0.029,-0.033,-0.12,0.2,-3e-05,0.43,-0.00083,-0.0011,0.00042,0,0,-4.9e+02,0.00029,0.00029,0.036,0.011,0.012,0.0049,0.038,0.039,0.03,2.6e-07,2.4e-07,8.9e-07,0.025,0.024,8.2e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 -30990000,0.98,-0.0072,-0.013,0.17,-0.048,0.025,0.81,0,0,-4.9e+02,-0.0013,-0.0057,-7.1e-06,0.028,-0.034,-0.12,0.2,-3.1e-05,0.43,-0.00087,-0.0012,0.00045,0,0,-4.9e+02,0.00029,0.00028,0.036,0.011,0.012,0.0049,0.035,0.036,0.029,2.6e-07,2.4e-07,8.8e-07,0.025,0.023,8.2e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 -31090000,0.98,-0.0074,-0.014,0.17,-0.047,0.024,0.81,0,0,-4.9e+02,-0.0013,-0.0057,-1.1e-05,0.028,-0.034,-0.12,0.2,-3.2e-05,0.43,-0.00082,-0.0012,0.00046,0,0,-4.9e+02,0.00029,0.00028,0.036,0.011,0.012,0.0049,0.038,0.039,0.03,2.6e-07,2.4e-07,8.8e-07,0.025,0.023,8.2e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 -31190000,0.98,-0.0076,-0.014,0.17,-0.043,0.02,0.81,0,0,-4.9e+02,-0.0013,-0.0057,4.4e-06,0.028,-0.035,-0.12,0.2,-3.2e-05,0.43,-0.00092,-0.0012,0.00046,0,0,-4.9e+02,0.00029,0.00028,0.035,0.011,0.012,0.0049,0.035,0.036,0.029,2.6e-07,2.4e-07,8.7e-07,0.025,0.023,8.2e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 -31290000,0.98,-0.0078,-0.014,0.17,-0.04,0.017,0.81,0,0,-4.9e+02,-0.0013,-0.0057,9.5e-06,0.028,-0.035,-0.12,0.2,-3.1e-05,0.43,-0.00096,-0.0011,0.00044,0,0,-4.9e+02,0.00029,0.00028,0.035,0.011,0.012,0.0049,0.038,0.039,0.029,2.6e-07,2.4e-07,8.7e-07,0.025,0.023,8.2e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 -31390000,0.98,-0.0076,-0.013,0.17,-0.035,0.011,0.81,0,0,-4.9e+02,-0.0013,-0.0057,8.8e-06,0.028,-0.035,-0.12,0.2,-3.1e-05,0.43,-0.001,-0.0014,0.0005,0,0,-4.9e+02,0.00028,0.00028,0.035,0.011,0.012,0.0049,0.035,0.036,0.029,2.5e-07,2.4e-07,8.6e-07,0.025,0.023,8.2e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 -31490000,0.98,-0.0073,-0.014,0.17,-0.036,0.0076,0.81,0,0,-4.9e+02,-0.0013,-0.0057,7.2e-06,0.028,-0.035,-0.12,0.2,-3e-05,0.43,-0.0011,-0.0016,0.00051,0,0,-4.9e+02,0.00029,0.00028,0.035,0.011,0.012,0.0049,0.038,0.039,0.03,2.6e-07,2.4e-07,8.6e-07,0.025,0.023,8.1e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 -31590000,0.98,-0.0072,-0.014,0.17,-0.032,0.0058,0.82,0,0,-4.9e+02,-0.0013,-0.0057,1.7e-05,0.027,-0.035,-0.12,0.2,-2.9e-05,0.43,-0.0012,-0.0018,0.00053,0,0,-4.9e+02,0.00028,0.00028,0.035,0.011,0.012,0.0049,0.035,0.036,0.029,2.5e-07,2.4e-07,8.5e-07,0.025,0.023,8.1e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 -31690000,0.98,-0.0072,-0.015,0.17,-0.035,0.0051,0.81,0,0,-4.9e+02,-0.0013,-0.0057,2.5e-05,0.028,-0.035,-0.12,0.2,-2.9e-05,0.43,-0.0013,-0.0018,0.00052,0,0,-4.9e+02,0.00028,0.00028,0.035,0.011,0.012,0.0049,0.038,0.039,0.029,2.5e-07,2.4e-07,8.4e-07,0.025,0.023,8.1e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 -31790000,0.98,-0.0075,-0.015,0.17,-0.026,0.0025,0.81,0,0,-4.9e+02,-0.0013,-0.0057,3e-05,0.028,-0.036,-0.12,0.2,-2.8e-05,0.43,-0.0015,-0.0019,0.00055,0,0,-4.9e+02,0.00028,0.00028,0.035,0.011,0.012,0.0049,0.035,0.036,0.029,2.5e-07,2.4e-07,8.4e-07,0.025,0.023,8.1e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 -31890000,0.99,-0.0072,-0.015,0.17,-0.024,0.0003,0.81,0,0,-4.9e+02,-0.0013,-0.0057,3.4e-05,0.028,-0.036,-0.12,0.2,-2.7e-05,0.43,-0.0015,-0.002,0.00057,0,0,-4.9e+02,0.00028,0.00028,0.035,0.011,0.012,0.0049,0.038,0.039,0.029,2.5e-07,2.4e-07,8.3e-07,0.025,0.023,8.1e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 -31990000,0.99,-0.0075,-0.015,0.17,-0.016,-0.00076,0.81,0,0,-4.9e+02,-0.0013,-0.0057,3.1e-05,0.029,-0.036,-0.12,0.2,-2.7e-05,0.43,-0.0015,-0.0021,0.00062,0,0,-4.9e+02,0.00028,0.00028,0.035,0.011,0.012,0.0049,0.035,0.036,0.029,2.5e-07,2.4e-07,8.2e-07,0.025,0.023,8.1e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 -32090000,0.99,-0.0078,-0.014,0.17,-0.018,-0.0042,0.81,0,0,-4.9e+02,-0.0013,-0.0057,3.1e-05,0.029,-0.036,-0.12,0.2,-2.7e-05,0.43,-0.0015,-0.0022,0.00064,0,0,-4.9e+02,0.00028,0.00028,0.035,0.011,0.012,0.0049,0.038,0.039,0.03,2.5e-07,2.4e-07,8.2e-07,0.025,0.023,8.1e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 -32190000,0.99,-0.0081,-0.015,0.17,-0.013,-0.0078,0.81,0,0,-4.9e+02,-0.0013,-0.0057,2.7e-05,0.029,-0.037,-0.12,0.2,-2.6e-05,0.43,-0.0016,-0.0024,0.00069,0,0,-4.9e+02,0.00028,0.00028,0.035,0.011,0.012,0.0049,0.035,0.036,0.029,2.5e-07,2.3e-07,8.1e-07,0.025,0.023,8e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 -32290000,0.99,-0.008,-0.015,0.17,-0.012,-0.01,0.81,0,0,-4.9e+02,-0.0013,-0.0057,3.2e-05,0.029,-0.037,-0.12,0.2,-2.5e-05,0.43,-0.0017,-0.0024,0.0007,0,0,-4.9e+02,0.00028,0.00028,0.035,0.011,0.012,0.0049,0.038,0.039,0.029,2.5e-07,2.3e-07,8.1e-07,0.025,0.023,8e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 -32390000,0.99,-0.0081,-0.015,0.17,-0.0059,-0.012,0.81,0,0,-4.9e+02,-0.0013,-0.0057,2.9e-05,0.03,-0.037,-0.12,0.2,-2.4e-05,0.43,-0.0017,-0.0027,0.00076,0,0,-4.9e+02,0.00028,0.00028,0.035,0.011,0.012,0.0049,0.035,0.036,0.029,2.5e-07,2.3e-07,8e-07,0.025,0.023,8e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 -32490000,0.99,-0.011,-0.013,0.17,0.019,-0.078,-0.062,0,0,-4.9e+02,-0.0013,-0.0057,2.5e-05,0.03,-0.037,-0.12,0.2,-2.4e-05,0.43,-0.0016,-0.0026,0.00075,0,0,-4.9e+02,0.00028,0.00028,0.035,0.012,0.014,0.0049,0.038,0.039,0.029,2.5e-07,2.3e-07,8e-07,0.025,0.023,8e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 -32590000,0.99,-0.011,-0.013,0.17,0.022,-0.079,-0.065,0,0,-4.9e+02,-0.0013,-0.0057,2.4e-05,0.03,-0.037,-0.12,0.2,-2.4e-05,0.43,-0.0016,-0.0023,0.00082,0,0,-4.9e+02,0.00028,0.00028,0.035,0.012,0.013,0.0049,0.035,0.036,0.029,2.4e-07,2.3e-07,7.9e-07,0.025,0.023,8e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 -32690000,0.99,-0.011,-0.013,0.17,0.017,-0.085,-0.066,0,0,-4.9e+02,-0.0013,-0.0057,2.3e-05,0.03,-0.037,-0.12,0.2,-2.4e-05,0.43,-0.0016,-0.0023,0.00082,0,0,-4.9e+02,0.00028,0.00028,0.035,0.012,0.013,0.0049,0.038,0.039,0.029,2.4e-07,2.3e-07,7.9e-07,0.025,0.023,8e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 -32790000,0.99,-0.011,-0.013,0.17,0.018,-0.084,-0.067,0,0,-4.9e+02,-0.0013,-0.0057,2.1e-05,0.03,-0.037,-0.12,0.2,-2.2e-05,0.43,-0.0016,-0.0022,0.00089,0,0,-4.9e+02,0.00028,0.00027,0.035,0.011,0.013,0.0049,0.035,0.036,0.029,2.4e-07,2.3e-07,7.8e-07,0.025,0.023,8e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 -32890000,0.99,-0.011,-0.013,0.17,0.018,-0.091,-0.069,0,0,-4.9e+02,-0.0013,-0.0057,2.5e-05,0.03,-0.037,-0.12,0.2,-2.2e-05,0.43,-0.0016,-0.0021,0.0009,0,0,-4.9e+02,0.00028,0.00028,0.035,0.012,0.013,0.0049,0.038,0.039,0.029,2.4e-07,2.3e-07,7.8e-07,0.025,0.023,8.1e-05,0.0012,4e-05,0.0012,0.0012,0.0014,0.0012,1,1,0.01 -32990000,0.98,-0.011,-0.013,0.17,0.018,-0.089,-0.068,0,0,-4.9e+02,-0.0013,-0.0057,2.6e-05,0.03,-0.037,-0.12,0.2,-2.1e-05,0.43,-0.0017,-0.002,0.00097,0,0,-4.9e+02,0.00027,0.00027,0.034,0.011,0.012,0.0049,0.035,0.036,0.029,2.4e-07,2.3e-07,7.7e-07,0.025,0.023,8.1e-05,0.0012,4e-05,0.0012,0.0012,0.0014,0.0012,1,1,0.01 -33090000,0.98,-0.011,-0.013,0.17,0.014,-0.094,-0.065,0,0,-4.9e+02,-0.0013,-0.0057,2.7e-05,0.03,-0.037,-0.12,0.2,-2.1e-05,0.43,-0.0017,-0.002,0.00097,0,0,-4.9e+02,0.00027,0.00027,0.034,0.012,0.013,0.0049,0.038,0.039,0.029,2.4e-07,2.3e-07,7.7e-07,0.025,0.023,8.1e-05,0.0012,4e-05,0.0012,0.0012,0.0014,0.0012,1,1,0.01 -33190000,0.98,-0.011,-0.013,0.17,0.012,-0.094,-0.064,0,0,-4.9e+02,-0.0014,-0.0057,1.8e-05,0.031,-0.036,-0.12,0.2,-1.9e-05,0.43,-0.0016,-0.002,0.00099,0,0,-4.9e+02,0.00027,0.00027,0.034,0.011,0.012,0.0049,0.035,0.036,0.029,2.4e-07,2.3e-07,7.6e-07,0.025,0.023,8e-05,0.0012,4e-05,0.0012,0.0012,0.0014,0.0012,1,1,0.01 -33290000,0.98,-0.011,-0.013,0.17,0.0084,-0.096,-0.064,0,0,-4.9e+02,-0.0014,-0.0057,2.8e-05,0.031,-0.036,-0.12,0.2,-1.8e-05,0.43,-0.0018,-0.002,0.001,0,0,-4.9e+02,0.00027,0.00027,0.034,0.012,0.013,0.0049,0.038,0.039,0.029,2.4e-07,2.3e-07,7.6e-07,0.025,0.023,8e-05,0.0012,4e-05,0.0012,0.0012,0.0014,0.0012,1,1,0.01 -33390000,0.98,-0.01,-0.013,0.17,0.0061,-0.091,-0.062,0,0,-4.9e+02,-0.0014,-0.0057,2.1e-05,0.033,-0.035,-0.12,0.2,-1.5e-05,0.43,-0.0018,-0.002,0.0011,0,0,-4.9e+02,0.00027,0.00027,0.034,0.011,0.012,0.0049,0.035,0.036,0.029,2.4e-07,2.3e-07,7.5e-07,0.024,0.023,8e-05,0.0012,4e-05,0.0012,0.0012,0.0014,0.0012,1,1,0.033 -33490000,0.99,-0.01,-0.013,0.17,0.00088,-0.094,-0.061,0,0,-4.9e+02,-0.0014,-0.0057,2.6e-05,0.033,-0.035,-0.12,0.2,-1.3e-05,0.43,-0.0019,-0.0021,0.0011,0,0,-4.9e+02,0.00027,0.00027,0.034,0.012,0.013,0.0049,0.038,0.039,0.029,2.4e-07,2.3e-07,7.5e-07,0.024,0.023,8e-05,0.0012,4e-05,0.0012,0.0012,0.0014,0.0012,1,1,0.058 -33590000,0.99,-0.01,-0.013,0.17,-0.0019,-0.092,-0.058,0,0,-4.9e+02,-0.0014,-0.0057,2.5e-05,0.034,-0.034,-0.12,0.2,-9.7e-06,0.43,-0.002,-0.0022,0.0012,0,0,-4.9e+02,0.00027,0.00027,0.034,0.011,0.012,0.0049,0.035,0.036,0.029,2.4e-07,2.2e-07,7.4e-07,0.024,0.023,8e-05,0.0012,4e-05,0.0012,0.0012,0.0014,0.0012,1,1,0.083 -33690000,0.98,-0.01,-0.013,0.17,-0.0052,-0.095,-0.059,0,0,-4.9e+02,-0.0014,-0.0057,2.9e-05,0.035,-0.034,-0.12,0.2,-1.1e-05,0.43,-0.0019,-0.002,0.0012,0,0,-4.9e+02,0.00027,0.00027,0.034,0.012,0.013,0.0049,0.038,0.039,0.029,2.4e-07,2.2e-07,7.4e-07,0.024,0.023,8e-05,0.0012,4e-05,0.0012,0.0012,0.0014,0.0012,1,1,0.11 -33790000,0.98,-0.01,-0.013,0.17,-0.0071,-0.093,-0.054,0,0,-4.9e+02,-0.0014,-0.0057,1.9e-05,0.036,-0.034,-0.12,0.2,-9.2e-06,0.43,-0.0019,-0.0018,0.0012,0,0,-4.9e+02,0.00027,0.00027,0.034,0.011,0.012,0.0049,0.035,0.036,0.029,2.3e-07,2.2e-07,7.3e-07,0.024,0.023,8e-05,0.0012,4e-05,0.0012,0.0012,0.0014,0.0012,1,1,0.13 -33890000,0.98,-0.01,-0.013,0.17,-0.011,-0.094,-0.053,0,0,-4.9e+02,-0.0014,-0.0057,2.9e-05,0.036,-0.034,-0.12,0.2,-8.5e-06,0.43,-0.0019,-0.0018,0.0012,0,0,-4.9e+02,0.00027,0.00027,0.034,0.012,0.013,0.0049,0.038,0.039,0.029,2.4e-07,2.2e-07,7.3e-07,0.024,0.023,7.9e-05,0.0012,4e-05,0.0012,0.0012,0.0013,0.0012,1,1,0.16 -33990000,0.98,-0.01,-0.013,0.17,-0.012,-0.089,-0.05,0,0,-4.9e+02,-0.0014,-0.0057,1.6e-05,0.038,-0.033,-0.12,0.2,-5.6e-06,0.43,-0.0019,-0.0018,0.0013,0,0,-4.9e+02,0.00026,0.00026,0.034,0.011,0.012,0.0049,0.035,0.036,0.029,2.3e-07,2.2e-07,7.2e-07,0.024,0.023,7.9e-05,0.0012,4e-05,0.0012,0.0012,0.0013,0.0012,1,1,0.18 -34090000,0.98,-0.0099,-0.013,0.17,-0.016,-0.093,-0.049,0,0,-4.9e+02,-0.0014,-0.0057,1.9e-05,0.038,-0.033,-0.12,0.2,-6.1e-06,0.43,-0.0019,-0.0017,0.0013,0,0,-4.9e+02,0.00027,0.00026,0.034,0.012,0.013,0.0049,0.038,0.039,0.029,2.3e-07,2.2e-07,7.2e-07,0.024,0.023,7.9e-05,0.0012,4e-05,0.0012,0.0012,0.0013,0.0012,1,1,0.21 -34190000,0.98,-0.0099,-0.014,0.17,-0.017,-0.088,-0.046,0,0,-4.9e+02,-0.0014,-0.0057,1.5e-05,0.04,-0.033,-0.12,0.2,-3.8e-06,0.43,-0.0018,-0.0015,0.0013,0,0,-4.9e+02,0.00026,0.00026,0.034,0.011,0.012,0.0049,0.035,0.036,0.029,2.3e-07,2.2e-07,7.1e-07,0.024,0.023,7.9e-05,0.0012,4e-05,0.0012,0.0012,0.0013,0.0012,1,1,0.23 -34290000,0.98,-0.0097,-0.014,0.17,-0.018,-0.092,-0.045,0,0,-4.9e+02,-0.0014,-0.0057,2.2e-05,0.04,-0.033,-0.12,0.2,-3e-06,0.43,-0.0019,-0.0016,0.0013,0,0,-4.9e+02,0.00026,0.00026,0.034,0.012,0.013,0.0049,0.038,0.039,0.029,2.3e-07,2.2e-07,7.1e-07,0.024,0.023,7.9e-05,0.0012,4e-05,0.0012,0.0012,0.0013,0.0012,1,1,0.26 -34390000,0.98,-0.0096,-0.014,0.17,-0.02,-0.086,-0.041,0,0,-4.9e+02,-0.0014,-0.0056,1.4e-05,0.042,-0.033,-0.12,0.2,-9.7e-07,0.43,-0.0018,-0.0015,0.0013,0,0,-4.9e+02,0.00026,0.00026,0.034,0.011,0.012,0.0049,0.035,0.036,0.029,2.3e-07,2.2e-07,7e-07,0.024,0.023,7.9e-05,0.0012,4e-05,0.0012,0.0012,0.0013,0.0012,1,1,0.28 -34490000,0.98,-0.0096,-0.014,0.17,-0.023,-0.09,-0.039,0,0,-4.9e+02,-0.0014,-0.0056,2.3e-05,0.042,-0.033,-0.12,0.2,-6.4e-07,0.43,-0.0019,-0.0014,0.0013,0,0,-4.9e+02,0.00026,0.00026,0.034,0.012,0.013,0.0049,0.038,0.039,0.029,2.3e-07,2.2e-07,7e-07,0.024,0.023,7.9e-05,0.0012,4e-05,0.0012,0.0012,0.0013,0.0012,1,1,0.31 -34590000,0.98,-0.0095,-0.013,0.17,-0.025,-0.082,0.76,0,0,-4.9e+02,-0.0014,-0.0056,1.5e-05,0.043,-0.032,-0.12,0.2,1.8e-06,0.43,-0.0019,-0.0014,0.0014,0,0,-4.9e+02,0.00026,0.00026,0.034,0.011,0.011,0.0048,0.035,0.036,0.029,2.3e-07,2.2e-07,6.9e-07,0.024,0.023,7.8e-05,0.0012,4e-05,0.0012,0.0012,0.0013,0.0012,1,1,0.33 -34690000,0.98,-0.0094,-0.013,0.17,-0.031,-0.08,1.7,0,0,-4.9e+02,-0.0014,-0.0056,1.9e-05,0.043,-0.032,-0.12,0.2,2.2e-06,0.43,-0.0019,-0.0014,0.0014,0,0,-4.9e+02,0.00026,0.00026,0.034,0.011,0.012,0.0049,0.038,0.039,0.029,2.3e-07,2.2e-07,6.9e-07,0.024,0.023,7.8e-05,0.0012,4e-05,0.0012,0.0012,0.0013,0.0012,1,1,0.36 -34790000,0.98,-0.0094,-0.013,0.17,-0.034,-0.071,2.7,0,0,-4.9e+02,-0.0014,-0.0056,1.2e-05,0.046,-0.033,-0.12,0.2,4.9e-06,0.43,-0.0019,-0.0013,0.0014,0,0,-4.9e+02,0.00026,0.00026,0.034,0.011,0.011,0.0049,0.035,0.036,0.029,2.3e-07,2.2e-07,6.9e-07,0.024,0.023,7.8e-05,0.0012,4e-05,0.0012,0.0012,0.0013,0.0012,1,1,0.38 -34890000,0.98,-0.0093,-0.013,0.17,-0.04,-0.069,3.7,0,0,-4.9e+02,-0.0014,-0.0056,1.5e-05,0.046,-0.033,-0.12,0.2,5.1e-06,0.43,-0.0019,-0.0013,0.0014,0,0,-4.9e+02,0.00026,0.00026,0.034,0.012,0.013,0.0049,0.038,0.039,0.029,2.3e-07,2.2e-07,6.8e-07,0.024,0.023,7.8e-05,0.0012,4e-05,0.0012,0.0012,0.0013,0.0012,1,1,0.41 +10000,1,-0.011,-0.01,0.00023,0.00033,-0.00013,-0.01,0,0,-0.00042,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.1,0.01,0.01,9.2e-06,25,25,10,1e+02,1e+02,1e+02,0.01,0.01,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.032 +90000,1,-0.011,-0.01,0.00033,-0.001,-0.0031,-0.024,0,0,-0.0021,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.1,0.01,0.01,1.9e-05,25,25,10,1e+02,1e+02,1e+02,0.01,0.01,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.058 +190000,1,-0.012,-0.011,0.00044,-0.0023,-0.003,-0.035,0,0,-4.9e+02,1.6e-09,-1.4e-09,-6.4e-11,0,0,-3.2e-06,0,0,0,0,0,0,0,0,-4.9e+02,0.011,0.011,3e-05,25,25,10,1e+02,1e+02,1,0.01,0.01,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.082 +290000,1,-0.012,-0.011,0.00044,-0.0033,-0.0044,-0.038,0,0,-4.9e+02,7.3e-09,-1.1e-08,-3.9e-10,0,0,-2e-05,0,0,0,0,0,0,0,0,-4.9e+02,0.012,0.012,4e-05,25,25,9.6,0.37,0.37,0.41,0.01,0.01,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.11 +390000,1,-0.012,-0.011,0.00049,-0.0025,-0.0059,-0.05,0,0,-4.9e+02,-2.1e-10,-1.4e-08,-3.2e-10,0,0,-1.4e-05,0,0,0,0,0,0,0,0,-4.9e+02,0.012,0.012,5e-05,25,25,8.1,0.97,0.97,0.32,0.01,0.01,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.13 +490000,1,-0.012,-0.012,0.00055,-0.0007,-0.0062,-0.055,0,0,-4.9e+02,-1.2e-06,7.3e-07,4e-08,0,0,-1.9e-05,0,0,0,0,0,0,0,0,-4.9e+02,0.013,0.013,6e-05,7.8,7.8,5.9,0.34,0.34,0.31,0.01,0.01,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.16 +590000,1,-0.012,-0.012,0.00057,-0.002,-0.009,-0.1,0,0,-4.9e+02,-1.3e-06,7.6e-07,4.4e-08,0,0,6.3e-05,0,0,0,0,0,0,0,0,-4.9e+02,0.015,0.015,7.1e-05,7.9,7.9,4.2,0.67,0.67,0.32,0.01,0.01,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.18 +690000,1,-0.012,-0.012,0.0006,5.4e-05,-0.0088,-0.039,0,0,-4.9e+02,-5.6e-06,1.6e-06,1.5e-07,0,0,-0.00017,0,0,0,0,0,0,0,0,-4.9e+02,0.016,0.016,8.1e-05,2.7,2.7,2.8,0.26,0.26,0.29,0.01,0.01,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.21 +790000,1,-0.012,-0.012,0.0006,0.0022,-0.01,-0.045,0,0,-4.9e+02,-5.4e-06,1.6e-06,1.5e-07,0,0,-0.0002,0,0,0,0,0,0,0,0,-4.9e+02,0.018,0.018,9.1e-05,2.8,2.8,1.9,0.42,0.42,0.27,0.01,0.01,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.23 +890000,1,-0.012,-0.013,0.00061,0.0031,-0.0084,-0.086,0,0,-4.9e+02,-2.2e-05,1e-06,4.8e-07,0,0,-7.4e-05,0,0,0,0,0,0,0,0,-4.9e+02,0.019,0.019,0.0001,1.3,1.3,1.3,0.2,0.2,0.25,0.01,0.01,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.26 +990000,1,-0.012,-0.013,0.00058,0.006,-0.0097,-0.11,0,0,-4.9e+02,-2.2e-05,9.9e-07,4.9e-07,0,0,-9.4e-06,0,0,0,0,0,0,0,0,-4.9e+02,0.021,0.021,0.00011,1.5,1.5,0.95,0.3,0.3,0.23,0.01,0.01,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.28 +1090000,1,-0.012,-0.013,0.00054,0.011,-0.013,-0.13,0,0,-4.9e+02,-6.1e-05,-1.5e-05,9.6e-07,0,0,3.8e-05,0,0,0,0,0,0,0,0,-4.9e+02,0.023,0.023,0.00012,0.93,0.93,0.69,0.17,0.17,0.2,0.0098,0.0098,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.31 +1190000,1,-0.012,-0.013,0.00047,0.015,-0.018,-0.1,0,0,-4.9e+02,-5.8e-05,-1.4e-05,9.4e-07,0,0,-0.00052,0,0,0,0,0,0,0,0,-4.9e+02,0.025,0.025,0.00013,1.1,1.1,0.54,0.24,0.24,0.19,0.0098,0.0098,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.33 +1290000,1,-0.012,-0.014,0.00042,0.019,-0.018,-0.1,0,0,-4.9e+02,-0.00017,-9.7e-05,1.4e-06,0,0,-0.00079,0,0,0,0,0,0,0,0,-4.9e+02,0.026,0.026,0.00014,0.89,0.89,0.42,0.15,0.15,0.18,0.0095,0.0095,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.36 +1390000,1,-0.012,-0.014,0.00038,0.026,-0.023,-0.094,0,0,-4.9e+02,-0.00016,-9.3e-05,1.4e-06,0,0,-0.0014,0,0,0,0,0,0,0,0,-4.9e+02,0.028,0.028,0.00015,1.2,1.2,0.33,0.21,0.21,0.16,0.0095,0.0095,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.38 +1490000,1,-0.012,-0.014,0.00038,0.024,-0.02,-0.11,0,0,-4.9e+02,-0.00039,-0.00033,1e-06,0,0,-0.0013,0,0,0,0,0,0,0,0,-4.9e+02,0.027,0.027,0.00016,0.96,0.96,0.27,0.14,0.14,0.15,0.0089,0.0089,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.41 +1590000,1,-0.012,-0.014,0.00039,0.031,-0.024,-0.13,0,0,-4.9e+02,-0.00039,-0.00033,1e-06,0,0,-0.0014,0,0,0,0,0,0,0,0,-4.9e+02,0.03,0.03,0.00017,1.3,1.3,0.23,0.2,0.2,0.14,0.0089,0.0089,0.01,0.04,0.04,0.04,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.43 +1690000,1,-0.012,-0.014,0.00044,0.028,-0.019,-0.13,0,0,-4.9e+02,-0.00073,-0.00074,-5.7e-07,0,0,-0.0018,0,0,0,0,0,0,0,0,-4.9e+02,0.026,0.026,0.00018,1,1,0.19,0.14,0.14,0.13,0.0078,0.0078,0.01,0.04,0.04,0.039,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.46 +1790000,1,-0.012,-0.014,0.0004,0.035,-0.024,-0.13,0,0,-4.9e+02,-0.00073,-0.00073,-5.2e-07,0,0,-0.0028,0,0,0,0,0,0,0,0,-4.9e+02,0.028,0.028,0.00019,1.3,1.3,0.17,0.2,0.2,0.12,0.0078,0.0078,0.01,0.04,0.04,0.039,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.48 +1890000,1,-0.012,-0.014,0.00039,0.043,-0.025,-0.14,0,0,-4.9e+02,-0.00072,-0.00072,-5e-07,0,0,-0.0032,0,0,0,0,0,0,0,0,-4.9e+02,0.031,0.031,0.0002,1.7,1.7,0.15,0.31,0.31,0.12,0.0078,0.0078,0.01,0.04,0.04,0.039,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.51 +1990000,1,-0.011,-0.014,0.0004,0.035,-0.018,-0.14,0,0,-4.9e+02,-0.0011,-0.0013,-3.9e-06,0,0,-0.0046,0,0,0,0,0,0,0,0,-4.9e+02,0.025,0.025,0.00021,1.3,1.3,0.13,0.2,0.2,0.11,0.0067,0.0067,0.01,0.04,0.04,0.039,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.53 +2090000,1,-0.011,-0.014,0.00043,0.042,-0.02,-0.14,0,0,-4.9e+02,-0.0011,-0.0012,-3.8e-06,0,0,-0.0064,0,0,0,0,0,0,0,0,-4.9e+02,0.027,0.027,0.00022,1.7,1.7,0.12,0.31,0.31,0.11,0.0067,0.0067,0.01,0.04,0.04,0.039,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.56 +2190000,1,-0.011,-0.014,0.00039,0.033,-0.013,-0.14,0,0,-4.9e+02,-0.0014,-0.0018,-9e-06,0,0,-0.0075,0,0,0,0,0,0,0,0,-4.9e+02,0.02,0.02,0.00023,1.2,1.2,0.11,0.2,0.2,0.11,0.0055,0.0055,0.01,0.04,0.04,0.038,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.58 +2290000,1,-0.011,-0.014,0.00038,0.038,-0.014,-0.14,0,0,-4.9e+02,-0.0014,-0.0018,-8.8e-06,0,0,-0.0097,0,0,0,0,0,0,0,0,-4.9e+02,0.022,0.022,0.00024,1.5,1.5,0.11,0.3,0.3,0.1,0.0055,0.0055,0.01,0.04,0.04,0.038,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.61 +2390000,1,-0.011,-0.013,0.0004,0.029,-0.0098,-0.14,0,0,-4.9e+02,-0.0017,-0.0023,-1.5e-05,0,0,-0.012,0,0,0,0,0,0,0,0,-4.9e+02,0.017,0.017,0.00025,1,1,0.1,0.19,0.19,0.098,0.0046,0.0046,0.01,0.04,0.04,0.037,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.63 +2490000,1,-0.011,-0.014,0.00047,0.033,-0.0088,-0.14,0,0,-4.9e+02,-0.0017,-0.0023,-1.5e-05,0,0,-0.013,0,0,0,0,0,0,0,0,-4.9e+02,0.018,0.018,0.00026,1.3,1.3,0.1,0.28,0.28,0.097,0.0046,0.0046,0.01,0.04,0.04,0.037,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.66 +2590000,1,-0.01,-0.013,0.00039,0.023,-0.0059,-0.15,0,0,-4.9e+02,-0.0018,-0.0027,-2e-05,0,0,-0.015,0,0,0,0,0,0,0,0,-4.9e+02,0.014,0.014,0.00028,0.89,0.89,0.099,0.18,0.18,0.094,0.0038,0.0038,0.01,0.04,0.04,0.036,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.68 +2690000,1,-0.01,-0.013,0.00043,0.027,-0.0051,-0.15,0,0,-4.9e+02,-0.0018,-0.0027,-2e-05,0,0,-0.018,0,0,0,0,0,0,0,0,-4.9e+02,0.015,0.015,0.00029,1.1,1.1,0.097,0.25,0.25,0.091,0.0038,0.0038,0.01,0.04,0.04,0.036,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.71 +2790000,1,-0.01,-0.013,0.00037,0.022,-0.0029,-0.14,0,0,-4.9e+02,-0.0019,-0.003,-2.5e-05,0,0,-0.022,0,0,0,0,0,0,0,0,-4.9e+02,0.011,0.011,0.0003,0.77,0.77,0.095,0.16,0.16,0.089,0.0032,0.0032,0.01,0.04,0.04,0.035,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.73 +2890000,1,-0.01,-0.013,0.0003,0.026,-0.0046,-0.14,0,0,-4.9e+02,-0.0019,-0.003,-2.5e-05,0,0,-0.025,0,0,0,0,0,0,0,0,-4.9e+02,0.013,0.013,0.00031,0.95,0.95,0.096,0.23,0.23,0.089,0.0032,0.0032,0.01,0.04,0.04,0.034,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.76 +2990000,1,-0.01,-0.013,0.00031,0.02,-0.0035,-0.15,0,0,-4.9e+02,-0.002,-0.0033,-3e-05,0,0,-0.028,0,0,0,0,0,0,0,0,-4.9e+02,0.0099,0.0099,0.00032,0.67,0.67,0.095,0.15,0.15,0.088,0.0027,0.0027,0.01,0.04,0.04,0.033,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.78 +3090000,1,-0.01,-0.013,0.00052,0.025,-0.0063,-0.15,0,0,-4.9e+02,-0.002,-0.0033,-3e-05,0,0,-0.031,0,0,0,0,0,0,0,0,-4.9e+02,0.011,0.011,0.00033,0.83,0.83,0.095,0.22,0.22,0.086,0.0027,0.0027,0.01,0.04,0.04,0.032,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.81 +3190000,1,-0.01,-0.013,0.00056,0.02,-0.0061,-0.15,0,0,-4.9e+02,-0.002,-0.0036,-3.3e-05,0,0,-0.032,0,0,0,0,0,0,0,0,-4.9e+02,0.0088,0.0088,0.00034,0.59,0.59,0.096,0.14,0.14,0.087,0.0023,0.0023,0.01,0.04,0.04,0.031,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.83 +3290000,1,-0.01,-0.013,0.00059,0.023,-0.0062,-0.15,0,0,-4.9e+02,-0.002,-0.0036,-3.3e-05,0,0,-0.034,0,0,0,0,0,0,0,0,-4.9e+02,0.0096,0.0096,0.00035,0.73,0.73,0.095,0.2,0.2,0.086,0.0023,0.0023,0.01,0.04,0.04,0.03,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.86 +3390000,1,-0.0098,-0.013,0.0006,0.019,-0.0032,-0.15,0,0,-4.9e+02,-0.0021,-0.0038,-3.6e-05,0,0,-0.039,0,0,0,0,0,0,0,0,-4.9e+02,0.0078,0.0078,0.00036,0.53,0.53,0.095,0.14,0.14,0.085,0.002,0.002,0.01,0.04,0.04,0.029,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.88 +3490000,1,-0.0097,-0.013,0.00058,0.025,-0.0018,-0.15,0,0,-4.9e+02,-0.0021,-0.0038,-3.6e-05,0,0,-0.044,0,0,0,0,0,0,0,0,-4.9e+02,0.0086,0.0086,0.00037,0.66,0.66,0.095,0.19,0.19,0.086,0.002,0.002,0.01,0.04,0.04,0.027,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.91 +3590000,1,-0.0095,-0.012,0.00054,0.021,-0.0014,-0.15,0,0,-4.9e+02,-0.0022,-0.004,-3.9e-05,0,0,-0.046,0,0,0,0,0,0,0,0,-4.9e+02,0.0071,0.0071,0.00038,0.49,0.49,0.094,0.13,0.13,0.086,0.0017,0.0017,0.01,0.04,0.04,0.026,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.93 +3690000,1,-0.0095,-0.013,0.00052,0.024,-0.00063,-0.15,0,0,-4.9e+02,-0.0022,-0.004,-3.9e-05,0,0,-0.051,0,0,0,0,0,0,0,0,-4.9e+02,0.0077,0.0077,0.00039,0.6,0.6,0.093,0.18,0.18,0.085,0.0017,0.0017,0.01,0.04,0.04,0.025,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.96 +3790000,1,-0.0094,-0.012,0.00055,0.019,0.0037,-0.15,0,0,-4.9e+02,-0.0022,-0.0043,-4.3e-05,0,0,-0.054,0,0,0,0,0,0,0,0,-4.9e+02,0.0064,0.0064,0.0004,0.45,0.45,0.093,0.12,0.12,0.086,0.0014,0.0014,0.01,0.04,0.04,0.024,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,0.98 +3890000,1,-0.0094,-0.013,0.00063,0.021,0.005,-0.14,0,0,-4.9e+02,-0.0022,-0.0042,-4.3e-05,0,0,-0.058,0,0,0,0,0,0,0,0,-4.9e+02,0.0069,0.0069,0.00041,0.55,0.55,0.091,0.17,0.17,0.086,0.0014,0.0014,0.01,0.04,0.04,0.022,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1 +3990000,1,-0.0094,-0.013,0.0007,0.026,0.0048,-0.14,0,0,-4.9e+02,-0.0022,-0.0042,-4.3e-05,0,0,-0.063,0,0,0,0,0,0,0,0,-4.9e+02,0.0075,0.0075,0.00042,0.66,0.66,0.089,0.23,0.23,0.085,0.0014,0.0014,0.01,0.04,0.04,0.021,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1 +4090000,1,-0.0093,-0.012,0.00076,0.022,0.0042,-0.12,0,0,-4.9e+02,-0.0022,-0.0044,-4.6e-05,0,0,-0.071,0,0,0,0,0,0,0,0,-4.9e+02,0.0062,0.0062,0.00043,0.5,0.5,0.087,0.16,0.16,0.085,0.0012,0.0012,0.01,0.04,0.04,0.02,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.1 +4190000,1,-0.0094,-0.012,0.00073,0.024,0.0039,-0.12,0,0,-4.9e+02,-0.0022,-0.0044,-4.6e-05,0,0,-0.074,0,0,0,0,0,0,0,0,-4.9e+02,0.0068,0.0068,0.00044,0.61,0.61,0.086,0.21,0.21,0.086,0.0012,0.0012,0.01,0.04,0.04,0.019,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.1 +4290000,1,-0.0095,-0.012,0.00074,0.021,0.0037,-0.13,0,0,-4.9e+02,-0.0021,-0.0046,-5e-05,0,0,-0.076,0,0,0,0,0,0,0,0,-4.9e+02,0.0056,0.0056,0.00045,0.47,0.47,0.084,0.15,0.15,0.085,0.00098,0.00098,0.01,0.04,0.04,0.017,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.1 +4390000,1,-0.0094,-0.012,0.00069,0.025,0.0023,-0.11,0,0,-4.9e+02,-0.0021,-0.0046,-4.9e-05,0,0,-0.083,0,0,0,0,0,0,0,0,-4.9e+02,0.006,0.006,0.00046,0.56,0.56,0.081,0.2,0.2,0.084,0.00098,0.00098,0.01,0.04,0.04,0.016,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.1 +4490000,1,-0.0094,-0.012,0.00076,0.021,0.004,-0.11,0,0,-4.9e+02,-0.0021,-0.0048,-5.2e-05,0,0,-0.086,0,0,0,0,0,0,0,0,-4.9e+02,0.005,0.005,0.00047,0.43,0.43,0.08,0.14,0.14,0.085,0.00081,0.00081,0.01,0.04,0.04,0.015,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.2 +4590000,1,-0.0094,-0.012,0.00082,0.023,0.0029,-0.11,0,0,-4.9e+02,-0.0021,-0.0048,-5.2e-05,0,0,-0.088,0,0,0,0,0,0,0,0,-4.9e+02,0.0054,0.0054,0.00048,0.52,0.52,0.077,0.19,0.19,0.084,0.00081,0.00081,0.01,0.04,0.04,0.014,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.2 +4690000,1,-0.0094,-0.012,0.00076,0.017,0.0031,-0.1,0,0,-4.9e+02,-0.0021,-0.005,-5.4e-05,0,0,-0.093,0,0,0,0,0,0,0,0,-4.9e+02,0.0044,0.0044,0.00049,0.4,0.4,0.074,0.14,0.14,0.083,0.00066,0.00066,0.01,0.04,0.04,0.013,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.2 +4790000,1,-0.0093,-0.012,0.00086,0.015,0.0053,-0.1,0,0,-4.9e+02,-0.0021,-0.005,-5.4e-05,0,0,-0.095,0,0,0,0,0,0,0,0,-4.9e+02,0.0047,0.0047,0.0005,0.47,0.47,0.073,0.18,0.18,0.084,0.00066,0.00066,0.01,0.04,0.04,0.012,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.2 +4890000,1,-0.0092,-0.012,0.0009,0.01,0.0028,-0.093,0,0,-4.9e+02,-0.0021,-0.0051,-5.5e-05,0,0,-0.099,0,0,0,0,0,0,0,0,-4.9e+02,0.0039,0.0039,0.00051,0.36,0.36,0.07,0.13,0.13,0.083,0.00054,0.00054,0.01,0.04,0.04,0.011,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.3 +4990000,1,-0.0092,-0.012,0.00088,0.013,0.0035,-0.085,0,0,-4.9e+02,-0.0021,-0.0051,-5.5e-05,0,0,-0.1,0,0,0,0,0,0,0,0,-4.9e+02,0.0042,0.0042,0.00052,0.43,0.43,0.067,0.17,0.17,0.082,0.00054,0.00054,0.01,0.04,0.04,0.011,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.3 +5090000,1,-0.0091,-0.011,0.00095,0.01,0.0038,-0.083,0,0,-4.9e+02,-0.002,-0.0052,-5.6e-05,0,0,-0.1,0,0,0,0,0,0,0,0,-4.9e+02,0.0034,0.0034,0.00053,0.33,0.33,0.065,0.12,0.12,0.082,0.00044,0.00043,0.01,0.04,0.04,0.0098,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.3 +5190000,1,-0.0089,-0.012,0.001,0.0099,0.0074,-0.08,0,0,-4.9e+02,-0.002,-0.0052,-5.6e-05,0,0,-0.11,0,0,0,0,0,0,0,0,-4.9e+02,0.0037,0.0037,0.00054,0.39,0.39,0.063,0.16,0.16,0.081,0.00044,0.00043,0.01,0.04,0.04,0.0091,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.3 +5290000,1,-0.0089,-0.011,0.0011,0.0082,0.0074,-0.069,0,0,-4.9e+02,-0.002,-0.0053,-5.6e-05,0,0,-0.11,0,0,0,0,0,0,0,0,-4.9e+02,0.003,0.003,0.00055,0.3,0.3,0.06,0.12,0.12,0.08,0.00035,0.00035,0.01,0.04,0.04,0.0084,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.4 +5390000,1,-0.0088,-0.011,0.0011,0.0077,0.011,-0.065,0,0,-4.9e+02,-0.002,-0.0053,-5.6e-05,0,0,-0.11,0,0,0,0,0,0,0,0,-4.9e+02,0.0032,0.0032,0.00056,0.36,0.36,0.057,0.16,0.16,0.079,0.00035,0.00035,0.01,0.04,0.04,0.0078,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.4 +5490000,1,-0.0088,-0.011,0.0011,0.0072,0.012,-0.061,0,0,-4.9e+02,-0.002,-0.0054,-5.6e-05,0,0,-0.11,0,0,0,0,0,0,0,0,-4.9e+02,0.0027,0.0027,0.00057,0.28,0.28,0.056,0.11,0.11,0.079,0.00029,0.00028,0.01,0.04,0.04,0.0073,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.4 +5590000,1,-0.0088,-0.012,0.00098,0.0083,0.016,-0.054,0,0,-4.9e+02,-0.002,-0.0054,-5.6e-05,0,0,-0.12,0,0,0,0,0,0,0,0,-4.9e+02,0.0028,0.0028,0.00058,0.33,0.33,0.053,0.15,0.15,0.078,0.00029,0.00028,0.01,0.04,0.04,0.0067,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.4 +5690000,1,-0.0089,-0.011,0.00089,0.0077,0.016,-0.053,0,0,-4.9e+02,-0.0019,-0.0054,-5.6e-05,0,0,-0.12,0,0,0,0,0,0,0,0,-4.9e+02,0.0024,0.0024,0.00059,0.25,0.25,0.051,0.11,0.11,0.076,0.00023,0.00023,0.01,0.04,0.04,0.0063,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.5 +5790000,1,-0.0087,-0.011,0.00084,0.0089,0.018,-0.05,0,0,-4.9e+02,-0.0019,-0.0054,-5.6e-05,0,0,-0.12,0,0,0,0,0,0,0,0,-4.9e+02,0.0025,0.0025,0.0006,0.3,0.3,0.05,0.14,0.14,0.077,0.00023,0.00023,0.01,0.04,0.04,0.0059,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.5 +5890000,1,-0.0088,-0.011,0.00087,0.0095,0.016,-0.048,0,0,-4.9e+02,-0.0019,-0.0055,-5.5e-05,0,0,-0.12,0,0,0,0,0,0,0,0,-4.9e+02,0.0021,0.0021,0.00061,0.23,0.23,0.047,0.1,0.1,0.075,0.00019,0.00019,0.01,0.04,0.04,0.0054,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.5 +5990000,1,-0.0088,-0.012,0.00085,0.011,0.017,-0.042,0,0,-4.9e+02,-0.0019,-0.0055,-5.5e-05,0,0,-0.12,0,0,0,0,0,0,0,0,-4.9e+02,0.0022,0.0022,0.00062,0.27,0.27,0.045,0.13,0.13,0.074,0.00019,0.00019,0.01,0.04,0.04,0.005,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.5 +6090000,1,-0.0087,-0.011,0.00066,0.011,0.018,-0.039,0,0,-4.9e+02,-0.0019,-0.0055,-5.5e-05,0,0,-0.12,0,0,0,0,0,0,0,0,-4.9e+02,0.0023,0.0023,0.00063,0.31,0.31,0.044,0.17,0.17,0.074,0.00019,0.00019,0.01,0.04,0.04,0.0047,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.6 +6190000,1,-0.0089,-0.011,0.00066,0.0087,0.017,-0.038,0,0,-4.9e+02,-0.0018,-0.0055,-5.4e-05,0,0,-0.12,0,0,0,0,0,0,0,0,-4.9e+02,0.002,0.002,0.00064,0.24,0.24,0.042,0.13,0.13,0.073,0.00015,0.00015,0.01,0.04,0.04,0.0044,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.6 +6290000,1,-0.0088,-0.011,0.00069,0.008,0.02,-0.041,0,0,-4.9e+02,-0.0018,-0.0055,-5.4e-05,0,0,-0.12,0,0,0,0,0,0,0,0,-4.9e+02,0.0021,0.0021,0.00065,0.28,0.28,0.04,0.16,0.16,0.072,0.00015,0.00015,0.01,0.04,0.04,0.0041,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.6 +6390000,1,-0.0089,-0.011,0.0007,0.0082,0.017,-0.042,0,0,-4.9e+02,-0.0017,-0.0056,-5.1e-05,0,0,-0.12,0,0,0,0,0,0,0,0,-4.9e+02,0.0017,0.0017,0.00066,0.22,0.22,0.039,0.12,0.12,0.072,0.00013,0.00012,0.01,0.04,0.04,0.0039,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.6 +6490000,1,-0.0088,-0.011,0.0006,0.0057,0.016,-0.04,0,0,-4.9e+02,-0.0017,-0.0056,-5.1e-05,0,0,-0.13,0,0,0,0,0,0,0,0,-4.9e+02,0.0018,0.0018,0.00067,0.25,0.25,0.038,0.15,0.15,0.07,0.00013,0.00012,0.01,0.04,0.04,0.0036,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.7 +6590000,1,-0.0089,-0.011,0.00053,0.0039,0.015,-0.042,0,0,-4.9e+02,-0.0017,-0.0056,-4.8e-05,0,0,-0.13,0,0,0,0,0,0,0,0,-4.9e+02,0.0016,0.0016,0.00068,0.2,0.2,0.036,0.12,0.12,0.069,0.0001,0.0001,0.01,0.04,0.04,0.0034,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.7 +6690000,1,-0.0088,-0.011,0.00048,0.0022,0.018,-0.044,0,0,-4.9e+02,-0.0017,-0.0056,-4.8e-05,0,0,-0.13,0,0,0,0,0,0,0,0,-4.9e+02,0.0016,0.0016,0.00069,0.23,0.23,0.035,0.14,0.14,0.068,0.0001,0.0001,0.01,0.04,0.04,0.0031,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.7 +6790000,1,-0.0089,-0.011,0.00045,0.0029,0.016,-0.043,0,0,-4.9e+02,-0.0016,-0.0056,-4.4e-05,0,0,-0.13,0,0,0,0,0,0,0,0,-4.9e+02,0.0014,0.0014,0.0007,0.18,0.18,0.034,0.11,0.11,0.068,8.7e-05,8.5e-05,0.01,0.04,0.04,0.003,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.7 +6890000,1,-0.0087,-0.011,0.00036,0.0023,0.016,-0.039,0,0,-4.9e+02,-0.0016,-0.0056,-4.4e-05,0,0,-0.13,0,0,0,0,0,0,0,0,-4.9e+02,0.0015,0.0015,0.00071,0.21,0.21,0.032,0.14,0.14,0.067,8.7e-05,8.5e-05,0.01,0.04,0.04,0.0028,0.0025,0.0025,0.0025,0.0025,0.0025,0.0025,1,1,1.8 +6990000,0.98,-0.0067,-0.012,0.18,-0.0032,0.013,-0.037,0,0,-4.9e+02,-0.0015,-0.0056,-4.7e-05,0,0,-0.13,0.2,-0.00047,0.44,0.00044,-0.00092,0.00033,0,0,-4.9e+02,0.0013,0.0012,0.056,0.16,0.16,0.031,0.097,0.097,0.066,7.2e-05,6.8e-05,0.01,0.04,0.04,0.0026,0.0015,0.0014,0.0015,0.0016,0.0018,0.0015,1,1,1.8 +7090000,0.98,-0.0065,-0.012,0.18,-0.0041,0.017,-0.038,0,0,-4.9e+02,-0.0016,-0.0057,0.00019,0,0,-0.13,0.2,-0.0001,0.44,-0.00021,-0.00026,0.00015,0,0,-4.9e+02,0.0013,0.0013,0.049,0.16,0.16,0.03,0.1,0.1,0.066,7.1e-05,6.8e-05,0.01,0.04,0.04,0.0024,0.0014,0.00071,0.0013,0.0014,0.0016,0.0013,1,1,1.8 +7190000,0.98,-0.0065,-0.012,0.18,-0.0046,0.019,-0.037,0,0,-4.9e+02,-0.0016,-0.0056,7.3e-05,-6e-05,2.8e-05,-0.13,0.2,-7.3e-05,0.43,-0.00016,-0.00034,-2.6e-05,0,0,-4.9e+02,0.0013,0.0013,0.046,0.16,0.16,0.029,0.11,0.11,0.065,7.1e-05,6.8e-05,0.0099,0.04,0.04,0.0023,0.0013,0.00046,0.0013,0.0014,0.0016,0.0013,1,1,1.8 +7290000,0.98,-0.0064,-0.012,0.18,-0.0041,0.023,-0.034,0,0,-4.9e+02,-0.0016,-0.0057,0.00052,-0.00029,0.00017,-0.13,0.2,-5.1e-05,0.43,-0.00035,-0.00026,5.4e-05,0,0,-4.9e+02,0.0014,0.0013,0.045,0.17,0.17,0.028,0.12,0.12,0.064,7.1e-05,6.7e-05,0.0097,0.04,0.04,0.0022,0.0013,0.00034,0.0013,0.0014,0.0016,0.0013,1,1,1.9 +7390000,0.98,-0.0063,-0.012,0.18,-0.0015,0.00094,-0.032,0,0,-4.9e+02,-0.0016,-0.0057,0.00068,-0.00035,0.00033,-0.13,0.2,-3.9e-05,0.43,-0.00045,-0.00022,8.2e-05,0,0,-4.9e+02,0.0014,0.0014,0.044,25,25,0.027,1e+02,1e+02,0.064,7.1e-05,6.7e-05,0.0095,0.04,0.04,0.002,0.0013,0.00028,0.0013,0.0014,0.0016,0.0013,1,1,1.9 +7490000,0.98,-0.0063,-0.012,0.18,0.00097,0.0034,-0.026,0,0,-4.9e+02,-0.0016,-0.0057,0.0018,-0.00035,0.00033,-0.13,0.2,-3.1e-05,0.43,-0.00038,-0.00022,-8.8e-05,0,0,-4.9e+02,0.0015,0.0014,0.044,25,25,0.026,1e+02,1e+02,0.063,7.1e-05,6.7e-05,0.0091,0.04,0.04,0.0019,0.0013,0.00023,0.0013,0.0014,0.0016,0.0013,1,1,1.9 +7590000,0.98,-0.0064,-0.012,0.18,0.0021,0.006,-0.023,0,0,-4.9e+02,-0.0015,-0.0057,0.0016,-0.00035,0.00033,-0.13,0.2,-2.6e-05,0.43,-0.0003,-0.00022,-1.5e-05,0,0,-4.9e+02,0.0015,0.0015,0.044,25,25,0.025,51,51,0.062,7.1e-05,6.7e-05,0.0086,0.04,0.04,0.0018,0.0013,0.00019,0.0013,0.0014,0.0016,0.0013,1,1,1.9 +7690000,0.98,-0.0064,-0.013,0.18,0.0021,0.0092,-0.022,0,0,-4.9e+02,-0.0015,-0.0056,0.0011,-0.00035,0.00033,-0.13,0.2,-2.3e-05,0.43,-0.00026,-0.00023,-1.6e-06,0,0,-4.9e+02,0.0016,0.0015,0.043,25,25,0.025,52,52,0.062,7.1e-05,6.6e-05,0.0081,0.04,0.04,0.0017,0.0013,0.00017,0.0013,0.0014,0.0016,0.0013,1,1,2 +7790000,0.98,-0.0064,-0.013,0.18,0.0057,0.01,-0.025,0,0,-4.9e+02,-0.0015,-0.0055,0.00033,-0.00035,0.00033,-0.13,0.2,-1.9e-05,0.43,-0.00016,-0.00022,-5.1e-06,0,0,-4.9e+02,0.0016,0.0016,0.043,24,24,0.024,35,35,0.061,7.1e-05,6.6e-05,0.0074,0.04,0.04,0.0016,0.0013,0.00015,0.0013,0.0014,0.0016,0.0013,1,1,2 +7890000,0.98,-0.0064,-0.013,0.18,0.0048,0.014,-0.025,0,0,-4.9e+02,-0.0015,-0.0055,-1.7e-05,-0.00035,0.00033,-0.13,0.2,-1.7e-05,0.43,-0.00014,-0.00022,4.3e-05,0,0,-4.9e+02,0.0017,0.0016,0.043,24,24,0.023,36,36,0.06,7.1e-05,6.5e-05,0.0067,0.04,0.04,0.0015,0.0013,0.00014,0.0013,0.0014,0.0016,0.0013,1,1,2 +7990000,0.98,-0.0063,-0.013,0.18,0.0033,0.017,-0.022,0,0,-4.9e+02,-0.0016,-0.0056,0.0001,-0.00035,0.00033,-0.13,0.2,-1.6e-05,0.43,-0.00015,-0.00025,7.5e-05,0,0,-4.9e+02,0.0017,0.0016,0.043,24,24,0.022,28,28,0.059,7.1e-05,6.4e-05,0.0061,0.04,0.04,0.0015,0.0013,0.00012,0.0013,0.0014,0.0016,0.0013,1,1,2 +8090000,0.98,-0.0062,-0.013,0.18,0.0047,0.02,-0.022,0,0,-4.9e+02,-0.0016,-0.0056,-0.0017,-0.00035,0.00033,-0.13,0.2,-1.4e-05,0.43,-0.00013,-0.00022,0.0001,0,0,-4.9e+02,0.0018,0.0017,0.044,24,24,0.022,30,30,0.059,7e-05,6.3e-05,0.0055,0.04,0.04,0.0014,0.0013,0.00011,0.0013,0.0014,0.0016,0.0013,1,1,2.1 +8190000,0.98,-0.0063,-0.013,0.18,0.006,0.024,-0.018,0,0,-4.9e+02,-0.0016,-0.0055,-0.0026,-0.00035,0.00033,-0.13,0.2,-1.1e-05,0.44,-0.0001,-0.00021,0.00015,0,0,-4.9e+02,0.0018,0.0017,0.044,23,23,0.021,24,24,0.058,7e-05,6.2e-05,0.0049,0.04,0.04,0.0013,0.0013,0.0001,0.0013,0.0014,0.0016,0.0013,1,1,2.1 +8290000,0.98,-0.0061,-0.012,0.18,0.0029,0.03,-0.017,0,0,-4.9e+02,-0.0016,-0.0057,-0.0024,-0.00035,0.00033,-0.13,0.2,-1.3e-05,0.43,-9.1e-05,-0.00022,7.9e-05,0,0,-4.9e+02,0.0019,0.0017,0.044,23,23,0.02,27,27,0.057,7e-05,6.1e-05,0.0043,0.04,0.04,0.0013,0.0013,9.7e-05,0.0013,0.0014,0.0016,0.0013,1,1,2.1 +8390000,0.98,-0.006,-0.012,0.18,-0.0012,0.031,-0.016,0,0,-4.9e+02,-0.0016,-0.0057,-0.0023,-0.00035,0.00033,-0.13,0.2,-1.3e-05,0.43,-9.5e-05,-0.00022,3.4e-05,0,0,-4.9e+02,0.0019,0.0018,0.044,21,21,0.02,23,23,0.057,7e-05,6e-05,0.0039,0.04,0.04,0.0012,0.0013,9.1e-05,0.0013,0.0014,0.0016,0.0013,1,1,2.1 +8490000,0.98,-0.0058,-0.012,0.18,-0.0053,0.036,-0.017,0,0,-4.9e+02,-0.0017,-0.0058,-0.00095,-0.00035,0.00033,-0.13,0.2,-1.4e-05,0.43,-8.3e-05,-0.00026,2.9e-06,0,0,-4.9e+02,0.002,0.0018,0.044,21,21,0.019,25,25,0.056,7e-05,5.9e-05,0.0035,0.04,0.04,0.0011,0.0013,8.5e-05,0.0013,0.0014,0.0016,0.0013,1,1,2.2 +8590000,0.98,-0.0059,-0.012,0.18,0.00074,0.036,-0.012,0,0,-4.9e+02,-0.0016,-0.0057,-0.0012,-0.00035,0.00033,-0.14,0.2,-1.2e-05,0.43,-0.00013,-0.00022,1.4e-05,0,0,-4.9e+02,0.0021,0.0018,0.044,19,19,0.018,22,22,0.055,6.9e-05,5.8e-05,0.0031,0.04,0.04,0.0011,0.0013,8e-05,0.0013,0.0014,0.0016,0.0013,1,1,2.2 +8690000,0.98,-0.0059,-0.012,0.18,-0.0012,0.039,-0.014,0,0,-4.9e+02,-0.0016,-0.0057,-0.00082,-0.00035,0.00033,-0.14,0.2,-1.2e-05,0.43,-0.00016,-0.00022,-7.7e-05,0,0,-4.9e+02,0.0021,0.0018,0.044,19,19,0.018,24,24,0.055,6.9e-05,5.6e-05,0.0028,0.04,0.04,0.001,0.0013,7.6e-05,0.0013,0.0014,0.0016,0.0013,1,1,2.2 +8790000,0.98,-0.0058,-0.012,0.18,-0.0034,0.042,-0.014,0,0,-4.9e+02,-0.0017,-0.0058,-0.0014,-0.00035,0.00033,-0.14,0.2,-1.1e-05,0.43,-0.00014,-0.00023,-0.00012,0,0,-4.9e+02,0.0022,0.0018,0.044,19,19,0.018,27,27,0.055,6.9e-05,5.5e-05,0.0025,0.04,0.04,0.00099,0.0013,7.2e-05,0.0013,0.0014,0.0016,0.0013,1,1,2.2 +8890000,0.98,-0.0059,-0.012,0.18,0.0016,0.042,-0.0094,0,0,-4.9e+02,-0.0016,-0.0057,-0.0005,-0.00035,0.00033,-0.14,0.2,-1e-05,0.43,-0.00021,-0.00021,-0.0001,0,0,-4.9e+02,0.0022,0.0018,0.044,17,17,0.017,24,24,0.054,6.8e-05,5.3e-05,0.0022,0.04,0.04,0.00094,0.0013,6.8e-05,0.0013,0.0014,0.0016,0.0013,1,1,2.3 +8990000,0.98,-0.006,-0.013,0.18,0.011,0.045,-0.0086,0,0,-4.9e+02,-0.0015,-0.0056,0.00047,-0.00035,0.00033,-0.14,0.2,-9.4e-06,0.43,-0.00031,-0.00016,-6.1e-05,0,0,-4.9e+02,0.0023,0.0019,0.045,17,17,0.017,27,27,0.054,6.8e-05,5.2e-05,0.002,0.04,0.04,0.00091,0.0013,6.5e-05,0.0013,0.0014,0.0016,0.0013,1,1,2.3 +9090000,0.98,-0.0058,-0.012,0.18,-0.0012,0.05,-0.0096,0,0,-4.9e+02,-0.0016,-0.0058,0.0013,-0.00035,0.00033,-0.14,0.2,-1e-05,0.43,-0.00021,-0.00027,-8.6e-05,0,0,-4.9e+02,0.0024,0.0018,0.045,15,15,0.016,24,24,0.053,6.8e-05,5e-05,0.0018,0.04,0.04,0.00087,0.0013,6.2e-05,0.0013,0.0014,0.0016,0.0013,1,1,2.3 +9190000,0.98,-0.0057,-0.012,0.18,0.0011,0.054,-0.009,0,0,-4.9e+02,-0.0016,-0.0058,0.0018,-0.00035,0.00033,-0.14,0.2,-1e-05,0.43,-0.00023,-0.00029,-0.00011,0,0,-4.9e+02,0.0024,0.0018,0.045,15,15,0.016,27,27,0.052,6.8e-05,4.9e-05,0.0017,0.04,0.04,0.00083,0.0013,5.9e-05,0.0013,0.0014,0.0016,0.0013,1,1,2.3 +9290000,0.98,-0.0057,-0.013,0.18,0.011,0.051,-0.0075,0,0,-4.9e+02,-0.0015,-0.0057,0.0017,-0.00035,0.00033,-0.14,0.2,-9.1e-06,0.43,-0.0003,-0.00023,-8.5e-05,0,0,-4.9e+02,0.0025,0.0018,0.045,13,13,0.015,24,24,0.052,6.7e-05,4.7e-05,0.0015,0.04,0.04,0.0008,0.0013,5.6e-05,0.0013,0.0014,0.0016,0.0013,1,1,2.4 +9390000,0.98,-0.0056,-0.013,0.18,0.013,0.053,-0.0063,0,0,-4.9e+02,-0.0015,-0.0056,0.00084,-0.00035,0.00033,-0.14,0.2,-8.5e-06,0.43,-0.00027,-0.00018,-3.4e-05,0,0,-4.9e+02,0.0026,0.0018,0.045,13,13,0.015,26,26,0.052,6.7e-05,4.6e-05,0.0014,0.04,0.04,0.00077,0.0013,5.4e-05,0.0013,0.0013,0.0016,0.0013,1,1,2.4 +9490000,0.98,-0.0056,-0.013,0.18,0.0075,0.053,-0.0046,0,0,-4.9e+02,-0.0016,-0.0057,0.00096,-0.00035,0.00033,-0.14,0.2,-8.4e-06,0.43,-0.00024,-0.00023,-7.4e-05,0,0,-4.9e+02,0.0026,0.0018,0.045,12,12,0.015,23,23,0.051,6.7e-05,4.4e-05,0.0013,0.04,0.04,0.00074,0.0013,5.2e-05,0.0013,0.0013,0.0015,0.0013,1,1,2.4 +9590000,0.98,-0.0057,-0.013,0.18,0.0091,0.054,-0.0045,0,0,-4.9e+02,-0.0016,-0.0057,-0.00032,-0.00035,0.00033,-0.14,0.2,-7.2e-06,0.43,-0.00026,-0.00019,-0.0001,0,0,-4.9e+02,0.0027,0.0018,0.046,12,12,0.014,26,26,0.05,6.6e-05,4.3e-05,0.0012,0.04,0.04,0.00071,0.0013,5e-05,0.0013,0.0013,0.0015,0.0013,1,1,2.4 +9690000,0.98,-0.0057,-0.013,0.18,0.012,0.052,-0.0016,0,0,-4.9e+02,-0.0016,-0.0056,-0.00062,-0.00035,0.00033,-0.14,0.2,-6.7e-06,0.43,-0.00028,-0.00017,-8.3e-05,0,0,-4.9e+02,0.0028,0.0018,0.046,10,10,0.014,23,23,0.05,6.6e-05,4.1e-05,0.0011,0.04,0.04,0.00068,0.0013,4.9e-05,0.0013,0.0013,0.0015,0.0013,1,1,2.5 +9790000,0.98,-0.0056,-0.012,0.18,0.0057,0.057,-0.003,0,0,-4.9e+02,-0.0016,-0.0057,-0.0016,-0.00035,0.00033,-0.14,0.2,-6.4e-06,0.43,-0.00022,-0.00018,-0.00011,0,0,-4.9e+02,0.0029,0.0018,0.046,10,10,0.014,25,25,0.05,6.6e-05,4e-05,0.001,0.04,0.04,0.00066,0.0013,4.7e-05,0.0013,0.0013,0.0015,0.0013,1,1,2.5 +9890000,0.98,-0.0056,-0.013,0.18,0.013,0.054,-0.0016,0,0,-4.9e+02,-0.0016,-0.0056,-0.0013,-0.00035,0.00033,-0.14,0.2,-5.9e-06,0.43,-0.00025,-0.00017,-6.5e-05,0,0,-4.9e+02,0.0029,0.0017,0.046,8.6,8.8,0.013,22,22,0.049,6.6e-05,3.8e-05,0.00095,0.04,0.04,0.00063,0.0013,4.5e-05,0.0013,0.0013,0.0015,0.0013,1,1,2.5 +9990000,0.98,-0.0055,-0.012,0.18,0.009,0.058,-0.00094,0,0,-4.9e+02,-0.0016,-0.0057,-0.0019,-0.00035,0.00033,-0.14,0.2,-5.8e-06,0.43,-0.00021,-0.00017,-8.3e-05,0,0,-4.9e+02,0.003,0.0017,0.046,8.6,8.9,0.013,24,24,0.049,6.5e-05,3.7e-05,0.0009,0.04,0.04,0.00061,0.0013,4.4e-05,0.0013,0.0013,0.0015,0.0013,1,1,2.5 +10090000,0.98,-0.0055,-0.013,0.18,0.0095,0.053,0.00028,0,0,-4.9e+02,-0.0016,-0.0056,-0.0025,-0.00035,0.00033,-0.14,0.2,-5.1e-06,0.43,-0.00025,-0.00013,-7.4e-05,0,0,-4.9e+02,0.0031,0.0017,0.047,7.4,7.7,0.013,21,21,0.048,6.5e-05,3.5e-05,0.00085,0.04,0.04,0.00059,0.0013,4.2e-05,0.0013,0.0013,0.0015,0.0013,1,1,2.6 +10190000,0.98,-0.0056,-0.013,0.18,0.018,0.054,0.0012,0,0,-4.9e+02,-0.0016,-0.0055,-0.0031,-0.00035,0.00033,-0.14,0.2,-4e-06,0.43,-0.00035,-7.8e-05,-4.6e-05,0,0,-4.9e+02,0.0032,0.0017,0.047,7.5,7.8,0.012,23,23,0.048,6.5e-05,3.4e-05,0.0008,0.04,0.04,0.00057,0.0013,4.1e-05,0.0013,0.0013,0.0015,0.0013,1,1,2.6 +10290000,0.98,-0.0057,-0.013,0.18,0.023,0.052,0.00011,0,0,-4.9e+02,-0.0016,-0.0055,-0.0026,-0.00035,0.00033,-0.14,0.2,-3.7e-06,0.43,-0.00039,-8.2e-05,-2.9e-05,0,0,-4.9e+02,0.0032,0.0016,0.047,6.4,6.8,0.012,20,20,0.048,6.4e-05,3.3e-05,0.00076,0.04,0.04,0.00055,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,2.6 +10390000,0.98,-0.0059,-0.013,0.18,0.0087,0.0064,-0.0024,0,0,-4.9e+02,-0.0015,-0.0055,-0.0022,-0.00033,0.00026,-0.14,0.2,-3e-06,0.43,-0.00038,-7.1e-05,6.6e-06,0,0,-4.9e+02,0.003,0.0016,0.047,0.24,0.25,0.012,0.5,0.5,0.047,5.9e-05,3e-05,0.0007,0.04,0.04,0.00053,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,2.6 +10490000,0.98,-0.0058,-0.013,0.18,0.011,0.0082,0.00041,0,0,-4.9e+02,-0.0015,-0.0055,-0.0025,-0.00032,0.00029,-0.14,0.2,-2.8e-06,0.43,-0.0004,-5.1e-05,4e-06,0,0,-4.9e+02,0.0031,0.0015,0.047,0.25,0.26,0.012,0.51,0.51,0.046,5.9e-05,2.9e-05,0.00066,0.04,0.04,0.00051,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,2.7 +10590000,0.98,-0.0058,-0.013,0.18,0.0017,0.0053,0.00091,0,0,-4.9e+02,-0.0015,-0.0055,-0.002,-0.0003,5.4e-05,-0.14,0.2,-2.7e-06,0.43,-0.00036,-6.4e-05,-4.8e-07,0,0,-4.9e+02,0.0031,0.0015,0.047,0.13,0.13,0.011,0.17,0.17,0.045,5.7e-05,2.7e-05,0.00062,0.04,0.04,0.00049,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,2.7 +10690000,0.98,-0.0058,-0.013,0.18,0.0051,0.0057,0.002,0,0,-4.9e+02,-0.0015,-0.0054,-0.0021,-0.00026,8.9e-06,-0.14,0.2,-2.5e-06,0.43,-0.00041,-3.5e-05,7.2e-06,0,0,-4.9e+02,0.0032,0.0015,0.047,0.13,0.15,0.011,0.17,0.18,0.045,5.6e-05,2.7e-05,0.0006,0.04,0.04,0.00048,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,2.7 +10790000,0.98,-0.006,-0.013,0.18,0.0074,0.0015,0.0031,0,0,-4.9e+02,-0.0014,-0.0054,-0.0019,-8.8e-05,-0.0002,-0.14,0.2,-2e-06,0.43,-0.00045,3.3e-05,-1.5e-05,0,0,-4.9e+02,0.003,0.0014,0.047,0.091,0.1,0.011,0.11,0.11,0.044,5.3e-05,2.5e-05,0.00055,0.04,0.04,0.00046,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,2.7 +10890000,0.98,-0.006,-0.013,0.18,0.0096,0.0042,0.0026,0,0,-4.9e+02,-0.0014,-0.0054,-0.0013,-6.5e-05,-0.00029,-0.14,0.2,-2.2e-06,0.43,-0.00047,2.9e-05,-1.2e-05,0,0,-4.9e+02,0.0031,0.0014,0.047,0.097,0.12,0.01,0.11,0.11,0.044,5.2e-05,2.4e-05,0.00053,0.04,0.04,0.00044,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,2.8 +10990000,0.98,-0.006,-0.013,0.18,0.0069,0.01,0.004,0,0,-4.9e+02,-0.0014,-0.0055,-0.0014,-9e-05,-0.00031,-0.14,0.2,-2.1e-06,0.43,-0.00041,-6.3e-06,-5.7e-05,0,0,-4.9e+02,0.0029,0.0014,0.046,0.075,0.096,0.01,0.079,0.079,0.043,4.7e-05,2.2e-05,0.00048,0.04,0.04,0.00043,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,2.8 +11090000,0.98,-0.0062,-0.013,0.18,0.012,0.014,0.0064,0,0,-4.9e+02,-0.0014,-0.0054,-0.0018,-6.6e-05,-0.00038,-0.14,0.2,-1.6e-06,0.43,-0.00044,3.7e-05,-2.8e-05,0,0,-4.9e+02,0.0029,0.0013,0.047,0.082,0.12,0.01,0.084,0.086,0.043,4.6e-05,2.1e-05,0.00046,0.04,0.04,0.00042,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,2.8 +11190000,0.98,-0.0064,-0.013,0.18,0.01,0.014,0.0096,0,0,-4.9e+02,-0.0013,-0.0055,-0.0018,6.3e-05,-0.00036,-0.14,0.2,-1.1e-06,0.43,-0.00036,2.7e-05,-3.5e-05,0,0,-4.9e+02,0.0026,0.0013,0.045,0.067,0.095,0.0097,0.065,0.066,0.042,3.9e-05,1.9e-05,0.00041,0.04,0.04,0.0004,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,2.8 +11290000,0.98,-0.0063,-0.013,0.18,0.0094,0.015,0.011,0,0,-4.9e+02,-0.0014,-0.0056,-0.0019,3.3e-05,-0.00018,-0.14,0.2,-1.3e-06,0.43,-0.00031,-1.2e-05,-6e-05,0,0,-4.9e+02,0.0026,0.0012,0.046,0.075,0.12,0.0096,0.071,0.073,0.042,3.9e-05,1.8e-05,0.0004,0.04,0.04,0.0004,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,2.9 +11390000,0.98,-0.0065,-0.013,0.18,0.0068,0.013,0.0085,0,0,-4.9e+02,-0.0013,-0.0056,-0.0017,0.0002,-0.00043,-0.14,0.2,-6.8e-07,0.43,-0.00026,1.4e-05,-9.2e-05,0,0,-4.9e+02,0.0022,0.0012,0.044,0.063,0.094,0.0093,0.058,0.059,0.042,3.2e-05,1.6e-05,0.00035,0.04,0.039,0.00038,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,2.9 +11490000,0.98,-0.0064,-0.013,0.18,0.0078,0.014,0.011,0,0,-4.9e+02,-0.0013,-0.0056,-0.0016,0.0002,-0.00054,-0.14,0.2,-6.6e-07,0.43,-0.00028,3.3e-05,-8.4e-05,0,0,-4.9e+02,0.0023,0.0011,0.045,0.071,0.12,0.0092,0.064,0.067,0.041,3.2e-05,1.5e-05,0.00033,0.04,0.039,0.00037,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,2.9 +11590000,0.98,-0.0067,-0.013,0.18,0.0068,0.011,0.012,0,0,-4.9e+02,-0.0012,-0.0057,-0.0014,0.00033,-0.00055,-0.14,0.2,-1.3e-07,0.43,-0.00021,1.6e-05,-0.00011,0,0,-4.9e+02,0.0019,0.0011,0.043,0.06,0.093,0.009,0.053,0.055,0.041,2.5e-05,1.3e-05,0.00029,0.04,0.039,0.00036,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,2.9 +11690000,0.98,-0.0066,-0.012,0.18,0.0065,0.015,0.014,0,0,-4.9e+02,-0.0012,-0.0057,-0.0013,0.00034,-0.00043,-0.14,0.2,-3.7e-07,0.43,-0.00021,1.7e-06,-0.00013,0,0,-4.9e+02,0.0019,0.0011,0.044,0.069,0.11,0.0089,0.059,0.063,0.041,2.5e-05,1.3e-05,0.00028,0.04,0.039,0.00035,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3 +11790000,0.98,-0.007,-0.012,0.18,0.0041,0.0093,0.015,0,0,-4.9e+02,-0.0011,-0.0058,-0.00083,0.00057,-0.00062,-0.14,0.2,2.8e-07,0.43,-0.00019,2.7e-05,-0.00015,0,0,-4.9e+02,0.0016,0.00097,0.042,0.058,0.089,0.0087,0.05,0.052,0.04,2e-05,1.1e-05,0.00024,0.04,0.039,0.00034,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3 +11890000,0.98,-0.0071,-0.012,0.18,0.0058,0.011,0.013,0,0,-4.9e+02,-0.0012,-0.0058,-0.00096,0.00058,-0.00042,-0.14,0.2,3.3e-07,0.43,-0.00017,7.5e-06,-0.00018,0,0,-4.9e+02,0.0016,0.00096,0.043,0.066,0.11,0.0086,0.056,0.061,0.04,2e-05,1e-05,0.00023,0.04,0.039,0.00034,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3 +11990000,0.98,-0.0072,-0.012,0.18,0.0082,0.011,0.013,0,0,-4.9e+02,-0.0011,-0.0058,-0.00089,0.00064,-0.00035,-0.14,0.2,3.3e-07,0.43,-0.00018,1.8e-05,-0.00018,0,0,-4.9e+02,0.0013,0.00089,0.042,0.057,0.085,0.0084,0.048,0.051,0.04,1.6e-05,8.8e-06,0.00021,0.04,0.039,0.00033,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3 +12090000,0.98,-0.0072,-0.012,0.18,0.012,0.011,0.015,0,0,-4.9e+02,-0.0011,-0.0058,-0.00095,0.0006,-0.00062,-0.14,0.2,4.5e-07,0.43,-0.00018,5.6e-05,-0.00017,0,0,-4.9e+02,0.0014,0.00089,0.042,0.064,0.1,0.0084,0.055,0.059,0.039,1.6e-05,8.6e-06,0.0002,0.04,0.039,0.00032,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.1 +12190000,0.98,-0.0072,-0.012,0.18,0.013,0.0095,0.014,0,0,-4.9e+02,-0.0011,-0.0057,-0.0011,0.00048,-0.0014,-0.14,0.2,8.1e-07,0.43,-0.00015,0.00011,-0.00019,0,0,-4.9e+02,0.0012,0.00082,0.041,0.055,0.08,0.0082,0.047,0.05,0.039,1.2e-05,7.3e-06,0.00018,0.04,0.038,0.00031,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.1 +12290000,0.98,-0.0072,-0.012,0.18,0.01,0.0088,0.013,0,0,-4.9e+02,-0.0011,-0.0058,-0.0012,0.00049,-0.0012,-0.14,0.2,9.1e-07,0.43,-0.00014,9e-05,-0.00019,0,0,-4.9e+02,0.0012,0.00082,0.041,0.062,0.094,0.0081,0.054,0.058,0.039,1.2e-05,7.2e-06,0.00017,0.04,0.038,0.00031,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.1 +12390000,0.98,-0.0074,-0.012,0.18,0.0098,0.0056,0.014,0,0,-4.9e+02,-0.0011,-0.0058,-0.0012,0.00044,-0.0018,-0.14,0.2,1.3e-06,0.43,-0.0001,0.00013,-0.0002,0,0,-4.9e+02,0.001,0.00076,0.041,0.053,0.074,0.008,0.047,0.049,0.038,9.9e-06,6.1e-06,0.00015,0.04,0.038,0.0003,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.1 +12490000,0.98,-0.0074,-0.012,0.18,0.012,0.0062,0.018,0,0,-4.9e+02,-0.0011,-0.0057,-0.0012,0.0004,-0.002,-0.14,0.2,1.4e-06,0.43,-0.0001,0.00016,-0.00021,0,0,-4.9e+02,0.001,0.00076,0.041,0.06,0.087,0.0079,0.053,0.058,0.038,9.9e-06,6e-06,0.00014,0.04,0.038,0.0003,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.2 +12590000,0.98,-0.0076,-0.012,0.18,0.013,0.00018,0.019,0,0,-4.9e+02,-0.0011,-0.0058,-0.0012,0.00045,-0.002,-0.14,0.2,1.7e-06,0.43,-8.5e-05,0.00017,-0.00022,0,0,-4.9e+02,0.00088,0.00071,0.04,0.051,0.069,0.0078,0.046,0.049,0.038,8.1e-06,5.2e-06,0.00013,0.04,0.038,0.00029,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.2 +12690000,0.98,-0.0075,-0.012,0.18,0.014,-0.0021,0.019,0,0,-4.9e+02,-0.0011,-0.0058,-0.0012,0.00046,-0.0019,-0.14,0.2,1.7e-06,0.43,-8.4e-05,0.00018,-0.00022,0,0,-4.9e+02,0.0009,0.00071,0.04,0.057,0.08,0.0077,0.053,0.057,0.038,8.1e-06,5.1e-06,0.00013,0.04,0.038,0.00028,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.2 +12790000,0.98,-0.0078,-0.012,0.18,0.015,-0.0051,0.02,0,0,-4.9e+02,-0.001,-0.0058,-0.00088,0.00044,-0.0024,-0.14,0.2,1.8e-06,0.43,-8.9e-05,0.00022,-0.00021,0,0,-4.9e+02,0.00079,0.00067,0.04,0.049,0.065,0.0076,0.046,0.048,0.037,6.7e-06,4.4e-06,0.00011,0.04,0.038,0.00028,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.2 +12890000,0.98,-0.0078,-0.012,0.18,0.017,-0.0062,0.021,0,0,-4.9e+02,-0.001,-0.0058,-0.00073,0.00043,-0.0025,-0.14,0.2,1.7e-06,0.43,-0.0001,0.00023,-0.0002,0,0,-4.9e+02,0.0008,0.00067,0.04,0.054,0.074,0.0076,0.052,0.057,0.038,6.7e-06,4.4e-06,0.00011,0.04,0.038,0.00027,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.3 +12990000,0.98,-0.0078,-0.012,0.18,0.014,-0.004,0.022,0,0,-4.9e+02,-0.001,-0.0058,-0.00062,0.0004,-0.0026,-0.14,0.2,1.4e-06,0.43,-9.7e-05,0.00019,-0.00022,0,0,-4.9e+02,0.00072,0.00063,0.04,0.046,0.06,0.0074,0.046,0.048,0.037,5.6e-06,3.8e-06,0.0001,0.04,0.037,0.00027,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.3 +13090000,0.98,-0.0078,-0.012,0.18,0.015,-0.0041,0.02,0,0,-4.9e+02,-0.001,-0.0058,-0.00045,0.00039,-0.0028,-0.14,0.2,1.2e-06,0.43,-0.00012,0.0002,-0.00021,0,0,-4.9e+02,0.00073,0.00063,0.04,0.052,0.068,0.0074,0.052,0.056,0.037,5.6e-06,3.8e-06,9.7e-05,0.04,0.037,0.00026,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.3 +13190000,0.98,-0.0078,-0.012,0.18,0.01,-0.0056,0.019,0,0,-4.9e+02,-0.001,-0.0058,-0.00033,0.00031,-0.0032,-0.14,0.2,1.2e-06,0.43,-9.2e-05,0.00019,-0.00023,0,0,-4.9e+02,0.00066,0.0006,0.039,0.044,0.056,0.0073,0.046,0.048,0.036,4.8e-06,3.3e-06,9e-05,0.04,0.037,0.00026,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.3 +13290000,0.98,-0.0079,-0.012,0.18,0.012,-0.0067,0.017,0,0,-4.9e+02,-0.001,-0.0058,-0.00036,0.00022,-0.0038,-0.14,0.2,1.3e-06,0.43,-7.8e-05,0.00023,-0.00022,0,0,-4.9e+02,0.00067,0.0006,0.039,0.049,0.063,0.0073,0.052,0.056,0.037,4.8e-06,3.3e-06,8.6e-05,0.04,0.037,0.00025,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.4 +13390000,0.98,-0.0078,-0.012,0.18,0.0098,-0.0046,0.017,0,0,-4.9e+02,-0.001,-0.0058,-0.00048,0.0002,-0.0039,-0.14,0.2,1.2e-06,0.43,-5.4e-05,0.00022,-0.00025,0,0,-4.9e+02,0.00062,0.00058,0.039,0.042,0.052,0.0071,0.045,0.048,0.036,4.2e-06,3e-06,8e-05,0.04,0.037,0.00025,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.4 +13490000,0.98,-0.0078,-0.012,0.18,0.012,-0.0032,0.017,0,0,-4.9e+02,-0.001,-0.0058,-0.00046,0.00012,-0.0044,-0.14,0.2,1.2e-06,0.43,-4.7e-05,0.00026,-0.00026,0,0,-4.9e+02,0.00062,0.00058,0.039,0.047,0.059,0.0071,0.052,0.056,0.036,4.2e-06,2.9e-06,7.7e-05,0.04,0.037,0.00025,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.4 +13590000,0.98,-0.0078,-0.012,0.18,0.015,-0.0032,0.018,0,0,-4.9e+02,-0.001,-0.0058,-0.00054,9.9e-05,-0.0045,-0.14,0.2,1.3e-06,0.43,-4.5e-05,0.00026,-0.00024,0,0,-4.9e+02,0.00058,0.00055,0.039,0.04,0.049,0.007,0.045,0.048,0.036,3.7e-06,2.7e-06,7.2e-05,0.04,0.037,0.00024,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.4 +13690000,0.98,-0.0078,-0.012,0.18,0.015,-0.0046,0.018,0,0,-4.9e+02,-0.001,-0.0058,-0.00045,0.00015,-0.0042,-0.14,0.2,1.3e-06,0.43,-5.7e-05,0.00023,-0.00023,0,0,-4.9e+02,0.00059,0.00056,0.039,0.044,0.055,0.007,0.052,0.055,0.036,3.7e-06,2.6e-06,6.9e-05,0.04,0.036,0.00024,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.5 +13790000,0.98,-0.0077,-0.012,0.18,0.02,-0.00039,0.018,0,0,-4.9e+02,-0.0011,-0.0058,-0.00056,0.0003,-0.0038,-0.14,0.2,1.2e-06,0.43,-7.6e-05,0.00021,-0.00022,0,0,-4.9e+02,0.00055,0.00054,0.039,0.038,0.046,0.0069,0.045,0.047,0.036,3.3e-06,2.4e-06,6.5e-05,0.04,0.036,0.00023,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.5 +13890000,0.98,-0.0075,-0.012,0.18,0.02,0.00038,0.019,0,0,-4.9e+02,-0.0011,-0.0058,-0.00044,0.00041,-0.0031,-0.14,0.2,9.5e-07,0.43,-9.4e-05,0.00018,-0.00023,0,0,-4.9e+02,0.00056,0.00054,0.039,0.042,0.051,0.0069,0.051,0.055,0.036,3.3e-06,2.4e-06,6.3e-05,0.04,0.036,0.00023,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.5 +13990000,0.98,-0.0076,-0.012,0.18,0.02,0.00078,0.018,0,0,-4.9e+02,-0.001,-0.0058,-0.0003,0.00028,-0.0035,-0.14,0.2,9.6e-07,0.43,-7.6e-05,0.00017,-0.00022,0,0,-4.9e+02,0.00053,0.00052,0.039,0.036,0.043,0.0068,0.045,0.047,0.035,3e-06,2.2e-06,5.9e-05,0.04,0.036,0.00023,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.5 +14090000,0.98,-0.0076,-0.012,0.18,0.018,-0.0037,0.019,0,0,-4.9e+02,-0.0011,-0.0058,-0.00059,0.00025,-0.0035,-0.14,0.2,1.3e-06,0.43,-5.4e-05,0.00019,-0.00022,0,0,-4.9e+02,0.00053,0.00052,0.039,0.04,0.048,0.0068,0.051,0.054,0.035,3e-06,2.2e-06,5.7e-05,0.04,0.036,0.00022,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.6 +14190000,0.98,-0.0077,-0.012,0.18,0.016,-0.0026,0.019,0,0,-4.9e+02,-0.0011,-0.0058,-0.00072,5.8e-05,-0.0048,-0.14,0.2,1.6e-06,0.43,-1.9e-05,0.00024,-0.00022,0,0,-4.9e+02,0.00051,0.00051,0.039,0.034,0.04,0.0067,0.045,0.047,0.035,2.7e-06,2e-06,5.4e-05,0.04,0.036,0.00022,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.6 +14290000,0.98,-0.0076,-0.012,0.18,0.019,-0.0027,0.017,0,0,-4.9e+02,-0.0011,-0.0058,-0.00071,2.3e-05,-0.0051,-0.14,0.2,1.6e-06,0.43,-1.7e-05,0.00024,-0.00022,0,0,-4.9e+02,0.00051,0.00051,0.039,0.038,0.045,0.0067,0.051,0.054,0.035,2.7e-06,2e-06,5.2e-05,0.04,0.036,0.00022,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.6 +14390000,0.98,-0.0077,-0.012,0.18,0.019,-0.0055,0.018,0,0,-4.9e+02,-0.001,-0.0058,-0.00062,-0.00015,-0.0058,-0.14,0.2,1.8e-06,0.43,3.9e-06,0.00024,-0.00022,0,0,-4.9e+02,0.00049,0.0005,0.039,0.033,0.038,0.0066,0.045,0.047,0.035,2.5e-06,1.9e-06,4.9e-05,0.039,0.035,0.00022,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.6 +14490000,0.98,-0.0079,-0.012,0.18,0.019,-0.0053,0.022,0,0,-4.9e+02,-0.001,-0.0058,-0.00075,-0.00019,-0.0061,-0.14,0.2,2e-06,0.43,6.3e-06,0.00026,-0.00021,0,0,-4.9e+02,0.00049,0.0005,0.039,0.036,0.042,0.0066,0.051,0.053,0.035,2.5e-06,1.8e-06,4.7e-05,0.039,0.035,0.00021,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.7 +14590000,0.98,-0.008,-0.011,0.18,0.018,-0.0053,0.019,0,0,-4.9e+02,-0.001,-0.0058,-0.00076,-0.00045,-0.0073,-0.14,0.2,2.1e-06,0.43,5e-05,0.00028,-0.00022,0,0,-4.9e+02,0.00048,0.00049,0.039,0.031,0.036,0.0065,0.045,0.046,0.035,2.3e-06,1.7e-06,4.5e-05,0.039,0.035,0.00021,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.7 +14690000,0.98,-0.008,-0.012,0.18,0.018,-0.0054,0.019,0,0,-4.9e+02,-0.001,-0.0058,-0.00071,-0.00052,-0.0077,-0.14,0.2,2.2e-06,0.43,5.8e-05,0.00029,-0.00021,0,0,-4.9e+02,0.00048,0.00049,0.039,0.034,0.039,0.0065,0.05,0.053,0.034,2.3e-06,1.7e-06,4.4e-05,0.039,0.035,0.00021,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.7 +14790000,0.98,-0.0081,-0.012,0.18,0.02,0.0004,0.019,0,0,-4.9e+02,-0.0011,-0.0058,-0.00061,-0.00037,-0.009,-0.14,0.2,2e-06,0.43,7.5e-05,0.00028,-0.0002,0,0,-4.9e+02,0.00046,0.00048,0.039,0.029,0.034,0.0064,0.044,0.046,0.034,2.1e-06,1.6e-06,4.1e-05,0.039,0.035,0.0002,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.7 +14890000,0.98,-0.0081,-0.012,0.18,0.021,-0.0023,0.023,0,0,-4.9e+02,-0.001,-0.0058,-0.00051,-0.00062,-0.011,-0.14,0.2,2.3e-06,0.43,9.5e-05,0.00032,-0.00018,0,0,-4.9e+02,0.00047,0.00048,0.039,0.032,0.037,0.0064,0.05,0.052,0.034,2.1e-06,1.6e-06,4e-05,0.039,0.035,0.0002,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.8 +14990000,0.98,-0.0083,-0.011,0.18,0.021,-0.0034,0.026,0,0,-4.9e+02,-0.001,-0.0058,-0.00043,-0.00099,-0.012,-0.14,0.2,2.4e-06,0.43,0.00014,0.00035,-0.00017,0,0,-4.9e+02,0.00045,0.00048,0.039,0.028,0.032,0.0063,0.044,0.046,0.034,2e-06,1.5e-06,3.8e-05,0.039,0.035,0.0002,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.8 +15090000,0.98,-0.0083,-0.012,0.18,0.022,-0.0025,0.029,0,0,-4.9e+02,-0.001,-0.0058,-0.00043,-0.001,-0.012,-0.14,0.2,2.4e-06,0.43,0.00014,0.00036,-0.00017,0,0,-4.9e+02,0.00045,0.00048,0.039,0.03,0.035,0.0063,0.05,0.052,0.034,2e-06,1.5e-06,3.7e-05,0.039,0.035,0.0002,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.8 +15190000,0.98,-0.0085,-0.012,0.18,0.02,-0.0035,0.03,0,0,-4.9e+02,-0.001,-0.0058,-0.00046,-0.0011,-0.013,-0.14,0.2,2.5e-06,0.43,0.00017,0.00037,-0.00017,0,0,-4.9e+02,0.00044,0.00047,0.038,0.027,0.031,0.0063,0.044,0.045,0.034,1.9e-06,1.4e-06,3.6e-05,0.039,0.034,0.00019,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.8 +15290000,0.98,-0.0087,-0.012,0.18,0.023,-0.0047,0.029,0,0,-4.9e+02,-0.001,-0.0058,-0.00036,-0.0014,-0.015,-0.14,0.2,2.5e-06,0.43,0.00019,0.00042,-0.00016,0,0,-4.9e+02,0.00044,0.00047,0.038,0.029,0.033,0.0063,0.049,0.052,0.034,1.9e-06,1.4e-06,3.4e-05,0.039,0.034,0.00019,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.9 +15390000,0.98,-0.0088,-0.012,0.18,0.022,-0.0023,0.029,0,0,-4.9e+02,-0.001,-0.0058,-0.00038,-0.0014,-0.015,-0.14,0.2,2.3e-06,0.43,0.00022,0.00043,-0.00017,0,0,-4.9e+02,0.00044,0.00047,0.038,0.026,0.029,0.0062,0.044,0.045,0.034,1.8e-06,1.4e-06,3.3e-05,0.039,0.034,0.00019,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.9 +15490000,0.98,-0.0088,-0.012,0.18,0.023,-0.0049,0.028,0,0,-4.9e+02,-0.001,-0.0058,-0.00037,-0.0014,-0.015,-0.14,0.2,2.2e-06,0.43,0.00022,0.00044,-0.00017,0,0,-4.9e+02,0.00044,0.00047,0.038,0.028,0.032,0.0062,0.049,0.051,0.034,1.8e-06,1.3e-06,3.2e-05,0.039,0.034,0.00019,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.9 +15590000,0.98,-0.0089,-0.012,0.18,0.023,-0.0072,0.028,0,0,-4.9e+02,-0.001,-0.0058,-0.00029,-0.0018,-0.015,-0.14,0.2,2.2e-06,0.43,0.00023,0.00042,-0.00018,0,0,-4.9e+02,0.00043,0.00046,0.038,0.024,0.028,0.0061,0.043,0.045,0.033,1.7e-06,1.3e-06,3.1e-05,0.039,0.034,0.00019,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,3.9 +15690000,0.98,-0.0087,-0.012,0.18,0.024,-0.01,0.028,0,0,-4.9e+02,-0.001,-0.0058,-0.00021,-0.0014,-0.013,-0.14,0.2,1.9e-06,0.43,0.00018,0.00032,-0.00018,0,0,-4.9e+02,0.00043,0.00046,0.038,0.026,0.03,0.0061,0.049,0.051,0.033,1.7e-06,1.3e-06,3e-05,0.039,0.034,0.00018,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4 +15790000,0.98,-0.0087,-0.011,0.18,0.02,-0.0098,0.028,0,0,-4.9e+02,-0.001,-0.0058,-0.00012,-0.0011,-0.012,-0.14,0.2,1.3e-06,0.43,0.00017,0.00028,-0.00019,0,0,-4.9e+02,0.00042,0.00046,0.038,0.023,0.027,0.0061,0.043,0.045,0.033,1.6e-06,1.2e-06,2.9e-05,0.039,0.034,0.00018,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4 +15890000,0.98,-0.0088,-0.011,0.18,0.02,-0.0083,0.029,0,0,-4.9e+02,-0.001,-0.0058,-0.0002,-0.0013,-0.013,-0.14,0.2,1.5e-06,0.43,0.0002,0.00033,-0.00019,0,0,-4.9e+02,0.00042,0.00046,0.038,0.025,0.029,0.0061,0.048,0.05,0.033,1.6e-06,1.2e-06,2.8e-05,0.039,0.034,0.00018,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4 +15990000,0.98,-0.0087,-0.011,0.18,0.019,-0.0072,0.026,0,0,-4.9e+02,-0.001,-0.0058,-0.00022,-0.0014,-0.015,-0.14,0.2,1.1e-06,0.43,0.00024,0.00038,-0.0002,0,0,-4.9e+02,0.00042,0.00045,0.038,0.022,0.025,0.006,0.043,0.044,0.033,1.6e-06,1.2e-06,2.7e-05,0.039,0.033,0.00018,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4 +16090000,0.98,-0.0087,-0.012,0.18,0.02,-0.0086,0.023,0,0,-4.9e+02,-0.001,-0.0058,-0.00026,-0.0015,-0.015,-0.14,0.2,1.2e-06,0.43,0.00026,0.00042,-0.00021,0,0,-4.9e+02,0.00042,0.00045,0.038,0.024,0.028,0.006,0.048,0.05,0.033,1.6e-06,1.2e-06,2.6e-05,0.039,0.033,0.00018,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.1 +16190000,0.98,-0.0087,-0.011,0.18,0.016,-0.0066,0.022,0,0,-4.9e+02,-0.001,-0.0058,-0.00032,-0.0014,-0.016,-0.14,0.2,1e-06,0.43,0.00027,0.00042,-0.0002,0,0,-4.9e+02,0.00041,0.00045,0.038,0.021,0.024,0.006,0.043,0.044,0.033,1.5e-06,1.1e-06,2.5e-05,0.039,0.033,0.00017,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.1 +16290000,0.98,-0.0087,-0.011,0.18,0.017,-0.0083,0.022,0,0,-4.9e+02,-0.001,-0.0058,-0.00029,-0.0014,-0.016,-0.14,0.2,1e-06,0.43,0.00026,0.0004,-0.0002,0,0,-4.9e+02,0.00041,0.00045,0.038,0.023,0.026,0.006,0.047,0.049,0.033,1.5e-06,1.1e-06,2.4e-05,0.039,0.033,0.00017,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.1 +16390000,0.98,-0.0088,-0.011,0.18,0.019,-0.0079,0.022,0,0,-4.9e+02,-0.001,-0.0058,-0.00023,-0.0015,-0.018,-0.14,0.2,9.7e-07,0.43,0.0003,0.00046,-0.0002,0,0,-4.9e+02,0.00041,0.00045,0.038,0.021,0.023,0.0059,0.042,0.044,0.033,1.4e-06,1.1e-06,2.3e-05,0.039,0.033,0.00017,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.1 +16490000,0.98,-0.0089,-0.011,0.18,0.023,-0.0097,0.024,0,0,-4.9e+02,-0.001,-0.0058,-0.00025,-0.0017,-0.018,-0.14,0.2,1.1e-06,0.43,0.00032,0.00048,-0.00019,0,0,-4.9e+02,0.00041,0.00045,0.038,0.022,0.025,0.0059,0.047,0.049,0.033,1.4e-06,1.1e-06,2.3e-05,0.039,0.033,0.00017,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.2 +16590000,0.98,-0.0089,-0.011,0.18,0.026,-0.01,0.028,0,0,-4.9e+02,-0.001,-0.0058,-0.00025,-0.0015,-0.019,-0.14,0.2,7.8e-07,0.43,0.00033,0.00048,-0.0002,0,0,-4.9e+02,0.0004,0.00044,0.038,0.02,0.023,0.0059,0.042,0.043,0.033,1.4e-06,1e-06,2.2e-05,0.039,0.033,0.00017,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.2 +16690000,0.98,-0.009,-0.011,0.18,0.028,-0.015,0.028,0,0,-4.9e+02,-0.0011,-0.0058,-0.0002,-0.0014,-0.018,-0.14,0.2,6.3e-07,0.43,0.00032,0.00046,-0.0002,0,0,-4.9e+02,0.0004,0.00044,0.038,0.021,0.024,0.0059,0.047,0.048,0.033,1.4e-06,1e-06,2.2e-05,0.039,0.033,0.00017,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.2 +16790000,0.98,-0.0088,-0.011,0.18,0.028,-0.014,0.027,0,0,-4.9e+02,-0.0011,-0.0058,-0.00018,-0.001,-0.018,-0.14,0.2,1.3e-07,0.43,0.00032,0.00044,-0.0002,0,0,-4.9e+02,0.0004,0.00044,0.038,0.019,0.022,0.0059,0.042,0.043,0.033,1.3e-06,1e-06,2.1e-05,0.039,0.032,0.00017,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.2 +16890000,0.98,-0.0088,-0.011,0.18,0.028,-0.015,0.028,0,0,-4.9e+02,-0.0011,-0.0058,-9.9e-05,-0.00099,-0.017,-0.14,0.2,-5.3e-08,0.43,0.00031,0.00042,-0.00021,0,0,-4.9e+02,0.0004,0.00044,0.038,0.02,0.024,0.0059,0.046,0.048,0.033,1.3e-06,1e-06,2e-05,0.039,0.032,0.00016,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.3 +16990000,0.98,-0.0088,-0.011,0.18,0.027,-0.015,0.028,0,0,-4.9e+02,-0.0011,-0.0058,-8.6e-05,-0.0008,-0.018,-0.13,0.2,-2.9e-07,0.43,0.00032,0.00045,-0.00021,0,0,-4.9e+02,0.00039,0.00044,0.038,0.018,0.021,0.0058,0.041,0.043,0.032,1.3e-06,9.7e-07,2e-05,0.039,0.032,0.00016,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.3 +17090000,0.98,-0.009,-0.011,0.18,0.031,-0.018,0.028,0,0,-4.9e+02,-0.0011,-0.0058,-9.4e-05,-0.0011,-0.02,-0.13,0.2,-5.2e-07,0.43,0.00037,0.00054,-0.00023,0,0,-4.9e+02,0.00039,0.00044,0.038,0.02,0.023,0.0058,0.046,0.048,0.032,1.3e-06,9.6e-07,1.9e-05,0.039,0.032,0.00016,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.3 +17190000,0.98,-0.0091,-0.011,0.18,0.028,-0.022,0.029,0,0,-4.9e+02,-0.0011,-0.0058,-0.00016,-0.0011,-0.02,-0.13,0.2,-1.1e-06,0.43,0.00039,0.00054,-0.00024,0,0,-4.9e+02,0.00039,0.00043,0.038,0.018,0.021,0.0058,0.041,0.042,0.032,1.2e-06,9.4e-07,1.9e-05,0.038,0.032,0.00016,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.3 +17290000,0.98,-0.0091,-0.011,0.18,0.031,-0.023,0.029,0,0,-4.9e+02,-0.0011,-0.0058,-0.0002,-0.0012,-0.02,-0.13,0.2,-1.1e-06,0.43,0.0004,0.00056,-0.00025,0,0,-4.9e+02,0.00039,0.00044,0.038,0.019,0.022,0.0058,0.045,0.047,0.032,1.2e-06,9.3e-07,1.8e-05,0.038,0.032,0.00016,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.4 +17390000,0.98,-0.009,-0.011,0.18,0.025,-0.024,0.028,0,0,-4.9e+02,-0.0011,-0.0058,-0.00017,-0.00023,-0.019,-0.13,0.2,-1.5e-06,0.43,0.00038,0.00054,-0.00025,0,0,-4.9e+02,0.00039,0.00043,0.038,0.017,0.02,0.0057,0.041,0.042,0.032,1.2e-06,9e-07,1.7e-05,0.038,0.032,0.00016,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.4 +17490000,0.98,-0.009,-0.011,0.18,0.025,-0.025,0.028,0,0,-4.9e+02,-0.0011,-0.0058,-0.00019,-0.00027,-0.02,-0.13,0.2,-1.5e-06,0.43,0.00038,0.00054,-0.00025,0,0,-4.9e+02,0.00039,0.00043,0.038,0.018,0.022,0.0057,0.045,0.047,0.032,1.2e-06,9e-07,1.7e-05,0.038,0.032,0.00016,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.4 +17590000,0.98,-0.009,-0.011,0.18,0.022,-0.022,0.028,0,0,-4.9e+02,-0.0011,-0.0058,-0.00019,0.00036,-0.02,-0.13,0.2,-2.5e-06,0.43,0.00039,0.00053,-0.00025,0,0,-4.9e+02,0.00038,0.00043,0.038,0.017,0.019,0.0057,0.04,0.042,0.032,1.2e-06,8.7e-07,1.7e-05,0.038,0.032,0.00015,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.4 +17690000,0.98,-0.0091,-0.011,0.18,0.022,-0.023,0.029,0,0,-4.9e+02,-0.0011,-0.0058,-0.00017,0.00035,-0.02,-0.13,0.2,-2.2e-06,0.43,0.00038,0.00051,-0.00024,0,0,-4.9e+02,0.00038,0.00043,0.038,0.018,0.021,0.0057,0.045,0.047,0.032,1.2e-06,8.7e-07,1.6e-05,0.038,0.031,0.00015,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.5 +17790000,0.98,-0.0091,-0.011,0.18,0.023,-0.023,0.029,0,0,-4.9e+02,-0.0011,-0.0058,-0.00017,0.0012,-0.02,-0.13,0.2,-2.3e-06,0.43,0.00035,0.00047,-0.00022,0,0,-4.9e+02,0.00038,0.00043,0.038,0.016,0.019,0.0057,0.04,0.042,0.032,1.1e-06,8.5e-07,1.6e-05,0.038,0.031,0.00015,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.5 +17890000,0.98,-0.009,-0.011,0.18,0.026,-0.025,0.029,0,0,-4.9e+02,-0.0011,-0.0058,-0.00013,0.0013,-0.019,-0.13,0.2,-2.3e-06,0.43,0.00033,0.00045,-0.00021,0,0,-4.9e+02,0.00038,0.00043,0.038,0.017,0.02,0.0057,0.044,0.046,0.032,1.1e-06,8.4e-07,1.5e-05,0.038,0.031,0.00015,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.5 +17990000,0.98,-0.009,-0.011,0.18,0.025,-0.021,0.028,0,0,-4.9e+02,-0.0011,-0.0058,-0.00016,0.0026,-0.021,-0.13,0.2,-2.7e-06,0.43,0.00032,0.00046,-0.00019,0,0,-4.9e+02,0.00038,0.00042,0.038,0.016,0.019,0.0056,0.04,0.041,0.032,1.1e-06,8.2e-07,1.5e-05,0.038,0.031,0.00015,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.5 +18090000,0.98,-0.0091,-0.011,0.18,0.027,-0.022,0.028,0,0,-4.9e+02,-0.0011,-0.0058,-0.00015,0.0025,-0.021,-0.13,0.2,-2.6e-06,0.43,0.00032,0.00046,-0.00018,0,0,-4.9e+02,0.00038,0.00042,0.038,0.017,0.02,0.0056,0.044,0.046,0.032,1.1e-06,8.1e-07,1.5e-05,0.038,0.031,0.00015,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.6 +18190000,0.98,-0.0092,-0.011,0.18,0.025,-0.021,0.029,0,0,-4.9e+02,-0.0011,-0.0058,-7.9e-05,0.003,-0.022,-0.13,0.2,-3.2e-06,0.43,0.00033,0.00048,-0.00019,0,0,-4.9e+02,0.00037,0.00042,0.038,0.015,0.018,0.0056,0.04,0.041,0.032,1.1e-06,7.9e-07,1.4e-05,0.037,0.031,0.00015,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.6 +18290000,0.98,-0.0093,-0.011,0.18,0.028,-0.022,0.028,0,0,-4.9e+02,-0.0011,-0.0058,-5.6e-05,0.0028,-0.023,-0.13,0.2,-3.1e-06,0.43,0.00034,0.0005,-0.00019,0,0,-4.9e+02,0.00038,0.00042,0.038,0.016,0.02,0.0056,0.044,0.046,0.032,1.1e-06,7.9e-07,1.4e-05,0.037,0.031,0.00015,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.6 +18390000,0.98,-0.0092,-0.011,0.18,0.027,-0.021,0.028,0,0,-4.9e+02,-0.0011,-0.0058,-8e-05,0.0035,-0.023,-0.13,0.2,-3.6e-06,0.43,0.00033,0.00051,-0.00018,0,0,-4.9e+02,0.00037,0.00042,0.038,0.015,0.018,0.0056,0.039,0.041,0.032,1e-06,7.7e-07,1.3e-05,0.037,0.031,0.00014,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.6 +18490000,0.98,-0.0092,-0.011,0.18,0.031,-0.022,0.027,0,0,-4.9e+02,-0.0011,-0.0058,-3.8e-05,0.0035,-0.023,-0.13,0.2,-3.6e-06,0.43,0.00034,0.00051,-0.00019,0,0,-4.9e+02,0.00037,0.00042,0.038,0.016,0.019,0.0056,0.043,0.045,0.032,1e-06,7.6e-07,1.3e-05,0.037,0.031,0.00014,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.7 +18590000,0.98,-0.009,-0.011,0.18,0.029,-0.021,0.027,0,0,-4.9e+02,-0.0011,-0.0058,-7.6e-05,0.0044,-0.022,-0.13,0.2,-4.2e-06,0.43,0.00031,0.00046,-0.00018,0,0,-4.9e+02,0.00037,0.00041,0.038,0.015,0.018,0.0055,0.039,0.041,0.032,1e-06,7.4e-07,1.3e-05,0.037,0.03,0.00014,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.7 +18690000,0.98,-0.0089,-0.011,0.18,0.029,-0.02,0.026,0,0,-4.9e+02,-0.0011,-0.0058,-2.6e-05,0.0045,-0.02,-0.13,0.2,-4.1e-06,0.43,0.00028,0.00042,-0.00018,0,0,-4.9e+02,0.00037,0.00042,0.038,0.016,0.019,0.0055,0.043,0.045,0.031,1e-06,7.4e-07,1.2e-05,0.037,0.03,0.00014,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.7 +18790000,0.98,-0.0089,-0.011,0.18,0.027,-0.02,0.026,0,0,-4.9e+02,-0.0012,-0.0058,-3.5e-05,0.0052,-0.02,-0.13,0.2,-4.7e-06,0.43,0.00028,0.00042,-0.00019,0,0,-4.9e+02,0.00037,0.00041,0.038,0.014,0.017,0.0055,0.039,0.041,0.032,9.6e-07,7.2e-07,1.2e-05,0.037,0.03,0.00014,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.7 +18890000,0.98,-0.0089,-0.011,0.18,0.027,-0.02,0.024,0,0,-4.9e+02,-0.0012,-0.0058,-4e-05,0.0051,-0.021,-0.13,0.2,-4.8e-06,0.43,0.0003,0.00044,-0.00019,0,0,-4.9e+02,0.00037,0.00041,0.038,0.015,0.019,0.0055,0.043,0.045,0.031,9.7e-07,7.2e-07,1.2e-05,0.037,0.03,0.00014,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.8 +18990000,0.98,-0.0088,-0.011,0.18,0.024,-0.02,0.025,0,0,-4.9e+02,-0.0012,-0.0058,-4.6e-05,0.006,-0.02,-0.13,0.2,-5.5e-06,0.43,0.00028,0.00041,-0.0002,0,0,-4.9e+02,0.00036,0.00041,0.038,0.014,0.017,0.0055,0.039,0.04,0.031,9.3e-07,7e-07,1.1e-05,0.037,0.03,0.00014,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.8 +19090000,0.98,-0.0089,-0.011,0.18,0.023,-0.021,0.026,0,0,-4.9e+02,-0.0012,-0.0058,-6.2e-06,0.0059,-0.02,-0.13,0.2,-5.5e-06,0.43,0.00029,0.00042,-0.00021,0,0,-4.9e+02,0.00036,0.00041,0.038,0.015,0.018,0.0055,0.042,0.045,0.032,9.4e-07,7e-07,1.1e-05,0.037,0.03,0.00014,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.8 +19190000,0.98,-0.0087,-0.011,0.18,0.02,-0.02,0.026,0,0,-4.9e+02,-0.0012,-0.0058,-6.7e-05,0.0067,-0.019,-0.13,0.2,-6.3e-06,0.43,0.00027,0.00041,-0.0002,0,0,-4.9e+02,0.00036,0.0004,0.038,0.014,0.017,0.0055,0.038,0.04,0.031,9.1e-07,6.8e-07,1.1e-05,0.036,0.03,0.00014,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.8 +19290000,0.98,-0.0087,-0.011,0.18,0.021,-0.021,0.027,0,0,-4.9e+02,-0.0012,-0.0058,-6e-05,0.0066,-0.02,-0.13,0.2,-6.4e-06,0.43,0.00029,0.00043,-0.00021,0,0,-4.9e+02,0.00036,0.00041,0.038,0.015,0.018,0.0055,0.042,0.044,0.031,9.1e-07,6.8e-07,1.1e-05,0.036,0.03,0.00014,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.9 +19390000,0.98,-0.0088,-0.011,0.18,0.02,-0.018,0.028,0,0,-4.9e+02,-0.0012,-0.0058,-8.6e-05,0.0076,-0.02,-0.13,0.2,-7e-06,0.43,0.00026,0.00041,-0.0002,0,0,-4.9e+02,0.00036,0.0004,0.038,0.014,0.017,0.0055,0.038,0.04,0.031,8.8e-07,6.6e-07,1e-05,0.036,0.03,0.00013,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.9 +19490000,0.98,-0.0089,-0.011,0.18,0.021,-0.019,0.028,0,0,-4.9e+02,-0.0012,-0.0058,-0.00011,0.0075,-0.021,-0.13,0.2,-6.8e-06,0.43,0.00026,0.00041,-0.00017,0,0,-4.9e+02,0.00036,0.0004,0.038,0.015,0.018,0.0055,0.042,0.044,0.031,8.8e-07,6.6e-07,1e-05,0.036,0.03,0.00013,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.9 +19590000,0.98,-0.0088,-0.011,0.18,0.018,-0.02,0.03,0,0,-4.9e+02,-0.0012,-0.0058,-0.00012,0.0079,-0.021,-0.13,0.2,-7.2e-06,0.43,0.00025,0.0004,-0.00017,0,0,-4.9e+02,0.00036,0.0004,0.038,0.013,0.016,0.0054,0.038,0.04,0.031,8.5e-07,6.4e-07,9.9e-06,0.036,0.029,0.00013,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,4.9 +19690000,0.98,-0.0089,-0.011,0.18,0.018,-0.02,0.029,0,0,-4.9e+02,-0.0012,-0.0058,-8e-05,0.0077,-0.022,-0.13,0.2,-7.1e-06,0.43,0.00027,0.00041,-0.00018,0,0,-4.9e+02,0.00036,0.0004,0.038,0.014,0.018,0.0054,0.042,0.044,0.031,8.5e-07,6.4e-07,9.8e-06,0.036,0.029,0.00013,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,5 +19790000,0.98,-0.009,-0.011,0.18,0.016,-0.017,0.028,0,0,-4.9e+02,-0.0012,-0.0058,-0.00011,0.0084,-0.022,-0.13,0.2,-7.6e-06,0.43,0.00025,0.00041,-0.00017,0,0,-4.9e+02,0.00035,0.00039,0.038,0.013,0.016,0.0054,0.038,0.04,0.031,8.2e-07,6.2e-07,9.5e-06,0.035,0.029,0.00013,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,5 +19890000,0.98,-0.009,-0.011,0.18,0.017,-0.018,0.029,0,0,-4.9e+02,-0.0012,-0.0058,-0.00011,0.0084,-0.022,-0.13,0.2,-7.6e-06,0.43,0.00026,0.00041,-0.00018,0,0,-4.9e+02,0.00035,0.0004,0.038,0.014,0.017,0.0054,0.041,0.044,0.031,8.3e-07,6.2e-07,9.3e-06,0.035,0.029,0.00013,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,5 +19990000,0.98,-0.009,-0.012,0.18,0.015,-0.018,0.027,0,0,-4.9e+02,-0.0012,-0.0058,-0.00012,0.0094,-0.021,-0.13,0.2,-8.2e-06,0.43,0.00024,0.00041,-0.00018,0,0,-4.9e+02,0.00035,0.00039,0.038,0.013,0.016,0.0054,0.038,0.04,0.031,8e-07,6e-07,9e-06,0.035,0.029,0.00013,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,5 +20090000,0.98,-0.009,-0.012,0.18,0.017,-0.021,0.027,0,0,-4.9e+02,-0.0012,-0.0058,-0.00011,0.0094,-0.022,-0.13,0.2,-8.2e-06,0.43,0.00025,0.00042,-0.00018,0,0,-4.9e+02,0.00035,0.00039,0.038,0.014,0.017,0.0054,0.041,0.044,0.031,8e-07,6e-07,8.9e-06,0.035,0.029,0.00013,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,5.1 +20190000,0.98,-0.009,-0.012,0.18,0.017,-0.018,0.028,0,0,-4.9e+02,-0.0012,-0.0058,-0.00014,0.01,-0.023,-0.13,0.2,-8.9e-06,0.43,0.00023,0.00044,-0.00018,0,0,-4.9e+02,0.00035,0.00039,0.038,0.013,0.016,0.0054,0.037,0.039,0.031,7.7e-07,5.9e-07,8.6e-06,0.035,0.029,0.00013,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,0.01 +20290000,0.98,-0.009,-0.012,0.18,0.015,-0.02,0.028,0,0,-4.9e+02,-0.0012,-0.0058,-0.00014,0.01,-0.023,-0.13,0.2,-9e-06,0.43,0.00024,0.00044,-0.00018,0,0,-4.9e+02,0.00035,0.00039,0.038,0.014,0.017,0.0054,0.041,0.044,0.031,7.7e-07,5.9e-07,8.5e-06,0.035,0.029,0.00013,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,0.01 +20390000,0.98,-0.009,-0.012,0.18,0.013,-0.017,0.028,0,0,-4.9e+02,-0.0012,-0.0058,-0.00012,0.011,-0.023,-0.13,0.2,-9.3e-06,0.43,0.00023,0.00042,-0.00018,0,0,-4.9e+02,0.00035,0.00038,0.038,0.013,0.016,0.0054,0.037,0.039,0.031,7.5e-07,5.7e-07,8.2e-06,0.035,0.029,0.00013,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,0.01 +20490000,0.98,-0.009,-0.012,0.18,0.0098,-0.019,0.029,0,0,-4.9e+02,-0.0012,-0.0058,-0.00011,0.011,-0.023,-0.13,0.2,-9.1e-06,0.43,0.00024,0.00041,-0.00018,0,0,-4.9e+02,0.00035,0.00038,0.038,0.014,0.017,0.0054,0.041,0.043,0.031,7.5e-07,5.7e-07,8.1e-06,0.035,0.029,0.00013,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,0.01 +20590000,0.98,-0.0089,-0.012,0.18,0.009,-0.019,0.029,0,0,-4.9e+02,-0.0012,-0.0058,-7.8e-05,0.011,-0.023,-0.13,0.2,-9.3e-06,0.43,0.00023,0.0004,-0.00019,0,0,-4.9e+02,0.00034,0.00038,0.038,0.013,0.016,0.0053,0.037,0.039,0.031,7.3e-07,5.6e-07,7.8e-06,0.034,0.029,0.00012,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,0.01 +20690000,0.98,-0.0088,-0.012,0.18,0.008,-0.019,0.03,0,0,-4.9e+02,-0.0012,-0.0058,-9.5e-05,0.011,-0.023,-0.13,0.2,-9.4e-06,0.43,0.00023,0.00039,-0.00018,0,0,-4.9e+02,0.00034,0.00038,0.038,0.013,0.017,0.0054,0.041,0.043,0.031,7.3e-07,5.5e-07,7.7e-06,0.034,0.028,0.00012,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,0.01 +20790000,0.98,-0.0082,-0.012,0.18,0.0041,-0.015,0.015,0,0,-4.9e+02,-0.0012,-0.0058,-8.7e-05,0.012,-0.023,-0.13,0.2,-1e-05,0.43,0.00021,0.00039,-0.00019,0,0,-4.9e+02,0.00034,0.00038,0.038,0.013,0.016,0.0053,0.037,0.039,0.031,7e-07,5.4e-07,7.5e-06,0.034,0.028,0.00012,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,0.01 +20890000,0.98,0.00088,-0.0079,0.18,0.00022,-0.0045,-0.1,0,0,-4.9e+02,-0.0012,-0.0058,-7.5e-05,0.012,-0.024,-0.13,0.2,-1.1e-05,0.43,0.00022,0.00052,-0.00014,0,0,-4.9e+02,0.00034,0.00038,0.038,0.013,0.017,0.0053,0.04,0.043,0.031,7.1e-07,5.4e-07,7.4e-06,0.034,0.028,0.00012,0.0013,4e-05,0.0013,0.0013,0.0015,0.0013,1,1,0.01 +20990000,0.98,0.0043,-0.0044,0.18,-0.012,0.015,-0.24,0,0,-4.9e+02,-0.0012,-0.0058,-7.6e-05,0.012,-0.024,-0.13,0.2,-1.1e-05,0.43,0.00022,0.00051,-9.5e-05,0,0,-4.9e+02,0.00034,0.00037,0.038,0.013,0.016,0.0053,0.037,0.039,0.031,6.8e-07,5.3e-07,7.2e-06,0.034,0.028,0.00012,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +21090000,0.98,0.0026,-0.0048,0.18,-0.023,0.03,-0.36,0,0,-4.9e+02,-0.0012,-0.0058,-6.7e-05,0.012,-0.024,-0.13,0.2,-9.5e-06,0.43,0.00028,0.00031,-0.00015,0,0,-4.9e+02,0.00034,0.00037,0.038,0.014,0.017,0.0053,0.04,0.043,0.031,6.8e-07,5.2e-07,7.1e-06,0.034,0.028,0.00012,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +21190000,0.98,-0.00017,-0.0064,0.18,-0.029,0.036,-0.49,0,0,-4.9e+02,-0.0012,-0.0058,-3.8e-05,0.012,-0.025,-0.13,0.2,-9.2e-06,0.43,0.0003,0.00033,-0.00014,0,0,-4.9e+02,0.00034,0.00037,0.038,0.013,0.016,0.0053,0.037,0.039,0.031,6.6e-07,5.1e-07,6.8e-06,0.033,0.028,0.00012,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +21290000,0.98,-0.0024,-0.0077,0.18,-0.028,0.038,-0.62,0,0,-4.9e+02,-0.0012,-0.0058,-6.7e-05,0.012,-0.025,-0.13,0.2,-9.7e-06,0.43,0.00027,0.00038,-6.1e-05,0,0,-4.9e+02,0.00034,0.00037,0.038,0.014,0.017,0.0053,0.04,0.043,0.031,6.6e-07,5.1e-07,6.7e-06,0.033,0.028,0.00012,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +21390000,0.98,-0.0038,-0.0083,0.18,-0.026,0.035,-0.75,0,0,-4.9e+02,-0.0012,-0.0058,-6.2e-05,0.012,-0.025,-0.13,0.2,-9.2e-06,0.43,0.00029,0.0003,-7.9e-05,0,0,-4.9e+02,0.00033,0.00037,0.038,0.013,0.016,0.0053,0.037,0.039,0.031,6.4e-07,5e-07,6.5e-06,0.033,0.028,0.00012,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +21490000,0.98,-0.0046,-0.0087,0.18,-0.021,0.032,-0.88,0,0,-4.9e+02,-0.0012,-0.0058,-3.9e-05,0.012,-0.025,-0.13,0.2,-9.3e-06,0.43,0.00029,0.00032,-0.00013,0,0,-4.9e+02,0.00033,0.00037,0.038,0.014,0.018,0.0053,0.04,0.043,0.031,6.4e-07,5e-07,6.4e-06,0.033,0.028,0.00012,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +21590000,0.98,-0.005,-0.0087,0.18,-0.014,0.028,-1,0,0,-4.9e+02,-0.0012,-0.0058,-2.1e-05,0.012,-0.024,-0.13,0.2,-9.5e-06,0.43,0.00028,0.00036,-0.00015,0,0,-4.9e+02,0.00033,0.00036,0.038,0.013,0.016,0.0053,0.037,0.039,0.031,6.2e-07,4.8e-07,6.2e-06,0.033,0.028,0.00012,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +21690000,0.98,-0.0053,-0.0086,0.18,-0.011,0.023,-1.1,0,0,-4.9e+02,-0.0012,-0.0058,6.5e-06,0.012,-0.024,-0.13,0.2,-9.6e-06,0.43,0.00027,0.0004,-0.00014,0,0,-4.9e+02,0.00033,0.00036,0.038,0.014,0.018,0.0053,0.04,0.043,0.031,6.2e-07,4.8e-07,6.1e-06,0.033,0.028,0.00012,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +21790000,0.98,-0.0056,-0.0087,0.18,-0.0062,0.018,-1.3,0,0,-4.9e+02,-0.0012,-0.0058,3.6e-05,0.012,-0.024,-0.13,0.2,-9.7e-06,0.43,0.00028,0.00038,-0.00021,0,0,-4.9e+02,0.00032,0.00035,0.038,0.013,0.017,0.0052,0.037,0.039,0.031,6e-07,4.7e-07,6e-06,0.032,0.028,0.00012,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +21890000,0.98,-0.0059,-0.0088,0.18,-0.0025,0.013,-1.4,0,0,-4.9e+02,-0.0012,-0.0058,2.6e-05,0.013,-0.024,-0.13,0.2,-1e-05,0.43,0.00024,0.00041,-0.00019,0,0,-4.9e+02,0.00033,0.00036,0.038,0.014,0.018,0.0053,0.04,0.043,0.031,6e-07,4.7e-07,5.9e-06,0.032,0.027,0.00011,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +21990000,0.98,-0.0066,-0.0091,0.18,-0.00053,0.0085,-1.4,0,0,-4.9e+02,-0.0012,-0.0058,4.3e-05,0.012,-0.023,-0.13,0.2,-9.8e-06,0.43,0.00027,0.00041,-0.00022,0,0,-4.9e+02,0.00032,0.00035,0.038,0.013,0.016,0.0052,0.037,0.039,0.031,5.8e-07,4.6e-07,5.7e-06,0.032,0.027,0.00011,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +22090000,0.98,-0.0072,-0.0099,0.18,0.0014,0.0044,-1.4,0,0,-4.9e+02,-0.0012,-0.0058,7.2e-05,0.013,-0.022,-0.13,0.2,-9.8e-06,0.43,0.00028,0.00041,-0.00024,0,0,-4.9e+02,0.00032,0.00035,0.038,0.014,0.018,0.0053,0.04,0.043,0.031,5.8e-07,4.6e-07,5.6e-06,0.032,0.027,0.00011,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +22190000,0.98,-0.0076,-0.01,0.18,0.0071,-1.1e-05,-1.4,0,0,-4.9e+02,-0.0012,-0.0058,9.5e-05,0.013,-0.02,-0.13,0.2,-9.9e-06,0.43,0.00028,0.00041,-0.00024,0,0,-4.9e+02,0.00032,0.00034,0.038,0.013,0.016,0.0052,0.037,0.039,0.03,5.6e-07,4.5e-07,5.4e-06,0.031,0.027,0.00011,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +22290000,0.98,-0.0083,-0.01,0.18,0.013,-0.0059,-1.4,0,0,-4.9e+02,-0.0012,-0.0058,8.7e-05,0.013,-0.021,-0.13,0.2,-9.9e-06,0.43,0.00027,0.00041,-0.00024,0,0,-4.9e+02,0.00032,0.00034,0.038,0.014,0.017,0.0052,0.04,0.043,0.03,5.6e-07,4.4e-07,5.4e-06,0.031,0.027,0.00011,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +22390000,0.98,-0.0086,-0.01,0.18,0.017,-0.014,-1.4,0,0,-4.9e+02,-0.0012,-0.0058,7.5e-05,0.012,-0.02,-0.13,0.2,-9.9e-06,0.43,0.00028,0.00041,-0.00026,0,0,-4.9e+02,0.00031,0.00034,0.038,0.013,0.016,0.0052,0.037,0.039,0.03,5.4e-07,4.3e-07,5.2e-06,0.031,0.027,0.00011,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +22490000,0.98,-0.0088,-0.011,0.18,0.021,-0.021,-1.4,0,0,-4.9e+02,-0.0012,-0.0058,6e-05,0.012,-0.02,-0.13,0.2,-1e-05,0.43,0.00029,0.00043,-0.00027,0,0,-4.9e+02,0.00031,0.00034,0.038,0.014,0.017,0.0052,0.04,0.043,0.03,5.4e-07,4.3e-07,5.1e-06,0.031,0.027,0.00011,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +22590000,0.98,-0.0087,-0.012,0.18,0.029,-0.028,-1.4,0,0,-4.9e+02,-0.0012,-0.0058,8.2e-05,0.012,-0.02,-0.13,0.2,-1e-05,0.43,0.0003,0.00045,-0.00027,0,0,-4.9e+02,0.00031,0.00033,0.038,0.013,0.016,0.0052,0.037,0.039,0.03,5.2e-07,4.2e-07,5e-06,0.031,0.027,0.00011,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +22690000,0.98,-0.0086,-0.012,0.18,0.032,-0.033,-1.4,0,0,-4.9e+02,-0.0012,-0.0058,7.3e-05,0.012,-0.021,-0.13,0.2,-1e-05,0.43,0.00029,0.00046,-0.00029,0,0,-4.9e+02,0.00031,0.00033,0.038,0.013,0.017,0.0052,0.04,0.043,0.03,5.3e-07,4.2e-07,4.9e-06,0.031,0.027,0.00011,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +22790000,0.98,-0.0086,-0.012,0.18,0.038,-0.041,-1.4,0,0,-4.9e+02,-0.0012,-0.0058,5.8e-05,0.012,-0.021,-0.13,0.2,-1e-05,0.43,0.00028,0.00044,-0.0003,0,0,-4.9e+02,0.0003,0.00033,0.038,0.012,0.015,0.0052,0.036,0.039,0.03,5.1e-07,4.1e-07,4.8e-06,0.03,0.027,0.00011,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +22890000,0.98,-0.0088,-0.012,0.18,0.042,-0.047,-1.4,0,0,-4.9e+02,-0.0012,-0.0058,8.4e-05,0.012,-0.021,-0.13,0.2,-1e-05,0.43,0.00029,0.00044,-0.00029,0,0,-4.9e+02,0.0003,0.00033,0.038,0.013,0.016,0.0052,0.04,0.043,0.03,5.1e-07,4.1e-07,4.7e-06,0.03,0.027,0.00011,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +22990000,0.98,-0.0087,-0.013,0.18,0.046,-0.051,-1.4,0,0,-4.9e+02,-0.0012,-0.0058,0.00011,0.012,-0.02,-0.13,0.2,-1.1e-05,0.43,0.00029,0.00041,-0.00027,0,0,-4.9e+02,0.0003,0.00032,0.038,0.012,0.015,0.0052,0.036,0.039,0.03,4.9e-07,4e-07,4.6e-06,0.03,0.027,0.00011,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +23090000,0.98,-0.0087,-0.013,0.18,0.051,-0.056,-1.4,0,0,-4.9e+02,-0.0012,-0.0058,0.00011,0.012,-0.02,-0.13,0.2,-1.1e-05,0.43,0.00028,0.00041,-0.00026,0,0,-4.9e+02,0.0003,0.00032,0.038,0.013,0.016,0.0052,0.04,0.043,0.03,5e-07,4e-07,4.5e-06,0.03,0.027,0.00011,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +23190000,0.98,-0.0087,-0.013,0.18,0.057,-0.057,-1.4,0,0,-4.9e+02,-0.0012,-0.0058,9.2e-05,0.012,-0.019,-0.13,0.2,-1.2e-05,0.43,0.00026,0.00039,-0.00026,0,0,-4.9e+02,0.0003,0.00032,0.037,0.012,0.015,0.0052,0.036,0.039,0.03,4.8e-07,3.9e-07,4.4e-06,0.03,0.026,0.00011,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +23290000,0.98,-0.0092,-0.014,0.18,0.062,-0.062,-1.4,0,0,-4.9e+02,-0.0012,-0.0058,0.0001,0.012,-0.02,-0.13,0.2,-1.2e-05,0.43,0.00023,0.00042,-0.00026,0,0,-4.9e+02,0.0003,0.00032,0.037,0.013,0.016,0.0052,0.04,0.043,0.03,4.8e-07,3.9e-07,4.3e-06,0.03,0.026,0.00011,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +23390000,0.98,-0.0091,-0.014,0.18,0.067,-0.064,-1.4,0,0,-4.9e+02,-0.0012,-0.0058,5.7e-05,0.013,-0.019,-0.13,0.2,-1.1e-05,0.43,0.00023,0.00042,-0.00023,0,0,-4.9e+02,0.00029,0.00032,0.037,0.012,0.015,0.0052,0.036,0.039,0.03,4.7e-07,3.9e-07,4.2e-06,0.029,0.026,0.00011,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +23490000,0.98,-0.0092,-0.014,0.18,0.072,-0.067,-1.4,0,0,-4.9e+02,-0.0012,-0.0058,7.8e-05,0.013,-0.02,-0.13,0.2,-1.2e-05,0.43,0.00022,0.00047,-0.00028,0,0,-4.9e+02,0.00029,0.00032,0.037,0.013,0.016,0.0052,0.039,0.043,0.03,4.7e-07,3.9e-07,4.1e-06,0.029,0.026,0.00011,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +23590000,0.98,-0.0094,-0.014,0.18,0.075,-0.069,-1.4,0,0,-4.9e+02,-0.0013,-0.0058,8.4e-05,0.013,-0.019,-0.13,0.2,-1.3e-05,0.43,0.00018,0.00045,-0.00025,0,0,-4.9e+02,0.00029,0.00031,0.037,0.012,0.014,0.0051,0.036,0.039,0.03,4.6e-07,3.8e-07,4e-06,0.029,0.026,0.0001,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +23690000,0.98,-0.01,-0.014,0.18,0.074,-0.071,-1.3,0,0,-4.9e+02,-0.0013,-0.0058,0.0001,0.013,-0.019,-0.13,0.2,-1.3e-05,0.43,0.00017,0.00046,-0.00025,0,0,-4.9e+02,0.00029,0.00031,0.037,0.012,0.015,0.0052,0.039,0.042,0.03,4.6e-07,3.8e-07,4e-06,0.029,0.026,0.0001,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +23790000,0.98,-0.012,-0.017,0.18,0.068,-0.067,-0.94,0,0,-4.9e+02,-0.0013,-0.0058,0.0001,0.014,-0.019,-0.13,0.2,-1.3e-05,0.43,0.00016,0.00051,-0.00023,0,0,-4.9e+02,0.00029,0.00031,0.037,0.011,0.014,0.0051,0.036,0.038,0.03,4.4e-07,3.7e-07,3.9e-06,0.029,0.026,0.0001,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +23890000,0.98,-0.015,-0.021,0.18,0.064,-0.067,-0.51,0,0,-4.9e+02,-0.0013,-0.0058,0.00011,0.014,-0.019,-0.13,0.2,-1.3e-05,0.43,0.00015,0.00053,-0.00026,0,0,-4.9e+02,0.00029,0.00031,0.037,0.012,0.014,0.0051,0.039,0.042,0.03,4.4e-07,3.7e-07,3.8e-06,0.029,0.026,0.0001,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +23990000,0.98,-0.017,-0.024,0.18,0.064,-0.065,-0.12,0,0,-4.9e+02,-0.0013,-0.0058,8.8e-05,0.016,-0.019,-0.13,0.2,-1.2e-05,0.43,0.00011,0.00055,-1.4e-05,0,0,-4.9e+02,0.00029,0.00031,0.037,0.011,0.013,0.0051,0.036,0.038,0.03,4.3e-07,3.6e-07,3.7e-06,0.029,0.026,0.0001,0.0013,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +24090000,0.98,-0.017,-0.023,0.18,0.07,-0.074,0.11,0,0,-4.9e+02,-0.0013,-0.0058,7.8e-05,0.016,-0.019,-0.13,0.2,-1.2e-05,0.43,0.00013,0.00052,-1.5e-05,0,0,-4.9e+02,0.00029,0.00031,0.037,0.012,0.014,0.0051,0.039,0.042,0.03,4.3e-07,3.6e-07,3.7e-06,0.029,0.026,0.0001,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +24190000,0.98,-0.014,-0.019,0.18,0.08,-0.079,0.1,0,0,-4.9e+02,-0.0013,-0.0058,7.5e-05,0.017,-0.019,-0.13,0.2,-1.2e-05,0.43,0.00013,0.0005,8.1e-05,0,0,-4.9e+02,0.00029,0.00031,0.037,0.011,0.013,0.0051,0.036,0.038,0.03,4.2e-07,3.6e-07,3.6e-06,0.029,0.026,0.0001,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +24290000,0.98,-0.012,-0.016,0.18,0.084,-0.083,0.079,0,0,-4.9e+02,-0.0013,-0.0058,7.9e-05,0.017,-0.019,-0.13,0.2,-1.2e-05,0.43,0.00017,0.00045,7.2e-05,0,0,-4.9e+02,0.00029,0.00031,0.037,0.012,0.014,0.0051,0.039,0.042,0.03,4.2e-07,3.6e-07,3.5e-06,0.029,0.026,0.0001,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +24390000,0.98,-0.011,-0.015,0.18,0.077,-0.077,0.095,0,0,-4.9e+02,-0.0013,-0.0058,7.7e-05,0.019,-0.02,-0.13,0.2,-1e-05,0.43,0.00017,0.0005,0.00013,0,0,-4.9e+02,0.00029,0.0003,0.037,0.011,0.013,0.0051,0.035,0.038,0.03,4.1e-07,3.5e-07,3.5e-06,0.028,0.026,0.0001,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +24490000,0.98,-0.011,-0.015,0.18,0.073,-0.074,0.093,0,0,-4.9e+02,-0.0013,-0.0058,0.00011,0.019,-0.02,-0.13,0.2,-1.1e-05,0.43,0.00011,0.0006,0.00016,0,0,-4.9e+02,0.00029,0.00031,0.037,0.012,0.014,0.0051,0.038,0.041,0.03,4.2e-07,3.5e-07,3.4e-06,0.028,0.026,0.0001,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +24590000,0.98,-0.012,-0.015,0.18,0.069,-0.07,0.088,0,0,-4.9e+02,-0.0013,-0.0058,7.8e-05,0.021,-0.021,-0.13,0.2,-8.9e-06,0.43,0.00014,0.00058,0.00019,0,0,-4.9e+02,0.00028,0.0003,0.037,0.011,0.013,0.0051,0.035,0.038,0.03,4.1e-07,3.5e-07,3.3e-06,0.028,0.026,0.0001,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +24690000,0.98,-0.012,-0.015,0.18,0.067,-0.07,0.088,0,0,-4.9e+02,-0.0013,-0.0058,8.1e-05,0.021,-0.021,-0.13,0.2,-9.1e-06,0.43,0.00013,0.00061,0.00018,0,0,-4.9e+02,0.00029,0.0003,0.037,0.012,0.014,0.0051,0.038,0.041,0.03,4.1e-07,3.5e-07,3.3e-06,0.028,0.026,0.0001,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +24790000,0.98,-0.012,-0.014,0.18,0.064,-0.067,0.079,0,0,-4.9e+02,-0.0013,-0.0058,5.7e-05,0.023,-0.022,-0.13,0.2,-8.5e-06,0.43,0.00012,0.00063,0.00018,0,0,-4.9e+02,0.00028,0.0003,0.037,0.011,0.013,0.0051,0.035,0.037,0.03,4e-07,3.4e-07,3.2e-06,0.028,0.025,9.9e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +24890000,0.98,-0.012,-0.014,0.18,0.063,-0.071,0.069,0,0,-4.9e+02,-0.0013,-0.0058,7e-05,0.023,-0.022,-0.13,0.2,-8.5e-06,0.43,0.00013,0.00064,0.0002,0,0,-4.9e+02,0.00029,0.0003,0.037,0.012,0.014,0.0051,0.038,0.041,0.03,4e-07,3.4e-07,3.2e-06,0.028,0.025,9.9e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +24990000,0.98,-0.012,-0.014,0.18,0.054,-0.067,0.062,0,0,-4.9e+02,-0.0014,-0.0058,3.3e-05,0.025,-0.023,-0.13,0.2,-8.5e-06,0.43,8.3e-05,0.00076,0.00023,0,0,-4.9e+02,0.00028,0.0003,0.037,0.011,0.013,0.0051,0.035,0.037,0.03,3.9e-07,3.4e-07,3.1e-06,0.028,0.025,9.8e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +25090000,0.98,-0.012,-0.014,0.18,0.051,-0.066,0.059,0,0,-4.9e+02,-0.0014,-0.0058,3.2e-05,0.025,-0.023,-0.13,0.2,-9e-06,0.43,6.5e-05,0.00083,0.00027,0,0,-4.9e+02,0.00029,0.0003,0.037,0.012,0.014,0.0051,0.038,0.041,0.03,3.9e-07,3.4e-07,3.1e-06,0.028,0.025,9.8e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +25190000,0.98,-0.012,-0.014,0.18,0.045,-0.06,0.059,0,0,-4.9e+02,-0.0014,-0.0058,-1.2e-05,0.027,-0.024,-0.13,0.2,-8.6e-06,0.43,2.6e-05,0.00087,0.00028,0,0,-4.9e+02,0.00028,0.0003,0.037,0.011,0.013,0.0051,0.035,0.037,0.03,3.8e-07,3.3e-07,3e-06,0.028,0.025,9.7e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +25290000,0.98,-0.012,-0.013,0.18,0.041,-0.062,0.054,0,0,-4.9e+02,-0.0014,-0.0058,-2.8e-05,0.027,-0.024,-0.13,0.2,-9e-06,0.43,4.6e-06,0.0009,0.00026,0,0,-4.9e+02,0.00029,0.0003,0.037,0.012,0.014,0.0051,0.038,0.041,0.03,3.8e-07,3.3e-07,3e-06,0.028,0.025,9.7e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +25390000,0.98,-0.013,-0.013,0.18,0.032,-0.055,0.053,0,0,-4.9e+02,-0.0014,-0.0058,-6.4e-05,0.029,-0.025,-0.13,0.2,-9.7e-06,0.43,-4.1e-05,0.00096,0.0003,0,0,-4.9e+02,0.00028,0.0003,0.037,0.011,0.013,0.0051,0.035,0.037,0.03,3.8e-07,3.3e-07,2.9e-06,0.028,0.025,9.6e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +25490000,0.98,-0.013,-0.013,0.18,0.028,-0.055,0.052,0,0,-4.9e+02,-0.0014,-0.0058,-6.8e-05,0.029,-0.025,-0.13,0.2,-9.4e-06,0.43,-5.2e-05,0.00092,0.00027,0,0,-4.9e+02,0.00029,0.0003,0.037,0.012,0.014,0.0051,0.038,0.041,0.03,3.8e-07,3.3e-07,2.8e-06,0.028,0.025,9.6e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +25590000,0.98,-0.013,-0.013,0.18,0.023,-0.05,0.053,0,0,-4.9e+02,-0.0014,-0.0058,-0.0001,0.031,-0.026,-0.13,0.2,-1e-05,0.43,-0.0001,0.00095,0.00027,0,0,-4.9e+02,0.00028,0.0003,0.037,0.011,0.013,0.0051,0.035,0.037,0.03,3.7e-07,3.2e-07,2.8e-06,0.027,0.025,9.6e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +25690000,0.98,-0.012,-0.012,0.18,0.023,-0.05,0.043,0,0,-4.9e+02,-0.0014,-0.0058,-9.9e-05,0.031,-0.026,-0.13,0.2,-1e-05,0.43,-9e-05,0.00097,0.00028,0,0,-4.9e+02,0.00029,0.0003,0.037,0.012,0.014,0.0051,0.038,0.041,0.03,3.7e-07,3.2e-07,2.8e-06,0.027,0.025,9.5e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +25790000,0.98,-0.012,-0.012,0.18,0.011,-0.041,0.043,0,0,-4.9e+02,-0.0014,-0.0058,-0.00013,0.033,-0.027,-0.13,0.2,-1.1e-05,0.43,-0.00016,0.00092,0.00028,0,0,-4.9e+02,0.00028,0.0003,0.037,0.011,0.013,0.0051,0.035,0.037,0.03,3.6e-07,3.2e-07,2.7e-06,0.027,0.025,9.5e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +25890000,0.98,-0.012,-0.012,0.18,0.0057,-0.04,0.045,0,0,-4.9e+02,-0.0014,-0.0058,-0.00015,0.033,-0.027,-0.13,0.2,-1.1e-05,0.43,-0.0002,0.0009,0.00026,0,0,-4.9e+02,0.00029,0.0003,0.037,0.012,0.014,0.0051,0.038,0.041,0.03,3.6e-07,3.2e-07,2.7e-06,0.027,0.025,9.5e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +25990000,0.98,-0.012,-0.012,0.18,-0.0033,-0.033,0.038,0,0,-4.9e+02,-0.0014,-0.0058,-0.00018,0.035,-0.027,-0.13,0.2,-1.2e-05,0.43,-0.00026,0.0009,0.00026,0,0,-4.9e+02,0.00029,0.0003,0.037,0.011,0.013,0.0051,0.035,0.037,0.03,3.6e-07,3.1e-07,2.6e-06,0.027,0.025,9.4e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +26090000,0.98,-0.012,-0.012,0.18,-0.0079,-0.033,0.037,0,0,-4.9e+02,-0.0014,-0.0058,-0.00016,0.035,-0.027,-0.13,0.2,-1.1e-05,0.43,-0.00024,0.00088,0.00028,0,0,-4.9e+02,0.00029,0.0003,0.037,0.012,0.014,0.0051,0.038,0.041,0.03,3.6e-07,3.1e-07,2.6e-06,0.027,0.025,9.4e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +26190000,0.98,-0.012,-0.013,0.18,-0.015,-0.026,0.033,0,0,-4.9e+02,-0.0014,-0.0058,-0.00017,0.036,-0.027,-0.13,0.2,-1.2e-05,0.43,-0.00025,0.00089,0.0003,0,0,-4.9e+02,0.00029,0.0003,0.037,0.011,0.013,0.005,0.035,0.037,0.03,3.5e-07,3.1e-07,2.5e-06,0.027,0.025,9.3e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +26290000,0.98,-0.012,-0.013,0.18,-0.015,-0.025,0.027,0,0,-4.9e+02,-0.0014,-0.0058,-0.00018,0.036,-0.028,-0.13,0.2,-1.2e-05,0.43,-0.00027,0.0009,0.00028,0,0,-4.9e+02,0.00029,0.0003,0.037,0.012,0.014,0.0051,0.038,0.04,0.03,3.5e-07,3.1e-07,2.5e-06,0.027,0.025,9.3e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +26390000,0.98,-0.011,-0.013,0.18,-0.021,-0.017,0.031,0,0,-4.9e+02,-0.0015,-0.0058,-0.00021,0.038,-0.028,-0.13,0.2,-1.4e-05,0.43,-0.00032,0.00089,0.00027,0,0,-4.9e+02,0.00029,0.0003,0.037,0.011,0.013,0.005,0.035,0.037,0.03,3.4e-07,3e-07,2.4e-06,0.027,0.025,9.3e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +26490000,0.98,-0.011,-0.013,0.18,-0.023,-0.015,0.04,0,0,-4.9e+02,-0.0014,-0.0058,-0.00021,0.038,-0.028,-0.13,0.2,-1.4e-05,0.43,-0.00033,0.00092,0.00028,0,0,-4.9e+02,0.00029,0.0003,0.037,0.012,0.014,0.0051,0.038,0.04,0.03,3.5e-07,3e-07,2.4e-06,0.027,0.025,9.3e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +26590000,0.98,-0.01,-0.013,0.18,-0.026,-0.0064,0.04,0,0,-4.9e+02,-0.0015,-0.0058,-0.00023,0.039,-0.028,-0.13,0.2,-1.5e-05,0.43,-0.00037,0.00096,0.00029,0,0,-4.9e+02,0.00029,0.0003,0.037,0.011,0.013,0.005,0.035,0.037,0.03,3.4e-07,3e-07,2.4e-06,0.027,0.025,9.2e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +26690000,0.98,-0.01,-0.013,0.18,-0.027,-0.0021,0.039,0,0,-4.9e+02,-0.0015,-0.0058,-0.00025,0.039,-0.029,-0.13,0.2,-1.6e-05,0.43,-0.00041,0.00097,0.0003,0,0,-4.9e+02,0.00029,0.0003,0.037,0.012,0.013,0.0051,0.038,0.04,0.03,3.4e-07,3e-07,2.3e-06,0.027,0.025,9.2e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +26790000,0.98,-0.0099,-0.012,0.18,-0.035,0.0022,0.038,0,0,-4.9e+02,-0.0015,-0.0058,-0.00026,0.039,-0.028,-0.13,0.2,-1.6e-05,0.43,-0.00043,0.00097,0.00031,0,0,-4.9e+02,0.00029,0.00029,0.037,0.011,0.013,0.005,0.035,0.037,0.03,3.3e-07,3e-07,2.3e-06,0.027,0.025,9.2e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +26890000,0.98,-0.0092,-0.012,0.18,-0.041,0.005,0.034,0,0,-4.9e+02,-0.0015,-0.0058,-0.00025,0.039,-0.028,-0.13,0.2,-1.5e-05,0.43,-0.00041,0.00095,0.0003,0,0,-4.9e+02,0.00029,0.00029,0.037,0.012,0.013,0.0051,0.038,0.04,0.03,3.4e-07,3e-07,2.3e-06,0.027,0.025,9.1e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +26990000,0.98,-0.0087,-0.013,0.18,-0.048,0.012,0.033,0,0,-4.9e+02,-0.0015,-0.0058,-0.00026,0.04,-0.028,-0.13,0.2,-1.6e-05,0.43,-0.00043,0.00094,0.00031,0,0,-4.9e+02,0.00029,0.00029,0.037,0.011,0.013,0.005,0.035,0.037,0.03,3.3e-07,2.9e-07,2.2e-06,0.027,0.024,9.1e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +27090000,0.98,-0.0085,-0.013,0.18,-0.05,0.019,0.036,0,0,-4.9e+02,-0.0015,-0.0058,-0.00026,0.04,-0.028,-0.13,0.2,-1.6e-05,0.43,-0.00043,0.00094,0.00032,0,0,-4.9e+02,0.00029,0.00029,0.037,0.012,0.013,0.005,0.038,0.04,0.03,3.3e-07,2.9e-07,2.2e-06,0.027,0.024,9.1e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +27190000,0.98,-0.0086,-0.013,0.18,-0.056,0.025,0.039,0,0,-4.9e+02,-0.0015,-0.0058,-0.00027,0.041,-0.029,-0.13,0.2,-1.6e-05,0.43,-0.00044,0.00094,0.00033,0,0,-4.9e+02,0.00029,0.00029,0.037,0.011,0.013,0.005,0.035,0.037,0.03,3.2e-07,2.9e-07,2.1e-06,0.027,0.024,9e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +27290000,0.98,-0.0087,-0.014,0.18,-0.063,0.031,0.15,0,0,-4.9e+02,-0.0015,-0.0058,-0.00027,0.041,-0.029,-0.13,0.2,-1.6e-05,0.43,-0.00045,0.00094,0.00033,0,0,-4.9e+02,0.00029,0.00029,0.037,0.012,0.013,0.005,0.038,0.04,0.03,3.3e-07,2.9e-07,2.1e-06,0.027,0.024,9e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +27390000,0.98,-0.01,-0.017,0.18,-0.071,0.038,0.48,0,0,-4.9e+02,-0.0015,-0.0058,-0.00027,0.041,-0.029,-0.13,0.2,-1.8e-05,0.43,-0.00051,0.00088,0.00038,0,0,-4.9e+02,0.00029,0.00029,0.037,0.011,0.012,0.005,0.035,0.037,0.03,3.2e-07,2.9e-07,2.1e-06,0.027,0.024,9e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +27490000,0.98,-0.011,-0.018,0.18,-0.075,0.043,0.79,0,0,-4.9e+02,-0.0015,-0.0058,-0.00029,0.041,-0.029,-0.13,0.2,-1.8e-05,0.43,-0.0005,0.00085,0.0004,0,0,-4.9e+02,0.00029,0.00029,0.037,0.012,0.013,0.005,0.038,0.04,0.03,3.2e-07,2.9e-07,2.1e-06,0.027,0.024,9e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +27590000,0.98,-0.011,-0.017,0.18,-0.07,0.046,0.89,0,0,-4.9e+02,-0.0015,-0.0058,-0.00028,0.041,-0.029,-0.13,0.2,-1.8e-05,0.43,-0.00048,0.0008,0.00043,0,0,-4.9e+02,0.00029,0.00029,0.037,0.011,0.012,0.005,0.035,0.037,0.03,3.2e-07,2.8e-07,2e-06,0.026,0.024,8.9e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +27690000,0.98,-0.01,-0.014,0.18,-0.066,0.042,0.79,0,0,-4.9e+02,-0.0015,-0.0058,-0.00028,0.041,-0.029,-0.13,0.2,-1.8e-05,0.43,-0.00046,0.00078,0.00041,0,0,-4.9e+02,0.00029,0.00029,0.037,0.011,0.013,0.005,0.038,0.04,0.03,3.2e-07,2.8e-07,2e-06,0.026,0.024,8.9e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +27790000,0.98,-0.0088,-0.013,0.18,-0.066,0.041,0.78,0,0,-4.9e+02,-0.0015,-0.0058,-0.00027,0.04,-0.029,-0.13,0.2,-1.9e-05,0.43,-0.00046,0.00074,0.0004,0,0,-4.9e+02,0.00029,0.00029,0.037,0.011,0.012,0.005,0.035,0.037,0.03,3.1e-07,2.8e-07,2e-06,0.026,0.024,8.9e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +27890000,0.98,-0.0085,-0.013,0.18,-0.072,0.048,0.82,0,0,-4.9e+02,-0.0015,-0.0058,-0.00027,0.04,-0.03,-0.13,0.2,-1.9e-05,0.43,-0.00046,0.00072,0.0004,0,0,-4.9e+02,0.00029,0.00029,0.037,0.012,0.013,0.005,0.038,0.04,0.03,3.1e-07,2.8e-07,1.9e-06,0.026,0.024,8.9e-05,0.0012,4e-05,0.0012,0.0013,0.0015,0.0012,1,1,0.01 +27990000,0.98,-0.0089,-0.013,0.18,-0.073,0.05,0.81,0,0,-4.9e+02,-0.0015,-0.0058,-0.00026,0.04,-0.029,-0.13,0.2,-1.9e-05,0.43,-0.00046,0.00065,0.00041,0,0,-4.9e+02,0.00029,0.00029,0.037,0.011,0.012,0.005,0.035,0.037,0.03,3.1e-07,2.8e-07,1.9e-06,0.026,0.024,8.8e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 +28090000,0.98,-0.0092,-0.013,0.18,-0.076,0.05,0.82,0,0,-4.9e+02,-0.0015,-0.0058,-0.00025,0.04,-0.029,-0.13,0.2,-1.9e-05,0.43,-0.00046,0.00067,0.0004,0,0,-4.9e+02,0.00029,0.00029,0.037,0.011,0.013,0.005,0.038,0.04,0.03,3.1e-07,2.8e-07,1.9e-06,0.026,0.024,8.8e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 +28190000,0.98,-0.0086,-0.013,0.18,-0.077,0.048,0.82,0,0,-4.9e+02,-0.0014,-0.0058,-0.00024,0.039,-0.029,-0.13,0.2,-1.9e-05,0.43,-0.00044,0.00064,0.0004,0,0,-4.9e+02,0.00029,0.00029,0.037,0.011,0.012,0.005,0.035,0.037,0.03,3e-07,2.7e-07,1.9e-06,0.026,0.024,8.8e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 +28290000,0.98,-0.0081,-0.014,0.18,-0.081,0.051,0.82,0,0,-4.9e+02,-0.0014,-0.0058,-0.00023,0.039,-0.03,-0.13,0.2,-1.9e-05,0.43,-0.00044,0.00065,0.00035,0,0,-4.9e+02,0.00029,0.00029,0.037,0.011,0.013,0.005,0.038,0.04,0.03,3.1e-07,2.7e-07,1.8e-06,0.026,0.024,8.8e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 +28390000,0.98,-0.0082,-0.014,0.18,-0.083,0.055,0.82,0,0,-4.9e+02,-0.0014,-0.0058,-0.00021,0.038,-0.03,-0.13,0.2,-2e-05,0.43,-0.00048,0.00055,0.00035,0,0,-4.9e+02,0.00029,0.00029,0.037,0.011,0.012,0.005,0.035,0.037,0.03,3e-07,2.7e-07,1.8e-06,0.026,0.024,8.7e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 +28490000,0.98,-0.0084,-0.015,0.18,-0.085,0.058,0.83,0,0,-4.9e+02,-0.0014,-0.0058,-0.00021,0.038,-0.03,-0.13,0.2,-2e-05,0.43,-0.00045,0.00054,0.00038,0,0,-4.9e+02,0.00029,0.00029,0.037,0.012,0.013,0.005,0.038,0.04,0.03,3e-07,2.7e-07,1.8e-06,0.026,0.024,8.7e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 +28590000,0.98,-0.0085,-0.015,0.18,-0.079,0.054,0.82,0,0,-4.9e+02,-0.0014,-0.0058,-0.00019,0.037,-0.029,-0.13,0.2,-2e-05,0.43,-0.00041,0.0005,0.00036,0,0,-4.9e+02,0.00029,0.00029,0.037,0.011,0.012,0.005,0.035,0.037,0.03,3e-07,2.7e-07,1.8e-06,0.026,0.024,8.7e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 +28690000,0.98,-0.0083,-0.014,0.18,-0.078,0.055,0.82,0,0,-4.9e+02,-0.0014,-0.0058,-0.00019,0.037,-0.03,-0.13,0.2,-2e-05,0.43,-0.00039,0.0005,0.00036,0,0,-4.9e+02,0.00029,0.00029,0.037,0.011,0.013,0.005,0.038,0.04,0.03,3e-07,2.7e-07,1.7e-06,0.026,0.024,8.7e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 +28790000,0.98,-0.0076,-0.014,0.18,-0.076,0.055,0.82,0,0,-4.9e+02,-0.0014,-0.0058,-0.00017,0.037,-0.03,-0.13,0.2,-2.2e-05,0.43,-0.00041,0.00038,0.00034,0,0,-4.9e+02,0.00029,0.00029,0.036,0.011,0.012,0.005,0.035,0.036,0.03,2.9e-07,2.7e-07,1.7e-06,0.026,0.024,8.6e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 +28890000,0.98,-0.0074,-0.014,0.18,-0.08,0.057,0.82,0,0,-4.9e+02,-0.0014,-0.0058,-0.00016,0.037,-0.03,-0.13,0.2,-2.2e-05,0.43,-0.0004,0.0004,0.00031,0,0,-4.9e+02,0.00029,0.00029,0.036,0.011,0.013,0.005,0.038,0.04,0.03,3e-07,2.7e-07,1.7e-06,0.026,0.024,8.6e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 +28990000,0.98,-0.0072,-0.014,0.18,-0.077,0.055,0.82,0,0,-4.9e+02,-0.0014,-0.0058,-0.00015,0.036,-0.03,-0.13,0.2,-2.3e-05,0.43,-0.00044,0.00024,0.00034,0,0,-4.9e+02,0.00029,0.00029,0.036,0.011,0.012,0.005,0.035,0.036,0.03,2.9e-07,2.6e-07,1.7e-06,0.026,0.024,8.6e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 +29090000,0.98,-0.0071,-0.014,0.18,-0.08,0.056,0.82,0,0,-4.9e+02,-0.0014,-0.0058,-0.00015,0.036,-0.03,-0.13,0.2,-2.3e-05,0.43,-0.00046,0.00022,0.00034,0,0,-4.9e+02,0.00029,0.00029,0.036,0.011,0.013,0.005,0.038,0.04,0.03,2.9e-07,2.6e-07,1.7e-06,0.026,0.024,8.6e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 +29190000,0.98,-0.007,-0.014,0.18,-0.078,0.056,0.82,0,0,-4.9e+02,-0.0014,-0.0058,-0.00013,0.035,-0.03,-0.13,0.2,-2.5e-05,0.43,-0.00049,5.5e-05,0.00033,0,0,-4.9e+02,0.00029,0.00029,0.036,0.011,0.012,0.005,0.035,0.036,0.03,2.9e-07,2.6e-07,1.6e-06,0.026,0.024,8.6e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 +29290000,0.98,-0.0072,-0.014,0.18,-0.081,0.062,0.82,0,0,-4.9e+02,-0.0014,-0.0058,-0.00012,0.035,-0.03,-0.13,0.2,-2.5e-05,0.43,-0.00048,2.7e-05,0.00034,0,0,-4.9e+02,0.00029,0.00029,0.036,0.011,0.013,0.005,0.038,0.04,0.03,2.9e-07,2.6e-07,1.6e-06,0.026,0.024,8.5e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 +29390000,0.98,-0.0077,-0.013,0.18,-0.077,0.06,0.82,0,0,-4.9e+02,-0.0014,-0.0058,-0.00011,0.034,-0.03,-0.13,0.2,-2.7e-05,0.43,-0.00052,-0.00012,0.00034,0,0,-4.9e+02,0.00029,0.00029,0.036,0.011,0.012,0.005,0.035,0.036,0.03,2.9e-07,2.6e-07,1.6e-06,0.026,0.024,8.5e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 +29490000,0.98,-0.0077,-0.013,0.18,-0.08,0.061,0.82,0,0,-4.9e+02,-0.0014,-0.0058,-9.4e-05,0.034,-0.03,-0.13,0.2,-2.7e-05,0.43,-0.00054,-0.0001,0.00031,0,0,-4.9e+02,0.00029,0.00029,0.036,0.011,0.013,0.005,0.038,0.04,0.03,2.9e-07,2.6e-07,1.6e-06,0.026,0.024,8.5e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 +29590000,0.98,-0.0076,-0.013,0.18,-0.077,0.06,0.83,0,0,-4.9e+02,-0.0014,-0.0058,-6.8e-05,0.032,-0.03,-0.13,0.2,-2.9e-05,0.43,-0.00059,-0.00024,0.00029,0,0,-4.9e+02,0.00029,0.00029,0.036,0.011,0.012,0.005,0.035,0.036,0.03,2.8e-07,2.6e-07,1.5e-06,0.026,0.024,8.5e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 +29690000,0.98,-0.0076,-0.013,0.18,-0.082,0.059,0.82,0,0,-4.9e+02,-0.0014,-0.0058,-5.7e-05,0.033,-0.03,-0.13,0.2,-2.9e-05,0.43,-0.0006,-0.00021,0.00026,0,0,-4.9e+02,0.00029,0.00029,0.036,0.011,0.013,0.005,0.038,0.04,0.03,2.8e-07,2.6e-07,1.5e-06,0.026,0.024,8.5e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 +29790000,0.98,-0.0074,-0.013,0.18,-0.079,0.053,0.82,0,0,-4.9e+02,-0.0014,-0.0058,-3.2e-05,0.031,-0.03,-0.13,0.2,-3.1e-05,0.43,-0.00066,-0.00037,0.00025,0,0,-4.9e+02,0.00029,0.00029,0.036,0.011,0.012,0.005,0.035,0.036,0.03,2.8e-07,2.6e-07,1.5e-06,0.026,0.024,8.4e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 +29890000,0.98,-0.0069,-0.014,0.18,-0.08,0.054,0.82,0,0,-4.9e+02,-0.0014,-0.0058,-2.2e-05,0.031,-0.03,-0.13,0.2,-3.1e-05,0.43,-0.00068,-0.00035,0.00023,0,0,-4.9e+02,0.00029,0.00029,0.036,0.011,0.013,0.005,0.038,0.04,0.03,2.8e-07,2.6e-07,1.5e-06,0.026,0.024,8.4e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 +29990000,0.98,-0.0071,-0.014,0.18,-0.075,0.049,0.81,0,0,-4.9e+02,-0.0014,-0.0058,-4.2e-06,0.03,-0.031,-0.13,0.2,-3.3e-05,0.43,-0.00067,-0.00043,0.00023,0,0,-4.9e+02,0.00029,0.00029,0.036,0.011,0.012,0.0049,0.035,0.036,0.03,2.8e-07,2.5e-07,1.5e-06,0.026,0.024,8.4e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 +30090000,0.98,-0.0072,-0.014,0.18,-0.076,0.05,0.81,0,0,-4.9e+02,-0.0014,-0.0058,-2.1e-05,0.03,-0.031,-0.13,0.2,-3.4e-05,0.43,-0.00062,-0.0005,0.00029,0,0,-4.9e+02,0.00029,0.00029,0.036,0.011,0.013,0.005,0.038,0.04,0.029,2.8e-07,2.5e-07,1.5e-06,0.026,0.024,8.4e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 +30190000,0.98,-0.0072,-0.014,0.18,-0.071,0.046,0.81,0,0,-4.9e+02,-0.0014,-0.0058,-2.5e-05,0.03,-0.031,-0.13,0.2,-3.6e-05,0.43,-0.00063,-0.00074,0.00036,0,0,-4.9e+02,0.00029,0.00029,0.036,0.011,0.012,0.0049,0.035,0.036,0.03,2.8e-07,2.5e-07,1.4e-06,0.026,0.023,8.4e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 +30290000,0.98,-0.0073,-0.014,0.18,-0.071,0.046,0.81,0,0,-4.9e+02,-0.0014,-0.0058,-2.2e-05,0.03,-0.031,-0.13,0.2,-3.5e-05,0.43,-0.00067,-0.0008,0.00036,0,0,-4.9e+02,0.00029,0.00029,0.036,0.011,0.013,0.005,0.038,0.04,0.03,2.8e-07,2.5e-07,1.4e-06,0.026,0.023,8.3e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 +30390000,0.98,-0.0073,-0.013,0.18,-0.065,0.041,0.81,0,0,-4.9e+02,-0.0014,-0.0058,3.5e-06,0.029,-0.032,-0.13,0.2,-3.7e-05,0.43,-0.00083,-0.0011,0.00035,0,0,-4.9e+02,0.00029,0.00029,0.036,0.011,0.012,0.0049,0.035,0.036,0.029,2.7e-07,2.5e-07,1.4e-06,0.025,0.023,8.3e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 +30490000,0.98,-0.0073,-0.014,0.17,-0.068,0.041,0.81,0,0,-4.9e+02,-0.0014,-0.0058,1.3e-05,0.029,-0.032,-0.13,0.2,-3.7e-05,0.43,-0.00088,-0.0011,0.00033,0,0,-4.9e+02,0.00029,0.00029,0.036,0.011,0.013,0.005,0.038,0.04,0.03,2.7e-07,2.5e-07,1.4e-06,0.025,0.023,8.3e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 +30590000,0.98,-0.0076,-0.014,0.17,-0.064,0.039,0.81,0,0,-4.9e+02,-0.0014,-0.0058,3.6e-05,0.028,-0.033,-0.13,0.2,-3.8e-05,0.43,-0.00099,-0.0012,0.00032,0,0,-4.9e+02,0.00029,0.00029,0.036,0.011,0.012,0.0049,0.035,0.036,0.029,2.7e-07,2.5e-07,1.4e-06,0.025,0.023,8.3e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 +30690000,0.98,-0.008,-0.014,0.17,-0.062,0.038,0.81,0,0,-4.9e+02,-0.0014,-0.0058,3.5e-05,0.028,-0.033,-0.13,0.2,-3.8e-05,0.43,-0.00096,-0.0011,0.00032,0,0,-4.9e+02,0.00029,0.00029,0.036,0.011,0.013,0.0049,0.038,0.04,0.029,2.7e-07,2.5e-07,1.4e-06,0.025,0.023,8.3e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 +30790000,0.98,-0.0077,-0.014,0.17,-0.056,0.032,0.81,0,0,-4.9e+02,-0.0013,-0.0058,4.1e-05,0.028,-0.033,-0.13,0.2,-3.9e-05,0.43,-0.001,-0.0014,0.00035,0,0,-4.9e+02,0.00029,0.00029,0.036,0.011,0.012,0.0049,0.035,0.036,0.03,2.7e-07,2.5e-07,1.3e-06,0.025,0.023,8.3e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 +30890000,0.98,-0.0071,-0.014,0.17,-0.056,0.029,0.81,0,0,-4.9e+02,-0.0013,-0.0058,3e-05,0.028,-0.034,-0.12,0.2,-4e-05,0.43,-0.00094,-0.0013,0.00038,0,0,-4.9e+02,0.00029,0.00029,0.036,0.011,0.013,0.0049,0.038,0.04,0.03,2.7e-07,2.5e-07,1.3e-06,0.025,0.023,8.2e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 +30990000,0.98,-0.0073,-0.013,0.17,-0.048,0.023,0.81,0,0,-4.9e+02,-0.0013,-0.0057,4.1e-05,0.028,-0.035,-0.12,0.2,-4.1e-05,0.43,-0.00097,-0.0015,0.0004,0,0,-4.9e+02,0.00029,0.00029,0.036,0.011,0.012,0.0049,0.035,0.036,0.029,2.7e-07,2.4e-07,1.3e-06,0.025,0.023,8.2e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 +31090000,0.98,-0.0075,-0.014,0.17,-0.047,0.022,0.81,0,0,-4.9e+02,-0.0013,-0.0057,3.4e-05,0.028,-0.035,-0.12,0.2,-4.2e-05,0.43,-0.00092,-0.0014,0.00042,0,0,-4.9e+02,0.00029,0.00029,0.036,0.011,0.013,0.0049,0.038,0.039,0.03,2.7e-07,2.4e-07,1.3e-06,0.025,0.023,8.2e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 +31190000,0.98,-0.0077,-0.014,0.17,-0.042,0.018,0.81,0,0,-4.9e+02,-0.0013,-0.0057,5.6e-05,0.027,-0.036,-0.12,0.2,-4.3e-05,0.43,-0.001,-0.0015,0.00041,0,0,-4.9e+02,0.00029,0.00029,0.036,0.011,0.012,0.0049,0.035,0.036,0.029,2.6e-07,2.4e-07,1.3e-06,0.025,0.023,8.2e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 +31290000,0.98,-0.0079,-0.014,0.17,-0.04,0.015,0.81,0,0,-4.9e+02,-0.0013,-0.0057,6.3e-05,0.028,-0.036,-0.12,0.2,-4.2e-05,0.43,-0.0011,-0.0014,0.00039,0,0,-4.9e+02,0.00029,0.00029,0.035,0.011,0.013,0.0049,0.038,0.039,0.029,2.6e-07,2.4e-07,1.3e-06,0.025,0.023,8.2e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 +31390000,0.98,-0.0077,-0.013,0.17,-0.035,0.009,0.81,0,0,-4.9e+02,-0.0013,-0.0057,6.2e-05,0.027,-0.036,-0.12,0.2,-4.1e-05,0.43,-0.0012,-0.0018,0.00044,0,0,-4.9e+02,0.00029,0.00028,0.035,0.011,0.012,0.0049,0.035,0.036,0.029,2.6e-07,2.4e-07,1.2e-06,0.025,0.023,8.2e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 +31490000,0.98,-0.0075,-0.014,0.17,-0.036,0.0059,0.81,0,0,-4.9e+02,-0.0013,-0.0057,5.9e-05,0.027,-0.036,-0.12,0.2,-4e-05,0.43,-0.0012,-0.002,0.00046,0,0,-4.9e+02,0.00029,0.00028,0.035,0.011,0.013,0.0049,0.038,0.039,0.03,2.6e-07,2.4e-07,1.2e-06,0.025,0.023,8.2e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 +31590000,0.99,-0.0074,-0.014,0.17,-0.032,0.0041,0.82,0,0,-4.9e+02,-0.0013,-0.0057,7.2e-05,0.027,-0.037,-0.12,0.2,-4e-05,0.43,-0.0014,-0.0022,0.00047,0,0,-4.9e+02,0.00029,0.00028,0.035,0.011,0.012,0.0049,0.035,0.036,0.029,2.6e-07,2.4e-07,1.2e-06,0.025,0.023,8.1e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 +31690000,0.99,-0.0073,-0.015,0.17,-0.035,0.0032,0.81,0,0,-4.9e+02,-0.0013,-0.0057,8.3e-05,0.027,-0.037,-0.12,0.2,-3.9e-05,0.43,-0.0015,-0.0022,0.00045,0,0,-4.9e+02,0.00029,0.00028,0.035,0.011,0.013,0.0049,0.038,0.039,0.029,2.6e-07,2.4e-07,1.2e-06,0.025,0.023,8.1e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 +31790000,0.99,-0.0076,-0.015,0.17,-0.026,0.00071,0.81,0,0,-4.9e+02,-0.0013,-0.0057,8.9e-05,0.027,-0.037,-0.12,0.2,-3.8e-05,0.43,-0.0016,-0.0023,0.00048,0,0,-4.9e+02,0.00029,0.00028,0.035,0.011,0.012,0.0049,0.035,0.036,0.029,2.6e-07,2.4e-07,1.2e-06,0.025,0.023,8.1e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 +31890000,0.99,-0.0073,-0.015,0.17,-0.024,-0.0017,0.81,0,0,-4.9e+02,-0.0013,-0.0057,9.5e-05,0.028,-0.037,-0.12,0.2,-3.7e-05,0.43,-0.0017,-0.0025,0.0005,0,0,-4.9e+02,0.00029,0.00028,0.035,0.011,0.013,0.0049,0.038,0.039,0.029,2.6e-07,2.4e-07,1.2e-06,0.025,0.023,8.1e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 +31990000,0.99,-0.0076,-0.015,0.17,-0.016,-0.0026,0.81,0,0,-4.9e+02,-0.0013,-0.0057,9e-05,0.028,-0.038,-0.12,0.2,-3.7e-05,0.43,-0.0016,-0.0026,0.00056,0,0,-4.9e+02,0.00028,0.00028,0.035,0.011,0.012,0.0049,0.035,0.036,0.029,2.5e-07,2.4e-07,1.2e-06,0.025,0.023,8.1e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 +32090000,0.99,-0.008,-0.014,0.17,-0.018,-0.0061,0.81,0,0,-4.9e+02,-0.0013,-0.0057,9e-05,0.028,-0.038,-0.12,0.2,-3.6e-05,0.43,-0.0017,-0.0027,0.00057,0,0,-4.9e+02,0.00028,0.00028,0.035,0.011,0.013,0.0049,0.038,0.039,0.03,2.6e-07,2.4e-07,1.2e-06,0.025,0.023,8.1e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 +32190000,0.99,-0.0082,-0.014,0.17,-0.012,-0.0095,0.81,0,0,-4.9e+02,-0.0013,-0.0057,8.2e-05,0.029,-0.038,-0.12,0.2,-3.5e-05,0.43,-0.0017,-0.0029,0.00062,0,0,-4.9e+02,0.00028,0.00028,0.035,0.011,0.012,0.0049,0.035,0.036,0.029,2.5e-07,2.3e-07,1.1e-06,0.025,0.023,8e-05,0.0012,4e-05,0.0012,0.0013,0.0014,0.0012,1,1,0.01 +32290000,0.99,-0.0081,-0.015,0.17,-0.012,-0.012,0.81,0,0,-4.9e+02,-0.0013,-0.0057,8.9e-05,0.029,-0.038,-0.12,0.2,-3.4e-05,0.43,-0.0018,-0.003,0.00063,0,0,-4.9e+02,0.00028,0.00028,0.035,0.011,0.013,0.0049,0.038,0.039,0.029,2.5e-07,2.4e-07,1.1e-06,0.025,0.023,8e-05,0.0012,4e-05,0.0012,0.0012,0.0014,0.0012,1,1,0.01 +32390000,0.99,-0.0082,-0.015,0.17,-0.0058,-0.014,0.81,0,0,-4.9e+02,-0.0013,-0.0057,8.4e-05,0.029,-0.038,-0.12,0.2,-3.2e-05,0.43,-0.0019,-0.0033,0.00069,0,0,-4.9e+02,0.00028,0.00028,0.035,0.011,0.012,0.0049,0.035,0.036,0.029,2.5e-07,2.3e-07,1.1e-06,0.025,0.023,8e-05,0.0012,4e-05,0.0012,0.0012,0.0014,0.0012,1,1,0.01 +32490000,0.99,-0.011,-0.013,0.17,0.019,-0.08,-0.062,0,0,-4.9e+02,-0.0013,-0.0057,7.8e-05,0.029,-0.038,-0.12,0.2,-3.3e-05,0.43,-0.0018,-0.0032,0.00069,0,0,-4.9e+02,0.00028,0.00028,0.035,0.012,0.014,0.0049,0.038,0.039,0.029,2.5e-07,2.3e-07,1.1e-06,0.025,0.023,8e-05,0.0012,4e-05,0.0012,0.0012,0.0014,0.0012,1,1,0.01 +32590000,0.99,-0.011,-0.013,0.17,0.022,-0.081,-0.065,0,0,-4.9e+02,-0.0013,-0.0057,7.5e-05,0.029,-0.038,-0.12,0.2,-3.3e-05,0.43,-0.0017,-0.0028,0.00076,0,0,-4.9e+02,0.00028,0.00028,0.035,0.012,0.013,0.0049,0.035,0.036,0.029,2.5e-07,2.3e-07,1.1e-06,0.025,0.023,8e-05,0.0012,4e-05,0.0012,0.0012,0.0014,0.0012,1,1,0.01 +32690000,0.99,-0.011,-0.013,0.17,0.017,-0.087,-0.066,0,0,-4.9e+02,-0.0013,-0.0057,7.3e-05,0.029,-0.038,-0.12,0.2,-3.3e-05,0.43,-0.0017,-0.0028,0.00075,0,0,-4.9e+02,0.00028,0.00028,0.034,0.012,0.014,0.0049,0.038,0.04,0.029,2.5e-07,2.3e-07,1.1e-06,0.025,0.023,8e-05,0.0012,4e-05,0.0012,0.0012,0.0014,0.0012,1,1,0.01 +32790000,0.99,-0.011,-0.013,0.17,0.018,-0.086,-0.067,0,0,-4.9e+02,-0.0013,-0.0057,7e-05,0.029,-0.038,-0.12,0.2,-3.1e-05,0.43,-0.0018,-0.0027,0.00083,0,0,-4.9e+02,0.00028,0.00028,0.034,0.011,0.013,0.0049,0.035,0.036,0.029,2.5e-07,2.3e-07,1.1e-06,0.025,0.023,8e-05,0.0012,4e-05,0.0012,0.0012,0.0014,0.0012,1,1,0.01 +32890000,0.99,-0.011,-0.013,0.17,0.018,-0.092,-0.068,0,0,-4.9e+02,-0.0013,-0.0057,7.4e-05,0.029,-0.038,-0.12,0.2,-3.1e-05,0.43,-0.0018,-0.0026,0.00084,0,0,-4.9e+02,0.00028,0.00028,0.034,0.012,0.014,0.0049,0.038,0.04,0.029,2.5e-07,2.3e-07,1.1e-06,0.025,0.023,8.1e-05,0.0012,4e-05,0.0012,0.0012,0.0013,0.0012,1,1,0.01 +32990000,0.99,-0.011,-0.013,0.17,0.018,-0.091,-0.068,0,0,-4.9e+02,-0.0013,-0.0057,7.5e-05,0.029,-0.038,-0.12,0.2,-2.9e-05,0.43,-0.0018,-0.0025,0.0009,0,0,-4.9e+02,0.00028,0.00027,0.034,0.011,0.013,0.0049,0.035,0.036,0.029,2.4e-07,2.3e-07,1e-06,0.025,0.023,8.1e-05,0.0012,4e-05,0.0012,0.0012,0.0013,0.0012,1,1,0.01 +33090000,0.99,-0.011,-0.013,0.17,0.014,-0.096,-0.065,0,0,-4.9e+02,-0.0013,-0.0057,7.5e-05,0.029,-0.038,-0.12,0.2,-2.9e-05,0.43,-0.0018,-0.0025,0.0009,0,0,-4.9e+02,0.00028,0.00027,0.034,0.012,0.014,0.0049,0.038,0.04,0.029,2.5e-07,2.3e-07,1e-06,0.025,0.023,8.1e-05,0.0012,4e-05,0.0012,0.0012,0.0013,0.0012,1,1,0.01 +33190000,0.99,-0.011,-0.013,0.17,0.012,-0.096,-0.064,0,0,-4.9e+02,-0.0013,-0.0057,6.2e-05,0.03,-0.037,-0.12,0.2,-2.7e-05,0.43,-0.0018,-0.0025,0.00093,0,0,-4.9e+02,0.00027,0.00027,0.034,0.011,0.013,0.0049,0.035,0.036,0.029,2.4e-07,2.3e-07,1e-06,0.025,0.023,8e-05,0.0012,4e-05,0.0012,0.0012,0.0013,0.0012,1,1,0.01 +33290000,0.99,-0.011,-0.013,0.17,0.0084,-0.098,-0.064,0,0,-4.9e+02,-0.0014,-0.0057,7.6e-05,0.03,-0.037,-0.12,0.2,-2.6e-05,0.43,-0.0019,-0.0026,0.00096,0,0,-4.9e+02,0.00027,0.00027,0.034,0.012,0.013,0.0049,0.038,0.04,0.029,2.4e-07,2.3e-07,1e-06,0.025,0.023,8e-05,0.0012,4e-05,0.0012,0.0012,0.0013,0.0012,1,1,0.01 +33390000,0.99,-0.011,-0.013,0.17,0.0062,-0.092,-0.062,0,0,-4.9e+02,-0.0014,-0.0057,6.5e-05,0.033,-0.036,-0.12,0.2,-2.3e-05,0.43,-0.0019,-0.0025,0.001,0,0,-4.9e+02,0.00027,0.00027,0.034,0.011,0.013,0.0049,0.035,0.036,0.029,2.4e-07,2.3e-07,1e-06,0.025,0.023,8e-05,0.0012,4e-05,0.0012,0.0012,0.0013,0.0012,1,1,0.033 +33490000,0.99,-0.011,-0.013,0.17,0.00093,-0.095,-0.061,0,0,-4.9e+02,-0.0014,-0.0057,7.1e-05,0.033,-0.036,-0.12,0.2,-2.1e-05,0.43,-0.0021,-0.0027,0.001,0,0,-4.9e+02,0.00027,0.00027,0.034,0.012,0.013,0.0049,0.038,0.04,0.029,2.4e-07,2.3e-07,1e-06,0.025,0.023,8e-05,0.0012,4e-05,0.0012,0.0012,0.0013,0.0012,1,1,0.058 +33590000,0.99,-0.01,-0.013,0.17,-0.0018,-0.093,-0.058,0,0,-4.9e+02,-0.0014,-0.0057,6.9e-05,0.034,-0.035,-0.12,0.2,-1.6e-05,0.43,-0.0022,-0.0028,0.0011,0,0,-4.9e+02,0.00027,0.00027,0.034,0.011,0.012,0.0049,0.035,0.036,0.029,2.4e-07,2.2e-07,9.9e-07,0.024,0.023,8e-05,0.0012,4e-05,0.0012,0.0012,0.0013,0.0012,1,1,0.083 +33690000,0.99,-0.01,-0.013,0.17,-0.0051,-0.097,-0.059,0,0,-4.9e+02,-0.0014,-0.0057,7.4e-05,0.034,-0.035,-0.12,0.2,-1.8e-05,0.43,-0.0021,-0.0026,0.0011,0,0,-4.9e+02,0.00027,0.00027,0.034,0.012,0.013,0.0049,0.038,0.04,0.029,2.4e-07,2.3e-07,9.8e-07,0.024,0.023,8e-05,0.0012,4e-05,0.0012,0.0012,0.0013,0.0012,1,1,0.11 +33790000,0.99,-0.01,-0.013,0.17,-0.007,-0.094,-0.054,0,0,-4.9e+02,-0.0014,-0.0057,6e-05,0.036,-0.035,-0.12,0.2,-1.6e-05,0.43,-0.0021,-0.0024,0.0011,0,0,-4.9e+02,0.00027,0.00026,0.034,0.011,0.012,0.0049,0.035,0.036,0.029,2.4e-07,2.2e-07,9.7e-07,0.024,0.023,8e-05,0.0012,4e-05,0.0012,0.0012,0.0013,0.0012,1,1,0.13 +33890000,0.99,-0.01,-0.013,0.17,-0.011,-0.095,-0.053,0,0,-4.9e+02,-0.0014,-0.0057,7.3e-05,0.036,-0.035,-0.12,0.2,-1.6e-05,0.43,-0.0021,-0.0024,0.0012,0,0,-4.9e+02,0.00027,0.00027,0.034,0.012,0.013,0.0049,0.038,0.04,0.029,2.4e-07,2.2e-07,9.6e-07,0.024,0.023,7.9e-05,0.0012,4e-05,0.0012,0.0012,0.0013,0.0012,1,1,0.16 +33990000,0.99,-0.01,-0.013,0.17,-0.012,-0.09,-0.05,0,0,-4.9e+02,-0.0014,-0.0057,5.5e-05,0.038,-0.034,-0.12,0.2,-1.2e-05,0.43,-0.0021,-0.0023,0.0012,0,0,-4.9e+02,0.00027,0.00026,0.034,0.011,0.012,0.0049,0.035,0.036,0.029,2.4e-07,2.2e-07,9.5e-07,0.024,0.023,7.9e-05,0.0012,4e-05,0.0012,0.0012,0.0013,0.0012,1,1,0.18 +34090000,0.99,-0.01,-0.013,0.17,-0.016,-0.094,-0.049,0,0,-4.9e+02,-0.0014,-0.0057,5.8e-05,0.038,-0.035,-0.12,0.2,-1.3e-05,0.43,-0.0021,-0.0022,0.0012,0,0,-4.9e+02,0.00027,0.00026,0.034,0.012,0.013,0.0049,0.038,0.04,0.029,2.4e-07,2.2e-07,9.5e-07,0.024,0.023,7.9e-05,0.0012,4e-05,0.0012,0.0012,0.0013,0.0012,1,1,0.21 +34190000,0.98,-0.01,-0.014,0.17,-0.017,-0.089,-0.046,0,0,-4.9e+02,-0.0014,-0.0057,5.1e-05,0.04,-0.034,-0.12,0.2,-1e-05,0.43,-0.002,-0.0021,0.0012,0,0,-4.9e+02,0.00026,0.00026,0.034,0.011,0.012,0.0049,0.035,0.036,0.029,2.3e-07,2.2e-07,9.3e-07,0.024,0.023,7.9e-05,0.0012,4e-05,0.0012,0.0012,0.0013,0.0012,1,1,0.23 +34290000,0.98,-0.0098,-0.014,0.17,-0.018,-0.093,-0.045,0,0,-4.9e+02,-0.0014,-0.0057,6e-05,0.04,-0.034,-0.12,0.2,-9.5e-06,0.43,-0.0021,-0.0021,0.0012,0,0,-4.9e+02,0.00026,0.00026,0.034,0.012,0.013,0.0049,0.038,0.04,0.029,2.4e-07,2.2e-07,9.3e-07,0.024,0.023,7.9e-05,0.0012,4e-05,0.0012,0.0012,0.0013,0.0012,1,1,0.26 +34390000,0.98,-0.0097,-0.014,0.17,-0.02,-0.087,-0.041,0,0,-4.9e+02,-0.0014,-0.0057,5e-05,0.042,-0.034,-0.12,0.2,-7.1e-06,0.43,-0.002,-0.002,0.0013,0,0,-4.9e+02,0.00026,0.00026,0.034,0.011,0.012,0.0049,0.035,0.036,0.029,2.3e-07,2.2e-07,9.2e-07,0.024,0.023,7.9e-05,0.0012,4e-05,0.0012,0.0012,0.0013,0.0012,1,1,0.28 +34490000,0.98,-0.0097,-0.014,0.17,-0.023,-0.09,-0.039,0,0,-4.9e+02,-0.0014,-0.0056,6e-05,0.042,-0.034,-0.12,0.2,-7e-06,0.43,-0.0021,-0.002,0.0013,0,0,-4.9e+02,0.00026,0.00026,0.034,0.012,0.013,0.0049,0.038,0.04,0.029,2.3e-07,2.2e-07,9.1e-07,0.024,0.023,7.9e-05,0.0012,4e-05,0.0012,0.0012,0.0013,0.0012,1,1,0.31 +34590000,0.98,-0.0096,-0.014,0.17,-0.025,-0.082,0.76,0,0,-4.9e+02,-0.0014,-0.0056,5e-05,0.043,-0.034,-0.12,0.2,-4e-06,0.43,-0.0021,-0.002,0.0013,0,0,-4.9e+02,0.00026,0.00026,0.034,0.011,0.011,0.0048,0.035,0.036,0.029,2.3e-07,2.2e-07,9e-07,0.024,0.023,7.8e-05,0.0012,4e-05,0.0012,0.0012,0.0013,0.0012,1,1,0.33 +34690000,0.98,-0.0096,-0.013,0.17,-0.03,-0.08,1.7,0,0,-4.9e+02,-0.0014,-0.0056,5.4e-05,0.044,-0.034,-0.12,0.2,-3.7e-06,0.43,-0.0021,-0.002,0.0013,0,0,-4.9e+02,0.00026,0.00026,0.034,0.011,0.012,0.0049,0.038,0.04,0.029,2.3e-07,2.2e-07,8.9e-07,0.024,0.023,7.8e-05,0.0012,4e-05,0.0012,0.0012,0.0013,0.0012,1,1,0.36 +34790000,0.98,-0.0095,-0.013,0.17,-0.034,-0.071,2.7,0,0,-4.9e+02,-0.0014,-0.0056,4.5e-05,0.046,-0.035,-0.12,0.2,-5.6e-07,0.43,-0.0021,-0.0019,0.0013,0,0,-4.9e+02,0.00026,0.00026,0.034,0.011,0.011,0.0049,0.035,0.036,0.029,2.3e-07,2.2e-07,8.8e-07,0.024,0.023,7.8e-05,0.0012,4e-05,0.0012,0.0012,0.0013,0.0012,1,1,0.38 +34890000,0.98,-0.0094,-0.013,0.17,-0.039,-0.069,3.7,0,0,-4.9e+02,-0.0014,-0.0056,4.9e-05,0.047,-0.035,-0.12,0.2,-4.6e-07,0.43,-0.0022,-0.0019,0.0014,0,0,-4.9e+02,0.00026,0.00026,0.034,0.012,0.013,0.0049,0.038,0.039,0.029,2.3e-07,2.2e-07,8.8e-07,0.024,0.023,7.8e-05,0.0012,4e-05,0.0012,0.0012,0.0013,0.0012,1,1,0.41 diff --git a/src/modules/ekf2/test/sensor_simulator/ekf_wrapper.cpp b/src/modules/ekf2/test/sensor_simulator/ekf_wrapper.cpp index 635b9b2704..26b2c9f2a9 100644 --- a/src/modules/ekf2/test/sensor_simulator/ekf_wrapper.cpp +++ b/src/modules/ekf2/test/sensor_simulator/ekf_wrapper.cpp @@ -4,12 +4,27 @@ EkfWrapper::EkfWrapper(std::shared_ptr ekf): _ekf{ekf} { _ekf_params = _ekf->getParamHandle(); + _fc = _ekf->getFusionControlHandle(); + + _fc->gps.enabled = true; + _fc->of.enabled = true; + _fc->ev.enabled = true; + _fc->baro.enabled = true; + _fc->rng.enabled = true; + _fc->mag.enabled = true; + _fc->aspd.enabled = true; + _fc->rngbcn.enabled = true; + + for (int i = 0; i < MAX_AGP_INSTANCES; i++) { + _fc->agp[i].enabled = true; + } } EkfWrapper::~EkfWrapper() { } + void EkfWrapper::setBaroHeightRef() { _ekf_params->ekf2_hgt_ref = static_cast(HeightSensor::BARO); @@ -18,6 +33,7 @@ void EkfWrapper::setBaroHeightRef() void EkfWrapper::enableBaroHeightFusion() { _ekf_params->ekf2_baro_ctrl = 1; + _fc->baro.enabled = true; } void EkfWrapper::disableBaroHeightFusion() @@ -58,6 +74,7 @@ void EkfWrapper::setRangeHeightRef() void EkfWrapper::enableRangeHeightFusion() { _ekf_params->ekf2_rng_ctrl = static_cast(RngCtrl::ENABLED); + _fc->rng.enabled = true; } void EkfWrapper::disableRangeHeightFusion() @@ -148,6 +165,7 @@ bool EkfWrapper::isIntendingGpsHeadingFusion() const void EkfWrapper::enableFlowFusion() { _ekf_params->ekf2_of_ctrl = 1; + _fc->of.enabled = true; } void EkfWrapper::disableFlowFusion() diff --git a/src/modules/ekf2/test/sensor_simulator/ekf_wrapper.h b/src/modules/ekf2/test/sensor_simulator/ekf_wrapper.h index 4e36c19676..4cc7ce1511 100644 --- a/src/modules/ekf2/test/sensor_simulator/ekf_wrapper.h +++ b/src/modules/ekf2/test/sensor_simulator/ekf_wrapper.h @@ -134,8 +134,9 @@ public: private: std::shared_ptr _ekf; - // Pointer to Ekf internal param struct + // Pointers to Ekf internal structs parameters *_ekf_params; + FusionControl *_fc; }; #endif // !EKF_EKF_WRAPPER_H diff --git a/src/modules/ekf2/test/sensor_simulator/gps.cpp b/src/modules/ekf2/test/sensor_simulator/gps.cpp index 095edc4844..d75da46ba2 100644 --- a/src/modules/ekf2/test/sensor_simulator/gps.cpp +++ b/src/modules/ekf2/test/sensor_simulator/gps.cpp @@ -15,9 +15,9 @@ Gps::~Gps() void Gps::send(const uint64_t time) { - const float dt = static_cast(time - _gps_data.time_us) * 1e-6f; + const float dt = static_cast(time - _gps_data.time_us - kGpsDelayUs) * 1e-6f; - _gps_data.time_us = time; + _gps_data.time_us = time - kGpsDelayUs; if (fabsf(_gps_pos_rate(0)) > FLT_EPSILON || fabsf(_gps_pos_rate(1)) > FLT_EPSILON) { stepHorizontalPositionByMeters(Vector2f(_gps_pos_rate) * dt); diff --git a/src/modules/ekf2/test/sensor_simulator/gps.h b/src/modules/ekf2/test/sensor_simulator/gps.h index e8ff206916..1c144f391b 100644 --- a/src/modules/ekf2/test/sensor_simulator/gps.h +++ b/src/modules/ekf2/test/sensor_simulator/gps.h @@ -71,6 +71,8 @@ public: private: void send(uint64_t time) override; + static constexpr uint64_t kGpsDelayUs{110000}; + gnssSample _gps_data{}; Vector3f _gps_pos_rate{}; }; diff --git a/src/modules/events/CMakeLists.txt b/src/modules/events/CMakeLists.txt index 8c54833d4e..7d55547069 100644 --- a/src/modules/events/CMakeLists.txt +++ b/src/modules/events/CMakeLists.txt @@ -40,4 +40,6 @@ px4_add_module( send_event.cpp set_leds.cpp status_display.cpp + MODULE_CONFIG + events_params.yaml ) diff --git a/src/modules/events/events_params.yaml b/src/modules/events/events_params.yaml new file mode 100644 index 0000000000..0a0667d2ca --- /dev/null +++ b/src/modules/events/events_params.yaml @@ -0,0 +1,27 @@ +module_name: events +parameters: +- group: Events + definitions: + EV_TSK_STAT_DIS: + description: + short: Status Display + long: |- + Enable/disable event task for displaying the vehicle status using arm-mounted + LEDs. When enabled and if the vehicle supports it, LEDs will flash + indicating various vehicle status changes. Currently PX4 has not implemented + any specific status events. + type: boolean + default: 0 + reboot_required: true + EV_TSK_RC_LOSS: + description: + short: RC Loss Alarm + long: |- + Enable/disable event task for RC Loss. When enabled, an alarm tune will be + played via buzzer or ESCs, if supported. The alarm will sound after a disarm, + if the vehicle was previously armed and only if the vehicle had RC signal at + some point. Particularly useful for locating crashed drones without a GPS + sensor. + type: boolean + default: 0 + reboot_required: true diff --git a/src/modules/flight_mode_manager/FlightModeManager.cpp b/src/modules/flight_mode_manager/FlightModeManager.cpp index e9691600a0..f83322511f 100644 --- a/src/modules/flight_mode_manager/FlightModeManager.cpp +++ b/src/modules/flight_mode_manager/FlightModeManager.cpp @@ -33,6 +33,7 @@ #include "FlightModeManager.hpp" +#include #include #include @@ -324,7 +325,7 @@ void FlightModeManager::handleCommand() if (_current_task.task) { // check for other commands not related to task switching if ((command.command == vehicle_command_s::VEHICLE_CMD_DO_CHANGE_SPEED) - && (static_cast(command.param1 + .5f) == vehicle_command_s::SPEED_TYPE_GROUNDSPEED) + && (static_cast(lroundf(command.param1)) == vehicle_command_s::SPEED_TYPE_GROUNDSPEED) && (command.param2 > 0.f)) { _current_task.task->overrideCruiseSpeed(command.param2); } diff --git a/src/modules/flight_mode_manager/Templates/FlightTasks_generated.hpp.em b/src/modules/flight_mode_manager/Templates/FlightTasks_generated.hpp.em index 9232ea2644..e131335621 100644 --- a/src/modules/flight_mode_manager/Templates/FlightTasks_generated.hpp.em +++ b/src/modules/flight_mode_manager/Templates/FlightTasks_generated.hpp.em @@ -42,7 +42,6 @@ #pragma once // include all required headers -#include "FlightModeManager.hpp" @# loop through all requested tasks @[if tasks]@ @[for task in tasks]@ diff --git a/src/modules/flight_mode_manager/flight_mode_manager_params.c b/src/modules/flight_mode_manager/flight_mode_manager_params.c deleted file mode 100644 index cfe2f760f7..0000000000 --- a/src/modules/flight_mode_manager/flight_mode_manager_params.c +++ /dev/null @@ -1,36 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2020 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file flight_mode_manager_params.c - */ diff --git a/src/modules/flight_mode_manager/tasks/AutoFollowTarget/CMakeLists.txt b/src/modules/flight_mode_manager/tasks/AutoFollowTarget/CMakeLists.txt index 9abd0c8db2..3117312e14 100644 --- a/src/modules/flight_mode_manager/tasks/AutoFollowTarget/CMakeLists.txt +++ b/src/modules/flight_mode_manager/tasks/AutoFollowTarget/CMakeLists.txt @@ -36,6 +36,7 @@ add_subdirectory(follow_target_estimator) px4_add_library(FlightTaskAutoFollowTarget FlightTaskAutoFollowTarget.cpp ) +set_property(GLOBAL APPEND PROPERTY PX4_MODULE_CONFIG_FILES ${CMAKE_CURRENT_SOURCE_DIR}/follow_target_params.yaml) target_link_libraries(FlightTaskAutoFollowTarget PUBLIC FlightTaskAuto follow_target_estimator) target_include_directories(FlightTaskAutoFollowTarget PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) diff --git a/src/modules/flight_mode_manager/tasks/AutoFollowTarget/follow_target_estimator/TargetEstimator.cpp b/src/modules/flight_mode_manager/tasks/AutoFollowTarget/follow_target_estimator/TargetEstimator.cpp index 1c3e0f0011..f3765a7ca6 100644 --- a/src/modules/flight_mode_manager/tasks/AutoFollowTarget/follow_target_estimator/TargetEstimator.cpp +++ b/src/modules/flight_mode_manager/tasks/AutoFollowTarget/follow_target_estimator/TargetEstimator.cpp @@ -225,7 +225,7 @@ bool TargetEstimator::measurement_can_be_fused(const Vector3f ¤t_measureme // return measurement_valid; } -void TargetEstimator::measurement_update(follow_target_s follow_target) +void TargetEstimator::measurement_update(const follow_target_s &follow_target) { _fusion_count++; // Decompose follow_target message into the individual measurements for position and velocity diff --git a/src/modules/flight_mode_manager/tasks/AutoFollowTarget/follow_target_estimator/TargetEstimator.hpp b/src/modules/flight_mode_manager/tasks/AutoFollowTarget/follow_target_estimator/TargetEstimator.hpp index 4dc22e455a..7886c21977 100644 --- a/src/modules/flight_mode_manager/tasks/AutoFollowTarget/follow_target_estimator/TargetEstimator.hpp +++ b/src/modules/flight_mode_manager/tasks/AutoFollowTarget/follow_target_estimator/TargetEstimator.hpp @@ -157,7 +157,7 @@ protected: * * @param follow_target GPS data last received from target */ - void measurement_update(follow_target_s follow_target); + void measurement_update(const follow_target_s &follow_target); /** * Perform prediction step based on simple position-velocity-acceleration model of a point mass diff --git a/src/modules/flight_mode_manager/tasks/AutoFollowTarget/follow_target_params.c b/src/modules/flight_mode_manager/tasks/AutoFollowTarget/follow_target_params.c deleted file mode 100644 index 0aa6f9c1fa..0000000000 --- a/src/modules/flight_mode_manager/tasks/AutoFollowTarget/follow_target_params.c +++ /dev/null @@ -1,119 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2016-2022 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * AS IS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file follow_target_params.c - * - * Parameters for follow target mode - * - * @author Jimmy Johnson - * @author Junwoo Hwang - */ - -/** - * Responsiveness to target movement in Target Estimator - * - * lower values increase the responsiveness to changing position, but also ignore less noise - * - * @min 0.0 - * @max 1.0 - * @decimal 2 - * @group Follow target - */ -PARAM_DEFINE_FLOAT(FLW_TGT_RS, 0.1f); - -/** - * Follow target height - * - * Following height above the target - * - * @unit m - * @min 8.0 - * @group Follow target - */ -PARAM_DEFINE_FLOAT(FLW_TGT_HT, 8.0f); - -/** - * Distance to follow target from - * - * The distance in meters to follow the target at - * - * @unit m - * @min 1.0 - * @group Follow target - */ -PARAM_DEFINE_FLOAT(FLW_TGT_DST, 8.0f); - -/** - * Follow Angle setting in degrees - * - * Angle to follow the target from. 0.0 Equals straight in front of the target's - * course (direction of motion) and the angle increases in clockwise direction, - * meaning Right-side would be 90.0 degrees while Left-side is -90.0 degrees - * - * Note: When the user force sets the angle out of the min/max range, it will be - * wrapped (e.g. 480 -> 120) in the range to gracefully handle the out of range. - * - * @min -180.0 - * @max 180.0 - * @group Follow target - */ -PARAM_DEFINE_FLOAT(FLW_TGT_FA, 180.0f); - -/** - * Altitude control mode - * - * Maintain altitude or track target's altitude. When maintaining the altitude, - * the drone can crash into terrain when the target moves uphill. When tracking - * the target's altitude, the follow altitude FLW_TGT_HT should be high enough - * to prevent terrain collisions due to GPS inaccuracies of the target. - * - * @value 0 2D Tracking: Maintain constant altitude relative to home and track XY position only - * @value 1 2D + Terrain: Maintain constant altitude relative to terrain below and track XY position - * @value 2 3D Tracking: Track target's altitude (be aware that GPS altitude bias usually makes this useless) - * @group Follow target - */ -PARAM_DEFINE_INT32(FLW_TGT_ALT_M, 0); - -/** - * Maximum tangential velocity setting for generating the follow orbit trajectory - * - * This is the maximum tangential velocity the drone will circle around the target whenever - * an orbit angle setpoint changes. Higher value means more aggressive follow behavior. - * - * @min 0.0 - * @max 20.0 - * @decimal 1 - * @group Follow target - */ -PARAM_DEFINE_FLOAT(FLW_TGT_MAX_VEL, 5.0f); diff --git a/src/modules/flight_mode_manager/tasks/AutoFollowTarget/follow_target_params.yaml b/src/modules/flight_mode_manager/tasks/AutoFollowTarget/follow_target_params.yaml new file mode 100644 index 0000000000..76d600be76 --- /dev/null +++ b/src/modules/flight_mode_manager/tasks/AutoFollowTarget/follow_target_params.yaml @@ -0,0 +1,74 @@ +module_name: AutoFollowTarget +parameters: +- group: Follow target + definitions: + FLW_TGT_RS: + description: + short: Responsiveness to target movement in Target Estimator + long: lower values increase the responsiveness to changing position, but also + ignore less noise + type: float + default: 0.1 + min: 0.0 + max: 1.0 + decimal: 2 + FLW_TGT_HT: + description: + short: Follow target height + long: Following height above the target + type: float + default: 8.0 + unit: m + min: 8.0 + FLW_TGT_DST: + description: + short: Distance to follow target from + long: The distance in meters to follow the target at + type: float + default: 8.0 + unit: m + min: 1.0 + FLW_TGT_FA: + description: + short: Follow Angle setting in degrees + long: |- + Angle to follow the target from. 0.0 Equals straight in front of the target's + course (direction of motion) and the angle increases in clockwise direction, + meaning Right-side would be 90.0 degrees while Left-side is -90.0 degrees + + Note: When the user force sets the angle out of the min/max range, it will be + wrapped (e.g. 480 -> 120) in the range to gracefully handle the out of range. + type: float + default: 180.0 + min: -180.0 + max: 180.0 + FLW_TGT_ALT_M: + description: + short: Altitude control mode + long: |- + Maintain altitude or track target's altitude. When maintaining the altitude, + the drone can crash into terrain when the target moves uphill. When tracking + the target's altitude, the follow altitude FLW_TGT_HT should be high enough + to prevent terrain collisions due to GPS inaccuracies of the target. + type: enum + values: + 0: '2D Tracking: Maintain constant altitude relative to home and track XY + position only' + 1: '2D + Terrain: Maintain constant altitude relative to terrain below and + track XY position' + 2: '3D Tracking: Track target''s altitude (be aware that GPS altitude bias + usually makes this useless)' + default: 0 + FLW_TGT_MAX_VEL: + description: + short: Max tangential velocity for follow orbit trajectory + long: |- + Maximum tangential velocity setting for generating the follow orbit trajectory + + This is the maximum tangential velocity the drone will circle around the target whenever + an orbit angle setpoint changes. Higher value means more aggressive follow behavior. + type: float + default: 5.0 + min: 0.0 + max: 20.0 + decimal: 1 diff --git a/src/modules/flight_mode_manager/tasks/ManualAccelerationSlow/CMakeLists.txt b/src/modules/flight_mode_manager/tasks/ManualAccelerationSlow/CMakeLists.txt index b4107f21d4..c7ceeac534 100644 --- a/src/modules/flight_mode_manager/tasks/ManualAccelerationSlow/CMakeLists.txt +++ b/src/modules/flight_mode_manager/tasks/ManualAccelerationSlow/CMakeLists.txt @@ -34,6 +34,7 @@ px4_add_library(FlightTaskManualAccelerationSlow FlightTaskManualAccelerationSlow.cpp ) +set_property(GLOBAL APPEND PROPERTY PX4_MODULE_CONFIG_FILES ${CMAKE_CURRENT_SOURCE_DIR}/flight_task_acceleration_slow_params.yaml) target_include_directories(FlightTaskManualAccelerationSlow PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) target_link_libraries(FlightTaskManualAccelerationSlow PUBLIC FlightTaskManualAcceleration FlightTaskUtility) diff --git a/src/modules/flight_mode_manager/tasks/ManualAccelerationSlow/flight_task_acceleration_slow_params.c b/src/modules/flight_mode_manager/tasks/ManualAccelerationSlow/flight_task_acceleration_slow_params.c deleted file mode 100644 index 32558d98ea..0000000000 --- a/src/modules/flight_mode_manager/tasks/ManualAccelerationSlow/flight_task_acceleration_slow_params.c +++ /dev/null @@ -1,172 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2023 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Manual input mapped to scale horizontal velocity in position slow mode - * - * @value 0 No rescaling - * @value 1 AUX1 - * @value 2 AUX2 - * @value 3 AUX3 - * @value 4 AUX4 - * @value 5 AUX5 - * @value 6 AUX6 - * @group Multicopter Position Slow Mode - */ -PARAM_DEFINE_INT32(MC_SLOW_MAP_HVEL, 0); - -/** - * Manual input mapped to scale vertical velocity in position slow mode - * - * @value 0 No rescaling - * @value 1 AUX1 - * @value 2 AUX2 - * @value 3 AUX3 - * @value 4 AUX4 - * @value 5 AUX5 - * @value 6 AUX6 - * @group Multicopter Position Slow Mode - */ -PARAM_DEFINE_INT32(MC_SLOW_MAP_VVEL, 0); - -/** - * Manual input mapped to scale yaw rate in position slow mode - * - * @value 0 No rescaling - * @value 1 AUX1 - * @value 2 AUX2 - * @value 3 AUX3 - * @value 4 AUX4 - * @value 5 AUX5 - * @value 6 AUX6 - * @group Multicopter Position Slow Mode - */ -PARAM_DEFINE_INT32(MC_SLOW_MAP_YAWR, 0); - -/** - * Horizontal velocity lower limit - * - * The lowest input maps and is clamped to this velocity. - * - * @unit m/s - * @min 0.1 - * @increment 0.1 - * @decimal 2 - * @group Multicopter Position Slow Mode - */ -PARAM_DEFINE_FLOAT(MC_SLOW_MIN_HVEL, .3f); - -/** - * Vertical velocity lower limit - * - * The lowest input maps and is clamped to this velocity. - * - * @unit m/s - * @min 0.1 - * @increment 0.1 - * @decimal 2 - * @group Multicopter Position Slow Mode - */ -PARAM_DEFINE_FLOAT(MC_SLOW_MIN_VVEL, .3f); - -/** - * Yaw rate lower limit - * - * The lowest input maps and is clamped to this rate. - * - * @unit deg/s - * @min 1 - * @increment 0.1 - * @decimal 0 - * @group Multicopter Position Slow Mode - */ -PARAM_DEFINE_FLOAT(MC_SLOW_MIN_YAWR, 3.f); - -/** - * Default horizontal velocity limit - * - * This value is used in slow mode if - * no aux channel is mapped and - * no limit is commanded through MAVLink. - * - * @unit m/s - * @min 0.1 - * @increment 0.1 - * @decimal 2 - * @group Multicopter Position Slow Mode - */ -PARAM_DEFINE_FLOAT(MC_SLOW_DEF_HVEL, 3.f); - -/** - * Default vertical velocity limit - * - * This value is used in slow mode if - * no aux channel is mapped and - * no limit is commanded through MAVLink. - * - * @unit m/s - * @min 0.1 - * @increment 0.1 - * @decimal 2 - * @group Multicopter Position Slow Mode - */ -PARAM_DEFINE_FLOAT(MC_SLOW_DEF_VVEL, 1.f); - -/** - * Default yaw rate limit - * - * This value is used in slow mode if - * no aux channel is mapped and - * no limit is commanded through MAVLink. - * - * @unit deg/s - * @min 1 - * @increment 0.1 - * @decimal 0 - * @group Multicopter Position Slow Mode - */ -PARAM_DEFINE_FLOAT(MC_SLOW_DEF_YAWR, 45.f); - -/** - * RC_MAP_AUX{N} to allow for gimbal pitch rate control in position slow mode - * - * @value 0 No pitch rate input - * @value 1 AUX1 - * @value 2 AUX2 - * @value 3 AUX3 - * @value 4 AUX4 - * @value 5 AUX5 - * @value 6 AUX6 - * @group Multicopter Position Slow Mode - */ -PARAM_DEFINE_INT32(MC_SLOW_MAP_PTCH, 0); diff --git a/src/modules/flight_mode_manager/tasks/ManualAccelerationSlow/flight_task_acceleration_slow_params.yaml b/src/modules/flight_mode_manager/tasks/ManualAccelerationSlow/flight_task_acceleration_slow_params.yaml new file mode 100644 index 0000000000..2d0d5119cf --- /dev/null +++ b/src/modules/flight_mode_manager/tasks/ManualAccelerationSlow/flight_task_acceleration_slow_params.yaml @@ -0,0 +1,127 @@ +module_name: ManualAccelerationSlow +parameters: +- group: Multicopter Position Slow Mode + definitions: + MC_SLOW_MAP_HVEL: + description: + short: Manual input mapped to scale horizontal velocity in position slow mode + type: enum + values: + 0: No rescaling + 1: AUX1 + 2: AUX2 + 3: AUX3 + 4: AUX4 + 5: AUX5 + 6: AUX6 + default: 0 + MC_SLOW_MAP_VVEL: + description: + short: Manual input mapped to scale vertical velocity in position slow mode + type: enum + values: + 0: No rescaling + 1: AUX1 + 2: AUX2 + 3: AUX3 + 4: AUX4 + 5: AUX5 + 6: AUX6 + default: 0 + MC_SLOW_MAP_YAWR: + description: + short: Manual input mapped to scale yaw rate in position slow mode + type: enum + values: + 0: No rescaling + 1: AUX1 + 2: AUX2 + 3: AUX3 + 4: AUX4 + 5: AUX5 + 6: AUX6 + default: 0 + MC_SLOW_MIN_HVEL: + description: + short: Horizontal velocity lower limit + long: The lowest input maps and is clamped to this velocity. + type: float + default: 0.3 + unit: m/s + min: 0.1 + increment: 0.1 + decimal: 2 + MC_SLOW_MIN_VVEL: + description: + short: Vertical velocity lower limit + long: The lowest input maps and is clamped to this velocity. + type: float + default: 0.3 + unit: m/s + min: 0.1 + increment: 0.1 + decimal: 2 + MC_SLOW_MIN_YAWR: + description: + short: Yaw rate lower limit + long: The lowest input maps and is clamped to this rate. + type: float + default: 3.0 + unit: deg/s + min: 1 + increment: 0.1 + decimal: 0 + MC_SLOW_DEF_HVEL: + description: + short: Default horizontal velocity limit + long: |- + This value is used in slow mode if + no aux channel is mapped and + no limit is commanded through MAVLink. + type: float + default: 3.0 + unit: m/s + min: 0.1 + increment: 0.1 + decimal: 2 + MC_SLOW_DEF_VVEL: + description: + short: Default vertical velocity limit + long: |- + This value is used in slow mode if + no aux channel is mapped and + no limit is commanded through MAVLink. + type: float + default: 1.0 + unit: m/s + min: 0.1 + increment: 0.1 + decimal: 2 + MC_SLOW_DEF_YAWR: + description: + short: Default yaw rate limit + long: |- + This value is used in slow mode if + no aux channel is mapped and + no limit is commanded through MAVLink. + type: float + default: 45.0 + unit: deg/s + min: 1 + increment: 0.1 + decimal: 0 + MC_SLOW_MAP_PTCH: + description: + short: Gimbal pitch rate control input in position slow mode + long: RC_MAP_AUX{N} to allow for gimbal pitch rate control in position slow + mode + type: enum + values: + 0: No pitch rate input + 1: AUX1 + 2: AUX2 + 3: AUX3 + 4: AUX4 + 5: AUX5 + 6: AUX6 + default: 0 diff --git a/src/modules/flight_mode_manager/tasks/Orbit/CMakeLists.txt b/src/modules/flight_mode_manager/tasks/Orbit/CMakeLists.txt index d925f87c9e..1164fef240 100644 --- a/src/modules/flight_mode_manager/tasks/Orbit/CMakeLists.txt +++ b/src/modules/flight_mode_manager/tasks/Orbit/CMakeLists.txt @@ -34,6 +34,7 @@ px4_add_library(FlightTaskOrbit FlightTaskOrbit.cpp ) +set_property(GLOBAL APPEND PROPERTY PX4_MODULE_CONFIG_FILES ${CMAKE_CURRENT_SOURCE_DIR}/flight_task_orbit_params.yaml) target_link_libraries(FlightTaskOrbit PUBLIC FlightTaskManualAltitudeSmoothVel SlewRate) target_include_directories(FlightTaskOrbit PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) diff --git a/src/modules/flight_mode_manager/tasks/Orbit/FlightTaskOrbit.cpp b/src/modules/flight_mode_manager/tasks/Orbit/FlightTaskOrbit.cpp index 55c6b64273..ad052bd6f7 100644 --- a/src/modules/flight_mode_manager/tasks/Orbit/FlightTaskOrbit.cpp +++ b/src/modules/flight_mode_manager/tasks/Orbit/FlightTaskOrbit.cpp @@ -90,7 +90,7 @@ bool FlightTaskOrbit::applyCommandParameters(const vehicle_command_s &command, b // commanded heading behaviour if (PX4_ISFINITE(command.param3)) { - if (static_cast(command.param3 + .5f) == vehicle_command_s::ORBIT_YAW_BEHAVIOUR_UNCHANGED) { + if (static_cast(lround(command.param3)) == vehicle_command_s::ORBIT_YAW_BEHAVIOUR_UNCHANGED) { if (!_currently_orbiting) { // only change the yaw behaviour if we are not actively orbiting _yaw_behaviour = _param_mc_orbit_yaw_mod.get(); } diff --git a/src/modules/flight_mode_manager/tasks/Orbit/flight_task_orbit_params.c b/src/modules/flight_mode_manager/tasks/Orbit/flight_task_orbit_params.c deleted file mode 100644 index 3134431975..0000000000 --- a/src/modules/flight_mode_manager/tasks/Orbit/flight_task_orbit_params.c +++ /dev/null @@ -1,56 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2022 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Maximum radius of orbit - * - * @unit m - * @min 1.0 - * @max 10000.0 - * @increment 0.5 - * @decimal 1 - * @group Flight Task Orbit - */ -PARAM_DEFINE_FLOAT(MC_ORBIT_RAD_MAX, 1000.0f); - -/** - * Yaw behaviour during orbit flight. - * - * @value 0 Front to Circle Center - * @value 1 Hold Initial Heading - * @value 2 Uncontrolled - * @value 3 Hold Front Tangent to Circle - * @value 4 Manually (yaw stick) Controlled - * @group Flight Task Orbit - */ -PARAM_DEFINE_INT32(MC_ORBIT_YAW_MOD, 0); diff --git a/src/modules/flight_mode_manager/tasks/Orbit/flight_task_orbit_params.yaml b/src/modules/flight_mode_manager/tasks/Orbit/flight_task_orbit_params.yaml new file mode 100644 index 0000000000..b74df01c8e --- /dev/null +++ b/src/modules/flight_mode_manager/tasks/Orbit/flight_task_orbit_params.yaml @@ -0,0 +1,25 @@ +module_name: Orbit +parameters: +- group: Flight Task Orbit + definitions: + MC_ORBIT_RAD_MAX: + description: + short: Maximum radius of orbit + type: float + default: 1000.0 + unit: m + min: 1.0 + max: 10000.0 + increment: 0.5 + decimal: 1 + MC_ORBIT_YAW_MOD: + description: + short: Yaw behaviour during orbit flight + type: enum + values: + 0: Front to Circle Center + 1: Hold Initial Heading + 2: Uncontrolled + 3: Hold Front Tangent to Circle + 4: Manually (yaw stick) Controlled + default: 0 diff --git a/src/modules/fw_att_control/CMakeLists.txt b/src/modules/fw_att_control/CMakeLists.txt index 75dd515ddb..c18a5958b5 100644 --- a/src/modules/fw_att_control/CMakeLists.txt +++ b/src/modules/fw_att_control/CMakeLists.txt @@ -38,10 +38,11 @@ px4_add_module( FixedwingAttitudeControl.cpp FixedwingAttitudeControl.hpp - fw_pitch_controller.cpp - fw_roll_controller.cpp fw_wheel_controller.cpp - fw_yaw_controller.cpp + MODULE_CONFIG + fw_att_control_params.yaml DEPENDS px4_work_queue ) + +px4_add_unit_gtest(SRC FixedwingAttitudeControlTest.cpp LINKLIBS modules__fw_att_control) diff --git a/src/modules/fw_att_control/FixedwingAttitudeControl.cpp b/src/modules/fw_att_control/FixedwingAttitudeControl.cpp index 22d42c791e..9098f844b0 100644 --- a/src/modules/fw_att_control/FixedwingAttitudeControl.cpp +++ b/src/modules/fw_att_control/FixedwingAttitudeControl.cpp @@ -32,6 +32,8 @@ ****************************************************************************/ #include "FixedwingAttitudeControl.hpp" +#include + using namespace time_literals; using namespace matrix; @@ -72,14 +74,9 @@ FixedwingAttitudeControl::init() void FixedwingAttitudeControl::parameters_update() { - _roll_ctrl.set_time_constant(_param_fw_r_tc.get()); - _roll_ctrl.set_max_rate(radians(_param_fw_r_rmax.get())); - - _pitch_ctrl.set_time_constant(_param_fw_p_tc.get()); - _pitch_ctrl.set_max_rate_pos(radians(_param_fw_p_rmax_pos.get())); - _pitch_ctrl.set_max_rate_neg(radians(_param_fw_p_rmax_neg.get())); - - _yaw_ctrl.set_max_rate(radians(_param_fw_y_rmax.get())); + _proportional_gain = matrix::Vector3f(1.0f / math::max(0.01f, _param_fw_r_tc.get()), + 1.0f / math::max(0.01f, _param_fw_p_tc.get()), + 1.0f); _wheel_ctrl.set_k_p(_param_fw_wr_p.get()); _wheel_ctrl.set_k_i(_param_fw_wr_i.get()); @@ -99,7 +96,7 @@ FixedwingAttitudeControl::vehicle_manual_poll(const float yaw_body) if (!_vcontrol_mode.flag_control_climb_rate_enabled && _vcontrol_mode.flag_control_attitude_enabled) { - // STABILIZED mode generate the attitude setpoint from manual user inputs + // STABILIZED mode: setpoint generation const float roll_body = _manual_control_setpoint.roll * radians(_param_fw_man_r_max.get()); @@ -108,11 +105,14 @@ FixedwingAttitudeControl::vehicle_manual_poll(const float yaw_body) pitch_body = constrain(pitch_body, -radians(_param_fw_man_p_max.get()), radians(_param_fw_man_p_max.get())); - _att_sp.thrust_body[0] = (_manual_control_setpoint.throttle + 1.f) * .5f; + const Quatf q_sp_rp = Eulerf(roll_body, pitch_body, 0.f); + const Quatf q_sp_yaw(cosf(yaw_body / 2.f), 0.f, 0.f, sinf(yaw_body / 2.f)); + Quatf q = q_sp_yaw * q_sp_rp; - const Quatf q(Eulerf(roll_body, pitch_body, yaw_body)); q.copyTo(_att_sp.q_d); + _att_sp.thrust_body[0] = (_manual_control_setpoint.throttle + 1.f) * .5f; + _att_sp.timestamp = hrt_absolute_time(); _attitude_sp_pub.publish(_att_sp); @@ -207,7 +207,6 @@ void FixedwingAttitudeControl::Run() dt = math::constrain((att.timestamp_sample - _last_run) * 1e-6f, DT_MIN, DT_MAX); _last_run = att.timestamp_sample; - // get current rotation matrix and euler angles from control state quaternions _R = matrix::Quatf(att.q); } @@ -299,20 +298,29 @@ void FixedwingAttitudeControl::Run() const Quatf q_sp(_att_sp.q_d); if (q_sp.isAllFinite()) { - const Eulerf euler_sp(q_sp); - const float roll_sp = euler_sp.phi(); - const float pitch_sp = euler_sp.theta(); + const Quatf q_current(att.q); + const Vector3f att_err = computeAttitudeError(q_current, q_sp); - _roll_ctrl.control_roll(roll_sp, _yaw_ctrl.get_euler_rate_setpoint(), euler_angles.phi(), - euler_angles.theta()); - _pitch_ctrl.control_pitch(pitch_sp, _yaw_ctrl.get_euler_rate_setpoint(), euler_angles.phi(), - euler_angles.theta()); - _yaw_ctrl.control_yaw(roll_sp, _pitch_ctrl.get_euler_rate_setpoint(), euler_angles.phi(), - euler_angles.theta(), get_airspeed_constrained()); + Vector3f body_rates_setpoint; + body_rates_setpoint = _proportional_gain.emult(att_err); - /* Update input data for rate controllers */ - Vector3f body_rates_setpoint = Vector3f(_roll_ctrl.get_body_rate_setpoint(), _pitch_ctrl.get_body_rate_setpoint(), - _yaw_ctrl.get_body_rate_setpoint()); + // Turn coordination + const float V = math::max(get_airspeed_constrained(), 0.1f); + const float q1 = 2.f * (q_current(0) * q_current(1) + q_current(2) * q_current(3)); // equivalent to 2.f * sin(roll) * cos(pitch) + const float yawrate_ff = CONSTANTS_ONE_G * q1 / V; + const float pitchrate_ff = q1 * yawrate_ff / (1.f - 2.f * q_current(1) * q_current(1) - 2.f * q_current(2) * q_current(2)); + + // Limit turn coordination to normal flight envelope + const float cos_tilt = 1.f - 2.f * (q_current(1) * q_current(1) + q_current(2) * q_current(2)); + const float tilt = acosf(math::constrain((cos_tilt), -1.f, 1.f)); + const float ff_scale = math::interpolate(tilt, radians(70.f), radians(75.f), 1.f, 0.f); + + body_rates_setpoint(1) += ff_scale * pitchrate_ff; + body_rates_setpoint(2) += ff_scale * yawrate_ff; + + body_rates_setpoint(0) = math::constrain(body_rates_setpoint(0), -radians(_param_fw_r_rmax.get()), radians(_param_fw_r_rmax.get())); + body_rates_setpoint(1) = math::constrain(body_rates_setpoint(1), -radians(_param_fw_p_rmax_neg.get()), radians(_param_fw_p_rmax_pos.get())); + body_rates_setpoint(2) = math::constrain(body_rates_setpoint(2), -radians(_param_fw_y_rmax.get()), radians(_param_fw_y_rmax.get())); autotune_attitude_control_status_s pid_autotune; matrix::Vector3f bodyrate_autotune_ff; diff --git a/src/modules/fw_att_control/FixedwingAttitudeControl.hpp b/src/modules/fw_att_control/FixedwingAttitudeControl.hpp index e2caac588b..167b9445ce 100644 --- a/src/modules/fw_att_control/FixedwingAttitudeControl.hpp +++ b/src/modules/fw_att_control/FixedwingAttitudeControl.hpp @@ -34,10 +34,7 @@ #pragma once #include -#include "fw_pitch_controller.h" -#include "fw_roll_controller.h" #include "fw_wheel_controller.h" -#include "fw_yaw_controller.h" #include #include #include @@ -67,13 +64,31 @@ #include #include +using matrix::AxisAnglef; using matrix::Eulerf; using matrix::Quatf; +using matrix::Vector3f; using uORB::SubscriptionData; using namespace time_literals; +/** + * Computes the attitude error for fixed-wing attitude control. + * The yaw error is removed since fixed-wing aircraft have no direct yaw authority. + */ +inline Vector3f computeAttitudeError(const Quatf &q_current, const Quatf &q_sp) +{ + // Compute yaw offset to cancel yaw error (fixed-wing has no direct yaw authority) + // See formula_derrivation.py on how to get these formulas + const float yaw_offset = -2.f * (q_current(0) * q_sp(3) - q_current(1) * q_sp(2) + q_current(2) * q_sp(1) - q_current(3) * q_sp(0)) / + (q_current(0) * q_sp(0) - q_current(1) * q_sp(1) - q_current(2) * q_sp(2) + q_current(3) * q_sp(3)); + + const Quatf q_yaw_offset = Quatf(1.f, 0.f, 0.f, yaw_offset / 2.f).normalized(); + const Quatf q_err = (q_current.inversed() * q_yaw_offset * q_sp).canonical(); + return 2.f * q_err.imag(); +} + class FixedwingAttitudeControl final : public ModuleBase, public ModuleParams, public px4::ScheduledWorkItem { @@ -161,12 +176,9 @@ private: (ParamFloat) _param_fw_y_rmax, (ParamFloat) _param_man_yr_max - ) - RollController _roll_ctrl; - PitchController _pitch_ctrl; - YawController _yaw_ctrl; + matrix::Vector3f _proportional_gain; WheelController _wheel_ctrl; void parameters_update(); diff --git a/src/modules/fw_att_control/FixedwingAttitudeControlTest.cpp b/src/modules/fw_att_control/FixedwingAttitudeControlTest.cpp new file mode 100644 index 0000000000..809be83870 --- /dev/null +++ b/src/modules/fw_att_control/FixedwingAttitudeControlTest.cpp @@ -0,0 +1,116 @@ +/**************************************************************************** + * + * Copyright (C) 2024 PX4 Development Team. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name PX4 nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +#include +#include "FixedwingAttitudeControl.hpp" + +using namespace matrix; + +/** + * Computes the body rate setpoint yaw component (before turn coordination) + * using the shared computeAttitudeError function from FixedwingAttitudeControl.hpp. + * + * @param q_current Current attitude quaternion + * @param q_sp Attitude setpoint quaternion + * @return Yaw rate setpoint before turn coordination feedforward + */ +static float computeYawRateSetpointBeforeTurnCoord(const Quatf &q_current, const Quatf &q_sp) +{ + const Vector3f att_err = computeAttitudeError(q_current, q_sp); + return att_err(2); +} + +TEST(FixedwingAttitudeControlTest, YawRateSetpointZeroBeforeTurnCoord_Identity) +{ + // When current and setpoint are both identity, yaw rate should be zero + const Quatf q_current; + const Quatf q_sp; + + const float yaw_rate = computeYawRateSetpointBeforeTurnCoord(q_current, q_sp); + EXPECT_NEAR(yaw_rate, 0.f, 1e-5f); +} + +TEST(FixedwingAttitudeControlTest, YawRateSetpointZeroBeforeTurnCoord_PureYawError) +{ + // Pure yaw error should result in zero yaw rate setpoint (yaw is compensated out) + const Quatf q_current; + const Quatf q_sp(Eulerf(0.f, 0.f, 0.5f)); // 0.5 rad (~29 deg) yaw offset + + const float yaw_rate = computeYawRateSetpointBeforeTurnCoord(q_current, q_sp); + + EXPECT_NEAR(yaw_rate, 0.f, 1e-5f); +} + +TEST(FixedwingAttitudeControlTest, YawRateSetpointZeroBeforeTurnCoord_RollError) +{ + // Roll error with no pitch/yaw error + const Quatf q_current; + const Quatf q_sp(Eulerf(0.3f, 0.f, 0.f)); // 0.3 rad roll + + const float yaw_rate = computeYawRateSetpointBeforeTurnCoord(q_current, q_sp); + + EXPECT_NEAR(yaw_rate, 0.f, 1e-5f); +} + +TEST(FixedwingAttitudeControlTest, YawRateSetpointZeroBeforeTurnCoord_PitchError) +{ + // Pitch error with no roll/yaw error + const Quatf q_current; + const Quatf q_sp(Eulerf(0.f, 0.2f, 0.f)); // 0.2 rad pitch + + const float yaw_rate = computeYawRateSetpointBeforeTurnCoord(q_current, q_sp); + + EXPECT_NEAR(yaw_rate, 0.f, 1e-5f); +} + +TEST(FixedwingAttitudeControlTest, YawRateSetpointZeroBeforeTurnCoord_CombinedError) +{ + // Combined roll, pitch, and yaw error + const Quatf q_current(Eulerf(0.1f, 0.05f, 0.2f)); + const Quatf q_sp(Eulerf(0.4f, 0.15f, 0.8f)); + + const float yaw_rate = computeYawRateSetpointBeforeTurnCoord(q_current, q_sp); + + EXPECT_NEAR(yaw_rate, 0.f, 1e-4f); +} + +TEST(FixedwingAttitudeControlTest, YawRateSetpointZeroBeforeTurnCoord_BankedTurn) +{ + // Simulating a banked turn scenario - current has roll, setpoint has roll + yaw + const Quatf q_current(Eulerf(0.5f, 0.f, 0.f)); // 30 deg bank + const Quatf q_sp(Eulerf(0.5f, 0.f, 0.3f)); // same bank, different heading + + const float yaw_rate = computeYawRateSetpointBeforeTurnCoord(q_current, q_sp); + + EXPECT_NEAR(yaw_rate, 0.f, 1e-4f); +} diff --git a/src/modules/fw_att_control/formula_derrivation.py b/src/modules/fw_att_control/formula_derrivation.py new file mode 100644 index 0000000000..a1b3c0f49a --- /dev/null +++ b/src/modules/fw_att_control/formula_derrivation.py @@ -0,0 +1,160 @@ +#!/usr/bin/env python3 +import symforce.symbolic as sf + + +def section(title: str) -> None: + print("\n" + "=" * 80) + print(title) + print("=" * 80) + + +def derive_turn_coordination() -> None: + section("Turn coordination") + + # Quaternion attitude of the aircraft. + # This represents the rotation from body frame -> earth frame. + R = sf.Rot3.symbolic("q") + + # Body angular velocity vector. + # This contains the aircraft rotational rates: + # w_b[0] = roll rate (p) + # w_b[1] = pitch rate (q) + # w_b[2] = yaw rate (r) + w_b = sf.V3.symbolic("w_b") + + # True airspeed magnitude of the aircraft. + v = sf.Symbol("v") + + # Angle of attack (angle between body x-axis and velocity vector). + alpha = sf.Symbol("alpha") + q_w, q_x, q_y, q_z = sf.symbols("q_w q_x q_y q_z") + + # Velocity vector expressed in the body frame. + # + # We assume no sideslip, meaning the velocity lies in the body x-z plane. + v_b = sf.V3(v * sf.cos(alpha), 0, v * sf.sin(alpha)) + + # Gravity magnitude. + g_z = sf.Symbol("g") + g = sf.V3(0, 0, -g_z) + + # Centrifugal acceleration experienced during a turn. + # + # a = -ω × v + # + # This comes from the rotating reference frame of the aircraft. + # If the aircraft is turning, the velocity vector produces a + # centrifugal acceleration relative to the body frame. + a_centrifugal = -w_b.cross(v_b) + + # Total body acceleration required to maintain the turn. + # + # We must cancel the centrifugal acceleration AND account for gravity. + # + # Gravity is defined in the earth frame, so we rotate it into the + # body frame using R.inverse(). + a_b = -a_centrifugal + R.inverse() * g + + # Steady coordinated turn assumption: + # + # Roll rate p = 0 (bank angle is constant) + # + # This removes transient roll motion from the equations. + a_b = a_b.subs({w_b[0]: 0}) + + print("a_b =") + print(a_b) + + # Solve for the body yaw rate r = w_b[2]. + # + # We use the lateral acceleration component a_b[1]. + # + # In a coordinated turn this must be zero (no lateral slip). + # Solving this gives the yaw rate required to sustain the turn. + yaw_rate_body = sf.solve(a_b[1], w_b[2])[0] + + print("\nyaw_rate_body =") + print(yaw_rate_body) + + # Now compute the centrifugal acceleration expressed in the earth frame. + # + # This helps derive relationships between pitch rate and yaw rate + # that maintain the circular flight path. + a_centrifugal_e = R * a_centrifugal + + # For simplicity we assume zero angle of attack. + # + # This isolates the rotational dynamics of the turn itself. + a_centrifugal_e = a_centrifugal_e.subs({alpha: 0}) + + print("\na_centrifugal_e =") + print(a_centrifugal_e) + + # Solve the vertical earth-frame centrifugal acceleration component + # for pitch rate q = w_b[1]. + # + # This determines the pitch rate required to maintain the circular + # trajectory while the aircraft is yawing. + pitch_rate_body = sf.solve(a_centrifugal_e[2], w_b[1])[0] + + print("\npitch_rate_body (raw) =") + print(pitch_rate_body) + + # Substitute the yaw-rate expression into the pitch-rate equation. + # + # This removes w_b[2] and expresses the pitch rate purely in terms + # of quaternion attitude, gravity, airspeed, and angle of attack. + pitch_rate_body_subbed = pitch_rate_body.subs({w_b[2]: yaw_rate_body}) + + print("\npitch_rate_body_with_yaw_subbed =") + print(pitch_rate_body_subbed) + + +def derive_yaw_offset() -> None: + section("Yaw offset") + + # Current aircraft attitude quaternion. + q = sf.Quaternion.symbolic("q") + + # Desired attitude quaternion setpoint. + q_sp = sf.Quaternion.symbolic("q_sp") + + # Small yaw correction we want to solve for. + yaw_off = sf.Symbol("yaw_off") + + q_w, q_x, q_y, q_z = sf.symbols("q_w q_x q_y q_z") + q_sp_w, q_sp_x, q_sp_y, q_sp_z = sf.symbols("q_sp_w q_sp_x q_sp_y q_sp_z") + + # Quaternion representing a small yaw rotation. + # + # For small angles: + # q ≈ [0, 0, yaw/2, 1] + # + # This approximation simplifies the algebra. + q_yaw_off = sf.Quaternion(xyz=sf.V3(0.0, 0.0, yaw_off / 2), w=1) + + print("q_yaw_off =") + print(q_yaw_off) + + # Compute attitude error quaternion. + # + # delta_q represents the rotation needed to move + # from the current attitude q to the desired attitude q_sp + # with an additional yaw offset applied. + delta_q = q.conj() * q_yaw_off * q_sp + + print("\ndelta_q.z =") + print(delta_q.z) + + # Solve the z component of the error quaternion for yaw_off. + # + # Setting delta_q.z = 0 corresponds to removing yaw error. + yaw_off_solution = sf.solve(delta_q.z, yaw_off)[0] + + print("\nyaw_off =") + print(yaw_off_solution) + + +if __name__ == "__main__": + derive_turn_coordination() + derive_yaw_offset() diff --git a/src/modules/fw_att_control/fw_att_control_params.c b/src/modules/fw_att_control/fw_att_control_params.c deleted file mode 100644 index 554eac360c..0000000000 --- a/src/modules/fw_att_control/fw_att_control_params.c +++ /dev/null @@ -1,256 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2013-2023 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * AS IS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file fw_att_control_params.c - * - * Parameters defined by the fixed-wing attitude control task - * - * @author Lorenz Meier - * @author Thomas Gubler - */ - -/** - * Attitude Roll Time Constant - * - * This defines the latency between a roll step input and the achieved setpoint - * (inverse to a P gain). Smaller systems may require smaller values. - * - * @unit s - * @min 0.2 - * @max 1.0 - * @decimal 2 - * @increment 0.05 - * @group FW Attitude Control - */ -PARAM_DEFINE_FLOAT(FW_R_TC, 0.4f); - -/** - * Attitude pitch time constant - * - * This defines the latency between a pitch step input and the achieved setpoint - * (inverse to a P gain). Smaller systems may require smaller values. - * - * @unit s - * @min 0.2 - * @max 1.0 - * @decimal 2 - * @increment 0.05 - * @group FW Attitude Control - */ -PARAM_DEFINE_FLOAT(FW_P_TC, 0.4f); - -/** - * Maximum positive / up pitch rate setpoint - * - * @unit deg/s - * @min 0.0 - * @max 180 - * @decimal 1 - * @increment 0.5 - * @group FW Attitude Control - */ -PARAM_DEFINE_FLOAT(FW_P_RMAX_POS, 60.0f); - -/** - * Maximum negative / down pitch rate setpoint - * - * @unit deg/s - * @min 0.0 - * @max 180 - * @decimal 1 - * @increment 0.5 - * @group FW Attitude Control - */ -PARAM_DEFINE_FLOAT(FW_P_RMAX_NEG, 60.0f); - -/** - * Maximum roll rate setpoint - * - * @unit deg/s - * @min 0.0 - * @max 180 - * @decimal 1 - * @increment 0.5 - * @group FW Attitude Control - */ -PARAM_DEFINE_FLOAT(FW_R_RMAX, 70.0f); - -/** - * Maximum yaw rate setpoint - * - * @unit deg/s - * @min 0.0 - * @max 180 - * @decimal 1 - * @increment 0.5 - * @group FW Attitude Control - */ -PARAM_DEFINE_FLOAT(FW_Y_RMAX, 50.0f); - -/** - * Enable wheel steering controller - * - * Only enabled during automatic runway takeoff and landing. - * In all manual modes the wheel is directly controlled with yaw stick. - * - * @boolean - * @group FW Attitude Control - */ -PARAM_DEFINE_INT32(FW_W_EN, 0); - -/** - * Wheel steering rate proportional gain - * - * This defines how much the wheel steering input will be commanded depending on the - * current body angular rate error. - * - * @unit %/rad/s - * @min 0.0 - * @max 10 - * @decimal 3 - * @increment 0.005 - * @group FW Attitude Control - */ -PARAM_DEFINE_FLOAT(FW_WR_P, 0.5f); - -/** - * Wheel steering rate integrator gain - * - * This gain defines how much control response will result out of a steady - * state error. It trims any constant error. - * - * @unit %/rad - * @min 0.0 - * @max 10 - * @decimal 3 - * @increment 0.005 - * @group FW Attitude Control - */ -PARAM_DEFINE_FLOAT(FW_WR_I, 0.1f); - -/** - * Wheel steering rate integrator limit - * - * @min 0.0 - * @max 1.0 - * @decimal 2 - * @increment 0.05 - * @group FW Attitude Control - */ -PARAM_DEFINE_FLOAT(FW_WR_IMAX, 0.4f); - -/** - * Maximum wheel steering rate - * - * This limits the maximum wheel steering rate the controller will output (in degrees per - * second). - * - * @unit deg/s - * @min 0.0 - * @max 90.0 - * @decimal 1 - * @increment 0.5 - * @group FW Attitude Control - */ -PARAM_DEFINE_FLOAT(FW_W_RMAX, 30.0f); - -/** - * Wheel steering rate feed forward - * - * @unit %/rad/s - * @min 0.0 - * @max 10 - * @decimal 2 - * @increment 0.05 - * @group FW Attitude Control - */ -PARAM_DEFINE_FLOAT(FW_WR_FF, 0.2f); - -/** - * Pitch setpoint offset (pitch at level flight) - * - * An airframe specific offset of the pitch setpoint in degrees, the value is - * added to the pitch setpoint and should correspond to the pitch at - * typical cruise speed of the airframe. - * - * @unit deg - * @min -90.0 - * @max 90.0 - * @decimal 1 - * @increment 0.5 - * @group FW Attitude Control - */ -PARAM_DEFINE_FLOAT(FW_PSP_OFF, 0.0f); - -/** - * Maximum manually added yaw rate - * - * This is the maximally added yaw rate setpoint from the yaw stick in any attitude controlled flight mode. - * It is added to the yaw rate setpoint generated by the controller for turn coordination. - * - * @unit deg/s - * @min 0 - * @decimal 1 - * @increment 0.5 - * @group FW Attitude Control - */ -PARAM_DEFINE_FLOAT(FW_MAN_YR_MAX, 30.f); - -/** - * Maximum manual roll angle - * - * Applies to both directions in all manual modes with attitude stabilization - * - * @unit deg - * @min 0.0 - * @max 90.0 - * @decimal 1 - * @increment 0.5 - * @group FW Attitude Control - */ -PARAM_DEFINE_FLOAT(FW_MAN_R_MAX, 45.0f); - -/** - * Maximum manual pitch angle - * - * Applies to both directions in all manual modes with attitude stabilization but without altitude control - * - * @unit deg - * @min 0.0 - * @max 90.0 - * @decimal 1 - * @increment 0.5 - * @group FW Attitude Control - */ -PARAM_DEFINE_FLOAT(FW_MAN_P_MAX, 30.0f); diff --git a/src/modules/fw_att_control/fw_att_control_params.yaml b/src/modules/fw_att_control/fw_att_control_params.yaml new file mode 100644 index 0000000000..a258cbcbc8 --- /dev/null +++ b/src/modules/fw_att_control/fw_att_control_params.yaml @@ -0,0 +1,185 @@ +module_name: fw_att_control +parameters: +- group: FW Attitude Control + definitions: + FW_R_TC: + description: + short: Attitude Roll Time Constant + long: |- + This defines the latency between a roll step input and the achieved setpoint + (inverse to a P gain). Smaller systems may require smaller values. + type: float + default: 0.4 + unit: s + min: 0.2 + max: 1.0 + decimal: 2 + increment: 0.05 + FW_P_TC: + description: + short: Attitude pitch time constant + long: |- + This defines the latency between a pitch step input and the achieved setpoint + (inverse to a P gain). Smaller systems may require smaller values. + type: float + default: 0.4 + unit: s + min: 0.2 + max: 1.0 + decimal: 2 + increment: 0.05 + FW_P_RMAX_POS: + description: + short: Maximum positive / up pitch rate setpoint + type: float + default: 60.0 + unit: deg/s + min: 0.0 + max: 180 + decimal: 1 + increment: 0.5 + FW_P_RMAX_NEG: + description: + short: Maximum negative / down pitch rate setpoint + type: float + default: 60.0 + unit: deg/s + min: 0.0 + max: 180 + decimal: 1 + increment: 0.5 + FW_R_RMAX: + description: + short: Maximum roll rate setpoint + type: float + default: 70.0 + unit: deg/s + min: 0.0 + max: 180 + decimal: 1 + increment: 0.5 + FW_Y_RMAX: + description: + short: Maximum yaw rate setpoint + type: float + default: 50.0 + unit: deg/s + min: 0.0 + max: 180 + decimal: 1 + increment: 0.5 + FW_W_EN: + description: + short: Enable wheel steering controller + long: |- + Only enabled during automatic runway takeoff and landing. + In all manual modes the wheel is directly controlled with yaw stick. + type: boolean + default: 0 + FW_WR_P: + description: + short: Wheel steering rate proportional gain + long: |- + This defines how much the wheel steering input will be commanded depending on the + current body angular rate error. + type: float + default: 0.5 + unit: '%/rad/s' + min: 0.0 + max: 10 + decimal: 3 + increment: 0.005 + FW_WR_I: + description: + short: Wheel steering rate integrator gain + long: |- + This gain defines how much control response will result out of a steady + state error. It trims any constant error. + type: float + default: 0.1 + unit: '%/rad' + min: 0.0 + max: 10 + decimal: 3 + increment: 0.005 + FW_WR_IMAX: + description: + short: Wheel steering rate integrator limit + type: float + default: 0.4 + min: 0.0 + max: 1.0 + decimal: 2 + increment: 0.05 + FW_W_RMAX: + description: + short: Maximum wheel steering rate + long: |- + This limits the maximum wheel steering rate the controller will output (in degrees per + second). + type: float + default: 30.0 + unit: deg/s + min: 0.0 + max: 90.0 + decimal: 1 + increment: 0.5 + FW_WR_FF: + description: + short: Wheel steering rate feed forward + type: float + default: 0.2 + unit: '%/rad/s' + min: 0.0 + max: 10 + decimal: 2 + increment: 0.05 + FW_PSP_OFF: + description: + short: Pitch setpoint offset (pitch at level flight) + long: |- + An airframe specific offset of the pitch setpoint in degrees, the value is + added to the pitch setpoint and should correspond to the pitch at + typical cruise speed of the airframe. + type: float + default: 0.0 + unit: deg + min: -90.0 + max: 90.0 + decimal: 1 + increment: 0.5 + FW_MAN_YR_MAX: + description: + short: Maximum manually added yaw rate + long: |- + This is the maximally added yaw rate setpoint from the yaw stick in any attitude controlled flight mode. + It is added to the yaw rate setpoint generated by the controller for turn coordination. + type: float + default: 30.0 + unit: deg/s + min: 0 + decimal: 1 + increment: 0.5 + FW_MAN_R_MAX: + description: + short: Maximum manual roll angle + long: Applies to both directions in all manual modes with attitude stabilization + type: float + default: 45.0 + unit: deg + min: 0.0 + max: 90.0 + decimal: 1 + increment: 0.5 + FW_MAN_P_MAX: + description: + short: Maximum manual pitch angle + long: Applies to both directions in all manual modes with attitude stabilization + but without altitude control + type: float + default: 30.0 + unit: deg + min: 0.0 + max: 90.0 + decimal: 1 + increment: 0.5 diff --git a/src/modules/fw_att_control/fw_pitch_controller.cpp b/src/modules/fw_att_control/fw_pitch_controller.cpp deleted file mode 100644 index 90ad9dce43..0000000000 --- a/src/modules/fw_att_control/fw_pitch_controller.cpp +++ /dev/null @@ -1,65 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2020-2023 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name ECL nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file fw_pitch_controller.cpp - * Implementation of a simple pitch P controller. - */ - -#include "fw_pitch_controller.h" -#include -#include -#include - -float PitchController::control_pitch(float pitch_setpoint, float euler_yaw_rate_setpoint, float roll, float pitch) -{ - /* Do not calculate control signal with bad inputs */ - if (!(PX4_ISFINITE(pitch_setpoint) && - PX4_ISFINITE(euler_yaw_rate_setpoint) && - PX4_ISFINITE(pitch) && - PX4_ISFINITE(roll))) { - - return _body_rate_setpoint; - } - - const float pitch_error = pitch_setpoint - pitch; - _euler_rate_setpoint = pitch_error / _tc; - - /* Transform setpoint to body angular rates (jacobian) */ - const float pitch_body_rate_setpoint_raw = cosf(roll) * _euler_rate_setpoint + - cosf(pitch) * sinf(roll) * euler_yaw_rate_setpoint; - - _body_rate_setpoint = math::constrain(pitch_body_rate_setpoint_raw, -_max_rate_neg, _max_rate_pos); - - return _body_rate_setpoint; -} diff --git a/src/modules/fw_att_control/fw_roll_controller.cpp b/src/modules/fw_att_control/fw_roll_controller.cpp deleted file mode 100644 index 659adfa9c2..0000000000 --- a/src/modules/fw_att_control/fw_roll_controller.cpp +++ /dev/null @@ -1,64 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2020-2023 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name ECL nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file fw_roll_controller.cpp - * Implementation of a simple roll P controller. - */ - -#include "fw_roll_controller.h" -#include -#include -#include - -float RollController::control_roll(float roll_setpoint, float euler_yaw_rate_setpoint, float roll, float pitch) -{ - /* Do not calculate control signal with bad inputs */ - if (!(PX4_ISFINITE(roll_setpoint) && - PX4_ISFINITE(euler_yaw_rate_setpoint) && - PX4_ISFINITE(pitch) && - PX4_ISFINITE(roll))) { - - return _body_rate_setpoint; - } - - const float roll_error = roll_setpoint - roll; - _euler_rate_setpoint = roll_error / _tc; - - /* Transform setpoint to body angular rates (jacobian) */ - const float roll_body_rate_setpoint_raw = _euler_rate_setpoint - sinf(pitch) * - euler_yaw_rate_setpoint; - _body_rate_setpoint = math::constrain(roll_body_rate_setpoint_raw, -_max_rate, _max_rate); - - return _body_rate_setpoint; -} diff --git a/src/modules/fw_att_control/fw_yaw_controller.cpp b/src/modules/fw_att_control/fw_yaw_controller.cpp deleted file mode 100644 index 4f27e8a610..0000000000 --- a/src/modules/fw_att_control/fw_yaw_controller.cpp +++ /dev/null @@ -1,98 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2020-2022 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name ECL nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file fw_yaw_controller.cpp - * Implementation of a simple coordinated turn yaw controller. - */ - -#include "fw_yaw_controller.h" -#include -#include -#include - -float YawController::control_yaw(float roll_setpoint, float euler_pitch_rate_setpoint, float roll, float pitch, - float airspeed) -{ - /* Do not calculate control signal with bad inputs */ - if (!(PX4_ISFINITE(roll_setpoint) && - PX4_ISFINITE(roll) && - PX4_ISFINITE(pitch) && - PX4_ISFINITE(euler_pitch_rate_setpoint) && - PX4_ISFINITE(airspeed))) { - - return _body_rate_setpoint; - } - - float constrained_roll; - bool inverted = false; - - /* roll is used as feedforward term and inverted flight needs to be considered */ - if (fabsf(roll) < math::radians(90.f)) { - /* not inverted, but numerically still potentially close to infinity */ - constrained_roll = math::constrain(roll, math::radians(-80.f), math::radians(80.f)); - - } else { - inverted = true; - - // inverted flight, constrain on the two extremes of -pi..+pi to avoid infinity - //note: the ranges are extended by 10 deg here to avoid numeric resolution effects - if (roll > 0.f) { - /* right hemisphere */ - constrained_roll = math::constrain(roll, math::radians(100.f), math::radians(180.f)); - - } else { - /* left hemisphere */ - constrained_roll = math::constrain(roll, math::radians(-180.f), math::radians(-100.f)); - } - } - - constrained_roll = math::constrain(constrained_roll, -fabsf(roll_setpoint), fabsf(roll_setpoint)); - - - if (!inverted) { - /* Calculate desired yaw rate from coordinated turn constraint / (no side forces) */ - _euler_rate_setpoint = tanf(constrained_roll) * cosf(pitch) * CONSTANTS_ONE_G / airspeed; - - /* Transform setpoint to body angular rates (jacobian) */ - const float yaw_body_rate_setpoint_raw = -sinf(roll) * euler_pitch_rate_setpoint + - cosf(roll) * cosf(pitch) * _euler_rate_setpoint; - _body_rate_setpoint = math::constrain(yaw_body_rate_setpoint_raw, -_max_rate, _max_rate); - } - - if (!PX4_ISFINITE(_body_rate_setpoint)) { - _body_rate_setpoint = 0.f; - } - - return _body_rate_setpoint; -} diff --git a/src/modules/fw_autotune_attitude_control/CMakeLists.txt b/src/modules/fw_autotune_attitude_control/CMakeLists.txt index 3c898a21ac..76b5441356 100644 --- a/src/modules/fw_autotune_attitude_control/CMakeLists.txt +++ b/src/modules/fw_autotune_attitude_control/CMakeLists.txt @@ -39,6 +39,8 @@ px4_add_module( SRCS fw_autotune_attitude_control.cpp fw_autotune_attitude_control.hpp + MODULE_CONFIG + fw_autotune_attitude_control_params.yaml DEPENDS hysteresis mathlib diff --git a/src/modules/fw_autotune_attitude_control/fw_autotune_attitude_control_params.c b/src/modules/fw_autotune_attitude_control/fw_autotune_attitude_control_params.c deleted file mode 100644 index 4a60977f01..0000000000 --- a/src/modules/fw_autotune_attitude_control/fw_autotune_attitude_control_params.c +++ /dev/null @@ -1,144 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2020-2021 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file fw_autotune_attitude_control_params.c - * - * Parameters used by the attitude auto-tuner - * - * @author Mathieu Bresciani - */ - - - -/** - * Controls when to apply the new gains - * - * After the auto-tuning sequence is completed, - * a new set of gains is available and can be applied - * immediately or after landing. - * - * @value 0 Do not apply the new gains (logging only) - * @value 1 Apply the new gains after disarm - * @value 2 Apply the new gains in air - * @group Autotune - */ -PARAM_DEFINE_INT32(FW_AT_APPLY, 2); - -/** - * Tuning axes selection - * - * Defines which axes will be tuned during the auto-tuning sequence - * - * Set bits in the following positions to enable: - * 0 : Roll - * 1 : Pitch - * 2 : Yaw - * - * @bit 0 roll - * @bit 1 pitch - * @bit 2 yaw - * @min 1 - * @max 7 - * @group Autotune - */ -PARAM_DEFINE_INT32(FW_AT_AXES, 3); - -/** - * Enable/disable auto tuning using a manual control AUX input - * - * Defines which RC_MAP_AUXn parameter maps the manual control channel used to enable/disable auto tuning. - * - * @value 0 Disable - * @value 1 Aux1 - * @value 2 Aux2 - * @value 3 Aux3 - * @value 4 Aux4 - * @value 5 Aux5 - * @value 6 Aux6 - * @min 0 - * @max 6 - * @group Autotune - */ -PARAM_DEFINE_INT32(FW_AT_MAN_AUX, 0); - -/** - * Start frequency of the injected signal - * - * Can be set lower or higher than the end frequency - * - * @min 0.1 - * @max 30.0 - * @decimal 1 - * @unit Hz - * @group Autotune - */ -PARAM_DEFINE_FLOAT(FW_AT_SYSID_F0, 1.f); - -/** - * End frequency of the injected signal - * - * Can be set lower or higher than the start frequency - * - * @min 0.1 - * @max 30.0 - * @decimal 1 - * @unit Hz - * @group Autotune - */ -PARAM_DEFINE_FLOAT(FW_AT_SYSID_F1, 10.f); - -/** - * Maneuver time for each axis - * - * Duration of the input signal sent on each axis during system identification - * - * @min 5 - * @max 120 - * @decimal 0 - * @unit s - * @group Autotune - */ -PARAM_DEFINE_FLOAT(FW_AT_SYSID_TIME, 10.f); - -/** - * Input signal type - * - * Type of signal used during system identification to excite the system. - * - * @value 0 Step - * @value 1 Linear sine sweep - * @value 2 Logarithmic sine sweep - * @group Autotune - */ -PARAM_DEFINE_INT32(FW_AT_SYSID_TYPE, 1); diff --git a/src/modules/fw_autotune_attitude_control/fw_autotune_attitude_control_params.yaml b/src/modules/fw_autotune_attitude_control/fw_autotune_attitude_control_params.yaml new file mode 100644 index 0000000000..5388f775ef --- /dev/null +++ b/src/modules/fw_autotune_attitude_control/fw_autotune_attitude_control_params.yaml @@ -0,0 +1,92 @@ +module_name: fw_autotune_attitude_control +parameters: +- group: Autotune + definitions: + FW_AT_APPLY: + description: + short: Controls when to apply the new gains + long: |- + After the auto-tuning sequence is completed, + a new set of gains is available and can be applied + immediately or after landing. + type: enum + values: + 0: Do not apply the new gains (logging only) + 1: Apply the new gains after disarm + 2: Apply the new gains in air + default: 2 + FW_AT_AXES: + description: + short: Tuning axes selection + long: |- + Defines which axes will be tuned during the auto-tuning sequence + + Set bits in the following positions to enable: + 0 : Roll + 1 : Pitch + 2 : Yaw + type: bitmask + bit: + 0: roll + 1: pitch + 2: yaw + default: 3 + min: 1 + max: 7 + FW_AT_MAN_AUX: + description: + short: Enable/disable auto tuning using a manual control AUX input + long: Defines which RC_MAP_AUXn parameter maps the manual control channel + used to enable/disable auto tuning. + type: enum + values: + 0: Disable + 1: Aux1 + 2: Aux2 + 3: Aux3 + 4: Aux4 + 5: Aux5 + 6: Aux6 + default: 0 + min: 0 + max: 6 + FW_AT_SYSID_F0: + description: + short: Start frequency of the injected signal + long: Can be set lower or higher than the end frequency + type: float + default: 1.0 + min: 0.1 + max: 30.0 + decimal: 1 + unit: Hz + FW_AT_SYSID_F1: + description: + short: End frequency of the injected signal + long: Can be set lower or higher than the start frequency + type: float + default: 10.0 + min: 0.1 + max: 30.0 + decimal: 1 + unit: Hz + FW_AT_SYSID_TIME: + description: + short: Maneuver time for each axis + long: Duration of the input signal sent on each axis during system identification + type: float + default: 10.0 + min: 5 + max: 120 + decimal: 0 + unit: s + FW_AT_SYSID_TYPE: + description: + short: Input signal type + long: Type of signal used during system identification to excite the system. + type: enum + values: + 0: Step + 1: Linear sine sweep + 2: Logarithmic sine sweep + default: 1 diff --git a/src/modules/fw_lateral_longitudinal_control/CMakeLists.txt b/src/modules/fw_lateral_longitudinal_control/CMakeLists.txt index 7642594b7a..553845c41d 100644 --- a/src/modules/fw_lateral_longitudinal_control/CMakeLists.txt +++ b/src/modules/fw_lateral_longitudinal_control/CMakeLists.txt @@ -12,4 +12,6 @@ px4_add_module( FwLateralLongitudinalControl.hpp DEPENDS ${CONTROL_DEPENDENCIES} -) + MODULE_CONFIG + fw_lat_long_params.yaml + ) diff --git a/src/modules/fw_lateral_longitudinal_control/FwLateralLongitudinalControl.cpp b/src/modules/fw_lateral_longitudinal_control/FwLateralLongitudinalControl.cpp index c9f3753ec1..9a53ddafc8 100644 --- a/src/modules/fw_lateral_longitudinal_control/FwLateralLongitudinalControl.cpp +++ b/src/modules/fw_lateral_longitudinal_control/FwLateralLongitudinalControl.cpp @@ -110,14 +110,13 @@ FwLateralLongitudinalControl::parameters_update() _tecs.set_airspeed_error_time_constant(_param_fw_t_tas_error_tc.get()); _tecs.set_ste_rate_time_const(_param_ste_rate_time_const.get()); _tecs.set_seb_rate_ff_gain(_param_seb_rate_ff.get()); - _tecs.set_airspeed_measurement_std_dev(_param_speed_standard_dev.get()); - _tecs.set_airspeed_rate_measurement_std_dev(_param_speed_rate_standard_dev.get()); - _tecs.set_airspeed_filter_process_std_dev(_param_process_noise_standard_dev.get()); _roll_slew_rate.setSlewRate(radians(_param_fw_pn_r_slew_max.get())); _tecs_alt_time_const_slew_rate.setSlewRate(TECS_ALT_TIME_CONST_SLEW_RATE); _tecs_alt_time_const_slew_rate.setForcedValue(_param_fw_t_h_error_tc.get() * _param_fw_thrtc_sc.get()); + + _airspeed_direction_control.setPGainFromPeriodAndDamping(_param_npfg_damping.get(), _param_npfg_period.get()); } void FwLateralLongitudinalControl::Run() @@ -298,7 +297,7 @@ void FwLateralLongitudinalControl::Run() // additional is_finite checks that should not be necessary, but are kept for safety float roll_body = PX4_ISFINITE(roll_sp) ? roll_sp : 0.0f; float pitch_body = PX4_ISFINITE(pitch_sp) ? pitch_sp : 0.0f; - const float yaw_body = _yaw; // yaw is not controlled in fixed wing, need to set it though for quaternion generation + float yaw_body = _yaw; const float thrust_body_x = PX4_ISFINITE(throttle_sp) ? throttle_sp : 0.0f; if (_control_mode_sub.get().flag_control_manual_enabled) { diff --git a/src/modules/fw_lateral_longitudinal_control/FwLateralLongitudinalControl.hpp b/src/modules/fw_lateral_longitudinal_control/FwLateralLongitudinalControl.hpp index b2205bd5a1..9aae9387fd 100644 --- a/src/modules/fw_lateral_longitudinal_control/FwLateralLongitudinalControl.hpp +++ b/src/modules/fw_lateral_longitudinal_control/FwLateralLongitudinalControl.hpp @@ -160,9 +160,6 @@ private: (ParamFloat) _param_ste_rate_time_const, (ParamFloat) _param_seb_rate_ff, (ParamFloat) _param_t_spdweight, - (ParamFloat) _param_speed_standard_dev, - (ParamFloat) _param_speed_rate_standard_dev, - (ParamFloat) _param_process_noise_standard_dev, (ParamFloat) _param_climbrate_target, (ParamFloat) _param_sinkrate_target, (ParamFloat) _param_fw_thr_max, @@ -171,7 +168,9 @@ private: (ParamFloat) _param_fw_thrtc_sc, (ParamFloat) _param_fw_t_thr_low_hgt, (ParamFloat) _param_fw_wind_arsp_sc, - (ParamFloat) _param_fw_gnd_spd_min + (ParamFloat) _param_fw_gnd_spd_min, + (ParamFloat) _param_npfg_damping, + (ParamFloat) _param_npfg_period ) hrt_abstime _last_time_loop_ran{}; diff --git a/src/modules/fw_lateral_longitudinal_control/fw_lat_long_params.c b/src/modules/fw_lateral_longitudinal_control/fw_lat_long_params.c deleted file mode 100644 index 0856e8c123..0000000000 --- a/src/modules/fw_lateral_longitudinal_control/fw_lat_long_params.c +++ /dev/null @@ -1,284 +0,0 @@ -/** - * Path navigation roll slew rate limit. - * - * Maximum change in roll angle setpoint per second. - * Applied in all Auto modes, plus manual Position & Altitude modes. - * - * @unit deg/s - * @min 0 - * @decimal 0 - * @increment 1 - * @group FW Lateral Control - */ -PARAM_DEFINE_FLOAT(FW_PN_R_SLEW_MAX, 90.0f); - -/** - * Minimum groundspeed - * - * The controller will increase the commanded airspeed to maintain - * this minimum groundspeed to the next waypoint. - * - * @unit m/s - * @min 0.0 - * @max 40 - * @decimal 1 - * @increment 0.5 - * @group FW Longitudinal Control - */ -PARAM_DEFINE_FLOAT(FW_GND_SPD_MIN, 5.0f); - - - - -// ----------longitudinal params---------- - -/** - * Throttle max slew rate - * - * Maximum slew rate for the commanded throttle - * - * @min 0.0 - * @max 1.0 - * @decimal 2 - * @increment 0.01 - * @group FW Longitudinal Control - */ -PARAM_DEFINE_FLOAT(FW_THR_SLEW_MAX, 0.0f); - -/** - * Low-height threshold for tighter altitude tracking - * - * Height above ground threshold below which tighter altitude - * tracking gets enabled (see FW_LND_THRTC_SC). Below this height, TECS smoothly - * (1 sec / sec) transitions the altitude tracking time constant from FW_T_ALT_TC - * to FW_LND_THRTC_SC*FW_T_ALT_TC. - * - * -1 to disable. - * - * @unit m - * @min -1 - * @decimal 0 - * @increment 1 - * @group FW Longitudinal Control - */ -PARAM_DEFINE_FLOAT(FW_T_THR_LOW_HGT, -1.f); - -/** - * Throttle damping factor - * - * This is the damping gain for the throttle demand loop. - * - * @min 0.0 - * @max 1.0 - * @decimal 3 - * @increment 0.01 - * @group FW Longitudinal Control - */ -PARAM_DEFINE_FLOAT(FW_T_THR_DAMPING, 0.05f); - -/** - * Integrator gain throttle - * - * Increase it to trim out speed and height offsets faster, - * with the downside of possible overshoots and oscillations. - * - * @min 0.0 - * @max 1.0 - * @decimal 3 - * @increment 0.005 - * @group FW Longitudinal Control - */ -PARAM_DEFINE_FLOAT(FW_T_THR_INTEG, 0.02f); - -/** - * Integrator gain pitch - * - * Increase it to trim out speed and height offsets faster, - * with the downside of possible overshoots and oscillations. - * - * @min 0.0 - * @max 2.0 - * @decimal 2 - * @increment 0.05 - * @group FW Longitudinal Control - */ -PARAM_DEFINE_FLOAT(FW_T_I_GAIN_PIT, 0.1f); - -/** - * Maximum vertical acceleration - * - * This is the maximum vertical acceleration - * either up or down that the controller will use to correct speed - * or height errors. - * - * @unit m/s^2 - * @min 1.0 - * @max 10.0 - * @decimal 1 - * @increment 0.5 - * @group FW Longitudinal Control - */ -PARAM_DEFINE_FLOAT(FW_T_VERT_ACC, 7.0f); - -/** - * Airspeed measurement standard deviation - * - * For the airspeed filter in TECS. - * - * @unit m/s - * @min 0.01 - * @max 10.0 - * @decimal 2 - * @increment 0.1 - * @group FW Longitudinal Control - */ -PARAM_DEFINE_FLOAT(FW_T_SPD_STD, 0.07f); - -/** - * Airspeed rate measurement standard deviation - * - * For the airspeed filter in TECS. - * - * @unit m/s^2 - * @min 0.01 - * @max 10.0 - * @decimal 2 - * @increment 0.1 - * @group FW Longitudinal Control - */ -PARAM_DEFINE_FLOAT(FW_T_SPD_DEV_STD, 0.2f); - -/** - * Process noise standard deviation for the airspeed rate - * - * This is defining the noise in the airspeed rate for the constant airspeed rate model - * of the TECS airspeed filter. - * - * @unit m/s^2 - * @min 0.01 - * @max 10.0 - * @decimal 2 - * @increment 0.1 - * @group FW Longitudinal Control - */ -PARAM_DEFINE_FLOAT(FW_T_SPD_PRC_STD, 0.2f); - -/** - * Roll -> Throttle feedforward - * - * Is used to compensate for the additional drag created by turning. - * Increase this gain if the aircraft initially loses energy in turns - * and reduce if the aircraft initially gains energy in turns. - * - * @min 0.0 - * @max 20.0 - * @decimal 1 - * @increment 0.5 - * @group FW Longitudinal Control - */ -PARAM_DEFINE_FLOAT(FW_T_RLL2THR, 15.0f); - -/** - * Pitch damping gain - * - * @min 0.0 - * @max 2.0 - * @decimal 2 - * @increment 0.1 - * @group FW Longitudinal Control - */ -PARAM_DEFINE_FLOAT(FW_T_PTCH_DAMP, 0.1f); - -/** - * Altitude error time constant. - * - * @min 2.0 - * @decimal 2 - * @increment 0.5 - * @group FW Longitudinal Control - */ -PARAM_DEFINE_FLOAT(FW_T_ALT_TC, 5.0f); - -/** - * Fast descend: minimum altitude error - * - * Minimum altitude error needed to descend with max airspeed and minimal throttle. - * A negative value disables fast descend. - * - * @min -1.0 - * @decimal 0 - * @group FW Longitudinal Control - */ -PARAM_DEFINE_FLOAT(FW_T_F_ALT_ERR, -1.0f); - -/** - * Height rate feed forward - * - * @min 0.0 - * @max 1.0 - * @decimal 2 - * @increment 0.05 - * @group FW Longitudinal Control - */ -PARAM_DEFINE_FLOAT(FW_T_HRATE_FF, 0.3f); - -/** - * True airspeed error time constant. - * - * @min 2.0 - * @decimal 2 - * @increment 0.5 - * @group FW Longitudinal Control - */ -PARAM_DEFINE_FLOAT(FW_T_TAS_TC, 5.0f); - -/** - * Specific total energy rate first order filter time constant. - * - * This filter is applied to the specific total energy rate used for throttle damping. - * - * @min 0.0 - * @max 2 - * @decimal 2 - * @increment 0.01 - * @group FW Longitudinal Control - */ -PARAM_DEFINE_FLOAT(FW_T_STE_R_TC, 0.4f); - -/** - * Specific total energy balance rate feedforward gain. - * - * - * @min 0.5 - * @max 3 - * @decimal 2 - * @increment 0.01 - * @group FW Longitudinal Control - */ -PARAM_DEFINE_FLOAT(FW_T_SEB_R_FF, 1.0f); - -/** - * Wind-based airspeed scaling factor - * - * Multiplying this factor with the current absolute wind estimate gives the airspeed offset - * added to the minimum airspeed setpoint limit. This helps to make the - * system more robust against disturbances (turbulence) in high wind. - * - * @min 0 - * @decimal 2 - * @increment 0.01 - * @group FW Longitudinal Control - */ -PARAM_DEFINE_FLOAT(FW_WIND_ARSP_SC, 0.f); - -/** - * Maximum descent rate - * - * @unit m/s - * @min 1.0 - * @max 15.0 - * @decimal 1 - * @increment 0.5 - * @group FW Longitudinal Control - */ -PARAM_DEFINE_FLOAT(FW_T_SINK_MAX, 5.0f); diff --git a/src/modules/fw_lateral_longitudinal_control/fw_lat_long_params.yaml b/src/modules/fw_lateral_longitudinal_control/fw_lat_long_params.yaml new file mode 100644 index 0000000000..42c9dfb0e5 --- /dev/null +++ b/src/modules/fw_lateral_longitudinal_control/fw_lat_long_params.yaml @@ -0,0 +1,204 @@ +module_name: fw_lateral_longitudinal_control +parameters: +- group: FW Lateral Control + definitions: + FW_PN_R_SLEW_MAX: + description: + short: Path navigation roll slew rate limit + long: |- + Maximum change in roll angle setpoint per second. + Applied in all Auto modes, plus manual Position & Altitude modes. + type: float + default: 90.0 + unit: deg/s + min: 0 + decimal: 0 + increment: 1 +- group: FW Longitudinal Control + definitions: + FW_GND_SPD_MIN: + description: + short: Minimum groundspeed + long: |- + The controller will increase the commanded airspeed to maintain + this minimum groundspeed to the next waypoint. + type: float + default: 5.0 + unit: m/s + min: 0.0 + max: 40 + decimal: 1 + increment: 0.5 + FW_THR_SLEW_MAX: + description: + short: Throttle max slew rate + long: Maximum slew rate for the commanded throttle + type: float + default: 0.0 + min: 0.0 + max: 1.0 + decimal: 2 + increment: 0.01 + FW_T_THR_LOW_HGT: + description: + short: Low-height threshold for tighter altitude tracking + long: |- + Height above ground threshold below which tighter altitude + tracking gets enabled (see FW_LND_THRTC_SC). Below this height, TECS smoothly + (1 sec / sec) transitions the altitude tracking time constant from FW_T_ALT_TC + to FW_LND_THRTC_SC*FW_T_ALT_TC. + + -1 to disable. + type: float + default: -1.0 + unit: m + min: -1 + decimal: 0 + increment: 1 + FW_T_THR_DAMPING: + description: + short: Throttle damping factor + long: This is the damping gain for the throttle demand loop. + type: float + default: 0.05 + min: 0.0 + max: 1.0 + decimal: 3 + increment: 0.01 + FW_T_THR_INTEG: + description: + short: Integrator gain throttle + long: |- + Increase it to trim out speed and height offsets faster, + with the downside of possible overshoots and oscillations. + type: float + default: 0.02 + min: 0.0 + max: 1.0 + decimal: 3 + increment: 0.005 + FW_T_I_GAIN_PIT: + description: + short: Integrator gain pitch + long: |- + Increase it to trim out speed and height offsets faster, + with the downside of possible overshoots and oscillations. + type: float + default: 0.1 + min: 0.0 + max: 2.0 + decimal: 2 + increment: 0.05 + FW_T_VERT_ACC: + description: + short: Maximum vertical acceleration + long: |- + This is the maximum vertical acceleration + either up or down that the controller will use to correct speed + or height errors. + type: float + default: 7.0 + unit: m/s^2 + min: 1.0 + max: 10.0 + decimal: 1 + increment: 0.5 + FW_T_RLL2THR: + description: + short: Roll -> Throttle feedforward + long: |- + Is used to compensate for the additional drag created by turning. + Increase this gain if the aircraft initially loses energy in turns + and reduce if the aircraft initially gains energy in turns. + type: float + default: 15.0 + min: 0.0 + max: 20.0 + decimal: 1 + increment: 0.5 + FW_T_PTCH_DAMP: + description: + short: Pitch damping gain + type: float + default: 0.1 + min: 0.0 + max: 2.0 + decimal: 2 + increment: 0.1 + FW_T_ALT_TC: + description: + short: Altitude error time constant + type: float + default: 5.0 + min: 2.0 + decimal: 2 + increment: 0.5 + FW_T_F_ALT_ERR: + description: + short: 'Fast descend: minimum altitude error' + long: |- + Minimum altitude error needed to descend with max airspeed and minimal throttle. + A negative value disables fast descend. + type: float + default: -1.0 + min: -1.0 + decimal: 0 + FW_T_HRATE_FF: + description: + short: Height rate feed forward + type: float + default: 0.5 + min: 0.0 + max: 1.0 + decimal: 2 + increment: 0.05 + FW_T_TAS_TC: + description: + short: True airspeed error time constant + type: float + default: 5.0 + min: 2.0 + decimal: 2 + increment: 0.5 + FW_T_STE_R_TC: + description: + short: Specific total energy rate first order filter time constant + long: This filter is applied to the specific total energy rate used for throttle + damping. + type: float + default: 0.4 + min: 0.0 + max: 2 + decimal: 2 + increment: 0.01 + FW_T_SEB_R_FF: + description: + short: Specific total energy balance rate feedforward gain + type: float + default: 1.0 + min: 0.5 + max: 3 + decimal: 2 + increment: 0.01 + FW_WIND_ARSP_SC: + description: + short: Wind-based airspeed scaling factor + long: |- + Multiplying this factor with the current absolute wind estimate gives the airspeed offset + added to the minimum airspeed setpoint limit. This helps to make the + system more robust against disturbances (turbulence) in high wind. + type: float + default: 0.0 + min: 0 + decimal: 2 + increment: 0.01 + FW_T_SINK_MAX: + description: + short: Maximum descent rate + type: float + default: 5.0 + unit: m/s + min: 1.0 + max: 15.0 + decimal: 1 + increment: 0.5 diff --git a/src/modules/fw_mode_manager/CMakeLists.txt b/src/modules/fw_mode_manager/CMakeLists.txt index dc32389580..0cbec8f3da 100644 --- a/src/modules/fw_mode_manager/CMakeLists.txt +++ b/src/modules/fw_mode_manager/CMakeLists.txt @@ -63,6 +63,8 @@ px4_add_module( FixedWingModeManager.hpp ControllerConfigurationHandler.cpp ControllerConfigurationHandler.hpp + MODULE_CONFIG + fw_mode_manager_params.yaml DEPENDS ${POSCONTROL_DEPENDENCIES} ) diff --git a/src/modules/fw_mode_manager/FixedWingModeManager.cpp b/src/modules/fw_mode_manager/FixedWingModeManager.cpp index d33d241c16..a3ee8a113d 100644 --- a/src/modules/fw_mode_manager/FixedWingModeManager.cpp +++ b/src/modules/fw_mode_manager/FixedWingModeManager.cpp @@ -33,6 +33,7 @@ #include "FixedWingModeManager.hpp" +#include #include #include @@ -139,7 +140,7 @@ FixedWingModeManager::vehicle_command_poll() } else if (vehicle_command.command == vehicle_command_s::VEHICLE_CMD_DO_CHANGE_SPEED) { - if ((static_cast(vehicle_command.param1 + .5f) == vehicle_command_s::SPEED_TYPE_AIRSPEED)) { + if ((static_cast(lroundf(vehicle_command.param1)) == vehicle_command_s::SPEED_TYPE_AIRSPEED)) { if (vehicle_command.param2 > FLT_EPSILON) { // param2 is an equivalent airspeed setpoint if (_control_mode_current == FW_POSCTRL_MODE_AUTO) { _pos_sp_triplet.current.cruising_speed = vehicle_command.param2; @@ -252,7 +253,7 @@ FixedWingModeManager::vehicle_attitude_poll() _pitch = euler_angles(1); const Vector3f body_acceleration = R.transpose() * Vector3f{_local_pos.ax, _local_pos.ay, _local_pos.az}; - _body_acceleration_x = body_acceleration(0); + _body_acceleration_norm = body_acceleration.norm(); const Vector3f body_velocity = R.transpose() * Vector3f{_local_pos.vx, _local_pos.vy, _local_pos.vz}; _body_velocity_x = body_velocity(0); @@ -1028,7 +1029,7 @@ FixedWingModeManager::controlAutoFigureEight(const float control_interval, const } } -void FixedWingModeManager::publishFigureEightStatus(const position_setpoint_s pos_sp) +void FixedWingModeManager::publishFigureEightStatus(const position_setpoint_s &pos_sp) { figure_eight_status_s figure_eight_status{}; figure_eight_status.timestamp = hrt_absolute_time(); @@ -1195,8 +1196,8 @@ FixedWingModeManager::control_auto_takeoff(const hrt_abstime &now, const float c if (_control_mode.flag_armed) { /* Perform launch detection */ - /* Detect launch using body X (forward) acceleration */ - _launchDetector.update(control_interval, _body_acceleration_x); + /* Detect launch using body acceleration norm */ + _launchDetector.update(control_interval, _body_acceleration_norm); } } else { @@ -1371,8 +1372,8 @@ FixedWingModeManager::control_auto_takeoff_no_nav(const hrt_abstime &now, const _launchDetector.getLaunchDetected() < launch_detection_status_s::STATE_FLYING) { if (_control_mode.flag_armed) { - /* Detect launch using body X (forward) acceleration */ - _launchDetector.update(control_interval, _body_acceleration_x); + /* Detect launch using body acceleration norm */ + _launchDetector.update(control_interval, _body_acceleration_norm); } } else { @@ -2563,7 +2564,7 @@ void FixedWingModeManager::publishLocalPositionSetpoint(const position_setpoint_ _local_pos_sp_pub.publish(local_position_setpoint); } -void FixedWingModeManager::publishOrbitStatus(const position_setpoint_s pos_sp) +void FixedWingModeManager::publishOrbitStatus(const position_setpoint_s &pos_sp) { orbit_status_s orbit_status{}; orbit_status.timestamp = hrt_absolute_time(); diff --git a/src/modules/fw_mode_manager/FixedWingModeManager.hpp b/src/modules/fw_mode_manager/FixedWingModeManager.hpp index 418c911dcd..9c3919a456 100644 --- a/src/modules/fw_mode_manager/FixedWingModeManager.hpp +++ b/src/modules/fw_mode_manager/FixedWingModeManager.hpp @@ -258,7 +258,7 @@ private: float _pitch{0.0f}; // [rad] current pitch angle from attitude float _throttle{0.0f}; // [0-1] last set throttle - float _body_acceleration_x{0.f}; + float _body_acceleration_norm{0.f}; float _body_velocity_x{0.f}; MapProjection _global_local_proj_ref{}; @@ -418,7 +418,7 @@ private: void controlAutoFigureEight(const float control_interval, const Vector2d &curr_pos, const Vector2f &ground_speed, const position_setpoint_s &pos_sp_curr); - void publishFigureEightStatus(const position_setpoint_s pos_sp); + void publishFigureEightStatus(const position_setpoint_s &pos_sp); #endif // CONFIG_FIGURE_OF_EIGHT // Update our local parameter cache. @@ -672,7 +672,7 @@ private: */ void set_control_mode_current(const hrt_abstime &now); - void publishOrbitStatus(const position_setpoint_s pos_sp); + void publishOrbitStatus(const position_setpoint_s &pos_sp); float getMaxRollAngleNearGround(const float altitude, const float terrain_altitude) const; diff --git a/src/modules/fw_mode_manager/fw_mode_manager_params.c b/src/modules/fw_mode_manager/fw_mode_manager_params.c deleted file mode 100644 index 0d3cdf292c..0000000000 --- a/src/modules/fw_mode_manager/fw_mode_manager_params.c +++ /dev/null @@ -1,638 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2013-2025 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * NPFG period - * - * Period of NPFG control law. - * - * @unit s - * @min 1.0 - * @max 100.0 - * @decimal 1 - * @increment 0.1 - * @group FW NPFG Control - */ -PARAM_DEFINE_FLOAT(NPFG_PERIOD, 10.0f); - -/** - * NPFG damping ratio - * - * Damping ratio of NPFG control law. - * - * @min 0.10 - * @max 1.00 - * @decimal 2 - * @increment 0.01 - * @group FW NPFG Control - */ -PARAM_DEFINE_FLOAT(NPFG_DAMPING, 0.7f); - -/** - * Enable automatic lower bound on the NPFG period - * - * Avoids limit cycling from a too aggressively tuned period/damping combination. - * If false, also disables upper bound NPFG_PERIOD_UB. - * - * @boolean - * @group FW NPFG Control - */ -PARAM_DEFINE_INT32(NPFG_LB_PERIOD, 1); - -/** - * Enable automatic upper bound on the NPFG period - * - * Adapts period to maintain track keeping in variable winds and path curvature. - * - * @boolean - * @group FW NPFG Control - */ -PARAM_DEFINE_INT32(NPFG_UB_PERIOD, 1); - -/** - * Roll time constant - * - * Time constant of roll controller command / response, modeled as first order delay. - * Used to determine lower period bound. Setting zero disables automatic period bounding. - * - * @unit s - * @min 0.00 - * @max 2.00 - * @decimal 2 - * @increment 0.05 - * @group FW NPFG Control - */ -PARAM_DEFINE_FLOAT(NPFG_ROLL_TC, 0.5f); - -/** - * NPFG switch distance multiplier - * - * Multiplied by the track error boundary to determine when the aircraft switches - * to the next waypoint and/or path segment. Should be less than 1. - * - * @min 0.1 - * @max 1.0 - * @decimal 2 - * @increment 0.01 - * @group FW NPFG Control - */ -PARAM_DEFINE_FLOAT(NPFG_SW_DST_MLT, 0.32f); - -/** - * Period safety factor - * - * Multiplied by period for conservative minimum period bounding (when period lower - * bounding is enabled). 1.0 bounds at marginal stability. - * - * @min 1.0 - * @max 10.0 - * @decimal 1 - * @increment 0.1 - * @group FW NPFG Control - */ -PARAM_DEFINE_FLOAT(NPFG_PERIOD_SF, 1.5f); - - -/** - * Minimum pitch angle setpoint - * - * Applies in any altitude controlled flight mode. - * - * @unit deg - * @min -60.0 - * @max 0.0 - * @decimal 1 - * @increment 0.5 - * @group FW General - */ -PARAM_DEFINE_FLOAT(FW_P_LIM_MIN, -30.0f); - -/** - * Maximum pitch angle setpoint - * - * Applies in any altitude controlled flight mode. - * - * @unit deg - * @min 0.0 - * @max 80.0 - * @decimal 1 - * @increment 0.5 - * @group FW General - */ -PARAM_DEFINE_FLOAT(FW_P_LIM_MAX, 30.0f); - -/** - * Maximum roll angle setpoint - * - * Applies in any altitude controlled flight mode. - * - * @unit deg - * @min 35.0 - * @max 75.0 - * @decimal 1 - * @increment 0.5 - * @group FW General - */ -PARAM_DEFINE_FLOAT(FW_R_LIM, 50.0f); - -/** - * Throttle limit max - * - * Applies in any altitude controlled flight mode. - * Should be set accordingly to achieve FW_T_CLMB_MAX. - * - * @unit norm - * @min 0.0 - * @max 1.0 - * @decimal 2 - * @increment 0.01 - * @group FW General - */ -PARAM_DEFINE_FLOAT(FW_THR_MAX, 1.0f); - -/** - * Throttle limit min - * - * Applies in any altitude controlled flight mode. - * Usually set to 0 but can be increased to prevent the motor from stopping when - * descending, which can increase achievable descent rates. - * - * @unit norm - * @min 0.0 - * @max 1.0 - * @decimal 2 - * @increment 0.01 - * @group FW General - */ -PARAM_DEFINE_FLOAT(FW_THR_MIN, 0.0f); - -/** - * Idle throttle - * - * This is the minimum throttle while on the ground ("landed") in auto modes. - * - * @unit norm - * @min 0.0 - * @max 1.0 - * @decimal 2 - * @increment 0.01 - * @group FW General - */ -PARAM_DEFINE_FLOAT(FW_THR_IDLE, 0.0f); - -/** - * Maximum landing slope angle - * - * Typically the desired landing slope angle when landing configuration (flaps, airspeed) is enabled. - * Set this value within the vehicle's performance limits. - * - * @unit deg - * @min 1.0 - * @max 45.0 - * @decimal 1 - * @increment 0.5 - * @group FW Auto Landing - */ -PARAM_DEFINE_FLOAT(FW_LND_ANG, 5.0f); - -/** - * Minimum pitch during takeoff. - * - * @unit deg - * @min -5.0 - * @max 80.0 - * @decimal 1 - * @increment 0.5 - * @group FW Auto Takeoff - */ -PARAM_DEFINE_FLOAT(FW_TKO_PITCH_MIN, 10.0f); - -/** - * Takeoff Airspeed - * - * The calibrated airspeed setpoint during the takeoff climbout. - * - * If set <= 0, FW_AIRSPD_MIN will be set by default. - * - * @unit m/s - * @min -1.0 - * @decimal 1 - * @increment 0.1 - * @group FW Auto Takeoff - */ -PARAM_DEFINE_FLOAT(FW_TKO_AIRSPD, -1.0f); - -/** - * Landing flare altitude (relative to landing altitude) - * - * NOTE: max(FW_LND_FLALT, FW_LND_FL_TIME * |z-velocity|) is taken as the flare altitude - * - * @unit m - * @min 0.0 - * @decimal 1 - * @increment 0.5 - * @group FW Auto Landing - */ -PARAM_DEFINE_FLOAT(FW_LND_FLALT, 0.5f); - -/** - * Use terrain estimation during landing. - * - * This is critical for detecting when to flare, and should be enabled if possible. - * - * If enabled and no measurement is found within a given timeout, the landing waypoint altitude will be used OR the landing - * will be aborted, depending on the criteria set in FW_LND_ABORT. - * - * If disabled, FW_LND_ABORT terrain based criteria are ignored. - * - * @min 0 - * @max 2 - * @value 0 Disable the terrain estimate - * @value 1 Use the terrain estimate to trigger the flare (only) - * @value 2 Calculate landing glide slope relative to the terrain estimate - * @group FW Auto Landing - */ -PARAM_DEFINE_INT32(FW_LND_USETER, 1); - -/** - * Early landing configuration deployment - * - * Allows to deploy the landing configuration (flaps, landing airspeed, etc.) already in - * the loiter-down waypoint before the final approach. - * Otherwise is enabled only in the final approach. - * - * @boolean - * - * @group FW Auto Landing - */ -PARAM_DEFINE_INT32(FW_LND_EARLYCFG, 0); - -/** - * Flare, minimum pitch - * - * Minimum pitch during landing flare. - * - * @unit deg - * @min -5 - * @max 15.0 - * @decimal 1 - * @increment 0.5 - * @group FW Auto Landing - */ -PARAM_DEFINE_FLOAT(FW_LND_FL_PMIN, 2.5f); - -/** - * Flare, maximum pitch - * - * Maximum pitch during landing flare. - * - * @unit deg - * @min 0 - * @max 45.0 - * @decimal 1 - * @increment 0.5 - * @group FW Auto Landing - */ -PARAM_DEFINE_FLOAT(FW_LND_FL_PMAX, 15.0f); - -/** - * Landing airspeed - * - * The calibrated airspeed setpoint during landing. - * - * If set <= 0, landing airspeed = FW_AIRSPD_MIN by default. - * - * @unit m/s - * @min -1.0 - * @decimal 1 - * @increment 0.1 - * @group FW Auto Landing - */ -PARAM_DEFINE_FLOAT(FW_LND_AIRSPD, -1.f); - -/** - * Altitude time constant factor for landing and low-height flight - * - * The TECS altitude time constant (FW_T_ALT_TC) is multiplied by this value. - * - * @unit - * @min 0.2 - * @max 1.0 - * @decimal 1 - * @increment 0.1 - * @group FW Auto Landing - */ -PARAM_DEFINE_FLOAT(FW_LND_THRTC_SC, 1.0f); - -/** - * Speed <--> Altitude weight - * - * Adjusts the amount of weighting that the pitch control - * applies to speed vs height errors. - * 0 -> control height only - * 2 -> control speed only (gliders) - * - * @min 0.0 - * @max 2.0 - * @decimal 1 - * @increment 1.0 - * @group FW General - */ -PARAM_DEFINE_FLOAT(FW_T_SPDWEIGHT, 1.0f); - -/** - * Custom stick configuration - * - * Applies in manual Position and Altitude flight modes. - * - * @min 0 - * @max 3 - * @bit 0 Alternative stick configuration (height rate on throttle stick, airspeed on pitch stick) - * @bit 1 Enable airspeed setpoint via sticks in altitude and position flight mode - * @group FW General - */ -PARAM_DEFINE_INT32(FW_POS_STK_CONF, 2); - -/** - * Default target climbrate. - * - * In auto modes: default climb rate output by controller to achieve altitude setpoints. - * In manual modes: maximum climb rate setpoint. - * - * @unit m/s - * @min 0.1 - * @decimal 2 - * @increment 0.01 - * @group FW General - */ -PARAM_DEFINE_FLOAT(FW_T_CLMB_R_SP, 3.0f); - -/** - * Default target sinkrate. - * - * In auto modes: default sink rate output by controller to achieve altitude setpoints. - * In manual modes: maximum sink rate setpoint. - * - * @unit m/s - * @min 0.1 - * @decimal 2 - * @increment 0.01 - * @group FW General - */ -PARAM_DEFINE_FLOAT(FW_T_SINK_R_SP, 2.0f); - -/** - * GPS failure loiter time - * - * The time the system should do open loop loiter and wait for GPS recovery - * before it starts descending. Set to 0 to disable. Roll angle is set to FW_GPSF_R. - * Does only apply for fixed-wing vehicles or VTOLs with NAV_FORCE_VT set to 0. - * - * @unit s - * @min 0 - * @group FW General - */ -PARAM_DEFINE_INT32(FW_GPSF_LT, 30); - -/** - * GPS failure fixed roll angle - * - * Roll angle in GPS failure loiter mode. - * - * @unit deg - * @min 0.0 - * @max 60.0 - * @decimal 1 - * @increment 0.5 - * @group FW General - */ -PARAM_DEFINE_FLOAT(FW_GPSF_R, 15.0f); - - -/** - * The aircraft's wing span (length from tip to tip). - * - * This is used for limiting the roll setpoint near the ground. (if multiple wings, take the longest span) - * - * @unit m - * @min 0.1 - * @decimal 1 - * @increment 0.1 - * @group FW General - */ -PARAM_DEFINE_FLOAT(FW_WING_SPAN, 3.0); - -/** - * Height (AGL) of the wings when the aircraft is on the ground. - * - * This is used to constrain a minimum altitude below which we keep wings level to avoid wing tip strike. It's safer - * to give a slight margin here (> 0m) - * - * @unit m - * @min 0.0 - * @decimal 1 - * @increment 1 - * @group FW General - */ -PARAM_DEFINE_FLOAT(FW_WING_HEIGHT, 0.5); - -/** - * Landing flare time - * - * Multiplied by the descent rate to calculate a dynamic altitude at which - * to trigger the flare. - * - * NOTE: max(FW_LND_FLALT, FW_LND_FL_TIME * descent rate) is taken as the flare altitude - * - * @unit s - * @min 0.1 - * @max 5.0 - * @decimal 1 - * @increment 0.1 - * @group FW Auto Landing - */ -PARAM_DEFINE_FLOAT(FW_LND_FL_TIME, 1.0f); - -/** - * Landing touchdown time (since flare start) - * - * This is the time after the start of flaring that we expect the vehicle to touch the runway. - * At this time, a 0.5s clamp down ramp will engage, constraining the pitch setpoint to RWTO_PSP. - * If enabled, ensure that RWTO_PSP is configured appropriately for full gear contact on ground roll. - * - * Set to -1.0 to disable touchdown clamping. E.g. it may not be desirable to clamp on belly landings. - * - * The touchdown time will be constrained to be greater than or equal to the flare time (FW_LND_FL_TIME). - * - * @unit s - * @min -1.0 - * @max 5.0 - * @decimal 1 - * @increment 0.1 - * @group FW Auto Landing - */ -PARAM_DEFINE_FLOAT(FW_LND_TD_TIME, -1.0f); - -/** - * Landing flare sink rate - * - * TECS will attempt to control the aircraft to this sink rate via pitch angle (throttle killed during flare) - * - * @unit m/s - * @min 0.0 - * @max 2 - * @decimal 2 - * @increment 0.1 - * @group FW Auto Landing - */ -PARAM_DEFINE_FLOAT(FW_LND_FL_SINK, 0.25f); - -/** - * Maximum lateral position offset for the touchdown point - * - * @unit m - * @min 0.0 - * @max 10.0 - * @decimal 1 - * @increment 1 - * @group FW Auto Landing - */ -PARAM_DEFINE_FLOAT(FW_LND_TD_OFF, 3.0); - -/** - * Landing touchdown nudging option. - * - * Approach angle nudging: shifts the touchdown point laterally while keeping the approach entrance point constant - * Approach path nudging: shifts the touchdown point laterally along with the entire approach path - * - * This is useful for manually adjusting the landing point in real time when map or GNSS errors cause an offset from the - * desired landing vector. Nudging is done with yaw stick, constrained to FW_LND_TD_OFF (in meters) and the direction is - * relative to the vehicle heading (stick deflection to the right = land point moves to the right as seen by the vehicle). - * - * @min 0 - * @max 2 - * @value 0 Disable nudging - * @value 1 Nudge approach angle - * @value 2 Nudge approach path - * @group FW Auto Landing - */ -PARAM_DEFINE_INT32(FW_LND_NUDGE, 2); - -/** - * Bit mask to set the automatic landing abort conditions. - * - * Terrain estimation: - * bit 0: Abort if terrain is not found - * bit 1: Abort if terrain times out (after a first successful measurement) - * - * The last estimate is always used as ground, whether the last valid measurement or the land waypoint, depending on the - * selected abort criteria, until an abort condition is entered. If FW_LND_USETER == 0, these bits are ignored. - * - * TODO: Extend automatic abort conditions - * e.g. glide slope tracking error (horizontal and vertical) - * - * @min 0 - * @max 3 - * @bit 0 Abort if terrain is not found (only applies to mission landings) - * @bit 1 Abort if terrain times out (after a first successful measurement) - * @group FW Auto Landing - */ -PARAM_DEFINE_INT32(FW_LND_ABORT, 3); - -/** - * Fixed-wing launch detection - * - * Enables automatic launch detection based on measured acceleration. Use for hand- or catapult-launched vehicles. - * Not compatible with runway takeoff. - * - * @boolean - * @group FW Auto Takeoff - */ -PARAM_DEFINE_INT32(FW_LAUN_DETCN_ON, 0); - -/** - * Control surface launch delay - * - * Locks control surfaces during pre-launch (armed) and until this time since launch has passed. - * Only affects control surfaces that have corresponding flag set, and not active for runway takeoff. - * Set to 0 to disable any surface locking after arming. - * - * @unit s - * @min 0.0 - * @decimal 1 - * @increment 0.1 - * @group FW Auto Takeoff - */ -PARAM_DEFINE_FLOAT(FW_LAUN_CS_LK_DY, 0.f); - -/** - * Flaps setting during take-off - * - * Sets a fraction of full flaps during take-off. - * Also applies to flaperons if enabled in the mixer/allocation. - * - * @unit norm - * @min 0.0 - * @max 1.0 - * @decimal 2 - * @increment 0.01 - * @group FW Auto Takeoff - */ -PARAM_DEFINE_FLOAT(FW_FLAPS_TO_SCL, 0.0f); - -/** - * Flaps setting during landing - * - * Sets a fraction of full flaps during landing. - * Also applies to flaperons if enabled in the mixer/allocation. - * - * @unit norm - * @min 0.0 - * @max 1.0 - * @decimal 2 - * @increment 0.01 - * @group FW Auto Landing - */ -PARAM_DEFINE_FLOAT(FW_FLAPS_LND_SCL, 1.0f); - -/** - * Spoiler landing setting - * - * @unit norm - * @min 0.0 - * @max 1.0 - * @decimal 2 - * @increment 0.01 - * @group FW Auto Landing - */ -PARAM_DEFINE_FLOAT(FW_SPOILERS_LND, 0.f); diff --git a/src/modules/fw_mode_manager/fw_mode_manager_params.yaml b/src/modules/fw_mode_manager/fw_mode_manager_params.yaml new file mode 100644 index 0000000000..f3695c92b6 --- /dev/null +++ b/src/modules/fw_mode_manager/fw_mode_manager_params.yaml @@ -0,0 +1,519 @@ +module_name: fw_mode_manager +parameters: +- group: FW Auto Landing + definitions: + FW_LND_ANG: + description: + short: Maximum landing slope angle + long: |- + Typically the desired landing slope angle when landing configuration (flaps, airspeed) is enabled. + Set this value within the vehicle's performance limits. + type: float + default: 5.0 + unit: deg + min: 1.0 + max: 45.0 + decimal: 1 + increment: 0.5 + FW_LND_FLALT: + description: + short: Landing flare altitude (relative to landing altitude) + long: 'NOTE: max(FW_LND_FLALT, FW_LND_FL_TIME * |z-velocity|) is taken as + the flare altitude' + type: float + default: 0.5 + unit: m + min: 0.0 + decimal: 1 + increment: 0.5 + FW_LND_USETER: + description: + short: Use terrain estimation during landing + long: |- + This is critical for detecting when to flare, and should be enabled if possible. + + If enabled and no measurement is found within a given timeout, the landing waypoint altitude will be used OR the landing + will be aborted, depending on the criteria set in FW_LND_ABORT. + + If disabled, FW_LND_ABORT terrain based criteria are ignored. + type: enum + values: + 0: Disable the terrain estimate + 1: Use the terrain estimate to trigger the flare (only) + 2: Calculate landing glide slope relative to the terrain estimate + default: 1 + min: 0 + max: 2 + FW_LND_EARLYCFG: + description: + short: Early landing configuration deployment + long: |- + Allows to deploy the landing configuration (flaps, landing airspeed, etc.) already in + the loiter-down waypoint before the final approach. + Otherwise is enabled only in the final approach. + type: boolean + default: 0 + FW_LND_FL_PMIN: + description: + short: Flare, minimum pitch + long: Minimum pitch during landing flare. + type: float + default: 2.5 + unit: deg + min: -5 + max: 15.0 + decimal: 1 + increment: 0.5 + FW_LND_FL_PMAX: + description: + short: Flare, maximum pitch + long: Maximum pitch during landing flare. + type: float + default: 15.0 + unit: deg + min: 0 + max: 45.0 + decimal: 1 + increment: 0.5 + FW_LND_AIRSPD: + description: + short: Landing airspeed + long: |- + The calibrated airspeed setpoint during landing. + + If set <= 0, landing airspeed = FW_AIRSPD_MIN by default. + type: float + default: -1.0 + unit: m/s + min: -1.0 + decimal: 1 + increment: 0.1 + FW_LND_THRTC_SC: + description: + short: Altitude time constant factor for landing and low-height flight + long: The TECS altitude time constant (FW_T_ALT_TC) is multiplied by this + value. + type: float + default: 1.0 + min: 0.2 + max: 1.0 + decimal: 1 + increment: 0.1 + FW_LND_FL_TIME: + description: + short: Landing flare time + long: |- + Multiplied by the descent rate to calculate a dynamic altitude at which + to trigger the flare. + + NOTE: max(FW_LND_FLALT, FW_LND_FL_TIME * descent rate) is taken as the flare altitude + type: float + default: 1.0 + unit: s + min: 0.1 + max: 5.0 + decimal: 1 + increment: 0.1 + FW_LND_TD_TIME: + description: + short: Landing touchdown time (since flare start) + long: |- + This is the time after the start of flaring that we expect the vehicle to touch the runway. + At this time, a 0.5s clamp down ramp will engage, constraining the pitch setpoint to RWTO_PSP. + If enabled, ensure that RWTO_PSP is configured appropriately for full gear contact on ground roll. + + Set to -1.0 to disable touchdown clamping. E.g. it may not be desirable to clamp on belly landings. + + The touchdown time will be constrained to be greater than or equal to the flare time (FW_LND_FL_TIME). + type: float + default: -1.0 + unit: s + min: -1.0 + max: 5.0 + decimal: 1 + increment: 0.1 + FW_LND_FL_SINK: + description: + short: Landing flare sink rate + long: TECS will attempt to control the aircraft to this sink rate via pitch + angle (throttle killed during flare) + type: float + default: 0.25 + unit: m/s + min: 0.0 + max: 2 + decimal: 2 + increment: 0.1 + FW_LND_TD_OFF: + description: + short: Maximum lateral position offset for the touchdown point + type: float + default: 3.0 + unit: m + min: 0.0 + max: 10.0 + decimal: 1 + increment: 1 + FW_LND_NUDGE: + description: + short: Landing touchdown nudging option + long: |- + Approach angle nudging: shifts the touchdown point laterally while keeping the approach entrance point constant + Approach path nudging: shifts the touchdown point laterally along with the entire approach path + + This is useful for manually adjusting the landing point in real time when map or GNSS errors cause an offset from the + desired landing vector. Nudging is done with yaw stick, constrained to FW_LND_TD_OFF (in meters) and the direction is + relative to the vehicle heading (stick deflection to the right = land point moves to the right as seen by the vehicle). + type: enum + values: + 0: Disable nudging + 1: Nudge approach angle + 2: Nudge approach path + default: 2 + min: 0 + max: 2 + FW_LND_ABORT: + description: + short: Bit mask to set the automatic landing abort conditions + long: |- + Terrain estimation: + bit 0: Abort if terrain is not found + bit 1: Abort if terrain times out (after a first successful measurement) + + The last estimate is always used as ground, whether the last valid measurement or the land waypoint, depending on the + selected abort criteria, until an abort condition is entered. If FW_LND_USETER == 0, these bits are ignored. + + TODO: Extend automatic abort conditions + e.g. glide slope tracking error (horizontal and vertical) + type: bitmask + bit: + 0: Abort if terrain is not found (only applies to mission landings) + 1: Abort if terrain times out (after a first successful measurement) + default: 3 + min: 0 + max: 3 + FW_FLAPS_LND_SCL: + description: + short: Flaps setting during landing + long: |- + Sets a fraction of full flaps during landing. + Also applies to flaperons if enabled in the mixer/allocation. + type: float + default: 1.0 + unit: norm + min: 0.0 + max: 1.0 + decimal: 2 + increment: 0.01 + FW_SPOILERS_LND: + description: + short: Spoiler landing setting + type: float + default: 0.0 + unit: norm + min: 0.0 + max: 1.0 + decimal: 2 + increment: 0.01 +- group: FW Auto Takeoff + definitions: + FW_TKO_PITCH_MIN: + description: + short: Minimum pitch during takeoff + type: float + default: 10.0 + unit: deg + min: -5.0 + max: 80.0 + decimal: 1 + increment: 0.5 + FW_TKO_AIRSPD: + description: + short: Takeoff Airspeed + long: |- + The calibrated airspeed setpoint during the takeoff climbout. + + If set <= 0, FW_AIRSPD_MIN will be set by default. + type: float + default: -1.0 + unit: m/s + min: -1.0 + decimal: 1 + increment: 0.1 + FW_LAUN_DETCN_ON: + description: + short: Fixed-wing launch detection + long: |- + Enables automatic launch detection based on measured acceleration. Use for hand- or catapult-launched vehicles. + Not compatible with runway takeoff. + type: boolean + default: 0 + FW_LAUN_CS_LK_DY: + description: + short: Control surface launch delay + long: |- + Locks control surfaces during pre-launch (armed) and until this time since launch has passed. + Only affects control surfaces that have corresponding flag set, and not active for runway takeoff. + Set to 0 to disable any surface locking after arming. + type: float + default: 0.0 + unit: s + min: 0.0 + decimal: 1 + increment: 0.1 + FW_FLAPS_TO_SCL: + description: + short: Flaps setting during take-off + long: |- + Sets a fraction of full flaps during take-off. + Also applies to flaperons if enabled in the mixer/allocation. + type: float + default: 0.0 + unit: norm + min: 0.0 + max: 1.0 + decimal: 2 + increment: 0.01 +- group: FW General + definitions: + FW_P_LIM_MIN: + description: + short: Minimum pitch angle setpoint + long: Applies in any altitude controlled flight mode. + type: float + default: -30.0 + unit: deg + min: -60.0 + max: 0.0 + decimal: 1 + increment: 0.5 + FW_P_LIM_MAX: + description: + short: Maximum pitch angle setpoint + long: Applies in any altitude controlled flight mode. + type: float + default: 30.0 + unit: deg + min: 0.0 + max: 80.0 + decimal: 1 + increment: 0.5 + FW_R_LIM: + description: + short: Maximum roll angle setpoint + long: Applies in any altitude controlled flight mode. + type: float + default: 50.0 + unit: deg + min: 35.0 + max: 75.0 + decimal: 1 + increment: 0.5 + FW_THR_MAX: + description: + short: Throttle limit max + long: |- + Applies in any altitude controlled flight mode. + Should be set accordingly to achieve FW_T_CLMB_MAX. + type: float + default: 1.0 + unit: norm + min: 0.0 + max: 1.0 + decimal: 2 + increment: 0.01 + FW_THR_MIN: + description: + short: Throttle limit min + long: |- + Applies in any altitude controlled flight mode. + Usually set to 0 but can be increased to prevent the motor from stopping when + descending, which can increase achievable descent rates. + type: float + default: 0.0 + unit: norm + min: 0.0 + max: 1.0 + decimal: 2 + increment: 0.01 + FW_THR_IDLE: + description: + short: Idle throttle + long: This is the minimum throttle while on the ground ("landed") in auto + modes. + type: float + default: 0.0 + unit: norm + min: 0.0 + max: 1.0 + decimal: 2 + increment: 0.01 + FW_T_SPDWEIGHT: + description: + short: Speed <--> Altitude weight + long: |- + Adjusts the amount of weighting that the pitch control + applies to speed vs height errors. + 0 -> control height only + 2 -> control speed only (gliders) + type: float + default: 1.0 + min: 0.0 + max: 2.0 + decimal: 1 + increment: 1.0 + FW_POS_STK_CONF: + description: + short: Custom stick configuration + long: Applies in manual Position and Altitude flight modes. + type: bitmask + bit: + 0: Alternative stick configuration (height rate on throttle stick, airspeed + on pitch stick) + 1: Enable airspeed setpoint via sticks in altitude and position flight mode + default: 2 + min: 0 + max: 3 + FW_T_CLMB_R_SP: + description: + short: Default target climbrate + long: |- + In auto modes: default climb rate output by controller to achieve altitude setpoints. + In manual modes: maximum climb rate setpoint. + type: float + default: 3.0 + unit: m/s + min: 0.1 + decimal: 2 + increment: 0.01 + FW_T_SINK_R_SP: + description: + short: Default target sinkrate + long: |- + In auto modes: default sink rate output by controller to achieve altitude setpoints. + In manual modes: maximum sink rate setpoint. + type: float + default: 2.0 + unit: m/s + min: 0.1 + decimal: 2 + increment: 0.01 + FW_GPSF_LT: + description: + short: GPS failure loiter time + long: |- + The time the system should do open loop loiter and wait for GPS recovery + before it starts descending. Set to 0 to disable. Roll angle is set to FW_GPSF_R. + Does only apply for fixed-wing vehicles or VTOLs with NAV_FORCE_VT set to 0. + type: int32 + default: 30 + unit: s + min: 0 + FW_GPSF_R: + description: + short: GPS failure fixed roll angle + long: Roll angle in GPS failure loiter mode. + type: float + default: 15.0 + unit: deg + min: 0.0 + max: 60.0 + decimal: 1 + increment: 0.5 + FW_WING_SPAN: + description: + short: The aircraft's wing span (length from tip to tip) + long: This is used for limiting the roll setpoint near the ground. (if multiple + wings, take the longest span) + type: float + default: 3.0 + unit: m + min: 0.1 + decimal: 1 + increment: 0.1 + FW_WING_HEIGHT: + description: + short: Height (AGL) of the wings when the aircraft is on the ground + long: |- + This is used to constrain a minimum altitude below which we keep wings level to avoid wing tip strike. It's safer + to give a slight margin here (> 0m) + type: float + default: 0.5 + unit: m + min: 0.0 + decimal: 1 + increment: 1 +- group: FW NPFG Control + definitions: + NPFG_PERIOD: + description: + short: NPFG period + long: Period of NPFG control law. + type: float + default: 10.0 + unit: s + min: 1.0 + max: 100.0 + decimal: 1 + increment: 0.1 + NPFG_DAMPING: + description: + short: NPFG damping ratio + long: Damping ratio of NPFG control law. + type: float + default: 0.7 + min: 0.1 + max: 1.0 + decimal: 2 + increment: 0.01 + NPFG_LB_PERIOD: + description: + short: Enable automatic lower bound on the NPFG period + long: |- + Avoids limit cycling from a too aggressively tuned period/damping combination. + If false, also disables upper bound NPFG_PERIOD_UB. + type: boolean + default: 1 + NPFG_UB_PERIOD: + description: + short: Enable automatic upper bound on the NPFG period + long: Adapts period to maintain track keeping in variable winds and path curvature. + type: boolean + default: 1 + NPFG_ROLL_TC: + description: + short: Roll time constant + long: |- + Time constant of roll controller command / response, modeled as first order delay. + Used to determine lower period bound. Setting zero disables automatic period bounding. + type: float + default: 0.5 + unit: s + min: 0.0 + max: 2.0 + decimal: 2 + increment: 0.05 + NPFG_SW_DST_MLT: + description: + short: NPFG switch distance multiplier + long: |- + Multiplied by the track error boundary to determine when the aircraft switches + to the next waypoint and/or path segment. Should be less than 1. + type: float + default: 0.32 + min: 0.1 + max: 1.0 + decimal: 2 + increment: 0.01 + NPFG_PERIOD_SF: + description: + short: Period safety factor + long: |- + Multiplied by period for conservative minimum period bounding (when period lower + bounding is enabled). 1.0 bounds at marginal stability. + type: float + default: 1.5 + min: 1.0 + max: 10.0 + decimal: 1 + increment: 0.1 diff --git a/src/modules/fw_mode_manager/launchdetection/CMakeLists.txt b/src/modules/fw_mode_manager/launchdetection/CMakeLists.txt index 1f7d85d290..6b21b43f7a 100644 --- a/src/modules/fw_mode_manager/launchdetection/CMakeLists.txt +++ b/src/modules/fw_mode_manager/launchdetection/CMakeLists.txt @@ -34,3 +34,4 @@ px4_add_library(launchdetection LaunchDetector.cpp ) +set_property(GLOBAL APPEND PROPERTY PX4_MODULE_CONFIG_FILES ${CMAKE_CURRENT_SOURCE_DIR}/launchdetection_params.yaml) diff --git a/src/modules/fw_mode_manager/launchdetection/LaunchDetector.cpp b/src/modules/fw_mode_manager/launchdetection/LaunchDetector.cpp index d463fc75e8..88b5ce5ed0 100644 --- a/src/modules/fw_mode_manager/launchdetection/LaunchDetector.cpp +++ b/src/modules/fw_mode_manager/launchdetection/LaunchDetector.cpp @@ -45,7 +45,7 @@ namespace launchdetection { -void LaunchDetector::update(const float dt, const float accel_x) +void LaunchDetector::update(const float dt, const float accel_norm) { switch (state_) { case launch_detection_status_s::STATE_WAITING_FOR_LAUNCH: @@ -58,8 +58,8 @@ void LaunchDetector::update(const float dt, const float accel_x) info_delay_counter_s_ = 0.f; // reset counter } - /* Detect a acceleration that is longer and stronger as the minimum given by the params */ - if (accel_x > param_fw_laun_ac_thld_.get()) { + /* Detect an acceleration that is longer and stronger than the minimum given by the params */ + if (accel_norm > param_fw_laun_ac_thld_.get()) { acceleration_detected_counter_ += dt; if (acceleration_detected_counter_ > param_fw_laun_ac_t_.get()) { diff --git a/src/modules/fw_mode_manager/launchdetection/LaunchDetector.h b/src/modules/fw_mode_manager/launchdetection/LaunchDetector.h index 698b56a0f1..5ed19c1b59 100644 --- a/src/modules/fw_mode_manager/launchdetection/LaunchDetector.h +++ b/src/modules/fw_mode_manager/launchdetection/LaunchDetector.h @@ -67,10 +67,10 @@ public: /** * @brief Updates the state machine based on the current vehicle condition. * - * @param dt Time step [us] - * @param accel_x Measured acceleration in body x [m/s/s] + * @param dt Time step [s] + * @param accel_norm Norm of acceleration in the body frame [m/s^2] */ - void update(const float dt, const float accel_x); + void update(const float dt, const float accel_norm); /** * @brief Get the Launch Detected state diff --git a/src/modules/fw_mode_manager/launchdetection/launchdetection_params.c b/src/modules/fw_mode_manager/launchdetection/launchdetection_params.c deleted file mode 100644 index eee3d7ccef..0000000000 --- a/src/modules/fw_mode_manager/launchdetection/launchdetection_params.c +++ /dev/null @@ -1,81 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2013, 2014 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file launchdetection_params.c - * - * Parameters for launchdetection - * - * @author Thomas Gubler - */ - -/** - * Trigger acceleration threshold - * - * Launch is detected when acceleration in body forward direction is above FW_LAUN_AC_THLD for FW_LAUN_AC_T seconds. - * - * @unit m/s^2 - * @min 0 - * @decimal 1 - * @increment 0.5 - * @group FW Auto Takeoff - */ -PARAM_DEFINE_FLOAT(FW_LAUN_AC_THLD, 30.0f); - -/** - * Trigger time - * - * Launch is detected when acceleration in body forward direction is above FW_LAUN_AC_THLD for FW_LAUN_AC_T seconds. - * - * @unit s - * @min 0.0 - * @max 5.0 - * @decimal 2 - * @increment 0.05 - * @group FW Auto Takeoff - */ -PARAM_DEFINE_FLOAT(FW_LAUN_AC_T, 0.05f); - -/** - * Motor delay - * - * Start the motor(s) this amount of seconds after launch is detected. - * - * @unit s - * @min 0.0 - * @max 10.0 - * @decimal 1 - * @increment 0.5 - * @group FW Auto Takeoff - */ -PARAM_DEFINE_FLOAT(FW_LAUN_MOT_DEL, 0.0f); diff --git a/src/modules/fw_mode_manager/launchdetection/launchdetection_params.yaml b/src/modules/fw_mode_manager/launchdetection/launchdetection_params.yaml new file mode 100644 index 0000000000..03c4d3b005 --- /dev/null +++ b/src/modules/fw_mode_manager/launchdetection/launchdetection_params.yaml @@ -0,0 +1,38 @@ +module_name: launchdetection +parameters: +- group: FW Auto Takeoff + definitions: + FW_LAUN_AC_THLD: + description: + short: Trigger acceleration threshold + long: Launch is detected when the norm of body acceleration + is above FW_LAUN_AC_THLD for FW_LAUN_AC_T seconds. + type: float + default: 30.0 + unit: m/s^2 + min: 0 + decimal: 1 + increment: 0.5 + FW_LAUN_AC_T: + description: + short: Trigger time + long: Launch is detected when the norm of body acceleration + is above FW_LAUN_AC_THLD for FW_LAUN_AC_T seconds. + type: float + default: 0.05 + unit: s + min: 0.0 + max: 5.0 + decimal: 2 + increment: 0.05 + FW_LAUN_MOT_DEL: + description: + short: Motor delay + long: Start the motor(s) this amount of seconds after launch is detected. + type: float + default: 0.0 + unit: s + min: 0.0 + max: 10.0 + decimal: 1 + increment: 0.5 diff --git a/src/modules/fw_mode_manager/runway_takeoff/CMakeLists.txt b/src/modules/fw_mode_manager/runway_takeoff/CMakeLists.txt index 6e493574c7..1edfdd406c 100644 --- a/src/modules/fw_mode_manager/runway_takeoff/CMakeLists.txt +++ b/src/modules/fw_mode_manager/runway_takeoff/CMakeLists.txt @@ -34,3 +34,4 @@ px4_add_library(runway_takeoff RunwayTakeoff.cpp ) +set_property(GLOBAL APPEND PROPERTY PX4_MODULE_CONFIG_FILES ${CMAKE_CURRENT_SOURCE_DIR}/runway_takeoff_params.yaml) diff --git a/src/modules/fw_mode_manager/runway_takeoff/runway_takeoff_params.c b/src/modules/fw_mode_manager/runway_takeoff/runway_takeoff_params.c deleted file mode 100644 index 68afdeffa1..0000000000 --- a/src/modules/fw_mode_manager/runway_takeoff/runway_takeoff_params.c +++ /dev/null @@ -1,128 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2015 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file runway_takeoff_params.c - * - * Parameters for runway takeoff - * - * @author Andreas Antener - */ - -/** - * Runway takeoff with landing gear - * - * @boolean - * @group Runway Takeoff - */ -PARAM_DEFINE_INT32(RWTO_TKOFF, 0); - -/** - * Throttle during runway takeoff. - * - * @unit norm - * @min 0.0 - * @max 1.0 - * @decimal 2 - * @increment 0.01 - * @group Runway Takeoff - */ -PARAM_DEFINE_FLOAT(RWTO_MAX_THR, 1.0); - -/** - * Pitch setpoint during taxi / before takeoff rotation airspeed is reached. - * - * A taildragger with steerable wheel might need to pitch up - * a little to keep its wheel on the ground before airspeed - * to takeoff is reached. - * - * @unit deg - * @min -10.0 - * @max 20.0 - * @decimal 1 - * @increment 0.5 - * @group Runway Takeoff - */ -PARAM_DEFINE_FLOAT(RWTO_PSP, 0.0); - -/** - * Throttle ramp up time for runway takeoff - * - * @unit s - * @min 1.0 - * @max 15.0 - * @decimal 2 - * @increment 0.1 - * @group Runway Takeoff - */ -PARAM_DEFINE_FLOAT(RWTO_RAMP_TIME, 2.0f); - -/** - * Enable use of yaw stick for nudging the wheel during runway ground roll - * - * This is useful when map, GNSS, or yaw errors on ground are misaligned with what the operator intends for takeoff course. - * Particularly useful for skinny runways or if the wheel servo is a bit off trim. - * - * @boolean - * @group Runway Takeoff - */ -PARAM_DEFINE_INT32(RWTO_NUDGE, 1); - -/** - * Takeoff rotation airspeed - * - * The calibrated airspeed threshold during the takeoff ground roll when the plane should start rotating (pitching up). - * Must be less than the takeoff airspeed, will otherwise be capped at the takeoff airpeed (see FW_TKO_AIRSPD). - * - * If set <= 0.0, defaults to 0.9 * takeoff airspeed (see FW_TKO_AIRSPD) - * - * @unit m/s - * @min -1.0 - * @decimal 1 - * @increment 0.1 - * @group Runway Takeoff - */ -PARAM_DEFINE_FLOAT(RWTO_ROT_AIRSPD, -1.0f); - -/** - * Takeoff rotation time - * - * This is the time desired to linearly ramp in takeoff pitch constraints during the takeoff rotation - * - * @unit s - * @min 0.1 - * @decimal 1 - * @increment 0.1 - * @group Runway Takeoff - */ -PARAM_DEFINE_FLOAT(RWTO_ROT_TIME, 1.0f); diff --git a/src/modules/fw_mode_manager/runway_takeoff/runway_takeoff_params.yaml b/src/modules/fw_mode_manager/runway_takeoff/runway_takeoff_params.yaml new file mode 100644 index 0000000000..c5cc8f5b9c --- /dev/null +++ b/src/modules/fw_mode_manager/runway_takeoff/runway_takeoff_params.yaml @@ -0,0 +1,80 @@ +module_name: runway_takeoff +parameters: +- group: Runway Takeoff + definitions: + RWTO_TKOFF: + description: + short: Runway takeoff with landing gear + type: boolean + default: 0 + RWTO_MAX_THR: + description: + short: Throttle during runway takeoff + type: float + default: 1.0 + unit: norm + min: 0.0 + max: 1.0 + decimal: 2 + increment: 0.01 + RWTO_PSP: + description: + short: Pitch setpoint during taxi / before rotation + long: |- + Pitch setpoint during taxi / before takeoff rotation airspeed is reached + + A taildragger with steerable wheel might need to pitch up + a little to keep its wheel on the ground before airspeed + to takeoff is reached. + type: float + default: 0.0 + unit: deg + min: -10.0 + max: 20.0 + decimal: 1 + increment: 0.5 + RWTO_RAMP_TIME: + description: + short: Throttle ramp up time for runway takeoff + type: float + default: 2.0 + unit: s + min: 1.0 + max: 15.0 + decimal: 2 + increment: 0.1 + RWTO_NUDGE: + description: + short: Enable yaw stick nudging during runway ground roll + long: |- + Enable use of yaw stick for nudging the wheel during runway ground roll + + This is useful when map, GNSS, or yaw errors on ground are misaligned with what the operator intends for takeoff course. + Particularly useful for skinny runways or if the wheel servo is a bit off trim. + type: boolean + default: 1 + RWTO_ROT_AIRSPD: + description: + short: Takeoff rotation airspeed + long: |- + The calibrated airspeed threshold during the takeoff ground roll when the plane should start rotating (pitching up). + Must be less than the takeoff airspeed, will otherwise be capped at the takeoff airspeed (see FW_TKO_AIRSPD). + + If set <= 0.0, defaults to 0.9 * takeoff airspeed (see FW_TKO_AIRSPD) + type: float + default: -1.0 + unit: m/s + min: -1.0 + decimal: 1 + increment: 0.1 + RWTO_ROT_TIME: + description: + short: Takeoff rotation time + long: This is the time desired to linearly ramp in takeoff pitch constraints + during the takeoff rotation + type: float + default: 1.0 + unit: s + min: 0.1 + decimal: 1 + increment: 0.1 diff --git a/src/modules/fw_rate_control/CMakeLists.txt b/src/modules/fw_rate_control/CMakeLists.txt index 595c8314af..4c3eb5479b 100644 --- a/src/modules/fw_rate_control/CMakeLists.txt +++ b/src/modules/fw_rate_control/CMakeLists.txt @@ -37,6 +37,8 @@ px4_add_module( SRCS FixedwingRateControl.cpp FixedwingRateControl.hpp + MODULE_CONFIG + fw_rate_control_params.yaml DEPENDS px4_work_queue RateControl diff --git a/src/modules/fw_rate_control/FixedwingRateControl.cpp b/src/modules/fw_rate_control/FixedwingRateControl.cpp index 9caeac1043..b75663bfac 100644 --- a/src/modules/fw_rate_control/FixedwingRateControl.cpp +++ b/src/modules/fw_rate_control/FixedwingRateControl.cpp @@ -119,6 +119,7 @@ FixedwingRateControl::vehicle_manual_poll() _rates_sp.timestamp = hrt_absolute_time(); _rates_sp.pitch = -_manual_control_setpoint.pitch * radians(_param_fw_acro_y_max.get()); _rates_sp.thrust_body[0] = (_manual_control_setpoint.throttle + 1.f) * .5f; + _rates_sp.reset_integral = false; _rate_sp_pub.publish(_rates_sp); @@ -469,9 +470,35 @@ void FixedwingRateControl::Run() // Flaps control float flaps_control = 0.f; // default to no flaps - /* map flaps by default to manual if valid */ - if (PX4_ISFINITE(_manual_control_setpoint.flaps)) { - flaps_control = math::max(_manual_control_setpoint.flaps, 0.f); // do not consider negative switch settings + switch (_param_fw_flaps_man.get()) { // do not consider negative switch settings + case 0: + break; + + case 1: + flaps_control = PX4_ISFINITE(_manual_control_setpoint.aux1) ? math::max(_manual_control_setpoint.aux1, 0.f) : 0.f; + break; + + case 2: + flaps_control = PX4_ISFINITE(_manual_control_setpoint.aux2) ? math::max(_manual_control_setpoint.aux2, 0.f) : 0.f; + break; + + case 3: + flaps_control = PX4_ISFINITE(_manual_control_setpoint.aux3) ? math::max(_manual_control_setpoint.aux3, 0.f) : 0.f; + break; + + case 4: + flaps_control = PX4_ISFINITE(_manual_control_setpoint.aux4) ? math::max(_manual_control_setpoint.aux4, 0.f) : 0.f; + break; + + case 5: + flaps_control = PX4_ISFINITE(_manual_control_setpoint.aux5) ? math::max(_manual_control_setpoint.aux5, 0.f) : 0.f; + break; + + case 6: + flaps_control = PX4_ISFINITE(_manual_control_setpoint.flaps) ? math::max(_manual_control_setpoint.flaps, 0.f) : 0.f; + break; + + } normalized_unsigned_setpoint_s flaps_setpoint; @@ -482,19 +509,29 @@ void FixedwingRateControl::Run() // Spoilers control float spoilers_control = 0.f; // default to no spoilers - switch (_param_fw_spoilers_man.get()) { + switch (_param_fw_spoilers_man.get()) { // do not consider negative switch settings case 0: break; case 1: - // do not consider negative switch settings spoilers_control = PX4_ISFINITE(_manual_control_setpoint.flaps) ? math::max(_manual_control_setpoint.flaps, 0.f) : 0.f; break; case 2: - // do not consider negative switch settings spoilers_control = PX4_ISFINITE(_manual_control_setpoint.aux1) ? math::max(_manual_control_setpoint.aux1, 0.f) : 0.f; break; + + case 3: + spoilers_control = PX4_ISFINITE(_manual_control_setpoint.aux2) ? math::max(_manual_control_setpoint.aux2, 0.f) : 0.f; + break; + + case 4: + spoilers_control = PX4_ISFINITE(_manual_control_setpoint.aux3) ? math::max(_manual_control_setpoint.aux3, 0.f) : 0.f; + break; + + case 5: + spoilers_control = PX4_ISFINITE(_manual_control_setpoint.aux4) ? math::max(_manual_control_setpoint.aux4, 0.f) : 0.f; + break; } normalized_unsigned_setpoint_s spoilers_setpoint; diff --git a/src/modules/fw_rate_control/FixedwingRateControl.hpp b/src/modules/fw_rate_control/FixedwingRateControl.hpp index 254a3fb731..24cfec0ecf 100644 --- a/src/modules/fw_rate_control/FixedwingRateControl.hpp +++ b/src/modules/fw_rate_control/FixedwingRateControl.hpp @@ -213,7 +213,8 @@ private: (ParamFloat) _param_trim_roll, (ParamFloat) _param_trim_yaw, - (ParamInt) _param_fw_spoilers_man + (ParamInt) _param_fw_spoilers_man, + (ParamInt) _param_fw_flaps_man ) RateControl _rate_control; ///< class for rate control calculations diff --git a/src/modules/fw_rate_control/fw_rate_control_params.c b/src/modules/fw_rate_control/fw_rate_control_params.c deleted file mode 100644 index 8493f11c72..0000000000 --- a/src/modules/fw_rate_control/fw_rate_control_params.c +++ /dev/null @@ -1,456 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2013-2023 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * AS IS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file fw_rate_control_params.c - * - * Parameters defined by the fixed-wing rate control task - * - * @author Lorenz Meier - * @author Thomas Gubler - */ - -/** - * Use airspeed for control - * - * If set to 1, the airspeed measurement data, if valid, is used in the following controllers: - * - Rate controller: output scaling - * - Attitude controller: coordinated turn controller - * - Position controller: airspeed setpoint tracking, takeoff logic - * - VTOL: transition logic - * - * @boolean - * @group FW Rate Control - */ -PARAM_DEFINE_INT32(FW_USE_AIRSPD, 1); - -/** - * Pitch rate proportional gain. - * - * @unit %/rad/s - * @min 0.0 - * @max 10 - * @decimal 3 - * @increment 0.005 - * @group FW Rate Control - */ -PARAM_DEFINE_FLOAT(FW_PR_P, 0.08f); - -/** - * Pitch rate derivative gain. - * - * Pitch rate differential gain. - * - * @unit %/rad/s - * @min 0.0 - * @max 10 - * @decimal 3 - * @increment 0.005 - * @group FW Rate Control - */ -PARAM_DEFINE_FLOAT(FW_PR_D, 0.f); - -/** - * Pitch rate integrator gain. - * - * @unit %/rad - * @min 0.0 - * @max 10 - * @decimal 3 - * @increment 0.005 - * @group FW Rate Control - */ -PARAM_DEFINE_FLOAT(FW_PR_I, 0.1f); - -/** - * Pitch rate integrator limit - * - * @min 0.0 - * @max 1.0 - * @decimal 2 - * @increment 0.05 - * @group FW Rate Control - */ -PARAM_DEFINE_FLOAT(FW_PR_IMAX, 0.4f); - -/** - * Roll rate proportional gain - * - * @unit %/rad/s - * @min 0.0 - * @max 10 - * @decimal 3 - * @increment 0.005 - * @group FW Rate Control - */ -PARAM_DEFINE_FLOAT(FW_RR_P, 0.05f); - -/** - * Roll rate derivative gain - * - * @unit %/rad/s - * @min 0.0 - * @max 10 - * @decimal 3 - * @increment 0.005 - * @group FW Rate Control - */ -PARAM_DEFINE_FLOAT(FW_RR_D, 0.0f); - -/** - * Roll rate integrator gain - * - * @unit %/rad - * @min 0.0 - * @max 10 - * @decimal 2 - * @increment 0.01 - * @group FW Rate Control - */ -PARAM_DEFINE_FLOAT(FW_RR_I, 0.1f); - -/** - * Roll integrator limit - * - * @min 0.0 - * @max 1.0 - * @decimal 2 - * @increment 0.05 - * @group FW Rate Control - */ -PARAM_DEFINE_FLOAT(FW_RR_IMAX, 0.2f); - -/** - * Yaw rate proportional gain - * - * @unit %/rad/s - * @min 0.0 - * @max 10 - * @decimal 3 - * @increment 0.005 - * @group FW Rate Control - */ -PARAM_DEFINE_FLOAT(FW_YR_P, 0.05f); - -/** - * Yaw rate derivative gain - * - * @unit %/rad/s - * @min 0.0 - * @max 10 - * @decimal 3 - * @increment 0.005 - * @group FW Rate Control - */ -PARAM_DEFINE_FLOAT(FW_YR_D, 0.0f); - -/** - * Yaw rate integrator gain - * - * @unit %/rad - * @min 0.0 - * @max 10 - * @decimal 1 - * @increment 0.5 - * @group FW Rate Control - */ -PARAM_DEFINE_FLOAT(FW_YR_I, 0.1f); - -/** - * Yaw rate integrator limit - * - * @min 0.0 - * @max 1.0 - * @decimal 2 - * @increment 0.05 - * @group FW Rate Control - */ -PARAM_DEFINE_FLOAT(FW_YR_IMAX, 0.2f); - -/** - * Roll rate feed forward - * - * Direct feed forward from rate setpoint to control surface output. - * - * @unit %/rad/s - * @min 0.0 - * @max 10.0 - * @decimal 2 - * @increment 0.05 - * @group FW Rate Control - */ -PARAM_DEFINE_FLOAT(FW_RR_FF, 0.5f); - -/** - * Pitch rate feed forward - * - * Direct feed forward from rate setpoint to control surface output - * - * @unit %/rad/s - * @min 0.0 - * @max 10.0 - * @decimal 2 - * @increment 0.05 - * @group FW Rate Control - */ -PARAM_DEFINE_FLOAT(FW_PR_FF, 0.5f); - -/** - * Yaw rate feed forward - * - * Direct feed forward from rate setpoint to control surface output - * - * @unit %/rad/s - * @min 0.0 - * @max 10.0 - * @decimal 2 - * @increment 0.05 - * @group FW Rate Control - */ -PARAM_DEFINE_FLOAT(FW_YR_FF, 0.3f); - -/** - * Acro body roll max rate setpoint - * - * @min 10 - * @max 720 - * @unit deg - * @group FW Rate Control - */ -PARAM_DEFINE_FLOAT(FW_ACRO_X_MAX, 90); - -/** - * Acro body pitch max rate setpoint - * - * @min 10 - * @max 720 - * @unit deg - * @group FW Rate Control - */ -PARAM_DEFINE_FLOAT(FW_ACRO_Y_MAX, 90); - -/** - * Acro body yaw max rate setpoint - * - * @min 10 - * @max 720 - * @unit deg - * @group FW Rate Control - */ -PARAM_DEFINE_FLOAT(FW_ACRO_Z_MAX, 45); - -/** - * Enable throttle scale by battery level - * - * This compensates for voltage drop of the battery over time by attempting to - * normalize performance across the operating range of the battery. - * - * @boolean - * @group FW Rate Control - */ -PARAM_DEFINE_INT32(FW_BAT_SCALE_EN, 0); - -/** - * Enable airspeed scaling - * - * This enables a logic that automatically adjusts the output of the rate controller to take - * into account the real torque produced by an aerodynamic control surface given - * the current deviation from the trim airspeed (FW_AIRSPD_TRIM). - * - * Enable when using aerodynamic control surfaces (e.g.: plane) - * Disable when using rotor wings (e.g.: autogyro) - * - * @boolean - * @group FW Rate Control - */ -PARAM_DEFINE_INT32(FW_ARSP_SCALE_EN, 1); - -/** -* Roll trim increment at minimum airspeed -* -* This increment is added to TRIM_ROLL when airspeed is FW_AIRSPD_MIN. - * - * @group FW Rate Control - * @min -0.5 - * @max 0.5 - * @decimal 2 - * @increment 0.01 - */ -PARAM_DEFINE_FLOAT(FW_DTRIM_R_VMIN, 0.0f); - -/** -* Pitch trim increment at minimum airspeed -* -* This increment is added to TRIM_PITCH when airspeed is FW_AIRSPD_MIN. - * - * @group FW Rate Control - * @min -0.5 - * @max 0.5 - * @decimal 2 - * @increment 0.01 - */ -PARAM_DEFINE_FLOAT(FW_DTRIM_P_VMIN, 0.0f); - -/** -* Yaw trim increment at minimum airspeed -* -* This increment is added to TRIM_YAW when airspeed is FW_AIRSPD_MIN. - * - * @group FW Rate Control - * @min -0.5 - * @max 0.5 - * @decimal 2 - * @increment 0.01 - */ -PARAM_DEFINE_FLOAT(FW_DTRIM_Y_VMIN, 0.0f); - -/** -* Roll trim increment at maximum airspeed -* -* This increment is added to TRIM_ROLL when airspeed is FW_AIRSPD_MAX. - * - * @group FW Rate Control - * @min -0.5 - * @max 0.5 - * @decimal 2 - * @increment 0.01 - */ -PARAM_DEFINE_FLOAT(FW_DTRIM_R_VMAX, 0.0f); - -/** -* Pitch trim increment at maximum airspeed -* -* This increment is added to TRIM_PITCH when airspeed is FW_AIRSPD_MAX. - * - * @group FW Rate Control - * @min -0.5 - * @max 0.5 - * @decimal 2 - * @increment 0.01 - */ -PARAM_DEFINE_FLOAT(FW_DTRIM_P_VMAX, 0.0f); - -/** -* Yaw trim increment at maximum airspeed -* -* This increment is added to TRIM_YAW when airspeed is FW_AIRSPD_MAX. - * - * @group FW Rate Control - * @min -0.5 - * @max 0.5 - * @decimal 2 - * @increment 0.01 - */ -PARAM_DEFINE_FLOAT(FW_DTRIM_Y_VMAX, 0.0f); - -/** - * Manual roll scale - * - * Scale factor applied to the desired roll actuator command in full manual mode. This parameter allows - * to adjust the throws of the control surfaces. - * - * @unit norm - * @min 0.0 - * @max 1.0 - * @decimal 2 - * @increment 0.01 - * @group FW Rate Control - */ -PARAM_DEFINE_FLOAT(FW_MAN_R_SC, 1.0f); - -/** - * Manual pitch scale - * - * Scale factor applied to the desired pitch actuator command in full manual mode. This parameter allows - * to adjust the throws of the control surfaces. - * - * @unit norm - * @min 0.0 - * @decimal 2 - * @increment 0.01 - * @group FW Rate Control - */ -PARAM_DEFINE_FLOAT(FW_MAN_P_SC, 1.0f); - -/** - * Manual yaw scale - * - * Scale factor applied to the desired yaw actuator command in full manual mode. This parameter allows - * to adjust the throws of the control surfaces. - * - * @unit norm - * @min 0.0 - * @decimal 2 - * @increment 0.01 - * @group FW Rate Control - */ -PARAM_DEFINE_FLOAT(FW_MAN_Y_SC, 1.0f); - -/** - * Roll control to yaw control feedforward gain. - * - * This gain can be used to counteract the "adverse yaw" effect for fixed wings. - * When the plane enters a roll it will tend to yaw the nose out of the turn. - * This gain enables the use of a yaw actuator to counteract this effect. - * - * @min 0.0 - * @decimal 1 - * @increment 0.01 - * @group FW Rate Control - */ -PARAM_DEFINE_FLOAT(FW_RLL_TO_YAW_FF, 0.0f); - -/** - * Spoiler input in manual flight - * - * Chose source for manual setting of spoilers in manual flight modes. - * - * @value 0 Disabled - * @value 1 Flaps channel - * @value 2 Aux1 - * @group FW Rate Control - */ -PARAM_DEFINE_INT32(FW_SPOILERS_MAN, 0); - -/** - * Enable yaw rate controller in Acro - * - * If this parameter is set to 1, the yaw rate controller is enabled in Fixed-wing Acro mode. - * Otherwise the pilot commands directly the yaw actuator. - * It is disabled by default because an active yaw rate controller will fight against the - * natural turn coordination of the plane. - * - * @boolean - * @group FW Rate Control - */ -PARAM_DEFINE_INT32(FW_ACRO_YAW_EN, 0); diff --git a/src/modules/fw_rate_control/fw_rate_control_params.yaml b/src/modules/fw_rate_control/fw_rate_control_params.yaml new file mode 100644 index 0000000000..acad44dfa0 --- /dev/null +++ b/src/modules/fw_rate_control/fw_rate_control_params.yaml @@ -0,0 +1,357 @@ +module_name: fw_rate_control +parameters: +- group: FW Rate Control + definitions: + FW_USE_AIRSPD: + description: + short: Use airspeed for control + long: |- + If set to 1, the airspeed measurement data, if valid, is used in the following controllers: + - Rate controller: output scaling + - Attitude controller: coordinated turn controller + - Position controller: airspeed setpoint tracking, takeoff logic + - VTOL: transition logic + type: boolean + default: 1 + FW_PR_P: + description: + short: Pitch rate proportional gain + type: float + default: 0.08 + unit: '%/rad/s' + min: 0.0 + max: 10 + decimal: 3 + increment: 0.005 + FW_PR_D: + description: + short: Pitch rate derivative gain + long: Pitch rate differential gain. + type: float + default: 0.0 + unit: '%/rad/s' + min: 0.0 + max: 10 + decimal: 3 + increment: 0.005 + FW_PR_I: + description: + short: Pitch rate integrator gain + type: float + default: 0.1 + unit: '%/rad' + min: 0.0 + max: 10 + decimal: 3 + increment: 0.005 + FW_PR_IMAX: + description: + short: Pitch rate integrator limit + type: float + default: 0.4 + min: 0.0 + max: 1.0 + decimal: 2 + increment: 0.05 + FW_RR_P: + description: + short: Roll rate proportional gain + type: float + default: 0.05 + unit: '%/rad/s' + min: 0.0 + max: 10 + decimal: 3 + increment: 0.005 + FW_RR_D: + description: + short: Roll rate derivative gain + type: float + default: 0.0 + unit: '%/rad/s' + min: 0.0 + max: 10 + decimal: 3 + increment: 0.005 + FW_RR_I: + description: + short: Roll rate integrator gain + type: float + default: 0.1 + unit: '%/rad' + min: 0.0 + max: 10 + decimal: 2 + increment: 0.01 + FW_RR_IMAX: + description: + short: Roll integrator limit + type: float + default: 0.2 + min: 0.0 + max: 1.0 + decimal: 2 + increment: 0.05 + FW_YR_P: + description: + short: Yaw rate proportional gain + type: float + default: 0.05 + unit: '%/rad/s' + min: 0.0 + max: 10 + decimal: 3 + increment: 0.005 + FW_YR_D: + description: + short: Yaw rate derivative gain + type: float + default: 0.0 + unit: '%/rad/s' + min: 0.0 + max: 10 + decimal: 3 + increment: 0.005 + FW_YR_I: + description: + short: Yaw rate integrator gain + type: float + default: 0.1 + unit: '%/rad' + min: 0.0 + max: 10 + decimal: 1 + increment: 0.5 + FW_YR_IMAX: + description: + short: Yaw rate integrator limit + type: float + default: 0.2 + min: 0.0 + max: 1.0 + decimal: 2 + increment: 0.05 + FW_RR_FF: + description: + short: Roll rate feed forward + long: Direct feed forward from rate setpoint to control surface output. + type: float + default: 0.5 + unit: '%/rad/s' + min: 0.0 + max: 10.0 + decimal: 2 + increment: 0.05 + FW_PR_FF: + description: + short: Pitch rate feed forward + long: Direct feed forward from rate setpoint to control surface output + type: float + default: 0.5 + unit: '%/rad/s' + min: 0.0 + max: 10.0 + decimal: 2 + increment: 0.05 + FW_YR_FF: + description: + short: Yaw rate feed forward + long: Direct feed forward from rate setpoint to control surface output + type: float + default: 0.3 + unit: '%/rad/s' + min: 0.0 + max: 10.0 + decimal: 2 + increment: 0.05 + FW_ACRO_X_MAX: + description: + short: Acro body roll max rate setpoint + type: float + default: 90 + min: 10 + max: 720 + unit: deg + FW_ACRO_Y_MAX: + description: + short: Acro body pitch max rate setpoint + type: float + default: 90 + min: 10 + max: 720 + unit: deg + FW_ACRO_Z_MAX: + description: + short: Acro body yaw max rate setpoint + type: float + default: 45 + min: 10 + max: 720 + unit: deg + FW_BAT_SCALE_EN: + description: + short: Enable throttle scale by battery level + long: |- + This compensates for voltage drop of the battery over time by attempting to + normalize performance across the operating range of the battery. + type: boolean + default: 0 + FW_ARSP_SCALE_EN: + description: + short: Enable airspeed scaling + long: |- + This enables a logic that automatically adjusts the output of the rate controller to take + into account the real torque produced by an aerodynamic control surface given + the current deviation from the trim airspeed (FW_AIRSPD_TRIM). + + Enable when using aerodynamic control surfaces (e.g.: plane) + Disable when using rotor wings (e.g.: autogyro) + type: boolean + default: 1 + FW_DTRIM_R_VMIN: + description: + short: Roll trim increment at minimum airspeed + long: This increment is added to TRIM_ROLL when airspeed is FW_AIRSPD_MIN. + type: float + default: 0.0 + min: -0.5 + max: 0.5 + decimal: 2 + increment: 0.01 + FW_DTRIM_P_VMIN: + description: + short: Pitch trim increment at minimum airspeed + long: This increment is added to TRIM_PITCH when airspeed is FW_AIRSPD_MIN. + type: float + default: 0.0 + min: -0.5 + max: 0.5 + decimal: 2 + increment: 0.01 + FW_DTRIM_Y_VMIN: + description: + short: Yaw trim increment at minimum airspeed + long: This increment is added to TRIM_YAW when airspeed is FW_AIRSPD_MIN. + type: float + default: 0.0 + min: -0.5 + max: 0.5 + decimal: 2 + increment: 0.01 + FW_DTRIM_R_VMAX: + description: + short: Roll trim increment at maximum airspeed + long: This increment is added to TRIM_ROLL when airspeed is FW_AIRSPD_MAX. + type: float + default: 0.0 + min: -0.5 + max: 0.5 + decimal: 2 + increment: 0.01 + FW_DTRIM_P_VMAX: + description: + short: Pitch trim increment at maximum airspeed + long: This increment is added to TRIM_PITCH when airspeed is FW_AIRSPD_MAX. + type: float + default: 0.0 + min: -0.5 + max: 0.5 + decimal: 2 + increment: 0.01 + FW_DTRIM_Y_VMAX: + description: + short: Yaw trim increment at maximum airspeed + long: This increment is added to TRIM_YAW when airspeed is FW_AIRSPD_MAX. + type: float + default: 0.0 + min: -0.5 + max: 0.5 + decimal: 2 + increment: 0.01 + FW_MAN_R_SC: + description: + short: Manual roll scale + long: |- + Scale factor applied to the desired roll actuator command in full manual mode. This parameter allows + to adjust the throws of the control surfaces. + type: float + default: 1.0 + unit: norm + min: 0.0 + max: 1.0 + decimal: 2 + increment: 0.01 + FW_MAN_P_SC: + description: + short: Manual pitch scale + long: |- + Scale factor applied to the desired pitch actuator command in full manual mode. This parameter allows + to adjust the throws of the control surfaces. + type: float + default: 1.0 + unit: norm + min: 0.0 + decimal: 2 + increment: 0.01 + FW_MAN_Y_SC: + description: + short: Manual yaw scale + long: |- + Scale factor applied to the desired yaw actuator command in full manual mode. This parameter allows + to adjust the throws of the control surfaces. + type: float + default: 1.0 + unit: norm + min: 0.0 + decimal: 2 + increment: 0.01 + FW_RLL_TO_YAW_FF: + description: + short: Roll control to yaw control feedforward gain + long: |- + This gain can be used to counteract the "adverse yaw" effect for fixed wings. + When the plane enters a roll it will tend to yaw the nose out of the turn. + This gain enables the use of a yaw actuator to counteract this effect. + type: float + default: 0.0 + min: 0.0 + decimal: 1 + increment: 0.01 + FW_SPOILERS_MAN: + description: + short: Spoiler input in manual flight + long: Chose source for manual setting of spoilers in manual flight modes. + type: enum + values: + 0: Disabled + 1: Flaps channel + 2: Aux1 + 3: Aux2 + 4: Aux3 + 5: Aux4 + 6: Aux5 + default: 0 + FW_FLAPS_MAN: + description: + short: Flap input in manual flight + long: Chose source for manual setting of flaps in manual flight modes. + type: enum + values: + 0: Disabled + 1: Aux1 + 2: Aux2 + 3: Aux3 + 4: Aux4 + 5: Aux5 + 6: Flaps channel + default: 0 + FW_ACRO_YAW_EN: + description: + short: Enable yaw rate controller in Acro + long: |- + If this parameter is set to 1, the yaw rate controller is enabled in Fixed-wing Acro mode. + Otherwise the pilot commands directly the yaw actuator. + It is disabled by default because an active yaw rate controller will fight against the + natural turn coordination of the plane. + type: boolean + default: 0 diff --git a/src/modules/gimbal/CMakeLists.txt b/src/modules/gimbal/CMakeLists.txt index 859b519718..b7e901feee 100644 --- a/src/modules/gimbal/CMakeLists.txt +++ b/src/modules/gimbal/CMakeLists.txt @@ -43,6 +43,8 @@ px4_add_module( output_mavlink.cpp output_rc.cpp gimbal.cpp + MODULE_CONFIG + gimbal_params.yaml DEPENDS geo ) diff --git a/src/modules/gimbal/gimbal.cpp b/src/modules/gimbal/gimbal.cpp index 85c0338888..137f38c644 100644 --- a/src/modules/gimbal/gimbal.cpp +++ b/src/modules/gimbal/gimbal.cpp @@ -197,6 +197,8 @@ static int gimbal_thread_main(int argc, char *argv[]) thread_should_exit.store(true); } + const unsigned int poll_timeout_ms = params.mnt_mode_out == MNT_MODE_OUT_AUX ? 10 : 20; + while (!thread_should_exit.load()) { const bool updated = parameter_update_sub.updated(); @@ -219,7 +221,7 @@ static int gimbal_thread_main(int argc, char *argv[]) const bool already_active = (thread_data.last_input_active == i); // poll only on active input to reduce latency, or on all if none is active const unsigned int poll_timeout = - (already_active || thread_data.last_input_active == -1) ? 20 : 0; + (already_active || thread_data.last_input_active == -1) ? poll_timeout_ms : 0; update_result = thread_data.input_objs[i]->update(poll_timeout, thread_data.control_data, already_active); @@ -618,7 +620,7 @@ static void usage() Mount/gimbal Gimbal control driver. It maps several different input methods (eg. RC or MAVLink) to a configured output (eg. AUX channels or MAVLink). -Documentation how to use it is on the [gimbal_control](https://docs.px4.io/main/en/advanced/gimbal_control.html) page. +Documentation how to use it is on the [gimbal_control](../advanced/gimbal_control.md) page. ### Examples Test the output by setting a angles (all omitted axes are set to 0): diff --git a/src/modules/gimbal/gimbal_params.c b/src/modules/gimbal/gimbal_params.c deleted file mode 100644 index 7a98214ced..0000000000 --- a/src/modules/gimbal/gimbal_params.c +++ /dev/null @@ -1,271 +0,0 @@ -/**************************************************************************** -* -* Copyright (c) 2013-2020 PX4 Development Team. All rights reserved. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions -* are met: -* -* 1. Redistributions of source code must retain the above copyright -* notice, this list of conditions and the following disclaimer. -* 2. Redistributions in binary form must reproduce the above copyright -* notice, this list of conditions and the following disclaimer in -* the documentation and/or other materials provided with the -* distribution. -* 3. Neither the name PX4 nor the names of its contributors may be -* used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS -* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED -* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -* POSSIBILITY OF SUCH DAMAGE. -* -****************************************************************************/ - - -/** -* Mount input mode -* -* This is the protocol used between the ground station and the autopilot. -* -* Recommended is Auto, RC only or MAVLink gimbal protocol v2. -* The rest will be deprecated. -* -* @value -1 DISABLED -* @value 0 Auto (RC and MAVLink gimbal protocol v2) -* @value 1 RC -* @value 2 MAVLINK_ROI (protocol v1, to be deprecated) -* @value 3 MAVLINK_DO_MOUNT (protocol v1, to be deprecated) -* @value 4 MAVlink gimbal protocol v2 -* @min -1 -* @max 4 -* @group Mount -* @reboot_required true -*/ -PARAM_DEFINE_INT32(MNT_MODE_IN, -1); - -/** -* Mount output mode -* -* This is the protocol used between the autopilot and a connected gimbal. -* -* Recommended is the MAVLink gimbal protocol v2 if the gimbal supports it. -* -* @value 0 AUX -* @value 1 MAVLink gimbal protocol v1 -* @value 2 MAVLink gimbal protocol v2 -* @min 0 -* @max 2 -* @group Mount -* @reboot_required true -*/ -PARAM_DEFINE_INT32(MNT_MODE_OUT, 0); - -/** -* Mavlink System ID of the mount -* -* If MNT_MODE_OUT is MAVLink gimbal protocol v1, mount configure/control commands will be sent with this target ID. -* -* @group Mount -*/ -PARAM_DEFINE_INT32(MNT_MAV_SYSID, 1); - -/** -* Mavlink Component ID of the mount -* -* If MNT_MODE_OUT is MAVLink protocol v2, mount configure/control commands will be sent with this component ID. -* -* @group Mount -*/ -PARAM_DEFINE_INT32(MNT_MAV_COMPID, 154); - -/** -* Auxiliary channel to control roll (in AUX input or manual mode). -* -* @value 0 Disable -* @value 1 AUX1 -* @value 2 AUX2 -* @value 3 AUX3 -* @value 4 AUX4 -* @value 5 AUX5 -* @value 6 AUX6 -* @min 0 -* @max 6 -* @group Mount -*/ -PARAM_DEFINE_INT32(MNT_MAN_ROLL, 0); - -/** -* Auxiliary channel to control pitch (in AUX input or manual mode). -* -* @value 0 Disable -* @value 1 AUX1 -* @value 2 AUX2 -* @value 3 AUX3 -* @value 4 AUX4 -* @value 5 AUX5 -* @value 6 AUX6 -* @min 0 -* @max 6 -* @group Mount -*/ -PARAM_DEFINE_INT32(MNT_MAN_PITCH, 0); - -/** -* Auxiliary channel to control yaw (in AUX input or manual mode). -* -* @value 0 Disable -* @value 1 AUX1 -* @value 2 AUX2 -* @value 3 AUX3 -* @value 4 AUX4 -* @value 5 AUX5 -* @value 6 AUX6 -* @min 0 -* @max 6 -* @group Mount -*/ -PARAM_DEFINE_INT32(MNT_MAN_YAW, 0); - -/** -* Stabilize the mount -* -* Set to true for servo gimbal, false for passthrough. -* This is required for a gimbal which is not capable of stabilizing itself -* and relies on the IMU's attitude estimation. -* -* @value 0 Disable -* @value 1 Stabilize all axis -* @value 2 Stabilize yaw for absolute/lock mode. -* @value 3 Stabilize pitch for absolute/lock mode. -* @group Mount -*/ -PARAM_DEFINE_INT32(MNT_DO_STAB, 0); - -/** -* Max positive angle of pitch setpoint (only in MNT_MODE_OUT=AUX). -* -* Use output driver settings to calibrate (e.g. PWM_CENT/_MIN/_MAX). -* -* @unit deg -* @decimal 1 -* @group Mount -*/ -PARAM_DEFINE_FLOAT(MNT_MAX_PITCH, 45.0f); - -/** -* Min negative angle of pitch setpoint (only in MNT_MODE_OUT=AUX). -* -* Use output driver settings to calibrate (e.g. PWM_CENT/_MIN/_MAX). -* -* @unit deg -* @decimal 1 -* @group Mount -*/ -PARAM_DEFINE_FLOAT(MNT_MIN_PITCH, -45.0f); - -/** -* Range of roll channel output (only in MNT_MODE_OUT=AUX). -* -* Use output driver settings to calibrate (e.g. PWM_CENT/_MIN/_MAX). Note that only symmetric angular ranges are supported. -* -* @min 1.0 -* @max 720.0 -* @unit deg -* @decimal 1 -* @group Mount -*/ -PARAM_DEFINE_FLOAT(MNT_RANGE_ROLL, 90.0f); - -/** -* Range of yaw channel output (only in MNT_MODE_OUT=AUX). -* -* Use output driver settings to calibrate (e.g. PWM_CENT/_MIN/_MAX). Note that only symmetric angular ranges are supported. -* -* @min 1.0 -* @max 720.0 -* @unit deg -* @decimal 1 -* @group Mount -*/ -PARAM_DEFINE_FLOAT(MNT_RANGE_YAW, 360.0f); - - -/** - * Angular pitch rate for manual input in degrees/second. - * - * Full stick input [-1..1] translats to [-pitch rate..pitch rate]. - * - * @min 1.0 - * @max 90.0 - * @unit deg/s - * @group Mount - */ -PARAM_DEFINE_FLOAT(MNT_RATE_PITCH, 30.0f); - -/** - * Angular yaw rate for manual input in degrees/second. - * - * Full stick input [-1..1] translats to [-yaw rate..yaw rate]. - * - * @min 1.0 - * @max 90.0 - * @unit deg/s - * @group Mount - */ -PARAM_DEFINE_FLOAT(MNT_RATE_YAW, 30.0f); - -/** - * Alpha filter time constant defining the convergence rate (in seconds) for open-loop AUX mount control. - * - * Use when no angular position feedback is available. - * With MNT_MODE_OUT set to AUX, the mount operates in open-loop and directly commands the servo output. - * Parameters must be tuned for the specific servo to approximate its speed and response. - * - * @min 0.0 - * @group Mount - */ -PARAM_DEFINE_FLOAT(MNT_TAU, 0.3f); - - -/** - * Input mode for RC gimbal input - * - * @value 0 Angle - * @value 1 Angular rate - * @min 0 - * @max 1 - * @group Mount - */ -PARAM_DEFINE_INT32(MNT_RC_IN_MODE, 1); - -/** -* Pitch minimum when landed -* -* @min -90.0 -* @max 90.0 -* @unit deg -* @decimal 1 -* @group Mount -*/ -PARAM_DEFINE_FLOAT(MNT_LND_P_MIN, -90.0f); - -/** -* Pitch maximum when landed -* -* @min -90.0 -* @max 90.0 -* @unit deg -* @decimal 1 -* @group Mount -*/ -PARAM_DEFINE_FLOAT(MNT_LND_P_MAX, 90.0f); diff --git a/src/modules/gimbal/gimbal_params.yaml b/src/modules/gimbal/gimbal_params.yaml new file mode 100644 index 0000000000..4b09d359e7 --- /dev/null +++ b/src/modules/gimbal/gimbal_params.yaml @@ -0,0 +1,209 @@ +module_name: gimbal +parameters: +- group: Mount + definitions: + MNT_MODE_IN: + description: + short: Mount input mode + long: |- + This is the protocol used between the ground station and the autopilot. + + Recommended is Auto, RC only or MAVLink gimbal protocol v2. + The rest will be deprecated. + type: enum + values: + -1: DISABLED + 0: Auto (RC and MAVLink gimbal protocol v2) + 1: RC + 2: MAVLINK_ROI (protocol v1, to be deprecated) + 3: MAVLINK_DO_MOUNT (protocol v1, to be deprecated) + 4: MAVlink gimbal protocol v2 + default: -1 + min: -1 + max: 4 + reboot_required: true + MNT_MODE_OUT: + description: + short: Mount output mode + long: |- + This is the protocol used between the autopilot and a connected gimbal. + + Recommended is the MAVLink gimbal protocol v2 if the gimbal supports it. + type: enum + values: + 0: AUX + 1: MAVLink gimbal protocol v1 + 2: MAVLink gimbal protocol v2 + default: 0 + min: 0 + max: 2 + reboot_required: true + MNT_MAV_SYSID: + description: + short: Mavlink System ID of the mount + long: If MNT_MODE_OUT is MAVLink gimbal protocol v1, mount configure/control + commands will be sent with this target ID. + type: int32 + default: 1 + MNT_MAV_COMPID: + description: + short: Mavlink Component ID of the mount + long: If MNT_MODE_OUT is MAVLink protocol v2, mount configure/control commands + will be sent with this component ID. + type: int32 + default: 154 + MNT_MAN_ROLL: + description: + short: Auxiliary channel to control roll (in AUX input or manual mode) + type: enum + values: + 0: Disable + 1: AUX1 + 2: AUX2 + 3: AUX3 + 4: AUX4 + 5: AUX5 + 6: AUX6 + default: 0 + min: 0 + max: 6 + MNT_MAN_PITCH: + description: + short: Auxiliary channel to control pitch (in AUX input or manual mode) + type: enum + values: + 0: Disable + 1: AUX1 + 2: AUX2 + 3: AUX3 + 4: AUX4 + 5: AUX5 + 6: AUX6 + default: 0 + min: 0 + max: 6 + MNT_MAN_YAW: + description: + short: Auxiliary channel to control yaw (in AUX input or manual mode) + type: enum + values: + 0: Disable + 1: AUX1 + 2: AUX2 + 3: AUX3 + 4: AUX4 + 5: AUX5 + 6: AUX6 + default: 0 + min: 0 + max: 6 + MNT_DO_STAB: + description: + short: Stabilize the mount + long: |- + Set to true for servo gimbal, false for passthrough. + This is required for a gimbal which is not capable of stabilizing itself + and relies on the IMU's attitude estimation. + type: enum + values: + 0: Disable + 1: Stabilize all axis + 2: Stabilize yaw for absolute/lock mode. + 3: Stabilize pitch for absolute/lock mode. + default: 0 + MNT_MAX_PITCH: + description: + short: Max positive angle of pitch setpoint (only in MNT_MODE_OUT=AUX) + long: Use output driver settings to calibrate (e.g. PWM_CENT/_MIN/_MAX). + type: float + default: 45.0 + unit: deg + decimal: 1 + MNT_MIN_PITCH: + description: + short: Min negative angle of pitch setpoint (only in MNT_MODE_OUT=AUX) + long: Use output driver settings to calibrate (e.g. PWM_CENT/_MIN/_MAX). + type: float + default: -45.0 + unit: deg + decimal: 1 + MNT_RANGE_ROLL: + description: + short: Range of roll channel output (only in MNT_MODE_OUT=AUX) + long: Use output driver settings to calibrate (e.g. PWM_CENT/_MIN/_MAX). Note + that only symmetric angular ranges are supported. + type: float + default: 90.0 + min: 1.0 + max: 720.0 + unit: deg + decimal: 1 + MNT_RANGE_YAW: + description: + short: Range of yaw channel output (only in MNT_MODE_OUT=AUX) + long: Use output driver settings to calibrate (e.g. PWM_CENT/_MIN/_MAX). Note + that only symmetric angular ranges are supported. + type: float + default: 360.0 + min: 1.0 + max: 720.0 + unit: deg + decimal: 1 + MNT_RATE_PITCH: + description: + short: Angular pitch rate for manual input in degrees/second + long: Full stick input [-1..1] translats to [-pitch rate..pitch rate]. + type: float + default: 30.0 + min: 1.0 + max: 90.0 + unit: deg/s + MNT_RATE_YAW: + description: + short: Angular yaw rate for manual input in degrees/second + long: Full stick input [-1..1] translats to [-yaw rate..yaw rate]. + type: float + default: 30.0 + min: 1.0 + max: 90.0 + unit: deg/s + MNT_TAU: + description: + short: Time constant for open-loop AUX gimbal control + long: |- + Alpha filter time constant defining the convergence rate (in seconds) for open-loop AUX mount control + + Use when no angular position feedback is available. + With MNT_MODE_OUT set to AUX, the mount operates in open-loop and directly commands the servo output. + Parameters must be tuned for the specific servo to approximate its speed and response. + type: float + default: 0.3 + min: 0.0 + MNT_RC_IN_MODE: + description: + short: Input mode for RC gimbal input + type: enum + values: + 0: Angle + 1: Angular rate + default: 1 + min: 0 + max: 1 + MNT_LND_P_MIN: + description: + short: Pitch minimum when landed + type: float + default: -90.0 + min: -90.0 + max: 90.0 + unit: deg + decimal: 1 + MNT_LND_P_MAX: + description: + short: Pitch maximum when landed + type: float + default: 90.0 + min: -90.0 + max: 90.0 + unit: deg + decimal: 1 diff --git a/src/modules/gimbal/input_mavlink.cpp b/src/modules/gimbal/input_mavlink.cpp index de7ea22155..7091a7bc89 100644 --- a/src/modules/gimbal/input_mavlink.cpp +++ b/src/modules/gimbal/input_mavlink.cpp @@ -182,7 +182,9 @@ InputMavlinkCmdMount::~InputMavlinkCmdMount() int InputMavlinkCmdMount::initialize() { - if ((_vehicle_command_sub = orb_subscribe(ORB_ID(vehicle_command))) < 0) { + _vehicle_command_sub = orb_subscribe(ORB_ID(vehicle_command)); + + if (_vehicle_command_sub < 0) { return -errno; } @@ -323,9 +325,9 @@ InputMavlinkCmdMount::_process_command(ControlData &control_data, const vehicle_ // Stabilization params are ignored. Use MNT_DO_STAB param instead. const int params[] = { - (int)((float) vehicle_command.param5 + 0.5f), - (int)((float) vehicle_command.param6 + 0.5f), - (int)(vehicle_command.param7 + 0.5f) + static_cast(lroundf(vehicle_command.param5)), + static_cast(lroundf(vehicle_command.param6)), + static_cast(lroundf(vehicle_command.param7)) }; for (int i = 0; i < 3; ++i) { @@ -438,11 +440,15 @@ int InputMavlinkGimbalV2::initialize() return -errno; } - if ((_vehicle_command_sub = orb_subscribe(ORB_ID(vehicle_command))) < 0) { + _vehicle_command_sub = orb_subscribe(ORB_ID(vehicle_command)); + + if (_vehicle_command_sub < 0) { return -errno; } - if ((_gimbal_manager_set_manual_control_sub = orb_subscribe(ORB_ID(gimbal_manager_set_manual_control))) < 0) { + _gimbal_manager_set_manual_control_sub = orb_subscribe(ORB_ID(gimbal_manager_set_manual_control)); + + if (_gimbal_manager_set_manual_control_sub < 0) { return -errno; } @@ -779,9 +785,9 @@ InputMavlinkGimbalV2::_process_command(ControlData &control_data, const vehicle_ // Stabilization params are ignored. Use MNT_DO_STAB param instead. const int params[] = { - (int)((float) vehicle_command.param5 + 0.5f), - (int)((float) vehicle_command.param6 + 0.5f), - (int)(vehicle_command.param7 + 0.5f) + static_cast(lroundf(vehicle_command.param5)), + static_cast(lroundf(vehicle_command.param6)), + static_cast(lroundf(vehicle_command.param7)) }; for (int i = 0; i < 3; ++i) { diff --git a/src/modules/gimbal/output_mavlink.cpp b/src/modules/gimbal/output_mavlink.cpp index c3ceaab678..f51632da96 100644 --- a/src/modules/gimbal/output_mavlink.cpp +++ b/src/modules/gimbal/output_mavlink.cpp @@ -245,6 +245,10 @@ void OutputMavlinkV2::_publish_gimbal_device_set_attitude() if (_absolute_angle[2]) { set_attitude.flags |= gimbal_device_set_attitude_s::GIMBAL_DEVICE_FLAGS_YAW_LOCK; + set_attitude.flags |= gimbal_device_set_attitude_s::GIMBAL_DEVICE_FLAGS_YAW_IN_EARTH_FRAME; + + } else { + set_attitude.flags |= gimbal_device_set_attitude_s::GIMBAL_DEVICE_FLAGS_YAW_IN_VEHICLE_FRAME; } _gimbal_device_set_attitude_pub.publish(set_attitude); diff --git a/src/modules/gyro_calibration/CMakeLists.txt b/src/modules/gyro_calibration/CMakeLists.txt index cc5381d57b..0d1e9feedd 100644 --- a/src/modules/gyro_calibration/CMakeLists.txt +++ b/src/modules/gyro_calibration/CMakeLists.txt @@ -39,6 +39,8 @@ px4_add_module( SRCS GyroCalibration.cpp GyroCalibration.hpp + MODULE_CONFIG + parameters.yaml DEPENDS px4_work_queue sensor_calibration diff --git a/src/modules/gyro_calibration/parameters.c b/src/modules/gyro_calibration/parameters.c deleted file mode 100644 index dee9df9b74..0000000000 --- a/src/modules/gyro_calibration/parameters.c +++ /dev/null @@ -1,41 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2021 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** -* IMU gyro auto calibration enable. -* -* @boolean -* @reboot_required true -* @group Sensors -*/ -PARAM_DEFINE_INT32(IMU_GYRO_CAL_EN, 1); diff --git a/src/modules/gyro_calibration/parameters.yaml b/src/modules/gyro_calibration/parameters.yaml new file mode 100644 index 0000000000..0f370389ff --- /dev/null +++ b/src/modules/gyro_calibration/parameters.yaml @@ -0,0 +1,10 @@ +module_name: gyro_calibration +parameters: +- group: Sensors + definitions: + IMU_GYRO_CAL_EN: + description: + short: IMU gyro auto calibration enable + type: boolean + default: 1 + reboot_required: true diff --git a/src/modules/gyro_fft/CMakeLists.txt b/src/modules/gyro_fft/CMakeLists.txt index b342ef250f..231db5d54d 100644 --- a/src/modules/gyro_fft/CMakeLists.txt +++ b/src/modules/gyro_fft/CMakeLists.txt @@ -77,6 +77,8 @@ px4_add_module( ${CMSIS_DSP}/Source/TransformFunctions/arm_cfft_radix4_q15.c ${CMSIS_DSP}/Source/TransformFunctions/arm_rfft_init_q15.c ${CMSIS_DSP}/Source/TransformFunctions/arm_rfft_q15.c + MODULE_CONFIG + parameters.yaml DEPENDS px4_work_queue ) diff --git a/src/modules/gyro_fft/GyroFFT.cpp b/src/modules/gyro_fft/GyroFFT.cpp index bd794f0a14..6d0f905ac3 100644 --- a/src/modules/gyro_fft/GyroFFT.cpp +++ b/src/modules/gyro_fft/GyroFFT.cpp @@ -439,14 +439,14 @@ void GyroFFT::FindPeaks(const hrt_abstime ×tamp_sample, int axis, q15_t *ff float bin_mag_sum = 0; // FFT output buffer is ordered [real[0], imag[0], real[1], imag[1], real[2], imag[2] ... real[(N/2)-1], imag[(N/2)-1] - for (uint16_t fft_index = 2; fft_index < _imu_gyro_fft_len; fft_index += 2) { + for (size_t fft_index = 2; fft_index < static_cast(_imu_gyro_fft_len); fft_index += 2) { const float real = fft_outupt_buffer[fft_index]; const float imag = fft_outupt_buffer[fft_index + 1]; const float fft_magnitude = sqrtf(real * real + imag * imag); - int bin_index = fft_index / 2; + size_t bin_index = fft_index / 2; _peak_magnitudes_all[bin_index] = fft_magnitude; bin_mag_sum += fft_magnitude; diff --git a/src/modules/gyro_fft/GyroFFT.hpp b/src/modules/gyro_fft/GyroFFT.hpp index 3a555d9297..1c7d7da8ea 100644 --- a/src/modules/gyro_fft/GyroFFT.hpp +++ b/src/modules/gyro_fft/GyroFFT.hpp @@ -111,7 +111,8 @@ private: return (_gyro_data_buffer_x && _gyro_data_buffer_y && _gyro_data_buffer_z && _hanning_window && _fft_input_buffer - && _fft_outupt_buffer); + && _fft_outupt_buffer + && _peak_magnitudes_all); } uORB::Publication _sensor_gyro_fft_pub{ORB_ID(sensor_gyro_fft)}; diff --git a/src/modules/gyro_fft/parameters.c b/src/modules/gyro_fft/parameters.c deleted file mode 100644 index c0d7e3eebc..0000000000 --- a/src/modules/gyro_fft/parameters.c +++ /dev/null @@ -1,85 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2020 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** -* IMU gyro FFT enable. -* -* @boolean -* @reboot_required true -* @group Sensors -*/ -PARAM_DEFINE_INT32(IMU_GYRO_FFT_EN, 0); - -/** -* IMU gyro FFT minimum frequency. -* -* @min 1 -* @max 1000 -* @unit Hz -* @reboot_required true -* @group Sensors -*/ -PARAM_DEFINE_FLOAT(IMU_GYRO_FFT_MIN, 30.f); - -/** -* IMU gyro FFT maximum frequency. -* -* @min 1 -* @max 1000 -* @unit Hz -* @reboot_required true -* @group Sensors -*/ -PARAM_DEFINE_FLOAT(IMU_GYRO_FFT_MAX, 150.f); - -/** -* IMU gyro FFT length. -* -* @value 256 256 -* @value 512 512 -* @value 1024 1024 -* @value 4096 4096 -* @unit Hz -* @reboot_required true -* @group Sensors -*/ -PARAM_DEFINE_INT32(IMU_GYRO_FFT_LEN, 512); - -/** -* IMU gyro FFT SNR. -* -* @min 1 -* @max 30 -* @group Sensors -*/ -PARAM_DEFINE_FLOAT(IMU_GYRO_FFT_SNR, 10.f); diff --git a/src/modules/gyro_fft/parameters.yaml b/src/modules/gyro_fft/parameters.yaml new file mode 100644 index 0000000000..72d191505b --- /dev/null +++ b/src/modules/gyro_fft/parameters.yaml @@ -0,0 +1,47 @@ +module_name: gyro_fft +parameters: +- group: Sensors + definitions: + IMU_GYRO_FFT_EN: + description: + short: IMU gyro FFT enable + type: boolean + default: 0 + reboot_required: true + IMU_GYRO_FFT_MIN: + description: + short: IMU gyro FFT minimum frequency + type: float + default: 30.0 + min: 1 + max: 1000 + unit: Hz + reboot_required: true + IMU_GYRO_FFT_MAX: + description: + short: IMU gyro FFT maximum frequency + type: float + default: 150.0 + min: 1 + max: 1000 + unit: Hz + reboot_required: true + IMU_GYRO_FFT_LEN: + description: + short: IMU gyro FFT length + type: enum + values: + 256: '256' + 512: '512' + 1024: '1024' + 4096: '4096' + default: 512 + unit: Hz + reboot_required: true + IMU_GYRO_FFT_SNR: + description: + short: IMU gyro FFT SNR + type: float + default: 10.0 + min: 1 + max: 30 diff --git a/src/modules/hardfault_stream/CMakeLists.txt b/src/modules/hardfault_stream/CMakeLists.txt index 31140c10fd..d67a27020f 100644 --- a/src/modules/hardfault_stream/CMakeLists.txt +++ b/src/modules/hardfault_stream/CMakeLists.txt @@ -37,6 +37,8 @@ px4_add_module( SRCS HardfaultStream.cpp HardfaultStream.hpp + MODULE_CONFIG + params.yaml DEPENDS px4_work_queue ) diff --git a/src/modules/hardfault_stream/params.c b/src/modules/hardfault_stream/params.c deleted file mode 100644 index 09f600da16..0000000000 --- a/src/modules/hardfault_stream/params.c +++ /dev/null @@ -1,44 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2013-2025 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Enable FMU SD card hardfault streaming - * - * When this is enabled all the hardfaults on the SD card are streamed - * over MAVLink. This is useful for cases where the FMU does reset in-flight due - * to a hardfault and the SD card may not survive a crash. - * - * @group System - * @boolean - */ -PARAM_DEFINE_INT32(SYS_HF_MAV, 1); diff --git a/src/modules/hardfault_stream/params.yaml b/src/modules/hardfault_stream/params.yaml new file mode 100644 index 0000000000..c04a6b467c --- /dev/null +++ b/src/modules/hardfault_stream/params.yaml @@ -0,0 +1,13 @@ +module_name: hardfault_stream +parameters: +- group: System + definitions: + SYS_HF_MAV: + description: + short: Enable FMU SD card hardfault streaming + long: |- + When this is enabled all the hardfaults on the SD card are streamed + over MAVLink. This is useful for cases where the FMU does reset in-flight due + to a hardfault and the SD card may not survive a crash. + type: boolean + default: 1 diff --git a/src/modules/land_detector/CMakeLists.txt b/src/modules/land_detector/CMakeLists.txt index 6823df9f8b..9698bba0f0 100644 --- a/src/modules/land_detector/CMakeLists.txt +++ b/src/modules/land_detector/CMakeLists.txt @@ -42,6 +42,10 @@ px4_add_module( VtolLandDetector.cpp RoverLandDetector.cpp AirshipLandDetector.cpp + MODULE_CONFIG + land_detector_params.yaml + land_detector_params_fw.yaml + land_detector_params_mc.yaml DEPENDS hysteresis ) diff --git a/src/modules/land_detector/land_detector_params.c b/src/modules/land_detector/land_detector_params.c deleted file mode 100644 index 950956a92d..0000000000 --- a/src/modules/land_detector/land_detector_params.c +++ /dev/null @@ -1,60 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2014-2016 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Total flight time in microseconds - * - * Total flight time of this autopilot. Higher 32 bits of the value. - * Flight time in microseconds = (LND_FLIGHT_T_HI << 32) | LND_FLIGHT_T_LO. - * - * @min 0 - * @volatile - * @category system - * @group Land Detector - * - */ -PARAM_DEFINE_INT32(LND_FLIGHT_T_HI, 0); - -/** - * Total flight time in microseconds - * - * Total flight time of this autopilot. Lower 32 bits of the value. - * Flight time in microseconds = (LND_FLIGHT_T_HI << 32) | LND_FLIGHT_T_LO. - * - * @min 0 - * @volatile - * @category system - * @group Land Detector - * - */ -PARAM_DEFINE_INT32(LND_FLIGHT_T_LO, 0); diff --git a/src/modules/land_detector/land_detector_params.yaml b/src/modules/land_detector/land_detector_params.yaml new file mode 100644 index 0000000000..f21cb1f199 --- /dev/null +++ b/src/modules/land_detector/land_detector_params.yaml @@ -0,0 +1,26 @@ +module_name: land_detector +parameters: +- group: Land Detector + definitions: + LND_FLIGHT_T_HI: + description: + short: Total flight time in microseconds + long: |- + Total flight time of this autopilot. Higher 32 bits of the value. + Flight time in microseconds = (LND_FLIGHT_T_HI << 32) | LND_FLIGHT_T_LO. + category: System + type: int32 + default: 0 + volatile: true + min: 0 + LND_FLIGHT_T_LO: + description: + short: Total flight time in microseconds + long: |- + Total flight time of this autopilot. Lower 32 bits of the value. + Flight time in microseconds = (LND_FLIGHT_T_HI << 32) | LND_FLIGHT_T_LO. + category: System + type: int32 + default: 0 + volatile: true + min: 0 diff --git a/src/modules/land_detector/land_detector_params_fw.c b/src/modules/land_detector/land_detector_params_fw.c deleted file mode 100644 index 7e438c388f..0000000000 --- a/src/modules/land_detector/land_detector_params_fw.c +++ /dev/null @@ -1,116 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2014-2021 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Fixed-wing land detector: Max horizontal velocity threshold - * - * Maximum horizontal velocity allowed in the landed state. - * A factor of 0.7 is applied in case of airspeed-less flying - * (either because no sensor is present or sensor data got invalid in flight). - * - * @unit m/s - * @min 0.5 - * @max 20 - * @decimal 1 - * - * @group Land Detector - */ -PARAM_DEFINE_FLOAT(LNDFW_VEL_XY_MAX, 5.0f); - -/** - * Fixed-wing land detector: Max vertiacal velocity threshold - * - * Maximum vertical velocity allowed in the landed state. - * - * @unit m/s - * @min 0.1 - * @max 20 - * @decimal 1 - * - * @group Land Detector - */ -PARAM_DEFINE_FLOAT(LNDFW_VEL_Z_MAX, 1.0f); - -/** - * Fixed-wing land detector: Max horizontal acceleration - * - * Maximum horizontal (x,y body axes) acceleration allowed in the landed state - * - * @unit m/s^2 - * @min 2 - * @max 30 - * @decimal 1 - * - * @group Land Detector - */ -PARAM_DEFINE_FLOAT(LNDFW_XYACC_MAX, 8.0f); - -/** - * Fixed-wing land detector: Max airspeed - * - * Maximum airspeed allowed in the landed state - * - * @unit m/s - * @min 2 - * @max 30 - * @decimal 1 - * - * @group Land Detector - */ -PARAM_DEFINE_FLOAT(LNDFW_AIRSPD_MAX, 6.00f); - -/** - * Fixed-wing land detection trigger time - * - * Time the land conditions (speeds and acceleration) have to be satisfied to detect a landing. - * - * @unit s - * @min 0.1 - * @decimal 1 - * - * @reboot_required true - * @group Land Detector - */ -PARAM_DEFINE_FLOAT(LNDFW_TRIG_TIME, 2.f); - -/** - * Fixed-wing land detector: max rotational speed - * - * Maximum allowed norm of the angular velocity in the landed state. - * Only used if neither airspeed nor groundspeed can be used for landing detection. - * - * @unit deg/s - * @decimal 1 - * @group Land Detector - */ -PARAM_DEFINE_FLOAT(LNDFW_ROT_MAX, 0.5f); diff --git a/src/modules/land_detector/land_detector_params_fw.yaml b/src/modules/land_detector/land_detector_params_fw.yaml new file mode 100644 index 0000000000..a02aa28552 --- /dev/null +++ b/src/modules/land_detector/land_detector_params_fw.yaml @@ -0,0 +1,69 @@ +module_name: land_detector +parameters: +- group: Land Detector + definitions: + LNDFW_VEL_XY_MAX: + description: + short: 'Fixed-wing land detector: Max horizontal velocity threshold' + long: |- + Maximum horizontal velocity allowed in the landed state. + A factor of 0.7 is applied in case of airspeed-less flying + (either because no sensor is present or sensor data got invalid in flight). + type: float + default: 5.0 + unit: m/s + min: 0.5 + max: 20 + decimal: 1 + LNDFW_VEL_Z_MAX: + description: + short: 'Fixed-wing land detector: Max vertiacal velocity threshold' + long: Maximum vertical velocity allowed in the landed state. + type: float + default: 1.0 + unit: m/s + min: 0.1 + max: 20 + decimal: 1 + LNDFW_XYACC_MAX: + description: + short: 'Fixed-wing land detector: Max horizontal acceleration' + long: Maximum horizontal (x,y body axes) acceleration allowed in the landed + state + type: float + default: 8.0 + unit: m/s^2 + min: 2 + max: 30 + decimal: 1 + LNDFW_AIRSPD_MAX: + description: + short: 'Fixed-wing land detector: Max airspeed' + long: Maximum airspeed allowed in the landed state + type: float + default: 6.0 + unit: m/s + min: 2 + max: 30 + decimal: 1 + LNDFW_TRIG_TIME: + description: + short: Fixed-wing land detection trigger time + long: Time the land conditions (speeds and acceleration) have to be satisfied + to detect a landing. + type: float + default: 2.0 + unit: s + min: 0.1 + decimal: 1 + reboot_required: true + LNDFW_ROT_MAX: + description: + short: 'Fixed-wing land detector: max rotational speed' + long: |- + Maximum allowed norm of the angular velocity in the landed state. + Only used if neither airspeed nor groundspeed can be used for landing detection. + type: float + default: 0.5 + unit: deg/s + decimal: 1 diff --git a/src/modules/land_detector/land_detector_params_mc.c b/src/modules/land_detector/land_detector_params_mc.c deleted file mode 100644 index 43786f78fb..0000000000 --- a/src/modules/land_detector/land_detector_params_mc.c +++ /dev/null @@ -1,86 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2014-2016 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Multicopter vertical velocity threshold - * - * Vertical velocity threshold to detect landing. - * Has to be set lower than the expected minimal speed for landing, - * which is either MPC_LAND_SPEED or MPC_LAND_CRWL. - * This is enforced by an automatic check. - * - * @unit m/s - * @min 0 - * @decimal 2 - * - * @group Land Detector - */ -PARAM_DEFINE_FLOAT(LNDMC_Z_VEL_MAX, 0.25f); - -/** - * Multicopter max horizontal velocity - * - * Maximum horizontal velocity allowed in the landed state - * - * @unit m/s - * @decimal 1 - * - * @group Land Detector - */ -PARAM_DEFINE_FLOAT(LNDMC_XY_VEL_MAX, 1.5f); - -/** - * Multicopter max rotational speed - * - * Maximum allowed norm of the angular velocity (roll, pitch) in the landed state. - * - * @unit deg/s - * @decimal 1 - * - * @group Land Detector - */ -PARAM_DEFINE_FLOAT(LNDMC_ROT_MAX, 20.0f); - -/** - * Ground effect altitude for multicopters - * - * The height above ground below which ground effect creates barometric altitude errors. - * A negative value indicates no ground effect. - * - * @unit m - * @min -1 - * @decimal 2 - * @group Land Detector - * - */ -PARAM_DEFINE_FLOAT(LNDMC_ALT_GND, 2.f); diff --git a/src/modules/land_detector/land_detector_params_mc.yaml b/src/modules/land_detector/land_detector_params_mc.yaml new file mode 100644 index 0000000000..26807d5610 --- /dev/null +++ b/src/modules/land_detector/land_detector_params_mc.yaml @@ -0,0 +1,45 @@ +module_name: land_detector +parameters: +- group: Land Detector + definitions: + LNDMC_Z_VEL_MAX: + description: + short: Multicopter vertical velocity threshold + long: |- + Vertical velocity threshold to detect landing. + Has to be set lower than the expected minimal speed for landing, + which is either MPC_LAND_SPEED or MPC_LAND_CRWL. + This is enforced by an automatic check. + type: float + default: 0.25 + unit: m/s + min: 0 + decimal: 2 + LNDMC_XY_VEL_MAX: + description: + short: Multicopter max horizontal velocity + long: Maximum horizontal velocity allowed in the landed state + type: float + default: 1.5 + unit: m/s + decimal: 1 + LNDMC_ROT_MAX: + description: + short: Multicopter max rotational speed + long: Maximum allowed norm of the angular velocity (roll, pitch) in the landed + state. + type: float + default: 20.0 + unit: deg/s + decimal: 1 + LNDMC_ALT_GND: + description: + short: Ground effect altitude for multicopters + long: |- + The height above ground below which ground effect creates barometric altitude errors. + A negative value indicates no ground effect. + type: float + default: 2.0 + unit: m + min: -1 + decimal: 2 diff --git a/src/modules/landing_target_estimator/CMakeLists.txt b/src/modules/landing_target_estimator/CMakeLists.txt index 32308d3c93..adb8214338 100644 --- a/src/modules/landing_target_estimator/CMakeLists.txt +++ b/src/modules/landing_target_estimator/CMakeLists.txt @@ -39,5 +39,7 @@ px4_add_module( landing_target_estimator_main.cpp LandingTargetEstimator.cpp KalmanFilter.cpp + MODULE_CONFIG + landing_target_estimator_params.yaml DEPENDS ) diff --git a/src/modules/landing_target_estimator/landing_target_estimator_params.c b/src/modules/landing_target_estimator/landing_target_estimator_params.c deleted file mode 100644 index 92048efc31..0000000000 --- a/src/modules/landing_target_estimator/landing_target_estimator_params.c +++ /dev/null @@ -1,189 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2014-2018 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file landing_target_estimator_params.c - * Landing target estimator algorithm parameters. - * - * @author Nicolas de Palezieux (Sunflower Labs) - * @author Mohammed Kabir - * - */ - -/** - * Landing target mode - * - * Configure the mode of the landing target. Depending on the mode, the landing target observations are used differently to aid position estimation. - * - * Mode Moving: The landing target may be moving around while in the field of view of the vehicle. Landing target measurements are not used to aid positioning. - * Mode Stationary: The landing target is stationary. Measured velocity w.r.t. the landing target is used to aid velocity estimation. - * - * @min 0 - * @max 1 - * @group Landing Target Estimator - * @value 0 Moving - * @value 1 Stationary - */ -PARAM_DEFINE_INT32(LTEST_MODE, 0); - -/** - * Acceleration uncertainty - * - * Variance of acceleration measurement used for landing target position prediction. - * Higher values results in tighter following of the measurements and more lenient outlier rejection - * - * @unit (m/s^2)^2 - * @min 0.01 - * @decimal 2 - * - * @group Landing Target Estimator - */ -PARAM_DEFINE_FLOAT(LTEST_ACC_UNC, 10.0f); - -/** - * Landing target measurement uncertainty - * - * Variance of the landing target measurement from the driver. - * Higher values result in less aggressive following of the measurement and a smoother output as well as fewer rejected measurements. - * - * @unit tan(rad)^2 - * @decimal 4 - * - * @group Landing Target Estimator - */ -PARAM_DEFINE_FLOAT(LTEST_MEAS_UNC, 0.005f); - -/** - * Initial landing target position uncertainty - * - * Initial variance of the relative landing target position in x and y direction - * - * @unit m^2 - * @min 0.001 - * @decimal 3 - * - * @group Landing Target Estimator - */ -PARAM_DEFINE_FLOAT(LTEST_POS_UNC_IN, 0.1f); - -/** - * Initial landing target velocity uncertainty - * - * Initial variance of the relative landing target velocity in x and y directions - * - * @unit (m/s)^2 - * @min 0.001 - * @decimal 3 - * - * @group Landing Target Estimator - */ -PARAM_DEFINE_FLOAT(LTEST_VEL_UNC_IN, 0.1f); - -/** - * Scale factor for sensor measurements in sensor x axis - * - * Landing target x measurements are scaled by this factor before being used - * - * @min 0.01 - * @decimal 3 - * - * @group Landing Target Estimator - */ -PARAM_DEFINE_FLOAT(LTEST_SCALE_X, 1.0f); - -/** - * Scale factor for sensor measurements in sensor y axis - * - * Landing target y measurements are scaled by this factor before being used - * - * @min 0.01 - * @decimal 3 - * - * @group Landing Target Estimator - */ -PARAM_DEFINE_FLOAT(LTEST_SCALE_Y, 1.0f); - - -/** - * Rotation of IRLOCK sensor relative to airframe - * - * Default orientation of Yaw 90° - * - * @value 0 No rotation - * @value 1 Yaw 45° - * @value 2 Yaw 90° - * @value 3 Yaw 135° - * @value 4 Yaw 180° - * @value 5 Yaw 225° - * @value 6 Yaw 270° - * @value 7 Yaw 315° - * - * @min -1 - * @max 40 - * @reboot_required true - * @group Landing Target Estimator - */ -PARAM_DEFINE_INT32(LTEST_SENS_ROT, 2); - -/** - * X Position of IRLOCK in body frame (forward) - * - * @reboot_required true - * @unit m - * @decimal 3 - * @group Landing Target Estimator - * - */ -PARAM_DEFINE_FLOAT(LTEST_SENS_POS_X, 0.0f); - -/** - * Y Position of IRLOCK in body frame (right) - * - * @reboot_required true - * @unit m - * @decimal 3 - * @group Landing Target Estimator - * - */ -PARAM_DEFINE_FLOAT(LTEST_SENS_POS_Y, 0.0f); - -/** - * Z Position of IRLOCK in body frame (downward) - * - * @reboot_required true - * @unit m - * @decimal 3 - * @group Landing Target Estimator - * - */ -PARAM_DEFINE_FLOAT(LTEST_SENS_POS_Z, 0.0f); diff --git a/src/modules/landing_target_estimator/landing_target_estimator_params.yaml b/src/modules/landing_target_estimator/landing_target_estimator_params.yaml new file mode 100644 index 0000000000..8d20df6d99 --- /dev/null +++ b/src/modules/landing_target_estimator/landing_target_estimator_params.yaml @@ -0,0 +1,120 @@ +module_name: landing_target_estimator +parameters: +- group: Landing Target Estimator + definitions: + LTEST_MODE: + description: + short: Landing target mode + long: |- + Configure the mode of the landing target. Depending on the mode, the landing target observations are used differently to aid position estimation. + + Mode Moving: The landing target may be moving around while in the field of view of the vehicle. Landing target measurements are not used to aid positioning. + Mode Stationary: The landing target is stationary. Measured velocity w.r.t. the landing target is used to aid velocity estimation. + type: enum + values: + 0: Moving + 1: Stationary + default: 0 + min: 0 + max: 1 + LTEST_ACC_UNC: + description: + short: Acceleration uncertainty + long: |- + Variance of acceleration measurement used for landing target position prediction. + Higher values results in tighter following of the measurements and more lenient outlier rejection + type: float + default: 10.0 + unit: (m/s^2)^2 + min: 0.01 + decimal: 2 + LTEST_MEAS_UNC: + description: + short: Landing target measurement uncertainty + long: |- + Variance of the landing target measurement from the driver. + Higher values result in less aggressive following of the measurement and a smoother output as well as fewer rejected measurements. + type: float + default: 0.005 + unit: tan(rad)^2 + decimal: 4 + LTEST_POS_UNC_IN: + description: + short: Initial landing target position uncertainty + long: Initial variance of the relative landing target position in x and y + direction + type: float + default: 0.1 + unit: m^2 + min: 0.001 + decimal: 3 + LTEST_VEL_UNC_IN: + description: + short: Initial landing target velocity uncertainty + long: Initial variance of the relative landing target velocity in x and y + directions + type: float + default: 0.1 + unit: (m/s)^2 + min: 0.001 + decimal: 3 + LTEST_SCALE_X: + description: + short: Scale factor for sensor measurements in sensor x axis + long: Landing target x measurements are scaled by this factor before being + used + type: float + default: 1.0 + min: 0.01 + decimal: 3 + LTEST_SCALE_Y: + description: + short: Scale factor for sensor measurements in sensor y axis + long: Landing target y measurements are scaled by this factor before being + used + type: float + default: 1.0 + min: 0.01 + decimal: 3 + LTEST_SENS_ROT: + description: + short: Rotation of IRLOCK sensor relative to airframe + long: "Default orientation of Yaw 90\xB0" + type: enum + values: + 0: No rotation + 1: "Yaw 45\xB0" + 2: "Yaw 90\xB0" + 3: "Yaw 135\xB0" + 4: "Yaw 180\xB0" + 5: "Yaw 225\xB0" + 6: "Yaw 270\xB0" + 7: "Yaw 315\xB0" + default: 2 + min: -1 + max: 40 + reboot_required: true + LTEST_SENS_POS_X: + description: + short: X Position of IRLOCK in body frame (forward) + type: float + default: 0.0 + reboot_required: true + unit: m + decimal: 3 + LTEST_SENS_POS_Y: + description: + short: Y Position of IRLOCK in body frame (right) + type: float + default: 0.0 + reboot_required: true + unit: m + decimal: 3 + LTEST_SENS_POS_Z: + description: + short: Z Position of IRLOCK in body frame (downward) + type: float + default: 0.0 + reboot_required: true + unit: m + decimal: 3 diff --git a/src/modules/load_mon/CMakeLists.txt b/src/modules/load_mon/CMakeLists.txt index a2c6ee0647..6810426eb7 100644 --- a/src/modules/load_mon/CMakeLists.txt +++ b/src/modules/load_mon/CMakeLists.txt @@ -37,6 +37,8 @@ px4_add_module( SRCS LoadMon.cpp LoadMon.hpp + MODULE_CONFIG + params.yaml DEPENDS px4_work_queue ) diff --git a/src/modules/load_mon/params.c b/src/modules/load_mon/params.c deleted file mode 100644 index c2292d996b..0000000000 --- a/src/modules/load_mon/params.c +++ /dev/null @@ -1,40 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2013-2020 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Enable stack checking - * - * @boolean - * @group System - */ -PARAM_DEFINE_INT32(SYS_STCK_EN, 1); diff --git a/src/modules/load_mon/params.yaml b/src/modules/load_mon/params.yaml new file mode 100644 index 0000000000..b47fa46de7 --- /dev/null +++ b/src/modules/load_mon/params.yaml @@ -0,0 +1,9 @@ +module_name: load_mon +parameters: +- group: System + definitions: + SYS_STCK_EN: + description: + short: Enable stack checking + type: boolean + default: 1 diff --git a/src/modules/local_position_estimator/BlockLocalPositionEstimator.hpp b/src/modules/local_position_estimator/BlockLocalPositionEstimator.hpp index 8baf8b292c..62bcb579f0 100644 --- a/src/modules/local_position_estimator/BlockLocalPositionEstimator.hpp +++ b/src/modules/local_position_estimator/BlockLocalPositionEstimator.hpp @@ -49,7 +49,6 @@ static const size_t N_DIST_SUBS = 4; // for fault detection // chi squared distribution, false alarm probability 0.0001 -// see fault_table.py // note skip 0 index so we can use degree of freedom as index static const float BETA_TABLE[7] = {0, 8.82050518214, diff --git a/src/modules/local_position_estimator/CMakeLists.txt b/src/modules/local_position_estimator/CMakeLists.txt index aafaecdef0..01e30b93de 100644 --- a/src/modules/local_position_estimator/CMakeLists.txt +++ b/src/modules/local_position_estimator/CMakeLists.txt @@ -47,6 +47,8 @@ px4_add_module( sensors/mocap.cpp sensors/land.cpp sensors/landing_target.cpp + MODULE_CONFIG + params.yaml DEPENDS controllib geo diff --git a/src/modules/local_position_estimator/fault_table.py b/src/modules/local_position_estimator/fault_table.py deleted file mode 100644 index 9c84074836..0000000000 --- a/src/modules/local_position_estimator/fault_table.py +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env python -from __future__ import print_function -import pylab as pl -import scipy.optimize -from scipy.stats import chi2 - -for fa_rate in 1.0/pl.array([1e1, 1e2, 1e4, 1e6, 1e9]): - print(fa_rate) - for df in range(1,7): - f_eq = lambda x: ((1- fa_rate) - chi2.cdf(x, df))**2 - res = scipy.optimize.minimize(f_eq, df) - assert res['success'] - print('\t', res.x[0]) diff --git a/src/modules/local_position_estimator/params.c b/src/modules/local_position_estimator/params.c deleted file mode 100644 index 636f4289b0..0000000000 --- a/src/modules/local_position_estimator/params.c +++ /dev/null @@ -1,473 +0,0 @@ -#include - -/** - * Local position estimator enable (unsupported) - * - * @group Local Position Estimator - * @boolean - */ -PARAM_DEFINE_INT32(LPE_EN, 0); - -/** - * Optical flow z offset from center - * - * @group Local Position Estimator - * @unit m - * @min -1 - * @max 1 - * @decimal 3 - */ -PARAM_DEFINE_FLOAT(LPE_FLW_OFF_Z, 0.0f); - -/** - * Optical flow scale - * - * @group Local Position Estimator - * @unit m - * @min 0.1 - * @max 10.0 - * @decimal 3 - */ -PARAM_DEFINE_FLOAT(LPE_FLW_SCALE, 1.3f); - -/** - * Optical flow rotation (roll/pitch) noise gain - * - * @group Local Position Estimator - * @unit m/s/rad - * @min 0.1 - * @max 10.0 - * @decimal 3 - */ -PARAM_DEFINE_FLOAT(LPE_FLW_R, 7.0f); - -/** - * Optical flow angular velocity noise gain - * - * @group Local Position Estimator - * @unit m/rad - * @min 0.0 - * @max 10.0 - * @decimal 3 - */ -PARAM_DEFINE_FLOAT(LPE_FLW_RR, 7.0f); - -/** - * Optical flow minimum quality threshold - * - * @group Local Position Estimator - * @min 0 - * @max 255 - */ -PARAM_DEFINE_INT32(LPE_FLW_QMIN, 150); - -/** - * Sonar z standard deviation. - * - * @group Local Position Estimator - * @unit m - * @min 0.01 - * @max 1 - * @decimal 3 - */ -PARAM_DEFINE_FLOAT(LPE_SNR_Z, 0.05f); - -/** - * Sonar z offset from center of vehicle +down - * - * @group Local Position Estimator - * @unit m - * @min -1 - * @max 1 - * @decimal 3 - */ -PARAM_DEFINE_FLOAT(LPE_SNR_OFF_Z, 0.00f); - -/** - * Lidar z standard deviation. - * - * @group Local Position Estimator - * @unit m - * @min 0.01 - * @max 1 - * @decimal 3 - */ -PARAM_DEFINE_FLOAT(LPE_LDR_Z, 0.03f); - -/** - * Lidar z offset from center of vehicle +down - * - * @group Local Position Estimator - * @unit m - * @min -1 - * @max 1 - * @decimal 3 - */ -PARAM_DEFINE_FLOAT(LPE_LDR_OFF_Z, 0.00f); - -/** - * Accelerometer xy noise density - * - * Data sheet noise density = 150ug/sqrt(Hz) = 0.0015 m/s^2/sqrt(Hz) - * - * Larger than data sheet to account for tilt error. - * - * @group Local Position Estimator - * @unit m/s^2/sqrt(Hz) - * @min 0.00001 - * @max 2 - * @decimal 4 - */ -PARAM_DEFINE_FLOAT(LPE_ACC_XY, 0.012f); - -/** - * Accelerometer z noise density - * - * Data sheet noise density = 150ug/sqrt(Hz) = 0.0015 m/s^2/sqrt(Hz) - * - * @group Local Position Estimator - * @unit m/s^2/sqrt(Hz) - * @min 0.00001 - * @max 2 - * @decimal 4 - */ -PARAM_DEFINE_FLOAT(LPE_ACC_Z, 0.02f); - -/** - * Barometric presssure altitude z standard deviation. - * - * @group Local Position Estimator - * @unit m - * @min 0.01 - * @max 100 - * @decimal 2 - */ -PARAM_DEFINE_FLOAT(LPE_BAR_Z, 3.0f); - -/** - * GPS delay compensaton - * - * @group Local Position Estimator - * @unit s - * @min 0 - * @max 0.4 - * @decimal 2 - */ -PARAM_DEFINE_FLOAT(LPE_GPS_DELAY, 0.29f); - - -/** - * Minimum GPS xy standard deviation, uses reported EPH if greater. - * - * @group Local Position Estimator - * @unit m - * @min 0.01 - * @max 5 - * @decimal 2 - */ -PARAM_DEFINE_FLOAT(LPE_GPS_XY, 1.0f); - -/** - * Minimum GPS z standard deviation, uses reported EPV if greater. - * - * @group Local Position Estimator - * @unit m - * @min 0.01 - * @max 200 - * @decimal 2 - */ -PARAM_DEFINE_FLOAT(LPE_GPS_Z, 3.0f); - -/** - * GPS xy velocity standard deviation. - * - * EPV used if greater than this value. - * - * @group Local Position Estimator - * @unit m/s - * @min 0.01 - * @max 2 - * @decimal 3 - */ -PARAM_DEFINE_FLOAT(LPE_GPS_VXY, 0.25f); - -/** - * GPS z velocity standard deviation. - * - * @group Local Position Estimator - * @unit m/s - * @min 0.01 - * @max 2 - * @decimal 3 - */ -PARAM_DEFINE_FLOAT(LPE_GPS_VZ, 0.25f); - -/** - * Max EPH allowed for GPS initialization - * - * @group Local Position Estimator - * @unit m - * @min 1.0 - * @max 5.0 - * @decimal 3 - */ -PARAM_DEFINE_FLOAT(LPE_EPH_MAX, 3.0f); - -/** - * Max EPV allowed for GPS initialization - * - * @group Local Position Estimator - * @unit m - * @min 1.0 - * @max 5.0 - * @decimal 3 - */ -PARAM_DEFINE_FLOAT(LPE_EPV_MAX, 5.0f); - -/** - * Vision delay compensation. - * - * Set to zero to enable automatic compensation from measurement timestamps - * - * @group Local Position Estimator - * @unit s - * @min 0 - * @max 0.1 - * @decimal 2 - */ -PARAM_DEFINE_FLOAT(LPE_VIS_DELAY, 0.1f); - -/** - * Vision xy standard deviation. - * - * @group Local Position Estimator - * @unit m - * @min 0.01 - * @max 1 - * @decimal 3 - */ -PARAM_DEFINE_FLOAT(LPE_VIS_XY, 0.1f); - -/** - * Vision z standard deviation. - * - * @group Local Position Estimator - * @unit m - * @min 0.01 - * @max 100 - * @decimal 3 - */ -PARAM_DEFINE_FLOAT(LPE_VIS_Z, 0.5f); - -/** - * Vicon position standard deviation. - * - * @group Local Position Estimator - * @unit m - * @min 0.0001 - * @max 1 - * @decimal 4 - */ -PARAM_DEFINE_FLOAT(LPE_VIC_P, 0.001f); - -/** - * Position propagation noise density - * - * Increase to trust measurements more. - * Decrease to trust model more. - * - * @group Local Position Estimator - * @unit m/s/sqrt(Hz) - * @min 0 - * @max 1 - * @decimal 8 - */ -PARAM_DEFINE_FLOAT(LPE_PN_P, 0.1f); - -/** - * Velocity propagation noise density - * - * Increase to trust measurements more. - * Decrease to trust model more. - * - * @group Local Position Estimator - * @unit m/s^2/sqrt(Hz) - * @min 0 - * @max 1 - * @decimal 8 - */ -PARAM_DEFINE_FLOAT(LPE_PN_V, 0.1f); - -/** - * Accel bias propagation noise density - * - * @group Local Position Estimator - * @unit m/s^3/sqrt(Hz) - * @min 0 - * @max 1 - * @decimal 8 - */ -PARAM_DEFINE_FLOAT(LPE_PN_B, 1e-3f); - -/** - * Terrain random walk noise density, hilly/outdoor (0.1), flat/Indoor (0.001) - * - * @group Local Position Estimator - * @unit m/s/sqrt(Hz) - * @min 0 - * @max 1 - * @decimal 3 - */ -PARAM_DEFINE_FLOAT(LPE_PN_T, 0.001f); - -/** - * Terrain maximum percent grade, hilly/outdoor (100 = 45 deg), flat/Indoor (0 = 0 deg) - * - * Used to calculate increased terrain random walk nosie due to movement. - * - * @group Local Position Estimator - * @unit % - * @min 0 - * @max 100 - * @decimal 3 - */ -PARAM_DEFINE_FLOAT(LPE_T_MAX_GRADE, 1.0f); - -/** - * Flow gyro high pass filter cut off frequency - * - * @group Local Position Estimator - * @unit Hz - * @min 0 - * @max 2 - * @decimal 3 - */ -PARAM_DEFINE_FLOAT(LPE_FGYRO_HP, 0.001f); - -/** - * Enable publishing of a fake global position (e.g for AUTO missions using Optical Flow) - * - * By initializing the estimator to the LPE_LAT/LON parameters when global information is unavailable - * - * @group Local Position Estimator - * @min 0 - * @max 1 - */ -PARAM_DEFINE_INT32(LPE_FAKE_ORIGIN, 0); - -/** - * Local origin latitude for nav w/o GPS - * - * @group Local Position Estimator - * @unit deg - * @min -90 - * @max 90 - * @decimal 8 - */ -PARAM_DEFINE_FLOAT(LPE_LAT, 47.397742f); - -/** - * Local origin longitude for nav w/o GPS - * - * @group Local Position Estimator - * @unit deg - * @min -180 - * @max 180 - * @decimal 8 - */ -PARAM_DEFINE_FLOAT(LPE_LON, 8.545594); - -/** - * Cut frequency for state publication - * - * @group Local Position Estimator - * @unit Hz - * @min 5 - * @max 1000 - * @decimal 0 - */ -PARAM_DEFINE_FLOAT(LPE_X_LP, 5.0f); - -/** - * Required velocity xy standard deviation to publish position - * - * @group Local Position Estimator - * @unit m/s - * @min 0.01 - * @max 1.0 - * @decimal 3 - */ -PARAM_DEFINE_FLOAT(LPE_VXY_PUB, 0.3f); - -/** - * Required z standard deviation to publish altitude/ terrain - * - * @group Local Position Estimator - * @unit m - * @min 0.3 - * @max 5.0 - * @decimal 1 - */ -PARAM_DEFINE_FLOAT(LPE_Z_PUB, 1.0f); - -/** - * Land detector z standard deviation - * - * @group Local Position Estimator - * @unit m - * @min 0.001 - * @max 10.0 - * @decimal 3 - */ -PARAM_DEFINE_FLOAT(LPE_LAND_Z, 0.03f); - -/** - * Land detector xy velocity standard deviation - * - * @group Local Position Estimator - * @unit m/s - * @min 0.01 - * @max 10.0 - * @decimal 3 - */ -PARAM_DEFINE_FLOAT(LPE_LAND_VXY, 0.05f); - -/** - * Minimum landing target standard covariance, uses reported covariance if greater. - * - * @group Local Position Estimator - * @unit m^2 - * @min 0.0 - * @max 10 - * @decimal 2 - */ -PARAM_DEFINE_FLOAT(LPE_LT_COV, 0.0001f); - -/** - * Integer bitmask controlling data fusion - * - * Set bits in the following positions to enable: - * 0 : Set to true to fuse GPS data if available, also requires GPS for altitude init - * 1 : Set to true to fuse optical flow data if available - * 2 : Set to true to fuse vision position - * 3 : Set to true to enable landing target - * 4 : Set to true to fuse land detector - * 5 : Set to true to publish AGL as local position down component - * 6 : Set to true to enable flow gyro compensation - * 7 : Set to true to enable baro fusion - * - * default (145 - GPS, baro, land detector) - * - * @group Local Position Estimator - * @min 0 - * @max 255 - * @bit 0 fuse GPS, requires GPS for alt. init - * @bit 1 fuse optical flow - * @bit 2 fuse vision position - * @bit 3 fuse landing target - * @bit 4 fuse land detector - * @bit 5 pub agl as lpos down - * @bit 6 flow gyro compensation - * @bit 7 fuse baro - */ -PARAM_DEFINE_INT32(LPE_FUSION, 145); diff --git a/src/modules/local_position_estimator/params.yaml b/src/modules/local_position_estimator/params.yaml new file mode 100644 index 0000000000..33bf1782f9 --- /dev/null +++ b/src/modules/local_position_estimator/params.yaml @@ -0,0 +1,400 @@ +module_name: local_position_estimator +parameters: +- group: Local Position Estimator + definitions: + LPE_EN: + description: + short: Local position estimator enable (unsupported) + type: boolean + default: 0 + LPE_FLW_OFF_Z: + description: + short: Optical flow z offset from center + type: float + default: 0.0 + unit: m + min: -1 + max: 1 + decimal: 3 + LPE_FLW_SCALE: + description: + short: Optical flow scale + type: float + default: 1.3 + unit: m + min: 0.1 + max: 10.0 + decimal: 3 + LPE_FLW_R: + description: + short: Optical flow rotation (roll/pitch) noise gain + type: float + default: 7.0 + unit: m/s/rad + min: 0.1 + max: 10.0 + decimal: 3 + LPE_FLW_RR: + description: + short: Optical flow angular velocity noise gain + type: float + default: 7.0 + unit: m/rad + min: 0.0 + max: 10.0 + decimal: 3 + LPE_FLW_QMIN: + description: + short: Optical flow minimum quality threshold + type: int32 + default: 150 + min: 0 + max: 255 + LPE_SNR_Z: + description: + short: Sonar z standard deviation + type: float + default: 0.05 + unit: m + min: 0.01 + max: 1 + decimal: 3 + LPE_SNR_OFF_Z: + description: + short: Sonar z offset from center of vehicle +down + type: float + default: 0.0 + unit: m + min: -1 + max: 1 + decimal: 3 + LPE_LDR_Z: + description: + short: Lidar z standard deviation + type: float + default: 0.03 + unit: m + min: 0.01 + max: 1 + decimal: 3 + LPE_LDR_OFF_Z: + description: + short: Lidar z offset from center of vehicle +down + type: float + default: 0.0 + unit: m + min: -1 + max: 1 + decimal: 3 + LPE_ACC_XY: + description: + short: Accelerometer xy noise density + long: |- + Data sheet noise density = 150ug/sqrt(Hz) = 0.0015 m/s^2/sqrt(Hz) + + Larger than data sheet to account for tilt error. + type: float + default: 0.012 + unit: m/s^2/sqrt(Hz) + min: 1.0e-05 + max: 2 + decimal: 4 + LPE_ACC_Z: + description: + short: Accelerometer z noise density + long: Data sheet noise density = 150ug/sqrt(Hz) = 0.0015 m/s^2/sqrt(Hz) + type: float + default: 0.02 + unit: m/s^2/sqrt(Hz) + min: 1.0e-05 + max: 2 + decimal: 4 + LPE_BAR_Z: + description: + short: Barometric pressure altitude z standard deviation + type: float + default: 3.0 + unit: m + min: 0.01 + max: 100 + decimal: 2 + LPE_GPS_DELAY: + description: + short: GPS delay compensation + type: float + default: 0.29 + unit: s + min: 0 + max: 0.4 + decimal: 2 + LPE_GPS_XY: + description: + short: Minimum GPS xy standard deviation, uses reported EPH if greater + type: float + default: 1.0 + unit: m + min: 0.01 + max: 5 + decimal: 2 + LPE_GPS_Z: + description: + short: Minimum GPS z standard deviation, uses reported EPV if greater + type: float + default: 3.0 + unit: m + min: 0.01 + max: 200 + decimal: 2 + LPE_GPS_VXY: + description: + short: GPS xy velocity standard deviation + long: EPV used if greater than this value. + type: float + default: 0.25 + unit: m/s + min: 0.01 + max: 2 + decimal: 3 + LPE_GPS_VZ: + description: + short: GPS z velocity standard deviation + type: float + default: 0.25 + unit: m/s + min: 0.01 + max: 2 + decimal: 3 + LPE_EPH_MAX: + description: + short: Max EPH allowed for GPS initialization + type: float + default: 3.0 + unit: m + min: 1.0 + max: 5.0 + decimal: 3 + LPE_EPV_MAX: + description: + short: Max EPV allowed for GPS initialization + type: float + default: 5.0 + unit: m + min: 1.0 + max: 5.0 + decimal: 3 + LPE_VIS_DELAY: + description: + short: Vision delay compensation + long: Set to zero to enable automatic compensation from measurement timestamps + type: float + default: 0.1 + unit: s + min: 0 + max: 0.1 + decimal: 2 + LPE_VIS_XY: + description: + short: Vision xy standard deviation + type: float + default: 0.1 + unit: m + min: 0.01 + max: 1 + decimal: 3 + LPE_VIS_Z: + description: + short: Vision z standard deviation + type: float + default: 0.5 + unit: m + min: 0.01 + max: 100 + decimal: 3 + LPE_VIC_P: + description: + short: Vicon position standard deviation + type: float + default: 0.001 + unit: m + min: 0.0001 + max: 1 + decimal: 4 + LPE_PN_P: + description: + short: Position propagation noise density + long: |- + Increase to trust measurements more. + Decrease to trust model more. + type: float + default: 0.1 + unit: m/s/sqrt(Hz) + min: 0 + max: 1 + decimal: 8 + LPE_PN_V: + description: + short: Velocity propagation noise density + long: |- + Increase to trust measurements more. + Decrease to trust model more. + type: float + default: 0.1 + unit: m/s^2/sqrt(Hz) + min: 0 + max: 1 + decimal: 8 + LPE_PN_B: + description: + short: Accel bias propagation noise density + type: float + default: 0.001 + unit: m/s^3/sqrt(Hz) + min: 0 + max: 1 + decimal: 8 + LPE_PN_T: + description: + short: Terrain random walk noise density + long: Terrain random walk noise density, hilly/outdoor (0.1), flat/Indoor + (0.001) + type: float + default: 0.001 + unit: m/s/sqrt(Hz) + min: 0 + max: 1 + decimal: 3 + LPE_T_MAX_GRADE: + description: + short: Terrain maximum percent grade + long: |- + Terrain maximum percent grade, hilly/outdoor (100 = 45 deg), flat/Indoor (0 = 0 deg) + + Used to calculate increased terrain random walk noise due to movement. + type: float + default: 1.0 + unit: '%' + min: 0 + max: 100 + decimal: 3 + LPE_FGYRO_HP: + description: + short: Flow gyro high pass filter cut off frequency + type: float + default: 0.001 + unit: Hz + min: 0 + max: 2 + decimal: 3 + LPE_FAKE_ORIGIN: + description: + short: Enable fake global position for optical flow + long: |- + Enable publishing of a fake global position (e.g for AUTO missions using Optical Flow) + + By initializing the estimator to the LPE_LAT/LON parameters when global information is unavailable + type: int32 + default: 0 + min: 0 + max: 1 + LPE_LAT: + description: + short: Local origin latitude for nav w/o GPS + type: float + default: 47.397742 + unit: deg + min: -90 + max: 90 + decimal: 8 + LPE_LON: + description: + short: Local origin longitude for nav w/o GPS + type: float + default: 8.545594 + unit: deg + min: -180 + max: 180 + decimal: 8 + LPE_X_LP: + description: + short: Cut frequency for state publication + type: float + default: 5.0 + unit: Hz + min: 5 + max: 1000 + decimal: 0 + LPE_VXY_PUB: + description: + short: Required velocity xy standard deviation to publish position + type: float + default: 0.3 + unit: m/s + min: 0.01 + max: 1.0 + decimal: 3 + LPE_Z_PUB: + description: + short: Required z standard deviation to publish altitude/ terrain + type: float + default: 1.0 + unit: m + min: 0.3 + max: 5.0 + decimal: 1 + LPE_LAND_Z: + description: + short: Land detector z standard deviation + type: float + default: 0.03 + unit: m + min: 0.001 + max: 10.0 + decimal: 3 + LPE_LAND_VXY: + description: + short: Land detector xy velocity standard deviation + type: float + default: 0.05 + unit: m/s + min: 0.01 + max: 10.0 + decimal: 3 + LPE_LT_COV: + description: + short: Minimum landing target standard covariance + long: Minimum landing target standard covariance, uses reported covariance + if greater + type: float + default: 0.0001 + unit: m^2 + min: 0.0 + max: 10 + decimal: 2 + LPE_FUSION: + description: + short: Integer bitmask controlling data fusion + long: |- + Set bits in the following positions to enable: + 0 : Set to true to fuse GPS data if available, also requires GPS for altitude init + 1 : Set to true to fuse optical flow data if available + 2 : Set to true to fuse vision position + 3 : Set to true to enable landing target + 4 : Set to true to fuse land detector + 5 : Set to true to publish AGL as local position down component + 6 : Set to true to enable flow gyro compensation + 7 : Set to true to enable baro fusion + + default (145 - GPS, baro, land detector) + type: bitmask + bit: + 0: fuse GPS, requires GPS for alt. init + 1: fuse optical flow + 2: fuse vision position + 3: fuse landing target + 4: fuse land detector + 5: pub agl as lpos down + 6: flow gyro compensation + 7: fuse baro + default: 145 + min: 0 + max: 255 diff --git a/src/modules/logger/CMakeLists.txt b/src/modules/logger/CMakeLists.txt index b9ea444670..995ce88524 100644 --- a/src/modules/logger/CMakeLists.txt +++ b/src/modules/logger/CMakeLists.txt @@ -55,6 +55,7 @@ px4_add_module( log_writer_file.cpp log_writer_mavlink.cpp util.cpp + util_parse.cpp watchdog.cpp DEPENDS version @@ -62,3 +63,11 @@ px4_add_module( ) px4_add_unit_gtest(SRC ULogMessagesTest.cpp) + +if(BUILD_TESTING) + # Separate library for pure parsing functions (testable without PX4 dependencies) + add_library(logger_util_parse STATIC util_parse.cpp) + target_include_directories(logger_util_parse PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) +endif() + +px4_add_unit_gtest(SRC loggerUtilTest.cpp LINKLIBS logger_util_parse) diff --git a/src/modules/logger/log_writer_file.cpp b/src/modules/logger/log_writer_file.cpp index 1ec37cf73e..65bb7923c0 100644 --- a/src/modules/logger/log_writer_file.cpp +++ b/src/modules/logger/log_writer_file.cpp @@ -728,6 +728,7 @@ void LogWriterFile::LogFileBuffer::reset() { _head = 0; _count = 0; + _total_written = 0; _fd = -1; } diff --git a/src/modules/logger/logged_topics.cpp b/src/modules/logger/logged_topics.cpp index 2f28932af7..e3044c1ee7 100644 --- a/src/modules/logger/logged_topics.cpp +++ b/src/modules/logger/logged_topics.cpp @@ -64,7 +64,7 @@ void LoggedTopics::add_default_topics() add_optional_topic("external_ins_attitude"); add_optional_topic("external_ins_global_position"); add_optional_topic("external_ins_local_position"); - add_topic("esc_status"); + add_topic("esc_status", 100); add_topic("failure_detector_status", 100); add_topic("failsafe_flags"); add_optional_topic("follow_target", 500); @@ -79,7 +79,7 @@ void LoggedTopics::add_default_topics() add_topic("gps_dump"); add_optional_topic("gimbal_controls", 200); add_optional_topic("gripper"); - add_optional_topic("heater_status"); + add_optional_topic_multi("heater_status"); add_topic("home_position"); add_topic("hover_thrust_estimate", 100); add_topic("input_rc", 500); @@ -160,6 +160,7 @@ void LoggedTopics::add_default_topics() add_optional_topic("fixed_wing_lateral_guidance_status", 100); add_optional_topic("fixed_wing_lateral_status", 100); add_optional_topic("fixed_wing_runway_control", 100); + add_optional_topic("ranging_beacon", 100); // multi topics add_optional_topic_multi("actuator_outputs", 100, 3); @@ -319,6 +320,7 @@ void LoggedTopics::add_estimator_replay_topics() add_topic("vehicle_magnetometer"); add_topic("vehicle_status"); add_topic("vehicle_visual_odometry"); + add_topic("ranging_beacon"); add_topic_multi("aux_global_position"); add_topic_multi("distance_sensor"); } @@ -371,10 +373,16 @@ void LoggedTopics::add_system_identification_topics() void LoggedTopics::add_high_rate_sensors_topics() { - add_topic_multi("distance_sensor", 0, 4); - add_topic_multi("sensor_optical_flow", 0, 2); - add_topic_multi("sensor_gps", 0, 4); - add_topic_multi("sensor_mag", 0, 4); + add_topic_multi("distance_sensor", 10, 4); + add_topic_multi("sensor_baro", 10, 4); + add_topic_multi("sensor_optical_flow", 10, 2); + add_topic_multi("sensor_gps", 10, 4); + add_topic_multi("sensor_gnss_relative", 10, 1); + add_topic_multi("sensor_mag", 10, 4); + add_topic("estimator_aid_src_baro_hgt", 10); + add_topic("vehicle_air_data", 10); + add_topic("vehicle_magnetometer", 10); + add_topic("vehicle_thrust_setpoint", 10); } void LoggedTopics::add_mavlink_tunnel() diff --git a/src/modules/logger/logger.cpp b/src/modules/logger/logger.cpp index 948e35c0e9..aaa24ca69b 100644 --- a/src/modules/logger/logger.cpp +++ b/src/modules/logger/logger.cpp @@ -38,11 +38,13 @@ #include "messages.h" #include +#include #include #include #include #include #include +#include #include #include @@ -596,9 +598,14 @@ void Logger::run() } } - if (util::check_free_space(LOG_ROOT[(int)LogType::Full], _param_sdlog_dirs_max.get(), _mavlink_log_pub, - _file_name[(int)LogType::Full].sess_dir_index) == 1) { - return; + // Get the next session directory index + util::LogDirInfo dir_info; + + if (util::scan_log_directories(LOG_ROOT[(int)LogType::Full], dir_info)) { + _file_name[(int)LogType::Full].sess_dir_index = dir_info.sess_idx_max + 1; + + } else { + _file_name[(int)LogType::Full].sess_dir_index = 0; } } @@ -813,7 +820,7 @@ void Logger::run() if (_log_message_sub.update(&log_message)) { const char *message = (const char *)log_message.text; - int message_len = strlen(message); + int message_len = strnlen(message, sizeof(log_message.text)); if (message_len > 0) { uint16_t write_msg_size = sizeof(ulog_message_logging_s) - sizeof(ulog_message_logging_s::message) @@ -878,6 +885,14 @@ void Logger::run() debug_print_buffer(total_bytes, timer_start); + // Rotate log file when it exceeds max size (if SDLOG_MAX_SIZE > 0) + if (_max_log_file_size > 0 && + _writer.get_total_written_file(LogType::Full) > _max_log_file_size) { + PX4_INFO("Log file size limit reached, rotating"); + stop_log_file(LogType::Full); + start_log_file(LogType::Full); + } + was_started = true; } else { // not logging @@ -1185,7 +1200,7 @@ void Logger::handle_vehicle_command_update() if (command.command == vehicle_command_s::VEHICLE_CMD_LOGGING_START) { - if ((int)(command.param1 + 0.5f) != 0) { + if (static_cast(lroundf(command.param1)) != 0) { ack_vehicle_command(&command, vehicle_command_ack_s::VEHICLE_CMD_RESULT_UNSUPPORTED); } else if (can_start_mavlink_log()) { @@ -1249,7 +1264,8 @@ int Logger::create_log_dir(LogType type, tm *tt, char *log_dir, int log_dir_len) if (tt) { strftime(file_name.log_dir, sizeof(LogFileName::log_dir), "%Y-%m-%d", tt); - strncpy(log_dir + n, file_name.log_dir, log_dir_len - n); + strncpy(log_dir + n, file_name.log_dir, log_dir_len - n - 1); + log_dir[log_dir_len - 1] = '\0'; int mkdir_ret = mkdir(log_dir, S_IRWXU | S_IRWXG | S_IRWXO); if (mkdir_ret != OK && errno != EEXIST) { @@ -1261,7 +1277,8 @@ int Logger::create_log_dir(LogType type, tm *tt, char *log_dir, int log_dir_len) uint16_t dir_number = file_name.sess_dir_index; if (file_name.has_log_dir) { - strncpy(log_dir + n, file_name.log_dir, log_dir_len - n); + strncpy(log_dir + n, file_name.log_dir, log_dir_len - n - 1); + log_dir[log_dir_len - 1] = '\0'; } /* look for the next dir that does not exist */ @@ -1274,7 +1291,8 @@ int Logger::create_log_dir(LogType type, tm *tt, char *log_dir, int log_dir_len) return -1; } - strncpy(log_dir + n, file_name.log_dir, log_dir_len - n); + strncpy(log_dir + n, file_name.log_dir, log_dir_len - n - 1); + log_dir[log_dir_len - 1] = '\0'; int mkdir_ret = mkdir(log_dir, S_IRWXU | S_IRWXG | S_IRWXO); if (mkdir_ret == 0) { @@ -1358,20 +1376,27 @@ int Logger::get_log_file_name(LogType type, char *file_name, size_t file_name_si return -1; } + // Find the highest existing log file number and use next uint16_t file_number = 100; // start with file log100 + uint16_t max_existing = 99; - /* look for the next file that does not exist */ - while (file_number <= MAX_NO_LOGFILE) { - /* format log file path: e.g. /fs/microsd/log/sess001/log001.ulg */ - snprintf(log_file_name, sizeof(LogFileName::log_file_name), "log%03" PRIu16 "%s.ulg%s", file_number, replay_suffix, - crypto_suffix); - snprintf(file_name + n, file_name_size - n, "/%s", log_file_name); + DIR *dp = opendir(file_name); - if (!util::file_exist(file_name)) { - break; + if (dp != nullptr) { + struct dirent *entry; + + while ((entry = readdir(dp)) != nullptr) { + uint16_t num; + + if (sscanf(entry->d_name, "log%hu", &num) == 1) { + if (num > max_existing) { + max_existing = num; + } + } } - file_number++; + closedir(dp); + file_number = max_existing + 1; } if (file_number > MAX_NO_LOGFILE) { @@ -1379,6 +1404,11 @@ int Logger::get_log_file_name(LogType type, char *file_name, size_t file_name_si return -1; } + /* format log file path: e.g. /fs/microsd/log/sess001/log001.ulg */ + snprintf(log_file_name, sizeof(LogFileName::log_file_name), "log%03" PRIu16 "%s.ulg%s", file_number, replay_suffix, + crypto_suffix); + snprintf(file_name + n, file_name_size - n, "/%s", log_file_name); + if (notify) { mavlink_log_info(&_mavlink_log_pub, "[logger] %s\t", file_name); uint16_t sess = 0; @@ -1409,6 +1439,35 @@ void Logger::start_log_file(LogType type) } if (type == LogType::Full) { + int32_t max_size_mib = _param_sdlog_max_size.get(); + + if (max_size_mib > 0) { + _max_log_file_size = (size_t)max_size_mib * 1024ULL * 1024ULL; + PX4_INFO("Max log file size: %" PRId32 " MiB", max_size_mib); + + } else { + _max_log_file_size = 0; // unlimited + } + + // Cleanup old logs if needed. + // SDLOG_ROTATE is the max disk-usage percentage; cleanup ensures at least + // (100 - rotate)% is free even during writing. SDLOG_MAX_SIZE is passed so + // there's always room for the next log file on top of the free-space target. + // SDLOG_DIRS_MAX, if > 0, additionally caps the number of log directories. + hrt_abstime cleanup_start = hrt_absolute_time(); + + if (util::cleanup_old_logs(LOG_ROOT[(int)LogType::Full], _mavlink_log_pub, + (uint32_t)_param_sdlog_rotate.get(), (uint32_t)max_size_mib, + _param_sdlog_dirs_max.get()) == 1) { + return; // Not enough space even after cleanup + } + + const uint64_t cleanup_ms = hrt_elapsed_time(&cleanup_start) / 1000; + + if (cleanup_ms > 100) { + PX4_INFO("Log cleanup took %" PRIu64 " ms", cleanup_ms); + } + // initialize cpu load as early as possible to get more data initialize_load_output(PrintLoadReason::Preflight); } diff --git a/src/modules/logger/logger.h b/src/modules/logger/logger.h index a572c05714..9a2359bece 100644 --- a/src/modules/logger/logger.h +++ b/src/modules/logger/logger.h @@ -387,6 +387,8 @@ private: hrt_abstime _logger_status_last {0}; int _lockstep_component{-1}; + size_t _max_log_file_size {0}; ///< max log file size in bytes (0 = unlimited) + uint32_t _message_gaps{0}; timer_callback_data_s _timer_callback_data{}; @@ -399,6 +401,8 @@ private: DEFINE_PARAMETERS( (ParamInt) _param_sdlog_utc_offset, + (ParamInt) _param_sdlog_max_size, + (ParamInt) _param_sdlog_rotate, (ParamInt) _param_sdlog_dirs_max, (ParamInt) _param_sdlog_profile, (ParamInt) _param_sdlog_mission, diff --git a/src/modules/logger/loggerUtilTest.cpp b/src/modules/logger/loggerUtilTest.cpp new file mode 100644 index 0000000000..ccc129bd83 --- /dev/null +++ b/src/modules/logger/loggerUtilTest.cpp @@ -0,0 +1,283 @@ +/**************************************************************************** + * + * Copyright (c) 2025 PX4 Development Team. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name PX4 nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +/** + * Test code for the logger utility parsing functions + * Run this test using: build/px4_sitl_test/unit-util + */ + +#include +#include "util_parse.h" + +using namespace px4::logger::util; + +// Session directory parsing tests +TEST(LoggerUtilTest, ParseSessDirValid) +{ + int idx; + EXPECT_TRUE(parse_sess_dir_name("sess000", idx)); + EXPECT_EQ(idx, 0); + + EXPECT_TRUE(parse_sess_dir_name("sess001", idx)); + EXPECT_EQ(idx, 1); + + EXPECT_TRUE(parse_sess_dir_name("sess123", idx)); + EXPECT_EQ(idx, 123); + + EXPECT_TRUE(parse_sess_dir_name("sess999", idx)); + EXPECT_EQ(idx, 999); +} + +TEST(LoggerUtilTest, ParseSessDirInvalid) +{ + int idx; + EXPECT_FALSE(parse_sess_dir_name("session001", idx)); + EXPECT_FALSE(parse_sess_dir_name("2024-01-15", idx)); + EXPECT_FALSE(parse_sess_dir_name(".", idx)); + EXPECT_FALSE(parse_sess_dir_name("..", idx)); + EXPECT_FALSE(parse_sess_dir_name("log001", idx)); + EXPECT_FALSE(parse_sess_dir_name("", idx)); +} + +// Date directory parsing tests +TEST(LoggerUtilTest, ParseDateDirValid) +{ + int y, m, d; + EXPECT_TRUE(parse_date_dir_name("2024-01-15", y, m, d)); + EXPECT_EQ(y, 2024); + EXPECT_EQ(m, 1); + EXPECT_EQ(d, 15); + + EXPECT_TRUE(parse_date_dir_name("2023-12-31", y, m, d)); + EXPECT_EQ(y, 2023); + EXPECT_EQ(m, 12); + EXPECT_EQ(d, 31); + + EXPECT_TRUE(parse_date_dir_name("2025-06-01", y, m, d)); + EXPECT_EQ(y, 2025); + EXPECT_EQ(m, 6); + EXPECT_EQ(d, 1); +} + +TEST(LoggerUtilTest, ParseDateDirInvalid) +{ + int y, m, d; + EXPECT_FALSE(parse_date_dir_name("sess001", y, m, d)); + EXPECT_FALSE(parse_date_dir_name("2024-01", y, m, d)); + EXPECT_FALSE(parse_date_dir_name("2024", y, m, d)); + EXPECT_FALSE(parse_date_dir_name(".", y, m, d)); + EXPECT_FALSE(parse_date_dir_name("..", y, m, d)); + EXPECT_FALSE(parse_date_dir_name("", y, m, d)); +} + +// Date comparison tests +TEST(LoggerUtilTest, IsDateOlderYearDifference) +{ + // Earlier year is older + EXPECT_TRUE(is_date_older(2023, 12, 31, 2024, 1, 1)); + EXPECT_FALSE(is_date_older(2024, 1, 1, 2023, 12, 31)); +} + +TEST(LoggerUtilTest, IsDateOlderMonthDifference) +{ + // Same year, earlier month is older + EXPECT_TRUE(is_date_older(2024, 1, 15, 2024, 2, 1)); + EXPECT_FALSE(is_date_older(2024, 2, 1, 2024, 1, 15)); +} + +TEST(LoggerUtilTest, IsDateOlderDayDifference) +{ + // Same year and month, earlier day is older + EXPECT_TRUE(is_date_older(2024, 1, 1, 2024, 1, 15)); + EXPECT_FALSE(is_date_older(2024, 1, 15, 2024, 1, 1)); +} + +TEST(LoggerUtilTest, IsDateOlderSameDate) +{ + // Same date is not older + EXPECT_FALSE(is_date_older(2024, 1, 15, 2024, 1, 15)); +} + +TEST(LoggerUtilTest, IsDateOlderEdgeCases) +{ + // Year boundary + EXPECT_TRUE(is_date_older(2023, 12, 31, 2024, 1, 1)); + + // Month boundary + EXPECT_TRUE(is_date_older(2024, 1, 31, 2024, 2, 1)); + + // Large year difference + EXPECT_TRUE(is_date_older(2000, 6, 15, 2024, 6, 15)); +} + +// process_dir_entry tests - combined sess vs date logic +TEST(LoggerUtilTest, ProcessDirEntrySessionOnly) +{ + LogDirInfo info{}; + + process_dir_entry("sess000", info); + EXPECT_EQ(info.num_sess, 1); + EXPECT_EQ(info.sess_idx_min, 0); + EXPECT_EQ(info.sess_idx_max, 0); + EXPECT_EQ(info.num_dates, 0); + + process_dir_entry("sess005", info); + EXPECT_EQ(info.num_sess, 2); + EXPECT_EQ(info.sess_idx_min, 0); + EXPECT_EQ(info.sess_idx_max, 5); + + process_dir_entry("sess003", info); + EXPECT_EQ(info.num_sess, 3); + EXPECT_EQ(info.sess_idx_min, 0); + EXPECT_EQ(info.sess_idx_max, 5); +} + +TEST(LoggerUtilTest, ProcessDirEntryDateOnly) +{ + LogDirInfo info{}; + + process_dir_entry("2024-06-15", info); + EXPECT_EQ(info.num_dates, 1); + EXPECT_EQ(info.oldest_year, 2024); + EXPECT_EQ(info.oldest_month, 6); + EXPECT_EQ(info.oldest_day, 15); + EXPECT_EQ(info.num_sess, 0); + + // Add older date + process_dir_entry("2024-01-10", info); + EXPECT_EQ(info.num_dates, 2); + EXPECT_EQ(info.oldest_year, 2024); + EXPECT_EQ(info.oldest_month, 1); + EXPECT_EQ(info.oldest_day, 10); + + // Add newer date (oldest should not change) + process_dir_entry("2024-12-25", info); + EXPECT_EQ(info.num_dates, 3); + EXPECT_EQ(info.oldest_year, 2024); + EXPECT_EQ(info.oldest_month, 1); + EXPECT_EQ(info.oldest_day, 10); +} + +TEST(LoggerUtilTest, ProcessDirEntryMixedSessAndDate) +{ + LogDirInfo info{}; + + process_dir_entry("sess001", info); + process_dir_entry("2024-03-15", info); + process_dir_entry("sess005", info); + process_dir_entry("2023-12-01", info); + + EXPECT_EQ(info.num_sess, 2); + EXPECT_EQ(info.sess_idx_min, 1); + EXPECT_EQ(info.sess_idx_max, 5); + + EXPECT_EQ(info.num_dates, 2); + EXPECT_EQ(info.oldest_year, 2023); + EXPECT_EQ(info.oldest_month, 12); + EXPECT_EQ(info.oldest_day, 1); +} + +TEST(LoggerUtilTest, ProcessDirEntryIgnoresInvalid) +{ + LogDirInfo info{}; + + // These should be ignored + process_dir_entry(".", info); + process_dir_entry("..", info); + process_dir_entry("log001", info); + process_dir_entry("session001", info); + process_dir_entry("2024-01", info); + process_dir_entry("random_dir", info); + + EXPECT_EQ(info.num_sess, 0); + EXPECT_EQ(info.num_dates, 0); + EXPECT_EQ(info.sess_idx_max, -1); // unchanged from default + EXPECT_EQ(info.sess_idx_min, INT_MAX); // unchanged from default +} + +TEST(LoggerUtilTest, ProcessDirEntrySessMinMaxTracking) +{ + LogDirInfo info{}; + + // Add in non-sequential order + process_dir_entry("sess050", info); + EXPECT_EQ(info.sess_idx_min, 50); + EXPECT_EQ(info.sess_idx_max, 50); + + process_dir_entry("sess010", info); + EXPECT_EQ(info.sess_idx_min, 10); + EXPECT_EQ(info.sess_idx_max, 50); + + process_dir_entry("sess100", info); + EXPECT_EQ(info.sess_idx_min, 10); + EXPECT_EQ(info.sess_idx_max, 100); + + process_dir_entry("sess025", info); + EXPECT_EQ(info.sess_idx_min, 10); + EXPECT_EQ(info.sess_idx_max, 100); +} + +TEST(LoggerUtilTest, ProcessDirEntryDateOldestTracking) +{ + LogDirInfo info{}; + + // Start with a date in the middle + process_dir_entry("2024-06-15", info); + EXPECT_EQ(info.oldest_year, 2024); + EXPECT_EQ(info.oldest_month, 6); + EXPECT_EQ(info.oldest_day, 15); + + // Add older year + process_dir_entry("2023-12-31", info); + EXPECT_EQ(info.oldest_year, 2023); + EXPECT_EQ(info.oldest_month, 12); + EXPECT_EQ(info.oldest_day, 31); + + // Add same year, older month + process_dir_entry("2023-01-15", info); + EXPECT_EQ(info.oldest_year, 2023); + EXPECT_EQ(info.oldest_month, 1); + EXPECT_EQ(info.oldest_day, 15); + + // Add same year/month, older day + process_dir_entry("2023-01-01", info); + EXPECT_EQ(info.oldest_year, 2023); + EXPECT_EQ(info.oldest_month, 1); + EXPECT_EQ(info.oldest_day, 1); + + // Add newer date (oldest should not change) + process_dir_entry("2025-01-01", info); + EXPECT_EQ(info.oldest_year, 2023); + EXPECT_EQ(info.oldest_month, 1); + EXPECT_EQ(info.oldest_day, 1); +} diff --git a/src/modules/logger/module.yaml b/src/modules/logger/module.yaml index e1984c89a7..e271de6b77 100644 --- a/src/modules/logger/module.yaml +++ b/src/modules/logger/module.yaml @@ -102,20 +102,51 @@ parameters: min: 0 max: 4095 reboot_required: true + SDLOG_MAX_SIZE: + description: + short: Maximum log file size + long: 'Maximum size of a single log file in mebibytes (1 MiB = 1024 * 1024 + bytes). When reached, the log file is closed and a new one is started. + This value is also added to the cleanup threshold (see SDLOG_ROTATE) to + reserve headroom for the next log file. A value of 0 disables both file + rotation and the cleanup reservation. + Must stay below the FAT32 file size limit of 4 GiB.' + type: int32 + default: 1024 + min: 0 + max: 4095 + unit: MiB + reboot_required: false + SDLOG_ROTATE: + description: + short: Maximum disk usage percentage + long: 'Maximum percentage of disk space that logs may occupy during operation, + including while writing a new log file. For example, a value of 90 means + at least 10% of disk is always kept free, even while writing. A value of + 100 lets logs fill the disk completely. A value of 0 disables space-based + cleanup entirely. At log start, oldest logs are deleted as needed to + maintain this guarantee, accounting for the next file write of up to + SDLOG_MAX_SIZE. Cleanup always happens at log start (not boot) so logs + can be downloaded via FTP before deletion.' + type: int32 + default: 90 + min: 0 + max: 100 + reboot_required: false SDLOG_DIRS_MAX: description: short: Maximum number of log directories to keep - long: 'If there are more log directories than this value, the system will - delete the oldest directories during startup. In addition, the system will - delete old logs if there is not enough free space left. The minimum amount - is 300 MB. If this is set to 0, old directories will only be removed if - the free space falls below the minimum. Note: this does not apply to mission - log files.' + long: 'If greater than 0, the oldest log directories are deleted at log + start to keep the total directory count at or below this value. This + cleanup is orthogonal to the free-space cleanup driven by SDLOG_ROTATE + and SDLOG_MAX_SIZE, and is useful for capping log usage by count + independent of available disk size (e.g. in SITL). A value of 0 + disables this count-based cleanup.' type: int32 default: 0 min: 0 max: 1000 - reboot_required: true + reboot_required: false SDLOG_UUID: description: short: Log UUID diff --git a/src/modules/logger/util.cpp b/src/modules/logger/util.cpp index 5fdd576bcf..c05cf844fa 100644 --- a/src/modules/logger/util.cpp +++ b/src/modules/logger/util.cpp @@ -34,14 +34,13 @@ #include "util.h" #include +#include +#include #include #include #include #include -#include -#include - #include #include #include @@ -57,8 +56,6 @@ #define GPS_EPOCH_SECS ((time_t)1234567890ULL) -typedef decltype(statfs::f_bavail) px4_statfs_buf_f_bavail_t; - namespace px4 { namespace logger @@ -72,32 +69,33 @@ bool file_exist(const char *filename) return stat(filename, &buffer) == 0; } -bool get_log_time(uint64_t &utc_time_usec, int utc_offset_sec, bool boot_time) +bool get_free_space(const char *path, uint64_t *avail_bytes, uint64_t *total_bytes) { - uORB::Subscription vehicle_gps_position_sub{ORB_ID(vehicle_gps_position)}; + struct statfs statfs_buf; - bool use_clock_time = true; - - /* Get the latest GPS publication */ - sensor_gps_s gps_pos; - - if (vehicle_gps_position_sub.copy(&gps_pos)) { - utc_time_usec = gps_pos.time_utc_usec; - - if (gps_pos.fix_type >= 2 && utc_time_usec >= (uint64_t) GPS_EPOCH_SECS * 1000000ULL) { - use_clock_time = false; - } + if (statfs(path, &statfs_buf) != 0) { + return false; } - if (use_clock_time) { - /* take clock time if there's no fix (yet) */ - struct timespec ts = {}; - px4_clock_gettime(CLOCK_REALTIME, &ts); - utc_time_usec = ts.tv_sec * 1000000ULL + ts.tv_nsec / 1000ULL; + if (avail_bytes != nullptr) { + *avail_bytes = (uint64_t)statfs_buf.f_bavail * statfs_buf.f_bsize; + } - if (utc_time_usec < (uint64_t) GPS_EPOCH_SECS * 1000000ULL) { - return false; - } + if (total_bytes != nullptr) { + *total_bytes = (uint64_t)statfs_buf.f_blocks * statfs_buf.f_bsize; + } + + return true; +} + +bool get_log_time(uint64_t &utc_time_usec, int utc_offset_sec, bool boot_time) +{ + struct timespec ts = {}; + px4_clock_gettime(CLOCK_REALTIME, &ts); + utc_time_usec = ts.tv_sec * 1000000ULL + ts.tv_nsec / 1000ULL; + + if (utc_time_usec < (uint64_t) GPS_EPOCH_SECS * 1000000ULL) { + return false; } /* strip the time elapsed since boot */ @@ -119,130 +117,207 @@ bool get_log_time(struct tm *tt, int utc_offset_sec, bool boot_time) return result && gmtime_r(&utc_time_sec, tt) != nullptr; } -int check_free_space(const char *log_root_dir, int32_t max_log_dirs_to_keep, orb_advert_t &mavlink_log_pub, - int &sess_dir_index) +bool scan_log_directories(const char *log_root_dir, LogDirInfo &info) { - struct statfs statfs_buf; + DIR *dp = opendir(log_root_dir); - if (max_log_dirs_to_keep == 0) { - max_log_dirs_to_keep = INT32_MAX; + if (dp == nullptr) { + return false; } - // remove old logs if the free space falls below a threshold - do { - if (statfs(log_root_dir, &statfs_buf) != 0) { - return PX4_ERROR; + // Reset info to defaults + info = LogDirInfo{}; + + struct dirent *result = nullptr; + + while ((result = readdir(dp))) { + process_dir_entry(result->d_name, info); + } + + closedir(dp); + return true; +} + +int cleanup_old_logs(const char *log_root_dir, orb_advert_t &mavlink_log_pub, + uint32_t rotate_pct, uint32_t max_file_size_mib, + int32_t max_dirs_to_keep) +{ + uint64_t avail_bytes = 0; + uint64_t total_bytes = 0; + + if (!get_free_space(log_root_dir, &avail_bytes, &total_bytes)) { + return PX4_ERROR; + } + + // Calculate cleanup threshold. rotate_pct is the maximum allowed disk usage; + // we guarantee the disk never exceeds rotate_pct% full even during writing of + // a new log file. So at cleanup time, free space must be at least + // ((100 - rotate_pct)% of disk) + max log file size, where the latter term + // reserves headroom for the next file write. + // rotate_pct == 0 disables space-based cleanup entirely. + uint64_t cleanup_threshold = 0; + + if (rotate_pct > 0 && rotate_pct <= 100) { + cleanup_threshold = (total_bytes * (100 - rotate_pct)) / 100; + cleanup_threshold += (uint64_t)max_file_size_mib * 1024ULL * 1024ULL; + } + + bool need_space_cleanup = avail_bytes < cleanup_threshold; + + // Early out if we have enough space and no directory-count limit + if (!need_space_cleanup && max_dirs_to_keep <= 0) { + return PX4_OK; + } + + // Scan directories for cleanup + LogDirInfo info; + + if (!scan_log_directories(log_root_dir, info)) { + return PX4_OK; // ignore if we cannot access the log directory + } + + int total_dirs = info.num_sess + info.num_dates; + bool need_count_cleanup = (max_dirs_to_keep > 0) && (total_dirs > max_dirs_to_keep); + + if (!need_space_cleanup && !need_count_cleanup) { + return PX4_OK; + } + + PX4_INFO("Log cleanup: %u MiB free, threshold %u MiB, %d dirs (max %" PRId32 ")", + (unsigned)(avail_bytes / 1024U / 1024U), (unsigned)(cleanup_threshold / 1024U / 1024U), + total_dirs, max_dirs_to_keep > 0 ? max_dirs_to_keep : -1); + + // Determine if we currently have valid time (using date dirs) or not (using sess dirs) + // Delete from the "other" scheme first to avoid deleting current log + uint64_t utc_time_usec; + bool have_time = get_log_time(utc_time_usec, 0, false); + + // Cleanup oldest .ulg files one by one until conditions are met + int empty_dir_failures = 0; + + while (need_space_cleanup || need_count_cleanup) { + char oldest_file[LOG_DIR_LEN] = ""; + char oldest_dir[LOG_DIR_LEN]; + + if (!scan_log_directories(log_root_dir, info)) { + break; } - DIR *dp = opendir(log_root_dir); + total_dirs = info.num_sess + info.num_dates; + bool found_sess = info.num_sess > 0; + bool found_date = info.num_dates > 0; + + if (!found_sess && !found_date) { + PX4_WARN("No log directories found to clean up"); + break; // no log directories found + } + + // Delete from the "other" naming scheme first (it's old/stale) + // - Have time (using date dirs): delete sess dirs first + // - No time (using sess dirs): delete date dirs first, then sess dirs + if (have_time && found_sess) { + // Using date dirs, delete old sess dirs first + snprintf(oldest_dir, sizeof(oldest_dir), "%s/sess%03u", log_root_dir, info.sess_idx_min); + + } else if (!have_time && found_date) { + // Using sess dirs, delete old date dirs first + snprintf(oldest_dir, sizeof(oldest_dir), "%s/%04u-%02u-%02u", log_root_dir, + info.oldest_year, info.oldest_month, info.oldest_day); + + } else if (found_sess) { + // Delete from oldest sess dir (including current - old files are ok to delete) + snprintf(oldest_dir, sizeof(oldest_dir), "%s/sess%03u", log_root_dir, info.sess_idx_min); + + } else if (found_date) { + // Delete from oldest date dir + snprintf(oldest_dir, sizeof(oldest_dir), "%s/%04u-%02u-%02u", log_root_dir, + info.oldest_year, info.oldest_month, info.oldest_day); + + } else { + // Nothing left to delete + break; + } + + PX4_DEBUG("Checking directory %s for old logs", oldest_dir); + + // Find oldest .ulg file in that directory + DIR *dp = opendir(oldest_dir); if (dp == nullptr) { - break; // ignore if we cannot access the log directory + PX4_WARN("Cannot open directory %s", oldest_dir); + break; } + // Max log filename: "12_09_00_replayed.ulg" (21 chars + null = 22 bytes) + // Using 64 for margin against unexpected filenames on disk. + static constexpr unsigned MAX_LOG_FILENAME_LEN = 64; + char oldest_ulg[MAX_LOG_FILENAME_LEN] = ""; struct dirent *result = nullptr; - int num_sess = 0, num_dates = 0; - - // There are 2 directory naming schemes: sess or --. - // For both we find the oldest and then remove the one which has more directories. - int year_min = 10000, month_min = 99, day_min = 99, sess_idx_min = 99999999, sess_idx_max = 99; - while ((result = readdir(dp))) { - int year, month, day, sess_idx; + size_t len = strlen(result->d_name); - if (sscanf(result->d_name, "sess%d", &sess_idx) == 1) { - ++num_sess; - - if (sess_idx > sess_idx_max) { - sess_idx_max = sess_idx; - } - - if (sess_idx < sess_idx_min) { - sess_idx_min = sess_idx; - } - - } else if (sscanf(result->d_name, "%d-%d-%d", &year, &month, &day) == 3) { - ++num_dates; - - if (year < year_min) { - year_min = year; - month_min = month; - day_min = day; - - } else if (year == year_min) { - if (month < month_min) { - month_min = month; - day_min = day; - - } else if (month == month_min) { - if (day < day_min) { - day_min = day; - } - } + if (len > 4 && strcmp(result->d_name + len - 4, ".ulg") == 0) { + if (oldest_ulg[0] == '\0' || strcmp(result->d_name, oldest_ulg) < 0) { + strncpy(oldest_ulg, result->d_name, sizeof(oldest_ulg) - 1); + oldest_ulg[sizeof(oldest_ulg) - 1] = '\0'; } } } closedir(dp); - sess_dir_index = sess_idx_max + 1; + if (oldest_ulg[0] == '\0') { + // No .ulg files, try to remove directory + if (remove_directory(oldest_dir) == 0) { + PX4_INFO("removed directory %s (no .ulg files)", oldest_dir); + empty_dir_failures = 0; + } else { + // Removal failed (littlefs may report "not empty" for empty dirs) + // Toggle have_time to try the other naming scheme next iteration + empty_dir_failures++; - uint64_t min_free_bytes = 300ULL * 1024ULL * 1024ULL; - uint64_t total_bytes = (uint64_t)statfs_buf.f_blocks * statfs_buf.f_bsize; + if (empty_dir_failures >= 3) { + PX4_WARN("Cannot remove empty directories, giving up"); + break; + } - if (total_bytes / 10 < min_free_bytes) { // reduce the minimum if it's larger than 10% of the disk size - min_free_bytes = total_bytes / 10; + have_time = !have_time; + PX4_DEBUG("Cannot remove %s, trying other scheme", oldest_dir); + } + + continue; } - if (num_sess + num_dates <= max_log_dirs_to_keep && - statfs_buf.f_bavail >= (px4_statfs_buf_f_bavail_t)(min_free_bytes / statfs_buf.f_bsize)) { - break; // enough free space and limit not reached - } + // Build full path and delete the file + snprintf(oldest_file, sizeof(oldest_file), "%s/%s", oldest_dir, oldest_ulg); + PX4_INFO("removing old log %s/%s", oldest_dir, oldest_ulg); - if (num_sess == 0 && num_dates == 0) { - break; // nothing to delete - } - - char directory_to_delete[LOG_DIR_LEN]; - int n; - - if (num_sess >= num_dates) { - n = snprintf(directory_to_delete, sizeof(directory_to_delete), "%s/sess%03u", log_root_dir, sess_idx_min); - - } else { - n = snprintf(directory_to_delete, sizeof(directory_to_delete), "%s/%04u-%02u-%02u", log_root_dir, year_min, month_min, - day_min); - } - - if (n >= (int)sizeof(directory_to_delete)) { - PX4_ERR("log path too long (%i)", n); + if (unlink(oldest_file) != 0) { + PX4_ERR("Failed to delete %s (errno %d)", oldest_file, errno); break; } - PX4_INFO("removing log directory %s to get more space (left=%u MiB)", directory_to_delete, - (unsigned int)(statfs_buf.f_bavail * statfs_buf.f_bsize / 1024U / 1024U)); - - if (remove_directory(directory_to_delete)) { - PX4_ERR("Failed to delete directory"); + // Re-check conditions + if (!get_free_space(log_root_dir, &avail_bytes, nullptr)) { break; } - } while (true); + need_space_cleanup = avail_bytes < cleanup_threshold; + need_count_cleanup = (max_dirs_to_keep > 0) && (total_dirs > max_dirs_to_keep); + } - - /* use a threshold of 50 MiB: if below, do not start logging */ - if (statfs_buf.f_bavail < (px4_statfs_buf_f_bavail_t)(50 * 1024 * 1024 / statfs_buf.f_bsize)) { - mavlink_log_critical(&mavlink_log_pub, - "[logger] Not logging; SD almost full: %u MiB\t", - (unsigned int)(statfs_buf.f_bavail * statfs_buf.f_bsize / 1024U / 1024U)); + // Final check: if still not enough space, refuse to log + if (avail_bytes < 1ULL * 1024ULL * 1024ULL) { // Less than 1 MiB is critical + mavlink_log_critical(&mavlink_log_pub, "[logger] Storage full: %u MiB free\t", + (unsigned)(avail_bytes / 1024U / 1024U)); /* EVENT - * @description Either manually free up some space, or enable automatic log rotation - * via SDLOG_DIRS_MAX. + * @description Free up space manually, or lower SDLOG_ROTATE + * (maximum disk usage percentage) so more headroom is kept free during writing. */ events::send(events::ID("logger_storage_full"), events::Log::Error, - "Not logging, storage is almost full: {1} MiB", (uint32_t)(statfs_buf.f_bavail * statfs_buf.f_bsize / 1024U / 1024U)); + "Storage full: {1} MiB free", (uint32_t)(avail_bytes / 1024U / 1024U)); return 1; } diff --git a/src/modules/logger/util.h b/src/modules/logger/util.h index f2939b0794..573a23813c 100644 --- a/src/modules/logger/util.h +++ b/src/modules/logger/util.h @@ -34,6 +34,7 @@ #pragma once #include +#include #include #include @@ -44,6 +45,9 @@ #define LOG_DIR_LEN 256 #endif +// Include parsing utilities (separate file for testability) +#include "util_parse.h" + namespace px4 { namespace logger @@ -63,25 +67,53 @@ int remove_directory(const char *dir); bool file_exist(const char *filename); /** - * Check if there is enough free space left on the SD Card. - * It will remove old log files if there is not enough space, - * and if that fails return 1, and send a user message - * @param log_root_dir log root directory: it's expected to contain directories in the form of sess%i or %d-%d-%d (year, month, day) - * @param max_log_dirs_to_keep maximum log directories to keep (set to 0 for unlimited) - * @param mavlink_log_pub - * @param sess_dir_index output argument: will be set to the next free directory sess%i index. - * @return 0 on success, 1 if not enough space, <0 on error + * Get available and total storage space for a path. + * @param path path to check + * @param avail_bytes available bytes (output), can be nullptr if not needed + * @param total_bytes total bytes (output), can be nullptr if not needed + * @return true on success, false on error */ -int check_free_space(const char *log_root_dir, int32_t max_log_dirs_to_keep, orb_advert_t &mavlink_log_pub, - int &sess_dir_index); - +bool get_free_space(const char *path, uint64_t *avail_bytes, uint64_t *total_bytes); /** - * Utility for fetching UTC time in microseconds from sensor_gps or CLOCK_REALTIME + * Scan log directory and gather information about subdirectories. + * @param log_root_dir log root directory to scan + * @param info output: populated with directory information + * @return true on success, false if directory cannot be opened + */ +bool scan_log_directories(const char *log_root_dir, LogDirInfo &info); + +/** + * Cleanup old logs to ensure sufficient free space. Deletes oldest files, + * preferring the opposite directory type first (sess dirs when time is known, + * date dirs when it is not), then falls back to its own type. + * + * After cleanup there is enough free space to write one more full log file + * while still maintaining the rotate_pct usage guarantee. + * + * If max_dirs_to_keep > 0, also deletes oldest directories (regardless of + * free space) to keep the directory count at or below that value. + * + * @param log_root_dir log root directory + * @param mavlink_log_pub mavlink log publisher + * @param rotate_pct maximum disk usage percentage (0 disables space-based + * cleanup; 90 keeps at least 10% free during writing) + * @param max_file_size_mib maximum log file size in MiB; reserved as headroom + * for the next log file write + * @param max_dirs_to_keep maximum number of log directories to keep (0 to + * disable count-based cleanup) + * @return 0 on success, 1 if not enough space even after cleanup + */ +int cleanup_old_logs(const char *log_root_dir, orb_advert_t &mavlink_log_pub, + uint32_t rotate_pct, uint32_t max_file_size_mib, + int32_t max_dirs_to_keep); + +/** + * Get UTC time in microseconds from CLOCK_REALTIME * @param utc_time_usec returned microseconds * @param utc_offset_sec UTC time offset [s] * @param boot_time use time when booted instead of current time - * @return true on success, false otherwise (eg. if no gps) + * @return true on success, false if system time is not set */ bool get_log_time(uint64_t &utc_time_usec, int utc_offset_sec, bool boot_time); @@ -90,7 +122,7 @@ bool get_log_time(uint64_t &utc_time_usec, int utc_offset_sec, bool boot_time); * @param tt returned time * @param utc_offset_sec UTC time offset [s] * @param boot_time use time when booted instead of current time - * @return true on success, false otherwise (eg. if no gps) + * @return true on success, false if system time is not set */ bool get_log_time(struct tm *tt, int utc_offset_sec = 0, bool boot_time = false); diff --git a/boards/cuav/x25-evo/core_heater/core_heater_params.c b/src/modules/logger/util_parse.cpp similarity index 60% rename from boards/cuav/x25-evo/core_heater/core_heater_params.c rename to src/modules/logger/util_parse.cpp index a19eb6d016..f5298c102a 100644 --- a/boards/cuav/x25-evo/core_heater/core_heater_params.c +++ b/src/modules/logger/util_parse.cpp @@ -31,64 +31,60 @@ * ****************************************************************************/ -/** - * @file core_heater_params.c - * Core Heater parameters. - * - */ +#include "util_parse.h" +#include -/** - * Target IMU device ID to regulate temperature. - * - * @category system - * @group Sensors - */ -PARAM_DEFINE_INT32(CORE_TEMP_ID, 0); +namespace px4 +{ +namespace logger +{ +namespace util +{ -/** - * Target IMU temperature. - * - * @category system - * @group Sensors - * @unit celcius - * @min 0 - * @max 85.0 - * @decimal 3 - */ -PARAM_DEFINE_FLOAT(CORE_IMU_TEMP, 55.0f); +bool parse_sess_dir_name(const char *name, int &sess_idx) +{ + return sscanf(name, "sess%d", &sess_idx) == 1; +} -/** - * IMU heater controller feedforward value. - * - * @category system - * @group Sensors - * @unit % - * @min 0 - * @max 1.0 - * @decimal 3 - */ -PARAM_DEFINE_FLOAT(CORE_IMU_TEMP_FF, 0.05f); +bool parse_date_dir_name(const char *name, int &year, int &month, int &day) +{ + return sscanf(name, "%d-%d-%d", &year, &month, &day) == 3; +} -/** - * IMU heater controller integrator gain value. - * - * @category system - * @group Sensors - * @unit us/C - * @min 0 - * @max 1.0 - * @decimal 3 - */ -PARAM_DEFINE_FLOAT(CORE_IMU_TEMP_I, 0.025f); +bool is_date_older(int y1, int m1, int d1, int y2, int m2, int d2) +{ + return y1 < y2 || + (y1 == y2 && m1 < m2) || + (y1 == y2 && m1 == m2 && d1 < d2); +} -/** - * IMU heater controller proportional gain value. - * - * @category system - * @group Sensors - * @unit us/C - * @min 0 - * @max 2.0 - * @decimal 3 - */ -PARAM_DEFINE_FLOAT(CORE_IMU_TEMP_P, 1.0f); +void process_dir_entry(const char *name, LogDirInfo &info) +{ + int sess_idx; + int year, month, day; + + if (parse_sess_dir_name(name, sess_idx)) { + info.num_sess++; + + if (sess_idx > info.sess_idx_max) { + info.sess_idx_max = sess_idx; + } + + if (sess_idx < info.sess_idx_min) { + info.sess_idx_min = sess_idx; + } + + } else if (parse_date_dir_name(name, year, month, day)) { + info.num_dates++; + + if (is_date_older(year, month, day, info.oldest_year, info.oldest_month, info.oldest_day)) { + info.oldest_year = year; + info.oldest_month = month; + info.oldest_day = day; + } + } +} + +} //namespace util +} //namespace logger +} //namespace px4 diff --git a/src/modules/mc_nn_control/mc_nn_control_params.c b/src/modules/logger/util_parse.h similarity index 50% rename from src/modules/mc_nn_control/mc_nn_control_params.c rename to src/modules/logger/util_parse.h index e0f3a6b8cf..ff539f96bb 100644 --- a/src/modules/mc_nn_control/mc_nn_control_params.c +++ b/src/modules/logger/util_parse.h @@ -31,53 +31,62 @@ * ****************************************************************************/ -/** - * @file mc_nn_control_params.c - * Parameters for the Multicopter Neural Network Control module - * - * @author Sindre Meyer Hegre - */ +#pragma once + +#include + +namespace px4 +{ +namespace logger +{ +namespace util +{ /** - * If true the neural network control is automatically started on boot. - * - * @boolean - * @group Neural Control + * Information about log directories gathered by scan_log_directories() */ -PARAM_DEFINE_INT32(MC_NN_EN, 1); +struct LogDirInfo { + int sess_idx_max{-1}; ///< highest sess index found (-1 if none) + int sess_idx_min{INT_MAX}; ///< lowest sess index found + int num_sess{0}; ///< count of sess directories + int oldest_year{INT_MAX}; ///< oldest date directory year + int oldest_month{INT_MAX}; ///< oldest date directory month + int oldest_day{INT_MAX}; ///< oldest date directory day + int num_dates{0}; ///< count of date directories +}; /** - * The maximum RPM of the motors. Used to normalize the output of the neural network. - * - * @min 0 - * @max 80000 - * @group Neural Control + * Process a single directory entry and update LogDirInfo accordingly. + * Tries to parse as session dir first, then as date dir. + * @param name directory entry name to process + * @param info LogDirInfo struct to update */ -PARAM_DEFINE_INT32(MC_NN_MAX_RPM, 22000); +void process_dir_entry(const char *name, LogDirInfo &info); /** - * The minimum RPM of the motors. Used to normalize the output of the neural network. - * - * @min 0 - * @max 80000 - * @group Neural Control + * Parse a session directory name (e.g., "sess001", "sess123") + * @param name directory name to parse + * @param sess_idx output: session index if parsing succeeds + * @return true if name matches "sess%d" pattern */ -PARAM_DEFINE_INT32(MC_NN_MIN_RPM, 1000); +bool parse_sess_dir_name(const char *name, int &sess_idx); /** - * Thrust coefficient of the motors. Used to normalize the output of the neural network. Divided by 100 000 - * - * @min 0.0 - * @max 5.0 - * @group Neural Control + * Parse a date directory name (e.g., "2024-01-15") + * @param name directory name to parse + * @param year output: year if parsing succeeds + * @param month output: month if parsing succeeds + * @param day output: day if parsing succeeds + * @return true if name matches "%d-%d-%d" pattern */ -PARAM_DEFINE_FLOAT(MC_NN_THRST_COEF, 1.2f); +bool parse_date_dir_name(const char *name, int &year, int &month, int &day); /** - * Enable or disable setting the trajectory setpoint with manual control. - * - * @boolean - * @reboot_required true - * @group Neural Control + * Compare two dates + * @return true if (y1,m1,d1) < (y2,m2,d2) */ -PARAM_DEFINE_INT32(MC_NN_MANL_CTRL, 1); +bool is_date_older(int y1, int m1, int d1, int y2, int m2, int d2); + +} //namespace util +} //namespace logger +} //namespace px4 diff --git a/src/modules/mag_bias_estimator/CMakeLists.txt b/src/modules/mag_bias_estimator/CMakeLists.txt index d52a439d3c..3259cc434e 100644 --- a/src/modules/mag_bias_estimator/CMakeLists.txt +++ b/src/modules/mag_bias_estimator/CMakeLists.txt @@ -38,6 +38,8 @@ px4_add_module( SRCS MagBiasEstimator.cpp MagBiasEstimator.hpp + MODULE_CONFIG + params.yaml DEPENDS px4_work_queue ) diff --git a/src/modules/mag_bias_estimator/params.c b/src/modules/mag_bias_estimator/params.c deleted file mode 100644 index 8fb3e7bca3..0000000000 --- a/src/modules/mag_bias_estimator/params.c +++ /dev/null @@ -1,58 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2021 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Enable online mag bias calibration - * - * This enables continuous calibration of the magnetometers - * before takeoff using gyro data. - * - * @boolean - * @reboot_required true - * @group Magnetometer Bias Estimator - */ -PARAM_DEFINE_INT32(MBE_ENABLE, 1); - -/** - * Mag bias estimator learning gain - * - * Increase to make the estimator more responsive - * Decrease to make the estimator more robust to noise - * - * @min 0.1 - * @max 100 - * @increment 0.1 - * @decimal 1 - * @group Magnetometer Bias Estimator - */ -PARAM_DEFINE_FLOAT(MBE_LEARN_GAIN, 18.f); diff --git a/src/modules/mag_bias_estimator/params.yaml b/src/modules/mag_bias_estimator/params.yaml new file mode 100644 index 0000000000..ca26245f56 --- /dev/null +++ b/src/modules/mag_bias_estimator/params.yaml @@ -0,0 +1,25 @@ +module_name: mag_bias_estimator +parameters: +- group: Magnetometer Bias Estimator + definitions: + MBE_ENABLE: + description: + short: Enable online mag bias calibration + long: |- + This enables continuous calibration of the magnetometers + before takeoff using gyro data. + type: boolean + default: 1 + reboot_required: true + MBE_LEARN_GAIN: + description: + short: Mag bias estimator learning gain + long: |- + Increase to make the estimator more responsive + Decrease to make the estimator more robust to noise + type: float + default: 18.0 + min: 0.1 + max: 100 + increment: 0.1 + decimal: 1 diff --git a/src/modules/manual_control/CMakeLists.txt b/src/modules/manual_control/CMakeLists.txt index 279d9e8993..d51a711421 100644 --- a/src/modules/manual_control/CMakeLists.txt +++ b/src/modules/manual_control/CMakeLists.txt @@ -41,6 +41,8 @@ px4_add_module( ManualControl.hpp ManualControlSelector.hpp ManualControlSelector.cpp + MODULE_CONFIG + manual_control_params.yaml DEPENDS hysteresis px4_work_queue diff --git a/src/modules/manual_control/manual_control_params.c b/src/modules/manual_control/manual_control_params.c deleted file mode 100644 index 30bfa35b4c..0000000000 --- a/src/modules/manual_control/manual_control_params.c +++ /dev/null @@ -1,77 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2021 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Enable arm/disarm stick gesture - * - * This determines if moving the left stick to the lower right - * arms and to the lower left disarms the vehicle. - * - * @boolean - * @group Manual Control - */ -PARAM_DEFINE_INT32(MAN_ARM_GESTURE, 1); - -/** - * Trigger time for kill stick gesture - * - * The timeout for holding the left stick to the lower left - * and the right stick to the lower right at the same time until the gesture - * kills the actuators one-way. - * - * A negative value disables the feature. - * - * @group Manual Control - * @unit s - * @decimal 2 - * @min -1 - * @max 15 - */ -PARAM_DEFINE_FLOAT(MAN_KILL_GEST_T, -1.f); - -/** - * Deadzone for sticks (only specific use cases) - * - * Range around stick center ignored to prevent - * vehicle drift from stick hardware inaccuracy. - * - * Does not apply to any precise constant input like - * throttle and attitude or rate piloting. - * - * @min 0 - * @max 1 - * @decimal 2 - * @increment 0.01 - * @group Manual Control - */ -PARAM_DEFINE_FLOAT(MAN_DEADZONE, 0.1f); diff --git a/src/modules/manual_control/manual_control_params.yaml b/src/modules/manual_control/manual_control_params.yaml new file mode 100644 index 0000000000..4885788268 --- /dev/null +++ b/src/modules/manual_control/manual_control_params.yaml @@ -0,0 +1,42 @@ +module_name: manual_control +parameters: +- group: Manual Control + definitions: + MAN_ARM_GESTURE: + description: + short: Enable arm/disarm stick gesture + long: |- + This determines if moving the left stick to the lower right + arms and to the lower left disarms the vehicle. + type: boolean + default: 1 + MAN_KILL_GEST_T: + description: + short: Trigger time for kill stick gesture + long: |- + The timeout for holding the left stick to the lower left + and the right stick to the lower right at the same time until the gesture + kills the actuators one-way. + + A negative value disables the feature. + type: float + default: -1.0 + unit: s + decimal: 2 + min: -1 + max: 15 + MAN_DEADZONE: + description: + short: Deadzone for sticks (only specific use cases) + long: |- + Range around stick center ignored to prevent + vehicle drift from stick hardware inaccuracy. + + Does not apply to any precise constant input like + throttle and attitude or rate piloting. + type: float + default: 0.1 + min: 0 + max: 1 + decimal: 2 + increment: 0.01 diff --git a/src/modules/mavlink/CMakeLists.txt b/src/modules/mavlink/CMakeLists.txt index 4701863c07..9c2540686d 100644 --- a/src/modules/mavlink/CMakeLists.txt +++ b/src/modules/mavlink/CMakeLists.txt @@ -120,11 +120,13 @@ px4_add_module( mavlink_stream.cpp mavlink_timesync.cpp mavlink_ulog.cpp + mavlink_sign_control.cpp MavlinkStatustextHandler.cpp open_drone_id_translations.cpp tune_publisher.cpp MODULE_CONFIG module.yaml + mavlink_params.yaml DEPENDS adsb airspeed @@ -144,10 +146,6 @@ px4_add_module( UNITY_BUILD ) -if(PX4_TESTING) - add_subdirectory(mavlink_tests) -endif() - px4_add_unit_gtest(SRC MavlinkStatustextHandlerTest.cpp INCLUDES ${MAVLINK_LIBRARY_DIR} diff --git a/src/modules/mavlink/mavlink b/src/modules/mavlink/mavlink index 1ba67b3c9c..3d6f08ec73 160000 --- a/src/modules/mavlink/mavlink +++ b/src/modules/mavlink/mavlink @@ -1 +1 @@ -Subproject commit 1ba67b3c9c46f56a644e6f4e8a4c359172ed14bc +Subproject commit 3d6f08ec738743a4de38ec41b0956197c0b2f184 diff --git a/src/modules/mavlink/mavlink_bridge_header.h b/src/modules/mavlink/mavlink_bridge_header.h index 2104cfc9b0..21360cd23a 100644 --- a/src/modules/mavlink/mavlink_bridge_header.h +++ b/src/modules/mavlink/mavlink_bridge_header.h @@ -93,9 +93,7 @@ extern mavlink_status_t *mavlink_get_channel_status(uint8_t chan); extern mavlink_message_t *mavlink_get_channel_buffer(uint8_t chan); #include -#if !MAVLINK_FTP_UNIT_TEST #include -#endif __END_DECLS diff --git a/src/modules/mavlink/mavlink_command_sender.cpp b/src/modules/mavlink/mavlink_command_sender.cpp index 4ce6a078e3..f32448cff5 100644 --- a/src/modules/mavlink/mavlink_command_sender.cpp +++ b/src/modules/mavlink/mavlink_command_sender.cpp @@ -52,11 +52,19 @@ void MavlinkCommandSender::initialize() if (_instance == nullptr) { _instance = new MavlinkCommandSender(); + + if (_instance == nullptr) { + PX4_ERR("MavlinkCommandSender alloc failed"); + } } } MavlinkCommandSender &MavlinkCommandSender::instance() { + if (_instance == nullptr) { + initialize(); + } + return *_instance; } diff --git a/src/modules/mavlink/mavlink_ftp.cpp b/src/modules/mavlink/mavlink_ftp.cpp index f811eb82f0..b97cc199ef 100644 --- a/src/modules/mavlink/mavlink_ftp.cpp +++ b/src/modules/mavlink/mavlink_ftp.cpp @@ -43,8 +43,6 @@ #include #include "mavlink_ftp.h" -#include "mavlink_tests/mavlink_ftp_test.h" - #include "mavlink_main.h" using namespace time_literals; @@ -75,49 +73,22 @@ MavlinkFTP::get_size() } } -#ifdef MAVLINK_FTP_UNIT_TEST -void -MavlinkFTP::set_unittest_worker(ReceiveMessageFunc_t rcvMsgFunc, void *worker_data) -{ - _utRcvMsgFunc = rcvMsgFunc; - _worker_data = worker_data; -} -#endif - uint8_t MavlinkFTP::_getServerSystemId() { -#ifdef MAVLINK_FTP_UNIT_TEST - // We use fake ids when unit testing - return MavlinkFtpTest::serverSystemId; -#else - // Not unit testing, use the real thing return _mavlink.get_system_id(); -#endif } uint8_t MavlinkFTP::_getServerComponentId() { -#ifdef MAVLINK_FTP_UNIT_TEST - // We use fake ids when unit testing - return MavlinkFtpTest::serverComponentId; -#else - // Not unit testing, use the real thing return _mavlink.get_component_id(); -#endif } uint8_t MavlinkFTP::_getServerChannel() { -#ifdef MAVLINK_FTP_UNIT_TEST - // We use fake ids when unit testing - return MavlinkFtpTest::serverChannel; -#else - // Not unit testing, use the real thing return _mavlink.get_channel(); -#endif } void @@ -170,14 +141,12 @@ MavlinkFTP::_process_request( mavlink_file_transfer_protocol_t *last_reply = reinterpret_cast(_last_reply); PayloadHeader *last_payload = reinterpret_cast(&last_reply->payload[0]); - if (payload->seq_number + 1 == last_payload->seq_number) { + if (payload->seq_number + 1 == last_payload->seq_number + && last_reply->target_system == target_system_id + && last_reply->target_component == target_comp_id) { // this is the same request as the one we replied to last. It means the (n)ack got lost, and the GCS // resent the request -#ifdef MAVLINK_FTP_UNIT_TEST - _utRcvMsgFunc(last_reply, _worker_data); -#else mavlink_msg_file_transfer_protocol_send_struct(_mavlink.get_channel(), last_reply); -#endif return; } } @@ -332,12 +301,7 @@ MavlinkFTP::_reply(mavlink_file_transfer_protocol_t *ftp_req) PX4_DEBUG("FTP: %s seq_number: %" PRIu16, payload->opcode == kRspAck ? "Ack" : "Nak", payload->seq_number); -#ifdef MAVLINK_FTP_UNIT_TEST - // Unit test hook is set, call that instead - _utRcvMsgFunc(ftp_req, _worker_data); -#else mavlink_msg_file_transfer_protocol_send_struct(_mavlink.get_channel(), ftp_req); -#endif } void MavlinkFTP::_constructPath(char *dst, int dst_len, const char *path) const @@ -362,6 +326,10 @@ MavlinkFTP::_workList(PayloadHeader *payload) { _constructPath(_work_buffer1, _work_buffer1_len, _data_as_cstring(payload)); + if (!_validatePath(_work_buffer1)) { + return kErrFailFileProtected; + } + ErrorCode errorCode = kErrNone; unsigned offset = 0; @@ -510,6 +478,10 @@ MavlinkFTP::_workOpen(PayloadHeader *payload, int oflag) _constructPath(_work_buffer1, _work_buffer1_len, _data_as_cstring(payload)); + if (!_validatePath(_work_buffer1)) { + return kErrFailFileProtected; + } + PX4_DEBUG("FTP: open '%s'", _work_buffer1); uint32_t fileSize = 0; @@ -594,7 +566,7 @@ MavlinkFTP::_workRead(PayloadHeader *payload) MavlinkFTP::ErrorCode MavlinkFTP::_workBurst(PayloadHeader *payload, uint8_t target_system_id, uint8_t target_component_id) { - if (payload->session != 0 && _session_info.fd < 0) { + if (payload->session != 0 || _session_info.fd < 0) { PX4_DEBUG("_workBurst: no session or no fd"); return kErrInvalidSession; } @@ -615,7 +587,7 @@ MavlinkFTP::_workBurst(PayloadHeader *payload, uint8_t target_system_id, uint8_t MavlinkFTP::ErrorCode MavlinkFTP::_workWrite(PayloadHeader *payload) { - if (payload->session != 0 && _session_info.fd < 0) { + if (payload->session != 0 || _session_info.fd < 0) { PX4_DEBUG("_workWrite: no session or no fd"); return kErrInvalidSession; } @@ -652,7 +624,7 @@ MavlinkFTP::_workRemoveFile(PayloadHeader *payload) { _constructPath(_work_buffer1, _work_buffer1_len, _data_as_cstring(payload)); - if (!_validatePathIsWritable(_work_buffer1)) { + if (!_validatePath(_work_buffer1) || !_validatePathIsWritable(_work_buffer1)) { return kErrFailFileProtected; } @@ -676,7 +648,7 @@ MavlinkFTP::_workTruncateFile(PayloadHeader *payload) _constructPath(_work_buffer1, _work_buffer1_len, _data_as_cstring(payload)); payload->size = 0; - if (!_validatePathIsWritable(_work_buffer1)) { + if (!_validatePath(_work_buffer1) || !_validatePathIsWritable(_work_buffer1)) { return kErrFailFileProtected; } @@ -837,7 +809,7 @@ MavlinkFTP::_workRename(PayloadHeader *payload) _constructPath(_work_buffer1, _work_buffer1_len, ptr); _constructPath(_work_buffer2, _work_buffer2_len, ptr + oldpath_sz + 1); - if (!_validatePathIsWritable(_work_buffer2)) { + if (!_validatePath(_work_buffer1) || !_validatePath(_work_buffer2) || !_validatePathIsWritable(_work_buffer2)) { return kErrFailFileProtected; } @@ -860,7 +832,7 @@ MavlinkFTP::_workRemoveDirectory(PayloadHeader *payload) { _constructPath(_work_buffer1, _work_buffer1_len, _data_as_cstring(payload)); - if (!_validatePathIsWritable(_work_buffer1)) { + if (!_validatePath(_work_buffer1) || !_validatePathIsWritable(_work_buffer1)) { return kErrFailFileProtected; } @@ -883,7 +855,7 @@ MavlinkFTP::_workCreateDirectory(PayloadHeader *payload) { _constructPath(_work_buffer1, _work_buffer1_len, _data_as_cstring(payload)); - if (!_validatePathIsWritable(_work_buffer1)) { + if (!_validatePath(_work_buffer1) || !_validatePathIsWritable(_work_buffer1)) { return kErrFailFileProtected; } @@ -908,6 +880,10 @@ MavlinkFTP::_workCalcFileCRC32(PayloadHeader *payload) ssize_t bytes_read; _constructPath(_work_buffer2, _work_buffer2_len, _data_as_cstring(payload)); + if (!_validatePath(_work_buffer2)) { + return kErrFailFileProtected; + } + int fd = ::open(_work_buffer2, O_RDONLY); if (fd < 0) { @@ -1043,7 +1019,6 @@ void MavlinkFTP::send() return; } -#ifndef MAVLINK_FTP_UNIT_TEST // Skip send if not enough room unsigned max_bytes_to_send = _mavlink.get_free_tx_buf(); PX4_DEBUG("MavlinkFTP::send max_bytes_to_send(%u) get_free_tx_buf(%u)", max_bytes_to_send, _mavlink.get_free_tx_buf()); @@ -1052,8 +1027,6 @@ void MavlinkFTP::send() return; } -#endif - // Send stream packets until buffer is full bool more_data; @@ -1117,8 +1090,6 @@ void MavlinkFTP::send() _session_info.stream_download = false; } else { -#ifndef MAVLINK_FTP_UNIT_TEST - if (max_bytes_to_send < (get_size() * 2)) { more_data = false; @@ -1130,14 +1101,10 @@ void MavlinkFTP::send() } } else { -#endif more_data = true; payload->burst_complete = false; -#ifndef MAVLINK_FTP_UNIT_TEST max_bytes_to_send -= get_size(); } - -#endif } ftp_msg.target_system = _session_info.stream_target_system_id; @@ -1147,6 +1114,36 @@ void MavlinkFTP::send() } while (more_data); } +/** + * Reject paths containing ".." components to prevent directory traversal + * outside of _root_dir. Walks the path checking each component between + * '/' separators. A component of exactly ".." (followed by '/' or end + * of string) is rejected. + * + * Examples: + * "/fs/microsd/logs" -> allowed + * "/fs/microsd/../etc" -> rejected + * "../../tmp/pwned" -> rejected + * "/fs/microsd/logs/.." -> rejected + * "/fs/microsd/..hidden" -> allowed (not a ".." component) + */ +bool MavlinkFTP::_validatePath(const char *path) +{ + const char *p = path; + + while (*p != '\0') { + if ((p == path || *(p - 1) == '/') && p[0] == '.' && p[1] == '.' + && (p[2] == '/' || p[2] == '\0')) { + PX4_ERR("FTP: rejecting path traversal in %s", path); + return false; + } + + p++; + } + + return true; +} + bool MavlinkFTP::_validatePathIsWritable(const char *path) { #ifdef __PX4_NUTTX diff --git a/src/modules/mavlink/mavlink_ftp.h b/src/modules/mavlink/mavlink_ftp.h index d5b9ce2946..344a61997f 100644 --- a/src/modules/mavlink/mavlink_ftp.h +++ b/src/modules/mavlink/mavlink_ftp.h @@ -45,7 +45,6 @@ #include "mavlink_bridge_header.h" -class MavlinkFtpTest; class Mavlink; /// MAVLink remote file server. Support FTP like commands using MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL message. @@ -64,13 +63,6 @@ public: /// Handle possible FTP message void handle_message(const mavlink_message_t *msg); - typedef void (*ReceiveMessageFunc_t)(const mavlink_file_transfer_protocol_t *ftp_req, void *worker_data); - - /// @brief Sets up the server to run in unit test mode. - /// @param rcvmsgFunc Function which will be called to handle outgoing mavlink messages. - /// @param worker_data Data to pass to worker - void set_unittest_worker(ReceiveMessageFunc_t rcvMsgFunc, void *worker_data); - /// @brief This is the payload which is in mavlink_file_transfer_protocol_t.payload. /// This needs to be packed, because it's typecasted from mavlink_file_transfer_protocol_t.payload, which starts /// at a 3 byte offset, causing an unaligned access to seq_number and offset @@ -156,6 +148,7 @@ private: */ void _constructPath(char *dst, int dst_len, const char *path) const; + bool _validatePath(const char *path); bool _validatePathIsWritable(const char *path); /** @@ -183,9 +176,6 @@ private: }; struct SessionInfo _session_info {}; ///< Session info, fd=-1 for no active session - ReceiveMessageFunc_t _utRcvMsgFunc{}; ///< Unit test override for mavlink message sending - void *_worker_data{nullptr}; ///< Additional parameter to _utRcvMsgFunc; - Mavlink &_mavlink; /* do not allow copying this class */ @@ -200,20 +190,13 @@ private: hrt_abstime _last_work_buffer_access{0}; ///< timestamp when the buffers were last accessed // prepend a root directory to each file/dir access to avoid enumerating the full FS tree (e.g. on Linux). - // Note that requests can still fall outside of the root dir by using ../.. -#ifdef MAVLINK_FTP_UNIT_TEST - static constexpr const char _root_dir[] = ""; -#else + // Path traversal via ".." is rejected by _validatePath(). static constexpr const char _root_dir[] = PX4_ROOTFSDIR; -#endif static constexpr const int _root_dir_len = sizeof(_root_dir) - 1; bool _last_reply_valid = false; uint8_t _last_reply[MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL_LEN - MAVLINK_MSG_FILE_TRANSFER_PROTOCOL_FIELD_PAYLOAD_LEN + sizeof(PayloadHeader) + sizeof(uint32_t)]; - // Mavlink test needs to be able to call send - friend class MavlinkFtpTest; - int _our_errno {0}; }; diff --git a/src/modules/mavlink/mavlink_log_handler.cpp b/src/modules/mavlink/mavlink_log_handler.cpp index 1afa32382b..a907f76bd1 100644 --- a/src/modules/mavlink/mavlink_log_handler.cpp +++ b/src/modules/mavlink/mavlink_log_handler.cpp @@ -36,24 +36,14 @@ #include #include +static_assert(PX4_MAX_FILEPATH_SCANF < PX4_MAX_FILEPATH, + "sscanf width specifier must be less than filepath buffer size"); + static constexpr int MAX_BYTES_BURST = 256 * 1024; static const char *kLogListFilePath = PX4_STORAGEDIR "/logdata.txt"; static const char *kLogListFilePathTemp = PX4_STORAGEDIR "/$log$.txt"; static const char *kLogDir = PX4_STORAGEDIR "/log"; -#ifdef __PX4_NUTTX -#define PX4LOG_REGULAR_FILE DTYPE_FILE -#define PX4LOG_DIRECTORY DTYPE_DIRECTORY -#define PX4_MAX_FILEPATH CONFIG_PATH_MAX -#else -#ifndef PATH_MAX -#define PATH_MAX 1024 // maximum on macOS -#endif -#define PX4LOG_REGULAR_FILE DT_REG -#define PX4LOG_DIRECTORY DT_DIR -#define PX4_MAX_FILEPATH PATH_MAX -#endif - MavlinkLogHandler::MavlinkLogHandler(Mavlink &mavlink) : _mavlink(mavlink) {} @@ -171,10 +161,9 @@ void MavlinkLogHandler::state_listing() // We can send! uint32_t size_bytes = 0; uint32_t time_utc = 0; - char filepath[PX4_MAX_FILEPATH]; - // If parsed lined successfully, send the entry - if (sscanf(line, "%" PRIu32 " %" PRIu32 " %s", &time_utc, &size_bytes, filepath) != 3) { + // If parsed line successfully, send the entry (filepath is not needed here) + if (sscanf(line, "%" PRIu32 " %" PRIu32 " %*s", &time_utc, &size_bytes) != 2) { PX4_DEBUG("sscanf failed"); continue; } @@ -480,18 +469,10 @@ void MavlinkLogHandler::send_log_entry(uint32_t time_utc, uint32_t size_bytes) bool MavlinkLogHandler::log_entry_from_id(uint16_t log_id, LogEntry *entry) { - DIR *dp = opendir(kLogDir); - - if (!dp) { - PX4_INFO("No logs available"); - return false; - } - FILE *fp = fopen(kLogListFilePath, "r"); if (!fp) { PX4_DEBUG("Failed to open %s", kLogListFilePath); - closedir(dp); return false; } @@ -506,7 +487,8 @@ bool MavlinkLogHandler::log_entry_from_id(uint16_t log_id, LogEntry *entry) continue; } - if (sscanf(line, "%" PRIu32 " %" PRIu32 " %s", &(entry->time_utc), &(entry->size_bytes), entry->filepath) != 3) { + if (sscanf(line, "%" PRIu32 " %" PRIu32 " %" STRINGIFY(PX4_MAX_FILEPATH_SCANF) "s", &(entry->time_utc), &(entry->size_bytes), + entry->filepath) != 3) { PX4_DEBUG("sscanf failed"); continue; } @@ -517,14 +499,20 @@ bool MavlinkLogHandler::log_entry_from_id(uint16_t log_id, LogEntry *entry) } fclose(fp); - closedir(dp); return found_entry; } -void MavlinkLogHandler::delete_all_logs(const char *dir) +void MavlinkLogHandler::delete_all_logs(const char *dir, unsigned depth) { - //-- Open log directory + // Log structure is log/yyyy-mm-dd/file.ulg (2 levels). Cap recursion to prevent stack overflow. + static constexpr unsigned MAX_DEPTH = 3; + + if (depth >= MAX_DEPTH) { + PX4_DEBUG("Max depth reached: %s", dir); + return; + } + DIR *dp = opendir(dir); if (dp == nullptr) { @@ -534,34 +522,29 @@ void MavlinkLogHandler::delete_all_logs(const char *dir) struct dirent *result = nullptr; while ((result = readdir(dp))) { - // no more entries? - if (result == nullptr) { - break; + + if (strcmp(result->d_name, ".") == 0 || strcmp(result->d_name, "..") == 0) { + continue; } - if (result->d_type == PX4LOG_DIRECTORY && result->d_name[0] != '.') { - char filepath[PX4_MAX_FILEPATH]; - int ret = snprintf(filepath, sizeof(filepath), "%s/%s", dir, result->d_name); - bool path_is_ok = (ret > 0) && (ret < (int)sizeof(filepath)); + char filepath[PX4_MAX_FILEPATH]; + int ret = snprintf(filepath, sizeof(filepath), "%s/%s", dir, result->d_name); + bool path_is_ok = (ret > 0) && (ret < (int)sizeof(filepath)); - if (path_is_ok) { - delete_all_logs(filepath); + if (!path_is_ok) { + continue; + } - if (rmdir(filepath)) { - PX4_DEBUG("Error removing %s", filepath); - } + if (result->d_type == PX4LOG_DIRECTORY) { + delete_all_logs(filepath, depth + 1); + + if (rmdir(filepath)) { + PX4_DEBUG("Error removing %s", filepath); } - } - if (result->d_type == PX4LOG_REGULAR_FILE) { - char filepath[PX4_MAX_FILEPATH]; - int ret = snprintf(filepath, sizeof(filepath), "%s/%s", dir, result->d_name); - bool path_is_ok = (ret > 0) && (ret < (int)sizeof(filepath)); - - if (path_is_ok) { - if (unlink(filepath)) { - PX4_DEBUG("Error unlinking %s", filepath); - } + } else { + if (unlink(filepath)) { + PX4_DEBUG("Error unlinking %s", filepath); } } } diff --git a/src/modules/mavlink/mavlink_log_handler.h b/src/modules/mavlink/mavlink_log_handler.h index eb521a61ee..7e99b581b3 100644 --- a/src/modules/mavlink/mavlink_log_handler.h +++ b/src/modules/mavlink/mavlink_log_handler.h @@ -32,10 +32,24 @@ ****************************************************************************/ #pragma once - #include #include "mavlink_bridge_header.h" +#ifdef __PX4_NUTTX +#define PX4LOG_REGULAR_FILE DTYPE_FILE +#define PX4LOG_DIRECTORY DTYPE_DIRECTORY +#define PX4_MAX_FILEPATH CONFIG_PATH_MAX +#define PX4_MAX_FILEPATH_SCANF 255 +#else +#ifndef PATH_MAX +#define PATH_MAX 1024 // maximum on macOS +#endif +#define PX4LOG_REGULAR_FILE DT_REG +#define PX4LOG_DIRECTORY DT_DIR +#define PX4_MAX_FILEPATH PATH_MAX +#define PX4_MAX_FILEPATH_SCANF 1023 +#endif + class Mavlink; class MavlinkLogHandler @@ -53,7 +67,7 @@ private: uint32_t time_utc{}; uint32_t size_bytes{}; FILE *fp{nullptr}; - char filepath[60]; + char filepath[PX4_MAX_FILEPATH]; uint32_t offset{}; }; @@ -96,7 +110,7 @@ private: bool log_entry_from_id(uint16_t log_id, LogEntry *entry); // Log erase - void delete_all_logs(const char *dir); + void delete_all_logs(const char *dir, unsigned depth = 0); private: diff --git a/src/modules/mavlink/mavlink_main.cpp b/src/modules/mavlink/mavlink_main.cpp index 2003189297..f638099c77 100644 --- a/src/modules/mavlink/mavlink_main.cpp +++ b/src/modules/mavlink/mavlink_main.cpp @@ -1,6 +1,6 @@ /**************************************************************************** * - * Copyright (c) 2012-2023 PX4 Development Team. All rights reserved. + * Copyright (c) 2012-2026 PX4 Development Team. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -61,6 +61,10 @@ #include "mavlink_receiver.h" #include "mavlink_main.h" +#ifdef MAVLINK_UDP +#include +#endif + // Guard against MAVLink misconfiguration #ifndef MAVLINK_CRC_EXTRA #error MAVLINK_CRC_EXTRA has to be defined on PX4 systems @@ -95,6 +99,21 @@ void mavlink_end_uart_send(mavlink_channel_t chan, int length) { mavlink_module_ mavlink_status_t *mavlink_get_channel_status(uint8_t channel) { return mavlink_module_instances[channel]->get_status(); } mavlink_message_t *mavlink_get_channel_buffer(uint8_t channel) { return mavlink_module_instances[channel]->get_buffer(); } +static bool accept_unsigned_callback(const mavlink_status_t *status, uint32_t message_id) +{ + // Use link_id to index directly: the callback fires on the instance's own + // receiver thread, so no lock needed (instance can't be destroyed while running). + if (status->signing) { + Mavlink *inst = mavlink_module_instances[status->signing->link_id]; + + if (inst != nullptr) { + return inst->accept_unsigned(message_id); + } + } + + return false; +} + static void usage(); hrt_abstime Mavlink::_first_start_time = {0}; @@ -1007,6 +1026,19 @@ void Mavlink::init_udp() return; } + // Cap UDP send time to avoid blocking indefinitely if the NuttX net + // stack hasn't finished initializing the IOB write-buffer semaphore. + // 10ms is ~4x the worst-case send time measured on STM32H7. + constexpr long UDP_SEND_TIMEOUT_US = 10000; + struct timeval tv { + .tv_sec = 0, + .tv_usec = UDP_SEND_TIMEOUT_US + }; + + if (setsockopt(_socket_fd, SOL_SOCKET, SO_SNDTIMEO, &tv, sizeof(tv)) < 0) { + PX4_WARN("setting socket timeout failed: %s", strerror(errno)); + } + if (bind(_socket_fd, (struct sockaddr *)&_myaddr, sizeof(_myaddr)) < 0) { PX4_WARN("bind failed: %s", strerror(errno)); return; @@ -1029,6 +1061,52 @@ Mavlink::handle_message(const mavlink_message_t *msg) * NOTE: this is called from the receiver thread */ + // SETUP_SIGNING must never be forwarded to other links (MAVLink spec requirement). + if (msg->msgid == MAVLINK_MSG_ID_SETUP_SIGNING) { + // Reject signing changes while armed + vehicle_status_s vehicle_status{}; + + if (_vehicle_status_sub.copy(&vehicle_status) + && vehicle_status.arming_state == vehicle_status_s::ARMING_STATE_ARMED) { + send_statustext_critical("MAVLink signing: rejected while armed"); + return; + } + + MavlinkSignControl::SetupSigningResult result = _sign_control.check_for_signing(msg); + + switch (result) { + case MavlinkSignControl::KEY_ACCEPTED: + send_statustext_info("MAVLink signing key accepted"); + break; + + case MavlinkSignControl::SIGNING_DISABLED: + send_statustext_info("MAVLink signing disabled"); + break; + + case MavlinkSignControl::BLANK_KEY_REJECTED: + send_statustext_critical("MAVLink signing: blank key rejected"); + break; + + default: + break; + } + + if (result == MavlinkSignControl::KEY_ACCEPTED || result == MavlinkSignControl::SIGNING_DISABLED) { + // Signal all other instances to reload key from file on their own thread + LockGuard lg{mavlink_module_mutex}; + + for (int i = 0; i < MAVLINK_COMM_NUM_BUFFERS; i++) { + Mavlink *inst = mavlink_module_instances[i]; + + if (inst != nullptr && inst != this) { + inst->set_signing_key_dirty(); + } + } + } + + return; + } + if (get_forwarding_on()) { /* forward any messages to other mavlink instances */ Mavlink::forward_message(msg, this); @@ -1087,7 +1165,7 @@ Mavlink::send_autopilot_capabilities() param_t param_handle = param_find_no_notification("MNT_MODE_IN"); int32_t mnt_mode_in = 0; - if (mnt_mode_in != PARAM_INVALID) { + if (param_handle != PARAM_INVALID) { param_get(param_handle, &mnt_mode_in); if (mnt_mode_in == 4) { @@ -1229,6 +1307,12 @@ Mavlink::configure_stream_threadsafe(const char *stream_name, const float rate) /* copy stream name */ unsigned n = strlen(stream_name) + 1; char *s = new char[n]; + + if (s == nullptr) { + PX4_ERR("stream allocation failed"); + return; + } + strcpy(s, stream_name); /* set subscription task */ @@ -1418,7 +1502,7 @@ Mavlink::configure_streams_to_default(const char *configure_single_stream) switch (_mode) { case MAVLINK_MODE_NORMAL: - configure_stream_local("ADSB_VEHICLE", unlimited_rate); + configure_stream_local("ADSB_VEHICLE", 5.f); configure_stream_local("ALTITUDE", 1.0f); configure_stream_local("ATTITUDE", 15.0f); configure_stream_local("ATTITUDE_QUATERNION", 10.0f); @@ -1431,14 +1515,18 @@ Mavlink::configure_streams_to_default(const char *configure_single_stream) configure_stream_local("EFI_STATUS", 2.0f); configure_stream_local("ESC_INFO", 1.0f); configure_stream_local("ESC_STATUS", 1.0f); +#if defined(MAVLINK_MSG_ID_ESC_EEPROM) + configure_stream_local("ESC_EEPROM", unlimited_rate); +#endif configure_stream_local("ESTIMATOR_STATUS", 0.5f); +#if defined(MAVLINK_MSG_ID_ESTIMATOR_SENSOR_FUSION_STATUS) + configure_stream_local("ESTIMATOR_SENSOR_FUSION_STATUS", 0.5f); +#endif configure_stream_local("EXTENDED_SYS_STATE", 1.0f); configure_stream_local("GIMBAL_DEVICE_ATTITUDE_STATUS", 5.0f); configure_stream_local("GIMBAL_DEVICE_SET_ATTITUDE", 5.0f); configure_stream_local("GIMBAL_MANAGER_STATUS", 0.5f); -#if defined(MAVLINK_MSG_ID_GLOBAL_POSITION) - configure_stream_local("GLOBAL_POSITION", 5.0f); -#endif + configure_stream_local("GLOBAL_POSITION_SENSOR", 5.0f); configure_stream_local("GLOBAL_POSITION_INT", 5.0f); #if defined(MAVLINK_MSG_ID_GNSS_INTEGRITY) configure_stream_local("GNSS_INTEGRITY", 1.0f); @@ -1497,11 +1585,14 @@ Mavlink::configure_streams_to_default(const char *configure_single_stream) configure_stream_local("DISTANCE_SENSOR", 10.0f); configure_stream_local("ESC_INFO", 10.0f); configure_stream_local("ESC_STATUS", 10.0f); +#if defined(MAVLINK_MSG_ID_ESC_EEPROM) + configure_stream_local("ESC_EEPROM", unlimited_rate); +#endif configure_stream_local("MOUNT_ORIENTATION", 10.0f); configure_stream_local("OBSTACLE_DISTANCE", 10.0f); configure_stream_local("ODOMETRY", 30.0f); - configure_stream_local("ADSB_VEHICLE", unlimited_rate); + configure_stream_local("ADSB_VEHICLE", 5.f); configure_stream_local("ATTITUDE_QUATERNION", 50.0f); configure_stream_local("ATTITUDE_TARGET", 10.0f); configure_stream_local("AVAILABLE_MODES", 0.3f); @@ -1510,6 +1601,9 @@ Mavlink::configure_streams_to_default(const char *configure_single_stream) configure_stream_local("CURRENT_MODE", 0.5f); configure_stream_local("EFI_STATUS", 2.0f); configure_stream_local("ESTIMATOR_STATUS", 1.0f); +#if defined(MAVLINK_MSG_ID_ESTIMATOR_SENSOR_FUSION_STATUS) + configure_stream_local("ESTIMATOR_SENSOR_FUSION_STATUS", 1.0f); +#endif configure_stream_local("EXTENDED_SYS_STATE", 5.0f); configure_stream_local("GIMBAL_DEVICE_ATTITUDE_STATUS", 5.0f); configure_stream_local("GIMBAL_DEVICE_SET_ATTITUDE", 5.0f); @@ -1582,7 +1676,7 @@ Mavlink::configure_streams_to_default(const char *configure_single_stream) configure_stream_local("OBSTACLE_DISTANCE", 10.0f); configure_stream_local("ODOMETRY", 30.0f); - configure_stream_local("ADSB_VEHICLE", unlimited_rate); + configure_stream_local("ADSB_VEHICLE", 5.f); configure_stream_local("ATTITUDE_TARGET", 2.0f); configure_stream_local("AVAILABLE_MODES", 0.3f); configure_stream_local("BATTERY_STATUS", 0.5f); @@ -1663,7 +1757,7 @@ Mavlink::configure_streams_to_default(const char *configure_single_stream) configure_stream_local("MOUNT_ORIENTATION", 10.0f); configure_stream_local("ODOMETRY", 30.0f); - configure_stream_local("ADSB_VEHICLE", unlimited_rate); + configure_stream_local("ADSB_VEHICLE", 5.f); configure_stream_local("ALTITUDE", 10.0f); configure_stream_local("ATTITUDE", 50.0f); configure_stream_local("ATTITUDE_QUATERNION", 50.0f); @@ -1675,7 +1769,13 @@ Mavlink::configure_streams_to_default(const char *configure_single_stream) configure_stream_local("EFI_STATUS", 10.0f); configure_stream_local("ESC_INFO", 10.0f); configure_stream_local("ESC_STATUS", 10.0f); +#if defined(MAVLINK_MSG_ID_ESC_EEPROM) + configure_stream_local("ESC_EEPROM", unlimited_rate); +#endif configure_stream_local("ESTIMATOR_STATUS", 5.0f); +#if defined(MAVLINK_MSG_ID_ESTIMATOR_SENSOR_FUSION_STATUS) + configure_stream_local("ESTIMATOR_SENSOR_FUSION_STATUS", 1.0f); +#endif configure_stream_local("EXTENDED_SYS_STATE", 2.0f); configure_stream_local("GLOBAL_POSITION_INT", 10.0f); #if defined(MAVLINK_MSG_ID_GNSS_INTEGRITY) @@ -1770,8 +1870,11 @@ Mavlink::configure_streams_to_default(const char *configure_single_stream) configure_stream_local("GIMBAL_DEVICE_SET_ATTITUDE", 5.0f); configure_stream_local("ESC_INFO", 1.0f); configure_stream_local("ESC_STATUS", 5.0f); +#if defined(MAVLINK_MSG_ID_ESC_EEPROM) + configure_stream_local("ESC_EEPROM", unlimited_rate); +#endif - configure_stream_local("ADSB_VEHICLE", unlimited_rate); + configure_stream_local("ADSB_VEHICLE", 5.f); configure_stream_local("ATTITUDE_TARGET", 2.0f); configure_stream_local("AVAILABLE_MODES", 0.3f); configure_stream_local("BATTERY_STATUS", 0.5f); @@ -1779,9 +1882,7 @@ Mavlink::configure_streams_to_default(const char *configure_single_stream) configure_stream_local("CURRENT_MODE", 0.5f); configure_stream_local("ESTIMATOR_STATUS", 1.0f); configure_stream_local("EXTENDED_SYS_STATE", 1.0f); -#if defined(MAVLINK_MSG_ID_GLOBAL_POSITION) - configure_stream_local("GLOBAL_POSITION", 10.0f); -#endif + configure_stream_local("GLOBAL_POSITION_SENSOR", 10.0f); configure_stream_local("GLOBAL_POSITION_INT", 10.0f); configure_stream_local("GPS_GLOBAL_ORIGIN", 1.0f); #if defined(MAVLINK_MSG_ID_GNSS_INTEGRITY) @@ -1838,6 +1939,9 @@ Mavlink::configure_streams_to_default(const char *configure_single_stream) configure_stream_local("GIMBAL_DEVICE_SET_ATTITUDE", 2.0f); configure_stream_local("ESC_INFO", 1.0f); configure_stream_local("ESC_STATUS", 2.0f); +#if defined(MAVLINK_MSG_ID_ESC_EEPROM) + configure_stream_local("ESC_EEPROM", unlimited_rate); +#endif configure_stream_local("ADSB_VEHICLE", 1.0f); configure_stream_local("ATTITUDE_TARGET", 0.5f); configure_stream_local("AVAILABLE_MODES", 0.3f); @@ -1847,9 +1951,7 @@ Mavlink::configure_streams_to_default(const char *configure_single_stream) configure_stream_local("ESTIMATOR_STATUS", 1.0f); configure_stream_local("EXTENDED_SYS_STATE", 0.5f); configure_stream_local("GLOBAL_POSITION_INT", 2.0f); -#if defined(MAVLINK_MSG_ID_GLOBAL_POSITION) - configure_stream_local("GLOBAL_POSITION", 2.0f); -#endif + configure_stream_local("GLOBAL_POSITION_SENSOR", 2.0f); configure_stream_local("GPS_GLOBAL_ORIGIN", 1.0f); configure_stream_local("GPS2_RAW", 2.0f); configure_stream_local("GPS_RAW_INT", 2.0f); @@ -2275,6 +2377,8 @@ Mavlink::task_main(int argc, char *argv[]) return PX4_ERROR; } + _sign_control.start(get_instance_id(), get_status(), &accept_unsigned_callback); + pthread_mutex_init(&_mavlink_shell_mutex, nullptr); pthread_mutex_init(&_message_buffer_mutex, nullptr); pthread_mutex_init(&_send_mutex, nullptr); @@ -2524,7 +2628,7 @@ Mavlink::task_main(int argc, char *argv[]) _receiver.stop(); - delete _subscribe_to_stream; + delete[] _subscribe_to_stream; _subscribe_to_stream = nullptr; /* delete streams */ diff --git a/src/modules/mavlink/mavlink_main.h b/src/modules/mavlink/mavlink_main.h index cdf079f9db..82aaa715a9 100644 --- a/src/modules/mavlink/mavlink_main.h +++ b/src/modules/mavlink/mavlink_main.h @@ -1,6 +1,6 @@ /**************************************************************************** * - * Copyright (c) 2012-2023 PX4 Development Team. All rights reserved. + * Copyright (c) 2012-2026 PX4 Development Team. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -83,6 +83,7 @@ #include "mavlink_events.h" #include "mavlink_messages.h" #include "mavlink_receiver.h" +#include "mavlink_sign_control.h" #include "mavlink_shell.h" #include "mavlink_ulog.h" @@ -142,8 +143,8 @@ public: static int get_status_all_instances(bool show_streams_status); static bool serial_instance_exists(const char *device_name, Mavlink *self); - static bool component_was_seen(int system_id, int component_id, Mavlink &self); static void forward_message(const mavlink_message_t *msg, Mavlink *self); + static bool component_was_seen(int system_id, int component_id, Mavlink &self); bool check_events() const { return _should_check_events.load(); } void check_events_enable() { _should_check_events.store(true); } @@ -490,14 +491,22 @@ public: bool radio_status_critical() const { return _radio_status_critical; } + bool accept_unsigned(uint32_t message_id) { return _sign_control.accept_unsigned(message_id); } + void set_signing_key_dirty() { _signing_key_dirty.store(true); } + void check_signing_key_dirty() { if (_signing_key_dirty.load()) { _signing_key_dirty.store(false); _sign_control.reload_key(); } } + + private: MavlinkReceiver _receiver; + MavlinkSignControl _sign_control{}; + int _instance_id{-1}; int _task_id{-1}; px4::atomic_bool _task_should_exit{false}; px4::atomic_bool _task_running{false}; + px4::atomic_bool _signing_key_dirty{false}; bool _transmitting_enabled{true}; bool _transmitting_enabled_commanded{false}; diff --git a/src/modules/mavlink/mavlink_messages.cpp b/src/modules/mavlink/mavlink_messages.cpp index a68c138747..8eb1f42eea 100644 --- a/src/modules/mavlink/mavlink_messages.cpp +++ b/src/modules/mavlink/mavlink_messages.cpp @@ -70,14 +70,15 @@ #include "streams/COMPONENT_METADATA.hpp" #include "streams/DISTANCE_SENSOR.hpp" #include "streams/EFI_STATUS.hpp" +#if defined(MAVLINK_MSG_ID_ESTIMATOR_SENSOR_FUSION_STATUS) +#include "streams/ESTIMATOR_SENSOR_FUSION_STATUS.hpp" +#endif #include "streams/ESC_INFO.hpp" #include "streams/ESC_STATUS.hpp" #include "streams/ESTIMATOR_STATUS.hpp" #include "streams/EXTENDED_SYS_STATE.hpp" #include "streams/FLIGHT_INFORMATION.hpp" -#if defined(MAVLINK_MSG_ID_GLOBAL_POSITION) -#include "streams/GLOBAL_POSITION.hpp" -#endif //MAVLINK_MSG_ID_GLOBAL_POSITION +#include "streams/GLOBAL_POSITION_SENSOR.hpp" #include "streams/GLOBAL_POSITION_INT.hpp" #if defined(MAVLINK_MSG_ID_GNSS_INTEGRITY) #include "streams/GNSS_INTEGRITY.hpp" @@ -137,6 +138,10 @@ #include "streams/CURRENT_MODE.hpp" #endif +#ifdef MAVLINK_MSG_ID_ESC_EEPROM // Only defined if development.xml is used +#include "streams/ESC_EEPROM.hpp" +#endif + #if !defined(CONSTRAINED_FLASH) # include "streams/ADSB_VEHICLE.hpp" # include "streams/AUTOPILOT_STATE_FOR_GIMBAL_DEVICE.hpp" @@ -338,6 +343,9 @@ static const StreamListItem streams_list[] = { #if defined(ESTIMATOR_STATUS_HPP) create_stream_list_item(), #endif // ESTIMATOR_STATUS_HPP +#if defined(ESTIMATOR_SENSOR_FUSION_STATUS_HPP) + create_stream_list_item(), +#endif // ESTIMATOR_SENSOR_FUSION_STATUS_HPP #if defined(VIBRATION_HPP) create_stream_list_item(), #endif // VIBRATION_HPP @@ -468,6 +476,9 @@ static const StreamListItem streams_list[] = { #if defined(ESC_STATUS_HPP) create_stream_list_item(), #endif // ESC_STATUS_HPP +#if defined(ESC_EEPROM_HPP) + create_stream_list_item(), +#endif // ESC_EEPROM_HPP #if defined(AUTOPILOT_VERSION_HPP) create_stream_list_item(), #endif // AUTOPILOT_VERSION_HPP @@ -519,9 +530,9 @@ static const StreamListItem streams_list[] = { #if defined(CURRENT_MODE_HPP) create_stream_list_item(), #endif // CURRENT_MODE_HPP -#if defined(GLOBAL_POSITION_HPP) - create_stream_list_item(), -#endif // GLOBAL_POSITION_HPP +#if defined(GLOBAL_POSITION_SENSOR_HPP) + create_stream_list_item(), +#endif // GLOBAL_POSITION_SENSOR_HPP }; const char *get_stream_name(const uint16_t msg_id) diff --git a/src/modules/mavlink/mavlink_mission.cpp b/src/modules/mavlink/mavlink_mission.cpp index 4453b7ab00..b773641177 100644 --- a/src/modules/mavlink/mavlink_mission.cpp +++ b/src/modules/mavlink/mavlink_mission.cpp @@ -564,12 +564,21 @@ MavlinkMissionManager::send() // try to request item again after timeout send_mission_request(_transfer_partner_sysid, _transfer_partner_compid, _transfer_seq); + } else if (_state == MAVLINK_WPM_STATE_SENDLIST && (_time_last_sent > 0) + && hrt_elapsed_time(&_time_last_sent) > MAVLINK_MISSION_RETRY_TIMEOUT_DEFAULT + && _transfer_seq == 0) { + + // MISSION_COUNT may have been dropped + PX4_DEBUG("WPM: SENDLIST resending MISSION_COUNT (no MISSION_ACK received yet)"); + send_mission_count(_transfer_partner_sysid, _transfer_partner_compid, _transfer_count, _mission_type, + get_current_mission_type_crc()); + } else if (_state != MAVLINK_WPM_STATE_IDLE && (_time_last_recv > 0) && hrt_elapsed_time(&_time_last_recv) > MAVLINK_MISSION_PROTOCOL_TIMEOUT_DEFAULT) { - _mavlink.send_statustext_critical("Operation timeout\t"); - events::send(events::ID("mavlink_mission_op_timeout"), events::Log::Error, - "Operation timeout, aborting transfer"); + _mavlink.send_statustext_critical("Mission sync timeout\t"); + events::send(events::ID("mavlink_mission_sync_timeout"), events::Log::Error, + "Mission sync timeout, aborting transfer"); PX4_DEBUG("WPM: Last operation (state=%d) timed out, changing state to MAVLINK_WPM_STATE_IDLE", _state); diff --git a/src/modules/mavlink/mavlink_parameters.cpp b/src/modules/mavlink/mavlink_parameters.cpp index 60841a34e6..6c95caab6a 100644 --- a/src/modules/mavlink/mavlink_parameters.cpp +++ b/src/modules/mavlink/mavlink_parameters.cpp @@ -58,9 +58,95 @@ MavlinkParametersManager::get_size() return MAVLINK_MSG_ID_PARAM_VALUE_LEN + MAVLINK_NUM_NON_PAYLOAD_BYTES; } +#if defined(CONFIG_MAVLINK_UAVCAN_PARAMETERS) + +void +MavlinkParametersManager::update_observed_camera_components() +{ + camera_status_s cam_status {}; + + while (_camera_status_sub.update(&cam_status)) { + if (cam_status.active_comp_id >= MAV_COMP_ID_CAMERA + && cam_status.active_comp_id <= MAV_COMP_ID_CAMERA6) { + _camera_comp_last_seen[cam_status.active_comp_id - MAV_COMP_ID_CAMERA] = cam_status.timestamp; + } + } + + // Warn once per comp ID when a MAVLink camera and a DroneCAN node share an + // ID in 100..105. Camera takes precedence at the UAVCAN bridge, so the CAN + // node's params become unreachable via MAVLink until the user reassigns + // the CAN node ID. Fires regardless of which side joined first. + static constexpr uint8_t kAllWarned = (1u << CAMERA_COMP_ID_COUNT) - 1; + + if (_camera_cannode_collision_warned_mask == kAllWarned) { + return; + } + + for (unsigned i = 0; i < CAMERA_COMP_ID_COUNT; ++i) { + const uint8_t warn_bit = 1u << i; + + if (_camera_cannode_collision_warned_mask & warn_bit) { + continue; + } + + if (_camera_comp_last_seen[i] == 0 + || hrt_elapsed_time(&_camera_comp_last_seen[i]) >= CAMERA_OBSERVATION_TIMEOUT) { + continue; + } + + const uint8_t comp_id = MAV_COMP_ID_CAMERA + i; + + if (is_dronecan_node_online(comp_id)) { + _camera_cannode_collision_warned_mask |= warn_bit; + mavlink_log_warning(_mavlink.get_mavlink_log_pub(), + "CAN node %u blocked by MAV camera (reassign ID)\t", + comp_id); + } + } +} + +bool +MavlinkParametersManager::is_observed_mavlink_camera(uint8_t target_component) const +{ + if (target_component < MAV_COMP_ID_CAMERA || target_component > MAV_COMP_ID_CAMERA6) { + return false; + } + + const hrt_abstime last_seen = _camera_comp_last_seen[target_component - MAV_COMP_ID_CAMERA]; + + if (last_seen == 0) { + return false; + } + + return hrt_elapsed_time(&last_seen) < CAMERA_OBSERVATION_TIMEOUT; +} + +bool +MavlinkParametersManager::is_dronecan_node_online(uint8_t node_id) +{ + dronecan_node_status_s status {}; + + for (auto &sub : _dronecan_node_status_subs) { + if (sub.copy(&status) + && status.node_id == node_id + && status.mode != dronecan_node_status_s::MODE_OFFLINE + && hrt_elapsed_time(&status.timestamp) < CAMERA_OBSERVATION_TIMEOUT) { + return true; + } + } + + return false; +} + +#endif // CONFIG_MAVLINK_UAVCAN_PARAMETERS + void MavlinkParametersManager::handle_message(const mavlink_message_t *msg) { +#if defined(CONFIG_MAVLINK_UAVCAN_PARAMETERS) + update_observed_camera_components(); +#endif // CONFIG_MAVLINK_UAVCAN_PARAMETERS + switch (msg->msgid) { case MAVLINK_MSG_ID_PARAM_REQUEST_LIST: { /* request all parameters */ @@ -81,7 +167,7 @@ MavlinkParametersManager::handle_message(const mavlink_message_t *msg) #if defined(CONFIG_MAVLINK_UAVCAN_PARAMETERS) if (req_list.target_system == mavlink_system.sysid && req_list.target_component < 127 && - !(req_list.target_component >= MAV_COMP_ID_CAMERA && req_list.target_component <= MAV_COMP_ID_CAMERA6) && + !is_observed_mavlink_camera(req_list.target_component) && (req_list.target_component != mavlink_system.compid || req_list.target_component == MAV_COMP_ID_ALL)) { // publish list request to UAVCAN driver via uORB. uavcan_parameter_request_s req{}; @@ -140,6 +226,9 @@ MavlinkParametersManager::handle_message(const mavlink_message_t *msg) PX4_ERR("param types mismatch param: %s", name); send_error(MAV_PARAM_ERROR_TYPE_MISMATCH, name, -1, msg->sysid, msg->compid); + } else if (param_is_readonly(param)) { + PX4_WARN("param %s is read-only", name); + send_error(MAV_PARAM_ERROR_READ_ONLY, name, -1, msg->sysid, msg->compid); } else { // According to the mavlink spec we should always acknowledge a write operation. @@ -151,7 +240,7 @@ MavlinkParametersManager::handle_message(const mavlink_message_t *msg) #if defined(CONFIG_MAVLINK_UAVCAN_PARAMETERS) if (set.target_system == mavlink_system.sysid && set.target_component < 127 && - !(set.target_component >= MAV_COMP_ID_CAMERA && set.target_component <= MAV_COMP_ID_CAMERA6) && + !is_observed_mavlink_camera(set.target_component) && (set.target_component != mavlink_system.compid || set.target_component == MAV_COMP_ID_ALL)) { // publish set request to UAVCAN driver via uORB. uavcan_parameter_request_s req{}; @@ -244,7 +333,7 @@ MavlinkParametersManager::handle_message(const mavlink_message_t *msg) #if defined(CONFIG_MAVLINK_UAVCAN_PARAMETERS) if (req_read.target_system == mavlink_system.sysid && req_read.target_component < 127 && - !(req_read.target_component >= MAV_COMP_ID_CAMERA && req_read.target_component <= MAV_COMP_ID_CAMERA6) && + !is_observed_mavlink_camera(req_read.target_component) && (req_read.target_component != mavlink_system.compid || req_read.target_component == MAV_COMP_ID_ALL)) { // publish set request to UAVCAN driver via uORB. uavcan_parameter_request_s req{}; @@ -716,6 +805,12 @@ void MavlinkParametersManager::enque_uavcan_request(uavcan_parameter_request_s * } _uavcan_open_request_list_item *new_reqest = new _uavcan_open_request_list_item; + + if (new_reqest == nullptr) { + PX4_ERR("uavcan request alloc failed"); + return; + } + new_reqest->req = *req; new_reqest->next = nullptr; diff --git a/src/modules/mavlink/mavlink_parameters.h b/src/modules/mavlink/mavlink_parameters.h index c43052c020..0d5ce567a6 100644 --- a/src/modules/mavlink/mavlink_parameters.h +++ b/src/modules/mavlink/mavlink_parameters.h @@ -48,6 +48,7 @@ #include #include #include +#include #include #include #include @@ -55,6 +56,8 @@ #if defined(CONFIG_MAVLINK_UAVCAN_PARAMETERS) # include # include +# include +# include #endif // CONFIG_MAVLINK_UAVCAN_PARAMETERS using namespace time_literals; @@ -169,6 +172,36 @@ protected: "uavcan_parameter_request_s MAV_PARAM_TYPE_INT64 constant mismatch"); uORB::Subscription _uavcan_parameter_value_sub{ORB_ID(uavcan_parameter_value)}; + + /** + * Poll camera_status uORB and record the last time each comp ID in the + * MAV_COMP_ID_CAMERA..MAV_COMP_ID_CAMERA6 range was seen as a MAVLink + * camera (HEARTBEAT with MAV_TYPE_CAMERA). + */ + void update_observed_camera_components(); + + /** + * True if target_component is in MAV_COMP_ID_CAMERA..MAV_COMP_ID_CAMERA6 + * and we have observed a MAVLink camera heartbeat on it within + * CAMERA_OBSERVATION_TIMEOUT. When false, the UAVCAN parameter bridge may + * forward to CAN node target_component even if that ID falls in 100..105, + * which is required for DroneCAN peripherals (e.g. ESCs) assigned those IDs. + */ + bool is_observed_mavlink_camera(uint8_t target_component) const; + + /** + * True if any dronecan_node_status instance reports a live (non-OFFLINE, + * recently updated) node at the given node_id. + */ + bool is_dronecan_node_online(uint8_t node_id); + + static constexpr hrt_abstime CAMERA_OBSERVATION_TIMEOUT = 5_s; + static constexpr unsigned CAMERA_COMP_ID_COUNT = MAV_COMP_ID_CAMERA6 - MAV_COMP_ID_CAMERA + 1; + + uORB::Subscription _camera_status_sub{ORB_ID(camera_status)}; + uORB::SubscriptionMultiArray _dronecan_node_status_subs{ORB_ID::dronecan_node_status}; + hrt_abstime _camera_comp_last_seen[CAMERA_COMP_ID_COUNT] {}; + uint8_t _camera_cannode_collision_warned_mask{0}; ///< bit i: already warned for MAV_COMP_ID_CAMERA + i #endif // CONFIG_MAVLINK_UAVCAN_PARAMETERS uORB::Publication _rc_param_map_pub{ORB_ID(rc_parameter_map)}; diff --git a/src/modules/mavlink/mavlink_params.c b/src/modules/mavlink/mavlink_params.c deleted file mode 100644 index f616bd01d6..0000000000 --- a/src/modules/mavlink/mavlink_params.c +++ /dev/null @@ -1,156 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2012-2016 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * MAVLink system ID - * @group MAVLink - * @min 1 - * @max 250 - * @reboot_required true - */ -PARAM_DEFINE_INT32(MAV_SYS_ID, 1); - -/** - * MAVLink component ID - * @group MAVLink - * @min 1 - * @max 250 - * @reboot_required true - */ -PARAM_DEFINE_INT32(MAV_COMP_ID, 1); - -/** - * MAVLink protocol version - * @group MAVLink - * @value 1 Version 1 with auto-upgrade to v2 if detected - * @value 2 Version 2 - */ -PARAM_DEFINE_INT32(MAV_PROTO_VER, 2); - -/** - * MAVLink SiK Radio ID - * - * When non-zero the MAVLink app will attempt to configure the - * SiK radio to this ID and re-set the parameter to 0. If the value - * is negative it will reset the complete radio config to - * factory defaults. Only applies if this mavlink instance is going through a SiK radio - * - * @group MAVLink - * @min -1 - * @max 240 - */ -PARAM_DEFINE_INT32(MAV_SIK_RADIO_ID, 0); - -/** - * MAVLink airframe type - * - * @min 0 - * @max 22 - * @value 0 Generic micro air vehicle - * @value 1 Fixed wing aircraft - * @value 2 Quadrotor - * @value 3 Coaxial helicopter - * @value 4 Normal helicopter with tail rotor - * @value 7 Airship, controlled - * @value 8 Free balloon, uncontrolled - * @value 10 Ground rover - * @value 11 Surface vessel, boat, ship - * @value 12 Submarine - * @value 13 Hexarotor - * @value 14 Octorotor - * @value 15 Tricopter - * @value 19 VTOL Two-rotor Tailsitter - * @value 20 VTOL Quad-rotor Tailsitter - * @value 21 VTOL Tiltrotor - * @value 22 VTOL Standard (separate fixed rotors for hover and cruise flight) - * @value 23 VTOL Tailsitter - * @group MAVLink - */ -PARAM_DEFINE_INT32(MAV_TYPE, 0); - -/** - * Use/Accept HIL GPS message even if not in HIL mode - * - * If set to 1 incoming HIL GPS messages are parsed. - * - * @boolean - * @group MAVLink - */ -PARAM_DEFINE_INT32(MAV_USEHILGPS, 0); - -/** - * Forward external setpoint messages - * - * If set to 1 incoming external setpoint messages will be directly forwarded - * to the controllers if in offboard control mode - * - * @boolean - * @group MAVLink - */ -PARAM_DEFINE_INT32(MAV_FWDEXTSP, 1); - -/** - * Parameter hash check. - * - * Disabling the parameter hash check functionality will make the mavlink instance - * stream parameters continuously. - * - * @boolean - * @group MAVLink - */ -PARAM_DEFINE_INT32(MAV_HASH_CHK_EN, 1); - -/** - * Heartbeat message forwarding. - * - * The mavlink heartbeat message will not be forwarded if this parameter is set to 'disabled'. - * The main reason for disabling heartbeats to be forwarded is because they confuse dronekit. - * - * @boolean - * @group MAVLink - */ -PARAM_DEFINE_INT32(MAV_HB_FORW_EN, 1); - -/** - * Timeout in seconds for the RADIO_STATUS reports coming in - * - * If the connected radio stops reporting RADIO_STATUS for a certain time, - * a warning is triggered and, if MAV_X_RADIO_CTL is enabled, the software-flow - * control is reset. - * - * @group MAVLink - * @unit s - * @min 1 - * @max 250 - */ -PARAM_DEFINE_INT32(MAV_RADIO_TOUT, 5); diff --git a/src/modules/mavlink/mavlink_params.yaml b/src/modules/mavlink/mavlink_params.yaml new file mode 100644 index 0000000000..6642505127 --- /dev/null +++ b/src/modules/mavlink/mavlink_params.yaml @@ -0,0 +1,108 @@ +module_name: mavlink +parameters: +- group: MAVLink + definitions: + MAV_SYS_ID: + description: + short: MAVLink system ID + type: int32 + default: 1 + min: 1 + max: 250 + reboot_required: true + MAV_COMP_ID: + description: + short: MAVLink component ID + type: int32 + default: 1 + min: 1 + max: 250 + reboot_required: true + MAV_PROTO_VER: + description: + short: MAVLink protocol version + type: enum + values: + 1: Version 1 with auto-upgrade to v2 if detected + 2: Version 2 + default: 2 + MAV_SIK_RADIO_ID: + description: + short: MAVLink SiK Radio ID + long: |- + When non-zero the MAVLink app will attempt to configure the + SiK radio to this ID and re-set the parameter to 0. If the value + is negative it will reset the complete radio config to + factory defaults. Only applies if this mavlink instance is going through a SiK radio + type: int32 + default: 0 + min: -1 + max: 240 + MAV_TYPE: + description: + short: MAVLink airframe type + type: enum + values: + 0: Generic micro air vehicle + 1: Fixed wing aircraft + 2: Quadrotor + 3: Coaxial helicopter + 4: Normal helicopter with tail rotor + 7: Airship, controlled + 8: Free balloon, uncontrolled + 10: Ground rover + 11: Surface vessel, boat, ship + 12: Submarine + 13: Hexarotor + 14: Octorotor + 15: Tricopter + 19: VTOL Two-rotor Tailsitter + 20: VTOL Quad-rotor Tailsitter + 21: VTOL Tiltrotor + 22: VTOL Standard (separate fixed rotors for hover and cruise flight) + 23: VTOL Tailsitter + default: 0 + min: 0 + max: 23 + MAV_USEHILGPS: + description: + short: Use/Accept HIL GPS message even if not in HIL mode + long: If set to 1 incoming HIL GPS messages are parsed. + type: boolean + default: 0 + MAV_FWDEXTSP: + description: + short: Forward external setpoint messages + long: |- + If set to 1 incoming external setpoint messages will be directly forwarded + to the controllers if in offboard control mode + type: boolean + default: 1 + MAV_HASH_CHK_EN: + description: + short: Parameter hash check + long: |- + Disabling the parameter hash check functionality will make the mavlink instance + stream parameters continuously. + type: boolean + default: 1 + MAV_HB_FORW_EN: + description: + short: Heartbeat message forwarding + long: |- + The mavlink heartbeat message will not be forwarded if this parameter is set to 'disabled'. + The main reason for disabling heartbeats to be forwarded is because they confuse dronekit. + type: boolean + default: 1 + MAV_RADIO_TOUT: + description: + short: Timeout in seconds for the RADIO_STATUS reports coming in + long: |- + If the connected radio stops reporting RADIO_STATUS for a certain time, + a warning is triggered and, if MAV_X_RADIO_CTL is enabled, the software-flow + control is reset. + type: int32 + default: 5 + unit: s + min: 1 + max: 250 diff --git a/src/modules/mavlink/mavlink_receiver.cpp b/src/modules/mavlink/mavlink_receiver.cpp index 41eaf4a355..e6fc14fdbd 100644 --- a/src/modules/mavlink/mavlink_receiver.cpp +++ b/src/modules/mavlink/mavlink_receiver.cpp @@ -213,6 +213,10 @@ MavlinkReceiver::handle_message(mavlink_message_t *msg) handle_message_follow_target(msg); break; + case MAVLINK_MSG_ID_GLOBAL_POSITION_SENSOR: + handle_message_global_position_sensor(msg); + break; + case MAVLINK_MSG_ID_LANDING_TARGET: handle_message_landing_target(msg); break; @@ -281,6 +285,13 @@ MavlinkReceiver::handle_message(mavlink_message_t *msg) handle_message_open_drone_id_system(msg); break; +#if defined(MAVLINK_MSG_ID_RANGING_BEACON) + + case MAVLINK_MSG_ID_RANGING_BEACON: + handle_message_ranging_beacon(msg); + break; +#endif // MAVLINK_MSG_ID_RANGING_BEACON + #if !defined(CONSTRAINED_FLASH) case MAVLINK_MSG_ID_NAMED_VALUE_FLOAT: @@ -329,6 +340,14 @@ MavlinkReceiver::handle_message(mavlink_message_t *msg) case MAVLINK_MSG_ID_SET_VELOCITY_LIMITS: handle_message_set_velocity_limits(msg); break; + +#endif + +#if defined(MAVLINK_MSG_ID_ESC_EEPROM) // For now only defined if development.xml is used + + case MAVLINK_MSG_ID_ESC_EEPROM: + handle_message_esc_eeprom(msg); + break; #endif default: @@ -594,14 +613,24 @@ void MavlinkReceiver::handle_message_command_both(mavlink_message_t *msg, const uint16_t message_id = (uint16_t)roundf(vehicle_command.param1); - if (message_id == MAVLINK_MSG_ID_MESSAGE_INTERVAL) { - get_message_interval((int)(cmd_mavlink.param2 + 0.5f)); +#if defined(MAVLINK_MSG_ID_ESC_EEPROM) - } else { - result = handle_request_message_command(message_id, - vehicle_command.param2, vehicle_command.param3, vehicle_command.param4, - vehicle_command.param5, vehicle_command.param6, vehicle_command.param7); - } + // Translate ESC_EEPROM request into the PX4 internal command so the DShot driver handles it + if (message_id == MAVLINK_MSG_ID_ESC_EEPROM) { + vehicle_command_s eeprom_cmd = vehicle_command; + eeprom_cmd.command = vehicle_command_s::VEHICLE_CMD_ESC_REQUEST_EEPROM; + _cmd_pub.publish(eeprom_cmd); + + } else +#endif + if (message_id == MAVLINK_MSG_ID_MESSAGE_INTERVAL) { + get_message_interval((int)(cmd_mavlink.param2 + 0.5f)); + + } else { + result = handle_request_message_command(message_id, + vehicle_command.param2, vehicle_command.param3, vehicle_command.param4, + vehicle_command.param5, vehicle_command.param6, vehicle_command.param7); + } } else if (cmd_mavlink.command == MAV_CMD_INJECT_FAILURE) { if (_mavlink.failure_injection_enabled()) { @@ -1025,6 +1054,18 @@ MavlinkReceiver::handle_message_att_pos_mocap(mavlink_message_t *msg) _mocap_odometry_pub.publish(odom); } +offboard_control_mode_s +MavlinkReceiver::fill_offboard_control_mode(const trajectory_setpoint_s &setpoint) +{ + offboard_control_mode_s ocm{}; + ocm.position = !matrix::Vector3f(setpoint.position).isAllNan(); + ocm.velocity = !matrix::Vector3f(setpoint.velocity).isAllNan(); + ocm.acceleration = !matrix::Vector3f(setpoint.acceleration).isAllNan(); + ocm.attitude = PX4_ISFINITE(setpoint.yaw); + ocm.body_rate = PX4_ISFINITE(setpoint.yawspeed); + return ocm; +} + void MavlinkReceiver::handle_message_set_position_target_local_ned(mavlink_message_t *msg) { @@ -1111,12 +1152,7 @@ MavlinkReceiver::handle_message_set_position_target_local_ned(mavlink_message_t setpoint.yawspeed = (type_mask & POSITION_TARGET_TYPEMASK_YAW_RATE_IGNORE) ? (float)NAN : target_local_ned.yaw_rate; - offboard_control_mode_s ocm{}; - ocm.position = !matrix::Vector3f(setpoint.position).isAllNan(); - ocm.velocity = !matrix::Vector3f(setpoint.velocity).isAllNan(); - ocm.acceleration = !matrix::Vector3f(setpoint.acceleration).isAllNan(); - ocm.attitude = PX4_ISFINITE(setpoint.yaw); - ocm.body_rate = PX4_ISFINITE(setpoint.yawspeed); + offboard_control_mode_s ocm = fill_offboard_control_mode(setpoint); if (ocm.acceleration && (type_mask & POSITION_TARGET_TYPEMASK_FORCE_SET)) { mavlink_log_critical(&_mavlink_log_pub, "SET_POSITION_TARGET_LOCAL_NED force not supported\t"); @@ -1133,8 +1169,8 @@ MavlinkReceiver::handle_message_set_position_target_local_ned(mavlink_message_t vehicle_status_s vehicle_status{}; _vehicle_status_sub.copy(&vehicle_status); - if (vehicle_status.nav_state == vehicle_status_s::NAVIGATION_STATE_OFFBOARD) { - // only publish setpoint once in OFFBOARD + if (vehicle_status.accepts_offboard_setpoints) { + // only publish setpoint once in mode that accepts offboard setpoints setpoint.timestamp = hrt_absolute_time(); _trajectory_setpoint_pub.publish(setpoint); } @@ -1235,12 +1271,7 @@ MavlinkReceiver::handle_message_set_position_target_global_int(mavlink_message_t setpoint.yawspeed = (type_mask & POSITION_TARGET_TYPEMASK_YAW_RATE_IGNORE) ? (float)NAN : target_global_int.yaw_rate; - offboard_control_mode_s ocm{}; - ocm.position = !matrix::Vector3f(setpoint.position).isAllNan(); - ocm.velocity = !matrix::Vector3f(setpoint.velocity).isAllNan(); - ocm.acceleration = !matrix::Vector3f(setpoint.acceleration).isAllNan(); - ocm.attitude = PX4_ISFINITE(setpoint.yaw); - ocm.body_rate = PX4_ISFINITE(setpoint.yawspeed); + offboard_control_mode_s ocm = fill_offboard_control_mode(setpoint); if (ocm.acceleration && (type_mask & POSITION_TARGET_TYPEMASK_FORCE_SET)) { mavlink_log_critical(&_mavlink_log_pub, "SET_POSITION_TARGET_GLOBAL_INT force not supported\t"); @@ -1304,6 +1335,48 @@ void MavlinkReceiver::handle_message_set_velocity_limits(mavlink_message_t *msg) } #endif // MAVLINK_MSG_ID_SET_VELOCITY_LIMITS +#if defined(MAVLINK_MSG_ID_ESC_EEPROM) // For now only defined if development.xml is used +void +MavlinkReceiver::handle_message_esc_eeprom(mavlink_message_t *msg) +{ + mavlink_esc_eeprom_t message; + mavlink_msg_esc_eeprom_decode(msg, &message); + + esc_eeprom_write_s eeprom{}; + eeprom.timestamp = hrt_absolute_time(); + eeprom.firmware = message.firmware; + eeprom.index = message.esc_index; + + if (eeprom.index != 255 && eeprom.index >= esc_status_s::CONNECTED_ESC_MAX) { + PX4_ERR("ESC EEPROM: invalid esc_index %u", eeprom.index); + return; + } + + uint8_t min_length = sizeof(eeprom.data); + int length = message.length; + + if (length > min_length) { + length = min_length; + } + + for (int i = 0; i < length && i < min_length; i++) { + int mask_index = i / 32; // Which uint32_t in the write_mask array + int bit_index = i % 32; // Which bit within that uint32_t + + if (message.write_mask[mask_index] & (1U << bit_index)) { + eeprom.data[i] = message.data[i]; + } + } + + eeprom.length = length; + memcpy(eeprom.write_mask, message.write_mask, sizeof(eeprom.write_mask)); + + PX4_DEBUG("ESC EEPROM write request for ESC%d", eeprom.index + 1); + + _esc_eeprom_write_pub.publish(eeprom); +} +#endif // MAVLINK_MSG_ID_ESC_EEPROM + void MavlinkReceiver::handle_message_vision_position_estimate(mavlink_message_t *msg) { @@ -2485,6 +2558,59 @@ MavlinkReceiver::handle_message_hil_gps(mavlink_message_t *msg) _sensor_gps_pub.publish(gps); } +void +MavlinkReceiver::handle_message_global_position_sensor(mavlink_message_t *msg) +{ + mavlink_global_position_sensor_t global_pos; + mavlink_msg_global_position_sensor_decode(msg, &global_pos); + + aux_global_position_s aux_global_position{}; + const hrt_abstime now = hrt_absolute_time(); + aux_global_position.timestamp = now; + aux_global_position.timestamp_sample = now; + + aux_global_position.id = global_pos.id; + aux_global_position.source = global_pos.source; + + aux_global_position.lat = global_pos.lat * 1e-7; + aux_global_position.lon = global_pos.lon * 1e-7; + aux_global_position.alt = global_pos.alt; + + aux_global_position.lat_lon_reset_counter = 0; + aux_global_position.eph = global_pos.eph; + aux_global_position.epv = global_pos.epv; + + _aux_global_position_pub.publish(aux_global_position); +} + +#if defined(MAVLINK_MSG_ID_RANGING_BEACON) +void +MavlinkReceiver::handle_message_ranging_beacon(mavlink_message_t *msg) +{ + mavlink_ranging_beacon_t beacon_pos; + mavlink_msg_ranging_beacon_decode(msg, &beacon_pos); + + ranging_beacon_s ranging_beacon{}; + ranging_beacon.timestamp = hrt_absolute_time(); + ranging_beacon.timestamp_sample = beacon_pos.time_usec; + ranging_beacon.beacon_id = beacon_pos.beacon_id; + ranging_beacon.range = (beacon_pos.range != UINT32_MAX) ? static_cast(beacon_pos.range) * 1e-3f : NAN; + ranging_beacon.lat = static_cast(beacon_pos.lat) * 1e-7; + ranging_beacon.lon = static_cast(beacon_pos.lon) * 1e-7; + ranging_beacon.alt = beacon_pos.alt; + ranging_beacon.alt_type = beacon_pos.alt_type; + ranging_beacon.hacc = (beacon_pos.hacc_est != UINT32_MAX) ? static_cast(beacon_pos.hacc_est) * 1e-3f : NAN; + ranging_beacon.vacc = (beacon_pos.vacc_est != UINT32_MAX) ? static_cast(beacon_pos.vacc_est) * 1e-3f : NAN; + ranging_beacon.sequence_nr = beacon_pos.sequence; + ranging_beacon.status = beacon_pos.status; + ranging_beacon.carrier_freq = beacon_pos.carrier_freq; + ranging_beacon.range_accuracy = (beacon_pos.range_accuracy != UINT32_MAX) + ? static_cast(beacon_pos.range_accuracy) * 1e-3f : NAN; + + _ranging_beacon_pub.publish(ranging_beacon); +} +#endif // MAVLINK_MSG_ID_RANGING_BEACON + void MavlinkReceiver::handle_message_follow_target(mavlink_message_t *msg) { @@ -3109,7 +3235,7 @@ void MavlinkReceiver::handle_message_open_drone_id_system( open_drone_id_system_s odid_system{}; memset(&odid_system, 0, sizeof(odid_system)); - odid_system.timestamp = hrt_absolute_time(); + odid_system.timestamp = odid_module.timestamp; memcpy(odid_system.id_or_mac, odid_module.id_or_mac, sizeof(odid_system.id_or_mac)); odid_system.operator_location_type = odid_module.operator_location_type; odid_system.classification_type = odid_module.classification_type; @@ -3183,6 +3309,9 @@ MavlinkReceiver::run() updateParams(); } + // Reload signing key if another instance updated it + _mavlink.check_signing_key_dirty(); + int ret = poll(&fds[0], 1, timeout); if (ret > 0) { diff --git a/src/modules/mavlink/mavlink_receiver.h b/src/modules/mavlink/mavlink_receiver.h index 50a38a8c1a..e2adf224db 100644 --- a/src/modules/mavlink/mavlink_receiver.h +++ b/src/modules/mavlink/mavlink_receiver.h @@ -64,6 +64,10 @@ #include #include #include +#if defined(MAVLINK_MSG_ID_ESC_EEPROM) +#include +#endif +#include #include #include #include @@ -111,6 +115,8 @@ #include #include #include +#include +#include #if !defined(CONSTRAINED_FLASH) # include @@ -202,12 +208,19 @@ private: void handle_message_utm_global_position(mavlink_message_t *msg); #if defined(MAVLINK_MSG_ID_SET_VELOCITY_LIMITS) // For now only defined if development.xml is used void handle_message_set_velocity_limits(mavlink_message_t *msg); +#endif +#if defined(MAVLINK_MSG_ID_ESC_EEPROM) // For now only defined if development.xml is used + void handle_message_esc_eeprom(mavlink_message_t *msg); #endif void handle_message_vision_position_estimate(mavlink_message_t *msg); void handle_message_gimbal_manager_set_attitude(mavlink_message_t *msg); void handle_message_gimbal_manager_set_manual_control(mavlink_message_t *msg); void handle_message_gimbal_device_information(mavlink_message_t *msg); void handle_message_gimbal_device_attitude_status(mavlink_message_t *msg); + void handle_message_global_position_sensor(mavlink_message_t *msg); +#if defined(MAVLINK_MSG_ID_RANGING_BEACON) + void handle_message_ranging_beacon(mavlink_message_t *msg); +#endif // MAVLINK_MSG_ID_RANGING_BEACON #if !defined(CONSTRAINED_FLASH) void handle_message_debug(mavlink_message_t *msg); @@ -235,6 +248,8 @@ private: void fill_thrust(float *thrust_body_array, uint8_t vehicle_type, float thrust); + static offboard_control_mode_s fill_offboard_control_mode(const trajectory_setpoint_s &setpoint); + void schedule_tune(const char *tune); void update_message_statistics(const mavlink_message_t &message); @@ -329,6 +344,11 @@ private: uORB::Publication _mocap_odometry_pub{ORB_ID(vehicle_mocap_odometry)}; uORB::Publication _visual_odometry_pub{ORB_ID(vehicle_visual_odometry)}; uORB::Publication _rates_sp_pub{ORB_ID(vehicle_rates_setpoint)}; + uORB::Publication _ranging_beacon_pub{ORB_ID(ranging_beacon)}; + +#if defined(MAVLINK_MSG_ID_ESC_EEPROM) + uORB::Publication _esc_eeprom_write_pub {ORB_ID(esc_eeprom_write)}; +#endif #if !defined(CONSTRAINED_FLASH) uORB::Publication _debug_array_pub {ORB_ID(debug_array)}; @@ -339,6 +359,7 @@ private: // ORB publications (multi) uORB::PublicationMulti _distance_sensor_pub{ORB_ID(distance_sensor)}; + uORB::PublicationMulti _aux_global_position_pub{ORB_ID(aux_global_position)}; uORB::PublicationMulti _gps_inject_data_pub{ORB_ID(gps_inject_data)}; uORB::PublicationMulti _rc_pub{ORB_ID(input_rc)}; uORB::PublicationMulti _manual_control_input_pub{ORB_ID(manual_control_input)}; diff --git a/src/modules/mavlink/mavlink_sign_control.cpp b/src/modules/mavlink/mavlink_sign_control.cpp new file mode 100644 index 0000000000..16f71ab340 --- /dev/null +++ b/src/modules/mavlink/mavlink_sign_control.cpp @@ -0,0 +1,247 @@ +/**************************************************************************** + * + * Copyright (c) 2026 PX4 Development Team. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name PX4 nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +/** + * @file mavlink_sign_control.cpp + * Mavlink messages signing control helpers implementation. + * + * @author Yulian oifa + */ + +#include "mavlink_sign_control.h" +#include + +static mavlink_signing_streams_t global_mavlink_signing_streams = {}; + +// Messages accepted without signing per MAVLink spec recommendation. +// HEARTBEAT is required for link discovery/interop but allows spoofed phantom vehicles on GCS. +static const uint32_t unsigned_messages[] = { + MAVLINK_MSG_ID_HEARTBEAT, + MAVLINK_MSG_ID_RADIO_STATUS, + MAVLINK_MSG_ID_ADSB_VEHICLE, + MAVLINK_MSG_ID_COLLISION +}; + +MavlinkSignControl::MavlinkSignControl() +{ +} + +MavlinkSignControl::~MavlinkSignControl() +{ +} + +void MavlinkSignControl::start(int instance_id, mavlink_status_t *mavlink_status, + mavlink_accept_unsigned_t accept_unsigned_callback) +{ + _mavlink_status = mavlink_status; + _mavlink_signing.link_id = instance_id; + _mavlink_signing.accept_unsigned_callback = accept_unsigned_callback; + _is_signing_initialized = false; + + int mkdir_ret = mkdir(MAVLINK_FOLDER_PATH, S_IRWXU); + + if (mkdir_ret != 0 && errno != EEXIST) { + PX4_ERR("failed creating module storage dir: %s (%i)", MAVLINK_FOLDER_PATH, errno); + + } else { + int fd = ::open(MAVLINK_SECRET_FILE, O_RDONLY); + + if (fd == -1) { + if (errno != ENOENT) { + PX4_ERR("failed opening mavlink secret key file: %s (%i)", MAVLINK_SECRET_FILE, errno); + } + + } else { + ssize_t bytes_read = ::read(fd, _mavlink_signing.secret_key, MAVLINK_SECRET_KEY_LENGTH); + + if (bytes_read == MAVLINK_SECRET_KEY_LENGTH) { + bytes_read = ::read(fd, &_mavlink_signing.timestamp, MAVLINK_SECRET_KEY_TIMESTAMP_LENGTH); + + if (bytes_read == MAVLINK_SECRET_KEY_TIMESTAMP_LENGTH) { + if (_mavlink_signing.timestamp != 0 || !is_array_all_zeros(_mavlink_signing.secret_key, MAVLINK_SECRET_KEY_LENGTH)) { + _is_signing_initialized = true; + } + } + } + + close(fd); + } + } + + if (!_is_signing_initialized) { + memset(_mavlink_signing.secret_key, 0, MAVLINK_SECRET_KEY_LENGTH); + _mavlink_signing.timestamp = 0; + } + + _update_signing_state(); +} + +MavlinkSignControl::SetupSigningResult MavlinkSignControl::check_for_signing(const mavlink_message_t *msg) +{ + if (msg->msgid != MAVLINK_MSG_ID_SETUP_SIGNING) { + return NOT_SETUP_SIGNING; + } + + mavlink_setup_signing_t setup_signing; + mavlink_msg_setup_signing_decode(msg, &setup_signing); + + bool new_key_blank = (setup_signing.initial_timestamp == 0 + && is_array_all_zeros(setup_signing.secret_key, MAVLINK_SECRET_KEY_LENGTH)); + + if (new_key_blank) { + // Disable signing: only allowed if signing is active and the message is signed + if (!_is_signing_initialized) { + // Already disabled, nothing to do + return SIGNING_DISABLED; + } + + bool msg_is_signed = (msg->incompat_flags & MAVLINK_IFLAG_SIGNED); + + if (!msg_is_signed) { + PX4_WARN("SETUP_SIGNING blank key rejected: message must be signed"); + return BLANK_KEY_REJECTED; + } + + memset(_mavlink_signing.secret_key, 0, MAVLINK_SECRET_KEY_LENGTH); + _mavlink_signing.timestamp = 0; + _is_signing_initialized = false; + + _update_signing_state(); + write_key_and_timestamp(); + + return SIGNING_DISABLED; + } + + memcpy(_mavlink_signing.secret_key, setup_signing.secret_key, MAVLINK_SECRET_KEY_LENGTH); + _mavlink_signing.timestamp = setup_signing.initial_timestamp; + _is_signing_initialized = true; + + _update_signing_state(); + write_key_and_timestamp(); + + return KEY_ACCEPTED; +} + +void MavlinkSignControl::reload_key() +{ + if (_mavlink_status == nullptr) { + return; + } + + _is_signing_initialized = false; + + int fd = ::open(MAVLINK_SECRET_FILE, O_RDONLY); + + if (fd != -1) { + ssize_t bytes_read = ::read(fd, _mavlink_signing.secret_key, MAVLINK_SECRET_KEY_LENGTH); + + if (bytes_read == MAVLINK_SECRET_KEY_LENGTH) { + bytes_read = ::read(fd, &_mavlink_signing.timestamp, MAVLINK_SECRET_KEY_TIMESTAMP_LENGTH); + + if (bytes_read == MAVLINK_SECRET_KEY_TIMESTAMP_LENGTH) { + if (_mavlink_signing.timestamp != 0 || !is_array_all_zeros(_mavlink_signing.secret_key, MAVLINK_SECRET_KEY_LENGTH)) { + _is_signing_initialized = true; + } + } + } + + close(fd); + } + + if (!_is_signing_initialized) { + memset(_mavlink_signing.secret_key, 0, MAVLINK_SECRET_KEY_LENGTH); + _mavlink_signing.timestamp = 0; + } + + _update_signing_state(); +} + +void MavlinkSignControl::_update_signing_state() +{ + if (_is_signing_initialized) { + _mavlink_signing.flags = MAVLINK_SIGNING_FLAG_SIGN_OUTGOING; + _mavlink_status->signing = &_mavlink_signing; + _mavlink_status->signing_streams = &global_mavlink_signing_streams; + + } else { + _mavlink_signing.flags = 0; + _mavlink_status->signing = nullptr; + _mavlink_status->signing_streams = nullptr; + } +} + +void MavlinkSignControl::write_key_and_timestamp() +{ + int fd = ::open(MAVLINK_SECRET_FILE, O_CREAT | O_WRONLY | O_TRUNC, PX4_O_MODE_600); + + if (fd == -1) { + if (errno != ENOENT) { + PX4_ERR("failed opening mavlink secret key file for writing: %s (%i)", MAVLINK_SECRET_FILE, errno); + } + + } else { + ssize_t bytes_write = ::write(fd, _mavlink_signing.secret_key, MAVLINK_SECRET_KEY_LENGTH); + + if (bytes_write == MAVLINK_SECRET_KEY_LENGTH) { + bytes_write = ::write(fd, &_mavlink_signing.timestamp, MAVLINK_SECRET_KEY_TIMESTAMP_LENGTH); + } + + close(fd); + } +} + +bool MavlinkSignControl::accept_unsigned(uint32_t message_id) +{ + if (!_is_signing_initialized) { + return true; + } + + for (unsigned i = 0; i < sizeof(unsigned_messages) / sizeof(unsigned_messages[0]); i++) { + if (unsigned_messages[i] == message_id) { + return true; + } + } + + return false; +} + +bool MavlinkSignControl::is_array_all_zeros(uint8_t arr[], size_t size) +{ + for (size_t i = 0; i < size; ++i) { + if (arr[i] != 0) { + return false; + } + } + + return true; +} diff --git a/src/modules/mavlink/mavlink_sign_control.h b/src/modules/mavlink/mavlink_sign_control.h new file mode 100644 index 0000000000..91c68aeff5 --- /dev/null +++ b/src/modules/mavlink/mavlink_sign_control.h @@ -0,0 +1,115 @@ +/**************************************************************************** + * + * Copyright (c) 2026 PX4 Development Team. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name PX4 nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +/** + * @file mavlink_sign_control.h + * Mavlink messages signing control helpers. + * + * @author Yulian oifa + */ + +#ifndef MAVLINK_SIGN_CONTROL_H_ +#define MAVLINK_SIGN_CONTROL_H_ + +#define MAVLINK_SD_ROOT_PATH CONFIG_BOARD_ROOT_PATH "/" +#define MAVLINK_FOLDER_PATH MAVLINK_SD_ROOT_PATH"/mavlink" +#define MAVLINK_SECRET_FILE MAVLINK_FOLDER_PATH"/mavlink-signing-key.bin" + +#define MAVLINK_SECRET_KEY_TIMESTAMP_LENGTH 8 ///< size of timestamp in bytes +#define MAVLINK_SECRET_KEY_LENGTH 32 ///< size of key in bytes + +#include "mavlink_receiver.h" + +class Mavlink; + +class MavlinkSignControl +{ + +public: + MavlinkSignControl(); + ~MavlinkSignControl(); + + /** + * Initialize signing state and read key from file. + * Only enables signing if a valid key exists on the SD card. + */ + void start(int instance_id, mavlink_status_t *mavlink_status, + mavlink_accept_unsigned_t accept_unsigned_callback); + + enum SetupSigningResult { + NOT_SETUP_SIGNING = 0, ///< Message was not SETUP_SIGNING + KEY_ACCEPTED, ///< New key provisioned successfully + SIGNING_DISABLED, ///< Signing disabled via signed blank key + BLANK_KEY_REJECTED ///< Blank key rejected (unsigned or signing not active) + }; + + /** + * Checks whether the message is SETUP_SIGNING, and if yes, updates local key. + * Enables or disables signing based on whether the new key is valid. + */ + SetupSigningResult check_for_signing(const mavlink_message_t *msg); + + /** + * Reload key from SD card file. Called on the instance's own receiver thread + * when the signing key dirty flag is set by another instance. + */ + void reload_key(); + + /** + * Stores the key and timestamp from memory to file + */ + void write_key_and_timestamp(); + + /** + * Checks whether an unsigned message should be accepted + */ + bool accept_unsigned(uint32_t message_id); + + bool is_signing_active() const { return _is_signing_initialized; } + + static bool is_array_all_zeros(uint8_t arr[], size_t size); + +private: + mavlink_signing_t _mavlink_signing {}; + mavlink_status_t *_mavlink_status{nullptr}; + + bool _is_signing_initialized{false}; + + /** + * Wire or unwire the signing struct into the mavlink status based on key state. + */ + void _update_signing_state(); +}; + + +#endif /* MAVLINK_SIGN_CONTROL_H_ */ diff --git a/src/modules/mavlink/mavlink_tests/mavlink_ftp_test.cpp b/src/modules/mavlink/mavlink_tests/mavlink_ftp_test.cpp deleted file mode 100644 index 2accd21c54..0000000000 --- a/src/modules/mavlink/mavlink_tests/mavlink_ftp_test.cpp +++ /dev/null @@ -1,1028 +0,0 @@ -/**************************************************************************** - * - * Copyright (C) 2014-2021 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/// @file mavlink_ftp_test.cpp -/// @author Don Gagne - -#include -#include -#include -#include - -#include "mavlink_ftp_test.h" -#include "../mavlink_ftp.h" - -#ifdef __PX4_NUTTX -#define PX4_MAVLINK_TEST_DATA_DIR CONFIG_BOARD_ROOT_PATH "/ftp_unit_test_data" -#else -#define PX4_MAVLINK_TEST_DATA_DIR "ftp_unit_test_data" -#endif - -static const char *_test_files[] = { - PX4_MAVLINK_TEST_DATA_DIR "/" "test_238.data", - PX4_MAVLINK_TEST_DATA_DIR "/" "test_239.data", - PX4_MAVLINK_TEST_DATA_DIR "/" "test_240.data" -}; - -constexpr uint32_t MAX_DATA_LEN = MAVLINK_MSG_FILE_TRANSFER_PROTOCOL_FIELD_PAYLOAD_LEN - sizeof( - MavlinkFTP::PayloadHeader); - -const MavlinkFtpTest::DownloadTestCase MavlinkFtpTest::_rgDownloadTestCases[] = { - { _test_files[0], MAX_DATA_LEN - 1, true, false }, // Read takes less than single packet - { _test_files[1], MAX_DATA_LEN, true, true }, // Read completely fills single packet - { _test_files[2], MAX_DATA_LEN + 1, false, false }, // Read take two packets -}; - -const char MavlinkFtpTest::_unittest_microsd_dir[] = PX4_STORAGEDIR "/ftp_unit_test_dir"; -const char MavlinkFtpTest::_unittest_microsd_file[] = PX4_STORAGEDIR "/ftp_unit_test_dir/file"; - -MavlinkFtpTest::MavlinkFtpTest() : - _ftp_server(nullptr), - _expected_seq_number(0), - _reply_msg{} -{ -} - -/// @brief Called before every test to initialize the FTP Server. -void MavlinkFtpTest::_init() -{ - _expected_seq_number = 0; - _ftp_server = new MavlinkFTP(_mavlink); - _ftp_server->set_unittest_worker(MavlinkFtpTest::receive_message_handler_generic, this); - - _create_test_files(); - - _cleanup_microsd(); -} - -bool MavlinkFtpTest::_create_test_files() -{ - int ret = ::mkdir(PX4_MAVLINK_TEST_DATA_DIR, S_IRWXU | S_IRWXG | S_IRWXO); - ut_assert("mkdir failed", ret == 0 || errno == EEXIST); - - ret = ::mkdir(PX4_MAVLINK_TEST_DATA_DIR "/empty_dir", S_IRWXU | S_IRWXG | S_IRWXO); - ut_assert("mkdir failed", ret == 0 || errno == EEXIST); - - bool failed = false; - - for (int i = 0; i < 3; ++i) { - int fd = ::open(_test_files[i], O_CREAT | O_EXCL | O_WRONLY, S_IRWXU | S_IRWXG | S_IRWXO); - - if (fd < 0) { - printf("fd: %d, error: %s\n", fd, strerror(errno)); - ut_assert("Open failed", fd != -1); - } - - // We create 3 files, with bytes counting from 0 to 238, 239, and 240. - uint8_t len = 238 + i; - - for (uint8_t c = 0; c < len; ++c) { - ret = ::write(fd, &c, 1); - - if (ret != 1) { - failed = true; - } - } - - close(fd); - } - - ut_assert("Could not write test file", !failed); - - return !failed; -} - -/// @brief Called after every test to take down the FTP Server. -void MavlinkFtpTest::_cleanup() -{ - delete _ftp_server; - - _cleanup_microsd(); - _remove_test_files(); -} - -bool MavlinkFtpTest::_remove_test_files() -{ - for (int i = 0; i < 3; ++i) { - ::unlink(_test_files[i]); - } - - ::rmdir(PX4_MAVLINK_TEST_DATA_DIR "/empty_dir"); - ::rmdir(PX4_MAVLINK_TEST_DATA_DIR); - - return true; -} - - -/// @brief Tests for correct behavior of an Ack response. -bool MavlinkFtpTest::_ack_test() -{ - MavlinkFTP::PayloadHeader payload {}; - const MavlinkFTP::PayloadHeader *reply; - - payload.opcode = MavlinkFTP::kCmdNone; - payload.size = 0; - - bool success = _send_receive_msg(&payload, // FTP payload header - nullptr, // Data to start into FTP message payload - 0, // size in bytes of data - &reply); // Payload inside FTP message response - - if (!success) { - return false; - } - - ut_compare("Didn't get Ack back", reply->opcode, MavlinkFTP::kRspAck); - ut_compare("Incorrect payload size", reply->size, 0); - - return true; -} - -/// @brief Tests for correct response to an invalid opcode. -bool MavlinkFtpTest::_bad_opcode_test() -{ - MavlinkFTP::PayloadHeader payload {}; - const MavlinkFTP::PayloadHeader *reply; - - payload.opcode = 0xFF; // bogus opcode - payload.size = 0; - - bool success = _send_receive_msg(&payload, // FTP payload header - nullptr, // Data to start into FTP message payload - 0, // size in bytes of data - &reply); // Payload inside FTP message response - - if (!success) { - return false; - } - - ut_compare("Didn't get Nak back", reply->opcode, MavlinkFTP::kRspNak); - ut_compare("Incorrect payload size", reply->size, 1); - ut_compare("Incorrect error code", reply->data[0], MavlinkFTP::kErrUnknownCommand); - - return true; -} - -/// @brief Tests for correct reponse to a payload which an invalid data size field. -bool MavlinkFtpTest::_bad_datasize_test() -{ - mavlink_message_t msg; - MavlinkFTP::PayloadHeader payload {}; - const MavlinkFTP::PayloadHeader *reply; - - payload.opcode = MavlinkFTP::kCmdListDirectory; - payload.size = 42; // This has to be greater than 0, otherwise everything including the size field gets truncated. - - _setup_ftp_msg(&payload, nullptr, 0, &msg); - - // Set the data size to be one larger than is legal - ((MavlinkFTP::PayloadHeader *)((mavlink_file_transfer_protocol_t *)msg.payload64)->payload)->size = - MAVLINK_MSG_FILE_TRANSFER_PROTOCOL_FIELD_PAYLOAD_LEN + 1; - - _ftp_server->handle_message(&msg); - - if (!_decode_message(&_reply_msg, &reply)) { - return false; - } - - ut_compare("Didn't get Nak back", reply->opcode, MavlinkFTP::kRspNak); - ut_compare("Incorrect payload size", reply->size, 1); - ut_compare("Incorrect error code", reply->data[0], MavlinkFTP::kErrInvalidDataSize); - - return true; -} - -bool MavlinkFtpTest::_list_test() -{ - MavlinkFTP::PayloadHeader payload {}; - const MavlinkFTP::PayloadHeader *reply; - - struct _testCase { - const char *dir; ///< Directory to run List command on - const char *response; ///< Expected response entries from List command - int response_count; ///< Number of directories that should be returned - bool success; ///< true: List command should succeed, false: List command should fail - }; - struct _testCase rgTestCases[] = { - { "/bogus", nullptr, 0, false }, -#ifdef __PX4_NUTTX - { PX4_MAVLINK_TEST_DATA_DIR, "Dempty_dir|Ftest_238.data\t238|Ftest_239.data\t239|Ftest_240.data\t240", 4, true }, -#else - { PX4_MAVLINK_TEST_DATA_DIR, "Dempty_dir|Ftest_238.data\t238|Ftest_239.data\t239|Ftest_240.data\t240|S|S", 6, true }, // readdir on Linux adds . and .. -#endif - }; - - for (size_t i = 0; i < sizeof(rgTestCases) / sizeof(rgTestCases[0]); i++) { - const struct _testCase *test = &rgTestCases[i]; - - payload.opcode = MavlinkFTP::kCmdListDirectory; - payload.offset = 0; - payload.size = strlen(test->dir) + 1; - - bool success = _send_receive_msg(&payload, // FTP payload header - (uint8_t *)test->dir, // Data to start into FTP message payload - payload.size, // size in bytes of data - &reply); // Payload inside FTP message response - - if (!success) { - return false; - } - - if (test->success) { - ut_compare("Didn't get Ack back", reply->opcode, MavlinkFTP::kRspAck); - ut_compare("Incorrect payload size", reply->size, strlen(test->response) + 1); - - // The return order of directories from the List command is not repeatable. So we can't do a direct comparison - // to a hardcoded return result string. - - // Convert null terminators to seperator char so we can use strok to parse returned data - char list_entry[256]; - - for (uint8_t j = 0; j < reply->size - 1; j++) { - if (reply->data[j] == 0) { - list_entry[j] = '|'; - - } else { - list_entry[j] = reply->data[j]; - } - } - - list_entry[reply->size - 1] = 0; - - // Loop over returned directory entries trying to find then in the response list - char *dir; - int response_count = 0; - dir = strtok(list_entry, "|"); - - while (dir != nullptr) { - ut_assert("Returned directory not found in expected response", strstr(test->response, dir)); - response_count++; - dir = strtok(nullptr, "|"); - } - - ut_compare("Incorrect number of directory entires returned", test->response_count, response_count); - - } else { - ut_compare("Didn't get Nak back", reply->opcode, MavlinkFTP::kRspNak); - ut_compare("Incorrect error code", reply->data[0], MavlinkFTP::kErrFileNotFound); - ut_compare("Incorrect payload size", reply->size, 1); - } - } - - return true; -} - -/// @brief Tests for correct response to a List command on a valid directory, but with an offset that -/// is beyond the last directory entry. -bool MavlinkFtpTest::_list_eof_test() -{ - MavlinkFTP::PayloadHeader payload {}; - const MavlinkFTP::PayloadHeader *reply; - const char *dir = PX4_MAVLINK_TEST_DATA_DIR; - - payload.opcode = MavlinkFTP::kCmdListDirectory; -#ifdef __PX4_NUTTX - payload.offset = 4; // (3 test files, 1 test folder) -#else - payload.offset = 6; // (3 test files, 1 test folder, two skipped ./..) -#endif - payload.size = strlen(dir) + 1; - - bool success = _send_receive_msg(&payload, // FTP payload header - (uint8_t *)dir, // Data to start into FTP message payload - payload.size, // size in bytes of data - &reply); // Payload inside FTP message response - - if (!success) { - return false; - } - - ut_compare("Didn't get Nak back", reply->opcode, MavlinkFTP::kRspNak); - ut_compare("Incorrect payload size", reply->size, 1); - ut_compare("Incorrect error code", reply->data[0], MavlinkFTP::kErrEOF); - - return true; -} - -/// @brief Tests for correct response to an Open command on a file which does not exist. -bool MavlinkFtpTest::_open_badfile_test() -{ - MavlinkFTP::PayloadHeader payload {}; - const MavlinkFTP::PayloadHeader *reply; - const char *dir = "/foo"; // non-existent file - - payload.opcode = MavlinkFTP::kCmdOpenFileRO; - payload.offset = 0; - payload.size = strlen(dir) + 1; - - bool success = _send_receive_msg(&payload, // FTP payload header - (uint8_t *)dir, // Data to start into FTP message payload - payload.size, // size in bytes of data - &reply); // Payload inside FTP message response - - if (!success) { - return false; - } - - ut_compare("Didn't get Nak back", reply->opcode, MavlinkFTP::kRspNak); - ut_compare("Incorrect payload size", reply->size, 1); - ut_compare("Incorrect error code", reply->data[0], MavlinkFTP::kErrFileNotFound); - - return true; -} - -/// @brief Tests for correct reponse to an Open command on a file, followed by Terminate -bool MavlinkFtpTest::_open_terminate_test() -{ - MavlinkFTP::PayloadHeader payload {}; - const MavlinkFTP::PayloadHeader *reply; - - for (size_t i = 0; i < sizeof(_rgDownloadTestCases) / sizeof(_rgDownloadTestCases[0]); i++) { - struct stat st; - const DownloadTestCase *test = &_rgDownloadTestCases[i]; - - payload.opcode = MavlinkFTP::kCmdOpenFileRO; - payload.offset = 0; - payload.size = strlen(test->file) + 1; - - bool success = _send_receive_msg(&payload, // FTP payload header - (uint8_t *)test->file, // Data to start into FTP message payload - payload.size, // size in bytes of data - &reply); // Payload inside FTP message response - - if (!success) { - return false; - } - - ut_compare("stat failed", stat(test->file, &st), 0); - - ut_compare("Didn't get Ack back", reply->opcode, MavlinkFTP::kRspAck); - ut_compare("Incorrect payload size", reply->size, sizeof(uint32_t)); - ut_compare("File size incorrect", *((uint32_t *)&reply->data[0]), (uint32_t)st.st_size); - - payload.opcode = MavlinkFTP::kCmdTerminateSession; - payload.session = reply->session; - payload.size = 0; - - success = _send_receive_msg(&payload, // FTP payload header - nullptr, // Data to start into FTP message payload - 0, // size in bytes of data - &reply); // Payload inside FTP message response - - if (!success) { - return false; - } - - ut_compare("Didn't get Ack back", reply->opcode, MavlinkFTP::kRspAck); - ut_compare("Incorrect payload size", reply->size, 0); - } - - return true; -} - -/// @brief Tests for correct reponse to a Terminate command on an invalid session. -bool MavlinkFtpTest::_terminate_badsession_test() -{ - MavlinkFTP::PayloadHeader payload {}; - const MavlinkFTP::PayloadHeader *reply; - const char *file = _rgDownloadTestCases[0].file; - - payload.opcode = MavlinkFTP::kCmdOpenFileRO; - payload.offset = 0; - payload.size = strlen(file) + 1; - - bool success = _send_receive_msg(&payload, // FTP payload header - (uint8_t *)file, // Data to start into FTP message payload - payload.size, // size in bytes of data - &reply); // Payload inside FTP message response - - if (!success) { - return false; - } - - ut_compare("Didn't get Ack back", reply->opcode, MavlinkFTP::kRspAck); - - payload.opcode = MavlinkFTP::kCmdTerminateSession; - payload.session = reply->session + 1; - payload.size = 0; - - success = _send_receive_msg(&payload, // FTP payload header - nullptr, // Data to start into FTP message payload - 0, // size in bytes of data - &reply); // Payload inside FTP message response - - if (!success) { - return false; - } - - ut_compare("Didn't get Nak back", reply->opcode, MavlinkFTP::kRspNak); - ut_compare("Incorrect payload size", reply->size, 1); - ut_compare("Incorrect error code", reply->data[0], MavlinkFTP::kErrInvalidSession); - - return true; -} - -/// @brief Tests for correct reponse to a Read command on an open session. -bool MavlinkFtpTest::_read_test() -{ - MavlinkFTP::PayloadHeader payload {}; - const MavlinkFTP::PayloadHeader *reply; - - for (size_t i = 0; i < sizeof(_rgDownloadTestCases) / sizeof(_rgDownloadTestCases[0]); i++) { - struct stat st; - const DownloadTestCase *test = &_rgDownloadTestCases[i]; - - // Read in the file so we can compare it to what we get back - ut_compare("stat failed", stat(test->file, &st), 0); - uint8_t *bytes = new uint8_t[st.st_size]; - ut_assert("new failed", bytes != nullptr); - int fd = ::open(test->file, O_RDONLY); - ut_assert("open failed", fd != -1); - int bytes_read = ::read(fd, bytes, st.st_size); - ut_compare("read failed", bytes_read, st.st_size); - ::close(fd); - - // Test case data files are created for specific boundary conditions - ut_compare("Test case data files are out of date", test->length, st.st_size); - - payload.opcode = MavlinkFTP::kCmdOpenFileRO; - payload.offset = 0; - payload.size = strlen(test->file) + 1; - - bool success = _send_receive_msg(&payload, // FTP payload header - (uint8_t *)test->file, // Data to start into FTP message payload - payload.size, // size in bytes of data - &reply); // Payload inside FTP message response - - if (!success) { - delete[] bytes; - return false; - } - - ut_compare("Didn't get Ack back", reply->opcode, MavlinkFTP::kRspAck); - - payload.opcode = MavlinkFTP::kCmdReadFile; - payload.session = reply->session; - payload.offset = 0; - - ut_compare("Reply containing file size wrong", reply->size, sizeof(uint32_t)); - const uint32_t size = *reinterpret_cast(&reply->data[0]); - - // We need to download multiple packets until done. - while (payload.offset < size) { - - // Setting this size is slightly odd as we are not actually sending a payload but - // use it to communicate how many bytes we want to read. - // Also, we can only request what actually fits in the payload. - payload.size = size - payload.offset > MAX_DATA_LEN ? MAX_DATA_LEN : size - payload.offset; - - success = _send_receive_msg(&payload, // FTP payload header - nullptr, // Data to start into FTP message payload - 0, // size in bytes of data - &reply); // Payload inside FTP message response - - if (!success) { - delete[] bytes; - return false; - } - - ut_compare("Didn't get Ack back", reply->opcode, MavlinkFTP::kRspAck); - ut_compare("Offset incorrect", reply->offset, payload.offset); - - ut_compare("Payload size incorrect", reply->size, payload.size); - ut_compare("Payload content differs", memcmp(reply->data, bytes + payload.offset, reply->size), 0); - - payload.offset += reply->size; - } - - ut_compare("File size overall not correct", payload.offset, size); - - payload.opcode = MavlinkFTP::kCmdTerminateSession; - payload.session = reply->session; - payload.size = 0; - - success = _send_receive_msg(&payload, // FTP payload header - nullptr, // Data to start into FTP message payload - 0, // size in bytes of data - &reply); // Payload inside FTP message response - - if (!success) { - delete[] bytes; - return false; - } - - ut_compare("Didn't get Ack back", reply->opcode, MavlinkFTP::kRspAck); - ut_compare("Incorrect payload size", reply->size, 0); - - delete[] bytes; - bytes = nullptr; - } - - return true; -} - -/// @brief Tests for correct reponse to a Read command on an open session. -bool MavlinkFtpTest::_burst_test() -{ - MavlinkFTP::PayloadHeader payload {}; - const MavlinkFTP::PayloadHeader *reply; - BurstInfo burst_info; - - - - for (size_t i = 0; i < sizeof(_rgDownloadTestCases) / sizeof(_rgDownloadTestCases[0]); i++) { - struct stat st; - const DownloadTestCase *test = &_rgDownloadTestCases[i]; - - // Read in the file so we can compare it to what we get back - ut_compare("stat failed", stat(test->file, &st), 0); - uint8_t *bytes = new uint8_t[st.st_size]; - ut_assert("new failed", bytes != nullptr); - int fd = ::open(test->file, O_RDONLY); - ut_assert("open failed", fd != -1); - int bytes_read = ::read(fd, bytes, st.st_size); - ut_compare("read failed", bytes_read, st.st_size); - ::close(fd); - - // Test case data files are created for specific boundary conditions - ut_compare("Test case data files are out of date", test->length, st.st_size); - - payload.opcode = MavlinkFTP::kCmdOpenFileRO; - payload.offset = 0; - payload.size = strlen(test->file) + 1; - - bool success = _send_receive_msg(&payload, // FTP payload header - (uint8_t *)test->file, // Data to start into FTP message payload - payload.size, // size in bytes of data - &reply); // Payload inside FTP message response - - if (!success) { - delete[] bytes; - return false; - } - - ut_compare("Didn't get Ack back", reply->opcode, MavlinkFTP::kRspAck); - - // Setup for burst response handler - burst_info.burst_state = burst_state_first_ack; - burst_info.single_packet_file = test->singlePacketRead; - burst_info.file_size = st.st_size; - burst_info.file_bytes = bytes; - burst_info.ftp_test_class = this; - _ftp_server->set_unittest_worker(MavlinkFtpTest::receive_message_handler_burst, &burst_info); - - // Send the burst command, message response will be handled by _receive_message_handler_stream - payload.opcode = MavlinkFTP::kCmdBurstReadFile; - payload.session = reply->session; - payload.offset = 0; - payload.size = MAX_DATA_LEN; - - mavlink_message_t msg; - _setup_ftp_msg(&payload, nullptr, 0, &msg); - _ftp_server->handle_message(&msg); - - // First packet is sent using stream mechanism, so we need to force it out ourselves - _ftp_server->send(); - - ut_compare("Incorrect sequence of messages", burst_info.burst_state, burst_state_complete); - - // Put back generic message handler - _ftp_server->set_unittest_worker(MavlinkFtpTest::receive_message_handler_generic, this); - - // Terminate session - payload.opcode = MavlinkFTP::kCmdTerminateSession; - payload.session = reply->session; - payload.size = 0; - - success = _send_receive_msg(&payload, // FTP payload header - nullptr, // Data to start into FTP message payload - 0, // size in bytes of data - &reply); // Payload inside FTP message response - - if (!success) { - delete[] bytes; - return false; - } - - ut_compare("Didn't get Ack back", reply->opcode, MavlinkFTP::kRspAck); - ut_compare("Incorrect payload size", reply->size, 0); - - delete[] bytes; - bytes = nullptr; - } - - return true; -} - -/// @brief Tests for correct reponse to a Read command on an invalid session. -bool MavlinkFtpTest::_read_badsession_test() -{ - MavlinkFTP::PayloadHeader payload {}; - const MavlinkFTP::PayloadHeader *reply; - const char *file = _rgDownloadTestCases[0].file; - - payload.opcode = MavlinkFTP::kCmdOpenFileRO; - payload.offset = 0; - payload.size = strlen(file) + 1; - - bool success = _send_receive_msg(&payload, // FTP payload header - (uint8_t *)file, // Data to start into FTP message payload - payload.size, // size in bytes of data - &reply); // Payload inside FTP message response - - if (!success) { - return false; - } - - ut_compare("Didn't get Ack back", reply->opcode, MavlinkFTP::kRspAck); - - payload.opcode = MavlinkFTP::kCmdReadFile; - payload.session = reply->session + 1; // Invalid session - payload.offset = 0; - - success = _send_receive_msg(&payload, // FTP payload header - nullptr, // Data to start into FTP message payload - 0, // size in bytes of data - &reply); // Payload inside FTP message response - - if (!success) { - return false; - } - - ut_compare("Didn't get Nak back", reply->opcode, MavlinkFTP::kRspNak); - ut_compare("Incorrect payload size", reply->size, 1); - ut_compare("Incorrect error code", reply->data[0], MavlinkFTP::kErrInvalidSession); - - return true; -} - -bool MavlinkFtpTest::_removedirectory_test() -{ - MavlinkFTP::PayloadHeader payload {}; - const MavlinkFTP::PayloadHeader *reply; - int fd; - - struct _testCase { - const char *dir; - bool success; - bool deleteFile; - uint8_t reply_size; - uint8_t error_code; - }; - static const struct _testCase rgTestCases[] = { -#ifdef __PX4_NUTTX - { "/bogus", false, false, 1, MavlinkFTP::kErrFailFileProtected }, -#else - { "/bogus", false, false, 1, MavlinkFTP::kErrFileNotFound }, -#endif - { _unittest_microsd_dir, false, false, 2, MavlinkFTP::kErrFailErrno }, - { _unittest_microsd_file, false, false, 2, MavlinkFTP::kErrFailErrno }, - { _unittest_microsd_dir, true, true, 0, MavlinkFTP::kErrNone }, - }; - - ut_compare("mkdir failed", ::mkdir(_unittest_microsd_dir, S_IRWXU | S_IRWXG | S_IRWXO), 0); - ut_assert("open failed", (fd = ::open(_unittest_microsd_file, O_CREAT | O_EXCL, S_IRWXU | S_IRWXG | S_IRWXO)) != -1); - ::close(fd); - - for (size_t i = 0; i < sizeof(rgTestCases) / sizeof(rgTestCases[0]); i++) { - const struct _testCase *test = &rgTestCases[i]; - - if (test->deleteFile) { - ut_compare("unlink failed", ::unlink(_unittest_microsd_file), 0); - } - - payload.opcode = MavlinkFTP::kCmdRemoveDirectory; - payload.offset = 0; - payload.size = strlen(test->dir) + 1; - - bool success = _send_receive_msg(&payload, // FTP payload header - (uint8_t *)test->dir, // Data to start into FTP message payload - payload.size, // size in bytes of data - &reply); // Payload inside FTP message response - - if (!success) { - return false; - } - - if (test->success) { - ut_compare("Didn't get Ack back", reply->opcode, MavlinkFTP::kRspAck); - ut_compare("Incorrect payload size", reply->size, test->reply_size); - - } else { - ut_compare("Didn't get Nak back", reply->opcode, MavlinkFTP::kRspNak); - ut_compare("Incorrect payload size", reply->size, test->reply_size); - ut_compare("Incorrect error code", reply->data[0], test->error_code); - } - } - - return true; -} - -bool MavlinkFtpTest::_createdirectory_test() -{ - MavlinkFTP::PayloadHeader payload {}; - const MavlinkFTP::PayloadHeader *reply; - - struct _testCase { - const char *dir; - bool success; - uint8_t reply_size; - uint8_t error_code; - }; - static const struct _testCase rgTestCases[] = { - { _unittest_microsd_dir, true, 0, MavlinkFTP::kErrNone}, - { _unittest_microsd_dir, false, 1, MavlinkFTP::kErrFailFileExists}, -#ifdef __PX4_NUTTX - { PX4_MAVLINK_TEST_DATA_DIR "/bogus/bogus", false, 2, MavlinkFTP::kErrFailErrno} // on NuttX missing folders is EIO -#else - { PX4_MAVLINK_TEST_DATA_DIR "/bogus/bogus", false, 1, MavlinkFTP::kErrFileNotFound} // on Linux it is ENOENT -#endif - }; - - for (size_t i = 0; i < sizeof(rgTestCases) / sizeof(rgTestCases[0]); i++) { - const struct _testCase *test = &rgTestCases[i]; - - payload.opcode = MavlinkFTP::kCmdCreateDirectory; - payload.offset = 0; - payload.size = strlen(test->dir) + 1; - - bool success = _send_receive_msg(&payload, // FTP payload header - (uint8_t *)test->dir, // Data to start into FTP message payload - payload.size, // size in bytes of data - &reply); // Payload inside FTP message response - - if (!success) { - return false; - } - - if (test->success) { - ut_compare("Didn't get Ack back", reply->opcode, MavlinkFTP::kRspAck); - ut_compare("Incorrect payload size", reply->size, test->reply_size); - - } else { - ut_compare("Didn't get Nak back", reply->opcode, MavlinkFTP::kRspNak); - ut_compare("Incorrect error code", reply->data[0], test->error_code); - ut_compare("Incorrect payload size", reply->size, test->reply_size); - } - } - - return true; -} - -bool MavlinkFtpTest::_removefile_test() -{ - MavlinkFTP::PayloadHeader payload {}; - const MavlinkFTP::PayloadHeader *reply; - int fd; - - struct _testCase { - const char *file; - bool success; - uint8_t reply_size; - uint8_t error_code; - }; - static const struct _testCase rgTestCases[] = { -#ifdef __PX4_NUTTX - { "/bogus", false, 1, MavlinkFTP::kErrFailFileProtected }, -#else - { "/bogus", false, 1, MavlinkFTP::kErrFileNotFound }, -#endif - { _unittest_microsd_dir, false, 2, MavlinkFTP::kErrFailErrno }, - { _unittest_microsd_file, true, 0, MavlinkFTP::kErrNone }, - { _unittest_microsd_file, false, 1, MavlinkFTP::kErrFileNotFound }, - }; - - ut_compare("mkdir failed", ::mkdir(_unittest_microsd_dir, S_IRWXU | S_IRWXG | S_IRWXO), 0); - ut_assert("open failed", (fd = ::open(_unittest_microsd_file, O_CREAT | O_EXCL, S_IRWXU | S_IRWXG | S_IRWXO)) != -1); - ::close(fd); - - for (size_t i = 0; i < sizeof(rgTestCases) / sizeof(rgTestCases[0]); i++) { - const struct _testCase *test = &rgTestCases[i]; - - payload.opcode = MavlinkFTP::kCmdRemoveFile; - payload.offset = 0; - payload.size = strlen(test->file) + 1; - - bool success = _send_receive_msg(&payload, // FTP payload header - (uint8_t *)test->file, // Data to start into FTP message payload - payload.size, // size in bytes of data - &reply); // Payload inside FTP message response - - if (!success) { - return false; - } - - if (test->success) { - ut_compare("Didn't get Ack back", reply->opcode, MavlinkFTP::kRspAck); - ut_compare("Incorrect payload size", reply->size, test->reply_size); - - } else { - ut_compare("Didn't get Nak back", reply->opcode, MavlinkFTP::kRspNak); - ut_compare("Incorrect payload size", reply->size, test->reply_size); - ut_compare("Incorrect error code", reply->data[0], test->error_code); - } - } - - return true; -} - -/// Static method used as callback from MavlinkFTP for generic use. This method will be called by MavlinkFTP when -/// it needs to send a message out on Mavlink. -void MavlinkFtpTest::receive_message_handler_generic(const mavlink_file_transfer_protocol_t *ftp_req, void *worker_data) -{ - ((MavlinkFtpTest *)worker_data)->_receive_message_handler_generic(ftp_req); -} - -void MavlinkFtpTest::_receive_message_handler_generic(const mavlink_file_transfer_protocol_t *ftp_req) -{ - // Move the message into our own member variable - memcpy(&_reply_msg, ftp_req, sizeof(mavlink_file_transfer_protocol_t)); -} - -/// Static method used as callback from MavlinkFTP for stream download testing. This method will be called by MavlinkFTP when -/// it needs to send a message out on Mavlink. -void MavlinkFtpTest::receive_message_handler_burst(const mavlink_file_transfer_protocol_t *ftp_req, void *worker_data) -{ - BurstInfo *burst_info = (BurstInfo *)worker_data; - burst_info->ftp_test_class->_receive_message_handler_burst(ftp_req, burst_info); -} - -bool MavlinkFtpTest::_receive_message_handler_burst(const mavlink_file_transfer_protocol_t *ftp_msg, - BurstInfo *burst_info) -{ - const MavlinkFTP::PayloadHeader *reply{nullptr}; - uint32_t expected_bytes; - - _decode_message(ftp_msg, &reply); - - switch (burst_info->burst_state) { - case burst_state_first_ack: - ut_compare("Didn't get Ack back", reply->opcode, MavlinkFTP::kRspAck); - ut_compare("Offset incorrect", reply->offset, 0); - - expected_bytes = burst_info->single_packet_file ? burst_info->file_size : MAX_DATA_LEN; - ut_compare("Payload size incorrect", reply->size, expected_bytes); - ut_compare("burst_complete incorrect", reply->burst_complete, 0); - ut_compare("File contents differ", memcmp(reply->data, burst_info->file_bytes, expected_bytes), 0); - - // Setup for next expected message - burst_info->burst_state = burst_info->single_packet_file ? burst_state_nak_eof : burst_state_last_ack; - - ut_assert("Remaining stream packets missing", _ftp_server->get_size()); - _ftp_server->send(); - break; - - case burst_state_last_ack: - ut_compare("Didn't get Ack back", reply->opcode, MavlinkFTP::kRspAck); - ut_compare("Offset incorrect", reply->offset, MAX_DATA_LEN); - - expected_bytes = burst_info->file_size - MAX_DATA_LEN; - ut_compare("Payload size incorrect", reply->size, expected_bytes); - ut_compare("burst_complete incorrect", reply->burst_complete, 0); - ut_compare("File contents differ", memcmp(reply->data, &burst_info->file_bytes[MAX_DATA_LEN], expected_bytes), 0); - - // Setup for next expected message - burst_info->burst_state = burst_state_nak_eof; - - ut_assert("Remaining stream packets missing", _ftp_server->get_size()); - _ftp_server->send(); - break; - - case burst_state_nak_eof: - // Signal complete - burst_info->burst_state = burst_state_complete; - ut_compare("All packets should have been seent", _ftp_server->get_size(), 0); - break; - - } - - return true; -} - -/// @brief Decode and validate the incoming message -bool MavlinkFtpTest::_decode_message(const mavlink_file_transfer_protocol_t *ftp_msg, ///< Incoming FTP message - const MavlinkFTP::PayloadHeader **payload) ///< Payload inside FTP message response -{ - // Make sure the targets are correct - ut_compare("Target network non-zero", ftp_msg->target_network, 0); - ut_compare("Target system id mismatch", ftp_msg->target_system, clientSystemId); - ut_compare("Target component id mismatch", ftp_msg->target_component, clientComponentId); - - *payload = reinterpret_cast(ftp_msg->payload); - - // Make sure we have a good sequence number - ut_compare("Sequence number mismatch", (*payload)->seq_number, _expected_seq_number); - _expected_seq_number++; - - return true; -} - -/// @brief Initializes an FTP message into a mavlink message -bool MavlinkFtpTest::_setup_ftp_msg(const MavlinkFTP::PayloadHeader *payload_header, ///< FTP payload header - const uint8_t *data, ///< Data to start into FTP message payload - const uint8_t data_len, ///< Data len - mavlink_message_t *msg) ///< Returned mavlink message -{ - uint8_t payload_bytes[MAVLINK_MSG_FILE_TRANSFER_PROTOCOL_FIELD_PAYLOAD_LEN] = {}; - MavlinkFTP::PayloadHeader *payload = reinterpret_cast(payload_bytes); - - memcpy(payload, payload_header, sizeof(MavlinkFTP::PayloadHeader)); - - payload->seq_number = _expected_seq_number++; - - if (data_len != 0) { - ut_assert("payload size incorrect", data_len == payload->size); - memcpy(payload->data, data, data_len); - } - - payload->burst_complete = 0; - payload->padding = 0; - - msg->checksum = 0; - mavlink_msg_file_transfer_protocol_pack(clientSystemId, // Sender system id - clientComponentId, // Sender component id - msg, // Message to pack payload into - 0, // Target network - serverSystemId, // Target system id - serverComponentId, // Target component id - payload_bytes); // Payload to pack into message - - return true; -} - -/// @brief Sends the specified FTP message to the server and returns response -bool MavlinkFtpTest::_send_receive_msg(MavlinkFTP::PayloadHeader *payload_header, ///< FTP payload header - const uint8_t *data, ///< Data to start into FTP message payload - const size_t data_len, ///< Size of data - const MavlinkFTP::PayloadHeader **payload_reply) ///< Payload inside FTP message response -{ - mavlink_message_t msg; - - ut_assert("data_len out of range", data_len < UINT8_MAX); - - _setup_ftp_msg(payload_header, data, static_cast(data_len), &msg); - - _ftp_server->handle_message(&msg); - return _decode_message(&_reply_msg, payload_reply); -} - -/// @brief Cleans up an files created on microsd during testing -void MavlinkFtpTest::_cleanup_microsd() -{ - ::unlink(_unittest_microsd_file); - ::rmdir(_unittest_microsd_dir); -} - -/// @brief Runs all the unit tests -bool MavlinkFtpTest::run_tests() -{ - ut_run_test(_ack_test); - ut_run_test(_bad_opcode_test); - ut_run_test(_bad_datasize_test); - ut_run_test(_list_test); - ut_run_test(_list_eof_test); - ut_run_test(_open_badfile_test); - ut_run_test(_open_terminate_test); - ut_run_test(_terminate_badsession_test); - ut_run_test(_read_test); - ut_run_test(_read_badsession_test); - ut_run_test(_burst_test); - ut_run_test(_removedirectory_test); - ut_run_test(_createdirectory_test); - ut_run_test(_removefile_test); - - return (_tests_failed == 0); - -} - -ut_declare_test(mavlink_ftp_test, MavlinkFtpTest) diff --git a/src/modules/mavlink/mavlink_tests/mavlink_ftp_test.h b/src/modules/mavlink/mavlink_tests/mavlink_ftp_test.h deleted file mode 100644 index 46da67c5f1..0000000000 --- a/src/modules/mavlink/mavlink_tests/mavlink_ftp_test.h +++ /dev/null @@ -1,139 +0,0 @@ -/**************************************************************************** - * - * Copyright (C) 2014 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/// @file mavlink_ftp_test.h -/// @author Don Gagne - -#pragma once - -#include -#include "../mavlink_bridge_header.h" -#include "../mavlink_ftp.h" -#include "../mavlink_main.h" - -class MavlinkFtpTest : public UnitTest -{ -public: - MavlinkFtpTest(); - virtual ~MavlinkFtpTest() = default; - - virtual bool run_tests(void); - - static void receive_message_handler_generic(const mavlink_file_transfer_protocol_t *ftp_req, void *worker_data); - - /// Worker data for stream handler - struct BurstInfo { - MavlinkFtpTest *ftp_test_class; - int burst_state; - bool single_packet_file; - uint32_t file_size; - uint8_t *file_bytes; - }; - - static void receive_message_handler_burst(const mavlink_file_transfer_protocol_t *ftp_req, void *worker_data); - - static const uint8_t serverSystemId = 50; ///< System ID for server - static const uint8_t serverComponentId = 1; ///< Component ID for server - static const uint8_t serverChannel = 0; ///< Channel to send to - - static const uint8_t clientSystemId = 1; ///< System ID for client - static const uint8_t clientComponentId = 0; ///< Component ID for client - - // We don't want any of these - MavlinkFtpTest(const MavlinkFtpTest &); - MavlinkFtpTest &operator=(const MavlinkFtpTest &); - -private: - virtual void _init(void); - virtual void _cleanup(void); - - bool _create_test_files(void); - bool _remove_test_files(void); - bool _ack_test(void); - bool _bad_opcode_test(void); - bool _bad_datasize_test(void); - bool _list_test(void); - bool _list_eof_test(void); - bool _open_badfile_test(void); - bool _open_terminate_test(void); - bool _terminate_badsession_test(void); - bool _read_test(void); - bool _read_badsession_test(void); - bool _burst_test(void); - bool _removedirectory_test(void); - bool _createdirectory_test(void); - bool _removefile_test(void); - - void _receive_message_handler_generic(const mavlink_file_transfer_protocol_t *ftp_req); - bool _setup_ftp_msg(const MavlinkFTP::PayloadHeader *payload_header, - const uint8_t *data, const uint8_t data_len, - mavlink_message_t *msg); - bool _decode_message(const mavlink_file_transfer_protocol_t *ftp_msg, const MavlinkFTP::PayloadHeader **payload); - bool _send_receive_msg(MavlinkFTP::PayloadHeader *payload_header, - const uint8_t *data, - const size_t data_len, - const MavlinkFTP::PayloadHeader **payload_reply); - void _cleanup_microsd(void); - - /// A single download test case - struct DownloadTestCase { - const char *file; - const uint16_t length; - bool singlePacketRead; - bool exactlyFillPacket; - }; - - /// The set of test cases for download testing - static const DownloadTestCase _rgDownloadTestCases[]; - - /// States for stream download handler - enum { - burst_state_first_ack, - burst_state_last_ack, - burst_state_nak_eof, - burst_state_complete - }; - - bool _receive_message_handler_burst(const mavlink_file_transfer_protocol_t *ftp_req, BurstInfo *burst_info); - - MavlinkFTP *_ftp_server; - Mavlink _mavlink; - uint16_t _expected_seq_number; - - mavlink_file_transfer_protocol_t _reply_msg; - - static const char _unittest_microsd_dir[]; - static const char _unittest_microsd_file[]; -}; - -bool mavlink_ftp_test(void); diff --git a/src/modules/fw_att_control/fw_yaw_controller.h b/src/modules/mavlink/streams/ESC_EEPROM.hpp similarity index 52% rename from src/modules/fw_att_control/fw_yaw_controller.h rename to src/modules/mavlink/streams/ESC_EEPROM.hpp index e6f9ff9795..9f078887c7 100644 --- a/src/modules/fw_att_control/fw_yaw_controller.h +++ b/src/modules/mavlink/streams/ESC_EEPROM.hpp @@ -1,6 +1,6 @@ /**************************************************************************** * - * Copyright (c) 2020-2022 PX4 Development Team. All rights reserved. + * Copyright (c) 2026 PX4 Development Team. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -31,49 +31,59 @@ * ****************************************************************************/ -/** - * @file fw_yaw_controller.h - * Definition of a simple coordinated turn controller. - * - * Acknowledgements: - * - * The control design is based on a design - * by Paul Riseborough and Andrew Tridgell, 2013, - * which in turn is based on initial work of - * Jonathan Challinger, 2012. - */ +#ifndef ESC_EEPROM_HPP +#define ESC_EEPROM_HPP -#ifndef FW_YAW_CONTROLLER_H -#define FW_YAW_CONTROLLER_H +#include -class YawController +class MavlinkStreamEscEeprom : public MavlinkStream { public: - YawController() = default; - ~YawController() = default; + static MavlinkStream *new_instance(Mavlink *mavlink) { return new MavlinkStreamEscEeprom(mavlink); } - /** - * @brief Calculates both euler and body yaw rate setpoints for coordinated turn based on current attitude and airspeed - * - * @param roll_setpoint roll setpoint [rad] - * @param euler_pitch_rate_setpoint euler pitch rate setpoint [rad/s] - * @param roll estimated roll [rad] - * @param pitch estimated pitch [rad] - * @param airspeed airspeed [m/s] - * @return Roll body rate setpoint [rad/s] - */ - float control_yaw(float roll_setpoint, float euler_pitch_rate_setpoint, float roll, float pitch, - float airspeed); + static constexpr const char *get_name_static() { return "ESC_EEPROM"; } + static constexpr uint16_t get_id_static() { return MAVLINK_MSG_ID_ESC_EEPROM; } - void set_max_rate(float max_rate) { _max_rate = max_rate; } + const char *get_name() const override { return get_name_static(); } + uint16_t get_id() override { return get_id_static(); } - float get_euler_rate_setpoint() { return _euler_rate_setpoint; } - float get_body_rate_setpoint() { return _body_rate_setpoint; } + unsigned get_size() override + { + return _esc_eeprom_read_sub.advertised() ? MAVLINK_MSG_ID_ESC_EEPROM_LEN + MAVLINK_NUM_NON_PAYLOAD_BYTES : 0; + } private: - float _max_rate{}; - float _euler_rate_setpoint{}; - float _body_rate_setpoint{}; + explicit MavlinkStreamEscEeprom(Mavlink *mavlink) : MavlinkStream(mavlink) {} + + uORB::Subscription _esc_eeprom_read_sub{ORB_ID(esc_eeprom_read)}; + + bool emit_message(bool force) + { + esc_eeprom_read_s eeprom = {}; + + if (_esc_eeprom_read_sub.update(&eeprom) || force) { + mavlink_esc_eeprom_t msg = {}; + msg.firmware = eeprom.firmware; + msg.esc_index = eeprom.index; + msg.msg_index = 0; + msg.msg_count = 1; + size_t copy_len = eeprom.length < sizeof(eeprom.data) ? eeprom.length : sizeof(eeprom.data); + memcpy(msg.data, eeprom.data, copy_len); + msg.length = copy_len; + + mavlink_msg_esc_eeprom_send_struct(_mavlink->get_channel(), &msg); + + return true; + } + + return false; + } + + bool send() override + { + return emit_message(false); + } + }; -#endif // FW_YAW_CONTROLLER_H +#endif // ESC_EEPROM_HPP diff --git a/src/modules/mavlink/streams/ESC_INFO.hpp b/src/modules/mavlink/streams/ESC_INFO.hpp index d4066a2332..57dda6dbcd 100644 --- a/src/modules/mavlink/streams/ESC_INFO.hpp +++ b/src/modules/mavlink/streams/ESC_INFO.hpp @@ -52,7 +52,7 @@ public: unsigned get_size() override { static constexpr unsigned message_size = MAVLINK_MSG_ID_ESC_INFO_LEN + MAVLINK_NUM_NON_PAYLOAD_BYTES; - return _esc_status_subs.advertised_count() * message_size; + return MAX_NUM_MSGS * message_size; } private: @@ -66,106 +66,101 @@ private: static constexpr hrt_abstime ESC_TIMEOUT = 100000; - struct EscOutputInterfaceInfo { - uint16_t counter; - uint8_t esc_count; - uint8_t esc_connectiontype; - uint8_t esc_online_flags; - }; - struct EscInfo { hrt_abstime timestamp; uint16_t failure_flags; uint32_t error_count; int16_t temperature; + uint8_t connectiontype; bool online; }; - int _total_esc_count = {}; - EscOutputInterfaceInfo _interface[MAX_NUM_MSGS] = {}; + uint16_t _total_counter = {}; + uint8_t _total_esc_count = {}; EscInfo _escs[MAX_ESC_OUTPUTS] = {}; + uint16_t _instance_counter[ORB_MULTI_MAX_INSTANCES] = {}; + uint8_t _instance_esc_count[ORB_MULTI_MAX_INSTANCES] = {}; + void update_data() override { - int subscriber_count = math::min(_esc_status_subs.size(), MAX_NUM_MSGS); - - for (int i = 0; i < subscriber_count; i++) { + for (int i = 0; i < _esc_status_subs.size(); i++) { esc_status_s esc = {}; if (_esc_status_subs[i].update(&esc)) { - _interface[i].counter = esc.counter; - _interface[i].esc_count = esc.esc_count; - _interface[i].esc_connectiontype = esc.esc_connectiontype; + _instance_counter[i] = esc.counter; + _instance_esc_count[i] = esc.esc_count; - // Capture online_flags, we will map from index to motor number - uint8_t online_flags = esc.esc_online_flags; - _interface[i].esc_online_flags = 0; + uint16_t online_flags = esc.esc_online_flags; for (int j = 0; j < esc_status_s::CONNECTED_ESC_MAX; j++) { - bool is_motor = ((int)esc.esc[j].actuator_function >= esc_report_s::ACTUATOR_FUNCTION_MOTOR1) && - ((int)esc.esc[j].actuator_function <= esc_report_s::ACTUATOR_FUNCTION_MOTOR12); + bool is_motor = math::isInRange(esc.esc[j].actuator_function, + esc_report_s::ACTUATOR_FUNCTION_MOTOR1, esc_report_s::ACTUATOR_FUNCTION_MOTOR_MAX); if (is_motor) { - // Map OutputFunction number to index int index = (int)esc.esc[j].actuator_function - esc_report_s::ACTUATOR_FUNCTION_MOTOR1; - _escs[index].online = online_flags & (1 << j); - _escs[index].failure_flags = esc.esc[j].failures; - _escs[index].error_count = esc.esc[j].esc_errorcount; - _escs[index].timestamp = esc.esc[j].timestamp; - _escs[index].temperature = esc.esc[j].esc_temperature * 100.f; + + if (index >= 0 && index < MAX_ESC_OUTPUTS) { + _escs[index].online = online_flags & (1 << j); + _escs[index].failure_flags = esc.esc[j].failures; + _escs[index].error_count = esc.esc[j].esc_errorcount; + _escs[index].timestamp = esc.esc[j].timestamp; + _escs[index].temperature = esc.esc[j].esc_temperature * 100.f; + _escs[index].connectiontype = esc.esc_connectiontype; + } } } } } - int count = 0; + _total_counter = 0; + _total_esc_count = 0; - for (int i = 0; i < MAX_NUM_MSGS; i++) { - count += _interface[i].esc_count; + for (int i = 0; i < _esc_status_subs.size(); i++) { + _total_counter += _instance_counter[i]; + _total_esc_count += _instance_esc_count[i]; } - - _total_esc_count = count; } bool send() override { - bool updated = false; + if (_total_esc_count == 0) { + return false; + } - for (int i = 0; i < MAX_NUM_MSGS; i++) { + const int num_msgs = math::min((_total_esc_count + ESCS_PER_MSG - 1) / ESCS_PER_MSG, (int)MAX_NUM_MSGS); + const hrt_abstime now = hrt_absolute_time(); - hrt_abstime now = hrt_absolute_time(); + for (int i = 0; i < num_msgs; i++) { mavlink_esc_info_t msg = {}; msg.index = i * ESCS_PER_MSG; msg.time_usec = now; - msg.counter = _interface[i].counter; + msg.counter = _total_counter; msg.count = _total_esc_count; - msg.connection_type = _interface[i].esc_connectiontype; - msg.info = _interface[i].esc_online_flags; - - bool atleast_one_esc_updated = false; + msg.connection_type = 0; + msg.info = 0; for (int j = 0; j < ESCS_PER_MSG; j++) { EscInfo &esc = _escs[i * ESCS_PER_MSG + j]; - msg.info |= (esc.online << j); - if ((esc.timestamp != 0) && (esc.timestamp + ESC_TIMEOUT) > now) { + msg.info |= (esc.online << j); msg.failure_flags[j] = esc.failure_flags; msg.error_count[j] = esc.error_count; msg.temperature[j] = esc.temperature; - atleast_one_esc_updated = true; + + if (msg.connection_type == 0) { + msg.connection_type = esc.connectiontype; + } } } - if (atleast_one_esc_updated) { - mavlink_msg_esc_info_send_struct(_mavlink->get_channel(), &msg); - updated = true; - } + mavlink_msg_esc_info_send_struct(_mavlink->get_channel(), &msg); } - return updated; + return true; } }; diff --git a/src/modules/mavlink/streams/ESC_STATUS.hpp b/src/modules/mavlink/streams/ESC_STATUS.hpp index 925f77ab81..e5ff74ba29 100644 --- a/src/modules/mavlink/streams/ESC_STATUS.hpp +++ b/src/modules/mavlink/streams/ESC_STATUS.hpp @@ -52,7 +52,7 @@ public: unsigned get_size() override { static constexpr unsigned message_size = MAVLINK_MSG_ID_ESC_STATUS_LEN + MAVLINK_NUM_NON_PAYLOAD_BYTES; - return _esc_status_subs.advertised_count() * message_size; + return MAX_NUM_MSGS * message_size; } private: @@ -74,46 +74,59 @@ private: EscStatus _escs[MAX_ESC_OUTPUTS] = {}; + uint8_t _esc_count = {}; + uint8_t _instance_esc_count[ORB_MULTI_MAX_INSTANCES] = {}; + void update_data() override { - int subscriber_count = math::min(_esc_status_subs.size(), MAX_NUM_MSGS); - - for (int i = 0; i < subscriber_count; i++) { + for (int i = 0; i < _esc_status_subs.size(); i++) { esc_status_s esc = {}; if (_esc_status_subs[i].update(&esc)) { + _instance_esc_count[i] = esc.esc_count; + for (int j = 0; j < esc_status_s::CONNECTED_ESC_MAX; j++) { - bool is_motor = ((int)esc.esc[j].actuator_function >= esc_report_s::ACTUATOR_FUNCTION_MOTOR1) && - ((int)esc.esc[j].actuator_function <= esc_report_s::ACTUATOR_FUNCTION_MOTOR12); + const bool is_motor = math::isInRange(esc.esc[j].actuator_function, + esc_report_s::ACTUATOR_FUNCTION_MOTOR1, esc_report_s::ACTUATOR_FUNCTION_MOTOR_MAX); if (is_motor) { // Map OutputFunction number to index int index = (int)esc.esc[j].actuator_function - esc_report_s::ACTUATOR_FUNCTION_MOTOR1; - _escs[index].timestamp = esc.esc[j].timestamp; - _escs[index].rpm = esc.esc[j].esc_rpm; - _escs[index].voltage = esc.esc[j].esc_voltage; - _escs[index].current = esc.esc[j].esc_current; + + if (index >= 0 && index < MAX_ESC_OUTPUTS) { + _escs[index].timestamp = esc.esc[j].timestamp; + _escs[index].rpm = esc.esc[j].esc_rpm; + _escs[index].voltage = esc.esc[j].esc_voltage; + _escs[index].current = esc.esc[j].esc_current; + } } } } } + + _esc_count = 0; + + for (int i = 0; i < _esc_status_subs.size(); i++) { + _esc_count += _instance_esc_count[i]; + } } bool send() override { - bool updated = false; + if (_esc_count == 0) { + return false; + } - for (int i = 0; i < MAX_NUM_MSGS; i++) { + const int num_msgs = math::min((_esc_count + ESCS_PER_MSG - 1) / ESCS_PER_MSG, (int)MAX_NUM_MSGS); + const hrt_abstime now = hrt_absolute_time(); - hrt_abstime now = hrt_absolute_time(); + for (int i = 0; i < num_msgs; i++) { mavlink_esc_status_t msg = {}; msg.index = i * ESCS_PER_MSG; msg.time_usec = now; - bool atleast_one_esc_updated = false; - for (int j = 0; j < ESCS_PER_MSG; j++) { EscStatus &esc = _escs[i * ESCS_PER_MSG + j]; @@ -122,17 +135,13 @@ private: msg.rpm[j] = esc.rpm; msg.voltage[j] = esc.voltage; msg.current[j] = esc.current; - atleast_one_esc_updated = true; } } - if (atleast_one_esc_updated) { - mavlink_msg_esc_status_send_struct(_mavlink->get_channel(), &msg); - updated = true; - } + mavlink_msg_esc_status_send_struct(_mavlink->get_channel(), &msg); } - return updated; + return true; } }; diff --git a/src/modules/mavlink/streams/ESTIMATOR_SENSOR_FUSION_STATUS.hpp b/src/modules/mavlink/streams/ESTIMATOR_SENSOR_FUSION_STATUS.hpp new file mode 100644 index 0000000000..859a509dab --- /dev/null +++ b/src/modules/mavlink/streams/ESTIMATOR_SENSOR_FUSION_STATUS.hpp @@ -0,0 +1,132 @@ +/**************************************************************************** + * + * Copyright (c) 2026 PX4 Development Team. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name PX4 nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +#ifndef ESTIMATOR_SENSOR_FUSION_STATUS_HPP +#define ESTIMATOR_SENSOR_FUSION_STATUS_HPP + +#include +#include + +/** + * Array index = ESTIMATOR_SENSOR_FUSION_SOURCE - 1: + * [0] GPS [1] OF [2] EV [3] AGP + * [4] BARO [5] RNG [6] MAG [7] ASPD [8] RNGBCN + * + * Each element is a per-instance bitmask (bit 0 = instance 0, etc.). + */ + +class MavlinkStreamEstimatorSensorFusionStatus : public MavlinkStream +{ +public: + static MavlinkStream *new_instance(Mavlink *mavlink) { return new MavlinkStreamEstimatorSensorFusionStatus(mavlink); } + + static constexpr const char *get_name_static() { return "ESTIMATOR_SENSOR_FUSION_STATUS"; } + static constexpr uint16_t get_id_static() { return MAVLINK_MSG_ID_ESTIMATOR_SENSOR_FUSION_STATUS; } + + const char *get_name() const override { return get_name_static(); } + uint16_t get_id() override { return get_id_static(); } + + unsigned get_size() override + { + return _estimator_fusion_control_sub.advertised() ? MAVLINK_MSG_ID_ESTIMATOR_SENSOR_FUSION_STATUS_LEN + MAVLINK_NUM_NON_PAYLOAD_BYTES : 0; + } + +private: + // Array indices matching ESTIMATOR_SENSOR_FUSION_SOURCE - 1 + static constexpr uint8_t IDX_GPS = 0; + static constexpr uint8_t IDX_OF = 1; + static constexpr uint8_t IDX_EV = 2; + static constexpr uint8_t IDX_AGP = 3; + static constexpr uint8_t IDX_BARO = 4; + static constexpr uint8_t IDX_RNG = 5; + static constexpr uint8_t IDX_MAG = 6; + static constexpr uint8_t IDX_ASPD = 7; + static constexpr uint8_t IDX_RNGBCN = 8; + + explicit MavlinkStreamEstimatorSensorFusionStatus(Mavlink *mavlink) : MavlinkStream(mavlink) {} + + uORB::Subscription _estimator_fusion_control_sub{ORB_ID(estimator_fusion_control)}; + + bool send() override + { + estimator_fusion_control_s fc; + + if (_estimator_fusion_control_sub.update(&fc)) { + mavlink_estimator_sensor_fusion_status_t msg{}; + + for (int i = 0; i < 9; i++) { msg.test_ratio[i] = NAN; } + + // intended: sensor enabled by user AND CTRL param not disabled + for (int i = 0; i < 2; i++) { + if (fc.gps_intended[i]) { msg.intended[IDX_GPS] |= (1u << i); } + } + + msg.intended[IDX_OF] = fc.of_intended; + msg.intended[IDX_EV] = fc.ev_intended; + msg.intended[IDX_BARO] = fc.baro_intended; + msg.intended[IDX_RNG] = fc.rng_intended; + msg.intended[IDX_MAG] = fc.mag_intended; + msg.intended[IDX_ASPD] = fc.aspd_intended; + msg.intended[IDX_RNGBCN] = fc.rngbcn_intended; + + for (int i = 0; i < 4; i++) { + if (fc.agp_intended[i]) { msg.intended[IDX_AGP] |= (1u << i); } + } + + // active: estimator is actually fusing data from this source + for (int i = 0; i < 2; i++) { + if (fc.gps_active[i]) { msg.active[IDX_GPS] |= (1u << i); } + } + + msg.active[IDX_OF] = fc.of_active; + msg.active[IDX_EV] = fc.ev_active; + + for (int i = 0; i < 4; i++) { + if (fc.agp_active[i]) { msg.active[IDX_AGP] |= (1u << i); } + } + + msg.active[IDX_BARO] = fc.baro_active; + msg.active[IDX_RNG] = fc.rng_active; + msg.active[IDX_MAG] = fc.mag_active; + msg.active[IDX_ASPD] = fc.aspd_active; + msg.active[IDX_RNGBCN] = fc.rngbcn_active; + + mavlink_msg_estimator_sensor_fusion_status_send_struct(_mavlink->get_channel(), &msg); + return true; + } + + return false; + } +}; + +#endif // ESTIMATOR_SENSOR_FUSION_STATUS_HPP diff --git a/src/modules/mavlink/streams/GLOBAL_POSITION.hpp b/src/modules/mavlink/streams/GLOBAL_POSITION_SENSOR.hpp similarity index 63% rename from src/modules/mavlink/streams/GLOBAL_POSITION.hpp rename to src/modules/mavlink/streams/GLOBAL_POSITION_SENSOR.hpp index ed8a43cfdf..835e4fae9b 100644 --- a/src/modules/mavlink/streams/GLOBAL_POSITION.hpp +++ b/src/modules/mavlink/streams/GLOBAL_POSITION_SENSOR.hpp @@ -31,75 +31,79 @@ * ****************************************************************************/ -#ifndef GLOBAL_POSITION_HPP -#define GLOBAL_POSITION_HPP +#ifndef GLOBAL_POSITION_SENSOR_HPP +#define GLOBAL_POSITION_SENSOR_HPP #include #include -class MavlinkStreamGLobalPosition : public MavlinkStream +class MavlinkStreamGlobalPositionSensor : public MavlinkStream { public: - static MavlinkStream *new_instance(Mavlink *mavlink) { return new MavlinkStreamGLobalPosition(mavlink); } + static MavlinkStream *new_instance(Mavlink *mavlink) { return new MavlinkStreamGlobalPositionSensor(mavlink); } - static constexpr const char *get_name_static() { return "GLOBAL_POSITION"; } - static constexpr uint16_t get_id_static() { return MAVLINK_MSG_ID_GLOBAL_POSITION; } + static constexpr const char *get_name_static() { return "GLOBAL_POSITION_SENSOR"; } + static constexpr uint16_t get_id_static() { return MAVLINK_MSG_ID_GLOBAL_POSITION_SENSOR; } const char *get_name() const override { return get_name_static(); } uint16_t get_id() override { return get_id_static(); } unsigned get_size() override { - return _aux_global_position_sub.advertised() ? (MAVLINK_MSG_ID_GLOBAL_POSITION_LEN + + return _aux_global_position_sub.advertised() ? (MAVLINK_MSG_ID_GLOBAL_POSITION_SENSOR_LEN + MAVLINK_NUM_NON_PAYLOAD_BYTES) : 0; } private: - explicit MavlinkStreamGLobalPosition(Mavlink *mavlink) : MavlinkStream(mavlink) {} + explicit MavlinkStreamGlobalPositionSensor(Mavlink *mavlink) : MavlinkStream(mavlink) {} - uORB::Subscription _aux_global_position_sub{ORB_ID(aux_global_position)}; + uORB::SubscriptionMultiArray _aux_global_position_sub{ORB_ID::aux_global_position}; bool send() override { - vehicle_global_position_s pos{}; + aux_global_position_s pos{}; + bool sent = false; - if (_aux_global_position_sub.update(&pos)) { - mavlink_global_position_t msg{}; + for (int i = 0; i < _aux_global_position_sub.size(); i++) { + if (_aux_global_position_sub[i].update(&pos)) { + mavlink_global_position_sensor_t msg{}; - msg.id = UINT8_C(1); - msg.time_usec = pos.timestamp; - msg.source = GLOBAL_POSITION_UNKNOWN; - msg.flags = 0; + msg.target_system = 0; + msg.target_component = 0; + msg.id = pos.id; + msg.time_usec = pos.timestamp; + msg.source = pos.source; - if (PX4_ISFINITE(pos.lat)) { - msg.lat = static_cast(pos.lat * 1e7); + if (PX4_ISFINITE(pos.lat)) { + msg.lat = static_cast(pos.lat * 1e7); - } else { - msg.lat = INT32_MAX; + } else { + msg.lat = INT32_MAX; + } + + if (PX4_ISFINITE(pos.lon)) { + msg.lon = static_cast(pos.lon * 1e7); + + } else { + msg.lon = INT32_MAX; + } + + msg.alt = pos.alt; + msg.alt_ellipsoid = pos.alt; + + msg.eph = pos.eph; + msg.epv = pos.epv; + + + mavlink_msg_global_position_sensor_send_struct(_mavlink->get_channel(), &msg); + + sent = true; } - - if (PX4_ISFINITE(pos.lon)) { - msg.lon = static_cast(pos.lon * 1e7); - - } else { - msg.lon = INT32_MAX; - } - - msg.alt = pos.alt; - msg.alt_ellipsoid = pos.alt_ellipsoid; - - msg.eph = pos.eph; - msg.epv = pos.epv; - - - mavlink_msg_global_position_send_struct(_mavlink->get_channel(), &msg); - - return true; } - return false; + return sent; } }; -#endif // GLOBAL_POSITION_HPP +#endif // GLOBAL_POSITION_SENSOR_HPP diff --git a/src/modules/mavlink/streams/GPS2_RAW.hpp b/src/modules/mavlink/streams/GPS2_RAW.hpp index 025421e471..9ae6f37792 100644 --- a/src/modules/mavlink/streams/GPS2_RAW.hpp +++ b/src/modules/mavlink/streams/GPS2_RAW.hpp @@ -68,7 +68,7 @@ private: hrt_abstime now{}; if (_sensor_gps_sub.update(&gps)) { - if (gps.time_utc_usec > 0) { + if (gps.time_utc_usec <= 0) { msg.time_usec = gps.timestamp; } else { diff --git a/src/modules/mavlink/streams/GPS_RAW_INT.hpp b/src/modules/mavlink/streams/GPS_RAW_INT.hpp index a3b7620fb7..6f68fe1c83 100644 --- a/src/modules/mavlink/streams/GPS_RAW_INT.hpp +++ b/src/modules/mavlink/streams/GPS_RAW_INT.hpp @@ -68,7 +68,7 @@ private: hrt_abstime now{}; if (_sensor_gps_sub.update(&gps)) { - if (gps.time_utc_usec > 0) { + if (gps.time_utc_usec <= 0) { msg.time_usec = gps.timestamp; } else { diff --git a/src/modules/mavlink/streams/HIGH_LATENCY2.hpp b/src/modules/mavlink/streams/HIGH_LATENCY2.hpp index 74ca48d554..022fd517eb 100644 --- a/src/modules/mavlink/streams/HIGH_LATENCY2.hpp +++ b/src/modules/mavlink/streams/HIGH_LATENCY2.hpp @@ -55,6 +55,7 @@ #include #include #include +#include #include #include #include @@ -135,6 +136,7 @@ private: updated |= write_heading_if_updated(&msg); updated |= write_mission_result_if_updated(&msg); updated |= write_failsafe_flags(&msg); + updated |= write_failure_detector_status(&msg); // these topics are already updated in update_data() and thus we just copy them here write_airspeed(&msg); @@ -454,10 +456,6 @@ private: } } - if (status.failure_detector_status & vehicle_status_s::FAILURE_MOTOR) { - msg->failure_flags |= HL_FAILURE_FLAG_ENGINE; - } - // flight mode union px4_custom_mode custom_mode {get_px4_custom_mode(status.nav_state)}; msg->custom_mode = custom_mode.custom_mode_hl; @@ -492,6 +490,21 @@ private: return false; } + bool write_failure_detector_status(mavlink_high_latency2_t *msg) + { + failure_detector_status_s fd_status; + + if (_failure_detector_status_sub.update(&fd_status)) { + if (fd_status.fd_motor) { + msg->failure_flags |= HL_FAILURE_FLAG_ENGINE; + } + + return true; + } + + return false; + } + bool write_wind(mavlink_high_latency2_t *msg) { wind_s wind; @@ -665,6 +678,7 @@ private: uORB::Subscription _gps_sub{ORB_ID(vehicle_gps_position)}; uORB::Subscription _mission_result_sub{ORB_ID(mission_result)}; uORB::Subscription _status_sub{ORB_ID(vehicle_status)}; + uORB::Subscription _failure_detector_status_sub{ORB_ID(failure_detector_status)}; uORB::Subscription _failsafe_flags_sub{ORB_ID(failsafe_flags)}; uORB::Subscription _tecs_status_sub{ORB_ID(tecs_status)}; uORB::Subscription _wind_sub{ORB_ID(wind)}; diff --git a/src/modules/mc_att_control/AttitudeControl/AttitudeControl.hpp b/src/modules/mc_att_control/AttitudeControl/AttitudeControl.hpp index e435e91262..d90c623081 100644 --- a/src/modules/mc_att_control/AttitudeControl/AttitudeControl.hpp +++ b/src/modules/mc_att_control/AttitudeControl/AttitudeControl.hpp @@ -103,7 +103,7 @@ public: private: matrix::Vector3f _proportional_gain; matrix::Vector3f _rate_limit; - float _yaw_w{0.f}; ///< yaw weight [0,1] to deprioritize caompared to roll and pitch + float _yaw_w{0.f}; ///< yaw weight [0,1] to deprioritize compared to roll and pitch matrix::Quatf _attitude_setpoint_q; ///< latest known attitude setpoint e.g. from position control float _yawspeed_setpoint{0.f}; ///< latest known yawspeed feed-forward setpoint diff --git a/src/modules/mc_att_control/CMakeLists.txt b/src/modules/mc_att_control/CMakeLists.txt index d08d100b1d..94842013cd 100644 --- a/src/modules/mc_att_control/CMakeLists.txt +++ b/src/modules/mc_att_control/CMakeLists.txt @@ -41,6 +41,8 @@ px4_add_module( SRCS mc_att_control_main.cpp mc_att_control.hpp + MODULE_CONFIG + mc_att_control_params.yaml DEPENDS AttitudeControl mathlib diff --git a/src/modules/mc_att_control/mc_att_control_params.c b/src/modules/mc_att_control/mc_att_control_params.c deleted file mode 100644 index a503900cff..0000000000 --- a/src/modules/mc_att_control/mc_att_control_params.c +++ /dev/null @@ -1,160 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2013-2015 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file mc_att_control_params.c - * Parameters for multicopter attitude controller. - * - * @author Lorenz Meier - * @author Anton Babushkin - */ - -/** - * Roll P gain - * - * Roll proportional gain, i.e. desired angular speed in rad/s for error 1 rad. - * - * @min 0.0 - * @max 12 - * @decimal 2 - * @increment 0.1 - * @group Multicopter Attitude Control - */ -PARAM_DEFINE_FLOAT(MC_ROLL_P, 4.0f); - -/** - * Pitch P gain - * - * Pitch proportional gain, i.e. desired angular speed in rad/s for error 1 rad. - * - * @min 0.0 - * @max 12 - * @decimal 2 - * @increment 0.1 - * @group Multicopter Attitude Control - */ -PARAM_DEFINE_FLOAT(MC_PITCH_P, 4.0f); - -/** - * Yaw P gain - * - * Yaw proportional gain, i.e. desired angular speed in rad/s for error 1 rad. - * - * @min 0.0 - * @max 5 - * @decimal 2 - * @increment 0.1 - * @group Multicopter Attitude Control - */ -PARAM_DEFINE_FLOAT(MC_YAW_P, 2.8f); - -/** - * Yaw weight - * - * A fraction [0,1] deprioritizing yaw compared to roll and pitch in non-linear attitude control. - * Deprioritizing yaw is necessary because multicopters have much less control authority - * in yaw compared to the other axes and it makes sense because yaw is not critical for - * stable hovering or 3D navigation. - * - * For yaw control tuning use MC_YAW_P. This ratio has no impact on the yaw gain. - * - * @min 0.0 - * @max 1.0 - * @decimal 2 - * @increment 0.1 - * @group Multicopter Attitude Control - */ -PARAM_DEFINE_FLOAT(MC_YAW_WEIGHT, 0.4f); - -/** - * Max roll rate - * - * Limit for roll rate in manual and auto modes (except acro). - * Has effect for large rotations in autonomous mode, to avoid large control - * output and mixer saturation. - * - * This is not only limited by the vehicle's properties, but also by the maximum - * measurement rate of the gyro. - * - * @unit deg/s - * @min 0.0 - * @max 1800.0 - * @decimal 1 - * @increment 5 - * @group Multicopter Attitude Control - */ -PARAM_DEFINE_FLOAT(MC_ROLLRATE_MAX, 220.0f); - -/** - * Max pitch rate - * - * Limit for pitch rate in manual and auto modes (except acro). - * Has effect for large rotations in autonomous mode, to avoid large control - * output and mixer saturation. - * - * This is not only limited by the vehicle's properties, but also by the maximum - * measurement rate of the gyro. - * - * @unit deg/s - * @min 0.0 - * @max 1800.0 - * @decimal 1 - * @increment 5 - * @group Multicopter Attitude Control - */ -PARAM_DEFINE_FLOAT(MC_PITCHRATE_MAX, 220.0f); - -/** - * Max yaw rate - * - * @unit deg/s - * @min 0.0 - * @max 1800.0 - * @decimal 1 - * @increment 5 - * @group Multicopter Attitude Control - */ -PARAM_DEFINE_FLOAT(MC_YAWRATE_MAX, 200.0f); - -/** - * Manual tilt input filter time constant - * - * Setting this parameter to 0 disables the filter - * - * @unit s - * @min 0.0 - * @max 2.0 - * @decimal 2 - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(MC_MAN_TILT_TAU, 0.0f); diff --git a/src/modules/mc_att_control/mc_att_control_params.yaml b/src/modules/mc_att_control/mc_att_control_params.yaml new file mode 100644 index 0000000000..00def08bc9 --- /dev/null +++ b/src/modules/mc_att_control/mc_att_control_params.yaml @@ -0,0 +1,109 @@ +module_name: mc_att_control +parameters: +- group: Multicopter Attitude Control + definitions: + MC_ROLL_P: + description: + short: Roll P gain + long: Roll proportional gain, i.e. desired angular speed in rad/s for error + 1 rad. + type: float + default: 4.0 + min: 0.0 + max: 12 + decimal: 2 + increment: 0.1 + MC_PITCH_P: + description: + short: Pitch P gain + long: Pitch proportional gain, i.e. desired angular speed in rad/s for error + 1 rad. + type: float + default: 4.0 + min: 0.0 + max: 12 + decimal: 2 + increment: 0.1 + MC_YAW_P: + description: + short: Yaw P gain + long: Yaw proportional gain, i.e. desired angular speed in rad/s for error + 1 rad. + type: float + default: 2.8 + min: 0.0 + max: 5 + decimal: 2 + increment: 0.1 + MC_YAW_WEIGHT: + description: + short: Yaw weight + long: |- + A fraction [0,1] deprioritizing yaw compared to roll and pitch in non-linear attitude control. + Deprioritizing yaw is necessary because multicopters have much less control authority + in yaw compared to the other axes and it makes sense because yaw is not critical for + stable hovering or 3D navigation. + + For yaw control tuning use MC_YAW_P. This ratio has no impact on the yaw gain. + type: float + default: 0.4 + min: 0.0 + max: 1.0 + decimal: 2 + increment: 0.1 + MC_ROLLRATE_MAX: + description: + short: Max roll rate + long: |- + Limit for roll rate in manual and auto modes (except acro). + Has effect for large rotations in autonomous mode, to avoid large control + output and mixer saturation. + + This is not only limited by the vehicle's properties, but also by the maximum + measurement rate of the gyro. + type: float + default: 220.0 + unit: deg/s + min: 0.0 + max: 1800.0 + decimal: 1 + increment: 5 + MC_PITCHRATE_MAX: + description: + short: Max pitch rate + long: |- + Limit for pitch rate in manual and auto modes (except acro). + Has effect for large rotations in autonomous mode, to avoid large control + output and mixer saturation. + + This is not only limited by the vehicle's properties, but also by the maximum + measurement rate of the gyro. + type: float + default: 220.0 + unit: deg/s + min: 0.0 + max: 1800.0 + decimal: 1 + increment: 5 + MC_YAWRATE_MAX: + description: + short: Max yaw rate + type: float + default: 200.0 + unit: deg/s + min: 0.0 + max: 1800.0 + decimal: 1 + increment: 5 +- group: Multicopter Position Control + definitions: + MC_MAN_TILT_TAU: + description: + short: Manual tilt input filter time constant + long: Setting this parameter to 0 disables the filter + type: float + default: 0.0 + unit: s + min: 0.0 + max: 2.0 + decimal: 2 diff --git a/src/modules/mc_autotune_attitude_control/CMakeLists.txt b/src/modules/mc_autotune_attitude_control/CMakeLists.txt index 62dfc9ca3c..a1b0fee33e 100644 --- a/src/modules/mc_autotune_attitude_control/CMakeLists.txt +++ b/src/modules/mc_autotune_attitude_control/CMakeLists.txt @@ -39,6 +39,8 @@ px4_add_module( SRCS mc_autotune_attitude_control.cpp mc_autotune_attitude_control.hpp + MODULE_CONFIG + mc_autotune_attitude_control_params.yaml DEPENDS hysteresis mathlib diff --git a/src/modules/mc_autotune_attitude_control/mc_autotune_attitude_control_params.c b/src/modules/mc_autotune_attitude_control/mc_autotune_attitude_control_params.c deleted file mode 100644 index c2df3fd8f6..0000000000 --- a/src/modules/mc_autotune_attitude_control/mc_autotune_attitude_control_params.c +++ /dev/null @@ -1,88 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2020-2021 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file mc_autotune_attitude_control_params.c - * - * Parameters used by the attitude auto-tuner - * - * @author Mathieu Bresciani - */ - -/** - * Multicopter autotune module enable - * - * @boolean - * @group Autotune - */ -PARAM_DEFINE_INT32(MC_AT_EN, 0); - - -/** - * Amplitude of the injected signal - * - * @min 0.1 - * @max 6.0 - * @decimal 1 - * @group Autotune - */ -PARAM_DEFINE_FLOAT(MC_AT_SYSID_AMP, 0.7); - -/** - * Controls when to apply the new gains - * - * After the auto-tuning sequence is completed, - * a new set of gains is available and can be applied - * immediately or after landing. - * - * WARNING Applying the gains in air is dangerous as there is no - * guarantee that those new gains will be able to stabilize - * the drone properly. - * - * @value 0 Do not apply the new gains (logging only) - * @value 1 Apply the new gains after disarm - * @value 2 WARNING Apply the new gains in air - * @group Autotune - */ -PARAM_DEFINE_INT32(MC_AT_APPLY, 1); - -/** - * Desired angular rate closed-loop rise time - * - * @min 0.01 - * @max 0.5 - * @decimal 2 - * @unit s - * @group Autotune - */ -PARAM_DEFINE_FLOAT(MC_AT_RISE_TIME, 0.14); diff --git a/src/modules/mc_autotune_attitude_control/mc_autotune_attitude_control_params.yaml b/src/modules/mc_autotune_attitude_control/mc_autotune_attitude_control_params.yaml new file mode 100644 index 0000000000..c971f0f600 --- /dev/null +++ b/src/modules/mc_autotune_attitude_control/mc_autotune_attitude_control_params.yaml @@ -0,0 +1,43 @@ +module_name: mc_autotune_attitude_control +parameters: +- group: Autotune + definitions: + MC_AT_EN: + description: + short: Multicopter autotune module enable + type: boolean + default: 0 + MC_AT_SYSID_AMP: + description: + short: Amplitude of the injected signal + type: float + default: 0.7 + min: 0.1 + max: 6.0 + decimal: 1 + MC_AT_APPLY: + description: + short: Controls when to apply the new gains + long: |- + After the auto-tuning sequence is completed, + a new set of gains is available and can be applied + immediately or after landing. + + WARNING Applying the gains in air is dangerous as there is no + guarantee that those new gains will be able to stabilize + the drone properly. + type: enum + values: + 0: Do not apply the new gains (logging only) + 1: Apply the new gains after disarm + 2: WARNING Apply the new gains in air + default: 1 + MC_AT_RISE_TIME: + description: + short: Desired angular rate closed-loop rise time + type: float + default: 0.14 + min: 0.01 + max: 0.5 + decimal: 2 + unit: s diff --git a/src/modules/mc_hover_thrust_estimator/CMakeLists.txt b/src/modules/mc_hover_thrust_estimator/CMakeLists.txt index 9504a18add..d09d6829fb 100644 --- a/src/modules/mc_hover_thrust_estimator/CMakeLists.txt +++ b/src/modules/mc_hover_thrust_estimator/CMakeLists.txt @@ -44,6 +44,8 @@ px4_add_module( SRCS MulticopterHoverThrustEstimator.cpp MulticopterHoverThrustEstimator.hpp + MODULE_CONFIG + hover_thrust_estimator_params.yaml DEPENDS hysteresis mathlib diff --git a/src/modules/mc_hover_thrust_estimator/hover_thrust_estimator_params.c b/src/modules/mc_hover_thrust_estimator/hover_thrust_estimator_params.c deleted file mode 100644 index fd46e23c95..0000000000 --- a/src/modules/mc_hover_thrust_estimator/hover_thrust_estimator_params.c +++ /dev/null @@ -1,132 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2020-2022 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file hover_thrust_estimator_params.c - * - * Parameters used by the hover thrust estimator - * - * @author Mathieu Bresciani - */ - -/** - * Hover thrust process noise - * - * Reduce to make the hover thrust estimate - * more stable, increase if the real hover thrust - * is expected to change quickly over time. - * - * @decimal 4 - * @min 0.0001 - * @max 1.0 - * @unit normalized_thrust/s - * @group Hover Thrust Estimator - */ -PARAM_DEFINE_FLOAT(HTE_HT_NOISE, 0.0036); - -/** - * Gate size for acceleration fusion - * - * Sets the number of standard deviations used - * by the innovation consistency test. - * - * @decimal 1 - * @min 1.0 - * @max 10.0 - * @unit SD - * @group Hover Thrust Estimator - */ -PARAM_DEFINE_FLOAT(HTE_ACC_GATE, 3.0); - -/** - * 1-sigma initial hover thrust uncertainty - * - * Sets the number of standard deviations used - * by the innovation consistency test. - * - * @decimal 3 - * @min 0.0 - * @max 1.0 - * @unit normalized_thrust - * @group Hover Thrust Estimator - */ -PARAM_DEFINE_FLOAT(HTE_HT_ERR_INIT, 0.1); - -/** - * Horizontal velocity threshold for sensitivity reduction - * - * Above this speed, the measurement noise is linearly increased - * to reduce the sensitivity of the estimator from biased measurement. - * - * Set to a low value on vehicles with large lifting surfaces. - * - * @decimal 1 - * @min 1.0 - * @max 20.0 - * @unit m/s - * @group Hover Thrust Estimator - */ -PARAM_DEFINE_FLOAT(HTE_VXY_THR, 10.0); - -/** - * Vertical velocity threshold for sensitivity reduction - * - * Above this speed, the measurement noise is linearly increased - * to reduce the sensitivity of the estimator from biased measurement. - * - * Set to a low value on vehicles affected by air drag when climbing or descending. - * - * @decimal 1 - * @min 1.0 - * @max 10.0 - * @unit m/s - * @group Hover Thrust Estimator - */ -PARAM_DEFINE_FLOAT(HTE_VZ_THR, 2.0); - -/** - * Max deviation from MPC_THR_HOVER - * - * Defines the range of the hover thrust estimate around MPC_THR_HOVER. - * A value of 0.2 with MPC_THR_HOVER at 0.5 results in a range of [0.3, 0.7]. - * - * Set to a large value if the vehicle operates in varying physical conditions that - * affect the required hover thrust strongly (e.g. differently sized payloads). - * - * @decimal 2 - * @min 0.01 - * @max 0.4 - * @unit normalized_thrust - * @group Hover Thrust Estimator - */ -PARAM_DEFINE_FLOAT(HTE_THR_RANGE, 0.2); diff --git a/src/modules/mc_hover_thrust_estimator/hover_thrust_estimator_params.yaml b/src/modules/mc_hover_thrust_estimator/hover_thrust_estimator_params.yaml new file mode 100644 index 0000000000..48821cc754 --- /dev/null +++ b/src/modules/mc_hover_thrust_estimator/hover_thrust_estimator_params.yaml @@ -0,0 +1,84 @@ +module_name: mc_hover_thrust_estimator +parameters: +- group: Hover Thrust Estimator + definitions: + HTE_HT_NOISE: + description: + short: Hover thrust process noise + long: |- + Reduce to make the hover thrust estimate + more stable, increase if the real hover thrust + is expected to change quickly over time. + type: float + default: 0.0036 + decimal: 4 + min: 0.0001 + max: 1.0 + unit: normalized_thrust/s + HTE_ACC_GATE: + description: + short: Gate size for acceleration fusion + long: |- + Sets the number of standard deviations used + by the innovation consistency test. + type: float + default: 3.0 + decimal: 1 + min: 1.0 + max: 10.0 + unit: SD + HTE_HT_ERR_INIT: + description: + short: 1-sigma initial hover thrust uncertainty + long: |- + Sets the number of standard deviations used + by the innovation consistency test. + type: float + default: 0.1 + decimal: 3 + min: 0.0 + max: 1.0 + unit: normalized_thrust + HTE_VXY_THR: + description: + short: Horizontal velocity threshold for sensitivity reduction + long: |- + Above this speed, the measurement noise is linearly increased + to reduce the sensitivity of the estimator from biased measurement. + + Set to a low value on vehicles with large lifting surfaces. + type: float + default: 10.0 + decimal: 1 + min: 1.0 + max: 20.0 + unit: m/s + HTE_VZ_THR: + description: + short: Vertical velocity threshold for sensitivity reduction + long: |- + Above this speed, the measurement noise is linearly increased + to reduce the sensitivity of the estimator from biased measurement. + + Set to a low value on vehicles affected by air drag when climbing or descending. + type: float + default: 2.0 + decimal: 1 + min: 1.0 + max: 10.0 + unit: m/s + HTE_THR_RANGE: + description: + short: Max deviation from MPC_THR_HOVER + long: |- + Defines the range of the hover thrust estimate around MPC_THR_HOVER. + A value of 0.2 with MPC_THR_HOVER at 0.5 results in a range of [0.3, 0.7]. + + Set to a large value if the vehicle operates in varying physical conditions that + affect the required hover thrust strongly (e.g. differently sized payloads). + type: float + default: 0.2 + decimal: 2 + min: 0.01 + max: 0.4 + unit: normalized_thrust diff --git a/src/modules/mc_nn_control/CMakeLists.txt b/src/modules/mc_nn_control/CMakeLists.txt index 3f47e751e7..ce28324bcf 100644 --- a/src/modules/mc_nn_control/CMakeLists.txt +++ b/src/modules/mc_nn_control/CMakeLists.txt @@ -44,6 +44,8 @@ px4_add_module( mc_nn_control.hpp control_net.cpp control_net.hpp + MODULE_CONFIG + mc_nn_control_params.yaml DEPENDS tensorflow_lite_micro px4_work_queue diff --git a/src/modules/mc_nn_control/mc_nn_control.cpp b/src/modules/mc_nn_control/mc_nn_control.cpp index 360d63c416..99ad9e0393 100644 --- a/src/modules/mc_nn_control/mc_nn_control.cpp +++ b/src/modules/mc_nn_control/mc_nn_control.cpp @@ -72,6 +72,10 @@ MulticopterNeuralNetworkControl::MulticopterNeuralNetworkControl() : MulticopterNeuralNetworkControl::~MulticopterNeuralNetworkControl() { + delete _interpreter; + _interpreter = nullptr; + _input_tensor = nullptr; + _output_tensor = nullptr; perf_free(_loop_perf); } @@ -88,6 +92,14 @@ bool MulticopterNeuralNetworkControl::init() int MulticopterNeuralNetworkControl::InitializeNetwork() { + if (_interpreter != nullptr) { + delete _interpreter; + _interpreter = nullptr; + } + + _input_tensor = nullptr; + _output_tensor = nullptr; + // Initialize the neural network const tflite::Model *control_model = ::tflite::GetModel(control_net_tflite); @@ -103,11 +115,18 @@ int MulticopterNeuralNetworkControl::InitializeNetwork() static uint8_t tensor_arena[kTensorArenaSize]; _interpreter = new tflite::MicroInterpreter(control_model, resolver, tensor_arena, kTensorArenaSize); + if (_interpreter == nullptr) { + PX4_ERR("interpreter alloc failed"); + return -1; + } + // Allocate memory for the model's tensors TfLiteStatus allocate_status = _interpreter->AllocateTensors(); if (allocate_status != kTfLiteOk) { PX4_ERR("AllocateTensors() failed"); + delete _interpreter; + _interpreter = nullptr; return -1; } @@ -115,6 +134,8 @@ int MulticopterNeuralNetworkControl::InitializeNetwork() if (_input_tensor == nullptr) { PX4_ERR("Input tensor is null"); + delete _interpreter; + _interpreter = nullptr; return -1; } diff --git a/src/modules/mc_nn_control/mc_nn_control.hpp b/src/modules/mc_nn_control/mc_nn_control.hpp index 112cfe9555..cb8fd6049e 100644 --- a/src/modules/mc_nn_control/mc_nn_control.hpp +++ b/src/modules/mc_nn_control/mc_nn_control.hpp @@ -149,9 +149,9 @@ private: uint8 _mode_request_id{231}; //Random value int8 _arming_check_id{-1}; int8 _mode_id{-1}; - tflite::MicroInterpreter *_interpreter; - TfLiteTensor *_input_tensor; - TfLiteTensor *_output_tensor; + tflite::MicroInterpreter *_interpreter{nullptr}; + TfLiteTensor *_input_tensor{nullptr}; + TfLiteTensor *_output_tensor{nullptr}; float _input_data[15]; trajectory_setpoint_s _trajectory_setpoint; vehicle_angular_velocity_s _angular_velocity; diff --git a/src/modules/mc_nn_control/mc_nn_control_params.yaml b/src/modules/mc_nn_control/mc_nn_control_params.yaml new file mode 100644 index 0000000000..3819ba2d2e --- /dev/null +++ b/src/modules/mc_nn_control/mc_nn_control_params.yaml @@ -0,0 +1,42 @@ +module_name: mc_nn_control +parameters: +- group: Neural Control + definitions: + MC_NN_EN: + description: + short: If true the neural network control is automatically started on boot + type: boolean + default: 1 + MC_NN_MAX_RPM: + description: + short: Max motor RPM for neural network normalization + long: The maximum RPM of the motors. Used to normalize the output of the neural + network + type: int32 + default: 22000 + min: 0 + max: 80000 + MC_NN_MIN_RPM: + description: + short: Min motor RPM for neural network normalization + long: The minimum RPM of the motors. Used to normalize the output of the neural + network + type: int32 + default: 1000 + min: 0 + max: 80000 + MC_NN_THRST_COEF: + description: + short: Motor thrust coefficient for NN normalization + long: Thrust coefficient of the motors. Used to normalize the output of the + neural network. Divided by 100 000 + type: float + default: 1.2 + min: 0.0 + max: 5.0 + MC_NN_MANL_CTRL: + description: + short: Enable or disable setting the trajectory setpoint with manual control + type: boolean + default: 1 + reboot_required: true diff --git a/src/modules/mc_pos_control/CMakeLists.txt b/src/modules/mc_pos_control/CMakeLists.txt index 0dea1c6147..46b119a885 100644 --- a/src/modules/mc_pos_control/CMakeLists.txt +++ b/src/modules/mc_pos_control/CMakeLists.txt @@ -42,6 +42,17 @@ px4_add_module( SRCS MulticopterPositionControl.cpp MulticopterPositionControl.hpp + MODULE_CONFIG + multicopter_altitude_mode_params.yaml + multicopter_autonomous_params.yaml + multicopter_nudging_params.yaml + multicopter_position_control_gain_params.yaml + multicopter_position_control_limits_params.yaml + multicopter_position_control_params.yaml + multicopter_position_mode_params.yaml + multicopter_responsiveness_params.yaml + multicopter_stabilized_mode_params.yaml + multicopter_takeoff_land_params.yaml DEPENDS GotoControl PositionControl diff --git a/src/modules/mc_pos_control/multicopter_altitude_mode_params.c b/src/modules/mc_pos_control/multicopter_altitude_mode_params.c deleted file mode 100644 index 4f617d0092..0000000000 --- a/src/modules/mc_pos_control/multicopter_altitude_mode_params.c +++ /dev/null @@ -1,117 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2023 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Maximum upwards acceleration in climb rate controlled modes - * - * @unit m/s^2 - * @min 2 - * @max 15 - * @decimal 1 - * @increment 1 - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(MPC_ACC_UP_MAX, 4.f); - -/** - * Maximum downwards acceleration in climb rate controlled modes - * - * @unit m/s^2 - * @min 2 - * @max 15 - * @decimal 1 - * @increment 1 - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(MPC_ACC_DOWN_MAX, 3.f); - -/** - * Manual yaw rate input filter time constant - * - * Not used in Stabilized mode - * Setting this parameter to 0 disables the filter - * - * @unit s - * @min 0 - * @max 5 - * @decimal 2 - * @increment 0.01 - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(MPC_MAN_Y_TAU, 0.08f); - -/** - * Altitude reference mode - * - * Control height - * 0: relative earth frame origin which may drift due to sensors - * 1: relative to ground (requires distance sensor) which changes with terrain variation. - * It will revert to relative earth frame if the distance to ground estimate becomes invalid. - * 2: relative to ground (requires distance sensor) when stationary - * and relative to earth frame when moving horizontally. - * The speed threshold is MPC_HOLD_MAX_XY - * - * @min 0 - * @max 2 - * @value 0 Altitude following - * @value 1 Terrain following - * @value 2 Terrain hold - * @group Multicopter Position Control - */ -PARAM_DEFINE_INT32(MPC_ALT_MODE, 2); - -/** - * Maximum horizontal velocity for which position hold is enabled (use 0 to disable check) - * - * Only used with MPC_POS_MODE Direct velocity or MPC_ALT_MODE 2 - * - * @unit m/s - * @min 0 - * @max 3 - * @decimal 2 - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(MPC_HOLD_MAX_XY, 0.8f); - -/** - * Maximum vertical velocity for which position hold is enabled (use 0 to disable check) - * - * Only used with MPC_ALT_MODE 1 - * - * @unit m/s - * @min 0 - * @max 3 - * @decimal 2 - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(MPC_HOLD_MAX_Z, 0.6f); diff --git a/src/modules/mc_pos_control/multicopter_altitude_mode_params.yaml b/src/modules/mc_pos_control/multicopter_altitude_mode_params.yaml new file mode 100644 index 0000000000..18030117bb --- /dev/null +++ b/src/modules/mc_pos_control/multicopter_altitude_mode_params.yaml @@ -0,0 +1,82 @@ +module_name: mc_pos_control +parameters: +- group: Multicopter Position Control + definitions: + MPC_ACC_UP_MAX: + description: + short: Maximum upwards acceleration in climb rate controlled modes + type: float + default: 4.0 + unit: m/s^2 + min: 2 + max: 15 + decimal: 1 + increment: 1 + MPC_ACC_DOWN_MAX: + description: + short: Maximum downwards acceleration in climb rate controlled modes + type: float + default: 3.0 + unit: m/s^2 + min: 2 + max: 15 + decimal: 1 + increment: 1 + MPC_MAN_Y_TAU: + description: + short: Manual yaw rate input filter time constant + long: |- + Not used in Stabilized mode + Setting this parameter to 0 disables the filter + type: float + default: 0.08 + unit: s + min: 0 + max: 5 + decimal: 2 + increment: 0.01 + MPC_ALT_MODE: + description: + short: Altitude reference mode + long: |- + Control height + 0: relative earth frame origin which may drift due to sensors + 1: relative to ground (requires distance sensor) which changes with terrain variation. + It will revert to relative earth frame if the distance to ground estimate becomes invalid. + 2: relative to ground (requires distance sensor) when stationary + and relative to earth frame when moving horizontally. + The speed threshold is MPC_HOLD_MAX_XY + type: enum + values: + 0: Altitude following + 1: Terrain following + 2: Terrain hold + default: 2 + min: 0 + max: 2 + MPC_HOLD_MAX_XY: + description: + short: Max horizontal velocity for position hold + long: |- + Maximum horizontal velocity for which position hold is enabled (use 0 to disable check) + + Only used with MPC_POS_MODE Direct velocity or MPC_ALT_MODE 2 + type: float + default: 0.8 + unit: m/s + min: 0 + max: 3 + decimal: 2 + MPC_HOLD_MAX_Z: + description: + short: Max vertical velocity for position hold + long: |- + Maximum vertical velocity for which position hold is enabled (use 0 to disable check) + + Only used with MPC_ALT_MODE 1 + type: float + default: 0.6 + unit: m/s + min: 0 + max: 3 + decimal: 2 diff --git a/src/modules/mc_pos_control/multicopter_autonomous_params.c b/src/modules/mc_pos_control/multicopter_autonomous_params.c deleted file mode 100644 index 4237c02a77..0000000000 --- a/src/modules/mc_pos_control/multicopter_autonomous_params.c +++ /dev/null @@ -1,178 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2023 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Default horizontal velocity in autonomous modes - * - * e.g. in Missions, RTL, Goto if the waypoint does not specify differently - * - * @unit m/s - * @min 3 - * @max 20 - * @decimal 0 - * @increment 1 - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(MPC_XY_CRUISE, 5.f); - -/** - * Ascent velocity in autonomous modes - * - * For manually controlled modes and offboard see MPC_Z_VEL_MAX_UP - * - * @unit m/s - * @min 0.5 - * @max 8 - * @decimal 1 - * @increment 0.5 - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(MPC_Z_V_AUTO_UP, 3.f); - -/** - * Descent velocity in autonomous modes - * - * For manual modes and offboard, see MPC_Z_VEL_MAX_DN - * - * @unit m/s - * @min 0.5 - * @max 4 - * @decimal 1 - * @increment 0.5 - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(MPC_Z_V_AUTO_DN, 1.5f); - -/** - * Acceleration for autonomous and for manual modes - * - * When piloting manually, this parameter is only used in MPC_POS_MODE Acceleration based. - * - * @unit m/s^2 - * @min 2 - * @max 15 - * @decimal 1 - * @increment 1 - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(MPC_ACC_HOR, 3.f); - -/** - * Jerk limit in autonomous modes - * - * Limit the maximum jerk of the vehicle (how fast the acceleration can change). - * A lower value leads to smoother vehicle motions but also limited agility. - * - * @unit m/s^3 - * @min 1 - * @max 80 - * @decimal 1 - * @increment 1 - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(MPC_JERK_AUTO, 4.f); - -/** - * Proportional gain for horizontal trajectory position error - * - * @min 0.1 - * @max 1 - * @decimal 1 - * @increment 0.1 - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(MPC_XY_TRAJ_P, 0.5f); - -/** - * Maximum horizontal error allowed by the trajectory generator - * - * The integration speed of the trajectory setpoint is linearly - * reduced with the horizontal position tracking error. When the - * error is above this parameter, the integration of the - * trajectory is stopped to wait for the drone. - * - * This value can be adjusted depending on the tracking - * capabilities of the vehicle. - * - * @min 0.1 - * @max 10 - * @decimal 1 - * @increment 1 - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(MPC_XY_ERR_MAX, 2.f); - -/** - * Maximum yaw rate in autonomous modes - * - * Limits the rate of change of the yaw setpoint to avoid large - * control output and mixer saturation. - * - * @unit deg/s - * @min 5 - * @max 360 - * @decimal 0 - * @increment 5 - * @group Multicopter Attitude Control - */ -PARAM_DEFINE_FLOAT(MPC_YAWRAUTO_MAX, 60.f); - -/** - * Maximum yaw acceleration in autonomous modes - * - * Limits the acceleration of the yaw setpoint to avoid large - * control output and mixer saturation. - * - * @unit deg/s^2 - * @min 5 - * @max 360 - * @decimal 0 - * @increment 5 - * @group Multicopter Attitude Control - */ -PARAM_DEFINE_FLOAT(MPC_YAWRAUTO_ACC, 20.f); - -/** - * Heading behavior in autonomous modes - * - * @min 0 - * @max 4 - * @value 0 towards waypoint - * @value 1 towards home - * @value 2 away from home - * @value 3 along trajectory - * @value 4 towards waypoint (yaw first) - * @value 5 yaw fixed - * @group Mission - */ -PARAM_DEFINE_INT32(MPC_YAW_MODE, 0); diff --git a/src/modules/mc_pos_control/multicopter_autonomous_params.yaml b/src/modules/mc_pos_control/multicopter_autonomous_params.yaml new file mode 100644 index 0000000000..e46f32388d --- /dev/null +++ b/src/modules/mc_pos_control/multicopter_autonomous_params.yaml @@ -0,0 +1,132 @@ +module_name: mc_pos_control +parameters: +- group: Mission + definitions: + MPC_YAW_MODE: + description: + short: Heading behavior in autonomous modes + type: enum + values: + 0: towards waypoint + 1: towards home + 2: away from home + 3: along trajectory + 4: towards waypoint (yaw first) + 5: yaw fixed + default: 0 + min: 0 + max: 5 +- group: Multicopter Attitude Control + definitions: + MPC_YAWRAUTO_MAX: + description: + short: Maximum yaw rate in autonomous modes + long: |- + Limits the rate of change of the yaw setpoint to avoid large + control output and mixer saturation. + type: float + default: 60.0 + unit: deg/s + min: 5 + max: 360 + decimal: 0 + increment: 5 + MPC_YAWRAUTO_ACC: + description: + short: Maximum yaw acceleration in autonomous modes + long: |- + Limits the acceleration of the yaw setpoint to avoid large + control output and mixer saturation. + type: float + default: 20.0 + unit: deg/s^2 + min: 5 + max: 360 + decimal: 0 + increment: 5 +- group: Multicopter Position Control + definitions: + MPC_XY_CRUISE: + description: + short: Default horizontal velocity in autonomous modes + long: e.g. in Missions, RTL, Goto if the waypoint does not specify differently + type: float + default: 5.0 + unit: m/s + min: 3 + max: 20 + decimal: 0 + increment: 1 + MPC_Z_V_AUTO_UP: + description: + short: Ascent velocity in autonomous modes + long: For manually controlled modes and offboard see MPC_Z_VEL_MAX_UP + type: float + default: 3.0 + unit: m/s + min: 0.5 + max: 8 + decimal: 1 + increment: 0.5 + MPC_Z_V_AUTO_DN: + description: + short: Descent velocity in autonomous modes + long: For manual modes and offboard, see MPC_Z_VEL_MAX_DN + type: float + default: 1.5 + unit: m/s + min: 0.5 + max: 4 + decimal: 1 + increment: 0.5 + MPC_ACC_HOR: + description: + short: Acceleration for autonomous and for manual modes + long: When piloting manually, this parameter is only used in MPC_POS_MODE + Acceleration based. + type: float + default: 3.0 + unit: m/s^2 + min: 2 + max: 15 + decimal: 1 + increment: 1 + MPC_JERK_AUTO: + description: + short: Jerk limit in autonomous modes + long: |- + Limit the maximum jerk of the vehicle (how fast the acceleration can change). + A lower value leads to smoother vehicle motions but also limited agility. + type: float + default: 4.0 + unit: m/s^3 + min: 1 + max: 80 + decimal: 1 + increment: 1 + MPC_XY_TRAJ_P: + description: + short: Proportional gain for horizontal trajectory position error + type: float + default: 0.5 + min: 0.1 + max: 1 + decimal: 1 + increment: 0.1 + MPC_XY_ERR_MAX: + description: + short: Maximum horizontal error allowed by the trajectory generator + long: |- + The integration speed of the trajectory setpoint is linearly + reduced with the horizontal position tracking error. When the + error is above this parameter, the integration of the + trajectory is stopped to wait for the drone. + + This value can be adjusted depending on the tracking + capabilities of the vehicle. + type: float + default: 2.0 + min: 0.1 + max: 10 + decimal: 1 + increment: 1 diff --git a/src/modules/mc_pos_control/multicopter_nudging_params.yaml b/src/modules/mc_pos_control/multicopter_nudging_params.yaml new file mode 100644 index 0000000000..bf14c9241f --- /dev/null +++ b/src/modules/mc_pos_control/multicopter_nudging_params.yaml @@ -0,0 +1,38 @@ +module_name: mc_pos_control +parameters: +- group: Multicopter Position Control + definitions: + MPC_LAND_RC_HELP: + description: + short: Enable nudging based on user input during autonomous land routine + long: |- + Using stick input the vehicle can be moved horizontally and yawed. + The descend speed is amended: + stick full up - 0 + stick centered - MPC_LAND_SPEED + stick full down - 2 * MPC_LAND_SPEED + + Manual override during auto modes has to be disabled to use this feature (see COM_RC_OVERRIDE). + type: enum + values: + 0: Nudging disabled + 1: Nudging enabled + default: 0 + min: 0 + max: 1 + MPC_LAND_RADIUS: + description: + short: User assisted landing radius + long: |- + When nudging is enabled (see MPC_LAND_RC_HELP), this defines the maximum + allowed horizontal displacement from the original landing point. + - If inside of the radius, only allow nudging inputs that do not move the vehicle outside of it. + - If outside of the radius, only allow nudging inputs that move the vehicle back towards it. + + Set it to -1 for infinite radius. + type: float + default: -1.0 + unit: m + min: -1 + decimal: 0 + increment: 1 diff --git a/src/modules/mc_pos_control/multicopter_position_control_gain_params.c b/src/modules/mc_pos_control/multicopter_position_control_gain_params.c deleted file mode 100644 index df36d1f733..0000000000 --- a/src/modules/mc_pos_control/multicopter_position_control_gain_params.c +++ /dev/null @@ -1,137 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2023 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Proportional gain for vertical position error - * - * Defined as corrective velocity in m/s per m position error - * - * @min 0.1 - * @max 1.5 - * @decimal 2 - * @increment 0.1 - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(MPC_Z_P, 1.f); - -/** - * Proportional gain for horizontal position error - * - * Defined as corrective velocity in m/s per m position error - * - * @min 0 - * @max 2 - * @decimal 2 - * @increment 0.1 - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(MPC_XY_P, 0.95f); - -/** - * Proportional gain for vertical velocity error - * - * Defined as corrective acceleration in m/s^2 per m/s velocity error - * - * @min 2 - * @max 15 - * @decimal 2 - * @increment 0.1 - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(MPC_Z_VEL_P_ACC, 4.f); - -/** - * Proportional gain for horizontal velocity error - * - * Defined as corrective acceleration in m/s^2 per m/s velocity error - * - * @min 1.2 - * @max 5 - * @decimal 2 - * @increment 0.1 - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(MPC_XY_VEL_P_ACC, 1.8f); - -/** - * Integral gain for vertical velocity error - * - * Defined as corrective acceleration in m/s^2 per m velocity integral - * - * @min 0.2 - * @max 3 - * @decimal 2 - * @increment 0.1 - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(MPC_Z_VEL_I_ACC, 2.f); - -/** - * Integral gain for horizontal velocity error - * - * Defined as correction acceleration in m/s^2 per m velocity integral - * Allows to eliminate steady state errors in disturbances like wind. - * - * @min 0 - * @max 60 - * @decimal 2 - * @increment 0.02 - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(MPC_XY_VEL_I_ACC, 0.4f); - -/** - * Differential gain for vertical velocity error - * - * Defined as corrective acceleration in m/s^2 per m/s^2 velocity derivative - * - * @min 0 - * @max 2 - * @decimal 2 - * @increment 0.02 - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(MPC_Z_VEL_D_ACC, 0.f); - -/** - * Differential gain for horizontal velocity error - * - * Defined as corrective acceleration in m/s^2 per m/s^2 velocity derivative - * - * @min 0.1 - * @max 2 - * @decimal 2 - * @increment 0.02 - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(MPC_XY_VEL_D_ACC, 0.2f); diff --git a/src/modules/mc_pos_control/multicopter_position_control_gain_params.yaml b/src/modules/mc_pos_control/multicopter_position_control_gain_params.yaml new file mode 100644 index 0000000000..ec757671ed --- /dev/null +++ b/src/modules/mc_pos_control/multicopter_position_control_gain_params.yaml @@ -0,0 +1,86 @@ +module_name: mc_pos_control +parameters: +- group: Multicopter Position Control + definitions: + MPC_Z_P: + description: + short: Proportional gain for vertical position error + long: Defined as corrective velocity in m/s per m position error + type: float + default: 1.0 + min: 0.1 + max: 1.5 + decimal: 2 + increment: 0.1 + MPC_XY_P: + description: + short: Proportional gain for horizontal position error + long: Defined as corrective velocity in m/s per m position error + type: float + default: 0.95 + min: 0 + max: 2 + decimal: 2 + increment: 0.1 + MPC_Z_VEL_P_ACC: + description: + short: Proportional gain for vertical velocity error + long: Defined as corrective acceleration in m/s^2 per m/s velocity error + type: float + default: 4.0 + min: 2 + max: 15 + decimal: 2 + increment: 0.1 + MPC_XY_VEL_P_ACC: + description: + short: Proportional gain for horizontal velocity error + long: Defined as corrective acceleration in m/s^2 per m/s velocity error + type: float + default: 1.8 + min: 1.2 + max: 5 + decimal: 2 + increment: 0.1 + MPC_Z_VEL_I_ACC: + description: + short: Integral gain for vertical velocity error + long: Defined as corrective acceleration in m/s^2 per m velocity integral + type: float + default: 2.0 + min: 0.2 + max: 3 + decimal: 2 + increment: 0.1 + MPC_XY_VEL_I_ACC: + description: + short: Integral gain for horizontal velocity error + long: |- + Defined as correction acceleration in m/s^2 per m velocity integral + Allows to eliminate steady state errors in disturbances like wind. + type: float + default: 0.4 + min: 0 + max: 60 + decimal: 2 + increment: 0.02 + MPC_Z_VEL_D_ACC: + description: + short: Differential gain for vertical velocity error + long: Defined as corrective acceleration in m/s^2 per m/s^2 velocity derivative + type: float + default: 0.0 + min: 0 + max: 2 + decimal: 2 + increment: 0.02 + MPC_XY_VEL_D_ACC: + description: + short: Differential gain for horizontal velocity error + long: Defined as corrective acceleration in m/s^2 per m/s^2 velocity derivative + type: float + default: 0.2 + min: 0.1 + max: 2 + decimal: 2 + increment: 0.02 diff --git a/src/modules/mc_pos_control/multicopter_position_control_limits_params.c b/src/modules/mc_pos_control/multicopter_position_control_limits_params.c deleted file mode 100644 index 8307b82d72..0000000000 --- a/src/modules/mc_pos_control/multicopter_position_control_limits_params.c +++ /dev/null @@ -1,152 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2023 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Maximum horizontal velocity - * - * Absolute maximum for all velocity controlled modes. - * Any higher value is truncated. - * - * @unit m/s - * @min 0 - * @max 20 - * @decimal 1 - * @increment 1 - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(MPC_XY_VEL_MAX, 12.f); - -/** - * Maximum ascent velocity - * - * Absolute maximum for all climb rate controlled modes. - * In manually piloted modes full stick deflection commands this velocity. - * - * For default autonomous velocity see MPC_Z_V_AUTO_UP - * - * @unit m/s - * @min 0.5 - * @max 8 - * @increment 0.1 - * @decimal 1 - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(MPC_Z_VEL_MAX_UP, 3.f); - -/** - * Maximum descent velocity - * - * Absolute maximum for all climb rate controlled modes. - * In manually piloted modes full stick deflection commands this velocity. - * - * For default autonomous velocity see MPC_Z_V_AUTO_UP - * - * @unit m/s - * @min 0.5 - * @max 4 - * @increment 0.1 - * @decimal 1 - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(MPC_Z_VEL_MAX_DN, 1.5f); - -/** - * Maximum tilt angle in air - * - * Absolute maximum for all velocity or acceleration controlled modes. - * Any higher value is truncated. - * - * @unit deg - * @min 20 - * @max 89 - * @decimal 0 - * @increment 1 - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(MPC_TILTMAX_AIR, 45.f); - -/** - * Maximum tilt during inital takeoff ramp - * - * Tighter tilt limit during takeoff to avoid tip over. - * - * @unit deg - * @min 5 - * @max 89 - * @decimal 0 - * @increment 1 - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(MPC_TILTMAX_LND, 12.f); - -/** - * Minimum collective thrust in climb rate controlled modes - * - * Too low thrust leads to loss of roll/pitch/yaw torque control authority. - * With airmode enabled this parameters can be set to 0 - * while still keeping torque authority (see MC_AIRMODE). - * - * @unit norm - * @min 0.05 - * @max 0.5 - * @decimal 2 - * @increment 0.01 - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(MPC_THR_MIN, 0.12f); - -/** - * Maximum collective thrust in climb rate controlled modes - * - * Limit allowed thrust e.g. for indoor test of overpowered vehicle. - * - * @unit norm - * @min 0 - * @max 1 - * @decimal 2 - * @increment 0.05 - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(MPC_THR_MAX, 1.f); - -/** - * Acceleration to tilt coupling - * - * Set to decouple tilt from vertical acceleration. - * This provides smoother flight but slightly worse tracking in position and auto modes. - * Unset if accurate position tracking during dynamic maneuvers is more important than a smooth flight. - * - * @boolean - * @group Multicopter Position Control - */ -PARAM_DEFINE_INT32(MPC_ACC_DECOUPLE, 1); diff --git a/src/modules/mc_pos_control/multicopter_position_control_limits_params.yaml b/src/modules/mc_pos_control/multicopter_position_control_limits_params.yaml new file mode 100644 index 0000000000..e3adece62e --- /dev/null +++ b/src/modules/mc_pos_control/multicopter_position_control_limits_params.yaml @@ -0,0 +1,105 @@ +module_name: mc_pos_control +parameters: +- group: Multicopter Position Control + definitions: + MPC_XY_VEL_MAX: + description: + short: Maximum horizontal velocity + long: |- + Absolute maximum for all velocity controlled modes. + Any higher value is truncated. + type: float + default: 12.0 + unit: m/s + min: 0 + max: 20 + decimal: 1 + increment: 1 + MPC_Z_VEL_MAX_UP: + description: + short: Maximum ascent velocity + long: |- + Absolute maximum for all climb rate controlled modes. + In manually piloted modes full stick deflection commands this velocity. + + For default autonomous velocity see MPC_Z_V_AUTO_UP + type: float + default: 3.0 + unit: m/s + min: 0.5 + max: 8 + increment: 0.1 + decimal: 1 + MPC_Z_VEL_MAX_DN: + description: + short: Maximum descent velocity + long: |- + Absolute maximum for all climb rate controlled modes. + In manually piloted modes full stick deflection commands this velocity. + + For default autonomous velocity see MPC_Z_V_AUTO_UP + type: float + default: 1.5 + unit: m/s + min: 0.5 + max: 4 + increment: 0.1 + decimal: 1 + MPC_TILTMAX_AIR: + description: + short: Maximum tilt angle in air + long: |- + Absolute maximum for all velocity or acceleration controlled modes. + Any higher value is truncated. + type: float + default: 45.0 + unit: deg + min: 20 + max: 89 + decimal: 0 + increment: 1 + MPC_TILTMAX_LND: + description: + short: Maximum tilt during inital takeoff ramp + long: Tighter tilt limit during takeoff to avoid tip over. + type: float + default: 12.0 + unit: deg + min: 5 + max: 89 + decimal: 0 + increment: 1 + MPC_THR_MIN: + description: + short: Minimum collective thrust in climb rate controlled modes + long: |- + Too low thrust leads to loss of roll/pitch/yaw torque control authority. + With airmode enabled this parameters can be set to 0 + while still keeping torque authority (see MC_AIRMODE). + type: float + default: 0.12 + unit: norm + min: 0.05 + max: 0.5 + decimal: 2 + increment: 0.01 + MPC_THR_MAX: + description: + short: Maximum collective thrust in climb rate controlled modes + long: Limit allowed thrust e.g. for indoor test of overpowered vehicle. + type: float + default: 1.0 + unit: norm + min: 0 + max: 1 + decimal: 2 + increment: 0.05 + MPC_ACC_DECOUPLE: + description: + short: Acceleration to tilt coupling + long: |- + Set to decouple tilt from vertical acceleration. + This provides smoother flight but slightly worse tracking in position and auto modes. + Unset if accurate position tracking during dynamic maneuvers is more important than a smooth flight. + type: boolean + default: 1 diff --git a/src/modules/mc_pos_control/multicopter_position_control_params.c b/src/modules/mc_pos_control/multicopter_position_control_params.c deleted file mode 100644 index 2639898c03..0000000000 --- a/src/modules/mc_pos_control/multicopter_position_control_params.c +++ /dev/null @@ -1,121 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2023 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Vertical thrust required to hover - * - * Mapped to center throttle stick in Stabilized mode (see MPC_THR_CURVE). - * Used for initialization of the hover thrust estimator. - * The estimated hover thrust is used as base for zero vertical acceleration in altitude control. - * The hover thrust is important for land detection to work correctly. - * - * @unit norm - * @min 0.1 - * @max 0.8 - * @decimal 2 - * @increment 0.01 - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(MPC_THR_HOVER, 0.5f); - -/** - * Horizontal thrust margin - * - * Margin that is kept for horizontal control when higher priority vertical thrust is saturated. - * To avoid completely starving horizontal control with high vertical error. - * - * @unit norm - * @min 0 - * @max 0.5 - * @decimal 2 - * @increment 0.01 - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(MPC_THR_XY_MARG, 0.3f); - -/** - * Velocity low pass cutoff frequency - * - * A value of 0 disables the filter. - * - * @unit Hz - * @min 0 - * @max 50 - * @decimal 1 - * @increment 0.5 - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(MPC_VEL_LP, 0.0f); - -/** - * Velocity notch filter frequency - * - * The center frequency for the 2nd order notch filter on the velocity. - * A value of 0 disables the filter. - * - * @unit Hz - * @min 0 - * @max 50 - * @decimal 1 - * @increment 0.5 - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(MPC_VEL_NF_FRQ, 0.0f); - -/** - * Velocity notch filter bandwidth - * - * A value of 0 disables the filter. - * - * @unit Hz - * @min 0 - * @max 50 - * @decimal 1 - * @increment 0.5 - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(MPC_VEL_NF_BW, 5.0f); - -/** - * Velocity derivative low pass cutoff frequency - * - * A value of 0 disables the filter. - * - * @unit Hz - * @min 0 - * @max 50 - * @decimal 1 - * @increment 0.5 - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(MPC_VELD_LP, 5.0f); diff --git a/src/modules/mc_pos_control/multicopter_position_control_params.yaml b/src/modules/mc_pos_control/multicopter_position_control_params.yaml new file mode 100644 index 0000000000..86bc9d8288 --- /dev/null +++ b/src/modules/mc_pos_control/multicopter_position_control_params.yaml @@ -0,0 +1,78 @@ +module_name: mc_pos_control +parameters: +- group: Multicopter Position Control + definitions: + MPC_THR_HOVER: + description: + short: Vertical thrust required to hover + long: |- + Mapped to center throttle stick in Stabilized mode (see MPC_THR_CURVE). + Used for initialization of the hover thrust estimator. + The estimated hover thrust is used as base for zero vertical acceleration in altitude control. + The hover thrust is important for land detection to work correctly. + type: float + default: 0.5 + unit: norm + min: 0.1 + max: 0.8 + decimal: 2 + increment: 0.01 + MPC_THR_XY_MARG: + description: + short: Horizontal thrust margin + long: |- + Margin that is kept for horizontal control when higher priority vertical thrust is saturated. + To avoid completely starving horizontal control with high vertical error. + type: float + default: 0.3 + unit: norm + min: 0 + max: 0.5 + decimal: 2 + increment: 0.01 + MPC_VEL_LP: + description: + short: Velocity low pass cutoff frequency + long: A value of 0 disables the filter. + type: float + default: 0.0 + unit: Hz + min: 0 + max: 50 + decimal: 1 + increment: 0.5 + MPC_VEL_NF_FRQ: + description: + short: Velocity notch filter frequency + long: |- + The center frequency for the 2nd order notch filter on the velocity. + A value of 0 disables the filter. + type: float + default: 0.0 + unit: Hz + min: 0 + max: 50 + decimal: 1 + increment: 0.5 + MPC_VEL_NF_BW: + description: + short: Velocity notch filter bandwidth + long: A value of 0 disables the filter. + type: float + default: 5.0 + unit: Hz + min: 0 + max: 50 + decimal: 1 + increment: 0.5 + MPC_VELD_LP: + description: + short: Velocity derivative low pass cutoff frequency + long: A value of 0 disables the filter. + type: float + default: 5.0 + unit: Hz + min: 0 + max: 50 + decimal: 1 + increment: 0.5 diff --git a/src/modules/mc_pos_control/multicopter_position_mode_params.c b/src/modules/mc_pos_control/multicopter_position_mode_params.c deleted file mode 100644 index 97c905f819..0000000000 --- a/src/modules/mc_pos_control/multicopter_position_mode_params.c +++ /dev/null @@ -1,131 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2023 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Position/Altitude mode variant - * - * The supported sub-modes are: - * Direct velocity: - * Sticks directly map to velocity setpoints without smoothing. - * Also applies to vertical direction and Altitude mode. - * Useful for velocity control tuning. - * Acceleration based: - * Sticks map to acceleration and there's a virtual brake drag - * - * @value 0 Direct velocity - * @value 4 Acceleration based - * @group Multicopter Position Control - */ -PARAM_DEFINE_INT32(MPC_POS_MODE, 4); - -/** - * Maximum horizontal velocity setpoint in Position mode - * - * Must be smaller than MPC_XY_VEL_MAX. - * - * The maximum sideways and backward speed can be set differently - * using MPC_VEL_MAN_SIDE and MPC_VEL_MAN_BACK, respectively. - * - * @unit m/s - * @min 3 - * @max 20 - * @increment 1 - * @decimal 1 - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(MPC_VEL_MANUAL, 10.f); - -/** - * Maximum sideways velocity in Position mode - * - * If set to a negative value or larger than - * MPC_VEL_MANUAL then MPC_VEL_MANUAL is used. - * - * @unit m/s - * @min -1 - * @max 20 - * @increment 1 - * @decimal 1 - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(MPC_VEL_MAN_SIDE, -1.f); - -/** - * Maximum backward velocity in Position mode - * - * If set to a negative value or larger than - * MPC_VEL_MANUAL then MPC_VEL_MANUAL is used. - * - * @unit m/s - * @min -1 - * @max 20 - * @increment 1 - * @decimal 1 - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(MPC_VEL_MAN_BACK, -1.f); - -/** - * Maximum horizontal acceleration - * - * MPC_POS_MODE - * 1 just deceleration - * 4 not used, use MPC_ACC_HOR instead - * - * @unit m/s^2 - * @min 2 - * @max 15 - * @increment 1 - * @decimal 2 - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(MPC_ACC_HOR_MAX, 5.f); - -/** - * Maximum horizontal and vertical jerk in Position/Altitude mode - * - * Limit the maximum jerk (acceleration change) of the vehicle. - * A lower value leads to smoother motions but limits agility. - * - * Setting this to the maximum value essentially disables the limit. - * - * Only used with MPC_POS_MODE Acceleration based. - * - * @unit m/s^3 - * @min 0.5 - * @max 500 - * @decimal 0 - * @increment 1 - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(MPC_JERK_MAX, 8.f); diff --git a/src/modules/mc_pos_control/multicopter_position_mode_params.yaml b/src/modules/mc_pos_control/multicopter_position_mode_params.yaml new file mode 100644 index 0000000000..0cc21463af --- /dev/null +++ b/src/modules/mc_pos_control/multicopter_position_mode_params.yaml @@ -0,0 +1,92 @@ +module_name: mc_pos_control +parameters: +- group: Multicopter Position Control + definitions: + MPC_POS_MODE: + description: + short: Position/Altitude mode variant + long: |- + The supported sub-modes are: + Direct velocity: + Sticks directly map to velocity setpoints without smoothing. + Also applies to vertical direction and Altitude mode. + Useful for velocity control tuning. + Acceleration based: + Sticks map to acceleration and there's a virtual brake drag + type: enum + values: + 0: Direct velocity + 4: Acceleration based + default: 4 + MPC_VEL_MANUAL: + description: + short: Maximum horizontal velocity setpoint in Position mode + long: |- + Must be smaller than MPC_XY_VEL_MAX. + + The maximum sideways and backward speed can be set differently + using MPC_VEL_MAN_SIDE and MPC_VEL_MAN_BACK, respectively. + type: float + default: 10.0 + unit: m/s + min: 3 + max: 20 + increment: 1 + decimal: 1 + MPC_VEL_MAN_SIDE: + description: + short: Maximum sideways velocity in Position mode + long: |- + If set to a negative value or larger than + MPC_VEL_MANUAL then MPC_VEL_MANUAL is used. + type: float + default: -1.0 + unit: m/s + min: -1 + max: 20 + increment: 1 + decimal: 1 + MPC_VEL_MAN_BACK: + description: + short: Maximum backward velocity in Position mode + long: |- + If set to a negative value or larger than + MPC_VEL_MANUAL then MPC_VEL_MANUAL is used. + type: float + default: -1.0 + unit: m/s + min: -1 + max: 20 + increment: 1 + decimal: 1 + MPC_ACC_HOR_MAX: + description: + short: Maximum horizontal acceleration + long: |- + MPC_POS_MODE + 1 just deceleration + 4 not used, use MPC_ACC_HOR instead + type: float + default: 5.0 + unit: m/s^2 + min: 2 + max: 15 + increment: 1 + decimal: 2 + MPC_JERK_MAX: + description: + short: Maximum horizontal and vertical jerk in Position/Altitude mode + long: |- + Limit the maximum jerk (acceleration change) of the vehicle. + A lower value leads to smoother motions but limits agility. + + Setting this to the maximum value essentially disables the limit. + + Only used with MPC_POS_MODE Acceleration based. + type: float + default: 8.0 + unit: m/s^3 + min: 0.5 + max: 500 + decimal: 0 + increment: 1 diff --git a/src/modules/mc_pos_control/multicopter_responsiveness_params.c b/src/modules/mc_pos_control/multicopter_responsiveness_params.c deleted file mode 100644 index e0097f6ca0..0000000000 --- a/src/modules/mc_pos_control/multicopter_responsiveness_params.c +++ /dev/null @@ -1,80 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2023 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Responsiveness - * - * Changes the overall responsiveness of the vehicle. - * The higher the value, the faster the vehicle will react. - * - * If set to a value greater than zero, other parameters are automatically set (such as - * the acceleration or jerk limits). - * If set to a negative value, the existing individual parameters are used. - * - * @min -1 - * @max 1 - * @decimal 2 - * @increment 0.05 - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(SYS_VEHICLE_RESP, -0.4f); - -/** - * Overall Horizontal Velocity Limit - * - * If set to a value greater than zero, other parameters are automatically set (such as - * MPC_XY_VEL_MAX or MPC_VEL_MANUAL). - * If set to a negative value, the existing individual parameters are used. - * - * @min -20 - * @max 20 - * @decimal 1 - * @increment 1 - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(MPC_XY_VEL_ALL, -10.f); - -/** - * Overall Vertical Velocity Limit - * - * If set to a value greater than zero, other parameters are automatically set (such as - * MPC_Z_VEL_MAX_UP or MPC_LAND_SPEED). - * If set to a negative value, the existing individual parameters are used. - * - * @min -3 - * @max 8 - * @decimal 1 - * @increment 0.5 - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(MPC_Z_VEL_ALL, -3.f); diff --git a/src/modules/mc_pos_control/multicopter_responsiveness_params.yaml b/src/modules/mc_pos_control/multicopter_responsiveness_params.yaml new file mode 100644 index 0000000000..715108cdd7 --- /dev/null +++ b/src/modules/mc_pos_control/multicopter_responsiveness_params.yaml @@ -0,0 +1,46 @@ +module_name: mc_pos_control +parameters: +- group: Multicopter Position Control + definitions: + SYS_VEHICLE_RESP: + description: + short: Responsiveness + long: |- + Changes the overall responsiveness of the vehicle. + The higher the value, the faster the vehicle will react. + + If set to a value greater than zero, other parameters are automatically set (such as + the acceleration or jerk limits). + If set to a negative value, the existing individual parameters are used. + type: float + default: -0.4 + min: -1 + max: 1 + decimal: 2 + increment: 0.05 + MPC_XY_VEL_ALL: + description: + short: Overall Horizontal Velocity Limit + long: |- + If set to a value greater than zero, other parameters are automatically set (such as + MPC_XY_VEL_MAX or MPC_VEL_MANUAL). + If set to a negative value, the existing individual parameters are used. + type: float + default: -10.0 + min: -20 + max: 20 + decimal: 1 + increment: 1 + MPC_Z_VEL_ALL: + description: + short: Overall Vertical Velocity Limit + long: |- + If set to a value greater than zero, other parameters are automatically set (such as + MPC_Z_VEL_MAX_UP or MPC_LAND_SPEED). + If set to a negative value, the existing individual parameters are used. + type: float + default: -3.0 + min: -3 + max: 8 + decimal: 1 + increment: 0.5 diff --git a/src/modules/mc_pos_control/multicopter_stabilized_mode_params.c b/src/modules/mc_pos_control/multicopter_stabilized_mode_params.c deleted file mode 100644 index c804a034bb..0000000000 --- a/src/modules/mc_pos_control/multicopter_stabilized_mode_params.c +++ /dev/null @@ -1,96 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2023 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Maximal tilt angle in Stabilized, Altitude and Altitude Cruise mode - * - * @unit deg - * @min 1 - * @max 70 - * @decimal 0 - * @increment 1 - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(MPC_MAN_TILT_MAX, 35.f); - -/** - * Max manual yaw rate for Stabilized, Altitude, Position mode - * - * @unit deg/s - * @min 0 - * @max 400 - * @decimal 0 - * @increment 10 - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(MPC_MAN_Y_MAX, 150.f); - -/** - * Minimum collective thrust in Stabilized mode - * - * The value is mapped to the lowest throttle stick position in Stabilized mode. - * - * Too low collective thrust leads to loss of roll/pitch/yaw torque control authority. - * Airmode is used to keep torque authority with zero thrust (see MC_AIRMODE). - * - * @unit norm - * @min 0 - * @max 1 - * @decimal 2 - * @increment 0.01 - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(MPC_MANTHR_MIN, 0.08f); - -/** - * Thrust curve mapping in Stabilized Mode - * - * Defines how the throttle stick is mapped to collective thrust in Stabilized mode. - * - * Rescale to hover thrust estimate: - * Stick input is linearly rescaled, such that a centered throttle stick corresponds to the hover thrust estimator's output. - * - * No rescale: - * Directly map the stick 1:1 to the output. - * Can be useful with very low hover thrust which leads to much distortion and the upper half getting sensitive. - * - * Rescale to hover thrust parameter: - * Similar to rescaling to the hover thrust estimate, but it uses the hover thrust parameter value (see MPC_THR_HOVER) instead of estimated value. - * With MPC_THR_HOVER 0.5 it's equivalent to No rescale. - * - * @value 0 Rescale to estimate - * @value 1 No rescale - * @value 2 Rescale to parameter - * @group Multicopter Position Control - */ -PARAM_DEFINE_INT32(MPC_THR_CURVE, 0); diff --git a/src/modules/mc_pos_control/multicopter_stabilized_mode_params.yaml b/src/modules/mc_pos_control/multicopter_stabilized_mode_params.yaml new file mode 100644 index 0000000000..52e8d08e16 --- /dev/null +++ b/src/modules/mc_pos_control/multicopter_stabilized_mode_params.yaml @@ -0,0 +1,61 @@ +module_name: mc_pos_control +parameters: +- group: Multicopter Position Control + definitions: + MPC_MAN_TILT_MAX: + description: + short: Maximal tilt angle in Stabilized, Altitude and Altitude Cruise mode + type: float + default: 35.0 + unit: deg + min: 1 + max: 70 + decimal: 0 + increment: 1 + MPC_MAN_Y_MAX: + description: + short: Max manual yaw rate for Stabilized, Altitude, Position mode + type: float + default: 150.0 + unit: deg/s + min: 0 + max: 400 + decimal: 0 + increment: 10 + MPC_MANTHR_MIN: + description: + short: Minimum collective thrust in Stabilized mode + long: |- + The value is mapped to the lowest throttle stick position in Stabilized mode. + + Too low collective thrust leads to loss of roll/pitch/yaw torque control authority. + Airmode is used to keep torque authority with zero thrust (see MC_AIRMODE). + type: float + default: 0.08 + unit: norm + min: 0 + max: 1 + decimal: 2 + increment: 0.01 + MPC_THR_CURVE: + description: + short: Thrust curve mapping in Stabilized Mode + long: |- + Defines how the throttle stick is mapped to collective thrust in Stabilized mode. + + Rescale to hover thrust estimate: + Stick input is linearly rescaled, such that a centered throttle stick corresponds to the hover thrust estimator's output. + + No rescale: + Directly map the stick 1:1 to the output. + Can be useful with very low hover thrust which leads to much distortion and the upper half getting sensitive. + + Rescale to hover thrust parameter: + Similar to rescaling to the hover thrust estimate, but it uses the hover thrust parameter value (see MPC_THR_HOVER) instead of estimated value. + With MPC_THR_HOVER 0.5 it's equivalent to No rescale. + type: enum + values: + 0: Rescale to estimate + 1: No rescale + 2: Rescale to parameter + default: 0 diff --git a/src/modules/mc_pos_control/multicopter_takeoff_land_params.c b/src/modules/mc_pos_control/multicopter_takeoff_land_params.c deleted file mode 100644 index 77444cc65b..0000000000 --- a/src/modules/mc_pos_control/multicopter_takeoff_land_params.c +++ /dev/null @@ -1,123 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2023 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Smooth takeoff ramp time constant - * - * Increasing this value will make climb rate controlled takeoff slower. - * If it's too slow the drone might scratch the ground and tip over. - * A time constant of 0 disables the ramp - * - * @unit s - * @min 0 - * @max 5 - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(MPC_TKO_RAMP_T, 3.f); - -/** - * Takeoff climb rate - * - * @unit m/s - * @min 1 - * @max 5 - * @decimal 2 - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(MPC_TKO_SPEED, 1.5f); - -/** - * Altitude for 1. step of slow landing (descend) - * - * Below this altitude descending velocity gets limited to a value - * between "MPC_Z_VEL_MAX_DN" (or "MPC_Z_V_AUTO_DN") and "MPC_LAND_SPEED" - * Value needs to be higher than "MPC_LAND_ALT2" - * - * @unit m - * @min 0 - * @max 122 - * @decimal 1 - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(MPC_LAND_ALT1, 10.f); - -/** - * Altitude for 2. step of slow landing (landing) - * - * Below this altitude descending velocity gets - * limited to "MPC_LAND_SPEED" - * Value needs to be lower than "MPC_LAND_ALT1" - * - * @unit m - * @min 0 - * @max 122 - * @decimal 1 - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(MPC_LAND_ALT2, 5.f); - -/** - * Altitude for 3. step of slow landing - * - * If a valid distance sensor measurement to the ground is available, - * limit descending velocity to "MPC_LAND_CRWL" below this altitude. - * - * @unit m - * @min 0 - * @max 122 - * @decimal 1 - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(MPC_LAND_ALT3, 1.f); - -/** - * Landing descend rate - * - * @unit m/s - * @min 0.6 - * @decimal 1 - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(MPC_LAND_SPEED, 0.7f); - -/** - * Land crawl descend rate - * - * Used below MPC_LAND_ALT3 if distance sensor data is availabe. - * - * @unit m/s - * @min 0.1 - * @decimal 1 - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(MPC_LAND_CRWL, 0.3f); diff --git a/src/modules/mc_pos_control/multicopter_takeoff_land_params.yaml b/src/modules/mc_pos_control/multicopter_takeoff_land_params.yaml new file mode 100644 index 0000000000..dffb79aedf --- /dev/null +++ b/src/modules/mc_pos_control/multicopter_takeoff_land_params.yaml @@ -0,0 +1,80 @@ +module_name: mc_pos_control +parameters: +- group: Multicopter Position Control + definitions: + MPC_TKO_RAMP_T: + description: + short: Smooth takeoff ramp time constant + long: |- + Increasing this value will make climb rate controlled takeoff slower. + If it's too slow the drone might scratch the ground and tip over. + A time constant of 0 disables the ramp + type: float + default: 3.0 + unit: s + min: 0 + max: 5 + MPC_TKO_SPEED: + description: + short: Takeoff climb rate + type: float + default: 1.5 + unit: m/s + min: 1 + max: 5 + decimal: 2 + MPC_LAND_ALT1: + description: + short: Altitude for 1. step of slow landing (descend) + long: |- + Below this altitude descending velocity gets limited to a value + between "MPC_Z_VEL_MAX_DN" (or "MPC_Z_V_AUTO_DN") and "MPC_LAND_SPEED" + Value needs to be higher than "MPC_LAND_ALT2" + type: float + default: 10.0 + unit: m + min: 0 + max: 122 + decimal: 1 + MPC_LAND_ALT2: + description: + short: Altitude for 2. step of slow landing (landing) + long: |- + Below this altitude descending velocity gets + limited to "MPC_LAND_SPEED" + Value needs to be lower than "MPC_LAND_ALT1" + type: float + default: 5.0 + unit: m + min: 0 + max: 122 + decimal: 1 + MPC_LAND_ALT3: + description: + short: Altitude for 3. step of slow landing + long: |- + If a valid distance sensor measurement to the ground is available, + limit descending velocity to "MPC_LAND_CRWL" below this altitude. + type: float + default: 1.0 + unit: m + min: 0 + max: 122 + decimal: 1 + MPC_LAND_SPEED: + description: + short: Landing descend rate + type: float + default: 0.7 + unit: m/s + min: 0.6 + decimal: 1 + MPC_LAND_CRWL: + description: + short: Land crawl descend rate + long: Used below MPC_LAND_ALT3 if distance sensor data is availabe. + type: float + default: 0.3 + unit: m/s + min: 0.1 + decimal: 1 diff --git a/src/modules/mc_raptor/blob b/src/modules/mc_raptor/blob index 4f31fc9736..bc6683a9a2 160000 --- a/src/modules/mc_raptor/blob +++ b/src/modules/mc_raptor/blob @@ -1 +1 @@ -Subproject commit 4f31fc97366487e460e44a43054756a085ab6cb7 +Subproject commit bc6683a9a2cff29bede2add18c0d7e3ac0cc9c27 diff --git a/src/modules/mc_raptor/mc_raptor.cpp b/src/modules/mc_raptor/mc_raptor.cpp index b84599e35b..cdf2b2af23 100644 --- a/src/modules/mc_raptor/mc_raptor.cpp +++ b/src/modules/mc_raptor/mc_raptor.cpp @@ -260,6 +260,7 @@ bool Raptor::init() register_ext_component_request.register_mode = true; register_ext_component_request.enable_replace_internal_mode = _param_mc_raptor_offboard.get(); register_ext_component_request.replace_internal_mode = vehicle_status_s::NAVIGATION_STATE_OFFBOARD; + register_ext_component_request.request_offboard_setpoints = true; _register_ext_component_request_pub.publish(register_ext_component_request); int32_t imu_gyro_ratemax = _param_imu_gyro_ratemax.get(); diff --git a/src/modules/mc_rate_control/CMakeLists.txt b/src/modules/mc_rate_control/CMakeLists.txt index 849993e623..5ce1d7303e 100644 --- a/src/modules/mc_rate_control/CMakeLists.txt +++ b/src/modules/mc_rate_control/CMakeLists.txt @@ -39,6 +39,9 @@ px4_add_module( SRCS MulticopterRateControl.cpp MulticopterRateControl.hpp + MODULE_CONFIG + mc_acro_params.yaml + mc_rate_control_params.yaml DEPENDS circuit_breaker mathlib diff --git a/src/modules/mc_rate_control/MulticopterRateControl.cpp b/src/modules/mc_rate_control/MulticopterRateControl.cpp index 4e8f5c700c..7bfb83037b 100644 --- a/src/modules/mc_rate_control/MulticopterRateControl.cpp +++ b/src/modules/mc_rate_control/MulticopterRateControl.cpp @@ -179,12 +179,10 @@ MulticopterRateControl::Run() } } else if (_vehicle_rates_setpoint_sub.update(&vehicle_rates_setpoint)) { - if (_vehicle_rates_setpoint_sub.copy(&vehicle_rates_setpoint)) { - _rates_setpoint(0) = PX4_ISFINITE(vehicle_rates_setpoint.roll) ? vehicle_rates_setpoint.roll : rates(0); - _rates_setpoint(1) = PX4_ISFINITE(vehicle_rates_setpoint.pitch) ? vehicle_rates_setpoint.pitch : rates(1); - _rates_setpoint(2) = PX4_ISFINITE(vehicle_rates_setpoint.yaw) ? vehicle_rates_setpoint.yaw : rates(2); - _thrust_setpoint = Vector3f(vehicle_rates_setpoint.thrust_body); - } + _rates_setpoint(0) = PX4_ISFINITE(vehicle_rates_setpoint.roll) ? vehicle_rates_setpoint.roll : rates(0); + _rates_setpoint(1) = PX4_ISFINITE(vehicle_rates_setpoint.pitch) ? vehicle_rates_setpoint.pitch : rates(1); + _rates_setpoint(2) = PX4_ISFINITE(vehicle_rates_setpoint.yaw) ? vehicle_rates_setpoint.yaw : rates(2); + _thrust_setpoint = Vector3f(vehicle_rates_setpoint.thrust_body); } // run the rate controller diff --git a/src/modules/mc_rate_control/mc_acro_params.c b/src/modules/mc_rate_control/mc_acro_params.c deleted file mode 100644 index ef9d315d0c..0000000000 --- a/src/modules/mc_rate_control/mc_acro_params.c +++ /dev/null @@ -1,142 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2023 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file mc_acro_params.c - * - * Parameters for Acro mode behavior - */ - -/** - * Acro mode maximum roll rate - * - * Full stick deflection leads to this rate. - * - * @unit deg/s - * @min 0.0 - * @max 1800.0 - * @decimal 1 - * @increment 5 - * @group Multicopter Acro Mode - */ -PARAM_DEFINE_FLOAT(MC_ACRO_R_MAX, 100.f); - -/** - * Acro mode maximum pitch rate - * - * Full stick deflection leads to this rate. - * - * @unit deg/s - * @min 0.0 - * @max 1800.0 - * @decimal 1 - * @increment 5 - * @group Multicopter Acro Mode - */ -PARAM_DEFINE_FLOAT(MC_ACRO_P_MAX, 100.f); - -/** - * Acro mode maximum yaw rate - * - * Full stick deflection leads to this rate. - * - * @unit deg/s - * @min 0.0 - * @max 1800.0 - * @decimal 1 - * @increment 5 - * @group Multicopter Acro Mode - */ -PARAM_DEFINE_FLOAT(MC_ACRO_Y_MAX, 100.f); - -/** - * Acro mode roll, pitch expo factor - * - * Exponential factor for tuning the input curve shape. - * - * 0 Purely linear input curve - * 1 Purely cubic input curve - * - * @min 0 - * @max 1 - * @decimal 2 - * @group Multicopter Acro Mode - */ -PARAM_DEFINE_FLOAT(MC_ACRO_EXPO, 0.f); - -/** - * Acro mode yaw expo factor - * - * Exponential factor for tuning the input curve shape. - * - * 0 Purely linear input curve - * 1 Purely cubic input curve - * - * @min 0 - * @max 1 - * @decimal 2 - * @group Multicopter Acro Mode - */ -PARAM_DEFINE_FLOAT(MC_ACRO_EXPO_Y, 0.f); - -/** - * Acro mode roll, pitch super expo factor - * - * "Superexponential" factor for refining the input curve shape tuned using MC_ACRO_EXPO. - * - * 0 Pure Expo function - * 0.7 reasonable shape enhancement for intuitive stick feel - * 0.95 very strong bent input curve only near maxima have effect - * - * @min 0 - * @max 0.95 - * @decimal 2 - * @group Multicopter Acro Mode - */ -PARAM_DEFINE_FLOAT(MC_ACRO_SUPEXPO, 0.f); - -/** - * Acro mode yaw super expo factor - * - * "Superexponential" factor for refining the input curve shape tuned using MC_ACRO_EXPO_Y. - * - * 0 Pure Expo function - * 0.7 reasonable shape enhancement for intuitive stick feel - * 0.95 very strong bent input curve only near maxima have effect - * - * @min 0 - * @max 0.95 - * @decimal 2 - * @group Multicopter Acro Mode - */ -PARAM_DEFINE_FLOAT(MC_ACRO_SUPEXPOY, 0.f); diff --git a/src/modules/mc_rate_control/mc_acro_params.yaml b/src/modules/mc_rate_control/mc_acro_params.yaml new file mode 100644 index 0000000000..54564d3f1c --- /dev/null +++ b/src/modules/mc_rate_control/mc_acro_params.yaml @@ -0,0 +1,91 @@ +module_name: mc_rate_control +parameters: +- group: Multicopter Acro Mode + definitions: + MC_ACRO_R_MAX: + description: + short: Acro mode maximum roll rate + long: Full stick deflection leads to this rate. + type: float + default: 100.0 + unit: deg/s + min: 0.0 + max: 1800.0 + decimal: 1 + increment: 5 + MC_ACRO_P_MAX: + description: + short: Acro mode maximum pitch rate + long: Full stick deflection leads to this rate. + type: float + default: 100.0 + unit: deg/s + min: 0.0 + max: 1800.0 + decimal: 1 + increment: 5 + MC_ACRO_Y_MAX: + description: + short: Acro mode maximum yaw rate + long: Full stick deflection leads to this rate. + type: float + default: 100.0 + unit: deg/s + min: 0.0 + max: 1800.0 + decimal: 1 + increment: 5 + MC_ACRO_EXPO: + description: + short: Acro mode roll, pitch expo factor + long: |- + Exponential factor for tuning the input curve shape. + + 0 Purely linear input curve + 1 Purely cubic input curve + type: float + default: 0.0 + min: 0 + max: 1 + decimal: 2 + MC_ACRO_EXPO_Y: + description: + short: Acro mode yaw expo factor + long: |- + Exponential factor for tuning the input curve shape. + + 0 Purely linear input curve + 1 Purely cubic input curve + type: float + default: 0.0 + min: 0 + max: 1 + decimal: 2 + MC_ACRO_SUPEXPO: + description: + short: Acro mode roll, pitch super expo factor + long: |- + "Superexponential" factor for refining the input curve shape tuned using MC_ACRO_EXPO. + + 0 Pure Expo function + 0.7 reasonable shape enhancement for intuitive stick feel + 0.95 very strong bent input curve only near maxima have effect + type: float + default: 0.0 + min: 0 + max: 0.95 + decimal: 2 + MC_ACRO_SUPEXPOY: + description: + short: Acro mode yaw super expo factor + long: |- + "Superexponential" factor for refining the input curve shape tuned using MC_ACRO_EXPO_Y. + + 0 Pure Expo function + 0.7 reasonable shape enhancement for intuitive stick feel + 0.95 very strong bent input curve only near maxima have effect + type: float + default: 0.0 + min: 0 + max: 0.95 + decimal: 2 diff --git a/src/modules/mc_rate_control/mc_rate_control_params.c b/src/modules/mc_rate_control/mc_rate_control_params.c deleted file mode 100644 index e9937d00fa..0000000000 --- a/src/modules/mc_rate_control/mc_rate_control_params.c +++ /dev/null @@ -1,307 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2013-2019 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file mc_rate_control_params.c - * - * Parameters for multicopter rate controller - */ - -/** - * Roll rate P gain - * - * Roll rate proportional gain, i.e. control output for angular speed error 1 rad/s. - * - * @min 0.01 - * @max 0.5 - * @decimal 3 - * @increment 0.01 - * @group Multicopter Rate Control - */ -PARAM_DEFINE_FLOAT(MC_ROLLRATE_P, 0.15f); - -/** - * Roll rate I gain - * - * Roll rate integral gain. Can be set to compensate static thrust difference or gravity center offset. - * - * @min 0.0 - * @decimal 3 - * @increment 0.01 - * @group Multicopter Rate Control - */ -PARAM_DEFINE_FLOAT(MC_ROLLRATE_I, 0.2f); - -/** - * Roll rate integrator limit - * - * Roll rate integrator limit. Can be set to increase the amount of integrator available to counteract disturbances or reduced to improve settling time after large roll moment trim changes. - * - * @min 0.0 - * @decimal 2 - * @increment 0.01 - * @group Multicopter Rate Control - */ -PARAM_DEFINE_FLOAT(MC_RR_INT_LIM, 0.30f); - -/** - * Roll rate D gain - * - * Roll rate differential gain. Small values help reduce fast oscillations. If value is too big oscillations will appear again. - * - * @min 0.0 - * @max 0.01 - * @decimal 4 - * @increment 0.0005 - * @group Multicopter Rate Control - */ -PARAM_DEFINE_FLOAT(MC_ROLLRATE_D, 0.003f); - -/** - * Roll rate feedforward - * - * Improves tracking performance. - * - * @min 0.0 - * @decimal 4 - * @group Multicopter Rate Control - */ -PARAM_DEFINE_FLOAT(MC_ROLLRATE_FF, 0.0f); - -/** - * Roll rate controller gain - * - * Global gain of the controller. - * - * This gain scales the P, I and D terms of the controller: - * output = MC_ROLLRATE_K * (MC_ROLLRATE_P * error - * + MC_ROLLRATE_I * error_integral - * + MC_ROLLRATE_D * error_derivative) - * Set MC_ROLLRATE_P=1 to implement a PID in the ideal form. - * Set MC_ROLLRATE_K=1 to implement a PID in the parallel form. - * - * @min 0.01 - * @max 5.0 - * @decimal 4 - * @increment 0.0005 - * @group Multicopter Rate Control - */ -PARAM_DEFINE_FLOAT(MC_ROLLRATE_K, 1.0f); - -/** - * Pitch rate P gain - * - * Pitch rate proportional gain, i.e. control output for angular speed error 1 rad/s. - * - * @min 0.01 - * @max 0.6 - * @decimal 3 - * @increment 0.01 - * @group Multicopter Rate Control - */ -PARAM_DEFINE_FLOAT(MC_PITCHRATE_P, 0.15f); - -/** - * Pitch rate I gain - * - * Pitch rate integral gain. Can be set to compensate static thrust difference or gravity center offset. - * - * @min 0.0 - * @decimal 3 - * @increment 0.01 - * @group Multicopter Rate Control - */ -PARAM_DEFINE_FLOAT(MC_PITCHRATE_I, 0.2f); - -/** - * Pitch rate integrator limit - * - * Pitch rate integrator limit. Can be set to increase the amount of integrator available to counteract disturbances or reduced to improve settling time after large pitch moment trim changes. - * - * @min 0.0 - * @decimal 2 - * @increment 0.01 - * @group Multicopter Rate Control - */ -PARAM_DEFINE_FLOAT(MC_PR_INT_LIM, 0.30f); - -/** - * Pitch rate D gain - * - * Pitch rate differential gain. Small values help reduce fast oscillations. If value is too big oscillations will appear again. - * - * @min 0.0 - * @decimal 4 - * @increment 0.0005 - * @group Multicopter Rate Control - */ -PARAM_DEFINE_FLOAT(MC_PITCHRATE_D, 0.003f); - -/** - * Pitch rate feedforward - * - * Improves tracking performance. - * - * @min 0.0 - * @decimal 4 - * @group Multicopter Rate Control - */ -PARAM_DEFINE_FLOAT(MC_PITCHRATE_FF, 0.0f); - -/** - * Pitch rate controller gain - * - * Global gain of the controller. - * - * This gain scales the P, I and D terms of the controller: - * output = MC_PITCHRATE_K * (MC_PITCHRATE_P * error - * + MC_PITCHRATE_I * error_integral - * + MC_PITCHRATE_D * error_derivative) - * Set MC_PITCHRATE_P=1 to implement a PID in the ideal form. - * Set MC_PITCHRATE_K=1 to implement a PID in the parallel form. - * - * @min 0.01 - * @max 5.0 - * @decimal 4 - * @increment 0.0005 - * @group Multicopter Rate Control - */ -PARAM_DEFINE_FLOAT(MC_PITCHRATE_K, 1.0f); - -/** - * Yaw rate P gain - * - * Yaw rate proportional gain, i.e. control output for angular speed error 1 rad/s. - * - * @min 0.0 - * @max 0.6 - * @decimal 3 - * @increment 0.01 - * @group Multicopter Rate Control - */ -PARAM_DEFINE_FLOAT(MC_YAWRATE_P, 0.2f); - -/** - * Yaw rate I gain - * - * Yaw rate integral gain. Can be set to compensate static thrust difference or gravity center offset. - * - * @min 0.0 - * @decimal 3 - * @increment 0.01 - * @group Multicopter Rate Control - */ -PARAM_DEFINE_FLOAT(MC_YAWRATE_I, 0.1f); - -/** - * Yaw rate integrator limit - * - * Yaw rate integrator limit. Can be set to increase the amount of integrator available to counteract disturbances or reduced to improve settling time after large yaw moment trim changes. - * - * @min 0.0 - * @decimal 2 - * @increment 0.01 - * @group Multicopter Rate Control - */ -PARAM_DEFINE_FLOAT(MC_YR_INT_LIM, 0.30f); - -/** - * Yaw rate D gain - * - * Yaw rate differential gain. Small values help reduce fast oscillations. If value is too big oscillations will appear again. - * - * @min 0.0 - * @decimal 4 - * @increment 0.0005 - * @group Multicopter Rate Control - */ -PARAM_DEFINE_FLOAT(MC_YAWRATE_D, 0.0f); - -/** - * Yaw rate feedforward - * - * Improves tracking performance. - * - * @min 0.0 - * @decimal 4 - * @group Multicopter Rate Control - */ -PARAM_DEFINE_FLOAT(MC_YAWRATE_FF, 0.0f); - -/** - * Yaw rate controller gain - * - * Global gain of the controller. - * - * This gain scales the P, I and D terms of the controller: - * output = MC_YAWRATE_K * (MC_YAWRATE_P * error - * + MC_YAWRATE_I * error_integral - * + MC_YAWRATE_D * error_derivative) - * Set MC_YAWRATE_P=1 to implement a PID in the ideal form. - * Set MC_YAWRATE_K=1 to implement a PID in the parallel form. - * - * @min 0.01 - * @max 5.0 - * @decimal 4 - * @increment 0.0005 - * @group Multicopter Rate Control - */ -PARAM_DEFINE_FLOAT(MC_YAWRATE_K, 1.0f); - -/** - * Battery power level scaler - * - * This compensates for voltage drop of the battery over time by attempting to - * normalize performance across the operating range of the battery. The copter - * should constantly behave as if it was fully charged with reduced max acceleration - * at lower battery percentages. i.e. if hover is at 0.5 throttle at 100% battery, - * it will still be 0.5 at 60% battery. - * - * @boolean - * @group Multicopter Rate Control - */ -PARAM_DEFINE_INT32(MC_BAT_SCALE_EN, 0); - -/** - * Low pass filter cutoff frequency for yaw torque setpoint - * - * Reduces vibrations by lowering high frequency torque caused by rotor acceleration. - * 0 disables the filter - * - * @min 0 - * @max 10 - * @unit Hz - * @decimal 3 - * @group Multicopter Rate Control - */ -PARAM_DEFINE_FLOAT(MC_YAW_TQ_CUTOFF, 2.f); diff --git a/src/modules/mc_rate_control/mc_rate_control_params.yaml b/src/modules/mc_rate_control/mc_rate_control_params.yaml new file mode 100644 index 0000000000..d6394e50bd --- /dev/null +++ b/src/modules/mc_rate_control/mc_rate_control_params.yaml @@ -0,0 +1,238 @@ +module_name: mc_rate_control +parameters: +- group: Multicopter Rate Control + definitions: + MC_ROLLRATE_P: + description: + short: Roll rate P gain + long: Roll rate proportional gain, i.e. control output for angular speed error + 1 rad/s. + type: float + default: 0.15 + min: 0.01 + max: 0.5 + decimal: 3 + increment: 0.01 + MC_ROLLRATE_I: + description: + short: Roll rate I gain + long: Roll rate integral gain. Can be set to compensate static thrust difference + or gravity center offset. + type: float + default: 0.2 + min: 0.0 + decimal: 3 + increment: 0.01 + MC_RR_INT_LIM: + description: + short: Roll rate integrator limit + long: Roll rate integrator limit. Can be set to increase the amount of integrator + available to counteract disturbances or reduced to improve settling time + after large roll moment trim changes. + type: float + default: 0.3 + min: 0.0 + decimal: 2 + increment: 0.01 + MC_ROLLRATE_D: + description: + short: Roll rate D gain + long: Roll rate differential gain. Small values help reduce fast oscillations. + If value is too big oscillations will appear again. + type: float + default: 0.003 + min: 0.0 + max: 0.01 + decimal: 4 + increment: 0.0005 + MC_ROLLRATE_FF: + description: + short: Roll rate feedforward + long: Improves tracking performance. + type: float + default: 0.0 + min: 0.0 + decimal: 4 + MC_ROLLRATE_K: + description: + short: Roll rate controller gain + long: |- + Global gain of the controller. + + This gain scales the P, I and D terms of the controller: + ``` + output = MC_ROLLRATE_K * (MC_ROLLRATE_P * error + + MC_ROLLRATE_I * error_integral + + MC_ROLLRATE_D * error_derivative) + ``` + Set MC_ROLLRATE_P=1 to implement a PID in the ideal form. + Set MC_ROLLRATE_K=1 to implement a PID in the parallel form. + type: float + default: 1.0 + min: 0.01 + max: 5.0 + decimal: 4 + increment: 0.0005 + MC_PITCHRATE_P: + description: + short: Pitch rate P gain + long: Pitch rate proportional gain, i.e. control output for angular speed + error 1 rad/s. + type: float + default: 0.15 + min: 0.01 + max: 0.6 + decimal: 3 + increment: 0.01 + MC_PITCHRATE_I: + description: + short: Pitch rate I gain + long: Pitch rate integral gain. Can be set to compensate static thrust difference + or gravity center offset. + type: float + default: 0.2 + min: 0.0 + decimal: 3 + increment: 0.01 + MC_PR_INT_LIM: + description: + short: Pitch rate integrator limit + long: Pitch rate integrator limit. Can be set to increase the amount of integrator + available to counteract disturbances or reduced to improve settling time + after large pitch moment trim changes. + type: float + default: 0.3 + min: 0.0 + decimal: 2 + increment: 0.01 + MC_PITCHRATE_D: + description: + short: Pitch rate D gain + long: Pitch rate differential gain. Small values help reduce fast oscillations. + If value is too big oscillations will appear again. + type: float + default: 0.003 + min: 0.0 + decimal: 4 + increment: 0.0005 + MC_PITCHRATE_FF: + description: + short: Pitch rate feedforward + long: Improves tracking performance. + type: float + default: 0.0 + min: 0.0 + decimal: 4 + MC_PITCHRATE_K: + description: + short: Pitch rate controller gain + long: |- + Global gain of the controller. + + This gain scales the P, I and D terms of the controller: + ``` + output = MC_PITCHRATE_K * (MC_PITCHRATE_P * error + + MC_PITCHRATE_I * error_integral + + MC_PITCHRATE_D * error_derivative) + ``` + Set MC_PITCHRATE_P=1 to implement a PID in the ideal form. + Set MC_PITCHRATE_K=1 to implement a PID in the parallel form. + type: float + default: 1.0 + min: 0.01 + max: 5.0 + decimal: 4 + increment: 0.0005 + MC_YAWRATE_P: + description: + short: Yaw rate P gain + long: Yaw rate proportional gain, i.e. control output for angular speed error + 1 rad/s. + type: float + default: 0.2 + min: 0.0 + max: 0.6 + decimal: 3 + increment: 0.01 + MC_YAWRATE_I: + description: + short: Yaw rate I gain + long: Yaw rate integral gain. Can be set to compensate static thrust difference + or gravity center offset. + type: float + default: 0.1 + min: 0.0 + decimal: 3 + increment: 0.01 + MC_YR_INT_LIM: + description: + short: Yaw rate integrator limit + long: Yaw rate integrator limit. Can be set to increase the amount of integrator + available to counteract disturbances or reduced to improve settling time + after large yaw moment trim changes. + type: float + default: 0.3 + min: 0.0 + decimal: 2 + increment: 0.01 + MC_YAWRATE_D: + description: + short: Yaw rate D gain + long: Yaw rate differential gain. Small values help reduce fast oscillations. + If value is too big oscillations will appear again. + type: float + default: 0.0 + min: 0.0 + decimal: 4 + increment: 0.0005 + MC_YAWRATE_FF: + description: + short: Yaw rate feedforward + long: Improves tracking performance. + type: float + default: 0.0 + min: 0.0 + decimal: 4 + MC_YAWRATE_K: + description: + short: Yaw rate controller gain + long: |- + Global gain of the controller. + + This gain scales the P, I and D terms of the controller: + ``` + output = MC_YAWRATE_K * (MC_YAWRATE_P * error + + MC_YAWRATE_I * error_integral + + MC_YAWRATE_D * error_derivative) + ``` + Set MC_YAWRATE_P=1 to implement a PID in the ideal form. + Set MC_YAWRATE_K=1 to implement a PID in the parallel form. + type: float + default: 1.0 + min: 0.01 + max: 5.0 + decimal: 4 + increment: 0.0005 + MC_BAT_SCALE_EN: + description: + short: Battery power level scaler + long: |- + This compensates for voltage drop of the battery over time by attempting to + normalize performance across the operating range of the battery. The copter + should constantly behave as if it was fully charged with reduced max acceleration + at lower battery percentages. i.e. if hover is at 0.5 throttle at 100% battery, + it will still be 0.5 at 60% battery. + type: boolean + default: 0 + MC_YAW_TQ_CUTOFF: + description: + short: Low pass filter cutoff frequency for yaw torque setpoint + long: |- + Reduces vibrations by lowering high frequency torque caused by rotor acceleration. + 0 disables the filter + type: float + default: 2.0 + min: 0 + max: 10 + unit: Hz + decimal: 3 diff --git a/src/modules/muorb/apps/uORBAppsProtobufChannel.cpp b/src/modules/muorb/apps/uORBAppsProtobufChannel.cpp index 53df2863a4..b2862b717b 100644 --- a/src/modules/muorb/apps/uORBAppsProtobufChannel.cpp +++ b/src/modules/muorb/apps/uORBAppsProtobufChannel.cpp @@ -130,6 +130,12 @@ void uORB::AppsProtobufChannel::SubscribeCallback(const char *topic) // This will happen when a newer PX4 version is talking to a // SLPI image that doesn't support the CPULOAD request. If the // SLPI image does support it then we wouldn't get this. + } else if (strcmp(topic, "RESET") == 0) { + PX4_ERR("Got RESET subscription, Rebooting..."); + fc_sensor_kill_slpi(); + sleep(2); + exit(-1); + } else if (_RxHandler) { pthread_mutex_lock(&_rx_mutex); _SlpiSubscriberCache[topic]++; diff --git a/src/modules/muorb/slpi/uORBProtobufChannel.cpp b/src/modules/muorb/slpi/uORBProtobufChannel.cpp index 50fd55b437..d5d438825d 100644 --- a/src/modules/muorb/slpi/uORBProtobufChannel.cpp +++ b/src/modules/muorb/slpi/uORBProtobufChannel.cpp @@ -628,6 +628,15 @@ int px4muorb_send_topic_data(const char *topic_name, const uint8_t *data, } +void px4muorb_request_reset(void) +{ + uORB::ProtobufChannel *channel = uORB::ProtobufChannel::GetInstance(); + + if (channel) { + (void) channel->add_subscription("RESET", 0); + } +} + float px4muorb_get_cpu_load(void) { diff --git a/src/modules/muorb/slpi/uORBProtobufChannel.hpp b/src/modules/muorb/slpi/uORBProtobufChannel.hpp index 186c913ea3..8efbd5795b 100644 --- a/src/modules/muorb/slpi/uORBProtobufChannel.hpp +++ b/src/modules/muorb/slpi/uORBProtobufChannel.hpp @@ -243,6 +243,8 @@ extern "C" { int px4muorb_send_topic_data(const char *name, const uint8_t *data, int data_len_in_bytes) __EXPORT; float px4muorb_get_cpu_load(void) __EXPORT; + + void px4muorb_request_reset(void) __EXPORT; } #endif // _uORBProtobufChannel_hpp_ diff --git a/src/modules/navigator/CMakeLists.txt b/src/modules/navigator/CMakeLists.txt index c55cae3f07..a0ba7e57c6 100644 --- a/src/modules/navigator/CMakeLists.txt +++ b/src/modules/navigator/CMakeLists.txt @@ -34,6 +34,10 @@ add_subdirectory(GeofenceBreachAvoidance) add_subdirectory(MissionFeasibility) +if(BUILD_TESTING) + add_subdirectory(test) +endif() + set(NAVIGATOR_SOURCES navigator_main.cpp navigator_mode.cpp @@ -62,6 +66,13 @@ px4_add_module( MODULE modules__navigator MAIN navigator SRCS ${NAVIGATOR_SOURCES} + MODULE_CONFIG + geofence_params.yaml + mission_params.yaml + navigator_params.yaml + precland_params.yaml + rtl_params.yaml + vtol_takeoff_params.yaml DEPENDS dataman_client geo diff --git a/src/modules/navigator/MissionFeasibility/FeasibilityChecker.cpp b/src/modules/navigator/MissionFeasibility/FeasibilityChecker.cpp index 448fc57038..803f192382 100644 --- a/src/modules/navigator/MissionFeasibility/FeasibilityChecker.cpp +++ b/src/modules/navigator/MissionFeasibility/FeasibilityChecker.cpp @@ -215,7 +215,7 @@ void FeasibilityChecker::doFixedWingChecks(mission_item_s &mission_item, const i } if (!_checks_failed.flags.fixed_wing_land_approach_failed) { - _checks_failed.flags.fixed_wing_land_approach_failed = !checkFixedWindLandApproach(mission_item, current_index); + _checks_failed.flags.fixed_wing_land_approach_failed = !checkFixedWingLandApproach(mission_item, current_index); } } @@ -378,7 +378,7 @@ bool FeasibilityChecker::checkTakeoff(mission_item_s &mission_item) return true; } -bool FeasibilityChecker::checkFixedWindLandApproach(mission_item_s &mission_item, const int current_index) +bool FeasibilityChecker::checkFixedWingLandApproach(mission_item_s &mission_item, const int current_index) { if (mission_item.nav_cmd == NAV_CMD_LAND && current_index > 0) { diff --git a/src/modules/navigator/MissionFeasibility/FeasibilityChecker.hpp b/src/modules/navigator/MissionFeasibility/FeasibilityChecker.hpp index 1c002baf9a..a16c0c9f5f 100644 --- a/src/modules/navigator/MissionFeasibility/FeasibilityChecker.hpp +++ b/src/modules/navigator/MissionFeasibility/FeasibilityChecker.hpp @@ -201,7 +201,7 @@ private: * @param current_index The current mission index * @return False if the check failed. */ - bool checkFixedWindLandApproach(mission_item_s &mission_item, const int current_index); + bool checkFixedWingLandApproach(mission_item_s &mission_item, const int current_index); // methods which are called once at the end /** diff --git a/src/modules/navigator/geofence.cpp b/src/modules/navigator/geofence.cpp index 09fa712b20..9d29586bcf 100644 --- a/src/modules/navigator/geofence.cpp +++ b/src/modules/navigator/geofence.cpp @@ -51,8 +51,6 @@ #include #include -#include "navigator.h" - static uint32_t crc32_for_fence_point(const mission_fence_point_s &fence_point, uint32_t prev_crc32) { union { diff --git a/src/modules/navigator/geofence_params.c b/src/modules/navigator/geofence_params.c deleted file mode 100644 index a775405282..0000000000 --- a/src/modules/navigator/geofence_params.c +++ /dev/null @@ -1,119 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2013-2016 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * AS IS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file geofence_params.c - * - * Parameters for geofence - * - * @author Thomas Gubler - */ - -/* - * Geofence parameters, accessible via MAVLink - */ - -/** - * Geofence violation action. - * - * Note: Setting this value to 4 enables flight termination, - * which will kill the vehicle on violation of the fence. - * - * @min 0 - * @max 5 - * @value 0 None - * @value 1 Warning - * @value 2 Hold mode - * @value 3 Return mode - * @value 4 Terminate - * @value 5 Land mode - * @group Geofence - */ -PARAM_DEFINE_INT32(GF_ACTION, 2); - -/** - * Geofence source - * - * Select which position source should be used. Selecting GPS instead of global position makes sure that there is - * no dependence on the position estimator - * 0 = global position, 1 = GPS - * - * @min 0 - * @max 1 - * @value 0 GPOS - * @value 1 GPS - * @group Geofence - */ -PARAM_DEFINE_INT32(GF_SOURCE, 0); - -/** - * Max horizontal distance from Home - * - * Maximum horizontal distance in meters the vehicle can be from Home before triggering a geofence action. - * Disabled if 0. - * - * @unit m - * @min 0 - * @max 10000 - * @increment 1 - * @group Geofence - */ -PARAM_DEFINE_FLOAT(GF_MAX_HOR_DIST, 0.0f); - -/** - * Max vertical distance from Home - * - * Maximum vertical distance in meters the vehicle can be from Home before triggering a geofence action. - * Disabled if 0. - * - * @unit m - * @min 0 - * @max 10000 - * @increment 1 - * @group Geofence - */ -PARAM_DEFINE_FLOAT(GF_MAX_VER_DIST, 0.0f); - -/** - * [EXPERIMENTAL] Use Pre-emptive geofence triggering - * - * WARNING: This experimental feature may cause flyaways. Use at your own risk. - * - * Predict the motion of the vehicle and trigger the breach if it is determined that the current trajectory - * would result in a breach happening before the vehicle can make evasive maneuvers. - * The vehicle is then re-routed to a safe hold position (stop for multirotor, loiter for fixed wing). - * - * @boolean - * @group Geofence - */ -PARAM_DEFINE_INT32(GF_PREDICT, 0); diff --git a/src/modules/navigator/geofence_params.yaml b/src/modules/navigator/geofence_params.yaml new file mode 100644 index 0000000000..dc0c57301b --- /dev/null +++ b/src/modules/navigator/geofence_params.yaml @@ -0,0 +1,70 @@ +module_name: navigator +parameters: +- group: Geofence + definitions: + GF_ACTION: + description: + short: Geofence violation action + long: |- + Note: Setting this value to 4 enables flight termination, + which will kill the vehicle on violation of the fence. + type: enum + values: + 0: None + 1: Warning + 2: Hold mode + 3: Return mode + 4: Terminate + 5: Land mode + default: 2 + min: 0 + max: 5 + GF_SOURCE: + description: + short: Geofence source + long: |- + Select which position source should be used. Selecting GPS instead of global position makes sure that there is + no dependence on the position estimator + 0 = global position, 1 = GPS + type: enum + values: + 0: GPOS + 1: GPS + default: 0 + min: 0 + max: 1 + GF_MAX_HOR_DIST: + description: + short: Max horizontal distance from Home + long: |- + Maximum horizontal distance in meters the vehicle can be from Home before triggering a geofence action. + Disabled if 0. + type: float + default: 0.0 + unit: m + min: 0 + max: 10000 + increment: 1 + GF_MAX_VER_DIST: + description: + short: Max vertical distance from Home + long: |- + Maximum vertical distance in meters the vehicle can be from Home before triggering a geofence action. + Disabled if 0. + type: float + default: 0.0 + unit: m + min: 0 + max: 10000 + increment: 1 + GF_PREDICT: + description: + short: '[EXPERIMENTAL] Use Pre-emptive geofence triggering' + long: |- + WARNING: This experimental feature may cause flyaways. Use at your own risk. + + Predict the motion of the vehicle and trigger the breach if it is determined that the current trajectory + would result in a breach happening before the vehicle can make evasive maneuvers. + The vehicle is then re-routed to a safe hold position (stop for multirotor, loiter for fixed wing). + type: boolean + default: 0 diff --git a/src/modules/navigator/loiter.cpp b/src/modules/navigator/loiter.cpp index 832a7d6f9a..d0064a483e 100644 --- a/src/modules/navigator/loiter.cpp +++ b/src/modules/navigator/loiter.cpp @@ -73,6 +73,22 @@ Loiter::on_active() && hrt_elapsed_time(&_navigator->get_reposition_triplet()->current.timestamp) < 500_ms) { reposition(); } + + if (_param_nav_ltr_last_dl.get() && _navigator->get_vstatus()->failsafe && _navigator->get_vstatus()->gcs_connection_lost) { + if (!_loiter_at_last_link_position_executed) { + set_loiter_position(); // if we already were in hold (e.g. GoTo), we need to reset the position setpoint + _loiter_at_last_link_position_executed = true; + } + + } else { + _loiter_at_last_link_position_executed = false; + } +} + +void +Loiter::on_inactive() +{ + _loiter_at_last_link_position_executed = false; } void @@ -87,7 +103,6 @@ Loiter::set_loiter_position() _navigator->get_position_setpoint_triplet()->current.type = position_setpoint_s::SETPOINT_TYPE_IDLE; _navigator->set_position_setpoint_triplet_updated(); return; - } position_setpoint_triplet_s *pos_sp_triplet = _navigator->get_position_setpoint_triplet(); @@ -104,10 +119,13 @@ Loiter::set_loiter_position() const float d_current = get_distance_to_next_waypoint(pos_sp_triplet->current.lat, pos_sp_triplet->current.lon, _navigator->get_global_position()->lat, _navigator->get_global_position()->lon); on_loiter = d_current <= (_navigator->get_acceptance_radius() + pos_sp_triplet->current.loiter_radius); - } - if (on_loiter) { + if (_navigator->get_vstatus()->failsafe && _navigator->get_vstatus()->gcs_connection_lost && _param_nav_ltr_last_dl.get()) { + + setLoiterFromLastLink(&_mission_item); + + } else if (on_loiter) { setLoiterItemFromCurrentPositionSetpoint(&_mission_item); } else if (_navigator->get_vstatus()->vehicle_type == vehicle_status_s::VEHICLE_TYPE_ROTARY_WING) { @@ -116,7 +134,6 @@ Loiter::set_loiter_position() } else { setLoiterItemFromCurrentPosition(&_mission_item); } - } // convert mission item to current setpoint diff --git a/src/modules/navigator/loiter.h b/src/modules/navigator/loiter.h index 3af6265e1c..47441cb45c 100644 --- a/src/modules/navigator/loiter.h +++ b/src/modules/navigator/loiter.h @@ -53,6 +53,7 @@ public: void on_activation() override; void on_active() override; + void on_inactive() override; private: /** @@ -66,4 +67,9 @@ private: */ void set_loiter_position(); + bool _loiter_at_last_link_position_executed{false}; + + DEFINE_PARAMETERS( + (ParamInt) _param_nav_ltr_last_dl + ) }; diff --git a/src/modules/navigator/mission.cpp b/src/modules/navigator/mission.cpp index 68226b17a7..60f5a36c92 100644 --- a/src/modules/navigator/mission.cpp +++ b/src/modules/navigator/mission.cpp @@ -57,7 +57,6 @@ #include #include #include -#include #include using namespace time_literals; @@ -100,7 +99,7 @@ Mission::set_current_mission_index(uint16_t index) } if (_navigator->get_mission_result()->valid && (index < _mission.count)) { - if (goToItem(index, true) != PX4_OK) { + if (goToItem(index, MissionTraversalType::FollowMissionControlFlow) != PX4_OK) { // Keep the old mission index (it was not updated by the interface) and report back. return false; } @@ -131,7 +130,7 @@ Mission::set_current_mission_index(uint16_t index) bool Mission::setNextMissionItem() { - return (goToNextItem(true) == PX4_OK); + return (goToNextItem() == PX4_OK); } bool diff --git a/src/modules/navigator/mission_base.cpp b/src/modules/navigator/mission_base.cpp index 79fa7aefd9..8253c3b949 100644 --- a/src/modules/navigator/mission_base.cpp +++ b/src/modules/navigator/mission_base.cpp @@ -224,7 +224,7 @@ MissionBase::on_activation() if (_inactivation_index > 0 && cameraWasTriggering()) { size_t num_found_items{0U}; - getPreviousPositionItems(_inactivation_index - 1, &resume_index, num_found_items, 1U); + getPreviousPositionItems(_inactivation_index, &resume_index, num_found_items, 1U); if (num_found_items == 1U) { // The mission we are resuming had camera triggering enabled. In order to not lose any images @@ -290,9 +290,7 @@ MissionBase::on_active() if (num_found_items == 1U && !PX4_ISFINITE(_mission_item.yaw)) { mission_item_s next_position_mission_item; - const dm_item_t mission_dataman_id = static_cast(_mission.mission_dataman_id); - bool success = _dataman_cache.loadWait(mission_dataman_id, next_mission_item_index, - reinterpret_cast(&next_position_mission_item), sizeof(next_position_mission_item), MAX_DATAMAN_LOAD_WAIT); + const bool success = loadMissionItemFromCache(next_mission_item_index, next_position_mission_item); if (success) { _mission_item.yaw = matrix::wrap_pi(get_bearing_to_next_waypoint(_mission_item.lat, _mission_item.lon, @@ -535,9 +533,7 @@ MissionBase::set_mission_items() bool MissionBase::loadCurrentMissionItem() { - const dm_item_t dm_item = static_cast(_mission.mission_dataman_id); - bool success = _dataman_cache.loadWait(dm_item, _mission.current_seq, reinterpret_cast(&_mission_item), - sizeof(mission_item_s), MAX_DATAMAN_LOAD_WAIT); + const bool success = loadMissionItemFromCache(_mission.current_seq, _mission_item); if (!success) { mavlink_log_critical(_navigator->get_mavlink_log_pub(), "Mission item could not be set.\t"); @@ -913,7 +909,7 @@ MissionBase::do_abort_landing() } else { // move mission index back (landing approach point) - _is_current_planned_mission_item_valid = (goToPreviousItem(false) == PX4_OK); + _is_current_planned_mission_item_valid = (goToPreviousItem(MissionTraversalType::IgnoreDoJump) == PX4_OK); } // send reposition cmd to get out of mission @@ -943,7 +939,7 @@ void MissionBase::publish_navigator_mission_item() navigator_mission_item.yaw = _mission_item.yaw; navigator_mission_item.frame = _mission_item.frame; - navigator_mission_item.frame = _mission_item.origin; + navigator_mission_item.origin = _mission_item.origin; navigator_mission_item.loiter_exit_xtrack = _mission_item.loiter_exit_xtrack; navigator_mission_item.force_heading = _mission_item.force_heading; @@ -971,21 +967,19 @@ bool MissionBase::isMissionValid() const return ret_val; } -int MissionBase::getNonJumpItem(int32_t &mission_index, mission_item_s &mission, bool execute_jump, +int MissionBase::getNonJumpItem(int32_t &mission_index, mission_item_s &mission, MissionTraversalType traversal_type, bool write_jumps, bool mission_direction_backward) { if (mission_index >= _mission.count || mission_index < 0) { return PX4_ERROR; } - const dm_item_t mission_dataman_id = (dm_item_t)_mission.mission_dataman_id; int32_t new_mission_index{mission_index}; mission_item_s new_mission; for (uint16_t jump_count = 0u; jump_count < MAX_JUMP_ITERATION; jump_count++) { /* read mission item from datamanager */ - bool success = _dataman_cache.loadWait(mission_dataman_id, new_mission_index, reinterpret_cast(&new_mission), - sizeof(mission_item_s), MAX_DATAMAN_LOAD_WAIT); + bool success = loadMissionItemFromCache(new_mission_index, new_mission); if (!success) { /* not supposed to happen unless the datamanager can't access the SD card, etc. */ @@ -1001,8 +995,10 @@ int MissionBase::getNonJumpItem(int32_t &mission_index, mission_item_s &mission, return PX4_ERROR; } - if ((new_mission.do_jump_current_count < new_mission.do_jump_repeat_count) && execute_jump) { + if ((new_mission.do_jump_current_count < new_mission.do_jump_repeat_count) + && traversal_type == MissionTraversalType::FollowMissionControlFlow) { if (write_jumps) { + const dm_item_t mission_dataman_id = static_cast(_mission.mission_dataman_id); new_mission.do_jump_current_count++; success = _dataman_cache.writeWait(mission_dataman_id, new_mission_index, reinterpret_cast(&new_mission), sizeof(struct mission_item_s)); @@ -1040,11 +1036,11 @@ int MissionBase::getNonJumpItem(int32_t &mission_index, mission_item_s &mission, return PX4_OK; } -int MissionBase::goToItem(int32_t index, bool execute_jump, bool mission_direction_backward) +int MissionBase::goToItem(int32_t index, MissionTraversalType traversal_type, bool mission_direction_backward) { mission_item_s mission_item; - if (getNonJumpItem(index, mission_item, execute_jump, true, mission_direction_backward) == PX4_OK) { + if (getNonJumpItem(index, mission_item, traversal_type, true, mission_direction_backward) == PX4_OK) { setMissionIndex(index); return PX4_OK; @@ -1062,29 +1058,94 @@ void MissionBase::setMissionIndex(int32_t index) } } +bool MissionBase::loadMissionItemFromCache(int32_t index, mission_item_s &mission_item) +{ + return index >= 0 + && index < _mission.count + && _dataman_cache.loadWait(static_cast(_mission.mission_dataman_id), index, + reinterpret_cast(&mission_item), sizeof(mission_item), + MAX_DATAMAN_LOAD_WAIT); +} + +bool MissionBase::findNextPositionIndex(int32_t start_index, int32_t &next_index, + MissionTraversalType traversal_type) +{ + for (int32_t mission_index = start_index; mission_index < _mission.count;) { + int32_t traversed_index = mission_index; + mission_item_s mission_item{}; + + if (!loadTraversalItem(traversed_index, mission_item, traversal_type, false)) { + return false; + } + + if (item_contains_position(mission_item)) { + next_index = traversed_index; + return true; + } + + mission_index = traversed_index + 1; + } + + return false; +} + +bool MissionBase::findPreviousPositionIndex(int32_t start_index, int32_t &previous_index, + MissionTraversalType traversal_type) +{ + for (int32_t mission_index = start_index - 1; mission_index >= 0;) { + int32_t traversed_index = mission_index; + mission_item_s mission_item{}; + + if (!loadTraversalItem(traversed_index, mission_item, traversal_type, true)) { + return false; + } + + if (item_contains_position(mission_item)) { + previous_index = traversed_index; + return true; + } + + mission_index = traversed_index - 1; + } + + return false; +} + +bool MissionBase::loadTraversalItem(int32_t &mission_index, mission_item_s &mission_item, + MissionTraversalType traversal_type, bool direction_backward) +{ + if (traversal_type == MissionTraversalType::FollowMissionControlFlow) { + return getNonJumpItem(mission_index, mission_item, MissionTraversalType::FollowMissionControlFlow, + false, direction_backward) == PX4_OK; + } + + return loadMissionItemFromCache(mission_index, mission_item); +} + void MissionBase::getPreviousPositionItems(int32_t start_index, int32_t items_index[], size_t &num_found_items, uint8_t max_num_items) +{ + getPreviousPositionItems(start_index, items_index, num_found_items, max_num_items, traversalType()); +} + +void MissionBase::getPreviousPositionItems(int32_t start_index, int32_t items_index[], + size_t &num_found_items, uint8_t max_num_items, MissionTraversalType traversal_type) { num_found_items = 0u; - int32_t next_mission_index{start_index}; + int32_t search_index{start_index}; for (size_t item_idx = 0u; item_idx < max_num_items; item_idx++) { - if (next_mission_index < 0) { + if (search_index < 0) { break; } - mission_item_s next_mission_item; - bool found_next_item{false}; + int32_t previous_position_index{-1}; - do { - next_mission_index--; - found_next_item = getNonJumpItem(next_mission_index, next_mission_item, true, false, true) == PX4_OK; - } while (!MissionBlock::item_contains_position(next_mission_item) && found_next_item); - - if (found_next_item) { - items_index[item_idx] = next_mission_index; + if (findPreviousPositionIndex(search_index, previous_position_index, traversal_type)) { + items_index[item_idx] = previous_position_index; num_found_items = item_idx + 1; + search_index = previous_position_index; } else { break; @@ -1094,29 +1155,30 @@ void MissionBase::getPreviousPositionItems(int32_t start_index, int32_t items_in void MissionBase::getNextPositionItems(int32_t start_index, int32_t items_index[], size_t &num_found_items, uint8_t max_num_items) +{ + getNextPositionItems(start_index, items_index, num_found_items, max_num_items, traversalType()); +} + +void MissionBase::getNextPositionItems(int32_t start_index, int32_t items_index[], + size_t &num_found_items, uint8_t max_num_items, + MissionTraversalType traversal_type) { // Make sure vector does not contain any preexisting elements. num_found_items = 0u; - int32_t next_mission_index{start_index}; + int32_t search_index{start_index}; for (size_t item_idx = 0u; item_idx < max_num_items; item_idx++) { - if (next_mission_index >= _mission.count) { + if (search_index >= _mission.count) { break; } - mission_item_s next_mission_item; - bool found_next_item{false}; + int32_t next_position_index{-1}; - do { - found_next_item = getNonJumpItem(next_mission_index, next_mission_item, true, false, false) == PX4_OK; - next_mission_index++; - } while (!MissionBlock::item_contains_position(next_mission_item) && found_next_item); - - if (found_next_item) { - items_index[item_idx] = math::max(next_mission_index - 1, - static_cast(0)); // subtract 1 to get the index of the first position item + if (findNextPositionIndex(search_index, next_position_index, traversal_type)) { + items_index[item_idx] = next_position_index; num_found_items = item_idx + 1; + search_index = next_position_index + 1; } else { break; @@ -1124,31 +1186,44 @@ void MissionBase::getNextPositionItems(int32_t start_index, int32_t items_index[ } } -int MissionBase::goToNextItem(bool execute_jump) +int MissionBase::goToNextItem() +{ + return goToNextItem(traversalType()); +} + +int MissionBase::goToNextItem(MissionTraversalType traversal_type) { if (_mission.current_seq + 1 >= (_mission.count)) { return PX4_ERROR; } - return goToItem(_mission.current_seq + 1, execute_jump); + return goToItem(_mission.current_seq + 1, traversal_type); } -int MissionBase::goToPreviousItem(bool execute_jump) +int MissionBase::goToPreviousItem() +{ + return goToPreviousItem(traversalType()); +} + +int MissionBase::goToPreviousItem(MissionTraversalType traversal_type) { if (_mission.current_seq <= 0) { return PX4_ERROR; } - return goToItem(_mission.current_seq - 1, execute_jump, true); + return goToItem(_mission.current_seq - 1, traversal_type, true); } -int MissionBase::goToPreviousPositionItem(bool execute_jump) +int MissionBase::goToPreviousPositionItem() { - size_t num_found_items{0U}; - int32_t previous_position_item_index; - getPreviousPositionItems(_mission.current_seq, &previous_position_item_index, num_found_items, 1); + return goToPreviousPositionItem(traversalType()); +} - if (num_found_items == 1U) { +int MissionBase::goToPreviousPositionItem(MissionTraversalType traversal_type) +{ + int32_t previous_position_item_index{-1}; + + if (findPreviousPositionIndex(_mission.current_seq, previous_position_item_index, traversal_type)) { setMissionIndex(previous_position_item_index); return PX4_OK; @@ -1157,13 +1232,16 @@ int MissionBase::goToPreviousPositionItem(bool execute_jump) } } -int MissionBase::goToNextPositionItem(bool execute_jump) +int MissionBase::goToNextPositionItem() { - size_t num_found_items{0U}; - int32_t next_position_item_index; - getNextPositionItems(_mission.current_seq + 1, &next_position_item_index, num_found_items, 1); + return goToNextPositionItem(traversalType()); +} - if (num_found_items == 1U) { +int MissionBase::goToNextPositionItem(MissionTraversalType traversal_type) +{ + int32_t next_position_item_index{-1}; + + if (findNextPositionIndex(_mission.current_seq + 1, next_position_item_index, traversal_type)) { setMissionIndex(next_position_item_index); return PX4_OK; @@ -1177,13 +1255,11 @@ int MissionBase::setMissionToClosestItem(double lat, double lon, float alt, floa { int32_t min_dist_index(-1); float min_dist(FLT_MAX), dist_xy(FLT_MAX), dist_z(FLT_MAX); - const dm_item_t mission_dataman_id = static_cast(_mission.mission_dataman_id); for (int32_t mission_item_index = 0; mission_item_index < _mission.count; mission_item_index++) { mission_item_s mission; - bool success = _dataman_cache.loadWait(mission_dataman_id, mission_item_index, reinterpret_cast(&mission), - sizeof(mission_item_s), MAX_DATAMAN_LOAD_WAIT); + const bool success = loadMissionItemFromCache(mission_item_index, mission); if (!success) { /* not supposed to happen unless the datamanager can't access the SD card, etc. */ @@ -1254,8 +1330,7 @@ void MissionBase::resetMissionJumpCounter() for (size_t mission_index = 0u; mission_index < _mission.count; mission_index++) { mission_item_s mission_item; - bool success = _dataman_client.readSync(mission_dataman_id, mission_index, reinterpret_cast(&mission_item), - sizeof(mission_item_s), MAX_DATAMAN_LOAD_WAIT); + const bool success = loadMissionItemFromCache(mission_index, mission_item); if (!success) { /* not supposed to happen unless the datamanager can't access the SD card, etc. */ @@ -1375,7 +1450,7 @@ bool MissionBase::haveCachedCameraModeItems() bool MissionBase::cameraWasTriggering() { return (_last_camera_trigger_item.nav_cmd == NAV_CMD_DO_TRIGGER_CONTROL - && (int)(_last_camera_trigger_item.params[0] + 0.5f) == 1) || + && static_cast(lround(_last_camera_trigger_item.params[0])) == 1) || (_last_camera_trigger_item.nav_cmd == NAV_CMD_IMAGE_START_CAPTURE) || (_last_camera_trigger_item.nav_cmd == NAV_CMD_DO_SET_CAM_TRIGG_DIST && _last_camera_trigger_item.params[0] > FLT_EPSILON); @@ -1385,11 +1460,8 @@ void MissionBase::updateCachedItemsUpToIndex(const int end_index) { for (int i = 0; i <= end_index; i++) { mission_item_s mission_item; - const dm_item_t dm_current = (dm_item_t)_mission.mission_dataman_id; - bool success = _dataman_client.readSync(dm_current, i, reinterpret_cast(&mission_item), - sizeof(mission_item), 500_ms); - if (success) { + if (loadMissionItemFromCache(i, mission_item)) { cacheItem(mission_item); } } @@ -1415,13 +1487,10 @@ void MissionBase::checkClimbRequired(int32_t mission_item_index) if (num_found_items > 0U) { - const dm_item_t mission_dataman_id = static_cast(_mission.mission_dataman_id); mission_item_s mission; _mission_init_climb_altitude_amsl = NAN; // default to NAN, overwrite below if applicable - const bool success = _dataman_cache.loadWait(mission_dataman_id, next_mission_item_index, - reinterpret_cast(&mission), - sizeof(mission), MAX_DATAMAN_LOAD_WAIT); + const bool success = loadMissionItemFromCache(next_mission_item_index, mission); const bool is_fw_and_takeoff = mission.nav_cmd == NAV_CMD_TAKEOFF && _vehicle_status_sub.get().vehicle_type == vehicle_status_s::VEHICLE_TYPE_FIXED_WING; @@ -1440,7 +1509,7 @@ void MissionBase::checkClimbRequired(int32_t mission_item_index) } } -bool MissionBase::checkMissionDataChanged(mission_s new_mission) +bool MissionBase::checkMissionDataChanged(const mission_s &new_mission) { /* count and land_index are the same if the mission_id did not change. We do not care about changes in geofence or rally counters.*/ return ((new_mission.mission_dataman_id != _mission.mission_dataman_id) || @@ -1460,25 +1529,26 @@ bool MissionBase::canRunMissionFeasibility() void MissionBase::updateMissionAltAfterHomeChanged() { if (_navigator->get_home_position()->update_count > _home_update_counter) { - float new_alt = get_absolute_altitude_for_item(_mission_item); - float altitude_diff = new_alt - _navigator->get_position_setpoint_triplet()->current.alt; - if (_navigator->get_position_setpoint_triplet()->previous.valid - && PX4_ISFINITE(_navigator->get_position_setpoint_triplet()->previous.alt)) { - _navigator->get_position_setpoint_triplet()->previous.alt = _navigator->get_position_setpoint_triplet()->previous.alt + - altitude_diff; + if (item_contains_position(_mission_item)) { + const float new_alt = get_absolute_altitude_for_item(_mission_item); + const float altitude_diff = new_alt - _navigator->get_position_setpoint_triplet()->current.alt; + + if (_navigator->get_position_setpoint_triplet()->previous.valid + && PX4_ISFINITE(_navigator->get_position_setpoint_triplet()->previous.alt)) { + _navigator->get_position_setpoint_triplet()->previous.alt += altitude_diff; + } + + _navigator->get_position_setpoint_triplet()->current.alt += altitude_diff; + + if (_navigator->get_position_setpoint_triplet()->next.valid + && PX4_ISFINITE(_navigator->get_position_setpoint_triplet()->next.alt)) { + _navigator->get_position_setpoint_triplet()->next.alt += altitude_diff; + } + + _navigator->set_position_setpoint_triplet_updated(); } - _navigator->get_position_setpoint_triplet()->current.alt = _navigator->get_position_setpoint_triplet()->current.alt + - altitude_diff; - - if (_navigator->get_position_setpoint_triplet()->next.valid - && PX4_ISFINITE(_navigator->get_position_setpoint_triplet()->next.alt)) { - _navigator->get_position_setpoint_triplet()->next.alt = _navigator->get_position_setpoint_triplet()->next.alt + - altitude_diff; - } - - _navigator->set_position_setpoint_triplet_updated(); _home_update_counter = _navigator->get_home_position()->update_count; } } diff --git a/src/modules/navigator/mission_base.h b/src/modules/navigator/mission_base.h index 3479c3752d..3b648a9e49 100644 --- a/src/modules/navigator/mission_base.h +++ b/src/modules/navigator/mission_base.h @@ -99,26 +99,58 @@ protected: MISSION_TYPE_MISSION } _mission_type{MissionType::MISSION_TYPE_NONE}; + enum class MissionTraversalType : uint8_t { + FollowMissionControlFlow = 0, + IgnoreDoJump, + }; + /** - * @brief Get the Previous Mission Position Items + * @brief Get the previous mission position items using this mode's traversal policy. * - * @param[in] start_index is the index from where to start searching the previous mission position items - * @param[out] items_index is an array of indexes indicating the previous mission position items found - * @param[out] num_found_items are the amount of previous position items found - * @param[in] max_num_items are the maximum amount of previous position items to be searched + * Convenience overload for callers that want the navigation mode default. Keep the + * explicit traversal overload below for cases that intentionally need different semantics. + * + * @param[in] start_index Index from which to start searching backward + * @param[out] items_index Array of the previous position item indices + * @param[out] num_found_items Number of position items found + * @param[in] max_num_items Maximum number of position items to collect */ void getPreviousPositionItems(int32_t start_index, int32_t items_index[], size_t &num_found_items, uint8_t max_num_items); /** - * @brief Get the next mission item containing a position setpoint + * @brief Get the previous mission position items using an explicit traversal policy. * - * @param[in] start_index is the index from where to start searching (first possible return index) - * @param[out] items_index is an array of indexes indicating the next mission position items found - * @param[out] num_found_items are the amount of next position items found - * @param[in] max_num_items are the maximum amount of next position items to be searched + * @param[in] start_index Index from which to start searching backward + * @param[out] items_index Array of the previous position item indices + * @param[out] num_found_items Number of position items found + * @param[in] max_num_items Maximum number of position items to collect + * @param[in] traversal_type Whether to follow DO_JUMP mission control flow or ignore DO_JUMP items + */ + void getPreviousPositionItems(int32_t start_index, int32_t items_index[], size_t &num_found_items, + uint8_t max_num_items, + MissionTraversalType traversal_type); + /** + * @brief Get the next mission item containing a position setpoint using this mode's traversal policy. + * + * @param[in] start_index Index from which to start searching forward + * @param[out] items_index Array of the next position item indices + * @param[out] num_found_items Number of position items found + * @param[in] max_num_items Maximum number of position items to collect */ void getNextPositionItems(int32_t start_index, int32_t items_index[], size_t &num_found_items, uint8_t max_num_items); + /** + * @brief Get the next mission item containing a position setpoint using an explicit traversal policy. + * + * @param[in] start_index Index from which to start searching forward + * @param[out] items_index Array of the next position item indices + * @param[out] num_found_items Number of position items found + * @param[in] max_num_items Maximum number of position items to collect + * @param[in] traversal_type Whether to follow DO_JUMP mission control flow or ignore DO_JUMP items + */ + void getNextPositionItems(int32_t start_index, int32_t items_index[], size_t &num_found_items, + uint8_t max_num_items, + MissionTraversalType traversal_type); /** * @brief Mission has a land start, a land, and is valid * @@ -127,43 +159,71 @@ protected: */ bool hasMissionLandStart() const { return _mission.land_start_index >= 0 && _mission.land_index >= 0 && isMissionValid();}; /** - * @brief Go to next Mission Item + * @brief Go to next Mission Item using this mode's traversal policy. * Go to next non jump mission item * - * @param[in] execute_jump Flag indicating if a jump should be executed or ignored * @return PX4_OK if next mission item exists, PX4_ERR otherwise */ - int goToNextItem(bool execute_jump); + int goToNextItem(); /** - * @brief Go to previous Mission Item + * @brief Go to next Mission Item using an explicit traversal policy. + * Go to next non jump mission item + * + * @param[in] traversal_type Whether to follow DO_JUMP mission control flow or ignore DO_JUMP items + * @return PX4_OK if next mission item exists, PX4_ERR otherwise + */ + int goToNextItem(MissionTraversalType traversal_type); + /** + * @brief Go to previous Mission Item using this mode's traversal policy. * Go to previous non jump mission item - * @param[in] execute_jump Flag indicating if a jump should be executed or ignored + * * @return PX4_OK if previous mission item exists, PX4_ERR otherwise */ - int goToPreviousItem(bool execute_jump); + int goToPreviousItem(); + /** + * @brief Go to previous Mission Item using an explicit traversal policy. + * Go to previous non jump mission item + * + * @param[in] traversal_type Whether to follow DO_JUMP mission control flow or ignore DO_JUMP items + * @return PX4_OK if previous mission item exists, PX4_ERR otherwise + */ + int goToPreviousItem(MissionTraversalType traversal_type); /** * @brief Go to Mission Item * * @param[in] index Index of the mission item to go to - * @param[in] execute_jump Flag indicating if a jump should be executed of ignored + * @param[in] traversal_type Whether to follow DO_JUMP mission control flow or ignore DO_JUMP items * @param[in] mission_direction_backward Flag indicating if a mission is flown backward * @return PX4_OK if the mission item exists, PX4_ERR otherwise */ - int goToItem(int32_t index, bool execute_jump, bool mission_direction_backward = false); + int goToItem(int32_t index, MissionTraversalType traversal_type = MissionTraversalType::FollowMissionControlFlow, + bool mission_direction_backward = false); /** - * @brief Go To Previous Mission Position Item + * @brief Go To Previous Mission Position Item using this mode's traversal policy. * - * @param[in] execute_jump Flag indicating if a jump should be executed or ignored * @return PX4_OK if previous mission item exists, PX4_ERR otherwise */ - int goToPreviousPositionItem(bool execute_jump); + int goToPreviousPositionItem(); /** - * @brief Go To Next Mission Position Item + * @brief Go To Previous Mission Position Item using an explicit traversal policy. + * + * @param[in] traversal_type Whether to follow DO_JUMP mission control flow or ignore DO_JUMP items + * @return PX4_OK if previous mission item exists, PX4_ERR otherwise + */ + int goToPreviousPositionItem(MissionTraversalType traversal_type); + /** + * @brief Go To Next Mission Position Item using this mode's traversal policy. * - * @param[in] execute_jump Flag indicating if a jump should be executed or ignored * @return PX4_OK if next mission item exists, PX4_ERR otherwise */ - int goToNextPositionItem(bool execute_jump); + int goToNextPositionItem(); + /** + * @brief Go To Next Mission Position Item using an explicit traversal policy. + * + * @param[in] traversal_type Whether to follow DO_JUMP mission control flow or ignore DO_JUMP items + * @return PX4_OK if next mission item exists, PX4_ERR otherwise + */ + int goToNextPositionItem(MissionTraversalType traversal_type); /** * @brief Go to Mission Land Start Item * @@ -202,13 +262,13 @@ protected: * * @param[out] mission_index Index of the mission item * @param[out] mission The return mission item - * @param execute_jump Flag indicating if a jump item should be executed or ignored + * @param traversal_type Whether to follow DO_JUMP mission control flow or ignore DO_JUMP items * @param write_jumps Flag indicating if the jump counter should be updated * @param mission_direction_backward Flag indicating if the mission is flown backwards * @return PX4_OK if mission item could be loaded, PX4_ERR otherwise */ - int getNonJumpItem(int32_t &mission_index, mission_item_s &mission, bool execute_jump, bool write_jumps, - bool mission_direction_backward = false); + int getNonJumpItem(int32_t &mission_index, mission_item_s &mission, MissionTraversalType traversal_type, + bool write_jumps, bool mission_direction_backward = false); /** * @brief Is Mission Valid * @@ -316,6 +376,18 @@ protected: */ bool position_setpoint_equal(const position_setpoint_s *p1, const position_setpoint_s *p2) const; + /** + * @brief Traversal mode used by this navigation mode when walking position items. + * + * Mission mode follows active DO_JUMP control flow by default. Derived modes such as + * mission-based RTL can override this to walk the geometric mission path instead. + * Traversal helpers use this policy unless the caller explicitly overrides it. + */ + virtual MissionTraversalType traversalType() const + { + return MissionTraversalType::FollowMissionControlFlow; + } + /** * @brief Set the Mission Index * @@ -323,6 +395,40 @@ protected: */ void setMissionIndex(int32_t index); + /** + * @brief Load a single mission item from the dataman cache. + * + * @param[in] index Index of the mission item + * @param[out] mission_item The loaded mission item + * @return true if the item was loaded successfully + */ + virtual bool loadMissionItemFromCache(int32_t index, mission_item_s &mission_item); + + /** + * @brief Find the next position mission item. + * + * Walks forward through the mission starting at @p start_index. + * + * @param[in] start_index First index to check + * @param[out] next_index Index of the found position item + * @param[in] traversal_type Whether to follow DO_JUMP mission control flow or ignore DO_JUMP items + * @return true if a position item was found + */ + bool findNextPositionIndex(int32_t start_index, int32_t &next_index, + MissionTraversalType traversal_type); + + /** + * @brief Find the previous position mission item. + * + * Walks backward through the mission starting at @p start_index - 1. + * + * @param[in] start_index Search starts one before this index + * @param[out] previous_index Index of the found position item + * @param[in] traversal_type Whether to follow DO_JUMP mission control flow or ignore DO_JUMP items + * @return true if a position item was found + */ + bool findPreviousPositionIndex(int32_t start_index, int32_t &previous_index, + MissionTraversalType traversal_type); bool _is_current_planned_mission_item_valid{false}; /**< Flag indicating if the currently loaded mission item is valid*/ bool _mission_has_been_activated{false}; /**< Flag indicating if the mission has been activated*/ @@ -363,6 +469,12 @@ private: */ void updateMavlinkMission(); + /** + * @brief Load a mission item according to the requested mission traversal type. + */ + bool loadTraversalItem(int32_t &mission_index, mission_item_s &mission_item, + MissionTraversalType traversal_type, bool direction_backward); + /** * Reset mission */ @@ -464,7 +576,7 @@ private: * @param[in] new_mission new mission received over uorb * @return true if the relevant mission data has changed, false otherwise */ - bool checkMissionDataChanged(mission_s new_mission); + bool checkMissionDataChanged(const mission_s &new_mission); /** * @brief update current mission altitude after the home position has changed. diff --git a/src/modules/navigator/mission_block.cpp b/src/modules/navigator/mission_block.cpp index d28abffc03..d56259cb62 100644 --- a/src/modules/navigator/mission_block.cpp +++ b/src/modules/navigator/mission_block.cpp @@ -760,6 +760,19 @@ MissionBlock::setLoiterItemCommonFields(struct mission_item_s *item) item->origin = ORIGIN_ONBOARD; } +void +MissionBlock::setLoiterFromLastLink(struct mission_item_s *item) +{ + setLoiterItemCommonFields(item); + + const PositionYawSetpoint &last_heartbeat_pos = _navigator->get_last_pos_with_gcs_heartbeat(); + + item->lat = PX4_ISFINITE(last_heartbeat_pos.lat) ? last_heartbeat_pos.lat : _navigator->get_global_position()->lat; + item->lon = PX4_ISFINITE(last_heartbeat_pos.lon) ? last_heartbeat_pos.lon : _navigator->get_global_position()->lon; + item->altitude = PX4_ISFINITE(last_heartbeat_pos.alt) ? last_heartbeat_pos.alt : _navigator->get_global_position()->alt; + item->yaw = PX4_ISFINITE(last_heartbeat_pos.yaw) ? last_heartbeat_pos.yaw : NAN; +} + void MissionBlock::set_takeoff_item(struct mission_item_s *item, float abs_altitude) { @@ -988,7 +1001,7 @@ void MissionBlock::startPrecLand(uint16_t land_precision) } } -void MissionBlock::updateAltToAvoidTerrainCollisionAndRepublishTriplet(mission_item_s mission_item) +void MissionBlock::updateAltToAvoidTerrainCollisionAndRepublishTriplet(const mission_item_s &mission_item) { // Avoid flying into terrain using the distance sensor. Enable through the parameter NAV_MIN_GND_DIST. // Only active during commanded descents with vz>0 (to prevent climb-aways), excluding landing and VTOL transitions. diff --git a/src/modules/navigator/mission_block.h b/src/modules/navigator/mission_block.h index 52f626a2fe..a96864b8f2 100644 --- a/src/modules/navigator/mission_block.h +++ b/src/modules/navigator/mission_block.h @@ -165,6 +165,7 @@ protected: void setLoiterItemFromCurrentPosition(struct mission_item_s *item); void setLoiterItemFromCurrentPositionWithBraking(struct mission_item_s *item); + void setLoiterFromLastLink(struct mission_item_s *item); void setLoiterItemCommonFields(struct mission_item_s *item); @@ -198,7 +199,7 @@ protected: void setLandMissionItem(mission_item_s &item, const PositionYawSetpoint &pos_yaw_sp) const; void startPrecLand(uint16_t land_precision); - void updateAltToAvoidTerrainCollisionAndRepublishTriplet(mission_item_s mission_item); + void updateAltToAvoidTerrainCollisionAndRepublishTriplet(const mission_item_s &mission_item); /** * @brief Issue a command for mission items with a nav_cmd that specifies an action diff --git a/src/modules/navigator/mission_feasibility_checker.cpp b/src/modules/navigator/mission_feasibility_checker.cpp index 8049df1236..14dc678872 100644 --- a/src/modules/navigator/mission_feasibility_checker.cpp +++ b/src/modules/navigator/mission_feasibility_checker.cpp @@ -64,6 +64,8 @@ MissionFeasibilityChecker::checkMissionFeasible(const mission_s &mission) // trivial case: A mission with length zero cannot be valid if ((int)mission.count <= 0) { + mavlink_log_critical(_navigator->get_mavlink_log_pub(), "Mission rejected: empty\t"); + events::send(events::ID("navigator_mis_empty"), {events::Log::Error, events::LogInternal::Info}, "Mission rejected: empty"); return false; } @@ -85,6 +87,7 @@ MissionFeasibilityChecker::checkMissionFeasible(const mission_s &mission) if (!success) { _navigator->get_mission_result()->warning = true; /* not supposed to happen unless the datamanager can't access the SD card, etc. */ + logDatamanReadFailure(i, mission.mission_dataman_id); return false; } @@ -125,6 +128,7 @@ MissionFeasibilityChecker::checkMissionAgainstGeofence(const mission_s &mission, if (!success) { /* not supposed to happen unless the datamanager can't access the SD card, etc. */ + logDatamanReadFailure(i, mission.mission_dataman_id); return false; } @@ -152,3 +156,11 @@ MissionFeasibilityChecker::checkMissionAgainstGeofence(const mission_s &mission, return true; } + +void MissionFeasibilityChecker::logDatamanReadFailure(const size_t mission_item, const uint8_t dataman_id) +{ + mavlink_log_critical(_navigator->get_mavlink_log_pub(), "Mission rejected: dataman read failed at item %zu (dm_id=%u)\t", mission_item, + static_cast(dataman_id)); + events::send(events::ID("navigator_mis_dm_read_fail"), {events::Log::Error, events::LogInternal::Info}, + "Mission rejected: dataman read failed at item {1} (dm_id={2})", static_cast(mission_item), dataman_id); +} diff --git a/src/modules/navigator/mission_feasibility_checker.h b/src/modules/navigator/mission_feasibility_checker.h index 31751f659f..88b36b6f9b 100644 --- a/src/modules/navigator/mission_feasibility_checker.h +++ b/src/modules/navigator/mission_feasibility_checker.h @@ -57,6 +57,7 @@ private: FeasibilityChecker _feasibility_checker; bool checkMissionAgainstGeofence(const mission_s &mission, float home_alt, bool home_valid); + void logDatamanReadFailure(const size_t mission_item, const uint8_t dataman_id); public: MissionFeasibilityChecker(Navigator *navigator, DatamanClient &dataman_client) : diff --git a/src/modules/navigator/mission_params.c b/src/modules/navigator/mission_params.c deleted file mode 100644 index c0bbf5c254..0000000000 --- a/src/modules/navigator/mission_params.c +++ /dev/null @@ -1,164 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2014-2016 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file mission_params.c - * - * Parameters for mission. - * - * @author Julian Oes - */ - -/* - * Mission parameters, accessible via MAVLink - */ - -/** - * Default take-off altitude - * - * This is the relative altitude the system will take off to - * if not otherwise specified. - * - * @unit m - * @min 0 - * @decimal 1 - * @increment 0.5 - * @group Mission - */ -PARAM_DEFINE_FLOAT(MIS_TAKEOFF_ALT, 2.5f); - -/** - * Mission takeoff/landing required - * - * Specifies if a mission has to contain a takeoff and/or mission landing. - * Validity of configured takeoffs/landings is checked independently of the setting here. - * - * @value 0 No requirements - * @value 1 Require a takeoff - * @value 2 Require a landing - * @value 3 Require a takeoff and a landing - * @value 4 Require both a takeoff and a landing, or neither - * @value 5 Same as previous when landed, in-air require landing only if no valid VTOL approach is present - * @group Mission - */ -PARAM_DEFINE_INT32(MIS_TKO_LAND_REQ, 0); - -/** - * Maximal horizontal distance from Home to first waypoint - * - * There will be a warning message if the current waypoint is more distant than MIS_DIST_1WP from Home. - * Has no effect on mission validity. - * Set a value of zero or less to disable. - * - * @unit m - * @min -1 - * @max 100000 - * @decimal 1 - * @increment 100 - * @group Mission - */ -PARAM_DEFINE_FLOAT(MIS_DIST_1WP, 10000); - -/** -* Enable yaw control of the mount. (Only affects multicopters and ROI mission items) -* -* If enabled, yaw commands will be sent to the mount and the vehicle will follow its heading towards the flight direction. -* If disabled, the vehicle will yaw towards the ROI. -* -* @value 0 Disable -* @value 1 Enable -* @min 0 -* @max 1 -* @group Mission -*/ -PARAM_DEFINE_INT32(MIS_MNT_YAW_CTL, 0); - -/** - * Time in seconds we wait on reaching target heading at a waypoint if it is forced. - * - * If set > 0 it will ignore the target heading for normal waypoint acceptance. If the - * waypoint forces the heading the timeout will matter. For example on VTOL forwards transition. - * Mainly useful for VTOLs that have less yaw authority and might not reach target - * yaw in wind. Disabled by default. - * - * @unit s - * @min -1 - * @max 20 - * @decimal 1 - * @increment 1 - * @group Mission - */ -PARAM_DEFINE_FLOAT(MIS_YAW_TMT, -1.0f); - -/** - * Max yaw error in degrees needed for waypoint heading acceptance. - * - * @unit deg - * @min 0 - * @max 90 - * @decimal 1 - * @increment 1 - * @group Mission - */ -PARAM_DEFINE_FLOAT(MIS_YAW_ERR, 12.0f); - -/** - * Landing abort min altitude - * - * Minimum altitude above landing point that the vehicle will climb to after an aborted landing. - * Then vehicle will loiter in this altitude until further command is received. - * Only applies to fixed-wing vehicles. - * - * @unit m - * @min 0 - * @group Mission - */ -PARAM_DEFINE_INT32(MIS_LND_ABRT_ALT, 30); - -/** - * Timeout to allow the payload to execute the mission command - * - * Ensure: - * gripper: NAV_CMD_DO_GRIPPER - * has released before continuing mission. - * winch: CMD_DO_WINCH - * has delivered before continuing mission. - * gimbal: CMD_DO_GIMBAL_MANAGER_PITCHYAW - * has reached the commanded orientation before beginning to take pictures. - * - * @unit s - * @min 0 - * @decimal 1 - * @group Mission - */ -PARAM_DEFINE_FLOAT(MIS_COMMAND_TOUT, 0.f); diff --git a/src/modules/navigator/mission_params.yaml b/src/modules/navigator/mission_params.yaml new file mode 100644 index 0000000000..8766663168 --- /dev/null +++ b/src/modules/navigator/mission_params.yaml @@ -0,0 +1,115 @@ +module_name: navigator +parameters: +- group: Mission + definitions: + MIS_TAKEOFF_ALT: + description: + short: Default take-off altitude + long: |- + This is the relative altitude the system will take off to + if not otherwise specified. + type: float + default: 2.5 + unit: m + min: 0 + decimal: 1 + increment: 0.5 + MIS_TKO_LAND_REQ: + description: + short: Mission takeoff/landing required + long: |- + Specifies if a mission has to contain a takeoff and/or mission landing. + Validity of configured takeoffs/landings is checked independently of the setting here. + type: enum + values: + 0: No requirements + 1: Require a takeoff + 2: Require a landing + 3: Require a takeoff and a landing + 4: Require both a takeoff and a landing, or neither + 5: Same as previous when landed, in-air require landing only if no valid VTOL + approach is present + default: 0 + MIS_DIST_1WP: + description: + short: Maximal horizontal distance from Home to first waypoint + long: |- + There will be a warning message if the current waypoint is more distant than MIS_DIST_1WP from Home. + Has no effect on mission validity. + Set a value of zero or less to disable. + type: float + default: 10000 + unit: m + min: -1 + max: 100000 + decimal: 1 + increment: 100 + MIS_MNT_YAW_CTL: + description: + short: Enable gimbal yaw control in missions + long: |- + Enable yaw control of the mount. (Only affects multicopters and ROI mission items) + + If enabled, yaw commands will be sent to the mount and the vehicle will follow its heading towards the flight direction. + If disabled, the vehicle will yaw towards the ROI. + type: enum + values: + 0: Disable + 1: Enable + default: 0 + min: 0 + max: 1 + MIS_YAW_TMT: + description: + short: Waypoint heading timeout + long: |- + Time in seconds we wait on reaching target heading at a waypoint if it is forced + + If set > 0 it will ignore the target heading for normal waypoint acceptance. If the + waypoint forces the heading the timeout will matter. For example on VTOL forwards transition. + Mainly useful for VTOLs that have less yaw authority and might not reach target + yaw in wind. Disabled by default. + type: float + default: -1.0 + unit: s + min: -1 + max: 20 + decimal: 1 + increment: 1 + MIS_YAW_ERR: + description: + short: Max yaw error in degrees needed for waypoint heading acceptance + type: float + default: 12.0 + unit: deg + min: 0 + max: 90 + decimal: 1 + increment: 1 + MIS_LND_ABRT_ALT: + description: + short: Landing abort min altitude + long: |- + Minimum altitude above landing point that the vehicle will climb to after an aborted landing. + Then vehicle will loiter in this altitude until further command is received. + Only applies to fixed-wing vehicles. + type: int32 + default: 30 + unit: m + min: 0 + MIS_COMMAND_TOUT: + description: + short: Timeout to allow the payload to execute the mission command + long: |- + Ensure: + gripper: NAV_CMD_DO_GRIPPER + has released before continuing mission. + winch: CMD_DO_WINCH + has delivered before continuing mission. + gimbal: CMD_DO_GIMBAL_MANAGER_PITCHYAW + has reached the commanded orientation before beginning to take pictures. + type: float + default: 0.0 + unit: s + min: 0 + decimal: 1 diff --git a/src/modules/navigator/navigator.h b/src/modules/navigator/navigator.h index 1b00b5700c..2a50d7a1c6 100644 --- a/src/modules/navigator/navigator.h +++ b/src/modules/navigator/navigator.h @@ -57,6 +57,9 @@ #include "GeofenceBreachAvoidance/geofence_breach_avoidance.h" +#include +#include + #if CONFIG_NAVIGATOR_ADSB #include #endif // CONFIG_NAVIGATOR_ADSB @@ -174,6 +177,8 @@ public: PrecLand *get_precland() { return &_precland; } /**< allow others, e.g. Mission, to use the precision land block */ + const PositionYawSetpoint &get_last_pos_with_gcs_heartbeat() const { return _last_pos_with_gcs_heartbeat; } + const vehicle_roi_s &get_vroi() { return _vroi; } void reset_vroi() { _vroi = {}; } @@ -402,6 +407,9 @@ private: bool _is_capturing_images{false}; // keep track if we need to stop capturing images + uORB::SubscriptionMultiArray _telemetry_status_subs{ORB_ID::telemetry_status}; + PositionYawSetpoint _last_pos_with_gcs_heartbeat{(double)NAN, (double)NAN, NAN, NAN}; + // timer to trigger a delayed set gimbal neutral command hrt_abstime _gimbal_neutral_activation_time{UINT64_MAX}; diff --git a/src/modules/navigator/navigator_main.cpp b/src/modules/navigator/navigator_main.cpp index 4102427954..82319c638c 100644 --- a/src/modules/navigator/navigator_main.cpp +++ b/src/modules/navigator/navigator_main.cpp @@ -225,6 +225,19 @@ void Navigator::run() _global_pos_sub.copy(&_global_pos); } + /* update last known position with GCS heartbeat */ + for (auto &telemetry_sub : _telemetry_status_subs) { + telemetry_status_s telemetry; + + if (telemetry_sub.update(&telemetry) && telemetry.heartbeat_type_gcs) { + _last_pos_with_gcs_heartbeat.lat = _global_pos.lat; + _last_pos_with_gcs_heartbeat.lon = _global_pos.lon; + _last_pos_with_gcs_heartbeat.alt = _global_pos.alt; + _last_pos_with_gcs_heartbeat.yaw = _local_pos.heading; + break; + } + } + /* check for parameter updates */ if (_parameter_update_sub.updated()) { // clear update @@ -461,12 +474,6 @@ void Navigator::run() // set the altitude corresponding to command rep->current.alt = PX4_ISFINITE(cmd.param1) ? cmd.param1 : get_global_position()->alt; - if (_vstatus.vehicle_type == vehicle_status_s::VEHICLE_TYPE_ROTARY_WING - && (get_position_setpoint_triplet()->current.type != position_setpoint_s::SETPOINT_TYPE_TAKEOFF)) { - - preproject_stop_point(rep->current.lat, rep->current.lon); - } - if (PX4_ISFINITE(curr->current.loiter_radius) && curr->current.loiter_radius > FLT_EPSILON) { rep->current.loiter_radius = curr->current.loiter_radius; diff --git a/src/modules/navigator/navigator_params.c b/src/modules/navigator/navigator_params.c deleted file mode 100644 index f830011c20..0000000000 --- a/src/modules/navigator/navigator_params.c +++ /dev/null @@ -1,210 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2014-2016 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * AS IS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file navigator_params.c - * - * Parameters for navigator in general - * - * @author Julian Oes - * @author Thomas Gubler - */ - -/** - * Loiter radius (FW only) - * - * Default value of loiter radius in fixed-wing mode (e.g. for Loiter mode). - * - * The direction of the loiter can be set via the sign: A positive value for - * clockwise, negative for counter-clockwise. - * - * @unit m - * @min -10000 - * @max 10000 - * @decimal 1 - * @increment 0.5 - * @group Mission - */ -PARAM_DEFINE_FLOAT(NAV_LOITER_RAD, 80.0f); - -/** - * Acceptance Radius - * - * Default acceptance radius, overridden by acceptance radius of waypoint if set. - * For fixed wing the npfg switch distance is used for horizontal acceptance. - * - * @unit m - * @min 0.05 - * @max 200.0 - * @decimal 1 - * @increment 0.5 - * @group Mission - */ -PARAM_DEFINE_FLOAT(NAV_ACC_RAD, 10.0f); - -/** - * FW Altitude Acceptance Radius - * - * Acceptance radius for fixedwing altitude. - * - * @unit m - * @min 0.05 - * @max 200.0 - * @decimal 1 - * @increment 0.5 - * @group Mission - */ -PARAM_DEFINE_FLOAT(NAV_FW_ALT_RAD, 10.0f); - -/** - * FW Altitude Acceptance Radius before a landing - * - * Altitude acceptance used for the last waypoint before a fixed-wing landing. This is usually smaller - * than the standard vertical acceptance because close to the ground higher accuracy is required. - * - * @unit m - * @min 0.05 - * @max 200.0 - * @decimal 1 - * @group Mission - */ -PARAM_DEFINE_FLOAT(NAV_FW_ALTL_RAD, 5.0f); - -/** - * MC Altitude Acceptance Radius - * - * Acceptance radius for multicopter altitude. - * - * @unit m - * @min 0.05 - * @max 200.0 - * @decimal 1 - * @increment 0.5 - * @group Mission - */ -PARAM_DEFINE_FLOAT(NAV_MC_ALT_RAD, 0.8f); - -/** - * Set traffic avoidance mode - * - * Enabling this will allow the system to respond - * to transponder data from e.g. ADSB transponders - * - * @value 0 Disabled - * @value 1 Warn only - * @value 2 Return mode - * @value 3 Land mode - * @value 4 Position Hold mode - * - * @group Mission - */ -PARAM_DEFINE_INT32(NAV_TRAFF_AVOID, 1); - -/** - * Set NAV TRAFFIC AVOID horizontal distance - * - * Defines a crosstrack horizontal distance - * - * @unit m - * @min 500 - * - * @group Mission - */ -PARAM_DEFINE_FLOAT(NAV_TRAFF_A_HOR, 500); - -/** - * Set NAV TRAFFIC AVOID vertical distance - * - * - * @unit m - * @min 10 - * @max 500 - * - * @group Mission - */ -PARAM_DEFINE_FLOAT(NAV_TRAFF_A_VER, 500); - -/** - * Estimated time until collision - * - * Minimum acceptable time until collsion. - * Assumes constant speed over 3d distance. - * - * @unit s - * @min 1 - * @max 900000000 - * @group Mission - */ -PARAM_DEFINE_INT32(NAV_TRAFF_COLL_T, 60); - -/** - * Force VTOL mode takeoff and land - * - * @boolean - * @group Mission - */ -PARAM_DEFINE_INT32(NAV_FORCE_VT, 1); - -/** - * Minimum Loiter altitude - * - * This is the minimum altitude above Home the system will always obey in Loiter (Hold) mode if switched into this - * mode without specifying an altitude (e.g. through Loiter switch on RC). - * Doesn't affect Loiters that are part of Missions or that are entered through a reposition setpoint ("Go to"). - * Set to a negative value to disable. - * - * @unit m - * @min -1 - * @decimal 1 - * @increment 0.5 - * @group Mission - */ -PARAM_DEFINE_FLOAT(NAV_MIN_LTR_ALT, -1.f); - -/** - * Minimum height above ground during Mission and RTL - * - * Minimum height above ground the vehicle is allowed to descend to during Mission and RTL, - * excluding landing commands. - * Requires a distance sensor to be set up. - * Note: only prevents the vehicle from descending further, but does not force it to climb. - * - * Set to a negative value to disable. - * - * @unit m - * @min -1 - * @decimal 1 - * @increment 1 - * @group Mission - */ -PARAM_DEFINE_FLOAT(NAV_MIN_GND_DIST, -1.f); diff --git a/src/modules/navigator/navigator_params.yaml b/src/modules/navigator/navigator_params.yaml new file mode 100644 index 0000000000..18bb1146a0 --- /dev/null +++ b/src/modules/navigator/navigator_params.yaml @@ -0,0 +1,152 @@ +module_name: navigator +parameters: +- group: Mission + definitions: + NAV_LOITER_RAD: + description: + short: Loiter radius (FW only) + long: |- + Default value of loiter radius in fixed-wing mode (e.g. for Loiter mode). + + The direction of the loiter can be set via the sign: A positive value for + clockwise, negative for counter-clockwise. + type: float + default: 80.0 + unit: m + min: -10000 + max: 10000 + decimal: 1 + increment: 0.5 + NAV_ACC_RAD: + description: + short: Acceptance Radius + long: |- + Default acceptance radius, overridden by acceptance radius of waypoint if set. + For fixed wing the npfg switch distance is used for horizontal acceptance. + type: float + default: 10.0 + unit: m + min: 0.05 + max: 200.0 + decimal: 1 + increment: 0.5 + NAV_FW_ALT_RAD: + description: + short: FW Altitude Acceptance Radius + long: Acceptance radius for fixedwing altitude. + type: float + default: 10.0 + unit: m + min: 0.05 + max: 200.0 + decimal: 1 + increment: 0.5 + NAV_FW_ALTL_RAD: + description: + short: FW Altitude Acceptance Radius before a landing + long: |- + Altitude acceptance used for the last waypoint before a fixed-wing landing. This is usually smaller + than the standard vertical acceptance because close to the ground higher accuracy is required. + type: float + default: 5.0 + unit: m + min: 0.05 + max: 200.0 + decimal: 1 + NAV_MC_ALT_RAD: + description: + short: MC Altitude Acceptance Radius + long: Acceptance radius for multicopter altitude. + type: float + default: 0.8 + unit: m + min: 0.05 + max: 200.0 + decimal: 1 + increment: 0.5 + NAV_TRAFF_AVOID: + description: + short: Set traffic avoidance mode + long: |- + Enabling this will allow the system to respond + to transponder data from e.g. ADSB transponders + type: enum + values: + 0: Disabled + 1: Warn only + 2: Return mode + 3: Land mode + 4: Position Hold mode + default: 1 + NAV_TRAFF_A_HOR: + description: + short: Set NAV TRAFFIC AVOID horizontal distance + long: Defines a crosstrack horizontal distance + type: float + default: 500 + unit: m + min: 500 + NAV_TRAFF_A_VER: + description: + short: Set NAV TRAFFIC AVOID vertical distance + type: float + default: 500 + unit: m + min: 10 + max: 500 + NAV_TRAFF_COLL_T: + description: + short: Estimated time until collision + long: |- + Minimum acceptable time until collsion. + Assumes constant speed over 3d distance. + type: int32 + default: 60 + unit: s + min: 1 + max: 900000000 + NAV_FORCE_VT: + description: + short: Force VTOL mode takeoff and land + type: boolean + default: 1 + NAV_MIN_LTR_ALT: + description: + short: Minimum Loiter altitude + long: |- + This is the minimum altitude above Home the system will always obey in Loiter (Hold) mode if switched into this + mode without specifying an altitude (e.g. through Loiter switch on RC). + Doesn't affect Loiters that are part of Missions or that are entered through a reposition setpoint ("Go to"). + Set to a negative value to disable. + type: float + default: -1.0 + unit: m + min: -1 + decimal: 1 + increment: 0.5 + NAV_MIN_GND_DIST: + description: + short: Minimum height above ground during Mission and RTL + long: |- + Minimum height above ground the vehicle is allowed to descend to during Mission and RTL, + excluding landing commands. + Requires a distance sensor to be set up. + Note: only prevents the vehicle from descending further, but does not force it to climb. + + Set to a negative value to disable. + type: float + default: -1.0 + unit: m + min: -1 + decimal: 1 + increment: 1 + NAV_LTR_LAST_DL: + description: + short: Loiter at last GCS heartbeat position on data link loss + long: |- + When the data link is lost and this setting is enabled, + the vehicle will loiter at the position where the last GCS + heartbeat was received rather than at its current position. + Only applies to Hold mode during failsafe actions. + type: boolean + default: 0 diff --git a/src/modules/navigator/precland.cpp b/src/modules/navigator/precland.cpp index e75db68629..a111bf75c9 100644 --- a/src/modules/navigator/precland.cpp +++ b/src/modules/navigator/precland.cpp @@ -412,10 +412,8 @@ bool PrecLand::switch_to_state_search() { PX4_INFO("Climbing to search altitude."); - vehicle_local_position_s *vehicle_local_position = _navigator->get_local_position(); - position_setpoint_triplet_s *pos_sp_triplet = _navigator->get_position_setpoint_triplet(); - pos_sp_triplet->current.alt = vehicle_local_position->ref_alt + _param_pld_srch_alt.get(); + pos_sp_triplet->current.alt = _navigator->get_home_position()->alt + _param_pld_srch_alt.get(); pos_sp_triplet->current.type = position_setpoint_s::SETPOINT_TYPE_POSITION; _navigator->set_position_setpoint_triplet_updated(); diff --git a/src/modules/navigator/precland_params.c b/src/modules/navigator/precland_params.c deleted file mode 100644 index 9c2e63ac32..0000000000 --- a/src/modules/navigator/precland_params.c +++ /dev/null @@ -1,121 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2017 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file precland_params.c - * - * Parameters for precision landing. - * - * @author Nicolas de Palezieux (Sunflower Labs) - */ - -/** - * Landing Target Timeout - * - * Time after which the landing target is considered lost without any new measurements. - * - * @unit s - * @min 0.0 - * @max 50 - * @decimal 1 - * @increment 0.5 - * @group Precision Land - */ -PARAM_DEFINE_FLOAT(PLD_BTOUT, 5.0f); - -/** - * Horizontal acceptance radius - * - * Start descending if closer above landing target than this. - * - * @unit m - * @min 0.0 - * @max 10 - * @decimal 2 - * @increment 0.1 - * @group Precision Land - */ -PARAM_DEFINE_FLOAT(PLD_HACC_RAD, 0.2f); - -/** - * Final approach altitude - * - * Allow final approach (without horizontal positioning) if losing landing target closer than this to the ground. - * - * @unit m - * @min 0.0 - * @max 10 - * @decimal 2 - * @increment 0.1 - * @group Precision Land - */ -PARAM_DEFINE_FLOAT(PLD_FAPPR_ALT, 0.1f); - -/** - * Search altitude - * - * Altitude above home to which to climb when searching for the landing target. - * - * @unit m - * @min 0.0 - * @max 100 - * @decimal 1 - * @increment 0.1 - * @group Precision Land - */ -PARAM_DEFINE_FLOAT(PLD_SRCH_ALT, 10.0f); - -/** - * Search timeout - * - * Time allowed to search for the landing target before falling back to normal landing. - * - * @unit s - * @min 0.0 - * @max 100 - * @decimal 1 - * @increment 0.1 - * @group Precision Land - */ -PARAM_DEFINE_FLOAT(PLD_SRCH_TOUT, 10.0f); - -/** - * Maximum number of search attempts - * - * Maximum number of times to search for the landing target if it is lost during the precision landing. - * - * @min 0 - * @max 100 - * @group Precision Land - */ -PARAM_DEFINE_INT32(PLD_MAX_SRCH, 3); diff --git a/src/modules/navigator/precland_params.yaml b/src/modules/navigator/precland_params.yaml new file mode 100644 index 0000000000..979123c4dc --- /dev/null +++ b/src/modules/navigator/precland_params.yaml @@ -0,0 +1,72 @@ +module_name: navigator +parameters: +- group: Precision Land + definitions: + PLD_BTOUT: + description: + short: Landing Target Timeout + long: Time after which the landing target is considered lost without any new + measurements. + type: float + default: 5.0 + unit: s + min: 0.0 + max: 50 + decimal: 1 + increment: 0.5 + PLD_HACC_RAD: + description: + short: Horizontal acceptance radius + long: Start descending if closer above landing target than this. + type: float + default: 0.2 + unit: m + min: 0.0 + max: 10 + decimal: 2 + increment: 0.1 + PLD_FAPPR_ALT: + description: + short: Final approach altitude + long: Allow final approach (without horizontal positioning) if losing landing + target closer than this to the ground. + type: float + default: 0.1 + unit: m + min: 0.0 + max: 10 + decimal: 2 + increment: 0.1 + PLD_SRCH_ALT: + description: + short: Search altitude + long: Altitude above home to which to climb when searching for the landing + target. + type: float + default: 10.0 + unit: m + min: 0.0 + max: 100 + decimal: 1 + increment: 0.1 + PLD_SRCH_TOUT: + description: + short: Search timeout + long: Time allowed to search for the landing target before falling back to + normal landing. + type: float + default: 10.0 + unit: s + min: 0.0 + max: 100 + decimal: 1 + increment: 0.1 + PLD_MAX_SRCH: + description: + short: Maximum number of search attempts + long: Maximum number of times to search for the landing target if it is lost + during the precision landing. + type: int32 + default: 3 + min: 0 + max: 100 diff --git a/src/modules/navigator/rtl.cpp b/src/modules/navigator/rtl.cpp index 468d7e9e78..d2dc738f6b 100644 --- a/src/modules/navigator/rtl.cpp +++ b/src/modules/navigator/rtl.cpp @@ -394,7 +394,7 @@ void RTL::setRtlTypeAndDestination() } } - const float rtl_alt = computeReturnAltitude(destination, destination_type, (float)_param_rtl_cone_ang.get()); + const float rtl_alt = computeReturnAltitude(destination); _rtl_direct.setRtlAlt(rtl_alt); _rtl_direct.setRtlPosition(destination, landing_loiter); @@ -441,11 +441,16 @@ PositionYawSetpoint RTL::findClosestSafePoint(float min_dist, uint8_t &safe_poin continue; } + // Only look at rally points + if (mission_safe_point.nav_cmd != NAV_CMD_RALLY_POINT) { + continue; + } + // Ignore safepoints which are too close to the homepoint (only if home is an option to return to) const bool far_from_home = get_distance_to_next_waypoint(_home_pos_sub.get().lat, _home_pos_sub.get().lon, mission_safe_point.lat, mission_safe_point.lon) > MAX_DIST_FROM_HOME_FOR_LAND_APPROACHES; - if (mission_safe_point.nav_cmd == NAV_CMD_RALLY_POINT && (far_from_home || (_param_rtl_type.get() == 5))) { + if (far_from_home || (_param_rtl_type.get() == 5)) { const float dist{get_distance_to_next_waypoint(_global_pos_sub.get().lat, _global_pos_sub.get().lon, mission_safe_point.lat, mission_safe_point.lon)}; PositionYawSetpoint safepoint_position; @@ -531,32 +536,11 @@ void RTL::findRtlDestination(DestinationType &destination_type, PositionYawSetpo destination_type = DestinationType::DESTINATION_TYPE_SAFE_POINT; } else if (_param_rtl_type.get() == 5) { - // Safe points only but no valid safe point, fallback to last position with valid data link - for (auto &telemetry_status : _telemetry_status_subs) { - telemetry_status_s telemetry; - - if (telemetry_status.update(&telemetry)) { - - if (telemetry.heartbeat_type_gcs) { - _last_position_before_link_loss.alt = _global_pos_sub.get().alt; - _last_position_before_link_loss.lat = _global_pos_sub.get().lat; - _last_position_before_link_loss.lon = _global_pos_sub.get().lon; - break; - } - } - } - - if (PX4_ISFINITE(_last_position_before_link_loss.lat) && PX4_ISFINITE(_last_position_before_link_loss.lon)) { - destination = _last_position_before_link_loss; - - } else { - // If no valid data link position, fallback to current position - destination.alt = _global_pos_sub.get().alt; - destination.lat = _global_pos_sub.get().lat; - destination.lon = _global_pos_sub.get().lon; - } - - destination_type = DestinationType::DESTINATION_TYPE_LAST_LINK_POSITION; + // for RTL_TYPE=5: if no rally point is found fallback to current position + destination.alt = _global_pos_sub.get().alt; + destination.lat = _global_pos_sub.get().lat; + destination.lon = _global_pos_sub.get().lon; + destination_type = DestinationType::DESTINATION_TYPE_SAFE_POINT; } } @@ -574,12 +558,14 @@ void RTL::setSafepointAsDestination(PositionYawSetpoint &rtl_position, const mis // TODO: handle all possible mission_safe_point.frame cases switch (mission_safe_point.frame) { case 0: // MAV_FRAME_GLOBAL + case 5: // MAV_FRAME_GLOBAL_INT rtl_position.lat = mission_safe_point.lat; rtl_position.lon = mission_safe_point.lon; - rtl_position.alt = mission_safe_point.altitude; + rtl_position.alt = mission_safe_point.altitude; // alt of safe point is relative to MSL break; case 3: // MAV_FRAME_GLOBAL_RELATIVE_ALT + case 6: // MAV_FRAME_GLOBAL_RELATIVE_ALT_INT rtl_position.lat = mission_safe_point.lat; rtl_position.lon = mission_safe_point.lon; rtl_position.alt = mission_safe_point.altitude + _home_pos_sub.get().alt; // alt of safe point is rel to home @@ -593,13 +579,8 @@ void RTL::setSafepointAsDestination(PositionYawSetpoint &rtl_position, const mis } } -float RTL::computeReturnAltitude(const PositionYawSetpoint &rtl_position, DestinationType destination_type, float cone_half_angle_deg) const +float RTL::computeReturnAltitude(const PositionYawSetpoint &rtl_position) const { - if (destination_type == DestinationType::DESTINATION_TYPE_LAST_LINK_POSITION) { - // when returning to last known link position, do not modify altitude - return rtl_position.alt; - } - if (_param_rtl_cone_ang.get() > 0 && _vehicle_status_sub.get().vehicle_type == vehicle_status_s::VEHICLE_TYPE_ROTARY_WING) { // horizontal distance to destination const float destination_dist = @@ -621,7 +602,7 @@ float RTL::computeReturnAltitude(const PositionYawSetpoint &rtl_position, Destin if (destination_dist <= _param_rtl_min_dist.get()) { // constrain cone half angle to meaningful values. All other cases are already handled above. - const float cone_half_angle_rad = radians(constrain(cone_half_angle_deg, 1.0f, 89.0f)); + const float cone_half_angle_rad = radians(constrain((float)_param_rtl_cone_ang.get(), 1.0f, 89.0f)); // minimum altitude we need in order to be within the user defined cone const float cone_intersection_altitude_amsl = destination_dist / tanf(cone_half_angle_rad) + rtl_position.alt; diff --git a/src/modules/navigator/rtl.h b/src/modules/navigator/rtl.h index d6c5a9afb6..a7c64ef60f 100644 --- a/src/modules/navigator/rtl.h +++ b/src/modules/navigator/rtl.h @@ -55,13 +55,11 @@ #include #include #include -#include #include #include #include #include #include -#include class Navigator; @@ -96,8 +94,7 @@ private: enum class DestinationType { DESTINATION_TYPE_HOME, DESTINATION_TYPE_MISSION_LAND, - DESTINATION_TYPE_SAFE_POINT, - DESTINATION_TYPE_LAST_LINK_POSITION + DESTINATION_TYPE_SAFE_POINT }; private: @@ -158,11 +155,10 @@ private: * @brief calculate return altitude from return altitude parameter, current altitude and cone angle * * @param[in] rtl_position landing position of the rtl - * @param[in] destination_type type of the rtl destination - * @param[in] cone_half_angle_deg half angle of the cone [deg] + * * @return return altitude */ - float computeReturnAltitude(const PositionYawSetpoint &rtl_position, DestinationType destination_type, float cone_half_angle_deg) const; + float computeReturnAltitude(const PositionYawSetpoint &rtl_position) const; /** * @brief initialize RTL mission type @@ -229,7 +225,6 @@ private: mutable DatamanCache _dataman_cache_landItem{"rtl_dm_cache_miss_land", 2}; uint32_t _mission_id = 0u; uint32_t _safe_points_id = 0u; - PositionYawSetpoint _last_position_before_link_loss{(double)NAN, (double)NAN, NAN, NAN}; mission_stats_entry_s _stats; @@ -253,7 +248,6 @@ private: uORB::SubscriptionData _mission_sub{ORB_ID(mission)}; uORB::SubscriptionData _home_pos_sub{ORB_ID(home_position)}; uORB::SubscriptionData _wind_sub{ORB_ID(wind)}; - uORB::SubscriptionMultiArray _telemetry_status_subs{ORB_ID::telemetry_status}; uORB::Publication _rtl_time_estimate_pub{ORB_ID(rtl_time_estimate)}; uORB::Publication _rtl_status_pub{ORB_ID(rtl_status)}; diff --git a/src/modules/navigator/rtl_direct.cpp b/src/modules/navigator/rtl_direct.cpp index 9c53bca44f..5f53cbc941 100644 --- a/src/modules/navigator/rtl_direct.cpp +++ b/src/modules/navigator/rtl_direct.cpp @@ -123,7 +123,7 @@ void RtlDirect::on_inactive() _vehicle_status_sub.update(); } -void RtlDirect::setRtlPosition(PositionYawSetpoint rtl_position, loiter_point_s loiter_pos) +void RtlDirect::setRtlPosition(const PositionYawSetpoint &rtl_position, const loiter_point_s &loiter_pos) { parameters_update(); @@ -556,7 +556,7 @@ void RtlDirect::parameters_update() } } -loiter_point_s RtlDirect::sanitizeLandApproach(loiter_point_s land_approach) const +loiter_point_s RtlDirect::sanitizeLandApproach(const loiter_point_s &land_approach) const { loiter_point_s sanitized_land_approach{land_approach}; @@ -592,7 +592,7 @@ void RtlDirect::publish_rtl_direct_navigator_mission_item() navigator_mission_item.yaw = _mission_item.yaw; navigator_mission_item.frame = _mission_item.frame; - navigator_mission_item.frame = _mission_item.origin; + navigator_mission_item.origin = _mission_item.origin; navigator_mission_item.loiter_exit_xtrack = _mission_item.loiter_exit_xtrack; navigator_mission_item.force_heading = _mission_item.force_heading; diff --git a/src/modules/navigator/rtl_direct.h b/src/modules/navigator/rtl_direct.h index 40fb18e0cc..9d86d6e5b6 100644 --- a/src/modules/navigator/rtl_direct.h +++ b/src/modules/navigator/rtl_direct.h @@ -107,7 +107,7 @@ public: void setReturnAltMin(bool min) { _enforce_rtl_alt = min; } void setRtlAlt(float alt) {_rtl_alt = alt;}; - void setRtlPosition(PositionYawSetpoint position, loiter_point_s loiter_pos); + void setRtlPosition(const PositionYawSetpoint &position, const loiter_point_s &loiter_pos); bool isLanding() { return (_rtl_state != RTLState::IDLE) && (_rtl_state >= RTLState::LOITER_DOWN);}; @@ -145,7 +145,7 @@ private: * @brief sanitize land_approach * */ - loiter_point_s sanitizeLandApproach(loiter_point_s land_approach) const; + loiter_point_s sanitizeLandApproach(const loiter_point_s &land_approach) const; /** * Check for parameter changes and update them if needed. diff --git a/src/modules/navigator/rtl_direct_mission_land.cpp b/src/modules/navigator/rtl_direct_mission_land.cpp index 7fdbe1add5..7203c381fb 100644 --- a/src/modules/navigator/rtl_direct_mission_land.cpp +++ b/src/modules/navigator/rtl_direct_mission_land.cpp @@ -96,7 +96,7 @@ void RtlDirectMissionLand::on_activation() _needs_climbing = false; if (hasMissionLandStart()) { - _is_current_planned_mission_item_valid = (goToItem(_mission.land_start_index, false) == PX4_OK); + _is_current_planned_mission_item_valid = (goToItem(_mission.land_start_index, MissionTraversalType::IgnoreDoJump) == PX4_OK); _needs_climbing = checkNeedsToClimb(); @@ -115,7 +115,7 @@ void RtlDirectMissionLand::on_activation() bool RtlDirectMissionLand::setNextMissionItem() { - return (goToNextPositionItem(true) == PX4_OK); + return (goToNextPositionItem() == PX4_OK); } void RtlDirectMissionLand::setActiveMissionItems() diff --git a/src/modules/navigator/rtl_mission_fast.cpp b/src/modules/navigator/rtl_mission_fast.cpp index 6c1d99d5fd..52b7fa07f9 100644 --- a/src/modules/navigator/rtl_mission_fast.cpp +++ b/src/modules/navigator/rtl_mission_fast.cpp @@ -101,7 +101,7 @@ void RtlMissionFast::on_activation() bool RtlMissionFast::setNextMissionItem() { - return (goToNextPositionItem(true) == PX4_OK); + return (goToNextPositionItem() == PX4_OK); } void RtlMissionFast::setActiveMissionItems() diff --git a/src/modules/navigator/rtl_mission_fast.h b/src/modules/navigator/rtl_mission_fast.h index 38814f96d0..70993219c8 100644 --- a/src/modules/navigator/rtl_mission_fast.h +++ b/src/modules/navigator/rtl_mission_fast.h @@ -63,6 +63,7 @@ public: private: bool setNextMissionItem() override; void setActiveMissionItems() override; + MissionTraversalType traversalType() const override { return MissionTraversalType::IgnoreDoJump; } int32_t _mission_index_prior_rtl{INT32_C(-1)}; diff --git a/src/modules/navigator/rtl_mission_fast_reverse.cpp b/src/modules/navigator/rtl_mission_fast_reverse.cpp index 7f3bb46f9f..af85fd828d 100644 --- a/src/modules/navigator/rtl_mission_fast_reverse.cpp +++ b/src/modules/navigator/rtl_mission_fast_reverse.cpp @@ -78,7 +78,7 @@ void RtlMissionFastReverse::on_activation() } else { int32_t previous_mission_item_index; size_t num_found_items{0U}; - getPreviousPositionItems(math::max(_mission_index_prior_rtl - INT32_C(1), INT32_C(0)), &previous_mission_item_index, + getPreviousPositionItems(_mission_index_prior_rtl, &previous_mission_item_index, num_found_items, UINT8_C(1)); if (num_found_items > 0U) { @@ -87,7 +87,7 @@ void RtlMissionFastReverse::on_activation() } else { // No prior position items, so try to go to the first one. - _is_current_planned_mission_item_valid = (goToNextPositionItem(false) == PX4_OK); + _is_current_planned_mission_item_valid = (goToNextPositionItem() == PX4_OK); } } @@ -107,7 +107,7 @@ void RtlMissionFastReverse::on_active() bool RtlMissionFastReverse::setNextMissionItem() { - return (goToPreviousPositionItem(true) == PX4_OK); + return (goToPreviousPositionItem() == PX4_OK); } void RtlMissionFastReverse::setActiveMissionItems() diff --git a/src/modules/navigator/rtl_mission_fast_reverse.h b/src/modules/navigator/rtl_mission_fast_reverse.h index 8f96b95dc6..e75ba0e19e 100644 --- a/src/modules/navigator/rtl_mission_fast_reverse.h +++ b/src/modules/navigator/rtl_mission_fast_reverse.h @@ -67,6 +67,7 @@ public: private: bool setNextMissionItem() override; void setActiveMissionItems() override; + MissionTraversalType traversalType() const override { return MissionTraversalType::IgnoreDoJump; } void handleLanding(WorkItemType &new_work_item_type); int32_t _mission_index_prior_rtl{INT32_C(-1)}; diff --git a/src/modules/navigator/rtl_params.c b/src/modules/navigator/rtl_params.c deleted file mode 100644 index 0216f6606d..0000000000 --- a/src/modules/navigator/rtl_params.c +++ /dev/null @@ -1,203 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2014-2016 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * AS IS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file rtl_params.c - * - * Parameters for return mode - * - * @author Julian Oes - */ - -/* - * Return mode parameters, accessible via MAVLink - */ - -/** - * Return mode return altitude - * - * Default minimum altitude above destination (e.g. home, safe point, landing pattern) for return flight. - * The vehicle will climb to this altitude when Return mode is enganged, unless it currently is flying higher already. - * This is affected by RTL_MIN_DIST and RTL_CONE_ANG. - * - * @unit m - * @min 0 - * @decimal 1 - * @increment 0.5 - * @group Return Mode - */ -PARAM_DEFINE_FLOAT(RTL_RETURN_ALT, 60.f); - - -/** - * Return mode loiter altitude - * - * Descend to this altitude (above destination position) after return, and wait for time defined in RTL_LAND_DELAY. - * Land (i.e. slowly descend) from this altitude if autolanding allowed. - * VTOLs do transition to hover in this altitdue above the landing point. - * - * @unit m - * @min 0 - * @decimal 1 - * @increment 0.5 - * @group Return Mode - */ -PARAM_DEFINE_FLOAT(RTL_DESCEND_ALT, 30.f); - -/** - * Return mode delay - * - * Delay before landing (after initial descent) in Return mode. - * If set to -1 the system will not land but loiter at RTL_DESCEND_ALT. - * - * @unit s - * @min -1 - * @decimal 1 - * @increment 0.5 - * @group Return Mode - */ -PARAM_DEFINE_FLOAT(RTL_LAND_DELAY, 0.0f); - -/** - * Horizontal radius from return point within which special rules for return mode apply. - * - * The return altitude will be calculated based on RTL_CONE_ANG parameter. - * The yaw setpoint will switch to the one defined by corresponding waypoint. - * - * - * @unit m - * @min 0.5 - * @decimal 1 - * @increment 0.5 - * @group Return Mode - */ -PARAM_DEFINE_FLOAT(RTL_MIN_DIST, 10.0f); - -/** - * Return type - * - * Return mode destination and flight path (home location, rally point, mission landing pattern, reverse mission) - * - * @value 0 Return to closest safe point (home or rally point) via direct path. - * @value 1 Return to closest safe point other than home (mission landing pattern or rally point), via direct path. If no mission landing or rally points are defined return home via direct path. Always choose closest safe landing point if vehicle is a VTOL in hover mode. - * @value 2 Return to a planned mission landing, if available, using the mission path, else return to home via the reverse mission path. Do not consider rally points. - * @value 3 Return via direct path to closest destination: home, start of mission landing pattern or safe point. If the destination is a mission landing pattern, follow the pattern to land. - * @value 4 Return to the planned mission landing, or to home via the reverse mission path, whichever is closer by counting waypoints. Do not consider rally points. - * @value 5 Return directly to safe landing point (do not consider mission landing and Home) - * @group Return Mode - */ -PARAM_DEFINE_INT32(RTL_TYPE, 0); - -/** - * Half-angle of the return mode altitude cone - * - * Defines the half-angle of a cone centered around the destination position that - * affects the altitude at which the vehicle returns. - * - * @unit deg - * @min 0 - * @max 90 - * @value 0 No cone, always climb to RTL_RETURN_ALT above destination. - * @value 25 25 degrees half cone angle. - * @value 45 45 degrees half cone angle. - * @value 65 65 degrees half cone angle. - * @value 80 80 degrees half cone angle. - * @value 90 Only climb to at least RTL_DESCEND_ALT above destination. - * @group Return Mode - */ -PARAM_DEFINE_INT32(RTL_CONE_ANG, 45); - -/** - * RTL precision land mode - * - * Use precision landing when doing an RTL landing phase. - * This setting does not apply for RTL destinations planned as part of a mission. - * - * @value 0 No precision landing - * @value 1 Opportunistic precision landing - * @value 2 Required precision landing - * @group Return Mode - */ -PARAM_DEFINE_INT32(RTL_PLD_MD, 0); - -/** - * Loiter radius for rtl descend - * - * Set the radius for loitering to a safe altitude for VTOL transition. - * - * @unit m - * @min 25 - * @decimal 1 - * @increment 0.5 - * @group Return Mode - */ -PARAM_DEFINE_FLOAT(RTL_LOITER_RAD, 80.0f); - -/** - * RTL time estimate safety margin factor - * - * Safety factor that is used to scale the actual RTL time estimate. - * Time with margin = RTL_TIME_FACTOR * time + RTL_TIME_MARGIN - * - * @min 1.0 - * @max 2.0 - * @decimal 1 - * @increment 0.1 - * @group Return To Land - */ -PARAM_DEFINE_FLOAT(RTL_TIME_FACTOR, 1.1f); - -/** - * RTL time estimate safety margin offset - * - * Margin that is added to the time estimate, after it has already been scaled - * Time with margin = RTL_TIME_FACTOR * time + RTL_TIME_MARGIN - * - * @unit s - * @min 0 - * @max 3600 - * @decimal 1 - * @increment 1 - * @group Return To Land - */ -PARAM_DEFINE_INT32(RTL_TIME_MARGIN, 100); - -/** - * RTL force approach landing - * - * Only consider RTL point, if it has an approach defined. - * - * @boolean - * @group Return To Land - */ -PARAM_DEFINE_INT32(RTL_APPR_FORCE, 0); diff --git a/src/modules/navigator/rtl_params.yaml b/src/modules/navigator/rtl_params.yaml new file mode 100644 index 0000000000..30c09f65bc --- /dev/null +++ b/src/modules/navigator/rtl_params.yaml @@ -0,0 +1,155 @@ +module_name: navigator +parameters: +- group: Return Mode + definitions: + RTL_RETURN_ALT: + description: + short: Return mode return altitude + long: |- + Default minimum altitude above destination (e.g. home, safe point, landing pattern) for return flight. + The vehicle will climb to this altitude when Return mode is engaged, unless it currently is flying higher already. + This is affected by RTL_MIN_DIST and RTL_CONE_ANG. + type: float + default: 60.0 + unit: m + min: 0 + decimal: 1 + increment: 0.5 + RTL_DESCEND_ALT: + description: + short: Return mode loiter altitude + long: |- + Descend to this altitude (above destination position) after return, and wait for time defined in RTL_LAND_DELAY. + Land (i.e. slowly descend) from this altitude if autolanding allowed. + VTOLs do transition to hover in this altitude above the landing point. + type: float + default: 30.0 + unit: m + min: 0 + decimal: 1 + increment: 0.5 + RTL_LAND_DELAY: + description: + short: Return mode delay + long: |- + Delay before landing (after initial descent) in Return mode. + If set to -1 the system will not land but loiter at RTL_DESCEND_ALT. + type: float + default: 0.0 + unit: s + min: -1 + decimal: 1 + increment: 0.5 + RTL_MIN_DIST: + description: + short: Min distance for RTL cone altitude calculation + long: |- + Horizontal radius from return point within which special rules for return mode apply + + The return altitude will be calculated based on RTL_CONE_ANG parameter. + The yaw setpoint will switch to the one defined by corresponding waypoint. + type: float + default: 10.0 + unit: m + min: 0.5 + decimal: 1 + increment: 0.5 + RTL_TYPE: + description: + short: Return type + long: Return mode destination and flight path (home location, rally point, + mission landing pattern, reverse mission) + type: enum + values: + 0: Return to closest safe point (home or rally point) via direct path. + 1: Return to closest safe point other than home (mission landing pattern or + rally point), via direct path. If no mission landing or rally points are + defined return home via direct path. Always choose closest safe landing + point if vehicle is a VTOL in hover mode. + 2: Return to a planned mission landing, if available, using the mission + path while skipping DO_JUMP and other non-position mission items, else + return to home via the reverse mission path with the same traversal + rules. Do not consider rally points. + 3: 'Return via direct path to closest destination: home, start of mission + landing pattern or safe point. If the destination is a mission landing pattern, + follow the pattern to land.' + 4: Return to the planned mission landing, or to home via the reverse mission + path, whichever is estimated to be closer using mission item indices. + Skip DO_JUMP and other non-position mission items while following either + mission path. Do not consider rally points. + 5: Return directly to safe landing point (do not consider mission landing + and Home) + default: 0 + RTL_CONE_ANG: + description: + short: Half-angle of the return mode altitude cone + long: |- + Defines the half-angle of a cone centered around the destination position that + affects the altitude at which the vehicle returns. + type: enum + values: + 0: No cone, always climb to RTL_RETURN_ALT above destination. + 25: 25 degrees half cone angle. + 45: 45 degrees half cone angle. + 65: 65 degrees half cone angle. + 80: 80 degrees half cone angle. + 90: Only climb to at least RTL_DESCEND_ALT above destination. + default: 45 + unit: deg + min: 0 + max: 90 + RTL_PLD_MD: + description: + short: RTL precision land mode + long: |- + Use precision landing when doing an RTL landing phase. + This setting does not apply for RTL destinations planned as part of a mission. + type: enum + values: + 0: No precision landing + 1: Opportunistic precision landing + 2: Required precision landing + default: 0 + RTL_LOITER_RAD: + description: + short: Loiter radius for rtl descend + long: Set the radius for loitering to a safe altitude for VTOL transition. + type: float + default: 80.0 + unit: m + min: 25 + decimal: 1 + increment: 0.5 +- group: Return To Land + definitions: + RTL_TIME_FACTOR: + description: + short: RTL time estimate safety margin factor + long: |- + Safety factor that is used to scale the actual RTL time estimate. + Time with margin = RTL_TIME_FACTOR * time + RTL_TIME_MARGIN + type: float + default: 1.1 + min: 1.0 + max: 2.0 + decimal: 1 + increment: 0.1 + RTL_TIME_MARGIN: + description: + short: RTL time estimate safety margin offset + long: |- + Margin that is added to the time estimate, after it has already been scaled + Time with margin = RTL_TIME_FACTOR * time + RTL_TIME_MARGIN + type: int32 + default: 100 + unit: s + min: 0 + max: 3600 + decimal: 1 + increment: 1 + RTL_APPR_FORCE: + description: + short: RTL force approach landing + long: Only consider RTL point, if it has an approach defined. + type: boolean + default: 0 diff --git a/src/modules/navigator/test/CMakeLists.txt b/src/modules/navigator/test/CMakeLists.txt new file mode 100644 index 0000000000..a1e678f018 --- /dev/null +++ b/src/modules/navigator/test/CMakeLists.txt @@ -0,0 +1,36 @@ +############################################################################ +# +# Copyright (c) 2026 PX4 Development Team. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# 3. Neither the name PX4 nor the names of its contributors may be +# used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS +# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED +# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +############################################################################ + +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/..) + +px4_add_functional_gtest(SRC test_mission_base.cpp LINKLIBS modules__navigator) diff --git a/src/modules/navigator/test/test_mission_base.cpp b/src/modules/navigator/test/test_mission_base.cpp new file mode 100644 index 0000000000..6313d32e4a --- /dev/null +++ b/src/modules/navigator/test/test_mission_base.cpp @@ -0,0 +1,770 @@ +/**************************************************************************** + * + * Copyright (c) 2026 PX4 Development Team. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name PX4 nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +/** + * @file test_mission_base.cpp + * + * Unit tests for MissionBase position traversal helpers: + * - getNonJumpItem() + * - findNextPositionIndex() + * - findPreviousPositionIndex() + * - getNextPositionItems() + * - getPreviousPositionItems() + * - goToNextPositionItem() + * - goToPreviousPositionItem() + * + * These tests cover both traversal modes: Follow mission control flow and ignore DO_JUMP. + * + * @author Jonas Perolini + * + */ + +#include + +#include "mission_base.h" + +#include +#include + +#include +#include + +extern "C" int dataman_main(int argc, char *argv[]); + +class NavigatorDatamanRuntime +{ +public: + NavigatorDatamanRuntime() + { + param_control_autosave(false); + px4::WorkQueueManagerStart(); + + char name[] = "dataman"; + char start[] = "start"; + char ram[] = "-r"; + char *argv[] = {name, start, ram}; + dataman_main(3, argv); + } + + ~NavigatorDatamanRuntime() + { + param_control_autosave(true); + + char name[] = "dataman"; + char stop[] = "stop"; + char *argv[] = {name, stop}; + dataman_main(2, argv); + + px4::WorkQueueManagerStop(); + } +}; + +static NavigatorDatamanRuntime &navigatorDatamanRuntime() +{ + static NavigatorDatamanRuntime runtime{}; + return runtime; +} + +class MissionBaseTestPeer : public MissionBase +{ +public: + MissionBaseTestPeer() : MissionBase(nullptr, 8, 0) {} + + void setActiveMissionItems() override {} + bool setNextMissionItem() override { return false; } + + bool loadMissionItemFromCache(int32_t index, mission_item_s &mission_item) override + { + for (int32_t failed_index : _load_failure_indices) { + if (failed_index == index) { + return false; + } + } + + if (index < 0 || index >= static_cast(_items.size())) { + return false; + } + + mission_item = _items[static_cast(index)]; + return true; + } + + void loadTestMission(const std::vector &items) + { + _items = items; + _mission.count = static_cast(items.size()); + _mission.current_seq = 0; + clearLoadFailures(); + } + + void setLoadFailureIndices(std::initializer_list indices) + { + _load_failure_indices.assign(indices.begin(), indices.end()); + } + + void clearLoadFailures() + { + _load_failure_indices.clear(); + } + + void setCurrentSequence(int32_t current_seq) + { + _mission.current_seq = current_seq; + } + + int32_t currentSequence() const + { + return _mission.current_seq; + } + + using MissionBase::findNextPositionIndex; + using MissionBase::findPreviousPositionIndex; + using MissionBase::getNonJumpItem; + using MissionBase::getNextPositionItems; + using MissionBase::getPreviousPositionItems; + using MissionBase::goToNextPositionItem; + using MissionBase::goToPreviousPositionItem; + using MissionBase::MissionTraversalType; + +private: + std::vector _items; + std::vector _load_failure_indices; +}; + +class IgnoreDoJumpMissionBaseTestPeer : public MissionBaseTestPeer +{ +protected: + MissionTraversalType traversalType() const override + { + return MissionTraversalType::IgnoreDoJump; + } +}; + +static constexpr double kBaseLat = 47.0; +static constexpr double kBaseLon = 8.0; +static constexpr float kAlt = 100.f; + +static mission_item_s makePositionItem(double lat, double lon, float altitude) +{ + mission_item_s item{}; + item.nav_cmd = NAV_CMD_WAYPOINT; + item.lat = lat; + item.lon = lon; + item.altitude = altitude; + return item; +} + +static mission_item_s makeDoJump(int32_t target_index, uint16_t repeat_count, uint16_t current_count = 0) +{ + mission_item_s item{}; + item.nav_cmd = NAV_CMD_DO_JUMP; + item.do_jump_mission_index = target_index; + item.do_jump_repeat_count = repeat_count; + item.do_jump_current_count = current_count; + return item; +} + +static mission_item_s makeVtolTransitionItem(int transition_mode) +{ + mission_item_s item{}; + item.nav_cmd = NAV_CMD_DO_VTOL_TRANSITION; + item.params[0] = static_cast(transition_mode); + return item; +} + +class MissionBaseTraversalTest : public ::testing::Test +{ +protected: + static void SetUpTestSuite() + { + (void)navigatorDatamanRuntime(); + } + + static void TearDownTestSuite() {} + + MissionBaseTestPeer mission_base{}; +}; + +class IgnoreDoJumpMissionBaseTraversalTest : public ::testing::Test +{ +protected: + static void SetUpTestSuite() + { + (void)navigatorDatamanRuntime(); + } + + static void TearDownTestSuite() {} + + IgnoreDoJumpMissionBaseTestPeer mission_base{}; +}; + +// WHY: getNonJumpItem is used to find the next mission item. +// WHAT: A non-DO_JUMP item is returned unchanged. +TEST_F(MissionBaseTraversalTest, GetNonJumpItemReturnsCurrentNonJumpItem) +{ + // GIVEN: A mission that starts with a normal position item. + mission_base.loadTestMission({ + makePositionItem(kBaseLat, kBaseLon, kAlt), // idx 0 + makeDoJump(0, 1, 0), // idx 1 + }); + + int32_t mission_index = 0; + mission_item_s mission_item{}; + + // WHEN: The helper loads the current item directly. + const int ret = mission_base.getNonJumpItem(mission_index, mission_item, + MissionBaseTestPeer::MissionTraversalType::FollowMissionControlFlow, + false, false); + + // THEN: It returns the same item and leaves the index unchanged. + ASSERT_EQ(ret, PX4_OK); + EXPECT_EQ(mission_index, 0); + EXPECT_EQ(mission_item.nav_cmd, NAV_CMD_WAYPOINT); + EXPECT_DOUBLE_EQ(mission_item.lat, kBaseLat); + EXPECT_DOUBLE_EQ(mission_item.lon, kBaseLon); + EXPECT_FLOAT_EQ(mission_item.altitude, kAlt); +} + +// WHY: getNonJumpItem() must follow active DO_JUMP targets. +// WHAT: [DO_JUMP->2, WP1, WP2] starting from idx 0 returns idx 2. +TEST_F(MissionBaseTraversalTest, GetNonJumpItemFollowsActiveForwardDoJump) +{ + // GIVEN: A forward DO_JUMP that points to a later position item. + mission_base.loadTestMission({ + makeDoJump(2, 1, 0), // idx 0 + makePositionItem(kBaseLat, kBaseLon, kAlt), // idx 1 + makePositionItem(kBaseLat + 0.001, kBaseLon, kAlt), // idx 2 + }); + + int32_t mission_index = 0; + mission_item_s mission_item{}; + + // WHEN: Mission-control traversal resolves the jump without writing counters. + const int ret = mission_base.getNonJumpItem(mission_index, mission_item, + MissionBaseTestPeer::MissionTraversalType::FollowMissionControlFlow, + false, false); + + // THEN: The helper follows the jump and returns the target item. + ASSERT_EQ(ret, PX4_OK); + EXPECT_EQ(mission_index, 2); + EXPECT_EQ(mission_item.nav_cmd, NAV_CMD_WAYPOINT); + EXPECT_DOUBLE_EQ(mission_item.lat, kBaseLat + 0.001); + EXPECT_DOUBLE_EQ(mission_item.lon, kBaseLon); + EXPECT_FLOAT_EQ(mission_item.altitude, kAlt); +} + +// WHY: Once a DO_JUMP has already used all repeats, callers should move on to the next item. +// WHAT: [WP0, DO_JUMP->0 done, WP2] starting from idx 1 returns idx 2. +TEST_F(MissionBaseTraversalTest, GetNonJumpItemSkipsDoJumpAfterLastRepeat) +{ + // GIVEN: A DO_JUMP whose repeat count is already reached. + mission_base.loadTestMission({ + makePositionItem(kBaseLat, kBaseLon, kAlt), // idx 0 + makeDoJump(0, 1, 1), // idx 1 + makePositionItem(kBaseLat + 0.001, kBaseLon, kAlt), // idx 2 + }); + + int32_t mission_index = 1; + mission_item_s mission_item{}; + + // WHEN: The helper resolves the jump while traversing forward. + const int ret = mission_base.getNonJumpItem(mission_index, mission_item, + MissionBaseTestPeer::MissionTraversalType::FollowMissionControlFlow, + false, false); + + // THEN: The jump is skipped and the next non-jump item is returned. + ASSERT_EQ(ret, PX4_OK); + EXPECT_EQ(mission_index, 2); + EXPECT_EQ(mission_item.nav_cmd, NAV_CMD_WAYPOINT); + EXPECT_DOUBLE_EQ(mission_item.lat, kBaseLat + 0.001); +} + +// WHY: Reverse traversal that ignores DO_JUMP must step backward instead of following control flow. +// WHAT: [WP0, DO_JUMP->2, WP2] starting from idx 1 returns idx 0. +TEST_F(MissionBaseTraversalTest, GetNonJumpItemSkipsDoJumpBackwardWhenIgnoringJumps) +{ + // GIVEN: An active forward DO_JUMP with a valid non-jump item before it. + mission_base.loadTestMission({ + makePositionItem(kBaseLat, kBaseLon, kAlt), // idx 0 + makeDoJump(2, 1, 0), // idx 1 + makePositionItem(kBaseLat + 0.001, kBaseLon, kAlt), // idx 2 + }); + + int32_t mission_index = 1; + mission_item_s mission_item{}; + + // WHEN: The helper resolves the jump while moving backward in geometry-only mode. + const int ret = mission_base.getNonJumpItem(mission_index, mission_item, + MissionBaseTestPeer::MissionTraversalType::IgnoreDoJump, + false, true); + + // THEN: The DO_JUMP is skipped and the previous non-jump item is returned. + ASSERT_EQ(ret, PX4_OK); + EXPECT_EQ(mission_index, 0); + EXPECT_EQ(mission_item.nav_cmd, NAV_CMD_WAYPOINT); + EXPECT_DOUBLE_EQ(mission_item.lat, kBaseLat); +} + +// WHY: Bad jump targets must return an error. +// WHAT: A DO_JUMP that points beyond the mission bounds returns PX4_ERROR. +TEST_F(MissionBaseTraversalTest, GetNonJumpItemReturnsErrorForOutOfBoundsDoJumpTarget) +{ + // GIVEN: A mission with a DO_JUMP that points outside the mission. + mission_base.loadTestMission({ + makeDoJump(3, 1, 0), // idx 0 + makePositionItem(kBaseLat, kBaseLon, kAlt), // idx 1 + }); + + int32_t mission_index = 0; + mission_item_s mission_item{}; + + // WHEN: The helper tries to resolve that jump. + const int ret = mission_base.getNonJumpItem(mission_index, mission_item, + MissionBaseTestPeer::MissionTraversalType::FollowMissionControlFlow, + false, false); + + // THEN: The helper returns an error. + EXPECT_EQ(ret, PX4_ERROR); + EXPECT_EQ(mission_index, 0); +} + +// WHY: Geometry-only position traversal must skip non-position mission items. +// WHAT: Starting from a VTOL transition item, the helper skips it and returns the next position item. +TEST_F(MissionBaseTraversalTest, FindNextSkipsNonPositionItems) +{ + // GIVEN: A position item, a non-position VTOL transition, and then another position item. + mission_base.loadTestMission({ + makePositionItem(kBaseLat, kBaseLon, kAlt), // idx 0 + makeVtolTransitionItem(vtol_vehicle_status_s::VEHICLE_VTOL_STATE_FW), // idx 1 + makePositionItem(kBaseLat + 0.001, kBaseLon, kAlt), // idx 2 + }); + + int32_t next_index{-1}; + + // WHEN: Geometry-only traversal searches forward from the non-position item. + const bool found = mission_base.findNextPositionIndex(1, next_index, + MissionBaseTestPeer::MissionTraversalType::IgnoreDoJump); + + // THEN: The next position item is returned. + EXPECT_TRUE(found); + EXPECT_EQ(next_index, 2); +} + +// WHY: Geometry-only position traversal must skip non-position mission items. +// WHAT: Starting from a position item after a VTOL transition, the helper skips it and returns the previous position item. +TEST_F(MissionBaseTraversalTest, FindPreviousSkipsNonPositionItems) +{ + // GIVEN: A position item, a non-position VTOL transition, and then another position item. + mission_base.loadTestMission({ + makePositionItem(kBaseLat, kBaseLon, kAlt), // idx 0 + makeVtolTransitionItem(vtol_vehicle_status_s::VEHICLE_VTOL_STATE_FW), // idx 1 + makePositionItem(kBaseLat + 0.001, kBaseLon, kAlt), // idx 2 + }); + + int32_t previous_index{-1}; + + // WHEN: Geometry-only traversal searches backward from the non-position item. + const bool found = mission_base.findPreviousPositionIndex(2, previous_index, + MissionBaseTestPeer::MissionTraversalType::IgnoreDoJump); + + // THEN: The previous position item is returned. + EXPECT_TRUE(found); + EXPECT_EQ(previous_index, 0); +} + +// WHY: Geometry-only traversal must skip DO_JUMP items. +// WHAT: [WP, DO_JUMP, WP, WP] starting from idx 1 returns idx 2. +TEST_F(MissionBaseTraversalTest, FindNextSkipsDoJumpItems) +{ + // GIVEN: A mission where a DO_JUMP sits between two position items. + mission_base.loadTestMission({ + makePositionItem(kBaseLat, kBaseLon, kAlt), // idx 0 + makeDoJump(0, 3), // idx 1 + makePositionItem(kBaseLat + 0.001, kBaseLon, kAlt), // idx 2 + makePositionItem(kBaseLat + 0.002, kBaseLon, kAlt), // idx 3 + }); + + int32_t next_index{-1}; + + // WHEN: Geometry-only traversal starts at the DO_JUMP item. + const bool found = mission_base.findNextPositionIndex(1, next_index, + MissionBaseTestPeer::MissionTraversalType::IgnoreDoJump); + + // THEN: The first position item after the jump is returned. + EXPECT_TRUE(found); + EXPECT_EQ(next_index, 2); +} + +// WHY: Geometry-only traversal must skip DO_JUMP items. +// WHAT: [WP, WP, DO_JUMP, WP] starting from idx 3 returns idx 1. +TEST_F(MissionBaseTraversalTest, FindPreviousSkipsDoJumpItems) +{ + // GIVEN: A mission where a DO_JUMP sits between two position items. + mission_base.loadTestMission({ + makePositionItem(kBaseLat, kBaseLon, kAlt), // idx 0 + makePositionItem(kBaseLat + 0.001, kBaseLon, kAlt), // idx 1 + makeDoJump(0, 3), // idx 2 + makePositionItem(kBaseLat + 0.002, kBaseLon, kAlt), // idx 3 + }); + + int32_t previous_index{-1}; + + // WHEN: Geometry-only traversal starts at the DO_JUMP item. + const bool found = mission_base.findPreviousPositionIndex(3, previous_index, + MissionBaseTestPeer::MissionTraversalType::IgnoreDoJump); + + // THEN: The first position item before the jump is returned. + EXPECT_TRUE(found); + EXPECT_EQ(previous_index, 1); +} + +// WHY: Consecutive non-position items must be skipped. +// WHAT: [WP, DO_JUMP, VTOL_FW, WP] starting from idx 1 returns idx 3. +TEST_F(MissionBaseTraversalTest, FindNextSkipsConsecutiveNonPositionItems) +{ + // GIVEN: Consecutive non-position items before the next position item. + mission_base.loadTestMission({ + makePositionItem(kBaseLat, kBaseLon, kAlt), // idx 0 + makeDoJump(0, 5), // idx 1 + makeVtolTransitionItem(vtol_vehicle_status_s::VEHICLE_VTOL_STATE_FW), // idx 2 + makePositionItem(kBaseLat + 0.001, kBaseLon, kAlt), // idx 3 + }); + + int32_t next_index{-1}; + + // WHEN: Geometry-only traversal walks forward through the control items. + const bool found = mission_base.findNextPositionIndex(1, next_index, + MissionBaseTestPeer::MissionTraversalType::IgnoreDoJump); + + // THEN: It returns the first following position item. + EXPECT_TRUE(found); + EXPECT_EQ(next_index, 3); +} + +// WHY: Consecutive non-position items must be skipped in reverse. +// WHAT: [WP, DO_JUMP, VTOL_FW, WP] starting from idx 3 returns idx 0. +TEST_F(MissionBaseTraversalTest, FindPreviousSkipsConsecutiveNonPositionItems) +{ + // GIVEN: Consecutive non-position items before the previous position item. + mission_base.loadTestMission({ + makePositionItem(kBaseLat, kBaseLon, kAlt), // idx 0 + makeDoJump(0, 3), // idx 1 + makeVtolTransitionItem(vtol_vehicle_status_s::VEHICLE_VTOL_STATE_FW), // idx 2 + makePositionItem(kBaseLat + 0.001, kBaseLon, kAlt), // idx 3 + }); + + int32_t previous_index{-1}; + + // WHEN: Geometry-only traversal walks backward through the control items. + const bool found = mission_base.findPreviousPositionIndex(3, previous_index, + MissionBaseTestPeer::MissionTraversalType::IgnoreDoJump); + + // THEN: It returns the first previous position item. + EXPECT_TRUE(found); + EXPECT_EQ(previous_index, 0); +} + +// WHY: Callers need a failure when no later position item exists. +// WHAT: [WP, DO_JUMP] starting from idx 1 returns false. +TEST_F(MissionBaseTraversalTest, FindNextReturnsFalseAtEnd) +{ + // GIVEN: A mission with no position item after the starting index. + mission_base.loadTestMission({ + makePositionItem(kBaseLat, kBaseLon, kAlt), // idx 0 + makeDoJump(0, 3), // idx 1 + }); + + int32_t next_index{-1}; + + // WHEN: Geometry-only traversal searches past the last item. + const bool found = mission_base.findNextPositionIndex(1, next_index, + MissionBaseTestPeer::MissionTraversalType::IgnoreDoJump); + + // THEN: The helper reports that no next position item exists. + EXPECT_FALSE(found); + EXPECT_EQ(next_index, -1); +} + +// WHY: Callers need a failure when no earlier position item exists. +// WHAT: [DO_JUMP, WP] starting from idx 1 returns false. +TEST_F(MissionBaseTraversalTest, FindPreviousReturnsFalseAtStart) +{ + // GIVEN: A mission with no position item before the starting index. + mission_base.loadTestMission({ + makeDoJump(0, 3), // idx 0 + makePositionItem(kBaseLat, kBaseLon, kAlt), // idx 1 + }); + + int32_t previous_index{-1}; + + // WHEN: Geometry-only traversal searches before the first position item. + const bool found = mission_base.findPreviousPositionIndex(1, previous_index, + MissionBaseTestPeer::MissionTraversalType::IgnoreDoJump); + + // THEN: The helper reports that no previous position item exists. + EXPECT_FALSE(found); + EXPECT_EQ(previous_index, -1); +} + +// WHY: Traversal should fail cleanly when a mission item cannot be loaded. +// WHAT: A cache failure on the next position item makes findNextPositionIndex() return false. +TEST_F(MissionBaseTraversalTest, FindNextReturnsFalseOnCacheReadFailure) +{ + // GIVEN: A mission where the next position item cannot be loaded. + mission_base.loadTestMission({ + makePositionItem(kBaseLat, kBaseLon, kAlt), // idx 0 + makeDoJump(0, 3), // idx 1 + makePositionItem(kBaseLat + 0.001, kBaseLon, kAlt), // idx 2 + }); + mission_base.setLoadFailureIndices({2}); + + int32_t next_index{-1}; + + // WHEN: Geometry-only traversal advances past the DO_JUMP item. + const bool found = mission_base.findNextPositionIndex(1, next_index, + MissionBaseTestPeer::MissionTraversalType::IgnoreDoJump); + + // THEN: The unreadable position item produces a clean failure. + EXPECT_FALSE(found); + EXPECT_EQ(next_index, -1); +} + +// WHY: Traversal should fail cleanly when a mission item cannot be loaded. +// WHAT: A cache failure on the previous position item makes findPreviousPositionIndex() return false. +TEST_F(MissionBaseTraversalTest, FindPreviousReturnsFalseOnCacheReadFailure) +{ + // GIVEN: A mission where the previous position item cannot be loaded. + mission_base.loadTestMission({ + makePositionItem(kBaseLat, kBaseLon, kAlt), // idx 0 + makeDoJump(0, 3), // idx 1 + makePositionItem(kBaseLat + 0.001, kBaseLon, kAlt), // idx 2 + }); + mission_base.setLoadFailureIndices({0}); + + int32_t previous_index{-1}; + + // WHEN: Geometry-only traversal moves backward past the DO_JUMP item. + const bool found = mission_base.findPreviousPositionIndex(2, previous_index, + MissionBaseTestPeer::MissionTraversalType::IgnoreDoJump); + + // THEN: The unreadable position item produces a clean failure. + EXPECT_FALSE(found); + EXPECT_EQ(previous_index, -1); +} + +// WHY: findNextPositionIndex must use MissionTraversalType +// WHAT: [DO_JUMP->2, WP1, WP2] starting from idx 0 resolves to idx 2 in mission-control +// mode and idx 1 in geometry-only mode. +TEST_F(MissionBaseTraversalTest, FindNextSupportsBothTraversalSemantics) +{ + // GIVEN: A jump whose target is a later position item. + mission_base.loadTestMission({ + makeDoJump(2, 1, 0), // idx 0 + makePositionItem(kBaseLat, kBaseLon, kAlt), // idx 1 + makePositionItem(kBaseLat + 0.001, kBaseLon, kAlt), // idx 2 + }); + + int32_t next_follow{-1}; + int32_t next_geometry{-1}; + + // WHEN: The same lookup is performed in both traversal modes. + const bool found_follow = mission_base.findNextPositionIndex(0, next_follow, + MissionBaseTestPeer::MissionTraversalType::FollowMissionControlFlow); + const bool found_geometry = mission_base.findNextPositionIndex(0, next_geometry, + MissionBaseTestPeer::MissionTraversalType::IgnoreDoJump); + + // THEN: Mission-control mode follows the jump, while geometry-only mode skips it. + EXPECT_TRUE(found_follow); + EXPECT_TRUE(found_geometry); + EXPECT_EQ(next_follow, 2); + EXPECT_EQ(next_geometry, 1); +} + +// WHY: findPreviousPositionIndex must use MissionTraversalType +// WHAT: [WP0, WP1, DO_JUMP->0, WP3] starting from idx 3 resolves to idx 0 in mission-control +// mode and idx 1 in geometry-only mode. +TEST_F(MissionBaseTraversalTest, FindPreviousSupportsBothTraversalSemantics) +{ + // GIVEN: A jump whose target is an earlier position item. + mission_base.loadTestMission({ + makePositionItem(kBaseLat, kBaseLon, kAlt), // idx 0 + makePositionItem(kBaseLat + 0.001, kBaseLon, kAlt), // idx 1 + makeDoJump(0, 2, 0), // idx 2 + makePositionItem(kBaseLat + 0.002, kBaseLon, kAlt), // idx 3 + }); + + int32_t previous_follow{-1}; + int32_t previous_geometry{-1}; + + // WHEN: The same lookup is performed in both traversal modes. + const bool found_follow = mission_base.findPreviousPositionIndex(3, previous_follow, + MissionBaseTestPeer::MissionTraversalType::FollowMissionControlFlow); + const bool found_geometry = mission_base.findPreviousPositionIndex(3, previous_geometry, + MissionBaseTestPeer::MissionTraversalType::IgnoreDoJump); + + // THEN: Mission-control mode follows the jump, while geometry-only mode skips it. + EXPECT_TRUE(found_follow); + EXPECT_TRUE(found_geometry); + EXPECT_EQ(previous_follow, 0); + EXPECT_EQ(previous_geometry, 1); +} + +// WHY: The refactor must not change the legacy mission-control behavior. +// WHAT: [DO_JUMP->2, WP1, WP2] from current_seq=-1 should still land on idx 2. +TEST_F(MissionBaseTraversalTest, GoToNextPositionItemFollowsMissionControlFlow) +{ + // GIVEN: A mission whose first item is an active DO_JUMP. + mission_base.loadTestMission({ + makeDoJump(2, 1, 0), // idx 0 + makePositionItem(kBaseLat, kBaseLon, kAlt), // idx 1 + makePositionItem(kBaseLat + 0.001, kBaseLon, kAlt), // idx 2 + }); + mission_base.setCurrentSequence(-1); + + // WHEN: The caller requests mission-control traversal. + const int ret = mission_base.goToNextPositionItem(MissionBaseTestPeer::MissionTraversalType::FollowMissionControlFlow); + + // THEN: Traversal follows the jump target exactly as before. + EXPECT_EQ(ret, PX4_OK); + EXPECT_EQ(mission_base.currentSequence(), 2); +} + +// WHY: The backward wrapper must also preserve the legacy mission-control behavior. +// WHAT: [WP0, WP1, DO_JUMP->0, WP3] from current_seq=3 should still land on idx 0. +TEST_F(MissionBaseTraversalTest, GoToPreviousPositionItemFollowsMissionControlFlow) +{ + // GIVEN: A mission with an active jump loop before the current position item. + mission_base.loadTestMission({ + makePositionItem(kBaseLat, kBaseLon, kAlt), // idx 0 + makePositionItem(kBaseLat + 0.001, kBaseLon, kAlt), // idx 1 + makeDoJump(0, 2, 0), // idx 2 + makePositionItem(kBaseLat + 0.002, kBaseLon, kAlt), // idx 3 + }); + mission_base.setCurrentSequence(3); + + // WHEN: The caller requests mission-control traversal. + const int ret = mission_base.goToPreviousPositionItem(MissionBaseTestPeer::MissionTraversalType::FollowMissionControlFlow); + + // THEN: Traversal follows the active jump exactly as before. + EXPECT_EQ(ret, PX4_OK); + EXPECT_EQ(mission_base.currentSequence(), 0); +} + +// WHY: Existing mission execution relies on getNextPositionItems() following active DO_JUMP +// control flow by default. +// WHAT: [WP0, WP1, DO_JUMP->0, WP3] starting from idx 2 returns idx 0 then idx 1. +TEST_F(MissionBaseTraversalTest, GetNextPositionItemsFollowsActiveDoJump) +{ + // GIVEN: A mission with an active jump loop. + mission_base.loadTestMission({ + makePositionItem(kBaseLat, kBaseLon, kAlt), // idx 0 + makePositionItem(kBaseLat + 0.001, kBaseLon, kAlt), // idx 1 + makeDoJump(0, 2, 0), // idx 2 + makePositionItem(kBaseLat + 0.002, kBaseLon, kAlt), // idx 3 + }); + + int32_t next_items[2] = {-1, -1}; + size_t num_found_items = 0; + + // WHEN: The multi-item helper walks forward with default traversal semantics. + mission_base.getNextPositionItems(2, next_items, num_found_items, 2u); + + // THEN: The active DO_JUMP is followed. + ASSERT_EQ(num_found_items, 2u); + EXPECT_EQ(next_items[0], 0); + EXPECT_EQ(next_items[1], 1); +} + +// WHY: Reverse mission flows rely on getPreviousPositionItems() following active DO_JUMP. +// WHAT: [WP0, WP1, DO_JUMP->0, WP3] starting from idx 3 returns idx 0. +TEST_F(MissionBaseTraversalTest, GetPreviousPositionItemsFollowsActiveDoJump) +{ + // GIVEN: A mission with an active jump loop before the current position item. + mission_base.loadTestMission({ + makePositionItem(kBaseLat, kBaseLon, kAlt), // idx 0 + makePositionItem(kBaseLat + 0.001, kBaseLon, kAlt), // idx 1 + makeDoJump(0, 2, 0), // idx 2 + makePositionItem(kBaseLat + 0.002, kBaseLon, kAlt), // idx 3 + }); + + int32_t previous_items[1] = {-1}; + size_t num_found_items = 0; + + // WHEN: The multi-item helper walks backward with default traversal semantics. + mission_base.getPreviousPositionItems(3, previous_items, num_found_items, 1u); + + // THEN: The active DO_JUMP is followed. + ASSERT_EQ(num_found_items, 1u); + EXPECT_EQ(previous_items[0], 0); +} + +// WHY: Mission-based RTL configures position traversal to skip DO_JUMP loops consistently. +// WHAT: [DO_JUMP->2, WP1, WP2] from current_seq=-1 lands on idx 1 with the configured traversal. +TEST_F(IgnoreDoJumpMissionBaseTraversalTest, ConfiguredTraversalSkipsDoJumpForGoToNextPositionItem) +{ + // GIVEN: A mission whose first item is an active DO_JUMP. + mission_base.loadTestMission({ + makeDoJump(2, 1, 0), // idx 0 + makePositionItem(kBaseLat, kBaseLon, kAlt), // idx 1 + makePositionItem(kBaseLat + 0.001, kBaseLon, kAlt), // idx 2 + }); + mission_base.setCurrentSequence(-1); + + // WHEN: The mode advances using its configured traversal policy. + const int ret = mission_base.goToNextPositionItem(); + + // THEN: The DO_JUMP loop is skipped and the geometric next waypoint is selected. + EXPECT_EQ(ret, PX4_OK); + EXPECT_EQ(mission_base.currentSequence(), 1); +} + +// WHY: Reverse mission-path RTL must skip DO_JUMP loops for backward progression too. +// WHAT: [WP0, WP1, DO_JUMP->0, WP3] from current_seq=3 lands on idx 1 with the configured traversal. +TEST_F(IgnoreDoJumpMissionBaseTraversalTest, ConfiguredTraversalSkipsDoJumpForGoToPreviousPositionItem) +{ + // GIVEN: A mission with an active jump loop before the current position item. + mission_base.loadTestMission({ + makePositionItem(kBaseLat, kBaseLon, kAlt), // idx 0 + makePositionItem(kBaseLat + 0.001, kBaseLon, kAlt), // idx 1 + makeDoJump(0, 2, 0), // idx 2 + makePositionItem(kBaseLat + 0.002, kBaseLon, kAlt), // idx 3 + }); + mission_base.setCurrentSequence(3); + + // WHEN: The mode advances backward using its configured traversal policy. + const int ret = mission_base.goToPreviousPositionItem(); + + // THEN: The DO_JUMP loop is skipped and the geometric previous waypoint is selected. + EXPECT_EQ(ret, PX4_OK); + EXPECT_EQ(mission_base.currentSequence(), 1); +} diff --git a/src/modules/navigator/vtol_takeoff_params.c b/src/modules/navigator/vtol_takeoff_params.c deleted file mode 100644 index b33818f9d6..0000000000 --- a/src/modules/navigator/vtol_takeoff_params.c +++ /dev/null @@ -1,53 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2021 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * AS IS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file vtol_takeoff_params.c - * - * Parameters for the VTOL takeoff navigation mode. - * - */ - -/** - * VTOL Takeoff relative loiter altitude. - * - * Altitude relative to home at which vehicle will loiter after front transition. - * - * @unit m - * @min 20 - * @max 300 - * @decimal 1 - * @increment 1 - * @group VTOL Takeoff - */ -PARAM_DEFINE_FLOAT(VTO_LOITER_ALT, 80); diff --git a/src/modules/navigator/vtol_takeoff_params.yaml b/src/modules/navigator/vtol_takeoff_params.yaml new file mode 100644 index 0000000000..2841beec6e --- /dev/null +++ b/src/modules/navigator/vtol_takeoff_params.yaml @@ -0,0 +1,15 @@ +module_name: navigator +parameters: +- group: VTOL Takeoff + definitions: + VTO_LOITER_ALT: + description: + short: VTOL Takeoff relative loiter altitude + long: Altitude relative to home at which vehicle will loiter after front transition. + type: float + default: 80 + unit: m + min: 20 + max: 300 + decimal: 1 + increment: 1 diff --git a/src/modules/px4iofirmware/px4io.cpp b/src/modules/px4iofirmware/px4io.cpp index 69527d7bf2..176d6bd1eb 100644 --- a/src/modules/px4iofirmware/px4io.cpp +++ b/src/modules/px4iofirmware/px4io.cpp @@ -391,16 +391,17 @@ extern "C" __EXPORT int user_start(int argc, char *argv[]) heartbeat_blink(); } -#if defined(HEATER_OUTPUT_EN) +#if defined(HEATER1_OUTPUT_EN) +// TODO: Multi-instance heater for PX4IO to be implemented if (r_page_setup[PX4IO_P_SETUP_THERMAL] != PX4IO_THERMAL_IGNORE) { if (r_page_setup[PX4IO_P_SETUP_THERMAL] < PX4IO_THERMAL_FULL) { /* switch resistive heater off */ - HEATER_OUTPUT_EN(false); + HEATER1_OUTPUT_EN(false); } else { /* switch resistive heater hard on */ - HEATER_OUTPUT_EN(true); + HEATER1_OUTPUT_EN(true); } } diff --git a/src/modules/rc_update/CMakeLists.txt b/src/modules/rc_update/CMakeLists.txt index 927e2f96f2..2f2e543ad2 100644 --- a/src/modules/rc_update/CMakeLists.txt +++ b/src/modules/rc_update/CMakeLists.txt @@ -37,6 +37,9 @@ px4_add_module( SRCS rc_update.cpp rc_update.h + MODULE_CONFIG + params.yaml + params_deprecated.yaml DEPENDS hysteresis mathlib diff --git a/src/modules/rc_update/params.c b/src/modules/rc_update/params.c deleted file mode 100644 index 3709a3a841..0000000000 --- a/src/modules/rc_update/params.c +++ /dev/null @@ -1,1989 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2012-2025 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file params.c - * - * Parameters defined for RC. - * - */ - -/** - * RC channel 1 minimum - * - * Minimum value for RC channel 1 - * - * @min 800.0 - * @max 1500.0 - * @unit us - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC1_MIN, 1000.0f); - -/** - * RC channel 1 trim - * - * Mid point value - * - * @min 800.0 - * @max 2200.0 - * @unit us - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC1_TRIM, 1500.0f); - -/** - * RC channel 1 maximum - * - * Maximum value for RC channel 1 - * - * @min 1500.0 - * @max 2200.0 - * @unit us - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC1_MAX, 2000.0f); - -/** - * RC channel 1 reverse - * - * Set to -1 to reverse channel. - * - * @min -1.0 - * @max 1.0 - * @value -1.0 Reverse - * @value 1.0 Normal - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC1_REV, 1.0f); - -/** - * RC channel 2 minimum - * - * Minimum value for this channel. - * - * @min 800.0 - * @max 1500.0 - * @unit us - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC2_MIN, 1000.0f); - -/** - * RC channel 2 trim - * - * Mid point value - * - * @min 800.0 - * @max 2200.0 - * @unit us - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC2_TRIM, 1500.0f); - -/** - * RC channel 2 maximum - * - * Maximum value for this channel. - * - * @min 1500.0 - * @max 2200.0 - * @unit us - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC2_MAX, 2000.0f); - -/** - * RC channel 2 reverse - * - * Set to -1 to reverse channel. - * - * @min -1.0 - * @max 1.0 - * @value -1.0 Reverse - * @value 1.0 Normal - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC2_REV, 1.0f); - -/** - * RC channel 3 minimum - * - * Minimum value for this channel. - * - * @min 800.0 - * @max 1500.0 - * @unit us - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC3_MIN, 1000); - -/** - * RC channel 3 trim - * - * Mid point value - * - * @min 800.0 - * @max 2200.0 - * @unit us - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC3_TRIM, 1500); - -/** - * RC channel 3 maximum - * - * Maximum value for this channel. - * - * @min 1500.0 - * @max 2200.0 - * @unit us - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC3_MAX, 2000); - -/** - * RC channel 3 reverse - * - * Set to -1 to reverse channel. - * - * @min -1.0 - * @max 1.0 - * @value -1.0 Reverse - * @value 1.0 Normal - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC3_REV, 1.0f); - -/** - * RC channel 4 minimum - * - * Minimum value for this channel. - * - * @min 800.0 - * @max 1500.0 - * @unit us - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC4_MIN, 1000); - -/** - * RC channel 4 trim - * - * Mid point value - * - * @min 800.0 - * @max 2200.0 - * @unit us - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC4_TRIM, 1500); - -/** - * RC channel 4 maximum - * - * Maximum value for this channel. - * - * @min 1500.0 - * @max 2200.0 - * @unit us - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC4_MAX, 2000); - -/** - * RC channel 4 reverse - * - * Set to -1 to reverse channel. - * - * @min -1.0 - * @max 1.0 - * @value -1.0 Reverse - * @value 1.0 Normal - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC4_REV, 1.0f); - -/** - * RC channel 5 minimum - * - * Minimum value for this channel. - * - * @min 800.0 - * @max 1500.0 - * @unit us - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC5_MIN, 1000); - -/** - * RC channel 5 trim - * - * Mid point value - * - * @min 800.0 - * @max 2200.0 - * @unit us - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC5_TRIM, 1500); - -/** - * RC channel 5 maximum - * - * Maximum value for this channel. - * - * @min 1500.0 - * @max 2200.0 - * @unit us - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC5_MAX, 2000); - -/** - * RC channel 5 reverse - * - * Set to -1 to reverse channel. - * - * @min -1.0 - * @max 1.0 - * @value -1.0 Reverse - * @value 1.0 Normal - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC5_REV, 1.0f); - -/** - * RC channel 6 minimum - * - * Minimum value for this channel. - * - * @unit us - * @min 800.0 - * @max 1500.0 - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC6_MIN, 1000); - -/** - * RC channel 6 trim - * - * Mid point value - * - * @min 800.0 - * @max 2200.0 - * @unit us - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC6_TRIM, 1500); - -/** - * RC channel 6 maximum - * - * Maximum value for this channel. - * - * @min 1500.0 - * @max 2200.0 - * @unit us - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC6_MAX, 2000); - -/** - * RC channel 6 reverse - * - * Set to -1 to reverse channel. - * - * @min -1.0 - * @max 1.0 - * @value -1.0 Reverse - * @value 1.0 Normal - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC6_REV, 1.0f); - -/** - * RC channel 7 minimum - * - * Minimum value for this channel. - * - * @unit us - * @min 800.0 - * @max 1500.0 - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC7_MIN, 1000); - -/** - * RC channel 7 trim - * - * Mid point value - * - * @min 800.0 - * @max 2200.0 - * @unit us - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC7_TRIM, 1500); - -/** - * RC channel 7 maximum - * - * Maximum value for this channel. - * - * @min 1500.0 - * @max 2200.0 - * @unit us - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC7_MAX, 2000); - -/** - * RC channel 7 reverse - * - * Set to -1 to reverse channel. - * - * @min -1.0 - * @max 1.0 - * @value -1.0 Reverse - * @value 1.0 Normal - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC7_REV, 1.0f); - -/** - * RC channel 8 minimum - * - * Minimum value for this channel. - * - * @min 800.0 - * @max 1500.0 - * @unit us - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC8_MIN, 1000); - -/** - * RC channel 8 trim - * - * Mid point value - * - * @min 800.0 - * @max 2200.0 - * @unit us - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC8_TRIM, 1500); - -/** - * RC channel 8 maximum - * - * Maximum value for this channel. - * - * @min 1500.0 - * @max 2200.0 - * @unit us - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC8_MAX, 2000); - -/** - * RC channel 8 reverse - * - * Set to -1 to reverse channel. - * - * @min -1.0 - * @max 1.0 - * @value -1.0 Reverse - * @value 1.0 Normal - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC8_REV, 1.0f); - -/** - * RC channel 9 minimum - * - * Minimum value for this channel. - * - * @min 800.0 - * @max 1500.0 - * @unit us - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC9_MIN, 1000); - -/** - * RC channel 9 trim - * - * Mid point value - * - * @min 800.0 - * @max 2200.0 - * @unit us - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC9_TRIM, 1500); - -/** - * RC channel 9 maximum - * - * Maximum value for this channel. - * - * @min 1500.0 - * @max 2200.0 - * @unit us - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC9_MAX, 2000); - -/** - * RC channel 9 reverse - * - * Set to -1 to reverse channel. - * - * @min -1.0 - * @max 1.0 - * @value -1.0 Reverse - * @value 1.0 Normal - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC9_REV, 1.0f); - -/** - * RC channel 10 minimum - * - * Minimum value for this channel. - * - * @min 800.0 - * @max 1500.0 - * @unit us - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC10_MIN, 1000); - -/** - * RC channel 10 trim - * - * Mid point value - * - * @min 800.0 - * @max 2200.0 - * @unit us - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC10_TRIM, 1500); - -/** - * RC channel 10 maximum - * - * Maximum value for this channel. - * - * @min 1500.0 - * @max 2200.0 - * @unit us - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC10_MAX, 2000); - -/** - * RC channel 10 reverse - * - * Set to -1 to reverse channel. - * - * @min -1.0 - * @max 1.0 - * @value -1.0 Reverse - * @value 1.0 Normal - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC10_REV, 1.0f); - -/** - * RC channel 11 minimum - * - * Minimum value for this channel. - * - * @min 800.0 - * @max 1500.0 - * @unit us - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC11_MIN, 1000); - -/** - * RC channel 11 trim - * - * Mid point value - * - * @min 800.0 - * @max 2200.0 - * @unit us - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC11_TRIM, 1500); - -/** - * RC channel 11 maximum - * - * Maximum value for this channel. - * - * @min 1500.0 - * @max 2200.0 - * @unit us - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC11_MAX, 2000); - -/** - * RC channel 11 reverse - * - * Set to -1 to reverse channel. - * - * @min -1.0 - * @max 1.0 - * @value -1.0 Reverse - * @value 1.0 Normal - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC11_REV, 1.0f); - -/** - * RC channel 12 minimum - * - * Minimum value for this channel. - * - * @min 800.0 - * @max 1500.0 - * @unit us - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC12_MIN, 1000); - -/** - * RC channel 12 trim - * - * Mid point value - * - * @min 800.0 - * @max 2200.0 - * @unit us - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC12_TRIM, 1500); - -/** - * RC channel 12 maximum - * - * Maximum value for this channel. - * - * @min 1500.0 - * @max 2200.0 - * @unit us - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC12_MAX, 2000); - -/** - * RC channel 12 reverse - * - * Set to -1 to reverse channel. - * - * @min -1.0 - * @max 1.0 - * @value -1.0 Reverse - * @value 1.0 Normal - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC12_REV, 1.0f); - -/** - * RC channel 13 minimum - * - * Minimum value for this channel. - * - * @min 800.0 - * @max 1500.0 - * @unit us - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC13_MIN, 1000); - -/** - * RC channel 13 trim - * - * Mid point value - * - * @min 800.0 - * @max 2200.0 - * @unit us - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC13_TRIM, 1500); - -/** - * RC channel 13 maximum - * - * Maximum value for this channel. - * - * @min 1500.0 - * @max 2200.0 - * @unit us - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC13_MAX, 2000); - -/** - * RC channel 13 reverse - * - * Set to -1 to reverse channel. - * - * @min -1.0 - * @max 1.0 - * @value -1.0 Reverse - * @value 1.0 Normal - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC13_REV, 1.0f); - -/** - * RC channel 14 minimum - * - * Minimum value for this channel. - * - * @min 800.0 - * @max 1500.0 - * @unit us - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC14_MIN, 1000); - -/** - * RC channel 14 trim - * - * Mid point value - * - * @min 800.0 - * @max 2200.0 - * @unit us - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC14_TRIM, 1500); - -/** - * RC channel 14 maximum - * - * Maximum value for this channel. - * - * @min 1500.0 - * @max 2200.0 - * @unit us - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC14_MAX, 2000); - -/** - * RC channel 14 reverse - * - * Set to -1 to reverse channel. - * - * @min -1.0 - * @max 1.0 - * @value -1.0 Reverse - * @value 1.0 Normal - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC14_REV, 1.0f); - -/** - * RC channel 15 minimum - * - * Minimum value for this channel. - * - * @min 800.0 - * @max 1500.0 - * @unit us - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC15_MIN, 1000); - -/** - * RC channel 15 trim - * - * Mid point value - * - * @min 800.0 - * @max 2200.0 - * @unit us - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC15_TRIM, 1500); - -/** - * RC channel 15 maximum - * - * Maximum value for this channel. - * - * @min 1500.0 - * @max 2200.0 - * @unit us - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC15_MAX, 2000); - -/** - * RC channel 15 reverse - * - * Set to -1 to reverse channel. - * - * @min -1.0 - * @max 1.0 - * @value -1.0 Reverse - * @value 1.0 Normal - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC15_REV, 1.0f); - -/** - * RC channel 16 minimum - * - * Minimum value for this channel. - * - * @min 800.0 - * @max 1500.0 - * @unit us - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC16_MIN, 1000); - -/** - * RC channel 16 trim - * - * Mid point value - * - * @min 800.0 - * @max 2200.0 - * @unit us - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC16_TRIM, 1500); - -/** - * RC channel 16 maximum - * - * Maximum value for this channel. - * - * @min 1500.0 - * @max 2200.0 - * @unit us - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC16_MAX, 2000); - -/** - * RC channel 16 reverse - * - * Set to -1 to reverse channel. - * - * @min -1.0 - * @max 1.0 - * @value -1.0 Reverse - * @value 1.0 Normal - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC16_REV, 1.0f); - -/** - * RC channel 17 minimum - * - * Minimum value for this channel. - * - * @min 800.0 - * @max 1500.0 - * @unit us - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC17_MIN, 1000); - -/** - * RC channel 17 trim - * - * Mid point value - * - * @min 800.0 - * @max 2200.0 - * @unit us - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC17_TRIM, 1500); - -/** - * RC channel 17 maximum - * - * Maximum value for this channel. - * - * @min 1500.0 - * @max 2200.0 - * @unit us - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC17_MAX, 2000); - -/** - * RC channel 17 reverse - * - * Set to -1 to reverse channel. - * - * @min -1.0 - * @max 1.0 - * @value -1.0 Reverse - * @value 1.0 Normal - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC17_REV, 1.0f); - -/** - * RC channel 18 minimum - * - * Minimum value for this channel. - * - * @min 800.0 - * @max 1500.0 - * @unit us - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC18_MIN, 1000); - -/** - * RC channel 18 trim - * - * Mid point value - * - * @min 800.0 - * @max 2200.0 - * @unit us - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC18_TRIM, 1500); - -/** - * RC channel 18 maximum - * - * Maximum value for this channel. - * - * @min 1500.0 - * @max 2200.0 - * @unit us - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC18_MAX, 2000); - -/** - * RC channel 18 reverse - * - * Set to -1 to reverse channel. - * - * @min -1.0 - * @max 1.0 - * @value -1.0 Reverse - * @value 1.0 Normal - * @group Radio Calibration - */ -PARAM_DEFINE_FLOAT(RC18_REV, 1.0f); - -/** - * RC channel count - * - * This parameter is used by Ground Station software to save the number - * of channels which were used during RC calibration. It is only meant - * for ground station use. - * - * @min 0 - * @max 18 - * @group Radio Calibration - */ -PARAM_DEFINE_INT32(RC_CHAN_CNT, 0); - -/** - * Roll control channel mapping. - * - * The channel index (starting from 1 for channel 1) indicates - * which channel should be used for reading roll inputs from. - * A value of zero indicates the switch is not assigned. - * - * @min 0 - * @max 18 - * @value 0 Unassigned - * @value 1 Channel 1 - * @value 2 Channel 2 - * @value 3 Channel 3 - * @value 4 Channel 4 - * @value 5 Channel 5 - * @value 6 Channel 6 - * @value 7 Channel 7 - * @value 8 Channel 8 - * @value 9 Channel 9 - * @value 10 Channel 10 - * @value 11 Channel 11 - * @value 12 Channel 12 - * @value 13 Channel 13 - * @value 14 Channel 14 - * @value 15 Channel 15 - * @value 16 Channel 16 - * @value 17 Channel 17 - * @value 18 Channel 18 - * @group Radio Calibration - */ -PARAM_DEFINE_INT32(RC_MAP_ROLL, 0); - -/** - * Pitch control channel mapping. - * - * The channel index (starting from 1 for channel 1) indicates - * which channel should be used for reading pitch inputs from. - * A value of zero indicates the switch is not assigned. - * - * @min 0 - * @max 18 - * @value 0 Unassigned - * @value 1 Channel 1 - * @value 2 Channel 2 - * @value 3 Channel 3 - * @value 4 Channel 4 - * @value 5 Channel 5 - * @value 6 Channel 6 - * @value 7 Channel 7 - * @value 8 Channel 8 - * @value 9 Channel 9 - * @value 10 Channel 10 - * @value 11 Channel 11 - * @value 12 Channel 12 - * @value 13 Channel 13 - * @value 14 Channel 14 - * @value 15 Channel 15 - * @value 16 Channel 16 - * @value 17 Channel 17 - * @value 18 Channel 18 - * @group Radio Calibration - */ -PARAM_DEFINE_INT32(RC_MAP_PITCH, 0); - -/** - * Failsafe channel mapping. - * - * Configures which RC channel is used by the receiver to indicate the signal was lost - * (on receivers that use output a fixed signal value to report lost signal). - * If set to 0, the channel mapped to throttle is used. - * - * Use RC_FAILS_THR to set the threshold indicating lost signal. By default it's below - * the expected range and hence disabled. - * - * @min 0 - * @max 18 - * @value 0 Unassigned - * @value 1 Channel 1 - * @value 2 Channel 2 - * @value 3 Channel 3 - * @value 4 Channel 4 - * @value 5 Channel 5 - * @value 6 Channel 6 - * @value 7 Channel 7 - * @value 8 Channel 8 - * @value 9 Channel 9 - * @value 10 Channel 10 - * @value 11 Channel 11 - * @value 12 Channel 12 - * @value 13 Channel 13 - * @value 14 Channel 14 - * @value 15 Channel 15 - * @value 16 Channel 16 - * @value 17 Channel 17 - * @value 18 Channel 18 - * @group Radio Calibration - */ -PARAM_DEFINE_INT32(RC_MAP_FAILSAFE, 0); - -/** - * Throttle control channel mapping. - * - * The channel index (starting from 1 for channel 1) indicates - * which channel should be used for reading throttle inputs from. - * A value of zero indicates the switch is not assigned. - * - * @min 0 - * @max 18 - * @value 0 Unassigned - * @value 1 Channel 1 - * @value 2 Channel 2 - * @value 3 Channel 3 - * @value 4 Channel 4 - * @value 5 Channel 5 - * @value 6 Channel 6 - * @value 7 Channel 7 - * @value 8 Channel 8 - * @value 9 Channel 9 - * @value 10 Channel 10 - * @value 11 Channel 11 - * @value 12 Channel 12 - * @value 13 Channel 13 - * @value 14 Channel 14 - * @value 15 Channel 15 - * @value 16 Channel 16 - * @value 17 Channel 17 - * @value 18 Channel 18 - * @group Radio Calibration - */ -PARAM_DEFINE_INT32(RC_MAP_THROTTLE, 0); - -/** - * Yaw control channel mapping. - * - * The channel index (starting from 1 for channel 1) indicates - * which channel should be used for reading yaw inputs from. - * A value of zero indicates the switch is not assigned. - * - * @min 0 - * @max 18 - * @value 0 Unassigned - * @value 1 Channel 1 - * @value 2 Channel 2 - * @value 3 Channel 3 - * @value 4 Channel 4 - * @value 5 Channel 5 - * @value 6 Channel 6 - * @value 7 Channel 7 - * @value 8 Channel 8 - * @value 9 Channel 9 - * @value 10 Channel 10 - * @value 11 Channel 11 - * @value 12 Channel 12 - * @value 13 Channel 13 - * @value 14 Channel 14 - * @value 15 Channel 15 - * @value 16 Channel 16 - * @value 17 Channel 17 - * @value 18 Channel 18 - * @group Radio Calibration - */ -PARAM_DEFINE_INT32(RC_MAP_YAW, 0); - -/** - * Single channel flight mode selection - * - * If this parameter is non-zero, flight modes are only selected - * by this channel and are assigned to six slots. - * - * @min 0 - * @max 18 - * @group Radio Switches - * @value 0 Unassigned - * @value 1 Channel 1 - * @value 2 Channel 2 - * @value 3 Channel 3 - * @value 4 Channel 4 - * @value 5 Channel 5 - * @value 6 Channel 6 - * @value 7 Channel 7 - * @value 8 Channel 8 - * @value 9 Channel 9 - * @value 10 Channel 10 - * @value 11 Channel 11 - * @value 12 Channel 12 - * @value 13 Channel 13 - * @value 14 Channel 14 - * @value 15 Channel 15 - * @value 16 Channel 16 - * @value 17 Channel 17 - * @value 18 Channel 18 - */ -PARAM_DEFINE_INT32(RC_MAP_FLTMODE, 0); - -/** - * Return switch channel - * - * @min 0 - * @max 18 - * @group Radio Switches - * @value 0 Unassigned - * @value 1 Channel 1 - * @value 2 Channel 2 - * @value 3 Channel 3 - * @value 4 Channel 4 - * @value 5 Channel 5 - * @value 6 Channel 6 - * @value 7 Channel 7 - * @value 8 Channel 8 - * @value 9 Channel 9 - * @value 10 Channel 10 - * @value 11 Channel 11 - * @value 12 Channel 12 - * @value 13 Channel 13 - * @value 14 Channel 14 - * @value 15 Channel 15 - * @value 16 Channel 16 - * @value 17 Channel 17 - * @value 18 Channel 18 - */ -PARAM_DEFINE_INT32(RC_MAP_RETURN_SW, 0); - -/** - * Loiter switch channel - * - * @min 0 - * @max 18 - * @group Radio Switches - * @value 0 Unassigned - * @value 1 Channel 1 - * @value 2 Channel 2 - * @value 3 Channel 3 - * @value 4 Channel 4 - * @value 5 Channel 5 - * @value 6 Channel 6 - * @value 7 Channel 7 - * @value 8 Channel 8 - * @value 9 Channel 9 - * @value 10 Channel 10 - * @value 11 Channel 11 - * @value 12 Channel 12 - * @value 13 Channel 13 - * @value 14 Channel 14 - * @value 15 Channel 15 - * @value 16 Channel 16 - * @value 17 Channel 17 - * @value 18 Channel 18 - */ -PARAM_DEFINE_INT32(RC_MAP_LOITER_SW, 0); - -/** - * Offboard switch channel - * - * @min 0 - * @max 18 - * @group Radio Switches - * @value 0 Unassigned - * @value 1 Channel 1 - * @value 2 Channel 2 - * @value 3 Channel 3 - * @value 4 Channel 4 - * @value 5 Channel 5 - * @value 6 Channel 6 - * @value 7 Channel 7 - * @value 8 Channel 8 - * @value 9 Channel 9 - * @value 10 Channel 10 - * @value 11 Channel 11 - * @value 12 Channel 12 - * @value 13 Channel 13 - * @value 14 Channel 14 - * @value 15 Channel 15 - * @value 16 Channel 16 - * @value 17 Channel 17 - * @value 18 Channel 18 - */ -PARAM_DEFINE_INT32(RC_MAP_OFFB_SW, 0); - -/** - * Emergency Kill switch channel - * - * This channel immediately sets all outputs to their disarmed values, parachutes are NOT deployed. - * Unlike termination this can be undone. Quickly flipping the switch back restores control. - * System auto-disarms after COM_KILL_DISARM seconds, preflight checks and re-arming are then required. - * - * @min 0 - * @max 18 - * @group Radio Switches - * @value 0 Unassigned - * @value 1 Channel 1 - * @value 2 Channel 2 - * @value 3 Channel 3 - * @value 4 Channel 4 - * @value 5 Channel 5 - * @value 6 Channel 6 - * @value 7 Channel 7 - * @value 8 Channel 8 - * @value 9 Channel 9 - * @value 10 Channel 10 - * @value 11 Channel 11 - * @value 12 Channel 12 - * @value 13 Channel 13 - * @value 14 Channel 14 - * @value 15 Channel 15 - * @value 16 Channel 16 - * @value 17 Channel 17 - * @value 18 Channel 18 - */ -PARAM_DEFINE_INT32(RC_MAP_KILL_SW, 0); - -/** - * Termination switch channel - * - * This channel triggers irreversible flight termination: - * All outputs are disabled and set to their failsafe values (disarmed by default) - * and MAVLink parachutes are triggered. - * - * Unlike a kill switch, this cannot be undone until system reboot. Use with caution. - * - * @min 0 - * @max 18 - * @group Radio Switches - * @value 0 Unassigned - * @value 1 Channel 1 - * @value 2 Channel 2 - * @value 3 Channel 3 - * @value 4 Channel 4 - * @value 5 Channel 5 - * @value 6 Channel 6 - * @value 7 Channel 7 - * @value 8 Channel 8 - * @value 9 Channel 9 - * @value 10 Channel 10 - * @value 11 Channel 11 - * @value 12 Channel 12 - * @value 13 Channel 13 - * @value 14 Channel 14 - * @value 15 Channel 15 - * @value 16 Channel 16 - * @value 17 Channel 17 - * @value 18 Channel 18 - */ -PARAM_DEFINE_INT32(RC_MAP_TERM_SW, 0); - -/** - * Arm switch channel. - * - * Use it to arm/disarm via switch instead of default throttle stick. If this is - * assigned, arming and disarming via stick is disabled. - * - * @min 0 - * @max 18 - * @group Radio Switches - * @value 0 Unassigned - * @value 1 Channel 1 - * @value 2 Channel 2 - * @value 3 Channel 3 - * @value 4 Channel 4 - * @value 5 Channel 5 - * @value 6 Channel 6 - * @value 7 Channel 7 - * @value 8 Channel 8 - * @value 9 Channel 9 - * @value 10 Channel 10 - * @value 11 Channel 11 - * @value 12 Channel 12 - * @value 13 Channel 13 - * @value 14 Channel 14 - * @value 15 Channel 15 - * @value 16 Channel 16 - * @value 17 Channel 17 - * @value 18 Channel 18 - */ -PARAM_DEFINE_INT32(RC_MAP_ARM_SW, 0); - -/** - * Flaps channel - * - * @min 0 - * @max 18 - * @group Radio Switches - * @value 0 Unassigned - * @value 1 Channel 1 - * @value 2 Channel 2 - * @value 3 Channel 3 - * @value 4 Channel 4 - * @value 5 Channel 5 - * @value 6 Channel 6 - * @value 7 Channel 7 - * @value 8 Channel 8 - * @value 9 Channel 9 - * @value 10 Channel 10 - * @value 11 Channel 11 - * @value 12 Channel 12 - * @value 13 Channel 13 - * @value 14 Channel 14 - * @value 15 Channel 15 - * @value 16 Channel 16 - * @value 17 Channel 17 - * @value 18 Channel 18 - */ -PARAM_DEFINE_INT32(RC_MAP_FLAPS, 0); - -/** - * VTOL transition switch channel mapping - * - * @min 0 - * @max 18 - * @group Radio Switches - * @value 0 Unassigned - * @value 1 Channel 1 - * @value 2 Channel 2 - * @value 3 Channel 3 - * @value 4 Channel 4 - * @value 5 Channel 5 - * @value 6 Channel 6 - * @value 7 Channel 7 - * @value 8 Channel 8 - * @value 9 Channel 9 - * @value 10 Channel 10 - * @value 11 Channel 11 - * @value 12 Channel 12 - * @value 13 Channel 13 - * @value 14 Channel 14 - * @value 15 Channel 15 - * @value 16 Channel 16 - * @value 17 Channel 17 - * @value 18 Channel 18 - */ -PARAM_DEFINE_INT32(RC_MAP_TRANS_SW, 0); - -/** - * Landing gear switch channel - * - * @min 0 - * @max 18 - * @group Radio Switches - * @value 0 Unassigned - * @value 1 Channel 1 - * @value 2 Channel 2 - * @value 3 Channel 3 - * @value 4 Channel 4 - * @value 5 Channel 5 - * @value 6 Channel 6 - * @value 7 Channel 7 - * @value 8 Channel 8 - * @value 9 Channel 9 - * @value 10 Channel 10 - * @value 11 Channel 11 - * @value 12 Channel 12 - * @value 13 Channel 13 - * @value 14 Channel 14 - * @value 15 Channel 15 - * @value 16 Channel 16 - * @value 17 Channel 17 - * @value 18 Channel 18 - */ -PARAM_DEFINE_INT32(RC_MAP_GEAR_SW, 0); - -/** - * Button flight mode selection - * - * This bitmask allows to specify multiple channels for changing flight modes using - * momentary buttons. Each channel is assigned to a mode slot ((lowest channel = slot 1). - * The resulting modes for each slot X is defined by the COM_FLTMODEX parameters. - * The functionality can be used only if RC_MAP_FLTMODE is disabled. - * - * The maximum number of available slots and hence bits set in the mask is 6. - * @min 0 - * @max 258048 - * @group Radio Switches - * @bit 0 Mask Channel 1 as a mode button - * @bit 1 Mask Channel 2 as a mode button - * @bit 2 Mask Channel 3 as a mode button - * @bit 3 Mask Channel 4 as a mode button - * @bit 4 Mask Channel 5 as a mode button - * @bit 5 Mask Channel 6 as a mode button - * @bit 6 Mask Channel 7 as a mode button - * @bit 7 Mask Channel 8 as a mode button - * @bit 8 Mask Channel 9 as a mode button - * @bit 9 Mask Channel 10 as a mode button - * @bit 10 Mask Channel 11 as a mode button - * @bit 11 Mask Channel 12 as a mode button - * @bit 12 Mask Channel 13 as a mode button - * @bit 13 Mask Channel 14 as a mode button - * @bit 14 Mask Channel 15 as a mode button - * @bit 15 Mask Channel 16 as a mode button - * @bit 16 Mask Channel 17 as a mode button - * @bit 17 Mask Channel 18 as a mode button - */ -PARAM_DEFINE_INT32(RC_MAP_FLTM_BTN, 0); - -/** - * AUX1 Passthrough RC channel - * - * @min 0 - * @max 18 - * @group Radio Calibration - * @value 0 Unassigned - * @value 1 Channel 1 - * @value 2 Channel 2 - * @value 3 Channel 3 - * @value 4 Channel 4 - * @value 5 Channel 5 - * @value 6 Channel 6 - * @value 7 Channel 7 - * @value 8 Channel 8 - * @value 9 Channel 9 - * @value 10 Channel 10 - * @value 11 Channel 11 - * @value 12 Channel 12 - * @value 13 Channel 13 - * @value 14 Channel 14 - * @value 15 Channel 15 - * @value 16 Channel 16 - * @value 17 Channel 17 - * @value 18 Channel 18 - */ -PARAM_DEFINE_INT32(RC_MAP_AUX1, 0); - -/** - * AUX2 Passthrough RC channel - * - * @min 0 - * @max 18 - * @group Radio Calibration - * @value 0 Unassigned - * @value 1 Channel 1 - * @value 2 Channel 2 - * @value 3 Channel 3 - * @value 4 Channel 4 - * @value 5 Channel 5 - * @value 6 Channel 6 - * @value 7 Channel 7 - * @value 8 Channel 8 - * @value 9 Channel 9 - * @value 10 Channel 10 - * @value 11 Channel 11 - * @value 12 Channel 12 - * @value 13 Channel 13 - * @value 14 Channel 14 - * @value 15 Channel 15 - * @value 16 Channel 16 - * @value 17 Channel 17 - * @value 18 Channel 18 - */ -PARAM_DEFINE_INT32(RC_MAP_AUX2, 0); - -/** - * AUX3 Passthrough RC channel - * - * @min 0 - * @max 18 - * @group Radio Calibration - * @value 0 Unassigned - * @value 1 Channel 1 - * @value 2 Channel 2 - * @value 3 Channel 3 - * @value 4 Channel 4 - * @value 5 Channel 5 - * @value 6 Channel 6 - * @value 7 Channel 7 - * @value 8 Channel 8 - * @value 9 Channel 9 - * @value 10 Channel 10 - * @value 11 Channel 11 - * @value 12 Channel 12 - * @value 13 Channel 13 - * @value 14 Channel 14 - * @value 15 Channel 15 - * @value 16 Channel 16 - * @value 17 Channel 17 - * @value 18 Channel 18 - */ -PARAM_DEFINE_INT32(RC_MAP_AUX3, 0); - -/** - * AUX4 Passthrough RC channel - * - * @min 0 - * @max 18 - * @group Radio Calibration - * @value 0 Unassigned - * @value 1 Channel 1 - * @value 2 Channel 2 - * @value 3 Channel 3 - * @value 4 Channel 4 - * @value 5 Channel 5 - * @value 6 Channel 6 - * @value 7 Channel 7 - * @value 8 Channel 8 - * @value 9 Channel 9 - * @value 10 Channel 10 - * @value 11 Channel 11 - * @value 12 Channel 12 - * @value 13 Channel 13 - * @value 14 Channel 14 - * @value 15 Channel 15 - * @value 16 Channel 16 - * @value 17 Channel 17 - * @value 18 Channel 18 - */ -PARAM_DEFINE_INT32(RC_MAP_AUX4, 0); - -/** - * AUX5 Passthrough RC channel - * - * @min 0 - * @max 18 - * @group Radio Calibration - * @value 0 Unassigned - * @value 1 Channel 1 - * @value 2 Channel 2 - * @value 3 Channel 3 - * @value 4 Channel 4 - * @value 5 Channel 5 - * @value 6 Channel 6 - * @value 7 Channel 7 - * @value 8 Channel 8 - * @value 9 Channel 9 - * @value 10 Channel 10 - * @value 11 Channel 11 - * @value 12 Channel 12 - * @value 13 Channel 13 - * @value 14 Channel 14 - * @value 15 Channel 15 - * @value 16 Channel 16 - * @value 17 Channel 17 - * @value 18 Channel 18 - */ -PARAM_DEFINE_INT32(RC_MAP_AUX5, 0); - -/** - * AUX6 Passthrough RC channel - * - * @min 0 - * @max 18 - * @group Radio Calibration - * @value 0 Unassigned - * @value 1 Channel 1 - * @value 2 Channel 2 - * @value 3 Channel 3 - * @value 4 Channel 4 - * @value 5 Channel 5 - * @value 6 Channel 6 - * @value 7 Channel 7 - * @value 8 Channel 8 - * @value 9 Channel 9 - * @value 10 Channel 10 - * @value 11 Channel 11 - * @value 12 Channel 12 - * @value 13 Channel 13 - * @value 14 Channel 14 - * @value 15 Channel 15 - * @value 16 Channel 16 - * @value 17 Channel 17 - * @value 18 Channel 18 - */ -PARAM_DEFINE_INT32(RC_MAP_AUX6, 0); - -/** - * Payload Power Switch RC channel - * - * @min 0 - * @max 18 - * @group Radio Switches - * @value 0 Unassigned - * @value 1 Channel 1 - * @value 2 Channel 2 - * @value 3 Channel 3 - * @value 4 Channel 4 - * @value 5 Channel 5 - * @value 6 Channel 6 - * @value 7 Channel 7 - * @value 8 Channel 8 - * @value 9 Channel 9 - * @value 10 Channel 10 - * @value 11 Channel 11 - * @value 12 Channel 12 - * @value 13 Channel 13 - * @value 14 Channel 14 - * @value 15 Channel 15 - * @value 16 Channel 16 - * @value 17 Channel 17 - * @value 18 Channel 18 - */ -PARAM_DEFINE_INT32(RC_MAP_PAY_SW, 0); - -/** - * PARAM1 tuning channel - * - * Can be used for parameter tuning with the RC. This one is further referenced as the 1st parameter channel. - * Set to 0 to deactivate * - * - * @min 0 - * @max 18 - * @group Radio Calibration - * @value 0 Unassigned - * @value 1 Channel 1 - * @value 2 Channel 2 - * @value 3 Channel 3 - * @value 4 Channel 4 - * @value 5 Channel 5 - * @value 6 Channel 6 - * @value 7 Channel 7 - * @value 8 Channel 8 - * @value 9 Channel 9 - * @value 10 Channel 10 - * @value 11 Channel 11 - * @value 12 Channel 12 - * @value 13 Channel 13 - * @value 14 Channel 14 - * @value 15 Channel 15 - * @value 16 Channel 16 - * @value 17 Channel 17 - * @value 18 Channel 18 - */ -PARAM_DEFINE_INT32(RC_MAP_PARAM1, 0); - -/** - * PARAM2 tuning channel - * - * Can be used for parameter tuning with the RC. This one is further referenced as the 2nd parameter channel. - * Set to 0 to deactivate * - * - * @min 0 - * @max 18 - * @group Radio Calibration - * @value 0 Unassigned - * @value 1 Channel 1 - * @value 2 Channel 2 - * @value 3 Channel 3 - * @value 4 Channel 4 - * @value 5 Channel 5 - * @value 6 Channel 6 - * @value 7 Channel 7 - * @value 8 Channel 8 - * @value 9 Channel 9 - * @value 10 Channel 10 - * @value 11 Channel 11 - * @value 12 Channel 12 - * @value 13 Channel 13 - * @value 14 Channel 14 - * @value 15 Channel 15 - * @value 16 Channel 16 - * @value 17 Channel 17 - * @value 18 Channel 18 - */ -PARAM_DEFINE_INT32(RC_MAP_PARAM2, 0); - -/** - * PARAM3 tuning channel - * - * Can be used for parameter tuning with the RC. This one is further referenced as the 3th parameter channel. - * Set to 0 to deactivate * - * - * @min 0 - * @max 18 - * @group Radio Calibration - * @value 0 Unassigned - * @value 1 Channel 1 - * @value 2 Channel 2 - * @value 3 Channel 3 - * @value 4 Channel 4 - * @value 5 Channel 5 - * @value 6 Channel 6 - * @value 7 Channel 7 - * @value 8 Channel 8 - * @value 9 Channel 9 - * @value 10 Channel 10 - * @value 11 Channel 11 - * @value 12 Channel 12 - * @value 13 Channel 13 - * @value 14 Channel 14 - * @value 15 Channel 15 - * @value 16 Channel 16 - * @value 17 Channel 17 - * @value 18 Channel 18 - */ -PARAM_DEFINE_INT32(RC_MAP_PARAM3, 0); - -/** - * RC channel to engage the main motor (for helicopters) - * - * @min 0 - * @max 18 - * @group Radio Calibration - * @value 0 Unassigned - * @value 1 Channel 1 - * @value 2 Channel 2 - * @value 3 Channel 3 - * @value 4 Channel 4 - * @value 5 Channel 5 - * @value 6 Channel 6 - * @value 7 Channel 7 - * @value 8 Channel 8 - * @value 9 Channel 9 - * @value 10 Channel 10 - * @value 11 Channel 11 - * @value 12 Channel 12 - * @value 13 Channel 13 - * @value 14 Channel 14 - * @value 15 Channel 15 - * @value 16 Channel 16 - * @value 17 Channel 17 - * @value 18 Channel 18 - */ -PARAM_DEFINE_INT32(RC_MAP_ENG_MOT, 0); - -/** - * Failsafe channel PWM threshold. - * - * Use RC_MAP_FAILSAFE to specify which channel is used to indicate RC loss via this threshold. - * By default this is the throttle channel. - * - * Set to a PWM value slightly above the PWM value for the channel (e.g. throttle) in a failsafe event, - * but below the minimum PWM value for the channel during normal operation. - * - * Note: The default value of 0 disables the feature (it is below the expected range). - * - * @min 0 - * @max 2200 - * @unit us - * @group Radio Calibration - */ -PARAM_DEFINE_INT32(RC_FAILS_THR, 0); - -/** - * Threshold for selecting return to launch mode - * - * 0-1 indicate where in the full channel range the threshold sits - * 0 : min - * 1 : max - * sign indicates polarity of comparison - * positive : true when channel>th - * negative : true when channelth - * negative : true when channelth - * negative : true when channelth - * negative : true when channelth - * negative : true when channelth - * negative : true when channelth - * negative : true when channelth - * negative : true when channelth - * negative : true when channelth - * negative : true when channel 0 - * - * @min 0 - * @max 2000 - * @group Radio Calibration - * - */ -PARAM_DEFINE_INT32(RC_RSSI_PWM_MIN, 1000); - -/** - * Max input value for RSSI reading. - * - * Only used if RC_RSSI_PWM_CHAN > 0 - * - * @min 0 - * @max 2000 - * @group Radio Calibration - * - */ -PARAM_DEFINE_INT32(RC_RSSI_PWM_MAX, 2000); diff --git a/src/modules/rc_update/params.yaml b/src/modules/rc_update/params.yaml new file mode 100644 index 0000000000..3daa81d42d --- /dev/null +++ b/src/modules/rc_update/params.yaml @@ -0,0 +1,1698 @@ +module_name: rc_update +parameters: +- group: Radio Calibration + definitions: + RC1_MIN: + description: + short: RC channel 1 minimum + long: Minimum value for RC channel 1 + type: float + default: 1000.0 + min: 800.0 + max: 1500.0 + unit: us + RC1_TRIM: + description: + short: RC channel 1 trim + long: Mid point value + type: float + default: 1500.0 + min: 800.0 + max: 2200.0 + unit: us + RC1_MAX: + description: + short: RC channel 1 maximum + long: Maximum value for RC channel 1 + type: float + default: 2000.0 + min: 1500.0 + max: 2200.0 + unit: us + RC1_REV: + description: + short: RC channel 1 reverse + long: Set to -1 to reverse channel. + type: int32 + values: + -1: Reverse + 1: Normal + default: 1 + min: -1 + max: 1 + RC2_MIN: + description: + short: RC channel 2 minimum + long: Minimum value for this channel. + type: float + default: 1000.0 + min: 800.0 + max: 1500.0 + unit: us + RC2_TRIM: + description: + short: RC channel 2 trim + long: Mid point value + type: float + default: 1500.0 + min: 800.0 + max: 2200.0 + unit: us + RC2_MAX: + description: + short: RC channel 2 maximum + long: Maximum value for this channel. + type: float + default: 2000.0 + min: 1500.0 + max: 2200.0 + unit: us + RC2_REV: + description: + short: RC channel 2 reverse + long: Set to -1 to reverse channel. + type: int32 + values: + -1: Reverse + 1: Normal + default: 1 + min: -1 + max: 1 + RC3_MIN: + description: + short: RC channel 3 minimum + long: Minimum value for this channel. + type: float + default: 1000 + min: 800.0 + max: 1500.0 + unit: us + RC3_TRIM: + description: + short: RC channel 3 trim + long: Mid point value + type: float + default: 1500 + min: 800.0 + max: 2200.0 + unit: us + RC3_MAX: + description: + short: RC channel 3 maximum + long: Maximum value for this channel. + type: float + default: 2000 + min: 1500.0 + max: 2200.0 + unit: us + RC3_REV: + description: + short: RC channel 3 reverse + long: Set to -1 to reverse channel. + type: int32 + values: + -1: Reverse + 1: Normal + default: 1 + min: -1 + max: 1 + RC4_MIN: + description: + short: RC channel 4 minimum + long: Minimum value for this channel. + type: float + default: 1000 + min: 800.0 + max: 1500.0 + unit: us + RC4_TRIM: + description: + short: RC channel 4 trim + long: Mid point value + type: float + default: 1500 + min: 800.0 + max: 2200.0 + unit: us + RC4_MAX: + description: + short: RC channel 4 maximum + long: Maximum value for this channel. + type: float + default: 2000 + min: 1500.0 + max: 2200.0 + unit: us + RC4_REV: + description: + short: RC channel 4 reverse + long: Set to -1 to reverse channel. + type: int32 + values: + -1: Reverse + 1: Normal + default: 1 + min: -1 + max: 1 + RC5_MIN: + description: + short: RC channel 5 minimum + long: Minimum value for this channel. + type: float + default: 1000 + min: 800.0 + max: 1500.0 + unit: us + RC5_TRIM: + description: + short: RC channel 5 trim + long: Mid point value + type: float + default: 1500 + min: 800.0 + max: 2200.0 + unit: us + RC5_MAX: + description: + short: RC channel 5 maximum + long: Maximum value for this channel. + type: float + default: 2000 + min: 1500.0 + max: 2200.0 + unit: us + RC5_REV: + description: + short: RC channel 5 reverse + long: Set to -1 to reverse channel. + type: int32 + values: + -1: Reverse + 1: Normal + default: 1 + min: -1 + max: 1 + RC6_MIN: + description: + short: RC channel 6 minimum + long: Minimum value for this channel. + type: float + default: 1000 + unit: us + min: 800.0 + max: 1500.0 + RC6_TRIM: + description: + short: RC channel 6 trim + long: Mid point value + type: float + default: 1500 + min: 800.0 + max: 2200.0 + unit: us + RC6_MAX: + description: + short: RC channel 6 maximum + long: Maximum value for this channel. + type: float + default: 2000 + min: 1500.0 + max: 2200.0 + unit: us + RC6_REV: + description: + short: RC channel 6 reverse + long: Set to -1 to reverse channel. + type: int32 + values: + -1: Reverse + 1: Normal + default: 1 + min: -1 + max: 1 + RC7_MIN: + description: + short: RC channel 7 minimum + long: Minimum value for this channel. + type: float + default: 1000 + unit: us + min: 800.0 + max: 1500.0 + RC7_TRIM: + description: + short: RC channel 7 trim + long: Mid point value + type: float + default: 1500 + min: 800.0 + max: 2200.0 + unit: us + RC7_MAX: + description: + short: RC channel 7 maximum + long: Maximum value for this channel. + type: float + default: 2000 + min: 1500.0 + max: 2200.0 + unit: us + RC7_REV: + description: + short: RC channel 7 reverse + long: Set to -1 to reverse channel. + type: int32 + values: + -1: Reverse + 1: Normal + default: 1 + min: -1 + max: 1 + RC8_MIN: + description: + short: RC channel 8 minimum + long: Minimum value for this channel. + type: float + default: 1000 + min: 800.0 + max: 1500.0 + unit: us + RC8_TRIM: + description: + short: RC channel 8 trim + long: Mid point value + type: float + default: 1500 + min: 800.0 + max: 2200.0 + unit: us + RC8_MAX: + description: + short: RC channel 8 maximum + long: Maximum value for this channel. + type: float + default: 2000 + min: 1500.0 + max: 2200.0 + unit: us + RC8_REV: + description: + short: RC channel 8 reverse + long: Set to -1 to reverse channel. + type: int32 + values: + -1: Reverse + 1: Normal + default: 1 + min: -1 + max: 1 + RC9_MIN: + description: + short: RC channel 9 minimum + long: Minimum value for this channel. + type: float + default: 1000 + min: 800.0 + max: 1500.0 + unit: us + RC9_TRIM: + description: + short: RC channel 9 trim + long: Mid point value + type: float + default: 1500 + min: 800.0 + max: 2200.0 + unit: us + RC9_MAX: + description: + short: RC channel 9 maximum + long: Maximum value for this channel. + type: float + default: 2000 + min: 1500.0 + max: 2200.0 + unit: us + RC9_REV: + description: + short: RC channel 9 reverse + long: Set to -1 to reverse channel. + type: int32 + values: + -1: Reverse + 1: Normal + default: 1 + min: -1 + max: 1 + RC10_MIN: + description: + short: RC channel 10 minimum + long: Minimum value for this channel. + type: float + default: 1000 + min: 800.0 + max: 1500.0 + unit: us + RC10_TRIM: + description: + short: RC channel 10 trim + long: Mid point value + type: float + default: 1500 + min: 800.0 + max: 2200.0 + unit: us + RC10_MAX: + description: + short: RC channel 10 maximum + long: Maximum value for this channel. + type: float + default: 2000 + min: 1500.0 + max: 2200.0 + unit: us + RC10_REV: + description: + short: RC channel 10 reverse + long: Set to -1 to reverse channel. + type: int32 + values: + -1: Reverse + 1: Normal + default: 1 + min: -1 + max: 1 + RC11_MIN: + description: + short: RC channel 11 minimum + long: Minimum value for this channel. + type: float + default: 1000 + min: 800.0 + max: 1500.0 + unit: us + RC11_TRIM: + description: + short: RC channel 11 trim + long: Mid point value + type: float + default: 1500 + min: 800.0 + max: 2200.0 + unit: us + RC11_MAX: + description: + short: RC channel 11 maximum + long: Maximum value for this channel. + type: float + default: 2000 + min: 1500.0 + max: 2200.0 + unit: us + RC11_REV: + description: + short: RC channel 11 reverse + long: Set to -1 to reverse channel. + type: int32 + values: + -1: Reverse + 1: Normal + default: 1 + min: -1 + max: 1 + RC12_MIN: + description: + short: RC channel 12 minimum + long: Minimum value for this channel. + type: float + default: 1000 + min: 800.0 + max: 1500.0 + unit: us + RC12_TRIM: + description: + short: RC channel 12 trim + long: Mid point value + type: float + default: 1500 + min: 800.0 + max: 2200.0 + unit: us + RC12_MAX: + description: + short: RC channel 12 maximum + long: Maximum value for this channel. + type: float + default: 2000 + min: 1500.0 + max: 2200.0 + unit: us + RC12_REV: + description: + short: RC channel 12 reverse + long: Set to -1 to reverse channel. + type: int32 + values: + -1: Reverse + 1: Normal + default: 1 + min: -1 + max: 1 + RC13_MIN: + description: + short: RC channel 13 minimum + long: Minimum value for this channel. + type: float + default: 1000 + min: 800.0 + max: 1500.0 + unit: us + RC13_TRIM: + description: + short: RC channel 13 trim + long: Mid point value + type: float + default: 1500 + min: 800.0 + max: 2200.0 + unit: us + RC13_MAX: + description: + short: RC channel 13 maximum + long: Maximum value for this channel. + type: float + default: 2000 + min: 1500.0 + max: 2200.0 + unit: us + RC13_REV: + description: + short: RC channel 13 reverse + long: Set to -1 to reverse channel. + type: int32 + values: + -1: Reverse + 1: Normal + default: 1 + min: -1 + max: 1 + RC14_MIN: + description: + short: RC channel 14 minimum + long: Minimum value for this channel. + type: float + default: 1000 + min: 800.0 + max: 1500.0 + unit: us + RC14_TRIM: + description: + short: RC channel 14 trim + long: Mid point value + type: float + default: 1500 + min: 800.0 + max: 2200.0 + unit: us + RC14_MAX: + description: + short: RC channel 14 maximum + long: Maximum value for this channel. + type: float + default: 2000 + min: 1500.0 + max: 2200.0 + unit: us + RC14_REV: + description: + short: RC channel 14 reverse + long: Set to -1 to reverse channel. + type: int32 + values: + -1: Reverse + 1: Normal + default: 1 + min: -1 + max: 1 + RC15_MIN: + description: + short: RC channel 15 minimum + long: Minimum value for this channel. + type: float + default: 1000 + min: 800.0 + max: 1500.0 + unit: us + RC15_TRIM: + description: + short: RC channel 15 trim + long: Mid point value + type: float + default: 1500 + min: 800.0 + max: 2200.0 + unit: us + RC15_MAX: + description: + short: RC channel 15 maximum + long: Maximum value for this channel. + type: float + default: 2000 + min: 1500.0 + max: 2200.0 + unit: us + RC15_REV: + description: + short: RC channel 15 reverse + long: Set to -1 to reverse channel. + type: int32 + values: + -1: Reverse + 1: Normal + default: 1 + min: -1 + max: 1 + RC16_MIN: + description: + short: RC channel 16 minimum + long: Minimum value for this channel. + type: float + default: 1000 + min: 800.0 + max: 1500.0 + unit: us + RC16_TRIM: + description: + short: RC channel 16 trim + long: Mid point value + type: float + default: 1500 + min: 800.0 + max: 2200.0 + unit: us + RC16_MAX: + description: + short: RC channel 16 maximum + long: Maximum value for this channel. + type: float + default: 2000 + min: 1500.0 + max: 2200.0 + unit: us + RC16_REV: + description: + short: RC channel 16 reverse + long: Set to -1 to reverse channel. + type: int32 + values: + -1: Reverse + 1: Normal + default: 1 + min: -1 + max: 1 + RC17_MIN: + description: + short: RC channel 17 minimum + long: Minimum value for this channel. + type: float + default: 1000 + min: 800.0 + max: 1500.0 + unit: us + RC17_TRIM: + description: + short: RC channel 17 trim + long: Mid point value + type: float + default: 1500 + min: 800.0 + max: 2200.0 + unit: us + RC17_MAX: + description: + short: RC channel 17 maximum + long: Maximum value for this channel. + type: float + default: 2000 + min: 1500.0 + max: 2200.0 + unit: us + RC17_REV: + description: + short: RC channel 17 reverse + long: Set to -1 to reverse channel. + type: int32 + values: + -1: Reverse + 1: Normal + default: 1 + min: -1 + max: 1 + RC18_MIN: + description: + short: RC channel 18 minimum + long: Minimum value for this channel. + type: float + default: 1000 + min: 800.0 + max: 1500.0 + unit: us + RC18_TRIM: + description: + short: RC channel 18 trim + long: Mid point value + type: float + default: 1500 + min: 800.0 + max: 2200.0 + unit: us + RC18_MAX: + description: + short: RC channel 18 maximum + long: Maximum value for this channel. + type: float + default: 2000 + min: 1500.0 + max: 2200.0 + unit: us + RC18_REV: + description: + short: RC channel 18 reverse + long: Set to -1 to reverse channel. + type: int32 + values: + -1: Reverse + 1: Normal + default: 1 + min: -1 + max: 1 + RC_CHAN_CNT: + description: + short: RC channel count + long: |- + This parameter is used by Ground Station software to save the number + of channels which were used during RC calibration. It is only meant + for ground station use. + type: int32 + default: 0 + min: 0 + max: 18 + RC_MAP_ROLL: + description: + short: Roll control channel mapping + long: |- + The channel index (starting from 1 for channel 1) indicates + which channel should be used for reading roll inputs from. + A value of zero indicates the switch is not assigned. + type: enum + values: + 0: Unassigned + 1: Channel 1 + 2: Channel 2 + 3: Channel 3 + 4: Channel 4 + 5: Channel 5 + 6: Channel 6 + 7: Channel 7 + 8: Channel 8 + 9: Channel 9 + 10: Channel 10 + 11: Channel 11 + 12: Channel 12 + 13: Channel 13 + 14: Channel 14 + 15: Channel 15 + 16: Channel 16 + 17: Channel 17 + 18: Channel 18 + default: 0 + min: 0 + max: 18 + RC_MAP_PITCH: + description: + short: Pitch control channel mapping + long: |- + The channel index (starting from 1 for channel 1) indicates + which channel should be used for reading pitch inputs from. + A value of zero indicates the switch is not assigned. + type: enum + values: + 0: Unassigned + 1: Channel 1 + 2: Channel 2 + 3: Channel 3 + 4: Channel 4 + 5: Channel 5 + 6: Channel 6 + 7: Channel 7 + 8: Channel 8 + 9: Channel 9 + 10: Channel 10 + 11: Channel 11 + 12: Channel 12 + 13: Channel 13 + 14: Channel 14 + 15: Channel 15 + 16: Channel 16 + 17: Channel 17 + 18: Channel 18 + default: 0 + min: 0 + max: 18 + RC_MAP_FAILSAFE: + description: + short: Failsafe channel mapping + long: |- + Configures which RC channel is used by the receiver to indicate the signal was lost + (on receivers that use output a fixed signal value to report lost signal). + If set to 0, the channel mapped to throttle is used. + + Use RC_FAILS_THR to set the threshold indicating lost signal. By default it's below + the expected range and hence disabled. + type: enum + values: + 0: Unassigned + 1: Channel 1 + 2: Channel 2 + 3: Channel 3 + 4: Channel 4 + 5: Channel 5 + 6: Channel 6 + 7: Channel 7 + 8: Channel 8 + 9: Channel 9 + 10: Channel 10 + 11: Channel 11 + 12: Channel 12 + 13: Channel 13 + 14: Channel 14 + 15: Channel 15 + 16: Channel 16 + 17: Channel 17 + 18: Channel 18 + default: 0 + min: 0 + max: 18 + RC_MAP_THROTTLE: + description: + short: Throttle control channel mapping + long: |- + The channel index (starting from 1 for channel 1) indicates + which channel should be used for reading throttle inputs from. + A value of zero indicates the switch is not assigned. + type: enum + values: + 0: Unassigned + 1: Channel 1 + 2: Channel 2 + 3: Channel 3 + 4: Channel 4 + 5: Channel 5 + 6: Channel 6 + 7: Channel 7 + 8: Channel 8 + 9: Channel 9 + 10: Channel 10 + 11: Channel 11 + 12: Channel 12 + 13: Channel 13 + 14: Channel 14 + 15: Channel 15 + 16: Channel 16 + 17: Channel 17 + 18: Channel 18 + default: 0 + min: 0 + max: 18 + RC_MAP_YAW: + description: + short: Yaw control channel mapping + long: |- + The channel index (starting from 1 for channel 1) indicates + which channel should be used for reading yaw inputs from. + A value of zero indicates the switch is not assigned. + type: enum + values: + 0: Unassigned + 1: Channel 1 + 2: Channel 2 + 3: Channel 3 + 4: Channel 4 + 5: Channel 5 + 6: Channel 6 + 7: Channel 7 + 8: Channel 8 + 9: Channel 9 + 10: Channel 10 + 11: Channel 11 + 12: Channel 12 + 13: Channel 13 + 14: Channel 14 + 15: Channel 15 + 16: Channel 16 + 17: Channel 17 + 18: Channel 18 + default: 0 + min: 0 + max: 18 + RC_MAP_AUX1: + description: + short: AUX1 Passthrough RC channel + type: enum + values: + 0: Unassigned + 1: Channel 1 + 2: Channel 2 + 3: Channel 3 + 4: Channel 4 + 5: Channel 5 + 6: Channel 6 + 7: Channel 7 + 8: Channel 8 + 9: Channel 9 + 10: Channel 10 + 11: Channel 11 + 12: Channel 12 + 13: Channel 13 + 14: Channel 14 + 15: Channel 15 + 16: Channel 16 + 17: Channel 17 + 18: Channel 18 + default: 0 + min: 0 + max: 18 + RC_MAP_AUX2: + description: + short: AUX2 Passthrough RC channel + type: enum + values: + 0: Unassigned + 1: Channel 1 + 2: Channel 2 + 3: Channel 3 + 4: Channel 4 + 5: Channel 5 + 6: Channel 6 + 7: Channel 7 + 8: Channel 8 + 9: Channel 9 + 10: Channel 10 + 11: Channel 11 + 12: Channel 12 + 13: Channel 13 + 14: Channel 14 + 15: Channel 15 + 16: Channel 16 + 17: Channel 17 + 18: Channel 18 + default: 0 + min: 0 + max: 18 + RC_MAP_AUX3: + description: + short: AUX3 Passthrough RC channel + type: enum + values: + 0: Unassigned + 1: Channel 1 + 2: Channel 2 + 3: Channel 3 + 4: Channel 4 + 5: Channel 5 + 6: Channel 6 + 7: Channel 7 + 8: Channel 8 + 9: Channel 9 + 10: Channel 10 + 11: Channel 11 + 12: Channel 12 + 13: Channel 13 + 14: Channel 14 + 15: Channel 15 + 16: Channel 16 + 17: Channel 17 + 18: Channel 18 + default: 0 + min: 0 + max: 18 + RC_MAP_AUX4: + description: + short: AUX4 Passthrough RC channel + type: enum + values: + 0: Unassigned + 1: Channel 1 + 2: Channel 2 + 3: Channel 3 + 4: Channel 4 + 5: Channel 5 + 6: Channel 6 + 7: Channel 7 + 8: Channel 8 + 9: Channel 9 + 10: Channel 10 + 11: Channel 11 + 12: Channel 12 + 13: Channel 13 + 14: Channel 14 + 15: Channel 15 + 16: Channel 16 + 17: Channel 17 + 18: Channel 18 + default: 0 + min: 0 + max: 18 + RC_MAP_AUX5: + description: + short: AUX5 Passthrough RC channel + type: enum + values: + 0: Unassigned + 1: Channel 1 + 2: Channel 2 + 3: Channel 3 + 4: Channel 4 + 5: Channel 5 + 6: Channel 6 + 7: Channel 7 + 8: Channel 8 + 9: Channel 9 + 10: Channel 10 + 11: Channel 11 + 12: Channel 12 + 13: Channel 13 + 14: Channel 14 + 15: Channel 15 + 16: Channel 16 + 17: Channel 17 + 18: Channel 18 + default: 0 + min: 0 + max: 18 + RC_MAP_AUX6: + description: + short: AUX6 Passthrough RC channel + type: enum + values: + 0: Unassigned + 1: Channel 1 + 2: Channel 2 + 3: Channel 3 + 4: Channel 4 + 5: Channel 5 + 6: Channel 6 + 7: Channel 7 + 8: Channel 8 + 9: Channel 9 + 10: Channel 10 + 11: Channel 11 + 12: Channel 12 + 13: Channel 13 + 14: Channel 14 + 15: Channel 15 + 16: Channel 16 + 17: Channel 17 + 18: Channel 18 + default: 0 + min: 0 + max: 18 + RC_MAP_PARAM1: + description: + short: PARAM1 tuning channel + long: |- + Can be used for parameter tuning with the RC. This one is further referenced as the 1st parameter channel. + Set to 0 to deactivate * + type: enum + values: + 0: Unassigned + 1: Channel 1 + 2: Channel 2 + 3: Channel 3 + 4: Channel 4 + 5: Channel 5 + 6: Channel 6 + 7: Channel 7 + 8: Channel 8 + 9: Channel 9 + 10: Channel 10 + 11: Channel 11 + 12: Channel 12 + 13: Channel 13 + 14: Channel 14 + 15: Channel 15 + 16: Channel 16 + 17: Channel 17 + 18: Channel 18 + default: 0 + min: 0 + max: 18 + RC_MAP_PARAM2: + description: + short: PARAM2 tuning channel + long: |- + Can be used for parameter tuning with the RC. This one is further referenced as the 2nd parameter channel. + Set to 0 to deactivate * + type: enum + values: + 0: Unassigned + 1: Channel 1 + 2: Channel 2 + 3: Channel 3 + 4: Channel 4 + 5: Channel 5 + 6: Channel 6 + 7: Channel 7 + 8: Channel 8 + 9: Channel 9 + 10: Channel 10 + 11: Channel 11 + 12: Channel 12 + 13: Channel 13 + 14: Channel 14 + 15: Channel 15 + 16: Channel 16 + 17: Channel 17 + 18: Channel 18 + default: 0 + min: 0 + max: 18 + RC_MAP_PARAM3: + description: + short: PARAM3 tuning channel + long: |- + Can be used for parameter tuning with the RC. This one is further referenced as the 3th parameter channel. + Set to 0 to deactivate * + type: enum + values: + 0: Unassigned + 1: Channel 1 + 2: Channel 2 + 3: Channel 3 + 4: Channel 4 + 5: Channel 5 + 6: Channel 6 + 7: Channel 7 + 8: Channel 8 + 9: Channel 9 + 10: Channel 10 + 11: Channel 11 + 12: Channel 12 + 13: Channel 13 + 14: Channel 14 + 15: Channel 15 + 16: Channel 16 + 17: Channel 17 + 18: Channel 18 + default: 0 + min: 0 + max: 18 + RC_MAP_ENG_MOT: + description: + short: RC channel to engage the main motor (for helicopters) + type: enum + values: + 0: Unassigned + 1: Channel 1 + 2: Channel 2 + 3: Channel 3 + 4: Channel 4 + 5: Channel 5 + 6: Channel 6 + 7: Channel 7 + 8: Channel 8 + 9: Channel 9 + 10: Channel 10 + 11: Channel 11 + 12: Channel 12 + 13: Channel 13 + 14: Channel 14 + 15: Channel 15 + 16: Channel 16 + 17: Channel 17 + 18: Channel 18 + default: 0 + min: 0 + max: 18 + RC_FAILS_THR: + description: + short: Failsafe channel PWM threshold + long: |- + Use RC_MAP_FAILSAFE to specify which channel is used to indicate RC loss via this threshold. + By default this is the throttle channel. + + Set to a PWM value slightly above the PWM value for the channel (e.g. throttle) in a failsafe event, + but below the minimum PWM value for the channel during normal operation. + + Note: The default value of 0 disables the feature (it is below the expected range). + type: int32 + default: 0 + min: 0 + max: 2200 + unit: us + RC_RSSI_PWM_CHAN: + description: + short: PWM input channel that provides RSSI + long: |- + 0: do not read RSSI from input channel + 1-18: read RSSI from specified input channel + + Specify the range for RSSI input with RC_RSSI_PWM_MIN and RC_RSSI_PWM_MAX parameters. + type: enum + values: + 0: Unassigned + 1: Channel 1 + 2: Channel 2 + 3: Channel 3 + 4: Channel 4 + 5: Channel 5 + 6: Channel 6 + 7: Channel 7 + 8: Channel 8 + 9: Channel 9 + 10: Channel 10 + 11: Channel 11 + 12: Channel 12 + 13: Channel 13 + 14: Channel 14 + 15: Channel 15 + 16: Channel 16 + 17: Channel 17 + 18: Channel 18 + default: 0 + min: 0 + max: 18 + RC_RSSI_PWM_MIN: + description: + short: Min input value for RSSI reading + long: Only used if RC_RSSI_PWM_CHAN > 0 + type: int32 + default: 1000 + min: 0 + max: 2000 + RC_RSSI_PWM_MAX: + description: + short: Max input value for RSSI reading + long: Only used if RC_RSSI_PWM_CHAN > 0 + type: int32 + default: 2000 + min: 0 + max: 2000 +- group: Radio Switches + definitions: + RC_MAP_FLTMODE: + description: + short: Single channel flight mode selection + long: |- + If this parameter is non-zero, flight modes are only selected + by this channel and are assigned to six slots. + type: enum + values: + 0: Unassigned + 1: Channel 1 + 2: Channel 2 + 3: Channel 3 + 4: Channel 4 + 5: Channel 5 + 6: Channel 6 + 7: Channel 7 + 8: Channel 8 + 9: Channel 9 + 10: Channel 10 + 11: Channel 11 + 12: Channel 12 + 13: Channel 13 + 14: Channel 14 + 15: Channel 15 + 16: Channel 16 + 17: Channel 17 + 18: Channel 18 + default: 0 + min: 0 + max: 18 + RC_MAP_RETURN_SW: + description: + short: Return switch channel + type: enum + values: + 0: Unassigned + 1: Channel 1 + 2: Channel 2 + 3: Channel 3 + 4: Channel 4 + 5: Channel 5 + 6: Channel 6 + 7: Channel 7 + 8: Channel 8 + 9: Channel 9 + 10: Channel 10 + 11: Channel 11 + 12: Channel 12 + 13: Channel 13 + 14: Channel 14 + 15: Channel 15 + 16: Channel 16 + 17: Channel 17 + 18: Channel 18 + default: 0 + min: 0 + max: 18 + RC_MAP_LOITER_SW: + description: + short: Loiter switch channel + type: enum + values: + 0: Unassigned + 1: Channel 1 + 2: Channel 2 + 3: Channel 3 + 4: Channel 4 + 5: Channel 5 + 6: Channel 6 + 7: Channel 7 + 8: Channel 8 + 9: Channel 9 + 10: Channel 10 + 11: Channel 11 + 12: Channel 12 + 13: Channel 13 + 14: Channel 14 + 15: Channel 15 + 16: Channel 16 + 17: Channel 17 + 18: Channel 18 + default: 0 + min: 0 + max: 18 + RC_MAP_OFFB_SW: + description: + short: Offboard switch channel + type: enum + values: + 0: Unassigned + 1: Channel 1 + 2: Channel 2 + 3: Channel 3 + 4: Channel 4 + 5: Channel 5 + 6: Channel 6 + 7: Channel 7 + 8: Channel 8 + 9: Channel 9 + 10: Channel 10 + 11: Channel 11 + 12: Channel 12 + 13: Channel 13 + 14: Channel 14 + 15: Channel 15 + 16: Channel 16 + 17: Channel 17 + 18: Channel 18 + default: 0 + min: 0 + max: 18 + RC_MAP_KILL_SW: + description: + short: Emergency Kill switch channel + long: |- + This channel immediately sets all outputs to their disarmed values, parachutes are NOT deployed. + Unlike termination this can be undone. Quickly flipping the switch back restores control. + System auto-disarms after 5 seconds, preflight checks and re-arming are then required. + type: enum + values: + 0: Unassigned + 1: Channel 1 + 2: Channel 2 + 3: Channel 3 + 4: Channel 4 + 5: Channel 5 + 6: Channel 6 + 7: Channel 7 + 8: Channel 8 + 9: Channel 9 + 10: Channel 10 + 11: Channel 11 + 12: Channel 12 + 13: Channel 13 + 14: Channel 14 + 15: Channel 15 + 16: Channel 16 + 17: Channel 17 + 18: Channel 18 + default: 0 + min: 0 + max: 18 + RC_MAP_TERM_SW: + description: + short: Termination switch channel + long: |- + This channel triggers irreversible flight termination: + All outputs are disabled and set to their failsafe values (disarmed by default) + and MAVLink parachutes are triggered. + + Unlike a kill switch, this cannot be undone until system reboot. Use with caution. + type: enum + values: + 0: Unassigned + 1: Channel 1 + 2: Channel 2 + 3: Channel 3 + 4: Channel 4 + 5: Channel 5 + 6: Channel 6 + 7: Channel 7 + 8: Channel 8 + 9: Channel 9 + 10: Channel 10 + 11: Channel 11 + 12: Channel 12 + 13: Channel 13 + 14: Channel 14 + 15: Channel 15 + 16: Channel 16 + 17: Channel 17 + 18: Channel 18 + default: 0 + min: 0 + max: 18 + RC_MAP_ARM_SW: + description: + short: Arm switch channel + long: |- + Use it to arm/disarm via switch instead of default throttle stick. If this is + assigned, arming and disarming via stick is disabled. + type: enum + values: + 0: Unassigned + 1: Channel 1 + 2: Channel 2 + 3: Channel 3 + 4: Channel 4 + 5: Channel 5 + 6: Channel 6 + 7: Channel 7 + 8: Channel 8 + 9: Channel 9 + 10: Channel 10 + 11: Channel 11 + 12: Channel 12 + 13: Channel 13 + 14: Channel 14 + 15: Channel 15 + 16: Channel 16 + 17: Channel 17 + 18: Channel 18 + default: 0 + min: 0 + max: 18 + RC_MAP_FLAPS: + description: + short: Flaps channel + type: enum + values: + 0: Unassigned + 1: Channel 1 + 2: Channel 2 + 3: Channel 3 + 4: Channel 4 + 5: Channel 5 + 6: Channel 6 + 7: Channel 7 + 8: Channel 8 + 9: Channel 9 + 10: Channel 10 + 11: Channel 11 + 12: Channel 12 + 13: Channel 13 + 14: Channel 14 + 15: Channel 15 + 16: Channel 16 + 17: Channel 17 + 18: Channel 18 + default: 0 + min: 0 + max: 18 + RC_MAP_TRANS_SW: + description: + short: VTOL transition switch channel mapping + type: enum + values: + 0: Unassigned + 1: Channel 1 + 2: Channel 2 + 3: Channel 3 + 4: Channel 4 + 5: Channel 5 + 6: Channel 6 + 7: Channel 7 + 8: Channel 8 + 9: Channel 9 + 10: Channel 10 + 11: Channel 11 + 12: Channel 12 + 13: Channel 13 + 14: Channel 14 + 15: Channel 15 + 16: Channel 16 + 17: Channel 17 + 18: Channel 18 + default: 0 + min: 0 + max: 18 + RC_MAP_GEAR_SW: + description: + short: Landing gear switch channel + type: enum + values: + 0: Unassigned + 1: Channel 1 + 2: Channel 2 + 3: Channel 3 + 4: Channel 4 + 5: Channel 5 + 6: Channel 6 + 7: Channel 7 + 8: Channel 8 + 9: Channel 9 + 10: Channel 10 + 11: Channel 11 + 12: Channel 12 + 13: Channel 13 + 14: Channel 14 + 15: Channel 15 + 16: Channel 16 + 17: Channel 17 + 18: Channel 18 + default: 0 + min: 0 + max: 18 + RC_MAP_FLTM_BTN: + description: + short: Button flight mode selection + long: |- + This bitmask allows to specify multiple channels for changing flight modes using + momentary buttons. Each channel is assigned to a mode slot ((lowest channel = slot 1). + The resulting modes for each slot X is defined by the COM_FLTMODEX parameters. + The functionality can be used only if RC_MAP_FLTMODE is disabled. + + The maximum number of available slots and hence bits set in the mask is 6. + type: bitmask + bit: + 0: Mask Channel 1 as a mode button + 1: Mask Channel 2 as a mode button + 2: Mask Channel 3 as a mode button + 3: Mask Channel 4 as a mode button + 4: Mask Channel 5 as a mode button + 5: Mask Channel 6 as a mode button + 6: Mask Channel 7 as a mode button + 7: Mask Channel 8 as a mode button + 8: Mask Channel 9 as a mode button + 9: Mask Channel 10 as a mode button + 10: Mask Channel 11 as a mode button + 11: Mask Channel 12 as a mode button + 12: Mask Channel 13 as a mode button + 13: Mask Channel 14 as a mode button + 14: Mask Channel 15 as a mode button + 15: Mask Channel 16 as a mode button + 16: Mask Channel 17 as a mode button + 17: Mask Channel 18 as a mode button + default: 0 + min: 0 + max: 258048 + RC_MAP_PAY_SW: + description: + short: Payload Power Switch RC channel + type: enum + values: + 0: Unassigned + 1: Channel 1 + 2: Channel 2 + 3: Channel 3 + 4: Channel 4 + 5: Channel 5 + 6: Channel 6 + 7: Channel 7 + 8: Channel 8 + 9: Channel 9 + 10: Channel 10 + 11: Channel 11 + 12: Channel 12 + 13: Channel 13 + 14: Channel 14 + 15: Channel 15 + 16: Channel 16 + 17: Channel 17 + 18: Channel 18 + default: 0 + min: 0 + max: 18 + RC_RETURN_TH: + description: + short: Threshold for selecting return to launch mode + long: |- + 0-1 indicate where in the full channel range the threshold sits + 0 : min + 1 : max + sign indicates polarity of comparison + positive : true when channel>th + negative : true when channelth + negative : true when channelth + negative : true when channelth + negative : true when channelth + negative : true when channelth + negative : true when channelth + negative : true when channelth + negative : true when channelth + negative : true when channelth + negative : true when channelorb_meta = orb_meta; subscription->multi_id = multi_id; subscription->compat = compat; @@ -1259,7 +1265,7 @@ The module is typically used together with uORB publisher rules, to specify whic The replay module will just publish all messages that are found in the log. It also applies the parameters from the log. -The replay procedure is documented on the [System-wide Replay](https://docs.px4.io/main/en/debug/system_wide_replay.html) +The replay procedure is documented on the [System-wide Replay](../debug/system_wide_replay.md) page. )DESCR_STR"); diff --git a/src/modules/replay/ReplayEkf2.cpp b/src/modules/replay/ReplayEkf2.cpp index fd334c24e8..0e009aee04 100644 --- a/src/modules/replay/ReplayEkf2.cpp +++ b/src/modules/replay/ReplayEkf2.cpp @@ -53,6 +53,7 @@ #include #include #include +#include #include #include @@ -138,6 +139,9 @@ ReplayEkf2::onSubscriptionAdded(Subscription &sub, uint16_t msg_id) } else if (sub.orb_meta == ORB_ID(vehicle_global_position_groundtruth)) { _vehicle_global_position_groundtruth_msg_id = msg_id; + } else if (sub.orb_meta == ORB_ID(ranging_beacon)) { + _ranging_beacon_msg_id = msg_id; + } else if (sub.orb_meta == ORB_ID(ekf2_timestamps)) { _ekf2_timestamps_exists = true; } @@ -160,6 +164,7 @@ ReplayEkf2::publishEkf2Topics(sensor_combined_s &sensor_combined, std::ifstream findTimestampAndPublish(sensor_combined.timestamp, _vehicle_magnetometer_msg_id, replay_file); findTimestampAndPublish(sensor_combined.timestamp, _vehicle_visual_odometry_msg_id, replay_file); findTimestampAndPublish(sensor_combined.timestamp, _aux_global_position_msg_id, replay_file); + findTimestampAndPublish(sensor_combined.timestamp, _ranging_beacon_msg_id, replay_file); // sensor_combined: publish last because ekf2 is polling on this if (_last_sensor_combined_timestamp > 0) { @@ -195,6 +200,7 @@ ReplayEkf2::publishEkf2Topics(const ekf2_timestamps_s &ekf2_timestamps, std::ifs handle_sensor_publication(ekf2_timestamps.vehicle_magnetometer_timestamp_rel, _vehicle_magnetometer_msg_id); handle_sensor_publication(ekf2_timestamps.visual_odometry_timestamp_rel, _vehicle_visual_odometry_msg_id); handle_sensor_publication(0, _aux_global_position_msg_id); + handle_sensor_publication(0, _ranging_beacon_msg_id); handle_sensor_publication(0, _vehicle_local_position_groundtruth_msg_id); handle_sensor_publication(0, _vehicle_global_position_groundtruth_msg_id); handle_sensor_publication(0, _vehicle_attitude_groundtruth_msg_id); @@ -291,6 +297,7 @@ ReplayEkf2::onExitMainLoop() print_sensor_statistics(_vehicle_magnetometer_msg_id, "vehicle_magnetometer"); print_sensor_statistics(_vehicle_visual_odometry_msg_id, "vehicle_visual_odometry"); print_sensor_statistics(_aux_global_position_msg_id, "aux_global_position"); + print_sensor_statistics(_ranging_beacon_msg_id, "ranging_beacon"); } } // namespace px4 diff --git a/src/modules/replay/ReplayEkf2.hpp b/src/modules/replay/ReplayEkf2.hpp index bbf478c73e..77ba3d8e8c 100644 --- a/src/modules/replay/ReplayEkf2.hpp +++ b/src/modules/replay/ReplayEkf2.hpp @@ -95,6 +95,7 @@ private: uint16_t _vehicle_magnetometer_msg_id = msg_id_invalid; uint16_t _vehicle_visual_odometry_msg_id = msg_id_invalid; uint16_t _aux_global_position_msg_id = msg_id_invalid; + uint16_t _ranging_beacon_msg_id = msg_id_invalid; uint16_t _vehicle_local_position_groundtruth_msg_id = msg_id_invalid; uint16_t _vehicle_global_position_groundtruth_msg_id = msg_id_invalid; uint16_t _vehicle_attitude_groundtruth_msg_id = msg_id_invalid; diff --git a/src/modules/sensors/CMakeLists.txt b/src/modules/sensors/CMakeLists.txt index 1f84dec4db..c3af14db9f 100644 --- a/src/modules/sensors/CMakeLists.txt +++ b/src/modules/sensors/CMakeLists.txt @@ -73,6 +73,10 @@ px4_add_module( Integrator.hpp MODULE_CONFIG module.yaml + vehicle_gps_position/module.yaml + sensor_params.yaml + sensor_params_flow.yaml + sensor_params_mag.yaml DEPENDS conversion data_validator diff --git a/src/modules/sensors/data_validator/DataValidatorGroup.cpp b/src/modules/sensors/data_validator/DataValidatorGroup.cpp index eabf61788c..d908a1622b 100644 --- a/src/modules/sensors/data_validator/DataValidatorGroup.cpp +++ b/src/modules/sensors/data_validator/DataValidatorGroup.cpp @@ -54,6 +54,11 @@ DataValidatorGroup::DataValidatorGroup(unsigned siblings) for (unsigned i = 0; i < siblings; i++) { next = new DataValidator(); + if (next == nullptr) { + PX4_ERR("alloc failed"); + break; + } + if (i == 0) { _first = next; @@ -64,7 +69,7 @@ DataValidatorGroup::DataValidatorGroup(unsigned siblings) prev = next; } - _last = next; + _last = prev; if (_first) { _timeout_interval_us = _first->get_timeout(); @@ -89,8 +94,14 @@ DataValidator *DataValidatorGroup::add_new_validator() return nullptr; } - _last->setSibling(validator); - _last = validator; + if (_last) { + _last->setSibling(validator); + _last = validator; + + } else { + _first = _last = validator; + } + _last->set_timeout(_timeout_interval_us); return _last; } diff --git a/src/modules/sensors/sensor_params.c b/src/modules/sensors/sensor_params.c deleted file mode 100644 index a69f2a79de..0000000000 --- a/src/modules/sensors/sensor_params.c +++ /dev/null @@ -1,258 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2012-2019 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Airspeed sensor compensation model for the SDP3x - * - * Model with Pitot - * CAL_AIR_TUBED_MM: Not used, 1.5 mm tubes assumed. - * CAL_AIR_TUBELEN: Length of the tubes connecting the pitot to the sensor. - * Model without Pitot (1.5 mm tubes) - * CAL_AIR_TUBED_MM: Not used, 1.5 mm tubes assumed. - * CAL_AIR_TUBELEN: Length of the tubes connecting the pitot to the sensor. - * Tube Pressure Drop - * CAL_AIR_TUBED_MM: Diameter in mm of the pitot and tubes, must have the same diameter. - * CAL_AIR_TUBELEN: Length of the tubes connecting the pitot to the sensor and the static + dynamic port length of the pitot. - * - * @value 0 Model with Pitot - * @value 1 Model without Pitot (1.5 mm tubes) - * @value 2 Tube Pressure Drop - * - * @group Sensors - */ -PARAM_DEFINE_INT32(CAL_AIR_CMODEL, 0); - -/** - * Airspeed sensor tube length. - * - * See the CAL_AIR_CMODEL explanation on how this parameter should be set. - * - * @min 0.01 - * @max 2.00 - * @unit m - * - * @group Sensors - */ -PARAM_DEFINE_FLOAT(CAL_AIR_TUBELEN, 0.2f); - -/** - * Airspeed sensor tube diameter. Only used for the Tube Pressure Drop Compensation. - * - * @min 1.5 - * @max 100 - * @unit mm - * - * @group Sensors - */ -PARAM_DEFINE_FLOAT(CAL_AIR_TUBED_MM, 1.5f); - -/** - * Differential pressure sensor offset - * - * The offset (zero-reading) in Pascal - * - * @category system - * @group Sensor Calibration - * @volatile - */ -PARAM_DEFINE_FLOAT(SENS_DPRES_OFF, 0.0f); - -/** - * Reverse differential pressure sensor readings - * - * Reverse the raw measurements of all differential pressure sensors. - * This can be enabled if the sensors have static and dynamic ports swapped. - * - * @category system - * @group Sensor Calibration - * @boolean - */ -PARAM_DEFINE_INT32(SENS_DPRES_REV, 0); - -/** - * Differential pressure sensor analog scaling - * - * Pick the appropriate scaling from the datasheet. - * this number defines the (linear) conversion from voltage - * to Pascal (pa). For the MPXV7002DP this is 1000. - * - * NOTE: If the sensor always registers zero, try switching - * the static and dynamic tubes. - * - * @group Sensor Calibration - */ -PARAM_DEFINE_FLOAT(SENS_DPRES_ANSC, 0); - -/** - * Board rotation - * - * This parameter defines the rotation of the FMU board relative to the platform. - * - * @value 0 No rotation - * @value 1 Yaw 45° - * @value 2 Yaw 90° - * @value 3 Yaw 135° - * @value 4 Yaw 180° - * @value 5 Yaw 225° - * @value 6 Yaw 270° - * @value 7 Yaw 315° - * @value 8 Roll 180° - * @value 9 Roll 180°, Yaw 45° - * @value 10 Roll 180°, Yaw 90° - * @value 11 Roll 180°, Yaw 135° - * @value 12 Pitch 180° - * @value 13 Roll 180°, Yaw 225° - * @value 14 Roll 180°, Yaw 270° - * @value 15 Roll 180°, Yaw 315° - * @value 16 Roll 90° - * @value 17 Roll 90°, Yaw 45° - * @value 18 Roll 90°, Yaw 90° - * @value 19 Roll 90°, Yaw 135° - * @value 20 Roll 270° - * @value 21 Roll 270°, Yaw 45° - * @value 22 Roll 270°, Yaw 90° - * @value 23 Roll 270°, Yaw 135° - * @value 24 Pitch 90° - * @value 25 Pitch 270° - * @value 26 Pitch 180°, Yaw 90° - * @value 27 Pitch 180°, Yaw 270° - * @value 28 Roll 90°, Pitch 90° - * @value 29 Roll 180°, Pitch 90° - * @value 30 Roll 270°, Pitch 90° - * @value 31 Roll 90°, Pitch 180° - * @value 32 Roll 270°, Pitch 180° - * @value 33 Roll 90°, Pitch 270° - * @value 34 Roll 180°, Pitch 270° - * @value 35 Roll 270°, Pitch 270° - * @value 36 Roll 90°, Pitch 180°, Yaw 90° - * @value 37 Roll 90°, Yaw 270° - * @value 38 Roll 90°, Pitch 68°, Yaw 293° - * @value 39 Pitch 315° - * @value 40 Roll 90°, Pitch 315° - * - * @min -1 - * @max 40 - * @reboot_required true - * @group Sensors - */ -PARAM_DEFINE_INT32(SENS_BOARD_ROT, 0); - -/** - * Board rotation Y (pitch) offset - * - * Rotation from flight controller board to vehicle body frame. - * This parameter gets set during the "level horizon" calibration or can be - * set manually. - * - * @min -45.0 - * @max 45.0 - * @decimal 1 - * @unit deg - * @group Sensors - */ -PARAM_DEFINE_FLOAT(SENS_BOARD_Y_OFF, 0.0f); - -/** - * Board rotation X (roll) offset - * - * Rotation from flight controller board to vehicle body frame. - * This parameter gets set during the "level horizon" calibration or can be - * set manually. - * - * @unit deg - * @min -45.0 - * @max 45.0 - * @decimal 1 - * @group Sensors - */ -PARAM_DEFINE_FLOAT(SENS_BOARD_X_OFF, 0.0f); - -/** - * Board rotation Z (yaw) offset - * - * Rotation from flight controller board to vehicle body frame. - * Has to be set manually (not set by any calibration). - * - * @min -45.0 - * @max 45.0 - * @decimal 1 - * @unit deg - * @group Sensors - */ -PARAM_DEFINE_FLOAT(SENS_BOARD_Z_OFF, 0.0f); - -/** - * Thermal control of sensor temperature - * - * @value -1 Thermal control unavailable - * @value 0 Thermal control off - * @value 1 Thermal control enabled - * @category system - * @group Sensors - */ -PARAM_DEFINE_INT32(SENS_EN_THERMAL, -1); - -/** - * External I2C probe. - * - * Probe for optional external I2C devices. - * - * @boolean - * @category system - * @group Sensors - */ -PARAM_DEFINE_INT32(SENS_EXT_I2C_PRB, 1); - -/** - * Sensors hub IMU mode - * - * @value 0 Disabled - * @value 1 Publish primary IMU selection - * - * @category system - * @reboot_required true - * @group Sensors - */ -PARAM_DEFINE_INT32(SENS_IMU_MODE, 1); - -/** - * Enable internal barometers - * - * For systems with an external barometer, this should be set to false to make sure that the external is used. - * - * @boolean - * @reboot_required true - * @category system - * @group Sensors - */ -PARAM_DEFINE_INT32(SENS_INT_BARO_EN, 1); diff --git a/src/modules/sensors/sensor_params.yaml b/src/modules/sensors/sensor_params.yaml new file mode 100644 index 0000000000..cf8a3d7b6e --- /dev/null +++ b/src/modules/sensors/sensor_params.yaml @@ -0,0 +1,199 @@ +module_name: sensors +parameters: +- group: Sensor Calibration + definitions: + SENS_DPRES_OFF: + description: + short: Differential pressure sensor offset + long: The offset (zero-reading) in Pascal + category: System + type: float + default: 0.0 + volatile: true + SENS_DPRES_REV: + description: + short: Reverse differential pressure sensor readings + long: |- + Reverse the raw measurements of all differential pressure sensors. + This can be enabled if the sensors have static and dynamic ports swapped. + category: System + type: boolean + default: 0 + SENS_DPRES_ANSC: + description: + short: Differential pressure sensor analog scaling + long: |- + Pick the appropriate scaling from the datasheet. + this number defines the (linear) conversion from voltage + to Pascal (pa). For the MPXV7002DP this is 1000. + + NOTE: If the sensor always registers zero, try switching + the static and dynamic tubes. + type: float + default: 0 +- group: Sensors + definitions: + CAL_AIR_CMODEL: + description: + short: Airspeed sensor compensation model for the SDP3x + long: |- + Model with Pitot + CAL_AIR_TUBED_MM: Not used, 1.5 mm tubes assumed. + CAL_AIR_TUBELEN: Length of the tubes connecting the pitot to the sensor. + Model without Pitot (1.5 mm tubes) + CAL_AIR_TUBED_MM: Not used, 1.5 mm tubes assumed. + CAL_AIR_TUBELEN: Length of the tubes connecting the pitot to the sensor. + Tube Pressure Drop + CAL_AIR_TUBED_MM: Diameter in mm of the pitot and tubes, must have the same diameter. + CAL_AIR_TUBELEN: Length of the tubes connecting the pitot to the sensor and the static + dynamic port length of the pitot. + type: enum + values: + 0: Model with Pitot + 1: Model without Pitot (1.5 mm tubes) + 2: Tube Pressure Drop + default: 0 + CAL_AIR_TUBELEN: + description: + short: Airspeed sensor tube length + long: See the CAL_AIR_CMODEL explanation on how this parameter should be set. + type: float + default: 0.2 + min: 0.01 + max: 2.0 + unit: m + CAL_AIR_TUBED_MM: + description: + short: Airspeed sensor tube diameter + long: Airspeed sensor tube diameter. Only used for the Tube Pressure Drop + Compensation + type: float + default: 1.5 + min: 1.5 + max: 100 + unit: mm + SENS_BOARD_ROT: + description: + short: Board rotation + long: This parameter defines the rotation of the FMU board relative to the + platform. + type: enum + values: + 0: No rotation + 1: "Yaw 45\xB0" + 2: "Yaw 90\xB0" + 3: "Yaw 135\xB0" + 4: "Yaw 180\xB0" + 5: "Yaw 225\xB0" + 6: "Yaw 270\xB0" + 7: "Yaw 315\xB0" + 8: "Roll 180\xB0" + 9: "Roll 180\xB0, Yaw 45\xB0" + 10: "Roll 180\xB0, Yaw 90\xB0" + 11: "Roll 180\xB0, Yaw 135\xB0" + 12: "Pitch 180\xB0" + 13: "Roll 180\xB0, Yaw 225\xB0" + 14: "Roll 180\xB0, Yaw 270\xB0" + 15: "Roll 180\xB0, Yaw 315\xB0" + 16: "Roll 90\xB0" + 17: "Roll 90\xB0, Yaw 45\xB0" + 18: "Roll 90\xB0, Yaw 90\xB0" + 19: "Roll 90\xB0, Yaw 135\xB0" + 20: "Roll 270\xB0" + 21: "Roll 270\xB0, Yaw 45\xB0" + 22: "Roll 270\xB0, Yaw 90\xB0" + 23: "Roll 270\xB0, Yaw 135\xB0" + 24: "Pitch 90\xB0" + 25: "Pitch 270\xB0" + 26: "Pitch 180\xB0, Yaw 90\xB0" + 27: "Pitch 180\xB0, Yaw 270\xB0" + 28: "Roll 90\xB0, Pitch 90\xB0" + 29: "Roll 180\xB0, Pitch 90\xB0" + 30: "Roll 270\xB0, Pitch 90\xB0" + 31: "Roll 90\xB0, Pitch 180\xB0" + 32: "Roll 270\xB0, Pitch 180\xB0" + 33: "Roll 90\xB0, Pitch 270\xB0" + 34: "Roll 180\xB0, Pitch 270\xB0" + 35: "Roll 270\xB0, Pitch 270\xB0" + 36: "Roll 90\xB0, Pitch 180\xB0, Yaw 90\xB0" + 37: "Roll 90\xB0, Yaw 270\xB0" + 38: "Roll 90\xB0, Pitch 68\xB0, Yaw 293\xB0" + 39: "Pitch 315\xB0" + 40: "Roll 90\xB0, Pitch 315\xB0" + default: 0 + min: -1 + max: 40 + reboot_required: true + SENS_BOARD_Y_OFF: + description: + short: Board rotation Y (pitch) offset + long: |- + Rotation from flight controller board to vehicle body frame. + This parameter gets set during the "level horizon" calibration or can be + set manually. + type: float + default: 0.0 + min: -45.0 + max: 45.0 + decimal: 1 + unit: deg + SENS_BOARD_X_OFF: + description: + short: Board rotation X (roll) offset + long: |- + Rotation from flight controller board to vehicle body frame. + This parameter gets set during the "level horizon" calibration or can be + set manually. + type: float + default: 0.0 + unit: deg + min: -45.0 + max: 45.0 + decimal: 1 + SENS_BOARD_Z_OFF: + description: + short: Board rotation Z (yaw) offset + long: |- + Rotation from flight controller board to vehicle body frame. + Has to be set manually (not set by any calibration). + type: float + default: 0.0 + min: -45.0 + max: 45.0 + decimal: 1 + unit: deg + SENS_EN_THERMAL: + description: + short: Thermal control of sensor temperature + category: System + type: enum + values: + -1: Thermal control unavailable + 0: Thermal control off + 1: Thermal control enabled + default: -1 + SENS_EXT_I2C_PRB: + description: + short: External I2C probe + long: Probe for optional external I2C devices. + category: System + type: boolean + default: 1 + SENS_IMU_MODE: + description: + short: Sensors hub IMU mode + category: System + type: enum + values: + 0: Disabled + 1: Publish primary IMU selection + default: 1 + reboot_required: true + SENS_INT_BARO_EN: + description: + short: Enable internal barometers + long: For systems with an external barometer, this should be set to false + to make sure that the external is used. + category: System + type: boolean + default: 1 + reboot_required: true diff --git a/src/modules/sensors/sensor_params_flow.c b/src/modules/sensors/sensor_params_flow.c deleted file mode 100644 index 1082582746..0000000000 --- a/src/modules/sensors/sensor_params_flow.c +++ /dev/null @@ -1,123 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2012-2022 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Optical flow rotation - * - * This parameter defines the yaw rotation of the optical flow relative to the vehicle body frame. - * Zero rotation is defined as X on flow board pointing towards front of vehicle. - * - * @value 0 No rotation - * @value 1 Yaw 45° - * @value 2 Yaw 90° - * @value 3 Yaw 135° - * @value 4 Yaw 180° - * @value 5 Yaw 225° - * @value 6 Yaw 270° - * @value 7 Yaw 315° - * - * @group Sensors - */ -PARAM_DEFINE_INT32(SENS_FLOW_ROT, 0); - -/** - * Minimum height above ground when reliant on optical flow. - * - * This parameter defines the minimum distance from ground at which the optical flow sensor operates reliably. - * The sensor may be usable below this height, but accuracy will progressively reduce to loss of focus. - * - * @unit m - * @min 0.0 - * @max 1.0 - * @increment 0.1 - * @decimal 2 - * @group Sensor Calibration - */ -PARAM_DEFINE_FLOAT(SENS_FLOW_MINHGT, 0.08f); - -/** - * Maximum height above ground when reliant on optical flow. - * - * This parameter defines the maximum distance from ground at which the optical flow sensor operates reliably. - * The height setpoint will be limited to be no greater than this value when the navigation system - * is completely reliant on optical flow data and the height above ground estimate is valid. - * The sensor may be usable above this height, but accuracy will progressively degrade. - * - * @unit m - * @min 1.0 - * @max 100.0 - * @increment 0.1 - * @decimal 2 - * @group Sensor Calibration - */ -PARAM_DEFINE_FLOAT(SENS_FLOW_MAXHGT, 100.f); - -/** - * Magnitude of maximum angular flow rate reliably measurable by the optical flow sensor. - * - * Optical flow data will not fused by the estimators if the magnitude of the flow rate exceeds this value and - * control loops will be instructed to limit ground speed such that the flow rate produced by movement over ground - * is less than 50% of this value. - * - * @unit rad/s - * @min 1.0 - * @decimal 2 - * @group Sensor Calibration - */ -PARAM_DEFINE_FLOAT(SENS_FLOW_MAXR, 8.f); - -/** - * Optical flow max rate. - * - * Optical flow data maximum publication rate. This is an upper bound, - * actual optical flow data rate is still dependent on the sensor. - * - * @min 1 - * @max 200 - * @group Sensors - * @unit Hz - * - * @reboot_required true - * - */ -PARAM_DEFINE_FLOAT(SENS_FLOW_RATE, 70.0f); - -/** - * Optical flow scale factor - * - * @min 0.5 - * @max 1.5 - * @decimal 2 - * @group Sensors - */ -PARAM_DEFINE_FLOAT(SENS_FLOW_SCALE, 1.f); diff --git a/src/modules/sensors/sensor_params_flow.yaml b/src/modules/sensors/sensor_params_flow.yaml new file mode 100644 index 0000000000..e9ebbbf141 --- /dev/null +++ b/src/modules/sensors/sensor_params_flow.yaml @@ -0,0 +1,85 @@ +module_name: sensors +parameters: +- group: Sensor Calibration + definitions: + SENS_FLOW_MINHGT: + description: + short: Minimum height above ground when reliant on optical flow + long: |- + This parameter defines the minimum distance from ground at which the optical flow sensor operates reliably. + The sensor may be usable below this height, but accuracy will progressively reduce to loss of focus. + type: float + default: 0.08 + unit: m + min: 0.0 + max: 1.0 + increment: 0.1 + decimal: 2 + SENS_FLOW_MAXHGT: + description: + short: Maximum height above ground when reliant on optical flow + long: |- + This parameter defines the maximum distance from ground at which the optical flow sensor operates reliably. + The height setpoint will be limited to be no greater than this value when the navigation system + is completely reliant on optical flow data and the height above ground estimate is valid. + The sensor may be usable above this height, but accuracy will progressively degrade. + type: float + default: 100.0 + unit: m + min: 1.0 + max: 100.0 + increment: 0.1 + decimal: 2 + SENS_FLOW_MAXR: + description: + short: Max angular flow rate measurable by sensor + long: |- + Magnitude of maximum angular flow rate reliably measurable by the optical flow sensor + + Optical flow data will not fused by the estimators if the magnitude of the flow rate exceeds this value and + control loops will be instructed to limit ground speed such that the flow rate produced by movement over ground + is less than 50% of this value. + type: float + default: 8.0 + unit: rad/s + min: 1.0 + decimal: 2 +- group: Sensors + definitions: + SENS_FLOW_ROT: + description: + short: Optical flow rotation + long: |- + This parameter defines the yaw rotation of the optical flow relative to the vehicle body frame. + Zero rotation is defined as X on flow board pointing towards front of vehicle. + type: enum + values: + 0: No rotation + 1: "Yaw 45\xB0" + 2: "Yaw 90\xB0" + 3: "Yaw 135\xB0" + 4: "Yaw 180\xB0" + 5: "Yaw 225\xB0" + 6: "Yaw 270\xB0" + 7: "Yaw 315\xB0" + default: 0 + SENS_FLOW_RATE: + description: + short: Optical flow max rate + long: |- + Optical flow data maximum publication rate. This is an upper bound, + actual optical flow data rate is still dependent on the sensor. + type: float + default: 70.0 + min: 1 + max: 200 + unit: Hz + reboot_required: true + SENS_FLOW_SCALE: + description: + short: Optical flow scale factor + type: float + default: 1.0 + min: 0.5 + max: 1.5 + decimal: 2 diff --git a/src/modules/sensors/sensor_params_mag.c b/src/modules/sensors/sensor_params_mag.c deleted file mode 100644 index 9ea33c765c..0000000000 --- a/src/modules/sensors/sensor_params_mag.c +++ /dev/null @@ -1,129 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2012-2020 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Bitfield selecting mag sides for calibration - * - * If set to two side calibration, only the offsets are estimated, the scale - * calibration is left unchanged. Thus an initial six side calibration is - * recommended. - * - * Bits: - * ORIENTATION_TAIL_DOWN = 1 - * ORIENTATION_NOSE_DOWN = 2 - * ORIENTATION_LEFT = 4 - * ORIENTATION_RIGHT = 8 - * ORIENTATION_UPSIDE_DOWN = 16 - * ORIENTATION_RIGHTSIDE_UP = 32 - * - * @min 34 - * @max 63 - * @value 34 Two side calibration - * @value 38 Three side calibration - * @value 63 Six side calibration - * @group Sensors - */ -PARAM_DEFINE_INT32(SENS_MAG_SIDES, 63); - -/** - * For legacy QGC support only - * - * Use SENS_MAG_SIDES instead - * - * @group Sensors - * @category Developer - */ -PARAM_DEFINE_INT32(CAL_MAG_SIDES, 63); - -/** - * Type of magnetometer compensation - * - * @value 0 Disabled - * @value 1 Throttle-based compensation - * @value 2 Current-based compensation (battery_status instance 0) - * @value 3 Current-based compensation (battery_status instance 1) - * - * @category system - * @group Sensor Calibration - */ -PARAM_DEFINE_INT32(CAL_MAG_COMP_TYP, 0); - -/** - * Automatically set external rotations. - * - * During calibration attempt to automatically determine the rotation of external magnetometers. - * - * @boolean - * @group Sensors - */ -PARAM_DEFINE_INT32(SENS_MAG_AUTOROT, 1); - -/** - * Magnetometer max rate. - * - * Magnetometer data maximum publication rate. This is an upper bound, - * actual magnetometer data rate is still dependent on the sensor. - * - * @min 1 - * @max 200 - * @group Sensors - * @unit Hz - * - * @reboot_required true - * - */ -PARAM_DEFINE_FLOAT(SENS_MAG_RATE, 15.0f); - -/** - * Sensors hub mag mode - * - * @value 0 Publish all magnetometers - * @value 1 Publish primary magnetometer - * - * @category system - * @reboot_required true - * @group Sensors - */ -PARAM_DEFINE_INT32(SENS_MAG_MODE, 1); - -/** - * Magnetometer auto calibration - * - * Automatically initialize magnetometer calibration from bias estimate if available. - * - * @boolean - * - * @category system - * @group Sensors - */ -PARAM_DEFINE_INT32(SENS_MAG_AUTOCAL, 1); diff --git a/src/modules/sensors/sensor_params_mag.yaml b/src/modules/sensors/sensor_params_mag.yaml new file mode 100644 index 0000000000..e5bbdf8d2d --- /dev/null +++ b/src/modules/sensors/sensor_params_mag.yaml @@ -0,0 +1,84 @@ +module_name: sensors +parameters: +- group: Sensor Calibration + definitions: + CAL_MAG_COMP_TYP: + description: + short: Type of magnetometer compensation + category: System + type: enum + values: + 0: Disabled + 1: Throttle-based compensation + 2: Current-based compensation (battery_status instance 0) + 3: Current-based compensation (battery_status instance 1) + default: 0 +- group: Sensors + definitions: + SENS_MAG_SIDES: + description: + short: Bitfield selecting mag sides for calibration + long: |- + If set to two side calibration, only the offsets are estimated, the scale + calibration is left unchanged. Thus an initial six side calibration is + recommended. + + Bits: + ORIENTATION_TAIL_DOWN = 1 + ORIENTATION_NOSE_DOWN = 2 + ORIENTATION_LEFT = 4 + ORIENTATION_RIGHT = 8 + ORIENTATION_UPSIDE_DOWN = 16 + ORIENTATION_RIGHTSIDE_UP = 32 + type: enum + values: + 34: Two side calibration + 38: Three side calibration + 63: Six side calibration + default: 63 + min: 34 + max: 63 + CAL_MAG_SIDES: + description: + short: For legacy QGC support only + long: Use SENS_MAG_SIDES instead + category: Developer + type: int32 + default: 63 + SENS_MAG_AUTOROT: + description: + short: Automatically set external rotations + long: During calibration attempt to automatically determine the rotation of + external magnetometers. + type: boolean + default: 1 + SENS_MAG_RATE: + description: + short: Magnetometer max rate + long: |- + Magnetometer data maximum publication rate. This is an upper bound, + actual magnetometer data rate is still dependent on the sensor. + type: float + default: 15.0 + min: 1 + max: 200 + unit: Hz + reboot_required: true + SENS_MAG_MODE: + description: + short: Sensors hub mag mode + category: System + type: enum + values: + 0: Publish all magnetometers + 1: Publish primary magnetometer + default: 1 + reboot_required: true + SENS_MAG_AUTOCAL: + description: + short: Magnetometer auto calibration + long: Automatically initialize magnetometer calibration from bias estimate + if available. + category: System + type: boolean + default: 1 diff --git a/src/modules/sensors/vehicle_acceleration/CMakeLists.txt b/src/modules/sensors/vehicle_acceleration/CMakeLists.txt index 37f3558992..002cc020ae 100644 --- a/src/modules/sensors/vehicle_acceleration/CMakeLists.txt +++ b/src/modules/sensors/vehicle_acceleration/CMakeLists.txt @@ -35,6 +35,7 @@ px4_add_library(vehicle_acceleration VehicleAcceleration.cpp VehicleAcceleration.hpp ) +set_property(GLOBAL APPEND PROPERTY PX4_MODULE_CONFIG_FILES ${CMAKE_CURRENT_SOURCE_DIR}/imu_accel_parameters.yaml) target_compile_options(vehicle_acceleration PRIVATE ${MAX_CUSTOM_OPT_LEVEL}) diff --git a/src/modules/sensors/vehicle_acceleration/imu_accel_parameters.c b/src/modules/sensors/vehicle_acceleration/imu_accel_parameters.c deleted file mode 100644 index c4fda14b94..0000000000 --- a/src/modules/sensors/vehicle_acceleration/imu_accel_parameters.c +++ /dev/null @@ -1,46 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2020 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** -* Low pass filter cutoff frequency for accel -* -* The cutoff frequency for the 2nd order butterworth filter on the primary accelerometer. -* This only affects the signal sent to the controllers, not the estimators. 0 disables the filter. -* -* @min 0 -* @max 1000 -* @unit Hz -* @reboot_required true -* @group Sensors -*/ -PARAM_DEFINE_FLOAT(IMU_ACCEL_CUTOFF, 30.0f); diff --git a/src/modules/sensors/vehicle_acceleration/imu_accel_parameters.yaml b/src/modules/sensors/vehicle_acceleration/imu_accel_parameters.yaml new file mode 100644 index 0000000000..6655f2a680 --- /dev/null +++ b/src/modules/sensors/vehicle_acceleration/imu_accel_parameters.yaml @@ -0,0 +1,16 @@ +module_name: vehicle_acceleration +parameters: +- group: Sensors + definitions: + IMU_ACCEL_CUTOFF: + description: + short: Low pass filter cutoff frequency for accel + long: |- + The cutoff frequency for the 2nd order butterworth filter on the primary accelerometer. + This only affects the signal sent to the controllers, not the estimators. 0 disables the filter. + type: float + default: 30.0 + min: 0 + max: 1000 + unit: Hz + reboot_required: true diff --git a/src/modules/sensors/vehicle_air_data/CMakeLists.txt b/src/modules/sensors/vehicle_air_data/CMakeLists.txt index 909f249a7c..5981e4a370 100644 --- a/src/modules/sensors/vehicle_air_data/CMakeLists.txt +++ b/src/modules/sensors/vehicle_air_data/CMakeLists.txt @@ -35,6 +35,7 @@ px4_add_library(vehicle_air_data VehicleAirData.cpp VehicleAirData.hpp ) +set_property(GLOBAL APPEND PROPERTY PX4_MODULE_CONFIG_FILES ${CMAKE_CURRENT_SOURCE_DIR}/params.yaml) target_link_libraries(vehicle_air_data PRIVATE data_validator diff --git a/src/modules/sensors/vehicle_air_data/VehicleAirData.cpp b/src/modules/sensors/vehicle_air_data/VehicleAirData.cpp index 916f4802d5..13c17b197d 100644 --- a/src/modules/sensors/vehicle_air_data/VehicleAirData.cpp +++ b/src/modules/sensors/vehicle_air_data/VehicleAirData.cpp @@ -254,11 +254,15 @@ void VehicleAirData::Run() } } - if (!_relative_calibration_done) { - _relative_calibration_done = UpdateRelativeCalibrations(time_now_us); + estimator_status_flags_s latest_estimator_status_flags; - } else if (!_baro_gnss_calibration_done && _param_sens_baro_autocal.get()) { - _baro_gnss_calibration_done = BaroGNSSAltitudeOffset(); + if (_estimator_status_flags_sub.copy(&latest_estimator_status_flags) && !latest_estimator_status_flags.cs_in_air) { + if (!_relative_calibration_done) { + _relative_calibration_done = UpdateRelativeCalibrations(time_now_us); + + } else if (!_baro_gnss_calibration_done && _param_sens_baro_autocal.get() && latest_estimator_status_flags.cs_gps_hgt) { + _baro_gnss_calibration_done = BaroGNSSAltitudeOffset(); + } } // Publish @@ -270,7 +274,7 @@ void VehicleAirData::Run() const hrt_abstime timestamp_sample = _timestamp_sample_sum[instance] / _data_sum_count[instance]; - if (time_now_us >= _last_publication_timestamp[instance] + interval_us) { + if (timestamp_sample >= _last_publication_timestamp[instance] + interval_us) { bool publish = (time_now_us <= timestamp_sample + 1_s); @@ -308,7 +312,12 @@ void VehicleAirData::Run() _vehicle_air_data_pub.publish(out); } - _last_publication_timestamp[instance] = time_now_us; + // epoch-advance to prevent aliasing; catch up if more than one interval behind + _last_publication_timestamp[instance] += interval_us; + + if (timestamp_sample > _last_publication_timestamp[instance] + interval_us) { + _last_publication_timestamp[instance] = timestamp_sample; + } // reset _timestamp_sample_sum[instance] = 0; diff --git a/src/modules/sensors/vehicle_air_data/params.c b/src/modules/sensors/vehicle_air_data/params.c deleted file mode 100644 index ee9cf9fa93..0000000000 --- a/src/modules/sensors/vehicle_air_data/params.c +++ /dev/null @@ -1,67 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2012-2022 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * QNH for barometer - * - * @min 500 - * @max 1500 - * @group Sensors - * @unit hPa - */ -PARAM_DEFINE_FLOAT(SENS_BARO_QNH, 1013.25f); - -/** - * Baro max rate. - * - * Barometric air data maximum publication rate. This is an upper bound, - * actual barometric data rate is still dependent on the sensor. - * - * @min 1 - * @max 200 - * @group Sensors - * @unit Hz - */ -PARAM_DEFINE_FLOAT(SENS_BARO_RATE, 20.0f); - -/** - * Barometer auto calibration - * - * Automatically calibrate barometer based on the GNSS height - * - * @boolean - * - * @category system - * @group Sensors - */ -PARAM_DEFINE_INT32(SENS_BAR_AUTOCAL, 1); diff --git a/src/modules/sensors/vehicle_air_data/params.yaml b/src/modules/sensors/vehicle_air_data/params.yaml new file mode 100644 index 0000000000..bfdf106ada --- /dev/null +++ b/src/modules/sensors/vehicle_air_data/params.yaml @@ -0,0 +1,30 @@ +module_name: vehicle_air_data +parameters: +- group: Sensors + definitions: + SENS_BARO_QNH: + description: + short: QNH for barometer + type: float + default: 1013.25 + min: 500 + max: 1500 + unit: hPa + SENS_BARO_RATE: + description: + short: Baro max rate + long: |- + Barometric air data maximum publication rate. This is an upper bound, + actual barometric data rate is still dependent on the sensor. + type: float + default: 20.0 + min: 1 + max: 200 + unit: Hz + SENS_BAR_AUTOCAL: + description: + short: Barometer auto calibration + long: Automatically calibrate barometer based on the GNSS height + category: System + type: boolean + default: 1 diff --git a/src/modules/sensors/vehicle_angular_velocity/CMakeLists.txt b/src/modules/sensors/vehicle_angular_velocity/CMakeLists.txt index 8ab38d47bd..c514709043 100644 --- a/src/modules/sensors/vehicle_angular_velocity/CMakeLists.txt +++ b/src/modules/sensors/vehicle_angular_velocity/CMakeLists.txt @@ -35,6 +35,7 @@ px4_add_library(vehicle_angular_velocity VehicleAngularVelocity.cpp VehicleAngularVelocity.hpp ) +set_property(GLOBAL APPEND PROPERTY PX4_MODULE_CONFIG_FILES ${CMAKE_CURRENT_SOURCE_DIR}/imu_gyro_parameters.yaml) target_compile_options(vehicle_angular_velocity PRIVATE diff --git a/src/modules/sensors/vehicle_angular_velocity/imu_gyro_parameters.c b/src/modules/sensors/vehicle_angular_velocity/imu_gyro_parameters.c deleted file mode 100644 index 2f53e0d779..0000000000 --- a/src/modules/sensors/vehicle_angular_velocity/imu_gyro_parameters.c +++ /dev/null @@ -1,222 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2020 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** -* Notch filter frequency for gyro -* -* The center frequency for the 2nd order notch filter on the primary gyro. -* This filter can be enabled to avoid feedback amplification of structural resonances at a specific frequency. -* This only affects the signal sent to the controllers, not the estimators. -* Applies to both angular velocity and angular acceleration sent to the controllers. -* See "IMU_GYRO_NF0_BW" to set the bandwidth of the filter. -* -* A value of 0 disables the filter. -* -* @min 0 -* @max 1000 -* @unit Hz -* @increment 0.1 -* @decimal 1 -* @reboot_required false -* @group Sensors -*/ -PARAM_DEFINE_FLOAT(IMU_GYRO_NF0_FRQ, 0.0f); - -/** -* Notch filter bandwidth for gyro -* -* The frequency width of the stop band for the 2nd order notch filter on the primary gyro. -* See "IMU_GYRO_NF0_FRQ" to activate the filter and to set the notch frequency. -* Applies to both angular velocity and angular acceleration sent to the controllers. -* -* @min 0 -* @max 100 -* @unit Hz -* @increment 0.1 -* @decimal 1 -* @reboot_required false -* @group Sensors -*/ -PARAM_DEFINE_FLOAT(IMU_GYRO_NF0_BW, 20.0f); - -/** -* Notch filter 2 frequency for gyro -* -* The center frequency for the 2nd order notch filter on the primary gyro. -* This filter can be enabled to avoid feedback amplification of structural resonances at a specific frequency. -* This only affects the signal sent to the controllers, not the estimators. -* Applies to both angular velocity and angular acceleration sent to the controllers. -* See "IMU_GYRO_NF1_BW" to set the bandwidth of the filter. -* -* A value of 0 disables the filter. -* -* @min 0 -* @max 1000 -* @unit Hz -* @increment 0.1 -* @decimal 1 -* @reboot_required false -* @group Sensors -*/ -PARAM_DEFINE_FLOAT(IMU_GYRO_NF1_FRQ, 0.0f); - -/** -* Notch filter 1 bandwidth for gyro -* -* The frequency width of the stop band for the 2nd order notch filter on the primary gyro. -* See "IMU_GYRO_NF1_FRQ" to activate the filter and to set the notch frequency. -* Applies to both angular velocity and angular acceleration sent to the controllers. -* -* @min 0 -* @max 100 -* @unit Hz -* @increment 0.1 -* @decimal 1 -* @reboot_required false -* @group Sensors -*/ -PARAM_DEFINE_FLOAT(IMU_GYRO_NF1_BW, 20.0f); - - -/** -* Low pass filter cutoff frequency for gyro -* -* The cutoff frequency for the 2nd order butterworth filter on the primary gyro. -* This only affects the angular velocity sent to the controllers, not the estimators. -* It applies also to the angular acceleration (D-Term filter), see IMU_DGYRO_CUTOFF. -* -* A value of 0 disables the filter. -* -* @min 0 -* @max 1000 -* @unit Hz -* @increment 0.1 -* @decimal 1 -* @reboot_required false -* @group Sensors -*/ -PARAM_DEFINE_FLOAT(IMU_GYRO_CUTOFF, 40.0f); - -/** -* Gyro control data maximum publication rate (inner loop rate) -* -* The maximum rate the gyro control data (vehicle_angular_velocity) will be -* allowed to publish at. This is the loop rate for the rate controller and outputs. -* -* Note: sensor data is always read and filtered at the full raw rate (eg commonly 8 kHz) regardless of this setting. -* -* @min 100 -* @max 2000 -* @value 100 100 Hz -* @value 250 250 Hz -* @value 400 400 Hz -* @value 800 800 Hz -* @value 1000 1000 Hz -* @value 2000 2000 Hz -* @unit Hz -* @reboot_required true -* @group Sensors -*/ -PARAM_DEFINE_INT32(IMU_GYRO_RATEMAX, 400); - -/** -* Cutoff frequency for angular acceleration (D-Term filter) -* -* The cutoff frequency for the 2nd order butterworth filter used on -* the time derivative of the measured angular velocity, also known as -* the D-term filter in the rate controller. The D-term uses the derivative of -* the rate and thus is the most susceptible to noise. Therefore, using -* a D-term filter allows to increase IMU_GYRO_CUTOFF, which -* leads to reduced control latency and permits to increase the P gains. -* -* A value of 0 disables the filter. -* -* @min 0 -* @max 1000 -* @unit Hz -* @increment 0.1 -* @decimal 1 -* @reboot_required false -* @group Sensors -*/ -PARAM_DEFINE_FLOAT(IMU_DGYRO_CUTOFF, 20.0f); - -/** -* IMU gyro dynamic notch filtering -* -* Enable bank of dynamically updating notch filters. -* Requires ESC RPM feedback or onboard FFT (IMU_GYRO_FFT_EN). -* @group Sensors -* @min 0 -* @max 3 -* @bit 0 ESC RPM -* @bit 1 FFT -*/ -PARAM_DEFINE_INT32(IMU_GYRO_DNF_EN, 0); - -/** -* IMU gyro ESC notch filter bandwidth -* -* Bandwidth per notch filter when using dynamic notch filtering with ESC RPM. -* -* @group Sensors -* @unit Hz -* @increment 0.1 -* @decimal 1 -* @min 5 -* @max 30 -*/ -PARAM_DEFINE_FLOAT(IMU_GYRO_DNF_BW, 15.f); - -/** -* IMU gyro dynamic notch filter harmonics -* -* ESC RPM number of harmonics (multiples of RPM) for ESC RPM dynamic notch filtering. -* -* @group Sensors -* @min 1 -* @max 7 -*/ -PARAM_DEFINE_INT32(IMU_GYRO_DNF_HMC, 3); - -/** -* IMU gyro dynamic notch filter minimum frequency -* -* Minimum notch filter frequency in Hz. -* -* @group Sensors -* @unit Hz -* @increment 0.1 -* @decimal 1 -*/ -PARAM_DEFINE_FLOAT(IMU_GYRO_DNF_MIN, 25.f); diff --git a/src/modules/sensors/vehicle_angular_velocity/imu_gyro_parameters.yaml b/src/modules/sensors/vehicle_angular_velocity/imu_gyro_parameters.yaml new file mode 100644 index 0000000000..9b07202eb7 --- /dev/null +++ b/src/modules/sensors/vehicle_angular_velocity/imu_gyro_parameters.yaml @@ -0,0 +1,173 @@ +module_name: vehicle_angular_velocity +parameters: +- group: Sensors + definitions: + IMU_GYRO_NF0_FRQ: + description: + short: Notch filter frequency for gyro + long: |- + The center frequency for the 2nd order notch filter on the primary gyro. + This filter can be enabled to avoid feedback amplification of structural resonances at a specific frequency. + This only affects the signal sent to the controllers, not the estimators. + Applies to both angular velocity and angular acceleration sent to the controllers. + See "IMU_GYRO_NF0_BW" to set the bandwidth of the filter. + + A value of 0 disables the filter. + type: float + default: 0.0 + min: 0 + max: 1000 + unit: Hz + increment: 0.1 + decimal: 1 + reboot_required: false + IMU_GYRO_NF0_BW: + description: + short: Notch filter bandwidth for gyro + long: |- + The frequency width of the stop band for the 2nd order notch filter on the primary gyro. + See "IMU_GYRO_NF0_FRQ" to activate the filter and to set the notch frequency. + Applies to both angular velocity and angular acceleration sent to the controllers. + type: float + default: 20.0 + min: 0 + max: 100 + unit: Hz + increment: 0.1 + decimal: 1 + reboot_required: false + IMU_GYRO_NF1_FRQ: + description: + short: Notch filter 2 frequency for gyro + long: |- + The center frequency for the 2nd order notch filter on the primary gyro. + This filter can be enabled to avoid feedback amplification of structural resonances at a specific frequency. + This only affects the signal sent to the controllers, not the estimators. + Applies to both angular velocity and angular acceleration sent to the controllers. + See "IMU_GYRO_NF1_BW" to set the bandwidth of the filter. + + A value of 0 disables the filter. + type: float + default: 0.0 + min: 0 + max: 1000 + unit: Hz + increment: 0.1 + decimal: 1 + reboot_required: false + IMU_GYRO_NF1_BW: + description: + short: Notch filter 1 bandwidth for gyro + long: |- + The frequency width of the stop band for the 2nd order notch filter on the primary gyro. + See "IMU_GYRO_NF1_FRQ" to activate the filter and to set the notch frequency. + Applies to both angular velocity and angular acceleration sent to the controllers. + type: float + default: 20.0 + min: 0 + max: 100 + unit: Hz + increment: 0.1 + decimal: 1 + reboot_required: false + IMU_GYRO_CUTOFF: + description: + short: Low pass filter cutoff frequency for gyro + long: |- + The cutoff frequency for the 2nd order butterworth filter on the primary gyro. + This only affects the angular velocity sent to the controllers, not the estimators. + It applies also to the angular acceleration (D-Term filter), see IMU_DGYRO_CUTOFF. + + A value of 0 disables the filter. + type: float + default: 40.0 + min: 0 + max: 1000 + unit: Hz + increment: 0.1 + decimal: 1 + reboot_required: false + IMU_GYRO_RATEMAX: + description: + short: Gyro control data maximum publication rate (inner loop rate) + long: |- + The maximum rate the gyro control data (vehicle_angular_velocity) will be + allowed to publish at. This is the loop rate for the rate controller and outputs. + + Note: sensor data is always read and filtered at the full raw rate (eg commonly 8 kHz) regardless of this setting. + type: enum + values: + 100: 100 Hz + 250: 250 Hz + 400: 400 Hz + 800: 800 Hz + 1000: 1000 Hz + 2000: 2000 Hz + default: 400 + min: 100 + max: 2000 + unit: Hz + reboot_required: true + IMU_DGYRO_CUTOFF: + description: + short: Cutoff frequency for angular acceleration (D-Term filter) + long: |- + The cutoff frequency for the 2nd order butterworth filter used on + the time derivative of the measured angular velocity, also known as + the D-term filter in the rate controller. The D-term uses the derivative of + the rate and thus is the most susceptible to noise. Therefore, using + a D-term filter allows to increase IMU_GYRO_CUTOFF, which + leads to reduced control latency and permits to increase the P gains. + + A value of 0 disables the filter. + type: float + default: 20.0 + min: 0 + max: 1000 + unit: Hz + increment: 0.1 + decimal: 1 + reboot_required: false + IMU_GYRO_DNF_EN: + description: + short: IMU gyro dynamic notch filtering + long: |- + Enable bank of dynamically updating notch filters. + Requires ESC RPM feedback or onboard FFT (IMU_GYRO_FFT_EN). + type: bitmask + bit: + 0: ESC RPM + 1: FFT + default: 0 + min: 0 + max: 3 + IMU_GYRO_DNF_BW: + description: + short: IMU gyro ESC notch filter bandwidth + long: Bandwidth per notch filter when using dynamic notch filtering with ESC + RPM. + type: float + default: 15.0 + unit: Hz + increment: 0.1 + decimal: 1 + min: 5 + max: 30 + IMU_GYRO_DNF_HMC: + description: + short: IMU gyro dynamic notch filter harmonics + long: ESC RPM number of harmonics (multiples of RPM) for ESC RPM dynamic notch + filtering. + type: int32 + default: 3 + min: 1 + max: 7 + IMU_GYRO_DNF_MIN: + description: + short: IMU gyro dynamic notch filter minimum frequency + long: Minimum notch filter frequency in Hz. + type: float + default: 25.0 + unit: Hz + increment: 0.1 + decimal: 1 diff --git a/src/modules/sensors/vehicle_gps_position/PpsTimeSync.hpp b/src/modules/sensors/vehicle_gps_position/PpsTimeSync.hpp index 433d13154b..bb133132bb 100644 --- a/src/modules/sensors/vehicle_gps_position/PpsTimeSync.hpp +++ b/src/modules/sensors/vehicle_gps_position/PpsTimeSync.hpp @@ -60,7 +60,7 @@ private: int64_t _time_offset{0}; static constexpr uint64_t kPpsStaleTimeoutUs = 5'000'000; - static constexpr int64_t kPpsMaxCorrectionUs = 300'000; // max delay (max of EKF2_GPS_DELAY) + static constexpr int64_t kPpsMaxCorrectionUs = 300'000; // max delay (max of SENS_GPS*_DELAY) bool _initialized{false}; bool _updated{false}; diff --git a/src/modules/sensors/vehicle_gps_position/VehicleGPSPosition.cpp b/src/modules/sensors/vehicle_gps_position/VehicleGPSPosition.cpp index 27ff755741..3064519847 100644 --- a/src/modules/sensors/vehicle_gps_position/VehicleGPSPosition.cpp +++ b/src/modules/sensors/vehicle_gps_position/VehicleGPSPosition.cpp @@ -102,6 +102,17 @@ void VehicleGPSPosition::ParametersUpdate(bool force) if (math::isInRange(gps_prime, -1, 1)) { _gps_blending.setPrimaryInstance(gps_prime); } + + _gps_param_slots[0] = { + static_cast(_param_sens_gps0_id.get()), + {_param_sens_gps0_offx.get(), _param_sens_gps0_offy.get(), _param_sens_gps0_offz.get()}, + static_cast(_param_sens_gps0_delay.get()) * 1000 + }; + _gps_param_slots[1] = { + static_cast(_param_sens_gps1_id.get()), + {_param_sens_gps1_offx.get(), _param_sens_gps1_offy.get(), _param_sens_gps1_offz.get()}, + static_cast(_param_sens_gps1_delay.get()) * 1000 + }; } } @@ -130,6 +141,36 @@ void VehicleGPSPosition::Run() any_gps_updated = true; _sensor_gps_sub[i].copy(&gps_data); + + // Match device_id to receiver slot + matrix::Vector3f antenna_offset{}; + hrt_abstime delay_us = 110_ms; // matches SENS_GPS*_DELAY default + bool matched = false; + + for (uint8_t slot = 0; slot < GPS_MAX_RECEIVERS; slot++) { + if (_gps_param_slots[slot].device_id != 0 + && _gps_param_slots[slot].device_id == gps_data.device_id) { + antenna_offset = _gps_param_slots[slot].offset; + delay_us = _gps_param_slots[slot].delay_us; + matched = true; + break; + } + } + + // Fallback: if no device IDs configured, match by instance index + if (!matched && _gps_param_slots[0].device_id == 0 && _gps_param_slots[1].device_id == 0) { + antenna_offset = _gps_param_slots[i].offset; + delay_us = _gps_param_slots[i].delay_us; + } + + // Apply delay to timestamp_sample if the driver didn't set one + if (gps_data.timestamp_sample == 0 || gps_data.timestamp_sample == gps_data.timestamp) { + if (delay_us > 0 && gps_data.timestamp > delay_us) { + gps_data.timestamp_sample = gps_data.timestamp - delay_us; + } + } + + _gps_blending.setAntennaOffset(antenna_offset, i); _gps_blending.setGpsData(gps_data, i); if (math::isInRange(static_cast(gps_prime), 2, 127)) { @@ -159,7 +200,18 @@ void VehicleGPSPosition::Run() gps_output.device_id = 0; } - gps_output.timestamp_sample = _pps_time_sync.correct_gps_timestamp(gps_output.timestamp, gps_output.time_utc_usec); + const matrix::Vector3f &out_offset = _gps_blending.getOutputAntennaOffset(); + gps_output.antenna_offset_x = out_offset(0); + gps_output.antenna_offset_y = out_offset(1); + gps_output.antenna_offset_z = out_offset(2); + + const uint64_t pps_timestamp = _pps_time_sync.correct_gps_timestamp(gps_output.timestamp, gps_output.time_utc_usec); + + if (pps_timestamp != gps_output.timestamp) { + // PPS provided a correction — use it instead of the per-receiver delay + gps_output.timestamp_sample = pps_timestamp; + } + _vehicle_gps_position_pub.publish(gps_output); } } diff --git a/src/modules/sensors/vehicle_gps_position/VehicleGPSPosition.hpp b/src/modules/sensors/vehicle_gps_position/VehicleGPSPosition.hpp index c2d60e6db3..bf3cc6635f 100644 --- a/src/modules/sensors/vehicle_gps_position/VehicleGPSPosition.hpp +++ b/src/modules/sensors/vehicle_gps_position/VehicleGPSPosition.hpp @@ -97,10 +97,26 @@ private: GpsBlending _gps_blending; PpsTimeSync _pps_time_sync; + struct GpsParamSlot { + uint32_t device_id{0}; + matrix::Vector3f offset{}; + hrt_abstime delay_us{110_ms}; + } _gps_param_slots[GPS_MAX_RECEIVERS] {}; + DEFINE_PARAMETERS( (ParamInt) _param_sens_gps_mask, (ParamFloat) _param_sens_gps_tau, - (ParamInt) _param_sens_gps_prime + (ParamInt) _param_sens_gps_prime, + (ParamInt) _param_sens_gps0_id, + (ParamFloat) _param_sens_gps0_offx, + (ParamFloat) _param_sens_gps0_offy, + (ParamFloat) _param_sens_gps0_offz, + (ParamInt) _param_sens_gps1_id, + (ParamFloat) _param_sens_gps1_offx, + (ParamFloat) _param_sens_gps1_offy, + (ParamFloat) _param_sens_gps1_offz, + (ParamInt) _param_sens_gps0_delay, + (ParamInt) _param_sens_gps1_delay ) }; }; // namespace sensors diff --git a/src/modules/sensors/vehicle_gps_position/gps_blending.cpp b/src/modules/sensors/vehicle_gps_position/gps_blending.cpp index 73b5fe1cee..ea42cd7047 100644 --- a/src/modules/sensors/vehicle_gps_position/gps_blending.cpp +++ b/src/modules/sensors/vehicle_gps_position/gps_blending.cpp @@ -82,10 +82,12 @@ void GpsBlending::update(uint64_t hrt_now_us) } _selected_gps = gps_select_index; + _output_antenna_offset = _antenna_offset[gps_select_index]; _is_new_output_data_available = _gps_updated[gps_select_index]; for (uint8_t i = 0; i < GPS_MAX_RECEIVERS_BLEND; i++) { - _gps_updated[gps_select_index] = false; + // clear updated flags + _gps_updated[i] = false; } } @@ -340,6 +342,15 @@ bool GpsBlending::blend_gps_data(uint64_t hrt_now_us) // offsets for each physical receiver sensor_gps_s gps_blended_state = gps_blend_states(blend_weights); + // blend antenna offsets using the same weights + _output_antenna_offset.zero(); + + for (uint8_t i = 0; i < GPS_MAX_RECEIVERS_BLEND; i++) { + if (blend_weights[i] > 0.0f) { + _output_antenna_offset += _antenna_offset[i] * blend_weights[i]; + } + } + update_gps_offsets(gps_blended_state); // calculate a blended output from the offset corrected receiver data @@ -438,10 +449,6 @@ sensor_gps_s GpsBlending::gps_blend_states(float blend_weights[GPS_MAX_RECEIVERS } } - // TODO read parameters for individual GPS antenna positions and blend - // Vector3f temp_antenna_offset = _antenna_offset[i]; - // temp_antenna_offset *= blend_weights[i]; - // _blended_antenna_offset += temp_antenna_offset; } /* diff --git a/src/modules/sensors/vehicle_gps_position/gps_blending.hpp b/src/modules/sensors/vehicle_gps_position/gps_blending.hpp index fa646578e6..7514014e59 100644 --- a/src/modules/sensors/vehicle_gps_position/gps_blending.hpp +++ b/src/modules/sensors/vehicle_gps_position/gps_blending.hpp @@ -47,6 +47,7 @@ #include using matrix::Vector2f; +using matrix::Vector3f; using math::constrain; using namespace time_literals; @@ -65,7 +66,7 @@ public: // define max number of GPS receivers supported for blending static constexpr int GPS_MAX_RECEIVERS_BLEND = 2; - void setGpsData(const sensor_gps_s &gps_data, int instance) + void setGpsData(const sensor_gps_s &gps_data, uint8_t instance) { if (instance < GPS_MAX_RECEIVERS_BLEND) { _gps_state[instance] = gps_data; @@ -77,6 +78,11 @@ public: void setBlendingUseVPosAccuracy(bool enabled) { _blend_use_vpos_acc = enabled; } void setBlendingTimeConstant(float tau) { _blending_time_constant = tau; } void setPrimaryInstance(int primary) { _primary_instance = primary; } + void setAntennaOffset(const Vector3f &offset, uint8_t instance) + { + if (instance < GPS_MAX_RECEIVERS_BLEND) { _antenna_offset[instance] = offset; } + } + const Vector3f &getOutputAntennaOffset() const { return _output_antenna_offset; } void update(uint64_t hrt_now_us); @@ -144,4 +150,7 @@ private: bool _blend_use_vpos_acc{false}; float _blending_time_constant{0.f}; + + Vector3f _antenna_offset[GPS_MAX_RECEIVERS_BLEND] {}; + Vector3f _output_antenna_offset {}; }; diff --git a/src/modules/sensors/vehicle_gps_position/gps_blending_test.cpp b/src/modules/sensors/vehicle_gps_position/gps_blending_test.cpp index 50352162c0..2c326966a6 100644 --- a/src/modules/sensors/vehicle_gps_position/gps_blending_test.cpp +++ b/src/modules/sensors/vehicle_gps_position/gps_blending_test.cpp @@ -292,6 +292,203 @@ TEST_F(GpsBlendingTest, dualReceiverFailover) EXPECT_TRUE(gps_blending.isNewOutputDataAvailable()); } +TEST_F(GpsBlendingTest, singleReceiverAntennaOffset) +{ + GpsBlending gps_blending; + + gps_blending.setPrimaryInstance(-1); + sensor_gps_s gps_data = getDefaultGpsData(); + + const Vector3f offset0(0.1f, 0.0f, -0.05f); + gps_blending.setAntennaOffset(offset0, 1); + + gps_blending.setGpsData(gps_data, 1); + gps_blending.update(_time_now_us); + + _time_now_us += 200e3; + gps_data.timestamp = _time_now_us - 10e3; + gps_blending.setGpsData(gps_data, 1); + gps_blending.update(_time_now_us); + + EXPECT_EQ(gps_blending.getSelectedGps(), 1); + EXPECT_TRUE(gps_blending.isNewOutputDataAvailable()); + + const Vector3f &out = gps_blending.getOutputAntennaOffset(); + EXPECT_FLOAT_EQ(out(0), offset0(0)); + EXPECT_FLOAT_EQ(out(1), offset0(1)); + EXPECT_FLOAT_EQ(out(2), offset0(2)); +} + +TEST_F(GpsBlendingTest, dualReceiverBlendedAntennaOffset) +{ + GpsBlending gps_blending; + + sensor_gps_s gps_data0 = getDefaultGpsData(); + sensor_gps_s gps_data1 = getDefaultGpsData(); + + gps_blending.setBlendingUseHPosAccuracy(true); + + // Equal accuracy → equal weights (0.5 each) + const Vector3f offset0(0.1f, 0.0f, -0.05f); + const Vector3f offset1(-0.1f, 0.0f, -0.05f); + gps_blending.setAntennaOffset(offset0, 0); + gps_blending.setAntennaOffset(offset1, 1); + + gps_blending.setGpsData(gps_data0, 0); + gps_blending.setGpsData(gps_data1, 1); + gps_blending.update(_time_now_us); + + EXPECT_EQ(gps_blending.getSelectedGps(), 2); // blended + + const Vector3f &out = gps_blending.getOutputAntennaOffset(); + // Equal weights → average of offsets + EXPECT_NEAR(out(0), 0.0f, 1e-5f); + EXPECT_NEAR(out(1), 0.0f, 1e-5f); + EXPECT_NEAR(out(2), -0.05f, 1e-5f); +} + +TEST_F(GpsBlendingTest, failoverAntennaOffset) +{ + GpsBlending gps_blending; + + gps_blending.setPrimaryInstance(0); + gps_blending.setBlendingUseSpeedAccuracy(false); + gps_blending.setBlendingUseHPosAccuracy(false); + gps_blending.setBlendingUseVPosAccuracy(false); + + const Vector3f offset0(0.1f, 0.0f, 0.0f); + const Vector3f offset1(-0.1f, 0.0f, 0.0f); + gps_blending.setAntennaOffset(offset0, 0); + gps_blending.setAntennaOffset(offset1, 1); + + // Only secondary available + sensor_gps_s gps_data1 = getDefaultGpsData(); + runSeconds(10.f, gps_blending, gps_data1, 1); + + EXPECT_EQ(gps_blending.getSelectedGps(), 1); + EXPECT_FLOAT_EQ(gps_blending.getOutputAntennaOffset()(0), offset1(0)); + + // Now primary becomes available + sensor_gps_s gps_data0 = getDefaultGpsData(); + gps_data0.timestamp = gps_data1.timestamp; + runSeconds(1.f, gps_blending, gps_data0, gps_data1); + + EXPECT_EQ(gps_blending.getSelectedGps(), 0); + EXPECT_FLOAT_EQ(gps_blending.getOutputAntennaOffset()(0), offset0(0)); +} + +TEST_F(GpsBlendingTest, dualReceiverAsymmetricWeightAntennaOffset) +{ + GpsBlending gps_blending; + + sensor_gps_s gps_data0 = getDefaultGpsData(); + sensor_gps_s gps_data1 = getDefaultGpsData(); + + gps_blending.setBlendingUseHPosAccuracy(true); + + // gps0 has twice the accuracy of gps1 → higher weight + gps_data0.eph = 0.5f; + gps_data1.eph = 1.0f; + + const Vector3f offset0(0.2f, 0.0f, -0.1f); + const Vector3f offset1(-0.2f, 0.0f, 0.1f); + gps_blending.setAntennaOffset(offset0, 0); + gps_blending.setAntennaOffset(offset1, 1); + + gps_blending.setGpsData(gps_data0, 0); + gps_blending.setGpsData(gps_data1, 1); + gps_blending.update(_time_now_us); + + EXPECT_EQ(gps_blending.getSelectedGps(), 2); // blended + + // hpos weights: inverse variance → w0 = 1/(0.5^2) = 4, w1 = 1/(1.0^2) = 1 + // normalized: w0 = 0.8, w1 = 0.2 + // blended offset = 0.8 * (0.2, 0, -0.1) + 0.2 * (-0.2, 0, 0.1) + // = (0.16, 0, -0.08) + (-0.04, 0, 0.02) = (0.12, 0, -0.06) + const Vector3f &out = gps_blending.getOutputAntennaOffset(); + EXPECT_NEAR(out(0), 0.12f, 1e-5f); + EXPECT_NEAR(out(1), 0.0f, 1e-5f); + EXPECT_NEAR(out(2), -0.06f, 1e-5f); +} + +TEST_F(GpsBlendingTest, blendingFallthroughAntennaOffset) +{ + GpsBlending gps_blending; + + // Enable blending, but give one receiver eph=0 so can_do_blending is false + gps_blending.setPrimaryInstance(-1); + gps_blending.setBlendingUseHPosAccuracy(true); + gps_blending.setBlendingUseSpeedAccuracy(false); + gps_blending.setBlendingUseVPosAccuracy(false); + + const Vector3f offset0(0.15f, -0.05f, 0.0f); + const Vector3f offset1(-0.15f, 0.05f, 0.0f); + gps_blending.setAntennaOffset(offset0, 0); + gps_blending.setAntennaOffset(offset1, 1); + + sensor_gps_s gps_data0 = getDefaultGpsData(); + sensor_gps_s gps_data1 = getDefaultGpsData(); + + // eph=0 on both → horizontal_accuracy_sum_sq=0 → can_do_blending=false → fallthrough + gps_data0.eph = 0.0f; + gps_data1.eph = 0.0f; + + // gps1 has more satellites → wins non-blending selection + gps_data1.satellites_used = gps_data0.satellites_used + 2; + + gps_blending.setGpsData(gps_data0, 0); + gps_blending.setGpsData(gps_data1, 1); + gps_blending.update(_time_now_us); + + _time_now_us += 200e3; + gps_data0.timestamp = _time_now_us - 10e3; + gps_data1.timestamp = _time_now_us - 10e3; + gps_blending.setGpsData(gps_data0, 0); + gps_blending.setGpsData(gps_data1, 1); + gps_blending.update(_time_now_us); + + // Falls through to non-blending path, gps1 selected by satellite count + EXPECT_LT(gps_blending.getSelectedGps(), 2); // not blended + EXPECT_EQ(gps_blending.getSelectedGps(), 1); + + const Vector3f &out = gps_blending.getOutputAntennaOffset(); + EXPECT_FLOAT_EQ(out(0), offset1(0)); + EXPECT_FLOAT_EQ(out(1), offset1(1)); + EXPECT_FLOAT_EQ(out(2), offset1(2)); +} + +TEST_F(GpsBlendingTest, dualReceiverNoBlendingStaleFlag) +{ + GpsBlending gps_blending; + + // GIVEN: two receivers, no blending (no accuracy metrics enabled) + gps_blending.setPrimaryInstance(-1); + gps_blending.setBlendingUseSpeedAccuracy(false); + gps_blending.setBlendingUseHPosAccuracy(false); + gps_blending.setBlendingUseVPosAccuracy(false); + + sensor_gps_s gps_data0 = getDefaultGpsData(); + sensor_gps_s gps_data1 = getDefaultGpsData(); + + gps_data1.satellites_used = gps_data0.satellites_used + 2; // gps1 wins selection + + // First update: both receivers provide data, gps1 is selected + gps_blending.setGpsData(gps_data0, 0); + gps_blending.setGpsData(gps_data1, 1); + gps_blending.update(_time_now_us); + + EXPECT_EQ(gps_blending.getSelectedGps(), 1); + EXPECT_TRUE(gps_blending.isNewOutputDataAvailable()); + + // Second update: NO new data from either receiver + // With the bug (_gps_updated[gps_select_index] instead of [i]), + // the non-selected instance's flag was never cleared, so this + // would spuriously report new data available. + gps_blending.update(_time_now_us); + + EXPECT_FALSE(gps_blending.isNewOutputDataAvailable()); +} + TEST_F(GpsBlendingTest, dualReceiverUTCTime) { GpsBlending gps_blending; diff --git a/src/modules/sensors/vehicle_gps_position/module.yaml b/src/modules/sensors/vehicle_gps_position/module.yaml new file mode 100644 index 0000000000..ffd9faf132 --- /dev/null +++ b/src/modules/sensors/vehicle_gps_position/module.yaml @@ -0,0 +1,124 @@ +__max_num_gps_instances: &max_num_gps_instances 2 + +module_name: vehicle_gps_position + +parameters: + - group: Sensors + definitions: + SENS_GPS_MASK: + description: + short: Multi GPS Blending Control Mask + long: | + Set bits in the following positions to set which GPS accuracy metrics will + be used to calculate the blending weight. Set to zero to disable and always + used first GPS instance. + type: bitmask + bit: + 0: use speed accuracy + 1: use hpos accuracy + 2: use vpos accuracy + default: 7 + min: 0 + max: 7 + + SENS_GPS_TAU: + description: + short: Multi GPS Blending Time Constant + long: | + Sets the longest time constant that will be applied to the calculation of GPS + position and height offsets used to correct data from multiple GPS data for + steady state position differences. + type: float + default: 10.0 + unit: s + decimal: 1 + min: 1.0 + max: 100.0 + + SENS_GPS_PRIME: + description: + short: Multi GPS primary instance + long: | + When no blending is active, this defines the preferred GPS receiver instance. + The GPS selection logic waits until the primary receiver is available to + send data to the EKF even if a secondary instance is already available. + The secondary instance is then only used if the primary one times out. + + To select a DroneCAN GPS, set this to the node ID. + + This parameter has no effect if blending is active. + type: int32 + default: 0 + min: -1 + max: 127 + values: + -1: Auto (equal priority) + 0: Main serial GPS + 1: Secondary serial GPS + SENS_GPS${i}_ID: + description: + short: GPS ${i} device ID + long: | + Device ID of the GPS receiver for antenna offset slot ${i}. + Set to 0 to disable this slot. When all slots are 0, offsets are + matched by uORB instance index (only reliable for serial GPS). + category: System + type: int32 + default: 0 + num_instances: *max_num_gps_instances + instance_start: 0 + + SENS_GPS${i}_OFFX: + description: + short: GPS ${i} antenna X position + long: | + Forward axis relative to vehicle centre of gravity. + Matched to physical GPS receiver via SENS_GPS${i}_ID. + type: float + default: 0.0 + unit: m + decimal: 3 + num_instances: *max_num_gps_instances + instance_start: 0 + + SENS_GPS${i}_OFFY: + description: + short: GPS ${i} antenna Y position + long: | + Right axis relative to vehicle centre of gravity. + Matched to physical GPS receiver via SENS_GPS${i}_ID. + type: float + default: 0.0 + unit: m + decimal: 3 + num_instances: *max_num_gps_instances + instance_start: 0 + + SENS_GPS${i}_OFFZ: + description: + short: GPS ${i} antenna Z position + long: | + Down axis relative to vehicle centre of gravity. + Matched to physical GPS receiver via SENS_GPS${i}_ID. + type: float + default: 0.0 + unit: m + decimal: 3 + num_instances: *max_num_gps_instances + instance_start: 0 + + SENS_GPS${i}_DELAY: + description: + short: GPS ${i} measurement delay + long: | + GPS measurement delay relative to IMU measurements. + Matched to physical GPS receiver via SENS_GPS${i}_ID. + Only applied when the GPS driver does not provide its own + timestamp_sample correction. + type: int32 + default: 110 + unit: ms + min: 0 + max: 300 + num_instances: *max_num_gps_instances + instance_start: 0 diff --git a/src/modules/sensors/vehicle_gps_position/params.c b/src/modules/sensors/vehicle_gps_position/params.c deleted file mode 100644 index 310c7bfc6b..0000000000 --- a/src/modules/sensors/vehicle_gps_position/params.c +++ /dev/null @@ -1,85 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2020 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Multi GPS Blending Control Mask. - * - * Set bits in the following positions to set which GPS accuracy metrics will be used to calculate the blending weight. Set to zero to disable and always used first GPS instance. - * 0 : Set to true to use speed accuracy - * 1 : Set to true to use horizontal position accuracy - * 2 : Set to true to use vertical position accuracy - * - * @group Sensors - * @min 0 - * @max 7 - * @bit 0 use speed accuracy - * @bit 1 use hpos accuracy - * @bit 2 use vpos accuracy - */ -PARAM_DEFINE_INT32(SENS_GPS_MASK, 7); - -/** - * Multi GPS Blending Time Constant - * - * Sets the longest time constant that will be applied to the calculation of GPS position and height offsets used to correct data from multiple GPS data for steady state position differences. - * - * - * @group Sensors - * @min 1.0 - * @max 100.0 - * @unit s - * @decimal 1 - */ -PARAM_DEFINE_FLOAT(SENS_GPS_TAU, 10.0f); - -/** - * Multi GPS primary instance - * - * When no blending is active, this defines the preferred GPS receiver instance. - * The GPS selection logic waits until the primary receiver is available to - * send data to the EKF even if a secondary instance is already available. - * The secondary instance is then only used if the primary one times out. - * - * Accepted values: - * -1 : Auto (equal priority for all instances) - * 0 : Main serial GPS instance - * 1 : Secondary serial GPS instance - * 2-127 : UAVCAN module node ID - * - * This parameter has no effect if blending is active. - * - * @group Sensors - * @min -1 - * @max 127 - */ -PARAM_DEFINE_INT32(SENS_GPS_PRIME, 0); diff --git a/src/modules/sensors/vehicle_imu/CMakeLists.txt b/src/modules/sensors/vehicle_imu/CMakeLists.txt index fe6ddeb8a4..c84857f2b5 100644 --- a/src/modules/sensors/vehicle_imu/CMakeLists.txt +++ b/src/modules/sensors/vehicle_imu/CMakeLists.txt @@ -35,6 +35,7 @@ px4_add_library(vehicle_imu VehicleIMU.cpp VehicleIMU.hpp ) +set_property(GLOBAL APPEND PROPERTY PX4_MODULE_CONFIG_FILES ${CMAKE_CURRENT_SOURCE_DIR}/imu_parameters.yaml) target_compile_options(vehicle_imu PRIVATE diff --git a/src/modules/sensors/vehicle_imu/imu_parameters.c b/src/modules/sensors/vehicle_imu/imu_parameters.c deleted file mode 100644 index eca9d9fc12..0000000000 --- a/src/modules/sensors/vehicle_imu/imu_parameters.c +++ /dev/null @@ -1,74 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2020 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** -* IMU integration rate. -* -* The rate at which raw IMU data is integrated to produce delta angles and delta velocities. -* Recommended to set this to a multiple of the estimator update period (currently 10 ms for ekf2). -* -* @min 100 -* @max 1000 -* @value 100 100 Hz -* @value 200 200 Hz -* @value 250 250 Hz -* @value 400 400 Hz -* @unit Hz -* @reboot_required true -* @group Sensors -*/ -PARAM_DEFINE_INT32(IMU_INTEG_RATE, 200); - -/** - * IMU auto calibration - * - * Automatically initialize IMU (accel/gyro) calibration from bias estimates if available. - * - * @boolean - * - * @category system - * @group Sensors - */ -PARAM_DEFINE_INT32(SENS_IMU_AUTOCAL, 1); - -/** - * IMU notify clipping - * - * Notify the user if the IMU is clipping - * - * @boolean - * - * @category system - * @group Sensors - */ -PARAM_DEFINE_INT32(SENS_IMU_CLPNOTI, 1); diff --git a/src/modules/sensors/vehicle_imu/imu_parameters.yaml b/src/modules/sensors/vehicle_imu/imu_parameters.yaml new file mode 100644 index 0000000000..1a229577b3 --- /dev/null +++ b/src/modules/sensors/vehicle_imu/imu_parameters.yaml @@ -0,0 +1,36 @@ +module_name: vehicle_imu +parameters: +- group: Sensors + definitions: + IMU_INTEG_RATE: + description: + short: IMU integration rate + long: |- + The rate at which raw IMU data is integrated to produce delta angles and delta velocities. + Recommended to set this to a multiple of the estimator update period (currently 10 ms for ekf2). + type: enum + values: + 100: 100 Hz + 200: 200 Hz + 250: 250 Hz + 400: 400 Hz + default: 200 + min: 100 + max: 1000 + unit: Hz + reboot_required: true + SENS_IMU_AUTOCAL: + description: + short: IMU auto calibration + long: Automatically initialize IMU (accel/gyro) calibration from bias estimates + if available. + category: System + type: boolean + default: 1 + SENS_IMU_CLPNOTI: + description: + short: IMU notify clipping + long: Notify the user if the IMU is clipping + category: System + type: boolean + default: 1 diff --git a/src/modules/sensors/vehicle_optical_flow/RingBuffer.hpp b/src/modules/sensors/vehicle_optical_flow/RingBuffer.hpp index 591088bc30..faae7ef625 100644 --- a/src/modules/sensors/vehicle_optical_flow/RingBuffer.hpp +++ b/src/modules/sensors/vehicle_optical_flow/RingBuffer.hpp @@ -76,9 +76,9 @@ public: bool peak_first_older_than(const uint64_t ×tamp, T *sample) { // start looking from newest observation data - for (uint8_t i = 0; i < SIZE; i++) { - int index = (_head - i); - index = index < 0 ? SIZE + index : index; + for (size_t i = 0; i < SIZE; i++) { + int index = static_cast(_head) - static_cast(i); + index = index < 0 ? static_cast(SIZE) + index : index; if (timestamp >= _buffer[index].time_us && timestamp < _buffer[index].time_us + (uint64_t)100'000) { *sample = _buffer[index]; @@ -98,9 +98,9 @@ public: bool pop_first_older_than(const uint64_t ×tamp, T *sample) { // start looking from newest observation data - for (uint8_t i = 0; i < SIZE; i++) { - int index = (_head - i); - index = index < 0 ? SIZE + index : index; + for (size_t i = 0; i < SIZE; i++) { + int index = static_cast(_head) - static_cast(i); + index = index < 0 ? static_cast(SIZE) + index : index; if (timestamp >= _buffer[index].time_us && timestamp < _buffer[index].time_us + (uint64_t)100'000) { *sample = _buffer[index]; @@ -113,7 +113,7 @@ public: _first_write = true; } else { - _tail = (index + 1) % SIZE; + _tail = (index + 1) % static_cast(SIZE); } _buffer[index].time_us = 0; @@ -137,9 +137,9 @@ public: return false; } - for (uint8_t i = 0; i < SIZE; i++) { + for (size_t i = 0; i < SIZE; i++) { - uint8_t index = (_tail + i) % SIZE; + size_t index = (_tail + i) % SIZE; if (_buffer[index].time_us >= timestamp_oldest && _buffer[index].time_us <= timestamp_newest) { *sample = _buffer[index]; @@ -147,7 +147,7 @@ public: // Now we can set the tail to the item which // comes after the one we removed since we don't // want to have any older data in the buffer - if (index == _head) { + if (index == (size_t)_head) { _tail = _head; _first_write = true; @@ -194,12 +194,12 @@ public: int get_total_size() const { return sizeof(*this) + sizeof(T) * SIZE; } - uint8_t entries() const + size_t entries() const { - int count = 0; + size_t count = 0; - for (uint8_t i = 0; i < SIZE; i++) { - if (_buffer[i].time_us != 0) { + for (const auto &item : _buffer) { + if (item.time_us != 0) { count++; } } diff --git a/src/modules/simulation/battery_simulator/BatterySimulator.cpp b/src/modules/simulation/battery_simulator/BatterySimulator.cpp index 5b37bafa57..36c9961bc1 100644 --- a/src/modules/simulation/battery_simulator/BatterySimulator.cpp +++ b/src/modules/simulation/battery_simulator/BatterySimulator.cpp @@ -32,6 +32,7 @@ ****************************************************************************/ #include "BatterySimulator.hpp" +#include ModuleBase::Descriptor BatterySimulator::desc{task_spawn, custom_command, print_usage}; @@ -84,7 +85,8 @@ void BatterySimulator::Run() const hrt_abstime now_us = hrt_absolute_time(); - const float discharge_interval_us = _param_sim_bat_drain.get() * 1000 * 1000; + // Limit to +1.0 s to guard against division by 0 + const float discharge_interval_us = math::max(_param_sim_bat_drain.get(), 1.0f) * 1000 * 1000; if (_armed) { if (_last_integration_us != 0) { @@ -130,9 +132,9 @@ void BatterySimulator::updateCommands() bool handled = false; bool supported = false; - const int failure_unit = static_cast(vehicle_command.param1 + 0.5f); - const int failure_type = static_cast(vehicle_command.param2 + 0.5f); - const int instance = static_cast(vehicle_command.param3 + 0.5f); + const int failure_unit = static_cast(lroundf(vehicle_command.param1)); + const int failure_type = static_cast(lroundf(vehicle_command.param2)); + const int instance = static_cast(lroundf(vehicle_command.param3)); if (failure_unit == vehicle_command_s::FAILURE_UNIT_SYSTEM_BATTERY) { diff --git a/src/modules/simulation/battery_simulator/CMakeLists.txt b/src/modules/simulation/battery_simulator/CMakeLists.txt index 1a7cc3a5c4..9b81baeeb6 100644 --- a/src/modules/simulation/battery_simulator/CMakeLists.txt +++ b/src/modules/simulation/battery_simulator/CMakeLists.txt @@ -38,6 +38,8 @@ px4_add_module( SRCS BatterySimulator.cpp BatterySimulator.hpp + MODULE_CONFIG + battery_simulator_params.yaml DEPENDS battery mathlib diff --git a/src/modules/simulation/battery_simulator/battery_simulator_params.c b/src/modules/simulation/battery_simulator/battery_simulator_params.c deleted file mode 100644 index 986ae0b596..0000000000 --- a/src/modules/simulation/battery_simulator/battery_simulator_params.c +++ /dev/null @@ -1,71 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2020 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Simulator Battery enabled - * - * Enable or disable the internal battery simulation. This is useful - * when the battery is simulated externally and interfaced with PX4 - * through MAVLink for example. - * - * @boolean - * @group SITL - */ -PARAM_DEFINE_INT32(SIM_BAT_ENABLE, 1); - -/** - * Simulator Battery drain interval - * - * @min 1 - * @max 86400 - * @increment 1 - * @unit s - * - * @group SITL - */ -PARAM_DEFINE_FLOAT(SIM_BAT_DRAIN, 60); - -/** - * Simulator Battery minimal percentage. - * - * Can be used to alter the battery level during SITL- or HITL-simulation on the fly. - * Particularly useful for testing different low-battery behaviour. - * - * @min 0 - * @max 100 - * @increment 0.1 - * @unit % - * - * @group SITL - */ -PARAM_DEFINE_FLOAT(SIM_BAT_MIN_PCT, 50.0f); diff --git a/src/modules/simulation/battery_simulator/battery_simulator_params.yaml b/src/modules/simulation/battery_simulator/battery_simulator_params.yaml new file mode 100644 index 0000000000..db3ac91ce8 --- /dev/null +++ b/src/modules/simulation/battery_simulator/battery_simulator_params.yaml @@ -0,0 +1,26 @@ +module_name: battery_simulator +parameters: +- group: SITL + definitions: + SIM_BAT_DRAIN: + description: + short: Simulated battery full-discharge time + long: |- + Time in seconds for the simulated battery to drain from 100% to 0% while armed. Set to 0 to disable the battery simulator entirely (useful when battery state is provided externally, e.g. via MAVLink). + type: float + default: 60 + min: 0 + increment: 1 + unit: s + SIM_BAT_MIN_PCT: + description: + short: Simulator Battery minimal percentage + long: |- + Can be used to alter the battery level during SITL- or HITL-simulation on the fly. + Particularly useful for testing different low-battery behaviour. + type: float + default: 50.0 + min: 0 + max: 100 + increment: 0.1 + unit: '%' diff --git a/src/modules/simulation/gz_bridge/CMakeLists.txt b/src/modules/simulation/gz_bridge/CMakeLists.txt index c639b4c679..86b40e6056 100644 --- a/src/modules/simulation/gz_bridge/CMakeLists.txt +++ b/src/modules/simulation/gz_bridge/CMakeLists.txt @@ -69,6 +69,7 @@ if (gz-transport_FOUND) ${GZ_TRANSPORT_TARGET} MODULE_CONFIG module.yaml + parameters.yaml ) target_include_directories(modules__simulation__gz_bridge @@ -120,7 +121,9 @@ if (gz-transport_FOUND) endforeach() # Setup the environment variables: PX4_GZ_MODELS, PX4_GZ_WORLDS, GZ_SIM_RESOURCE_PATH - configure_file(gz_env.sh.in ${PX4_BINARY_DIR}/rootfs/gz_env.sh) + # @ONLY disables ${VAR} substitution so that shell $VAR references in the + # template are passed through untouched. + configure_file(gz_env.sh.in ${PX4_BINARY_DIR}/rootfs/gz_env.sh @ONLY) else() # Create fallback targets that provide helpful error messages when Gazebo dependencies are missing diff --git a/src/modules/simulation/gz_bridge/GZBridge.cpp b/src/modules/simulation/gz_bridge/GZBridge.cpp index 952657a694..3bbd170282 100644 --- a/src/modules/simulation/gz_bridge/GZBridge.cpp +++ b/src/modules/simulation/gz_bridge/GZBridge.cpp @@ -152,12 +152,16 @@ int GZBridge::init() return PX4_ERROR; } +#if defined(CONFIG_MODULES_GIMBAL) + // Gimbal mixing interface if (!_gimbal.init(_world_name, _model_name)) { PX4_ERR("failed to init gimbal"); return PX4_ERROR; } +#endif // CONFIG_MODULES_GIMBAL + ScheduleNow(); return OK; } @@ -390,7 +394,10 @@ void GZBridge::magnetometerCallback(const gz::msgs::Magnetometer &msg) id.devid_s.bus_type = device::Device::DeviceBusType::DeviceBusType_SIMULATION; id.devid_s.devtype = DRV_MAG_DEVTYPE_MAGSIM; id.devid_s.bus = 1; - id.devid_s.address = 3; // TODO: any value other than 3 causes Commander to not use the mag.... wtf + + // Parameters CAL_MAGx_ID set to 0x3030C and 0x3040C in init.d-posix so only address 3 and 4 are valid for sim magnetometers (unless overwritten) + // See: https://github.com/PX4/PX4-Autopilot/blob/main/ROMFS/px4fmu_common/init.d-posix/rcS#L146-L149 + id.devid_s.address = 3; sensor_mag_s report{}; report.timestamp = timestamp; @@ -398,7 +405,7 @@ void GZBridge::magnetometerCallback(const gz::msgs::Magnetometer &msg) report.device_id = id.devid; report.temperature = this->_temperature; - // FIMEX: once we're on jetty or later + // FIXME: once we're on jetty or later // The magnetometer plugin publishes in units of gauss and in a weird left handed coordinate system // https://github.com/gazebosim/gz-sim/pull/2460 report.x = -msg.field_tesla().y(); diff --git a/src/modules/simulation/gz_bridge/GZMixingInterfaceESC.cpp b/src/modules/simulation/gz_bridge/GZMixingInterfaceESC.cpp index f989434068..9b53315a0d 100644 --- a/src/modules/simulation/gz_bridge/GZMixingInterfaceESC.cpp +++ b/src/modules/simulation/gz_bridge/GZMixingInterfaceESC.cpp @@ -62,8 +62,7 @@ bool GZMixingInterfaceESC::init(const std::string &model_name) return true; } -bool GZMixingInterfaceESC::updateOutputs(uint16_t outputs[MAX_ACTUATORS], unsigned num_outputs, - unsigned num_control_groups_updated) +bool GZMixingInterfaceESC::updateOutputs(float outputs[MAX_ACTUATORS], unsigned num_outputs, unsigned num_control_groups_updated) { unsigned active_output_count = 0; @@ -81,7 +80,7 @@ bool GZMixingInterfaceESC::updateOutputs(uint16_t outputs[MAX_ACTUATORS], unsign rotor_velocity_message.mutable_velocity()->Resize(active_output_count, 0); for (unsigned i = 0; i < active_output_count; i++) { - rotor_velocity_message.set_velocity(i, outputs[i]); + rotor_velocity_message.set_velocity(i, static_cast(outputs[i])); } if (_actuators_pub.Valid()) { diff --git a/src/modules/simulation/gz_bridge/GZMixingInterfaceESC.hpp b/src/modules/simulation/gz_bridge/GZMixingInterfaceESC.hpp index 5ffe105b5d..c55c743f85 100644 --- a/src/modules/simulation/gz_bridge/GZMixingInterfaceESC.hpp +++ b/src/modules/simulation/gz_bridge/GZMixingInterfaceESC.hpp @@ -55,8 +55,7 @@ public: _node(node) {} - bool updateOutputs(uint16_t outputs[MAX_ACTUATORS], - unsigned num_outputs, unsigned num_control_groups_updated) override; + bool updateOutputs(float outputs[MAX_ACTUATORS], unsigned num_outputs, unsigned num_control_groups_updated) override; MixingOutput &mixingOutput() { return _mixing_output; } diff --git a/src/modules/simulation/gz_bridge/GZMixingInterfaceServo.cpp b/src/modules/simulation/gz_bridge/GZMixingInterfaceServo.cpp index 38c1c1dfde..b90ec9789e 100644 --- a/src/modules/simulation/gz_bridge/GZMixingInterfaceServo.cpp +++ b/src/modules/simulation/gz_bridge/GZMixingInterfaceServo.cpp @@ -130,8 +130,7 @@ bool GZMixingInterfaceServo::init(const std::string &model_name) return true; } -bool GZMixingInterfaceServo::updateOutputs(uint16_t outputs[MAX_ACTUATORS], unsigned num_outputs, - unsigned num_control_groups_updated) +bool GZMixingInterfaceServo::updateOutputs(float outputs[MAX_ACTUATORS], unsigned num_outputs, unsigned num_control_groups_updated) { bool updated = false; // cmd.command_value = (float)outputs[i] / 500.f - 1.f; // [-1, 1] @@ -142,8 +141,8 @@ bool GZMixingInterfaceServo::updateOutputs(uint16_t outputs[MAX_ACTUATORS], unsi if (_mixing_output.isFunctionSet(i)) { gz::msgs::Double servo_output; - double output_range = _mixing_output.maxValue(i) - _mixing_output.minValue(i); - double output = _angle_min_rad[i] + _angular_range_rad[i] * (outputs[i] - _mixing_output.minValue(i)) / output_range; + double output_range = (double)_mixing_output.maxValue(i) - (double)_mixing_output.minValue(i); + double output = _angle_min_rad[i] + _angular_range_rad[i] * ((double)outputs[i] - (double)_mixing_output.minValue(i)) / output_range; // std::cout << "outputs[" << i << "]: " << outputs[i] << std::endl; // std::cout << " output: " << output << std::endl; servo_output.set_data(output); diff --git a/src/modules/simulation/gz_bridge/GZMixingInterfaceServo.hpp b/src/modules/simulation/gz_bridge/GZMixingInterfaceServo.hpp index 0e6759408b..6182de8cea 100644 --- a/src/modules/simulation/gz_bridge/GZMixingInterfaceServo.hpp +++ b/src/modules/simulation/gz_bridge/GZMixingInterfaceServo.hpp @@ -49,8 +49,7 @@ public: _node(node) {} - bool updateOutputs(uint16_t outputs[MAX_ACTUATORS], - unsigned num_outputs, unsigned num_control_groups_updated) override; + bool updateOutputs(float outputs[MAX_ACTUATORS], unsigned num_outputs, unsigned num_control_groups_updated) override; MixingOutput &mixingOutput() { return _mixing_output; } diff --git a/src/modules/simulation/gz_bridge/GZMixingInterfaceWheel.cpp b/src/modules/simulation/gz_bridge/GZMixingInterfaceWheel.cpp index 79a57c7ef3..8cef805c53 100644 --- a/src/modules/simulation/gz_bridge/GZMixingInterfaceWheel.cpp +++ b/src/modules/simulation/gz_bridge/GZMixingInterfaceWheel.cpp @@ -60,8 +60,7 @@ bool GZMixingInterfaceWheel::init(const std::string &model_name) return true; } -bool GZMixingInterfaceWheel::updateOutputs(uint16_t outputs[MAX_ACTUATORS], unsigned num_outputs, - unsigned num_control_groups_updated) +bool GZMixingInterfaceWheel::updateOutputs(float outputs[MAX_ACTUATORS], unsigned num_outputs, unsigned num_control_groups_updated) { unsigned active_output_count = 0; diff --git a/src/modules/simulation/gz_bridge/GZMixingInterfaceWheel.hpp b/src/modules/simulation/gz_bridge/GZMixingInterfaceWheel.hpp index 7685bd14a7..7b40889488 100644 --- a/src/modules/simulation/gz_bridge/GZMixingInterfaceWheel.hpp +++ b/src/modules/simulation/gz_bridge/GZMixingInterfaceWheel.hpp @@ -56,8 +56,7 @@ public: _node(node) {} - bool updateOutputs(uint16_t outputs[MAX_ACTUATORS], - unsigned num_outputs, unsigned num_control_groups_updated) override; + bool updateOutputs(float outputs[MAX_ACTUATORS], unsigned num_outputs, unsigned num_control_groups_updated) override; MixingOutput &mixingOutput() { return _mixing_output; } diff --git a/src/modules/simulation/gz_bridge/gz_env.sh.in b/src/modules/simulation/gz_bridge/gz_env.sh.in index bff7180b03..f4eea94f71 100644 --- a/src/modules/simulation/gz_bridge/gz_env.sh.in +++ b/src/modules/simulation/gz_bridge/gz_env.sh.in @@ -19,3 +19,15 @@ export PX4_GZ_SERVER_CONFIG=@PX4_SOURCE_DIR@/src/modules/simulation/gz_bridge/se 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 + +# macOS: dyld does not search /opt/homebrew/lib by default. Many +# gobject-introspection typelibs reference libs by bare basename, +# which fails to resolve unless we add Homebrew's lib dir to the +# fallback search path. Prepend so it beats any system-placed libs, +# and preserve any existing value the user has set. +if [ "$(uname)" = "Darwin" ]; then + HOMEBREW_PREFIX=${HOMEBREW_PREFIX:-$(brew --prefix 2>/dev/null)} + if [ -n "$HOMEBREW_PREFIX" ]; then + export DYLD_FALLBACK_LIBRARY_PATH="$HOMEBREW_PREFIX/lib:${DYLD_FALLBACK_LIBRARY_PATH}" + fi +fi diff --git a/src/modules/simulation/gz_bridge/parameters.c b/src/modules/simulation/gz_bridge/parameters.c deleted file mode 100644 index 0616da562f..0000000000 --- a/src/modules/simulation/gz_bridge/parameters.c +++ /dev/null @@ -1,107 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2022 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Simulator Gazebo bridge enable - * - * @boolean - * @reboot_required true - * @group UAVCAN - */ -PARAM_DEFINE_INT32(SIM_GZ_EN, 0); - -/** - * Enable laser/lidar sensors in Gazebo bridge - * - * @boolean - * @reboot_required true - * @group Simulation - * @value 0 Disabled - * @value 1 Enabled - */ -PARAM_DEFINE_INT32(SIM_GZ_EN_LIDAR, 1); - -/** - * Enable optical flow sensor in Gazebo bridge - * - * @boolean - * @reboot_required true - * @group Simulation - * @value 0 Disabled - * @value 1 Enabled - */ -PARAM_DEFINE_INT32(SIM_GZ_EN_FLOW, 1); - -/** - * Enable airspeed sensor in Gazebo bridge - * - * @boolean - * @reboot_required true - * @group Simulation - * @value 0 Disabled - * @value 1 Enabled - */ -PARAM_DEFINE_INT32(SIM_GZ_EN_ASPD, 1); - -/** - * Enable barometer/air pressure sensor in Gazebo bridge - * - * @boolean - * @reboot_required true - * @group Simulation - * @value 0 Disabled - * @value 1 Enabled - */ -PARAM_DEFINE_INT32(SIM_GZ_EN_BARO, 1); - -/** - * Enable odometry in Gazebo bridge - * - * @boolean - * @reboot_required true - * @group Simulation - * @value 0 Disabled - * @value 1 Enabled - */ -PARAM_DEFINE_INT32(SIM_GZ_EN_ODOM, 1); - -/** - * Enable GPS/NavSat sensor in Gazebo bridge - * - * @boolean - * @reboot_required true - * @group Simulation - * @value 0 Disabled - * @value 1 Enabled - */ -PARAM_DEFINE_INT32(SIM_GZ_EN_GPS, 1); diff --git a/src/modules/simulation/gz_bridge/parameters.yaml b/src/modules/simulation/gz_bridge/parameters.yaml new file mode 100644 index 0000000000..4edca88ca3 --- /dev/null +++ b/src/modules/simulation/gz_bridge/parameters.yaml @@ -0,0 +1,66 @@ +module_name: gz_bridge +parameters: +- group: Simulation + definitions: + SIM_GZ_EN_LIDAR: + description: + short: Enable laser/lidar sensors in Gazebo bridge + type: enum + values: + 0: Disabled + 1: Enabled + default: 1 + reboot_required: true + SIM_GZ_EN_FLOW: + description: + short: Enable optical flow sensor in Gazebo bridge + type: enum + values: + 0: Disabled + 1: Enabled + default: 1 + reboot_required: true + SIM_GZ_EN_ASPD: + description: + short: Enable airspeed sensor in Gazebo bridge + type: enum + values: + 0: Disabled + 1: Enabled + default: 1 + reboot_required: true + SIM_GZ_EN_BARO: + description: + short: Enable barometer/air pressure sensor in Gazebo bridge + type: enum + values: + 0: Disabled + 1: Enabled + default: 1 + reboot_required: true + SIM_GZ_EN_ODOM: + description: + short: Enable odometry in Gazebo bridge + type: enum + values: + 0: Disabled + 1: Enabled + default: 1 + reboot_required: true + SIM_GZ_EN_GPS: + description: + short: Enable GPS/NavSat sensor in Gazebo bridge + type: enum + values: + 0: Disabled + 1: Enabled + default: 1 + reboot_required: true +- group: UAVCAN + definitions: + SIM_GZ_EN: + description: + short: Simulator Gazebo bridge enable + type: boolean + default: 0 + reboot_required: true diff --git a/src/modules/simulation/gz_msgs/CMakeLists.txt b/src/modules/simulation/gz_msgs/CMakeLists.txt index 2501811e5e..568bd7874a 100644 --- a/src/modules/simulation/gz_msgs/CMakeLists.txt +++ b/src/modules/simulation/gz_msgs/CMakeLists.txt @@ -18,6 +18,9 @@ if (Protobuf_FOUND) ${PROTO_HDRS} ) + # Disable double-promotion warning for protobuf-generated code + target_compile_options(px4_gz_msgs PRIVATE -Wno-double-promotion) + target_include_directories(px4_gz_msgs PUBLIC ${CMAKE_CURRENT_BINARY_DIR} diff --git a/src/modules/simulation/gz_plugins/gstreamer/CMakeLists.txt b/src/modules/simulation/gz_plugins/gstreamer/CMakeLists.txt index 4397463b5c..f8cec7c8db 100644 --- a/src/modules/simulation/gz_plugins/gstreamer/CMakeLists.txt +++ b/src/modules/simulation/gz_plugins/gstreamer/CMakeLists.txt @@ -45,6 +45,11 @@ else() GstCameraSystem.cpp ) + target_link_directories(${PROJECT_NAME} + PUBLIC ${GSTREAMER_LIBRARY_DIRS} + PUBLIC ${GSTREAMER_APP_LIBRARY_DIRS} + ) + target_link_libraries(${PROJECT_NAME} PUBLIC px4_gz_msgs PUBLIC ${GZ_SENSORS_TARGET} diff --git a/src/modules/simulation/gz_plugins/optical_flow/CMakeLists.txt b/src/modules/simulation/gz_plugins/optical_flow/CMakeLists.txt index 62d9c7c959..f780f1c986 100644 --- a/src/modules/simulation/gz_plugins/optical_flow/CMakeLists.txt +++ b/src/modules/simulation/gz_plugins/optical_flow/CMakeLists.txt @@ -33,12 +33,37 @@ project(OpticalFlowSystem) -# Include the OpticalFlow external dependency -include(${CMAKE_CURRENT_SOURCE_DIR}/optical_flow.cmake) - -# Find OpenCV find_package(OpenCV REQUIRED COMPONENTS core imgproc) +set(PX4_OPTICAL_FLOW_DIR ${CMAKE_CURRENT_SOURCE_DIR}/PX4-OpticalFlow) + +px4_add_git_submodule(TARGET git_px4_optical_flow PATH "${PX4_OPTICAL_FLOW_DIR}") + +if(NOT TARGET OpticalFlow) + add_subdirectory(${PX4_OPTICAL_FLOW_DIR} ${CMAKE_CURRENT_BINARY_DIR}/PX4-OpticalFlow EXCLUDE_FROM_ALL) + add_dependencies(OpticalFlow git_px4_optical_flow) + add_dependencies(klt_feature_tracker git_px4_optical_flow) + + # PX4-OpticalFlow is an external dependency that predates PX4's strict + # warning policy. Relax -Werror and the few specific warnings it trips so + # upstream source builds cleanly inside our tree. Also restore default + # symbol visibility so the shared library exports its C++ class symbols + # (PX4's global CXX flags set -fvisibility=hidden). + foreach(_tgt OpticalFlow klt_feature_tracker) + target_compile_options(${_tgt} PRIVATE + -Wno-error + -Wno-sign-compare + -Wno-cast-align + -Wno-shadow + -fvisibility=default + ) + set_target_properties(${_tgt} PROPERTIES + CXX_VISIBILITY_PRESET default + VISIBILITY_INLINES_HIDDEN OFF + ) + endforeach() +endif() + add_library(${PROJECT_NAME} SHARED OpticalFlowSensor.cpp OpticalFlowSystem.cpp @@ -51,19 +76,26 @@ target_link_libraries(${PROJECT_NAME} PUBLIC ${GZ_SIM_TARGET} PUBLIC ${GZ_TRANSPORT_TARGET} PUBLIC ${OpenCV_LIBS} - PUBLIC ${OpticalFlow_LIBS} + PUBLIC OpticalFlow ) target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} PUBLIC ${CMAKE_CURRENT_BINARY_DIR} PUBLIC ${OpenCV_INCLUDE_DIRS} - PUBLIC ${OpticalFlow_INCLUDE_DIRS} + PUBLIC ${PX4_OPTICAL_FLOW_DIR}/include + PUBLIC ${PX4_OPTICAL_FLOW_DIR}/external/klt_feature_tracker/include PUBLIC px4_gz_msgs ) -add_dependencies(${PROJECT_NAME} OpticalFlow) +# libOpticalFlow.so is built alongside the plugin in the same output directory +# (CMAKE_LIBRARY_OUTPUT_DIRECTORY is set by the parent gz_plugins CMakeLists), +# so $ORIGIN is sufficient at both build and install time. +set_target_properties(${PROJECT_NAME} PROPERTIES + BUILD_RPATH "$ORIGIN" + INSTALL_RPATH "$ORIGIN" +) if (NOT CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) - install(TARGETS ${PROJECT_NAME} LIBRARY DESTINATION lib/px4_gz_plugins) + install(TARGETS ${PROJECT_NAME} OpticalFlow LIBRARY DESTINATION lib/px4_gz_plugins) endif() diff --git a/src/modules/simulation/gz_plugins/optical_flow/PX4-OpticalFlow b/src/modules/simulation/gz_plugins/optical_flow/PX4-OpticalFlow new file mode 160000 index 0000000000..7ecc7d6968 --- /dev/null +++ b/src/modules/simulation/gz_plugins/optical_flow/PX4-OpticalFlow @@ -0,0 +1 @@ +Subproject commit 7ecc7d6968a315c73f56d40ce9b4a16849840548 diff --git a/src/modules/simulation/pwm_out_sim/PWMSim.cpp b/src/modules/simulation/pwm_out_sim/PWMSim.cpp index a789c45ced..9fb09ba4bd 100644 --- a/src/modules/simulation/pwm_out_sim/PWMSim.cpp +++ b/src/modules/simulation/pwm_out_sim/PWMSim.cpp @@ -60,8 +60,7 @@ PWMSim::~PWMSim() perf_free(_interval_perf); } -bool PWMSim::updateOutputs(uint16_t outputs[MAX_ACTUATORS], unsigned num_outputs, - unsigned num_control_groups_updated) +bool PWMSim::updateOutputs(float outputs[MAX_ACTUATORS], unsigned num_outputs, unsigned num_control_groups_updated) { // Only publish once we receive actuator_controls (important for lock-step to work correctly) if (num_control_groups_updated > 0) { @@ -71,7 +70,7 @@ bool PWMSim::updateOutputs(uint16_t outputs[MAX_ACTUATORS], unsigned num_outputs const uint32_t reversible_outputs = _mixing_output.reversibleOutputs(); for (int i = 0; i < (int)num_outputs; i++) { - if (outputs[i] != PWM_SIM_DISARMED_MAGIC) { + if (fabsf(outputs[i] - PWM_SIM_DISARMED_MAGIC) > FLT_EPSILON) { OutputFunction function = _mixing_output.outputFunction(i); bool is_reversible = reversible_outputs & (1u << i); diff --git a/src/modules/simulation/pwm_out_sim/PWMSim.hpp b/src/modules/simulation/pwm_out_sim/PWMSim.hpp index 693ba9be1a..706d11c366 100644 --- a/src/modules/simulation/pwm_out_sim/PWMSim.hpp +++ b/src/modules/simulation/pwm_out_sim/PWMSim.hpp @@ -72,8 +72,7 @@ public: /** @see ModuleBase::print_status() */ int print_status() override; - bool updateOutputs(uint16_t outputs[MAX_ACTUATORS], - unsigned num_outputs, unsigned num_control_groups_updated) override; + bool updateOutputs(float outputs[MAX_ACTUATORS], unsigned num_outputs, unsigned num_control_groups_updated) override; private: void Run() override; diff --git a/src/modules/simulation/sensor_agp_sim/CMakeLists.txt b/src/modules/simulation/sensor_agp_sim/CMakeLists.txt index e1390068eb..d4aac6d926 100644 --- a/src/modules/simulation/sensor_agp_sim/CMakeLists.txt +++ b/src/modules/simulation/sensor_agp_sim/CMakeLists.txt @@ -38,6 +38,8 @@ px4_add_module( SRCS SensorAgpSim.cpp SensorAgpSim.hpp + MODULE_CONFIG + parameters.yaml DEPENDS px4_work_queue ) diff --git a/src/modules/simulation/sensor_agp_sim/parameters.c b/src/modules/simulation/sensor_agp_sim/parameters.c deleted file mode 100644 index 6690255f09..0000000000 --- a/src/modules/simulation/sensor_agp_sim/parameters.c +++ /dev/null @@ -1,57 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2024 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ -/** - * Simulate Aux Global Position (AGP) - * - * @reboot_required true - * @min 0 - * @max 1 - * @group Sensors - * @value 0 Disabled - * @value 1 Enabled - */ -PARAM_DEFINE_INT32(SENS_EN_AGPSIM, 0); - -/** - * AGP failure mode - * - * Stuck: freeze the measurement to the current location - * Drift: add a linearly growing bias to the sensor data - * - * @group Simulator - * @min 0 - * @max 3 - * @bit 0 Stuck - * @bit 1 Drift - */ -PARAM_DEFINE_INT32(SIM_AGP_FAIL, 0); diff --git a/src/modules/simulation/sensor_agp_sim/parameters.yaml b/src/modules/simulation/sensor_agp_sim/parameters.yaml new file mode 100644 index 0000000000..89a9fb4dcc --- /dev/null +++ b/src/modules/simulation/sensor_agp_sim/parameters.yaml @@ -0,0 +1,30 @@ +module_name: sensor_agp_sim +parameters: +- group: Sensors + definitions: + SENS_EN_AGPSIM: + description: + short: Simulate Aux Global Position (AGP) + type: enum + values: + 0: Disabled + 1: Enabled + default: 0 + reboot_required: true + min: 0 + max: 1 +- group: Simulator + definitions: + SIM_AGP_FAIL: + description: + short: AGP failure mode + long: |- + Stuck: freeze the measurement to the current location + Drift: add a linearly growing bias to the sensor data + type: bitmask + bit: + 0: Stuck + 1: Drift + default: 0 + min: 0 + max: 3 diff --git a/src/modules/simulation/sensor_airspeed_sim/CMakeLists.txt b/src/modules/simulation/sensor_airspeed_sim/CMakeLists.txt index d993fe49af..a2a627b704 100644 --- a/src/modules/simulation/sensor_airspeed_sim/CMakeLists.txt +++ b/src/modules/simulation/sensor_airspeed_sim/CMakeLists.txt @@ -38,6 +38,8 @@ px4_add_module( SRCS SensorAirspeedSim.cpp SensorAirspeedSim.hpp + MODULE_CONFIG + parameters.yaml DEPENDS px4_work_queue ) diff --git a/src/modules/simulation/sensor_airspeed_sim/SensorAirspeedSim.cpp b/src/modules/simulation/sensor_airspeed_sim/SensorAirspeedSim.cpp index 6faec2131a..a67ad76937 100644 --- a/src/modules/simulation/sensor_airspeed_sim/SensorAirspeedSim.cpp +++ b/src/modules/simulation/sensor_airspeed_sim/SensorAirspeedSim.cpp @@ -108,9 +108,12 @@ void SensorAirspeedSim::Run() updateParams(); } - if (_sim_failure.get() == 0) { - if (_vehicle_local_position_sub.updated() && _vehicle_global_position_sub.updated() - && _vehicle_attitude_sub.updated()) { + if (_vehicle_local_position_sub.updated() && _vehicle_global_position_sub.updated() + && _vehicle_attitude_sub.updated()) { + + check_failure_injection(); + + if (!_airspeed_disconnected) { vehicle_local_position_s lpos{}; _vehicle_local_position_sub.copy(&lpos); @@ -136,26 +139,95 @@ void SensorAirspeedSim::Run() const float density_ratio = powf(TEMPERATURE_MSL / temperature_local, 4.256f); const float air_density = AIR_DENSITY_MSL / density_ratio; - // calculate differential pressure + noise in hPa - const float diff_pressure_noise = (float)generate_wgn() * 0.01f; - float diff_pressure = sign(body_velocity(0)) * 0.005f * air_density * body_velocity(0) * body_velocity( - 0) + diff_pressure_noise; + if (!_airspeed_stuck) { + // calculate differential pressure + noise in hPa + const float diff_pressure_noise = (float)generate_wgn() * 0.01f; + float diff_pressure = sign(body_velocity(0)) * 0.005f * air_density * body_velocity(0) * body_velocity( + 0) + diff_pressure_noise; + // simulate pitot blockage: ramp down differential pressure over time + const float blockage_fraction = 0.7f; // max blockage (fully ramped) + const float airspeed_blockage_rampup_time = 30_s; + + float airspeed_blockage_scale = 1.f; + + if (_airspeed_blocked_timestamp > 0) { + airspeed_blockage_scale = math::constrain(1.f - (hrt_absolute_time() - _airspeed_blocked_timestamp) / + airspeed_blockage_rampup_time, 1.f - blockage_fraction, 1.f); + } + + _last_differential_pressure_pa = diff_pressure * 100.0f * airspeed_blockage_scale; // hPa to Pa + } differential_pressure_s differential_pressure{}; // report.timestamp_sample = time; differential_pressure.device_id = 1377548; // 1377548: DRV_DIFF_PRESS_DEVTYPE_SIM, BUS: 1, ADDR: 5, TYPE: SIMULATION - differential_pressure.differential_pressure_pa = (double)diff_pressure * 100.0; // hPa to Pa; + differential_pressure.differential_pressure_pa = _last_differential_pressure_pa; differential_pressure.temperature = temperature_local + ABSOLUTE_ZERO_C; // K to C differential_pressure.timestamp = hrt_absolute_time(); _differential_pressure_pub.publish(differential_pressure); - } } perf_end(_loop_perf); } +void SensorAirspeedSim::check_failure_injection() +{ + vehicle_command_s vehicle_command; + + while (_vehicle_command_sub.update(&vehicle_command)) { + if (vehicle_command.command != vehicle_command_s::VEHICLE_CMD_INJECT_FAILURE) { + continue; + } + + bool handled = false; + bool supported = false; + + const int failure_unit = static_cast(std::lround(vehicle_command.param1)); + const int failure_type = static_cast(std::lround(vehicle_command.param2)); + + if (failure_unit == vehicle_command_s::FAILURE_UNIT_SENSOR_AIRSPEED) { + + handled = true; + + if (failure_type == vehicle_command_s::FAILURE_TYPE_OFF) { + PX4_WARN("CMD_INJECT_FAILURE, airspeed off"); + supported = true; + _airspeed_disconnected = true; + + } else if (failure_type == vehicle_command_s::FAILURE_TYPE_STUCK) { + PX4_WARN("CMD_INJECT_FAILURE, airspeed stuck"); + supported = true; + _airspeed_stuck = true; + + } else if (failure_type == vehicle_command_s::FAILURE_TYPE_WRONG) { + PX4_WARN("CMD_INJECT_FAILURE, airspeed wrong (simulate pitot blockage)"); + supported = true; + _airspeed_blocked_timestamp = hrt_absolute_time(); + + } else if (failure_type == vehicle_command_s::FAILURE_TYPE_OK) { + PX4_INFO("CMD_INJECT_FAILURE, airspeed ok"); + supported = true; + _airspeed_disconnected = false; + _airspeed_stuck = false; + _airspeed_blocked_timestamp = 0; + } + } + + if (handled) { + vehicle_command_ack_s ack{}; + ack.command = vehicle_command.command; + ack.from_external = false; + ack.result = supported ? + vehicle_command_ack_s::VEHICLE_CMD_RESULT_ACCEPTED : + vehicle_command_ack_s::VEHICLE_CMD_RESULT_UNSUPPORTED; + ack.timestamp = hrt_absolute_time(); + _command_ack_pub.publish(ack); + } + } +} + int SensorAirspeedSim::task_spawn(int argc, char *argv[]) { SensorAirspeedSim *instance = new SensorAirspeedSim(); diff --git a/src/modules/simulation/sensor_airspeed_sim/SensorAirspeedSim.hpp b/src/modules/simulation/sensor_airspeed_sim/SensorAirspeedSim.hpp index 464cd4a36d..2adb3abe33 100644 --- a/src/modules/simulation/sensor_airspeed_sim/SensorAirspeedSim.hpp +++ b/src/modules/simulation/sensor_airspeed_sim/SensorAirspeedSim.hpp @@ -34,16 +34,21 @@ #pragma once #include +#include +#include #include #include #include #include +#include #include #include #include -#include #include +#include #include +#include +#include #include #include @@ -74,6 +79,8 @@ public: bool init(); + void check_failure_injection(); + private: void Run() override; @@ -87,12 +94,15 @@ private: uORB::Subscription _vehicle_attitude_sub{ORB_ID(vehicle_attitude)}; uORB::Subscription _vehicle_global_position_sub{ORB_ID(vehicle_global_position_groundtruth)}; uORB::Subscription _vehicle_local_position_sub{ORB_ID(vehicle_local_position_groundtruth)}; + uORB::Subscription _vehicle_command_sub{ORB_ID(vehicle_command)}; uORB::PublicationMulti _differential_pressure_pub{ORB_ID(differential_pressure)}; + uORB::Publication _command_ack_pub{ORB_ID(vehicle_command_ack)}; + + bool _airspeed_disconnected{false}; + bool _airspeed_stuck{false}; + hrt_abstime _airspeed_blocked_timestamp{0}; + float _last_differential_pressure_pa{0.f}; perf_counter_t _loop_perf{perf_alloc(PC_ELAPSED, MODULE_NAME": cycle")}; - - DEFINE_PARAMETERS( - (ParamInt) _sim_failure - ) }; diff --git a/src/modules/simulation/sensor_airspeed_sim/parameters.c b/src/modules/simulation/sensor_airspeed_sim/parameters.c deleted file mode 100644 index 99b1b64f7f..0000000000 --- a/src/modules/simulation/sensor_airspeed_sim/parameters.c +++ /dev/null @@ -1,56 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2023 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Enable simulated airspeed sensor instance - * - * @reboot_required true - * @min 0 - * @max 1 - * @group Sensors - * @value 0 Disabled - * @value 1 Enabled - */ -PARAM_DEFINE_INT32(SENS_EN_ARSPDSIM, 0); - -/** - * Dynamically simulate failure of airspeed sensor instance - * - * @reboot_required true - * @min 0 - * @max 1 - * @group Sensors - * @value 0 Disabled - * @value 1 Enabled - */ -PARAM_DEFINE_INT32(SIM_ARSPD_FAIL, 0); diff --git a/src/modules/simulation/sensor_airspeed_sim/parameters.yaml b/src/modules/simulation/sensor_airspeed_sim/parameters.yaml new file mode 100644 index 0000000000..d2f5f636b3 --- /dev/null +++ b/src/modules/simulation/sensor_airspeed_sim/parameters.yaml @@ -0,0 +1,15 @@ +module_name: sensor_airspeed_sim +parameters: +- group: Sensors + definitions: + SENS_EN_ARSPDSIM: + description: + short: Enable simulated airspeed sensor instance + type: enum + values: + 0: Disabled + 1: Enabled + default: 0 + reboot_required: true + min: 0 + max: 1 diff --git a/src/modules/simulation/sensor_baro_sim/CMakeLists.txt b/src/modules/simulation/sensor_baro_sim/CMakeLists.txt index 2a21973698..b58c372fd6 100644 --- a/src/modules/simulation/sensor_baro_sim/CMakeLists.txt +++ b/src/modules/simulation/sensor_baro_sim/CMakeLists.txt @@ -38,6 +38,8 @@ px4_add_module( SRCS SensorBaroSim.cpp SensorBaroSim.hpp + MODULE_CONFIG + parameters.yaml DEPENDS geo px4_work_queue diff --git a/src/modules/simulation/sensor_baro_sim/parameters.c b/src/modules/simulation/sensor_baro_sim/parameters.c deleted file mode 100644 index 33adf72019..0000000000 --- a/src/modules/simulation/sensor_baro_sim/parameters.c +++ /dev/null @@ -1,59 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2021 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Enable simulated barometer sensor instance - * - * @reboot_required true - * @min 0 - * @max 1 - * @group Sensors - * @value 0 Disabled - * @value 1 Enabled - */ -PARAM_DEFINE_INT32(SENS_EN_BAROSIM, 0); - -/** - * simulated barometer pressure offset - * - * @group Simulator - */ -PARAM_DEFINE_FLOAT(SIM_BARO_OFF_P, 0.0f); - -/** - * simulated barometer temperature offset - * - * @group Simulator - * @unit celcius - */ -PARAM_DEFINE_FLOAT(SIM_BARO_OFF_T, 0.0f); diff --git a/src/modules/simulation/sensor_baro_sim/parameters.yaml b/src/modules/simulation/sensor_baro_sim/parameters.yaml new file mode 100644 index 0000000000..996604464a --- /dev/null +++ b/src/modules/simulation/sensor_baro_sim/parameters.yaml @@ -0,0 +1,28 @@ +module_name: sensor_baro_sim +parameters: +- group: Sensors + definitions: + SENS_EN_BAROSIM: + description: + short: Enable simulated barometer sensor instance + type: enum + values: + 0: Disabled + 1: Enabled + default: 0 + reboot_required: true + min: 0 + max: 1 +- group: Simulator + definitions: + SIM_BARO_OFF_P: + description: + short: simulated barometer pressure offset + type: float + default: 0.0 + SIM_BARO_OFF_T: + description: + short: simulated barometer temperature offset + type: float + default: 0.0 + unit: celcius diff --git a/src/modules/simulation/sensor_gps_sim/CMakeLists.txt b/src/modules/simulation/sensor_gps_sim/CMakeLists.txt index 46e62f79ff..8f9d64e630 100644 --- a/src/modules/simulation/sensor_gps_sim/CMakeLists.txt +++ b/src/modules/simulation/sensor_gps_sim/CMakeLists.txt @@ -38,6 +38,8 @@ px4_add_module( SRCS SensorGpsSim.cpp SensorGpsSim.hpp + MODULE_CONFIG + parameters.yaml DEPENDS px4_work_queue ) diff --git a/src/modules/simulation/sensor_gps_sim/SensorGpsSim.cpp b/src/modules/simulation/sensor_gps_sim/SensorGpsSim.cpp index c6b94dcbf4..5bed55df26 100644 --- a/src/modules/simulation/sensor_gps_sim/SensorGpsSim.cpp +++ b/src/modules/simulation/sensor_gps_sim/SensorGpsSim.cpp @@ -116,11 +116,30 @@ void SensorGpsSim::Run() vehicle_global_position_s gpos{}; _vehicle_global_position_sub.copy(&gpos); - double latitude = gpos.lat + math::degrees((double)generate_wgn() * 0.2 / CONSTANTS_RADIUS_OF_EARTH); - double longitude = gpos.lon + math::degrees((double)generate_wgn() * 0.2 / CONSTANTS_RADIUS_OF_EARTH); - double altitude = (double)(gpos.alt + (generate_wgn() * 0.5f)); + // Correlated Markov process position noise (matching GZBridge model) + _gps_pos_noise_n = _pos_markov_time * _gps_pos_noise_n + + _pos_random_walk * generate_wgn() * _pos_noise_amplitude; - Vector3f gps_vel = Vector3f{lpos.vx, lpos.vy, lpos.vz} + noiseGauss3f(0.06f, 0.077f, 0.158f); + _gps_pos_noise_e = _pos_markov_time * _gps_pos_noise_e + + _pos_random_walk * generate_wgn() * _pos_noise_amplitude; + + _gps_pos_noise_d = _pos_markov_time * _gps_pos_noise_d + + _pos_random_walk * generate_wgn() * _pos_noise_amplitude * 1.5f; + + const double latitude = gpos.lat + math::degrees((double)_gps_pos_noise_n / CONSTANTS_RADIUS_OF_EARTH); + const double longitude = gpos.lon + math::degrees((double)_gps_pos_noise_e / CONSTANTS_RADIUS_OF_EARTH); + const double altitude = (double)(gpos.alt + _gps_pos_noise_d); + + _gps_vel_noise_n = _vel_markov_time * _gps_vel_noise_n + + _vel_noise_density * generate_wgn() * _vel_noise_amplitude; + + _gps_vel_noise_e = _vel_markov_time * _gps_vel_noise_e + + _vel_noise_density * generate_wgn() * _vel_noise_amplitude; + + _gps_vel_noise_d = _vel_markov_time * _gps_vel_noise_d + + _vel_noise_density * generate_wgn() * _vel_noise_amplitude * 1.2f; + + const Vector3f gps_vel = Vector3f{lpos.vx + _gps_vel_noise_n, lpos.vy + _gps_vel_noise_e, lpos.vz + _gps_vel_noise_d}; // device id device::Device::DeviceId device_id; diff --git a/src/modules/simulation/sensor_gps_sim/SensorGpsSim.hpp b/src/modules/simulation/sensor_gps_sim/SensorGpsSim.hpp index 9c74fc6528..a02360917a 100644 --- a/src/modules/simulation/sensor_gps_sim/SensorGpsSim.hpp +++ b/src/modules/simulation/sensor_gps_sim/SensorGpsSim.hpp @@ -84,6 +84,22 @@ private: perf_counter_t _loop_perf{perf_alloc(PC_ELAPSED, MODULE_NAME": cycle")}; + // GPS Markov process noise state + float _gps_pos_noise_n{0.0f}; + float _gps_pos_noise_e{0.0f}; + float _gps_pos_noise_d{0.0f}; + float _gps_vel_noise_n{0.0f}; + float _gps_vel_noise_e{0.0f}; + float _gps_vel_noise_d{0.0f}; + + // Gauss-Markov noise parameters, rate-corrected from GZBridge (30 Hz) to SIH (8 Hz) + static constexpr float _pos_noise_amplitude{0.8f}; + static constexpr float _pos_random_walk{0.02f}; + static constexpr float _pos_markov_time{0.76f}; + static constexpr float _vel_noise_amplitude{0.05f}; + static constexpr float _vel_noise_density{0.4f}; + static constexpr float _vel_markov_time{0.54f}; + DEFINE_PARAMETERS( (ParamInt) _sim_gps_used ) diff --git a/src/modules/simulation/sensor_gps_sim/parameters.c b/src/modules/simulation/sensor_gps_sim/parameters.c deleted file mode 100644 index c9d9c74555..0000000000 --- a/src/modules/simulation/sensor_gps_sim/parameters.c +++ /dev/null @@ -1,52 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2021 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ -/** - * Enable simulated GPS sinstance - * - * @reboot_required true - * @min 0 - * @max 1 - * @group Sensors - * @value 0 Disabled - * @value 1 Enabled - */ -PARAM_DEFINE_INT32(SENS_EN_GPSSIM, 0); - -/** - * simulated GPS number of satellites used - * - * @min 0 - * @max 50 - * @group Simulator - */ -PARAM_DEFINE_INT32(SIM_GPS_USED, 10); diff --git a/src/modules/simulation/sensor_gps_sim/parameters.yaml b/src/modules/simulation/sensor_gps_sim/parameters.yaml new file mode 100644 index 0000000000..899772f493 --- /dev/null +++ b/src/modules/simulation/sensor_gps_sim/parameters.yaml @@ -0,0 +1,24 @@ +module_name: sensor_gps_sim +parameters: +- group: Sensors + definitions: + SENS_EN_GPSSIM: + description: + short: Enable simulated GPS sinstance + type: enum + values: + 0: Disabled + 1: Enabled + default: 0 + reboot_required: true + min: 0 + max: 1 +- group: Simulator + definitions: + SIM_GPS_USED: + description: + short: simulated GPS number of satellites used + type: int32 + default: 10 + min: 0 + max: 50 diff --git a/src/modules/simulation/sensor_mag_sim/CMakeLists.txt b/src/modules/simulation/sensor_mag_sim/CMakeLists.txt index 1508a84ec2..664a3082f7 100644 --- a/src/modules/simulation/sensor_mag_sim/CMakeLists.txt +++ b/src/modules/simulation/sensor_mag_sim/CMakeLists.txt @@ -38,6 +38,8 @@ px4_add_module( SRCS SensorMagSim.cpp SensorMagSim.hpp + MODULE_CONFIG + parameters.yaml DEPENDS drivers_magnetometer geo diff --git a/src/modules/simulation/sensor_mag_sim/parameters.c b/src/modules/simulation/sensor_mag_sim/parameters.c deleted file mode 100644 index 1002a02663..0000000000 --- a/src/modules/simulation/sensor_mag_sim/parameters.c +++ /dev/null @@ -1,67 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2021 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ -/** - * Enable simulated magnetometer sensor instance - * - * @reboot_required true - * @min 0 - * @max 1 - * @group Sensors - * @value 0 Disabled - * @value 1 Enabled - */ -PARAM_DEFINE_INT32(SENS_EN_MAGSIM, 0); - -/** - * simulated magnetometer X offset - * - * @unit gauss - * @group Simulator - */ -PARAM_DEFINE_FLOAT(SIM_MAG_OFFSET_X, 0.0f); - -/** - * simulated magnetometer Y offset - * - * @unit gauss - * @group Simulator - */ -PARAM_DEFINE_FLOAT(SIM_MAG_OFFSET_Y, 0.0f); - -/** - * simulated magnetometer Z offset - * - * @unit gauss - * @group Simulator - */ -PARAM_DEFINE_FLOAT(SIM_MAG_OFFSET_Z, 0.0f); diff --git a/src/modules/simulation/sensor_mag_sim/parameters.yaml b/src/modules/simulation/sensor_mag_sim/parameters.yaml new file mode 100644 index 0000000000..3d7908c928 --- /dev/null +++ b/src/modules/simulation/sensor_mag_sim/parameters.yaml @@ -0,0 +1,35 @@ +module_name: sensor_mag_sim +parameters: +- group: Sensors + definitions: + SENS_EN_MAGSIM: + description: + short: Enable simulated magnetometer sensor instance + type: enum + values: + 0: Disabled + 1: Enabled + default: 0 + reboot_required: true + min: 0 + max: 1 +- group: Simulator + definitions: + SIM_MAG_OFFSET_X: + description: + short: simulated magnetometer X offset + type: float + default: 0.0 + unit: gauss + SIM_MAG_OFFSET_Y: + description: + short: simulated magnetometer Y offset + type: float + default: 0.0 + unit: gauss + SIM_MAG_OFFSET_Z: + description: + short: simulated magnetometer Z offset + type: float + default: 0.0 + unit: gauss diff --git a/src/modules/simulation/simulator_mavlink/SimulatorMavlink.cpp b/src/modules/simulation/simulator_mavlink/SimulatorMavlink.cpp index 342cfcd4e7..5a603af33c 100644 --- a/src/modules/simulation/simulator_mavlink/SimulatorMavlink.cpp +++ b/src/modules/simulation/simulator_mavlink/SimulatorMavlink.cpp @@ -54,7 +54,6 @@ #include #include #include -#include #include @@ -484,6 +483,11 @@ void SimulatorMavlink::handle_message_hil_gps(const mavlink_message_t *msg) if (_sensor_gps_pubs[i] == nullptr) { _sensor_gps_pubs[i] = new uORB::PublicationMulti {ORB_ID(sensor_gps)}; + + if (_sensor_gps_pubs[i] == nullptr) { + break; + } + _gps_ids[i] = hil_gps.id; device::Device::DeviceId device_id; @@ -1121,7 +1125,9 @@ void SimulatorMavlink::run() if (_ip == InternetProtocol::UDP) { - if ((_fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { + _fd = socket(AF_INET, SOCK_DGRAM, 0); + + if (_fd < 0) { PX4_ERR("Creating UDP socket failed: %s", strerror(errno)); return; } @@ -1154,7 +1160,9 @@ void SimulatorMavlink::run() PX4_INFO("Waiting for simulator to accept connection on TCP port %u", _port); while (true) { - if ((_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { + _fd = socket(AF_INET, SOCK_STREAM, 0); + + if (_fd < 0) { PX4_ERR("Creating TCP socket failed: %s", strerror(errno)); return; } @@ -1256,9 +1264,9 @@ void SimulatorMavlink::check_failure_injections() bool handled = false; bool supported = false; - const int failure_unit = static_cast(vehicle_command.param1 + 0.5f); - const int failure_type = static_cast(vehicle_command.param2 + 0.5f); - const int instance = static_cast(vehicle_command.param3 + 0.5f); + const int failure_unit = static_cast(std::lround(vehicle_command.param1)); + const int failure_type = static_cast(std::lround(vehicle_command.param2)); + const int instance = static_cast(std::lround(vehicle_command.param3)); if (failure_unit == vehicle_command_s::FAILURE_UNIT_SENSOR_GPS) { handled = true; @@ -1585,6 +1593,11 @@ int SimulatorMavlink::publish_distance_topic(const mavlink_distance_sensor_t *di if (_dist_pubs[i] == nullptr) { _dist_pubs[i] = new uORB::PublicationMulti {ORB_ID(distance_sensor)}; + + if (_dist_pubs[i] == nullptr) { + break; + } + _dist_sensor_ids[i] = dist.device_id; _dist_pubs[i]->publish(dist); break; diff --git a/src/modules/simulation/simulator_mavlink/SimulatorMavlink.hpp b/src/modules/simulation/simulator_mavlink/SimulatorMavlink.hpp index bf8c07bbf4..5c1e9481e8 100644 --- a/src/modules/simulation/simulator_mavlink/SimulatorMavlink.hpp +++ b/src/modules/simulation/simulator_mavlink/SimulatorMavlink.hpp @@ -134,10 +134,7 @@ public: bool has_initialized() { return _has_initialized.load(); } #endif -private: - SimulatorMavlink(); - - ~SimulatorMavlink() + virtual ~SimulatorMavlink() { // free perf counters perf_free(_perf_sim_delay); @@ -156,6 +153,8 @@ private: _instance = nullptr; } +private: + SimulatorMavlink(); void check_failure_injections(); diff --git a/src/modules/simulation/simulator_sih/CMakeLists.txt b/src/modules/simulation/simulator_sih/CMakeLists.txt index 3dc290a775..9bbb190de3 100644 --- a/src/modules/simulation/simulator_sih/CMakeLists.txt +++ b/src/modules/simulation/simulator_sih/CMakeLists.txt @@ -40,6 +40,8 @@ px4_add_module( aero.hpp sih.cpp sih.hpp + MODULE_CONFIG + sih_params.yaml DEPENDS mathlib drivers_accelerometer diff --git a/src/modules/simulation/simulator_sih/aero.hpp b/src/modules/simulation/simulator_sih/aero.hpp index 498acd9f23..1b353be7ff 100644 --- a/src/modules/simulation/simulator_sih/aero.hpp +++ b/src/modules/simulation/simulator_sih/aero.hpp @@ -65,6 +65,243 @@ #include // math::radians, // #include #include +#include // PX4_ISFINITE +#include // PX4_INFO + +// class Thruster using the terminology from UIUC Propeller Data site https://m-selig.ae.illinois.edu/props/propDB.html +class Thruster +{ +private: + static constexpr float INCH_TO_M = 0.0254f; + float CT0, CT1, CT2, CP0, CP1, CP2; + float _d_m; + float _rpm_max; + float T_MAX; + float Q_MAX; +public: + + // public implicit constructor + Thruster() : Thruster(0.1f, 1000.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f) {} + + /** public explicit constructor for static model + * using the maximum thrust and torque. + * In this case, the prop diameter and RPM are not needed. + */ + Thruster(float Tmax, float Qmax) + { + _d_m = 0.0f; + _rpm_max = 0.0f; + CT0 = 0.0f; + CT1 = 0.0f; + CT2 = 0.0f; + CP0 = 0.0f; + CP1 = 0.0f; + CP2 = 0.0f; + T_MAX = Tmax; + Q_MAX = Qmax; + } + + /** public explicit constructor + * - prop_dia_inch: propeller diameter in inches + * - rpm_max: max RPM + * - ct0, ct1, ct2: second order thrust coefficient + * - cp0, cp1, cp2: second order power coefficient + */ + Thruster(float prop_dia_inch, float rpm_max, float ct0, float ct1, float ct2, float cp0, float cp1, float cp2) + { + _d_m = dia_inch_to_m(prop_dia_inch); + _rpm_max = rpm_max; + CT0 = ct0; + CT1 = ct1; + CT2 = ct2; + CP0 = cp0; + CP1 = cp1; + CP2 = cp2; + // Initialize T_MAX and Q_MAX before they may be used inside the compute_* helpers + T_MAX = 0.0f; + Q_MAX = 0.0f; + T_MAX = compute_thrust_from_throttle(1.0f); + Q_MAX = compute_torque_from_throttle(1.0f); + } + + /** advance_ratio(float n_rev_s, float vx_ms) + * compute the advance ratio J = vx_ms / n_rev_s / d_m + * with + * - n_rev_s is the propeller rotational speed in revolution/s + * - vx_ms is the valocity seen by the thruster in m/s, + * usually projected on the propeller revolution axis + */ + float advance_ratio(float n_rev_s, float vx_ms) + { + return vx_ms / n_rev_s / _d_m; + } + + /** fCT(float J, float ct0, float ct1, float ct2) + * Compute the thrust coefficient ct from the advance ratio J + * + */ + float fCT(float J) + { + if (!PX4_ISFINITE(J)) { + return 0; + } + + // do not allow ct < 0 (i.e. windmill) + return fmaxf(CT0 + CT1 * J + CT2 * J * J, 0.0f); + } + + /** fCP(float J, float cp0, float cp1, float cp2) + * Compute the power coefficient cp from the advance ratio J + * + */ + float fCP(float J) + { + if (!PX4_ISFINITE(J)) { + return 0; + } + + return fmaxf(CP0 + CP1 * J + CP2 * J * J, 0.0f); + } + + /** compute_thrust(float n_rev_s, float vx_ms=0.0f, float rho=1.225f) + * Compute the thrust force in (N) given + * - n_rev_s is the propeller rotational speed in revolution/s + * - vx_ms is the velocity seen by the thruster in m/s, + * usually projected on the propeller revolution axis + * - rho is the density in kg/m^3 + */ + float compute_thrust(float n_rev_s, float vx_ms = 0.0f, float rho = 1.225f) + { + if (CT0 <= 0.0f || n_rev_s <= 1.0e-4f) { + return 0.0f; + } + + float J = advance_ratio(n_rev_s, vx_ms); + return fCT(J) * rho * n_rev_s * n_rev_s * _d_m * _d_m * _d_m * _d_m; + } + + /** compute_thrust_from_throttle(float u, float vx_ms=0.0f, float rho=1.225f) + * Compute the thrust force in (N) given + * - u is the thruster unit throttle in range [0,1] + * - vx_ms is the velocity seen by the thruster in m/s, + * usually projected on the propeller revolution axis + * - rho is the density in kg/m^3 + */ + float compute_thrust_from_throttle(float u, float vx_ms = 0.0f, float rho = 1.225f) + { + if (CT0 <= 0.0f) { + return T_MAX * u; + } + + float n_rev_s = throttle_to_rev_s(u, _rpm_max); + return compute_thrust(n_rev_s, vx_ms, rho); + } + + /** compute_torque(float n_rev_s, float vx_ms=0.0f, float rho=1.225f) + * Compute the propeller torque in (Nm) given + * - n_rev_s is the propeller rotational speed in revolution/s + * - vx_ms is the velocity seen by the thruster in m/s, + * usually projected on the propeller revolution axis + * - rho is the density in kg/m^3 + */ + float compute_torque(float n_rev_s, float vx_ms = 0.0f, float rho = 1.225f) + { + if (CP0 <= 0.0f || n_rev_s <= 1.0e-4f) { + return 0.0f; + } + + float J = advance_ratio(n_rev_s, vx_ms); + float cq = fCP(J) / 2.0f / M_PI_F; + return cq * rho * n_rev_s * n_rev_s * _d_m * _d_m * _d_m * _d_m * _d_m; + } + + /** compute_torque_from_throttle(float u, float vx_ms=0.0f, float rho=1.225f) + * Compute the propeller torque in (Nm) given + * - u is the thruster unit throttle in range [0,1] + * - vx_ms is the velocity seen by the thruster in m/s, + * usually projected on the propeller revolution axis + * - rho is the density in kg/m^3 + */ + float compute_torque_from_throttle(float u, float vx_ms = 0.0f, float rho = 1.225f) + { + if (CP0 <= 0.0f) { + return Q_MAX * u; + } + + float n_rev_s = throttle_to_rev_s(u, _rpm_max); + return compute_torque(n_rev_s, vx_ms, rho); + } + + /** dia_inch_to_m(float dia_inch) + * compute the propeller diameter in meter, + * given dia_inch the propeller diameter in inches. + */ + static float dia_inch_to_m(float dia_inch) + { + return dia_inch * INCH_TO_M; + } + + /** rpm_to_rev_s(float rpm) + * compute the propeller revolutions per seconds, + * given the propeller rpm. + */ + static float rpm_to_rev_s(float rpm) + { + return rpm / 60.0f; + } + + /** rev_s_to_rpm(float n_rev_s) + * compute the propeller rpm, + * given the propeller revolutions per seconds. + */ + static float rev_s_to_rpm(float n_rev_s) + { + return n_rev_s * 60.0f; + } + + /** throttle_to_rpm(float throttle, const float rpm_max) + * compute the propeller rpm, + * given the unit throttle u (in range [0,1]) + * and the max RPM rpm_max. + */ + static float throttle_to_rpm(float u, const float rpm_max) + { + return rpm_max * sqrtf(fminf(fmaxf(u, 0.0f), 1.0f)); + } + + /** throttle_to_rev_s(float throttle, const float rpm_max) + * compute the propeller revolution per seconds, + * given the unit throttle u (in range [0,1]) + * and the max RPM rpm_max. + */ + static float throttle_to_rev_s(float u, const float rpm_max) + { + return rpm_to_rev_s(throttle_to_rpm(u, rpm_max)); + } + + float get_T_max() + { + return T_MAX; + } + + float get_Q_max() + { + return Q_MAX; + } + + void print_status() + { + if (CT0 <= 0.0f) { + PX4_INFO("Thruster simple model: Tmax %.4f N, Qmax %.4f Nm", (double)T_MAX, (double)Q_MAX); + + } else { + PX4_INFO("Thruster dyn. model: dia %.4f m, max rpm %.0f, Tmax %.4f N, Qmax %.4f Nm", + (double)_d_m, (double)_rpm_max, (double)T_MAX, (double)Q_MAX); + PX4_INFO(" Tmax: %.3f N at 10 m/s, %.3f N at 20 m/s", + (double)compute_thrust_from_throttle(1.0f, 10.0f), (double)compute_thrust_from_throttle(1.0f, 20.0f)); + } + } +}; // class Aerodynamic Segment ------------------------------------------------------------------------ class AeroSeg diff --git a/src/modules/simulation/simulator_sih/sih.cpp b/src/modules/simulation/simulator_sih/sih.cpp index 68b9e380de..befa63a584 100644 --- a/src/modules/simulation/simulator_sih/sih.cpp +++ b/src/modules/simulation/simulator_sih/sih.cpp @@ -1,6 +1,6 @@ /**************************************************************************** * - * Copyright (c) 2019-2025 PX4 Development Team. All rights reserved. + * Copyright (c) 2019-2026 PX4 Development Team. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -57,7 +57,9 @@ ModuleBase::Descriptor Sih::desc{task_spawn, custom_command, print_usage}; Sih::Sih() : ModuleParams(nullptr) -{} +{ + srand(1234); // initialize the random seed once before calling generate_wgn() +} Sih::~Sih() { @@ -70,13 +72,13 @@ void Sih::run() _px4_accel.set_temperature(T1_C); _px4_gyro.set_temperature(T1_C); - init_variables(); parameters_updated(); const hrt_abstime task_start = hrt_absolute_time(); _last_run = task_start; _airspeed_time = task_start; _dist_snsr_time = task_start; + _ranging_beacon_time = task_start; _vehicle = static_cast(constrain(_sih_vtype.get(), static_cast(VehicleType::First), static_cast(VehicleType::Last))); @@ -100,7 +102,6 @@ static uint64_t micros() void Sih::lockstep_loop() { - int rate = math::min(_imu_gyro_ratemax.get(), _imu_integration_rate.get()); // default to 400Hz (2500 us interval) @@ -232,6 +233,12 @@ void Sih::sensor_step() send_dist_snsr(now); } + // ranging beacon published at 2 Hz (each beacon at 0.5 Hz) + if (now - _ranging_beacon_time >= 500_ms) { + _ranging_beacon_time = now; + send_ranging_beacon(now); + } + publish_ground_truth(now); perf_end(_loop_perf); @@ -245,6 +252,37 @@ void Sih::parameters_updated() _L_PITCH = _sih_l_pitch.get(); _KDV = _sih_kdv.get(); _KDW = _sih_kdw.get(); + _F_T_MAX = _sih_f_thrust_max.get(); + _F_Q_MAX = _sih_f_torque_max.get(); + + // update the thruster models + for (size_t i = 0; i < NUM_DYN_THRUSTER; i++) { + if (_sih_f_ct0.get() > 0.0f && _sih_f_cp0.get() > 0.0f) { + _thruster[i] = Thruster(_sih_forward_diameter_inch.get(), _sih_forward_rpm_max.get(), + _sih_f_ct0.get(), _sih_f_ct1.get(), _sih_f_ct2.get(), + _sih_f_cp0.get(), _sih_f_cp1.get(), _sih_f_cp2.get()); + + } else { + _thruster[i] = Thruster(_F_T_MAX, _F_Q_MAX); + } + } + + if (_sih_f_ct0.get() > 0.0f && _sih_f_cp0.get() > 0.0f) { + _F_T_MAX = _thruster[0].get_T_max(); + _F_Q_MAX = _thruster[0].get_Q_max(); + + if (fabsf(_F_T_MAX - _sih_f_thrust_max.get()) > 1.0e-5f) { + _sih_f_thrust_max.set(_F_T_MAX); + _sih_f_thrust_max.commit(); + PX4_INFO("SIH_F_CT0 > 0, using propeller dynamic model, overriding SIH_F_T_MAX"); + } + + if (fabsf(_F_Q_MAX - _sih_f_torque_max.get()) > 1.0e-5f) { + _sih_f_torque_max.set(_F_Q_MAX); + _sih_f_torque_max.commit(); + PX4_INFO("SIH_F_CP0 > 0, using propeller dynamic model, overriding SIH_F_Q_MAX"); + } + } if (!_lpos_ref.isInitialized() || (fabsf(static_cast(_lpos_ref.getProjectionReferenceLat()) - _sih_lat0.get()) > FLT_EPSILON) @@ -259,7 +297,7 @@ void Sih::parameters_updated() _lla.setAltitude(_lpos_ref_alt); _p_E = _lla.toEcef(); - const Dcmf R_E2N = computeRotEcefToNed(_lla); + const Dcmf R_E2N = _lla.computeRotEcefToNed(); _R_N2E = R_E2N.transpose(); _v_E = _R_N2E * _v_N; @@ -282,22 +320,8 @@ void Sih::parameters_updated() _distance_snsr_override = _sih_distance_snsr_override.get(); _T_TAU = _sih_thrust_tau.get(); -} -void Sih::init_variables() -{ - srand(1234); // initialize the random seed once before calling generate_wgn() - - _lpos = Vector3f(0.0f, 0.0f, 0.0f); - _v_N = Vector3f(0.0f, 0.0f, 0.0f); - _v_N_dot = Vector3f(0.0f, 0.0f, 0.0f); - _p_E = Vector3d(Wgs84::equatorial_radius, 0.0, 0.0); - _v_E = Vector3f(0.0f, 0.0f, 0.0f); - _q = Quatf(1.0f, 0.0f, 0.0f, 0.0f); - _q_E = Quatf(Eulerf(0.f, -M_PI_2_F, 0.f)); - _w_B = Vector3f(0.0f, 0.0f, 0.0f); - - _u[0] = _u[1] = _u[2] = _u[3] = 0.0f; + _v_wind_N = Vector3f(_sih_wind_n.get(), _sih_wind_e.get(), 0.f); } void Sih::read_motors(const float dt) @@ -321,13 +345,18 @@ void Sih::read_motors(const float dt) void Sih::generate_force_and_torques(const float dt) { + // air-relative velocity in body frame [m/s] + _v_B = _q_E.rotateVectorInverse(_R_N2E * _v_apparent_N); + if (_vehicle == VehicleType::Quadcopter) { + _T_B = Vector3f(0.0f, 0.0f, -_T_MAX * (+_u[0] + _u[1] + _u[2] + _u[3])); _Mt_B = Vector3f(_L_ROLL * _T_MAX * (-_u[0] + _u[1] + _u[2] - _u[3]), _L_PITCH * _T_MAX * (+_u[0] - _u[1] + _u[2] - _u[3]), _Q_MAX * (+_u[0] + _u[1] - _u[2] - _u[3])); - _Fa_E = -_KDV * _v_E; // first order drag to slow down the aircraft - _Ma_B = -_KDW * _w_B; // first order angular damper + + _Fa_E = -_KDV * _R_N2E * _v_apparent_N; // first order drag to slow down the aircraft + _Ma_B = -_KDW * _w_B; // first order angular damper } else if (_vehicle == VehicleType::Hexacopter) { /* m5 m0 ┬ @@ -337,36 +366,48 @@ void Sih::generate_force_and_torques(const float dt) m3 m2 ├1/2┤ ├ 1 ┤ */ - _T_B = Vector3f(0.0f, 0.0f, -_T_MAX * (+_u[0] + _u[1] + _u[2] + _u[3] + _u[4] + _u[5])); - _Mt_B = Vector3f(_L_ROLL * _T_MAX * (-.5f * _u[0] - _u[1] - .5f * _u[2] + .5f * _u[3] + _u[4] + .5f * _u[5]), - _L_PITCH * _T_MAX * (M_SQRT3_F / 2.f) * (+_u[0] - _u[2] - _u[3] + _u[5]), - _Q_MAX * (+_u[0] - _u[1] + _u[2] - _u[3] + _u[4] - _u[5])); - _Fa_E = -_KDV * _v_E; // first order drag to slow down the aircraft + float u_sq[6]; + + for (int i = 0; i < 6; ++i) { + u_sq[i] = _u[i] * _u[i]; // quadratic thrust model, keep _u[i] intact for the filter + } + + _T_B = Vector3f(0.0f, 0.0f, -_T_MAX * (+u_sq[0] + u_sq[1] + u_sq[2] + u_sq[3] + u_sq[4] + u_sq[5])); + _Mt_B = Vector3f(_L_ROLL * _T_MAX * (-.5f * u_sq[0] - u_sq[1] - .5f * u_sq[2] + .5f * u_sq[3] + u_sq[4] + .5f * u_sq[5]), + _L_PITCH * _T_MAX * (M_SQRT3_F / 2.f) * (+u_sq[0] - u_sq[2] - u_sq[3] + u_sq[5]), + _Q_MAX * (+u_sq[0] - u_sq[1] + u_sq[2] - u_sq[3] + u_sq[4] - u_sq[5])); + _Fa_E = -_KDV * _R_N2E * _v_apparent_N; // first order drag to slow down the aircraft _Ma_B = -_KDW * _w_B; // first order angular damper } else if (_vehicle == VehicleType::FixedWing) { - _T_B = Vector3f(_T_MAX * _u[3], 0.0f, 0.0f); // forward thruster - // _Mt_B = Vector3f(_Q_MAX*_u[3], 0.0f,0.0f); // thruster torque - _Mt_B = Vector3f(); - generate_fw_aerodynamics(_u[0], _u[1], _u[2], _u[3]); + + _T[0] = _thruster[0].compute_thrust_from_throttle(_u[3], _v_B(0)); + _Q[0] = _thruster[0].compute_torque_from_throttle(_u[3], _v_B(0)); + _T_B = Vector3f(_T[0], 0.0f, 0.0f); // forward thruster + _Mt_B = Vector3f(_Q[0], 0.0f, 0.0f); // thruster torque + generate_fw_aerodynamics(_u[0], _u[1], _u[2], _T[0]); } else if (_vehicle == VehicleType::TailsitterVTOL) { - _T_B = Vector3f(0.0f, 0.0f, -_T_MAX * (_u[0] + _u[1])); - _Mt_B = Vector3f(_L_ROLL * _T_MAX * (_u[1] - _u[0]), 0.0f, _Q_MAX * (_u[1] - _u[0])); - generate_ts_aerodynamics(); - // _Fa_E = -_KDV * _v_E; // first order drag to slow down the aircraft - // _Ma_B = -_KDW * _w_B; // first order angular damper + for (size_t i = 0; i < NUM_DYN_THRUSTER; i++) { + _T[i] = _thruster[i].compute_thrust_from_throttle(_u[i], -_v_B(2)); + _Q[i] = _thruster[i].compute_torque_from_throttle(_u[i], -_v_B(2)); + } + + _T_B = Vector3f(0.0f, 0.0f, -_T[0] - _T[1]); + _Mt_B = Vector3f(_L_ROLL * (_T[1] - _T[0]), 0.0f, _Q[1] - _Q[0]); + generate_ts_aerodynamics(); } else if (_vehicle == VehicleType::StandardVTOL) { - _T_B = Vector3f(_T_MAX * 2 * _u[7], 0.0f, -_T_MAX * (+_u[0] + _u[1] + _u[2] + _u[3])); - _Mt_B = Vector3f(_L_ROLL * _T_MAX * (-_u[0] + _u[1] + _u[2] - _u[3]), + _T[0] = _thruster[0].compute_thrust_from_throttle(_u[7], _v_B(0)); + _Q[0] = _thruster[0].compute_torque_from_throttle(_u[7], _v_B(0)); + _T_B = Vector3f(_T[0], 0.0f, -_T_MAX * (+_u[0] + _u[1] + _u[2] + _u[3])); + _Mt_B = Vector3f(_L_ROLL * _T_MAX * (-_u[0] + _u[1] + _u[2] - _u[3]) + _Q[0], _L_PITCH * _T_MAX * (+_u[0] - _u[1] + _u[2] - _u[3]), _Q_MAX * (+_u[0] + _u[1] - _u[2] - _u[3])); - // thrust 0 because it is already contained in _T_B. in - // equations_of_motion they are all summed into sum_of_forces_E + // thrust 0 means no propwash on the tail generate_fw_aerodynamics(_u[4], _u[5], _u[6], 0); } else if (_vehicle == VehicleType::RoverAckermann) { @@ -375,21 +416,20 @@ void Sih::generate_force_and_torques(const float dt) } void Sih::generate_fw_aerodynamics(const float roll_cmd, const float pitch_cmd, const float yaw_cmd, - const float throttle_cmd) + const float thrust_for_prowash) { - const Vector3f v_B = _q_E.rotateVectorInverse(_v_E); const float &alt = _lla.altitude(); - _wing_l.update_aero(v_B, _w_B, alt, roll_cmd * FLAP_MAX); - _wing_r.update_aero(v_B, _w_B, alt, -roll_cmd * FLAP_MAX); + _wing_l.update_aero(_v_B, _w_B, alt, roll_cmd * FLAP_MAX); + _wing_r.update_aero(_v_B, _w_B, alt, -roll_cmd * FLAP_MAX); - _tailplane.update_aero(v_B, _w_B, alt, -pitch_cmd * FLAP_MAX, _T_MAX * throttle_cmd); - _fin.update_aero(v_B, _w_B, alt, yaw_cmd * FLAP_MAX, _T_MAX * throttle_cmd); - _fuselage.update_aero(v_B, _w_B, alt); + _tailplane.update_aero(_v_B, _w_B, alt, -pitch_cmd * FLAP_MAX, thrust_for_prowash); + _fin.update_aero(_v_B, _w_B, alt, yaw_cmd * FLAP_MAX, thrust_for_prowash); + _fuselage.update_aero(_v_B, _w_B, alt); // sum of aerodynamic forces const Vector3f Fa_B = _wing_l.get_Fa() + _wing_r.get_Fa() + _tailplane.get_Fa() + _fin.get_Fa() + _fuselage.get_Fa() - - _KDV * v_B; + _KDV * _v_B; _Fa_E = _q_E.rotateVector(Fa_B); // aerodynamic moments @@ -398,11 +438,8 @@ void Sih::generate_fw_aerodynamics(const float roll_cmd, const float pitch_cmd, void Sih::generate_ts_aerodynamics() { - // velocity in body frame [m/s] - const Vector3f v_B = _q_E.rotateVectorInverse(_v_E); - // the aerodynamic is resolved in a frame like a standard aircraft (nose-right-belly) - Vector3f v_ts = _R_S2B.transpose() * v_B; + Vector3f v_ts = _R_S2B.transpose() * _v_B; Vector3f w_ts = _R_S2B.transpose() * _w_B; float altitude = _lpos_ref_alt - _lpos(2); @@ -411,17 +448,17 @@ void Sih::generate_ts_aerodynamics() for (int i = 0; i < NB_TS_SEG; i++) { if (i <= NB_TS_SEG / 2) { - _ts[i].update_aero(v_ts, w_ts, altitude, _u[5]*TS_DEF_MAX, _T_MAX * _u[1]); + _ts[i].update_aero(v_ts, w_ts, altitude, _u[5]*TS_DEF_MAX, _T[1]); } else { - _ts[i].update_aero(v_ts, w_ts, altitude, -_u[4]*TS_DEF_MAX, _T_MAX * _u[0]); + _ts[i].update_aero(v_ts, w_ts, altitude, -_u[4]*TS_DEF_MAX, _T[0]); } Fa_ts += _ts[i].get_Fa(); Ma_ts += _ts[i].get_Ma(); } - const Vector3f Fa_B = _R_S2B * Fa_ts - _KDV * v_B; // sum of aerodynamic forces + const Vector3f Fa_B = _R_S2B * Fa_ts - _KDV * _v_B; // sum of aerodynamic forces _Fa_E = _q_E.rotateVector(Fa_B); _Ma_B = _R_S2B * Ma_ts - _KDW * _w_B; // aerodynamic moments } @@ -583,31 +620,17 @@ void Sih::ecefToNed() { _lla = LatLonAlt::fromEcef(_p_E); - const Dcmf C_SE = computeRotEcefToNed(_lla); + const Dcmf C_SE = _lla.computeRotEcefToNed(); _R_N2E = C_SE.transpose(); // Transform velocity to NED frame _v_N = C_SE * _v_E; + _v_apparent_N = _v_N + _v_wind_N; + _q = Quatf(C_SE) * _q_E; _q.normalize(); } -Dcmf Sih::computeRotEcefToNed(const LatLonAlt &lla) -{ - // Calculate the ECEF to NED coordinate transformation matrix - const double cos_lat = cos(lla.latitude_rad()); - const double sin_lat = sin(lla.latitude_rad()); - const double cos_lon = cos(lla.longitude_rad()); - const double sin_lon = sin(lla.longitude_rad()); - - const float val[] = {(float)(-sin_lat * cos_lon), (float)(-sin_lat * sin_lon), (float)cos_lat, - (float) - sin_lon, (float)cos_lon, 0.f, - (float)(-cos_lat * cos_lon), (float)(-cos_lat * sin_lon), (float) - sin_lat - }; - - return Dcmf(val); -} - void Sih::reconstruct_sensors_signals(const hrt_abstime &time_now_us) { // The sensor signals reconstruction and noise levels are from [1] @@ -646,8 +669,8 @@ void Sih::send_airspeed(const hrt_abstime &time_now_us) airspeed_s airspeed{}; airspeed.timestamp_sample = time_now_us; - // regardless of vehicle type, body frame, etc this holds as long as wind=0 - airspeed.true_airspeed_m_s = fmaxf(0.1f, _v_E.norm() + generate_wgn() * 0.2f); + // Assume the pitot tube always points against the wind to not have tailsitter edge cases + airspeed.true_airspeed_m_s = fmaxf(0.1f, _v_apparent_N.norm() + generate_wgn() * 0.2f); airspeed.indicated_airspeed_m_s = airspeed.true_airspeed_m_s * sqrtf(_wing_l.get_rho() / RHO); airspeed.confidence = 0.7f; airspeed.timestamp = hrt_absolute_time(); @@ -688,6 +711,55 @@ void Sih::send_dist_snsr(const hrt_abstime &time_now_us) _distance_snsr_pub.publish(distance_sensor); } +void Sih::send_ranging_beacon(const hrt_abstime &time_now_us) +{ + if (_lpos_ref.isInitialized()) { + + if (!_beacons_configured) { + _beacons_configured = true; + + for (uint8_t i = 0; i < NUM_RANGING_BEACONS; i++) { + _lpos_ref.reproject(RANGING_BEACON_OFFSETS[i].north_m, RANGING_BEACON_OFFSETS[i].east_m, + _ranging_beacons[i].lat_deg, _ranging_beacons[i].lon_deg); + _ranging_beacons[i].alt_m = _sih_h0.get() + RANGING_BEACON_OFFSETS[i].alt_offset_m; + } + } + + const RangingBeaconConfig &beacon = _ranging_beacons[_ranging_beacon_idx]; + const LatLonAlt beacon_lla(beacon.lat_deg, beacon.lon_deg, beacon.alt_m); + const matrix::Vector3d beacon_ecef = beacon_lla.toEcef(); + + // Compute true range in ECEF + const matrix::Vector3d delta_ecef = beacon_ecef - _p_E; + const double true_range_m = delta_ecef.norm(); + + const float noise_std = _sih_ranging_beacon_noise.get(); + const float noise_m = (noise_std > 0.f) ? generate_wgn() * noise_std : 0.f; + const double measured_range_m = math::max(0.0, true_range_m + static_cast(noise_m)); + + ranging_beacon_s msg{}; + msg.timestamp = hrt_absolute_time(); + msg.timestamp_sample = time_now_us; + msg.beacon_id = _ranging_beacon_idx; + msg.range = static_cast(measured_range_m); + msg.lat = beacon.lat_deg; + msg.lon = beacon.lon_deg; + msg.alt = beacon.alt_m; + msg.alt_type = 0; // WGS84 + msg.hacc = 1.0f; + msg.vacc = 1.0f; + msg.range_accuracy = noise_std; + msg.sequence_nr = 0; + msg.status = 0; + msg.carrier_freq = 0; + + _ranging_beacon_pub.publish(msg); + + // cycle through the beacons + _ranging_beacon_idx = (_ranging_beacon_idx + 1) % NUM_RANGING_BEACONS; + } +} + void Sih::publish_ground_truth(const hrt_abstime &time_now_us) { { @@ -812,15 +884,21 @@ int Sih::print_status() } else if (_vehicle == VehicleType::FixedWing) { PX4_INFO("Fixed-Wing"); + PX4_INFO("propeller model:"); + _thruster[0].print_status(); } else if (_vehicle == VehicleType::TailsitterVTOL) { PX4_INFO("TailSitter"); + PX4_INFO("propeller model:"); + _thruster[0].print_status(); PX4_INFO("aoa [deg]: %d", (int)(degrees(_ts[4].get_aoa()))); PX4_INFO("v segment (m/s)"); _ts[4].get_vS().print(); } else if (_vehicle == VehicleType::StandardVTOL) { PX4_INFO("Standard VTOL"); + PX4_INFO("pusher propeller model:"); + _thruster[0].print_status(); } else if (_vehicle == VehicleType::RoverAckermann) { PX4_INFO("Rover Ackermann"); @@ -842,6 +920,8 @@ int Sih::print_status() (_R_N2E.transpose() * _Fa_E).print(); PX4_INFO("Aerodynamic moments body frame (Nm)"); _Ma_B.print(); + PX4_INFO("Thruster forces in body frame (N)"); + _T_B.print(); PX4_INFO("Thruster moments in body frame (Nm)"); _Mt_B.print(); return 0; diff --git a/src/modules/simulation/simulator_sih/sih.hpp b/src/modules/simulation/simulator_sih/sih.hpp index 8504d26285..7e64672ea8 100644 --- a/src/modules/simulation/simulator_sih/sih.hpp +++ b/src/modules/simulation/simulator_sih/sih.hpp @@ -1,6 +1,6 @@ /**************************************************************************** * -* Copyright (c) 2019-2025 PX4 Development Team. All rights reserved. +* Copyright (c) 2019-2026 PX4 Development Team. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -40,19 +40,19 @@ * Coriolis g Corporation - January 2019 */ -// The sensor signals reconstruction and noise levels are from [1] -// [1] Bulka E, and Nahon M, "Autonomous fixed-wing aerobatics: from theory to flight." -// In 2018 IEEE International Conference on Robotics and Automation (ICRA), pp. 6573-6580. IEEE, 2018. -// The aerodynamic model is from [2] -// [2] Khan W, supervised by Nahon M, "Dynamics modeling of agile fixed-wing unmanned aerial vehicles." -// McGill University (Canada), PhD thesis, 2016. -// The quaternion integration are from [3] -// [3] Sveier A, Sjøberg AM, Egeland O. "Applied Runge–Kutta–Munthe-Kaas Integration for the Quaternion Kinematics." -// Journal of Guidance, Control, and Dynamics. 2019 Dec;42(12):2747-54. -// The tailsitter model is from [4] -// [4] Chiappinelli R, supervised by Nahon M, "Modeling and control of a flying wing tailsitter unmanned aerial vehicle." -// McGill University (Canada), Masters Thesis, 2018. - +/** The sensor signals reconstruction and noise levels are from [1]. The aerodynamic model is from [2]. + * The quaternion integration are from [3]. The tailsitter model is from [4]. The propeller models are from [5] + * [1] Bulka E, and Nahon M, "Autonomous fixed-wing aerobatics: from theory to flight." + * In 2018 IEEE International Conference on Robotics and Automation (ICRA), pp. 6573-6580. IEEE, 2018. + * [2] Khan W, supervised by Nahon M, "Dynamics modeling of agile fixed-wing unmanned aerial vehicles." + * McGill University (Canada), PhD thesis, 2016. + * [3] Sveier A, Sjøberg AM, Egeland O. "Applied Runge–Kutta–Munthe-Kaas Integration for the Quaternion Kinematics." + * Journal of Guidance, Control, and Dynamics. 2019 Dec;42(12):2747-54. + * [4] Chiappinelli R, supervised by Nahon M, "Modeling and control of a flying wing tailsitter unmanned aerial vehicle." + * McGill University (Canada), Masters Thesis, 2018. + * [5] J.B. Brandt, R.W. Deters, G.K. Ananda, O.D. Dantsker, and M.S. Selig 2026, UIUC Propeller Database, + * Vols 1-4, University of Illinois at Urbana-Champaign, Department of Aerospace Engineering, retrieved from https://m-selig.ae.illinois.edu/props/propDB.html. + */ #pragma once #include @@ -79,6 +79,7 @@ #include #include #include +#include #if defined(ENABLE_LOCKSTEP_SCHEDULER) #include @@ -128,6 +129,7 @@ private: PX4Gyroscope _px4_gyro{1310988}; // 1310988: DRV_IMU_DEVTYPE_SIM, BUS: 1, ADDR: 1, TYPE: SIMULATION uORB::Publication _distance_snsr_pub{ORB_ID(distance_sensor)}; uORB::Publication _airspeed_pub{ORB_ID(airspeed)}; + uORB::Publication _ranging_beacon_pub{ORB_ID(ranging_beacon)}; // groundtruth uORB::Publication _angular_velocity_ground_truth_pub{ORB_ID(vehicle_angular_velocity_groundtruth)}; @@ -140,6 +142,30 @@ private: // hard constants static constexpr uint16_t NUM_ACTUATORS_MAX = 9; + static constexpr uint16_t NUM_DYN_THRUSTER = 2; // number of dynamic thruster model with advance ratio + + // Ranging beacon simulation constants + static constexpr uint8_t NUM_RANGING_BEACONS = 4; + bool _beacons_configured{false}; + struct RangingBeaconConfig { + double lat_deg; + double lon_deg; + float alt_m; + }; + struct RangingBeaconOffset { + float north_m; + float east_m; + float alt_offset_m; + }; + // NED offsets from SIH_LOC_LAT0/LON0/H0, resolved once in init_variables() + static constexpr RangingBeaconOffset RANGING_BEACON_OFFSETS[NUM_RANGING_BEACONS] = { + { 5000.f, 0.f, 30.f}, // ~5 km North + { 0.f, 10000.f, 0.f}, // ~10 km East + {-20000.f, -15000.f, 110.f}, // ~20 km South-West + { 35000.f, 45000.f, 310.f} // ~50 km North-East + }; + RangingBeaconConfig _ranging_beacons[NUM_RANGING_BEACONS] {}; + static constexpr float T1_C = 15.0f; // ground temperature in Celsius static constexpr float T1_K = T1_C - atmosphere::kAbsoluteNullCelsius; // ground temperature in Kelvin static constexpr float TEMP_GRADIENT = -6.5f / 1000.0f; // temperature gradient in degrees per metre @@ -150,8 +176,6 @@ private: static constexpr float RP = 0.1f; // radius of the propeller [m] static constexpr float FLAP_MAX = M_PI_F / 12.0f; // 15 deg, maximum control surface deflection - void init_variables(); - // read the motor signals outputted from the mixer void read_motors(const float dt); @@ -165,15 +189,15 @@ private: void reconstruct_sensors_signals(const hrt_abstime &time_now_us); void send_airspeed(const hrt_abstime &time_now_us); void send_dist_snsr(const hrt_abstime &time_now_us); + void send_ranging_beacon(const hrt_abstime &time_now_us); void publish_ground_truth(const hrt_abstime &time_now_us); - void generate_fw_aerodynamics(const float roll_cmd, const float pitch_cmd, const float yaw_cmd, const float thrust); + void generate_fw_aerodynamics(const float roll_cmd, const float pitch_cmd, const float yaw_cmd, const float thrust_for_prowash); void generate_ts_aerodynamics(); void generate_rover_ackermann_dynamics(const float throttle_cmd, const float steering_cmd, const float dt); void sensor_step(); static float computeGravity(double lat); void ecefToNed(); - static matrix::Dcmf computeRotEcefToNed(const LatLonAlt &lla); struct Wgs84 { static constexpr double equatorial_radius = 6378137.0; @@ -201,30 +225,43 @@ private: hrt_abstime _last_actuator_output_time{0}; hrt_abstime _airspeed_time{0}; hrt_abstime _dist_snsr_time{0}; + hrt_abstime _ranging_beacon_time{0}; + uint8_t _ranging_beacon_idx{0}; - bool _grounded{true};// whether the vehicle is on the ground + bool _grounded{true}; // whether the vehicle is on the ground - matrix::Vector3f _T_B{}; // thrust force in body frame [N] - matrix::Vector3f _Mt_B{}; // thruster moments in the body frame [Nm] - matrix::Vector3f _Ma_B{}; // aerodynamic moments in the body frame [Nm] - matrix::Vector3f _lpos{}; // position in a local tangent-plane frame [m] - matrix::Vector3f _v_N{}; // velocity in local navigation frame (NED, body-fixed) [m/s] - matrix::Vector3f _v_N_dot{}; // time derivative of velocity in local navigation frame [m/s2] - matrix::Quatf _q{}; // quaternion attitude in local navigation frame - matrix::Vector3f _w_B{}; // body rates in body frame [rad/s] + // Quantities in body frame (FRD) + matrix::Vector3f _T_B{}; // thrust force [N] + matrix::Vector3f _Mt_B{}; // thruster moments [Nm] + matrix::Vector3f _Ma_B{}; // aerodynamic moments [Nm] + matrix::Vector3f _w_B{}; // body rates in body frame [rad/s] + matrix::Vector3f _v_B{}; // body frame velocity [m/s] - LatLonAlt _lla{}; + // Quantities in local navigation frame (NED, body-fixed) + matrix::Vector3f _v_N{}; // velocity [m/s] + matrix::Vector3f _v_N_dot{}; // time derivative of velocity [m/s^2] + matrix::Vector3f _v_wind_N{}; // wind velocity [m/s] + matrix::Vector3f _v_apparent_N{}; // vehicle velocity relative to the air [m/s] // Quantities in Earth-centered-Earth-fixed coordinates - matrix::Vector3f _Fa_E{}; // aerodynamic force in ECEF frame [N] - matrix::Vector3f _specific_force_E{}; - matrix::Quatf _q_E{}; - matrix::Vector3d _p_E{}; - matrix::Vector3f _v_E{}; - matrix::Vector3f _v_E_dot{}; - matrix::Dcmf _R_N2E; // local navigation to ECEF frame rotation matrix + matrix::Vector3f _Fa_E{}; // aerodynamic force [N] + matrix::Vector3d _p_E{}; // position [m] + matrix::Vector3f _v_E{}; // velocity [m/s] + matrix::Vector3f _v_E_dot{}; // time derivative of velocity [m/s^2] + matrix::Vector3f _specific_force_E{}; // acceleration except gravity (for IMU) [m/s^2] + + // Frame conversion + matrix::Quatf _q_E{}; // Attitude quaternion (rotation from body to ECEF frame) + matrix::Quatf _q{}; // Attitude quaternion (rotation from body to local navigation frame) + matrix::Dcmf _R_N2E; // Rotation matrix from local navigation to ECEF frame + + LatLonAlt _lla{}; + matrix::Vector3f _lpos{}; // position in a local tangent-plane frame [m] float _u[NUM_ACTUATORS_MAX] {}; // thruster signals + float _T[NUM_DYN_THRUSTER] {}; // thruster forces (N) + float _Q[NUM_DYN_THRUSTER] {}; // thruster torque (Nm) + Thruster _thruster[NUM_DYN_THRUSTER] {}; // thruster objects enum class VehicleType {Quadcopter, FixedWing, TailsitterVTOL, StandardVTOL, Hexacopter, RoverAckermann, First = Quadcopter, Last = RoverAckermann}; // numbering dependent on parameter SIH_VEHICLE_TYPE VehicleType _vehicle = VehicleType::Quadcopter; @@ -261,22 +298,10 @@ private: AeroSeg(0.0225f, 0.110f, 0.0f, matrix::Vector3f(0.083f - TS_CM, 0.239f, 0.0f), 0.0f, TS_AR) }; - // AeroSeg _ts[NB_TS_SEG] = { - // AeroSeg(0.0225f, 0.110f, -90.0f, matrix::Vector3f(0.0f, -0.239f, TS_CM-0.083f), 0.0f, TS_AR), - // AeroSeg(0.0383f, 0.125f, -90.0f, matrix::Vector3f(0.0f, -0.208f, TS_CM-0.094f), 0.0f, TS_AR, 0.063f), - // AeroSeg(0.0884f, 0.148f, -90.0f, matrix::Vector3f(0.0f, -0.143f, TS_CM-0.111f), 0.0f, TS_AR, 0.063f, TS_RP), - // AeroSeg(0.0633f, 0.176f, -90.0f, matrix::Vector3f(0.0f, -0.068f, TS_CM-0.132f), 0.0f, TS_AR, 0.063f), - // AeroSeg(0.0750f, 0.231f, -90.0f, matrix::Vector3f(0.0f, 0.000f, TS_CM-0.173f), 0.0f, TS_AR), - // AeroSeg(0.0633f, 0.176f, -90.0f, matrix::Vector3f(0.0f, 0.068f, TS_CM-0.132f), 0.0f, TS_AR, 0.063f), - // AeroSeg(0.0884f, 0.148f, -90.0f, matrix::Vector3f(0.0f, 0.143f, TS_CM-0.111f), 0.0f, TS_AR, 0.063f, TS_RP), - // AeroSeg(0.0383f, 0.125f, -90.0f, matrix::Vector3f(0.0f, 0.208f, TS_CM-0.094f), 0.0f, TS_AR, 0.063f), - // AeroSeg(0.0225f, 0.110f, -90.0f, matrix::Vector3f(0.0f, 0.239f, TS_CM-0.083f), 0.0f, TS_AR) - // }; - // parameters MapProjection _lpos_ref{}; float _lpos_ref_alt; - float _MASS, _T_MAX, _Q_MAX, _L_ROLL, _L_PITCH, _KDV, _KDW, _T_TAU; + float _MASS, _T_MAX, _Q_MAX, _L_ROLL, _L_PITCH, _KDV, _KDW, _T_TAU, _F_T_MAX, _F_Q_MAX; matrix::Matrix3f _I; // vehicle inertia matrix matrix::Matrix3f _Im1; // inverse of the inertia matrix @@ -306,6 +331,21 @@ private: (ParamFloat) _sih_distance_snsr_max, (ParamFloat) _sih_distance_snsr_override, (ParamFloat) _sih_thrust_tau, - (ParamInt) _sih_vtype + // forward propeller + (ParamFloat) _sih_f_thrust_max, + (ParamFloat) _sih_f_torque_max, + (ParamFloat) _sih_f_ct0, + (ParamFloat) _sih_f_ct1, + (ParamFloat) _sih_f_ct2, + (ParamFloat) _sih_f_cp0, + (ParamFloat) _sih_f_cp1, + (ParamFloat) _sih_f_cp2, + (ParamFloat) _sih_forward_diameter_inch, + (ParamFloat) _sih_forward_rpm_max, + (ParamInt) _bat1_source, + (ParamInt) _sih_vtype, + (ParamFloat) _sih_wind_n, + (ParamFloat) _sih_wind_e, + (ParamFloat) _sih_ranging_beacon_noise ) }; diff --git a/src/modules/simulation/simulator_sih/sih_params.c b/src/modules/simulation/simulator_sih/sih_params.c deleted file mode 100644 index 25c9498e63..0000000000 --- a/src/modules/simulation/simulator_sih/sih_params.c +++ /dev/null @@ -1,341 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2013-2025 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file sih_params.c - * Parameters for simulator in hardware. - * - * @author Romain Chiappinelli - * February 2019 - */ - -/** - * Vehicle mass - * - * This value can be measured by weighting the quad on a scale. - * - * @unit kg - * @min 0.0 - * @decimal 2 - * @increment 0.1 - * @group Simulation In Hardware - */ -PARAM_DEFINE_FLOAT(SIH_MASS, 1.0f); - -/** - * Vehicle inertia about X axis - * - * The inertia is a 3 by 3 symmetric matrix. - * It represents the difficulty of the vehicle to modify its angular rate. - * - * @unit kg m^2 - * @min 0.0 - * @decimal 3 - * @increment 0.005 - * @group Simulation In Hardware - */ -PARAM_DEFINE_FLOAT(SIH_IXX, 0.025f); - -/** - * Vehicle inertia about Y axis - * - * The inertia is a 3 by 3 symmetric matrix. - * It represents the difficulty of the vehicle to modify its angular rate. - * - * @unit kg m^2 - * @min 0.0 - * @decimal 3 - * @increment 0.005 - * @group Simulation In Hardware - */ -PARAM_DEFINE_FLOAT(SIH_IYY, 0.025f); - -/** - * Vehicle inertia about Z axis - * - * The inertia is a 3 by 3 symmetric matrix. - * It represents the difficulty of the vehicle to modify its angular rate. - * - * @unit kg m^2 - * @min 0.0 - * @decimal 3 - * @increment 0.005 - * @group Simulation In Hardware - */ -PARAM_DEFINE_FLOAT(SIH_IZZ, 0.030f); - -/** - * Vehicle cross term inertia xy - * - * The inertia is a 3 by 3 symmetric matrix. - * This value can be set to 0 for a quad symmetric about its center of mass. - * - * @unit kg m^2 - * @decimal 3 - * @increment 0.005 - * @group Simulation In Hardware - */ -PARAM_DEFINE_FLOAT(SIH_IXY, 0.0f); - -/** - * Vehicle cross term inertia xz - * - * The inertia is a 3 by 3 symmetric matrix. - * This value can be set to 0 for a quad symmetric about its center of mass. - * - * @unit kg m^2 - * @decimal 3 - * @increment 0.005 - * @group Simulation In Hardware - */ -PARAM_DEFINE_FLOAT(SIH_IXZ, 0.0f); - -/** - * Vehicle cross term inertia yz - * - * The inertia is a 3 by 3 symmetric matrix. - * This value can be set to 0 for a quad symmetric about its center of mass. - * - * @unit kg m^2 - * @decimal 3 - * @increment 0.005 - * @group Simulation In Hardware - */ -PARAM_DEFINE_FLOAT(SIH_IYZ, 0.0f); - -/** - * Max propeller thrust force - * - * This is the maximum force delivered by one propeller - * when the motor is running at full speed. - * - * This value is usually about 5 times the mass of the quadrotor. - * - * @unit N - * @min 0.0 - * @decimal 2 - * @increment 0.5 - * @group Simulation In Hardware - */ -PARAM_DEFINE_FLOAT(SIH_T_MAX, 5.0f); - -/** - * Max propeller torque - * - * This is the maximum torque delivered by one propeller - * when the motor is running at full speed. - * - * This value is usually about few percent of the maximum thrust force. - * - * @unit Nm - * @min 0.0 - * @decimal 3 - * @increment 0.05 - * @group Simulation In Hardware - */ -PARAM_DEFINE_FLOAT(SIH_Q_MAX, 0.1f); - -/** - * Roll arm length - * - * This is the arm length generating the rolling moment - * - * This value can be measured with a ruler. - * This corresponds to half the distance between the left and right motors. - * - * @unit m - * @min 0.0 - * @decimal 2 - * @increment 0.05 - * @group Simulation In Hardware - */ -PARAM_DEFINE_FLOAT(SIH_L_ROLL, 0.2f); - -/** - * Pitch arm length - * - * This is the arm length generating the pitching moment - * - * This value can be measured with a ruler. - * This corresponds to half the distance between the front and rear motors. - * - * @unit m - * @min 0.0 - * @decimal 2 - * @increment 0.05 - * @group Simulation In Hardware - */ -PARAM_DEFINE_FLOAT(SIH_L_PITCH, 0.2f); - -/** - * First order drag coefficient - * - * Physical coefficient representing the friction with air particules. - * The greater this value, the slower the quad will move. - * - * Drag force function of velocity: D=-KDV*V. - * The maximum freefall velocity can be computed as V=10*MASS/KDV [m/s] - * - * @unit N/(m/s) - * @min 0.0 - * @decimal 2 - * @increment 0.05 - * @group Simulation In Hardware - */ -PARAM_DEFINE_FLOAT(SIH_KDV, 1.0f); - -/** - * First order angular damper coefficient - * - * Physical coefficient representing the friction with air particules during rotations. - * The greater this value, the slower the quad will rotate. - * - * Aerodynamic moment function of body rate: Ma=-KDW*W_B. - * This value can be set to 0 if unknown. - * - * @unit Nm/(rad/s) - * @min 0.0 - * @decimal 3 - * @increment 0.005 - * @group Simulation In Hardware - */ -PARAM_DEFINE_FLOAT(SIH_KDW, 0.025f); - -/** - * Initial geodetic latitude - * - * This value represents the North-South location on Earth where the simulation begins. - * - * LAT0, LON0, H0, MU_X, MU_Y, and MU_Z should ideally be consistent among each others - * to represent a physical ground location on Earth. - * - * @unit deg - * @min -90 - * @max 90 - * @group Simulation In Hardware - */ -PARAM_DEFINE_FLOAT(SIH_LOC_LAT0, 47.397742f); - -/** - * Initial geodetic longitude - * - * This value represents the East-West location on Earth where the simulation begins. - * - * LAT0, LON0, H0, MU_X, MU_Y, and MU_Z should ideally be consistent among each others - * to represent a physical ground location on Earth. - * - * @unit deg - * @min -180 - * @max 180 - * @group Simulation In Hardware - */ -PARAM_DEFINE_FLOAT(SIH_LOC_LON0, 8.545594f); - -/** - * Initial AMSL ground altitude - * - * This value represents the Above Mean Sea Level (AMSL) altitude where the simulation begins. - * - * If using FlightGear as a visual animation, - * this value can be tweaked such that the vehicle lies on the ground at takeoff. - * - * LAT0, LON0, H0, MU_X, MU_Y, and MU_Z should ideally be consistent among each others - * to represent a physical ground location on Earth. - * - * - * @unit m - * @min -420.0 - * @max 8848.0 - * @decimal 2 - * @increment 0.01 - * @group Simulation In Hardware - */ -PARAM_DEFINE_FLOAT(SIH_LOC_H0, 489.4f); - -/** - * distance sensor minimum range - * - * @unit m - * @min 0.0 - * @max 10.0 - * @decimal 4 - * @increment 0.01 - * @group Simulation In Hardware - */ -PARAM_DEFINE_FLOAT(SIH_DISTSNSR_MIN, 0.0f); - -/** - * distance sensor maximum range - * - * @unit m - * @min 0.0 - * @max 1000.0 - * @decimal 4 - * @increment 0.01 - * @group Simulation In Hardware - */ -PARAM_DEFINE_FLOAT(SIH_DISTSNSR_MAX, 100.0f); - -/** - * if >= 0 the distance sensor measures will be overridden by this value - * - * Absolute value superior to 10000 will disable distance sensor - * - * @unit m - * @group Simulation In Hardware - */ -PARAM_DEFINE_FLOAT(SIH_DISTSNSR_OVR, -1.0f); - -/** - * thruster time constant tau - * - * the time taken for the thruster to step from 0 to 100% should be about 4 times tau - * - * @unit s - * @group Simulation In Hardware - */ -PARAM_DEFINE_FLOAT(SIH_T_TAU, 0.05f); - -/** - * Vehicle type - * - * @value 0 Quadcopter - * @value 1 Fixed-Wing - * @value 2 Tailsitter - * @value 3 Standard VTOL - * @value 4 Hexacopter - * @value 5 Rover Ackermann - * @reboot_required true - * @group Simulation In Hardware - */ -PARAM_DEFINE_INT32(SIH_VEHICLE_TYPE, 0); diff --git a/src/modules/simulation/simulator_sih/sih_params.yaml b/src/modules/simulation/simulator_sih/sih_params.yaml new file mode 100644 index 0000000000..c405274fb2 --- /dev/null +++ b/src/modules/simulation/simulator_sih/sih_params.yaml @@ -0,0 +1,371 @@ +module_name: simulator_sih +parameters: +- group: Simulation In Hardware + definitions: + SIH_MASS: + description: + short: Vehicle mass + long: This value can be measured by weighting the quad on a scale. + type: float + default: 1.0 + unit: kg + min: 0.0 + decimal: 2 + increment: 0.1 + SIH_IXX: + description: + short: Vehicle inertia about X axis + long: |- + The inertia is a 3 by 3 symmetric matrix. + It represents the difficulty of the vehicle to modify its angular rate. + type: float + default: 0.025 + unit: kg m^2 + min: 0.0 + decimal: 3 + increment: 0.005 + SIH_IYY: + description: + short: Vehicle inertia about Y axis + long: |- + The inertia is a 3 by 3 symmetric matrix. + It represents the difficulty of the vehicle to modify its angular rate. + type: float + default: 0.025 + unit: kg m^2 + min: 0.0 + decimal: 3 + increment: 0.005 + SIH_IZZ: + description: + short: Vehicle inertia about Z axis + long: |- + The inertia is a 3 by 3 symmetric matrix. + It represents the difficulty of the vehicle to modify its angular rate. + type: float + default: 0.03 + unit: kg m^2 + min: 0.0 + decimal: 3 + increment: 0.005 + SIH_IXY: + description: + short: Vehicle cross term inertia xy + long: |- + The inertia is a 3 by 3 symmetric matrix. + This value can be set to 0 for a quad symmetric about its center of mass. + type: float + default: 0.0 + unit: kg m^2 + decimal: 3 + increment: 0.005 + SIH_IXZ: + description: + short: Vehicle cross term inertia xz + long: |- + The inertia is a 3 by 3 symmetric matrix. + This value can be set to 0 for a quad symmetric about its center of mass. + type: float + default: 0.0 + unit: kg m^2 + decimal: 3 + increment: 0.005 + SIH_IYZ: + description: + short: Vehicle cross term inertia yz + long: |- + The inertia is a 3 by 3 symmetric matrix. + This value can be set to 0 for a quad symmetric about its center of mass. + type: float + default: 0.0 + unit: kg m^2 + decimal: 3 + increment: 0.005 + SIH_T_MAX: + description: + short: Max multicopter propeller thrust force + long: |- + This is the maximum force delivered by one propeller + when the motor is running at full speed. + + This value is usually about 5 times the mass of the quadrotor. + + Refer to SIH_F_T_MAX for the thrust for FW, Tailsitter, and VTOL pusher. + type: float + default: 5.0 + unit: N + min: 0.0 + decimal: 2 + increment: 0.5 + SIH_Q_MAX: + description: + short: Max multicopter propeller torque + long: |- + This is the maximum torque delivered by one propeller + when the motor is running at full speed. + + This value is usually about few percent of the maximum thrust force. + + Refer to SIH_F_Q_MAX for the propeller torque for FW, Tailsitter, and VTOL pusher. + type: float + default: 0.1 + unit: Nm + min: 0.0 + decimal: 3 + increment: 0.05 + SIH_L_ROLL: + description: + short: Roll arm length + long: |- + This is the arm length generating the rolling moment + + This value can be measured with a ruler. + This corresponds to half the distance between the left and right motors. + type: float + default: 0.2 + unit: m + min: 0.0 + decimal: 2 + increment: 0.05 + SIH_L_PITCH: + description: + short: Pitch arm length + long: |- + This is the arm length generating the pitching moment + + This value can be measured with a ruler. + This corresponds to half the distance between the front and rear motors. + type: float + default: 0.2 + unit: m + min: 0.0 + decimal: 2 + increment: 0.05 + SIH_KDV: + description: + short: First order drag coefficient + long: |- + Physical coefficient representing the friction with air particules. + The greater this value, the slower the quad will move. + + Drag force function of velocity: D=-KDV*V. + The maximum freefall velocity can be computed as V=10*MASS/KDV [m/s] + type: float + default: 1.0 + unit: N/(m/s) + min: 0.0 + decimal: 2 + increment: 0.05 + SIH_KDW: + description: + short: First order angular damper coefficient + long: |- + Physical coefficient representing the friction with air particules during rotations. + The greater this value, the slower the quad will rotate. + + Aerodynamic moment function of body rate: Ma=-KDW*W_B. + This value can be set to 0 if unknown. + type: float + default: 0.025 + unit: Nm/(rad/s) + min: 0.0 + decimal: 3 + increment: 0.005 + SIH_LOC_LAT0: + description: + short: Initial geodetic latitude + long: |- + This value represents the North-South location on Earth where the simulation begins. + + LAT0, LON0, H0, MU_X, MU_Y, and MU_Z should ideally be consistent among each others + to represent a physical ground location on Earth. + type: float + default: 47.397742 + unit: deg + min: -90 + max: 90 + SIH_LOC_LON0: + description: + short: Initial geodetic longitude + long: |- + This value represents the East-West location on Earth where the simulation begins. + + LAT0, LON0, H0, MU_X, MU_Y, and MU_Z should ideally be consistent among each others + to represent a physical ground location on Earth. + type: float + default: 8.545594 + unit: deg + min: -180 + max: 180 + SIH_LOC_H0: + description: + short: Initial AMSL ground altitude + long: |- + This value represents the Above Mean Sea Level (AMSL) altitude where the simulation begins. + + If using FlightGear as a visual animation, + this value can be tweaked such that the vehicle lies on the ground at takeoff. + + LAT0, LON0, H0, MU_X, MU_Y, and MU_Z should ideally be consistent among each others + to represent a physical ground location on Earth. + type: float + default: 489.4 + unit: m + min: -420.0 + max: 8848.0 + decimal: 2 + increment: 0.01 + SIH_DISTSNSR_MIN: + description: + short: distance sensor minimum range + type: float + default: 0.0 + unit: m + min: 0.0 + max: 10.0 + decimal: 4 + increment: 0.01 + SIH_DISTSNSR_MAX: + description: + short: distance sensor maximum range + type: float + default: 100.0 + unit: m + min: 0.0 + max: 1000.0 + decimal: 4 + increment: 0.01 + SIH_DISTSNSR_OVR: + description: + short: if >= 0 the distance sensor measures will be overridden by this value + long: Absolute value superior to 10000 will disable distance sensor + type: float + default: -1.0 + unit: m + SIH_T_TAU: + description: + short: thruster time constant tau + long: the time taken for the thruster to step from 0 to 100% should be about + 4 times tau + type: float + default: 0.05 + unit: s + SIH_VEHICLE_TYPE: + description: + short: Vehicle type + type: enum + values: + 0: Quadcopter + 1: Fixed-Wing + 2: Tailsitter + 3: Standard VTOL + 4: Hexacopter + 5: Rover Ackermann + default: 0 + reboot_required: true + SIH_WIND_N: + description: + short: Wind velocity from north direction + type: float + default: 0.0 + unit: m/s + SIH_WIND_E: + description: + short: Wind velocity from east direction + type: float + default: 0.0 + unit: m/s + SIH_RNGBC_NOISE: + description: + short: Ranging beacon measurement noise standard deviation + long: Gaussian noise added to simulated ranging beacon measurements. Set to 0 to disable noise. + type: float + default: 30.0 + unit: m + min: 0.0 + max: 100.0 + decimal: 1 + SIH_F_T_MAX: + description: + short: Forward thruster max thrust (N) + long: |- + This is used for the Fixed-Wing, Tailsitter, or pusher of the Standard VTOL + if SIH_F_CT0 <= 0. + If SIH_F_CT0 > 0, propeller model with advance ratio J is used + and this parameter value is overridden at simulation startup. + type: float + default: 2.0 + unit: N + min: 0.0 + decimal: 3 + SIH_F_Q_MAX: + description: + short: Forward thruster max torque (Nm) + long: |- + This is used for the Fixed-Wing, Tailsitter, or pusher of the Standard VTOL + if SIH_F_CP0 <= 0. + If SIH_F_CP0 > 0, propeller model with advance ratio J is used + and this parameter value is overridden at simulation startup. + type: float + default: 0.0165 + unit: Nm + min: 0.0 + decimal: 3 + SIH_F_CT0: + description: + short: Forward thruster static thrust coefficient + type: float + default: 0.0 + min: 0.0 + decimal: 3 + SIH_F_CT1: + description: + short: Forward thruster thrust coefficient 1 + long: CT(J) = CT0 + CT1*J + CT2*J^2 + type: float + default: 0.0 + decimal: 3 + SIH_F_CT2: + description: + short: Forward thruster thrust coefficient 2 + long: CT(J) = CT0 + CT1*J + CT2*J^2 + type: float + default: 0.0 + max: 0.0 + decimal: 3 + SIH_F_CP0: + description: + short: Forward thruster static power coefficient + type: float + default: 0.0 + min: 0.0 + decimal: 3 + SIH_F_CP1: + description: + short: Forward thruster power coefficient 1 + long: CP(J) = CP0 + CP1*J + CP2*J^2 + type: float + default: 0.0 + decimal: 3 + SIH_F_CP2: + description: + short: Forward thruster power coefficient 2 + long: CP(J) = CP0 + CP1*J + CP2*J^2 + type: float + default: 0.0 + max: 0.0 + decimal: 3 + SIH_F_DIA_INCH: + description: + short: Forward thruster propeller diameter in inches + type: float + default: 0.1 + min: 0.1 + decimal: 1 + SIH_F_RPM_MAX: + description: + short: Forward thruster max RPM + type: float + default: 6000.0 + min: 0.1 + decimal: 1 diff --git a/src/modules/spacecraft/CMakeLists.txt b/src/modules/spacecraft/CMakeLists.txt index 7d39e24ece..429829ea29 100644 --- a/src/modules/spacecraft/CMakeLists.txt +++ b/src/modules/spacecraft/CMakeLists.txt @@ -46,6 +46,10 @@ px4_add_module( SRCS SpacecraftHandler.cpp SpacecraftHandler.hpp + MODULE_CONFIG + spacecraft_attitude_params.yaml + spacecraft_position_params.yaml + spacecraft_rate_params.yaml DEPENDS mathlib px4_work_queue diff --git a/src/modules/spacecraft/spacecraft_attitude_params.c b/src/modules/spacecraft/spacecraft_attitude_params.c deleted file mode 100644 index 6e2c27b192..0000000000 --- a/src/modules/spacecraft/spacecraft_attitude_params.c +++ /dev/null @@ -1,183 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2013-2015 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file sc_att_control_params.c - * Parameters for spacecraft attitude controller. - * - * @author Pedro Roque, - */ - -/** - * Roll P gain - * - * Roll proportional gain, i.e. desired angular speed in rad/s for error 1 rad. - * - * @min 0.0 - * @max 12 - * @decimal 2 - * @increment 0.1 - * @group Spacecraft Attitude Control - */ -PARAM_DEFINE_FLOAT(SC_ROLL_P, 6.5f); - -/** - * Pitch P gain - * - * Pitch proportional gain, i.e. desired angular speed in rad/s for error 1 rad. - * - * @min 0.0 - * @max 12 - * @decimal 2 - * @increment 0.1 - * @group Spacecraft Attitude Control - */ -PARAM_DEFINE_FLOAT(SC_PITCH_P, 6.5f); - -/** - * Yaw P gain - * - * Yaw proportional gain, i.e. desired angular speed in rad/s for error 1 rad. - * - * @min 0.0 - * @max 5 - * @decimal 2 - * @increment 0.1 - * @group Spacecraft Attitude Control - */ -PARAM_DEFINE_FLOAT(SC_YAW_P, 2.8f); - -/** - * Yaw weight - * - * A fraction [0,1] deprioritizing yaw compared to roll and pitch in non-linear attitude control. - * Deprioritizing yaw is necessary because multicopters have much less control authority - * in yaw compared to the other axes and it makes sense because yaw is not critical for - * stable hovering or 3D navigation. - * - * For yaw control tuning use SC_YAW_P. This ratio has no impact on the yaw gain. - * - * @min 0.0 - * @max 1.0 - * @decimal 2 - * @increment 0.1 - * @group Spacecraft Attitude Control - */ -PARAM_DEFINE_FLOAT(SC_YAW_WEIGHT, 0.4f); - -/** - * Max roll rate - * - * Limit for roll rate in manual and auto modes (except acro). - * Has effect for large rotations in autonomous mode, to avoid large control - * output and mixer saturation. - * - * This is not only limited by the vehicle's properties, but also by the maximum - * measurement rate of the gyro. - * - * @unit deg/s - * @min 0.0 - * @max 1800.0 - * @decimal 1 - * @increment 5 - * @group Spacecraft Attitude Control - */ -PARAM_DEFINE_FLOAT(SC_ROLLRATE_MAX, 220.0f); - -/** - * Max pitch rate - * - * Limit for pitch rate in manual and auto modes (except acro). - * Has effect for large rotations in autonomous mode, to avoid large control - * output and mixer saturation. - * - * This is not only limited by the vehicle's properties, but also by the maximum - * measurement rate of the gyro. - * - * @unit deg/s - * @min 0.0 - * @max 1800.0 - * @decimal 1 - * @increment 5 - * @group Spacecraft Attitude Control - */ -PARAM_DEFINE_FLOAT(SC_PITCHRATE_MAX, 220.0f); - -/** - * Max yaw rate - * - * @unit deg/s - * @min 0.0 - * @max 1800.0 - * @decimal 1 - * @increment 5 - * @group Spacecraft Attitude Control - */ -PARAM_DEFINE_FLOAT(SC_YAWRATE_MAX, 200.0f); - -/** - * Manual tilt input filter time constant - * - * Setting this parameter to 0 disables the filter - * - * @unit s - * @min 0.0 - * @max 2.0 - * @decimal 2 - * @group Spacecraft Position Control - */ -PARAM_DEFINE_FLOAT(SC_MAN_TILT_TAU, 0.0f); - -/** - * Max manual yaw rate for Stabilized, Altitude, Position mode - * - * @unit deg/s - * @min 0 - * @max 400 - * @decimal 0 - * @increment 10 - * @group Spacecraft Position Control - */ -PARAM_DEFINE_FLOAT(SC_MAN_Y_SCALE, 150.f); - -/** - * Maximal tilt angle in Stabilized or Manual mode - * - * @unit deg - * @min 0 - * @max 90 - * @decimal 0 - * @increment 1 - * @group Multicopter Position Control - */ -PARAM_DEFINE_FLOAT(SC_MAN_TILT_MAX, 90.f); diff --git a/src/modules/spacecraft/spacecraft_attitude_params.yaml b/src/modules/spacecraft/spacecraft_attitude_params.yaml new file mode 100644 index 0000000000..97f57e067c --- /dev/null +++ b/src/modules/spacecraft/spacecraft_attitude_params.yaml @@ -0,0 +1,131 @@ +module_name: spacecraft +parameters: +- group: Multicopter Position Control + definitions: + SC_MAN_TILT_MAX: + description: + short: Maximal tilt angle in Stabilized or Manual mode + type: float + default: 90.0 + unit: deg + min: 0 + max: 90 + decimal: 0 + increment: 1 +- group: Spacecraft Attitude Control + definitions: + SC_ROLL_P: + description: + short: Roll P gain + long: Roll proportional gain, i.e. desired angular speed in rad/s for error + 1 rad. + type: float + default: 6.5 + min: 0.0 + max: 12 + decimal: 2 + increment: 0.1 + SC_PITCH_P: + description: + short: Pitch P gain + long: Pitch proportional gain, i.e. desired angular speed in rad/s for error + 1 rad. + type: float + default: 6.5 + min: 0.0 + max: 12 + decimal: 2 + increment: 0.1 + SC_YAW_P: + description: + short: Yaw P gain + long: Yaw proportional gain, i.e. desired angular speed in rad/s for error + 1 rad. + type: float + default: 2.8 + min: 0.0 + max: 5 + decimal: 2 + increment: 0.1 + SC_YAW_WEIGHT: + description: + short: Yaw weight + long: |- + A fraction [0,1] deprioritizing yaw compared to roll and pitch in non-linear attitude control. + Deprioritizing yaw is necessary because multicopters have much less control authority + in yaw compared to the other axes and it makes sense because yaw is not critical for + stable hovering or 3D navigation. + + For yaw control tuning use SC_YAW_P. This ratio has no impact on the yaw gain. + type: float + default: 0.4 + min: 0.0 + max: 1.0 + decimal: 2 + increment: 0.1 + SC_ROLLRATE_MAX: + description: + short: Max roll rate + long: |- + Limit for roll rate in manual and auto modes (except acro). + Has effect for large rotations in autonomous mode, to avoid large control + output and mixer saturation. + + This is not only limited by the vehicle's properties, but also by the maximum + measurement rate of the gyro. + type: float + default: 220.0 + unit: deg/s + min: 0.0 + max: 1800.0 + decimal: 1 + increment: 5 + SC_PITCHRATE_MAX: + description: + short: Max pitch rate + long: |- + Limit for pitch rate in manual and auto modes (except acro). + Has effect for large rotations in autonomous mode, to avoid large control + output and mixer saturation. + + This is not only limited by the vehicle's properties, but also by the maximum + measurement rate of the gyro. + type: float + default: 220.0 + unit: deg/s + min: 0.0 + max: 1800.0 + decimal: 1 + increment: 5 + SC_YAWRATE_MAX: + description: + short: Max yaw rate + type: float + default: 200.0 + unit: deg/s + min: 0.0 + max: 1800.0 + decimal: 1 + increment: 5 +- group: Spacecraft Position Control + definitions: + SC_MAN_TILT_TAU: + description: + short: Manual tilt input filter time constant + long: Setting this parameter to 0 disables the filter + type: float + default: 0.0 + unit: s + min: 0.0 + max: 2.0 + decimal: 2 + SC_MAN_Y_SCALE: + description: + short: Max manual yaw rate for Stabilized, Altitude, Position mode + type: float + default: 150.0 + unit: deg/s + min: 0 + max: 400 + decimal: 0 + increment: 10 diff --git a/src/modules/spacecraft/spacecraft_position_params.c b/src/modules/spacecraft/spacecraft_position_params.c deleted file mode 100644 index 6b9065f8e6..0000000000 --- a/src/modules/spacecraft/spacecraft_position_params.c +++ /dev/null @@ -1,293 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2024 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Proportional gain for position error - * - * Defined as corrective velocity in m/s per m position error - * - * @min 0 - * @max 2 - * @decimal 2 - * @increment 0.1 - * @group Spacecraft Position Control - */ -PARAM_DEFINE_FLOAT(SPC_POS_P, 0.2f); - -/** - * Integral gain for position error - * - * Defined as corrective velocity in m/s per m velocity error - * - * @min 0 - * @max 15 - * @decimal 2 - * @increment 0.1 - * @group Spacecraft Position Control - */ -PARAM_DEFINE_FLOAT(SPC_POS_I, 0.f); - -/** - * Integral limit for position error - * - * Defined as corrective velocity in m/s per m velocity error - * - * @min 0 - * @max 5 - * @decimal 2 - * @increment 0.01 - * @group Spacecraft Position Control - */ -PARAM_DEFINE_FLOAT(SPC_POS_I_LIM, 1.f); - -/** - * Proportional gain for velocity error - * - * Defined as corrective acceleration in m/s^2 per m/s velocity error - * - * @min 0 - * @max 15 - * @decimal 2 - * @increment 0.1 - * @group Spacecraft Position Control - */ -PARAM_DEFINE_FLOAT(SPC_VEL_P, 6.55f); - -/** - * Integral gain for velocity error - * - * Defined as corrective acceleration in m/s^2 per m/s velocity error - * - * @min 0 - * @max 15 - * @decimal 2 - * @increment 0.1 - * @group Spacecraft Position Control - */ -PARAM_DEFINE_FLOAT(SPC_VEL_I, 0.f); - -/** - * Integral limit for velocity error - * - * Defined as corrective acceleration in m/s^2 per m/s velocity error - * - * @min 0 - * @max 5 - * @decimal 2 - * @increment 0.1 - * @group Spacecraft Position Control - */ -PARAM_DEFINE_FLOAT(SPC_VEL_I_LIM, 1.f); - -/** - * Derivative gain for velocity error - * - * Defined as corrective acceleration in m/s^2 per m/s velocity error - * - * @min 0.0 - * @max 15 - * @decimal 2 - * @increment 0.1 - * @group Spacecraft Position Control - */ -PARAM_DEFINE_FLOAT(SPC_VEL_D, 0.0f); - -/** - * Maximum velocity - * - * Absolute maximum for all velocity controlled modes. - * Any higher value is truncated. - * - * @unit m/s - * @min 0 - * @max 20 - * @decimal 1 - * @increment 1 - * @group Spacecraft Position Control - */ -PARAM_DEFINE_FLOAT(SPC_VEL_MAX, 12.f); - -/** - * Overall Velocity Limit - * - * If set to a value greater than zero, other parameters are automatically set (such as - * MPC_VEL_MAX or MPC_VEL_MANUAL). - * If set to a negative value, the existing individual parameters are used. - * - * @min -20 - * @max 20 - * @decimal 1 - * @increment 1 - * @group Spacecraft Position Control - */ -PARAM_DEFINE_FLOAT(SPC_VEL_ALL, -10.f); - -/** - * Cruising elocity setpoint in autonomous modes - * - * @unit m/s - * @min 3 - * @max 20 - * @increment 1 - * @decimal 1 - * @group Spacecraft Position Control - */ -PARAM_DEFINE_FLOAT(SPC_VEL_CRUISE, 10.f); - -/** - * Maximum velocity setpoint in Position mode - * - * @unit m/s - * @min 3 - * @max 20 - * @increment 1 - * @decimal 1 - * @group Spacecraft Position Control - */ -PARAM_DEFINE_FLOAT(SPC_VEL_MANUAL, 10.f); - -/** - * Maximum collective thrust - * - * Limit allowed thrust - * - * @unit norm - * @min 0 - * @max 1 - * @decimal 2 - * @increment 0.05 - * @group Spacecraft Position Control - */ -PARAM_DEFINE_FLOAT(SPC_THR_MAX, 1.f); - -/** - * Acceleration for autonomous and for manual modes - * - * When piloting manually, this parameter is only used in MPC_POS_MODE 4. - * - * @unit m/s^2 - * @min 2 - * @max 15 - * @decimal 1 - * @increment 1 - * @group Spacecraft Position Control - */ -PARAM_DEFINE_FLOAT(SPC_ACC, 3.f); - -/** - * Maximum accelaration in autonomous modes - * - * - * @unit m/s^2 - * @min 2 - * @max 15 - * @decimal 1 - * @increment 1 - * @group Spacecraft Position Control - */ -PARAM_DEFINE_FLOAT(SPC_ACC_MAX, 5.f); - -/** - * Jerk limit in autonomous modes - * - * Limit the maximum jerk of the vehicle (how fast the acceleration can change). - * A lower value leads to smoother vehicle motions but also limited agility. - * - * @unit m/s^3 - * @min 1 - * @max 80 - * @decimal 1 - * @increment 1 - * @group Spacecraft Position Control - */ -PARAM_DEFINE_FLOAT(SPC_JERK_AUTO, 4.f); - -PARAM_DEFINE_FLOAT(SPC_VEHICLE_RESP, 0.5f); -/** - * Maximum jerk in Position/Altitude mode - * - * Limit the maximum jerk of the vehicle (how fast the acceleration can change). - * A lower value leads to smoother motions but limits agility - * (how fast it can change directions or break). - * - * Setting this to the maximum value essentially disables the limit. - * - * Only used with smooth MPC_POS_MODE 3 and 4. - * - * @unit m/s^3 - * @min 0.5 - * @max 500 - * @decimal 0 - * @increment 1 - * @group Spacecraft Position Control - */ -PARAM_DEFINE_FLOAT(SPC_JERK_MAX, 8.f); - -/** - * Max manual yaw rate for Stabilized, Altitude, Position mode - * - * @unit deg/s - * @min 0 - * @max 400 - * @decimal 0 - * @increment 10 - * @group Spacecraft Position Control - */ -PARAM_DEFINE_FLOAT(SPC_MAN_Y_MAX, 150.f); - -/** - * Manual yaw rate input filter time constant - * - * Not used in Stabilized mode - * Setting this parameter to 0 disables the filter - * - * @unit s - * @min 0 - * @max 5 - * @decimal 2 - * @increment 0.01 - * @group Spacecraft Position Control - */ -PARAM_DEFINE_FLOAT(SPC_MAN_Y_TAU, 0.08f); - -/** - * Numerical velocity derivative low pass cutoff frequency - * - * @unit Hz - * @min 0 - * @max 10 - * @decimal 1 - * @increment 0.5 - * @group Spacecraft Position Control - */ -PARAM_DEFINE_FLOAT(SPC_VELD_LP, 5.0f); diff --git a/src/modules/spacecraft/spacecraft_position_params.yaml b/src/modules/spacecraft/spacecraft_position_params.yaml new file mode 100644 index 0000000000..aa1bde9081 --- /dev/null +++ b/src/modules/spacecraft/spacecraft_position_params.yaml @@ -0,0 +1,224 @@ +module_name: spacecraft +parameters: +- group: Spacecraft Position Control + definitions: + SPC_POS_P: + description: + short: Proportional gain for position error + long: Defined as corrective velocity in m/s per m position error + type: float + default: 0.2 + min: 0 + max: 2 + decimal: 2 + increment: 0.1 + SPC_POS_I: + description: + short: Integral gain for position error + long: Defined as corrective velocity in m/s per m velocity error + type: float + default: 0.0 + min: 0 + max: 15 + decimal: 2 + increment: 0.1 + SPC_POS_I_LIM: + description: + short: Integral limit for position error + long: Defined as corrective velocity in m/s per m velocity error + type: float + default: 1.0 + min: 0 + max: 5 + decimal: 2 + increment: 0.01 + SPC_VEL_P: + description: + short: Proportional gain for velocity error + long: Defined as corrective acceleration in m/s^2 per m/s velocity error + type: float + default: 6.55 + min: 0 + max: 15 + decimal: 2 + increment: 0.1 + SPC_VEL_I: + description: + short: Integral gain for velocity error + long: Defined as corrective acceleration in m/s^2 per m/s velocity error + type: float + default: 0.0 + min: 0 + max: 15 + decimal: 2 + increment: 0.1 + SPC_VEL_I_LIM: + description: + short: Integral limit for velocity error + long: Defined as corrective acceleration in m/s^2 per m/s velocity error + type: float + default: 1.0 + min: 0 + max: 5 + decimal: 2 + increment: 0.1 + SPC_VEL_D: + description: + short: Derivative gain for velocity error + long: Defined as corrective acceleration in m/s^2 per m/s velocity error + type: float + default: 0.0 + min: 0.0 + max: 15 + decimal: 2 + increment: 0.1 + SPC_VEL_MAX: + description: + short: Maximum velocity + long: |- + Absolute maximum for all velocity controlled modes. + Any higher value is truncated. + type: float + default: 12.0 + unit: m/s + min: 0 + max: 20 + decimal: 1 + increment: 1 + SPC_VEL_ALL: + description: + short: Overall Velocity Limit + long: |- + If set to a value greater than zero, other parameters are automatically set (such as + MPC_VEL_MAX or MPC_VEL_MANUAL). + If set to a negative value, the existing individual parameters are used. + type: float + default: -10.0 + min: -20 + max: 20 + decimal: 1 + increment: 1 + SPC_VEL_CRUISE: + description: + short: Cruising elocity setpoint in autonomous modes + type: float + default: 10.0 + unit: m/s + min: 3 + max: 20 + increment: 1 + decimal: 1 + SPC_VEL_MANUAL: + description: + short: Maximum velocity setpoint in Position mode + type: float + default: 10.0 + unit: m/s + min: 3 + max: 20 + increment: 1 + decimal: 1 + SPC_THR_MAX: + description: + short: Maximum collective thrust + long: Limit allowed thrust + type: float + default: 1.0 + unit: norm + min: 0 + max: 1 + decimal: 2 + increment: 0.05 + SPC_ACC: + description: + short: Acceleration for autonomous and for manual modes + long: When piloting manually, this parameter is only used in MPC_POS_MODE + 4. + type: float + default: 3.0 + unit: m/s^2 + min: 2 + max: 15 + decimal: 1 + increment: 1 + SPC_ACC_MAX: + description: + short: Maximum accelaration in autonomous modes + type: float + default: 5.0 + unit: m/s^2 + min: 2 + max: 15 + decimal: 1 + increment: 1 + SPC_JERK_AUTO: + description: + short: Jerk limit in autonomous modes + long: |- + Limit the maximum jerk of the vehicle (how fast the acceleration can change). + A lower value leads to smoother vehicle motions but also limited agility. + type: float + default: 4.0 + unit: m/s^3 + min: 1 + max: 80 + decimal: 1 + increment: 1 + SPC_JERK_MAX: + description: + short: Maximum jerk in Position/Altitude mode + long: |- + Limit the maximum jerk of the vehicle (how fast the acceleration can change). + A lower value leads to smoother motions but limits agility + (how fast it can change directions or break). + + Setting this to the maximum value essentially disables the limit. + + Only used with smooth MPC_POS_MODE 3 and 4. + type: float + default: 8.0 + unit: m/s^3 + min: 0.5 + max: 500 + decimal: 0 + increment: 1 + SPC_MAN_Y_MAX: + description: + short: Max manual yaw rate for Stabilized, Altitude, Position mode + type: float + default: 150.0 + unit: deg/s + min: 0 + max: 400 + decimal: 0 + increment: 10 + SPC_MAN_Y_TAU: + description: + short: Manual yaw rate input filter time constant + long: |- + Not used in Stabilized mode + Setting this parameter to 0 disables the filter + type: float + default: 0.08 + unit: s + min: 0 + max: 5 + decimal: 2 + increment: 0.01 + SPC_VELD_LP: + description: + short: Numerical velocity derivative low pass cutoff frequency + type: float + default: 5.0 + unit: Hz + min: 0 + max: 10 + decimal: 1 + increment: 0.5 +- group: Miscellaneous + definitions: + SPC_VEHICLE_RESP: + description: + short: SPC_VEHICLE_RESP + type: float + default: 0.5 diff --git a/src/modules/spacecraft/spacecraft_rate_params.c b/src/modules/spacecraft/spacecraft_rate_params.c deleted file mode 100644 index 4afb818a42..0000000000 --- a/src/modules/spacecraft/spacecraft_rate_params.c +++ /dev/null @@ -1,421 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2013-2025 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file spacecraft_params.c - * Parameters for spacecraft vehicle type. - * - * @author Pedro Roque - */ - -/** - * Roll rate P gain - * - * Roll rate proportional gain, i.e. control output for angular speed error 1 rad/s. - * - * @min 0.01 - * @max 0.5 - * @decimal 3 - * @increment 0.01 - * @group Spacecraft Rate Control - */ -PARAM_DEFINE_FLOAT(SC_ROLLRATE_P, 0.15f); - -/** - * Roll rate I gain - * - * Roll rate integral gain. Can be set to compensate static thrust difference or gravity center offset. - * - * @min 0.0 - * @decimal 3 - * @increment 0.01 - * @group Spacecraft Rate Control - */ -PARAM_DEFINE_FLOAT(SC_ROLLRATE_I, 0.2f); - -/** - * Roll rate integrator limit - * - * Roll rate integrator limit. Can be set to increase the amount of integrator available to counteract disturbances or reduced to improve settling time after large roll moment trim changes. - * - * @min 0.0 - * @decimal 2 - * @increment 0.01 - * @group Spacecraft Rate Control - */ -PARAM_DEFINE_FLOAT(SC_RR_INT_LIM, 0.30f); - -/** - * Roll rate D gain - * - * Roll rate differential gain. Small values help reduce fast oscillations. If value is too big oscillations will appear again. - * - * @min 0.0 - * @max 0.01 - * @decimal 4 - * @increment 0.0005 - * @group Spacecraft Rate Control - */ -PARAM_DEFINE_FLOAT(SC_ROLLRATE_D, 0.003f); - -/** - * Roll rate feedforward - * - * Improves tracking performance. - * - * @min 0.0 - * @decimal 4 - * @group Spacecraft Rate Control - */ -PARAM_DEFINE_FLOAT(SC_ROLLRATE_FF, 0.0f); - -/** - * Roll rate controller gain - * - * Global gain of the controller. - * - * This gain scales the P, I and D terms of the controller: - * output = SC_ROLLRATE_K * (SC_ROLLRATE_P * error - * + SC_ROLLRATE_I * error_integral - * + SC_ROLLRATE_D * error_derivative) - * Set SC_ROLLRATE_P=1 to implement a PID in the ideal form. - * Set SC_ROLLRATE_K=1 to implement a PID in the parallel form. - * - * @min 0.01 - * @max 5.0 - * @decimal 4 - * @increment 0.0005 - * @group Spacecraft Rate Control - */ -PARAM_DEFINE_FLOAT(SC_ROLLRATE_K, 1.0f); - -/** - * Pitch rate P gain - * - * Pitch rate proportional gain, i.e. control output for angular speed error 1 rad/s. - * - * @min 0.01 - * @max 0.6 - * @decimal 3 - * @increment 0.01 - * @group Spacecraft Rate Control - */ -PARAM_DEFINE_FLOAT(SC_PITCHRATE_P, 0.15f); - -/** - * Pitch rate I gain - * - * Pitch rate integral gain. Can be set to compensate static thrust difference or gravity center offset. - * - * @min 0.0 - * @decimal 3 - * @increment 0.01 - * @group Spacecraft Rate Control - */ -PARAM_DEFINE_FLOAT(SC_PITCHRATE_I, 0.2f); - -/** - * Pitch rate integrator limit - * - * Pitch rate integrator limit. Can be set to increase the amount of integrator available to counteract disturbances or reduced to improve settling time after large pitch moment trim changes. - * - * @min 0.0 - * @decimal 2 - * @increment 0.01 - * @group Spacecraft Rate Control - */ -PARAM_DEFINE_FLOAT(SC_PR_INT_LIM, 0.30f); - -/** - * Pitch rate D gain - * - * Pitch rate differential gain. Small values help reduce fast oscillations. If value is too big oscillations will appear again. - * - * @min 0.0 - * @decimal 4 - * @increment 0.0005 - * @group Spacecraft Rate Control - */ -PARAM_DEFINE_FLOAT(SC_PITCHRATE_D, 0.003f); - -/** - * Pitch rate feedforward - * - * Improves tracking performance. - * - * @min 0.0 - * @decimal 4 - * @group Spacecraft Rate Control - */ -PARAM_DEFINE_FLOAT(SC_PITCHRATE_FF, 0.0f); - -/** - * Pitch rate controller gain - * - * Global gain of the controller. - * - * This gain scales the P, I and D terms of the controller: - * output = SC_PITCHRATE_K * (SC_PITCHRATE_P * error - * + SC_PITCHRATE_I * error_integral - * + SC_PITCHRATE_D * error_derivative) - * Set SC_PITCHRATE_P=1 to implement a PID in the ideal form. - * Set SC_PITCHRATE_K=1 to implement a PID in the parallel form. - * - * @min 0.01 - * @max 5.0 - * @decimal 4 - * @increment 0.0005 - * @group Spacecraft Rate Control - */ -PARAM_DEFINE_FLOAT(SC_PITCHRATE_K, 1.0f); - -/** - * Yaw rate P gain - * - * Yaw rate proportional gain, i.e. control output for angular speed error 1 rad/s. - * - * @min 0.0 - * @max 10.0 - * @decimal 2 - * @increment 0.01 - * @group Spacecraft Rate Control - */ -PARAM_DEFINE_FLOAT(SC_YAWRATE_P, 10.0f); - -/** - * Yaw rate I gain - * - * Yaw rate integral gain. Can be set to compensate static thrust difference or gravity center offset. - * - * @min 0.0 - * @decimal 2 - * @increment 0.01 - * @group Spacecraft Rate Control - */ -PARAM_DEFINE_FLOAT(SC_YAWRATE_I, 0.865f); - -/** - * Yaw rate integrator limit - * - * Yaw rate integrator limit. Can be set to increase the amount of integrator available to counteract disturbances or reduced to improve settling time after large yaw moment trim changes. - * - * @min 0.0 - * @decimal 2 - * @increment 0.01 - * @group Spacecraft Rate Control - */ -PARAM_DEFINE_FLOAT(SC_YR_INT_LIM, 0.2f); - -/** - * Yaw rate D gain - * - * Yaw rate differential gain. Small values help reduce fast oscillations. If value is too big oscillations will appear again. - * - * @min 0.0 - * @decimal 2 - * @increment 0.01 - * @group Spacecraft Rate Control - */ -PARAM_DEFINE_FLOAT(SC_YAWRATE_D, 0.0f); - -/** - * Yaw rate feedforward - * - * Improves tracking performance. - * - * @min 0.0 - * @decimal 4 - * @increment 0.01 - * @group Spacecraft Rate Control - */ -PARAM_DEFINE_FLOAT(SC_YAWRATE_FF, 0.0f); - -/** - * Yaw rate controller gain - * - * Global gain of the controller. - * - * This gain scales the P, I and D terms of the controller: - * output = SC_YAWRATE_K * (SC_YAWRATE_P * error - * + SC_YAWRATE_I * error_integral - * + SC_YAWRATE_D * error_derivative) - * Set SC_YAWRATE_P=1 to implement a PID in the ideal form. - * Set SC_YAWRATE_K=1 to implement a PID in the parallel form. - * - * @min 0.0 - * @max 5.0 - * @decimal 4 - * @increment 0.0005 - * @group Spacecraft Rate Control - */ -PARAM_DEFINE_FLOAT(SC_YAWRATE_K, 1.0f); - -/** - * Max acro roll rate - * - * default: 2 turns per second - * - * @unit deg/s - * @min 0.0 - * @max 1800.0 - * @decimal 1 - * @increment 5 - * @group Spacecraft Rate Control - */ -PARAM_DEFINE_FLOAT(SC_ACRO_R_MAX, 720.0f); - -/** - * Max acro pitch rate - * - * default: 2 turns per second - * - * @unit deg/s - * @min 0.0 - * @max 1800.0 - * @decimal 1 - * @increment 5 - * @group Spacecraft Rate Control - */ -PARAM_DEFINE_FLOAT(SC_ACRO_P_MAX, 720.0f); - -/** - * Max acro yaw rate - * - * default 1.5 turns per second - * - * @unit deg/s - * @min 0.0 - * @max 1800.0 - * @decimal 1 - * @increment 5 - * @group Spacecraft Rate Control - */ -PARAM_DEFINE_FLOAT(SC_ACRO_Y_MAX, 540.0f); - -/** - * Acro mode Expo factor for Roll and Pitch. - * - * Exponential factor for tuning the input curve shape. - * - * 0 Purely linear input curve - * 1 Purely cubic input curve - * - * @min 0 - * @max 1 - * @decimal 2 - * @group Spacecraft Rate Control - */ -PARAM_DEFINE_FLOAT(SC_ACRO_EXPO, 0.69f); - -/** - * Acro mode Expo factor for Yaw. - * - * Exponential factor for tuning the input curve shape. - * - * 0 Purely linear input curve - * 1 Purely cubic input curve - * - * @min 0 - * @max 1 - * @decimal 2 - * @group Spacecraft Rate Control - */ -PARAM_DEFINE_FLOAT(SC_ACRO_EXPO_Y, 0.69f); - -/** - * Acro mode SuperExpo factor for Roll and Pitch. - * - * SuperExpo factor for refining the input curve shape tuned using SC_ACRO_EXPO. - * - * 0 Pure Expo function - * 0.7 reasonable shape enhancement for intuitive stick feel - * 0.95 very strong bent input curve only near maxima have effect - * - * @min 0 - * @max 0.95 - * @decimal 2 - * @group Spacecraft Rate Control - */ -PARAM_DEFINE_FLOAT(SC_ACRO_SUPEXPO, 0.7f); - -/** - * Acro mode SuperExpo factor for Yaw. - * - * SuperExpo factor for refining the input curve shape tuned using SC_ACRO_EXPO_Y. - * - * 0 Pure Expo function - * 0.7 reasonable shape enhancement for intuitive stick feel - * 0.95 very strong bent input curve only near maxima have effect - * - * @min 0 - * @max 0.95 - * @decimal 2 - * @group Spacecraft Rate Control - */ -PARAM_DEFINE_FLOAT(SC_ACRO_SUPEXPOY, 0.7f); - -/** - * Battery power level scaler - * - * This compensates for voltage drop of the battery over time by attempting to - * normalize performance across the operating range of the battery. The copter - * should constantly behave as if it was fully charged with reduced max acceleration - * at lower battery percentages. i.e. if hover is at 0.5 throttle at 100% battery, - * it will still be 0.5 at 60% battery. - * - * @boolean - * @group Spacecraft Rate Control - */ -PARAM_DEFINE_INT32(SC_BAT_SCALE_EN, 0); - -/** - * Manual mode maximum force. - * - * * - * @min 0 - * @max 1.0 - * @decimal 2 - * @group Spacecraft Rate Control - */ -PARAM_DEFINE_FLOAT(SC_MAN_F_MAX, 1.0f); - -/** - * Manual mode maximum torque. - * - * * - * @min 0 - * @max 1.0 - * @decimal 2 - * @group Spacecraft Rate Control - */ -PARAM_DEFINE_FLOAT(SC_MAN_T_MAX, 1.0f); diff --git a/src/modules/spacecraft/spacecraft_rate_params.yaml b/src/modules/spacecraft/spacecraft_rate_params.yaml new file mode 100644 index 0000000000..fc4caf2668 --- /dev/null +++ b/src/modules/spacecraft/spacecraft_rate_params.yaml @@ -0,0 +1,326 @@ +module_name: spacecraft +parameters: +- group: Spacecraft Rate Control + definitions: + SC_ROLLRATE_P: + description: + short: Roll rate P gain + long: Roll rate proportional gain, i.e. control output for angular speed error + 1 rad/s. + type: float + default: 0.15 + min: 0.01 + max: 0.5 + decimal: 3 + increment: 0.01 + SC_ROLLRATE_I: + description: + short: Roll rate I gain + long: Roll rate integral gain. Can be set to compensate static thrust difference + or gravity center offset. + type: float + default: 0.2 + min: 0.0 + decimal: 3 + increment: 0.01 + SC_RR_INT_LIM: + description: + short: Roll rate integrator limit + long: Roll rate integrator limit. Can be set to increase the amount of integrator + available to counteract disturbances or reduced to improve settling time + after large roll moment trim changes. + type: float + default: 0.3 + min: 0.0 + decimal: 2 + increment: 0.01 + SC_ROLLRATE_D: + description: + short: Roll rate D gain + long: Roll rate differential gain. Small values help reduce fast oscillations. + If value is too big oscillations will appear again. + type: float + default: 0.003 + min: 0.0 + max: 0.01 + decimal: 4 + increment: 0.0005 + SC_ROLLRATE_FF: + description: + short: Roll rate feedforward + long: Improves tracking performance. + type: float + default: 0.0 + min: 0.0 + decimal: 4 + SC_ROLLRATE_K: + description: + short: Roll rate controller gain + long: |- + Global gain of the controller. + + This gain scales the P, I and D terms of the controller: + output = SC_ROLLRATE_K * (SC_ROLLRATE_P * error + + SC_ROLLRATE_I * error_integral + + SC_ROLLRATE_D * error_derivative) + Set SC_ROLLRATE_P=1 to implement a PID in the ideal form. + Set SC_ROLLRATE_K=1 to implement a PID in the parallel form. + type: float + default: 1.0 + min: 0.01 + max: 5.0 + decimal: 4 + increment: 0.0005 + SC_PITCHRATE_P: + description: + short: Pitch rate P gain + long: Pitch rate proportional gain, i.e. control output for angular speed + error 1 rad/s. + type: float + default: 0.15 + min: 0.01 + max: 0.6 + decimal: 3 + increment: 0.01 + SC_PITCHRATE_I: + description: + short: Pitch rate I gain + long: Pitch rate integral gain. Can be set to compensate static thrust difference + or gravity center offset. + type: float + default: 0.2 + min: 0.0 + decimal: 3 + increment: 0.01 + SC_PR_INT_LIM: + description: + short: Pitch rate integrator limit + long: Pitch rate integrator limit. Can be set to increase the amount of integrator + available to counteract disturbances or reduced to improve settling time + after large pitch moment trim changes. + type: float + default: 0.3 + min: 0.0 + decimal: 2 + increment: 0.01 + SC_PITCHRATE_D: + description: + short: Pitch rate D gain + long: Pitch rate differential gain. Small values help reduce fast oscillations. + If value is too big oscillations will appear again. + type: float + default: 0.003 + min: 0.0 + decimal: 4 + increment: 0.0005 + SC_PITCHRATE_FF: + description: + short: Pitch rate feedforward + long: Improves tracking performance. + type: float + default: 0.0 + min: 0.0 + decimal: 4 + SC_PITCHRATE_K: + description: + short: Pitch rate controller gain + long: |- + Global gain of the controller. + + This gain scales the P, I and D terms of the controller: + output = SC_PITCHRATE_K * (SC_PITCHRATE_P * error + + SC_PITCHRATE_I * error_integral + + SC_PITCHRATE_D * error_derivative) + Set SC_PITCHRATE_P=1 to implement a PID in the ideal form. + Set SC_PITCHRATE_K=1 to implement a PID in the parallel form. + type: float + default: 1.0 + min: 0.01 + max: 5.0 + decimal: 4 + increment: 0.0005 + SC_YAWRATE_P: + description: + short: Yaw rate P gain + long: Yaw rate proportional gain, i.e. control output for angular speed error + 1 rad/s. + type: float + default: 10.0 + min: 0.0 + max: 10.0 + decimal: 2 + increment: 0.01 + SC_YAWRATE_I: + description: + short: Yaw rate I gain + long: Yaw rate integral gain. Can be set to compensate static thrust difference + or gravity center offset. + type: float + default: 0.865 + min: 0.0 + decimal: 2 + increment: 0.01 + SC_YR_INT_LIM: + description: + short: Yaw rate integrator limit + long: Yaw rate integrator limit. Can be set to increase the amount of integrator + available to counteract disturbances or reduced to improve settling time + after large yaw moment trim changes. + type: float + default: 0.2 + min: 0.0 + decimal: 2 + increment: 0.01 + SC_YAWRATE_D: + description: + short: Yaw rate D gain + long: Yaw rate differential gain. Small values help reduce fast oscillations. + If value is too big oscillations will appear again. + type: float + default: 0.0 + min: 0.0 + decimal: 2 + increment: 0.01 + SC_YAWRATE_FF: + description: + short: Yaw rate feedforward + long: Improves tracking performance. + type: float + default: 0.0 + min: 0.0 + decimal: 4 + increment: 0.01 + SC_YAWRATE_K: + description: + short: Yaw rate controller gain + long: |- + Global gain of the controller. + + This gain scales the P, I and D terms of the controller: + output = SC_YAWRATE_K * (SC_YAWRATE_P * error + + SC_YAWRATE_I * error_integral + + SC_YAWRATE_D * error_derivative) + Set SC_YAWRATE_P=1 to implement a PID in the ideal form. + Set SC_YAWRATE_K=1 to implement a PID in the parallel form. + type: float + default: 1.0 + min: 0.0 + max: 5.0 + decimal: 4 + increment: 0.0005 + SC_ACRO_R_MAX: + description: + short: Max acro roll rate + long: 'default: 2 turns per second' + type: float + default: 720.0 + unit: deg/s + min: 0.0 + max: 1800.0 + decimal: 1 + increment: 5 + SC_ACRO_P_MAX: + description: + short: Max acro pitch rate + long: 'default: 2 turns per second' + type: float + default: 720.0 + unit: deg/s + min: 0.0 + max: 1800.0 + decimal: 1 + increment: 5 + SC_ACRO_Y_MAX: + description: + short: Max acro yaw rate + long: default 1.5 turns per second + type: float + default: 540.0 + unit: deg/s + min: 0.0 + max: 1800.0 + decimal: 1 + increment: 5 + SC_ACRO_EXPO: + description: + short: Acro mode Expo factor for Roll and Pitch + long: |- + Exponential factor for tuning the input curve shape. + + 0 Purely linear input curve + 1 Purely cubic input curve + type: float + default: 0.69 + min: 0 + max: 1 + decimal: 2 + SC_ACRO_EXPO_Y: + description: + short: Acro mode Expo factor for Yaw + long: |- + Exponential factor for tuning the input curve shape. + + 0 Purely linear input curve + 1 Purely cubic input curve + type: float + default: 0.69 + min: 0 + max: 1 + decimal: 2 + SC_ACRO_SUPEXPO: + description: + short: Acro mode SuperExpo factor for Roll and Pitch + long: |- + SuperExpo factor for refining the input curve shape tuned using SC_ACRO_EXPO. + + 0 Pure Expo function + 0.7 reasonable shape enhancement for intuitive stick feel + 0.95 very strong bent input curve only near maxima have effect + type: float + default: 0.7 + min: 0 + max: 0.95 + decimal: 2 + SC_ACRO_SUPEXPOY: + description: + short: Acro mode SuperExpo factor for Yaw + long: |- + SuperExpo factor for refining the input curve shape tuned using SC_ACRO_EXPO_Y. + + 0 Pure Expo function + 0.7 reasonable shape enhancement for intuitive stick feel + 0.95 very strong bent input curve only near maxima have effect + type: float + default: 0.7 + min: 0 + max: 0.95 + decimal: 2 + SC_BAT_SCALE_EN: + description: + short: Battery power level scaler + long: |- + This compensates for voltage drop of the battery over time by attempting to + normalize performance across the operating range of the battery. The copter + should constantly behave as if it was fully charged with reduced max acceleration + at lower battery percentages. i.e. if hover is at 0.5 throttle at 100% battery, + it will still be 0.5 at 60% battery. + type: boolean + default: 0 + SC_MAN_F_MAX: + description: + short: Manual mode maximum force + long: '*' + type: float + default: 1.0 + min: 0 + max: 1.0 + decimal: 2 + SC_MAN_T_MAX: + description: + short: Manual mode maximum torque + long: '*' + type: float + default: 1.0 + min: 0 + max: 1.0 + decimal: 2 diff --git a/src/modules/task_watchdog/CMakeLists.txt b/src/modules/task_watchdog/CMakeLists.txt new file mode 100644 index 0000000000..cb47379c87 --- /dev/null +++ b/src/modules/task_watchdog/CMakeLists.txt @@ -0,0 +1,41 @@ +############################################################################ +# +# Copyright (c) 2026 PX4 Development Team. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# 3. Neither the name PX4 nor the names of its contributors may be +# used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS +# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED +# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +############################################################################ + +px4_add_module( + MODULE modules__task_watchdog + MAIN task_watchdog + SRCS + TaskWatchdog.cpp + DEPENDS + version +) diff --git a/src/modules/task_watchdog/Kconfig b/src/modules/task_watchdog/Kconfig new file mode 100644 index 0000000000..94e1933878 --- /dev/null +++ b/src/modules/task_watchdog/Kconfig @@ -0,0 +1,6 @@ +menuconfig MODULES_TASK_WATCHDOG + bool "task_watchdog" + default n + depends on PLATFORM_NUTTX + ---help--- + Detect tasks running too long and dump their register/stack state and cpuload to files diff --git a/src/modules/task_watchdog/TaskWatchdog.cpp b/src/modules/task_watchdog/TaskWatchdog.cpp new file mode 100644 index 0000000000..3d91f43616 --- /dev/null +++ b/src/modules/task_watchdog/TaskWatchdog.cpp @@ -0,0 +1,486 @@ +/**************************************************************************** + * + * Copyright (c) 2026 PX4 Development Team. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name PX4 nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +#include "TaskWatchdog.hpp" + +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include + +#ifndef CONFIG_BUILD_FLAT +# error Task Watchdog requires flat build, please enable it to use this module +#endif + +using namespace time_literals; + +namespace task_watchdog +{ + +ModuleBase::Descriptor TaskWatchdog::desc{task_spawn, custom_command, print_usage}; + +TaskWatchdog::TaskWatchdog() +{ +} + +TaskWatchdog::~TaskWatchdog() +{ + hrt_cancel(&_hrt_call); + px4_sem_destroy(&_sem); +} + +int TaskWatchdog::run_trampoline(int argc, char *argv[]) +{ + return ModuleBase::run_trampoline_impl(desc, [](int ac, char *av[]) -> ModuleBase * { + TaskWatchdog *instance = new TaskWatchdog(); + + if (instance == nullptr) + { + PX4_ERR("alloc failed"); + } + + return instance; + }, argc, argv); +} + +int TaskWatchdog::task_spawn(int argc, char *argv[]) +{ + desc.task_id = px4_task_spawn_cmd("task_watchdog", + SCHED_DEFAULT, + SCHED_PRIORITY_LOG_WRITER, + PX4_STACK_ADJUSTED(3250), + (px4_main_t)&run_trampoline, + (char *const *)argv); + + if (desc.task_id < 0) { + desc.task_id = -1; + PX4_ERR("task start failed: %d", errno); + return -errno; + } + + return 0; +} + +void TaskWatchdog::start() +{ + px4_sem_init(&_sem, 0, 0); + px4_sem_setprotocol(&_sem, SEM_PRIO_NONE); + _shared.sem = &_sem; + + // Find our own task in the system_load table + const pid_t my_pid = getpid(); + + sched_lock(); + + for (int i = 0; i < CONFIG_FS_PROCFS_MAX_TASKS; i++) { + if (system_load.tasks[i].valid && system_load.tasks[i].tcb->pid == my_pid) { + _shared.monitored_task_index = i; + break; + } + } + + sched_unlock(); + + if (_shared.monitored_task_index < 0) { + PX4_ERR("could not find own task in system_load"); + } + + _shared.ready_to_run_timestamp = hrt_absolute_time(); + + // Start HRT ISR + hrt_call_every(&_hrt_call, 400_ms, 400_ms, isr_callback, &_shared); +} + +void TaskWatchdog::isr_callback(void *arg) +{ + watchdog_shared_s *shared = static_cast(arg); + + if (!system_load.initialized || shared->monitored_task_index < 0) { + return; + } + + const system_load_taskinfo_s &watchdog_task = system_load.tasks[shared->monitored_task_index]; + const hrt_abstime now = hrt_absolute_time(); + + if (!watchdog_task.valid) { + shared->monitored_task_index = -1; + return; + } + + // Already triggered — wait for the task side to process + if (shared->triggered.load()) { + // Wake the task, otherwise it can get stuck when starved before entering the sem wait + px4_sem_post(shared->sem); + return; + } + + // Already in post-trigger priority restore phase + if (shared->trigger_time != 0 && now > shared->trigger_time + 1500_ms) { + // Restore our original priority + sched_param param{}; + param.sched_priority = shared->original_priority; + sched_setparam(watchdog_task.tcb->pid, ¶m); + + // Only trigger once as the system may be in an unstable state + shared->monitored_task_index = -1; + return; + } + + // If the task ran recently, update the timestamp + if (watchdog_task.curr_start_time > shared->ready_to_run_timestamp) { + shared->ready_to_run_timestamp = watchdog_task.curr_start_time; + } + + // Reset timestamp on state transitions into/out of READYTORUN + uint8_t current_state = watchdog_task.tcb->task_state; + + if (current_state != TSTATE_TASK_READYTORUN || + (shared->last_state != TSTATE_TASK_READYTORUN && current_state == TSTATE_TASK_READYTORUN)) { + shared->ready_to_run_timestamp = now; + } + + shared->last_state = current_state; + + // Check if we've been starved for too long + if (!shared->manual_trigger && now <= shared->ready_to_run_timestamp + TRIGGER_THRESHOLD) { + // Wake the task so it runs briefly, keeping curr_start_time fresh + px4_sem_post(shared->sem); + return; + } + + // --- TRIGGERED --- + + shared->manual_trigger = false; + + // Boost our own priority so we actually get to run and write the dump + sched_param param{}; + sched_getparam(watchdog_task.tcb->pid, ¶m); + shared->original_priority = param.sched_priority; + param.sched_priority = SCHED_PRIORITY_LOG_WATCHDOG; + sched_setparam(watchdog_task.tcb->pid, ¶m); + + shared->trigger_time = now; + shared->triggered.store(true); + px4_sem_post(shared->sem); +} + +void TaskWatchdog::run() +{ + start(); + + while (!should_exit()) { + + if (_cpuload_pending) { + _cpuload_pending = false; + cpuload_monitor_stop(); + write_cpuload_file(); + } + + if (_shared.triggered.load()) { + _shared.triggered.store(false); + + PX4_ERR("task starvation detected!"); + capture_and_write_dump(); + + cpuload_monitor_start(); + init_print_load(&_load); + _cpuload_pending = true; + } + + if (_cpuload_pending) { + px4_usleep(CPULOAD_ACCUMULATE_TIME); + + } else { + // Drain any extra posts that accumulated while the task was asleep + int val; + px4_sem_getvalue(&_sem, &val); + + while (val > 0) { + px4_sem_trywait(&_sem); + px4_sem_getvalue(&_sem, &val); + } + + while (px4_sem_wait(&_sem) != 0) {} + } + } + + hrt_cancel(&_hrt_call); +} + +void TaskWatchdog::capture_and_write_dump() +{ + mkdir(LOG_PATH_BASE, S_IRWXU | S_IRWXG | S_IRWXO); + + char path[64]; + int ret = format_file_path(LOG_WDG, path, sizeof(path)); + + if (ret != PX4_OK) { + PX4_ERR("Could not create watchdog dump file: %d", ret); + return; + } + + int fd = open(path, O_WRONLY | O_CREAT | O_TRUNC, 0666); + + if (fd < 0) { + PX4_ERR("failed to create %s: %d", path, errno); + return; + } + + dprintf(fd, "Task Watchdog Dump\n"); + dprintf(fd, "FW git-hash: %s\n", px4_firmware_version_string()); + dprintf(fd, "Build datetime: %s %s\n", __DATE__, __TIME__); + dprintf(fd, "Build url: %s \n", px4_build_uri()); + + const hrt_abstime now = hrt_absolute_time(); + + /* Loop 1: capture under sched_lock */ + sched_lock(); + + for (int i = 0; i < CONFIG_FS_PROCFS_MAX_TASKS; i++) { + const system_load_taskinfo_s &task = system_load.tasks[i]; + + if (!task.valid || !task.tcb || task.tcb->pid == 0) { + continue; + } + + task_dump_s &d = _dumps[i]; + d.pid = task.tcb->pid; + d.state = task.tcb->task_state; + +#if CONFIG_TASK_NAME_SIZE > 0 + strncpy(d.name, task.tcb->name, CONFIG_TASK_NAME_SIZE); + d.name[CONFIG_TASK_NAME_SIZE] = '\0'; +#endif + + if (task.tcb->xcp.regs && task.tcb->task_state != TSTATE_TASK_RUNNING) { + memcpy(d.regs, task.tcb->xcp.regs, sizeof(d.regs)); + d.has_regs = true; + + const uintptr_t sp = d.regs[REG_R13]; + const uintptr_t stack_top = (uintptr_t)task.tcb->stack_base_ptr + + task.tcb->adj_stack_size; + + if (sp >= (uintptr_t)task.tcb->stack_base_ptr && sp < stack_top) { + unsigned words_avail = (stack_top - sp) / sizeof(uint32_t); + d.stack_words = (words_avail < STACK_DUMP_WORDS) ? words_avail : STACK_DUMP_WORDS; + memcpy(d.stack, (const void *)sp, d.stack_words * sizeof(uint32_t)); + } + } + + d.valid = true; + } + + sched_unlock(); + + /* Loop 2: write to file — no locks held */ + for (int i = 0; i < CONFIG_FS_PROCFS_MAX_TASKS; i++) { + const task_dump_s &d = _dumps[i]; + + if (!d.valid) { + continue; + } + + dprintf(fd, "T:%" PRIu64 " %s(%d) state:%d", + now, +#if CONFIG_TASK_NAME_SIZE > 0 + d.name, +#else + "?", +#endif + (int)d.pid, + (int)d.state); + + if (d.has_regs) { + dprintf(fd, "\n r0:%08" PRIx32 " r1:%08" PRIx32 " r2:%08" PRIx32 " r3:%08" PRIx32 + " r4:%08" PRIx32 " r5:%08" PRIx32 " r6:%08" PRIx32 " r7:%08" PRIx32 "\n", + d.regs[REG_R0], d.regs[REG_R1], + d.regs[REG_R2], d.regs[REG_R3], + d.regs[REG_R4], d.regs[REG_R5], + d.regs[REG_R6], d.regs[REG_R7]); + dprintf(fd, " r8:%08" PRIx32 " r9:%08" PRIx32 " r10:%08" PRIx32 " r11:%08" PRIx32 + " r12:%08" PRIx32 " sp:%08" PRIx32 " lr:%08" PRIx32 " pc:%08" PRIx32 "\n", + d.regs[REG_R8], d.regs[REG_R9], + d.regs[REG_R10], d.regs[REG_R11], + d.regs[REG_R12], d.regs[REG_R13], + d.regs[REG_R14], d.regs[REG_R15]); +#ifdef CONFIG_ARMV7M_USEBASEPRI + dprintf(fd, " xpsr:%08" PRIx32 " basepri:%08" PRIx32 "\n", + d.regs[REG_XPSR], d.regs[REG_BASEPRI]); +#else + dprintf(fd, " xpsr:%08" PRIx32 " primask:%08" PRIx32 "\n", + d.regs[REG_XPSR], d.regs[REG_PRIMASK]); +#endif + + if (d.stack_words > 0) { + dprintf(fd, "STK(%u@%08" PRIx32 "):", d.stack_words, d.regs[REG_R13]); + + for (unsigned j = 0; j < d.stack_words; j++) { + if (j > 0 && (j % 8) == 0) { + dprintf(fd, "\n"); + } + + dprintf(fd, " %08" PRIx32, d.stack[j]); + } + + dprintf(fd, "\n"); + } + + } else { + dprintf(fd, " [no saved regs]\n"); + } + } + + fsync(fd); + close(fd); + PX4_INFO("dump written to %s", path); +} + +void TaskWatchdog::write_cpuload_file() +{ + mkdir(LOG_PATH_BASE, S_IRWXU | S_IRWXG | S_IRWXO); + + char path[64]; + int ret = format_file_path(LOG_LOAD, path, sizeof(path)); + + if (ret != PX4_OK) { + PX4_ERR("Could not create load dump file: %d", ret); + return; + } + + int fd = open(path, O_WRONLY | O_CREAT | O_TRUNC, 0666); + + if (fd < 0) { + PX4_ERR("failed to create %s: %d", path, errno); + return; + } + + print_load(fd, &_load); + + fsync(fd); + close(fd); + PX4_INFO("cpuload written to %s", path); +} + +int TaskWatchdog::format_file_path(log_type_t type, char *buf, size_t bufsz) +{ + if (!buf || bufsz == 0) { + return -EINVAL; + } + + struct timespec ts; + + struct tm tm; + + char timebuf[32]; + + if (clock_gettime(CLOCK_REALTIME, &ts) != 0) { + return -errno; + } + + if (!localtime_r(&ts.tv_sec, &tm)) { + return -EINVAL; + } + + if (strftime(timebuf, sizeof(timebuf), TIME_FMT, &tm) == 0) { + return -EINVAL; + } + + const char *fmt = (type == LOG_WDG) ? LOG_WDG_NAME_FMT : LOG_LOAD_NAME_FMT; + + int n = snprintf(buf, bufsz, "%s/", LOG_PATH_BASE); + + if (n < 0 || (size_t)n >= bufsz) { + return -ENAMETOOLONG; + } + + int m = snprintf(buf + n, bufsz - n, fmt, timebuf); + + if (m < 0 || (size_t)m >= bufsz - n) { + return -ENAMETOOLONG; + } + + return PX4_OK; +} + +int TaskWatchdog::custom_command(int argc, char *argv[]) +{ + if (!is_running(desc)) { + print_usage("task_watchdog not running"); + return 1; + } + + if (!strcmp(argv[0], "trigger")) { + get_instance(desc)->_shared.manual_trigger = true; + PX4_INFO("manual watchdog trigger requested"); + return 0; + } + + return print_usage("unknown command"); +} + +int TaskWatchdog::print_usage(const char *reason) +{ + if (reason) { + PX4_WARN("%s\n", reason); + } + + PRINT_MODULE_DESCRIPTION( + R"DESCR_STR( +### Description +Detects when a higher-priority task starves the system by running too long. +When starvation is detected, dumps the offending task's registers and stack, +and saves a cpuload snapshot. +)DESCR_STR"); + + PRINT_MODULE_USAGE_NAME("task_watchdog", "system"); + PRINT_MODULE_USAGE_COMMAND("start"); + PRINT_MODULE_USAGE_COMMAND_DESCR("trigger", "Manually trigger the watchdog"); + PRINT_MODULE_USAGE_DEFAULT_COMMANDS(); + + return 0; +} + +} // namespace task_watchdog + +extern "C" __EXPORT int task_watchdog_main(int argc, char *argv[]) +{ + return ModuleBase::main(task_watchdog::TaskWatchdog::desc, argc, argv); +} diff --git a/src/modules/task_watchdog/TaskWatchdog.hpp b/src/modules/task_watchdog/TaskWatchdog.hpp new file mode 100644 index 0000000000..8a76145d83 --- /dev/null +++ b/src/modules/task_watchdog/TaskWatchdog.hpp @@ -0,0 +1,129 @@ +/**************************************************************************** + * + * Copyright (c) 2026 PX4 Development Team. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name PX4 nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define LOG_PATH_BASE CONFIG_BOARD_ROOT_PATH "/task_watchdog" +#define LOG_WDG_NAME_FMT "wdg_%s.log" +#define LOG_LOAD_NAME_FMT "load_%s.log" +#define TIME_FMT "%Y_%m_%d_%H_%M_%S" + +using namespace time_literals; + +namespace task_watchdog +{ + +static constexpr unsigned STACK_DUMP_WORDS = 16; + +struct task_dump_s { + pid_t pid{0}; + uint8_t state{0}; +#if CONFIG_TASK_NAME_SIZE > 0 + char name[CONFIG_TASK_NAME_SIZE + 1] {}; +#endif + uint32_t regs[XCPTCONTEXT_REGS] {}; + uint32_t stack[STACK_DUMP_WORDS] {}; + unsigned stack_words{0}; + bool has_regs{false}; + bool valid{false}; +}; + +/* Shared state between ISR and task */ +struct watchdog_shared_s { + int monitored_task_index{-1}; ///< system_load index of this module's task + hrt_abstime ready_to_run_timestamp{0}; + uint8_t last_state{TSTATE_TASK_INVALID}; + int original_priority{0}; + hrt_abstime trigger_time{0}; + px4::atomic_bool triggered{false}; + bool manual_trigger{false}; ///< set from custom_command, checked by ISR + px4_sem_t *sem{nullptr}; ///< posted by ISR to wake the task immediately +}; + +typedef enum { + LOG_WDG, + LOG_LOAD +} log_type_t; + +class TaskWatchdog : public ModuleBase +{ +public: + static Descriptor desc; + + TaskWatchdog(); + ~TaskWatchdog() override; + + static int task_spawn(int argc, char *argv[]); + static int run_trampoline(int argc, char *argv[]); + static int custom_command(int argc, char *argv[]); + static int print_usage(const char *reason = nullptr); + + void run() override; + +private: + void start(); + + /* Capture all tasks and write register+stack dump to a file. Called from task context at boosted priority. */ + void capture_and_write_dump(); + + /* Write cpuload snapshot to a file. Called from task context. */ + void write_cpuload_file(); + + int format_file_path(log_type_t type, char *buf, size_t bufsz); + + /* HRT ISR callback which monitors whether this task is being starved. */ + static void isr_callback(void *arg); + + hrt_call _hrt_call{}; + watchdog_shared_s _shared{}; + px4_sem_t _sem; + task_dump_s _dumps[CONFIG_FS_PROCFS_MAX_TASKS] {}; + print_load_s _load{}; + + bool _cpuload_pending{false}; + + static constexpr hrt_abstime TRIGGER_THRESHOLD = 2_s; ///< time in ready to run to trigger watchdog + static constexpr hrt_abstime CPULOAD_ACCUMULATE_TIME = 300_ms; ///< how long to accumulate cpuload data +}; + +} // namespace task_watchdog diff --git a/src/modules/temperature_compensation/CMakeLists.txt b/src/modules/temperature_compensation/CMakeLists.txt index df20d1d407..6bda194b07 100644 --- a/src/modules/temperature_compensation/CMakeLists.txt +++ b/src/modules/temperature_compensation/CMakeLists.txt @@ -42,6 +42,27 @@ px4_add_module( temperature_calibration/gyro.cpp temperature_calibration/mag.cpp temperature_calibration/task.cpp + MODULE_CONFIG + temp_comp_params_accel.yaml + temp_comp_params_accel_0.yaml + temp_comp_params_accel_1.yaml + temp_comp_params_accel_2.yaml + temp_comp_params_accel_3.yaml + temp_comp_params_baro.yaml + temp_comp_params_baro_0.yaml + temp_comp_params_baro_1.yaml + temp_comp_params_baro_2.yaml + temp_comp_params_baro_3.yaml + temp_comp_params_gyro.yaml + temp_comp_params_gyro_0.yaml + temp_comp_params_gyro_1.yaml + temp_comp_params_gyro_2.yaml + temp_comp_params_gyro_3.yaml + temp_comp_params_mag.yaml + temp_comp_params_mag_0.yaml + temp_comp_params_mag_1.yaml + temp_comp_params_mag_2.yaml + temp_comp_params_mag_3.yaml DEPENDS mathlib ) diff --git a/src/modules/temperature_compensation/temp_comp_params_accel.c b/src/modules/temperature_compensation/temp_comp_params_accel.c deleted file mode 100644 index f42e7ac3aa..0000000000 --- a/src/modules/temperature_compensation/temp_comp_params_accel.c +++ /dev/null @@ -1,41 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2017-2020 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Thermal compensation for accelerometer sensors. - * - * @group Thermal Compensation - * @reboot_required true - * @boolean - */ -PARAM_DEFINE_INT32(TC_A_ENABLE, 0); diff --git a/src/modules/temperature_compensation/temp_comp_params_accel.yaml b/src/modules/temperature_compensation/temp_comp_params_accel.yaml new file mode 100644 index 0000000000..a266a7477e --- /dev/null +++ b/src/modules/temperature_compensation/temp_comp_params_accel.yaml @@ -0,0 +1,10 @@ +module_name: temperature_compensation +parameters: +- group: Thermal Compensation + definitions: + TC_A_ENABLE: + description: + short: Thermal compensation for accelerometer sensors + type: boolean + default: 0 + reboot_required: true diff --git a/src/modules/temperature_compensation/temp_comp_params_accel_0.c b/src/modules/temperature_compensation/temp_comp_params_accel_0.c deleted file mode 100644 index 1b4f03471e..0000000000 --- a/src/modules/temperature_compensation/temp_comp_params_accel_0.c +++ /dev/null @@ -1,162 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2017-2020 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/* Accelerometer 0 */ - -/** - * ID of Accelerometer that the calibration is for. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_INT32(TC_A0_ID, 0); - -/** - * Accelerometer offset temperature ^3 polynomial coefficient - X axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A0_X3_0, 0.0f); - -/** - * Accelerometer offset temperature ^3 polynomial coefficient - Y axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A0_X3_1, 0.0f); - -/** - * Accelerometer offset temperature ^3 polynomial coefficient - Z axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A0_X3_2, 0.0f); - -/** - * Accelerometer offset temperature ^2 polynomial coefficient - X axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A0_X2_0, 0.0f); - -/** - * Accelerometer offset temperature ^2 polynomial coefficient - Y axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A0_X2_1, 0.0f); - -/** - * Accelerometer offset temperature ^2 polynomial coefficient - Z axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A0_X2_2, 0.0f); - -/** - * Accelerometer offset temperature ^1 polynomial coefficient - X axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A0_X1_0, 0.0f); - -/** - * Accelerometer offset temperature ^1 polynomial coefficient - Y axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A0_X1_1, 0.0f); - -/** - * Accelerometer offset temperature ^1 polynomial coefficient - Z axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A0_X1_2, 0.0f); - -/** - * Accelerometer offset temperature ^0 polynomial coefficient - X axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A0_X0_0, 0.0f); - -/** - * Accelerometer offset temperature ^0 polynomial coefficient - Y axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A0_X0_1, 0.0f); - -/** - * Accelerometer offset temperature ^0 polynomial coefficient - Z axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A0_X0_2, 0.0f); - -/** - * Accelerometer calibration reference temperature. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A0_TREF, 25.0f); - -/** - * Accelerometer calibration minimum temperature. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A0_TMIN, 0.0f); - -/** - * Accelerometer calibration maximum temperature. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A0_TMAX, 100.0f); diff --git a/src/modules/temperature_compensation/temp_comp_params_accel_0.yaml b/src/modules/temperature_compensation/temp_comp_params_accel_0.yaml new file mode 100644 index 0000000000..67858e49f9 --- /dev/null +++ b/src/modules/temperature_compensation/temp_comp_params_accel_0.yaml @@ -0,0 +1,100 @@ +module_name: temperature_compensation +parameters: +- group: Thermal Compensation + definitions: + TC_A0_ID: + description: + short: ID of Accelerometer that the calibration is for + category: System + type: int32 + default: 0 + TC_A0_X3_0: + description: + short: Accelerometer offset temperature ^3 polynomial coefficient - X axis + category: System + type: float + default: 0.0 + TC_A0_X3_1: + description: + short: Accelerometer offset temperature ^3 polynomial coefficient - Y axis + category: System + type: float + default: 0.0 + TC_A0_X3_2: + description: + short: Accelerometer offset temperature ^3 polynomial coefficient - Z axis + category: System + type: float + default: 0.0 + TC_A0_X2_0: + description: + short: Accelerometer offset temperature ^2 polynomial coefficient - X axis + category: System + type: float + default: 0.0 + TC_A0_X2_1: + description: + short: Accelerometer offset temperature ^2 polynomial coefficient - Y axis + category: System + type: float + default: 0.0 + TC_A0_X2_2: + description: + short: Accelerometer offset temperature ^2 polynomial coefficient - Z axis + category: System + type: float + default: 0.0 + TC_A0_X1_0: + description: + short: Accelerometer offset temperature ^1 polynomial coefficient - X axis + category: System + type: float + default: 0.0 + TC_A0_X1_1: + description: + short: Accelerometer offset temperature ^1 polynomial coefficient - Y axis + category: System + type: float + default: 0.0 + TC_A0_X1_2: + description: + short: Accelerometer offset temperature ^1 polynomial coefficient - Z axis + category: System + type: float + default: 0.0 + TC_A0_X0_0: + description: + short: Accelerometer offset temperature ^0 polynomial coefficient - X axis + category: System + type: float + default: 0.0 + TC_A0_X0_1: + description: + short: Accelerometer offset temperature ^0 polynomial coefficient - Y axis + category: System + type: float + default: 0.0 + TC_A0_X0_2: + description: + short: Accelerometer offset temperature ^0 polynomial coefficient - Z axis + category: System + type: float + default: 0.0 + TC_A0_TREF: + description: + short: Accelerometer calibration reference temperature + category: System + type: float + default: 25.0 + TC_A0_TMIN: + description: + short: Accelerometer calibration minimum temperature + category: System + type: float + default: 0.0 + TC_A0_TMAX: + description: + short: Accelerometer calibration maximum temperature + category: System + type: float + default: 100.0 diff --git a/src/modules/temperature_compensation/temp_comp_params_accel_1.c b/src/modules/temperature_compensation/temp_comp_params_accel_1.c deleted file mode 100644 index ed3d0b0a39..0000000000 --- a/src/modules/temperature_compensation/temp_comp_params_accel_1.c +++ /dev/null @@ -1,162 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2017-2020 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/* Accelerometer 1 */ - -/** - * ID of Accelerometer that the calibration is for. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_INT32(TC_A1_ID, 0); - -/** - * Accelerometer offset temperature ^3 polynomial coefficient - X axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A1_X3_0, 0.0f); - -/** - * Accelerometer offset temperature ^3 polynomial coefficient - Y axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A1_X3_1, 0.0f); - -/** - * Accelerometer offset temperature ^3 polynomial coefficient - Z axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A1_X3_2, 0.0f); - -/** - * Accelerometer offset temperature ^2 polynomial coefficient - X axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A1_X2_0, 0.0f); - -/** - * Accelerometer offset temperature ^2 polynomial coefficient - Y axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A1_X2_1, 0.0f); - -/** - * Accelerometer offset temperature ^2 polynomial coefficient - Z axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A1_X2_2, 0.0f); - -/** - * Accelerometer offset temperature ^1 polynomial coefficient - X axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A1_X1_0, 0.0f); - -/** - * Accelerometer offset temperature ^1 polynomial coefficient - Y axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A1_X1_1, 0.0f); - -/** - * Accelerometer offset temperature ^1 polynomial coefficient - Z axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A1_X1_2, 0.0f); - -/** - * Accelerometer offset temperature ^0 polynomial coefficient - X axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A1_X0_0, 0.0f); - -/** - * Accelerometer offset temperature ^0 polynomial coefficient - Y axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A1_X0_1, 0.0f); - -/** - * Accelerometer offset temperature ^0 polynomial coefficient - Z axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A1_X0_2, 0.0f); - -/** - * Accelerometer calibration reference temperature. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A1_TREF, 25.0f); - -/** - * Accelerometer calibration minimum temperature. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A1_TMIN, 0.0f); - -/** - * Accelerometer calibration maximum temperature. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A1_TMAX, 100.0f); diff --git a/src/modules/temperature_compensation/temp_comp_params_accel_1.yaml b/src/modules/temperature_compensation/temp_comp_params_accel_1.yaml new file mode 100644 index 0000000000..637a27ffeb --- /dev/null +++ b/src/modules/temperature_compensation/temp_comp_params_accel_1.yaml @@ -0,0 +1,100 @@ +module_name: temperature_compensation +parameters: +- group: Thermal Compensation + definitions: + TC_A1_ID: + description: + short: ID of Accelerometer that the calibration is for + category: System + type: int32 + default: 0 + TC_A1_X3_0: + description: + short: Accelerometer offset temperature ^3 polynomial coefficient - X axis + category: System + type: float + default: 0.0 + TC_A1_X3_1: + description: + short: Accelerometer offset temperature ^3 polynomial coefficient - Y axis + category: System + type: float + default: 0.0 + TC_A1_X3_2: + description: + short: Accelerometer offset temperature ^3 polynomial coefficient - Z axis + category: System + type: float + default: 0.0 + TC_A1_X2_0: + description: + short: Accelerometer offset temperature ^2 polynomial coefficient - X axis + category: System + type: float + default: 0.0 + TC_A1_X2_1: + description: + short: Accelerometer offset temperature ^2 polynomial coefficient - Y axis + category: System + type: float + default: 0.0 + TC_A1_X2_2: + description: + short: Accelerometer offset temperature ^2 polynomial coefficient - Z axis + category: System + type: float + default: 0.0 + TC_A1_X1_0: + description: + short: Accelerometer offset temperature ^1 polynomial coefficient - X axis + category: System + type: float + default: 0.0 + TC_A1_X1_1: + description: + short: Accelerometer offset temperature ^1 polynomial coefficient - Y axis + category: System + type: float + default: 0.0 + TC_A1_X1_2: + description: + short: Accelerometer offset temperature ^1 polynomial coefficient - Z axis + category: System + type: float + default: 0.0 + TC_A1_X0_0: + description: + short: Accelerometer offset temperature ^0 polynomial coefficient - X axis + category: System + type: float + default: 0.0 + TC_A1_X0_1: + description: + short: Accelerometer offset temperature ^0 polynomial coefficient - Y axis + category: System + type: float + default: 0.0 + TC_A1_X0_2: + description: + short: Accelerometer offset temperature ^0 polynomial coefficient - Z axis + category: System + type: float + default: 0.0 + TC_A1_TREF: + description: + short: Accelerometer calibration reference temperature + category: System + type: float + default: 25.0 + TC_A1_TMIN: + description: + short: Accelerometer calibration minimum temperature + category: System + type: float + default: 0.0 + TC_A1_TMAX: + description: + short: Accelerometer calibration maximum temperature + category: System + type: float + default: 100.0 diff --git a/src/modules/temperature_compensation/temp_comp_params_accel_2.c b/src/modules/temperature_compensation/temp_comp_params_accel_2.c deleted file mode 100644 index 0155a2ab54..0000000000 --- a/src/modules/temperature_compensation/temp_comp_params_accel_2.c +++ /dev/null @@ -1,162 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2017-2020 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/* Accelerometer 2 */ - -/** - * ID of Accelerometer that the calibration is for. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_INT32(TC_A2_ID, 0); - -/** - * Accelerometer offset temperature ^3 polynomial coefficient - X axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A2_X3_0, 0.0f); - -/** - * Accelerometer offset temperature ^3 polynomial coefficient - Y axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A2_X3_1, 0.0f); - -/** - * Accelerometer offset temperature ^3 polynomial coefficient - Z axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A2_X3_2, 0.0f); - -/** - * Accelerometer offset temperature ^2 polynomial coefficient - X axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A2_X2_0, 0.0f); - -/** - * Accelerometer offset temperature ^2 polynomial coefficient - Y axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A2_X2_1, 0.0f); - -/** - * Accelerometer offset temperature ^2 polynomial coefficient - Z axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A2_X2_2, 0.0f); - -/** - * Accelerometer offset temperature ^1 polynomial coefficient - X axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A2_X1_0, 0.0f); - -/** - * Accelerometer offset temperature ^1 polynomial coefficient - Y axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A2_X1_1, 0.0f); - -/** - * Accelerometer offset temperature ^1 polynomial coefficient - Z axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A2_X1_2, 0.0f); - -/** - * Accelerometer offset temperature ^0 polynomial coefficient - X axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A2_X0_0, 0.0f); - -/** - * Accelerometer offset temperature ^0 polynomial coefficient - Y axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A2_X0_1, 0.0f); - -/** - * Accelerometer offset temperature ^0 polynomial coefficient - Z axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A2_X0_2, 0.0f); - -/** - * Accelerometer calibration reference temperature. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A2_TREF, 25.0f); - -/** - * Accelerometer calibration minimum temperature. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A2_TMIN, 0.0f); - -/** - * Accelerometer calibration maximum temperature. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A2_TMAX, 100.0f); diff --git a/src/modules/temperature_compensation/temp_comp_params_accel_2.yaml b/src/modules/temperature_compensation/temp_comp_params_accel_2.yaml new file mode 100644 index 0000000000..acbe656ed6 --- /dev/null +++ b/src/modules/temperature_compensation/temp_comp_params_accel_2.yaml @@ -0,0 +1,100 @@ +module_name: temperature_compensation +parameters: +- group: Thermal Compensation + definitions: + TC_A2_ID: + description: + short: ID of Accelerometer that the calibration is for + category: System + type: int32 + default: 0 + TC_A2_X3_0: + description: + short: Accelerometer offset temperature ^3 polynomial coefficient - X axis + category: System + type: float + default: 0.0 + TC_A2_X3_1: + description: + short: Accelerometer offset temperature ^3 polynomial coefficient - Y axis + category: System + type: float + default: 0.0 + TC_A2_X3_2: + description: + short: Accelerometer offset temperature ^3 polynomial coefficient - Z axis + category: System + type: float + default: 0.0 + TC_A2_X2_0: + description: + short: Accelerometer offset temperature ^2 polynomial coefficient - X axis + category: System + type: float + default: 0.0 + TC_A2_X2_1: + description: + short: Accelerometer offset temperature ^2 polynomial coefficient - Y axis + category: System + type: float + default: 0.0 + TC_A2_X2_2: + description: + short: Accelerometer offset temperature ^2 polynomial coefficient - Z axis + category: System + type: float + default: 0.0 + TC_A2_X1_0: + description: + short: Accelerometer offset temperature ^1 polynomial coefficient - X axis + category: System + type: float + default: 0.0 + TC_A2_X1_1: + description: + short: Accelerometer offset temperature ^1 polynomial coefficient - Y axis + category: System + type: float + default: 0.0 + TC_A2_X1_2: + description: + short: Accelerometer offset temperature ^1 polynomial coefficient - Z axis + category: System + type: float + default: 0.0 + TC_A2_X0_0: + description: + short: Accelerometer offset temperature ^0 polynomial coefficient - X axis + category: System + type: float + default: 0.0 + TC_A2_X0_1: + description: + short: Accelerometer offset temperature ^0 polynomial coefficient - Y axis + category: System + type: float + default: 0.0 + TC_A2_X0_2: + description: + short: Accelerometer offset temperature ^0 polynomial coefficient - Z axis + category: System + type: float + default: 0.0 + TC_A2_TREF: + description: + short: Accelerometer calibration reference temperature + category: System + type: float + default: 25.0 + TC_A2_TMIN: + description: + short: Accelerometer calibration minimum temperature + category: System + type: float + default: 0.0 + TC_A2_TMAX: + description: + short: Accelerometer calibration maximum temperature + category: System + type: float + default: 100.0 diff --git a/src/modules/temperature_compensation/temp_comp_params_accel_3.c b/src/modules/temperature_compensation/temp_comp_params_accel_3.c deleted file mode 100644 index f3d35cbedc..0000000000 --- a/src/modules/temperature_compensation/temp_comp_params_accel_3.c +++ /dev/null @@ -1,162 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2017-2020 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/* Accelerometer 3 */ - -/** - * ID of Accelerometer that the calibration is for. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_INT32(TC_A3_ID, 0); - -/** - * Accelerometer offset temperature ^3 polynomial coefficient - X axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A3_X3_0, 0.0f); - -/** - * Accelerometer offset temperature ^3 polynomial coefficient - Y axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A3_X3_1, 0.0f); - -/** - * Accelerometer offset temperature ^3 polynomial coefficient - Z axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A3_X3_2, 0.0f); - -/** - * Accelerometer offset temperature ^2 polynomial coefficient - X axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A3_X2_0, 0.0f); - -/** - * Accelerometer offset temperature ^2 polynomial coefficient - Y axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A3_X2_1, 0.0f); - -/** - * Accelerometer offset temperature ^2 polynomial coefficient - Z axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A3_X2_2, 0.0f); - -/** - * Accelerometer offset temperature ^1 polynomial coefficient - X axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A3_X1_0, 0.0f); - -/** - * Accelerometer offset temperature ^1 polynomial coefficient - Y axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A3_X1_1, 0.0f); - -/** - * Accelerometer offset temperature ^1 polynomial coefficient - Z axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A3_X1_2, 0.0f); - -/** - * Accelerometer offset temperature ^0 polynomial coefficient - X axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A3_X0_0, 0.0f); - -/** - * Accelerometer offset temperature ^0 polynomial coefficient - Y axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A3_X0_1, 0.0f); - -/** - * Accelerometer offset temperature ^0 polynomial coefficient - Z axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A3_X0_2, 0.0f); - -/** - * Accelerometer calibration reference temperature. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A3_TREF, 25.0f); - -/** - * Accelerometer calibration minimum temperature. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A3_TMIN, 0.0f); - -/** - * Accelerometer calibration maximum temperature. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_A3_TMAX, 100.0f); diff --git a/src/modules/temperature_compensation/temp_comp_params_accel_3.yaml b/src/modules/temperature_compensation/temp_comp_params_accel_3.yaml new file mode 100644 index 0000000000..6467c20607 --- /dev/null +++ b/src/modules/temperature_compensation/temp_comp_params_accel_3.yaml @@ -0,0 +1,100 @@ +module_name: temperature_compensation +parameters: +- group: Thermal Compensation + definitions: + TC_A3_ID: + description: + short: ID of Accelerometer that the calibration is for + category: System + type: int32 + default: 0 + TC_A3_X3_0: + description: + short: Accelerometer offset temperature ^3 polynomial coefficient - X axis + category: System + type: float + default: 0.0 + TC_A3_X3_1: + description: + short: Accelerometer offset temperature ^3 polynomial coefficient - Y axis + category: System + type: float + default: 0.0 + TC_A3_X3_2: + description: + short: Accelerometer offset temperature ^3 polynomial coefficient - Z axis + category: System + type: float + default: 0.0 + TC_A3_X2_0: + description: + short: Accelerometer offset temperature ^2 polynomial coefficient - X axis + category: System + type: float + default: 0.0 + TC_A3_X2_1: + description: + short: Accelerometer offset temperature ^2 polynomial coefficient - Y axis + category: System + type: float + default: 0.0 + TC_A3_X2_2: + description: + short: Accelerometer offset temperature ^2 polynomial coefficient - Z axis + category: System + type: float + default: 0.0 + TC_A3_X1_0: + description: + short: Accelerometer offset temperature ^1 polynomial coefficient - X axis + category: System + type: float + default: 0.0 + TC_A3_X1_1: + description: + short: Accelerometer offset temperature ^1 polynomial coefficient - Y axis + category: System + type: float + default: 0.0 + TC_A3_X1_2: + description: + short: Accelerometer offset temperature ^1 polynomial coefficient - Z axis + category: System + type: float + default: 0.0 + TC_A3_X0_0: + description: + short: Accelerometer offset temperature ^0 polynomial coefficient - X axis + category: System + type: float + default: 0.0 + TC_A3_X0_1: + description: + short: Accelerometer offset temperature ^0 polynomial coefficient - Y axis + category: System + type: float + default: 0.0 + TC_A3_X0_2: + description: + short: Accelerometer offset temperature ^0 polynomial coefficient - Z axis + category: System + type: float + default: 0.0 + TC_A3_TREF: + description: + short: Accelerometer calibration reference temperature + category: System + type: float + default: 25.0 + TC_A3_TMIN: + description: + short: Accelerometer calibration minimum temperature + category: System + type: float + default: 0.0 + TC_A3_TMAX: + description: + short: Accelerometer calibration maximum temperature + category: System + type: float + default: 100.0 diff --git a/src/modules/temperature_compensation/temp_comp_params_baro.c b/src/modules/temperature_compensation/temp_comp_params_baro.c deleted file mode 100644 index 1e5a1add22..0000000000 --- a/src/modules/temperature_compensation/temp_comp_params_baro.c +++ /dev/null @@ -1,41 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2017-2020 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Thermal compensation for barometric pressure sensors. - * - * @group Thermal Compensation - * @reboot_required true - * @boolean - */ -PARAM_DEFINE_INT32(TC_B_ENABLE, 0); diff --git a/src/modules/temperature_compensation/temp_comp_params_baro.yaml b/src/modules/temperature_compensation/temp_comp_params_baro.yaml new file mode 100644 index 0000000000..24b2fd8f0a --- /dev/null +++ b/src/modules/temperature_compensation/temp_comp_params_baro.yaml @@ -0,0 +1,10 @@ +module_name: temperature_compensation +parameters: +- group: Thermal Compensation + definitions: + TC_B_ENABLE: + description: + short: Thermal compensation for barometric pressure sensors + type: boolean + default: 0 + reboot_required: true diff --git a/src/modules/temperature_compensation/temp_comp_params_baro_0.c b/src/modules/temperature_compensation/temp_comp_params_baro_0.c deleted file mode 100644 index 1fef48220e..0000000000 --- a/src/modules/temperature_compensation/temp_comp_params_baro_0.c +++ /dev/null @@ -1,114 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2017 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/* Barometer 0 */ - -/** - * ID of Barometer that the calibration is for. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_INT32(TC_B0_ID, 0); - -/** - * Barometer offset temperature ^5 polynomial coefficient. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_B0_X5, 0.0f); - -/** - * Barometer offset temperature ^4 polynomial coefficient. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_B0_X4, 0.0f); - -/** - * Barometer offset temperature ^3 polynomial coefficient. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_B0_X3, 0.0f); - -/** - * Barometer offset temperature ^2 polynomial coefficient. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_B0_X2, 0.0f); - -/** - * Barometer offset temperature ^1 polynomial coefficients. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_B0_X1, 0.0f); - -/** - * Barometer offset temperature ^0 polynomial coefficient. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_B0_X0, 0.0f); - -/** - * Barometer calibration reference temperature. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_B0_TREF, 40.0f); - -/** - * Barometer calibration minimum temperature. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_B0_TMIN, 5.0f); - -/** - * Barometer calibration maximum temperature. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_B0_TMAX, 75.0f); diff --git a/src/modules/temperature_compensation/temp_comp_params_baro_0.yaml b/src/modules/temperature_compensation/temp_comp_params_baro_0.yaml new file mode 100644 index 0000000000..cc3f2cf25f --- /dev/null +++ b/src/modules/temperature_compensation/temp_comp_params_baro_0.yaml @@ -0,0 +1,64 @@ +module_name: temperature_compensation +parameters: +- group: Thermal Compensation + definitions: + TC_B0_ID: + description: + short: ID of Barometer that the calibration is for + category: System + type: int32 + default: 0 + TC_B0_X5: + description: + short: Barometer offset temperature ^5 polynomial coefficient + category: System + type: float + default: 0.0 + TC_B0_X4: + description: + short: Barometer offset temperature ^4 polynomial coefficient + category: System + type: float + default: 0.0 + TC_B0_X3: + description: + short: Barometer offset temperature ^3 polynomial coefficient + category: System + type: float + default: 0.0 + TC_B0_X2: + description: + short: Barometer offset temperature ^2 polynomial coefficient + category: System + type: float + default: 0.0 + TC_B0_X1: + description: + short: Barometer offset temperature ^1 polynomial coefficients + category: System + type: float + default: 0.0 + TC_B0_X0: + description: + short: Barometer offset temperature ^0 polynomial coefficient + category: System + type: float + default: 0.0 + TC_B0_TREF: + description: + short: Barometer calibration reference temperature + category: System + type: float + default: 40.0 + TC_B0_TMIN: + description: + short: Barometer calibration minimum temperature + category: System + type: float + default: 5.0 + TC_B0_TMAX: + description: + short: Barometer calibration maximum temperature + category: System + type: float + default: 75.0 diff --git a/src/modules/temperature_compensation/temp_comp_params_baro_1.c b/src/modules/temperature_compensation/temp_comp_params_baro_1.c deleted file mode 100644 index 2f0fcda492..0000000000 --- a/src/modules/temperature_compensation/temp_comp_params_baro_1.c +++ /dev/null @@ -1,114 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2017-2020 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/* Barometer 1 */ - -/** - * ID of Barometer that the calibration is for. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_INT32(TC_B1_ID, 0); - -/** - * Barometer offset temperature ^5 polynomial coefficient. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_B1_X5, 0.0f); - -/** - * Barometer offset temperature ^4 polynomial coefficient. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_B1_X4, 0.0f); - -/** - * Barometer offset temperature ^3 polynomial coefficient. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_B1_X3, 0.0f); - -/** - * Barometer offset temperature ^2 polynomial coefficient. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_B1_X2, 0.0f); - -/** - * Barometer offset temperature ^1 polynomial coefficients. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_B1_X1, 0.0f); - -/** - * Barometer offset temperature ^0 polynomial coefficient. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_B1_X0, 0.0f); - -/** - * Barometer calibration reference temperature. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_B1_TREF, 40.0f); - -/** - * Barometer calibration minimum temperature. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_B1_TMIN, 5.0f); - -/** - * Barometer calibration maximum temperature. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_B1_TMAX, 75.0f); diff --git a/src/modules/temperature_compensation/temp_comp_params_baro_1.yaml b/src/modules/temperature_compensation/temp_comp_params_baro_1.yaml new file mode 100644 index 0000000000..3d5094bb46 --- /dev/null +++ b/src/modules/temperature_compensation/temp_comp_params_baro_1.yaml @@ -0,0 +1,64 @@ +module_name: temperature_compensation +parameters: +- group: Thermal Compensation + definitions: + TC_B1_ID: + description: + short: ID of Barometer that the calibration is for + category: System + type: int32 + default: 0 + TC_B1_X5: + description: + short: Barometer offset temperature ^5 polynomial coefficient + category: System + type: float + default: 0.0 + TC_B1_X4: + description: + short: Barometer offset temperature ^4 polynomial coefficient + category: System + type: float + default: 0.0 + TC_B1_X3: + description: + short: Barometer offset temperature ^3 polynomial coefficient + category: System + type: float + default: 0.0 + TC_B1_X2: + description: + short: Barometer offset temperature ^2 polynomial coefficient + category: System + type: float + default: 0.0 + TC_B1_X1: + description: + short: Barometer offset temperature ^1 polynomial coefficients + category: System + type: float + default: 0.0 + TC_B1_X0: + description: + short: Barometer offset temperature ^0 polynomial coefficient + category: System + type: float + default: 0.0 + TC_B1_TREF: + description: + short: Barometer calibration reference temperature + category: System + type: float + default: 40.0 + TC_B1_TMIN: + description: + short: Barometer calibration minimum temperature + category: System + type: float + default: 5.0 + TC_B1_TMAX: + description: + short: Barometer calibration maximum temperature + category: System + type: float + default: 75.0 diff --git a/src/modules/temperature_compensation/temp_comp_params_baro_2.c b/src/modules/temperature_compensation/temp_comp_params_baro_2.c deleted file mode 100644 index b32d9ef535..0000000000 --- a/src/modules/temperature_compensation/temp_comp_params_baro_2.c +++ /dev/null @@ -1,114 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2017-2020 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/* Barometer 2 */ - -/** - * ID of Barometer that the calibration is for. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_INT32(TC_B2_ID, 0); - -/** - * Barometer offset temperature ^5 polynomial coefficient. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_B2_X5, 0.0f); - -/** - * Barometer offset temperature ^4 polynomial coefficient. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_B2_X4, 0.0f); - -/** - * Barometer offset temperature ^3 polynomial coefficient. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_B2_X3, 0.0f); - -/** - * Barometer offset temperature ^2 polynomial coefficient. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_B2_X2, 0.0f); - -/** - * Barometer offset temperature ^1 polynomial coefficients. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_B2_X1, 0.0f); - -/** - * Barometer offset temperature ^0 polynomial coefficient. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_B2_X0, 0.0f); - -/** - * Barometer calibration reference temperature. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_B2_TREF, 40.0f); - -/** - * Barometer calibration minimum temperature. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_B2_TMIN, 5.0f); - -/** - * Barometer calibration maximum temperature. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_B2_TMAX, 75.0f); diff --git a/src/modules/temperature_compensation/temp_comp_params_baro_2.yaml b/src/modules/temperature_compensation/temp_comp_params_baro_2.yaml new file mode 100644 index 0000000000..9e8602e66a --- /dev/null +++ b/src/modules/temperature_compensation/temp_comp_params_baro_2.yaml @@ -0,0 +1,64 @@ +module_name: temperature_compensation +parameters: +- group: Thermal Compensation + definitions: + TC_B2_ID: + description: + short: ID of Barometer that the calibration is for + category: System + type: int32 + default: 0 + TC_B2_X5: + description: + short: Barometer offset temperature ^5 polynomial coefficient + category: System + type: float + default: 0.0 + TC_B2_X4: + description: + short: Barometer offset temperature ^4 polynomial coefficient + category: System + type: float + default: 0.0 + TC_B2_X3: + description: + short: Barometer offset temperature ^3 polynomial coefficient + category: System + type: float + default: 0.0 + TC_B2_X2: + description: + short: Barometer offset temperature ^2 polynomial coefficient + category: System + type: float + default: 0.0 + TC_B2_X1: + description: + short: Barometer offset temperature ^1 polynomial coefficients + category: System + type: float + default: 0.0 + TC_B2_X0: + description: + short: Barometer offset temperature ^0 polynomial coefficient + category: System + type: float + default: 0.0 + TC_B2_TREF: + description: + short: Barometer calibration reference temperature + category: System + type: float + default: 40.0 + TC_B2_TMIN: + description: + short: Barometer calibration minimum temperature + category: System + type: float + default: 5.0 + TC_B2_TMAX: + description: + short: Barometer calibration maximum temperature + category: System + type: float + default: 75.0 diff --git a/src/modules/temperature_compensation/temp_comp_params_baro_3.c b/src/modules/temperature_compensation/temp_comp_params_baro_3.c deleted file mode 100644 index a514e783f7..0000000000 --- a/src/modules/temperature_compensation/temp_comp_params_baro_3.c +++ /dev/null @@ -1,114 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2017-2020 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/* Barometer 3 */ - -/** - * ID of Barometer that the calibration is for. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_INT32(TC_B3_ID, 0); - -/** - * Barometer offset temperature ^5 polynomial coefficient. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_B3_X5, 0.0f); - -/** - * Barometer offset temperature ^4 polynomial coefficient. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_B3_X4, 0.0f); - -/** - * Barometer offset temperature ^3 polynomial coefficient. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_B3_X3, 0.0f); - -/** - * Barometer offset temperature ^2 polynomial coefficient. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_B3_X2, 0.0f); - -/** - * Barometer offset temperature ^1 polynomial coefficients. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_B3_X1, 0.0f); - -/** - * Barometer offset temperature ^0 polynomial coefficient. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_B3_X0, 0.0f); - -/** - * Barometer calibration reference temperature. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_B3_TREF, 40.0f); - -/** - * Barometer calibration minimum temperature. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_B3_TMIN, 5.0f); - -/** - * Barometer calibration maximum temperature. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_B3_TMAX, 75.0f); diff --git a/src/modules/temperature_compensation/temp_comp_params_baro_3.yaml b/src/modules/temperature_compensation/temp_comp_params_baro_3.yaml new file mode 100644 index 0000000000..c2ad5c5597 --- /dev/null +++ b/src/modules/temperature_compensation/temp_comp_params_baro_3.yaml @@ -0,0 +1,64 @@ +module_name: temperature_compensation +parameters: +- group: Thermal Compensation + definitions: + TC_B3_ID: + description: + short: ID of Barometer that the calibration is for + category: System + type: int32 + default: 0 + TC_B3_X5: + description: + short: Barometer offset temperature ^5 polynomial coefficient + category: System + type: float + default: 0.0 + TC_B3_X4: + description: + short: Barometer offset temperature ^4 polynomial coefficient + category: System + type: float + default: 0.0 + TC_B3_X3: + description: + short: Barometer offset temperature ^3 polynomial coefficient + category: System + type: float + default: 0.0 + TC_B3_X2: + description: + short: Barometer offset temperature ^2 polynomial coefficient + category: System + type: float + default: 0.0 + TC_B3_X1: + description: + short: Barometer offset temperature ^1 polynomial coefficients + category: System + type: float + default: 0.0 + TC_B3_X0: + description: + short: Barometer offset temperature ^0 polynomial coefficient + category: System + type: float + default: 0.0 + TC_B3_TREF: + description: + short: Barometer calibration reference temperature + category: System + type: float + default: 40.0 + TC_B3_TMIN: + description: + short: Barometer calibration minimum temperature + category: System + type: float + default: 5.0 + TC_B3_TMAX: + description: + short: Barometer calibration maximum temperature + category: System + type: float + default: 75.0 diff --git a/src/modules/temperature_compensation/temp_comp_params_gyro.c b/src/modules/temperature_compensation/temp_comp_params_gyro.c deleted file mode 100644 index cd321dd84c..0000000000 --- a/src/modules/temperature_compensation/temp_comp_params_gyro.c +++ /dev/null @@ -1,41 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2017-2020 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Thermal compensation for rate gyro sensors. - * - * @group Thermal Compensation - * @reboot_required true - * @boolean - */ -PARAM_DEFINE_INT32(TC_G_ENABLE, 0); diff --git a/src/modules/temperature_compensation/temp_comp_params_gyro.yaml b/src/modules/temperature_compensation/temp_comp_params_gyro.yaml new file mode 100644 index 0000000000..c0eafce5ec --- /dev/null +++ b/src/modules/temperature_compensation/temp_comp_params_gyro.yaml @@ -0,0 +1,10 @@ +module_name: temperature_compensation +parameters: +- group: Thermal Compensation + definitions: + TC_G_ENABLE: + description: + short: Thermal compensation for rate gyro sensors + type: boolean + default: 0 + reboot_required: true diff --git a/src/modules/temperature_compensation/temp_comp_params_gyro_0.c b/src/modules/temperature_compensation/temp_comp_params_gyro_0.c deleted file mode 100644 index 7f05b14054..0000000000 --- a/src/modules/temperature_compensation/temp_comp_params_gyro_0.c +++ /dev/null @@ -1,162 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2017-2020 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/* Gyro 0 */ - -/** - * ID of Gyro that the calibration is for. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_INT32(TC_G0_ID, 0); - -/** - * Gyro rate offset temperature ^3 polynomial coefficient - X axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G0_X3_0, 0.0f); - -/** - * Gyro rate offset temperature ^3 polynomial coefficient - Y axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G0_X3_1, 0.0f); - -/** - * Gyro rate offset temperature ^3 polynomial coefficient - Z axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G0_X3_2, 0.0f); - -/** - * Gyro rate offset temperature ^2 polynomial coefficient - X axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G0_X2_0, 0.0f); - -/** - * Gyro rate offset temperature ^2 polynomial coefficient - Y axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G0_X2_1, 0.0f); - -/** - * Gyro rate offset temperature ^2 polynomial coefficient - Z axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G0_X2_2, 0.0f); - -/** - * Gyro rate offset temperature ^1 polynomial coefficient - X axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G0_X1_0, 0.0f); - -/** - * Gyro rate offset temperature ^1 polynomial coefficient - Y axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G0_X1_1, 0.0f); - -/** - * Gyro rate offset temperature ^1 polynomial coefficient - Z axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G0_X1_2, 0.0f); - -/** - * Gyro rate offset temperature ^0 polynomial coefficient - X axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G0_X0_0, 0.0f); - -/** - * Gyro rate offset temperature ^0 polynomial coefficient - Y axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G0_X0_1, 0.0f); - -/** - * Gyro rate offset temperature ^0 polynomial coefficient - Z axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G0_X0_2, 0.0f); - -/** - * Gyro calibration reference temperature. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G0_TREF, 25.0f); - -/** - * Gyro calibration minimum temperature. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G0_TMIN, 0.0f); - -/** - * Gyro calibration maximum temperature. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G0_TMAX, 100.0f); diff --git a/src/modules/temperature_compensation/temp_comp_params_gyro_0.yaml b/src/modules/temperature_compensation/temp_comp_params_gyro_0.yaml new file mode 100644 index 0000000000..b700d82f9d --- /dev/null +++ b/src/modules/temperature_compensation/temp_comp_params_gyro_0.yaml @@ -0,0 +1,100 @@ +module_name: temperature_compensation +parameters: +- group: Thermal Compensation + definitions: + TC_G0_ID: + description: + short: ID of Gyro that the calibration is for + category: System + type: int32 + default: 0 + TC_G0_X3_0: + description: + short: Gyro rate offset temperature ^3 polynomial coefficient - X axis + category: System + type: float + default: 0.0 + TC_G0_X3_1: + description: + short: Gyro rate offset temperature ^3 polynomial coefficient - Y axis + category: System + type: float + default: 0.0 + TC_G0_X3_2: + description: + short: Gyro rate offset temperature ^3 polynomial coefficient - Z axis + category: System + type: float + default: 0.0 + TC_G0_X2_0: + description: + short: Gyro rate offset temperature ^2 polynomial coefficient - X axis + category: System + type: float + default: 0.0 + TC_G0_X2_1: + description: + short: Gyro rate offset temperature ^2 polynomial coefficient - Y axis + category: System + type: float + default: 0.0 + TC_G0_X2_2: + description: + short: Gyro rate offset temperature ^2 polynomial coefficient - Z axis + category: System + type: float + default: 0.0 + TC_G0_X1_0: + description: + short: Gyro rate offset temperature ^1 polynomial coefficient - X axis + category: System + type: float + default: 0.0 + TC_G0_X1_1: + description: + short: Gyro rate offset temperature ^1 polynomial coefficient - Y axis + category: System + type: float + default: 0.0 + TC_G0_X1_2: + description: + short: Gyro rate offset temperature ^1 polynomial coefficient - Z axis + category: System + type: float + default: 0.0 + TC_G0_X0_0: + description: + short: Gyro rate offset temperature ^0 polynomial coefficient - X axis + category: System + type: float + default: 0.0 + TC_G0_X0_1: + description: + short: Gyro rate offset temperature ^0 polynomial coefficient - Y axis + category: System + type: float + default: 0.0 + TC_G0_X0_2: + description: + short: Gyro rate offset temperature ^0 polynomial coefficient - Z axis + category: System + type: float + default: 0.0 + TC_G0_TREF: + description: + short: Gyro calibration reference temperature + category: System + type: float + default: 25.0 + TC_G0_TMIN: + description: + short: Gyro calibration minimum temperature + category: System + type: float + default: 0.0 + TC_G0_TMAX: + description: + short: Gyro calibration maximum temperature + category: System + type: float + default: 100.0 diff --git a/src/modules/temperature_compensation/temp_comp_params_gyro_1.c b/src/modules/temperature_compensation/temp_comp_params_gyro_1.c deleted file mode 100644 index b86dea223a..0000000000 --- a/src/modules/temperature_compensation/temp_comp_params_gyro_1.c +++ /dev/null @@ -1,162 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2017-2020 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/* Gyro 1 */ - -/** - * ID of Gyro that the calibration is for. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_INT32(TC_G1_ID, 0); - -/** - * Gyro rate offset temperature ^3 polynomial coefficient - X axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G1_X3_0, 0.0f); - -/** - * Gyro rate offset temperature ^3 polynomial coefficient - Y axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G1_X3_1, 0.0f); - -/** - * Gyro rate offset temperature ^3 polynomial coefficient - Z axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G1_X3_2, 0.0f); - -/** - * Gyro rate offset temperature ^2 polynomial coefficient - X axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G1_X2_0, 0.0f); - -/** - * Gyro rate offset temperature ^2 polynomial coefficient - Y axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G1_X2_1, 0.0f); - -/** - * Gyro rate offset temperature ^2 polynomial coefficient - Z axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G1_X2_2, 0.0f); - -/** - * Gyro rate offset temperature ^1 polynomial coefficient - X axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G1_X1_0, 0.0f); - -/** - * Gyro rate offset temperature ^1 polynomial coefficient - Y axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G1_X1_1, 0.0f); - -/** - * Gyro rate offset temperature ^1 polynomial coefficient - Z axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G1_X1_2, 0.0f); - -/** - * Gyro rate offset temperature ^0 polynomial coefficient - X axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G1_X0_0, 0.0f); - -/** - * Gyro rate offset temperature ^0 polynomial coefficient - Y axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G1_X0_1, 0.0f); - -/** - * Gyro rate offset temperature ^0 polynomial coefficient - Z axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G1_X0_2, 0.0f); - -/** - * Gyro calibration reference temperature. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G1_TREF, 25.0f); - -/** - * Gyro calibration minimum temperature. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G1_TMIN, 0.0f); - -/** - * Gyro calibration maximum temperature. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G1_TMAX, 100.0f); diff --git a/src/modules/temperature_compensation/temp_comp_params_gyro_1.yaml b/src/modules/temperature_compensation/temp_comp_params_gyro_1.yaml new file mode 100644 index 0000000000..c3bf746fef --- /dev/null +++ b/src/modules/temperature_compensation/temp_comp_params_gyro_1.yaml @@ -0,0 +1,100 @@ +module_name: temperature_compensation +parameters: +- group: Thermal Compensation + definitions: + TC_G1_ID: + description: + short: ID of Gyro that the calibration is for + category: System + type: int32 + default: 0 + TC_G1_X3_0: + description: + short: Gyro rate offset temperature ^3 polynomial coefficient - X axis + category: System + type: float + default: 0.0 + TC_G1_X3_1: + description: + short: Gyro rate offset temperature ^3 polynomial coefficient - Y axis + category: System + type: float + default: 0.0 + TC_G1_X3_2: + description: + short: Gyro rate offset temperature ^3 polynomial coefficient - Z axis + category: System + type: float + default: 0.0 + TC_G1_X2_0: + description: + short: Gyro rate offset temperature ^2 polynomial coefficient - X axis + category: System + type: float + default: 0.0 + TC_G1_X2_1: + description: + short: Gyro rate offset temperature ^2 polynomial coefficient - Y axis + category: System + type: float + default: 0.0 + TC_G1_X2_2: + description: + short: Gyro rate offset temperature ^2 polynomial coefficient - Z axis + category: System + type: float + default: 0.0 + TC_G1_X1_0: + description: + short: Gyro rate offset temperature ^1 polynomial coefficient - X axis + category: System + type: float + default: 0.0 + TC_G1_X1_1: + description: + short: Gyro rate offset temperature ^1 polynomial coefficient - Y axis + category: System + type: float + default: 0.0 + TC_G1_X1_2: + description: + short: Gyro rate offset temperature ^1 polynomial coefficient - Z axis + category: System + type: float + default: 0.0 + TC_G1_X0_0: + description: + short: Gyro rate offset temperature ^0 polynomial coefficient - X axis + category: System + type: float + default: 0.0 + TC_G1_X0_1: + description: + short: Gyro rate offset temperature ^0 polynomial coefficient - Y axis + category: System + type: float + default: 0.0 + TC_G1_X0_2: + description: + short: Gyro rate offset temperature ^0 polynomial coefficient - Z axis + category: System + type: float + default: 0.0 + TC_G1_TREF: + description: + short: Gyro calibration reference temperature + category: System + type: float + default: 25.0 + TC_G1_TMIN: + description: + short: Gyro calibration minimum temperature + category: System + type: float + default: 0.0 + TC_G1_TMAX: + description: + short: Gyro calibration maximum temperature + category: System + type: float + default: 100.0 diff --git a/src/modules/temperature_compensation/temp_comp_params_gyro_2.c b/src/modules/temperature_compensation/temp_comp_params_gyro_2.c deleted file mode 100644 index ed20377642..0000000000 --- a/src/modules/temperature_compensation/temp_comp_params_gyro_2.c +++ /dev/null @@ -1,162 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2017-2020 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/* Gyro 2 */ - -/** - * ID of Gyro that the calibration is for. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_INT32(TC_G2_ID, 0); - -/** - * Gyro rate offset temperature ^3 polynomial coefficient - X axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G2_X3_0, 0.0f); - -/** - * Gyro rate offset temperature ^3 polynomial coefficient - Y axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G2_X3_1, 0.0f); - -/** - * Gyro rate offset temperature ^3 polynomial coefficient - Z axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G2_X3_2, 0.0f); - -/** - * Gyro rate offset temperature ^2 polynomial coefficient - X axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G2_X2_0, 0.0f); - -/** - * Gyro rate offset temperature ^2 polynomial coefficient - Y axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G2_X2_1, 0.0f); - -/** - * Gyro rate offset temperature ^2 polynomial coefficient - Z axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G2_X2_2, 0.0f); - -/** - * Gyro rate offset temperature ^1 polynomial coefficient - X axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G2_X1_0, 0.0f); - -/** - * Gyro rate offset temperature ^1 polynomial coefficient - Y axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G2_X1_1, 0.0f); - -/** - * Gyro rate offset temperature ^1 polynomial coefficient - Z axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G2_X1_2, 0.0f); - -/** - * Gyro rate offset temperature ^0 polynomial coefficient - X axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G2_X0_0, 0.0f); - -/** - * Gyro rate offset temperature ^0 polynomial coefficient - Y axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G2_X0_1, 0.0f); - -/** - * Gyro rate offset temperature ^0 polynomial coefficient - Z axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G2_X0_2, 0.0f); - -/** - * Gyro calibration reference temperature. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G2_TREF, 25.0f); - -/** - * Gyro calibration minimum temperature. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G2_TMIN, 0.0f); - -/** - * Gyro calibration maximum temperature. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G2_TMAX, 100.0f); diff --git a/src/modules/temperature_compensation/temp_comp_params_gyro_2.yaml b/src/modules/temperature_compensation/temp_comp_params_gyro_2.yaml new file mode 100644 index 0000000000..efbe6c7d42 --- /dev/null +++ b/src/modules/temperature_compensation/temp_comp_params_gyro_2.yaml @@ -0,0 +1,100 @@ +module_name: temperature_compensation +parameters: +- group: Thermal Compensation + definitions: + TC_G2_ID: + description: + short: ID of Gyro that the calibration is for + category: System + type: int32 + default: 0 + TC_G2_X3_0: + description: + short: Gyro rate offset temperature ^3 polynomial coefficient - X axis + category: System + type: float + default: 0.0 + TC_G2_X3_1: + description: + short: Gyro rate offset temperature ^3 polynomial coefficient - Y axis + category: System + type: float + default: 0.0 + TC_G2_X3_2: + description: + short: Gyro rate offset temperature ^3 polynomial coefficient - Z axis + category: System + type: float + default: 0.0 + TC_G2_X2_0: + description: + short: Gyro rate offset temperature ^2 polynomial coefficient - X axis + category: System + type: float + default: 0.0 + TC_G2_X2_1: + description: + short: Gyro rate offset temperature ^2 polynomial coefficient - Y axis + category: System + type: float + default: 0.0 + TC_G2_X2_2: + description: + short: Gyro rate offset temperature ^2 polynomial coefficient - Z axis + category: System + type: float + default: 0.0 + TC_G2_X1_0: + description: + short: Gyro rate offset temperature ^1 polynomial coefficient - X axis + category: System + type: float + default: 0.0 + TC_G2_X1_1: + description: + short: Gyro rate offset temperature ^1 polynomial coefficient - Y axis + category: System + type: float + default: 0.0 + TC_G2_X1_2: + description: + short: Gyro rate offset temperature ^1 polynomial coefficient - Z axis + category: System + type: float + default: 0.0 + TC_G2_X0_0: + description: + short: Gyro rate offset temperature ^0 polynomial coefficient - X axis + category: System + type: float + default: 0.0 + TC_G2_X0_1: + description: + short: Gyro rate offset temperature ^0 polynomial coefficient - Y axis + category: System + type: float + default: 0.0 + TC_G2_X0_2: + description: + short: Gyro rate offset temperature ^0 polynomial coefficient - Z axis + category: System + type: float + default: 0.0 + TC_G2_TREF: + description: + short: Gyro calibration reference temperature + category: System + type: float + default: 25.0 + TC_G2_TMIN: + description: + short: Gyro calibration minimum temperature + category: System + type: float + default: 0.0 + TC_G2_TMAX: + description: + short: Gyro calibration maximum temperature + category: System + type: float + default: 100.0 diff --git a/src/modules/temperature_compensation/temp_comp_params_gyro_3.c b/src/modules/temperature_compensation/temp_comp_params_gyro_3.c deleted file mode 100644 index a0ed93a4cd..0000000000 --- a/src/modules/temperature_compensation/temp_comp_params_gyro_3.c +++ /dev/null @@ -1,162 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2017-2020 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/* Gyro 3 */ - -/** - * ID of Gyro that the calibration is for. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_INT32(TC_G3_ID, 0); - -/** - * Gyro rate offset temperature ^3 polynomial coefficient - X axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G3_X3_0, 0.0f); - -/** - * Gyro rate offset temperature ^3 polynomial coefficient - Y axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G3_X3_1, 0.0f); - -/** - * Gyro rate offset temperature ^3 polynomial coefficient - Z axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G3_X3_2, 0.0f); - -/** - * Gyro rate offset temperature ^2 polynomial coefficient - X axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G3_X2_0, 0.0f); - -/** - * Gyro rate offset temperature ^2 polynomial coefficient - Y axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G3_X2_1, 0.0f); - -/** - * Gyro rate offset temperature ^2 polynomial coefficient - Z axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G3_X2_2, 0.0f); - -/** - * Gyro rate offset temperature ^1 polynomial coefficient - X axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G3_X1_0, 0.0f); - -/** - * Gyro rate offset temperature ^1 polynomial coefficient - Y axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G3_X1_1, 0.0f); - -/** - * Gyro rate offset temperature ^1 polynomial coefficient - Z axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G3_X1_2, 0.0f); - -/** - * Gyro rate offset temperature ^0 polynomial coefficient - X axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G3_X0_0, 0.0f); - -/** - * Gyro rate offset temperature ^0 polynomial coefficient - Y axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G3_X0_1, 0.0f); - -/** - * Gyro rate offset temperature ^0 polynomial coefficient - Z axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G3_X0_2, 0.0f); - -/** - * Gyro calibration reference temperature. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G3_TREF, 25.0f); - -/** - * Gyro calibration minimum temperature. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G3_TMIN, 0.0f); - -/** - * Gyro calibration maximum temperature. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_G3_TMAX, 100.0f); diff --git a/src/modules/temperature_compensation/temp_comp_params_gyro_3.yaml b/src/modules/temperature_compensation/temp_comp_params_gyro_3.yaml new file mode 100644 index 0000000000..4db6e6b93b --- /dev/null +++ b/src/modules/temperature_compensation/temp_comp_params_gyro_3.yaml @@ -0,0 +1,100 @@ +module_name: temperature_compensation +parameters: +- group: Thermal Compensation + definitions: + TC_G3_ID: + description: + short: ID of Gyro that the calibration is for + category: System + type: int32 + default: 0 + TC_G3_X3_0: + description: + short: Gyro rate offset temperature ^3 polynomial coefficient - X axis + category: System + type: float + default: 0.0 + TC_G3_X3_1: + description: + short: Gyro rate offset temperature ^3 polynomial coefficient - Y axis + category: System + type: float + default: 0.0 + TC_G3_X3_2: + description: + short: Gyro rate offset temperature ^3 polynomial coefficient - Z axis + category: System + type: float + default: 0.0 + TC_G3_X2_0: + description: + short: Gyro rate offset temperature ^2 polynomial coefficient - X axis + category: System + type: float + default: 0.0 + TC_G3_X2_1: + description: + short: Gyro rate offset temperature ^2 polynomial coefficient - Y axis + category: System + type: float + default: 0.0 + TC_G3_X2_2: + description: + short: Gyro rate offset temperature ^2 polynomial coefficient - Z axis + category: System + type: float + default: 0.0 + TC_G3_X1_0: + description: + short: Gyro rate offset temperature ^1 polynomial coefficient - X axis + category: System + type: float + default: 0.0 + TC_G3_X1_1: + description: + short: Gyro rate offset temperature ^1 polynomial coefficient - Y axis + category: System + type: float + default: 0.0 + TC_G3_X1_2: + description: + short: Gyro rate offset temperature ^1 polynomial coefficient - Z axis + category: System + type: float + default: 0.0 + TC_G3_X0_0: + description: + short: Gyro rate offset temperature ^0 polynomial coefficient - X axis + category: System + type: float + default: 0.0 + TC_G3_X0_1: + description: + short: Gyro rate offset temperature ^0 polynomial coefficient - Y axis + category: System + type: float + default: 0.0 + TC_G3_X0_2: + description: + short: Gyro rate offset temperature ^0 polynomial coefficient - Z axis + category: System + type: float + default: 0.0 + TC_G3_TREF: + description: + short: Gyro calibration reference temperature + category: System + type: float + default: 25.0 + TC_G3_TMIN: + description: + short: Gyro calibration minimum temperature + category: System + type: float + default: 0.0 + TC_G3_TMAX: + description: + short: Gyro calibration maximum temperature + category: System + type: float + default: 100.0 diff --git a/src/modules/temperature_compensation/temp_comp_params_mag.c b/src/modules/temperature_compensation/temp_comp_params_mag.c deleted file mode 100644 index c71cbb6345..0000000000 --- a/src/modules/temperature_compensation/temp_comp_params_mag.c +++ /dev/null @@ -1,41 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2022-2023 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * Thermal compensation for magnetometer sensors. - * - * @group Thermal Compensation - * @reboot_required true - * @boolean - */ -PARAM_DEFINE_INT32(TC_M_ENABLE, 0); diff --git a/src/modules/temperature_compensation/temp_comp_params_mag.yaml b/src/modules/temperature_compensation/temp_comp_params_mag.yaml new file mode 100644 index 0000000000..84d61b08df --- /dev/null +++ b/src/modules/temperature_compensation/temp_comp_params_mag.yaml @@ -0,0 +1,10 @@ +module_name: temperature_compensation +parameters: +- group: Thermal Compensation + definitions: + TC_M_ENABLE: + description: + short: Thermal compensation for magnetometer sensors + type: boolean + default: 0 + reboot_required: true diff --git a/src/modules/temperature_compensation/temp_comp_params_mag_0.c b/src/modules/temperature_compensation/temp_comp_params_mag_0.c deleted file mode 100644 index 68f7240e5c..0000000000 --- a/src/modules/temperature_compensation/temp_comp_params_mag_0.c +++ /dev/null @@ -1,162 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2022-2023 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/* Magnetometer 0 */ - -/** - * ID of Magnetometer that the calibration is for. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_INT32(TC_M0_ID, 0); - -/** - * Magnetometer offset temperature ^3 polynomial coefficient - X axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M0_X3_0, 0.0f); - -/** - * Magnetometer offset temperature ^3 polynomial coefficient - Y axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M0_X3_1, 0.0f); - -/** - * Magnetometer offset temperature ^3 polynomial coefficient - Z axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M0_X3_2, 0.0f); - -/** - * Magnetometer offset temperature ^2 polynomial coefficient - X axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M0_X2_0, 0.0f); - -/** - * Magnetometer offset temperature ^2 polynomial coefficient - Y axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M0_X2_1, 0.0f); - -/** - * Magnetometer offset temperature ^2 polynomial coefficient - Z axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M0_X2_2, 0.0f); - -/** - * Magnetometer offset temperature ^1 polynomial coefficient - X axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M0_X1_0, 0.0f); - -/** - * Magnetometer offset temperature ^1 polynomial coefficient - Y axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M0_X1_1, 0.0f); - -/** - * Magnetometer offset temperature ^1 polynomial coefficient - Z axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M0_X1_2, 0.0f); - -/** - * Magnetometer offset temperature ^0 polynomial coefficient - X axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M0_X0_0, 0.0f); - -/** - * Magnetometer offset temperature ^0 polynomial coefficient - Y axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M0_X0_1, 0.0f); - -/** - * Magnetometer offset temperature ^0 polynomial coefficient - Z axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M0_X0_2, 0.0f); - -/** - * Magnetometer calibration reference temperature. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M0_TREF, 25.0f); - -/** - * Magnetometer calibration minimum temperature. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M0_TMIN, 0.0f); - -/** - * Magnetometer calibration maximum temperature. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M0_TMAX, 100.0f); diff --git a/src/modules/temperature_compensation/temp_comp_params_mag_0.yaml b/src/modules/temperature_compensation/temp_comp_params_mag_0.yaml new file mode 100644 index 0000000000..b72f7dead5 --- /dev/null +++ b/src/modules/temperature_compensation/temp_comp_params_mag_0.yaml @@ -0,0 +1,100 @@ +module_name: temperature_compensation +parameters: +- group: Thermal Compensation + definitions: + TC_M0_ID: + description: + short: ID of Magnetometer that the calibration is for + category: System + type: int32 + default: 0 + TC_M0_X3_0: + description: + short: Magnetometer offset temperature ^3 polynomial coefficient - X axis + category: System + type: float + default: 0.0 + TC_M0_X3_1: + description: + short: Magnetometer offset temperature ^3 polynomial coefficient - Y axis + category: System + type: float + default: 0.0 + TC_M0_X3_2: + description: + short: Magnetometer offset temperature ^3 polynomial coefficient - Z axis + category: System + type: float + default: 0.0 + TC_M0_X2_0: + description: + short: Magnetometer offset temperature ^2 polynomial coefficient - X axis + category: System + type: float + default: 0.0 + TC_M0_X2_1: + description: + short: Magnetometer offset temperature ^2 polynomial coefficient - Y axis + category: System + type: float + default: 0.0 + TC_M0_X2_2: + description: + short: Magnetometer offset temperature ^2 polynomial coefficient - Z axis + category: System + type: float + default: 0.0 + TC_M0_X1_0: + description: + short: Magnetometer offset temperature ^1 polynomial coefficient - X axis + category: System + type: float + default: 0.0 + TC_M0_X1_1: + description: + short: Magnetometer offset temperature ^1 polynomial coefficient - Y axis + category: System + type: float + default: 0.0 + TC_M0_X1_2: + description: + short: Magnetometer offset temperature ^1 polynomial coefficient - Z axis + category: System + type: float + default: 0.0 + TC_M0_X0_0: + description: + short: Magnetometer offset temperature ^0 polynomial coefficient - X axis + category: System + type: float + default: 0.0 + TC_M0_X0_1: + description: + short: Magnetometer offset temperature ^0 polynomial coefficient - Y axis + category: System + type: float + default: 0.0 + TC_M0_X0_2: + description: + short: Magnetometer offset temperature ^0 polynomial coefficient - Z axis + category: System + type: float + default: 0.0 + TC_M0_TREF: + description: + short: Magnetometer calibration reference temperature + category: System + type: float + default: 25.0 + TC_M0_TMIN: + description: + short: Magnetometer calibration minimum temperature + category: System + type: float + default: 0.0 + TC_M0_TMAX: + description: + short: Magnetometer calibration maximum temperature + category: System + type: float + default: 100.0 diff --git a/src/modules/temperature_compensation/temp_comp_params_mag_1.c b/src/modules/temperature_compensation/temp_comp_params_mag_1.c deleted file mode 100644 index a34b452999..0000000000 --- a/src/modules/temperature_compensation/temp_comp_params_mag_1.c +++ /dev/null @@ -1,162 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2022-2023 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/* Magnetometer 1 */ - -/** - * ID of Magnetometer that the calibration is for. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_INT32(TC_M1_ID, 0); - -/** - * Magnetometer offset temperature ^3 polynomial coefficient - X axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M1_X3_0, 0.0f); - -/** - * Magnetometer offset temperature ^3 polynomial coefficient - Y axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M1_X3_1, 0.0f); - -/** - * Magnetometer offset temperature ^3 polynomial coefficient - Z axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M1_X3_2, 0.0f); - -/** - * Magnetometer offset temperature ^2 polynomial coefficient - X axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M1_X2_0, 0.0f); - -/** - * Magnetometer offset temperature ^2 polynomial coefficient - Y axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M1_X2_1, 0.0f); - -/** - * Magnetometer offset temperature ^2 polynomial coefficient - Z axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M1_X2_2, 0.0f); - -/** - * Magnetometer offset temperature ^1 polynomial coefficient - X axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M1_X1_0, 0.0f); - -/** - * Magnetometer offset temperature ^1 polynomial coefficient - Y axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M1_X1_1, 0.0f); - -/** - * Magnetometer offset temperature ^1 polynomial coefficient - Z axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M1_X1_2, 0.0f); - -/** - * Magnetometer offset temperature ^0 polynomial coefficient - X axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M1_X0_0, 0.0f); - -/** - * Magnetometer offset temperature ^0 polynomial coefficient - Y axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M1_X0_1, 0.0f); - -/** - * Magnetometer offset temperature ^0 polynomial coefficient - Z axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M1_X0_2, 0.0f); - -/** - * Magnetometer calibration reference temperature. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M1_TREF, 25.0f); - -/** - * Magnetometer calibration minimum temperature. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M1_TMIN, 0.0f); - -/** - * Magnetometer calibration maximum temperature. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M1_TMAX, 100.0f); diff --git a/src/modules/temperature_compensation/temp_comp_params_mag_1.yaml b/src/modules/temperature_compensation/temp_comp_params_mag_1.yaml new file mode 100644 index 0000000000..0e456fa100 --- /dev/null +++ b/src/modules/temperature_compensation/temp_comp_params_mag_1.yaml @@ -0,0 +1,100 @@ +module_name: temperature_compensation +parameters: +- group: Thermal Compensation + definitions: + TC_M1_ID: + description: + short: ID of Magnetometer that the calibration is for + category: System + type: int32 + default: 0 + TC_M1_X3_0: + description: + short: Magnetometer offset temperature ^3 polynomial coefficient - X axis + category: System + type: float + default: 0.0 + TC_M1_X3_1: + description: + short: Magnetometer offset temperature ^3 polynomial coefficient - Y axis + category: System + type: float + default: 0.0 + TC_M1_X3_2: + description: + short: Magnetometer offset temperature ^3 polynomial coefficient - Z axis + category: System + type: float + default: 0.0 + TC_M1_X2_0: + description: + short: Magnetometer offset temperature ^2 polynomial coefficient - X axis + category: System + type: float + default: 0.0 + TC_M1_X2_1: + description: + short: Magnetometer offset temperature ^2 polynomial coefficient - Y axis + category: System + type: float + default: 0.0 + TC_M1_X2_2: + description: + short: Magnetometer offset temperature ^2 polynomial coefficient - Z axis + category: System + type: float + default: 0.0 + TC_M1_X1_0: + description: + short: Magnetometer offset temperature ^1 polynomial coefficient - X axis + category: System + type: float + default: 0.0 + TC_M1_X1_1: + description: + short: Magnetometer offset temperature ^1 polynomial coefficient - Y axis + category: System + type: float + default: 0.0 + TC_M1_X1_2: + description: + short: Magnetometer offset temperature ^1 polynomial coefficient - Z axis + category: System + type: float + default: 0.0 + TC_M1_X0_0: + description: + short: Magnetometer offset temperature ^0 polynomial coefficient - X axis + category: System + type: float + default: 0.0 + TC_M1_X0_1: + description: + short: Magnetometer offset temperature ^0 polynomial coefficient - Y axis + category: System + type: float + default: 0.0 + TC_M1_X0_2: + description: + short: Magnetometer offset temperature ^0 polynomial coefficient - Z axis + category: System + type: float + default: 0.0 + TC_M1_TREF: + description: + short: Magnetometer calibration reference temperature + category: System + type: float + default: 25.0 + TC_M1_TMIN: + description: + short: Magnetometer calibration minimum temperature + category: System + type: float + default: 0.0 + TC_M1_TMAX: + description: + short: Magnetometer calibration maximum temperature + category: System + type: float + default: 100.0 diff --git a/src/modules/temperature_compensation/temp_comp_params_mag_2.c b/src/modules/temperature_compensation/temp_comp_params_mag_2.c deleted file mode 100644 index 8843b64dff..0000000000 --- a/src/modules/temperature_compensation/temp_comp_params_mag_2.c +++ /dev/null @@ -1,162 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2022-2023 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/* Magnetometer 2 */ - -/** - * ID of Magnetometer that the calibration is for. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_INT32(TC_M2_ID, 0); - -/** - * Magnetometer offset temperature ^3 polynomial coefficient - X axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M2_X3_0, 0.0f); - -/** - * Magnetometer offset temperature ^3 polynomial coefficient - Y axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M2_X3_1, 0.0f); - -/** - * Magnetometer offset temperature ^3 polynomial coefficient - Z axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M2_X3_2, 0.0f); - -/** - * Magnetometer offset temperature ^2 polynomial coefficient - X axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M2_X2_0, 0.0f); - -/** - * Magnetometer offset temperature ^2 polynomial coefficient - Y axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M2_X2_1, 0.0f); - -/** - * Magnetometer offset temperature ^2 polynomial coefficient - Z axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M2_X2_2, 0.0f); - -/** - * Magnetometer offset temperature ^1 polynomial coefficient - X axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M2_X1_0, 0.0f); - -/** - * Magnetometer offset temperature ^1 polynomial coefficient - Y axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M2_X1_1, 0.0f); - -/** - * Magnetometer offset temperature ^1 polynomial coefficient - Z axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M2_X1_2, 0.0f); - -/** - * Magnetometer offset temperature ^0 polynomial coefficient - X axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M2_X0_0, 0.0f); - -/** - * Magnetometer offset temperature ^0 polynomial coefficient - Y axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M2_X0_1, 0.0f); - -/** - * Magnetometer offset temperature ^0 polynomial coefficient - Z axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M2_X0_2, 0.0f); - -/** - * Magnetometer calibration reference temperature. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M2_TREF, 25.0f); - -/** - * Magnetometer calibration minimum temperature. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M2_TMIN, 0.0f); - -/** - * Magnetometer calibration maximum temperature. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M2_TMAX, 100.0f); diff --git a/src/modules/temperature_compensation/temp_comp_params_mag_2.yaml b/src/modules/temperature_compensation/temp_comp_params_mag_2.yaml new file mode 100644 index 0000000000..84ff032523 --- /dev/null +++ b/src/modules/temperature_compensation/temp_comp_params_mag_2.yaml @@ -0,0 +1,100 @@ +module_name: temperature_compensation +parameters: +- group: Thermal Compensation + definitions: + TC_M2_ID: + description: + short: ID of Magnetometer that the calibration is for + category: System + type: int32 + default: 0 + TC_M2_X3_0: + description: + short: Magnetometer offset temperature ^3 polynomial coefficient - X axis + category: System + type: float + default: 0.0 + TC_M2_X3_1: + description: + short: Magnetometer offset temperature ^3 polynomial coefficient - Y axis + category: System + type: float + default: 0.0 + TC_M2_X3_2: + description: + short: Magnetometer offset temperature ^3 polynomial coefficient - Z axis + category: System + type: float + default: 0.0 + TC_M2_X2_0: + description: + short: Magnetometer offset temperature ^2 polynomial coefficient - X axis + category: System + type: float + default: 0.0 + TC_M2_X2_1: + description: + short: Magnetometer offset temperature ^2 polynomial coefficient - Y axis + category: System + type: float + default: 0.0 + TC_M2_X2_2: + description: + short: Magnetometer offset temperature ^2 polynomial coefficient - Z axis + category: System + type: float + default: 0.0 + TC_M2_X1_0: + description: + short: Magnetometer offset temperature ^1 polynomial coefficient - X axis + category: System + type: float + default: 0.0 + TC_M2_X1_1: + description: + short: Magnetometer offset temperature ^1 polynomial coefficient - Y axis + category: System + type: float + default: 0.0 + TC_M2_X1_2: + description: + short: Magnetometer offset temperature ^1 polynomial coefficient - Z axis + category: System + type: float + default: 0.0 + TC_M2_X0_0: + description: + short: Magnetometer offset temperature ^0 polynomial coefficient - X axis + category: System + type: float + default: 0.0 + TC_M2_X0_1: + description: + short: Magnetometer offset temperature ^0 polynomial coefficient - Y axis + category: System + type: float + default: 0.0 + TC_M2_X0_2: + description: + short: Magnetometer offset temperature ^0 polynomial coefficient - Z axis + category: System + type: float + default: 0.0 + TC_M2_TREF: + description: + short: Magnetometer calibration reference temperature + category: System + type: float + default: 25.0 + TC_M2_TMIN: + description: + short: Magnetometer calibration minimum temperature + category: System + type: float + default: 0.0 + TC_M2_TMAX: + description: + short: Magnetometer calibration maximum temperature + category: System + type: float + default: 100.0 diff --git a/src/modules/temperature_compensation/temp_comp_params_mag_3.c b/src/modules/temperature_compensation/temp_comp_params_mag_3.c deleted file mode 100644 index 021e47dfa7..0000000000 --- a/src/modules/temperature_compensation/temp_comp_params_mag_3.c +++ /dev/null @@ -1,162 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2022-2023 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/* Magnetometer 3 */ - -/** - * ID of Magnetometer that the calibration is for. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_INT32(TC_M3_ID, 0); - -/** - * Magnetometer offset temperature ^3 polynomial coefficient - X axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M3_X3_0, 0.0f); - -/** - * Magnetometer offset temperature ^3 polynomial coefficient - Y axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M3_X3_1, 0.0f); - -/** - * Magnetometer offset temperature ^3 polynomial coefficient - Z axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M3_X3_2, 0.0f); - -/** - * Magnetometer offset temperature ^2 polynomial coefficient - X axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M3_X2_0, 0.0f); - -/** - * Magnetometer offset temperature ^2 polynomial coefficient - Y axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M3_X2_1, 0.0f); - -/** - * Magnetometer offset temperature ^2 polynomial coefficient - Z axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M3_X2_2, 0.0f); - -/** - * Magnetometer offset temperature ^1 polynomial coefficient - X axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M3_X1_0, 0.0f); - -/** - * Magnetometer offset temperature ^1 polynomial coefficient - Y axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M3_X1_1, 0.0f); - -/** - * Magnetometer offset temperature ^1 polynomial coefficient - Z axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M3_X1_2, 0.0f); - -/** - * Magnetometer offset temperature ^0 polynomial coefficient - X axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M3_X0_0, 0.0f); - -/** - * Magnetometer offset temperature ^0 polynomial coefficient - Y axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M3_X0_1, 0.0f); - -/** - * Magnetometer offset temperature ^0 polynomial coefficient - Z axis. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M3_X0_2, 0.0f); - -/** - * Magnetometer calibration reference temperature. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M3_TREF, 25.0f); - -/** - * Magnetometer calibration minimum temperature. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M3_TMIN, 0.0f); - -/** - * Magnetometer calibration maximum temperature. - * - * @group Thermal Compensation - * @category system - */ -PARAM_DEFINE_FLOAT(TC_M3_TMAX, 100.0f); diff --git a/src/modules/temperature_compensation/temp_comp_params_mag_3.yaml b/src/modules/temperature_compensation/temp_comp_params_mag_3.yaml new file mode 100644 index 0000000000..d8faeccad0 --- /dev/null +++ b/src/modules/temperature_compensation/temp_comp_params_mag_3.yaml @@ -0,0 +1,100 @@ +module_name: temperature_compensation +parameters: +- group: Thermal Compensation + definitions: + TC_M3_ID: + description: + short: ID of Magnetometer that the calibration is for + category: System + type: int32 + default: 0 + TC_M3_X3_0: + description: + short: Magnetometer offset temperature ^3 polynomial coefficient - X axis + category: System + type: float + default: 0.0 + TC_M3_X3_1: + description: + short: Magnetometer offset temperature ^3 polynomial coefficient - Y axis + category: System + type: float + default: 0.0 + TC_M3_X3_2: + description: + short: Magnetometer offset temperature ^3 polynomial coefficient - Z axis + category: System + type: float + default: 0.0 + TC_M3_X2_0: + description: + short: Magnetometer offset temperature ^2 polynomial coefficient - X axis + category: System + type: float + default: 0.0 + TC_M3_X2_1: + description: + short: Magnetometer offset temperature ^2 polynomial coefficient - Y axis + category: System + type: float + default: 0.0 + TC_M3_X2_2: + description: + short: Magnetometer offset temperature ^2 polynomial coefficient - Z axis + category: System + type: float + default: 0.0 + TC_M3_X1_0: + description: + short: Magnetometer offset temperature ^1 polynomial coefficient - X axis + category: System + type: float + default: 0.0 + TC_M3_X1_1: + description: + short: Magnetometer offset temperature ^1 polynomial coefficient - Y axis + category: System + type: float + default: 0.0 + TC_M3_X1_2: + description: + short: Magnetometer offset temperature ^1 polynomial coefficient - Z axis + category: System + type: float + default: 0.0 + TC_M3_X0_0: + description: + short: Magnetometer offset temperature ^0 polynomial coefficient - X axis + category: System + type: float + default: 0.0 + TC_M3_X0_1: + description: + short: Magnetometer offset temperature ^0 polynomial coefficient - Y axis + category: System + type: float + default: 0.0 + TC_M3_X0_2: + description: + short: Magnetometer offset temperature ^0 polynomial coefficient - Z axis + category: System + type: float + default: 0.0 + TC_M3_TREF: + description: + short: Magnetometer calibration reference temperature + category: System + type: float + default: 25.0 + TC_M3_TMIN: + description: + short: Magnetometer calibration minimum temperature + category: System + type: float + default: 0.0 + TC_M3_TMAX: + description: + short: Magnetometer calibration maximum temperature + category: System + type: float + default: 100.0 diff --git a/src/modules/uuv_att_control/CMakeLists.txt b/src/modules/uuv_att_control/CMakeLists.txt index 37dc0d728c..76194e205e 100644 --- a/src/modules/uuv_att_control/CMakeLists.txt +++ b/src/modules/uuv_att_control/CMakeLists.txt @@ -37,4 +37,6 @@ px4_add_module( COMPILE_FLAGS SRCS uuv_att_control.cpp + MODULE_CONFIG + uuv_att_control_params.yaml ) diff --git a/src/modules/uuv_att_control/uuv_att_control.cpp b/src/modules/uuv_att_control/uuv_att_control.cpp index fc81b0a310..bd17b2df48 100644 --- a/src/modules/uuv_att_control/uuv_att_control.cpp +++ b/src/modules/uuv_att_control/uuv_att_control.cpp @@ -270,9 +270,9 @@ void UUVAttitudeControl::generate_attitude_setpoint(float dt) if (js_heave_sway_mode) { // XYZ thrust - _attitude_setpoint.thrust_body[0] = _manual_control_setpoint.throttle * throttle_manual_attitude_gain; // surge +x + _attitude_setpoint.thrust_body[0] = _manual_control_setpoint.pitch * throttle_manual_attitude_gain; // heave +z down _attitude_setpoint.thrust_body[1] = _manual_control_setpoint.roll * throttle_manual_attitude_gain; // sway +y - _attitude_setpoint.thrust_body[2] = -_manual_control_setpoint.pitch * throttle_manual_attitude_gain; // heave +z down + _attitude_setpoint.thrust_body[2] = -_manual_control_setpoint.throttle * throttle_manual_attitude_gain; // surge +x } else { // Throttle only on +x (surge) @@ -295,9 +295,9 @@ void UUVAttitudeControl::generate_rates_setpoint(float dt) _rates_setpoint.pitch = 0.0f; _rates_setpoint.yaw = _manual_control_setpoint.yaw * dt * _param_rgm_yaw.get(); - _rates_setpoint.thrust_body[0] = _manual_control_setpoint.throttle * throttle_manual_rate_gain; // surge +x + _rates_setpoint.thrust_body[0] = _manual_control_setpoint.pitch * throttle_manual_rate_gain; // heave +z down _rates_setpoint.thrust_body[1] = _manual_control_setpoint.roll * throttle_manual_rate_gain; // sway +y - _rates_setpoint.thrust_body[2] = -_manual_control_setpoint.pitch * throttle_manual_rate_gain; // heave +z down + _rates_setpoint.thrust_body[2] = -_manual_control_setpoint.throttle * throttle_manual_rate_gain; // surge +x } else { // Roll/pitch/yaw are rate commands; thrust only surge @@ -404,9 +404,9 @@ void UUVAttitudeControl::Run() const float pitch_u = 0.0f; const float yaw_u = _manual_control_setpoint.yaw * _param_mgm_yaw.get(); - const float thrust_x = _manual_control_setpoint.throttle * throttle_manual_gain; // surge + const float thrust_x = _manual_control_setpoint.pitch * throttle_manual_gain; // heave const float thrust_y = _manual_control_setpoint.roll * throttle_manual_gain; // sway - const float thrust_z = -_manual_control_setpoint.pitch * throttle_manual_gain; // heave + const float thrust_z = -_manual_control_setpoint.throttle * throttle_manual_gain; // surge constrain_actuator_commands(roll_u, pitch_u, yaw_u, thrust_x, thrust_y, thrust_z); diff --git a/src/modules/uuv_att_control/uuv_att_control_params.c b/src/modules/uuv_att_control/uuv_att_control_params.c deleted file mode 100644 index 2a62edbcdc..0000000000 --- a/src/modules/uuv_att_control/uuv_att_control_params.c +++ /dev/null @@ -1,250 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2013-2020 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * AS IS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file uuv_att_control_params.c - * - * Parameters defined by the attitude control task for unmanned underwater vehicles (UUVs) - * - * This is a modification of the fixed wing/ground rover params and it is designed for ground rovers. - * It has been developed starting from the fw module, simplified and improved with dedicated items. - * - * All the ackowledgments and credits for the fw wing/rover app are reported in those files. - * - * @author Daniel Duecker - * @author Pedro Roque - */ - -/* - * Controller parameters, accessible via MAVLink - * - */ - -// Roll gains -/** - * Roll proportional gain - * - * @group UUV Attitude Control - * @decimal 2 - */ -PARAM_DEFINE_FLOAT(UUV_ROLL_P, 4.0f); - -/** - * Roll differential gain - * - * @group UUV Attitude Control - * @decimal 2 - */ -PARAM_DEFINE_FLOAT(UUV_ROLL_D, 1.5f); - - -// Pitch gains -/** - * Pitch proportional gain - * - * @group UUV Attitude Control - * @decimal 2 - */ -PARAM_DEFINE_FLOAT(UUV_PITCH_P, 4.0f); - -/** - * Pitch differential gain - * - * @group UUV Attitude Control - * @decimal 2 - */ -PARAM_DEFINE_FLOAT(UUV_PITCH_D, 2.0f); - - -// Yaw gains -/** - * Yawh proportional gain - * - * @group UUV Attitude Control - * @decimal 2 - */ -PARAM_DEFINE_FLOAT(UUV_YAW_P, 4.0f); - -/** - * Yaw differential gain - * - * @group UUV Attitude Control - * @decimal 2 - */ -PARAM_DEFINE_FLOAT(UUV_YAW_D, 2.0f); - - -// Gains for Manual Inputs in different Modes -/** - * Roll gain for manual inputs in attitude control mode - * - * @group UUV Attitude Control - * @min 0.0 - * @decimal 2 - */ -PARAM_DEFINE_FLOAT(UUV_SGM_ROLL, 0.5f); - -/** - * Pitch gain for manual inputs in attitude control mode - * - * @group UUV Attitude Control - * @min 0.0 - * @decimal 2 - */ -PARAM_DEFINE_FLOAT(UUV_SGM_PITCH, 0.5f); - -/** - * Yaw gain for manual inputs in attitude control mode - * - * @group UUV Attitude Control - * @min 0.0 - * @decimal 2 - */ -PARAM_DEFINE_FLOAT(UUV_SGM_YAW, 0.5f); - -/** - * Throttle gain for manual inputs in attitude control mode - * - * @group UUV Attitude Control - * @min 0.0 - * @decimal 2 - */ -PARAM_DEFINE_FLOAT(UUV_SGM_THRTL, 0.1f); - -/** - * Roll gain for manual inputs in rate control mode - * - * @group UUV Attitude Control - * @min 0.0 - * @decimal 2 - */ -PARAM_DEFINE_FLOAT(UUV_RGM_ROLL, 100.0f); - -/** - * Pitch gain for manual inputs in rate control mode - * - * @group UUV Attitude Control - * @min 0.0 - * @decimal 2 - */ -PARAM_DEFINE_FLOAT(UUV_RGM_PITCH, 100.0f); - -/** - * Yaw gain for manual inputs in rate control mode - * - * @group UUV Attitude Control - * @min 0.0 - * @decimal 2 - */ -PARAM_DEFINE_FLOAT(UUV_RGM_YAW, 100.0f); - -/** - * Throttle gain for manual inputs in rate control mode - * - * @group UUV Attitude Control - * @min 0.0 - * @decimal 2 - */ -PARAM_DEFINE_FLOAT(UUV_RGM_THRTL, 10.0f); - -/** - * Roll gain for manual inputs in manual control mode - * - * @group UUV Attitude Control - * @min 0.0 - * @decimal 2 - */ -PARAM_DEFINE_FLOAT(UUV_MGM_ROLL, 0.05f); - -/** - * Pitch gain for manual inputs in manual control mode - * - * @group UUV Attitude Control - * @min 0.0 - * @decimal 2 - */ -PARAM_DEFINE_FLOAT(UUV_MGM_PITCH, 0.05f); - -/** - * Yaw gain for manual inputs in manual control mode - * - * @group UUV Attitude Control - * @min 0.0 - * @decimal 2 - */ -PARAM_DEFINE_FLOAT(UUV_MGM_YAW, 0.05f); - -/** - * Throttle gain for manual inputs in manual control mode - * - * @group UUV Attitude Control - * @min 0.0 - * @decimal 2 - */ -PARAM_DEFINE_FLOAT(UUV_MGM_THRTL, 0.1f); - -/** - * UUV Torque setpoint Saturation - * - * @group UUV Attitude Control - * @min 0.0 - * @max 1.0 - * @decimal 2 - */ -PARAM_DEFINE_FLOAT(UUV_TORQUE_SAT, 0.3f); - -/** - * UUV Thrust setpoint Saturation - * - * @group UUV Attitude Control - * @min 0.0 - * @max 1.0 - * @decimal 2 - */ -PARAM_DEFINE_FLOAT(UUV_THRUST_SAT, 0.1f); - -/** - * Maximum time (in seconds) before resetting setpoint - * - * @group UUV Attitude Control - */ -PARAM_DEFINE_FLOAT(UUV_SP_MAX_AGE, 2.0f); - -/** - * Stick mode selector (0=Heave/sway control, roll/pitch leveled; 1=Pitch/roll control) - * - * @group UUV Attitude Control - * @min 0 - * @max 1 - */ -PARAM_DEFINE_INT32(UUV_STICK_MODE, 0); diff --git a/src/modules/uuv_att_control/uuv_att_control_params.yaml b/src/modules/uuv_att_control/uuv_att_control_params.yaml new file mode 100644 index 0000000000..e1b1b1f344 --- /dev/null +++ b/src/modules/uuv_att_control/uuv_att_control_params.yaml @@ -0,0 +1,154 @@ +module_name: uuv_att_control +parameters: +- group: UUV Attitude Control + definitions: + UUV_ROLL_P: + description: + short: Roll proportional gain + type: float + default: 4.0 + decimal: 2 + UUV_ROLL_D: + description: + short: Roll differential gain + type: float + default: 1.5 + decimal: 2 + UUV_PITCH_P: + description: + short: Pitch proportional gain + type: float + default: 4.0 + decimal: 2 + UUV_PITCH_D: + description: + short: Pitch differential gain + type: float + default: 2.0 + decimal: 2 + UUV_YAW_P: + description: + short: Yawh proportional gain + type: float + default: 4.0 + decimal: 2 + UUV_YAW_D: + description: + short: Yaw differential gain + type: float + default: 2.0 + decimal: 2 + UUV_SGM_ROLL: + description: + short: Roll gain for manual inputs in attitude control mode + type: float + default: 0.5 + min: 0.0 + decimal: 2 + UUV_SGM_PITCH: + description: + short: Pitch gain for manual inputs in attitude control mode + type: float + default: 0.5 + min: 0.0 + decimal: 2 + UUV_SGM_YAW: + description: + short: Yaw gain for manual inputs in attitude control mode + type: float + default: 0.5 + min: 0.0 + decimal: 2 + UUV_SGM_THRTL: + description: + short: Throttle gain for manual inputs in attitude control mode + type: float + default: 0.1 + min: 0.0 + decimal: 2 + UUV_RGM_ROLL: + description: + short: Roll gain for manual inputs in rate control mode + type: float + default: 100.0 + min: 0.0 + decimal: 2 + UUV_RGM_PITCH: + description: + short: Pitch gain for manual inputs in rate control mode + type: float + default: 100.0 + min: 0.0 + decimal: 2 + UUV_RGM_YAW: + description: + short: Yaw gain for manual inputs in rate control mode + type: float + default: 100.0 + min: 0.0 + decimal: 2 + UUV_RGM_THRTL: + description: + short: Throttle gain for manual inputs in rate control mode + type: float + default: 10.0 + min: 0.0 + decimal: 2 + UUV_MGM_ROLL: + description: + short: Roll gain for manual inputs in manual control mode + type: float + default: 0.05 + min: 0.0 + decimal: 2 + UUV_MGM_PITCH: + description: + short: Pitch gain for manual inputs in manual control mode + type: float + default: 0.05 + min: 0.0 + decimal: 2 + UUV_MGM_YAW: + description: + short: Yaw gain for manual inputs in manual control mode + type: float + default: 0.05 + min: 0.0 + decimal: 2 + UUV_MGM_THRTL: + description: + short: Throttle gain for manual inputs in manual control mode + type: float + default: 0.1 + min: 0.0 + decimal: 2 + UUV_TORQUE_SAT: + description: + short: UUV Torque setpoint Saturation + type: float + default: 0.3 + min: 0.0 + max: 1.0 + decimal: 2 + UUV_THRUST_SAT: + description: + short: UUV Thrust setpoint Saturation + type: float + default: 0.1 + min: 0.0 + max: 1.0 + decimal: 2 + UUV_SP_MAX_AGE: + description: + short: Maximum time (in seconds) before resetting setpoint + type: float + default: 2.0 + UUV_STICK_MODE: + description: + short: UUV stick input mode + long: Stick mode selector (0=Heave/sway control, roll/pitch leveled; 1=Pitch/roll + control) + type: int32 + default: 0 + min: 0 + max: 1 diff --git a/src/modules/uuv_pos_control/CMakeLists.txt b/src/modules/uuv_pos_control/CMakeLists.txt index f97dd0ea42..f0a6ae5dbc 100644 --- a/src/modules/uuv_pos_control/CMakeLists.txt +++ b/src/modules/uuv_pos_control/CMakeLists.txt @@ -37,4 +37,6 @@ px4_add_module( COMPILE_FLAGS SRCS uuv_pos_control.cpp + MODULE_CONFIG + uuv_pos_control_params.yaml ) diff --git a/src/modules/uuv_pos_control/uuv_pos_control_params.c b/src/modules/uuv_pos_control/uuv_pos_control_params.c deleted file mode 100644 index 082949fb4d..0000000000 --- a/src/modules/uuv_pos_control/uuv_pos_control_params.c +++ /dev/null @@ -1,188 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2013-2020 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * AS IS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file uuv_pos_control_params.c - * - * Parameters defined by the position control task for unmanned underwater vehicles (UUVs) - * - * This is a modification of the fixed wing/ground rover params and it is designed for ground rovers. - * It has been developed starting from the fw module, simplified and improved with dedicated items. - * - * All the ackowledgments and credits for the fw wing/rover app are reported in those files. - * - * @author Tim Hansen - * @author Daniel Duecker - */ - -/* - * Controller parameters, accessible via MAVLink - * - */ -/** - * Gain of P controller X - * - * @group UUV Position Control - */ -PARAM_DEFINE_FLOAT(UUV_GAIN_X_P, 1.0f); -/** - * Gain of P controller Y - * - * @group UUV Position Control - */ -PARAM_DEFINE_FLOAT(UUV_GAIN_Y_P, 1.0f); -/** - * Gain of P controller Z - * - * @group UUV Position Control - */ -PARAM_DEFINE_FLOAT(UUV_GAIN_Z_P, 1.0f); - -/** - * Gain of D controller X - * - * @group UUV Position Control - */ -PARAM_DEFINE_FLOAT(UUV_GAIN_X_D, 0.2f); -/** - * Gain of D controller Y - * - * @group UUV Position Control - */ -PARAM_DEFINE_FLOAT(UUV_GAIN_Y_D, 0.2f); -/** - * Gain of D controller Z - * - * @group UUV Position Control - */ -PARAM_DEFINE_FLOAT(UUV_GAIN_Z_D, 0.2f); - -/** - * Stabilization mode(1) or Position Control(0) - * - * @value 0 Tracks previous attitude setpoint - * @value 1 Tracks horizontal attitude (allows yaw change) - * @group UUV Position Control - */ -PARAM_DEFINE_INT32(UUV_STAB_MODE, 1); - -/** - * Deadband for changing position setpoint - * - * @group UUV Position Control - */ -PARAM_DEFINE_FLOAT(UUV_POS_STICK_DB, 0.1f); - -/** - * Gain for position control velocity setpoint update - * - * @group UUV Position Control - */ -PARAM_DEFINE_FLOAT(UUV_PGM_VEL, 0.5f); - -/** - * Stabilization mode(1) or Position Control(0) - * - * @value 0 Moves position setpoint in world frame - * @value 1 Moves position setpoint in body frame - * @group UUV Position Control - */ -PARAM_DEFINE_INT32(UUV_POS_MODE, 1); - - -/** - * Height proportional gain - * - * @group UUV Attitude Control - * @decimal 2 - */ -PARAM_DEFINE_FLOAT(UUV_HGT_P, 1.0f); - -/** - * Height differential gain - * - * @group UUV Attitude Control - * @decimal 2 - */ -PARAM_DEFINE_FLOAT(UUV_HGT_D, 1.0f); - -/** - * Height integrational gain - * - * @group UUV Attitude Control - * @decimal 2 - */ -PARAM_DEFINE_FLOAT(UUV_HGT_I, 0.2f); - -/** - * sum speed of error for integrational gain - * - * @group UUV Attitude Control - * @decimal 2 - */ -PARAM_DEFINE_FLOAT(UUV_HGT_I_SPD, 1.0f); - -/** - * Height change strength from manual input - * - * @group UUV Attitude Control - * @decimal 2 - */ -PARAM_DEFINE_FLOAT(UUV_HGT_STR, 1.0f); - -/** - * maximum Height distance controlled by manual input. Diff between actual and desired Height cant be higher than that - * - * - * @group UUV Attitude Control - * @decimal 2 - */ -PARAM_DEFINE_FLOAT(UUV_HGT_MAX_DIFF, 0.3f); - -/** - * Height rc-button up - * - * @group UUV Attitude Control - * @min 0 - * @max 16 - */ -PARAM_DEFINE_INT32(UUV_HGT_B_UP, 11); - -/** - * Height rc-button down - * - * @group UUV Attitude Control - * @min 0 - * @max 16 - */ -PARAM_DEFINE_INT32(UUV_HGT_B_DOWN, 12); diff --git a/src/modules/uuv_pos_control/uuv_pos_control_params.yaml b/src/modules/uuv_pos_control/uuv_pos_control_params.yaml new file mode 100644 index 0000000000..a7de0aad38 --- /dev/null +++ b/src/modules/uuv_pos_control/uuv_pos_control_params.yaml @@ -0,0 +1,114 @@ +module_name: uuv_pos_control +parameters: +- group: UUV Attitude Control + definitions: + UUV_HGT_P: + description: + short: Height proportional gain + type: float + default: 1.0 + decimal: 2 + UUV_HGT_D: + description: + short: Height differential gain + type: float + default: 1.0 + decimal: 2 + UUV_HGT_I: + description: + short: Height integrational gain + type: float + default: 0.2 + decimal: 2 + UUV_HGT_I_SPD: + description: + short: sum speed of error for integrational gain + type: float + default: 1.0 + decimal: 2 + UUV_HGT_STR: + description: + short: Height change strength from manual input + type: float + default: 1.0 + decimal: 2 + UUV_HGT_MAX_DIFF: + description: + short: Max height error from manual input + long: maximum Height distance controlled by manual input. Diff between actual + and desired Height cannot be higher than that + type: float + default: 0.3 + decimal: 2 + UUV_HGT_B_UP: + description: + short: Height rc-button up + type: int32 + default: 11 + min: 0 + max: 16 + UUV_HGT_B_DOWN: + description: + short: Height rc-button down + type: int32 + default: 12 + min: 0 + max: 16 +- group: UUV Position Control + definitions: + UUV_GAIN_X_P: + description: + short: Gain of P controller X + type: float + default: 1.0 + UUV_GAIN_Y_P: + description: + short: Gain of P controller Y + type: float + default: 1.0 + UUV_GAIN_Z_P: + description: + short: Gain of P controller Z + type: float + default: 1.0 + UUV_GAIN_X_D: + description: + short: Gain of D controller X + type: float + default: 0.2 + UUV_GAIN_Y_D: + description: + short: Gain of D controller Y + type: float + default: 0.2 + UUV_GAIN_Z_D: + description: + short: Gain of D controller Z + type: float + default: 0.2 + UUV_STAB_MODE: + description: + short: Stabilization mode(1) or Position Control(0) + type: enum + values: + 0: Tracks previous attitude setpoint + 1: Tracks horizontal attitude (allows yaw change) + default: 1 + UUV_POS_STICK_DB: + description: + short: Deadband for changing position setpoint + type: float + default: 0.1 + UUV_PGM_VEL: + description: + short: Gain for position control velocity setpoint update + type: float + default: 0.5 + UUV_POS_MODE: + description: + short: Stabilization mode(1) or Position Control(0) + type: enum + values: + 0: Moves position setpoint in world frame + 1: Moves position setpoint in body frame + default: 1 diff --git a/src/modules/uxrce_dds_client/dds_topics.h.em b/src/modules/uxrce_dds_client/dds_topics.h.em index 30ba6053ea..33b6fc5bb9 100644 --- a/src/modules/uxrce_dds_client/dds_topics.h.em +++ b/src/modules/uxrce_dds_client/dds_topics.h.em @@ -30,7 +30,9 @@ import os #include @[end for]@ -#define UXRCE_DEFAULT_POLL_INTERVAL_MS 10 +// Minimum interval (ms) between uORB updates forwarded to DDS (/fmu/out/*). +// 4ms ~= 250Hz. +#define UXRCE_DEFAULT_POLL_INTERVAL_MS 4 typedef bool (*UcdrSerializeMethod)(const void* data, ucdrBuffer& buf, int64_t time_offset); @@ -120,6 +122,7 @@ void SendTopicsSubs::reset() { send_subscriptions[idx].data_writer = uxr_object_id(0, UXR_INVALID_ID); orb_unsubscribe(fds[idx].fd); fds[idx].fd = -1; + fds[idx].events = 0; // force re-subscribe on reconnect (init() skips when events != 0) } }; @@ -128,6 +131,7 @@ void SendTopicsSubs::update(uxrSession *session, uxrStreamId reliable_out_stream int64_t time_offset_us = session->time_offset / 1000; // ns -> us alignas(sizeof(uint64_t)) char topic_data[max_topic_size]; + bool needs_flush = false; for (unsigned idx = 0; idx < sizeof(send_subscriptions)/sizeof(send_subscriptions[0]); ++idx) { if (fds[idx].revents & POLLIN) { @@ -138,10 +142,21 @@ void SendTopicsSubs::update(uxrSession *session, uxrStreamId reliable_out_stream ucdrBuffer ub; uint32_t topic_size = send_subscriptions[idx].topic_size; - if (uxr_prepare_output_stream(session, best_effort_stream_id, send_subscriptions[idx].data_writer, &ub, topic_size) != UXR_INVALID_REQUEST_ID) { - send_subscriptions[idx].ucdr_serialize_method(&topic_data, ub, time_offset_us); - // TODO: fill up the MTU and then flush, which reduces the packet overhead + uint16_t req_id = uxr_prepare_output_stream(session, best_effort_stream_id, send_subscriptions[idx].data_writer, &ub, + topic_size); + + if (req_id == UXR_INVALID_REQUEST_ID) { + // The best-effort output buffer can fill up if multiple topics update at once. + // Flush once to free space and retry. uxr_flash_output_streams(session); + needs_flush = false; + req_id = uxr_prepare_output_stream(session, best_effort_stream_id, send_subscriptions[idx].data_writer, &ub, + topic_size); + } + + if (req_id != UXR_INVALID_REQUEST_ID) { + send_subscriptions[idx].ucdr_serialize_method(&topic_data, ub, time_offset_us); + needs_flush = true; num_payload_sent += topic_size; } else { @@ -154,6 +169,10 @@ void SendTopicsSubs::update(uxrSession *session, uxrStreamId reliable_out_stream } } + + if (needs_flush) { + uxr_flash_output_streams(session); + } } // Publishers for received messages @@ -163,7 +182,20 @@ struct RcvTopicsPubs { @[ end for]@ @[ for sub in subscriptions_multi]@ +@[ if sub.get('route_field')]@ + uORB::PublicationMulti<@(sub['simple_base_type'])_s> @(sub['topic_simple'])_pubs[@(sub['max_instances'])] { +@[ for idx in range(sub['max_instances'])]@ + {ORB_ID(@(sub['topic_simple']))}@('' if idx == sub['max_instances']-1 else ',') +@[ end for]@ + }; + // Maps route_field values (arbitrary, not bounded to [0, max_instances)) to uORB instance indices + struct { + uint32_t assigned_ids[@(sub['max_instances'])] {}; + uint8_t num_assigned {0}; + } @(sub['topic_simple'])_demux; +@[ else]@ uORB::PublicationMulti<@(sub['simple_base_type'])_s> @(sub['topic_simple'])_pub{ORB_ID(@(sub['topic_simple']))}; +@[ end if]@ @[ end for]@ uint32_t num_payload_received{}; @@ -171,15 +203,16 @@ struct RcvTopicsPubs { bool init(uxrSession *session, uxrStreamId reliable_out_stream_id, uxrStreamId reliable_in_stream_id, uxrStreamId best_effort_in_stream_id, uxrObjectId participant_id, const char *client_namespace); }; +@[if subscriptions or subscriptions_multi]@ static void on_topic_update(uxrSession *session, uxrObjectId object_id, uint16_t request_id, uxrStreamId stream_id, struct ucdrBuffer *ub, uint16_t length, void *args) { RcvTopicsPubs *pubs = (RcvTopicsPubs *)args; - const int64_t time_offset_us = session->time_offset / 1000; // ns -> us pubs->num_payload_received += length; + const int64_t time_offset_us = session->time_offset / 1000; // ns -> us switch (object_id.id) { -@[ for idx, sub in enumerate(subscriptions + subscriptions_multi)]@ +@[ for idx, sub in enumerate(subscriptions)]@ case @(idx)+ (65535U / 32U) + 1: { @(sub['simple_base_type'])_s data; @@ -190,6 +223,38 @@ static void on_topic_update(uxrSession *session, uxrObjectId object_id, uint16_t } break; +@[ end for]@ +@[ for idx, sub in enumerate(subscriptions_multi)]@ + case @(idx + len(subscriptions))+ (65535U / 32U) + 1: { + @(sub['simple_base_type'])_s data; + + if (ucdr_deserialize_@(sub['simple_base_type'])(*ub, data, time_offset_us)) { + //print_message(ORB_ID(@(sub['simple_base_type'])), data); +@[ if sub.get('route_field')]@ + int instance = -1; + + for (uint8_t i = 0; i < pubs->@(sub['topic_simple'])_demux.num_assigned; i++) { + if (pubs->@(sub['topic_simple'])_demux.assigned_ids[i] == data.@(sub['route_field'])) { + instance = i; + break; + } + } + + if (instance < 0 && pubs->@(sub['topic_simple'])_demux.num_assigned < @(sub['max_instances'])) { + instance = pubs->@(sub['topic_simple'])_demux.num_assigned++; + pubs->@(sub['topic_simple'])_demux.assigned_ids[instance] = data.@(sub['route_field']); + } + + if (instance >= 0) { + pubs->@(sub['topic_simple'])_pubs[instance].publish(data); + } +@[ else]@ + pubs->@(sub['topic_simple'])_pub.publish(data); +@[ end if]@ + } + } + break; + @[ end for]@ default: @@ -197,18 +262,28 @@ static void on_topic_update(uxrSession *session, uxrObjectId object_id, uint16_t break; } } +@[end if]@ bool RcvTopicsPubs::init(uxrSession *session, uxrStreamId reliable_out_stream_id, uxrStreamId reliable_in_stream_id, uxrStreamId best_effort_in_stream_id, uxrObjectId participant_id, const char *client_namespace) { -@[ for idx, sub in enumerate(subscriptions + subscriptions_multi)]@ +@[ for idx, sub in enumerate(subscriptions)]@ { uint16_t queue_depth = orb_get_queue_size(ORB_ID(@(sub['simple_base_type']))) * 2; // use a bit larger queue size than internal uint32_t message_version = get_message_version<@(sub['simple_base_type'])_s>(); create_data_reader(session, reliable_out_stream_id, best_effort_in_stream_id, participant_id, @(idx), client_namespace, "@(sub['topic'])", message_version, "@(sub['dds_type'])", queue_depth); } @[ end for]@ +@[ for idx, sub in enumerate(subscriptions_multi)]@ + { + uint16_t queue_depth = orb_get_queue_size(ORB_ID(@(sub['topic_simple']))) * @(sub.get('max_instances', 2)); // scale queue for multiple sources + uint32_t message_version = get_message_version<@(sub['simple_base_type'])_s>(); + create_data_reader(session, reliable_out_stream_id, best_effort_in_stream_id, participant_id, @(idx + len(subscriptions)), client_namespace, "@(sub['topic'])", message_version, "@(sub['dds_type'])", queue_depth); + } +@[ end for]@ +@[ if subscriptions or subscriptions_multi]@ uxr_set_topic_callback(session, on_topic_update, this); +@[ end if]@ return true; } diff --git a/src/modules/uxrce_dds_client/dds_topics.yaml b/src/modules/uxrce_dds_client/dds_topics.yaml index 19270aa623..56e5b36b6f 100644 --- a/src/modules/uxrce_dds_client/dds_topics.yaml +++ b/src/modules/uxrce_dds_client/dds_topics.yaml @@ -190,9 +190,6 @@ subscriptions: - topic: /fmu/in/actuator_servos type: px4_msgs::msg::ActuatorServos - - topic: /fmu/in/aux_global_position - type: px4_msgs::msg::AuxGlobalPosition - - topic: /fmu/in/fixed_wing_longitudinal_setpoint type: px4_msgs::msg::FixedWingLongitudinalSetpoint @@ -226,5 +223,9 @@ subscriptions: - topic: /fmu/in/landing_gear type: px4_msgs::msg::LandingGear -# Create uORB::PublicationMulti +# Subscriptions multiplexed to uORB multi-instances (optionally demultiplexed based on a message field) subscriptions_multi: + - topic: /fmu/in/aux_global_position + type: px4_msgs::msg::AuxGlobalPosition + route_field: id + max_instances: 4 diff --git a/src/modules/uxrce_dds_client/generate_dds_topics.py b/src/modules/uxrce_dds_client/generate_dds_topics.py index 957ff4b578..64cf957527 100644 --- a/src/modules/uxrce_dds_client/generate_dds_topics.py +++ b/src/modules/uxrce_dds_client/generate_dds_topics.py @@ -102,6 +102,17 @@ def process_message_type(msg_type): # topic_simple: eg vehicle_status msg_type['topic_simple'] = msg_type['topic'].split('/')[-1] + # Optional per-publisher QoS options from YAML 'options:' field. + # Converts e.g. {cc: block, express: true} -> "cc=block,express=true" + opts = msg_type.get('options', None) + if opts and isinstance(opts, dict): + # Normalize booleans to lowercase strings expected by the parser. + msg_type['pub_options_str'] = ','.join( + f"{k}={str(v).lower() if isinstance(v, bool) else v}" for k, v in opts.items() + ) + else: + msg_type['pub_options_str'] = '' + def process_message_instance(msg_type): if 'instance' in msg_type: # if instance is given, check if it is a non negative integer @@ -115,27 +126,24 @@ def process_message_instance(msg_type): merged_em_globals['namespace'] = namespace -pubs_not_empty = msg_map['publications'] is not None -if pubs_not_empty: - for p in msg_map['publications']: - process_message_type(p) - process_message_instance(p) +pubs = msg_map.get('publications') or [] +for p in pubs: + process_message_type(p) + process_message_instance(p) -merged_em_globals['publications'] = msg_map['publications'] if pubs_not_empty else [] +merged_em_globals['publications'] = pubs -subs_not_empty = msg_map['subscriptions'] is not None -if subs_not_empty: - for s in msg_map['subscriptions']: - process_message_type(s) +subs = msg_map.get('subscriptions') or [] +for s in subs: + process_message_type(s) -merged_em_globals['subscriptions'] = msg_map['subscriptions'] if subs_not_empty else [] +merged_em_globals['subscriptions'] = subs -subs_multi_not_empty = msg_map['subscriptions_multi'] is not None -if subs_multi_not_empty: - for sm in msg_map['subscriptions_multi']: - process_message_type(sm) +subs_multi = msg_map.get('subscriptions_multi') or [] +for sd in subs_multi: + process_message_type(sd) -merged_em_globals['subscriptions_multi'] = msg_map['subscriptions_multi'] if subs_multi_not_empty else [] +merged_em_globals['subscriptions_multi'] = subs_multi merged_em_globals['type_includes'] = sorted(set(all_type_includes)) diff --git a/src/modules/uxrce_dds_client/utilities.hpp b/src/modules/uxrce_dds_client/utilities.hpp index 346dc28455..ce9033a968 100644 --- a/src/modules/uxrce_dds_client/utilities.hpp +++ b/src/modules/uxrce_dds_client/utilities.hpp @@ -101,10 +101,10 @@ static bool create_data_writer(uxrSession *session, uxrStreamId reliable_out_str return true; } -static bool create_data_reader(uxrSession *session, uxrStreamId reliable_out_stream_id, uxrStreamId input_stream_id, - uxrObjectId participant_id, uint16_t index, const char *client_namespace, const char *topic, - uint32_t message_version, - const char *type_name, uint16_t queue_depth) +static bool __attribute__((unused)) create_data_reader(uxrSession *session, uxrStreamId reliable_out_stream_id, uxrStreamId input_stream_id, + uxrObjectId participant_id, uint16_t index, const char *client_namespace, const char *topic, + uint32_t message_version, + const char *type_name, uint16_t queue_depth) { // topic char topic_name[TOPIC_NAME_SIZE]; diff --git a/src/modules/uxrce_dds_client/uxrce_dds_client.cpp b/src/modules/uxrce_dds_client/uxrce_dds_client.cpp index 084765a8ec..9174fd3ace 100644 --- a/src/modules/uxrce_dds_client/uxrce_dds_client.cpp +++ b/src/modules/uxrce_dds_client/uxrce_dds_client.cpp @@ -55,7 +55,22 @@ static constexpr uint8_t TIMESYNC_MAX_TIMEOUTS = 10; using namespace time_literals; -ModuleBase::Descriptor UxrceddsClient::desc{task_spawn, custom_command, print_usage}; +#if defined(UXRCE_DDS_CLIENT_UDP) +static void configure_udp_socket_nonblocking(int fd) +{ + if (fd < 0) { + return; + } + + // Prevent deadlocks in send() under RX buffer starvation by making the socket non-blocking. + int nonblock = 1; + + if (ioctl(fd, FIONBIO, (unsigned long)&nonblock) != OK) { + PX4_WARN("failed to set non-blocking (%i)", errno); + } +} +#endif +ModuleBase::Descriptor UxrceddsClient::desc {task_spawn, custom_command, print_usage}; static void on_time(uxrSession *session, int64_t current_time, int64_t client_transmit_timestamp, int64_t agent_receive_timestamp, int64_t originate_timestamp, void *args) @@ -164,6 +179,8 @@ bool UxrceddsClient::init() _comm = &_transport_udp->comm; _fd = _transport_udp->platform.poll_fd.fd; + configure_udp_socket_nonblocking(_fd); + return true; } else { @@ -178,11 +195,6 @@ bool UxrceddsClient::init() void UxrceddsClient::deinit() { - if (_fd >= 0) { - close(_fd); - _fd = -1; - } - if (_transport_serial) { uxr_close_serial_transport(_transport_serial); delete _transport_serial; @@ -200,6 +212,7 @@ void UxrceddsClient::deinit() #endif // UXRCE_DDS_CLIENT_UDP _comm = nullptr; + _fd = -1; } bool UxrceddsClient::setupSession(uxrSession *session) @@ -382,10 +395,17 @@ void UxrceddsClient::deleteSession(uxrSession *session) delete_repliers(); if (_session_created) { - uxr_delete_session_retries(session, _connected ? 1 : 0); + // During shutdown, avoid blocking retries (can hang stop if transport is unhealthy). + const uint8_t retries = (_connected && !should_exit()) ? 1 : 0; + uxr_delete_session_retries(session, retries); _session_created = false; } + if (_subs) { + _subs->reset(); + } + + _connected = false; _last_payload_tx_rate = 0; _timesync.reset_filter(); } @@ -647,17 +667,23 @@ void UxrceddsClient::run() perf_begin(_loop_perf); perf_count(_loop_interval_perf); - int orb_poll_timeout_ms = 10; + // Keep loop latency low without busy-looping: + // - Use a short uORB poll timeout (instead of 10ms) + // - If transport has pending data, don't block in uORB poll at all. + int orb_poll_timeout_ms = 1; - int bytes_available = 0; + if (_fd >= 0) { + px4_pollfd_struct_t transport_pollfd {}; + transport_pollfd.fd = _fd; + transport_pollfd.events = POLLIN; + const int transport_poll = px4_poll(&transport_pollfd, 1, 0); - if (ioctl(_fd, FIONREAD, (unsigned long)&bytes_available) == OK) { - if (bytes_available > 10) { + if (transport_poll > 0) { orb_poll_timeout_ms = 0; } } - /* Wait for topic updates for max 10 ms */ + /* Wait for topic updates */ int poll = px4_poll(_subs->fds, (sizeof(_subs->fds) / sizeof(_subs->fds[0])), orb_poll_timeout_ms); /* Handle the poll results */ @@ -676,8 +702,19 @@ void UxrceddsClient::run() } } - // run session with 0 timeout (non-blocking) - uxr_run_session_timeout(&session, 0); + // Run session with 0 timeout (non-blocking). Under high inbound traffic the socket RX buffer can + // overflow and starve the system; drain a small burst per loop to keep up. + for (int i = 0; i < 10; i++) { + uxr_run_session_timeout(&session, 0); + + int fd_bytes_available = 0; + + if ((_fd < 0) + || (ioctl(_fd, FIONREAD, (unsigned long)&fd_bytes_available) != OK) + || (fd_bytes_available <= 0)) { + break; + } + } // check if there are available replies process_replies(); @@ -709,6 +746,7 @@ void UxrceddsClient::run() /* PONG_IN_SESSION_STATUS */ if (session.on_pong_flag == 1) { _had_ping_reply = true; + session.on_pong_flag = 0; } // Calculate the payload tx/rx rate for connectivity monitoring @@ -720,6 +758,7 @@ void UxrceddsClient::run() perf_end(_loop_perf); } + PX4_INFO("session disconnected, attempting to reconnect..."); deleteSession(&session); } } @@ -851,17 +890,23 @@ bool UxrceddsClient::setBaudrate(int fd, unsigned baud) } /* set baud rate */ - if ((termios_state = cfsetispeed(&uart_config, speed)) < 0) { + termios_state = cfsetispeed(&uart_config, speed); + + if (termios_state < 0) { PX4_ERR("ERR: %d (cfsetispeed)", termios_state); return false; } - if ((termios_state = cfsetospeed(&uart_config, speed)) < 0) { + termios_state = cfsetospeed(&uart_config, speed); + + if (termios_state < 0) { PX4_ERR("ERR: %d (cfsetospeed)", termios_state); return false; } - if ((termios_state = tcsetattr(fd, TCSANOW, &uart_config)) < 0) { + termios_state = tcsetattr(fd, TCSANOW, &uart_config); + + if (termios_state < 0) { PX4_ERR("ERR: %d (tcsetattr)", termios_state); return false; } @@ -871,12 +916,12 @@ bool UxrceddsClient::setBaudrate(int fd, unsigned baud) bool UxrceddsClient::add_replier(SrvBase *replier) { - if (_num_of_repliers < MAX_NUM_REPLIERS) { - _repliers[_num_of_repliers] = replier; - - _num_of_repliers++; + if (replier == nullptr || _num_of_repliers >= MAX_NUM_REPLIERS) { + return true; } + _repliers[_num_of_repliers] = replier; + _num_of_repliers++; return false; } diff --git a/src/modules/vtol_att_control/CMakeLists.txt b/src/modules/vtol_att_control/CMakeLists.txt index 780217ccc6..9cd91f6275 100644 --- a/src/modules/vtol_att_control/CMakeLists.txt +++ b/src/modules/vtol_att_control/CMakeLists.txt @@ -39,4 +39,8 @@ px4_add_module( vtol_type.cpp tailsitter.cpp standard.cpp + MODULE_CONFIG + standard_params.yaml + tiltrotor_params.yaml + vtol_att_control_params.yaml ) diff --git a/src/modules/vtol_att_control/standard_params.c b/src/modules/vtol_att_control/standard_params.c deleted file mode 100644 index 99a3fdef09..0000000000 --- a/src/modules/vtol_att_control/standard_params.c +++ /dev/null @@ -1,107 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2015 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file standard_params.c - * Parameters for the standard VTOL controller. - * - * @author Simon Wilks - * @author Roman Bapst - */ - - -/** - * Use fixed-wing actuation in hover to accelerate forward - * - * Prevents downforce from pitching the body down when facing wind. - * Uses puller/pusher (standard VTOL), or forward-tilt (tiltrotor VTOL) to accelerate forward instead. - * Only active if demanded pitch is below VT_PITCH_MIN. - * Use VT_FWD_THRUST_SC to tune it. - * Descend mode is treated as Landing too. - * - * Only active (if enabled) in height-rate controlled modes. - * - * @value 0 Disabled - * @value 1 Enabled (except LANDING) - * @value 2 Enabled if above MPC_LAND_ALT1 - * @value 3 Enabled if above MPC_LAND_ALT2 - * @value 4 Enabled constantly - * @value 5 Enabled if above MPC_LAND_ALT1 (except LANDING) - * @value 6 Enabled if above MPC_LAND_ALT2 (except LANDING) - * - * @group VTOL Attitude Control - */ -PARAM_DEFINE_INT32(VT_FWD_THRUST_EN, 0); - -/** - * Fixed-wing actuation thrust scale in hover - * - * Scale applied to the demanded pitch (below VT_PITCH_MIN) to get the fixed-wing forward actuation in hover mode. - * Enabled via VT_FWD_THRUST_EN. - * - * @min 0.0 - * @max 5.0 - * @increment 0.01 - * @decimal 2 - * @group VTOL Attitude Control - */ -PARAM_DEFINE_FLOAT(VT_FWD_THRUST_SC, 0.7f); - -/** - * Back transition MC motor ramp up time - * - * This sets the duration during which the MC motors ramp up to the commanded thrust during the back transition stage. - * - * @unit s - * @min 0.0 - * @max 20.0 - * @increment 0.1 - * @decimal 1 - * @group VTOL Attitude Control - */ -PARAM_DEFINE_FLOAT(VT_B_TRANS_RAMP, 3.0f); - -/** - * Pusher throttle ramp up slew rate - * - * Defines the slew rate of the puller/pusher throttle during transitions. - * Zero will deactivate the slew rate limiting and thus produce an instant throttle - * rise to the transition throttle VT_F_TRANS_THR. - * - * @unit 1/s - * @min 0 - * @increment 0.01 - * @decimal 2 - * @group VTOL Attitude Control - */ -PARAM_DEFINE_FLOAT(VT_PSHER_SLEW, 0.33f); diff --git a/src/modules/vtol_att_control/standard_params.yaml b/src/modules/vtol_att_control/standard_params.yaml new file mode 100644 index 0000000000..ae9e32f44d --- /dev/null +++ b/src/modules/vtol_att_control/standard_params.yaml @@ -0,0 +1,62 @@ +module_name: vtol_att_control +parameters: +- group: VTOL Attitude Control + definitions: + VT_FWD_THRUST_EN: + description: + short: Use fixed-wing actuation in hover to accelerate forward + long: |- + Prevents downforce from pitching the body down when facing wind. + Uses puller/pusher (standard VTOL), or forward-tilt (tiltrotor VTOL) to accelerate forward instead. + Only active if demanded pitch is below VT_PITCH_MIN. + Use VT_FWD_THRUST_SC to tune it. + Descend mode is treated as Landing too. + + Only active (if enabled) in height-rate controlled modes. + type: enum + values: + 0: Disabled + 1: Enabled (except LANDING) + 2: Enabled if above MPC_LAND_ALT1 + 3: Enabled if above MPC_LAND_ALT2 + 4: Enabled constantly + 5: Enabled if above MPC_LAND_ALT1 (except LANDING) + 6: Enabled if above MPC_LAND_ALT2 (except LANDING) + default: 0 + VT_FWD_THRUST_SC: + description: + short: Fixed-wing actuation thrust scale in hover + long: |- + Scale applied to the demanded pitch (below VT_PITCH_MIN) to get the fixed-wing forward actuation in hover mode. + Enabled via VT_FWD_THRUST_EN. + type: float + default: 0.7 + min: 0.0 + max: 5.0 + increment: 0.01 + decimal: 2 + VT_B_TRANS_RAMP: + description: + short: Back transition MC motor ramp up time + long: This sets the duration during which the MC motors ramp up to the commanded + thrust during the back transition stage. + type: float + default: 3.0 + unit: s + min: 0.0 + max: 20.0 + increment: 0.1 + decimal: 1 + VT_PSHER_SLEW: + description: + short: Pusher throttle ramp up slew rate + long: |- + Defines the slew rate of the puller/pusher throttle during transitions. + Zero will deactivate the slew rate limiting and thus produce an instant throttle + rise to the transition throttle VT_F_TRANS_THR. + type: float + default: 0.33 + unit: 1/s + min: 0 + increment: 0.01 + decimal: 2 diff --git a/src/modules/vtol_att_control/tiltrotor_params.c b/src/modules/vtol_att_control/tiltrotor_params.c deleted file mode 100644 index 92fa558454..0000000000 --- a/src/modules/vtol_att_control/tiltrotor_params.c +++ /dev/null @@ -1,100 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2015 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file tiltrotor_params.c - * Parameters for vtol attitude controller. - * - * @author Roman Bapst - */ - -/** - * Normalized tilt in Hover - * - * @min 0.0 - * @max 1.0 - * @increment 0.01 - * @decimal 3 - * @group VTOL Attitude Control - */ -PARAM_DEFINE_FLOAT(VT_TILT_MC, 0.0f); - -/** - * Normalized tilt in transition to FW - * - * @min 0.0 - * @max 1.0 - * @increment 0.01 - * @decimal 3 - * @group VTOL Attitude Control - */ -PARAM_DEFINE_FLOAT(VT_TILT_TRANS, 0.4f); - -/** - * Normalized tilt in FW - * - * @min 0.0 - * @max 1.0 - * @increment 0.01 - * @decimal 3 - * @group VTOL Attitude Control - */ -PARAM_DEFINE_FLOAT(VT_TILT_FW, 1.0f); - -/** - * Duration of front transition phase 2 - * - * Time in seconds it takes to tilt form VT_TILT_TRANS to VT_TILT_FW. - * - * @unit s - * @min 0.1 - * @max 5.0 - * @increment 0.01 - * @decimal 3 - * @group VTOL Attitude Control - */ -PARAM_DEFINE_FLOAT(VT_TRANS_P2_DUR, 0.5f); - -/** - * Duration motor tilt up in backtransition - * - * Time in seconds it takes to tilt form VT_TILT_FW to VT_TILT_MC. - * - * @unit s - * @min 0.1 - * @max 10 - * @increment 0.1 - * @decimal 1 - * @group VTOL Attitude Control - */ -PARAM_DEFINE_FLOAT(VT_BT_TILT_DUR, 1.f); diff --git a/src/modules/vtol_att_control/tiltrotor_params.yaml b/src/modules/vtol_att_control/tiltrotor_params.yaml new file mode 100644 index 0000000000..d7f6d06fe5 --- /dev/null +++ b/src/modules/vtol_att_control/tiltrotor_params.yaml @@ -0,0 +1,53 @@ +module_name: vtol_att_control +parameters: +- group: VTOL Attitude Control + definitions: + VT_TILT_MC: + description: + short: Normalized tilt in Hover + type: float + default: 0.0 + min: 0.0 + max: 1.0 + increment: 0.01 + decimal: 3 + VT_TILT_TRANS: + description: + short: Normalized tilt in transition to FW + type: float + default: 0.4 + min: 0.0 + max: 1.0 + increment: 0.01 + decimal: 3 + VT_TILT_FW: + description: + short: Normalized tilt in FW + type: float + default: 1.0 + min: 0.0 + max: 1.0 + increment: 0.01 + decimal: 3 + VT_TRANS_P2_DUR: + description: + short: Duration of front transition phase 2 + long: Time in seconds it takes to tilt form VT_TILT_TRANS to VT_TILT_FW. + type: float + default: 0.5 + unit: s + min: 0.1 + max: 5.0 + increment: 0.01 + decimal: 3 + VT_BT_TILT_DUR: + description: + short: Duration motor tilt up in backtransition + long: Time in seconds it takes to tilt form VT_TILT_FW to VT_TILT_MC. + type: float + default: 1.0 + unit: s + min: 0.1 + max: 10 + increment: 0.1 + decimal: 1 diff --git a/src/modules/vtol_att_control/vtol_att_control_main.cpp b/src/modules/vtol_att_control/vtol_att_control_main.cpp index 0047fe1c4f..f1db4a0b58 100644 --- a/src/modules/vtol_att_control/vtol_att_control_main.cpp +++ b/src/modules/vtol_att_control/vtol_att_control_main.cpp @@ -79,6 +79,12 @@ VtolAttitudeControl::VtolAttitudeControl() : exit_and_cleanup(desc); } + if (_vtol_type == nullptr) { + PX4_ERR("vtol type allocation failed"); + exit_and_cleanup(desc); + return; + } + _flaps_setpoint_pub.advertise(); _spoilers_setpoint_pub.advertise(); _vtol_vehicle_status_pub.advertise(); @@ -149,7 +155,7 @@ void VtolAttitudeControl::vehicle_cmd_poll() uint8_t result = vehicle_command_ack_s::VEHICLE_CMD_RESULT_ACCEPTED; - const int transition_command_param1 = int(vehicle_command.param1 + 0.5f); + const int transition_command_param1 = static_cast(lround(vehicle_command.param1)); // deny transition from MC to FW in Takeoff, Land, RTL and Orbit if (transition_command_param1 == vtol_vehicle_status_s::VEHICLE_VTOL_STATE_FW && @@ -162,7 +168,7 @@ void VtolAttitudeControl::vehicle_cmd_poll() } else { _transition_command = transition_command_param1; - _immediate_transition = (PX4_ISFINITE(vehicle_command.param2)) ? int(vehicle_command.param2 + 0.5f) : false; + _immediate_transition = (PX4_ISFINITE(vehicle_command.param2)) ? static_cast(lround(vehicle_command.param2)) : false; // reset fixed_wing_system_failure flag when a new transition to FW is triggered if (_transition_command == vtol_vehicle_status_s::VEHICLE_VTOL_STATE_FW) { @@ -302,6 +308,12 @@ VtolAttitudeControl::Run() #endif // !ENABLE_LOCKSTEP_SCHEDULER + if (_vtol_type == nullptr) { + PX4_ERR("vtol type unavailable"); + exit_and_cleanup(desc); + return; + } + if (!_initialized) { if (_vtol_type->init()) { diff --git a/src/modules/vtol_att_control/vtol_att_control_params.c b/src/modules/vtol_att_control/vtol_att_control_params.c deleted file mode 100644 index 96727f0c53..0000000000 --- a/src/modules/vtol_att_control/vtol_att_control_params.c +++ /dev/null @@ -1,395 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2014-2023 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file vtol_att_control_params.c - * Parameters for vtol attitude controller. - * - * @author Roman Bapst - * @author Sander Smeets - */ - -/** - * VTOL Type (Tailsitter=0, Tiltrotor=1, Standard=2) - * - * @value 0 Tailsitter - * @value 1 Tiltrotor - * @value 2 Standard - * @min 0 - * @max 2 - * @reboot_required true - * @group VTOL Attitude Control - */ -PARAM_DEFINE_INT32(VT_TYPE, 0); - -/** - * Lock control surfaces in hover - * - * If set to 1 the control surfaces are locked at the disarmed value in multicopter mode. - * - * @boolean - * @group VTOL Attitude Control - */ -PARAM_DEFINE_INT32(VT_ELEV_MC_LOCK, 1); - -/** - * Duration of a front transition - * - * Time in seconds used for a transition - * - * @unit s - * @min 0.1 - * @max 20.00 - * @increment 1 - * @decimal 2 - * @group VTOL Attitude Control - */ -PARAM_DEFINE_FLOAT(VT_F_TRANS_DUR, 5.0f); - -/** - * Maximum duration of a back transition - * - * Transition is also declared over if the groundspeed drops below MPC_XY_CRUISE. - * - * @unit s - * @min 0.1 - * @max 20.00 - * @increment 1 - * @decimal 2 - * @group VTOL Attitude Control - */ -PARAM_DEFINE_FLOAT(VT_B_TRANS_DUR, 10.0f); - -/** - * Target throttle value for the transition to fixed-wing flight. - * - * @min 0.0 - * @max 1.0 - * @increment 0.01 - * @decimal 3 - * @group VTOL Attitude Control - */ -PARAM_DEFINE_FLOAT(VT_F_TRANS_THR, 1.0f); - -/** - * Approximate deceleration during back transition - * - * Used to calculate back transition distance in an auto mode. - * For standard vtol and tiltrotors a controller is used to track this value during the transition. - * - * @unit m/s^2 - * @min 0.5 - * @max 10 - * @increment 0.1 - * @decimal 2 - * @group VTOL Attitude Control - */ -PARAM_DEFINE_FLOAT(VT_B_DEC_MSS, 2.0f); - -/** - * Transition blending airspeed - * - * Airspeed at which we can start blending both fw and mc controls. Set to 0 to disable. - * - * @unit m/s - * @min 0.00 - * @max 30.00 - * @increment 1 - * @decimal 2 - * @group VTOL Attitude Control - */ -PARAM_DEFINE_FLOAT(VT_ARSP_BLEND, 8.0f); - -/** - * Transition airspeed - * - * Airspeed at which we can switch to fw mode - * - * @unit m/s - * @min 0.00 - * @max 30.00 - * @increment 1 - * @decimal 2 - * @group VTOL Attitude Control - */ -PARAM_DEFINE_FLOAT(VT_ARSP_TRANS, 10.0f); - -/** - * Front transition timeout - * - * Time in seconds after which transition will be cancelled. - * - * @unit s - * @min 0.1 - * @max 30.00 - * @increment 1 - * @decimal 2 - * @group VTOL Attitude Control - */ -PARAM_DEFINE_FLOAT(VT_TRANS_TIMEOUT, 15.0f); - -/** - * Front transition minimum time - * - * Minimum time in seconds for front transition. - * - * @unit s - * @min 0.0 - * @max 20.0 - * @increment 0.1 - * @decimal 1 - * @group VTOL Attitude Control - */ -PARAM_DEFINE_FLOAT(VT_TRANS_MIN_TM, 2.0f); - -/** - * Quad-chute altitude - * - * Minimum altitude for fixed-wing flight. When the vehicle is in fixed-wing mode - * and the altitude drops below this altitude (relative altitude above local origin), - * it will instantly switch back to MC mode and execute behavior defined in COM_QC_ACT. - * - * @unit m - * @min 0.0 - * @max 200.0 - * @increment 1 - * @decimal 1 - * @group VTOL Attitude Control - */ -PARAM_DEFINE_FLOAT(VT_FW_MIN_ALT, 0.0f); - -/** - * Quad-chute uncommanded descent threshold - * - * Altitude error threshold for quad-chute triggering during fixed-wing flight. - * The check is only active if altitude is controlled and the vehicle is below the current altitude reference. - * The altitude error is relative to the highest altitude the vehicle has achieved since it has flown below the current - * altitude reference. - * - * Set to 0 do disable. - * - * @unit m - * @min 0.0 - * @max 200.0 - * @increment 1 - * @decimal 1 - * @group VTOL Attitude Control - */ -PARAM_DEFINE_FLOAT(VT_QC_ALT_LOSS, 0.0f); - -/** - * Quad-chute transition altitude loss threshold - * - * Altitude loss threshold for quad-chute triggering during VTOL transition to fixed-wing flight - * in altitude-controlled flight modes. - * Active until 5s after completing transition to fixed-wing. - * If the current altitude is more than this value below the altitude at the beginning of the - * transition, it will instantly switch back to MC mode and execute behavior defined in COM_QC_ACT. - * - * Set to 0 do disable this threshold. - * - * @unit m - * @min 0 - * @max 50 - * @increment 1 - * @decimal 1 - * @group VTOL Attitude Control - */ -PARAM_DEFINE_FLOAT(VT_QC_T_ALT_LOSS, 20.0f); - -/** - * Quad-chute max pitch threshold - * - * Absolute pitch threshold for quad-chute triggering in FW mode. - * Above this the vehicle will transition back to MC mode and execute behavior defined in COM_QC_ACT. - * Set to 0 do disable this threshold. - * - * @unit deg - * @min 0 - * @max 180 - * @group VTOL Attitude Control - */ -PARAM_DEFINE_INT32(VT_FW_QC_P, 0); - -/** - * Quad-chute max roll threshold - * - * Absolute roll threshold for quad-chute triggering in FW mode. - * Above this the vehicle will transition back to MC mode and execute behavior defined in COM_QC_ACT. - * Set to 0 do disable this threshold. - * - * @unit deg - * @min 0 - * @max 180 - * @group VTOL Attitude Control - */ -PARAM_DEFINE_INT32(VT_FW_QC_R, 0); - -/** - * Quad-chute maximum height - * - * Maximum height above the ground (if available, otherwise above - * Home if available, otherwise above the local origin) where triggering a quad-chute is possible. - * At high altitudes there is a big risk to deplete the battery and therefore crash if quad-chuting there. - * - * @unit m - * @min 0 - * @increment 1 - * @group VTOL Attitude Control - */ -PARAM_DEFINE_INT32(VT_FW_QC_HMAX, 0); - -/** - * Airspeed-less front transition time (open loop) - * - * The duration of the front transition when there is no airspeed feedback available. - * When airspeed is used, transition timeout is declared if airspeed does not - * reach VT_ARSP_BLEND after this time. - * - * @unit s - * @min 1.0 - * @max 30.0 - * @increment 0.5 - * @decimal 1 - * @group VTOL Attitude Control - */ -PARAM_DEFINE_FLOAT(VT_F_TR_OL_TM, 6.0f); - -/** - * Differential thrust in forwards flight. - * - * Enable differential thrust seperately for roll, pitch, yaw in forward (fixed-wing) mode. - * The effectiveness of differential thrust around the corresponding axis can be - * tuned by setting VT_FW_DIFTHR_S_R / VT_FW_DIFTHR_S_P / VT_FW_DIFTHR_S_Y. - * - * @min 0 - * @max 7 - * @bit 0 Yaw - * @bit 1 Roll - * @bit 2 Pitch - * @group VTOL Attitude Control - */ -PARAM_DEFINE_INT32(VT_FW_DIFTHR_EN, 0); - -/** - * Roll differential thrust factor in forward flight - * - * Differential thrust in forward flight is enabled via VT_FW_DIFTHR_EN. - * - * @min 0.0 - * @max 2.0 - * @decimal 2 - * @increment 0.1 - * @group VTOL Attitude Control - */ -PARAM_DEFINE_FLOAT(VT_FW_DIFTHR_S_R, 1.f); - -/** - * Pitch differential thrust factor in forward flight - * - * Differential thrust in forward flight is enabled via VT_FW_DIFTHR_EN. - * - * @min 0.0 - * @max 2.0 - * @decimal 2 - * @increment 0.1 - * @group VTOL Attitude Control - */ -PARAM_DEFINE_FLOAT(VT_FW_DIFTHR_S_P, 1.f); - -/** - * Yaw differential thrust factor in forward flight - * - * Differential thrust in forward flight is enabled via VT_FW_DIFTHR_EN. - * - * @min 0.0 - * @max 2.0 - * @decimal 2 - * @increment 0.1 - * @group VTOL Attitude Control - */ -PARAM_DEFINE_FLOAT(VT_FW_DIFTHR_S_Y, 0.1f); - -/** - * Backtransition deceleration setpoint to tilt I gain. - * - * @unit rad s/m - * @min 0 - * @max 0.3 - * @decimal 2 - * @increment 0.05 - * @group VTOL Attitude Control - */ -PARAM_DEFINE_FLOAT(VT_B_DEC_I, 0.1f); - -/** - * Minimum pitch angle during hover. - * - * Any pitch setpoint below this value is translated to a forward force by the fixed-wing forward actuation if - * VT_FWD_TRHUST_EN is set. - * - * @unit deg - * @min -10.0 - * @max 45.0 - * @increment 0.1 - * @decimal 1 - * @group VTOL Attitude Control - */ -PARAM_DEFINE_FLOAT(VT_PITCH_MIN, 0.0f); - -/** - * Minimum pitch angle during hover landing. - * - * Overrides VT_PITCH_MIN when the vehicle is in LAND mode (hovering). - * During landing it can be beneficial to reduce the pitch angle to reduce the generated lift in head wind. - * - * @unit deg - * @min -10.0 - * @max 45.0 - * @increment 0.1 - * @decimal 1 - * @group VTOL Attitude Control - */ -PARAM_DEFINE_FLOAT(VT_LND_PITCH_MIN, 0.0f); - -/** - * Spoiler setting while landing (hover) - * - * @unit norm - * @min -1 - * @max 1 - * @decimal 1 - * @increment 0.1 - * @group VTOL Attitude Control - */ -PARAM_DEFINE_FLOAT(VT_SPOILER_MC_LD, 0.f); diff --git a/src/modules/vtol_att_control/vtol_att_control_params.yaml b/src/modules/vtol_att_control/vtol_att_control_params.yaml new file mode 100644 index 0000000000..206b2a0f64 --- /dev/null +++ b/src/modules/vtol_att_control/vtol_att_control_params.yaml @@ -0,0 +1,302 @@ +module_name: vtol_att_control +parameters: +- group: VTOL Attitude Control + definitions: + VT_TYPE: + description: + short: VTOL Type (Tailsitter=0, Tiltrotor=1, Standard=2) + type: enum + values: + 0: Tailsitter + 1: Tiltrotor + 2: Standard + default: 0 + min: 0 + max: 2 + reboot_required: true + VT_ELEV_MC_LOCK: + description: + short: Lock control surfaces in hover + long: If set to 1 the control surfaces are locked at the disarmed value in + multicopter mode. + type: boolean + default: 1 + VT_F_TRANS_DUR: + description: + short: Duration of a front transition + long: Time in seconds used for a transition + type: float + default: 5.0 + unit: s + min: 0.1 + max: 20.0 + increment: 1 + decimal: 2 + VT_B_TRANS_DUR: + description: + short: Maximum duration of a back transition + long: Transition is also declared over if the groundspeed drops below MPC_XY_CRUISE. + type: float + default: 10.0 + unit: s + min: 0.1 + max: 20.0 + increment: 1 + decimal: 2 + VT_F_TRANS_THR: + description: + short: Target throttle value for the transition to fixed-wing flight + type: float + default: 1.0 + min: 0.0 + max: 1.0 + increment: 0.01 + decimal: 3 + VT_B_DEC_MSS: + description: + short: Approximate deceleration during back transition + long: |- + Used to calculate back transition distance in an auto mode. + For standard vtol and tiltrotors a controller is used to track this value during the transition. + type: float + default: 2.0 + unit: m/s^2 + min: 0.5 + max: 10 + increment: 0.1 + decimal: 2 + VT_ARSP_BLEND: + description: + short: Transition blending airspeed + long: Airspeed at which we can start blending both fw and mc controls. Set + to 0 to disable. + type: float + default: 8.0 + unit: m/s + min: 0.0 + max: 30.0 + increment: 1 + decimal: 2 + VT_ARSP_TRANS: + description: + short: Transition airspeed + long: Airspeed at which we can switch to fw mode + type: float + default: 10.0 + unit: m/s + min: 0.0 + max: 30.0 + increment: 1 + decimal: 2 + VT_TRANS_TIMEOUT: + description: + short: Front transition timeout + long: Time in seconds after which transition will be cancelled. + type: float + default: 15.0 + unit: s + min: 0.1 + max: 30.0 + increment: 1 + decimal: 2 + VT_TRANS_MIN_TM: + description: + short: Front transition minimum time + long: Minimum time in seconds for front transition. + type: float + default: 2.0 + unit: s + min: 0.0 + max: 20.0 + increment: 0.1 + decimal: 1 + VT_FW_MIN_ALT: + description: + short: Quad-chute altitude + long: |- + Minimum altitude for fixed-wing flight. When the vehicle is in fixed-wing mode + and the altitude drops below this altitude (relative altitude above local origin), + it will instantly switch back to MC mode and execute behavior defined in COM_QC_ACT. + type: float + default: 0.0 + unit: m + min: 0.0 + max: 200.0 + increment: 1 + decimal: 1 + VT_QC_ALT_LOSS: + description: + short: Quad-chute uncommanded descent threshold + long: |- + Altitude error threshold for quad-chute triggering during fixed-wing flight. + The check is only active if altitude is controlled and the vehicle is below the current altitude reference. + The altitude error is relative to the highest altitude the vehicle has achieved since it has flown below the current + altitude reference. + + Set to 0 do disable. + type: float + default: 0.0 + unit: m + min: 0.0 + max: 200.0 + increment: 1 + decimal: 1 + VT_QC_T_ALT_LOSS: + description: + short: Quad-chute transition altitude loss threshold + long: |- + Altitude loss threshold for quad-chute triggering during VTOL transition to fixed-wing flight + in altitude-controlled flight modes. + Active until 5s after completing transition to fixed-wing. + If the current altitude is more than this value below the altitude at the beginning of the + transition, it will instantly switch back to MC mode and execute behavior defined in COM_QC_ACT. + + Set to 0 do disable this threshold. + type: float + default: 20.0 + unit: m + min: 0 + max: 50 + increment: 1 + decimal: 1 + VT_FW_QC_P: + description: + short: Quad-chute max pitch threshold + long: |- + Absolute pitch threshold for quad-chute triggering in FW mode. + Above this the vehicle will transition back to MC mode and execute behavior defined in COM_QC_ACT. + Set to 0 do disable this threshold. + type: int32 + default: 0 + unit: deg + min: 0 + max: 180 + VT_FW_QC_R: + description: + short: Quad-chute max roll threshold + long: |- + Absolute roll threshold for quad-chute triggering in FW mode. + Above this the vehicle will transition back to MC mode and execute behavior defined in COM_QC_ACT. + Set to 0 do disable this threshold. + type: int32 + default: 0 + unit: deg + min: 0 + max: 180 + VT_FW_QC_HMAX: + description: + short: Quad-chute maximum height + long: |- + Maximum height above the ground (if available, otherwise above + Home if available, otherwise above the local origin) where triggering a quad-chute is possible. + At high altitudes there is a big risk to deplete the battery and therefore crash if quad-chuting there. + type: int32 + default: 0 + unit: m + min: 0 + increment: 1 + VT_F_TR_OL_TM: + description: + short: Airspeed-less front transition time (open loop) + long: |- + The duration of the front transition when there is no airspeed feedback available. + When airspeed is used, transition timeout is declared if airspeed does not + reach VT_ARSP_BLEND after this time. + type: float + default: 6.0 + unit: s + min: 1.0 + max: 30.0 + increment: 0.5 + decimal: 1 + VT_FW_DIFTHR_EN: + description: + short: Differential thrust in forwards flight + long: |- + Enable differential thrust separately for roll, pitch, yaw in forward (fixed-wing) mode. + The effectiveness of differential thrust around the corresponding axis can be + tuned by setting VT_FW_DIFTHR_S_R / VT_FW_DIFTHR_S_P / VT_FW_DIFTHR_S_Y. + type: bitmask + bit: + 0: Yaw + 1: Roll + 2: Pitch + default: 0 + min: 0 + max: 7 + VT_FW_DIFTHR_S_R: + description: + short: Roll differential thrust factor in forward flight + long: Differential thrust in forward flight is enabled via VT_FW_DIFTHR_EN. + type: float + default: 1.0 + min: 0.0 + max: 2.0 + decimal: 2 + increment: 0.1 + VT_FW_DIFTHR_S_P: + description: + short: Pitch differential thrust factor in forward flight + long: Differential thrust in forward flight is enabled via VT_FW_DIFTHR_EN. + type: float + default: 1.0 + min: 0.0 + max: 2.0 + decimal: 2 + increment: 0.1 + VT_FW_DIFTHR_S_Y: + description: + short: Yaw differential thrust factor in forward flight + long: Differential thrust in forward flight is enabled via VT_FW_DIFTHR_EN. + type: float + default: 0.1 + min: 0.0 + max: 2.0 + decimal: 2 + increment: 0.1 + VT_B_DEC_I: + description: + short: Backtransition deceleration setpoint to tilt I gain + type: float + default: 0.1 + unit: rad s/m + min: 0 + max: 0.3 + decimal: 2 + increment: 0.05 + VT_PITCH_MIN: + description: + short: Minimum pitch angle during hover + long: |- + Any pitch setpoint below this value is translated to a forward force by the fixed-wing forward actuation if + VT_FWD_TRHUST_EN is set. + type: float + default: 0.0 + unit: deg + min: -10.0 + max: 45.0 + increment: 0.1 + decimal: 1 + VT_LND_PITCH_MIN: + description: + short: Minimum pitch angle during hover landing + long: |- + Overrides VT_PITCH_MIN when the vehicle is in LAND mode (hovering). + During landing it can be beneficial to reduce the pitch angle to reduce the generated lift in head wind. + type: float + default: 0.0 + unit: deg + min: -10.0 + max: 45.0 + increment: 0.1 + decimal: 1 + VT_SPOILER_MC_LD: + description: + short: Spoiler setting while landing (hover) + type: float + default: 0.0 + unit: norm + min: -1 + max: 1 + decimal: 1 + increment: 0.1 diff --git a/src/modules/zenoh/CMakeLists.txt b/src/modules/zenoh/CMakeLists.txt index 5854b0fd88..cb6908d977 100644 --- a/src/modules/zenoh/CMakeLists.txt +++ b/src/modules/zenoh/CMakeLists.txt @@ -111,6 +111,7 @@ px4_add_module( ${CMAKE_CURRENT_BINARY_DIR}/default_topics.c MODULE_CONFIG module.yaml + zenoh_params.yaml DEPENDS cdr uorb_msgs diff --git a/src/modules/zenoh/Kconfig b/src/modules/zenoh/Kconfig index ae050c6ad8..1db97e7a30 100644 --- a/src/modules/zenoh/Kconfig +++ b/src/modules/zenoh/Kconfig @@ -35,6 +35,22 @@ if MODULES_ZENOH Uses the Zenoh matching feature to check whether a publisher has subscribers. If so, only then publish the data. This is still experimental + config ZENOH_KEY_TYPE_HASH + bool "Include the type hash in Zenoh key expression" + default y + ---help--- + Uses the message type hash (RIHS01, as defined in REP-2016) in the Zenoh key + expression (supported by ROS2 Jazzy and later). + Set to false to use in ROS2 Humble and earlier. + + config ZENOH_PUB_OPTION_OVERRIDE + bool "Enable per-publisher option overrides" + default n + ---help--- + Enable per-publisher overrides for Zenoh publisher options + (cc/express/prio/rel) via config file and CLI. + Disable this to reduce flash usage and use only global + publisher parameters (ZENOH_PUB_CC/REL/EXPR/PRIO). # Choose exactly one item choice ZENOH_PUBSUB_SELECTION diff --git a/src/modules/zenoh/dds_topics.yaml b/src/modules/zenoh/dds_topics.yaml index 6f6f3dc00a..1bde5af93a 100644 --- a/src/modules/zenoh/dds_topics.yaml +++ b/src/modules/zenoh/dds_topics.yaml @@ -2,17 +2,42 @@ # # This file maps all the topics that are to be used on the Zenoh client. # +# Per-publisher options can be overridden via an optional 'options' dict: +# +# - topic: /fmu/out/example +# type: px4_msgs::msg::Example +# options: +# cc: block # congestion_control: drop | block +# express: true # is_express: true | false +# prio: real_time # priority: real_time | interactive_high | interactive_low | +# # data_high | data | data_low | background +# rel: reliable # reliability: reliable | best_effort +# +# Omitting 'options' (or individual keys) inherits from global PX4 parameters +# ZENOH_PUB_CC / ZENOH_PUB_REL / ZENOH_PUB_EXPR / ZENOH_PUB_PRIO. ##### publications: - topic: /fmu/out/register_ext_component_reply type: px4_msgs::msg::RegisterExtComponentReply + options: + cc: block + rel: reliable + express: true - topic: /fmu/out/arming_check_request type: px4_msgs::msg::ArmingCheckRequest + options: + cc: block + rel: reliable + express: true - topic: /fmu/out/mode_completed type: px4_msgs::msg::ModeCompleted + options: + cc: block + rel: reliable + express: true - topic: /fmu/out/battery_status type: px4_msgs::msg::BatteryStatus @@ -46,24 +71,48 @@ publications: - topic: /fmu/out/vehicle_attitude type: px4_msgs::msg::VehicleAttitude + options: + cc: drop + rel: best_effort + express: true - topic: /fmu/out/vehicle_control_mode type: px4_msgs::msg::VehicleControlMode - topic: /fmu/out/vehicle_command_ack type: px4_msgs::msg::VehicleCommandAck + options: + cc: block + rel: reliable + express: true - topic: /fmu/out/vehicle_global_position type: px4_msgs::msg::VehicleGlobalPosition + options: + cc: drop + rel: best_effort + express: true - topic: /fmu/out/vehicle_gps_position type: px4_msgs::msg::SensorGps + options: + cc: drop + rel: best_effort + express: true - topic: /fmu/out/vehicle_local_position type: px4_msgs::msg::VehicleLocalPosition + options: + cc: drop + rel: best_effort + express: true - topic: /fmu/out/vehicle_odometry type: px4_msgs::msg::VehicleOdometry + options: + cc: drop + rel: best_effort + express: true - topic: /fmu/out/vehicle_status type: px4_msgs::msg::VehicleStatus diff --git a/src/modules/zenoh/default_topics.c.em b/src/modules/zenoh/default_topics.c.em index 9979ede692..5ac9f31106 100644 --- a/src/modules/zenoh/default_topics.c.em +++ b/src/modules/zenoh/default_topics.c.em @@ -18,15 +18,15 @@ import os const char* default_pub_config = @[ for pub in publications]@ - "@(pub['topic']);@(pub['simple_base_type']);0\n" + "@(pub['topic']);@(pub['topic_simple']);0@[if pub.get('pub_options_str')];@(pub['pub_options_str'])@[end if]\n" @[ end for]@ ; const char* default_sub_config = @[ for sub in subscriptions]@ - "@(sub['topic']);@(sub['simple_base_type']);0\n" + "@(sub['topic']);@(sub['topic_simple']);0\n" @[ end for]@ @[ for sub in subscriptions_multi]@ - "@(sub['topic']);@(sub['simple_base_type']);-1\n" + "@(sub['topic']);@(sub['topic_simple']);-1\n" @[ end for]@ ; diff --git a/src/modules/zenoh/publishers/zenoh_publisher.cpp b/src/modules/zenoh/publishers/zenoh_publisher.cpp index e38af892ae..aef04f5823 100644 --- a/src/modules/zenoh/publishers/zenoh_publisher.cpp +++ b/src/modules/zenoh/publishers/zenoh_publisher.cpp @@ -59,7 +59,8 @@ int Zenoh_Publisher::undeclare_publisher() return 0; } -int Zenoh_Publisher::declare_publisher(z_owned_session_t s, const char *keyexpr, uint8_t *gid) +int Zenoh_Publisher::declare_publisher(z_owned_session_t s, const char *keyexpr, uint8_t *gid, + z_publisher_options_t *opts) { z_view_keyexpr_t ke; @@ -68,7 +69,7 @@ int Zenoh_Publisher::declare_publisher(z_owned_session_t s, const char *keyexpr, return -1; } - if (z_declare_publisher(z_loan(s), &_pub, z_loan(ke), NULL) < 0) { + if (z_declare_publisher(z_loan(s), &_pub, z_loan(ke), opts) < 0) { printf("Unable to declare publisher for key expression!\n"); return -1; } @@ -109,7 +110,14 @@ z_result_t Zenoh_Publisher::publish(const uint8_t *buf, int size) void Zenoh_Publisher::print() { + const z_loaned_keyexpr_t *ke = z_publisher_keyexpr(z_loan(_pub)); + + if (ke == NULL) { + printf("Topic: (unavailable)\n"); + return; + } + z_view_string_t keystr; - z_keyexpr_as_view_string(z_publisher_keyexpr(z_loan(_pub)), &keystr); + z_keyexpr_as_view_string(ke, &keystr); printf("Topic: %.*s\n", (int)z_string_len(z_loan(keystr)), z_string_data(z_loan(keystr))); } diff --git a/src/modules/zenoh/publishers/zenoh_publisher.hpp b/src/modules/zenoh/publishers/zenoh_publisher.hpp index b787f39737..e9dfc38922 100644 --- a/src/modules/zenoh/publishers/zenoh_publisher.hpp +++ b/src/modules/zenoh/publishers/zenoh_publisher.hpp @@ -56,7 +56,8 @@ public: Zenoh_Publisher(); virtual ~Zenoh_Publisher(); - virtual int declare_publisher(z_owned_session_t s, const char *keyexpr, uint8_t *gid); + virtual int declare_publisher(z_owned_session_t s, const char *keyexpr, uint8_t *gid, + z_publisher_options_t *opts); virtual int undeclare_publisher(); diff --git a/src/modules/zenoh/subscribers/uorb_subscriber.hpp b/src/modules/zenoh/subscribers/uorb_subscriber.hpp index 823a455776..7335d641c0 100644 --- a/src/modules/zenoh/subscribers/uorb_subscriber.hpp +++ b/src/modules/zenoh/subscribers/uorb_subscriber.hpp @@ -79,6 +79,14 @@ public: const z_loaned_bytes_t *payload = z_sample_payload(sample); size_t len = z_bytes_len(payload); + // Validate payload size to prevent stack overflow from untrusted input. + // CDR payload = 4-byte header + serialized data, which should not exceed o_size + 4. + const size_t max_payload_size = _uorb_meta->o_size + 4; + + if (len > max_payload_size || len < 4) { + return; + } + #if defined(Z_FEATURE_UNSTABLE_API) // Check if payload is contiguous so we can decode directly on that pointer z_view_slice_t view; diff --git a/src/modules/zenoh/subscribers/zenoh_subscriber.cpp b/src/modules/zenoh/subscribers/zenoh_subscriber.cpp index 3c53c6053d..00db7a54f3 100644 --- a/src/modules/zenoh/subscribers/zenoh_subscriber.cpp +++ b/src/modules/zenoh/subscribers/zenoh_subscriber.cpp @@ -94,8 +94,15 @@ void Zenoh_Subscriber::print() void Zenoh_Subscriber::print(const char *type_string, const char *topic_string) { + const z_loaned_keyexpr_t *ke = z_subscriber_keyexpr(z_loan(_sub)); + + if (ke == NULL) { + printf("Topic: (unavailable) -> %s %s\n", type_string, topic_string); + return; + } + z_view_string_t keystr; - z_keyexpr_as_view_string(z_subscriber_keyexpr(z_loan(_sub)), &keystr); + z_keyexpr_as_view_string(ke, &keystr); printf("Topic: %.*s -> %s %s \n", (int)z_string_len(z_loan(keystr)), z_string_data(z_loan(keystr)), type_string, topic_string); } diff --git a/src/modules/zenoh/zenoh.cpp b/src/modules/zenoh/zenoh.cpp index 2b3f82e06e..d1ea6940ae 100644 --- a/src/modules/zenoh/zenoh.cpp +++ b/src/modules/zenoh/zenoh.cpp @@ -115,6 +115,8 @@ int ZENOH::generate_rmw_zenoh_topic_keyexpr(const char *topic, const uint8_t *ri if (type_name) { strncpy(type, type_name, TOPIC_INFO_SIZE); toCamelCase(type); // Convert uORB type to camel case + +#ifdef CONFIG_ZENOH_KEY_TYPE_HASH return snprintf(keyexpr, KEYEXPR_SIZE, "%" PRId32 "%s/" KEYEXPR_MSG_NAME "%s_/RIHS01_" "%02x%02x%02x%02x%02x%02x%02x%02x" @@ -131,6 +133,11 @@ int ZENOH::generate_rmw_zenoh_topic_keyexpr(const char *topic, const uint8_t *ri rihs_hash[24], rihs_hash[25], rihs_hash[26], rihs_hash[27], rihs_hash[28], rihs_hash[29], rihs_hash[30], rihs_hash[31] ); +#else + return snprintf(keyexpr, KEYEXPR_SIZE, "%" PRId32 "%s/" + KEYEXPR_MSG_NAME "%s_/TypeHashNotSupported", + _zenoh_domain_id.get(), topic, type); +#endif } return -1; @@ -155,6 +162,7 @@ int ZENOH::generate_rmw_zenoh_topic_liveliness_keyexpr(const z_id_t *id, const c str++; } +#ifdef CONFIG_ZENOH_KEY_TYPE_HASH return snprintf(keyexpr, KEYEXPR_SIZE, "@ros2_lv/%" PRId32 "/" "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x/" @@ -184,6 +192,25 @@ int ZENOH::generate_rmw_zenoh_topic_liveliness_keyexpr(const z_id_t *id, const c rihs_hash[24], rihs_hash[25], rihs_hash[26], rihs_hash[27], rihs_hash[28], rihs_hash[29], rihs_hash[30], rihs_hash[31] ); +#else + return snprintf(keyexpr, KEYEXPR_SIZE, + "@ros2_lv/%" PRId32 "/" + "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x/" + "0/11/%s/%%/%%/px4_%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x/%s/" + KEYEXPR_MSG_NAME "%s_/TypeHashNotSupported" + "/::,7:,:,:,,", + _zenoh_domain_id.get(), + id->id[0], id->id[1], id->id[2], id->id[3], id->id[4], id->id[5], id->id[6], + id->id[7], id->id[8], id->id[9], id->id[10], id->id[11], id->id[12], id->id[13], + id->id[14], id->id[15], + entity_str, + _px4_guid[0], _px4_guid[1], _px4_guid[2], _px4_guid[3], + _px4_guid[4], _px4_guid[5], _px4_guid[6], _px4_guid[7], + _px4_guid[8], _px4_guid[9], _px4_guid[10], _px4_guid[11], + _px4_guid[12], _px4_guid[13], _px4_guid[14], _px4_guid[15], + topic_lv, type_camel_case + ); +#endif } int ZENOH::setupSession() @@ -227,7 +254,6 @@ int ZENOH::setupSession() // Start read and lease tasks for zenoh-pico if (zp_start_read_task(z_loan_mut(_s), NULL) < 0 || zp_start_lease_task(z_loan_mut(_s), NULL) < 0) { PX4_ERR("Unable to start read and lease tasks"); - z_drop(z_move(_s)); ret = -EINVAL; } @@ -335,15 +361,38 @@ int ZENOH::setupTopics(px4_pollfd_struct_t *pfds) char topic[TOPIC_INFO_SIZE]; char type[TOPIC_INFO_SIZE]; int instance; + z_publisher_options_t global_opts; + z_publisher_options_default(&global_opts); + global_opts.congestion_control = (z_congestion_control_t)_zenoh_pub_cc.get(); + global_opts.is_express = (bool)_zenoh_pub_expr.get(); + global_opts.priority = (z_priority_t)_zenoh_pub_prio.get(); +#ifdef Z_FEATURE_UNSTABLE_API + global_opts.reliability = (z_reliability_t)_zenoh_pub_rel.get(); +#endif for (i = 0; i < _pub_count; i++) { + +#ifdef CONFIG_ZENOH_PUB_OPTION_OVERRIDE + z_publisher_options_t pub_opts = global_opts; +#endif + +#ifdef CONFIG_ZENOH_PUB_OPTION_OVERRIDE + + if (_config.getPublisherMapping(topic, type, &instance, &pub_opts)) { +#else + if (_config.getPublisherMapping(topic, type, &instance)) { +#endif _zenoh_publishers[i] = genPublisher(type, instance); const uint8_t *rihs_hash = getRIHS01_Hash(type); if (rihs_hash && _zenoh_publishers[i] != 0 && generate_rmw_zenoh_topic_keyexpr(topic, rihs_hash, type, keyexpr) > 0) { - _zenoh_publishers[i]->declare_publisher(_s, keyexpr, (uint8_t *)&_px4_guid); +#ifdef CONFIG_ZENOH_PUB_OPTION_OVERRIDE + _zenoh_publishers[i]->declare_publisher(_s, keyexpr, (uint8_t *)&_px4_guid, &pub_opts); +#else + _zenoh_publishers[i]->declare_publisher(_s, keyexpr, (uint8_t *)&_px4_guid, &global_opts); +#endif _zenoh_publishers[i]->setPollFD(&pfds[i]); #ifdef CONFIG_ZENOH_RMW_LIVELINESS @@ -388,6 +437,42 @@ int ZENOH::setupTopics(px4_pollfd_struct_t *pfds) return ret; } +void ZENOH::cleanupSession() +{ + PX4_INFO("Cleaning up Zenoh session..."); + + for (int i = 0; i < _sub_count; i++) { + if (_zenoh_subscribers && _zenoh_subscribers[i]) { + delete _zenoh_subscribers[i]; + } + } + + if (_zenoh_subscribers) { + free(_zenoh_subscribers); + _zenoh_subscribers = nullptr; + } + + for (int i = 0; i < _pub_count; i++) { + if (_zenoh_publishers && _zenoh_publishers[i]) { + delete _zenoh_publishers[i]; + } + } + + if (_zenoh_publishers) { + free(_zenoh_publishers); + _zenoh_publishers = nullptr; + } + + if (z_internal_check(_s)) { + zp_stop_read_task(z_session_loan_mut(&_s)); + zp_stop_lease_task(z_session_loan_mut(&_s)); + + z_drop(z_session_move(&_s)); + } + + connected = false; +} + void ZENOH::run() { z_result_t ret; @@ -398,6 +483,8 @@ void ZENOH::run() if (setupSession() < 0) { PX4_ERR("Failed to setup Zenoh session"); + cleanupSession(); + exit_and_cleanup(desc); return; } @@ -407,6 +494,8 @@ void ZENOH::run() if (setupTopics(pfds) < 0) { PX4_ERR("Failed to setup topics"); + cleanupSession(); + exit_and_cleanup(desc); return; } @@ -437,30 +526,7 @@ void ZENOH::run() } } - // Exiting cleaning up publisher and subscribers - for (i = 0; i < _sub_count; i++) { - if (_zenoh_subscribers[i]) { - delete _zenoh_subscribers[i]; - } - } - - free(_zenoh_subscribers); - - for (i = 0; i < _pub_count; i++) { - if (_zenoh_publishers[i]) { - delete _zenoh_publishers[i]; - } - } - - free(_zenoh_publishers); - - // Stop read and lease tasks for zenoh-pico - zp_stop_read_task(z_session_loan_mut(&_s)); - zp_stop_lease_task(z_session_loan_mut(&_s)); - - z_drop(z_session_move(&_s)); - - connected = false; + cleanupSession(); exit_and_cleanup(desc); } @@ -493,7 +559,15 @@ Zenoh demo bridge PRINT_MODULE_USAGE_COMMAND("stop"); PRINT_MODULE_USAGE_COMMAND("status"); PRINT_MODULE_USAGE_COMMAND("config"); + +#ifdef CONFIG_ZENOH_PUB_OPTION_OVERRIDE + PX4_INFO_RAW(" add publisher [uorb_instance] [options] Publish uORB topic to Zenoh\n"); + PX4_INFO_RAW(" [options] key=value pairs: cc=drop|block, express=true|false,\n"); + PX4_INFO_RAW(" prio=real_time|interactive_high|interactive_low|data_high|data|data_low|background,\n"); + PX4_INFO_RAW(" rel=reliable|best_effort (e.g. \"cc=block,express=true\")\n"); +#else PX4_INFO_RAW(" add publisher Publish uORB topic to Zenoh\n"); +#endif PX4_INFO_RAW(" add subscriber Publish Zenoh topic to uORB\n"); PX4_INFO_RAW(" delete publisher \n"); PX4_INFO_RAW(" delete subscriber \n"); diff --git a/src/modules/zenoh/zenoh.h b/src/modules/zenoh/zenoh.h index 1ff30a76f7..871c2a35bd 100644 --- a/src/modules/zenoh/zenoh.h +++ b/src/modules/zenoh/zenoh.h @@ -88,7 +88,11 @@ public: private: DEFINE_PARAMETERS( - (ParamInt) _zenoh_domain_id + (ParamInt) _zenoh_domain_id, + (ParamInt) _zenoh_pub_cc, + (ParamInt) _zenoh_pub_rel, + (ParamInt) _zenoh_pub_expr, + (ParamInt) _zenoh_pub_prio ) int generate_rmw_zenoh_node_liveliness_keyexpr(const z_id_t *id, char *keyexpr); @@ -97,6 +101,7 @@ private: char *type, char *keyexpr, const char *entity_str); int setupSession(); int setupTopics(px4_pollfd_struct_t *pfds); + void cleanupSession(); Zenoh_Config _config; diff --git a/src/modules/zenoh/zenoh_config.cpp b/src/modules/zenoh/zenoh_config.cpp index 1a88194348..cdcf8ec682 100644 --- a/src/modules/zenoh/zenoh_config.cpp +++ b/src/modules/zenoh/zenoh_config.cpp @@ -95,8 +95,13 @@ Zenoh_Config::~Zenoh_Config() } } -int Zenoh_Config::AddPubSub(char *topic, char *datatype, int instance_no, const char *filename) +int Zenoh_Config::AddPubSub(char *topic, char *datatype, int instance_no, const char *filename, + const char *options_str) { +#ifndef CONFIG_ZENOH_PUB_OPTION_OVERRIDE + (void)options_str; +#endif + { char f_topic[TOPIC_INFO_SIZE]; char f_type[TOPIC_INFO_SIZE]; @@ -120,7 +125,18 @@ int Zenoh_Config::AddPubSub(char *topic, char *datatype, int instance_no, const FILE *fp = fopen(filename, "a"); if (fp) { +#ifdef CONFIG_ZENOH_PUB_OPTION_OVERRIDE + + if (options_str && options_str[0] != '\0') { + fprintf(fp, "%s;%s;%d;%s\n", topic, datatype, instance_no, options_str); + + } else { + fprintf(fp, "%s;%s;%d\n", topic, datatype, instance_no); + } + +#else fprintf(fp, "%s;%s;%d\n", topic, datatype, instance_no); +#endif } else { return -1; @@ -292,12 +308,60 @@ int Zenoh_Config::cli(int argc, char *argv[]) if (strcmp(argv[2], "publisher") == 0) { int instance = 0; +#ifdef CONFIG_ZENOH_PUB_OPTION_OVERRIDE + const char *options_str = nullptr; + if (argc == 6) { + int parsed_instance; + + if (sscanf(argv[5], "%d", &parsed_instance) == 1 && parsed_instance >= 0) { + instance = parsed_instance; + + } else { + options_str = argv[5]; + } + + } else if (argc == 7) { if (sscanf(argv[5], "%d", &instance) != 1 || instance < 0) { - printf("Invalid instance %s (must be an integer, 0 for the default instance or a specific instance's index)\n", - argv[5]); + printf("Invalid instance %s (must be a non-negative integer)\n", argv[5]); return 0; } + + options_str = argv[6]; + + } else if (argc > 7) { + printf("Too many arguments\n"); + return 0; + } + + if (options_str && !parsePublisherOptions(options_str, nullptr)) { + return 0; + } + + if (AddPubSub(argv[3], argv[4], instance, ZENOH_PUB_CONFIG_PATH, options_str) > 0) { + if (options_str) { + printf("Added %s %s to publishers (instance %d, options: %s)\n", argv[3], argv[4], instance, + options_str); + + } else { + printf("Added %s %s to publishers (instance %d)\n", argv[3], argv[4], instance); + } + + } else { + printf("Could not add uORB %s:%d -> %s to publishers\n", argv[3], instance, argv[4]); + } + +#else + + if (argc == 6) { + if (sscanf(argv[5], "%d", &instance) != 1 || instance < 0) { + printf("Invalid instance %s (must be a non-negative integer)\n", argv[5]); + return 0; + } + + } else if (argc > 6) { + printf("Too many arguments\n"); + return 0; } if (AddPubSub(argv[3], argv[4], instance, ZENOH_PUB_CONFIG_PATH) > 0) { @@ -307,6 +371,8 @@ int Zenoh_Config::cli(int argc, char *argv[]) printf("Could not add uORB %s:%d -> %s to publishers\n", argv[3], instance, argv[4]); } +#endif + } else if (strcmp(argv[2], "subscriber") == 0) { int instance = 0; @@ -443,9 +509,128 @@ int Zenoh_Config::closePubSubMapping() } -// Very rudamentary here but we've to wait for a more advanced param system -int Zenoh_Config::getPubSubMapping(char *topic, char *type, int *instance, const char *filename) +#ifdef CONFIG_ZENOH_PUB_OPTION_OVERRIDE +bool Zenoh_Config::parsePublisherOptions(const char *options_str, z_publisher_options_t *opts) { + if (options_str == nullptr || options_str[0] == '\0') { + return true; + } + + char buf[ZENOH_PUB_OPTIONS_SIZE]; + strncpy(buf, options_str, sizeof(buf) - 1); + buf[sizeof(buf) - 1] = '\0'; + + int len = strlen(buf); + + while (len > 0 && (buf[len - 1] == '\n' || buf[len - 1] == '\r' || buf[len - 1] == ' ')) { + buf[--len] = '\0'; + } + + bool valid = true; + char *saveptr_pair = nullptr; + char *pair = strtok_r(buf, ",", &saveptr_pair); + + while (pair != nullptr) { + char *eq = strchr(pair, '='); + + if (eq != nullptr) { + *eq = '\0'; + const char *key = pair; + const char *val = eq + 1; + + if (strcmp(key, "cc") == 0) { + if (strcmp(val, "block") == 0) { + if (opts) { opts->congestion_control = Z_CONGESTION_CONTROL_BLOCK; } + + } else if (strcmp(val, "drop") == 0) { + if (opts) { opts->congestion_control = Z_CONGESTION_CONTROL_DROP; } + + } else { + PX4_WARN("Invalid cc value '%s' (valid: block, drop)", val); + valid = false; + } + + } else if (strcmp(key, "express") == 0) { + if (strcmp(val, "true") == 0) { + if (opts) { opts->is_express = true; } + + } else if (strcmp(val, "false") == 0) { + if (opts) { opts->is_express = false; } + + } else { + PX4_WARN("Invalid express value '%s' (valid: true, false)", val); + valid = false; + } + + } else if (strcmp(key, "prio") == 0) { + if (strcmp(val, "real_time") == 0) { + if (opts) { opts->priority = Z_PRIORITY_REAL_TIME; } + + } else if (strcmp(val, "interactive_high") == 0) { + if (opts) { opts->priority = Z_PRIORITY_INTERACTIVE_HIGH; } + + } else if (strcmp(val, "interactive_low") == 0) { + if (opts) { opts->priority = Z_PRIORITY_INTERACTIVE_LOW; } + + } else if (strcmp(val, "data_high") == 0) { + if (opts) { opts->priority = Z_PRIORITY_DATA_HIGH; } + + } else if (strcmp(val, "data") == 0) { + if (opts) { opts->priority = Z_PRIORITY_DATA; } + + } else if (strcmp(val, "data_low") == 0) { + if (opts) { opts->priority = Z_PRIORITY_DATA_LOW; } + + } else if (strcmp(val, "background") == 0) { + if (opts) { opts->priority = Z_PRIORITY_BACKGROUND; } + + } else { + PX4_WARN("Invalid prio value '%s' (valid: real_time, interactive_high, interactive_low, data_high, data, data_low, background)", + val); + valid = false; + } + +#ifdef Z_FEATURE_UNSTABLE_API + + } else if (strcmp(key, "rel") == 0) { + if (strcmp(val, "reliable") == 0) { + if (opts) { opts->reliability = Z_RELIABILITY_RELIABLE; } + + } else if (strcmp(val, "best_effort") == 0) { + if (opts) { opts->reliability = Z_RELIABILITY_BEST_EFFORT; } + + } else { + PX4_WARN("Invalid rel value '%s' (valid: reliable, best_effort)", val); + valid = false; + } + +#endif + + } else { + PX4_WARN("Unknown publisher option key '%s' (valid: cc, express, prio, rel)", key); + valid = false; + } + + } else { + PX4_WARN("Malformed option '%s' (expected key=value)", pair); + valid = false; + } + + pair = strtok_r(nullptr, ",", &saveptr_pair); + } + + return valid; +} +#endif + + +// Very rudamentary here but we've to wait for a more advanced param system +int Zenoh_Config::getPubSubMapping(char *topic, char *type, int *instance, const char *filename, char *options_str) +{ +#ifndef CONFIG_ZENOH_PUB_OPTION_OVERRIDE + (void)options_str; +#endif + char buffer[MAX_LINE_SIZE]; if (fp_mapping == NULL) { @@ -456,12 +641,17 @@ int Zenoh_Config::getPubSubMapping(char *topic, char *type, int *instance, const while (fgets(buffer, MAX_LINE_SIZE, fp_mapping) != NULL) { if (buffer[0] != '\n') { +#ifdef CONFIG_ZENOH_PUB_OPTION_OVERRIDE + const char *fields[4]; + int nfields = parse_csv_line(buffer, fields, 4); +#else const char *fields[3]; int nfields = parse_csv_line(buffer, fields, 3); +#endif if (nfields >= 2) { - if (nfields == 3) { + if (nfields >= 3) { if (sscanf(fields[2], "%d", instance) != 1) { PX4_WARN("Malformed zenoh config instance %s (instance field should be an integer following the type)\n", fields[2]); return -1; @@ -471,6 +661,20 @@ int Zenoh_Config::getPubSubMapping(char *topic, char *type, int *instance, const *instance = -1; } +#ifdef CONFIG_ZENOH_PUB_OPTION_OVERRIDE + + if (options_str != nullptr) { + if (nfields >= 4 && fields[3] != nullptr) { + strncpy(options_str, fields[3], ZENOH_PUB_OPTIONS_SIZE - 1); + options_str[ZENOH_PUB_OPTIONS_SIZE - 1] = '\0'; + + } else { + options_str[0] = '\0'; + } + } + +#endif + strncpy(type, fields[1], TOPIC_INFO_SIZE); strncpy(topic, fields[0], TOPIC_INFO_SIZE); return 1; @@ -518,14 +722,35 @@ void Zenoh_Config::dump_config() char type[TOPIC_INFO_SIZE]; int instance_no; +#ifdef CONFIG_ZENOH_PUB_OPTION_OVERRIDE + char options_str[ZENOH_PUB_OPTIONS_SIZE]; +#endif + printf("Publisher config:\n"); + +#ifdef CONFIG_ZENOH_PUB_OPTION_OVERRIDE + + while (getPubSubMapping(topic, type, &instance_no, ZENOH_PUB_CONFIG_PATH, options_str) > 0) { + printf("Topic: %s\n", topic); + printf("Type: %s\n", type); + printf("Instance: %d\n", instance_no); + + if (options_str[0] != '\0') { + printf("Options: %s\n", options_str); + } + } + +#else + while (getPubSubMapping(topic, type, &instance_no, ZENOH_PUB_CONFIG_PATH) > 0) { printf("Topic: %s\n", topic); printf("Type: %s\n", type); printf("Instance: %d\n", instance_no); } +#endif + printf("\nSubscriber config:\n"); while (getPubSubMapping(topic, type, &instance_no, ZENOH_SUB_CONFIG_PATH) > 0) { diff --git a/src/modules/zenoh/zenoh_config.hpp b/src/modules/zenoh/zenoh_config.hpp index e92abdb1c7..c818f97a59 100644 --- a/src/modules/zenoh/zenoh_config.hpp +++ b/src/modules/zenoh/zenoh_config.hpp @@ -61,8 +61,13 @@ #define KEYEXPR_MSG_NAME "px4_msgs::msg::dds_::" #define KEYEXPR_MSG_NAME_SIZE sizeof(KEYEXPR_MSG_NAME) #define TOPIC_INFO_SIZE (96) +#ifdef CONFIG_ZENOH_PUB_OPTION_OVERRIDE +#define ZENOH_PUB_OPTIONS_SIZE (64) +#define MAX_LINE_SIZE (2 * TOPIC_INFO_SIZE + ZENOH_PUB_OPTIONS_SIZE + 4) +#else #define MAX_LINE_SIZE (2 * TOPIC_INFO_SIZE) -#define KEYEXPR_SIZE (MAX_LINE_SIZE + KEYEXPR_MSG_NAME_SIZE + KEYEXPR_RIHS01_SIZE + 128) +#endif +#define KEYEXPR_SIZE (2 * TOPIC_INFO_SIZE + KEYEXPR_MSG_NAME_SIZE + KEYEXPR_RIHS01_SIZE + 128) class Zenoh_Config { @@ -81,9 +86,22 @@ public: { return getLineCount(ZENOH_SUB_CONFIG_PATH); } - int getPublisherMapping(char *topic, char *type, int *instance) + int getPublisherMapping(char *topic, char *type, int *instance, z_publisher_options_t *opts = nullptr) { + (void)opts; +#ifdef CONFIG_ZENOH_PUB_OPTION_OVERRIDE + char options_str[ZENOH_PUB_OPTIONS_SIZE]; + int ret = getPubSubMapping(topic, type, instance, ZENOH_PUB_CONFIG_PATH, options_str); + + if (ret > 0 && opts != nullptr) { + parsePublisherOptions(options_str, opts); + } + + return ret; + +#else return getPubSubMapping(topic, type, instance, ZENOH_PUB_CONFIG_PATH); +#endif } // existing_instance will be either 0 (should create a new instance) or nonzero (should reuse the existing 0 instance) int getSubscriberMapping(char *topic, char *type, int *existing_instance) @@ -94,8 +112,12 @@ public: private: - int getPubSubMapping(char *topic, char *type, int *new_instance, const char *filename); - int AddPubSub(char *topic, char *datatype, int new_instance, const char *filename); +#ifdef CONFIG_ZENOH_PUB_OPTION_OVERRIDE + bool parsePublisherOptions(const char *options_str, z_publisher_options_t *opts); +#endif + int getPubSubMapping(char *topic, char *type, int *new_instance, const char *filename, char *options_str = nullptr); + int AddPubSub(char *topic, char *datatype, int new_instance, const char *filename, + const char *options_str = nullptr); int DeletePubSub(char *topic, const char *filename); int SetNetworkConfig(char *mode, char *locator); int getLineCount(const char *filename); diff --git a/src/modules/zenoh/zenoh_params.c b/src/modules/zenoh/zenoh_params.c deleted file mode 100644 index 1eddfb63f8..0000000000 --- a/src/modules/zenoh/zenoh_params.c +++ /dev/null @@ -1,48 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2025 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * AS IS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file zenoh_params.c - * - * Parameters defined by Zenoh - * - * @author Peter van der Perk - */ - -/** - * ROS2 RMW_ZENOH_CPP Domain id - * - * @min 0 - * @max 232 - */ -PARAM_DEFINE_INT32(ZENOH_DOMAIN_ID, 0); diff --git a/src/modules/zenoh/zenoh_params.yaml b/src/modules/zenoh/zenoh_params.yaml new file mode 100644 index 0000000000..b7f0d39677 --- /dev/null +++ b/src/modules/zenoh/zenoh_params.yaml @@ -0,0 +1,60 @@ +module_name: zenoh +parameters: +- group: Miscellaneous + definitions: + ZENOH_DOMAIN_ID: + description: + short: ROS2 RMW_ZENOH_CPP Domain id + type: int32 + default: 0 + min: 0 + max: 232 + ZENOH_PUB_CC: + description: + short: Zenoh publisher congestion control (global default) + type: int32 + default: 0 + min: 0 + max: 1 + values: + 0: Drop + 1: Block + reboot_required: true + ZENOH_PUB_REL: + description: + short: Zenoh publisher reliability (global default) + type: int32 + default: 0 + min: 0 + max: 1 + values: + 0: Reliable + 1: BestEffort + reboot_required: true + ZENOH_PUB_EXPR: + description: + short: Zenoh publisher express mode (global default) + type: int32 + default: 0 + min: 0 + max: 1 + values: + 0: Disabled + 1: Enabled + reboot_required: true + ZENOH_PUB_PRIO: + description: + short: Zenoh publisher priority (global default) + type: int32 + default: 5 + min: 1 + max: 7 + values: + 1: RealTime + 2: InteractiveHigh + 3: InteractiveLow + 4: DataHigh + 5: Data + 6: DataLow + 7: Background + reboot_required: true diff --git a/src/systemcmds/i2cdetect/i2cdetect.cpp b/src/systemcmds/i2cdetect/i2cdetect.cpp index cf2ce1290a..d383cb1cff 100644 --- a/src/systemcmds/i2cdetect/i2cdetect.cpp +++ b/src/systemcmds/i2cdetect/i2cdetect.cpp @@ -50,7 +50,7 @@ namespace i2cdetect int detect(int bus) { - printf("Scanning I2C bus: %d\n", bus); + PX4_INFO("Scanning I2C bus: %d", bus); int ret = PX4_ERROR; @@ -62,15 +62,17 @@ int detect(int bus) return PX4_ERROR; } - printf(" 0 1 2 3 4 5 6 7 8 9 a b c d e f\n"); + // Line buffer for building up output + char line[80]; + int pos = 0; + + PX4_INFO(" 0 1 2 3 4 5 6 7 8 9 a b c d e f"); for (int i = 0; i < 128; i += 16) { - printf("%02x: ", i); + pos = snprintf(line, sizeof(line), "%02x: ", i); for (int j = 0; j < 16; j++) { - fflush(stdout); - uint8_t addr = i + j; unsigned retry_count = 0; @@ -115,14 +117,14 @@ int detect(int bus) } while (retry_count++ < retries); if (found) { - printf("%02x ", addr); + pos += snprintf(line + pos, sizeof(line) - pos, "%02x ", addr); } else { - printf("-- "); + pos += snprintf(line + pos, sizeof(line) - pos, "-- "); } } - printf("\n"); + PX4_INFO("%s", line); } px4_i2cbus_uninitialize(i2c_dev); diff --git a/boards/cuav/x25-evo/core_heater/CMakeLists.txt b/src/systemcmds/mklittlefs/CMakeLists.txt similarity index 91% rename from boards/cuav/x25-evo/core_heater/CMakeLists.txt rename to src/systemcmds/mklittlefs/CMakeLists.txt index 7fdaa6d89e..c58cc37937 100644 --- a/boards/cuav/x25-evo/core_heater/CMakeLists.txt +++ b/src/systemcmds/mklittlefs/CMakeLists.txt @@ -1,6 +1,6 @@ ############################################################################ # -# Copyright (c) 2025 PX4 Development Team. All rights reserved. +# Copyright (c) 2026 PX4 Development Team. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -31,9 +31,11 @@ # ############################################################################ px4_add_module( - MODULE drivers__core_heater - MAIN core_heater + MODULE systemcmds__mklittlefs + MAIN mklittlefs + STACK_MAIN 2048 COMPILE_FLAGS SRCS - core_heater.cpp + mklittlefs.cpp + DEPENDS ) diff --git a/src/systemcmds/mklittlefs/Kconfig b/src/systemcmds/mklittlefs/Kconfig new file mode 100644 index 0000000000..e17ede2e78 --- /dev/null +++ b/src/systemcmds/mklittlefs/Kconfig @@ -0,0 +1,12 @@ +menuconfig SYSTEMCMDS_MKLITTLEFS + bool "mklittlefs" + default n + ---help--- + Enable support for mklittlefs + +menuconfig USER_MKLITTLEFS + bool "mklittlefs running as userspace module" + default y + depends on BOARD_PROTECTED && SYSTEMCMDS_MKLITTLEFS + ---help--- + Put mklittlefs in userspace memory diff --git a/src/modules/events/events_params.c b/src/systemcmds/mklittlefs/mklittlefs.cpp similarity index 62% rename from src/modules/events/events_params.c rename to src/systemcmds/mklittlefs/mklittlefs.cpp index d9336bf32d..2beecf3c56 100644 --- a/src/modules/events/events_params.c +++ b/src/systemcmds/mklittlefs/mklittlefs.cpp @@ -1,6 +1,6 @@ /**************************************************************************** * - * Copyright (c) 2018 PX4 Development Team. All rights reserved. + * Copyright (c) 2026 PX4 Development Team. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -32,40 +32,47 @@ ****************************************************************************/ /** - * @file events_params.c + * @file mklittlefs.cpp * - * Parameters defined by the events module. + * Format a device with littlefs filesystem. */ #include -#include +#include +#include -/** - * Status Display - * - * Enable/disable event task for displaying the vehicle status using arm-mounted - * LEDs. When enabled and if the vehicle supports it, LEDs will flash - * indicating various vehicle status changes. Currently PX4 has not implemented - * any specific status events. - * - - * - * @group Events - * @boolean - * @reboot_required true - */ -PARAM_DEFINE_INT32(EV_TSK_STAT_DIS, 0); +#include +#include +#include -/** - * RC Loss Alarm - * - * Enable/disable event task for RC Loss. When enabled, an alarm tune will be - * played via buzzer or ESCs, if supported. The alarm will sound after a disarm, - * if the vehicle was previously armed and only if the vehicle had RC signal at - * some point. Particularly useful for locating crashed drones without a GPS - * sensor. - * - * @group Events - * @boolean - * @reboot_required true - */ -PARAM_DEFINE_INT32(EV_TSK_RC_LOSS, 0); +static void print_usage() +{ + PRINT_MODULE_DESCRIPTION("Format a device with the littlefs filesystem."); + + PRINT_MODULE_USAGE_NAME_SIMPLE("mklittlefs", "command"); + PRINT_MODULE_USAGE_ARG(" ", "Device and mount point (e.g. /dev/mtd0 /fs/flash)", false); +} + +extern "C" __EXPORT int mklittlefs_main(int argc, char *argv[]) +{ + if (argc < 3) { + print_usage(); + return 1; + } + + const char *device = argv[1]; + const char *mountpoint = argv[2]; + + // Try to unmount first (ignore error if not mounted) + umount(mountpoint); + + int ret = mount(device, mountpoint, "littlefs", 0, "forceformat"); + + if (ret < 0) { + PX4_ERR("format failed: %s", strerror(errno)); + return 1; + } + + PX4_INFO("formatted %s as littlefs, mounted at %s", device, mountpoint); + return 0; +} diff --git a/src/systemcmds/mtd/mtd.cpp b/src/systemcmds/mtd/mtd.cpp index e36140723a..553e51e7d9 100644 --- a/src/systemcmds/mtd/mtd.cpp +++ b/src/systemcmds/mtd/mtd.cpp @@ -158,7 +158,7 @@ static void print_usage() int mtd_erase(mtd_instance_s &instance) { - uint8_t v[64]; + uint8_t v[32]; memset(v, 0xFF, sizeof(v)); for (uint8_t i = 0; i < instance.n_partitions_current; i++) { @@ -192,7 +192,7 @@ int mtd_erase(mtd_instance_s &instance) */ int mtd_readtest(const mtd_instance_s &instance) { - uint8_t v[128]; + uint8_t v[32]; for (uint8_t i = 0; i < instance.n_partitions_current; i++) { ssize_t count = 0; @@ -236,7 +236,7 @@ int mtd_readtest(const mtd_instance_s &instance) */ int mtd_rwtest(const mtd_instance_s &instance) { - uint8_t v[128], v2[128]; + uint8_t v[32], v2[32]; for (uint8_t i = 0; i < instance.n_partitions_current; i++) { ssize_t count = 0; diff --git a/src/systemcmds/param/param.cpp b/src/systemcmds/param/param.cpp index 8194cfffa5..f9bd28365c 100644 --- a/src/systemcmds/param/param.cpp +++ b/src/systemcmds/param/param.cpp @@ -81,6 +81,7 @@ static int do_import(const char *param_file_name = nullptr); static int do_show(const char *search_string, bool only_changed); static int do_show_for_airframe(); static int do_show_all(); +static int do_show_locked(); static int do_show_quiet(const char *param_name); static int do_show_index(const char *index, bool used_index); static void do_show_print(void *arg, param_t param); @@ -138,6 +139,7 @@ $ reboot PRINT_MODULE_USAGE_COMMAND_DESCR("show", "Show parameter values"); PRINT_MODULE_USAGE_PARAM_FLAG('a', "Show all parameters (not just used)", true); PRINT_MODULE_USAGE_PARAM_FLAG('c', "Show only changed params (unused too)", true); + PRINT_MODULE_USAGE_PARAM_FLAG('l', "Show only locked (read-only) params", true); PRINT_MODULE_USAGE_PARAM_FLAG('q', "quiet mode, print only param value (name needs to be exact)", true); PRINT_MODULE_USAGE_ARG("", "Filter by param name (wildcard at end allowed, eg. sys_*)", true); @@ -179,6 +181,8 @@ $ reboot PRINT_MODULE_USAGE_ARG("", "Index: an integer >= 0", false); PRINT_MODULE_USAGE_COMMAND_DESCR("find", "Show index of a param"); PRINT_MODULE_USAGE_ARG("", "param name", false); + + PRINT_MODULE_USAGE_COMMAND_DESCR("lock", "Lock read-only params (reject future set/reset)"); } int @@ -268,6 +272,9 @@ param_main(int argc, char *argv[]) } else if (!strcmp(argv[2], "-a")) { return do_show_all(); + } else if (!strcmp(argv[2], "-l")) { + return do_show_locked(); + } else if (!strcmp(argv[2], "-q")) { if (argc >= 4) { return do_show_quiet(argv[3]); @@ -405,6 +412,11 @@ param_main(int argc, char *argv[]) return 1; } } + + if (!strcmp(argv[1], "lock")) { + param_lock_readonly(); + return 0; + } } print_usage(); @@ -508,7 +520,7 @@ do_save_default() static int do_show(const char *search_string, bool only_changed) { - PX4_INFO_RAW("Symbols: x = used, + = saved, * = unsaved\n"); + PX4_INFO_RAW("Symbols: x = used, + = saved, * = unsaved, l = locked\n"); // also show unused params if we show non-default values only param_foreach(do_show_print, (char *)search_string, only_changed, !only_changed); PX4_INFO_RAW("\n %u/%u parameters used.\n", param_count_used(), param_count()); @@ -531,13 +543,30 @@ do_show_for_airframe() static int do_show_all() { - PX4_INFO_RAW("Symbols: x = used, + = saved, * = unsaved\n"); + PX4_INFO_RAW("Symbols: x = used, + = saved, * = unsaved, l = locked\n"); param_foreach(do_show_print, nullptr, false, false); PX4_INFO_RAW("\n %u parameters total, %u used.\n", param_count(), param_count_used()); return 0; } +static void +do_show_print_locked(void *arg, param_t param) +{ + if (param_is_readonly(param)) { + do_show_print(arg, param); + } +} + +static int +do_show_locked() +{ + PX4_INFO_RAW("Symbols: x = used, + = saved, * = unsaved, l = locked\n"); + param_foreach(do_show_print_locked, nullptr, false, false); + + return 0; +} + static int do_show_quiet(const char *param_name) { @@ -607,8 +636,9 @@ do_show_index(const char *index, bool used_index) return 1; } - PX4_INFO_RAW("index %d: %c %c %s [%d,%d] : ", i, (param_used(param) ? 'x' : ' '), + PX4_INFO_RAW("index %d: %c %c %c %s [%d,%d] : ", i, (param_used(param) ? 'x' : ' '), param_value_unsaved(param) ? '*' : (param_value_is_default(param) ? ' ' : '+'), + param_is_readonly(param) ? 'l' : ' ', param_name(param), param_get_used_index(param), param_get_index(param)); switch (param_type(param)) { @@ -677,8 +707,9 @@ do_show_print(void *arg, param_t param) } } - PX4_INFO_RAW("%c %c %s [%d,%d] : ", (param_used(param) ? 'x' : ' '), + PX4_INFO_RAW("%c %c %c %s [%d,%d] : ", (param_used(param) ? 'x' : ' '), param_value_unsaved(param) ? '*' : (param_value_is_default(param) ? ' ' : '+'), + param_is_readonly(param) ? 'l' : ' ', param_name(param), param_get_used_index(param), param_get_index(param)); /* @@ -725,8 +756,7 @@ do_show_print_for_airframe(void *arg, param_t param) } if (!strncmp(p_name, "RC", 2) || !strncmp(p_name, "TC_", 3) || !strncmp(p_name, "CAL_", 4) || - !strncmp(p_name, "SENS_BOARD_", 11) || !strcmp(p_name, "SENS_DPRES_OFF") || - !strcmp(p_name, "MAV_TYPE")) { + !strcmp(p_name, "SENS_DPRES_OFF") || !strcmp(p_name, "MAV_TYPE")) { return; } @@ -772,6 +802,11 @@ do_set(const char *name, const char *val, bool fail_on_not_found) return (fail_on_not_found) ? 1 : 0; } + if (param_is_readonly(param)) { + PX4_ERR("Parameter %s is read-only.", name); + return 1; + } + /* * Set parameter if type is known and conversion from string to value turns out fine */ @@ -839,6 +874,14 @@ do_set_custom_default(const char *name, const char *val, bool silent_fail) return PX4_ERROR; } + if (param_is_readonly(param)) { + if (!silent_fail) { + PX4_ERR("Parameter %s is read-only.", name); + } + + return PX4_ERROR; + } + // Set parameter if type is known and conversion from string to value turns out fine switch (param_type(param)) { case PARAM_TYPE_INT32: { diff --git a/src/systemcmds/tests/CMakeLists.txt b/src/systemcmds/tests/CMakeLists.txt index 2beab87943..2fdec3c070 100644 --- a/src/systemcmds/tests/CMakeLists.txt +++ b/src/systemcmds/tests/CMakeLists.txt @@ -91,6 +91,8 @@ px4_add_module( -O2 # optimization needed to keep matrix code size reasonable SRCS ${srcs} + MODULE_CONFIG + params.yaml DEPENDS dataman_client version diff --git a/src/systemcmds/tests/params.c b/src/systemcmds/tests/params.c deleted file mode 100644 index 26adf3b905..0000000000 --- a/src/systemcmds/tests/params.c +++ /dev/null @@ -1,62 +0,0 @@ -/**************************************************************************** - * - * Copyright (C) 2017 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * AS IS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @group Testing - */ -PARAM_DEFINE_INT32(TEST_1, 2); - -/** - * @group Testing - */ -PARAM_DEFINE_INT32(TEST_2, 4); - -/** - * @group Testing - */ -PARAM_DEFINE_FLOAT(TEST_3, 5.0f); - -/** - * @group Testing - */ -PARAM_DEFINE_INT32(TEST_RC_X, 8); - -/** - * @group Testing - */ -PARAM_DEFINE_INT32(TEST_RC2_X, 16); - -/** - * @group Testing - */ -PARAM_DEFINE_INT32(TEST_PARAMS, 12345678); diff --git a/src/systemcmds/tests/params.yaml b/src/systemcmds/tests/params.yaml new file mode 100644 index 0000000000..04f9746259 --- /dev/null +++ b/src/systemcmds/tests/params.yaml @@ -0,0 +1,34 @@ +module_name: tests +parameters: +- group: Testing + definitions: + TEST_1: + description: + short: TEST_1 + type: int32 + default: 2 + TEST_2: + description: + short: TEST_2 + type: int32 + default: 4 + TEST_3: + description: + short: TEST_3 + type: float + default: 5.0 + TEST_RC_X: + description: + short: TEST_RC_X + type: int32 + default: 8 + TEST_RC2_X: + description: + short: TEST_RC2_X + type: int32 + default: 16 + TEST_PARAMS: + description: + short: TEST_PARAMS + type: int32 + default: 12345678 diff --git a/src/templates/Kconfig b/src/templates/Kconfig new file mode 100644 index 0000000000..6353836988 --- /dev/null +++ b/src/templates/Kconfig @@ -0,0 +1 @@ +rsource "*/Kconfig" diff --git a/src/templates/template_module/Kconfig b/src/templates/template_module/Kconfig new file mode 100644 index 0000000000..704f45ea32 --- /dev/null +++ b/src/templates/template_module/Kconfig @@ -0,0 +1,5 @@ +menuconfig TEMPLATES_TEMPLATE_MODULE + bool "template_module" + default n + ---help--- + Enable support for template_module diff --git a/src/templates/template_module/template_module.cpp b/src/templates/template_module/template_module.cpp index ef185cfe2e..ce572fec43 100644 --- a/src/templates/template_module/template_module.cpp +++ b/src/templates/template_module/template_module.cpp @@ -38,8 +38,8 @@ #include #include -#include +ModuleBase::Descriptor TemplateModule::desc{task_spawn, custom_command, print_usage}; int TemplateModule::print_status() { @@ -52,14 +52,14 @@ int TemplateModule::print_status() int TemplateModule::custom_command(int argc, char *argv[]) { /* - if (!is_running()) { + if (!is_running(desc)) { print_usage("not running"); return 1; } // additional custom commands can be handled like this: if (!strcmp(argv[0], "do-something")) { - get_instance()->do_something(); + get_instance(desc)->do_something(); return 0; } */ @@ -144,42 +144,20 @@ TemplateModule::TemplateModule(int example_param, bool example_flag) void TemplateModule::run() { - // Example: run the loop synchronized to the sensor_combined topic publication - int sensor_combined_sub = orb_subscribe(ORB_ID(sensor_combined)); - - px4_pollfd_struct_t fds[1]; - fds[0].fd = sensor_combined_sub; - fds[0].events = POLLIN; - // initialize parameters parameters_update(true); while (!should_exit()) { - // wait for up to 1000ms for data - int pret = px4_poll(fds, (sizeof(fds) / sizeof(fds[0])), 1000); - - if (pret == 0) { - // Timeout: let the loop run anyway, don't do `continue` here - - } else if (pret < 0) { - // this is undesirable but not much we can do - PX4_ERR("poll error %d, %d", pret, errno); - px4_usleep(50000); - continue; - - } else if (fds[0].revents & POLLIN) { - - struct sensor_combined_s sensor_combined; - orb_copy(ORB_ID(sensor_combined), sensor_combined_sub, &sensor_combined); + if (_sensor_accel_sub.updated()) { + sensor_accel_s accel{}; + _sensor_accel_sub.copy(&accel); // TODO: do something with the data... - } parameters_update(); + px4_usleep(10_ms); } - - orb_unsubscribe(sensor_combined_sub); } void TemplateModule::parameters_update(bool force) diff --git a/src/templates/template_module/template_module.h b/src/templates/template_module/template_module.h index a6f51d6cb0..cdf63f7a66 100644 --- a/src/templates/template_module/template_module.h +++ b/src/templates/template_module/template_module.h @@ -35,17 +35,21 @@ #include #include +#include #include #include +#include using namespace time_literals; extern "C" __EXPORT int template_module_main(int argc, char *argv[]); -class TemplateModule : public ModuleBase, public ModuleParams +class TemplateModule : public ModuleBase, public ModuleParams { public: + static Descriptor desc; + TemplateModule(int example_param, bool example_flag); virtual ~TemplateModule() = default; @@ -87,5 +91,6 @@ private: // Subscriptions uORB::SubscriptionInterval _parameter_update_sub{ORB_ID(parameter_update), 1_s}; + uORB::Subscription _sensor_accel_sub{ORB_ID(sensor_accel)}; }; diff --git a/test/rostest_px4_run.sh b/test/rostest_px4_run.sh index f3964d82a1..e66e833e61 100755 --- a/test/rostest_px4_run.sh +++ b/test/rostest_px4_run.sh @@ -1,4 +1,4 @@ -#! /bin/bash +#!/usr/bin/env bash DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) PX4_SRC_DIR=${DIR}/.. diff --git a/validation/module_schema.yaml b/validation/module_schema.yaml index a2f77f75ee..edc245f485 100644 --- a/validation/module_schema.yaml +++ b/validation/module_schema.yaml @@ -144,7 +144,7 @@ parameters: allowed: [ '%', 'Hz', '1/s', 'mAh', 'rad', '%/rad', 'rad/s', 'rad/s^2', '%/rad/s', 'rad s^2/m','rad s/m', - 'bit/s', 'B/s', + 'bit/s', 'B/s', 'MiB', 'deg', 'deg*1e7', 'deg/s', 'deg/s^2', 'celcius', 'gauss', 'gauss/s', 'mgauss', 'mgauss^2', 'hPa', 'kg', 'kg/m^2', 'kg m^2', 'kg/m^3', @@ -155,7 +155,8 @@ parameters: 'm/s^3/sqrt(Hz)', 'm/s/sqrt(Hz)', 's/(1000*PWM)', '%m/s', 'min', 'us/C', 'N/(m/s)', 'Nm/(rad/s)', 'Nm', 'N', 'rpm', - 'normalized_thrust/s', 'normalized_thrust', 'norm', 'SD', 'dBHz'] + 'normalized_thrust/s', 'normalized_thrust', 'norm', 'SD', 'dBHz', + '1/s/sqrt(Hz)', 'liters'] bit: # description of all bits for type bitmask. # The first bit is 0. @@ -330,28 +331,6 @@ actuator_output: # ui only shows the param if this condition is true type: string regex: *condition_regex - max: - type: dict - schema: - min: - # Minimum maximum value - type: integer - min: 0 - max: 65536 - max: - # Maximum maximum value - type: integer - min: 0 - max: 65536 - default: - # Default maximum value - type: integer - min: 0 - max: 65536 - show_if: - # ui only shows the param if this condition is true - type: string - regex: *condition_regex center: type: dict schema: @@ -374,6 +353,28 @@ actuator_output: # ui only shows the param if this condition is true type: string regex: *condition_regex + max: + type: dict + schema: + min: + # Minimum maximum value + type: integer + min: 0 + max: 65536 + max: + # Maximum maximum value + type: integer + min: 0 + max: 65536 + default: + # Default maximum value + type: integer + min: 0 + max: 65536 + show_if: + # ui only shows the param if this condition is true + type: string + regex: *condition_regex failsafe: type: dict schema: